From 7b75da706bf852114d792cf3b0f3c73ae0ca0fb8 Mon Sep 17 00:00:00 2001 From: Peter Breitenlohner Date: Tue, 10 Nov 2009 14:02:38 +0000 Subject: directories not used for build moved to extra/ git-svn-id: svn://tug.org/texlive/trunk@15980 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/Makefile.am | 1 + Build/source/Makefile.in | 1 + Build/source/README.coding | 70 + Build/source/extra/djgpp/ChangeLog | 69 + Build/source/extra/djgpp/README.djgpp | 207 + Build/source/extra/djgpp/cfgdtl.pat | 19 + Build/source/extra/djgpp/cfgdvidv.pat | 19 + Build/source/extra/djgpp/cfgdvilj.pat | 29 + Build/source/extra/djgpp/cfgdvips.pat | 31 + Build/source/extra/djgpp/cfgdvpdf.pat | 19 + Build/source/extra/djgpp/cfggsfpk.pat | 19 + Build/source/extra/djgpp/cfgkpath.pat | 30 + Build/source/extra/djgpp/cfglachk.pat | 19 + Build/source/extra/djgpp/cfgmain.pat | 29 + Build/source/extra/djgpp/cfgmkind.pat | 19 + Build/source/extra/djgpp/cfgmusix.pat | 19 + Build/source/extra/djgpp/cfgpspkm.pat | 19 + Build/source/extra/djgpp/cfgseetx.pat | 19 + Build/source/extra/djgpp/cfgtexht.pat | 19 + Build/source/extra/djgpp/cfgweb2c.pat | 38 + Build/source/extra/djgpp/config.bat | 272 + Build/source/extra/djgpp/pathconf.c | 47 + Build/source/extra/djgpp/popen.c | 218 + Build/source/extra/djgpp/putenv.c | 143 + Build/source/extra/djgpp/stat.c | 935 + Build/source/extra/djgpp/xstat.h | 71 + Build/source/extra/epstopdf/Makefile | 64 + Build/source/extra/epstopdf/README | 26 + Build/source/extra/epstopdf/epstopdf.1 | 78 + Build/source/extra/epstopdf/epstopdf.pl | 582 + Build/source/extra/epstopdf/test-atend.eps | 138 + Build/source/extra/epstopdf/test-bin2.eps | 14670 ++++++++++++++ Build/source/extra/epstopdf/test-binary.eps | 433 + Build/source/extra/epstopdf/test-binhdr-cr.eps | Bin 0 -> 4699 bytes Build/source/extra/epstopdf/test-binhdr-crlf.eps | Bin 0 -> 4935 bytes Build/source/extra/epstopdf/test-binhdr-lf.eps | Bin 0 -> 4699 bytes Build/source/extra/epstopdf/test-simple.eps | 12 + Build/source/extra/expat/COPYING | 21 + Build/source/extra/expat/Changes | 34 + Build/source/extra/expat/MANIFEST | 58 + Build/source/extra/expat/Makefile.in | 148 + Build/source/extra/expat/README | 57 + Build/source/extra/expat/aclocal.m4 | 425 + Build/source/extra/expat/config.hin | 65 + Build/source/extra/expat/configure | 7042 +++++++ Build/source/extra/expat/configure.in | 87 + Build/source/extra/expat/conftools/config.guess | 1494 ++ Build/source/extra/expat/conftools/config.sub | 1700 ++ Build/source/extra/expat/conftools/install-sh | 520 + Build/source/extra/expat/conftools/ltconfig | 3114 +++ Build/source/extra/expat/conftools/ltmain.sh | 4025 ++++ Build/source/extra/expat/conftools/missing | 376 + Build/source/extra/expat/conftools/mkinstalldirs | 162 + Build/source/extra/expat/doc/reference.html | 1493 ++ Build/source/extra/expat/doc/style.css | 47 + Build/source/extra/expat/examples/Makefile.in | 29 + Build/source/extra/expat/examples/outline.c | 86 + Build/source/extra/expat/lib/Makefile.in | 168 + Build/source/extra/expat/lib/ascii.h | 86 + Build/source/extra/expat/lib/asciitab.h | 37 + Build/source/extra/expat/lib/config.h | 27 + Build/source/extra/expat/lib/expat.dep | 32 + Build/source/extra/expat/lib/expat.dsp | 105 + Build/source/extra/expat/lib/expat.dsw | 29 + Build/source/extra/expat/lib/expat.h | 712 + Build/source/extra/expat/lib/expat.mak | 168 + Build/source/extra/expat/lib/expat.plg | 16 + Build/source/extra/expat/lib/expat.vcproj | 121 + Build/source/extra/expat/lib/iasciitab.h | 38 + Build/source/extra/expat/lib/latin1tab.h | 37 + Build/source/extra/expat/lib/nametab.h | 150 + Build/source/extra/expat/lib/utf8tab.h | 38 + Build/source/extra/expat/lib/winconfig.h | 29 + Build/source/extra/expat/lib/xmlparse.c | 4625 +++++ Build/source/extra/expat/lib/xmlrole.c | 1275 ++ Build/source/extra/expat/lib/xmlrole.h | 100 + Build/source/extra/expat/lib/xmltok.c | 1568 ++ Build/source/extra/expat/lib/xmltok.h | 299 + Build/source/extra/expat/lib/xmltok_impl.c | 1768 ++ Build/source/extra/expat/lib/xmltok_impl.h | 46 + Build/source/extra/expat/lib/xmltok_ns.c | 98 + Build/source/extra/expat/xmlwf/Makefile.in | 15 + Build/source/extra/expat/xmlwf/codepage.c | 65 + Build/source/extra/expat/xmlwf/codepage.h | 7 + Build/source/extra/expat/xmlwf/ct.c | 145 + Build/source/extra/expat/xmlwf/filemap.h | 17 + Build/source/extra/expat/xmlwf/readfilemap.c | 74 + Build/source/extra/expat/xmlwf/unixfilemap.c | 57 + Build/source/extra/expat/xmlwf/wfcheck.c | 953 + Build/source/extra/expat/xmlwf/wfcheck.h | 38 + Build/source/extra/expat/xmlwf/wfcheckmessage.c | 30 + Build/source/extra/expat/xmlwf/win32filemap.c | 95 + Build/source/extra/expat/xmlwf/xmlfile.c | 217 + Build/source/extra/expat/xmlwf/xmlfile.h | 11 + Build/source/extra/expat/xmlwf/xmlmime.c | 161 + Build/source/extra/expat/xmlwf/xmlmime.h | 19 + Build/source/extra/expat/xmlwf/xmltchar.h | 36 + Build/source/extra/expat/xmlwf/xmlurl.h | 13 + Build/source/extra/expat/xmlwf/xmlwf.c | 759 + Build/source/extra/expat/xmlwf/xmlwf.dsp | 136 + Build/source/extra/expat/xmlwf/xmlwin32url.cxx | 371 + Build/source/extra/jpeg/README | 385 + Build/source/extra/jpeg/ansi2knr.1 | 36 + Build/source/extra/jpeg/ansi2knr.c | 693 + Build/source/extra/jpeg/cderror.h | 132 + Build/source/extra/jpeg/cdjpeg.c | 181 + Build/source/extra/jpeg/cdjpeg.h | 184 + Build/source/extra/jpeg/cjpeg.1 | 292 + Build/source/extra/jpeg/cjpeg.c | 606 + Build/source/extra/jpeg/ckconfig.c | 402 + Build/source/extra/jpeg/coderules.doc | 118 + Build/source/extra/jpeg/config.guess | 1494 ++ Build/source/extra/jpeg/config.sub | 1700 ++ Build/source/extra/jpeg/configure | 2011 ++ Build/source/extra/jpeg/djpeg.1 | 253 + Build/source/extra/jpeg/djpeg.c | 616 + Build/source/extra/jpeg/example.c | 433 + Build/source/extra/jpeg/filelist.doc | 210 + Build/source/extra/jpeg/install-sh | 520 + Build/source/extra/jpeg/install.doc | 1063 + Build/source/extra/jpeg/jcapimin.c | 280 + Build/source/extra/jpeg/jcapistd.c | 161 + Build/source/extra/jpeg/jccoefct.c | 449 + Build/source/extra/jpeg/jccolor.c | 459 + Build/source/extra/jpeg/jcdctmgr.c | 387 + Build/source/extra/jpeg/jchuff.c | 909 + Build/source/extra/jpeg/jchuff.h | 47 + Build/source/extra/jpeg/jcinit.c | 72 + Build/source/extra/jpeg/jcmainct.c | 293 + Build/source/extra/jpeg/jcmarker.c | 664 + Build/source/extra/jpeg/jcmaster.c | 590 + Build/source/extra/jpeg/jcomapi.c | 106 + Build/source/extra/jpeg/jconfig.bcc | 48 + Build/source/extra/jpeg/jconfig.cfg | 44 + Build/source/extra/jpeg/jconfig.dj | 38 + Build/source/extra/jpeg/jconfig.doc | 155 + Build/source/extra/jpeg/jconfig.mac | 43 + Build/source/extra/jpeg/jconfig.manx | 43 + Build/source/extra/jpeg/jconfig.mc6 | 52 + Build/source/extra/jpeg/jconfig.sas | 43 + Build/source/extra/jpeg/jconfig.st | 42 + Build/source/extra/jpeg/jconfig.vc | 71 + Build/source/extra/jpeg/jconfig.vms | 37 + Build/source/extra/jpeg/jconfig.wat | 38 + Build/source/extra/jpeg/jcparam.c | 610 + Build/source/extra/jpeg/jcphuff.c | 833 + Build/source/extra/jpeg/jcprepct.c | 354 + Build/source/extra/jpeg/jcsample.c | 519 + Build/source/extra/jpeg/jctrans.c | 388 + Build/source/extra/jpeg/jdapimin.c | 395 + Build/source/extra/jpeg/jdapistd.c | 275 + Build/source/extra/jpeg/jdatadst.c | 151 + Build/source/extra/jpeg/jdatasrc.c | 212 + Build/source/extra/jpeg/jdcoefct.c | 736 + Build/source/extra/jpeg/jdcolor.c | 396 + Build/source/extra/jpeg/jdct.h | 176 + Build/source/extra/jpeg/jddctmgr.c | 269 + Build/source/extra/jpeg/jdhuff.c | 651 + Build/source/extra/jpeg/jdhuff.h | 201 + Build/source/extra/jpeg/jdinput.c | 381 + Build/source/extra/jpeg/jdmainct.c | 512 + Build/source/extra/jpeg/jdmarker.c | 1360 ++ Build/source/extra/jpeg/jdmaster.c | 557 + Build/source/extra/jpeg/jdmerge.c | 400 + Build/source/extra/jpeg/jdphuff.c | 668 + Build/source/extra/jpeg/jdpostct.c | 290 + Build/source/extra/jpeg/jdsample.c | 478 + Build/source/extra/jpeg/jdtrans.c | 143 + Build/source/extra/jpeg/jerror.c | 252 + Build/source/extra/jpeg/jerror.h | 291 + Build/source/extra/jpeg/jfdctflt.c | 168 + Build/source/extra/jpeg/jfdctfst.c | 224 + Build/source/extra/jpeg/jfdctint.c | 283 + Build/source/extra/jpeg/jidctflt.c | 242 + Build/source/extra/jpeg/jidctfst.c | 368 + Build/source/extra/jpeg/jidctint.c | 389 + Build/source/extra/jpeg/jidctred.c | 398 + Build/source/extra/jpeg/jinclude.h | 91 + Build/source/extra/jpeg/jmemansi.c | 167 + Build/source/extra/jpeg/jmemdos.c | 638 + Build/source/extra/jpeg/jmemdosa.asm | 379 + Build/source/extra/jpeg/jmemmac.c | 289 + Build/source/extra/jpeg/jmemmgr.c | 1118 ++ Build/source/extra/jpeg/jmemname.c | 276 + Build/source/extra/jpeg/jmemnobs.c | 109 + Build/source/extra/jpeg/jmemsys.h | 198 + Build/source/extra/jpeg/jmorecfg.h | 366 + Build/source/extra/jpeg/jpegint.h | 392 + Build/source/extra/jpeg/jpeglib.h | 1096 ++ Build/source/extra/jpeg/jpegtran.1 | 238 + Build/source/extra/jpeg/jpegtran.c | 504 + Build/source/extra/jpeg/jquant1.c | 856 + Build/source/extra/jpeg/jquant2.c | 1310 ++ Build/source/extra/jpeg/jutils.c | 179 + Build/source/extra/jpeg/jversion.h | 14 + Build/source/extra/jpeg/libjpeg.doc | 3006 +++ Build/source/extra/jpeg/ltconfig | 1512 ++ Build/source/extra/jpeg/ltmain.sh | 2453 +++ Build/source/extra/jpeg/makcjpeg.st | 38 + Build/source/extra/jpeg/makdjpeg.st | 38 + Build/source/extra/jpeg/makeapps.ds | 828 + Build/source/extra/jpeg/makefile.ansi | 214 + Build/source/extra/jpeg/makefile.bcc | 285 + Build/source/extra/jpeg/makefile.cfg | 319 + Build/source/extra/jpeg/makefile.dj | 220 + Build/source/extra/jpeg/makefile.manx | 214 + Build/source/extra/jpeg/makefile.mc6 | 249 + Build/source/extra/jpeg/makefile.mms | 218 + Build/source/extra/jpeg/makefile.sas | 252 + Build/source/extra/jpeg/makefile.unix | 228 + Build/source/extra/jpeg/makefile.vc | 211 + Build/source/extra/jpeg/makefile.vms | 142 + Build/source/extra/jpeg/makefile.wat | 233 + Build/source/extra/jpeg/makelib.ds | 1046 + Build/source/extra/jpeg/makeproj.mac | 213 + Build/source/extra/jpeg/makljpeg.st | 70 + Build/source/extra/jpeg/maktjpeg.st | 32 + Build/source/extra/jpeg/makvms.opt | 4 + Build/source/extra/jpeg/rdbmp.c | 439 + Build/source/extra/jpeg/rdcolmap.c | 253 + Build/source/extra/jpeg/rdgif.c | 38 + Build/source/extra/jpeg/rdjpgcom.1 | 54 + Build/source/extra/jpeg/rdjpgcom.c | 496 + Build/source/extra/jpeg/rdppm.c | 458 + Build/source/extra/jpeg/rdrle.c | 387 + Build/source/extra/jpeg/rdswitch.c | 332 + Build/source/extra/jpeg/rdtarga.c | 500 + Build/source/extra/jpeg/structure.doc | 948 + Build/source/extra/jpeg/testimg.bmp | Bin 0 -> 35050 bytes Build/source/extra/jpeg/testimg.jpg | Bin 0 -> 5756 bytes Build/source/extra/jpeg/testimg.ppm | 4 + Build/source/extra/jpeg/testimgp.jpg | Bin 0 -> 5645 bytes Build/source/extra/jpeg/testorig.jpg | Bin 0 -> 5770 bytes Build/source/extra/jpeg/testprog.jpg | Bin 0 -> 5655 bytes Build/source/extra/jpeg/transupp.c | 928 + Build/source/extra/jpeg/transupp.h | 135 + Build/source/extra/jpeg/usage.doc | 562 + Build/source/extra/jpeg/wizard.doc | 211 + Build/source/extra/jpeg/wrbmp.c | 442 + Build/source/extra/jpeg/wrgif.c | 399 + Build/source/extra/jpeg/wrjpgcom.1 | 103 + Build/source/extra/jpeg/wrjpgcom.c | 583 + Build/source/extra/jpeg/wrppm.c | 268 + Build/source/extra/jpeg/wrrle.c | 305 + Build/source/extra/jpeg/wrtarga.c | 253 + Build/source/extra/unzip/api.c | 601 + Build/source/extra/unzip/consts.h | 46 + Build/source/extra/unzip/crc32.c | 56 + Build/source/extra/unzip/crctab.c | 219 + Build/source/extra/unzip/crypt.c | 12 + Build/source/extra/unzip/crypt.h | 24 + Build/source/extra/unzip/ebcdic.h | 272 + Build/source/extra/unzip/explode.c | 871 + Build/source/extra/unzip/extract.c | 1985 ++ Build/source/extra/unzip/fileio.c | 2151 ++ Build/source/extra/unzip/globals.c | 204 + Build/source/extra/unzip/globals.h | 395 + Build/source/extra/unzip/inflate.c | 1305 ++ Build/source/extra/unzip/inflate.h | 24 + Build/source/extra/unzip/list.c | 644 + Build/source/extra/unzip/match.c | 294 + Build/source/extra/unzip/process.c | 1378 ++ Build/source/extra/unzip/ttyio.c | 625 + Build/source/extra/unzip/ttyio.h | 186 + Build/source/extra/unzip/unreduce.c | 230 + Build/source/extra/unzip/unshrink.c | 301 + Build/source/extra/unzip/unzip.dep | 191 + Build/source/extra/unzip/unzip.dsp | 258 + Build/source/extra/unzip/unzip.dsw | 29 + Build/source/extra/unzip/unzip.h | 545 + Build/source/extra/unzip/unzip.mak | 369 + Build/source/extra/unzip/unzip.plg | 30 + Build/source/extra/unzip/unzip.vcproj | 235 + Build/source/extra/unzip/unzpriv.h | 2387 +++ Build/source/extra/unzip/version.h | 44 + Build/source/extra/unzip/win32/nt.c | 659 + Build/source/extra/unzip/win32/nt.h | 28 + Build/source/extra/unzip/win32/w32cfg.h | 222 + Build/source/extra/unzip/win32/win32.c | 2390 +++ Build/source/extra/unzip/windll/decs.h | 29 + Build/source/extra/unzip/windll/structs.h | 72 + Build/source/extra/unzip/windll/unzver.h | 15 + Build/source/extra/unzip/windll/windll.c | 744 + Build/source/extra/unzip/windll/windll.h | 46 + Build/source/extra/unzip/zip.h | 15 + Build/source/extra/unzip/zipinfo.c | 1912 ++ Build/source/extra/xz-4.999.9beta/ABOUT-NLS | 1101 ++ Build/source/extra/xz-4.999.9beta/AUTHORS | 27 + Build/source/extra/xz-4.999.9beta/COPYING | 65 + Build/source/extra/xz-4.999.9beta/COPYING.GPLv2 | 339 + Build/source/extra/xz-4.999.9beta/COPYING.GPLv3 | 674 + Build/source/extra/xz-4.999.9beta/COPYING.LGPLv2.1 | 504 + Build/source/extra/xz-4.999.9beta/ChangeLog | 7041 +++++++ Build/source/extra/xz-4.999.9beta/Doxyfile.in | 1234 ++ Build/source/extra/xz-4.999.9beta/INSTALL | 339 + Build/source/extra/xz-4.999.9beta/INSTALL.generic | 302 + Build/source/extra/xz-4.999.9beta/Makefile.am | 80 + Build/source/extra/xz-4.999.9beta/Makefile.in | 887 + Build/source/extra/xz-4.999.9beta/NEWS | 0 Build/source/extra/xz-4.999.9beta/PACKAGERS | 279 + Build/source/extra/xz-4.999.9beta/README | 217 + Build/source/extra/xz-4.999.9beta/THANKS | 47 + Build/source/extra/xz-4.999.9beta/TODO | 56 + Build/source/extra/xz-4.999.9beta/aclocal.m4 | 1027 + Build/source/extra/xz-4.999.9beta/autogen.sh | 22 + .../source/extra/xz-4.999.9beta/build-aux/compile | 143 + .../extra/xz-4.999.9beta/build-aux/config.guess | 1494 ++ .../extra/xz-4.999.9beta/build-aux/config.rpath | 614 + .../extra/xz-4.999.9beta/build-aux/config.sub | 1700 ++ .../source/extra/xz-4.999.9beta/build-aux/depcomp | 630 + .../extra/xz-4.999.9beta/build-aux/install-sh | 520 + .../extra/xz-4.999.9beta/build-aux/ltmain.sh | 8406 ++++++++ .../source/extra/xz-4.999.9beta/build-aux/missing | 376 + Build/source/extra/xz-4.999.9beta/config.h.in | 404 + Build/source/extra/xz-4.999.9beta/configure | 19363 +++++++++++++++++++ Build/source/extra/xz-4.999.9beta/configure.ac | 706 + .../source/extra/xz-4.999.9beta/debug/Makefile.am | 30 + .../source/extra/xz-4.999.9beta/debug/Makefile.in | 580 + Build/source/extra/xz-4.999.9beta/debug/README | 17 + Build/source/extra/xz-4.999.9beta/debug/crc32.c | 38 + .../source/extra/xz-4.999.9beta/debug/full_flush.c | 102 + Build/source/extra/xz-4.999.9beta/debug/hex2bin.c | 53 + .../extra/xz-4.999.9beta/debug/known_sizes.c | 129 + Build/source/extra/xz-4.999.9beta/debug/memusage.c | 49 + Build/source/extra/xz-4.999.9beta/debug/repeat.c | 36 + .../source/extra/xz-4.999.9beta/debug/sync_flush.c | 133 + Build/source/extra/xz-4.999.9beta/doc/faq.txt | 122 + Build/source/extra/xz-4.999.9beta/doc/history.txt | 149 + .../extra/xz-4.999.9beta/doc/lzma-file-format.txt | 166 + .../extra/xz-4.999.9beta/doc/man/pdf-a4/xz-a4.pdf | Bin 0 -> 38867 bytes .../xz-4.999.9beta/doc/man/pdf-a4/xzdec-a4.pdf | Bin 0 -> 6914 bytes .../xz-4.999.9beta/doc/man/pdf-a4/xzdiff-a4.pdf | Bin 0 -> 4240 bytes .../xz-4.999.9beta/doc/man/pdf-a4/xzgrep-a4.pdf | Bin 0 -> 4443 bytes .../xz-4.999.9beta/doc/man/pdf-a4/xzless-a4.pdf | Bin 0 -> 4329 bytes .../xz-4.999.9beta/doc/man/pdf-a4/xzmore-a4.pdf | Bin 0 -> 4211 bytes .../doc/man/pdf-letter/xz-letter.pdf | Bin 0 -> 38846 bytes .../doc/man/pdf-letter/xzdec-letter.pdf | Bin 0 -> 6909 bytes .../doc/man/pdf-letter/xzdiff-letter.pdf | Bin 0 -> 4239 bytes .../doc/man/pdf-letter/xzgrep-letter.pdf | Bin 0 -> 4440 bytes .../doc/man/pdf-letter/xzless-letter.pdf | Bin 0 -> 4326 bytes .../doc/man/pdf-letter/xzmore-letter.pdf | Bin 0 -> 4210 bytes .../source/extra/xz-4.999.9beta/doc/man/txt/xz.txt | 786 + .../extra/xz-4.999.9beta/doc/man/txt/xzdec.txt | 95 + .../extra/xz-4.999.9beta/doc/man/txt/xzdiff.txt | 36 + .../extra/xz-4.999.9beta/doc/man/txt/xzgrep.txt | 39 + .../extra/xz-4.999.9beta/doc/man/txt/xzless.txt | 40 + .../extra/xz-4.999.9beta/doc/man/txt/xzmore.txt | 34 + .../extra/xz-4.999.9beta/doc/xz-file-format.txt | 1150 ++ Build/source/extra/xz-4.999.9beta/dos/Makefile | 255 + Build/source/extra/xz-4.999.9beta/dos/README | 113 + Build/source/extra/xz-4.999.9beta/dos/config.h | 150 + .../xz-4.999.9beta/extra/7z2lzma/7z2lzma.bash | 115 + .../extra/xz-4.999.9beta/extra/scanlzma/scanlzma.c | 84 + Build/source/extra/xz-4.999.9beta/lib/Makefile.am | 32 + Build/source/extra/xz-4.999.9beta/lib/Makefile.in | 525 + Build/source/extra/xz-4.999.9beta/lib/getopt.c | 1197 ++ Build/source/extra/xz-4.999.9beta/lib/getopt.in.h | 226 + Build/source/extra/xz-4.999.9beta/lib/getopt1.c | 171 + Build/source/extra/xz-4.999.9beta/lib/getopt_int.h | 131 + .../source/extra/xz-4.999.9beta/m4/acx_pthread.m4 | 279 + Build/source/extra/xz-4.999.9beta/m4/getopt.m4 | 71 + Build/source/extra/xz-4.999.9beta/m4/gettext.m4 | 419 + Build/source/extra/xz-4.999.9beta/m4/iconv.m4 | 101 + .../source/extra/xz-4.999.9beta/m4/lc_cpucores.m4 | 57 + Build/source/extra/xz-4.999.9beta/m4/lc_physmem.m4 | 84 + Build/source/extra/xz-4.999.9beta/m4/lib-ld.m4 | 110 + Build/source/extra/xz-4.999.9beta/m4/lib-link.m4 | 644 + Build/source/extra/xz-4.999.9beta/m4/lib-prefix.m4 | 185 + Build/source/extra/xz-4.999.9beta/m4/libtool.m4 | 7357 +++++++ Build/source/extra/xz-4.999.9beta/m4/ltoptions.m4 | 368 + Build/source/extra/xz-4.999.9beta/m4/ltsugar.m4 | 123 + Build/source/extra/xz-4.999.9beta/m4/ltversion.m4 | 23 + .../source/extra/xz-4.999.9beta/m4/lt~obsolete.m4 | 92 + Build/source/extra/xz-4.999.9beta/m4/nls.m4 | 31 + Build/source/extra/xz-4.999.9beta/m4/po.m4 | 428 + .../source/extra/xz-4.999.9beta/m4/posix-shell.m4 | 63 + Build/source/extra/xz-4.999.9beta/m4/progtest.m4 | 92 + Build/source/extra/xz-4.999.9beta/m4/visibility.m4 | 52 + Build/source/extra/xz-4.999.9beta/po/LINGUAS | 0 .../source/extra/xz-4.999.9beta/po/Makefile.in.in | 403 + Build/source/extra/xz-4.999.9beta/po/Makevars | 46 + Build/source/extra/xz-4.999.9beta/po/POTFILES.in | 10 + Build/source/extra/xz-4.999.9beta/po/Rules-quot | 47 + Build/source/extra/xz-4.999.9beta/po/boldquot.sed | 10 + .../extra/xz-4.999.9beta/po/en@boldquot.header | 25 + .../source/extra/xz-4.999.9beta/po/en@quot.header | 22 + .../extra/xz-4.999.9beta/po/insert-header.sin | 23 + Build/source/extra/xz-4.999.9beta/po/quot.sed | 6 + .../extra/xz-4.999.9beta/po/remove-potcdate.sin | 19 + Build/source/extra/xz-4.999.9beta/po/stamp-po | 1 + Build/source/extra/xz-4.999.9beta/po/xz.pot | 481 + Build/source/extra/xz-4.999.9beta/src/Makefile.am | 9 + Build/source/extra/xz-4.999.9beta/src/Makefile.in | 598 + .../source/extra/xz-4.999.9beta/src/common/bswap.h | 52 + .../xz-4.999.9beta/src/common/common_w32res.rc | 53 + .../extra/xz-4.999.9beta/src/common/cpucores.h | 51 + .../extra/xz-4.999.9beta/src/common/integer.h | 170 + .../extra/xz-4.999.9beta/src/common/mythread.h | 42 + .../extra/xz-4.999.9beta/src/common/open_stdxxx.h | 49 + .../extra/xz-4.999.9beta/src/common/physmem.h | 134 + .../extra/xz-4.999.9beta/src/common/sysdefs.h | 169 + .../extra/xz-4.999.9beta/src/liblzma/Makefile.am | 94 + .../extra/xz-4.999.9beta/src/liblzma/Makefile.in | 1728 ++ .../xz-4.999.9beta/src/liblzma/api/Makefile.am | 23 + .../xz-4.999.9beta/src/liblzma/api/Makefile.in | 512 + .../extra/xz-4.999.9beta/src/liblzma/api/lzma.h | 321 + .../xz-4.999.9beta/src/liblzma/api/lzma/base.h | 596 + .../xz-4.999.9beta/src/liblzma/api/lzma/bcj.h | 90 + .../xz-4.999.9beta/src/liblzma/api/lzma/block.h | 534 + .../xz-4.999.9beta/src/liblzma/api/lzma/check.h | 150 + .../src/liblzma/api/lzma/container.h | 404 + .../xz-4.999.9beta/src/liblzma/api/lzma/delta.h | 77 + .../xz-4.999.9beta/src/liblzma/api/lzma/filter.h | 360 + .../xz-4.999.9beta/src/liblzma/api/lzma/index.h | 403 + .../src/liblzma/api/lzma/index_hash.h | 107 + .../xz-4.999.9beta/src/liblzma/api/lzma/lzma.h | 410 + .../src/liblzma/api/lzma/stream_flags.h | 227 + .../xz-4.999.9beta/src/liblzma/api/lzma/subblock.h | 200 + .../xz-4.999.9beta/src/liblzma/api/lzma/version.h | 121 + .../xz-4.999.9beta/src/liblzma/api/lzma/vli.h | 168 + .../xz-4.999.9beta/src/liblzma/check/Makefile.inc | 51 + .../extra/xz-4.999.9beta/src/liblzma/check/check.c | 174 + .../extra/xz-4.999.9beta/src/liblzma/check/check.h | 95 + .../xz-4.999.9beta/src/liblzma/check/crc32_fast.c | 82 + .../xz-4.999.9beta/src/liblzma/check/crc32_small.c | 61 + .../xz-4.999.9beta/src/liblzma/check/crc32_table.c | 19 + .../src/liblzma/check/crc32_table_be.h | 525 + .../src/liblzma/check/crc32_table_le.h | 525 + .../src/liblzma/check/crc32_tablegen.c | 91 + .../xz-4.999.9beta/src/liblzma/check/crc32_x86.S | 304 + .../xz-4.999.9beta/src/liblzma/check/crc64_fast.c | 71 + .../xz-4.999.9beta/src/liblzma/check/crc64_small.c | 53 + .../xz-4.999.9beta/src/liblzma/check/crc64_table.c | 19 + .../src/liblzma/check/crc64_table_be.h | 521 + .../src/liblzma/check/crc64_table_le.h | 521 + .../src/liblzma/check/crc64_tablegen.c | 92 + .../xz-4.999.9beta/src/liblzma/check/crc64_x86.S | 287 + .../xz-4.999.9beta/src/liblzma/check/crc_macros.h | 32 + .../xz-4.999.9beta/src/liblzma/check/sha256.c | 213 + .../xz-4.999.9beta/src/liblzma/common/Makefile.inc | 67 + .../src/liblzma/common/alone_decoder.c | 229 + .../src/liblzma/common/alone_decoder.h | 22 + .../src/liblzma/common/alone_encoder.c | 157 + .../src/liblzma/common/auto_decoder.c | 186 + .../src/liblzma/common/block_buffer_decoder.c | 80 + .../src/liblzma/common/block_buffer_encoder.c | 299 + .../src/liblzma/common/block_decoder.c | 242 + .../src/liblzma/common/block_decoder.h | 22 + .../src/liblzma/common/block_encoder.c | 198 + .../src/liblzma/common/block_encoder.h | 47 + .../src/liblzma/common/block_header_decoder.c | 116 + .../src/liblzma/common/block_header_encoder.c | 132 + .../xz-4.999.9beta/src/liblzma/common/block_util.c | 90 + .../extra/xz-4.999.9beta/src/liblzma/common/bsr.h | 60 + .../xz-4.999.9beta/src/liblzma/common/common.c | 355 + .../xz-4.999.9beta/src/liblzma/common/common.h | 268 + .../src/liblzma/common/easy_buffer_encoder.c | 27 + .../src/liblzma/common/easy_decoder_memusage.c | 24 + .../src/liblzma/common/easy_encoder.c | 80 + .../src/liblzma/common/easy_encoder_memusage.c | 24 + .../src/liblzma/common/easy_preset.c | 27 + .../src/liblzma/common/easy_preset.h | 32 + .../src/liblzma/common/filter_buffer_decoder.c | 87 + .../src/liblzma/common/filter_buffer_encoder.c | 54 + .../src/liblzma/common/filter_common.c | 261 + .../src/liblzma/common/filter_common.h | 48 + .../src/liblzma/common/filter_decoder.c | 199 + .../src/liblzma/common/filter_decoder.h | 23 + .../src/liblzma/common/filter_encoder.c | 271 + .../src/liblzma/common/filter_encoder.h | 27 + .../src/liblzma/common/filter_flags_decoder.c | 46 + .../src/liblzma/common/filter_flags_encoder.c | 56 + .../xz-4.999.9beta/src/liblzma/common/index.c | 776 + .../xz-4.999.9beta/src/liblzma/common/index.h | 67 + .../src/liblzma/common/index_decoder.c | 323 + .../src/liblzma/common/index_encoder.c | 258 + .../src/liblzma/common/index_encoder.h | 23 + .../xz-4.999.9beta/src/liblzma/common/index_hash.c | 332 + .../src/liblzma/common/stream_buffer_decoder.c | 91 + .../src/liblzma/common/stream_buffer_encoder.c | 131 + .../src/liblzma/common/stream_decoder.c | 445 + .../src/liblzma/common/stream_decoder.h | 21 + .../src/liblzma/common/stream_encoder.c | 274 + .../src/liblzma/common/stream_encoder.h | 23 + .../src/liblzma/common/stream_flags_common.c | 47 + .../src/liblzma/common/stream_flags_common.h | 33 + .../src/liblzma/common/stream_flags_decoder.c | 82 + .../src/liblzma/common/stream_flags_encoder.c | 86 + .../src/liblzma/common/vli_decoder.c | 86 + .../src/liblzma/common/vli_encoder.c | 69 + .../xz-4.999.9beta/src/liblzma/common/vli_size.c | 30 + .../xz-4.999.9beta/src/liblzma/delta/Makefile.inc | 23 + .../src/liblzma/delta/delta_common.c | 73 + .../src/liblzma/delta/delta_common.h | 20 + .../src/liblzma/delta/delta_decoder.c | 75 + .../src/liblzma/delta/delta_decoder.h | 25 + .../src/liblzma/delta/delta_encoder.c | 106 + .../src/liblzma/delta/delta_encoder.h | 23 + .../src/liblzma/delta/delta_private.h | 37 + .../extra/xz-4.999.9beta/src/liblzma/liblzma.pc.in | 19 + .../xz-4.999.9beta/src/liblzma/liblzma_w32res.rc | 12 + .../xz-4.999.9beta/src/liblzma/lz/Makefile.inc | 21 + .../xz-4.999.9beta/src/liblzma/lz/lz_decoder.c | 299 + .../xz-4.999.9beta/src/liblzma/lz/lz_decoder.h | 234 + .../xz-4.999.9beta/src/liblzma/lz/lz_encoder.c | 559 + .../xz-4.999.9beta/src/liblzma/lz/lz_encoder.h | 324 + .../src/liblzma/lz/lz_encoder_hash.h | 97 + .../xz-4.999.9beta/src/liblzma/lz/lz_encoder_mf.c | 754 + .../xz-4.999.9beta/src/liblzma/lzma/Makefile.inc | 43 + .../xz-4.999.9beta/src/liblzma/lzma/fastpos.h | 143 + .../src/liblzma/lzma/fastpos_table.c | 519 + .../src/liblzma/lzma/fastpos_tablegen.c | 56 + .../src/liblzma/lzma/lzma2_decoder.c | 305 + .../src/liblzma/lzma/lzma2_decoder.h | 28 + .../src/liblzma/lzma/lzma2_encoder.c | 384 + .../src/liblzma/lzma/lzma2_encoder.h | 41 + .../xz-4.999.9beta/src/liblzma/lzma/lzma_common.h | 223 + .../xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.c | 1057 + .../xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.h | 52 + .../xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.c | 675 + .../xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.h | 54 + .../src/liblzma/lzma/lzma_encoder_optimum_fast.c | 179 + .../src/liblzma/lzma/lzma_encoder_optimum_normal.c | 868 + .../src/liblzma/lzma/lzma_encoder_presets.c | 53 + .../src/liblzma/lzma/lzma_encoder_private.h | 148 + .../src/liblzma/rangecoder/Makefile.inc | 21 + .../xz-4.999.9beta/src/liblzma/rangecoder/price.h | 92 + .../src/liblzma/rangecoder/price_table.c | 22 + .../src/liblzma/rangecoder/price_tablegen.c | 87 + .../src/liblzma/rangecoder/range_common.h | 73 + .../src/liblzma/rangecoder/range_decoder.h | 179 + .../src/liblzma/rangecoder/range_encoder.h | 231 + .../xz-4.999.9beta/src/liblzma/simple/Makefile.inc | 47 + .../extra/xz-4.999.9beta/src/liblzma/simple/arm.c | 69 + .../xz-4.999.9beta/src/liblzma/simple/armthumb.c | 74 + .../extra/xz-4.999.9beta/src/liblzma/simple/ia64.c | 110 + .../xz-4.999.9beta/src/liblzma/simple/powerpc.c | 73 + .../src/liblzma/simple/simple_coder.c | 268 + .../src/liblzma/simple/simple_coder.h | 60 + .../src/liblzma/simple/simple_decoder.c | 40 + .../src/liblzma/simple/simple_decoder.h | 22 + .../src/liblzma/simple/simple_encoder.c | 38 + .../src/liblzma/simple/simple_encoder.h | 23 + .../src/liblzma/simple/simple_private.h | 76 + .../xz-4.999.9beta/src/liblzma/simple/sparc.c | 81 + .../extra/xz-4.999.9beta/src/liblzma/simple/x86.c | 154 + .../src/liblzma/subblock/Makefile.inc | 20 + .../src/liblzma/subblock/subblock_decoder.c | 630 + .../src/liblzma/subblock/subblock_decoder.h | 22 + .../src/liblzma/subblock/subblock_decoder_helper.c | 70 + .../src/liblzma/subblock/subblock_decoder_helper.h | 29 + .../src/liblzma/subblock/subblock_encoder.c | 984 + .../src/liblzma/subblock/subblock_encoder.h | 21 + .../extra/xz-4.999.9beta/src/lzmainfo/Makefile.am | 29 + .../extra/xz-4.999.9beta/src/lzmainfo/Makefile.in | 659 + .../extra/xz-4.999.9beta/src/lzmainfo/lzmainfo.1 | 55 + .../extra/xz-4.999.9beta/src/lzmainfo/lzmainfo.c | 242 + .../extra/xz-4.999.9beta/src/scripts/Makefile.am | 65 + .../extra/xz-4.999.9beta/src/scripts/Makefile.in | 586 + .../extra/xz-4.999.9beta/src/scripts/xzdiff.1 | 74 + .../extra/xz-4.999.9beta/src/scripts/xzdiff.in | 172 + .../extra/xz-4.999.9beta/src/scripts/xzgrep.1 | 94 + .../extra/xz-4.999.9beta/src/scripts/xzgrep.in | 196 + .../extra/xz-4.999.9beta/src/scripts/xzless.1 | 66 + .../extra/xz-4.999.9beta/src/scripts/xzless.in | 58 + .../extra/xz-4.999.9beta/src/scripts/xzmore.1 | 54 + .../extra/xz-4.999.9beta/src/scripts/xzmore.in | 78 + .../source/extra/xz-4.999.9beta/src/xz/Makefile.am | 96 + .../source/extra/xz-4.999.9beta/src/xz/Makefile.in | 849 + Build/source/extra/xz-4.999.9beta/src/xz/args.c | 530 + Build/source/extra/xz-4.999.9beta/src/xz/args.h | 41 + Build/source/extra/xz-4.999.9beta/src/xz/coder.c | 639 + Build/source/extra/xz-4.999.9beta/src/xz/coder.h | 57 + Build/source/extra/xz-4.999.9beta/src/xz/file_io.c | 719 + Build/source/extra/xz-4.999.9beta/src/xz/file_io.h | 86 + .../source/extra/xz-4.999.9beta/src/xz/hardware.c | 95 + .../source/extra/xz-4.999.9beta/src/xz/hardware.h | 35 + Build/source/extra/xz-4.999.9beta/src/xz/main.c | 312 + Build/source/extra/xz-4.999.9beta/src/xz/main.h | 37 + Build/source/extra/xz-4.999.9beta/src/xz/message.c | 1172 ++ Build/source/extra/xz-4.999.9beta/src/xz/message.h | 132 + Build/source/extra/xz-4.999.9beta/src/xz/options.c | 438 + Build/source/extra/xz-4.999.9beta/src/xz/options.h | 38 + Build/source/extra/xz-4.999.9beta/src/xz/private.h | 55 + Build/source/extra/xz-4.999.9beta/src/xz/signals.c | 173 + Build/source/extra/xz-4.999.9beta/src/xz/signals.h | 44 + Build/source/extra/xz-4.999.9beta/src/xz/suffix.c | 211 + Build/source/extra/xz-4.999.9beta/src/xz/suffix.h | 28 + Build/source/extra/xz-4.999.9beta/src/xz/util.c | 229 + Build/source/extra/xz-4.999.9beta/src/xz/util.h | 79 + Build/source/extra/xz-4.999.9beta/src/xz/xz.1 | 1250 ++ .../extra/xz-4.999.9beta/src/xz/xz_w32res.rc | 12 + .../extra/xz-4.999.9beta/src/xzdec/Makefile.am | 61 + .../extra/xz-4.999.9beta/src/xzdec/Makefile.in | 714 + .../xz-4.999.9beta/src/xzdec/lzmadec_w32res.rc | 5 + .../source/extra/xz-4.999.9beta/src/xzdec/xzdec.1 | 168 + .../source/extra/xz-4.999.9beta/src/xzdec/xzdec.c | 496 + .../extra/xz-4.999.9beta/src/xzdec/xzdec_w32res.rc | 12 + .../source/extra/xz-4.999.9beta/tests/Makefile.am | 51 + .../source/extra/xz-4.999.9beta/tests/Makefile.in | 687 + Build/source/extra/xz-4.999.9beta/tests/bcj_test.c | 65 + .../tests/compress_prepared_bcj_sparc | Bin 0 -> 1240 bytes .../xz-4.999.9beta/tests/compress_prepared_bcj_x86 | Bin 0 -> 1388 bytes .../xz-4.999.9beta/tests/create_compress_files.c | 157 + .../source/extra/xz-4.999.9beta/tests/files/README | 232 + .../tests/files/bad-0-backward_size.xz | Bin 0 -> 32 bytes .../tests/files/bad-0-empty-truncated.xz | Bin 0 -> 31 bytes .../tests/files/bad-0-footer_magic.xz | Bin 0 -> 32 bytes .../tests/files/bad-0-header_magic.xz | Bin 0 -> 32 bytes .../tests/files/bad-0-nonempty_index.xz | Bin 0 -> 32 bytes .../xz-4.999.9beta/tests/files/bad-0cat-alone.xz | Bin 0 -> 55 bytes .../tests/files/bad-0cat-header_magic.xz | Bin 0 -> 64 bytes .../tests/files/bad-0catpad-empty.xz | Bin 0 -> 69 bytes .../xz-4.999.9beta/tests/files/bad-0pad-empty.xz | Bin 0 -> 37 bytes .../tests/files/bad-1-block_header-1.xz | Bin 0 -> 64 bytes .../tests/files/bad-1-block_header-2.xz | Bin 0 -> 64 bytes .../tests/files/bad-1-block_header-3.xz | Bin 0 -> 68 bytes .../tests/files/bad-1-block_header-4.xz | Bin 0 -> 76 bytes .../tests/files/bad-1-block_header-5.xz | Bin 0 -> 72 bytes .../tests/files/bad-1-check-crc32.xz | Bin 0 -> 68 bytes .../tests/files/bad-1-check-crc64.xz | Bin 0 -> 72 bytes .../tests/files/bad-1-check-sha256.xz | Bin 0 -> 96 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-1.xz | Bin 0 -> 64 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-2.xz | Bin 0 -> 424 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-3.xz | Bin 0 -> 424 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-4.xz | Bin 0 -> 408 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-5.xz | Bin 0 -> 408 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-6.xz | Bin 0 -> 68 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-7.xz | Bin 0 -> 408 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-8.xz | Bin 0 -> 464 bytes .../tests/files/bad-1-stream_flags-1.xz | Bin 0 -> 68 bytes .../tests/files/bad-1-stream_flags-2.xz | Bin 0 -> 68 bytes .../tests/files/bad-1-stream_flags-3.xz | Bin 0 -> 68 bytes .../xz-4.999.9beta/tests/files/bad-1-vli-1.xz | Bin 0 -> 72 bytes .../xz-4.999.9beta/tests/files/bad-1-vli-2.xz | Bin 0 -> 76 bytes .../tests/files/bad-2-compressed_data_padding.xz | Bin 0 -> 92 bytes .../xz-4.999.9beta/tests/files/bad-2-index-1.xz | Bin 0 -> 92 bytes .../xz-4.999.9beta/tests/files/bad-2-index-2.xz | Bin 0 -> 92 bytes .../xz-4.999.9beta/tests/files/bad-2-index-3.xz | Bin 0 -> 92 bytes .../xz-4.999.9beta/tests/files/bad-2-index-4.xz | Bin 0 -> 92 bytes .../xz-4.999.9beta/tests/files/bad-2-index-5.xz | Bin 0 -> 92 bytes .../xz-4.999.9beta/tests/files/good-0-empty.xz | Bin 0 -> 32 bytes .../xz-4.999.9beta/tests/files/good-0cat-empty.xz | Bin 0 -> 64 bytes .../tests/files/good-0catpad-empty.xz | Bin 0 -> 68 bytes .../xz-4.999.9beta/tests/files/good-0pad-empty.xz | Bin 0 -> 36 bytes .../tests/files/good-1-3delta-lzma2.xz | Bin 0 -> 528 bytes .../tests/files/good-1-block_header-1.xz | Bin 0 -> 72 bytes .../tests/files/good-1-block_header-2.xz | Bin 0 -> 68 bytes .../tests/files/good-1-block_header-3.xz | Bin 0 -> 68 bytes .../tests/files/good-1-check-crc32.xz | Bin 0 -> 68 bytes .../tests/files/good-1-check-crc64.xz | Bin 0 -> 72 bytes .../tests/files/good-1-check-none.xz | Bin 0 -> 64 bytes .../tests/files/good-1-check-sha256.xz | Bin 0 -> 96 bytes .../tests/files/good-1-delta-lzma2.tiff.xz | Bin 0 -> 51316 bytes .../xz-4.999.9beta/tests/files/good-1-lzma2-1.xz | Bin 0 -> 424 bytes .../xz-4.999.9beta/tests/files/good-1-lzma2-2.xz | Bin 0 -> 424 bytes .../xz-4.999.9beta/tests/files/good-1-lzma2-3.xz | Bin 0 -> 408 bytes .../xz-4.999.9beta/tests/files/good-1-lzma2-4.xz | Bin 0 -> 464 bytes .../tests/files/good-1-sparc-lzma2.xz | Bin 0 -> 612 bytes .../xz-4.999.9beta/tests/files/good-1-x86-lzma2.xz | Bin 0 -> 716 bytes .../xz-4.999.9beta/tests/files/good-2-lzma2.xz | Bin 0 -> 92 bytes .../tests/files/unsupported-block_header.xz | Bin 0 -> 68 bytes .../tests/files/unsupported-check.xz | Bin 0 -> 68 bytes .../tests/files/unsupported-filter_flags-1.xz | Bin 0 -> 68 bytes .../tests/files/unsupported-filter_flags-2.xz | Bin 0 -> 68 bytes .../tests/files/unsupported-filter_flags-3.xz | Bin 0 -> 68 bytes .../extra/xz-4.999.9beta/tests/test_block_header.c | 240 + .../source/extra/xz-4.999.9beta/tests/test_check.c | 83 + .../extra/xz-4.999.9beta/tests/test_compress.sh | 129 + .../extra/xz-4.999.9beta/tests/test_files.sh | 33 + .../extra/xz-4.999.9beta/tests/test_filter_flags.c | 281 + .../source/extra/xz-4.999.9beta/tests/test_index.c | 532 + .../extra/xz-4.999.9beta/tests/test_stream_flags.c | 180 + Build/source/extra/xz-4.999.9beta/tests/tests.h | 124 + Build/source/extra/xz-4.999.9beta/version.sh | 24 + Build/source/extra/xz-4.999.9beta/windows/Makefile | 308 + Build/source/extra/xz-4.999.9beta/windows/README | 155 + Build/source/extra/xz-4.999.9beta/windows/config.h | 165 + Build/source/libs/expat/COPYING | 21 - Build/source/libs/expat/Changes | 34 - Build/source/libs/expat/MANIFEST | 58 - Build/source/libs/expat/Makefile.in | 148 - Build/source/libs/expat/README | 57 - Build/source/libs/expat/aclocal.m4 | 425 - Build/source/libs/expat/config.hin | 65 - Build/source/libs/expat/configure | 7042 ------- Build/source/libs/expat/configure.in | 87 - Build/source/libs/expat/conftools/config.guess | 1494 -- Build/source/libs/expat/conftools/config.sub | 1700 -- Build/source/libs/expat/conftools/install-sh | 520 - Build/source/libs/expat/conftools/ltconfig | 3114 --- Build/source/libs/expat/conftools/ltmain.sh | 4025 ---- Build/source/libs/expat/conftools/missing | 376 - Build/source/libs/expat/conftools/mkinstalldirs | 162 - Build/source/libs/expat/doc/reference.html | 1493 -- Build/source/libs/expat/doc/style.css | 47 - Build/source/libs/expat/examples/Makefile.in | 29 - Build/source/libs/expat/examples/outline.c | 86 - Build/source/libs/expat/lib/Makefile.in | 168 - Build/source/libs/expat/lib/ascii.h | 86 - Build/source/libs/expat/lib/asciitab.h | 37 - Build/source/libs/expat/lib/config.h | 27 - Build/source/libs/expat/lib/expat.dep | 32 - Build/source/libs/expat/lib/expat.dsp | 105 - Build/source/libs/expat/lib/expat.dsw | 29 - Build/source/libs/expat/lib/expat.h | 712 - Build/source/libs/expat/lib/expat.mak | 168 - Build/source/libs/expat/lib/expat.plg | 16 - Build/source/libs/expat/lib/expat.vcproj | 121 - Build/source/libs/expat/lib/iasciitab.h | 38 - Build/source/libs/expat/lib/latin1tab.h | 37 - Build/source/libs/expat/lib/nametab.h | 150 - Build/source/libs/expat/lib/utf8tab.h | 38 - Build/source/libs/expat/lib/winconfig.h | 29 - Build/source/libs/expat/lib/xmlparse.c | 4625 ----- Build/source/libs/expat/lib/xmlrole.c | 1275 -- Build/source/libs/expat/lib/xmlrole.h | 100 - Build/source/libs/expat/lib/xmltok.c | 1568 -- Build/source/libs/expat/lib/xmltok.h | 299 - Build/source/libs/expat/lib/xmltok_impl.c | 1768 -- Build/source/libs/expat/lib/xmltok_impl.h | 46 - Build/source/libs/expat/lib/xmltok_ns.c | 98 - Build/source/libs/expat/xmlwf/Makefile.in | 15 - Build/source/libs/expat/xmlwf/codepage.c | 65 - Build/source/libs/expat/xmlwf/codepage.h | 7 - Build/source/libs/expat/xmlwf/ct.c | 145 - Build/source/libs/expat/xmlwf/filemap.h | 17 - Build/source/libs/expat/xmlwf/readfilemap.c | 74 - Build/source/libs/expat/xmlwf/unixfilemap.c | 57 - Build/source/libs/expat/xmlwf/wfcheck.c | 953 - Build/source/libs/expat/xmlwf/wfcheck.h | 38 - Build/source/libs/expat/xmlwf/wfcheckmessage.c | 30 - Build/source/libs/expat/xmlwf/win32filemap.c | 95 - Build/source/libs/expat/xmlwf/xmlfile.c | 217 - Build/source/libs/expat/xmlwf/xmlfile.h | 11 - Build/source/libs/expat/xmlwf/xmlmime.c | 161 - Build/source/libs/expat/xmlwf/xmlmime.h | 19 - Build/source/libs/expat/xmlwf/xmltchar.h | 36 - Build/source/libs/expat/xmlwf/xmlurl.h | 13 - Build/source/libs/expat/xmlwf/xmlwf.c | 759 - Build/source/libs/expat/xmlwf/xmlwf.dsp | 136 - Build/source/libs/expat/xmlwf/xmlwin32url.cxx | 371 - Build/source/libs/jpeg/README | 385 - Build/source/libs/jpeg/ansi2knr.1 | 36 - Build/source/libs/jpeg/ansi2knr.c | 693 - Build/source/libs/jpeg/cderror.h | 132 - Build/source/libs/jpeg/cdjpeg.c | 181 - Build/source/libs/jpeg/cdjpeg.h | 184 - Build/source/libs/jpeg/cjpeg.1 | 292 - Build/source/libs/jpeg/cjpeg.c | 606 - Build/source/libs/jpeg/ckconfig.c | 402 - Build/source/libs/jpeg/coderules.doc | 118 - Build/source/libs/jpeg/config.guess | 1494 -- Build/source/libs/jpeg/config.sub | 1700 -- Build/source/libs/jpeg/configure | 2011 -- Build/source/libs/jpeg/djpeg.1 | 253 - Build/source/libs/jpeg/djpeg.c | 616 - Build/source/libs/jpeg/example.c | 433 - Build/source/libs/jpeg/filelist.doc | 210 - Build/source/libs/jpeg/install-sh | 520 - Build/source/libs/jpeg/install.doc | 1063 - Build/source/libs/jpeg/jcapimin.c | 280 - Build/source/libs/jpeg/jcapistd.c | 161 - Build/source/libs/jpeg/jccoefct.c | 449 - Build/source/libs/jpeg/jccolor.c | 459 - Build/source/libs/jpeg/jcdctmgr.c | 387 - Build/source/libs/jpeg/jchuff.c | 909 - Build/source/libs/jpeg/jchuff.h | 47 - Build/source/libs/jpeg/jcinit.c | 72 - Build/source/libs/jpeg/jcmainct.c | 293 - Build/source/libs/jpeg/jcmarker.c | 664 - Build/source/libs/jpeg/jcmaster.c | 590 - Build/source/libs/jpeg/jcomapi.c | 106 - Build/source/libs/jpeg/jconfig.bcc | 48 - Build/source/libs/jpeg/jconfig.cfg | 44 - Build/source/libs/jpeg/jconfig.dj | 38 - Build/source/libs/jpeg/jconfig.doc | 155 - Build/source/libs/jpeg/jconfig.mac | 43 - Build/source/libs/jpeg/jconfig.manx | 43 - Build/source/libs/jpeg/jconfig.mc6 | 52 - Build/source/libs/jpeg/jconfig.sas | 43 - Build/source/libs/jpeg/jconfig.st | 42 - Build/source/libs/jpeg/jconfig.vc | 71 - Build/source/libs/jpeg/jconfig.vms | 37 - Build/source/libs/jpeg/jconfig.wat | 38 - Build/source/libs/jpeg/jcparam.c | 610 - Build/source/libs/jpeg/jcphuff.c | 833 - Build/source/libs/jpeg/jcprepct.c | 354 - Build/source/libs/jpeg/jcsample.c | 519 - Build/source/libs/jpeg/jctrans.c | 388 - Build/source/libs/jpeg/jdapimin.c | 395 - Build/source/libs/jpeg/jdapistd.c | 275 - Build/source/libs/jpeg/jdatadst.c | 151 - Build/source/libs/jpeg/jdatasrc.c | 212 - Build/source/libs/jpeg/jdcoefct.c | 736 - Build/source/libs/jpeg/jdcolor.c | 396 - Build/source/libs/jpeg/jdct.h | 176 - Build/source/libs/jpeg/jddctmgr.c | 269 - Build/source/libs/jpeg/jdhuff.c | 651 - Build/source/libs/jpeg/jdhuff.h | 201 - Build/source/libs/jpeg/jdinput.c | 381 - Build/source/libs/jpeg/jdmainct.c | 512 - Build/source/libs/jpeg/jdmarker.c | 1360 -- Build/source/libs/jpeg/jdmaster.c | 557 - Build/source/libs/jpeg/jdmerge.c | 400 - Build/source/libs/jpeg/jdphuff.c | 668 - Build/source/libs/jpeg/jdpostct.c | 290 - Build/source/libs/jpeg/jdsample.c | 478 - Build/source/libs/jpeg/jdtrans.c | 143 - Build/source/libs/jpeg/jerror.c | 252 - Build/source/libs/jpeg/jerror.h | 291 - Build/source/libs/jpeg/jfdctflt.c | 168 - Build/source/libs/jpeg/jfdctfst.c | 224 - Build/source/libs/jpeg/jfdctint.c | 283 - Build/source/libs/jpeg/jidctflt.c | 242 - Build/source/libs/jpeg/jidctfst.c | 368 - Build/source/libs/jpeg/jidctint.c | 389 - Build/source/libs/jpeg/jidctred.c | 398 - Build/source/libs/jpeg/jinclude.h | 91 - Build/source/libs/jpeg/jmemansi.c | 167 - Build/source/libs/jpeg/jmemdos.c | 638 - Build/source/libs/jpeg/jmemdosa.asm | 379 - Build/source/libs/jpeg/jmemmac.c | 289 - Build/source/libs/jpeg/jmemmgr.c | 1118 -- Build/source/libs/jpeg/jmemname.c | 276 - Build/source/libs/jpeg/jmemnobs.c | 109 - Build/source/libs/jpeg/jmemsys.h | 198 - Build/source/libs/jpeg/jmorecfg.h | 366 - Build/source/libs/jpeg/jpegint.h | 392 - Build/source/libs/jpeg/jpeglib.h | 1096 -- Build/source/libs/jpeg/jpegtran.1 | 238 - Build/source/libs/jpeg/jpegtran.c | 504 - Build/source/libs/jpeg/jquant1.c | 856 - Build/source/libs/jpeg/jquant2.c | 1310 -- Build/source/libs/jpeg/jutils.c | 179 - Build/source/libs/jpeg/jversion.h | 14 - Build/source/libs/jpeg/libjpeg.doc | 3006 --- Build/source/libs/jpeg/ltconfig | 1512 -- Build/source/libs/jpeg/ltmain.sh | 2453 --- Build/source/libs/jpeg/makcjpeg.st | 38 - Build/source/libs/jpeg/makdjpeg.st | 38 - Build/source/libs/jpeg/makeapps.ds | 828 - Build/source/libs/jpeg/makefile.ansi | 214 - Build/source/libs/jpeg/makefile.bcc | 285 - Build/source/libs/jpeg/makefile.cfg | 319 - Build/source/libs/jpeg/makefile.dj | 220 - Build/source/libs/jpeg/makefile.manx | 214 - Build/source/libs/jpeg/makefile.mc6 | 249 - Build/source/libs/jpeg/makefile.mms | 218 - Build/source/libs/jpeg/makefile.sas | 252 - Build/source/libs/jpeg/makefile.unix | 228 - Build/source/libs/jpeg/makefile.vc | 211 - Build/source/libs/jpeg/makefile.vms | 142 - Build/source/libs/jpeg/makefile.wat | 233 - Build/source/libs/jpeg/makelib.ds | 1046 - Build/source/libs/jpeg/makeproj.mac | 213 - Build/source/libs/jpeg/makljpeg.st | 70 - Build/source/libs/jpeg/maktjpeg.st | 32 - Build/source/libs/jpeg/makvms.opt | 4 - Build/source/libs/jpeg/rdbmp.c | 439 - Build/source/libs/jpeg/rdcolmap.c | 253 - Build/source/libs/jpeg/rdgif.c | 38 - Build/source/libs/jpeg/rdjpgcom.1 | 54 - Build/source/libs/jpeg/rdjpgcom.c | 496 - Build/source/libs/jpeg/rdppm.c | 458 - Build/source/libs/jpeg/rdrle.c | 387 - Build/source/libs/jpeg/rdswitch.c | 332 - Build/source/libs/jpeg/rdtarga.c | 500 - Build/source/libs/jpeg/structure.doc | 948 - Build/source/libs/jpeg/testimg.bmp | Bin 35050 -> 0 bytes Build/source/libs/jpeg/testimg.jpg | Bin 5756 -> 0 bytes Build/source/libs/jpeg/testimg.ppm | 4 - Build/source/libs/jpeg/testimgp.jpg | Bin 5645 -> 0 bytes Build/source/libs/jpeg/testorig.jpg | Bin 5770 -> 0 bytes Build/source/libs/jpeg/testprog.jpg | Bin 5655 -> 0 bytes Build/source/libs/jpeg/transupp.c | 928 - Build/source/libs/jpeg/transupp.h | 135 - Build/source/libs/jpeg/usage.doc | 562 - Build/source/libs/jpeg/wizard.doc | 211 - Build/source/libs/jpeg/wrbmp.c | 442 - Build/source/libs/jpeg/wrgif.c | 399 - Build/source/libs/jpeg/wrjpgcom.1 | 103 - Build/source/libs/jpeg/wrjpgcom.c | 583 - Build/source/libs/jpeg/wrppm.c | 268 - Build/source/libs/jpeg/wrrle.c | 305 - Build/source/libs/jpeg/wrtarga.c | 253 - Build/source/libs/unzip/api.c | 601 - Build/source/libs/unzip/consts.h | 46 - Build/source/libs/unzip/crc32.c | 56 - Build/source/libs/unzip/crctab.c | 219 - Build/source/libs/unzip/crypt.c | 12 - Build/source/libs/unzip/crypt.h | 24 - Build/source/libs/unzip/ebcdic.h | 272 - Build/source/libs/unzip/explode.c | 871 - Build/source/libs/unzip/extract.c | 1985 -- Build/source/libs/unzip/fileio.c | 2151 -- Build/source/libs/unzip/globals.c | 204 - Build/source/libs/unzip/globals.h | 395 - Build/source/libs/unzip/inflate.c | 1305 -- Build/source/libs/unzip/inflate.h | 24 - Build/source/libs/unzip/list.c | 644 - Build/source/libs/unzip/match.c | 294 - Build/source/libs/unzip/process.c | 1378 -- Build/source/libs/unzip/ttyio.c | 625 - Build/source/libs/unzip/ttyio.h | 186 - Build/source/libs/unzip/unreduce.c | 230 - Build/source/libs/unzip/unshrink.c | 301 - Build/source/libs/unzip/unzip.dep | 191 - Build/source/libs/unzip/unzip.dsp | 258 - Build/source/libs/unzip/unzip.dsw | 29 - Build/source/libs/unzip/unzip.h | 545 - Build/source/libs/unzip/unzip.mak | 369 - Build/source/libs/unzip/unzip.plg | 30 - Build/source/libs/unzip/unzip.vcproj | 235 - Build/source/libs/unzip/unzpriv.h | 2387 --- Build/source/libs/unzip/version.h | 44 - Build/source/libs/unzip/win32/nt.c | 659 - Build/source/libs/unzip/win32/nt.h | 28 - Build/source/libs/unzip/win32/w32cfg.h | 222 - Build/source/libs/unzip/win32/win32.c | 2390 --- Build/source/libs/unzip/windll/decs.h | 29 - Build/source/libs/unzip/windll/structs.h | 72 - Build/source/libs/unzip/windll/unzver.h | 15 - Build/source/libs/unzip/windll/windll.c | 744 - Build/source/libs/unzip/windll/windll.h | 46 - Build/source/libs/unzip/zip.h | 15 - Build/source/libs/unzip/zipinfo.c | 1912 -- Build/source/texk/djgpp/ChangeLog | 69 - Build/source/texk/djgpp/README.djgpp | 207 - Build/source/texk/djgpp/cfgdtl.pat | 19 - Build/source/texk/djgpp/cfgdvidv.pat | 19 - Build/source/texk/djgpp/cfgdvilj.pat | 29 - Build/source/texk/djgpp/cfgdvips.pat | 31 - Build/source/texk/djgpp/cfgdvpdf.pat | 19 - Build/source/texk/djgpp/cfggsfpk.pat | 19 - Build/source/texk/djgpp/cfgkpath.pat | 30 - Build/source/texk/djgpp/cfglachk.pat | 19 - Build/source/texk/djgpp/cfgmain.pat | 29 - Build/source/texk/djgpp/cfgmkind.pat | 19 - Build/source/texk/djgpp/cfgmusix.pat | 19 - Build/source/texk/djgpp/cfgpspkm.pat | 19 - Build/source/texk/djgpp/cfgseetx.pat | 19 - Build/source/texk/djgpp/cfgtexht.pat | 19 - Build/source/texk/djgpp/cfgweb2c.pat | 38 - Build/source/texk/djgpp/config.bat | 272 - Build/source/texk/djgpp/pathconf.c | 47 - Build/source/texk/djgpp/popen.c | 218 - Build/source/texk/djgpp/putenv.c | 143 - Build/source/texk/djgpp/stat.c | 935 - Build/source/texk/djgpp/xstat.h | 71 - Build/source/utils/epstopdf/Makefile | 64 - Build/source/utils/epstopdf/README | 26 - Build/source/utils/epstopdf/epstopdf.1 | 78 - Build/source/utils/epstopdf/epstopdf.pl | 582 - Build/source/utils/epstopdf/test-atend.eps | 138 - Build/source/utils/epstopdf/test-bin2.eps | 14670 -------------- Build/source/utils/epstopdf/test-binary.eps | 433 - Build/source/utils/epstopdf/test-binhdr-cr.eps | Bin 4699 -> 0 bytes Build/source/utils/epstopdf/test-binhdr-crlf.eps | Bin 4935 -> 0 bytes Build/source/utils/epstopdf/test-binhdr-lf.eps | Bin 4699 -> 0 bytes Build/source/utils/epstopdf/test-simple.eps | 12 - Build/source/utils/xz-4.999.9beta/ABOUT-NLS | 1101 -- Build/source/utils/xz-4.999.9beta/AUTHORS | 27 - Build/source/utils/xz-4.999.9beta/COPYING | 65 - Build/source/utils/xz-4.999.9beta/COPYING.GPLv2 | 339 - Build/source/utils/xz-4.999.9beta/COPYING.GPLv3 | 674 - Build/source/utils/xz-4.999.9beta/COPYING.LGPLv2.1 | 504 - Build/source/utils/xz-4.999.9beta/ChangeLog | 7041 ------- Build/source/utils/xz-4.999.9beta/Doxyfile.in | 1234 -- Build/source/utils/xz-4.999.9beta/INSTALL | 339 - Build/source/utils/xz-4.999.9beta/INSTALL.generic | 302 - Build/source/utils/xz-4.999.9beta/Makefile.am | 80 - Build/source/utils/xz-4.999.9beta/Makefile.in | 887 - Build/source/utils/xz-4.999.9beta/NEWS | 0 Build/source/utils/xz-4.999.9beta/PACKAGERS | 279 - Build/source/utils/xz-4.999.9beta/README | 217 - Build/source/utils/xz-4.999.9beta/THANKS | 47 - Build/source/utils/xz-4.999.9beta/TODO | 56 - Build/source/utils/xz-4.999.9beta/aclocal.m4 | 1027 - Build/source/utils/xz-4.999.9beta/autogen.sh | 22 - .../source/utils/xz-4.999.9beta/build-aux/compile | 143 - .../utils/xz-4.999.9beta/build-aux/config.guess | 1494 -- .../utils/xz-4.999.9beta/build-aux/config.rpath | 614 - .../utils/xz-4.999.9beta/build-aux/config.sub | 1700 -- .../source/utils/xz-4.999.9beta/build-aux/depcomp | 630 - .../utils/xz-4.999.9beta/build-aux/install-sh | 520 - .../utils/xz-4.999.9beta/build-aux/ltmain.sh | 8406 -------- .../source/utils/xz-4.999.9beta/build-aux/missing | 376 - Build/source/utils/xz-4.999.9beta/config.h.in | 404 - Build/source/utils/xz-4.999.9beta/configure | 19363 ------------------- Build/source/utils/xz-4.999.9beta/configure.ac | 706 - .../source/utils/xz-4.999.9beta/debug/Makefile.am | 30 - .../source/utils/xz-4.999.9beta/debug/Makefile.in | 580 - Build/source/utils/xz-4.999.9beta/debug/README | 17 - Build/source/utils/xz-4.999.9beta/debug/crc32.c | 38 - .../source/utils/xz-4.999.9beta/debug/full_flush.c | 102 - Build/source/utils/xz-4.999.9beta/debug/hex2bin.c | 53 - .../utils/xz-4.999.9beta/debug/known_sizes.c | 129 - Build/source/utils/xz-4.999.9beta/debug/memusage.c | 49 - Build/source/utils/xz-4.999.9beta/debug/repeat.c | 36 - .../source/utils/xz-4.999.9beta/debug/sync_flush.c | 133 - Build/source/utils/xz-4.999.9beta/doc/faq.txt | 122 - Build/source/utils/xz-4.999.9beta/doc/history.txt | 149 - .../utils/xz-4.999.9beta/doc/lzma-file-format.txt | 166 - .../utils/xz-4.999.9beta/doc/man/pdf-a4/xz-a4.pdf | Bin 38867 -> 0 bytes .../xz-4.999.9beta/doc/man/pdf-a4/xzdec-a4.pdf | Bin 6914 -> 0 bytes .../xz-4.999.9beta/doc/man/pdf-a4/xzdiff-a4.pdf | Bin 4240 -> 0 bytes .../xz-4.999.9beta/doc/man/pdf-a4/xzgrep-a4.pdf | Bin 4443 -> 0 bytes .../xz-4.999.9beta/doc/man/pdf-a4/xzless-a4.pdf | Bin 4329 -> 0 bytes .../xz-4.999.9beta/doc/man/pdf-a4/xzmore-a4.pdf | Bin 4211 -> 0 bytes .../doc/man/pdf-letter/xz-letter.pdf | Bin 38846 -> 0 bytes .../doc/man/pdf-letter/xzdec-letter.pdf | Bin 6909 -> 0 bytes .../doc/man/pdf-letter/xzdiff-letter.pdf | Bin 4239 -> 0 bytes .../doc/man/pdf-letter/xzgrep-letter.pdf | Bin 4440 -> 0 bytes .../doc/man/pdf-letter/xzless-letter.pdf | Bin 4326 -> 0 bytes .../doc/man/pdf-letter/xzmore-letter.pdf | Bin 4210 -> 0 bytes .../source/utils/xz-4.999.9beta/doc/man/txt/xz.txt | 786 - .../utils/xz-4.999.9beta/doc/man/txt/xzdec.txt | 95 - .../utils/xz-4.999.9beta/doc/man/txt/xzdiff.txt | 36 - .../utils/xz-4.999.9beta/doc/man/txt/xzgrep.txt | 39 - .../utils/xz-4.999.9beta/doc/man/txt/xzless.txt | 40 - .../utils/xz-4.999.9beta/doc/man/txt/xzmore.txt | 34 - .../utils/xz-4.999.9beta/doc/xz-file-format.txt | 1150 -- Build/source/utils/xz-4.999.9beta/dos/Makefile | 255 - Build/source/utils/xz-4.999.9beta/dos/README | 113 - Build/source/utils/xz-4.999.9beta/dos/config.h | 150 - .../xz-4.999.9beta/extra/7z2lzma/7z2lzma.bash | 115 - .../utils/xz-4.999.9beta/extra/scanlzma/scanlzma.c | 84 - Build/source/utils/xz-4.999.9beta/lib/Makefile.am | 32 - Build/source/utils/xz-4.999.9beta/lib/Makefile.in | 525 - Build/source/utils/xz-4.999.9beta/lib/getopt.c | 1197 -- Build/source/utils/xz-4.999.9beta/lib/getopt.in.h | 226 - Build/source/utils/xz-4.999.9beta/lib/getopt1.c | 171 - Build/source/utils/xz-4.999.9beta/lib/getopt_int.h | 131 - .../source/utils/xz-4.999.9beta/m4/acx_pthread.m4 | 279 - Build/source/utils/xz-4.999.9beta/m4/getopt.m4 | 71 - Build/source/utils/xz-4.999.9beta/m4/gettext.m4 | 419 - Build/source/utils/xz-4.999.9beta/m4/iconv.m4 | 101 - .../source/utils/xz-4.999.9beta/m4/lc_cpucores.m4 | 57 - Build/source/utils/xz-4.999.9beta/m4/lc_physmem.m4 | 84 - Build/source/utils/xz-4.999.9beta/m4/lib-ld.m4 | 110 - Build/source/utils/xz-4.999.9beta/m4/lib-link.m4 | 644 - Build/source/utils/xz-4.999.9beta/m4/lib-prefix.m4 | 185 - Build/source/utils/xz-4.999.9beta/m4/libtool.m4 | 7357 ------- Build/source/utils/xz-4.999.9beta/m4/ltoptions.m4 | 368 - Build/source/utils/xz-4.999.9beta/m4/ltsugar.m4 | 123 - Build/source/utils/xz-4.999.9beta/m4/ltversion.m4 | 23 - .../source/utils/xz-4.999.9beta/m4/lt~obsolete.m4 | 92 - Build/source/utils/xz-4.999.9beta/m4/nls.m4 | 31 - Build/source/utils/xz-4.999.9beta/m4/po.m4 | 428 - .../source/utils/xz-4.999.9beta/m4/posix-shell.m4 | 63 - Build/source/utils/xz-4.999.9beta/m4/progtest.m4 | 92 - Build/source/utils/xz-4.999.9beta/m4/visibility.m4 | 52 - Build/source/utils/xz-4.999.9beta/po/LINGUAS | 0 .../source/utils/xz-4.999.9beta/po/Makefile.in.in | 403 - Build/source/utils/xz-4.999.9beta/po/Makevars | 46 - Build/source/utils/xz-4.999.9beta/po/POTFILES.in | 10 - Build/source/utils/xz-4.999.9beta/po/Rules-quot | 47 - Build/source/utils/xz-4.999.9beta/po/boldquot.sed | 10 - .../utils/xz-4.999.9beta/po/en@boldquot.header | 25 - .../source/utils/xz-4.999.9beta/po/en@quot.header | 22 - .../utils/xz-4.999.9beta/po/insert-header.sin | 23 - Build/source/utils/xz-4.999.9beta/po/quot.sed | 6 - .../utils/xz-4.999.9beta/po/remove-potcdate.sin | 19 - Build/source/utils/xz-4.999.9beta/po/stamp-po | 1 - Build/source/utils/xz-4.999.9beta/po/xz.pot | 481 - Build/source/utils/xz-4.999.9beta/src/Makefile.am | 9 - Build/source/utils/xz-4.999.9beta/src/Makefile.in | 598 - .../source/utils/xz-4.999.9beta/src/common/bswap.h | 52 - .../xz-4.999.9beta/src/common/common_w32res.rc | 53 - .../utils/xz-4.999.9beta/src/common/cpucores.h | 51 - .../utils/xz-4.999.9beta/src/common/integer.h | 170 - .../utils/xz-4.999.9beta/src/common/mythread.h | 42 - .../utils/xz-4.999.9beta/src/common/open_stdxxx.h | 49 - .../utils/xz-4.999.9beta/src/common/physmem.h | 134 - .../utils/xz-4.999.9beta/src/common/sysdefs.h | 169 - .../utils/xz-4.999.9beta/src/liblzma/Makefile.am | 94 - .../utils/xz-4.999.9beta/src/liblzma/Makefile.in | 1728 -- .../xz-4.999.9beta/src/liblzma/api/Makefile.am | 23 - .../xz-4.999.9beta/src/liblzma/api/Makefile.in | 512 - .../utils/xz-4.999.9beta/src/liblzma/api/lzma.h | 321 - .../xz-4.999.9beta/src/liblzma/api/lzma/base.h | 596 - .../xz-4.999.9beta/src/liblzma/api/lzma/bcj.h | 90 - .../xz-4.999.9beta/src/liblzma/api/lzma/block.h | 534 - .../xz-4.999.9beta/src/liblzma/api/lzma/check.h | 150 - .../src/liblzma/api/lzma/container.h | 404 - .../xz-4.999.9beta/src/liblzma/api/lzma/delta.h | 77 - .../xz-4.999.9beta/src/liblzma/api/lzma/filter.h | 360 - .../xz-4.999.9beta/src/liblzma/api/lzma/index.h | 403 - .../src/liblzma/api/lzma/index_hash.h | 107 - .../xz-4.999.9beta/src/liblzma/api/lzma/lzma.h | 410 - .../src/liblzma/api/lzma/stream_flags.h | 227 - .../xz-4.999.9beta/src/liblzma/api/lzma/subblock.h | 200 - .../xz-4.999.9beta/src/liblzma/api/lzma/version.h | 121 - .../xz-4.999.9beta/src/liblzma/api/lzma/vli.h | 168 - .../xz-4.999.9beta/src/liblzma/check/Makefile.inc | 51 - .../utils/xz-4.999.9beta/src/liblzma/check/check.c | 174 - .../utils/xz-4.999.9beta/src/liblzma/check/check.h | 95 - .../xz-4.999.9beta/src/liblzma/check/crc32_fast.c | 82 - .../xz-4.999.9beta/src/liblzma/check/crc32_small.c | 61 - .../xz-4.999.9beta/src/liblzma/check/crc32_table.c | 19 - .../src/liblzma/check/crc32_table_be.h | 525 - .../src/liblzma/check/crc32_table_le.h | 525 - .../src/liblzma/check/crc32_tablegen.c | 91 - .../xz-4.999.9beta/src/liblzma/check/crc32_x86.S | 304 - .../xz-4.999.9beta/src/liblzma/check/crc64_fast.c | 71 - .../xz-4.999.9beta/src/liblzma/check/crc64_small.c | 53 - .../xz-4.999.9beta/src/liblzma/check/crc64_table.c | 19 - .../src/liblzma/check/crc64_table_be.h | 521 - .../src/liblzma/check/crc64_table_le.h | 521 - .../src/liblzma/check/crc64_tablegen.c | 92 - .../xz-4.999.9beta/src/liblzma/check/crc64_x86.S | 287 - .../xz-4.999.9beta/src/liblzma/check/crc_macros.h | 32 - .../xz-4.999.9beta/src/liblzma/check/sha256.c | 213 - .../xz-4.999.9beta/src/liblzma/common/Makefile.inc | 67 - .../src/liblzma/common/alone_decoder.c | 229 - .../src/liblzma/common/alone_decoder.h | 22 - .../src/liblzma/common/alone_encoder.c | 157 - .../src/liblzma/common/auto_decoder.c | 186 - .../src/liblzma/common/block_buffer_decoder.c | 80 - .../src/liblzma/common/block_buffer_encoder.c | 299 - .../src/liblzma/common/block_decoder.c | 242 - .../src/liblzma/common/block_decoder.h | 22 - .../src/liblzma/common/block_encoder.c | 198 - .../src/liblzma/common/block_encoder.h | 47 - .../src/liblzma/common/block_header_decoder.c | 116 - .../src/liblzma/common/block_header_encoder.c | 132 - .../xz-4.999.9beta/src/liblzma/common/block_util.c | 90 - .../utils/xz-4.999.9beta/src/liblzma/common/bsr.h | 60 - .../xz-4.999.9beta/src/liblzma/common/common.c | 355 - .../xz-4.999.9beta/src/liblzma/common/common.h | 268 - .../src/liblzma/common/easy_buffer_encoder.c | 27 - .../src/liblzma/common/easy_decoder_memusage.c | 24 - .../src/liblzma/common/easy_encoder.c | 80 - .../src/liblzma/common/easy_encoder_memusage.c | 24 - .../src/liblzma/common/easy_preset.c | 27 - .../src/liblzma/common/easy_preset.h | 32 - .../src/liblzma/common/filter_buffer_decoder.c | 87 - .../src/liblzma/common/filter_buffer_encoder.c | 54 - .../src/liblzma/common/filter_common.c | 261 - .../src/liblzma/common/filter_common.h | 48 - .../src/liblzma/common/filter_decoder.c | 199 - .../src/liblzma/common/filter_decoder.h | 23 - .../src/liblzma/common/filter_encoder.c | 271 - .../src/liblzma/common/filter_encoder.h | 27 - .../src/liblzma/common/filter_flags_decoder.c | 46 - .../src/liblzma/common/filter_flags_encoder.c | 56 - .../xz-4.999.9beta/src/liblzma/common/index.c | 776 - .../xz-4.999.9beta/src/liblzma/common/index.h | 67 - .../src/liblzma/common/index_decoder.c | 323 - .../src/liblzma/common/index_encoder.c | 258 - .../src/liblzma/common/index_encoder.h | 23 - .../xz-4.999.9beta/src/liblzma/common/index_hash.c | 332 - .../src/liblzma/common/stream_buffer_decoder.c | 91 - .../src/liblzma/common/stream_buffer_encoder.c | 131 - .../src/liblzma/common/stream_decoder.c | 445 - .../src/liblzma/common/stream_decoder.h | 21 - .../src/liblzma/common/stream_encoder.c | 274 - .../src/liblzma/common/stream_encoder.h | 23 - .../src/liblzma/common/stream_flags_common.c | 47 - .../src/liblzma/common/stream_flags_common.h | 33 - .../src/liblzma/common/stream_flags_decoder.c | 82 - .../src/liblzma/common/stream_flags_encoder.c | 86 - .../src/liblzma/common/vli_decoder.c | 86 - .../src/liblzma/common/vli_encoder.c | 69 - .../xz-4.999.9beta/src/liblzma/common/vli_size.c | 30 - .../xz-4.999.9beta/src/liblzma/delta/Makefile.inc | 23 - .../src/liblzma/delta/delta_common.c | 73 - .../src/liblzma/delta/delta_common.h | 20 - .../src/liblzma/delta/delta_decoder.c | 75 - .../src/liblzma/delta/delta_decoder.h | 25 - .../src/liblzma/delta/delta_encoder.c | 106 - .../src/liblzma/delta/delta_encoder.h | 23 - .../src/liblzma/delta/delta_private.h | 37 - .../utils/xz-4.999.9beta/src/liblzma/liblzma.pc.in | 19 - .../xz-4.999.9beta/src/liblzma/liblzma_w32res.rc | 12 - .../xz-4.999.9beta/src/liblzma/lz/Makefile.inc | 21 - .../xz-4.999.9beta/src/liblzma/lz/lz_decoder.c | 299 - .../xz-4.999.9beta/src/liblzma/lz/lz_decoder.h | 234 - .../xz-4.999.9beta/src/liblzma/lz/lz_encoder.c | 559 - .../xz-4.999.9beta/src/liblzma/lz/lz_encoder.h | 324 - .../src/liblzma/lz/lz_encoder_hash.h | 97 - .../xz-4.999.9beta/src/liblzma/lz/lz_encoder_mf.c | 754 - .../xz-4.999.9beta/src/liblzma/lzma/Makefile.inc | 43 - .../xz-4.999.9beta/src/liblzma/lzma/fastpos.h | 143 - .../src/liblzma/lzma/fastpos_table.c | 519 - .../src/liblzma/lzma/fastpos_tablegen.c | 56 - .../src/liblzma/lzma/lzma2_decoder.c | 305 - .../src/liblzma/lzma/lzma2_decoder.h | 28 - .../src/liblzma/lzma/lzma2_encoder.c | 384 - .../src/liblzma/lzma/lzma2_encoder.h | 41 - .../xz-4.999.9beta/src/liblzma/lzma/lzma_common.h | 223 - .../xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.c | 1057 - .../xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.h | 52 - .../xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.c | 675 - .../xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.h | 54 - .../src/liblzma/lzma/lzma_encoder_optimum_fast.c | 179 - .../src/liblzma/lzma/lzma_encoder_optimum_normal.c | 868 - .../src/liblzma/lzma/lzma_encoder_presets.c | 53 - .../src/liblzma/lzma/lzma_encoder_private.h | 148 - .../src/liblzma/rangecoder/Makefile.inc | 21 - .../xz-4.999.9beta/src/liblzma/rangecoder/price.h | 92 - .../src/liblzma/rangecoder/price_table.c | 22 - .../src/liblzma/rangecoder/price_tablegen.c | 87 - .../src/liblzma/rangecoder/range_common.h | 73 - .../src/liblzma/rangecoder/range_decoder.h | 179 - .../src/liblzma/rangecoder/range_encoder.h | 231 - .../xz-4.999.9beta/src/liblzma/simple/Makefile.inc | 47 - .../utils/xz-4.999.9beta/src/liblzma/simple/arm.c | 69 - .../xz-4.999.9beta/src/liblzma/simple/armthumb.c | 74 - .../utils/xz-4.999.9beta/src/liblzma/simple/ia64.c | 110 - .../xz-4.999.9beta/src/liblzma/simple/powerpc.c | 73 - .../src/liblzma/simple/simple_coder.c | 268 - .../src/liblzma/simple/simple_coder.h | 60 - .../src/liblzma/simple/simple_decoder.c | 40 - .../src/liblzma/simple/simple_decoder.h | 22 - .../src/liblzma/simple/simple_encoder.c | 38 - .../src/liblzma/simple/simple_encoder.h | 23 - .../src/liblzma/simple/simple_private.h | 76 - .../xz-4.999.9beta/src/liblzma/simple/sparc.c | 81 - .../utils/xz-4.999.9beta/src/liblzma/simple/x86.c | 154 - .../src/liblzma/subblock/Makefile.inc | 20 - .../src/liblzma/subblock/subblock_decoder.c | 630 - .../src/liblzma/subblock/subblock_decoder.h | 22 - .../src/liblzma/subblock/subblock_decoder_helper.c | 70 - .../src/liblzma/subblock/subblock_decoder_helper.h | 29 - .../src/liblzma/subblock/subblock_encoder.c | 984 - .../src/liblzma/subblock/subblock_encoder.h | 21 - .../utils/xz-4.999.9beta/src/lzmainfo/Makefile.am | 29 - .../utils/xz-4.999.9beta/src/lzmainfo/Makefile.in | 659 - .../utils/xz-4.999.9beta/src/lzmainfo/lzmainfo.1 | 55 - .../utils/xz-4.999.9beta/src/lzmainfo/lzmainfo.c | 242 - .../utils/xz-4.999.9beta/src/scripts/Makefile.am | 65 - .../utils/xz-4.999.9beta/src/scripts/Makefile.in | 586 - .../utils/xz-4.999.9beta/src/scripts/xzdiff.1 | 74 - .../utils/xz-4.999.9beta/src/scripts/xzdiff.in | 172 - .../utils/xz-4.999.9beta/src/scripts/xzgrep.1 | 94 - .../utils/xz-4.999.9beta/src/scripts/xzgrep.in | 196 - .../utils/xz-4.999.9beta/src/scripts/xzless.1 | 66 - .../utils/xz-4.999.9beta/src/scripts/xzless.in | 58 - .../utils/xz-4.999.9beta/src/scripts/xzmore.1 | 54 - .../utils/xz-4.999.9beta/src/scripts/xzmore.in | 78 - .../source/utils/xz-4.999.9beta/src/xz/Makefile.am | 96 - .../source/utils/xz-4.999.9beta/src/xz/Makefile.in | 849 - Build/source/utils/xz-4.999.9beta/src/xz/args.c | 530 - Build/source/utils/xz-4.999.9beta/src/xz/args.h | 41 - Build/source/utils/xz-4.999.9beta/src/xz/coder.c | 639 - Build/source/utils/xz-4.999.9beta/src/xz/coder.h | 57 - Build/source/utils/xz-4.999.9beta/src/xz/file_io.c | 719 - Build/source/utils/xz-4.999.9beta/src/xz/file_io.h | 86 - .../source/utils/xz-4.999.9beta/src/xz/hardware.c | 95 - .../source/utils/xz-4.999.9beta/src/xz/hardware.h | 35 - Build/source/utils/xz-4.999.9beta/src/xz/main.c | 312 - Build/source/utils/xz-4.999.9beta/src/xz/main.h | 37 - Build/source/utils/xz-4.999.9beta/src/xz/message.c | 1172 -- Build/source/utils/xz-4.999.9beta/src/xz/message.h | 132 - Build/source/utils/xz-4.999.9beta/src/xz/options.c | 438 - Build/source/utils/xz-4.999.9beta/src/xz/options.h | 38 - Build/source/utils/xz-4.999.9beta/src/xz/private.h | 55 - Build/source/utils/xz-4.999.9beta/src/xz/signals.c | 173 - Build/source/utils/xz-4.999.9beta/src/xz/signals.h | 44 - Build/source/utils/xz-4.999.9beta/src/xz/suffix.c | 211 - Build/source/utils/xz-4.999.9beta/src/xz/suffix.h | 28 - Build/source/utils/xz-4.999.9beta/src/xz/util.c | 229 - Build/source/utils/xz-4.999.9beta/src/xz/util.h | 79 - Build/source/utils/xz-4.999.9beta/src/xz/xz.1 | 1250 -- .../utils/xz-4.999.9beta/src/xz/xz_w32res.rc | 12 - .../utils/xz-4.999.9beta/src/xzdec/Makefile.am | 61 - .../utils/xz-4.999.9beta/src/xzdec/Makefile.in | 714 - .../xz-4.999.9beta/src/xzdec/lzmadec_w32res.rc | 5 - .../source/utils/xz-4.999.9beta/src/xzdec/xzdec.1 | 168 - .../source/utils/xz-4.999.9beta/src/xzdec/xzdec.c | 496 - .../utils/xz-4.999.9beta/src/xzdec/xzdec_w32res.rc | 12 - .../source/utils/xz-4.999.9beta/tests/Makefile.am | 51 - .../source/utils/xz-4.999.9beta/tests/Makefile.in | 687 - Build/source/utils/xz-4.999.9beta/tests/bcj_test.c | 65 - .../tests/compress_prepared_bcj_sparc | Bin 1240 -> 0 bytes .../xz-4.999.9beta/tests/compress_prepared_bcj_x86 | Bin 1388 -> 0 bytes .../xz-4.999.9beta/tests/create_compress_files.c | 157 - .../source/utils/xz-4.999.9beta/tests/files/README | 232 - .../tests/files/bad-0-backward_size.xz | Bin 32 -> 0 bytes .../tests/files/bad-0-empty-truncated.xz | Bin 31 -> 0 bytes .../tests/files/bad-0-footer_magic.xz | Bin 32 -> 0 bytes .../tests/files/bad-0-header_magic.xz | Bin 32 -> 0 bytes .../tests/files/bad-0-nonempty_index.xz | Bin 32 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-0cat-alone.xz | Bin 55 -> 0 bytes .../tests/files/bad-0cat-header_magic.xz | Bin 64 -> 0 bytes .../tests/files/bad-0catpad-empty.xz | Bin 69 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-0pad-empty.xz | Bin 37 -> 0 bytes .../tests/files/bad-1-block_header-1.xz | Bin 64 -> 0 bytes .../tests/files/bad-1-block_header-2.xz | Bin 64 -> 0 bytes .../tests/files/bad-1-block_header-3.xz | Bin 68 -> 0 bytes .../tests/files/bad-1-block_header-4.xz | Bin 76 -> 0 bytes .../tests/files/bad-1-block_header-5.xz | Bin 72 -> 0 bytes .../tests/files/bad-1-check-crc32.xz | Bin 68 -> 0 bytes .../tests/files/bad-1-check-crc64.xz | Bin 72 -> 0 bytes .../tests/files/bad-1-check-sha256.xz | Bin 96 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-1.xz | Bin 64 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-2.xz | Bin 424 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-3.xz | Bin 424 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-4.xz | Bin 408 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-5.xz | Bin 408 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-6.xz | Bin 68 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-7.xz | Bin 408 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-1-lzma2-8.xz | Bin 464 -> 0 bytes .../tests/files/bad-1-stream_flags-1.xz | Bin 68 -> 0 bytes .../tests/files/bad-1-stream_flags-2.xz | Bin 68 -> 0 bytes .../tests/files/bad-1-stream_flags-3.xz | Bin 68 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-1-vli-1.xz | Bin 72 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-1-vli-2.xz | Bin 76 -> 0 bytes .../tests/files/bad-2-compressed_data_padding.xz | Bin 92 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-2-index-1.xz | Bin 92 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-2-index-2.xz | Bin 92 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-2-index-3.xz | Bin 92 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-2-index-4.xz | Bin 92 -> 0 bytes .../xz-4.999.9beta/tests/files/bad-2-index-5.xz | Bin 92 -> 0 bytes .../xz-4.999.9beta/tests/files/good-0-empty.xz | Bin 32 -> 0 bytes .../xz-4.999.9beta/tests/files/good-0cat-empty.xz | Bin 64 -> 0 bytes .../tests/files/good-0catpad-empty.xz | Bin 68 -> 0 bytes .../xz-4.999.9beta/tests/files/good-0pad-empty.xz | Bin 36 -> 0 bytes .../tests/files/good-1-3delta-lzma2.xz | Bin 528 -> 0 bytes .../tests/files/good-1-block_header-1.xz | Bin 72 -> 0 bytes .../tests/files/good-1-block_header-2.xz | Bin 68 -> 0 bytes .../tests/files/good-1-block_header-3.xz | Bin 68 -> 0 bytes .../tests/files/good-1-check-crc32.xz | Bin 68 -> 0 bytes .../tests/files/good-1-check-crc64.xz | Bin 72 -> 0 bytes .../tests/files/good-1-check-none.xz | Bin 64 -> 0 bytes .../tests/files/good-1-check-sha256.xz | Bin 96 -> 0 bytes .../tests/files/good-1-delta-lzma2.tiff.xz | Bin 51316 -> 0 bytes .../xz-4.999.9beta/tests/files/good-1-lzma2-1.xz | Bin 424 -> 0 bytes .../xz-4.999.9beta/tests/files/good-1-lzma2-2.xz | Bin 424 -> 0 bytes .../xz-4.999.9beta/tests/files/good-1-lzma2-3.xz | Bin 408 -> 0 bytes .../xz-4.999.9beta/tests/files/good-1-lzma2-4.xz | Bin 464 -> 0 bytes .../tests/files/good-1-sparc-lzma2.xz | Bin 612 -> 0 bytes .../xz-4.999.9beta/tests/files/good-1-x86-lzma2.xz | Bin 716 -> 0 bytes .../xz-4.999.9beta/tests/files/good-2-lzma2.xz | Bin 92 -> 0 bytes .../tests/files/unsupported-block_header.xz | Bin 68 -> 0 bytes .../tests/files/unsupported-check.xz | Bin 68 -> 0 bytes .../tests/files/unsupported-filter_flags-1.xz | Bin 68 -> 0 bytes .../tests/files/unsupported-filter_flags-2.xz | Bin 68 -> 0 bytes .../tests/files/unsupported-filter_flags-3.xz | Bin 68 -> 0 bytes .../utils/xz-4.999.9beta/tests/test_block_header.c | 240 - .../source/utils/xz-4.999.9beta/tests/test_check.c | 83 - .../utils/xz-4.999.9beta/tests/test_compress.sh | 129 - .../utils/xz-4.999.9beta/tests/test_files.sh | 33 - .../utils/xz-4.999.9beta/tests/test_filter_flags.c | 281 - .../source/utils/xz-4.999.9beta/tests/test_index.c | 532 - .../utils/xz-4.999.9beta/tests/test_stream_flags.c | 180 - Build/source/utils/xz-4.999.9beta/tests/tests.h | 124 - Build/source/utils/xz-4.999.9beta/version.sh | 24 - Build/source/utils/xz-4.999.9beta/windows/Makefile | 308 - Build/source/utils/xz-4.999.9beta/windows/README | 155 - Build/source/utils/xz-4.999.9beta/windows/config.h | 165 - 1353 files changed, 246039 insertions(+), 245967 deletions(-) create mode 100644 Build/source/README.coding create mode 100644 Build/source/extra/djgpp/ChangeLog create mode 100644 Build/source/extra/djgpp/README.djgpp create mode 100644 Build/source/extra/djgpp/cfgdtl.pat create mode 100644 Build/source/extra/djgpp/cfgdvidv.pat create mode 100644 Build/source/extra/djgpp/cfgdvilj.pat create mode 100644 Build/source/extra/djgpp/cfgdvips.pat create mode 100644 Build/source/extra/djgpp/cfgdvpdf.pat create mode 100644 Build/source/extra/djgpp/cfggsfpk.pat create mode 100644 Build/source/extra/djgpp/cfgkpath.pat create mode 100644 Build/source/extra/djgpp/cfglachk.pat create mode 100644 Build/source/extra/djgpp/cfgmain.pat create mode 100644 Build/source/extra/djgpp/cfgmkind.pat create mode 100644 Build/source/extra/djgpp/cfgmusix.pat create mode 100644 Build/source/extra/djgpp/cfgpspkm.pat create mode 100644 Build/source/extra/djgpp/cfgseetx.pat create mode 100644 Build/source/extra/djgpp/cfgtexht.pat create mode 100644 Build/source/extra/djgpp/cfgweb2c.pat create mode 100755 Build/source/extra/djgpp/config.bat create mode 100644 Build/source/extra/djgpp/pathconf.c create mode 100644 Build/source/extra/djgpp/popen.c create mode 100644 Build/source/extra/djgpp/putenv.c create mode 100644 Build/source/extra/djgpp/stat.c create mode 100644 Build/source/extra/djgpp/xstat.h create mode 100644 Build/source/extra/epstopdf/Makefile create mode 100644 Build/source/extra/epstopdf/README create mode 100644 Build/source/extra/epstopdf/epstopdf.1 create mode 100755 Build/source/extra/epstopdf/epstopdf.pl create mode 100644 Build/source/extra/epstopdf/test-atend.eps create mode 100644 Build/source/extra/epstopdf/test-bin2.eps create mode 100644 Build/source/extra/epstopdf/test-binary.eps create mode 100644 Build/source/extra/epstopdf/test-binhdr-cr.eps create mode 100644 Build/source/extra/epstopdf/test-binhdr-crlf.eps create mode 100644 Build/source/extra/epstopdf/test-binhdr-lf.eps create mode 100644 Build/source/extra/epstopdf/test-simple.eps create mode 100644 Build/source/extra/expat/COPYING create mode 100644 Build/source/extra/expat/Changes create mode 100644 Build/source/extra/expat/MANIFEST create mode 100644 Build/source/extra/expat/Makefile.in create mode 100644 Build/source/extra/expat/README create mode 100644 Build/source/extra/expat/aclocal.m4 create mode 100644 Build/source/extra/expat/config.hin create mode 100755 Build/source/extra/expat/configure create mode 100644 Build/source/extra/expat/configure.in create mode 100644 Build/source/extra/expat/conftools/config.guess create mode 100644 Build/source/extra/expat/conftools/config.sub create mode 100644 Build/source/extra/expat/conftools/install-sh create mode 100644 Build/source/extra/expat/conftools/ltconfig create mode 100644 Build/source/extra/expat/conftools/ltmain.sh create mode 100644 Build/source/extra/expat/conftools/missing create mode 100644 Build/source/extra/expat/conftools/mkinstalldirs create mode 100644 Build/source/extra/expat/doc/reference.html create mode 100644 Build/source/extra/expat/doc/style.css create mode 100644 Build/source/extra/expat/examples/Makefile.in create mode 100644 Build/source/extra/expat/examples/outline.c create mode 100644 Build/source/extra/expat/lib/Makefile.in create mode 100644 Build/source/extra/expat/lib/ascii.h create mode 100644 Build/source/extra/expat/lib/asciitab.h create mode 100644 Build/source/extra/expat/lib/config.h create mode 100644 Build/source/extra/expat/lib/expat.dep create mode 100644 Build/source/extra/expat/lib/expat.dsp create mode 100644 Build/source/extra/expat/lib/expat.dsw create mode 100644 Build/source/extra/expat/lib/expat.h create mode 100644 Build/source/extra/expat/lib/expat.mak create mode 100644 Build/source/extra/expat/lib/expat.plg create mode 100644 Build/source/extra/expat/lib/expat.vcproj create mode 100644 Build/source/extra/expat/lib/iasciitab.h create mode 100644 Build/source/extra/expat/lib/latin1tab.h create mode 100644 Build/source/extra/expat/lib/nametab.h create mode 100644 Build/source/extra/expat/lib/utf8tab.h create mode 100644 Build/source/extra/expat/lib/winconfig.h create mode 100644 Build/source/extra/expat/lib/xmlparse.c create mode 100644 Build/source/extra/expat/lib/xmlrole.c create mode 100644 Build/source/extra/expat/lib/xmlrole.h create mode 100644 Build/source/extra/expat/lib/xmltok.c create mode 100644 Build/source/extra/expat/lib/xmltok.h create mode 100644 Build/source/extra/expat/lib/xmltok_impl.c create mode 100644 Build/source/extra/expat/lib/xmltok_impl.h create mode 100644 Build/source/extra/expat/lib/xmltok_ns.c create mode 100644 Build/source/extra/expat/xmlwf/Makefile.in create mode 100644 Build/source/extra/expat/xmlwf/codepage.c create mode 100644 Build/source/extra/expat/xmlwf/codepage.h create mode 100644 Build/source/extra/expat/xmlwf/ct.c create mode 100644 Build/source/extra/expat/xmlwf/filemap.h create mode 100644 Build/source/extra/expat/xmlwf/readfilemap.c create mode 100644 Build/source/extra/expat/xmlwf/unixfilemap.c create mode 100644 Build/source/extra/expat/xmlwf/wfcheck.c create mode 100644 Build/source/extra/expat/xmlwf/wfcheck.h create mode 100644 Build/source/extra/expat/xmlwf/wfcheckmessage.c create mode 100644 Build/source/extra/expat/xmlwf/win32filemap.c create mode 100644 Build/source/extra/expat/xmlwf/xmlfile.c create mode 100644 Build/source/extra/expat/xmlwf/xmlfile.h create mode 100644 Build/source/extra/expat/xmlwf/xmlmime.c create mode 100644 Build/source/extra/expat/xmlwf/xmlmime.h create mode 100644 Build/source/extra/expat/xmlwf/xmltchar.h create mode 100644 Build/source/extra/expat/xmlwf/xmlurl.h create mode 100644 Build/source/extra/expat/xmlwf/xmlwf.c create mode 100644 Build/source/extra/expat/xmlwf/xmlwf.dsp create mode 100644 Build/source/extra/expat/xmlwf/xmlwin32url.cxx create mode 100644 Build/source/extra/jpeg/README create mode 100644 Build/source/extra/jpeg/ansi2knr.1 create mode 100644 Build/source/extra/jpeg/ansi2knr.c create mode 100644 Build/source/extra/jpeg/cderror.h create mode 100644 Build/source/extra/jpeg/cdjpeg.c create mode 100644 Build/source/extra/jpeg/cdjpeg.h create mode 100644 Build/source/extra/jpeg/cjpeg.1 create mode 100644 Build/source/extra/jpeg/cjpeg.c create mode 100644 Build/source/extra/jpeg/ckconfig.c create mode 100644 Build/source/extra/jpeg/coderules.doc create mode 100644 Build/source/extra/jpeg/config.guess create mode 100644 Build/source/extra/jpeg/config.sub create mode 100755 Build/source/extra/jpeg/configure create mode 100644 Build/source/extra/jpeg/djpeg.1 create mode 100644 Build/source/extra/jpeg/djpeg.c create mode 100644 Build/source/extra/jpeg/example.c create mode 100644 Build/source/extra/jpeg/filelist.doc create mode 100644 Build/source/extra/jpeg/install-sh create mode 100644 Build/source/extra/jpeg/install.doc create mode 100644 Build/source/extra/jpeg/jcapimin.c create mode 100644 Build/source/extra/jpeg/jcapistd.c create mode 100644 Build/source/extra/jpeg/jccoefct.c create mode 100644 Build/source/extra/jpeg/jccolor.c create mode 100644 Build/source/extra/jpeg/jcdctmgr.c create mode 100644 Build/source/extra/jpeg/jchuff.c create mode 100644 Build/source/extra/jpeg/jchuff.h create mode 100644 Build/source/extra/jpeg/jcinit.c create mode 100644 Build/source/extra/jpeg/jcmainct.c create mode 100644 Build/source/extra/jpeg/jcmarker.c create mode 100644 Build/source/extra/jpeg/jcmaster.c create mode 100644 Build/source/extra/jpeg/jcomapi.c create mode 100644 Build/source/extra/jpeg/jconfig.bcc create mode 100644 Build/source/extra/jpeg/jconfig.cfg create mode 100644 Build/source/extra/jpeg/jconfig.dj create mode 100644 Build/source/extra/jpeg/jconfig.doc create mode 100644 Build/source/extra/jpeg/jconfig.mac create mode 100644 Build/source/extra/jpeg/jconfig.manx create mode 100644 Build/source/extra/jpeg/jconfig.mc6 create mode 100644 Build/source/extra/jpeg/jconfig.sas create mode 100644 Build/source/extra/jpeg/jconfig.st create mode 100644 Build/source/extra/jpeg/jconfig.vc create mode 100644 Build/source/extra/jpeg/jconfig.vms create mode 100644 Build/source/extra/jpeg/jconfig.wat create mode 100644 Build/source/extra/jpeg/jcparam.c create mode 100644 Build/source/extra/jpeg/jcphuff.c create mode 100644 Build/source/extra/jpeg/jcprepct.c create mode 100644 Build/source/extra/jpeg/jcsample.c create mode 100644 Build/source/extra/jpeg/jctrans.c create mode 100644 Build/source/extra/jpeg/jdapimin.c create mode 100644 Build/source/extra/jpeg/jdapistd.c create mode 100644 Build/source/extra/jpeg/jdatadst.c create mode 100644 Build/source/extra/jpeg/jdatasrc.c create mode 100644 Build/source/extra/jpeg/jdcoefct.c create mode 100644 Build/source/extra/jpeg/jdcolor.c create mode 100644 Build/source/extra/jpeg/jdct.h create mode 100644 Build/source/extra/jpeg/jddctmgr.c create mode 100644 Build/source/extra/jpeg/jdhuff.c create mode 100644 Build/source/extra/jpeg/jdhuff.h create mode 100644 Build/source/extra/jpeg/jdinput.c create mode 100644 Build/source/extra/jpeg/jdmainct.c create mode 100644 Build/source/extra/jpeg/jdmarker.c create mode 100644 Build/source/extra/jpeg/jdmaster.c create mode 100644 Build/source/extra/jpeg/jdmerge.c create mode 100644 Build/source/extra/jpeg/jdphuff.c create mode 100644 Build/source/extra/jpeg/jdpostct.c create mode 100644 Build/source/extra/jpeg/jdsample.c create mode 100644 Build/source/extra/jpeg/jdtrans.c create mode 100644 Build/source/extra/jpeg/jerror.c create mode 100644 Build/source/extra/jpeg/jerror.h create mode 100644 Build/source/extra/jpeg/jfdctflt.c create mode 100644 Build/source/extra/jpeg/jfdctfst.c create mode 100644 Build/source/extra/jpeg/jfdctint.c create mode 100644 Build/source/extra/jpeg/jidctflt.c create mode 100644 Build/source/extra/jpeg/jidctfst.c create mode 100644 Build/source/extra/jpeg/jidctint.c create mode 100644 Build/source/extra/jpeg/jidctred.c create mode 100644 Build/source/extra/jpeg/jinclude.h create mode 100644 Build/source/extra/jpeg/jmemansi.c create mode 100644 Build/source/extra/jpeg/jmemdos.c create mode 100644 Build/source/extra/jpeg/jmemdosa.asm create mode 100644 Build/source/extra/jpeg/jmemmac.c create mode 100644 Build/source/extra/jpeg/jmemmgr.c create mode 100644 Build/source/extra/jpeg/jmemname.c create mode 100644 Build/source/extra/jpeg/jmemnobs.c create mode 100644 Build/source/extra/jpeg/jmemsys.h create mode 100644 Build/source/extra/jpeg/jmorecfg.h create mode 100644 Build/source/extra/jpeg/jpegint.h create mode 100644 Build/source/extra/jpeg/jpeglib.h create mode 100644 Build/source/extra/jpeg/jpegtran.1 create mode 100644 Build/source/extra/jpeg/jpegtran.c create mode 100644 Build/source/extra/jpeg/jquant1.c create mode 100644 Build/source/extra/jpeg/jquant2.c create mode 100644 Build/source/extra/jpeg/jutils.c create mode 100644 Build/source/extra/jpeg/jversion.h create mode 100644 Build/source/extra/jpeg/libjpeg.doc create mode 100644 Build/source/extra/jpeg/ltconfig create mode 100644 Build/source/extra/jpeg/ltmain.sh create mode 100644 Build/source/extra/jpeg/makcjpeg.st create mode 100644 Build/source/extra/jpeg/makdjpeg.st create mode 100644 Build/source/extra/jpeg/makeapps.ds create mode 100644 Build/source/extra/jpeg/makefile.ansi create mode 100644 Build/source/extra/jpeg/makefile.bcc create mode 100644 Build/source/extra/jpeg/makefile.cfg create mode 100644 Build/source/extra/jpeg/makefile.dj create mode 100644 Build/source/extra/jpeg/makefile.manx create mode 100644 Build/source/extra/jpeg/makefile.mc6 create mode 100644 Build/source/extra/jpeg/makefile.mms create mode 100644 Build/source/extra/jpeg/makefile.sas create mode 100644 Build/source/extra/jpeg/makefile.unix create mode 100644 Build/source/extra/jpeg/makefile.vc create mode 100644 Build/source/extra/jpeg/makefile.vms create mode 100644 Build/source/extra/jpeg/makefile.wat create mode 100644 Build/source/extra/jpeg/makelib.ds create mode 100644 Build/source/extra/jpeg/makeproj.mac create mode 100644 Build/source/extra/jpeg/makljpeg.st create mode 100644 Build/source/extra/jpeg/maktjpeg.st create mode 100644 Build/source/extra/jpeg/makvms.opt create mode 100644 Build/source/extra/jpeg/rdbmp.c create mode 100644 Build/source/extra/jpeg/rdcolmap.c create mode 100644 Build/source/extra/jpeg/rdgif.c create mode 100644 Build/source/extra/jpeg/rdjpgcom.1 create mode 100644 Build/source/extra/jpeg/rdjpgcom.c create mode 100644 Build/source/extra/jpeg/rdppm.c create mode 100644 Build/source/extra/jpeg/rdrle.c create mode 100644 Build/source/extra/jpeg/rdswitch.c create mode 100644 Build/source/extra/jpeg/rdtarga.c create mode 100644 Build/source/extra/jpeg/structure.doc create mode 100644 Build/source/extra/jpeg/testimg.bmp create mode 100644 Build/source/extra/jpeg/testimg.jpg create mode 100644 Build/source/extra/jpeg/testimg.ppm create mode 100644 Build/source/extra/jpeg/testimgp.jpg create mode 100644 Build/source/extra/jpeg/testorig.jpg create mode 100644 Build/source/extra/jpeg/testprog.jpg create mode 100644 Build/source/extra/jpeg/transupp.c create mode 100644 Build/source/extra/jpeg/transupp.h create mode 100644 Build/source/extra/jpeg/usage.doc create mode 100644 Build/source/extra/jpeg/wizard.doc create mode 100644 Build/source/extra/jpeg/wrbmp.c create mode 100644 Build/source/extra/jpeg/wrgif.c create mode 100644 Build/source/extra/jpeg/wrjpgcom.1 create mode 100644 Build/source/extra/jpeg/wrjpgcom.c create mode 100644 Build/source/extra/jpeg/wrppm.c create mode 100644 Build/source/extra/jpeg/wrrle.c create mode 100644 Build/source/extra/jpeg/wrtarga.c create mode 100644 Build/source/extra/unzip/api.c create mode 100644 Build/source/extra/unzip/consts.h create mode 100644 Build/source/extra/unzip/crc32.c create mode 100644 Build/source/extra/unzip/crctab.c create mode 100644 Build/source/extra/unzip/crypt.c create mode 100644 Build/source/extra/unzip/crypt.h create mode 100644 Build/source/extra/unzip/ebcdic.h create mode 100644 Build/source/extra/unzip/explode.c create mode 100644 Build/source/extra/unzip/extract.c create mode 100644 Build/source/extra/unzip/fileio.c create mode 100644 Build/source/extra/unzip/globals.c create mode 100644 Build/source/extra/unzip/globals.h create mode 100644 Build/source/extra/unzip/inflate.c create mode 100644 Build/source/extra/unzip/inflate.h create mode 100644 Build/source/extra/unzip/list.c create mode 100644 Build/source/extra/unzip/match.c create mode 100644 Build/source/extra/unzip/process.c create mode 100644 Build/source/extra/unzip/ttyio.c create mode 100644 Build/source/extra/unzip/ttyio.h create mode 100644 Build/source/extra/unzip/unreduce.c create mode 100644 Build/source/extra/unzip/unshrink.c create mode 100644 Build/source/extra/unzip/unzip.dep create mode 100644 Build/source/extra/unzip/unzip.dsp create mode 100644 Build/source/extra/unzip/unzip.dsw create mode 100644 Build/source/extra/unzip/unzip.h create mode 100644 Build/source/extra/unzip/unzip.mak create mode 100644 Build/source/extra/unzip/unzip.plg create mode 100644 Build/source/extra/unzip/unzip.vcproj create mode 100644 Build/source/extra/unzip/unzpriv.h create mode 100644 Build/source/extra/unzip/version.h create mode 100644 Build/source/extra/unzip/win32/nt.c create mode 100644 Build/source/extra/unzip/win32/nt.h create mode 100644 Build/source/extra/unzip/win32/w32cfg.h create mode 100644 Build/source/extra/unzip/win32/win32.c create mode 100644 Build/source/extra/unzip/windll/decs.h create mode 100644 Build/source/extra/unzip/windll/structs.h create mode 100644 Build/source/extra/unzip/windll/unzver.h create mode 100644 Build/source/extra/unzip/windll/windll.c create mode 100644 Build/source/extra/unzip/windll/windll.h create mode 100644 Build/source/extra/unzip/zip.h create mode 100644 Build/source/extra/unzip/zipinfo.c create mode 100644 Build/source/extra/xz-4.999.9beta/ABOUT-NLS create mode 100644 Build/source/extra/xz-4.999.9beta/AUTHORS create mode 100644 Build/source/extra/xz-4.999.9beta/COPYING create mode 100644 Build/source/extra/xz-4.999.9beta/COPYING.GPLv2 create mode 100644 Build/source/extra/xz-4.999.9beta/COPYING.GPLv3 create mode 100644 Build/source/extra/xz-4.999.9beta/COPYING.LGPLv2.1 create mode 100644 Build/source/extra/xz-4.999.9beta/ChangeLog create mode 100644 Build/source/extra/xz-4.999.9beta/Doxyfile.in create mode 100644 Build/source/extra/xz-4.999.9beta/INSTALL create mode 100644 Build/source/extra/xz-4.999.9beta/INSTALL.generic create mode 100644 Build/source/extra/xz-4.999.9beta/Makefile.am create mode 100644 Build/source/extra/xz-4.999.9beta/Makefile.in create mode 100644 Build/source/extra/xz-4.999.9beta/NEWS create mode 100644 Build/source/extra/xz-4.999.9beta/PACKAGERS create mode 100644 Build/source/extra/xz-4.999.9beta/README create mode 100644 Build/source/extra/xz-4.999.9beta/THANKS create mode 100644 Build/source/extra/xz-4.999.9beta/TODO create mode 100644 Build/source/extra/xz-4.999.9beta/aclocal.m4 create mode 100755 Build/source/extra/xz-4.999.9beta/autogen.sh create mode 100755 Build/source/extra/xz-4.999.9beta/build-aux/compile create mode 100755 Build/source/extra/xz-4.999.9beta/build-aux/config.guess create mode 100755 Build/source/extra/xz-4.999.9beta/build-aux/config.rpath create mode 100755 Build/source/extra/xz-4.999.9beta/build-aux/config.sub create mode 100755 Build/source/extra/xz-4.999.9beta/build-aux/depcomp create mode 100755 Build/source/extra/xz-4.999.9beta/build-aux/install-sh create mode 100755 Build/source/extra/xz-4.999.9beta/build-aux/ltmain.sh create mode 100755 Build/source/extra/xz-4.999.9beta/build-aux/missing create mode 100644 Build/source/extra/xz-4.999.9beta/config.h.in create mode 100755 Build/source/extra/xz-4.999.9beta/configure create mode 100644 Build/source/extra/xz-4.999.9beta/configure.ac create mode 100644 Build/source/extra/xz-4.999.9beta/debug/Makefile.am create mode 100644 Build/source/extra/xz-4.999.9beta/debug/Makefile.in create mode 100644 Build/source/extra/xz-4.999.9beta/debug/README create mode 100644 Build/source/extra/xz-4.999.9beta/debug/crc32.c create mode 100644 Build/source/extra/xz-4.999.9beta/debug/full_flush.c create mode 100644 Build/source/extra/xz-4.999.9beta/debug/hex2bin.c create mode 100644 Build/source/extra/xz-4.999.9beta/debug/known_sizes.c create mode 100644 Build/source/extra/xz-4.999.9beta/debug/memusage.c create mode 100644 Build/source/extra/xz-4.999.9beta/debug/repeat.c create mode 100644 Build/source/extra/xz-4.999.9beta/debug/sync_flush.c create mode 100644 Build/source/extra/xz-4.999.9beta/doc/faq.txt create mode 100644 Build/source/extra/xz-4.999.9beta/doc/history.txt create mode 100644 Build/source/extra/xz-4.999.9beta/doc/lzma-file-format.txt create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xz-a4.pdf create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzdec-a4.pdf create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzdiff-a4.pdf create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzgrep-a4.pdf create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzless-a4.pdf create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzmore-a4.pdf create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xz-letter.pdf create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzdec-letter.pdf create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzdiff-letter.pdf create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzgrep-letter.pdf create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzless-letter.pdf create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzmore-letter.pdf create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/txt/xz.txt create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/txt/xzdec.txt create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/txt/xzdiff.txt create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/txt/xzgrep.txt create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/txt/xzless.txt create mode 100644 Build/source/extra/xz-4.999.9beta/doc/man/txt/xzmore.txt create mode 100644 Build/source/extra/xz-4.999.9beta/doc/xz-file-format.txt create mode 100644 Build/source/extra/xz-4.999.9beta/dos/Makefile create mode 100644 Build/source/extra/xz-4.999.9beta/dos/README create mode 100644 Build/source/extra/xz-4.999.9beta/dos/config.h create mode 100755 Build/source/extra/xz-4.999.9beta/extra/7z2lzma/7z2lzma.bash create mode 100644 Build/source/extra/xz-4.999.9beta/extra/scanlzma/scanlzma.c create mode 100644 Build/source/extra/xz-4.999.9beta/lib/Makefile.am create mode 100644 Build/source/extra/xz-4.999.9beta/lib/Makefile.in create mode 100644 Build/source/extra/xz-4.999.9beta/lib/getopt.c create mode 100644 Build/source/extra/xz-4.999.9beta/lib/getopt.in.h create mode 100644 Build/source/extra/xz-4.999.9beta/lib/getopt1.c create mode 100644 Build/source/extra/xz-4.999.9beta/lib/getopt_int.h create mode 100644 Build/source/extra/xz-4.999.9beta/m4/acx_pthread.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/getopt.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/gettext.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/iconv.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/lc_cpucores.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/lc_physmem.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/lib-ld.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/lib-link.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/lib-prefix.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/libtool.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/ltoptions.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/ltsugar.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/ltversion.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/lt~obsolete.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/nls.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/po.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/posix-shell.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/progtest.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/m4/visibility.m4 create mode 100644 Build/source/extra/xz-4.999.9beta/po/LINGUAS create mode 100644 Build/source/extra/xz-4.999.9beta/po/Makefile.in.in create mode 100644 Build/source/extra/xz-4.999.9beta/po/Makevars create mode 100644 Build/source/extra/xz-4.999.9beta/po/POTFILES.in create mode 100644 Build/source/extra/xz-4.999.9beta/po/Rules-quot create mode 100644 Build/source/extra/xz-4.999.9beta/po/boldquot.sed create mode 100644 Build/source/extra/xz-4.999.9beta/po/en@boldquot.header create mode 100644 Build/source/extra/xz-4.999.9beta/po/en@quot.header create mode 100644 Build/source/extra/xz-4.999.9beta/po/insert-header.sin create mode 100644 Build/source/extra/xz-4.999.9beta/po/quot.sed create mode 100644 Build/source/extra/xz-4.999.9beta/po/remove-potcdate.sin create mode 100644 Build/source/extra/xz-4.999.9beta/po/stamp-po create mode 100644 Build/source/extra/xz-4.999.9beta/po/xz.pot create mode 100644 Build/source/extra/xz-4.999.9beta/src/Makefile.am create mode 100644 Build/source/extra/xz-4.999.9beta/src/Makefile.in create mode 100644 Build/source/extra/xz-4.999.9beta/src/common/bswap.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/common/common_w32res.rc create mode 100644 Build/source/extra/xz-4.999.9beta/src/common/cpucores.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/common/integer.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/common/mythread.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/common/open_stdxxx.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/common/physmem.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/common/sysdefs.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/Makefile.am create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/Makefile.in create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/Makefile.am create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/Makefile.in create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/base.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/bcj.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/block.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/check.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/container.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/delta.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/filter.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/index.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/index_hash.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/lzma.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/stream_flags.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/subblock.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/version.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/vli.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/Makefile.inc create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/check.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/check.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_fast.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_small.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_table.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_table_be.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_table_le.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_tablegen.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_x86.S create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_fast.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_small.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_table.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_table_be.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_table_le.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_tablegen.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_x86.S create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc_macros.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/check/sha256.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/Makefile.inc create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/alone_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/alone_decoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/alone_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/auto_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_buffer_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_buffer_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_decoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_encoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_header_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_header_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_util.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/bsr.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/common.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/common.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_buffer_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_decoder_memusage.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_encoder_memusage.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_preset.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_preset.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_buffer_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_buffer_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_common.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_common.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_decoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_encoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_flags_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_flags_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/index.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/index.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_encoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_hash.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_buffer_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_buffer_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_decoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_encoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_common.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_common.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/vli_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/vli_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/common/vli_size.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/delta/Makefile.inc create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_common.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_common.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_decoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_encoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_private.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/liblzma.pc.in create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/liblzma_w32res.rc create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lz/Makefile.inc create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_decoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder_hash.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder_mf.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/Makefile.inc create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/fastpos.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/fastpos_table.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/fastpos_tablegen.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_common.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_fast.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_normal.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_presets.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_private.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/Makefile.inc create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/price.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/price_table.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/price_tablegen.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/range_common.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/range_decoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/range_encoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/simple/Makefile.inc create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/simple/arm.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/simple/armthumb.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/simple/ia64.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/simple/powerpc.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_coder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_coder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_decoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_encoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_private.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/simple/sparc.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/simple/x86.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/Makefile.inc create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/lzmainfo/Makefile.am create mode 100644 Build/source/extra/xz-4.999.9beta/src/lzmainfo/Makefile.in create mode 100644 Build/source/extra/xz-4.999.9beta/src/lzmainfo/lzmainfo.1 create mode 100644 Build/source/extra/xz-4.999.9beta/src/lzmainfo/lzmainfo.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/scripts/Makefile.am create mode 100644 Build/source/extra/xz-4.999.9beta/src/scripts/Makefile.in create mode 100644 Build/source/extra/xz-4.999.9beta/src/scripts/xzdiff.1 create mode 100644 Build/source/extra/xz-4.999.9beta/src/scripts/xzdiff.in create mode 100644 Build/source/extra/xz-4.999.9beta/src/scripts/xzgrep.1 create mode 100644 Build/source/extra/xz-4.999.9beta/src/scripts/xzgrep.in create mode 100644 Build/source/extra/xz-4.999.9beta/src/scripts/xzless.1 create mode 100644 Build/source/extra/xz-4.999.9beta/src/scripts/xzless.in create mode 100644 Build/source/extra/xz-4.999.9beta/src/scripts/xzmore.1 create mode 100644 Build/source/extra/xz-4.999.9beta/src/scripts/xzmore.in create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/Makefile.am create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/Makefile.in create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/args.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/args.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/coder.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/coder.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/file_io.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/file_io.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/hardware.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/hardware.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/main.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/main.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/message.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/message.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/options.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/options.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/private.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/signals.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/signals.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/suffix.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/suffix.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/util.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/util.h create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/xz.1 create mode 100644 Build/source/extra/xz-4.999.9beta/src/xz/xz_w32res.rc create mode 100644 Build/source/extra/xz-4.999.9beta/src/xzdec/Makefile.am create mode 100644 Build/source/extra/xz-4.999.9beta/src/xzdec/Makefile.in create mode 100644 Build/source/extra/xz-4.999.9beta/src/xzdec/lzmadec_w32res.rc create mode 100644 Build/source/extra/xz-4.999.9beta/src/xzdec/xzdec.1 create mode 100644 Build/source/extra/xz-4.999.9beta/src/xzdec/xzdec.c create mode 100644 Build/source/extra/xz-4.999.9beta/src/xzdec/xzdec_w32res.rc create mode 100644 Build/source/extra/xz-4.999.9beta/tests/Makefile.am create mode 100644 Build/source/extra/xz-4.999.9beta/tests/Makefile.in create mode 100644 Build/source/extra/xz-4.999.9beta/tests/bcj_test.c create mode 100644 Build/source/extra/xz-4.999.9beta/tests/compress_prepared_bcj_sparc create mode 100644 Build/source/extra/xz-4.999.9beta/tests/compress_prepared_bcj_x86 create mode 100644 Build/source/extra/xz-4.999.9beta/tests/create_compress_files.c create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/README create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-0-backward_size.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-0-empty-truncated.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-0-footer_magic.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-0-header_magic.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-0-nonempty_index.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-0cat-alone.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-0cat-header_magic.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-0catpad-empty.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-0pad-empty.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-1.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-2.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-3.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-4.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-5.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-check-crc32.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-check-crc64.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-check-sha256.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-1.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-2.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-3.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-4.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-5.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-6.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-7.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-8.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-stream_flags-1.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-stream_flags-2.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-stream_flags-3.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-vli-1.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-1-vli-2.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-2-compressed_data_padding.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-1.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-2.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-3.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-4.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-5.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-0-empty.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-0cat-empty.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-0catpad-empty.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-0pad-empty.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-3delta-lzma2.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-block_header-1.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-block_header-2.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-block_header-3.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-crc32.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-crc64.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-none.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-sha256.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-delta-lzma2.tiff.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-1.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-2.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-3.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-4.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-sparc-lzma2.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-1-x86-lzma2.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/good-2-lzma2.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/unsupported-block_header.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/unsupported-check.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/unsupported-filter_flags-1.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/unsupported-filter_flags-2.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/files/unsupported-filter_flags-3.xz create mode 100644 Build/source/extra/xz-4.999.9beta/tests/test_block_header.c create mode 100644 Build/source/extra/xz-4.999.9beta/tests/test_check.c create mode 100755 Build/source/extra/xz-4.999.9beta/tests/test_compress.sh create mode 100755 Build/source/extra/xz-4.999.9beta/tests/test_files.sh create mode 100644 Build/source/extra/xz-4.999.9beta/tests/test_filter_flags.c create mode 100644 Build/source/extra/xz-4.999.9beta/tests/test_index.c create mode 100644 Build/source/extra/xz-4.999.9beta/tests/test_stream_flags.c create mode 100644 Build/source/extra/xz-4.999.9beta/tests/tests.h create mode 100644 Build/source/extra/xz-4.999.9beta/version.sh create mode 100644 Build/source/extra/xz-4.999.9beta/windows/Makefile create mode 100644 Build/source/extra/xz-4.999.9beta/windows/README create mode 100644 Build/source/extra/xz-4.999.9beta/windows/config.h delete mode 100644 Build/source/libs/expat/COPYING delete mode 100644 Build/source/libs/expat/Changes delete mode 100644 Build/source/libs/expat/MANIFEST delete mode 100644 Build/source/libs/expat/Makefile.in delete mode 100644 Build/source/libs/expat/README delete mode 100644 Build/source/libs/expat/aclocal.m4 delete mode 100644 Build/source/libs/expat/config.hin delete mode 100755 Build/source/libs/expat/configure delete mode 100644 Build/source/libs/expat/configure.in delete mode 100644 Build/source/libs/expat/conftools/config.guess delete mode 100644 Build/source/libs/expat/conftools/config.sub delete mode 100644 Build/source/libs/expat/conftools/install-sh delete mode 100644 Build/source/libs/expat/conftools/ltconfig delete mode 100644 Build/source/libs/expat/conftools/ltmain.sh delete mode 100644 Build/source/libs/expat/conftools/missing delete mode 100644 Build/source/libs/expat/conftools/mkinstalldirs delete mode 100644 Build/source/libs/expat/doc/reference.html delete mode 100644 Build/source/libs/expat/doc/style.css delete mode 100644 Build/source/libs/expat/examples/Makefile.in delete mode 100644 Build/source/libs/expat/examples/outline.c delete mode 100644 Build/source/libs/expat/lib/Makefile.in delete mode 100644 Build/source/libs/expat/lib/ascii.h delete mode 100644 Build/source/libs/expat/lib/asciitab.h delete mode 100644 Build/source/libs/expat/lib/config.h delete mode 100644 Build/source/libs/expat/lib/expat.dep delete mode 100644 Build/source/libs/expat/lib/expat.dsp delete mode 100644 Build/source/libs/expat/lib/expat.dsw delete mode 100644 Build/source/libs/expat/lib/expat.h delete mode 100644 Build/source/libs/expat/lib/expat.mak delete mode 100644 Build/source/libs/expat/lib/expat.plg delete mode 100644 Build/source/libs/expat/lib/expat.vcproj delete mode 100644 Build/source/libs/expat/lib/iasciitab.h delete mode 100644 Build/source/libs/expat/lib/latin1tab.h delete mode 100644 Build/source/libs/expat/lib/nametab.h delete mode 100644 Build/source/libs/expat/lib/utf8tab.h delete mode 100644 Build/source/libs/expat/lib/winconfig.h delete mode 100644 Build/source/libs/expat/lib/xmlparse.c delete mode 100644 Build/source/libs/expat/lib/xmlrole.c delete mode 100644 Build/source/libs/expat/lib/xmlrole.h delete mode 100644 Build/source/libs/expat/lib/xmltok.c delete mode 100644 Build/source/libs/expat/lib/xmltok.h delete mode 100644 Build/source/libs/expat/lib/xmltok_impl.c delete mode 100644 Build/source/libs/expat/lib/xmltok_impl.h delete mode 100644 Build/source/libs/expat/lib/xmltok_ns.c delete mode 100644 Build/source/libs/expat/xmlwf/Makefile.in delete mode 100644 Build/source/libs/expat/xmlwf/codepage.c delete mode 100644 Build/source/libs/expat/xmlwf/codepage.h delete mode 100644 Build/source/libs/expat/xmlwf/ct.c delete mode 100644 Build/source/libs/expat/xmlwf/filemap.h delete mode 100644 Build/source/libs/expat/xmlwf/readfilemap.c delete mode 100644 Build/source/libs/expat/xmlwf/unixfilemap.c delete mode 100644 Build/source/libs/expat/xmlwf/wfcheck.c delete mode 100644 Build/source/libs/expat/xmlwf/wfcheck.h delete mode 100644 Build/source/libs/expat/xmlwf/wfcheckmessage.c delete mode 100644 Build/source/libs/expat/xmlwf/win32filemap.c delete mode 100644 Build/source/libs/expat/xmlwf/xmlfile.c delete mode 100644 Build/source/libs/expat/xmlwf/xmlfile.h delete mode 100644 Build/source/libs/expat/xmlwf/xmlmime.c delete mode 100644 Build/source/libs/expat/xmlwf/xmlmime.h delete mode 100644 Build/source/libs/expat/xmlwf/xmltchar.h delete mode 100644 Build/source/libs/expat/xmlwf/xmlurl.h delete mode 100644 Build/source/libs/expat/xmlwf/xmlwf.c delete mode 100644 Build/source/libs/expat/xmlwf/xmlwf.dsp delete mode 100644 Build/source/libs/expat/xmlwf/xmlwin32url.cxx delete mode 100644 Build/source/libs/jpeg/README delete mode 100644 Build/source/libs/jpeg/ansi2knr.1 delete mode 100644 Build/source/libs/jpeg/ansi2knr.c delete mode 100644 Build/source/libs/jpeg/cderror.h delete mode 100644 Build/source/libs/jpeg/cdjpeg.c delete mode 100644 Build/source/libs/jpeg/cdjpeg.h delete mode 100644 Build/source/libs/jpeg/cjpeg.1 delete mode 100644 Build/source/libs/jpeg/cjpeg.c delete mode 100644 Build/source/libs/jpeg/ckconfig.c delete mode 100644 Build/source/libs/jpeg/coderules.doc delete mode 100644 Build/source/libs/jpeg/config.guess delete mode 100644 Build/source/libs/jpeg/config.sub delete mode 100755 Build/source/libs/jpeg/configure delete mode 100644 Build/source/libs/jpeg/djpeg.1 delete mode 100644 Build/source/libs/jpeg/djpeg.c delete mode 100644 Build/source/libs/jpeg/example.c delete mode 100644 Build/source/libs/jpeg/filelist.doc delete mode 100644 Build/source/libs/jpeg/install-sh delete mode 100644 Build/source/libs/jpeg/install.doc delete mode 100644 Build/source/libs/jpeg/jcapimin.c delete mode 100644 Build/source/libs/jpeg/jcapistd.c delete mode 100644 Build/source/libs/jpeg/jccoefct.c delete mode 100644 Build/source/libs/jpeg/jccolor.c delete mode 100644 Build/source/libs/jpeg/jcdctmgr.c delete mode 100644 Build/source/libs/jpeg/jchuff.c delete mode 100644 Build/source/libs/jpeg/jchuff.h delete mode 100644 Build/source/libs/jpeg/jcinit.c delete mode 100644 Build/source/libs/jpeg/jcmainct.c delete mode 100644 Build/source/libs/jpeg/jcmarker.c delete mode 100644 Build/source/libs/jpeg/jcmaster.c delete mode 100644 Build/source/libs/jpeg/jcomapi.c delete mode 100644 Build/source/libs/jpeg/jconfig.bcc delete mode 100644 Build/source/libs/jpeg/jconfig.cfg delete mode 100644 Build/source/libs/jpeg/jconfig.dj delete mode 100644 Build/source/libs/jpeg/jconfig.doc delete mode 100644 Build/source/libs/jpeg/jconfig.mac delete mode 100644 Build/source/libs/jpeg/jconfig.manx delete mode 100644 Build/source/libs/jpeg/jconfig.mc6 delete mode 100644 Build/source/libs/jpeg/jconfig.sas delete mode 100644 Build/source/libs/jpeg/jconfig.st delete mode 100644 Build/source/libs/jpeg/jconfig.vc delete mode 100644 Build/source/libs/jpeg/jconfig.vms delete mode 100644 Build/source/libs/jpeg/jconfig.wat delete mode 100644 Build/source/libs/jpeg/jcparam.c delete mode 100644 Build/source/libs/jpeg/jcphuff.c delete mode 100644 Build/source/libs/jpeg/jcprepct.c delete mode 100644 Build/source/libs/jpeg/jcsample.c delete mode 100644 Build/source/libs/jpeg/jctrans.c delete mode 100644 Build/source/libs/jpeg/jdapimin.c delete mode 100644 Build/source/libs/jpeg/jdapistd.c delete mode 100644 Build/source/libs/jpeg/jdatadst.c delete mode 100644 Build/source/libs/jpeg/jdatasrc.c delete mode 100644 Build/source/libs/jpeg/jdcoefct.c delete mode 100644 Build/source/libs/jpeg/jdcolor.c delete mode 100644 Build/source/libs/jpeg/jdct.h delete mode 100644 Build/source/libs/jpeg/jddctmgr.c delete mode 100644 Build/source/libs/jpeg/jdhuff.c delete mode 100644 Build/source/libs/jpeg/jdhuff.h delete mode 100644 Build/source/libs/jpeg/jdinput.c delete mode 100644 Build/source/libs/jpeg/jdmainct.c delete mode 100644 Build/source/libs/jpeg/jdmarker.c delete mode 100644 Build/source/libs/jpeg/jdmaster.c delete mode 100644 Build/source/libs/jpeg/jdmerge.c delete mode 100644 Build/source/libs/jpeg/jdphuff.c delete mode 100644 Build/source/libs/jpeg/jdpostct.c delete mode 100644 Build/source/libs/jpeg/jdsample.c delete mode 100644 Build/source/libs/jpeg/jdtrans.c delete mode 100644 Build/source/libs/jpeg/jerror.c delete mode 100644 Build/source/libs/jpeg/jerror.h delete mode 100644 Build/source/libs/jpeg/jfdctflt.c delete mode 100644 Build/source/libs/jpeg/jfdctfst.c delete mode 100644 Build/source/libs/jpeg/jfdctint.c delete mode 100644 Build/source/libs/jpeg/jidctflt.c delete mode 100644 Build/source/libs/jpeg/jidctfst.c delete mode 100644 Build/source/libs/jpeg/jidctint.c delete mode 100644 Build/source/libs/jpeg/jidctred.c delete mode 100644 Build/source/libs/jpeg/jinclude.h delete mode 100644 Build/source/libs/jpeg/jmemansi.c delete mode 100644 Build/source/libs/jpeg/jmemdos.c delete mode 100644 Build/source/libs/jpeg/jmemdosa.asm delete mode 100644 Build/source/libs/jpeg/jmemmac.c delete mode 100644 Build/source/libs/jpeg/jmemmgr.c delete mode 100644 Build/source/libs/jpeg/jmemname.c delete mode 100644 Build/source/libs/jpeg/jmemnobs.c delete mode 100644 Build/source/libs/jpeg/jmemsys.h delete mode 100644 Build/source/libs/jpeg/jmorecfg.h delete mode 100644 Build/source/libs/jpeg/jpegint.h delete mode 100644 Build/source/libs/jpeg/jpeglib.h delete mode 100644 Build/source/libs/jpeg/jpegtran.1 delete mode 100644 Build/source/libs/jpeg/jpegtran.c delete mode 100644 Build/source/libs/jpeg/jquant1.c delete mode 100644 Build/source/libs/jpeg/jquant2.c delete mode 100644 Build/source/libs/jpeg/jutils.c delete mode 100644 Build/source/libs/jpeg/jversion.h delete mode 100644 Build/source/libs/jpeg/libjpeg.doc delete mode 100644 Build/source/libs/jpeg/ltconfig delete mode 100644 Build/source/libs/jpeg/ltmain.sh delete mode 100644 Build/source/libs/jpeg/makcjpeg.st delete mode 100644 Build/source/libs/jpeg/makdjpeg.st delete mode 100644 Build/source/libs/jpeg/makeapps.ds delete mode 100644 Build/source/libs/jpeg/makefile.ansi delete mode 100644 Build/source/libs/jpeg/makefile.bcc delete mode 100644 Build/source/libs/jpeg/makefile.cfg delete mode 100644 Build/source/libs/jpeg/makefile.dj delete mode 100644 Build/source/libs/jpeg/makefile.manx delete mode 100644 Build/source/libs/jpeg/makefile.mc6 delete mode 100644 Build/source/libs/jpeg/makefile.mms delete mode 100644 Build/source/libs/jpeg/makefile.sas delete mode 100644 Build/source/libs/jpeg/makefile.unix delete mode 100644 Build/source/libs/jpeg/makefile.vc delete mode 100644 Build/source/libs/jpeg/makefile.vms delete mode 100644 Build/source/libs/jpeg/makefile.wat delete mode 100644 Build/source/libs/jpeg/makelib.ds delete mode 100644 Build/source/libs/jpeg/makeproj.mac delete mode 100644 Build/source/libs/jpeg/makljpeg.st delete mode 100644 Build/source/libs/jpeg/maktjpeg.st delete mode 100644 Build/source/libs/jpeg/makvms.opt delete mode 100644 Build/source/libs/jpeg/rdbmp.c delete mode 100644 Build/source/libs/jpeg/rdcolmap.c delete mode 100644 Build/source/libs/jpeg/rdgif.c delete mode 100644 Build/source/libs/jpeg/rdjpgcom.1 delete mode 100644 Build/source/libs/jpeg/rdjpgcom.c delete mode 100644 Build/source/libs/jpeg/rdppm.c delete mode 100644 Build/source/libs/jpeg/rdrle.c delete mode 100644 Build/source/libs/jpeg/rdswitch.c delete mode 100644 Build/source/libs/jpeg/rdtarga.c delete mode 100644 Build/source/libs/jpeg/structure.doc delete mode 100644 Build/source/libs/jpeg/testimg.bmp delete mode 100644 Build/source/libs/jpeg/testimg.jpg delete mode 100644 Build/source/libs/jpeg/testimg.ppm delete mode 100644 Build/source/libs/jpeg/testimgp.jpg delete mode 100644 Build/source/libs/jpeg/testorig.jpg delete mode 100644 Build/source/libs/jpeg/testprog.jpg delete mode 100644 Build/source/libs/jpeg/transupp.c delete mode 100644 Build/source/libs/jpeg/transupp.h delete mode 100644 Build/source/libs/jpeg/usage.doc delete mode 100644 Build/source/libs/jpeg/wizard.doc delete mode 100644 Build/source/libs/jpeg/wrbmp.c delete mode 100644 Build/source/libs/jpeg/wrgif.c delete mode 100644 Build/source/libs/jpeg/wrjpgcom.1 delete mode 100644 Build/source/libs/jpeg/wrjpgcom.c delete mode 100644 Build/source/libs/jpeg/wrppm.c delete mode 100644 Build/source/libs/jpeg/wrrle.c delete mode 100644 Build/source/libs/jpeg/wrtarga.c delete mode 100644 Build/source/libs/unzip/api.c delete mode 100644 Build/source/libs/unzip/consts.h delete mode 100644 Build/source/libs/unzip/crc32.c delete mode 100644 Build/source/libs/unzip/crctab.c delete mode 100644 Build/source/libs/unzip/crypt.c delete mode 100644 Build/source/libs/unzip/crypt.h delete mode 100644 Build/source/libs/unzip/ebcdic.h delete mode 100644 Build/source/libs/unzip/explode.c delete mode 100644 Build/source/libs/unzip/extract.c delete mode 100644 Build/source/libs/unzip/fileio.c delete mode 100644 Build/source/libs/unzip/globals.c delete mode 100644 Build/source/libs/unzip/globals.h delete mode 100644 Build/source/libs/unzip/inflate.c delete mode 100644 Build/source/libs/unzip/inflate.h delete mode 100644 Build/source/libs/unzip/list.c delete mode 100644 Build/source/libs/unzip/match.c delete mode 100644 Build/source/libs/unzip/process.c delete mode 100644 Build/source/libs/unzip/ttyio.c delete mode 100644 Build/source/libs/unzip/ttyio.h delete mode 100644 Build/source/libs/unzip/unreduce.c delete mode 100644 Build/source/libs/unzip/unshrink.c delete mode 100644 Build/source/libs/unzip/unzip.dep delete mode 100644 Build/source/libs/unzip/unzip.dsp delete mode 100644 Build/source/libs/unzip/unzip.dsw delete mode 100644 Build/source/libs/unzip/unzip.h delete mode 100644 Build/source/libs/unzip/unzip.mak delete mode 100644 Build/source/libs/unzip/unzip.plg delete mode 100644 Build/source/libs/unzip/unzip.vcproj delete mode 100644 Build/source/libs/unzip/unzpriv.h delete mode 100644 Build/source/libs/unzip/version.h delete mode 100644 Build/source/libs/unzip/win32/nt.c delete mode 100644 Build/source/libs/unzip/win32/nt.h delete mode 100644 Build/source/libs/unzip/win32/w32cfg.h delete mode 100644 Build/source/libs/unzip/win32/win32.c delete mode 100644 Build/source/libs/unzip/windll/decs.h delete mode 100644 Build/source/libs/unzip/windll/structs.h delete mode 100644 Build/source/libs/unzip/windll/unzver.h delete mode 100644 Build/source/libs/unzip/windll/windll.c delete mode 100644 Build/source/libs/unzip/windll/windll.h delete mode 100644 Build/source/libs/unzip/zip.h delete mode 100644 Build/source/libs/unzip/zipinfo.c delete mode 100644 Build/source/texk/djgpp/ChangeLog delete mode 100644 Build/source/texk/djgpp/README.djgpp delete mode 100644 Build/source/texk/djgpp/cfgdtl.pat delete mode 100644 Build/source/texk/djgpp/cfgdvidv.pat delete mode 100644 Build/source/texk/djgpp/cfgdvilj.pat delete mode 100644 Build/source/texk/djgpp/cfgdvips.pat delete mode 100644 Build/source/texk/djgpp/cfgdvpdf.pat delete mode 100644 Build/source/texk/djgpp/cfggsfpk.pat delete mode 100644 Build/source/texk/djgpp/cfgkpath.pat delete mode 100644 Build/source/texk/djgpp/cfglachk.pat delete mode 100644 Build/source/texk/djgpp/cfgmain.pat delete mode 100644 Build/source/texk/djgpp/cfgmkind.pat delete mode 100644 Build/source/texk/djgpp/cfgmusix.pat delete mode 100644 Build/source/texk/djgpp/cfgpspkm.pat delete mode 100644 Build/source/texk/djgpp/cfgseetx.pat delete mode 100644 Build/source/texk/djgpp/cfgtexht.pat delete mode 100644 Build/source/texk/djgpp/cfgweb2c.pat delete mode 100755 Build/source/texk/djgpp/config.bat delete mode 100644 Build/source/texk/djgpp/pathconf.c delete mode 100644 Build/source/texk/djgpp/popen.c delete mode 100644 Build/source/texk/djgpp/putenv.c delete mode 100644 Build/source/texk/djgpp/stat.c delete mode 100644 Build/source/texk/djgpp/xstat.h delete mode 100644 Build/source/utils/epstopdf/Makefile delete mode 100644 Build/source/utils/epstopdf/README delete mode 100644 Build/source/utils/epstopdf/epstopdf.1 delete mode 100755 Build/source/utils/epstopdf/epstopdf.pl delete mode 100644 Build/source/utils/epstopdf/test-atend.eps delete mode 100644 Build/source/utils/epstopdf/test-bin2.eps delete mode 100644 Build/source/utils/epstopdf/test-binary.eps delete mode 100644 Build/source/utils/epstopdf/test-binhdr-cr.eps delete mode 100644 Build/source/utils/epstopdf/test-binhdr-crlf.eps delete mode 100644 Build/source/utils/epstopdf/test-binhdr-lf.eps delete mode 100644 Build/source/utils/epstopdf/test-simple.eps delete mode 100644 Build/source/utils/xz-4.999.9beta/ABOUT-NLS delete mode 100644 Build/source/utils/xz-4.999.9beta/AUTHORS delete mode 100644 Build/source/utils/xz-4.999.9beta/COPYING delete mode 100644 Build/source/utils/xz-4.999.9beta/COPYING.GPLv2 delete mode 100644 Build/source/utils/xz-4.999.9beta/COPYING.GPLv3 delete mode 100644 Build/source/utils/xz-4.999.9beta/COPYING.LGPLv2.1 delete mode 100644 Build/source/utils/xz-4.999.9beta/ChangeLog delete mode 100644 Build/source/utils/xz-4.999.9beta/Doxyfile.in delete mode 100644 Build/source/utils/xz-4.999.9beta/INSTALL delete mode 100644 Build/source/utils/xz-4.999.9beta/INSTALL.generic delete mode 100644 Build/source/utils/xz-4.999.9beta/Makefile.am delete mode 100644 Build/source/utils/xz-4.999.9beta/Makefile.in delete mode 100644 Build/source/utils/xz-4.999.9beta/NEWS delete mode 100644 Build/source/utils/xz-4.999.9beta/PACKAGERS delete mode 100644 Build/source/utils/xz-4.999.9beta/README delete mode 100644 Build/source/utils/xz-4.999.9beta/THANKS delete mode 100644 Build/source/utils/xz-4.999.9beta/TODO delete mode 100644 Build/source/utils/xz-4.999.9beta/aclocal.m4 delete mode 100755 Build/source/utils/xz-4.999.9beta/autogen.sh delete mode 100755 Build/source/utils/xz-4.999.9beta/build-aux/compile delete mode 100755 Build/source/utils/xz-4.999.9beta/build-aux/config.guess delete mode 100755 Build/source/utils/xz-4.999.9beta/build-aux/config.rpath delete mode 100755 Build/source/utils/xz-4.999.9beta/build-aux/config.sub delete mode 100755 Build/source/utils/xz-4.999.9beta/build-aux/depcomp delete mode 100755 Build/source/utils/xz-4.999.9beta/build-aux/install-sh delete mode 100755 Build/source/utils/xz-4.999.9beta/build-aux/ltmain.sh delete mode 100755 Build/source/utils/xz-4.999.9beta/build-aux/missing delete mode 100644 Build/source/utils/xz-4.999.9beta/config.h.in delete mode 100755 Build/source/utils/xz-4.999.9beta/configure delete mode 100644 Build/source/utils/xz-4.999.9beta/configure.ac delete mode 100644 Build/source/utils/xz-4.999.9beta/debug/Makefile.am delete mode 100644 Build/source/utils/xz-4.999.9beta/debug/Makefile.in delete mode 100644 Build/source/utils/xz-4.999.9beta/debug/README delete mode 100644 Build/source/utils/xz-4.999.9beta/debug/crc32.c delete mode 100644 Build/source/utils/xz-4.999.9beta/debug/full_flush.c delete mode 100644 Build/source/utils/xz-4.999.9beta/debug/hex2bin.c delete mode 100644 Build/source/utils/xz-4.999.9beta/debug/known_sizes.c delete mode 100644 Build/source/utils/xz-4.999.9beta/debug/memusage.c delete mode 100644 Build/source/utils/xz-4.999.9beta/debug/repeat.c delete mode 100644 Build/source/utils/xz-4.999.9beta/debug/sync_flush.c delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/faq.txt delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/history.txt delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/lzma-file-format.txt delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xz-a4.pdf delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzdec-a4.pdf delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzdiff-a4.pdf delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzgrep-a4.pdf delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzless-a4.pdf delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzmore-a4.pdf delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xz-letter.pdf delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzdec-letter.pdf delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzdiff-letter.pdf delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzgrep-letter.pdf delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzless-letter.pdf delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzmore-letter.pdf delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/txt/xz.txt delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/txt/xzdec.txt delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/txt/xzdiff.txt delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/txt/xzgrep.txt delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/txt/xzless.txt delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/man/txt/xzmore.txt delete mode 100644 Build/source/utils/xz-4.999.9beta/doc/xz-file-format.txt delete mode 100644 Build/source/utils/xz-4.999.9beta/dos/Makefile delete mode 100644 Build/source/utils/xz-4.999.9beta/dos/README delete mode 100644 Build/source/utils/xz-4.999.9beta/dos/config.h delete mode 100755 Build/source/utils/xz-4.999.9beta/extra/7z2lzma/7z2lzma.bash delete mode 100644 Build/source/utils/xz-4.999.9beta/extra/scanlzma/scanlzma.c delete mode 100644 Build/source/utils/xz-4.999.9beta/lib/Makefile.am delete mode 100644 Build/source/utils/xz-4.999.9beta/lib/Makefile.in delete mode 100644 Build/source/utils/xz-4.999.9beta/lib/getopt.c delete mode 100644 Build/source/utils/xz-4.999.9beta/lib/getopt.in.h delete mode 100644 Build/source/utils/xz-4.999.9beta/lib/getopt1.c delete mode 100644 Build/source/utils/xz-4.999.9beta/lib/getopt_int.h delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/acx_pthread.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/getopt.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/gettext.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/iconv.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/lc_cpucores.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/lc_physmem.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/lib-ld.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/lib-link.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/lib-prefix.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/libtool.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/ltoptions.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/ltsugar.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/ltversion.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/lt~obsolete.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/nls.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/po.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/posix-shell.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/progtest.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/m4/visibility.m4 delete mode 100644 Build/source/utils/xz-4.999.9beta/po/LINGUAS delete mode 100644 Build/source/utils/xz-4.999.9beta/po/Makefile.in.in delete mode 100644 Build/source/utils/xz-4.999.9beta/po/Makevars delete mode 100644 Build/source/utils/xz-4.999.9beta/po/POTFILES.in delete mode 100644 Build/source/utils/xz-4.999.9beta/po/Rules-quot delete mode 100644 Build/source/utils/xz-4.999.9beta/po/boldquot.sed delete mode 100644 Build/source/utils/xz-4.999.9beta/po/en@boldquot.header delete mode 100644 Build/source/utils/xz-4.999.9beta/po/en@quot.header delete mode 100644 Build/source/utils/xz-4.999.9beta/po/insert-header.sin delete mode 100644 Build/source/utils/xz-4.999.9beta/po/quot.sed delete mode 100644 Build/source/utils/xz-4.999.9beta/po/remove-potcdate.sin delete mode 100644 Build/source/utils/xz-4.999.9beta/po/stamp-po delete mode 100644 Build/source/utils/xz-4.999.9beta/po/xz.pot delete mode 100644 Build/source/utils/xz-4.999.9beta/src/Makefile.am delete mode 100644 Build/source/utils/xz-4.999.9beta/src/Makefile.in delete mode 100644 Build/source/utils/xz-4.999.9beta/src/common/bswap.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/common/common_w32res.rc delete mode 100644 Build/source/utils/xz-4.999.9beta/src/common/cpucores.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/common/integer.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/common/mythread.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/common/open_stdxxx.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/common/physmem.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/common/sysdefs.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/Makefile.am delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/Makefile.in delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/Makefile.am delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/Makefile.in delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/base.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/bcj.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/block.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/check.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/container.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/delta.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/filter.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/index.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/index_hash.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/lzma.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/stream_flags.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/subblock.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/version.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/vli.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/Makefile.inc delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/check.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/check.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_fast.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_small.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_table.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_table_be.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_table_le.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_tablegen.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_x86.S delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_fast.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_small.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_table.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_table_be.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_table_le.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_tablegen.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_x86.S delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc_macros.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/check/sha256.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/Makefile.inc delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/alone_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/alone_decoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/alone_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/auto_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_buffer_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_buffer_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_decoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_encoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_header_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_header_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_util.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/bsr.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/common.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/common.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_buffer_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_decoder_memusage.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_encoder_memusage.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_preset.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_preset.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_buffer_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_buffer_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_common.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_common.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_decoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_encoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_flags_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_flags_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/index.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/index.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_encoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_hash.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_buffer_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_buffer_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_decoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_encoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_common.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_common.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/vli_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/vli_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/common/vli_size.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/delta/Makefile.inc delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_common.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_common.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_decoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_encoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_private.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/liblzma.pc.in delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/liblzma_w32res.rc delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lz/Makefile.inc delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_decoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder_hash.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder_mf.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/Makefile.inc delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/fastpos.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/fastpos_table.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/fastpos_tablegen.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_common.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_fast.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_normal.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_presets.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_private.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/Makefile.inc delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/price.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/price_table.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/price_tablegen.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/range_common.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/range_decoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/range_encoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/simple/Makefile.inc delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/simple/arm.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/simple/armthumb.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/simple/ia64.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/simple/powerpc.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_coder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_coder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_decoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_encoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_private.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/simple/sparc.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/simple/x86.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/Makefile.inc delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/lzmainfo/Makefile.am delete mode 100644 Build/source/utils/xz-4.999.9beta/src/lzmainfo/Makefile.in delete mode 100644 Build/source/utils/xz-4.999.9beta/src/lzmainfo/lzmainfo.1 delete mode 100644 Build/source/utils/xz-4.999.9beta/src/lzmainfo/lzmainfo.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/scripts/Makefile.am delete mode 100644 Build/source/utils/xz-4.999.9beta/src/scripts/Makefile.in delete mode 100644 Build/source/utils/xz-4.999.9beta/src/scripts/xzdiff.1 delete mode 100644 Build/source/utils/xz-4.999.9beta/src/scripts/xzdiff.in delete mode 100644 Build/source/utils/xz-4.999.9beta/src/scripts/xzgrep.1 delete mode 100644 Build/source/utils/xz-4.999.9beta/src/scripts/xzgrep.in delete mode 100644 Build/source/utils/xz-4.999.9beta/src/scripts/xzless.1 delete mode 100644 Build/source/utils/xz-4.999.9beta/src/scripts/xzless.in delete mode 100644 Build/source/utils/xz-4.999.9beta/src/scripts/xzmore.1 delete mode 100644 Build/source/utils/xz-4.999.9beta/src/scripts/xzmore.in delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/Makefile.am delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/Makefile.in delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/args.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/args.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/coder.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/coder.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/file_io.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/file_io.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/hardware.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/hardware.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/main.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/main.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/message.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/message.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/options.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/options.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/private.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/signals.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/signals.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/suffix.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/suffix.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/util.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/util.h delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/xz.1 delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xz/xz_w32res.rc delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xzdec/Makefile.am delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xzdec/Makefile.in delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xzdec/lzmadec_w32res.rc delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xzdec/xzdec.1 delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xzdec/xzdec.c delete mode 100644 Build/source/utils/xz-4.999.9beta/src/xzdec/xzdec_w32res.rc delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/Makefile.am delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/Makefile.in delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/bcj_test.c delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/compress_prepared_bcj_sparc delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/compress_prepared_bcj_x86 delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/create_compress_files.c delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/README delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-0-backward_size.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-0-empty-truncated.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-0-footer_magic.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-0-header_magic.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-0-nonempty_index.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-0cat-alone.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-0cat-header_magic.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-0catpad-empty.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-0pad-empty.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-1.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-2.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-3.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-4.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-5.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-check-crc32.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-check-crc64.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-check-sha256.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-1.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-2.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-3.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-4.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-5.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-6.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-7.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-8.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-stream_flags-1.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-stream_flags-2.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-stream_flags-3.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-vli-1.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-1-vli-2.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-2-compressed_data_padding.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-1.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-2.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-3.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-4.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-5.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-0-empty.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-0cat-empty.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-0catpad-empty.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-0pad-empty.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-3delta-lzma2.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-block_header-1.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-block_header-2.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-block_header-3.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-crc32.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-crc64.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-none.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-sha256.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-delta-lzma2.tiff.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-1.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-2.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-3.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-4.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-sparc-lzma2.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-1-x86-lzma2.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/good-2-lzma2.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/unsupported-block_header.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/unsupported-check.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/unsupported-filter_flags-1.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/unsupported-filter_flags-2.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/files/unsupported-filter_flags-3.xz delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/test_block_header.c delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/test_check.c delete mode 100755 Build/source/utils/xz-4.999.9beta/tests/test_compress.sh delete mode 100755 Build/source/utils/xz-4.999.9beta/tests/test_files.sh delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/test_filter_flags.c delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/test_index.c delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/test_stream_flags.c delete mode 100644 Build/source/utils/xz-4.999.9beta/tests/tests.h delete mode 100644 Build/source/utils/xz-4.999.9beta/version.sh delete mode 100644 Build/source/utils/xz-4.999.9beta/windows/Makefile delete mode 100644 Build/source/utils/xz-4.999.9beta/windows/README delete mode 100644 Build/source/utils/xz-4.999.9beta/windows/config.h (limited to 'Build/source') diff --git a/Build/source/Makefile.am b/Build/source/Makefile.am index 30788889c7f..ce8a8d828a2 100644 --- a/Build/source/Makefile.am +++ b/Build/source/Makefile.am @@ -15,6 +15,7 @@ distcleancheck_listfiles = find . -type f -o -type l -print EXTRA_DIST = \ Build \ + README.coding \ README.config \ README.cross \ README.hacking \ diff --git a/Build/source/Makefile.in b/Build/source/Makefile.in index 0f3c90663f6..ff031d01902 100644 --- a/Build/source/Makefile.in +++ b/Build/source/Makefile.in @@ -319,6 +319,7 @@ distuninstallcheck_listfiles = find . -type f -o -type l -print distcleancheck_listfiles = find . -type f -o -type l -print EXTRA_DIST = \ Build \ + README.coding \ README.config \ README.cross \ README.hacking \ diff --git a/Build/source/README.coding b/Build/source/README.coding new file mode 100644 index 00000000000..fe7edbd3209 --- /dev/null +++ b/Build/source/README.coding @@ -0,0 +1,70 @@ +Copyright (C) 2009 Peter Breitenlohner +You may freely use, modify and/or distribute this file. + + TeX Live (TL) coding rules + ========================== + +Ideally, building all of TL with '--enable-compiler-warnings=max' should +produce no (gcc) compiler warnings at all. In spite of considerable efforts +into that direction we are still far from that goal and there are reasons +that we may never fully reach it. Below are some rules about declarations +(of functions and variables) and the use of const. These rules should be +applied to all parts of the TL tree, except in some of those maintained +independently. + +1. Declarations +=============== + +1.1. ANSI C function prototypes and definitions +----------------------------------------------- +The TL build system no longer supports pre-ANSI C compilers. Thus all +functions prototypes and definitions must conform to the ANSI C standard +(including 'void' in the declaration of functions that take no parameters). + +1.2. Static +----------- +Functions used in only one file must be declared 'static'; no prototype is +required except as forward declaration. + +1.3. Extern +----------- +Functions used in several files require (extern) prototypes to be provided +by a header files. That header must be included in the file defining the +function and in all files using that function -- this is the only way to +guarantee consistency between definition and use of functions. No more +'extern's sprinkled throughout the C code (with or without comment where +that function is defined). + +1.4. Variables +-------------- +The declaration of global variables should follow analogous rules, they +should either be static or declared extern in a header and instatiated in +exectly one file. + +2. Const +======== + +2.1. Function parameters +------------------------ +Ideally, a function parameter not modified by the function should be +declared as const. This is important in particiular for strings ('char *') +because frequently string literals are used as actual arguments. Note, +however, that a 'char **' value is not assignment compatible with a 'const +char **' variable. Getting all 'const's right often is quite involved but +usually can be done. There are, however, a few notable exceptions: the X11 +headers are full of declarations that ought to use const but do not and the +same is true to some extent for zlib. + +2.2. What must be avoided +------------------------- +The compiler warnings 'assignment/initialization/passing arg/return discards +qualifiers...' must be avoided under all circumstances, except when caused +by X11 headers/macros or third party code. + +2.3. What should be avoided +--------------------------- +A type cast, e.g., from 'const char *' to 'char *' doesn't solve any +problems, depending on warning options it only may hide them. Therefore +such casts should be avoided whenever possible but some such casts may be +unavoidable. + diff --git a/Build/source/extra/djgpp/ChangeLog b/Build/source/extra/djgpp/ChangeLog new file mode 100644 index 00000000000..53a911e5f32 --- /dev/null +++ b/Build/source/extra/djgpp/ChangeLog @@ -0,0 +1,69 @@ +1999-01-27 Olaf Weber + + * config.bat: Update from Eli Zaretskii. + +1999-01-10 Olaf Weber + + * pathconf.c, xstat.h, putenv.c, stat.c, popen.c: New files from + Eli, updates of other files. + +1998-10-22 Eli Zaretskii + + * config.bat: Support build of additional packages: dtl, dvidvi, + gsftopk, lacheck, makeindexk, musixflx, odvipsk, ps2pkm, seetexk, + tex4htk. + * cfgdtl.pat, cfgdvidv.pat, cfglachk.pat, cfgseetx.pat, + cfgmkind.pat, cfggsfpk.pat, cfgpspkm.pat, cfgtexht.pat, + cfgmusix.pat: New files. + +1998-03-18 Eli Zaretskii + + * README.djgpp: Minor updates and cleanup. + + * cfgmain.pat, cfgkpath.pat, cfgweb2c.pat, cfgdvilj.pat, + cfgdvips.pat: New versions. + +1998-03-04 Eli Zaretskii + + * cfgdvips.pat: New version, fixes problems with "make check" in + the dvipsk directory. + +1998-02-16 Eli Zaretskii + + * config.bat: Configure with EPSFWIN pseudo-window support. + +1998-02-09 Eli Zaretskii + + * config.bat: Fail if patches to some of the configure scripts + fail to apply. Use response file when invoking the shell, to + avoid exceeding the 126-character limit of DOS command lines. Use + ${DJDIR}/share as the location of the texmf tree. + + * cfgmain.pat, cfgkpath.pat, cfgweb2c.pat, cfgdvilj.pat, + cfgdvips.pat: New versions. + +Wed Jan 28 20:16:14 1998 Olaf Weber + + * A new set of files from Eli, including cfgdvips.pat and + cfgdvilj.pat which are new. + +Tue Jan 13 12:23:50 1998 Olaf Weber + + * cfgmain.pat, cfgweb2c.pat, config.bat: New version from Eli. + +Tue Dec 30 17:54:29 1997 Olaf Weber + + * cfgweb2c.pat: New version from Eli. + +Thu Dec 18 20:43:39 1997 Olaf Weber + + * cfgkpath.pat, cfgweb2c.pat, cfgmain.pat, config.bat: New + versions from Eli. + +Tue Dec 16 18:56:03 1997 Olaf Weber + + * config.bat: New file from Eli Zaretskii. + + * cfgweb2c.pat, cfgkpath.pat, cfgmain.pat: New file from Eli + Zaretskii, edited to remove obsolete patches. + diff --git a/Build/source/extra/djgpp/README.djgpp b/Build/source/extra/djgpp/README.djgpp new file mode 100644 index 00000000000..8579633b28e --- /dev/null +++ b/Build/source/extra/djgpp/README.djgpp @@ -0,0 +1,207 @@ +This directory includes files required to build TeX and related +programs with the DJGPP port of GNU tools for MS-DOS and MS-Windows. +DJGPP produces 32-bit protected-mode programs which run on all +Microsoft platforms. On plain MS-DOS they need a DPMI server (a free +server is available as v2misc/csdpmiNb.zip that can be downloaded from +DJGPP archives on SimTel.NET mirrors). MS-Windows have DPMI services +built into them. When run on Windows 9X, the DJGPP-compiled programs +support long file names. + + + Building the package from sources + --------------------------------- + + - The following tools are REQUIRED to build and install Web2c + programs (the parentheses list filenames of binary distributions + you can download from DJGPP archives if you don't have a + particular package): + + Bash (bsh1147b.zip) + Fileutils (fil316b.zip) + Textutils (txt122b.zip) + Grep (grep22b.zip) + Patch (pat25b.zip) + Sh-utils (shl112b.zip) + Sed (sed302b.zip) + Diffutils (dif2721b.zip) + Findutils (find41b.zip) + Ed (ed-02b.zip) + Gawk (gwk303b.zip) + Bison (bsn125b.zip) + Flex (flx254b.zip) + + All of these are available from the v2gnu directory on the usual + DJGPP sites, e.g. ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/. + + The above tools are IN ADDITION to the basic DJGPP development + environment that is required to compile and link C programs. + Consult the file v2/readme.1st and the DJGPP FAQ list in + v2/faqNNNb.zip, for details about the basic package. + + - Unzip the downloaded Web2c and Texmflib distributions from the + root of your DJGPP installation tree. If you are doing this on + Windows 9x, use an unzip program that supports long filenames. + + This will create the top directory and unpack the sources + into the relevant subdirectories. It will also create the + `share/texmf' directory and unpack the contents of Texmflib + library there. + + - At this point, I suggest you to read the file + `kpathsea/INSTALL.txt'. It includes a detailed yet very + readable description of the various options available to you at + build and installation time. + + - Make sure your TMPDIR environment variable points to a drive + with enough free space. Many DJGPP installations set this + variable to a RAM disk for performance reasons. Since RAM disks + tend to be small (a few Megabytes), a complex shell script may + fill it with temporary files, typically from pipes and `command` + expansions, after which point programs run by that shell will + start to fail. The TeX build process runs some very long and + complicated shell scripts which require around 4MB of free space + on TMPDIR filesystem (it failed for me when I had only 2.5MB). + If you cannot enlarge your RAM disk, point TMPDIR to a real disk + (the effect on the overall build time is insignificant, since + GCC will have hard time compiling some of the larger programs + with -O2 switch). TMPDIR is usually set on the DJGPP.ENV file, + but you can override it by setting TMPDIR from the DOS prompt. + + - The default 256KB stack size limit of DJGPP programs is too + small for compiling some of the TeX programs. Make sure your + cc1.exe program has at least 768KB of stack. Here's how: + + stubedit cc1.exe minstack=768k + + (`stubedit' is part of the basic DJGPP development + environment). + + - To configure the package for DJGPP, run the `config.bat' batch + file in the djgpp subdirectory. This sets some environment + variables and then invokes Bash to run the configuration script + with necessary arguments. (You can edit the batch file if you + want to run the script with different arguments.) The command + is this: + + djgpp\config + + - It is possible to configure and build Web2c from a directory + other than where the sources reside (useful when you cannot + write to that directory, like if it's on a CD-ROM). In that + case, you need to invoke `config.bat' with a single argument + which is the full pathname of the source directory. For + example: + + f:\gnu\web2c-7.2\djgpp\config f:/gnu/web2c-7.2 + + Note that you MUST use Unix-style forward slashes in the + argument you pass to `config.bat', or else it will fail. + + - The configure script will run for a while and recursively + configure the programs in subdirectories. + + - After running `config', just say "make". + + Building the full Web2c package takes a while (about 2 hours + on a 486/DX2-66, 35 minutes on a Pentium-166), so you might go + for a cup of coffee while it compiles. + + - To build the emulation programs in the `contrib' directory, + chdir into that directory and say "make". Compiling `regex.c' + triggers several warning messages about variables that ``might + be used uninitialized''; you can safely disregard these + warnings. + + - If you are building Texk more than 18 months since it was + released, you might see a warning message while LaTeX is built + which complains about old sources. In general, you can press + [Enter] in response to that message and let the build continue, + since the message is just a precaution. However, if you do care + to have the latest stuff, you will need to download the + latex/base directory from one of the CTAN mirrors and replace + with it the files in latex/base which come with tmflib74.zip. + + - If you have changed some of the programs in the package, it is a + good idea to run tests on them. The Makefile in the web2c + directory has a large number of xxx-check targets, where xxx is + the name of a program; you can run these one by one by going + into web2c and saying like so: + + make gftopk-check + + You can also run all of them together by saying "make check" in + the top-level directory. + + Some of the tests appear to fail (`diff' prints some actual + differences between the test results and the reference files + that come with the package. In most cases, this is normal + behavior (the programs were changed since the canonical results + were computed); the file `web2c/tests/check.log' includes the + output you should see for each test. If your results coincide + with `check.log' (except for the version of the package that the + programs print), you are doing fine. + + - Before installing, if you already have a previous version of + Texk installed, review your `texmf.cnf' configuration file (in + %TEXMF%/web2c directory). If you have changed it from the + original, you might want the installation process to leave it + alone and not overwrite it with the fresh copy from the + distribution. In that case, edit `texmf.cnf' and remove the + word "original" from its first line. This tells the + installation process to refrain from replacing that file. + + - To install the programs, say "make install" in the top + directory. This will create missing directories and copy the + programs and auxiliary files to their places. The programs + inside `contrib' need to be installed manually (typically, into + the same directory where the executable programs go). + + + Troubleshooting + --------------- + + I do NOT intend here to replace the various chapters in the docs + which explain how to solve problems and report bugs. Please read + the docs whenever you see any seemingly abnormal behavior. What's + below is intended to mention a few DOS- and DJGPP-specific + problems that you might see, and how to get around them. + + First, a word of warning. Web2c is a tremendously large and + complex package, with dozens of different programs, some of them + with many different options. While porting it, I've made a good- + faith effort to test everything I could, including using it to + generate printed versions of various TeX and Texinfo documents. + However, some bugs might still be there. Please treat this port + accordingly and report possible bugs to the DJGPP news group + (comp.os.msdos.djgpp) first. + + One possible problem you could see is due to insufficient number + of available file handles. `Dvilj' is particularly prone to this + problem. If you ever see an error message to the effect that a + program has no more handles, edit your CONFIG.SYS and enlarge the + FILES= setting there. (Don't forget to reboot so the new setting + is in effect.) + + Another related problem manifests itself by an error message like + so: + + c:\djgpp\bin/mf.exe: cannot open + + This usually happens when a DVI driver finds a missing font and + invokes the MetaFont program to generate them on the fly. Due to + peculiarities of file handles inheritance from parent to child + processes, the child process can sometimes fail to start because + the stub cannot open the .exe file. I think I've fixed these + problems, so you shouldn't see such messages, but if you do, + please report the details. + + If the font-creation fails, a file named `missfont.log' is created + in the current directory, with the commands you should issue to + make these fonts. Many times, invoking that file as a batch file + will create the missing fonts, so you could then invoke the DVI + driver again and it will work. + + + Happy TeXing! + + Eli Zaretskii diff --git a/Build/source/extra/djgpp/cfgdtl.pat b/Build/source/extra/djgpp/cfgdtl.pat new file mode 100644 index 00000000000..23f01392623 --- /dev/null +++ b/Build/source/extra/djgpp/cfgdtl.pat @@ -0,0 +1,19 @@ +*** dtl/configure.orig Tue Mar 17 12:51:52 1998 +--- dtl/configure Thu Mar 19 18:28:22 1998 +*************** +*** 2273,2279 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 2273,2279 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/cfgdvidv.pat b/Build/source/extra/djgpp/cfgdvidv.pat new file mode 100644 index 00000000000..e03cbf55b43 --- /dev/null +++ b/Build/source/extra/djgpp/cfgdvidv.pat @@ -0,0 +1,19 @@ +*** dvidvi/configure.orig Tue Mar 17 12:51:54 1998 +--- dvidvi/configure Thu Mar 19 17:55:50 1998 +*************** +*** 2273,2279 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 2273,2279 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/cfgdvilj.pat b/Build/source/extra/djgpp/cfgdvilj.pat new file mode 100644 index 00000000000..9300c9a5a8b --- /dev/null +++ b/Build/source/extra/djgpp/cfgdvilj.pat @@ -0,0 +1,29 @@ +*** dviljk/configure.orig Thu Mar 12 13:20:20 1998 +--- dviljk/configure Tue Mar 17 11:38:20 1998 +*************** +*** 2140,2145 **** +--- 2140,2146 ---- + s%@LTLIBOBJS@%$LTLIBOBJS%g + s%@MAINT@%$MAINT%g + s%@texmfmain@%$texmfmain%g ++ s, ln -s , cp -pr , + + CEOF + EOF +*************** +*** 2273,2279 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 2274,2280 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/cfgdvips.pat b/Build/source/extra/djgpp/cfgdvips.pat new file mode 100644 index 00000000000..5e252a48fe3 --- /dev/null +++ b/Build/source/extra/djgpp/cfgdvips.pat @@ -0,0 +1,31 @@ +*** dvipsk/configure.orig Thu Mar 12 13:20:44 1998 +--- dvipsk/configure Tue Mar 17 11:38:22 1998 +*************** +*** 2077,2082 **** +--- 2077,2085 ---- + s%@LTLIBOBJS@%$LTLIBOBJS%g + s%@MAINT@%$MAINT%g + s%@texmfmain@%$texmfmain%g ++ s, ln -s , cp -rp , ++ /^ -PATH=/s,^ -,&PATH_SEPARATOR=: PATH_EXPAND=y , ++ /^ .*testdata:/s,testdata:,testdata\\\;,g + + CEOF + EOF +*************** +*** 2210,2216 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 2213,2219 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/cfgdvpdf.pat b/Build/source/extra/djgpp/cfgdvpdf.pat new file mode 100644 index 00000000000..58c716166b7 --- /dev/null +++ b/Build/source/extra/djgpp/cfgdvpdf.pat @@ -0,0 +1,19 @@ +*** dvipdfm/configure.orig Sun Jan 10 17:06:32 1999 +--- dvipdfm/configure Mon Jan 11 10:19:58 1999 +*************** +*** 3320,3326 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 3320,3326 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/cfggsfpk.pat b/Build/source/extra/djgpp/cfggsfpk.pat new file mode 100644 index 00000000000..2d24a48dce7 --- /dev/null +++ b/Build/source/extra/djgpp/cfggsfpk.pat @@ -0,0 +1,19 @@ +*** gsftopk/configure.orig Tue Mar 17 12:51:56 1998 +--- gsftopk/configure Tue Sep 15 15:47:08 1998 +*************** +*** 2266,2272 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 2266,2272 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/cfgkpath.pat b/Build/source/extra/djgpp/cfgkpath.pat new file mode 100644 index 00000000000..c86f1f95474 --- /dev/null +++ b/Build/source/extra/djgpp/cfgkpath.pat @@ -0,0 +1,30 @@ +*** kpathsea/configure.orig Mon Mar 9 08:23:38 1998 +--- kpathsea/configure Tue Mar 17 11:38:20 1998 +*************** +*** 2045,2050 **** +--- 2045,2052 ---- + s%@LTLIBOBJS@%$LTLIBOBJS%g + s%@MAINT@%$MAINT%g + s%@texmfmain@%$texmfmain%g ++ /^ sed -f texmf.sed/c\\ ++ sed -e '/^[^%]/s/:/;/g' \\\$(srcdir)/texmf.in | sed -f texmf.sed >\\\$@ + + CEOF + EOF +*************** +*** 2178,2184 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 2180,2186 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/cfglachk.pat b/Build/source/extra/djgpp/cfglachk.pat new file mode 100644 index 00000000000..8820034379c --- /dev/null +++ b/Build/source/extra/djgpp/cfglachk.pat @@ -0,0 +1,19 @@ +*** lacheck/configure.orig Tue Mar 17 12:51:58 1998 +--- lacheck/configure Mon Mar 23 18:07:46 1998 +*************** +*** 2564,2570 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 2564,2570 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/cfgmain.pat b/Build/source/extra/djgpp/cfgmain.pat new file mode 100644 index 00000000000..2c05e06246e --- /dev/null +++ b/Build/source/extra/djgpp/cfgmain.pat @@ -0,0 +1,29 @@ +*** configure.orig Wed Mar 11 00:38:40 1998 +--- configure Tue Mar 17 11:38:18 1998 +*************** +*** 973,978 **** +--- 973,979 ---- + + fi + if test "${ac_cv_path_install+set}" = set; then ++ ac_cv_path_install=`echo.exe "$ac_cv_path_install"` + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a +*************** +*** 1986,1992 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 1987,1993 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/cfgmkind.pat b/Build/source/extra/djgpp/cfgmkind.pat new file mode 100644 index 00000000000..12d931d012f --- /dev/null +++ b/Build/source/extra/djgpp/cfgmkind.pat @@ -0,0 +1,19 @@ +*** makeindexk/configure.orig Tue Mar 17 12:52:06 1998 +--- makeindexk/configure Tue Sep 15 10:43:52 1998 +*************** +*** 2285,2291 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 2285,2291 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/cfgmusix.pat b/Build/source/extra/djgpp/cfgmusix.pat new file mode 100644 index 00000000000..a038f612f39 --- /dev/null +++ b/Build/source/extra/djgpp/cfgmusix.pat @@ -0,0 +1,19 @@ +*** musixflx/configure.orig Tue Mar 17 12:52:08 1998 +--- musixflx/configure Wed Oct 21 09:42:44 1998 +*************** +*** 2273,2279 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 2273,2279 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/cfgpspkm.pat b/Build/source/extra/djgpp/cfgpspkm.pat new file mode 100644 index 00000000000..7614f4bc046 --- /dev/null +++ b/Build/source/extra/djgpp/cfgpspkm.pat @@ -0,0 +1,19 @@ +*** ps2pkm/configure.orig Tue Mar 17 12:52:14 1998 +--- ps2pkm/configure Tue Sep 15 15:59:48 1998 +*************** +*** 2476,2482 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 2476,2482 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/cfgseetx.pat b/Build/source/extra/djgpp/cfgseetx.pat new file mode 100644 index 00000000000..adb42fbb7ed --- /dev/null +++ b/Build/source/extra/djgpp/cfgseetx.pat @@ -0,0 +1,19 @@ +*** seetexk/configure.orig Tue Mar 17 12:52:16 1998 +--- seetexk/configure Thu Mar 26 14:37:20 1998 +*************** +*** 2305,2311 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 2305,2311 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/cfgtexht.pat b/Build/source/extra/djgpp/cfgtexht.pat new file mode 100644 index 00000000000..570de8147a9 --- /dev/null +++ b/Build/source/extra/djgpp/cfgtexht.pat @@ -0,0 +1,19 @@ +*** tex4htk/configure.orig Tue Mar 17 12:52:20 1998 +--- tex4htk/configure Wed Sep 16 19:06:00 1998 +*************** +*** 2210,2216 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 2210,2216 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/cfgweb2c.pat b/Build/source/extra/djgpp/cfgweb2c.pat new file mode 100644 index 00000000000..e74d341f91e --- /dev/null +++ b/Build/source/extra/djgpp/cfgweb2c.pat @@ -0,0 +1,38 @@ +*** web2c/configure.orig Mon Mar 9 08:23:40 1998 +--- web2c/configure Tue Mar 17 11:38:24 1998 +*************** +*** 4271,4276 **** +--- 4271,4286 ---- + s%@zlib@%$zlib%g + s%@pdftexlibsdep@%$pdftexlibsdep%g + s%@zlibinc@%$zlibinc%g ++ s,\.gft,.gf,g ++ /^ MAKEMPX_BINDIR/s,^ ,&PATH_SEPARATOR=: PATH_EXPAND=y ,g ++ /^ -PATH=/s,^ -,&PATH_SEPARATOR=: PATH_EXPAND=y ,g ++ /\\\$(LN).*initex/s,\\\$(LN),ln -s,g ++ /\\\$(LN).*iniomega/s,\\\$(LN),ln -s,g ++ /\\\$(LN).*inimf/s,\\\$(LN),ln -s,g ++ /\\\$(LN).*inimpost/s,\\\$(LN),ln -s,g ++ /\\\$\\\$base/s,\\\$(LN),ln -s,g ++ s,pooltype-check,poolt-check, ++ /TFMFONTS=/s,tests:,tests\\\;, + + CEOF + EOF +*************** +*** 4406,4412 **** + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") > $ac_file + fi; done + rm -f conftest.s* + +--- 4416,4422 ---- + s%@srcdir@%$srcdir%g + s%@top_srcdir@%$top_srcdir%g + s%@INSTALL@%$INSTALL%g +! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file + fi; done + rm -f conftest.s* + diff --git a/Build/source/extra/djgpp/config.bat b/Build/source/extra/djgpp/config.bat new file mode 100755 index 00000000000..d016366692c --- /dev/null +++ b/Build/source/extra/djgpp/config.bat @@ -0,0 +1,272 @@ +@echo off +Rem +Rem The SmallEnv gorp is for those who have too small environment +Rem size which will cause the variables we set to be truncated +Rem but who cannot be bothered to read the Out Of Environment Space +Rem error messages spitted by the stock DOS shell +set XSRC=. +if not "%XSRC%" == "." goto SmallEnv +if "%1" == "" goto inplace +set XSRC=%1 +if not "%XSRC%" == "%1" goto SmallEnv +:inplace +if exist .\kpathsea\INSTALL ren .\kpathsea\INSTALL INSTALL.txt +if exist .\web2c\INSTALL ren .\web2c\INSTALL INSTALL.txt +if exist .\dvipsk\INSTALL ren .\dvipsk\INSTALL INSTALL.txt +if exist .\dviljk\INSTALL ren .\dviljk\INSTALL INSTALL.txt +if exist .\gsftopk\INSTALL ren .\gsftopk\INSTALL INSTALL.txt +if exist .\makeindexk\INSTALL ren .\makeindexk\INSTALL INSTALL.txt +if exist .\makeindexk\INSTALL ren .\makeindexk\INSTALL INSTALL.txt +if exist .\dvipdfm\INSTALL ren .\dvipdfm\INSTALL INSTALL.txt +test -d %XSRC% +if not errorlevel 1 goto chkdir +echo %XSRC% is not a directory +goto end +:chkdir +test -f %XSRC%/configure +if not errorlevel 1 goto argsok +echo I cannot find the configure script in directory %XSRC% +goto end +:argsok +rem set SYSROOT=c: +set PATH_SEPARATOR=: +if not "%PATH_SEPARATOR%" == ":" goto SmallEnv +set PATH_EXPAND=y +if not "%PATH_EXPAND%" == "y" goto SmallEnv +if not "%HOSTNAME%" == "" goto hostdone +if "%windir%" == "" goto msdos +set OS=MS-Windows +if not "%OS%" == "MS-Windows" goto SmallEnv +goto haveos +:msdos +set OS=MS-DOS +if not "%OS%" == "MS-DOS" goto SmallEnv +:haveos +if not "%USERNAME%" == "" goto haveuname +if not "%USER%" == "" goto haveuser +echo No USERNAME and no USER found in the environment, using default values +set HOSTNAME=Unknown PC +if not "%HOSTNAME%" == "Unknown PC" goto SmallEnv +:haveuser +set HOSTNAME=%USER%'s PC +if not "%HOSTNAME%" == "%USER%'s PC" goto SmallEnv +goto userdone +:haveuname +set HOSTNAME=%USERNAME%'s PC +if not "%HOSTNAME%" == "%USERNAME%'s PC" goto SmallEnv +:userdone +set HOSTNAME=%HOSTNAME%, %OS% +:hostdone +set OS= +echo Updating configure scripts for DJGPP... +test -f %XSRC%/configure.orig +if not errorlevel 1 goto orig1 +cp -p %XSRC%/configure configure.orig +goto patchmain +:orig1 +if not exist configure.orig cp -p %XSRC%/configure.orig configure.orig +:patchmain +patch -o configure configure.orig %XSRC%/djgpp/cfgmain.pat +if errorlevel 1 goto PatchError +test -d %XSRC%/kpathsea +if errorlevel 1 goto DviLJk +if not exist kpathsea\nul mkdir kpathsea +if exist kpathsea\configure.orig goto orig2 +test -f %XSRC%/kpathsea/configure.orig +if not errorlevel 1 cp -p %XSRC%/kpathsea/configure.orig kpathsea/configure.orig +if not exist kpathsea\configure.orig cp -p %XSRC%/kpathsea/configure kpathsea/configure.orig +:orig2 +patch -o kpathsea/configure kpathsea/configure.orig %XSRC%/djgpp/cfgkpath.pat +if errorlevel 1 goto PatchError +:DviLJk +test -d %XSRC%/dviljk +if errorlevel 1 goto DviPSk +if not exist dviljk\nul mkdir dviljk +if exist dviljk\configure.orig goto orig3 +test -f %XSRC%/dviljk/configure.orig +if not errorlevel 1 cp -p %XSRC%/dviljk/configure.orig dviljk/configure.orig +if not exist dviljk\configure.orig cp -p %XSRC%/dviljk/configure dviljk/configure.orig +:orig3 +patch -o dviljk/configure dviljk/configure.orig %XSRC%/djgpp/cfgdvilj.pat +if errorlevel 1 goto PatchError +:DviPSk +test -d %XSRC%/dvipsk +if errorlevel 1 goto DTL +if not exist dvipsk\nul mkdir dvipsk +if exist dvipsk\configure.orig goto orig4 +test -f %XSRC%/dvipsk/configure.orig +if not errorlevel 1 cp -p %XSRC%/dvipsk/configure.orig dvipsk/configure.orig +if not exist dvipsk\configure.orig cp -p %XSRC%/dvipsk/configure dvipsk/configure.orig +:orig4 +patch -o dvipsk/configure dvipsk/configure.orig %XSRC%/djgpp/cfgdvips.pat +if errorlevel 1 goto PatchError +:ODviPSk +test -d %XSRC%/odvipsk +if errorlevel 1 goto DTL +if not exist odvipsk\nul mkdir odvipsk +if exist odvipsk\configure.orig goto orig40 +test -f %XSRC%/odvipsk/configure.orig +if not errorlevel 1 cp -p %XSRC%/odvipsk/configure.orig odvipsk/configure.orig +if not exist odvipsk\configure.orig cp -p %XSRC%/odvipsk/configure odvipsk/configure.orig +:orig40 +patch -o odvipsk/configure odvipsk/configure.orig %XSRC%/djgpp/cfgdvips.pat +if errorlevel 1 goto PatchError +:DTL +test -d %XSRC%/dtl +if errorlevel 1 goto DviDvi +if not exist dtl\nul mkdir dtl +if exist dtl\configure.orig goto orig5 +test -f %XSRC%/dtl/configure.orig +if not errorlevel 1 cp -p %XSRC%/dtl/configure.orig dtl/configure.orig +if not exist dtl\configure.orig cp -p %XSRC%/dtl/configure dtl/configure.orig +:orig5 +patch -o dtl/configure dtl/configure.orig %XSRC%/djgpp/cfgdtl.pat +if errorlevel 1 goto PatchError +:DViDvi +test -d %XSRC%/dvidvi +if errorlevel 1 goto LaCheck +if not exist dvidvi\nul mkdir dvidvi +if exist dvidvi\configure.orig goto orig6 +test -f %XSRC%/dvidvi/configure.orig +if not errorlevel 1 cp -p %XSRC%/dvidvi/configure.orig dvidvi/configure.orig +if not exist dvidvi\configure.orig cp -p %XSRC%/dvidvi/configure dvidvi/configure.orig +:orig6 +patch -o dvidvi/configure dvidvi/configure.orig %XSRC%/djgpp/cfgdvidv.pat +if errorlevel 1 goto PatchError +:LaCheck +test -d %XSRC%/lacheck +if errorlevel 1 goto SeeTeXk +if not exist lacheck\nul mkdir lacheck +if exist lacheck\configure.orig goto orig7 +test -f %XSRC%/lacheck/configure.orig +if not errorlevel 1 cp -p %XSRC%/lacheck/configure.orig lacheck/configure.orig +if not exist lacheck\configure.orig cp -p %XSRC%/lacheck/configure lacheck/configure.orig +:orig7 +patch -o lacheck/configure lacheck/configure.orig %XSRC%/djgpp/cfglachk.pat +if errorlevel 1 goto PatchError +:SeeTeXk +test -d %XSRC%/seetexk +if errorlevel 1 goto MakeIndexk +if not exist seetexk\nul mkdir seetexk +if exist seetexk\configure.orig goto orig8 +test -f %XSRC%/seetexk/configure.orig +if not errorlevel 1 cp -p %XSRC%/seetexk/configure.orig seetexk/configure.orig +if not exist seetexk\configure.orig cp -p %XSRC%/seetexk/configure seetexk/configure.orig +:orig8 +patch -o seetexk/configure seetexk/configure.orig %XSRC%/djgpp/cfgseetx.pat +if errorlevel 1 goto PatchError +:MakeIndexk +test -d %XSRC%/makeindexk +if errorlevel 1 goto GsfToPk +if not exist makeindexk\nul mkdir makeindexk +if exist makeindexk\configure.orig goto orig9 +test -f %XSRC%/makeindexk/configure.orig +if not errorlevel 1 cp -p %XSRC%/makeindexk/configure.orig makeindexk/configure.orig +if not exist makeindexk\configure.orig cp -p %XSRC%/makeindexk/configure makeindexk/configure.orig +:orig9 +patch -o makeindexk/configure makeindexk/configure.orig %XSRC%/djgpp/cfgmkind.pat +if errorlevel 1 goto PatchError +:GsfToPk +test -d %XSRC%/gsftopk +if errorlevel 1 goto Ps2Pkm +if not exist gsftopk\nul mkdir gsftopk +if exist gsftopk\configure.orig goto orig10 +test -f %XSRC%/gsftopk/configure.orig +if not errorlevel 1 cp -p %XSRC%/gsftopk/configure.orig gsftopk/configure.orig +if not exist gsftopk\configure.orig cp -p %XSRC%/gsftopk/configure gsftopk/configure.orig +:orig10 +patch -o gsftopk/configure gsftopk/configure.orig %XSRC%/djgpp/cfggsfpk.pat +if errorlevel 1 goto PatchError +:Ps2Pkm +test -d %XSRC%/ps2pkm +if errorlevel 1 goto Tex4HTk +if not exist ps2pkm\nul mkdir ps2pkm +if exist ps2pkm\configure.orig goto orig11 +test -f %XSRC%/ps2pkm/configure.orig +if not errorlevel 1 cp -p %XSRC%/ps2pkm/configure.orig ps2pkm/configure.orig +if not exist ps2pkm\configure.orig cp -p %XSRC%/ps2pkm/configure ps2pkm/configure.orig +:orig11 +patch -o ps2pkm/configure ps2pkm/configure.orig %XSRC%/djgpp/cfgpspkm.pat +if errorlevel 1 goto PatchError +:Tex4HTk +test -d %XSRC%/tex4htk +if errorlevel 1 goto MusixFlx +if not exist tex4htk\nul mkdir tex4htk +if exist tex4htk\configure.orig goto orig12 +test -f %XSRC%/tex4htk/configure.orig +if not errorlevel 1 cp -p %XSRC%/tex4htk/configure.orig tex4htk/configure.orig +if not exist tex4htk\configure.orig cp -p %XSRC%/tex4htk/configure tex4htk/configure.orig +:orig12 +patch -o tex4htk/configure tex4htk/configure.orig %XSRC%/djgpp/cfgtexht.pat +if errorlevel 1 goto PatchError +:MusixFlx +test -d %XSRC%/musixflx +if errorlevel 1 goto DviPDFm +if not exist musixflx\nul mkdir musixflx +if exist musixflx\configure.orig goto orig13 +test -f %XSRC%/musixflx/configure.orig +if not errorlevel 1 cp -p %XSRC%/musixflx/configure.orig musixflx/configure.orig +if not exist musixflx\configure.orig cp -p %XSRC%/musixflx/configure musixflx/configure.orig +:orig13 +patch -o musixflx/configure musixflx/configure.orig %XSRC%/djgpp/cfgmusix.pat +if errorlevel 1 goto PatchError +:DviPDFm +test -d %XSRC%/dvipdfm +if errorlevel 1 goto Web2C +if not exist dvipdfm\nul mkdir dvipdfm +if exist dvipdfm\configure.orig goto orig14 +test -f %XSRC%/dvipdfm/configure.orig +if not errorlevel 1 cp -p %XSRC%/dvipdfm/configure.orig dvipdfm/configure.orig +if not exist dvipdfm\configure.orig cp -p %XSRC%/dvipdfm/configure dvipdfm/configure.orig +:orig14 +patch -o dvipdfm/configure dvipdfm/configure.orig %XSRC%/djgpp/cfgdvpdf.pat +if errorlevel 1 goto PatchError +:Web2C +test -d %XSRC%/web2c +if errorlevel 1 goto skipXDVI +if not exist web2c\nul mkdir web2c +if exist web2c\configure.orig goto orig100 +test -f %XSRC%/web2c/configure.orig +if not errorlevel 1 cp -p %XSRC%/web2c/configure.orig web2c/configure.orig +if not exist web2c\configure.orig cp -p %XSRC%/web2c/configure web2c/configure.orig +:orig100 +patch -o web2c/configure web2c/configure.orig %XSRC%/djgpp/cfgweb2c.pat +if errorlevel 1 goto PatchError +Rem +Rem XDvi is not supported on MS-DOS +GoTo skipXDVI +if not exist xdvik\nul mkdir xdvik +if not exist xdvik\configure.orig cp -p %XSRC%/xdvik/configure xdvik/configure.orig +patch -o xdvik/configure xdvik/configure.orig %XSRC%/djgpp/cfgxdvik.pat +if errorlevel 1 goto PatchError +:skipXDVI +set CONFIG_SHELL=bash.exe +set INSTALL=${DJDIR}/bin/ginstall -c +set YACC=bison -y +set LEX=flex +set RANLIB=ranlib +if not "%RANLIB%" == "ranlib" goto SmallEnv +Rem Use a response file to avoid exceeding the 126-character limit +echo --prefix=${DJDIR} --datadir=${DJDIR}/share --srcdir=%XSRC% > cfg.rf +echo --without-x --with-editor='emacs +%%d %%s' --with-epsfwin >> cfg.rf +echo Configuring... +sh ./configure i386-pc-msdos.djgppv2 @cfg.rf +echo Done. +goto CleanUp +:SmallEnv +echo Your environment size is too small. Please enlarge it and run me again. +set HOSTNAME= +set OS= +:CleanUp +set XSRC= +set CONFIG_SHELL= +set INSTALL= +set YACC= +set LEX= +set RANLIB= +set HOSTNAME= +if exist cfg.rf del cfg.rf +goto end +:PatchError +echo Failed to patch one or more configure scripts. Configure NOT done. +:end diff --git a/Build/source/extra/djgpp/pathconf.c b/Build/source/extra/djgpp/pathconf.c new file mode 100644 index 00000000000..71483684e04 --- /dev/null +++ b/Build/source/extra/djgpp/pathconf.c @@ -0,0 +1,47 @@ +/* Copyright (C) 1997 DJ Delorie, see COPYING.DJ for details */ +/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ +#include +#include +#include +#include +#include +#include + +#define TOLOWER(c) (isascii(c) && isupper(c) ? tolower (c) : (c)) + +long +pathconf(const char *path, int name) +{ + switch (name) + { + case _PC_LINK_MAX: return LINK_MAX; + case _PC_MAX_CANON: return MAX_CANON; + case _PC_MAX_INPUT: return MAX_INPUT; + case _PC_NAME_MAX: case _PC_PATH_MAX: + { + int name_max, path_max; + int e = errno; + char *lfnenv = getenv ("LFN"); + + if (!lfnenv || TOLOWER (*lfnenv) != 'n') + { + errno = 0; + _get_volume_info (path, &name_max, &path_max, 0); + if (!errno) + { + errno = e; + return (name == _PC_NAME_MAX) ? name_max : path_max; + } + } + return (name == _PC_NAME_MAX) ? NAME_MAX : PATH_MAX; + } + case _PC_PIPE_BUF: return PIPE_BUF; + case _PC_CHOWN_RESTRICTED: return _POSIX_CHOWN_RESTRICTED; + case _PC_NO_TRUNC: return _POSIX_NO_TRUNC; + case _PC_VDISABLE: return _POSIX_VDISABLE; + + default: + errno = EINVAL; + return -1; + } +} diff --git a/Build/source/extra/djgpp/popen.c b/Build/source/extra/djgpp/popen.c new file mode 100644 index 00000000000..67250d6ed7c --- /dev/null +++ b/Build/source/extra/djgpp/popen.c @@ -0,0 +1,218 @@ +/* Copyright (C) 1997 DJ Delorie, see COPYING.DJ for details */ +/* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */ +/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ +/* + This is popen() and pclose() for MSDOS. They were developed using + Microsoft C, but should port easily to DOS C any compiler. + + Original author: pacetti@fl-ngnet.army.mil + + These routines are hacks, that is they SIMULATE thier UNIX + counterparts. Since MSDOS and won't allow concurrent process spawning, + you can't really pipe. I came up with this nearly stupid way around + piping because I wanted to have some portability between UNIX and MSDOS. + I'm probably not the first person to have this idea or implement it, but + I think I'm the first to give it away for free (no points?!). + + The functions simulate popen() and pclose() by redirecting stdin or + stdout, then spawning a child processes via system(). + + If you popen() for read, the stdout is redirected to a temporary + file, and the child is spawned. The stdout is reopened via dup2(), the + temporary file is opened for read and a file pointer to it is returned. + + If you popen() for write, a temporary file is opened for write, and + a file pointer to it is returned. When you pclose(), the stdin is + redirected to the temporary file and the child is spawned. + + In both cases, pclose() closes and unlinks the temporary file. + + A static linked list of C structures is built to store necessary + info for all popen()ed files so you can popen() more than one file at + a time. + + The popen() function will return NULL on an error, or a valid FILE + *pointer on a successful open. The pclose() function will return + negative one (-1) on an error or zero (0) on a successful close. + + The function prototypes are: + + FILE *popen(command, mode) + char *command, char *mode; + + int pclose(pp) + FILE *pp; + + Where command is a character string equivilant to a MSDOS command + line, mode is "r" for read or "w" for write, and pp is a pointer to a + file opened through popen(). + + A main() function has been included for testing purposes, to compile + it define the preprocessor token TEST at compile time. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* hold file pointer, descriptor, command, mode, temporary file name, + and the status of the command */ +struct pipe_list { + FILE *fp; + int fd; + int exit_status; + char *command, mode[10], temp_name[L_tmpnam]; + struct pipe_list *next; +}; + +/* static, global list pointer */ +static struct pipe_list *pl = NULL; + +FILE * +popen (const char *cm, const char *md) /* program name, pipe mode */ +{ + struct pipe_list *l1, *l2; + + /* make new node */ + if ((l1 = (struct pipe_list *) malloc (sizeof (struct pipe_list))) == NULL) + return NULL; + + /* zero out elements to we'll get here */ + l1->fd = 0; + l1->fp = NULL; + l1->next = NULL; + + /* if empty list - just grab new node */ + if (!pl) + pl = l1; + else + { + /* otherwise, find last node in list */ + ++(l1->fd); + l2 = pl; + while (l2->next) + { + ++(l1->fd); + l2 = l2->next; + }; + /* add new node to list */ + l2->next = l1; + } + + /* stick in elements we know already */ + l1->exit_status = -1; + strcpy (l1->mode, md); + if (tmpnam (l1->temp_name) == NULL) + return NULL; + + /* if can save the program name, build temp file */ + if ((l1->command = malloc(strlen(cm)+1))) + { + strcpy(l1->command, cm); + /* if caller wants to read */ + if (l1->mode[0] == 'r') + { + /* dup stdout */ + if ((l1->fd = dup (fileno (stdout))) == EOF) + l1->fp = NULL; + else if (!(l1->fp = freopen (l1->temp_name, "wb", stdout))) + l1->fp = NULL; + else + /* exec cmd */ + if ((l1->exit_status = system (cm)) == EOF) + l1->fp = NULL; + /* reopen real stdout */ + if (dup2 (l1->fd, fileno (stdout)) == EOF) + l1->fp = NULL; + /* if cmd couldn't be run, make sure we return NULL */ + else if (l1->exit_status != EOF) + /* open file for reader */ + l1->fp = fopen (l1->temp_name, l1->mode); + close(l1->fd); + } + else + /* if caller wants to write */ + if (l1->mode[0] == 'w') + /* open temp file */ + l1->fp = fopen (l1->temp_name, l1->mode); + else + /* unknown mode */ + l1->fp = NULL; + } + return l1->fp; /* return == NULL ? ERROR : OK */ +} + +int +pclose (FILE *pp) +{ + struct pipe_list *l1, *l2; /* list pointers */ + int retval=0; /* function return value */ + + /* if pointer is first node */ + if (pl->fp == pp) + { + /* save node and take it out the list */ + l1 = pl; + pl = l1->next; + } + else + /* if more than one node in list */ + if (pl->next) + { + /* find right node */ + for (l2 = pl, l1 = pl->next; l1; l2 = l1, l1 = l2->next) + if (l1->fp == pp) + break; + + /* take node out of list */ + l2->next = l1->next; + } + else + return -1; + + /* if FILE not in list - return error */ + if (l1->fp == pp) + { + /* close the (hopefully) popen()ed file */ + fclose (l1->fp); + + /* if pipe was opened to write */ + if (l1->mode[0] == 'w') + { + /* dup stdin */ + if ((l1->fd = dup (fileno (stdin))) == EOF) + retval = -1; + else + /* open temp stdin */ + if (!(l1->fp = freopen (l1->temp_name, "rb", stdin))) + retval = -1; + else + /* exec cmd */ + if ((retval = system (l1->command)) != EOF) + { + /* reopen stdin */ + if (dup2 (l1->fd, fileno (stdin)) == EOF) + retval = -1; + } + close(l1->fd); + } + else + /* if pipe was opened to read, return the exit status we saved */ + if (l1->mode[0] == 'r') + retval = l1->exit_status; + else + /* invalid mode */ + retval = -1; + } + remove (l1->temp_name); /* remove temporary file */ + free (l1->command); /* dealloc memory */ + free (l1); /* dealloc memory */ + l1 = NULL; /* make pointer bogus */ + + return retval; /* retval==0 ? OK : ERROR */ +} diff --git a/Build/source/extra/djgpp/putenv.c b/Build/source/extra/djgpp/putenv.c new file mode 100644 index 00000000000..efc0241ff07 --- /dev/null +++ b/Build/source/extra/djgpp/putenv.c @@ -0,0 +1,143 @@ +/* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */ +/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ +#include +#include +#include +#include +#include + +/* + + This routine assumes that the environ array and all strings it + points to were malloc'd. Nobody else should modify the environment + except crt1.c + +*/ + +extern char **environ; +static char **prev_environ = NULL; /* to know when it's safe to call `free' */ +static int ecount = -1; +static int emax = -1; +static int putenv_bss_count = -1; + + +/* This gets incremented every time some variable in the + environment is added, deleted, or changes its value. + It is meant to be used by functions that depend on values + of environment variables, but don't want to call `getenv' + unnecessarily (example: `__use_lfn'). + + Users should compare this variable with their static + variable whose value is initialized to zero; thus this + variable begins with 1 so first time users look they will + call `getenv'. */ +unsigned __environ_changed = 1; + +int +putenv(const char *val) +{ + int vlen = strlen(val); + char *epos = strchr(val, '='); + /* Feature: VAL without a `=' means delete the entry. GNU `putenv' + works that way, and `env' from GNU Sh-utils counts on this behavior. */ + int nlen = epos ? epos - val + 1 : vlen; + int eindex; + + /* Force recomputation of the static counters. + + The second condition of the next if clause covers the case that + somebody pointed environ to another array, which invalidates + `ecount' and `emax'. This can be used to change the environment + to something entirely different, or to effectively discard it + altogether. GNU `env' from Sh-utils does just that. */ + if (putenv_bss_count != __bss_count + || environ != prev_environ) + { + for (ecount=0; environ[ecount]; ecount++); + emax = ecount; + /* Bump the count to a value no function has yet seen, + even if they were dumped with us. */ + __environ_changed++; + if (putenv_bss_count != __bss_count) + { + putenv_bss_count = __bss_count; + prev_environ = environ; /* it's malloced by crt1.c */ + } + } + + for (eindex=0; environ[eindex]; eindex++) + if (strncmp(environ[eindex], val, nlen) == 0 + && (epos || environ[eindex][nlen] == '=')) + { + char *oval = environ[eindex]; + int olen = strlen(oval); + + if (val[nlen] == 0 && !epos) /* delete the entry */ + { + free(oval); + environ[eindex] = environ[ecount-1]; + environ[ecount-1] = 0; + ecount--; + __environ_changed++; + return 0; + } + + /* change existing entry */ + if (strcmp(environ[eindex]+nlen, val+nlen) == 0) + return 0; /* they're the same */ + + /* If new is the same length as old, reuse the same + storage. If new is shorter, call realloc to shrink the + allocated block: this causes less memory fragmentation. */ + if (vlen != olen) + { + if (vlen > olen) + environ[eindex] = (char *)malloc(vlen+1); + else /* vlen < olen */ + environ[eindex] = (char *)realloc(oval, vlen+1); + if (environ[eindex] == 0) + { + environ[eindex] = oval; + return -1; + } + if (vlen > olen) + free(oval); + } + strcpy(environ[eindex], val); + __environ_changed++; + return 0; + } + + /* delete nonexisting entry? */ + if (val[nlen] == 0 && !epos) + return 0; + + /* create new entry */ + if (ecount >= emax) + { + char **enew; + emax += 10; + enew = (char **)malloc((emax+1) * sizeof(char *)); + if (enew == 0) + return -1; + memcpy(enew, environ, ecount * sizeof(char *)); + /* If somebody set environ to another array, we can't + safely free it. Better leak memory than crash. */ + if (environ == prev_environ) + free(environ); + environ = enew; + prev_environ = environ; + } + + environ[ecount] = (char *)malloc(vlen+1); + if (environ[ecount] == 0) + return -1; + strcpy(environ[ecount], val); + + ecount++; + environ[ecount] = 0; + + __environ_changed++; + + return 0; +} diff --git a/Build/source/extra/djgpp/stat.c b/Build/source/extra/djgpp/stat.c new file mode 100644 index 00000000000..69fe270b848 --- /dev/null +++ b/Build/source/extra/djgpp/stat.c @@ -0,0 +1,935 @@ +/* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */ +/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ +/* This is file STAT.C */ +/* + * Almost a 100% U**X-compatible stat() substitute. + * + * Usage: + * + * That's easy: put this into libc.a, then just call stat() as usual. + * + * Rationale: + * + * Many Unix-born programs make heavy use of stat() library + * function to make decisions on files' equality, size, access + * attributes etc. In the MS-DOS environment, many implementations + * of stat() are crippled, because DOS makes it very hard to get to + * certain pieces of information about files and directories. Thus + * porting a program to DOS is usually an exercise in #ifdef'ing. + * This implementation facilitates porting Unix programs to MS-DOS + * by providing stat() which is much more Unix-compatible than those + * of most DOS-based C compilers (e.g., Borland's). + * Specifically, the following issues are taken care of: + * + * 1. This stat() doesn't fail for root directories, returning + * valid information. + * 2. Directory size is not reported zero; the number of used + * directory entries multiplied by entry size is returned instead. + * 3. Mode bits are set for all 3 groups (user, group, other). + * 4. Directories are NOT reported read-only, unless one of R, H or S + * attributes is set. + * 5. Directories have their execute bit set, as they do under Unix. + * 6. Device names (such as /dev/con, lpt1, aux etc.) are treated as + * if they were on a special drive called `@:' (st_dev = -1). + * The "character special" mode bit is set for these devices. + * 7. The inode number (st_ino) is taken from the starting cluster + * number of the file. If the cluster number is unavailable, it + * is invented using the file's name in a manner that minimizes + * the possibility of inventing an inode which already belongs + * to another file. See below for details. + * 8. Executable files are found based on files' extensions and + * magic numbers present at their beginning, and their execute + * bits are set. + * + * Lossage: + * + * Beautiful as the above sounds, this implementation does fail + * under certain circumstances. The following is a list of known + * problems: + * + * 1. The time fields for a root directory cannot be obtained, so + * they are set to the beginning of the Epoch. + * 2. For files which reside on networked drives, the inode number + * is invented, because network redirectors usually do not + * bring that info with them. This is not a total lossage, but + * it could get us a different inode for each program run. + * 3. Empty files do not have a starting cluster number, because + * DOS doesn't allocate one until you actually write something + * to a file. For these the inode is also invented. + * 4. If the st_ino field is a 16 bit number, the invented inode + * numbers are from 65535 and down, assuming that most disks have + * unused portions near their end. Valid cluster numbers are 16-bit + * unsigned integers, so a possibility of a clash exists, although + * the last 80 or more cluster numbers are unused on all drives + * I've seen. If the st_ino is 32 bit, then invented inodes are + * all greater than 64k, which totally eliminates a possibility + * of a clash with an actual cluster number. + * 5. The method of computing directory size is an approximation: + * a directory might consume much more space, if it has many + * deleted entries. Still, this is a close approximation, and + * it does follow the logic of reporting size for a regular file: + * only the actually used space is returned. + * 6. As this implementation relies heavily on undocumented DOS + * features, it will fail to get actual file info in environments + * other than native DOS, such as DR-DOS, OS/2 etc. For these, + * the function will return whatever info is available with + * conventional DOS calls, which is no less than any other + * implementation could do. This stat() might also fail for + * future DOS versions, if the layout of internal DOS data + * area is changed; however, this seems unlikely. + * + * Copyright (c) 1994-96 Eli Zaretskii + * + * This software may be used freely so long as this copyright notice is + * left intact. There is no warranty on this software. + * + */ + +/* + * Tested with DJGPP port of GNU C compiler, versions 1.11maint5 and 1.12, + * under MS-DOS 3.3, 4.01, 5.0, 6.20 (with and without DoubleSpace) and + * with networked drives under XFS 1.86, Novell Netware 3.22, and + * TSoft NFS 0.24Beta. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "xstat.h" + +int __getdisk(void); +int __findfirst(const char *, struct ffblk *, int); +int __findnext(struct ffblk *); + +#define ALL_FILES (FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_DIREC|FA_ARCH) + +#define _STAT_INODE 1 /* should we bother getting inode numbers? */ +#define _STAT_EXEC_EXT 2 /* get execute bits from file extension? */ +#define _STAT_EXEC_MAGIC 4 /* get execute bits from magic signature? */ +#define _STAT_DIRSIZE 8 /* compute directory size? */ +#define _STAT_ROOT_TIME 0x10 /* try to get root dir time stamp? */ +#define _STAT_WRITEBIT 0x20 /* fstat() needs write bit? */ + +/* Should we bother about executables at all? */ +#define _STAT_EXECBIT (_STAT_EXEC_EXT | _STAT_EXEC_MAGIC) + +/* The structure of the full directory entry. This is the 32-byte + record present for each file/subdirectory in a DOS directory. + Although the ``packed'' attribute seems to be unnecessary, I use + it to be sure it will still work for future versions of GCC. */ + +struct full_dirent { + char fname[8] __attribute__ ((packed)); + char fext[3] __attribute__ ((packed)); + unsigned char fattr __attribute__ ((packed)); + unsigned char freserved[10] __attribute__ ((packed)); + unsigned short ftime __attribute__ ((packed)); + unsigned short fdate __attribute__ ((packed)); + unsigned short fcluster __attribute__ ((packed)); + unsigned int fsize __attribute__ ((packed)); +}; + + +/* Static variables to speed up SDA DOS Swappable Data Area access on + subsequent calls. */ + +/* The count of number of SDA's we have. It is more than 1 for DOS + 4.x only. If it has a value of 0, the function init_dirent_table() + will be called to compute the addresses where we are to look for + directory entry of our file. A value of -1 means this method is + unsupported for this version of DOS. */ +static int dirent_count; + +/* The table of places to look for our directory entry. + Each entry in the table is a linear offset from the beginning of + conventional memory which points to a particular location within + one of the SDA's, where the entry of a file being stat()'ed could + appear. The offsets are computed once (when the routine is first + called) and then reused for other calls. The actual storage for + the table is malloc()'ed when this function is first called. */ +static unsigned int * dirent_table; + +/* When we have only one SDA, this is where its only place to look for + directory entry is stored. */ +static unsigned int dirent_place; + +/* This holds the fail bits from the last call to init_dirent_table(), + so we can return them every time get_inode_from_sda() is called. */ +static unsigned short init_dirent_table_bits; + +/* Holds the last seen value of __bss_count, to be safe for + restarted programs (emacs). */ +static int stat_count = -1; + +/* + * Parts of the following code is derived from file DOSSWAP.C, + * which came with ``Undocumented DOS'', 1st edition. + */ + +/* Compute table of pointers to look for directory entry of a file. */ +static int +init_dirent_table (void) +{ + short get_sda_func; + unsigned short dirent_offset; + unsigned short true_dos_version; + unsigned short dos_major, dos_minor; + __dpmi_regs regs; + + if (dirent_count == -1) /* we already tried and found we can't */ + return 0; + + /* Compute INT 21h function number and offset of directory entry + from start of SDA. These depend on the DOS version. + We need exact knowledge about DOS internals, so we need the + TRUE DOS version (not the simulated one by SETVER), if that's + available. */ + true_dos_version = _get_dos_version(1); + dos_major = true_dos_version >> 8; + dos_minor = true_dos_version & 0xff; + + if ((dos_major == 3) && (dos_minor >= 10)) + { + get_sda_func = 0x5d06; + dirent_offset = 0x1a7; + } + else if (dos_major == 4) + { + /* According to ``Undocumented DOS, 2nd edition'', I could have + used 5d06 here, as for DOS 5 and above, but I like to be + defensive. In fact, the above book itself uses 5d0b, contrary + to its own recommendation. */ + get_sda_func = 0x5d0b; + dirent_offset = 0x1b3; + } + else if (dos_major >= 5) + { + get_sda_func = 0x5d06; + dirent_offset = 0x1b3; + } + else + { + _djstat_fail_bits |= _STFAIL_OSVER; + dirent_count = -1; + return 0; + } + + _djstat_fail_bits &= ~_STFAIL_OSVER; /* version is OK */ + + /* Get the pointer to SDA by calling undocumented function 5dh of INT 21. */ + regs.x.ax = get_sda_func; + __dpmi_int(0x21, ®s); + if (regs.x.flags & 1) + { + _djstat_fail_bits |= _STFAIL_SDA; + dirent_count = -1; /* if the call failed, never try this later */ + return 0; + } + + _djstat_fail_bits &= ~_STFAIL_SDA; /* Get SDA succeeded */ + + /* DOS 4.x might have several SDA's, which means we might have more + than one place to look into. (It is typical of DOS 4 to complicate + things.) + Compute all the possible addresses where we will have to look. */ + if (dos_major == 4) + { + /* The pointer returned by INT 21h, AX=5D0b points to a header + which holds a number of SDA's and then an array of that number + of records each one of which includes address of an SDA (DWORD) + and its length and type (encoded in a WORD). + While walking this list of SDA's, we add to each pointer the + offset of directory entry and stash the resulting address in + our table for later use. */ + + int sda_list_walker = MK_FOFF(regs.x.ds, regs.x.si); + int i; + int *tbl; + + dirent_count = _farpeekw(_dos_ds, sda_list_walker); /* number of SDA's */ + + /* Allocate storage for table. */ + tbl = dirent_table = (int *)malloc(dirent_count*sizeof(int)); + if (!dirent_table) + { + /* If malloc() failed, maybe later it will succeed, so don't + store -1 in dirent_count. */ + dirent_count = 0; + _djstat_fail_bits |= _STFAIL_DCOUNT; + return 0; + } + + memset(dirent_table, 0, dirent_count*sizeof(int)); + _djstat_fail_bits &= ~_STFAIL_DCOUNT; /* dirent_count seems OK */ + + /* Walk the array of pointers, computing addresses of directory + entries and stashing them in our table. */ + _farsetsel(_dos_ds); + for (i = dirent_count, sda_list_walker += 2; i--; sda_list_walker += 6) + { + int sda_start = _farnspeekl(sda_list_walker); + unsigned short sda_len = _farnspeekw(sda_list_walker + 4) & 0x7fff; + + /* Let's be defensive here: if this SDA is too short to have + place for directory entry, we won't use it. */ + if (sda_len > dirent_offset) + *tbl++ = sda_start + dirent_offset; + else + dirent_count--; + } + } + + /* DOS 3.1 and 5.0 or later. We have only one SDA pointed to by + whatever INT 21h, AH=5d returns. */ + else + { + dirent_count = 1; + dirent_place = MK_FOFF(regs.x.ds, regs.x.si) + dirent_offset; + dirent_table = &dirent_place; + } + + return 1; +} + +/* Get inode number by searching DOS Swappable Data Area. + The entire directory entry for a file found by FindFirst/FindNext + appears at a certain (version-dependent) offset in the SDA after + one of those function is called. + Should be called immediately after calling DOS FindFirst function, + before the info is overwritten by somebody who calls it again. */ +static unsigned int +get_inode_from_sda(const char *basename) +{ + int count = dirent_count; + unsigned int * dirent_p = dirent_table; + unsigned short dos_mem_base = _dos_ds; + unsigned short our_mem_base = _my_ds(); + char * dot = strchr(basename, '.'); + size_t total_len = strlen(basename); + int name_len = dot ? dot - basename : total_len; + int ext_len = dot ? total_len - name_len - 1 : 0; + int cluster_offset = offsetof(struct full_dirent, fcluster); + + /* Restore failure bits set by last call to init_dirent_table(), so + they will be reported as if it were called now. */ + _djstat_fail_bits |= init_dirent_table_bits; + + /* Force reinitialization in restarted programs (emacs). */ + if (stat_count != __bss_count) + { + stat_count = __bss_count; + dirent_count = 0; + } + + /* Initialize the table of SDA entries where we are to look for + our file. */ + if (!dirent_count && !init_dirent_table()) + { + /* Don't save the truename failure bit. */ + init_dirent_table_bits = (_djstat_fail_bits & ~_STFAIL_TRUENAME); + return 0; + } + init_dirent_table_bits = (_djstat_fail_bits & ~_STFAIL_TRUENAME); + if (dirent_count == -1) + return 0; + + count = dirent_count; + dirent_p = dirent_table; + + _farsetsel(dos_mem_base); + + /* This is DOS 4.x lossage: this loop might execute many times. + For other DOS versions it is executed exactly once. */ + while (count--) + { + unsigned int src_address = *dirent_p & 0x000fffff; + char cmp_buf[sizeof(struct full_dirent)]; + + /* Copy the directory entry from the SDA to local storage. + The filename is stored there in infamous DOS format: name and + extension blank-padded to 8/3 characters, no dot between them. */ + movedata(dos_mem_base, src_address, our_mem_base, (unsigned int)cmp_buf, + sizeof(struct full_dirent)); + + /* If this is the filename we are looking for, return + its starting cluster. */ + if (!strncmp(cmp_buf, basename, name_len) && + (ext_len == 0 || !strncmp(cmp_buf + 8, dot + 1, ext_len))) + return (unsigned int)_farnspeekw(*dirent_p + cluster_offset); + + /* This is not our file. Search more, if more addresses left. */ + dirent_p++; + } + + /* If not found, give up. */ + _djstat_fail_bits |= _STFAIL_BADSDA; + return 0; +} + +int _ioctl_get_first_cluster(const char *); + +/* Get the number of the first cluster of PATHNAME using + the IOCTL call Int 21h/AX=440Dh/CX=0871h, if that call + is supported by the OS. Return the cluster number, or + a negative number if this service isn't supported. */ + +int +_ioctl_get_first_cluster(const char *pathname) +{ + __dpmi_regs r; + + /* See if the IOCTL GetFirstCluster call is supported. */ + r.x.ax = 0x4411; /* query generic IOCTL capability by drive */ + r.h.bl = pathname[0] & 0x1f; /* drive number (1=A:) */ + r.x.cx = 0x871; + __dpmi_int(0x21, &r); + if ((r.x.flags & 1) == 0 && r.x.ax == 0) + { + r.x.ax = 0x440d; /* Generic IOCTL */ + r.x.cx = 0x0871; /* category code 08h, minor code 71h */ + r.x.bx = 1; /* pathname uses current OEM character set */ + r.x.ds = __tb >> 4; + r.x.dx = __tb & 0x0f; + _put_path(pathname); + __dpmi_int(0x21, &r); + if ((r.x.flags & 1) == 0) + return ( ((int)r.x.dx << 16) + r.x.ax ); + } + return -1; +} + +static char blanks_8[] = " "; + +static int +stat_assist(const char *path, struct stat *statbuf) +{ + struct ffblk ff_blk; + char canon_path[MAX_TRUE_NAME]; + char pathname[MAX_TRUE_NAME]; + short drv_no; + unsigned dos_ftime; + + _djstat_fail_bits = 0; + + memset(statbuf, 0, sizeof(struct stat)); + memset(&dos_ftime, 0, sizeof(dos_ftime)); + + /* Fields which are constant under DOS. */ + statbuf->st_uid = getuid(); + statbuf->st_gid = getgid(); + statbuf->st_nlink = 1; +#ifndef NO_ST_BLKSIZE + statbuf->st_blksize = _go32_info_block.size_of_transfer_buffer; +#endif + + /* Make the path explicit. This makes the rest of our job much + easier by getting rid of some constructs which, if present, + confuse `_truename' and/or `findfirst'. In particular, it + deletes trailing slashes, makes "d:" explicit, and allows us + to make an illusion of having a ".." entry in root directories. */ + _fixpath (path, pathname); + + /* Get the drive number. It is always explicit, since we + called `_fixpath' on the original pathname. */ + drv_no = toupper(pathname[0]) - 'A'; + + /* Produce canonical pathname, with all the defaults resolved and + all redundant parts removed. This calls undocumented DOS + function 60h. */ + if (_truename(path, canon_path) || _truename(pathname, canon_path)) + { + /* Detect character device names which must be treated specially. + We could simply call FindFirst and test the 6th bit, but some + versions of DOS have trouble with this (see Ralph Brown's + Interrupt List, ``214E'', under `Bugs'). Instead we use + truename() which calls INT 21/AX=6000H. For character devices + it returns X:/DEVNAME, where ``X'' is the current drive letter + (note the FORWARD slash!). E.g., for CON or \dev\con it will + return C:/CON. + We will pretend that devices all reside on a special drive + called `@', which corresponds to st_dev = -1. This is because + these devices have no files, and we must invent inode numbers + for them; this scheme allows to lower a risk of clash between + invented inode and one which belongs to a real file. This is + also compatible with what our fstat() does. + */ + char_dev: + if (canon_path[2] == '/') + { + char dev_name[9]; /* devices are at most 8 characters long */ + + strncpy(dev_name, canon_path + 3, 8); /* the name without `X:/' */ + dev_name[8] = '\0'; + strcpy(canon_path, "@:\\dev\\"); + strcat(canon_path, dev_name); + strncat(canon_path, blanks_8, 8 - strlen(dev_name)); /* blank-pad */ + canon_path[15] = '\0'; /* ensure zero-termination */ + + /* Invent inode */ + statbuf->st_ino = _invent_inode(canon_path, 0, 0); + + /* Device code. */ + statbuf->st_dev = -1; +#ifdef HAVE_ST_RDEV + statbuf->st_rdev = -1; +#endif + + /* Set mode bits, including character special bit. + Should we treat printer devices as write-only? */ + statbuf->st_mode |= (S_IFCHR | READ_ACCESS | WRITE_ACCESS); + + /* We will arrange things so that devices have current time in + the access-time and modified-time fields of struct stat, and + zero (the beginning of times) in creation-time field. This + is consistent with what DOS FindFirst function returns for + character device names (if it succeeds--see above). */ + statbuf->st_atime = statbuf->st_mtime = time(0); + statbuf->st_ctime = _file_time_stamp(dos_ftime); + + return 0; + } + else if (canon_path[0] >= 'A' && canon_path[0] <= 'z' && + canon_path[1] == ':' && canon_path[2] == '\\') + { + /* _truename() returned a name with a drive letter. (This is + always so for local drives, but some network redirectors + also do this.) We will take this to be the TRUE drive + letter, because _truename() knows about SUBST and JOIN. + If the canonicalized path returns in the UNC form (which + means the drive is remote), it cannot be SUBSTed or JOINed, + because SUBST.EXE and JOIN.EXE won't let you do it; so, for + these cases, there is no problem in believing the drive + number we've got from the original path (or is there?). */ + drv_no = toupper(canon_path[0]) - 'A'; + } + } + else + { + /* _truename() failed. (This really shouldn't happen, but who knows?) + At least uppercase all letters, convert forward slashes to backward + ones, and pray... */ + register const char *src = pathname; + register char *dst = canon_path; + + while ( (*dst = (*src > 'a' && *src < 'z' + ? *src++ - ('a' - 'A') + : *src++)) != '\0') + { + if (*dst == '/') + *dst = '\\'; + dst++; + } + + _djstat_fail_bits |= _STFAIL_TRUENAME; + } + + /* Call DOS FindFirst function, which will bring us most of the info. */ + if (!__findfirst(pathname, &ff_blk, ALL_FILES)) + { + /* Time fields. */ + dos_ftime = + ( (unsigned short)ff_blk.ff_fdate << 16 ) + + (unsigned short)ff_blk.ff_ftime; + + /* If the IOCTL GetFirstCluster call is available, try it first. */ + if ( (_djstat_flags & _STAT_INODE) == 0 + && (statbuf->st_ino = _ioctl_get_first_cluster(pathname)) <= 0) + { + + /* For networked drives, don't believe the starting cluster + that the network redirector feeds us; always invent inode. + This is because network redirectors leave bogus values there, + and we don't have enough info to decide if the starting + cluster value is real or just a left-over from previous call. + For local files, try first using DOS SDA to get the inode from + the file's starting cluster number; if that fails, invent inode. + Note that the if clause below tests for non-zero value returned + by is_remote_drive(), which includes possible failure (-1). + This is because findfirst() already succeeded for our pathname, + and therefore the drive is a legal one; the only possibility that + is_remote_drive() fails is that some network redirector takes + over IOCTL functions in an incompatible way, which means the + drive is remote. QED. */ + if (statbuf->st_ino == 0 /* don't try SDA if IOCTL call succeeded */ + || _is_remote_drive(drv_no) + || (statbuf->st_ino = get_inode_from_sda(ff_blk.ff_name)) == 0) + { + _djstat_fail_bits |= _STFAIL_HASH; + statbuf->st_ino = + _invent_inode(canon_path, dos_ftime, ff_blk.ff_fsize); + } + else if (toupper (canon_path[0]) != toupper (pathname[0]) + && canon_path[1] == ':' + && canon_path[2] == '\\' + && canon_path[3] == '\0') + /* The starting cluster in SDA for the root of JOINed drive + actually belongs to the directory where that drive is + ``mounted''. This can potentially be the cluster of + another file on the JOINed drive. We cannot allow this. */ + statbuf->st_ino = 1; + } + + /* File size. */ + statbuf->st_size = ff_blk.ff_fsize; + + /* Mode bits. */ + statbuf->st_mode |= READ_ACCESS; + if ( !(ff_blk.ff_attrib & 0x07) ) /* no R, H or S bits set */ + statbuf->st_mode |= WRITE_ACCESS; + + /* Sometimes `_truename' doesn't return X:/FOO for character + devices. However, FindFirst returns attribute 40h for them. */ + if (ff_blk.ff_attrib == 0x40) + { + size_t cplen = strlen (canon_path); + char *pslash = canon_path + cplen - 1; + + while (pslash > canon_path + 2 && *pslash != '\\') + pslash--; + + /* Force it into X:/FOO form. */ + if (canon_path[1] == ':') + { + if (pslash > canon_path + 2) + memmove (canon_path + 2, pslash, + cplen - (pslash - canon_path) + 1); + canon_path[2] = '/'; + goto char_dev; + } + } + + /* Directories should have Execute bits set. */ + if (ff_blk.ff_attrib & 0x10) + statbuf->st_mode |= (S_IFDIR | EXEC_ACCESS); + + else + { + /* This is a regular file. */ + char *extension = strrchr(ff_blk.ff_name, '.'); + + /* Set regular file bit. */ + statbuf->st_mode |= S_IFREG; + + if ((_djstat_flags & _STAT_EXECBIT) != _STAT_EXECBIT) + { + /* Set execute bits based on file's extension and + first 2 bytes. */ + if (extension) + extension++; /* get past the dot */ + if (_is_executable(pathname, -1, extension)) + statbuf->st_mode |= EXEC_ACCESS; + } + } + } + else if ((_djstat_fail_bits & _STFAIL_TRUENAME)) + { + /* If both `findfirst' and `_truename' failed, this must + be a non-existent file or an illegal/inaccessible drive. */ + if (errno == ENMFILE) + errno = ENODEV; + return -1; + } + else if (pathname[3] == '\0') + { + /* Detect root directories. These are special because, unlike + subdirectories, FindFirst fails for them. We look at PATHNAME + because a network redirector could tweak what `_truename' + returns to be utterly unrecognizable as root directory. PATHNAME + always begins with "d:/", so it is root if PATHNAME[3] = 0. */ + + /* Mode bits. */ + statbuf->st_mode |= (S_IFDIR|READ_ACCESS|WRITE_ACCESS|EXEC_ACCESS); + + /* Root directory will have an inode = 1. Valid cluster numbers + for real files under DOS start with 2. */ + statbuf->st_ino = 1; + + /* Simulate zero size. This is what FindFirst returns for every + sub-directory. Later we might compute a better approximation + (see below). */ + ff_blk.ff_fsize = 0L; + + /* The time fields are left to be zero, unless the user wants us + to try harder. In the latter case, we check if the root has + a volume label entry, and use its time if it has. */ + + if ( (_djstat_flags & _STAT_ROOT_TIME) == 0 ) + { + char buf[7]; + + strcpy(buf, pathname); + strcat(buf, "*.*"); + if (!__findfirst(buf, &ff_blk, FA_LABEL)) + dos_ftime = ( (unsigned)ff_blk.ff_fdate << 16 ) + ff_blk.ff_ftime; + else + _djstat_fail_bits |= _STFAIL_LABEL; + } + } + else + { + int e = errno; /* errno value from original FindFirst on PATHNAME */ + int i = 0; + int j = strlen (pathname) - 1; + + /* Check for volume labels. We did not mix FA_LABEL with + other attributes in the call to `__findfirst' above, + because some environments will return bogus info in + that case. For instance, Win95 and WinNT seem to + ignore `pathname' and return the volume label even if it + doesn't fit the name in `pathname'. This fools us to + think that a non-existent file exists and is a volume + label. Hence we test the returned name to be PATHNAME. */ + if (!__findfirst(pathname, &ff_blk, FA_LABEL)) + { + i = strlen (ff_blk.ff_name) - 1; + + if (j >= i) + { + for ( ; i >= 0 && j >= 0; i--, j--) + if (toupper (ff_blk.ff_name[i]) != toupper (pathname[j])) + break; + } + } + + if (i < 0 && pathname[j] == '/') + { + /* Indeed a label. */ + statbuf->st_mode = READ_ACCESS; +#ifdef S_IFLABEL + statbuf->st_mode |= S_IFLABEL; +#endif + statbuf->st_ino = 1; + statbuf->st_size = 0; + dos_ftime = ( (unsigned)ff_blk.ff_fdate << 16 ) + ff_blk.ff_ftime; + } + else + { + /* FindFirst on volume labels might set errno to ENMFILE or even + to something more strange like EINVAl; correct that. */ + errno = e; /* restore errno from the original FindFirst */ + if (errno == ENMFILE) + errno = ENOENT; + return -1; + } + } + + /* Device code. */ + statbuf->st_dev = drv_no; +#ifdef HAVE_ST_RDEV + statbuf->st_rdev = drv_no; +#endif + + /* Time fields. */ + statbuf->st_atime = statbuf->st_mtime = statbuf->st_ctime = + _file_time_stamp(dos_ftime); + + if ( ! strcmp(ff_blk.lfn_magic,"LFN32") ) + { + unsigned xtime; + xtime = *(unsigned *)&ff_blk.lfn_ctime; + if(xtime) /* May be zero if file written w/o lfn active */ + statbuf->st_ctime = _file_time_stamp(xtime); + xtime = *(unsigned *)&ff_blk.lfn_atime; + if(xtime > dos_ftime) /* Accessed time is date only, no time */ + statbuf->st_atime = _file_time_stamp(xtime); + } + + if ( (statbuf->st_mode & S_IFMT) == S_IFDIR + && (_djstat_flags & _STAT_DIRSIZE) == 0 ) + { + /* Under DOS, directory entries for subdirectories have + zero size. Therefore, FindFirst brings us zero size + when called on a directory. (Some network redirectors + might do a better job, thus below we also test for zero size + actually being returned.) If we have zero-size directory, + we compute here the actual directory size by reading its + entries, then multiply their number by 32 (the size of a + directory entry under DOS). This might lose in the case + that many files were deleted from a once huge directory, + because AFAIK, directories don't return unused clusters to + the disk pool. Still, it is a good approximation of the + actual directory size. + + We also take this opportunity to return the number of links + for directories as Unix programs expect it to be: the number + of subdirectories, plus 2 (the directory itself and the ``.'' + entry). + + The (max) size of the root directory could also be taken from + the disk BIOS Parameter Block (BPB) which can be obtained + by calling IOCTL (INT 21/AH=44H), subfunction 0DH, minor + function 60H. But we will treat all directories the same, + even at performance cost, because it's more robust for + networked drives. */ + + size_t pathlen = strlen (pathname); + char lastc = pathname[pathlen - 1]; + char *search_spec = (char *)alloca (pathlen + 10); /* need only +5 */ + int nfiles = 0, nsubdirs = 0, done; + size_t extra = 0; + int add_extra = 0; + + strcpy(search_spec, pathname); + if (lastc == '/') + strcat(search_spec, "*.*"); + else + strcat(search_spec, "/*.*"); + + if (statbuf->st_size == 0 && _USE_LFN) + { + /* VFAT filesystems use additional directory entries to + store the long filenames. */ + char fstype[40]; + + if ((_get_volume_info(pathname,0,0,fstype) & _FILESYS_LFN_SUPPORTED) + && strncmp(fstype, "FAT", 4) == 0) + add_extra = 1; + } + + /* Count files and subdirectories. */ + for (done = __findfirst(search_spec, &ff_blk, ALL_FILES); + !done; + done = __findnext(&ff_blk)) + { + register char *fname = ff_blk.ff_name; + + /* Don't count "." and ".." entries. This will show empty + directories as size 0. */ + if (! (fname[0] == '.' + && (fname[1] == '\0' + || (fname[1] == '.' + && fname[2] == '\0')))) + { + char fn[13]; + + nfiles++; + if (ff_blk.ff_attrib & 0x10) + nsubdirs++; + /* For each 13 characters of the long filename, a + 32-byte directory entry is used. */ + if (add_extra && strcmp(_lfn_gen_short_fname(fname, fn), fname)) + extra += (strlen(fname) + 12) / 13; + } + } + + statbuf->st_nlink = nsubdirs + 2; + if (statbuf->st_size == 0) + statbuf->st_size = (nfiles + extra) * sizeof(struct full_dirent); + } + + return 0; +} + +/* Main entry point. This is library stat() function. + */ + +int +stat(const char *path, struct stat *statbuf) +{ + int e = errno; + int pathlen; + + if (!path || !statbuf) + { + errno = EFAULT; + return -1; + } + + if ((pathlen = strlen (path)) >= MAX_TRUE_NAME) + { + errno = ENAMETOOLONG; + return -1; + } + + /* Fail if PATH includes wildcard characters supported by FindFirst. */ + if (memchr(path, '*', pathlen) || memchr(path, '?', pathlen)) + { + errno = ENOENT; /* since no such filename is possible */ + return -1; + } + + if (stat_assist(path, statbuf) == -1) + { + return -1; /* errno set by stat_assist() */ + } + else + { + errno = e; + return 0; + } +} + +#ifdef TEST + +unsigned short _djstat_flags = 0; + +void +main(int argc, char *argv[]) +{ + struct stat stat_buf; + char *endp; + + if (argc < 2) + { + fprintf (stderr, "Usage: %s <_djstat_flags> \n", argv[0]); + exit(0); + } + + if (stat(*argv, &stat_buf) != 0) + perror ("stat failed on argv[0]"); + else + fprintf(stderr, "DOS %d.%d (%s)\n", _osmajor, _osminor, _os_flavor); + argc--; argv++; + + _djstat_flags = (unsigned short)strtoul(*argv, &endp, 0); + argc--; argv++; + + while (argc--) + { + if (!stat(*argv, &stat_buf)) + { + fprintf(stderr, "%s: %d %6u %o %d %d %ld %lu %s", *argv, + stat_buf.st_dev, + (unsigned)stat_buf.st_ino, + stat_buf.st_mode, + stat_buf.st_nlink, + stat_buf.st_uid, + (long)stat_buf.st_size, + (unsigned long)stat_buf.st_mtime, + ctime(&stat_buf.st_mtime)); + _djstat_describe_lossage(stderr); + } + else + { + fprintf(stderr, "%s: lossage", *argv); + perror(" "); + _djstat_describe_lossage(stderr); + } + + ++argv; + } + + exit (0); +} + +#endif + diff --git a/Build/source/extra/djgpp/xstat.h b/Build/source/extra/djgpp/xstat.h new file mode 100644 index 00000000000..5e10bb8ca1f --- /dev/null +++ b/Build/source/extra/djgpp/xstat.h @@ -0,0 +1,71 @@ +/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ +/* + * Header for internal stat()/fstat() assist functions. + * + */ + +#ifndef __XSTAT_H +#define __XSTAT_H + +#include +#include +#include +#include +#include + +/* Some errno.h headers do not define EFAULT. Here the value is + taken from POSIX IEEE 1003.1. */ +#include +#ifndef EFAULT +#define EFAULT 14 +#endif + +/* Under MS-DOS, file access permissions are shared by all, except for + Write permission. */ +#define READ_ACCESS (S_IRUSR | S_IRGRP | S_IROTH) +#define WRITE_ACCESS S_IWUSR +#define EXEC_ACCESS (S_IXUSR | S_IXGRP | S_IXOTH) + +/* Macro to convert a segment and an offset to a "far offset" suitable + for _farxxx() functions of DJGPP. */ +#ifndef MK_FOFF +#define MK_FOFF(s,o) ((int)((((unsigned long)(s)) << 4) + (unsigned short)(o))) +#endif + +#define MAX_TRUE_NAME FILENAME_MAX + +extern unsigned short _osmajor, _osminor; +extern const char * _os_flavor; + +/* Bits to flag f?stat() failed to use individual undocumented features. */ +#define _STFAIL_SDA 1 /* Get SDA call failed */ +#define _STFAIL_OSVER 2 /* Unsupported DOS version */ +#define _STFAIL_BADSDA 4 /* Bad pointer to SDA */ +#define _STFAIL_TRUENAME 8 /* _truename() failed */ +#define _STFAIL_HASH 0x10 /* inode defaults to hashing */ +#define _STFAIL_LABEL 0x20 /* Root dir, but no volume label */ +#define _STFAIL_DCOUNT 0x40 /* dirent_count ridiculously large */ +#define _STFAIL_WRITEBIT 0x80 /* fstat() failed to get write access bit */ +#define _STFAIL_DEVNO 0x100 /* fstat() failed to get device number */ +#define _STFAIL_BADSFT 0x200 /* SFT entry found, but can't be trusted */ +#define _STFAIL_SFTIDX 0x400 /* bad SFT index in JFT */ +#define _STFAIL_SFTNF 0x800 /* file entry not found in SFT array */ + +extern unsigned short _djstat_fail_bits; + +extern unsigned short _djstat_flags; + +extern time_t _file_time_stamp(unsigned int); +extern ino_t _invent_inode(const char *, unsigned, unsigned long); +extern unsigned short _get_magic(const char *, int); +extern unsigned short _get_dos_version(int); +extern char * _truename(const char *, char *); +extern int _is_remote_drive(int); +extern int _is_executable(const char *, int, const char *); +extern short _get_dev_info(int); +extern long __filelength(int); +extern int _is_remote_handle(int); +extern void _djstat_describe_lossage(FILE *); +extern int _getftime(int, unsigned int *); + +#endif /* __XSTAT_H */ diff --git a/Build/source/extra/epstopdf/Makefile b/Build/source/extra/epstopdf/Makefile new file mode 100644 index 00000000000..152ae6ec1f7 --- /dev/null +++ b/Build/source/extra/epstopdf/Makefile @@ -0,0 +1,64 @@ +# $Id$ +# This file is public domain. (Originally written by Karl Berry, 2009.) + +e2p = ./epstopdf.pl #--debug + +default: check + +# These are not comprehensive tests by any means. Mostly we're just +# making sure we don't crash. +check: check-help check-version \ + check-write-error check-gscmd \ + check-simple check-atend check-binary check-bin2 \ + check-binhdr-lf check-binhdr-cr check-binhdr-crlf \ + +check-help: + $(e2p) --help + +check-version: + $(e2p) --version + +check-write-error: + -$(e2p) test-simple.eps --outfile=/dev/full + +check-gscmd: + -$(e2p) --gscmd=true test-simple.eps + +check-simple: + $(MAKE) file=test-simple check1 + +check-atend: + $(MAKE) file=test-atend check1 + +check-binary: + $(MAKE) file=test-binary check1 + +check-bin2: + $(MAKE) file=test-bin2 check1 + +check-binhdr-lf: + $(MAKE) file=test-binhdr-lf check1 + +check-binhdr-cr: + $(MAKE) file=test-binhdr-cr check1 + +check-binhdr-crlf: + $(MAKE) file=test-binhdr-crlf check1 + +check1: + $(e2p) $(file).eps + pdfinfo $(file).pdf | grep "Page size" + +dist: epstopdf.tar.gz epstopdf.html +epstopdf.tar.gz: README epstopdf.pl epstopdf.1 epstopdf.pdf + tar chzf epstopdf.tar.gz $^ + +groff = groff +groff_opts = -man -t +pdfopts = $(groff_opts) +htmlopts = $(groff_opts) -Thtml +pspdf = ps2pdf -sPAPERSIZE=a4 +epstopdf.pdf: epstopdf.1 + $(groff) $(pdfopts) $< | $(pspdf) - $@ +epstopdf.html: epstopdf.1 + $(groff) $(htmlopts) $< >$@ diff --git a/Build/source/extra/epstopdf/README b/Build/source/extra/epstopdf/README new file mode 100644 index 00000000000..9d96f254c0a --- /dev/null +++ b/Build/source/extra/epstopdf/README @@ -0,0 +1,26 @@ +$Id$ +This file is public domain. (Originally written by Karl Berry, 2009.) + +This is the README for the epstopdf script distribution. + +Primary distribution point: http://mirror.ctan.org/support/epstopdf/ + (list of mirrors at: http://ctan.org/mirrors) + +Home page: http://tug.org/epstopdf/ + +Mailing list for bugs and discussion: http://lists.tug.org/tex-k +When reporting bugs, please include an input file and command line +options so the problem can be reproduced. + +------------------------------------------------------------------------- +The test-binary and test-bin2 files were supplied by Akira Kakuto and +Reinhard Kotucha. They contain binary data. They are public domain. + +The test-binhdr* files were supplied by Martin von Gagern, constructed +as follows. They contain binary junk before the EPS starts. We also +use these to test different line endings. These files are public domain. + +{ echo -e '%Some\000binary\001comment'; dot -Tps <<< 'digraph{a->b}'; } + > test-binhdr-lf.eps +tr $'\n' $'\r' test-binhdr-cr.ps +unix2dos test-binhdr-cr.ps diff --git a/Build/source/extra/epstopdf/epstopdf.1 b/Build/source/extra/epstopdf/epstopdf.1 new file mode 100644 index 00000000000..121ecd34427 --- /dev/null +++ b/Build/source/extra/epstopdf/epstopdf.1 @@ -0,0 +1,78 @@ +.TH EPSTOPDF 1 "27 September 2009" +.\" $Id$ +.\" man page originally by Jim Van Zandt +.SH NAME +epstopdf \- convert an EPS file to PDF +.SH SYNOPSIS +\fBepstopdf\fP [\fIoptions\fP] [\fIepsfile\fP] +.SH DESCRIPTION +\fBepstopdf\fP transforms the Encapsulated PostScript file \fIepsfile\fP +(or standard input) so that it is guaranteed to start at the 0,0 +coordinate, and it sets a page size exactly corresponding to the +BoundingBox. This means that when Ghostscript renders it, the result +needs no cropping, and the PDF MediaBox is correct. By default, the +result is piped to Ghostscript and a PDF version written. +.P +If the bounding box is not right, of course, there are problems. +.SH OPTIONS +.IP "\fB--outfile\fP=\fIfile\fP" +write result to \fIfile\fP; the default is to construct the output file +name by replacing any extension in the input file with \fI.pdf\fP. If +\fB--nogs\fP or \fB--filter\fP is specified, write to standard output. +.IP "\fB--\fP[\fBno\fP]\fBcompress\fP" +use compression (default: on). +.IP "\fB--\fP[\fBno\fP]\fBdebug\fP" +write debugging info (default: off). +.IP "\fB--\fP[\fBno\fP]\fBembed\fP" +embed fonts (default: on). +.IP "\fB--\fP[\fBno\fP]\fBexact\fP" +scan ExactBoundingBox (default: off). +.IP "\fB--\fP[\fBno\fP]\fBfilter\fP" +read standard input (default: off). +.IP "\fB--\fP[\fBno\fP]\fBgs\fP" +run ghostscript (default: on). +.IP "\fB--\fP[\fBno\fP]\fBhires\fP" +scan HiresBoundingBox (default: off). +.IP "\fB--gscmd\fP=\fIval\fP" +pipe output to \fIval\fP (default: [\fBgswin32c\fP on Windows, else \fBgs\fP]) +.IP "\fB--res\fP=\fIdpi\fP" +set image resolution (default: [use gs default]) +.IP "\fB--autorotate\fP=\fIval\fP" +set AutoRotatePages (default: None); recognized \fIval\fP choices: +None, All, PageByPage. For EPS files, PageByPage is equivalent to All. +.IP "\fB--help\fP +display help message and exit +.IP "\fB--version\fP +display version information and exit +.SH EXAMPLES +Examples for producing "test.pdf": +.nf +epstopdf test.eps +produce postscript | epstopdf --filter >test.pdf +produce postscript | epstopdf -f -d -o=test.pdf + +.fi +Example: look for HiresBoundingBox and produce corrected PostScript: +.nf +epstopdf -d --nogs --hires test.ps >testcorr.ps +.fi +.SH BUGS +The case of "%%BoundingBox: (atend)" +when input is not seekable (e.g., from a pipe) is not supported. +.PP +When reporting bugs, please include an input file and command line +options so the problem can be reproduced. Report bugs in +the program or this man page to tex-k@tug.org. +.SH SEE ALSO +\fBgs\fP(1), +\fBpdfcrop\fP(1). +.SH AUTHOR +The script was originally written by Sebastian Rahtz, for Elsevier +Science, with subsequent contributions from Gerben Wierda and many +others. Currently maintained by Karl Berry. +.PP +Man page originally written by Jim Van Zandt. +.PP +epstopdf home page: http://tug.org/epstopdf/ +.PP +You may freely use, modify and/or distribute this file. diff --git a/Build/source/extra/epstopdf/epstopdf.pl b/Build/source/extra/epstopdf/epstopdf.pl new file mode 100755 index 00000000000..b850ae3b239 --- /dev/null +++ b/Build/source/extra/epstopdf/epstopdf.pl @@ -0,0 +1,582 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q' + if 0; +use strict; + +# $Id$ +# (Copyright lines below.) +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. 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. +# 3. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# ---------------------------------------------------------------- +# +# This is a script to transform an EPS file such that: +# a) it is guaranteed to start at the 0,0 coordinate. +# b) it sets a page size exactly corresponding to the BoundingBox +# This means that when Ghostscript renders it, the result needs no +# cropping, and the PDF MediaBox is correct. +# c) the result is piped to Ghostscript and a PDF version written. +# +# It needs a Level 2 PS interpreter. +# If the bounding box is not right, of course, there will be problems. +# +# One thing not allowed for is the case of +# "%%BoundingBox: (atend)" when input is not seekable (e.g., from a pipe), +# which is more complicated. +# +# emacs-page +# History +# 2009/10/18 v2.13 (Manuel P\'egouri\'e-Gonnard) +# * Better argument validation, from Alexander Cherepanov. +# * Use the list form of pipe open() (resp. system()) to prevent injection. +# Since Perl's fork() emulation doesn't work on Windows with Perl 5.8.8 from +# TeX Live 2009, use a temporary file instead of a pipe on Windows. +# 2009/10/14 v2.12 (Manuel P\'egouri\'e-Gonnard) +# * Added restricted mode. +# 2009/09/27 v2.11 (Karl Berry) +# * Fixed two bugs in the (atend) handling code (Martin von Gagern) +# * Improved handling of CR line ending (Martin von Gagern) +# * More error checking +# * --version option +# * Create source repository in TeX Live +# 2009/07/17 v2.9.11gw +# * Added -dSAFER to default gs options +# TL2009 wants to use a restricted variant of -shell-escape, +# allowing epstopdf to run. However without -dSAFER Ghostscript +# allows writing to files (other than given in -sOutputFile) +# and running commands (through Ghostscript pipe's language feature). +# 2009/05/09 v2.9.10gw +# * Changed cygwin name for ghostscript to gs +# 2008/08/26 v2.9.9gw +# * Switch to embed fonts (default=yes) (J.P. Chretien) +# * turned no AutoRotatePages into an option (D. Kreil) (default = None) +# * Added resolution switch (D. Kreil) +# * Added BSD-style license +# 2007/07/18 v2.9.8gw +# 2007/05/18 v.2.9.7gw (Gerben Wierda) +# * Merged both supplied 2.9.6 versions +# 2007/05/15 v2.9.6tp (Theo Papadopoulo) +# * Simplified the (atend) support +# 2007/01/24 v2.9.6sw (Staszek Wawrykiewicz) +# * patched to work also on Windows +# 2005/10/06 v2.9.5gw (Gerben Wierda) +# * Fixed a horrendous bug in the (atend) handling code +# 2005/10/06 v2.9.4gw (Gerben Wierda) +# * This has become the official version for now +# 2005/10/01 v2.9.3draft (Gerben Wierda) +# * Quote OutFilename +# 2005/09/29 v2.9.2draft (Gerben Wierda) +# * Quote OutFilename +# 2004/03/17 v2.9.1draft (Gerben Wierda) +# * No autorotate page +# 2003/04/22 v2.9draft (Gerben Wierda) +# * Fixed bug where with cr-eol files everything up to the first %! +# * in the first 2048 bytes was gobbled (double ugh!) +# 2002/02/21 v2.8draft (Gerben Wierda) +# * Fixed bug where last line of buffer was not copied out (ugh!) +# 2002/02/18 v2.8draft (Gerben Wierda) +# * Handle different eol styles transparantly +# * Applied fix from Peder Axensten for Freehand bug +# 2001/03/05 v2.7 (Heiko Oberdiek) +# * Newline before grestore for the case that there is no +# whitespace at the end of the eps file. +# 2000/11/05 v2.6 (Heiko Oberdiek) +# * %%HiresBoundingBox corrected to %%HiResBoundingBox +# 1999/05/06 v2.5 (Heiko Oberdiek) +# * New options: --hires, --exact, --filter, --help. +# * Many cosmetics: title, usage, ... +# * New code for debug, warning, error +# * Detecting of cygwin perl +# * Scanning for %%{Hires,Exact,}BoundingBox. +# * Scanning only the header in order not to get a wrong +# BoundingBox of an included file. +# * (atend) supported. +# * uses strict; (earlier error detecting). +# * changed first comment from '%!PS' to '%!'; +# * corrected (atend) pattern: '\s*\(atend\)' +# * using of $bbxpat in all BoundingBox cases, +# correct the first white space to '...Box:\s*$bb...' +# * corrected first line (one line instead of two before 'if 0;'; +# +# Thomas Esser, Sept. 1998: change initial lines to find +# perl along $PATH rather than guessing a fixed location. The above +# construction should work with most shells. +# +# Originally by Sebastian Rahtz, for Elsevier Science +# with extra tricks from Hans Hagen's texutil and many more. +# emacs-page + +### program identification +my $program = "epstopdf"; +my $ident = '($Id$) 2.11'; +my $copyright = < +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +END_COPYRIGHT +my $title = "$program $ident\n"; + +### ghostscript command name +my $GS = "gs"; +$GS = "gswin32c" if $^O eq 'MSWin32'; + +### restricted mode +my $restricted = 0; +$restricted = 1 if $0 =~ /repstopdf/; + +### options +$::opt_outfile=""; +$::opt_compress=1; +$::opt_debug=0; +$::opt_embed=1; +$::opt_exact=0; +$::opt_filter=0; +$::opt_gs=1; +$::opt_hires=0; +$::opt_gscmd=""; +$::opt_res=0; +$::opt_autorotate="None"; + +### usage +my @bool = ("false", "true"); +my $resmsg = $::opt_res ? $::opt_res : "[use gs default]"; +my $rotmsg = $::opt_autorotate ? $::opt_autorotate : "[use gs default]"; +my $usage = <<"END_OF_USAGE"; +${title}Usage: $program [OPTION]... [EPSFILE] + +Convert EPS to PDF, by default using Ghostscript. + +Options: + --help display this help and exit + --version display version information and exit + + --outfile=FILE write result to FILE + --(no)compress use compression (default: $bool[$::opt_compress]) + --(no)debug write debugging info (default: $bool[$::opt_debug]) + --(no)embed embed fonts (default: $bool[$::opt_embed]) + --(no)exact scan ExactBoundingBox (default: $bool[$::opt_exact]) + --(no)filter read standard input (default: $bool[$::opt_filter]) + --(no)gs run ghostscript (default: $bool[$::opt_gs]) + --(no)hires scan HiResBoundingBox (default: $bool[$::opt_hires]) + --gscmd=VAL pipe output to VAL (default: $GS) + --res=DPI set image resolution (default: $resmsg) + --autorotate=VAL set AutoRotatePages (default: $rotmsg) + Recognized VAL choices: None, All, PageByPage + For EPS files, PageByPage is equivalent to All + --restricted use restricted mode (default: $bool[$restricted]) + +Examples for producing 'test.pdf': + * $program test.eps + * produce postscript | $program --filter >test.pdf + * produce postscript | $program -f -d -o=test.pdf + +Example: look for HiResBoundingBox and produce corrected PostScript: + * $program -d --nogs --hires test.ps >testcorr.ps + +When reporting bugs, please include an input file and command line +options so the problem can be reproduced. + +Report bugs to: tex-k\@tug.org +epstopdf home page: +END_OF_USAGE + +### process options +use Getopt::Long; +GetOptions ( + "help", + "version", + "outfile=s", # \ref{openout_any} + "compress!", + "debug!", + "embed!", + "exact!", + "filter!", + "gs!", + "hires!", + "gscmd=s", # \ref{val_gscmd} + "res=i", # validated by Getopt ('i' specifier) + "autorotate=s", # \ref{val_autorotate} + "restricted", +) or die $usage; + +### help functions +sub debug { + print STDERR "* @_\n" if $::opt_debug; +} +sub warning { + print STDERR "==> Warning: @_\n"; +} +sub error { + die "$title!!! Error: @_\n"; +} +sub errorUsage { + die "$usage\n!!! Error: @_\n"; +} + +### restricted option +$restricted = 1 if $::opt_restricted; +debug "Restricted mode activated" if $restricted; + +### help, version options. +if ($::opt_help) { + print $usage; + exit (0); +} + +if ($::opt_version) { + print $title; + print $copyright; + exit (0); +} + +### get input filename +my $InputFilename = ""; +if ($::opt_filter) { + @ARGV == 0 or + die errorUsage "Input file cannot be used with filter option"; + $InputFilename = "-"; + debug "Input file: standard input"; +} +else { + @ARGV > 0 or die errorUsage "Input filename missing"; + @ARGV < 2 or die errorUsage "Unknown option or too many input files"; + $InputFilename = $ARGV[0]; + #-r $InputFilename or error "\"$InputFilename\" not readable"; + debug "Input filename:", $InputFilename; +} + +### option gscmd +if ($::opt_gscmd) { + debug "Switching from $GS to $::opt_gscmd"; + $GS = $::opt_gscmd; + # validate GS \label{val_gscmd} + if ($restricted) { + $GS =~ /^(gs|mgs|gswin32c|gs386|gsos2)\z/ + or $GS =~ /^gs[\-_]?(\d|\d[\.-_]?\d\d)c?\z/ + or die error "Value of gscmd '$GS' not allowed in restricted mode."; + } +} + +### start building GS command line for the pipe +my @GS = ($GS); +push @GS, qw(-q -dNOPAUSE -dSAFER -sDEVICE=pdfwrite); + +### options compress, embed, res, autorotate +push @GS, ('-dPDFSETTINGS=/prepress', '-dMaxSubsetPct=100', + '-dSubsetFonts=true', '-dEmbedAllFonts=true') if $::opt_embed; +push @GS, '-dUseFlateCompression=false' unless $::opt_compress; +push @GS, "-r$::opt_res" if $::opt_res; +$resmsg= $::opt_res ? $::opt_res : "[use gs default]"; +push @GS, "-dAutoRotatePages=/$::opt_autorotate" if $::opt_autorotate; +$rotmsg = $::opt_autorotate ? $::opt_autorotate : "[use gs default]"; +# \label{val_autorotate} +error "Invalid value for autorotate: '$::opt_autorotate' " + . "(use 'All', 'None' or 'PageByPage')." + if ($::opt_autorotate and + not $::opt_autorotate =~ /^(None|All|PageByPage)\z/); + +### option BoundingBox types +my $BBName = "%%BoundingBox:"; +!($::opt_hires and $::opt_exact) or + error "Options --hires and --exact cannot be used together"; +$BBName = "%%HiResBoundingBox:" if $::opt_hires; +$BBName = "%%ExactBoundingBox:" if $::opt_exact; +debug "BoundingBox comment:", $BBName; + +### option outfile +my $OutputFilename = $::opt_outfile; +if ($OutputFilename eq "") { + if ($::opt_gs) { + $OutputFilename = $InputFilename; + if (!$::opt_filter) { + $OutputFilename =~ s/\.[^\.]*$//; + $OutputFilename .= ".pdf"; + } + } + else { + $OutputFilename = "-"; # standard output + } +} +if ($::opt_filter) { + debug "Output file: standard output"; +} +else { + debug "Output filename:", $OutputFilename; +} +push @GS, "-sOutputFile=$OutputFilename"; + +### validate output file name in restricted mode \label{openout_any} +use File::Spec::Functions qw(splitpath file_name_is_absolute); +if ($restricted) { + # use the equivalent of openout_any = p + # (see opennameok() web2c/lib/texmfmp.c) + # Well, for now, be even more paranoid: don't allow absolute path at all + my $ok = 1; + # disallow opening dot-files on Unix + unless ($^O eq "MSWin32") { + my ($drive, $path, $basename) = splitpath($OutputFilename); + $ok = 0 if $basename =~ /^\./; + } + # disallow absolute path + $ok = 0 if file_name_is_absolute($OutputFilename); + # disallow colon on Windows. It could be used either after a drive + # (like "a:dir\file") or for an alternate data stream (like + # "file:ads"). + if ($^O eq "MSWin32" || $^O eq "cygwin") { + $ok = 0 if $OutputFilename =~ /:/; + } + # disallow going to parent directory + my $ds = ($^O eq "MSWin32" || $^O eq "cygwin") ? qr([\\/]) : qr(/); + $ok = 0 if $OutputFilename =~ /^\.\.$ds|$ds\.\.$ds/; + # we passed all tests + die error "Output filename '$OutputFilename' not allowed in restricted mode." unless $ok; +} + +### option gs +if ($::opt_gs) { + debug "Ghostscript command:", $GS; + debug "Compression:", ($::opt_compress) ? "on" : "off"; + debug "Embedding:", ($::opt_embed) ? "on" : "off"; + debug "Rotation:", $rotmsg; + debug "Resolution:", $resmsg; +} + +### emacs-page +### open input file +open(IN, '<', $InputFilename) or error "Cannot open", + ($::opt_filter) ? "standard input" : "\"$InputFilename\": $!"; +binmode IN; + +### open output file +my $outname; # used in error message at end +my $tmp_filename; # temporary file for windows +my $OUT; # filehandle for output (GS pipe or temporary file) +use File::Temp 'tempfile'; +if ($::opt_gs) { + unless ($^O eq 'MSWin32' || $^O eq 'cygwin') { # list piped open works + push @GS, qw(- -c -quit); + debug "Ghostscript pipe:", join(' ', @GS); + open($OUT, '|-', @GS) or error "Cannot open Ghostscript for piped input"; + } + else { # use a temporary file + ($OUT, $tmp_filename) = tempfile(UNLINK => 1); + debug "Using temporary file '$tmp_filename'"; + } + $outname = $GS; +} +else { + open($OUT, '>', $OutputFilename) or error "Cannot write \"$OutputFilename\""; + $outname = $OutputFilename; +} +binmode $OUT; + +# reading a cr-eol file on a lf-eol system makes it impossible to parse +# the header and besides it will read the intire file into yor line by line +# scalar. this is also true the other way around. + +### emacs-page +### scan a block, try to determine eol style + +my $buf; +my $buflen; +my @bufarray; +my $inputpos; + +# We assume 2048 is big enough. +my $EOLSCANBUFSIZE = 2048; + +$buflen = read(IN, $buf, $EOLSCANBUFSIZE); +if ($buflen > 0) { + my $crlfpos; + my $lfpos; + my $crpos; + + $inputpos = 0; + + # remove binary junk before header + # if there is no header, we assume the file starts with ascii style and + # we look for a eol style anyway, to prevent possible loading of the + # entire file + if ($buf =~ /%!/) { + # throw away binary junk before %! + $buf =~ s/(.*?)%!/%!/o; + $inputpos = length($1); + } + $lfpos = index($buf, "\n"); + $crpos = index($buf, "\r"); + $crlfpos = index($buf, "\r\n"); + + if ($crpos > 0 and ($lfpos == -1 or $lfpos > $crpos+1)) { + # The first eol was a cr and it was not immediately followed by a lf + $/ = "\r"; + debug "The first eol character was a CR ($crpos) and not immediately followed by a LF ($lfpos)"; + } + + # Now we have set the correct eol-character. Get one more line and add + # it to our buffer. This will make the buffer contain an entire line + # at the end. Then split the buffer in an array. We will draw lines from + # that array until it is empty, then move again back to + $buf .= unless eof(IN); + $buflen = length($buf); + + # Some extra magic is needed here: if we set $/ to \r, Perl's re engine + # still thinks eol is \n in regular expressions (not very nice) so we + # cannot split on ^, but have to split on a look-behind for \r. + if ($/ eq "\r") { + @bufarray = split(/(?<=\r)/ms, $buf); # split after \r + } + else { + @bufarray = split(/^/ms, $buf); + } +} + +### getline +sub getline +{ + if ($#bufarray >= 0) { + $_ = shift(@bufarray); + } + else { + $_ = ; + } + $inputpos += length($_) if defined $_; + return defined($_); +} + +### scan first line +my $header = 0; +getline(); +if (/%!/) { + # throw away binary junk before %! + s/(.*)%!/%!/o; +} +$header = 1 if /^%/; +debug "Scanning header for BoundingBox"; +print $OUT $_; + +### variables and pattern for BoundingBox search +my $bbxpatt = '[0-9eE\.\-]'; + # protect backslashes: "\\" gets '\' +my $BBValues = "\\s*($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)"; +my $BBCorrected = 0; + +sub CorrectBoundingBox +{ + my ($llx, $lly, $urx, $ury) = @_; + debug "Old BoundingBox:", $llx, $lly, $urx, $ury; + my ($width, $height) = ($urx - $llx, $ury - $lly); + my ($xoffset, $yoffset) = (-$llx, -$lly); + debug "New BoundingBox: 0 0", $width, $height; + debug "Offset:", $xoffset, $yoffset; + + print $OUT "%%BoundingBox: 0 0 $width $height$/"; + print $OUT "<< /PageSize [$width $height] >> setpagedevice$/"; + print $OUT "gsave $xoffset $yoffset translate$/"; +} + +### emacs-page +### scan header +if ($header) { + HEADER: while (getline()) { + ### Fix for freehand bug ### by Peder Axensten + next HEADER if(!/\S/); + + ### end of header + if (!/^%/ or /^%%EndComments/) { + print $OUT $_; + last; + } + + ### BoundingBox with values + if (/^$BBName$BBValues/o) { + CorrectBoundingBox $1, $2, $3, $4; + $BBCorrected = 1; + last; + } + + ### BoundingBox with (atend) + if (/^$BBName\s*\(atend\)/) { + debug $BBName, "(atend)"; + if ($::opt_filter) { + warning "Cannot look for BoundingBox in the trailer", + "with option --filter"; + last; + } + my $pos = $inputpos; + debug "Current file position:", $pos; + + # looking for %%BoundingBox + while (getline()) { + # skip over included documents + my $nestDepth = 0; + $nestDepth++ if /^%%BeginDocument/; + $nestDepth-- if /^%%EndDocument/; + if ($nestDepth == 0 && /^$BBName$BBValues/o) { + CorrectBoundingBox $1, $2, $3, $4; + $BBCorrected = 1; + last; + } + } + + # go back + seek(IN, $pos, 0) or error "Cannot go back to line \"$BBName (atend)\""; + last; + } + + # print header line + print $OUT $_; + } +} + +### print rest of file +while (getline()) { + print $OUT $_; +} + +### emacs-page +### close files +close(IN); +print $OUT "$/grestore$/" if $BBCorrected; +close($OUT); + +### actually run GS if we were writing to a temporary file +if (defined $tmp_filename) { + push @GS, $tmp_filename; + push @GS, qw(-c quit); + debug "Ghostscript command:", join(' ', @GS); + system @GS; +} + +# if ghostscript exited badly, we should too. +if ($? & 127) { + error(sprintf "Writing to $outname failed, signal %d\n", $? & 127); +} elsif ($? != 0) { + error(sprintf "Writing to $outname failed, error code %d\n", $? >> 8); +} + +warning "BoundingBox not found" unless $BBCorrected; +debug "Ready."; diff --git a/Build/source/extra/epstopdf/test-atend.eps b/Build/source/extra/epstopdf/test-atend.eps new file mode 100644 index 00000000000..fefac85888e --- /dev/null +++ b/Build/source/extra/epstopdf/test-atend.eps @@ -0,0 +1,138 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: (atend) +%%Creator: Karl Berry with ideas from code by Roger Hersch +%%CreationDate: 8 March 1991 +%%Title: RIDT logo + +% This file is public domain. + +% Forget everything we do. +save + +% Make definitions in our own dictionary. +20 dict begin + +% However, this isn't quite a true EPS file, because we use the +% setscreen operator, which has device- and document-dependent effects. +% In particular, if the document is being printed in landscape mode, we +% have to rotate the cell by 90 degrees. The dvips translator sets the +% variable `isls' to be true in landscape mode, so we test for that. +% +/screen_angle + /isls where + { /isls get { 90 } { 0 } ifelse } + { 0 } + ifelse +def + + +% Increasing this number makes the screen finer (it isn't the actual +% frequency). +% +/screen_frequency 10 def + + +% If you change these numbers, change the bounding box comment above. +% This default size is approximately 134mm by 71mm. +/logo_width 380 def +/logo_height 200 def + +% Besides changing the size from the outside, you can also change the +% scale factor defined here. Of course then the bounding box won't be +% accurate. +/scalefactor 1 def + +% We need a string to hold the gray values. +/fountainstring 256 string def + +% Put values varying from 0 to 255 into the string; these will be values +% for the image operator. +0 1 255 + { + fountainstring exch dup + 255 div 180 mul cos neg 2 div + .5 add 255 mul cvi + put + } +bind for + + +% This procedure takes the bounding box of a rectangle, and images +% /fountainstring into it. +/fountain + { + /ury exch def + /urx exch def + /lly exch def + /llx exch def + gsave + llx lly translate + + % Scale to the size of the rectangle. + urx llx sub ury lly sub scale + + % The source image has one row of 256 8-bit values. + 1 256 8 + + % Map unit square to source. + [1 0 0 -256 0 256] + + % Image the string. + { fountainstring } image + grestore + } +bind def + + +% Draw a line across the bottom for visual anchoring. +% +0 0 moveto +logo_width 0 lineto stroke + + screen_frequency scalefactor div + screen_angle + { exch pop abs 1 exch sub } bind +setscreen + +scalefactor scalefactor scale + +/Palatino-Roman findfont 100 scalefont setfont + +% Determine the dimensions of our string. +/logo_words (RIDT 91) def + +0 0 moveto +logo_words true charpath flattenpath pathbbox +/word_height exch def +/word_width exch def +pop pop % llx and lly are zero. +newpath + +/x_offset logo_width word_width sub 2 div def +/y_offset 15 def + +% Draw the background pattern, which is dark at the top and light at the +% bottom. +% +0 0 logo_width logo_height fountain + +% Make the clipping path be `RIDT 91', twice. +x_offset y_offset moveto +logo_words true charpath +x_offset logo_height y_offset word_height add sub moveto +logo_words true charpath +clip +newpath + +% Paint the pattern again, this time with light at the top and dark at +% the bottom. +% +logo_width logo_height translate +180 rotate +0 0 logo_width logo_height fountain + +end +restore + +% showpage +%%BoundingBox: 0 0 380 200 diff --git a/Build/source/extra/epstopdf/test-bin2.eps b/Build/source/extra/epstopdf/test-bin2.eps new file mode 100644 index 00000000000..15eeb9a6ea8 --- /dev/null +++ b/Build/source/extra/epstopdf/test-bin2.eps @@ -0,0 +1,14670 @@ +%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Photoshop Version 5.5 %%Title: 22.eps %%CreationDate: 10.01.2002 15:36 Uhr %%BoundingBox: 0 0 301 209 %%HiResBoundingBox: 0 0 300.5361 208.839 %%SuppressDotGainCompensation %%DocumentProcessColors: Black %%EndComments %%BeginProlog %%EndProlog %%BeginSetup %%EndSetup %ImageData: 1252 870 8 1 0 1252 1 "beginimage" %BeginPhotoshop: 5088 % 3842494D03E900000000007800030000004800480000000003320238FFF4FFF3 % 033E02460347057B03E00002000000480048000000000302024F000100000064 % 000000000003030300FF00017D00000100010000000000000000000000004008 % 0019019000000000000000000000000000000001000000000000000000000000 % 000000003842494D03ED000000000010012BF1AA00010002012BF1AA00010002 % 3842494D040D000000000004000000783842494D03F300000000000801000000 % 000000003842494D040A00000000000100003842494D271000000000000A0001 % 00000000000000023842494D03F4000000000012003500000001002D00000006 % 0000000000013842494D03F700000000001C0000FFFFFFFFFFFFFFFFFFFFFFFF % FFFFFFFFFFFFFFFFFFFF03E800003842494D0408000000000010000000010000 % 024000000240000000003842494D0414000000000004000000013842494D040C % 00000000126800000001000000700000004E00000150000066600000124C0018 % 0001FFD8FFE000104A46494600010201004800480000FFEE000E41646F626500 % 648000000001FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F15 % 18131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C % 0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E % 14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C % 0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108004E007003012200021101031101FF % DD00040007FFC4013F0000010501010101010100000000000000030001020405 % 060708090A0B0100010501010101010100000000000000010002030405060708 % 090A0B1000010401030204020507060805030C33010002110304211231054151 % 611322718132061491A1B14223241552C16233347282D14307259253F0E1F163 % 733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794 % A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797 % A7B7C7D7E7F71100020201020404030405060707060535010002110321311204 % 4151617122130532819114A1B14223C152D1F0332462E1728292435315637334 % F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F3 % 4694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767 % 778797A7B7C7FFDA000C03010002110311003F00F36A9FED733F708730CF89FF % 00C92D8AC36EC6A6F6BDACDC0020E87703E5FE7AC4A438D82068E0413DB5FA3F % F495CA1C450FACBB6B8980D8D4FD1F11F43DCEFA2E494CB32E7E6E58A838FA2C % 0048EEC64BB5D3E9FBBD9FF0990839569AC0657A389206D3C011F47FABF98A78 % EEF4A9BB21C087DAED8C681E1FA47EE6FF006EBD9FF169B0B0B373EDC9B316B0 % 46352FB2D7930D0DAABB2F76BA6EB1F5E3DAF657F9FE9FFA3F512522C26305DB % 5C4B1AF696870FA5C7B99581F9F6BFF41FDB5AFD1BA465DF9871B1E8F5EFB25B % 5D2D2486827DD6DAE877A55D5F43D6FCFB7F458FF6BFD22A1D3697DD631D4366 % DA9CD7B58D3EF76E7B6BA71E96FBBE9653FF00F04F53FC12F56FAB7F57A8C36F % A563465653DB5BDFB5F34DEFBEBDEF759757FD271A963DF57E9596D15617E8E8 % F56DC9C8F5529C6C5FF17A6FA9FBF283AC6BDA6D18B15D227DD63EEEA4F65EEB % DD5FFA2A3F3FFED3E37F388D7FF8BBC1B68F4B0333D7CB610E681905A5D1A1AA % BF57ED353BDCDDCCDECABFD1FA8BBDAFA4E316C660FB758D3B98C7347A6C11EC % AA9C6D31EB6B5BF47D4FD2FF00C228558583946CAEEE9F8A6B7C3C8606B9D3F4 % 439C3D367BBFE16BB1253E4DD63EA7E674BDCF1B32A977B6C6B5A6ABDB3BB6EF % C67B5BBECFF476D15FE93FC07DA9724FAE2B7BCEA781648DAE007B87FC67E7B3 % FD27F5FD8BE81CCE9D5D753C968CEE9E23D6C3C81EA9A9B1EFB719D77E9BD9B5 % 963F15EEFA1FD17F4BFA27F997D76FAA0314BBA9F4F701819794DC76B2C76F87 % B9BEAD593EA325BE85DFA5ABD47FEB1FCC596BEEB326F494F1153DF5C0B010C7 % 12D0E3C0708DDAFF006BDEB6FA5653E92D79262A3EED4CFA6637FB7F3BD077BD % 62E45FFA318EC9F45824349D379F7B9FFD6DBFA2FEA2BDD332696D3FA723692D % ADC098E4101D3FF12E733FF3E24A7AECAB36B4BA8A99E9B4389276C881EF977E % 76D72C5CFBDF4F49AF522ECDFD33F6E803ED0D6B1BA7E651558DFE5BECAD5AFD % A18F6F47CD1F6BA9EF6639686B9ED6973CB0B2C756D77E96CB1CF6B7D8CFF49E % A2AFD40E1D8CE9B533231DC7D5C76902C63835AC6BF77ABB5DEC66F7FBF7A4A7 % FFD0F302C0499E67451DBA46B1E08F563FAAE782F15B59EE73DC1C401219AFA4 % DB36FBDCCF7394AAAFA747E92D04ED1D9FF489F77E6FE6B52520A2836DCDADA4 % 3493F489D040DC5C7FAB0B7FEAD65E363E265E164E40C57E6E4D3539CE04EDA6 % CA3A8F4ECDBCB40DBFAA57D4BED3EFF4B7FA7FCE2C6C0716E6D6E026039DB7C6 % 1AE21AB46EF5310BB2B1480FB6A7E3BDBB4695DE2EC7786FBBDBB6AF67F6FD3F % E6FF00469299FD58C7CFB3A9E35DD3B18665F8F7D7552C70046F7FDA3218F35B % DF5B37329C7BAD66FB59E8FA7EAEF5EB5F55CBE08B06E3D381E9F6B185AC70F4 % 0B46357EEF4F6D766DAEB67B99F6CFF0BFABD2C5E79F562BB7233B2EBCC0F75E % 7A9635971B0ECB064D78DD5EDDB634EFFA398DFD37F23FE317738F918F6E6D97 % B1EDC9C2EB58E7697346D7E4E010C656F6B837D36E4D0CDDE8BBFE2FF49524A7 % A17BF1EEAC3B26327701FA0699C66BDB0ED9506B1B765FB9DB77FA391FF178FF % 00CDA83EBA1CF70BF09A58F734EE7506BD75F7577D7EA3EA756EF77A991E97F3 % 9FCFAB549703EAB9AD6596366CB0BB79DB1BC575BC359EAD5539FF00E07D1A2A % FF0049EA6F4D5DA3D7316325E46D800174B77FD263BDFEEF733FA4FE89252D8F % 70AADA9BEA3ADA2DF70F58CDB5EE835FA56B3FA5637E6BDFEA5CFAFF00C25F65 % 3FCCF21F594E63B7F4DC7C76595555D18BD4746B9948EA3656EB2F66EB2ADB91 % 8B7D345BD3ECAEAB9989FE87D3F4DECB3F5AFEB6FF00CDFCBAF11F8AC26F6579 % 2F77ACE630BDB73BD5AD8D662E437D4FD16EB3259E8BDFEAFE929AAEF4563E17 % 58ABABFD5BEAD9EE732BCCBB34E58A985EF2E6E2D982EADDEA3B637D1C6FB550 % C6D16D3FF08929F3AEBB8756275EEA7858ED8A71B2AFA6969D4865563AAADB3F % 9DEC62A429263491C02359F1768B4BAA5872FADF54CA20016E5DCE73A623D47D % D610DFEB35AE523D3EB662E3F53CD7018F6DF5D6DC4641B063C3DEFC8BB6BB76 % 37AADAFF0054AFF9CC867AB6FB29AE9F5D29CDF43F927F22714CB80006BDBC96 % 9750C2FABAFB2FB70BA857556C150AE8D97B8BC922ACA7D6FB6A6FB5BB7ED3FA % 577FC17D35472BEC6F7B5D88D0D6168DECF71DA48FA3BACFA5B5253FFFD1E3BA % 4E47D92BEAA5B8D75CDB6AAE92FC760B18C3B864ECBAD3FE02EF41FF00F1BE92 % ABD47A8E267755FDA355563DCF6BDF6B1D5346EB582CF4EF7B2B73AB76FA5B46 % 4E759F9F91F69FF8D52C3CABB1599A2B7564BEDAC9BB7BD85AEAC5AE65B5321A % FB3E93FDEEAFF44F5A76BFABB1B955368A3231D8D736CF46F0DA9AC73B750CAA % BBCB77578992CB3D1FD1BFF435FA5FCCE3A4A798C6D32191C807EF85BD4CBA1B % BC341686B5F04EC24E46DB0B581D67E8ECF7ECADBEA7FC1AC2C68F579FCD31DB % C16CE317FDA880601730103C49B0D7B7FAAD494EDFD5FBBACE566E5BE9AA9B3A % CBB2319B4B1DB05765A303AAB7ED25D3E8DDEB37F5A65DBFD1C9B6DAACFE66C5 % BBF552EEA2DE90FC6CCAEB16F4F733AB61BB1C8735D5075FEBD76B1BF45EDF4E % EA367F3DFA6F4FFC1AE3FA3E4DD67D67BEA65B63686D5976D6C6B8B436CA3173 % 2EC6BAADDECA6DC7BECB2EC7B3FC058F5E819ACB7A6F5C19FE8B1AD75C0E5301 % DA0B8B325EE63B7575B5CCEA5EAD79D5FB3F4597FB428BBF49E924A7A7C0756C % AC0AF60656436B7005DB8389FD2073BE95993BB733DFFCD7E91580FBDCFB83B7 % 1AC37FC234166A3747E8CEF731DFF81FFC22CBFAB544B6D658E360C2B5B8F876 % 388739D57A55BE8B777FC361BF1DF66CFA7FCD59F9EB7463540CB6B60DBF44B4 % 0047F5766D73777F5925383D7FA4E0750ADEC762D36653D8CC5C7BACA2BB6DAB % D67FA6CB28B6D63BF438ACFB4E5FD25C57D777E2605743FA7D0DE9B45395F63B % A9C7860B2A365C325D7D74ECF53ED6CE9D85BBD6FD27E817A0DCFAB1F29AFB2C % 3E96286DD6924B47EB07EC7458E706B2B6B1958CBBAE637E85BFA5FD12F30FAE % CE8E8B8F75EC35DBD4B38659718DF5D0C6DB56163B75DFFCCDDF6B7FACCF53F5 % 9ABFE136253CF51898F5E51C9CE6FAB49C8BDCEA4388F5852DBAFB59EBB3735D % 431F5D1559E8BFD47FAF6FA5FE0ED57FEB1D575DD631A8B296564BA8B6DA7575 % 539429B4566CA07F4666EF468DBFA4AB17D2C7A7F99F65ECBE9F897FD5EC3CD6 % D7395D6B2E8AF068ADB229C66BF2317EC953CD7FCF5AEDBF6AFD2D4CBF7D55FA % 4CAE9FD32EBD8B937F43CDEA2E6BEEB99918A72B22876CC5A2BA9ACC4C3A9AF7 % 39AECFCBFD2BBD6B71BED1555ECB2AF46AB7F4E94B751B2B16134FD5EC5BC64D % B8B6B1F53AC071CBB1B11EDC277A7E9D8CAEFAFF004F5DCEFE77D4C9F4FF004D % 45DE8657D616677D8309D9B874E1166465D743182CF59CD2F19B77A8EB5CEADD % 8D4599ADA719DFCF3FF49BD68E4E57436F4DBDEFC77F4EB2FAEA65591554E0E6 % 5F58636DA3736DF637D2AFF3FF00D2E47A7FCDAC2EAB87750CAADC8B6E36DAE7 % 7A34DACF6FA21C47AB4DBEA5AD6FE91BEFA7FF003B494FFFD2E1F1716ECACB7D % 545D5D6DBF24D6D73D85C0B9A1D7D2EFA2E7358EDBE97FD711A9B7AB3AA6B9B9 % 1416330F7349A86B55A5B8CFC773855B9F654FA377BFFC3FAD6FABEADD625855 % 643CD992CBF21B732EBED61A5D1FA6AEBB6CAF20D843DDEA7ABB77FF00C17A9F % E977B1EAE9B7FD872AC19392DA69658185836B36D237BD8FAFFD1DB9591ECFD2 % 7F81C8FE71EFFD1A538B8D1B898D36E9F7B1685177BF7348E5A4F8E8B3EAD379 % E21A34F8B9A8EC869DC34DB06279DA07B7FB4929D1E830EFAC19CE3DB13A8FE3 % 8B92CFFBF2F51EACDB2ECFBD97BBD5AEDAAD17BAB60F6B2BABA7DAEC86CBDFFC % DBAF658CF7EC65B5FF00C2AF28FABAF7BBADDAFA882F75396E6870243BF436BD % F5B855EE6EFAF77FC1FF00D6D7A6F55B6AB6FADC5AD3586DA6BDAF046E6D1D39 % 8E66F0C6B7F42EA5ECDAC624A753EAF5B70B2D6BDFE95D535949688BAB2DADA7 % 228B6AB9CE67F394E43FD2B3D9BF13ECFF00CDFA4BA0272C0937100E809A8013 % FE7FB7FB6B90E95662F4FABAB5989756EB7A6579193452456E6BC39B664D39B9 % 3E986D9E9E4ED67A7E9DBFCD5357A7E85767E99744E98E67523E94BB2F01D8F6 % 66F501FCFE455954D57647ACFB5CF665E1597D793FA1FF0001FA2FB1FE9B1BDE % 94EAF52BA31F22A6CE63EFB9AE7E307B683718167D9D9EB9752CC5FD9B856FDA % ABB3FA4637DA7FC32E0FFC683F38E1607DAE9F40FBAC00BABB0973DDEA5AEF53 % 1C6DF6D8FDBB7F9BFF0046BA0AB2F29F9F87EB3E9BB21A4FAF918EFADF496B71 % F25DBA96D2CAACA9F637329A1ECB7F9EF4D9FE0E8FD272BF5E7ED17F4DAC7E92 % DAB11CE631C497B1AD259B856F8FA15FD17EDF653FA1494C7A6D370FAB38996F % 2D6D7859F55D5C3839C7F59FB3BB654FDCDAF6FF00A57B7D3B7F46CFD2FE9BD1 % B9F59FAAE45BD33AD62DB530D8E6E33C7A6E15B595635D55343FECADDDBDD7D7 % 9356FF00E6BD2FFB6D8B13A7E4B2BFAAFD45AF70AECDD59AC090E2F664E3DDBD % ED6FD26D74E43FF4977E8D8ACFD61B9E6CCB6D4C06AB711E6EADAF02B6FE9997 % 51656C6B9ACF519B7D3DBFA4494CB0586975F462E653914B06DA69C9A716EAED % 6BAB36E2B6CF56E63BD5FA347ACCF7E3FADFF1CB37AFD4FAF1B1E9AF29B95894 % 0ADD8D35D4DB432DAD9EDB5F439FFA4AB6D745F53FFC254876750E936DEF7DB5 % 34B6C6343A296874BE96E3E4BB76CF6DD55FFACD367FA4FF008C7A865D1F565B % 8C4E05F9166586D7B05B46C613B76E535CF1759F9FFA5A1FB3FE09FF00BE929F % FFD3F3A2D2EF7491ACC0313BA773B42159EA3560B5B4FD98893894BADD96170F % 58867DA6B731E5DEFDDBECBAAFF4CAAB83679D7E686433C7F2A4A654C6DB6624 % 800498FCF0539744EAD9131A8F2FFCC94001BBDA44C1FA5C47CD11ADBFFC1B99 % BB67E6867D1D27FD7E9A4A49D2B32AC5EAC732D01CD68BCECDC1BB8BEBB2B6B5 % AF2D7B58EDCFFDD5DB57F5B7A7E73ED7656088BDDB83467E1B0D65CDD96BEAB1 % FF006777A97BFF004B6D9FF06B96AAB68A1EF73C5999EA96BEAA1D4B1FE9ED07 % D4AECAE8BDDF4FD565ACA7FC17F3BFA257BA49C805DF67AB25C7F3B6E4D4D113 % FF000DD36DFF00A2929E9EBEABD249CA706D55FDB5F9361232BA5EEABED548C5 % 7554BBF68D4E75747F3BFE0FD6FF0083FE711BA0FD62E95D22FB71406E4555E0 % E2514BCE574EAC8756739B7D8D79EA76D3BACFB4BDDB2AB5F650C7FA36575D1E % 87AC2C17FD6291F67C5C8983B7D5CDE9FC7E76CFB4F46FFA944ADDF597F695BB % 71AC197E853BE737A647A5EA64FA1B3FC8DE8FF3FF006ADDE97E97FD3FF80494 % 8067F4E6B9B67DA8BADAD8D00FDAFA500E7B28AF05963FFCA8F77F80AAD7D7FF % 0018B17A87D636D17E455631859958D6E28B1B9B45DE95775629FD1D7D32B750 % DAAB7B3D5FB1B1FF00A4DFFA5FD2FE9D7524FD7323FA3E50FEA66E04FF00E05D % 1772E4FEB257D54DC7F68FED163B6E832B22EB047FC11AFA5E351B7FAA929CEB % BA89AB073FA7C31A6DA69AAF739DB1C4D15E27B2BADCCBFF00ED461FB9FEAFE9 % FF00EEBAD2CF3E963751F46FA2D65D558D7B4F51C3B9C77116EEA2BAEAA5F66D % 78FE6EAFD25DFE06B58ACAEA38F7BCD844D30DAE936ED1157D2B3D1A4D4FDF57 % D3DEFAFF004FEA7DABD25D3E78FAD1FB3328E433AC8C6FB3DBEB0BF2329CCDA6 % B76F378C8E9B5EEAAAFCFAFD467A9FE9FF00C224A7846B5A7E9123C223F8A234 % 09D3F1510040D7545644A4A7FFD93842494D03FD000000000006020100000100 %EndPhotoshop %%BeginICCProfile: (Photoshop Profile) -1 Hex % 0000019041444245021000006D6E74724752415958595A2007D20001000A000F % 00240037616373704150504C000000006E6F6E65000000000000000000000000 % 000000000000F6D6000100000000D32D41444245000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000563707274000000C00000002464657363000000E40000007277747074 % 0000015800000014626B70740000016C000000146B545243000001800000000E % 746578740000000028632920323030322041646F62652053797374656D732049 % 6E632E006465736300000000000000174772617573747566656E202D2047616D % 6D6120322C320000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000058595A2000000000 % 0000F35100010000000116CC58595A2000000000000000000000000000000000 % 63757276000000000000000102330000 %%EndICCProfile gsave % EPS gsave 40 dict begin /_image systemdict /image get def /_setgray systemdict /setgray get def /_currentgray systemdict /currentgray get def /_settransfer systemdict /settransfer get def /_currenttransfer systemdict /currenttransfer get def /blank 0 _currenttransfer exec 1 _currenttransfer exec eq def /negative blank {0 _currenttransfer exec 0.5 lt} {0 _currenttransfer exec 1 _currenttransfer exec gt} ifelse def /inverted? negative def /level2 systemdict /languagelevel known {languagelevel 2 ge} {false} ifelse def /level3 systemdict /languagelevel known {languagelevel 3 ge} {false} ifelse def gsave % Image Header gsave /rows 870 def /cols 1252 def 300.5361 208.839 scale level2 { /DeviceGray setcolorspace currentdict /PhotoshopDuotoneColorSpace undef currentdict /PhotoshopDuotoneAltColorSpace undef } if /picstr1 1252 string def /readdata {currentfile exch readstring pop} def /image2 level2 {/image load def} {{begin Width Height BitsPerComponent ImageMatrix /DataSource load image end} def} ifelse /beginimage { image2 } def 12 dict begin /ImageType 1 def /Width cols def /Height rows def /ImageMatrix [cols 0 0 rows neg 0 rows] def /BitsPerComponent 8 def /Decode [0 1] def /DataSource {picstr1 readdata} def currentdict end %%BeginBinary: 1089251 beginimage     + -67.!*!"!!)).,"#'% )%#!#!"""!##&&#($&  "&""".#+5DIHHDB>BA?CGEAGGH>@AJFHGIFB>=?862@HFMIEG\XYYSTX\ahb[HCPPW]Zejkg_idbk{~kqndls~wuyrmsnh[9&(2MOMKNL?+'Ot{`IDF:$  $  %/69104794325:1-(0%*401880/35450058,*/00-*,2/'.15/.2&,0-+///*',+%-2((**+.%,)+(*  +         #!/.5621),""$/:?;?=8A=22,& $ &'  + !$%  &  #%+-$)7BF<@DC*.-06IUL@7&060#DW[VWLQGI@;7)$,;HGNJQISZJH9/'(#%&"4?B?95;6/87-)-0)*,4434/#&Pb\jiZ@03?F_emioqsjlgbL:6@X^_idooiiedbacaYYUQGAH=47714:8796*47.-3:+%*-32/443-,02201.31:B8AC>GSTWTNJIKHEK=&/88=QZTUPVQOH@<27;MLMOI@;B6!#%*#%+2761*(,5 !$!&&39B@<8;,%!19>@@IAFScj{pe\`gj^Wgq‚‹‰‚‹}men~‡‡ˆˆŠ‡ŠŒŽ‰„„Š‡}vƒ‡ˆˆ„„ˆ€yjeu‚|{vr|uop||~‚ysru{s~„yvworrvxwskppq{rpsxsmosrqposs{snhnpvrokoklovz|wmjiqtyknmvoihbjgdd`kj^Z^a[WWSSONKC:7<8DceUWm‚uWKafs†Š‘‡†Œƒxrpnmigooh`hrlcZ?03;7Nim~‚ƒ~\($ +    + !2=9,! #"#(+.*'.*&#%#" "#""++'$#&! ,*'"#!&*03;@ABK;7:9:FSSL313##2@@?AAGNNEEKICBCHBJDCB=A@;?PA=>D@CIE@DEH?A?:501/-)($&)/.477012315356/+1(-2-++//*/.2*$0.()*#'.)',,.%,+,1+# &!(')$  +  + + + %$'/-2*+/)"&29=5/;E<21 "  ' " + + &!"&" "-:>==E;'#,4;GMJ0$14-%3Q[W^SI_NE@>6,$.;TEJPWVYTTP=:31)$)$;I>A>>47JG?BIDA>A6(1&(2,'&$(+.,$"##''$"!&,28>BEJ;$*)*"28:@?@B>@>5-*,($11;951$')*72/4/+##     +  + $  + '& #!'(" #%#  !%%' "'(%&!! "%&(#$*'&&,(,!!')'%*)*+*"$"#'"$"-,'%,,0(#2EQ]bQ3# #=Obce]MMRKKJTSNHEE?D=BFRYWcikacineW]ox‡„…„ymkotƒ‡Ž’ŒˆŠŒ‰‹Š‡ŒŠ‡„…„ŠˆŒˆ€€ƒywnm€wvuzutquqzu|vxvnrrr|„ƒ~tsvxswymkrw{qtxpr{|sqoppw{zwqrpposqrrsogkrxsjmnpyzppwvqmjeghejdfhd`c\`\RLJMIFF>85;6KcaTb{{dJP`izŠ‰‰Œ‡‹‡ˆ…„wpllnkcnqkigb`ehN6177#   +   ,..%#$!#",1-,#$(&#"$ ""%$#%% &-+)$ 420=BFBBCCB:8>KQN@=8- 0@A::AJWXIGFIFA?IMJJC9?;;;84><9B=C@@?@GGH?:?@FBB<GOE6,/7'$+3+)3&*++2$)-/&&) !-($'-*$($-1'%(#' +  +  +   +  + + "# *7-/'&##%.<@;6D8;81%!$ !! + %)  + "+*'#!(*9899-"*%*(08<9!$&38'!&1BVQLb]SZTOA=5/!":RBN]UXSRQOIB=+)!$$8D@C?=:32531'$)&!%&7CMNc`]ZH8+724;Tglljb^]`PD9/)72-(# 4>@E@>@A=@;7& +300(%"$*+556.*'   + +  %$   *&!$&!"&",%!"! !)&#  "%% &#),%%$(%$'.,")#!#')#"%)%%'$(/0,)%02'+!*FWgv^<'"#1FTfk[LUXPUXZOC?H>99@AGWMPUgrkdcnj]Y^mu~„€|ytlkwˆŽŒ…ŠŠ‹……‹Œ†ƒ€…†Š…y~yrt‚ƒso€xwvwuutwlzysqtv€ˆ‚ƒwwx|xwxmkysxt{vzysrnr~vuutxz{ysqntpngdkrqpmrzvzvprwpmsnlkbegjfgfig`bZSMOGDBA<;?8=XkafuƒuWFdqp‹Žˆ‡‰ŠˆŽ‡~xuwwsojmqlncb_cfW85./6Kfsrm~„c- + +  + +  &,' "" !(*($%$!*,& "#$#!""$#)('" +#%%$#)0'5=AE=@HHHAKQMJILH?8-)-4=EBGGJZ\MFCCA8;>KFBBA=5>?:=>?BEGC<@KFFMNNADIIG>:7;>7>GKMECICEILTQTKTKMPU__Wee^`UJNLQX^ai^^]`cbhkblnixvrpkbN0!$9RKCAB;')HVR3(1)-   +  + +  (   +.42,+2826.75-434+$&%)236,.52++..26322,$%*0400)+%(-,15%'''(%'-/''%%.60'%)*"#%  +    +  $(23,3*"*,98>B<985--&  $   $% #()"$ (9=80$%7,% 0BID:1,*:EYV[^]a\]MB@3.. 3?OK`\VXRSLMF?% %/::8@?2'(-'$+"!"'3CIT``Y^I<=02&,1/>Uae_cd_WV64,-?@+)#%#$% ""&)1)2*,,//9;5ACDL@CAJBEECCLF>;GDHA@99)/'(;;@:=?==?EE;0 %-(% ! ),*:1/'"    +  + +   + $   !" '!'!! ""%#"$ !&$#!#%& &$$"!$$$##"!%'+%#$#'&&#""$$()"#)3*''-22.!&9StxhB0 "%.BYTIN^YSM`]PDHK99BNNOK?FM^ophdgfc[Wakw‚…†‚…pYg‚ˆ‡‹Š‹ˆ}~‹Š‰~~ƒ~u{…‚ƒ~€z{w}zsr|‚zvxwpwstw|vzt{†ˆ†sw}†{|xux}tz|{tzvss|yzztx~|~€upsuooqpqrqrvxquvqsqoqumleafhcfhfidaYYMMIHH=@89<@LflnuƒhKVmlu‡‘Žˆ‹Ž‡Š•vqt~yppj_gjdf`ah^F*$?:=Zluxu~zZ&  + +    ",'.!!#"%0+$)#"')! $$%"#*#! &$  '*')& ('&)3<;>:A=@BRRMMDOLFJD<46@OMLS\LJE?==EF;@A=8?EA@EAEA=CCIGIBA477;BKOPWJMEMOA>868<( +     +#" $#.*/?7(!$06$8IOUSH.-46FNYWZXSVTHD:;9,"/>SW^\SUS]ULE1$2/68972("'**# .:USUTXHH:2/+*784*)(BNNJQMSMUa[ZVM]WTXaZYURTXZTLSIQ]YUULLKK>C?@<48=6,),*%$  (*$$6ABMGKF?=?465+,0,/3;6:661,# #)"**#!""$,12+4A>AKNC:14./0;FD@CAQ\jvnf\ii\U[ey„‰†ƒjX\myˆ‰†Žƒ‡‚†ƒ{~†ƒywwwzyz{‚zvrrpx€||stprrow|‚z‚{ry„‡ˆƒ‚„Š{zysttsty‚}}yvz~}}zxyrms‚{‚ƒywxpxxxswvvuzyr~vtktyvuqgdf_cgdjkfef^T]SJDHGE?:7>FZijrx‡yW>agb’’Ž……ƒŠ‹œqovunph^ckegf`bbWDABY=HbllqwqdA +   + -,.$"#"(,&,-&(&'""!!%%" %(#(## #(*/-#))',37>?@GF=IFMOMEIRMQK;7GWUHOZKOKHCFMGCLFA@:@GJE@C?9=JKJLAACEIGGE<=H;@A=FHD?7663+%.58694212;G_``WRL>3+('()#$&,8<9:@CECICL_P\VPYZ]c^Q\Z\TW^^Y_OP^aYTSNTXXUSSWN]\_STQJWPRYTMLNKIJBCEA7;320.("):F@NJB85/13331()/41:=D?AC/((!#"#!'/36>>CNIB60*#.2?DLHD=?DB@83&-%!*.4$##'.-!"%-'     +    +"  +  +"&$#""&"! %&""" &" !$#""& "&.'&&"&%"%+#%$$)$ '+))..,2-++,+"*>ZghTI2)(7EFFWjskcVebQRDDO\NFA6;EIXkmrpa^f``Zcuz…z{yolebuƒ†‡ŠˆŒ„ƒ~~€Š{v{{tz‚‚{€~qqnz}vsyvotuw}x„‚{y€ˆŠ‡ˆ‹‡‹…qoqmtvˆ……xz~€xvx}ulu€x{‚€€vsyu{}|zwox€vsxt~wpomji_gegc`aad[[ZSVLJMEA;2:IZcgqˆlDDf`mˆ”Ž‰€‚‚‹‹|tv~vimjgjcchgafbN_@1B4Rb^clqcV,!  +  + +  "-0,/ "%#""&1037$,"!! #" (!'&*+('"(.)& *4()1A>?=EE@=A>HLFHQQTVMEFS[SLGTOcVCCQODBLMNDGIEHDBD>>A??GBADDDB=@LKLDEJ>BL>DA>>:>AHDIGHFOSGFTSHHVNRUVLZ^W^YT\YPWg\UYhotaYfplhhomhv‡la[J/$19HE>A;.&*FJ? .(  + + +   +    + + -7/002371)210,/4(%*)+./-01(73),45136*5.1.(,(*,-%'**))+(#&3&% $(&!))"#!%2((*&&  +   $/4-372(",;;024:=>@935" + !!  '  + !& + $9-(',@JWMMMITE++/DIVZKTP]bVNJD4&*+?H_XX[]ZZIKC3)(02.,'25'+-"'9EUVa[VB;31*5662:4@?CHGLHSVWG>3-%!"(4AF@@87ISTVQWb]fgaVYZ`d\^[R[_\UXY[LW\SQUZZ[TS]\UPTWSYYXWPX\]VPKYYV^QSTPVUQOZQNQFQQIEC0,!!#'(,.<;9433*"**'041.1)36B>@;B;0+# % *33?DLQG@2-+'06?>>DE@CKE>8.1731/27:3# -# "#$   +      +   +"("!!"#$)!#'#!$ $ #&%&*,%$%#*# $.$)&"'"!+,%,)%-*.,2*($'/:KSTM<;!%03BPbjlhZQUMLEHTVYKF78?B@P\bsxb]be]Wfh}ƒwr~|qonpx„ƒŠŠ‰‹„‚ˆ„ƒ‰|}ƒv{…€~xxxxtx{|x{}{vx…ƒ‰€€…„ƒˆ‰Š„†pmls{xƒŠ€v„†Š…~r€…{u‚{y„ƒzxsyz€||~{y|x}~y~{slrnmgeikhbcfb_\_VRPJJH@@:6?G]Uds…bC\llr‰‡‹ˆ„uv~|tmhonosZkiig\A1-2.=Ucgmoi`I !   + + + + +   +5/-)+!' !063,)(,!%!"% "/+('#! .('&"#0&(/<@@<>A@@9CD;B?<@?CGE?AGEBHACVWPNTLFLD=BVa^_aija]a`\Z_lykcdlocahbdinm`SF"8@AA:5:&7GXU7$!*($     +    #-5304..2$-6541/+-$*'++))/+(/-.03:)(5+%/0-$,)*$.,%(+)$#72),/," +-%)#*.+#&!     +  +  !.D749-3& (8;@;,+"$'(.5257512.*(+0-+-03;C=NL;3(0./4=HEDJ?FAA<>624;54DJ??8,% )4/! $*## + +        + + "$%! "" !% "$#"#(!(%!*$$%#$"%)'& *#(#"+'%(!"+('.*#'+.$%*/1% *4>RXOC6#)&?FADIIT]\]ZXURUFAIIORRHSWOPKCBIJIEEIHEB<863BB@ADEGEBAE@AJBBCIC><:JIEG?A@=CC4@?40.! '    %64+&&=MPLMQRZYIHH6+-9OO_WORQLWQNE60 =AHADET[LRPB>8*(!#!/.+5FNCD.&,AUXf`dfa`b`a___^ZWPVTUQ\XWY[aZVZ\YSSTJITUSPYZRV\RRRTOGLFQRPVYVRKUT\XUOTQU]VWVNV\TIC>:7==;5-*"  .+5==:777.-2/.-+,1=?<;/%*-2<:<<<>6/(# !( ! + )#" +    + +    +    + $"#' ! %%##%( &%%(&(%$.#'%%*'&*' %$ '!!**.()"%3,/0%<=&##$8^eiW6.$)3?PVXXICBBBX`aO>>8HG@@AKPa_jrc]ejfRU\plz†‰Šsa]l|„€‹…†‚„…„„…„ro‚†„ƒ‚…ƒ~€ˆ~€ƒ†Š…‡„€wx„†‡ƒ…ˆ‘…‚‚‰Š†‚„up€ƒ‚|„ƒ………|„†~~€‚…ƒ‚‚ƒƒzz}‚trƒ~~‚yqmjr~yuoolggjihuqhhkkgc[RONTIC:16AL]blowshMPnuvŒ‹Š‰„…wmr…ƒ{tttqlpjcsjegeP<606:]lfsrokR&!  +  +   &..3,#& */51+-(" !! !$!$'&(,'$ ((&,19>AA676?>=BAGEDL\aZQXR\\VXVRRSTO[\XSKDDINOA@@<>>;;JKOOKG>@FA>::AHMK=>?KGGGBKQLDHFAMNUVMMP]fkcY^chdS[ZUb]`fmib_YamdedfO5$*?OD>>9;:3(!  +!  ! +    +  ,)&! 3DJNKNQ^ZWPVTH:/24MQV_^^ZZZZL=C6,*/EYY_Z]aWVF;3(''&(1CIVTZUI:030459::?HOZUOPSJ?41+&++)+5CIU\[]dYLHA=5*.5C^_h\b``Z]`cY_W]_TSORMKRUKRUMLMEHKNLNMOLIDGOLDMIOSNKPOJFELQKKJJKKLQLTUVSNOZQPFP^ULURD<4.)(,'5;AA>?52"#"$*49<<:=641+45162205AEB71, #$2,'%11;@DJED>6,%.=MGELGFFIGFC9).041<><>:6792*" #! +     +  + + +   +##!#!&$!!"!! ##'!!&#$##$%'*'%'%&&&$#  "!#)/*$+'%.(32-,.' "&#%"6\jc`V=%$!;OabQQLI?FPMBGA:8CNPWSSSZ^jssgackcTVWl‚€†…zkddr‡Š‰‹‰‹‡‚††€|†ƒƒ‡„‚ƒˆŠ†ˆ†€…„…‚„††„Œ‡Š‘Ž‡‰‡„……„ŠŒˆ„…‡‡‡€}|€‹‹…‹‰„~{…w}rtƒƒˆ……y~|†€zƒzmgn|{qxxqnllpovumnpkf`[]VUVPB<32>D]hx~wr]A]pr€‹‹†‚~~}zt{xusvsomjheirkhcWC9/49@ammyvri7 +    +   + !$"*-!"#,42)'$'!$#!!&"%"! #&& +6-($#(-#'36?D=536;:;FF@B;7?7FGEAC@:76@?>=B@CCEDKRQDILHLBRULST\a\W\_WOSSfief^RYah_]aijbaaY>-.9DM@>>..KX>(2=61,&! +   +  +  + +  + %*355/-301&!)-1%&/)-,2011/3$0+//1*.5-+*.1)--/..&#%(*&'(''##$&(&"#&%"!# +  +  &  +)22:346+&-2887=D;741 +  +'! + + !  %&(%'  8CJIHDNEVZVPWWN@>*8KGOV\c\chRHK>=.-1CYcef]_^QK9%*!*8CVX]RJE81288A<<8;VOR`YFB=>(!&#"(*1>GFWb__cddg`^]OOMJXRUc__\^GU[Zd\JTOUWUTGDIKRLBCG@:G;7AABC>@>?9;@>@E@;?@AA?ECD@JB@AOEAMPRPGOVQKSRLEIQONWUOGB?//167DNLTXGK@25,#"".29;DB89512=:/,*0:CCBC>8,(#*# &(.??KLFA>40$9EM@LEGCBDGD@='&,57:;=?8+7:2-)   %%$& "    + + +#" +   +"!! #%!!" "! #! "(&#&(,+'*$)(&$! #&&#((!$""#')$%*2-*&(,,*$!(?`]fooS8'#/D[d]ZOJNKAFGNC8<@UcXPFDN^emsiY[ghZV^nwƒ‰Šrhe}‹Š‹Š‹†‰‰„„†††ŠŠ‘†~}ƒ‰‹‹‹ƒŠ‰ŠŽ‹ŽŽ‰‚‚ŠŒ‘’‘‘‡†‡‰…‚‚~}ƒ‚‚Š~~…u{znmtu„ˆ€††…ƒ‡„yx||uz~†u{}sqigirsusppjd]WR_[b^NC=-3:Gisx~~sODggrˆ„‰ƒyuwuqkprrophjckklmaG7727>GenuxxvR      + %() """"!!*220)*#!!&) %!!$$%  (20& %2.,.28>>>8B<;BEE=JYXUQUYYPOUJ79AAFOBCNL>?PNFEIGTD<:?>=;BDHD@>GF@FF=@?BC90198=?89DHEIJEA?JPSUNQOYbeQ^Y\caVHK[birsgdZU`T^fe]bceN*2CGFGA<)';]E0$18*#%  + +  +  +  +)-37*53-.+**+!)+%%! ()).0++-.+%/)+32*23+!,,)4-&,))$'('()%()$#%#&2*! $3*!   +   + $  + +%1811.0*!",31996?86/"  !%&   '1 '& *8BBDFN?IGSXUY[NKL5-<>BAIEB;FHFAETJJFANKSRRGMLHCDEHJTNPZKIKTQ958+-. )&$25=@B=:;9/2<409,6AEDA>4.%&(*9CJKMG:20/4EHHE=IGFCNF89*#(6;55893054)-'"$  "   $!    + +  + +   !" /#""!#!*'"#"#%&$$','*,"$+2 ##!#!$$"!$# (,.-+)*0)%5DQbntaK1*,7O`b^TY^MHPOKB?ANXMI>;ESUZ_mfaZehcZ[knht„Š~pfr„†Š††‡‚‡ˆŠˆ~„ˆŒ‡‚…‡‰‹z~Ž‡€}|~‡‹…Š‹ŒŽŒŽŒ’Œ„‡…†Š‡––’‹‰ˆ}€ˆ‡€„‡‚‚|€~ƒ„vs{~†‹„‚‚€{q€‚ƒ|€ƒ}|||wpehnvvxopjgeWBHS[^YJF1,:5Jis{‚„‚oEOjhxŠŒ„€„‚wsvxvtpotqsimmifkmljQ<426?>\ipspyb5  +  +)&'##"& ! "#$(-0&'&! !%# "'$#%'%$!  $+(%! #(-.,4;:=D>?I@>>=:8AGJKXRFGIIIVRNH?><@:/5HCAFORRW_]RMF06EPW\VZc]]OGJJ7+(2HT`_ac^VJ>'';?Q_]JAB1,88A?,?HQYZNLD=4/)%/*6@LT[XUf`bfadjgeeb]aZ[\_^^ejbYRLPPVOHLG>G>>50325-0& ! $$'G/!"&&$!!$%-&#&#$./++)*)&6-'/69015><:9CDHE?LLOJMHPUOJSTJIOLPMUURLSRNMOEA6<;11*&# 308ACE=;;69577/6456>E;:0""$*7DFJSE891,8@KKEGAICCLH=1.'",168?:043.)(&%#!&$'#" & + +  $ "   +" %$#" $""!&&'(!!&'%&! #"!%+-0%#"(*.'$%$*&#!&( &%(.1*,.2)'!$+QclzmR?-&-AYia^`\NHNOJEBLRGGN;>JTVGTimhdajnf]_fpvˆ‰‰‰€lix„‰‡…ˆŠˆ‚€ƒ‰‡‰ƒˆ‰‰Œ„|‹‘…„‹‡ˆ‹…„‚‰‹Š‹Ž‰Š“†ƒ††Š‹‘“ŽŠ…‰ŒŠ…„…‚ƒy‚„„…„|‚„…‡ƒ~~€soƒˆ€€‡‡|z{{wrkggkx|xrsi^`UEIYVXQE8106=Vm{z‚‰v_H^ll…ŽŠ‰€z|}xxtywwspifefhlsmegF66753HiotpnbF"    +  +  + &+$"  $"$'/&%($ $ -"$'%&$#"  "/)!%'$)',4=<@@@LC=<:8@EDADINJFHFJX\MJPUOIIINDCJM@>GEFKEDPG@>>CABH@=ACCIJ??;B?=9?35:CC>@>BORK<37.4-1>R^ac_WMRE($.8NWQNK;,(6:>?:FTKXUSMF86(7+7/-:FJ\cdj]adbidgjgejh`_e[ZZ`VV^dWN?8?>CA3:4090*("&"  #!"($ % ! %%!,! $# "&-10.;98<;@IIEF?JHHGFLFHJLMIPWIJRTTKHPQCMHE@31*$('##..5@E<@D?57/0/%,7<;C@9. *=FBNQ>71029ALJLKECDKBGDDIG<756=CIA>EAIMH@F@9567=AHA7?AKLOJ@DJHKNVTXZTPTMV^_\[acj^Z_fk_ccbh_`ccb[X;*+.7:>><'5@0"$#&))     + +   (+12//.,+%4.(')"*,/##/-121,+/,0*/.-'+0)(0,+!,-,#(,*')$'$((#,&( "*!)%&      +  + (/;A7630 +*54-+% "" #)     +  $# 0$&3;@5&!$1BBHWW[^[]^G85@TZ]`fdead[LF@;4+8S_\``YSSM2'5E\WRXL85953;@?E@RYWPLF6))+789CNMRhidfef`Zdd^bfm^^iZV_XVMRNMJ@BB2R60-,)# !!!"#&"!## #)"&(/-2><479BABD65221**77DFA10(+DKORUB=8726DJOMQXCGIG<;50,02=?>?:59/4%&#&'#    + +  + !"#! # +  +!" ##"#""&%#!"#&&"')#'#+&")*'!#"%%'*%(*'#)",,,(%%"&*0,2.&$+!!(Lj`\\L3&)/4JVW\gb[TONGI@;/..6AWflwxq_.  +    + +(#!"$!#! '.1)&"#   #$ ! )" ## '*.,.# $)0/15A9@B@A>A@=AC@N@BUTROD>CGROWVMKGE?GQPEHPRPLLD?BJBB?=<@AHAF?B?@>>49??=>ABC@@@:8>?EAGKP_`]X[QNa][ZQSW\TNY\`XO^jtmb^`f^XNRaXA)%8;;=@<.*95#2$%)$   +    +  /2.(+*23/(*1-'& ")4-%,.0*''.0*+.&34).)2!)2-*,1%'+))--+)+%" %,%"!& $())$  + +    ##/4<7<71+%+3/-" $  +"    '#&'- 1AC3*  #<>MULYV[]QHB@CK[^ccfdf`XOLD820<^^]\YaV\VE;X^VOC9.29A=;BJOSWWK<2../*07QUS^dhjimdfbeffi\bdegeXYVNRMC6><<<7/*#*&$)# #&" $#)# #%-1(-+782<=HGFKJAGMUPPQTXMR_OWLOJKNF<836/'$#!#99;=>@@9931+/'4=<=?@4* ,=GLJEG?7.0;@KKFQSRTMDA?5)03?D>8=74459+"!!('*  +    !   + "$% "'"'%%!!%$#$" $("-$!%'&&%' !-&%&"%2%%*!-,$%%*4.&)/5&&&-$!%&EZNIUQB+"*(8JN^eZSRLMDSK>HVQTJHP[RVgksxia\`\VWXMJg|‰ˆxdd|ƒ‡Ž‹|quƒ‰‰‰ŒŒ‰†ˆ‡Ž“‡s~„‡’’’•‰ŠŒŠ’…‡‡ˆŠ““’’Ž‡…‡†y€††ˆ‡‡†ˆ…‚}||‡†…€„„…‚†z~‹Š~~„‚zumprktupwusjhjf]Z[\XMF?468?\rrkhyr`O]klˆ“Š…‡ˆ‹zmv~€refnk^cbhqjik^A2--9E@@;FHIJ><>;<77CC@IBGB@=CICH<>JUYYUTPHYZ]^\YRXQIQT[YQ`inh]Za[U\IKKK0!-%3)"   + +    $*225/(/-1++$&)$#*"('0*'+2,%+2)+.-'7.2+',-'.%20,%&$"(.+%#(&!%#'#$!'-)(   + +    +   "$!"(<=527/34$(% + ! +-+     +-(  ,1+9;:/ + + 1=L\QRT\^YIC;@JSY`j\^b^NPKA<536J][a]`UXN[SSN:93=6>G?EHS\^QN>.2-&7FCJILMR[W[ZN^VOOOILGBGCK>82#()#%16?=A;551,0-038BE?=631:?JDEB<7728;DIHPWRQNHG7.+/7>E@?<52761" $+&"       "  +($!!'! &")%$# #!%% %%$!"!$"%($&"#)'&%)+00&"')-3'")-+)-,1)%$ !1@JIQ]Q2(+#/BHX\QS^]__d]V[MJ>BKSJNZppqws_QS^YVMJYtv‚Œubcoy‡Žˆˆsx‚‰‡‹ŒŽ‰…ƒˆ…ƒ‡Œ’}‰Œ˜•–”””Ž‹Ž‘‘ˆ†„ŠŒ‹““’“‘Ž”ŒŠˆ……ƒ…†Šƒ}s}‚x…†ƒ€‹„„‚„ƒ€†„ƒ‚yw~…‚{wtphmss|}zpcghcXW]WRFA2::6Edvyinvo`Wmpy‘‹|€uƒ‡sw{vrb]jqsmhgnklibT>3016?Uefr|xW3 +  + + +   ,55)%$!$5,1.!!#&#%#!?D1#,!&2,+,/23645;@>51Ebad^^[Xb\O;818D@=GFPb]ZSF97)"22=NUUWimdceibkfc_]`c_fb`UQKEJF<932(#  "!"!!!# $" ##'%,!$,,)62<@@E=KGPJJMPOSVNXWJNHRNIMJB744*'"!',5=9E;8747014;48<>LjqomwxpS]op‚Š„€€†xqrgkhjogiodinmmedX@B=:=EGE=:@?>B>>C>>EKF?D;>?GD@@=>GBEFHKHWRLKWZ[LX\MP^XUZ\ih_a_OSNX]Q/#*<@CAAGJWYXXNC6-146>HN]emgbhimejkYfda`^Z`]OYMCA:42//*%"##$  2!%!  &,,557<:>:5/6ACE>>:8364"  +))"$'""$%   +       + + +!%$"& #"#''!#$&((""$!#'%$!!"$&%%&(**'#!"%%*()('!#('"+/+'*,*(*-&%!(@LR`WH7,%!+>P]\]a\^XKU\\_RLMDJ?A68?=Rmpjrwp[M`nrƒ„…‚€vquumppqppzrmdlkngb`K-049;Peimvo\=>8E97?8=@?GUUUWVVQ@NNDEYXON[kYP]ec^]b_E(&68=@C>0:KI3#*+#  +   +    + +   "88253/0(3/112.,'&-,/1.0-,(),.0*,/.*(0-*+)*/-,#*+)#%!**$"#$ &')!'!!$$#    "&)2,($%% 139<48;%   ".%+(.2;78+% #$( '+  /A:+   +$,BOW_a\Q[eWZG4>PdebgfedbWZMI>0,>VdURQJ9-/5<8OKX_^^O64..665-.2/6785$ +  "! )! + +  "   +   (A  "$$% !"%$$ "##+##!#( !#"$ !"#)$')()& ""!$'%!&#!*)'&+-)+,.2,#'-E\icUA?2(&<7@A:2>@<=?BDBP`^KHLNJKPLMS^dUFQ^i`d_T0&;>@;86 @PA)%!  +  +   + + +  !(<636;84$33(*)'$%")(.*)00,(/,--!-**,.1*&#).'&,&+)#""()+&""&#&+# #"$  + +   +     +!*-01)$!#+4997783!   *4-1!$ !!/9>45=,!  !$!!%#/:B<% + "@/)05??NNca_lb`cknje[_^be[]WT@@?:94 #%$$  #!!%# #"!$ %!*!&#!"2)##$+"""&! !!"!!"   &!,010?DEMGIMHCGMONENUPKFMCC>3. #'1:B@B247>2'-3;:;;8.(#,8BNSNLQQKOJA74.76BK;EC@@785?VhjmhX`jj\\l†‡…‰Œyhcgv„ƒ…‡‹ˆŠŠ‰„‚„†‰’Œ‚x„’•”’Œ‹ˆ’“‘—Ž‘ˆ‰…|zŠ‰ŒŒŒˆŒ‹‡„ˆ†}~ƒˆ‹‰‚€yvptƒ‚{qx„€{xz‚zwttwqhkipswprplnpldZX[\WPD=:88=JafmqfcMA[mu…‰ˆ‡‡Š€w{trtjmjkrqkijnfgdcK6+(26Rdgfpp_>   +   + *0-# %#&.01/'&#!  "#&+"! (085'&#&).0/.219>4;FEJJIMMBOYXUKQVNQSMNP[[HFVQHBDMMFEPKMDFSSEB@FB:CDEEGEGN[E:9@>>?@=BF@<;FA9CI<<@<@>:??IOJIIHMHNYYTUa_`URSc_[\F'#+?=;@;*.;@3     +   +  + +  +1:8//8001.23+(*! &/$)',((/20.-1&*/*3,-*/2(+*&,*))!$(&&#&-"!!#! #&" &   + +    &(*//'"&"#%.>756.1+  +#(,08*!% #,.7<<:=/, $   .DF@%  + 3Q^U\dcig^WK;=HQZjgedhdb\XQD6,9R\T:2=D?JQOORFEB>>:,2+&&$0!!(!8.7@DIAGBINKMGRZRMUNNKNC8462+&+52;=@<:30214150340&97>MRUTUTRYR>8714:ATFFIDA?B9-%!  &#  "  ! +    "% %!&1$&#"#'#"$"##$*%&"#$#"# -%'%!###(!%!"$-0(,%'/00)$=ACKW^QA;:I_hlpsmaGMou|Š‘Šˆ‡…‚‚yttsxwvnoomlsheicZC/*25B^oqkmn^6     +    + + %-)""#""&0)-0'$##  "#"+31-# +:;2/#%**#/638?;?C9=KHJGDOMNUWYUMQSQHDFLQQHFMOLHGPWIHMJHECIOQI>LMEF@?JGA;7/2!"(#%!#$! ! %-,..?DCM]RWallnrkildkenhdhlgjrokx|upu{ƒ‰Ž‘Ž’Ž‡tkcWNB641 ""#  1 cI ,2;>>>CGDDGTTQLTKLIIFGFK>37,#(*47BA:5.6*0*$+44,:10-1;DOJGD9;?98)%'& " *  %%"""  $ )!$&'0(#()" $$!#!!!'$&')"&''$ ,$$&%!%&$'!&"'&))*)$(--&%8>E_sol]7+#=[hd`cVH;GNSOGA<2<<6@KMGS`gpnahpma{ž………†tjdk„ˆ…†„„‚„Ž‘ŽŒŠŒŽŒ‘‘Œ’—‘•”–ŒŽ‘Ž‘ŒŽ‹ŽŽˆ}„‹…€tm€‚‚…ƒ}…‰w~sv|{s{}„}~zut{}}nrsvwqiloqq|rk`eg][TRXNJM@12<9IbmkcbaTGdwo•‘‡„‹…Œ‡…{rsooolnggrwjnh[M9-345UlmeafhX' +  + +  + +  + "36*.407%'( !!!')(T'Q -51/'!/-(#45:89FG:9DKPJ=LNMIUOTUUUNJJIJKIHKKLCIC@OLDEFEEAHHJIJJJLFEHLFC:?EJD=<@DAA=@GFC98=KJIF=GJMGCDGOLKIMGIHDGO^dejji\G>>?*,2A>636>1 8KJ&#  A + + +  %    +251324072+.71)"!'+'-*+0,.+*-52:0-0+*)1,-4-,++4-)/,&!&(&($*'$ " $&##        /1-'!% *%15?340.' "6874&)"68=<<54',#.-"8CB7&$  !+:>/$*%$ 4?Nacegbb\bS=APXW`qfkhdc^YYJP?=OF???=FPbG:3#(;48I\djgiabiqmge`cTXPSN>9954*%) !%"("!! "$'-59>=NVTP\jckoytsnt‚vrtmoornxtpouuuny„‰„‚Ž”™™—¦¤©¥¦© ”Œ…„…mb[FE<4=71&.+"##%&42;33BHFMMMILNHHLQKLGPHE3/'&%3::;0.++&,*'06;AMOQYQMOGE=4397?LG?FA?GE80'/*''# $     %!# + )("  " ;   !! %( !%$ !!!!$&"*+ (!##%"&!%& !&"$)%! )&+*''.,((+()2#&9E]knnaL6(*.J`abTPRLVLEHBIC;@;CETTEL_jwo`[mxklŽ{tyƒ‰…|uroz‡‚‚„€†}†‘’“ŒŽŽ’’’ŒŒ‘Ž’“••—”’’Š‡ŽŽ‡Š’”‘‰ˆŒƒ„…ƒ‚‚xy‚~‚~€‚†{w…ˆ„}€‚~v|~rx}xuuqolhropwvfbcb\`WXXGEJN519:9KkkhbbaJImszŒ‹Œ‹‰Š‹ˆŒ~wxsjnnjbmjqlgh_WD5336;\h_deagF        + + //.#  # %31*+,,#( %$*+-"-.,)#4%11*) )1*#*6:5<@A>>EGFM?BMJJKOOSXMGJPSKBGALRKA=AEG>FKI?:==CF@67<@:B@LOTQOKRPOLQWMONQNJP^cef\UMG01 D3;@8;64%!AL1#  % + +     !5662:./945+1.%!(%*.*/.1.'*)+3586.-0+/332.3-*,)#0.!$$$""&("(! #  +  +   +   +  + &1/4'&*+'0582==0   .:;><-)!*9@HRLPMJPED:37=AGGGMF@>FB60),*)-*"  + #) !" + +"$2%* %3$&#  ! +. +  "!"!!%!! # !!$% ",$&%#)'($""(,%$ "+&*'"%%-+)#+(),2+-&'&2BYdacdK4))>WaVPV^YYNYTNRABFDCAFOJIQhtuh]mqh`[Wfx†|†phlq|‰…‚€ŒŒ‘•’‘”’’••—‘–’Ž‘••’˜•’ŠŽ‹‰Œ‹‹~‡‹‘‡ŠŒ‰~€Œ…‹‚|‚‚{€t|~„‡‚~uy~}t|yrw{vjkphgjqpsxpacf\\URVK^^emsk[E\sq‡‰Š‹‹‡……‰„vspionegmsmhhcd]LA206/B]dhlmrW, '  + + + + + + +  ('$"$$ +51630% #&$&&+*'$%)$#(41,#)*.$"+78:??:72=IF@IGLR\a^TS\UUSRLG?8TUFBDJGIE??A<=><:CIMI?FVXFKEBP[XTUVMJIXfc[TSQS?0&/??/+.'!,A@"++     + + +   ,6;<472032420)!#$,0'*4,$02.1&(1.50,014/8(,05*-1%'/.'"##!$"&&"&$!"&#    + +   '3//(,###((146;.  + %47;;<80&4%59?E@:94 !%0(5B:/) + + +6GEJKDA>/.+'6BO[chbc[ce\K?DO[cdclhddfldhliRHGMSXMF5.'/;@Qcecldfhikeif^_NYSPKA@7*-(",+""$# !! 2 "$'&%!!&0.@;FJORKPIMOPRQOEKGCJ-+*"(&1:476,##*.@GGVQQKLJKGF@1:79HJGDEHBDC4.3.0320'" ' #   ",*("&!")'#      +  " "'#"#!"!!(*(#$$-+!!#$%"! "!($.&#+'3(" &$'728/**#CP`mlX8)(1OUPUY`abYWVVMBJ=HEH]puogfekg]Vcuƒ„…†ohce…‰Š…‚…‰‰‘“’“–’’“–—™›—Ž‘“ŽŒ’—™’ŽŽŒŽŒŠŠƒ…‡‹‘‡‰‘Š‡„‚Š…Š…‡…}v|swzx}srxv}ttvxpphdedcjmsrnhcc^WJPVD@BD@KHKJS\^[Za[WUMHE68B;69>7:88@HDHGOMA<:@?>2. +0'5;72   + 65177161)%  ! #$  &,((! "##!     +   ###!" %$&"&)&%! ##$ $%&+&$!$+!'%$( "#$$,($+'#&((.2/,0-) @OboiU;*,>DNOW\c^RRMFC;;6@9>=F??FWeroi\bmh\[bs…ŠŒ†txdg|ŠŠ‰Šˆ…‹‘‘”••’‘“•—‘”•š’”–˜“’ŠŒ‹‰‹ˆ†}utzŠ†Œ‹‹ˆ‡‡‚„ŠŠˆ‚€„€€wx|vv~tvxr{‚zrwyphdff`chhqoigjfa[UYNF?>@;/720M`hjukZHPchn„Œ…}}snqtzqnoiijhmghkgWE5/)/5OhigvkV2 + + + +  +  $($%" #5=/-&(($!% $'!"#" #'$$'('.5,$"%4/(38=?AOF;FNBKLIJNLLT^]_^XTHKHH@CLOGIJLKF?;75>7:A>:B<@C=?:>90%)"3=>@@@C2  +&"!% !1?71 + ">N_dfd`hlofnogoib_SE8$&19N\ekmghgijkjf^`a]OEF692&!"! ##("" ##%+$&!&'*/9>FYZ]gopoqkpgmnuupnqzz|w|y‚tv|t{trwutwzwrszyv{rpwx‰„z‡ˆ„y|Š“˜›Ÿ¨­§°²±²±©œš’˜–”ˆvsvvonƒynrpm`mjiggecTsiKIIA@7+( !! $+2.6?<=?EJDJBIINMQKJIDI:;2$'*41194?NIUMGLQSNLKL;0;C?BKGGGAHEA71646:9+&'")%  !#""$ + +5.%),#&!         + +  !'"&"%% %0!$(.#()%'+"&#!%)(%'( $%-/'$,%.&#'0(&.35.7DQdiYH3*%,=?=4/56:QcbhkbMDScfzŒ’‰zsqw‚usrkgllqhhilaQA7..+6\h]ckaU+  +      +  )),%#!!,8=1-&(('*-"##!"$ %("#%3$!&(/4""00,4?:BFPO>?GIOV_ZULNZ\YY\]YNFEUXQPPUQSNCFEB>4;>;<=?=<>@=@BA4/4:@FB>AFC@D@FIA9;<@302;ELKJE:.,$(4EZ\`fgeed`L=W`fkjhkjbfeic^]WLEJ653%'*(') " &"(""$#&!!&'+(/>HVbhklnsloqqqovrtz~z{wx}†€…‚zz|z}v~xrz{r~~tuzuyy{‚yv‚‡‰ŠŒ˜››Ÿ¤¬¯°²±´­ªžœš˜™š—”‡vruvrwwqplpplpnnjkbdfb_e\URLKD;1"#!$ +!%$/305@>GDDOGGNLQQJLKGA51+$+24@KMKHPJPMTLK?9529AKFFDEIMG=<443GHGGFDEOVc`[XQY]WZRT]WVTXZ\TSQNUSH@CDKC<=FB9A>8@CHDEH>=BGAD=>ABBGLFIFB;839DHGHC:A553)"$ /;:GEB+/"(,  + 7=;8+  +AJ70%*,:JOKOJG0*%)4G[Y\fdh`\^P9:JN_ghjfqkfefcWC-$,4212BEGIGDIFEA<528<661/.-*'.&$ $ %#%  ".3(&+)/') !     +  +!! $#(#,'!((,!&' ('(((.!(&*''$&&*,/0($&(#"&%+1*+&*73,*#8LS^gl\E8(.IY\Y\QOFJORQTNLLSGHGMBJKHWmoj\`kfc_n{~…†€tzsfv‘•“–‘”‘“•“‘•”‘‘’Ž’”˜œŒ‹ˆ‘ŽŽˆ„‡ŽŠ‡†ŒŽ~„ƒ‰‹Œ‡|vsq€‚‚vv|tryxvzxsn{su‚{wz{pqlmhab]aaahfcXW^Y`ZJE=BAC84;843LTVbvyyTSpks…‰ŠŠ€~€{x}xolionrphcilkmg]NC4///@[_acnpjC    + +     +"(!#'463'&$! " &,$%!"' +60-,/,+2@6BJMIK??EGKS`^VUWSLXT^_Wab[RNOMCMSH@@GITL7:@>8B=>GBIJB<6=JHHE:=CKQNMNH@027GJKFFJENXKGMG9BHNVXTSKCOXULIACLI2$21!#,":M>*+ +         + 0441481.0*++.'!1'!323>),5'))521*.17821.-4*)*,.,!2+#&#$(($'%%"% +      "3<1.($$! %1" 2:418:;4:61"% .?;>DB71#$#*#:@=:' + 7@4&&$,,3BHKJDK8),,/8Y^hcgfkbdZ?5CSaejhklnaVTI3&'.AHZbnmjkhimfiie_eRB@340-)%%(&)!"%#!$##('($''-68IOcgmwv|rqo|{txv‚}‚~‚u}„}‡ƒƒƒŒ…ˆ‡‚Œ‡ƒ…€‚‚{x|ƒ††€‚ƒz~}ƒ„ƒ€Œ˜‘˜Ÿ”‹‘•š¢ ©ª¬¬²´²¯ª¤¢ ›Ÿ¡¡Ÿ ‘‰€‚‚zxrxystyvsqtjrnirqqlomkeegj_bhfZOLC7(%""$"!('37DKHKGDFJMMJTSQHC50)' 0@?GWTLXJDD@8/59=DIDHFHE;GJYOSXTVLSTX\[]`[SSPM>KPE@AEGVPE:9>>HC>CIMFHUJ?:7@38@;>F730$! .BIA?=69-+/ ! /FD<( + + "+(&  +  + +  .- %"+-.**$ &,*",>A;*%34*+179;;??>ACKKEJGJWVZYNSSMWWYW[UPNFCWQH>>=CHIF>??@BHM?3>@77BDF?HNG=>B>'"+37<=??A>:40%%%8FKEE520#  -B@5%# $:E>'(16/6FPZRN:%'..6PWebZdimb_I?>C\be]WTE:(%+,7Lehgdfojfhpa[_XIIG;1,0"%% ###%0+/&1-#$+"*-/FN]qt{xw}y~r€ƒ‡‹‚~‰ˆ…„}……Œ„†ƒˆ‰‰ƒ…Žˆ„‹ˆ‡‡††‡‰Š…†…|…€„‡‡„Šˆ‚Œ‰‡‹‡‰‰‹’‘–œ¡˜Œ~ibZuŒ¤¬­´·¶°®©§§£ž žŸžœ¤š’‰‚€z~|{ƒuu{uzutrmlvnuomozxoknqhhmjlic]ULD5,""" $ *06;:@MLHHNKPKKRIELB=/&!%+1?GDDhM344/<@CLJLIBQG9146?AD?/,&("$!'& #%  +015+$$/1-./')%&      +  !"  $"!'$!' )" ( &'%#$%' $%*' %,(,.%-++&+" DVetsg]P6"#0AR```Q3><329<3;6;Rht~ŒVGejqŒƒƒtpvuyvrm`bkjabb^[_cdbW9,+0,:SQ[bfbM," + + + %(!!!"'03,(+! ""! $!!!%%+' 8@=.,!(881+97==;?A>;E^ZXSNZY]YOQOKKUVSRMHNOHMQROK=?NQOJHHIBEC>9=?>@FDDALLGEAACEBUXMKJIDFVPHGFNONNE@MYSTZd^WKRe\^[XZ>(''.1+!"#&CYO-$+!  +    +   .<49=6<895;-5/.)$262045-,4/373.103,.67233-/21++(171&/&#!'% !& '%"-)(    +  + " +   & +"1=;31* -AEB52-3;32$!!".=J@B87-%;BC;( +  JQ]JD9-*$!!6MQerlmkjjgiffbQQRF;4<+%**( %,*-+/2/'*'"(/8AEJIQNKIOOMNJL:1& $!-/60‡¼/152=EDH935,(!&"$& +  %(## *.'%(29-'/2&##      +    ""$"&$" -#%!"%&'$%% # "#&$!/+%# '&"-'*/)'*16+**$!+KaflkdO7%'=J[`g^LGSQ[TFFA5;>8Ecs€Œ|QVfkw‡…}zpotxpopijoefncfdjpdYL3*:4/DZ`_daM;.#.#(" + +   + #%$$!##.70*-,"!&'&&#"$$*%&#+"  +"15:*&!(:B@-137=@FC?8=AFFCA7=@D>HMB>77,,-! 7@FHH;4+$8HI9   *=B3$,#-4A9.,EU[__L:'/9>PXgjkilmqgT??GYT<(& (3BRgqmuqtptionf\QKCB:7*/,,!&))()500273+%108R_ir~}…}€†Š‚{‡ˆŠŽ‰‹ŠŠŠ‹ŠˆŒŒ‹ˆ‰‰‘’”Œ‰ŽŠŒŠ‰ˆŠ‹ˆ‡‹‹‡ˆŒ‰‰ŒŽˆŒŽ‹‡‘”“™›–™–œ˜‘Žv_]]p‘ª«³³µ°¯­¨§§¤«£¢©«¬¬¦ ¤¦œ‡†…|uuqnotnpookrppwwyqrlreilmsmnnggjffec]D<6)% #"# %1435EJKPKOONWLKPZNH;-/&") E)09;=HPHGKFGDJ=<=C?EKG?,-."%'  + +"'*(#!'/3-%".9524/.)(%! + +  + +  +  +  ""!)!!!#'*#$$!"$%!## "!$'('*#!!'#$&)+..2%&(6(*)/)#3=UfjibH0)#/DWejeRYU[]L@FIA723HQRLPXW]gtaclkbYbyˆ„†ŽŠŠƒŒ‹–”“™”–š››“œšš™‘”–•“Ž”Œˆ‹ŒŠ‚~z}‚‡}snmtƒ†}xƒutuqtxksrvq‚vrpr|y„ƒ†|oo{ynynef^cnfcabf_a\\UPMMOPN@A;67;?Mhrz…†nQhpv‹Š„y~‚wtrqnhieblhlprnjrsri]E86-5;Qaxjd`]H +) $,)#! +  + + +   + + $#"!%0<62&%$&1 " $.1-2-% 18,,'%17A:,06@BIF<>=EHNOXPSJ@?KVXNLKMVJONONROPKFACF?GIKAF;9;?JA9:>833".H?4&  2CC&$ !'8>B1.'7KQXYN8-117FMhgikogidMC;@GD-#8Neglonpksgqj]d\E=60+++&%  "&/.'/-0//111DWbt~xu€}„„{ƒˆ‰ƒŠ‰ˆ‰‹Ž‰‹†‰‹‘‰ŽŽ‹‡ˆ‰Š‰ˆŒ‹„ŠˆŠ‹‡‰‡ˆŠ……ˆ…ŒŠŒŽ‰˜Ÿª§¥«¦¨§£ŸŸ–x_v–ª¬¶·¶®¬©¦¦¥¤¥¤¦§¯°«¨£§ªªŸ˜‡€€„~wzzwvsspsvqhirxlrpnqqhppnruoopvsgmjii`c\I;*%#$ %!& !%,318=CNPOUKIQMVVSJ:;-'!#2?HBJQOODEKGHA?FAX`mmX:*%%;KXai]RVKHJSOE=3.8MC710;XmwŒ†zcOkr~„‚€‚}x{ske``^bljkqkgakrrkYD1.)6>]hf`beP0! + + +  +  )(! !%8<1,&#$$)'"!#%(*2& %864.$!/03(.6?CB?EDCHCHLSSNJJNNNPPQJ@B>DHNHNQUQNMOKBAJHBFE:84=DBACA>F=:>?>=?<:C94=77>9AGG==BBQRIN]WMFGKKQ`WMR[^PL,$(14* 0EY=#%'  +     + +  +   -5+>?:>:820/.0-(-42+)04055)$/+/-+.(**(/2-(.-/..(!'1(+.%!$%#$&+(&'    + +   +!     & +./" (>DFA=F2(4:?=@@@C>>440#*7C>2)  +><6(  +.BF/)1@HJ?:81ELNXWD4*/2@OcdikpbhfH3%%62"/DYlsirhgruji_dXLD310*%#(*&$,+4-'+-)19IUaksz}|zˆ„…„†Š†‡ˆˆ‰’ˆ”“Œ†‹“‰†ŠŒŠ‰„ˆŒ’‰Ž‹ŒŽŽ‡‚Œ‹Œ‹Šˆ•‘‰Ž‘¦­«§¬§£««¢¨§£{{™¨°·±µ¯Ÿ¢¤£¢¢¦¨ªª¬¯««­©¥”“‡„‚†||y~xnxwxsqwpqrrsursiqrrsrsvsppprmimpjfi\\NH<(!"% " "$$A4>EDPOJHUVOTXNMGB1%%5688ATOLFIDA?@C764>DIH[crqiiji]V[m|€„ƒ†}a`—”’‘˜–“Ž”•Ž““†††…‚ƒ‚€…ˆ~}x{€‚ƒ…ƒ~€‚|zyxnu€€uxqgimpto|{rrnnsskbYdcbd_ie]^PMZXY`e`TTRKDCA>@A79:;18-2@bv‰„ƒ|qZUlw†Š†vzxsuj^X]h_ddfj_`^hoh]V<10/3@`aU_fhK"  +  + + !)'!,?=0/##'$ !$! ##'*""':0,)(,4'+07>GFA>EMLJQ`UTPRSSSULOYQOMHGUVPXaga_QFGNL@BCBA@?@==BCBBNLF<3/;>ADDBC>?Q_MPPOTRKVTMUZIMIHHC" */3>7?@71-+1$*89215116,'+1-/3.0('/3-0.*2.,)20%%&%0*+'# ) $*$#   +  +  + + + +    &) +",#4=KD?DJ8!$5@?DYemklkggggbZSFE>/+'" &%#(,*!*?'+''2;J[fvu}€€ƒ†…ˆŒ”“‘Œ‹‘Ž’‘“‘–’’ŒŠŽ‡‡‡Ž‰ŽŽ‰“Ž‡„”’Š“’Œ‹‹‹Š‹Ž““‘“˜£©±±¶µ´¬««ª«¦œ—®¶´ª¦¦¡ ˜”•“›˜¡¦Ÿ£¦¨¨ª¤œŽˆŒˆ}v€‡„ˆwwx{}ƒ~xxwzstrsmpnrspqqtqrnmolnttckngohd^UO=(,"%#!&( !%2,77DLELTWRLTHLMPG5#"/142=KTJIKF?B;FDGC=B>73-*)1&%$ + $'"*.-* $(1032/#--!!   + +      $%'%! )"(##(!+ #) ,& %  !*%$!&)"#))% &%*()'+)+/+*),'!'7P_glhY8'""1DSebWNLa_LA?ACEB>?9KB@FELRPURMTSWSUYSUZe]ISWFM]e_aXFFLF?DB=4@@C:3@?=GEDDH=FJDB@A?B@104?9ABAJHFPWLIKHNWJMY]WUMRM@;.(=E3(!1SO0!"       + "2A>::?<98@:552065651::^|€†€}w\Naeu‰‡ˆ†xrrplpuurilnkjkecqqgX;/02179LglibC$  +   +  #+(#$)108- "#""# # )#&"#-60,(#)2.''-2:==COG9488509>?>J>:HD;9..3834AH9/4:BJKICHLJGSZN@O\WQK@EC=& ,AB7*2B@% "  +     +  % 0=@79:;?=3:1;4,6299*27655651+11,;/,30565+52.36,0+/#%+-&'"*//$"("! + + +  + # +      +   +  !":9IFECHH:,#)4:?AGEF?G<114" $." #,D=1 +  0;.  #$&01<5)-...*AKKMOY<' +9C_jiee]D$!/RMD9Janmnome^ZD=@'*$$)#)&(*-2/"./02Xjh^aH$  + (7:'&$106.#$ !*"#" .-.% "24(%.0.7CMKKOOYY\PPQZWJT[P[]\XRGOWNAC@@HGMF@B?IGJG?8;362@>=;928;=>5(&465ACCFC3)4>>FAHKKAB64$"1/! !4:?%  8<5 ,*.08;CB=,#'-$3?QPXQ?))8@\ijX_J3)AJPD6D[pseebbUXF75'$(*0+%%''---)'1;ADZu{‹ˆ…‡‘Œ“‘“‹–”•™šš•™˜”›ž“’”’’™”“Œ’Ž“‘‘‘ŽŽ‰ŒŒŽ‘’“‘‘Œ‘”’—–›£­®µ¶²«²±ª¯±­²µ¥›š¥¸¶·µ°¨£¡Ÿ˜“Œ‹‰‰˜œ £««¢”‹‹‰‡t}{€‚…r~~}vuyp}xqwuszow{ry~v~y|npx{wvmkmrpqhk`NH9()% (&"#%$!($ (.3DFNKOUXUQOB;@>4" -BGGKOB@88:GAFE:7>6@>76:AI:<66<<4;A73=73>=LFC98IRRLTXW\R[PGDEEJIEHD>2".0/+2$;M7!#"   + +       1I;;:@:297;:20"',9:')64.45703=@9167-+2,0(1-,0&&*-),+#%#1&''%'%&#      +      27:C@DMG@A6%%/IQJJDC32 %#8=<.  3B4 0:@34<=:9)1&'HRXUE8 @TfaTG8')26-)&$ + + '  + ! $("%44287:/+#$""!$"   +      "&$ +'$!")$,#!!($!! ( -(#$$%.',&"+)%&./48*-1*%!(?@Xl~u[:/#*2Abkih`]\PKPMGAFJDB?:>BN]bjvjhqhf]]l~‹Š†‰‚fdjzŠ†…‘’‰ŒŠŠ‡ˆ‡‹Ž‘Œ†~tƒ€vtv}‚|‚x|{yz€~y|qsnkkpvwvsvtjkqtkegeb`__`aZv‚eb\aZHQWJPKW]RIHAA974980+)*117=9?AGB@=6CHBDF?GBA9677><8293530+/57))552<7;81:@1635-5/&00+"*.)*.%(*%"#'("'")-3"     +     + +   + %$.-8ACGIGKE=6&$/7LGRHMGE1! !?9..)  1C?# #"'8?5+*)49;' OPNIB*#+.=Y]L=&)5>FJQEBP`jjjdXVMB<7..',.-(),1&,5.1C/Mcw~~‰‹Š‰‘Œ—™‘’’•–‰“›š›—œ˜›™–Ÿ—›ž›œ™–™œ˜˜–—˜š’”–•š“˜’‘•Š‹‹ˆ„‹ŒŽ”““—•“‘Š‹““”‘‹‹’Ž›¦¨¯°µ³µ®°®¬¬¬®°Ÿž¬¶¾µ²°­©ª¢¡¥¤¤¢—“Œ˜Œ‡‡ˆ‰††~……ƒ‚ƒ{€{„€‚|ƒ„†…~‚€‡x|srrx{x|x|†x~wln}|vxslntkfdXF7*! 2$!"'%.;=QUOZQOB3-,%*!3B?C?>30;D?<>6)%'#%'+*#$ +  +  +  "-3109921.'* $$& !     +  + + +  +   ! &! &"#!$$!&,%#$!&"%(($,*+) !)).((&072+.,*72#*9]sxngP:((F[hjb^\bZ]XFIGQIA=5<:DOQ`iyqegsm]^ev„†ˆ‹‚odhu†‰–‘Žˆ‹†‰‰Œ‰„…vm}‚}ql|‰~|s}€}}ponknfmivvvhsnjspa`^fagbcc\Z`|t^W\UJYRROPGYRPDFA;788?451.734@EX|‚‡v`Nfot„ƒ~||ƒwpnmsollkfbe_^jppni`A340'+LYZ]kvf*  + + +&)%" .630.'("# #$!(!&%((#)'"+6'$+88CNPFJEMZY[`gfebidc]^abldU^[Z\VLSP\PAA<22>DF?588BBJGCFI@CD:GLNKIBDKCKUK=GOO@ABJD=C;6-$(4<5# 'B@#"'  +  + `+  +   +=6<876=@8<233-,,.395.1@7393;?<556.1./2/,5,520)#!**+-&!%%'$()('.-#  +    +  "   +  +    +2"&6:CDCKIGD9- %+3CNRIHKKMI?=9$  +3D=% +  3O<  #%.;;6& %6;4&$DQYB!).=LYL1$#&9Waead`gjfgj_^JN=)%,0(2*#62$&,3,4;>Jarz‹ŒŽ’””™’‘–˜•›—šžŸ›—œ˜›š ››žž—™š™–›Ÿžž””“˜Ž‘—Ž“ŒŠŽŒŽ–•’“‘‘Š’”ŽˆŠ‘œ¤®´²®¶´¯ªª¬¬¬­š›ª·¸µ²µ®­®«§¬¬¯°¬¡”Ž“”‘Œˆ‡ŠˆŠ„ŠŠˆ„~‚‡‡ƒ{}|ƒ€x‰|~ytxzu~}}vƒ‚syv|{~x~wy„‚ƒtsr{ƒvknmobZD7*#%-# $#.:8HHKMIJB2)%$*!'##)4A@5-.297:4*+0 !*2035++$ +   + #%-135722.)*#####"!(  +  +   +   "#$$$"$#$(''0$,&&$$ %& &(,*,&&$) #',+*'/&*-"++)/--%)@_mmqp]J+&;WgffbW[S]^OJMOHE8-4CEHEJ\sueamjd`flr€…‹‚roo–˜““‘Š‹Œ“œ‘‹ˆ‡„€€…|€‚…zt}„tvwt„‚}xnkthorsailxohsjknibemikimgk_\em`]_^LX]KUUNHMLFE??=4266+757<6:EBXq„ƒ€sn\Tjs|†z‚uyxsvwlppmdfdcjmjsrkhdV1.//+BabgoyoD&  14$6,53,(!"!%%#!!#)'(*!#1+'*0;@JUQAABW]Ya_ji`gjlj`gdihSMZYYYXW\Z\OISD>A@=<@>=?DB85735@C>:>@=9CMNMNFDBDSRD?KJIKN@hT]I9>JJRWF7-$!.<:(  AJ/&# +   +  !   + 4A;=9=93=8/--.4$*6/302-986<<:.  +7;62#*)5?6/7,)6.,;UOF! '')9KI:3"*3@PlgccjvljmcgT?GB5"!-.(-6(16!'334FQhhz†ˆ“‘’”š‘–š—˜š™ŸŸ¢œœŸžžž’œ¥¢œ¡žš ¢–Ÿ–—•—‘‘’”‹˜‘‘’ŽŠŒŠŽŠ†‰‰ˆŽŠ‘–—˜””‘™—š¥¬°··¶¾´°±¯±¯²®™±··¶¹´µ³±³³³±­ª­¢›–‡ŽŠŒŽƒŠŽ‰ˆ††ˆˆ~~„†{|ƒ…€|‚€xz‚~uvwsv|~‚u‚|ƒ‚y€ƒ~ˆ~€{ƒ€u|yunnqoooebWI64)'""#!%#!4%99EIMLKA>4133:2)%-24-.&$&6,%,+"*0881! +    ! #('+354;:7-)+ #*')    + + + +  +   $!!*" #(!$$&#$ "+$!&'! #"$#'1 $,-&&,&(&$*((#&#,5&!)=S]fnrl]?2$0R\ciZ\\Xaa^IMQEJ@0>655642/258EECUs†~wqdLZry„~wvwyuzskelbbgeblmopone[G;004;Wdov{uf8 + +   + +  +.9+%!",:;1' !!# % ,4""# ',"#%04*+178EY^LF>CLY][bicadbYZ`dhjW=HSYZORKHS\XZTNJH?::98?GH;8>20?@1/440//572/.-02)*(-('#*()!%*%**-("    +     +      "!   !4FLGFGSF.(7;LMWUNSWNUION7'0@;' 1@+%'435+(/:B&4'DOI5! %,4AHJ. 0>OXjjmmhiospc[TD*11,)#(#%,'./330-AQfty‹…‹Œ‹“‘’™•”šœ˜Ÿž›œžœ£¡Ÿ ¢Ÿ¢Ÿ›š›¤¡ž¤¢ ž¢Ÿœ–““Ž“‘“šŽŒŽŠ‰ŒŠ‹„‹Œƒ†‰…’•ž ¥¥®±¶¶²°°³µ¸¼¹¹¾ÃÅÉÈÂÄÃÄÃÅ»¥¤µ¾½¸¹¸¾½º·ºº¶²°²¤›Š‡…†…€„ŠŠ†„‡€‚Ž‹„€ˆƒƒŠ€ƒ|}{…{}{v€xƒ}}ƒŽ‰†„„†‚}„Šƒ†„ƒx†|zs|€wurqnoqgd\L=,!!"$""#*0AMLLOMGB>@DD@0"*)%'05#0<7$  (+-(' +  $()028B1-,20$*(%$"   + + +  + + + &!#&)" "$""!% %'(""#% ( ! %&%#.'*++'!'%&$"(/2*)'*33+' -JZcryugP3!+?H`fbid]Z`aWOKFD<43=H@8;ZiaZ\eoriTTiw€‰Œ……vqs‹’‘Œ‹Œ‹‹‘”‘‘‘‘‰Š€zuxyƒ„‚|yƒ}s{{ƒwnqikr{rgkplpqlggikfelonjgiflge^`^TOLS[[YNGH>?=>=6/01(.577DMG_}zlxraNcrw…‡…€}uwoqtnqonehgfgjeknmk`TA85535Rftqqtc."5    + + + + !0)!'6>6.' * !%"'3+$ &1(/32*,:=BIRQH;@O^[[Y``YYXNLT`ec]QR^bb^WMLQ`e\LNLPQND8=@CH@?>7?CC?@?NJD?:AJCEGCIKONXMUW_^a[hYYZY_ZULC1(%&,) "7L<@?;302./01192..*-('+04786:762-.,6<55400,1/,+)'(')"&-*#$#*'#)$   +     !       +#& $AGIEMfpgfrk[Sc|€‰ˆ‹‹‰‚qŽ–”•ŽŽ‹‹Œ’‡Œ‚€~€~~|}†ˆ†~y}yzxutpjvyrmqrgellhkinqgcdtlhc`knfgc^VTWZY`_RJHCEEA69500,.561;KCDbugrƒ{jXfny‡…~‚€}zqompurmkiicffhjlh``ZC7.03B\hepvwQ *A    +   *2'#"!(-1/.)% !#$'./$ +%/""%*96&#,9?AQSIABSZ[\[[WU^[U^TLK]b^YXQWedZX[X`WLLNLUJKBA@FNLLPMHLMJ>?IUQRNWRKKKDLTF=KX]N?K^[X\b`^[MWK/( -3) +?CC==4732/,)1713'--+,>0410+2239@56633071..2.&+5+1./!#%##"(+)         + + +   #   '9JGJLGJC$+?=IJIEMMKRNE/$,>@(  /9,!!% $ .4.'("")>PZB#*1/.HQJ8)#(IRaiiipjcd_e]M;53&&'-**-1(1+.1>N\Yo€†ŒŽˆ“”“‘˜›”—˜¡œ¡Ÿ¤œ¡¥§¤¥¥©ª© ¦©¥¤£¢¥¦§¥¨­ª­ªª«§¬«­±«£™–ŽŽ…„‡ˆƒƒŠ‹Žš§¬ª²´¸ÀÁÃÄÅÊÍÎÑÑÍÉÊËÊÎÐÒÏÒ×ØÝÜÛÜÝÝÜÝÝÔÆÇÎÑÊÇÄÁ¿ÄÉÉÉÈÇÊÉÉǾ¹³®­«¬£ ¡šŽˆ†€†€~…w…‚€€‚}wwˆ…††‹ŒŽƒ~t}ƒ‰‰‰†„ˆ€ˆŠˆ‡ˆ’‰‹Šˆ‚…„{x{„{|w{vurrqmj`PA4&# $!   #&*3?HNMKJMLNLI:5(!+*%&)%!!*-+" **3%&! +%  + $"5-#1/-28-)&&&40&"    +   + $  %% %*")'$!%2"#("$-$$,*#0/,-"*+*/'+/+'*-+(#"@clpe\:(#,7DGOZOF>A>FOPA3/??74879>?77350.5.+27;1%%$*889124+5.36643351+4.36.,*01%*0-!$((!7) +       + +  + +&#!   '=@FLPSM>$##6@MIOOVWMLG7 "::8, + 6E-*.$&')*(-42.! -:MRH+&32HMS@ +,&#6B55?@Kbvmbdpo\Vk{‡„ŠŠqrƒŒ‘Ž”Ž‹„‰‹‚ŠƒŒ…z~|ƒŒ‹…ƒ}}‚…‚}mfkqwtmjgttokijccl`gslijgdbddgekgcb][TX\[^\]USJIB8:?9451/129EGFcp†‡ˆ„}dfmpƒŽŠ‰‚‰‚|zsrurspmmeec]ie^_`[E0-//:\qzxsoQ$"4;I    $(1%"8@232( !# "  04+" %1,&#.2DOXX^YV\VWJhYO`^d^TOTNPbg[T`[IAKRPDJ]d`X^JYNBEKHMMS[MKR[VSOGJOKSa^Y=IOLX^^ZRY]UMXVHBFOOKQF0 %)+):8!$/JN/+"   + ## + + + + '28<78A93990/50,+9;&+#%'2;50;=153*1/5/36/-1)0*-3(,-%*+0%''%#'&    + +     +    + ! + +,.AJJJLSWC:*3;ELRMPUOHA!)@:5  ,TS>"$04HaefljrnmkdbX@?-/'+'$(/5',$3:3B]n‘Ž‘—–’š›—œš˜ £¥§ ¡£ž¢¤¨©ª¬ª¯©¬¬®¦¨¬¬®±¸·¹»»¾ÇÍÒÕÙÝâåèäÙÀž‹‰„ƒŽ‡„‘•ž¥©´¶¾½ÃÆÇÉÍÑÔÔÖØÙØÔÏÊÍÌÒÕÖÙÜÝàßâãáãàÝßââßÓÓÛÝÙÓÍÉÇžÀÉÎÒÕÔÕÍÉÇÆÁÀ¼··®©¥¤ ›š—‹ˆ}Š„€€z{€…Žƒ„ˆ†ŒŒ‹Ž‰Œ‘‡†Œ‹ŽŒ’‰Œ‡”‰ˆ‹ƒŠ‰„†…‚„€‚€|{{zyqlghbOH<2!% "!# /:>AGTQMIJC?B90$&&,($& (5.% #/##'   +   !$4/:?40.3% (-,(&)" +  +  + ! !#$!$&" $"$ !%!%&#%"$%")+'%1-,*+)$($'$(.1/1-15+)'7@ITOE9'++24KjlbYILCIA;C:=@Pkw‡Š†r]fl|‰Š{‡€ƒx||{zsqrpjeb]ehfbdVA301.:gzrjqkG ,3CQ      ''&(%5331!!'!!#$& + &02+!02(%,3?HRY\ZU[^^[_\^^\haYKQYVL\g\Y^_PJHKIPSgaRSWRNRPTZYXXcWNT\TFKULQCNYTOJCYNT]YSDMa]OS^ZME:@HE6 ++0<346&EWG/"   +  + + +!8>?@9?A@=8>:..,0636)2/564--17@<:8*/.78126/9:/)-1*(+,'+*"!"$$##    +  + +    + +  +"#!" + $,17HHGWWQI@, 2;GKBFLLFA23;74 *46,$$./40/651;.6QTB,)+(/CVE2')0Tew~‰’‘““’”’•š—š˜–œŸ ©Ÿ¦§¥¦¢ž¡¨ª§­««®®ª«¯°°³¸ºÀÃÈÎÑÔÛãèéëíïïðîíã¾’€†ƒ†’‰Œ—œ§§°·ºÁÄÅÉÊÎÒÕÙÙÚÚÜÛØÖÕÒÓØÙÙÙÜÞáäãâãäãâÞàáãÝÒÓÞàÝØÑÉǽÆÌÍÑ×ØÙÕÒÏÍÍÊÄÀ½·±¬©¨©¡š’Œˆ|ƒ~{|ƒƒ‰…†‹Œˆ—™””˜—––‘Ž–’˜ŠŒŒŽ„ƒ‡…†ƒ‡ƒ€‚x||xqojide`\M4*##$ '!)'.:AIPSRGMICE>8- !"## )&%+2+) '(+-$   + '-,21/+#"! &''*'.  +  +   + + " +"##$%%#' ",'&"!!*& #$/*+/+-'*,'&&+1,&*+381*,(99R^iS/#$.F]hpbZZVJJFGFH;AHBAFRWakmhgpl\Rjtt„Šˆ|p}†ˆŽŠŠ‘‘’ŒˆŒ€‚‰†‡‰}yur}xxrmjwwovy{wtmcbeebhnna_hccgkdhlhffj_di^URYUXUYSLLQTRF@=<956=@=@6<:Mj{‚‚†~h^_hyŠ†{vvu|rsw{vrnqohigdfadc_RC77300>amkoo`8,;NT        +  #.("!/8/("#!!"!" !) +%5.) 1400*3:>KPQILTWb`^VZ`gjh\T]b]KGTTLXZaYB?JD?MW\T^TVY[cdge^]_QN\X?BO\\K@IMQ`IQVOTROOOcbXTYND=DAEE0%12875'*FUA!     +   + +  (5ABCGB;;7:960.*0*18-23.,7;1711/>95510/69077004.#*1.&((%%#$$%&0,#     " + + +    +#!"""299@JNWWQSPA7%*2;INGCFRA3):C3  + &5%)42-/.6)*("$!CPZF.&-+/@MB0.,1=Scfcjihlab[KG>3(!(&'''&((/7/5Pdx…ŠŽ‰Š••”—“–™š˜ššž £«£¢¥¡£§¥£¥ª¬©©¬°®­­³¹¼¼¿ÅÇÏ×ÞäéìïïññòòññðíâÅ…|‚„Š‰™™£ª¬²¶¾ÁÇÍÍÎÐÖÚÛÜÜÞáàáÙØ×××ÜÛÚÛÜáâãäæãååááâããÞÐÒÛâåÞ×ÑÉÆÈËÇÎÔÙÝÝØ×ÙÔÑÑÌÆÅÀ¾¶´µ±©¥£ž“„ƒ…x€{…„„‹”¢§¬©ª§¢Ÿ¢¡ž ˜›—”š‘’˜–“–”–‘ŽŽŒŠ‡†‹Ž…‡‡‡Š‚€~xurqtpjficTA0% "!$! ##&+18EH]PIPLEE@8' &$%'# !042"%&'!$  + $/'2/0/'&%*-)9+ + +   +   + '"!%&)!"$%%(&+*"(! %."%&"#+##,+.++&&')--..+0202+ !!(8Gbqp`9)$-AGRcfidXPSMMFK@E?DI@CFGBJXnleajudWbm{†††~qs}‡Š†ƒ‘‘Ž”‘“’ŽŒŒ‡ˆ……{xxx{~€uwsrvytvvooujehlmkja]X^cgdgeehefifahed[TQSSS^VR]ZOQMA>D?6=>762:344Ss€„t_RUdt‹ƒ}tmmqjptssytlshgileX\aZNC590.,9\ou{iP) $6GIW  !  + +  +*0$ !#%62(&!"$ )+(05;-28;GD=A>DNQZ__[]cdc]TVaYI<98AS]]TI>HIAM\^chaWZc_cc`^]WRBGTJ:;R]VJDHR`\LQJ?LS\SX^MRQD59B>><-%$*2."&+@E)$+  +       /;?>AC>9?25172.*0594/3-/,674;@4/10,/4468.5+/(-/2)") !%",*"$%)-((  $"    +      #$# *8>;BEPYVWYRL;0)16CJCJKG3 #?@3& $76 -022$*-)*( 3QO>()5/-ENA2%10CWcghimkl^]SJ=3-%)*$'#4(%%09EQm|Ž’‘‰Ž•˜–œš¤ž›š¢£§¦¦¤¥¢¤ ¢©¦£¨«©ª­²°µ¸»ÂÄÊÓÙßçìïïñòñòòóññïîêܺŸ‰‡…ˆ„‰œ¤¬¯·¼¿ÀÃÈÍÒÒÙÙÜÜßâßããâàÜ××ÕÕÜÚÚÜáâãäèæææèäááãâßÓÔÝåæãÜ×ÐÈÉËÌÐÕÚÝÜÛÙÙÙÔÒÑÏËÇÉÿ»½¹°­¬ª£“‘‘Š€~wr€„š³ÈÔÒÌȾ¹±°ª©¨£¢¢ ™ž ™•–—™˜™••Ž†‰ŠˆŒŠ…ˆ‡€‚„n|xuvqkgffXI//*""!" &"%&*5FMJJOMAGGB5!$1+('115 !'+ '$! *'(/+*,' !/-5*+("     +   + +  # +) "!$%$!!%"!&! "##%'$+,%&*%+'*"))*"-5*11123-#!$9@JdpriB5%(-6Ofni]LQOPVT^MGAHG=?A=;K\irmhjpl[_s€…‹‹„oih~~€‰Š’Ž‹ˆ’—““Š†„…osƒƒy{}yuy|zzrzurlltxkigjjogYY`\^]aiedfdhb_ejc__]YWW\^\VVNMQID>?CJQXZeb^XXc^]XZ[L8-59E[TTLLRULKabVde\QW_^_ZVKQSJ=GPHGKIRTJIORQUNI@GOJGSRDELSG>D==5)&*/64&3+! + +     +  + +7;=@9AF=850&3/0./=<825496363::<30506332382068'01*&$'))$"#%%'/)+*     +    +   )" $06"16462-#&("8TV:.1DZ?'(.;J^mkfjhj]c^TC4,'$'#)**-./+0>Ueo}ƒƒˆ“—›”˜›—šœŸ¢£¢¡¦©¢¥§¨¦ ¦¦§ž¤£¤¤°³³·»ÀÇÊÒØßèìïñóñôóñóóñòñîéÝͶ›‹‡ˆ†‹Œ˜ ®®·»ÁÃÉÎÊÍÒÕÙÛÜÞááãáäææãÛÕ×ÙÕÖÖ×Ûâääçèæèçèäâááåà×ÔÞåçãÛ×ÑÍÊÏÓÕØÛÜÜÝÜÛÚØÖØÖÓÎÍÊÆÃÀÀº¶¯­¬¦¥¡žŽ‡‹€|tul~ƒ›¾ÜæçäâÛÓËļ¶¹´¬¯®ª§ šŸ¢¢š˜˜ŸŸ”—’ŽŽŒ‹‹Œ‹†…‡ƒƒy{~zstppllod\SB4+ $ "##)+=AKEKQEEID>5(!""&* **(.53$!'($%    + + +&"*4$),#,3',-%     +     + & '(#$%%'% $# #!!*(#&((-**(#%$#0$+(.5-15/()0-FgjtoS8*!9P`_RIQ[VT[iiYOKFHLCD?7Fbjtxggrpd[jq„…‰{cas‡Š‘”ŽŒ„†‘Œˆ‡ƒ‰ˆ†yy‚}uw‚{|||tyzqglwvpieflmiZZb_VWfeid\_db]]c`a^a_XVSSY[YRWVJH>;<:575.(0,30Nu‡ŠrY^emƒƒzvvtomxvuuhkigngprqrjh]K65,)/HSV +  +  + +  +  +"03,' &37('! " "  ,.10-+4:>>E><>?=1510*.+080=152;703?;9@67606-22,420:81-31(&,"%"+&!$ &%(   +  +    %# #    +&# ),9CE=FQL[UUURMG3))BKBE8!*  + +(F:990!&!,-+2,#! ?WZ=($/09MYL%)/:Shkgojmkf]WL6-0%!!%$().2209N\eotƒ‰ŒŽ”—œ›šš™¡¡ ›£©¦¤¥§ª¤¦¦£¥¦¨¥©¥§¬«±·ÀÄÊÔÜáçìíðòòôòóóôñóòñîèÚʺ¬šˆ‰•˜™¡¬°³¶¿ÂÅÈÌÓÑØÚØÝÝßâââäçæèçâÙÔÓÒÒÓ×ÛÞåçæèèéèçèæäãäæáÒÖáççãÙÔÌÈÈÐÓ×ÚÝßàßÛÝÝÛÚÙ×ÖÔÒÑÍÍÇÄÅÀ½¶²±¬«¤œ”Ž€‚zhyx|Œ¶×åêììëçâØÏȸ´³µ·²©§¦¨Ÿ š™—™’›•Ž‘‰‡{‚}~wvuzwrnsjmfbWF3#"!% !''.:AEIBAEKF?G?*!$,+$#$$&:.,% # +  + +-8(*#$+,-2-6+  + +   +  + + ! !!&#"# &$$&"!%!*% !)&('#'+%,,-*$'&#(-(/614.3'%IidmvgI,%8O\UOR`^TNYd_SVEFNJFA>AOYdwypfktk]ai€€ƒ“{kgr€ŒŒ•Š’ˆ‡‰††ˆŒ€ytzvz~~†xsy|ohcrwjghkirjc[[\]]^ebe_bc[UW^eec`XY]_RU^][T[XKC>E@>=<80,2225Vt‹‘Œm]akxz~~sstpt€~~mknggeilsroohWK=0-2.;DVgqv_$ $:@GGQ   +  +  +*/+) $.73,# &$ %%&-..('(1:A=:BCEEIOSWZV`[^_PEEWNE@=MZQG]hbQKXRYa^`c^TKRccb_Y^]PIMMRI?IOUQRKCEIIVOR_QXM?G\VRGHRB$ &0*"+G>3  +  +   +  ,>?>>8<>>;660-..*393337547558@@9/73..3542-81.+0,+,*//+%#%"!&)-$"+'  +   + + /' %    + +  + *5"! A=9;A9@JOSZgYWKD6!&AF=4(4FG:.  >BA>G;60##'!#,)&(?OX@*&-*>QPF1%6>Sifdmmlhc\VC9(&$$$!&$"!+-/7>Uspwx€Š‘‘“–™œ Ÿ¢¢¡¨¨¡¦§©ª«§¨§§©¨¥¦ ª¬««²Â¼ÆÒÛâêíïññòóóôôôóóóòñíäÖȶ§œ—•Ž“—£¨¯¯¯¶¾ÁÄÈÎÒÔÙÚÛÜàßáåâãåæçéççãàÛÑÍÎÕÛÞãçèççéééèçæããæäàÔØâçæâÚÔËÅÈÑ×ÙÝßããâááàÝÝÝÙÚ××ÖÔÓÎËÌÈÅÃÀºµ¯®¦¦ž’Ž‰ƒ~{yyz‘¥¾ÔæëïðïíèáÖÇ¿¾¿ÄÆÁ»¶´¨«¤Ÿ¡ž”—“’”Ž’‘ŽŽŠˆ…ƒƒ‰‚~|{|oosornnjl_L94# " '# ! &$57B?LLIF=LC=7,$2("" $.6/!  +  + +".3''#,+4//1*      +  +  )"% $$# '+&##&$&% !")$)*#**01/(%/%/(-1110-50&".JMPhwpP1'',>KPadeYONMPMSTJKC>@@IGR^ir|vf`qo_`ks€Š‘|gfmy‡‹’“ŽŽŽ‘’‘Œ‰ƒ~‚„‚‚tnsvy|„ƒ{}yrpjdjwhdhfkjkhddbbc]_`bYafg`^\_hfb`^`cWZdbbbYRIKJMA><>>?-/00/6Znx‚‡‡iTbhywtrtrjnxwvvijlidilekokmfaO5/.,/?SdkmkV 0HID@EHQVXPUVRTYY\UT\\OKTUNDLSXQSYOOPIRRXYRY^RLLQed^QNJTG>=HVaUTRQHDBYgeifZXVV[OCD/')*--& >SK+  + +   +   $6:68D;<;1/>6.*005/9:49184??;1;?>63672.17:.35-*./*0.-,%!! $&'(+./-,   +   + $"$    +#!  3MD>86;9BOWST]TWF4#(16"$6KK;*";DGOJHCC9!+''3(-JSJ3+568EPK1 ,A[fkjegmjhZSE<30''(+&'1+&+*3GXaj‚…ƒ‹‘’˜›—œ   ŸœŸ ¨«ª©«­®¨¥¨¥¤¤¥¦©©¬³½ÇÏÚåíðñòôõôôôôóôôòòðîæ×Ǻ¬ ž—–˜¢¨ª°³²µº½ÄÇËÏÖÙÚÛÞáááãæçææçèèéçéçãÞØÓÕÖÛàãåèèèèçæææäãâãäàÓØãèèåß×ÍÊÎÑÕØÝäääååäâãâáàÝÚÚØÙØÖÕÓÒÎËÉÄÄÀ»¸¶±¦¤™“‡ˆ‡…‚†–«¿ÔäïïðîéÞ×ÙÜÞÛ×ÑËƽ·±ª§¤ –”•––“”Š‡‰ƒ€ˆ†€„|yv{ysrlmljeRPB.(""!!$" "'#%-6GGGGCKIHC:3*'%&'"",-+&  " + "'!%#0-+,.1+&#%  + + +  + +$%#&!"#(&.$ $#")&$ !+-()(&%%,'-21.-*0/1+0%2332,")66C]qu\:* *@Zeb\[QQNO\OGJM>9>?A?JR\ipzociif^`l{Œ‰…quln{‹Š‰Œ’ˆ‡Š‡€€ƒ{mjlpw~y~ys}zuzyzymg`edhkniii`bc_`b\agfigkjghdad`]WWZfcaVSFGPUKC>:<52&0/),9^u€€zq]Zir{ƒxu|ur{}vyqghdecdg`beikea]F783/B_gnpkb> *.?NKNW +  + +  + + + %%'#&//'&$"!& " %% + #+&'-,# /600?DDHO]XR_f\Z`ZPUY]Y[ifdOIN^RPLOH[_PCJBFOTU[`UC@NPHP]UJ@DC>P_PYPJQ[QE?U__ke\WGPNL?7'"+654(% +CI?)!  + +  +     -9B>6A@<639005.+34g;.5926967928=943267./.2-(-*/00,1/-)*$('*/#%,31,  +    +  !     '  'UR>0#30CTP=,%)=Vlpkihbh\SE0/,$$%!)#+)'(.4;Bewxz€Œ’‹‘•——™›™›¢Ÿ¡¢¡©¨ª¬¬¯¨©©©£¥«¥©§ª°¬²ÃÕâëíñòóôôõôóôõôóóñðëáÓÀ´«žžœš—¡§ª¯²´´·¾ºÁÄÈÍÒØÛÚÜááãæåæèèèæééèèééçäÝÚÕÖÚÛÚàâåéæäâàÞßÝàÞÞßÛÖÙàçèäÞÕÌËÊÏÐÖÞããåççäääââäáÞßÝÛÙÛÚØØÖÓÐÏÌÅÿ¾°®«Ÿ›–Ž‰Ž‹Š†ˆ…¥¹ÑäëëçãèîñðíéæàÙÔÍƾµ¬§¨ž›ž›•‹’ŒŽƒy~†~}ntwtflih]ZJ5.(" !"! %!'.=AGGFFBD@C6%!)%)'.45.""($!)! &&/3(/--1"  +      #'!&"$ ))+ #"!'"% !%&1*'!(++*1%*3,+1./,024*.4483(,.>YmyiH&!2Tgfa[Y^[SS;8*31):.?_mz„‚u]dgu€„{}zwry|upolgbcce\^deicaaN>530.HimfrlU2#13DMIS]  +  + +    + ""'%*$# !"% "" 1.+%,0+$'2/2=BKEOXYX`fjdebc\`abfgieXX^YYdbTH^fbWXFAJV]Y[`bRTZE@KTW[NG=E`XHMIIPTGHR`KPf`ZSJ?=7&*0@=0'-'(NE/., +    + + 6@=;AD<=99;60:70-7(g038908<=7;=<91320732+),$(722*0+).,.!!$00)%!0-& +     +   +   + +    + +0EHF>5@?8=EKXYSWVR<;+*$ 0IMLE<,.,!13=$& ! !).,#"!   +&2-" ,-+((0<:?BCD@C]TQ]bW^`aig`^hc^fgdgZ_iaWS\fib^VEFN]XV]lc_\RIOS\e_KD:HOOLTMOLSXRYJ:AXT`H9:8!$1EC1$-/2LD***"     +   +6N9;5EC6<37328).245D\9,32=:=9?74;C4/6,/6/1),#*+-+'/0(,'"#'!'%,( #,(( +     +   %     +  +   + #8GMOG@==05BWRIRWWP@6 &% +;EHPDA0.' :LHHXWPMB>A3)('():YVB."-24HJ;$$.FZdgejfa^aZF82( "%'$)%(,)4Hgwns€‘—›œ £ž¢¨¤¥¦¥§«¬´®®­«¯²´¯®¯±´²°®¬µÊåìðîíôõõõóõõõòòîèÝÐÀ³¦§¢Ÿ£¦ª©²··¸¹¼¿ÂÃÈÇÊÏÕØÚÛßâãååèèèèçæâáââââåçæåàÛÖÔØÜÚÙÙßäâÞÙÑÏÔ×ÖØÓÐÍÃÌÜáßÜÙÖÑÏÓÖØÞâèéêêäâÞÝÞàÝâäåãâáÞàÝÜÛÚÚ×Ö×ÒÎÏÊÆÁ¾¶µ´ªª •—ŽŽ†„‰•£¦©ÎëïòôôóòóòðëêãÚÍÉÁ·¯§£¦Ÿžž™•Œ”‹Š…ƒ„‹„zw~†ykspnmhkl^R=0*- "'/4HEJNHFHJE8#! 6. $'+0'  $!'%)&  "  ! -33,,3($' #"        + +  +    $$%-# "'(+'! '(!%$(#((*,'+("31/.3''.(05:3=/1$!.9ShuhSE0 *,;S\TUZcgRROECRTCFI>7;@?HPfwrnpwui_gw€‹€…xdZ]u{y~…‰”Ž„†‰unywvwmys€ƒytqxupqtsvjjqwzoopnnogdgg__bfliff^acbhj_^`^VUUVZ[[\YTSTMKI:;77/(.4.->]ms~~ˆ|[\il†„…†{rlnqpffhnnlm`Y[iinhT=0+)16TRO`eG9  ! ,?LLIKX      "/ ! 31'#"!   &)$% +/7)$1@DGKCGECW\SSUS`bYc`WQ_aW[gf^b]ibW]Z`bUZ[UIJTVYQR[a_NI[NNc`QCBD>>VONPL_WLISG;=GSR:I>&2733$!$6QK6*, +  +  +   +  /59;><>?>8=;,*4",3786&/2346:7645==@;24442./,(-,$)+--'##)$&"$'*)!(/-  + +       +     -6BCPJ:6==8@KNNWQUN@"0'?SLKIC:31('@IV_UTHDAB-&8*2KOA'*1,5HB6-2B;=FTaqvilvwk`amuƒƒ‡xlg_iwx†ˆŒŽ‡†„zrvtrmrw|€xjqzsphrvxvhpr{tlkowriigqnmmgjjjeb`jikhba]ZTV\UV[ZXYRR[SKKC:;220-43).Fdtzz†{iRYep‰‹…ƒ„†oorpijwvtkajh\WcjlaR<81.*A[YZ]SC+,?IDGIS +    +!.  &5)+/!   $"##'11.&-9GLNLDRQRV^]`]hha_]Z\b^OSVRVX[ge\WOSbQNX\]WV[SICRagYV]UJQd\ZTIL?N@HO\]UVMZ_HJTILNH8!$3=5!!'$()DXF+%&  +      + 5<837<@<<167564'/89556:-5;87<911OE96452513(,$-'!'('%(%"  $%$+$#&")   +   +    +     +    $),@NPTA8DB:@MKVKHOK?*)'>LIJH@;<:4'9MSXNUKNC2#+% + ,LP4/(*2>G>').;Icbglkjf`VF1'!&" "'64G`mj„„›•–š›™œ¥¦§¨©ª¤ªª¬®³µ²¬­¸¼¾ÁÆÊÎ×ÚÚÒŸ°³ÐèëëõõôõôôòòïçÛÎÀ°®ªžž¡¤ §°²µ»¹¹ÀÂÆÆÇÈÎÊÎÑÕ×ÚÜÛàãàæèèêåãÞÛÞÛØÕÓÒ×ÛÛáäââÝÙÙÚÖÑÕÖØÝÜÜÙÚÛØÖØÚÜ×ÌÆÕÚÛØÎÊÉÎÔÖÛàãáÜÛÙÖÓÏËÒÓÕÚàæåççäãáàâãÜÛÞÜÛÙ×ÓÐÒÎËÈÅü¸®««ª¡““Ž‰‹Œ’”¢Ãßëðñòóôóôõóòòïèâ×Ëľ±«« ›˜–”‘’“ŽŽŒŒƒ„}xttqnjjonjk^RE5#" %5=IC??DEC8*".&%"+1! & (620/$%!+' &!#())#&()(!  $    +  +   + " !"! !&$# ' !,(* *)'*('#),37-%+*)/25.+26930! '.LmmugJ2&%&D[X_ZQY]XQLQECDJ=+&/@C2!(-%/EP:,-$  +  6?:6;CNPbntnfnpcZc|ˆ‰‹‰}wqhor{|„ƒ{wuwpeegsywls}rlj|tlquqrvtttsv}z{tvsrrvknokplhd`ea``YU[X[XUNNQZTOLLG@573/-&*!.Xlt~‚Œz_]b`q…~‚€rnro‚upvspjdbegckmoogN=2'$5=NZf^I0 $*27;@GL   + + + + + +&.("(28-# "%'"  +$" &02*(+7ALKMTNIQRafcX][V^cqtode^`mk_h`_i\KNVR^^VXU]]MPWUROTXVVBB^^UZIHSUPSN]VQFLXaTFHI=+%>9:0#"($.@@(&"  +  + + +  +      $9E?8@@<>;523.,,=3521753.-*.1:;2>743447./0)-+%*,0-(''1J#'(*(+(*#"%)%# +      +  +   &+  +  +) $7DQOH@CL=?GUUQSS3 + "&&>^UKQ\MH=0*,#/Q\TLYUXNB$ +GN>..'0;GF.!)<[\elfge_^E;2""*+*$#%-7akzs€‡›•”›˜¡¢£¤¥¦ª®¬²¯±³´¶´¹½ÂÈËÖäêïðñòòðæɵ¹ËèñóòóóòìãÕʸ°ªªž¤®¢¤­­²µ¼À¿ÁÂÆÈÊÍÌÐÕÓÔ×ØÙÜÜáâããæèééééäÜÚØ×ÙÜßßÚÕÒØàãäâßÔÊÍÏÑÒÕÖÛâããâàÜÙØÜÛ×ÈÆÊÓÔÏËÉÌÎØÚÜÛÛÚØÙÛÞàÛÚÓÑÕØÞäååèçççåããäåäáãàÞÜÛÛÙÕÖÔÑÍÉÃÀº³´¸±ª§™–”Ž‘”Ÿ°ÁÕçïòòôóõõôöôóóïëæÝÓ÷¯©¢œ Ÿ™—Ž•Œ†Œ†ˆƒy|yztqwlrqllgb_[LB2 +>A>II=DABA1,"#!"+,$ !*/2/0%%% )&!#*/.*0'( !% (*   +    + + +  #%# *&#$" !$#%"$'%*&%%)$"%.*(")'.6)..,)5/33/6474&-`z€kcK2+&4RWZZRMZb_JRRMVSPP@89GFDKYrxpdnsh__n…„‚€ojbhzƒ‚yu}€{qqy|noqrwypq}~jlv|zqorrsxtzyjgn~…wyynutquzsrrpvhhfiliXTX\\_YWKMLPYJILA:704111%9Xx‚€ˆŒ|_\cey…z€}}rqowxosrrwjefiihitut_H90*-0D^kiU@%".2/8AKP       %&"19,"#"$! &+#"(.,%$--8DS_YOTQV]c]Z`ZU]disqke\eoi`_bgk_\PLD_f^WJVb\ZVF?GHHOT;6?=Q`^YT]WQKQMIL=FTD;>??, $::2%! &6?2"(#   +  +    +6==A98??::8-,1,13>=64;49:6469514/5444592+-&+*/),&0())0%#$%,')(*,-$.)#    + +  +   1:#   + %''8GTPGHbw|‹ŽvXeif}x|‚ynp|ƒrsutqomjcgjijvwnYE71&.5N_c`Y@ + %-)(2=@H +    +   +#"'0/% ! ! /.#&-./('01=BLMPVUXd[addabfhijlqgYajf[[Wda\V]TDLVZUUV\]ZPNHC?EQ^VEGHLNHGEVD=HE99?8'(.786,,NG,(& + + +  +    + +  +";?BBD===7954/%371:<28638==99<6<78185457.+*+*&%0(%() $*%&,/,*"!%)-',' + +  +     +  7;3   +  !!BIKOEDDDBIIRSL7 ,",^_fbhd_OPA+&& &!'-*)4EUhq~€ƒ‡Ž“–œ–˜™œ¡ž¢£§ªª­±³µ±¶»½ÄÊÐÖßçîñôôö÷ôöõóñíÑ´³²½ËÖÙÑź°©¢¡¤¢¦­°³·¼½¿ÅÄÉËÏÍÏÐÒÖ×ÙØØÛÚÝÝáàâãåäæçèéêëêçâÙÔÔØÝäçèçåãßÛßâääÞÙÖÕÔÔÖÔÑÒØÛÜÛÚØÚØÚÔÀºÂÄÀÂÊÎÕÚÝáÞÜÙÖÜáãääãáÝÚÛÞßââæçèèèèèççäåèäãåäâáààáßÜÝÚÔÐËÇÅĽº¹µ±®¥¤¥¢š¡§«¿ÆÓâíïñóóõóôõôôóðéÝÔÉ¿¶¯¨¦Ÿ–”’ŒŽˆ„z~{p{omnrmrjhegYF2(# #%#')7?FGABF?<0$!'"*2713%),4(,/,'+4,* " *%  + +  +  + $!" &&!!'$#!#"$!#"'"+%"&0**/0,.-.*./02052??750(%Ogtup_D,%*:KO\fcdaQNFIOEB@?7-5::>FM^svhbkrgZ_or}ƒ„ƒ€m`gp{‡x€ƒ…{~ƒ€…||y€€x€|ux‚‰„‚rnonsrsqy||yqqm|vrxtu{v~vpoole`da[_edfdVZYSNEAA<6/,/3535Gm€|Š‘tZjjm{~ƒ‚~yzqosrsplpjfjhkprqgO<8.*7Ifkkn]8 $,,,019@ +     ,("&05(# " */!#-*,1%.47:<@JSLLPU[\]_^bhlecab^ccifXJMQ[\_YG;DNNMJLGQMBK=?G>;:@KHSJSR>6IOQRKKOSKQTI231$(9?9:(EO6/6*  +  +  + + +    .CCCCG@;7;97.-98<9@;>6?D7>;?8@24;?8;>5,2)%,!)*&'' !-&,#&+,(*-#.'#/)#  +       +   ":9=(     )2CLQSMCG@CKJK<# -85CCOcWV]^WQI83;2"8GOJX\PXB*>QH90/.7EG+$ $D[]_pg`aYL9+$$"%(.7Feo}w‡’Œ‘“–—œ›¡£žŸ¡¨©­¯¬°¶¶¹¼ÂÈÑÜãêðóôõøöõøõ÷õôòëϲ¬­«®®°ª¥£¤› ¦©®³¶½¼ÀÀÃÅËÈÊÎÔÓÔØÛÙÙÛÜÛáßáãäââäçæçæééêêéèãÙÙÖ×ØàåèèæåäááâääâßÚ×ÒÓÍËÈÇËÐÐÓ×ÕÔ×ÔÍÀ¹ÀÆÅÄÈÐØáâäãÞØØÞâåçåäáÝÙØÚáãäæææééèéçéçæéèåçååæããâãããÝÚÖÕÐÎÉÆÀÁÀ¹³®¬­­®¡ ¡”©©°¿ÍÞéðñòõõöôöõôòñëä×ÆÁº³¥š—–‘‘‹‘’‰…†‹ytoiqnkkigka[S:)  "*08?>BD@>C6&#((( -895+$!',6.*01&   +$#(/%"## )0*OY    + + + $"'(%$ ! #""#"%' !#"%&+/&)41*/+)23/35/*0,33AA?<2-!/TjppqoR?$$-:HbedebV[OUUDB?;949>::EF[nupfiupdd_w„…ƒ„ˆyc`k‚|‡††yz~ˆŒ‡~„†ƒ{y‚…ˆ…€†rq}~z|tu„z{pmxvqwxsw}vwwuw{uggj[U`lga\Z`[LJKC>730/1636?\sz†Ž‹kbilq{{„‹‹…wlqsyukombfhiiorogfJ840,4Tw~yc;   ()/,.7;?  +    + +  /7* #07,' & !"!  ,,"((#)$+687GCFNEAHRTMPR\flp^WPVccela[]TZfdfXMIGP]SM@JLPEKN;EE>90:I_YKRF>NOK_WKX\UWNB:G$)<;93"% &LM-(,# + +    +     + &:CD?ECAG=<=1'!38;:>845/5:;9889>>62@0A9951($#!)$,)"##,.(*-/$)0(!&,,0#  + +  + +  + +   +  +641.    $#".>GSNI>@5')9579DJEZb\]b\QJ;:5'!4E\U]YUWR5*KLJ5,.+5=4' 2JY^daj^[OB1/ ($&!)6Sdlq„ˆŠŒƒŒ——•™žš £¤¤¨¬§¥®±¯°¸»ÁÇÌÕãêïóôôõôõõôööõõõñìͲ§©¥¡¡žŸ¢§¥«¯¸·º½¾ÀÃÈÊÍÏÏÔÕÕÕÛÝÙÙÜÝßâääãåãääèççèééèéèèåâÝØØØÝãæçæããäàßãâáãÞ×ÓÐÍÎÐÍËËÎÐÐÒÑÓÎŽ¸ÀÆÍÍÖÜßäãääáÛÚÚßåäæäÞÜÔÖÜâãââãæèëéèèééèéèèéèçéåçææåäâàÚÚØÓÐÍÇÇÅ¿··´³°´­ª¤ž  ¤§±ÀÊáìðòóôõõôôôòñïêàÖË¿®©¡›œ™‡‰‚‡›ž“‰yxqpqoejhid]]R@,&!! !.461H@CGA;<.""  '&  05@9 !$*/13741+ '*)"&$$!%/3*! 0 + + + + +    +%#!"-!"$'(#($ %#%# $#$-%#1+&*-0('+1.662%+2/=;BH=692+5Uourxujf(%)3G]\YRMXXNVN>;>A=<<98:89Maxwjfkti_\}‚z†…‹yf_o…zy……u…‡ŒŒ‰‡€‚„‚‚……†‹Œ‰…vu{}†…†v}{€xvtvszxu|wr}y{vomkiigficc__YK@HNG;77,+4,/5Gcrs€ˆ†Y[inxƒ‹‰‹‰}qmmwyrkmhbbahjiqoj[@<.(/6Tny{s\7 ",.0)1;?F +       $15' -3-"#!$! $#!")*) #,3=C@>FHGPSUXSEJ\bd_\ZZeXbkegcdidc_QPLKDU\TFIONNXVFHUUH3-7HRND@DOYKTQEMVUIG=4*%8=.$4NC")) + + + + +   + +  +  3BB?AH<<;9<33,1-6;698328;7/4267?@@7:?538851-$%&*&,)% !*-(.1&.+.*%&/)!    +  + +  +     )765  + $#$6?KJE?2)/7;+ +%8E=6(:7'#):XV[^\X^D;PD/"*40F9!*7AY`bd`bTO;.&$"  ##!#'2%&$(.44576.,#  + (/*''& ',.$!       + +   + $$-$ ''%%$#%$""('$"*,3*"*)-,,*68/.08963>JE<56403NjuxqxoV6*#1F\]XQQUOBE9BH=J?:>6;?;AN^uwkbkrlaat~€{‡}nkn„†~†{„‹†ƒ…†…~†‹Ž€qvŒŽ„~sqƒv~€xwjxƒ‚ror„‚}uqppq~rntplif^N;=CGE966*$+..,Gn~s{‚sRaow€…‡zsofjvqhfhnllkijptqjW783% 1Nnuo]R3*+.+,54BN +  +   + + + $&$  #/1+!"!!!" !# )5'%&+7BBFGKIJNRX\KGKRPOW^USYiqgjodb_]VMRMEST[a`NCPWYTONM]N6,6?PXRIDJQGKZLHEIMFC2!-==1 )HS5(  + + + 32   $;><$ #4CZ^eiecZJH5("$"# ( ))C[erz€‚ŠŠ‹——•™œž£§¦ª¯®®±­µ»¼ÃÍÕÜåíòóôö÷ööõøø÷÷øöõôòîàÀ¦ž¤œš™¡£ª¯´º½½ÁÂÇÈÉÍÐÑÓ×ÙÙÛÝÛÞààãâäääåååæçèèèèèèæäáßßãäääãàÝÝÞââáàÞßâããããããáÚÖÖÕÒÓ×ÕËÄÇÈÇÄÅÌÈÆÓÙÙÚßâåççåçäÞÜÖØÞâáÛØÕÙÜàââââßßäéèééééêèééêééççèæççèçäãßÞÜÙÚØÖÐÉÇÅ¿¿¼º´³­°ª­£ž£¨«¯¾ÏÛèîñòôóóõóôòñîèÚÊ¿·«©Ÿ”“•Œ†Œ’Ÿ¡“wyspolnqkkab]XMA-#%!%-135>>BAA@>&!"#"-7?84$)$%"(1..6794;&  +  ."$$"'#(20"  +  + + + + #"!! ! $*!"'! "!!$'&%*("(0-%-(0:4-3.2,8GJ;01782,;bf`jzl`G-$-A??379.-(30/Ts„zsx{hVdso}‚|vjgikkljmrpffkpjms{ohL79/&&1Uruf\Y2 + '+-)(23NN@07FOX\PHECHTU[YF:@CA,$0>?3%)",CK+"      03  +  + +9=BDA>C=;41157.195:9@@;3593412855;:B::>780%((%&$)$#$!+53%(1*&     +  +    + *62 + + )-"4:NKD0++& ,;WYWR?!&2=QXbX[aVRMB3.$-EVWb[bZTD0+30@=%1L_a^hddXK71&))#!!$(Dder|…ƒˆˆ‘”ž”’ž¡ž ¤«­±««¬´ºÃÉÑÛåìñóôöõööõø÷öø÷÷õôôòìßÇ´¤¡žž¢¥£®±´¶¼¾ÁÃÂÄËÏÒÓÖØØÚÝÝááßÝââáããåææèçèçèêëèéééåââáÞáâäãàßÞÝáààÝØÛàäçæääããÜÙÙÖÖÔØÛÚÕÐÌÊÎÌÍÇÅÏÚÚÙßãççèèçæàÙÔØÜâÞÙ×ØÜÞäÞÜÞâãååèéêéééêèééêééêçèèçèéêçæâáâÝÝÛÙÕÓËÌËÉĽÀ½·´¶¹±§™™¡¤¤©±ºÈ×äíòóòôôôôóòòîâÙƼ¶©ž˜•Š‹Š•› Ž~uqsqqqgjigcj_[T;-! !#-:63?L@B>9' !'#.3@;2,#! $*4*/599?8'  !(##! (--  +  +  + %     $"!$+*#!$$$%&#%($$&12+3+263702=GB72019<-6PQ]owxnV9$!1@@?:JIQgskhnyyfcov|ƒ‰…x|lpv‡~~qv~Šˆ‚†‚††ŽŒ‰‡ˆ‹ˆ‚‡‡€ƒ‡ƒ†ƒ‚ƒˆƒ€}wz‚„{|ƒtt€|spmqmdhmjx}jhhPEA?<76<30+,0+;YtznooaIKgiiu……ugnvvmrsqrj]]ed]jz}s[A?7$!(EdtyooV  /0-'/+6=H  +   + +  + +#!  -30,"!"   + %)#,.''-)4?>FHLC9BQSLSVIOT\`[_b_]X`fgdd^_[cZ\YS\]PTLZZKTOB><>>BC=EKV]NB@C<>BJTP=9D?(5JG0 )%%13.#*" +      +  +  %>;>?40696@776=:>?9>:42/6829>==<861.#%!&)$/,  '/*.#$%),71'(#*& +  +      .-04 +  !"&2;NHC)# 2Q]eg\G2#&9CTb[Y\VURE,*##ENQaVYVT<(.**8<**M_f]fjcVI?!(" #1@]tuƒ‹‡Š‹‰’’”™”›š¢Ÿž¥ª¸´­³¸¿ÂÌ×ãêïôõõöö÷öõóöøõöõôóðïåØŹ¯¨¥¡›¦©¬¯¶¸º»¼ÁÁÇÂÆÎÓÔÕØÛÛÜÞâãáãããããäååçæçæèèéèéêééèèææäáÛÛßàÝÛ×ÛââÛÖÏÖàææãäãàÛÚÙÛÚÜÜÜßßÞÛØÙÚÚÖÊÈÓÙÛÞßâçææçèãÞÚÙÙÜààÛØÙÝàÜÛÙÝäãåæèêéêêéêêêéêèêéèèçéêêééèææãááÝÜ×ØÖÐÎÌÊÉÅÇÀ¼»¹ºµ­¦¢¡œŸ§«°·ÁÑåïñóôóõôôóòñéÞÏÄ·ª œ”Ž“Œ‡ˆ‰˜}{{trqjfghmla]b^YK6($#'-)/6CBB87:* !#&/8=42(!*+07=C>@?/)"   $,%'#&+$!! + + &"   + + !$!&$%%$"%%$##),"#%$*#!&('3&,-(66-00;AF;1?4-6A614G[mwsug@)$'5GZa_]^dc``[YJ=87,+4:?CLYr}qnpvu_erz€‡ƒƒ‚yiglxz|‡Š‹‰€~ƒ‰‰Ž‹|ƒ†ƒ…‹ƒ~„…ˆ„}vx€xƒ‚…‚ƒ{vr‚|~tpuffkkvvmojdUOI><@A77*(420=`qroso[ITlhs€„‰‡zuyyvyzuhkqiaa^d[fsunV@21*%*Li~wymK" +  ((&.2+98A      %*02*"!  !) -0)&*00?KJINJMMNONKQTNO\da`a`_TL_ZSVaUM_dWLRSOKIGOVF=F?IB618FAC>SWH@?HB0%5FJE=B=!.7A8#'/@>!((      +  .DGHY7/=A6<@E=<8?459>13-358:>?<:25/+%%$%#&""+*-')($&-95.-  + + + +    +  !)21 +      ! 4DG=  +-AZedb`I2""/?Ucd__]URG312=PS^X\U9(..891 ?Lac\`daTEA,' #,L]l~€‹‰ˆŒŠ‘’”˜˜™›žŸ¢§±®¶¹»ÀÉÐßèðñõõõõøùööö÷÷øõóòðìãØÉ»½¶®¬¥¢¨®³··½»¼¿ÁÄÅÇÆÍÐÔÖ×ÚÜÛÞâããââäåäçççççéèèééééèèèêéèèèèåÝÙ×ØÙ×ÚÛâßÙÖÓÔÙÜââÞÝ××ÔÖÙÚßßââââÞÛÞâáÝÑÌÐ×ÚÚÜÞäãâáâÜÚÙØÚÞàáÙÔØÞÞÚÚÙÝáââåèééêëêìêêëêìêêèèéèéééêèèåääâáàÜÜÚÖÓÒÏÍÊÉȾ¿ÀÀ½¹´­§§¤¡¨¨ª¬°ÃÒßêïòòóôôôòðîèÚʼ­¤š“Š‰‚„‹u{v~mtlnshmocfdhZRK9%!!&+03@D@=@4/$! )&++621' #'10:C<4;-3(!*"  "#!!/,   ,$      !!!& !" ##'%,,%!'"#"&''-/)*,-/+39163:CB64772=:6..1=Vjxu]5-'5FMSij_Y\`]NLA==.-9@A67Cdsz€vqmhicmzƒ††{€yj_dvƒƒ‚‚ƒƒˆˆ‚x…†…‡~‡‡‰‡‹‚„‚~r€†|y€€y€„{~ƒ„ˆ|zvux{wttrrsqfloqrnd\YL?GH57++(10.8]vtuuss_\ims„‡…vmx|z€€yvvtpginkgknimo_H7/+*8Yp}upcC  +$&#%*29<8@ +    + $%!%151!  + + (!).-*&,57?IKLJLBIX[OIJMSWgj\^Z[_S[SRZ`UN]WTHSaLRJESQ_CKPQHCIHKFA:MV=@NTD3'&:IJ@@4#./2*1(B@ !      +  + +   1,#$1QWZVK8'/53G<0P^_[c`aU@5(   ,&$5Cdmz|‚ˆ‹ˆ’’”—š™ž¥ £§§¬­±º¼ÆÍ×âíñôõõöö÷÷øø÷÷ø÷ôõòêàÖ˼·³³¯¨ª²¯³¸·¶¸½À¿ÀÁÆÉÌÎÒ×ÛØÙÜÝàââãääãæçæçèêèèëèéêëêèêééêééçæäáÛÙ×ØÚÙÚÛââÞÛ×ÑÎÓ×ÓÔÕÑÌÉËÕÛâââââãâÝßàáàÚÐÏÓÔØÚÜÝÙÓÔÔÑÍÕ×ÚÞãßÚÔÐÙÞÜØØ×ÚßåçéèéêêêëëëëëìëëêëêéëëéééèæææäãâàÜÛÛÚ×ÖÕÐÍÈÉÈÆÆÿÀ¸³°®©£ª©¨¦®°¼ÑÞèîñóõôôóòðìãÔÁ­š•“”Ž‰‡ƒ}|xuvptsmotkgehfe`_^G3+"3-20@KAD>@4!#!$11/0'"%,3+90(Jkrvv_:)$,:1(1EVuzlk_; +*4/-244;>< +   + +   +   +   +--"/72%  %$#%++%)449FEGMGCFRSKJGIZX]h]aaZW]`\\b\XXPDECD[TNF@@I[Q?=:7AMNF?JOSPJESYH<:0?:7#""+-3,#*% .1:<>9;750**$&".1/& +  $' + +   )%#    +*%#)(/,$  ""%"$%%(% #'& ! !'#"&(*-%$1136.3>@412:CC@?71&'9LRir`C-#".G^ghc_e`WKPUKGKD8-,6JapvfgU+  )0-252-4AB   + +   +  !(,'31*# ''"*)" -06DAAA44HONF>AIHI@5=CDD0 *3%$($Y[`ZV\VMI8  ##*8Vl|xw‚ˆŒ‰Š‘Œ”šŸœ—–—™šœ £¦­¹ÂÊØâíòôõõõô÷ö÷öôöõóòðêáÓÈÁ¹´µ²«²µ¸»¹´¹¼·½¾¼ÁÂÆÇËÍÓÑÕØÚÙÙÝÞàâãäæççèççèéèééèêéëëêêëêéêêéêéåáàâáÞÜÝÞÞÜßâãááÝØÏÉǽÂÅÇÊÑÕÚÛÜÛÝßÝÜÛÚÛÜÚÐÊÒØÛÙ×ØÔÌÈ¿¼ÀÉÐÖÚÝàåæäßÜÚÜßãâßÜàæéèéêëêêêêêëëêêëêëêêëêêèéèéêéççääãáâáÞßÜÙÙÖÖÔÐÐÌËÉÂÀ½¼º²´®ª¥Ÿž¢¦§®¹Ç×éîñññòòòðàÆ«š•“Œ‡‡‚€€ur~xqvpqolmjlfege_WSI-$!&,-,::@@BC2 !+*5&*+!.9;5=0291/1Nkr~„Št_fit‚}~pkuyqxuoifoqnrrxvtsy€jJ?2+*6Rlsplb? +  %8?>B@3/;;? + +   + +  '   +.&!%.*   +&%$+'%-->@@:<>?;;KVZRQO\b`cbbVY`dh[NNOONH?FKMNJ>A73DNG@24748,'9BJQE98KUJ?=<<3$$/7&##7O<20  + +  + +  + ,>H>@=>LL886;3)/;JE>=E5-1168<2-<3155;8D9%! +  +( 21 #DMTJU^_cb^\I8)(;R\\]d`a[TE7/&(6JNF,F-=/!(>U`b[_YRI;2"$!$>Ysp~y‚‚€‹…“Œ“™• šš¡¢ž£¦©¹ÅÓáéñôõõöö÷ö÷õõõóòñîæÛÐû¹·´±®³³·»¼¸¸½ºº·½ÁÁÁÆÇÉÎÓÐ×Ö×ÚÛÝàÞâääææèèæççéééêêéêêêêêêéèêëéêéçãàáâãáßàáâàßãßàÞÜÛÔÎÊÅÂÄÆÇÊÈÅÈÎÏÎÎÍÍÍÍÑÓÔÓÇ¿ÆÍÐÑÕ×ÔÒÇÆÈÈÌÒØÜÛÞääããäàÝàããáÞàãåçèêêëëééêêêëëëëêêêëêëëëêéèêèçæåååääââáÜÜÛÛÙ×ÔÓÌÇÈÈÈÁ»¹¹·³¯©¤£Ÿ¤ £©²ÄÖäìïðñññíßÂ¥œ’Žˆ…‰„ƒ}qwƒxsulojordellc^^^K9$%(%*7A?BD;+!%"!,'&'*47:?;>:4460#'#&+/403& + #    + )36%  +   +  &&"'-40"*$  '+ ""+&!$- #)$,/(!!'$ ,6.1747?8788>>6<@A@=.-($2^puynN7&+.?Vkp^_^HMTOIIAHHJC>?CNW[z€{thrmbahyzz‚umYXfqo~„„ymu†„†{{|zˆ„Žˆ†ˆˆ†ƒŠ†…ƒ‡~uw‚‡Š‚v~€{y{ƒ†rupuƒ}ttvtjdmwrngbba^`fcU?=70,3317Xmt|„€l[``}ƒ~prnu}qiknhvurqlxyip|{yeJ;2(* +  ,>:=ALJ?MUR_]\YSaieZSW[[_NNQABKB2=CFMFA:27;EK>+4:?:38GKLMC?EOFI?;61 ,1&%*EN4.*!     +  %;AJC@CI5MW753/369BI<:;B548696.0870-/6957.6&&%'&##'"##! '')$!" ($    +'346(-+    !&! +*>>*    + +  *;#3NOKOLY`ba[[YC*)CUZ^ba[Y_WK=($&GX@0.4$6Qd^a^]TC4  &"6Zgy|ƒz…‚ƒ‡‰˜”–š›˜š  ž¥­­ÂÕäðòôõôôöõõøõôôôñïåØËÀº»»µ¯²·³¹··¹¼À¼½½¿À¿ÅÃÇËËËÒÖÔ××ÛÛßàâââçèæçéèèééêéëëëêêêêëéèéèêêêéæåàßâââáßßàÝÝßàÚÚÛ×ÕÏÊÆÅÀÁÁľÀ»½¿À¿¾¼»¾ÁÅÂÂÁµ´¶¿½¿ÃÃÇÄÄÃÆÊÊÎÑÔ××ÜÜÞßÞßßàâäãââäãäåèéêêèêêêëëêêëêêëêêéêëêëçèèéçççææäãäâàÝÜÜÚÙÕÔÔÐÏÐÊÇÂÂÁ¶»¶°«©¥ž¤¡Ÿ¥´ÃÐàêíïðïìÛ·¥š—‡ˆ„tx~sxvsrqppnlhni^][OC9* !%'+1=?<;7)"!#**74=?8=?<2/1,)%+*.59,*'  +      +02. +   "# )8<8:7-!%%"!  $*%' ! '!!/) #&' #$#& '*)5:4945<77?=D17DA>76+ D_q……x\8&+EWml`ecQRVTTLCHE?D?BEMK^ir~oknqgVcmtsqlf][^fs†„uw}~|‚yw|‚…€|‰†‡ƒ‡„Œ‹yw{…†‰‹‹‚zv}{snsxzqxtssplhkqymmechj^__UH>;24248.:Yhrz€ƒx_Q`gvv|{rnotorsrvperuki{ynpaI;1$/>Up~yqh@ + #3?DCGI@7:>@  +   +    +-:3$  ",0$!   & '$'$"!(.438B:AIJKP_^^aZHOX[QYZMRXVEK?3:>787CFMOA>:6;DD?5>B<5:FKE?EJODCJD@9(!,.& 3ID/,(  + +  +  +  +  '=@D?A?@:4A@;5/2;><@@<;B>=414<<:;E=F=AAdmwŠƒxoLLghr{}xsuttxutrwwvvrqhmrx{xpiZ>4)(0Ee}~xw`4 "04;?EB<<=8>  + +  +   +  +  !.-'" '02+%  $'! )&'($--/552:8:AOOTcfUZ]ZPFPLS^PJGBKLPD;FPEED=IIQC=>;?5,9=8C><:>9:DB4 &.-%%(EE/(-*  +   +   + 5ACA?66A@;4---759B:9>A;HH9708?99022=42746,(.2%)1+  %$'((+% !-  $ /12#%%  &".  '/;   ",/ID56FOVV^[cdZU92.BMW_hd\WcT@+$&'0;608+BJUV\cYOF0"5/02=BG[l|‚ngmj`]fjjpgifjceiu|}zx~}xx‡‰ˆ|€‰Š‰……Œ†yww|‰„‡€|rtz{vtt}}~yxsswtqwoqstsj^_]WFIH82(-468.>fx‰‡ˆ~fHPkr|„ypsplxuquts{„€zwfnrtklplS;2')0Km}wnlQ'    ,.,4<>5::7B + + +  +  + "$"*!+1-""  ! !*+%!"+,-668578AG@>8*&/6E=9=EB4;7'"*(!%#=PL.%( +   +    + + *BBDGG<<:<::513138@<<<566=?26686832;46,-24*)*(!#,.-& + "!  + #  *+!   #& + "21  #" + ,! <:,&;HTQYbgfbZ?51;LV_efebaONB9G1);:7,$:=E:4,--+*)/+47.2'%    + #)("   +"  *04#)./-)#)23+" # + #%$$ !$&'&!+/*&("%*,*'(+-25879?KIDD9;>B9>=6%/b{€iM6)!2C`ptb[WVTRQMCFI92-0C@7EVix}zlmsn]^ahloqnpc\fsts{„ƒƒƒˆ|„‰‡‡‚„„……‡}z{„‚y~‰‰…~wxy~zrzovysxyuqsnlprloqsge^YULDD7.322,97-Bjsxˆ‡rbPanv…}xppswxnuvustpjuytmleiproL;7+ 2Xhqnrf>  '***5:919A>C    +  **& 04' .#  !$%$)%" $'#2>A83:JUV_^ba^TMMSTWT^ZQGMQHGD<7880//3A;?=5>F?5:@B<75-/6=657=22).&,&*2)#$++** +    +!$&!    +  % (%   , ,:& + 7L\ffcih_M;4' !&&/53>;<CBI  +      '%" *3+  +  $! '($&#!(3:=5EPXYSNLMMJHOMWUMVQFLLG@?I@83>>95ER^dh]ecgdhdljL>. AU_]U`]KB:'".Fbkpq}{ŠŒ‹†ˆ‡‘˜•š›’—–™¢¦²¿ÍÜæìêêñóôôõóððêÝË¿·°­®¨¦¥¬±´¸¼½»ºÀÁÁÈÆÇÇÆÉËÊÎÐÑÓÓÕØÕÙÛÛÛÜÝÝàãâääãåèæééèèééçèééçèéèèãáßàÞÛÕÎÈÈÂÃƽ¿ÂÂÁþÁ¿ÀÄ¿»¼½¼ºµ«¬´¬°¬¨¬©®¯¯²°¯¯­¬´¹½·®®´·¶µ¯°±µ±®²¯¯¾¿ÂÁ¾ÁÁ¿½ÃÁ½¿¼¾¾½¾º¾Á¾¿ÆËÒÓÖÝàáäææçéêèåéëêëêêééìëêèéìëëêêêéèèéåçæçååãããßÝÜÜÚØÖÒÏÉÇÈÀ¿¾·²°¬ª¤œ”ŒˆŽ†Œ¬ÅØãç×°“ˆ{vƒ}ƒwxyr{rsqumhimohhf[^\TB(#"&*16>C:<3! %331<=@A>@?<2+.++//=231,$     +  %!  #!!  %"$*<>C<47+.179* %!%$*))+%&!%&,%&,%'$%!%'('34200CEIF@G@?<5<287%)O[ovqgI4();LPPQPTZbf]PNJKEC@EB:AFZhlx‡zs{s_V[Zhilqsb_m{|ˆ†‰ˆ}voz|ƒ}†ŽŒ…w{…ˆƒƒ|‡‰‡ƒ€‚ƒ€w}ƒ…wp}€vlcfahmpuiYW`[O@?:5*"&139>5Mfrƒ†‡gYekkz~‚wwohfoxvytnnmpskjorkleJ4-)(:axwuwg;   %++(/0349@EJ +    +   +,(!#/7,  + "&(#-.!!&#$-4=@IEFIJMHHPRUR[PJOQBDJAA=>RHKOA5).7@KSKA975.7F>78BA<;E9;>;89, %&('1#"7RI+# +     + + +  #<@BBDD=78:603-488AC@=@DBB@A?844)12-.254',(*$+'"#01)$*++(% +   +  + +  '0$" + +  + 4 56"  >MZ^ojmf[E;;GS\ca`cli_bcheI0/QZh`]aOF2'"")H`mprˆŒˆŽŠŠ—¥žŸ••ž¡ª¹Å×æîòòðëíóôôóðçØÍ¿««¨¨©¨¥©®µ·»»½¼Ã¾ÀÅÆÇÊÊÉÊËÎÑÐÐÓÙØ×ÖÛÛÛÜßßàááããååååçæééèêèåèççéèæããàÝÛÚÓÏÌÈÃÂÄÄÂÃÁÁÁ¿¾¿½¼ÄÄþ¾¾¾¼·®¤Ÿ¡«§§¥¦¢¥¡¨¤¨¨§§£©±±©¦ªª­¯®¬««­¬§¥«±»ÀÀý¾¿Á¿¿¿º»º»»¿ÀÀ½¼¾¼½¹¼½ÂÇÌÏÕÙÞàãåèæåæèèêééêèêëééêêëëëëëêëëêèèèèçèæåääááßÝÚÙÙÕÎÏÊÊÅÃÁº¹¶¬°©¢žŠ‹Œ•”ž¶ÄͽŸ}…„}ttupruqpsrmqrpegd]Y`Q9($!$0188?=82& ,>@55=ID:::3-)850688//*   +   + + + +   #"3@GCIE@==>=6==1(  $"'()(&%""#1)&$&%)#$!(%+//60-8:@I?AFAFB;99>>9. "2Afz‚wf;",0AM[_c^_][\XQLKIFKF=@FGHUbr{ouwl_\ZY\fs€zrko€€„‰„†‚†}oqxxp{ˆŠŽŽˆ„‰‰„ƒŠ‡‰‡{}|ƒ~{||t{€‚„€|…nnmokiimmbY^`^XK>@<55;9;02/.'"'!(#7OW5#   +  +  + @ 1EEHBG>6:<52-0$,86999;<9=@@D8;8;11240753/(('+#$,."*/,)*! + +     + +  +,"#   + +   + + +4,-<' +8H^djdjibT?1CNYghfhhjccaaA'3O`^aYVOA6)2Nfoovx{„ŠŒŽ‹“’¡¯²£œ›–¥®»Ðäíñóôôòçáêçã×̼±­¨¢¥¥¥¤§®¶¸¹º½½ÁÀÈÆÅÉÊËÎÑÑÐÓØÔÔ×Ö×ÙÙÙÜÝàÝßßáãáäæåäåçæåççèèèæææãáàßÚÒÏËÊÅÆÇÅÆÅÅÄÄ¿Á¾»¸¶·¶»À¾»¼¿¼»»®¦­¯³²²´­§¥¢¢Ÿ ››žž¨°®§£«°²®ª«²±³²¬¨¯´¼ÁÀÀ¸¾À½½½¼¶³²°²µ¶¸·¼ºº¸»¾½¿Â¾¿ÀÄÊÌÒÙÛßßáåççççéèèééééêëëëëëêêéêêêéêééèèèèåäãââÝÚØ×ÖÔÑÎËÆÆ¿¾º·±­«¥™”‘ŽŒˆ”’Œƒz€uyyw|{}yyvr|vosrspojjjfcaUW@.$)#)+.<=>>4'  ,9>?>?KFAB8/'2451683132   +     + + + +  + !  8GPKJLKLA;<;AC?7. !'!&$*&#!#+++#'&(+"-.)&/-,+).3:>BADIIM?;AC@?A5'#Fk„…qC2&&:KYgghf\XYe]JHDB?:;FD>BF[hqpnjyxh[Z\_bx‰Š|mghl}Š‡„†ƒ‚ƒ~~ƒ{€†ƒ€‡ŽŠ~ƒˆŠ‹ˆ†ŽŽŒ‡ƒ…ƒ€ƒƒ€…„ˆ‰Š‚‰rqmoljhhg^^aXSLJ@7+,'-,.886Mly…~YQ_fvt{xu{}yyzsptossvqpvsvqqtjB9-$-Lkw‚tI   "%%')(/:>@B;7;CCHLF9:JSC>:652-(&47>9?>87><34<:26.#$#-),&(&%CWP0% + +    +    + )?QKGIB=?;;?211,31489<57:;?B:96972:81060.%-,),!!!$ -/2'#   +    +  +   + ($+$ + + + + &8 ,5E# &40GYceeec^RA5ELVhiadbgfe]I"2J^Z\XULH:2Nill„‚Œ€Š‹“—¬³© ž¡£¬ºÒéðóôôõòðæÈÆö°§ £¡¦£ ©©¯´´»»½ÁÃÃÆÇÊÉÈÏÏÐÔÔÓÕØÖÔ×ÙÖÙÙÛÛÛÜáßÞßááââãäããæçåçèèçåäãàÝÚÔÐÌÅÆÅÃÂÈÆÄÁÂÁÁ»»ºµ´²©±²¹ÂÄÁ¿»º½½»¸µ­¯ººµ¹»±©¡œ–˜š•¨®¨ž§©­§¤©±µ»·°¦²¼¿ÀÀÁ¼º»¾¾¾¹­­¦¬­­®µ®µ¶º»½¼º½¾»Á¿¼¾¼ÁÄÊÏÑÔÝßâãåçèèééééêëëêëëêìëëëëéëêêêéççæåæåãàßÝÝÛÛØÖÐÎËÊÅÄÁ»·±¯­«§”“Ž‡}sn€z{zv€{zyvvrumvnozyvsoidhkcbaZE.#$&0=:BC?2 #+8FCF?BAA@C=B9"#"$!)*'&-((##&('%"%"%+))&,'39:=JEHDD?*$Ah}‡|n\:&(0LejhllcZ[kgYIA><9=89>?DGRajjft|qeZ_ent…‰xq[^i‹‡|zvƒ‡ƒ…Šˆƒ‰†}~ƒ‹†{„Šˆ„Š…„‰ƒ†‹ƒ†ŽŒŠŠ€rjenqlpjb_ba\TOG;1+&*-2.)/8Tgo€mLUdsv{€sxrsuvrsuzvuyrmrpmooovu`@3(&4Kauƒ~nO$   #!/+&,4==>BHH + + + +       '2($+0*$   &" '&-$ 1%./+33>@>BBDFDD>FEADF==FA<7;@INNRK<;;<1,*(+35.24794A>:6>834,$17)(5+'/0"=QM1)! +   + +    0@MKFBC8>=9@64/*49<59767C<>1065;54/0-.(/44.%  )%%).&  +   &"% + +    "),*'  + + + +3*4=) 78:@Wbfeik_TH4;HO`bafiij`J**C[\WZUIC/.a]iix†€‚…†ŠŠ‘‘’¤°§œ™Ÿ§®ÀÒçñóóóóóòðß³­¤›ŸŸŸ Ÿž£¨¬¶µµ»»ÂÁÃÅÁÉÌËÉÊÎÓÔÔÖÕÔÚÙØØØÛÚÛÛÜÜÞáàãââáãââåäåäæäçåæäàÞÛÕÒÍËÊÊÉÉÇÄÇÅÁÄÁ¿¿¼»¸±µ±«¯®ª°¾ÅÆÂÁ¿¼½¿½¹¹³®¸¸¹¸¸¯© ™“””‘•›Ÿ«¯ª˜¢¦£¦¢§¬±·»ºº°´¼ÀÀÇļ¾¿Á¿½¹±±­¬²±°³«¬«³¹ºµ¾½¹º¼½¾ÀÀ¼¿ÂÃÀÄÎÓÛÞáãçåçèèèêêêìëëëìïíëëëëíêêëéééèéåçæäáßÞÜÛÚØÕÏÍÉÈÄÀ»»¹³¬¯«¥ž•Žƒ‚zypvvusyqv}ynoqvsnssop|rtchqi_]aWP8#  $"'+9?<=4/!,=>?@FEEE?,"  !%$ &$#%"'%""$$"#/)$" %-"())128>=?FEKKF+*,#*(##$3Zlw~~jUdmp|€~wrmonoxuqumnmirqlkjs{rV;6-'4Nlƒ„vbJ! + !'--0.4;=CDGA6.#*59A8426=@:9=@B;+ *(&$02($&/ +?@9).' + + +  +  + + +#2GFEG<8394030142788=35B=<>;85268673131,+..)("#!))% +   " # ! + + +    2%.$ +   '=#"'@- 349BS`jcdeg`\B@DKUadjjh`L+%Db]]feJ>0# /Miars~‚‚‰Œ‰‘“ŸŸœ› ª·Å×éñóôõóññîâ¿¡ ŸšžŸž¦¦­±­¶¶¸¼ÁÄÃÇÆÃÉËÏÍÏÒÓ×ÕÖÙÖØÙÙØÙÛÛÚÝÝÜßÞÞâââãããâæåããããâÞÞÛÖÑÑÍÉÉÈÆÉÈÂÃÅÁÀ¿¼»¶¸´µ´¶·¹»·³­·ÂÄÉÅÄÁ¿¿½º¾¹²°º¼½¹µ³¯Ÿ•›ž—œ ¬²³«¥ª§¦££¨°¶µ¶¾ºµ·¼ÁÀÃÀÁ¿½ÀÁÁ½¸²¶¶¸¶·³²°°¬¬®³µ³º··¼¸»½¹¿Á»ÁÀÀÀÈÐØÞãâäåèéèéëëìêëìííêêëëëêêêìêêêêçåéèääâààÞÛÙ×ÑÐÎÌÇÄ¿º³³²¯©£‘‚z€poultsornvurrtuopkorijjeai]W]C9"%&-3=<<:=&,39>FF3,2)(1,0.57>/0* + +   + +  +  !$!*FBDIOOISIEECDCDDF@=#$$$"''($%$%)(! #+*')%,(**$&.42::CFBQVFB>??31 &EbrztiY=&%9KZhuunf[KEFIKED?=95/-3;C\tqhqvk^chilx†u]]nr~‚|v€‡Š‹‹…€ˆ‚‹Œ…ˆ…Š‰‡†ƒw…€}~‚ˆ‡‹†ƒ€rt|rqursujme]WIB733'#'(()-Xtƒ†m_hfoyƒwwoninsorqigltqmijmn|‚nO;6),Eg}†vn[=      C3'-2:>CHF>F + + +    +*( $6+ !''()%!*.79@47>@A<>ERN@??:7EMMQ[YVLDC46?FMULONG998:=642435;8;7<8>:85<89A7<5212...02*+(.%(#'$)/)$   "(!&&  !     )+."      3/ 5=%  $10=C>Rbegdif`hS=EPQZiigmY5#D^ZX^\RG3%'E`jj{|…€€‡‰Œ•› «´ÉßêðóóòòïëäÓº©˜šœ™›Ÿ§©¯µ°²·»½ÁÂÇÉÌÈÊÌÌÏÒÓÔÙ××ØÙÙÙÛÛÛÛÜÞÜÞÞÝßâãàâãâáããààÞààÞÙØÖÐÍÇÊÌÊÇÇÇÆ¿ÀÁŹµ¶²¶³·¶¼¾ÀÁĽ¶¯¸ÂÆÅÅÂÁ½À½¿¾·µ¹¿½¿¾¹²« š™¡¢ª¥©¯²¶®®¬§¦¦ ªµ¶»º¼·¶·¿ÀÀÂÁ¿½½ÁÁ¿¼´³·¼¹¹½¾·´®«ª«®°­²¯´··º¹»½¾¾ÁÂÀÀ¿ÅÈÓÚÞâäæåèçéêêêêëìíëëëêëëìîîëêëìèçééçæååâßÞÚÚ×ÔÓÑÐÉÅÅ¿¼¹²°³¦¢—~‡‰|vtvzwz|uwrvsruqslinpokghkdeVYN0'&&038;=:+ +78E<944)$./67.6;2(# + +    +   1NJIOJNNSMK@?=?:GNK=+#! + #%##$#"("'+)'$!%&)"--/)+,,//678:ABHJNFFA@=AG;83&;ensyp_?!).E[dw{yq_XI>LQSB6;=30/9N[hosmn||n_Vgkr€Š}m_`wzzƒzy}ŠŒˆ‰ŠŠ€„‰ˆ‹‰‚…Š†‡‰‡†~‹ƒ€„ƒƒ‚…†…†„„‡ytyzojpwz}rke`]I::=2'%+/64%5]~€|…m\ipmx~xzx{qnmiqrnpfkpnpjdfq|wdG=)&-Db{llb=   !-.&+*7?A>>9;C    +    "+("22*"    & (#""!)+2B?B/4EIKIKFDEICMVZWTXP>7:?DEBAKRL<>A98:<940.3KF563940,-&&9<2,%EbO-! + +    +  9EKKGQNCB=:514099CA>>:?8A:8308:;06631-.-/(%"#)&%+$&.(-/  +  !#$"#   + + +$&     )0)9.  + +8A:F?ENZchhf`jjT=CKOYic^TA"<_fYXaUG;% 'Dajrovw{ƒŠˆŽˆ‰“’‹ˆŽ“ž¥´ÊáíòóòòîéßÒ¿© –”–š £©ª°°¶¹¼»¾ÃÆÄÈÊÍÏÐÐÌÔÕÕÓÖÙØÙÜÛÚÜÛÜÝÝÜàÝÝÝàâããâãâãââÝÛÜÜÙÖÔÎËËÎÈÉÌÈÇÅ¿»º¼º¸µ¸µ´³µ³º¿¾ÄÁ¾º·»¿ÇÆÃÁ¾À¼¾¿º¶¼ÂÂÀ¾º´¯¨££§©ª¬©«´¶®«­«««©¬¯µ¹¼¾¹³·¿ÁÁÀ¿½¾½ÁÀ¿»µ¶¸½¿ÀÀº­«ª¢§¨ª­®ª«¦®¶¶»¸¼¿À½Á¾¾Â¿ÄÇÎÑØÞâãäåæéêêëìíîíëëìíîìííêëëêëëêèççæåâãâàÜÜÚ×ÕÒÎÏÌÆÀÀÀ¹º¸±ª¥Ÿ—‰‡Š‹‹†}tt|yro~|tsouytnlmoogmlhg][W9(!#&$26@9<6(#26=?:42*+)2069231'!     + +    + .9JEIJPNGHCE?GEB?CDG=53  "'"" %%($'%$, ''+)'$+2/%(-2/789:>JDFMKRADD>:3*).69/)@b~~„†x^Phep„†wvy‚ujnssvvluggillknmnq_B2)$&8Yoqt}i5 $#)-.4;?C@=?JL     + + 7 $(' /.,"  + +$%'$!""',38?>11>9=?@??FLDIQOHHNOPLHEIAGJLD??CCC>AD;:54<;0749D?995.,%$"!,7?:(&N]@## + +    +  +DFVMLME>>>;33..25BE;<7:848;=244:.9<652*,1*('(# (,./%($   #'     +  *+'  + + 2/07'ORHEEIP\f`khcjeW@9HUPb`[J(/We_W^SK6"(Ebllwv{z„†Š‡‹‘‡‹‰Œ‘–§´ÊäîðóóðèÝȵ­¢•–•’•˜£¦±¬°³´»¹¼¾¿ÁÈÉËÏÑÓÑÒÕÖÔÖÙØ×ÚÙÜÝÛÝÛÜÝÜÝßÞâÞÝáßààäááàÞÜÙÕÒÍËÎÍËÎÊÊÈÆÆÃÀÀº¹¸³²´¶·²¯ªª¬°±·¾ÄÅÁ¼º¼ÁÆÉÂÂÂÂÁ¿ÀÁ¿¹¹¿Á¿À¹¹®«ª«©­«°®®»·¶³¬¬²¬¨¬¶¶½¾½¼¶¶ÀÄÅÂÁÁÀÀýÀ½±·¹»Â¿¿º¬¤ššž ¡¡£§£©±«³´µ¸¾¼»¼¿¾ÁÂÄÅÇÌÓØÝàâãåééëëìîììëîìîîììëêëëëëêêéêçææçåãáàÝÚØÖÕÒÏÉÊÅÃÀÀ¹·¯¬¥¦Ÿš‘‹…Ž‡vpx{{txystoonzpkozkmkkgoc[\MB,!(/0;=?67(*26?02,*0'/0783/&(#     +    +      2?HAEBKI@@?=>FC@<:6FI67#  +%"#$$ !&(# #)-$ & ))($'3,2-7:=@EEKTUCCB?A;A>5&3AXfmyx`:&3DSdwqgadYXPK@>DA<915>AFXettltuuf\]jvy†|mhfqzts„Ž€zwpw„~‚}‹Œ‰ŠŒ‚{~„‚†ˆ‰„}‡‘Ž†ƒƒ‰ƒ{pwpqnoisxrqqibbdOA>=3#*05<1-Fjˆƒƒ|oFOf`tŠ€ƒƒqx{~uumimnqlghgvr[@;1"'<]mpz}[#    '& 13<:>>BG?GC + +   + +  + "()-0"  )2/#! !#!(/253;2)54=AA=;EKJJKKTUHC@ILELLLJ5;F?>BE@G@5B?::949>:5+,+)$"--1*  ,SB+  +  +     5IISLSKDB;7:>.6/-5<=F>B?=:<7?:<8?534413/,((),-%'' '0+1&   + + + ! !$#!!"  + +  + + +/50"  +    !/+/6- >WSKDFAQS]jilghi\I:@QTXJC,/S]TYTTM7$&Nflmqrmv‚…†ŽŒ‡‹Ž’““´ÍãíïðïëÞů£™Ÿ™““’•¡®­®±´··½½Á¿ÂÈÊÉËÐÑÔÕ×Ø××ÚÚØÙÛÜÜÝÞáÞàààÞàáââàâÞßãâÝÜÛÚÖÎÌÉËÌÍÏÌÊÅÅÇÃź¸´µµ¹±«°¬­­¦¨¨¨ª¯ºÂÂÆ¿»¼ÀÉÊÊÇÆÅÅÆÇþ¹º»ÀÁÃÀ¼²°«­¬¯²¯°±¹º»´°±²®«¯¸¾¾ÅÀ½·¸ÀÆÆÄÁÅÆÄÁ½ÃÀ¸´·¹Á¹½º±¦  ž  ¡Ÿ¢¤­­«ª®²±´·º¼ÀÂÁÀÂÂÅÈÊÏÑØßâåèèêìììíììíîîïìíìëëëëëëêéééèçäããâÝÚÞÚÙÖÒÓÐÌÉÈǾ¹·±°ª©¢˜Š€‚ˆ‚|zxuv~yykqqzzsrtroilkjgfaaW?$)&&0;@<90*:9+2030-/572201*&  +     + +  +  +   "9CFFLA<=>AA=<<:=619ABE;2  +  '&!"%$!$"$*'**"')(%".%&,109378<=GRUQI<>EEAB>4($9^q}|w`9**,FXgjg\apfXZYFAC?;/58;8BRblopjs~lWV`p€†zto^owlvˆ…„‚‚|‡Š‰‹‰Š‘Œ‹ŠŒƒ€~…Ž‰ˆ‰…ƒ†‰†‘Š‚~ƒ„}souoirmjuqr€zoigdOE86-"*)0B2/Go~‚€u^Pbaar‚ˆ…~…w{~€ukproqrklppvnWF  +   + %&"/7# ! %)*$&##  10-2694606=>==:94@DIHEIOYWEA@KHFHEM7:ACAE79A@FHA>:6;@C84,%%!!46/'6R;      + + +/HILNLOFAB7357976>8@:;DC9@>@>;8763276286+,&#&!*.# )+#,%   + ) $$ !  + +  1+++)&)$   +  2)$@7 *G`]UOCJHH_jckfolcV8CROJ8)IY_ZY[U@*)Acojptsw„‰ƒ†‘Ž„‹’˜œ«ÏæîíîèÛǬ–’–’˜‘—œ£¨¬®¯µ»¼»ÃÃÄÆÈÊÌÎÐÐÔÖØØØÙÙÚÜÛÝÚßÞàâââãáàßßâàßâßàßßÝÚÙÕÓÇÄÉÍÒÐÎÊǾ½»¸²¶¶¶´¯¬§«¯©«¯ª¯¯­¬°»ÁÂÇÄ¿»½ÅÌÍÍÉÉÉÊÉÍÈÃÀÀÁÄÆü¼º»º¹·´µ³µ¸»¾º¸¹´´·º¾ÁÁÂÉÅÀ¼¾ÃÇÇÇÄÇÆÊÊÇÈÁ¼¹½ÁÀ¾¿º®«ª¨§£¢¤¨£¡¡žœ¥¥©®°¯®¬´¶´º»¼¿¿ÂÁÅÄÄÊÏ×ßãèìëëêëëêìíííîîìëìëëëêìêêéêééçåäâßÝÜÛÚÛØÑÍÐÎÇÇÆƾ»»¶°¬¬£œ‹‡~…}qswtzvsnmssvszumnljiijdaccR@,!#();=784+ 1/*+.46*52/-03/%"#   +   +  !)GCCDEHA=95:E:6<842:DDC?3#&!# #%&-$#% *10($$)+.($.+)'1;8DCBP[PMF>GKGD>5'%@dvvg^]E/#';<:621;BCHILFGKIHDGJ>GJHGAEA=IE6;?KM>;2/9@<5:6*'")>=*" &HW8         + "8ONKOJHBC<94/22D;==<=;;:98;D>?:>;5424.-*)($",(,+"&.*.-(  +  "'&!   +   $246422+  +  !7!2<)BL]`YOFCABPjkjhjkjcA9JJ;BX`_`WRA*+Fdiqrqvw€†ˆ‡ˆŒŽŠƒ‚ŠŒ’’œÁæèäÙ˵¥™Œ‰ˆ“›¡§«­¯²·¸¼¾ÂÄÆÈÌÍÏÎÎÓÕ××ØÙÚÛÝÜÜÝÜÝÞââããâââÞààâàÞàßÜÜÖÖÓÐÎËËÊÍÐÐËÆ¿»·µ±´·¶²¥¤¨¦¬¯¯¯±³´µ´¶³µ»ÃÇÇÅÂÀÀÊËÎÏËÌËÌÌËÉÆÁÂÂÆÇÄÅ¿ÀÀÁÃÀ¾»¹¾½¿Â»¾¼½ÀÁÄÄÆÅÇÅÃÂÁÄËÌÎËÊÇÈÉÈÈý»¾ÆÄÅÁ¼µ±««°§¨¨ª©¨¤¢ ¢Ÿ¥¥¨¬¯±°°²¯±¶º¼¿ÀÇÃÁÂÄÈÐÚáåçêëëìêìííììíêìëëëëêìëêëééëèçæåáàßÞÜÚÙÙÖÔÔÏÑÏÌÆÃÄ»¹´´­§£“Œ‡„{rsqyytypytswutnovrjmmfef__WB&$ $)2?:73# &,00-07<361*%!$&$  + +  + +  + + %@LKLABFB?A=FD=<515+7EHFE1'  + !'"$((&$&#")(.1*%'+.0'01-)177@>@MY\PMHDIB99887=BQ]s‚}tuzmadpw|€„{uldkw†ŠŽ‰‰‰„‹‡†ƒ‰‰‡…‰†…ˆ‰ŒŒŽ‡ˆŒŽŽ‹Š‰ˆƒxoxƒƒ€|trjionmpnjgijcXMK?8,%'+-(&-Lmuy~}fSXhowr~xyzrprvmknsujb^ltmjnrp_A9,%9Zoroph-   /@&'+276<;CBGH>DABFF@EBF>>?>6525/5A=;49=>8=:>60&16('!!""'0-)#'1'*).     " ""+* ( $   04;651%  ,' *6.  +)OKP^]XGA:FObfhgojleR=>@8!L^VZZF:,$/Oomityvt~†…‰Œˆ‚‰‹‹‘‹Šy›Ìκ©›‰†|ˆ‰Ž‹’›œžŸ©ª®°±¶»ÀÁÄÈÊÌÐÔÔÔÓÓÖÙØØØÛÝÜÞÞÞÞßàßßãäääâáâàÞÜÜÜÛÚØÑËÊÊÉÏÏÑÌÌÍÉÁ½¹µ·¶¸¼¹·®¨¢¨­´³´µ·´²²¶´¸¹²¹ÄÊÌÉÁÀÆÉÐÒÔÍÒÑÎÏÑÎËÆÂÇÇÆÁ¿ÂÃÁ¿ÀÁ½»¼½¿ÄÅ¿ÃÁÂÃÃÇÃÅÅÁÂÅÈÆÉÍÒÑÐÐËÌËÊËËÃÂÁÈÈÂÇÁº¶®«±¯«¬²´°°ª«©©£££¨¬®´¸¸°¬­¹ºÃÁÄÅÁÆÇÃÇÈÎÕÙâäèëêêëììîííìîêìëëëëêëêéëêêèæäääãâÞÝÜÛÙÖ××ÖÓÎÊÊÄÂÀÀºµ±« œ“‹}mmryyuxx|pz{xvtmmqlbk^ba_YG1$!&-8=?;1# '//,147::84'&1+ ++!  +    + +   +6GJOJ?=@CAIIA>8:/-$(%>CEG5/  '&("$ #%"&'(&+,-#(,+0.+)),0:9>EFG[[XGFGA>I@;,)27I]gosQ.+F[bleeg`MONRSIKCF8:@@HJPqv€ylw€zh\bov‚j^jqy‹‰ŒŒ…Œ‰‚„‹ˆˆ„~ŒŠ}|ƒŠŒ†ƒ“ŒŒŽˆzuv}„€{shaagqtltqgdgYLDDB9&5240&',Eh}„}TI]er}z{ƒ}wry|zu||yusg\eminvvvsP=-3Wjvsxn+  +  !+/+0,079=@HDLGL    + ,)'"    !'$# *%*'//++493683=E?;?FCFKHDAIBHPLBGBB><=FNF@BLJ9AEA6)()91++)#'4962"7MI&   +  +  + + + 6ISKJFE77792/*-59D@?A@?CB>?@>?<6DMXbonpnmeN=9701QUWUP6* (Xiiqtozsx†ˆ†ˆˆ†„…‡Š‰‹†ƒ‡‹‹wy‰‡ƒˆ…”™œœ¦¡¦­®°´¹¹ÀÂÅÅÆËÎÒÓÒÖÖÖÖØÚÚÚÝÝÛÝßâàßâäáâãäãààáßßÜÙÛÙÑÑÊÈÉÎÏÏÑÐÌÌɾ¸·¼¿ÀÁÁ¶¬ª¦¦¬²²··¸¸´¸µ¶´³µºÁÂËÎÊÉÀÂÌÓÖÕÔÕÕÔÖÓÑÎÉÇÊÉÈÅÄÈÉÇÆÅÄ¿ÀÁ¾ÀÇÊÇÅÈÄÆÆÊÈÇËÈÈÈÍÎÎÑÓ×ÔÖÖÐÓÎÐÑÊÅÆÃÆÅÅÆÁ¾¼´²±²²±¬³º´­­­­­§¡¡¦¯²¸·­¯µ»¼ÀÂÂÂÂÃÃÁÅÅÈÇÉÔÛáäåèêìííîîíîíìîìëêëêêéêëêçèçæåæäãàÞàÞÜÜÜÛÕÑÏÌÌÊÊÉüº·®¨¦”‰†qsw~vtxzss~y}rtnqmgdfgaa`RE7$ '':=;6' $85/6:5860/+%*'&)//  +   +%%!?IGNE@BHF;<>43-3(#+5845/ + #&%#()%2% * %)+0)-./*#*.19;<@HHX]PQTABNBB?*=eix^4"-7Ldmwrd\XLQZ\ZWFDAC<48BSi|ofq~gT_v…ŠŽ|dcbev‡ŒˆƒŠ‹„„Œ‘‡€ƒ‹Š†~x†‡‰ŽŒŽ†…ƒ|rq{‚zfWcupttpiiadVUHE>5/2/,*#!8Si~€„q[NU^quryxu~…}{skjlhfrklnsy|kL>-&4Wjpor\!  +  "$&),,4:77BAD?EI + +    +    "*--"   + % % &&&'),*215?GLBJCD=@D@BLKHGCB:;<;4+116/,%-84&$0BG7"$ +     + + %COLFECFB?8=4/->98<69?><;5;=:839>5+2-#)$$$'0")2*-***(" +  "& + .369.   +% ,*76 /:(>UXSbXD;>8)  !#*-&(  + +  *&$%#*"!-##'#*&+'&'2*#'#0647;$%3G`pvra_ZVfgWUPLMD@559CC_t„vkgx|k]k‚€ƒŒ…i]hnxƒ…‡†Š†„Œ†—’ˆŠ‘Žƒ†ŠŽŒ†ƒ…ŒŠ‰‡‰‰…‡…‚‡‚„‡q\_nssqnholmiYNA:A=646<:;::8837CC735==65.49<3/(',"$+%*$%*)0*+,)    !$#!!$!  + +   ,5<0$  +% +,# *9$  /8+5F_bc_Y>GHH^hnpml[612,EQM<1%!<\ghhlty…†ˆ††ƒ†‹‹ˆŒˆ‰}wjd_cfnt|ƒ…˜œ›ž¦¤¢§­¬°·¶¼¿ÀÀÂËÎÎÐÓÕÔØ×ÙØÛÛÜÜÝÛÞÞÞàáâãããâäãâåààÞÞÝÙÕÏËÉÌÌÎÐÐËÐÍÎÑÏÎÈý¸¼ÃÃÃÁÀ¸¶´³±´¹¹ºµº¹½¾ÅÈÊÍÍÍÏÌÎÏÌÊÍËÒÙÖÙÜÛÜÞÞÜÞßâáââãåäåæææåãÙÔÔÏÐÔÖÕÕ×ÙÛâåèçäææäåååæåãáãßààÜØ××ÑÊÅÅÃÀÃÂÂÃÅÅÁž¸ºµ¶´²³²®«ª¯­¯²·µ²³·¸»¾¿ÁÂÁþ¿ÁÀÁÆÅÇÊÐ×ßäèéìêëìîîíëíëèêêééëêéééçéèæçääãäãáÞÝÝÜÛÛÚÖÑÐËËÇÇĺµ³«¥¦¤zps}tvwvwpqs{pptnjdh^`TVSG$,&)1;70'&$(,09>36+ ,+//&%*+(!  +    '*+" "G[SLIIM?<88/) #'(+/  + + +#''!"& $%'3)+&),)##*'(0(-.,86<9@HR_ZOHPLCEEB*/Hajgv`A%/CUkysfa]ik_N?DJE>BC=<=?Rn€yrjy~thrv||ŠŠƒm\k|…ŒŠyw€~ƒŠ‹“”’‹’‘Ž‹‹Š„‡ˆ‹Š†‰„ˆƒŠˆˆ‹ˆŠ…}{pinrsumqeaba_OC;9:("%*&%(7Xn|y…zd\adkktw‚€‚~ogspoklkrtsumsss_F?3%.Ckjg_YJ + + '#%4038AQSRQVMJP + +     + $"$%(&! +   " $$$1(+-)-&-//7?@CCEA=>@IH?9EHBB?GLC=IMHCASQJ=37281<@<5.)*&;1-#1LD("!       7OTTIIH==@?=/28:=>D@<>0:JH<97263543=6/11'%(-).!%3*!1.*)$  +     $ #!    +"!781(  + +0  0 6+ ++95&&CSZbcYB=MCWerpkiQ0)0"1RIE<# "D[iqnryy€‰„…†ƒ’‹‰‡{ttZVZ_flyˆ‰’˜–   ¦¯®¬®³¶¿º½¿ÃÆÉÊÎÐÓÔÕÖÛÛÙÚÚÛÝßÝßßßààâáãããâãâââÞÜÜÛ×ÐÌÅÈËÍÊÎËÌÌÒÐÎÏÎÎÈÀ¼¹½ÃÇÆÁ¿¸º¸¸·¹»¹¸»ºÀÅËÍÎÐÏÏÌÎÌÍÏËÏÐÒØÜÜàââæçèèìîîïïðñóôóõóôôñéÞÓÎÍÑÖÑÕåêíóôôóõôòòòñññðîïíìêèçäááÛÙÐÉÇÃÉÃÄÆÇÆÃÂÂÈÁ¼»¹¸·µ²²±²¯µº¸·´²²µ»¾ÀÅÂÂÃÅþº·º¸»ÂÃÀÃÆÈÑÛãæçèêëëìíîìëëêèéëëêêéèçèéçèäæææääãããáÝÝßÚ×ÖÖÑÏÎÉÃÀÀ¹³°« Žtv|s{vqpqx~unuoqk_bcdc_\Q6#"" ! *-02+! "-97<@8-%---(+!)%+%    + ("!7NQSNPDBA80% #'/-(+    !"##(%+'&))-,#&'$)%0*)5.+12:5AEO[`SRNIFKEA;)"*=JXkrjH,(-4NbsvtfgqfOKJFC===9Serxrz„‚km}‚‰‹‰‰wf^gw„‰quxr~–•”‰‡‹ŒˆŽ‘Œ„ˆ‹‰„†ˆ„€„‹‰…ƒ€rrrpzxvnj[QL[\P@52,! ((#)@cqy}‡’bZgmrn{x‚tx~nolmpsriesmou|~yt_G>.&+SrqhkkP +  !%$ %487M\[\]_VMN     + !#!$'*"   #%%'/0'.)/-(0?FOHGHICD?<@?A==9>=<9CGB;BHH=::8;735=CCCKABDA=B@;8:>73330:4+00'$'-!)('#(.*(,(#"    %  ##$.  +   + +#76) +31 ,)(;%  593,,8IOUY\UKLHSavtkaD$<%9T?4&51Xinksq}ƒ}‰†ƒ†‹‰‰•‘…ype[\\[hlv•— œ¢¤¦©±°²´ºº¾ÁÁÂÃÆÍÍÑÐÓÖ×ÙÚÛÛÜÜÞÝßÞÝßàßããããâáââàÝßÝÛÖÓÊÈÊËËÊÉÇÆÈÍÎÓÐÐÐÐÊËÆÀ¼ÀÆÈÈÄÁ½ºº»º¿¾ÃÄÅÇÊÌÌËÐÏÎÎÌÑÏÒÐÓÖ×ßãææéíïññôôö÷ùùøøøùúùøøúùôìÜÈÃÁÈÎÉÔíô÷øúúùùùúúùøøø÷øø÷÷õóóðîëèâÚÕÑÏÎÍËËÉÈÇÆÆÆÃÄÃÅÆÀ¿¼¹µ±·¾»¹º·µ±¹À½ÁÇÄÆÆÆÁ¾µ°±±¸»ÁÀÃÆÅÇÎÕÚßåèëêêíîëëëêëìêêêìéèèêééêèèèèèçåãäãáÝàÞÚÙÜÙ×ÓÑÌËÅÁ¾´´±¥–‰uryƒvssvsxp|qpumedgd^bZVM/)!!#!,317!"%199?6*%+)10/)'#'%     +(#DYURGEH?B2" 1+!)/)2    "%!!#*-)$ ("(*.+&$++*#16.5-19;Sbq€ƒrp~‚wn|ˆ‹Šƒƒ‚xcVo…{…‡{{€…Š’‹…ˆ‹‡{ƒ‹‹ŽŽ‚‰ƒz…ˆ‡‚z€~||psqrpld[QJ_VN>64) %,'$"*Olurv‚pXdtltww€|~|~wswjflspnrsdcm{uxobC<-(-XhovysP    '))411TQJDGEB?;.467?=79;6:9/4.856+/.# $()!!')-4,)*"$   -$ $ !! +    +",61 (91"(.:  ++7$.>//BQ_bYNJFDLZjqb\74-/IS=,/Xfwvsvxt}ƒ‹Š‹ˆ…Š‹ˆŽŠ}rfQSU]Yjˆ’–œŸŸ¤«¨¨³±³·¼½¾ÀÁÇÅÈÊÐÐÔÓÕ×ÚÚÛÛÜÜÝßàÞààÝÞàáââáãâäâßÝÛÙÔÌÉÊÊÌÈÉËþÃÎÍÎÑÍÐÌÉÈÈž¾ÄÈÇÉÆÄ¿¿¿ÄÉÎÊËÍÍÍÏËÎÌÏÒÐÔÖØÜÛÜáåéìïñõö÷øøúùùùùúùúûùùùùù÷ôïàÎÅÀÃÈËÉÏçð÷úøùùùùùùúúøùûùùúúùúùùøõòëâÜØÚØÖÔÒÒÍÊÈÇÈÇÈÆÈÊÈÇÇÄÀ¼ÂÁ¾º¹º¶º½¾ÂÁÂÇÇÁÄÀ¼´ª¬­¯³·¾ÁÂÁÀÆÈÌÔÜâäæèëëëìëëëëìêêêéééêéëèééèçèçæèæâãäããáÝÝÛÙ×ÓÔÐÍÈÄÁ¿º¯« ‡€r~wrqnsttvkmlnlfh\bb^VZJ0 # &(:3 /68:3*#&+215*$%  + +   &# "C[WNGIF;.$  )#-2+)'" + # ')$%"*)#,'&&%%("&+*%/0/23+.087CEN^^UOJICNKB7 +JPbolm\7)!&9MgppghVLMOSPDMHFE739@L[ivz{nw†xsyvƒ~€„‚{bVn~„Š„ˆ†ŠŒˆŒŒŠ|}}€ƒŒ‹‹Š‚‚†Š‡…ˆˆ‡‰ˆ|……~vvprqpukVA@PZNG41*$%%"!-Pmwzƒ~`Ramjsvsxs{qjpfifdip|xoeilvkqmP@:+(0Lgtu„}N    %'%,1+1D]\c]Z_TIM     #% #%5''+ + " &'"+1**08:;7CGFGFLA/;;47,!":;B;6668/,*,""(/5& 7II9,   + +    #7QLIFAE@=@5)(4IKA;A@A?>@E=>73009572=81-7/#'%)(!(2/5+&91(  "($'   !(  +    + !#2%   (=;&(-<2 7,%/41&;W`]`bDNCRWdlgW2$40HV>& #Tporvuqxvz‡‹‹‡ƒ‡ŒŒ‰oeYMW^jt{Œ“Ÿ ¥¤¥¯®³³·»¾ÀÁÀÅÈÈÍÍÍÑÒÓØØÙÚÛÚÜÝÜÝÝßÝßÞÞßâãâáâãäáâßØÙÒÇÉÊÊÌÌÂÇƼ¶·¼ÌÏÎÏÌÐÍÈÉÊÁ¿ÁÅÌÍÊÆÇÉÌÍÑÏÐÐÌÎÏÑÐÐÏÑÕÕØÚÛÝßããçìïô÷ùúúùùûúùùùùúùúûûúùøõñéßÒÈÇÆÇÌÏÎÎÚäñøøùøùúúùùùùùúúúûùùùùúùù÷ñäßÞÞÞÛÚÙÙÖÒÑÑÌÉËÈÇÉÊËÇÇÇÈÇÆÄÁÀ¼¸µ»ÀÆÅÂÁÂÆÆÀ¾¹¯¯°«³´µ¸À¾»ÀÆÆÉÐØÜáæêëêéêìëëêêéêêééëéééééèéççèçèçäääããÞÞÞÛÙÖÕÕÔÍÊÅÀ¿¸µ¯£y~vqlyupsurhomhlocihf^\X@' $ !-/ &2D93)*'.890&"      *%!(Q^PJGC91%*3-% +2,).-"$ !%&#!"+$(-+ "%*''($'&40,1+)(,45:JO^b`VLLBRI=8//BWiqqlaA3'$6OaprlYOIQ`_MGKNON?>;6:>?KG9?RE9;?GD=?L<77:2@IEC2+323)""#$/22':NI/#   +  + +':NPH=>A=:=93-4=@@E>=DB?BA?@?56EO]MBHHC>IA52AED:688C?AG@@EC;'12*(%)%,.%$(6OI3$!   + + !  +  .@C@A6/78:F;-79>?;@NIC@@D=?E;842393710/(%(&/%""-,%),-()9;2" + ##)   " (    +    !@RL,".5*  %9/1(->83.B\e]hWHE>COVP.)AWTW\PX</Jfmuys~‰€…ˆ†Š‰“”’ww_^]ev€ˆ“Ÿœ ¢«ª°±®º¸¹»¾ÁÃÄÅÄÅËÍÎÌÓÑÕÕØØÙÚÛÜÜÜÝÜßáââÜßàâââßÝÝÜÛØÕÐÎËÉÊÆÇÄÁ¼·¶¸¹·¶¸ÄÎÐÒÓÏÍÐÏÑËÈÆÈÐÐÓÒÏÏÑÓÐ×ÙÙÜÞãääåçëíîððîîïó÷úúùûûûüúüüüûüûûûúúùøóíçáßßãçìïóïçãèó÷ú÷ôðññôúúûüúüûùúûúüûüûúúùùúøóöø÷õóñïîîíîìêçäâÞÛØÖÔÎÍÏÊÊÈÇÆÿÂÁÅÊÊÆÆÈÇÆÇ¿¹¹¹»¹½¹¸·µ¯±¸¹ÀÁÂÁÃÆËÖÝãæééééééìëëëëëíëêêêêëëëëééêééèçåååèäáßÝÜÜÝÙ×ÔÏËÌÊû³¥ƒsrtxuyrojonsshaf`ik`R?*! '2!/94$)1,)563($0%*.&!  +   + ++$  ")#B]^UJE<;EVTNDD=590$ ##'%%(% ")!$,+"!'*$%&%&('&)&*04-+3.1413EKOc`SMMMKKEG@2*@_pr{z]:$$%9FasijY^ZPQSMXPJL@898?M_kxrkmsvmnq{~rmuƒuj]dot‚rq~ƒ‚ƒ‡Šˆ{‡‡‰„}xoz†Ž‰‡ˆƒ„}Š‹ŒƒˆŠ‹ˆxpltwwvxni^cbMC636##%*+-GQ`z‚|jY\dhourrtjhl||}y}xrnryuvouzxundMBA+1Gco~tjW* + $+*5=BOX_da`bVMKM + H+  $)%"  + !)% "'.(%&480482>B?<SgJB;1=:618=B>=@GFCB9:8:<=?I>=3,04/43//$%%(%+)#+#'"$$&.6=+#%  +  % $  + +!""!!  +  + + %)!! + + 7PX@*  $( 16  *'#+ :A;4,AIY^faG>HGIC;##D^fm^RT=)*Nbjw}„…„‘ŽˆŠŒŠˆ~vskntsƒ‘–¤¤¨¬¯­´°¶»½Á¿¿ÃÅÇÈËÊÏÑÐÑÐÔÖÖÙØØÛÝÛÙÞÝÞàáãßßãâáâßÝÛÛ×ÖÐÌÎÍÌÉÇÃÁ¾»·¹¿ÂÁ¹¸¼ÆÍÑÏÒÐÔÑÖÔÐÉÈÌÓÔÒÓÔÏÑÕÙÞãäçëîòñòòóóóòïóõùúùúüûûûûûüúüúûüûüûùøúúõðéåêíòöøøø÷ñëïøúùûú÷÷õóóöúúûúûùûüúûüüûûûüûüùöùùúùùø÷óñòôòóòñðíéæáÞÙ×ÔÐÍÐÌÇÈÃÂÇÌÍÌÊÆÇÅÈÅ¿½¸¹¾¿À¼»±®¶±±¶º½ÂþÅÆÅÍÙàãæèééêëêëëëëëêëêëëëíëêëëëëéééèèæçæããßÞÞàÚÛØÕÐÐÍËÂÁº©}qrrvnjnwwvrqkgcdiaaaT6## &/0+&'$'2'$1,14/40$)$#,,! +   +1, !$$"*C^YOFGCPMKNEA;0./7)$  ! *(%#$ #$#&&#,51*%&),0'-&''*0(+-23-/0;DMYUOHJPILMKH4!/Vlsxt_>'%#3Mbjj`WkibXJGOFPC>8=?:Thnrtllnzsmnk`cl„‰xaW^ix{ttr~„y}‰†€}…‹x{{{ƒƒ‚Š‰~€…‰Ž‰‚…ˆ†…uqqtusvqjkgYH54)$"$$$4Tcvƒƒj]Yddktxyinuu€|qrzzqqy‚ztutx}tlQ?7'-Fhvƒzu\0  ",*1CFRZ][[cc_NQP + Q-    +    #(),#    !$ !'%)-'+/&4722.85><3OVC4378:366I>9*410-,04)"5N,80 *@OE.&' +    + + *DG;0 ;=1430769??;D?=FC?;A=95147163//!%"#/5/$'$$!'215( (.+$-" &$$! + + +     /J`P0 '(<* + + 0 &A7>-*3BZc`cNAH77="6Xcb_[RC+ !A`jsw~€…„…‹ŠŒŽ‰Œ„|wukpw†ˆ‘•‘Ÿ™§¬­¯°²³º¶»¿¼ÄÄÆÁÇÈÌÌÐÑÔÓÓÔ×ØÚÚÛÜÜÚÜÞÝÝßßßÞÞááâÝÜÛÙÓÐÍÊËÍÍÉÈÀ¾¸¶¼½ÀÇƽº¸ÅÌÑÔÕÓÔÕÑÑÐÌÌÎÒÓÔÖØÙÜßäéîñõö÷ù÷ùöôòððôøúúûüüüûüüüüüüúúûúûûüüúúù÷òîðö÷úúúùúúöðóúùûüùúúùùöôô÷úøøúüûûúúûüüûûûûù÷úùùúúùúùöõôóôö÷ö÷õñîéçäßÜÙÕÐÏÊÈÈËÌÏÉÍÈÇÌÆÄÁ½»½ÂÂÀ¾º±¯²³¯²·¹¿½¹ÀÃÅÃÌÖÝãæçèêìëëìììëëìììëîëëêëêìëëêééèçèéçåââßßàÞÚÚÔÓÑÒÐÇÁ¹©‰‚}rfupco€ttpkjdhh_YeYYF3$ $%5/).&%,))&--/6.,0!#+    %45  #&$! *M]SJFFPZI@>6.&&%'57&-  &&(0$("  +&! ((#43--$$'+0(-$**/32,3,)./-<>FT`VNIJIQMKM4.XpqnofE0*".AZltpenc\ZOKG@DB8?=9@Xglo~†rw{xn\RS^m‡‰vcZTcequv~}ypr„~~|x‰~wƒ…€…€wzˆ‚Š‡Šˆ„‚‡‡ˆ€wrpy~€|pijgjQD6)!)&!%(9Vi|„…xdT[dcor€xw}ƒwtmuvup}†zpuoo„€vkRG:'(Fd{…„xX& !/4:HOXZ_c\hgaQSX + E    +   + ##(1(! " ! "#$,4+,59/-75:;6>6=@D>914;>07969:274:46:C4'.=833191+'$!3W"!#!$&0C?5$" + + + +  +   6AD@("40/1/2C?>A>A@?EGH@5=?931.81224/"!$%"'/0)!$$1271'" 62. +  #$ + + .+$  + +  !   )H]O<+&'1 +*!$,72A3(4P\^_H1710'$C^^^[VJ2%8WipyzŽˆ‡Šƒ††ˆŠŒ‰ˆy~xusƒ‡Ž•™Ÿ›¤¤¤°­«°¸¶º¾Á¿Á¿ÅÇÆÈÉËÏÐÏÑÖÖ×ØØÙÚÚÝÛÝàßÞÞßááßãÞàßÞÛ×ØÓÈÊËËÍÊÈÇÁ¸µ·¼º¸¾ÄÆÃÀº»ÃËÑÕÔÖØØÔÔÒÑÎÑÔ×ÚÜÞäèíîôùùúùùúúøôñóöùûûûúüûüüüûûúúüüûúûûúûûúûùùôôøúùúúúùùùøùôôùùûûøûûüúúùøõõùùùûüúúûûûüûüüûúøøúûüúùùøúùøøõ÷öøøø÷øøóòîêçáÝÕÔÏÑÑÓÔÓÎÍËÐÌËþ¹¼ÂÁ¼¿¸«§¥¬­¯²µ¹¹º¾¿Â¾ÁÃÎÙáäæçêëêëëìëëëêëëëìëëíëëëìëëêëêééééåââáãàÞÜÙØ×ÔÑÍËɼ›Š„rwztnkpqrojmoqhijb^]]I,!$#/3232'%0"+((*9817-!,/ +     ".49 3Q^KBKEVRF8"*)/  +)(!" +     "&(5*)$$+()).*"+..0222,.*463@ROWNJHHGJIIO@)'J^linkQ=&!#>WglimmZSd_GEGJHC@65EWWamy~rqxvo^\co‰…xiU@L]mrvsttqsu†tmx‹†tt„„ˆ…}{‚‚‰}ŽŒ‰‰…‡†‡…ƒ„zrr„‚}pdbcaSA2,'""*,=Tdv…zrhS]fkv€†~ˆ‰‡xpxt‚qpoxzuqsuu{z~gKG7#,Ms‡‹uN"  $)6,9ET`c^bdag`ZSZ  +        +! /. "   "!$""*31+03834,-8=4;58>B:9=?7289;@984.863-62+*6<51,<84* I.$"$;>7-+# +    +  + -AID@,  023)3=GB<;D??HH9?2.285436@=:3''!.' '$#*/#% 17305"4:9( + +"  #$) +  +    + +!% +  #CVVD $!/%  .%0154$$@VbP("*.00W`dbaL: )Onpsx{ƒ†‰Ž‹ŒŒ‰‰†ŠŽ…wq‰‰”—™££¥­³±±³¸½¼¿½ÀÀÀÂÂÆÌÌÍÌÒÓÐÖØÙÚÚØØÛÛÝÜàãáßßâàáâáÛÝßÛÙÖÐËÊËÊÈËÆÄú¼»»¹­¯¹ÅÉÇÁ¼½ÅÍÖÕÖ×ØÙÙØ××××ÙÞâçëðóøøúùúûùúùøôðï÷úûüüüüûûüúùúùøøúüûûûüüüúüúø÷øúùùúüüüüúùûúööùûûûûúûûúûûûù÷÷õøùúúûûûúüûüúûûøúûüùûûúûúùúúú÷ööøøøùùúøøöóðëåâÞÙÙÙØ×ÓÏÎÏÍËÁ½¼¿¿ÄÀÀ·¬¤£›¥¨­²«µµµ¿À¾ÂÂÆÍÔÛáæëëéêëëëëêíîëíííîíìîëììëëëêëëêéçääåâããÞÜÙÙØ×ÔÏÌǺ¨sy|vvlpsrkjnilfgdib]_S;2# "79:A0& '(*.=4+*# '6)!    + *;C1  + +" IZ`[Yce]j_YQS +        #&%!(0)  +'! "!#*%$,1&*.,/3=4::8@@498A;15@>;?D<>6845$&&*0*)33+14851,"!G%&! $AI9&(!  +  + +    + +1BEM=. 4:7.3BJ>>AF?IGMB==@9>225;>5,'," ,!&&-.-% !&-/(1($%275- + $##"# +  + + +'"! (#&9WWL3(" $2  ,.+1'!"6U^4%,2.&$Jdd[\YD*:alry{‡‡‡Š‰†‡ˆ‹Žƒ„}ssƒŽŽ“•¡¡£¨§¯¯²¶¼¹º¾ÀÀÁÆÆÇÇÉËÏÏËÒÓÔ×ØØÚÙÚÛÞÜÝÝßààáàáàâáßÚÛÛÙÔÐÍÊËËÆÃÇþº¸´¯¨«¬´ºÆÊÇÄ¿»ÂÐÕÖÙÙØÚÜÜÜàßáæëîô÷øùúúúúüúùùøôñðöûûüúüûûüüúùùøúùùûûûüüûüüûúøøùüûüúüüûûüûüüúöõûüûüýüûüûüûûûúù÷÷÷øúûüûüüûûûûûùûûüûûüûúúúûùüúùøøøøúùüüúùúøöóïêæâÞÚØØÒÓÐÍÊž¼ÁÅÈÅÀ¸®«¬ £ž¢¤«¯¯²»¼ºÀÀÃÅÇÎ×àçæéêëêëêëííïîíìîìííììëêêêêìêêêçèççæãâàÝÜÜÚÙØÔÒÍɽ¯“|qzsrmngkonnjabiiaUSP@&%-5@=6/!%.,42" &!%.'"  #7=>(  +!!'!&>LMVINLI9  $/!$#&  !"(,+#$&$)$'/+4-*130.-))-1/)334DORSZOFHJKQJIH;*.=hzq`=$%--A]cj[[fc^QRUG=ED@7:=?AYhourkwubclt†€rpYEU^rka`lj`kru|ruƒ‰…‚‰ˆŠŒ’ŠˆŒˆ€‚Šˆ‡‚pnu{w{ƒŠ†upikhcYP7,'#+*)/MW_^_ffd]VTQN +   +      + + + +   +%1!"#,%"!  $(!""%***'&0%%)'23<8CG:8>:;<=8.-5D>>C@>8500*,"&,'#0:'&/50-.9U(-* )GG/$"   +     5PSMB5*$#(6505:  6Znkm€~ˆ„‚ŽŽˆ‚ŠŽ‚ynxˆ–žž£¦«¨®¯µµ»½¹¾¼ÂÂÆÈÇÊÊÊÍÐÐÑÐÓÙÙÙÚÚÚÜÞÛÝßÞÝàÜÞáàâááÝÙ××ÏÉËÏËÉÇÄž¸µ¹°¡£¤¦©®»ÈÈÊÇÄÂÃÒ×ØÚÙÛÞàââåêëðöùúûúúúûúûüùø÷øøøùúýüüüüüûúùøùúûüûûüüüüýûúúøøûüûüûüüüüûüüûüûúø÷ûùüûûüüüüûüýüüûúúùøöøúüûúûüýüúùúûüüûûüüüüûúûüûûùùøøùúùúúúûúùøöòìéåßÝÛÙ×ÕÎÇÃÀÂÄÌÊļ³¯¯¬«¦Ÿ¡¤«°²±¶¼¾À¿ÁÅÅÇ×àåäèéêëêìíìíîîîîííììëëìëëëêëêêëéèèèæäãàÞßÞÛÚÖÕÒÎǽ¦ˆ€vnukmmrofhmilge\Zb[G(#18<@4' "0?72%(/  +  + + ++35@?M]fmuww„|_btw~‹…€zdNM^^aVQ^dglntw{w~‹‹‚‚Œ„ŒŒ‰†Œ‰‹„…‡Ž‹‹ƒxxzwr~ƒŠ€vkhfigVF90%'%(->iu{‡~}lVgjrts}|~‚qv~z{zpiook‚|t|xpVDH8%8^uyƒŠM   ()11@K^^]_ecZTNGOY  +   +  + +$"!'")' !  !$%)**%)0,-85/665>B9339>>2587@?=7A??80341*&-.+45/%/--%M4"!,1NH-' + + + +   AYZK@923::743;EBGC4AB9673/&..'5/3267+-6''l!4G9%  +  +  # + + DO[QC>8BB>240;HK==:9@ACF@??;;;1+,6;<9))'+ $##"&)%-,!#!(*',21!&:?3,   +    #"     +!" 6))!$#>6;(!2.'  +  49?:  + #$!@X]QN>E3 +  (. + +):2&  +  $$-')##--6)3/0.10%-'/2/.*24<BN\]]kv…‚y|~rcfo}„ˆ…‡sfRKWWXTS]id\_igmsnfqtihkp~†‡{„Š’Ž‰‰‡utq|xz€pc\de^QC9)++,,>\{„ƒ€l_cbm‚}|qurztxyvzx€znmqklvqsw|gHG=("9epvup_6  &')1;KR`^T[`]d_VWQ     +     +#""J=  +!!"!!&.+'#&)-8918=:=>5:==31.7><68026/*%*577>=93021+)T8% &;E7$     +   +0JLPQGA<=>>039FEGP@<84:@EAA>8<>?;741=2++.'*#)#'.$&!',&**+&*3'/,8;0     +  !' +  !(%!05-%" =NRJL3,5 +  587-&+!AQ2./-$*A[hkdWB.5(I\hu‹ŽŽ’Žˆ‡€†Œ†€zrjx„‘‘š™—Ÿ ¨©­®´´´·º½ÂÅÅÈËÊÏÏÏÎÒÔÕÕ×ÚÛÚÚÙÛÜÝÞàÜàÞÞßàÞßàÜÞÜÚÒÎÍÌÊÊÍÈÁ¼·´®¤¡¢©¬®°¶µ®¯´¾ÇËÊÇÅÅÊÓÝááæêòöùúûûüûüüüûúù÷øúüüüýüüüüüüûûüüüüüýýüýüüýýüüüûüüüüüüýüüüüýûüüüüüüüûùùóóúûüúûûüüüüüüüûüüüüüüûüûûø÷õóñóöùúüüúüüüüüûûüûûüüüüýûüúúùøøúúûüûüûûûùôíæãâÞ×ÓÐÉÊËËÉÇÀ¼¶´²´¯²°®¬¥¤§«²µ¶¹¼ÁÂÃÈËÑÜáæééììîíìïíîîîíìíííìëëìëëêëêêêêêéææåããáßÝÚÙÚÖÐÇÁ¯Ž…}xostqrqimieffchf^\N6 $#49<<3$+.  "  + +?NB0 + +$!"%=PRIA>:# + $.'  + $::, + +  &*'($')53.+.-*2,)"'.,/+687>D@KJRW\OBBMWXUL='!1\|‰ƒ‚nR5(2FUacmlcaWT\WKOFA9=86/=JEEDIKB6:7AA=???9=B@?=>42,3-$-!!,,("*&)(13 *5-04,0-$ +-43%(#    $  +""!$%& !;:>+& !/?KM?&&. " + .44%.2?XC '3%#?aedg[F/")!!Chqo~ƒ‘Œ”‹ˆ„‚~‡sdrŽ‘• Ÿ¡¥¨ª¬¯·¸¶»½ÀÄÅÇÊÍËÍÐÐÓÔÕÖ×××ØÙÜÛÝÛÛÝßÜßßÜÜßÜàÜÞÜØÓÉÉÌÌÍÈÿ¹´°©¡Ÿ¡©­¯®®³±´¼ÆÈËÉÉÈÉÍÓÞæééíõùúûüûüüüüüúùøùùûûüýýýýýüüûýüüüüýýýýüûýûüüûûüûüüüüýüýüûüüûüûüüüûýýûúúöïîõúûûüûûüûûüüüûûüüüüüüüûûûú÷ðìéìôùúüüüüüûüüüüüüûüûüüüüüüüúùøøùùùùúúúù÷ôñòñðêäÜÒÊËÌÊÊÊǾº´´´¶´«±­¥Ÿ¡¯°®³´·¾ÅÂÅÆÐÙßæéëëìïíîîïïîëëëëëëìëëëêëëëëìëêêèççæäâãàÜÚÚÙÕÐÍɳ•tw|rmpsllmnmhefhefcWF, ##'8;<:," &, + %(! :HL>.   )(!'>GN@::*  48  :C>)  + #(" *.252.34&"0(!$%*41,*207:BJKW]gWHKIYZ_RC4"*Ywˆ~}rT3,%3Sftqjkh`_a\XWN@9<5IZ\`lruuvsugfhz„Œ‡€†w[PV[c``jlfpmhwqqz{vx~ƒŽ‘—’Ž‹‘“•’‹Š‹†ˆ‡uk[L[opjgUKF[f_JQ@2!!"'.Naj}wvdJGaqs~…}vwrqp€€yuzsjjwqmns€zoLB8,)Mnym_jg7 $.+'1>>RY^[_aeYSVOW + + + + +  + +    + '&#',""#" %!  + +"! "+-,,+/)+279;4:ACBCC5351+=E757:7@7/,85-)30*0C<@9/(& %8('&$:H;)&    +        "9LRMNK=<@><:;FBGEELE?=6:;81>;9@;43@=1+&00#+& $"%%%##) !,'! ""'7101- !   .BCA8   "% #     %+# ,?<;7'"&!/@>6/ %< $&-& + + #=CK=% + ###&#:IM>@6"  *8# 6IG3  +   &%'--/,*+40').)"(-6++/324/6C=FW]]cUQV`XYWL;*-Vtstwu[8-'/MrzqkjdfegaOLB=AAMcdd`UB-!!!0Xz}ˆ~jUYdn}„‹Šwy†‚~ˆrrwtndmvppqs{ztcF;2!,[oqmjvk9 +     %*&.682/;1/445682>51&#,5, )"!#)!)%%+,$&-44047& +  +,4DK@0! + +  +##  + " +  !(&!:F;?>+%# "(5?@2$9 + ! &*71/' 9M7!.3(=^hje[A%BS!#1Xij{‚ŠŠ‰“‘Œˆ……ˆ‚€€po‚““”’œ–œ ¤©¯§®²³¸»½ÃÂÄÈÈÌÊÎÌÏÔÔ×ÔÖÖØÚÜÝÝÞáÞàßÞãÞÞÞÞßÜÜÜØÕÑÊÌÏÌÇƾ¼·±©œ—š¤±¬³±¯¶¸»ÁÈÉÉÊÈÉÒÝäêðöùúúù÷øûüüûúùùùùûüûüüüýüûüüüüýüýýýüûýüûýýýüüûúúüûüüüüüüýûýüýüýýüüûýýüüüûùôëçæéð÷ùûúüûûûüýüüûüûüüüûüûûûûüüùòðóõùùûüûüüüüûûüüýûüüüüüûüüüûüüú÷õ÷÷øøøöó÷úüúûùøòêßÚÕÐÏÍÎÍÇ»¹´´µ¶´±§¥¬±¶¶ºµ­ºÀ½ÃÆÉËÒÜäèëìíîíìíîîìíëìëêêëìììîêêéêéêèêèçæåáãààßÜÙØÙ×ÑƧ‡~zxpoupmrspikig\\T\Q;-,48:A/" "(0(#.  6AD7* ! # !'HTGD>1 "$ +-DG8 + '-,'-*4.-41.-21.)?-%.51635<=@GSWXeZOZ^\\RSC3&B]jwƒz_;-#)F]amic_\`cVTP;@<:BHESVTZ_hpnr}sehp‚Œ†‡‹sYJIUPS`ejojkvglqtponuyŽ‰…„†Œ‹‹€ƒ~†‚‰ƒƒ†ymOKp‰xh]OQY\_adR='"!/VvŠ‰„~oW\eo|†‹w‹‹ƒ‚{||{zmegmwoquxxsfE;4%9eurmx€b- + &,).;?>@LY\c`UT]YZX   +  + + +  "$!"'(#$ !!$$%*29:,.151>>FD<6740).5/6-5/39?34;60*,00)&+2>& @A2!    + +  %=TTTLRGBB<:9;=AOMHOXPA9@757/,8<14:4/'%$.*$'(,"#$*!!%(/&*0- "*.67834  +   (%*# + + !'+(&',RR $5,(1S\ddYH/Qm%$\ehv€‰Œ‘‡‰€……zry…—™–™Ÿ›¡¤¦§°°´¸´»»ÀÆÆÇÇÇÌÐÒÐÒÕÔÔ×ÙØØÜÝÝÞÝààáßààÞÝÜàÜÚÛØÕÑÎÑÌÍË¿º¹¹¹·¨–›¥«±°¯°±ºÅÇÊÉÇÉÊÊÔãéïõùúøûûø÷ùùûúûø÷ùùüüüûûüýüüüýýûüýüüýýüýüûüýüüúúûýüûûüüüüüüûüþýýýüüýýüüüüüûùùöñêèïöúùúúûûûüüýûüûûüüüüüüûüüûýúúúúùøøøøúüùüýûúüüûüûûüûúüüüüûûûûüûúøøõóóðñöùúüúúùùöðéá×ÓÑÍËËƽº¹´¶µ´®ªª¯µ¹½¸µ³³½ÀÆÊÊËÓÜåèêëëëííîììíëëêìééêëëìëëêêëêçéèçæããáââáÝÛÛÚØÕÑ¿¤ŠŠzuxntil}lkpqd_ddc\Q4&#-3482-(# !   1>:3& (% /KWLF9)  + + +" +HN@% +  +  +   +%-,'2(',650$,292$#:0(/-32;?GIWTVZWLO^`[VZJ4#.Wo|~t^>) )AOdkf^b^`XMKG>@?=@?MLMRZfjppu}{khoƒ†ƒnYTINSRcelfbf__nttlptslƒ…}s„„€„‰ˆ…ˆˆˆ‚†u]\jzre[\c]SMU\N7'!#$*Hk{„soY\bbn‚{†’†}|v„{ggiikosqqpykGC8.?hojozwM   '0145?>CJT_dc[_^][W      +  +  %(&"#%,-&'! ' $ (3410.-79;BA=1/744+0-./2039:34+4*,1((0((4SC  )J?-&        &FPXVSBH?;=A-.28749187=2 )*',+)#+##&%")#$*-( '+4244&  20    # !  + +$#/,=IK?>+$$221'""-0CGYWW_\YMOY_]]H>+$Gy|xtaN,".7Uih`bge\PEHQJC>?=>GQMX_cmvz{x‚qjs…‹tk]OOV]flkgcf\cpslfts_lyqty€…€~„‡‹„z‹„„……yf^bgif\[^\RU_\I3'  $(Hgy€†zjLIHZnw}uyzzwslsqcdggdkqoqvzw`IC1,Efkw|zpJ    &*0.;??HGO\aea\V[TT +  +    +   ,/00!'0&+ + %" %- #'&75/13::I>:@46/692).0+/1242708/*-*&!%'#4--=!.I6-, +    +  + + + 2QRVMPE??B@:<5//EHGEG>440-.--,%-/*,,17DLIBA>H>A?@=705634;>:1,&)1,-$!!*&!-*"+0&$(3+/-"   #2-&!   * % +!)"%6JID:6+$3/!# "-,8S6*1() ,P\aa]F6 +^gkpz‡‘’Žˆ…ƒ‡|ro|Š•šŸŸ¢¬©¤§¯³±µ·¾¾¿ÂÃÅÅÊÌÊÊÎÎÑÕ×ÙÙÛÜØÚÝàßáÜßÜáãáÞàÜÝÜÜØÓÐÓÖÒÐÐɵ®´ÂÅÇĺ³°­³¶»ÃÅÇÈÌÈÌÓÝäéðöúùùüúùûúùúöìéêñ÷ûûüüüüüüüüüüüüüüüüüüýüþûüüúùø÷ûüýüýûüüüýýüüüüýüüüüüüûûûüüüüüüüûüûõð÷úüüüüûûüüûûüüüüüüüüüûûüüüüûûüüüüüüûüúùõôøøûüûüüüýýûüüüüýüüüüüüüüûùñèâçîôøùûýûúûùùù÷òíáÙÖÑÍÌÉÌÇÁ¹´´¹¾Â½º»Àº¿ÃÅÈÈÈËÉËÖáäéêìííììêììëêééêëêêëëëëëéêçèæääâãããáÞàÝÛÚÙÙÕ̺ž‚‚}ururmpqmjlcicZXYI6"/164F2 #&  +   +  .1!&# -/+%$!"! J\JF'     ") +!:NRJ   #%045)$-.+01'*44,*/711/(865>HIDRaaYJSVdV[UN2"Kl{ƒ}s\;&)BWjqxs_T[`dSXXKKEECUM?FQgwzsu}xlpuŠŽˆ|lZJEGNTWWbeecqtuqzkbhsi\osrqswƒ…~€zrunt††~~vvv]>DMieb_Q6&#$!*McrxtgTEJSbpwyw{~xs‚tuqrtnrtvpuuuqkS=B7%Dl€~…}sI"   "0-5=85640,3#!21)/+2-4437<83-,"((##+* CI3## +  +      &12;;1,+.?5/280*0*'&1*",&)))!%1,$#'% #*.+20  )$&  +   + $" #'   %!"'!-DF=@7-$!( # !!$#0&)RE.0/+(%6WbifR=)AG@:=6+1.2#'5.50,8363/3180+0.!! #'G@,    +  + *HTOKOPGKB@:6:JJILLKKC8704+).362.145/-&$+10'##! (!#+-%)% #%-)$  + '     ## "  +&$$"$%CQLGADICOZadb]URXX    +     + + #%  + $#$+*14/07=:=@<544374($'24762:;35663(!0.( '6-$ 4M.  +     + + 2OZRLRJOG<=>><:CJHKD;AA>4,,%1)(*,232*!+&#,1&$!! " $&"##`%W4!/)   +  + +    +"# +  "&**1ISNB:.+.+ $  ## $'+$$!)J8%,)#'@[df`I4%P^o~‡Š‡‘Ž‘’“‚„zxŒ•› ¦¨«®®¯±µ´¸¾»¿¼ÁÃÄÄÅÇÉËÊÎÒÑÓÔØÖÚÚÜÝÜÞÞàáßßàáßÝáàÛÚÖÒÑÕ×ÚÕÒÔÑÒÎÆ»³¯ÃÆÊÉÄÅÉÉÍÌÉÌÐØàèôøúùûúùúùúøöñëèçêîöûüüüüüüüýüüýüüûüüüüýýüýþûûüýüüüýüûûüüýûüûüûüüüüüüûüûüûúûûûûûüûüûüýüüúøíçí÷üüûüûþüüýüüûüüûüüüüüüüûüüüûüüüüûûûûüûüüüüýüûûùøùûüüüüüûýýúûüüüüüûùùùúüýüüûúùðòöêòùøùùúúöîæßØÐÍËÍÍÊÅÃÂþÁÀÃÇÆÆÈÉÇÆÅËÌËËÒÙáéêëíëëìëêêêëëêëêëêëêèêéèççæäãæäãââàÝÞÝÛÙØÖÓɶž††…ƒylqootqjnljgZZN= "072@=/!'$  +  "$&!&#+*!"&$N_ZD*     +  & !1PKA   '($'D9')301054/31(033048:7<:;BU^\`RGPUZ^bUK.?MNfˆb<,#)GXdibnia`XCGNPLDXZTIALafmoytqzshnŒŒŠˆziSPhlx~ˆ‹†„€€|‡…†‰‰ƒˆ‹Ž‘”•š‘Š{€€…ztjbOACSQE;85'(Cbszyzp^`_dltv}wql~ytrfgmkpy|syylYIH3-Gj|poaF' '0266<=E>FPV]^ZYTZV +     +  .!'$  *'!$()036158028=6-2+(/0/2(47;70;26835&&*##" %-2&!!9D4  +  +,  +  +   &@RXRQOKFAB8;BE>BEIH=>>94316/&%!42,/!,),%% "$"k$Z<+'   +      + #%% &#%)-1CIXM<1(%'!# &$*$!7Q%&-&#4[dhfW:% ;Oax„‡ŒŽŽ‘”’‹…€y€Šš¢£¬®²±²·´µ¸º»½À¼ÁÇÇÇÆÇÍÎÒÒÐÒÔØØÙÙÜÛÛÞÞÝßÞááààâÞßÞÚØÐÑÓÔÖØÓÑÒÒÑÏɾ²³¿ÈÏÍËÌÌÌÉÎÎÓÞçïôúùùûûûúúùõðêåàâèñøúûüýüüüüüýüüýýüüüüýýüüûûüûûûýüüüüýûüüýüüýýüüûüýûüûüüûüüüýüüüýûûüüýüüùùóíæìóùùüüüýýüüýüýýüûûûûüýýýýûûüüüüüüüüûûûüüûüüûüüüüùùúúüüüüüûüøüüüýüûûøùûûüýüüüüûôïööîîôúûúùú÷óíæÛÓÎÌÊÊÉÇÅÂÀÂÃÅÈÄÆÈÇÅÇÅÈÅÈÊÈÑÛäæëêëëëìëììêëêìëêêéêëêéçèççåæåããáàãßÜÜÝÛÛØØÒɹ›ˆˆ‚ztwsqyvqlplj^X[K1"   -7?;>*#$!   +  "+,$)( $ $%)G\]B#   + +)EVF +   %,.+&.45330.,451-(282.16=;HKb‡|hI(+,=Sbnhb__`QAKURK@KQaHELMalyugimjji{Œ“Ž†}r^Pcnzuzsxtm†ˆ}„Šˆ‘‘’Š‘ŒŒŽŽ†Š“š–‹„‚y{u€vn`SH=CQQ?A=3 "3I^pokvj]chksxvu|{~‚‰†‚†twpmnhptq}~oVGC3,Rv‚{iXI* + &*0:=:>HDHKX[\a\ZWZ  +     + +     #3"  +&%!'%*363,/469:G;4-,*02697110742/-3&0*#$& ##"$%%$$FH3   + +   +    + /HW`YUOG=9?@=;JIFCIOJHA;89883,%'3/)3&')%+,(.  ()(1     + +   + + +""(! +"$  + $)$$/;PRQD;0  )!! ( +,!AD$,.%+E^kjY@%9Pgr€€Ž‰Š’Œƒx€“•‹š¥¬«¯¶¶»¼¼½¿¿ÄÃÁÀÅÈÈÊËÊÎÐÒÔÓÔØ×ÙÚÛÜÜÜÛßàßßããâãáÞÚÜÙÒÐÑÓ×ÔÒÕÔÓÕÔÐ˾¹µ¿ÌÒÑÎÉËÊÉÒÚâêòøùùùúüûûúùóêäàãçëð÷úüüüüüüýýüüüüýüüýüûýþûüûûüüüüýüþûýýüûüýüüýüüüüüüüýýúûüýýýýþüýýûûûüûûúù÷ïåÞàèôøøúûûýüüüüýûüûüûüüüüûüûüûûûüüûüüûûýüüüüûüüüüüüûúùúûüüüüüüýûüüýüûøúüüüûüüûýúûðù÷óöùùùúúøúøöñêÜÔÓÍÉÊÇÅ¿ÀÃÄÂÇÇÄÈÆÈÇÿ¾ÃÉÇÆÑßãçéëëêëìììëëìêëìêéëêêèèêçæçæãããâãáÞÜßÜÜÜÙ××ÏʳŠ‚…|r{vusqrupri_ZR@,#!,>47/)$!  + '%'$*'% /P_S5 +  +   :S@%  '*)!$1+2,01-.0./*32*:57;>CAAKRNNc[GNOM_d_S?/7Qbu†…xM!((6YkusW][ZXTR]U?DNYRJLG@Xeosigcokjvƒˆ‰pUF]cc\V[a`uv€ƒ„„Ž˜‘Ž‹}‡‹Žˆƒƒxwwxvk_XC/8RP=A:2( ! 4Mftqr{gaqpmyx€}tm}ŒŒ‰‚z€wvzrtwlq€}…sRED70^~€ƒ}ygJ&   *08=:<@MFOU]^__YYV\ +      +& .2! )!!&331'(1*057?703.-3@:32:41+082>0+*,.*!!$%(*$ *KK$!^> +  +   +0Q`]VTSSHB;@>=DDIKHSNGC;6/-36(&*020,.)")0+*+*$#"&"!&&(*  + + +   + '$ !# "*&7OXUILA, + % !)(#*H6.*(*8_cjcT/Hbt|‡Œ‹‹‘•”‰Œy‚žœŸ®«­´·º½¼ÀÂÃÅÇÅÁÇÅÉÌÌÊÎÒÐÒÔÕÓÖ×ÚÙÛÝÚÜÛÝâÞàßâàáÞÞÚØÎÍÑÒÑÑÒÖÔÖÓÔÕÏÉÀ¿¾ÃÍË¿ÉÉÈËÒÜèñøùúûüúûûûøõïæãåèíò÷ùûüüüüüüüýýýûüûûüýüüþýûüûüýýüüýüýýýüûüüüýûüüüýüýýýüûûûüüýýüüýûüüüüûûúúøôëàÙÖÕÖáëóøùüüüüüýüüýüüüüýüüüüüüùùûúûüüýýýüüüüüüüüüüûüýüúúùúüûüüüüüûûýýùúûüüüüüûûýüüôôúùøõøøùùûúúúøôêÝ××ÍËÇÇÁÂÇÇÈÈÈÈÆÈÌƽº¸¼ÂÄÊËÔÞâçìêêëíëêêëêëìëêëêéêèæèèççæãäâãäÞÞàßÛÝÛÙÖÖÑÒÄŸŠ‹ƒz€~}zws~ysrre_XD-#+:;<4)"&'   +   %,! (")**$! $!.#":^bI.   3BA& + -*4)04/21,1,-12171679>EF>DDLWZ__YIQYcgcWG#.DMnƒŽw>""1>N_pshdZW]\LRIKNWWMKMHNNbt‚m`dtykhxzzveF;PZSJT_`bspy}{…–˜–”“Œ‰‹“Š†‡‡|rqrvskj^9.2JB541*&!'Nmpxwecqlr~}~rovzƒ‹Œ€q~tyxzypr|}~{fYLC44_{‚†wgH    &005978=BEPTU[\^[\X[ + + +   +   )* !" *+%   +(%&"+).,/%./&)0;=6=4-?<: " %$ =H-/(- -Mbdf^D("9XkvˆŒŽ’Ž‘‘‹‘‡‡zoz–¡ ’š®´²»¿½¾À¿ÆÆÇÇÈÉÈÈÊÎÍÎÒÒÔÑÓÒÖØØÛÜÜÜÛÚÞÞàÝßÝÞßáÜØÖÒÐÏÐÒÏÅÊÕÖØÕÓÔÒÌÅÁ¾ÄËÏÌÊÉÊÓÞìôùúûüûùüûøõïèäçíò÷úúüúúýüüýýþýýýüüüüüýýüýüüûýýýýüüýýýüýýýýüüüüüüüýýüüüûúúüüüýûýýûûüüüüüùôóðëã×ÏÌÏÐÈÎØåñ÷úúûüüûüýüüýüüüûýüûù÷ôòñ÷ûüûüüüûüûýýüüýýüýüüþûûüúùúùûüüüûüýûùùúüüüýýüüüüüüðüýûúù÷÷øøúúúúùôìåÚ×ÍËÉÉÅÇÍÌËÊÍÊÊÉż¹´º¼ÀÈÈÍ×ÛåçèêëîíëëëëëëëììëéèëèèèçèèæäââââßßßÜÝÛÚØ×ÕÓɲ˜‰ˆƒ{ww}u|zsonddbTM&"!*6;<:7&*!&  +  (+%* (&-%"(3*"'HhdM- + +    %@F.  "(.-%/-/0+,/0-.-.))==9=A?;BJN\e_cXLV_c`^a=+&1Cd€‚l@&"'3D[soig_a`c]TBTRUVTY]UINbu{rkokcny{xunXA=CRQXdcgnspytn‹”“•‘”‰’‹€{y„{ypo‚|vrjO#%5:9@41$# +Rcw………d]hhptonx†zo€Š„}ryv{ƒyihuƒ€weWFB03[jtvmfC  .6;689>?AFMRRPW[X[XW  +  +  +   '!()&  + +'&&%$(022:-*,%*7>:<>9AFCC>48<843=?=1*30)#'*6+.&  5C1   +  + +  + $'FYXWRJFCCC?@FEKJHCLPK?=@=?70372),-&#!/0)/)"+/*% #,# , "  +  + (+ #" DX55+ !'5L_TVXWC* !  "#&C='*-%,CVb`eK00Xanw‰‘‰’““‘‘ŽƒŒ“¡¦œ±¸¹½Á¾¾¿ÃÈÊÊÊÌÉÅÈÍÌÌÏÓÔÒÖÒÕÖÙÙÛÛÛÛÜÞáàÝáàßâàÝÙÕÑÒÒÒÏÍļÅÒÖÙØ×ÖÔÓÐǽÂÏÑÍÌÍÚåïöúúúüüúúúõíëëìðöùûûüüüüüûüüýüýûüüüüüýýýüûûûüüýýýüýüüüýüüýüüüüüýüûûýýýúøøúüüýüýüüûüüûüüüûöîâÙÔÎÌÇÇÐÎÅÉÍÔßëõúûûüûüüüüýüüýüýýüûøïéèôüüûüýüüûüýýýüüüüþüýýýüüüüüúøúüûüüüúùùúüüüýüþýýüýý÷ûüüýúûùø÷øøùùúúôïäÜÓÏÍÉÇÊÍÎÏÑÎÉÊÍÈÀ´¶²¹½¼ÅÈËÔÞãééìëìëëêêëêììëëééêêééèçèèãâääâáßÞÝÝÜÜØÙØÒÐÁ¨•‰Œ€‚|€€wtkib__E06>GD1('#!    '$$%"#--!0+'.Nf^;!  +  6=* + +  +  ')(-#$+2/--0.1&')(=A;<5BBCFYe`\faRQX^eg\:%*CdzzhS3)&->ZnlqvlSVc_KM[\USVULFJL[m€yrƒ|ncgpstsobPB>HTdjfhhopuso‰ˆŽ˜Ž’„†‹‹…ƒ{€‚ƒrstytskT;!0:EE=?5'$! 6Sk{‰‰d[cgiZosuv{{…{y„zuwz|tqpvvqsaMKA32Sm}xno_0 4BJA:9<:6*#25)#*%,(12&"%%*( $ # + +"  +   + + +  +!' #&   s ++(""**B[`R]M>!   + ##0?)2**&6HbfaT;! Blgs‚ƒŒ‰’•—Žˆ„„’ˆŠ £¡³½½ÁÀÀÁÂÆÈÊÊËÍÉÉËÎÏÐÐÑÓÔÖÔ×ØÛÝÜÚÛààâááàáàáàÝÛÙÒÒÑÒÐÊǶ³ÁÑØØØÙÔÒÔÐÇÁÃÐÍÍÒÚëóùúùüûüûøóëëíñ÷úúûýüüûüüûüüüüüüüüüüýýüüüûüüûýûýýüýüýýýýýýþýüüûùùüýüüüüûúùúüýýûýüýüûüûüüüûùñçÕÌÇÆÆÁÉËÌÈÅËÌÏÖßìóùûüüüüüýüüüýüüûûûôéçóüüüüüüüüýüûüýüüüýýýüýûûýüüûúùøùüùúøúùùüûüýýýýýüýüýüüüüüüüúøöøöùøùùöîèÜ×ÔÉËÎÐÐÏÐÐÌÌËü·³±·¸¸ÀÆËÍÒÞãæêêêêêêêêìëëëêéêêèêéèççåãâããäàÞÞÝÜÙÙÚÙØÔÐÅ«”ŠŒˆ†{|…Š‡…}mrsaagU5#)/6C?8  '   *5-#%%)#*&&+HlU3 + + &3.   )/)$(-11622+0+61499=:-8>AHYd[[b[H?Yg^bW>,#$4ax|c;(0&HFA<@FA=INPWY_\V_[  +    + +  + + !#/-" %$ !*+%(/$",725<<<;DI=>>>BJG=7979:0/:?A?/)(/(!!&*D@'#  +    + +,JUUTXK@>BTbi^N- .Qgj“‰‘‘‘‘ˆ„‰‡’“Œ’›ª©¤º»¾¿ÂÁÇÅÉÍËÍÉÌÎÌËÐÑÑÑ×ÒÖÙÕ×ÚÜÛÛÝàßãàÞããßÝáÝÜÚÔÔÔÒÑËÀ¶µ¶ÁÒ×Ø×ÚØÖÔÓÊÇÅÊÐÖÞêõúúúúúúùöïëëôøüûúüüüüýûýüüûýüüüüýûýýüûüüüüüüýýüüþýüýýüýüüýüüüüû÷÷úýüüüüüüüüýýüüüüüüüüüýúûøðçÙÎÆÆÆÈÇËÍÈÅÀÄÊËÈÎ×áîõùüüüüýûüüüüüûüüùíêôûüýýýûýüüüüüüüýüýüýýüüüüüýýýûúøø÷öôó÷úýüýþüýýýüýýüüüüüüýüûúûùöóõùùøôîçáÛÔÓÑÓÒÑÒÒÌÎÊ»¶¯¸¶¶·ÀÀÉÈÊÑÛâæèêéêêêéëêìëêêéëéééêêçãåâãããáßàÜÛØÚØÕ×ØÔÄ©’‹Œ‰“‹‡†‰Š‰†wrmgo^PB'!" "+>D=70.:F5267D]WMQYRXWRIKUN<+'.""0(3KB.#$ +  +     +%IZWUUFFEAA>9ALNMEA@=@KF;<9=4(.342,- !%$!!%&  #$   +  +   F3%    +  " %%'$*8]bZD + *>91,#/ + +$=5",0-*GekebJ& +Ido~ŠŒ‘—Œ”Š…†Š”¦ª§£—‘–£§§µÁÅÇËÊÊÈËÌÐÖÐÎÑÒÕÕÖÕÖÖØ××ØÙÝßáßÞÞâÞáâáßßÜÛÚÔÓÔÒÎÊƾÅÆÁ½¾ËÖÛÛÛÛÚÜÞÛÜÛâéóøúúù÷ñîêëð÷úüüüüýþýüýýýüüüüþýýþüüýþûüûûûüüýýýýþýüýýýýýþüüþüüýýûûú÷øùýüûýüýüüüüüüûýûüúú÷òìãÛÕÏËÍÏÉÈÇÆÆÊÑÌÇÆÇÇÇÃÂÀÄÆÈÓßëôøúûüüýüýüûûùñõüþüüýüüüýüüüüýüüýýüýüýüüüýüýýýýýýüûøóïõúüüýüýýüüýýýýýýüýüüûüüüüüúúø÷ôôõñïêãßÜÚÚÛØÕÐÐÊÀº¿¾½º¸³¸»ÅÇÆÇÐ×ßãçêéêèèëêêìêêêêëêéééçæäãâáßÜÝÝÜÛÚÛÛØ×йŸšŽ‚Œ’”’’…Š‘„yywkkfR1 "6<78+#"    $01*+&-& "!)5-$;V[F   +&    +!',--'.(24-30958,:A?BE<1=BMTOJDKXOQ^g_XSE2$1Zs‰‹\:'+BXlmhosl_W_ql]OEHD@RQUNR]mskswzqhgq{€z{iKCGXgkpvx…‡ƒ€ˆŠ’‘ŽŽ‡‹‹†ˆ€~sqtusszoiislbW;*6IOB/#%"Bkyƒ‹ƒpeckknz|y|utjhsvnv€tmkpqtww~}pbQP8UVY‚Š€rsU% & "3IVOWXVY]\_RQSRUZXSR + + + +  + +!  +   &!"., ! +"" #($ &%%.38449024(5=2277BYNNVRFQY`[VdZH<+0)##" *CA;+! + +   3OSNRWPI@=8<8>GJKF?C;BA=72;?9(,38/,/ (0$"&&$' #!  +     @C:   +  (*+. #1PiV= A[RF/&$ 0C%&2*%3\cj`Y<8\lw…ˆ‘’••”Œ‡‰ŠŽªµ¤­¦—’‘¨¤©¿ÅÈËÊÊÈÊÎÑÏÑÐÓÑÓ××ÖÔ×Ø×ÙÚÜÞÞßãáãààÞäáßÛÚØ×ÕÖÔÏÉÁÂÇÍÏÊÀÃËÙÝÜÞßÜÜßÞààéóøùøöðëéìñ÷úûûüüýûýþýýüýýüüûüýýýýýýýûûûüüüýýýýýüýüüýýýüýýüýýüýüýüüùùûýýýüýýüüüúûûûüûúúûöíãØÔÓÑËÌÑÕÑÍËÌÊÐÐÌËÌËÃÃÆÅÃÄÄÄÃÊÓÞèñøûûüýüûúú÷ðõüýýýýýýýûûûýüüüüýýüýýýýüûüýþýþýþýüýüúïïñùûüüüüýüýýýüýþýüüýýýýüüýûøüúøõôòñìçäààÛÛÙØØÒÉÃÂÿ¾¹²­´½À¿ÄÈÎÍÚÜäèçèéêéêëëêêëëìèèèèæåãâàâÝÞÝÝÛÜØÚÚØÖÊ®˜‘}€‘——••Œ’–‘†wpijcP- +4880&(  (."#%(%"*1&9[T=  + + +   &-*-,-;0N0/474;>ADAB<9;CJLHH@F\QJOYZWYH91(Ho€ybB&(22Pgprpihb_jxhXJHG?;FLJR^hpyzu‚ƒzjdsx‚†}kN7DZ`afoz~ƒŠ„€Š‘’’‹„†€€ƒ|€‡|rpukkoonumgjaWF55?EE:6'$Eet~‚zqWZg`lw~xypgxtqyvrwwsptpt}‚dVKB1>mŽŽ‰†xR+  +" + + (=HUNQWW]a_ZOTSW_TTRP +  + +    ")(-!  + " #!##  ".014:;34')-6940:D7ESXTUM@<) #. -<:6%     +  + 8RaTIRKB5663-;JHECJLIEH890.38006:0&%*/%#)%   % +  +5B;% + +   $ !%&($+&#+Fb]E +"GTUF*$?/ + H:&.*'=beg]E-$Nkg}‹‘‘“‘ŽŒ‰Á¾³´¯¥‘¡¥ ¦»ÄÊËËÊÌÌËÏÐÑÓÒÒÕÕÖØÙ×ÙÛÛÜÝÝÝáßßÞÜßáßÝÚØÖÔÖÒÕÒÌÈÂÈÍÕÔÌÆÈÍØÞàßáÝàßàáãíóôõïêçëòøûüüüüüüýüþþýûüüýüüüýýýýüûüùøûýüüýüýýþüýýýýýýýýüýýýýüüûùúüüýþþþýýþýþüûøõùùúùù÷ðçÝÖÓËÍÏÍÍÏÒÒÎÌÌÌÏÑÑÒÑËÅÈÇÆÂÀÂÅÁÂÈÈÓàëóùûûúûùúõìñúýûüýýýýüûûüüüüüýüüüýýüýüüüüûýüüüüýüüôíðóøúûüüüûýýýüüüýüüýýýüüûûüüüüûûøöñîêäãáßÜÛÙÛÙÑÆÃÁÅü³­¯´¸»ÀÀÆÉÏØâåæççèéééêêêêëëéåèéæåããââàÞÚÛÚÛÙÙÚØÔÆ­•’…~ˆ’“™““’œ“’Œyzpmn^A((-@4890+  +  02(#$&"$#""'*+('BVP3  +    + '))26)%-/53.338@@FEA=63)"Ff{wzxn[da`pv|ƒƒ…|uu}sokgozzspvuwzxfQDB5H}“‹€qX- '5OTLS[]^[`aYTPUZVUWX   + +    +   ""*')# "  #&%  % #")5>:30,5()15BFADGA;?B4>ANJ>72.)&"!6<6#*   +  =OQUNCHA5404<@JJOOJCGMJ735/+57&+611#"$,$'*%#* +$   4@82   + !" ! + &" $&&)/7XS5$  )IaPA,%,@3 +(F.4)"4Qhc[O;# ">chv†Œ‘’‘”˜“’Œ‹‡‹–ÁÒȽ³­Ÿ•‘œ Ÿ©¹ÊËÉÍÊÎÌÏÑÓÏÓÔÑÓÕ×ØØ×ØØÛÜÜÞÝÝßÜàààÞÝÚØÙÖÒÓÓÓÎÇÁÁÃÍÒÖÐÉÆÎØÜßàââãåèéåææåéäêñøûüüüûýüüüýüýýüüüýûûüýýûûüû÷ö÷úüýýýýýýýýýþýýýýýýýþþýýüüüùúûýüýýýýýýýýüýûóëñôôðëäÛÖÒÏÏÊÌËÌÍÐÐÐÒÑÑØÔÕÕ×ÒÊÊÌÏÌÇÄÆÆÄÅÂÃÆËÒÞìô÷ùúúùðéë÷ûüüüýýüüýüûüûüýüþýüýýýýüýýþüýýüûüüüü÷õøøùùùûüüûýýýýüüüýýýýýýüüýýýýüýüüûùóëæããàâßÜÝ×ÍÈÃÃƽ·«®­®·ÀÂÇÆÇÐÛßâåæèèèëëéêêêêéçêéççãâãâáàÛÛÝÛÚÚÚÕÑĨ“xt}…“›˜—’”•—’„ƒˆ|{qdR3!$*=>;0%#!*'*  +  )0' ,%!$ " -.&"'DRI- +    + +  +,233//*'-931373B?HKC74;DMORMGC@CI=N_\TQB24Ronrƒ{d<)-5:_uwhemg\W@=GTOYMDEGPQ]o{…xp‹giqvxtlNF?7_elsozyy‰Œƒ’’‡‡Œ‹……ƒ‚…†‡{ztrpjnqqlaeseWLQHDI;.3*Adnnsylecigovo~ƒ{tr~}tmmnquttt„v|}€bIL?1@rŒŒƒ†v[-   +^of[>+!Ngu‚‹““˜”˜˜’“ŽŠ“µÒØн²¬¢–‘™ª«·ÉÎÊÍÍÏÎÑÐÒÒÑÓÒÑ×ÙÙÙÙÚÚÙÚÜÞÞÝÝßãàßßÛÙÙ×ÕÕÔÑÒÅÂýÀÎÕÚÔÍÇÌØßããâãçíððæØØàèðöùûüûüüüüûýûüüüýüüûýüýüúøõöø÷øöøüýýýüýýüüþþþýüýþýþýüþüüüù÷úýüüýþýýþüýüþüýûðàãåãÞÕÑÍÑËÍÍÎÑÐÎÏÔ×ÖÑÒÙ×ÓÕÖ×ÓÍÇËÍÍËÍËÆÅƽ¾ÀÂÆÊÖãíó÷÷ôíäæöüýüüüýýüýýþýüüüüüþýþýýüýüûüýýýûüüüüüúûúúüüûüøùýüþýüüüýýýýýýýýýýýýûüüûýüûøïãâãåæçãßÙÔÍËÇÇÆÀ¹³¯ª«¯¼ÁÄÅÈËÑÙáäåæèéêêééèèêéêèççæãââáâÞÚÛÝÜÚØÚÖп¤mqw‡—›£š™–™“‘Œ‰…{xv_F/#!&5AA6'$&$% ## +  + %,)*&)1$&$'.1&JNC,  +  + +  +  *.+,166,052275;GFJGA?67BGKOME73@H>NX_^PE33AR_s†‚hD-.,6TptinaQSVXQUaUNKPKU[or‚}tt…mpnkieZBDJN`hpuw{jq‡‡‚•ŒŠ€ˆ‡‡ˆ†ŽŒ†~~z}|wmjmuqgohf\SXOJF82,$ ?_gr|k]^hhfkpuvrsqyzv{{xy€upq|~|yy|hMPB,>oŒ‹ˆ‡xX* $&?DKYZZ^`^haXXXZWV[ZP +     + + + + + *+*' ! +!$!$!%32)05/,.4,,2&+/0>;CTPI@FEA19:43%)( # !$ !385)% + +   +    +$>SZPIRS:=B4/8DH=GKNBA>?2000.5+=;.$("!!(&%"    +  $+- +  !#  # !"%'#%":D( + %  4O][VE-$&G3&+-,.M_giY: )`w€‡Œ™”’Œ‘¥ÊØÚÕÆ·±¨œ‘Ž™«²ºÃÐÒÎÎÐÏÐÏÏÔÔÕÒÐÙÚÛØÚÛÜÚÛÞßáÝÞááÝàÝÙÕ×Ö×ØÓÏÍÆÇÁ¼ÂÏØØÙÓÐÑÚàãããäéòðêâÝäîõúüüüüýýýýýüüüûýýþüüüýüûøôóöøúûûúúýþþýýÿýýüýþþÿýþýþýýýýüüúöøüýýýýýýþýýýþýüûùëØÕÒÓÒÌÌËÐÒÒÒÏÐÏÐÑÔØ×ÒÕØÖÓÔÕÕÔÍÈÏÏÎÐÑÒÌÍÇÅÅÂÃÂÅÆÍÔáéíèãàãòûüûüüýýüýüþýýüûúúüýýþþýýþüûýýýýüüýüüûûüûþýüüûúûüýüýüýþýýýýýýýýýýýüüýüüûüúõèæêìêéèãÞÖÍÎÉÉÇÁ»´²®­©´¸½ÃÈÉËÕÙÝääæçéêéèêèêééééäæäãââàÛÝÙÛÚÛ×ØÔÊ·’ŽzjmŠ’šŸ ›šœœ™”’ŽŒˆƒyzZ:(* &*3P[__E3$2L-!1,&:\khbJ&! GnxŠ‹Ž’™˜Žš»Ð×ÚÚÒ½²¨”“¨­·ÅËÐÐÒÕÒÎÌÒÒÔ×ÔÒØÙÙ×ÙÚÜÜÜÝÝâàßÜÞßÞÛØÔ×Ø××ÔÉÁ¿¿ÁÁÃÎÙÚØÖÐÕÜßåæåçêêæâèð÷úûüüüýüûüüüýýþýýýýýüüüúøôóô÷ûüüýüüüýþýýýýþþýýýüþþþþþýýþüûùõ÷úüýýýýýýýüýýýüüûõäÏÌÊÍÉÊÏÓÔÕÓÓÒÒÖÔÖÑ×ÝÕÕÙ×ÔÖ×ÖÒÍÍÑÑ×ØØØÓÍÊÉÊÊÇÁÃÂÅÉËÑÖÙÙÙãòûûüûüüýýýýýüüýüûúüüüýýþüýýüýýüüüýýýûûûüüýþýýüüûûüüüüüüüýýüüüýüþýýûûüüüûüûøðôöö÷òðëæÝÔÒÑËÊüµ¶³®©­²¸ÁÃÆÇÍÑØâåæçèêéééëêéèêéææããââÝÜÝÚ×ØÖÒÔÐÁ¬™‚nio‘”œ ž¤£Ÿ¡Ÿšˆ‰Š…‡oR/$"!" ')3=8?2" )1#" 5E< ,501-.0%#"!)*!%@I2  + +   + +  +$+,+)*.093-/72>9GMEAFI=AHQMGA?<@GBGV^TPG;'%8Xk…|jR<$$.Riwkkie\_ZeW_`XWFJOYR^iny{mn}€nfjnc_exxq_]bdt{~‡wzˆŽ“”’‹••’•”“Ž‰ˆƒ‡…}ox|rmhehmprjkcbWQJD=>4 $JcgkiueN[jdk{yuvykqwqt…xu~~ukm}„ƒ~}…ƒfXM=/9k‚vysdB  ,EKW\\\ckgegkhgc_`^[Z  + +    +E@ +     !  +/$" +#"   $&-11(&(439>=??7?AGJA=77>7;A2'$# !/2"$/G=' (!  + # +  4JVWOPL?>=B6?RIOF?=DQQF8/44#&%,,*$#&#!"#(%$!' +   +     +  %"# ! #!&,$%/7)06#"2FXcgV4# G?&-0#,HicbT:$1^o€ŒŒŽ‹’›”›’‘›°ÇÏØÛÚÒö§¡œ“¦®°»ÆÏÑÔÔÒÓÍÐÍÔØÖÔ×ØÙÙ×ÚÚÜÜÜÞàãâãàâÞÙÖÕÕØÑÕÌþ½¿ÅÂÄÑÙÛÙ×ÕØßåèçããâãèñùûüüüüüüüüüüýýþüýüýýýûüûúõñòöúüýýýýýüúýüýýþýþþþþÿÿüýýýþüýûüüûùúüýþýüþýûüüüüüûøóèØÈÆÉÈÆÍÎÒÔÖÓÒÖ×ÙÜÛØØÙÙØÕÙ×ØØÒÐÎÎÏÒÙÙÚØÓÎÐÑÎÏËËÉÆÄÅÅÆÆÌÓÖáòúûüüüüüüüýüýýüýüüýüüýüüýýýûþýýüüýýýüüýýüüýûýüýûüûüûüûüüüþþýýüýýþýüüýüþýüû÷öûûúûú÷ôïæÝÕ×ÌÏż·¹¶¬®²®³ºÀÇÈÌË×ÜáäççèèèèéêêêëéæçåãâÞÛÝÛÙ××ÔÒÎÇ»¥“‡€trm€‡”Ÿ¡ §¡Ÿšž–’–”ŠŠ‰d9%&# %*"!!#7:@A3*&+0"+?GF*  /-81110. ##$,&(1#'@A3    + +*710)0/..8046FJOMD=8FOONORVW>7)!,TnxeG+%1J`klnqn`[\_^_ROURSMDN_fluvwqv„qegdbmu~ucV[cax€‡y‚†Š””™“˜—™”’’‹„†…‚‚€qmiggpthgomc\LMD<76( + &HbdX]i\TSa^p{txpiosqst}{opjgegwxx…„‚w[UXC4?iƒƒytlH" +  4ENYZ[aij^`mmosc\bf_W    +     + + +  +$.,   %' !  !$'-21)(***15>@@==::3?IG<73B>2;9.!! ((.(1H>(!%% + +   + +  + +&:NUQNIPC?=;5;EDDA@;GP=73!#%$./051 '(  ! !,   +     -#"  !)$&35B0# (=L`ddG+8Q2('!1ZhebA   Ea~Š”Ž‘™š•’Š’‘­ÃÉÎØÞÝÓú¬¥˜£©£©ÀÏÐÒÑÒÓÔÒÓÑÖÕÔØ××ØØÛÜÜÜÝÞàÝââÝÜÛÖÕØØÔÓÌÂÁÀ¼ÂÇÆÊÑÖÜÛÜÜÜäèéèââèîöúûüüýüüüýýýüüýþýüüüüüüýøöóô÷úüýýþüüýüúùüýýýýýþýÿýþþýýþýüüýüþüýýüüþýýüþýýýûûûùóêßÙÏÇÈÌËÊÏÑÓÕ×ÓÓÔØÛÞÜÜÛÜÚÚÜÚÜÝßÙØÒÉÏ×ÚÙ×Ö×ÕÔØÖÔÏÌËÍÇÆÉÇÉÈÉÓÛíùûüüûüýüüüüüýûýýýýýüüüýýýýüýýýýýýýüüüüûûýýýýýýüýýüüüüüüüüûüýýýýýýýýüüþüüû÷øûüûüûúú÷ñêß×ÔÑÌÅÀ»¼µ²¶¬®²¸ÂÇÊÊÉÓÚãåæçèçééëëêèèèææáßÝÜÜÚÙÖÒÖÐËò¢‹‚ppq€‡˜¢ ¤¥¥£žŸž™š™˜–‘‚S)# #.%&!%,3==4/" *5%=NTN. +"2;IB010$# "$!.1*0"/EC# + +  + +  +    !5902-*/125478@?=9?AA>?;FG?A@AHPJELSULMA$-Mky}znK- 1DPqnuxceg`deSLDNYR@BSkdltx‚uq„r`\iintqv€^TVci{~}†‹Ž‰†Ž“—–“‰‹€xŠ€~rplstokpki`YZVV>>8- + !@[^M^kWIbbft{wwst‚}|yƒ‚m`mmqx|~v„Štg`V@/=q…|qM&  +3?R\UV`ebginnosiecc`Z +  +    +  + + +  '+(#' ! !  +  /! "(/281*0418ACEA<8=:3;;>FG9`B$%.71-("!"!&!!%($ + + + + +  + +  $&!  $" & #%!*)&*:C8-%##AT__dP6@G#*+)>^idS66`x‰Ž””•˜›™“˜•¡¿ÍÑÖÛÛÜÙȽ³° –’£¨žœ´ÆÐÎÏÓÕÓÑÕÓÕÖÖ×ØÚØÙØÛÜÜÝßàÜààÛØÖÖÖÔÒÒÍÉÿÁÂÈÈÊÍÖÝßààåëîðñðñô÷úüûüüüüüûüýýýýýýþýýüýüùõôññöúüüýþýüýýýûúøüýýýüýýþþþþýýýýüýýýýýþüüýüýýýýýýýüùõìäÛÒÎÍÌËÊÍÍÐÑÓÔÙÙÓÔÖÔØÝÞÜÜÞàâåäáâåäàÚÒ×ÙÙÝÝÚÙ×Ö×ÚØØÖÖÖÒÖÖÙÛÓÏÍÓÚéó÷úûûýüüýýýýüüüýýýýýüüýýýüýýýþýýüûüûýüüýüýþþüýüþýýýüüüûûüüüüýüþþýýýýýüüûøúüüüûûüûúùöìäÞÕÓÑÈÁºº·´®¬­®¹ÂÆÇÉÎ×ÚßäèèççéééêêèèååäáÝÜÜÙØÓÐÏËļ©Ž‚wksw‚¢¸¶ª¥¦ª¢¤¤¤  ž¡£›”—‘}F/'"$## +1@@:0*#/0" 6N^L6 +/==FE>?2&#'(,+6)(4%3C7  +  +     +   !'//,1+,1579868<@@IB>90<=;B/ @^U^myl[]jknqtrs|ƒ€€y„…€vmnrqz…€y€€wjeXF17?00>;45@AED5=1"&.240+$$%""$ "! '  +  +  ')* ' ""####)&*(0?A7.)#AL]igTN+L?+27/+Lad^@(/Rpx‹‘•˜˜š•Ÿœ•’œ¿ÑØÙÝßÜÚÚÑÀºµ§“”¥ Ž¤¿ÉÊÎÒÕÔÐÑÒÕÕÓ××ÚÚÚÛÜÜÝÜÚÜÝßßÙØØÙØÔÑÊÇÿÂÁÅÌÎÐ×Þãäåéïóöøúúûûüûüýüûûýýüûüþþýýýüüüýúõôðñ÷ûüüþþýýüüýýýüüùüþýýýýýþþýýýýýýýýýýýýýüûýýýþýýüýûôéâØÔÑÎÌÊÌËÍÎÐÔÖ×ØÜÙØÕØ×ØÝßàáæèéîîêçéèæáÙ×ÚÚÞÝÜÖÚÞÙÛÞÞàâååçéêèåâ×ÔÐÓßêò÷úüûüüýüûûúúüýýýýýýþýýüüüüüýýüüüûüýýýýýþüüýýýýýýýýýüûûúúüýüýýýýþýýüüûùüýüüûûüüüüüúòçßÚØÑȾº¼»¹³¨§®¼ÀÅËÏÐÕÛáäææéèçèéèéæåæãâÝÜÛØÖÑÍÉËÀ²›ˆyqij{†˜®Åȹ©¦¬«£¢¥¥¤ §ª¦ œ—a6$%#"#%)25A872 !).1+BOPI7!'5AEHD:41$")+)(/.*/(2<&     + + +  -413-051;<<.8=@:IHC;788ACA;;?JGGEKQNE>.-DZliaA')/?Uhu~tf]UY^_VJX^VPNTS_kks|zssztWN`qtyz}oJ54I[kxyw€‡‹‹„‰’”Ž‰‡†‡‹ŽŠ‡‚ˆ}olnmophrflia^WODC@>.  IbQ]r‚z[^gkmrrv{ƒ€wx€~‡}txwmv†‰……‡yj]YI,9f‰ƒr\5 +3IRSUZ\X`cgprtrmh\b^V +    +  + +  + +  +5,*#$   ! &#+*?MB&9>;BC??A?3/696627936?LQPH;2% +0"$&'8?,&         =QSTWUMKD?427@34.9A=7)'&# $&7/(&'&"!"#"## '#    &,!")56*    !  $##%**.0D>38)""5ASgl`Q1BD*/0,,5Tdb\2@bs~Ž“•“¡ž“š˜˜Ž“²ÍÙÜÛßÜÙØÙÓÅÀ·¨šœŸ›ºÅÉÏÍÐÕÓÑÕÖØÕ××ÛÛÙÛÜÝÞÜÜÜÜÜÛØÖÕØÔÑÏÈÁ¼ºÁÇÌÎÑ×Ýäçèëð÷ùûüüüüüýüüüüüüýþüûüýýþýýüüøôñïòöúüüýýýýýýþýþþýýüûûýþýýýýýüüýýýýþþþýýüþþýûüüýýüüùõíâØÕÏÏÑÎÑÏÏÓÒÓÕÖÙÚÜÞÚÛÜÚØÜââáäéìòõõòîîðìæÞÚÞÛÛÝÛÛÝãäâèìíîòòòñññïîæß×ÖÔØáèïöùüýüýûùùùýýýýýýýþþýüüûüýûýýüýýüýüýýýüýþýýýýþýüüýýýûûúúúýüþýþüüýýýüúüüüüüüüüüüüúøóêãÜÙÏÅÁ¾¼¸µ´§©¹ºÁÇÊÌÎØÜáãèçççèèççèåããáÝÛÙ×ÖÑÌÉÅÀ­™mrhev€œ¸ËÍÁ²«¬ª£¥¨ª¤¨¨¨§£¦£›F+$#!% $%%./5C41&!))71 =X[SL;&#3=;A@D<1-#%$%"$'*')36)   + +   +  + +  3747%J43>27<=@>@BBA><<:J@>;:ALHOGMMLF<+0?IHJC<-,* !C]jk}‹rX\ggmqr}‚…|}zƒ~ƒrmr{{€ƒ|€€ƒ‚|la]G5Hm„„‚nU#  + #=QLR^e`afgiqrwroihd^]   +  + + +  +    &50&#!  +'&# ""3:A\]2%FF<6>@D>616;6;;.9;>9;JQEC<>/%($!"!/<5$#       +  # +BT^]XVNMFC2.0/1-"".+& &%("#)&*!#$% ""#  " " +  +  "%&,*>=B7  +  # #  !!  ."$#(,!F@FA8-)%$:P]ml`LR8*,0%$Bc`S?#2Xkz…“•’—™”˜˜’‘ Ä×ÛÜÛÙÚÑÑ×ÔÅ¿·«›•¡—‘°ÄÇËÎÏÑÕÕ×ÕÕØØÙÙÚÜÜÚÜÜÜÜÙÚÙØÕÕ×ÕÑÍÆÅ»»¿ÆÊÑÔ×Þâæëîòùûûýüüýüüûûüüûüüüûùûüüýýüûúöðîñöúüýýýýýýýýýýýüýüýüùûüýýüýüüüüýýýýýýýüýýýüüúúûüû÷óëäÛÓÑÐÍÎÐÐÐÑÓÔÖÔÔØÛÞáßÝÞãÝÝßáâäèíñøøù÷ñòòñêçãâãÜÜÛÜÞâçêïòõ÷úõéö÷õóðíéâÝÚÖÕ×ßçïöûýùúú÷øúýüüüýýýþþýýüýüüûûüüýýýýüüýþýýýýþýýýýýýýþûüüúøûûüüüýýýýüýüüýüüýýýýüüüüûúõìãÚ×ÍÆ¿½»¹³°§®·¼ÁÄÈÉÏÕÝàäâåæçééçåããááÜÜÙ×ÑÏÌÉÉ°™Œxpn_qƒ›ºÏξ¸««®§®¬©©ª¨«­©±¶­£q8/*!" $#&&-?<5/!)! ,0AYTPRF*"$/>D=4>A78*(# ##('),&$ 5=#   +    + +  +   0/:85',:039=?9;?DIA@P\R\gs}}rywk[XhrxuehaWGWlq{{tn„Œ†ˆŠ‡ŽŒ‹‰Ž‰ˆˆ‰†‚v|{hlhnrnkcbQRRPFB76  "DfuvrtkY]hfluoy†~v‚zruw~€xsxx{qnk~ywh^T@;NoŠŒnH #JSLUbfi_fjhjrozokieg\ +  + +  + +  +  "! !,'!"" + /," #3GMW^]@':UG;.25B@>14774077CFDFJMJ:.,,$%*&!1;6&  +     +  + @V[RYPOL>><6:73-#,./&$ %0-" (-!"'" !  +  + +  %0IDA?:,  +  + ! #2&%##%*02?IIB8/)*6GWkmc[K-"(0,3\gnP0@nv}ˆ‘™˜™Ÿ™Œ“–”¶ÖÙÚÜÜÙÒÅÎÔÕÆ·®¥›Š‘–œš’§¼ÃÈÈÍÐÐÔÔÕÖØ×ØØÜßÝÜÜÛÚÚÙØØÕÔ×ÔÕÍÉ¿º½ÀÆËÒÖÚàåèêñöøûüüûûûûüýýüüüüýüüûõüýýüûùöòîð÷úûýþþýþýýýüýýýýýýýüüúùúýüýýüüýýþýýýýýýýþþýûûúúùõðêáÚÓÒÎÐÏÑÏÏÔÕÕÕÖØ××ÛÛßàßàßàààÝàäëíïôùùùùôòôñëæãææáÛÜÝÜßçëòöøùüðáûùøöóñðîçæãÞØÚÙÜèïöõø÷óóùüýýýüþüýýýýüýýüüûùûûýýýþûþþüüûýýýýüþýüüüüþûýüûùûûýýüüüýüüýþüüýüüýýüüüüûú÷íäÛÒÈƼ¸¶±ªª±·¼ÀÄÉÊÏÙÜáãããæèçæãããááßÞÛÙÑÌÏÏÎǸ£‘|wgf{z¢ÂÑÒÇÆ¿´°­°­¯®¬«¬®¯¶·Â¼ `6-&",$$" !-;?<1%'.&)6)+KV_TOD0+)18@::CF@/*!&&'28),6*(%68(  +  +  + +7838.54&0;;:73=DK=;86@8=;8A@FF85>BOVG2!2ALQOB.,%:L]hqpobPHMZ`XSTH:GFF:Peo~ss‚yjXYhqzumq^PET\\mokm†‡‡Œ…‰’‹‰ŽŽŠ‡ŠˆŠ„~rqr|rioh]e[PFAB:/, *YowvvxjS^hbk‚{€ƒ~y€phl}‡Š|}‚ƒ„yuwƒ€{ueSPJ7Lx‰‹‚P" )HQUXbae]bkhmpnoppginb   +     + +  + +# !#)'%#$ (&# 'GcurjeP@9H_J;20995713?=6616<:@MJE>0'!!!)*!&!8@7)$"   +   + + #FQPMJLNC;@5:CA=,( .8=7& *0-.$$" " + $ +   ((7CEDAJK/  +  !"  '"! &-%!#..8FJFL913,+?TaidVJ/++*'=bhbE*.Ujy‚˜–”š–Ž’’”¯ÕÝÜßááÞÏÃÈÉľ° ›‘ŒŽ“ž£’›­»ÁÄÈÍÓÑÓÕÕØ×ÚÜÚÝÛÛÜÚÙÙÙÖÕÒÔ×ÓÒȽ¶ÂÊÎÐÑÙáåèêðõúýüüüüüüüüýýýüüýüýýöúýüûøôïíîôùüþýýýýþþýýþþýýþýþýýüýûù÷úüûûýýýþÿýüýýþþýýþýûû÷òíçÞÙÕÒÐÒÓÐÑÖÙÓÖÕØÚÛÚÞÞÝßãáÞÝÛÛàããåêîñôúúûùù÷õôòëäàçéæâãâßÞåìôùùúûúùúùù÷÷ööóñðìëæãáÜÝáæìïïëñùýüýýýýýýýýýýüýýüûúûüþýýþýýýýýýýüýýþþýýûûýýüüüüüüüûûûüüûüüþýþýýüýüüüýüüüúùõìà×ÏËÅ»¸·µ­¤§®³ÀÁÈÌÏÖÙÛáäããååäæäâàßÞÝÚ×ÓÑÑÒÍÉ­–vhm‡‹¦ÈÕÕÎ×Õű©²°ª¬ª¯°³²³»ÅÉÁ•R6'*''##,87=4#**(+2/)@Y\SOQ?21463=8K>@A*"!"!#./*0" "47#  +   +  +  -13://-..98A<58>DB5:57=;:?:8A:538>JYG0 *CO^gdM0,*5TaivtnYF>HTTYOHJJF;3:M^kz€~zjXVepxoqseU9==45333;><9)%$#,BH<&&"*     9    (KHRXGKH==99>@70./'#)?3".' %/.+(" + "  +  +/=GJVR[hV%   +# +  !%%  #&%&32>LSHMI5,/";A_ekX=&#$-/EZgR)7[lv…“•›™˜‘’ËÛÜàååäàØË·µ³­¦œ‹‹Ž‹‰™’‹š§¬´ÀÊÒÓÕÖØÙÖÙÛÜÛÛÛÚÛÚÙÔÔÒÓÕÖÑÉÀ¼µ¸ÁËÑØÓÚãéìï÷úüüüüýüüýýüýüüýýýüûûôüûøôïëëï÷üüýýýýýýýþÿþýþýýþýþýýýþûøõùüüýüýýþþþýþýþýýýýýûûôåßÛ×ÖÓÖÖÕÖÕÖØ×ÙÚØÛßßàßÞàãááÝ××Üãäåæëïô÷úúüüúøöôñìååëìéåãåáàèïóúúùúüùúúùùùøùöôòñðîêèæáÞßââåèíøüüýýþýþýýþýüýüüýýþüýýýþýýûýýþþýþýþýýþþüýüüþýýýþþýüúùù÷÷÷üýýýýüüýþýýüýüüüûú÷éÞ×ÑÈû¹¸®¤¦°¸½¿ÅÉÍÒ×ÚßããääçæåäããáÝÝÚÖ×ÕÔÔÐÌù¦‚qlrx~«ÊÕÐÒáâÖÁ²²­¬§ª­°°®µ»ÁÒÑÁ“R-+!)!#(/;88.&+%&2B?Ra_XRE794>B8;@LE;5,#&#! &)&"( '40!   + +   + + + #.21)*058?;?',.&%$"$)<971("# 1FOXfa`TQC>8>?687HA?5*"&%###&& !3*      + +    +$*&(.4@@@9C:U~Ž|`<  6O\Y\`gcdcfke`hjklfjj +  +  + + + +     !0:92)  "#!&( +%,&(  + 'Vrxsk^[decaJ92;>9<<7687458;8@A==/3,,%"%#!2DA, #       "8NVMLMAF9875BPF3.3,*-"##$'+!) + $, )%     + ,FNfŒ‚hpw}xI   + 1#$$#! '.1-'7FS[ZTZH7,)->RY_P,"$,'>bgY5Hdp†“›Ÿ——––”Ž”¼àÞàãçèåáÚÉÅÙÒÎ˸œ‘‹|~€•–‡•´¾¼¿ËÓÔÔÕ×Ù×ÙÙÚÛÜÙÚÚÙÕÑÕÙØÕÌÃƽ¼ÁÇÆÎ×ØÝæêð÷ùüüüýüýüýüýýýýýýýþüüûñöïðòöööùýýýýýýüýþýþýüýýüýþýýýýþýýüýýþþýþýýýýýýüýýþýüýúöðåßàßàááááàßßàââáâãåææåççæåæäãâÞÜÚßåæéïñòò÷úùúøóòñðíàâêìëéãáâåñùûýüüüûüûûûúûúùúúùùøôòñïïïíéäÞÜßæïøûüüýýüüýýþþýýþýýýþýüüûúüüýüýþüýýüýýýýýýýþÿþüýýýýýýûôííôûýýýþþýýþýýýýüüüüüúòæßÙÔÌÀ»²²®¶¿Â½½ÀÆÌËÔÙÛàââãååääãÞÜÚØØÖÓÑÐÌÎɾ³{}q¥¼ÍÒÇÔçëêáË»¸´±¬²²´·º¹¸¿ÎÜÖ¨W85$$!#)>94>."&%(=Za[UVUA;A?=>66:C>;2&"('&(&'),' %-*  +      + !$1168A870.,$$&$'!% +  ! >  ?LXVoŒˆˆ™«¶¡C  ! ! ('"$%(2%#3FT[\ZMK832#-IMM;*0 )PfbM%+]luˆ—”›Ÿœ—•‘ŒŒËáäåéêëêäÝÂÁ×ÔÕϽŸ‹€‰‘’ ´À¸ÃÉÑÔÑÕ××ØØÙÜÜÚØØØ×ÒÓØØÒÊÃÇÎÆÂÈÊÍÕÝáæìñøûüýýýýþþýýýýýþýüüýýûùôïóó÷úüüüüüþýýüýýþþýýýýþýþþýÿüýýýüýýþþýþþýýýþýþþþþýýú÷óíèåäåêêëìëíìêèåæèæääæéèèèêéèéèéèããâÞáãæéíñòñóõõöõñîíìéÞâêíêèäæéíôùùûüüüüüûúûûüúûûùùùùøõöõóòôòïëåàáãéòöúüüýýüþþþþýýþýþþþýüûûüûýüüþýþþüýýþýýýýýþþýýþýýÿýýúööøùûüüþýýýýüýýýýýüýüýùòêáÛÓÊƹ·¶¶ÀÃÀ·»¾ÈÌÎÕÚÞããäæåããâáÞÛÚÚÖÓÒÒÏÐÈÁ¿°¤{ƒ©ÀÌÎÆ×êìîëÞÉÀ·­°°¯·º½»¿ÂÈÕÙÊN0)%& *26=?('%#5Q__^VFBCGF<=65B:=-/-#%+%#(+!'%,-   + + + + + + + #(0017<>C;9;4/860.23)'+.8AA;=778@HFD>#?aqogVD+)-=V`dag\_UNOUVOUXRGJSUX]_grtmrxiQHVhkkqjiSIJTWZkuo}~€‚ƒ……ˆ†…Ž”Š‚ˆŠvtpu}y{|xxmf^cc^T=82##Fl|yv}h^\fjtqvx|}uyzxx~y{ƒ€qlo|‡}~mgbT>]““‰oI%0E\b]acjfakhsldfjqurm + + +  + 0H +  +  -54-)"# #(! !!$)  ##*!!&//76ADIA:312.298;<9<83*/4@;65;DJ>75/""12##! 3E@0*!!  " # "ETIEEBC==5(:HAAA@H?0$"-,"$ #     + "EOXh€œš§Íäç׆'    ,$ !%+0-$(;Ya^\]R>7.&,2CD(!&"<_i`? )Sk‚Ž••–›ž¡›““Š”¥ÍãåèêëêéèÞÅ¿ÑÔÓÔ½¡“ƒ}‡Š’Ÿ©ºÄ¿¿ÍÒÔÓÔØ×ÚÜÛÛÜÚÚØÙÕÖÙØÍƽÆÍÓÍÇËÌÒÝæèëôùüüûýýýýýýþýýüüýüýüù÷õóöùúüýüüüýüüüýýþýýþýþþýþþýýüýýüûüýýüþþþýþþýþýþýýýüüûôìæâáêíïðóôôõö÷òðííëêêëëëééêìêêëììëêèääãááçêîððïîííííìêçåâÜàêðìéëñòòõøùüúûüýüüýüüüûüûûûùøùùùøùùøõóòðíêãÞàæîóúüýýýýýýýþþýýýýýüüþüýýýûýýûýýýýþþþüüýüýýýýýüýþýûüýüüüüûûûýýýþýýýýýýýüüüüõíâÚÖÎÅ»º»ÁÆÅ·³¸ÁÌÌÑ×ÚáäãäæããâáàÜÛØÖÓÓÑÎÎÈŽ°£¡““¯¾ÐÊÀ×éîïîêÙú±´´³¶¹·¼¿ÀÃÍÒб_2%+&"#'6BF6()'"3@Uc[VKPMGND:,3<;9301$#( %'#'&/*  + + +  + +  +  !'2.,9,'BbunaE3*5:I\idac_SKKLUKSX\UZ\WKY`dtvlvzmUGDU`igmpbRQZbclrpq{{†‚‚Šˆ‚‡ƒ’‡~†€tf]aq€~{~urk]\ZW`XHG5 "&A[q|„‹lU]gjs|„yw‚|xƒ€}urss€}nku}x{†…oheLCWn†‰†}gG# -@S^d``ekjlrrtjdomvsp +   )   + + &.:1('" # "!%$($$ +   &$&-,--,0/5+0-+31,3458234036/$!37.*/+#%+"%#!:C;    +EQIDA8?03-2111;KF@?EAerhaJ;//4K]ghfe[[QKVVJ\_SSPP\SYadnnlouh]G?P]adkd]VO^lgkqsu~ƒˆŽ€ˆ……‹Œ‹Œ‡„…Œƒn`fuy}|uxlgf]h`XSP<&?euyƒ‚m[^ilp€{~†x€ƒ}vlo{z}qq}xpz‡€kh]JASp‚{riM  8MQ[eiakp`lqrqjnvqjqq + + +   +      +%)22*(!#"""!#''&! ""  ‰! &$..$'630)"().&(),052/1*.!#,0( !) *%)'"#2CA/$!! +   +   4KML??:8@60,0>K84-+6-*-"&+*##(&"" #$# ! + Li+ F_p‚˜¹º»ßêéÕ-      %$ +!#'2QbbgaXQE<)%4=K3''3PbVK. Ck|‹’˜›ž˜—›²ÈÀÏäéëëïëëéÞѽ¾ÅÉÏħŽˆqm…“ž¨¬»Å½ÁËÑÓÖ×ØØÚØÙÚ×Ù×ØÙÛÚÙÒø¾ÐÖØ×Ô×Þãåêíõûýýüüýýýýýýþüýýýüüûôõøûüýüüüýýýýýüýýýþýýýýýýýýþüüüûüûûüýþþÿþÿþþýýýýþþüû÷ðêåæìïòôøøùøüûùùùùùø÷ôôóñðñððððîîïîíîííêãÝâæçêêëìëëæàÛßßáÞßØÖÖÙâêèæçîôóó÷ùúùùüúûüûüüûüûüûûüüúüýüúúùøùø÷÷÷òìéäãâàâèð÷ûüüýüýýýýüüüüýþýýýýýþýüýýýýýþþýýýýþþþþþýýýüüüýýýþþüüüûúüüüýýüüûýýüüúúôëáÚÔÉÇÇÇÇÆÀ»¸¾ÅÌÒÒÔØÜâãáäåãáÝÜÚØÓÔÐÏÐÏÊÈɽ¹¶¡¥»ÉË¿ÂÝíððòñìØÀŽº»»¼½ºÂÀÁÊÍÎÄ—R.' (( ##54/;Chproc<)/4=LZfkfac^XYXOJOLNDLPRSW^amnepk^FL^a[dgf^NUY^ilmqwƒ}‰‡ƒ‚‰Š‰‹‰‹Šˆˆ‰ˆ}zrt„‚}lkfa`_d\^RLA("GgvseX_bepsq}†zw{|rpkku{zuvtoƒ…‰nc_OBSvz{wskO $AOV_kihkmfhmunnttlgop       +   + +  + +  '+11("!##!!$" $%#" +  + A$#%%4+9?:9+'//+)$).3&#)1*(#,03( "&(#:C>'"##  +   *KNEAC>4..,&.`iec]VI58,!5G>3'%7XbZBNsˆŠ’Ž•šœ £—š©ÎÐÂÑãëììîìëêâÖŲ³ÆÎÈ©’‚}ƒ¡©«¯¼ÆÁÂÌÓÕØÕÔÖØÙØ×Ø×ØÝÛÝÙÕÐÄ¿ÃÒØÚÚÙÝãçèìôúüüýûüüüýþþýýþýýüû÷øùúûýüüýüýüüüýüýüýýýýýýýýýýþýüûüüüüüþýýýýþýýýüýýýýûõîèææèïô÷øøùøùùûûûúüúûúúùöõöóôõóñïîïîìíëìîéâÞåçæçèèçææßááâââãäãÛØØáäáÝÝæïñó÷ùùúùúøùûûûûüüûüýûüüüüüüüûûùûùúùùöõòðîèèáÞàéñ÷úüýýûþýûûüýýýýýýþýýýýüüûýþþýýýüýüþýþýýþüüüüýþýþþýüüüüûûûüüýüûüýüüüüúóêàÕÑÌÊÌÉĺ¹¿ÅÌÏÏÏÓÜÞáâãäâáÞÜÜÚ×ØÍÎÑÒËÌÉÄÀ¾µªªºÊÈ»ÈáêðñðñíäÎÁ½¸¾½µ·ÁÁÂÂÆÊÌÇ©j;( "$%*69=;-"%#*A[aZZcZKI@5777801#$')%')*''&$,!!%   + +  + + + +  $+26:=@KA:888=?@7'%*(6E<63,*148?<;:3C_pq}l9',+*9Rdgh^]P^bXPLMQA?GKOQMU_habnhYGGZ\bfke]LMS`lyyst…‡‰…Ž”Š‡Ž“‘‰Œ…‰‰Š‰€Œ†„…m__`^aZSa[N8$'?anqt]SZ_glls†t{}ƒyuohfoowvmjry‚„~pc_LL^dihikriljijfkiqknh   +  + + +   +      &,3*&#""!!!!!!! $$#  + + #!# +973)+;-.10646163,1)"%)0$%'3'&!"+##"9JB" *&# +  + + 2MOKJA=64,+'3D=/&/1-53+'#!$##("  +  + B±×•1 +'e…£·Ä¶©¡¹×Ú¿c     +)$'$"$19)%)Okhnh]G@>4*/>=+)*FZ]P5!/buˆ‘—‘›¡ž   ’ŸÄÜØÇÓçëìíïìëêãÝѲ¨¿Îɬ‡†©¯¬±¿ÆÈÃËÓØÙÕØÕÕ×ÔÕÖ×ØÝÜÚÙØÒƼÁÒÚÞÞàáåéìôúüüûüüüýýýýýþýýýüüûùúýþýýþýýüýýüüýýüüüýýþþþýýýûùúýýýýýýýýüýþýþýýýüüüùòìçäåéíñ÷õ÷ùùùùúüüüüüüúûüüûøø÷÷øøõñïêêéæèèëëéããåæääâæçååäããæåããæåàÕØâãÛÛÚâîñóôöøøöõôõöùûüüüüüýýüüüüüüüûûüüûûú÷ùøøõóðïêæááæéïöúýüüüúûýýýýýýüýþýþýýüüüüýýýýýþþýýþýþýüûýýýýþþýýþüýüûûúûûüûýýýýýýûûúõéÞÔÑÍÌÊÅ¿¼»ÂÅÈÍÑÐÒØÚÞáàáßááÜÚØ×ÔÔÎÏÌÉÇÏÇ¿¼°´ÁÉ¿µÌåìðòððïëÚÈÁ¼»¹º¾ÂÁÂÁÄÈÇɸ‚>+*"#$ )2938.-( '5Yc\]aRPJ;0;:=-2--.,,$+,&-'#%'&$       + +  +  +  +  $+/9:=??=>B74+5:@(+,++><9:(!.87G?5;;!:PhtqeF*$'+:L[]b\TFQfXMDEIG@BAFJQ[`gd[ga[MFPark`a`PNS_my}vx~|†Š†’ˆŠ‰‹‰|~ŽŒ‹Ž†€ƒ€l^`ccXLMXSD3'&<[guˆdX`ejir~}}x‚€|pusopptqlrrp{‡„„xleO>Gfvs|~h:  $=R_jhjbjmfnjinkelfhmk + + + + + + +    + +  + +     +-9)$%"%!#!#  $"$ + ""%$!$49-&,2130683=:28<7/'1*"'$*!!$/%%!7?2)&     &;KSJC@;9:3,-+10.(-0,(" -#)+& $#     +M¾ß¬F  -{¡ºÑÒÄ®¬­ÁÈ”=   !-*"))8;-&8_hij]ZLB9%1@9"),OiY9 Ruˆ’š–™ ££ Ÿš­ÖàÙÈÔèéíîïíëëâÞÔ½­ÂÍ˶—’œšœª²·¹ÃÇÁÀËÓ×××ØÕÒÓÓÖÖÔÍÕÙÙ×ÚÕÌÃÁÑÜßãããæëóùûýüüüýýýýýþýþýüûûûüüüþþýþþýýýýýüýýýüþýýýýýýüûûúùûýþþýýýýþþýþýýþýýüùõîæââçëòøøùùøûûüúüüüûýüüûýüüûøùùùúùùöîéçæááãäèèãäæäâáãáæåæèæâåãáàãåßÖÛââÜØÚåïñïððòòñïïïòøøûûüüüýüüûýýüüüûüüüúùûûùùùùøöóóñíåäããéð÷úú÷÷úüüýüýüýýþýýýýýýýùùûýýýýþþýþþýüýüýýýýþýþýýýþýüüýüúúúüüûûüüýüûùóåÙÓÐÐËɽ¿¿ÀÂÈÉÊÓÒÑ×ÚÞáââãÝÜÛØÕÓÏÏÍÌÌÆÊËľ¿¶ºÃżµÒæíðòñïðïæ×ƽ»º½ÁÀÀÆÇÃÆÇÉ¿—O*"( #" (,915*'0+(3Y`Xe[QXJ81:@@1,(/.&*&*)+'("+.""#   +    + +  "-:;18<@8@>,=š45.-1*,*1/8--&,37<@529.$7Xjh_I5-)0GMX`^^WPQLHGC;IL?>@BHMV]fdWY^P?BIWc^bb[PPY^hq{‚†‰Š‹‰‹ˆ‰‹Š}‰„†Œ†ˆ{€†yk^`c[PCOQPC52&Eeu|…zgSZZfiv…|vt{rlutxy~ytƒwp„„‰„qedK4=_rvumYA!  3P_hjbjhglkmhkmjpimug  +      +! +    + +-(/)"!&$&64')$" + + + + "# $!'*11,/,.4//0=02606<2.5.+%,*"$! %#"851'&      &?OFF<9,5/#*)/90-05), '+,+4#!#%    +   +PÀà³M +D¢ÀÆÒÓʼ²¯·²l#   +  )%"" .1.&0VhlbX]VA82-/>33ReW' -a}Œ“›› ¤™˜ ÀáåØÂÒéëîïîïíêäÞØÄ­ÄÔ͵ –¡£¡²·¶ºÀÊÂÀÍ×ÖÔÖÔÓÏÑÓÓÑÌÍÖ×ÙØÛØÏÄÆÏÛáââäèïøûüüýüûüüýüýþüýýúüüýüüýüüýýýýýýýýüýýýýüüýýýüûûûûüýþýýþýýýüýýýüýýüüú÷îæáàáêîòøúúúùûùúûûüûüýüüüýüüüúúûùüûøúöíçåÞØÖ×ÛãæææèåßÛÜÝãåäæåããáÜÞâáÜÙÕàäãÛÚáêíííîëëèèæèïó÷úûüüûüûüûüüüüüüýüûüüüûüýúúüùøöôòðíçãàáéîðïòúûüüýýýýýýýüüüüýýú÷øüüýýýþýýþýûüüýýýýýüýýýÿþýýýýüüûúúúûûüüûüûúøíßÚÑÐÍÅÁÁÃÅÈÈÊÊÏÐÐÒ×ÝãáâãßÝÛ×ÔÕÒÊÊÊÎÍÉÊÇÀ¼¼ÀÆĶ·ÕæíòñòòðñíÝÍÄÄþÀÃÂÂÊÇÇÉÉŨa3%("#'%!*2@>5.'1-G_fef\[ZB27=::0'&'-)&!%*'%).&  +  +    + +  #0:4>FC@IE:3;–E,,//*).)$K&79=7166''4VZ^cK1'5M]Z]WWQF=9CG;@@EH=.?CHP\YYOOKH;2EELZ_^VOJ^jejrqqv~†€|{…‚‚ˆŒ‰Œ…ˆˆ‰‰‚q`V\\NE=LXMB?-*Omux~zkRU\em|€„}yogjw~suz~qvw{uny‚}|}kYTH@<\nsrpeB   +6PZ]acjjllkcfljfiinlf + + +   + +    ! %''")1$""$$%  !!!# ! !# +  %!!&-24)',)-,4-1:/09434812-&-4&$ -- &$!<>""'   +  "BNGI97604--*5>C2.<+'!"!$--0"#   +  NºÞ¹N "ƒËÖÏÍÔÒÇ»·½¯c" +   ')#-4. 'QdljkbYH>;426.19dmG(5n‡‘›˜œ¡œ¢™›³ÕããÙÃÓçëïíððîëäßÞ˳ÁÎË´¤Ÿ£Ÿ¤¹·³¸ÀÃÀÄÌÑÕ×ÕÓÓÍÓÒÑËËÔÙÚÙÝÜÜÔÌÄÏÜâáãéì÷üûýýýýýüüýüýüüûüüþýýüýþýýýýþýýþýýýþýþýûüüüûúùúýýýþýýýýýýüüûüýüýûøõîäãààçìñöùùúúúüûûüûüýüþüýüüüýüüüüûüüüùùöíããÞÝÜÛÚÛäåçæâÞÜÝáåäââáäåâáââãÜÑÔÝáäàÙÜÛãèëêèèèëîíìðôøúûüüüüûûûüüüüüüüüüüüûüûüûüüúù÷öôòïëçãããæêï÷úüüýýýüýþýüþýþþüüûüüüûýýþýüþýüûýýýþýüýýýýýüýýýýüüüüúøùúúûüüüûú÷èÜÒÍËÅÀ½ÁÃÆÊÉÊËÏÒÕÔÜÞßàáÝÝÙØØÔÔÎÌÉÊËËÉÄÅľ¿ÉIJÀÚæíñòòòñññéÙÊÅÄ¿¾ÀÂÄÁÅÌÊÈʹ€<0'$)() .;::6(2:Lggedc\N?4;7-'&/+/(&'#'"#)()  +  +    + +  + + -77(# )GMLPE   #8KWY^ecikikhilkfsnidh +  +  +  +   + +      +  +#)&*'.*"# !!$ !"  %$ +  +" $+'&//5,*)'6.+/486785>905(-3' $!$?F3 10!   +  ,ENKGEJBB=3($(+'$!    +  K°Ù¹R 5¡ÜàØÓØÖÌĿ®]  + +  "'#!  /))"!9`kf[bfXUNF:1$-Nf]1Luƒ“š›”ž œŸ ÉàåäØÈÔçêìîððïêãáàÒº¼È̾£§¦©©¸º´¶ÀüÀÌÒÒÔÔÕÓÑÖÔÎÌÐÙÚØØÜÚÛÖÐÉÐÙàãåëöûüûüýüþýüüýüûûüýýþýýýýýýþýýþþþýþþþýþýþþüùöøûûýýþýýÿýýýýýþþüüüýüøñêãáÞàåêðööúúûüüüüüüûýýýüýýüýýýýýýüüüüüýùúõëâåçèéçãÝÞçèæàÝÛÙÞÞ×ÛÚâäæåãßâäÝ×ÙÜÛßâÜÙØàæìêçíó÷øøôñò÷úüüüüüûüûüüüýýüüüýüûûüüûûüûûùúúùø÷ôñìêçææçîôùüüüýþüýýþþýüýýüýþýþýýýüüûýüüûýüýþýþýüüýýýýýþüþüýýûüúøøùúûüûûùðãÔÍËÃÀÂÁÇÇÉÌËÉÍÐÔÑ×ÛÜÝÞÞÝÜÙÖÓÏÎÌÉÈÊÊÌÆÅÆ¿Âƾ®ÁÜåîññòôòòóðäÕÇÄÆ¿ÅÇ¿ÄÈÊËÊÄN2+*) &#%8><<78BUlpke^Q?55>;3*,,.0*'%*"! $*++)!  + +    +     /54=@DA89>=6876;2. %).-'&(/(-B, 6=LNC<) &6EB=:...5=<>>8:<7;470/&'!0+( "%*-2  $.8AD=$%-=I;A=;..4873..4?;HF=4?EIYca`SIELV^gqu~y|t~xz‡†{|~„‹‹ˆ€xqjjndP7!%0FHIH7/! %JaomhXJ==SXafpmm‰|~|{|€ƒvqjgpoqloqnlaZYNDOX_lrdV8# +   -COX_dfdpijkihntqijd]  +        + +    " &+)*$",)" ##!!!#"    #+!"/,,#&')-)*+*81#"&(.9;9:0!!&!&*%-<5#$%! + +#" 0IO=CDD:66)/%.30(-2&! ??   + + #f¦½5' +D°çìëëèäØÏÉÀš@  RÝL +  %! &)   (4,$"7^kljfihniK#PeSC ##Ly†•™œ™¡ž ››£ÉàãåæØÆÑçíîïðíííåáâÚì·Ä·©­³§®º»µµ¾ÁÀ½ËÏÓÐÐÒÓÏÐÌËÒÖ×ØÙØÝÝÞÜÖÎÏ×àéôúüüüüüýûûúúûûüýþýýýýýþýýýþýýýýýýýýýýýýüüûúüþýýýþþýþýýþþþýüüûøòíåÝØàçíðóööúûüýûüýýüüýýýüýýüýýýüüýüüüýûüýüüùøòìéâåèêëéééèçéëéáßßáß×ÏÒÖÛÕÔÕÓÖ×ÖËÊÔÙÞããâæèèåæçêðóöõòðïñöùùùûüûüûüüûýýýüüýüüüýûüüûýüüüûùùûúùøù÷óðìèæäãéïõøûýýýüüûýûýüýýþýüþýþýýúøûûýýýþýüýýþþýýýýýýýýýüþþýüýüú÷÷÷÷óìáÔÌÈÄÆÄÆÉÍÉËÇÂÆÊÏÎÐÖØÜÜÛÜÚØÕÔÑÏÍÎÍËÉÈÊÊľ¼®²ÍÞèíòõñòñóõôóíÝÓÈÁÂÅÇÇÈÊÊËÎÍÄQ450*&),#/4;JDE^ttpcf_S817BC278:91-*%"" %++$"#  +     +  %)7?=:>2/4?4157"#$&#%!*& "*2+" %+->F8+9A>ELI+)8DA?E:722.0176AC>4>KI<24>BXUSRQD=NZSdllvkafvr‚tx€|xzˆ|ƒƒ…ˆ‹„xjjnkhG)+ARXNH;1 #EYgiVIE8?EM]ipolŠ{p~zru~wsmqptnmkmtul_Y\VCAEUfePK7!  .@ELX`_bikieiipogkk]` +  +     +         ! $-&##!$!#*#" !#    + ((*)()42'#$&/+)'"$04044- "#431'" +  + ;NMHEC?955+-%)0.% # %!A !!  + + #j ¦h$ (mH¯æîðîëèÛÖÕÈ”;    ( '& ++#-\jlte_qna9,UZK3   +(]”š¢ž ŸŸ—–ŸÅÞâååÙÆÕèìïððñíëäââÚ¿ž«¾¸ª³´¨­»¾³²ÃÅÁ¿ÉÐÐÑÓÔÓÎÊÈÎÔÖÕØÙÜÞÜÞÜÚÓÐØßí÷ùüüüýüûûúûüüüýýýýýýýýýþþýýýýýþýýýüýýüüüûýýýþýüýþþþýýýýýüýýýùïçäàÝäêïõøùøùúüûüûüþýüýýýþýýüüýýýüýýüüýýüûüûùù÷óïëæãæééëêéêêêêéèããââÝÖÓÔÕÖÔÔÕÕÕÔÅÇÏØáâàæééééççèëîîîìíîîó÷ùùûüüüüüüýþþýüüýýýýýüýüûüüüüûûûûüüúùùùõóîìèååéëï÷ùýüüüüûüüüüýüüýþþþýýüýûûûýýýþýýýþýüýýþýûýýýýþýýýüüüüøöñîëåÜØÐÊÇÈËÉÌÎËÃÀÀÉÎÑËÐÚÙÞÜÛÛ×ÖÔÐÐÎÒÏÌÎÌËǽ·¬³ÏáéëñòôòòóöõóðæÕÌÆÂÆÅÈÉÈÈÈËÎÊ_:0&)12%*2>;E??Wnyvki`F:8=HA?>:<:2+'$&"'$%#*'&+ + +  +   + +  2:;9>:062840'-$!#! %!$',#! (1,DH6&"148?WY-->ME=@?70920'0078B6=???(2LPLR]`\FCKQQb]^bbdrqztwusp~…x€|ƒ‹‰ˆztvwj_M.&5ARJGA@2 !?_k_SSK8EIQ[ckrsuxxmunpvnjusursqlmrspjeg[E7AU]QL?3 -=GQV\^jmebbginlggda]  + + +    +   +   # %,($!$)"#*) $! + "  "'"',+$),),* ')/'$() #!%$)% # #&-+&!!! + +  -AAKB@B?>662)&$00*"##"(  1z¡\ J¯äîððïèÞÙØň1 + +   +*"'  + (('%#*Nekllmpn^,8ZdI" =dyŽšœŸœ™¥¨ž”Œ´ÙâæãÒÂÕéïîðòñðíåâáÛÇ ¦·¹³·¸°¯¹º¯¶ÀɾÁÊÑÖÖÖÖÓÌÇËÒÐÊÈÊÒÚÞÞÞÞÚÖÔ×âòúûüüûüùøùûýýýýýýýýüýþýýþþýüýýýýüüýýýüúûüýýþýþüýýüýþýýýýýüüûöîêâáâêîôõùúûûüüüûüüüýýýýýþþþüýýýýþýþýüýýüüüúùø÷óññëéæãèéêçèèêìíìêæââäãÙÙßÞÝ×ÔÕÙÚÙÏÍÑÕÚäåéëíêëèççéëêèéêéìðõ÷úûüüüüüýüýýüüýýýüýüüüüüüýüüüûüýüüüüùùùúöóðïëèæéìíòøúûûüüûýüýýýýýýþþýýýýüüüüþüýýýýüýþþüýýýýýýýýþýýýýüûüúòìææãÛÔÏÍÌÎÎÎÊú¹ÃÉÑÏÐÕÚÚÛÜÙ×ÖÕÑÏÏÎÎÉÌÌÇÉÁ½³¨ºÔãèíñòôóòòôöôóêÚÍÉÈÉÇÈÊÉÌÌÊÌË­m@,)))*%2/06:D456*,64-#$"&!  +   K’¦—H   A§åïðððíå×Ô¾r+  + $! $(  +&+*)(*J`tnpomnS"%@U\@$Rq|‹š™˜ž šŒ‚£ÓáäâÐÀØêîïñññïìçäâÛÄ©¢µ³°µ³­±¹¼²µ¿ÈÁÃÊÑÔ×ÕÔÒËÅÎÔÑǹÀÐÛÝáââàÝÙÚäòùüûûøôóúûüýþýýüþýüýýýýýýüýýýýýýüüýùúûüýýýþþþþþýýüþýþþýýüûöïéèèääìó÷ùøùûûûüüûýüüþüýýýýþýüýýþýýýýüýýüýüüüúøöóñïîëèææåçèãåçìîìííëéææäáäçäÞÛÕÖ×ÞÞÓÓØÜáèêìììëëéçäçèéèèèëëîñöúûüüüüûýüýýüüýüýýüýüüüüüûûüüüüüüüüûùùùùø÷öóñïìéèçåèîôøúù÷üýþýþýüýýüýþþþþýýýýüýýþýýýþýýþüýýüþüýüýýýýýýüûúøñìèãÜØÖÑÒÒËÉ¿¶¸¹ÅÏÊËÐÓØÚÚÛØÓÐÒÎÏÎËËÊÇÇÄÁÁ¶­ÁÕæêðñòôóóóôöõòëÜÐÉÈÈÆÉËËÌÍËÊ˺M5.,-.(+,3@=GC?F{™ˆoX;=LDH1*.5421*%,)"&)%     +   + + /0DBCH>83*0(#/+&#    5EH8"#(.8>9558<4073<6%$#"+%#-4259=:0>HLW`RT@4=HHOUY\^apkurhtruv}wvp|xuolqtlf`YB353>DC7?B/9WcdioiM=DKYahotnd^ajnrojowsurrtoqligXWUP;7HTXcaU@#  7HTZ]jifaikqkdgf^^g + + +          + +  '&$&(&#%$'#)+%&""$ +  + $ !(&-%))%'"$"'&,*# "'#0/'#   + !  +&7@>F?9.4<1-+246/ '&#&  + + &k¡¡5 + AŸßîððñïéÕǬa)   $ &   +)/47O\etpwnjC!+RbL, 1cy‚‚˜™žŸž ™‹xv–ÃÞäáÔÄÖëîïðððîìçâãܳ¥¦­ª¸¶¶¶¾¼·ºÁÉÂÄÐÑÓÏÐÎËÅÉÑÓÍ·ÁÏÜÞáââäãäåèíðóôðìëñüýýýüýþýýýýüýýýýýþýýþýýýüûúúûýýþþýþÿþþýýýþýýýüüúõðéââæéìïó÷ùùùúûüüüüüýýýýüýýýþýýüýýýýýüýüýüüýýüüûùøóðëëêçäåæçãááãëêìíìêéèééëîìæáààâåêçßÚâèéëìîîìïíéæåèèëêéçëììíòùûüüüýüýþüûýýüüýýüüýýüüýýýýýýüýûüûûüúùúúøùø÷õóðëåáÝßãéîíñùüýþþýüþýüýýýþýþþþýüüüüýüýýþÿýüýþýýýýþýýýýýýüüýüùõðêäÛÚÖÔÐÍÅ¿¶´¶¿ÆÌÇÌÓØØØÙ×ÓÐÏÑÏÎÊÈÂÅÇÁÂÁº°ÂØçêðóóõóñóõôóóìÞÐËÊÊÉÊÌËÍÐËÏÏÄ¡h:-4*)&')35===77,*-(1).'"#"! + &DI7"#12;28,!)06:625! !%) "%(,,076-'-9BECC5,2:GLLVYa_`dgkkpwkqxtpqu{lmfnxnkk][J2&,68=D=9.* +8XqrqumKBKCUgjcfjWRgkjckffgkxvqpxwmnh[XZQ4-Oecb\S8  2BMQU_dhkirvmifjbhb   +    + + +       "$&$&"*%%'&&+)!"!! !   + +()"%!%!!0&#! )!%$!"$"'+  /'   $ + .9<DB;2)23135*)#&,#  +  +   +       $9=<:16<8.046)&*$%!!  + !*:@0(./13;("#)('*+$ " ) +44'"(043+*!##.6-&1/6@wµ¨sn‘~]58HJN=35.24*/)$,!&%!!        +  +  + *8C=1551280'!%/($!      --/$!&2((-"", #%&',0+#!') &!&/?DQ]ccbbie_c_`eg`jeammckrqooke]^J5$;B;<+" /OallhYL>=?OY`[[^daagdpjjhnmejhldjpkhUJSD.%DcgbO7, %(&BLX\er|wsqg^[`]  +   + + +  + + +!!!(#*-'+#$#%#%(-)'%%   + +$/'""   !$"'#!"#  #$!.%  *6;53*+/'&$$# + + + +   '- $,&$)("*' '!&#$&$*3?DVZ]^[\WZTZ^bZ^Y`^bc`jjihppc_\SA&%<KNI<5' %:?FRcouxvicTQ]b  + +     !!#"#!"" "#$"#  ! #'!!!")#"#%&(%"""#%# """# +!&#.#   )"1DE=B614:6.25/(&%  +  +    0´½½­‡5 "IŸÖæëîñòóïìÔy4  +# !& "  + 6DRMFAQ^gk[6)YXE% MxŠ—š ¢™šž›xo~‹‚|©ÒÜÐÂÙëïïððïîìåâãÜÌú§˜¦¶¹³»ÅƺºÅÈ¿ÆÏËÎÎÈÄÈÏÐÇÁÀÄÀ¿ÃÙãåèêîô÷ùüüüüû÷ïîñùýýýýþþþýüþþýýýýûøôöúýýýýýýýýþýýþýýýýýûõñíêææèëðö÷øøùúúûûüüûüýþýýýüüýýýþýþþþÿþþýýþþýýþýýýþþüþþýüüüùõôóóðñòðîìéäÜÔÎÒÙàæêîóôöùøù÷÷õôóõöôîëòõôóîåÝØ×äîõùúúüûüüúúûüüúûüûýüüýýüüýýþþüýýþýþýýýýýýýýþýýüýüþüüýüüüûüüûûûùùù÷öôðêåçèéêìòöúüüýýýþýþýýþýþýýýýýýüüýýýýýþýþýþüüýýýüþýýýýûùôíéáÛÜÓƽ¼»¼¾ºÁÉËÏÍÍÓØÙÕÓÔÑÒÑÎÊÈÊÉÈÇÄÄÆÎÛçëïñóóôôóôõôñéÚÂÂÉÎÊÈËÉÎËÎÐÐÑÏÁŠL50.01/,3>^«Ì°k]XIDDJJI<5212(,0&'#')&% #  +     "68<;042'("# "$ + +   !#%!$&*'$ '  &'0898:MSKRGDFGQNQQNMEIQSOGNZ``VZZUN?0)'!-638,%4D?920'")'%1/+72-?@0''/5)-)*+)-1..&%&"   "#' "-38DIMSUVUPK@@IP   + + + +  +  +       "!" '$" '%")"%# &'& !""("( +&)$ "-(#   ! % +,5AB@;:-1;213-'02*'!   + "" +  +  !HÈÞáΞN&W·åîñòóôôòìØ„2   %(%!   .INND9BXheE'/YQ43l„‘“› ¥ššž•‹ntŒ„u†¼×ÏÂÚìîïðñðîëãàâÚÌþ´©§·ºµ»Åú½ÈËÃÇÍÌÉÍÆÉÑÓʽÁÊÉÂÀÂÕâæêðóúýýüýüüüùòìî÷üýýýþüýþþýýýýûúúøøûýýýýþþýþýþýýüüüüüöñçåçèéîðô÷ùúúûüûùüüüýüüüýýýýýüýýþýýþýýþýýýýýþýýýýüýþýýþýýýüûù÷öööòðíëèèâÜ×ÓÒÖÜáçëíîííïïîìíëççêìéàÛèêëìêæäâÜåïô÷ùùúùûûùùúûüüüûûüüüüüüýýýýýýýýþþýþýüýýüýýþýýýüþýýüüûýüüûüýüûúûúúùøöòíìíìéæäçîøúûýûýýýýýýüýüûüþýýüýþýüýüýýþýþýýýüýýýýþýüø÷ôóîèäÝÕÆÀ»»¾¼·¸ÄÆÍÐÍÍÓÓÔÖÓÓÒÍÎËÌÌËÉÄÃÃÆÐÚæíðñóóôóóññóïèÙ·³ÁÌËËËÌÍÍÎÑÔÓÌˤ`A:46+*)46M—ɹ|cVFFBTK=3%%'&'#)2,*3'!"%#!$) "$().  +   +R®ãëíìÙ¥R /wÍíñóôöôôóîÜB#  +3%   +"BDK8CBKWK)8PD Qw‰Ž™ž œ›–‡„qit„kk•ÄÀ¿ÝìîïðïïïëââäÞÎÉË¿µ±¼¼¹½ÁÁ¹·ÈË¿ÃÉÅÂÀÊÑÎÉÀºÁËÌÉÆÅÒåéðùúýýýþþýüüûøñîòûýýýýýýýýüüüüüýþþüüýþþýýýýýýýüûùøñìèéåèìñô÷ùùùúûûûûüüýüýüüýýýýýüþþýþþýþýýýýþýýýüýýüýþþýýýýüüüûúù÷ñíëæäßÜÜÝÛÛÜÝÛÚÚÞÜÜÛÞàÛÙÚ×ÚÚÙØÕÔÖÔÕÖÌÆÐÓÕÖØÛÖ×ÚÞàåææèëëëëíîñò÷øúùúùüûûûûüýýüüýüýýýýüþýüüüýýþþüüýýüüýýýýýûýüüüüüûüûúùùùøõôóñîêåäåæëïöúýüüüýýýýûúýýýýýýüýþýüüýüüýýüýüýýýûüûù÷öùúúòèÙËÁ¿»¼¶¬®¹ÆËÎÏÉÌÑÑÔÓÔÐÏÎÊÌÊÈËÈÂÃÌÓÞèëîòóôôóñððòñëÙµ¦°ÃËÏÉÌÊÍÑÐÑÕÕÒÁŽRF70*.+0/JPNC89+-0/%""" )%"*)       085)$'!  "       +    +  +    +     +    +  +  + +     +  +     + + " # $%($(..+0,&*##!$#&*+9IF60&" "*0/,(&"$%&)&#) #($%%#(%%!!%'(!!( + ! (++,),3%&&0(!'+,&1(%,,)-(*;62*'%*%)-("#.),*+!+3'3+%%''0. ((,(-)('% ((+-/#$)&(%*&#'% #+'")..2:91$  $  +    +-yÈéïðíâ²]& +tÊîñòõõôôòîß I% )  "40   + + !@7>LG$(C22dx‡”›™  Ÿœ”“†~wae|}o†²¾ÀÙêíïðïîîêààäßÎËÊÄ·±¼¿¶·Åü¾ÉȽÃÆÞÌÕÎÅ´³ÀÍÎÌÇÇÐæíõûüüýýþýýýýüúôðñúýüýýþýûüûþýüýýüüüüýýþýþýýüýüûöñëèççèìîòöøùùùûüüüüüýüýýýýüýýýýýýýýþýýþýüýýýýýýýýýüýþýþüüýüüüû÷òîçèãßàÝÜÞáÞÝÜÞÞÜÚ×ÒÑÓÑÒÑÍËÌÊÈÉÆÈÈÉÇÃÃÄÀ½ÀÆÆÅËÄÆÉÎÕØÜààáäããààáäæêìñóõö÷úùûüüûýüûýüýýüýüüýýûüûüýýýýüüüüûýûüýüüüüüüüýüüûûúúùøùøöôñíêèãååçîôùüûüüüûø÷üýýýþþýýþýýýüûüüýýýýüýýþüûú÷÷úüûøñãÒÉÁÀ¿·³±¶ÁÈÍÐËÍÒÓÓÔÓÏÊÍÌÊÇÉÅÈÀ¾ÆÎÜæëïñóôôóñììòòìÛ¯«¾ËÏÏÑÍÒËÌÒÓÕÒÆ¥gB7873141>Z§Á \<6@VKG<521-'#+%#%*% !" %$    # +   + +        + + + +      + + + +  +  + +    +   +%  + +    +     +!  595>,&D>!   &'  +       +  +   ! $*# ")'*$&02"   + + + 8ÕëññðèÂp30mÅëñôôôôõóðߤF:!0-"  2OI??<8BI- 1?$ Dtˆ–žš¡Ÿ˜šnh‰{_gvŽ‰‡§»½ÚêíððîîìéåäçäÑÍÏĺ´¿¾´¾ÇÄ¿¾ÉȺ¾¿ÂÂÂÐÒƼ¯ª¹ÉÑÑÎÌÔèòúüüýýýþýüþýýûøññøýýüüýúüýüýýþýýüýüüýýþþüýüüú÷ðëêåäèêïò÷ùùøùûùüüýýýûýýýüþýýýýýýýýþýýýüýþýþýýýýýýýýýýüýýûúúùöóðìçãßÝÝÚÛÛÞÝÝÜÛÛÛÚØÑÉÁÀÂÆÂÁ¿ÁÀ¾¼½¾¾½À½¹··¹´¶¶´¸»¼¹ÀÂÉÍÑÓÖÚÝÛÛÙ×ÙÛÜÝàäèçêëîðóõùûûüüüüýüüþþýýýüþüýýþüüüüûýýýüûýýüýýýýüüýüüûüüûúúùøøöòñïìêæãßåìñøûüúøñóúüþýýþýýýýýýþüüûüûþþýýýýýüùùùûüûúøîÞÎÈÇüµµ´ºÅÉÐÍÍÐÒÓÔÖÒÍÌÍÊÆÉÇÆÁÁÅÍÛäëíóôôôôñçêòòìÛ³¡¸ÉÎÏÍÊÐÏÑÓÓÔÔεwJ;86404(:N†®”V>=KYO312340+**&)$''#!$*+      + +   +    + &$  + +     + + +   + + + + +  + +  + +   #,") + 4NK$ +   + +   +  +    +      + +   +  +7 +   +  +   + +  + +  +!,!  +  IàíññðìÖ”H 6h¼éñòõ÷÷õóïàŸJ  + /.! +->MK@8:9 $ Cwƒ‡›› ¢ š™zfXkˆvhs’‹¯ÃÜêìíìîììïëëëêéâÖƹÀÊø¿Æý¼ÃÁ¸º¹ºÈÐÏÈÀ®®¶³ÅÐÔÐÚêøüüýýûûüýüýýþüüøòîòúüüûüýýýýýýýüüýýüûûúùöîçäèêêíïóô÷øùúúüûûüüüýþýýþýýýýüýýþýþüýýýýþýýýüýýýüýÿüüüúùúöôòñïïíéçâÜÖÑÑËÈÈ¿¼»¹ÉÙÙÚÛÚÛÙÛÛËÉÎÑÑÑÍÆ¿²¤««¬ª©·½¯¯«¯®­¨®ºÀ½¼ÀÂÄÌÍÊËÐÑÎÌƾ»½ÁÁÄÃÉÈÌÎÓÚÛÞãçëîòõùúûýüüüþþýýýüþýýýýýýýýüýýþýþþýýýýüüüýýûûüûüüüúø÷ù÷õôðîêäÜÚÛßäêøüüüýýüýþüýýýüüþýüüýüüüüûüûûüýýüüûùùïßÒÅ¿ºº´´´·ÅÌÒÎËÊÍÌÏÎÑÐÊÈÆÊÊÊÇÀËÜæêëñôôôòíåæìé׺£’Œ˜»ËÑÕÑÓÔÔÕ×ÚÙÕ̬rL6>429119KdN018TK<80*:87((%$-+& $'+! +    + +   3    7   + +        + +     + +    +   + +  + +  +2uÄêñóôôòìÙ€:'.]´èñòóôóõóîÖ‡:%   !63+ &3JD:=687  + Uxˆ’ ¨  §ž”’†od^\}‡}‚‘š“£ÇÝëìêêêéëéççèåàÚÔÈ¿ÉÎÄ»¿Éº¾Ã½²´·ÀËÍÊÀ±ª²·¸ÄÎÓÖâòûýüüüýýüýýþþþüú÷öúýþýýüýýþýýþýýþýýýü÷óñíåÝßâèìðòöøùúûûûüüýüýýýþýýýýþþýýýýýþýýýýýþýýüýþýýýüýüûúøöóóñïîîìéçãßÛ×ÓÍÐÍËËÌÆÂÁÃÏÚÜßÞàäàßÞÔÊÈÍÑÏÊÅĺ¯­°­±±¶·´²³²¯­®³ÀÁž½¾ÃÇËÎÌÍÍÏÌËÉÄÀÁÇÅü¹¾¿ÀÁÆËÐÒÒØÛàåêïòõöùüüüýýýüýþýýþýýþýýýýüýþýýýüýýýýýýýýüüýûüüýûûúúùùöôñîæÞààáåï÷úþýýýýþýýýýýþýýýþþýýüüüüûüüüýýüüüú÷ëÚ͸¸µ°ª²½ÆÍÏÌÌÍÍÐÌÌÏËÊÊÉÅÉÇÃÐÚäéíñõóóòïçæéá˱žš““´ÅÏÓÕÔÔ×ØÙÙ××μˆQ;678734C^ZI6:MUC3729@10'&+-3'%! $    +   + + 6 +  + +  + +  + + + + +      +*    +  + + +    + >‘Øíðòóôóïã£P+/Q¨åðóõõöôñëÉr3  56-#  &!+FIJ;63B9"   (hwŒ£¤£ž¡žž™ulhZMcŽŠŽ˜¡žÇßéîïëìîêçÝáåá×ÏÏ˺¹ÂÀ½»ÂÄ»·¾¹®¯»ÈÍÌǸ¬µÀ½½ËÑÖßðúüýýüüüýüüýüüûúùûüýýþýýþýþýüýüüýþýüüúðäáßßâèíðóö÷ùùûüüûüüýýüýýýýýýýþýýýþýýþýþýþýþþýýýýüüüýúúùôìêêëêêêéçáÚÙÖÕÔÒÎÇÅÅÊËÎÎÅÀÃÎÛââæéëéæãÙÊËÏÓÐÏÐɽ³¯±µ´³·¹´´¯²±°³¶ÁÂÇǽÅÉÌÏÐÎÌÍÏÊÆÃÀÄÍËËȶ°¸¸¸¼½À¿ÁÉËÈÑØßåçêíó÷úûüüýüþþýþýýýýþþýýþýþýýüýüýýüýýüûüûüûûüüûüûúùùø÷ôïìêêååæêòùüýýþýýýýýüýýýþýýüýýýûûüüüûüüûüûûüöéÙ˾·´¶­©¶ÅÊÎÊÊÍÌÏÍÍÌÊÉÊÇÍÎÈÇÏÛãèìðóóõôñëêæÓ¼©˜Ž‰”³ÂËÑÔÑÒÚÙÙ×ØÙÔÈŸW;<7<61;Tg`FDOYW<;A8>863)0-/1#  Y@!%        +     +    +  +      .72 + +  +   %R¢àîñòóòòïä­]--Y£äðóôôôòíá«U+! 68- %-% :KE><;BJ& + 1t‚”¡ª©¤™œ “‰nskbQbŒ|ƒ—˜—ÅàëíïððïíèÞÞãàÑÎÐǹ²Áõ¾Äõ´¶±­²ÂÍÑ˽­¨º½»ÇÓÔÙê÷ûûýýýýûüüýûúüúüüþýþþýýüýýýýüýýüüüüûõîäáâåêíñóöùùøùùûüûüýüüýýýýýüýýýýýýüýýþþþýþýþþýýýýýûûûùôðíçãáßâßååàÚØ×ÔÑÍûº··¿ÁÇÎÌÊÀÁÐÜãåèéëèéæØËËÑÒÓÕÒÉÁ¼½ÁÂÀÀ¾¼¹¶¸·¶°»ºÂÉÍÅÁÁÄÉÎÑÐÎÌÏÍÑÈÄÅÅÌÎÉÅ¿·±°°´±²²¸ºÀ¿ÃÃÉÎÔÜÞäèìñôùúûüüýýýýýýýýýýýýýýýýýýýýýþþýþýüüýüüýûüüüûûúùùøöóòðîëææèíôøûüþþýþýþþýþýüþýýýýýüýûüûýüýýûûüúñàÏƺ·¸¯©¬¾ÈÍÑÐÊÌÒÌÏÐËÌÉÊÊÍÉÂÍÛâæíñóóóóñìëàÊ°¢˜‡›µÃÌÒÖÔÐÔØØØØØÔͱh85.559PmjV;MX]R>?>4<+174*-.2(,7*$' +     + +   + + +   ! + +     +   + +   +  + .5" +    +  +  +'Z³åðñôòóòíæ«W-'OàðòòóòíèÍ„?"   2>;1&&61'JM693:G5! 8|‰™œ¦¤¤ŸœŸ•€jpfhbk˜Š…Žš’¹áìïïðððïèÝÛÚÖÈÃÆÀ¯´Àº²¹À¿³µ¸°«²ÆÑÏô ¦¶º½ÌÓ×ãòûüüýüüýüüü÷÷ùüýýüýýýþþýýýýýüüýûüüúøñìãàæêíïó÷÷øùûùûûûýüüüüýýþýýýýýýýýýýþýýýþþþýýýþþýýûûù÷õîëèåÝÙ×ÕÔÕÜàÜÖÓÍÇ¿¼·¶¶¶³¸ÂÈÌÎÉÆÄÎÚáææéèèåâÖÍÐÐÕÐÓÎÌÉÉÊÍÏÑÏÎÊÂÆÄ»»ÁÆÃÃËÌÅÂÁÈÍÐÏÌÏÏÐÓÒÈÃÉÉÏÐÌý²°®³³¯³±±´·½½ÁÀÃÉÌÏÕÝâæéðóöùüüüüýýýýüþýýýþýüýýýþýýýýþýýýüüýýýüüûüüûûúùúúöõõñðîëìéëðñ÷ûúüüýýþýýýüýþýýüýýýþüüûùûûüûûúöçÖËÅ¿·³ª¨´ÂÈÓÑÊËÏÑÐÍÍËÉÈÈÉÉÃÌ×ãéìïóõóññîéÜê ‡Ÿ°ºÊÓÕÒÑÔÙ××ØØÖϼ‰K765989,+%*4.-&!,1!$"     +   +     + + +   + + + +      +!! +  + +  "&"0!7   +  (_»éïóóòðñîážM(*DŽÛîïðïíçãÎ8#  +  9EC@5  %5)BK::4:BB% J€¦¦§¨£ ž˜~rstkqo›Šˆ¢–”¬ÙîïïïïðïéÞÑÑÎľ»´¨ª´®©¯´¶¨¦­¦¨¸ÉÑÍ¿­Ÿ®¹½ÊÐÔÚêøûýüüûúûú÷ñíôüýýýýýýþýýþýýýüüüüûúöïééåãèíïòõø÷ùøúúüüüüüûüüüüýþýýýþüýýýýýþýüýþýýüüýüýüûú÷ñìææàÜÛÖÐÍÊÌÔ×ÐÌÆÁº´ºº½¾½¹³³¾ÉÎÑÌËÊÎØàããååããÞÖÎÏÑÑÎÌÉÉËÐÔÖÙÞÝÛÔÑËÄÃÂÆÉÅÈËÇÄÃÄÉÎÏÐÑÓÒÔÕÏËÉÊÑÑÐÎÆÁº¸³µ¹µ±¸¶²²³´¹º¾ÃÃÀÅÌÐÜàæëïòöúýüûüýýþýþýüþýýýýýýýþýýýþýþýüüýüüýýüüüüýûüûùùöõôñðïííìéíòõùüüüýýýþýüýýýþþüüýüûûùõùûûûúöïÛÓ˾¸»³¨«ÀÈÎÐÏÉÊÌÏÏËÊËÇËÉÆÈÏ×åèéíòôôôòìèÙ¿©Ÿ‰¤¯­¿ÑÔÔÒÕ×ÕÖ×Ù×ÔžU62?=R†—vYKQeUB88303/0/*,7,) "043.,$   +    .       + + +   + +       .-+,,$1  + + +  +  +qÇëðòôòñïèшB'":uÅâçéêèìëÛ?! + + 0LJ?;% -7-4NB;  +!'-$BE<@B:E1 +5m„—§ªª©£¦¥˜„spq~{{™˜‡‚££ ÉëíñïñïñëßÕÙÜÕÐÎĽ¼Ã¼³½Å¿´¬³®§ÊÍÊ¿°ª²º½ÊÍÑÛëùûûýû÷ôêäããàíóûüüüþýþýýþýþüýýû÷ðäáâçëìíóõ÷øøùúüûûüüýüûüüüüüýüþýýþþþþýýýþýþýþýþýýýýüûøóîéæáÞÙÔÍÄÈÎÏÌÌý³°¸¸ºº½¾»¼¹·º¼ÇÐØÛÛ×ÐÉÓÚÜâãáäââàÙÕÓËÉÈËÌÒ×Üßäééæäààßß×ÒÔØÕÐÏÏÌÍÒÔÖÙÙÙÜÜÛÙ×ÔÎÑÓÔÓÑÌǾ»¶¾¸¶·»¼¸µ¸¸±´ÀÃÅÆÅÄÁÈÑÙÝâèèêïôøúüüüýþþþýþýþýýüþüýþýýýýýýýþýüýüüýûüýýüûûøùúùøøôòòîìëéêëðô÷úûüüüýýýýýýüüûüûùøøûüûûùõêØÉÁÁ¼µ­¤±ÅËÐÒÈÉÉÈÈÉÊÉÈÇÊÊÊÓÙÞäæëñôôóóíâ˱¦ŸŽŠ˜°¢¡¬ÅÓ×Ø×ÙÖÖ×Ù×Õ̶l585D„©¡u^\ijMD9.*16-,*,/,1#'7@=2$  + +   +  + +      =-         + +   +    +   B  +?) +     ;†ÙíïññïçÙÐÉ9$"7cºæìñóôòðè¸V- +*GGB>0 -5$3B$0oÌìððóõóñê¸`, + "@DI?37*92#.?@@D?CH +Jx §­¬ª©ž‰Š…x~ynpnƒ—‘’›¦ª¼áìîðïñïêÞÖÚÙÍÎÐÆ·»ÅÁ¹»ÃÁ´®¬§±Ê;¯Ÿ±¼·´ÁÐ×æóùúõöõôïäÝÞÞÝãõúûüüüýýüüüýùóìäßÝâçëðñõõõøùùúùûüûüüûüüýüüûüýýýþþüýýþþýýýýýýýüüýüüû÷ñíééçäÞÝÜØÖÑÌÉÑÕÔÍÇ¿¹·²¼»½½¿¿ÃÇÏÒÍÕØÛàâãÜÚÙÝäååååäæèçééæãÞÝäëîñ÷úù÷îéçí÷ùùõîîëêëééêëíîñòðñóñðîìçäãßÛØ×Ô×ÑÈÆÉÉž¾¸¸¼·¸¶º¶ÁÃÇÆÇÇÇÈÌÏÐÖÖ×ÚÝãêìïòöûüüüýýýýýÿýýýýþþýýýýýþýýýýþýýýýýýûüüûûüùùúù÷øõôôòïïíéééìðõúûûýýüüýüüùùö÷ûýüüýüüùñäÔǽ¹±¡™³ÆÎÖÑÈÀÆÉÉÇÆÇÅÆÊÈÍ×áèíïòôóññé×¾¥š‘Œˆ ®¡˜˜±ÉÑ×ÙÓÑ×ØÙÜØÕÈ“F:Cv±²™sbz…eR;1..,($!#00-%!-/.B;((     + + +  + +   + + +    +    FœÙìðëéåéåØË’4$2wÌìñòôôôñé½d. +)"HJG><<$ #--%FGCEHHM1 $Y€Ÿ¥ª±®¥¨šŠ‹ŽŽƒ~zvsq…¡¢“…™®®¶×êïðïñîéÛÚÚÔÇÈÌɾ¸Ã½·ºÀ¾°¤¢­»Åĸ¡˜¬º´µÈÍÜèñóõöûüü÷ìÝÚÛÛÝæíøüüüýýþûøóìåàáÞâèïñôõö÷ùøùüüûûûüüýüüüýüüüýýýýýüüýýýýþþþýþýýýüüýøòíèæäâáàÝÚÜÛ×ÔÎÉËÐÐÎÈÁ¹¹¸»¿ÅÄÀÃÉÏÕÖÔÓÔÚàåçäæææééèçççìïñõøõïæÞáêõùüýýûðâäôûüüûùôòíèçãäéðöúûúúûûúùùöôòðîèåßßØÓÌÏËËÇÆÅÅÅÂÁº¹¼ÁÂÉÉÆÅÆÊÍÐÏÑÑÒÔÖ×Ýåééïò÷ûüýýüýýþüýþþýýþþýþüþýýýþýýýýýýýüüüýûûüüúûúù÷øøõõòïíìêêéêïôøüýüýýüüùøôùüüüüýüûûøìàÑȾ¹¢œ­ÁÌÓÑËÆÂÄÇÇÇÆÆÆËËÐÙãéìðóôóôðä槑ˆ™¬ªž–˜§ÄÓÖÙØÙØÚÚÝÚØÒ¦W=VœÀ±Œqy’‰cJ:3/'#% &+')'*1?A;/,"   +   +    +  + + +  +     +  +    +    + +   + HœÛëïîïòñì×Ày25wÇìðóóóóñê¾d*  &CC@FD-% + (2(5DFLMEHC 0i–Ÿ««ª©¥§œŒŠ‹‡Š†||xz}’¥–‰«³°ÅâíïððîêÝÝßÒ½ÆÊɾ¹ÁÁ¸´À¼­žŸµ¿Â½®››²¸¿ÅÒÜçìò÷ûüýüüûïßÛÝàãèçèìñõ÷õñçßÝáåèëîðòô÷øøùùúüüûúüüüüüýýýüýýüýýýýýýýýþýþýýþýýýüüûúöóìèâÞÚØÙÙÜßáãâàÞÖÎÍÕÖÔËÇÄÂÅÌÍÍÐÐÑÓÖÕØßÞßåçíñóööööôòñõ÷ùûüûûøìåäí÷üþýýýüïÝä÷ýüüýýüüùöòéàáçð÷ûüüüýýþýýüýüüûø÷óîåÞÖÓÑÑÍÎËÍÌÈÉÆÃÈÉÈÈÉÇÆÇÐÐÑÑÑÏÒÊÍÆÍÔßãåçíóøûüüüýüýýþýþýýþþýýýüþýüþýýýüýþýýüüüýüýüûüûùùùøöõóñðíêèåãéïõùûûúùù÷ôùûüýüüüüüúöëÝÑø°©±»ÄÍÓÐÈÆÃÄÁÃÅÃÇÇÈÑÜäéëðòóõòîàÄ®¥–‘Œ¡° –‘–¢¸ÎÕÖÙÙØÚÜÝÜÛØ·kUƒ¸À¤…‡š„Z94*1)##&+/$+7;CEA.& +  +   +   + +      +   +  +   + +           N±ãíñóôõóîܶx6 7sÄêðóòòóïê»^*  +  5C@FF7&   06+$#8OLFFHL* FyŽš¢¢°§¦¨§š†ˆŠ†‹ƒtz‚v|†§œ‰‹£²®´ÙéîðïíëÞÚàÝÇÉÍɽ¹Á¾´³Àº¤œ¬Àÿ´¦§³¿ÊÒÜêôùûüýýüûýûðãÚáîôõòìáÛáãàÚÔÔÛåêïðôõöùùøúúúüüüûûûüüüüýüýýýýýýýýýþýþýþþýüýýýüüüúõïêèâÞÔÖÒÌÕÚÛáéçååäáÒÏÕ×ÒÌÑÔÑÐÏÏÒÔÔØÝßäèéëëíóùûûýýüûûûüýýýýýúöðëêóûýýþÿýüúíÛáöüþþýýþÿþýüúòêååèñöûýýþýýýþþýþþýýüüôëèáßÜÚØÒÐÐÎÉÍÍËÏÍËËÅËÌÐÐÓÓÔÐÑËÈÁ¿ÅÉÑÖ×Ùãëôùüûýûýýüýýþýþþýûüüýýýýýýýüüýýýüýýýüüüüüüüûúúùø÷õôóïìæâââåçïóõøøõôúüùûüüüüûúûòæÖÊÁµµ¾¿ÀÊÑÔÈÃÁÂÃÃÁÂÇÅÆÖÝåêìðôôôðì׿²¥“˜¬¬š”‘Š—±ÉÒÕ×ÕÙÙÚÜÜÛÚÂyn¬Ç½‘y•­©„N:71021%!##.&!(:EKNF-#  +   + +  +      +  +   +      + + + + +      %qËëðòóôôóðäÀ}7#3eºêðóóôóðç±V( + =EKWB2)   '21,/ULCILK<-2 + +   + +       + +  . + +  !#  +  + +4=&   +       +  /‰Üîòóôõóòðé͇;,c¹èðóôôòïâ¥N"  +0BEG=8* +'67&#!'BIHEHHY,.h‡“£§¤¨¬«¬œl{Ž‹……y}s‚„š¦„’©¦›»àêïðíëÚÚáÞʸ¿ÂºµÀ½±µ¶¤ŸÀÊ·¶Â»©®·ÇÒàñúûüüüüýüýüüõäßîòñòíàÈÁÆËÑÙåïïóõô÷ø÷ùüûûüüüüüýüüüüýüüüûýýýýûüýýýýýüýýýüüýýü÷òìèçßÜÔÍÌËÎÍÌÓÞæêëìéëêàÕÑÕÖÓÑÐÑÕÖÞâåéíôúûüýþüýüûüüüýýüýþþýýýûùùûûüüýþýüþýýþý÷êÝãõüýüüýþýýýþþýüþû÷óíèêòöûüüüýýþþþýýýûûüüüú÷ñëæâÞÚÔÒÏÍÌËÈÈÎÎÒÑÏÒÑÕÑËÈÅÃÈÇÇÅÇÈÅÌÓÛåîôùüýüüþþýûüýýýýýþþüýýþýþýüýýüýýüüüüüüüýûüûûùùùøøøôðñëäààÞäææèðùúûüûüüüûüûùñä×ÌÀ¾ÌǾÁÆÒ×ËÄÆÉÄÇÈÆÆÌÕÞåéìñôôñòåÍÁ¹¬›•¦µ§’Ž•–˜ ¸ÎÕØØÙÙÜÙÛÞÜÑ¡¤ÌÈ¥€‹®Ã²pDA=;8:6-%!($!!,=JROLG-/ +    + +      + +        0 +  $('  "  +   "!   +&    =šâïôôõôôôñíÙŸG,/V³åïðòñðíÜ;  &5DJA<:' +(6:'-"?IHMKHZ>8zŠ• ¬ª©«¬¢“fex„‡ˆ„„Œ†z†œŸŠ™Ÿ¢±×éíïíèÜÙâàÒ¼¿¶³º¼°°®¡™¤ÈεµÊ̵«ÂÏÕåôúúûüýüûüýüûùéáéìåÝÏÁºÁÌÙáéïòö÷øøùûùúûüüüüüüüýýüýþüüýýüüüýýýýýýýýýýýýýýûýúóíèçäÞÖÏÉÌÎÑÑÎÇÒáåéîîîíéáÔÓÖÖÏÒÕÙàåèëðóúüýýýýýýüüûüýþþþýüýýýûúûûüþýýýþýþýþþþüûõêÞÞñüþýþþýþþþÿþýýýýýüùòíèêïôúüýýýýýýûüüüüýýüüûùõîëãÜÛÖÑÐÌÉÍÐÑÓÏÎÓÓÑÒÎÊÆÉÉÈÍÊÈÅÀÅÈÌÔÛâîøûüüýýýüýýýýýýþýüüýþþýýýüýþþýýüýýûüüüüüüüûúûùøø÷õôòîêèââáàßèõûùûýüüüüüûúõëÜÔÍÊÑÍÁºÀÒØÎÉÄÉÈÉÉÇÈËÔÜçêìðñöòïãź¸¨ ›²´ –’ªÉÓØÛ×ÙÛÚÝÝÜÓ°½ÒÇ£}š½È©iF=?=;=2*$'-8%*95*,  1DTPIELR Q…—¦¤«®­«¡‡]^sƒŒŸœ‰{yž¤’Œ’£®±ÌæíïìêÜÛåàÓÌÅ·µ­¼¿²¬§¡š³ÐÏ·µÊÌ¿¹ËÒ×ìùùúüüüýûûûûüùìÛÛÙÓǾ¾ÉØßæíñóõöúúúúúüûüüýýüüýýþüüýýýýüýýüýþýýýüýýýþýþþýýüøòêçãÞÖËÉÇÊÑÒÐÐËÉÓÝçêëíêêèáÛØ×ØÜàáäêëîóúüüýýýþþýýüýýüýýýýýüûúùûüþþýþýþþýýÿÿþýþýúôéÚÛêùþüýýþýþýþÿþþÿþýýýüúòëéèîó÷ûüýþýýýûüüþýüýýþýùõîçâÞÚØÕÒÐÒÔÔÕÓÏÐÑÑÐÊÆÉÇÉÌÊÂÁ½¿ÁÉÊÎÕßèñöüýüüþüüýþýýýýþýýþþþþýýþýýþýýýüýýüüûüüüûüûøúùùùøôôñîêæäàÛßçóùûúüüüüüüûùðá×ÓÓØÐÄ·¼ÌØÔÍÆÇÊÉÊÇÇËÔÜåêìðóòñíßÄ»»¥–ª¹±›”•Œš˜ ÁÑÖÙØ×ÙÛÛÞÝÙÄÐÖÀ–…¨ÆÌ™`JBBB; 8;8)') $BPJOJOY'![‡‘§£««®§¢u\Vm~ˆ“œ¦¤£¤‚}œ¨˜ŒŒ ¨Ÿ¿äìîîêÝÞåÞÔÍ˺ªª¸¶§š££¡¾ÓÇ«½ÐÑÇÈÌÍÙòúûüüüûýüýûùûùëÒÍÉþÃÕáçìððó÷ùøøúýúúüüüüýýüýýýÿþüýýýýýýýýýýþüýþýýýýüýüýúõðêåßÕÏÍÇÄÅÆÐØÔÑËÈÐÝæêëìêêéçæáàæèèêìðôøüýýýþþýýþýýþýþýýþýüúõ÷úüüýþýýýýýýþýÿþýÿþüùòá×ØäóûýýþþþþÿýÿýüÿýþþþþýûùòìççêîõûýþþüúûþýþýþýýýýûúóìæãáÞÜ×ÖÓØÙÖÓÓÏÕÏÉÅÊÍÉÌÆÀºµ¹¿½ÃÇÊÑÕßëöûüüýþþþýýüþýýýýýýýýýþþýüüþýüüýþýýüüûûûûúûûüúùùø÷õôòíêèãÝÝãëò÷úüûûûûûúôçÚÖÚÛÏö½Í×ÚÊÅÇÉÉÉÇËËØÝæêìññóòêÛľ³ ž­¶¬ ˜’“•‹˜»ÎÔÙØÖÙÚÛÞÞÛÓÛÖ·Œ™¾ÕË‘WAE9A=?9)*+"$%!:EKLRYXC30  + + +       +   + + +  +  +      +  +  + +  +   + +    +    J·íñóöööóôóðèÈv1\¹ØÝÙÌ­ŠO'   5CA<:1 +3<8)*'"0HKRPL[E$*gŒ”œ¢¢¨¦¦¡›oTVfŠ“£¬° œ–Š|¨ Ž¡£ªÙêíðèÛÚàß×ÐÎÀ§ª¸±¡¢¨ž ÀÔê¿ÓÔÑÍÊÎÛòüüüüüüüüûûûùïÜÅÀ¿¿ÇØäëîñóóöøøúùúüüüûûýüüýýýþüþýýýüýýþýýýüýýþýþýýüüüüúõïëéäÜÓÉÇý¿»¾ÏÖ×ÓÎÍÏÝäéëëíëêëíëêìììðôûüýþþýýýþþýýþýýþüþþûùöö÷ûüýýýþýýþþýÿþþÿÿþþýûøíÞÖØáëùüýüýýþþþÿýýþþþýþýýþýýùòëãâåìõùúú÷ùþýþþþýýýüýýüùòíéãàÝÜÜÛÚÚ×ÕÕÔËÈÇÇÍËÈƾµµ³µ¸½ÂÁÅÊÐÚçõùûüýýýýýýýüýýýýýþþýýýýýýþûüýýþýýþýüýüûûüûûûùúúøøøöôðïêæáßàáèïôøúüüûûôêÝØÛÛϼ¹ÅÎÙÛÑÇÃÊÇÉÊÉÍÔÝæëìðòòðèÔ¾¸©Ÿ µ³¦›‘“ŠŠ°Ë×ÜØÕØÛÜÞßÞÝàϪ‹©ËÖÂQF=E@E@FE;>9+&'?LRVRWUC3$ + +     +  + +  + +  + + + + + +    + + +   +  +  +  +  + +  + + +    +   #SÀîòôôôôôóñîÞ¦O'.uª°¬ Œg:   + +%;EGCRRSSWD5$ +  +      + + + +       +   + + +  + +  +  +  +    +  +  + +   + +   +    +  + +"YÇîòóóóñðíäɦp5    9;3.50+!'->LYc_bX@.(  +  + +    +  + +      +:&   + + + + +  +    +    + + + + + +   + + +   +  +   +   +"   + !]Îïñòððîëݼ˜Q. 9¢¡œ’N   +3??@?3" + /FL8&)*$ 'NbWQKOhu‘—Ÿ ¥§«¥¦¡Š‹{cn¥¹¼·§‰‰‰„€Œ¦¦“ £œ­ÖêìçÚÜâáÐÊÑ̺  £¤¤©­¶ÄÐȬ«ÃÓÐËÊÓÒÕðöø÷óîâÔƸ´¿ÊÒÝåéíðñóõõùùùúúûûüüýýüüýüýüüýýýüþþýûýýüûýþýýýýýþüýü÷îëåÞØÏÆÁº··²¼º¾¹·¹ÌÕÐÏÎÊÖäêììíêâÞÜãïøþüýýýýýþýýÿýýýýþýýúôñòúüýýýþýþþþþþþýýþþþþüþýüüüýþüüüôéôüüýþýþýüýþÿþýþþþýþþÿÿÿÿþýþüüþýû÷÷÷úüþýýýüýþýýýþýüþþýûýüøòéæãââÜÖÕÎÍÈÆÅÆŽ»¸¹··¶´®ª±¶»ÃÇÉÖÜåñöûýýüþýýýýýþüþýüýüýüýýüýýýüüýýýüüüýýüüýüûûûúúùùù÷óóóñîëãÝÝßâéëèéèà×ÑÌ¿»ÁËÕÜÞÝÔÄÁÀÃÂÅÅÍØæêìïñîèÕ¿¸­ž¦´± –‘”’Ž˜µÏÚÙÚÚÛÞÝÜãáÊ¡žÁØØ“R@>EE771*2>!.6OY]`[bS=)'     +     + +       +  +      +%!     +  + +      +      + +     + +   + +       #aÏððïíìäίŠzxW)  8ƒ§ª©¯›N  +   4??B=,  3BF4///#>ZOSIDk‹˜˜ž¡¥§§§¥ž“Œ…­³²®šŠ‡~w{ƒ|—¥—“ž§¢™Æçëæ×ÙáßÑÌÓ˸™«¦¤¤»¿ÇÑ˳¨½ÍÊÃÈÐÆÄâðíçÙÉÀ¶³·ÀÐÚäéìíïòñ÷ö÷øùùùûüüüüýýþýüûþüýýýüýýýýýýþýþþýþþýþýüûùôíéåÜÓÊû¯µºº´º»¼»ÂËÒÓÌÌÏÖãéëêæßØÓÔäôûüüüýþýÿþþýþýþþþýýû÷ðñùûýýýþþþþÿÿþþýþþþþþþýýýýýýþýýýýúóéóýýýýþýþþþþþýýþþýþþÿÿþþþþýýþþüýþüüúøùüüýýüûþþþýýýýýýýýýýýýøñìèåàÚØ×ÒÊÊÁÁÆÆÇÀ¼¸·¼µ³±¯³³¼½ÂÊÔÜâìõûüüüýþýýýþþýüþþþýýýýþýýýýýýýýýýþýýýýýýüüüúûùùùùø÷öóñïíëéæèéæâæäåÚÑǸ¸ÉÔ×ÜÞâ×Å¿¿Ä¾ÂËÖâèìíðîãα©š¥¸±–š–”ŽŒŒ ÉÙÙÛÜÝÝÝßãÙ¼›¦ËÜÖ»€O>B>A?3/445!""4BWYada^Y4'  + +  + +    +  +  + +  + +   +       +    + +  + +    +      + +  +  + +  + +  +  +  +  + + !hÐíìëåÖº—zkp„yA  8†µº¹½£R  +  + +  +&8><7/  8AI;-)$&3 6NTSPC_‰•™ ¡¥°¤¦£˜’–˜¢«¹¶§—‰…zro}y~Ž¦ž–š¤¨˜µßéçØÛáÞÒÎÒÉ´™š¢¦¤¯ÈÃÈÓ̸¨±ÃÈÅÌȹ´ÃÌÉ¿³©®³·ÎÛåéìîðñóçñ÷ùøùùùúüüüüüûûýýýýüýýüýüþþüýþýþüýýýþþýüüü÷ñíçÝØÍÇÁ¶¯²¹¿º·¼½¿ËÒÓÑÑÑÕÝäéìæßÖÒÔÙåóùùúûýþþýýýþþþýþþüùøõóóùþþþþþÿÿÿþÿþþÿþþþþþþþýýþþüþÿþýýýúðæñûýýüþýÿÿþþÿýüýýýÿÿÿÿÿþþÿÿþüýþþþþþþüûúùûýýýýþþýýýþýýþýþÿýýþýûôîçàÛÚÚØÒÍÊÆÆÆÇĽ¹¸¸º¼²±±³·½¿ÉÑÚàèöûüüüþþýþÿÿÿþþþþþýýþýýýþýýýþþýýþüüüýüüüüûüüûûúúúù÷öôóóñîìëèàÛÝ×áÞÔŹ¾Ë×ÜÝããÜÍÀ½ÆÄÁÀÊÖâëëîðëÝÊÁ®¡Ÿ´¹«£——™’Ž‰‡ŠŽ†’¿ØÚÜÚÞßÜááÓ¬š¼ÓÝТhLB=7><2;B3'*",=JT^cbe_ZB7!  +  + + + + + + +     + + +       +  + + +   +     +     + + + +  +  + +   +  +  +   + +  +  + +     +      + fÐéçØ¿¥•ˆoqˆœ˜P +   8·¿¿Å¯Z  +  + +.8741&  @KE>7*!+*#0JYSOKJy’‘ž¥¦©«ª§–’š§ºÄÆ»Ÿ‹„„ˆ|~z{tv…¦§–•¡Ÿ¥Óæã×ÛÞÛÑÎÒÆ°§š§»ÐÄÆÕÒ»¯¯ÁÇÆÉ¿µ±­®¨§¤¨²»Íãêíîïðóó÷óööøùùúúûýýüûûüýýüþýüýþýýýýþýýýþýþýüýþýýüû÷ïìéâÔÈÀ¾²¨­³º½½º¿ÈÐÓÕÑÒ×ÛåêéæÞØÒÏÖÞèõöùûûûýþýþþÿþþýýûû÷ø÷úúûýþþþÿþþÿþþÿþþþþþýýþýýþýýþýþþýýýüùíßë÷ûýþýþþýýþÿþþþýýýýýýþÿþþþþþýýþÿþþÿýþýúùøúýýþýþþýþþýþþþþýýþýþýúöëåãâßÞÙÓÎÈÆÇÊÇ¿¹¼»·¶¶¯µµ¼¹½ÆÐØÝèóûüüýýýüýüþýþýþýýýþýýýüýýýþýüýüýýýýüýýüûûüûúúûúùùøøøõóñðìã×ÔÐÊÖÞÙýÄÔØÜàääàÑÄ¿ÁÆÅÆÍÙâéëíîèÖĽ®¤¨¸´¤ ”’’Š‰…‹‡·×ØÛÚÞáßàÝÄ› ÆØÙÃZJ?:66718@6&"!$>JSZgenhiT>1 + +   +  +       +   +    + + +        +  +     +  + + + +    +   +  + + +   + +  +  +  +     +  !  "\ÇÛα™’Žœ¨¯ªc;™ÀÈÍ͹d + #/==85";POB50,)3#>Z_KTIhˆ—˜¢­¨©¨§ žª¸Áž³“‡ŠŠ€…uxtn|´›Žž¢š™Àââ×ÛáÝÒÑÒÇ© ª¥”£ÃÓÅÈÙѼ²ª»ÃÇdz±«¨¬§¥¦¯ºÊáìííòóóõõöøùøøùúúùûûüüûüüýýüýüýüýýýüüýýýýþýýýýýýýûùõîêäÛÔËÉÄ·«¬³¸½¹º¾ÉÒÓÔÔ×ÝãèêçÞÒÌÏÖãìôúüûýüýþýþüýÿþýýûù÷÷ùüþþüþýýþþþýþþþýþÿþþýýþýüýþÿÿþýþþþüúüúóâ×ßîøûþýýýúûþþþÿÿÿþýüüýýþþþÿþþþþþÿýÿÿýýþþüûùúýýþþýþþþýþþÿþþþþþþýýýûôìèèåâÝÙÒÏÌÊÇÁ»º¶µ»¸´±µ»Á¾ÂÆÇÏÛæñùúüýýüüýýýýýýýýþþýþýýýþýýþýýüýýþýýýüýýüúúûúûúúøúùøøõôñíÞÒÌÉ»ÈÝÚÌÁÆÕÙÝâäåàÑÇ¿»¿ÀÃËÙäéììêàÌÁ½¬Ÿ«´¨›”˜–’’ŒˆŠˆw|«ÕØÜÝÜßÜßÚ¯’ªÉÛÔµ~H=;<<:4<>=6)"$ 6OY[WmgohdPB/%   + +   +        +       +,  +    +        +        + +   +  +   + + + + + + +  +  + +  +   +        +    F¢µ”šœ££¯¼½­m'  8ÅÎÓÓÀt +   $/50>4 +  /LR=>4)%#1&-RZNJNXrš ž®§©§§©«ºÄò©¨{‹…ƒ…xq|p”®¢’“¢¡›°ØÞ×ÚáàÓÐÏÁŸ§¥¬Í×ËÏÙÒ¹°³ÄÊ­«§¥«¦§®¸ÒäìððñóõøøøøøùùøùüüûüýüüýýýýüþýýüüýýþüüþýýýýýýýýýýüûõíêáØÍÊÑθµ¸´¹¾¿¾ÈÐÑÑÑÚâèéëçÜÏÏÔáî÷úüþýýýýýýýþýþþþýø÷÷úûýþþýÿýýýþþþýýþýþýýýýýüýýþþþþÿþþýþþúöóìãÎËÓÛéôùúüþþÿþþÿÿÿþþþýýýýýþýýýýýþÿÿþþþþÿþþþþýýúýþþþþþýÿÿÿÿþþþþÿÿþþþüþûðçäææâÞÙÓÍÄÅ¿¾¿º·µ¹ÀÈÉÆþÆÓÛàîöûüüüýýýýýýýüýþþÿýüýýýþüýüþýýþþþþýýýýýûûûûûüúüúùøøù÷õëÛÐÏø¿ØáÜÔÒÚÜâãåãäÚ˾ÁÃÁË×åêììçÙżºª¤­³¡œ™—’ŽŒ‡‹xko ÏÙÛÝÝÞÛÝÒ¡“µÓÛÌ£cA73;>01;B:7! 'CaidnhokkfV85#    +    +  +  +   +  + + +  +      + + ! + + +             +   +   +    +            .vŒ‰–¢©¦§±¼ÆƼ, @¢ÌÕÙÕÂm +  + 32;>1  7GN958&&7(& LWRHKKjy„™¢ ¥ª¬«¹ÄËÁ¬•˜„u†~‚Š‡}€}ns‰¥­Ž•¡©œœÉÙÖÜâÝÒÏ̲™ ¨¤¢³ÎØËÌØÔÅÀ¸µÃʸŸ¨ª©§©«½ÏåíðòôõõöùøùùùùùúûüüûüüüüüüýýüüýüýüüüýüüýþýþýýýüýüûùóíëãØËÊÒÖÏĽ¼¶½ÀÆÐÌËÒÖÖáçéèçáØ×ØáíøüýüýþþüÿýýýþþÿýýûøõùüþýþÿÿÿÿþþþýþþþþýýþýùøúýýþþÿýýþþþýýýüöíàÒÇÃÅÇÈÏÙäòûýýýþÿÿÿýýÿþýýýüûýþýüüýÿÿÿþþþÿþÿÿþÿýýþýüüýþþýÿþþýÿþþÿÿÿþýþþýýùîçëëæäâÝÔÍÉÈÈÊÉƽº»¼ÂÉËÌÈÃÆÎÕÚáêöûüýýýýýýýþýýþþþþýýþýýüýýþýýýýüýûüýýüýüüüûûüüúùùùøùõçÓËʾ·µÍçêåàÞÞããÞÝáÞÑÅ¿¸»ºÇÚæéëìä×Å¿¸«¤¸¸¤š–’—••ŒŽtfe˜ÌØÛÜßÝÝÚʤÂ×ÙÀYB98:65=p~xtjjpotcS41" +   +    +  +    +   +  + +       +  +  +   + +    +      + +     +   +  "  +   +   + +     +   +        +  !_ŒŸ¤­¶»¾ÄÊÊÃ.  ;¤ÑÙÚÙÁm  ˜A.4.89  +   5PO>:8,14('";dMMVFXUFTP\uŠ¡µÅÌȾª‰oqpqv…Ž…|uy{›­“ž©¡—»ÏÒÚàÝÓÎÄ©§œ¨ª›¥ÈÖÉÈÚÔÅÈÅÅËƯŸ£­¦¤°·Éáëïòõ÷ø÷ùùùùùùùûûûüüüüüüüüýýüýûüýýýýüüýüýþýüüýüýüüùòïëêßÓÊÒÚ×ÐÈÁ¹»ÊÍÏÎÎÓÖáçëéçÝÕØàèóöúüýýýýþýýùûýüþýýúø÷øûþþþþþÿÿþþþþýþýþýþþþûúùûýþþÿþýýþýþýýýûöíåÔü¾ÄÇÄÁÂÏâðøýýýÿýþþýýþþþýýýýüüúûýþþÿþþþþýþþþþþþþýüüýüþýþÿþýþÿÿÿÿþþþÿþþýûøøúöóìèåÞÙÒÐÎÊÉÊÇǼ¾ÆËËÏÌÉÈÏÒÜÜâêóúûýýþýýýýþþýýüýüýþüýýþþþýýýýýýýüýýýüûüüüüûüûúúûøúóäÎÃÅ·®¬ÅåíìéããåáÖÓÜÝÕÈ»´µ²ÃÖãçèêàÏÁ¹¢¨»µ§˜‘˜›“‘‹‰Žjfn’ÈÔÚÛÞÙÕβ²ÎÛЬ|RE47>83@=1/  +g˜š‰vrx}m[N36       +  +      +    + +  + + +  + +            + +   +         + +    + +       + + +  +    Qˆ’ «·ÂÆÉÎÓÑÉ @  + >£ÒÜÞÚÁe$"9ƒ[*.-96$ +  BRP@6967+%%%+Y\RSF><0 +>Km„—ž®›\]_gvƒ‰Œ‡zq‚x|“¨˜ž¥¦œ¦ÄÍÛßÛÏǸ±©¥¥¬§¶ÃĽÊÙÓÌÓÖØÒÄ°£ž¨«¥¬ÆÛëñôõ÷÷øùúùûûúúúûüüüüýüýýýüüþüýýýþýüüýýþþýýýýýþýüûøôñðíçÞÏÉÕØ×ÕËÂÃÊÒÔÑÓÙÞåëêäÝÙÞèòöùûûüûýýþþþþþüýüùö÷øøùüþþÿÿþÿÿÿÿþÿþýýþþþýþýüûýþýþÿþþþþýþýýýûøóèãÞÑŽ¼ÄÈÀ¾¾ÄÎÖâîõùÿþýýýþþýýþÿþþþýûûýþþÿÿÿþþþþþþÿÿþÿÿþþþýýüüþþþýÿÿÿÿþþÿÿþþýüüýýþûùôïåÜÚØ×ÑÑÌÌÏÉÄÉÍÎÑÌÈÌÌÐ×ØÜàæñöûýýýþþýýþþýþþýýþýüýÿþþþþýþýýþýýýýüýüüýüüüýýüûúùóâ̽¹±ª¨¼äñïíèèçßÒËØÜ×Ìù·ºÆÕâèèæÛÈ¿»­¡²»­¨š‘˜™’Ž’‰qmfz’ºËÕÐÌÃÀ»—¸ÕÙÆ›eIE874166;:) $''J‘±¨Žƒw{~{niL94! + +  + +         + +    +   + + +    +   + + +    +    + +     +  +  +   + +  +     +    +  +    +  + + +     ,   I¢«·ÂÈËÔ××ØϯL  + ?¡ÔÝÞÚÃj #J7 B–l  +154/('DWJ;:883#%-&)@WTJE$ "+[–t\NUfu‰Œƒ€tys|££——š£˜“µÏÚÞÝ̵º¼¬¦¡©¯ÍÌ´ªÈÙÔÐØÝÝÐĵ§™¨¯¥ªÑèñõ÷øùùúúúùûûüüûüûûüüüüüýüüúöüüýýýüýüýüþýýýüýýüüùôðððíëéáÔÉÑØÚÔÑÒÓÖÔÑÔâèêéæãßåíøüüüýýüýýþþÿþýþþþûöïñ÷úýþþÿÿÿÿþÿÿÿÿÿþÿýþýþýýüýýýÿþýþýÿÿýýýýüúôìãÜÖØÔËÿÁÉÊÀÀÀÄÂÄÆËØèôúüýþýýþýþýýþÿÿþþýÿÿþþÿÿþþýþÿÿÿýýÿýþÿÿþþýûûüþþþÿþþýýþþýýýþýýþþýýüòæäáßÝÚÔÐÏÎÊÎÌÏÑÎÆÈÈÎÔ×ÚÜÞâëôûýüüýýýýÿþþýýýýþýýýýþýýüýýýþþýýüýýýüýüýüüûûúùúóÞǼ°«¤¦´ÙôõðïìçÞÎÉÒÚÙÏĽº¸ÄØäçäÝÎÁ¹°§¦·¸«£š™“•”“€kgy¢“~–™”Œ›’t›ÀØÒ²|QDA773/;DD>+$$5z¶»´ “ƒ€{toeJ85        +    +     +  +   + +   +    +        +    +   +         +   + +   +     +   + +       + '  +C±¹ÀÉÑÔØÚÜÛÒºX 9 ÖÝáÝÄn!  9ˆi! tA# $7<0'!  E\G9;>93#+0)2MUF8 N’{fQM\p……ƒ†|z„xw‘¬š—˜¥‘£ÉØÝÚȹÃÁ­¢¡¥°ÏѸ¦À×ÖÏÜÞÝÍû©˜¨¯¨°Òëñõ÷øùúúùúûüüüüûûüüûüýüûüýýûõýüýýýýýüþýýþýüüüüûùôññððïëèáÙËÑÛÚØØÖÕÕØÜâêêéçëðô÷úüüýýýþýýüýþýþýþýüøö÷ûýýþýþÿÿÿþþþþþÿþÿÿýýýüýüýþÿýþþýýýþÿýüüûõðãØÐÍÎÊËËÅÆÈÊËÉÅÈÅ¿Á¿¿ÄÏÜëóùüýýþýýýþýþþþþþÿþýýýþþþþþÿÿÿþþþýþþþýÿÿþüùöùüýýþüýþÿýýýþþþýþüýýúõõòïèãÞØÕÓÎÎÎÐÑÐÌËÏÏÏÕÝßààâéöüüüýýýýþÿýþþýþýýýýþýþýýýþýýþþýýýüüýýüûûüûûûúùòÛÇÀ°«£­¶ÔòõôòíçÛÍÄÐÚÜÓÅÀ¼·¿ÙæçâÚŽµª¥§¹³¢–“’•ŽŠ†rgn›°ŽTC?PII]_e£ÇÔÈœZHD=/028881%)FZM@=/%#"+X­ÏǨgC;9;/718<<1.)')M›ÊÔÏƹ ‡ƒqgG5(    +  +!    +   + +   +    +      +         +   +     + +  + +  + +  + +     + +   +  +      + + +  +    +   +    +   +,ŠÄËÒÙÛÞáäääßÏ„+  (ÔàåÝÃ^#  ‹Áºn, %  "37/4E $OS=7:4&  %JRH6;>7) %J—ÍÜÜØ̽ª˜‰€†qC5&  +       + +   +  +     +         +  +  + + +   + + +     +    + +  +  + + + + +   +   + +     +  +   + + +       +     +  +    +   +   +  j¼ÏØÜßâãåçæãÖ–:   {ÑàãÝ»V  +-¿³t8  *5=, $PQ9/46=L6')/.)+)$*$  + *BJo—‘†qOEh€†Š‹ˆ}}rx…¤£ŽŠ œ˜ºÉÑÏÇĹ ¢¦·½È¾±¬£´ÉÍÚÝÚÕÈ»²§­ººÂÜðõùúûýûûûüüüýüüûüüüüüûýýýýüûùüüüüýý÷úýûúùóëéâÙÎÌÙëñññïíèãÛ×Ùåíðòõøúüüýýýýýþþýýþýýüûü÷óðöûüýýþýýþýþþþÿþÿÿÿþÿþýýýýþþýûúýþýþþþþýüüøñèÞÖÒÎÑÏÒÕ×Ò×ÒÎÔÕÔØØØØÔÒÕ××ÌÈÏÑÍËÐÐËÈÆÇÅÄÂÁÊÕâíõúýýýþýþþýþþÿÿÿþýÿþÿþýÿÿÿÿþþÿÿýýþýÿþþýþþýúûüýþýýþýþýþþþþþþþþýýûûú÷ôîèáÛØÖÔÖØÕÕÒÍÉÍÔÚãéóøüýýýýþüýþþþýþþýþþþýþýýüýýüüýýýþýþüüüüùõèÍù­¬²ºÍçðó÷øñèÔËÑÔÕÛÞÕÊÁ½ÇØæãÔÀ·¬¡˜ ³¦ £—œž™•’ˆjc¨¢mf4# =¢®‹P9+/1*)4;=:@0'!&^¶ÖÞáÛÔÁ¯¡–‹’‹j@7%         +   +    +  +       +    +  +      +   ("    +   + +  +   +   +  +      !      +     + + + +          + +S®Ì×ÜáãäçèçåÚ¡6 + + +}ÑáåßµX ‡¹«ˆM" +  + -,.%  (KR@6338;:8(,+*0& !%  + + 7PYtž˜‡r]UdyŒˆ}|‚}s‚£¨Ž‡‘¤©“®ÎÚÑËȳ›£«¿¾Â¼º³®°¸È×ÛÛÖϽ»·¨«¶ÁÅØî÷ùúüýüûûûýýýüüûýýýüüüýýüýýüúýüüýüüüüýüûõêæàØÏÉË×èñóððíéèççêòôøúýüýýýýþýþýþþýýþüü÷ôòïõùûýýýýÿÿýþþýþþÿþÿþþþþýüüýýþýþýúýýýýýýþûøðæÝÖÑÐÑÒÕÚÛÝÚØÛ×ÓÔÐÒØÛÙÙÙÕØ×ÔÑÍÍÓÔÓ×ÖÒÏÏÌÈÆÁÅÃÈÍÐÜèðøûýþýýþýÿþþÿþýþþÿþüýþÿÿþþþþþüýþýýþþÿþþýýúûüýþýýþþþþýýþÿÿþýýýþýýüù÷ðèáÝÙ×ØÕÔÏÉÊÉÌÑÛâèñúüýýþýþýþýþþýþþýýýþýýýýþýýýýýüüýýýüüüùôåʾ·¬±¶ÁÙìïïôõñéÒÎÛÙÓÙÞÚÉľÂÙæß˺®«¥˜¤¬¡™•˜œ—’Ž†qehš¯—v{L'0…‹e71+./*,/6=A<4.!1ÈÝãâÝÒõ¥˜–…mF;&  + +  + + +  +  +   + + + +  + +  +     +                 +! +    +   + +  +     +   +      +   + + +       +   + +     +     + +   + +7•Ê×ÛáåçèèèåÜ­@  + &rÎãåÞ´L + #{¥Ÿd@  +   1@6*$  BVC0/18=682%+$&'&  7NWj˜¤—Š…kRXrŠ…ˆ‰{|{|}}”¤“Œ”ª«™­ÒÝÔÐʳš¢±Á¾½»Â¹³«©¼ÓÚÛÙÐþ¹©¥´ÂÈÓêöúùüüüýüüüýýüüüüüýýüýýýýüüýþþýýþüüüýûûöëåàÕÍÊÏÏÖæòòñðñðíïñôûûýýýüüýýýþþýþÿýþýûøôíëîöýýþþÿþÿÿÿÿÿÿþÿÿþþþþýýýüýþýýýýýúùýýþýýüûòçÛÕÍÏÑÑÓ×ÜÞáâÝÝÜÛÙÓÓØÛÝßàÜÛÜÛØÑÇÏÔÙ×ÛÛØ×ÖÕÎÎÉÈÆÇÇÂÇÌÔáìöýýýûýþýþþÿÿÿÿÿþýþÿýýÿÿþýüûýýþþÿþÿþþþþýýûûùúûþþþýýýýþþþþüþýþýýüýùóëåâÚØØÓÐÏËÊËÍÕÚàêñùýýþþýþýþýþüýýþýýýýüýþýþýûüýýýüüýüüüùðáÊ»°±±´ËæðñêïôìâÔÓÜÚÔÙÝÜÐùÆÚäØô®§¢ª¥—”’“‘’ŽŒ†ym³«‹t‹’W!&UVE/(%//.2:3:>=-)2B ÖáæåßÕŸ¨Ÿ™“‚lE>*   +   +"  + +  + +    + +        + + +    +  + + + +      + +      "  +  + +     + +   + + +  + + +   + +  +     +       iºÕÝäçèéééåÞ¶O + eÉÞäÜ´K  )§­¼T  +  +44/%@W>0.448;77)!"& BNR_Šœ—ŒvVTdy†‹Œ‰Ž„upw†•§›•¤ªŸ¢ÁÓÊÊÀ©œ¤¸¾²¸¾½µ±¯©¯ÁÕÝÞØÌÀ¸¬©²¼ÇËãóøøùûüüýüýýþüüüüýüýüþýüüüþüýþüüüýýüú÷ïèãØÎÎÒÓÓÑÑäïñòðïòôöùûüþþýýþüüüýýþþþýüû÷òô÷÷øøýýþþÿÿþþýþÿÿÿÿÿÿþþþýþýþýýýþþýþýúöúýüøñëâÚÑÐÓÒÔØÙÙàâåäâßÝÝßÞÜÜâãåççáàáâßÖÍÓÕÓÚÝÜÜßÜÛÛÙÕÒÍÌÇÈÃÂÃÇÉÔâêíòüýþþýþÿÿÿþÿþþþþýþþþüùùþÿÿÿÿþÿÿÿþþþþþüüûùøùüýýþþýüüýýýþýþþýþýü÷ðëäàÜØÑÌÊÊÌÎÏÓÙÛãîùüýýüþýýýþýýýýüýýýþýþýþþýýüýýüüüüýúøîÛÄ»±²¶¾Õìóïæçðëà×ÛÞ×ÌÕàßÓýÆÙãÕ»¬ª¥™¥® ›•’“”ŒŒŽ|y¢»¢x™Ÿd-%.0'$*.-3/4:8;3.-2bÄÞåççàØÎô«›‰f;:0 + +        !  + + +  +  + +     +   + +                 +   + + +      + + +         + + + +   + + +  +  +   +   +     + +  +G£ÐÜäæçêêéçß¼X XÁÜàÝ®F 9‘¾ÎÛÀn + + +  +*22% 'GVE.*3-/2>9+% + Nc]^o––’Œ}cV`n‹Œ“›’†yus{ƒ£š—–«¬˜°ÅÈÉ°Ÿ‘™¯°§­®«©¥°¢¤ºÓÜÝÚÍƽ­¬±½ÅÇÚð÷øúûüüüüýüþüûýýýüýûüýýûýüýþýüüûýüûùíæàØÈÆÐÖÔÖÑÏÜïñòòóõúüýýýýýþþýüýüýþýýüüøôóõúýþüüýþþþþÿþþþþþþþÿýýþüýýýþþýýýýýýþþøìîðíçÞÕÏÎÊÏÖÖÙÛÝáäæçåââàâãááãçéèêéæããæß×ÖÙÙØ×ÛÚÛàââáßÝÚÖÑÏÉÈÃÂÁ¿¾ÅËÒã÷ýýýýþÿþþýþÿÿþýþþýüù÷úýÿþÿÿþÿÿþÿÿþþþýþýýüøø÷úüýüüüýûúûýýþþýþþýúòêåÞÖÒÎÌÍÍÊÆÊÔÕÛåñûûûüýýüýýýþýüþýüüýýýüýýýüýüüüüûüüûôî׿¹´¸·ÁÚïõìãâðíæÜàÞÕËÓÜãÚÉÀÆÚàÑ»¯¦šª­œ—“‘–•Œ‘‰qˆ¶²‘tƒ¦¡g- %"&,+4,0:2;4;8<}ØåéêèâÚÑÈ»ªž™’k:;-         + +     +  + + +   + + $ +     + + + +      +  + +      + +     + + + + + + +  + +       + +      + + +  + + +   +  +  + + +   +   6‰ÅÙâçèêêççâÄ[ + +B²×ßÛ©C +I©ÍÚáÊ* +  &36-  MP@6(1//.44$'! )TlgacŒ™‘‘†`S^j‡˜”…w}r}{£’ª›§ÌÛØ┘³Ã³§§¶°¶º®£¾ÍÛÝÛÒ˲­´¾ÅÄÓìöùùûûýüüüüýýýýýýýýüýýüüüüýþüüüüüûùðæàÙÍÆÃÍ×ÙØÔÊÖíòñòøûüýþýþþýþþþûüüüüüüùöôôøüþýýýýýþþÿþÿþþÿþÿýþýýüþüÿþýþþþýýþýþýýøåÞÛÓÐÍÊÊÍÔÖØÚÜâãæåççãáàãâäáâèéêêëéèææéçÙÕÞÞÛÙÚØÚÞãåæåäáÛÙØÏÎËÅÇÄÄÁ¿ÁÎâñúýüþþýýþþÿþýþýÿþýûúúþþþÿÿþÿþÿÿÿÿþþÿýþþþüûøööøûûüýûûúüþþþþüýýýøìäãÛÖÏÍÏÌÉÁ¿ÇÑØàêõùûüýüýýýüýüýüýýüýýýýýþýüýþýýüûûüûõëÔµ²¶¸ÄßïóíàÜíðéäãßÚÐÐÛãÝÑÆÉÛØĶ¯ž ¯¬›˜—˜‘’†yj˜¼«Œz¬¦g4%'!"!#%&.($(*26:5:>CHBPœßéëêéèÝÕɽ±§ž‰mI4 +   "#  +       +  +  +   +   + +   + + +            +   +  + + +  +  +   +    +  + + +   +   + + +  +   +  + +      +       ' (k´ØáçééêéçáÆe  +œÑÛש>  X¸ÜåçÚ˜3  49& 'UTA=/).4)//"" ')"+0Nqof\~™’“ŠrXSc‡š”Šxpr}}–¨¡”œ¢ ÆßàÍ©£Äϳ¦©·¶¿Á±ª¼ÇÓÛÞÙÍÇ»¬©µÁÀËçöøûüüûûüüýýýýþþýüýýþýýýûûüýüüüüúùðèßÚÍÇ¿»ÈÔÚÕÏÍ×éñóöúýýýþþþþþüýýüüüûøôóõöùüýþýþýþþýþýþÿþþþÿþþýþýýþýþÿÿþþýþýþýýüüúòÚÍÆÅÈÉÉÍÕ×ÛßáããèéééåäåãããåäéëëíìììéåçéèÞØàâÜØÛÙÜâäèèçéæäàÜÚ×ÒÐÎÎËÆ¿ÁÉÛêôûýýýýýýýýýþýÿþþþýüýþþþÿÿÿÿÿÿÿÿÿÿþþýþýýýýúøóö÷úüüýýüýýýýýýýýûòèãÜÖÏÐÏÌżµ½ÇÒÖàìöûüýýþþýûüýüüýýýüýýþýýýüüýûüüüüûøòçÒ¿³±³·ËâïðèÛÛëðëéæÝÔËÏ×áàÒÊÌÚн¯¤˜Ÿµ¬™™™’””Ž‰†v€¨´”x~—¯ f>2+.)((#$&!!*625916==[¶äëëêéçáÙÌÁµ©œgC6$ +   + +! +  +# +  + +  + + + + +    +  +     +   +   +  +     +       + +     + + +  +  +  +  +    +  +   + +  +     + +      + $  +HžÐàèçéêèèâÉv zÂÔÔ < oÍçêçâ´C'    3.!/M[N7.2.$$%! +   (*(,'..>uzg^y˜—šzbA]z‹˜’‹}|}u}“§Ÿ—œ¥¢“¶Øàή ¬Ç˲¬®¨®½½«°»ÂÎÛÜÛÒËÁ¯¨®½½ÂâòøüüûüüûýýýýýýýüüýýýþþüüûüüûûüúúóèâÜÒž¹µÂÕÙ×ÔÏÕéôøûûýýýþþþýýýýþüú÷ñïðöúýýþþÿþýþýýýþýþþýþÿþÿýýþýüþýþÿþþþýþýýþüú÷ñàËÉÈÉÉÌÒÖÙÞßääæéëëêêáâæèçççéìêîïðïíéèèêéßáäæãÞÚÛàâåæëìëèéçäâàÜÙÕ×ÒÌÉÆÁÅÈÎÝêôùüûüýýýýþþþÿÿýþþþþþýþÿþÿÿÿÿÿÿÿÿþÿÿþþýýýüûøöõ÷ùüþýþýýþþüýýü÷ëæÞÙÔÑËÉÃÀº¶¹ÄÌÙäëôûüýýýýýþýýýüýýýüýýýüüüýýüüüüüúùòåо¸±½¿ÏæñïæØØêïíèçÞÏÆÊÛááÕÊÒÖĸ«£–›§°¥–˜›”“’—Ž‹„v“µ¦ƒp†ª´‹]F:7+-)! "'*'")4?nÆåëìëêèáÚÒŵ©šiA4$  + +        +          + +  +       + +  +   + + + +       +   + + +  + + +   + + +     +  + +  + +    +  + +     +   +   4|ÃÝåèéééèäÍz'  +Q¬ÊÌ”,  0‘Ýëëåá´VG*   )0&-OOD:8*.!$ #+-*(/.7dyr`pž””ˆmKbi‰Œ•‡„~yŠ¥¡—™ž  ËÖË­œ°ÌË®¨¬£¡³¸¶»ºÄÏØÝÝÖÍ󪮵±½Üñ÷ûüüýüüþûüüýýüýüýüýýýýýýûüüüüùôéßÜÑø³¹¸ÂÖÙÚ×ÓÚì÷ûýýýþýýþþþüþþüøôððöûþþýÿÿýþþýýýýýýýþýþÿÿþýýýþþýþÿþþýýýþþýýû÷ïåÚÎÅÇÏÐÖÔ×ÝÞåçèèéèëììëçãææãáåèîðððñïíêêêìéßÞæèåãààãáèêìëêëééèæäâÝÚÚØÓÏÊÅÄÆÅÇÎÛèóùûýüýþÿÿÿÿþþþþÿÿýþþýýÿþÿþþÿÿÿþÿþþþýþýþþüûùõóøýüýýýýýýüüüùîèæÞÙÔÎÉÀ¾»´·µÂÓÛàèôùûüýýýþýüýüýýýýýýýýýýýüüüûûýù÷îáλ·´·ÀÕéñïàÕÕèïîêçÞÏÇÇÖßâÖÒÓÕ¿´¦Ÿ”—­±¦—–’‘”’š•Ž{€«´œws’­®rI>86--! ",(8W—ÔéëëíëéãÝÒĶ§š‹aF-$  +   +  %      +       +  + +  ,48)  + +   +   $,  + +  + +              +     +       +       + +  +  + +      + +   +       $c¦×âçêëééãÒ}*  + 1‡¯ÂŠ$  K¬åîíèØ­i^3 (0) .PM@/6. +  '**(.*,5Qwnan–—‘uYS]vˆ‘Œ‰ƒv{ƒ˜¨™’–ŸŒ¬Íȧ˜­ÒË­ž¡•Ÿª±¿¼¸ÃÊÖÞÝÙÒʼ¬«³¯¼ÐïöûûûüûûüüýýüýýüýýýþûüþýüüýýûúôêàØÎý¶¹¼¸ÁÔÚ×××äôûüüüþþýýþýþýýûøïïóúüýþÿÿÿÿþþþýþýüüþýÿþþþýþýþþþþþþþþþþþþýýúõïçÛÔÐËÊÏÏÖØÛßáäêééêíáçííëèãäâàÛãêïñðððððíéêìëâßçêçâßßáãèìíëíìêêëéççåãÝÛØ×ÑÍËÇÇÆÅÉÑÞèòùýýþþþþþÿÿÿÿÿÿÿÿþüüüþþþþÿÿþþÿÿÿþþþþþÿþþþûúøõøûüüþýýýüüùõòîìåÚÑÎÇÁ¹¸¼¹ÁÊÕÙáëôùüüýüýýýüüýýüýýýþýüûüüüüüüüùõëÚĺ±µ·¿×êðêÜÒÏäëíéäÕÉÆÁÌÜäÛÔÐ̺­ ”‘•­¯Ÿ˜•”™—y®¨‹v{˜¸¥fD378<:)#!&,;d©×êìíêëèæÞÓ¸©Ÿˆ_?/ + +    !     !      + "  +   +    +   + +   +  +     +     +   +  + + +    +  + + + +  + +  + + +   + + +  +   +   + +      (0+  ! VÉÞåéêêèäÕƒ. + "\˜´v  ^¿êððìÜ°tq9 S  .',, .NV?863+# (7*+(./-2Jop^]„Ÿ•—Š~\Lfj‰‡‹ƒ„y{€€‘«¢Š˜Ž…›ÃÀ¤³Ôʪª¦•¢³Ç½½ÀÁÒÝàÜÑʽ©¦¬·¿Ëèöùøûüûûüüýýþüûýýþýüüüüýýûüüü÷ìãÙÍ¿»¶·¾¹»Ç×Ú×ØåðùüýýþþýýýýþýùøôðóùüýûþÿþþþþÿþýýþýýüýýþüüüüýþþþýýýýýüþýýýúöîãÛÔÐÏÍÏÑÕÔ×ÚáäåèéêëëííïñîêéæâÝÝàåéíððððñïëçéììæâèëæÝÛÜßäéêíîîîîïíéêèèçåáÞÜ×ÓÒÌÏÐÈÊÈÍÎ×èòùüýýýþþÿÿÿýþÿþþýüûýýýþýþýÿÿþýÿþþþþþÿþþýþüùööøúüüýþþýûüú÷õðäÙÕÎ˾½¼½ºÀÌÕ×àëõûûüýýþýýþýýþýýýüüûûüýüüüüúùóé×Æ´³±¶ÊÛéìãÔÈÍåèëêãÒÇÁ¿ÊÚäÝÓÓÁ²¦ž˜›¢±ª¢˜—‘’œŽ‚€ µŸ}tŒ«¸–dI4>@8C?$ !&&$)15Cz¾ßííðìëèæàÕɽ¢–…\@:"         +    +  +   +   + + +      +  +  + +  +   ;     +     +            +   + + + +    +   + +        &+-18>:% !>|¶ØäèéêéäÙ“- +  %S†—P ,sÊíñòíçÒŸ‹K&A  #,")* :SbB561-!!  -?7../776?4/  $$!.9T˜ÐäììïðìéèâÛν§™ˆc?>  +  +%# + #       +   +        + +  +  + + +   +   +   +   +  + +  +  +  +  + + + +#  +      #  + + +    + + + + +    + +     +  +  +  +2;NVUNM;'  + + +3ašÍáæèéèäÙ™0 Ukn-/{ÐîòòñîìÏ¢^#  '10&?VdE5:4'  + /7E@<:4947?^lNSm’˜…ykdZK`m„ŠŒˆ‡‚{z€™³ŸŒ€}¨¹¨¥ÅØÁ ¡ªŽ”¶¼Á½¼¿ÀÈØÝàÙÍó«®µÃÇÖðøúúüûüüüüûüüüüüýýýýüýýýýüúôêÝÑŹ²¸¹º¼ÉÑÕ×Üçðöüüýýüüýüûùöø÷÷ûüýýþþýþþþÿÿþÿÿþþþþþýúóõûýþýýþþþþþþþþýû÷òíäÞÖÓÓÓÑÑÕÖÚÛÞààååèêëìîïîððððïîìéæåãååçìíëéæãäåâáæèáÝçêåàÜ×ÙßåêêêëéêêìíììëëêëæääßàÞÝÙØÖÒÏÊÊÈÈÍÕãîôùüýþýýþþþþþýýþÿÿþþþþþþþÿþþþþÿÿÿýþþþýþýýûùóðó÷úûüüüûúúõêàÛÖÎÇÄÄÁ½ºÀÈÍÖÝêöûüýýýþüýþýýýýþþýýüýüüüýû÷ïâν³¹ºÂÍÛàá×ƽÈâééëéãÛÍÆÊ×ãâÚÒµš”’‘–¬¬Ÿ”’–”Ž‡|˜¸¥q…Ÿ°œm@B?CJB897!&6g³ØäìîïîëéêçÜ;­œ‰[@9   $ +$     + + +     +     +    +      + + +        +       + +            + +   +           +  + T&8GGMB7( +!   +$RµÙæèèçåÙ 1LjY!/{Ôîòññðñç»i++  "9,&  + K`X56<6' +   + 7@ACA:EC9;6ANh]]e}’rj{v^ZZ^|ŽŠ‘Šƒ{}|§¯—†yq¦¦§ÇÖÁŸ §˜¥¼¾Â¼¾¿¾ÅÓÞâÞÏÁ¹²­¶¾ÃÈâñ÷ùüüüüüüüüüüýýýüþüüüüüûùòêáϲ´³À¼½Ì××ÕâíôúûüüýýüùùöóôõüýýþþÿüýþÿþþþÿþÿÿÿÿþýýûøòíøþýþþÿþþþþýþýúóêáÙÔÐÓÑÐÔ×ØØÛÞßãäãåêêëêìïðïíîîìêèéëéæäáããâèêçãßÛßßÞÜÜâÛÚàãßÞÜÞßáäæãâàÞßâæèììîïìííêéèççåâÞÛØÖÔÒÌÉÆÆËÏØáìòúýúûþýþýýþÿþþþþþÿþþýþÿþþÿþþþþÿþýþþþýýýûóòõõ÷øûúüüüû÷ôìáÚ×ÉÄ¿»·¼ÃÉÐ×é÷ûüüýþýýýýþýýþþýüüýûüüúùõìÙɼ²¾»ÀÑÚÜÜ×ÏÆÍâèèììêæØÈÈØáãßÒ¹™ŽŠ“ ¨¢–”’‘““…‡‰v¦®”rr«ªŠ\E@?I?BED:-)!BŽÆÞèëìîïìêêçÞ̺«~VC/ +   +$#      + +    + + +   + +   &  +     +     +      + +     +   +  +   + +  +     +  +  +  + +   +  +-2+2?:0+# Es¦ÎÝæççåÛ¥5Gh\" 0uÐïñññòòìÇm"1  (&& @^S5/143  + + !6DCHKB@JD44>aooeaoŒ„~‰hYMXjˆŽ|ƒ†…€š²˜}vqu}œ¨ªËÕ¹¢¦ª£«»½Ãº¸½¿¿ÑÞâßн°¦±¹ÃÂËãòùùûûüüüýüüýüýüûýüüüüûúöìæ×Á³«³¹¾¿ÃÐÓÙÞêõûûüüüûúùôñòøûüýþýýþÿýýþþÿÿþÿÿÿþÿþýýýûôíïüþüýþþþýþýûøðæà×ÓÎÐÐÕÓÔØÚÜÞÜßââçæèêêììíðîëêéæääãçêêèåáßÝÝãæåááßãàÜÜÝáÚÑÚÞÛÝÝàáâááâÝÚÙÙÞÝßçëîîîïïìêêçççåãßÝÜÛÙÔÍÊÊÈÆÊÌÑÙæñùýýþýýþüþÿþÿþþþþÿþýýýþþÿþÿþþýýþýþýýþýùüüýúø÷÷ùûüüüû÷ïâÝÕÉÅÁ¾¸µ¼ÆÌÓÞïùûüýþýüýýýýüþüüüýýûüüûùöéÜɾ¸½¾ÂÕÜÙÔÔÍÇÎäééïîêá×ËÈÕÞåâÑ·œŽ‡Ž©¬š“–—™‘ŠŽ‰~ƒ®¢‚qyœ¬zM>>BRG@BGE9* '/NœÎßèíîðîïìéåÜÊ»©›~ZC4   )**   + +    +  +  +    +  +    +   +  + +     +    +           + +     + + " +   +    + + +   +  + +  + + + + + +    + +    +    (FNQ@LJIA>@Osrc_e~Œ…ŠŽ|d\Xf}ˆŽŠ‡„yq’­žykqw{—±²ÆѶ£§§¯´ÁÀÁ¹°¶»½ÊÛÞáÔÂÀ°ª®»½ÁÄÜð÷ùûüüýüüüýýüüüýüûüüûû÷îçÝÍ·©°º½¼¹ÁÏÖÝèóûüüýýüöòñòôøýþýýýþþýþþÿÿÿÿÿÿÿÿþþýüüûûýýôôûþþþýþþüüúðäÛÕÐÎÑÓÕÕØÚÛÝàââáâåæêéëëêêëîïëèèåàÞÛÙâçêéâÝÜÝÚÞàããàáâÚÚÝßß×Ì×ØØÚÛÛàäàààßßßÝÝÞÞæêíððððïïìêëêêèæåâÞÝÜÔÑÓÎÉÄÆÇÌÐÜæñúýýüûûþÿÿÿþþüþÿþþýþþýþþÿýþþþÿÿÿþþþþüüýýþüúøööùüüüüøîçßÕÈÁ¿¿¸¶»ÃÏ×äóúýýüýýýþýýýýýýýüýýüüúùôëàο¸¹¼ÄÕÝÖÍÊÊÅÓäééïðéÚÑËÈÍßæâÌ°‘‡–©¨ž•“–˜‰‹–‹~œ³—tp…°«’jNCETVMGAEB:-",Y¡ÐÞéíïððïíééÞÎÀª¡„G;- +  + (+ #     + +  +     +  +    + + + +  +    + + + +          + + +               +    +    +   +    + + +  +           &;NI>&  ",2ALLMNJNL>>CFbpnai‰ƒˆv^Tfp}‰‡Œ‘™—Œv‚œ¤ƒtŽ˜‹¨±Ë̬”–¥­²ÌÉÇÁÆÈËÒÙÚÜÝÕþ³¦£´Á¼ÃÚëôùüüüûüüüüüûýûûüûüú÷ñèßÔÉÀ­±¶½ÆÇËÑÚêôûüýüûöòîòøüüýüýýýþýþýþþýþýþÿÿÿþüúûýýýýþýýùòúýýýü÷ñæÝÕÍÌÒÎÏÔ×ÙÛÜãâáäçèèééêëëêíêíîïñìêæàäëêêèàÞæçâÚ×ÚÚÙÕÜáàääÛÙÚßÝÑÇÑÚÝÜÛâæèåâæêêììåâáæéìïñññòîððññíîîìêéçèäãßØÕÐËÍÉÇÄÈÊÊÓÜÜçùýüýýýþþÿÿþþÿÿþÿýýýþþþþÿÿþýþþþýþÿýýÿÿþýýüúùúûüüùðåÚÓÌÁÀ¸¶¾ÇÌÓßíøüüüýýýýüýüýýýþþüüüûùùôêÛÆ·»¿Ïáß×ÙØÕÕ×âèèïñìÜÍÇÄËÚÞÓı˜’¦©›–‹ŠŽŽŒ†~‘´¦thrœ°™qTMGIQOLLMZNA0&2W¥ÍâêíðððððïêäÕ¿°¢~U=/" +   + '/ + +      +  +# +  +  + +   +     + + + +      + + +  +     + +    +   + + +     ;  #"  + +  + +  +      + +  + + + +   +      +    '3JJ<6AY~qdae‰š•Ž…k\_j„ŒˆŒœš{t‹ …”—~¥¼ÈÉ£”¢¡®ºÓÎÅÂÆÌÐÔÕ××ÚØŽ¶§¤¦ºÀÅáîõùûûüüýýüüüüûüûûüüúôéÞÓÍÊĵ·¹ÂÌÑØÙæõúúüüùóîëîúýýýýþýþþþüÿþþþÿýýÿÿþþýýûýýýþþýýýùîóúùõïäÞÖÒÌÏÐÑÔÕÙÙÝáâåèçèèêëíííìííîîððñðìåÞÝäéíììèáäççãÞÝÛÚÕÖÜÝÞàÝØØÝÛÑÌÖÜàßáåêéãââèêêëäàÜãêëîïðððñïññððñïíëêééèçäßÙÙÕÓÐÌÉÊÊÄÄÉÆÔíúûþþþýþÿÿÿÿþÿÿÿþþþýþýþÿÿÿýýÿýýýÿÿÿÿþþþÿþýýûøúúúóëáØÑÍǹ¸ÇËÈÊÓãðùüüþþýýýüýüýüûüýüüûùùöïâ˶·ºÖèèßáÞÝÜÛäééïóïæÚÈÂÈØÜζ¥›—œ©©Ÿ—Š‡”‡…ƒž²•fhŠ¤¬ˆdQIDMTQMQQLF93 /Z¤ÑáêïòòññððëåÑô¦{G<2 + +  +  1)  + +!! +    +  +  +          +           +    +  +    +  +  +      Q"%    +  + +  + +    + +   +   +      +   +   + #0LJ;eD@E<+   + @_y¤ÑàåãÝ»Z  O™, +$nÌëííìîòè¶V' +&!.' +:B\\JE>50# +   38=MMKHQKKB>)# '   +   23         +   + +  +    +  + +  +  + +  +    + +   +  $ +      +    +  +    T##   + + + +   +  + +  +    +  +  +  +        +  !5=MJBM>HD:- 6`~ ÍÜããÜÀ_ Q§”+ + )nÒëíéæéïâ§N  #,, !;@\YIH6)*"  + )678>JQFIKBA>=BLeiXWjž–’Ž}eXenŽ–š†~tˆ£˜‡‚€®¸³”™¯½¿ÆØÌÄÇËÐÐÑÓÊÊÔÛмµ®Ÿœ¬·½Úëñó÷úûüþýûüüûüýüüûøïæÜÉÉÔÖÒ¾»Î××Úãêð÷õóñó÷úûüûýýýÿÿþýþþþþýþÿÿþþþüüýýþþþþþþýþýýüöâÓÔÒÌÌÌÊÑÐÔØÖÛÝàÞåçèéêëëëîïîïïðîððððïðððïìéãäæéììèççéëêæàÜÛßÝÛÙÖÔÒÖØÐü´ºÁÏ×ãéëìæâßäééäÜÞäæèéçèëïñóòòòññññðïïðíëêìéèãÞÝÚ×ÕÏÌÇÇÉÅÅÌÒÝê÷üþþýþþþþÿÿÿÿÿýþþÿþÿþýýþþýýýþþÿýýÿÿþþþÿþýýüù÷ñêçÞ×ÑÎÏÏÒÖÎÌÏÛëóûýüýýûüüýýüüûýýýûúùøñçÒ²²ÀÚëêéëêéåãèêèïóòíæÞÐÈÐÌ»±£ž• Ÿ›Œ‘‹Ž‹Œy•­ pb„¦°“mTLTWOPPQSOYK;*""$-a°ÒãêïñôóññîìæÖÆ´¤uGD8"  +   + +29"      + +    +        + +  + +    +  + +  #  + +  +      + + +! *  +      +  +    7A!   + + + + +  + +    +   +       +   +    /HNWOB>>F?@6       +&`Ž®ÎÛÞáÝÅd +U¬˜4  'vÕëìæÝèîÙŽ7  + %6+    +(>F[ZYJ7'-# + ,779?FSQMPSJC99GU€vXPT‚£œ–“i_Vjyˆ–™•Š†p|¡—|†ˆw›¸¦Œ¡¾ÇÅËØÍÇÇÍÑÖÕÖÎÇÕÛÒ¾´«œ›©²ÄÜéïòôøùûüýüüüûüýüû÷ñêãÓÄÍ×ÛÕÇÍÕØÚàèêììðõùúüýüüùúýýýþýýÿÿÿþþþþýýýýýþþÿÿþþþþþþþýüøëØÈÀÅÉÉËÑÔÕØÛÞßàâåééêëìîìîððððïïðððððïîíìîîëèååèêêæäåèìëêäÚØÛßÞÛØÕÎÍ賓šž¤³ÄÙæéêçàÝâæçáÞâæçææéêíïòòóòóóòòðñðñðïïíîìêéåâßßÝ×ÓÑÎËÆÇÈËÌÖãêóøüýýÿþþÿþÿÿÿþþÿÿþþýüúúûýþÿþÿÿþÿÿÿÿþÿÿÿþþýýúõðæâÙÑÐÒÕØÐÌËÒßíõüýýýüýýýýýüüüüüûûùøôîÞÁ¶ÆÝêéêìêçæåéëèíôóîæÝÌÊÌÁ¸³£˜—¡£š•‘ŒŽŽ‘Œ‡zŽ¤“f]¯©€^QKLSJILJTWWG2&"$,JHXTU[M@;@GTr|_Ut™¬¥™š‘{dT^f€•—˜”‘rt  †€ƒ}†´ª¢»ÃÇÌÙÏÉÆËÑÔÒÓÑÍÔÝÔò¦—•¢°ÆäîïïöùøúûüüûûûüüüûôéèáÑÅÌÙÝÛÛÞØÜçêêêï÷ûýýþýýýüôôûüüýýýþþÿýýüüüûýþýþýþþþþýýýüûöîáÒÉ¿ÀÇÍÏÓ×ÙÛÜáãæèçêëìíîðîðïñòòòññððòòñðîíëéêìëèçèçäÝÙàèíëèçÞÚÛßâåáßÔ¾­£¢šœŸ£¥¬ÁßåçäÝÝàåçåâãããáãèìððñóñóóóôòòóóòïòñðïïìëéææåáÜÛØÖÕÐÏÌÌËÇÌÑ×ßèòùÿýýþþþþþÿÿÿþþþþûúùúýþÿÿÿÿÿÿÿÿÿÿÿÿþþÿþýýýûöíáÙÔÒÖÖÏËÊÒÖâì÷ûûüýüýüûüýüüüüüûúùöòéØÇÑãæâæëéæçæèëèîôóîëàÏÑ̺°ª—¥¢š”“ŽŒ‹ƒn„vXh£®•vYQJGJHHOOUM?E;0* "(;j²Öâëðóóóññòíæ×ʳ¢wMFDDDRUZZHPTBDUh‚jiŸ¼º©š•…fV]l}ŒŒ™˜—”‰vy˜¥Œ}Š‹Œ±·œ³ÆÇÊÙÎÅÇÔÜÞßÜÖËÒÜØį —˜Ÿ·Óëñðñ÷ùúúüüûüüüüýúøîèèßÔÉÎÚÞÝÜ×ÝåííìóûýþýþþýýþýóêøüýüýþýýýüüüþþýþÿÿþþþýþýüýúöðãØÎȾ¾ÈÌÒÕØÚÞßÞåçèéêìêìïïñïïóññòðñòññóòòñðíëæäáääãæçåÙÔÛäæäàÙØÛãæééçåÚ¤¢¨¨©¤­ÑÛÛÚÙÛÞåèåáàâßÞâåèëïñòñôôóðòòñòòññðñôïîíìééçäàÞÚÚØÖÖÑÐÑÎÍÉÍÏÕÞèïöüýýþþþþÿÿÿþþþýüýýþýþþÿþþþþþÿþþÿÿþþÿþýýýúöìâØ×××ÎÉÈÓÖÛåðùüüüýýþûüüüüüûüüûùøóîâÕÔáâßæëéççæéëêíôôïìèÜÚз®¡™—¨¥ž—’’Ž‘Œˆso}†s^}«¦{c]ZJA;AHJLVTG@.7(#?o±ÕáëñôóóóñòìæØɹ¡pL=,      80"!   + +   +     + + +   +"  +  + +       +    +       +   + + +      "  + !     + + + + +  + +     + +   +   +  +  + +    +     + +   +  @BHEHRUVYNRLIHL]w|˜µ¾»°™˜”ˆq]Ykuƒˆ—Ž‰}ww§u‚†Ÿ´ £¼ÈÅÊÚÌÄÈÖßäááÛÎÌÚØŬœ”•³ÍáìðòõøùüûüüûüüüûýúöìéæÞ×ÍÏÜßÝÚÚåíñõøüýþýÿýýýýýýôåìøüûýýüüûüýþþþþþþýþþýýýýüøðâÛÐÊÅÄÈÇÌÔÖÙÛÞÞáåçèêëìíïïðññòðññóóóññòòòôòïðìêäÜÚàâßâééÞÔÓÖÛ×ÕÑÏÛêëìîëèÜÍ¿¸¼µ²³···ÃÊÑÕÐÕÙáæèæáÜÝÝàââäèïïññòòñóóòóóñóóññóñïðîëêééæçãßÝÜÚ×ÓÔÔÏÎÏÍËÐ×ÙäïøüýýýþÿÿþþýþýüþÿÿÿÿþÿþÿþþÿÿÿþÿÿýþþþþþýýüõêàÙÓÚÏÌÑÕÙÙÞêôúüûüýýüüüüýüüúúûúøöñéáÜãàÝåëëéèçêëéíóôðíêåâÒ´¡’’§¤™’ŽŠˆŒ€tk’Šj­›tTPJDA?:3+(    N¢Ç×ÛàÞÝЃ%  (" + +Y¾åëîïîè¤G + +   + +7  +!9PcnnfWD4% +  -@;?HFMSRUQMHNNIHRx”¬ºÁ»µ©œ‘Šz]]fw‰††‡€nvƒ†¡˜~}”š”–·²¨¶ÇÇÍÛÎÉÎÕÝääãàØÌÕØ̳¢Ÿ¦ÁÞéîðô÷ùúüùûüûûüüüû÷ðéèèáÙÐÎÛÞÙÙäïöùúýýþýýþþþþþýüøèãíøûüúûûýýýþýþýýýýýýýýûøòèÛÎÌÌÈÇÈÌÏÓ××ßáãâæèêêëïîíïïðððóóóóóôôòòôóòññðíéåáÞßÝßâãèéá×ÏÏÎÎÓÎÏÚêìëìëæÜÖÖÔÌÿÆÒÒÒÐÌÊËËÑÚåçèçãàÞáäãäæêïñóóóôòóóðóòõôóóòòòñðïðííëëéçååäÞÜÛÜÜÕÕÕÑÍÏÍÏÕÙæñ÷üüþþýýþþþûüþþÿÿÿÿÿÿÿÿþþÿþÿþýþÿþýÿÿýýüûöíáÚÙÑÌÐ×ÙÜÚâëõüüüýþüüýýýüýûüûúùöóëåããáÞèíëèçèëìèëôôðêêëåз˜Ž‰”¢˜’’‘’Œ†„ym\e……˜•zaWHFC9;?DOSOJ>:2-/ (;a­ÕãîðóôõöôòïéÙ̺¤eD8$! +   + 7C3 &               + *      +     +  '&# &$'$0%" "''++-(+)*%%6)).,*"&$*% "!"  + +   + + +  +  + +    +     + +   + + +   +   +  +     + +  + A[b\QE=97C?5.%% +  +P£Ê×ÚÞÞÞÓƒ#    + (`Éèîîíîæ‡2!  + +  "8  *CTewwg`I6( $C>EICFTZ`WKBAJF:Emš³ÄÉÀ¹®¤–…j\duˆ†‡Š‡xmxs—¡Œ†Œ“²¿²¸ÀÊÏÝÐÊÏØàâäæçÞÏÑÛÌ·§§¸ÔçíïñõùùûûûûüûüüûüøñìéèçãÜÒÌ×ÝÝãïøûýþþþýýýþýýþýþþûìßàëòùûýýþþþýþþýýþþýýûùñçßÒËÈÉÈÌÊËÑÕÖØÞááãçêéëìïïïðòðïïñòòôôóóóóñòññòðïëçâääãÞãåæèèâÙÐÉËÐÒ××ßãäçéèäÛÕ×ØÒÌÇÍÙÚØÓÑÍËÌÖÝáåèæåããäâäææëíñòðóôòòóôóôôòòôñðòòðïðïðííëêèéççãåáÜÚÜÙÖÖÒÒÐÐÑÓ×äï÷úüýýýþýûùþÿþþÿþþÿþýþþþÿþþüþþþþþþýýýüúõêÞÙÐÌÓ×ÚÛÛÝãòúûüüýýüüýûüüüüüûùøóîéäæÜÜéîìéèèéìéíòõñïììãα–€‚—£œ”–•‘…viafvŒ’–v]PKNEA<:=CSNLJ<707;+!%" #7_¯ÕæíñóõôööòðçÙÍ¿¤cJ4&" + !7B8  +#  +  + + +    %6+11<   +   +  +    !$ " $&* * !&(  !!$ +'!% *0&&#&""%'"$*%*("!%#&"  "    +  +  +        + +  + + + + +          "A[e\L:??=>:;.%(! +   +N¥Æ×ÚÜÜÜÏ„' +  /€ØìïïìíÜr+    $6  1L\hxodQ2.# +  +(@BKH?DOZ^NCE?DJHHfšºÆÈÇ»°¤š—u]`h‚‡„ˆƒqpkˆ£š‰‰˜•Œ©ÆÀ¾ºÅÐÝÏÉÎÛâããææãÖÑÙϽ°´ÌãëðïóöúúúùûüûúûüúùóìêèèæäßØÈÑÚàïøüüþýýþþþþþþýüýýýúíÜÖáòûüýþþþÿýýýýüýüù÷îåÞÔÊÌÉÇÌÏÏÒÔÖ×ÛÞããåééêììîïððñðñðñòòôôõóòòòòòòñïíìèáàãåããååæçäàÚÕÐÍÒÖÔØÚØÛÞÝÜÙÖÖÒ×ÓÒÐÔÛØÕÓÏÏÌÌÏÕÚÛßáããåããæçêëîðññóñóóñòôôóôñôóôõòññòïððîïíìííëèèæåäáàÛÚÖÓÐÐÐÌÎÔ×âëôùýþüý÷÷ýþþÿÿþÿÿÿþýýþýÿþýþþþþýþþþýüýûñæÝÒÏÒÚÜÜÛÚÜêøúüüüüüýþüûúûüüúúù÷ñêèåÜßéììéêééìéìóóóðìëÛÆ­—ˆ‰£¢•“™’’Žƒxgckwˆ”‘tU@7XK6C@5*).&)%!   + (‹ÅØÚÝÚѵZ 'Oªàíððíã¸D ) +21(5<<523,0,* " !(   +@»Š!—ɾ‘6!&/l»åëçÞ•'  +  + * + +*T_rˆ‹Š€fOA6  Ellfd€¹ÐÖ×Ó·±ÆÎÃËɺ°»ÈÉÐÎÊø²¥˜’‹]Vhs~ƒŽˆ|}uvwŽ­¢ŒŒ—•Œ¢ÆÕÚÕÚÆÊÔÞåææçêëéÔ½ÊÉØèëïðó÷øùùùûûúùù÷ñçÛÎÃÍÏßêêìïóøüþýýýýýýþýýüùûýüýþýþýýüüòëõùøõêÝÕÑÈÅÄÄÉÎÕØ×ÚßãäâäèééêêìëìììïðïïïíðñïïððòñðððïêçåáÝÚÛÚÜÜ××ÖÔÕÑÏÌÈÊÈÍÖÜÙÚÖØØØÔÒÑÔÖÖÓÎÁ¹·¹¸»ÀÉûºÀÃÁÅÁÈÌËÅÇÍÒÐÎÐÌÎÏÍƾ»ÁÀÁÁÄÅÅËÊËÎÒÓÓ×ÚÙÝãçìíïñòòóóóôö÷÷øøôôôóôóôòññððïïïííëéæãáÜÚ×ÒÑÒÊÌÎÏ×áî÷úýþþþüýþþÿþþþþþýýþþþûýþþþýþüûöíéäÙ×ÓÔØàìöüúüüûüüüüüüùøùôðëÛßëíðïíëêìíéèñôóìÕ½¡’‘ŸŽŠŒˆ‰‹rbdo’‘ž·ÎÛàÞÜÐÁÒåçäæÝÀœzik‡“_9)!%#%E‚­ÇÜéïóõö÷÷÷óïìàзŒ^N0  +   + ?(;G8 %"         + + +    +  +   + +$ +       +           +  +  + # !%#       +  +  + + +   + +    + +     +    + +   +  +   + + ?ZbdQ)#,8D:;113+*.-'$!    N¥¼›7 +yÂ¥] #,>ˆÍäãÌu + + " 4Rbq†Š†jW;.# + #Jmspu„¹ÎÙÚÙÁ©ºÏÇÊÍ­°ÈËÎÒÈþ¹ªŸ–ŽqW`fu†ŒŒykrtt¨ª’ˆšŽ˜¾ÖÜÖÛȽÌÜããåçêêèÚÁÀÍÙçíðññøùùùúûûúûúôëäØÍÒÒÍÝêéìð÷üýýþýýýýýýûùúüýýþýþýýýýýûðßáêæÞÒÅÃÅÅÆÉÎÒÙÜÛßàãäåèêéêìíïïîííïðïïðïïððîðñîðîîëëçáÝÛÚÙÙØÙÙØÍÎÏÎÎÉÊÎËÍËÐÚÜÜÝÙÚÛÛØÒÖ×ØØÙÑÇÂÃÀÄÄÅÌÊÀÂÂľÀÆÊÍÎÆÇÎÓÔÔÎÊÉÑÏÈÁÄÈÉÇÅ¿¿½ÅÂÄÉÌËÐÔÒÑÖ×Ûáæêëïïñòòôõ÷ùùø÷öö÷ö÷ôôòóóòòòñðïîìéçåââÝÕÓÒÓÒÑÎÎÒÙãëöùüþüýþþþÿÿÿýþþþþýüüýüþÿýýýýûòëæÛÕÐÒ×Ùåïøúüûüüûüûûùùùù÷ôîäåëïðïíëêêìçëñõôëвž‚…š’‰‰Šˆ~habr‹”– ½ÑÝáßÛÍÅÝèçåèÜɳ—€t”§lA,%P‡¬ÈØçîñö÷öõõóðìàѵVB( + .   + +>H@' + +    +*        + +              + + +  + +      +  +     +  +  ##"!#!! + +  +   + + + +  +    + +   +  + +  +   +   +    +% + +  +  + +  + >ZYbL%+?>>;:085/1.)*/(  +  +M§Á«N f±s3   + ',M—ÌÒ¥@  + +!"  ;Rgx‰Š„mW@-  ++^y{ry†²Î×ÚÛα®ÊÍÅÊÄ·°¾ÈÎÔÎÅ¿·¦›“vZXdt…„tmrn{®‚ˆ™ƒ‡µÓÜ×ÜͺÃÜääååéêêàµÇÞêïðòòô÷ùùùúúúùøòéßÐÏØ×ÍÛéìíòûýýýþýýýýûøùúýþþþþþþýýþýýúíÑÉËÌÄÀ½ÁÆÇÉÏÖØÛááãâåççëëììíïîðïïïðóñññññðïðîìêëèåáßÝÜÙÛÚØÕÙÕÏÍÈÊÉÆÊÊÍÔÖÖÑÔÚÞÝÜÛÛÚÚÙ×ÙÜÞÝÛÖÍÈÉÊÇÈÊÐËÅÁÆÇÆÃÉÐÒÎÌÊÌÕÖÔÏÐÐÏÐÌÊÈÑÎÇÇÀ¹¶·¹¹»ÁÄÆÍÍÍÒÖÖÕÚÝåêêïïòòóõöö÷öùùöôö÷óóôóõôòòñññðìêçççãÝØÖÖÖÑÒÕÑÎÐØàéòøüýýýýþþÿÿÿþýþþýýýþþýþþþýüøðçÝ×ÔÔ×ØÝçòúúüûüüûúúùùùø÷õðéèêððîîëêíîéêñôõåÌ«™‰Šš›“‹‘Œ‹Œ‰ul_j€‘œ©Ä×ÜáÝÙÉÎãèåææ×Å»±•Šœ¢£z?(%"&)TŒ¬ÇÚçíòö÷÷õõóñíâе„W;+  +  *   >G:       +   +      +                   +  +  +      !#$  #& +  +   +  +  +       +  + +  +   + +      +/      +3   +  A_XZL#$4@=76)*2,002+*)  P¦Ä´`@x9 +  “.&D”½‹*     ?Wmˆ†‰Žˆvm^I0  (b‚‰†~±ÉÖÚÙÒ¸«ÁÑÊÇÌ»°¶ÄËÔÑÆÀ¹®œ•ƒa\aqv{„qrrmtª£ˆ†„¯ÑØÖÛÍÊÈ×âååäêëëáǸÊâêíîòóöù÷ùùùùùúôìåÔÌØÝØÓÚæëòøüüýýþýýùøùúýýþþýýýýþýþýüúóÞȼº¼º¾ÆÆÈÏÒÕØÜáäåææêëêííïïððññðïïñðññðñññîìëèæáÞÜÚÜÛØ××ÕÐÏÎÈÆÇÅÅÅÄÄÉÐ×ØÖÔ×ÝáÞÛÝÞÞÝÛÛÚßãÜÛÙÕÓÒÓÍËÐÑËÇÁÆÇÎÈËÕÒÑÎÐÔÖØ×ÔÓÔÑÑÏËËÎÒËËÁ´¹´¶¶´¹¶¼ÁÃÄÉÎÐÒÐÖØßäèìïïóóõöõõø÷öö÷öõôóôôòöõòóòïîìëëêçåÝÚÚÙ×ÖÔÕÐÐÒÐÕáåï÷úýýýýýýþýþþýýýýþþþýþýþþüôéÚ×××ÔÖÙáîõúûûüüüüúúùùù÷ôïëêíðòñíëìíîëçñóñáȨ—Œ¡’Ž”‘’…jmds}Ž—¥´ÌÚÞàÝÕÈÔåèåèàÑÅÎ朣§¢r?)#" ,R²ÊÝçîðóõö÷óôðìâеzU=&! +  !  + + 4@@!%     + +  +   +   +           +       +        +  +  +   +           "$! # " #""   +    + +  +   +    +      +    + + + + + +  + + +         + Kcd_N0(7;600&-((17+/$# O£ÁÂy )  & FxM      +=Og‰ŒŽ’†wpjR0#  (f‰‹Ž™¶ÃÕÚØÕÆ«±ÎÌÆËÁ´±ÃËÓÖÏÄÀº¥Ÿ‘…jVbnrz{~pzsln‚¨¯‘Š’‹œÅÑÌÖÊÈÈÕáãåæéíëã̺Íæëíñóô÷ùùøùúùùøñéßÍÏßáÚÒÙæíöûýýýýüú÷øûüþþýþýýþýýüýýüùïàÇ»¹¶·ºÀÈÍÓÕÙÝÞàåæçêëêîðîîðððññòñòññðñðñððîìçäâßÜÛÛÙÙÛÖÏËÍÈÉÆÃÆÅÆÆÇÇÉÉÐÙÛÛÖ×ÞÞãßàããâßÚàäâßÞÝÝÝÚÙÕÓÕÕÓÌËÍÒÓÔ××ÖÕÒÔ×ÙÙØÖ×Ø×ÔÎÌÎÒÒÐÍÆ¿¹µº¹µ´·µ¹¸º»ÅÈÊÍÒÔ×ÚÜãçêíïòóõôõö÷ù÷õõõôôöõ÷ôôôóòññîëëìåáàÞÝÚÙ×ÖÖÓÑÐÑÍÏÙâîùüýýýýþýýÿþýýþþþþýýþþýüøíÝÓÖØÑÏ×ÚçîöûüûûüûûûùùøùõòîëîïóñìëëìíêéñóíÚ½Ÿ‘†ˆ¥›‘“—“”zgaez‹Žœ¦¸ÐÝâàÛÏÉÚæçäæÝÌÍØÈ°¤§¯ª~<$! $#-F’±ÊÛçíòôõõõôòðíáÍ°wQE+ +   +    :DK# &!   + + +     +  +  +    + +   +     +  + +  +   + + +     +  +  + +   + +       +"" "# "%"! $+  $%%   + + + + + +  + + +  + + + + +   +  +  + +     +  +       !A`hbL606462:0710%3/*(*'"‚¶ÁŠ  +  +#    $>Tk‘Œ†€qgW<   +)m‘¡»ÂÏØØ×ͱ¨ÆÐÅÇȺ¯¾ÇÑÖÐÇ¿¹«¤’ŽtU`fn{xuzzqkuwš²œ~–…¬¼ÁŹ²ÃÚäãæçéëëåÒÂÖèëîñóôöùøúùùúù÷íâÔÇÌÜáÜÔØæðùüüýýûøùúýüýýýýýýýýýüüúøôæ×˹¶¸·¹ÀÉÎÒÖÛÜßãæçéëîììïðïððòòïòòóóññðññòðïëåàÜÝßÞÜÛÖÔÒÊÆÄÂÀÂÁ¿ÄÈÊÍÊÈÇËÔØÜØÖÙÝßäåæçéèæåéèèææçççäããÞßÜÚÙÛÝßàáßßÞÚÛÚÞÜÚÙØÙÚÜ×ÑÏÐÑÓÐÌÈÅÀ¿¿½Ã¼»»º¹º½ÁÂÅËÍÍÕØÛÝàãêíïñòóõööùö÷öõöööõõõõõôóòñïíëêèåæáàÚÚÚÔÔÏÏÍÊÇÌÌ×åîöüýýýýýüýþüýýÿýýýýýüüúñãÙÔÔÎÈÍÛâéôúûüûûùüûúúøø÷öðîññóñïìíïîíéïðêÓ²Ÿ‘…“œ–’”’“”’‰}ejm}Ž«½ØàââØÈÌâëçèâÒËÚÝϸ«­°£v>!#&.O•¶ÈÜçîôóôõöõóòíãдyRE'  +!   +:RP'      +  + + +     +    + +     +   +  + + + +      +       +    + + + +  +      + + +  +     ! &!!''$"#&% #&&   +   +     + +    +    +  +   +       + + + :_bcR@&)2/15;<;0-"F5$138 0 Pž½¡5  +      +  +FYl“‹‰|peY4 +  'm“™œ¤½ÄÌÕÙØÒº¡¾ÑÃÄÈ»«¯ÀÎØÕÌú³ ›”v`Zgkt†‡yunps‡§¤…“†n”»ÊͽÄÙáåäæäêëëæ×ÈÕæíïñôôøùùúúúùúóæÜÊÀÈÛäÜ×ÖåôûûûøøøúþýþýýýþýýþþüýüùñçÜͽ¹¸¹»¿ÂÊÍ××ÛáâäæèçéìííîñññðòñòñóôôòòñððòñîêçâàÞàÞÙ×ÔÍÎÉÇÅÄ·¼ÆÄÊËÉÉÌÌÎÍÎÖÛÜÚÜÛáåéèéëîîðïñòóóóõöööóóïèååêîîðññïîñíêéééäàßÞÞÝÚÕÐÐÔØÑÑÏÊÆÅÅÅÅÀÄÄÀ»¹¶¸¿ÂÁÄÉÌÑÖÙÚÙÚáçéíðñô÷÷ù÷ööõ÷ôö÷ø÷õôôòñðñðïíëêéåäãÞÞÚØÖÓÐÌÉÈÉÏÑ×áëôúüýþüýþüüýýýþýûýýüû÷îâÙÔËÊË×ßêð÷ûüûûüûúüùùùøöòðñóòñíïïïîëêðñæʬ›Š˜›•Ž˜“‹tabm€’”¶ÊÙààÜÔÈÓåéèæáÏÒâáλ¶´µ q<)%.M’¶ÊÜçïòõõõõñóòîáбxOF'% + +  +  +675-0"//,/&!  +fª­O +    +    ++B[”“’‘ƒufXA   !e“”–š¨»ÅÆÑÙÙÖƱ²ÌÉÃÇÀ°¥»ÉÕÖÍÄ»´¬Ÿ{o[_fu{|„~zt}r’§‹y‚‚»ØßÎÓãääåææéëìçÚÍÖåìðóôöùùúùúúùöïáи¾ÖâÝÓØçñôõö÷úüýýýýÿýýüýýýüûôíäØΞ¸¸ÀÂÃÉÈÍÕÜÞàãåèéëëîîðððòòðñóòóõôóóòòðïðíêèåââàààÛÖÏÎÐÓÔÎÆÃÄÃÈÆÌÍËÎÏÔÖÙÚÜÝÜÝßßåéëïñöùùüüýýþýþþþþÿþþü÷ïóúýþþüýýýüûúûù÷óíêåäáÜÜØ××ÕÔØÔÔÑÐÒÊÇÁÉÇÅÂÁ½»ÂÄÇÉÈËÎÑØØÛÛÛÝßæéîðñôôõöõ÷ùöööõø÷öõóòôòññïïîìéèêæäãÝÜØ×ÔÏÌÅÊÌÌÍÑÙáîõùûüýýýýýýüýýüüýüûøïßÕËÊÇÌØáìóùûüúüüüûúùùùøóñïòôñííííïêéîïàÀ¢‘‰‡š•ŠŒŽ†‡‹ŠzoecwŽ”˜§¿ÑÝâßÚÌÎÞéçèæÚÊØéæÔÀ½»½¯|<#$%*O•·ÌÜçìòõô÷õôôòîâѬmL>)% +   + + + 2 + 8EC' + !' + + + +   +    +  +   +  + +   +        +  +   +   + hn   + +         #"$$%"#*&" "#"%%'!!( +       +   +   +  +    + +   +  + +   +   +      &IWbaJ>>(! $4=;43,40(-2((0')    `š\ + +       +  ):]‰™•”ˆ}eR?  &f‘››ž ¹ÉÅËÕ×Õͼ¬ÁÊËÉÈ»«®ÅÍÓÑȽ´£›v`\ist~€…‰vw‚vƒ›–yn„ŠŠ¦ÓÝÍÕãåäåäåéíìæÜÐ×åêðóôöøùùùùøöïçÖ»¹ºÊÝÙÕÜáâîøûýýýüþýýýþüüûüöñæÚÍÆþ½ÀÁÁÅËÊÎÓØÚßáäèçêêíìïïðððóóóóòóòòôõðñïîëêçääáààáÛÜÛ×ÏÔÙÚÙÔÍÈÉÈÍÏÐÎÐÖÛÛÜßãàààäèéíñôúýýþüþÿÿÿþýÿÿÿÿÿÿþþüøùþþÿþþþþþýþýþþþýúóíêæäãâàÜÜÞáâãßÞÜ×ÕÌÒÑÌÅÅÄÁÃÈÍÎÍÐÏÐÖØÛÚÜÙØÜÜàäëíïñóôóöööõ÷öõõõôøöõôòòñññïìíëèêéåáÞÜÖÓÎÏÎÈÂÃÇÈÎØäñøùûýýýýýýþýýýýüüúîÚÏÎÎÌÐÙâðøùüüûüûùúùù÷ø÷òñóóñîîêëîêçëìضœ‘ˆ‚–‡‡‰Œˆ‹ŠŽ…skdl~Ž“ž³ÅÔáãÜ×ÉÑåìèèáËÊãìéÚÈ¿Á¾­~=1#)&(Q–ºËÚæìñðñôõôññîãÑ©nL?*!  + + + +    + 3FL2  #  +           "     +     + +  +       +    5%#$$#$(-&-0+31,0)35444-//;43=-(,# )!!/-)($#%("()'-+'+"5-*   + +    + +  +      + +  +    +   +        + +    +   #LYgbG96:) .0.6-0/-.:20-10%  # +W< + +        + + ,;e†’“”“€‚{cN?&  +  h”šžœ ¯ÁÃÊÒÔÖÐð¶ÊÌÅÈIJ±ÈÊÓÔÏÆÀ½ª™“‚f`jitŠƒƒ‚ƒvr{“¤mƒŠŸÈ×Ð×ääããåäêëìéÞÖÚéíñóôõ÷ùöøùøòíâ˼½Ã½È××Øáßç÷üýýýüüþýýýüüûùñáÕÉžÁ¿¾ÃÅÈÇÊÏÑÔÙÚÞãâçééêëíîïîñññóóóôóóñóóòñïîêæäâáâààßßàÝÚÙÏÕÙÜÛÕÏÌÏÓ×ÙÖÔÚÜàãæëîîíïîðïôùýþþÿÿþþþþÿÿÿÿÿÿÿÿþÿþýüùþþþüþþþÿþþþþþýýþûøöðìèçèèêðôøöòíééãÝÜÚÔÏÎÍÊÊÎÔÏÊÏÏÙØÕØÙÙ×Õ×ÖÙÚâæêíñòóõöõö÷÷öôöööõøøóôòòñðñïìðîìëêæàßÛØÒÐÉÄÄ¿½ÃÌÕáêòúûûýýýüþÿýýüüüõäØÓ×ÐÍÍÝëöúûùüûúøùøøøù÷òñòòñîïîìíëæêéÏ©“‰{™–‹ŒŒ‰‡Štbjp}Œ–¦¼ÊÙâãÜÐÈÝèèçéØÊ×éîéÝËÂÄõˆG+#% !.T›ºÊÚäìñòóöõôòñîåαmJA&  +   + +   +9BI, %    + +  "!"              + +      + *$#! "*'"%+'&%+0++)2:3277;:67:6:F:DCFJBEIKDABFIEEBMIGABFJD18%$ +#(15//,+392**2:6  +      +  +    7Ca‹–•“‰‚w^F;  )k“Ÿ¢§¥š¥¯¼ÎÒÚÐ˶§ÁÎÆÉɶ¯ÄÅÐÔÏÊÃÀ®œ“ˆkc`dr…ˆŠ†z~…ynŒ¡…e€•–—¸ÎÎ×ääääåçëëëéãÜáêññõôõøøùú÷÷ðëÚÂÁÔÑÂÏØ×ÛãçðúüýýýýýýûüüùøïåÖȼ½½ººÂ¿ÇËÍÐÔÕØÙÙÞáâäéêëëìïîðððïòôóòñóôññññíëèåâãÞÛÚããßÞÞÜÙ×ÕÙÜÝÛÛ×ÖØÙÙÛÝßâéìñøùûüýûõ÷ùüýþÿÿÿþýÿÿÿÿÿþþÿÿþÿþÿÿþýýþþþþþþþÿÿÿÿþÿýýþþýþüûóîíìñúüýüýûùøóïëãáÝÚÖÕÖÔÔÓÐÓÔÛØÔ×Ú×ØÓÏÌÒØÚßãæëîññòóóöõööø÷÷õö÷÷öòóóññðññîíîêéæåâÞÛØÒËÌÆÃÂÀÁ¿ÆÍÝñúûüýýýýýþüýüýûïàÔÕÔÑÐÚãòùùûûúúùùùùúú÷õòóõñîîîìíêåçáÀœ‰~€Šž˜Œ’ŠŽŠ‰”‹€z`p€™¨ÁÑÜäãÛÌÐâéçæçÔËÝìîìÞÌÉÇǶƒ?%#",Sœ¼ÏÛäëðóööõôóòïåÏ«lI>,   +  +6FI#'  +  +  ##       $% %,%-(24*%+&'$/6.3.131278<89=4A=?@JDB;EICEGGDEIIDDDAJLHFB@=DCD>:=84AE15397.+0-73.!&0('$('$" %&0)/6-+3/-01//2+1*.0-**+&/=   +  +   + + +  + + + + + + +    + +      +  +   +     + + +   &  /I\d\KA5/+$ + +"304,/34434(,:0) $&       +  ?LlŒ“–‹†rbU@  + ,k¢­©£™“¸ÍÔ×Ðͺ ·ÐÈÇ̯¹ÃÊÑÑÍÊÅ· ‘’uhb`t‚ˆŽ„ˆ€ˆƒvœ’s{œ“¢ÁÇÓâæççççëëìéåáãêñóõôòöùùùú÷îåÒ¼ÆÒÈÄÒØÚßæðñøýýýýýýüûù÷íáÕËÁ»¼¼»¿ÀÇËÊÑÔÖÙÙÛÜßãäææêëìíîîðòñððòóóóññðñòîìëäàßÜÙÖÕ×ßãáàááÛÙÖÛßÞÝÜÛÙÙÜáâéìñ÷úýþýýýþüûüþþþÿýÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿþüþþþÿþþÿÿþÿþþÿþþþÿþÿýþþûøôöýýþýþýýýüûúõïëæàÞÝÙ×ÓÕÖ×ÙÙÜÙÚÛÖÑÇÊÉÌ×ÙÚßäæêîññóööõ÷÷õø÷÷õøöóõõóòððòðððïììëèåâÞÛØÔÏÊÊļººÅÖçõùüýýýýýüýýüü÷æÙÕÖÓÐÔÜì÷úúùûùùúùøúøùõñóóñïíìëíèáàÔ¯—†Ž™“ŒŽŽŽŽŽyjfm„˜ ³ÄÓßäáÕÇÖæêèéãÏÏåíïíâÒÍË˺‡Q-" !!(N‘¼ÏÜäëïòôôôôóóîæÒ¨mP>/#  +  + 2A6$ (!  + +   # " " $!%""!"2#&%'-).17,0/8<6-59<;=9:879=7<;>:HKI@DELEAHLMQFEFBCFJFELKCDIBFE@B?B@B>9=??7<;68003.1&&.+*#!  *+     +   *27<8849@C=@:59<=>:>GF?;      + +    +   +   +   +  + +  ,Lfb\A<333'# 2.41/.;8213./-,% !%"$      + CJ   +  *BPs–˜”‰‡‚vcT9'  + + +*q’ ©©£¢­ª¹ÈÒÖÔÒÃ¥«ÄËÅÇǶ²ÃÉÓÓÏËÆÁ©—~y^ZhzƒŽ‡Š~‡ƒr‘›}•‰•µÁÔåæäçåæéëìêåâáêðõõôõõ÷ùù÷òéÞ̺ÀÈÃÍÚØáâåõöøýýýüüüûöíâÔÊÁ¿½½¿¿ÅËÈÌÐÐÖÙÙÝßÞßáääèêëêíïïðññññòóòóóòññîìêæäàßÛÔÑÌÐØÞáááåßÝÛÖ×ÞàÛÙÛÛàçîòøûüýþýþþþýüýþþÿÿþþýþÿþþþÿÿþþþÿþþþþÿÿþþþüýþÿÿÿÿÿÿþÿþþþþÿÿÿþÿþþþþýýûüýþþþþþýýýþýýüùòîçâÝÙÚÚØÚÚÜÚÝÛØÎÌËÆÇÍÐÔÙÜÞåèëìðóôó÷öõøôöööõöõöõóóôòòòòïîïîìéêäáßÛÕÖÎÉÇüº¼¾ÎÝëõüüüýýýüüüüüñàßÜÙÒÑÙçòøúúúûûùùøùøù÷ôóòñíëîíëêàÙɦŽuv•’Š‹ˆŒ’‹Œyiek”¨¾É×ãâÝÏÍßéëééàÍÖêííìãÔÑÍÈ»‹L-*$ $*L•¸ÑÜãëîñõõôôñðîæУmR:#   + + ,8=- $/"    + +     ##'!"$)"#&!&*,,00'.483;69349=:>=C><@?AFL>?KGFGJMHHB@IM[POXMNJOKVRNOXUKTMEMJIDRGJDIDA;B6.?44?;92-,-,+'((&)*+   + +    8  +   +   +"*,-,/),,43.4046::7:?)  +#      %!  +#%)03KJJIBKPNOJSWKKURQMXTQQPRMKWYQUSQXPMVRMPIC=CDE=H><<;9DFKEA@=;237M`Š“––’“‹Š…oZ< + +,t”¤±°¨Ÿ±»»ÉÁ±«¸Áû¹ÄÊÇÉÉ®ªÀÅËÑÒÏËÀ¤š‘vb]j}ŠŠŠƒ‡v“—vr|Ž²Ôåææççèéëëêäßåîñóö÷÷øøööïäØļËÍËÔâîùûôãèêçèìéáÑĶ¶ÂÀ»»¿ÄÆÌÐÑÑ×ÙÜÞââåãæççèèèèêèêíïîðñòñòòðñòðïëæáàáÞÛÓÉËÑÚÙÖÕÖÜäââæèéééêîöùýýÿýþÿþÿÿþþýþþÿþÿÿÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿýûñíøþþþþÿÿÿÿÿþþÿÿþþÿÿþÿÿþþÿÿÿÿÿÿþþþþþþýþÿÿÿÿþÿþþþýûùóïíèååàÞ×ÕÖÕÒÔÐÈÀÇÌÐÔÖÙÜâèíðòôóôøø÷÷öõõôôøø÷÷÷óóõôòððïðîìéåáàÚØÒÎÌËƼ½ÂÇÑÞèõúýüûüûøïèéçÝ×Üèñ÷ùùúúùùùø÷öóñôôòííëëíêâΰ‘|{|‘Šˆ„‡…Žˆ‘sqol~Œ‘£³ÈÕÝãßÏÐáééçëâÕÕáéëèâÜ×ÕÏÊÚW+'# !1E“¾ÏÝäèíðñôóôòðìäÑ¥aK/   +    2>@) ) +    +  !-$! %( !    +    +  +          + + +    +   r  +  + + +    +    +     + +  + +  +   + +     +  + + +  3RUTG76.).6;1)313681;=084*($,&!  +‹Öß©L + 4šÜÔ†+  + +=NiŽ’”™˜“‘u`D  .o–¤¯¯¯¢³½¼ÈǺ·¿Åĵ¯¸ÍËÅǺ¨¹ÆÎÓÓÔÒÄ®—Œ}jdk|„„Ž‹‰†ƒzŸ€uq‹ƒ§ÓåççæèçéëíìçÞåïòõ÷÷÷øøøóéÞʳ·ÍËÍÛêõûùøáÏÎÆÁÁ¿¼¶³µ´½ÁÁÁÆÈÌÒÖØ×ÙßàâäçèççééééééêëéìîððñïññòñïïëéåàßÙÔÑÍÈÅËÔÜÛÖÓ×Þæååëîñó÷úýþýÿÿÿþÿÿþþýýýÿÿÿÿÿþÿÿþÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýûôëæäçòøüýÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýüüýÿÿþÿÿÿÿþþÿþþþýûùõñìæâÜ×ØÖ×ØÏÅÀ¾ÀÁÆÌÔ×ÙÞåêîïòôõö÷ö÷÷öøöøø÷öõöõôôôòóñðñîìêéçâßÛØ×ÔÊÌÈÂÀ¾¿ÃÀÉÔÞëôøúúúòçäæÛÒ×âíóøùúúùùùøø÷öòööòïïíëëëßǦ„v‚Š–ŽŽ’••—Ž‚shd€Š’˜¨»ÌÚáãÛÌÕçéçèèÛÊÎÜäãÞÚ×ÙØÐËÅš^0(*"# C’¾ÎÛáèíñòóôòòñíãÑ¡eL6& +    -B@' &)&    +   #  +        +  +  +  +   +  + + e7 +  + + +   + +  +    +   +    + +  +    +     + +  +   DX`XJ?5./!&7@A@,$"05<789/*)./-+09/$ !.!V»ãéÓz#  + +Jºææ¯K +   =JqŽ‘•™—–Œz\:  +.y“¨±¶³¡¬¸ºÆǾ¾Êʸ¬«ÄÍÃÊÄ©­ÂÍÔÕÕÕÌ·¤Ÿ‰qd]k†Œ‘ŒŠŠ‡‚—v‰„†—Íäååçççéìëìèáâëñó÷÷÷ööôîåÓ¼§³ÌÅÑáðùùùø⳦ œ£¦©®°·º¼ÄÅÊÌÎÒØÜÜßââåæçéêéèêêêëêêëëìíîïññðððïìëçåâÞÜÑÉÄÀÂÅÁÈÓÝÝÙÖÞåèìïòúüÿþÿÿÿÿþÿÿÿþýýüýþþÿÿþþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿþÿÿþýüúôìæßáÛÛßãìñúýþþþþÿþþÿþÿÿÿÿþÿÿÿÿüÿÿÿÿÿÿþýüüþýþÿþþþÿþÿþÿþþýýþüúôéãÞÝÜÚ×ÑÊľ½º½ÃÊÉÒ×Ýáçêîïòôóõôõù÷÷øø÷øøøøõôõóôôñðñðîìêéæáàÞÛØ×ÔËÆÄÆÀ¹»»¹ÃÏáðôõðæãäÛÑÐØçñõøúùúøøøööôòø÷òðëêìëêÜÀ…„Šœ›ŠŒ’Ž“˜yudl|‹—¡²ÅÒÛßßÑÊßêéæèãÒÆÏÙàÝÖÍÕ××ÓÏÀž`4*!$A†¹ÎÚâçíîñòòðïîéäÓ¡eE8$     +  2@A. .8&   + +"( ###!#  # + +   *        + +   +  +    + +   +  + + + +  + + + +   + + + +  + + +  +  +  + +    + +  + +    + + + +      +GX`VIB?2+'/.;- *19:29/221-&+0-+ ! $$ #sÌçêÖ~(  bÅèëÇf&  + EPl’”šš’”™‰ƒc/  0yœ©­¹´¢¤¹³½¼¶½ÈǺ¸°±¼ÌÈÇ˵¡»ÉÍÔÙ×о®¡šŽ„ibdy„ŒŽ„|“™ƒ{}ŽŒ‘Âãåæèåæéëìëéáàíòô÷øøö÷ôëßʬ£ÀÌÐÛèôøùöïͨš•›¡¦©ª²¼ÀÃÉÊÍÓÕØÚÝßäãåéçêêêêêéêëëëëëíïïððððïîîêèæãâÜÛÐļ¾ÃÈÊÇÈÒÜÜÚÛßèìõøýþþýþþþþÿþÿÿÿþýýþþÿþÿÿÿÿÿþÿÿþÿþþÿÿþþÿÿÿþÿÿÿÿþþýûõïéäßÚÞÛ×ØÚÝâëóúýýþþþÿþÿÿÿþÿþþÿþþþÿþþÿþÿÿþýþýþÿÿÿÿÿÿþÿþþþþþÿÿþþüôêçâßßÛØÎÉÆÂÀ»¼¼ÀÉÐÖÚÛâéííðòö÷÷ô÷øùø÷÷÷øúöøöõóõôòôñðñìéêéæåàÞÜØÓÑÈÅÈÁ¿½¹´·ÀÐÞêìçåçã×ÐÔãòö÷ùøø÷÷ôóóòôõôôîìëêëæÖ¸”…w‰¡“‹‘”˜‹’}mdhyœ­¼ÈØÝàÜÌÏåéæäçÛÐÒ×ÚßÜÑÍ×ÙÖÐÏÄš_0##(D‰·ÎÚâèêîñóôòòìêåÕŸiV2"  + +   1B@5&+   + + +&&!#$" "# + +   +   &   +  +   +   + +  "   +    + + + + +  +  + + + + + + + + +  + + + +  +  +  + +  +    +     + +   =[aYFAA6,'037?B@12.;A8353(.11(,S"&# &  +zÍçéÔ{%  tÒêêÍw- + @Nmœ™—˜š”ƒf= +  2p˜ª´¼¶¢§¸¯®°¦³Áº½Á½¾ÍÎÅͼ§³ÀÊÕÙ×ÐñŸš‰zjdu‘Œ‹ˆ…wq‹¡y€Š‡ˆ±Üãçåæäèêììêåæìòô÷÷÷ùôñé×À¨«ÆÖÙÛêñóíâб¡š“ §«°³¸ÀÅÅÍÒÒ×ÛÜÝâáãáæèçêëêëìèëëëîììëîîïñïïðíèåâáßÚ×м¾ÁÈÊËÈÍØÝÝáäêñøûýýÿÿÿÿÿþþÿÿÿýþþÿÿÿþÿÿÿÿÿÿþÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþûñìçãáÝÜÞÜ×ÖÚÛÞÞãëòúþýþÿÿÿÿÿÿÿÿÿþþÿþÿþÿþÿÿÿýþÿþÿÿÿþÿþÿÿÿÿþÿÿÿÿÿÿþþû÷óîèæâÜ×ÎÌÉÈ¿¸¼ÃÈÐÔ×Üàçëîñôõ÷õöõõö÷øøøöøùø÷ôôôôóñòðïííëêéæääáÜÖÒÍÆÇÆÀ¿¸µµ²¾ÎãçææäÝØÜàîôùùùøôóñðñðôöôóîíëëéãʱ–}v’¤—‹‘•”™“•‘ˆvmkt—ž­ÆÐÛÝßÙÊ×çéçæåØÕÞÞÜÝØÓÏ×ØÖÔÒƧ^--"#)B„µÐØáåêîðññðïîëæÒ—_N,%  +    %BI7(5/&  + "( %!&&"'*+!  +  +       +   + + +     +  + +         + +    +   + +   +   + + +  + + + +  +    +  +     +    +  +   + +  +  A]bWD;A61-.6BCID69( 5>:8>7(2.1,"+.($! # 8ŽÕèèÏp + + +‚ÕêìÕ(  C\r‹‘™™›˜˜–‚p@ + 2o—¬µ¹¹¤¥°­££ª¸¿½ºÀÂÀÈÒËÍÈ´¯¸ÅÏØ×Ñ˺«š•ˆ~lazŽˆ‰†~~†—ŽŠ}ˆ…ž×âæèèçèêìëéæèìòôõõõ÷ôïåϽ¯³Æ×ÛÝÞÜÓȺ«›••Ÿª­°¸¾ÅÎÍÐÕ×ÛÝáßãâææèèèêëìëëêëîìîîîííëíîïíëéäâàÛØÐÉÁ¼ÀÃÊÊÊÊÓ×ÚàâêôúýþþþÿÿþÿÿþþÿÿþþþýþÿÿÿÿÿÿÿÿþþþÿþÿÿþÿÿÿÿþÿÿÿÿÿþþþüùõíéæâáâàÜÝßÛÙÚßâáÜÞãëôüþýþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýÿþÿÿþÿÿÿýýþÿÿÿÿþÿÿÿþÿÿþþüüøòêåáÛÓÍÉÆÁÁ»»ÁÂËÑ×ØÝåèìðòõøõ÷øøøøøöö÷÷øø÷õóôôôòññïíìëëêéçääÝÜØÐËËǼº¶®µ¹×èæäãÞàæãêôùùùôóðííîïñõöóïìêééÝĤ‘˜Ÿ—‘’“˜›”yhak…Œ•¢³ÇÔÝààØÌÝèçæéâØÛâÞÚÕÓÑÒÖØÖÖÏÅ«m<%  %8†µÎØáåéëíîîîïìêäИZL)' +   +  + &:;!%94    ! "*" !###-$)'!" +   +   +    +  +      !"6    +      +   +      + " + +   +    +    +  +  + + + +  + +  +  +   +      +  +      + +  + +   +DZ]TJ?21.,2;>CIJ=8-! $<;=345110$#$!**&'!#" I¬ÕáåÄ_  +/ŽÚêêׂ/  E^o”——œœ™“v`E  .r”©¯»¼¥Ÿ²­“§®¶¾»±¸ÅÆÇÖÒÊ̼²¹ÂÌ××ÔÐĬ ’pfo}Š”ƒˆw’—†t{|sŠÏáæèæåèéêêèçèðòóñôõóóëÜÍɽ°ÆØÚÚÉ°©¥žŸ››– §©®µ¿ÇÊÎÓÕØÜÜßáâãéééééêìêêëéííîííîïîîðïïíëæäãßÚ×Ê¿½ÃÆÉÌÍÒÔÚÛàéðøýýþþÿÿÿÿÿÿÿÿÿþÿþÿþþÿþÿÿþþÿþÿÿÿþÿþÿÿÿÿÿÿþþþþÿÿþýü÷ñíìèååäáâããßááÞÛàãâáÞÜßãíõûýþþÿÿÿÿþÿþÿþþÿþþÿÿýþÿþÿÿþÿÿÿÿþýþÿÿÿþÿÿÿþÿÿÿþþýþüùóìãÚÔÏÈÉÇþ¼»ÂÇÏ×ÙÝäéíðóõöööööùõöøöøø÷õ÷÷öôóòòòðïïîíììêéèåàÜØØÔÏÉÄĽ¸®µÑåêçææéëèèôø÷÷ôðîîëïñó÷öóììêéåÓ» Ž’¡˜•™“’””Ž†reho„•®ÄÍØââàÔÒâèæçèÞ×ÛßÛÙÓÏÉÐØØÙÖÐǯyA!!$/w´ËÚÞäéëïñððîíëâÎ_N("    +  + + + ++;+'!     ("$"%"!"!#$!" + +  + +   + +    + +   +  + +   + +  !    +   + + +     + +    ,  +   + +       +    +   + +     + +       + +   ®S +  ;WfYG;;93./@CFI>?82! $782://,.-$*.%*259$   N²ÛßßÙ­G  M¯åêæÅe     +J`z‘–——–•–•ƒiJ %8NtŒ®¶£§š•“–©²Ã¹´¼ÉÍÄÇÔËÏDZ­ºÇÐÚÖÐĶª –e_n„€Œ”“’‹‚ˆ’mhw‰·ØäææéèéëëëèèîóóôõóñîáÏÏßØÑÚÛÜÆ£›Ž’™œžž§¦°·º¿ÄËÏÕ×ÚÛàäâääæèêééêëëîíìîîðïîîñïïîìëæääàÜÓÍÍŵ»ÂÆÉÈÈÏØÚÝãëöýþþþÿÿÿþÿÿÿþþüþþÿþÿþÿÿÿþþÿÿÿÿÿÿÿþÿþÿÿÿÿÿÿþÿÿÿÿþùôîëêèæåçèçèçåèçããæäáãçäàßÛÙÙÙØÞåëõúýÿþÿÿÿÿþþúûÿÿþþýÿþþÿÿÿÿÿÿÿÿþýþÿþÿÿþÿÿÿÿÿÿÿÿÿÿþýûõíåÝÖÍÎÊÄÀÀÇËÃËÔÙÛãêíñóô÷÷÷øøø÷ù÷øö÷øöõøööôóõóóóðïïïëíìèåãâÞßÜÕÓÍÊÆÇÒÕçéæìöøõìëõöôðîîïðòòôôôóëéçåÜÇ®›’Œ™ š˜•–”˜•{ichwŠ¦¼ÌÙÞãÞÖÎßêæäåÜÓÜæáØÖÑÍÄÈÐÙ×ÐÌÆ´zO42(!'1u³ËØÝåéëìíððîëëãÊŽXF& + +    &.+  +  + %&!&)""'%%&     +    +  + +   +   +      +  +  + +   +   +   + +    + +   +:     +   + + +   )   + +DDKG=@=:+ '8:@;494$!##&3.24+  .vÏäåà×­F + J¸åëÓ˜> + +  Jiy–›˜œ–˜˜ŒnG  + -T¡±£ž¬¨š”–ŸŸ¹³£²¿Êº½ÓÍËѽ­´ÀÈÓØÒÌÀ®¡‘„l_k„‚Ž‘‡€~w‚ƒpn‡‘¯×áåæçéëëëëééîòñóôòïëÕÁÛåâÜÚÙÙ㜗œ£ §¯ª¬²¶¼ÂÊÎÓÖ×ÛÝßããæåééêëêìíìëîïîíïððððïíêêæãââÛËÉÎÓžÃÆÉÐÑÓÚÚÞèïøýýÿÿÿÿÿþÿÿýýýþþþÿÿÿþþþÿþÿÿþþÿÿþþÿÿþþÿÿÿÿÿÿþÿþþüöñîéééèæèèèäæèçççääåäâæãâääáÝÚÛÙÙÝÞâêöûýþþþÿÿýúûþÿþþýþÿÿÿÿÿÿÿÿÿÿþýÿÿýþýþÿþþÿÿÿþÿþÿþþþþùóéâÜ×ÓÊÉÅÉÎÎÍÌÐÖÞæëïððóôõöú÷ñøö÷øöøööö÷ö÷ôôóóñððïïîïìêéæååãâÝÚÕÐÏÓÑÉÛëéëõù÷íèíôôïëíîðòóôõñïëçæä׿©œ“’ ™™–˜œ–“Ž€jdsƒ‹”¨ÂÓÛããáÔÊåêæåä×Ê×ÝÖÍÑÒÑÊÊÕÙÑ»±¨—wXGE:' +7q°ÌØÛâçééìïîïìêâƆ\E#    +  #',%" + +  "!#-/ $("$$ #)%     +  + +       +   + + +  +  +  + + +  +     +      +   +      +  +     +OL      + +  +    < +  +>X_WMA@7,776BHIDBB:6/ /8:;97,*$"%'-"4A:&  +  A ßêèÝÑ™<  U¿åé¿h*      L`v“—“›™—›œ—„jJ  + 7¨¤›«º¢““™°¤w}š¼³µÉÐÉÑ˸°ºÀÊ×ÖËÅ´ª™–”„ed{ƒŠˆŠ‡‚pt‡zŽš‘¦ÑàååçéëêëëåãëîðòòðìèÑÀÚäåàÛÚ̶© Ÿ£¤¥¨¯¯³¶À¾ÄÈÍ×ÙÚÛÞâãåææêéëìììííîíîîïïïðñðíêéçåæãàÓÈÐÓÔËÄ¿ÊÐÕÚÚÞäëòøûüýýÿÿþÿÿÿþýýþÿÿÿÿþÿþÿþÿÿÿÿÿýþÿþÿÿÿþþÿÿÿÿþýþþüøñíêêëêêçæéêêçæççèäáäæãåçããåçæâÝÚÜÚÛÜÙÜåð÷ûýÿÿþýûûþÿÿÿþþÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿþþþüüþÿþþÿÿþÿÿÿÿþý÷ñæàÙÔÎÊÎÔÒÔÑÐÒÝßáêìïñòôøø÷øööø÷øöø÷÷öôõõõôóòóòñðïðîìêêèèåãäÞÚ××ÕÌÀÏæéèöú÷ìæêóòíééïñõõôòñíêåæâѺ¨š’––”ŽŽ™•”“kfawŒŽ–¯É×ßååÜÑÐçêççÞÎÆÑ͹¹ËÓÓÊÇÒÔÅ’sYTK804/%%",l¬ËÕÛãèéêíîîìëéãÆ€TF% +   (+# "     +',--")*"%!+$    +   +     + + +     + +   +     +     +     +    + +     + +   + +  +  +    +  + + +   + + +   +   + +HYZLF8@B/26A=:-/# /0+4@<1  O¸æíéѦ`  +  "aÉçç¶X   Mc‘’”–˜˜š›•‚k@#  (nŸŸª¯—~š¤¯´|Ysš¹¶ÄÔÍÑÖƯ¯¿ÇÒÖÐʾ³¥œ—…h\h…Œˆ…‚sq•Š›•œÆÝåççéêëíëåäéîñóòîëçÕÃÑããÝÜÖ¿¯¯§¦ªª®±µ¹¸º¾ÁÈËÑØÖÜÜßäâäéééêíìîííîïîîððñïððíèæäääæáÙÏÐÛÚÖÓÏÓ××Ûáåìðõ÷ùùûýüýþþþýüýÿþÿÿÿþÿÿÿÿþÿþÿþþÿþþÿÿÿÿÿÿþþÿÿþþú÷ôðìëééîëëêåååéììêèéíëééìêëéåãçéæçæäååãâÞÝÞÛáêïôúùöïøþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþþýþþÿÿÿÿÿÿþÿÿÿþþýøóêâÜÖ××ÚÚÓÑÑÚßáåæêìðòõöùöö÷ùùù÷ø÷øõ÷øööôõõóòññðïððíîíìëéêæâßÝÛÍÁÐÞççñøòæãîõôïéêðñôõôóððìéæÝÇ´§’–š“ŠŠ‘’˜“‰ynlq‰Š›»ÎÜâåã×ÎÛêéçæÖÃÐצ¶ËÏÈÄÂËÔ·e5-.'"!e¬ÄÓÚáæééëîïíêéß¿~M9(    (5- !%   "(#$+%&##& "  + + +   + +  +  +       + +           +  +  +  +  + +   + +       +     ) +  + CTaWH?A@629=?EGGFDB?80+'% #DCGC4($*;>09DH8)   UºæìêÇv4 'lÍçå´S     Jf|’‘›šž ˜‘ˆd@  + 5`•¡—Ÿ±˜v~¢°©³ˆr†šÆ¼½ÒÔÍÕϸ¦¼¿ÍÖÑËÁµ©˜•’sXfw†‰‡ƒ|m„ŽŒ™š•¸ØãçèèëêîîèçîððóððîçÛÈÌÝàÛÜÊ®©±«ª«³¶¶¼À¼ÀÄÆÉÊÒ×ÚÛÞããæçêéëëëìïðïîíïòðïñïïîèæåâèæäáÚÐÏÛÜÚÛÝÝØÙäêñöøùúúùùúûûüüüýüþÿÿÿÿÿÿÿÿþþÿÿÿþþþþþþÿþÿÿÿþþýþþû÷òíìêêìëêïîïêèååêïîðïïññìîñòññççêêéèéêëêèéããâÛÛÛÝàååáá÷ÿÿþþþþÿÿÿÿÿÿÿþÿþþÿþþÿÿþÿþÿÿÿþþþÿÿÿÿþþþþÿþþýýúòåÞÞÜÝÜÓÒÔÙÜÞàáâæëîòôøø÷ôøøøøø÷õöô÷øøöööòñòòðððñðððïîíêëæãåÝÍÈÒÖáèïñìååóùùòììïòôõóòðîëêå×Á¬œš–—“Ž‘†umhw‡Œ ÀÓàääàÒÏáéåçàÒÈÙÞϵ¶ÌÌÄ»¿ÐÔ­U+!&"!&`¥ÀÐØßççèììíìêéݼvQ?,  +  +   %;*  5+% 8   #'./)+!%&#     +  +  + +      +   + +    + +   +  +  + +    + +  + + + + + +   + + +  + + )?   +@S\WBD>=442>JED>DDIB0,)/3 2EHE0$"0CFE=FKD/  + + SµáêçÅw) %qÎâà²U$  Fd|›š›˜™ ™–†oC  +!+5_¤›±¬—‰–¦šžˆ|™¯ÑɺÍÕÊÖÔ¾ª¸ÁÎÖÑÍ»ªš“ƒjag††…‘”Œˆ~jpœ˜’˜¡›¬ÓßãèçêìîîëìðñòóñòñëäÏÃÕÜÝÚ¾¬¥­«­¯µ¼½¼¿ÂÃÅÌÍÐÕÚÜÝßäâæèéëìêìíîðñïðïïïððïîêäååæåääáÜÔÑÛÜÜÛÚÜÜäîôøùúûûüûùøøúýýþþþÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿþýýûöñîëêêêêìïðïïïëêèçëïïóôóóòíðôöõñîëëêèëëìîîíëèèèåáÜÚÖÔÓÖÛóýþþÿÿþþÿÿÿþÿÿþÿÿÿÿþÿÿÿþÿÿÿþÿÿþýýÿÿÿÿÿÿþÿÿþþýþüóéãàÝÚÙÖÕÙÜÜßßáãçìòôõõõö÷÷ø÷÷÷öõ÷õõ÷÷öôõòóóñòñòððñðïïíééèèÞÎÍÓÎÛçïîèàæôùú÷îíðñõòòñðîêêåÖº¬ž–’›˜““”˜‰„qnkƒ‰‘«ÇÚáããÚÑ×æéæèÝÑÑáæÙµÇÉ¿¼ÃÍÍ¡L'$RŸÁÏÙÝäçèêìíììèÚ¹yJ8!  +    +2(,* +   $-)*+0  ##(!$%    +' + + +  + +  +  +   +    + + +       + +    +  +  + + >F  + +  %AUXM=375*,2?>GFIDB>;21150% *KC3))2.@JH=>HIC@@>713=13"7A3./4,EID?@OLG>)    `¸ÕÜÖ²m' +‚ÕÛÈ l- +   M`|—˜™š›Ÿžš—ŠlE   "78@DsŸ™¢¶»¯‹x’™œš ºÓÝÜÊÂÓÓÌÖѵ¥±ÅÓÖÓÊÁ·¯ ’”sgkx……ŽŒ†…}vjœœž¡š¼ØâåæêëîíëïðñôóööôðêÙÆÍÚÙÊ·±«´º¸»ÀÆÃÇËËÌÉÐÔ×ÖÙÜÞâãäççéêëëîïïïðñðîïîîîéåãáãäåååãäàØÓÜÞßàèîó÷úúúúýüúùùûþþþÿÿÿÿþþþÿþÿÿÿÿÿÿþÿþÿÿÿþÿÿþþýþþüøóïíçêèëíðððòòðòïïëêêíîòôø÷ù÷ñðñõøùø÷ôñìêëíîïòòóòïïíêèâÞßÚØÕÙæòúüþÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿþýûûýþÿÿÿþÿÿþÿÿþýüüòëåßÛÙÜÜÝÜÜÚØÝÝåìðñóõ÷÷÷õ÷øøùøøø÷øöôôóõôõõôðññððððîíëëèÙÍÑÌ¿½ÖìéáäïùûûùôîïóóòððïëçåÜÇ·¦‰”“–‘’–Ž…yeer„•£»ÎÝääßÑÎãêçéâÔÐâìëçÚÍɽµª¶Åº?=,7!B+&!-B’¼ËØÞäççéëëêëèØ´rO: +     #  +)"#$    +!!$%&+""!($# ! (!$$#$! ("  + + (          +  + >‡ + + +  + + +  +  + + + +  +   +  + + +       + + 1KZ^Q<52(,+,@=BKFFLFA1-47<:-"4;*,.+GPGHKGPMB8$  +  +!mºÑÙÈ£U  +_¸Ç¶šx0  Nb{”–ž¡ŸŸž–‘‹pJ#  + *=A:Ah—Ÿž°·©‚r“œ²·½Õßà×ÀÌ×ËÑϾ¦«ÀÕÔÔ͸±¥–‘wm^yy…‡†ˆ€|{n}¤£—ŸŸ“¯ÑÝâæêíïîëîñòóñó÷õòíáÌÅØØôµµ´ºÀÀÅÈÄÉËËÑÒÒÖÚÙÙÛÝâæèææêëëíïïïñññîïïìêççäâàÜãåããäâáÜÖÜâæêòùùúùùûúûúùúýþþþÿÿÿÿÿþÿþþÿþþþþÿÿÿþþþÿÿÿÿÿýüûúôðìíêëèéìîïñóóõôóòðìêéìñðôöøøø÷ôðò÷ùùøùøñîëëêëñòóôõôôñïíéåãÞÛÜÙÚàìóúüÿÿÿþþþþþÿÿÿÿÿÿþÿÿþþÿþÿÿþþýýþþÿÿÿÿþÿÿþÿþÿþÿþý÷îåáßÞàÞÝÜÕÊÏ×àéìðññó÷ö÷ø÷øøùøøööööóöõóóôòóóòðïðïïïììçÕÌÓͽµÌéëæêôùûüü÷ïíðóñññìêçäÖ½¯£Ž‚•““”‘”’’€jdj‚’’›§¾Ñáåâ×ÇØæéççàÓÖæîîèàÝÓ¿¨±½¤f0'& +B¶ÈÖßáæçéëêêêç×°lL8    +$  (5'#  +  + + $%'-)*($/$ $ !(!"!     + + +  @   +;     + +   + + + +  +     + + +   +  + +      + %N^aYA24)$)(@BEEHHGLC6527D@1. ,&%#/;MB?QGGHF:!  +  + + $}·ÉÖÇŸS ;…¨ªš‚E )Qhz‘œš žŸ¡ ™Šv@$  29C=5\›ž ¬¶¤Š|Œ“©½ÁÈÚááÝÃÅÕÎÍÓŬªºÏÖÕÍù®¦š“‡m]k{‚‹Œ„„~{‡¥¦ž  ’˜ÄÞãæéëïïìíïñðòôôôôïæÕÊØ×¼°¶½«µÂÂÆËËËÍÏÒÖÔ×ØÙÙÞßáæééèêìììîïðððñîîíëçãââÜÕÒáéçäãæããàáèïöúúúúúùøùøýüýþþÿÿÿÿÿþþÿÿÿÿþÿÿþþÿÿÿÿÿÿþþÿþýûòðíêéêêêëëíðððòõõõõöóðîêêìïô÷øùøøøõðñøøùùøùóðîêéëðóöõö÷÷óóòîëèäãâÝÚØÞãêòùýþýþþÿÿÿÿþÿÿþÿÿÿÿþÿþÿÿÿþþÿÿÿþÿÿÿþþÿÿÿÿÿÿÿþýþúóìæãâäßÝÔÇÈÍÚâèííñôöõ÷ø÷øøøøøõõôöõõóóôóñôòòðððððïïíå×Ó×ǹµÀåîîðøûüüüùñíðòòðïéèçÞ̳§Ž‹“–”Ž“•Œ‚ghkƒ’™¬ÁÚäåÞÓÏÜëèçæÚÎÜêîðìåÞÖƱ¦´°”Y-)*%7†¶ÉÖÜâåæééëêèäÒªiM* + +  + )3+   %!")-!'%%'*%#$""#)            J  + + + + +   + + +  & + +   + +  + + +   +        &E`\PD=8.$17GGCIGKQD9148A29%0>CEIMFKOIA74:AIHAG0"%2DJLJ@BMC=,  +! +.x¥³ÀÁœV$cš¬¤—X    Nd|šœ ¤ŸŸž”•‘kH% + ::4F=Kˆžž¬ª™£¶©¦¡³ÀÊØàäåÔ¶ÉØÈÈÕŪ­ÁÎ×Ô̾·« œ“{fZn’““Œ…|ƒ…šº¬™ž‹ŸÔÝãèëìêçãêïðïñóõõñëååßÊ·°³³µ²ÄËËÑÑÒÕ×ÙÚÛÛÜÛÜââçæçéêìîíïîðððïîîêéåâáÜÕÌÈÐÜæçêêêëîðõùûüûûùöøúýþþþÿÿÿÿÿþÿþÿþþÿÿþÿÿÿÿÿþÿÿÿþÿÿþþþüöìåçèçèëìïðòòòòõ÷÷÷øù÷ôóïîíëíñ÷øøøõõóñóö÷ùùùúõïêëìíðõ÷øøøùù÷÷õñðîéëéåãáßÜÜáãëóûýýýþþÿþÿÿþÿÿþÿþÿÿÿþþýþþÿÿÿÿþÿÿþþþÿÿÿÿÿÿÿýþýùîêååâÚÑÉÅÇÎ×àæíðóôõùö÷÷÷õóõöôñôóññóòñòððññðïíëëéÜÔ×Ѿ²¯¼äõõ÷úüüûûøñíìîðïëêçãÔÀ¯¢š“”‘Ž’‰xdhw™©¿ÓàåáÚÄÓäæçêÞÎÙéíïðìáÚÎËÉÂÁ¡g3'",-2u§ÇÓÜââæééèéêäÏž[?!  +   */*""  %%%"##46'(*,-(!(!"! !-%,*  +  % + +   +   +  08  +    + +! +    +      +      + + + +  +  + + +z?  + )IY[Q>60*)*/49DHIHNKE:89?IGHEI@' 0''FTJLIGJKB5  &#2w¥ª¬§Y   bŸ­©e! +    #Pdƒ¡¢¥¥£¡š‹h? #IG=C@Ns›£«®¾±¤™¥²·ÎÞâäÞÁÁÒÐÇÓе«»ÉÓÔÍû¬˜‘ƒi_iˆ‘”ˆ„Š”³³—’—’˜ÁÙÞéêëìèåêìììëèðóòìééÜǽ³¯¼½»ÊÐÏÓÖÕÙÛÚÜÝÜÝÞàáãççèêêëîðïïððððîëéåáàÛÕÒÓÒÒÜæèêëëîòøýûûúúùùúüýÿÿþÿÿþÿþÿÿÿÿþÿþÿÿþÿÿÿÿÿþÿþþþþýûùõðëççæêêëðñòòôôööõùùùùùù÷ñïïííñó÷ö÷õóñðíïóòöùøúôðíëìîòöùøùùúùøùøöôóññìëéèåäàÞáâäéñöûýýþþÿÿÿþþÿÿÿþþþÿýþÿþÿþÿÿÿÿÿÿþÿÿÿÿÿþÿÿþþþüøïëèâÚÓÑÐÌÉÍÙÞçìñòôö÷öõóôóóóôõôòòóòññððññððïîëëãÓÎÖ;¶´Åêøùùúûú÷öøóíìíïìêèçÞË·©¡–˜•“‰‰‡€nad~‘• ±ÃÕàâÞÏÉÜéëæçØÐàëîíìäÛÔÉÂÂĺŠS85(,8+"*e¥¾ÒÝàâäåçççæâÌ“UC"    "  !.,#     !#$"#-/&'-+$+' !+$"  +)0+   +       + +   + + +  + + + +7       +  +  +  +   + + + +  + +  + +            + +   )BNZQ<:0/+$/0;HGLWWKIA:BINMNNUH8-"-/1MSIHHBHB?,  % )$  +KŒ¡ –…wC  +V›¬®œo)  )Uc†¡Ÿ§¢¢¢¡ž™€Y?  ,SNGEAHZŒ ¦¸¨°Â¯ ž¨ ¼×ÞâáÒºÆÑËÑÕï´ÃÒØÓËÀµ©›–Žt\_z‘—™’‹‰ŒŽž²›š™”¨ÐßèèéêãäééèêâÖåòðìëçÖÆƺ°¿ÃÀÄÐÔÚÚØÚÛÙÜÝÜßãäãäèèêìëëííìðððïïîéäáßÖÊÐÚÞÛÖØçéëìíóøùûúùùûýýýÿÿÿÿÿþÿÿÿþþÿÿþÿþþÿÿÿÿÿÿÿÿýüþÿüúôîíëçèèêêêîïñòôôõöùùúøúúúùùøôîëìïóóóôñðìèçæèééîô÷õòïðëèíóùøøùùúùùøùø÷ø÷÷òïíííêèäãâàÝÜâåíöüþþÿþþþÿÿÿýÿÿþýþþþÿÿÿÿÿþÿÿÿÿÿÿþþþýþÿþþþüõíèãÚ×ÖÓ×ÍÃÇÒÝäëðñôõôòóõóóôóôðóôñññðððîîñðïëêç×ÇÍÑŹ´¹ÖðöúùùúøòïõôðîîîëççåÙ¿­¥œ•˜¢’Œ‘“‡ƒ‚rj`s’š¦»ËÛàÜ×ÆÒåêèëäÔÙæëæââÛÑÍÄ¿ÆÆ«kB>+:AVC(!(R ÃÒÜÝãâáäåèçßÊŒWB  + )" '-3( +    #$0$&%!#!+**&)$$*!%*--   + (/$   +   + +      +       + + + + +  +  +    +        +     +    +     + +     +    2GYTI6322*,797BJOSSND:DFKONLVMJ<0"-3&2HIGGAC@C1$  !%" j–•‚l; B«°žn1 "MfŸ¢£ž ¤žž˜‚V9 + 1V\NIMENw¢£´§´Æ·¡Œ ¤™³ËÕÞß×¼¾ÕÒÌØ̶¯¼ËÖÔÊƽ±Ÿ›~``q••œ•ŠƒŒŒ“±£—¡›ÆÜäçêæÝÜáççæÞÏßïññíæÜÍŹ²¹ÁþÐÔÔÚÚÚÜÛÛÛáâäâäçççêéëíéëîîððîìëæÞÝØÎÇÒÜÞÝÚÜäëìðõøù÷÷øüýýþþýÿþþÿÿÿÿÿÿÿÿÿÿÿÿþüþÿýþÿýýÿýùýùóìêéèéèêêêììïðñòôö÷÷ùùùøùúùùùøôïìíïîðñòòíéééçèêèìñóòïîíìéíô÷÷øúùùøøùùøùøöøôõòñïîîéèèäáÜÙÙÚãíôûýþýÿþþÿþÿþþÿÿÿÿÿÿÿÿÿþÿÿÿÿþÿÿþþþýýüýþûõðïêßÖÔ×ÔȺ½ÅÕÞäëïóðñôõõôôõóóññññòððñïîððïíëèâÑÇËɼ¸²ÄàöùùùúøòìêòõñïïìéåçåÓ¹ª¥—‘–£›ŒŒ‡‡Œ‰~njl‚Š–Ÿ°ÄÑÜÞÛÏÄØçêêìßÐáéèàÖÚÖÏ;¹Æ¼—c<55:QqY- %R—»ÏÚààáãääåå݉R:$ +  2! "72+%  + ()%$#$)/1$,*#"'#"!&/.% + #%$         +  + +  +     +       +      + +  +  + + +  +  + +     + +  + +  + +   +   +  + +  +  +   0GJSK;35)(,4:BJNLVWUNC@HEUIKVVK=6.,-/2#;Q>CFECC5(  )%!  .˜˜’„xM 0†¯°¥m/   +  + + +D\˜£¢š£ Ÿ–‚P8 4\cOJLEHl—£¯¦¯Â³Œž¦›­»Ã×ßÜȸÎÖÍÔÖ½ª¼ÇÑ×ËÆ¿´¡¢œŽn^h|‡—Œ”‰Š‡§¤‘¡š”´ØäæèäÚÖØÜâåÙÊÖéññíèÞÒÇ»°¶ÀÁ¿ÍÓÕÙÛÙÛÛÝÞâääåçèéêçéêëéíìîïîìëçßÛÙÎÆÇÔÜäàÚÜæêðõõöö÷ûýþÿÿþþþþþÿÿþÿÿÿÿÿÿÿÿÿÿþýþþþýÿþþýüùôìéçèçêééêêìîðòòóóöøùøùùùúúø÷öööôñïîìììðññðíííééìëîððïêçéëìïòóóòõôôøøùùùøùø÷÷øõòòñðñïëêæßÜÝÖÔÜãëöüýýýýþþÿÿÿÿÿÿÿÿÿÿþÿþÿÿþþÿÿþÿþþþþýýý÷ò÷øóéÜÕØÓÅ¿ÀÀÉÖßäëñòòôôòóôõóôôðñññððïïíïïíîíèß̽µ¹µÆéùùùùúõìåäð÷òðíëééæä϶¢ž•Ž˜¢™ŽˆŒ‹‹Žunjw‡“¢´ËÖÝÞÖÈÉàèéìêÚÒäëèÜÐÔÑÈÌÀ»Ç±„WC94?FCBA4  +%1/& ;œš–Šžh +¯² q2 + #N]ƒ›œ©¢ § Ÿ˜†c? 4hkYGOLIY‡¬­›Œ«°œ‡¥˜±¸µÉÝáÓ¸ÇØÐÐÕÇ©²ÄÏÕÑÈÁ´¡›ž”Zdp†‘‘Œ…‚€…—¥’’—ˆ¢ÖãçèåÜÚÕÓßàÓÊÔâïñíçßÐǽ²µ¼ÂÄÆÐØÙÚÜÜÞßáãååçæèéêèêéëêîìëëíëåâÝÕÎÅÄÆÏÞåáÛÝèîóôòðóüÿÿþÿÿÿýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþýýýþü÷ñíèæçéééêêêìïðñïóôöõö÷øùùù÷÷ôóñðïññððïííêðòòñîïìæèíïñòðíèäæëíîïîðîíîðô÷øùùùùø÷øø÷öõôóñòñîìéçãÞÙÙÚÛâëòùþþýýþÿÿÿþÿÿÿÿÿÿÿÿþýÿþþÿþþÿÿÿþþþþùõúûùïãØÓÓ̼¼»ÅÓÞèìïñóóôóòòóóóòòòñððïïïìîíëéåÙÄ¿ºµµ¹¸Ðî÷÷óø÷ðçãâíùôðíëèêêãÊ·¤›“ ’ŽŒƒŠullƒŽ”«»ÊÙÝÜÐÃÐåéçêçÓÚåëéÝÎÍÒÊʽÀ½¡lHD7GYƒ€B&$Bˆ¹Ë×ÛáãâáäæâÚ¾vH;    +*( -0-"   !$ "#!)5-"-,*)" #$!#     + +   + +    &;<=02"#'0*.1#"#!               + +     +         +     +      1HUPOCA<966ACBGUT_^XTE@FJOLCHUWE??93643/FD;FE<42( "6;) \®¬›ž—©²x r¬°£8 + !I`€œŸ©¢£¤žž—‚m@!:mmdQNRFX€£¯˜Žªœ†Ÿ¨”°º´¿ÚáÚ¿ÔÔÑÖÏ´±¿ÌÑÑÍȺ¡œž”~e\g‡Œ‘Œƒ„|‡£›‘”••£ÈÝåçåÝÚ×ÚÝÜÏÉÒÞîñìçá×ÌÀ³±µÂ¿ÎÕ×ÛÜÜÜßâãáäèççéèêêêëíííìééçâÞÙÈÄÀÂÇÏßãàßãêðòôôóøýþÿþÿÿÿþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýþþþýùõñìèèçæèêëìíìíîððôôôôöùõøøùøöôòðñîêëíðñðîìëêîðððíïëåêïïñðòïèåæëîîëëééèèìñó÷úùùùøøøùúù÷öóôóóñðììæáÞÜÛØÖÙàêòöøúþÿÿþþÿÿÿÿýÿþÿÿþþþþþþÿÿÿÿÿþþþüûúýúôìÜÕÔÎÿ»»»Ê×áëíïñòóôññóòòòñðñðððîïëëëêéãÔÁ¸µ´´¶ÂÛòùöîòôïåâåíöõñìèèêêãÄ®¥œ™˜Ž‘†‰}ndk…ŒªÂÏÙÙÖÆ»×æêçëáÒÝêëæÜÐÐÑÎξ¿±‹VDD>Mf”¦„E&$>z´Æ×ÝßàáãâãáÚ¹{L3"  + + "0& +/0#"#   !$#,,0)$#,#',36.0*#!))      +     '(     +'665*&#/EJHE<4(21584*'$&"(+#!%$%         + +    + +    + +  + +  +        +    + +  +  + +   + +6RUQLKB<528CCDHRSY^ZXGFPIMJBJLNE=@=-<>8#7=DBFA;4* +  >8#)²²¡œ¯¾†  V¤®¤x2    Hjƒšœ£¥§¥Ÿž˜ŠmE Av|d]YMKPh–°«¦ ¡˜u±¢©³´¶ÒáÞϽÎ×ÏÔÒ»¬ºÆÍÓÐÆÁ®¥œ—qa[rŒ„…‚œ¨”‹–š¶×ãèäÜÝáåãÜÏÐÔÜìíëèäÝÎù¬±Á¼¶ÇÔÚÜÞÞÞßãâãåäæèèéêëëêêììééèãàÚÏÂÀÅÉÏ×ßàßæëðôùûûüûþÿÿþÿÿÿÿÿÿÿÿÿÿþþÿÿÿÿþÿÿþþýø÷øóíêæçèééëìíîïððñòñóóôô÷÷øùøøùùõõòððïîîèêïðìéèéêìíììðíééðñððïîêææêïíêìëêéêëîñöùùùùùùùùùùøøøøöööóòîëçæäáÜÙØØÙÝáæóýÿÿÿÿþÿÿÿþþþÿÿþýþþÿÿÿÿþþþþýýþýýüûõëãÛ×ÒÆÃÁ½º¿ÉØäéíðñòóòóòóñòññððððîëëêêéåÞѽµµ­¬´ÆßõöóëìðèÞàëîö÷ñìéèêéÙº¯¨™”—Ž’’ŽŒ‰wf\lƒ‘•ž±ÊØÙÒȾÆÝèèèêÜÖäëéäÝÔÐÎÒÕƾ¥tOC=GL€¨±ŒX/ &7v¯ÆÔÜÝÜÞàááàÚ¹mL5 + +  + +&'  */+"  +  + "#,,'&!$,-(%,,.-.0--%#(   +   +  1""*54# 2:2.(':BAE>#+>5-+:>=BDTWR\[UGEGPTOPNFLG28?1:>2)'(#*79AGC85.  6E: (ƒ²®££§¯º“/ +Kž¯¤|4   Jgš¢§©¢ ž™–…mJ + H}vh_[SLKR}­´»¸Ÿ’r›¹²¨¥§²ÎàßÓÁÅÕÑÑÖÄ°°¿ÊÏÐÊÄ·ª˜•~[Sg…ˆ’’‡‚{€x•«—Œ—œ¨ÊßåãÛàèèâ×Î×ÕÚçêèçæßÑȽ®±½½¶ÅÐØÛÚÝÝßããäæèçééééêêêéëëèæåâÞÓÅ¿ÈÌÌÖÝäåéîöùûýþþýýþÿÿÿÿÿÿÿÿýýÿÿÿÿÿÿÿÿÿÿþÿÿþúðèççäæäæçêêîîðððññôóôóô÷öøø÷ùøùùøùôïïòôôòïîñòðìééèåéêìëìåèïïîíììêçæíîìëïîíïðíëðöøøøùùúùúùùù÷ùùø÷ø÷õòñíêéäãßÛØÔÖÖØä÷üþÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿÿÿÿÿÿþþþüùîèãÙÖÑÉÅÀ¾¸¼ÌÜäêìðòôññóòôðòððííîìëêêæãÞØǶµ®ª­´ÈåôôðæèëâÜäíî÷öóëèééåÏ´­Ÿ•’™ŽŽ“ŒŠ~skes‰™œ ¸ÎÚÞѽ¹ÍåèèèãÕÕçëèãÛÓÊÑÛÙ˸–mM<;Adšµ¶™]+"",o¬ÆÒÚÜÝÜßáåßÚµlR< + +    *% $49)"%  + $./+ &.3*-.))'-'$ !$ '%!&  +    $(63(16537:DB@9/-$ 7<&U”¨Ÿ¦³´¼œ;=”®©9 "  + Mhz–ž¤¬¢¢¢Žƒh@ B|r\\XOQIY˜·ÄÉ«q«¶ª”›­ÍßÞ׿ÎÕÏÕ϶«¹ÆÎÑÏǽ´Ÿ˜zdW^’Œ’ŽtŒªš–“š•œ¿ÙååÝßççãÕÏÛÙÖÜàäæèâ×Ê¿¸´º¼ÂÁÎ×ØÙÛÛÝßâãäæææééèêééëëéæãßß×ÈÀÉÏÒÕÝáçìñúûýýþþþýþýþþýþÿÿÿÿþþþÿþÿÿþþýýýþþÿúñèâààäçæêêîîññññòòõöõôöööøøøøøøúùùøóíîïóõöôòðòñîèêêçææèéèàãëíìêêèêéëïïîíðïñòðîìðõ÷øùúùùùúøùøùùøøøùøøõóòïëêéåáßÖÙÖÔ×ãòúýÿþþÿÿÿÿÿþþÿÿþÿþþþþÿÿÿþÿþÿÿþþýýùôîéàÜÑÏÌƽ¼ÂÏÛæêîïñññòñòðñòðïîìéééçãßÙÏ¿¬®©§¯¶ÉçõòéÝàëãßéðòõ÷òíéêéã̳¥£“•’‰‹‘’Œ†zmazŽ˜›«ÁÔÜÝÒ»¹ÖéææçÞÑÛêìæÝÕÊÆÔÙÒÈ°{MPC;N¯Á½™^3'/vªÇÓ×ÛÝÛáâáãØ®pW;   +%*6,"$! + +  ##(7.%!$/*++%$%!'!%(!  +     + $*"(=JUPPC=FNQ\K;AT`a]U>7G_^`^L;>=9@@?3(+<8+1>=@@>5-$ +#94  &T‹ ¬¼ÃÄ¡C  -±¢ŠA    + Kj{–ž¡¦¦¤¤›‘ze@ +Hƒ‰‚gYLKKJSˆ´Èѳ–y‘¯µ•Ž£ÁÙÝÚÉÀÆÔÒÒÔ½­°¿ÉÌÎÌ¿¶¨Ÿ”†p_ew‘“Š‰‚x{¡£™’–œ™¯ÑãäÛÙÛÝÞÍÍÛÙÒÔÙÞäèåÚÉø²³ÆÄÀÐØ×ØØ×Üßããäæåéêêêééêêèåâáß×ÊÅÉÑÖÛâæíòøûþþþþþÿþÿþÿÿÿÿÿÿþþÿþýþÿÿÿÿÿþþþýýüöïèâàæççééìîîñòóóôôöö÷ööööö÷øøùùøùùù÷õðìîòõöôòññòòìêêçäæèèäßßèéçäçèéëîñòñíîññïñðíðõõõøùúùúûúùùùùùúùùùøöõóòñðíêçäâÝÞ×ØÛáêðöûýÿÿþÿÿÿþÿÿÿÿÿþþÿÿÿþÿÿÿþÿÿþþýýýûøôîåÞÒÈÂÀ¼ÈÔÞçìíîñðñññòðïðîìëêèæåßÛÒÆ»²«§¤«·ÌæñïáÐÛëæäêððô÷ðëéêé߬¤žš›™‘Š‹‘–Œyhcjˆ‘’ªºÉØßàÕ»ÁàèæèçÙÐãììá×ÎÅÍÒÔÍ¿ lFFLGa¼Çìd1'#6|­ÅÐÙÛÜßáßáàØ®mT="   $4*$ ,2+$&!# + + +    #$$&+8/'!*-*+&$#""*$&(%    + +  +  !($$<0%-?N\\YI9;NW_ZOEVhgi_M?GWfh\YNHV]Zad7    !9KS[]`W>!+@JPTG?56643<84.'*+$" '%1,$  + +   #  +   + +  +  + +  +  + +    + "%#" $*1+ " #! ##&$!$ '  +  3DMQD>943-8CILJPKYW[XHIBMKLHGG?4@<,   ")9;"M„©¾ÅÅ£? 'r­§ŒK +   Aax›£ §ª§£˜š‚e@! Q’Š|pOGks“²ËÑ·²«œŠš¸®– ¿ØÞÝÚÿÐÓÎÕ˵ª¶¿ÎÓÍ¿º«ŸŸƒdao†‹‘‰„„z”´¤˜— œ¥ÄáßÙÏÂÏ×ÄÃÙØÓÒ×ØßæêâÏÈ¿°°ÆÅÂÌÒÕÕÖ×ÚáääæèèêêëêêêéçäâàÛÒÇÀÈÎÒÚåîõûþþýþÿÿþþÿÿþþþÿÿÿÿýýþþÿýþþÿÿÿþÿýýûôîèäââæëééëìðñòòóöôöøù÷ø÷øùøøøùøùúú÷õõôôóñðñòòòððòóóòïëçæéêéäÝàéëêæåéìïòôõñðëïòòððîòññïòö÷ùúùúùùùùøúûùûúúøõööóððíéèæåàáàÝÜÜãçðõüþþýÿÿÿÿÿÿÿÿÿÿþÿþþÿÿÿÿÿþýýüýýýüûùíßÏÆÁ½¶ÃÔÜåéííîïïññññïìëêéèâÝÚÙÎÁµ²¥™œ©¶ÑèîåÕÃÑèéêððïðòïêèêåÒ·¥¡–•¤›‰Ž’‰}qdeoˆ‘›«ÄÑÞáÝÓÄÏâæäëßÐÔçïëæÞÙÖȱÊ¿­cJIP|¶ÇÉƪi7*' B~±ÁÏÙØÙÜáÝÞÞרkM< +&3-.2+%'!    ! *#&(83,+ #+.1*(-!"!'$        +    +2?@=5>W]bdY89KdaaXMRbjflWIGVcqjfWPS\gd^J  +  + + 1AH[\]^H2"97CMPB<850'95/,+)(!&#(*%%!!    +)       + +   + +  +  + +  + + + %*#!"$(!!  %00)*&$%' % (!#"! #' 4  +   >38<9>=G7(7CL>&'>F>9<+&-# 2;1 *]·ÃÀ£> d¨ªŒL   Idw—›¢§¨¦Ÿ˜—‚j:# U–Œ€`h™©Ÿž³ÊÓ¸¯»µ˜­­£¥»ÕßÞßξÉÕÎÔϹª²½ÊÓÎú¯¥¦ nZgŒ‰‚…‰„“®¬–ž§Ÿ¸ÛÜÕÊÁÐÑÁ¼ÒÙÔÛÛ×ÝåêæÖÍÅ·¹ÆÎÂÁÎÏÔÙØÚÜáâååæèêéèëèéçáâÜÖȽ¿ÍÒÔâêõüýýþþþþþþÿÿþÿþýþþþþýþýÿÿþþþþþÿÿþüõðêæäääåçëëìíîñóóôõöõ÷øõøùù÷ùøøøùúùúøùõóòòôòðîïïïìîóñóóñëëêéêçåßßåêêëêêîðôõöóîèíðïíìíðïðïðôöøùúùúûúùúùùúüûùùøõöôóóòðíêéèçåãßÞÝÞáâêöüýþþÿÿÿÿÿÿþÿþÿÿþÿþÿÿÿÿþýýþýýýüüøîàÓÍĶ¸ÇÔÞçèììîïïïïïîëêèçåâÝÛØÐÁ°®ª£ ­½×ççÜ̽Òçééîîìíñíêëêàʵ¢™”¤™Šˆ‹…‰‡l`c€‘ž³ÇÕÜáÝϾÑââåèÝÌ×êîìæÝßÛʱÃÀÅƼ †ub–ÂÌÏ̯l0&! E³¿ÐÕØÛÝßàÝÞÕ¨eT6    + "3* --$ %$#   + $$+/(&*..- $/-+('**"-$ + + +   + +   +  +  -=@6/8Shii_?>*"(& %-1/,)      +  +   +  +       +    + + +     '+&$%)-#")*-11*%$-("%$#!$"!%&!".)%  (  +     ?PTNK510(/9;HOQNSQQWROIDPLKLEEB=0====D=(*@JK4,??;510(! '37 1€­¾¸‘3 Q£©N     G[v“˜¡©¦¥ œ•‰mD  U˜””Š{{Ÿ¯©¢´ÌÔ½¯·°™Žž¥¥œ®ÎÝàÞØÂÀÓÓÓÑŶ«¸ÄÐÐË¿³ª “b`o‰‘‹…‡ƒ„ˆž­›‘ž ¬ÓÞÑÈÄÌ;½ÊÓØßßÚÝäêèÔÊƹ¼Æ̼ËËÏÖÖØÞÞáåæèèéçèèèçæäàØËÀÃÅÒÛãíõüýþýÿþÿýþÿÿþÿÿÿþýýýþÿþýýÿýýþýýþýøñéççåçèçæééìîíòóñôõùøøøøù÷øùùøøøúøúüùùù÷óñîïðîîðîëèëòñðïîìëíìîìéããéìíëíëêîðóôòìèëííëëëêëîðóó÷ùùúùûýúúúúûúùúûù÷øøöõôóóòïìëìêèåããàÚÞÞåîøüýÿýÿþÿþýþÿÿÿþÿþþÿÿÿÿþþþýýþýýüùñáÙËÁ¼ÁÊÙâæéêíîïïïîìêêèçââÛÛÜÖƶªœŸ£±¾ÙääÛÎÅÕêêèèçèçïðëëéÙÁ¦“˜™¦¥–‡ŽŒŠˆ‹xpgh‚–Ÿ¢¹ÎÖÞÝÙȾÏÝâçãÖÌÝêîéßÛØÖƸÄÌËÐÈÎÓ²‘©ËÐÒ˸n1)7…±ÁÌÕÙÚÛÚÜÝÞסbS)  +  + + + 2+!*($('#  +      (#)&-%(*,,0+'1,+/"%.+0 * +  +   + + + );B<):Fgg_aC5L`[g]FIdebb`YOVkhee_[Zgikg[A  + +  + + + +"5  + .7ITW[VH;/EMWMGLA6967=:?01%&&)(//0)#$  +     + + + +   +     + + + +       +  + + + + +   + $0-*%!'&! )*00*-+"&+'%$(()%"$(& ++$'&"$# #   +  + + =RTSE:2&*17;IKJW\VVWXKEJQWHHJNE=;@><<53/+7@D;, 3E8806(  +)=3U£·³†( L¥©”U  Mcy™¢§¥£¤Ÿ™†kI" T——‘•Ž‰™¶¨¢´ÈÕ»ª¨§ª–””—‰ÃÝßßÜ˼ÎÓÍÔ̸¨¯¼ËÐȹ°£›š„p\f‡“—Žˆ‚Š„—®¢•–£¢ÊÝÕÃÁÊʺ¹ÄÒÙãÞÜÜáèèÙÍɸºÅȺ´ÄÉÎÒÔÚÜßáäååéèæçæææãáÚÔÊÆÇÍÚåíõýýýÿýþÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿþþÿþþþýûöðêæäæãèëéêêëìíïòô÷ôöøùøùùøùøøøøøøøùùøúùûùøôïëííííðîêèæëëìêêêëððððìçèïïñðîêèééëëìéèëîëéêééèêîñõöùùûùúùúúúúúûùùùøúùøùù÷öõóóðîîíììêèåãáÝßáæîõûþýýþÿÿþÿÿÿþþÿþþþÿþþþþÿÿÿýýüüúñãÖÆÁÄÄÊÙäçêëëíîíïíëèèåäáÜÜÜÕ˹¡š¢§¬ÀÚáÞÕÏËÚëëéåßßäìîíëãϳŸ™ž ¦Ÿ—…‡…ŒŽŒˆuhky‹• ´¿ÎÚÞÚÔÄÍÖÝãæßÌÑãíìæÝÕÔÎÄ¿ÌÖÊÍÒÜáÍ·»ÊÒÖÏ´x?%# 7ƒ³ÁÌÓØØÙÚÚÜÜÕ dP)     %3(%'(#'("%8*  $)%'(,&+)-'$+,'! +&-2 %'   + +          + ! ->EI82>R]d^VHGR_c\TTZ_amqgRUdjidfh`bcf\aF' +       +  + &9EKSY[WG($COUNPF<:5@B8344*&'(*'*06/&"  +   +    + +  + + +  +     +   + +  *,.*&"$# !!).54,.+%+,-.%#-+$%$'#$"..(',"&# !   +  + + +  &=ILPH8-"%,4=HIHSW`\XPD?IIUMBFIB;>EC;>98-/9FKD6.+;689:0  + + + &6>) (w¬°„# 9›¯šT " Ney‘¡¤£ Ÿ–„nH V”š˜œ’–“¯© ±Ëй¥¨¯œ–˜¢‰”º×ÞÞÞÔ¿ÄÒÊÓÒð¬·ÈÑÉý´­£˜tfcv‹’—’ŒŠˆ…Œ¡ª –˜¤œ¾ØÑÄÃÍù¯¾ÏÚáßÛÚàçêßÐËÀ¯·¾·ªºÅÌÍÒÖÚÝáãäåæçåæåâãâÝÓÔÔÑÍ×âíõýýýþÿþþÿÿÿþÿÿÿþþþÿÿÿþÿÿþÿÿþýýüùñêææåææçëëìïìíîððóö÷÷öøùùùúøùøùøøøøøùùøùúùøõðïììïïïñðíéåäæéçæêíïðòðîéèîïðñìëçæäßßããäíîìééééêèëðôõùùûùúúùùùùùüüüùùøúùùøøù÷öõôòññîîìíêêçåáÛÜàæëôûþþýþþþÿÿþÿÿÿþüýýýýþÿÿþýýýüüùðâÒÉÎÌÇÐÛäæçëííîîíëêèåâßÝÜÜÖ̽ž›› ­ÈÜÞ×ÏÍÇÖëëêéàÜÝçëìëÜÅ«¡œž¨¢š’„‰‡Š“’„xfj~Š’¤¸ÉÖÛÝØÍÅØÙ×àäÖÆØçìêãÞÚÍÅ·ÃÔÚÎÉÐÛãÚÊÅÏÑÓη|G&#! @‰³ÀÌÓØ××ÙÚÚÛÑž^H(    +%) "%''')-!";$  + 21-'("&%12&0?:-20)'$%"       + + +  + +""#:UJA2=[cmhePJVegdcZ\lnt|r^\fptvmmc_flhjU1         +  2KWYUa^I'/DGNVSB;=58;895-.)*..112-/*   +    +    +    +  +   +   +  +     +   /.0+$()* $&215112*'+,**$'02'/)(( *($,.*'$#%'  '2   +  AOIMN74(#-:=BJMT]\Y_KC;?MSUBLIC5AGC?@B8,5?FLN?;, 2:;661&  "#)<7  1|£~$*‘¯—Q  Cgu‡“Ÿ¦¤¢žœ™pK/  U”š£¢ž•Ž«­¤°ÈÒ»¢œ§±¨ ž¡•”¯ÏÚÜßÛÁ¹ÑÏÑ×з­²ÀÏÏÃÁº¬£Ÿ˜„kfq‡“œ’„~‚™«¥–“Ÿž²ÑÐÄÁ͸¯¸ÏÚßÝØ×ßæèÝÐÉ»ª¬±°¨¯½ÆËÐÓÚÝãåãããååæáÝáÝÖÖÙØÙØáêôüýýþÿþÿÿÿÿþþÿþÿýþÿÿÿÿþþÿýþþýüùòíçääåèéêëììîðïðïñóôôôøöøø÷ùùøø÷ùùøøùùúùøùøùôðïîïñòòñòðïëèæåæåæéììîíìëææéîëîìêæâáÛÖÝáçëîïëêêììëéìòô÷ùúûûúùùùùûüûúúúùùùùùø÷÷öø÷óóòñððñííëéäàßÜÝÛáëñùþýýüÿÿþÿÿÿþüûüýþþÿÿþþþýýüüøíÞÕÙØÑÊÕàäèêëìîðìêééåàßÞÜÜØÏñ ›œ°ÏÞÜÕÓÒÊØêêëëéäßåêìè×·¢¢œš«¨™ˆŠŒ‡{okoŽ—¬ÁÎÙÜÜÖÅÉÞÙ×ãßÐÉàêíêáÜ×õ¯Á×ÛÏÃÄÖäÛÑËÎÔÑ̺|9=´ÂÌÕ×ÙÙÛÚÙÜÑ”SE)  #   #!#(-&"",   +#%*&6))#%:<=14/-3/"&$"" +  +  +  +  &@NKF78^gnjcWFN`bhj__ppr||b\ep}zwudbrrroh?   + + + +       +&%?IW[ZkeL,-IOLPTED=G32CA7(+&%33+1275+- +  + +   +    + + +   + + + +   + +    + +  +#2)0*%-1($! !*3481,/-+40-&",62+.)'#!"#),(+-1!) %$!     + +  @RKVP7,##+:?BBKUbffaL9<=OTLIFA=??D?AFN=16CC=CIB5!1=:85, + + $/90 I{d ªQ  +  +A`tŒ’¡¢©¡ “nE +  X’¤¡¡§¦—‘­¯ž¬ÉÓ½¦¤©°«œ˜˜’®ÄÕÙáãʸÉÕÎ×ÕÀ«¬»ÈÍÇú²¥¡›fTrˆ—˜œ•‡€‡‘©¥›Ž™ ©ËÏ¿Äп²·ÄÓØßÛ×ÚâåçâÕʾª©­¡Ÿ«¾ÄËÑÒÚßßäãäâäââÞàßÑÌ×ÞÛßâéðúýýýþþÿÿÿÿÿÿÿÿÿþýÿÿÿþÿþýþýþüùòêççããåèêêíïïðòóóñòóóöõø÷øøøøùøøù÷øùøøùøùøøøøøóðððïññòñïïîìèãâààâãâãââáÞÛÜâââãâáÞÞÜÛ×ØÞæééìêëìììëêíñóóøùùùùùùúûûûûúúúùùùùùùùøøù÷÷÷öô÷óòñòððëååäàÞÜÚÞêöüþþþþþýþþþüûýýþÿÿÿÿÿþþýþýþùèÝÜÝÛÏÏÚäåçêêìîëêéæåâÜÚÚ×ÚÒȹªŸ™²ÓàÛÙÖØÔÜêìíìíêæéèëæѲš¡ ­”Œ‚‡ˆ‹rgiu‹œ´ÄÔÛÞÚÓÃÍâÝÚâÖÇÍåìíèßÔÍÀ§§ÄÑ×͸°ÐâÚÒÑÒÐÎÌ´q9>ˆ²ÃÐÕÙÙ×ØÛÚÚΉLG1 + +     +))"!!' * + +!!)! 05,'##(52+'-23%#)$/! &    + +   + + !$84D;>./+,&,'4204*   +   + +   + + +       +  + +  +  + +  +   + $)/++)'3.#!#! "$ # !"#595/22)/0<60-+/3,/-) !$-(%),,1+! #((!'      "AOTY_a^RC9==O\POI=533>?FIDA/1ABFJFNH1!$;:46*! +  "56$  FI +o¢‘N +"  +  Hau™ œ¢¥Ÿ“‰jH ]›¦£¦¥¯¥­­¢©Ç臘º¸¯Ÿš’…˜±ÂÒÞàá×»Á×ÎÓ×̬¨»ÃËÊÇÀµª¡™y_k„•––„~ˆ¤­¤–—¡žÃÏ¿ÃÍ»²ÄÎÔØÞÝÚÝâæãÝÔǺª¤¡œ »ÉËÍÕÖÙÞáããáããÞÛàâÝÔÑÙàãçéîôüýþþÿþÿÿÿþþþþÿÿþþÿÿÿþþþýþþúöìèãäæèæéììïñðòóôóôôôóóööùùù÷øùùù÷÷ö÷÷ùöö÷ø÷õõõ÷õòîïííîíëêççåãßÞÜÛÚÛÜÚÚÜÙØÐÓ×ÚÜÙÚÛÛÙÖÛÖÕÙÝáãçäæìèéçéìîðóõ÷øùùùùùúùúûûûùùùúùøùùøùùøùøù÷ù÷öööõòðîíéäãßÛÛÜâëôûýýýýýþýüüýþþþýÿÿÿþÿþýþþüôçáßÞÔÍØâãåéêêêêêçåãâÞÚØØÔÐÊĽ©¡¹×áÝÛÚ×Ùáêìðîíêêæéëá˧”• «§˜ŽŒ‹‡Ž…‚tmsŽ“¢¼ÌØÞàÚÎÉÚæàÜÜÍÅÓæîîéÞÑÅ·¦¶ÉÏÖ˲§ÃÔÑÌÒÎÒÑ̹{7 9~°ÃÎ×ÙÙÛÚÙÚÙÌŒYM- +   + */%""  + + +&(''!"/,("'!+./%&1#5%(/*0'($  +    +   +  +  + + %8GMQB>Ofpqtf^]fnrgkfequxrj_\l|}z€ueop~rq]2 +   +   )BOc]Wbb]9!$4GUXTXP@:;99;>>422))*.-%6,'     +  + +  +  +  +  + +  +   +       + )-,'+&(3," !$$!%#!,&+7=;2<546695.+..620-.% #-/((+*-) $%$%#      #ARNF;-02,/9>HTX\]^XLE>:BDECPT@,+=;7+#  +")8)   +!9 + e~E   CWnŠŽš›¢¢¡ž”ˆnC b™¢ª«¬µªŽ¨¯£«ÃиŸ ³¹·©•Š¤¶ÈÖÜÞÝÚĺÓÔÏ×Ó»©¶ÀÍÓÌĽ¯¤–‘„__z”“‰€‚‡š­¤–š¡ ¹ÌÃÆǽ¹ÈÒØ×ÝÝÜÜâÞÙÝÒÀµ¤žŸ¦ÁËÑÕÚØÙßääãÝÝàâáãäÞÓÐÝäæêïöûýýþüÿþþþÿÿýýþþþþþþþÿþþýûúõïéåæèçéëêíðïñðñôôõõôöøôòöøùùøøø÷ø÷øõõöö÷õõöôõôôóñðîëêçèççåääãáÞÛÚÖÕÖÕÔÏÓÒÑÌÌÊÒÑÑÓÖÓÒÏÐÒÓÕÕÙßàßßäââáááæçêíïóóõöøùúùùùûùùûøùúùúúùúùùùùøøùùùúù÷÷öôóïðìèæåáÝØÛÞêóùüþþþþüüýþþþþÿþÿÿþÿþþýýúòæáÞÕÎÔÝåäçæçëéèçäãáàÛÙÚÖÑËĹ²½×àáßÜÚÞáììððéêæçæçàÉž“œ±¬œŠ‹‹ˆˆxlnxˆ‘–§¼ÐÜàßØÈÄÜçßÛÔ¿ÂÜëïïêãÖŸª¼ÇÒÐŲ­ÀÁÂÅÇÍÓϼ>"  #<{±ÄËÓÕØÛØØÙÖˉPE$ +   + + +  13'# !    %%"$++&..(1'/( $')%")"!! +  +#  +  + +    9MNRF:H\mro\Y_pqpmbcxy€sxi`m€„ƒqfjtwtsgH +  +  +  .@JY[]ffb:!4EXZXSHA9:78CJ591.006.3-0,(*   + +  + +   +      +   + +  + +  +   +  + + !+71+*-4-!#%%%,+&+$3=<>824/3584/20110-*) %30-/',,'% $"""%! +  + + + +&DSQI@54/+23?FJRWVTUWJ8:  !_œ¢®¯¶»±£¯¥©À϶Š’¢µ­˜‰x¯ÈÕÝâÝÝÕ¹Ç×ÐÑÙȵ¯½ÊÕÏÊƹ¨›š’pej…‘“Œ‹ˆ„Ž¦ªž™Ÿ¡¨ÁÀÆƵ¾ÁÍÙÕÝàááâÞØÜÓ½ª›‘¥¸ÂÊÐØØÙàâãåäáßÞáãääâÙÔÝçèíøüþþþþýÿþþþþÿÿþýþÿÿÿþþþþúôîèæäåæèèêìïïñòòôñõ÷öøùøøøöô÷øø÷øøø÷÷õõöôôõôñòïðîìééæãäáÞÞßàãáááãàÝÚÒÎÑÒÑÐÅÁÀ¾¾Äž¿¾¼¿ÂÄÉÍÎÌËÓÚÝÝÝÜÝÛÙ×Ö×ÚÞÞãææëìíðôöööùùùøúúùùúùûúûùùùúùøøùùùùúøøö÷ôóòñîíèæàÚØÙÝàêóúüýûûýýÿþþÿþýþþÿþþþþýûóéÞ×ÐÖÝåèççæçææçäãáßàÚÙÙÕÍÉÃÁÀÉÚÜÛããáâåêìïðêäáãääÒ·¡’¦»­‰ŠˆŒ}spl{š³ÈÕÞâÜÓÄÊâãåÙÀ°ËåìððíèàÓÁ°­¿Á½®¥¬ÄÕŪ•š¹ÌϾ>&"@ƒ¯ÅËÑÔÔØÙ××ÕÅF?#  +    05*(#! )"$!#**%(+)&"'%&*$#*)'   +     + + + +  BPKNK?9UrqyudW\korm`^nzƒ}xh^h†‚nmrsuyqV3 +    9HY]YZ_ZN& 3CUXZTH@?;<<@?>30403<4549/(+$ +&   + +   +  +  + +          '*/0,)//*#!!#!%!(*#&'+.:@724407;83146814),' %34.+*4-)""+(&#$  + + + 3#(DLUNG81''8.8GKPX][`XJ78:JUONIECAB98.>EQPCDIMMD/%66''2- +$ H……[     D]w†”œ£Ÿœš˜‹q>b¦¨®¯·º¶š°§¬Áꋉ†£©›ˆ—¨ÄÖßãâÞßÁ¸ÒÕÎØн®³ÅÔÔÌü¶«ž›zle|’’ŽŠ†„‰« ’›˜™µ»Å´À½ËÚØââàããßÛÜÖ¿£Œ¬¼ÄÌÐ×ÚÚáâãäåàÝáããáâäÝØÜçîöúýþþýÿÿÿþýÿþþþþüýÿþþýýúóìåââââæéêìïðñóôôõ÷÷ùúùøøùùùøø÷öù÷öõööööóóòñòðêêèèæäáßÞÛÝÙÖÖÓÙâãâáááàÝÕÓÙØ×Ïƾº¾¾ÃÄÀ¾½º¹¸ÂÍÕÔÌÌÓÜÜÛÛÛÚÚÒËËÍÏÏÕ××Üààäçëìíòóõõøùùúùùúúøùùùùúúùúûùùùúùùùøøö÷õóñîêçåàÚÚÙÙÝéñôòùýüþýþÿÿþþüýþþýüþýúðâÙÓÙÚãèèççååäååäãâàÛØÚÖÑÌÇÅÇÍÙÙØåæãåçëëððëããßàÛɲŸ‘Ž«²Ÿ‘ˆ‡‰‹‘‹wonŽ’¨½ÍÙÝÞ×ÉÂØâÞÝÇ«¯ÕèìññïæÝØȼ±½·³ª°¼Ôßѵž‘²Ëʽ‡E%7°¾ÊÒÖ×ØÙÖÚÔÁƒOD$  + + +  *<-##$!   + + $$#!'31$*!--)%'4+(& )--&$  +         + + +   + 'DX\UQFEOpy€zse[_owjc`ct}wpaey†ŠŠ€|{puwvvh@ !!" #A67:12<925,(*"  +  + + +  +      + +   + +  +  +  + +   +   + $--1/+&),'!""#) $$"'*5@776;<;<675166-2-.1%'-320-0/('&'%$"$ + +   +  + +*>XPJF7/*'0<@GKPHT]_ZE?5=CSNROQAF<=;:6*)AKFEFJQKLE>.1*"(GG8* $" +*{™w6 VGPPG75746BF?/'(6B;735-*     + + + + + + +     + + +      + +   + +       +  +  %42',%%.2&!$ "&"("(,),7:<88>76;@=92;7445/1+!,625545*%(&%,*$%#    +  +  %ELCE;42)(7CHKNRIZcVEA;DKHPUREEE>FB5,!$BJMGAFJXVGI/ )BRG:- +  +  e‘O  Pff„“‘—š›—|\> #r¨±·ºÁ¾¾¤™¯­¨»Ë¾šš©—‘Ÿ«¹¹±¾×âäääãÞÒ­ ½ÔÔÕØɱ¶ÅÓÕÌÍÀ·¯¡ Ž}jq‹’”‹‰…Š‘£ —¡²½®¬ÂÑßãÙãéìííéÜÙØʵ«³¹¼¼ÄÐÒÔÙÚÚààÙÛßàßÙàçëìíîñøýþþýþþýýüþýýþþýýûòãØÙÜÝÜßäèéììîïñóóõ÷ù÷ùøøùúùúùùøùùø÷ùùõôóñðìêéæãâàÝÚÖÔÐÉÆÊÊÆÊÈÇÎØÝÝÚÚÝâçíîïðñïçäåäãâáÜÛÙÛÖÑÏÔ××ØØ×ØÛÝÛÚßåååäãâÜÙÖÙÛÚÙÓÉÀº½º¹¸¿ÄÅËÑØÜàßàæéíòôöõ÷ùùøùúùúúúûúûúúùùøùúúøøöõòñòðìèäÞÜÓÒÏÒØßíõüüýýýýýýþýþþýüüûõïééçßÛßãââáßÝÜÝÜØÒÓÔ×ÓÏÍÈÊÆÇßëêèáÛÐÁÀÌÑ˼»º³£–Ž•”“‡ƒ|ƒ}vty€…–¦»ÅÑÔ;²¾×ÚÕ׿¥±ÎäìïððìåÛÚàÞÕÎÊÒÓÌÌÛÝØÙÛÐÈÊ̾‰B(# :}ªÃÍÐÓÔÖÔÕÓÒ¹dJ> +  +  .=M3'  + &$$'*('.3'443.%$%0,&8-"' + +     'D:&   +  *9Nbdb\POinstqd[ijikf\cswzumchv}€„„|ortstteF +&-113)$+).,. (,$0.))-")'"')Be  :U^VTGRU=" +  0ORR]]NA789?@A<4-*';:3433* ! + +  +  + +  + + +  +  + +    +  + + + + +  +   +&,52-003+-0&""!%%#!!($"&,2;::@;>:7;@:4<<8.885/#(059<249/"$"##* "!$ +       &AOI?830.%):IBGEQ]XbUFEFHPKIPWREOGG>=5)# &;GMKFMMPORG4#% + +FE:58%  (&!f›_    Lej}ˆ–™–™•’g>$  +qŸ´´¼ÃÀ¹¥—®®¦¸ÌÁœ—¨“–§±À¹¯ÁÙáááâãÞÖǪ«ÏÖÒÚÔ»³ÄÍÑÏËľµ¬š›†tm|Œ‰ŽŽŠ‰‡„¬¦•—ž•š¶¶µ¾ÔáãÚæìììíëâÖÕʸ²¸¾ÃÀÅÉÓÖÙØÜÞÝÚØÜÛÑÏßéëîñôøüýýþþþÿýýýþýýýýüøïåÞÚØ×Ûâæçêëíïñòóõ÷÷ùùùùùùùùûùùøùùùøù÷öòñðìêèçåÞÞÛÙÔÑÊÇÆÅÊËÍÍÏËÌÒÜáâÞÚÞæëðòòñ÷õôóóòòïîéçæâÜÙÛãçãâåçëììëëíðîììëèåÜÙÛÜÜÛ×ÊÃÅÁÀ¾À¿¾¿ÅÊÎÓÕÙÜáççìðñóô÷ùùùùùùúûüüúùúûùùøùøùù÷ôóóòðïéæãÜÙ×ÒÐÒ×ßîöüýýýýüýýþýýüüüúóðéäÚÌÔÞãáÝÛÙØÚÚØ×ÏÓÓÓÒÌÅÆÄÊÞëéäâÝʸ¬²ÂÀ´¨Ÿ˜–Ž‹’£•ŽŒzz„sqv…‰Œ—¬ÆÔÞÜÔÄ·ÑßÛÙ׿®¾ÔãèíïíêáÕÙÝ×ÍÉÇÌÎÍÎÙÙÒÓ×ÏÇÌÍÄ”P' ;‚¬ÃËÐÒÔÔÔÖÑεeK:#  + 6;;#%   $ )7*!$ '),*.1.&!)',03*'!  + + +  + +  + + .N\O,  + + +  '9F_d_[OM]q~„eXeikseddu{twdds|ˆ„€ssx€t~mL( %4189/3.00.*+0.")**)32+*#'$! &!.BQRZSKRU:)GSa^\SB>@EIA>A;3.35:31.3+"!"  + + +       +    + + + + +       +  + +  )3541--00*&+)(''(("*&""#%),0;D=EA9997>;34;95198.#%.7;9C<880)''$+&1#  +     +  + +HFKD6.--)/;FKEKX_faZJFAADOKKRULOJD@;>6+%")0=?IHKMLSHI<7"!1DJHS@0&  +2#' + n¡¤q( +    J`qˆ“•‘šš“}i< %s£°¹¾È¾³§”³¯¦±ÊÀž‘§‘¦±¼©»ÙßÝÜÜÞÝÚÙ¿¨Ä×ÎÓØ÷ÃÊÓÒÍËÇ»«Ÿ—“‚mw†‰”‹ˆ„œ¥Ÿ’š“¬²³ÈÜææÚåêëîîíåÎÎɹµ¼º¾ÃÇÌÎØØØÛÙÙÚÛÛÓÂÊàèìñ÷ûüýþþÿÿþþýýýþýüüûôëâÜÚØÚÜáäééëïîñòóõ÷÷÷øøøùùùùùùùøúúùùùöòððìêèæçäÞÙÙÖÕÒÍÌÄÈÌÑÓÑÒ×Ô×ÚÞãáãÞãìó÷úûûüþýþüþþýûøù÷ðäáîø÷öòôúýüýüüúúùù÷öñíæßÝÙØ×ÓÒÌÌÊÇÅÃÅÁ¾À¾ÁÈÍÎÑÖÜÞâåçìîðóõ÷úùûùùûüüûøúüúüùùùùùø÷õôôñïìêèäàÛØ×ÕÒÓØàìõùûüýþýýýýýüüûúõìäØÆÇØÞÝÚÚÙÛØÖÕÓÐÔÒÏÎÍÄžÇÝêèäáØį¤½×Òƶž•’–žª¡–”†„Œ’Žƒ„ˆ„‚Œ˜¯ÁÍÙÓǵ²ÇÓÓί¡¬ÅÖÛßáäáÑ¿¾Å¾¶³¯°´±¯»Ä´°½·¼ÍÍË R& #.|­ÃÉÐÒÔÔÕÔÑͳfI6   + + + *)  + + (# !0() $+/4,+42,(!'/8+$'$$     +   K`bU'  +  $ &2BX_hdZM]v~pcYjmrjgirx‰„sies…‹‚‚€orw€~tZ5 + #09>>6<6954777%.,.234,*+,)(%#  + + 1FSUKPTSM4 1AUge[NGC8F@DI@7637400437-(!  + +  +  + +    +        +    +       +    +348*-310&--).'! ((''&(-# $&$./>AA>@=<<<4539>;;64.1#(6:=82&!#$($(62'  + +  +   -KLPMC41##$7AKQQT_jgYD?@@GJPOSUSJKE>=E>>-&&(?@DHDHSLKJKA&*GLMXL7/ ' 6oª¤o$ + +" L_h~‹Ž’“˜”—‚h@ &x¡¬¸ÀÆ¿µª˜®®¥¯Ç¿–’¡‹˜–£¢¼×ÛÙÙØÙÝàßΰºÕÖÒØ̯ºÈËÒÓÎȾ®šš†jl†Ž‘›•Œƒƒ„§¤“““¡¹ÀÖßæàÙäêìîïíåÏÌƽ½»¹¿ÄËÎÐÕÖØØÖØÚÜ×ÊÃËÜêëóüüýýþþÿþüþýýþýüùôïæÞÝÙÙÙÜÝâæëêîðóõôõ÷ø÷øøùùùøùùùùúùúúù÷õôðëêèèçæäßÖÖÛÜÚÔÐÌÊÎÒÔÖÓÚÝÞàããâäåçì÷ýýþÿþþÿÿÿþþÿÿþþþýúíèøýþýýþýýþþþþþþýýþýüøòëäàÙÕÕÕÓÓÔÐÄÂÇÇÉÈÃÀÈÎÒÑÎØÚáããçéèìðò÷ùùøøüýüüúùùûüüøùøùøøùôöõñðîëèçåÞÛØÕÑÒÔÚßåò÷üýýýýýýüûûûöïå×ËÂÍÚÞÞØÖÖÔÐÐÐÐÎÍÈÊÇÁ¹³ÃÙâÞÚÔͺ£œ¶ÍÑ˽ž‰†ƒƒ‰’€€pkwrlspkm`chj|…–œ ’„}†”›’‡rko{˜¥¤¨­¦š~x€{fchricgpwjgd|©ÉÍÊœL& .y¬ÄËÓÔÕÔÑÐÎ̱\H9 +   +#!"   ! (! '(3&"*113***%(!(-,) %  +  +   ?;88:6549100$-;><89<81($'$*'')-'  -HPVJ:7,"+8==CLSQX^ROMNLG::7488;9:698FŒÆÎÇšW/3u¨ÁÉÑÒÓÓÐÊÌɬXH; + + + +  !%$  " #$!$,*##-0&%)##-###'       + + 6epj]G4  +  + + +" !7I`hidYRm†‚nbfrzyvmm€Š‰‹€hguˆˆŠ‹Œ|v€ƒ~oO!  .EIJFF?;77<44=>661(03236454118 4>MTMXUXU> +3EOVZVMC@<=GJAB>64421476.## +    +   +     + + + + + + +! + +    +  +    + (15;84523,'%*)&$!$1,&-*-*"'*409?@;><@C?EGA>?870*99-%3<===>=96*+&%&+%')" + +-JFRM>6* 6;BEMUZ_[TI?A>HMOQRQLK>C4-BEEBH@CBAJISQILMSG>9%#>SWKCA>1!   +  + + + 7V(!n»Á™M +D_fz†‡ˆˆŽŽ€a3 *v¡¨²Á÷ª±–¦´«±Â·‘¤£’¢¨·Èª ÇÍÌÍÏÓÑÊÆÌÕÉ°»ÕÔÎ×IJ»ÆÍÔÔÐƽ« žz`i}Ž‘”‚‰‹ˆ•£“Œ¢ž™³ÔàåèåÚçíðððîêÖ¾¼¹»ÂÀÇÇÏÒÒÕÖÕÔÔÕÛÔÉÎÔÓÚèòüýýýüýþþýýü÷ñìåÝÜ×ÖØÝÞãââçêêìðòòóõøø÷øøùúúúùùúúùøùùöôñîëèèäåæäæææäáÚÝãåäãâãâæèçìòóöòñóöûþþþÿÿÿÿþÿÿþþÿÿÿþÿÿÿþýýøéâóýþÿÿÿÿÿþÿÿþÿþÿÿÿþÿþýþü÷óïïìñø÷öòïëåâÝØÚÙÝÜØÙØÝàáââÞÝÝáäæêìïò÷ùøùúùúûúùùøûúùøøøøöõõòòñðíêëéäâßÚÏ»³±¬½ÅÔåéèçæâÞÔ»Ÿ“Š„vmodUakl_`_kef]X\`c[KV_jaWL7<;5A98EB>7;<55-1,0/+/)2-/**4)*/0.18?H>=<299447?>;84;2( + #6@O\UTRSB, /@TRRZPI>GA<@BH7-243.+561"! + +   + +  +   +   +  %  +  + + + + " + +   + + +   + /25659654*&,*2,!&).,/-*"+-05;;>;=@BAJAAGAA;<95266(.679<8>>=8))$&&&)(% +    ,FHWM>8% " *;GJKP^aVSK:7FKWKQTPMJ?=20AJKJI[^NKNEILLMLMPF;+!';LXOHC8?2 ! @X4.‰Îعf + (K_mƒ‡‰c5 +,q¨¬¸Ä·©¶š ³¬«¼¨™¯«¥ª±¾ÐÀ®ÈÌÉÊÐÏÑż½ÉϹ®ÍØÒÖÊ®³¿ÆÒÔÒË°¥œ“}c\v†Šš‹‹‹„‚ž˜Ž—¢¨ÌÞåêæÜæïïððîìÞ¿¹º¸¾ÅÉÎÏÐÔÒÑÓÔÔÚÚÇËØØÔ×æóüýýýýýýþýùðçâÜÚÙÛÚÚÞàãââçéëêíòòò÷ö÷÷÷øùùùùùùøùùùùøõóïëèæãÞßäçæèêëëçÞàåèçèæçìðô÷úüýüûûüþýÿÿþÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿýþûïßÜêûÿÿÿþþþþÿÿþþþÿÿþþÿþÿþþýüüûøøüýýýüûöóìåãßáÚÙÜÝßâãããàÙÖ×ÛßâæêîñõöùùúüûùúùûùùùøøøøøöôöóñòððíìèçàÝÒ°—–Ÿžª¼Á¿À¾¶±¦ •‡~Œ€kd[]TW[b\VOTY_QTSLFH@>CPNEA669433291035/0+&*##%&&"'(,7HTs¦ªž¥“…œ¡šœ²ÄÄÃÈÎÐÆÄż·²³²›‡§³­´¾·§»ÊȦZ1),i§¼ÈÍÌÏÏÊËÇɨXH5  +  (/&## +  "#!)0('*(&&&".6#"'1/)+-(  +    + +,iŠ†jcmxZ'   +  + + #7NZWeXX_y……zpert~xsspvŒŠ†}ji{€‚‰Š€†ƒ…‚xpB -GPRTRJNJI@ENOEG@;DD;<B?AIC=B?>8168690'/<=8@<9:0)&+*-)&,4(0  + !)BJLK>6.&$.?JLOMU^XHJ@?BLWW_VIJFD??8>DKLGV_JGHLPQOIKING;0:DOWL]Q@8 + +  6aE9ÞäÔy-   N\fx|‡‚•…‡‹~`4  +s¤¨®¸Ã´£µ™²£¤±§—¬®¯¯¶ÂÕËÀƽÊÓÒÍʽ¸¿Æ·¥¾ÛÕÑÑ´¬ºÅÎ×ÔÎÈ·¥ž•€jbn„“”•‹~x’ž’¢Ÿ¾ÚáëæÜèîïïðîïãÁ²¹»½ÅÈÍÑÒÓÓÓÓÐÕÞÔÂÍÖ×ÔÕäóüýýüýüü÷ðêàÜÙ×ÖØÛÜàãäæåèêêìððòóõöõ÷øøøøùøù÷øøøùùøôðíéæäàÜÕ×àåêîïñðêäåéçèìðõùýþþþýýýýýþþþÿÿÿÿÿÿÿÿÿþÿþÿÿÿÿÿÿþýüòãÛ×àñýþþÿÿÿþÿÿÿÿþþÿþÿÿÿþþÿÿþýþþüùúýýþþþýûøòìéââáâãäæäãâÛÕÐÓÓÚßãèìòòö÷øúøùûûúùùùùùøøøõöõõõõóòïïìêàË»©›–ŽŠŒ”œš˜œ“‘Œ†zubcaV^VJQE=FEF@;937=>>77631)+0..-%',*#0*.$ ""#" )! "' 5e­ÒÛ×ÖÕ½µÆ½ÃÏÜääåèéêäååÙÖÕÐǶ¶ÇÊÅÐÙÕÅÂÈÆ©]4)*g£½ÈÐÒÒÏÉÇÈƤQC* + + #) )  +  %$%%-!"" $$$./"/4*'),'  +  + +  +   +']‰ŽvfvŠ])   + +   +  /J\aa`Y[o€€udkuyytsn|…Œ„lf}ƒ‰‹‚…‡y|‚tW, + 7GNUMNROTPQJNSONJGLFGHI?BGCBA:44>RWVTOSVD  5J]bfc`OKEIE>D?@B>723409/#$ +  +  + + +  + + +   &   +  + !  +    "12882628@5,'(''')'+31* $%--75CE>A=AFGIA<=;73.4=;3&79?9=;@=6+.,*.,.*0'  +   + 0BLKMB>,#):BIKM\^`LMC@BIRUZ_KQFGE>@NMA1 %)HHTQMLB9)  ! +HgS + A¦àçÝ›4 &E\hw}~ƒ…†€d3-}¦¡°¸¾²¢¶Ÿ°¨£­­•–¥®¶¶ÆØÒȾ¹ÁÉÑÒÇÀ½¯ºÁ· °ÒÙÒÒê´ÂÍØÕÒɹ«œ—‡qcc{‹”‘ŽŠ†…ˆž‘‘¡§š®ÔßêçÜèíïîîîîåų¿ÁÄÆËÍÐÑÏÑÐÐÐØÚʳÈ×ÔÑÔàìøüýüûöïãÝ×ÔÓÙØ×ÛÜßäæèèéêêìîðññò÷öù÷øùùøøøùøùøù÷ôñîéçåâÜØ××ØÞçîòôöóíéèíîôúûþÿÿÿÿþýþþþÿÿÿÿÿÿÿÿþþÿþÿÿÿÿþÿÿÿÿþýøíá×ÔÓÔáï÷ýþÿÿÿÿþÿÿÿþÿÿÿÿÿþÿÿÿÿÿÿÿÿúôùüýþÿÿþýýüùõîêççèèæãàÚÕÖÓÐÔÖÛßçêìîóõøøúùøùùùùøø÷÷øøùù÷öóóóôòðèÆ¥‘‹‚€vy|€swslfb\_KRDIMB@@=?954;5.'(02(++-/&''&+ " "&#$!$!# #""( ,!$"!0lÄÝàÞáÛÄÂÉÇÈÐÜáçëììëìëëìäÛÜÙɶºÌÐÎ×ÝÜÑÈÈÇ^7$ ,h ÁÈÍÑÑÎËËÉÈ¢[I. #*'%$    % $"*$#,2!)-''"8=3--2+ +    +UƒŠ€ow‹—„Y'  + + +  +  (G[dic_Vbr‚~cdq‚ƒrhs~‡‹†qgn€‡’Š€vty‚ƒ~j7 +8ENSFELMPPWNENGFKPMJLOG?LLRPDF5# 5=X\NP[`S2 + + ';GVa^a^JMPIGKE@=:5592887+!%    + +   +  +  +        + +  $#      +8457322264,&($ (!'*)0*/'(%#577>=BDDBJEDGD=?7=24@;+,2A;::;:40+0*--*/71  +   9!   + +8EELH@3/!.A>;65>:3-/+(#++.***/#')2+)/$%-0/1<<% %.+8('2;=9=0)!.Z¤ÓàãáåØÄÉÃÂË×ÞäêíëìíïïîíèÝÛØͼÁÎÏÏØÞÞÖÊÊÄžd3'!'d ¼ÈÎÑÓÌÊÌÊÆ MH6  + $)*    +'% "*%!!",!%2)!(/52,+/ +     +   J€j~•’’…\(     B]epte[dv…Œˆmht{…„rfltŠŽzjhp‚‹“‡‚y‡ƒƒ€jC1IXQPLJMN[ZPPKEJPMSMOJAGNROLRQF&  +BFRYSUXYH,  ++9HR_\YVRAQN@DC@;1/88813-'%&         + +   #   +  + +      '  $%!!%$!%)53527<94/5)+6, '"'/.1,(%!('39;9CAFHIJBAEEA<69:?>4)06B7=>EA4-*6931..5.   +4   ?EFHF7/+"&38>DGRR[RID>8;DMLHKYXOQLK[OLUQHOP=>0&%))$AGSPLQQ?7' %2  Qxd%&mÃÝÕŒ/ ;&Pceey€ƒŠ…††Šzc2 +-…ª¬«µ½·›°š–³¦¡®¯§–¬­µ»ÌÝÚɺÀÄÎÑÐÎ̹«®ÃÄ«¶ÔÑÎÑ·§µÃÑØÔÌÀ´”š‹halŒŒ…Œˆ†‚~œŸ”’›š˜¼ÞèæÛèîïïðïïãνÀÈÅÆÍÍÌÎÌÌÈÏÖÚɵºÂÑÐËÕßàâããÜÓÐÑÑÐÏÏÙÙÞáãååèêëíïîîïññóöööôøøøøøøøøóóóðñíéåáÝÛ×ÎÒÞßßÜâîóôòóóùýýýþþÿýÿÿÿþþþþþþÿÿÿþþÿÿÿÿÿþÿþÿÿÿÿÿþÿþöíåÞÓÏÏÏÐÏÍÕÑÙåðûýÿþÿÿþÿþÿÿÿÿÿÿÿÿþÿþþÿþüûýþþþþþÿÿÿÿÿþþþüù÷ñíçáÝÝßÝÖËÉËÐØÜãåëðõ÷ùùùøùøùùùùùùøù÷ùùù÷ôôð⨂sslyyjpv^jodhbc[PNT[]TLL?D>=:BIPOCC86516@DHGFBDB>>><=>B9..0<>:CA>MRUX\LEC?D>BMOKKHTWYSSWRNSMCDC>4& &$-(/JNKNILB7-! !25/"Rwb*'gÃáÝ?  +  'Y\imvƒ~Š‡†…ˆ|h6  -{©´·µ½³‘«™°ª¤«´´©«·¸ºÍÝÚʽ¿ÆÐÍÐÌÊÄ·¬«Äϸ­ËÓÐÓî¯ÂÌÖÖÏù§”Šodj‚’Š…‡‹z¦–Ž•›”­×èãÜèïïïïîïæÎÁÀÄÆÈÊÌÍÍËÉÆÏÚÔ½³¸ÀÊÌÎÊÅÁ¿ÁÄÄÇÆÍÒÌÏÓÙÞäååçèëìðíïðññòòóõ÷õ÷øø÷ùù÷ö÷õðïíëèæÞÜÖÌÌÍÕÝäßáäìïõøùûþÿþþþÿÿÿþÿþÿÿþÿÿÿþÿÿÿÿÿþþÿÿÿÿþÿÿÿÿÿýûòéãÞÜÔÎËÒÓÐÎÌÌÏ×ÚèôýþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþÿÿÿþýþÿÿþÿÿÿÿÿþýýúöñéäßÜÜÛÒĽÃÅÐÛáæéîôõøùùùùùùøúøùùùùùùù÷÷óò⢂qu|pagfidkqvvr`Q]cmnkkk_H>=HN`hoikT5)#%%'7ReK7% 0Ymh@%+CammojkN(*D\[D';`neda[B-&b²ÖßÜåßÍÇËÀÀËÝæéêíîëêíñòñìãÜÜ×ÏÉÊËÎØßãáÖʼ b/(+ež¼ÉÒÕÐÌÊÇÇÅ™OD-  +  +   #"  + %+%!( #%!#"+,(#+.715.'%   + +  +  + 7jv{fd€œ œ‘{P#   + +  (Odlkc[[i†~‚x`tki„tsex€„vlfguˆ†‰‡„„†pvqwb.  +;:E?771303)044##  + +  + "   + + +   +   +    + +   + "*( + '))$!&%"(0,$%'(.1,# ###"%##'(:4.59=::47@=11+#*36:/+,-!+337>;?=8=BD@@BAC@A=+-6=:=>?:@@=?8(.588<=B=<1*1>?;1-6'  + + + + #5EGJ;70(#+/3454>FA<54?9@KPGQ[LHKJ<:FHCLSKJRUJ\`VTRQELFC< "%-7=23CKQYSLJ@) +'0:  +(H8E¨ÛܧK   /Rdcsvw‚ˆˆ„‚xT/ +2€¬µ»¼Á²Œ§Ÿªª£¥§¬¹¶«¨¼ÓÝÙþÈÏÎÌÉÉÃÂü±§¸ÎÅ­ÀÓÐÕл¬ºÇÏÔÉÀ»®ž–ƒmh{…‹Š‘£‘‘’ Îà×äíïîïðïâÏÆÆÆÈÊÎÌËËËÆÒÕÇ­°»ÅÆʾª œŸ®¶¿¾ÄÌÒÔÖÝãççêêíëííðñòóòô÷ôõôõôôôõõ÷öõòíêçãÞÛÑÍÉÍÏÑÓÛãåéð÷ûýþþÿÿÿÿþÿÿÿÿþÿÿÿÿÿýÿÿÿþþÿÿÿÿÿÿÿÿÿÿþÿùõïêääàååÞÚÚÖÓÖÖØÙÙØ×ÛÚÜÚÙÛÙØÚßèïöüþþþþÿÿÿÿþÿÿÿüüÿÿÿÿÿÿÿÿÿÿþÿÿÿÿþÿÿþþÿÿÿþüõíæÛØÐËËÆÃÁÉÓÙßåèîñõöøùùøùøùùùúùøøùòæ¥t~a]\\\^x‹‡y^H^z‹ƒgf|zoF5>]ip`R^pmU3,+4YszsK5*6Vvw_5&GksfDCaqc?/LfoW(%8\g[5#2™ÖÓÎǸ«¨¹»½ÍÚâèèëìïíéêîñóðéÙÖÜÜÔËÉÈ×áããÚÐǧ`)! R—µÇÓÑÎÎÉÌËÔ??$ + +   + $&$ &% ""'$$!#$$*.4(/)&$   +  +    +Uxnjf’™•–zTE$ +    8Uhmjfa^q„Š…e`vx€qjt{ŠŠˆx_n|†Ž‘†v‡ƒy^&4Reemlojmkhgihbakfcegg```ce``]P@ + +';JW^ZTLTK9  + (.:DWXW`YMNNJ>IIB925,.77@>62/1,  +   +    +    )  + + + + + !-%  #(&+**))+''&,24,.))'&+(.(.+-+$)%!  $/1786:>87;56=:.&$483304+ #06866C?>AAA>9.&26;?>>@;-/ 3@4:5/0'#&       &   6JFL<6+*&0-.<7.?6071699BKRIQWQAEC:>DOKFJLPIEIN]YWTNMMTF.&"':*"1—ØÜßÝí®°œ¨¿ÔßäæèëìêéêêñóðèÒÌÜßÙÎÉÉØàáãÛÑÇ´j/$I™´ÇÑÐÎÎÌÍÊÂLE"     !$"'(%""!/')##( $)-'+0(#    +  Q|l`o€˜£ —‹xlZ@!  + 6 )Ibnqnk\nw†‹ŠŠofj‡{xgnwˆƒ‡|glx…ŒŽ‰u„…‚h4 #-Qhoqspqurkjojdikkeemqg_^^bc^_UM /EMZ_UQLWN2 B7EQS[ZNEJVH>?@B6,030212D:*$&$ , + + +  +    +  + +  + !,$  !$%)(%*&+)&"*/510/',3,(+())$"$!#$&$""1796>;==??4988."%0544/52*$ %'18>7>=>B?====;?A?>?:@86+&3E>:?=;82%)+3130/,#%" +  +     8LKE=:1( $4017728*71<<:=CMLPQXLBC@;>EGLKCKONLQ]]^\YXPKEC1$"#3%(7EW_ZVB41%#%-"   +4‘°z4"$%   /Qa_ouu‚†ˆ‡v\8 + + ,}¦±¸¿¾®‡¡ ‰ªª ¤¦¤µº¡~ÏÜÉ¿ÂËËÊ˹¢›µÃŶ«²ÎßȲÌÖÒ×м¯ÀÇÌÌÊ¿¹®£—“…qu…‘Ž‘‡{‚†“Ÿ‡y…””«ÕÒäîííððñäÒÅÅÆÌËÊËÈÂÀÑÔĸ¾ÀÀÈÈ·©¤ª©°»ÁÈÎÒÙÙÛäåèêììëïðððñòôóôõöôø÷÷õõóóóóïìéâÝØÐÇÄÉÓÖ×ÙàåíôúýÿÿþÿÿÿÿýþÿþþþþþÿþÿÿþÿÿþþþÿþþÿÿþÿÿþýûöïçâáÞàáãããáÞØÙÙÚÞâààáÝÝÚÚÝÞÞâäááßÝÚÙÝàëöüþþÿþÿþÿÿÿüýÿÿþÿÿÿÿÿÿÿÿÿÿþþþþýþþþÿÿþþþýúõíâÙÔÊ̾ÀÆÊÒÚßæíòôôöøùøùùùùùùùøó謂|‚‘Žy[YULGTw…‹yPCZq†‡kn††xF5?_{x_FFn„cC/(?d||x^6*2Ynp`6$Gd}vO>Zqf=5KhrY/5\jjl_\D+2’ÔÝãÜǽÑÁ£ ¯ÌØÙÚàêìíëéëðòðéÐÉÙà×ÏÇÍ×áâäÝÑʱf:  'E˜µÅÑÒÍÏÒÌÉ¿GB#   + + "!$($&#$+/",$ &*/'#$$+*0+. + + +  + +   5pvbf†š¤¤›•“ˆriU=-# + + +   #PbnlrpZo{……‡qfqw}z€pmzŠ‰‚}jdn~ˆ‰†…~|€…€tE 3Zmsttkp}rkqpokoljhjlnfcld]hc`gW  +#6?L`fUJMLL2 +"9DNU[^THFNJH?=>84-03.3.38(!&"$*  $        +    + %*& #(,$"$()*,1)-./31,##)1/*,)%$%')$$# "!!"1<77=:9A;96;50."&.571323(%(/9AA@AEB?>>7=A>BEH99@74+-7IA>JNMLMMOKQQ]a_[Q]SSOC)$#%6@CC4#1IV_`MFA5/ -0$ KvJ/ "    7Q`[ettƒƒ|‡ŠwO* + 4{¥±¼¸»ª¦¤Š©®¡¡¥§·¼¨˜¦ÓÜÇ¿¿ÈÌÐÌÅ°›ª¿Ã¹®¬ÇÜÔ´ÄÙÓÔÕÅ´¶ÄÈÏ˹¯£ž“ngx‹‘‹„‚Š¡†{‡–—žÅÑåëîîðððæ×ÅÂÃÉËÊÌǾÉÕÏ·¯À¾ÀÉƯ¨®±·»¾ÅÎÔ×ÜÜàãçéììêîðððñòòñôõ÷ö÷öõ÷ôôóôóïêéäÚÖÙÓÍÉÎÔÛÝßèòùýþþþÿÿÿþÿÿýþÿÿÿÿÿþÿþþþÿÿþÿÿþÿÿþÿÿÿþþüöîéåâàßåãääåäàÜÚÝàæçêèèêçäàßáâäâææåããÞØÚ×ÝãíõûýýÿÿÿÿÿüþýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿÿÿþüýúòçÝÔÒËùÅÎÔÖÞèêíòöùøùùùùùùøøùó範wƒˆ€bVQLDT}…ŽxM@_wƒ„~‰‹ˆlA;Cav|`DGqvb>,2Kntwz_I13Yquc8(Bn{hSPmzj8-Ijqa85WhklfbC70yÁÝâÔÃÏÜ͵·ÀÎÈÄÎÛéîíèéêíòóîÞÔÜÞÕÊÆÈÖÞãäÝÒűn=%G¶ÇÏÒÏÒÑÏÊÁŒAA&  +    + "!' ' (&!!#+(+ )'22$#.-..-   +     + + + !`vmc€–¢ª£Ÿ—}kUTJ9# +   +  +8dhfmm_Zq‚‚†‹ubnp{ƒsiozŠ…rhYgy‚ƒ‚€€‡xu|w|N0! +5\otyuq{‚yposxpxmlglofinjkiiebgI  '5=71)353205,#""  +    + + +    + +    +  +  +!#+$  $(*)((.)06.12/432/+&%-06../+,&(&$%,#"#,2;C<88482:;7/)'"&063+464$ 044JIUQRXKECAAGLRFKFGNQNV`a]Z[US]M@9%,@?LJE2!9U_WXPJE0   +),&  + 'B.!&" + #9S^\bk~Šƒ…ƒ„‰pR,  4†¦³··½«Ÿ¯—¨² œ¡¨¯»±»ÂÔ×Æ¿ÆÊÏÒØÔȳœ´Â½¶¬½×Ûý××Ô×з°ÀÊÎÌȼ¸®£›‘vks‹’Œ‰‚}}–™†˜–¾Ïâìðïðððæ×ÉÂÊËÎËËÂÁÐÒÅ®¬¾¼Ãʺ¯«®µ»ÀÆÌÑ×ÚÝãäåêìîíððññòñòòòôö÷ôõööõöôóòîëèæÛ×ÛÜÚÏÑÖÛàçìöüýýþÿþþþýýþÿþÿÿÿþÿÿÿÿÿÿþÿÿþþþÿþþÿþþýùòêèäãââäãæåçééæãßâäéïòñëïòðíëæâçäáäçéèåâàÛ×ØÙÞáêòûþþÿÿÿýýþþÿÿþÿÿÿþÿþþþÿþþÿÿÿþÿýÿÿþþÿþýýý÷ïâÙÕÌÄÊÏÕÔØáåëîñööøúøùùøøø÷óç¬ylˆŒŽ`PWNISk|tVE\~‹„ŠŒ„nT88Zw}iNWoo[929Lkuv}jM.2Zkyg1!Egx|gjzu_2$?<>CADA>CEFD:;:>=7))01,0,.'  +  + + + + +7JJJB31, ,1),33-%)$+5:PxŠˆ…ƒ`B:]€|palsrV5$9_srpxtU44Vz~a="==JG>4301.01+*$ !     + + + + +   +  +  + +  + +  +&0' %$+0144:88;<=:8:6;;3*160*0000/0-/1%*+)!!&&"$)-9E@=69;5495::,('19:40/7)&+36B?EDF>>?BBC??DAE=AFB3 '146:>;?9-#(2/48+*" !&  + +  + + + '@HKHC;2( $,1),26*2* .+3BJLHMQTJEEDFFPSWNTOHNTYZ_bYNMQ[TH4';BEGE<-"!0NUXXK=:/  + "86%"$*$   +"!  + +   !7Xbkdaa_jt{y|paarx{cvpmwvxpcbi}ƒ…‹ƒzqt~~ojD#8Vhkr~zƒ~xyu~syonsww|y|utkjlmm_7  &>KUU]VFQRG9 ):HWSSRE6;LC93=869:@9.#"+5832.2+)110=BFHDC?FDCG?=:+029?B?:8.,(,+,.5>2*""*!  + +  + (FFNE;:8)&0763291%!"&$->DWQNS[KB<>AIMTLHJMJNRV`ZTZSSRURG3 /@IIGHA72&AUZVHD?>(! + 1:1 +   -+*"% :\hiwqv‹‘”†w\+  +4ˆ«¹¾º½§t’°Ÿ®¥¦°³”…ªÂÄÎÈ»¹ÊÑÙÞÝÜÝÜÀ’¬À¼¬±ÅÜßÄ»×ÜÒÖϺ®½ÇÍÍËÀ»´¨™˜‚ryŠ‘‡„‚|Š–‰‹”š™ÂâëíìíïïæÕËÅÉÉËÊÄÃÑÓ´ª»ÆÏ˸³¼ÁÁÌÎËÐ×ÙÛàâæçéëëíðïñòðòöõõõø÷÷õôóòñïëéééæäßØàçéæèíóúýþÿÿþÿÿýýýÿþÿÿÿÿþÿÿÿþþÿþÿÿÿÿÿÿÿÿþÿýúðæâáàáâåèçèêíïìïðîëéåèíñôõ÷ôìêòôóôñìåäáæéêìíìëíêéèãßåÝØÕ×Üáàå÷ýÿþÿþþþÿÿÿÿÿþÿÿÿÿÿÿÿÿþÿþýüýüýþþÿÿþþüôíæßÞßÜÙÞâçèéëñòöøùùøø÷óè±zpyƒ}iNNEILc€„qYEUn„fM_t‰sP?_t}zw~wf=*)Ep|wYdvjG4Spv`9$?s{~xyzo;& Ifge@ )UtbC! #}ÕÜÏÎßäßÍÆÖÔ¿ËäëïóðïíëçêìðïíäÑÇÕÓÍÍÔÞãáÝÔɽ„4*?Œ¯ÄÕØÖÔÓÍÆ¿C9  + %.=5" $%&)! &  -$("!#%'!!*+,1*"   + +  +  ++QedpŸ¢Ÿž ž˜žŒubakoa@#     + +  +.K_feg_\nu†{zxd^iknp|qrqxugedpŠŠ‡‡{|zvzomR)5Xhqwz~}~y~„zrmjpyqwws€ysmngssf='FSUVXPMSSG&  $5HSSSPDFCH@926>5,/4($"!#   +             +  + +  +,4(  '(.8@@??<>F??==>?=;@CA>934319725701*,('*)-(#'158>:>73;=>;=@6*))01154*3' &1542;?@EFF@?@CC?;:92(777:====0%)04008:3)" $&$  + +  ,JFKF=22,&;;>F><1")!"4:ASMSTaS<<9>DJNSTHCRUIR]\RZV]ZPQI4! )=BMELO;5-"5PZSK?ID, + +$%5'  "+') + +%?^kkrtx‹”–†s^5 +8‰«³¾¼¾¨r«—¬¢¡­¶¯¶ÇÉÊƺ¿ÉÓÜÝÜÜÜÝΟ¤½¸«©½×ß˸ËÛÕÏÕÄ©¶ÈÐÓËǾ²˜‘tƒ‰‹‘‹†rˆ‘›¾àêíîîïîå×ËÇÅÊÍËÀÅÔȾ¼»ÉÊÒÍ¿¾¾ÇÍÒÓÑÓÙÙÝâäåæèëìíîïñòóôöõôôöøõôóóòïêêèèèæåáÚâéëêïùýýþþÿÿþÿþþÿÿÿþÿþþþÿÿÿþÿþÿÿÿÿÿÿÿÿýÿþüøðæáÝàâåççèêíîîðññððëèéëîòõ÷øôîíö÷õóñîëçåèêëðïðñïîîìéèæâßÝÚÖÖØÛëûýýýþþþÿÿÿÿÿþÿÿÿþþþÿþþÿÿþþþþþþýþÿþýýû÷ðéãÞÜÛÞåèèëêëîòôö÷÷ùùôë³|ot‚‰~`SHGLSfwƒmREVr…}gLVv…sP9]yz‚{qxjG*-Lfwl[f{sP:Zl}k@'>rƒujlvrI/@]phE,UrnF'$ƒÑÓÍØæçßÌÌÜÑÄØèìïðïïíèåçëïðìçÛØ×ÒÏÏÔßäßÝÕ˺L+!A€«ÁÐ×ÖÑÑÏÉ»}FD +   +++8B;/! %,"$*&! +%')%'#,!'1-1%" +  +  %IU`~¥¢œ¡Ÿ ›”‹ph_npiH  + +      %Jbgkoc^hv€†‰|hahorqncpxx{|sicu‚„†‡‡|yyupk\8!7Pilv†ˆ…‰€‚€wttrqwv‚~‚~€~umpvlh>  .IPR]]ZOMJB  ';KLPRQQ=:JSOD>FA:769<013/!$&'%    +     +     +    /8+""$).6;?DCEHFGGFBA:>==?>9>5)+348625+'!&//.6?C?@?9;>DEEA=;?=9880'(:=>?<;=9+08<:32663)(%#    (DME=636)# (68:+!)"!%37>JOXY\SGB=;@UPFEHBRRTQQZSY^[ZXI@9'%4C=CLSSAHB0 ;FEMHI?9$  +1%#.(*   &BVinnxŒ“›—‘‰wT; 0Œ¯¶º½½©uˆ¯“¯¦¥¤§µ¶ÀÇÅÿ¸¼ÌÖÚѺ¥¼ÓÕ¹¯¹®©ºÓßÛ·¸ÓÛÐÓÒµ¨ÃÍÑÐËÉ·£—™‚ts†„˜¢“…—¨×êìîïîïæÖÆÉÈÊÉÈÀÐÐÁËÑÏÓÍËÉÇÊÏÑÒ×Ø×ÛÞßààâæéêìëíðïðóóòõõõôõõôôòñíèæçäåæåçåâçìñöüþþþÿþþÿýÿÿÿÿÿÿÿÿþþÿÿþÿÿÿÿÿÿÿÿÿÿÿþûøóîêæâãããèéêëíññòòóóòñðêèèëðóöóññîñ÷õôóôðéãâçèìïññññððîîîíêéæáÞÛØØÝåëõûþÿÿÿÿÿÿÿÿÿþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿýþþþþþþüùñèáááæççèêééëïòôöøøóì³€pq}Š|cUGKHOj‡vYAPu„}gTWyvL?DG<8;2172319353,*' +  +     +         + +  +    ".=4) /236:?DGJLLIIHLJG@CDBA>=>:6:>?><@B>?;9BIAA>=<80(#+?7&/6>3%5981$ &,& +   +    +)DQE@838)(=@>:62(%-%%31DEQKPUVSNQPWXTRI5#'3F>BGPPLQQG#)>?LLIEA% .  )$'/* + !DU_lpt…–šwX1 + 5‰«µ»½Âªs‚­”¯©¥¯ª¬¹½¼½½¸²»Ë×Ô¸ˆwÀÒĤº¶¨¬ÎÝßÇ®ÆÛÖÑÖ¿ª»ÄÍÐÍƼ®ž¢“yq|‹‘”‹Š‡•ª—„˜ŸÌèìíîïïåÕÅÈÅÇľÂÓÌÃ×ÜÖÒϹÆÐØÙØÙÛÚßÜßàâãæèèéëìïðñòòóôóõöõóóòïìéâÞãäççèëêèì÷ýüÿýþÿýýþÿÿþÿþþÿÿÿÿÿÿÿþþÿÿÿþþþÿþýûùõëéçæçåãåéèêëìïðôõôóôõóôðìèçêñòðïïíêìðïñóòðêãâæèíñòñòóñðñññïðíêçãßÚÜØÚÜäêóýþýþÿþÿþþþÿÿÿÿÿÿÿþýþÿþÿÿÿÿÿÿþýýþÿþýüôëåäææèèåçåèèïòôõôó긂lv†‚hYSVKPez†}_BLn‡mhkn‚c68QplgI]yvb97^v{yz~tGZpxg81\msT7SqjB*9[hg? (Qhldd\T7#K‘±ÌâéçÚÉÕ×ÈÖààÔÌ×éîïêåãçëëèèæßÚÙÒÐÖäèæá×μ„O04~±ÈÏÒÔÓÐÑË·}@>   '5@:CO>$" &%"##( '(" ,# /20,$ +    + + +5Na{œ¥§¡ŸŸ”‡ˆƒ†tc`tvj<  +  +  &Kamgfa_o|Š‰‰~hfhvpro^furb[y‰Š‹‰zzv€s~€aD,2Sfgohgrwƒ„‚ƒ€…ƒ‰‚„ˆ‚€ˆzxmlr{zY*   7EMnkYOM`I, .5EHQSNH:6:;;@97/58+35-54B:,.! "   + +             +  +   "0;7,$*078>=DEIKJLMOCLJJOKJGGG?>@?CA?ECB>>=>97;3(.<>?GKIHHBC<;;-%4;@77<8)" $/210=CF@>CHG??7?@HEDB?<2##0@FAH?7<4*' &4;<.!+1/    +-Q^LA>21((2:;6763) $(&*6EHSY]RJ><bjrmeUcw„Œ~obgwv{peip†‡~vg[l‚‹……‡‚us„mG0:\esouz{{v†…~x†|„†~x|ohddqovz\2(=P[]ZWMGM@'  ++1JZIMOB1*23;?:1.24.??//3A:/'$  (/  + +    +    + 3 +   +  +   +/11/)(368AGGLLKNHMLGNKKOHKGHHEGBBBGFCHLG?=95/0*  + 5=>BGGHFE=B<:8*#17>94E7( ./5+)/;>???JG=B>CAG@EI=<2 #/=FC=>86-&, 47:9.%/0)   +   .MSQKA82(,7=:CB:9+"&**+,CDT[^WJD>>=?XUJ@ABMVMOQXU^[RVYRD3$"8;?EPXJIN\UB,)9HH83!  $%" +2$  P_[l€‚…’Ÿœž”}Y.   7‹±·½¿Ã­s{§ž–¬¨¥¯½»·ÁǼ¯¬³¾ÏÒ¯xcfd|¶Ñµž¶²¦°ÂÕÝÝƶÉØÓÔÔ»«¹ÈÐÍÐÉú¢¡š‡x|‚“—•ˆ‹ŠŽ¢¦’“š—¯ÕèêìëìæÔÃÃÊÉËÅÑÛÈÃÓÚÔÌÈ·­ÍÔØÜÝÝßßàáÞáãåæéêêìíññññòóóóöôòñðìèåÜÕÕàèéêëïòúýþýüýýýþÿþÿþÿþþÿÿþÿÿÿþþÿþþÿÿþþþýúòëçãäãâãåçæçëêíîñòóòòôóðîòòòñïêëêéíïëçæááèçìðïíêçééìîïíììíîñõõóñòñððìéêèäààÝÜÞâãëôøüþýþÿÿÿþþÿÿþþýÿÿþÿÿÿÿÿÿÿþþþþüýýû÷ñïííìêãÕÑØáçêðòòóíÀzkr‚ˆŠŒŽ‰{hWdztU8Fit|ƒ{mE42ShtgI7UhhNKiofI2>[siRVgqf>#HbXC)$M\L1*DME,.NJOGD;#:t½ÞèìæÑÇÏÇÈÜÙǧ†’ÇéìêæááæäâÝÚÛÝÜÓÐØãéäÝØÑ»‡O0!6u­¾ÏÖ×ÓÐËǶ{:7 + + +  +&6BFMOA1'%" $"!//($!(5 )'" !# #'&(     #Gi…˜¢£  ˜š“‡~kll^`kƒz[1  +   8aipmbg\r„…„o_ijvxkebh~‚yulTf‚ˆ„ƒ~ntzƒnL:<[gy„†‰„|}‡„†ˆ……‚ˆŠ€}omlifrruscB  +1>DIQUMHOJ4-5KMM]N7$$,,+,$)12973,5884$ "     +    &?   + + +   +  + #+,2/*2;>CCGLHNNKKKLMMJKCEIIDEKHFHFIHHMNA421-#+68;BHBB?=B=89)&4:;9;8* +-6)$*6:;@?BA<8A:5$.87==:90'-13.$&88.+/-%   +  + ,GLMJ@1.* (7?>?DA<6.%(%+?CGSZ`[M>8;HNB1 !$-6'* &(!  + +  + +   +##!"%"    + + +    !#"&+129>?CFEFDEGBHIJIC@@>B=_VBIILHHPINI;(-..1,  ,45<8.+.72*(%103& "*,"  ,)-:7/'*(29<=0 %1;6771)26990*69,11)  + +   2JFG<1%"&',80)%" %$##(*-% *,"(!*-*'$ +   + + +;v—ž £¡œ™Ž…z~x…mj[`hyx`L>&     + GYY_WVKZktygP:6PU^O8;IRSOH+#;_inT?0C\d`OE3(0Gguv€{y†~v|{|~zvƒ…v|ztnmnlmgnpmX93  +,% *6L>$  "# '10,(  + +          0-*-/)/#%'#"!   +    + +#&2866;>BC@@GEC<0''*',&$  ' + + $    +   #-' !*1*%#/0."& (% +  + + +   + 1JM>1*%'("$/>G@NHGA;4--15=OQRWYUE?78FQZIEJJTIER`bkUTX^TN?10)0JG@INMTQS`N>7!1;5 %'*#  + +% 8fC !%--   G\hD_”—˜œŸ››€T+  + @‹­º¹½À«qj¨ª•¬¨¢ªµ±¬¨¦¯´¨¦»Ê¥j\]R[Uu¿Ä¥£·®ž¨·ÐÛÞÖ²ºÕÓÒ×Ĭ³ÁËÕÔÑÇ·«ž˜‹wi|˜“‰ƒ†—¢‘‡Ž•¤ÓæêëìéàÖÅÁÃÂÐßáØÉÃÍÍ¿»¾·ÄÕÝÝàãääæåâææèêëêëïïïïññòòóòðîëçãÝÖÙãáÝÞéîñòøúûýþþÿýþþþýþýýþÿûýÿÿÿÿÿÿÿÿýýúóíèéçããæäææçèééíìîïòóôóôôóðìçêìïíìîîîëéæçæéëéäáæççæåäåèèééççèéëèæêðòõöôöööóóòïïïïíëêèæãàÝÜÝáäìøýþþþÿþþýþÿÿþÿÿÿÿþÿþþþÿþÿÿþýûø÷õòíæÞÙÙÖÑÚàæçêè´~h[_cZXTFNH38EF?5:1/442(.'%+)'!+&$ !"%(&! !H«ÞéêçØÈÈÏÄÖØÁ™vsx…½ãéåâÝâìèÜØÚÜÙÕÑØáäáÜØÑ¿‘L% .v²ÇÔÔÑÒÎÊƶnA5     +!#7@BFIQ>-!&(&!"& '"*//%'(%$#(1*#$  + +  2jœ¦©ž™  ‘”ƒn|‡†riXflts_XZD2   + +   0=BE=:08PF>1)&4.0'#%,+&! )4/'!.49.+%7BOVUVWSOZPNRVTOULOZVHSE@?MGJII?( "&         + +  + +&)&!#%" +    +  %**').,,*'&%!'%+-('?/0ib&*-00.70,&*&& !   +     +   +   +   +  + +9MG94+%-'!)8>GLOKHD<43.8FBPWV\\L?:95EWOTDFLKIDGZ^bZS]\KRC:%(=GJ@ILKONV\SF0!(-!$0/3' :ua + &1$  + Lb_JA’–šš™››…^* =’«´»ºÀ©vq ­Ž¨©¥©²«³¯»Â²§ªÀÄ–h\`\VPg°É§¸µ¥³ÅÜßÛ¶­ËÓÊÒʱ¬ÀÈÒ×Óͽ­—‘ygnˆ’’‹‰…„”¬œŽ‘žÂâêëëéßÓƼ¾ÃÖâáÛÐÂÈɶ·»ºÀÓÜààáååçåæèçèëììëîñïðððñòññíééâÞÕÐÚäáââéíïôùüþýÿþÿþÿþÿÿÿÿþþÿüþþÿÿþýýýþúôìééæççääææèééëììíïðñòó÷ôôóôóëåìòóóñðïðîéçèãåééäàäèèääåèêêêêçèéíììéêïôõù÷÷øøø÷õóóòðñîêëêéçåââßÞßèñøýþýþÿýÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿýýýûùñêäàÝ×ÍÑÚßâåä¹{`SZYUDFJGA<>>89?5233/*.$##&"'$ "&$"'R¶ãèìäÖÄÉÉÅÛÓ¸Žvor|§ÝèåãÝâéêßÚÜÛÖÑÒÛáâàÛØБ>+w®ÄÑÓÓÏÍÊƹsDGUPB-(%+ /%! !#$%$$',$!$", &&#,+0$    + +.Z‹§¨¡œœ ˜ˆŽ€{€€qk_etrgPXkP4  + +  $ 1$#$%$*! "!"#"!$&'""('!( # '(+"""    +   +   +     +   /, +     + + +  + +  + + 3N"$ +   +  +           + 8HFE<,*-%"(8CBLHO?A;//&97™®µº»»¨vp¤ª’§¬¢©®«³°¼Æ¹µ²ÂºŠaTYZYV]Ƴ•´¸¬¨¯¾ÖÝÝÁ¥¿ÓÐÑѺ²¶ÅÎÖÕÍÁ¶¦›™{ji‚Š•‹Ž€ˆˆ¥¢†““’²ÜéëêæßÑÇÂÅÊÚäããØÎÎǺ·¶¿ÃÒÛáãâããææçèèëêìíííïðîðòðïðîêäáÚÒÌÌØäåäæìñöûüþýþýþþþþÿþÿþÿÿÿÿÿþþþÿýýþþûðéèèèçéçæèéæéêìíîîðððóòóöôôôôòìçéñõöòñðòñïëêæâããÞàåãäâââåêîïëææéííëçêñóòõô÷øøø÷ô÷öõóñððððíëéèâãáÜÞáèñøýþÿýþþÿÿÿÿüþÿÿÿÿÿÿþÿÿÿÿþþýýýûôìæàÛÔËÌ×Þâ߶v_WaJJQFF<=?9;:3;51*,/--%&1#'%!**! %!""!! ## E´ãêèàÒ½ÅÁÇÙή„ifku“ËåæàÛÞèéãÞÜÚÖÑÕÚÞåáÚ×ÑÅ‘I#)j¬ÄÌÓÒÍËÊƳr80   !(6@ACNT@,&(!"/-%!)("('$#&#&) %&"')     0bo’££¥¢¡˜Ž‘‹~†Šˆzle_dvxbWkva= +      "#:$     +      +   ) + +  +  + +   &! +  +     + +          +   + +    +  +  +  +       + +6KLM=03/$,9HBOPKJG@5*'/6EMQZaYRLA:=JQVKGMHFF>@KY_\ZXY[P?1"!$)5CGABHMNPR[QMJ8.#*1790! / #5:>* a}U?<(5!  +Eihfacƒ–ž šˆY#  :”¯¸·¼¾¦po«¢©¥¬¬¸¶ÀĹ°­À§p[^\XRY_†¾ºšªº­£°½ÏÝÙĦ±ÏÒÑÐȶ¶»ÉÓÕÑǺ¬¥˜{u~‹‘‹‡†—¢ŒŽ”ŸÐçëëéÝÖÇÄÉÒßæååââÝ;´¸ÀÀÍÛàäãäãåçèèæêéìíííîïïïïðìíêãÞ×ÏÌÍÏÚåêìñõúýþþþþýþÿÿÿþÿÿÿÿÿÿÿÿÿþþÿþýüùõîèåçéééìêêíììííîîïññóóõööôòññóôðìêîóôôñòôôòðíêèæåÜÛâßáäââäìððîéæéíêéçêïñðîñ÷øøøøøùù÷öõóôóòðïïìéèåãàÝÜáåíóõôûýþþþÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿþþþýýùóèâ×ÉÃÌØàܳy`a_NGPOBAD?<<98=43(2.2/#$)1,6.*!&'-.#$/.:?79(# #)'*& &%$.'5BE>@DB?#I¶áçäÜÎÀÆÁÍØÅ—thjjnºâæâÜÛæéãßÞÚÖÒÒÙáäáÚÖÓÛR.*d«ÂÏÐÎÌÍËŲp?2     + + +*6ABBPTD/)!###$ +&$%!! #"%!*$%  +*Xq„“œ££Ÿ“”‘~x„‹k`aluuWSr}f- + +              +     +    + +     +     +    +   +  +    %"3%1     + + +  +    +  + +     + +    + +  +  +          +    0JUGC5-+##.7?DKJENOE7,,56BKGTa\LD@7CJIJLAFLIL@EOQTQLZ_XP@0+"'8JIGNSJCLUSLVDAA<%%099=2+   +0#"'r~FUj1 "'  @eirwgmŽ—Ÿ£•†Y!  >­¹¼½¿¦lc“©¢¨›¢±®°³¾Á¶«¬¼UZ[URMW[t¬ÂŸ´¬¢°ÁÍÙØ̸°ÃÕÒÐб¸ÆÓ×Òͳ§œ”‰uvˆ‘˜‘‹ƒŠŽŸ—‹Š’»ÞèëçßÓ½ÃÏßæççèåÛÌÁ¸±¾ÂÈÙàãääåææèéêèéëìíîðîîîîíêéäà×ËÅÌÖÙæíõûýýýþþþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿûöïéæèåäçééëëîïïðóóðïñðòôñôöùõöõðððñòðíîððïíóõöõòîëëëéâÛáâäçãáæîððîèâæéèçèëìêîîòöøøøùùø÷øøø÷öõöóòòñïíëééæÞÛÙÜÜÝáõýüýýþÿÿÿþþÿÿÿÿþþÿÿÿÿÿÿÿÿýþýúîßÒÍÉÆÑÖ«}^_`ULJXUOBB=B>VQC;9B9@KemaC8I]d<1.Kd]_XR=/-R\9'72:DMGJTVFD=98DKQIBJWNJNGHb\HHKPYLB0'$.7BG8?ADCINT[`WN>=B- ! '.26?4.2*  1?97'C„jOyy?     ;Xhr€‚Œ‘’š™ž“~^'  3ˆ©¶¼½¼¥ke‹¤Ž˜©œ¢³£¡¤ª¸´®«©aAUcUUX\]`¿­—¬¯¢£½ÇÀÆÇÁ¸±Æ×ÍÐÓ¼´ÃÌÕØÏɬ£˜ƒq|œœ™”‘• ˆŠœ£ªÉåéãàÒ¿¿½ÐÍÏãçèæáÐƾ··½ÄØàèéæåçèèèçèêëìîðîëëìêçããØÏÈÍÖÞåîøýýþþþþÿÿÿþþÿþþÿÿþþþÿþþÿþýûöñêçåâäæçæçèìððïîïòóóôóòóóôóôô÷øøõööòîíëëéìñðëæêìîíêéëîïïêåéëîîëäàÜÝÝÞÜÜáèçäèêéêêîðôøøøúùùúøøùùùøøøøù÷óôóòñîìéêèäÝÜàæîóúþþþüþÿþþþÿþÿÿþÿÿþþÿýþÿþýýúðàÓÉÄŪ„jiZQW\unVA;;FPdprNDT]Y77?XVH=;>)1/FX?74YncH4GG/+Mg^J:DUA!!KUKC@:=8,>¢ÖÞÜÔľÃÃÑÆ£~eb\de_p¾ßÝÙ×ÛÝÙÔÌÑØÕÕÜáäà××Т[&! ^£¹ÇÍËËÍËÄ´o82 +  ",B@FONI6)&')% "!#"(#&$!,+#05   %Cbnq…’’ƒwƒ‘•Šwpl|gVV`i_UXoeA-# +  + ! +   +  +        + + %    5  + + +  $$"$)   + +  +  +   +   + +  +   + +   + +  +    +   + + +  +   4NK;959:/%279BBFLHJB?;>8:EKCHJQFF62;FGRLGBTKHIHEXZZNS_WNA5/,26>FB7:DGQFSZ]XH<8?5( + *1=8@>7=-  -GINHU‚_[Ž}I' +  +   7XhmwŒ’œ¡”€\'  5~¨¶·¼¾§uh„¤—©œš¯ª¢¥žª©¤°ŸS4LYRSSR]`´¸–ª°ž¢»Ä°µÂÁº¯¼ÔÏÏØǬÁÍÐÖÕÑÅ»ª¢šwv–•™›•‘¡“‹ž¨£¹ÞèæàÒ½¼ÅËÆËâæèéãÕʾ´´À¿ÐÜéêèæææçèééêîîììêêëéäâáßÒÉÎÓÚäñøüýþþÿþþÿÿþÿÿÿþÿÿÿÿÿþþýþþûöñéæåæããäæèééêîððòóóôöóóõôóõôóôôööõ÷õððîîìëêíðïìçãåææáèéëðíêåêìïîìèßÙÕÑÒØÛäçêçèéêëìññóõõøøúùøùøùùùùùùøøùõ÷øöóòðîìêèåâãâåæëôûýýýÿþÿÿÿÿÿÿÿÿÿÿþÿþþÿýýþüøîáÙÎŪld\[koovyN8;MVqop`HVmW@,G\J7-)-*'*OVA1-^kkb\X[H+ /RhfcMBLD,)KQUXTW]L,HbUMTHOH/ 3ˆÍÛÛÓ¾¼¿ÂÐÁœpc`WccZg¤ØÞØÓÕÔÏÌÊÒÓÑÖÚÞãÝÙÕÎÄ¥_'!$^›²ÃÅËÍÉÈÇ°p96 +#0=HDQPL3* $(%)"#&% %("%#')&,#&    +5Tlm|…Œƒ‚zkbt‡Ž‰ulkjwx_SYieNOdvuY=-0& +     +      +              (%"    + +  +  +  +     + +   +  +      +  +       +  +  :QNC=04:,!(15>DILHEGOA843EMLGYMEMB:98ECKKEDPPVJGKWX]O\^NME>1$&5?LLB>FHGQ^\ZLKB@74* + /A;Voy{Ue^I;+ 5aqrw…ŽŒœ ˜–€X&  .}¤­¶¼¼§md}¦‘’­¡›§­¤š—§ ›¯’I5GZ^WTKW^r©¼™§ª›¤¼Á°¬¾À·±«ÍÔÎÙ˱·ÊÎÕÖÑˬ¢ž–}w‹•’›™Žˆ…Ÿ¢•›¢¢°ÔèæÜÌ¿ÅÂÉÇÉßéèèâÛÐŹ·Ã½ÈÞäêèææååéèééìììëêêèæââÛ×ËÏÕÖßìùýüýþÿÿÿÿÿþýÿÿÿÿþÿþþþýþýúöðêäâãáäçåæèééëëïðòñôóöõô÷õôõøö÷õóóõõ÷ôðíïîîïíññðìéààààßáçëìêåãèèçççæÞÚÖ×ÒÔÛäéëêéêìððñòñô÷ø÷ùúúùùùùùùøùùøùùùø÷÷ôóòïîëêèåçãàáäìóúýþþþþþþþÿÿþþýþþÿÿþÿþþýýúïáÒβwieggtupqXFB9QhpmhT^k^;3T[B&"-+&$*MZ7#'Zn{scj^C&-TbNT]OSF)'IN@Q^deU,CYG>;;2.(#0zÂÚÝÓ½¿ÁÃκ‘fZWS\gZZ—ÓÜØÓÔÊÁÇÌÍÑÐÖ×ÝãßÚÔÉÃ¥\,[—´ÃÇËËÌ˱k?*  +09HIU\U5&$'"!!"%*%#+))%#-    /Ocgo€ŠwncZ^ix…wjcgilk`R_mdMVsiN8% +     +  +           +  #$,$     +    +  +   + +  +  +   +  +     +   +   + +  + @QPK>1044$+3??AHGELPMA9=:@DPLZTKFMC@9DKGFKGNMUOEGYQGPcbUPK2"&)AHNJZZWXSP@>??=- +#"394?>79,% +6Sy‘vOp’}fUL< 6- "2Tqqx‡ˆ‹“ ž™”tU)  1}Ÿ¬³·¹ maw¥”­ Ÿ¢¢œ”˜©¢£³ˆFGEYd[ZV]Vj¨¼¦ž¨›¦±¶°ª¸»·´©½ÖÏÕÔ¿µÂÈÔ×ÕÏ÷«œ’ˆw„•šžœŠŠŠ€’¨ž•¢§¥ÇáåàÍÂÅÄËÊÌÜçèèäßÔË¿¶¾¿ÀÙãéèääååèèêëìëëêéçåáÝÝÓÊÉÒÜáì÷üüýÿþþÿÿÿÿÿýþþþýþþþýýýüôíéåãáàããäçäêêíëîîòòòóöö÷ø÷÷ôôôöõôõôôôöõóòïðîëïïîíëéæãáßàÛÝÞãäáÛÛâÝÝÛÛÞÚØÖÚÙ×ÙÝßäåéééëììîîñóõöùøùùùøúùùùùùøøøùùøù÷÷ôóòñïìëêéåãâäæëõüþþþÿþÿÿþýüûýþþþþÿþýþýüùïÞÔ·Škap{~ll{pJ<=HbpZejijZ@ARVB(%)&'*PY?*+OglVKC9.#'LZ<4MWRM1#JK/8M_hP)CK8,'%"$\³ÓÚλÂÂÃήŠdZUV`]NXŠÒÜÚÓÓ˾ÄÊÍÒÏÔØÚâáÚÖËÀ¦a',[—µ¿ÈËÊÌÉí`@*   + %*78ELLR\D#%$"" $#""!2%! ! )0+%"   +Daion{Œ…hbW\[flcacdgfeXU[odRf†ubO0      +    + +   + +  + + + +     + 10.    + +      +   + + +  + + + +     >MI>489=)7@@@>HMNQO86;A:FKNLMRRE<8:=LHDMJTPWMBDJKGM\bWJF4$*'187=9$&Y©ÉÒ̾ÄÃÆÇ«xacXXc[IN€ÍÞÚÑÑɼÈÍÊÎÏÓ×ÚâÞÚÕÌÆ©W0 !$T’³ÂÊÊÊÊÆÇ«_A/ +  +  ,54FHSR[G0&$'!#!%&&)'0#"$% (!0K]_egknŠ~fdbYXWcQ\^^`h`WMWv]VmteVI4#     +  + +      + +  +       &*)2.    +   +   +   %+-&+& +  +    +  +     + + +    +8GI:-+09+ 0ABB>AKJLCN@728KKJZSNEJ<:=>PPIENNQTPJFQPHINQUF>2+&%/:8=EKIIEJGBGWI=@HA@;*486;:<679) 4Wp’yeŽ‡rl_b[P'cS $8Zmjƒ}…‹˜Ÿ˜•uG" + +?‹¦­¸¼»Ÿufy¤šŽ­¨¡£›•˜£¨±„eF6L^X^\WShŠ¼±—¥ž¡§ž£¬´¾¿ÀÁ¹ÌÕÒÖÔô¾ÊÒ×ÑÇ»±©¡™wo|– ¢œ‘¦¬ š§£§ÒãÕõ¹ÆÊÕÓÓÝáãéáÚÒÅ´´µºËØßàãåèèèèéêéêìêèäßÛØÒÎÌÒáëöûüýýýþýþþýÿÿýþýþýýüþûöîêäâàââáåçäæêëëëìðñðñóôõôõ÷õõøöôõóòòñòïîìëìéêèäææåååâÝàÜÕØÖÔÕÏÐËÈÌÍÔÙÑÈÄÊÌÊÎÑÊÏÖÝÛÜÜÛÜÝÝÛÚÚÛßãæêïðôôôøùùùùùúùùùøúûüûùøùùù÷õöóññïîìéèçáàäéñùþþþþüûüÿÿþþýþÿýÿþþýûúîÊŸ‡sur‡€ttqeTCI`_KAUoh]?/8VWA@Ž©¯¶¸½£m`£ ‘ª¦Ÿ¡š›œ”¢©€W@7G_][YVVf‚²¶•¢£ž§¡¥£¬¶¶¹À¼¾Ø×ÙÜκ¼ÉÒØÕÏûª£†kx™ ¤£‘‘Ÿ´§ž¢¢ŸÅÜÏ¿¹½ÅËÚØÔÙÜàæâÙÒŶ¯´·½ÉØÜßãåçèèéêéééçäàÝÙÔÖØÕÝêõüýþþýþþýþþþÿþýþþþþýûöïæâãáààáääæçèéëêííîññòóõôõõõôôôõöôóñîîîììçåäææäàÞÝááâàÝÞÜÙÒÓÕÔÔÌÄ¿¿ÂÇÏÖÆÀÀ¼ÀËËÊÈÇÕÛÜÚÛÙÚØÑØÕÔØÙÚÝáåêìñóôöõòøúøøøøùûüûûüúúùøøùøõõöóðñîìêæäãßáéïøýüùûýþþýþÿÿþþÿþþýýü÷ݬŒw€†sruksi`BG`jL7A`j]>20JXYKYT@00I]<(%E__effbD'9=1"!/9.3;.98!,/=9@45/'&R¤ÂÇþÅÂȾ˜gXUa\S??c¶ÚÙÒÐÄÅÏÔÓÌÍÏÐÑààÙÕÎȪe4  "M•´ÃÈÉËÏËĪeA7 + ++6@FOS^dP2&"#&(#+))(-,%$#)'( + (#   "Xwp^Y`ov…ŒŠi[d[TFEFSZY_VLLZghU`vsSKBI0     +  +     +   +  @8   +  (   + $   + + +.e‚ˆ‹‘‡vF   +   + + + +  + +   %?QK8,/>3-$&89>GLFDGHK>/-5;CMKPT?CLUZNFPVSNRLWYK=3& )4CEDLGKIKFEANNL?GONJ@+073' 083-3889;?0!7_††p‘˜~h``R9s_/*er/   4`jmv‡‡—˜—kD! +  ;Š©­¶»¿¦mb{§Ÿ®¦Ÿª¤£›˜œ˜¥¨vRD6@\^\XV[br¤·š¡¥Ÿª¡ ¤°¶²»É´ÏÛÖÜØÀµÇÑØÖÔÌÀ³­¡trˆ–ž£–‘Ž’¨±œš¢·Õɹ¹ºÄÓÝÚÔÕØÜâáÝÏÁ¯ ¬¯±ÀÏÛÞáâäääççèçæáÞßØÏÙàááê÷üüýýÿþþÿþÿÿþÿýþüúøõðëäßÝÝÜáàãäèéêêëéëîïòñòòóòôôôôôôõõõóðîëëçäãáàÞÞÚÙØ××ÒØâßßßÜÜÚÒÖÜÛÕÓÊÅÆÆÊÓÔËÇÄÁÅÍÓÏÎÍ×ÛÚØØÛÙÔÊÍÑÎÎËËÑÔ×ÜÝâæéêíðóöö÷úúùúüûûüüûûúùùøøùù÷öõõóñìêèåâááäéîìñüýþþÿþþÿÿþþÿþýýüîÁ•€|†wiaTU^o^GJUT?245FE;*(18==:8/$%//+$).48H=46) #"$JŸÀÅÂÃÅÀɸ•o`[NW]Q?7XŸÐÖÕÒÐÑÍÓÏÌÍÏÊÏááÜ×Òʯe.L¸ÆÈËËÐÉÅ°`9- +!*7DJMTd[N/#!$!#!!%"#,'*)"#$* ""  )Chyl\RNb~‹ygWSZPGGFQZ`bWVLbkdXozcHEHK:  +        + + +  % +     + +  +    + # + + +   + +   + + +6lˆ‘“•œ™‚U- + +    +             (AHC5*.<2#&.68CMKCMIPKA525>BLYVUOIG:8>DKPJHDKQTJF>IMPJITXK?+ !+-:ISPEDTKCBBGSF?GJKM<&*;;8#%6>416:>=D<+5gŽ{u•“qceYA+cœ’Y.Yp/#"  .^oqˆ›¡œ›uF"  A«±µ¼¾¨rfr¦‹¯¬¡¨ž ‘š —¡¢zY>:@U]^\Z\dlœ» Ÿ ­¤ž¨­©§»Ä³¿×Ø×ÜÊ°¹Ë×ØÕÑʹ¬©”{hw‘›£ –Ž¢²œŸ¢­ÊǼ¶¹ÀÍÚÖÒØÖÚÜâÞÑñ¢¡§±ÄÏ×ÛÝáâãäååæäãÜáâÔÎÚäçèòýýýýýÿÿÿÿÿÿþýþþýöìçãÞÛÙÜÛÝàããåçèêííììíðïññòôõóóòòöõòòòðíèèææáÞÚØØ××ÔÖÙÖ×ÔØàââßÞÞÜÚÚÜÝÛÙÙÔÔÕÒ×ÙÖÒÐÓÕÐÖ×ÓÕÙÞßÝÜÞÛÖÐÖØÒÐÊÃÀÆÌÏÑÒÛÝßàæêíðóøùúûûûüüûûûûøûúùùùøøøö÷õòðíêèçäßÜÚÚåöýýþþýýÿÿýþþýýýýòÌ£ƒuh\WOEDEFKG;26.*2&.-5-+(# #"!'($%    C‘³Å¾ÀÈÃʱ‡bW]VX_QG=OŠÉ×ÒÎÒÚÍÐËÉÊÐÍÓáÜÙÙÔÍ°k0 L·ÊÍÏÍÎÊç\?,   %-:GKTT`TF6 &$"#!*%!$! ! + 2PUfmZG?ESjzyqaMKMEDBFVZa`]XUik_apnUBDJJ>& +  +  +  +   + +  +  +     +  + + +         +! + +  +  + +    + + 4l‹‘“™š¢–†\@6002.       +  +   +  )HM?0)07(#%.9:?CG@HHEIC:5/7>JZX\LKI=;=DOQPIDKLOLMCELMKKU[G>3 "103GKLGKLHD?EFON;BIEE9.2=A@?"'<598812;B<$:q‘w~—…lhdiD!V”œy@Ra,! )\qv€ŒŠ’šž›™}EF’°°±·»©pfl¡£«©£¦˜Ÿ“Ÿ™ššuVB82SYXc[`]nµ œ£¥«¢“˜¡¤w–¿¼¶ÒÝÙÞ׿´ÄÑÚØÔο¯§›‡jp–œ›‘ˆ˜ª§“œ¦¦»À»ºº¼ÆÒÔ×ÚÙÙÛÞÝÑ¿²›¡©¶ÆÒ×ÛÛÞäãããååàßßäß×ÓÞæéë÷ýüþýþÿþýþþþýþýüùíàÚÚÛÚÛÜÜßãäççéêìîíîïððòòòõòóôõóóôòñïíêéæâÞÛØÖÒÑÏÌÏËÓÛÝÙ×ÚåäããçäåäâãâäçæçèèâàáÜÝâåãâáÝÚÚáâæääàÞÙ×ÙÜ×ÑËľ¿ÅÁÅÈËÐÑ×ÙàäèíñöúúûüûüûûûüýüúùùùøùúøøùöôñïïêéåáÝÛÚåòúýþýýþþÿýþþýýýõϤke]ZLODC9:370.4/0(,'!-),&,*--!#$"!(- ;ƒ©À½¼½Àʲ‡j]V[]`L:?PÃØÒÊÑÞÒÐÈÉÊÐÌÒáßÚÙÔβl6#N’ºÅÊËÐÌÇäX:.   + $&1;@IRW^O@&$" $#'%#)%##'%" + # 1\vj]OH77:QdtonbTHMDA9LUJ]eYXZikQhzmB>FHPA&          +  +#" #"$    ! + + +   +   +   %"!# +     +    + 4k„Ž”““˜‘‚_JUSNJC5! +  + + +   +  +   + +, + + + +  'DPC3$'$*##.9=?IGCBM@;>84+;GHLW\XFC>;BCS]QMIKGJJNOOXUJXS^L@/##358JINVVLNE;IQWTBMNPB>27<@CE0 ,>3323=BC:+05:0,`xŒwk`; +))   + '_jr}‰Ž’•Ž’~K    G“«¯´¶½¨uee‘Ž£±¨¦Ÿ¥±µ¡œ¤c^J>/H`_[WW[\„±¦—¨¥®¡Œ“›££Œ¤Ä˵ÀØÛØÚи¿ÏÚÚÚÕ̺µ¤š‚wyŒš•••—™—ª¦Ÿ¥¨®Áº´¹¾½ÈÕààÛÜÚØÝÕ¼£—Ÿ°ÂÊÑÖÙÚÛÝÝáâäááãäãæãÙÝëóûýýýýýÿþþýýüüúõïçáÛÛÝÛÜÜàäããäçéëíïðïðññòòòõõóóòðñïìíæåâáÝÙÓÉÇÌÊÏËÐÒÖÖÞãâæåàåñøúûûûüûûûüþþþþþýýùñøýýýýüüüøö÷ûûüûø÷ôïêçáÝÚÔÏÊËÄÇÈÄÂÃÇÊÉÒØÙßâçíïõùûùüûûûûûüüûúûûùýüúøùöóñðïëèçáßÞÝáèñøýýüýýýþýýù丕mhh^UQE8<83240-602*(,%)#%%!(* +'% #" ')),*(&!&i¨¸¶¾Â¾Á¡tYafab\I?KSk¬ÓÎÉÎáåßÑËÄÁ¶ÆÞÜÖÔÑζq.FŒºÊÌËÏÌË¡W=4 *:9=IROP? ## "" $$'$!%   $a‰‘sYTN63JfoibiVQPJ@??PVN[ZRWfqZ[|rRJCHQMJ,  + + '$ +     +  (%#$)%")*),)'     + + + +      '$   +!  1jŠŽ’—–™—†i]^__\Q<$    +        )BQ;&$)31"$4:?ELBGOKDB;.+6ALGPZNEBC>/CJEAJNLK;-7A;CFHC#&6=855AEH8(T[‚’u}˜‰wmhqqiLiŽ•“…va2/# + + +)]lhx‹‘‘–™“{F  K‘¥±·º¾§pgk–œ…¢­§¨ž´½»£•™ˆhdQ/2FVV`\[^ay§®š¬¨« ‰‘¨¡¢ ºÓѺµÒÛÕØÙùÆÓÙØÔÊö©Ž…~‚”š£¤Ÿœ•‘¨­žœ¯ª¶¾´±¸ÀÇØãßÚÙÚÒ×Õ¨¡§¸ÂÎÔ×ØÚÛÛßßÜÞßàåãçèæàæóüýüüýýýþÿþýüúöìæãÜÚÙÙÚÛÚÝáâåèæèêêìíïðññòñóóóôòððíêêéèâáÝÙØÕÑÌÊÎÒÒÕØÝàåêîñòðìòûýþþÿÿþýþÿþþþþýýýýûõüþýþþýþþÿþþüþþýþýýüúøòëèäßÜÕÑÊÎËÈÄÂÈÎÏÒÓÚÞàåéíñ÷ùûúûûüüüüúûúùûüüûùù÷ôõòòðíèæäãÞÙÚÞçóúüþýýýüýù輓paeZNKJA789;8)6@:1.)#%%$44:6:1$$$" *82>--0- 09596,&%,+$.% %6EDAB>=3# W–­®½¶·µ˜vhmZdlia`^[s¡ÃÅÄÇÝãàÐÅ·ª¤µÊÉÆËÐË·y4J¹ÈÍÎÑÑɾžW<+ +(*<6>DQRA, #! #(& # + +   + UŠ˜‘€lgSJ;Vfrp^VJYLH95=QSS`ZZ]inb]qhJFBDQMI5"  " +        #%&"%) '&'+,4/" +  + ,   +  +4        # #"  +     .mŽ’šœ œŒm`eda^X>&   0@:%     + + +(HZE'#)+*&-29AIPOXK=438EAKHHJVPUUER\_Y[_^[QM?*"(4?FBGUVQK>;<>EDLNXPE845;CEGIF?$0?75;EEG4*,C`ey–€rpfzTi—‘}f`<% +Qlqƒƒ‚‹”™m:   H—§¯·¾¼ªyhn”¢…¦¬¦§—®¾¶¦”„`eQ91DU\d]`bbn¦¥˜ª§§©˜Ž Ÿ ¦ÅÚÕŲÁÙÖÓÜ̶¿ÌÖÚÕËȽª¡’€n€—›¨©œŽž©›ž©©±Á¹³´ÀÌÚãÝÙÛÛÑ×Øį¬¶¸ÈÒÑØÛØÜÜÛÝÛÛÜáåçèèèêñûýýýýþýýýýýüøîéâÝÙÖÙØØÚÝÞÜáãæèéëíìíïñòóóòôõòòòðíëéèäååá×ÚÛØØÖÐÐÖÙÛÞãêïóùúüþüøúþÿÿÿÿÿÿÿþÿÿþÿþþýýü÷íôüýýþþþþÿþþþÿþÿþþþýþþüùøøôíãÝÙ×ÖÏÍÊÌÒÒÒÒØÝáßâçêîñ÷ùúúúúûûûûúûüúüüûù÷õ÷õôóðíéêæâàßÚÙÞèòúüýüüüù㸌~laYWJWWI*!(3CGILKPLFFE>DOAFGGD?5!#5;6;=A=:,1Et’ƒkˆ’yptrxˆPs–•]V[= , #Xgn€€ƒ‹”•ˆiA + R’§²»¿½¤qflŽŸ‹œ­§¥ ­¼³¡ ˜}Y_YN;=Tb`YWebc¥’©¥¨®ž~•£¥±ÊÜØ˹¶ÑÙÖÞÙ¾¹ÈÔÛØÐͬ¦›†u~«¤š” Ÿ™ «°Á»²·ÆÓÜåâÝßÜÕÚÙǵ³ºÀÍÒÔÙÛÜÜÜÜÚÙ×ØßãèèéìòúýýþýýýýýýûøñæÞÞÛÚÛÙÙÚÚÝÝáâæäèéêìîïïòòôôôòòòððîëéçæççåäÞÚÙÛÞÜÙÚÛßåèéï÷üþþþÿÿþüüÿÿÿÿÿÿÿÿÿÿÿþÿþýýýõëãäðùýýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýþýþü÷íçáß×ÓÛØØ×ÔÖÛÜßÉÛåääåêðö÷ùúúùûûûüûûúûüüøøøøöòñðîìéèçâàÜÚ×Ûåîøûûúøß®‰€zqeQQehbH?>NXY[MWTK;.09@OHGCHG:'"+GKCBB?E9$.B@3/&:=,!3FC4#"79'/DA/(% 7{œŸ¨Ÿo\_^`_^aWFQX]b~ž±¼ÖáÞÕÉÂÁ±˜—•š¯ÆŲh/8†³ÈÏÏÍÍÈ¿–MD0   %+5BLJFG:'+  ,.,'$ HWfP[heZowlbt|aED>:MMGD,  +    "   #! +   +   +     + + +!  #'#(+,044/:<*     + E + +     !!!#   +  +    0j™Ÿ¡  Ÿ“vea`gd^I0 + +  $ActoR' + +       +    0EN?.%,0(%$/7?ICGCJIB7.)/GH@EBGRSSL]c_a__b^YC?+)/CFVSNXMFIHJKRJFMOCH?76=?DJFFA=.%:6=@@??<:N|”vf˜–~x|xt—‰Lk’ŽjH=RU''" + +\gmy‚€‰‚’“ŒrG   S”¦°»¿Á¨pgfŽŠš®­¨¥¦µ°—–~Q[ZJ4;J__a\dfg•°—¦©§®™ƒ”Ÿ£»ÐÞÙÎÆ´ÃÜÙÛÜƱ¿ÎØÚÔÐDz£ž’yrƒ›  š”ŒŠŽ”¢™¢²²»À¹ºÎØÝáåäåà×ØÙË»¸¼ÈÉÍÕÕØÞÝÝÙØÔ×ÙÒÚèêìòùüýýýýüýýú÷ðèàÚØØØÚÜÜÚÛÞÞÞãäæèéìîííðòôõôõôòïñïëëêååååååäáÚÙááßßàãéïóøüþþÿþÿÿÿþþûþÿÿÿþÿÿþÿÿþþÿþüøíçâàØàêñùýýÿþÿÿÿÿÿþÿÿþÿÿþþýþýþþþüöïèáÝÛÝÙÜ×ÖÚÝÚ¾àâÝÚÛáåêîóøúûûúúüüûùúùûúùùøùùóññïïîêèåãÞÛ×ÕÚåïôöðÍ¡†ƒlX\lycG:=YXLCA/ +  +&4=ELOU7,*,!! %*0(#(  +  $hš¤ŸšŸ›“€qpeZfqvnODHG==L\]R_`[]nqi`zvI8FE@KIJ>*    !#  %# $  +   %#&.-36336234@>/ (&)1%'..$#$'  0   + +   + +    +    !  ,jŽš£¥¤¤ –vegaeaTB+   4MNOVj{vY.  + +      +  +   +  6IJ9*(+&%%6=??GEDFFB;485:ACLUVL:32/=JGGLET][PLW`^ZY]_]XSB.,5>GHLJUILMTQSLLOKXMF=277>GNKLOH9%%(;AB?DHE@dŒo€¥z}…‚‚ŽcyvL:@cZ&+"#Umq~„ˆ…ˆ•ŽqA L–ª°¹¿Ä®sge¥…•­¨¤¡ž¬¨—–}MT[B.0P^UT\fhj”³›¤ª§­œš«¶ÉÛÛÓ˼µÒÛÙÝѺ¹ÈÓÖÛØϾ«Ÿ˜ioŠ–œžš”“ž£³¸µ»¿ÂËØÜâççèãÙÏÔÍÁ¾ÂÆËÌÐÔØÜÜØÖÑÒÖÏÄÑæìòøüýýüýüúöïèâÜØ×ØÙ×ÙÚÝàÜÝàäâãæèéêëìïðñóôõôôóñîëççáÞÛßäååâãæßÜâãäéíñøûýÿÿþþÿÿþÿÿÿþüýÿÿÿÿÿÿÿÿÿþüúóíêãÜÜâÝÚÛÝäìóùþþþþÿÿÿÿÿþÿÿþþþþÿÿÿÿþýüúõñèâÜÛØÛÜÞâæâáÛÕÑÒ×Úàåëòõùùùûüûýúúùùùøø÷öõòóòòñïîêêçàÞÛØ×ÔÖÛϧ‹o|slknq]F=Q^X<51,;KU@+'QW;/-/>O='.JOOPTJLE+*E@3*,6E;$B@3;?6.=9%#BTJBA:=,=m{y‹‹”€jfXXW_b`S^bdbhs‘¤¶ÎÚÙÕÏÏÓÉÈÛÛÔÁÁÄ°n+ %=ƒ±ÈËÍÍÌÇÀ˜N?, +    + +"-=>EKB*'/& "$%++(#   + +,h“—•šžš•…nd`QXRdkiVWTILVTVUXcVWirt\`vgD238DHIF;.    !##!!!&+.'% !$! +   "%$%-!%+-+(6949<::>?FIB6) + +0?OKI`ZHPLKJKGE9.,#   !!   +   + + &")$!   +   +   ('  1jŒ˜¡¦¥©¢•}iib^\U@+ + + (Vkwvnn|ziD     + + +  +  +   *CI9%#! !"-75369CKJRRF;332,#?>-+;;=?8+(;H7+*#"#>nwp™™­Ži[GKHOUeƒbVK]`…¢Ÿ¯ÇÎÐÏÑÐÑÈÅÚÕ½®·Á°l.  ;‹³ÄÍÏÍÍƾ“H>- + +$'5BC::/"+'! !$"#   &jš¥ŸŽŠš•‡sYX[CLDHgi[\W\a`KOLVcZap~nYcva=./:CPM=?0, +   + !##!#&4*#$& '-.450/5.  " !!   !#$ #(*-0+//2+,7<>:<JED3,.8;DQPVRD:513:CKH=KMUYPTRZ\PVXc^[S?:(+BBGMIQOMV\QVWH>[\KE5*?@F<65* + + +    '%&%,*+!&$,5<8/37B<&  $   %# $$*$-70/:5869:@?BOMMRINQL/ (>U__a^cjbaa\PVSLHF@7,/-+1('(.#*     + +   *'(&-0#  +  )352*%%&$!3fŒ—Ÿ¤¨§£˜ngb^\UK6  $[ˆ…vnv~{gd^M6  +        + + +    + .B=1#%&"'%+0@CD@=F=GB6+.9:AHFTH<7-*+:IKEHDJTSMRP\]QY[X]]K65&3>@CKNLKMQ__WRDFXYKD7-9B>@SXNS_XE;$BFFDH_Ÿˆ˜‹ttytb_jŠššwMBR…ˆlI960  Ldq‡‘—Ž‹“›ŽnE  + G¢´µ¼Ã¬u^`€¢“°©©¤£”—”•wKBZ[E:Ic]_SV`_y¬ –§«­°»³—•£Ÿ¬¾ÚÜÕÉÀËÞÛÞÖÅ·ÂÑÛÙ×É·¢˜–uu…™  ”’ŽŽœ¬«´®®ºËÕÜÜâèèèéäÓÆÇÂÁÅÈÏÐÑÖØÙÖÑÑ×ÒÄÅÅÆ×éóööñèáÙÓÒÏÎÑÓÖ×ÙÝßâââåååæçèèééìììïïððñðïïíæãáÞ×ÖÛÞÞÚàåëéêìëîóøýþþýÿþþÿÿÿÿþþþÿÿþÿþýÿÿþÿþýü÷òîèçèæåçéáÛåææååââäáàßâèñøýþüýþÿÿÿÿÿÿÿþÿþÿÿþþþþýþüöîéæååçæáÜÚÖÖÕÉÂÅÌÖßèïôùùûûûúøùùúúúùøøööõõ÷ôòñïîìêæâÛØ¿q`nkfegfZebJ?BP^S63:DMF438GS;53BYQ:(0FTF5836/)NI;82E@, !4:'*5;=<$,=CC84460'R`¤¦™¬´¿yfifod_T46;AEFSi}|Ÿ­¶µ´¶µ´§«¶º®Ÿ±®p1 ?}°ÅÊÈÊÉź”E:67/4F:,(,'#   RŒž¤£nisŠ‘gNLOKI>G^o\UaavmUJ=Ocg`ln[UhkK38638@F:18(   "  %! !"! !*)%/2125:=B;/ +  +#&%+  #( !%(/++.723:A9BA=>LKPKGWOWVG-$;Qdcihkikhgea\bUME?460-*/+""2.   +   +   +, "('')0 "$/=KNPNPKMD5(9k‹•ž ¦¤¡›…jefc^SJ=('_ˆŒˆyttyruseI- + +  +    +  + + , +/D@-!(%"+/5>FJA>A??74602>=GEKG7*.)+>EKFCALPQPGRc_``bZ\TF0 #5@ECJNMCP^b[YSJNRVRF6.9FGAGTWPXbYF1#*;  + K‡£¬´¸¿°ydep§“¬«©¢›‘•˜–ŠhNGN\L9@^Y`Z]bd{§£–©©ª´¾«˜œŸ™³µÍÛÝ×ÃÆÜÛÙÙ̹¾ÊØÝÛϺ£™¡‘~q~  ”‹š­¬³«³ÇÕÚáÞãééééçØÄÂÄÁÆÌÏÏÎÔÕ×ÖÓÓÔÊÄÌËËÓáÞâßÕÍÉÊÌÎÑÒÑÕÚÚÞßáäææéèëééêêëëìííïîîðïíìéçâÝØÓÎÒÛÞßÛâèìííîóùýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþýþý÷ñíêëæêëëéèéãâäæääãáãèèäÞáààåìñòùþýþÿÿÿÿÿÿÿÿþÿþÿÿÿÿÿþþüøñëçææâÜÙÙÖÕÏÅÀÄÍÒÚãêñ÷ùùûúùúøùùúúùøùø÷öùöõóòððïëéåßǘdbfmaT]OHRaL>EMi{u…”••–šŸ›²¼¼²Ÿ­¬l- 2€°ÅÆÆÇÈ·ˆIE+ + + !2<=A.('!$,'-'   &$Jƒœ§«Ÿ…hfe{ŠtbJKaOJAEcmYTZhxqO;BWaaoxgMZnfF64/8=3 + +"!""!.' %#$$&/-.*&,.-2874<49?OOPLUTXYXXL/,@Pjsomrknkh`a_a]ZKA<:6-'*$* %!    +  '%' #%"     %DSdcaefig\MCGp’™¢¥¥¦¢ˆsghbfYJ?85('%$ '%.]„‰ˆ}u|ƒ}vri[9 +     +  +    +    /GD/#&)&)27:CNIBCBF?370-:FLNSF4--.6CJKOK@G\NSCQWedWXYbYP<+0??>FJOPOZaW^S?RYKGB:28AIKI[VSVY[K72'!7CCOu–‡yŽ•ƒtz…xbcŸž||…sƒˆ}Q+((.% + +  P`t•’Œ’’t< + C‰£³¶»¿³ƒlfo£•–¯¦£ž•–“•”‘gJ>F]E9A`e^eddci–£Ž¢¤¦°½¤–Ÿ™±¸ÆÚÝÜѽÑÜ×ÛÖ¾¹Ê×ÛÚϼ© ¦Ÿ‰wpŒœž–‘ˆ‹œª¨³±¯ÆÓÛâáäééèéçØÄÁÆÄÆÎÒÒÐÔÔÓÏÏÖÏÁÈÓÐËËÏÄÂÆÃÀÄÊÊÏÒÔÙÚÛÝÝâãçåèééêêêëëëìíëììíïììéçãÞÚÚÓÏÏØßßáàçìðíð÷üýýþþÿÿýþþÿþþÿþÿÿÿÿÿÿþýýýþü÷òíéêèèêêëëìëëçåêééææäæèêçãåãáßÝÜáðýþýþþÿþýýÿÿÿÿÿþþþÿÿÿþþþþùòëäãÜÖÖÓÒÔÌÅÆÇÈÐØÞäíòøùùøúùøúûùúùù÷ùù÷ö÷óôñóóïëèæË›ia`e\KMBDVXBB;DKR^YUGB6//2IIVORJA2&#)9GFILI>A/$,6)$23 %"$ %6>823%j­­³°²¹”vhgqnueQ;5@=7;7BLCFIJ0 + *'# )#"")#&"!6%  ("")##%++(*2510503-)588FVXT^]ZZ[T5*AWgsnv}ypfaf_][YUJA996$&+1.)%     +   +   ##   + &E^g_ehmke_ZW\r›¡¡¥££Špjjif]QE‰ ´¸»À³—rev’”®ªŸ™šœ••VF::HA;@Zh`^ab^a¥“£ª¨ ¢€ˆ¢¥¯½×àßÜÄÄÙÖÙØĺÂÐÚÜÏò°«¦›ƒt‰™›‘’‘„Š–¨¤ª²°¿ÐÛããæêééèçÛÃÀÄÉÇÌÔÒÒÐÐÎÉÒÒùÆÔÒÊź·¼À¾ÀÇËÌÐÕ×ÚßßáàåçççééëêëëëíïìíëìëëëêèåàÛÖÐÔÔÕØÜãäæëóôôñøýþþýþÿÿÿÿÿÿÿÿÿþþÿÿÿÿÿþýý÷õöòðîìëííìêèêêììíéåìîîêççèééêéêæãàÜÚÙãñûýþþÿÿÿþþþÿÿÿÿÿþÿÿÿÿÿÿÿþüøðæÛØÕÓÑÔÔÍËÃÄÉÉÑØáéðôùùüûùûùúûøùøú÷øøùõôñòõòïìéÏ›fb`_PIBQ>NG@<;86:.'58;D>;0#%(+/4/09207'!$(&# "!B-!&oª³±²¶¸rpijrpaKA3:<8Oe²®¬¶¼½¿ÂÉÅÃÒÔÇ«—›™c, 4y°ÅÆÈÃÂÀ²…>G. + + #1@>,)&'#"$"%$&+#!   + !2rš£«­ª–p_WWUflfRUccQ@I[caW^e]MAHQdbhffZSchI10.543>@815, ) +    + #%",/5649:47>AAABSVK?IMLKYKK>$&.(,263/,1-,)1/(-*-% $%+"') $!#".(("%&%)).00;EU[[_XU[SR8+E[mov‚y€|xsjkb_e\[K@>>/23/$"C  ! + +   #$"    + 1E^fY]fkmkfega€‘—›œŸ¢¥ˆtolkj]QI:BSU_\WZefnƒ‹‡|††{sxpiJ.  + +   + +    + + !#06103,/     8FM7"!(/&!(9>A==OYID?:;15;>BL]]G?7581FGIMW]\[^PGHZ[NE8/=AIHZYPS\ccWAC=),>Qx‚p‹—Žrn€‚skƒŸ¤ƒbxŽ—Žƒ|H$')85 Bev“š˜–ŽŠŽ’sD +  >ˆœ°¹¹À²›|k{£›Ž«¨ ™˜¤œŽ”‡S;ACE13>[`b^ddhi°–¦ª«¢Œ•„‡ª¬ž ·ÒáäãÍ¿ÖÛÙÝÎÀÀÍÙÜÔº³­¦¡‹m€Ÿ™’Ž’“¦¥¬µµÄÓÛæãåëêêêèàÎÅÃÈÉÐÒÐÓÑÏÉÎÔʺµ¿ÎÍɺµ»¾¼¿ÄÉÏÔÔÜÝßâäâäééèèêêëêëìîïðíììëêéæäâÝÛÔÏÐÕ×ÚÝãåëò÷úøùøüþÿÿÿÿþÿÿÿÿÿÿÿÿþþÿÿÿþþÿýûîêìéííìðñïîíëêëìððíèìîïïîêçèçêëìéæãâÝÜÛãïøüþþýþÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿþþûñæÛØÙÖ×Ø×ÍÇÌÄÂÅÍÔÞæíõúúûúùùúúúøùùùøóõöó÷ö÷óïñìÓ nYVUZNMMGHEF7??AA7G==6563-)63-5.5)04,/,+/,(&+)# ')'-)&'#!&!$!""+!!#)' COR)46aª¸º°±³’{oruhkfK9=65=Ne™ºµ¶ºÀ¾ÃÊÎÉÂÑÚʯ““”a%1z°ÀÆ¿»½´‡=@.    "&2<-$0*'$-# )3() #)`—ª¬¯±­j[POWcie]Zd]N?LWXbQEW`XICSe``pfQOg]:.%1411>;624'  + + %&#"*3.95>=@7DD>;@@788596;>?>A>@>DB@EJJLGGMSGKTONB77X{n8CIKh¥ºÃµ®±˜…{}iel`B:76>ARZš¸³´»ÀÃÉÌÒÊÁÏÔÈ«™”e)< ,o®¾¾»½º¸·†@6+  )68""!!!#'((#   "" X„¥±¯­¬¬”pW@B^lcale^XH4CejeSATog`N\j\bneMZgT:-06-4866484$ + +   + +",*-67?9:@?AIG>BIEQXSSU__RHFRN@&/M^_€—‘rss~|}‹–Ÿƒ\g‰’’‰sL-%(C‡žj' Ffv’™ ”ŠsB# + + Oˆ®½Àãwˆ„z œª«¯­Ÿž¡–—†\[\kmS92S`aacefo†§™›¦®Â¾¡‰~‹±³™©ÈßããÚÅÃÝÛÚÝÕ¿ÀË×ØÌÀ¼¶®¨œ€y’’–™Š‹ž«¬¹¿¹ÊáèãåééëìèâÖÌÉÅËÐÔÓÏÒÉÇÓÅ·¹ºÀÌǽ­´º¿ÃÈÍÒÖÛàâæçèèèêêêìííëíïðïððîììëèåàÜ×ÎÉËÓÚÞãååìñöùûþþþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿþþþýùöñëêèêîðóôôòïìíðññòñòîéíñóöôòìéëëëîïìíééçåâÞáäçìóøüþþþÿÿþþÿþÿÿÿþþþþÿþþýýüù÷ñëèâÜÚÕÕÒÈÅÆÍÔÛàèïõùùúûûúûùúùùöøøùøøùøõôò᫃s{yozuvxwpotrxsrpnposhfidiinfktpn|rkotptqpqurnrpkfmrtwtztqtsruyvvsuorpswshVDBWg:@AFKt¯»Á¹¾»’ƒ€oieYG;87@AQ\—²²µ»ÃÇËÏÔÈÁÏпš—š˜\% A9HDBCPSZ_YZdhilrs]1  +1=B<BX_a`bgehm_= &8Qhy…„‹}sxzpsqqor`WSOAHB83*,*"%!!    +     / (!   (  "198H[ixvunptr‹–œœ¥¦£„pmefgdVH?CNZa`_aiswˆ‘‘ˆ~{‚‚vd`cej\J@<=<'      )175?9>EKLE<=1 +  + +  + 9G<-"&$%*/5;B:@F?CH?9645@?C\bPI@2/$HIL\ZRYd_MHJQQS>+?B-.(",0730{QSSLJPTTLU`XUeeerndmlcA*! .Nj„‚€‰††Š‹ˆyt|}ng`SRJE@9:/..'%$    + +  $'!*" +5     +  -)*3Wqq‚}uqwpx™¡£ª¬¢ž‰odbde`TG>=HUdd^]doy‡Œ‹yr‚~r_X\epljry€v\2   + + + + + )827:;19A@>@52$   +   + +6?:' # %0:<8]r•›¡¡—‹ŒŒt? + +  R¡«´¾Åª_fœ¥š«©¯³¬ªœ—˜„j^hot]91A__gdgfdy¡¡˜¬«¾Ì¸ª°‘¢›“´ÐÞããÝÊÊÜÜÛÛϽ¼ÊÔÕ¾µ®¬£¢™}Š˜–œš––Ÿº±°·²¶ÔæàåëêêëëåÛÔËÊÑÓÑÍËÆÄÏÁ°±¼ÃÇÉÿÅÉÉÏÔ×ÝÞáãæèèëìíìíîñïîïîïòîíîììççåßÙ×ÛØØÛáâæëîõûþþýþÿÿÿÿÿýýþÿþÿÿþÿþÿÿÿþþþþû÷ðîëíììîïðñòóô÷óðîëîïóøöõóîéîññõõ÷ôòêêííïðïîìíîìëéçåäââåèìõùýþÿÿþÿþýüûþÿýþþÿÿÿþÿÿþýýùòëåàÝÛØØÙÚ×ÚÜâëñôúùúûùûùùùøùøùøùøø÷ôæ¾™”™—š–ˆš ¦  ›“œ•”›“““™™–ššž››¡¤¤š–š‰Š}{ƒ†…„ƒ…ŽŒ†Œ‘™—•ˆŠƒynf_fsou ÐÊÈƹÀ³znqgonZG' #)%""'#% *'%  +1m¡««›—••†rodMI[USSN^aa\``\_igLe‹—Œo[aa\_iSH[W8.#)+%(17-  "(# + + 4<=GD=8>=@IHLRSQKOZ``khozz~~„{i< (?N[`gka\ce[PSNTOVQYTUI;FFPQF:=EPC722:;>KZZSKY_``V[R[LA.##:GF]nHDIL[`TV[OTfVNJ9-:BDALa\[^_\RAH\b]R?;L|œ†rngm„yŽ‰oNQ‰“‰‹€RN_B:s§ª£Ÿy;;Yo’ž ž“ˆm= R“œ©±½Æ³tW|¡«ž‰¨©§¦©­˜’–‡msuxye<-7^deefggt¤¢—¨±Åε­±¦–•š‹¡ÅÚââäÓÁ×ÝÚÜÔûÇÑÓž²«¤£›‹–œ”›¸·¬­¤£ÇßßåêêéìëåÚÕÍÉÌÑÐËËÆÎϹ±¹ÀÊËÉÂÆÍÐÑÔØÜßâæèêëêëîîíïïðîïñïïñïíîëéåæâØÙØßãâáçêïôûýþþþýþÿÿÿÿÿþüýÿþþÿÿÿÿÿÿÿÿýûøôíêëìîîîððñõôô÷÷óðïìîîñôöõòíæíññôõöõñíëîîîððïïïîííîëéêèçâãããéóøýþýýþþûúýþýÿÿÿÿÿþÿÿÿþþýüúòíæâßßÜÚÙÜÜáæêïöúùúûùøùùùùùùùøùù÷ó韛 £¢¡ž¥¤§¥¤š‘“˜¢¥¡ž š•™™—™ž£­¬©±·º¶¬˜”‹ŽŒ‡‡‚‚„†„`{…•¦¥Ÿ®¹´³²££¶¿Á¸«Ÿ˜“¨¨§ÇÚÔÉÆ»Á¯‰vumgaf[QF@LI[^V…¨««¿ÇÃÄÈÌÀºÆŲ~`sZ* + %c¤¶´·»¸·«x<; + +  ,'&(" %'& !! +(d˜¨®¦™˜š’zabRDM[TSNI[og`UQ_c`bTkŽœŒjab[\f_OThP5.& $&#()2,*  *   ,7GIFHPKSR\UZ\bgcqmmnrpwz€†ŠŒ‡{F $.@_kmipojupnijhensijdeYUT[_^XNDO\OF;>:7?@ETWINRSQEDHSQIGIEOTUU]hqkJ% &Igv…Œ“‘‘ŠŠ†xytliZ`WTLGA9,##%$ +   +  !$*!#%%    +;BEK_owytyvx˜ ¤¥§©¢Šnedhmh_NHOX^``XR]gsw~‰sn€Šwidnyx‚Ž—¡œe9& +    36=?==CDEB832+  #    + + +?J>&% ,4876F=@=AD<0(1,69MXVXOB4/3=DLDIDQX`KQX]YTS_XXQC1$+9GIENKGGIQ_V\aJSaVPN3,;EACJR[]``bQIS[]ZSA5Ex™}ljbazƒ†xXKi“‰pBQeGA“¨¦¡™vA  ;Yo‘œ ›–Ž‡‹o@  +X—­¶ºÄ´‡Zj¯ªŒ¡¨ ¤§¯™–“ƒlzo}…gB.5Vacfefrlœ¨¥ªÃ詪ªœŸŽŸ¾ÕâãåܼÍÞÚ×ÚʸÃËËÆÀ¸·¨£™–—“¢ ˜“‘¨¶£šŸ¤¶ÜÞãêêçêëäÚÒÍÊÏÒÌÉÆÇÒ̺¹¶¾ËÐÅÆÌÑÔÙÚÜßãäåêëëëìîïïïïòïîððïïïìêåãæáåÚÖáæäæêðôúýþÿÿÿÿÿÿÿÿþÿÿþüýÿþþÿÿÿÿþþþüùòðíéìïññóòòòóõöøùøóòîëëïóôôóðêæììíñóóóððìêîïñññðñðñðïïíîíéæçåááãçñ÷üþþüöôúýþþþÿÿÿÿÿþþÿÿþýþþùóñéãààÛÜÚÞâçêïöùøùøøùøúøùùùøùùù÷ëdz»À»¾¾¾½ÀÇ¿¹±¥¤«µ°º»°©¶±ª¬­­¯½ÉÓØ×ÛãèáÌ«˜‘‘’œŒ†„ŒŠ€ro‰„Š•®µÂËƼÒÝÚÚÕ½¾ÕááÕÉ»¬­»ÈÌÈÖÞÓËÄ»À¯‰umffZ`SNMTY`aXUi“¢ªª©­²¢›§¬›uŠ’vV" + +'` ±³··¶¶¬{A0! + +  + ,(%#!&&$!    #!S‘¦°®«¦¡ŸŠpdaUIBNVTQWbvpjZM_\SWUl˜•m\^]]pYGclQ9(*!,.$3:.  " " 6@YXQU_cehurirrrx}‚Š…„‚|…‰Š‡xH + #+F_m~{tuv~vv{‚vv€„wxqnj_Z^a`aSSTdWCGFAENOPJFBBE9>:88>?79=CFNLJfjlhI!$.Kfu†‹‘‘Œ‰…†…€yxsm][YVLGA;0#)3,  +  +  +  &$(!! "    !.BQa]dkrrurpxu}‘š¡¥«©©£†nfdgji[LJZX]^b]VZlsr„op~‰}jbiy}y‚š§£˜zS:$ +    !;>?>?;DMTMC831!!$ +   =B=+ !%/445=E=@DFC>4/%-7>GQQQP=20.@KPBDNJLUJMW[YS\LOTJG2'(7EB?L@>COS^X]\PPidZJ6-=?F?JJTZ\ZVKJOU]WXA'-Z|eci_\xŽŽ{bRS•|~aAPS@c—¢šš’wF  ;Vp‘› ¡ž–ˆ‹rC  +!\¡¯¸»À²švU`Ÿ£ˆ£§¢©®²¤šg|~…\8/1E=?>CF>IMLYersiI" %')@`}ŠŽ—’ˆ|„…vvlbRUUWKA90'0-)$   +  + ##-'#$!"*"  #3F\cefortusmlhw–ž¤¨¨©¤‡m_bfif\MISY`dgcdcntx‹…wq‡€k[bpr{ƒŒ¢­¬žˆbB-# +     + '>@A>>AAS[WL=88&! + + + + + 3;0"#%1;98B=MFEA791(,7DPOONG<:6-:JPCFHLJUCLZU\UUOTSJ7-)HI<>KN\[^UWZ`^SC<,3CC9DLMQ^`SLILT_ZVD)2KZajoel‡_[Ua“‘morS=QYYƒœ‹‚ŽZ(  8br‰šž¤Ÿ‘‹Š‚e=  + V•¥±¼¼À´¥‘aRx™‹£©£°º·¤™”|dz~ˆŠ^929Wb`\hmgt©¦¯¿Ìº¥«¸¯Ÿ”¦ÃÜåçææÒ¶ÌØØÚÙŶÂÅÇǽª–œy•œžŸ—Ÿ­§š¦¥§ÃÑáêçêêëæÛÔÌÐÎÏÊÉÈÓϸ¬¿ËÌÊÉÑÕÖÙÞáàçéèéêííëîìíðïðóðîðîðïîëæãäæåäåáäêïõùýþþþþþþÿþÿþÿÿÿÿÿÿÿÿÿÿÿþþýýü÷ñîìíïðïòóóó÷õ÷ööôõôôóóòððêéìîïòòïèßéðïíðòíèçêéíðïíîðïñôòôöõòóòñðîêèêäßÝÜåäãßæõþþÿÿÿþýÿþÿÿþþÿþÿþÿÿþþýõðèèèãâãèæèîðóøúùûüúùûûúùùúøõñóððññïïðïëëêãáßÜÙØáçäÛ×ÙØÐÍÒØèïñòñõøöðåÆŸ˜¡¶®¡˜Œ’Žˆnbq…Žœ²ÄÑÖ×ÏØæçääÕÈÜåêëèÖº¨¨ÁÏÔÌÖßØÎǼī~plfboqR::O_M)#-8k–}R   W˜°³¹µ¼´¨w:6-   +",'$/"("! + "" ?‡¬¯´·¶­«¢—‚d[fONBJQU_fc`ufeca`KUVj‘ˆ{g`WecKLbc4<98F=<@EBDQENWuxzqR.#,1:^vŠ“’‘’ŽŒ‰ŒŠ‡ˆ~vj`^_VH?840+*()"     '!'%)(-%# + + +  + 3Ifofgqqsrqpss{˜Ÿ£ª¬©§Žldiimg]LEJQ]flea`jpt‰‹€pw‚…qXZnt}‰ ®®¦iG+"!  +    + +.>>>??DDO_XID?<+ + + + +5G7"3!#"&15<@H>EG3*)/6@MOMBE=365AIONSFHNICK[WSMUNQZH6."&-?@NPQXfWVJEUW^VF5!.)1Xnxnd€pYXSr—jfeE8_oŒ›  œ’‹‚j9 + +  T˜¨´·¿Ä¹ª |V^Œ’ §¦¸Å»¡—•…k‚…e?*3U`cT^dbrŒ¤“§°¾Ë¿®°¹²¤¢ÁÙåèçèݽ¿×Ø×Ø̼ÁÁÀÈÊIJ ¡‘~}‰™š¤™™§§ž ©ž²ÇáëèèêëèÞÑÍÊËÏÈÆÎÕɯ´ÃÑÏÎÓ×ÜØÜããåèêêëëíïîïïïðòóñððïîîêêèããäâæêèèìóùüýþþþþÿþþþÿÿÿÿþÿÿÿÿÿÿÿþþþýü÷óíìîîïðòôõõõö÷øø÷öøõòðïîíîîëéêéëïñðëäçíïñññìèèêëëíëèèììñôòõöôõôöôñòðîëèåãáÝØØ×ÞòüýÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿþýüúóíèæçæáÞãêïòùùùùùúúúøùøúùùöõõôòòñòòòðîíêçäàÜÔÞêæÝØØÖÐÑÐÙéðóôôøù÷ïݹ¢œ¥º°Ÿ’Šiox‹—»ËÓ×ÕËßèãåàÐÒâéìíéÞȱ²ÆÓÍÆÒÞÔÈŻĮjph``b]GFZcL" "&]”xK  + T˜¶¸º¶¸¶©x9<* + 3+"/6+#$& "! A{¤®²²¶·²®¡tecZTGWOPb_^egnla`TJUZt•‹pa^\c]IShT7&"##'1$  +  + ! %Fdglosx„‡„ƒ„‡‰‹Œ“•“‘—‘’•—š—’|Q' (7Pl„‡€ƒƒ‹ƒ†ŽŒ‹‘‰‡j^Y_`ZT]huicPOTVYP\QAE:@@KEBDDAJKOZ]a]lqz|lO(!/0>Vp‡Ž’‘““‘ŒŠ…|„tmib]WL>6,817+ + + + +  )#$(+*+#!"!  5Ujvkimsqqtv|~€Ž˜ ¥¨­ª¥ŠomnookbNGFGXdjfb_gqnu‡€vy‡‚oSMdvy~‚™¬¨£–sL0! +  +  /?><<@@GJSRF@>8'! (&    =L:%("!&325==8?CBCC0+#,6*4@@GH@DLHQKFGKQIJFKTMH,'6?CJAJJFSK\VTUPO]VPI4,4A=?KQ\XW[ZUOHQ\_UE0%3"6fˆƒkSN]r’—u]cW057Iv’ˆu\duujM 5Yq‹”šŸ ™“~~d@  [›¯·»¿¿³¬¬—p[c’ª§¦µÃÀ¡›•|n€‡Š[8-1E]bfefaV{¦—¡¬µÄ©“š¤­«¢ «ÃÝçèéèãÒ¸ÂØØÙØúÆÈÏÏÉ»¤–—Œn‚—œ¤¡›‰©§šœœ—¾âéééìêåãÔÏÌÐËÈÇÑɺ¹ÇÍÒÓÙÝàáãäæèéêìëîíîðññðïðïññïðîéèãÞÛÔÙåééíòúýþþÿþÿÿÿÿÿÿþÿÿþÿÿÿÿÿÿþýûùöòïííëêëîðòóöõ÷÷÷÷øøùúùøõðìììêççëíêçççèêëêäèíðïïìéèçéêëíîíëëêîóõöøõøøöõôõôôòñíëêäàÛÙÛÝæóúýÿþÿÿÿþÿÿÿÿþÿþþÿþÿÿÿÿþþýúóíæà×ÔÙàéîò÷ùùøøùúùûúúùøøùõöö÷ôóôôððîìèâßÛÙèðêãÙÕÓÒÕÚæòôóóöøïݽ£”—¹¸­¢—Ž‰‰ˆsio„˜°ÇÒÙÖÎÙææåâÕÔçíðòðíâÚÓÊÊÍÁ¸ËÛÒÍÀ¹Á£|niea_XKE[ymK% W + + "KnS8  Q–µ»»»¹·¤u=5   #!4/+%#-!&"# ! S‹¤¦¥¦®¯±¯¤šŽ„lgfcedSKVWZf`U\MUZKHa‡™†kfX\gb@ScJ. !#+,#  + + 0^q‚€~††Œ’“””—œ™›žš™™œ’œŸ Ÿœž“Y% 02N|–œœ™””“’’ˆ’‘‘’˜†a_Z]Whfr}skXZXKZ_bjhe^aceebfuvxwxxy€€‚…‹‰sa9*23=Mqƒ‹Ž“”›–Ž‘‘‘‡€{mhdZ[RB=52/1)  +   +  +'*5-0(+,')!)    (:Xknfgpstsu~Œ—¤©¬¯®¥‹shgmqif\WSM\cega\crrw„{t…ˆ}\@Gcrz}Šœ¡¤oK1"     + +!/8;@6;BDIFA=;6(  +#GL=-#*.&#24::B@?@?A?81.-7AMQSE;-&(4?CMCE@BIJH@LVVVINRVI<$)4HHME:>IMSQRUMJVb[HH9.:CAJJMQ[W[XQIHPX^W@2('0lrWPWmŽ›—gQZA.;V‡§®ŒmJ4=V[;  +/axŒ“œŸ™…x_?  !S–®·¸¼¾·®«¥“lW®ª¡¯À¹ —”m~ˆ’[:+2De]ecf`[z§› ª´Á£Œš˜  ³µ¶ÈÜààÞÝßÛ¯ÉÚ××É·ÀÇÌÐ;¸¦›š‚v’œŸžš–˜•§Ÿ’œ´ßêééëëæÜÓÌÌÍËÇÐÑÄÃÏÏÉÓÜÝâãåççèëêëîîïïðñïïðññðññïìèçàÛÚ×ÔØéïñõúþÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿþýþúóêçæèêëêíðñôö÷øøøùøùùùúùùùôïéìïîîííðíçåäæççåàåêëìêééëëííííîîñîîðòòôô÷øø÷øø÷öôòñððïêçäãÞßßãéïùüþþÿÿÿÿÿÿÿÿþÿÿþÿÿÿÿÿÿþýûõìäÛÙ×ØÜæëðô÷ùùùùøùúúøøùøö÷÷öööôòñðîìæÝßåèìñðéÞÓÏÓØÚéò÷óô÷øê̤”Œ¨¼·©™–ŽŠ‡xnoqˆ˜¨¼ËÙÛÔÎâçæèÞÒàíñðòñïçßÜ×Æ¿¼¶ÉÚÐËÀ¾Á zlfdbk^K=h„}S!5^ + + + 9SB* I˜¹¼¼¸¹²¬n51  +,/-27+# &$% !  @”‘–™¡¢¡ ¦©©¢’|lgkspr\Qa][_^_a_ae_T_|˜—ˆk\UXeSC[a@'!"# %.    " #,Wmƒ‡†ˆŠ‘™˜”œ™šœš  œŸ¢œ›š¥¦¡’a+ + )IWPG7!!%)EIKAAB>OQGJOQTKQKV\K5""&:CHOG:@KNUWRYMJW]RON:,=@FCDJVYQ]ZMHMMQ]^G5MZNH]}”–oYG.,=ƒ±°²‘xS*?O' 0_z“™ ¡™…v^7 + +  ^™®´¹½¾¿µ®ª¤^c˜¨£°»±’‘zo{Ž‰_<,-Djeaebdhp¤¦¡¥°¼­£ªž¡»¹¹ÎÚÙÙ××ÜÝж¾ÖÙØϹ½ÆÉÍÑŽµ¨‡pŠ—ž¡ž›œ’š¤š’‘›«ÙêéêìêçÞÓËÊÊÈÇÑȽÍÕÌÆËÛáäåçêêéëìíïïðñññïïñðòòòïìéäâØ×ÖÛØÞëõùüýýÿÿÿþÿÿÿÿþÿÿÿÿÿÿÿþÿþýûõîéçæçéêíïñóó÷øøøøøúøùùøùùøõôïéêïðððïîíéèææèååÝãéééèééëìðñíëîïñïïðòñòòóø÷ùø÷øöööôòññîìëèæçâããæêðöüþÿÿÿÿÿÿþÿÿÿÿþþÿÿþÿÿÿþûóëáÞ×ÑÓÝåìóôøøø÷ùùùúù÷÷ùø÷÷ùøöôñððïìáÙÜçññðóðàÖÕØÙÜêóøöõö÷éÚŽ¨¶±ž•“…„wnp}‘¢·ÆÏÙÛÎÖèéççØÓçîññóóðçàâÞÒÄÆÄÏÚÐÊÅÀ¿Ÿzqqi\gfPSˆzX" + Y +  +$;7% 9”¹¹¹»¶´ªd01# (=54=4%"))$!  +! +Afx‚‰‰’™žœœ£¬©›‚bjuwveaga[binnifgcU]u‘’‰i\VR_HB^d:("")2#  + + !"+Wj‰ŠŽ—š•˜œœš›¡¡Ÿ£ ©§¡Ÿ £¡¨¦¦˜c5 +,>Tƒœ¤¥¦¤£¢§¥¦ ¥¢ŸœŸœ›Š‚~ƒƒ{|€{xƒqfXX]Z_cehkeipipw{|}u€|s~~ŒŽ‹ŽŒuY+##.249[t””—•“—˜˜“’ŠŠŠŠ‚wthhiYTR<:70- +   +     ,,2**,3$&!&%&! !  !<^ljhqs~{rt||t{‹–¤¥ª­¬§’unmihkaY[`[]afd`\_lqs€ˆ…xox„xaE8Kkw€Œš  ›ˆ`=(  + + +  +04A=40;?JILH<80  +    EM9"&#3=)980>?BB9>2,'3?>==91,15BQQJ@5+.0<;INB8=>>ACLRSRUPQ\TK8.2@IK?bb{†–”••–”‘’—Žn`w€wi\Wmd\Z}ˆvneffVav—€g_W^]GLhQ-& ##$ +  !"!)[q‚‰–žœ¢ £  ›œ £¨©­¨®«§ª«®¬°°¤r7 +?V—£©¨««¨¥©­¥§¨¨§ªª Ÿ•||……„ŽˆtaXb`e`e\ahjiekqnbx|‚y}†ˆˆ‘Ž“ŠwV1 *53>Wz‘’š—”–™˜—‘‹‡†~rkd_]NB8;5-$     /-+'.')3,'%%#+&$$#%!  $9Xbhfjuxrqqu{{{ˆ–Ÿ¢¦«­©uc_]_YXSNSYWafca`itrt‚…zou‚pJ27]uux„˜œ¥©†^=#  +     + +$38>:7>DHJBBA:99/  +     +==) &)58=DA>>@<;7(4/8MU\TE;,,50=NM?<! d™®¹¹¼»·¿·©ž•‰bN{¥¤Ž†‹}z„[3)&7]jebcfkk–ž™­§³°¡¥—“ž£¥¯ËÌËÑ×ÖÊÂÅκ¸ÐØÕ̽´¾ÉÑÔĽ°«¡’‡ž ¦Ÿž’ŽŽš“‚†•¶àèêêìéßÔÍÉÉÊÙÞÏÀÇÈÃÀ¿ÈÝæççêìíííððíïðððñðïðïîìçâÙÓÉÌÏßæñûýþÿÿÿÿþþÿÿÿþÿÿÿýþþþýùôìêèåäçæèêìïðñôõõø÷øøøùøùøùùùùøùöñðíêêëîëééêìëíìëêêæáçêìïîêééëëêêêêëêììëëíñòô÷õ÷÷øø÷øùøøöõôôòðñððïèæêéèèççèíóùüþýþÿÿÿÿÿÿþþÿÿþþþþýüõçÔÎÇÏÜèìïòòøùö÷øøøøø÷÷õõóññðíëæÚÑËÕçðêî÷òéâÛÛäìöùöòòêɬ–¢¨¤ž˜‹Œ‡zpoq‹•´ÉÓÚÕÎÙééçâÑÏÛÙÞæëîîðëßÓÕÐÊÓÑÖØÏɾ¿»›whhfda`€Ÿ—lHI'    + + 8†´µ´º·¸ªk31 +   B)&$;4+,(#+($     + + @Vlz…Œ’›££¡¢ ›•Œ”œ‘vbk{xseYgg_em{oijhba~““wg[Wa^EShJ4&&$'$(#    "# /jŒ“š™ž¥ ¢ ˜Ž˜žª«®°°¯¬©«¯³°´µ§x3 (8Pš ¬°®®¬¨°¬«¯«¨««§©¤Ÿ”††‹Œ‘‰‹“ŽhZdjheelqtiinwxty~…„ƒ„ŠŒŒŽ‹’{S-,/)/Pl~‘”›š›žšŸ™šž˜Ž‡}ynjkfZK??:9/" +       64-301-'''*)(%0'%#! "*9Xdcdjuvtqssyw~‹—¢£¨«®©”mgdjf`QKNTP]de][`ljk{†„suƒ‡oN22Nksz‡˜¦­¬¥’lB*!   + +  (;@B<=CKQPKHE;40'     +>8-& &5;;E?=>?789++)7MR^VN=4411DHGC;:>JGLLVWZNDBTYJ2 "/UT[VKMaeYQF3:F?>KU]SZ`^]QAEFPYQ>%45//(!AhhZI98/"#Dgkz‡ƒzJUwP 2c•›Ÿ¥š–ze>  bŸ±ºº¹¸¦±¿¯ž ’zN\˜£”†Ž€y‹ƒŽ‘X30-?4"   +  + "7;0.6*+*&)')/*(('$    )CB<>::;8*#'9GISMG><<75AB>=;8CHDJPWN[T?CRVM9 6BLF?BCNHRTTZPHTfZE?<1B??FNYPP_bXNIGJOSZ+!($%"   +  5l„œ›šŸ££§««¯¨£««³µ¶µ·¹···¶¸¸»¹®‡H + *CYƒ¡¨¯¶´´µ²··¯°¯°­­¯­§žž–˜’‚jbkhmportmqz}tt|ƒ†‚…Š‘‹“›‘“”}Q*):38Cc’•šš–—–œœ–——š‰‡{pocaYJD891$ +    <:304+).0--(2"%0(!    .>\ddgis~€†ustps†”¤©¯®§’sifgid_UMSVX[ce]a[hqqy†Š…pr…Ž‚[7#3_mltŠš¬±­¢V/#    +  + *<>>JEJOW\RHNB?5!     #<6*"$.69AC?854482+.-;ETZQMC@:96AC@<;=AHGBIOUVPGDTUIC4"7BB??>DMNOWRZLKM[_QE7-?KKJFNURY[WISAJRb[>!#*(6.#A7;7$3hpp‰‚‚€\8A@% + -`{‹’˜š ™‚f>  + ^—­µ»½´–‹®·¨š¡kDp—”‘‰’‹x‡ˆŠh3*2UjbaeqgdŠ¡™¦±Ÿ™––­ÊÁ½ÁÎÖÚÞÛÍ¿ÅÎijÉÔÐÑοºÁËÏƺ²­ª–t‚›¡›”œ‘†”•Ž £ÁáæêìéßÓÉÉÇÙäæãÖÓÆ·´¼ÁËÞäçëíïïíìîïîðïïíêêíëäßÕÅÂÅÓâðûýþþþÿÿÿþþþþýýþýüüøôðëéèæçééêíîíïððôöøõöøùù÷ùùúøùùøø÷õôõôðíéêêéêëééçãâàááâáãÞÖàãßâããâßÝÝÚÜâèééìììííðïñôôõööøùøùùøøùø÷øùøõôöôôõöóóòñïìêéçåäéïöüüýùûþÿÿÿÿÿÿÿþÿýüóáÓÉÍÖäèëíò÷÷öôõö÷õõõ÷ôñðïëàÒÆøÅÛëí÷üýûòäâèï÷ù÷ôðÚ±›‰Ÿª¡•’ˆ…rnrŠ”¬ÎÝÝÓÅ×æçèÞÏÔ×ÓÒÜçêêéëëëëèØËÅÀÌÐËÊÀû–ywmfk §jck, +    + +     4}­±¯¹¹°¡s2-  (+!* &,(,)!  +   + 'Khcx…–œ¡¤¥ª¨§¥žœ¡™Œˆ™“|t˜£Žw…~{`bz~oin`GTr{m]Xi`VhW1)'*,"%  !7k“™ž¥«­°­±±²±µ¶µµµ·¼½»¹¸¸¹º¼º®‡K + (@Vy“Ÿ°°´²´º·º¶³µµ³´­³±¦ › œ™“”’–•ˆldgklrxpusp}uz|‚}„Œ‡‹Š‰Š˜–””zS%#!68?J`s‹Ž–™™—™›——žœš—’Š~kg`WWG<=4&  +  79/851/0233+"#"!(+%   +!/E]geflswz‚vqpqo„‘š¢§«®«•xd[Z\[XVLQXS]gkjc]erqw}„}ihƒ_4&Not{…—©¯±¦b9( +   +  +   ++9=>JEIWXVXTND=7)   +    +&<8-"!$ *-68C8:<:126)(38GSaSOD8542>EE7?ECGLHEOTSFIHSXH<*)DK>=JEFLPURTNKS^SJE67CAHNSNMRZ^SGNEQUa[A%%*6: "-9mŠ˜Ÿ¢¦§¬¯³´³³µ¶·º´··¹¾¾¼¹º¾¿»½»±‘M  !CMw•™¬²´³¶·¹··µµ´¶·´³­¬ ¡¥¢œ™˜’š£“xgmiisrlv~~‚|„ƒ‚ƒ…‰‹Ž‹‹‘”–˜“”sI$ %2;CL`nƒ’–™˜ ›—žžš˜˜–’ŽŒ‡|ppb[PECB1%   262641:22.0.%%$&$'$ *=[iiikutwwrlnrr‚Ž™ ¦ª®®–|ia^``XTMQQMZgij^]gkou~{~mc|Ž„g=""Bdqs~“¥°±©˜oB/! +      +  + +&2;@ECABLRNOSJF94$" + +     $?A8$%($-1:>;;:B>A5-*'/3DPWPIC:::9EL>=9@OMPIIWNQLINOLJ;'4>J?5IIJPOVWSGP_`VLE57@FKSPJEV[^XNOJKPWTC#(/.%"%&D8":rxpz„‡†tSD3# 2_~ŽŽ“—š™¡™Še> +  iœ¬µµ¸¯…Zdpnn\EE^iieceb\bV]^A+!*.?IHSQKPKWsnqqyuw|vv‡¢¢›©¾ÏÔÚÞÝ×ȺÂÕνÈÐÍÓÅ´·ÅÍËû³¯¦‚Š  š˜‘Ž›§”£¯ÑæêíëßÓÊÇÑàåéèèàÑ·®º¾ÂÓàäçëëíêêëêììììêêçâáÙÈ¿ÄÆÓæ÷üýþþþþÿÿÿþüüýûúöñìççççèëëìììïððñóòòóôööøøøøùùøùø÷÷öõôóïîíêæäâßÝàÞÝÞÚÖÒÒÒÎÍÎÇÆÄÇÒÐÅÄÄÅÇÈÉÍÑØØÙÚÚÙØØÛÞáååèëìïñòõõõ÷÷ùøùùõö÷÷ùùøùùùùøøøõõöòñíìèçääâàãîùýþÿÿÿÿþþþþþüùîäÑÈÑÙäèêîñôõõõôôõõñðïìèá×ÌÀ´·Åã÷úüýüüøéãèóúùùøïÖ°™”´­›Š~u|uƒ‹¢¾ØÛÖÇÑçèåâÒØßÙÓØãëëëéêîïðêâÛÒÅÈÌÌʼÁ·“ukgks†£žxs¦¯†?  +   +   + + + )|§®¶·¶²¡h6/'   ++.,+%##*41) + + "%   +'Uutmo‡š£¡¡¤©¡ ¡Ÿž¡ £’ˆ“—…’¥ŸŒu†}ncimmoeZes„ynijiq^XkR=3-,$'')$ +  % FGMLHKT\_ZZOMXSUVA& #*7 +GGZs{tŒ‹‹wH-"" +(WrˆŠ•””•Ÿ˜‹k7  #h¢¬±·²¬n%##"" "$!!%$*)(,=?LzºÍÐØÝÛÛϺ½ÖÜÀ½ÕÐÏ˾³¾ÇÉÈ¿¶³®˜„—¡¡¢š–“¦¢•¤¦ÁàìîêÝÓÌÇÌ×àçëêâÓó²¾ÁÉÚÞãêëïëêêèëëëèåäáÜÕǼ»ÌÓÚïúüþþþþþýþþýýòíìçäâáääèéììîïððñðñóóõöù÷øö÷øùø÷÷õõõóññíëéæãâßÜÙ×ÖÛÞßÜàÜ×ÐÓ×ÒÌȾ½ÁÍɾ½¼¼¾ÅÆÆËÕÕÓÖ×ÕÏÊÉÎÍÓ×ØÛàäêìîððóô÷õøùõöøøùùùøùùøùùùùø÷õôõòðëêçâÜÚÜéõþþÿÿÿþþÿÿÿÿþýùëØÏÏ×áçêíðóñòòóòòñïëéâØÍù³²Íêøûüýýûöêâåñúùù÷ìÔ­“­»´®ž–Ž‡}qkp~Œ­ÌÜÚÐÈÜçåçÝÒßßÓÖÚäêêìêêêîñìçÞѾÅÌÊŻõ“xnklky–ƒi–¼º›R  +    + "qª´¶²±¯¢e&0+  + +10'%#(/,!" +$&#   +   dŒ†op}‹Ÿ¢¡–“Œ’šžœ ¢¢”•¡œ™®£|xƒqhjjbdj][mnurjljlsbekS61213/&!$  ?x“¢¤ª­³¶´·³¸··½¼¿»¼¾¿¿ÀÀÀÁÁÃÂÄÁº”T + ASs–«²¶¹¸µ¸ºº·º¸·º¸´³µ¯¦ Ÿ¦£££™’¡¡•~tprsw€ƒ€|€Šƒƒ‰ŠŒ˜šžŸ›Ÿ›‘jA$""&&;9Yaihfn{€…wojps‚š ¨¯°©˜|e`ab_WRFJNRW[`baagpnq„€tenˆ†nO+&Okqp~—¦­ª£]4'   +    + + + + 1@>@;@;<;6?60'!#)7CZ\PG@8<.:EBHJRTQKELQVD8- &0;GNEFJL\VTULLJ]bQLA87@ADHIPPTX_WRHLWc[^G- $!2,2Ndtmyˆ‘m=151 %Pu‘”“’‘”“Žj4  +h¡­¯±­¢W  $)6v½ÎÓÐÓÙÚÕÂÀÌÜÍ¿ÒØËÑϾ·ÅÌÐ÷µ±¨“ƒŠŸ¬§ž¢›˜ž§œ¦¤¶ÛèìêàÔÊÄÌÊÓèëèä×¹ª¸¿ÃØÙàæêìëëéèéêèçãâßÔÉþ¿Ð×àìöüþýýýýþýýýöëàßßããæççéêìíïðñòòòôòôõôõùøùù÷ø÷ôôôòðììéåßÜÛÛ×Õ×ÕÐÖßãåêëéáØÕÙÕÖÑÑÏÉÈÏÐÌÉÅÂÅÈÉÉÊÑÔÖÕ×ÕÓËÇËÊÊÆÊÑÓÔÜßäãéíîïñôõø÷ù÷ùøúùùúùûûûùø÷÷ù÷ôòïìêèãÞÜÝåðùýýþþþÿÿÿÿþýþøçÚÕÒÛáçëðòòóòòòñðíéçßÓÁ¹´«µÑðúýüüúúöéàâóûøúöëЦŸ¼½µ¯Ÿ˜’ˆ}tu~‚ˆš¹ÒÞÙÊÌâäèçÚ×âÝÕÛÞãèêììéèîòïèÞÓÁÈÎÊǿ¶’zwikn†jf¬ÀÀ£S +  + + + + (n¬¯³²®©Ÿj/5) +5+"#+-# +! #)"  !R‰˜on†¡ –‹†‘š–™ ž•ž¢—‡˜©© ªª—ƒ|ˆqins^ff_cprqfnogmue`nQ675-1-'  " Ay’›¦¨®¯³µ·µ³¶¾¿À½¾½¼»½ÂÁÁÁÆÆÈÅĽ•Y 6Jr™¦°¶¸¸¼º¸µ¶·¸¸»¾¸¹·µ®¡œ¡œš™—˜Ÿ™xoqty€z‚†‹†Œ‰Ž‹‘–—š˜ž›œ˜——nA  &6@@Mh}‰•–›šžŸ™ššœ˜˜“Š}oxeg[KI@7+(     :86276556(*(/+,$&,-'" +   %=Xkkjlntyywpjlv‡Žš¡§­¯©˜ykdhig`UKELQ\]efb_drnn€†ƒuho‡vT-":dqrzˆœ©¨¥”g?'   + + +  + + + &57=@FIEPKN]]]VP\Q]^]F, ',- 4YbSlvˆsA/=0)Kp’—–™˜–’—“i- + + f «­°ªšI  + +  +   +   !")1yÂËÒ̽Í×ÒÇ¿ËÝÛÂÊÚÐÏÔȹ½ÊÎÆÀ¸°¬Ÿ…—ª«£¡ •œ¬œ¢ª±ÔçìèÞÓÉÄÈÇÑáèçåÛÅ»¬µ·»ÉÔÚåêìíìêêéèèæâÝÕÊËÉÆÒ×ÝêïöýþýýýýþýýøìâÛßáãæççêíðîòðñòóôôõõöøøø÷ùùù÷ôóòðïíèããÞÚÙÑÐÑÐÌÕØÑ×àçìïðíäÝÝÞÞßáÞÜÓÍÍËÊÄÂÇÌÑÓÏÐØÚÚ×Ù×ÑÏÒÒÍÉÀÁÃÅÉÏÑÕÚÜàãéìïñòôøùøùùùùûûûùùûùùùùúöòòñðêççàßßãêñ÷ýþþþþþÿþýþýõèâÝØáäëíîððññïððíêçâ׸®ª¹Óóúûýüú÷óêáæôûùúöèȤ®Ãµ¨¢Œ…†‚~€‚|ˆ£À×ßÓÄÓæåçáÔÛçÞØÙàäâçêëêêíññèàØÏÒÌÊǾÁ«‹usnsm„‰]k­ÃÀŸN"   + $k®±®¯®­Ÿl+8%+,!! ")! '#&2#   +  X˜‘xtz™–†x‚“›¢§¡¡—›ž™Ž“¡®««¬¤…}€uomefmq_nou_]nskrl[_cK;27/03( +   + +"#A~–¢¨ª®µ´·µº·¸¾¾¿ÀÂÂÁ¾ÁÀÀ¾¿ÃÆÆÄ»œT$ +7Cu—¢³¹»»¼¶½»¼¼½ºº¼¼»¼·¬¤££¢–˜–”£Ÿ˜sqy~z}†€‡‹ƒ‚‹ŒŽ‘“””œŸ›šžš›šŽd8!(:=7Iex’—›˜˜›™“›—’””‹‘ˆ|~vhcWMKD0"& +   +  <;=:50414,%-.%(&&$)%#   +   ,BVhojlq€}~prrx…Ž˜ž¢¨««š€qinsodZEEJQW^bcg\alpmz†Š~ihv{pU5+Wruq|• ¡˜kA+   +    + +   +  &9>=883"$'')/.77:=2?O02//)(09LWZ]HA:9<>=D?:E;BKEIFMKMMDAVWN?( /DDDDBCAV[\TQIPX_ZN@64>BAULGKO^]RSRSQ[ZTA& $#() =O>H^flfY>9@* +  &Ot–˜š›”˜–‘j; +  f§±°´¬•?     +   + + + "*x½ÌÔÔ¾¹ÒÕʾÆÙàÌ¿×ÒÉÒξº¾ÉÈÅÀµ¬›„š®¬§™™”Ž§«¥¯±ËãéçÞÔËÄÆÄÐßãäåÝ͹ª²³°ÁÑØâêííìëëèêéåßÚÎÉÔÑÔßæçìïöýýþþüýüùñëæÝÞâäæéêêîðññðôòóôöôõô÷øõ÷øø÷õôóíëèèäàÛÙ×ÏÏÌÊËÈÍ×ÚØÙåèîïïëéæëðõõòòíéØÑÇÇÄÆÍÛãçâàåçáßàÝÙÕ×ÔÓÍÉÁÂÁÅÄÅÅÉÑÕÙßäæëîñô÷÷ùøøúüûúùùúúúùùúùøöõòðìêèçãáâãèðúýþþýþÿÿþýý÷ëåÞÜåëêììîîðïïïíêéçÞͼ¬¤µÕñúøûû÷ôóëàäôüýúòãÀ¦¸Á°£”‹“…z€‡…|ˆ”®ÈÚÞÏÊÛãâåÛÑäéáÙÚãßØßêìêéìñïéà×ÍÎÏËĹÀ°Œmomqo|ˆcq´ÅÄ«U   +  + i©°¬¬±­ a*5%+"$% #  +'/-.1 + +  :‡¡¤z€…–›–†yƒš£©²²®¥¢ ›–žŽ’Ÿ­±®®¤‰€qnki\dildnumcYeklur[]cI38910--  + + +"  #% !Iz’¥¨©«²´·µ»ºº¼¾¾ºÀÃÁÃÀ¾ÃÁÀÃÈÊÇÄ»ŸT! + +6Jx–¤²µ¶½»¸¼¼¸¸»½º»º»º¶­ª¬¢ œ›••¢ªª–ƒyoy~x…„~Š‹Ž†‘Š’”—“œ›œžœœœ›a?# *;<8:Uz’‘’›˜“‘•–—Ž’‘”‘‹‡†ypcNHJG5& +    38;<66-63(*+1/-('&*0$    );Vemmotƒ‚„wnnurŒ—›Ÿ¤©­›‚skprpj[IEHK\`hkg`akiju}…}kcqtm\6Hlssz‡’Ž‹ŠtQ5%   + +  +  #/:?A?7;FKNLNF<58/    + +  +  /KE,$"&'1+07A:;A<66,4--78CQWaM<:<73G=;=I?ETIBEQLGKJJMSI=07?DDGJDBMQUOTFJZ]VO@43=?@NUN7*.-0%$ +"% +-#Qx”£¨ª¬­¯µ´¸¹¼¼º½½¼¿½À¾½ÀÂÇÄÇËËÆ»¢T  1Lr™¨±¶¸¶´¶¹µ¶º¸»º¾·»¼·°©£œ•”˜™•©®ž…}upy€ˆ…‹ŠŠŒ‘“”š™› Ÿ›œ‘nC "%668:ZoˆŽ‘’ŽŽ“”ŽŠˆˆ€sie\J>:6)% + + + +    >?7672122*.0+/2-''$'*  $7Yfnklsyy‚tlirt€“•›£©ª›†tnprto[IBISWfipjd_kllqw‚€oaj{za<=GQOHD7:<=AA:>BCLLI?FMPME?HISI6(6?LMJHIOLTWRWKFTXLJ<536,     +  7556967244231./10.+%   (:Mffeiotxqejqox‹“˜Ÿ¢©¨…qmoqli[DFJQWXdjcYUgos|‚‹„p\k~€pJ'$YtpwvŠ£«œ‚a@%     +  +:?@AFBBEMKGF?913!      + + -=1#&&!+(19@B>;C83-#))4:AJOHF@6058;>GEGJJMQX_[TEEJRWa< +  )'66"  &Y{‡•Ÿžœš™’l8 + +  u¦­µ«žq3  +  +   + +   :|ÆÝãåäÚ¼¸ÈĺÆØÞÕ¶ÀÔÕÔÖÀº½ÊÏɵ¶©‡†¢®¯¯ ”•‘ ¤£ª¦¾ãçÞÍÂÀÍÚÕʶ²Æ×Ï©™¡µË×ÜâæèêëéææåãÞÛ×ÊÕëùûüüúæÇÄÆÊÑÖÜÛÞàæåèççêìïïðñññòñòòòôôóóóðíìèèçäãæÞÚØÝÞÝÚ×ØÛáéòùüýýþÿþþÿÿþÿÿÿÿþþþþþýøðåÛØÚ×ÓÌÑÚÕ×ßåæöýýþþþþýýööýþþþþýù÷ðèá×Ö×ÓÒÓÛÜßÝáâåèëðòô÷úùúüúùûùùùúúøööôòóôòðííëéçááãèîôüýþýûóçäèìííêëíîñïïìéæäÞØÍÅÃÙåèëîïðôöðçéöúùòݽµÚؽ«¥¢’–‘ŠŠ‰„¤ÂÖßßÏÖæåáÜËÔçíäÛÛÝÍÑçíòñêèæêïêßÛÞØÔËÊÄ¿³ŒppibkvŠXk³Ì˳j%   +   X•­¥¥±°¥h+2) '- $% )6AEB901' >ˆ™‹Š…z€—”†€’¤±®¢Ž„‚‘§²³°« ”™—”œ©¬«š€gl€qnrzb]hWUZ]`craUaG8$$+'( ;:!  %Bs“ §®®¶¼¹¿Âþ¿ÄÃÅÈÊÆÉÊÆÈËÌÍËÊË˾§c&  +'Clš±¹·ºÀ¿¿Â¾À½¾À¿¼¹º¹º¯¤–ŽŒŒ‡ˆ’œ¨¬§‹qtsy„‚‚†}„‚‡ˆŒ’—›ž›˜’˜™“ˆe6  &.66@_†‹‘Ž–“’’‘Ž‡†Šxpf[XI>;42% +     54998995944022013..*   #9Laa_anuuwnfkqp‘•ž¥§¬«˜‚pmppmeWCALQS_bbfYSgupz€‚„r[jy}tQ*Mnvusƒ˜¥«£lG0" + +  + +  + + "4>B@A78BJNQPE72,*$   +   291$")#"(-,2:D=C;=51,#&$-?KOPRGG:967CFD?:>?>=BCKOPNLJOPD8' )/AJJOLJCKPLOUUHZ[RM=25>CMJLF>FY^ZKECOTV\>' + '  ,*&-(*2  !W–žŸœšœ™“p4 + + n¥¯®¥œv0 +%   + +    +  + + 2‚ÊÜÓÍÚÜÇ·ÆÇ»¿ØÝÞųÍÙÔÓɹ¾ÊÓÍļ·®™ˆ—§®®¡˜˜••¢ž¦ª´ÚåÜÊÀ¿ËÙÚθ±µÎζ££«½ÏÚßåçèéèêçããââßÙÔáõûüüúðÚÇÄÅÌÍÒÚàããçééëëìíððñðññóóóóôòóóñðëçåãäæââããÝÙàäßßäêîò÷üþÿþþþÿÿÿÿþþþÿÿÿÿþþüøóçàÙ××ÝÜ×Õ×Û×ÓÏÏÔèøüþþþÿÿþüúýþþÿþþþÿýøóëäÝÚ×ØÜÜÜÜàÜÛÝáçëïóõøùûúùùûúùùúùùøøööõõõòóïïìéçäãáåëñôùøôëéëëíëëêêîñïíëéæåÞÛÓÈÉØÞåêïòõøöïçìõúûï×¹¾âÖ¿©¦£’“†ƒ„’°ÌÜâÛÑÜæãÞÎÉÞëëäÙÚÙÎÚèìððìèæéîíæáßØÑËÇÀ¿«Žuskfht‚]e²ËŲ`$   X”¦ª«³¯¢a)1(  +(6)($" % %'&,51 + +-€—ˆy}•ˆ~ž¨¦ƒjVQ^‚˜ª¯¨¦Ÿš•—£«©€z‚|qkchgbaQ_]TQYmaUW@5"!&.!$ B=    +%"RyŒ¢¨¯²µ·¸¿Â¿ÂÄÃÄÈÄÆÊÊÌËÈÉËÊËÌÍÈ¿¦f$  !9.-'$ +    -;6728:98<424:62511*' +7L_e_^jrtrpgisx‚Ž”Ÿ§¬®«žŠsrsqpiaRCHNT]`ef[\fvuxx€xr[_mxqX19\osmw§«¨œƒX9# +   + + + + *8?3350$(0:P[[WK@=938A@?C8=BAD?EWXMIIMLLG<# )8AAJMNIDRUKKNIM_UKDC/;AAHPLF@I`ZSNIOQWWN:*   ,@F<* .    +  Xƒ’š™——“˜œ—h4  !s¥°«¢—g+  +      +   !0‡ÍЮ˜¸ÜÔ¶¸Ã¹¼ÑÜàÕ·¼ÑÒÑν¼ÆÓÔÉŹ·­“‰¢±²«£ —™£¡£³­ÊàØɺ¿ÌÙÙϺ³¸ÊÍ«£¯½ÊÕÙàåçèçèæáààáààßâìöúùôæÙÊÉÉÊÏÒÙßäçééëíííïïðñóñðòóññòóòððîëäáÛÝâææêëëçàççéòøüþÿþþÿÿþÿÿÿþÿÿþÿþÿÿþþüôíçÝÛÚÜÚ×áßÜÚÛÙØÓÒÊÆÓäïùþýýÿþþþýÿÿþÿÿÿÿÿÿþýûôëâÝáßÛÜÞÚÖÒÕÛßáæìïóöùùùøùúùùøúùøùù÷ø÷÷øóôóðíëååäÞÚÞããèëííïëçéççêíðîìéèäàÝØÔÍÙÜæïóöøøõìåì÷úõêͶÉßϾ¬¦ •“†‰†„Ž£ÃÕàåÜÓáåä×ÁÐçíìàÙÙÓÐââßêïíéåçìëêàÓÒËÆÅ»Áªyqebakxb\¨ÈÈ·k# + + +   '[—¢ª²¸°žn/4* +5'&(%#$"# & #-61=DHHF>70 !y‘‰†yˆŽ‘€¢©¡‘{cH?@>Gi’¡«©žš—¡©¨£‡‹ŠŠuTGLUiWVgi`]`eXUZA)$%2,/+ )DM +     +!&$G{›¡¨±³²¶º½»½½¿¿Á¿ÂÇÆÆÅÅÆÈÆÆÉÉľ \  +%;c–«±¹¸ÁÀº½ÁÂÁ¿ÀÀº¸½»µ²¤’†~}twˆˆ—¤¢„fdjlonz€yz€{€~„„‡…€}vqkl_P@#"'0!#&)04>;;@;@9?D@<@@A96;5*($  +  + +  '$%*1419;=7:359782.2+&   +&4Scb^^jquwpfhoyƒŠ•ž¤©«­ ‡roqooqjNBMSW[ccaa]cs|w}zynYcluq^:#+SmnruƒŸ¬­£Žh@)  +     08586/,/"&5AIYLNED90;AELLICVZJJPJR_SFJD.6HHIMLFCAZ^XLNKR^YLE$ +  3PF)%," + 1%"  "U•™˜—›•˜”m7 + + + (y¤®¯Ÿ‘c#      +  "  + +  + + $?ɹ‘„ ÑÙ¾°Ä¼·È×ÞØIJÀÓÑÎÅ¿ÆÓÖÎþº°˜‹—ª±«£žŸ•¢¥Ÿ°¬½ÛØÇ»ÃÊÓØÓ¾²¸ÌͶ¬¶¾ËÕÚÝãæèåæãÝÛÛÞßââãäëëæÝÒÏÉÉÎÎÕÚÝáäèêëêìðïññòñòòñññððððïíéçãáÞÛØßæëíîîêêîóúýþüþþþþÿþÿþþÿÿÿÿÿÿÿÿþüùðæåáÜÚÜÞÜÚááßÞÞÝØÕÔÑÑÍÎÚçòùûýýýýþþþþÿÿÿÿÿÿþþýüûóìçåâàßÛØ×ÙÕÓÖÜæëîñõöùøùùùûúúùúø÷øøøø÷õöôñðïììçáÝÛ×ÓÕæñññéàèêèèìîìëêåáâàÛÔÒØÜëñ÷úúúòëåè÷úñäÅ­ÌÜͳ¨® š”ˆ‹„›«ÈÛåæÚÕããâÐÇÙêîìãÜÚÍÔáÙÇÛìëçæçéêéÙËÏÉÌÅ»¾¯yxplbf{ZY¨ÅŶw2 +    +$^™§°²µ³Ÿh7:&  45 "()% "!369=98<9@FADD>?===B.*),%   + + +   +  :M;%"$#$#,-=98:5682.*/'%0AISOMHE?=:<@?9;=FLGJM?CIGC.'"#&287GFGEMMGAX\VXKHPZWKB + +  + #JU8.0&9?* $]‰›Ÿšœœ›™—f1 +  +%m£¬ª¡‘c"   +    +   +  3†¾œˆ†ÀÚȳÅÀµÁÎÜÙϵ³ÌÔÓÉ»¿ÒØÓËÁºµŸ‰—ª­®¬¢ž‘ž¨¡®ª·ÑÐÁ¼ÀÂÏÞÚų½Îθ²¹ÄÌÕÚÞâãåæáÞØÑËØââàÛÐÍÍÉÉÈÊÊÎÓØØÜáãåèèìììíîîððððñññïððîëêçâàÛÙÚÜÙÜêëìïðóöûýþþÿþþÿþþÿþÿþþÿþÿÿþýýûøðëåãâáÞÝßßßÞãäãäáÛÜÙØÙÓÐÕÒ×àçñøýüûýþþÿÿÿÿÿÿþÿÿÿÿýþùóëççäßÛÙØ×ÊÈÐÙÞâéïóóó÷øùúùúùùøøøøøùùù÷öõôòððìéäßÛÖÒÞìññèÙßéêåçéêëéæåáßßÖÒÔÝïö÷úûùïêâèõùîÛ»µÓÓ³«« •‰‡‡Ÿ¹ÔâèæÙÚàßÞÉÇâîîèâÛÙÌØàÒ³ÀäëëìæèêéÛÑÑÏÎǽ¹¢ŠtspeYivaW¤ÄĶt- +   +_¨±µ¸µ¥m/;1:*%$ ) !*6=4=GI@4;>;s—‰„Œ‚€›¦œ‰xXA?E>8<@Stœ§« ˜‰ˆ¤­¥•“‰‰e]V\khVUkhe_\hTV^8)#%*$'#/OS&    % %2,/8<=;DGEGHNPLGMULILPGGKVRNPGA*"/:;=:A@>?57688*)%#"$ %'(       !'.-158834:9602/&! + .F`gabktqtpdedlv‡“š£©¨ªžˆqjikkh^KFOTRQ\`b]PYkpv€r`^n~wiH+5enom}”¦¯ªœ\>0!  +    +  %:@@A<8;DSWWQD3#&1% +  +   3H>,$)',695/1883//*%#+7HKOLJEC9;5:?=:;7DFF;BIKSTMFFFKG2! 3@CF?LTKEKMPNNKKSYPFB36FILEGDCI\ZMQLTQRRJ: +  !0LC<99(  + + )bŒŸŸžšžŸš•j- + &n ¬© Œ[% +   +  +   +   0t¢ˆwt…«Õг¼À·»ÈÛßÔÁ´ÆÓÖÒ¼³ÊÖÔÏÄÁ¿­…Ž¡«®¨¥¡Ž°¦®¯°ÃÍƾÁÅÑÞÜǹ½Êϼ»¿ËÏ××ÚßâäãÞÜØÇ»ÐáåÞμ¾ÅÆÉÌÍÍÑÕ×ÚÞãåèêëìîïííïíïððñðïîíìêêäáÞØÓÕÚÛÚàêíðòöüþþþþÿÿÿÿÿþÿÿÿÿÿÿÿÿÿþýûøðìèææâãàßàâãäâçééèåßÛÚÛÚÙÛÙÖÕØØÝæððôüýÿÿÿÿÿþÿþþÿþÿÿþþüõóïêåàÚÙÖÑÄÅÆÑÖÝçíîðóøùúúùùùùùùùùúúùùøööõôñîìèäâÜÙÚæðïäÕÖßèæåçêééçåáÝÜÛÖÐÞòôùúû÷ïçãèòòèÒ·ÀÙÔ÷­§•‘Š‹“©ÆÝéèãÚÞÞßØÄÑæëíçÝ×ÒÏÝÙÁ¨¨ÔæêêååéêáÝÖÏÎǾ½ž‰orrjXjƒbX£ÁƸv0 U’¤¯·³°§g/3! + + '3%"  '# +6<<4\‚Ÿ¨£™“‡ž¨ž’Žƒ{lfZ\faPQkicbbgGOR<..#&,+# !HT)    + # "##($#"32&-,,#*+()+!' " (E5%%     + + +  + +    + %#'$273467<354.+   +Mdjcdir{zne]]dv„›¡¨¨ªŠnejijjdJFJUSSW\\YQ[ipx}€†t\_n…„rT- $Rnmoq‡ž¯­ ˆeJ7$ +   +  +   + + )7'!34)        +    #   \    + +   + +  + + +0; + "!/72268;624*$  + /Pgndbpx…ƒqb^egs‹“™ ¦¨©žˆohehmkhM@LTMUZZ\YOUbrs{†|`Vmƒ‡vX2 Ffrpo~—©ª¡’wV='  + + + + +  +  + + 4BKBA@:;JQMRC9-"!"2 +  +   +  +6F9""$ !-,*<@?627400' (5=@JNI><=342=:516=IL55LDGPKPDO\X[ZOSSUVWB  + +  ,%9F;#"1' "g›Ÿ¡¥š•™•j-  #m¦°¨ŸyY       + +     + Nppuy|’¿Ð¹²¾¼ÀËØßÚÑ¿²ÃÏÓͺÃÐ××̽±”‚Ž¦­¬©¦Ÿ®´®¶±±ÇÁ·ÃÐÛáÙÎÊÐÍƽÂËÉÑÕÙÝÜÚÜÙÙÕËÅÀÇÞÚȾ½ÇÉÍÓ×ØÙÛÝáßãäçéëîíïïîðîïïïííëëéæäßÙÔÑÍÏÑÚáãéïöûýÿþÿÿþÿþÿÿþþÿÿÿÿþþþþýüõîçåéèçêëèçäâææéììåêêêëðêäâÜÜáäåáááÛÙØÕÔÚèôûýÿÿÿÿþþÿÿÿþÿÿþþÿþþýúõëãßÙÐÍÅ¿ÄÅÕÚÞæéïóöøúùùùøùúùùùùúùøùøõôóòñíëéæåäæéßÜÜÜãæéåçêççæâäÝ×ÍËãóøøùùøôêäëðâѼ¹ÙäØÌÀ²§ “‹…–£¸×êìëáÛäæÜÒÕáêîëáØÚÊÎØĪ‰‡¬ÜçäáâàããÝÖÏÌļµ¡Š{yph^d|aTŸÃ˶~3/ + +  + +R‡£­·µ«¢k*.   %25$!+**  %2=26?DEC=5;>)e‰‡—Œ~‘£‡pXBFCI:-*+47Pm˜¢¥™ˆ|Žž›{q„ƒznh`di``[eeXPUhQMN2+%&+,' .N^3  +  #   -PsyrwW;9?ORR2   +      +              + +    + + + +   + + + +     +  ..3.05:603*" !! $7Ufqmfo}…‚y_^kpu‹’™¢§©¬ ‰upghkniO?LRSWY^]WNQequ}†Š‡eXk}‚v_7"6Yotoo‹œ ¡•ƒ`B,     + $8EA=<<4=KSNLC7$"#"*  +  ELGCSSZPHBGHFC2! #'>NSMQLMDKNTSWHQ`VOB>3=>B@@=OH3W‚|‹•…¢˜m\NH==C74.9ADJIi}£œ™‚no‚”v„„vpnima[fa^bNPaiV]M9-*$-)#$2Oc8  +  :O[N;$" 5E>CY}“›žž›’„‰•‘w> +     + +  +  + +   + +    +    +  + + +  +   +   + +  + .+   +  + 0034656860,"-Mgllfmu€}tdY^ep„Œ”žŸ¤¨¢†pjiimh`H:@NNNX\^[SQaqrx€†ƒk]bp|wcC'"Gejihs’Ÿ‘uYB.! + + +  +  + + ++:@A8%!' +  +  +     .35=542)!'14DD>GHKU9BJSI@0! 0@FPJHLMKGQ_YODP\\MB@5:@EKIPOKJY[RQOOT[`YR@, +  +10,.1  (cž™žžž›š™–b!   "q¢«¤™yN +         /[cgmqm‡¾Æ²»»¸Àó­¿¿³¼ÒÔÒȼÅÓÚØÑľµ†”¦¯¬¨§¤¦²²¬¹·³Ã¾ÄÔßÝÕÇÇÙÓ»ÂËÌÐÒÓÖÛ×ÕÕÕȽÊÕÊÅÆÅÉÏÓÔÖØÝàßÝßàâåæêëìîïïððïîïíêèèæáÝÕÎÈËÒÔÛæìðøýþÿýýýþÿÿÿþþÿÿÿÿÿÿÿÿÿûòåßàãæééìîïððñòðêèçéîòðîæìíïññðíçâãèêëëêêëéèäßâáÝÚÝÝáì÷úþýþÿÿþÿÿÿÿÿþÿÿþÿÿÿýüõîåÛÕÍÈÇÊÐ×Üãèïóôøøùùùùøùùùùøø÷ù÷÷õõôòððîëêåßÝÝÛÖßæçäååâââÜ×ÐÕèòøùûüùùðëïåÓÀÀÙéÜù·¬£Ÿ“‘•Ÿ­ÇæòóîãÜçæáØÕÚáåääÛÕÓÈÏƪ‹yl{¯ÙÝÛÛãäÚÛÚÐÍÂÁ¹›‚ytne\cufTŽ¾Ê½6  +  JzŸ±³¶°Ÿ^/9)  %6.,/(%((+$ $#:@;6;@AH?AOA1 +Fz‚{‹˜„†¥’e\PK>6:456>EHBSao’¥ž”†pl{••†bhvp`^_[X[^XR`eRQC74/+($!2Uf7 +  +   +<[kh[B6.&/::*$@PHJex‘›  ž–‹‹’•zR" ),         + + +        + +TbQ9'.*    )25556:6/32& +C]hhafnx{p]V_hpŠ‹’™ž¡œˆmhdcimeJ9?JXWTU^]ZQ\pptz‚j]ejrrdI0 4\gjghŽ ¨¬¢ŠkR9( +  + +  + + .?J=?71?GFE?3/$!# +      @J;$$,/&#,/.28<8648,5%!04BIKNJD>;69>?B@DFGILSQKGQNOP<-#0DGBMG( Ho{~„”¡€_SHBB@/0'5FONOENc„¤¢’}huŠš•odjrk^[PQU^VVUY^TQD7//2+-%! .Yc=   + + +   +!Bfssf^YF:C=:YQO]~Ž—›˜ƒŠ‹Œ\KahkxŒ•™~C &!% + /gŒ“—‹_8'OsreW^nlW<:C3   +  )..4202+,2'"    !5@EEM[intk[Wdotz…‹—ž¡›‰ofmlghgW:>OPKS^^URN[pux„…s`fw‚…s_9 >@=;AGIMMB7#!$( !! +     +&AD3!$$%-5<=922803/-+'):CQQNGDAA===G<:<96?EOHLNP0Giv„Š„ƒš—sc[?A7-6/0@BLLKBJduœª¥›‡qlq…ŠphchdWZcVT^^Rco`BYC---%).)!&6SeG + +   1Kgoih_bSD@@=0?SX[g¡š’{†Š‡hMctnwŽœ\     +   +!%  $  + =p• ž’tNAqŠ–‡|yqmMG?C5! +  + ! %&+'331-+**""6JOPWbp{}q^VZck}‰Œ–ž ¡œ…ldcnnldU>;JRTPY\\VHVnyv}ˆ‰vdau…†u_A',Pkjju–žœ–ˆl\D-$    +$>AEB>>?KKKJ@/! "%!#   + + +&BL0$!-657=624:-2/&!)9@OLLIJIC9:BMB@3=>BDOGMVMJHDJJJB9&",?GQRNRKJFXVJPFPWUIN61:G@B>GKKNW[ORKLS[ZTWYXRK@* ! "+//)!  'f™£œ¤ Ÿ›‘W +  $mŸ¥ ‹l=  +    +    + !#8[ilhj€»Â¬º»¼±¬´¸¸¾Ä¿½ÎÑ̽¿ÈÕÜÙ˸µ¡‡ƒš¦««£ž¡«º³¸º¶ÍßåçÜ×ÐÍßâÈÍÒÑÐÒÕÓÕÒÒÀ²¸¼ÂÍÐÐÕÖÖØÚÝßÜÝáâââæçèêêìëîíëèèäÞÜàÝÛ×Ýçêñøüþþÿþÿÿþÿÿÿÿÿÿÿÿÿþþþþüøóëééççèèêëììíðñòôòñïîìêëìèççéêìèßàçééæêååâäççèéèêíîíññðïïïîîðïîééèãààäëó÷ýþþþÿÿþÿþÿÿÿþÿÿþþþþýùïæàÞßãæåçëîòôùøùøùùøøö÷õöö÷øôõôññðîíêäÚØ×âæãââÞàáÛ××èôùùûýüýü÷ëÓÃÌäâÙ̽¶®¤œŸž¦»àöúúôççèéæÛÕÎÊÑØ×ÕÒÒÊÌÆ«“znmih’ÈÒÑ×ÞÚÙÕÏÌÃȾ¦…{tsgdhte@…ÂÎÇ–E + + +    8fŽ©®®¬ e/97 30(,4.0-53"($'!"),3*1@48C86;>IOMGCH2 Chu‡{ˆœˆhWOFD;.412>F?LATY_t›¦¤Ÿ‘xlp‡yiY_bVV[l_VTfQWhXGSB6/,2+"$.8Xj@ +    + + +6Zfqnhnc]NDD;-C\^cdlŠ•˜–Šxyˆ‘‘šmK^p|}ˆ˜™šq&   ( +      + + +"!$04 +  + +#Ly‘šštQYsƒ’Ž|yviNATJ2" + + +  #)!"$&!#$(&#((')%%  +)BT]\^frƒub[`dn{…‘›Ÿ¡¥›„g]^hiliT<=GPRQZ[aZLNhttz†‰we^q‡‡vaM/Hlspm|‘˜–’ybM8,"" +   )=@B??=@FLLJ@/!##    +   *EH/!,&&,,11344:;0--$"/7@KZ\I?GA?AGD@<9BFFCFKLJZXVYWTSUXc\Y]ZSH@%"(   +44#3/($  + "dšž¡ž£ŸŸœS &n¤™‡k; +  + +      + + ;VfprlqŒ´Á¨µº¿°¢¬º¯ ¬¯´ÌÑÐûÇÑÛÚл¹©”…£«¯©£Ÿ¥¸¹³º±ÈßäèÞÕÑÑÝßÎÐÓÒÐÓÒÓÒÒ˹µ¶ÀÆÏÔÔ×ØØÚÜÜÝßààâãæçêééëííìéêçäàÜÝâáÝÝãëõúþþÿþþÿþþþÿÿÿÿÿÿÿÿþýÿûöðíèèéééêêíîìîïïðòóóòîìëêéèëéååæçèèßàåéèèåäãæååååæçèéëïòóññññññóðñðíëêåãáÞáæðûþýþÿþÿÿÿþþÿÿÿþÿÿþýþûôëèäáèæåæéïô÷øøùøøù÷öööøøøõöòòðñðïëëéáÝÛßêæäãâÜÝÜØØéõùúüýýýý÷èË¿×êÞÕÉÁ¶¯¤ ŸŸ©ÆéøûúñçéìëßÍÄ·ÆÓÔÎÓÕÔËÎɧˆunkd_„¿ÍÏÕØØÒÒÍÌÄƾ ˆsxynkhtbE‹ÃÌǘG +  + +   + + (`‡£®°¨™b.6208)89'%(=0."(,%,75-7>A=4GEBDBGFQIJI.Dfsˆ‰{“ˆjSDNJ5,#+4;:;BIXZ_w”Ÿ££œwmtwulfXb_WYai`KOcham^KX@6-2)#)$".;U`E"    + 5_jtnnvfZQQEGEMhcbiw—“–’~‹—›šg9Lpyly”œŸŠD    +  + +    + +  $#! !   +#8i˜™˜oRkz…‹‚xrb?HOD/    !#)%#$&%#)&"(&  )E_b`]es€‰sc_hrt€‰–žžŸœ‚_RU]eibM9:@DNV^\]ZHG`nu}‡ˆra[m~tjW3 ?DGLOMB-! ##'%!  + +  ?B%*+$&/1047429811+'"-5GKUSI=?=;huqrnpg[QUIGECXb]bwˆ”•›‘yu‰—ž—‡l;:[phoŒ™¨›_!  +      +   &  %"!$ + 7nŒ—œœlXr‹“†{umWF[\C. +     $'&&$#  $)BVie\gow}v_Vgooqyˆ““ŠlQ@?KPTK=.49:?OXWQG8;Tkrt„mWOWlldfV5,Rkoke}™ ž•m]N@52*-" +   $8BA??87?AOVH<#!!!(()%    +  =C %)&+)1>C2.4=6-(&"5:BRYTO>??;6?HB@54?NGBDT[QIILPNG;7-"'(1>=DQUOFNTQGIJBUbYNEF5:?NSBLMQ]Z]WURN\]VPVdbb[XLN=#%  +&><2,*!  `‡ž™œ¢œžšT  $u šeG  + +  + + + +  +   %4Unrtsxs¢Ã°²º·¨  ¡£“½¸¾ÑÒÊ¿¾ÆÑÜÖÀ»³£ˆ‡¢§¯¦¡ž¯·¬®°µÝèèÛØÍËÝàÒÒÔÓÓÓ×ÖÑɺ»¶·ÌÒÕÕØÙÚÜÙÜáßßâääæèèêëëéêèèæãâÝ×ÙÛáèëóúþþÿÿþþÿýÿÿÿþÿÿþÿýþþûöðéçèèééêêíïðñòðïïññòñóôñëééíììëêéæááãâÙßåçååäåææèèéêëëêéêïñòôôòõôôõôööôóóïïìéåâÞßáëõûþÿþÿÿÿÿþþÿÿÿÿþÿÿÿýúìåãÛÔÕÚáéîóóõöù÷ôö÷öõõõöõöôññïìíìììëèÝãéåãßàãÞÚÝëõùúûýýýüïÛ¿ÈããÙÐÆ»»­žž¥ §´Ûóúú÷ëêíëè××ÖÐ×ÕɽÅÕÖÐνongbWj«ÄÌÍÇÂÏÓÐÌƸ ‰~rkfljG‰ÃÎÉH      'U˜ ¦¤”]04#  %9.55/ (+,!"%!(''(%1::5@=4:GHBFOZZVREG. DnzŠ‚{“rYIBI9975:F?>4/.,1&$8F^iN)  ! +   ?_l€}wqb[OSMB9CRgbbpŒ•˜‘‘‚xˆ‹‘’†e<0C[^cx’ žw3     +   +  +!!$  -?'.$  + + Lz‘œ™˜‡e`vŽ”’ƒziTITYR;*     %,!!1@LIFN[be\N@AQUWW^^bb\SD4*'**.1'".68=AC5,'DOSV[]H7-/6'(# !  + + +8<:9)&43:EC0 +    %<:$ "&,*$&'-352:2&+252'+%.==TKGCGN[YPUWPU^]OYad^c`WTH1!"  + + +1@:6(  + +&]Š˜šš ™›£X! +  +$qœ›š…g? +     +  +  + +  &0QdemqvxšÀ¯±¼²§•œ¥«¤¶ÎÉÀÊÕκ¿ÏÚÙÉ»·­“ˆ–¦­¨ž¡ž§µª¦¯´ÒççÛ×ÑÌÙáÖÔÔÔÖÕÔÒÑį»ÀÆÔÕÕÚÜÛÙÛÜÝßÝàáãåéèëëêìêêèçáÜÛÐÍØâèðøüþþÿÿÿÿÿýþÿÿÿþþÿþüüûõïêææèçêéëìïñññòóðòñòñóóóóóíêëêììëêëêåãåâÙÞããáããâéèêéêéììëêèîððôôõø÷õõõø÷öõõóñðìéçãßßÞåìõýþþÿþÿþÿÿÿÿÿÿÿÿÿÿýñêèáÖÑÕÜàçíñóø÷øøö÷ø÷öõôôòñðñîïìëëîîëãßèçãáâãÝÛßìõúúüýýüùëÒ¾ÔæÞÓü°®›¢£®ÁæøûúôëîìëæØáåÝÛÚËÀÈÔÕÎÓ¾—ymagb^j¦ÃÇÍÈÆÍÏÌËÄÁ¼ž‰€~~tpiofC‚ËÎÈœP    + %PsŸ£¢•Z-8/  +$5:73**,)*)" !)..5ADA75C5?BOBGVRSVD9C( +FfsŠvz•‘fZOC=E:-.BK>AIGKNbn„™£©°¦œŠm]Xf[E_^]\YQ@?X`NafURXB2+.3+'#:I]cN) +"  V^d_u“™’Š~u„Œ“Žg9*2Va[lˆœ—…H  +      ++ -(# !#<#""" !=P%'(  '_’¤¡—†mk†‘•Œ„tdQCOL=6' +  + "$"  +$" %*9;65+%+,+%)'"%"!'!'" *)% &:>0+4JMGB:ENJIE:.%$$&%)$"    )%)&   + +  +     ";5+#,0$$&()150.26236+&(*5>AJMNE:8<:AGKGKLY_UNNWPJ]X^dcbhfb\[F,'  + "9:8,%  +!a’—š™Ÿ¡ ž]"   +,r›š˜kA    + +   + +  + +  +  +  (5I`fhnsvŽ¶¶¶¼³¦¡®­®ÃÕÕÃÎØÑÉ·¸ÉÖØÊÁµ¯–©°§œžš§¬¦©°ËäèÞÒÍÌÛßÔÔÓ×ÖÑÐÎѼ§¼ÂÊÔÙØÛÜÜÝÞÝßßÞâáãæèêêìëìéèæâÞØÒÐÏÛèðùþýþÿÿÿÿÿÿýÿþÿÿÿÿþüóîêæãåæèééìîðñòñóóòñòôñôòôóóññðïîëëìëîîëéèåâÖÞãäâäãâçêëêèéëêêéèëìîñôõ÷÷öö÷÷ù÷øõôõõñîìèåäááàãë÷üÿÿÿÿÿÿþþþþþþÿÿýøöñèÜÔÒÏÙäèíóôö÷÷ô÷öô÷õôòñóòïïîììëííêéáçèâßáâÝÝáìõùúüþýûöåÄÃàäÚËýº³¢œžœ¤³ÌïüüùðíñîëãÜççÞÜÖɽÇÑÒÏÒ¹’xfha_[bÂÄÈÃÃÌÎÊÊÃǼ ‹‚ƒqw_oiHˆÁÐƘL     Nkž¨“k*6/ ;=/:)"$-1#)&!'399@KP@4>>„ž¨©¦—}`v‘–™Ž†w`OMPK@)  + +   )!%-$$!!!L   + +   +     +     " +26783/'%%*+'.($ "  + +   +  +>9'#%%"1205664772(*$/9;GQ[VH<><:AEF=68=BHIKJJRMIKQTMH;3/026@>FNW[UWSTQNNSLU^WUM6'5""'$ #&*1-25,-1/*)$(8=K^ZJDAI=AEEI=95>FELKKSXZNGIWQB5&(33:>DMIKYXQSMZWTVPR_RHB8,2FI?SMKC>B@;>;>GIKDO\XM]]akR! +@j{‰‰™y`WHFEC;1101.47PWhm—¿Å¯­¯¬¥‘vbdxˆv`UTZY\[gaZ_dcMPO337-210 /GR\XE=B;/ + + + *Uly…yueMWOIE@UX\Xf„–™œ”ˆx€›š™{C" 6E_`brŒ› ƒH  + +   "##'###&"&(#+*(&,'""'0%*0,!+! + +   +2q’¦¬¯¤Œ{‚–££š‡€kXM_eQ1      (.$$(-(''$#&#&"  + +    + +    + + + +   +    + +  +  )  + + + +  + +      +  $;1%)'*'%0/40,415.&&)/AAXdP@==@<6?C:558@JNJLSRXOLMVVA40/'28>AMLKRQWMLRRTPFN^^WE:*1AT?=FRKN[MNFJXZQWU^honllfbi_aVA'   42+ %lŽœ¢¡œ››†`- +  `Ž†skJ& 1ƒ  +   -7CWfllnv|¢¾«··¸¤–š¡°ºÌÜÛ¿ÉÖÊË»¹Ì×ÚÑÇÁ¹š€Šœ£­¨ž›š¬­¦¨­ÁÛÙÔÍÍÚÝÒÔÙ××ÒÒпÉÈÀ»Ç×ÜßâáàââäãâáäèæéêêìéèåãÝÕÈÂÉÙâîúýÿÿÿÿÿÿþþÿþÿþþüùòìãáãàãåæêêïïïïòôôòðòñòóõôõ÷ø÷ôôïîðïëíîìëêèèèæçèçßäêëìêéçåÝÙÛâçêèçæææäéïòõõöùøøùøùùúøøùùø÷ôóññññïíêåæääáèïúþýýþþÿýýÿÿÿþþûïâÍÆÐÚâèëðòôø÷óõôõõóññðíîìèêìèäìùùóòëãßàÜäîùùøûúøí͸¿ÞãÕÈÁ¿¹®£–ž¨©·ÎîýùùøúûõïâàçÜÒÉǽµÁÐÔÍÌʬmsllTFQ‡ºÅÊÎÎÓÐËÍÉǹš‰‚~snm^mnEˆÄÐÈ›M   +    + !Ji{Ž™•Œa*)-  7B7/74$,-%&.($+HUJFJD?:<<=7?GQM]^YKMckoV' ?gx„y…–wYWJCE?1-136/7@HZ^|¡Æʵª±°¥’ej|u`UV\Z]Zhl_W^XGIA7**384)' 9BIOO]SGC?2#  + + )Qp€†}lPPPUA>VYURe}——›y~—š ™„? +<"''#!+)--3612.42)#)'/6(-$!$%(#,/01+*'$"$ /=@Yfkqoz„œÀ²³»¸®«¥¡ª§ºÏÛÁ¿×ÏÊýÅÖÜÖʽ´¤‰–¦²ª§ —ªµ£¢§¸ÒÔÑËÍÝáÖÕØÕÕÓÑÊÈÏź»ÁÓÙÞãââáâáããäãçéèèéééåàÝÔÉÄÂÌÞëúýþþÿÿÿÿÿþþÿÿþüõïëèæáääååçèìíïðñòðñòóóòóóòõõõööõóñîîììêëêéèêèèèãßâßØàåèççæâßÛØÕÞçëëééèéçéíððó÷øöô÷øùûùùùùùøøõôóõõõòññîéêçáàáçîøýþýþýýÿþÿþþýùíÜÌÇÍÚäèìñôõ÷ôôõõõòñòïíëëééæßßêõøððîçààÝäð÷ùùúûöèǺÇáÜÌÿ´¸±œš©¯¿×òúûúùüü÷íàççÛ˾ÃÄÃÇÐÐÏÒ˨ˆrjck`JL~µÄÇÃÇÔÓÌËÈɺ—Œ{stug`uuUŠÂÍÄ–J    G[q‹•™c+'/.E90,2,$)=0$%4'4JXNALM@^bba]VI;B<-*   +  )Rfy}„sl[U\QFDSRWYc€™¡ž›’}ˆ˜•™›~9"2Ple_xš§žz?   + !(*%)'(((0,/7-.7+521../7.2367IE:)U‡Ÿ§¥£“urŒ“•—ŽŽ}bU]l^:     +)2::<830*'/+)!'!   + +  + +  +   + +  +        +  +  !   +   +  #84!&$!(..02+87/.46) &19EQUUJ782;5AIFD;@HHK>JR\QONZUYOA91010;BKSSUQXKS]VOHDO`WHM<)2CBAIIJSRTNPHJLSVY[^glpqqnfej^QNE-    +A=' +$n’™™ššŸŸž–†S(   fŠ~ku–ž ˜‰~n[bbIGS\YC?:?Cm¡—„„lP;GYQOPYTKVomp€…tjgabZJSB9Khgonp{š¼²±¶µ»¹¬¡§¥¶ÅØȹÑÑËÐÄÆÑÚÙÒ²«—ˆ’¤¯¯±žš¢´°Ÿ¦´ÅÓÓÊÍÞáØÖÕÖÕÔÖÄÄÌÆ·¾ÄÑÝßäääåäáâããäæèéçèèääÝÔǽÃÆÓçøýýþÿÿÿÿÿþÿþýü÷îèäåæåäèççèêêïðððññðñòòïòòòòòóóôóòðïìëêèåååâàÞßÞÛØÖÕÑÍÖÛÚÛÙÖ×ÕÕÕÒ×àæçèééåäæêìíññôõôö÷øøùùùùùùúùøöøö÷óõòñðìêæäåáâèïõúùúþþþÿþþþýøéÕÉÅÑÛâèíðòöôõõòòôôñïìêêèèâ×Úáõøññòîçàáâí÷úúùúõåøÍÚÒ½»³±¨š™¢¯Æáöûüøùüû÷ëâëéÜ˾ÅÌÎÍÒÕÐÒǪŠnnlf_GO~ª½ºÅÐØÑÌÎÅǵŸ†€†ynfj‹M…ÀÎÈ M   ;_t…’˜‘h+-8 GE212(+0,;5*-2DXRLLGA8@DCC@^jVYbWQ\hpr_1Dm€ywq_TFA9/!64>:25:PV`y¦ÓÖº±¶¶ª¡Štm|‘„je\VZTYe_\cT2"4>5)6L\b^QABD;B7%#  #D]gqƒyv]WOJE?OP\`\{˜˜™““„ƒ‹”™™…C#8]e]m’›¡•\'  +!,*0,/93./*49634.?<70-133-6/9=C;,  "ZŒ¦§¢Žkn‰ŠŽˆ…qb\flZ7    !(1:CJMCD:71/)(&$      +  + +!      + +   + +  + + +  +  + '33& %%%/-1533770+22+)-49?L^U706@HGGEFSVKNOS\WK?5(+.1;HBGPWROKRXYNOGSf^MH>39K<@ENRLXWQPLIXLY\ddjjkpsvnlaf[OF5$ +   + +A5 + )k–œ•š¡Ÿ˜“†M' + d‘‰‚|r¼»¶¹·°¤š‡ywobbswbYZ_a…¸À³¨™zWfˆ{tmplmx–“• ¥¦ž¢“…ŒvodL?Fa]ghq{™½°²µº¾ºªŸ¦§µÀÓÏ·ÄÔÎÕËÆÏÚÚÕÄ»±žŠˆŸ®°¨¤¤ž­´¢«¬¹ÍÏÈÉßâÛØÖ×ÒÕÜ̾ż²ºÂÈÛÝãããæçæâæææçèèèèåâàÙͽÅÌÒáðûüýÿÿþÿÿþýþþøîçåæäãæèéêêëêêîððïðñòñïññïðññòððïðïìêéççáÝßÞßÜÙÖÔÓÒÒÊÈ¿ÍÒËÇÃÆÇÇÉÆÆÓØÚÚÞÛÞÛÛÜàåéëíïòòôö÷øùùùùúúøùùùùøø÷ô÷ôñðíìéçæäâßÝãåîûþÿÿþÿþþþ÷éÚÌÈÐÝçêïñóóóôòðóðïîêêëéåÚÐÒÛïôïöøôîäßâîùøüúùòã¾±ÌÈûµ»­­¦“—£µËéøýüùüüû÷ìèîçÝÏÄ¿ÅÐÒÕÙÓÓŦ‰{wpobHEu­¸¸ÆØÜÕÐÏÈDZš…w~€z}ˆ~NŠÃÎÇ¥T     782)..*00%'!# 10@PQTHHCEBC?@NR`bbRT]ljngA<;/+'+&1/&,+&94:GFIB>BEHHDCIMMW^XPZaeegU6 @mƒ~†wfaP><6,-1-10+21Cckv“»Õʸº¶´«™ƒqit’xmf]deh_RT^S9  '))' Cv   /Xmƒ{~uhYTWN@:K_aecvŠ’‘‹vo†”›™‰M&%"4TbXhŠœœl: '(,006/+,2.+3458:71-6436=56EH?B7"   !N}˜—’soˆ‘†{xsebq}e4    +   /;GNW`[Z_`ZNGC>1'/%  + +   +    +    + +   3?:--.:5465-1.+#(&%-AJIHOF?:;:<=H>98>GGODENNIHLVTRNB:0'-.6?HTQRWaL[[UVIEUUNPA.';GFEDFNRXR\NBGPQYZQCO^jpluqrifhbbHI=% +  + #C2   + +r•—˜š—›¢š–M  f•Ž†¦ÃËÆÅ¿¶²¥“‰‰ƒf\_}xfdbbvŸ¾»­£˜_\z‚ur{l|˜žŸ§­««§•“|uuO9DR`ghgu„¯¶®¹³®ª Ÿ··¦¦ÂÙÓ¹ÂËÏÖÍÇÑÛÛÕÅ´©‹£¯±¤œ“”¦¬¨¤§ÇÙÐÐÞæÝÚÛØØáçâ×˼²±¸¹Ì×ÜÞáâäåæçæåæåãÝÞÚÍ¿¸ÂÙîùþýýþþþþýùôîåâãçççééêìíííîðòòðïïïïîîðòðñðíéêèââÞÛÖÑÎÌÎÏÐÐÎÚÛÜÖ×ÔÎÎÏÎÌź·µÄÌö¯·»¿ÂÂÃÊÏÑÓÔÓÍÌËÊɾ¼ÅÇÏÓÖÜáäèîòõ÷úùùùùùùúøøùùùùùùøóòñîêéçáàÝÙÜåñùýÿÿÿÿÿþúï×ÈÉÖãæëíïïòñðíîêçåáÚÕǼÃéöúüþþúðâåñùøúøðàÍ·ÅÇ¿¸±´°«§“ž©¹ÍêøúúúüýýûôñôñæÚØÛÓÌÑÔÙ×ÑÔŧ‹‚}yodZRg¤¼¼ÈÛâÛÔÑÉIJ—ŒŠ|‘vmsN‹ÆÌÌ­`      4G_xŒ•–n3,34E*4/-)1$42$*(+9:B:INIEBECA?F:DGW\HUcWWdY9 9e€|”}cYK>G;**'+2-,:=Eb}’³Ðɹ··¶¯™…uksƒ†tg`Vekh]S`]Q3)!   +  + /Wo|‚€tugWOSNJ:I_fcbo†‘“‚{„•”—K/=dc`zŽ”’€W  -#-1858=<6;?9<>A;=EB=?C;CEAH>JHNI@+  +-c•žŸ¢Ÿn}‘‚~zpdlxuU$   + +  AHNWXY\^a_UMI=;0&()                 +0B4$!!%/4985353..)%% )4;HMKUN;4;8@KB=?=DJNOKIKOPILRQNM>7+)-1 +  &6$   .n‘“—›“š¢œ”M! + + j‘Ž„«ÆÐÎÉÇ¿½¸­¢†ˆxdbq{zh_cm¯¾µ«rZp†|u€u}“›ž¬©¦§ ’}otsP:>V^jqrr¢·­¶µ´­™•ª·«§ÁÓØĺÈÍÔÓÄÌÚÝÚ˸¯¤‹¡®®¦˜•–¢±¡§­ºÍÎÏßãÛØÙÕÜåèèæ×Ä´­²¸½ËÖÜãâæææææåååàÛÚÒŸ½ÑðüýþþþþþùòíèäßâããåèêêêìïñððññôóðïïîíììîíëëéèäâÜ×ÕÎÌÅÁ¿ÀÅÒÙÜÞâæèååßÓÇÇÅÈÆÁ¼½ÐÔÌÃÂÃÀÄÆÀÃÌ×àååäáÞÙÕÎÁ¹»»¼ÀÄÉÏÖÙÞèëîö÷÷÷úùùùùùùúùùûùùùöôñïíëççãÝÞÛßåîôùþþÿýýûìÚÐ×ÞâéííïîðïíëëèáÜØÌþ¯»Üõüýýþüôçåòøûú÷ìÚ°Á¿³«­­¬œœ£µÁÚòúýúùýüûùòô÷ïäÛØÖÊÈË×ÚØÔÖÀ¢Œ„saZYr¢·»ÀÔÞÙÖÑÇÆ´˜ˆ…‚‘cgjQˆÁÌÍ­d#   5M[w‹’“q3014K?0;48.//3, '"!+9DC@KJIKRE>F?CCEN_US]e]UR5 1Zuy‡’x`\LBC<2-.290/;GTw£™¯ÍÊ»½·µ²›‚qlws}qa]Y`eee]^^U7&  +  + + + )Qn}…‰{wjVPLUR>JWfa_qŠ•ž’‡~}’˜œ“S"(5P[[ax“£™t;! !##+4=>?A?=?A<;:A@BDINXYH3  + 7rœª­®¬“t‰–˜ƒuofwyg3   +    +  "OPQOMLVZ]VNJHE>20/*#      + +   +    1D:#(#"(-6685-/01,++%$.88@JQSI8/6@>LPEHFGILJKIPSRLQQOGF;2&,119?FHGHHJLGBOKPPUZfa\]<  +2^zt‚uZ[UK>62)/24637F^˜½· ²ÌÒËÈËȺ£–|gqppr]e`WX\bZ[aQ7#  $+3$   $Egz„|y}oQQ\TVAJTe_apš¡¢•†o{‘•–R&  (9XSZp—§Ÿ].!  ##%$/17:<67=;:6;>AGHKQJIIPTTPRLTQL?-),*0>DLVWPYZXabXRFCSdYQF5)ALG;MOOLZ_ZMSQINOJM19grioywtk^UELIR7%0$.l‘“’•š™œ •~L% ,i”›’š³ËÖØÊÆÇÁ¿»¸¥‰ƒ‡poq|€jgfjp¹·¨’nScŽ}Ž™˜¨«¥ —ŠrgkgT;9Qdaeuy}š¶«±·ÆÈ·´›š¡–§ÓÛÝÓÆÌÍÝÖÆÐÞÞÕɾµ­‹‘¡¬«¥˜’“£«ª­±¼ÍÏÜßÕÖÐÏÔÝçéäÜȺ«¦«¶ÈÖßãæçççåãäàÛÙÓÉÑÓ×æ÷ýüþýýûúïßÚÞÝâãåçëëêììîòñóöúùöôòóðëéêèæäãÜ×ÔÐÌÈÿ¿¾¾ÂÍÑÑØíúýýþýþýýóÛËÏÑÓÕ×ØÒÝßÜØÙÖÒÒÑÊÈËÖë÷üýþþþü÷êÜÕØÓÐÎÅÀÁÈËÊÎÕßæêëíò÷øùùùùùûùùúøøøøõóôñïíîìéèçáÞÙÙàíùýýúòæÛÛ×ßèêíìëíììèâÞÛ×ѵ©®Òñûþüûúõêçòúù÷ïÖ¼°»¿½»¹µ²¬¡”•Ÿ°»Öïûüüüüüúøñ÷ûúñÛÉÁ½ÅÍÞãÝÕÒι‘Ž¤¢•Žy‹²ÀÄÌÖÓÑÌÄÆ´šˆ}Ž–|\\xX{¾Ïͳj&   + ;J`l†”w:1IQZ=3;4+(87+)%! )59CJ=7ASJCDAEJSRYWXN[Xg^RK0  1_pƒŠpX\P##"  *29@B?@JGGIMKOJNFQPRTXQZYfbdd\bXE(  -g‹§­­¨‡ny‘‡„}jat€tC + +  + TKLQ]_`RLC92936=801#    + + + +   +   +   +  .@7% (&!'399,5812-,.*#&36>CIUK=2314BPOHLOKULJTVPXO=+.))2;HMQ\ZW[]Z_ZL@GWbUMI;)AIHFHOSNYaZOLNNJOGL5Kkrs}tiaOFR]VG*"(,"( :oŽ”‘’“›£ zG!  + 'oŽ———œ·ÍÓÔÊÊÇÃÁ¾Ãº…}„ˆjl„‚qmi^d‚±½±š†c[xŸ‰w|Œ•˜¥¥¦¥–x\be\B4TZiny||•¸®±·È˸¶°— Ÿ«ÖàÞÛÌÐË××ÇÍØÞÚÒÄ·´›Œ›ª®¥˜’œ°«¬ªµÌÔÚàÓÏÍÉÉÖäæßÚË·©¥°¿ËÙÝããæçåâäáÞÙ×ËÍÚØßõüüüüüøîèÜØÜââåéêëêêîïðñóøùúúøôóòóðêèçãàÞà×ÐÏÏÌÇÇÆÊÎÓÜæìììùþþþþýýþ÷ç×ÖÕÙÞÝßÛÖßãÜÙÚÛÛÜÜÓÌÑÑØèõûüüþþý÷ëêñññéãÜÓÒÒÎÊÒÚÞßßâêñóöùøúøøùùúù÷ùöøôöõóññïííëéçâÛØÖâìòóêßØÚ×ÞèééêëêêêæäáÝÙÏȶ«°Ôïùþüúøôíéôúúöêд©¿Â¿¿À¸µ± ”™¦²ÄßõûüýýûüûóóûýúñÙýÅÌÑÝãÞÓÍ˳™Ž‘¢¦¥š™–†…­¿ÅÊÔÓÏÏÁƳšŒ“’v\`}P{¼Ëɲh    + +@NVPDLYV]fmS.!  + +\xv‡ŒiYVLC72,1077)6CSxºÞع±Ë×ÜáãßÓ½¡ˆqdbgmffYOJT`XRXI;#  +$\veH1 +  +  $Mcx„}z~z\EPQDADP[aYjŒ”—›“Š€z••–f( + )D`Yc…ž¡‹Q*0(# +'% !$! $.6>KBJRLPTTVYRQQK[TZ^NWX\Y[meed`L% + 4i–¤­¯©¡„{Žš”†€€mdza5 +     MQW^dbYQC:,*/1679@=+  +    + + +   +  + +    +/;4& !&'&!$+;7,.=27200'+,.7@@JLI6+3777@QI@?DPSOHN_^TKMMV_L9("'3*;CHLNTQTQ]VZVHQ`dXOF8*ER?>?MPQY]]WKKENOOI7+'TfkxywpjN@XaWKE4!!'$ %.kŽ•—‘˜£œ—–}G +'e”‘”¤¸ÌÔÔÌÊÉÇÄÅÌî’ƒƒ‰|gu„~jjhk{©¾´¢—yYd’…| ˜¤«¨¤›–xclp`=:H^efqty—¸¯´³ÇȲ³ºš™™«ÑßÝÞÕÏÊÒÚÊÎÖÞÞØμŒ–£ª –—Ž›²¨§¥ªÁËÜàÏÍÈËÁËââØÓÈ·¤¨±ÃÍ×ÝâãåææäâàÙÙÓÄÉØÖæùüûùõîäÝØÕ××Ýäçëìïîîðó÷õøüýùøöõôòïëçäàÛÜÛÙÖÑÑÔÖÐÔÛäêðõúùüúüýþþþüúòêáÝÛÚÛâåâãÞáåâàßÞÜàâÝÛÙØÖÙâíõûþþýüôöûüýýü÷ñëâÛÖ×ÙÛÙÙÙÝãìòô÷ùùø÷ø÷øøøùùøøõôóôòñðîëìæãÞØÕÙÚÝÖÓ×××àèèéêèêéêèãáÜÚÕËļºÓëöûùõõõìêõúúôå˯©Å¼¿ÁÀº³®ž¡¯µÈéøûýüýüýùðöüûüôßƾËËÑàãßÔÍγ•‹•¤¬¥“•š…„¨¶½ÆÐÔÑÊÉÉ°œŽ‡Š„^_j|‚Z{¹ÇĬh'      !;GZj–™x:8ehLC;5+',- !*#  %)3F@H@DECFFGBGBRXSJMSb^ckE + )]{z‰‹i[_MF6,23.56-:FOÅßàȵÎÝåééåÜĨ’|pbieeeePFRaWVYRA1 +  #WjeR? + +   'Lbt|y~‹yaGV[J@BV_bWe™Ÿšy˜šc(">d\^o‰œŸ”m;1$#"'%-(,).'"+$& ,#!&""" &3>bLSOUTaVLVVRQTX]^]XT_da^dehmggI$  + @{› ©­¦—‚…•„„‚uqysU&  + +     SX[TNQGB6-.'&.10/25'  + +         +  + + 6?8)!"&%,/*.+41,207;/&%,.-9CDGKJ8-*%4>BJA@@CNcWOW]WVM>JTSQ@0()+-=@IUPPSUSYTSQRM`eWNJ31?=OCHFIQ[YYMFNOLOJK?7-3Sjqv€j^O[`[XSB9" #"" +-fŠ““œž˜’yB   )kŒ“˜¡µÎØÖÏÊÇÆÅÉÐÇ·¡„lmy‰yjdnk‡²¶ª ‘nWe‰”ƒ›—¤«¬ª ˜‹kgy€a=AA]jnrrx‹²­«·Æ̸³µ¥œ—°ÏÚÜÞÚÓÐÐÚÍÊÑØÞÛ×Ë枤¥¡’‹—²ª¢¢ªºËßàÍÊÈÇÂÊÛÛÊÉɳ©¬¹ÅÏØÜÝßæäåãáÝÛÚÖÌÉÔÔåóóðæàÝ×ØØÚÙØÛåéìñðòõöøùúûüüú÷õóòîëåÞ××ÖÚÛÚÕÓ×ÛÝãêô÷úüüýýýýþþþýùòìäãäæâÝáåæåæåèéééçäâáäããâàÝßÜÚâïùüþûøüþþÿþþþþüøòíæààÜØÕÍÑÜäêóö÷ø÷÷÷ùøøùøùø÷ôõöõôòóðïìêçãÞÙÑÈÆÃÎÕÕßçêêèæéééèåàÜÙØÓÍÅÀÙëñõóòôóíìøûúõåɯ²ÈÿÂźµ¦  §®½ÔìúüüûþýüùñøüüüøæÊ¿ÃËÐáäÛÖÑȸ–Œš§±ž‹“œŒŒ§±·ÆÔÒÏÌÇÅ°—Œ’‹gTft†^|¹ÃÆ®h#  + +  +KIIDHADIQNEHUdfdV+  ++Yuz†‡d^`E?;/..0/>=@IL}ÉâäÌ¿ÏãèëìêáË´¡‘vgkikk^JLY]SVWHCF( +  +*SnaJLcaak‰šž•wŽšŸ™g$ 9M``^}—ŸŸ„N3++2*0-.-0/'$.(.N,110)*$+&"#!&!!1D`PRR`\^_\_]`ecY]]_^fhklhgtnoqiQ-  Z€ž¡¦¢›Šˆ”’†„Šum|e?  +   +PKI>NC;2'&)(')-)&''   "!$!',3990    +     + +  +9KB+%#&')*)+15:42./)(/, ,-3>DLC=A6)009B>;==DIVWLQ^SJMKQ\RMB8%)+1BINRSPMRMSRQRQL[d[LJ:,dq~ysr[NU_KFEJXd`h“˜œ›Š‰†Š˜™—i-   %:VVXg‡œ¢”f@6-)++6<43%$,)+08+1+045+(&/)*()!"3FXXTU\bfab^^`^`][]fZ]gaekrvowpnV- %aƒŸ¨¨¦˜Š…–ž”‹ˆxqk~[4 + + + +     FC<>EA3( ,861+#!   " /785ALLRD* + +  #&- +    +  +   + + +     6M:% "&!$,*+4962/1..122% ,1??GG<:1)050??;49;FLWVY\]WKNWSHE?."'(2>ELORSMHIKPNKLR^caMC6._\?@@PQKWTXRKKM[RSOKPF4#>pvuwkTQble_[ND>4(%" +  + 6j„‹‘š—š“v? +  $k”›©¼ÏÖÓÏÌÌÊÊÔÖÎÅ´¥Ž€……gmzvsohef{±¾³§kQZƒ•Ž¡—§¬ª¬“{r†pM:G]husoy‰¬³²¸Äι·¼µ«©·ËÕ×ÙØÔÓÓÖÛÐÎÔÚÜÜÓÄ«„›£¡ž’¡°©©©¬ÃÚÝÌÃÁÂÇÏÌÀ¸ÆËļ¾ÃÌÑÖÙßääãáßÚÜÝßÜÕÍÉÃÂÆÉÌÒÙÜßßáãååæìðóöøøùùûýüýüûôñìçäÞØÑÎÈË×ÞãåêðõúýþüýýýþýþýüöæææâææèêëîëèìéãßÙÔÖ×ÙâéíîéääëëìîëëçåáÜÙÛÝÜàöþÿþÿþÿþÿÿþýÿüùóéÝÕÔÔÏÑßåèññõ÷÷ùøùù÷õ÷÷÷ùùø÷÷ööôñïïëçâÜÔÑÒÚåèêíìèççèéêäãÞÜÜÖÕÒÏÜãéîñøøõîíøûûöæÍÁËÇÄËËǼ±¡ ¥¬ºÒèøûûüýüýü÷öûüúùøíÝÇËÉÇØÞÜÐÑÄ­•“¥°®”€Š““¡±¹ÃÑÑÓÏÇɳ˜’‘sfivo}~Pp¯À¾ªb%  3BTs†“’y[ZA8B.$'5:/.*3%$,3VaZJ6    +!=aqƒxqsnYG[_V4%"!#2FNB1(!  '/7:CBIPRVE3! + #->@>DLSVVOSLJMWSQJONG=0"Zvusm^Y`ho`[[KB;6+   1h”’’‘———“B +  *q‘•’•§»Ð×ÓÌÏÌÌÑÒÙÓËõšƒ…‡thhxoke[a¡Ã¼³¡‚YTv˜’¡™¤­®©¢•€}ŒŽ„K79Thoquw†­²¬·ÅÉ® ®®¶½ÁÏÔÚÖÎÑÏÏÕÜÓÓÔÖÜÞØÈ®˜Ž˜£¦ ‘“Ÿ­«¤¬¬¾ØÞÉÁ¾ÀÒÕÉ´»ÉÑÅÆÇÈÎÑØÚâââßÜÜÚÝáãßÜÙοÄÇÓÙÙáåæèçåçéîðòô÷ôúûýýüüü÷ïíäÝÖÎÍÌÐËÍÙåîóøýüýüýüýþþþýýùóéÜÚÜãèèëïññìèêëáÓÉÁÁÃÉÕåïñìëéêíîñððíèçåßÛØÒ×ëúþþÿÿÿÿÿÿÿÿÿþþýöîèáÝÖÌÍ×Üäéïôõõø÷øøõ÷÷øúùùùøøõóòòñïìçäÞØÕÚåìëëéèæååçèãàâßÝÙ×ÕÓØßêïðøúõííøýüõåÌÉÕÌÆÊÈÁº±£¦¯¾Öíùüüüýýüýúúúøúú÷îáÎŽ¿ÓÝÛÑÑĪ‘—®µ®…{’Œ‡¡²ºÂÑÓÒÊÉ˳›•„eamv…‰]{®¹¹§i+      +;EVj{‹‘€fO387+%141)#4+!&$1;GKGDGPLP]jm`S;  &\t|’‘j[YEGA94054K?A?]‚ÅãåвÇÞèìíëéØƽ¬ˆqf]otgORebXacPGN80""-12'":MXd_; + +  +  @gu‡xyto[GV]UIDHV^bdy”šŸ›”‡–›žs:  &+EUNJpˆ™ lI@?574617?73<55434941/3,0;A23$"0AY^a`h`bcgcifkkhb]d]cpyrsvnrtx|sX6 4…œ Ÿ¨¤€Œ‹ƒ€wcnˆn8       ?>@B>7'%(&2?OXRC8, "/6?>JMMSUH8""/8/(*),3<742/1CJIIPSTOKR_ZN?50& *9FGOMXSIGPPMQLUcd_TK9.AIFBAKRROZVNJKMLOPHMRSI;.%._qxjd\imso`ZTSG?, + +  ,bƒ—’™šŸ{E-rŠ”˜œ©¹ÏÚÙÍÊÐÑÖÙØÓÑÎÆ¥‹‰ˆg_{Žzmccd…ºÁ·¨’pZg˜œ™¨¬¯« ‹ƒ€‘Ž‚R2?]iniow…ªµ©¸ÅÆ©š£­¹ÀÅÎÑÔÌÅÐÍÌÔÜÙÔ×ØÜßÚͳ Œž¡§¢”‘©µ©®´½ØÜÆ¿½¿ÖÙÍ»ÀÇÏËÃÆÉÍÑÕÙÝÞÝÜÚÛÚÜàãâàÚÏÆÇÍÒÕÛÞäéìéææçèìíîðòöúüüýüúõñèäÚÎÉÃÂÍÏÏØåòúýýýüýþýÿýÿýüúòëäÜÚÝáèëìîðóóîëêêæ×ÍŽ¼ÇÙìòòñëéêîðóòññîíìçåàÚÖÛëõýþÿÿÿÿÿþþÿÿÿÿýüú÷íâÖÅÎÊÔÞåìïò÷øø÷öùøùùùùøøùø÷óôóòðîëæààÚàíðìäàáãääääâãßÛÜÚÙÖÖÝìñóö÷ðíëúüûóÝÊÚßÎÊËü»®¤©µÇßïûüüüýýýüûúùùùùöîäÙÈÀ»ÌÞÙÒÑÀ¤“œ²¹¨„‘“¥²¹ÅÓÖÒÍÊɲŸœwYjps}ŽŠ_y¸»´¥f+   +?:Qit†’‰n@8(-%+20+#"*#!&+/5AW[``]RLFJJNQTFJHJYgqna?+ +  $cw€f]XHE94*+2]szy}nWCP[NE?JT_gex—™˜›–…ƒ–œšy9 + (8EIP\x™¤œ‚[I>563@;9AECAT;87989>.112<954/%+BOajeillpqnqnjgdkdjgfmvrqlsv{u}vf6 +Cˆž¤£«¦Œ~”“‚}um‚†b$       $C@E=6)#!+-./7>DE:4  *7A?DLRSXP>-$0?PT[VPSgu†nXA%  + + +$-83  + + + +4@7# (&-2344--0,22+'$"+3;DPSH>,%-(05?9-$/8BDCORQQTUYTFC8)"(5;BOYTMIKTUONNRbb_UJ51GLHCIKNTQVTLLMHIVNPYVYVS?6/2]qobfgnvrieb\RG2   +  #( *X‚‘’”’˜–”‘vH   1i˜˜Ÿ¯»ÏÝÙÐÓÑÑØÚÛÕÒÑÊ·£Š‡‘xbp€†rjfcq¡½½³¤r[o›£–¡§ª°¤—Œ‚‚[<;Wjqooo~ ¶­´Áô³¦«¿ÃÇÓÕÕÏÇÌÑÍÐÜÞÙÕÓÛàÜÓº«šŠ’Ÿ¤§¢—•¡³«©±ºÓÜÅÁ»ºÏÙ×ÍÌÎÊÎÊÈÏÑÒÕÙÛÛÝÚØØÒËØåãÜÒÐÑÒÔØÜàâæéîíìííêêëïðñõûüûöòïêâÙÒȾ»¿ÆÑ×àñùýþþýýþýþþýûøòêãÞÚÞàãçéíîòóõôõñìêêìîìäÝÞäêîòôñëèêîóõøõôôôóðîëéãÞááçñùþÿþþþÿÿÿÿþÿÿÿýþûðàÓÊËËÒÝàéïòôô÷ùøùúùùùøùù÷÷öôöóòïëééåâêíëâØÙâããããââÞÜÙ×Ø×ÔÞîóöùòðëëùüùï×ÍãÝÑÈÇĹ¯¥¡¬ÀÕéõüüûýýþüüüûùúúùøíåÖÍÊÈÒÞÝÓѾž•©´¶©„y~‘“©¹»ÇÔÕÒÍÈǵ¤Œ^_n€‚‚Œ‹_y»¼¹¨e- +   )EK[m‹ˆ\86/+2A3.$ &  #!",3?BN^]e^`TBPROLPQBKFRdknmT/ Zw„Š„f\QFG:/%/8@MHLTVw°Úàв½ËØäìëæ×Çùœ~mlpq`][dYP_]IIN?./'&"&# (' >_quk8 +   5Zpw€wrlVEQ[RA6I\]`^{—žž”ƒ–Ÿ›w< + 4>JTUhŒ §”{]OJDFLJFMPM=ZPBC>9762=V`edlppoottuqjqqmgjkjpyuq‚€|thA + V˜£ª¬¬š‡ˆ™˜ˆmpƒ…O +     + HHF9.,$''2-)!9+,.0-!-??@FJU[_[N=91-.7DP[\URL\mƒo`L-      + -:?GIJ>' +  0=6$#&%,0892/-1*423*%%$,6;=HMOA0'-407@<,)-9?A?IORSTTTTMH=$ -;;KSXSKLKY\IPQQeg^YJ93CQG?GPLRTUTINMMOLHQc_`_Y[H8(6atgglkohjra_[K>*  +  +!-  ,Z{“˜“’‰pE    2j‘š£¬¹ÐÛ×ÑÕÓÓØÜÛÖÖÔÑÄ´›‹ŽŒrdq‡‚si_i…§¾·±œˆci”§˜¥£¨®¦–’„‚••‡XB?^jnwppuš·«·Àò²£°»ÀÈÏ×ÝØÍÌØÑÊÙÝÖËÐÔÜÞÙ­£Ž‘›£¦¤“’­°©´µÊÙÁ¾´»ÍØÙÒÓÖÉÈÍÐÐÔÖ×ÖØÛÚØØÔÇÁÑäßÙÕÒ×ÚÜßâãåéêððóöðëêîðóöùûøôïëáÙÓǽ»¼ÁÏÛçðôûþþýùúýýýûüøîçÞÚ×Ýâåçèçíðñôõöööñìëíëððíêìììíðôñëéêîô÷úõööøøøõñðìêçãâáäðúûþÿþÿþÿþÿÿÿþþÿþúïÝÕÌÆÍÓÛåìðñöùøùùùùùùùøøø÷÷øõôòññïêéëîëàÖÔàããàâßáßÜÞÝÙÙÔßñôùúõðéëøûôçÐÕâÜÒÌÇÀµ¬¤¥©°ÇÚíøûûûýþþüýýüüüúùöíàÔÊÊÌÒÝÝÖѺ£ž¬ºµ¢sy‘š–©µ»ÆÓÔÎËÈɶœ}bbr…{‹ˆ^|½Á¾§n'  +    EPZv…ŽoH47//>:*& %)!-(+<>HOTaqg[UHNZUSXUKHP`cflY9# + [}ƒ‚}iYHL@=).1B:HGKOWkšÊØÊ«¸ÆÊÚççäÓÅÀ· €ljsyeefeUO`Y;ME<--%$,"&#45,A_prj<  +   9auyxqqtW@FQHF@U[_YVs‘˜ ž“€‰š™—tA  *5BISZ˜¢ ‘k]YXMMW\WOYZJGOUMITUJJAAGMNBA,,BYgelppprrvutxptvv{u}{€}€‚†…€}zgC +*f ¡¥§‘}†‰…‰~r|Œt3        IGD8)##"+*##%0*'-/) %3?GJMX]knnmooiXC7?JTSQICSo|o]L6'    + +  .:BLU^\TD:!    +  .B3%(!&9:9370/.,-1,()"(29>AIN=,-577@;;0.3;A@CIIYUMNUWSG<$/;>HQR[JNLT_YSMSfl`UD7*@MB?CIMLVUQJHLIRIILV\ae[S]D36_\Ukkifdkcc^PI8$   %$  ,^{ŠŽ‘Ž‡n<  +,o’–Ÿ§­¸ÏØÒÑÑÕÖÙÜÜÖØÙÛÑĨ’Š‹xih{ŒvkffoŸ¼¼²©’lZ„¢›¤¤¯²¬—‘„‡’•ŠY@9Sotvqwxš·­·¿Æ¬§¨­·ÄË×ÞÝÒÊØÜÏÕÚÔÄÏÐØßÜŲ®’‹’§®§¡š• ©¬¯´½Ð¾¹ºËØ×ÑÖØÇÆÈÑÓÕÔÔÔ×ØÙÖ×ÏÉÆÐÞÛÚØØÚÝàãâåèëîñõùøóêìîó÷úù÷óëçáÚÍ¿»¼ÉÓãðúüûûþýûöðøûùöïçÝÚÚÚßãäéèëìîòòñôóôöñëëëìîîïðîìíìîðìççéíó÷öôöøùùù÷öóññíèçååáçï÷ýþþÿþþÿÿÿþÿÿþþý÷êÛÊÈÉÐÚçìíóóøøùùùúúù÷øùùøøøøôõòðîîííëàÔ×ÚáåãâÞÝßÞÞÙÚÙÕßðøúûùñêêõøìÜÏäæÛÎÍƾ·®¡©°´ÎáðúüúýýþþýýþûüýüøõîçÜÏÊÒ×ÝÝ×Ò½£¥¯¹±¢cšœ¨¶¼ÇÓÑÐÍÇÆ´žrlp‚‡‹‚}Wn¶À¾¨w+  + +  +"5ITr€‚^H?:/8:0!1'#! +&/A??ADXdtocXZP\VYSXKJW^hf_:% # U|Š~`[RF;8<-2/1>IQ]clŽºÎƦ¯ÂÆÑßáÝÎþº§…`ap‚{umgXUccCQR<5,%*/'!*9;$Ag‡rH(     CbŠ‹|mvpTEIX^QMQRfaXoŠ¡¡’…‚š–›x@   )7?TOd¥Ÿ™zfY]ZR]]XMXVKGQMPUNVNNPRPWQCE6-C[filstqsrpktuytxwxqzz}{z†ƒ†ŠŒ{fG 7uœ¥   ‰‹‰ntŒq3 + +      C?;."$()! *N45/   $3BY`jrz‹ŽŽ”˜‘|ZJ?ADHPMANhvyl\J@53& +  /@Pa`_a[J5*   +  /D9! "#&+-/2/1--/82&%#$+2<=EI@<34569?=4//4>D==CFMLSPVSOED/'6?KRXQFLOOYROJOfd_Q@5*?KI=IFINNS[RLKLVTZN]fb_b[YQB.7M\gddfookd]]RF@1  & )\z‘‘•Œƒg+  ,h›Ÿ¤®»ÑØÔÒÒÓÖØÚÚÕÔÙÜ×ƶ›ƒ‹Œnfu€‰vnmg†¯»°ªš~Zf“–£¬ª¸­œŽ‹•˜`A=Tprqrr{›´°¶¾Ã±¤¨º¾ÄÊ×ÛÝÔËÖßÖÐÔÖÉÉÍØÝÚɶ±Œ¤ª®£œ‘›ª£©°±Å¿·´¼ÐÖØÊÏÙÈÅÊÐÕ×Ø×ØØÕÕÚÕÑ×ÌÉÙÜÜÞßÞàâåçèêïñõ÷ùùõëêíñøùõòîåÞÒÇ¿³·ÁÄÚïùýþýüüüýûñéîòìæÞÚ×Üâãççêëìîïïòòñññóôðëêéêìííïîëíîíìèææéîðððòóôøúùùùø÷õóðïëéçäåçíõúþþþÿþÿþÿþÿÿÿýûóæÒÈËÌÕãêíðöøùùøøùùùúùù÷øù÷ö÷ôóòïïîéâÚÙÕÛáãââáÜàÝÜÙÙÕãóøûýúôëëôïâÓÔéçÚÑÍÅ¿º¥ž¤±·ÒåóúúûýþþýüüýüþýúöòðíãÖÐÖÜÝÜ×Ϲž¡³¸±zl‚“›£¶ºÈÖÖÑËÅų“mkq€‹Œ†||_q´À¸¤k+  + + +   "2>KOOQMPcxzjRA?@8,(*1<;,'"   + +%?V^_cc_N=* +  +  + +  /:5%" %%##,,)-16.+-/)!!&-06ACOF>412:<>@:056@A>AGFGKLIXPIK@2+8AGR]TGGL]\YPLMccbRC26CH?8GF>KPPQTKOLRQYOXdf`__b_S<' I_caigmrnegcYVLJ' + ( 0b{†ˆ‹Š‹‰‡c+   8s‹™Ÿ§¯¸ÎØÖÓ×ØÒÕÝÛÕ×ÙÚ×Ë»§ŒŽ“zlem~{rkfpš¸»²¡Šfb‰Ÿ¤ª¬¼³˜Ž“•‰a=ETjppvtu™·¯´»¿ª›Ÿ²ÉÍÄËÖÚÛÒÊØáÚÑÓÚÎÆÉÖÞÜѾ¬§‘£¤¬§ž”–¯¦Ÿ­²¾À·²¿ÔÖ×ËÏÚÊÆËÕÖÔÕÖØÔÔØÚÍËØÏËÕÛÞÜáâåêíëêìíðóøùùõîíîñõòñëãÖÈľ¸¶ÀÉÝòýþýüýýþþþùíÜÕÚØÖÕÙßâèéìëííîððòïðïïëîððìèèèêëëêëíîîðìéåäèêìïíîïñ÷úùùùùùù÷öôññìéæåãäêöýþÿÿÿÿÿÿÿÿÿþþýùìÝÒËÌØáèëðô÷úøúùúúùùøøøù÷öõôõñòñðîçàÝ×ÖÜâãâãàÜÞÜÛÛÚèõöüýûøíêòçÛÐßíæÚÔÉÀÅ·žœ¬±ÂÝêôúûýýþþüüýýýýüú÷ððïçÙÏÓÙÝÛÔϸ¤§¶¹¬“wl€’•¡³²ÀÛÙÔÐÃÁ¤…ljsz”“‡rwds´Â½£m(  +    +%6BVyqZOC75>8,3+& ")027#  Sƒ…”sb_RL@802.2=AENP`qŠ°µž¬ÁÃÃÊÆÁ«Ÿ³¸¤jo{…Œ‰scXR]`CIM-**1)-0&1EZPFPXr€ˆ€K* +  4Vk}yltt]EOU`U@FOXGPm‹›Ÿœ”‡u{‘–”ƒD + + ".COK[v›©§™y`cX^`[\]\W?KDBR^Zcjf`d]XTZYF>J[jptrpsprroouqpx{rrxqvuy|‡„ŒŠ€qN#&S‡¥®ª¦ ”—¡”‘{‰|C + +  + +   *)"! $-.!%'9CD6  '4Kev‡Œ“š˜œ £Ÿ”tR>AAKONJLaƒ‹‚jYHC=EHLZag_NA540-("  +   + #9R`aaY^^P>&       #2;1" +&!'2.+16421*)($#(39AIFC<302:;=<2087=BFEINRKMQ\QKMB)1JFDMPSRPIMXXVT\ibbdji^_N=-P`ffinqrmka]WPUF'!( /Wt€‚ˆ…‡ˆ†{f/  +5t”™›¤«®ÆÛÚ×ÙÚÖÕØÜÖ×Ù×Ô;°Ÿ‹ˆˆubju|plep„¬¿»«œz]w¢¬¤°¼¯’‚†—€]CBM`hnyvpŽ°¬¶º¸ ™¨¶ÏÒÆÌ×ÚÚÔËÒáÜÒÐÛÕÅÈÓØÝ׏«–›¤«¦—’«¨¬®ºÁ¼¯ÁÓ×ÕÍÑÜÑÌÎÖÓÕÕÑÐÓ×Ú×ÅÄÑÐÏÕÖÛÞáåëðòðïîííñ÷ùùøñðîïðîëæ×ÊÅÄýÅÓæóýüþþþþþþþüóâÏËÎÑ×ÙÞäèêìïðððîòðññîîììììðïêèäåæêêêëíîïéççæîïîñòððñô÷ùûûùúøùùùöôóñîëèæâæðøüÿþþþþÿÿÿÿÿþýýôçÖÍÏÔßèëñõöøùùúùùùø÷ùøùøùøóðòóòñîçßØÕÙàááãßÛÝÜÝÜßêôøûüû÷ïîïáÓÓêíåÙÐÊÅ𢨰·Íåïöüüýýþÿýýýüýýüû÷ñïîêßÐÌ×ÜÚÖζ¦­³·«’sgu—™Ÿ°­ÁÝÚÕÎÁ°dmou}•Ž}cp[w¶Ãº¥v,    !+F[wnOIE?>>;/"** /6A>6CCLM^mqkifaVEHN_SRP_keK1  Us’s]ZFJ?3*//+'6DS`ej†¤®²¤ºÃ¿Â¼² “¤®œ~dbzŠ‚c^MN^TIIH60/4..4/ .RbkmnqˆƒoC    + 5OuzzopvdLON]WAEQRG@d|”˜˜–‰q€“œ›…D   +%$3LRKg’Ÿ¢ž‹ha\bada]YTFFE9J^`_c^cia_]dbN?J`bnx€vr}woov{xy‚~{~|{‘ŽƒsX# 0c¥¤¨§—‰”¦«ž‘„‡e1      &+6?C.)6;AD4  $4KfpŒ“˜™™ž Ÿ—W=;APZQJJ]z‹ˆv_M>>EVmtyzn`IC?CC@:.    + +     +  + +  + +  + 7L^cd]^`TM7     +  4?1$''056/22750/)&'"!-2;DLND853>33>;4000:CIFEQNKOTQXLG="#-=LOMMQPBJ_]VVOVfaWSD6>DL@JLGCEUUZKPQNNRRR]cfgmghga[L(-OZgnqwvrpldZ^]Z;  +  1Tl„‚Š„‚w`* ?t˜¡ ¤«©µ×ÜÜÞÛÖÖÙØÔÓ×ÓÓÌÁ½®„Ž‡kdp{shhv“¶º³©beª«°»­ˆƒ‡–…]KCNlhmnko°¯·µ¹§¨µÀÔÐÇÏÖÑÐÒÎÉÝÜØÖ×ÝËÅÑÕÛÙɺ± Š•¢¦§—š–›ªž«²¹Åº´ÇÖØÕÇÐÜ×ÏÎÓÖÙÚÖÏÏØÚÍÁÁÍÐÐÔÙßèìðòõøõñîíîñó÷ùöòîííìçâÞÑÃÃÌÊÉÛìùûýýüÿþþþüúôãÕÍÏÒØÛàæèëðñòðòñóòññðëëìðñïïðîìåâáçåèéèììêçèêðîòóóôñòõøøüüûüûøøùúùøøöòðíêæäçìöùûýþþÿÿÿÿÿÿÿþúê×ÏÓÚßäèîóöùùùùøøøøøøøøøô÷ôóóóòñêàÚÖÔÝßàãâÝÜÛÜÜÞéóøûýüøñòìàÐÔíêßÑÉŽ³¨©­µ½Ñéñøúüÿþþþüýþüýþýûøòîîëä×ÏÕÛÜÕϲ¥§³¶¤”riuš– ±ª¼ÛÚÔÏ¿ tap}ƒŒ‚g[p[h¬»¶¢r.  ++Ev|YEM@>@HHHB[hsssh`WQKJXXZUccN2" +"  Gu€‘qYZLIH32/)+-9@Pc[pŠ¦¯³ ›·Äþ¸¯œ–£ŽvbavŽ“…]VPY_PFFI7003/49+! <]qt{ƒ‚pg<  +    +Eo}xnnpeI@NTR@?MMQN`”™—–‡x›Ÿ…H + + &CKRZ€‘Ÿ“ug^^ZXe]VVPQK:JU[mh_`eb\fdeR=?`hkztmqutv|yzw€x|€Ž‡„…‡Ž‹…‹ŽˆxT%;o“ žžŽ†”¡¡“‡|„‰~Q#- +      #-8CLL3 !#0?DE3 %2Ear†Œ‘•–›š—’z]>?BQ_ZSUXvŠ‰gO=;@Yo}{|tiSCHKJE><+       #HMLC624>;3<970'3MOOS]HKN_a_VLMbi_UD7=JJKJEGJOUVSGGFONEOPQ`cdkegg[dT34Sgkjsoqqog]]^]W7  .$ Pcgl¢²¯¡´Ãüº·§‹“ ‚gcjv‰‰q]VHI[MINI8.0+,/9/ -Jdpt|{ˆwtd?+ + ,F_mtnkxd@FNNK?BHX_RY„”—‘Š}vŠ”Ÿ‡X + + #&1FVNož£ƒna_]]ahaWQPD7N_cmhb^`abdc_UHB\inxwrzxy}}tt|wt}‰ŒŠ‰‘“ŒŽ“ˆqV. J„—£¡¦›‘Ÿž“Žƒ|‰–|C     +      )2?JOJ1#1ACF2  $0G_ow€‚‡‹‘–š—’Ž{bHEFW\]XSXv†ˆ~hV@39Omw|„„lYHGNQJD?2  + + + +     + + +3RjspI  (+-@cxs\="1J[^`aWQRK8  + +      +*<1&**'.014*,,0*)&0((#*4EDK>?:-06=7:452+1@@B>AENQNNKONN?- 4ALMRPSIEQaWPROK\cYTJ;7N\I@FJJNLWWJHIPRMKQU^^`iefghcX<"6_oghlpnsocY\f[K/  / +9eq‚ˆ„‰‹†tj*  9mŒ–›¥ª¡š²ØÜÚÚÕÖÙÙÒÔÚÛ×ÐËÇÆ©‡…‰mh}„vrceo´¶´­[]’¢£¨•‹Š‡‡”x]B8Jhprwt€‘¯µ¸µ¶­­²ÅÖÎÊ×ÛкÀÈÊÚåÖØ×ÑÑÉÈÔÙÞØɸ±™Š’«© œ–“§­«­®½½ÀÒàÛØÑÕßÚÍÎÒÕÖÑÌÌ×ØÊ¿»ÄÎÔÖÛÝèíóõ÷ùù÷ôòðñ÷ø÷öòðíæãÝÛÙÙÐÈÈÌàñùùúüþþýýùôìãÛÔÓÔØÚÝåæìîïññòò÷ööóôòòðîììíðñîïòñìéçåäååææççéíòóòïïñòòðô÷÷øùüûûûûüúüûúú÷÷ôôñíëêéäÞâòýÿÿþÿÿÿÿÿþýöéâÜÙÜÚáëðôöø÷øøù÷ùø÷ùùõòóõôõòñòíäÚÒ×ãââáááÜÚÜãëôùýüüüøóèÕÌåéß×Ëúµ«§¬¯·ÈáóõöùüþýþþýýýüýþûúøñìïìçÚÐÕÛÜÙϵ«°·¯™‡ndf~•š™¦¬³ÐÖʯ|anrwŒ…j^`e\e«»µ©ƒ;  +  "2""*,).0./.*'/(-.--,-58EFIA@82/406=7&.03;D?@?IKGKLLQRH5" +1BOTZYWULL^XNQOQ^fYSH7;KSD?EFJKPWRKOOVVPMQYbcdcmgigaXG2-HbhiprvsmhaabbUG1 +,' !?eu†‰‹ƒ}xk. 2lŽ–¢©©¨§¦ÂÖØ×ÕÓÖÙÓÔÚÝÜÔÉÌÌ´›‰’ƒlv„†sjagt¸¸¯—tXq˜¢ž’†‹Œ‘ƒVA9Ajns|{|³·¶¶²­¯¸ÉØÎÊÚÞÙÅ¿ÇÇÔâ×Ñ×ÔÓÈÌÕÙÝÜÒÁµ¨Ž¢¨¦žšœ¡±¯«®¼ÀÆÖãÜÙÒ×áÜÔÓÔØ×ÒÉÍ×ÕÀ»ÅÐ×ÝàääèíòòòòõôóôõøúúúõñìçÞØÚÙØØÓÏÓÞð÷üýýþþü÷ñéßØ××ÖÚÛÜàãèêíðòóòòôöùöõöôñîïïíëîíëîðíììèçèçèéèêêëïòòñíïðñðñóööùùüûýûüüûýüüûùúøùöôóïîìåãçïøýþþÿÿÿÿÿþýöìãÛÜ×ÔÞèíòõööøøøøø÷øøóöôôôõõòòïëâÚÖßäãâãáÜÝÚáëôùýýüýüõèÔ×ëæÚÏÉ»²¢¦³·ÀÓì÷ø÷ùýýýýýþýýýýýüüúöíìëçÞÔØÜÚÕɳ®´²ª–p_f~—§­¯ÉÏÉ·Žfgt€‹‹|d^\gZd«½µ¯‡7   +*ZkVOH;23BD05<.*'(-9BB@OON?FFMOTbjfjk]YY[`afrqM( !  Ej~’o`aYOH:,0&%$-AO]ix–¨³² —®ºÀ¾¿Ç»•‰“ŠiZ\`wtfXVOIYWGKG=8+(++1)?_q†‡€uzmjmpQ,  + + +  %?_€‚rqh]CHPTMB?ORYT_wŠ…€‚Ž––‹W1   $:BENs‘œŸžobhfhfbjf\gcinlmlkeghgjji^HM\msx€xw||€~|wvpqx~€…ˆŒ‹’Œ}b?87>B@:% %)), !/?LPHMTYhrŽ›¢pUPLWW]SNKbx‚sR>70:]owzvpgVGS^XPL=, +Nkzo^B24CILD$:U`^EE\vˆŒˆƒqS5,5FTfslg|“žš‘„eB$*E^dhhdc\SH, + +  + + %?B:*#"%11*02/-/0&(--+()338EJNH<;4050387*//-;C=;?CADIGIPOI: 4@HW[^c_TJMUVTLPdg[KD9?RRBC?IJLVSNNRMLHKOJWfbggkgkeh_LH@5" !Ccitrssk`]_fj[[M. .A+:bt„‡Žˆ‰‚yzvA :j…ž§¨¤¨¢¤ÀÓÕÓÔÖÙÓÓÙÞÞ×ÍÐÓ¿«—‚Žxiƒ‚qfkj…ªº¸ª“j\‰¤œŠ‹‰‹•†M8=Gkps}|ƒ†­¸´´¹¯­¼ÊÖÈÊÚâÜÍ»ÅÅÐàÜÊÑØÕÐÈÏÙÞÝÙÈ¿¯›†–¤ª¡ ˜™±°®´³ÆÒÝãÜÙÔØãà×ÖØÙÖÎÉÏÓƸ¶ÊÚàäêëëíðòñðîðôöùùúûüú÷îá×ÎÊÑÕ×ÛÝÞéóûüýýüùóèà×ÕÖØØÚÜßããèééîðóóôøõøùö÷öõóïìéèèêêêæççêèéêììêéëìíééìêìëêëííîðñò÷ùùùúüýûüüýüüüûûüùùøøôôòñîêéêðöùüÿÿÿÿÿþþýõèâÛÑÐÚæìðôöõ÷øø÷ø÷öôöóñóôôòððíéàÝÜææÜÝÞÚÛÜâëöúüþýþÿöäÖãëàÔÌËÅ»¦¢¦´½ÌáõúùôûþýþýûýþýüýüýýýøïíéâØÖÙÛÛÒı¯³±¥‘l\b’’“§«­Â̽¢phww˜’Žr^`bradªÂ·©ˆB + + +=j_WG<;652489+&)+5CAIF@9GRVQTs„’‰z‹Œ•…X+ +  +(05566;20.-3>===?@=D@FMMLR= 0>PTZ_dXNQQ\[ZQSb^VPD:=RHGCDJJJWVQLJKKMOKEQeegbheekhaPNB=,%$Kewosk\\\fbd]ZZJ)  !>7?ap‹Ž‡‡}yw|L +)b‰–¦­¢œ±Ÿ¨ÉÓÔÓÔ×ÓÓØÛÝÙÔÓÔĵ …Š”ˆok€†vhekz´º©™„an–›ˆ„Š‡–PA2Fhlvop~Š¬·´¶·®­µÇÔÅÅÙßÜÍ»ÁÇÍÜÝÌÈ××ÙÎÅÏÛâÛÏÀ¸¥£¨Ÿ¡’‘¨¶±µ²ÆÙßäÝØÕØäàÖÕÕÙ×ÍÇÔÉÀ¼ÀÎÝäéìííîïðïïñ÷øõ÷ùúúø÷óèÚËÂÄÑØÚßáíøûüüüøòèÜ×ÓÖØÛÝâàåçæèéêëïñôôöõ÷õøùù÷òñîëëêêëëéããàãçééëìééëëìèêæèèçèèëëëìïðóöùøùúûüüüüüüûýûüûúûùúù÷÷òñîìëèìóøýýþÿÿÿþüòêçÛËÍÛãìðòôöööøõôôôòòòóòññððïíéãÜãæÝÙÚÝÞÜáêóùüýþýýóãÙêéÞÔÒËÀ¶©£ª¶¿ÐèøûõöüýþþüüýýüûûýþþüöîêèÜÔØ×ØÛÓÄ°°±­Ÿ”peRpˆ’“¡¨­ÁƲ‰bj|„‘™“„hXdgwa`«Á¶¤;   T[]^B;@=4''0,+*).7EHQKNKSLNRNCFPThhkn[S\^mqxqJ' !"# "Fv‡„q_]JFD9'1%&)*GZfp€”¨¯®¡µ¾¿¿ÄÈŧŠ’Žz^HXkgZg`XYeEKRH04++03@+-3TkxxmgkwnR- +   +8_xvrpmdB5@AHF9AV\RRgƒŽŽŠyn‚Š„^' + +  +#4B8Jg£¥œ“trntxqlpruqelhhgkeghkjeePIagx|ƒ‰ˆ{†…ƒ|~„ƒƒ††‰‹Œ“’“Ž‡ˆ~u`>!/[‡•œ ”˜˜˜”’‹ƒˆ‰{T%  +    + + 3.0123-.#"/$  &7EXeju~Š“™š™˜”sOIKMSV\TJ\q}|r_L9,/QevvusrhTKZb[F3",Js‡…tcW]a]`VQUbhmqvsg[`nyzz…x_\[`\`jmdbz“›š•i;",F\gjjijfYG+ + + +   -<;+!$.157542*74.+.+ #+0:;HIJG223737@2+*./@@?8:?>?=CIHSC7$+Unmlb]X]`ghb\^R@ +C0Casˆ‹Š‡ƒyzqvV +  ,h—›«¬ž‹¦§˜³ÏÐÒÓÙÔÕÚÜÚ×ÔÔÔɽ³™‰•~bt‚…tsjs{¥º¬¢•rY†›’…‘‘Ž•xP9=Eipqus}‹¨µµ¶µ¶¶­½ÐÁÃÒÄÉѾ¾ÉÅØàÏÅÒØÝ×ÊÍÔÜÞÖĽ­— ¡¡Ÿœ•›³¯¸³¾ÖàåÝØÖÖâÞ×ÓØÕÒÊÈÓ´ÄÉÑÝæëîíëëëííî÷ûù÷ùûúöòñìâÏÅÃÂËÜâäçöûúùøñçÛÐÏÒÙÛÞâãçèéêëêìíðððòôôö÷÷õ÷÷÷óðêêëìíëëèåâããäçèèèççèêæååãåççæèêééëïðñòõøøøûúüüüûûýüûüüúüüøúøù÷øóññìêééðõûþýÿþýúùöïÛÍÎÖâêîôõõöööóöóôóòòóóðñððîëåÞâçãÝØÛÞßäëôùûýýýüðâæñëáÙÓÊÁ·©£«¶ÂØîøúóõûûýýýþþýûúüüüýúõëçæÝÙÙØØÙÒÅ´²³®Ÿš„pf\n†–£¨ª½¿¨z`oqˆ“—ygWbrxa¨Ä¼¨~<  + +-bTVVG@H:5#.4-/0;HRNFQLTYLJMKIGQ[]dee]]a\jvpT4 ## %"# + + +  ?tv„m^YIH@:,.)-&)EWcn{­²°Ÿ¤½¿ÂÁÀÄÀ¤‡‹”zWQ^j[Qhh^Y\THHN?35$,09*(=ct{|rhcw€~~vX4    + !6e|~|nkcB7I>MB=BIMPVk†Ž•‘}n‘‘ˆd- +  +  #*FED=1.7437;7&(,8F?=A=<=<@>KJPI7$:FHK\a_bQQZ]RLSYa^QOB4:LNJB>GOUQPPRIGM^dXMTcg_jihcac_XPJJC@55VmkiZZccbdad`ZJ+ 7:7EXh‡‹‡Œ‰ˆ{}ƒ[(  /h‡• §¥—Š’¨ž¤ÃÐÒÓØ×ÕÜ×Ø×ÑÕÕÌʬ†Ž‡kl€„~{ois“²®©œƒbv”…Ž“’–~N;=>gpitztƒ¦¸µ³´µ¸­¶ÈÀÃÀ¦®ÏÆÂÆÅÖÜÔÍÔÚÝÝÎÇÎÜßÖǺ± ”¥Ÿ¡ž›®¬°´¹ÒâåâÛÕÕâßÖÓØ×ÎÇÏÔÁ¸ÆÓÝßçïïëéêìððóùúùùüûøóîíâÕÅÆÉÇÎàíòëòøöðæÛÔÍÏÔØÚßãåçêêëìïîðïðòòóõööööõ÷ôôðêçääééçæäàÝàÞßàßÝÝãæâÞÜßÝßàßàâáåãäæëëíîññôõ÷ùûúûúüûüûýýüûüúùùøúùøõõñïíèèèëöýþýüüþýüíØÉË×ãëïðôôó÷õ÷õôôñòóóïððíìëèâàççáÛÜÝÞæíöùýüþþýîåïôíâÚÐÁ¾¯«¨«¼Êãõûøò÷ûýþýüþþüüúûüýúôïçççäÞÝÝØÕÓǸ±·®œ—†vg]k‹‘•§ª¦¶°rfp€„–”p_]g†–ia§È°…;  + HYGIK9A=6((0% *>CV\^SXQYTIHJGNOQX^hga_bbmpudB "$#   7h~‰kXRJHE13%().>Wbi‚›¬²«ž®ÇÉÄÀÀÀ»¦ˆ’€bWe`GXigYbbRFQP@:/&-270-Eotvrobm…Š„d1  +   :^w|vzujB0DCID7AIAIOm†Œ–‘†lx–‰e.  + +$+5=;Qq“£¢•‹€rstpsuxqou{mvqrljljjqojf^eo{‚‡Œˆ…ƒ€„ƒp}~sx€ƒŠ‹‰ŠŒ†ƒ{l_:)@f‰™ž œ™™œŸ”Ž‚vx‚|_.  +        .+/2/,/.7*  &1D^jr~‚‡•œŸ¢ ˜O@ENU]`]OSdt}tfE1/(0Leqrvvp_TRXO<+! !9\‡’‡p_[PQZ`SLT`jsukaC6:Lgsy}zaKDL[`\`iqik•Ÿž›ˆ[6"/NborrmgbWH)   + +AF3 %)0871021290$! '%/9HNG83+75751.))0;E>DG@>>8;ABNQF3%1IKGY]]_URVaVXJQ_aMJA59DIGEBHRMVTNIIKJTWWZ^__cinkhaj_^MQQJFB0 2brmVT`ia`[]d]O= "+3%:=CPdx…‡ˆˆ€x|„i0  /g‹“žª¥”„ž¤“¯ÍÏÔÙÚ×ÙÙÙ×ÔÙÙÏÌÆ·›Œ€p|‰†ympsž²¬¤ti‰•†Œ–•—ƒSC>F^lmrk{‚¢µµ²²¸¾·Âʽ½¯ŠŸÌÊÄËÇÑØÔÐÖÝÞáÑÄËÖÜØ볨’ ¥ œ™‘«¯¯´¶ÎàåàÛÓÕâÞÖÑÕÐÌÈÒͽ½ÈÕÝåèìïííïïòò÷úùõøùøõðéäÖÇÂÌÉËÛïøøéàèãÚÑÊÌÔÔÛàâæçëêìíîðððóòòòòôøöõõõôóóðèáßÛÛÞããáÞÚØÖ××ÐÒÍÐÛß×ÐÎÕÒÔ×ØÚØÚÛÛÛÛßàæçéîïñòõöùúùúûúüýüüûûûüúûúùøùø÷õòðìéãéñøúøúþþýùìØÉÏÙâèíññó÷õõóóòñòóðððííîìçåäéîåâÜÝàâìöúüýþþúêèôôëàÚÐǹ«®®·ÆÔíûûøóùûýýüýþþýùùùüûóèæãåççâáÛÛ×Ðƹ²¬¤””veUn‡•¨©­¤€edu‰Ž‘‡„kc_{Œ…hg«Ä¿«Œ@ + +   0[NK9FI?2-%#-)#,=Q]be\c\TUVEBBBKQX]ljcbdtrvjX2" &&" !=g{‚pTPJNC;*,-/*$4M^s‰™¨­¯Ÿ²ÓÒɼ¾´Ÿ‡Œ“cRT[T[b`WX_MKKC94(./6235XwyspkbiƒŒ’Š[/     !6Xwy{yumI5=HM<9>IB<<]„‘–Œ‚u‚”“d3   ,8FKc… ž˜|lsvwzzyrnywrqxtrtorstzloallvz‚ˆŒ†‹ƒ‚…xy{|†Œ‹”Œ‰…‰zmcA1Q}—Ÿš•’”•˜~|‚|q?# +  +  +  + +  " $" $*640*%   !(1@Xhp|{‰’—›žž¡—U@DOR``_PLZr€tcP3.%*?\korrrf\TYXC3" *Fs•“…n`SSY]LB>HZhh[I>34D\jonun\RGEUa_^ctufpŒ›¡ž•sD'!5PmotldaYP;     1B>.&"# /76218+.3/+#$+.37ANGC3-66+.3,(/.:>@B?C@=979^Šœ£¥š“ŽŒ”™ŽŒ‚„…_- +      +%!!"!"**3578("  +%5?Uiyyz„Œ–šŸ —„M;BHQ\b`VM[lwxjW7(%+;XiprrokYRWYK4% %4e“—‘‰oXWTWSE<8ITRJLLF:7HagniidZMJM`kc^qyph}— Ÿ•zT7!"G_gkoieaXH  +  + +  + + +  +@<0!# "/3.15;6780.,&+&*<<;:F@BH8*>OPYgcZWM]WZTJQVZWLB3=NJKKJGMPWUTQJJFFLLMYadfd\bcjjca[^[de[J1* AXPJ\\aXZ[]WXN>+  + 5Yoxˆ†Š†‡{|†n1   KHGX€•š‘Œwl‚•””r=  +".@:@^| ž‚yxysvqwxxs|‚‡zw{ƒ{wmffrv}ƒƒ‡€Š‡‚Š†|ƒ~~~‚…€€„„„ƒy|wm`CIo›™ £—‘–•žœ”yP$    +    + +63-'+" #2?7/  );EZi{‚~…—œž ¡›ˆ^HCFObbc`KOjsxr\=/##1UfmquroZIT]SC-  *Oˆ˜™•…iWUSQD91<92;DBAD7( '=POTa_TSP^b]VKKVSSK?88KIFGLIQNKXMK>CFLRZJUecadfhgmg\\\d_`ibUC=(6AGT__a^RPbXSE8   +bil}€Š‹…‚uƒ~j8  + At‹’ž§ ufp„¡™·ÐÕ××ÙÜÙØÕØØÔÒν°™}‘{sƒˆyqqy—µ®©—‚dh– Œ–š—zTC>>Zqu~‚€‚˜´°¶ºµžÁż¯¨‡†Ž³Ë½ÂÄÅ»ÀÉÐ×ããâÛÈÌÒØÙËÁ·ª”›¢¡™‘–§³ªµ·ÒâÝØ×Öãá×ÎÎÉÎÑÑÔÓÊÅÁ×èêëèèèìîïïììêìííêåÚ뱫µÇáîïêáÕÈÀÇÌÏ×ÝßäæìììðñññóôôóôóóôòðïíçåáÜÕÒËÅ»ÃÌÊÊÐØÞáàßÔÕÖÚ××Ö×ØÞâÝÞÞÙ×Ö×ØØÖ×ÙÖÕÕÒÖÏÈÅÊÌÉÑÒ×Üãåéíïòö÷ùùûüúüúúúüýýüýùúúùùôñðéäßäï÷üýûðÛžÌÙäêíðòôðñòðïðîìéééáÕÒàðòóóîççãçíöùûüýúíÞìòèÛÓËÅ¿°±·ÀÇÛóüýûöùøûúüýýüüüûûúøïßÌÇØÚÝæàÖÙØÔ˾¯¥“’‹xjj€”“™¥©–zhru€‰Œ‰cfegˆ„owlTš·´¨…A  #WTC>K??40"*$-3:KPYccc]`X\`UKG=EKIPaglq‚Œ|iC&"+%!)$ $(D]Z+1^qwihgYQ?:/*3)'(:Udp„—¤ª®¦¥ËÕÒÌž´œƒ‚Š~aNGT`\W]ZT`XU^O47;04AIFQdfqzzem”’ˆ}hC$ +   0`wyxw{jO<7@KR86=CF=V~‘”’“‡r}’—’wC   + + #8>@Sp£šŒƒ~„€wu€{z{Œ†„Œ‡|t|€xvjipuwzy€‚ˆ…ƒƒ|zxzuty|z{syvt|zysgVBGpŠ”Ÿ•“•™›’‰„“’q>  + +   +  + +  AF<1/##%/3/"$ 31%%.OdmtrtpaNITWD=) $7r’™š‘€eWWOC6,0?Q^c_WF:5:Pgoti_PGER_nlhqynfw•”ŒuZ6$&F]gc^[VSV@  +  + + + +  *A@0)&" "!(3740412.)))%%#*0CLIQG=5:75:::51;5DE?;D@9878?@?7.,7BLSccZUU_cZQEJYTLHB5;NLCDHN^VXZVOCEIQQIKVcd`ephlkhd^]ad`dcYPA6%,?N\]UU]ZVVPN4  +   %Xieq„~wyˆ‚‚f1 +  +D{Ž™ ¢sahu©¤£ÆÑÓÕÛÚÚ×Ò×ÙÔÑÎÄż¯‹‡•„tsƒ…wqop…®²©š’w`|¢‘˜š“v]A9@dr~}–²²¶º·¯Âü´¤‰…Œ®Ê¾ÂÃÃÆÉÊÕÙããâàÊÆÊÕÛÑȸ¬œ™ ¢Ÿ›‘•¢®­°°ÃÙÛÙÖØããÔÏÎÊÙ×ÈÒÏÁ½»ÏâçççéìíêîîìëíîììåÜ͹¯­´¹ÅÔÚ×ÏÄÂÅÉÍÒ×ÚÜãéêìïðñññòóôóóóõóòîëçâÛ×ÓÊÁ¾ÀÀºÇÎÐÎÐÕÙÙØÝâèéêèçèéæäèéééèäææçâàÝÚÛßâÝÝ×ÓÓÎÏÎÓÏÈÉÒÔÚâéìïó÷úûûùüùøúüüüýüûûûûùøõóîìçâãçîôóíÜø¾ËØæêïðòðïòððîîíëåàÖÊÉÚìñíðòêäâæíöùûýüõæÛîîáØÐÊļª¯½ÄÑçõüýûøøøùúûüýüüüüüúõéÕÆÅÖÛÞââÝÚØÔÍÀÅ·¦š—‘Š|vŠ¦²¢—œ®¦€iju~‰“Žvbacw…ssjV˜¸®Ÿ‡F  + +  +IZ?BA<=<4()40(!0811)(3/##  +8F[hkgd^cms’•”šŽY78?GS`b`KIYnrucD5(&+?E?@;66;8:>>2,")4:3$DP_\YZYLNOC-  #JbegiZP`quzsf4   B|Ž“œ¨Ÿ‘†kii{–­¢¨ÅÐÔÛÜÜØÖØÙÔÒÎÉÈɼ¥‹Ž~ow……}qjwš´°¤”rgŽ–›˜pZ>7DADFAEJLNA>A@A>9><=>;??76;=9/7)'%!&.542,6:311/30' +# +   + GPQVLB3& (75)-*#"  + '7AU_VPLLJP`m‹‘˜[D>8BOU``OFSdoqjP3-#$,D]jswvr`NPZZE5& "8d†œ¡›‘zdWJI<0)3@Zfi\F<23MgwwpdZUGI]jf^]orlp‚‘ˆ‡~hH* %9T^ghhbaZA(   + 2HE;*!""%,16<221,.,1##$&,0:@=DD>96?B;:5<5065;@C=>@3.18>F?9$!!349HWVQHPXYPOJOY]UKHGFVOGINHIT\\TGIJ[TQLER[ckdeeeed]\_`abd^_WPJ>+"6KVb[XXTV]9& 3YfnbZcbhqpxdD + +>v“—¥£¡œ’ujio¢©›²ÎÕÙÛÚÙÚÛÚÕÖÑËÈʲ™‰“ˆnm…‡yii‚¦´¬ª¥‡apœœ—tY@=>\x{€„€}‘­¶´­´½½¶´° ‚…—½ÂÂÁÄÅËÉÏÙÙãâÝØÅÃÆÑØѸ Žž¢ œ‘•¥¬¢­©ÁÖßåçèá×ÍÊÓÞâÚÊ¿³®¶¾ÒÙÛáçêêêêêéêêêåÛͼ¯¬¯µ¶µµ¶ÀÇËÏÕØ×ÙááåéèëëðòóòñòõôôðëêçâàÕÏÉÉ¿»¿ÈÌÜéð÷úúû÷ñëíîôúüüüûùõøûúôõùûúöóó÷úùöôñíìïóùýýýüöðåÚÖÎÐÑÒÓÐÖÙÝâæëðò÷÷÷ùøúüûûüüüûûúûùùøõóòïìåÛÓÎÄƽ¸¿ÏÝæêìðïîïíïìçäàÚΰ»ÝîõúüùïæåîõüüýôæÕáéÞÒÊÅÁÀ°©¶ÀÊåôýüüûûøúòòøøùùøøúù÷ïà̾ÁÍÙÚÚØØÙ×Ñ»º¾¶¨—•«ÑÙÑÄ´ ™¡©ltw‹Š‰dcc}wgz‰”Žj—¸¤™ŽE  %MD1676=7+$",2+:ACVXSMXdkc`acbWWSGZMHHDf}ƒ‡w[E."+()"!(EUgqx|O(atwnb^PH;9-.))&+5Lgh|™«´±²©½ÑÏÊ¿¸°¡Œ‰Š…l_TSaSE[YW^`KOO5BG9-/0Gly‡ˆ‰‹|{zwq~vpP$  + +  +  +!1    +  + '# %! "'#!!!$$  + + +   JUTSE:5-*790'%&!  (2:L^VIKKFH[qŠŽ‘Že=36BPWY\WHL`mqlS8,$!$:QdqvwscWNZYVE:)Gq”œŸŽt\SJ?803;Kci]H==6>TovpikZLHN]ja]ksuktˆ‹‹}\6-CZdgd^\WK3   + + 4AA:.,%%,271./)(,0%%" )/7=?FC=7287C>?91541=A@?<>561:,"#&7N_isxof\^\\`Q@&  %:]Š™¢¢™‡eVND86/2>XdbQC@76Edttqj[MGEUjhbfoumo’”ŒuD' =Rcf[YVUMA+  +  +  /CG>1*)"*5305:,(+.,#'(:9?D?<3.3@;A;7')2?>@BFB=77766;A?2 .38=GEHCBBUY[QCGYTTLC3=JKGFGQSXRQKJOPPTJJO^eaa_`fikf_X^aaeb_`^ZTM3*!A[\XUOYDD;civ{y‚tp`'  M‚ Ÿ›™`bbe}˜©š³ÐÓÕØ×ØÝÝØ×ÕÎÐÎȽµ£’™’r‰ˆˆvqo§¸¯¤¤Š_f‘™kR;8E`lz‡ƒ€€“­±µº¿°¶»°«—~‚’·Ä¼Á¼»ÉÙäâÛáåáѾ»ÇØÚÐò“‹•Ÿ©£™•›¯©¬¯§ÉâéêéáØÎÉØæãäÝÀ¯§®´ÄÖßçêèèèçææèåàÖŹ³´»¾º½ÆÊÐÒÖÚÛàÞáãåæèéëîîïðïññðìéãáßèëíéÚÖÓÓÚãðøüýþþûø÷öõöøøûûýþýüù÷úüýûøøüýýüùøøúüüüûùùõòðïôúûýýýüúõñëæâÞÜÙØÖÎÓØßæëðñö÷ùùøúüüüüüüüúúùøöóôòïêãßÛÓÉÇÅÈÕßåèêëëììëèãâÝÔ¼«µÔíùüüüöêçîöùú÷ëÕ¿ØÜÒÈÂÀº°¦±½ÉÞòüýýûüýüöòùúûùøø÷úúúòáǹºÊÔØÜÛÛØ×ﶬžš§ÓèáÓ¸š—™—jy~“Œ~ofcozkrƒ˜ÁçÕ–ž·¨¢–T  + $PC-?8>6/'+*1()0CWaf^_WWdlncaa^XYOLOQDCXqˆ€T, $ &*'  &=Umu€Œe2 +Xkzuj^SMXK+)+,2O5I]pˆ™¬²²»«§ÂÍÈ¿¶´©’€†‡h\PRifZRVV]^YbV:(&)+,A`s†”‡uncchsvja:#      +   +  +     + + +  +   $5--,6@BEA?3/87>;=H=-,9:5?HH@@>OWU\IJK__R@9?JFFJONMPOSNLGMPQPHKY[]edhfekaVXckedeehg^YS?2!+LWTQRM>8 %Yemou~„yrV%  C¢¡Ÿš‹Œ†f\^fkŠ§¥ ÁÐÓÛÙ×ÙÜÙØÖÐÎÐÉÈÉ´‘žyx‡rnv•«²¨¢–n\Œœ’t^F<>]p~„ƒ…„«°¶¹½´¶¶²«•€´Å¼ÁÁ½ºÈÞæçÝÝäÞ×¾ºÅÒÙÒŶ›‘˜¡¤ŸœŽ“«­ª¦ ¿ãéëêâÖÊÌÞéææÕ¶ª§ª¸ËÕáèëéèéææèæãÖÅ¿½½ÄÁÀÈÎÕØÙÛÞãæåãææéííîðíððîîìêâÝÖÒáêîìéÞàåèïùýýýþüúûøøúúúúûýþýþþüûûüýýýøùýþýýûùùûýýþýüûùøöòðõøùüýýýüûùöñíåáàÚÔÕÑÔØÜâêïóúùùøúûüûûûüûùø÷ù÷öôñïìçâÚÔÌÊÇÍ×áåèêëëëêåæâÝØƲ¶Ñíøüýüùìåí÷ûøïåÎÅÎÒÉÀÀº¶§°ÄÑçøýýüüýýüõóùùûú÷öøúúøñàǵ·ÃÒØÚØØØ×ÒȺ¸©œžÂæéÖ²’‡€šŒmj}‹Œ“Š{ganˆnq‡ Ýëà  ¬«¤˜X! & + + @C=04530&#)&++*8N[df]g[]`ifd\`XSUVKJ?IPXx…|l5)+!",##8Sloz„’p0  'Yirm^[VSK=5132(B@Vpy‰–¬¯¸Àª »ËÈ¿´¶ªŒ{„ŽqZFNlmXL[Xb]YgY4(,,5AIl…•~s`Z`hgjrp]?. + + + +!    +          +     +    6Vy‰Š‚sL +    +  +    +  +$*(#",3>B=<-(  $7DN]\I@@EN^i‚‰k>17:?FY]SFCRcqrjM6-*$&9Sjnknh_OS^a`U> );\‚˜—‘wWHF@;4',B[d]VI>;;LI=7=67;6880*26;BA=<:85;=9;A:-#;947EJB@9-% *9CN^\OHFEFTeƒŽŽoD2/9;BWaWLEOiqrlZ7-)%"4IaeijjaXQ[be`K2 +@kŽ˜“ŽxeQDHB7+*8F[daRLA7>Seif_QOKHWdif_esuo€–›™‘y^F&=U`ffc_c\B +  + +       3@E;+""#$&"0;24310-&!"''-5?DJEA>97<>>:54+*6&(86/?JHA;KSW[SDQ`]WI@7CMIFF@CKRPSSJNKUWPOR]db]fhjih`]W^e_ajheec]XOB0 2OROH=   8>PlhkqbO% P“ ›Š•“q]Tdhn†¢¡”¹ÐÑÓÕ×ÙÙÚ×ÓÓÓËÐÐǯ‘Ž™’woƒ‹|kki„§µ±¦Œbg˜¦Šn[?8]{y~ˆ¨±²±³´­­¬©t{w€¢ÈÀÂù¸ÂÕæéèáÜÝØȸÁÓÚÚ먋Š—ž ˜’Œ›¬¤  ±ÒÞáèâÙÖÖÖÜåäǦ¬´ÂÕÏ×ÝäåãåèèçæàÚɽÁÆÃÇËÕÒØÚßâáååçèèêëëêëîîîîìéçá×ÎÑÔÓÖäîòøõñöûýþýúøùöøøûüüýýýýþþþþþüüùüüýýüùúýþþýýûûüüýþýýýýüüûúùøóòóöúüýýüúóðíïòïæÝÙÍÄÆÉÔäëïòöùùùøøùùùúùùøøùù÷ôôðíëäßØÐÔÙÛÝäéëëëêçæåÞÚ×ÈÁÙìöúöööîêòûùóåоÇ˹¸µ´¬§¨´ÈÞôýýýüýþüøôøøùú÷ðîõúùøíÞÈ¿½ÅÑÒÕØØØÓÍƼ®¬¬ÌàÙÌ£~fdˆšuku‹•—†vjfbo{j”ÆåëÞ™“°§¤ŠL! +K78,$-,%#/&!0#9F]_ih`^Z_lloka`PN\XOVT]ddw}f=*..#"'4IS`ioƒ’›„J $Rfqjg__\G>*)7:AAP^lx™«³·¿­‘ªÀ½º¬¨ž…qsˆyXTR\a[Z]^kgZQ?%3==CMj‰…tfMGRUfolimbP2!  +  + ;C\mY:2/IctvsighoK0%.2/AEL4   +IP`nvpfjkˆ€^QK^_cM/BWrqy‚L    +  + 1IjˆŒŒŠxq?   + +  +  + +   +  "0675*!    &6AL[aVJKKJPe€Ž””—sG4,5,+%"/B\gjljj[SSahkY?' + +Mo‰’‹u\LHA9/,4@LZ`]RIA 1T|‰‹’•‰‹–£œŒxtsvv_Pi‡–Ÿœ”g8   + +  %7Jcw‡‡€ƒ}kA    + +        ! -572"  ")3?KWbVNLLJWi€““–xK3-0?KPVZMBFZnupgM/)%"+/%"!%(%'.5)*).0*)"!#0)35@JJMD=;<:@IE3/1;A;>?:;?9428=FGF7"(>>4=<@?=>AJFHDW_[SM63EUP@?>IMNSUPHDSVTUOL\b_djd`g]ca^ehf]dfadaZ_YA8$  #0BG50Xjx~{lH + I‡™£¦¤›¦¥k\__egƒ££—®ËÑ××ÙÛ××ÕØ×ÖÙÒÊÀ°ž’š›~x„Œ‰tk†ªµ­¦’jp™šrU=?HU\jrtkS.% +  !>QVP?4HViŠ“˜—‹~ƒŸ©ª®­–‚ˆŽfX]`[]X\Q.*)(6:KXoˆ‹’›˜“‘£§¤–}z~wp_n’•œž|E    + &4?Zosw}††€yd<" + +   +    +  + +$&&#  '''"   %/1?I[\VOLJOZfzŽ’~L//0E;*!$',%*075..-)/1+)#&'.4CLLJA=;=9A==6023;A>?8=25878AAD@2-:??BAE@8;???CGOegXR>6@KLEDLNMUVSRJHNYTPGJWZ\egfadcc[\bgffcibb_a\SB6&#)  ,7-   ?emwrgD KŒ˜¡£ª¡« ƒwi_`_co¨¥›¸ÍÓÔÚÞÛÙ×ØÙØÚÕÑÉ°Ÿ‘–x††|tps’®³¨Ÿ‹ovˆ^C=Xx‚‹ƒ~ŠŽ¨«®±µ³¬ª¥—{wuz¹ÀÀÆŸ¶ÀÒäçààÜÏÑÅÃÊ×ÚË·«”š–”‰…†ž ™™£¿ÔäÞÑÇÓÞÛϳ¤¦¡¥§¹ÅÑÚáæèèèæÞÛÛÙ×ÒÐÓÚÛÜàààæçéééëêíììîííêèäßÙÍÆÇÓáð÷üüýýýüúóñòñò÷ùûüýýýýýÿÿþÿÿÿýýüûýüýüûúûüúóóùúúýùøûþýüûûüýýþþþþýþýüûüû÷ôôóñîñúýýþþþþüûôëÜÉÃÄËÕàéïô÷øøùøùúùùùø÷÷÷÷öôòïíèæçåáÛÝâåçèææãßÜØÖÔ×ÜéìîñóñìõúúïÜÆÎÎúº¶ª§¤¯ÀàõþþýþÿÿþüúúúøôõùøøøøùõçÓ¿º¶»ÅÊÎÁÈÍËÿ»¹ÁÀ´«¨“’ª´³¡kw—§wi\gfwzƒŒ§Ê×ØÖ¿yŠ«¡¤™Z! + :>+$!'!7GUg_W\`_gebcmjZ]][YFFHckqrcH0 *+&!!""1JS^\d}Š—¦«ªŽR Icpi][ZWM;/.7<@AE\iv‚“ ©²±¨•– š§©¦ŠgptxbZTVikaTH754=BH[_`a_Veli\VNF>@K[iurhZ9"  +  "":W[_UVixzˆ‹Š€w¡¬­®¤ŸŠ‚Œ„kfaaZaZ^]bip|†‰ˆv~Š–˜˜˜Ž’›¤¤”Š‚v|ˆ|dw‹™——˜„Z!    &2=Vdcgss{{zrd;  +      + + +  *(%"  ! + + + &-6?HW\]RRJVZbzŽ‘ƒT9,.=?KW[TI?IcproX3+'"'8Laglsj\SXblpbM5#0Fg„‡reOFG@83*,:I[`bUH;7@ZpywoYFJWcaWZiupp‹”“‹tK"9Vbed_a]TB* +   +   2@A6"$+$'//54%)5.'#"&+16GMQG@>;96>8:;+--78<96=;;165:HI<0 '9?>>@HC<<;FCAJP_eZMC;DWMJIMMNVRNOUGHVVHEGWYegbcbdih`Y^eekjceab`_X=96*'#  +(%   FcmliJ T“˜™ž¡¦¥­¦‹xj\Y_dy›®žžÀÐÓÚÞÛØØÙÚÚÙÙÔÏÍÀ¨‘’€s}ˆ„uprwš³¯ª£ˆiv–rIDVv‡ˆ‹‹…¦«²®°±§Ÿ¦ŽttusuŠ´½»ÆÇÉÅ»ÉßåäÜÜÔÖÏÁÅÓÜ’“š•Œ}€˜¡–œœ¶ÔãáÖÌÛåÝǬ› ž˜˜¥ºÊÔÝåééåÞØ×ÙØÚØ×ÙÜÞßããäçêééëìêíìííëëåàÙÌÄÄÍÝðüþýýþýþýûùñðñô÷üüýýþþþÿÿÿþÿÿÿÿþýýýýýþýûúøúúööøùùùúùüýýýýüüûýþýÿÿþþýýýþýüùùóðìíôúýÿþþþþþýýôãÓÆÁÌÑÛæíóøøùøøø÷øùù÷ôõøòöññíëèêèÝÖÚÛãæçæåàÞÛØ×××ÚêïðòôðéõûøíÜÉÖÎû¸¶®£ ¤­ÈèùýýûþþÿÿüüüûõòôûýúùùùñäÏÀº¼»ºÇÇÁÃËÆÂÀ¾ÁÉÉÁ¹­ž¨¼Á³”{w¦¡‚e\aft~rˆŠ™ÆÜßÞÖÀ‰ª§§žf! + +   +/@$ #$!=FOZ]PXj^nmggm`b]U\RHPPezroT2#"(-+1% !I[`WdnˆŽš¢©±­ŠLCbuieYYYM;,<@IA@DUms~”ª³·ª“™¦«©Š]gsƒm[U\fZK>8:@?FLUahbJCFZgidTI?AOYa]YZPRXeyŒ‘”†^:+29EJWYWL@Cbgpq]4*+3$'3JYhmmkeZX\grfVA-   :Wv~‚q_IME97/-2@H[`]O;7@Uht~xs`KEIY^\X^ntr{†––‚\/+B\cZ]`_UH3  +   +   /EC1($)/.*)+,-10('/10=EINF@@???>=854785<5=;:<2.<>=FH?4&9A<=:F@GNXXeocM16GUmh]KBBM[`hjrk`YB-  + 10+#&4/'*NgjNNhvŒ“™„†~‚–¤§ª°¦”„‚ze^V`\flpt„„—•—•ŒˆŒ‘˜Ÿ™Ÿ¢Ÿ”‡Š‡ˆŠyn…’–›Ÿ’s0 + + + +  #!';@@JTW^^_d]a]Y4   +       + + +     ""$'$-+$#$)"#  (7=@ISa_XMRSWe{Œ‘‘„c5-.:CJV^]N@DTgose>...+(.DWhmoldYXV_nm`T3  &>c‡Œ‰r\NGA=8*.28Sc`XK=;C]jmvueWHLO[^YYlvrs€‘—’†jB# $0HZ^]^^UI=&    +  2@D4  # +6.2&...5),',0-BA@0,:47@?8@A7304??6@=1 ':A9@??;:>@CBFFX\]PME4=KMDEBRUYWSGJPTT\LHLX_dcbg]cc_^aZgdc_fd[`]VVK>76A5"# +  !Vc]> +W˜¢£ ª¨ ¥ŸŒ†xpf`[\ez’¨¥›»Ñ×ÛÜÛØÚÛÙÛÖÔÖÔÍį›˜Š~Š‰€sy‡•­µ±¡’mizmGVl†ˆ†Ž£ª©³³§Ÿ§›ymvju‚¬À½ÉÕÐÇ˾¼ÚæåÜÑÏÕÛʺÇÔÕƼ®‰•–Œ}„‡šžž¥­ÍãáÙÍÕÜÖí ¨œ“›¤¹ÈÛäääÜÒ½¼ÐÙÛÙ×ÞàâãâæçêëìëìêìîíêéàØÐÈÅÄÉéüýýýýýýþú÷óóø÷øúûüüýþýÿþÿÿþþÿÿþþþþýüýýýþþýýüúõöøûúøûûýýýýýüýýýýýþÿÿþþþþÿþýþýüúú÷öõòô÷ùýþþþþþýýùòæÛÕÐÐÜçìóôõøøöööö÷õöôôõ÷óñïìêèÞÌÌÔÜääâäâáÛÙÙØÒßîòôôñìêôúöéÕÖÖ̾¾¸¯¦š ¦³ÖóýüüüþþÿÿþþýûùøýüüüùøøíßËÅÄÁ´¹¾ÇËØÙ̾ª ¨®§™—š¤«¤iq‹–­±‹pX`epxt~†—ÉãæéæáÑ¥§°¦q-  2S*#$1PYZSSLQbdifflkf]WWTZSXclfg@, -&2-).- 6[ld^fm“œœ¤­³§Q=c}qZ_RYN<47@?=NDPe{‹’¤©«±§Ž…˜§©¨¥š‚msz€mgSMI?6AEFMY_he]J6*/N]oeYDDIXb`goqoqfN(   '.0+#*5-(L[k_WZy…€•ŒŠ…~’¡¬°°¬™‡Š”ˆpc^b^dmrv‡„—ž˜™ˆ„”“ £¢••˜ £¢‹ˆˆ‰Ž{l}–™ ¤ž{7   "*'!475BBLIQMQTNLQA#    +       "$'$&'+$" "%$  +$3=DJQccZMPV^fxŒ‘Ž’‡]9,-6=HR\[RE>QelrnO7*%,+48Odjjie^ZZ^kqh_A- ,M~Ž‘ƒkRGKHB8($5JYZYRB;;J_gmyphWIR[`[Zemnqx…ŽŒ„wV/(@V[_PVUF>0    + +   +1CG1"%".2.-).*//+)(&%->KFDC<;>BACC<14.2>B=:98:3:28;>ARVFGCMVVYVRFMLNPF;FZeddhcfide_Z_f\`gef^_aXUI94872."  + 3NH7V£ ¦« ¦–ˆ…spnXUcs~›¯¥«ÈÕØÚÚÙÙÙ×ÙÕÔ×ÖÐʹ¤˜˜—€y’qqp‚¤¶´¨›~^p„cQn‰‰……‰•ªª¯±¶¬¡£Ÿ€oup{z¨À¾ÌÖËÃÉÇÃÓãæÞÌÏÛÜ×ÄÈÔÓŽ¯¤‘ˆ‘ƒ“ ž©©Äßá×ÉÌÒм¯§ •Œ“•¶ÇØããÞ×ȼ¾ËÙÚÚÝÞßâæäèéêêëìíîííéæßÛÍÃÅÊÐÞøýýýýþýûøôôóøùûúûüþþþÿþþþÿÿÿÿþÿÿþýþýýýýüýýþýýùøøûüüüüüýþþüüýýýýýýþýÿÿÿþýþÿÿþýýýüúûøöôòóøûýýýþýþüûõêàÖÒØÞæíñóöùõõ÷ö÷õôôôöôóñòïêçÝÐÍÐÚàãäââßÙÙÜ×ÖãñöõòïçèóùñäÔÙ×ÍÄô°©¡¡¨»ßùýýýüþÿþÿþþýüùúüüüûùùõêÛÐËÉÀ¯°¿ÈÎÜÚͽªšŽ„{}€~’¦•nk€Žž¹¥z[UkmzpmŠ³ßèéêèäÒ…|¢¯³«x0 H4" (=QUZPOO[ffrjegli_\OMW][dthQ7%,,"'(',. E?. -:?9?B?<<4;;@@CQ_]ZIA7CRMFGPLLS[USGHJNMIFOYgbggcf`ig_Vchc_g_]]chZQMB8<<2-&#/:3 L…ŸŸ¤¦°¦©™t‚Š}tlfXW_o‘«®š¸ÍØÛÚÙÜÙØÚØÕØ×ÒÍĶ¡——‰~‚Š„zogx˜»µ©£“yhyPo„‰‹Š‹“©­¯²²¨ ššrj|xt€…½ÀÐÕ²¼Á»ÊàéåÚÖÚÞÝÍÉÒÑÌĶ¤‡Š„w}ŒŸ ¡»ÛÝÒÈÈÑϸ£¦žŒ‡‘¦±ÂØÞÛ×ÑÄÁÂÈÔÙÛßßäæçççëìíïíìëíêèßÚ×ËÁÇÏßñúþýýýúøöõôùøùüüüûýÿÿÿÿþÿÿÿþÿÿÿÿþÿýþýþýýûýýþüûûüùûüýýýýýýþüüýüüýýýþÿÿþÿÿÿÿÿÿþýþýþüüûúø÷÷÷øøúüýþýþýûøïàÙ×Üáçìïóôôø÷úøôòööùõôòïïíèãØÔÐØÞááãáÜÛÛÙØ×æðøúõïèèôöìÛÜäÙÎÇÀµ®¥¡¦°ÂäúüüüýþþÿÿþÿýúõùùùüüùøóêÙÎÉËò»ÅÏÓÛÔļ´©˜|cehlkŠž}cƒœ±²—l`]bs‚qzŠÌãêìíëçÖŒ|¤­·³|2 7F%!"'-?O_a^LX_]komjfnhaOSJZ_iurY@0&3(''.+$"3]rtcqu}ƒœ¦¨­¬¬ª—Z  7]}o]_^VS2-52B:HN^gt‹¨·¯ª¡–Œ¥²°Ÿ¢¡—miqf]SJAFLHRU_col^I>+&)5Leel_YGXbhd\iw‚‹r^3'   ! -C'%6Q]c[Yili‚”‘’‰‡—Ÿ¤§›‰’yplf`nkjky†‘‘–•“ŽŠ‘—šœ›¡–“¢ª¬œŠƒ€…Ž€liŽ ›†I  + +  +"&.0,+-3,068?GFBB$  + + + +   + +   .11-*+.($&!     *4=CP[_^`cqy|x{ƒŽ‹lA-'18>AT]^RARirwu^=.%%)(/Daeglkf]\ZdjoiaF, + )Y~”˜’ˆmVMOLD;1(/@KW^SD<@K[hrombUJIW`_]^owsr}ˆŠsX:! :NUQMJME9( +  +  + :LF7" %#"/40(+292()))&-8;=AII;15>@@E=71653+473:;:=728@D<) $2=6        +     + +    45/),''%'%     -46HS]ceajvxyw„Ž‘oE()-18@J]_VDGbuvgB0*+()*<\hihiid\WblpmiS6  !Ai†’‘~cLKRM=5,,9CTbZGA<=Kbjqih^TKOY_\Zirtrq€Š‚{pI( 1CKGJNFB8)   +  + 7FF8,+('"23+7/,2/.,$"%2;0:CC:=?101322*6985--0*7@;<.#+;>@CJ>>61449ABK[_SH;2FKEGMCLMWVVHADDGMKAG\beedafcdd_^^beffmdedb\WN@85@203$ &* + +  O“š¨«®°­¸©\y‹~}l]GKPdƒž¬ŸµÒÚßÞÝÝÛÛÚÚÖÙ×ÏÎÊ»¤•{j}„|usxžº¶®¨™f[nnvŠ‹‰‚„…™¬·¯­¤Ÿ¢šndupwy‘·¼ÈØÔȶ±°ÀÜêèÞÔØÜÜÛÊÆËÑο° Ž†‹€u—¢œ›£ÍÓÈÅÎÜÖ´“—£†¥´¿ÐØÕÖпžÊÕÛÜáâäçéëëëëíîìééåàÛÖÑÐÐÙðùüýýüøóñõ÷øùûüýüýþûüþüÿÿÿþþþÿÿÿÿÿÿÿÿþþþþþýþýüüýýýüûüþýýþýýüýýþþþþþþþÿÿÿÿÿþÿÿÿþþÿÿÿÿþþþþýýüúúøø÷õ÷ùýþþýýýòèâáÙÔÝäéïòôôóõ÷öô÷öõóðïïìèâÖÎÍ×ÞßáâÞàÛÚÚØåð÷ùöðëïóìÚØííàÑÄ¿¹­«ª­¾ÔíùúûþýþþüþÿÿþúíéôûýýûùøëâÛÚÚÛÔÒÍËÍÍÉÁÂÃÀ½¢cl~ˆŠrasˆ–±³›‡eeo}}n‡Ž—Ñçêïïïíë×u–­¾°„9    &7  -+(3JTZ_[\^Vdtnn{pqvkiVT]ep‚uT:!"5;0()"!,Zwx{sƒŠ—™©°¯©«¬§—W 7[nqaW\XC80.7ADFLZfj„¡¯¥¦¢¤­«¤¯°œzn^PEIJWRWapxzoYC112*##+K]fmj\SWUYZil„Ž“˜qA&  "'".96"'.H^kh_fts|†“˜‹||’¢°°¯«š…‹…mbij_`fik{Œ—£¢œ•ˆŒ”œŸ¥˜Ž¤¢Ÿ‰ŠŒŽwdz”›Ÿœ—[  +  %(/-54=:A;2;;%   + + +  + +     $01/00)$)+#!  )39KVW`gagy~yrrŽ–š‘qF+'-22=EW_ZJB[syuoM4)&&&-4Rbefghb\Tajsuo\?%  1UsŒ‘‘‰rRELNND60+;K[_PG@;=Sgslgh_WLJ\^^cmxohvˆŠ|y]7':KIKHIE;*  + + +   #;JF;.(+*03(.)10,**(!(3:>ERPE@:>B>D=?.).982-6A2+21+9>4@A' )6F@>A?@6*257>@J\]MF:1ALMIEDGJTTWJ@FFGLM;DRcdehbgged]`ddhdicdfe_`^OB99;<88* +' L ¨¬­²­µ¶Žeg}‡~uc62>Mg‹¥§¥ÇÚÛÞÜÛÚÙÚÚØÙØÓÐÑ˶™—’xq‚Š†vk~’®»¯«¢‚gg~…†„†Š‰¡ª²°©²¯§•h_{zw~¶¼ÉÚÙѼ­ª¹ØããÝÓÒÚÞßÐÃÌÙÕȶ£‘|~‚ƒ†xy’¥›”ÃÐÁÀËÕÖÄ š§›’™§¶ÄÎÔÏÌȼ¹ÁÆÓØÛÝâäççêêêêìíîìèæßÖÖÖÖÔ×èùüüúøóòòõ÷ùúüüýýýþýýÿþþÿÿÿþþþÿÿÿÿÿþÿþþÿþþþýýüûúúúú÷øüú÷ùúúùûúûüýýþþýýþÿþÿÿÿþÿÿþÿÿÿÿÿýþÿýýýýýüüûù÷ôóöûüþþýøïìçßÒÓØãêìðóööö÷ö÷øöóñðïìèçÞÒÌÒÛÝãáÝÜÛÚØÚçòøú÷ñîòñáÑØïëÞÑÅÁµ®¬°¶Â×òûûüþÿþþüþþÿþúîêùüýþúùúðîëêçèâÝ×ÑÉÊÆÀ»¾Äͽ™um|Š‹kp†“˜·ª…sacquo}†Ž©àêëíîñïêÚs–¯¼´…9   + /@KUd`\a\emwuutsqxpcYael{{mA#-=6+'*(Ij€wvpy‹œš£°°«©®­¦”^  7WooZZ`WI7/.<7:?B[`k€‘›š¤­©–Œœª¬®¶²Ÿx\TQ[WTUWfnswf\A4*-+%(0.Ikqst`WYW`cmŽ•šœvH% +  $"1<9(B\ek^gyp…“Œ‹zy¡«°¯¬ Ž†Œ~pf_cbcXfpv…– ¤¦›Œ†šž¦¤Ÿ’˜Ÿ¥ž”‹…Œ‘Ž|s„“Ÿ¢ ›r' !#%)4<784;=>0:<1$ + +   +  + +    + +    !&*22030.*%!     )5LX^ZIBTmvwpY9"%)(-3G[bgeedZTaiqxteK2  + "Bd†‘”Ž|cHDKLLA2+0>V]ZMI:=IassppnfTLX`\\eprkv‚ˆ„~kM0+=EEFFE=.   +  +&7BA1* # /2/*+*/-0+)!&16@//328933;3(24/48;C?)!.?@E:7/2>;4?EUXQH7-9KM@FRKJTLQAHGHLHMJIO^beefgefjYZcojcefahac`\J;;?<==0-% ) + Y”¢¬¯±µ¯´²™ƒcm}~ucC207Wx“«¤µÓØÙÜÚØÙÚÙØÙ×ÒÐÖѾ¬——ˆ|r{Œƒzt}—¸º·ªšue|ƒˆŒ‹Œ¥®¯°¬´¬Ÿ‘c^qv•¶»ÇÚÛÏÅ·«»ÒÜàÚÓÏ×ÜßÙÈÎÛÙ˺¬žŠ}ŠŠw„žš¯Å¿¿ÃÐÒĦ–¡¢šž¥°ÁÌÐÏǹ°·ÃÔÜÜàãåççèëéëêêìëéãÞÓËÓßéçáæò÷öòòõõøûûûýüýþþÿÿþýÿÿÿþÿþþÿÿþþÿÿÿþþþüüúùù÷õôïïïïîêò÷òïïïîîîòòòõ÷øùûüýþþÿþÿþÿÿÿÿÿÿÿÿÿþþþÿÿþþýþüüúù÷ô÷öøúùõôùõíÝÓÍÕßæìñôõøöõööôôóñðïíêåÜÌÉÕÝÞßÜÝÛÙÚÚåòøúùõñôîÚÊàïä×Êù®§©²¹ÌßõûûýýþþþþÿÿþþýôîøýýýüùùòîëëêìëçáÙÕÏɲ²ÌÙɧ‡v|–~iŒ™­±—x_[eztq‚Š·ãéìîíïîéÝ•z—¨¸°‡6   +  + +):FE]]aaeVeos~|}ukssgdekx}vV((634--1)C^ouqlvŽ”Ÿ¦«°¬««ª«¡‘b +7auv\S[VH545988=E\dmn€ ©°®™‰Ÿ¨«°©’i\X\``X\ktno\GA./2%*+*/5Tw|yrc]Zplrwƒ”“žœ€N)  " (>>"#>]ij\Xrƒ{‚’”†„}‹›¬­¯²¢‰ƒ‹‰qggfecemrƒ–¡¥¨Ÿˆˆ”¥ª¢œ– ¦¥—‰‚‹ly’žŸ˜™x+ + +  !#&+286.43<<4705&       "$(21433-""$"  +28ES_aa\XWVT_dr›œ–{M- )-9BOY_`TFHet}vc>* (+'/=Nagffg`YYemtvl]E/  C/OvŠŽ‘‰uQHKNJIA5/8H\[WPB87NjyyxtndTPV[^Yfrnsw€†zdK4"5AHEED;, + +  +   ,:@C8#$'.0(.0-*30(*$!)-:CLLG>2EA=;<92-../.55;<749:62=EB* 0<9B?=@736=9/9DDTULC5*6MLA@IHMRNMCFLSJJOJOYeghgaeegjZWcnjfbfeccc`XQ<:=EC8--#  ^š§¨¬¶µ¬·©“’vdhyo\?GGPq„†˜°¥Á×ÖÚÜ×ÙÚÚÙØÙÖÕØÑɼ›˜˜‡{|ˆ‹|kp{›¾º²«Žbw‰‡Œ‘•Ÿ­°®°¬£–ˆcUmvxwŠ‹´ÁÈÙÖ×ÏÄ»ÁÐÜÜÓÎÍÔÜàãÖÎÙÜÑÀ²¤…‡l‚Žœ‹‰»¿ÁÏÕк˜ˆŠš¢¤­¸ÁÊѾ®°¾ÔÞââåèççæêëëëéççåâÙËËÌÙóùöìáåëïðöúúüýýýýþþÿþÿÿÿÿþÿÿÿÿÿþÿþÿýþüúúöõòñðíëëëèìêëëêéíóïíðìêêéììéèììííîòõùûüüþÿþÿÿÿÿÿÿÿþþþþþþÿþþýýýýüúöóòòðëòüþúðäÒÎÏÛåìðôø÷ôôóóõôòððïëæäÔËÔÜßÜÝÛÚÛÚÙåñ÷úúùöóëÚÑçìßÔÈÁ¸®ª±·½Ôê÷úüýýþþýþþþýþüöóúýýýüúøïçãââââèêéá×̼­¤³Ã½¢Œ‚…ŠvqƒŽ¡­–ta]diwfwŒŠ–»Öäèëìíìéá“l˜¡¶²€6 +    #;E@MPW`a_[`tuwophflqljjzzR/!(51:60*-%Cju{{rwŒš£±±µ²­¬ª¢›ši$ + 2Zmt_S]TH;02>=:GIPjbl€”§­³§•…‘Ÿ§¢Ÿ’u`bdeg]atug\S6)/2-0+*1):Ealw}jbfovw€‹’š›ƒG+"  )8C* .Oagc^k{wŽ•Š‡†w}–ª°°²®–…ŠŒ~nnhlfgpsr…‹›£¦žŒ€‡™  ¤¨™˜ž¥§¢†‹Œ‰xji‡—˜œ|7 +"!$""*$(5.2976265*0)    +  + + "   &-0532%""$ !#   ++6A^twsvwg_RV^\X]hruo{€|{qZ=)+AGC?83& +  +  1?IP>)#'.3210-*614))*.9;EOLI:3A@>=682.123326<@8*42279AK/$0;7>>A>95:C2679KHOF?5!3IHC@HHILVMHEHOUQKKP^ijjjjgcgh]Wbcajia\eoc\VO=:@@=64& + `ž¥¬®¶»¯¸¥“‚i`kpV=L[\ˆš§¦ªÍÖÙÚÚÝÝÚÛÛÛØÖÔÏËÁ¦—ž”~y†Ž…sp|Š³¹³¦žp{Ž‰Ž‘Ÿª¬´´¨ ˜„YRellt†¯¿Æ×ÔÑÐÊÌÍÕÚØÉÈËÎÜâãÜÎÓÛÖǶ¦‘„„’•~pƒ”‰š´ÀÈÜÜμ’€†—¨¦¨±½ÉÎ˺²·ËÛàèçèèéèééêëêéçäà×ÉÇÇËèöøóëåèìô÷úüüýýýýþþÿÿþÿÿÿþþÿÿþþÿþýýþüúôñîííííéêêìíìîîðïïïðôòòññïïîïðííìëëêéëêíðô÷ùüþþÿþþÿÿýþÿÿÿþþÿÿÿÿÿÿþýüûøöðíêíõûû÷ìáÏÃÍÝèïóôõõõöóõõõðïïìéåÚÑÔ×ßÝÛÛÜÜÚÚãñùûûúøóèÚÓäåÜÒɾµ­®¯µÇßïûüþÿýþýýýýþýýýøöùýýýûû÷íäÞÛØÚâììëá×ϼ«šž©«œ˜ŽŽƒjp‚Ž¥¡|bX]l€quƒ†ˆ¶ÌÚâèëëëìá™k’£µ³‹;  !,;:BOJX`Vaklr€uih_hlrrio}u\;&!#2437205#Acvwmw}‰‹Œ—§±´µ°¬¬¤™£§u/ *\pqeMUWI=51=;?=E[ehl‡œ®²¶¬›˜¡ ž‘…pfonmmdpsjWKE4+0+.'$,65>N`lssxptvx{ƒ„‹Ž–™žˆT0  + + + )>F- Pdij_f|€rŽ™‘Š‰ƒ~£­²²«š„~ztmfhcflpt‚šž›~ƒ‹˜ŸœŸ¨ž“™¥§¤’‡‹‚xwrm†–œ£‹F ""!!"!!#$*-.,82506-+,)   + +    +   !-1-,01" #"!" *:BDNZjmc]ZX[Zf|‹˜¡˜T2(+28?M^ac]IE\t‚zoR2"&(&$)?VcehfdZLWdnsrjX@"   -Be~ˆ‹lVDDJQOD835>U^[XHA9Jhx|wush]Z\`TS^lttw€€xshM1! 7>>;3*"    +  + -@GH7)!""#001551/&(.)(+3:6;2+,335958<54)%1;;B>2 %+6:8<=@748?:312=?JLE1);KHB@BLGSXLHA>OYSLNQ]`hdjefieeXZca]e`Zddae`XH>09=:52#  +Y ¬¯±¶·³¶£„|…[U_TDO^gš²£‹–¬¢´ÓÕ×ÚÜÞÛÛÛÞØÕÕÏÉö”˜Šxƒ†‹}mju˜´º­ ƒn Š‘«­²²©™–€\Kakmq‚„§¾¿ÎÎÄÅËÑÔÙ×ÕÎÆÌÐÚâäßÎÑÙÙν­ž†{™šŒw~‰Š“«ÀÎÝÜÒ½œˆ‰”¡«¬±¹Éп²¯ÂÛàæååæèééêêêêëêåàÖûÁÉÚíðòîììðò÷ùûüýýýýýþýÿÿÿþÿÿþþÿÿÿþýüúøóòðíêëíïïïîíïñòóòóôõôóóöõõ÷ö÷÷õõôóóóðððíìëèééîîòùúýþþÿÿþýýþÿþþþÿþþýþþþýüûùöóñìíô÷øóéÕÃÃÑßëðñòóôõöõñóñðïëëéáÚÔ×áàÝÚ×ÛÙÜåòøûüüúðàÐÔæà×Ïľ¶±ª¬ºÎæôýýýÿþþþýøþþüüûùùøúýüûüøìáÖÝáäêêéçÞÖͺ³¦ž¨¤“”qcs„ lUUjz|iƒŽ¤´ÄÍÙâæëêëàœs‰ž¶·Œ:   + +3>?>I[Xbp‹§°±±µ£Š– œ‡~{toprspyvmZK=;2)/:5',5:BI^bgv|„‚†w}‡„‰Ž“›‚]/  %AF."J]bg\d}xtˆ“Š‚{~¤¬­¦ž„‚‚nddgppdjjs‰”›˜—‡‘–ž¤¡ ˜¤ª¬œ„„~‚rl•™˜‹E " &":2#$" +&**21*23/(4/%0"  +      +       +#)*'())%!"     +9BEPZgkhZTU\]ar†•š—„_7%)-4FIS_b\H=Vr{|r_4#$'&$)9Nafed]ZMMYgprogQ.  + +  + -MrŠ’vZH?HP\TD;2;JY^YME;?\o|€{wpfXPW\XXapst€„wslcC%'1:<1+  + + +   $.DLG6( #%*1-,231-*$##(.3==DKHA76<:;<200/01712=533'0/6;/,5?=>A:.*?HB8>EIGP^RQGMSMNGLSXXcegbjlkbVZafcid^d^]f`PF5.7A@54( + eœª«ª³¸³³so{hNNKJXhv©Â¹™§¨¤ÇÔ×ÚÛßÞÚÚÛÖØÖÔËȼ£’šˆ|Š‡rgkŸ¶°§–n€›™’—ž®´­¯¥›‘ƒ^K\alp|ƒ£¼ÀÅÉÅÄÉÎÑÖÚÖÍÈÎØÙáãäÓÏ×ÚÓÄ´¡‹}‘—†y‚‹›¦¾ÕãßÓ»‹ ›œ¥ª±É̹°´ÑâãæççéêééêéêééçâÙʸµ»ÊÛçíïïñôøøùüýýýýþþýþýÿÿÿþþþþÿþþýûøöòïîïîííïðòòóôôöù÷÷ô÷÷øøöôøøùúøøùùøö÷ùøõöõôóïííéêéêíïõúúüþþþþýÿþþþþþþÿÿþþþýýüúùöòïîïðíé×ǾÃØâêîòñôôôôôòñðïëëèäàÖÔßáÝÛÙÙØßæòùúûûùìÜÎÝêÝÕÉ˺°®ª³¾ÖéøþýþþÿþÿþýýþýüüúöôùüüûûöíââéëéääãÚÖÓÈĽ°£ž¢žœ…ml~ˆ”‘p^GXgqs‰Š€“¨³ÃÊÐÙÝäéèÝ™v“¥°²ˆ2 +  + + +-?EUYKAEY]r{n{jjqpjdtxzvhG2%975,6&"*F]emuzy…„Ÿ«®°²·°ª¡š›±®1 (SnlZ[[\L<6/7?;ELWXayœ ³¼½«Œˆ‰{txpiptrll_I<707076.%6GJLTY\o€ƒˆŒ~{„~‚‚‹”˜–‘^2  +   $AE/)HWck\`x‚z€ŠœŠ{pqˆ˜¦ª­¬ƒz††sgf^a\^^ajz“œ•†‰‰’Ÿ¢£™š¨¯® ‹‚‰‡g{ŠŒ’†K& + "*(F% $( %,*$+*./75+/(*  + + + +   +         !!$##&##" 19FFX_cjgWPOXagp‚”“‚e@)',19HRW]`Q>Jguwqb>' "#$)3DYcbcdcOJWajsuu_> + + + +":aŒŽ}f[KGIY^S@01?U_ZVI>>F=678=6.7<@@;1!.DHC:9FMKSYTLDGNVXOOU_`db^dhfhg[acec\eiecb]^[H<47<73.'"   + +e›¦ª©²¹±·•cfn}rW;LMbv„«Éʱ˜®¨³Ð×ÙÞâßÛÚÚÙØØÓËËÁ·¢› ™t‡„~qdp¯³¥œ€hŒ —‘‘Ž›­¯®¯ªŸ’\GVfrsxƒ»ÄÐÉÅÄÇÉÏ×ÜÖÐËÏÚÛßääÖË×ÛÖ̼¦ …‹™¢›…w““–˜»ÜãâÕ½£’–’‘˜¤©·ÉƱµÂØãåæèçéèéëéçëéèâÚËĵ½ÍÕßëïòôõùùúûüýüýþýýýýþþÿÿÿþÿÿþýûõóìììíðïïòôõööõøøùùùùùøùùùùùõøúùûüúûüúúúúúúúùø÷÷ôõññííëììðòöúüþýýÿÿÿÿþþþÿÿÿÿÿþþýýüúøôñïïéá×ÊƼÄÑãêïñóôõôôðñïîëëæäáÛØÝãßÛÚÚÜÝåóúüüýúëÙÖéêÞÒÊÉ´©©­¸ÇßïúýþÿþÿþþþþþýþýüùóóûüüúùöîçéëëßÔÓÍÌÎÎÇÇĶ¤œ§µ´¡~_s€~xcOSdr†|€…†‡‘š¢¹ÈÍÑÔÛàâÛ˜i£²²@  /9NMWQLBDR]ekmwjnjrsohn…rQ0$(/86;@8,!>]cdnrƒ„Š˜ §³µ´²¯¤–œ±µ¨ƒ1'Mep`\NQL:/5BA=BEIVbt‰–¢½Éö˜ƒ|osqtsoqpf[LBB8>6323'2-CQNRPUVm…Œ‘‘…}‰ˆƒŽ––¡”\4  ! $=J/#/QklfYozq‰’Ž}m{˜¤¨ © ƒ}ŠŒ€iihg[gidn‡Œšž–‘‡€‡š¤¦¦¨›˜¤§§¡’‡‹ˆ„ƒnqƒ—œž‘d*  '*-&(%-%!&$&#*'+.+42/+:,&2&%     + +   + +       &"%%&$! .E]puoiM0"!"+?O^_gmdZOZ]fpuulM**Io…‹ˆubPLKITXI3/AQdzx€mbXSYZYVdlrtzƒuma@,!!%(*#       )87;:1978-,4<869736.+.6-.2@D. )26<15=E>8;>86-17CB5.'CE@@>CHNTWMHEBLXPKOT^\aa_fcdmcX^ee`\bifdd^ZYD=7;==-))&   + +`š¦¤¬¶¹¯µ’][bhn]DLXrƒ…´ÌÏǧ–¡¯§ÃØÙßâàÚÛÜÜÚÛÓÏÈ¿º«”›ƒl~†~vpe¡´ª —ph˜œ•“ž«²°´§›—‚VFYirwo}¡ºÇ×ͽÂÂÍØÛØÔÉÉÛÝÛääÚÆÑÖÖÏÁ±¨Šž ¢š‹•“—˜¸Ûäâ×ï›—Žœ«®¹ÈÁ¶¾ÍÙãäåçéçêéééèéèäÚʼÂÁÏÞæìðöøùøùùûýûüýþýþýýÿýþýþýýþýû÷ñîíêíïðòôõ÷÷ùùùùúúúúúúüûûûüûùöùúûüûüûüýüüýúûûùøúùøùõôôóñîëêëîñòõúýýþþÿÿþÿÿÿÿþþþýþýýüûøøôïíæáÛÌľÅÒâêîñðòñóòññîêëæäßÛááäæÛÚÚÙÛæòùûüþúè×ÙëåÚÏÅò«¬°¹Ñåñøüýýþýýýýþþýüüüù÷óúüüûúöðéëêèáÒÅÃÁº¶¼µ¹³ª£ª´©obwkcW^kzwŠ…}ƒ†‡‘®ÇÏÒÒ×ØÚÔŒ`ˆ¢´°C  + -2BGPT]OCCMZcgd`hlllsx|}{Y6 ,;<9;9=?0 6Xceluwƒ…‡ ¬··¶®¬¥›–£·µ¯Ž:   ++Jdq`SSQE:176AA@GOOit„™°ÈÒɶ‘khmqjopkje\ZI?6A4.112,,:@JWZPHP]t†‘’Ž‹…††€Š’›¦§“`B$    (KT8"'AYhg_l`hr‰”‘wlnŒŸŸœ¡¤ˆuw†‰jkiologlq€•™‹…|‰š›¤§¤œ‘™¦©©›ŽŒ‰‡tt„›žœ™s8 #*0(1,--'%)+ $$%,).-40*/4'0.&  + + + + +   +      +"  %$%'"$##,;GIJU`hgYQRX^fo‚•”Ši>'"$44GPZ[ZK@@UisujV6##"$$3JX\ckmdYUY_eljr_:  "7]}‰Œ{kZMLKLON?45=.'47;69:553543534@?- !31179@J:8;651476DC83)%6AD;?AGJTTQIC@QWKGFVe^]`celikg\``hh`cde^ca_TG94>F>82# ^ §§¬°·²³fRQZffMT^vŒ‰ºÑØÓ¾œ”ª«®ËÚÜÞÜØÚßÛÚÛ×ÏÈŽ·¡— ™tl|…€fd„¥­¡ž{_|˜™Œ“ž­±­¯¨–’{SOagolp˜·ÇØÓ¼·ÉÌÐØÙ××ÌÉÙÝÙàßÙÊÍÐ×ÓÈ»¯Š˜œ¥‘Žš– µÕãâÖ¿¢š¤™”›¬µ¼ÅÄÈÄÌØßãæççèêëêéééæßÏ»µ¾Ôãìñó÷ùùúùúüüüüýýýþÿþþþþþþýýýúõñîëííñîðõøöúùùúüûüûûýüýüúýûýþýø÷÷ûüüýüüýýüýüýûüüûûùùùùøøöóóðïííéçíóõûþþþÿÿÿÿþÿþþÿþþýýýüûúùøôïìèàÐÄ¿ÈØåêîïðòòðïïïíêèßÛÝçëéçÞØÚØÛçñøûüþùæÑÛêÞÕÐÅÀ²©­¶ÁÚìñ÷ûþýýýýýþýþþüûûüúôúüüúúøñðìçäÚžÁ±¡š™£©£™“•Ÿ‘zkktvxsocmo}ƒv‚‹}…~‚„¤ÄÑÖÖÔÔ×Ì…Z„žµ¶Š@   74CUZ[YRPSJYfim^[kwxsx}t[5+ :>==?:70#-F_`eu}‚„’“š¢¬³º¯±­—¡©´¹¹™;#OcqaWc[I>2*48EGOVVar‚»ÇÏŨ…g`d`mvnib[D?=AC@30,1'(4?L^_RGIZe|Š’š•ŠŒ†‡‰ŒŠ• §§–c7!   "?S:%&=Qindaegi‚’’‹xje€• ¢Ÿ‰~~Œwifllkljjw††z}~–š›š—Œ™¥ª«›Šˆ„wds‰‘›¡z<  ++2;7410,"#,(#')/..)3331-)#-$ +   + +   +     R!%#&&""   $:HNR]ekg[TX]dkoy‰‘—mE(%%26CM[`bXI=Rirup\8" #&!"-O_\`iqj`VU[[dgod?! + +Nk„…rdSGJNLME=86AO]UN@8?Ibqwxxuf\TZ][]ekyy}~ushH &.% +      'COL?2%" ")-1.%,+,+&!%')4?4/88:A=7:**BFD=BE?EMRNKFHQOUJEJTXcbdhnoda\[^dcge^fdfc`SM;7A@<80' +  +  !a›¨®®¶»¯´—`F=I[dQY`|’“ÀÖØÔ̬¢²¦¹ÔÙÛÙØÚàÝÜÞÚÑÉÇÄ¿³šm{Œ‚lhp“°ª›sij‘›¬´±®«›ŒzZP`monm~–¶ÇÚÏ»ºÍÖÕÛÛÍÎÏÈÙàÚÜäáÓÇÔÚ×ʾµ “ž¡–’™š©¯ÇßÞ×À­¤© •Ÿ³¹ÁÀÃÊ¿ÅÒÜáåçèëêëêêêåáÙô¿Óåïòöøùúûüüüýüýýþþþþÿþýþþþþýûøñîíëïïñõóôøøùúüûüüüýüþþýýþýýýþýüûúùüýþþþýýýýþüüüýýüýûûùúøøøöø÷ôóñîëêíîòùýýþþÿÿÿÿÿÿÿÿþÿþýüýýûüùøôîëÞÎÆÅÓÜçêìñòñññðïíìçÝØÚãíìëåÝÙÚÜçóøûüüóßÐßãØÑÌÁÀ­¬´¹Îåóöõüýÿýýþþþþþþüýûùù÷úüüûú÷òíçáÚÌ»¶»®•…‡™ž~w‡ž†lltqkspekmy‹‰…‚vr‡‰Ž¥ÀÓ×ÚÙ×ÕÉS†¤³´”H  9DL\_POVOQQ_mm_]fc|…oxyl?"5>:6799+"*>P^in|†‡‹˜ž¥ª¯²±­± ™–©·²¹¸”=YbkaW]WK?;4><>CS[ZYl‡£ÁÄȺk_`_inrlXI?;@>AD4)*1(5OS[`d\YYhq†”–””Œ‘Ž‹†˜¢§¦˜k/"  9^@("6Tfj]]jg_”„vmm„—£¦¥ |€ŠŒiijdefnqy†’˜™ƒ…‘˜Ÿœžš˜—¥­­¢Š…†‹†umxž¡ ‚C! *047<>663*7-&/-0#(,)**.0'(%/(1"  +     +  #$)$"!"&4GKY[_hj\]dmosst‹“˜tL-##(3@LU]bZM:Eduts`?+ +%!/=Obdipmd]WU[`evaF+  &3So„‚ti[JFHHRQI<84HSWUH=9;MfpvurjjX]^`^]duzyxzy^/ +& + +      +-HNH;-$""&03)-2.('(!#',4=@KJ@87@A;40321/39?@@9?@2/4/6;JF' $09?6:?:33?B5,848??@D3%      + +bš­¶´¶¹¯¶“eSIKjmYkg{”¸ÕÚØÖš¯¯­ÈÖÙ××ØÜßÞÜÛÒËÈÆþ¦—Ÿ•{p~…„lhfx¦¬“ˆ„j{›ž’Ÿ¬³®®ªœ–}VE\hqunv³ÆØϽ»ÐØØÛÜÉÆÌÊ×âÜÛàãÛÅÌÖÙÏÀ¹§‘Ž£Ÿ—“ˆŽ¥®¯»ØáÖÄ«¤¢ž¢±µµ·ÅÄ»ÀÌØàäçéêèêëêçâÛÊ»ÁÕéðô÷ùúýýýüýüýýýþÿÿÿýÿÿþýýýú÷òðïîïðòôõôõøùúûûüüûüýþþþþþüþþþüýýýû÷÷üýýþýþýýýýýþýýþþýüýüüûûúúùùø÷ôòñðíììîóùüýþÿÿÿÿÿþÿýþÿþýþýýüûúúöóìâÖÊÒÒàçëïññòóñðíìéÝ××àíëèéßÚÛÞèôúûüúî×Øçà×ÑÌÀ¼°±µ¾Øíùú÷ûþþýþþþþþþýýûûùùøùüûûûøðêåàÚÓ¿ÂÆ°‘x‰‰{blŠ•objww€ldanq‚•‹„…‚‡¤°·½ÆÑØÚÙ××ÕÆŠR|£´±•N  $:;>Tdb[OVRKX_lkg_bh|‚xxnD%0?856:?2#$BI[`z‰‰›  ¤ª²µ®´®š“£¶¹¸À¶”0 ,Ieo^ZaZM=97688EPZ]fs‰­ÀÀ·¨–yb_einusNC97<568;@><94.16B@" &1;8207<78??66637@=83&)?JFBBGFERXSLCKNJMRTT_[_hcgfdi_[]]fhf_dbfibZVC>7>=><0$  + ^—®»¾»¶®³•aXV_yw`jo…•½ÓÜÜÚм¢¯­¬ÇÖ×ÙÛÝÝÝÜÖÐÑÍÈÄò¡™ —tou}m]Yj‰¥‘‰”|nˆž˜Ÿ­°«®¬›“u_MWgkfjt³ÁÑÌÃÈ×ÚÖÜáÙÈËÈÏààÖÝäáÑÈÑÖÕÌÀ±›Œœ¤Ÿ›‘Œ’¦®²³ÒÝÔ½¥˜“‘š§¬¬ª§Ã¼±³ÉÜáãææêêéèåàÙÌÂÃÜíõøúûüûûûûüýýþýýýÿÿýþýþþþüøñïìïñòõ÷øøøúúüüüýüýüýýýýþýýýüüûûýýüùøòðóøûûûüýýüûýýüýýþþþþþýýýýüüûúø÷÷÷óòòðíîíñöûýþþÿþþÿÿþÿÿÿþþþþýýûüù÷ñëâØÖÕâèìðññðóòðîìåØÒÙçåéíèßÛÞèóùûû÷äÐàêßØÏÊÁ³«µ»Èä÷ûùøûþþÿþÿÿýýýüþüûúùøûüüüûùñêçáÛÛÛÛÒ¼¢ššŠ{et}nmowƒ~aPcl{ŽŒ„‹˜­ÈÖÛßàááàâàÜÚÓÃ…Mw¤³¶–T!    =LPWcg`RSMQR]`_ZZiy…‡‚pD'/@:16:>5+ 5V_jz‰••£¦¬­°´°²®¦š¦´´¹Ä¼²—9  $P`j\]\ZZC;515@BHZ^`j‹¦¬¥–|sgjqpphX:242;>972/2>@S[[\g‹‹~w}…‰”˜™–”–›“‘’—›¡ªŸt?%   1\Q0+Bbpldbfom…“†vjx›¢¦®­£ˆ{‚Ž‘ujhcpqkorxŠ–ž¢™‡~Œ• ¡¢›šžª­«›ŽŽŒqyŽ• •f4(<@?>E>8960651.27730.8,1+'01-## + +      "%)%'&***+   0?GS`dhjca^`bdfwŒ–œ’xP-'+7GPWb_M87Wwxo\8&))&1AUcbhlkaWQSQT^[OC.  +!8BLLC5634>Vipxwqh]TS]Z\ajuuy|xX3  + + +  + +  +4FIB8*%% %14--452.,(.&'-36C@JF;8;=9036./869<6580029C?1$!$:GB?=AOIHSMMGHHQVKHQaa^ciie`jaZ]abjj`\d]bcTQF72c]=9]jmljf^l…‘‘|cn‰ ¬®­¬•ƒ~Œ’}gfjlorunq•¢¢›Š‚‹“ž¦¦•›¨©¨œ’ŽzuŠ‘œœ™p8-?B9?HD><@485292/3625301.2/23$!  $# + .   "+)*'(-"#!  (>DSafidYPLSZ_av‰’™˜uQ.#*;>KVbaRA:Ls{s_B&)'(&4R^\`jnd]RLGJPUN?2!  +_}†~hbQ=:CPZaXH<7A>>*"372.5B@78AD=.,869<.')(:F??BIEJKKOF>EKV\JFV^cdbefflj][^aZdegeccb[RIJ;5=@;1* + e¡´¾Ã½¶®´–nbdkˆ†qrk“—»ÒÕÒÉËÕʱœ©²¤¾ÔÙØÜÞÛÙ×ÑÒÒÎÉÈùŸ‘›‹b^_h\@@IeŽ—•qc†—¦¨¯°® ‹qX@Ugjot­ÃÏÎÉÐÚÚÙÝâáÒÇÈÇÚáÚÔÞãÝÊÁÎ×ÖƼ¬–˜¡£œ’•‘¤¨¥®®Ç̳ª™•– ¦¢¨ª­²µÃÐÖàãçèéççæßØÍÍÏèôøüûüýûûþýþþþþþýýýþþýüüûôðïïñòòóöøøøúúûüýüýýüüüýüûùøúúùùúùùùúø÷ùöðíðöö÷øøúúùùùúøøùúùùüüýüüýýüýýýüüúúùù÷õññïìíïõúþÿþÿÿÿþþþÿÿþÿÿþþýýüúøöïæÞÛãéìïîïòóòððíæÛ×ãîôùøïÞÛèõùúøîÝØãÚØÔÌ·­­·ÅÜôýüùùýýþþÿþýýýýþþüüù÷úüûø÷÷óíëéçææßÚØÖƼª –†z‘„mpou†v^TY]n‘Œ‡Œ´ÊÚÜâãäãæèæãäÛɳoHpŸ¶¶“L +  .>O`^cX\Y[RDG^]`bq}‰…†oM6+?=9/:32+ +>Og{ˆŠ•˜ ¦°´µ´´²­£ ¡­³¸¾À»ºº¤J +$LaeY]RVOQA7A?B=PZediyskokhpqyneVK=8,(40$*)7:AOY_m¤¡¤•”‰…~‹‘‘–“š™š’Ž”•›Ÿ¤¢{C!   +   +!9bb? 3Njoe\ddouŒŽ‚}if~Ÿ©®°²¡„z†Š†piijnjyms~ŸŸ‘‚~Ž•œŸ¦žŽ–§¬¬¡’‘ˆ{o…šŸ’y=&<>?GLHIC>?<=74895569656-*.91-  +  ! #&!      '+&!%'$+=KUaijbZJKJN\iu„’˜•€U-%5AJS[XTH9Oo‰vfG+)-()0BU^ahghUNKF?@A70% +  Egvse^R?5=EQUYH:47;LRIB42712::;6/7D=B:*#-94)14;73@>;683685/,"":G>>GGEHKQQG?CGOUQN`e`dbhidik\R]a_dYjw^d[S[LFB<@?21%    k¦µ»Á½¶¯¹™kcZp‰Œpqoƒ“”µÐÑÌÀÃÓѾ™—¯©ªÌØÚÜÝàÜ×ÕÐÏÍÊÊÊDz—–—mNOSM;88N‘ ‘‘yeu”©«¯°²£Žx]CR_jmxsŒ³ÁÒÑÈÒÛÖÖÜÕÖÓÇÇÇÖÝÜØàâÝÎÁÉØÛÎÁ¯ ›Ÿ§¡˜›¦¡¬­µÅij«Ÿšš ¥©­¹»²ºÂÌÖÝàåèêèçáá×ÌÐäðøùüüýüüýýýþÿþÿþýþþÿýýû÷óðîððóõö÷øùùúüûýþýüþýüûýýüùùøùùùøøùùøùúùùöñîò÷ùûùøùúúøùùøø÷÷÷øúüûúùüûüüüþýýüûüûù÷õõóñîìëóüþþþÿþþÿÿþþÿþÿþÿýýüýûøóíãáäçéîììóóôôòîêåàçôùûûñâàéóøøòæ×ßäÙÎÌÇ»±¬¯ºËæúýúùüýýýþþþþýþýþþüùù÷ùúøôîíëèéêéæâßØÐÌÇÀ»²«˜–•vqƒ|‹uaYTay”‹„¡ÃÒÚÝáäãââæåäáÕ¼¨lJw¹ºšU!   (FS_]cgZ^VPPLXicdg|ŒŠqW: #5CC<355%#5Ght‚Œ—š¥§¨°³´³¹³­­¦›¡®±·¿»²½º¥M !Ld\_[Z]RJD??>BB:24.954648740-510' !"%#%" ((&.-"!  +   ,*(,&%%'NOQI?4'3CNOL?2%->UhjcWI;>L]cYX\_bjksmU2 +  +  +    +  2EXO?0..$!)&+(,..*12%&'+29>LU@;<6555122/525>A7?>?74.@A;=<& "3;5'16/15D?JLIJEBBDRVOOObfhffffgeY[^d`\[ig`_U[XRDB>>>9)" + + j¥²¶»º¹°´glgi‹pzt†‘´ÍÎÓŶÉÓÆ££«Ÿ·ÓÙÛÝßÜØÕÒÐÏÏÍÒϼ›‘z\IDG5.;Q‚š—Œ{o‡Ÿ¥ª³²±¡‹kXISesicm‹³ÅÖÓÈÎÚÔÕÓ¼ÀÖÈÅÆÎÙÙÖÛââÙÅÆÓÚÔŨ ——¡ž™™‘¥Ÿ§§¨Á¿­¨›—¢¥¢±ÈÉ·¹ÈÍ×ÛÞãçèçãáàÛÕâïöûüüüüýýÿýþþþþþÿþýþþüúõïïðóòôõø÷úúûüýýýýýûûüüûøúüúùø÷÷øø÷÷ùúùúùùøóïîò÷ùúùùøøøùùøøø÷øø÷øûûùùúüüüüüüýýýüûüúøù÷ôòïîíñùýþþÿÿÿÿÿýÿÿÿþþþýþýüûøõíéææèíèíóóôõôïíëåêôùúúôçÝëóùôéØÒåáÖÇÈ¿¶®«²¾ÔîûþúùûýýþþýþþûüýþþüùöóöùùóéåÝÛàÝÝÛÚÜÔËÉÌÒÑÇ°­«’{{‡‘Ÿ¡~g__jw|ˆŽ’´ÍÖÜÛÝààââãäàÙÊ®˜oIr˜µ·žQ + + 3LT`cfbYVVLKMZfihqz‡…gH+#386725<*7Phq„ŠŠ˜¢¯¯®³¸»¶¶±°§Ÿ—¥±²»¿¶¸¿»¢K +  Aael^XZZVB;8:>>MXeaaXVW]dgimn`]lgZF.(#),4NU\pŸº¼»»´¯¥–Œˆˆ€‚•‘œ–•“•‘˜™—¢§wA(    :bmX1,Hblmbmvu}‰“‡‚ngr•­°´¸¨”}‡ƒzlqrjolnop†™¤žŽ„|ƒ™žœ “–£ª­ ’‡‡Š…ltœŸœ‰R$:LNMJKRQN@>F=4,*//5048241+(-/)& $,! %%*"!! &)(2,/43/%!!  +  +*+*('%" #8GJVXVVRIAGLLTYk…‰mH0&"#)'#4]olgV=)/.((,>R_O=/+&,"  + + 8WdaL4!6HKLA5"&8IOE@,&OgbK5+!;L`\U_WST\g_?(   +  +* 8DLSD0()#!+2)*/-'.5,%&&)2<6>4348/'/:9<:;:>7617<;BB;" !5;5./3<4CK>9*03;:;5+%7HI@DFFKIIODECM^ZOKW^c_gfafkfWR]d__dddc\^UU]E4:<90*&   + g¥¸º¾º¼¯²‘fliv‘’nmu‡‘±ÇÌÛÌ¥ºÓÇ ˆ•¨ª§ÍÖØÛÞÞÖÔÖÓÐÐÍÐϼœŒ_D:831ATƒ˜š”“‡t{ž®­±¶¸£‰fQKSbclir‰­Ç×ÔÈÇÑÍÒ˧¨ÉÇÇÇÉÊÍÕØãßÝÌÂÑÛØÈ®¦™—›ž”†—§Ÿ§¦©¼¶¢ ™›§¨¦œ¥ÂÀ¸½ÇÊÔÜÝâæåæåäãâæïöúûüüüýýýýþþýýþüýýþýüøóñíïðó÷ùùúúüüþýýýýýúùùùúüúùúù÷õöøøøõöúùøù÷øùöððõ÷ùùøö÷÷ùùøùø÷÷ùø÷øúùúúùúûúùûüüýýþýýüüúùöôõòðîñ÷üýþÿÿÿþþÿÿþþýþýþýþüüúóíéäáçâëñóôòóóðìéêòùûùóçàìó÷ñßÊÏæÛÑÉÁ»¯ «·Çàõüûøùüýþýþþýüýûýýûøöõôõúú÷îâ×ÖÖÖÕÓÒÖÓÓÍÖØн¬­¡ˆk€Ž” ykddfcn|‰Ž¦ÇÔØÚÝÝÞÞÞÞÝàÚм¤šuHn£¶·šP  4LX_Xif]LWPFK^jgl}…ƒgB7)!3@:57439*4Xa|„‰•› ¦¬±´´¸½½µ©¨§žœ¨µ»À»»¸¿¼¤@  + B_heUX[LNF?31>BE6$/:93('"%' +  *((+%#/76:>?;68852))3F]aU=*  H:3!#1?<4&*-8<6'7DC3 $@PUJD:86BD;" +  + +  +  +    "9JTV>2&"#$+20142-*5'&#(21=?JH@8<931574(*-69>8762658:25=F@& *6;4013?04<=921-4?;7/ &7HE@?HBGRRTMDBV`STGUa\gidjchkYPYbdiga`b__[TNF86<71,#    (t©»Àúº±µ”kkjv‘ŽrurŽ³ÇËÚÊ”¨ËÇšƒž®«ÀÐØÚÞÜØÕÓÓÒÐÐÎͼ¡“Œ‘q?501BDZƒ”¢ž“‚oŽ©®¯µ¹Ÿ‰r[QW]_ipy‰­ÁËÏÊÅÏÊ̾”–ÂÀ¿ÆÄ¿ÄÎØàáÜÑÃÌÙÛ͸¬›Œ“££œœ¤£¦£ª±ŸŽŸ§ “Š‹±ººÂÈÊÓ×Ùáãàâãåäêñöùúûýýýüýüþþýþþþýýýüû÷ðîïððò÷øøúûûüüüüýüûùø÷øø÷ùùùøùø÷ö÷øõô÷øúúù÷õ÷õññõøøùø÷øùúúúø÷öøù÷õ÷øùùøøøùøùùøúüýýþýýüüûùøøöòïïîóùüþÿþýýþþþÿþþÿÿüüýûú÷òíäÚÝÞèîðóòóôòïìíñ÷ù÷ïåâìóöïÙÄÐÞØÎýº­ª«¸Òêùúûùúüüýýýüýûüúûúõðóñóøüü÷ðæÛÕÓÓÓÌÉÉÍÏÍÍÆÁ³ª­™xv„Ž›¦’koqpau‹Ž˜ÀÏÕÚÜÞÝÞßÛÜÛÚÓ¾®©‚Lc—µ¸ŸV  +5HR^`]a]SWEGVadqt„€oJ4&46--5((+"5Tgx€Œ‘¡«®±·º»º»»±§¡¨›ž±´ÀÀ¹¹·¿¼§J @TdhYXVRJJ?:?EBIY\SEBOVdnji`YY\moT2."#$*36;>Rx™³ÄÇÄ¿¹´²¢–†……„‘‘‘˜››™™œœ¡£§¦x?*    "9ere<$#9\wuimtww|ŒŒ‡~hn„ž«²¸°Ÿƒ…‰‹ƒnofiekmkhx‰‹‹„mmzŒ‘Ž”›’¡©­ ‘‹Ž‹}s‘šŸžŒtG(BRVWY_[NOUIC:) )%$*7:84919:70.&&(430/0<7::68AETB=520560")+-*  -3+1)   $'$ )&$+,'' ! " "-/(& .0)#&-&$)))" .7;0-**%*+#  +   + +     +9GOO=-!% $.+--173),,/",.3=DF<36833:8**%-4:?553477=746>C= +0;517<>5:77A8,/5@:=6'!9HD>GDAEUPQCGLN[YPUVdfbhhjfgh^USaheb`]_d`\WJD<9==,*# &  +$p«½ÂÄ»¶°¸’n_n€–“„xqˆ‘‹®ÄÊÒ¿†šÇÇ¢{‘©±ªÉÚÛàßØØÕÔÓÔÑÒʼ¥“ƒ…}H827OMf—Žœ¤˜‰pw¡®¬µ±–Šl[PX^efou‡®¿ÆÇËÍÐÈÉ°…‹»¿¾ÃÆÀÁÇÔÛßßØÄÅÕÛÑÁ´ ““ ¢ž“Œ’Ÿ ¤œ¦µ¢‘˜¨¤™‘³¼¼ÃÆËÐÓÚàáÛÝàäéñöùúûüýýýýüþýþþþýþþþýûöñïðññôö÷ùûûüýýýüýüûøù÷õööù÷ùøùöøôòôöóõùùûüùùùøõññõøøøùüûüûýûùøø÷öõöóõ÷÷÷ø÷øùùö÷øùûüýþýüüþúúùùöòðîîôøûýþÿþÿÿÿÿÿþþÿýþþýüùøòç×ÖÔáèêîóõõóðïîðõôñíäÞëöôëÜÂÑÚÐÆ¿¼±­®¯¿Ùñûüüúüûúüüýüüûüûüöéêïïòùüü÷òíã×ÓÔÔÉÁ¿ÈÊÈÀµ¬¦«ª•‹“¡¦‘zmssyt‡ˆªÍÕØÝáàÝÜÜÚÛÙÖÇ«”¢¿ŽNd–¯·›P       (?L\X^c_cUIDFWov}hP4$(83/25-'$.Pgu}‚“ž¢¦©®¸ºº½¼º²©¦ª «µ»¾¹»¿¾À»©Q1MaaV[ZYOE;CE@@PZSH?D[aimhhY[S_rhU? $'!#*74.9Wƒœ³ÂÂÁ¸»½²£•ˆ†€ˆ‘” œ•¡¦®«¢‚U4     + +1]pi?!!6Zorplqpw„…wZe€›¨®´°¤ˆ„‹‰rckkehnlnsŠ“ƒyzŠ‹…s…›¨®¤”“„yŒ¤¤™xD 'FSOA9:2-29>;&(223"  10,$%!"(  *!#"!!"! " + + +   +        #9IUJ=-&&$...(.511'*)%&3136! + +'4=<26<:.27;.10.;=><4&0D\][d[WVI?>XpymO9+  &200/?, (;B6<=>8.153*+=68?P?39ILGQMMCJ?=31:>?2-+1/-!!$ 4,%!!    2            +  +   6JSP<-! ""-)*/--+,-.+%'37:DJG:434872:6+)+02687<9858;5>;:7 +*3<:6<966<9.#+AQMGJHDGPRICEAGLLJMSdgdc`hfnhb[Y_dc`[[Y[_]]VC=50) + +%v´ÃËÍý·¸qhjy˜Œo‚|Š†œ§²»²‡„µÃ¤|‘¦®¦½ÔÚßÝÙÕÖÔÔÔÑÎÁ´§ŒqmdXKRV^¦{‹™š–‹‹«±® €dVOHaihns‹¬½ÉÍÇÊƽ¸™vtž¼¼ÃÀÂÃËÎÙÞàÜϾÇÕ×Ï°œ˜ ‰{‰˜› ©§¡¬©¢¥®¶¾½¶»¾ÅÎÕ×ÚÙÕÔÒÜëöúüüüüûýýýýýþýþþþþýüúôïîðóòöøùûüýýüüüúøùúúùôõöõõõô÷øùùúûù÷÷ùúüýÿþþþýýþþúùüüþþþþýþþþýýüûûûûûýûûúúøøøö÷ôõ÷øùúúúüýýþýýýýüúø÷õòïîò÷üÿÿþÿÿýýþþýýýüûüüû÷êßÔÊÑÜãìñôóñïííóóîéãàïöîàÌÆÊÂƽº´«¥«¼Õíûýüýþýú÷÷ùûüûüüûöáÔÕâèîôö÷ù÷÷îåÞÛ×ÌËÖÎƱ«²°®¯Ž}‚„Œ•˜Š|ruo‚wfv±ÖçæççêæççãÛÛÔƦ‡˜ÁËŸ\e™®¯•O  + +4D\Zb`a[XMGBYisdI3,!/14.18(#*Chow†“™¥®±¶µ·¶²±­ª§§¥™œ®´¼½½¿ÂÅÄÀ·‰4  C[aX[a\WH=?BJTVVSNScqqodTPYSRVWaZF3/7.,."()Dk‰ž¨³º¾½½À¼µ¤—ŠŠ‰ˆŽ–š™¢¡¤¦ª ™K- + +   +  +-[toS7 &Ijrrgpwus‹‚ƒsmj‰¥ª¯¯¬š„}ˆ‹znnlofjili‚““—–‰ƒ„„ly“š¤ª§Ž“•‡}†•Ÿª¤ˆ[,%EFC;<97:<4./1$-CHA=64:>2*-0591599=8456=:A>>?<78340/, +  % !))&       + +  +  + +  + +  + + +  +  +   +   +   +     +     +"3LTL:.(# '//02-+-(,'$)159>B8554@82*1==:C9,.APICCIEIJMHK>AVURLJV`fcciagdhd]\`dXY^cVWXXQIG>=>=.'#    +  6Œ´ÃÍËƾ´µ‘rkjw—™u€x…‘Š—¦·ÆÉ¢}¢Â¶¦’‰{‹¤²©²ÏÖ×ÖÖÕ×ØÓÕÔÐÁ±{h]YZX`n—{n”Ÿ›ž“s‚¥¬šŽ~n^QOYchmv‡©¼ÄËÍÏƾ²ŠwqŒ²¸À¾½·ÅÙåÞàßÜÑ¿ÈÔÖÏÀ¯¢’Žœž–ˆ‚Œ”•¡µ»¾¨š­º¶¼¿»ÃÁÃËÊÊÉÌÕÔÞîùüûüýýýýýüýþýýþþýýû÷òðññôö÷øùûýþýýûûøøù÷øùø÷øõóôóóøùüüýüýþþþþþþýüüýþüüýù÷õøüûûûüûýüýýþýþþþýÿþýýûüúùøôóõöôóõøùúùøùùûüýþýýüûøøøôóïôùýýýþÿÿÿýþÿýþüúùøøóíâÑÄÃÏßèíñðîìñøù÷ìßßîôéÙÆÌȽ¶¶²ª¤¥²Åéûþýýÿÿüúùúüüùøøùúñ×ÁÅÚæêðøûùôìäÙÕÒÍÅÉÈ·«¨¦¤¡ Šsr€’”‡ru}„uk_gšÏâìïîëìîîêèÞÖÓÀ”d­ÃQY”­°Ÿc( +4?IQUe^Z\QGLRbXD+!%-112674#!U]\fpg\NLQQNMNOSZlS6&05/&'*)Tx‰•¤¯º¼¿À¿´¨“Œ‘‹ƒŠ–žžœ™š¢Ÿ•wF$  + + + + !Ibh_D+&!!6D_hiikuyp‚}soge{“™£ª§œ‰}~xqojlcmilowŒ¡š”ˆ‰…Ž”’™—šž ¦®¥”™ˆ‹…„ž¡œ”rB0#.BM]cdhlj]b_TWOQ[K?AA@@J?G87<<7<3$"&>>@BCHJPPVV`X_a^TQODDBA>=9D@:2-.#   ! # **'% + + +  +    + +  + +   +  +    +    +  +   +    +   +  + +  +     &?=68>74<;<259:>5:2 *7<626;475>D?500=ACA;).=9>@5,,( !%)*#  +   + + + +  + + +   + + + + + +  + + + + + + +  + + +  + +  +   + +   + + +     + + + +  +   +  &CRTI5*'#  )+2,.*&(/'')&,14>DC?:8:<588-.).825209AB73=877@3 &;B636?73<=GA560;;?A5*6>GD@GFIEHMI@>ENWQKLYd_cahgdkje]b`gg_]Ya^\[LJC87<92)  +  + 0‡¸ÇÍËÉÁ¶·Žohm”–}‚z‰‰{•®ÂÓÙ¼„Ž³´­­™†|‰·­¥ÃÐ××ÖÚ×ÖÙÙØÓ¾¦‹‚tcklqŒœ‘ytnvŒ ™{„¥¤ˆuf]POYkmrr~ª¾ÊÎËȾ¾³Œrl|¨¼ºÅ¿¸ÀÑáäÜáßÝÊÄÒÜÛɺ±š‘‘ˆƒˆ‘‘¦­ÀÆ®¤¦²¸ÄÃÁÃÆËÉÇÈËÏÌÞôúüýüýýýýýýýýþüþýüúõðïðóôöøúúúüüüû÷ø÷öõõøõö÷øøõõòõ÷ûþýþýýþýýýýüûûùùùøùúùùù÷øûûûúùúûûüúúûùûûûûüüþþýýþýüúøôøùøøøùçäø÷ùøøøüýýýýüüùùøóòðóùýýÿþÿÿþþþýýüûûùõîãÙÑËÂËÕäëîìîòøúúôçáííáÏÌÅÁû²¬§¡­ÁÚõÿýþþÿþýúùüúöóô÷ùúðÑ»ÅØáçîï÷õòëÞØÏÐÑ̺›šœ¡¦­® }uŠ‘˜—Ž‹~w|nlaag¡ÌÜâèçäåæèëèÞÝ×Æ›gg†•vBX”¨³«a# + -+8EK]_TU\MQWB6*!%-,"*5.'(.Ndn…ŽŸ¤¥¥«Ÿž©¬¬°¸­¨—ž­¶»¾Á½¿··¹À»¼µ‡%  + 1FY]^_W`ZQLPQHT\ipa_SGDXSCJHDSTd[XB;007823AlŒ‘›¤®ºº½¾Â¹³¤•‹‹Š‘‹†ˆ‹‘——–Ÿ •†cE,  +    8geaH4;;46)'    '&# $%#     + + + + + +     + + + + + + +  +  +    +  + +         +  +  <<18<93:BG>895=:@87)1GCA?7)*"  +3‰µÂÊËȹ·Žnmgw›šy~y‰Š€˜¶ÍÙÝƇª¯µ¯¥š‚‚‘¨¸ª¬È×ÔØØØÕÚàäßÍ® }lgn‚š””‡w}~„š¢˜›ˆ{–‡tf\SI`slv~„¢½ÍÒÌÄ»¾­my ¾¾¿¿´ÁÊÛãÞÜàÝÓÄÍÜÜÐÁ¶¥‰”‡‚Ž›¢©¯Áɱ¤£®·ÇÈÂÅÆËÊÉÉÍÑËçùüýþýþýþýýýýþýýýÿüõñíñóõõøøúüüüüü÷ø÷ööõõöòôøøøúúûûüüþþýýýüüûûùûùúúüüüûüýýûùùüýýýüüüþýýýüûüúûúùùûýýýþþþþýüýüúùùùùöùöö÷ö÷úüüýüüûûúø÷ôòðñúýþþÿÿþÿÿþþýüüûùóíçÜÖÓÆÑÝèììïòøûû÷èçñíÞÍÊËľº¶©¥¥µÍçúþýýþÿþýüûúúöðó÷ùúêÈ»ÁÔáæêïóóñëßÔÔÍÑÈ´–Ž¡ ¢­©”z„Ž —‹ƒ|„‚vlcdem¥ÏßåæáããææçåÝÙÔ¼aa_r_;Yš®³¨u'  + ''2>NWUY\OJPM:+!0-0/'"-*"$)?fq|Œ˜¡¢£¡ Ÿ¢©²¯±®¬¥šœ«®¶¸À½½¼¯©¯­®ª”b  +,>NXY]d`\LHIJTdnn\@HHXNNFEEOWZdfbI60191:7UzŠ’©¯µ¹¹½¼µ®¨™‘‰ŒŽ’Œ†‰‡’’•–ŠƒpI(  +  + ;btgP:>:<.+/"=RXZ``]Z_etzutnec`fXHO\M@FCEHC>8+)   #,+%!(   + + +  + + + + +  + + + +   + + +  + + + +  + +   + 2  +     + +   + %:LTG1%&$ %")++14+#'-!*1-5<;:@>677,/7861$..4A339=;;429?>G; -76867<<77DEC9>?64,$     + 4±¿ÅÇÇÄ»¶qqkp“–~€x‰Œ€œ·ÐßáÒ–‚±¶¯­­¢†pƒ“­´§·ÏÕØØÚÙÝááàÔ¶‹wjdt‹—‡‹‡‚}}’¦¡šqs‰vmVTWfv|y}Œž¼ÎÔË¿½½¨‰it™·¹¿¾³ºÆÒààÚÞÝÙÈÇÙÝ×Ƹ­–‰ˆ‹†u…Ÿ¨ª§±Ã´¦¤¢®ÅÉÄÊÇÍÎÉËÐÐÔïûýýýýýýýýýþþþýýýüöðîòôóøøúûüýüûüûùøö÷ôòóô÷÷øúüûýýþýýýýýüûúùùùûûýýýýýüüýýýûøùûüýýüýýýüýþüýüüüûùùúúûüüþýþýþýýýúûúöôöôöõõ÷úüýüýýüýýûùöõòðñøüýýÿþþþþýýþýûúùôìæÞÜÒÎÞçêëîñøýüùììóëÝÎÎÎÅÀ··ª¦¬¾Ðíüýýýþþÿýüûøù÷ôò÷ùùëƹÀÏàãéíôññîáÙ×ÒÍÊ«‹‰š§Ÿ§ž‚mš¡‘~…‚‰‹~kemus¤ÕáéçæáåççåàÝÖǸŽeB@R_D]™±¹®q-  4DHT]NSOUHK*.!,;522++(",;VpŒ““˜ŸŸ£ž—™›¨¯±°°«¤¢¡®µ¶¸¼¼º¾²¥¥¬­°’P&  *ELMNMb^XLKV_oj\G@AOUMMGUVTf`cliKA<.9/:Ce}‹”¢«µµ¶º»¶¸²ª–‡‹‰Š‡ˆ‹‹—˜Ž„„ˆŒyR%     +=cmhI=6;;=Qmstnk‚“‡vleYMK^t“¢©¯¥ Žy„‰‡roiig`_]_ƒ—ššš™‰Œ–˜˜›•–™ª­®§•Ž|‚xš™‚_2! 5Qhhglfiqlj_dcb[LSHHMHGED=LA@EBC7>. +   + #&%$ +  +    +  +  +   + +      +   +  + + +    +  )?KKE/))!$$.))-.+&-%#%0-49@=:63:>76344-&11679549==96=C?A3 ,2=65?;:4:GF:889=>@B7'1?CB=EIGANUHFCFMTSRNZ^`c^_`ach`]ehc\_W\^__YLF=>=:/3&$ +"  34Œµ½ÆÅÆÄ»¶mlku™–ƒ{ƒ„Ÿ¹ÓâåÕ †·Æ¸«®­~{Ž—±°ªÆÕØÚØØßââáÖÁž{km‡™Ž€†‚|twš¥š•|j€Œ}eXS[q„|€Œ§ÀÑ×ÎÁ¼´¡xpm—·º¼¿·»ÄÏÜáÚààÚÒÊ×Û×˾²œˆŠŠˆ~uœ¤§Ÿ¤¾¯§¢¯¶ÈÊÆÉËÊËÌÑÍÎá÷üýüüýýýýýþýüýýüûùòïïóôôøúüûüüûøúûùõóôöóòó÷ùúüüýýþýýýüûúúøúüûûûýüýüþýýýüüûùóòõöùùùùúûûýüüýýüüüüûýúûúúüýýþþþýýýüú÷öõôöøõöùûûûüüýýýüúøö÷òðóùüýþþÿþýþýýþýüûúóìåáÞÙàäèéìñúûýúððóçØ×ÚÎƼ¸·©£«ÄÝôýýýþþÿþýüûøüüûùùúùé˼¿ÒàåæîòòïîßÖÓÕÒʧ‡•¤­©–|zŒ•™™‡‚Œzkfv‚|¦ÖäéçæåæççâÜÜʸ¬‰hCAijE`‘±º°t/ +  1CRW[XM\ZI;!!"&.1-...+!"4XszŽ’šŸ¢¦¥“š¡­µ°­®¨¤¡¬´¸¶µ¹¾¼¾À°£­°±:  (>MGIMgVFKNUijVMG5EOLNV\eeZdd`aii`\`__V\ZXX_WZNHAM9B:/)    + + 2¸¿ÁÆÄÁº·Žkjgy˜“x„…‘‹¢º×âáÙ¤ƒµÏDzª¬¨Š~…¤·­´ÍØÚÙÙÛááàÝ̨‘wx” ~‡Š€yrt¢šl{}miOZn~ƒ…‹¡¿ÐÖÑľµš€rpzŽ¯´½ÆÇÅÇÊÙãÞÞâÛÔÉÐÛÙÓų¥Ž~ƒ‚ƒ~u‘¢ Ÿ¯«Ÿ›¬¸ÉÌÅÆÊÍÌÌÏÇÔíøûýýýýþþýýýýýýýýúóðïóôôöúüüýüû÷÷øù÷ôôôóóóõøøüýþÿþþýýýûùúûûüüûûüüüüúûûø÷ôóòíççéççééîðñòöùûûüûûýþýþþûûùùüýýþþþþþýûùùöøöõ÷øùøùûüýüýþûüúø÷ôóòõúüþÿþýýýüþþýüüûøñëååæãæçèëñùüýü÷õñæØßÞÐǽ·³¨«ºÉãöþþþÿÿÿþþýüûýüüúùúùçÌÂÃÔÞâæíðððíàÕÕ×ÑÊ­Œ”§±¥‡h|Ž”˜‹ˆz‡‰shfƒ‹‡­ÐâèéçééèèáÝÕ¾ª£€\FLpm?\•´½¯u*  , 1:B@V[QNRP]dk_HD:EMIN@LS^_gkqrqjibK=GE@[~‘š ª¬²¸´µ¹¸µº¯—‹ŠŒ‘Œˆqpsˆ“•“{i@* + +   =mtvP*1RigpluŠŠxlh_VUQk‡¢§«§©‹p{€lc_]^]_``fz”  ž’yp…”‘ œ”¥ª¥•‰†‰€lƒ“¡£—r:##Fablnvpsda\abgWOKPTJFGG>>>=8:5081-$;Vd]bbfh]egce[a]^YYSVZ_OFOVSVNIDD:#   &%%#!!"# ",+.5741  + "&"$(,,9AE=1,,0'"" !'3/(   $*15( + +  +   +   + +  +  +(    &EHNC4#  '+*2-*.F8+$*0457<=AD=4(2AGHHBFC@OJI>E;JSNKS]cgbc[Ybfie[_ad^ZXTRXSSNL<;>;5/#"  "  <™¹¿ÂÃÇŹ·‹lko{˜™v}‡…¹ÔÞÚÒŸ€°ÒÖÁ­¬°›‹‡“©·¯¼ÕÛÚØÛÜÞâáÖ¶™‹~‰ œƒ{Š‹{tv˜ž–‘yo‡ƒi`KTn{‚„Œ ½ÍÙÌ»®’|rx¬µ¼ÃÎÌÉÇ×åäÞâÜÚÊÉÖÚÖʶ¦Ž{ƒ„zuˆ šœ©«£›ž«ÆÊÅÂÂÈÇËËÊÙíùúûýþþþþüýþþýýüûöðñòõôöùûüüüûù÷öøøõõôóññóøúüþÿþþþüüúûüüüýüþüûúúø÷õòïîëéééäàáâßÞàâàâäæççêíîðôöùüýýýýþüúüüûúüþýþýþüø÷õöóõøøùùùûúûüþýýûûùööòóóùýþþüýþýýýüüüûúóëåååççæèêñûüýýùõêßÙæàÖÊ»·®¦¬ÀÓéøýüþþÿÿÿþþýýþýüûùú÷åÇ¿ÁÐÛÝãêíïðìã×ÙÙÖÊ©Š˜¨ª“so““Œƒƒ}l^g“žŽ¤ÆÙáãååæçäßÚį¢Ÿ~SES~rGU­¿·~3  .;HXh[`TF.%(0&1((/"A`~šŸ¦©«¨£œ¤©®¨­®¤ žŸ¬¯¸Å½¹Á¼¸¾»´¢¡¬³³±šO8C;@RSSZ^]dkbMDA>CQAH;TeifsvwzxzvhZCKCKd€˜¢ ©¬³¹·¼½¸¼µ©”‹ˆŽ”‘‰Œƒshu|„ŽƒyqZ<*  +  =iorX/'D[kgej{„zzxqlf`cŸ¨¤¦¢’xk~†oc_\^V`Y`hsŽ—™™”„y‚’•“••”™¢¡•Œˆ„€yr†’š–€R/$.CTcklprppkabga_YZ\YUQJFDEE;8=7<9..#>LTRMGD=2,(& $&*/- (=DIFMNB6 +  +  + +  NC + '8FLB,!!0,*++)0%,'$%$356??:95471,:87502*/4+-4;A@><57B>3 0<;374:96@CF>829HEDB4%>BK\VJH_ffeb^ZcjjeY_c[a\XUUW`UGI@=7:7-'$ !  + @¿¿ÅÉÆÇ»´‰woj~™™{}ŽŠ‡œ¸Ï×ÓÌž{®ÒÚÒ½³µª™‡„†Ž¬µ­ÉÜÛÙÝÜáããÚ¿§„žµ©¡’ƒ{ˆ‘xow… –”Œo{‰oXIRr€†Š™¥»ÊÖʽ¶¥Œˆywzˆ«¹¾ÀÅÂÇÁÏâçââàßÐÄÌÑÕÊîy…Š€y{’˜”—œ©¨£©¯ÄÍÇÂÁÄÊÌÆÅÒéøüýýûýüýþÿýþüýùõòòôõ÷÷øùüûüúùöøõøøõõóñïôøüþýýýþûúûüûüüýýûûùôððïíéêëìíìíîñíëîìïõööõôñëææââáâåäéîòøûûûüýýüüúùùûüþþþýüùøöõ÷öøùùøùûûûüýüüûùù÷ñðòúüýþýýýüýüüüüùòëéææéëìêìòúüýþùòçÜäìÝÕÄ»­¬¦±ÄÚí÷üûýþÿÿÿÿþýûúûüüùùõâ¸ÂÈÔÝÞâéìíèß××ÖØϪ†‹™ª {j€—’ˆ‚…‰“ƒh]€£¥”¡ÂÓÚÙÚÜàÝÛÜÒ±Ÿ£®‘`M`vEM´À»0  +)P`\K0 + !+4:>?HRMGID<-(')"!''"  ,54,.KLSUTQL=% +    + + +  +  +  #>KH<.) "),'+*213-' $(197:GI2/143/2:71,0452-+47A<9<580<6 +->;:65:8=BKE7;59CEHC3"2;LJ@A@DMGEHA?BKY\GI``fa`ddbrq^[W_\]WZYRXYPTM@D4/50$  $G?  ?žº¾ÈÆÆĺµqngy˜›Š~‹‘†žµÏÕÒΡ~ªÔÛ×͹²³¬š†~‡œ³³¸ÕÚÚÝàâäâ׿¨œ•­»¬§Ÿ‰z…|pvƒ›œ’‘{j…}bOQt†‹’’ ºËÍȽ®¦‰~tvr„°¼¼ÂÁ»À¼ÈàèæàâÝÖÅÆÊÐ˶¦µzƒ†‡€}€›–•œ¦¨¦¯µÄÌÅÆÅÈÐÎÊÌÏäöüüüýþþýýýýþýùôðñöôöùùúüüûúöõöôô÷ôñòõõøúýþþþüüüûûüýüüþûûúöñìêèéìð÷ûûüýýýûùõôñõüþýýüýùø÷ôñðîëåâãèìðôøýþýüüýûùùûüüýþþüüúùøùùùøøùùùýýþýýüúúù÷ôòôûüýüüýýýûüüû÷ðçèææéëìììôùüþýüñâÛëìàÔɺ®«°µÇÞðøüüþÿÿÿÿÿþûø÷ûýûøùõâÅÀÃÅÓÚÚáëìíéß×ØØ×Ì­Œ¡«Œn{ˆ•¤š€‚–‰w^X‹²°Ÿ«ÎÞââÚÚÙ××ÕÆ¡˜¹½šcRa‡€HOŽ¯Åº‰< .?GTcoN8)/3)-,"  #Ns•Ÿ¬®¨¦ ž§¬ª­£œšž¢¯³¾¿¸½¿À¹±¸»¿¿®¢­§¥©®¥h + /JUHE[]fopiVNIB@FJEMZWks{|„ƒ‰ˆ†rkd[LT‚—™ž¥²°«¯¼¾ÄÀ©•Š††’–ˆwpfuƒŒoh]NETTT9%"   ,Rhi[59M^on[d€kinki\Ul” ¨§¢¢‰rrwpjce[Y^djjp‚‡•“ƒm~’“‘Ž—Ÿ¥¦“‰‚Š…€’šš›’d3""=T`kfirmceklgacbgaVXTLKEJC>@A>@@:6/:Rdiakkktusrjkfdgjbfh`\aebc_R[WI:C=* %$%'**).51)).,("%03-+:R^\P9  +$5;BEGKKDA@=*%'!!$''#! %!,8BHA8+  + +  + !  +     +  *?G?9,!"$1"!&*(11*#'*(084;7559220CNRFA4;GJDA:/1BG>=E=KJPPGHAEEMULT_fcbeifiijb^Z[`\SYRVTVNOJ>>102*$  #F  D¥½¿ÄÇÇźºleit’–Šy‹†ž¯ÌÒÐË©Œ°ÙâÞÛѽ·³¨Žƒ†¥·®Â×ÙÞäãâÜÙË«™¦·º´©©˜ƒ|…‡‡}x~‹ž–wxƒiZ]u„‹‘·ÃÂÀ¸¬‚}‚uxŒ¨µ¸ÃÁÁ¸ºÃÞèçáÞßÚÆÄÉÊÍĬ™|}ŠŠƒo•—“¢¬¯¨­«¸¼¼ÄÂÈÍÎÌÉÍÛôúüýþþýýýýûüû÷òñööö÷úüýüüû÷õôôòôô÷ö÷ùüþþýþüýüüûüýýýüüüùôðîêêìñ÷üþÿÿþÿþþÿþüøôôøûýþÿÿþþüüüýýýüúöíëèæêíòøüýþüýýüùùùýýþþþýûú÷øøøõ÷÷÷ùûüüüüüûùøõôò÷úûüüüýýüüüúöïåââäçìëîîôüûþýúñáÛëéÝÑÈ»¯ª­´ÍæóùûüÿÿþþÿÿþûõùüýúùùïáÄÀÅÂÍÔÔâëîðêÝØØÙ×̪•©žŠy‚ˆ• Ž†…‹–qab–µ»©»àìîìäÜÔÍÌȬ‰©Ä·˜`Fe‡xMM†³Å½‘= %0EIUkV7(+&+)"#$  OyŒž©­­¬£ž¢¨¦¨£¢š­±¸¿»½»¿º´±°·¾¼½¬¥¦ ¡®®«n'   4JIRY]chjf`EKMIPSIBOY`v‚…ƒ‚‡Œ‡ˆ‰}ttgZe’› ¦­¯µ¶¶»º°¡ŽŠ‹–“~mgq†ˆ„slUC:HPZbF./  + + 7OgkY9)DelnafwznlorucZjŽ¢¥¬¨ Œlqt}pegfffhpos~—”“…u~”‹’‘£§¡”‹‡‡ƒ†™œž‘h:*$=W^aleaibagalce`__ZRSUDMFGB@E<=@8236Odgjofuxhlmknoilihid]]aaigXb^[HA@B1    @@ACD@EDDJ@;?<6-*&#(-&)7R^^[E%%6:BIIJLLB?2.(%%"#%''(')&/FQSNVRD8<:9>LI@:6:FKHD8(0IDE>IA1!!   gedcca_`^ac\ZTG0%"# &2G\bZJ+#!!1BEGEFEA=>>3*'+'""(&,9Gc|ƒxqf`S@=@BPVX[`XN=7Kgu~s]/!&$  +         2DED?:-'&%%)'##(*2+'"&289<>=33178.5><0+4,872')1671;;7:E0 "-8:56;:2CMM@:6=DPeplZ/#   + )Rlsg: $6Yksc`fopo}yuqb^‚—Ÿ©ª¨˜uj~‹~rljtumnldn–‘whsˆŽ”ŽŽ–¤¥—ŽŠˆŠ‹wt‰ŠŒa7!#8O^ahlmmihkchmkgd]\UNSJHJNMM?CGDDJF?AC<4(&(' &'6H_~“}lj_J@=KTSSU[][\r‰—ž ’tR4..-45-! + + + +    +    3@FG@7.,!((#!$"/*')5(!('08<8?5:=254:DC@FLD;;ECNOKSScgb]^^`ana][\^ZLTV_VHWWP@9198)&)    + HŸ¸¿ÁÈÆÁ»³…ffcq‘•||…‰­ÃÉÌÅ®Ÿ¼áëðïìæƵ³±¦’ƒ„“®ºµÆ×ÜÜàèîâ¿­ÃÉÆýÀ®›‰~„Œ‹{{uƒ–œ–”~zŠXr†‘™š¸ÈÏ˶§”zy€ty°·ÃÊÌËÁÇÒÖÖÔÔÛàÙÈÃÇÄÉŨ„”˜Œ†‡›–Ÿ§¥œŸ¶Á¿ÄÈÏÎÓÖÛáí÷ûûýýþýýþýúõòòôõ÷ùúüýýüûùóóòôòñòóõúüþþþüøøûýüýýûû÷ôñòõúþÿÿþþþþÿÿþÿÿÿÿÿÿþþýúðëéîôüþÿÿÿþýþþÿÿþÿÿþüüüýüöïìêëóøûüüüüúûýüýÿýýýüùùôôõóóôøüüýûüüûùøù÷ôöúüþýüýûýúùöîçåçíîïðñõüýýüòèàéåÙÐÎ郞»Ìäñ÷÷üþýýþýþÿþýùûýýúøõíÙÁÃƼÁÐ×äïö÷ïæÚÜÛÖÍ­¡Žuu†Ÿ£†ˆ…ˆ–Ž{tiYv´ÌͺÉïùùúôè̶´•aty‡–VGXŠ}HT–¼È¾‰8 *5H[P7$#!/+(((  R‹™¥¤£¨ª­§¦ž™—°¹º¹¼¾¾ÁÀ¶®µ¶²³º»¸±¨««³º»¾Á¶•> -BJUgqrjiKOICD=JFW_eggp€‹”’‹’•‘“ˆx{|hh„”— ¦¬³³°žˆ€ŒŒˆ„npƒ†€rbC?>>>50.*$.H\ejrooxqttrtuqgksspsigha]Yb_WGEHD2! yxuuyuwtqlife\L4&,.$%.DVYROIMJ4# %5@GF?FJD>A8-#$$ !%6_b•—”†ukfUD=FOQWT[`cu’¥¦¨¥žfE968896,  + +      ++BLK>830&#'/)&*7.&&'!$*2:799=685.*-:@5%$0336.3)&67896::<1/9986:502BOME86AOJED1$.HJC=;;@=HIE78AJLINRU^f_TTZ]flcY^ZV`ZWWY]XUIGB/46-( +$  + Bžµ¼À·°‡jh_m‘“y‚~ˆŽ£°ÄÊÌÆ« ÅäììíìèÕº³·³œ‹Œ¡º¸¸ÏÛßéðñèƹËÌÉÈÃÀ¶¢–~‚„ˆ‹|x{”ŸšŽ}{Œl{…‡‘—˜¶ÁÌIJ«˜rx|tv…³¶ÀÍÓÖÌÐÕ×ÒÉÍ×ÝÜÐÇËÆÅƸ°›……Ž–Š‰˜›œª´«µÅÊÃÉÍ××Öãêîñøøýýýþýþýüõðòòôôùúúûüüüüùôòñðîðñôùüýýüýúûûüüûýýùõôõøüÿÿÿþÿþýÿÿÿÿþÿÿþÿþÿÿþýúîèáâìýÿþþþÿÿýþþÿÿÿþýúüýýüýýûóïìíôúüûýûûûùüýýýýýüøöö÷óòóùûüüüýüüúúùùøóøûüýýüüüûùöñìéîïïððñøûýþûïâãéßÚÔ̼±«¯ÀÚíõ÷øüþþüýýýþþýùùùúùöôéÖÆ¿¿½ÃÎ×äòùøòäÚÙÙÙ˯¥¢‚p„Œ—ž˜Œƒ~‰”ˆryp]€¶ÏÓÃÉïøúùñÞÁ¾¼—gWZlˆ[HV„FZ˜Áɶ†>  ,CECEM??<7.*$%! )2>:3% + +  +  + +        +5FFE81340!&.2+%)+&%,(#!1<9:C;0.22*+6=<,+0.2211%+27:05;;0( 0=9;9::,0HPO;34BPFBF1%4KB<@96=>EG=98?LLNe^[Zf\ZO_^ck]VX]\V]ZZWV^KGE@;24++&    +    Fœ²¸¾Â¾¶²Žnb^o™–q€‡‘Ž¢­¾ÌÌÈ­¤Èæíêêêèáθ¶·©—Œ‹—­¾¶ÂÙèðñïæ˽ÈÌÉÉÇĸ¬—ŒŒ~‰Œwyƒš¢˜–‡y†…{ˆŒ‘‘• ¸ÃÌŵ­”jfvuu€š´¹ÁÎÒÓÙÔÓØÑÈÆÏÜßÙÉÊÈÊÉÁµŸŠ‚‰™”ŽŸŸ©¸´¼ÉÈÆÆÐÛÞÞíóñôùûüýýýýþüûôòòôöøøúûûüúùúøôóîîíðò÷üýýýüûùúýýýüúøôó÷ýÿÿÿþþÿÿýüüýýÿÿÿÿþÿÿÿþÿþþóëäæõýÿÿÿÿÿÿÿÿÿÿÿþýúùýþþþþÿÿþûõîìï÷úüýüúûûûüýþýûù÷õóòóöùùøûüûüüýûúúöò÷úûüýýüüúù÷ôññòïïðïðöûýýúïààåÝ×Ïƺª­»ÊåõúøùþÿþýüýýÿþýùöõõóòñåÐÃÄÀ»ÀÍØéõùúôç×ÖÜÜÊ´ª“~}Ž™¦¢’Š†‹Ž”€mv‰xŠ¼ÕÚÇÉêöùöçÎÃÑÊ eAFh’ŠaD[ƒ€MK“¼Æ·~6  8HW710)$,' /q‘—–®«žœ‘‘™¢®¸µ·¾ÃÆÆ»¶°³²¯¶¶¸¬««­¥¤­®£—•Ÿ±¦\ +>YhnlbYKMWJPNIWT_gakn}–¢–”šš™›š—‘’†r}sfv‘˜ž¢«°« ‰…‰†|pi}‰xeVN::BFMW_^^ckkK2# + + +  $Kgpy`. ;Xll^Wfcoo€ƒkQ`ˆ¤ª¨¬§kay|qd`joqnjcZgˆ•——ˆ^_vƒŒ•Š‹•£žœ{†Œˆwo†”——~Z<&)BU]\^]b\Zacjf^aa\WNNMMOS\apnfU- 4Zzxvyuspmmjswrt{zwwzohbc_cID1  +llpimjnm`ebdXUB)'.21.0=GEHNTXNC. !0AHDIJAB@;94*$)#" #(3>Oj‹•™’†wlbL=>GTWSR\bp”¡¨ª –~XDFBB=;98%   + +   + +    + +  =IH621=5,22,%*104;:7,* /44446633L\P77:3M{‰Ž‘rHGl}‡‹€r_uŽŽjsuue[l‚~uc@&!5EBORLOV]YW]WVTPEEFGOROU]n…–žŸ˜‰v]H?@?@<790   +   +  +  +  +    +   %9CA>3'-2+".01.(0+,+(*(&$)224>>8/,/007=:=*+/9=8112/0,.47:62' "*=<1+57=7KSD=>7;KLKD4,7IFE@D?>EAA<97DGHOFQ[_ac`c]^ae`]Z\]VZV_YQPQMK?83,)    @”°¸ÂÄÆÀ·²‡jigt–—‡‡~Š’Š ¶ÂÎÒÊ®¦ÑèêéêëííçÔ¼¹¸µ¨–‰›²º¼ÛîïéÛð¶ÇÈÊÏÑÇ·¬ž”‰~…†ww€•¤Ÿ–“ƒ‘¢˜—–• ´ÃĽ²©—|zpr|­´¹¼ÀÉÏÏÕÚÚËÅÒØÛÚÖÄÁËÍÍŲŸ€—˜–Ž‘¦¥¦¬¸¾ÅÉÃÅÑÝÞäñøùøùúýýüüýýúöôõõ÷ùùúüûúöôóóóðððïò÷ûýýýüûùûüüýûøôôùýÿÿÿþþÿÿÿÿýúïçê÷þÿÿÿÿÿÿýýüýýøðñûþþþÿÿþýýÿþÿþþýñâãîùýþÿÿÿÿÿÿÿþû÷óïöüýüüüúùûüýýûøøôññô÷øùùûüüüýùúùùøöøúüüüüûùúöõôðîèéíðöûüýöèâêæÜÔËÁ·¯¶ÆáöüúúýýýþþþþÿÿþüùøøùóïìÝÇ»Á¾¯±ÄÔçôùûöêÜÜÝÚÒ¾—‡“ž›Œ‡ƒ…Š~royš§ŽšÆÛÝÌÈåóïßÆÈÞåÚµo@>@;:==53545+!*4;A;4=D=>NUVQJ=* ##2=ACCFB==<70.,-*'$"*38N|•—’†wk^E9@EJNMSYg{Ž›Ÿ›‰u\E>><=8=:3& +   + + + + +  + + + +  +  +  +   $15=94'5;0#".163+(3($-)%%&-6=>A9.-121:999*-7=63-,/553377774% +8=7112:9JRK>D9AKHNJ5+@KJF><7>?CE=>?>MROEK[^]Xab_Yfha]YX[^SPX]TRLFH=53/+) + + "  +  + 9Œ°ºÁÃÈÁ¸´kfa~•“……’‰¡¹ÍÜßÙ¸¬ÐæçêíïðîèäÑ¿¹¹ºªŒƒ“¤»¶Àáëèض¥´ÁÊÌÐÔÍÀ³§šŒ‚„ŠzswŸª–‹€—Ÿ•”šœ¡µÂÀ¾²­œ……wqƒ‹«°¸¿ÂÈÊÌÕ×ØÎÁÐÔÙÞÜÔÁÆÌÊÄ·¬–x“››‰‰¦¢£©±½ÃʾÀÊÚÜæñùù÷ùüüüüýüúõôóôøøùúüüûøöòòôóóóô÷úüüýüüúùüüüüùõñöüÿÿÿÿÿþþÿÿÿÿþöêãêúþÿÿÿÿþÿýýýüüù÷ùþþÿÿÿÿþýþþþþþÿþóãâïûþþÿÿÿÿÿþÿÿÿÿúòíõüüüüüûûûýýýþûúöõõø÷÷÷ùúûûûýûùùøøõùúüûûüúùøøôñðééëîöüüûòááéáÛÕʺ®²¹ÏìûýûüýþþþþþþþþýýüùøùôïêÖĸ¼»¯±ÃÐæòùúöëÛÛÜÚÔ¹{™š¡“Šˆ‚ˆlms‹¤¦…”ÄÛÜǾáìáÍÅÞëëݹqF^€ž“jBOy~XD{ª»¸<  $)3+!")" !% +"QˆžªŸ”Š£³´·¸µ»Ã¸°¸¿ÁÁ¾¾¾§˜“Ÿ§¡žœ£Ÿ ƒbmhZu˜_# + + *Rh^ZRLJTSUUMUacimx€~~„‘˜ ¦ Ÿž ™‹wgb`d`oŠŒŒŽŽ‹†€rƒ’‡lWI@?CM]fgeg`Za[bluxmF2   + !   &$#&    %   +   +7;8;934430015.*'.79=;9>?AEMXWWM>83("/;>CIHI@:3200,'*)!!#.5HuŒ“›”ˆvrgM;>FIKQWZauŠ–š˜Œu[FC<=9>>?5* + +      .BQWU4  $(& "  +    +  +  +  !2B<73*,6,"!&/7.*(0+&,,),(*27=C?:4./4.18A=319438972=98797633$ + 1<385103@HYP;=9CHDC@4*7KJ>==;;@A?;z§½»š@ #%*)"-"&  +#Yš›‹¤¯¶¶¸µÁÀ¸²¹½¿Ä¿Ã½µ›¤ ¡Ÿ ¦œ}eh^]jƒ`**HXR@JQSWPKRSaahcnx†y‹•™¤¤©¢¤¤Ÿ”†xdbcefgxy€Œ‘“‚{k~•Ž{lS=9@H[_hhceZ`fednt~†{Z5!  +   #  +       +           + +  /MO= +    67:51156312+/*#"")-/<=;76@EES__ZPKJOD5$ -9=DJLJG=682/)+--# #/4Gg„’’‹‚tdO@>AGMNU[ai‚•š“‹xgRDCF?<@?<1 +    6Zx…wL $/EMOJB.'782- %     + +     & !9I<81*373&"',305+0-.(,*#.4:@?A;-*-5/3:@9/+24516@@><41<>1'."-9:213978MWF>;6:CHJ?2-9GHD<>>=FJB<>>@EAFEEQfcg`]Z^fd[Z_VWTJS_YNHRKE<50*  <‹®·½ÆÆǽ³‡jc`n‹‹„†‚Œ‹¨¿ÝèèäÆ­Ëåèíîíìíò÷øòâȾÀ§…‡–°¼¹ÓäÚº¡¡³»ÃÐØÔÇÀ·©’†ˆˆ‰yz~¡¢˜ŸŽ…˜ž“˜™¡¹Â¿³©¤•Š‹…wt‰§²¼À½ÉÙÒÓÙÉÈÄÊÙÐØÜÞÓÂÃËÏÀ°¨x‚’•‹Žœœ›¥©»ºÆÁ¿ÉÒÝéôùøøøùùüüûøóðóõ÷ùùüüùùöðñðððóô÷øûüüüüùúüüüúöïðøþÿÿÿþþÿÿÿÿþþþþÿÿþùñøýþÿþþÿÿþþÿÿÿþþþÿÿþÿÿþþÿþÿÿÿÿþû÷üÿþÿÿÿþþÿÿÿÿÿþþÿÿþøïïõûüüýüüüüüþýûúùøøöóòõ÷øúüüüüúùùøø÷úúûúùù÷÷öôòîêéíóùúõáÛéâÚÓÊÀ¹®¼ÊâøüüüüüþþÿþþþýüþýüûûúòîèÚȽ¼¸©¥»Ìáòùú÷èÛØÙÙÈž|—— —Œ‰Ž‘…ukn†¨¸¥ˆžÉÜÛÄ®ÂǵºÝííçÔ«mHj‘¨•bEJq„XHu¨¾º•F  +!.'!"$,' +"[•†ŒŸ¯µ´³´¾Å¹´½¾½ÆÆÀƶ™‰– ”š˜›žŸs]\\`Wtp41DGC=FV\[STPVjdizo†…‡ˆŽ—œ§¥¤¨£œ ¡—ƒvk`ihfdm~†Š‘‰ˆxx{‰}]L@>=M]egkcVb`groi|‘“œaB&  +     + +   +  +     +    + +   + + +   + +    + + +   +  + +  +     + +?  +  +  + 695447321,6&+' "$)-3=?;5=HDGP_a[XPUa[E$(1@CEJID>7:86&+)%!#!d1B\{Š’“‰ynYF9;AKNV\`iu‹˜™|m[GFIG?AA=;#   + + )Tu‹…e6&C^gfh]O>*3IKF;,$       +   "?:7;<:91/$ +*590.6>ABRZI733@CBHB/'6FLH==JW[XVbeejmtzu‡‡‡ˆ‡˜Ÿ¦ª«¢§¢—›‘wtkk{n^eu‰ƒs}„’…xR?3C>3+#579;HGD53679;7;=<909>7060 &14:639;?GNZPE@7>JINB1,5CKH>:BAAA=;49?KMHENYZ_X__db^f^X^XYY[RMTXVHEI4)(#$    +;¬µÂÄÅżĶŽhlt•‘~ƒ~Œ‰£½×ààÙº´ÑçëêèæêóúûüûùðÛǽ®”‡‡™«·´ÆÕ·¡´¿ÊÒÔÚÙÏÅÀ¶­—„‡‡ˆ†‚|‡—¤›˜Š›¢š ž°ÃÈö¢œ‘‹‘‹€w‡¤µ½ÃÉÔÙÒÛâ×ÁÂÅÖÖÓÞÞÙÏÄÃÊǾ¯£‹{‰–›“—Ÿ¡¤®ÁÊÅÇÌÏÚî÷ùøøøùúúûùõòòö÷öúûüüöòððïîìïóôûüûûûúùûûûüùòð÷þÿÿÿþÿÿÿÿÿÿÿþÿÿÿþÿþÿÿÿþÿÿÿþÿÿÿÿÿÿýøøùûüýüþÿÿþÿþþÿþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþûóíòúüýýüüûýýþûúøõññññîïôúüüûúúùøùõõùùùùøø÷öùøñéèêðøóèØÜÝÕΞ¶ ¬ÇÝóüüûûýýþþÿÿþüüþýþûüüøòðçÓÁµ»»¦§ºÈáðùúöêÜØÚÉ©‘‘“˜ ™‘‹†Š‹‰|q€‘®ÁƯŒ›ÈØÔ½°®¥¶âìíèÙѸ€Up–¬¥nHV{ƒ_Es¤¾¹˜H  !&(!!-1 + Hr†œ¨²­®¸Â·³´¼½ÂÁÅÃü¹±§–˜“”‰Ž–ž™†`USWMWdf= )6:FMKKP\iepvtvwƒ„†‰ˆˆ– ¥¨¨¥¨¨ ‘Š„ooqpzsbi€Š}r|’‘‡qW?;=F]_djkgkfho|„•Ÿª°²¹½µ•d0 +&   &(&   +  +  # + +     + +   + + + +       +   + +  + +   + + +   + + +  + ;84:515523//0( !'06?@98<3&$3N[\L88ObcN3  ;PYZu—˜–ƒb9.EctrmdbV8$ :L\_VG6&      + + %9:A82'/88%#(30-(/3130,! '.047CF8+%,69=0 !5454896?HM[TD>3CGLS@3-;FJC==@;@F?93>AGHKPNWZ_^[^d`^`Y^ZSRSUMTXPXHF;2/&$    +:²ºÀÃÆƼÄÅ«Šox‰}…€Š“ˆ£¹ÏÙÙÔ¸²Òçéçäæîöûüüûùõé̼¨’‰Œ˜®¼µÊ·­´¸ËÏ×ÙÚÑ̹²«“Œˆˆ‰Ž„‚¡¥š‚ ¡˜±ÁÆĸ©™’ŠŽŽˆx…¢³¸ÃÍÓÚÎÖÛ×ÃÀÆÔÔÍØàÚ×ʽÄƽ·­—…˜¡“™¦žš§¾ÆÁÁÏÐØìöø÷øùúùúùôòóòöøùûüúøñîîîîëíðô÷üûûûùùüûûüûõðúþþþþÿÿÿÿÿÿÿþÿÿþÿþþÿÿþþÿþþÿþÿÿÿþþÿÿúñïóöø÷ûýþÿÿÿÿÿþÿÿÿÿÿþÿÿþÿþþþÿÿþþÿþÿÿþÿÿþûôïõúüüüýûüûþüüúöññïðîòô÷ûýûûùùùøöô÷úúùúùùøùúóëäéïòïàÏÕÓÍļ³£—©ÌèøúüûýûüþÿþþýûüþýýüýüûóïçÔ¿·¿¸£¤¸ÄÝïøúõëÞ×Õ¼‰•œ—”ŒŠ“ˆsw„¤¼Çε¦ÎÚ˼³¥¥ÐçëëããçÑ’Ur–­¨wMVv†\=m£»¹“P  + %! (8% Ekyžª±¬®»¿Ã·´µ·½ÂÃÁÀ»²¯¶¯© œ”‹˜œ•†eU[PPJY]=,9<@FOJ]eiqqv|y‚„ƒ‹Ž‹‰œ¢¥¥§£¡˜‡€zvoo~zq”{|…ŠŠ|jN??NV`fmebghr}yƒ‰›ª¶¸¿ÄÉËÃœl1 !  +  +:@*  + +%   2ALUT?!$3*DUJ7  + + +   + J-  + + + + + .%  +   +   +   <58631/662,-/*%&7?BC99>FOR[_b`[MKakU4 #+PVOSY_cr†“’„pZFGLKHFEF>;I^ksmg]dszueH37?Yiqh]nˆ””—ŽuE(B_rpoedXB+&7IYYTB9%        %BHC=2*7@0"!&*.,(-2.-()'##*43A<@;,)&5:8FL@135179:@<>@835438/ &663389<3HIHIB=1;ID>AA<@CG@82=FCISXW\[_\U`VabdZYRXNUURNMVMGC94-,( +   + + + + <“­½ÁÈÇÆ¿ÈÍÀ¢”“„‰zŽ†¥¼ÏÙÙ׸°ÖééâÞæñùûûúúùöðÜöŒ‡‡ž´°¼¹³¶³ÈÏ×ÜÙÔÏÅÀ¶­ ’„‡Œzx€œ¨š“‡…›¤›¢´¿Å½·©–ŽŠ‹Œ„Ÿ°¶½ÈÔÙÍÇÆÍÄÀÁËÎÑÔÞÜÚ̶½ÆÅ»²¢†ƒŽŸ›•”¢žœ£¸È¿ÅÑÒÛëøú÷øùûù÷õóðñô÷øúûýû÷ñîîììëëíõûüüüû÷ùûüüûöòøþþþþþÿÿþþÿÿÿÿÿÿÿþÿþþÿþþÿÿþÿþÿÿþÿÿþþüõó÷ûûüýþþÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿþþÿþÿÿþÿÿÿþûóï÷úüüüúúüüýüýöñðïíîðó÷ûýûúùùùøöó÷ùúùøøùøøúôìææëñçØÌÑËŽ·¯¥ ²Ôìúüüýýýûýþýýýûûýýüüüüúôðçͽ¶Ã¶ ¡¹ÉÜí÷úùëÜÕ˱‘Š“£——Ž‰†“‰zn€•°ÅÐ׿£»×Ôdz ®àìíåãðñá \jª¤tKK{‡X?q¤µµ“J  +  !! 1'7=  +!>d‡¦°¬µ¼¾¹¶´´¸½À¿¿¾º±­«¯¥œ›‹•›Ÿ›~^T\NGOM[> $9BDONVbnsryv}‚†ŒˆŠŒ“Ÿ¡§¡šœ”Ž…„uqhp†……„‚u‚ŠŠ‡s^K;B4 +!.3B>'<8@B9#(-1)9J`stnI,!$6BS]ID^s…‹`5   + + + + +   !#"%.*(.DLPG*!++  + +     + +  +  :78702366100.) ")!29AD@<=DJR\e^_VUN^i_@)$&1>IIIE>75986/)1..--..@`{“•–“Ž…ucRDAAJRR[ceh~’–‘‡tbMLHHLGGJJObowuvqlq}†‰ybY_r…pihz•›•}Z.#<[knqidcJ1#5IXYOJD/    +   !9@C<2.3<+#+.,0&+.)-*"!$/66@>?;/-.5;>.'& +   " +  =‰¬¹ÁÄÅÇ¿ÌÑο–‰˜–zy‚ŽŒˆœ»ÐÞàÛ¼³ÚíéÝÜì÷ùûûùø÷ö÷ïÊÀ¯”}¤²°·µ··ÁÑÕÚØÔÎȺµ¥˜ˆ…‡ˆ€‚|“£œ˜—ˆŒ¡¡¤¶¿Á´¤˜‰ŠŠŒ‰¯·¼ÄÓÖÌ·«ÃÆ¿ÁÃÆÎÐÙàÜÕÀ¼ÆÈ´§€“ Ÿ–š™£°À»ÃÒÑÛîùøøùùùøøôóñôóôöûûüùøöðìëìêéïöûüüüúùúüüû÷õ÷ýÿÿÿÿÿÿþýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûùýÿýÿÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿþýþþÿÿÿÿþûñîõûýüüûúûýýü÷õïëëîîóùüýüûûûùøøööúúøùùùøùù÷ðèæêéßÏÊÍÄÁº®©¤§¿Þóüýüýüüûýþýýüúú÷øûùùüúóíäÒ¿¹À¶¡ ³ÅÝëöúöèÛÒ»šˆŽ“¢š’œ‘’‹‹‚wzŽ¥¼ÉÖÜË¿ÎÛÔÕϸ¨Éëìçâëõòå¯[o–­¤sVFvˆ`Ct©·µ—K  +  +,";5 +@|¡¨¬¯½¿·ª«®±·»¿¿½ºµ¬¬§¨¡•—‹Œ‰’—™Ÿ–{_WXDORLL8  2FC=I[fcx‚{‚‰Š…†Œ‘Œ‹•š¢ž—˜˜“‡‚|ppmmƒ‰x~œŠ…idW4JOWlklkjt‰’—™¢§¶ÂÍ×ÛÝßåÞÖµw7  + + +3=B5 #>NTVU832EXfP905EF@?HLaxys`KEEPbhmg`qŠ–ž˜xL       .>LI7("*(13..;IMLK8:IShumfG7L^]W;   +     +  %:>65552843112(!*)16>><<=GLRS\^\XWTbkgD/%!!1>IJLHB938@90551/&*)/C\qˆ‘””Ž{jVH>BHRSQWdivŠ”“eWGKIIGECAKcowxwvonˆ‹~ogq‚ŒŠ…|pcm„‘—“‡jC! :XmqqljbP7*6RSSQGB4#      "4>?:/248,!-/0-/.('-+) %(6283./*8=MNF7)/7876:=AA833082& *5<<6ACJEWVN>@@5 $/CQ[gWC6=@VZXTEH_jYMFMYkqrodPKM^rymcqŒš›š†_* +    +  +  #>Pa`PF??@IB<;NX^k]KW`grw}whdqz{v_0 +  +  +  + +   +  D<747;:@A462)' #-8;A=8<9:Plvxtspsx„‚wk_gw†‡‚pdV]wŽ•œ“]7-MejmlhcZC,1HQPQGA9# + + +     + 9E=844;3,/'11.00//2-( )37:@@2.+,74CB;7;7333) %15;>BCCEIPSPH=4>HJRI99>@FCA9;DABD98:HPN[YRY\YPMPTYcdWRWVTNPKINKOM>B5/)'"  * + 6‹¯ºÁÆƸÆ×××ÊÀ±–‚†{‡”žÀÙáåÞ¸ÛêèíöúúúùóòòñîîòóÞÁ¿¼¡„st—¶°°­­¹¶ÂÔØÔÒÌÊÅÀ¹¯–Šˆ‹—~}‰¤£œ„|–©¶½ÂĹ£•Žˆ‡ŒŠ‹„œ¯·ÆÌÍÌ¿›‚—¾¿ÄÉÉÍÕÕÓÜÙÙ¿¼Ä»´©•‡”™’ƒ„”™¡©ÉÒÐÙî÷øøùøö÷òððñòöøúûú÷ôòîììêéëòøüýüùùüûüü÷ó÷ýÿÿþÿþÿýúññüÿÿþÿÿÿþþÿÿÿÿÿÿÿÿþÿþþþÿÿþþþþýüþÿÿÿÿÿþÿÿþþÿþþþÿÿÿÿþÿÿÿÿþþÿÿÿÿÿ÷êîùÿÿÿÿÿÿÿýøñùýüýýüúüüüùöïíììññòøûüûûøúùùøõùùùøø÷ùúùóìææÜÎÇÉŽº°£¥µÐõýýýýýûùùüýýûüúõæäìóúúøòìÞÇ»¼½´¡Ÿ³ÄÙéóùóèÏ­–Œ¡¥—‡Ž‹‡€}¯¿ÎÚããååâÚáéçÛáëìáÞòúú÷ì²gu–¯«vKGs†]Bnª¼·—V + +  !07 @† ©¶¸®©±±·½ÀÁÂÀÁ½º³ª žžŸ›—‡…ŽœŸŸ›¢‰nb[RGG=DL, +23;K]hnwwyˆŽŽ‘‘“‹Ž’‘‘Œˆ‡~zuwxlhro‚•–ysnX8+3H^u€xˆ¥°¸ÂÇÌÒÖØ×Ö×Üåéêêêèæܽ„;     #5:96#+->\af`I3/3AXfYXIZohTHHMZdste\Nƒ^ovvit•“•Œr57 +   + +  +  + + +  ?TZbl[RKOVPBAFUflo[J^moyxxoz{ˆ…{O'   +  + +  +     ??:6024-468.($ $,5;@?>:AOLKHLW[YPQipS.'".CEJF?>@;<8+%.3.)" &>Nat‰‘•’“ƒphUFAEEILN]ejy†””u_MD:@>:9>;Fcospqsrw}„pdZ_n~sd^TL\oŒ™›˜‰iA))B^gklmm_I0+7+*247@==<8665/2 .228£°°ª©­¶¸½ÁÅÉÀ»À¸µ¯ž™¦¢¡–€†— œšœ£‹ma_\IEHI?'   +);OXgmoz‡ŠŠ‘‘‹‘”ŒŽŽ†‰†rt|ript‚„xrst[:0E^q{†™¸ÉÒÕÙÜáâääâÚÚáçêêëêèæÞ»†<$  + 2DA<-95:TaiaT:23AWaYRGUjj^IAFTeqvjd_efhgukj„ˆ†Ž|H      +  + +  0Lblog_]UTTT?GSkqvfWagoxy{wsyƒˆ‡ƒg6 +  + + + +      +$>A652053/2./-'!! '1;=??=FQPKFHTZREG_lV1$"-;@A@@>=;=8/0)..($#)8IYgzŒ”‘‚wi[H@>?DHGWdgrˆ’}bJD<8;=?<=FSbmvtqoosrqdXYccZW[`fhmˆ˜›™‘}L'"=^alnuneJ4$2LXURE6-     +    #4@3%0276'$-2345+/2((''#/016:B7+&)'?HOQC8/3@814C<<7.206,.. + .3::A>DBGYWGBA=CLIRN:5CME=9>57CGC66=ERaa]X_bbXY\[\feXUKMPQGHGQKFB@4/)*"  ( + + +<±½ÅÆÈű¯°ÃÐÕÐÀž‡„{Œ‰¡½ÕÜÝؽ¹ÜìòùûüûûõîêäßáéïööíÑÁµ•cd‡ ³³¦ª¡°´ÂÕÕÕÏÎÉƶ¨™‹‹‹ˆ…‘¦¡™ˆ~—´½Ë͹¦–Š‹‹Ž‘Šž³ºÄÊÌĺ’rƒ­¹ÂÃÅÐÝàØ×ÛÙÏ»½ÇÈÁ±¥‡’Žƒ€ƒ’™Ÿ¨¿ÖÖÑØïùùøøøôðññññóøùúù÷òîíîíëî÷úúüûúúùûûüúøôúþÿÿÿþÿÿÿÿþÿýûýÿþÿÿÿþÿÿþÿþÿÿþÿþþþÿÿÿþÿþþþþýþþÿþÿÿÿÿþþÿÿþÿÿþÿþÿÿþþÿÿÿþÿÿþÿþþÿÿÿÿÿÿÿÿÿþÿÿúòøûýýüûúüüûüøõñðïïðôùûûûúùùøøõöøùúùøùùùöíèÛÏÁÂÄÀÁÀ²¬¦±ÉåýþýýþýûùùüýüùùúóæØçïóôòðëÚÅ»½¼¯™–®ÃÜéîòïᙡ§¨¥“‹‰Ž“‡|†—¨¾Î×áæèèãßåççâÓÝæÙÛîùùù÷ë¸fs“§¦{PLtŠm>e¤¶µ˜T + +  + + + 6>$  +9‹®«¨ªª³¸¾ÆÆÇÇÃÿ»´¢––™™™–‰Œœš–—žŸŠc^^XJ?DH@*  +.J]co|r|Š‰Ž“‘Ž—˜‘ˆ‰„Š„qz~ƒgddmt€„‚toy…€fB:Ed}‘§ÅÖáåæåæçêëêéâàáäéêëêéåÝ¿‚=   +  4>?C&!/79JYcbW>23;O_^ZFXlo`IKGWhrxug]WZjiohhhŽŠ‹‚a&  +  + + + + + + + 2Ghlvpg_XfV[H?Vfqwrd\exx‡}‚sz„‰‰†yX.! +  + +     + +$-   <:2222551201/0'! "#/9?@A;CMOIDKS[TCFZoV8%)9>BF@@><333-(&)*%%$6CM_p…‹‹ŠŠ{l_K;6>CHKQ^ci}ŠŽ|gYDA>?<:77CFUilmnnojmok\X^[^hr|{ph{œš–‹c57Yhnosn`R5)0HYYLG;) + 1  + +    + + ,62*-*021#!-,C31.,-% %%#'.118A;2(&"(>GQWC3/6<4258@?,,-0330) +"/3<=8=:=K[]J>=>IFKUK21APIC:A<<@HD97>EJZbUM``\]`^Y_igTPLXQIIKHLHHGA8.,#"    + 9‘²½ÄÈȯ©•§ÇÑÕÉ©Œ‹ˆ†µÊÎÏdz¹Üíõùüüüûùöóóîìïôúùöæ¼®£wuŸ©¦²¯µ¢¥¸¾ÍÒÑÏÑÐÉÅ»° “‚‡ƒ†zƒš¥£œŽwŒ±¿ÇÈ»¡’Œ‰Š’ž±¹ÂÃÈÅ­ˆh{§»¿½»ÍÚßÙÔÛÚÔÄ¿ÅÊƱ¨„ˆˆ‡…–›˜žÀÚÙÏØïøùùù÷õñòðñóõøúúøòðððñïððõùüüûúùùûüúùòõþÿÿÿÿþþÿÿÿÿþÿþÿÿÿÿÿÿÿþÿÿÿþÿþÿÿÿÿþþÿþÿÿÿþüüüþþÿÿÿÿÿÿþÿÿÿÿÿÿþþþþÿýþÿÿÿÿÿÿþÿþþÿÿþÿÿþÿÿþþÿÿýõòùýýûüúúüþûøõññòðîðöùûûûûøøøôóöøøùùøûûõðçÝÊÂÉÆÅ¿»²¨¨¸ÌïÿþýþÿýûûûýüûøùúòæØæïôùôïéÖÄ¿¸»¬™–¬¿Óäîñìײ—•¥®µŸŒ‰‘€~Š¡¸ÉÓÞáçéçÛßæåÜË¿ÔÛÑãóùøúõé³bg§ª‡PGx‰j9f£¶µ™O  + +  #96$ +<‹¤¦©­µ¾¿ÄÄÆÈÇÁ»·°¢Ÿš“’”šžž™~mcZPN>=CB"  =Yclo€ƒ‰Ž——–“‘“”””Žˆ†‡‚†‡‡|†~~vdhqnv€tok{Œ‘qQJ[U†¹ÑÝæêëìîëêìîîëçãßãèêéèèâÙ¿z4 +   +%49D<1*5<7/IX\^YD58;=UWXMRaegUKIK^srwf^\[`hodhh~ŽŽr2    +     .E\errf^be_]XKLbxxh_mx|{€{zlu‚‰‹vJ0" +    + +   ?67163425+/)''"%/:=@>:=LQL>?IOOHAWqj>)# %:?DKCDB40-0*)'.-%&%7;CLb|‹ŽŠ}rfVC9:@FGO[a^k‚ŽŒ„tgODD?B?:6=?J^hhssmkmvqd^W\n}„„‡zhyˆ—ŸšŒlA +VjlmrjeU='2CUTNL=(  +  + + +  +   +   ,42-#0,)#&*.)(*&%'$"#04?>>>9-%*.9FTV=-.36272:>;0*&1360' + 25/66>9AAZaZB>7GMLJ@20?FAFA=DGG/'3HR]K>=PS]WG4(.=IHRMR`cfgOEN_oszqh\\afplifvˆŒ? + + +    + +  + + #'     + +  ?:9;564/.-.*%"")059=<=2*-*!&.)$"$+39:UuŒ’‘Ž…uk_F;8:@>MW^]cxŠ|dTEDBB?<:??DVflsssnqxrk`Ycv…ŒŠ…}ru‚››ŽvP)$IcrsqjdV@(.@IOORA- +    + + +    &0-$"!*,"#!-#(10/,&! !#.,6==99-(206LSN=./04196;8<2%,50,*' *:337>AFN]c^_dZYXW[\ae]VOJEEA@<@?==;?7//)& 0 4³¿ÅÊÍź¼ž‰Ž²ÉÓ˳”~„Šˆš««¬¬±«²Úòùúüüüüüûúýýýüüüüûí¿Ž„‡•Á˲¦¡«·ª¥·¼ËÑÎÏÍÊÊǹ©¡šˆ‡†~w{Ÿ§œ—Žy–¹Á¿®™ŽŽŒŠŽŒŒ–£²·ÁÍÍ¿­ˆckº··²ÀÄÔÙÕÓÜÙË»ÄÉǽ¬˜‡ƒ’…‹Ž•¡¾ÞÚÔÙïùùùùúóóòóóôöøùøðîëìëëîîñöûüúúùüúüúøô÷þþþÿÿÿÿÿþÿÿÿÿþþþÿÿÿþþþþþýÿþýÿþÿÿþÿÿþþýüýøôôøýþþþþÿÿÿÿÿÿÿÿÿÿÿþÿÿÿýýýÿþÿÿþþþÿÿÿÿÿÿÿÿþÿþÿÿÿÿý÷ñ÷úüüûùûüüû÷óóðïòñó÷ùüûûøøøøøöøùùùúúûùøñáËÆÌļ³±¢¤«ÁßöÿþþÿþýýüûùøùöøøïÜÎàëñóóïèÖǽÀõšš¯ÁÊÝèèÞ»—–£®»®—‹ˆ‘’Œ~†Œ¥¿ÊÙÞâçêæÞáçäÕ¹­¤©©ÖïñõõôïÞ ]hŒ £„WMt‡h=h¦³®™R +    '6<(  .`¦ª¬¬¤¤«±´¹½Â¼´¨—––œ›™‘–¨¦œž‘m^]VLHLQG. Pv{u|…Š•›–ž›šš“‘“‚€|}z„y|‰ƒxacinpy†ŠŠ„‘Ÿ›œ›…dT_}¹âììîððòððïïïðìêåÞáåæéãàÛÓºŒL$   3GHI<,7Rb`TF:D\lfZ8#;8<;>=BQMHCCHLH?C]hM0#*:=BB?7=50-)%$%&!$ "%/KpŠˆyn`L>51AA?><7)%),6H[O<2113158@C<4-262//) *<;;;EGEIU[WE45ADHPE5-AJ@C@=9?HG@87AJSZd\a_^[[\XV_baWLJCMIB==8@AC<94,* . + 6ŒºÄÈÊÌÇÀĶ—ˆ’·ËÍÀšƒŽŽ‡›«¨«®µ­¹áôúûüüüûüüûûûûûüüüú쾓ŠŒœÆÜÑÊ«’¤°¦­´ÀÎÏÑÍÍÎÇÁ²§¥Œ†Ž’‡‚ŠŒ¡¥ž—…­Ã¼ªž’Š”ŒŒ”¡¯¸ÃÈù©€`dŸ³¹·³»ÀÆÖÚÎÖÞÑÂÄÈÉ¿²¡ˆ€““Œ†…†”›¶ÚÛÐÙðùúüüúôññðñóöøùóíëììêéììóùûúøùùúüüúôóüÿþþþÿþþÿþÿÿþþÿþþÿþüûüþýýþþýþýýþýýýýýýýüýúöôøûüýýýþÿþýýýýþþÿþÿÿþýüüýÿþÿÿþþÿÿþÿÿþÿÿÿþÿþÿÿÿþþüóóøúüýúûüüüùõóòïïððòöúùúùùøùöôøùùøùúùùùòåÑÊÈĸ²« ²ÍåøþýþþÿþýüøúýúøùôìÜÏÞìïóôíèÙÈ¿½°š¢±»ÁÕáÜË¢—ž«³¶ Ž‘—‰…t|–»ËÑÛáæçèäÞåéÝÈ®ª›—ÙðóôôòîÚŸ[fŽ£¨zNFr‚gFn¦µ´˜O !*9<*2]—§°¬§œœ¬ª¯¶¹Âľ²«£——š¡œœ—“™¬®£™’{`e[ZQKZYV5  + Vt‡ˆ‹‘•›œ›—œ›‘’ˆƒzz}u~Œ”Œ‚qacr|vow}– ¤ Že\u•ÃçìïîðñòñïîîîîëçàÝáââßàÝÞ×ÚJ)    + +DJF6.!A]^PE<>VaeYL01.CZa^OYcif`WLSa{ˆƒmZbcdjqohs„™“”b' +   +   +    +  #Dbksqwjkcef]SPcq€}zhbmx‚{„wq„—–‹ˆd9-&  +  + +   ,768:@:?84(#$$"$).;?FDA=DI@>@BFFC?TgN3!-5;?>@97520'%##$)""&4Jc‚Ž‹‰ˆul^N@955=FMSafq‡“’„s`K=BB@><>6=BUgorrstx}ynaWgx€Šˆ†tjm„‹„mB";Qcfhhf\L-(6@G:2*  + + +  !!"%$*+(*,(#+-*+&'%&*;38;9/*+/@IRO9266369==A;4059541) +%6@34<<;9;DGJ<89@P^g`\Z[]\^ZTa^^^QRJJME===BCD?6/'+$  )  >ºÇÆÊËǿƾ°‘…˜¶Ä¿ }ŽŒ¡¬²ÆÍÑÂÁãöúüüüüüýüúûúûüýüüù뾜”•¢Îáß㉒¬¸©µ¸ÄÍÎÐÌËÊƺ´­žŠƒˆˆ‚€y€“©¥›”‡¨ÁÀ¨”ŽŽŒŽ‘Ÿ¯·Àü¸§{`p˜°¸·°¯ºÅÕÚÏÐÜÔþÁÉÁ¬ž…‰”Š‘˜£µÖÙÓÜðùüüüøõóïðïò÷ø÷ðëèëêèêëðöûûúúùùûüûõïúÿÿÿÿþÿÿþþþÿÿÿÿÿÿÿþýüøùüþýýýüüüüüýýýýýýþþþþüûùýýþüýýþÿÿÿÿÿÿÿÿþÿÿÿýûüýýÿþÿÿþÿÿÿÿÿþÿÿÿÿÿÿÿÿÿþþýöðôúüüüüûýûûùõòïíïïìòùüýüûøùùöøùùøùûûúúòâÐÇÉŽ»§¡¬ºÓêúýýþÿþþýýûüýüù÷ôêÚÌÜìíòñíèÕËÅ¿¿®ž¯ºÆÕÞÒ²”™¤±¹®—‹Œ’†}ƒ‡¢ÅÔÚÛãæèèàáéäÒ¶¥¥ž‰”Úñö÷÷òîÜž^f’¤§{PGk`@e ¯°—R  $&3?& +%jš«±§ŸŸ¦°µ·¸·½¿½¯¤§©¥¨£œ£›“Ž ¯¬  šƒng`_JOYbjE(  + $S{”’Œ‘‘•™’˜š•—•Œ‰zt„xu‘ˆ†…„ojnysrps˜œ ¨¦Šie„ ÌéíïððôòñðíêêçãáÛÛÙÛÝàãååÝÆF)   9AKD-,#=::CD>5:?>:55DVH0(/52;49:2/0% #'# $'4EPk||zvsi_UG=;89>EGS^gsƒ‡ƒziVFEA>;6;886ASbjjkonoqlbY_oz{~rkao€„‰€iU2 1EW``aaUH5)/:<6-# +  + + + + +   +#""37%+))&+&('**'#-029:?@=7...=K[M:/0776:7;?:677;92.% *=C?68CHGMOYQC>@CIIOD)0@JDB8=67GMC=:?ENaea_`c^[[Z`aYXZKKJNKHH>7S_ibUB/*7CP]`[_fokSHM[syhbbdgsxldo€Š‘‹yM!      + +.Gesupmiffd[XTj‰’€nlxƒƒˆ‰}˜šœ•†YB7+    + <<6::<664((&!"1'24107=?7///2.*&*2=, !",(+,00,.*""#!!*5Ofuutqje]MC;7838?N]bivŠ‘‰zdMA>:?=:3450@R`glnmmjfaRL]mtvurrh`m€‹†nK-&IGKRVMA<>JJNO?-2>LFC=34<@I@468b¡¬£’N +  %(00/  (f£¬¢œ ´·½¿ÁÀÀÀ¾´µ¯«©°££Ÿ–˜–ž¯³ªž‘|ha`RNW]„`,  +'cŒ—•‘–’™—ŽŽˆx~trm}}ƒš£“‡|kqu~‚…†œ”ŠŒ”Ž‚jn ±ËæìïïïïíìéääÝØÙÕ×ÚßèéêèèçáË–I'  "2@AB3#&FVh\E@DZmdbU=)-9DY[VTekk_R@Ody|rfacejoujl|Š‘‚_)  +    + *9Shnmhfiekkec_f’‹xiq|ƒƒŠk|‘œš•rQ88.  +  +  9<798;87/'&#"!&./-3457@D=0*,())% -6, %&'+23-%$$!#-Egu„}}sgbZG:4888@LV[`x•“Œq\D<;97:97727Kcprpkkge]QFVfs|uvsjeoƒŠŽŠsZ3#5N[_aa]O=.+:DC>/ +  +      (*(+)!"  ,*+0-.)0*',''(*258E=3-,'*7ESQD7779913?>9/15568/( 7BG9.8AC@DLVNA:=LJHHB23BGB<>=;>75'!($   .qE <Œ³ÄÒÒÓÉÀ±Œ”°´§tSr†„’˜­ÓðôöóàØïøûüüüýûüýüýþýýüúùóಘ–¾ÆÔâÒ¦Žž³©¢º·ÀÌËËÇÈÇÀÀ¿¬‚Œ”‡{ƒ›©—ˆ…¡¢”Ž“’”¥±¼È¾±žvsŒª¸¿ÃÅÈÀÆàåÝÏÔÓÍÁÅÍÆ´¦•…’Ÿ˜’“—Ÿ§³ÃÇ×îøùù÷ñïïððñöøöïæãâæèèéëóúùø÷øúúûùðôþþÿÿÿÿÿÿÿÿÿÿÿÿþÿÿþýþþýýþþýýýþýýýþÿþþÿÿÿÿþþýûôìîöüýþüüþÿÿþþÿÿÿÿþÿþÿÿÿÿþþþþýþþÿþþþÿþÿÿÿÿÿþÿÿÿÿÿþÿýôòùûûûûùúüùòïíêéêéìñøûúùøùøùù÷øùúûûùïÞ×åÝÓÆ»µ¥®½Ùíùýÿÿÿÿÿÿþýû÷úüùôòç×ÎÙäëðõñëÝÏÇÇÁ®›£²¾Ê»Ÿ‘˜ª»¹©£˜”—“}x‰§ÂÖâéæçèçàÜãæϵž–§‘ÓîóôôñîÜ¢V]„¢¤„YKib@\›® ŠN  + + !#!->*  #f™¦œ–¢·¾¹µºÁ»¹¹´±´¯¬¨ ›œ™’œ¨«¦›“xnd^UKUe„—f)   +q˜¡™‘Ž’˜“‘—ŒŒŒ‰ˆztvy‚p€‡”¡¥Ÿ„vo„ˆŽ•¢~†ˆ„kx ²ÈæëìëéêéèæççéæáÝÜÝâéèéèèçàÍ™F0    .69;*$&)3TecS>MVNL^epl\TR`y{xwkX__lv{vlt‚ŽŠ‹n;    "*8GPanomrmnfkXSb{Œ•‘~mpz„Œ…|lv”š˜‘€^?@9" + + +   >58;7952*"!#$!#(/-+4537DK@4,/-+0*)8=6!#&)-,+))'&'@_v„{qjcN=1/38>NNX[i†•›}hM;8;9:;:5/1D\knnljeibTHNbq}|xnkmrxŽ‹ˆgA"(G^fde^WA/+2BC<3& +      + + +   "--$!%)&#)8)/-($--),))%0/96;=33203=GNND:6<85.3>>@,1::?9,%-EJ>5=H??AMMG>:6BDKLB5=CKC<=BEACF?40?DJch_a`f^\cYX\]YKJRS`XWG?G==?8.+'),    + :†³ÆÓÔÎÊÄ®Ž’«®ˆ_cu~Ž˜š´ÙïóõðÙÕòùûýûýüüýýýýýýüýû÷îЪ—•ž³¸ÇáÒ±ž £«¸¢ª¸ºÈÉÅÈÈÆÅÇô©Ÿ…ˆ“…„€ ¢ž•‹ ›’’‰‰¬¼Ã½ª›~sv„¥·Á½µ¸¹ÀÛàÝÓÎÕÎÅÅÍɼª’…Œ›œ”“ž¡«³½ÆÚí÷ú÷òïðîíîðöøöïçâããäææëõúùøùùùùúõîøþþþþÿÿÿÿÿþÿÿÿÿþÿþþüýüýýüýýûùú÷úûúûüþýþýýüüúôçÛÝêùüüûûûýüûüüýüýüýýýþþþýþüüýýýþÿþÿÿÿÿÿÿÿÿþÿÿÿÿÿþÿýøïòúüüüüùùú÷ñîééééëò÷ûûûùøøøøøøúùúüùîÜÜäÛ϶±¨µÀáòüþÿÿþÿÿÿþýúøüýù÷ïåÖÉÖäéïóòìàÎÄž±š’Ÿ®¾Â¦‘™§µ½µ ™ š‘ˆ‚”¸ÎÝèêéêèâÞäèÛ¾£‹¡µ±”ŽÍéñòòñìØšO^‹£ UDei?ZŸ±¨V +  #!)/8# ]š˜ž©¶³©®º½Á¿¼´´·µ¶¹µ«žš–˜”ž¦¨Ÿ‘tleXKMWbŠœk, ,o ¤ž“‘•—’””‰†ƒ‚~ov{vrlxž¡£žŠ„„‰‹–™œŸ‹|Œ’ƒyetž±ÄÝæèååçêëêîïîìéãßßÞæçéêèäÝË–G)  &9A:*%!,H\`\=>LjnpiI3$6=LTLUS`xs^XP^rywwm`c_knrkcl€‹•Q&     '08Sbkljersig]PVk„”Š…ymw‚tro{Ž—•‹jRG>/   +    ;2C83./1%$#$&% %)+-66+5?@@61243.'(9G8$! &'**(+&-!"(=Wozyyyunh\C5,.09?JPXh~“˜’ŠtYA:C=+      +     + + %/&%%"%#.'/&.2++2.#&/,28<@3.*%.CMKQC8::5115=@74/68?1' +4NM>5=B@BBMPGE8????@?60-7=Qjrb_c_`ZWNZ\[`UNZZ\YPH@?@C;,&+,-/   3‹±ÅÒÓÎÉî„jrˆ¥Ÿvdq‚‘‘–·Þôö÷ôÜÑìøúüüüüüüýþýýýýüûúòÒ©˜™  ­©¿àÓ®§»Â«µ¯™±¶»ÆÂÀÈÉÊÍɶ¯£„Œ˜„z—¤ž—„š›“‘’£»¿¸§‘xno}¦¶Á¾»±±À×ÝÛÑÆÎÐÊ¿ÈÏÀ·¢‡† œ˜›—œ¤´¹ÈÛî÷øõñðððîðõ÷÷øðéääãâáæïöùùøùøúúùñðûýýþþýþüþÿþÿþþÿþþþþþüüüûúùùöðïñòøøø÷ùüüýüýüúðã×Úíûüýüûüýýüüûûûûûüýüýýüüüûûûýýþÿÿÿÿþÿÿÿþþþþüýýþÿÿýüôòùüûûüùüúùôîéììëíñ÷ùûüûø÷öø÷øúùûúøêÜÝÝ×ÎÀµ¬®¹ÊåõüþþÿþþýýþýùùýüúöîãÒÊØãèîóõïÜËÆÁ¿³œ“Ÿ¸Á¹šœ¨·½¬Ÿœš£ †‰”«Ç×ãëêêéçààèçϬ”‹”ÀÓÆ£–ÌêññðïêÙWiˆž¡S?c†pG\™°¦ŒP + %&36(L‹™ŽŸ°ª¢¤¯»ÀÁÀ¿¹¯¸·¶¸»µ§žŸ˜™ ¨­ŸšŠre`^HOSfv= :}œž—•“‘’’†‚†yw€ƒzkfm~˜œž›…„‹†¡¦ªŸu‹–ƒrdx˜®½ÖàãæçêìðòñòñîêèÞÜÞâèæèæäÛÅ›P)    0CCA3!!*8S^]ABHdroeT:227>Y\\Sav€fTPPawwprh]Yddheagp‹“˜d7    &2T^^ed`poi]_ROeyˆ…vhpuqormlq‚—“Ž|_JA8  +  +  @5:>43/((*)*,&!"/),39--7BC<45264/.;LE'"%'%*''&(-$"" "%*6Jdsusrupk_L>*&+1762680/3:9:7*0:30* ?KLA;@@>?CKKCA;5;BIPJ;?IIB?=AUengbWX^\ZW^`a]TJMMWWWKLEH@4/*,-0(%   8¶ÉÓÕÔÍÁ¬xheeˆ™~q~š®ØñóõñÛÏèöùøúýüûüýýþþýýýüü÷Ú«˜›¢ ¬­»ßÕ¨§Ñ㻟±§¢¯¶»¾½ÄÇÉÐÍ¿»¨—‡™•~’ žž’…”—‘Ž‘Œ‰’—ª¸½µ§•vjo¢²½Ä½µ±¾ÑÙÔÆÄÎÒÐÅËËø«ˆ”›™—‘”¥¯ºÆ×ìôöóñððîïñõ÷÷õðëèéåäæëñ÷úùøùøüúõêôþÿÿþýúôôúÿÿÿÿþþÿþÿþþþúùùøøõòòôóõùø÷÷üýýþþþýû÷òéíùýýþþýýþþþþþýþýûüýþýýûüûûûüýýÿÿÿÿÿÿÿÿþÿþþúòôúÿÿÿþý÷òøüüüüûûýûöòððîïëòöùúüû÷øøø÷øùùûüôèÜáÜÐȾ¯§®ÁÓêøùýÿÿÿþýýýüùúüüùóìÜÍËÔâèñ÷õïßÍÇÅ阕£¶Ã¬””˜ª¸µª¥™ž¢‰~‰§ÂÕßçîïìêäàåèá¾›“”§ÒÛȤ—ÍëïóòñëÕšUY‚Ÿ£ˆ]>\€kAWª ‰S  "&:+IzŠ¢­œŸ±µ½ÃÄÀ¿¶¯´·½À¾¶«¡Ÿ”˜¦©© œŒlhhaQPWn™¤~7 + >}Ÿ¡¡›–‘’•”‘ƒƒ~zt€‚|opio“¥œ‹‹•’š›­³¬™vš¡”wjsš§³ÍßèëíïññóðïðïëçáÛÚàåæåâàÛʬX)  +  + +"29?<3!#&/QddXHCOfmh[L974@YeZUaoukWLGathtol[Z]glkegsŠ˜•~D   .B[ilmigkln`_Qcp…ŽŒ‚ffipqswshy‹’“†o[J=( +  +    :7:4442.//13*#%-*,/63,5DI>22;:32.>TQ8"(,*11+,))%"!#("!)+6J^rw}}sp^YP>-!,.0:HR[m‰—‘Ž†kV@;264792*$;YmnoqljkbXSWbu~{ysjbiy„‹Œ‹sH$$:N__]^\L7)/770(   + +   +  + !- #&)%'(((#($&'(*%)338=;:3+'(:I\S?-/5336:52>304988+" + =MNB;7=B?@KME=<6?AJRI:;MPACH;<:ADA1/7GQhkb]YYZTV\[[f`UTVQUNMNJFED80*(-*($   + :Ž¸ÆÕÕÒÏ­ud[Sbˆ~qŒ¨ÊßææÞÊÍêôôòùûüýýýýþþýýýýü÷ܯ—™¡œ«µ¼ÞÕ¯°ÕçÅŒ¤·§¦¹²·¼ÅÇÉÑÖËóŸ–”˜‰„—¤¢—Ž‰“–ŠŽŽŽŒ‹‰‘§·½·ª“xs‡Ÿ¬¶ÅŸÂÓÕοÄÏÖÓÏÉÌʽ¬œ‰‘žž–—“ž®¸ÅØîõøöñðïðïô÷÷øõïéèçåçìñ÷úøùøùúûùôêøÿÿÿþþûïéóýýþÿÿÿÿÿÿýýüùøùøóðöûûøø÷÷ùüýþþýþþýüúùóõýþþþÿÿþþÿÿÿþÿÿþüýýýýþþþüüüüüüýýþþÿÿÿÿÿþþûôìïüÿÿÿÿþùñöûûúüûûûúøöòðñðïñöùûüüøù÷øøùùùúùðáÜàÚÐź¬¬¸ÃÕëôùþÿÿþþþýýýûúüú÷òé×ÒÈÑßêñôõðáÎÆÇò›‘¦¾¹›’•ž²µ©¢ žž™‹ƒšºÓÞæêîîîéáåêç×®””š»ÚÜÉ£–ÐìòòññëÕžWX‚›¡[Ld†pFX˜« V!    -=,  +IxŒ”ž¥­»¿½·»¾Â¹«±¸½ÃÀ¹­§œ”–œ©¢œžŠjjg_QGRqž¥|6  9ƒ¤Ÿ•’““‘‡…zwˆz{€Š}o†‘‘–˜£ŸŒ‹”›¤®¹·®‡‚œ¥—‰vgŽ ®ÐçëîïòñðññððïìêßÚØÜßâááâàÕ·b, + + + + +/EMB=( +Lfa`LACclmf_C43:UX]OSfypgRO`fn{rid\^cljcfpˆŽš˜”d-   ):Tjxzvgnutqh^Wh‡ŠŒ‹wenyo…ocf„“•wdMK9" + +  +     @;<500/.034/+"  "..1/119HM?248>93.8PXB&**57//0-)+'#""&! %2;@Yqv~ysreZR=3/4/64AKUc’–“†nU=545002:, +LggimqmggaZX]kpvxvofcl“‘‡^/$3FU]]]VI8*.785&  +   + #( "!!/(!&+*,.+"')&%%*199-$'.:HUGA23=/68:9:885>><3*@MMA8?FKA@LFG::4??JME5;STFD>>?;AD<2-8ATfl^_[`YOW]Z[eb[Y[XLVNMKFJA@6/%)&&% ,  :’´ÅÔÖÑÉÁ©lcXJY†|p~…ŽŽ¨ËàßßÒ¹Êîôñíñ÷ûüüýýüýýýüýüõÛ´žœ›š­¾¿Ýа°ÔèÁ‰—··¨­±¯¼ÅÅÉÑÙÏǹ©–……•Žƒ~¡Ÿ™Œs‹•‡ŽŒŠŒˆ‰™²»º«“ƒ„…¢µ¹ÇÈÊÈÊÓØÒÄÇÉÔÙÕÈÎÍij ‘œ¡™”›Ÿ°»ÂÖï÷øõòíïñïóö÷õôîèååçêñòöùøøùûûúøíëûÿÿÿþþüñîôøüþÿþÿÿýýüúûùøøùöóúüýû÷öùüýþÿþþþÿûûýûøúýþÿþÿÿþÿÿÿÿÿÿþþýþþýýþþÿþüþýýûüüûýþþÿÿÿþýû÷óóùÿÿÿÿþý÷õúùùûüùúúùøõòòñïñ÷ùùüúùø÷ööøùøúôèÜÞàÙÑÁ´°°·ÃÚìñùþþÿþþýüýüüùúùöñéÚÎÉÒÜæðöóðâÎÇÆò•©¿±š•š¡µ²­¡™›Žˆƒ¨ÍÝæêìíîíçáéêàˤœž°ÕàÝÃ¥™ÑíñññðîÙ£U\ˆ£¢cJin@Z£ž‹W  + +/?2  @|ˆŒ¡¢±´¯¬ª®º¿º¯ª³¾ÃŽ®¥ ™•˜¨¥›™nejaRSSx•ŸD  2ƒšœŽŒ—“‘Ž‰…€yu‘…ƒ|zuŠ–•š“¦¤Š‰“¤¥±»¹²¦–†™¨˜‡yl‚¡¸ÚéïðîðñòñïïïîêæÝØÖÖÚÛßääâÛ½c)     -BA=1"+?T\T<>C^kpmZI;10UQ]VQaipkRJQbrtstf[[_lqldl€‘˜•v>## "  !#'-Bhv‡~mrmmngdU]x†‰‘{agwvƒxqcas‰”—„gWL:'   +     =@:<743)",4.0 ##&)00--5KT?6179=5,0JXE. &08640.)//+#"$$"!$-6JSay”Š†\A.022224,%>R\hmmjhqle_Zcmy~|tojp‚‹’Šl9#(9KX]]UL:,*774% +     + + &/' #''*#++%)&%.1.!($&+/36=;8*%*,7EII=21//5:9988. %ANSG=@@EBFOGD967>BFK=3>R[E>@94=646@VejaX\ZOUZ^[[_]XRWYWULGOJF) *2OQJA9D[dpoaN1.4Pbb`Y`hmkZOQ]o€z{i[WdgpwgdtŽ˜““~L  %+*!"&"#!"# &$! " ",?at‚|pecokli``i‰Œ‹‡lapm{vrq^b…˜œ—”|bM=6( + +   >@=<86/##)//."! $&&01-.;NXH8364<8-2O\M=#.54210+1/.('##'&*14Dh~z†xmg\J52-128+%+2/%  +   + +    *3,(!$.''.**,+4-($*"!*+/3553%-+*8GLI@3010725?A<34;A82!'EMSM?;@F@FOI?>55@BBH=1;X\D9=<0:CI968;CUhnf^YUNZ\WT\]cXOYUOOPMKHF;>9/-0,*!  B—Y    +8¶ÇÐÖѼ¨od^Ye……|ƒŽ‰Š©ÌåìéâÂÈêñòñôúýýýþýýýýýýüü÷Ú²£ ¡²ÇÊÛÒ³¸Ù์–ž¯¹¡ ¯³ÄÆÃÑØÙÑ¿«œ’Žš—”ˆ”¢ž›Šr‹‰‰ˆŠ‹ŒŽ‹‹¥¶µ£ˆ†‡‰—­¸Á¿ÉÐÐ×ÜÞÑÉÎÐ×ØÏÉÍË­›Ž‹ª¶¼º·±±µÑîõ÷ôññîëïòôöóñëçæäèïòöùøùøøúùùòëõþþÿÿÿÿþýþþýûùúúùöùûøøúûýüûûýýüüýþýýýÿÿÿÿÿÿýýþÿÿþüþÿþÿþÿÿþýþÿÿÿÿÿÿÿÿÿýýýþÿÿÿÿÿÿþþýýþþþþýüûüþÿÿÿÿþÿÿÿþü÷õøúûøúúùüüúôòñòóöúúûúøù÷ùööøøòå×ÒÛÒÈ¿¹¬ª´ÁÕìôóùþÿÿÿþþþýýûúùúùôíÚÎÊÒÜåïõõïàÏÊÌ¿¨–¦º­—•š£·±§ ¡”†ˆœÆßëëíðíëéæëêÞæš¡ÒêíîêÔ¯¡Óïôôñòïݧ]^•¡‹\>\ƒsJM‚£™Š[$ + ,55 + +Bp~Ž™›­£”‚qq†œ±´°¬¨±¿Â»¨¤žžŸ¦¦ŸŸžˆidcY?F\j‰Šj, + 6|žš•ŒŠ‰z~zpqyx”‡st•¡¡— ¨¦‹§®µ··²¥¥° ˆpgŸÀÛëïïîêìíëééççææåçéâÚÛáääåܹg.)  + )6B?4!!*)FVXLDX`e]ZlpjaQKNh‚ƒ|p]ZYZoyudnŠŸž˜Šc7 %&)&(!(#)$)&*-(%#""&8Shzyllglkleb\m†•ˆrdetvxx}lby’––“‡mMCG, +  $$ >;@87530)01/,$ &+560-5MYQ;@6@B=55FUV<% )2531426241)()*##  17@av‚yy}of_P921.66;DNWbvŠ“‘‹{e=57002+.(7K_hjkonlngXNWenz~ypqrƒŠŒ‹€[;./>R\^[LA6%'-4+ + +   +  + +  +   33+' $'#)*-()+)(#$$"#-528=9+"()15FOC:47:9857?AB67/481&#AUSOC:BBC@JQE<:8?FGH90@U]C>A@:8;F<579DYjoeb`SXVZYX^_]TSUS]YVUOJA<84(*.$&   E* <´ÊÑÔÔË¿¤nga^gŒŠ„ŒŽ®ØîòóíÑÔïùøøúüüþþýüýýýýýüûöص  Ÿž³ÇÃÕʱ¹Úßµ“›–” ž‰›¬½ÇÇÌÙÚÙÇ·¨™Ž†’˜“ŠŠž Ÿœˆ‰“‹Œ‹‰‹‹Š›°°¡‰x~„ˆ«¶¾¼ÄÌÑØÞÞÔÊÑËÑÙÓÉËÐÇ´­œœµ¸¸¸³´¥¢Åéôõòðïìíðóõôôðèåæèëñøùøù÷øùùùøðíûÿÿþþÿÿþþýüøøúûûø÷ö÷øúüýýýûûùüþüþþÿÿþÿþÿÿÿþýýýÿÿþþÿÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿþþÿþýþþÿÿÿÿÿÿÿþÿÿþÿÿýýüýüýÿÿþÿÿþþþùóøùüûûùùúúú÷óðïðóúùúûùø÷õôô÷ôíÜËÌÊÀ¾·¯©©»Îíøø÷úþÿÿÿþýûüûüúûûùøïÞÑÈÐÞåðõõòäÒÊÈÁ²®Ã¿¢š µ¶¯¦£œ‹†™À×çîïñðíêçééßŨœ¤Ãäïóóîݸ Òíôõôòîà¨\]‚œž‡_GZ‡tCI~£‹]&    *<8 ,Y|’˜› Œujkjtƒœ³°«§¨¸¿¸±¦žž¡£ ™š‹f``ODIM_ppY5   5~˜——‹ˆ„ƒ‡ƒˆtim‡‘’ŽŠsu•£¦¥«µ°”§±µ´´·¶«›Ž ®©wiƒ¦ºÔéííéèæääèëëíïîíííæßÛàäãâؼf1    + (7AK:%'*9X^[N=A\l^^S@8/7PfldW^lncSMOaw…|{h`Y`nupfl˜œš“‚F!#&02)-81:4331.,0$$('! !'3EbxvnbhjgfhY\wˆŒˆzqjswƒ‰zcb~’’aUD7 + + + + ?<<857;71/0-&! !)2971/7JZWB9>@EB?4;QYE/+.974715533)),*%'# *57Tq}z}€rjbUF;246:?DGU`k‘…oJ;<760-1, 9Pagfjmikh[KPam}ztjluˆŽ…jK2(:IX^]UF:*(,3'       +  +  +   +24+)!#' #$%'%&('+%"%-26=<5/(#&0>GKB=655428:8<9/23012+ $GWPH:;?=DFGH@946AEJI3-AVZE>B84-#(,*   3+ + <½Î×ÖÓÎÀ¢pe`bp‡‡x€ƒŽ‘¶àò÷ùõÜÕóùùùúüüýüýüüüýþüüúóÙ°œ›´ÅÁÊ°·Ø⺜”ŒŠˆƒŽ«ºÄÉÍ×ÚÚ̹°¥—Žœšˆ’¢ž‹‡•’ŒŒ‘Œ†’š­¬¡†~~€ƒŠ¦µ¼·ÃÍÒÕ×ÓÑÊÓÍËØØÍÆËÉÀ±°·»²¬ž¢¢˜ºâññðïíîïðòõôñðæáâãëñ÷ùù÷ù÷øùù÷îóýÿÿþÿÿþýýúùúûüýüúûûýüüûûúöö÷ùýÿÿÿþþÿÿÿÿýýþüúûþÿÿþýþÿþÿþÿÿÿþÿÿÿþÿÿÿÿÿþÿÿþþÿýÿÿþÿÿÿÿÿÿÿþýþýþýûûýýþÿÿÿþÿþûõ÷úüûûùùûùùöòïîïòöùúûûúø÷õ÷÷ôéÕÅÇ¿¶±­¥¦­¾ÜöýûùûýþþþüýùûüûüûüúøïàÌÆÌÙæðõôðáÓÌÆ¿¶ÊØ«Ÿ›§¸°«ªŸš“Š°Îäëððòñëéêêâѯš›³ÜêðóòïݸžÌéðóöõñåªaS€¡§ˆZN^r?DyŸ–Œ_#  +(<:"  'M|’Ÿ|jd_hkw‹«±®«¥±À»¶¬¨§Ÿ™š œžtfXJFJPUcbFA) + +3v””Œ‹„Š‰ƒ‚ŒmoŒ“‹yx‘®¸²³À»”«¸¼µ¹º¶ª›ž­¤xp‹¥¼ÒáççãåãáæíðòòòñðîìçßØÛàÞÝÕ¹i0 +   %5?B9$!&5M_^RBFJ^^_U?8,/Shgg`^hmlUJHXt{ˆpd]anwwmcl œ^6++4;39@?=82;<1/3..-*")%"! )1Ozƒsgfhhfe^]ozŠ„tkxw|}„}jVr•…n]NB*   ?A<;D=?86/46(#),7;501E_ZG;?CFB=.4KXF1 ,5230247554-*$+(& &,8Qmz‚‚~sf`TF6/4:?BBNZc{Œ’ŠvQ:323.0.*.ETbiicglf^RV_os{|ulqou…‹‰uU5+3JUX\VJ;0(+*'  + +    +  +    +6/($%''#"(+$"$#!&'*/4A@9,'&(,7JSA>;9911:<6@C?AHI?<7;GCCA62>]bHB66=;>A;5.>PZlibb__QOQJQSRWRUQOVSHFIC?B60(&$,'    .5   9¾ÐÙØÔÊÀ¥fcbgtŽ…l{Ž•¸áôøùöàØôúúùùúúùøù÷÷ùùúùú÷ïЧœœ˜š¯Ã¾ÆÀ®»Ùã¾”¥›‚|…Œ”°º½ÇÎÔÛÚÎÁ»¦¨œ“•—ŠŸ ›…Œ’’ŽŠ„—©©œ…}„‹¢±¶¶ÅÑÒÙÙÎÉÆÓÓÎÓÖÑÅÄÍÅ»Ãú°¬šœœœ¯Üññðíîïíñõôóïìçããåìòõ÷ù÷öùøùøôîõþþÿÿÿþüüûøùûûüýýýýþþþýýúöïðùýÿÿþÿÿþÿÿþÿüüûøúüþþÿÿÿÿÿþþÿþÿÿÿÿþÿþþÿÿÿÿþþþÿÿþþÿÿÿÿÿÿþÿÿÿÿþþþþüúýþüýÿþÿÿÿýùñöùûûûùùùúúöñðîïðòôùüüùööö÷öôçÑÃÀ·¯ª¨¢¦±ÅéúüûùùûþþýýûúüýüüýüûøîáÑÇÌÚäíôõñáÓÊÉÆÇàßĪŸ¢¸¹²¬©ž›–~¡ÄÙéîðñòðëéëéÛÁ¥œ˜Éíðñðïê×·šÅäìóöõòè²bR„œ¦ˆ[O]|tKC;)"!3Bag]HBCT\_ZSD4>>852+,/.!#! + +&-Hi€ngeegb\]W`w‘Žˆqot€„€|r^j‰‘’Š‹€\XD1  +  +  DA?@>9-++*)7A7*)! +&ESVC76<=BGMJA>8:JH@<42>`aFC<0=;;A>1/>MWhiae^]MT]STGIQNLTSXQNMI@?B<0.'))/& + + /8!    7–ÂÒÙØÕʺ£p^__w’‰xƒzµàôùùõßØðùùùøøø÷ôõõöõõõ÷öïåÄŸ˜žœ²Â¸ÆÀ®¸Ü囸´‘ˆŸ¯¶ºÃËÒØØÒÉÁ´®œ˜Œ›”Œ’šŸŸŽ†™•Ž‹…‡Œ‰”¢¢“„ƒ†œ«´¶ÈÓÔÙÞÐÿÍÔÊËØÕÊÇÎÎÍɼ­¨§¡œ’—¬Íéññîíëêóöóðìçããæçìïôøøø÷øùø÷ðéóûýýüüüüüüøøùûûýþýþÿÿþþýúôñõûýþÿþÿÿþÿÿÿÿýøöúýþÿÿþÿÿÿÿÿþÿþÿþþþÿþÿÿÿþÿÿÿÿÿþþþþþÿÿþÿÿÿÿþÿþþÿÿÿýûüþþþþýýýüûòíöúùûùùøøù÷õðïëîîðñöûüøóöô÷÷ôäÏÆŶ©­§ž¤³Óïûýúùøúýýþüùøüýûüüüû÷ìßÐÉÊ×âìóòðãÔËÊÇÔåØ»«¢¬Ä¾¯ªŸŸœ’„‡³ÒãêñóóñïéìëáË®—ŸÙïñòñðëضš¿Þìòööòê»j]…›¥ŽfQ\‚zQGj– Ÿt) +  (85 !O|’•¡nZZkdahr‘¨°¯¨£­·¸°¨ ™“˜£š‹qk`OJOTZddP1  V||}r‚‡ƒ‚‘‘™Šyuƒ‘“šŽ ÂÒÐÔØͲœ³ÄÂÁ¼¶¸³š©¥“{m|œª¸ÒâçæçåäçëðïòñïìêèãÙ×ÕÔÖÏħ]+  +  $2>B7(!).@SgcWCDH\`a[E64>A=565:3(. +@OUC8=?C>=IM?>;7CD>;52EcbC?==;47;79;?DWjk`Z[ULS^TKLVMJNMKWRRGFIB7872.+.+"   -=.  +  =™ÃÓØØÑɽ¦q_`\w“…r|‰–·ÞóùùóÜÕðøúøôôõõôõôõôòôóóðḢ™£Ÿ²Æ¾ËŪºÚæþġˆŠ’¬´±¼»ÆÐÔÖÏÊÇ¿±£ ‹•œ‘ˆŒœ¦ž•‰‹š”‘„ˆŒŠ’©§“†‚†ˆ„Šžª¶¾ËÕÒÜÞÒɺ¿ÉÌÎ×ÖËÅËÔÔ˸–—¡¡™”œ¦¾âîðìëêîòóòîçãàâãçéìóöø÷ö÷ùùõñæèðúúûüýýüûøøüýýþÿÿþþÿþýýùùüýüüþþÿÿÿþÿþÿÿýöôúýÿÿÿÿÿÿþÿÿÿÿÿþÿÿÿþýÿÿþÿÿÿÿÿþþþÿÿþÿÿÿþþÿÿþþþþÿþÿþýýüþÿÿþþýüúðëóùúùûúùùùöôòñðñïòôöúùùø÷õø÷ôâÎÆ´¥¨¤œ¨ÁÞ÷üûùøö÷üüû÷öøúûûýüûùöéØÍÅÌÓßêóôïâÔÍÅÎáàDz¨ª¿É¾«¤š•ˆžÄÙçíñóóñíêêæÚ»ž•ˆ˜Ùïñòôòîá¿šºäïóøôóå¸l^€š§kH^…xJ9l–šv+  + +  )8/ $Np‹ ‚jbbpafcj…«²§Ÿ¦¯µ²ŸŸ™–˜š žtm`QMMLXS`R1  Ltso~~x€’¥ª‡ouŠ‘–¢ …¥ÎááÞâØ»ž»ÊÆÄ·º¼±›‹šª§˜zil•¥³ÍâäääããçëíîîîíçæåßÖÐËÏÐÇÀ—M*  + + (37F8$')-@bcSG?OXacZJ:4=Kdpihflym_THXmwyql_Z[dpvjerŠššš†iQCPTDINSSPSPPSBLGDE?<811-,)***!"'.Xj{xkjjcNRRWp†•›‘†in~ˆŒ}aVfˆ”–•|jVC,! + + + +GA>>=AGC@:97,! +/,/:;4.@WUB% $.5<4*%'#%;ALD;4447294>=<40164--" (CUTI;>??JGIL<>7:>>@=37QcaE9<=7;DD>78ABTge]XTZYTWNX^SLJMKQQLCFNKGA>70* "&  +,:' +:œÆÑÖÙÓǽ na`e‚’€vwwŠ“–­ÚïòóêÎÎíôôñïñõö÷öõôõóöõòï㹚– £Ÿ³ÃÃÐÄ®ºÞå¿ ÁÉ«Žˆ–°¿®µº¿ÎÔÑÎÌÏÆ»© —–›˜©¥Ÿ™‹“›–‹†‰Œ§ªš€~}‚‡Œ¥°ÀÃÐÕÍÐÓÒÇ»µ¼ÆÏÔÕÍ¿ÈÔÙʶ—›žš“–š£¶Øèêêìëïòóòðíêèèêïïïòôôööøøùõìâèòùýþþþüüúùüýþþÿÿÿÿÿþþþüûüþÿþþÿþþÿÿÿÿÿÿþúøøúýþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþþþÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿþÿþýýþÿÿÿÿÿþý÷îôúùùúùùùù÷÷õóôõö÷õùùø÷õôôõ÷òÙÊÊÁ³«§›ªÅêúüúøöóóúûùôñ÷÷ôùúüûöñæÛÎÈÉÑàêîòîÝÐÊÊÝèÓ¹©¯ÉßÒº­ ›œˆŒªÔãêðòõòïììëßÇ«š‘Š«ãòõùøöñäÄ¢Áêòôõóïå¹b^y˜ ”dGZ{O9f“¡œ|-  + " ""!$&32. + Mr‹œidhkb\^ft–¤®¥¢¡ª¬°¨£¢™™kgaPBFNTR_U8 Cltx}tv‚ˆ“—¨º°Žxv”µ¹ŸŽ°ÜäçåäÛ½§»ÊÈÁ¿¹¸· ž©¯”xkp‡Ÿ²ËáäâãÞßãéêèëêæÞÚÜÛÒÅÅÆƼ¹J* +  + +  .05C3"*"1=_h^NIJ_cgaU>/;Yfnnllmprg\MWb{yrqbW`hmvmck‰——zcPWa]^]]c`SUOVS^YNNMB7<3/2/.*( $,.BavzojjrkcY]auš–‡tuw{Œ‹ƒsSXp’”‘“ˆm^K;' + +  HE>>9972)!)-$(*3<@<8>VcJGB>CIR]ey†“‘€cG810471+#.L]hhkpmigd^[bmstxvgfm€„{dD//JV[YQJ<0)%! +  +  + +  + + +    ):A6,##)-# ''% $!%+9A=7. "$)5@FD:1:?82547=:735695*"%EY^Q=7A=FNLPB225FHE<19Ud_J>=:7?CG;12@FSc[XYZ]YUTNV\QQJMMNRLICIJFA@:-)&# (  +  D£ÇÏÕÙ×ƽ¡ie`cynwwŒ£ÈãééݾÁáîíëïðôøùù÷øùùööõòã» ›¡œ–¯ÃÃÑʱ¶àæÀ ÁÍ°›”±»±ªººÆÑ×ÐÊÔÎ󪟓Œ˜›Žˆ†™¨¦ž“‚—ž‡‡†—ª¦’€‚…„ ¯¾ÂÌÒ˾´ÂÁ»µÁÊËÏÑÏÆÃÕßÕº¥Œš”’—¥²Êáêìêéîñïñðóðîïïñóôôôõõ÷ùøøóèåòûüýþýýüþüüþÿþÿÿÿþþýýýýüüýÿÿÿÿÿÿÿÿÿþþþÿþûûýýüýÿÿþÿÿÿÿÿÿÿÿÿÿþþÿþÿÿÿþþþÿÿÿÿþÿÿþÿÿþÿÿþýÿÿÿÿÿÿþÿÿýþÿÿÿþþýþýûòõøúúúùùùö÷÷÷ôööõööööúøôòóóöïÛÕÎø¬¡›£±ÑóýüùøóòõúúùôòõïíòøúùõðãÔÌÇÄÎÝèíðëÞÖËÔéæβªÁãìÔ¹¥ŸŸœ‹Ÿ½Üéîòôôòììíæѯ’™–³é÷ùùùøôçȦÅìñóòõñê¸iRv£§’hKOƒ|K=o’¡¢. + # ""$)24/$ CuŽ˜”xiikig[^go‘©©žš›¨­­¬¡¡Ÿ ¢¢ŸƒgmZNMQRP^_Y8 9]wqjq…‹’™¦µÄº›~€Œ˜¯ÉÏ·š½áèèéçÜƱºÇÇüµ´¶¥—°©“ƒkfž±ÊÞæáÛÚ×ÙäêéçàÖÎÌÐÔ˾»Á¿½²‹@'   %*Yl|…‚…raYQG=9:@>DNYal}Ž‘”†eQ=10141/(#?Rfejooieg_Z]gqv}pmhi|…‹„tR51:PX\VL@3,' +     + +  +  );E9/%)-)# " $#$+")++5>@>,(+2;C<89367465>?<22884,#3HYXQ63=9=AII?5/3CDF>8/!+/D^cSDBIZfndQ45@F\midcpsm^UQVipvtjVYabvtibp‹–››}nomnlcclkhdlmjebd_]ZMHB@;=87/&(9Sr|}|kjhqoe[T`t‘—’|pv|ƒƒ„~fIZw’™•€jMI- +    EFB@<;A?81//$!"%%$29::49Q^b;,146C=/2EZV;!%&2;=78>19JXZSJ?6-)  +   +  + +  +'CB>73,(,! ##"!%"--19A>*&&!5?BE984<;>>1/>GTcc]TSUYOVLRVPTHNPJPNIJKH?@35*!$ 4  + +F¥ÊÐÑ××;œga\`qynuvŒ‰†¦ÉßæçÙ´½ßìëëñöøúùúûûúøùøøôêÆŸ–œ•—°ÄÅÒÇ°Âäé£ÊÔ°•”“¦«­°©´¾ÉÉÉÌÖØÐ̾±¥”Ž””……˜©¤“¤šˆ†‡—§¥u‰ˆƒŠž°»¾¾ËŪ”§»¶³¼ÁÂÄÊÐÉÂÕãÛÆ®”‘œœ—œž§´Ñåìèåèêìêëéêêêêìîîîìîñôöøùïææñ÷úüýþÿþýýþÿÿþþþýþýþþþÿÿýþÿþÿÿÿÿÿÿþÿÿþûòõúýÿÿÿþÿÿÿþÿÿÿþÿÿþÿþÿÿÿþÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿþÿÿþÿÿþþÿÿþÿþÿÿýÿýúòñøúùúú÷ððñðïðïîîðííìíìîñôôðåÜÜÑ¿¯«£žÂëúýüúùôñùúùôîîîæåìöúúòêÛÕÐÆÁÄØæìïîâÓÍáßÈ´¦±ÜëâŤ¢¡”†Š¦ÂÝêìðñòòðîíäʨ˜ž¤Ÿ¢µêùúûùùõéÊžºáíðöõòêÄs^wœªžmHW‡‚TJmž¯¤‡7   + + +"%&"!,9/  +FuŠ”‡nijfhkb]`ez“££œ ¬°ª©§¢›œ“†slZ\TQTZ]gY: + =ajot€‘Ž”­»ÀÉ擃Ž­ÏâáÏ©¾ãëêëëá̽ÁÄż²µ³¢™­«™~c`ƒ™¢»ÏÛÛØÎÈÏÛÜÖÐÈ¿¶·º¾¶²·¼Â¶¥ŽL,    + ":A>;' ,ERi^LBIWcfe_>18J]ifeahwveYII^txypXX_by~rfk…’˜“’‰kntuocjqopmlnilfb^_WRHGDGA>;4( #5Lbkq{t`hnoig[Xo€‹}psxwƒƒpNIe‡Ž”‘ŠpYP=' +  GGDA==@;:86<*$!%# ""#.57:7@TdT>007AJUafn€“~dH9149444- 5P_djjmnph[Scpvrttjfm‹‡{hH:8DOPJH@50%     + + +  &*6C@5.((*%! &('#" !#$'004:;9-'''+7>EA844=<3123=<28103-* 7J]XG<9>BECKE@9/1=>?<75NlkKAA????D@48C?M_b[SVWUWNRVPHPPPGILMHFFE779/&&!!    K©ÊÐÕØ×;ŸgdY^x’{lxwŠ‰¨ÈÝäåÑ®¾àëíïõúùùûüùúùùúøúõéÅŸ•™˜™±ÅÂέÂäêÇ©ËÕµ™”–¥¨¢­§¬¸ÀÁÃËÕÚØÔú§•‘™‘…Œ¦¨ •‰—™‹„‰ž«Ÿ‚lz‚‡‹Œª½ÃËÌÀ¤‡ž´¶±¹ÃÎÊÆÎÌÄÒãàË´›ˆ‹—›•š£¦­Æßéèâáàâáâáãâããääæèæçíôøøõîåçòùýþÿþÿþþüþÿÿþýýýýþþÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿþþúõùüþÿþÿÿÿÿÿÿÿÿÿþÿÿÿÿÿþÿÿÿþþÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿþÿÿþÿþþþþÿþÿÿÿÿþÿÿÿÿþý÷ñøûúûúøñïðïïììëëìëìêëêëðñïèØÙØÌ¿°©¡ «Êïüýûùöòôùúøñïðëßßèöú÷ðçØÑÎÊÀÁ×åëííàÔÕÛͲ£¬ËææЮ›£›ˆ›¾ÒãîïòñññïíèÓ³¢£±¯ª¼ëøúùùùôçÊ »ßíñóõóëÅwcŸ°kIS‚„_Jn¡°¨‡9 +$&## $31# Do‚~neeehfZZ^_lŠŸ¡ž—œ¬®ª©§¥¡Ÿž”ˆxedURMJXgk`A   .Ylu{—¬¤œ±ÅÇÊů‘ŸÀÚæçØ­¾ßæèèèáÑÁÀÇÇ¿¼·³¶¨”¨­™{df}”œ«ÃÔ×ÕÎÄÈÔÕÌƸ°¯¯§«°¶¹ºª¡’V.  +!4?>:34%%+>SdjnpebqmocXPaz‡‹tpjhu~‚v\HTq‡’_OH3    CFJEC?C=>>:3*!+#$"%)',68:6IM[V>/,;Mgy‡Žˆpd\VH>;=ACIN\`hy‰—˜‡oUA1:4673.'+DVbggilljcWWaittvpcitŠ€skD:ACHGEA:-! + +   +      + +;E?2'%-(#!&&'!"!"'!  )/2464.++%),4]’‡lSEC3#   +  + +  UAGHEA@D?<61,#('! !"')(*28:76GWQF947DGD.*6L`Q/  &1:B;8?GG??.$!!"/=D]zŒŽ‰qe^cTH=9>FIJU^do‚‘’‚cF7543532+4Oddgjhmkib[_jmquodgn{…†xfJ=>DIMNB:/    +     +   0AD6+!&+)$  #!$ "%')2/29,'+%':>>804+.<:54>730/1314& /GRJ=B9?JDJD>8753?:=97=UddC7=>@<96:AG]YRHKSNLOKUMJLIQMGE@CEHD?AB-$$&(" + +H±ÌÓÔÙÖ̼œi_Z_y’€s}x†…ˆ«Îçê㩽âðñôøøùõôõôòñóôõóíพ•™—š°ÃÀÌÅ°ÁåéÇ£Ã礕ž¿Ä—ª«¥²·¾ÅÐÖÔØÑö¨¡’‹“˜Žˆ‹¥´¬£‘—‘~‡¨¶­‚fn„€‹‘ž±¿ÇËǹ˜z‰±¯«¬±¼ÅÆÃÍÒÌÙÝμª—†‹——’•š §Ëâéèæççééêéëíîïîïððñóøúøöìäïüýýþþÿþþþüüûûüüþþþþþÿþþýýÿÿþþÿþþÿþýþþúúýýþÿÿÿþÿÿþÿÿÿþþÿÿÿÿÿþÿÿþþþþþÿþþÿÿÿÿþþÿÿÿÿþÿÿÿÿÿÿÿþþýüýüüýýÿÿýüþüü÷ð÷ùúûüûúúøøøùù÷õööõõõóòððæÐÁȾ´´¨—Ÿ©¼Þôúüûúõñø÷÷öòóôìÚÕàðõòéßÕÐÉÄ¿¿ÓãçéëàÛж£ž¡¾Óɸ¦œ—”…¯ÊàêîñððñïïíæΩš—©½Ôѽ¹ÛíñññðìÞ¿›¾åëìíìëâ¶miºÀ¥~IX„‹VB|¦³±‰6  # (66&;p‚ljnlka_XYee{”¡ ˜¢¤§¤¢£œšž—€vp\TUQZT]stR*  +  + ,c€Ÿ·ÆDZ §¸¿ÈȲ“—ÀÙãçéÞ°°ÏÛÞßßÛÏÁ¼ÀÀÄÂÀÃÁ®•–¡ª¢…gajˆš©¹ÆÅ¿¾¾ÁÁþ³±«œ’–®­¬º´¯·­e$  + + /=>DFC?5) #".6=Uk}ˆˆƒxheb]SD==BPGOQ[fv‰””‰mN;103/277''BYcfihmlifX\fkorpidhw‚}zkXB:=INKD;,!  +   +   + 1B@:-&$&*#'' %#-1411,(0+$-8?@>24219>8;;88003;20&5IRPE?=E<7==CLUWWJPRKLJRSSSJPONRGKKI@A=?;-"$""  +  Y¯ÇÏ××Õ̾¡lf\^xpur…‰‚¢ÏæèܵšºãîòóöôóóóóòôõòòòðëÚ´ž˜š—š²ÇÀʾ®ÁåèÅÃÓ»Ÿ—ŸÀÍ—¦¢œ®´¶½ÍÔÖ×ÔÍ»²ª˜†œ’“¨°¦™Š‘˜€Ÿ³«„bpƒ‡Œ”¡®¾ÆÍųŽr~¬³®­ª¹ÀÅÂÌÑÍÑÕÑÁ´¡†‹š˜”•’ž­ÅÝçèçéêìíïîðòñññôòññõùùøöïéî÷úüûüüþûúøôôõöùüüüüýûýüùúüüûûýýüýûüýúôõúüüýüýüýýþýûûûüüýýýþüýýüýûùøüüüüýýýýýþþüüýýþþýþüüüûú÷÷÷õúúûûûûúù÷ïð÷úýüûûýúúøøùùù÷øøø÷õôòñíáƸ¿µ«©£Ÿ³Âè÷ûýüúôõù÷øúøõôëØÎÞïôïéàÖÐÇǽÀÖçèèçßצž®Âij£›™“©ÏáéïòôóðïðíëÛ·• ¸ÑáÙĶÒéêîííèغ´ÚéëëëêÞ±jv¡ºÆ¥xNSƒ„\Ft¨´°9 $!!$0." +@jˆŒ}rr„hfg`Q[agrˆ—š——žž¥¢ Ÿ£ ˜ƒ|raR^TXZdw{W2 + &^ˆ¯ÂÇÅ´ ¤«·ÃÈ°“˜ÃßæçäÛ§¥Ì×Ú×ÛØȺº¾ÂÈÇÁÂÀ¬’ž«¡ƒgbjˆ“§´Á¾¸¼·»½¾´®­ª›”œ¥¥°¸±´¿¯\$    01=DE/!",9O`^QGKQW_egR:1@M`gqnhgrkXYVLm{wmbX[hks]^v— ›•ˆƒ†‹„Šˆ‰‹„€ˆwtysgjjQ]`RNGD<* !):Vg}„|idfpkeZU^o‹‘ˆtsu}Š„shOFf‰’‹|aWS@'         KMIC@DDD@:84&!*-(""4/%,5848=JTG73DHPT>0'9NN4 +:><7>>CIB3-"$"!'2:Jfz„†ƒ}ka]VRD=;;@GKQ]gq„•“‘{`:2-2-*24,!8FYdhgkjijWX^enmllqcps~~wbMBAHLID8+%  +  + +    +  -AD6)#$$!&3+% !,7-43?(,)('+0>=82535823B<<<<8/<88+5JUNG<=CDMOND?600J99@/+G^aI849=?AD?05BFKQTQKOSNOTWRKRPKMPPNMMC><2@8+"!!  + +   ]´ËÔ×ÖØÏÀŸha\g|—ytsq†„‰¡Èâßͪ™±ÜëìïïïîïðòòôôóòðìëÙ°š™žœœ°ÇºÅ»®¼áæÄ£ÇØ· žÃÐŽ¡œ¡¦°´»ÌÔ×ÙÙÔŹ­ž„Ž“šŽ‰Œ¯¬Ž™…ƒ µ«‚eh|‹‹Ÿ²¾ÊË­Š}€¦²­§¦¯ºÊÀÆÑÍÅÏÒÅ´©ˆœ”–”œ±ÂØçëéêêìïîïðññðóóòñô÷÷÷ùøóïîöùùøúûûúöñïïïðöùøøùøøùø÷÷ùùùùùûùúûûùùóöøùúûúûúúûüù÷õøûüúûûüúûùùûúøøøúùüùûüüüüüüúûúûúûûûûùùøùöõõö÷øøø÷÷÷÷ñõùûùüúûúùùùøøøøõöô÷öôòòðèÙ¹±®­§¡Ÿ¥ºÏðüûüüú÷øùøúúøùõéÔÏßìñîçáÖÏÐŹ¼ÖãæéçÝÔ¬–ŸµÄ¶Ÿ”•™—Œ¦ÍèîðñóóòðñðìáÉ©“˜¯ÉáèÞƸÕéëííîêÙºœ­×èìîíêá±m†°ÃÁ§uIP…‚`Lo£²­‘<    *')23+@h}Ž~jkhlefaXXccn…•—–Œ’œŸ›Ÿ©¢˜ƒpjfZMW\]bzƒh:  +$Kˆ­¼Á¿®Ÿ—§¯¾Ã«’™ÃàèäßÕ©§ÊÓ×ØØÕÆ´´»ÈËÈÁÂÀ±Ÿš¥®¡‡kgbx…”¡­»À½Á·²¼º´³­§ ž«©®ºµ³¿Æ¯R&  +  @*5>G7 "&(+BaaZF=AK[[^P91>=D:86) ")+&!"+///4612@KTK94ALLPC/+6JT@% '3>85<@>C=9,"#'-6C\u„€…ƒn`]\QG<8?BDNZ`iq‚‘•”‚nH311))-+*,*FX]^dicbe_YV\fkikshlz‡~vkUD@HOO?8-!   +          +(8A1%$)+1-)!$!%()69@3.0.((/03?6-0/;66<=?GXiolbo|xi^UP[ry|ui\Uaaif]ZœŸ Œˆ’‹•’‹…‡ƒ‚~ƒ‚vy€yk]_dbUH>/ + #0DVh|wsd_ijfa]L^sŒŒ…kmu„ˆsYDC_wƒ†~sdMB;&      + JMHCE=>=FC:.0&$)&#"%-/,.2;..4:FJOA+&0HUE, + %,6::;>?@:9.$!'(.HTabk|Œ—“‰uW:-*.''(-13'*4;3=<<=?>9.,03(# (7LNM?=;BHKB=?<153B@5811K`]JC68?HLVefP9=AU`hmhjz‡meNCVjysuj^[]hol]`t•š™™‘‡’‘‘˜™›–—Œ‘ŠŽ‹Š‰†‡ƒƒmekgbaR>, ,3D`y}{i^ohkm_IQrŠŒ{hez†……wiF>LixwxoWE72 +    + + JKKF=@A@A:5- #',$  +)'&/3++:LWP>47AEPI4")BUP3 !%2??;?I>@80!# '%&5Gat‡ƒ„€kbbbQFA<92+28;538:==><0/53%!*8FMOD>:  +  + ")8.  ,Ywzjopgqib]epsv}y€”—Ž•¤«¤££¥¢™š‹zocUR_Z]bp{=  5qŽ–¦¬•†¢¨¸Â­“”¼ÚáÙÔÊ¢¤ÇÕ×Ø×Öɸ³¼ÅÈÁ»½¼µ£• ª¨’yb_eu‹°¹ÃÐÚÎÍ×ÒÅÀÅÈį§±»´°ÀÐĤv:    +%;GM. #&&$DYWM=1BTT[[T;# +.=Yuuti_dcff`VQf|…Š‹rjqx|ƒ~mP:B]p}{rm\E>3     +  JJII@>=;5:5.##*.)&#&%&!(+''8N]WB13AMSM8*0=OS> $29B=IU@E@4%"%$#(#1@Yr‚‚}rb\`XL@;689;AE;2:=FDUWNQOJRMLTQONHIITUSKKIG;083/"!   d¸ÏÒÒÖÖÍÁždV]]‘ystrŒŠ…ÀÚÝàÏ¥¯×çéìííïðìïïðîïñîëåÓ«Ž–›˜¯Ã»Ä¸Ÿ¬ÕÛ°˜´Ã¬ŸšŸ¼À˜‘renŒ¥©¶¼ÆÉÏÕØÓʵ—“‰‰’›”ƒ…”¨›“„Š”–¦˜dUt‰‰•¬º¿¿µ¨‰w€“©²¶¬±³ÀÍÄÀÒÐÈÌÓ˸¥~˜˜®¬·Öêìîðñðòóóòóôõõõõöø÷ùøøøùùøùùøùùüûúüüûûúúüúúúûüüüûüýûüýüüûüüûüüüüûüüûûüüûüüûùøüüüþüýýýýþýûüýýüüýûüûüüüüüýüüûüûûüûûüûüýûüûûüýüüûýûüüûûüúüûûûûûúùúùù÷øö÷öõöóîäÓõ®®©¢™¦¾æùüýþþüüúùøöúüû÷óéÚÍÓçîðîæÝÓÊɹ±ÅÖÝàáÅ£“¢º±š’‘˜™˜¿ìùûüüùôôòññíäĦŠŒš½àëíëãθÕêìïïïëàÀ—«ÛëîïïëàöÁÁ·³¥rPHsuQ5j¦¥‰G +&! ,:%#Y|yiopqpvkial~wy‚ƒ”˜’œ¥®±¥¡¨¤œ“ˆ~seXR]habz’y8 +  0b‚’¢¡Š…•¡¬»½§Š¹×ÝØÔͨ£ÅÖÙÖ×Öп²ÁÈÈ»»º´¡–ª«og\bsŠ›«·ÄÓÙ××ÜÒÈÅÈÌǵª±º²®Àļ°„@! +    +4?B7! #$$?ScYB4=BIO^XD29NdjepihrrgZLP^uorqhTS_qrlYgzŽ˜’˜ššž¡™˜¡ž——š—’–“–’‹ˆŠ€ukieRB+  "0Kfxuhb^efab^N[wƒ†ˆ{eowwxum\79Ohrslo^@A7- +   +  MJHD?@>>:::3"!!-,'%""%*&""'')9M]^K37GRRJ;(&4KQH% %,5<>98BC?>2( -'&'+8Kdx…{}ubaaWPE86;;?JOVc{•”‹sS7,)&))'*(  ->JW`da\\SQSY[efcg^_ioxyn_MDC@>;7*     + + +   #480(!%**"(.-$'%#! '+1465;2.,,*/29>72/4=9489>@;348<4+*"+8GNHDABHJHKKA;2067:9924WkhI78>:@?@927;HIOPLMNORNNNQOOFNFJURMQLC=<40,#     + f¸ÍÓÕÖ×ÌÁšie`d‚“ur{wŠ…¥¾Ùàßͤ­×åéêíïïïíííîïíîîìåѨŽŽ™–•²Ã»Áµ¤­ÕÛ²¸ÂªŸ˜›·Àž•vu“®«±¹¾ÇÊÐÓÓ̺£™‘ˆ”˜‘‰šš’‹Š• ™rWi„Œ’œ©¾Ä¼³£~z™ª´¸®©­¾ËÀ»ÐÓÎÊÏÍÁ°š|„’’¡«¯Çãìðññóóôóóõõöø÷öö÷ù÷øøøùøøøùúùúûùùúúûüûúûúùùùûüüûûüüüýüüüûüüüüûûùûûüüüüüüýûøùûüýüüüýüþþüûýýþüþýüýüüüýýüüüýüüûûüüüüüþýûýüûûýüüüüüüüüûüûüûûûûúúúùùùøøøøôóõòëßÕƵ¯­¥—–«Îïûüýþýýýùùù÷ûýûøðåÕÄÐäïñíäÛÑËʶ¯Å×ÞÛʹ–­±›Ž‚ƒˆ‘ ½åöûüüúøôóñòñìàÇ¡…ƒŽ¼áëíîäͺÔèîñðïìß¿›©ÚéëîîëãÖÍÄ·ª¨–nLKv|V?e˜¨©ŒA !!(4'(]{pnnssohednv{{“““œ©¬­¡œ£¢”wtdZNT]bh€™{?  9gžš”‰§²³Ÿ‰Ž´Ð×Ø×Ñ®ŸÇÛÛÛÛØ×­ÀÎÊƽº¿·ž‘ ª¥”wa[esŒœ°ºÂÏÕÔÕÕÏÇÅËÑ̺°±¶­«º¹¶¶‚A- + +  $4AK0"!&:J\`N?7ENZclzŒŒ†|gE-$$$$'-., 3BOYd^aae_\NX\]ZRQU_p{‚{eSIEB?96/"      +  + + + -4A>3'!11& *.##! "! !!'-359:6,+.*-3;55<:0/- ,:BEA=7LZgi\JDHJ`oskdqpmg_RSdiwxvaQJfske_dy‘’žŸžŸ¡¦£Ÿž¡¢Ÿž–’—”š›•›™‘Ž‰Šƒrf[D) 0GXXZLS`fhjfXQZm‚…vkqlsƒ~sW70=[w~zp_L<,$ + + +  jBHHEB@>A?@2)$(,+.)#&)('%,'$(4EXaR7/;ENOD5&*BYX4"-1/+.4BC=4($$"&/26Rn‚…„‚ueSI?3*)27>DLS^do„ŒŽŒsX<%%()).+ +':IQV]^dic^TWXXJNZcnr}ƒylcKBC@74($  +    .;B8.*%-/%%),,$$# ')068:8,)++)2:<>75348255=D@=3025/1&##+.5CLI;A>:8128;12/4XiYR@:7847BE:8:?LMDKLKRNLHSKNNHQXULLOFOG>>36/'## mÀÏÒÓ×Ö͹™j^^jxoot…‚„žº×àáÊŸ«×åèéíîìîííîîìììëêåΦ–˜›±Ã¼Ç¹¢³ÓÛµšµÇ®š—˜©´›•’Š”¬§ªµ¶´ÃÑÏÓÔʽ¬š‘ŒŒ’ydq‰Ÿ«ž’¥“`Qm‚Š‹‹‘°¼¼»²¨‹‚†¦²ÂÁÂÄÊ̸¼Ï×ÌÈÌ̾¦Šz‹—Ž–¡Ÿ­Êåíðññóðòôòôôôõ÷÷õ÷ø÷øøøøùùùùùûúúùùùùùøøûüúúüûüüûûûûüýýüûüüüüüûûýüüüüüüýüüú÷øûûüýüüüüûýýþýüüýüýüüüûüüûüüýûûûüûüüüüûûüûûüüýüûüûüüûúúûûûúúüøüúùùøøù÷ùøø÷õóíá××ÓÊ´£Ÿ¦¾åõúøü÷öþüøøùùúûùóèÚÉÄÐàëñîåÙÎË͸®ÃÓÛÔº¡˜¡“v][cct£ÀÚ÷úüþýúôððòîçÞη¦Žˆ™ºÛèëìà˽ÏèíîïíìÞ½’§ÔéëìííéÚ«ž´¨VPwwZ?K‚¢¢E    " $'0"Hqskcktyiahls€}„€€Š“›£©¥žœ ¤¦™”ˆ}qmLHX_]]q†b- 3Zu†“Žˆ€†ˆ•š¦ž©ÏÜÛØÕµ¢ÂÛßáßáßȱ½ËÎÆû¾¶Ÿ’›©§~hagv‘°ºº¹ÅÒÕÈÆÈÅÇÛÝÝÍ»¿´¥¸¯¦¬«e:" +  !!&=J: + !($,HZP?25KV_`bUF=JajnphlqqhZNBXgoqreZM[lph^]tˆ”“—– £¤žšŸŸ Ÿš”—˜—š™‘”‘‹„ttlU0 #8LXUWRUdnld[ONgŽˆ†rgmn|zwmI1*Jq~vo`L:84    WLGHFDGB><9." %*.*,$',,'#%%&&/=R[O9+.ARXI7((7.!   +  + +    + +  + + 2@?<0#.-!'/.'*"#""" )032721(&.,,/@7492242.4?HA7/2501-%"%.3?IID8:2.27685//NdkH9979;?A9629BEEtB@HJJLMMKLRLOSNMPPHED;:1-.)"))    + +  +u¿ÏÒÕ×Ö̾˜jcdk‚’skqpˆ…‰¢ÀÕÝÞÈ›©ØèééìïîðïîîïïííìêçЪŽš”‘±ÇÀÉ»¤±Öص–³Æ®™™˜®µ™‘’‹˜¨§¯¸¶²¸ÉÏÏÔÏÅ´¦š“‹‚|nn}Žœ¦§¡”™dVh†‡’’—«Á»­£‰}ˆ¨°¾ÁÃËÐÏǽºÊÔÒÈÉÊÇ®~’˜ˆŠ• ¢Ààëïðïññðñòôóõóõö÷ø÷øùùø÷ùùùøùùúúøùùùøøøùûúùúûûúúúüûüüüýüûüüüüüüüûüüûüüüüüûøøûüýüûüüüýýüýýþüýüûüüüýüýýýýüüüûüüüûüüûüüúûüüûûýûüüûùùùûûúüûúúüùùøøùùøùøøôõñêÞÔÓÐÉÀ³¥ ±Íéööøùýýüúøøøùùù÷òêÜÇÁÏàëïîçÙÑÍË»¶ÁØÚʱ¡¯‹`RLSXi¼äøüýüûúöïðñêÚÏÁ¸«›“ »ÚçêìÞÊ´ÐåíìîîëÞ½–¢×èëíðìçÔ´˜Ž¯¿±†OMw\:PˆššJ + !$'!4/ Lpxjjomtlh]ktx„€ˆ•¡ª§¥¡Ÿ«¤˜‘†€waYMPYa^ryi2 3YkŒˆ}‡’—Ÿ˜ƒ¡ÎÚÚØÖ¼¡¼ÙÜÜàáÞȯ·ÈÉÁ¸´¶¶¥”™£¤’zcWg~Œª·»¼¿ÌÒËÇǽÂÝãßÎÀ±ª»¯ªµ¢_/   + /ED?$  &DVUM9;GO[[_L;>H\ipwmfguqaSEL[gjo`VR[jiiaYb‘”’––˜žœœ˜šž› œ–—˜š•“™––Ž‘‘‰{ypZ;  !.GTUR[U\eejg[Od†‘’uhkz…}w`:+5apbg^N:7*# +     + GLJJGDC>:22.% +&,(&#-.#!(.+0:MWM;)+7JUN<'&;Q_I&).-++-;>95.$ " "$-9B\x}zwrX9%#*6?@@EKTfx†‘‹qN2)("')+& (A@HRYXcef_ZY^dllefpvz{qgMTB??4)    + + + +    /AC=3)&-+%'*(%%!## $)(/1-2.))&')1??;53370+3;;:5048:41"&-3@AD@?>FIHJ?@71,/1332)1OgY>52668>=9.2;FBTaC;@JVRTK9?JWfo~vnjuxnMJAVgsvhcN[ekjcX_wŠ¡Ÿ˜›¢¢   Ÿ¢¤Ÿ›ž™ššš˜™œš‘’˜”‘ˆ‡sL,  (8P\_aPWZdjcZIVt‹Šƒspuƒ†€~iF,$MijqcQA1#$    HGKNLLH?6,+? #%!!%#/-2#*-0(/@JC/#&3APP8%#/J_O)  #+,++-4/( """$/*47Hirph[C%*0;9:9;BF[vŠzR-%%#&(" 2BFORPV_db\[\dlnhdgmv{siTHDB:0-        + + 4BJC2!.+')$%&&# #"$'!#&+*054*&"&&)8=:5,787,036669636853#%16BD?;>=EDEE@:62),7430'2Rh_F5402@91#"!# +t¾Ð×ÕÖÖȺhe_l‹Œmjup~‰¡¼ØÞÞÇŸ±×æèêìîïïïðïïííîïíçѧŒ•œµÈ¾Ãº¥­ÔÛµ¢¸Ä¯Ÿ’•ª¶—”ƒˆ¡´²Ážº³»ËÑÒÕÓÁµ©Ÿp~Ÿ–• ¥ŠŒbPdƒ‘‘ŒŒ¨Á·¯ ‹ƒ}‡¤±°±»ÄËƼÁÅÍÔØÌÀÇÊ¿©‘~„‹Œ›¢°Ïäêïðñïðñòòóôôôõõø÷öøøùøúøøøøùùøúùùùùùùùúùùùúùøûùùûûüüûûüýüüüüüýýüüüýüüüüù÷÷úùüüüüüüüûüýüýýüûùüüüûüüýüûüüýüûüüýüüýüüüûûüüúüûûüùúúùúûúùûúùùùø÷øøø÷øùöóñêßÕØÍÈźµ²¶ÅÜìñôùøúüýùôîóøûúøõëÚÏÂÊÝëðïéÚÎÏͺ²ÇÓÆ­ ©Á¸‹bNIJO€ºäñúýýýýúôòòæÐÁù³ª ¤§³ÎÛßâÙÁ·Îæëíìêêá¿™¤ÔèìíííçƈgŒ­¯šfEGtw];F~žš‹A $#%,'&MsmkhrvhhkgauŠƒ€ƒ†‘¡¦Ÿœš¡¥¢˜’‰~xeWU\^bar~]2 *Ycp€…ˆxnƒ‘Œ“}™ÂÓ×Üß˧¶ÐÖÕ×ÚÕî±·º¸³´º·¤’œ£“xj^dvˆ¡¾ÀÀ½ÇÓÐÎËÊÒßèßÍÁ½°¹À¹µµ\*$  #)>B;  ,0DUI@9;KT^f\HHENcpporiikr`J;Qnw~ygOR[flnaYdŒœ¢ ¢¤¢¥§§¤ ¡£¤¥¡¡¡¦£¢¢ž¡Ÿ˜™Ž†€W,  +!.H`gbTTXgea\HOj„Š}ktz‚‰~qS((=BB=?@E54/),8965)852:DFIEEKINJHJLFKDJGUVVSOIG>>A:6.))$* +(xÃÑÕÖÙÔʾ–hb`f‡‹mqr„y‚ ½×ÝßƘ®ØæèéìïðïîîîìííëìëèЦŽ“žŸµÇ½Ä¶¢°ÕÛµ˜¶Ä®žš—®¶’—˜”Ž ¶´ÆÓ±ª´ÀÎÒ×Õɾ®£–}‡›ž“ŒšŸ ™‹‹kWg’Ž‹¨Á¶­£‹…|Ž¤¯¬³ÅÌÇÁ·¼ÇÊÐÔÏÀÃÌů~Š‹‘š­ÆÝëíîðîïðñðñôóóóôô÷õö÷úùùùú÷÷úùúùøùùùùø÷ùúù÷÷öùùùùøøùúúüüüúûûûûûüüüýüüüüýúõ÷ùúüüüüüüúùüüüûûüúùüüüûûúüüýýûúûûûûûüúûüüûüüüûüûùúûúùúùüùøùüúøúùøùø÷÷ôöôóòïèÜÓÒÎÆÁ¶³´ÂÑâíôùùøúûúöïïôøùùùõìÞËÄÊÜêððëÞÒÌ̽°Ìѹ¢¢¼Å¬…gMLIeŸÓéñúüýýüùôôîÙÁ¹¾¹²­¨¦©·ÁÍØÕ;­ÍäéìëëçܹŽ¡Ñçëíêêã¼kZƒš bKFfwa;/'%!!08:)"'0) #,74+&%"#"   "$Edn]># +  *32-%):J]WNMQSWRA55FV^G/-'1."   +   + +   KCC?:F==?><=1'+3/4216Le_C>66?>CI;45=AFQ?CEJIPJIKKNHFISOUPMPI7K^ehcZDQ_mljZalŽ˜ ¢¥¦¨¥§¥¦©¥£¬ª¢¤§¬¥§ž¢¦žŸœ“l< +  0U]eh]IYegaVMHe€‰Œ†rcn‚~|nd;"'?]lc\C,     PTJA@GA?3%    +  #!        )85& +  + + ##%6HB2)196* %25,",  + + + +    6FFE6*%)&$%-&(.# "&!),:4120/#+(),424*02563,38DDA@C??>C=892)-=11215N`TC<536@ABA73:<@C@:DJHLCINVOHMQXOHKLH@EF<60+"$)$!   &rÁÑØ×ÖÖÊ»“`_cu”pppp}ƒ}¡½ÙßàÈš¯×æççëëíííììëìêëìèãÑ¥Œ‰––ž³Å¾Âµ¡°Òض•³Ä«™–œ¬¬“•’‘Š¤¼ÆÓÙꫬ·¿ÏÙÙο¼¶¥‘‡›Ÿ•Ž‹”ž£¥ŽzgZ‚‘•–¬Á¸®œ‚Œ’¦±±¶ÉËÉ»¬±ÁÄÆÏÎÊÀÃËÀª˜†}Œ’—¢´Íàçéêêëéëëíëëìîîðîðîïîððïððñðïñññðóòðððññòóòòóöö÷öøø÷ù÷ùùùú÷ùùùù÷øøùø÷úùõïñôöøø÷ùøùùø÷öù÷ööö÷øøööù÷÷øø÷öõöóööõö÷ö÷öøööôöøõöôõôöõóóñóôóòòñòññòñðïíïíìæÚÎÊȾ¿»¯ª¾Óâîòûýúöôöðéäêï÷üýûöïãÐÄÇÙèðòêÞÐÎʼÈ͹¥®ÈÔÅ¿¯ˆgX^ÌãæðúýüüýüøòâÀ¤¡¸½¯±¨¨©­»ËÒÑʼ´¿ÒÜßÝÜÝÒ¸‘™ÆÞâåæáÚ©VKS_nw]FGh\:E~–¡’G #!$"+/- 9nnnqplfe\]l|Œ‡†|–¢š ¡££ž—…tcVRYchqom]B %Qhjz|~|u’’‡wŒ¯ÀÊÒÔÀ’—µ½¿»½¼®™šžªª©­«©Žš¢š‡pc[j€ ºÅÁÄËÒÖÑÎÉÈÙáØÁ½´²ÃÂÈŸ])# +  + *5EA&  + + /?ORF72>U[aVB:DWfqnhTDYhV=6ALRWXO;5Ccoqn^E_„›™–š™ ¢¤¦§§§ª£©§¨¦¤¥§¤¤£¢¡Ÿœ›—‘ƒsH   #AQb`EVVO.     NQKJDAG=;) +       + +    +  +   '/) "  +     +  + 4?FD:)$'&$($$%!!# #$ "*/1186+&(',)316520:;-,5??::001;;4' "(,6=B@<JD82.(,;45/';Q[N=8<6<@>B>48@;?>>:ABKIGJIQOMLVPVRRMMNE>:=.+&)$$ +"|ÄÒ×ØØÕÍ»f]ch~Žplns‡y »ÕÛÛÅšªÕááãèêêêèèèèèèêéæßÊ›ƒ‡”•œ¶ÄºÀ³œ°ÎÏ°–´Ã«•–¥°™•“¢µÅÕÙμ­¨°´È×ØÎÂÁ»ª™™¥œ’‹ˆ’¢¨˜€pr„‘œ›§¼¿¼ª™‘Ž…¤²²½ÉÊ¿³¬¸¾¾¼ÃÊÉÁÁÊŲ ‹ˆ‰–˜ªÂÙáçèååâãäåääæéêéëêééêèêéêëëìëìíêêììëëëíêêìíîíðïîïðññòðñðòòñòòòòîïïïñðïðíèçëíîðïðïðïïïîïíìììïïîîðñïïðííìëëìëîíííìíííëìíììììîìíëêêéêéèéèæèèæååæåææäãàÚÓËÈþ·¶®´ÃÚèìôûüüúøòíæáãëóûýû÷îâÔÇÈÛêññîâÒÔÐÉÑ¿´®¼ØÖËÓÁ˜hSl¤Õæêóüþýýüúöíظ¢ªÁ¾²²¢Ÿ¦°ºÇÉÍõª¶ÊÓØÖÓÖδŽ’¼ÓÙÛÜÚСU?CTmuaIs“ž”O"$#*$ "&60 Cqrosumpg]esƒ…ˆˆ†‡’›š¢¦ ¤¥š“Œƒ‚vm_LXfimnja?   &H]lw€ut›•‰‘Œv‰¬¼ÄËѹ’•¬·¶³¶»­”Œ  ¡¡ž§§œ‡Ž —lbXav–ºÇÇÆËÓ×ÓÎÉËÖÞÓ·µ§¶ÃÂÊÇ®”T2!  + + &5]H0*.3892*!"-NkwnO9Hp‡ƒ€ŠŽŽ˜—š•••“———Ž”’•†‚ypkbY8  3CIE7+2KQMA*%7YjoZA;LVWL8, 088.     NNMIHIDC?.  + +   +     +  +  + + + + + + + + +       +  +  + + + + +  + +  6JNC5&(" &$"#!&!%' &-/5;73+(%%##&061-004137:88;38174/'"*/9@D>:>AB?@A=4.)()3298+7M]Q;=9=<=BD758;:B<<>SwgD9fd8.k™¢œY  +   #&%"#%/3AiqplqunlfbdxŒŠ‚€‚‡’›ž£¨¨¨£›—‘†qnWFZeZP``hD  "Lfkn‚}‚—–‹ŒŒ‚‡¤²¹ÃɶŽˆ¡²²®³´¤‹‹’–œ‘––•Ž˜ ”‡gZ]kv–»ÄÅÄÂÍÔÖÐÏÓØØŲª£¾ÅÇÈ¿¢^4$ + + + %"   +  #*+",& .80=465/)(/037=>:<:?>98;732+,535+(6N\Q=57:;@@C:4246?9:;9CJGFIOJFJMKQRMNGBDHJ=>0#"  + +…ÄÓÙØØ×̹`ddh|ntqƒ{‰™£´µ¯›ŸºÂÁÃÈÎÒÒÐÏËÊÉÌÐÑÈò”†Œ‘–¡·Â¶·©•£º¾£­¸©”’¦©‘‘—”‹œºÎÙÔÁ¬§®¤«ºÅÕÐÊÊɾ¤ –” ¢˜ŒŠ–›œŒŽ™ ž–«Áþ³¤•Š‰‰ °´¿É­–˜ªºËÐƺÆÊÂÂËı£Š„ˆŠ‹œ­·¿ÂÈÊËÌÎÏÐÓÔÑÒÒÖÖÖ×Ö×ÙØ×ÖÚØØÙÚØÙÙÚÝÚÛÜÛÝÙÝÞßÜÜßàÜÝßáàÞàâÞàâàâäáâÜßàáßãããàØÚÝàææäãâââäâããààáâáàâáâäãâããããààáãáâààáâßàààÝßáàßÝÛÞÝÜÛÞÝÝàßÝÜÛÜÜÜÙÛØ×ÖÔÓÎËÍƼ¹·²­­¾ØéíìøþþüûõíäÛÙÏ×ì÷úùöíáÐÂÅÖäïñìÞ×ÔØãκµÐàÚÚäéÚ¸Ši‹½àîõ÷úüüüû÷è˳¢·ÊÒʽ±«£«°µ»½Â¾¶¥²ÀÇÊËÎÍÈ­Š‹¶ÊÐÖÔÐÆ›R?B`ŽfI?bj85iš¤žU  !'!*&)+)5. +=ejocinhhfaeƒ‘ƒ‰„zˆ’››¤£§¥§ •‘‰~}hQT[aWTblfK" +  Fdmsws}‚ˆ–˜‹‡~…›±´º½§‰…“§«­±³¦‰ˆ™–‡Œ‰‰’˜“†r\Whr“µÄÁÁÁÈÔ×ÓÕÚÛл·­«¾ÈÈǺ›‰\7#  +    +    $! "!"   +   KGE?BCA?9%"#s     + +     +  + +     +  + +  + +  + + $    + + +  +   + + + + + + +     +   4@B?5)$&&! '*+(% "##)"#)&,196-&&%"$)(61%*,./-*38?;8423334) .//8>=99:BA8?;0.))*:42.%6O[K:375@?<@<:>5<>=9?>AGJKBCPQOPLU[OGEJFB@66-/ $! + ,‰ÄÒØ×ÙÕÈ»“c]_g{Šrmpqyx…“¡®±¬˜…¹ÁÀ¼ÃÊÎÉÇÈÀÄÅÉÍÍÊÇ´“‡‹’’Ÿ·Â³¶§•¤¼¼Ÿ‹£«§•Ž—¤§–””•‹Šœ½ÐÙÐí¡¨«©±¿ÍÑÌÉÊĬ¤ª –™ ›ŽŠ‘—ž™†‘š–œŸ—©¾Ã¿º¬Ÿœ˜Ž¢²¶»Á»¥Š“£´ÅÏ˼ÆÈÃÀÊȺ§“ˆ†Š†¥µÁÂÃÊÌËÍÍÓÔÔÖÓÕÕØØ×Ú×ÖØÙÚÙÚÝÝÚÛÝÛÜÝÞÝÝÝÞÜÜÞßÞáßÞßÞÝßÛÞàÞÞáâââàßáßÜÜáÞàáßáÞÙ×ÛàââàáÞÞÝÝÝÜÚÛàÞáÞÛÜÜßßààßáßßßÜÜÝÝÛÝÝÚÜÚÚÝÜÛßÛÞÙÚÚØÙÙÖ×ÙØÙÛÙØ×ÔÕÕÔÑÒÓÑÒÌÇÆÃÀ¹µ±­©°ÂßìêìøüýüûóëâÙÔËÕéøúú÷ïâÐÀÀÒåíîêâ×ÒãæʼÆÝÞàçëëݽpˆÇæðóöûüüýûòáÁ¦¥»ËÑËÁ´¨¨«®´¼Çɶ®±º½ÁÀÂÈįƒŒ²ÇÏÒÎÌ–LEUi‡‹gE>d€qC:g—¤¢\ +     $%$"#+2 4golkihdnegk}Žƒ‡†ƒ‡’–¡¢¨§¤¡•Œxyc]WX\\\munB #>Qpzxy}~Š—•Ž“‰q€šª­´¹ †‘¡£¬¯°«”‡Ž™‰€†’‰†Žš™ˆnaWbw“³ÄÄÅÆËÑÑÕÖÙØƵ·¯±ÁÅÉȶ‹gA!! + + + +    + + + !     +  +    IBBAI@=;6"(/  + +  +     +    + +  +  +   + +  +  + +     + +   +        + +     7GJG8# '&%($#"'!!!#**..891,' !!'*..(,/+/.-5>DM522767(#"#+-56;9<76IOC-($'.**"&(# #!#0217?00( "%331&/1-0.7=:GH:685=/,! )+25>@<8=B=<@C5/+.*152*$.HRI@6663-.108<366:AIHHGJGGNTPKHMEBBEB950$$ "  1ƒÄÏÖÙÙØ˽’h``ey†u|‚x†y„œœ£Ÿ™Š¯º³²µ¿¾Ã¾¹½»½ÀÆĽ·¤‹‰™˜ª¿³­©™›²´£›¦™‘’“£ª››–‘Œ ÁÏÓѯ‹ «¨³¿ÉÊËÎű¯·°¡“–Ÿ¢•”•¢£—™¥š˜–§»À¼·­˜š¢š§¶ÁÇÆ»”†™§µÂÍÇÂÃÊÅÇÌů˜„yŒ ¨­´´¸¸¹¾¹½¸¼½½½½¿¿ÁÁÂÃÂÅÃÃÂÆÃÈÆÇÈÇÉÊËËËÊÌÈÉÇÌÊÈÉËÍÊÇÈÊËÉÉÌÐÉÏÎËÌËËÊËÎÎÍÐÍÍÍÉÊÉÉÇÊÏÍÏÌÊÍÐÏÎÌÉËÎÌËÌÎÏÍÌÏÎÎÍÊÎËÐÍÎÍÉÏËËÈËÐËÍËÇÇÊÍËÉÊÇÊÅÇÉËÈÇÄÉÆÆÅÄÁÂÁÀ¼Â½»º´®ª¨¢¢´ÔèìéðúüýýûõèÝ×ÏÂÈä÷ùùöïãÏžÐäìïêàØÜÜźÌááâïôöóêË•~”ÊåìïùýûýûôäǨ§½ÈÊÌËÀ¯ª¥ª­¼ÆÎÓ˽®®¸Â¾Â¿Á«‰ƒ­ÂÎÌÆÆ×UGNnŒ‹iF5dŠ|D5aš«¥d&  $-,())))  1^imquwk`]cp‹‡ƒ|„‘•Ÿ•Ÿ¤ œœ‚}ƒrie^_jnvnjE  +$@\~‰‡ˆ~ƒƒ–ž’“‹uq”«®°­š„Œ–£¤© Š}‚€€tprŠ‡xŠ••Š~hT_w†š»ÆÊÈÈÆÑÔÔ×ÏÃÀÁºÅÎÉľ ¦¥u=$  +  +  + +   + +  +    + + +  +  + + +      + +        + !       FCEEC>>;3#  + + + + + +  + +      + +   +   +   + +  *. + + + + +  + +   +   + +  +   +        )ENK?0 ""))*"%(!$! #'35780-- '1-)(-.,1148A=<95440*,%"$'-354776:?A55?053(3*/20-.HOB8502<<<>6/1.-;847;HE>GJJIJNKQSLDFJHFEC=5'*%  0ˆÆÐ×ÙÙ×ɼe^]g„okxuyq€˜˜ ›–’†š¯­°®®¸½¹´´µ³µ´»·¶³‹†…‹“˜±¿·´¤ª«š‹ªœ—Žž¢šœ“Ž‰Š¢ÀÌÓͽ©ŠƒŒ¦¢®¸ÂÉÊÏÈ´·¼¶¦••£œ’™©¥ž–ž¦™™ª¼¿Àº¨˜›¡«¸¿ÄÄ·“‚†œ¨«¿ÎʺÀÌÇÄÇƶ†“£©¯±µ¸¶¶º¾º»ÀÀ¿À½Ã¾ÀÀÀ¾ÆÄ¿ÄÇÈÇÇÈÌÈÆÆÌÌÅÊËÈÉÊËËËÈÌÊËÊÉÉËÊËÎÌÌÊÍÌËÎÏÎÌÏÐÒÏÌÎËÊÏÏÎÎÄÊÌÏÌÊÌÎÑÊËÍÍÏÎËËÏÐÑÍÊÍÏÍÌËÌÓÐÍÍÎÐÑËÎÍÍÐÐÎÒÎÌËÊÏÈËÈÈÊËÊÆÉÉÌÉÈÅÅÁÃÄÁÁÁ½À¹´´µ±­¦«·×èéëòùûýýûõìâ×͸ÀáóùúõíâÐÅÀÌßëêçÝÙÞÑ»¾ÞçäéñõöõìЦ‚“ÉäìñúýûüùïÛÄ©ªÂÌÌÐËÀ²±§ª²µÅÐÐËÁ¯­ºÂÁÁÄÃÁ«ˆ„¨ÆÍÍËÊÀ–S?QwŒ‘lC6_ˆ}B0k£§ž`   "$"#'#.8-+,\lrsywh`cds‰Š‰†Šƒ}‰•›šœžŸ›ž”‰ƒ‡vh_P][gtlhQ$ +;`…’‚}„–¢›”€z|Ž¡¨¦­˜~‚•—¡ª¢ƒr‚Š€wlg‘‰u‰•›’}j_aj|›²ÂÈÉÇÅÉÌÒÙÐÌÓÍÃÈÍÇø©«¦w@! + +  $'!     +    + +    +     +  + +      + +          + + LIDEB=83,  +   + + + + +   +      +    + +  +  + + +  (  + + +   +         +   + .HSI?2 #!&%,%"$!"*!#""#%*1861"( &+-.,'&/.1/+379:558:04+!$'"-06==2/7=::<:4:2.28234-4>KE<1578FGB700-9C42:@J?APQFJJHHLMLH?CHB@?40*-& ! + +~ÄÓÙØØ×ʽ”ge]a…–xkom|nz›“™Ÿ›”‰š­«¯§°¶º»¶°°³°³²´¶²Œ…‹•°¼µ¶«•™«¦”‘›§Ÿ˜‹œ¤›—–„‹£ÂÎÕ̾¬™ˆ¥ª§´¼ÆÌÍÆ´µÃ¹«£‘– ”Š”ª¬¤›—šžš§¼¿½¹©™–œ¥¬µ¿ÁÀ°•}ˆ¡­­»ÌÎÄÂÊÈÃÃƽ«š–¡¨®µµº¾º½¾À¿¾¼¿ÄƾÀÀÁÂÁÇÆ¿ÄÈÊÉÊÉÊËÍÎÌËÑÌÊÌÎÈÐÐÍÎÏÏÍÎÐÎÏÍÑÑÐÒÌËÐÐÌÓÒÒÒÓÖÒÐÒÕÑÓÔÏÒÐÐÐÑÐÓÏÎÑÖÕÏÕÒÑÔÔÓÓÎÐÒÐÓÕÑÓÕÒÖÖÑÐÒÓÐÑÕÓÕÓÔÓÓÓÔÒÒ×ÐÎÐÓÓÒÐÍÌÑÍËÍÉÆËÊÈÊÅÃÄÅ¿½¾¾º²­²ÂÜééîñöûüüúòëçÜÌ·¼ÜôùöóîãÒÀ»ËÞæéçßßÜʵÏëèëðôöøöîÔ­†’ÊèëðùüüûóäÒ³¶ÇÍÎÐÉÀ·¬§¨°¹ÇÔ×ÒÄ´¯½ÇÅÅÅÊÄ®Š~ªÈÍÑÐÎÄ X?Us“‘m@=jŒ‹D4m“˜•\ !(#%*4(ZjpnyufYZgp‰Œˆ‡„‡“’–—ž›šž˜ŽŠ‡ˆ‘bYZ[afxrnL! + + 9`}“’™›”‘ŠwyŒœ££¢˜ys‡•–¥ª¡ƒ|s{ohv†‘„x„–‘r_W]kˆ²ÂÅÅý¿ÈÒÕÓØÝÑÇÐÍÄö§®©|D# + + +  >TUTI1  + +  +     + + +  + +   +     +    + ! # + + +      OOFFHD>9&  + +  +    + + +     + +   +  +  + %+ +  +   + + + + +  +  + +  +  +    +    8M\JA* "!#&)# $%$#"*/+892+$+#($-0440//4./368:252594*$ )8H713:99BB3(42?95.3=@A:FJEPLMJNLIFC@BJE?:7((#" + +.‚ÄÓØÙÚÕʾ•fgbi„qorp€w€›š›Ÿ–‰š­²«ªµ»¼»¶±¸³³´¸ºµ®‰Šˆ™³À±µ¶«¢¬­œ–¢œ’“£ª—™—‹Š¥ÅÔÙ̾´£’Žž¦¦­·ÂÉÎÅ°¸Æú¬™““™›‘’¦®¬§—•œŸ©¼ÂÁ¹¨™˜›¦®µ¼ÂÁ°Žt‡¢µ³·ÀÏÏÆÈÍÃÁÈ¿¶«£©±±»¼»¼ÃÅÁÄÇÄÃÅÆÇÇÉËÉÍËÌÎÉËÍÍÐÓÔÐÐÒÐÑÕÓÕÒÕ×Ö××ØÖÔÖÕÕÖÖÓÒÓ××ÖØØÙÔÖ×ÛÚÛÜÝÙÜÙÚÜÜÙÖÔÓ×ÜÙØÙÛÝÙÛÝÞÙÝÚÚÙÙÛÜ×ØÙØØÜÝÙÚÙØÛÛØ×ÙÙÜÚÚÚ×ØÛÚÚØ×××ÙØÖ×ÖÚØØÙÔØÓÒÓÓÒÐËÊÈÉÇÆÅÇÄ¿À¹´¹ÈáæéîññøûûõëéäÚϺ¾ÛðôõóìßлÆÙæìçáÞÓ¿½âìêðòöù÷÷ñÞ±™Íæëñøüü÷ëÒɸ¼ÊÍÒÔÌô¬¨§²ºÌÙÛÖʲ°¿ÉÊÍÊÉųŠ«ÅÎÕ×ÑÉ Q>Os’”lC>a‹ƒF4k‰‹‹Z +  + ! %-5" +  )Wlkfv|h^^ow‚Œ„Š…ˆ’‘’“’˜¢ –’‹‹•wid`aifu|kO 3:[ƒ•“‘†Š–›•’yp‡•¡¡š…w…–““¡›Š€sssoswŽ”ˆ{‹“•ŠpcV[e|žµ¼ÅÉþÀÈÏÒÑÚÜÎÈÏÉÁ¾°¬­§v;& + +   'HjrxdG/*---.  $  $ + + +   + +     +!,4 031'-LUH'(4*#$.5:?:1&(056'!  +     OKKEED?0#    + +      +  +       + + +  + +  + +      + + +  +      + +  +  +    0PUL;, " "&&(#$"! ##!!(&&474,$'((%-062'0;55179=833643.)%".:<;45;>B=@822025;33+/4DLD6476;E@4. 4844-&15@DC@CCNNKMRQNFGCDDF:85+($!  +.…ÅÓÖ×ÙÔɼgdbf~Œspuvƒ‹œž¢¢¤“‰™²·²µ¼½ÀÀ¼½¼¹¹»À¾½µ›‡‰Œ‘›²¼­­¬¯°°®ŸŽž˜”‘ŽŸ¨—’‹Š¥ÅÓÖǺ²¥˜— ¢«¬¸½ÄÎÅ®¹ÇȽ¬¦™—››œšª¨¬Ÿ‘‘ª½Çö¡‘–•ž®µ¼ÃÀ®‡p‹¥¬­¯½ÏÐȾÊÉÄȽ¶²¶¼¼ÃÅÆÅÊÐÍÌÑÐÎÑÑÓÐÐÔÓ×ÓÒÕÓÓØ××ÛÛÙØÙØÙÜÝÜÙØØÝßÝÜÛÜÚÞÝáÝÞÞÞÝÞÞÜßâÞÞßßáàáãäääàåäÞÚÚÝÜÞàßáâãäãàââãåââääãááàßÝßãÞßáÝÜßÞÞáßÜÛÜÜÛÜÝÛÞÞáàÝÜÛÝÜÜÛÛÛÜÙÛÛ××ØØÖÕÓÑÑÐËÌÉÊž¹¹¼ËßãçííîøúúôêéáÜʵ·×ðòôòíÞÐýÆØäèæâÛŵÉâéïõøùùùøó໑¢ÔæëïúûúîØÎÒɽÀÌØØ×к°§¨¬¶ÐÜÝÚ͸³ÃÌËÒÒÌǯ†ˆ«ÆÏÑÕÔÌ£V;Ns’”uN:dL5R€ŠŠX    + !!!//"  UekmvtjaZh|‚…‰Žˆž““’–žš™˜‹Ž˜—whb`dhpvu^B!@]€–—”Œ‹‡š¡š—Š}r‚“£ª¬Šz}‹’–”“khlnlir‡Œ†v‹›•“|b]V^}®¹ÇÌź¾ÅÍÌÏÙÚ˿ȼ»²®«žp5 + +  + ,L`lzlS6?HKQB7#3CD>>6*0711#*463(/:G><2;CF9- %1 '1+*0! + '*7?-9DTcY<,6JdsgaoŒtQ@>IUcX979:AM[WG95-3<:64*"    +NNHJFG;.!  +  + +  + + +   + + +      +     + + +   +         ++  + +  + +  +  + +    3MULC5&"))$'   "$! '#072+*&'"!$020$)131..38>@2*,-0.-$"&-479579?>>@54-+.5512142BMC5789B?;;3,,5:-''2:;BFECGJKOQKMLKIE>BF=64//  + -†ÄÏØÙÙ×ɽ•fcak‰qoqwwŠž£¨ª©š ¸À»»ÄÆÈÆÃÁÃÃÄÅÈÊǽ§…Ž“±¾µ­ ¦¶¸³šŒ”¡š“¡£˜”’“¢ÅÕÕÀ·¶«Ÿ«¸¨¥¬®µ¾Æ½§±ÈÊĺ²¥œ›œ“‘ž¬¬©š‘™§½ÃÁ³¥š‘œ°³¸»º¨‰vŒ¡¯¬¬½ÍÐÉÃËÌÄÄ¿½¸·»¿ÃÅËÉÍÍÐÒÍÓÖÒÖÖØÖÔÕÖÙÚÜÛØÜÛÜÛÝßÝÜÛÛÞßàÝÞÞÝâååäâààääãäåçæäââååäãääæåäåçæãæçèèãÝÞáääåæäæèåææäåçéèééççåääãååçææçäãâæåääàáâáããáããåãåæàÞâáâÞÞÞÞßÞÞÜÛÝÚÛÝÚÙØØÓÐÌËÌÅÂÃÃÑâåëíëï÷ûüøïëæÚ˺µÒïòóñîàÏÆ»ÆÖäèçãÏ·³ÓáëöùùùúùùòåĨÓáæðúøðá×ÝÜÑÂÅÓÛÜÚÐŶ±©¥­·ÍÛßÞй²ÅÔÖÖÕÔÇ«‡ªÇÖÔ×ÕÒ®[;Mz’–rQ?gS:W{Ž‘V    ! +5-Seihtoj`cqz…‡Š‡”““‘”¢š’˜¢ ”hcfgtxkb[@! @`y–›š˜’ˆ–Ÿ‘wm}”¢¨¬ ‹o{‘‘Š‚ydYVgjgip}Œ†‚’˜{dYSSu•«·ÇÅû¿ÄËËÏÑÔǵ¿½»º±¯¦™m=.     .I_nsqWKJLVWQF1)6KRYZLGLMFA58>CB36;KQXPP`mfiZ8!!3UjmbR]f_MOcdR5!,74.*)+24/+**0FM<1/5=@A>>5*8@+-#!/<@=FDFIEIPHMOHHJC>EEH:66' !    +ÁÑÙÚÙØɽ™kacjwwsq„w‡™¨¬´®œŽ¤¹ÄÄÁÈÍÌÊËÊÈÈÊÍÓÒÍŪŒ~ƒŽ’œ±¼µ½²¤¦°±œ…™¤—ŠŒŽŸ¥™˜’‰¦ÃÓÕź¹¨¨´Ç¸ž¤¬¬µ»²š¯ÆËÉ¿º­¤“‘™ž’—¢©¬¥™˜©·½¼±¥›’˜ª´¸¸¶©}…¡²¶²¿ÐÒÌÆÉÏƽÀÆÁ½ÅÆÊÊÌÎÑÎÔØÙÙ×ØÛ×ØÙÛÚßÞáÞàáàáãåãäâãââåãääääåççéêçæçèèéêêéèèççêçéêéééëééêééêëëêçááãéêèëéêëëêêééëêëëêêêçééêëêêéëêèèêëêéèèèèèèééêæææçèççèæåæâåçæãââãâáÞáàÞÝÝÛÚÙ×ÕËÉÉËÖãéëîëïøûýùóíçÚ̲²ÑíòòñëâÑÅ¿ÀÔßäçÚIJ»ÙáñúûûúùøùôèʧÇÒãòõðâÞêìèÚÇÈÕÜÞÛÔ¶²­§­´ÉÞãßÓ»´ÊÙÛÚÙÚ瑃®ËÙØØÜÔ±j>Op‘œyM=b„zI7`y’b  + +! $"'6' ;Xjpqtnel~{‡‡‹ŒŒŽŒ’– ¡ œœ¥§’xfikwvacX? ?Uy—›•Œ“£¢Ÿ˜‚nzœ¢ª® Š…“…nbUEJVdadht†Šz€‘—”ycVK]m§³½Âú»¿ÇÅÈÌÍ»­Â¾¼¿´®¥—wD+$ +  + + +  !AfpvrlNDP\[a_F/+D^c`]KLZWJ>>HBG:;G]jgcbmƒq^MGPXUZh‚…{idky‹„|ƒ‘˜‘ƒj\^staIC4'%' ",&#"! . " !1,05.'"!#)4/)$.2300697576+01/2(!(*359=59;858:501'*5;/)105KN?<529DE?<72/-2,#'18@HL@CKNICELFDIGADAIE803*###%   (‚¿ÍØÚØÖɾ”he`c…Žp|qv‚z‰¨°¸· ‰£ÁÇÈÇËÏÏÍÐÏÍÎÍÑÔÑÎÇ©Š†€Œ•˜µ»¹Éį¢ª¯›‹¡«˜‹‹ž¦–•›‡¨ÂÎÕÁ»·©£¶Í¼”‘©¦±¶°¡¬ÆÍÉý´ªœ–›•‘—¦¯ªž—©·Á¼¯Ÿš§··¹¹¤Ž{‡Ÿ±½ÀÈÙÓÏÇÆÍʽÂÄÃÆÉÅÊÑÏÕÔÕÙÚÜÛÚÝÞÝÞÞáâãâãääæåâåèäçèçéçåçééçèèéëéêééèéêíëíëêëëëêëëìëëëìîìììíìíïïéçäçêëìíîïîïïïìîîîîîëìêëëíìíììîêêêêëëìëêêììêëêêêëéèêééêéèèèéèèèèææäæäæäáåãâÞÛÜÙÕÓËËÍØãêìëëôøüûøòíâØÉ°®ÎìóòôíáÑÅ¿¿ÑÜäàϸ²ËÚåôúüûúøùùõìΠ ¼ËçóðæÞçìðêÞÈÈÙàâß×ÇÁ¶®­¯¶ÉÜàßѼ¹ÐÛÙÜÛÙÓÄ—¬ÑÚÚÝÝÙ³aCW}Š˜LCbƒyK/Ru“a + (!#$5  +&Pmrvnegpt|y~ƒ‡‹Œ”‘‹Š’Ÿ ž¤šˆlmqutuj_dQ?% 6Rr”—™““¢¢¡›…~Š—¥©­ Œ‰Œ‰yoi`RDAOTafgv„‰{”“Ž‚oPG]l‡ °·¾»³´¹¸¿ÃÃų¶ÅÄ·«¢™wD.  +!1@[mt€hNEMZddcO<7DHBI:CFPVU`w…‰„pac{~ˆŠ…““”ŒjZaenxiLH=>0-'0550,..>;>-134-(-14>E@@GMKKGLJGEDEBJI@?724,&&! !  + +/‡ÃÐØØÙÕÊ»bi\e††qvvs„{‡—§·½¾§‘¨ÇÐÍÎÔ×ÔÒÓÓÕÔÓÓÖÕÓË®Ž‰‹“š´½¾ËÒɲ£¥¦™¥­œ’¥¢“˜•ŽŒŽ¤ÂÒÔ¼º½ª£¸Ð¾—¡«¬¯²¬­ÅÏÌÇÀ¹­ š•˜•’“š¯®©˜œ¹»¸«Ÿœ’•˜¥°º¹² ‰}ŽŸ±¼ÇÎ×ØÓÌÆÌËÄ»¾ÃÌÊÍÎÐÒ×ØÜÚÜßáßâãâãããâääèææèçèèèééçéééééèèéèèìíëíííëêìíîîîïîìëëëííìíìïîíîðïððîïíçèêîïððïðððòðïñðîððïîîíîîïîññîîîííïðïíëíïïîíììììíìììëëêêêëéêéêêéèåçéçæááâßßÜÝÚÙØÕÐÑÜäëîëëôúûüùóêàÖÇ°¦ÈêðòóíâÓƽÀÐÛÝ׿ª´Ò×ê÷üýûúúùùôíÔ««ÕìëßÌ×êîòëßÌÉÝãåâÙɸµ¯¬°·ÊÚàÞÕÀ·ÎÜÝÞÝÙÙÆš‹®ÐÝÝÞÞÚ°fISpˆ˜zP;Y||@/Kw‡’Y #&!#(42 Jktqodem~w~ƒ€~‰’Œ“‰‹’œ¡¥¤¤¢ Šrijv{qsd\bY4#  +3Puœ›š’…—¤¢ —‡rœ¦©£‹…†~o`e\L=>IYaljmƒ‹yŽ•ˆiTLZhŸ­´´µ°³´¶·¼¶µ³»ÇÆÊÇ»®¡˜v?.     +#*?XorujUPQhid\Q<8DXee`OJbgZ_I@ENI9F\eivwz…ˆ„t\Ud„”‡xv}syldgjjqŠ•‹siv‰ˆ…wkWA7>AFHK]s‚€‡sd^m„’“Œ‘‘Š}aYgrpaK?7=O]`bdS<9;LN@LE_eTDKONEEBE4   WNPRSK7&   + +    +    +  +  +   %      + +       +           + + + + 7GRRKI.#*$#*!! $*%-51'##%!&2-0004495235950*0673%$$"/;A>>>>;:=<;43-,2731+2AGLA662+6=>C8059:70/7;AACBJEGQ@=922#'# .‹ÉÒ×ÚÚÔȼgd\h„‰qtzwyƒ™®¼¾Á¬•­ÉÒÏÒØØØØØÙØ×ÙÙØÚÕÌ°‹…‹Œ‘›­ÁÀÏØ×Ƕ¤¨§«±£’“£§‘•–¢ÄÕÒµºÁ¯¡ºÏÆ¡– ¯¨«¯­­ÇÏÍÇÅ¿³¦™Œ—Ÿ•–˜¡­§¤™§²·µœ–”—£¯·²®ž‚‰š©¶ÂÍÔÓÒÌÉËÎȼÂÉËÌÏÑÒØÛÜÝÛÜßâáäåæããçèççèæèéééêéëëéééêéêêêëêêîîðïîîîìîîðñòðïîîîííïîïððññòñïðñññðéèîðñòñðòòòòðïóññòñðòñïíìñððñððñðîîïïïíððñïííîîîîìíîíëëêëìéíëììêèéééèæææãâáâßÞÛØØØØÛâìðêìñøûüüõëàÔ²­ÇèíóòëßÐÇÁ¿ÌÚÚDZ§ÀÎÚîøûüûúøøùöéÕ²˜±ßéÞĽ×èîñëÝÈÉÙäæã×Ŷ±¨¦­µÆÚßàÒ¿¹ÏÛÝáÝÛÙÀ•Š«ÌÜÞÞÝÙ»oGMu”tSCH='    YSQPOH8& +   + + +   + +   + )  + +  + +  + +   +  +  +   +   + + +  + +  +  +6IQWO;-!$+'" #+/(.31/#%& &.2&%.3267/39;=5+-/3)'(%(1:<;8;AA@?=<51--650)-/2EI:5289>=?D:4279<73<;@FHCGEGIFIMED?IHBHHD=0)+- !  +  6ŽÊÐ×ÖÙÓƼcbbg||{ux„zŸ°¿Ä¾«“«ÉÔÒÔÚÝÜÜÛÜÛÚÜÛÚÜÙα‚„’œ®ÁÁÑØÙÕͶ§«³°™Š†£¨’–‘Š‘¦ÁÕÌ«º¾¯§½Ðȧš›¡ª¥Ÿ£¨¾ÏÐÊĽº³¡’˜£˜•›ª±§™‡“¤²ž˜’—š¡²³¬ªœ‰~‡Ÿ©°¿ÍÏËÊÉÇÄËÊÂÀÇÌÒÐ×ÙÛÞÞÞÛáàâçæäççææçèééèêêììëëìêéêêëììïíìíïïñññïîîïñòñññòñïîïðïððððððóòóóññòóñêëïðñðôôòòóòñññòòòðñðòññðñôòòóóðïññïðïïïðîïïîîîïïíîïðïîîíìíîíïëêëëêêêèæçååæäàÞÞÜØØÙÞäêììëï÷üüüõìàÕȾÂÎäîñíèÙÉÆÁÁÌÚÓ»¥¬ÅÊáòùûüüùùùöòîÙ²š¿ÞÞб·ÛæîñìÜÈÆÚâçåØÇ»µ¥£¨³Ã×ßÝͺ»ÏÛáßÝÞ׿uªÏÛáâßÙ¸qKMqŽ—xO3d…zI6NrŽŽ_ †E 0# $(AF$  0Mfj`V[usjWPYhq‰Ž•‹”˜Ÿ¡ŸŸš›‡ckv€ygajijbeY1  /TqŠ• ¡–Žœ©¡Ÿ…{„’˜—†‰}wxoi_VSWKLIXZirx‰ƒyˆ™›uNFWam’›­®¯±°ª¦«¬«´µ½ÀÁǶ­«›–vL/!    &.2Vn€†ydOWgkqoiU=:KY\h_W[fslWGBJIADCVlw}€Œ’‘Œw\TRat€Ž€irthdaioo€ll{ˆŒ|o]K7<>>BLMWp…„ndbg}ˆ‘ˆŽ™•’tdgjpr^H:CDYimriR855GKJMT^fL@?H@=DGE1    ^UPTQK8(  +   +     +  +       +         +    +   + +  + +  + + 0EOOL<," $ !! !#!(./73-$!!!%'',.&,06:1139@92++23*(("1876::?@A>E9,.3.12.+&'7IK:71.6>8>>345<;:605CIF<@MJHJDKGCCHCF@EC::41)/$'    "3“ÉÔ×ÔÖÓÈ»ab_f|‡s}rtˆz}œ±¿ÅÀ¨˜©ËÕÕØÛÝÛÜÜÝÛÝÝÞÝÛØЮƒˆ‘“›¶ÀÃÖÛÚÛÖ̲¥°±‘Œ§­“’‹Œ‘«ÄÒƧ¹½«£¿ÓÊ©¡¦ž¢œ“Ÿ¥²ÉÎÎƾ¯•˜ ˜Ž¢©©™……ž¯¤–—“š£¬±¯©™ƒrˆœ­µÁÍÒÒÏÆÆ¿ÅÊÀ¼ÅÎÖ×ÙÙÜÞÞßâáââãåäåèèèèèèéëëêìëêêëììëêìîìïîííîïðñðñòïïòðñôñòòðïïðññòðññóòôôóõóñóóëëïñòóôóôóôóóôóñòóòóñðññòóóôóñòðòóñððððïððïððïïïðïïðîðîîíìíìîíëêëêëëêéçééèæáááãÜÜÙÛáèëêíìï÷üüúôíäÛÕÔÍÇÕæëíèØÊÄÁÂÒÚÊ­¡³½Ãéõùûýüûú÷ôóïÛ±œÃÛÎÀ­¶ÍáëîíâÈÁÛåçäØȽ´¦£ªµÂÓÜÛÓ½ºÏÛÝÞÜÞØ”}¯ÎÛâàßÝ¿vEGpœ~M;]…S4Ml‡h + +0. -.' 2ONFGOYSPHCFWizŠŽ‰’™›š œ˜†uczˆygbc`krq}k3 .Sk†šžœ–‘«§‰sˆƒˆ‹†ˆŽ‹ƒ|tlaaVYURGFPTjpx‰|…—–‚s_LN\o‰œ©­®´¯ Ÿ Ÿ­¨°º¶·²«¤–”~R3  +  + + )7To€woaPYis{viZ>7@Sic`V_dlojVEJJEEEJbs‚}‘’€dPFix…ƒŽ‡titshdilu~“‚tox‚„uhcU<43>GJV\fy‚pn]_k€ŒŒŒ›™‹ockil]HJBJV_ntjdI36062019DA=>.6B><839:ACDAENIHNHGJGGFFBJD<83/'+$%!  + + &8”ËÓÔÔØÐǾebdd~…nvtn‚z‰œ³ÂÉǬ•¬Ï××ØÛÝâáßÛÝÛÞÞÞÜÚϬŽ‡‡Ž’›´ÃÅÔÚÜÜÜÙÉ­§®¤”®®•‘—ˆ‰¥ÀȽ¥µ¿¨¢¾ÑǨ¥®›“““œ¤¯ÈËËÈÅ¿´©œ•œž•‰”¢¦˜„€š¶¬˜ ™›§©ª®¥™„v€•§¸ÆÏÓÕÊÄÁ»»ÄÄ¿ÆÏÐØØÜÝÞâááãäääçèèèèèéêêëëêêëëêêíîííìííðîîïíïððòòñðòïòññòòòððððïòòòòñòóòòóóõóóññíìðòôóôòöõóöôóõòóóôóòòñóóóñôôóòòòóóòòóòññòðððððïíîîîîíîïëîíìîïíììëêëêéèêéèæäãâÞÞÜÜÜáëèìïíñöüûøòíçÛ×ÏÉÁÆÖäèâÖÐÌÅÆÔÛį¥¸¹Ïï÷øúüüüøø÷õîÖ²¼Êô¤®ÄÝêïíÝÆÀ×äåæÛɺ®¦¦¬´¾ÑÚÚÓ¾µÉÚÜÞßÝÕ½’}®ÓØØßßØ·oDLw‘˜}S9[€O.DoŽ˜i +   + +&23227;?AF>DMkz‡„ƒŽ•˜™¢›†whmƒ~tceoifq…o5 + + -Wj‡˜¤™˜‡†˜¥ •Š}~„…‘”‘ˆƒw`b^[SKDGFDXs~…|n…—{nZXSZc}•¢¯¬³¨™˜‰•›•¥¯©¯ª¡•˜ŽvM1!   + + ,;Vkw|pbR^cr‚„o[I:9LeffZWgjjl\RIOG>GJbt…†€‰‘”’‡nMD`q†‹ˆŒ€s}{ndi{Œ––|ttw€wyq^;147JMSU_t€ymmlx…ƒ…“›œ˜“ubdhqn[IC:SfpqojU6=IRIEGM\fRF979>1#   TPVULKMB<-  +     +  +   + + +   +   +    +    +       + 4CPQA8/# #/1 #$*-//5(###)(,20-&,0-41*/25:8-320,$$2:6>99?A=?7671*/442))+:KJ:/.-37;=>=4872527=>CBEE@GJNEGJKFD@D@E@@=-*+" (  &8•ÉÐÕØ×Ô˼Šb_ah|‰q{ztsˆœ´ÆÈdz“ªÎÚÖÙÜâäâáßßÝßàáÝÝϱ‡‰œµÆÉØÝßßÝÞؽ¤Ÿ š”—«¯”–•‰ƒŒ¨¾Çµ£º¾¥£½Óƨª©€ˆ‘› «ÈÏÎÌÊÇĹ¯¥š•››‘…“–•‹}Œ¶¹ œžž£¨‘†v‚›«ºÈÈÏÔÎƾ½ÀÁÁÁÍÎÒØÜßâãââåæääèèççèééëìëëëìëëêëìíêîííîíîîïîñðòòóòññòóôðóòòñðððïññòòòñññòóóóðôòñíìïñòôôóôôóôóñòñòóòñòòðòòóòñòóðóðóòòññðñòðïðïïíîñïîíîííìëííìëíììêêëèëëççèæãââåßÞÜÝÛáéèíîðñöûùöòìåÖÐËÄÂÂÇÓÝÚÕÒËÄÍàÛ¿®­³¼Ùðôúúýýüú÷öôëÔ¬›¦¶´¥Ÿ¢½ÜéîéÝÆ¿ÖãåáÖÄ´­§Ÿ¤±»ÔÞÝÕ¼·ÊÚÝÝÜÜÔ»Žƒ¬ÐàÝØØÔ½s?Hsœ…L?\‡„R/;m‘—g  +&2,,59755:9DMm|†Ž…}‘“••|qjtx€vd`cffh{”Žz?  0PeŽŸ¢™†‹œ£ šˆy}Š“š˜“ˆŽ‰ysfc`VWHOIO[j€l–•~n[WPYfx‡›¤£ªœŠz|ŒŒ…’“ ¦—“ŠzK! + + +.9PjpwwrZWfpvbJ8;IdjlaXjiqs\SMJKJEKWv…†…•œ€W@Sh{‡Œ†s|zjjww}ŠŒ—‰tkw„Š}naC46=JHPMam…‰zrhkwy†ƒŒ’Ÿž•€i`muvkVF9=Sksql[@:BNFHGK[hXD9<<<<@C<* +  QPUVRNOLD5$)--("   +  $" #$& + +     + +  + +  +   + +       +        /CFFB8%# )2"$.*',070( $%'02/'%(1732.+3185+/..+$!07879;>?<89654,*02*,)-6HI>0.-08;>>33558755=FEHJDDIKKBFHG@EE@GA??<1.)" + !#AœËÒ×ØÙÔȼcbck€‡uyuy‚s†›¯ÃÅů˜®Í××ØÜßààÝÞÜÝÝàáÞÜÒ°…‹›³ÂÆÙÜÞáßÞÛι ––‘§”’’Š¨ÃÅ° ³º§¤¹Î§¤§’}…•™Ÿ¬»ÊÍÍÊÇľ¼²Ÿ’‘‰‚zz‡Œˆ ¸«¡›š¤¥šx‚˜¯¾ÈÀÆÒÏÅÇÌÁ»Â¾½ÆÍÎ×ÛÝÞàßáßáãåäçåççéèéêëêëëëêêëììëêëêìêíìëííîííîððîîïïðñðððïïïîîïðíîîïñññòñòñðïëëïíñððñïîîïîïïðïïïîðïíîîîïíííìîííîíîîíììëëìëìéêëëêêèèééèçèééçéçæçæåääââããÞßÝÞÛØÙÕÔáêéîîíð÷úöòðìßÖÍÈÂÂÁ¾ÆÑÒÐÐÑÎÝéÕÁµ¸ºÆÚìðó÷ùø÷õòòíÞÂ¥— ¥£šžŸ´ÙãæßÒ¼´ÍØÕÐŹ²®Ÿš ²¹ÈÑÒÁ²°½ÌÒÏÌÉĬ‚t¦ÈÓ×ÖÕбiHJp–›ƒR=[{Z2Ar›m    2GD3/?JD@AUgmh\bjtwr_MGHH>FTpˆ‰Š‰•™—ƒe=G]mƒŽŒƒr|{ohlns|†•‘|jtˆpmY;4;8:;A;5;9355./5-,//:LN>5,7;6:>8/+47>>84>F>B@IKJMNONGFCF@?B8<=:43(&#  )<šÊÕ×ÙÙÖ˾bc`g‰tpru|s‰ž­¹ÂÁ­”«ÈÓÒÒÖÙÛÚÚÙÙØÙÚÙØÕÌ°‘ˆ•“ž²¿ÃÔÚÙÚÜÚØÐÆ«Š‹“™žŽ™‹†¨Ãè´¹¦žºË¼£ £—‰Œš¤¨°­½ÎÑËËÉÇÁ½§”‰ƒ‹~w~ŽŒu…¯·¦™šŸ¤§§ Œ~…¬»Å¼¾ÌÊÂÂÐ˼¼¾¾ÆÊÏÒÕ×ÖÙØÚÙ×ÛàÞÞÜÞáßÝàâääæçåãäæååååâåçæåäçåäåæåçêêçéèèçéèèèèéëééèééçéêéëêéêëêêììééêêêíìééééêêëëèéêçêéèéêéëêèèèéçèêèêëêæçæççèéæåçèéçåäççæâåæçåæååææäååâàáâáÞàÞÜÝÚÕÖàçéìêæìõøòîíèÞÍÉÉÄÂÄÀÀÃÈËÓàìòëÓÀ¾ÃÀ½ÅÒ×ÚáççãÝÝÚÔ¼£–””“’”ž²¿¿»¬—“ž¤¤ £§¬©˜¤©µ¬«¬§¡¢¬²°ª£¢¥–zm’¯º¸º·²“Q@UrˆtT?TsyW2Fp™v +  'Jc\H;NdXVKKQUy„„‹……ˆŒ‹~qpzˆ†Šnlirgu„…‹”yE  .Rf†›ª¨˜‰‰šŸš–€prˆŠ–˜••Š‰……ƒ|dhf[QHFHN^jˆn}”’‡oYQZOWo‡”›„ƒxqlng[[mlhdhqvƒq@$! +  +!$&+Nk{z‚vg]gmy„ƒsZ=>CPiql^ZhyywnXNROM@Uat}…‹’™™’{W@Hfp€ƒxuzpgclot}Œ•‡tpyˆ€qpbM<7<;=DH_€‡†€sih‚Ž”“”¢•}`Yfmh\J=:>NgqpkiG;=EF===QmbIEIFEBMMH9!    TNLHGMHD?5( -583+%  +   %*-%%7RounM.&4:/  +  + +      +   +   + + + + + + + +      +/AG=60#! $" $$%2.02)%!(1./.073632/5:0-/-34*")$'0:>44;?B<897/36041-)%/?SN:4458/6;>3.6?C?6,9D?@==9.-& (  +%;”ÎÔÕØØÕνca_a€Šooqtƒœ¯ÀÃÆ«—®ÅÎÎËÓÖØÕÒÖÕÓÒ×ÕÑÐŨŽƒ„’›´¿ÀÏÓ×ØØÙØÖк‰kn™ ’‘“Ž¥½½Ÿž¸¼¥¡½Ð£¨¨™‘§®¾¶²ÂÐÎÍÌÇÿ®—Œ…„rv…Œtœº°ŸžŸ£«¥›”‹€Ÿ­²Â»·ÉÇ¿ÀÊÍÀ¹ÀÉÎÎÒÔÓÖÖØÚÚÖ×ÛÛØ×ÙÛÝÜÞáßâßàáâáÞäåæååäæåçååæææåèèçèéçççèèééèéêéëìëêêëìíîîîìëíìììåßßâêìïïïðïììîïïïðïîíîïíïïîîðïîîîìíîíïïíîíîîîîíìêëìëìììëëìíêìííëììëëêéëééèæçæææååáßÞáæêìçæëñõîêíèÜÎÇÉÃÂÅÂÁÁÆÏÞîõóåËÅÔÍÆ»®©ª´¾½Àº´·´¨œ–Œˆ‡Œ‡}ƒ‰}wpnyuk†¤¬Ÿ˜ž¥¬¡™–Ÿ¡ž¢š‘ˆ‡‚Œtj‹Ÿ­ª¢ „J:Gx‘{R=]w}W;GtŠw$ +  + + 30' 8ZdgRH`fb_]egj‚‰‹„yyupƒˆŠwhhiht|Ž“™˜~M*  + +&Pc–¨¥œƒš“yp„˜˜™”„ƒˆ’„qo`W\LJJQbkx}r““‰lWRKKXcr‚—‹†xtfbhh^Zd`_Y]grƒmG/   + + +  + +  *,Io†~thd`h~ˆ‘|]?60Kchsi`huvtiVONJFHJYrŒ‡Š“—’~`BAW]ixv€~ppoidot„ˆŽtox…‚vnbP<58;CMPTs€ŽˆsjfzŽ––Žž¡™‹l^_oebS:<=ManljlTBGR>2027:<:;58?>A<2->>@C?CCHFGJEFMB)" + + +  + +#13Cf}…|ula_ey†‹{\>61FVble^_pvts^LGLMIJZp}Š„yƒŠ‡‡qD:L^l{~„†wrptimp…‘ŠŽ‰~qt|€‚ogPE;64BGMMax†„}pgw„•––› ‹p\YdljZF=;C\jrdcYM>;FHHFGOgcLIJMGMPLB,   MJHED@FFB:$#069;432)"#02($,:^xŠ~k[MA5(&)5:2!       0*)..6CKSZQNLNKC;?=7+*-#$# " + +   +  + +  +    + +<=31$!!! "#",3032*$ %+)-/025820*,55//0**/.,*%(+3<>8969B;8?203/44.+)&-7JM>0-36:A?4777=>9219AEAHHCFEFHHFAA?FA@<;B:,+"#!   '<–ËÔÔØÙÒÌ¿cdag‚ƒivuq…x‰¢¸ÉÈȸ¦¹ÐÚ×ÔÛÝÝÜÜÚÛßßÝßÛÙΨŽ‡’’±ÁÁÙÞàäâââÝÚÚuy‚•¦––Š„’«¹©’˜¾Ã«¨ÁÔƧ­®Ÿ’–ž©®ºÅ¾­»ÍÍËËÈ層‹„zqv‡ƒtš¼·¨ž«±©¢‰ƒ’¯¼À²¥µÁºµ¾ÉÇÀÃÐÖÚÙÛßßáäãâäæäççèçèçèééêêëêéêêëëëëëîíìîîêìîîðîïïîîðïðññññòñòðññóòñòòðòôôóôôóóóóðêëíðòòõõôòòòòòóõõóóòóñòñóñòññòðòððòòïðñòïññññïððïïîîïïïíïñïïìîìíîðîìíìêééêççèçèçäèáÝåëêêèìòõíçéæÙÓÍÊÆÅÃÄÄÍÞîïïîÝÄÐäââÞ˯™ŽŒ‰‹ˆ‰‹|…Œ€ƒ‚tvnmjciyve\Z[RKJS{”«²£©²©‘—š£¢™’Štm“ydŠ—¥¥š‘‘xLDIi…“†W5U||M3Er‰™|*  +   + +2%!,!In‚yusektsz†€‰Šq„y€Ž‘†uvoeku|”–œœ“—›‡R& %E^|“›—‡w„‡Žui}“Ÿš“’ŠŠ‹’zhc`c`KU_aj~ˆˆnsŒ•‹q]SJLSbhirŽuqmafng\U^XXOMcttkD'  + + +  &+=c~ƒƒzqa`dv}{r]C89CShkic_owxvaQJIQRIOht†€zŠ”K;FWjƒ„‡€wnsh`d}‰‰‰…‚wop…€zl\R>5:8JONMB8-"&"%)%)1;6/ #(@e‡peYE8.+5:>7#  '7BIA6).-495'#(+36/  1=906>N\^cefba[LHMOJD>873# + + !"#"$(*)   + +   +    -;9:1*"#!##!$ !'..13'"!'*+00,)5786,.2502,)131.$!2-378145;C?=89/(*-67/*#4115:>A:51-8=52/=@@@@CBGGGEFLB83;AQRS_y„sn}•–”‰— ›‰bRWfg_YQ<=Q`\Z_aR>8CSNLFDVf]G>GDGECED2    LNIKIKHJM9)#$(2:>FZhg[SLD0**)))+/7509C>-!!*?cŠŒŠvdQB836;@C9&  "&4Nknk[HEGKJN@1.2:A>9$ + + + + + -7;5-D?1  + +    + + + + +    .4661,''#!! "+./)'"%-.,+'+..94281582%'27**#".+444939?==>;7-*./41$'"c“FF>3-+)8?BAA>9=92//-$(! 26*  %5‹ÇÍÔÒÔÔʼd^[hŠ…goqy‚v€˜®ÂÇÏÕÖÙÜÜßßÞßÝÝÞÜÜÝÜЪ†„Œ”™´¿ÃØàáãâßãâÙÄ›‚€Šœ°œ•‘ŽŽ©º©’š¶º¦ ¾ÑǨª±ž”™ª­°°¾¿³±ÃÌÊÇɹ°™Œ‰’|ot|‡~—¢˜¦®§ Ž~~~•©¸½¯¡§³¹·µÁÄ´µÌÙÚÙÜÝÜßßàãåâäääååççéêéèêéééêêééêêëìëííììíëíëëíîîïïîðñîïñðïðððññòòðññóòòððòóôòôóñòóñóñóòòðñðððïñïññòñðòóðððñðïïðñððïíîðïîííïïìêíîííëëêììëíëëêêêêëèêèèéäæääääãâàÞÞÝ×Õßêëäßäíñåáæã×ÓÏËËÊÍÒÑØéðõóåÉÍæèíîéؼ¦’‚‹™•ŽŽ‡Œ‘‰‡‰~x„oƒ„r^]Z_YIMq’¡£š™š ¯«™’¡¨©¤˜t“yj„šª©ž™‡M=Km‰”U=S|{_*6_ƒ”y. +$#*/% + "Cayu€qdknr{ƒ…yq{z†Œ…~vrtrps‹Ž“›¡œ˜š›‘‹\$  +)@[qŸ˜Š€zˆž£“yio™˜“—•Œˆsmodc[^\R[hlrxvjpˆ‹‚uVFHEIP_enŒthZ[`hb_^\h^YUamzqD+&  +  + + %/0=[|‰…}xga\ixt‚}U6*9C\fkf`_fhugHGIMJBDSmŒŽŠw~Ž•“sH;CQo„ŠŒ‹|sz|qgmw†‹‚sow{tj`YE818CRMUfr}†€ldu˜“‘‹iRVgnldVC>OZ]dmh]D4BOPOK@H]bQD=;=C>@F=." TJHHJIIMH4' ' .8>AO^mg]YQA30/1,2399<6==7+,?`‡’v]RA=7?GHC<) + %1Gi~rfXY__\TC528005BF?& + OKHFIKKLH5$#" "'1>?EYfom_[RA41/11522?82<9/& -@f†‘w`PC>?BD@F>(%.15:Ol„€xj\Y_eaYE815>A@@1  )243>CTknnmjiid]WUSKHECCB3+:A/""-:42(    + +    + +,.54-0*$&$#"&!#!!!$+/#$# (&-,-0&&/8603.66953531)$#-41653;:6==B;6+9*,21*+)1ANM<84506::/4347:E./8B>?DJFMGE@ADC@AA@261)( % +% -<; +>ÆÐÕÕÓÑ˾Œd_`fˆˆmsox‡nž²ÁÂĪ•°ÊÓÒÓØÛØÕÔÚØ×ÙÚØØÓƦˆŒ”£·ÀÅÖÚÛÚÙÚÜÙÕ½ž…‹œ©ª¥‘‰ƒ«ºª‘—·½¬¥¸ÌÀ¥«®˜—žª­«¡¸Æµ®¾ÎÐÎÇǾ¨˜‰|y‚qgn|„„v‚—¤«¦™‰x‰•­»º¥“«²´·ÀÁ¼»ÆÎÍÒÒÍÖØÙÚÛÙØÛÛÙÜÞÞÞßâäåååãáãããåäååæçåçãáááâãæåêéêêëêêêëììêìëíðîëííííëìíïìíïîïîîêçéëìëëììëìíïðîîíïìëíîíïíïîïïîðïîîïïîíîîííïïïîîïïîðïòñîïïðîììíïîêëëèçæââááäâåãÞáàÞÜÝäìíæãæêéàÜãáÚÒÊÏÚæèçà×ÕæïäÕÑßßëôöïàȲ¡š£¢Ÿ™–ž¥£ ›œšœŸ¡šœ˜”š¡œ˜“—‘t^l¤®£Ž’£¯£™–—˜¢ªª—˜œ™xb…¥°³¯«©UCLn‡–~\7OvuW/:]…•€.  " $,,5.! 'Lky~ƒqwkmvo…ykny…Œ‹|wqsxw‡¥ Ÿ¥¡š›š›œ•[& "8Rot„zqno¥¨•qdvŒ“•‹˜™‚„{sj`ff]\VRRhgkvxto„‚hJHLLOdpon|qV`_fall]^kf[S_yƒ~S-  +   #(23Xm‡}yh[`l‰ƒg@*&6CS\[]_bhon\FNFFIDHf‚„€it™”‡eA5@Ya|‰Ž‡ƒvsl_eu{|ulixurnd[B958GFOM]w€…‚tqˆŠˆ…—šˆgNXgtviNGEYmigpi[I=HMMJECKbaLA:@?@;CJF&  LKKHLNOKF7$# $(1( &9@>?FB7& "'1.3;FWporrppofYSSVQNG>FECDDE1*(/;@;.  +  +          +%6=76,"!"!#$!'%-*' # &--%*+54813<27668371,&!+561530:>;>;72.4,/10%&)1=OG;23-5:??53854<;578A@<>:9EGME@ID=ABAB>;:5-))"#! +  + $7>4 &?ŽÃÎÓÕÕÒǺ’b]^iƒkwmv‰vƒŸ·ÁÈǬ“±ÍÕÒ×ÚÚØÖ×ÚØÖØÙÙÚÖǤ~ŠŽ¶¿ÅÔÙÚÜÜßÞÞÖÁ‡…ˆ“š’˜”ˆ„Ž¨¹«’š¼½£¢ÁТ¦­¤—™­¯²›š§ÁÀ³²ÂÍÍËɾ­—‡|‚{wvy‰‰ƒ’¡¢¥¥ž—Œ‚‰šªµ² ™œ©³¹ÀÅÅ¿ÈÒÒÒÑÓØÙÚØÜÜÙÙ×ØÕÖÛãäææèêéêëèéèéçèêêëêééåßÝàÞáäèëîïïîîîïðîðïððññññðïðñïðïñðññóóòñìëìïðïïðïðñðññòòññóðòòóóóóóñòñòóñòóñôòðññòòðñðïðððñððòññññññïïïðííìèçåáàÞÜáãäæããäÝÞÛäììéçæéêàÛÞÞÚÒÓ×çòðëâ××ëæÚÕáäèñõöïáǯ¤£¦¤¤›”œ¥¤¥¢¡ž ¢ Ÿ¤œ¤ž¢£Ÿ™ŸŸ†]h“¥¨ “š¯«›™˜¢­ª¨¢žœŸ›~fŠ«µ·µ²­”X@Ai‰”[7Tvw[7>b„™|)  $ )(()84$  %Phv{vqkpjco€x{{„“”…y}r{qtƒŽž¤£¢œ ¤¥¡¡Ÿœ”‘‹\+ + 2SglmrvisŽ¡¤–nijyˆŒ•‘…}rrqf][ZSGVRfkmuuqtƒ‹zdHB9FP`ffptm]^\bdnjedidY_py„{U/  + +  + #/,6[s€Šjdcq†Šˆ€f?'*1BW]ZZVYfmibULBNKCBZ|‡ˆ{zˆšœoK63JatŽ‡†zy}q`_iy‚‡Šƒodpuvg[]S=5?@EICNcw~|r^RYa`_O@209?B@7'  +!,018>Kbtsqrtvtm]TQVWWNHJLY^[J0+>KPG6% +  +  +  +   +  )7:76/% ."*'*)*'#+*#'.'%36:920238413664+$*#13//56:@?9;:3//+03+*)(+=J>5310559=415D978*$&!  + +!38D;'  #>ÂÌÎÑÒÏǶˆe\_b‚nwp{wŒ›¬ºÀÁ§˜¹ÒÙØÙÝÜÞÞÜÞÞÝÜßàÞÚ̧…Š’œ³¿ÆÚÝâãâãäßÚÞ‰Š‹”’†ˆ•“ˆŽ«»§—¿¼ª©ÆÕǨ¨¨¡”•œª±¶££©¨¸¿´·ÃËÎÉüª˜Ž€{ƒ‹‡†Ž…› ›£ ˜‘†€Ž¦¯¶¤•š¥³½ÄÆÀÁËÒÒÏÑÖÛÜÜÝÚÒÏÍÊÊÍÓÞäæèéêëëêìëíîîíîìíìëéâæãàÛØÙâæêîðòòòññòóñòñòôóôòóôóòóòõõõóóõóóñîìïòóñññòòññóóóóóôôôöõöõõóóôóóòóóòòôõôóòòòñóñïìîïñòòòòôóòóñòòññññíëæâàÝÚÙ×ÞåæäãßÝÛÚÙÞèëçäâçêÞÕÝß×ÒÔÜåîïíèçëêÚÕãîëïôøøòãÆ­¦¬©¨ –’” ¡Ÿ¥¥¢™”™œœŸž£¡Ÿ¢¢¤t_m ©‘–¢ª®¢—Ÿ¡§¯¨¨¤”˜¤g µ¶´¯«’]?Bj—†];Tw€`45c˜|*  + %&(%%*0;*  + Yuxsuvmifjjmw†‹ŠŠ‡}|}q|ƒ’›¢¤¤¤¦§¥¨¦¤ž¡œ—•‰`,  +-KU[o€vo  –wbgo‰”•‰|voih^[\NLU[fffpros|ŽfPH?COankhof]\`einpgde``^i€ˆvS/% + + + +  +%)2/Oq{€zl\_cu}ŠuN'*;P`a\UPbgimZDDKEFFPq{‰…~r~“—‚fB2;Mi„Ž‘‰zw†woflp{ˆŠ€ojqxyffXG>:7?JMUg€ˆˆŠzh{‹“‹“¢›…e[et}{nWBHVaprom`I*SVSNRTQPK6! ")07@AK\a[[]XE1,.3,+&$041.%#+@a~‹ud\K=4*-7GE3$ &:BIFI]rvcYRXabQA74=?@@=, + *./2," 2FNVN3  +       + -:;:9-'!"(%*)&""!!./#%'#$-15233.6:1-/244."'!*-1621/8A@=<;2-1112+%)+1COD324219379704826644CD==>AFABD@CADJA==@A95*"*%   +0CC#  ,AÃÊÎÏÏÐʹŠebhpŽ€nsqsw‹Ÿ²¹¹º¥š¹ÏÖÒØÝáãßÞÞãââáãàÜЫ‘‡Œ“•žµ¿ÇÚßãääääãÝÄ›ˆ†–›Š‹šœŠ’«¼§’š¼¾®«ÉÚÈ«¯²¢“–Ÿ¬²·ª¬±£½Â¸´ÄÎËÉȾª›Ž{‚„ˆŠ••‹w ™™›–‰†Œ£°²£˜™¥´¾Â¿¹¹ÈÆÇÆÇÐÚÛÞÞ×ÈÄ¿ÀÂÇÔÞåèêëêëêëíîïîïîðîëëëèàáäßÙØ×ÞäëðòõôóññóóòóõôõòóôõóóõõôôóóððñóðïêêíîîîïïððïðñòóñòóóöõôôôóõòôôôôòõõóôõôòôôòóñíëííïðððñïóñòòñòðïðñððîèââÝØÖÖÞæééçâÝÚÙØßåêéæâåçÚÕÚÛ×ÖÓÙÞãäçìñìàÓàñððòôùùòäÄ¥¥¡Ÿ¢™”Œ“–š–‘‹ŠŠŒ‰””•—Œ{f_j’ °¢””£¬¬ ¥­§¨«¦¢–‰”›€b‰¤¯°±¥¦X9Io„–ŒW:O~}`75[‡–}4  *'$' );-  Ur…~ytwodgv„‰’•Œ}zryw{†—¨ª¬¦¤¦ª©¨­¢£Ÿ ››”‹c,  4ILd€‹…yy}Œœ ’xd\t••‘‘•‘‰zwwtjd^^TKTX`bdlrqs„ŒŒ}hKFKAGZqmhpi`Yadjole\qkifrx‡~a3$ + + + + -60Iiotxpf]Xdr}|Y07Refh`OZgok\PIIHFAAarˆ‚ls‹Ž’zK5,?_uŠŽ‡†vwwtjju†‹‹Œtjmw€ufh]D83:MSUdrƒ†}ry‘“Š‹›ž•{\Tfv~w`G@GY`kqrhNBDAWvzqj]VZ^\TE317==@;+   +*.//>Piotwuu|to^MRPKHGFJTblj_L<2+*%4DNMA-   +  + +   + + + + +1>F[62   "! "$(0#"#")+(%&"%,',160//33111+,01-"!+-3572169<8=>63,*050&--4@QI>811-2;>92000<>987BB?ABCHBCD;=<SDVWc|…ˆ‚owŒ—›™’Œ“™”Š^T_qvwlPEDNbmwsoV:=HIKDBBNjmUJEBINNCC@0  [TXTRQNQM25!$"!)38;DJZ^XX\Q>.1.4-,4-()%*)#'8Y€‹yf]^`ku~{kWF=4.0D?C@Ro€vl[Z^eaWG5/3=>?9.   !14/5ARkqsrpwusm\RTRQJF@FO`lh`NA7-108CHC9') +    + +     + +  *7ON<* !!(..!&$ %"'(&..40,4449734/02/2&"!',2777612;=8<<3324344-%(3>HK=82/,27371..6=:04;B@?A@?B>A?HB>?BFB@B>22/*&%   +#7‘ÆÎÐÓÒÏźˆ][bq‰„ppkw†}Œ¢ºÇÉÇ«™µÔÚÕÖßãàÝÜÞáããâäáÜÏ®•…Œ“•Ÿ³ÉÉÙâãåäåääÛ›ˆŒŠ˜œ‹Ž•¨»¥’ž¸º£ ÁÑĦ¯¹¤›• ­­³¬®¬œ™£³¿¯¯ÇÌÊÆÆõ£Œ…ŠŽ”š›™„’œ”ŒŒš“ƒ£¯­”–£´¾Á¿´¯¹´°¸»ÀÆÓÜÝÝ×ùÀËÎÛãçççèééëëêëìííïïìììîëèåÛÕÔØÚÚàéîñðòòôôòôôõôôôõõóóñïëëêèêéêééêëéæäçèéêéèééêëééêêíððñðñõöõóõòôóõôóóóòóóôôóòðíðððññóñðòñòòðññññðòïïñïêäàÙ×ÖßéêëççáÙ×Ø×ÜäèêçàßÚØÖÖÛÖÏÍÏÔÙÞâçáÔËÞñïóùùùúúöè”…z~qmjkqkmqijmbfmj]_XMVa_\QHLVWc‹§ž”— ¨©¬®«¥¡£š‹|mlŠƒq~” £œŠV==dŠ˜†a?Nu‚i/&^–~5   +  + /! />.  + Bu~~vrqmts‰Ž„n{}|{…–ž§¯³¯¬¬®°¯ª¨­ª¦ Ÿœš’Q/ + 1GJa‰’†x…Ÿ œ€fez‘––—˜‰ˆ‰ysqng`[][Ped]ckr€ovŽ”†hRPGBHZimnpc`[Zcmprkdnxtkp~Šˆd6  + +  ,?/@cr{||gaOYpjjp|fA$-IZei`YM]jqe^IEIACEVhntrrftˆ‘ˆkI4-;WzŒŽ’‹w€{}ff{„‚†‡‡pej{yvidT<7B@HMTe|„ŽxnyŒ“—•ŒŽššraVgqvmXIDSdooqoaB9DEKEC?Hdn\HBBJOG78?0 `[\SSOMMJ6 % '4>?AO\a\a]S@2/57,0/,*#!#$(9a„‘Œ€f[aj|ŒŠmVKE=1-"!#1>A=>Ift~zn^[bgaVC803:<@9.% $494:AScsrurssrfXV]YSJEBGQcom`P@<522:=HI<$     +   + + +$;A=:)!  " $&,,%(& $$%( &'.2*-.26;4/)+./.+"!$04373-'1>;34:11=146/$%(-CRH:32(,8?944658793,:D?>>>BDAFEDA>:CA=?=>;..-!!# + 'B˜ÈÏÐÐÒÎǼ‹^[cm‰nqn}…~†£»ÉÆĪ›¸ÕÛØ×ßãâÝÞßãããäââÞÏ­Žˆ“˜›´ÉÐÛâãããåçâÛÁ›Ž…•œŽŽ†Š¥´¤”ž¶²¦¦¿Í¾¦°¸¢““§¯±·®¯²œ››¡°­±¾ÅËÌÈǼ°}–›—˜—˜’‹™•Ž”—‘¤®«’’¡²¾Äº­¨²´±¶·ºÂÑÞßÞ×Ê¿ÃÌÔÛâãèëèéêêëêìííîïîïîìëëæàØÔÖÜÜÞãëïòñïôóñôôõõóôðñïîìéçèéèéìîìííïðïéêéíïïììëëêëêééèéëëíïïñóõòòóõòòôòóóôô÷ôóòòñðïïðññóñòññðñññðñïññðïîîëåàÚÙÙÞéëëèäÝÚÓÒÖÚâæéæáÜÛÓÓ×Ø×ÓÑÐÖÚÛßáÍÀÌæíéóúùùøúöéÈ™†pmvplfprhgc^dd`h_d]QRMZXSUFGFLQd‰œŸ–•žªªª©ª¦£¢˜Ž„sl†™„i}—¢¡¦ŸžŒX=>^‡–ˆe?Jte96a–ƒ6   +  "&&5F.  Fk}uhisx„‰{~{{ty†”¤­¯²µ­ª©ª±±­£«§ › š‘„W1 /AOc}“|ŒšŸš‚jg•š˜™•‘‰‡wwlpd^bdUTX`dgh}wpx“l]JDF@Rjieg`[PXYjruplyuqne{‹‰c5# +  +  552Ac|‡‹}naVYjqjwwmL')D[`jl]LPdhcZMFIJDEVenjqtho…“—“{W<5COoˆ‘“‡tƒzmep„‡Œƒ|ln†|umZ@5?8CLM\p‚…‹xowŠ‘™˜–_Taovr`KFLVfispfNAEdmz{tcY[Z^WL3247@?>6*  17>:9B]pponmprg`YVYICEDRXhpicM?;:23=INP@)  +    + + +   + ,<@D6. )'$  !%( *(%!!#! !&+,/.29)'.492*).,,!$ &/53101-2;642<420-11/"($'>G>253+1679213<:>A63;BD?;=<=DFG;;<>HB;@:;<1,,   + +@•ÉÏÒÒÐÌŸˆc`aj…~luoƒuŠž·Â¿¼¥•»ÖÚÙÚÝãáââãâããáãâÞЪ…Œ•œµÃÏÞãââåæäàÙÞ‰‰Š¡¡’}ƒ ¯ŸŸ¸±¤¦Áʺ¥®·£“¡­´»«®¸§žŸ•˜¡¯³»ÆÉËǺ§Ž•˜˜˜•‘„’˜’—‘•¦¨£™““¥¯¼Á²£«®¶²µº½ÂÑÜÝÞØÍÂÆÎÖÛâåçééêëêêëëííìîîëíëåàÙÛÙÚÜÛàæëíððòòôôóóôõñðïìéèèéééëíìïïîïðñññðëêêïïñîìðîìîîîîíêêêéêêìíðñóóóóöóõôõõõôóôôóñîîíîïðññóððïðïðïïðñññðïðìçÞÙÙØáëêêæáÙØÓÑ×ÚÜáæåàÛÙÑÑÖÛÕÑÑÓÖÝâäÖ¿¾×ååî÷üúøøùõíÍ”qppplhuytsohpnfecdaW]VUUUTVROSPYsŸ§›ž¢§ª¤  ¢¦¡™”’zuš€h‡™¤ª¤Ÿž_@Dh†•‡R8Huƒc;8h‡“ƒ6  #$$!"!1=- +Ff{}owkr}‹ˆ{z|€uy‚–¢¬²µµµ°«¬«¯°«­§¥¡›ž“ˆ}^1  *DZlƒ‹ƒv~Ššž•‚og’š˜——‘ŒŠ}yskkms[TVUb`fjwpkr‡“ƒk]JF@HUakgmh\`]_flmrs|urigx„_A' + +   + 20+8ay‡†…w^VVcl}‚€pF!$3Obih\^Y]_b[MBE=IFIYmpqsol”˜”‰hH7;Hfƒ‹ˆ€y}tbm†‚‡ƒ…nlz‚zsdE=56@KGT^}‰‹„xr…•–™ŽŒ›¡›ˆfV[q{slZLEL_dgqfYE8BGLOKTVdhSAAMNF87A=< [XXSPQOTL0"!&.2;AHYff_Z[K=20211141+$! ! #):[ƒ”“ha`j‚–•y]KD?<0&))& (A<34?R]U@+           "7;?;9/#$$ $$$!$)*& "!"! #/+(,4702165641.,--&$(+*/:32-6756;;+,/4.-0++)*7B?658.3<9><0655;<976EF?=>==BC@>9>DGD=CC?<6,,($#  + I+(>“ÅÎÏÑÒÎÈ´Šc]Yo…yfwt‚ˆsŒ ³¿½»¤”¶ÓÙÔ×ÞãáààâáâãäåãÝѬ‘“–£´ÀÍÝââæääåáÛ›Ž‰§£’‹~„Žª³Ÿ ¼´ ¢½Ï¿¥°®Ÿ˜—¡­´º©­µ©¤Ÿ™”›ª­µÀÅÍÇÈÁ¯‰‰”’˜›–‚…‹Š|„”¦­©˜“—Ÿ°¿¼«£¦®³­¶¹¿ÄÎÖÚÛØÑÆÉÎ×áççèèéêêêëêëêéíîíëèãÜØÔÜãÝÞßãêíòðñóóôôñðòòííêéééëëìííïðïðïðñððïîëéëëíííîïíïîðïñîîïííêêêéëìîòôóôôóôóôôóñóôóòñïêéëïòôñðïîïðððððòðïðððïéåßÛÛáëéêæáØÕÒÑÕ××ÞäãßÜÕËÍÕÙØÑÓ××àéäмÅÚÜãñúýûù÷ø÷íÑ™~usorrŽ‘‹†„—Žzlqkhigyyngikr~‹©¤œ•—£°´°©¯ª¤Ÿ£Ÿ¤’“Ÿ©ŽiŠ¡®³´®«l>Ei„’„^EJyˆe=8jŽ“‚8'  + !!+"&$-<9 Ahndlo{…‰Š|vzqvuw„Ž›®°³µ²°¯«¬­¯¯°«¨¤œ™˜Ž„w^<   +AWi}ˆ‹‡k}…—šŒmc{“”š—”Š‚‰€yrjkdZYYZd]eopmk{Œ’„nYNEEDU[eefa[a^^hnuqs‚miftŽ^5%   + + + +,<71Ty…Š‚r^XTbu…‡‹xT(!.C\hafWS^gh`WHFFDEBNoyxuiuŒ“‘‰wI:7=\yŽŽ‡||…ycdx„ƒ‰ˆ…yaj‚tohXG64=DJKXr‡ŽŽ‚puˆ‘‘†•ž›p\Ufpsm[AAP\imvm_I>ACLOLUNZhbMCNO=63696, Y\WYUQRMH0$"")5>@JZid\YXP>313-462.'( !!"(:X~”“hbfi}—”y_MDB?6,"&)#! $;c[fmnnstqg]]_ZWVQKSaimd]NC:4319NSTA'  + +   +   + %8AD?A5# !#! "!)%$"!!*,&+1,,1.5:510+&(.10#%(/5960+4758B80/311//).*%9E@1'-./4;>=611B?@;<@=AD@BD@?A6-("    ƒL(@”ÂËÐÑÑÎǸˆj[Uhxogvwz…¤¶Äƽ¢“ºÒØÕÛßâáââããäåæäãÝΨ„‹”˜ ´ÃÐÜââäåäæâؾŠ‰ ›’Œ~†‹¦¸§¢¸´¡¢¾Ð諬¨“­µ¹©®µ¨¤¡™›£±¶°¹ÈÈÈËƺªœŽ“’““—–‰†{v•©­¬¡š˜°¹º§¡¤¬²·º½ÀÅËÔÙØÓÎÅÍÓÜáããèçééééëêíëìëëééæßÜÛÞäæåæéèíïðñóõôòñïïìéééêëêëððïíïíëîëìîîììëìëçéêééëëìëìëíïðððïðïíîìëêéêíòðñóóôôóòóõôôóóñðìééëíïñðïðïîïïïññïïïïëêéåâÜÛàæèêçãÜ×ÕÓØÔÐØàäßÚÒÉÊÔÜÛØÒÕÛâçÚ·ÊÖØèöüüüøùù÷îâ²”†qq€—´É̳­½ÌÔϽ©™–‘‡‰£¶¼¸¦˜¡«³¹¬ª§ª“°ÄÊÏÊ˺§®»¿ÁÀ¿Ä»—z«ÀÆÉÉǵtGEaƒ•†^=MyƒkA1kŽ—„8  $" '#%3<5 +  ;\hgk‚•wlop{ulxˆš¨¯µ´µ²®¯¬­µ°°«ª©¢›““‰ƒ~c3 + 6GUkqŽŒ†{q}•ž™‡ljw“—“‰‰ˆ}†v|njgdW[R_dckmnqt„‘~j`GDF?Qbdddid[aglp}|xˆ~mclyˆya:$  + + + 0947Syƒ…†yfVQ_x‹’ƒ^+"5?TdigWPYea\YIGGFGDNjwvzymk‡’‘‘{Z==7Hp‹‰‘Š…€odrƒ‹Ž„nbsxpkgP;17BKFTi‚’Š‹sk{„‘Ž‘š ›‡dW_hvsdQFQ[dlnriZIIXif\XVL>111./,..)("%:Uz“‘Žv^[cx‘“‘v\JC?>6+#**($$#4JBEDVh{ƒ{k_QU]bZH646:?@>6$ + $-538=ScmturwwqiXZ^]U`[GY`hpiZNC81/4AGMM:&        /=GN@?5&#%!#!))%#"!#!%(/-0'.6984/#%*.)*&"2:56703;5/:@?008702*,,).:E;&*1/0:>B74678<4/0;=;?8?@@F>?AAEC>BD40<82-/'' +  +"F•ÆÌÐÒÐÍǸˆ_[\eurgsr|}~“¦»ÇÈÄ –·ÍÒÐÛáãàßâãããåäääÞ̧‹‚“–¦¹½ËÝâãäåããßÖº—‰…Žžž“‘‹…†£®›Ž¸¯˜ŸÂΦ©´ –•¡±·¹ª¯±¦žžœ£¸À°µÈÌÌËͱ¦’Žš˜–œš’„‹x{Š’¢¯®£˜©·¹ž™ ¬±´¸½¼½ÈÑÖÎÎÈÅÌÖÚÛÙÜßâåæèêéêêêéèèéçâÞßáåéêëëëððïðóóòóóïìêèëêêëììîíììëìëëííïíïîîííëéìïïîîïïîêìíîëíìíîîðíïïíìíëëíðïðôóòòóôôðññðñíæåæéììïîñððïîíîíïìéçäáàßÛÚÖØÛáæãÞÚÙÙ×ØÍÉÐÝäßÙÓÉÊÒÙÚÙØÛÞâãÒº¹ÉÊ×í÷üüüûøùùóè½–ƒt’¶ÓäãÌÏàæéä×Á°«¦›Ÿ¾Ð×ÒÀ±ÁÎ×ØË»­¬› ¿ÒÕÛÛÑñ¹ÊÖÕÙÕÓÄž{¸Ó××Ø׃KKe…˜ˆZ?Ix†r?@:.&'&&'##%*EKHGTgv„r`RU]]XF:/38:@@8#  $-336?WeovtwwsmbV^\\WNGN[acidYQC70.5@HKI<)      + + +  *2&% #%  $('*$%,64/'(0361)(+-5-(' &0306990594;>=2-4561+..-.6@*'5I+/3:E<466::1,39?A<Bm’–:   &+&#*51  9Wq…—Žwikokko~¢©²±²µ´´´¯©«®®­­«ªŸš˜•“‰†ƒlO4 +  ,DV]yŒ„xsx“—”‹ynp…––•’‹…†„~romrpk]\Y]ghv{ru”ˆx[HF@Rs†’‡~}ibilnt…‹‚npw~zrl]K9.8EJQ\jxŒ‚moƒ˜”Œšœ–}ddpxwgXHARer~€xjWE>@KVNC>F]j_L?>B?4/-/, WRWWUPIIA1#&&%%092)($%#*5EJEMd|‚‚scXOU\[M>44;:>C:(  &0876AUcntolnnl^ZZTWOJMS[_cef[I=2.-2>JSNC&       + +     +  $>*  !  ($*(%%(-21+3258--(*-,-$%566-48475?<@6146./31')&3<>.1-+4058>7647??2&-1=><@CAIG;;A96>=8<@;:5570'    2—ÇÎÒÓÏΟY[Ycl^mrmƒx‹Ÿ»ÊÊŧ‘¬ÅÐÔØÞàÜãââäãâßÝÚ×ÀŸ‰…ˆ“’ž´ÁÎÜÞááÛÚÛÚ采Ž™¡™•‚‡Ž£´š„–´±š ÁÑ¿¤¯» “– «¯´®®®¨ §Ÿ¤®Äɹ½ÎÏÐÎÓÑÉÅ»§”“š™Ÿ¡©Ÿ’†Š‡‡’¦¯¯¦ž› ¨³°•©­¶»¿ÁÂÁÁÁ¿¼¿ÄÎÖÓÖÒÕÖ×ÙØÙÛâããáàáâçéåçéëïîíïïðïñññîëëèèêëîîìííëëìêìðîïðíêèæããáââáÜ×ØÚààááãæååçëìîíîïïîíìêììïîðîíìêêìððñòóñññññðîëèäçççéèçèçååææäåçáÛÜÙ×ØÕÒÒÏÌÒ×ØØØØØÕÕËÂÈÙÞÝÓÑÌËÓÚÛÝááäå×ÀÂÉÇÙëóùúüüúùù÷ïÛ±u|€ÇßëëÙØåìïíâѼ»®ž¦ÄÖÛØǺÌÚÛÛ嬬³ÃÒÛÞÝÜ×Ä´»ÊÓØÖ×Öɤz’¿×ÝßÞÚÉ‘X:Z}‘‚bDJslF;g’t/ +   + '' !%%+6)  8oŽ‹‚ypmlojlt†ž¦¶µ¶µ¶µµ±¯±­¬¶³¬¬§¢žž—••‘€ji^H%  +  0FQWmƒ‘Šurw‘˜‹yls‡•–‘‘ŽŽ‹ŒŠ†zqquplgbV`mq|~in‰ˆŒxgMA<>Mahnotlisuz…‹‰ˆ‡|ww}{|cB'   /=-$C^s†wsfYRbv€‚†rI$);W`^`dX\]`][WIMFDFFb||{p|Œ“—~aD77Hd”’‘’ƒ†ƒvgdkow‚‹}qm{}q]WE24>IRW`q„Œr|’ŽŒ•›˜x_hkjg`JAJ[osvrj_P=QhlUC?EC?9..2&RSTRRPLNH-$''"$/9@=DWcdZXRE8/,510-())# )5PvŒ‰g\Z`glltqYB=>B>3/,+!$)09BDCWkrvrm]TWc^T>3;?<=;5* (3669BVgqnpppmd`TVY[NGIQRbilh\P>2//66--9DGFIB<=963%.5&LQTLKLLLG.$'/%2;A?GVc`ZVLC802110./&)"$1Mv‡Š|n`bchhkssZD548A9-( ,(!"$/5@FCTcpxvm^TY_]T=35:6==7.  +!532AA>@=>796/+'"!  *EšÉÑÐÐÎȵ„`XVbnaanjz‰}‘¨ºÈÌÄžŒ¯ÎÙÙØÛàÞßßÝÙÚÜÜÚÕѾœŠ„…œ²¿ÇØÝÛÛÜÞÝÜи•„ˆž›‘”Žˆ‡Ž©±¥££³³œœ¶Ã¹¡®°¦—–¡«¯·­³·ª§¥¦¤®Êк®²¾ËÍÑÒÓÑŶ¢–‘¥¥£ ¡˜‹„ŽŠŠ’£©®£œ˜ž¦´ª’‰ž·¿ÁÁÃÈÅÆÇÂÀ¼ÀÆÇÌÎÐÒÏÑÖÕÕ×ØÛÝãåçêêììîìïïìîîîîìíêêçæèêíðîìêêêëìíìîìèæâÞâåêìîðïðñóóðëêðñññôòñðîïëèçãäãáæêíïíïîêêëîïïîêêëíîðòòñïîðïððñðíìèçáâááâàâàãåäáÝ×ØÙÕÚÖÓÕÒÕ×Ù××ÖÖÐÈ»¼ÐÚÚÔËÇÊË×àäããáÕÆÒÕÑÞéïóùûüýúùúôæÆ—…wj}²ÖåììÙÖæìñíäÒ¾¼±ŸµÒÜØɾÍÝåäßÒ»«ž¬ÂÛæêéêæÓ¹½ÑÚÜÙÕÏƤ|ˆ°ÏÛÛÙÚÊŒ[F]{•‰eEHn|lACCD:/$") $'&  + *-++2531)%")+.& +.&)()-7513;;3--2/.1)##,=@6.),/11895978525185666CF8<@>???CKI>@<::79.)+  )V¢ÆÍÒÑÎɵTQTcka`iovx}”¦¼ÄÊÃœ±ÐÛÙØÞãàÜÛÙ×ØÚÛÛ×Õ¡Ž}Œ’œ®½ÄÒÚßßÞÝÛÙϵ“Š†‡›¢‘’“‰ˆŽ¦·®«¤±³¢¢Â꧲³£ž–­´¹­º¾°¢¢§¥®Éл«¨±ÆÎÓÓÒÓϸ«¤¤šž¦¢Ÿ—‰Ž¤°­¡Ÿ©µ®‡»ÅÂÂÁËÎÆÅÂÀÀÅÇÊÆÆÆÉÍÑÕ×××ÚÞäçèêëëííìîíîíîîîîëêèèåéëííííììëêììíèãäÞàãéíòõöõô÷÷ôøõóððóõ÷õööø÷õõóïðïíéãâãåæéìíììëêìíîîîïêèíððïóñïïîïðïñîììëçáâßãßÛÝåãÝÚÙÕÓÔÙ×ÖÐÕÕÕÙÙØ×ÖÏǸºÎ×ÔÏÉÅÇÑÙâãâãàÑÇÛÖÜäêïôùûýüûúöìÕ¬ŒyikŠ¾ÞéííÚØäîñïæÔÀ½±¢™µÎÛÜÎÄÒåèéáÔÀ­¨­½Ûèëîíé×¾¿ÕâäãÞÜÑ®}ŠµØßãáâÑœ\<]~ŽhHLs…q?9dŽ™};  + %(("!%'/1 + +.Ubbolhhp|˜¢µ·»º¼¸µµµµ³µµ·°°«ª¦££¡Ÿ‘ƒ„˜©›‚qZ+ + + + )HRbpƒŠ‰{my‡”ŽŽ„kk€¡™”Š‹ŽŠ‹~sqw„vrmnosrt}sn~xaN@AAH^klgjqrsvz„“–Œ‡€vtŒ•h?$   &E<*/No‡†€|iPG]n{†Žƒf7"';PgkfXRUdnfdPFIHA>H]qw‚~om‰•’“ŒwF07EYq‹‘Ž‘‡€o`tˆ‹†~un~‚…{lZE69@CKJZƒŒŽ€|xŽ‘“‘šœ”q[Vkp{iWKCQapklpj`M>?PSJHDB`i^HFFA8-"(& RQMKIGJD;+#%#" +:?CDXe^ZYSD9123443145$$#0Ik{oaZ^bksoyw_=15=83.0)#!#$%;@@DPgx|un\Q\d`[J=36;>BA4$ + + "-46:Cepvquqttk^TY\ZLLLW^jrncWC32.12?PM@/     + +   +   + '=??@<-!! '$$"& ':02-( #+-,!"+'$!-0*1/391:7,/3+21+)$1=>1/&*0/0;<57>8?83/1186>ED<=ADCB@@GIC?;@;@31/-"$  +(W¢ÈËÐÑÓÉÀ²}\RPci`dlnquy•ªÀÉÉÇŠ³ÒÛÛÙàáÝÛÙÕ××ÚÜÛØÔÁœ‰‡’Ÿ³¼ÆÖÜÝÜÜÛÚÛÒ°‘‹˜£ŽŽ“‰ˆ“§´±²ª®±ª®ÊÙ ­°£œ‘£¯¬µ¬¾Ã¯¤¦¬©³ÉÍ·¦¦­µÂÎÒÖÙÜÕŹ¥˜¡£¡¥¢˜†‡ˆŽ¥«­¡Ÿœ¡²¼«’‹¡»ÅÄÅÈÎÑÉÈÃýÀÄÈÄÀÃÆÈÑ×ÙÕ×ÙÞåèëìëìîìëìïìîîííéêçæééììíëëëêëëìëèãÞàæëïññùùøøùúùùù÷ø÷ðñó÷øøøùùùùù÷õöõôñïëèåäâåéíðïëíêíïîíëëêìíïðòðñïîïññòññïíêçääàÜßãàÚÝØÐÏÕÖ×ÒÍÎÕØØÙÙÙÔÍƵ¶ÎÕÖÎÉÉÉÔÝàâäåÞËÎÛàçêíðôùüüüüøðᾟƒ€wm™ÉáèíïÝ×åïóóçØû²¡—¯ÌÜÜÏÅÕçêêãϹ¯¬³ÀÙçëïìèÚ½¿ÛåèèæãÚ¶†˜ÄßæèçèÚ«aDYhJIn…tC7g™˜w3 + $"!"#(53 + (JSfieiuŠš¦µº¼¸ººº¶³³µ·µ¶¶´©­§¢£¥¢ž™~x °ŸŠsR' ">\ek‹}unƒ””‡|rr|~ –‡‰“Š‹x{‡Ž‡quous|o~qj€ŒwdF=A>HTfdekopyz’ž›‹ˆŠ}pŠ“šr:%  + + + +#9=&(Gm„„†~mTCUl|‡Žƒd=#"7HYmf^R[__deVRGIEBEWq}{~nqˆŒ‘–”T/27Cg•”’‹…†z`kr†‹Ž‰{sy‡k`Z98???NWu‡‹Œ‹€~‹Ž‘Ž‹›£˜€b[krvg]I9M^kjrrun^I;GKNDB?2$ + 405:;@E_quxwtutl[QX]\NNNTcgmkcWB/.039>GGA1   +  + + +  +!2=?9."   &)"&& $)270- !-/(!,2, (0-155843--.,3.*)+(2=906-20*24@7598>?2/,1>@;=???GHGED<>B=?8;A=5-.('#  +:("    "E¢ÈËÑÓÏÉÀ®{WUUfskfle{{x•­ÃÎÓÊ …°ÔÚÙÛÞÞÜÙÕÔØÚÛÛÜÚÒ¾ }‰Œ±½ÈÙÝÞÝÚÙÝÛѱ‘‡ˆŽ £–‘Ž‹ˆ‹¦¶°³«²³´ºÓßͨ¬° ˜‘£­¯·«¾Â±©­¬©´ÊË·¢ª´ª³ÅÎÕÙÞÖÉÀ²¥¢Ÿ£¥§œŸ˜‰Ž•©­«¨£Ÿ¤­·©ž½ÅÈÈËÑÏËÆļ¶¾ÅÄÃÂÉÊÕÚÓÒ×ÚÝäéíëëîëééìîêííìëèæçèéëêêêéêìììêçâßâéìïò÷øøùúùøùúùøøùøøòòô÷øøùûýùùùøùùøøôôôððìæâããëîíîííêëëìíëêëíîðññïïññññòñïïíëçâààßãßÝÚ×ÖÔÖ×ÒÊÍÒÓÖÚÚØÔ×Ðõ¸ÄÐÕÑÍËÑÙÛÝâãäÙÊ×ÚçíïîðõøûüûúôéÌ£‘‚‰‡‚£ÍãéîìÚÕåîôòé׎µ£™¯ÉÛÞÐÃ×èëëãй©©¯¾ÛçêîíéÜÂÀÚæçéçæÛ´ƒ’ÃáêëééܪjDOt‘eFIkŒoH6m••ƒ>   2'!"(!*44 -Hggmiy’¡¨¯²¹º½¹º¾·²³²¶¶±¶²ª«ª¢  œ”‹u{¤­ŸjR-   5Ocr‹wjo†•“ŒnmuŠ˜œ˜–”ŠxsŽ’ƒyosqpq~tk†‹w\E?@;?Gefikmpnv€Ž–”‡}xˆ‰†˜Ÿ”sC  + + + + + + 81!Cj€ƒm\DJh~Š‹‰qK 0BOhidONacgf]EBAJ@FOjx€~tnwˆ“–“Œi7+05Rnˆ‘Š‰ˆ€mhsx‚…ˆ‘‚psv|vlZG;5=CKN^}ŠŽ‡„†“‡ƒ†”  ‘x^^mkeZOCAW`kutushI?>QVH??Oep]DDE94#"%%BGHI=<;66###" 3.A=?GTfc^UQ?:2315660(+$&4@Veb`NR[cmsw€w^:M21540/0''&'&($1>IKRZkuzyfTNYZ\TA;9==;:4# +<13:;>B\pxzuurph^TX[\SKJU^jkh]QC2/.27>4,  $$!  ##&!  ""$&.4(***2.&#(2-%&+'28>2/731//)/.,'(-7=8,2+11016?=8:;;;5++0=:@==?BAKCDFA@C?D>>772*-&##"!C§ÉÍÒÑÍÇÀ®TYUdtneljzy{“ªÀÍÏÊ£‹´ÖÛÜÝÞÜÙÖÕØÙÝÝÚØÚÒ»ƒwˆ‹‘­»ÈÙÞÝÜÛÛÛÔŦ†‹’žŸ•Š‹…©³²·­»·²ÄÞäÒ°»·¢“š¢®·º®½Â³¦©§¥®Ë˵¨¬±±²ºÉÏÞÜ×ÐÄ»©œ¡ªª§¤¡š…‡™ž¢£¨©žœ£´¦‘ŠžÀËÍÉÉÐÐÌÈÃÀº¶¿ÃÈÃÅÆÌÕ×ÓÓ×ÛÜäëìëêëëéììêëîìêêæçæéëìêéééìëêèâÞáèîòõöùøøùùùùùù÷ùùùùøùöôôùúúûüüüùùø÷ùøöøøùöòñíêçààæëëíììëëïîíêêëêíñðòòññóòñïðïîìêåããâßÞÞÜÚÙÖ×ÚÔÉÊÐÓÕØÙÝÚÙÔƹµÀÐÓÎÊÌÕØÙÜâåãÑÎ×ÝëðññðöøûüúøìÖ¯‘xˆŠ‰©ÐåèìêÚÕäîòñë×ÄÀ¶ ¦ÄÜÚÎÅÕèìêäÒ½­¦¬»Ôäêìëä×ÂÃØäèèçãݶ…—ÅáèêêæÞ©hEUz‹†fFDk‚yM5pœ~3 + +  $"& !0-+ &Fbdq‡š§¨¯µ¸¸·ºº½¾º±°´µ®¯¯¤¬¨§žŸŸ™œ£˜v{ž¬£€kY,  + ?M^t†Ž‡rlŠ‹‘€ofj˜–’’’‹Œ„y‚ŒŠ~sqpmmprpn{‡Œ}YJ@88A$(Hlx…‡oRFLarŽ’‘{O"$?Zb_aTRVgiebMC?JHARju„†|jpŠ•“uI1/6Hf{‰Œˆ‚Žv`_qxƒ†’ƒnhn„€|m_O;4;=CQ^t†ŠŽ‰}††‡Žšž˜…bV_^YTOCFN[_frtsjVFAOWKC=:36/)!"$#$%/6>luG.kœªŠ?   ##" !#"+26  !Dd|†–¤°­®¶·µ·¼¾À¸·µ´µ®ª£¤¦§¦£¥›š£­°¤ˆœ­˜„nT*   #=Y`pˆŒ|hs‚††„pmkxš•–š—”Ž‘‹~‰ŒŠ…wpnlnfepyln†‹vePC:C=Fdijgenn}ƒ…Ž‹ƒ„Œ“’Š}‰†{a7!  +  ,8)!BZs‚ƒmZMI\n‰ˆ_'"=R^^j\KKgmeg[EINE@GXs‡}wo}Ž’•”ƒZ248CPr…ˆ€|‚iain‰…ˆwkl{ƒzm\UC83ABNTc|Ž‚{‰•Ž—œ—†gGNa_bTLGITZ`iuvm^LAJTK>65Ggr^@;:7-& ") :970,,8)''!!$%1;D@LcifZXQMA710551/--" "&5CS_`QLKP]fr}„„gB4:A5;7./+1B<$%&,7AHHRevsbTV]cVF523;;?:)  /8:@=Lcnuy}xrqc]Z]ZZNCKQ\bgi]L<3-)+-MJAB1  +   + +    +    +'152)! "  !" ! !'&*252,*(%#))"#+.0+1524<8-'()./(--.2>:.30*.:48@=2533511578:?=5DE@DC?:?EB;;@8@9-72&$   "EœÄÌÐÐÍÇÀ°y[VZp}lfir€~x©¼ÉÈÅ¥•¾ÛßÚØÙØØÛÚÙÖ×ÙÛÜÜÕ¼š}vƒ‹Ž±¿ËÕÚÝÜÚÓËĶ¡Œ~‹•£¦“Ž‰Š¨¸··¸ÎÑÆ»ÆÓƯµ¹¡™“Ÿ©­³«´³¤ž¡£­Ëΰ– «²µ´½ÒÚÜÛÙÍƸ©¥§ª­«¡££“ˆƒut€Šžœ¥´¦‹‰¡ÂÐÒËÍÒÒÊËǾ¹½ÃÂÃÃÆÊÐÔÔÕÕ×ÛàçêëëëêìëêìëêééåäåççêééêëëçâÛØàçìðòõööö÷øùøøùø÷÷ö÷öø÷öôðïòöø÷÷ø÷õõóôôóòòññïññíðîìíçÞØÜâéëííêìëìëîìêëîñòñòññòóñññïìèäãßÞàÛØÙÙÖÓÔ×ÌÇÇÒØÚÝÞÞßØɳ¨¾ÊÉÊÇÉËÎÙÜÜØÉÓÝßìóõ÷õòõøúú÷îÕ£Štkk…Œ‘±ÏÙéððàÙáìñðæÔ»±™Œ¢ÂÕÜÒÂÑâååÞм¬ª©¶ÉÚßååâÖ½¸ÌÙäâàÝÖ²‡Ž¾ØâäãáÕ¬kEXtŒ‰pF:f‡xG.aœ¬‘H +    #",4  &S†’›¥®°°²¸´·¸½¾¾º²°°°¨¦¥¢ž§£— ¦³½¼¬Œ|›¨š…iR- +#@Wbn‹”Š}qrŠ„vjpzŒ˜œœ–˜‘Œ’Š‚†Š‹…yvbehahmqovŠˆtbWCBABM^fkdgltrq€ŒŽ‹„ˆ|€ykz…†l@  +    +)2#5\jz‚q]EDZh{}ƒ|c, /EYbgbVZedhjkRHGCEBWexvclŽ–”‡b<.3<>_p††|{yje^hoy}ƒripv|nebE8/:@MZjv…‰‡‹}o†ŽŠ”–ŽkNUa`bTPFBNSdiy}qeO:HMK?728ZpeD:?94.'.+*'%")% !'(! '5=BEH_jb[ZQD?61/55-/4/%! !#1C]gf^QNQT`p‹†jE24?>=;=GB;1%**-!   + CžÀÊÌÎÍËÀ°xZXYhxmiiju~~Ž£¶¿Á¿¡™Á×ÛÙØØÛÙØØÖÕÙÚÝÛÕĬ‘„yƒ‘Ÿ±¿ÊÙÛÛÔÏÉÊÍÂ¥Š‚ˆ›¡“’Œ‰€¤¼º·¿ÓÙØͼ¾¹¦²²¥š•¡°·³­±¯«¢¥¢¢²ËÈ«‰€Ÿ¬¯·¸ÃÒÚÝÛÓ̲¡£««ª¥ª®«”‰zzƒ›¤®²¨Œ‹¡½Ô×ÐÊËÌÊÈĽ¼»½ÄËÊÐÐÐÒÏÍÓØÝåèêìêêëêìêéêæåååæèêééèëëêåÚØÚÝäèêëîíïðïîîïîñððñðïîðîîîêåæéëîíîññïìííëëëëëìíìêéëêéêéæàßÝàåêíííêëîîììíîïðñòððòóòññðîêåÝÛÜßÙ×ÛÖØÚÙÓÎÌÏÔÛÜÛÝááÜɶª¸ÇÈÅÇÇÅÈÊÔØÊÎáäêðöø÷÷óõö÷öí×®†nhil²ÔåìñòåÙãìððèÕ¾¼®˜‘¢ÇßãÕÃÌâèèãÓ¼®¬¬µÎáæééçÚÁ¹ÍßæçãáÛ¹‚Š¹ØàâáâÖ«qI[}ŽŽtO=j†€N5f¤±œQ +    +  &11 + -l›¢¬°¯´³±¯´·µº¾¾»µ¬¨£¦¤Ÿ ž¢«­´»¿ÂÁ«ˆs–©ž…mV3   AWbwŠ”Ž}on~‘†qnq…’–ž•™•’Ž“’‡wg_efadfoptˆŽwcUCACEM_ihhhnoxov|~mvxzu~…–™}B!  +  +   *9$/Pn€‹r_RGMis‚‡~e-(?T_`dbTW^_ehXL@@BBHar|ƒ{ff˜™“{M4.6?Qm~„~‚ƒtf^[dhu€{mp|€ushR<27@FOclvƒ‚z|sz‚“ŠŽoKKQ^ih_M?DZfiswpdU>AED>924GhnR877:3&#   ')()(*(&!)('!*7>?BLbid^YOC61.0/13.32(%"!!%)0FfuwhVTPXay‹ŽˆkD368?IF4.,((&&##)9.19>@GKC0 +  +   +  +   +$-..*, '! !" +"&$$0!)%"450&'$% $" 064/7?80(,+65*(1.-=70.+.,25;8375573-;049<:==:E@GJ309?A:9<@?66*1++  "B)C›ÁÉÌËÎÉÀ¬|Z^[jujhigyuz’¥·º¾¸ŸÃÖÜÙ×ÜÛØÕÖ×ÙÚÙÖÐø¥|uˆ‹Š›±½È×ØÒÉÍÔÛÜѲ‰…“¤¤’’ŠˆŠ¨¸µ¹ÁÚäèåϾ·­´´¥–”£°´·ª¶·«¥£Ÿ¢¯Ìʱ‡h¥¬°¼¿ÌÙÛÜ×Îÿ®¢­®¯¯¬³µ¥–„sow™ž©°¨Š¡¼ÒÙÓÈÍÎËÈÀ»¸»ÀÃÅËÑÒÑÍÎÏÓÛáçêêêêéêêêéççäääæççèèéêêèãÞâçêìíïîïðïðòòðïîðððòðñðïïîïðìåæêìïñó÷÷öõóðííííïïðîïïñðîïïïïîêåááçëëëéëêëëëëìððñïññòññòñîëçßÛÝßàÝÙØÛ××ÓÎÊÌÑ×ÛÛÞáàÚɵ¨µÃÅÆȺµ¿ÎÄÁÜãèïõøø÷÷óô÷öíߺŒtaZikv†•·ÔæíóôèÛäïòðéÛ¹®“¤ÄàäÚÉÐäêëæÖÁ³©¨´ÓåëëëéàÁ¼Õäçéçæᆇ½ÝäèéæݳsOXv“qH@f„‚K5_ ³ R  + +  $",-0$ + +1w¤ª®­´´±°°µ¶µ¸½¼²ª§¤£¦¡œ¢£¸¿ÁÅÆDZw“°¤z\5   +6Tbm…“ng|“…xpw–›ž›˜™˜——’š“–”ˆ{jf^icgimfj„iOJ=HAAN]m|€{}Š‘”†Š}t_LQammi]HES]ckvqeUE=>FB<75B]i[A4<;1-((!)/*,,,/&%+$ #,.,*4:>FTbjh`VK@931+/4324/$ " "#%+4Gh‡‡wbYVVf~š‘rC/146:@2-,,,!&'4>?I[gp‚{j][``]TA6179@:3' ")427BUhpswrqrmb[[^ZVLEIO^kolcR:64228EUVN8!  +  +  +    (4327& %!%$("$ " "+& *42'! ! !2427?@:-.)(3/*-+/5?40',10,1841/39681.29B>678>=AEA7/8A?><>:6=343&#! +  !EžÁÈÌÌÍɬy[^]fxning€}z¦·¾Â¹˜ÃØÙÓÕÛÚ×ÑÖØÙÔÐÍÅÃÅ·“{v‚“ž«»ÃËÍÎÓÜäæäض’Š‡§¦“’Œ‚€©´³»Çáíðïæк´Á½§•‘¢¯°·®¾¿®¤£ž °ËɲŽlo‡ «¸ÅÌÖÚÛ×Íÿ¶«©­°¯¬¯²­›‰oc}›Ÿ¥°£”Œ ½Î×ÔÈÊÌÌÇÀ½¿ÁÃÆÅÍÓÔÎÍÐÐÑÙäéèéëêèëìéçæäåæäçèæçèëëçàÜäîóôõôõööö÷øøøø÷øöøøø÷ö÷ö÷øöôóïìðôöøùûüýüùùø÷÷ööõöööööõöö÷÷ö÷÷òíåáæëíëéèêíìêëîîððñòñññòðîêäáÝÞÝÛÝÜÛÛØØÓÑÉÊÍÔÚÜÜÜßÙ̹ª±½ÃÍÎÄ´·ºº®ÇäåíôøøùøõöòôðãÆ™th__]fx‰—¸ÖãëðóéàæðòñëÙ¹®››ÁßäØÇÍãêëèزª°ºÒåîîíìá¾Õåêèéçáĉ…¼Þèëêéâ·uJZu’qN=gˆzN5^œ¯£b  ".4  + /l¥««®´¯°­°·µºº¿²¬ª§¢¤Ÿ™š•˜°ÃÇÄÁÄÇ¿¦‰}™±©”{\4   5TWi“uo}‘‰{q‚—™™ ¡š•–—•”˜Œ†zmb`egbekhey…zcLIA>?J`bdheccjkqtŽ‘”œ££˜ŒŠ…h@- + + 5>0 $Bcq€…aJHAZn€‹tB +;KVg\\LN`ff]H@B??8Tcmx}v_dw’›’f@-$4=Roƒ‹ˆ‡ƒ{i\SZinŽ~mvxtvocR@21=AAYjuxƒ‡ƒz„‘‘ˆˆ‡ˆ€gMLYgprgP?FZbhzsjSF>@HCC<6:LgkW>1151#!(-21-&&/,# '*(%)1<@CRejg^]RD<93/,4<667+!!$)()-1HkŽ’„m\Wcl€’™•zG*'057<9' + +!'117?Rlvtopqqpc^[Z\VJGMN`irl^O=6402>IYWP>  + +    +   +  +   *=A97)#" ! !#& %  &#*.,'#  " '3369:7-.0(/-)+.)1=<,+'-629436925;;.)1<>8;=9A@><=:29>:5<><=A760&$ F ÁÇÌËÏÊÀ£v]\\j}ogplv}¢·Âþ›—¿ÕÚÓÔ×ÙÖÓÖÔÍÅÆÃÆÔÚÊ}†“–œ¯»ºÃÈÖàæéëéÞº”Š†©£Œ{‹ª¸´»Éãîñòðæ˴¾ª—Ž¢²®±°Âű¤¡¨¤±Èǯ‘g^d’¬·ÇÎ×ÚÙÕÎÄÀ¹°«ª¯° Ÿ§­¢ŒuŠ¥®¯¤—Œ¡»ÒÙÙÌÇÉÊÆÁ¿ÁÂÀÁÌËÍÒÑÍÑÏÒÖÞåçééêéêêéääççèèçæçéêêæÝÚâíõøùùùúúùùûûùùúúùúøûûùùøùùúù÷÷ôóõ÷ùûûüüýüüûûùùùøùúùøùøùøøúùùøøøóñèáäéëêééëíëêëíîïñðññòðñîêåßÛÝÞÜÚßâÞÚÙ×ÖÏÎÌÑØÚÚÛßÛɸ¤±ÀÎÕϾµ¹µ©®ÐáçòøøøùùùôòòåÊ£zd]``abx…—²Óâêñóéßçïóòë×Á¹²¥”ÁÛÝÑÄÍáêíêÙí­±¸ÉâêîðíâüÖæêêêèâÁŒ‹¿àêìêìã¾…GV|‰vS@d…wP7`œ²§i%  + $&"$'0$  0nœ¦¯¬°®®­®³µ·¶¶¯«¬¨˜—‰œ´ÆÈÃÂÃÁÀ°}“¬ªa5  3Q_gr‹Œ…sixˆ†‡~s{“˜›¡š–—˜™–”Œxskbm_[_dhkx…|k_HC>F@OTZeknbcfnˆš•“‘’Šyvzc="   +  5G2CfsŒ‹€iI<7Sk€Ž‚L$7EXhh]QVbdkgTMNA:8EWmu~medr™š˜}J/,57E_|…€‚ƒ„wi`WVfuƒ’‘Œzopxxsh_Q2'5EFQ[s‚ŽŠ‚€ŠŠ‰‹ŠŠŒŽnU=G_nleP>?IZh{zjYJAFFIB=87@\mhE9:40# !+:8510-6.*!!!$!*3:@ANckc]\SFAC4025665;*$  !%''&(5Hf”mYXaj}‘™”‚E)&*-2@=0(&!!!# '<@JENap~€y^O\Z^XL8547( !.218@Qeqrmmoqoc]]``\OMLX_cihZG?8245:W^XQ9$    +      .8AD<'  .$"&! $$ #+"$,.($'-# ! *543)281*.+'.3),/59=/&-/0333:=6159:2+-75>;8:>@A?:35=<<92:6"     !@½ÅÉÊÌƽ¢xX\[hmnjl}„†”¤¶Âýž˜ºÑÙÖÕÙÙ×ØÓɺ¹ÂÏÝâà˧‡{…‘‘ ¯»¾ÈÔàèëìëéß¿˜‡…¦¤‘”Žƒ­¹¶¾Ëåðóôñïâų±¤˜—¡®²´­Â­¥£¢¤µÈ«ˆh][~¦ºÆÏÔÚÙÖÏÆÈÅ¿¶©®± š©§˜”˜ž¥¨­±¡““¦¿ÒÛØÓÈÇÈÁ½ÁÀÁÂÅËÌÎÎÐÏÑÎÌÒÛâçèééëéçæâäççèêèæèèèäÝÛäîôùùùùùúûùùûùúûúùøùúûüùùùùùùúùøôõ÷úüûüýýûüüüûùùùùøøùùùùùøùùùúúùøùöñéááèëëéêìëëéêîïñòòôòññíèäÜÜÞÝÝÝÛÝàÞÚÕÕÐÑÏÐÔÙÙÛÝÚ̶§¬¾ÎÐɾ»À±£±ÊÜëõúùùùúøóïìÒ¬€a_Z[cdlq‹˜²ÔäëîñéàèðóóíÜÀ¶² ‘µ×ÜÓÂÈàîîéÚ¿ª¬¯°ÃÞéíðíâÃÁØçêëêëäÅŽˆ¼àêíîëåÃ…Z_q‹sMCg€qS>Q˜¶¨\! + + + $!!*2" +nŸ¤¨¬¬«®µ³®°­³°®¯¥žŸœŸœ¢ ‘ž¹ÆÊÇÅÃÆÁ¯z‘¥ Šud5 +  8P[nƒ‘’„rjj‚—Ž~m|‰ ›œ¢£“—˜——“’‰…stqld^bllnu‰t`DCB=AHNccgcngkm|Œ~rqtrmcp|f?)  + + + +   3>49_s‡ƒ{`F<;E_w„‰S -FajeTJKaijh^VF@@@>Qditvhaa{˜š™ƒW8+318Nh„‰‰…tufWVq|€†“ˆop||qoeO>-1BEJZo{‚ƒ€z†‡Ž†‡’‘‘{`?=L\dhXD?AK`vpbJCIDFE??30PeiR<16+&DG?8502-(# !%$,47=4( !,379CUhpqpppspa^_c^UJGJXdlpk\JA72/5=Qe`O:"    + + + + + + + +    + ++A?A8'",&(#!!#!$$& +&-'"#$%! +'*4922981/,-*-1-#,4:;4),,.1:773258673*4657397??><5475-" +  JÀÆÈÉÉù vXUZk~njpez„‘žµ¾Ã»™”ºÑÙØÔÖ×ØÖÌÁ³ºÏÝæçäЧ‰‚‡Œ’ ±»Ã×àèìëíìêßÀš…‡“¤¢’‘Œƒ†”©¶¶»ÊåðóôôñïÜ´¨ –—£³·¹­¿Å°£¨Ÿ¢³É¾¨‚g[[g“±ÁËÔÕÕÕÓÌÌÊį¬±¦’‹¢ª›˜¡«§¤§¯£•–£ÀÓØÙÓÊËʾÂÀÀÄÈÏÑÓÐÒÑÓÎÊÓÞäçêêêëéçåãççèééçæééâÜÝçïöùúúøøúüùùûúùùùúùùúúúúúúùúøûûùù÷õùûýýüýýüüûüüúùùúúúúøø÷øùùúùúúùùùø÷ñæßãèëëêëëììêëìïðñòññðîçãÞÛÛÙÛÜÚÝÞàßØ×ÖÕÒÑ×ÙÚÚÝÙʶ¬«¾ÊÎÎÉǾ¨¦·ÄÜíöùùùùú÷òíÜ»•hSNUP]oyŠ‘¯ÒãçìðéãèñôôîÛĽ³™ŠŽ¶ÚãÙÇÏãëíéÚ¿¯­­®ËßéîïëáÉÁÚéêììêæÈ“‹½àéîîìåÆXUq…oJ@dxwX7Qšµ¨a"  +%!!#")3 + ;l ©¥¦¥«±²­«¯ª¨¯®¤¥Ÿž—•¬´¥ž¢¶ÂÄÇÀ¾¿Á«ˆt¢œ‹wV-  >NXd‚„pr…’š’‡tu’Ÿ¦¤¢šœ–••ŠŽŒˆyvtfb``lkgn}|n\KH@<:GQdjfc\__ertsc[cnjdp‚‡cG+   +  (B6!5Zs|s`OC6D]pˆU +":OafYPTRdhfbPHC??;J]gntk_^mŽ›ŒpC(($5=[yŒ‰}pidZgpxƒŒ—‘~n}€|jZ@/.;?OTgr~}‹ƒx|Œ‹€‚ŽˆnO87Pbc_E4:F[q}yhNEABFIFA,*@_h`P20)#!#LIF=8750($! $075=APge]Z^TD?967A78633,&"!" &())0Ij€qWP[ey—”ƒO,"'103361*0"#%")>KQKXds€xbSS]Z[Q<26=;80'" ,479@Wiqyyrvtpfb_]VSEEKUfnkd[G<7./5;S^YN7   +  +  + + + +     -D?@8/ +%"%!(!&&("! " " "#)*"&'# ! "%,25/7;4.0(%10) ((.:10,%.12485.10360,''5:4657=@@G==9CJC@?<7@;0/50&# GÂÈÇÉÉÇ»žs\QZmyggnr{€w£´º¿¿˜ºÏÕÓÒÔÙÖÍɾÂÓÝåéêåÑ©ˆƒŠ•¡´ÀÌßæêëëíëêß½”†‹¤¤‹†Ž”©¶³¹Èäíòôóòò槠ž—§¯´·®½Á¯¨§ŸªÁ½¤Œic[x•«¼ÃÍÏÑÒÑÌÎÒÌÆ´ª®©Ž†—¡¥­©¨«­Ÿ”“ ¿ÒØÖÏËÎÌľ¿ÄÄÄÆÐÑÑÒÐÌÏÏÑÕÜåêëééçåæåäåêéççèéèàÛÝéðôúùùùùøùúùüúùûùùüùûûûûûúùùùúúùúøõõùúüúûüûûüûúúùø÷ùùúúùøùùùùùúùùùùûûùöïèààèêêêëìíêéìíïïñðððïëåÜÙÚÙÛÜßÞÞÜßÛ×Õ×ÔÔØÙ×ÙÜØÊ·­®ÇÎÔÖËů¢¬¸ÇàïøùùøùøõðçÍžr\CBDP]y“™¯ÐãéìòìâçðôõïÜż¸ž‹½âæÚÇÑåéëê×½®«¯·ÏåëðïïãÍ¿ÖæìíîëæË–Ž¼áêîïíèÁ‚UXr…rQBayrQ2M”²§d+ $( %+6 +$lœ¤¢¢§«¯®«©§¨¬¨¤¡›˜£«¸½°Ÿ¥³ÁÂÁþ¾¶§‡z‹—u_7 + 8PX[Ž‡|pr…š—lu†šž¥ žŸžžž–ŽŒ’xjkfYVad_am{„lVND>>>DFNaa[PRSLWbdTSdpcboŒ‰jA  +   +   (0<5(Zo€|ydMD/Bdu‡‹‡a" +3L]ff\JKZ^gaWKDB:@BWhq{pbYeŠ˜˜L*$,5NxƒŒŒƒsvm`ap||‚’–„gq…zpcP1$6?HOamu}‚||‚Š‹€ˆ‘•‰`:27D`_<88COfyzsUD=@JJIB.'1Oim^D/%#!LFE@<9:3)"""$-48>DLagc][QI=9<8>:9:820/# !#&'*/=a€‘ŒpRJGYs˜•„R,"$65465.'%##!"(=IQNS_qxhWZZ[_VC98=<@;0!!08>=E_msuzvrurib^a\QGFP\ghjeSA;:453381/<;/-+383159=@>@?59@C<@:785:61/'   I ÃÆÇÊǸ›s\U\qthfiqz€x•¥·¼¾º–¸ÍÓÓÖÙØÔÇÇÌÖßäçéêäϧ‡€„‘—¡³ÁÑãêêëíììêß½–‡Š¢›‹Œƒƒ”©¶³¶ÂßèíïïðïéЫšœ›œ¨³²ªº¸¬¡¦¢­¿¸¨†dgi’¬®¸¼ÀÇÈÌÏËÐÎËɾ¯¨­˜‚•‚’£­¥¨®Ÿ”—¥ÂÒØÕÒÌÊʽÀÅÇÇÈÌÊÊÒÏÈÊÎÑ×àåèéëèèåäååæéèèçççßØÜéñõùùúùûûùùúùøøùùûúúüùüúùúùú÷ùùø÷õôððõøööø÷÷ö÷øø÷ùúùùúøøøùùúùùùúùøùúùúúøöïçÞÞçìëêêëëêììîïðïïîïìéàÜÚ××ÜÛÚÙÜÝÚØØÖÓÓÓØ××ÛØ̺«¹ÇÐÕÒɼ ž§¸ÊáíõúùùøøöðÞ¾‹[XBKKC\„¯³¨ž±ÑâèïóìæêñóóíÚĽ° ‘§ÕæåØÉÏàéêèÚ¾®ª«·ÕèíïïïæÌÀÕèìîïíèÊ”¼áëðîêáÇWRq‰ŽvI;X~u[;W”°¢n'   &#(74% + 'iž¡£§©ªª©¥ž£¥¢šŸ“ªµ¸¹«” ¶¿¹»º··°¤‚tƒ’‡oma7  8O_e~‹„xnz„‡‘’‚mo~š£ ž›ž¢¡Ÿ™”’Ž‹qj[^XQ^eicg„„k[FB8:5=Qoˆ‘Žp2 + +&Icb\REDR]acVN@<>CFQetz~wa]z‘–ŒY- !(.Fe|†Š†{~oaMfow}Ž—‰oqv~~pgT9$.5CNMcr‚„}lcrƒˆ……‘•‰h>0'2BO7-5:DZpqiZF?AMQN:-#'8[j^K0/)'QJIE@?=8. &%%')1;ABPbid`ZK?>:775777752( """#%,:Y}’ŽlN@:Km†š™ˆU,*,/57,$(%!" !'9CJNP^k~l^ZY^`YLA<;8>@7 %2:8;G_qutwrutrg\]__WPLL[glg^RE=9:722171557289;AA<26?FF=67=6886/&   N¤¿ÃÇÉÈÀ´™t_^]hxjell}|’¨½ÀÀ¶”ŽµËÓÕÓÚØÐÇÏÚâèéêëêåѤƒ|‡’°¼Îäêëëêëíéܼ˜ŒŠ–£›‹Ž‹‡Š•«¶´¸ÂÜåééëëéåÓ±’‹˜ ©°±§´¶§Ÿ¤  ¨Á½¦‰glq Å¿±º¹ÂÃÃÌÎÏÎÉ¿·ªŸ¡—~‚‡yw£Ÿ « ’£ÀÒÙÒÈÉÎÌþÁÂÊÊÍÊËËÌÌÍÉÊÏÙàåçéêèåãâäçéêéèçåáÖ×éñõùùùùúùüúùúùúúùùúùùùúùøùù÷öôôôôóñðììïòóñòôòññóñðôôôö÷ø÷øøùùúùùúùúûùùúøùùôîèÛâêêéêêêéêëííððïðíïêãÛÙÕ×ÚÚÚØÜÛØØØØØÓÔÕØØØØɸ¹ÃÌÕÔÉ¿§•¢©±Îáíöúù÷÷÷ôéÒ·„`M?ABMg™Ç̺£´ÒåèìòîèêðòòëÚº¶’ÀâçÝÍÂÏÞèëèÙ¾°®®¸Ñåìððêå̾ÕæíðïíêÌ‘Ž½áêîîêáÉTPnˆŽpLCb|wX4R¯¦u0   " ,4"   ^•šœž›–›š’’ˆ‚©«­«™‹˜®¶ªª©©¤¥—t‚†~mnR/  + 4MZay‹Špe~ŠƒŽ‘‚koz”¡žŸ¡¡¦¥œ˜”Žˆ„ˆunn^YYUVcg`eˆl\L@6;?K?EIFJM@CH[[gcggimij‚”~I)    ')=fmxr]C@/>Mh€‡‰d= + 9U\ZI>@KLQcT>;6@?AF`s~}m`O_ŽŽ‚Y("#0X|‰ˆ…}|zx[IJ]mmo‚pahtqo[C(#2;=DKY]jdNBWt|llyˆc9)$(00( 7FOgjWG@;@FCC6,%*BVZQ40(%"ZTNHB>;6."$ !#(#,4=@DTgig[XMA@B;88131573+! $!"""$"*9V}ŠmQEESkŠ™™‰U-%!),.8:2/)'$%!!6@HNI[gyƒteYT^_[LA56??<0(&26;OYVD/   + +  +  + +    + +  3! +  !"*&(%&! " '6690.+*+,)&+:3.*+0*'15;7569472441657/69:E>729@CB=:?7/112/& +   "K¢½ÀÇÆÆÀµ›q^\_p}hgnm|x}“§½ÄŶ’ºÎÓÏÏ×ÒÊÎÜãéëìëëéäѦŠ†ŽŽ•¡°¿Îäéêêììêèܼ˜Š‹“¤¡”‹ŒŠ‹”ªµ±¼ÈÜèéêêëìèضzŒ¡ª¬­©¶º©£¤Ÿ¢­¾½§Šgfu©ÐÕ¹©°±»»½ÈÍÎǽ²Ÿ’Ž‹}oy‡~jw‘ž£«¥–”©ÂÕÚÖÉÁÉÍÆÁÂÆËËÎËÍÏËËÇÉËËÕßåçééææäåéçèæçèæÞ×Úçðöùùùúúúùûûúùùùúúüúùùù÷öõõòôôöõ÷÷õöóîïòôöõõõööõôóóðñðððòóööøøøùùúùùúúùúûøøøôñëàáçêëëêëëëíííîððïðëäÚ×Ô×ÖØØÙÜÙ×Õ×ÖÓÓÓÖÕ×ÚÙ̼¹ÃÏÒÏ¿­—Ÿ¦°Éáïöúúù÷÷ðÞÁ¹›iKN^cx†‹{mv‚‘|mo{›   ¡¡žš’Œx~nfcZW[Vad`ftteEF><67:GSSRNRJEMeqlnozykrŠ“ƒR6"   + + 8>9;0(-/&2IV_kS4 +  +?DC90('<==5+))58:-?ONJ@.%7NPSD,!!#1UstdTHKZK1-/:9+EYM6DUbS7$"##)),33-##+GQRF7CMA.! $ $5FVZ>57;8;=?:5*'350& _WQGA>:8*(* ! +5;=DWaid\SIC@?:97<5423.& ! !%+#$(*5S}ŒpWXW_n†–›ŽZ3%$-21-56$'(' !#4BNQJMbp|xeXX[^\K=54?><:+&,9D>Pdmuvvv{yqc]\[TKJRT`fdcZRE55021K<;72,2/    "Q¢¿ÃÈÉʽ¶Ÿx^W_szkhko|z‡”¡­¿Ã¾—•ºÎÔÏÓÑÊÊ×åêëëëêëéäÍ£†Ž•¦¶ÀÏäéêéìëéäÖµ‘„„“ž›”‘Š‰¥¯±»Çàëìîíîíêཔ¡««©¥»º¨ž¡  ¨··¤‘ofw­Î׿›—¤¨´»ÁÊÎÉ¿¯œ’‚yqn‚~lj„›¤®£š–ªÀÑÙÓÈÂÇÌÆÀÅÇÌÐÎÉÉÌÌÊÊÉÎÌÕßâååæäæååèæãäççá×Õäíñ÷ùùùùøùùúúùúøúùùùùøöõõòôôö÷÷öøùøøøöñïïòô÷õôøø÷ù÷÷öôôñððñóòóôõøøùùùùùøúùùùøùôïæßâæéëìëêëëêíïïïïíëãÛÚÓÔÕÚÚÙÙÙ×ÙÛÖÑÐÐÓÒÒÛØ˾¶ºÇËƾ¢’–œ¥ÁÝïöùøøøóçоÀ«rT>E63896.68<4&% YWMFAB@7, "#-9>>EVejh^VLE?;53=>:5660'"!"""&*&)/?X~ŒuZ[]bqŠ•—\6)$,3615(!*&%,8HMGI^jy{iXV[^\N?64:@@=)(09??Lcoyvx|€qb`d]QNKRXbbccXIE814235>BE8%    +  +   + + + + +  + +#:FB62  !#$ !"""$$&&&""! *"%,1201))(%,44.),0'*35:<216950%+38=4/1>F\cid\WLFB<47=B639:/( "#&&$$+3B]{Žx]VYcn‡“™`7$)2713-)! $$+6BLKMXgxyo\UX]ZKG:7?E?:4!$16C@LanzywzwwodZ^\VUVPX_d`^SLC40213?GMG6.        + + +  +     ;@@>- +"  "&&"&&##!"!##&#5333+))&" + (95.)--%036::59962,/.4345359C>=?79>?==A=>:3-10$$ +    7f«½ÄÈÆÅ¿³”pX\]mvjmur‚…‘”“©´”‘ºÏÓÒËÌÉÎáèëêëëëëêåÊŸ…ƒŽ”Ÿ°¿ÐâèêêêèäÙÊ®‘Š„¡™‰‡‹–®µ±ºÈßèëèèééçغ”‰Ž«´³¡¤¦ œŸ™ ¬´¬¥•††«ÐÜÈœ}Š™ ª¼ÅÉÊǵ«›Œ‚{wirqhcƒž§¤š«ÁÑ×ÔÊÉÓ×ͽ¿ÇÉÊÆÅÅÈÈÊÌÌÇÊ×ÞâçããââäççåçèçÞ×Úæïïðô÷øùùúøùûùûúúùùöóôö÷÷ùùùùöóøôóóòòóñêæèíððóóòóôñôôôóòöøøöõóõòóóõõ÷øúøøùùùùùùøõðèÜÝèëêêééìëêëëíîíéãÞÚÖ×ÙÜÚÙÕÕÕ×Ö×ÒÕÜÛÚÙßÝͼ´¸¼ÃÁ¶ ››ž»ÜìóùøôñàÈ»ÈÊ®|\KCE_’¾ÚÚÊ®µÓãåæëéæíñòñçØĺ³­­¹ÑÞãÝËÉÛæèæÚ­£¨°ËäêíîìåξÍåëíëëéИ‡µÝêíììåÇ‘]Nn‹rO@\vyP:U©¦~0 + ," +>WdY`ccca`ZVT^\luvu‡‡ˆŠ…z{ƒ‹Ž„†‹„zr{‰„yu`3 + + 2NU_x‰ŒŠ~pkp…ŒŒwtu}‹“‹†„‚‚wzvtyqjeYZSM@T`iabs€ygTBD::?=50(*.5?@Oaosywrorlf\\_XMRO]^bebWH=5/++5=FNF>&     +    +    + +  + +   :AA5-  + #"!!#)($$$ # ")%&".12/)((% /:/,)++/0174236164.,+622688@JC6655<;B@<>?:1.0) +4m­ÂÄÆÇÄ¿±–kVYaouksqqƒ‚~ˆŠŠ†‹”¶ÌÕÒÉÆÈÖàãèéééêééßÄ¢Šƒ‰Ž’²½ÑãçèèèæàÛÏ®‹…ƒ£ŒŒŠ—¬®°ºÈßèêéëêèæÙ»›Ž™ª³°¬«§Ÿ˜¢›«¸¯¡Œuvˆ¬ÏÜʧ~‰•œ±ÀÈÌǹ¯£„‡~sjhsigwœª£¢Ÿ¥ÀÔ×ÕÔÐÓÕ̽ºÃÆÉÄÆÅÊÊÌÍÎÊÉÖÝâãáâãååçääçãÞÚØàîôõò÷øøøùùùúúùøùøø÷õôö÷úùøø÷õõòôóòóòññîêçêíïíðððòòñòòóóôôõ÷øöø÷õòóóóóòöøøùùùùùùøõòîèÞâéêìëêéëëêìíîíçßÝÛØ×ØÜÚÙ××ÓÑÔÍÍØÜàââãÝϼ³²¸Ã𛜖š´×êòúùôêÓ³®À­}\MEFa˜¾ÛÚÊ­¯ÓãããçæäîòòñèÖÄ»µ¢¶ÔßãÛÉÁÔâçåÔ½°§¨²Éáéìíìå̹ÊãìñíëçÑ™ŒµÞêîìëæÆTPm‡yS;]yxW>L‰ž p1   +#0+  9\\_aagb]Y\SPZdimrs‚‰ŒŠˆ…u{…“‹‰Œ‹{ƒ‡Œy{a=  0IUepˆˆŠ…oks‰wnq{ŠŽŒ‚‚ƒ{moonnoa`[YRNEL^ne^r†}oUFG;:AUbetj`cagg|Ž˜“Ž‘Ž†›–m@!       + +  + + +    +  +   +  + + +      + +   + +#& e_W\SJB7$"&)"&$,9@BESksnsbNEBC>@:9<<71,'"!!#%$" )08Wv‡{W]`bn‡“™ŽgB(%442=7')"##!(4=EDCKbnto^XXX]REB39A;;4&/44<@Obotwvurpng_\YVKLPV\dh_NE<8.,04;LSJ:$  +  +    + +   +  +   $>EA/&  +!$ !##  "$#*3* !% #!0," &56:*'$( !/7""%)'!*5:8332133,,065/:7;AIB>72489AH<:=714)&% >)- + + .g®ÀÂÆÅþµ—jUUbkxijq|…Šˆ‚…‚š¾ÏÕÓÒÎÊ×ÞßáãéëéèçÜ™†ƒ‰‘’ž°¿ÎáçççæåáÝÒ·†‰‘œˆ…ˆ‹‹”ª³´¸ÅÜäãäáááßÔµ›—‘Ÿ©®¯¯¯¡¢ž  ™«¸¯¤„jn†³ÑÜÌ©…x€„µÂÈŹ²¤‘|‚xmfnpqz‘ª¨–š¨¼ÑØØÙÔÕÕÊ¿½¿ÁÃÃÅÃÍÎÐËËÌÍÖÝááãããåäææççß×ÖÞéðóõôö÷ùøûúùùøùøùõõõõ÷øùøóõöõôõôòïïìêëäÞÜáÞÛÚÝßßãçëëîðñòòóôôõöø÷øöõòòññõöúøùúùùøøóóïìãÛäéêêéëëëêêëëêæÝÜÜÚÙÙÚÛÚØØÖÒÎÇËÓÞåæåãÜÒ¸±·Ãº¥ œ•ŒŒ˜³Òêò÷÷ñá⦸Á©[LFNlŸÄÝÚŪ®ÎàâÜæäáíñòîç×¹®šžºÖÝãÙÅ¿ÈÑÖÛÌ»«¢¦³ÉÝçëëëåͼËäëìîìéÒž‰±ÜéìëìçÊ’ZLl‚‰|S6^yv]9Gˆ›•]#  "64   7Zbcja`ei`ZRNXdposl‰Œ…ƒz|†‘•˜—’‘––“€…ŒŽxuiC'  0TTat†‡Šnlo}‡ˆ{sv€†ŽŽƒ~pmkjmoa]WTT^WVamihuˆ~kPKA@9844(#!!$%! "*8UzŽz_X`^n‰–™‘oA/!-2265/% !'$2:FEEDXhspdXUZZOK>76:>>4% *657;Qduwtqrssob`UPKFDLW_fe^TI@550871& #" "#!*-%## !$##!!096/(('$$$/:$&*&,55>4,/75202477:A99==@@8923=<<95:437+(%  + + +  -c¨ÂÅÇÇÄ»±šrYZYkphjv’¸°–—‘ˆ„ƒ|{™»ÌÒÒÑÎÎØÝÝÜÝãäæåä×¹˜ˆˆŒŽ”¡±ÀÍÝâãäãåáÜв’‰‰ˆžŒŠ‰ˆ’¬²¯´¾ÔÙÖÑÑÎÎÊ¿¯š“•¢­¯®¥«¤Ÿ ž›Ÿ«³ª¤ˆdm~¬ÒÝΧ‹‚ƒ|‰¢º½¾¸¬Žƒ‚}mow}‚Ÿ¦›œ¦ºÌÑ×ÕÕÐÍǼ¹·¾ÁÂÂÄËÑÒÑÉÊÌÓÚßäãââåäæèæåÛØßêíñôóòøøøúùøùùøøöóôõöø÷÷÷õõõôõòòìèâÚ×ÒËÁ½Á¿º¹·ººÂÅÏÕÚâèîîòòôôôôöøõøõôôõ÷øùùùùøùøøôòòðéÜßåëêëëêêééêêéåàÛÙØÙÜÜÛÚ×ÖÓÐÉÅÊÑÚÞãåçßÏÁº²¸º­¡ —‰‡‘¬ÍæóùôëÓ«’¡·È¬„aKHTx£ÈÛ×ì®ÈÚÚÚäããìóñíäÔ½µ«œ¡ºÒÜßÖÀº¾½ÆÌų§Ÿ¡¬ÇØäéëéåË¿ÏàèêììéÏšˆ±ØéííìæË’UDg{H;Zu}b8J~“‹Y'    +,  +/Tcbeca\`f_a\ahr|uv}‚‡ƒxwŠ˜£¢ž¦¤¤›…‡Ž‰xh`=  *HP_mu…‰}wfxƒ„slo€Ž‘Žƒpqwricgfgkdc]_^aZahoc\nvh^A@=>DXionyhZehml~‹”ŽŠ¥¦}C)  + +   8B4   +         + +  +    +  +   + +        +c`b[XUE9)!$!%!!#08@BDQkpoh`UKH>CE?@<;68-&"  !)*# &3OzŽ“bScel‚‘™“q@""! ++-2.-#$!%#!4:@FGFRepme[RTWPL?457:81'%,30?Vdookkoxwk\UOTMFILYab^[NF::8546@JLH4    +  + + +  +   + + + +  (3! + %'&$%'!!& !%$,44+&*+# '((*&++(,)1619=/573-*'256306=EE<@;;99@B=;<730-!! !Q¢ÀÅÄÂÂÀ¯“kTW`knov¶Î³’•¦«‹‚‚˜¿ÍÐÄÂÊÑØÚ×ÖÚÜÞÞãäà߇|ˆŠ”§³¼ÈØÜáåèçäÛШ‘Šˆ‘¢ŒŒ‰˜ª­­°°²±°©­²®¨£ —‘— ª¨£™ž¡š ž˜£¥Ÿ‡kmlŒ­¸²–ˆŒoVT\s‚ˆ†Š„‹€†…Š‰Ž—–•”›Ÿ¢ žœœ §§´ÁÁ¸°ª«¬´¸¼ÃÐÕÓÎÎÈÈÎÙÜáããáááåæâÝÚãðõöôðôôøøùùùùøø÷ö÷÷øö÷öóõôòðéàÕƳª¥˜Ž‰Š…†ˆ‘‹}xz€‚ƒ…††••–¦°ÀÔßéïðòòôóõö÷ùùùøùùùùùøøõòôòðéáÜäèéèééëëìëæãÜÚÝÙØÞÛÞÜÔÎËÄ¿¹½ÂÊÖßååßÑÄ·¯®¢“ ¡˜’”¨ÄÝðïãƤ‡‹Ÿ¿Í¹jWTX€®ÌØÒ¿¬¤¶ÅÊÐÜÝäðòîèÜ͹¶¬£¬ºÍÛÜÔÅ·´«­­­©¡££±ÃØãçèéâǸÌÜæëíëéÑ™Š°ÜéìëíæË”UJiˆwX>Jnx]6175??61% ),-4=;<<><32+/#! E¢ÀÁÂÂþ°g]Y]gjlt•ÁÖ}–¬¹°œˆ‚œÀÎ̾ÃÏÙÚÜÙØÛààãåçáÉ ~„Š’ ´¾ÉÙßæèéêéãÔ¯“Œ†ŒŸžŒŠ…“¦«¬±«ª££Ÿ¥¦¤Ÿ¤¢™‘‘žª¨£““›ž¢˜œ¡¦¡›‚lnlœ©¢Š€ŒŽt\NKalsx}v‚„…‹˜•—˜”›œ¡ ž˜——š¬ÀÈÀ»²¯¯³·¼ÂÍÖÔÑÑÎÍÐØÝâãââááãäÞØáìó÷ø÷ö÷øùúùùøø÷÷öõøøôõõôóïëãÔ𣕉„}yzyvyvuƒvjkttvmqmquwyzŸ°ÁÑáêïðòóôôùøúùùøùøøùø÷øööõòèááåçéèèéëëèèàÚØÜÙÜÞÝÞÛÎËÿº·»¾ÇÓÜãåÝϾµ­¡‘™¨Ÿ“Ž‡¥³Èáíâǧ†›±Éϵj\UY}¯ÉØÕ«¤²ÂÈÍØÚåïñèÜÑÈÁ¸°¦ª¸Ê×ÜÖÀ¹¶­§§¯ª¥ ¦°ÀØâèæåâÈ·ÄØãçëêèÐœ†®ÚèìëêæÊ–THh†wSAYns]<;r˜™m0 $ +4  2Zeehmjmtljkbdivy‚{€‰‹Š…~¢·¼º´²´´®œ‘Šˆwmrc< +  + ++HQ[Z{Ž†thnwy€~ojmrnwtpotrx}xz}{ukgiidcenlhrˆ~i]F=>?CShkmqxtv€yqonx‰™§¢¦²·­†P% + -  + 2d‹”‚e6  +  +  +   +  +  + +     + +  + + +  +   +        +   + +  +"(mifheY[E0 )% !%07??EViked^PJB?BIHPH?>92-&"#'+,$"#2NxŽ’~ZSX\ctŽš—sD/$!!*4290+0*"%%*>KDSL\ktrdXNJFIA75:;;72.%&+,1;QfmornwstgWSLIHNQU^^]^XNB?;<313;@=9,   +      + +     !7D<0#   " $!#+#&!&' */80&(1'!%!"10#%$&*+/483630082-+(045675AAE>=6:<>8=<7<33,/.#!! +  + +J£ÁÃÃÂļ±‘oYR[kodzªÎ·np—¬¹½¯˜†™½ÌüÊÔÜÞÝÛÚÜâåæèéáȦ‡„‰’ ´½ÈÛâæèëëêåÙ±’ŒŽŽœ‘Ž‘Œˆ©«ª¬«¦£Ÿ›šž—•›Ÿš—¡¨« –šžžžž¢¤¦¥„hkj|£›ƒ‡ŽŠ}aJG]hnr{u}‡…~Š’Ž’‘™—›ŸŸ¡§§§¢ŸªÁÎË¿»¹»¹º½ÆËÔÓÐÍÐÐÓÙßáâââãããàØÚèòöøø÷ùùøúøøøøööùøõõôòòóíäÚ̶ nqmtoimrkoqn|xlekqkhj`jjjoepszy‰”ªÂÖåîòòóõøøùùøù÷õ÷ùøøøø÷öñéâãæéêêééêêèâÝÝÚØÙÛÜÛØÐÈÂÂÿÂÄÒÛáååÜÒÀº®–•ž¥—ŠŠŠ›´ÂÌÞÜÈ¢}±ÑÚ׸Žb[\[sªÆ×ØÇ«¡­ºÃÊÖØâìæ×ËÍÈÀ¼¶«©µÆÓØÓÀ³««¦«­££¢Ÿ¬¿ØáççåàŲÃÖÞåèéçÒ›‚§ÔäéèèâÅ–YHf„zUAWwr[=8i™¡v4  + $!$0.!  +)Scjoqomrnkte]jroz{†€‚ŒŠˆ“”§ºÂº¹¶¶´¬Œ‰…uki? + +  &JMZivˆŠ…wen€‚‚{rpnprsvvlu}}ƒ„ƒ„‡ƒ‚yuofdckpsquŠ„u\IGE@EYks{|„Š|qmlmv…ž¤«¥š–”h7"  +  + + + !%&5g†mQ'      + +       +   + +   + +    +     +  kkjiheXD1$%'!&/67=E[jmhcYNG@=?GLRIC@93,' %)2.#$*/4Is”€bRPRay—•tH,' )&/74-)*$&' !-8FIFFRlxsj\PLGJE:657193/+-./.=SgsuppusobRKEHFHM\\_ZVVLB=96116ADA<2  +   +   +   +  +  + + 5?:0  +#$"** !!# (/80))"#+&%*10# (-'"-4840948<2'#*278877BBCCA99859:<>8.//*)#   S¢½ÁÄÄÇ¿°‘jWS[qihŠºÐ¨^j–¨¹·²¢Šœ»Ä¿¼ÊÖÚÛÛÜÚÛãçèéêâÇ¡†…Ž–¢´¼ÈÜäçéêéëé×°—Ž‘›š‘ŽŒ„Ž¨±±®¤©£“–˜•¢“”¡®®¢’’–˜›œ—œ£¨¦¤‰lmiz”¢ž‰€„‡wfRK]ikplv‚„‚…‡•šš›™ Ÿ ¨­·ÃÀ±£ªÄÌƾ¹»»¹ÁÆËÏÒÍËÍÓÚÝáááãáããßÜØäîöøøùùùùùùùùù÷ôööõ÷ôóòòíßǹ†€ymgmikyijhjop„‡†ujkdbkcilwpgijghnp{xƒ–­ÆÜìñòóöùùùù÷÷ôô÷øøøùøùöïçàäæèèéëéêéæãÞØÔÕÛÙÙ×ÑÌÌÈÆÈÌÏØÝåæåÞÒÁ·«•“˜–Š™­ÂËÎÔÇ©‰~„œÈáåÞ¿k`Ya~©ÆØØË®¡¦ºÄÇÓÝæâÙÌÈÍÈ¿¸´¨©µÂÏÜÒÁ´¬­¢¨®¨¤¤¥©¾Øáäåçáƶ¿ÔÝãææãÏšŒ¢ÐäèæèâÅ•XDe†sT?WqxU=:p¡¡= " 33  3[hm{jgmrqqqjahrxu|‡……†‰†„“¨¹¾½¸¶·ª‹‘~vrlC + + (DMV]s€„€qni†‰‚vqmjpqy}x|ƒ„ƒ‹…‰‰‰‚xqtkkjluumn„„qdTCIHJdz‚…”—‘€mi`sˆ—“Œ†smynV:# +  + +)15n†‡r\:  + '%  +  +  +  + + +    + +       +         ikjeecUH0$",&$/68=D]jmof\RJD@FGJNGA=77,(! ),5+$#'*5Ef†}`NNQ`wŒ’vR-$!(0658*(*"*"$$4>GIHVeqqi^UNGJG@9533650)/302=SdqrpomsncPJD@CFU`baZTPKC960358ELME3       + +  + + +   + + # 6=;1  +'!!!!%%'$$$%   *-3*&($((%#+.) -% #,6:8274204&)8:9>=9>?@E;?;<:6?HHD/  (9AHA7'  + +  + + + +   +  +   +  +  +  +  +    +     +  +    +   b``\]_SC-  +*& &,1<;6/,% ""#+*#"&'1B_xŠy_TPVaqƒ‰‰qN. ,2154.)-$" ".=DEFRhnutaRRML@>;82:=:/00238@PhmtrmutldQHKDAGKU[`[TOHA:7765A=5 +""! !%#$#$''&&0+'/*%&'#"!")""$))455055114#(2779=<<9?HB;8X³¾¿ÈÞ›±½¼ÅÑÕÕØÚÙÛÜßåèêéáÇ ‹y†“¤·ºÈÛæêìêëêæس”Š‹‘¥—‰‘ŠŽˆ©¯¬¨ª¢›œ ›—™˜—‘˜¨­±¤˜š ­§’‰Œ›©§¥Œxupx”¤™ƒ~Š’ƒjWLbipstyt…†…‘•—Ÿ£¥§±¸ÅÑÑÍÎÊ»®ÀÈĽ¼½ºÂǽÅÆÊÊËÓÝââãäââââÛ×åíòöùùùùøù÷ùöõõ÷÷õôóñðíãη—ˆomnlrlllnnlknp}§ÚàÄ›npuvvoqknmifpwsuokoopz‘±ÏàëðñòöõöôòñóõõøøùøøõðçâäèéèèéééæçÞ×ÐÔÓÒÐÐÑÔÒÊËÍËÐÙßåääÞÐÀ­˜œ«¢’£¸ÊÓÕ͹„›®·Óæëéâ”i_XUw¦ÃÙÝͲ¢¥²¾ËÞÝÒÉÌÑÕÖͼ·®®¯·ÂÏ×ÏÀ³®¦¤¬µ´§œ›¬¼Ðßääåܽ®¿ÏØàäçäÍš…¡ÐãéêêäÌ”UJhˆxS7MozmEJ‚¢ ~7  + &"+/ + ",Akpdgqmktmnl]amptƒ}ƒ………ƒŠ ´¼¼¶³«™…‰Œƒ„}|tQ#  !FQWbt‰‹ƒpgsŠ†‹xrsntz||ˆˆƒ„Œ’‘†€‡†x‚{rw~rurxmi~{plrx€„€vxyn—š•kMRQG8B@2GlqQ3   + +   +!#)1XŠ‚j_[Y\b]^X: 6KX]\L@*  +  +      + + + +  + + +     +   + +       c]VXY\R=.!(,$*$*5;?AXnsnccTJFHCIQQLM:4.)(!$%$"-(!%*2E`w…}bWX\`m|ŒvO7# ,/483+(%)&!&9FKBJdn~}iSLFGD=78:8=6:82.04C^hs{rswskcRFPD=AHJ\_VLJD>5144/4ALI>* +     +   +    #@L?3  +  !  &"!"$(###--/-+)$!'% ! #%,.61.01/0/#)256:48<=>>:;56;9::46762.%$"   +#Z£¶»¿ÁÆÀ´šj`\]jju«ÍÆo7X²ÁÃÈÆ¡Ÿ²¿ÂËÙÚ×ØÜÛÚÚÞäèéêâÆ ƒu‚Ž” ±½ÌÞåèêêëêæÕ°—’“ŠŠŒ‹‘«®¬¬©¡›™œ¡˜šžš•”–¨®¬¤™”ž¦ “Œ™¦«¨}€|…™¥†‘’ƒjYQ`fsrww~†Œ‡…Œš¨·»µ½ÑÜÞÝÜÍÇ»¯¶ÂÁÀÁ½¹½ÃÁÁ¿ÀÄËËÌÔÜãàäãããäâÚÜëòöúøøùùùø÷öõôõõôóòòñéÚÇ­“unbglgpmmkmljjms‚¬áèÕ§‹zyuqnqidltohmghmhmimjksŒ§ÃÝëîðóö÷ôòóññóõöùùøöôëæâæèçéæèêéæÞØÑÒÐÔÍÎÒÒÎÍÊËÊÏÖØßâãÝÔÆ°š”¡¬œ±ÃÐÖ×̶–…»ÍáêìëäÁ”_^SY|§ÅÛßÓ²£¥±ÉÛãÒÀÏÜÝÛÙÓ¿¶µ®¬´ÀÏÖÐö±¦¨²©¤ž¯¹ÅÔÝÝÚɱ¦°¾ÌÝâçãÑ…šÐäêêèäËš_Aa…zU8Iwg=?j‘’q; +##"$* +$+1fhfggigrong]_ctuw‚‚„€~‡ˆ€†›®³µ«£œŽ†‹ˆ†…nC# + ALRak„Š†ojyˆˆ’‘€smkwz‰Š…ŽŠ–…z}v|„‚|ytuf}ŠŒ~zvrtldUO`a`[l¡|R?D9:>:9Ojrg:' + +     %'7V…˜‹wmhiiinld_J'  +%9Lc`_^S6        + + + +  + + +  + +    + + +        ]]SMSUK:*%"*)#$+*7==AUlwsg[RGFCKKOWMD??.%!# "#*+-&#-5Gc~‹€fZ\Zbl‹~Y5*".13841)%%#"$1ELFDbvzoUEDFE:7;=569854-7;Gfou~ysqrlaTPOO?>GLX\SMIC7-,$(//4;2/!   +   + +  + + + + +  +    + AKB) $%  & "("! !'&  %)X3#2"#&#  ,442410,&)&#163778;:8=;4368:?;7436,.)2' + !\¦¸¿¾Àþ°”oX\gkh‰¾Ò¼f7d‘²¿ÄËÆ™–°½ÀÑÛÜÙØÜÛÚÜâæèèéâÈŸ‰€†Š’¡´¾ÎáæéêêëéåÒ³•ˆ‹•¢—Š‹‘‘¥¬ª­¢ ™““ŸŸ›šžš•”¬«©œ’–œŸ•ˆž¡¨¡“†”‘Š“¢ž†ƒ“’…lXTfsznov~€„ˆ‡Š µÑÚÜÙÞèêëèßÖÆ·¬£¯½Á¾¹½¼ÀÄÁÀ¿ÀÂÉËÍÔàäáâãããåáÜåîô÷ùøùùøøø÷õöóöôõôñîè×»ž{lgbcjpgafjkfjeglr}¢ßìÚ®„upkledkihkgkdhihcafklijk~š¼Õåíñóôóòóññóòô÷ùø÷óîæääæçæççéêäÞ×ÐÑÔÒÌÉÍËÊËÍÉËÎÓÕÜâãÝØÑ·¤«¦˜‘¦»ÌÓØ×Ĭ}¤ÂÒåìíëäÛvdZY| ¿Úâ×»§¥¯ÇÙØÉÂÚæãßÛÑÀº³­©¶ÀÆÑÏÀ·­¦£¥°«  ¦¯°¶ÂÐÐ˽®¤ªµÉØâçäÒ €žÑäêèéæÌ›XC\{Š}S4As}kA>oŒ‰l8  # &0 ,3\hjgnmbklnh[_cuzv‚‚‚‚‡Œƒ~…™©¬©¢™‹‹“Š‡„g: +   HMNXk‚ƒ~|n{‰’‰†pfm€‰~…Š€Œ˜‹Š—˜†…wtxqxttqghqfnkdZQNMB?:LWN9Jz¢sVJC7A>;[q„h=& +  +  )14Tx“rfbjlmjikbN. +  &=KPV\dWF,*   +     +  + + + +   +          +  +   + XTTLKLI6& %$##%05:8?Rkupe[LKA@LOLPJF>>3)# $ .5++&--?f†’…h__]dlz”}T9 &36>71-%""$"'/AIHH`pvkZLC@?;97634<=/36:@K_qvv{rrg\UXSMF?IW`YNJD:/($,0<<8(   +     + +     !EM?&    !! + &% $"  %-*,.#)'%'! % "+*3810.-."#,33002879<@48545;375,0),#"    'Y¥»¾¿½Â¾²•nY\eqw˜ËÒ²cAc“°¿ÃÄÀœ•°½ÅÖÛÜØ×ÚØÚÝâæêéèâÈ ˆzŒ‘¢¶ÀÐßèêëëêèßа—Ž–£˜Š‰‡‚’©¬¥«§¢—‘””™’‘›’—¡¨±­œ”˜˜˜›’œžœ ŽŠ“…•¢Ÿ‰ƒ“xcSgvyvmq€€…›³Òáééëêïííìä×ɲ¥¡­¶½¼µ¹½¿Â¿½ÁÂÅÆÇÌ×ßáâãäãäåßÞçñøùùùùøùùøóöööôòòòïçÔ¸†}olihohjekaa`\V_ifoy™ÚéܱŠukhkemkkiaeibjeef`dchabfny¯Íåëðòòóóñññóôö÷øøõñëãâåèçäåééåÚÒÑÏÓÔÌÉÌÉÆÊÊÊÈËÏÔÙÛãÝÝÓ¸­±¬ •˜«ÀÏ×ØÏ·¢‘ªÇØçîîìãȘqb[^sŸ»ØâÖ¼§¢­¿Ã¹¾ÝèéâÜÕÁ¼³ª¯µ¿ÆÌÊÀ²­¤œ£«¤¢ž¡©¬®³»ÁÊȵ©±ÅÔÛáãàÑž ÍàéêéåÊ›S<\|{Y6Ij~oE@FD:=84;JfplbQKFE?ILHFDC82-)#&#(,-.,)30:]†”‡fYZ\_m•|U6 ! (4>?94''%#&&!,5@DHVluvndL>@=42434289430:;J_rvwuuwqf\QIKD?AJ[b[RGB72'$",=JH@0    + + + +   + + +   +  + +  +$BK>&  + !*&%#*!*.02/*$&!&!&#,/13-)(!-12-06=>@??7837>:6:/,1-,+&"    %V¤»½¾Àµœo]^er„¨ÐÏ«sZq–­½¾ÀÀ›š¯¼ÉÙÝÛÙ××ØÛÜâçêëéÞÂ…{’” ³ÀÒáåêêêêèáа˜Œ•¢šŠ†ˆˆ”§«ª®¥œ——•›—’š›š‘• ©±ª ™•š˜œ“‘šš ¢’†“ŽŽ—¡š†”Žr_Uezyvmn}vy{¢ÅÜçêëíìïíìëâÑ»¬ ž§¶¼¼´»¼ÀÀ¼½ÁÂÅÇÅÏÚßáâãääãâÝßìó÷ùø÷ùùøöóôôõóññòîåÓºœ€uopgedb_ccZYac\\addjt—ÖêÞ´ˆujckmmg`c`de`cfgcfgf`dbelfwŒ¤Ïäíññòôòóòòóõ÷ùõ÷ôíåáåçèçãçéçß×ÑÏÏÔÒÌÇÈÆÇÊÉÅÉÌÒÔØàßÝÍÀ¼¼­šŒœ²ÊÕØÒÀªž™›®ÄØæîñëäÅ–qcV`~Ÿ½ÖßÔ½¢œ¬´­®®»ÞéçâàÛ˾¶²²³¼¿ÊǼ°¯¢œ §¤Ÿœœ¤ª§¦©´Äɸª´ÉÖÜãâãÒž„¡ÍâèèèäËžXAXƒS:FlyeI9a‘š‘L +  + $#+4" +9[hqplokjkf`]ceo~€|‡†{~ŸŸ™“‹‰Š‹ŠŠ†ƒ|rnI   DLT\l‡Ž‰znoŒˆ‡oqi{†‚}yy††ŠŽˆ—ˆ~usrsqprmvnV;.'*5/696>;CCIKI9JxŸ¡aK@FDVx’‘vG'  +  &>A<\m‚Šƒhaipghfbc]QIGFD>:7><33BO]^YYYUIMa_M,0DNM<*$7K\P3.41.'#"!!"#&"$),)01WtƒoVHMKR]w‰ŒuJ5(!$)+672*%#*'" '.:AIObopaK9878-/03.43/-025=CG@>Z’©Ÿ{XNMM^wŠ~H%   &GWY\R@BNimi\V\h_aVVqŒŒR + +   +  +    + +   + +        PQKCA=4*"" $#(!,.4<91-*-+'+*+'*($"!$'#(6AE=83<<=ATYZK:8*!''(!&#'$'/' -942:>A;.&.!##%,1/6:6443+*% + +1_¦½¿¼¾À½´šp[\bv•ÃÔº”‹„ŠŸ²½¿À¹›™°ÃÎÚÜÛÚÛÛÛÜàåèééèàÄ}y…‹•¡³¿ÔâèêééèåÞÌ«’‰†“žšŠ‹ˆ¡©­®¥Ÿ–‘–—žš“šœ–˜–§¬¬«—‘™™›™¢ ¡¤•‡Ž„•«…‡Œ‡ueZl‚ƒplqs|Š ²ºÓèííîîíìèâÕÉ´¦™‘ ®¶³µ»¹¸¸¼½ÀÅÇÇÅÉÑÝâääãáäâÜÝëôõùøøøø÷öôóñòóññïâÄ¥‹tkclhg^dbba\_]b```ejcf[LxÐíæÆ—}rmgddbfc__`]_]acbedcccbiigjox—¾ßìïððñðóòñóõõøôóîèåçæèæææèãÝÐÍÌÎÌËÇÅÈÆÇÃÃÄÄÊËËÓ;ÄË»§ž’™´ÇÌÍ˸¦œŠ¯Ä×çíïëáß{`^ZpŸºÏßÜÇ«ª²³¦ž¤¸ÝêéææáÓû««°³ºÀ¼´®«¦ ¤ª¦¡›ž£§£žš•ž§£Ÿ«³¾ÍÙßß͆™ÉàçæçâÉ“[8Pwˆ}W6Cjye@:o—¡˜V ! "#0( &h‡Œ‚uqttpupd_hs|†‹ŽŽ••’‰€„‹‘Œ‘Œˆ„wv}…†rN$  CFG[h†“Šylmnv|Švibo‡Š‰’€Š‘Œ‹Œ‹†ˆ‹q`b[ZZ^d^U<#!)98339@A?:;@D=Brž§—uYLW_w“O) + +  %>IKOo‹ŽbZ`^\]_WWXM8;ENIOPOL=20=CKX[[]Z[agdUD>FIQJCE>G`trib`_de^P[††m:    +  + +  +     + + +    NKJGE=1*!%"!"!">$&,+&$#$!$# "$!$"! ""$"#%)-++,1,..21.+)"-'(,"%%#!$&.)"$."##!"( #""#))$"   +  +   + +  +  +  +  + !8?81 '*&!"&('&    *40,*')# &5,#')!*=!(#%2056=?:98;A645:;=57:3//.& +   + -]¤»½»»½º«fW]e|¨Íέ‰¥·ÁÂƾ•˜²ÆÔÜàÞÞÞßÜÞãäççèçßÁ˜‚{Šˆ“¢µÁÕåéêéëèåßΫˆ•š’Žƒ‡‡Ž¦«ª­ª œ”™œ—Ž˜¢›•¡­¯¬ž‘–•š›œ¥¢¡¤›‰‡„›®Ÿ…‡’—wkaw†wrtqrv±ÆË×åëîííëçÝÎÀ¶¦Ÿ‘œ¯¸±³·¸´µ¶¼ÁÃÅÆÅÌ×ÞààââáåßÚÝéôöôøø÷øôóñññðñðîçΣ†okj^cfaa``_`^^aa_a[ad^YWHeÈíêÍ™„snec^iffaddah^agcfec[`_igcdggu”ÅäîîïñññóñòõôõõõðèäåçèçäåææÞÑÍÏÌÎÍÈÆÃÁ¿ÂÁÀÄÉÊÊ̹¶Ä¼²ž™¢®ÁÌú¯¢–‰rz¤²ÃØèîìçáÇ¥}ff\p°ÇÜ×¾ª§¥ª¤ ¨·ÚêèáäãÔ嬬³¶·¶º®®­«¥§§¦Ÿ——¢¦¡šœ•–šžž£©®¿ÈÍÓØ€œÈÝãäàÙÁN:Qz…Q:;^|gN:f›¨œ\   #$"" %.%1h•’”Ž€‚‡‡}lfbbk|‹‘”—™¡•†z…‰‹’‰‡odn€ƒvnF !%@FLRf„”ƒnjnt‹š“€krqzƒŒ„ŠŠ‹‡x€s[Tbb]X]^YE+!)4::72?=?=58E>8>>35FNRlƒ—‡rlp‰¤¬¡ˆtxyƒ’Œ‰€‹Œ…wrshgde^^dbSLU<(08>899:=?;'-;>BZs™§¤ƒaW`z~X)"  +  + ":IJXjƒ‹Š{i`eed`^_^I5%.6=HRMQD:-5IUaaa`[ZaeXEB-+8HPMA?5?Uhjd\WTYWVL]t‡ˆn> + + +      $":;9<=:/$)## $!%!" !!"# ))'(('" # "%" %)!" """#    +      +   + +   +  +  +    6@3) "  ##%'# "* $!(0/2+"  )3,!%#!523& $*64:4744:=835994<:63,11%#  #)%   + &Zž·¹µ¯³·²šyikk‰·ÏÚ|„‰‘¦ºÇÃĹ’™¸ÉÖßãâãääãäçèéééæÞÀ¡}ŠŽ’Ÿ¶¸ÃÚæèççêåß˦‘‹–›•Ž‰ƒ…”«©ªª¦¥œœ› ”’™›“”¡§®«—‘”˜šž£¨¤¦«¦ŸžŽ…š¥œ€—‹ucTf~ƒqpprƒƒ™¸ÇÎÚßçççäØȼ¯¦ ”•™œ§«±´´³°®µ¹»¾ÂÆÇÎÛßâäãääâÝàâëñõ÷øøöôôññðïðíçÙ¼–lihbeg`_gb]cb^ad\YUZa_T[cQ?_¿ììÙ¶§£ŸŸ¡¢©¤« ”’‘Šwjlf\Y``\^_^]\cgfp¸×èíîïððòñññòõõñíææçääçãçèãÙÎÍÏÌÊÉÉľ¿ÅÆÆÅÆÇǼ¶£“—¶ÕØÓÍ¿¢Ž€pt‡£¸ÌÚæëìêãȃgdjx–­ÃÊ¿±•¥²¯££ªÔêéãáÚ̼«§´·°²·¸®­¯§«±ª žŸ«¥š•™›–›œ•–¢¦²¯Œp‘»ÒÔÍȺpE9\x„u^=>dymB9\£V     %#"'+" +m—–ˆšœŸtboigu{‚ˆ•—’ˆvnv‰…€{‚‚{srfs{}†wsO+  ?NLThƒ‘™Šrmžµ»¨Œucoyš“‹…ƒˆŠunorjg`gdhecbVQ@-'*;>99=@=?7)$4ADXdž¦–yecyŠŠxR*  + &-8 "@QFIe€ƒvb_bf_]^]aN/"'4;?OV[L>78=Re_\b_ZdeOH@4/9?NJA=6?cyiF-Z‹¢ŠS + + !$& !(+  (g‰‡ˆˆ¡Ÿ—‚kk_Yknw‚‹“›’‚{{v€x€‹xos{tklJ( >64CWCGC/"+CTadpŽ¡¦”qdtuS5 + +   %)9QQGh‡Ž…wbXemg^[cba6*9>?LUVPB?>ASXZXad\\laOF4",3LKM@59Eaoj]WRWVNESlwˆk]G' + + !$"#  %"!(%&!120230/#"!!( #!"$&     +   + +  +  + +    +  +      + + + +'"%#  + (),'# #! -)  %..-4.,** %%$2,"%'&''&(( +43566::89?71014@50:8/1)(%  **   +"M’¤±¬‹dPLL?72J–ËË©‰{ƒ€£¸ÇÂÁ´¼ÌØáãäããâääæéëééæݽ’…ˆ‹¡³ª²ÔäèèåæäÜÈ¥•‡Š’™‘‰‹Šƒ…£¬«¬¦ œ¡žŸ˜™œœ•—¦«¬¨œ–’’”š˜¦£§¡¢«©›™¦›€’Œ{aWuy~€|t‡“¦ÃÊÍËÊǺ²´´­­© —Ž ´Á¿¹¾ÃÀ¸¹¾ÀÁÇÇÊÖÚÞàããâããááåïóõ÷ö÷òòôñðîííäÉ¢gc]VSUa^T[bc^Wb^\[]]`^gqz€vYX¯ëíçÞÚÙÏÆÒÚÚÜØÔÌÉÒÐÊó¥‹yve`e]_daakfh£ÏâìîïððññïòõöôîêçããåäåäççÞÚÚÙØ×ÓÏÊÌÏÍÊÉÔÑÓØàÚʶžœÉêïìÞË»ŸŒ~ujo† ºÊÛçíííèΨ‚k_as’®ÀĽž ¼Ë¾¨£§ÏèéäÜÖÇÆÁ³¯µµ²³·³®¶© ª§¡Ÿ– ££™—’–›™—––•”’Ÿ¢|i€¢·¿¾¸¯–i@busO5]”¢Y#   + &%*0) %V~Žˆ‘ž‘zoik]W^oo|‹‰“”Šƒzrvpqx{~‡{u|…„€€sT&  + + AFJPe–›‘z{š¶ÅÅ­o^p‹”‘zywxrqrokkgfpx{zj_R6& ,4861=N@KI/":;@IKPP^\Y\`[HA-(/FNPI>43QkokXVYTQQOPo†ŠzfW/  #!"!#'%,&'"#-,$!"' %" (%" "    .%,)##4342331%" !  ""#!""  + + + + +   + + +  +   +      + + +   +  .  +   &  #&&"$!#$01% &'&'.1*%$&#" !+*$($!',,!  &.43649:89>90.0:81:9932/(#% + %( + + + !Jˆª©‡ZGD9,25Y­ÒÇ£…|‚‚”¡¹ÃÂÁµ‘¡ºËÚãâáàãââåçééééåغ˜~€†‹” ´°´ÓäééçåäÝÉ©”ŒŒ“›‘ŠŽŒ†‚’¦­ªª¦ž›–•  £œ“£¬®ª—•”’”—žŸ¡¨ª¥Ÿ›¦¥›¥¨š{„•‘t]Sn|„~z}Š¢¶¾ÆÍÌÅÀ®£¥«ª§© •‘£»ÄÆÀÀÇƽ¾ÆÌÏÓÓÑÙÝÝÞáãáäßßâéñõøøøöòòñðîîìéÕ¶…bbf^\`T\c]]ed]Y`^Qbedjp|”žª–c[«ìðêáÝÝÙÐÔÙÝÜÜÙÔÏØÞÚÖÒı –‹‚dnf_e___cao°×çìîðòññðñô÷öïééæãææäãååáÞÝÞàßÚÖÒÕÓÖÖÕÛÛØØßßÒ¸ ­ßóôïع¬˜„zggsˆ¤µÄØæîïîçʧ‰hZ]f‡¬½Ä²¢–©ÄÌ®¦«ÍéèáØÒÈÀºµ¯²³²±¸²©®¨¢¨®©¢Ÿ›ž¦¡˜˜”’™œ“œ›™”™œzcz¥²¹¼³ª˜oH6Jox^4@cyrO6]•¤\" + + + ! $(1,Kn‰“‘Žrrsm]VRhs‚€Œ‰||oovu~ˆˆ‹ˆŠˆŒ…‰•h<'  AJJWg—”}„¢ºÅÄ°”wf^ƒ‡€~uvzpqpklzrhq‚‡|dL@6&*;:66?FENH2 4Ykkgm‹¤¬¤‰m|‡}R5 +   ! =MKVl‡’Œtf_ekkgjijc?!$0>BBJXYTA47?LNTVbf`W]`ME8+*;MMK?64Eevrg_]^][LIk…Œ‚fUA   ()!!!'%'*1)(%*1/3,#$"$'!#*#""!&&!!! " !"#&"$'1-%4361461($"%!  #%" !!#"   +  + +  + + +    + +        +     +   +  + + #9$%1&"# $"  **'&.,!$#(+$!$&&!$,($0-(2597=>>93+/532?:511-)"" + &# +  "TŸ«¨…vXJEP{¼ÓĘ‚y‚£µÁÁ´Ÿ¿ÏÜâäááâáâáåêêëçåÓ·˜|{ˆ’˜ž®±¸ÓãçäççäÙŤŽŠ‹“›Žˆ‹„‚’¤¬ª¥¦žšš›¡§°¦œŸ˜”–¤²¯«˜Ž’–š¢žž¤¦ªŸ–š¢ª°ª•†ˆšž‘z[Qqˆ‰~}„‘§³­¶Éȼ°¡–š¤¦©¤ ’Œ”¢»ÈÎËÊÉËÈÉÐÓØÙØ×ÛÝÝáßàáßààäéôö÷ùöóòñðíîíêÞÄ™j_`a_[ZY^`\a__`R^]X`clƒ“§¸Ãȸ}]©éñìâÜÞÙÒÓÙÛÛÚÚÔÏ×ÜÞÛÛÓż¸²¤‡wihdc]`acjs—ÄÞëïïññòñðòôôðêççåäåâãäåãÞßáãäáßÛÝÝÝÞÛÜÛ×ÕÜÜ̯ÁéóöîÓ®’Œxd]fuˆ ·Ç×æíííäÌ¥ba][„£¼Ã·¥™¯ÈÐÌåéàØÎþ½µ®´¶°«±²­¬­¨¦­ª¤›¢ª¤š™’’•—™žš••””¢„_q£°·º³°™kL 8JCL[~—‘w|¤¹À¿°”rX_p€‘~zrpporuw}…ox†ƒwfQF3"%AC875=@AG'$+Cnphkv˜««™z†}W9  #2IUIh”“€fbfihhgfb\D&".@AFQ_\YG7.>PNYa[b]^^]ZJ=,,4?JNF=1;fyid]Zb[WPbr~‚{n`H& +  *$!'(*#'%+!)"(#%+**"!$"##)&#&)+("(**#"#!'!!(%!"!$  %$//*'#8626261*$ ! !!  +  + + +    + +  +   +       )  +  +   +( '"&! !&("# "  !)*--0( *, !*#,,+  !-@-3337=9;763.0428<6,0(#!  +  + .Z’¡¦¦¡«³w`[b’ÈѺ”yo…Œ³¿ÂòŠžÁÒÝããâßááäåèéêçääÖµ™‚~‡”˜³µ¹ÔäæäçäáϹ‰Šš‘†‹†ƒ¢§ª«¦ ™¢¨´»µ§¢œ˜œ¥«­§š‘’™•œ› ¡¢©ª¢˜•¥³µ›Š”¦¥•{]Tp—¥šŒŠ—¢¸»§¬ÁÁ±Ÿ“‹“ž£¤Ÿ™””ŒŸÀÊÔÓÖÔÕÐÒÖØÚØØ×ÚÝÝÞâãááâàåëòö÷õóòñññîîíèÓ¯|X]Z_]]a\]_T[[\bVX\\ap‡œ°ÃÌÐÒ¿ˆ^¤èòíâÝÛÙÐÎÕÚÛÚÙÖÏÓÚÜÚÙÓÈÇÇÄ¿¬”€vieadeghh‚¨ÕçíîïñòòððóõñìèåæãäâåäåáßáääæããàâãâáÛØÔÔÑÏͼ¦ªÐìóóðÖ¦Œ‚f^chxˆžµË×èíñìãΧ†ec^c‡£·Â¹§™©ÆÐÁ¬œ£Éåæà×Ê¿À½´«²·³®²±­§¦©£¬¬§ž›©£œ•‹’—–˜–™•Ÿ¢ˆku ¯·¹¶«˜iE8Howp]9H?KZp‰’yz›¸¿À»’ye{w€|wkinlrƒ…‰~n~‰‡Œ{maO3$-7<469>;=@3%?q{tsq}™©¥‡‡‹†]/ +   + !1IHNj„“~haehmh_a_\@+##>PI^^_ZF619FMW^_d_`^Y`YB2,.=FOK:35Uswqf]\bbb\\`ms}xlW;  $%$,&)*+/$&')$%$%',%'#! &") "(./-(+.+,,+)))'(),$!!$ !#%*30' ::5831*' !%!#"          +  +  +        +    +      + %3, "# #!%!#%" ".,$ !#'#   $+(/30'!(%$!"0)! $$0-+  +#,..163@=<940..:49515F)!"&#  + +    5`•¤ª¬¯¸»¹—m]n£Îͨƒwx‡‰ŠŸ¶ÀÀ½¬Š¡Ä×àäâßÞãâäæçèèççâÖ·™ƒ„ˆ‰– ²µÅÜåçäæåÛÅ­šŠŠ—œ‘‰‰‹‡†£­©¬©¢šž¨²ÀÇÀ­£œ–™£«¯§–”˜œš›Ÿ¢¥±º¸‚‘©³š„Žœ•}\Ws¨²­­¯³Âǽ¹¶­šŽ‰‰–›Ÿž“‘“’¡¼ÌÖÕØØÙ××ÙÙÛÛÙÛÞÝÚÜÝÞÛÜÝáçìóøôöóòòðñïíéÝ»‡]KLWZb\[^X]]_a_\[\jwˆž­´ÆÏÙÙÚÈ’b™àîìáÜÙÔËÊÐÖ××ÙÓÉÍÖÙ×ÕÐÅÃÇÌÏ̺­š‚pjgea^cm‹·ÛèíñðñòòñóõòïéåäãããââæääãããääåãäáàÜÒÌÎÒÎų¥šª×îõöðѬ›uffceuŠ ¶ÇØæíñîêײˆg\]d| ¶Ã½¨œ¨Áο«¢¤ÅâåâÑÇÁÀ¼²®³µ¯¯¸´­¯«¦¥ª¬¦Ÿš¡£¥—•™œšš™ž§­¬®«‚p€–¯··´¯›qI8Ip]46cypM:h‘£h#  #! (-  "S_hbjx‚{ppmg`^juvu‰…„qqfdƒ˜ŸœŸ¨µ»º­”‚Š˜¦±²—M $ +;EFCWl€‡„rw™³¿Â¹Ÿ|hgv‰ŠŽ‰~tspusrˆ‡}rvƒˆ‹m^P:,$.8770>;87=-(d…ztidy•¥‹T2   +  2LIL^~Ž‹|g]_dghgdh_C+%2N_[\_XLH7/3IRX`\df`^a_U<,7:AEL@63B]lmod_fdZXXQcx‚{qm]9 #.4.141/41-13.3302:41,!(&!$&5665?:533-01+*/---.*+&(&!&" #-,33(" <;>662$ "#" $        + +   +  +  + + +   +  + +   + + +  + *81"  #! $$(*"")+$"$ + %+&)/+%!%(##!,!%%%(,  !-*).,4:911/1+%/-8813<"$&'     4a §­°º¾¿¥vc~½ÓÁ”tzŠ‡¥ºÂ¿¼¬‹¥ÅÚãäãßÜßâáäçééçäâع”w‡‡”¡°¹Ïáæåâäâ×¹¦šŽŠŒ–œ‘‰†‰‰…”¦¯¬«§¢Ÿ¤´»¿ÈÁ«¥ —˜¤¬ª ™’”˜ž™›¨³»¹wz›ª™{~™›‘z][qŽ•§»½°©³½µ¬¤•‹‚ŠŽ–›˜ž•’””£¹ÇÏÓÒÒÒÔÖÕÖÔÖÔ×ÙÚÖÖÙØÕÙÛÞäëðôôòðððïðïìäÈ¡oFFHSZ\SVXc]^Zde`euˆ—µÂƽÉÓØÚØÈŠW‹ÖîìáØØÑÇÃÆÏÓÒÑÏÇÊÐÑÑÔκÀÉÐÐË¿°–‚rkgcX[aq›ËäëðñòòñððòñîèããááàÞÝàÞÞàáßßßãáßÞÝÚÓÍÑÍǼ¯Ÿ’¥Õïöõî˧–‡skum{“£¹ÇÕåìïîéËœud`^\}¤¼ËÇ°œ­½Ë¼¨¤£ÁÞçáÑÇ¿À½´¯¯°²³µ±¬¯¬¤¡«®¨™œ¢¦›˜–’œŸšŸ£¬¸¼¹¼±˜xŠœ²¹´±¯›mE4Cl€\:6_tnSB`‡šša" + (2  *Negdz}zvwtwmb_orz€‡{ynhij}™¢£§­³·¸®š‡Š”¥²°•Y' *;IJS_`oqplu‘°½¿¶“uRYu‚Œ†~qr€ttrw„‰}ru|‰ˆzme]@1#18=77BB6:% .Y…‡|ohi™©Ÿ—‡[2#     &6FJF\–‘Šl_\_alkjhgK2-ISYZZ[TK952?LUdf^fa_dbXD9139CHG;01F\inh]__Z[HK[o…€snV* !#,39542>;:623539667967;-) ."!-0:ACFCC98B:94,/+.6327&'0.*$#%-0., 6<:8485#!  ! $ $ #  +  + + + + +  + +  +  +  + +    +      +    + + .@3&$  "%#"&3!# &!#!!  %$$*(,..&#&#%%!! /(C  '.'(1323726/31&.5120.&'')%     + 1d‘Ÿ¥ª®º¼º¤wdÆг…`ax††Ž¢ºÅÀÀ¬‰¤ÉÛâããÞÝßáàãçèéèãß×¼”€‡‹– ²¼ÒàåæåâàÒ´£—‰Œ–”‰ˆ…‡“¥©¥©¤¢¡¯¹»½Ä¾®Ÿ›˜™¨¬­£”ŽŽ“™œœŸœ¦®´³£{r •……’‘za]r†Š“±À¶£¬´¦˜‰€„„‚Œ˜›—™’Ž• ´¿ÅÈÊÉÊÉÊËÉÌÈÄÉÍËÎÍÏÌÍÐÔØÞçñóòññðññðïêݶ‰_GAFUUWT`]^XVY\aeo„œ°ÃÊȼÁÐÓÖÒÉU„Òïìâ×ÑÌÁ¶»ÆÊËÊȺ¿ÉËÉÉÀ·±³¾ÅÇû¨¡š‰x`c``fn‹µÜëîñóôñïïíëéåÞÙÕØÕÔÕ×ÖÓÕÔÔÓÒÓÓÒÕ×ÕÎÐÏÆ¿·´«˜¨Óíòòæ蘋…zs~Ž µÅÖæìíêೋo^__j‹¨ÇÚÕ¾¤ª½Å·£šÃáæßÓýÀ½±­²´¯°´±®¬­¥¢¦«¡œœ™£¤œ•””žž—¡ª´½¾¿º“]qš²¸µ°©œmJ6Cge61[smL;T‚ž™c(   + "  /1 Jbjkltt{y~xt_ilp~|xsmrhfe‚ ¤¢¢­¯¶·©’‹‰–ž­®˜^#   2OJOY`_irlp«¾»±•o]\k‚ŽŒ‡‰{vwwqzz{€{us{‚‹~hh[I/$7<837=><:0!&(Op‹Œ~n`l§¬œ‹c;#    + +0LOC]€Ž†q]_flmkechW0&35<72+3# #$0;?BBF@===97<57822.,0&'')!%$%$+460*!$ 897763-&"" ! # "&%! !$# + +  +    +     +  +  +  + + + + + +  +   /?2" #!!!!($%('%""##(!% "! !$*,02*'&&$ %' -+& + +".--57291773+0..0210+,((.'"  +    6f“œ£­³¶¸²™sf¡ÈÌ©yULc‚‡¢»ÈÄ»§ƒ›ÈÜßäàÞßãâáãæééæâÝÙ¹•ˆŠ’¡´½ÒäççèäàÍ´¨–ˆ‹–•‹ˆ‡Š¡ª¦¦£¤ª¶µµ··¯ —–˜¡ª¬¢—”’‘“•œ¡œ¦¬«¯¤‚ƒ–œš”‘Ž‹zc^r‰‡ˆ—°¿·¹³š‡ƒz†‡Œ•™˜–‘“Œ‘˜š£°¹¼¸¹¼»º½ÀÀ½¿¼À¿ÁÀ¾ÃÃÃÆÉÑàíññïññòòððæЩuOB@HUPZ[dZ^Z\_Z`h€‹ž­¾¿º®°¸ÀĽ­|RÐìíß̽·®£¦²¶¹³«¬®²µ´­«˜¢¥­ª­ª™•ˆ€ojcckiv¥ÒçîðôôôñîæÝÖÊĽ·¸··¸¼µ³¶³²±²²°±±µ»ÃÊÈ··°¢“¦ÔìóëÙ¾¬ŸŠ†‡tw’²ÂÒãìëãÑ zf_WZl‡­ØäÝÆ«ª»½²˜™¾àæâÖù¿¿³®±²¯ª¶µ««ª¦¡§¢¤ž•˜¤©¡œ”—Ÿ¢›ž¡§ºÅżeq›®¸»¶¯™mG.=i|^75_rmH4Vˆœ’`0   +  #!&/- ,Qlkfgq|„„wnrnrvnoqrpmrjfƒ¦¤¥­²¶º±•…‚” «®žb* 0GLNX[[fkjq‡§½³§“p]fk}Š‰‡ƒ~vqr€~vnz~useZE&"6B58:E93 "$ #' "($ "$'#$,#$ %%)*+2.#&!#""#$)'$  "*1./4495846,.32.1330'-)!"  4e—ž¤®²³¬†i}±ËÞv`Wm„ƒŽ¦¹ÈŽ¦”ºÏÛââÜÜàáããèêêæââظ€‚‰•©µ¿ÔáæèçæàDZ¢Ž‰Œˆ˜Ž‹‰ˆ‚ƒ’¤«¦¡žž¤¥©¬­¨§¤™•— §ª¢”‘“—¡§¡¦«­­™€¬«š˜š”“ya]r‰ƒƒŠš¸Áº¢Žƒ‚ƒ…†’™—•Ž‘•˜œ¨«¤ª¬©«ª¬±­°®±°²°¯²³´´¶ºÉçðïñòñòòñîáÀ’cIACHQXP][XV\^\_n‰“š¥¢ š•œŸ‹cHyÌëíÞ¾«Ÿ–—ž™’˜–™¡–“Š““–“–Š†‡†ˆ…yqe\j]f’ÅãíðôóóñêÚĬŸ–•“’‹Œ‡‹Ž‡ˆ…‰€ƒŠ„„†Ÿ¯¹º¿½¸£—”¨Ñìïæ϶®¥“Š„{‘£µÂÔâêåÝÅ—qa^Z[f~²ßèäϲ¬¶¿³›œš¶ÚèáÖɼ¿¿±¬±°°³·³¦­«¦£ª©¤Ÿ—ž¥§¥Ÿ›Ÿ¥›™¢§¸ÃÁµvo–­º¹¹±˜rJ.Bhyx_<:`qjP5bœk/ +  + ! #(3-  Ljrnq}€ƒ€vxlommlomhopmjjj~œ£žœªµ´´¯˜ˆ„¦¯¯ `%  +2GHKRZ_^hjl…£¬¨ŸŒl^^i}‰‡ˆ‚€usplqx|}rtu~ttjO=+ !:>:5<>:;@6(!DkvŠ{jbf‹¢ª”l=%    ,FNT\}Š†hRYbcab`dfR7" 7LU_XVMC30/?J[[_bd]gVN>8/0/.>ID:55?ajqj^Y\\ULJKj‡Š}i\@# )3>BECE>=A>6:56/*$#4EKIJGCIIF:@A@83:9//(.'+)'$&#%+.-..," 7:;:>8-  ##'  $?$! (&   + + +    +  +  + (#   +           +  +   +   +,csmT:pŒœ–m+     !$+*7*  Ffvwtz‡zupibbabhmpjjnnfk„ž¥¢¢ª­¶¶°™‡‚¢¬¬Ÿa!   3GNETZ]gsgf~š§¨œiVYi€‰†~ƒvnvjitwtkw„„…wd_S;.#3?E:6?:??6%!MfmrŠŒrjg|›©¥~E/   %DKSUr„„‚w[akheb`bf]C&6MZ^ZZOE>57;IQVa_a^]WPI@4)$-EJAA@@HBCB>>;664/0&!%B]_YY[UOSPJHIG=A@3610..'/1''%$'084+ ?67:75,#!&"" !"&+'"!%  + + +   + +   + +   &%)(# '  +   +  + + +  +  + +    +      )6,## !  $&"$%"!"%,,$ +#" "+*'/2"'"+ $% #%$'  !*./&-786655*)422/,886)'(#   + :k–¢«¥«©¦ž‚z¢µ°’xaUi…Ž¢»ÇǼ¦Š¡¯»ÒÜÜÚßßâåçèçãàßÙ¼“‚Œ’—¤¶ºÊÜáäçâÛÀ¨Žˆ‡–š™Œ‰€‚¥¦¦§«­¬®«­«¤¢£›š’¤®°®žž¢Ÿ›¡šž¤¨¨¡•‰‹¤©sƒ•Œ|aYy‡ƒ‰ƒ—ŸœŒ‚~‹–™š—”™¢¢œ“Œ‰Ž–“”™—™šžž ™¡¢žŸ¥¢¥Ÿ¨©£¬¬¯·ÕêìðòòñòðëΟjRC>@LY[XQ^\Y[ai‡˜žš˜šž£¤¡ ¡ ¤žˆW@c¸èîáų®«¥¡§§«ª©¦©ª£§¨¦¥Ÿ¥¥ ¡¦¤¢ª§¤¤¤™‡zn`cošÍèñóóòðçÒ¯‘oeb]ddZ_XVZ^YXTYPXSZQ\w—©©§“‡ˆ¬ÓáßãÒ·®ž”Š„}qv¡¶ÈÚçéãÓ¶†kb_[\kŽ¿äïæα­ºº° —˜±ÙãÝÏÁ¹¼º­£«°­¯·²ª©¦©¥ª®¦Ÿžž¡¢¥¢¢Ÿ¨ªš—œœ¨¬«°­…el«¼¾À¼¨~G=Epz~d@8TsoP6Z”¤œi* #! #34"  Cgw}}~~z}pjff^Yabci}tjjdm†Ÿ®©¦«­¹¹®™„…¡®©¡l'  7GHFTbefnily“¡¤—‡sXU`u„‹„xzxq~rpu{„gwvuhcYG+/C?61G?:A, )Kgigz{omu¦«„G# +  +#@FKVf~„„{]Vccgjed``D+ '?NYZ\UI<;27@Q``ab[[Z\RC6.%*/DMJD>5:Up}se\a]]WOTqŒŒ†vm`:  "/CEGB@;34<>6016,+>\hekngc`fYVZIKDB;6>521.0;34&#!(7=1*$>88=44.% !"(  "#&% !' (-%$!# #'*(%% " !#"!     + + )( '0262& 7)'#  +  +  +   + + + + + +  + + +   /;3"" !#!'$"'&$# &"'$##&# "" &&$-/'%## !!$#$$ + %,-.167243/.*-/.,(24*,'   =m‘™¡©§¤©¯”¥ž‹ug]]`m‚ ºÈž¢ŠŸ¤­ÃÚÛÛßáßáæçâàáß׺“{‘¥¶·ÈØáçæâؾ¦Œ…‚› •Šˆˆ”§§¨¦®³±´²³±«¦ ›œ–‘¤¬±±«¬°¬¦Ÿžš§¬©¥–ƒŸ£ƒo{™—„hd‡—…z‚‡•«¨vw€™ª¯ª£¥­²­¢—„w{~……‰”‘•“•˜•–˜˜Ž“—˜££¦³ÖêíòóòññìåÀ’`J@c¤j) +  &71" @cy…€{suuqlfc`[elcgruwkphs†œ®±­¯±·º¯˜…ƒ ¬¬£j/*FIMQZdvummwŒœŽmVL]m†Š‚Šyyy{qlnxw~tqr|‚tojcgN+$8C?>@B97:;789*-0%,=Ukmolmgbjc]aWLIHA;>755427:4($" 18,*!$#<68420+! !.0!#! ()'A2    + +  +  +      7D2!( !, !+* (& #!!"##%"&'$'!!!&%$%20.('&   &#(' +#)62/533:8(,7)%+&$#"-**(" +   7g”š¤«œ†pipg[Y_fo‚ˆŒž¹Ä¹¤‚Œ›œ¨ÃØÛÝÝÞÝßåäãááá×·’zŠ™£°¸Ä×àåæãÖ»¦›‡ƒšœ‘‹‰‹‰•¦¥¤¥±¶·¶¹¸¸·¬¦Ÿ›–“¢­³·¶±±®©Ÿ—ž ¬¯®­˜Œ“£§yy™œvmŸ’|ƒ{Ž˜«¯–nr€ž´·³¯®³··§œ‰ur{„ˆ‰‰‘‹‘”•–’›™”—˜™–š–œž¡¬ºÙçíðñòñðïà®yVG><>KP[WWXX`^m‘¦³µº»½º·¸»¹¸¹¹½¼­rGb¬âíèÕÈÿ½½¼¾ÀÁÁý¼¶­©­´¸¾¼¼¼½½»¼º¹³¡‡nfl°ÞîòôóðìßÊ®ƒga_]OV[^]YWZLRWYNTIT[ZalŠ–™ ¹Ê×äàѸ­£“„„q‚¡µÊ×ãèáϳˆf_a_jŠµ×çàж› ·Ã¹£“¨ÏÞÜÔʺº½®§¦³¬¬²´©¬¯®¬²ª£ž‘–ž¨¯¨£¡¤Ÿš–žš™–¡¦…dlª¾Ä¿¼«ˆR2IjzwgA6`yrY?f §Ÿq0  #%,5&  =dwxqtvwddhiXZdkmtp|†yosr«­««®µµ­–‚”¦§°£l/ +  +)8CFK_hz‚vknˆ˜™‚mZTar‡‰„€{…~uwymnupkls}ywkdgJ-'86DS_df^dbTTMF:,.,9@OOIA4;Vhww_cle][W^t„to\8% '7N`bbUSNPNGIGIKHJDGMGB;:>881.(18Wjgqoirkfmfea[PSLJLD;:?4;72, '082&=<7:5.%"%)%'!  #!#!$( !/PdgX>0 #8O[WRD0%&#      !    =elfQ4$06:6. '>IE3 +  + +  +  + + +  +   + + + + + 8B3"#"! =#!$$ #%%!"$&$%' #!!! !!#!$)41''&  + %(-,&" ".534664:0-'.''+$!*23+#  +  +'GejoopkkhWG>Oc_XYghk€‚‡¶¿Á¿¬ƒž§¶È×ÜÜÜÜÛÝáãâââäÚº’}{‹•¤±¶ÅØàåæâÔ¹¥—Ž…ˆ–š’Œ‰…‚£©¡©±µº¼¼ºº¹±§ž™•–¡®³´´³®§¢¢››ŸŸ¬³³°š‹’«¯‚•œ—‰{—¤œˆ†’¯³—qw“¢¨§¨©°º»¯¤’…‰‘––—Ÿ££¦¦¨¬¥§«®ª¤©¬±®¬´´²¸ÊÖåéïðñòòðëÕœgNIA;;5%:]cgb^\`v…~ˆ~W2" + +  ! :RIJd„ŽŠ‚iXM[bemfgcQ0+;QU\^TXM<15HU[]a`b`WYRI;2'.6>HSPG<4E_uwb^bd^]WXf‚’{mfX7!"*6Ieklee`d`[^^TQRTUWPMJNICC>>3(*4Ohkwsuwppvmlmi\Y[QNL@=E=9:9+% ".2-*! 989520'"& &$"%$ "%+-&!" 7Ynj[F5"$$C]hfaNA<871*    #&%$&! + + +   +  +MjlgM30<<:1' + ,GF<.   + + +    +    + + +  +   +  6C9%!!'!'!$" #$ )(0&%! !%# " # $((&/1*&%(!#+0,%!  #-,*4+/52/--,,1*",,&(%!   $("**0;E?@?GX\TYbhlv}‹œ¬¹À½­‹“±ÃÊ×ÝÝÜÛÛÜßáßáááãÛ¸”‚Œ• ²³Ã×âèèáѵ¡™Š‹™¡’~~’¥®«¬®¬°·´¶·µ°§Ÿ™““¢ª®ª©ª¨¤¢ –œ¡ ¨µ²°‚¨°¢Š›š›‡™¥ Š‡”¦µ¹œqtˆ——ž¥´½³¨ž£¥¨¬¯¬´»¸º¼»»¾¼º¼¼ÂÃÃÄÄÅÃÅÐâêëëîðòòñïçÇ^NCD>>LML[_R]tˆ™«´³¶¹¸µµ»¹º²µ¸³°±£kCDÚíêÚƽº´­°­¯¯²«®³´¯¯ª¤£žª¯©«©§©¯¨¢©¥¥¤£’|pm‘ËîðôôóòíèàÉ£Š|‚Š‡Ž•¢Ÿ”Š–¡•ˆ‘˜—‹€€ƒƒ‚x€ƒªÇÐÈÀ¸´¥”‰‚}q{’±ÂÐÞåÚË´‡nd]apÂɹ´ ™§²¼±›““©ÇÒ×ÌȾ½»¯«®³ª­¼°¥«¯¸´¶³ª›š—›§§ ¨žœ¤ž™œ˜’ˆš„mk‹¨¶»¼·©Q>Jn‚‹o>-RssV7_ž­Ÿ|<    + #(#!//#1\sonorlk€thjedcfpurrrsvhcy”¦¨©ª¯³·­’‰…’œ¨®o1 +  +'BJKL`fxyyns†ž¡Y`jm{Š~x}|w€zurrwplnkoosljiY8%+::69@6;?=!;[^[dcVQ]v‡~kQ1!     ;UOKb|ŒƒˆoX`bgkjchcU4 .KWY[ZOJ?4,>IW_[`kge^PI@7+!./AMLHL;9Lozp_^ef]]TQrŠ‹wifK'"#)4Kdiuqikjjhlf`_a\[\]XUUYQPI;7-$4Dlssz|~{|tqqtoggX_VQKAFCE?;+,!01,*$?:8:56)""%*'$"%$(.'$)"$9Znj_F/$$@afge[X\^VD1,! +  +  #,.!$  + + + + -LmrnL8%.83! + +  7II6$      +    + +    +   +   + 8D3%"##$$"'%&# "!(&$"$ )""" $#" #&")71*% * '*,&%#  %+/94-752.*(.,'!"*'$&#   +/;?FRYt…oWIMLRUS_lpx~ˆ•£µ»¼­‰–µÈÓØÞßÜÙÛßâÞÞÞàãäÙ¸’†{„‘¡±´ÉÚäçãÞ͵£Ÿ•‹Š—šŽŽ~y¦¬¦¨¯¯´·¶¸··²¤ —“ ©®¯¨«°­¤ŸššŸ¢ª¯±¯ž„ŒŸ©˜„Œœ¤ž‘ƒ~ ¡™’‰–£·ºœvy‚Š”˜§§§¨±¼·­¥§ª®³³··¼ÃÁÅÆÇÇÄÃÅÈÇÌÌÌÎÌÌÌÌÙãçëìððóòðíäÂ}`YKKB>EOUYY\g‹–¢¨«««­¯®¯¯´²¤ŸŸšš™Š^<=ŠÔëìؼ¬¨¢¡™š˜–š–šš™žž••’™š™—“˜›”š••’•’’–‡~olŒÃëñõõôóïêåÌ«“Œ“ž£¨©¨ —Ÿ¬²³®¡˜™š‰–‘ŒrgtŽ¢³ÄĽ¸¯¢˜Š‡Šr{“­·ÊÜÝÖÆ´‡qb[cpž¯²©ª­¢˜ž³½³›–‘£¿ÒÕÎƾ½µ®¦«´²³»³¦§±´²µ­¦ž“– §§¦©ŸŸ¥ŸŸž’š‡lo¦²»¸´¡~R9Hn‡ŠrD:NrtQBUœ®›o3    ! !03%2Mfhchmspbgoj`bgkrssntqpkex“§§¥¦²´´§ŽŠ›¡¦—k2 +">OTL\izzumm†¥©£Š`\Yixˆ€„wvwwwux…‚|sutuwpij]7$)681.5>>D0!8QV^bbUFQ`qyƒyR/*  +    ,ITVI^€Ž€‡r[`\d^`fibRB)!/AUORWQYJ927BS`bedkf\JGA?2#!*:MTWJD<;Zvxn_bef[ZRb†•ƒsma=#%+0:Jbmsvvuxtqolqli^bhjg\]XSPH99-"/Fgyw}€‚ƒwsrsrkgc]\[UOHE@DC?:0(*/(($;==:87(!!!"#$! "$'! %*.%&))%#$!":^pqcC3$B^`fecjutiQ=4'!  $ ':6+ +  + +3YqsdH93;<OY``MA94@PZbgejf[W\YN=/$.9S_gaM;4Iitxg`da^dXZwŒŽ”{niT1#($0?Odqx{{}}xy|wrtrnllhgnfeaXIA<1%*=ey„‡„„}~vklifhc_UURGHLHFJCB4-%)3)&$#%"=>><70#!#!#!")101)*/,&&$?\pr_B1"#"A^a^fjrƒ~pU>2-!    !,?;1!   + +   + :dqm^I;3:AA?92)!4HPK=-    )( + + + + +  +    +  + + 8A1# !$#!!#!!#!+)$&("!" ""&&/0)#!&$""%#(**&!!%#  *1-/,060034-)0-!#)+#' +  +   -_‹””š•„‘‘tXKIUZIPcgkxƒ’¡¸ÉÌȵ’¡½Ð×ÙÜÞÞÝÛÜÝØ×Øßãåظ‘tt„”¤±ºÎßççåÚÇ°£—…‹›žˆˆ‡ƒ‡‘¢«¤¦±¹»½¾¿¿¼±¨¦˜–§­³¹ºµ¸´¦¡Ÿœ–¡®¶¼·¨›°¶¤”¨ÁÊŸsg‘¡¦¡‘–¢º¼zl³½¾¿¼µª®²´®­¯µ¸»ÀÑàçëêíìëêììíîëëëëëèçèçéèìïñóñðïêÚªeVSIHEABQKX]q¤³¸·¾ÁÀ½¾ÂÂÁ¹©¦¢£žœb=:qÌííßÁ°¨¦ ¢¡› ¢Ÿ¡œžš›™™¢ž™œ—š˜œ¡›™š›šš™–˜Ž~€²çïóõõõòíç×½ž–£²²³·²««§±·²¸µ¥œ™•šŸ¡¦¤ †zŽ¤¥¯ÀÁ·»¶©šŒ…z‰’£²ÀÒ×ÑĶm]YP`hm€‘¨µ§œ ·Ã¸œ‘Žž½ÎÒÐʽ¼¾µªª¸½¼¿¶¦¤­´¸»º°Ÿ™œ¢¬¯®­¦£¦›— ¡’‘’œmf‡¦¶¼½³©‹L;BoŒ†rK5Qvt[>W–ª¢{7 + +  "78  )TihhjqsilmhddZdqgiekf`eefv˜ž¡¦ª«¬¬š‰†“•‘•ƒT +  )HPBLclnuolxŽ™¦±©ŠZMadw‚‰‰vt{ww€y‚ˆ‡†ŠŠƒ‚xyusbC&(8:+)/67/0#3D_XdicUYQTdysM5# +    +YWVe„“ˆz_M^_cfb]]V=+ .AKJLQWZP942BGR\gjna_abT@51)*>YddeS?5Ntwlb_c\hcR_rŒ’ˆtlhP,%&)6B\oy~‚‚€ztzs|tuqwvrrmrjd^PG.)+3Nm€†‹Š‡ƒ€|tsomojb`XTRKIPG>B;.&%#&"" ?><4.)#%" "!$!#& !&%--(,.1=AF=:4(*(.(0Ghxm`P>0+"#%!*(0LchihrzuWC8/% " (?;6& +  +!$3ZpsbL=36,!"  !"!&$ % &%%,)%!"## %"(&$&*1/0-"!"%$ $-*'$"  (+,03344:?2/2'' !+/)( #"  1b“”œ–‘‹kSIR^^YXcgjx…Ž¤ÄÐÓϺ–¬ÆÖÛÞäåããââßÙÑÖßåäض~w|ƒŽž°¼ÑâççâÙƱ¢™ˆ‡›¢‘†‡Œƒ‡•¥ª¤¥¶½ÂÁÂÂÅÁ½­¤œ”“¤¬³¾¼¼¹·ªš™œŸ¢¶ÏÞß̲ÄÞãϽÒåëäÍn{”¡§¥˜¢«¼»žƒzˆžºÁÂÃÇÀ¶®¬­¯®­³µ°½Ùéðóõöõõôõ÷øùúúùúùùùúøùøôóôóóòñéÓ¥_PGA?8;>IY_z“§¸¿ÂÆÈÉÉÇÈËÎÊʸ°³²¯¬ s@:f¹èïåϺ´¬©¨°±¨«°¬®§¨«¦¬­¯°««®«ª­§¬§¦¥¤¨¨ª§¥™¨àîñõôòñíèÛ¼¡š £¢œ£¨¨¤¢¡¦ª®¤ž›ž Ž–±ÉÒÑÏÐÖÕÖÜÜÕØÖÓËÇļ¨Ÿ¡¸Ã¾ÁÍÚÚ̼‹j_\[VPf‡Ÿ«¸¨Ÿ´Á¸¤—ÀÒØÒȾº·««¶Á¾¾À³¤¥«±¹¸¸©ž›ž¤§ª¯¬¤ ¦™Ÿ¢œ”ˆ…•‰hh‹©¹»½º«ŽX:@k|‚uF5<7=:6&)FLMPf]]cmyq‚{Y1 +   +(?`XTj‚“ŽƒyeTWcbie[\YB( (BNNUUTYVI;8*!*@O]f`eJ;@esxk`d_d_WRe‚’Ž~ldY5#'0:?Tlyƒ„~utwx{xrwurmrytnhiZE9.)0Ok‚‡Š‡‚zƒwuwtpge[XQRRPIJD;/*'"$"%#! 55610(!"""#"( # '(.*)-28EUUPRLA==729LoxqbUIB<41/)*4;<9EKK`eknz}…yS4!   + ';Z]Nc~“†~lLV^^df]b[R7%5))"-%!! 45774,$#  &#$',/,,24>MYZ[YMG>=;=C^q{p``SKHAC@89=ELBDGYgihahsutiTB:+$#!!6ECC<6.+)&+(00'15@G:741+## + + :^momrvr^E=;;BBFFMXfjmnf^VQNU[VKRSYYQ8&"&     + +  +!   +  +    +$67%#"  $*%'!#$"&)'("(&!"!&&&0041."!" !$%$$!"!',(%##&3* %-,/1..699631,%(##--&#!  !8h””’ŒsXNGP]X]clmw}Œ¨ÆÍÓÔ¸˜ªÈØÜàâäæèäáÞÚÕ×Ýâãض{t{†’¡­»ÓããäáÖ¿¯¡œ€‡ž šŒŠ‰‚¡£¦¥¶ÀÀÃÆÇÇž³¦œ–™¢¦±¿À½¼¸¬¡ ››¥ºÕåáѹÃÞéÙÇÕéíëÔ§v\Xk‘«¬¦®Àº–{w‘¦·½¿ÈÌʸ««±µ¹¹½¿ÇÝìò÷ø÷ñéæìôúúûûûùùúøùùúù÷òñðññïæÍ£iSEA?;4FS`n’³ÂÅÊÍËËÐÏÏÓÒÑÕÑÊÁº¹¿¾¼²|G5V®åïë×ÈÀ¿½»º»»½¼½½¼¹¾½¾¹¸¸··µ´±·¸¶¼·¹¸·º¾·®¬¢°ßîñóôôòìéÙ掅}~x†’‘ˆƒy€ƒ{v‡ŠŒŒ‹—ÃÚåèééêêèèçéêåææãâà˶²¸´­¿ÔàßÑ¿‘ldRQNTm•š¨² ‘¶Ä¼¥– ½ÐÕÒÈ»´¸¬­»Ã¿¹¶±¤®¹À¼´­¡•”›¦®¯¨¡Ÿ™™ž£œ”Œ‰‘†deŒ¦·»»¸®ˆR==\€ŠvG9Wxt_;J‹§¦…J + '01#=`loca_\Waloh]bkcd_ahgfeYr‹‘™‹‹~rutwrstfN. + #KRXiopsvv€nO-  +  +  7IVQ_‚”‚‡hF[iiff]_cX2->GW]eXSG366@BP_bcdcZXTMO=,'-=DQZYUE5?csqc`Xaa]VXgŠfeO<42.>Lkz‰Šƒ}€z‚‰uttnqrmqoplm`SMD6(%AZt…†‹‡†„…„~mmrkhe]V[WPDAD<?53,-/101075AH:56432(" + $Mn}yuwslYA<47>>CETahmnmf^[VSRZWTMEIJA23>9'  + +  +X   + +  + + +  +   #62%!  !$#&$'"! !# $,.,E$%"!%,-!*2016-#& -.&%"#+-+&('%0-!',--21.343931,+'& %*+)%%   "9h••ŒˆnUOFT[U^_ant|Œ§ÂÑ×з™­ÅÒÚÜáãäääáßÜØÖßãäØ´zv‰Š®ºÔáçäÞÔ½¬Ÿ–‰†› —‹ˆ…‘ª¢Ÿ©¸ÃÂÄÆÆÂÁ¿±¢›“ž©³»Á¿Á»¬£šœ¥¹ÖåãÏ»ÎäêÝÇÑçìéج{bQX€ª¹¸²½»švnˆ¨»ÀÀÄËÍǽ±§¨³³½¿ÀÈßíóùø÷ðìéíöúüüüûúøøøùùùùøóïðñïíäˤmU<@>77BVf†¨¾ÇÌËÊÎÏÐÐÔÔÒÕÕÓʽ¾ÁÂÀ½²€K4T¦ßîëÜÌÄÃÂÀÀ½¿ÀÀÀÃÆÄÀÀÃÁ¿½¿»¾¿»¸º»»¼À¿½ÀÀº·´ª³ÝìòòññòíçÚ휕’‚‰Œˆ‡‹………‚Š‰†‡ ÇÛäèëëêêèçèçãáàßâäàϺ²¹¸²¿ÕâÞÎÀ“r^G‚‰Lj—¨°¢“›µÅ»£’ŸÀÒÖÒɽ¹·®¦²½¼´³°¥£­¶¿¿»­¢•“š¥ªª£šœ“–ž¢Ÿƒ†“Žnj‰¥·½º·°ŽZ71\wqJ6MpvcDE…ª¤ŽR   )33 +AUfd^`h__bmj_Wddae^Zih```jˆŒŒŽŒƒphmpyxsmW.  ?JM[Z^hhjli}›­¬ …dZZ^r…†‚x€xtsz{wr„‹~{rmnkeO2*299019974& #9BLNZ[_ikikoqM0       1&*4?ORWZN8<\pupa[[ceaUTv’Šug]L934MT]]ZJ>><@=F`ovrhWNMKNJJCB>FMHSLY`fdcagie_SB5+%.BFLJHF@9;??FB628?F>826512-'  ++Urxvttp_UD618;:=EPakjljfdbb\[\][][WN??EP>%    + +  +     + + + +   +   + +#89%% A ! $ !"#$%"""'..5'#%'($% !#+-+1.%$ '83-##$+1*( ",13+#*-0/().)-345/-0/""%&,)-*%   &>v•‘Ž‹ˆ“ŒjXKI_cQPZ_kx|¥½ÇÊDZ•­ÅÏÐ×ÝÞÝßßÞÝÜ×ÙÞààÖµ‹zy‡™ª·ÐÞââÜϸ£›’Š…œŸ’Š‹‰„‡–¨§£©»ÁÃÇÉÆÇÅÀ±¦ •“ ®´¿ÂÂý®£˜›¢¥ºÔææÔ¼ÕéëßÈÔçëê׫{eZVxž·ÀºÁº–ws~¶¾ÀÄÉÌɾ°¢˜¡§ª­ÁÜìôøøø÷ööøûüýüýûúûúøûúüúöîëççææßÇžlVGFC8=FVtš³ÂÊÊÍÎÎÏÔÔÔÐÓÒÒÑʽ¾ÀÄÅöŠN4D–ÚííßÎÊÇÅÆÈÄÂÄÂÄÅÃÃÂÂÃÁÂÃÃÂÄÂÀÃÂÁÀÀÄÂÁÂÃÀÀ½¼¾Üéìïîííéâ̬œ‚€{tvyyxuxwtrrxz{{„™ÁÙáææææäàÚØÖÓÑÓØÞãÞÑÀ¼¼µ®ÀØßÚÍ·i^ZV]Og‹™¦®¢‘—±¾¶ŸŽ‡›¼Î×ÔÌ¿¹µ­¦ªµ´®°¯ŸŸª³½Á¼¬š“™œ¡ œ™˜•’›¡”‡ƒ…hi‰£µ»¸µ§‹]<>Vx‚lC6Upi>E‰¤¦†Q  +%52"  '602?LOZ_gecW^ZVF6)(&0DOTVSA1Cgtvm[[`e^UUb„‘’…nd^J<;:2/+"" ! )E$$( #-.04>Mftvp_WOOPNKIFDBFKNWUW^dd^cdedaSD:,)$9FJMHFG>BAJKLD6;=DK@;55.0,-%  .KeknorlaL@7/8=<@DFPSZ[\dcH4 +  +  5JMB>Z}idMEV`\]d]bQ9#9NYRX_SC<26=@IO_hih^[VOL@)'-+AMSTWM7:Tmvsa^`ac[TYtˆ‘{ekXE?FQi“‘’ŠŠ‚Œˆ‹Š‹‹ˆ„Š‡y€xqgVB-2Dav‘“ŽŒŽ‘ŒŽ‡€‰xnjhc\^SVYOUA:7'-,%" ?@=3/*! %/"& $%"!#)'*.*/68:DTX^QJGGKCBPftuodXRNMMIKEB@ELRUX`_\W_cgbecRF<2#&,@FGMKFDEGIIKIA69>EH?@3.0/((!  +?LVeuxq_I9837>?CMampvslllhb]WX[`cjeUMDKO;(  +  + +   + +   + + +    &=?%# %'!(# %)'$'&&%&"!" %+(42,)&!$(6:/$ ),/'+--/2-*##/63/)+..00/531--030/-/'(& +  )Gt–ƒ€Š‰hXNHNbZV^_]v~‰¨±¶°‰”§»ÀÇÇÇÉÍËËÊÌÉÊÒÔÑɬŒto~‡ž¨­¼ÆÌÑÏÄ·¨ž’‘‹ˆŸ£•Œ‘‹‰‚Ž©¨Ÿ¢µ¿ÀÅÆÄÆÆÀ´¢–”¢©¯µ´µ¯«§™Ÿ¡¹ÚêìÝÇÙìïåÐÖéëëÙ«„od[Œ¢Ÿ®»¾¶rw„–®¼ÂÅÇÍÈ¿¶°°¦¨¬±·ÉßîöùùùüüüûüýüüüüüûúüüûüúõäÖÉËÐÔÒͽ™va[MD=C]‘°¿ÈÇÍÎÍÑÏÏÑËÏÑÏÏÌÈÇÆÉËÉŽ‘P0A‚ÏîïãÖÍÅ¿»¾·¹º¸µººº¹¶º¾¼º¿ÂÅÅÈÇÊÌÉÆÈÅÇÇÇÈÎÒÒÔÜÜÜÙÚÚÚÛѹœxeunmrrotptoopsuyxw|~†™¨±µ²µ²±¥ žŸ¤ž¦«¯¯®«£œ¡©ÀÖÝÙκ‹eXTQY\m—ª —’§²­“††˜¸Ï×ÖË¿·¸°¡§µ²ªª­¡¨´´³¸­‘–¤¢Ÿ’”œŸ˜“œ—˜“Œ…Žxh‡£¹À½º«ŠS<=ZwƒwH2Lp{m=>wž„:  "$%/2"  ?\kebimkh[biecck_dccieidig}’’•”ž§¨š„x{‚“˜Šk8   +@UZQ]ccknljz˜¦žŒ~gYP_q~……ƒ|xqttwom{…†x{rvvjdK4% -A9//00/) ,>6@]pzlba^b\]Vc€”˜ƒhc^RJEP\”“’‘‘ŠŒŒŠ†‡‹ŒŠ„‰‡ƒ„€rk]F43=Ym‡’”•”•‰„‚ƒ‡qplfe[[]aZO?82-,%$#!! E=;56%" !*""!&#' !+)*,)0/5>FRWaXQGEC@EOdtvn`YSOKKOIFC>DIKQS^a[Z\aiid^QD?5*- 2CHLLNIFGJKKKE>:;?GH@;62..-*!*>RSWiv|p]M@>=;>>GYktxvwupne]ZZX^`ikeUHHPP:& +    +  +    + + + +    (?A,$!!%%!%-('"##"#  !$!!(/%-..#)"!-<8+&$#'//)(-1,42(#*0;81,1.020/54-*34344,&((#   *Hy“Ž‘Œ€ƒ‡„hYVLWaXWdggpy‹œ¯¸¹µ †”Ÿ¯ºÄËËËÊÅÁÃÃÅÅÅÅĺ¢†qq|Œ–¤­¾ÃÅËÊĹ¥—Œ‡†ŒœŸ”‹‘Ž…„’ªª£¤¯¬°´¹¼¿½¸® —”•£¤ª®©£ Ÿ —˜›¡¤½ÛëíàÎÜíðäÔßíðìÚ°„iai’¤¢©®¸´Žoq›µ¾ÃÆÆÍËĸ¶¹·µ¸½ÀÍâïõùùúûüüüüþüûüüüüûüüüûúôäÕÊËÐÓÖÖÉ­‰paFA9Jo–¯¶½À¾ÃÅÄÃÃÃÄÄÃÄÃÿ¿ÆÈÈÇÆ¿L5>zÈìïäÓʽ¶¸»½º»¸º¾¹º¸¹¹½»º¼»»ÀÄÇÈÉÈÉÉÅÆÈÇÈÏÐ×ÙÙÚÙÔÖÛÝÞÞÅ«‘xx‚}|uz}w€}vsuxz‚}~ŠˆŒ‘™™š–›˜˜“–’—™’’’••Ž“˜šž³ÏÚÙÏ·‘ncMKU_g†•šª¡–—§²©—‡ƒ–¹ÐÛÚÒƺµ¯¡¨³­ª¥©Ÿ£©°³´²§‘™¢Ÿ œ™–˜š‘•—ŽŒ’—ŒygŸ³¼»¸®“a@8Rs†sJ6Lmwg?9tšžƒB  #!"!4- +  +%>[skdjsqi`foeXaia`fffgrigm‚“žš—œ¤¬¡…z…ˆ–˜“q7  >OPUZ_cmvpiwž–ˆyhYU_ewƒƒuutwxq|uv‡‰}sry‡†}fL7%1;>2+*'-*(397?:4IZ^Y[baZE& -CJPMTUKE;54=BHYghif\_bVL9((,:MSVU@.3Jf{{fca]b]T\q‘œslh]SJKby—˜‘“—”’‘‘‰“ŽŽŽŠ€q^PA.:Sl‡‘˜›˜•Ž‹Œˆ…„‚{splgceaVTOI<73,+# #75332* %*!%!'$/.0148=:@IG:89325/)!!$!(4B[llkr€ykXG>>B=>CM\o|z}vrofYRSWX[fih`PGO[N7'    + + + +   + + + +  + !-B>4" #%"%!#'&$*(% ""*-,",-"#"'88++&$-/3%$")/+2+&(,7<=733F=721450-2.226'%((   0Qy”•ˆ‹Œ~aWQIZd]_megr}Œ ©­¨š‚˜£§¯·ÁÇÈÊÉÆÈÈÈÈÆÁ¼®˜mrx‚’˜ž¨½À¿ÆÆÁ·Ÿ–†ƒžœ•‹ˆ‹ƒ†”¦§Ÿ¢­¥¦®­®³´¬¦§š”¡ª¬¬Ÿ’™™š™˜šž¥¿ÝíïãÒßíðãÔáîîêÚ®|c^k‘¡  —¤©vr†¡·¿ÄÄÉÑÎÊÀ¿¾½»µ´ºÉãïöùøùûúùúûüûùúüûüûûûûüûôåÒÉÈÍÕÖÓ͵‘qbQH@Jqž¬ª¯³´³º´·ºº¶¹»º³¶¶»ÃÉËÆǽŒM7c•™}B !%$'20# #2Lgh`dmpi_ajeYdkdfieihqlciƒ”›—˜ §ªžˆƒˆŽ˜¤œ”t>  +  =QXV^glnujal†–’†veSS\`v€†€xurswwsv†‰…xu}……~k_?(1@D7,'%!&%+7<95555AFJQG<# +  + 2OWE8KhtprlT@MVb]b[^]I*  %5BORW\SI6/516BQdhilc_][[H3""&5FMURB/.9cxn\^X]eYXlŒ›™€nf]WSYix‰‘šš˜™œ™–”˜••“–’“™“‘’‘‹€xqdJ,7PiŠ““—œ™”‹†ƒ‡}rvohro_ZXKD@80.(%  24/14& !!!! )'*31/1B>BEVgospdZSKOPOJHBDFEILT]_Z[_eljdbKC830,:DMSQOOJLMMNHF::9BJH;=:4642&# "+5Jbqw~‚tgPF>?=;;@I]svuusplc\MMVY`ghf]KJY_R4! + +  + +  + +     ,>@3$ # "$$"$+ *+ & "!#' *71+-*#!%%#&//)-'$,,+,# #.+1+%!"*)>>A?B:9923440210-3--*-% + + "+T{‘–’ŒˆŒ~eOMGXcZWd`eqq€ŒŽ˜››„­®±µ¸¹¹»ÀÁÿ¿¾º²­šjqw‚•¥¯·µµ´´­¡Žˆ†“˜Šˆ…ƒŽ¦ª¤¡¨§¢©©ª¬«£¢Ÿ—˜¤«¬ªž›šžŸ—•Ÿ¥¿ÝìíáÒÞîïãÑÛèéäϧua^gŽŸš”“£š}tƒ¦¹¿ÁÄËÍÍÌÄÁÂÁ¾¯¨¬Ãàï÷ùøùøøùøøùøóóøúùúûûüýüõâȽ¼½Ã¿À»ªŽm]SFDIq«®®¬´·¶¸¹¸´¶»À»¼·¶ÀÃÊÈÇȾV2>h¸çîèÕȾ»¾¾½¼¿¼¼¾½»º¼º¾¾¾»º»¹¿»»ÀÆÂÄÌËÌËÍÊÍƾ¹¹´¸±¾½ÀÄ´š…†ƒwwxtqvyrr|r||ƒˆŒ–Ÿœœ¥©¤¤ ©£¦¥žœ ž›£“‘‘‹¨ËÛØʹŠfWOORUi…Ž™§‘˜£¯¨—ŒŠŸÌáæåÜÊ·ºª¢¦«§¡§«¥¡£ª°µ´­¤—“§¤Ÿ—’‘•”Ÿ™•–‘™Œvd€Ÿ°¹·¶©Ž^E7ToyO2@hzmC>f’•{D  !(.66)1NddegendXekcZ\caeaZdmolkk€šœ’˜¨¬¡‰‚—¥ –uE 8NTRZbjnrqjj‡“yshYUYcw|{€~ywrpqwtvˆŽ„€„ƒ†‡…yl`:+0:7:1+/,'% "&;8:@::>=FJPOA%  +      *9JU==Gl~qim\FM[\ba\ZRL1 /?O\UYUBC>43;>M^dhjdd\^`X9#'/9KUUD8./JitxdW]\\^Q[€•œ‹fgc_XR[q””˜›•™™™–™™—•—˜–“”••“‰ƒ}sV0/>]}‘–˜›œ™™—“‰ˆ„yoknlpcc]SFB:2,)& "  32240&!!  #*382/27?DS\_VL@PH@GUhtuof\QLMMSECDCFHMLS\__W\dlokdO>63+"!4CEJPKMLNUQLKHA8=@GJD>78822/&!"# !(7FZi{ƒ…{zvfQFA;>>>AM]lowxqpod\YYRT^jlh_NL]`Q0  + + + +  + + + +   +  +   /C@+$## '!!#$'%%(*"$#%&) +150/-"!')/6-'$(,++.0& %.12-$ %-ACLE;;4.741/226223,&% + + +!-*Nw‘•‘‰‰‹…eSPLabVXa]hoq„‹–›Ÿ¢†™±Áľ¾¹µ±ª®±­««¤Ÿ¡’ƒooxŠ‘–¢¦°®¨¦£¦¡˜‘‰ˆ‡‘›œ’ˆˆ‰ˆ‡¥©¦¢¦¨¤¦¦­ªª¥¥Ÿ‘œ¥©ª®¤š›Ÿ—™—žŸ¢»ßìëáÐÞíïâÓÙáäÛÁ•i`\o• ”‹‰—Ÿ›…ˆ¥º¿ÂÃÈËÍÊÈÃÆÿ¶±²Æåòøùùùøø÷ôö÷óïðö÷÷øúüûüûôäɺ·±µ³·©˜|doXF?I|¢¦ª©¯¯¶²µµ¹·º¼½¼¾¿ÀÄÅÉÇÇÉÀ“V47X®äïêØÆ¿¿Àº¼º¼¼º¼·¸º¸¼¿¾¼½¼ºº¹º·¼½²¼ÉÈÌÎÍËɾ¸³³¯­°ª¯±»Ä±Ÿ‹‹‡|ƒ€{‚ƒ~y|}„|ƒ’™¢¦¢¥§©©¦¥¥©¨§§Ÿž£  ££œ‘ŽŒ­ËÝÚɵ‰e]SQVYd‰—¥Ÿ•¡¬®”ˆ©ÓèëêßÊ·¹¬¡¨®©«ª«¡ ¤®¹µ·­¡˜”š¢¢Ÿ˜”–š—š–”“r_€Ÿ´¸·¸ª’`>;\y€tP3=f|vH:eŒ‘I  ! "#1:! 1Qfdab`phadiib]e`chedhpsnix˜ž˜— ¥¨¡Š‚› ¡¢…G  3HP^\]mrxukhxŽxof\QPbn{yzŒ{srnxrx“”ŽŠ‰„†viY5"!#*86>830&'#"#$.3/7:B[_dfjcagfZA' (7NN\QNA17cxyhW]ec\QKj‡–”wcd`[W[n“›˜˜—–˜™››™—–šœ”’–•“Œs\:3?Xv‹’›Ÿœ™œž™˜”ŒŒ‚uvsqjcb^[MD80/*"2521.& "#$ !)'383324EKRWVVHE=BKKH?=9341-(&'$%& &%/@Xdq‚…}}r]JD@=C?AFSbfgqpolkg^ZUVU_hki]KRaaM2!    +     + +   +  -=<+#!$&!!!&$"")+*%!$""'01-;, ""18+'"!),/20-&&.4.)&  $2?GEDA9;31623;754/!  +)(Kr‘’‘‰ƒ…dRIS_b[Xadipu…“ ®¯—‰¢¿ËÍÌÌɸª«©œ•“•“‹qov†Ž–ž¨©´·±¦Ÿ¡¡–‰‡Š˜Ÿ•ŠŒ‡€‚ §ŸŸ¨¥¨§¬­¬¬¦ Ÿ–“¢­¬­˜˜˜›œšŸŸ¦½ÝííãÑÝîðåÕÙâäÝÁ’iecdŒž•’’ž œ‚Ž¦´»ÂÁÄÊÊÊÈÈÇÆÂÀ¾Êåòøúùøù÷ööôøôôõø÷øøùûûüüôæÔÄÁ¿¼¸± „jdeYJHWƒ«²®¬°´¶¸¶´»¼¾¼¼¼ÀÁÄÅÄÊËÆǾŸU=1P¢âîìÛÅ»¸º¸¹»·¸½¹±¬···»ººº¼¿¾¿»º½¯¼ºÃÊÉÉËÊÉø¸½¾ÁÀ¹µ¾Îν¥•ŠŠŒ‡‰ƒ‚‚ƒ…„ˆ•Ÿ¡ª¨§¦¤¨¥¤¤¦£§¦Ÿš£¡£¤£¡”†Š©ÌÜÚλl\UO[Zf‚›¡•‘¤±«•€ƒ®×êìëßȳµ¯¢¢­ª¬¬©¡ ¢®µ¶»±¢”•Ÿ¥¢Ÿ”–‘’™—™˜œ¢tb}¡´»¹¸§“d95Yt‚N1Ag{pJ@_‰”ƒL + """26   !8G_ea`ckiimd`ehfc]fbcrntii¤ŸŸ¥¨£žŽƒŒ™Ÿ¢Ÿ—‚@   (KPRS`hnxskhtŒˆ{uk]UV]hv„ƒ€€‚zzstry…Š‘‘Š‰„{~qdR;,'4<13)&&&")=9>8;;;CJJILB)!   +  +IQ?1<\~okl\HM[cf_[YWT>  #,FUQMJHK<,(-2DEC65681252*$')&!&3M^n{†ˆƒ|€~mXC<=?>;>OZeglnolmidZWWZ_`jkfXNZc\I4"    + + + + +  +     + +  .=:+!!#%""#" !(*$# """  #" %"+.*#%"'35(&$$))+,+./+0/,' + $5AA=A?<=<11822/1( + $&1G{”’Š„‰ƒjLIWac]]adfn{‡}w‡™¨™ˆ¥ÅÓÖØÙØÏò¶º§˜Ž’—œ™†oq}‚Œ—¤«´»¿½¶¨¡£•ŽŒ†…ˆŸš‘ŠŠŠ‡ŒŸ£œ™ª¥¤§­¯®¨¤Ÿ¡–•¢©¬«¢šœ¢ž˜›Ÿ¦ºÛìíâÓÞîðåÕÞèéæÎœpdci¤›–Ÿ©¥˜–‹Œ¥³¿¾½ÀÈÌÊÇÌÉÇÅÅÇÈÕçóúûûúùøúúùøùùúûúùûûûüûùöëÛÓÐÓÍÁª–sc\]VOQg·ÆÀ¶µ¸¹Á¾½ÂÂÁÁÂÄÂÀÃÇÆËËËʾ™]54H•ÜíêÜɺ³³³´³¹ºµ¶±®µ¶·¹µ··¹º¼¾»·¶¦°²¼¶»¹¹ËËþÆÍÓÒÑÊÎÒÚ×Å°ž˜–•“’ŒŠ‹‘—™œ£ª¤ŸŸ  œ¢¡¥  Ÿ¡¥¢¡šŽ„ˆ‰ŸÇÚ×ͺg\SWVS`„— —Š”¥°¬“‹°Úéíëßȵ°¯¦¦®©ª­©¤Ÿ¨­²¹Áº¨˜š¥¥¤Ÿ‘’˜‘’”•›šš™›vezŸ´¶·³¦‘c:7Ss„wO2>fwj=?Y‚”{J  +" *69& ,Haib`ckjcmle``deegichnsjpƒ›¨¢›Ÿ ¥’‡› ¡•’t= + +)CNMYbkjwtdf~†ƒ„qXOO_qz~„€„|}uupsst‰Š„€~{xnnaM8$ 3;7)'$'&$" 2> ! -@NVPNJF;)''0DQZjlllid[KD6 ,=DZXI<;@^w|aTX\ZVNRd…•Ž~dkkhdpŽ››šž¦¤¡¡¢¡¡¤¦¥ž žœ˜™œ˜˜~V<7E`z˜››žžœž›‘••’‹ƒ}utkkcdTHLC::3& /240$"$ ! (!!!#$/65108CDKhzymbUSRHMKMPHDGMORX]c[]`kt~viN>:/&  />IINJKNMU[]UMDA>;AE@8::8423&!! #! )8Sbo}ƒ‚€‚ƒxiTD;<<9>CQemqutpmoi^ZZ\^dfildXS_cW?(     + +   +  +   .?;, (#""# !"%'#!"! $% *)+'%%#%$! +2,)&)($(2),(,,/1,$! + !*)53OmypM3<[tjD8\„’}S +  + $/-",Odjbfbnodgnq`^kfcgbejvpmj€š ¡”›œ£—††–—•‰vH +  + 3ELKSV_buyjgyˆŠ€€mYOZ^p…€‚|xysnjnon…ˆ}ynmikl\U6'!'5<=)'$*(% "!+47;15=FN]cXI:& +   + +*HXN6>[uqec]GCIcc_gf^YH  +'9KMN[J@=+$**3BQdfcgh`\UO@'(:LPROH?4LfwkTRZXWVMMo‹†majiio”šœŸŸ¡Ÿ¡Ÿž¡Ÿ™¤£ž  ¡Ÿ¡¡¡›—“ˆoV=@UqŒšš›š”˜—•“’Ž’Ž†„vonieaXRMD=;6+# "!" ! ;=;4/($ 3 ! (!'%,40.7=CEIZabRDBHC>>Lgwrj[PRLOMGJIB@IFHLN^b\_^iqtwkP<5*! *:GRRNONPX`b\M;9>:AB@795235,%!  !-CVdqxy|v~‚ucL<:37:AJTgklnlgomf\\[Y^gsqk_LOadM9#  +      + +  +    + + + +  + 2D<)! !"+& ','! $$   $)**$')#%#(3-,-,'&(+*##(,11("  +167869:97+)  !/Ii‰’’‘‹•ŽiPMJWb\aidils~wgWLUa„¯ÍØÝÝßßÙƹÈÓÍÁ¼·¶¼±•xmp€ŠŠ—¦«¾ÉÎËź¶«šˆ†€„ŠžŠŒ‡€ƒ’ž¡š¨¬¦¨®­°¯¬«¢™–¤«®¬£¡¢ŸŸ œ ¡¡»ÚëíçÖÞîïåØäïñíÞ´‹her›¯£ °§{‰Œ‹’£°³»ÅÊËÊËËÆÇÉÑÒÜìõøùøùûüüüûýüüüüüüüûûüûú÷íæââÞÛͲ•i[ZeXEEh¢ÇÒÎÅÀÂÀÂÂÂÂÂÅÆÆÃÆÁÃÈÎÏÎÐÌ–X0+>ƒÏêíÜÈ»µ´³·´·¸µ´°¯µµ³´¶¶µµ²±³ªµ¾À¿²»ÀÀÇÊɾÄÌÚßáãââàâéãк¤œ•š˜œž›œœ“•—–˜—–‹‹ˆƒ„ˆ‹…ˆ‹†‰‹‡‰ŒŒŒ‹‹‹†~~y”»ÐÓÊ»‘mTMTUSf~š¢Ž—£²«•ƒˆ¯Úéìêãα³²¦©¯®°®­ª¥§²¹Â÷¤œ”¢ ’‘™”™œšš–œ|eq—¨­­§¢‰`?5PqzkM:857$%-$$" "+.3942=LT\[OF=# +   +F^O>=`|uXKC<;Ndc_emiaN. + $4DOPLBA8'$*04CScflifd_]L5$"#1HUTRKA7:TgjTIUZTRJIW…Œ‹y_ekjqˆ—¡£¡ ¡¢§¤žž¢¡ž£ž£¡ž£§©¤ž™•“‚`@GMO^`VD@B@@=Phvtb\LRMPHCEBB?>BMNNZ\WYYiqsthOB;+#"!0?ILQUQHP\b\UK<>>GH=<835414*'%#$&" :I_fgjiotxymYF<9;@AEHWmnljkhjhc`_]Z]krrncISd`I8"    +  +  +  + +   + /B=-  "!'!#'%)*-' %"#  #"%)&$&1/&&! $.-((%%&*,.%//++)'#  + + $0678471.# + (1Chˆ“’‘‘š”pQJQ`^a`cefmx}tcNMN]ƒ²ËÓÙÚÛÛÒÁ½ËÚÕÉÄÁ¿Ã¸™ƒry‹ŠŠš©­¿ËÑÏÇ»·«˜Œ‰„‚‘žœ‘Š‡…|~Œ  ››¤©¤§­­²­¬¯ª—Ž–¦©ª¬¢¤¡ŸœžŸ¢¹ÖëíåÓÝîïäÕÜêíêײ„fci–©žšš«¤inx}|¯¸¾ÆÏÉÈÌÌËÇÊÓÔÞìóùø÷öøûüüûüüúøûüûúúúúûüöîéäãâÛϱ•xd_aTLQo¦ÉÒÏú½ÂÁÂÂÃÅÆÅÆÁÄÄÆËËÎÏÎƺ—Y.-C€Éêíà˺µ¯³¶°±²µ²­¯°²³´¯®±°°¬®¤°¸¼½Ã¿¼»ÁÇÌÐÄÁÛäãåæååãéåÕ¸žŽ‘’•’‘ŠŽ‰ˆƒ„‰€ˆƒ|€‚~‚€…‚ƒ„Š‡ˆ‰‹Š‹‰}|{“¶ÍÎÇ·‰m`SQOL^z“¡ž•¨´µ ˆŽ®Úëíêáθ¶°ª«°³­®® ž¤°¹Äƹ£š•¢¥ž™‰Œ–Ž‘‘˜š•‘{eo ©© ŸŽa@8Tu{N3<_sqR8W‚šŒd)  @4& 1@^c[^`k_XeejcYdjfoeenqxurx“˜™—žªªŸƒŒ“”–wJ  $EQML\ckzkdw‘‘€ufYPQYp„}zywu{qpsrqsx{rghkic_Q=&%9;46*$%-*#E (./15<;@IX`]QOA0  +  + + + .L]I5Ai€x\OLC0D`[_]je[I* +.@LNMN=:0%%,0?T`ehle_Y\K7%+=LLTOH31CafbNHRTRNGGnŒ“g`dir}– ¡¡¡££ ¥£¨¦¨¦¤¦©¥£¤§§¨¥ ¡›‹nN;777235+$$#""" &5Qa^bhknqushPD=6>@>GN_npqomqtqh[]^\bjrqm^NUdVC-      + +    +  +   4E;. )%%  -%''#!!!  ""##!#+,%-1#$$)"#*&)&%)*&($!(,)-+0#  +  $'466/'$     .Dl‡“Ž‘•ž˜x[NLY``]cfiovzxdJBKT‚´ÈÊÌÏÐÎɸ»ÐÛØÐÉÈÇʽ u†ƒ†’¤®ÁÌÐÑȽ·¨–Œ…„‡‘¡’‹Š†ƒ¡¡”œ£¥§ªª¬±«®«£™‘¤¬±«¥¥ —˜Ÿž¥µÔçêáÐÛëïäÐÔæëæÏ¥zbac£–—Žžž}d]it‚š±½ÃÈÊËÉÊËÉÈÇÊÓÚèôùøøö÷ùüûüùùùúúûøùøøùûùöîèçåáÝϵ’tf[bTNUq©Ê×ν¿½ÀÂÄÅÃÇÅÅÃÃÄÆÊÌÊÌÊ´Q/-:qÃéíã˶²²´®±°­µ¬¬±¯°°·°¬±­¬¬ª§©³¶»¿À¼¹½ÂËÌÐÓàäãæéæèèêæÒ²šŠƒ‹ˆ‰Œ‹…†„ƒ…„‚‚‰†ƒƒ„€„„‚ŒŠ†‹ŽŠ†‰Š„‘¸ÈËĵ†fRTPKL\x‹‘¤™‹–°Ãë‹Œ¬×éìëàι¸²§¨®µ¬°ªœª°¹Ã½©˜›¡¤¢ž’ŽŽ“ŽŠ‘™˜š–—ŒwhmŽ §£ ›dB4Xk|‚O.>_~Y-"6KSLMH;20MblVFIVRRLF\z…oebbn{‘›£ ¥¦¥¤§¨¥¨¦¨¤§¦¢¤¦¥¥©«§£Ÿ•‰gKRc|‹’˜˜˜™”˜˜™–•ŽŠ‰{sjid[[VFC8/(#! "QOJ?5( ! ,,/,2<<9AH`aZQFF@CCBZjqoj[^SLDBEGC=<@CJUJ[ZXX]gswwgQH8)%"!)=GNJMVOLLSWSKG::GYcqstqptvlc\]a]^kqqhXOTYQ;+     + +  +   +   + +   + ->2.$  !!$#$ ""$+$"! ! #$$)*%.+'""&.+'3 &)**&% +/0*)' "   *100&*&  +Ge„‰‹‘Œ Ÿ‘qXQYcX]fdkqo‚eK4*!! "$%!IOIA4'' #"((//599=AKXViVHA>?:??DJPQ[\\Y^htvsh[F9," +AHMJOPMGKMSIC>;9;><:53461,+(#%$## &D\ckmmmquxiZK?;<98=J^ov|zusf\X[^]^jooh[PZZQ<)   + +   +   + + +  + + +4=;." $!!#! # !$$" #"$ !!%**)'%  &0-*)%%-0.&$-0.(.*% *  + )01+  +  !2Ed„ŽŒ‹‹Œ’¡ž “pa`]Z^ggmpo~|dK?EU„´Ä¿¹½ÂÄÀµµÐÜÙÖÓÑÏ̺›}rv~‚‰™«³ÃÓÔÑËÁ·¨“‹‡~‚Ž¡ ”‰ƒ~~Ž¦¤œ™¤¡ž§¬­ª¨®ª ™•™¡ª¯¯¨¡¢¦¢ œ›Ÿ£±ÊãèÝÏÙêìÙÃÏåëäÓ§xc^aˆ›•”“vd` ±»¿ÅÎÎÏÍÌËÆÅ¿½ÊØèò÷ø÷÷÷úüüüüùøùúùùø÷õ÷øùóíéåãäàÒ³…]bnl^LQ}¸ÕÝÔÇÂÁÂÅÄÅÄÅÄÈÆÁÂÇÆÉÌÍÄ¿¾¸–V2'5b«áëãе°¬°¬¯°¯¬¯°­®­µµ³°¬²¬®¯®¬Ÿ¡¬¸ÂÁÁ¾½¿ÆÊÕáãæèççèêëç×»œ•š ª¯¯®°¬©¡¤¯²¨¡•‘š”Ž“™•˜“Ž’””‘‘’•›œ‘‡|xvŠ¨Äȼ­Œe[QRMQYp”™˜—”®ËÛÕ³‘‡§Òçêëãж²¯££«¬ªª©£¤£­ºÃÈÆ°˜–£¢““Ž“’”•—‘šˆufrŒŸŸ ›—‰d9.W‡˜X4=h„}[9Wˆ¢”_( + +  !"%17) )CU][Q^][\]dab_\ahjlifltjl|ˆ‰Œ˜Ÿ£ž‚”Ÿ©ž‹qH? !>PWa^cj€ˆmdy„oppc\J\istv}srwtsrhfrvrneeZ_b[O8$$=E231%*++&(&?4:ABS]^PPO7     + + +  +5GPTILbd_cgZV="%3HLJAFE?1##*5:JWahgbe[Z^I/!):@GTWM?-6PfjYARZ[ZTQYu„}k^^jzŠ•–ŸŸ¡ §¦¡ ¡žžž¢££œ›šœš••’–‹{g\bn{Š‹‘’ŒŽ‘‹Œˆ~vqkia\_SLC;30$  LOGA7. !"! #(+/2344:ER[XgSFF>>;G[ixne_YRQMJFC?8Qhx†‚…ˆ{qhYY_][`lqmbQQ^`Q;&  +      + +     + +    +  5B?2% !#"! 8- "%#$# "!&&**% !(.,,,!$*--#+-3+&,/% %"  $*&  %4XYRJe[a_fji^Yace`hhjmzqls‡„‡’šœ•vu†’žª£‘}R   + 9JQZ]_h‚†mXk„~rtua\MOdltw…}uzwrsmfkvtqidYQfdR@/"$67:3,'/3('*#5LW\+:ACS_VLRG:'     !0?ML:AXim^`f`OGUflejh_^I0! " .,-+BOMMIJF0(#+-8@Lfglmj_bcW:.*(?KNVWSB32JireQHP]_YUYjstsh_bp„““’šžŸ¡ œœ˜”’’˜”˜—•‡‡†ŠŠ‚{s]LZbbuz|†ƒ}~ƒ‰†ˆˆ€~uica][_XTOD@B/"OIF@:.+"!!$ &+307327FPX]aWEABD>HTishe_VNPDGH?>9@FGIOJXce^chrwqjZG9*%!4FJKEGCBCNOOFC?68@CE><59:30+%&(%""'1Hahpstrtzx_JA::9C?BUk{ƒ‡‡‹‚ve\X^^`frslZILYWG2&   $ +   (   + +!    + .A<3( !#$%'%""""&#&*' # ! &,+'#&" -',*'"#)../.('%*1-%$""&#  + + ! + &*8c‘“’˜¥¶±©¡›†n_`aadir„™¢‹pko¶ÇÍÅÄÌÕ×ÊÂÔÛØ×ÕÍËɼ›†x€……š¨¯½ÉÍÍÆÀµ¦”†‡Š‡’¢Ÿˆ‹‡~ƒ ¡—›¡¦§§§¬°¬¦¦Ÿ™’—¥ª¯¯¨¤Ÿ¤ŸŸ›œ¢ ¯ÇàéßÎ×éìÚÈÜëíêÛ´‡fai£ œ—’~snŠ­ÀÁÂÁÉÌÑËÈÈÇŽ¼ÃÔæðôùùùùúúüüüüüüüüúùúúùùùñæÛØ×ÕÒŵˆ^NW^VLVÆâæàÓÇÄÄÆÅÇÆÊÇÇÄÂÀ½»ÄÈÆÀÁÁº•`.%/PžÛêåÓ»´®±²¬¯¯¯¯­­¯­®±²´·±³³³­³®ªª¤±»ÁÂÁÁ»ÀËÖÛØÙÙÙÛÝççÕ¼œ—±¹ÀÅÃÃÆÇÈÅÀÂÁô¡ŽŽŠŠŠ‹Œ“’’ŽŒ€†ŠŠŒŽ‘†€z{{ˆ§»½º®‰g^VUNO`u‰———²ÒÜÕ¸‡¢ÏçìêâѼ´­¤£¯®¨«­¤Ÿ¨«¼ÑÝØ»™˜£¥¢˜Ž””’šœ“†qbnŸ¦£’‹\AI{«±ž_7DqŠZ7Qˆ£ši,    ##&<3 &6TbXSUde^gplcWdddiihki|wnwƒ†„‡š“‡vr‡’ ¨¡“X  8MYV^er~}lXdruowqeTYZfp‚„‡€€€wyqlnlmrqoridZ`i_A* ?L0<2+,$+&# %#+*1>FEM\SJCE>'  +  +  + .?MMIJV`j^^eg_T\bbfefh^T<./+02(*668/>[OHPJI:71+,8FQ]_bfbc`^YK8,-7;MS\^dXKBNekia[[[[^X\ft{sf`aktx€†“”‰ˆwy€|}…tlvpkuqomgca``fmwwx{zx|„‰‚|urtrolkihcba^VT>$ OJJ@5*#!"! #+/3./07GQVahWLCD>@IWgqncZUJED>FA:;;EAJON[ddachmroc\H:,&(:LIFFHDA?IMLK;536=E@<979830&$&$#"""4O^dkrsstyp_K<;75&% +  +   +   +  +  + + + + + />=1'$ !"# !!""%!'(#!"#! &'&&''')!!"(20&#$&-.4.'')(*./# &!#"#! + + &7^Š’‘‘Ž’œ®³®£™–…o_]febet‹¢µ¶¨žŽ—¾ÎÖÓÕ×ÚÞÙËÖÛ×ÏÌÇÃÀ²”€zƒ†‘¡«ª°ÄÈÄ¿½µ¥’Š…„Š“¤ŸŠ‰‰ŸŸ™˜¢¥¤£©«¯ª©©¤›’–©ª«ª¥¡¢¡žŸž œŸ«ÂÞéßÏÕçëÞÎÞìíëÛ°„f\i’¢ž™‘™•Žws…§»¿ÃÀÄÉËÇÄÅÂÄÀ»¿Ëàíñõôøùúúúúûûûûûûúúùúùø÷ðáÒÍÊÉƾ±’hPR[\_aŒÀØßÛÔÈÄÆÆÈÅÇÇÆÈÅúºÂÆÀÁùœb2#3O•ØëèÑ·´°°·µ´µ³³²±¸¶¹ÃÁ½»·³¶³²´­¬¥£«´ºÃÂÀ»¾ÆÒÖ××ÚÖÙÞèèظžž±¿ÈÊÍÍÌÎÎÌÇÇÆÇü¦‡‡~~~~…ƒ€‰…~ƒ‡„‚‡‰…z‚v‡Ÿ³¹²¥‡i_TXUQaq‘›””´ÐÛÒ¶”‡¡Ðçëêãк·²¨ªµ¯¨ª®¥ŸŸ«ÆÝåÝÁ›™¢¥ ˜Œ‘Œ‘•˜œ›“Ž|cmŒ™ ™}_@@c˜ˆW:A`~uY9I‚¦˜m,  + + "&//3 $9ZhgUXjfefnvbW[`lmfdfv|vryŠ‡ƒˆ•˜‡luŒ˜¤¦œyT   + 5LUWUeq„}f__gvstrk\V[ezŽ‹Ž‚€|ooinhkoppsedfko^B5&7B;-/+$Y0,)014A?FSRHBI<<*  + +   #5MQVSPR]gg^ckf`V^`alkife\RQC?C@LHPEHNab]hdbYQQ[SWbhglnpmgogffXURUU]cklinkbjtonwruoqussvuv‚vuqj{zu~‰…‚‚ƒ‚|{tsuzytvvnomrnqvqnlkhjjkrqupklqeckbbcab^c`[NJIJPI??/ ) !!#$!PQSD;("### !"*.1-./AGA59>DFPNPZb`_adksoeXJ<+ +ALNGJIFHKKOKF9709810%"'(&# ")7Saiu}xvx{qYG?:;;:AK]jx}€|{uk_]\[]bjrsiQIX\P<'%     +    +   +     2:63(!"!'""$"#!!""$!!##$'&&#$#"%!!(-'(,"%(+0)&'&()),""'$%""# + + + +  #4X‘ŽŽŠŽŸ§«¨›’†o__aafkx‘¡­·¾¼®¬ÁÎÒÖÙÝÝáßÕÙÞ×ÏËÄ¿¿¯•…wu‚‰“Ÿ¬­ºÆÉÅ¿»²¤‘‹ƒ‚‚–¦œŽ…ƒ‚}Œ¡˜—¢¥ £¬««ª¨¤£™“—£¨¬ª¤¢¨§§¢ ¢œž¦º×ãØÅÍàå×ÉÖçêçÑ¥x^\b~–Žš–‹‡zmŸ¸ÀÂÁÂÉËÈÉÊÆÄÁ¸ÀÇÕÞãçêìðïðóóôöö÷ööôõóôôòðìäÚ×ØÖÐƸ¢}]LYjfjŽÁÛáÛÏÈÅÆÅÉÊÆÇÇÅÈÈÅÁ¸¹¸½ÄÃÀ³”W2)3F‘Ôêè×¼µ·¹ÄÍÐÒÍÇ¿¿ÁÌÜããàÛÒž¶³³¯­¥ª«¬´¿¿ÁÁ¿ÌÛßáàãáâäèçÕº Ÿ±ÅÍÑÑÓÔÕÓÒÌÊËÍÈ¿®•‹ˆƒ}y}|~ƒ€ƒˆˆ‹ˆ‹‘”‘‹„‚~Œœ«¬¬£Œt_[U]SWw‘‘—–“´ÐÚÕ¶† ÍåìêãÒº´³¬¥®®«­¯¤¤¥´ÐçìåÆ¡˜›¤¦Ÿœ•Œ’‘‹Œ›™ž—ŒŽrbrŒšŸœ•‘†c?4MlZ57[mlQ6D¢’p4   +""%/4/ "9bngbZgcarsg`adhec`blzwltŒ‹’˜‘„os‡”¢¤ŸtM   + +=UZYVeq‚|i^Ygsosoe]NQfy”šŽ‚€ynrkmidr}sjkdsp`K2 )4>D46/162-#",6/%$5FOMKHCHDETXN?939A?>7145442,%#(&&! 0CYeq‚…€{{}sUC@>;>>@Gbr}ƒyyqg][[Z_forseVYabTF. +  +    + + + +  +   +  +  + + + 0=7,! # ! " $#!$$!"$"! #&('&*#""!&&!"$).(&%"$+'),*$-(&,&!&'%"$! +    !5S„‘‹Š‹†ˆ‘˜¢«­‹u^__eik~­«­·»¿ÁÇÌÅÆÌÒÕÖÖÖÚÝÛ×ÕÍÇǸ—~os|‡Œ›¬³ÄÍÕÒƽ°¢–„~‘¢œŒ‰‰€|€ˆž¥™—ŸŸ¥®­¬«¨ Ÿ™œ¦««©§¨§¤šŸŸŸ¥³ÈÒɳ¶ÇÑõ¿ÓÙÔ»’cW]`’ƒ…‰™•“€i}¢¸ÀÂÂÀÂÇÌËÉÇĽº¾ÃÅÂÆÉÐÎÓÙÛÝÜÝáàâåæåçæææäãææãâäàÞЭ‚dPMhgj–ÈßâÛÍÉÆÄÈÉÉÄÈÈÆÇÄÄÀ±¯µ½Æĺ¯”\1,0EƒÎêìܼÄÔåìïîæ×ÄÀËàòøûøøöîáÖʽ´°­¬¯®«´¾ÀÀÄÑßåèæçèçæäß̵Ÿ¤¶ÇÎÓÖÕÕØÛÚÔÒÒÓÏʾ´²±¦ ˜Ž…‚€‡–¡«ª©™’–¦µ¹ª}v{ƒ¡¦¨¥‰te`UYO\p¡£¡µÒÛÕº”…›Îäëêà趮¥¢®®«¬ª¥£¬ºÖíïêÌ£žž¤¢›’•‘–ŽŒ—–››‹‰’oWkŽ–š••›•k>0Ir–˜b85LhfR;M¡Ÿz5 +  + +080 +8[khbekcWizuebea^[[aen€|ouŠ‹Š›ž–…{rp•¤¦—ˆqV" +  + @A?=@?AJgwz„€{z{paVX^_`imsteW^ffPB+2      +  + +    +     +  +1>80+!"#"!#)" $" """$!&$&!"#%'(("#%("  *0,'$ '0($)'*&"&*& "+((##!! + + -TŽ‹‡‰ˆˆ“—š¡¦¥ˆh\_ahoƒ ¯¯«¯ª°ÀÈÉ¿º¾ÀÄÅÄÊÎ×Ø×ÔÔÌ̾žzmw€ˆŸ®¶ÊÓÖÑËñŸ’Œ…~‡˜¡›‹‚}z‡Ž£–’Ÿ£¤¥¨«¯±¬¥¡›“Žœ©¨«¥¥¡žŸœ™•œ£¦³Áù ž²¸¯Ÿ¦½ÃÀ«[YVb•­“‡§¤œŠŠ£»ÃÁ¾¾¾ÂÊÌÇÇÅþ¾¼¼´±¹¹¸¹ÂÇÅÅÃÃÆÍÏÑÖÙÙÛ×Ô×àäãäåãÝÕ¯‡bUJYff•ÇàæÜÏÈÇÅÉÊÊÈÉÅÇÆÄÁ¼¶±¹¿Ã嬑`3,2>sÇëíâÌÆÒàíóóïéÜƾÏæô÷úüüûúõðå×ƹ³­¬©¨²»ÁÆÅÓßçéèééêæáØį¢§·ÌÔ×ÚÙÚÜÝÛÙÔÓÖÕÔÎÑÍÄŬ£‡ƒ‘¡¸¶¹¶ ˜²ÂÁ¯Žojkk™¦«§Šl_[TVP_rœ¶¹¯ºÒÜØ»˜ŠœÌåëêáз³ª¢£ª¬§¥¨¥¦«½Úîðê˦ž¡£¥Ÿ—˜”–’—™–•ŒŒsYf•–™ž–sI4Dq“c97QnqU>K}§§7    '*6,  3OjophhgXjx{h[W`fc_ikrvzpqˆŽ’¢¤šŽ€kn™¢¡˜‡pK :V[X]hpmtsdV`hnekj`UR`†¢™{mspnqgajipqqr``mqkY9&#2?<8549EC9+"$.3>COROLFLMCB*  + +  + +   "$ "##!" " !(!!Z^XD1'"!! (''18641.8CNXdgTE?=?>D[ntmdYWKGE?A>;?=IWm|{}xxnWW[a^cjrwpcWbkjM5%    +   + + +  +   5A72$$# " " "#'""!$& #"!$$" "%,%##$ !+/)($$'-+''!%%$#)& & ")&#)& (    !,R|Š„ˆ‡ˆ‹“‘’ššœ{f`]jr‚›©®µ²©§·ÄÁ¼±µ¶¸¸¸¾ÂËÑÔÔÓÐÏ¿¢}rr‚Œ– ®¸ÌÕÖÒÎÅ´ •Œ…ˆ›¡›Œƒ„„}}Œ›œ”“Ÿ ¢¨©ª°°­¬¡œ™–¢¥¬¬¦¡Ÿ›ž¡˜š ž¨¯¼¿²™”¦¬Ÿ’œ´ÅÁ¨€n\Xk¡´£‹¥¨™›œ¬½Ã¿À»³¸ÀÅÅÅÊʾ·´®¨§¨¯­¯·»¾¾¾º¼ÃÈËÎÑÒ×ÐÏÓßãääåäÝÔÁ¬‹i_PV\]„ÁáèáÑÈÅÂÄÊÊÇÉÆÈÉÈÀº°¯¸Ã¿¸¬ŽU2*2=wÃéîèÖÔÛéðóöðëÜÌÅÔéõùùüüüûûùõîßË¿¶°­ª®ºÂÉËÕâçééêêêæåØÄ®œ¥½ÍÔÙÛÜÜáâàÛ×ÔÕ×ÙØ×ØÐÉ¿·ª•‰‚’˜©´·¼·§œ¢³ÄÄ´‘oddex’¤®§j\V[YX[rš±ÃÁ²¿ÓÜÙ¾—‡¡ÍãêêãÒºµ¯Ÿ¡¬­ ¥¦¤§­¿ÜìîéË£—œ£¦¢˜’”–”‘šœŸž‘‹v\f’— ¢¡›vL7Ak}€W05ZqpY@Cz©§‡C +   %6. + +.Ngqvupa`jrydVYcggfrw€vmn‚’›§§–‹~im…‘•ŒƒlJ + + 7TVYc`qzrqd]`rqmmk\ZTb…£ž–„vssqtkebagljkc^er_L;)#9>:><=8ES92'0A@RUKHFLFC?-% +     + +   +      + "*#$\YMA1''! # $*345434>AKQMHLZ```[]ksumQA3( '4=OPLLCEKKUPMC>68:A?=<5/04.'$(%#$ #(@EF[vzsz‚~sgYW[W`horun^WdnfO1# +   + + +   + +  *   +!9A=2%!  "# #!!"!"!"!#"&&#!!$### !%(!#"! )10($%",,,"$&()(-*(#""!%& !"%' + ## !+S{†‡ˆ€ƒŽ”Š‡‰ŽŽŽ’‹}fZgmu’¥²º¹±¬´¼º³««¨¬ªª°·ÀÌÓÑÑÏÌÁŸƒyt‚ˆ“¢®¹ÉÒÓÓËÀ´ ’‰ƒ„•§ŸŒ…‚}z™š““™¡¥¥­¬®­°­¢ ™• ¨¬¬¦žžšš¡žŸ¡¤¦¯¾Æ»œ“Ÿ¦œ—¹ÕØ¿ŒgY^j¡³¡Ž‰ž£™—ž«¶»À¾µ¶¯±µ¾ÅÅÇÊËÀ´³®©©¥¤§¯·¼¼ÃÀ»ºÁÊÇÊÍÑÖÑÌÕßããåääáÖ¨ƒoWWYXZs¬ÝéäÖÉÅÄÂÆÇÆÆÆÉÉÄÁ½¯®ºÂÁ¹°¥‡Y2'->h¹êïëäàæêðö÷ôïèÝÔÝî÷úûüüüýýûû÷óéÙ¿¶³«¯´ÀÇÊÓÞåêêëêéçæÜƯ¨¾Î×ÚÜßáâãâÚÙ×ÙÙØÛÜÜØÎƸª›‘‰Œš©°·¼»§£¶ÁÄ°‹nebas•«±¨q]RV[Wd‰«¾ÌÉ»¿ÔÜؽ–†ÊâééäѸ·°¡Ÿ«±«©ª¤¦¯¿ÝìëãàšŸ¡Ÿ˜Ž•Œ•¡¢•~_c‡˜¦§£švH3<[nvT;8cw{\;G|¬­†? + #1- +'Dckltpd`apxhU_mnju|€|}rpr‡—¥««—ˆwio}Š„qjkJ   @[TS`hv‚wfb[ftnnopj]XcŠ›¤ž‹smqwnf_]ekkZW[kg]R809:9267IR=*!$1<3543-+&$&%$ 1BVly††~{tn[C<<=9CFE\syz{‚{w`TSVR[fpptm^\kncH0      *'  + $_    + + +.>=1) !6!%% $ !"!  )''! $ #!%-'"$$+3-('$-((--$&(+2+$$!!!!!%&! +#!$"   +  !,U…‹†„†‰€…Š‰}{c_fnlzŽ¦¼Á¸²¹¿¹³®¡Ÿ¢šž¯¿ËÐÐÎÏÎÁ£‰yyˆ’ ¯ºÆÓÖÒǽ¯ ‘„ƒ…†“¢™‘‡†€€…šŸ‘ž¡ ¥­¬­¯¬ª¤ •”£§«¬¦ ¦©¡Ÿ¢œ› ¨µÈÔÊ° ¢¤”‰šÃâæÓ¤iYYe“¤™ŠŒŸ¡˜žœ¡±¸¾¼·µ³³ºÃÉÁÂÆÈƾ¹¿À¿¼¼ÆËÏÏÔÔËÌÏÍÌÊÌÓÕÑÐÖÞãäçåäà×Á tfXafe\q²ÝåàÖÌÆÇÆÆÆÇÇÈÉÆÇŽ²±¾Â½±ª£…S0,-8i¸åîïìêëîñøùøõðéÝäóùûüýþüýûüüüú÷íÖ¾´±¬¯»ÄÊÐÜäèêéééééà̲¤©¿Ð×ÛÝßââåâÝÜÚÙÚÚÙØÙ×ÏÅ»©–Œ‘š®¯¶¾½­¤¶ÆŲkc`dt˜³´­“qeYTTO_š¿ÆÑ̽¿ÑÝؾ”‚›Æáééäκµ²§ž¬®¬­¬¦ ±ÃÞìëá¿Ÿ˜›¥£Ÿ•‹’‘”’œ˜’“•zam£¦¨«¦˜sD2=WkwT9Bg„ƒZ9I¬¨‹C + + %6/ + ):5.67FG=&&6=FTSXLMMH88- +  +   +  +   +  + + + + +  + + +   +  +    "% !#$%UQJC2! "#!"! ""$")445/38AIP^caQ>99<>A?<6443,*((&*) '2EZhv††z€xmZ@<>7:=EM^s{~zyvsm_PSSU[fntqfWdmo^@+"    +  +  +-? +  %    + +4>C/& !!!#! "! %!$% +% "#%" "#"!&$# &-*%#%!#!/3*$$"#%#)+'&#'))3+!$ $%$#  +* ,Uwˆ†‡„‰‘––“‹tssmic[\judet–°¾À¼¼ÀÀÀ¸©œ›žœ”¡¾ÊÎÍËËÏéŽzv‚Š–Ÿ¬»ËÖ×Ñý®Ž†{‰”¢˜‡†}}„‰¡¡¢£ª®®±°®«¨ šš¢¨ª®¦©±¬¤ŸŸŸ¢¤«·ÎÞÖº¥§§–‰žÎéìݲwZWe¦™†Œ«ª¡¦ª¥¬·»¸¶¸»¸ºÂÆÁ¾ÃÌÏÏËÉÌÐÓÔÖØÚÛááßÜÛÚÖÐÐÓÑÓÓÑÙàãäääåàØÀ”g^dtzseºÝâØÐÃÄÅÅÆÈÊÉÈÇÆȹ²µ¿ÁÀ±© ŒX34.7i³åïëåãêíñøúù÷ðåÝçóøüýýýþýüþüýüüùîÚÀµ­¬·ÇËÒÜåéèéééêêá˱¨°ÅÔÛÞÝßâãæäßÛØÚ×ÙÚÛÙÔÏÈÀ¯œŒˆ’œ­±¶Àºªž£¶ÅÄ´kabi{›µ»±’gj_YZ]r«ÊÊÓ͹¼ÑÜÛ½“™ÄáèéãÔ¹¶³¨¦¬¬¬ª«¥¤ªÁßìêÞ»š––¤¦ž”’’•“šš–‘‹–”vaw“¦§¨£Ÿ˜oB32Wty[?An‹‡f:H{§¨ŠE  + + # .98 %6BVfo{wgcsxiYdr~…”•Ž‚|mfn†š¨Ÿ‹zjjjjmgmnghO"  +  + +5T^`_gurljg`danxrojbbjŒ¡§ •‰{volmjdSWagcRTS\jhQ75&/979769BP@-*3FKTXYMHNE@=+% +    +  + + + +  +   + + +   +   +   ! #"!SQKD6%" %- (+1222.47AMR^bZK?8>?>K\knj_[OFH@HB@?:<<>>CGYbd^ShjlmcKC.*$"*:FJILMNMMLOUKD>;:BB@=7333330+&*"!$#0G\k~ˆˆ||~ulVC@<=>=DRdwyzvushcZKN[XeptvrcVcqjY<'  +    +  + + + + +  +  +  + 5CB3%" !  #!!%#!$&%!$! &"!!! "!!#!#(&$%#"$%! +/&%!""'*)-+-&$(&'! %'%#!"! # !  -Kk~€‡…ˆ˜ ›¡˜wf^[YYX[jlhek‹ ¶¾Á¿¼¼À¾·²¬¤¤œ¢½ÈÏÎËÐÏÁ¥ˆqp–Ÿ¬ºÍÔÙÔż± „}…”™’…†€u’ Ÿ“Žž¥¥¬¸·³³°«¥Ÿ˜ž¨¯¬¨­°©£¢   ¥ªºÒáÛÁ¤¬°œ©Ùìíß·}]Ri™®ž‹•°­œ¥­®¬¹¸º±­±³»¿Â¿¾ÂÊÌÓÖÐÑÓÖÙØ×ÝÞááßßàÝØÖÒÒÕÕÎÓÚàããæååßؽ•k]h|Œ†{¾ÚÚÔÊÅÀÀÅÇÆÆÇÊÉËÅ»±´½Â½±ª¡‡X1-*5V§âîêØÎ×äñ÷úùôíáÛäñùüþýýýýýþýüûýü÷îÚ³®µÄÉÑÜãéêêëèêëã㦮ÅÔÛÛÝÞãääãßÞÚÙØÙÚÙÙÔÐʽ®›‰‰“ª±¸¿¼¬˜žµÂôŽkkkhy¡º¼´—qb^\_[|®ÌÊÔ˺¼ÏÜÙ¾y”ÅàéêàÕ½¶·¨¤¯®­¥¦©¦ª¼ÖââÓ¸›—–ž© “•’‹›˜”Ž‘™zgt¤¦¤›’…j=0:Yxƒc@Cm‰ˆ]8F}¤§E  +  ,42 $0BU]hlghctwj]bn~˜ž’Šsho‘œ££“…obhjnnnde_L  +  3OZR]gnxxtjjjjsvlstecp‚­£’Œ…€vsqh_US^blZWSYbdV5"-;=@;:+&3IR[YPJINJ?D3! +     + + + + +   +  + +   +  +   +  +    ! $ $!  ZULB6&"$"% $)'311.-24@KTZ_XK?9;864ETjz{vtqpjaTKR]`fqwtrdWfpeJ8,    + +  + + +     +  +  + 1DA8(  )! ! '! % $% ""!$"!# ''&#&(%! # #!)*$##%&&62/,,#$)(%# $$$  ###&    + 6`u€†ˆ—ž§zeWIRVUZhkolq‡š«µº¿¾½¼¾ÀÀ¾¶±¦©¾ËÑÐÑÒÏÁŸ„mpz†“®»ÊÕ×ÓÊÁ´ ’‡€†‘™Š„„}˜‘›¢£°¸»¹³­ª¡š˜ž«²µ­¥¦ŸŸ ž  ¡¨¹ÑãÚ¾§¯µ›‘´àíìá´y\[i›¬œ• ¹¸  ©¯­°´­ ˜¨¯»»¸¶ÀÊÍÍÖÕ××ÖÕÖÖÝßÜàâãäâÛÚÕÒÒÒÎÔÚáâæååãàÕ½™mUZ{•‘€“ÅÜÚÑÅÁ¿ÂÂÄÇÆÇÇÊÈÅÁº®´¾À»´©¢ŠX3.10KÝíéÍ¿ÆÖê÷úøñçÛØÜíøûüýýýþýýüýûüüüøíÙ½¯²ÁÉÎÚåéêêëêééáͶ ¬ÄÖÛÛÛÝâãäãÞÞÜØØÙÙØÖÕÏÆÀ®˜…‰–Ÿª¶¶½¿¬™œ³¿Ä´lgjk|£¿¿·–p]ZY[a„²ÍÊÒ͸½ÏÝÚ¼vŽÃàèéâÕ½¶¹¬¤¯²­®®¬¬«¹ÊÔÔdz¤“›¡¦ ”Ž‘˜““Š†‘|er”££¡“Š€e:)>\…‰^>8b…Z6O„©«H   +  +  ')8/  2CLNZ^djttudb_mž£˜~ndxv‰š¡£˜‹z`filhcefaL& +  2M_YQ\hw|qqihvƒvzzf`g{›®­™‹ƒzrqkh]\bgjeWWUbb\A*8=J?:<6BF;& %0;KTcXNPVTJNH7   +    +     + + +   +        !! !VSKD6-"%!%!-41/037>HKQ]^]OB;87=B\ptjcYQIFG@B?>;?>=9:523/-+#%##  (<>Jap„„yyssodXVZ^clqstpa[modM7*    +   +  + +  +  + + 1@A8-!$"!  "%!!$)$#!#"&&!!#'&(*)##' # ((#%!"+./-%'&%*00&!&"   ! #& +  + +)Vr‚ƒƒ‡‘›¦ ƒf[JOQT^glp‰˜ ª¹Á¿¼º¼¿ÁÃÀº¹ÃËÑÓÓÐѼ˜nqu“ ®¸ÊÖÙÓÍÁ²¢Ž‰|†Ž•‡‹ƒ‡‡”¤ª¡“‘ž¢¤¯µ¹¶²°­¢ž˜– «µº°§¢žŸ¡¡žœ›¨ºÑàÚ¾ªµ¾ ˜¾åïîã¶x[Xg£•™¥»¿±¥¦¥¨«£–•–š©±º¸­²¹ÇËÎÕÕÔÓÓÕÕØÞãÞßßâåäÜÙÕÓÔÓÏÔÙáäæäåäßÕ¼šjORs…’ŒÎãáÖÈÄÁÆÂÅÃÆÉÈÆÇƽ´¶¿¼·¶®£‰X5'*0D”×ìé˾ÀÑçõúöïàÒÐÚíøûüýýýþýýýýüýüýûöçÒ»²ºÇÏÛäèêêêëêêàв¥±ÅÓÚÛÛÞáâäãßÜÛÙØÙÙÚØÒËÆ°šŠ‹˜¢®²´½¿± ¤°ÁòŽpdhj|¤ºÃ·˜wiZ`^j…µÏÒÓϽºÑÝÚ¼xÁßçéäÕ»´²¬ª¯³®««­©¬¶¾ÄÈî›–¢££ž”‘–—Œ‹••’sacŽžš“ˆ}_A6@\Žb=6\|x\6B?7+!9ASacd`^_acac@! +  + + +    + +  +      +    +  !!]YQ@/' "))!'..034>?DKWY_^N>8;79BTkria[SGJKGCA:??DIJHI[ca^^anwlbM>3&'(?PVMPMLGHHAGB@:46<;97;5602/+$"$%#%.AWfx‚„{~zwiT@89@=7<>GLIHO`b\\ZapsqcJ=2'+7GOPOHHLIEB@E@:<5:??6:Z…”xMcŽ¤©šW + !$*2?C)  .FHHTa_^fx{h]V`qŽ—˜‘†~rqkopnq€{odYbfefjbbXK. + + *DVVSZeqtrifswxx|xzrohmŒ¨¦ˆ€„‚uptgf`ahig\V]e`O@*-FPLGG;C?EE@66C\m~‚‡’‰†…|[6   + + + + +  +          "!  ^VL>8&  #! !$*,7276;AIQWY[LB;>;=H]owmaYNEIKKG>6<=EMNLMba]^[dnvp`D=0(17BKKIGLKGGFCJF9146:<8;8<821/)&'%#"#(':P`l„ƒv~|n[G<9>@@::>FbsuoaTOLGICA><8AFMOMQ^cca\fktocI9-$,8EMKGKHPILSQRF>555:779<8566/.'%("$$*;Rdn„Šƒ}viYE=<7<=CPZfnijkpqgXMXbflnsvup`brziJ5.#   + +    + + +  +  +  +  + + #;HB/  %&"'$##'!#! !#! !""!!!"(," " !)!"(*,($"$0/,&!$%#*)$"&""#$+'   "  !(+410Zuzu}z}‘Ž‹Šˆv]Y[\ijƒ £©§¤›¤¦§³¸»ÀÇÄÅÂÃÆÉËÑѼš„t€|†’— ´ÈÓÕÍƽ°§Š‚x„–¥œ‚{†Ž•“‹–šœ ª´¸·®§ž™–˜ ¬­£š–“ œž›¢¨¸À·¥¬ÅÏ»´Óìòñ忆aZn¤±£—¤—ˆwhlk|Œ‹„}˜›–›®»ÆÍÍÎÐÏÎÑÙßáÝÚÙÞåâÝÙÓÎÏÑÎÒÙààáåäâÝÔº“hOA::AX™ÓæèÝÌÇÂÆÇÆÆÆÇÇÉȾ¹°®µº··µ°ªt;)')2oÁèìæáãæïøúöïçÝßæôùüýþþýþýþþýýýþþýüüùñâÎÊÑÙáçèèêêêêçÕ½«µÂÎÔÖÜÞÝÛÝÞÙ××ØØØÙÝÚ×ÔÌį˜£­·¹»¼¦šž­Áñ‘mknl¸ËɽŸ{h___c‚®ÑÏÒÏ¿»ËÚÙ¾Œn†¸ÛèèáÓ¹·²¨¨¯¯©­­¦ž¦¬¶ÇÍĵœ”• ¤£——“‘‰†‹’‡~—ee}Ž•¡›žšyT;=`…kPbŠŸ™{au ¸·œ`# +   "7GC1 +(0J[QGWc`isuquhigr‡Ž„vhfeeluhej]Z^a]aebWRU.  'HVX]^borxspkr|ˆtwpdecz‘Ÿ™‹†z|r{ykf_Z[Z]XPM`_]L/ !0FLJQRWYbfQ>>?C[z•‹ƒ€uyvysoU2    +  +    +    + +   +   + + +  +    +       ! ZPQ>0 "!$ #  "$'(35.5:JMVZd]H=><?=@KOKSVaig\Zfmrr]F9/).9GLHHGJMMNVTVF=;9;=6;::7641-/)&&"&!!.AS`q‹‹†€€yjS@;99;?ITervqrstpfTU]bejnnrtl^^txfB4. +  + + + +  + + + + +  +  +  +  "7D?/ + "#""#" $#"%"#! #%',!#" $!,2'#*$$'2)&%!%#'4%!!#"$ '$ + +#$    + +Zt{€|wy…ŽŽ‹…€zsb\\_lq†š¦¬­ª¨§¥›˜˜¡¨³¸ÄÈÈÇÂÄÅÅËÏÁ§“xy{‰’”›¶ÆÑÑÎǽ´¤›Œ€~„—«¡‘ˆ„|‚Š˜ŽŠ“”Ÿª³¸¶®¨Ÿ›•”¥©¦¡––•–¡ ›Ÿž¨ª²¼³¢©Ãλ·Ôîòðç½€a_q¢°§•‚oic]_q‰‹€z‰‘› —”˜¤°»¿ÅÈÎÎÏÍÐÖÝßÜÝÜÝãàÜ×ÑÓÒÏÏÒÙáââäãáÝѸ“lM?<3CEI[mrmd_NHHE@@;==BMMMQ[cee\YejpnbL9/10=GIHCDFIORUWVE9>@?;;;=:840-&,&#&!##'3H\g|‹ˆ~uyubL@4:49CI]o{zyrrgUOWagkmzzrk_cwsZ@1(   +  + + +  +  + + +  + "5B<1  !#>(!!#)&!!!""!$" ! !(%#$ !)/+'%%$ !*()'"%()/! $! "    "  +  /`qq€…z…ˆ‰‚~tbZ_[\ZisŽ¢­²®¯¯¥›—”šŸ¦¬·ÀÄÌÈÅÂÂÆÆÁ¶¦‹|z‰‘™ž´ÈÒÔÊý³¤—ƒ€˜¦žŽˆˆˆzŠ—š‰Œš¡§®°´±­ž˜‘“£¦¦¢’’™š¤Ÿš ££¦©©¥¡¬½Çµ¶Ùïñòå»|ft‡¦µ¬˜Ž‰wh`c^`s„‚z|ƒ‡“™–— ¬¯²´µ½¿ÅÍÒÔÕØÝáÞÜÚÜÛØÔÒÑÐÐÎÓØàâáâääÞй“iM<:6;ExÄÞãáÖÉÆÆÇÅÆÈÆÇÂÁÂÀ½±´·¶¾¾¿ÎÐ¥V3,+3]°ãëåãäèïóõóîèáâéðùýýýþþÿÿþýýþþýýþüûüúôçØÓÜâåéêêéêéæؼ§§³¼ÂÈËÍÎÐÌÍÈÌÉÊÆÊÎÎÍÈÁ¿¶ª—Ž˜¤¬²´¼º§š¢­¹»©ƒed^p˜»Íɼœo`dc_z«ÊÍÍÐÁ¹ËÚÛÀ’|‡¸ÛççÝϵ®±¥¥«®¯¬¬¤¡¦ª¸ÆÇòš”‘–¢˜“”’ŽŒ‹‰ˆ‹ˆ‹”fg†œ¤¥§¤¡‚T9?m—¨ƒWSn‹“Žª¸¨“tC + +   + !-G@)  0COSX`a\[Zcknljedmtqsrmkcadkfjhel`[]a^bY_cU, + +  !>V[`VVbrpfjdoy~Žˆzqm`fk‘™Š„‚y|tsm_a^XZ]OJRgheO9(*8HaSTcijidS?:7>Q`v{t~~…„‹‡^@   + + +   + +         +  +        !$$$ RUG?.$&$'" ""!!!" ""(+-.231@@J]pqg\]NIFEGA?;:ANJJLR`fb^Y\fqn`H5+-8@GC?>EIPSSTTNB;@CA877==33+(" %$!(/=Ndo‰„xuul_H;;0OP?Q`t|~{toaRP[`lnuƒudWcvnT;-    +   + + + +  +   +  + 3&:;6.%  " <%"! %& !!#! " !"$",($!""% .&&$$!"$,'(,0' '&# $""!$#"  ! + +bqs‚„~††{qqbWX[[Ykr}Ž–¨´¶²´©¡Ÿ˜’’–– «µ¼ÂÄÇÆÄÃÀÀ¼²¥†‹’¤°¸ÉÔÕÍÅ»¯¤”„|„“¤ ‘ƒ‚€‹š”†~†—¨±¶²®ª¨¡˜•“©§¢’’œ ›—Ÿ¡¢Ÿœš’ ¶»¯·Ûîòñä½€bq©¸®Ž‡rfbdbi|ƒ~x‚‚ˆŽ‘”—›¡¨­®®²¼ÈÖÜØÜáâååáâßÙÔÐÓÏÏËÑÙÞáâãããÝÒ»”_MB86:=\œÑåãÛÐÄÂÅÄÃÇÇÅÆÂÁ¿¼¯®·»¾½ÆÙà¼`1/-4S¦àëãÙÝÝæîñïêßÕÕßìøüýýýþþýýþþþýýþýþýýü÷íÝÔÜäæéêèéèèçØÁ¤–š©ª®±´µ²¹´®±±©®¶µ³±®§›“ƒ€Š›¦´·»½©˜šž®«š{hbbq˜¹ÊɽŸ€oacd`yªÉÍÎÏÀ¸ÈÚÚ™xƒ¹ÙççàÌ´²­¤£®¯¬§©¥¥¤¥´ÆÈÀ¯œ“”“Ÿž—•’Ž†ˆŠŒ††}…–†dk‹ ©©¨ ˜|M9b”°µˆYW{žª¢¢© {a8 + +     ""8EH/ 5?JTS^[VQP]dbfadmnmorihb`cflefdgfc]X`ajef\O*  + + #JQV`TS^fqhhilz}…‡}nfc[byŒ“Šˆ‚zotuc_^TRPMTTglc_=1-=Qd_^igjlcQ?5/4E_u„|†€„††ytU6   +      +  +       +      &"$ #WWQ;)!&)%%"! !)&&!&*01*3ALKU\[VF;47,(*Agv||zzoojd_H. + +   + +  +       +           !!TUS<,(*%$$"4#&%$(#""-.12+0>EKU``VE=78@DQcstqfXNMMMAD;2;BIIMORSVPR\ajqobL<3.5GOSHDFJJOVYLA98?HE<@>;<20)#&$$%#"$3I[hj|€pppmeK<74oL,9JYghivtmj[=*$'=^jpndda]XTU?$ +     +  +     +       +    $!  " VRK>1& $'&"%"!"&$%(,131029CGR\`XC;:839@GJOSKQXXM[_jnoaJ;25AOU[IHEDIQSRGA22=IE==>>960*$#&'(% $'7IYfq€zttm^E=4;FACJ]m{||tttobPPX]cisxywgQ[rq_E3(   + +      +   +  5?6(-"  $ G!!$""#!  #$! #%"$($$#%%+1% !%(&)*/0+((/)'#$ '!     :r†‡„‡‚€˜’ˆ€vlbW[^`lqy…Œ‘“˜›˜¤§©¨¨££¡ž››œšœŸ¡¦³»ÁÁ½­œ ­´ÀÌÒÓÍÉĽ¯—Œ†ƒ†”ªŽ„‚sxŽ˜•†–—˜Ÿ¨ª¨¤ ¥œ•”“¡§«¡••˜œš–› ™”’Œ…Š ­©ºáðòñç¾izžª¥›–ˆfYY\jurqx|stldbddl„’œ£®·¿ÇÏ×ÛßãåèééçßØÓÐÍÏÊÐÖÞÞßâáÝÛγ‘cXB83573T¡ÄÇÇÇÂÂÄÂÁÄÅÆÈÆÂÀº°®¹¹·¼ÖêíÒu;2,3GŒÓëåÑÎÖèôôîåÕÊÍÚìöúüýýþþþþýþþþýþýýüüùîà×ÓÛãçéêéèéêåÒ³Žrlliegie`dgcibgc_bgdbbc[ce^h{Žœ¦°µµ¥•’ƒe_][h‘·ÆǸ›zhbhh`w¥ÊÎËÏÀ·ÈØ×¾–yƒ´ÕæêãÓ¸°°®®­°©¡¢¡žŸ¦¯³¶¶«˜‘“™—‹…ˆƒ‚ŽŽˆ‡ˆ’ki{•œ§¶¼·’`Sj“¤¨«¬¯®©ž”Šxrpd[P3,''!!"    + '()+112@DO^N9 + 8GVa]V_c]VUTSMWefaaieadX_[_iihgk\S\ahr|~}e9    2(3AUZZeZXYVVXSB*%  + +  + +         &%  !XRK<1%#'%%"$ "&!!%#)/,+-4=BJWZZRC9317?I^srh^S@EHCFF?6=?DKOPOW]\VUbfmkZC;56CWTLIB@@AFCMC946>;<6420-$%%##! #-@JWey„…{utiXC=89>9)  +$%y:Y" ""!"&#! #-$# !"#! ! ! "&% !!!*+%+**'&*("'" ##%%   $ +  + + + E’Œ‰‰”Ÿ˜Œƒpf\Z_`tw|Œ˜™—‡|„œ§¯®­«¬§©¨§£š˜™ž¢¤°´º½²¡šž®·ÂËÓÔÎÈǶœ€z†™§ž‘…€€u}•™”„‰Ž‰‘—› —˜™“’“ §©£Ž…ƒ‘—›™œ˜›”Œ„y„š­¬µÞïòò蔎 ¢¤¡˜Š||`VNU]ejktmh}{qd^e`tŒ—”œ®µ¸»ÂËÑÒÙÞäååàÛÓÑÍÎÍÉÏØÛÝáâáÜÚκ’dLE<45;9Q˜¿ÁÆÆÇÃÁÅÅÂÃÆÅÇż¸²¬¸´²ºÜîñÝ…?3/.C„ÉèæÕÑÙéóòíåÕÍÑÝí÷ûûýýþþþþýþþýýýýýüúõçÕÏÒÛäæéééèéëçÔ¶•~nkjkehdfflgfiddZ`g`eid_be]c{Š–¢¦®¬¦‘‘’ŽŽ}f\]ajŠµÈƹ™|lbbsau¡ÉÌÉÎÁ»ÇØÚÁ–vƒ±ÖäéäÑ·®¬«¦©¦§«©¢Ÿž¦¦©µ«—“’’‹„‡ŠŽ…~‡‘…ƒŠ›‘hbƒ¤·»Ã¿­”jgŽ°¼»¤“›–”™~sqkeUSWHHD:+/*00(   + - $,699?3.=?RWK: + 8GP\YY\[\ZUVKNR_hdc`^\ed`^gmqiji\R_n|…‡ƒ|xjA + + +  6S[VXU\ekpebhk{‡€{sg^\bl|…ƒxvorvlhg`adga_gakgN42008QX[`\]WE=698AHZYWca_af`ZI4! + +   +   +    XVG>..'#!,#&  !"*.-0,6;CLMYZVB7:2:=Ecsqf_SGHFFFD?==CLPRPP^_^\`celg^A67:HRQRKB>C;=EA><9?===897241+("$'$ .3AQ_kx…€|tpfOA9;<@BHUdqtqoppnlaXU\abipvxn]Tl|kTA;,   + + + +  +         'DB91  +#"$M; # ",) !  ""$ #$ !# #%*))--(%))+*""$#$  "&!   +R„“’‘ŽŽž™“‡thdXZ]ipš§£–ˆt~•Ÿ¥­¯®­¯³¯°¬£žšš˜¢¨®´¹¸¬¢¨¸ÃÍÔ×ÏÈÄ÷¡Žƒ{‚œª¢‘ƒ€yw†“˜•ˆˆˆ‡‰’’”–”™—•“– ª¤˜Œ‘—œžœ˜š•Œ„|wu‘£ ¨ÒêðîæÆŸ™žš•…{qts_SLPU^ejf``glhaadeiz†‹š¦­¬¬¹ÁÇÍ×ÜÛÞÞÚÕÌÊÊÍÌÉÎØÝßàááßÙʵ’gP@;57?;Z¬ÑÓËÅÄ¿ÄÅÃÄÆÁÂÄÁ·¬¯¸³§¶ÝñòãC2.4?zÆèæÖÒÜëóôïçÖÌÓßìøûýýýýþþýþýýþýþýþüüõêÙÍÏÛãåèêèéêêæÖ¹–~mnnolmjpqonmdfjomindd_c_]ad|”›¡¬²ŸŠ|jX[_o¯ÈƸ›ydaa[\s¤ÊÊÈÌ·ÆÚÚÀ‘yz¯ÙåéåÔ·®®¢££©«§©¦ ŸŸ›š¡ª©›“‹‘†‹‹‹‚€†Š‡‰‡™§”}‚£»½¾»¸¬œ”¨´¸¸¬“u‹•”rd\QQ`^_N9.120'.'  +  +  19:5222=CHH=1 9LUYYY]X[[UUKKT\]bd]]^bb]`mrsnkhfee~•’Ž‡„}o: +   7QWNT\Z`gmliqr‚y{mib_dhtƒ}z}w}vpvnf`^elg_]`Y__J.))1CJKSYXRJ@<863@PXgbfonnymbU8" + + + + +     +            "TWM;.%#%*" "! #0*.)039DJPZ]PA9858=Qdqoc]UIHIHME@:=>>98;@B:7<86643-)#$*$".;L]ejszxtoaSC:5=ACIYlsrnoutph[PY`ahjwwseX[pkTC;+    +  +  +  +    + -AB8-  &!! !!!%#!  !" !"#"!&#" $#'!%&#*),((')'*% $&#&   (  +  T‡ššš”ŒŠ’ž¡ž˜Œ~l^PX`ko•¦°®¤z‚”™›ž¤§°³¶¶³¯«ª§¡›˜™œ¡§«¬¨žž±ÆÎÔÓÏÈÁ¿½¦“‚ƒ‡œ¨Ÿ“~ys}‹—™‹Š’•–”–œš™’“ ¢ž–ˆ}ˆ–ž¢Ÿ˜™™›–„{pr{‘˜ ÈæìëâÅ ‹ˆŠzifpsobTKKQ_jtib``bffka\bi{‰Ž™¥ª«³¾ÅËÑÙÖÒÌÍÄÅÄÇÊËÉÑ×ÞßßàáÞÚ˳aOD@9359gÍæä×ÊÃÀÀÀÂÆÅÅÁÅÆ÷®¯¹µ¬½àñòæ’@16>Ao¼âæÜÜãìôøóìáààçðøûýüýýýþýþýýýþþýýýûøîàÓÒÜäèèèèèêéäÒ´”umpz€{}…ŠŽ‰{{Ž”Šwjca_`_bw—ž¢­²¡‘‹…kYV_j±ÅÄ·˜}ifdW]m ÇËË͸ÇÕÙÁ‹m|°ÕäçãÓ´­°¦£Ÿ¬¨ž¡ž Ÿ¡˜™¡­§–“—‹„ƒ‰ˆ€…‰‹‘—¡§ª›’¦³³´¶¶»¹´²®µ³¯¥€fep‡Œ†}yqgo…~PCHKC7 + 1EMZW_]bYURMQNRSY_WVWTUY[fnspknohiz” ‹‰rgD + :SWOTU[]ccidhnz‚‚yih`bfjq|zrz€utriged[[aZX[^TG)#%+ANDKRUWPKD@2=AVfprs{€~ƒ|hZB$  +     +  +      +           + +    "#$!\RF6,&"#,!#!" &,0((23>/% #"!  """ !!""" &  $#"#&!%$' ! #& '%%+/&-*$" *(""%  +# +   =l‰”˜•‘Ž’ž¡Ÿ˜‹{l\S[eos‚šª·³¬œ††–›žœ¢¦¤®»µ¯¬¯²ª£—™™––™—‰Ž¢¼ÉÒÓÐÊ»½¨’†‚…š§žŽƒ‚uwvˆ™™‹ŽŒ‘”—˜”™¡Ÿš“ ¢œ™ˆ˜žž–“”Œ„wnmŽ”¦ÎæìêÚº’„zsqh_[ttnaZMKYc{|olgemhoma`wŒŽ‘¢¬±¿ÇÊÒÕÏÆ¿¸­¹ÄÇÈÉÈÐ×ÚÜÝßßÞÙʱbKA=78.0l×êéÞÎÁ¿¿ÀÄÂÃÄÅÆĽ¸±°¶³´Âáððä;-/5?mµáéèìïðöùôôñññó÷ùüýüýýýþýýýþýþýþüüüúñåÚÕÜäæèçèèèéäѵ‘xs€”¨¥¡¢ª¶»µ¨ž˜¢´¼Àµ£Œpbab^dwŠ™¤­±¡”’’‘‡j\T\k´ÄÄ»ž„micV^m˜ÇËËÌúÅÖØ¿‹h}®ÓáåâѸ±¯§ž£¦¡ž ›–œ œ—ž®¥š“‘’”Ž‡„„Š„…‹™ž¤­­¬œ˜§®«¯´½Ä¾´§ Ÿ¢ Ÿ{PHTk}‰ƒŠ‰‰Ÿ¯­¢ŠVGadjhjbD-  + ,6<<78=>@HPK=! + 1E><44:=?669::55/(!!&/@Yc__ejjpmhQ>677?>@L^qyrstwvo`PMW]`lx€rgag|~gG8,     +  +  +  +    "88-)!$#"! $$"!#%! $& !%$! !"#&$'2 !#!&$&!&&#'*&"%'&#$  + $% +     2[v‹’œ ¡›Žmb`]cpt‚˜ª´¶²¨Œ”œ¥¡Ÿ¡¥¥¬¬­®¯µµ¯¤¢˜‘Œ}|€†œ¸ÄÍÓÎËÁ¼»¯”†ƒ„–© ƒ|yƒ——ƒ†‘—–’˜›š“—Ÿžš–“ ¤¥›”‘“˜™œ•™š’ŠƒqsŠ’§Öçéą́nkifegeowxh^RQU_m~‡ˆpoppkbr™š‘‡‹Ÿ¬²»ÅÈÎÐËù°ª¶ÀÈÊÈÉÏÖÛÜÝÝÜÜ×ȱŽcRH;973;uÎççÝο¿¿¿ÂÃÃÂÄ¿¹³¬¬¹´»ÈßîîàŒD5209f¯àëîóöøøùùùù÷øùùûüýýýýýüþýýýýýýþüüüúóèÝÚÞãåçæêéççåÓ¹‘v{¬ÄÄ¿ÃËÕÙÓŲ®¼ÈÖ×λž€g`\^jzŽ˜™¡¬«£•—™–†jWZ_f´ÆÈõ˜~gc`_h—ÅËÇËļÅÔ×À”w~©Òßãßи°¯£œŸ¨ › ¢Žžž›ž±ª“Œ–—Ž‹†‡‹ˆ‹š¥ª«¯«š”žª³¸¿ÃÁ»¤Š~Œ•›šwF8C_x…Ž™¡¨¤“mLNbo}‚ƒuJ/(%$$ +  !+5CA;AIKHGXO>  .AOQSScge`[]UMQWQTOHP]^\ahhgdcegbbz—š—ŠŠ‡zwA +  + + +:W[UT[`bhcjhjto{|refdZ[gpw€ozquvidXY^YGTSHS]YE55AFV_ZPSY[_^YBEARiw{ƒ…€„p]?%  +  + + +  +     +  +       +       \QC6/'#+,   ! +0+,'/4;HJQZYO@5@;966>>B59::443/'!" # %(2G[_abhdilp_J;119?EJOerzxww|tn]INSY^jw€tb[lx]F8(       +  +  +   +    + + + $:B4, !"!! ""%*!#$#% !" %&$%!   "#% ##)!#"$") + +'  + + + .Ndr‰’• ¦£œ‚qfaigin‚–ª·¸¶¯™œ¡¢žžž¡ ž˜œ¡®··³°¬§¡~rwˆŒŸ·ÇÐÑËËû½±›Š€ˆŸ¨›}x}qz‰˜’‹“™”—š›š˜¢¡Ÿ–‘›¡¤‹•™œ ˜œ›œ“‡€yisŒ”¦ÎàâÚº‹fefhsyhenvulbY\abisw€ˆ~{yqr}Œ”›¡“˜¡«³¼¿ÅÆÈÊÄ¿±ª±ÁÅËÉÆÑÖÛÛÞßÝÛÚɲgSEA6/79kÉâà×ɽ¼¼»º¾¾»»º»¸¯§¬µ¹¾ÉßîðßE:615b°àïòùùúûûüûüûüüûûýýýüýýýüþýþýýýýýýüü÷îãØßäåèçéèèèãÕº“z{›ÁÔÜÛÞâäçàÔºÄÑÝßØħ…f^\_iwŠ“™Ÿ¬®¢—“—˜˜ˆgY\Zd‡²ÉÍмšnf]\k—ÄËÉÌúÅÓÕ¾‘w|¤Îàäßϵ¬¯¢Ÿ¡›–œ”•œžœŸ±¬ž„•˜““‰Š–¡§©¬­ž”£´½Âú®’xfy‹Šƒf@6>Y{‹•“‰Œ—œ™˜‹r`ftt…‰tN/+4/' + +  0AFJQ\\VTSLS>  (CSPVQetf\ZWSMJTLLVRR``a^gkjg_f`a\x’“ŽŒ‰wpH   <>????Hajd\XPKILJFE:59EHIKJL`d]_ajoriXB=7::5624,"$# "(G[fqvs|wpl`J@FOTW^cee\OZjvjP@3$    +  + +  + +    + +  + + + $8@3"" +# #$# #! "$##&$##!! %""!! ! !  $++'+   + +   + +5Phw‰š¤¦£œ“{cX`afisƒ™­·½¹°™—¬©§ª¦¡ž••Š}{‰œ¤®²²¶µ­Šs}“¤¯¾ÊÐÓÏÊ¿¸µ¨‘ˆƒˆ–§¡”ˆ~yvx‹•‘Š“‘“’““”™ž¢ ”’™££”ƒ‹“–˜——˜œ—‚}rjm|™¢ÄØÕ¼™gRQU`nqklk„‹‚ylsneb`Y^dnwz}‹…†‚}~†“•˜™¡£³³¼¼¶¸¯¨°¿ÇÊËÉÍÓÛÞÛÛÛÜÕʱˆ]O@93718G}§®§¡œŸŸ š¢žž¢žœŸš›ª²¿ÃÆÞìîâ”K7015UŸÜðóùûüüüûüýýýûûüüýýýüþýýýýýýýýýýûüûúòèÞÜãåæçåæèçáѶ“|¿ÓÛàãáÞÚÖȸ±¹ÄÏÍÆ·£„naX^_{˜™™¦¬¢•’—˜‰n[R`a­ÅÒÕ¤}dhb_k•ÆÈÊÉ¿¶ÄÒÕ¾‘{q¥ÎÝãÝÏ´«¥ŸœŸ¦ ›ž–™¡¦§¦®®Ÿ–‡–˜šŸ¤£Ÿ™”œžŸ¥¢£®¸¿Âþº²ª¯©–f@9FO\[@Im†Š†‘’“–“‘‘’•…hE862'*  + + %9EJTXfld\`aZB' 1GTZYY`jhZ]d[TJVSWV_`[YdbedaT\bdfct“–•‘ŽvN *HVJFIR[affd_nw{tnkie\[`ffinmmrhlfdd\VQTSTPKYX^THBLSevtlsqywrgWIT\frqvsouwqldJ.  + +  +   +  + + + +     + +  + + "   +     +     TNB26 #'! "#*,/0-.5@MRZcfU@=8=@=Nakh`ZRKHIHHC3.09@EKKPaca^agork[A<>?33>:940#$"%#!",DVgm{€‚ypmdQB550D:8BRdlnqnpkfTDCJJQ^cdaaQHXkrdHA3 +    + +  + + + + +  +  +  %=<3$ """$#& #%"%"$   !&$$#$"! !  !#$$% + (-4-&    +Hdr}‹”™œš‘~i__bdmr‚—®¸»º­—˜­³±¯«ª§ž“„vu‡—ž§§§«±±§~—¦´ÂÉÏÐÍÉÂÀ¸¡”…‚†›¥žŒ†‚xs{‡•”ˆ‰’’™ –•“›¢ž•‡‚Š“˜šš™›œ•…{pbhq„”¬ÔâßÈžlUTT[gi]_o‹‡qmrtmxtkbchruw~†xz…˜š£œ¡£¢­·½Á»·¶³¶ÀÃÇÉÆÌÖÛÝÞÞÝÝÖ©„ZH<9;;4GIU]c___bhjcO704@LPSJDHRXSD=:6:><<074580+%"!)"!4I]hnyworhWD:3=58856?IT\egjdTDAGTWY_mqlbMJftp]B8) +     + + +   +  + + ++  +  0771&# =&($$$% !""!$ $!!"" !" ''""%%!$$--)&  #)+10+  +  +.Jdorv„‹”•‘pcd_bts€˜±º¿¹®›™°¶¸µ³°«¨žˆs{Œ–¡ž£¦¤«©šŠ…˜­µÁËÑÐÌÊÁ¾¸£‘‰}‚™£›‘ƒtu‰“††‘“ŠŒ–˜˜“”  ž›””››š˜›œšŠvg_ay†“¼àèãУnVSUZ_]]_n„}ognszwoh^jsu}vuy~odp‡•—›ž¡¢ž™¢²»¼¸¸º¹¾ÃÃÃÈÈÍÕÛÜÞÝàÜÓÁ«‡cH=>658<@Qftwwx{zŽ“•—œœŽŽ§¼ÉÐÖåðòã–M4--2JÐíóúüüüýýüüüýýüüüüýüþýüýýýýüýýüýüüûûöíÝÚßãæåèçççâÒ¸•tm|–«¹µ´³º¿¿¾¼¶´²±­°¬„se]Rc{Œ——œ§¬žŒ•¥­¥‚faU_~«ÂÔØŸzh`b_cÃÈÆÇ»´ÁÐÔ¾“qw ÈÛàÜ̶®¨žœŸ¨¤˜›™—œ—›–ž¦­¡“Œ—Ÿ§¢¢¢¡›‘™ž ¢¢¯¯®­«¬§©Ÿ“tNCRPI>6=324=>*,51/2( ##%#5BIUdlmgag[N421*/21(##)1@O\[TB67@FMOTagg[CH`ngR7+     + +  +  +       + + +  +/76-!  # '"&$ "## !!!!"!$!%  "-%$$#0$',21%  $-421"!   'Jfqmltˆ’š“€md^Whzo|—®¹½¸®š›°¸¹¶¶´³¬¤Ž|‚žžŸ¢ŸŸ›‰ƒ“¥³ÀÉÏÐÉÉ¿ºµ¡Ž‚~Œœ¥ž‚~yvˆ”…‹››•‹‰‡Š‹”™–’”¡¨¤—’’™–™“˜ Œ‹vkgl…’•¸ÝçâÍ¢kMKST[bhij„|qrgqpqpa[ceu…€†zm\it}‡›Ÿ ™“™¡©°¨ª©ªµ¾ÄÇÆÈÏ×ÚÜÜÜÞÜÕÆ°‡`JA92/725CVec`ekhh}ƒ‰‚‰Ž…¬½ÇÑÕâðñã–J6/,3H†ÊíñùûûûüüúûýüüüüüüüûüþüûýüüýüýýüüýûûöíßØàãçéèçççäÓ¸štm•°¸¶³²¼ÂÂÂÁ»½¹µµ²­ ‹tcYZhmŒ”™œ¨¯£’‘›¦¯¥‡k`O[}ªÂÏÍ´“{f`]Zc‘ÂËÆŽ³¿ÎÒ½”uz¡ÈÛÞÚе®ª¢¥©¦œ’’–›™œ¡©ª”“£ žšŸœŒ‹™šŸ¡ ¤¢žª«¦›–‡‚rUH`~Žv[csz„Š‘–‰Ž•œ¡›“‘Ž˜š’ˆsVE91+)  +  + 1@@III>9642,1AXf]J@:7<<==:1'$*,./595--*+&'$!'**/&!$(.19ESULEFA1 %  !"/695+&$+49:9A?GC37HNF8'#      +    +   + +   6C7,#2@ 0$! #!"'!# #$" "#&!! !!#$+-&! "-/12+#$ + +   + )Qhqrrr‚š’{ha_Zcro~•®»¼·°¢´º¹¸¸¶´±¯š‰„‘¦­ª£ž›—˜‘~w…Žœ­¾ÆÐÎÌƾ¸±žŠƒŒŸ§œŠ€}~yu†”‡š›”ŽŽ‹ƒˆŠ˜›—””£¨¤•Ž•œ™—–™œ’Œ{qip€›˜¯ÒâáΤmJKPU[ghfn„{okbgiihb^_sƒ†‰Š}l_ggqpv‹—–—š—™Ÿ££Ÿ¡Ÿ¡¬¹ÀÆÈÊÌÕÚÚÜÚÝÜ×ʳ‹dLB>6,6-7E\jgksnjh€’‘‘ˆ…–±¿ÈÐÖàîðå—M40+2CxÂèï÷ùúúúûùúúúúúúûúûúûúúûüüüüýýýüûüüûùïáÚßäèççååæãÕ»˜up›°¹µµ´´¸»Á½¸»¿·¶´¬š‹qf_]eu‰–œ§¬žŽ–Ÿ§¢€eYV`y§ÁȤ…m^bZ^fÂËÆÈ»²»ÍÔÁ”wn›ÆÚàÜ϶­ªžž¤©¢›™••˜ž¥©²® •–›ž žš™‰‰™”š¢£ž™–”Ž‡Š‡Œ|`Tb€y_en‚‹‰‘Ž’”’•ž ›”–•“‹x[A>72* + + +  38GPar}vuvjP-  +0G\\[Q°Š\\Q^]SK]]VWecilrjoŒŽ–™Š‚u‘›˜—ŽŠ‡Z,  +  ,SkXJOO^fkgacahkiknjaYWZbjjmx|€{}ysz‰‘‘˜ ––¢”eZVguqpsonskfggjiu‚Ž‹Š‹ŽŒŒzhK-  +    + +  + + + +   + + +   + + +  +  +    #"  WG@9&"  "$)""$%45/041+(-*##'.n¹çìðóóôöôóôñòóõóõöôöõöõôöö÷øùûýýüýüýùïãÚàåæäååäåâÔ¹”vr„´»¶µµ³µ¸À¾À¼¿¼´°ª¡Špd]Xe}‘“š›¥®ž—¤±¦fWX^€¥¾¿¹ „h_[\`eŠÀÊÈŽ³¼ÑÕ–€{”ÂÚàÝÑ´«§œ™ ¤ž’”‘— ¨­±­¢”‘¢¡ŸŸ›‹‡Ž—–˜ ¥¡˜Š‚ƒ†Ž‹ŠŒ~bV`w‹‰s]dn€‰…–Ž‘–’‘™›˜‘‘’““–€aA:583$ + + -4HScxŒ†wnxrS+ .DUWSPW\WXYYWMLV]S]lkdhqps‡™œ›}•›˜–‰†Z+  0WcXQPMT^aac\clnjmloha]Zaow~x†Žˆˆ’”ŽŠ”–˜–› ›’’ƒobXXjstoqloxyrgeagt‰”’“‘Œ’‘…jS4   +   +  +        + +!" XIA4'%! !##$"$!-)"!(" "#! &$)*" '### #*'#$##!   !#! %)+&&%+,"##!!    + +  +    +    +     &4;:6( ! +!# '%##&%#$ #" "#"&$##  #''')'&$!$ $'"$)/,!& "'*+/5/23/#  + + 6Ganrrn{Œ”‚o`_\_ir‚˜¬µ·¶± º¿¿¼»·´µ­£®µµ³­£”ˆzrz‚‡Œ‘¬ÄÌÈÂÁ·¨£–ˆ|y„–©‹ƒ„woƒ’ˆ‹”’Ž„ˆ•–•‘’ž¥¢—ƒy|œ›•›œž–Ž‰pjˆ©º¦‘”¦ªžƒdRRZS[_^bq‘…paVZZY_W\v’ª±°£—„uneilskjq€‰ˆ”™™¡žŸŸž¡©¸ÀÁÆÆÍÒÙÜÚÝÜÙÒÁ«‰_F?@9530?]…“—˜š¢©£ª½Ä¾±¥ –Ÿ³¾ÎÕØäñòë£N5005>j³æêäáâãåâÞÜÞÜßáÞßááâááãáäåæèìõúüüûüüúðâÙßæåæææåäâÖ»—ƒryœµ¿ºµ¸»¾¾ÀÁÈƾº´¯§Ÿx`Z[g‚˜› ¨Ÿ’“°µ¦‡dbX`~¥¹À¹ m]\a[b…¾ÊÄÆ»°¿ÍÔÅ™}™ÅØÝØ˵¬¤žš¦¡œ˜“š ¤«¯«–‘ž¢ žœ˜“‰Š‘˜ž¡¥£œ‰}|‰‘Š‰w\Uh„‰‹oZ^x…„†Ž˜“ŠŽ’”˜”‘Ž’–‘’’’ƒdC=;5/$ + +-7FWf~‡ztrtS1 +&@TLVV[`UJ\UYQMWUT`bdiq|y{Ž˜ ›˜™‰|Š•™™”’‰g( + 1Tf\TQLYZgpg_ceqnsjlb\]Yl€ˆŽ’—™’‘”—–’ˆ†“‘“ˆ†Š}d_O\jutvotvz~sfdbcq‹Ž‰ŽŠƒnQ9!  +   +     NF>4'(# $ "&*% $!#! !$#  ' "#&!"      + + +   +  #2=>71&## ! )B4$$ %"# %##')("!#'(+)'%#$)$ "%+.+$!$# % .082..+% +   + 5McmonpxŠ•}j_\Y^dl|”ª´»¹®›£ºÀ¿¾ºµ·µ°¡“¯¹¼¸´¯ ’…}‚Š’­ÅÎÉÅÀ·«œ•‡€|ƒ«¡Œ……wr‚Š„Ž““’”ŒŽŠŠ‘›™’’Ÿ¤ž—ˆ„„˜œš—˜œ˜’~u›ÆÔ¾Ÿ‹’–q\SLQOXcYfr‹ƒfZSYNU_^n‹Ÿ°¹¹²¦‹xkdfq‚„qjs~Š–š£¥££¡ž«»ÀÂÆÇÌÒÙÚÜÜÚÙÐÀ©ˆaM@6:6408Xp„Œž¸Ã¾ÀÉ˳ª›‘‘¢´¿Ë×Øåðòê¥Q931.5b±åé×µ±¶µµ°¯±°µ³³²¸³¶¶¸¶º»½ÁÎè÷úýýüûùñãÚÝäååããæãâÔ·“|m|œ´Â¿³¶¼¾¿ÁÂÅŽ±­¯©ˆw_ZUd‘’—šŸ¦˜ŽŽ±·¦‡a[OXv¦»À¼¡{mdW^af‡ÁÊÆĸ¯ÀÏÖÄžzf™ÅÙÞÚ˵¬«¡˜¡¥›š—‘œ¡ª¨§¥›“‹”˜ŸœŸšš“’‡ˆ—™ ¥¦¦œ‡ŒŒŽ‹ŠŒ|_Vc~‰‹x\]|‰”ˆ‰—š“‘’•‘Ž””‚jM986/   !-I^d{‹‹uw‡…f@  +'6JZ^ZX_cT]^][KGM[[ekjz“•†ŒšŸŸ£“‹Ž˜™”’Žj." + + + %UttbW`devtmmry€ˆldjqz}‚Š‡Ž„}tnpsk`e[U[VVZ\ea\QQUhr{‚ƒ‚‡‡nidntƒ’š”Ž’‘‰lu +    + + +  + %    +      !!NJ>-&   $$& !" $    + +   + +       &7:CD;, "  $& %$!!#! #"##! #%%## !"""%"&%$*+(" "#%$%)&'%#$2.+020-944-0&%  %Oijgmkpœ‘~ga`b_ckƒ—¯³·¸ª›¡¸ÃÃÃÀ½¾½¹©œ˜¢µ»¼½»·²­Ÿƒ†‘š›ž°½ÃÍÐÎƶ¡‘‚‚«žƒ{spz‰”Ž†‹””˜›˜™•’”Œ–¤¨£š‡†“œ˜•™Ÿ¡šœš›ŸÀßæÖ²“˜}YHOSV]admxŽ†ufSHM`€‘•£²½¿¾Á¼±•„rv¢²³¸¨•Œˆž­¶µ®§§¬¹ÃÄÇÉÌÒØ×ØÛÜÙÏ¿§‚`VG7/-2<:OY\`f€œ©²¬¦£™ˆƒ€{‡Ÿµ¼ÇÐÚçïóëªT8+..0G’ÛçÕ®Šsuowsv}tzuu€}ˆˆ‡‹‹Ž”ºæøûýüüøñãÙÜâäääçääâÕ¾ž†v~˜¯¹½µ±´º¾ÆÌÈÅ¿·³°©£Œr]YYgv‘˜œ¡¤œŒ‘¡£ž{\XV^|¥¸Â¾¢‚hdb\Xb†¹ÆÁÀ¸¬»Ëн’oe’¾ÖÝÜ⦣ ——•˜˜Žš›Ÿ ¨¥Ÿ„“ ž›—’Š¡³·»°‡_ez†‰ŒŽŽ`Waw‹’‚\_x}…Š“‘„ŠŒ–‘–‘Ž’’Š…y]H;11& +  +(.DN]kƒ“|s‰ƒjC! +'8G[^WUV]TUce^LORX[fhh’’†‹‘š££ž˜‹•›•Œ‹ˆc[  8 )Sph^TYgjsrqo{‚‚Œƒxncehfi|rmoqieZfeWQTTNKPSZb\c\TY[l|{x~‹’Šuhbjvƒ“•“•’—–‘ˆŠ‚4! +    +  +  +   +     +      "! " MJ:#&!! !%&         + +       +  + + +     ,:?FC;+$#! " !! !!"' !!#"#$#-'('#!! $ "$%)*0-% ! $$%'#$#))*/--+0-,324+("%$, +   (Pjlhhjn‰–‘|g`YU^dh~›°µ··¬œ£¹Å¾¿¿¼¸¥–”¤·ÀÁ¿¿¾¸³¥‘†‡‘–Š“£«´ºÁÄž²¡‘¨®ŸŽƒ{tmt‡—…› Ÿš˜šœš—˜•–¥ª¨™‰ˆ›—š›œœ›ŸŸ ©Ìçéײ—Œ‡y]JPXY^achw„l`UP[sŽ–™§³¿ÂÃÇÀ´ ‹˜¤²¹·­—†Žž®·¾·±§Ÿ«¸ÁÄÇÆËÐ×ÙÙÛÚÙÑ¿¤€^NA;92/4>HV\[X`gorngbd^YW^|œµ¿ÅÒÙäðòé«V8)()0K†ÖèÛµ’}~}{x}‚€ƒˆŠˆŽ•—“—œÅìöúüüüùðà×ÝâäãäæãäãÖ¿Ÿxo~¨¸»½½ÀÄËÏÓÐǾ´­¬¬£w^Y\er„‰“™ž©ž‰•¨®¤}]ST[z¥ºÂ½¥‰qb[[VaˆºÉÃÁº­ºËкjgºÓÛÙ˵§¤¥¡¡¢œ›š’”™›œ£££œ•Š› ›šŸ££¦«·º¹·«~W\r„‰Ž’‚`H^v‡u`cs‚‚ŠŽ–’…‘’”•••—‘‘“‘‡z]K?45/  + ! ,?LTe}’‹ut††kE% +  4GX`TPX[WZ_f^NOW\Yihmˆš•†Œ“œ¢¤¢˜†“›–„eB  +  +Sfea\jv€†„tv}}vrnibXPINNM[cc^\WQTTQNEFJHJLKQ\cmYNR[jzzx{~‡‹ŽveiipƒŽ”•–›š‘’d@! +A +   +      +         +  ! ! JJ7&#'   $ #$&             +  + +    + + +   + +   )9@CB@-##"! "!&$'$ ##"("$%" !#! "!%'..##())%#''% " %'+,-/1044460&##  +.Sfjegms‰–vk\WPZbi{®¸¹¶¬š§¿ÆƼ¾¿½¹¦‘Œ£¹ÀÃÁľ¾¸­—†ƒ“¢—†Ž–¤£ª´·½Â¼ªª±£}qqwŠ”Œ‚Œ›Ÿž™œšž–’˜”’“¥ªª ŽŠ–˜Ÿš›™˜¡ŸŸš ·ÛìíÞÀ¯¬«›_SR[^ch`htyhYMOeƒ”¡§´¼ÂÆÆ¿¸¬ ›ž¡©³­¤†Šš¬¸¾¹³¨§¸¾ÃÆÆËÐÖØ×ÙÙØÑ¿¢|fR?:0(-5;GQZWLMLJIWSRSQLPZyœ¹¾ÉÓÙæñôì³[=,(30IÓéÞÁ¢””’‘–ž¡£Ÿœž  £¥¥¦®¬¦©¹ÞõúüüüüùòãØÜâãääâáçâϹ™}o{Œ´½¼ÀÆÇËÑÒÐĽ³­¬«¤Žyc\\ar…‡‘–¡¥ŸŽ„–¨®¦ƒaOQ_x¢¸ÄÁ¤†pa`^^_…»ÊÇ»­¹ÈνŽhh¹ÑÚØͲ¤§¢ ¢£›œœ˜“˜˜š›¦Ÿ ž’ŽŒ“¤ Ÿª´¸µº¼º¸²rQSi†‚Š‘‘‘ƒ`H\w‹~b_n‰‹‹’’Œ”‘–š’‘‹ŒŒ‘“’‹wbK><0' + +%:ITh|†op‡l=$ 0J]aXU\Z[R\e_NMRS]krq…’……’œ¢£ ’ƒ}Š“™“‘‘‹ƒh5 +  /Qgfa`rz}~€lnrqlh^[VGE-*+2U—ÖêåÔÏÍÌËÎÑÑÔ×ÔÕÕÔÔÔ×ÖØÜÚÙÙÝáòùüüüüüúóäÚßããäãáãäÞÏ´“{sr‰—¯¹¼ÁÂÆÍÓÑÌƼ·®­ª¤vdYW^n…‹—¡¤žŽŠ”ª®¤‰[RRTo ¶À»¥…fbec[Yz¸ÉÀ¹²¶Å̽‘sg¼ÔÙÚϳ¤§œ–œ¢™¡œ”•–¡ ¢¢ Ÿ““œ§®¯°¶¹¼º¹´¯¤™ˆgQYm~}‡“‘’ŠkSZxŠ‘†hZq…‰†“”—††•’™–•‘ŠŽ’‘‹yaJD72# +  (:LYj‚‚osŒŽn># + + +!4G]_VOVZ\T^beRUZU^ksrˆ™‘‡†“Ÿ  ”‰‰•’‘…f; +  'Lbb_bosrvnhhie`]`YOE?=@B?AOWMSMGHJNJEIKNZMU[[^hbc_\k}~oy|~†tflil€—˜š”˜’“ŽvG(    + + +     + + +  +  + + + + +   + + +  + +    +  + +    +  +  ' KI5 0$"""!! $.    " +    +   +   * +  + +   +     ';DKF6,##%  +"""#)^0 " %!%!"!!&#$#%" &(#!!!(!$$0% ')%)*1-9733--,#   0ZpynijmŠœyjb\[cio€›°··µ§›¦¼ÅÅÁÀÁ½¾¹¯™–¬¾ÁÄÇÃÃÀ¾µ¡‹’›’€Žž¢¦¤¤¨¥¥«­¨ª°³§’…{ttwœ’‰˜ ¡›œž”“˜‘•¢­¸¹ Ž’›˜—™—”ž£¥žŸºãðòèáèîìຂ`WT\kgehlje_[_UeŒŸ«¦¦³¼ÃÈÄ¿´¯®©¤£«²¨™„‰ŒŽ›±¶¯¨¥¬¹ÁÅÇÇÌÏÓÖ×ÙÙÙ̼¦ƒ^MD8-*,+6AZe^`]WPQZdcg`U\cz°¼ÊÓÛéôóð¸f>/#*9|¾Úéêéîòòóññóôõõõôöõööö÷õ÷õøø÷ùüüüüüüùñãÙÝàããâãâáÝϲ”|pmƒ™±¹½¾ÀÇÐÔÐÍÅ¿·²¬¨Ÿsa[\dk‚Ž—¤ŸŽˆ–®´­’cQHRiž¶¿½§jdb_[YyµÉÂÀ¸­¸Æν”rh¼ÓÜÝж¥¥œ™™¢ šš™’‘ž¢§£›š•˜¥°º¶»À½»µ­›”Œ†w[FRk~Š“’ŠjTYs‰”ƒe_t„……Œš—Ž‹Ž’”˜™•’’‘‘‰‘”‹wdNI:4-  + +  +!%3DKU\xƒmn†ƒqG#  6QW^\YUYWV^kgSLPW`jnoˆž–‚’Ÿ¢¡ž“ƒ|Š‹‘ˆ‰xiG1 +  -Qcde^ieeib\\dbYaWPNA=@>;˜ÑÜæëñ÷ùùúùúüûûûúùúúûûûüûûüûûüúüûüüüûøîß×ÝâââããäâÜ˱’ukmž±»¾¿ÇÍÍÒÒÐÈŽ¸¶«¡’|`ZY]k‹‘“™žœ‹•°»µ”hTOXn™µ¾¸¢Šwge\^c{³ÆÃó§µÈ̼–rj‹ºÔÙÜÏ´¤Ÿžœ—¢£ž›—’‘‘š¤¦££œ¨¯¶¿Á¿Ä½±¨Ÿ“‹ƒ}qoZFKm|•’Ž”ŒlMZrŠ‘|c^n†‰‡™˜ŒŽ’‘•”—˜Ž‘ygOIA9& + +  +(@LP\uŒ|mn{‚nM# + 'H``^ZYS^Z[hfXOQ^eknz’‘v—œœ ¡€o†‰ŽŽˆ‚p@  + + 1L[XVRS]_a`V_]]]^RDHI:>??CFLIILDEKMKSNNVNVXXPV^_c`VS]t~uz€|„Œylmnny‹”™“‘’“”‰y`E#    + +     + + +   + + +       + +  +  +   +    +   " I@4+&"&"!%"!!%0&%              # +   + +   +      +  + #5EEE8+%0) &! &$#%"##!"#%! ##''(&#&#   !" #$'&-#)!+++**46455310%%"     -Oitworw’˜‹wcZXYbox†œ°¼»´¦›¨¸¿Á½¿»¯’”©¾ÄÈÇÆÄÁÁ¼©“”£’˜¥§®«®±¯­¬«¦¨¬°­ ˜•ˆ…‘š’‹˜«£›œ—›˜•™˜’Œ‘¡¨³½ª”–™›››šš™£§¡œ›´ßðòéåëòðåÂiYPZcckqx~q\Z`_o•«³¬©·ÁÃÈÆ¿µ°®©¢¨¯³°¨¦¤­®ª§­·¹µ¦ ¬µ¹½ÁÅÇÎÓÕ×ÖØÕ˹š|\N?4/*-/3H^gjmqrrpkrpkghbi}™²¾ÈÑØäñôî²c:0++B•ÒÛãêòúúúûûýüúüüüüúüüýüüýüüüüûüýüüýýû÷îÝ×ÚßãââãäâÚÉ°liwŸ´¼¼ÄÇÌÎÒÔÑËÈ»¹¬ ’v_^\Ym}Œ•’™œš‰Š™®¿¹—aUT`u›¶»·¦ˆnb__X^}³ÆÃÀµ¦°Å;•ne†¶ÑØÛͯ¢¢› ¦¤œœš–Ž•¥©¦¬«¯µ½ÃÆý»©š‹‚xyvqgdPDEf€ˆŒ’’”ŽrSZq‰ƒ_Xl}‚Ž”›–‹ˆ’‘”––”–Ž‘‘‘’Œk[P@7)  +  +  $COM`wƒnj}…tL*  '3%""$% )% ')*#!"!"!!       +         % +   + + +   +  +  +    + + +  +&5DGD:0"&$ %'!! '$% # "%$%#""$$"%"&& # "!%+)&)#! &%,/02.0512+&$ + 2    +Lkpzvty”Ÿ‘bUWYgkrŒ¯¶¹¶©–§»ÀÃÂÁÀ½¿º¬——©ÀÂÂÆÄÆÅ»¢‰•ž•…™¦««®°µ³±ª¨¬ª©«¯«¯°¥‘•œ™¥¦Ÿ›››Ÿš•—œ–Ž¡¨¬¶¤’•™œ™š›§¨¤—”µßîðéåíòðçÉd\U[cbcps~se``[m“«´«ª·¾Äɼ±¬¯­¥ª³³µ±±²´´´±µ¼º´¢«·¶ºÀÁÈÎÖ×ÕÖ×Óʺ cSB7/%003I`rtv€„~rs{pjdgr‚–¶¿ÇÏØäòôí±Z=3%,:}½Òåèíõúüüûüüûýüûüüüüýþýýüüüþýýüýüüüû÷ìßÕÜàãääãàâÚÉ°Œnjt…œ±ºÁÆÊËÌÏÏÌËÈþº®£’x^TS\mzŽ“”™£œŒ‹œ°¼·–fXP]p˜´»¹¦‚ie`ZU\u±ÇÂÁ¹©±ÄΕuh‚µÑÙÚ̬œ›™š¢¦¤›”™š§¨¶º¼¹¹ÀÁø°¡–~ibe\ada_LFJcy‡‹“”ŠuVXr„‰g^m}…Ž•™‘‘”—“•˜–‘’–“–’’‘Š„iZR@4( + +   'BNPet‰~hh€†nF& *@Sh^QV]XVXefWPT_^fov‹„tˆ‹’¡¡œ”‹r~‹Ž‘Œ‡‡uK# (()=JHCBMVbad[\`\[WVVPH?A:4+%.&' $#!!!!## %"!$& '&($%#!"&# #"%   #"###$# "'*+&$&664032,,,)    )Lfmw~€”Ž|iaa`aotŠ­º¼²¡•§¹½¾»¿ÂÀ¼¹ªš›³ÀÂÆÉÉÈÉǽ¦‘„”„Š—¥©¬¯®±´¯ªª­³°®±³½ÇÀ¬ž¡š£²±¦ Ÿ žž™”Ž“›£««¨Ÿ–•™ š˜˜—šŸ¦£ž ³ÙîîáÚèñîâÀŽj^WRX]bgxˆ~de]Zm’¦¯­¬ºÂÃÇȾ³­­©Ÿ¢°¶º¼½ÀÀ¼·´´º¶«¨£«²»½ÅÈËÍÕÕÖØØÔʺžy]J@B401)/9Sp‡–—”–””™’…ylgl{›µÀÆÌÔäñòí·`6')%.;RœÒÜØéõúüüüûúûûüüüüýýýüýüüüýýüüýüüüú÷ìß×ÛááãäãàáÝ̱“wjp€´½¿ÈËÎÐÕÐÏÏËÊÇÆ»©–gc]]fx‡–™¢›‰ˆ–­½ºšm``]l•¶¼º¦†p\SSZ]s±Æý¸¬³ÇÍšscƒ³Ï××ʯ£¦žš—ž™œ›¦³»ÂÂÂÁ¿Â»±¦”Š‹…|m[VUSZYT[[GJgz†‘“ŠtWYl…‘f_nˆ‰’™–Œ™˜–™—•“‘’–•‘‘“–‡l`TI<. + + ,HX`^rŠ€jl|‹uL)  ,@W_UAN\ZT\ei]Q[^[flp€Œ|~•›Ÿž•o{‹Š‚uxZ( + *BL@?AHS]`a[Y][`_d_VMMD>MKCI@BEOU\UTTVLIGOWTNZ[\cf`WUr|vrwz|xvffgbsŽ‹‰‡}{~yiM% +     + + + + +  +    + +  +  + +  +  + +    + +       " H=0""" "'#"" !  +(  W %'..1/2-'( "")*!   +      + + + + + + + +   %7/+018VvŒšžž˜•™–ˆ{oeo…›³¼ÄËÑáïóì·_4&&%%,?z«¶Âäôúûüûøóóøüüýýýýýýýüüüýüüýýüüûúöíß×ÚàáãåäàâÜÍ°”xkqœ°ºÃÈÍÍÍÓÌÏÑÎÏËÉ¿®„h_Z[buŽ“™Ÿ™‰…•­º¶—ll„ƒšµ¼¼¥‚i\WYYYu­Æ¾¹ª³ÆЙud…¶Ð××ɱ¥¦¡›£ ™œ¤²ÀÂÂÀ¼»·­ “Œuv†vcUT[Z[\`_]HFdy†‡’’‘’‰jS`nƒ‰‚e[h~…Š“—”‹‘—”™™—•“““••‘‘‹phVJA+  "CS\`s†zkn}qT' + + '?UYVLR[VVVdi_Y]]bgow—Ž}{Œ–˜›ž—ƒqz‹ˆˆ‰……ƒyN, + + #@NE?>HPVa]_ZbW]\df\VKHBLCIFCLJJUV\UZSLIJPUPJNX^`^WNOl~|uuu{}{qedbawŠ‘‰„†ƒƒ{~}lH+  + + +  + +  + +  + +  + + + + + + +    +  +       +E<.!#$""!" '! $      &@WeioquqfP:$  $(36;=7'    + +  + +    + + + +       + )6AG>3,))%" #!## ""'#)&$!!#!& &&&&%%!!$+%"!!  !$&%"%'#$,-' "'.2/4;5/-("#  +  ,Rjtx€„‰— “{a^a_ejm„™­··¯  ²º½½»»½¿µ¤˜›³ÄÇÇÇÊÌÈŶœ†ƒš‘}‹™§®¬­°¶´´±°¯¯±±³¸ÁÌ颰¤¢¶ÁÈÇø¯¡œ˜––Ž“¢ª¦£¥˜™—˜›œ—––ž¤ ›™°ØìíßØæíìà¿‹cZX[^fgp‰—Œn`__l–¯²­®¶¿ÂÇƼ¬«®©¥ ª»ÁÃÅÈÊÊÉÆȺ²ª¤©´ÀÂÂÃÊÍÔ×ØÕ×Õʶ|\PB83.+&,9ZpŒ–˜œ’””„rkl€›´¼Á¿ÄÜîðë´^1+$#$(1Okƒ§ÝñøúùúóéæðùýüýýýþüýüüüüüüûûûûùùôëÞÖØÜãâãäâãÞÓ¶”~nq|›°»ÄÊÉÇÌÍÍÍÐÑÐÍÌÀµ¥ˆnYWYey’”–ž•‘‡”­¸µ—io…„‡›²º·£g_W_[Wr®ÆÄ¿µ¨±ÇÍÁ wd‚´ÍÙÚË®ž ›ž£¤ž¡ª·º¿¾¾¹±ª ‹{zvsoyŠx^VTYTY^ddY?DbqwŠ’˜ŽlUWp‡Š{b`j|‡Š‰‘’ŒŠ–˜•š’——•’’‘’xzVLE0  "APU]m‚vfmx|rX< +4>KTSMUXVU[`fYVVW^dn}š•y|‹š›™‹vxˆ„‹“‘zU+  + + "3EHD=HNIU^XX^ZZ]]``PJH?RWaqvleyƒyY6 + +%ATXYHPYUMTcd`URX^in|—‘y‘™› ™‰wx…†‘™œ˜uZ/ + ,/HLG=HLQSW\QR^X]cdd]H<>>7=?GCFKOVRW]HJMSWOOLSLJUVNALjvvqtuqotq_PVfj„†‰‹|{†~xnL+ + +      +     + + +  +     1    +     ! D<,! !!#"*!!      !Gf‚’•˜™—”‰rX8& %84:A=?85%4  +  + + +  #   + + +  +   + + +  + + + +L9?F<)%,//("), " !" !$"# !$!" !" $%)%"%&''''" !"!# $!!!!&(##&"" &%01751-()( !    + +0Nkv€ˆˆŽžra^\^bgp‹Ÿ±·µ¯ ¡´¾ÁÁ¹À½ºµ¥œ¶ÃÆÆÈÆÉÇÀ¯™†€‘„’¢ª®¯²·¸¸º¸³¶·±­¬¶ÄÌžŠ°À¬’–¯¸½ÂÇÉÊĵªž“˜¡ŸŸ¡¢œ˜˜••š™•™£§ šš¸âððçäïóïæÆ‘lYNS`deo‰—ŒnbaYq–¯¸®«ºÀÆÅÀ»®­¯¨£¨°¸À¿ÀÃÅÇÉÆÆ¿»¯¨¤«¹»ÄÄÁÇÏÔÖÖ×ÔÓʵ‚gYHA0(10.A[o‹—–‹Œ‰‡Š‚}sy„—µ½»¹ÂÜïïè¬Y:-##$,2;H{¾æðñòòîììðôùüüüýýýýýüþûüýýüûüüû÷ïßÖÛáâãäââââÖÀžthksŒœ§«¯°¯®³²·¹··³­ªŸŠq]TX\f{“˜’”™’‡„‘ «¤’igYYf‹²¸·¢‹x`^a[\kªÅÁ¼³§®ÂÉÀ˜vj‡¯Ì××ɶ·¸³¨ªµ»¼¼¼½»º³¨œ˜”ˆ„€|ps€‡€i[a\ZVZ_bZBE[p~‚“•qSTh€‹ƒfZf|…ƒŽ–“‰‹“—˜——ŽŒ–“”“–˜–‘ƒhXBC1  +  +!AXX\h‚sgow‚~^5  !:V[[INOTQT\l^VS\[fr|Œ–Žtw‹“™™”wrŽššž˜‹xZ/   + ":BD@;CNQ[ZYZQ^^bcjcVJBA>>=CB=GIHOUUSKKMURMPLGILOJ@>Kbrvtqmsrnpb\V_e|Œ†…ƒ}}‡wqQ. +  + + +       + + + + +  + +    + +        #%*AE8*"  ! %# ! "     Dj†”›—›š’tY<')2/98D951-"/         + +   + +  0:EC9*!)-'$!# &)"&! '$)#!"#!(&" '# #! !&#$%$$!#!#$$$%&!(!##*"%$!! &+077203-.%  +  +/Mkt…¢¡s`[ZZbgo‡ž¬µ²® £´»ÂÁ¾À¼º·£•š¶ÃÆÆÈÈÈÇÀ°—‰‡”w¢©ª¯³´´¸º¸·¶µ²®­·ÄÎÞ“ºÈ±Œ˜±º¼¿ÀÂÃÉÈıŸ ž™œš˜›•—šš——¨¨¥›œ¿åññèæïôòèÈiWQP_cal•‹hd`Xo–®´±®ºÀÃÂÀ¸«ªª¨£ ±·¼½ÃÂÂÆÇËÉÀ»¶£¡ª¶¿ÁÁÂÇÍÒÔÖ×ÖÕƵ›{fRC;7+,..>UrŠ˜’Ž‡†††ˆŠ€ƒz†™²ºº¹Èãíìà£T3(!%&+01Gq¿èðóñðíìîòöüüýüþýýýýýýüýýýýüüüúùðâÔÚáâããáââàÖ¾ž{hhp”œ £§¥¡¨ª¬°«¬¨§¡•€mZ\YTc}‘“’–›‘‡‚Ÿ¡ h^ZMa‹ª¸¶Ÿƒla]WZ\jªÄÀ¹´¥¬ÁË¿œ{g€¬ÌÖÖÊ¿ÄÉÀµºÂÁ½»µ°´¸³ªž˜•‹‰‰ƒ}uty†vj_^ZQTZae\GKdp~†‹‘Ž“uRMl|‡h]e{‚€’‘‡ˆ‘•˜˜š”’–˜™•˜š–‘Ž€lWFE8!   #7[][k…xbm~Š‰i; + !6QYRKKQZY\bjbSQX^j}‡‘˜‡t}’’““‘Šz€…—šš•ˆ|^0    ?B><=>KPW]RW]\^fdklWBA@?>?A>N`=GHNUNJIKPYSRUNJ?JH<8?dttlfcgmhi[W^Zdx†ƒ„ƒ‚ƒ~hN9   + + +   +      + + +  +    +         @6' "!## !$ "(#$!"    +!Bk…’’™™—”‹rT6%%8535S:<3)#   +  + + +    + +  + +  +   ,BIC2-%#(%$# $"$#"!"!!&)"  $ "#"! #""&*"('&#$"!!  %""%& "#%$"&&   &057401.*$#  *Oeu}‹Ÿ¡‘yd_Z]cdn†œ­³¯¬œ’§·¼ÁÂÂÀ½½µ¢’š¶ÂÆÆÇÆÆƾ«’ƒ€‚‘s¡©¨°³¶¸¼¹¶¶µ·³°³µÁÏß–¿Ï¸‘–¯»Áľ¼º¼ÃÇÀ°¦žŸ•’•™š˜œœšž¬© ›ŸÄèòóêèïóòèÆl]RS^bbl~’…lg\]l—­¶±«µ¾ÂÁ¿¶¬¨ª«£¡¬·¹¼ÁÁÁÆÇÆƺµ£ ©¶¾¿ÅÆÆËÑÑÔÕÕÔÆ´šv`J?@7,+.,>Xr““„|€‡Ž‰……„z„›¯¹¼ºÅÛæáÏŠ?0"!$"()./=sÉéñóðîëéíóùüüýýýýüýýþýýýüýýûüüù÷íßÕØÞãáãââãÞÖ¿žzhdvŒ¡§®±²­¯¶¶¹¼º¼¶³²£‘z]VSTj”™…„’¢­§ŽfRPTf‚¦²²Ÿƒj^[U\_q©Ä½³¢ª¿ÊÁzkx©ÈÒÕÎÉÈÅÄÀ½¼½º¯Ÿ¢³¼¶§š””‰…~}|pyŠyifXTTYU]cY@Ibny†Š“Ž’}UQj€„†k[jy†„†“’‰‡Ž•—’˜›ž ™“œ›–“gLCC8#   + 8Teim}ck‚k6'9IXRFIXXQP_hdVSQdmƒ…Ž”„k~’””‡Š~‰’’™˜ŠwX+ + (9CBA::KXY\UVXZalpjkeOC<;?@BC:DJJDHLFPJGLQSKNQB>4<90/NnriedkifaX@HR^oy…zvxy‚}yjQ+" +  +      + +   +   +   + +     3 + +    +    ( !$H7)" !%"## "    #(@g€‘’—›™‹y^=*% "&38<7434)#      +     + + +   + +     +/FKE8),'A? #&$"""!#" " " %# !#"$"#+**&#!% "%$" #!!##"# !$+61215/,-% +  +  + +1Tlss{„œŸŽzea]]feo‡±¶´¨šŠ¥»½Ã¿ÅÃÿ¹ µÁÃÃÁÂÂþª’‚{„‹or¢«¶º½¼¸·¸¹¹¶±²¸ÅГ¿Ñ¹—´½ÂÄÀ»³²°µ¸´­°²±±«ž™››˜•™ž§§¡œ ÂçñóêéðôðçÆŽe]TWW[`fyˆ|f^UZl‘¨´¬¯º¿ÃÁ¾³¥¥«« §®²´´¶·´¹¼º¹¶®¥¢¨´½ÃËËËËÒÕÕÖÖÔƳ”yaVK6/0.,2=Zzšª©ž–ƒ€‡‹‘ œ ´¸µ°¸ÊË»ŸU8,' #&(,}Îíô÷òîëêîóùüýûýýýýýþýüýýýüüüüû÷ïàÏÐÖÚßàâàààÝÔ¼ž~kbn‚˜§³¸½¿ÀÁÃÄÇÈÄ¿»½¸©nZ^ZhxŽ””˜–’ƒ‡—­¶´–eYRQb„¥³«–~k[d^\Zr¨ÁÀ¸²¤¨½Ë½˜ufw¤ÆÔÖÊ»³«§œ”Š‡ƒ‚€“§·³§œ•’}womx‚o_LKSRORZaePE[tˆŽŽ”•zNUiz~f]f|††—šŠ…Ž”˜™œœž¢œœ™š—›‰pVB9=&  +  !>\c^rstil†‰kI# 5JWRKEIPWUal^TSW^iuvˆ“„ryˆ“Œ‰vŠŽŠ‰ulSB*  "/8OK;=FNCGIPW[`igdc_OFCA?J@7:@EYl„ƒzsyxrpW5   +       +            &&" " "G7, "" %-  !#" 'HnŒ–šŸ¡ž˜“|aA)$29:@?F950  + +   + + + + +      &  0EIC6"%'-)"#'% !$&* $! +()& !" "# #"#%(&#5E)$%# $,$!"" $%'$)2-/0/01)('%'&!  +  + 7Xlsty}€‚…~p_\^giiuŽŸ¬°¯§•Ž§¼¾ÀÁÃÅÄ¿¸¡‘š³Àþ½À¿·¥ŽzwŠ—‰hRRn¡®µº¼¸¶»»¶³¯«¸ÉÑÁ’¾Ë¹”œ¸¿ÈÉþ¹¶¹½À¹©˜Œ–¬ÄËÊÀµ¨œž™£§¦™š¼äððæåðôð㼃]\RXbcaiy…sghb\m“«³©ªµ¿Â¿¶¬§ª¦Ÿžž¤£ž¢¡£¨¨¨««§¡¥§³½ÆÒÔÐÑÓÔ×ÕÕÐÈ´•{aQG?52/,3;Sr–¨¦•„tmnqjv˜Ÿš£²¶µ¯¬±­ W7/"'$(*,:€Òîö÷óñìéðõúûýüüþýýüýýýýþüþýüûûõéØËÍØÛßßÜÞÞàßÔ¾™yjfny”¢ª²¹¾½ÀÁÀÁÁÁ¾¿»²¤m\^Vi”’•’‡Œ—­¸·šjOSPV‡©·²—zdVc_YZh£Âù³¢§ºÅ¼—sd|£ÆÔÖË° “‹‚{€zxz~“¤°°¦›•‡y{‚vst}ƒrZNPUXRZWdbQI]u€ˆ‘xUUht†jahu„‰‘•–Žˆ‰’•™œœ›žœ–™š—™œ‰n^H?8) +  5Xh\huofh„‹nE! #5BNULHGNOT\gfYRa]itx†’‰u}’š¡•“Žˆw€†‡|yldTA' +   0;I?@??;<56*   +   + + +   + + .DHD4#$&*&% "(!$#!+$!)"!"# ""  " %""#" #" !#! !%$"/@*!+*/-()$'""$ #"$,.+*/&+.,)#!!  +  + 1Xpwtyz|€qid^_^cjmm‰«®®£•‘©»½ÂÁÁÅ¿µ ’µÀÂÁ¿¾¾¾¸§‘z…’ŠdG;O€¥¯´¸º·¶¶¶·²°¬·ÉÖß•»Ê±Š™´¾ÆÈÇþº½ÂƶŸ’£¹ÏÔÕÑÌõ°ª¥ª®«œ¹âïïæåíòîá¼…dZMR[dghr‚uehbYi‘©¯ªª´¿ÂÂÁ¶¥¥¯©¢ £§¦¥¡ ¤¨¨ª¨ª©¨£ ©²¾ÇÔÖÔÒÓÖ×ÖÔÐŶ™{]LC;2+,$/>Zlvˆ‘‡€€€ƒ|y~‡ŠŒ›´¹¸±«±­¥”W5) ! $,0@yÐïõøôðëìñ÷úüüþüþýýþýüýýýüþþüüúóæÕÌÐÕÛÝàÞÞßßÞÔ½˜zlhi{˜£©®´½ÀÂÁ¾¿¿ÄÆÁº¯ž‹mVQUhs‰Œ‰““Œ‡’¤´²—fPMT]„¤µ´›ƒl^_ZZZiÂÀ·°£¤·Å½œwd~¥ÂÓÖƦŽƒvrortqt}’ ©ª¦—Œ†ƒz‚twu‚sZURQ[\`hleOI]uzƒŽŽzVMgŠgYb{ˆŒ””‡“š˜˜šœ™œ™œ™™™™™ƒlXI?6(  2Ze_gsn`k†˜—pC"  7HOWTMFMUV]kd[Z^it{{•u’˜›ŒŠ€xx|{tpk`aTC% + (;DE<=AE;;IFTV_bfdeb\F:6@@@@?:=EDKNNMJNXUSRQLG:44@2(>Ypj\]a^aeYNPSS^n„{xyyyrlY3  +   +    +         +   + +  +   "" "=;-"! ## "#!##Br“™ž ¡Ÿ›xaE7,#+5BC=>:/*!!<'(*&#&"    +  +   +   5DHE5,&''$#""% %%% ""#!"% ! &$#"!! # %"!# $# #&)'&$!""(*)'*-(&*)   +   3Tqx{‚ˆ…sng]\]^`ci†›©¯¬¦’‹§»¿ÀÁÂÅƾ²¡”Ÿµº¿¾¼À¿º³£Ž~}…“ˆ^C8H~£®µ·¹µ¶²µ¹¶±ª´ÌÙÉ¥–ºÌ¯Š—¯»ÄÇÇÅ¿»¼ÃÊƹ¤œ³ÊÝßÜÑÌÇÄÁĵ«¬©ž·Ûîíääìñì߸…m[MJU]afu…zieg]eŒ¤®ª­¶¾Âöª©®¥¤­¬³µ³²³¸·¶¸´µ·µ¯¤¨²¾ÇÕÕÓÒÑÔÕÙÕÑǵz^YB:41+$,DVcchq‚‚‡Šˆ‡ˆ‚„Œ’™²¶¶¯®»¼´ž]4'"%+.@{Ììôùöñíìð÷úüüýýýþüýýýýýüýüýüüùñçÙÐÎÕÛÞààÜÝÞÞÖ½›yghp‚–ž¡©­´»½·¶¹½¿À½º²šˆkXT^hzŒˆˆŒ‘Ž„ˆŸ°©dVRY`~¥¶³†o^^\XThžÁÀ¸´§§ºÅ½|fx§ÅÖÕÅ£‰€uphkrlw“š¢¦£–ˆ€ˆ}‚…|{s|~saMSX_^gllgKBZs‚“’“•b[dx„~fV`q‡‰‘•“–ŸŸ—––—•›š’Ž“••€gNC?4  + 2Xa^brohw‹˜˜sH 2ELTRRULKafgc[bkwƒ‚‘’Œu{‰‚ƒzppstrj^_b`P?$ + -:FMA?AB>;EGFO`hlmkd[K<:<>8@=;8;COILINOSTY\ORJ?;74**8XnkZ]\Z``d[OSW_hz€tuxqsmb[>% + + +   + +  +   +  + +  +        +       ! $?1'#"&# "+$Ew’žŸŸ¦£ž“dM=/*!!!%%2;@ABA:1# +)/3;=7605-%  +      +  + +        5CMJ70*'*% $"%!)(#  $"&  ""!!"!""&#!!  ##  +&*#)13.(')%   + +   + 4Zlq}…„‡Šnf[YW^cfp‡œ¦©ª¢•ˆ¢¶»½¼ÁÄþµ ”›°½¿½º¼»º±¡{†’‡^A6/.+,|ÍìôøööñóõúùûûûýýýýüýýýýüýûüüüøïçÖËÉÔÜÝàßßÞàÞ×¾›zgaqˆ“ŸŸ ¤«­°°­±´¶¹º¶­•fWWagxˆŽ‘“‘~€š¦£‹aOJ^d…¢±³ ‡maXY\[e¾Á¾³ §¼Å¾žjy¨ÅÖ×ƨuohccgpƒ‘Ÿ©¨‘†…„~ƒ}~x€‚{eTW`a_hjifND]s€‚‰“”‘f\av‚ƒgUcq†Š‘˜©­¯ª”•—™›™’”‹u[J<5'  + ,Wb]`nsix‹’ŒkD" ++HMRYLHQGr\fg]js„~ˆ’Š†~|{wwynfffaYNPb]SE)  #3AOGB>AA;>EBBETchnkeWJA=7=8?>C>BCHILKLLMNR[\[LF@91-+Ccnb\YRVZbeXKISZhwwwlrkkldM5  +   + + + +     +  +       +  +      ! =/# )!%! !-("!!!"&#"!#Eq‘›šŸ¥¢Ÿ‘~i[C@<;84/./.2=>@BA=9/' $$ -,9=@FG=:>=5( +  + +    %  0AHF8,,('"!! &! ! $ ! ' ## ! #""$! !! %%&$),+.)(#! +   +  1Vjqz€‡Œ’†mbZ\Z\bhr‡˜§ª§ž‘‡•©´¶¸½¿½½·£’•¯½¾½¼»¸¸³žŠ{z„•…\@BcŒ¢ª°¸¹µµ¹»´µ­«µÏÛÏ«–µÅ©•°»ÄÇÊÇÁ¼¿ÃÈIJ¤©¼ÓæêçÛʺ®®ºÄý¹¬£¶ÚëëÞßìñíܶa[XMRZWdu…ygc]Zg‰Ÿ¨¢«µ¼ÀÄ¿³§¬¬©©®µ»½À»´­²°´µ¸¼¸®¤§´¼ÈÔÖÓÔÖÕÒÔÖÐů˜~cTK@;3-)(9S[Z\^lt‡ŠŠ“›£¢ž ¯³°­­¯³­—\60!( ,4B|ÎîóøùöóõöøúûýüýþýþýýüüýüýýýüüøðåÓÇÌÓÚÝÞÞÞÜÞÞ׿¡~oiuŠšŸŸ¡¡ Ÿ¢¤ªª´¸µ¥‘~gY^_dxŠ’—„~‹’›¡†`OO_c„¦°²ž†h_VabYg–»¿»± ¤ºÆž€k„©Å××Ê©Žzqumjfkuƒ’¢«¥˜‰‰ˆ†€z|„yc_\aeedjihYMas|†Ž‘_U_s…ƒhWet~‰Œ’‘›®¶°£¢–’——–—‘‘“˜t[IB5+  (Rfb`spf‡‰„jA$ + 3FNZ`OFLSY]kf`hzƒ‰€ƒˆ„yoqpnjtmigaWUG=DL[\OD. + $.FNLAB?CBCGS_hnjf[D@<79:@BFFIEHJIJLNQX\Y^]LJ@5430?\ok^QMXW`\SPFOWgqsyulpofdR5 + +   +  + + +     +   + +         "%=4,+ !"! ! ! !$% "($%((#& +Kr’›Ÿ¡§¢”€g_RTSNJIE?A==?DJKNF<81,!.4FU\OF2  !(7EJC=6???ADJIKOKLRY[YUSVNIH;7,&6UnuhYT[`faXHDM[blpnniimd_U7 +   +  + +  + +   +    + +            ! !""@2)! " ##  + !!!%%#$!!" .Nu’Ÿ¡£¦ ž”~jXU]ZTWPNMIE@CJQVYTLH7)#%$-2,(*+$" ! "!!&%"! !$" &+ )+)*&$!"!!   !! #"*'!  + + 3Mdnsyƒ›˜nXRV[eos„—£¨¥›Œ~’ž¤¦¢§ª«¢’›ªµ»¹ººº¶®ž„y{‰“ƒ`HSzž§¬¬°·¶±´¹¹³­­¶ÉÕɤ‘´Â¥“±¿ÃÉÉÈÅÁ¼ÁÇ¿«“µÕæëéÞʳŸž¸×ÜϹ°ÀàíìÞÝíñìÚ®vaRQLWTT\jnpnkh^g†ª¥¨´½À¿º®¤£©§«§¤¥¡˜‘“ŒŠ“£§±±¦§·½ÊÕÖÑÓÔÓÔÔÕÐÁ±”{_VM@317616N`fbhq„Œ‹ƒŒ›Ÿœ Ÿ¬®±¬´ÅǾ£a7,""!"*2A~Ìíóøöôððò÷úûûûýýþüýýüþüýýûüûûøðéÝÒÒÕÚÞààâàÝÞØÄ£}eiwŠŽŒŒ‰€ƒˆˆŒ‹™©¯®¯…g_\Xgx„ŒŽ™–‹…ˆ”–€[PO\_zŸ¯²›h_YWSU^•¼¾¸®¤¥¹ÆÁ£‚{ˆ«Ì×ÚÑ«†tmktkikuŠ’›¤¡‘ˆ‰‹‰‡ˆ„~{}„xgc\^fhbils[FYku|‰”’~XL]p~eV_rŠ‹‹•¦¶¶§›˜™—‘’‘ŽŠucKD9!  + #@Yknpmc^emfT;  #Gdic^WZ^akwlehvrllsiibe`NOTZca^MD:A>DRY`WB9 6=HNK59?@=IE>GS^baid]PF94>=C:4?JGHMXSJVZc]YTRUKF<30'?Wlmh_]\adc[NLNZbhjghafa_`N6  +   +   +  +   + +    +   " !!#=/%! #! #'!"!"$*  $'3Tw˜ž  ž–{dX[\`XWUVNLHEALNPTQQA6$(!#-7>@HKMLE??7(!!!"!   2      $:LNI3'%.0*( !!#")(% # !#"!*+##'""%" " #&"(&#&1%      +/RdqswŒœŸ—}[NMWcpxŒ ©§¥œŠ€”¡£¦¥¢ž¢Ÿˆˆ‘¢°±µ¶¶·³¯Ÿ‰z~…†bPYƒ¡©­«°´·¹·¹¸³²­´ÊÒÆŠ¬¼¢‚“²¾ÁÈÈÈĽ¾ÃÈÁª“´ÕèëèÛȲŸ—¸Úß×ËýÅÞêéßÜìðíܲw^VTISUU`hjhljeah†¤®¨©µ¿À¿º¯¨§§¦«¦£ž—‰‡†‚€ˆŽ˜¡¨¬£ª¶ÂÈÒÓÐÓÑÓÑÑÒÎÀ±”x_SH@:631/;J`ruwyˆŒ‹‰Š˜Ÿœ§«°¬­¶´ª•U5.# ! #-7>~ÌíôöôòîïðõúüýüýýýýýýþþýüüüýüûùòíâÖÓÙÚÝßßàßÞÞ×À¡`euv{ttƒ€vv}}‡—¦¯µ¶£lYX^jyˆ‘Ž•‡‚‡’ž™€`SN]_z­°œ„qb[RNS^“¾Á¹³¢¤¹ÈÁ¥‹€³ÎÛÛΪpomqojpv†š¤§œ”ŒŽŠŠ‹‹†‡ˆ„{cd^ajjjqqs[FWprx‹’”€ZN\oƒ|jWdr}†Š’—¢³¯ ”–•‘“‘ŒŠ‘‘ŒŽ„zlQA2"  + ">Shgmng\`^bP5 +8Tilb^Z_gflumhqvsfbec`NFHFEQU`^]N><>CGSa^XL6 %1=DJH65;=;D?@ILHJE<8+)0#-7JQ[\e^Q=:<9BK]_YN4 +  #(3IPH;49=?HF@BU]^^efZRI@@A>@C?TKELRNUQRda\_Y\SFIG;4.0?[hd_aahb`YNPMJ\bhhdcda]\P1 +      + +     + +    +     #$  # ! !"##9*"$ ! & ! !!"# " "!#"! #"!##&(1Mr”šœžž¡˜d[W[XTWRTOHC@>ADJI915/%!*09?GICEHB?6$!# %  +    +  +  '% $CX:KKILOZ]^^b_aPHA;?GF@;=JLLS[\UPZdcb]ZQLNE;0-3BZieb_bdaa^JLQN]ijkfinhdjW<   + + +         +     ( !$!!%" 9)!  ! &"!!%'+)'''!"!$ $ %%!! "#%(6Ps–˜—Ÿ ž–~dWTTQLPKJID?73>@A?;42+#$$58?>@A=<=;0#!" "    + +  +       "9FF?6&*56,%"$%" # #&!$ "%#!$ #$!!! !"%&$"#" +  ##"    4Shhms€‚wlmaXUXact„•¦¬²·µ­·¿ÁÀÁ¼²«ž‹…Œ›¨©¨§£ •ŠyonŽ‡swŠž­­ª¯¯¯®²¸·¶­¬§¬¾Ê½•…¨¶v±»ÄÂÅÅÁ¿ÁÄÆÀ¯••²ÏåèàÔ½ª—•µÕÛÒɼ®°¶ÁÌÌÏ×ÝÛ̬cXOISXXbourikidj†ž¦¢©¶¾À¿¶¬¥§ª£¢™Ž‰‰…‚Š‰Š‹™¤§¢©µ¾ÈÐÏÍÌÑÒÔÕÕÑŲš€bWQE:6/.0=Jdmu|~z€~…‡……qheVDG]~—¡›tO3'  "#.7D~ÌëôöóïîîðõùüýþýýüüýüýýýýýýüüüúõñëÞÓÖÙÜÞââßÝÞÙßkcfw‹Šypf]RUl…š¬¼ÇÌÄ­‚cZZ\l†Ž’“•‘„‚‡‹‹ŠqYUTVd„¦´·©ŽpaZ[VYe“»Ä½¶¥¯ÆÓÔÈÄÄÁ¾½¶­‡tqklnaaemŽ˜Ÿ¦¢—‘‘’Œ‘Ž……~ylglrp|‡{n]GSlz{†‰‹Ž‹uWR_q|l\btƒˆ‘•’}`R`tŠ‘˜••‘•–“—“ˆ{iWH>$ + + + /MZied[\febN9"  2M\YOLT_bejljedf`ea\XH>?>;AW]a__TB?<;EP]c_W=   + #8Tb]PT[\W\]\^eddnfc]VVQFNYWPGCELRU[`a^^aib]WNKJHE7+4IV``XZZada_TLGIYjsuosppll]B# + + +  +  + +  +    $!"+231,-1,& "!! !#&#9*"! !! #!"#!!%"+/-**)+%! !##"!-" "  !++4WuŒ•šš¢ ¡’xcTTTRMNLKDF@;7BFCBE;/%$*.;:=A@ADD@;1' #!  + + +     +*9FA=0++75$ "$"#   (E#"$ ###%%!!!#" ' "!!%+*"##"  +%(,4;-#     :Teeou~…‹sp^WRS[f{šž¤«¯­·¾ÀÃÆÇÄÁ¼³¢¤¯³°­ª¤—‹}tkk{ŠyŸ«ª«¯±®®µµ¸µ®©¨¯¼Å¹‹ª·Ÿ|°ºÄÿÂÂÀÄÇþ®”˜¯ËäèàÑ»¥‘‘²ÒÚÓÇ´›™­À¿ÀÉ̱’vd[QX\^epsnmoqdh‚˜¤Ÿ«ºÀ¾´§¢¥§¢ ˜Ž‰ˆˆ‰†Œ””•˜¡¨¢ª³¼ÈÍÊËÌÑÑÓÕÑÎï›z_UL@9*,+0?Ubouwv~„…„‚uh[SGHVuš¡›ŽT2% "#%4>sÉìòöòïïïñôúüüüýýüüýüýýýýýüüüûúöñêáÕÕÛÞÝÞÜÞàß×Á¡‚jai„•˜’‰}rjf^Xfu£¸ÈÐɵŒfY\ao„”’–“ƒ€ˆ‹‡r]]Z]f…£µ¸©‘wd[Y^_b’¾ÇÁ¼·»ÌÓÑÇÀ¿½¹·²¨œ…}}rsmda_l€–ž¢—‘““Ž––’Œˆ„ziinwx€€€j\JWmw€ˆŠŠŠ‰}[PZnƒ{iYbwz‡•‡iC;Nj”Ÿ¢¡™™š›¢›‹}zcXL?&  +I[begbabg_V<% + ,@FLIFQ_]^bikieddif[SGAEBA>gcbc\SJEACH\nmllL' /?i„wyy…}€vy~{qs„eebcnmc\WPVZdaffffeglph_ZSOMK:.4BK]\Z\`dipeSGCANijttzspuqiJ& + +   +    + + +  +   + %(%$&,/-.($'(!" *58:9;<:35*# !" " !!! !##8*!##" %)! #*&)*,.,+'&$" #"   #" "!$)7Qr‹”˜™  Ÿ’oWOQWRMLHHIECA==@JF=41&!"39?>CCDIE=<4*#&&$" +      + + + + +:G?98"$,*!$""  !"$) #!!"!#$!!!#(    !!$!%&" + + "-/& + +613/ARcorzƒ€‚ˆ†‚ˆ}{l[UMQa‚ž¤˜P5*%%"*7h¿ëôøóññðô÷ùûûûýýýýýýüüýüüüüüûøóñëâÒÑÛÜÞÝÞÝÝÝØáziZe•Žˆƒtkklgbd…š©½ÉÁ­‡e^Y_w‰“““™’ƒˆ‹‘’{]TV^n†©¹¼´f[`[^f—¿ÅÈÆÇÇËÇÀº·»ÀÃÀ¸±¡Šwqieddi}‹›¢œ”’‘™™–‘Œmfnx|ƒ„ƒ…v_IRcvyƒŠ‡ŒŽbM\k~{l]bv‚†‡Ž“{Y90BYpŒœ¨¥££ ¤§§•„vmYJ;,   'GP_`fedhieWA$  4DKKTS]abenlmoklqpi[YTNOPTgkqyvpkggnr€Ž—‘‘s; +W‘¦©§©§ª¥§¤¢ Ÿ˜–•¢‰‹‡‹”—ˆ€z~||‚ƒƒ€{y~~‡€{sfc_VJ89?Whkf]gpzwiO@>CNdnxyysvsqhC'  +  +   +     (+)'#" !"0622:0-140,/!#%/2?:69B;611-"-*" #!"!""$7(!#!"! !%&(*11+.*("!   $%$*2Mnˆ’•˜Ÿ œrUIPZTQOMONEF?;=686./)(&)5:AADHEB@=:5("##,'($ +  '   #?H>6*!$)%!!$%    ! #$" !"# !$"# ! /#!3 " + + +  +  +  +7X\fnry††t_XOPfj‚Ÿ¥®¬©§§¤žœ››¥§¬´º´¦§³¼¾¿½¹³­¢vdhr†{jœ¬­®¯¶³¯¯µµ²°­©§·À´‘‹­¹¡…“­¼ÂÄÄÃÁÁÆÈÅ¿­—œ­ËáãÝζ£˜œ³ÐØÑĪ‰mzœ¸²§––£µ¹´¥œƒzyuˆ‡tilgbg–¦£©´¹¿Àºªª®«¢¤£œ™’‘–©°²®«¨¥ª¦Ÿ¦µ¾ÃÊÆÇÈÎÒÐÐÒÎï™{aZQF?7123?Qalt~…ˆ‹€‡‰‚‡|q`ZUSj…˜¤š…S1*%&!0dÂëóôóòðòóöøùûûýýýýýüýüýýýýüüúøóñêÞÒÓÚÜÞÞÞÞÝÞÖÀwg`fx’ŽŠ„zzzumg~›²¸®š{g\Zav‹”š‘–•…ƒ‹”Ÿš„]SY`jŠ«¼Å¾¥…ifbfeg˜¾ÊËÊÅÁ½¼¹¹¿ÄÄÈû² Œ„€zoljhlpƒ‹š¢ž—’•“‘™™šœ——‰ulcmz…ŒƒeOWdv…‡‹ŽŽ„dT[l}|wigy‚ŠŠ“”zZ9',@=>9,''"$( #!   +  +  + + + +     'W_djl{Œˆƒn]USU`h„ ©²²°®®«¢ š˜™˜˜›Ÿ¨¨¢£°½Á¿Á¿½·¯™fdotpl‚š«®¬²µ¶±®¶²±¬¨¥¨¶¾°‰ªº °»ÁÁÁÁÀÂÆÇÿ®˜œ±ËßáØDZ¢—™²ÒØÎÀ¥‡ktšµ°šƒ~®¾½µ®§›Œ“‘~olggg›§£¦²ºÁÀ¸§¥®¯¤ž¢¢¡›”–˜¢¤¥¨¨§¯­ ¤¶¿ÅÅÇÅÉÌÐÏÒÑÎó•zbWMN?3216CV_jt{‚Œ‹…‚‡…‚ƒ}qg^]Xb‘›˜‹€V2(  !,'0iÄêòõôñîñòöùúýüýüþüüýüüüüûüýúúøöñêÞÕØÚßÞÞÜÝßÝнŸ{fm{}‹’Š‰‹’Œ„z{™¤¬žŠscd``|‘•›–•’Š†˜¦¨’j_[^n¯ÇÌÁ¤ˆkdchgq›ÁÍÊÉÃÂÀ¼ÁÄÈÈÉÆÁÀ·¨‘‹…„upsry†“—ŸŸž™šž ¢¡¨ª¥ ”†~~‡“˜™˜Špdiz†Œ”•–•—winzŠŒ‹„{‘“—–†bN;6Jh§©©®±³¶»Á·ŽpaRF@.   + +$1FOdjiilsnjY= +#Mgsuokotwt|y€‚‡‹Ž‘”–šš˜ ¥±µ»»¾ÃÃÆÄÅÇÉËÍÍÆ°k( (J“ÄÓÖÖÖÕ××ÙÕÓÐÍÉÉÊÆÆÇÈÅÇÊÊÌÍÉÆÃÄÄÈÆÃÀÁÀ¹·¹º¹·²¯©¦›‹{{†‘‡‹–€lVPafhhqvspljpe_F'         +     *)&*'!%,,-//73)" '/17441111,,)!)+(0)&%*+.0155801388851/&"' ##"!$"6*! !#"%# !"&*-.*+0(/-#!"#)"!$"#%2X{šžŸ¤ ŽqYOX[UUUSSPG?1/* $,.,)&"$!"-82323664/#! ''"      &' +     /AK;2-%$-)$$$!"$  !$#"'$$  #"" $$!"#(# ! +  + + + + ?Ucciv‚‰k^ZY[]e‡¥­´²µ¶²«ª¨£¦¢žœ™šœ™–Ÿ­³´¶¶¾À»ªrgo€wmxŸ§²°±³³±°³¶³¨¢¤§²ºªŠ…ªº }Š¯»ÀÀ¿¿ÁÁÄÆż©šŸ±ÇÛÞÕ𣙶Ò×;¨†jr—³±–vl†¬»¿¼¹·¬Ÿž ž˜ŽxnjinŠŸ§¡©´¼¿¾¸¬©®°§£žž¤™‹’œŸ¢£©¨¡¦¶ÀÄÅÂÆÉÎÎÓÓÓÏŲ™€e[TPH?=>=IXdo~‡‡Ž‹ŒŠ‡ŠŠ‚xm`^^bcf~Š‡€T8(&(-gÀêñòñððïòô÷úüüüüüüûüüüüüüûüüú÷óðëàØÙÛâááàãáÜÒÀ§€~‡‘™™——š §¨¬«Ÿ•‰’£«ª}tqsy…“ ŸŸŸ•’›¤®®ž‚rkr†šºÎÍÁ«“†~w€²ÇÎÍÍÍÏÎÎÌÏÓÑÌËÊÉƸ§¢œ™™“˜œž¤§­³²¯®¯°µµ·¸»»º¸·°©¥«««±¶·´«¥ž¡£¥¤§§¦¥¢ “‹“–œ™˜•–—•’‹‡‚pc[[duƒ”›¢©¬¸»°‘ueTB>1 + + + + + + *=FKQKHNLKIB5  !7LIIIIKJMO[TVVV_]_gkiquy§¸“ª­¯¼ÃÇÉËÉÌÏÒÏÐʵo1  .F˜É×ÜÝÝÝßÝÞÞÜÛ×ÖÕÖÔÔÔÔÖÖÚÛÛÛÚÚ×Ö×Ø×ÕÔÐÎÎÊÌËËÈÇÁÀ¼³³¨¢Ÿ§©¤¥¥¢¦¢•ƒb[diqu‰ˆ†…‡tkQ& +     + + +  + !)($#&!),754'$!! *0+,(!#(+'&$$)2&&#%' '()'-/-4(+(')*,+(*-3*" %" " $!"! !#$5%#"!!!%&#! &  $&&*-/-+,.'$!$ # "!  !$-"& ")1Sy™ž¢£Ÿ™ŽqQNU]XRUXSLF=2(%%%$&)  !!"".312-1..'$*% "   +  G    +    + *@EB5/!%**&!  !  ## ## #!" !" "!#$##  +  + + +=U_clu‡ŽŒƒrga`cjqŽ¢°³²µ¸µ°´²°±²®«¨¦¦£¢žž¢ªª¨§­¶´®Ÿ‹~’‘}‚’£¬±´µµµ³±¶¶µ®¨¦©²¼©‹¬º£„“¯¿ÀÄÁ¿ÀÁÄÅƽ¯Ÿ¥µÅØÛÓÅ·«œž·ÒÚÐÁ¬y‚ ·°œƒzŽ­¼¿¿¾¿¸®§¤§¨§œ‹ˆ‚}ƒ™¬®­´½¿ÂÅ»´¯¶¸®«§§§¨Ÿ”“˜œ¡ª¬­«¨®¾ÄÅÈÅÈÌÑÒÕÖÓÒʺ¨–‡|pigld_dht€‹•šœ˜Ÿ ›ž›‘†|zx~ƒƒ}†‘‘–”kH7%"#"-`ºæïñïïïîðó÷úúúüýýüýýüüüüüýüúú÷óñìçáãåçæèèçæäÞÑĺ²±±¸ÀÁ½¹¾ÄÃÇÍÊÁ»¹¸ÀÃÂÀ¸¬§¨¦¯±³¹º½»»º´»ÂÅĺ°ª¨«°»ÌØ×Íź²±®²¹ÂÒÔÖÛ×ÙÛÜÝÛàÞÛÛÛÛÚ×ÔÍÎËËÉÉÊÊËÏÑÑÑÖÓÓÕÕÕ×Ö×ÙÙØØÙÕÖÓÎÌËÈÇÅþµ¯ª¨¡œ–‘ˆ…zvojhgllokibcggXXUNKFHHIGX^ZP_bp‰™˜„qfUE<- + +   $)))*.,/-51" &/,-6502/7A;@85>9=D@;?AJIQ`js|Œ™¢«³µ¶ºº¼º´ž]-  9Š½ÌÔÙÜÛÞÜßÞÜØÕÔÖ×ÕÓÔ×ØÛÚÝÝÞÝÞÞÜÛÜÜÛÜÛÚÕÕÕÓÑÐÍËÄÃÁ½µ®­°±°¯³³´«¤•p[[hzŸ¤¡¢ŸŸžš‹f/       +      . '(.1/&!"" ""#"(-%)*".60+& # ,*" &  !(#)0*,$ #!$" %!!! !  %4& !    !('&-6.,)+(.'& "!!'$"!$##!%$ !*,6St’›Ÿ£¤¡™‰jMGPZZSTTTKE9-$%%)'(!!!!..6<=>;73,$#"'$ %" +     +  +61AEA2)&!),*$6"#!$$#!!!   ""$""%"  + "'# "    :U_elz‡Š‹Š„tpieqp€“¡¬¬¬­¯¯°¶¸µ¸¹···º¹····¸º¹¶°°´·´®©¥¨²±¦¥¬µ¹¼¿¾À½ÀÁ¿¿º¶º½Â¹©¨ºÃ¶¥ª»ÄÊËÍËÊÍÊËÏÉ¿µºÄÐÚÝÙÏÇÀ¹¹ÂÔÜÕË¿¬¢§·Åö©£®¾ÇÍÌÍÊȾ»¹»¿¹²¯¬¥¬¶¿ÄÅÉËÎÑÒÎÈÄÈÌÈÄÅž·±¯¯´¹¸ºÅÉÇÆÅÈÏÔÔ×ÔÔ×ÞÜÝÞÝÜ×ÏÉÁ»¸¶°­¯­­­±¸¹»½ÀÄÄÂÃÃÄÅÁ½µ¸½¾¿½»¼¾À½ yN.!*Q°àíðîííîïòôøøùûùûúûûúûúùùúûøù÷óóðïîîíïððñïïíëéççääääãäãáãâãäããâààÝÞàßßÝÜÛØÙÝÜÞßÞÝÝÞÝÝÞáâáßÞÜÛÜÜßâääáàÞÝÝàââãåæåçééêìììêêêëéééëéççæççæçæåèæéççèêèçæèçèæåäæãßÞØÒȽ¸±¦›Œ€vpj^XSOKF?96645-002/4-*53//)"$&'$ !#%%)4Gn‚vtiYU?+ +  + +!(*)5.)" + +#('&))-%-2-.4,/1635415213@ACDV^gksw~|wfA# + 2l¦¹ÁÆÉÍÏÔÒÔÍÉÇÇÅÆÉÉÇÈÉÍÎÐÐÒÔÔÓÐÏÕÔÓÐÐÎÎÏÐÎÍËÊƽ¼º´°®¯°°³¶´´°£ŸYQ]r–¥«¯®«®ª§ž=    +     +  + !&-96-!$!" %$ ()%$#)09:-$!+1*/."!1+%" !"  !!"! ###3'"#  !$%((30,())+,# #"!$"#"&'&$'"" %" #),6O{™¡ ¡œ™„cJIM[XXYYPHB6+"!,$*#(# $06G=5)"%*/0#"$"   "#%!#!  !!#!#&% !"4!#%!    +  >Vb`i||yhcWSSKLX[et…‡‰‹œš›£¥¢§­°²··º¼¼ÁÁÄÃÂÆÇÅÅÇÇÊËÊÈÆÉËÏÊÌÎÑÑÑÔÕÕÓÓÒÒÑÒ×ÐÍÍÒÔÑÎÏÔ××ÙÙÚÜÜÚÜÜÛÖÕÖÚÜáäâßÜØÔ×ÙàäßÛØÓÒÓØÛÛÖÐÑÔØÝÞÞÞÝÜØÛ×ÚÚÙÙØÔÖÓÔÙÚÞÞÝÞàããâßàÞßáàààÝÙÕÕÔÕØÙÝÜÞßààßâääçååæèèççéèèåãàßÝàßÚÚÜÛÝÝÝßßÞßßáâàßàáâââÞßßâàßßßßßÝÞÙ˧d4!"! #K¨Üéìîïðîññòõöø÷ùùøøøùøøùùùøøøùõö÷õõõ÷õõöõöõõõóôóðñòòññðîîîîðîîîííîíëëììéëêêëìêíìëééêêëëíììììêëëîììîííììëìíììîíïñððñòòóññññðïððïîîïîîïíëíììììííìíìëêêèèáàÞÕÍÀ·¢”…znZPD>A:92..(')('$!   -Nu€yqg]H-  + +  ,).4;>@=."  "&##'(%$3.*,0.-.6//-+-,116465>;L=@>ACEGMA6-  + >fŒ’™žª¬ªª©¡£¢££¤¦£§¦©­¯®°§§©ª°±°°³³³´µ´´´²±«¨¨£Ÿ¢£¢¦¨¦¥­«§¤–vPA?R{ ¨¬­¯®®¨§‡D$   +          +  '1//+ "" $""'!"((6<3*0*)/++*!!"+3%   #"'&2'$"#!!!,%'++0/,,+11*+""$"&!$')%&#"!#$%  $%%!&0Pv’š Ÿš•…eLIPUY\ZULI>3(#$ )- $!!+59?=@B?<>>1$$ ! !     +  -AF@1$&&-/&!!" # "#" &&""" ! $&%#$!""!" %#"     + @Wadgioh>&&($&$)-17>@=?DGGJQRX]cckqtu|ƒ‰‹™œ ¢¦«­²¸»¿ÄÄÅÁÁ¿»¹¹¾ÇÌÏÓÒÓÓÕÒÒ×ØÙØØØÚÚÚÚÛÛÛÝÝÝÞßãáßÞßáÞààãåèçåãâãäâäæåããåãããåæåäååææççååæååääæååååæææçèèççéêèéèèåéééêèèåáßãäæçæèèééééêêëëìëìììíííììììëêëêêééêèééëêêêêêêëëìëêêëëêëêêêêêéééçååäÛ¾z7$"#%I¦Ûèìîððññòóõöôõø÷øø÷÷øùùùùøøø÷øùøö÷ùùøö÷÷ö÷ú÷øøõöööõôóóóòòñòñððïîïðïíîîííïïîïîïíîîîîîîîïïðïîïðïïððñññððîîðòððïðòóóôóòôóóóññññððñïïðîíëêêéèçæäáßÜÜØÐËĺ¹°£•ycVLH>30'''$#$"! ;]pysg^O4 +   +    /C>BBFDKC2"  #%)$&)%'*,1,*0,00+&'&'),0.//+1/(3365//036*! $.;BCKS_ijxogiighljie_gqroha_[\bdefkmkmrysx~trmdgfhdiks|~‚„ŠŠw]<318X‚‘•š ¡ž™|A# + +  +       #*/351-'!# $%$%(! #*,3777(%#'+/+&%')/&!!! !"#$/$  %#'2629;6:81+$"$ "!%   $!$!%+'%"#'(.&(#$!!!$!/Nt‘™Ÿ¡Ÿ˜„cLHVW\[]YNIA2-#&*'"',2:<9<><^mkeYN7 +  %0?W_[UQW``SD5 + *""# -$++) *./4/%,+#'+6%('***-13/+&')*'! +!!&".8@G[PQUQNGDHH>PKJMMA2/-,07:8896@FKKCD?=<:385467?DHLNQUMM>3+*:9DKHU`jlomY6      + + +         $*3;<70" '(($'&!"%7>1(,% %$ "%'0& %"!!"" $! &#!!5$"!!'+72:;<>92/%!!"###" $%#")4)&!" &&)" "$#(4P{”™ž ¢£œ„bNKTbWYVWPK@6'"&%!  '-5>>;=?>:;2&!!$'!  +         />A?:(*..(-",& "#!   #"#$! !* #! "   +  18Uf^lniN)  + $#$" &)/,,'(&*3,+-,1847DSU[UWYKDHQ\a\\]^acecfqyxvwttvtv}„ˆƒ„ˆŽ‹‘•–™¤£  ¤¦¦¨«§¥¥©¯°²²²´³µ¸»º»½¾¿À¿¾ÂÁÀ¾ÃÆÇÃÄÇÇÍÌÍËÉËÊËÈÅÂÁ¿¿ÄÂÿ¹¸ÂÉÊÉÌÎÏÑÐÒÒÒ×ØÙÛÚÚÜÝÝÝÝÝÚÛÛÛÜÛÞÜÙÜßàÜÞÝÝÝÚÜÜÚÛÜÝÛÚÚÚÛÛÛÜÙ×ÕÒÒÑÏÌÌÊÆ»œj?%%!& 6r²ÆÍÐÓÕÖÙØÚÚÛÛÝßààßßßáâââßÞÞÞàááãààãàâáâáâáâáààâàâäãßÛØØ×ÙØÕÖÖÖØØÖÕÐÒÒÓÖÖÖØÔÔÔÓÕÖÑÑÒÓÕÕØÕÒÏÒÓÙÛÚØÚÚÚÛÛÜÚÙØØØ××ÕÓÓÑÕ×Ø××ÖÓÏÍËÀº´®ª¤œ™‹€xtmkil^__TOJ?=>9:30,*)&     #2^ggd^K2 +  $/ATecefj`jnllmX& "' $-2&&,2..%)%'(/+$')&-+85++-% #),#!  + " )4AC?KNOONJEH@BTAHH>>1,%$&235016AEB@>9=F./,.-%')9<=96)#,0(,1337AL94& + (( + + + +      +  !.-84+)!!.2++&&%##(1A3!"$ %&$#  "!###0%!%$ #"'),.4=>:<2,$!"!"! $*& '(''! "# (2Ly”› ¡¡£œ‡fSRXYUUSQOJA6&'' # !*1;>>869=71$!#1     +  * /=@@6$&/))(##$!""# !!& !%""'! !    +   8Va]eohM,  + "#%($! !!$#!($!().2:>@F:7234=926689;758CFGD>DFC>DFHMHHIKPPOSV^aagcZ]da\dhgdafllsttuuvx|{|€|„~~ƒ€„†ŒŽŽ’‘—••–––•—Ž‡„„€‡†„|zw‰–—˜››œŸŸ¡¢¦§¬°¯¯³±±³·¶¯°¬±µ±±²°±¶¸¸¶´²µµ¯­¬®³´¯­­¬¯®®®«§¢ž™™˜—‘ŠƒhG0!#%@s”˜›ž ¨¬¦¨¦««®²´³²³·µ¸µ´³°¯­­­®²²¬²¯®±²³°­¯´°¯²´²¯¯°«¡ Ÿššš›Ÿ£ ˜–—˜˜šž  žž™–•šŸ£¡›——ž¥©¦© ¢§©©§©¢Ÿ£¡Ÿ¡ž––—›ž™˜•’†~}qmpkcb\TPKGEB:>A>58%'$$(%&(./20-$  +      + +   "'!)'(21.3)()04-+(!!!"! .#!!!2'-&*-287??3-( #'!"%&%#$ "( !!(2Rz•ž Ÿ ™‹iWQTVWTUUMGB7+'$   ",9;?957510'!!! ("  + +    *-?@?/ !!()!!!!%$  !"$"!"#'!  +     +8O__jmeQ- +     ""  ()*461*%',)'$#&))&#!+.+(-(.32&-+-&(,),144515<<==611468;=987;@BFFF@DGHHFJFIIHFEDHKMNSTWYUSUVRORUOSRPOOKINLJIKJPWWX]cihb^dgdbiijrpnpv}uokmpspnlmjswszxsvnminsuuqovrqvwqkhcf^^^]YRSQB;*#!,Icemks|zu}{{{~|€ƒ‹ˆ†€„†„}{vuwvwyztuwttvwrsoszwtyvvnshbe`]^]c^SYfg]^[X[[UZ_[[\X\VRWU[\^_e]b_cig`h_\_hiaddaecZdVbeX[\`_S[[YVOTMFDCKIHC85385.3.//01/*,($&($#&$!!!&     0e|zveF' 5EZdrvwttqqu{xyytjU-  7! #''1(()(*(+*''!$&(*..),.)'&).+&%%%.  + +!%,.=@;CHHDEDIM@77HNG?6+ *),32/)-<=@<>65/($"%.,*,31:>977=5/-%&$%$ %+./)'#"( +    +  + + +        1 #&,0--0*# -0& # #"&)"!"!# """-! ! & 00#+/2358?<4+#!%"&!#!$)%! " ,)4Sz”ŸžŸŸ—‹o\NMWWVYUUJC7-' ! )2<:<9:><64'*8$"-   +        .@F<2$##+%# "$( "% $$"()%%!"#  +   5Q_chkeN+   ''#!  !! " #' !$#!!"!"#*+&&(+13*+%"$*--(&*)01/0/)/1.1231353-+,030168857564/0-25372211220.6015::7;>>=>8=??;<>AGA?FEFMGBFCICB@BCEGAHNNJBGKJNHKDAJEEINHBDJE@EDB?7<4,+$!"&:NTRTW`_]`cdee^aflgc`_dfcZ\ZVX\^YNRWUPSRWOSOUYUZTNLF?>?DB=:?>8?G?DA@?@JFIC?:DF<AG8>FB@;<Tgkhgmsmjrnpwy}ƒ}h< + # ))3-)+/,)&/($(*!()+.-++(&&/+/(%#(*/ +  "+8:=@;1136"!$)052.2554<:612)'$)$$$%)+'!)     +       "&*(/62- &'%"""$%(!"#!"# *" " $ ),-/03;?=4*%"   !  !   "  !#"$"!$#+(9Q|—žŸŸ¡ —‹vWKNWVXVUNJD71!# !" &/2A:;=:;>;;*!$!     +   " +  2EHD.("&&"#)   +U*," !$$&%#$%!$$!"  + 4P_bgojK& + +   +   ""!"$!"( $'&)## $"!"'#''#%')+(#&(($( ((*#((&%0%!&!!"% %)*&(-&(("&&("+-'*9/-,0.-050-+.//49/3=9124720*0842128;997==<6458476:8888:>1478211)(#'8>FAIINQT[XWXVW]]_^WTUWWWRTHGMULFIGCCBA@B@GA=GEEA:9:642661./458>=:784402-366-2.54+423.2254:@434=:336:42755946<64819=;8:535446452.1/0-*((/+(*,-%*+%"$'#("%&!&) !     ?n™®­©¤—o2  +*;Hamqu{Š‡Œ‘’—‘”x<  ##,.-&((''"$&),*.1*--((*-0-'%##$    +"!-/4C>CKGEGGCCF@EIG>5+) -8551+225:71.701.*,.64015387>9:120+&(&" %&#& & +   +  + #  +  +   (,1.-"&"& &0%! %"%))-#"$.#!!!'+'%.26>9/+$!" & " #"#( !&$%$%)7Yz“œ  Ÿœ˜‰p\MIQUVTZRSH9+ "% )16=?=?;;<8* ##!""  +      .DD@5%#!&"#$&c*.(  !'$'! $"  $!%"  ;XhggneC! +   !!#  %##&% "'#  #!!! (.##%%!&"#""%# ! "!&!$)" 0( (!&%%)'(((($-.)%#+#)).0/0-,+.((+&$()/.0412263365+561100421256-+,1./,,& &.8@BGFAHNMPWMOOTYWXIJOMHINNHICCCDA??<9?C>;;>9;AC=4.:;1305-0/-14336631,//+,-22*025010'+344/034256652661/-;3321549?6<>=9746652573--*.(('%))')!$&&%&%$%$"+&$&%',(!"      + + +-eŒ§´¯¯¤“_% + *BYm}‡’™—š”•™›“‘ˆ„f4 +  +!$""&-#"$&')")'!1*(/./*(,''&&).*((#!  + + !&059>DFHHIJA@HFEC?:8+" "0613*#,4/41+-0++*,1680.47<<>6)"$"#  +  + +  +    /@J?1%!"""!#  $#!'$"  +%%%$!" !" +  9WnjmnZ=! +   .""!"""!!# & !""#"  #!&% !)$&&'% %&"%%',($%+%)%'*.,%%+,! %*& ),,.0+-130/3/..10.,(12/-83/.61.1'*%# ",8;=AGBDGAGMMIJOOVNNKIGAELJBIC>AA>>967;7:B?,&14/1.2.-)'2-1/450--+(*,)&0*+/50-*,,157141032.949;101.6235017:=58661861953393**,''+-+//,)$)'&# %&(#"%,&#+%()$$"#  + + +  +/bˆŸ¦¥”v= + "@Rgw‡‰€„†‰„{x‚wvpd`XO. +#$!%(#,'*)'(&%()#('+).,%(+*%&'%#*'"$# +  "'0645@GFGCDIFGCCBD>23%$"*-*.-* '+21,'&%"%%$0318,,2<A>=:9<8?E=:7<:855.&023.)0+++-4/,(,10,6/,,---1.+,,,,(+/(/.32486254784/2136775311160862443152,3449/.1,/+(.)*-*'*%)$!##&$$+'$)&$$%2!  +  +!Ij…ˆˆ|mQ'(9K\cjhhfgfcfeab][UPPJ>(  +!% $!*).&&%&(#)(*!#+')'/*&'2-+&-)%(.!"2  + +  )97>>@KGDC@FIFCC?;1 $&%!    + +    -B;211&'#&-134,()'%'"" (%)*&&'--'/02:=;>=1+%,% !!*/10*+&' +   +  +    !$"!%4+ %"$ !04(&!!!$#*&)/.173-%&!#&(*/( "&$%&"#+&$!$&($$&&%'/;V~•›Ÿ£¤¢œ‹lYMNSTQNKKJB4+#!"!*8>@A@B3%&" !     +   !   ,8?0%$'$$# !# $$##'!!    +    ?_nrtjW6   +  + +  )V !! (!'#*!!% %#! " &$"#!#)&))&&$$%"!"$!#$$"-(*+,)'',,6).3**')'-,-.))&$'' !$/48>?=???GBBIJ<<9;<@=:>A?861155658:9714=51/'%##)&()-.2-,'&01*,-3./-.-/,--1/.13/2014/**(6500310.173005401.10255545+/520020+,0,,$.+'/.($'.,' % %&((+!$$!"$)#$'!    + -J`li]M. *6KPHIG<>ACJEMKLGC<::2/-)&&%&,31,)'#%( '*$(&.'$$(,*/4>BD?@7).+.&#!'/../-(" +  +    + +        "" !!!%+! !$ * "#!$&+-,..36771+%,+''$# # " "$* $!#$"##$*$/,9Y|–œ ¢££œ‰oVOOPPWTSRLD>/$%#(<;@CA>?>?6$#*!+ #   +  + +  +4  /@?1"/ #"#;  %"   #!!#(&#!     9^pytkQ- + +     !"" "" !$"# %$(&# #%#!$%'!!'+%,,)"#%% "#$#+$)+'(*.22/0.//*.*&0--.**+,+'*%# !#//16<<=@?@F@@?ALIGA>:;?<=?><9326413559;C625:0+.'''('.')'-0)/,+13,--.-$(')-,/11.,10731,2/./+4/-)(0.+260.322423236425300,35-1/-0141,?/1-;24,1/12))$%/.-*$$!(%$!#% &$"   + +  +  *E^itmY2 + "7>ADC@=:E=>EHJFA;7.+3+  + "'**+*-,''010//,/61)%,.85:502,! (+2160*&&#    +  ,:B>6:<?>B=66593112776364325,*)-01-'-'&)-6/+/,/0--+++&).27/221,*.0563613892,+,,80131,.01/2621343:3.*1621430(4/21-907;46522401,-*+3521+*)$!*-,(+%$%""!   +  +!E]hro`: %8=LE@??=B<;AEDFH;.++)' "-/,3.'(01.-031,*31,/7>@7;9,/*,(*--(1,&&%' !*6:A@<=>=MSPFHD=<:2+*('$&-#&)/5--(##!+.)054339565>=>D@>:/.,*% ''('**,)*!  +    +      ++  #""#"$#!(!  ! "$#/638:9==<3568,' &&###  !!"#!'$) &()05X—šž¡¡›ˆgYKIQMQNMRZLGD?=>>@CEBEG>>>><>DE?>A?<>;884176:582223+++%441--+%*!06352325-((//&-/2167757.2//163154233/&(-/43/+,22/(042245<72-010,-A000/60.2768592,-111*'*./303411+)-96-,+##') " #    + + + (C^nli`? + 18>?:==;;=<>AIDAA?15*,#  + #*,(+%&,5../-53-'//+-98.//94++)++'&'),&.)"  ++2@?AC=B?>IKKC@?I:3--%'%#'")#*/+)*)(%/.44;9<77;<9;>@EB<:431'*"%(')1-.)($  +       ! !! $" #!""#+' % (#   "",11587<<<:,(-%! !"%+(%')#! !$'#"))'/7W}•žž¡¡›…kUHINNONJJPNA3$ !).141825/,'"-"!      > ,>;-&(!!/&#"$$#&#" %'#$!"! $ !# "" +"&'+$$&'#%  +  %IixscB#  + .   ! % !!  #!$#$!'/&&&%$" ##**(+,1*$%.3%&.(-00650/<84+/467.114,).,/+&01'(&1. ! +711?>?@CADMFGCA@AA@@>@=<=:6788;:>8.263-)14731-)'-*1842551/05-15178588<4454636-1/+4,-41*,/2/44/',20,*/,1345432,*020370210-434778612,-020-)(//-3.13*()-9;/06*%"#'!"*$$"    + + %GcihlfE$ + +#-;:9::;>;=ECIB=>@CFHCCCA>H@4),*&)(!%&'%--1.*,./,/12>;=@>BLID>=?BCFCA=62+$&%')%*",(%     +       !%# " !""#"$!#!!$" !$**1./229670(",#" !!$!'&$$'$ !%!'#!%%&,./9V’ ŸŸ š…fQIIPLONNQLH9/#% #37<9:;7021! ! + +  +    %@>A7=@??@@GBEEEAEAA57765/2<9025**2/475/3.00.40/28?:87581443-346.*,..-0301-.-/411,0///,.563/2120'/,/T&5.2>641-3362))/2020//,,/-***3+)((07***/+() #"$'%" #"!!  +  &IdhjqeG" + -87947:87:BB@@?<7530+*  + "+-(&$,6*.1*-3/./*6$-*)+$('+*,#!# '.)9*)# + + !.35?BIGGGDGRNGFKPF7:2;AAEDHLOTLB;ELJMFE@;53(&'&''%&$'. +   +    +  $"" "! $ $!#*$%# >,6   !'')*,**330/*$ "!!"!%$  $"!!"!%#%($*,-/>[€”œ ¡¢ ™ƒdTHGLJOOQMOA7(%"!'"!$4>>;?:8997&!"    + +     "2945:3/&%,+$),*+#$& '' "*.-1620( ##!"#!'!!$'!!'% '!"#)%'*#! %+ )&&%%8"$ #    + )Xv‰‡|iC     !%"!# '"$"!  !!#"!!#$$%!$ %" #%!)(!!""!'&#('$%.0)*)(-.+2-/113-041.'-,-&+/,30,*$&%'#%$ !)4;9?>?9=78>=<>@>FAB>:6:;>C>>@C=B>7;;6;=>E:40'04;<20//+.25.-/560521/106:885434123.,130201,00./0/*-34300++40-3.33-,//-+,9K9+5444.--54/-../14/,+-,*++$#$-$.&+/5*((,,"!%&$&*$ #"#    (Iceiq`B(  + !)176.23978@GFC>72860/+ + $#!%!#*5,0&+-)*-0)*($,,.1/,-++%$+05110/'" -HRNQ[_`]X]^a`PTY[VMOOB:A@7566:?67>LE?CKSMNVNNQW[]\`d_[PCIOKHLOKGA<4010*0.-',%!     +       ##!$ !$$!! &##"&#&%%* !*2+%  "'%*)*%()533-'$$!#"$%! !"$" #%&"#)!(8?[}”šŸ¢£ž—„iQEEJMSRVQLB7%"'$"!06>A===>?:3)$""  + +      038=H@84774)%()"!#!!"#! %,+1671)#!('!"#$&0$')%$(%!"%$'''&%""  !$##)&$2,$     + + 'Vu„†xbB"   +   % !'%")#!$"!! "#'"""  #&$$##%%$! '&$%0-#('%*)0*'+())-3/**(+4-01-)13+,*-*)#$& ./+4;>;<606:59<:@A;>?9369B?9=?A>:678639:4?=.,+2513:22/.1123,/420,0725//12543,1/404/-/*.--.,039-4/)26+.*(*05/.1/2).0.2+-"qr313.-.1)/-1/.2/+1-0/*$83 &""%'(+*+'-'*,''(% $&!""!!  +  + + .Gfoqm]=  *-23./47:>?=>@>7<44+/0#   $+( !')')-+(.1*2050*/9?;:768>="&"$&* $,4><3% !!     +       +   ).8AA:6AH>2" !(/-)%$ %620+%#"&&!(!"&)%&# """"&! #&($""$'$ "%#'&&"-!## ! +    (Xp|‚z_9! +  !  "!"    !%""!"%!$ "#''&%$)(%"'**'%'((#*&'+-*)+())-*+('-)/1*%)*,)*)+)*! !!$"/*+.0651324747@:8:=<;4:77?I64=@998<77078870/01131510.--3*-20111+.04.233312.1201503320..24/*2/;406-00..36661014.,/-1.4/./F10532141//.3663401.110-17=(-'*/2.+/,,/3-**&*&3''##"$ "# +A`}ƒ{i? + + 1546239<<==C@;37>>5;9>8909;>93/3::66:10/202.2670454527055393769=0358798<526943;??@?;997>BHIK@=ADF>BA@<:;=>@BA>C?C:?P`CIBCNEBJMJDJGEMCKKLED@==CB?D>8@:;=739@6<9<7?G&  =T_W^Y[eiggipolmpsv}ˆ‡‰–’‹Ž”›ž£¨¦ª®±±µ¶µ¶©}7)k¥¾ÇÆļ¾ÁÁÁ¾¼»¹·¹¹·¸½½ÁÃÇÃÂÂÃÁ¼ÂÂÁÀ»¾À½¼ÁÄÂÂÂÀ¿ÁÀ¾¾Â¿À½½º¹²©­¬¬©¢˜’„ˆ†„~zsjJ-"    + +   + + +     %%"" "$"! '*&$'!"  #()'-.*043-,"# !"&%+%$!#$!"  '..!" $+:Yu…Ž’™œœ’‚gVIBIJGLOAGB5-# $- *8?B?@?=>9.!#"' + +    + +  +   + # )/87278A?-"$%'"$4FB2%& """("!))*-(%)'+)0'/'!  + +   + &Qm}xqV5   +   #  "!#&(&$ $#"&('&**&% %!!%$(&&))(%&#'"'1.&(),1.0/*/-+-333565;=327;76:;564@79>::==?G>??DCDA?@EBFAE>ABFHEHDBCECEEJIGLFJID?EBB@.!!;HUPQUSVRXQUZa`_`_X\_^Z_d]_cgebfdhefda_bXZZXYY\Z\WZYWSYWUZ][_ZSY_d^Y[YX\^\^b]]^ccmfhdhlfgifgjosptpnr|}‰‹‡ˆ„‡ƒ‡†„ˆ€~ƒ„‡‹‡‰Š„€Ž‡‚‰Œƒ‰ŒŽ‘Š‹Œ’‘•š“‘“š”’—˜˜˜–›œœšœ™™™š“’”ŠŒŽ‹†„„~|z|‚|vnnh^UKJQR]hqmcdlp|†ŒŽƒzZ3 + +  +)3/1:9A>><<@>>@98<7.0) +  3BELIKGNTPEMNUQMOXX`\Zbbjofiimu~Š•ŸŸ¢ªª­¡q0% $hªÀÊÊÊÇÂÂÄÄÅÂÀÀÁÀÀ¾¼ÀÂÈÊËÊÇÅÆÈÆÂÅÇÄÁÅÆÈÆÆÊÊÇÇÇÈÈÅÆÆÆÉËËÉÅÅÅü»½½»·¯©¡£¡Ÿœ˜—‡b8+ + + +       '#%!# %!$%$# $$!..)#)#!!#" "## " $'(&%+)15-3,#!""$*%"%'! ! ")0'&""'9Zwˆ‹Œ•žš“‚gYFAFCIGKHG@6) !!"-*"#(2:A<==@<:-"#$'"  + + + +  +   +  +  (*01902/9CC0"!"!$%$!'6CB,  ! $%##$'&%**%""%%#%(00"!     +Yu{€u^>" + +  1><>$" "!!#! "'$  !$#$'''&&(*$)'*,).*()-1,((&)(+-//4653465:86==:<:958<9<@<;7539,%( +  $++610204.35<34559<:8=;;AFC??ADBNX\_kjqyƒ{V. $j§½ÉÉÈÊÃÅÈÃÄÁÁÁÂÄÂÀÁÃÃËËÌËÉÈÇÈÇÊÇÇÇÇÇÆÈÆÆÅÇÅÃÆÇÇÆÇÈÈÉÉÉÈÆÂÂü¾ÁÃÃÁ¹µ²®®±­­¯¬§žO* + +  +    + $ "!!"" #'(+%(/+!##( !"#$%&)*+*)+-,01+( "&&#+&#&($#"!!#%&#&! !,5UxŽ’š¡›—gPGDCDAFJIKA<.&"#'',*#&1=8:=>><50 #"$  + +  +  +  + +(4;121-->GF3)  !" ##5C>(!"##$!#"%,++!$#"!!"8        + .Xt„ugRB6/+(*(&*29800168;@=?FCCAAJQNMMMSMSUWVWTT[ZY]^[ZY\_]ffea]bbggcglkmhmjjkhroqmmrtvvyx~}€‚‚„‡„ˆŠŒ…†„ŠŽ‰Ž‘•—™˜™›••˜™šœž¥£ž¥££ ž£¦¤§¨¨«®¬­¬¬­­«¬¯±°­°²±¸·µµµ¶´³µ·¶¸¹¼¾Á¿¾ÁÀ½¼¾¾½ÀÁÂÂÄÂÂÀÄÂÅÅÆÄÄÆÉËÊÈÆÊÊÉÉÊÊÊËÍÎÎÏÑÑÐÎÏÒÓÓÔÒÓÑÑÑÓÓÔÖÑ×Q)#9Q+&h·ÔÙÝßÝÞßÛÝßÞáàäãàÞÞÞàáàßàààààÞßßÜßâáãààÞÝÜÚÛÛÜÝÜÜÚÛÚÙØÚÙÙÛÙÛÙÙØÙÛÛÛÛÙÜÜÛÛÛÛÜÛÛÝÝßÜÞÜÜÜÝààáàßàáßááãááãæçéìíëêêéëçææçäççåääåäåäääãååååååäçæçåâáãâãâßààáßÞßÛÝÝÝÜØÚØÔÒÏʺ´°¥™Š†yrppnl`XWMEA<:9:652+& !#$!%"#%"!!" +  &06:=HCF@<;>=956314*4%  + ##%)'''),../,*2*-2/029011;<761.--36798:FD?5( + 'h¥»ÄÇÅÅÂÁ¾À»»¾¿¼¹»¼ÀÂÄÅÇÆÇÅÄÄÆÄÄÄÄÆÁÁÀ¿ÃÀÀ¿¼½½À¿ÃÄÂÀÃÃÀ»¾¾º»¾¾¿Â¹³¶¸¶±¬²¯°«¤‰Z4 + + +  +   +    ! " !! %('/1!"& $'!!"&#%!#*+26*('&-4,(&$!&"&#!"%$%$'%#$!&#$"""-3S|‘”˜›žŸ™‚bLJA?@>XFHL?8.'%#)),/%  (;><@@:44-#!!#% "      +  +    ,:8341009EA5*  ##( ! !%!"%' ",<:' !!  #!&.2&##!  $ "     + + +   +(HjtvrkbaUSSQUZU\ckjkfmoqt~|ƒ‚„€ƒ‚‡‡’“—˜˜––šœ›šžœ£¤¤¤£¥©¤¦©«ª¨ª®­¬¬­¯³°¯±±²±³²°³³¶¹¹¹¸º»¹»½¿º½¿ÃÂÀÁÁÄÅÄÅÄÁÄÄÄÂÃÉÉÉÉÇÊÊÊÈÌÊÌËÌÌÎÏÎÎÒÐÍÐÏÏÐÎÒÑÐÓÔÔÓÔÓÐÒÒÓÖ×ÕÓÖ×ÖÕÙ××ÙØØ×ØØÙÙÚÜÛÚÛÜÞÜÚÚÚÞÛÛÝÞßßÞÞÞÝààßàààâáßÞßáßâáâããæææèçèçèçèééèéçåååæåãâåàÔ±e+.Kn8,|ÅáèéëêìëêëíìíìëíìêììëêëêëìèéééêêêêëêìëëêêêêëéêêêèééêèèèæèéèèççåèçééèèèççééçêéééèèçéêéèéêéëëéêéëêêëìîíìîïïñïïîîìííìëìííììëêëìëìêëëëìêëêëëëìèèåçæææääãáàÝÞÜÛ×ÔÑËü¶°©‰{si^WJ@;523120-%&"#      &+27=E>FD?>@@:7::5222+"  +  "+%%!""!$"%$#)*120-+/+14566/,*$&+,0..30*'! + U¨³µ¶º·µ²´°²°°²°±¬­°°²´··¹·¶³¶¹·¸¶¹¹¹¶´³···±°²¯´·¸º»½º¹·¶¶¸³±´¸··¶­¯´³¯­««¥¤ž†Z6  + + +    +    !$!" #!"%$-&#"#"<5%( "!!"!!'*+,/+.(,-.00$%"#""%"#!#!# $#$%+!))%!%$ "(1Rv’—ž ›•~`IDC>BDLEEC@4.&'"$(,3#')9>A?A@=822550-0+"  !$ ''&#3! "'%%+.+-'07(0.595.*$"%"&$#+2,'%  0^u†Œ‘”’‘’Šˆ‹”‘Œ‰‰‹‹ŠŽŒ•‘—”˜š˜’•”•˜˜•–”– ¢¨¥§ª«¥¦¤¤Ÿ¢¨ª«ª§¤§¨¨£¡¢˜••€]4   + +          !& #/+ """%&'&% !! """"  $"#'**,,*&44//))'$#$ " #! $"$#!$1-)(+% % #$4Nr†“•š™˜r\HD@FIECFFA7.00.&&'(,% &.8A?<>;95.% !#(%%! !  +        $)#)-+*29<:3+)**($$$'!"$#$$%#(/-040/,3103*"**((##"# !!0.'&"(% !"%"#' "!$""(O&13,+*'&#%+*()//(.453$      +  , "'&%+$)'),*+0,.--69:=>BEHKMPQOLUPW`aggqvppkrkqts|€|‚ŒŒ•”˜¡¨ª¨¦ª°±­±²±±²²³µ¼¾ÁÃÄÅÅÅÈÈÈÇÉÎÏÍÐÒÓÑÑÓÒÓÔÕÕ×ÕÕØØØÚÙÛÙÚÜÚÛÜÛÛÜÝÝÝÜÝÝÝßÞÞßßÞáàààáßàááäãâàáääääååäåãäæääåæåèççæäåæçééççéåèæçéèèéééêçéëëììëëìëêíîîíïïðññïïðîïñðñîïîïíïíêììëêçܵh6-UwK,sÀÞæèêëëëëêêêëëëìëëìëëëëìëíìîííïîìëëëëêìîíìëíîîìëíìëëëëêêëìëìëëíëëììíììëììëìíììíííîëììîìììíïðïïððïðððïððòñðñðïîëìíîîíîîîëííííííëêêëéçèçææåâÞÝÛÖÒÍÅÀº®¨›„}zribYUH=40+$!$$*"  + +    +  %1:BA@B?@=A>6441402//#  + !&+.(%%!(+""#"!#%'(-*',.,-32/("! "#%%+.-," +  /?JUWT[_`[S^[b^^ge_ZSSOPRQPMOTTVUS\a[Y]][XX_\bccnw~€ƒ‡„„€tnzˆ†ŒŽ‰Šˆ‹ŒŠ’•Ž‚‚sV= + +  +      +   ! (+" " #&%''+'$!"" # #""!$$! %))(1'+)-2/2,&$ #&!#! '##%$# !!"!"% )"'"),-(%#%%((5RoƒŒ’“‘‰qZIB@JHIIFGC:111+$('16'  #%*/9BG==>:<3*#'*,,()*#$##    + +   %#$#(0/31%#&+& ##!%(,-.2768221-)'),.-,(&%%$$%"./##(&&%*'(+)%#&&&))-#+*()''.="$&"$3F3451)'"''-2::82;DE8'    +   +   $"%&((&&('#%3/049>5236677B>>GGHERVVLC>=>7;52221S?-678678:52988:>;>FPW\\gd^]YPHEYZai`\ZX][apoie^A,   + + +    !"%%#'%'#*!!  !! !!'% #&!%%#$'(+$&$$).+-3/-255732)&%***(&*++/)*&&"!!& *$%#&'&*%(''/>-*',./12?Qhx„ƒƒ}zjZLHJJIJHFIH?9;85227<91()&%,378=HID@@?@>7651365441/.+'%     +    + " !&8"%'$"%"  " "$&+(0-/-+"%#$ $&)&%% #$$#%%$ !!&$(**$"'&(+',(/1,+-$0&')&++.E,,+% !&$(583/7950    + + +     +    !&(##*/../23964644/56418@BEEGLKJHHNPFMSQRSX]^cgeaefcfjoqsoswxxv}~‚‚‚ŒŒ‰Š‰ŠŽ‘“•˜–›œœžŸ›œž£§ª©«­¬®°²¶ºº¼¹½»¿Â»º¼¾¾»¹¾¿¿ÂÃÃÆÅÆÄÆÃÅÅÆÅÆÅÇËÌÐÓÓ×ØÞÝÛØ×ÖÙßßÝÝÝÝÞÞÞÝÞÛÛÜÜÙÛ×ÚØÛÚÙÙ×ØÚÛØͪk5,JgE!L“¹ÃÈÍÏÐÌÐÏÌÍÎÏÑÕÐÒÐÑÒÔÕÔÓÔÑÒÑÔÕÖÕÓÖÖ×ÖÔÖ××ÕÕÖ×ÕÕÓÕÕÖÕÔÕ×ÙØØÙØØ×××ÙÛÚÙÜÛÛÝÛØÙÙÙÛÚÙÜÞÝÙØÙØÙÜÝÜÝÛÚÜÞàßÞÝÜÝÝÚ×ÖÔÑÏÊÈÉÍÑÓÒÍÊÌÌÍÊÍÇľ´­§§¡™”†{nld`ZSPLE;;72*%'++%+-( "   +     ,B?A@:4188?HDB=7666>EEDB4'   +      ! ! ##$*-*&'$('!"  ""'-0.1-147),0/.-.2.241422;===;<7513+...1423166/,*,'"#&&'&6002421981./69;9;9>C?AAIMYdehacbb\NJJLJHFHFDGDCFEABAB?B>;745;@AADFEIMEHLJICA99@@AF@8981,("  +   + + +    0##%!&*%% !+ $#%'! !!! #&(%$&'%%! !%" $!""$%$&'$#    + +  +   + +   +$   +   ""%'"%! ! # '&))0&'%'$-(!--*(+-))*,0-64/552:=779635;>?8>?:>DGEC@EEFDDFJORPKQTQIHHPWX]_ahb`fhhkktvruxwietvokqxuxxx|‚ƒ‚‡‹…ƒ€…ŒŽ”“–›¢ Ÿ™ž¤©¨£¡¡¤¤¥§¦£¢¡Ÿ ›˜™ ž ¡ š—šœ›“pA.'7C,'Hhyƒƒ„Š‹ˆˆ…‰‰‡‹’’‘Ž”“‘˜“–‘‘”Ž’ŽŒ’”—“–’‹‹Ž—””’–˜—˜—“˜—•—˜ž™œ ›•˜—š˜˜š›¡¡Ÿ¡š™™š›¡£¢¡œœ£¤¥žž››—›“ˆƒzxw‡‹‰~‚}|wxxncZ`ZYSQKIGEA@:96;8110,&))!#!'(*%!!$     + + +   1EPXTRIIGA:;@@97:9@C7/& + +  % #'%##'#&(')*02.#+-'%$7!#!&%*'$   !'&" $)/5A?@FAIKHA<-.,&..&%&,#$%#(+,+',-(&,')"$''&)'*&+314)#)-9@B@1+)'*)+.57'"     + +     !S=! !## &*&$!!""$ ! -3535:=79D:;@A685898=8:6=?CEECD>9:;;D;>CEBDAB@:;6.-126<896<>=>9<>?B=;;?<983;98<<<@;<>;>A<;77::==5/0.,+$      +  + !   %$! !! "(! ""      +%  +    " #!!! "#" (((&(+,$)-,*/*%,-./*+/*.2-/**-,++009850134:2009;5<<<>??FFDBBEIJLRKA>DEFGHIIJJSTU\[WW^c^`^XY^]]bdgegiropsouyxumkrtuqkpptqneeecahhkhebda^RF2#$25!,>HUTVX^ZV^^[YVVTW`d^W\_^b_[\\YYURONQSQV`Y[`ZUQTOLNXYXZVY^^YW[\]ZWW]\^_bfXYbZ\\a_hg`eZ\``aggfb^bfgda[^Y]^_YZWPLIHHPNWNSRLOHEGIAAB>??993960+0*-*.)-%%'#!%'% #   +   +  % +@R`gec^NGC>AH>994:D=0.( + +%&%$#)(*"%.*121+/.-.*'$$> )&!&%#& + + '($ &+(29:LCFFDBC8+%&/')&& !! (,),&$)''$# .*%!%!$'' !'(+,'#),59=>=376289=;:4:<9=<24626=E;?;9:=BB?=97589;?>>886/33.053F84/0001+)(+**-(**(''*)(",(')(('**&)+())#!      + +    +  ! ""! !#!!!   +   +    + + +   "#"##!""#$"#&'!&)'$'+$%)+%"!%%(&%'$$"(%)*0+/,'+-200$)1,+-+/-45389>34972964623856<==:?ABBABFKNENDACDCFNLLLMOVY[_\VZVUUQ[X[PRVUUXOGIHEBHMOOHCCDA:1)!"+,(4?BBC@HEEEGGEB>:>@DD?BE@EHIFFCCB<72549;AA>48?716<>?@B@95;:??CA=?A=;:??EE=?5:=ADB@CBBCEH@?>>BA@A?>?::::8;;==<:99<7849966754024110-,&('!*)+-%""&$#!$ "   + +   'Das{…‡vhXH><>::DB><>;;;F?>@BIFFKSLIEBA@CFIGFIB<@>>@<=@:=>74941*"'* 1/7;:><>?98@>93267568;@;99>98;<63*(*-)*00--/0254/732443361275:63/./)0132025455014034-*27643666;7:511/794542/-086617474//08875642634/.,1.22,4.''$"*,-) $% #&#"  + +  +   +Agƒ‘”‘bNJFDCBA<>73;371' $!"(&%%&#"#++-')%&#$*# &8# &($"%(# ,-'$&(/+.>A=?BCBFE@@>B=946<;85<965+3611' $*)10;D=9;764684--5306=8:9369746521,('*"'*,&#$%+:35333028-,/364400*-+%/,*-12/363,02,,2,.0/241*0686587*142255/,,08;55517<,,-:=;0./68671-1/31,444)*&#(*'& '!&""!%' +   + "*   + + +Pgwƒ†‹‚aEFEJFEB=A964:7-($   #%"%&) ! "(*")%1/)+!$)*$%# #"$  !&#&&%&',7<@C@HI:1%&'(%$ "#"(1(!"'$)%& ##"&$%(,,"!%)&"""'(5>@>80+(&,+),1)!    +   &  "!"#!$1##"! $   !$#& "#&$%()"#+'+)%((%!!$% '$&"&$)#"!$&$"!$!! "  !!"%!"" ""$"%! ## #  % #!!% +        + +  ""$"$"""  !       + + +      !   !""!!!:!!"#!#P#!$#$ &$#&###$3-%-" "$$#'(%,2+&&(%##$'(-'./*')/*,--&*00+(*./433216244>:72768=??>8<;=;;;?GB>>?9<<@=8?=<<33733>653/2/230,$*"'." !,426F757:54841425246=74326842+-/.*('%&-,%!"%&/,06*58454/(20--/2/,,*,2/*%%71,27-,-*).-4-0/002/35163/6052167//0668028>:jI644/0/.61541--*..,,,/.'"%"&)%%&""%'% $ !#   $  +  + +$AT`eegZ?(5CGD@@B@;94472-( !!&'&)%*$!%$#'&"+%#)+))+-(%##!#"#"&'..&   $#%%*)(-26:?:=GA?2'%&$'&!# $%+- &(& %*(!!"#*'*!!"%&$# *2/69;72)0-)(,2/-' + +  +    +  !!   " $&$!&# #""$+!%  %#&!!#"%)!"#$% "$"!!!# ! # ! #!#!!#""  )+    +  +  #$$! ) 6'!"   + +   +         +     ( !"# #" *( $&!''"%"$$"! $$&!#%## %#%3&#$#($#&$'$$++()(+-',.'-01.(#)0153334.478763535<>@>:7@;9?9=>??;<8><8:7@@A;651,.2132213211+!#+#1-38337I;3/22431.367404,/2046.),()(%('&&$!"$)0+10-/56/0(,*/.++(*0+,/-+*%,-'.5/'(&%/..0--)/1/082.--2-0.-0-,11171_67=3P5,*.2/).'-..3-,%,.*-11+&&($'&$$"! %)'&$%#! +  + + +  + + + + +  #0BSQPF9--<>>@?@>98;465/% "##&'!"%#$))&%$(&%%)&(*** #*## !!&#$,*,-%#  )+-1)--5857>:?C?:3.%$$ "#"$##%!'&!&2*%"$'$#$)-.) %&&(*+$$&,7=?;95'!+-!'23.#        "#  "$#$!  !% %&!"%$!! %"!" "!$$   $'"# $" ,.        +  )      "#  )%     +  +  + + + + + +   $!"$& # ""!!"!!!&!&### %&)?$$((##$$#"$"$$)'(&'*/),--*(%00/-/-,0234533971<;<<;89:958979?><=<86;<:;8872.21344432./0/+ %(,-/4501B@+%.36600343433/*++.0--.($#$!"$&$$!#*%+0*)04--,+,-1(.,/&'2-.(+,*.3551$$*(+//..,040+/38,-10*('+0'(-43/18020-0,&('.(+(%!%,,/,-(+0/013&*,### ! $$%'%  +  +    + + +  (6DDEA4!-8<<80- + +#"!(" !*+-$'$$#%#'-))('$(%#! #%'0*.*( +$0++--+,252:86112,))%"$$$###"'$%%'$'')(!#+#!',-4-'''+.'(*)"*6CA:;6(#**&(.7/%   +  +  !+      "$ #" ! !%""" !'%#!"  !#"&)%"" '"#"!%!)!#") !   !"'+#"#!!  +  + + + + +      +              +  (*&      + +        !# "! $ !#!! #! #'##!#! ""%#! &$%#!$#)'$" '**''(/$$+3111*02-0310363.289;6687441577;>>?985>:669;1373432214//2/.*)")( %)"'3./.?<+'20020./5311,*)%&%,)$*&&&!!#'%(#"+-/(%'.2-,1+)%%'&&#+..1-+-',,0131+'%'&/2-*3501474/./,*$#)&*+/33.2/%*.+3+*!&!'%"(,(-+0/+,25410,)'', $(#&"""% !!  +  + +  +    +  +  + %4@DC?3#,13:88;B<A971)(*!$23,& +  +   +   !"$ ""$###% !""### $ ""# !! !!"%"" #&""&!"#"!%!  $!! "! $  ! #  +         '*        + +     +(5,"   +  +   +          %!! "$%##$!#!'&&%!#%""" ""!%)# '&&'*+(%%'+/*-.,+-/0-/53.223:;;47694201:;98868542247>842111053,/20:.-'%###  &&**),25./.3/11+-,..,01''+$''.(#*"$ ")'&%# #(,1/-%)+/3,0+'$(&&"+-..-3/-+',01./" *)%*,).-++133122,/./*)+0.536143-(+,...)'',/&%((-%D7214033-0*),*)"%'$)$##%#&"!       +  +  + &+6@HCC0#(/32775<>:>5,))!  !'%##$()%##*$%,#*---,.-%%.&!'!#%%*,,*%$$   +)'+'$'(,./11'+**)'%&#%)-#!%&$'$&%$&'%%*+-),,)'+-1-/0-,,-+.&%+35=>44.*+(&*+-*%     #!!" !" !! & !!  !!! #!"#"# #%$"!!"% #(##" #$!#  !& &#)  "# '  + +     + +   + + + + +  +&B  +      +    + ,!)43'  +  + +  + +    +    !!!!"!"" !"%'%"!$&%$'%& "!""$)""##(&)**-((!%)03.41(%,.+/2+,11446232366<1544550483.-41562520//141.,234/(*$$#!$.%%+/,05,+-,/.'(/))-1,)%,)'*)&"-" &,)(('"$&'')))('22+.*'(('%,+.-$481.++(23)''$*'%$,++(,,+0000301,3*+12-/4318120)./-)0'4/*'(*'-/.31-.333/)(&(/)')+-,'%"#&&(&)#! + + +    +  + +,:?DCEHH;=;)".3084774583-,)  !" $%!&*,&#!",60(&$)% %$# !,'')'&"   )/+(1++++./1+/+ **&*.(,+-+2,)+**'*)"(+..+,,))(-654430,4,.2*+./68<<9*./,&('%)1$        #" " "!!!"!!!##"" #('"!"%"! !"  !!'! !    +   + +  + +  +    "&%$           ""&%!(3.'!   +     + + +  &$$ !" !#''!!# #"  !!"!#" &/''()*+"!)*/.211/8:4892+-42546495:5686579/.0.,)224/18;450,)&##"%!&'(.,(()'0.78178.)',00)(-0,($%%&'$$"(')%"!# "%'$#"!%+%"'-0-'(#!%()(*.*.+).0-*),1.214')(&#"*('.($('#/+'(-04304/.21-,%&(10',/.')*,*-,-')./*-,(' !%%'&$'%),')'-'##! $'!   +  + +  (?GJ?A?.)437<4533325/. + + + !"$ "&$#%"" ("#+-.('$# $! !'% %.+  '/ ,204303/-315-52.-,)%)0-/.-* &.0-,(*(+*-2/-)/3/35<:996234153',666?=;971/,.,,2+!      !"# #$!$!" " "# !)$$$&"&&$#  ! (! " ##  ! #!"!  +  +    +  +    $),)"   +!!"! $)#*6-         +     + +   #!!  "#$$"" """ !!"" ##)-(#)+)(*"$*/-10/32574630.-,2/.16135240285240,,+-1-2/-2142*#$!(+(  #),45'-,2/1<=--.,'+*-,,')1)$&%%""!!!,++'(&#''$)%!'"&*,,.-0.&'%#"#$&$& "%&&+'$%(13,)0,-++$%%'*+(&))'+%+*&/3/0-*+-1-+('',*'+*.)'"%#%+2)%(#%*(!#$!! !%#%$"&&#(')$!"#!!#   +     "@HMII@-!*06667557?9661 + !'$!%##"%$!%&"#"!"#(,($&%""! ")*0&&   +!6=BA?;=B;;::6:>94-012474*,'0-2.0248/32357209=7=A@CBC=:A>547/.7:;@>@>;67;4+,/1  + +     +!!#%"#$ $! # #!&&!  ! #*=+#(*&*$!!&&!  !)$!# !!(+ +    +  + + + +  +   + + %**4-$     #$"# #"$"$/)&')44*$"!     +  + + +  +     # "! !"# '# !$"#$.&&($&*+-&&%)-,0/),173//41/-03.,*2302530264.10.-,($+)'%$)-.+#"%).)  "%*10,+.50+.J.,*)+)0*(+#&(*&$%%(%$"&)%&(%+/*+%$'&%$%&(.+%,,*)#%"#%##")#%#'%$"%&*'*(')-,+&(*)(((%$('').(#*(**()*)(*&&&"$$%(()*# &##&(&&"$#%%%$##$ &!&""%""  #"! +     '695<;>>FBA??DB?8.2.+$     "  ! !&!#!#"#" !"" ! !""$&'$#+-#% "# "%# #%.!  #"$!"$!!!#      + + +    + +  +  + )'.21.!  "'(%$! $(1+'&*% *0,&$#    #!#"" + + + + +    # ! !#!"!!$"&!#&$#)&*)(+,*0)5*./553-/233/30/-./-01/032-.-*+0*0.*)*# #))'*#"*/0. + !$"%*/0)(),20)('+(*1+&)'&(1*%''&&& %'($##.*(')%&+&&&)0*!%&(*+$#$',%'"'##)'$!!#&(&+''$'.,)++,'$#$&&&(.-($( &,'(' !'"++#" "$&#&&"""&%"# " $+"!# !$ !"%" ##!""!  + + -BPZZXH3/29<:585765:@5 +"#!"'+&%*)&%*(+)/87/,164<:043=A9;>EIJISVT]]L31Vr‡Šˆ‰‹ŒŠŠ††…|€}wtsrmsmonqmmnmkbdcbc\^bhcaeekjknhd[TWIC?DMJNPMJJIOQE26;7."         "!!!#! ! " -#$%! !#&#*%!"'&&)%$ ") $" !!(!  " # +  +   +  + + +  +  + + +" .176,&     '..$&!*(.-(&&&" .%%"% ! $8%    ".3;9@85541*% + +  + &  +   +!!"%## """# "("%'''**)--,*"..14++--..10000-+-+0-,*./-'**/+*((*+)$$)&" ! %)*.'$$''($,(0'&((&%&()1'$(/*#-(*(%()(&*&-.))(()*-*+))((*0$!!'-.'''''((&'%"!())'%!#'%),'#($$%"+$#$"#()%',#)%%&,)'#$#&-&#%$%$&),#"$"&#""#%$'%"!#  "! %''#*&"%!#  !   &=V\dc_E4&-6;@=624356::/#@=3@EGFEILMSUPU\Wa_[Z`hjfkjmsww|€‡……„Š’•ƒR% >=:2%     $,01-45:A-!%U   ! ! "! "#""$)#"#'%!&(&*))*+12/,+60,2-8693*033943321023240/,+--,0+)*)))((*(($*($%$$'%+. !&(+)--13.)&)),..-01.'//-,.,/020/73162632-,44230211553348>865464873:76208;820.,1675054/.123437;377639>699773<=;<>>::=@=@@@:>B?ADFCABFFDCGGADFDBILHKKKLMSQUTSNQQTRMPQPOPNMOQPQTRMKNOMNMOLIJKMLLKNJOPPPUTOLMKIOJGCBEC?@?C@?EKVfuyywnV:('.5763255997:/  !@ekrqy|yyy~…‡„„Š””“‘Ž‘’•“•šš›™Ÿ¢¦¦¥¨¨¨ª§—`/ $Nµ½¾¼¾ÀÃÄÅÅÂÅÅÃÂÁÃÂÀ½Á½Â¿¼»¸¸¼½¼»º¶´³²³²²°°®«««¨§­²«©§¦£žšš™˜š‘’•–’Š…ŠŠ„}xpkZ?)      ! "# !!!  " !$""$$##!#$(&&+'*&#$'# $$(#! " ! !%#'"#  !!!$     +   + +    + + +  +   %10'"  !&4820)$#%).-./5224)/(# #)&%'!$%"'))#%  #   #%()020.-+  +  -5@HWbgkpojb[RH=0*!  J%  +  + !" $! !%!"##()($))*'+&$*.71,,1./1/96:?B?;>><9=@?A@=?BFEHEKOMFDA7--9AFKDDILIIFONTUPKSWROOOROPKHRSXXX^]WOUZUXVUQPQPSNPLMNIFJFCKFJFLIACA5(%&.1$ 2AHPOMNNPU[_[VRYVWY^^aa]]`cbdfaelnlppnmqsvsmjuy{uwsrttuyyy~…„ƒ‚ƒ~‚ƒy†„‚€‚„|||{|}}~}}‚}€†„ƒ‡ˆ†ŠŽˆ…ƒŠœŒ“Ž“”“’‘‘“–•™™™˜•› ¢¢¥¤¤§¨ª£§¨¤¦¥¥ª¬°¯°¯±²¶¹¸·¶µ±¶¶±µ´··¸¹¶¶³·¹·¶·¶µ´³±²°¯°­¬¬¬¨¦¥¦¤§¤¥¦¦©¥šœ—“–ŽŒ‡†„€||zwtttqvtv{rseG/!*3-034459739:3 + +=Ybfdfe`agfjkghktozzrqtjmmlljmmmmpv~€ƒ‹Žƒ…‡tQ1 U—ºÂÃÈÈËÍÌÌÎÍÌÍÎÌËÊÌÈÃÉÊÌÉÇÈÉÊÊÈÉÇÆÇÅÆÆÅÅÄÂÂÀ¾¼º½¿ÀÀ¿½¾¿»·¸¸¸º´³³¶·´´²°²«¦¤¤ •~U.  +    !"#! ! !"$%  '#%"!#%-&,(-',((/$!!$,% #"% ""!!! +         +         +  + +"%  $   !,110-,+*,,..-35744(&#$%('(/%#'$$++$ !   +     +  !&,5AOZbdmokicXOF=7)! $ "!!"# ,.*+)0//2475;:5<>?:60   ''"/23.175325'  &1466:775667<=;:9:FEA=7?8<:67;?AEHFOSLKHE7(Q“ºÄÃÅÅÉËÍÊÍÌÍÍÍÌÌËËÌÍËÍÍÊÊÌËËËÌÊÍÊËËÌËËÊÇÄÈÆÅÅÃÄÆÉÆÇÆÆÆÄ¿½Àº¼¼º¾À¿º½¶¶¹µ°¯¦”k8      ""%  "! $ "$! -("$ ! "!")0'*'+"'%"$#!! &$    % +     +   +  + +   +     + +  '(" #" ##"%0111-12.),/3.0653,+##'(*''"%('''(2% #!   + + +    + +!'''+377ABCDBEE<6763--$!%*++)**-++.++.3.60..4;6<CGIGIJKKEDDDA=:?ACHGJOSTUQSVY_^ahfeffd`afgilnkhgjxw€}€‚ƒŠŒŠŒ‘’“”——–š›ž£¦¨®®´¹½ÂÀÃÄÂÅÇÇÈËÉÈËÉÊÊÉÆÆÆÆÆÇÅÇÉÈÈÉÇÉÉËÉÌÎÏÎÏÒÐÑÑÔÑÓÕÔÓÓÖÔÖÖÕÙØ×ÚØÙÜÛÙÚÜÛÝÜÜÝÝÝÝÜßÝßÞàâààßáààÚÕÅÀÍÙÜàããåèéìíîîíïíîïííîíììêëìííëìïîïîïïîîííîìêêèéëêêêèççççææååäååææãßÔ³p=9^‡]* T¨ÐÛßâàââáááããååäâáãääâãäãåääââäåååæåéçèéèçèêêéêéêéêèèéêëìëìëìêêéèèéëêëëëëëêêêêëíìëìëêëìêëêêéëêéêëèêëèéêééééééêèëéééééçéèéèèéèéèææçèêèèêèééèèèéçææäåäææåãäåâàáàÞÜÚÙ×ÒÄ¿»¶¯©¤¡˜Œ…€wwrpjbSHC>;=;9600/.,'++,,(*!  + + $"$$(*02883422-  %%.#(%) & '(&(/,'4#&+) """$(.++2(!" 9+C‚«¶·¼¼¾½¿¾¿¾ÂÅÃÃÁÃÂÃÇÅÄÉÊÈÇÈÅÈÈÇÈÊÊÍÍËÊÊÊÈÉÉËÊÌÌÍÍÓÑÐÐÑÍÌÊÉÇÅÄÁÁ¿Á¿Á¾¶µ³µµ²ªœxC'  +    #" ! )!! !#(('#"$"!!%!"!      + + + + +        +  + + + + + '##%$!  + $%!!!!$$! !%% ! .400/2601340,1883-&,-).(&)*" !*,'*+/2))('%%*&%,,%$ +  +   #-07IMGU_ekrz{|ywywrmic^[Y^]^ifilmpqtvsy~…’”ŽŠ‹ˆ†urwx|ƒƒ€}y|‡’Ž––“›•’”—¢££¦¤¬¯®´·»»ÁËÐÕÖØÚÝÞÛÝßààÞÞÜÝÛÚØØÚ×Ø×ÕÔÖØØØ×××ÙÚÙÙÚÛÛÝÞÜÜÝÛÝÝÝÝÝÝÜÝÜÞÝßàÞÞàáããââäãâääåäääääãääççæççèææäßØÚàçèéêëîððñòóóòôðòñòñòóñòòòòññòòõôóòòòóóòòóññïïðïïïíëììííëëéëéëéëêéåÚ»|A:df/$X¬ÖàåæèèèèçèèèèêééçèèèççèèéèèéëëéêëêéëììëíííëíïîíîîëììíìïîîïîïîììììííîìììííîííìíïíïïíìííëììííëëììëëììêêéëéëëëêëêêêëéëêëêéêêêéêêéêéééêéêêëëéééæççååãääãßàÞÜØÔÓÑËǹ´®¡’Œ‚upd`\RJF?DD;<4:+(%""!#"% " "" !!   +'1,+.43>B:63+$ +  "''! "!!)'# $! $-)258b‘š £¥¥£¤¤¤¥§¨­ª¬±­°··¶¹º¸º¶µ·¶·¶¹·½½¾½¼½¼¿¿ÀÁÃÆÇÏÑÐÑÑÎÏÌÈÄÁÅÄÃÃÁ¿¾ºº¸²¯¯¯­­¨—pE)    ! !! !!'  !#%$$"$(# #!#""    + +     +  +  +     +       +   + "$$" !"#!!" #$" # !).(""""164201227795348<4.33274564350.5;;CILONOGJF=9>A@VSGC8,)#!!  ###((,166@KQVSgchkpruworxpic]YSSXRT]][ZUVVVWUWYfrwkhgdcXMMMLRVUUSLXaYY^_aa`hf[[^fvxyv‚ˆŠ‘”˜¡®¶¼¿ÄÆËÍÐÎÎÏÐÐÐÎÍÌÌËÉÊÊÉÌÉÇËÎÐÓÑÓÔÑÓÕÖØÙÙÙØØ×Ú××Ö×ØÖÖÖÙÙÚÚÛÜÝÝÝßßáâàâááâáãäååãääããåèèèççèéæàÛàèëìììðòñòôôôöôõóõôôôôôóôõôôôôóóô÷ôõôôôôõóòòòòñðññðïïîïëììíëëíêììêéçܽ|G=^‘o7"(]­ÖäçèèéêçççèèëëëééêéêëéëëëíììëìîíïíîïññðîðñïïðñòïïðîïðñðïîððïîîïíîîîííîíîñïîððïîîïîìííìêîîîëìëëìëëìêêëëëéëêêéìêëêéêêêëêéêêééééèèèéçèéèèêèåãâääáÝÙÔÑÐÌÈļ¹¯¨¡š“ˆ{ml`TQOVR;//-+,('(%"#&$$""   +   +#/121128<>873,  "!$$" "!&%"# " %%-%  $/26>?CBDFFIJQW[blqu}…‰“–—•—–Ž–—–”‘•—™˜œ£§§«­­­¯¯®³···µ·¹º¹¹¸¸¸»º·¸»¾¾ÃÃÇÈÈÉÊËÍÏÍÐÎÐÓÔÖÕ×ÚÙÖ×ÚÚÜÜàÞààßãáÜØßæéëììïðññôôôóóõóôóóóòñðóóóóóñôóñòòôóòòóòòñòññïððïïïïîììîíêìêêêéëëçáÔ´yD=a’n<$"Z¯ØäèêêèèççæèééëëêëêêêêëìëîîïîíïòñðòòòóóóññññòñðïðïîïðîîîìíîîííìììííìïíîíìîìíìíìëëììëëëëêëìêêêêêéëëëêééêèçæèèçÞçèæèççèêêèèèæäâáàßãâááßÞÚØÕÑÎÊÎÉÁ·°©¢–‘‰€wpf[TROID>?745)*-+& $! !!!  +  .189;;<=<<4221! + + ""%#!!$$*! "#&""#$" "$&&%!  %29=E@CCCFEEENMQJKKHJSZY\^`bd[^\`^cjjkrnlkc]`a]gqz€ˆ†Œ‡‚…ƒ…ˆ„‡ŒŠˆƒ†‡‹Œƒ†ŒŒgA""$!   !! #%&$$#&"###! " !#&'%$&*&-+(! x1!#'#!       + +          + + + + + +$*( + + -&($)#('"&%%%%!!$1.>H>2/)# %6;64567556<;DIOPTTVRPRRVTUPPQOX\^][_egecjnllistrosuv|‚{}‚€€ƒ‚…‹‰ˆŠ’–•—š››ž£ Ÿ £§ªª¯²³´±³µ´µ»¼¿ÂÅÆËÎÈÈÑÞäæéìîîñðïòññóóñððððïððïïññòññðòðïîïîîðïññññîíîíìììíìëìêêééçåääãâÜ×Æ¡j;4[€e5!)X¬ÓáåãâããâãâàãäæçæçåèèçèèëëëíííííïññòóòòôðîîíììííìëëëéêèéèèéêéëêéééêììëíëëéçéééêèåçæææçååçèèäåäçæååäæääããâáßÛ×ËÜÞßßÝÝÜÞÜÜÚØÓÒËÃÁÀÆÆÅľ¹´¬§ š˜•ˆ{tkd_]SSSJC@:56;35.'()&%" *!" "    +  1:?CD@>B??;3-0'  #! !%"#"'%)#%%&!"$!! !$#! !  (+066573;89;>8972467:EJE@HKPMKHEIQTZ[]]QPCGNMHOTQV\^`_^ZX][^c_ac\a\XX[e]WV\]ZG1"%      ! "$" !"!"!%  # #%'%%+**'% ! oA! % $        +  +      + +  + + + #,+#! ! )30)-,((..)-*&&(,8BB:+'&"  !#(#&")?A=::;@A@@AHHI>??79>BIME5' &7F[cpv|~|€qocdkr{yi_Wbifdinowy}|~‚„‚wstyƒ‚‡‰Š†{wƒ™¢§ª¬¤ž”™¢£—wJ$  "!$?%)$&/'()&++)0--.55462.3332044245427:8:;638@@<<@<>C>?>CDAABHHGLIJOPONNPVY]XTXZ\]\[cdfjnmonlljmt{€ƒ‡‰Š‘š£¶ÇÏÓÖÛÞÝÝÜÝÜÛÜÜÛÙÙ×Ù×ÖÕÕÕÖÖÚÚÚÛÛÙØÖÕ×Ø×ÛÝÝßßàÝÛÛØ×ÖÕÖÕÖÔÏÎÎÍÈÆÇĽ²­ž{R97DWC( =‚°ÂÅÃÀ¿½¿¾¼»ÀÃÂÆÆÂÃÇÅÄÆÉÊÍÌÌÌÊÎÐÔÙÙÛÛÛÛÚÔÔÒÏÌÌËÊËÌÊÊÇÇÆÂÃÆÅÈÈËËËÌËÎÏÑÓÑÐÍÉÊÉÈÉÉÆÆÂÀÀÁÂÄÃÄÅÁ¿ÁÂÅÁÀ½¾À¿¾¼½¸´¬ £¨¬²°­©ª¬ª¨¢™‘„yy‚~|{wkf]XWXVVM@A=857:72502-&'%*.+&$!'%" # ) ""  + 1HJHKNGMNF@522+ ! !$$"##"$+/!)$! $%2 $%%"%( $-*104005697305327489=A>=?A6FCA>?LOKQPOIF>@ADAEDGHMEHEEFCB?CMLJIIDBD@EQJ=:6;?7$! "!"""!&"$$ !"$%"%')#,+,+-()'"! ##           +   + +   &0+" !  #!"&   1;;<=986:46667;?<<=* !-6:HOQLL?23;DB;:/-;@=69<:ADJMFMKI@>FGLPQRQMD?O^gr|…Œ†~qt~w`<     +$-!((+"(*#%'+,*/*&#! &$%$*,/(**&*+,**&&)23+---.**-../,(,/22-/10--0//567/.35446944899=83/::27AAFEHHR\gx†’›Ÿž¢ ¡ ™——”•˜—•‘‹’Ž”•˜œ›˜—•‘•—šŸ¢¦¦§¢ž™šœŸœš•”Ž‹Žˆ‡ˆvh_TF<2164+ &FnƒŒŒƒ„|{€…‰ŠŒŒŠŒ‰‰Œ‰…†‡‰ˆ€‰Œ‘“”Ž—•”ŠŠ‹‹„‚€€€€‚zxtvnrwuqy}}{|‚‡‰ŒŒ‡€€ƒ}~~{z‚qrruvwzsqprokpllopttqpolhaXWX^dh]ZXY][UTQGEB<6<=><737=;=9496:?A?B<9;?>E?84,-;,# +  $'"!"#!  !&-+(0.0)*--46-(-$"$!##(# !"!       + +   +     + +   +.0,,(+%%&&#-+,*%*+244-&"):::;=B?9848203.-))+/.'  + + *,,+'"$$! " &'%#()%&##**//-%('(+4=BPMRRKGIJPG9%    +   %'(!%/$(%)* !! *+-%%$!! !%$*%$'&**$**/$%!!),+(**,)#(+,.1)'1-*2*,01*&.1/1.,.-/,0,++1.../92+/--,.464174=ADMOZ``^cbdaa]XV\^^[[T[Tba_]]abkjafc`^bgefikfoqpsrmllrrlgca`aaeeac`WEB:2.,12)!1O_gjgehfgicdgkskhnpjfmgacfib_SZZa^]\db`^ZZZTRQQOTSGGCA@DJFFKNOGNNRYTYRMNUUUQNNNOKIGBJJOHEFD@@@AAHHEFFOFFCE<<>?9@DDA?<;;<><7783*+221412,+/2-/-0711&()+$$" $($'''!#"("""!"!,!!  +  #Fmƒ†|umd`YUH;8/$    "# "!!%"&'"%)!!  0.,,..2/,34+)!(2354785><@>757549BD<@<92+44'   $#!  !#""!#$&#$ $$%$(/'))*/+.*3/../"  "-$%"!   +            + +  +   "4ECA78:987;@=978;=BB>;:611.2968DLW]a_cXTRPPNHKFDBD?;884014513847//'#.)+)($10++-0/0'&./.-..'.-&$"('" # +   !$++'-/''&&*(        #%#))('#"%'%%$&++) !--.'(%&),(,.()%%%+-)))%)'#!)/00.+3.**+./.*&+**1-,,,/,/,)'+(*,00/,-/''.1/2-.15;8>@:??=D@@?BA@?CEA>@:>DIIKJKKKIOHLRJPVUPRPSOMUVTSQX^[XRMJKLLOXWQPOE@6-*#$)0&.AT\_Z\`_a`\[]dicaed_`b`\\ZVSMGGIOFICLPGFKCJG=DB=?@8;513127;8<=689<;D::69896784?774106156=@4>C940426;457626445232:7.1.*,-0.(*('.0.0-+$.,&%#&'%")(&)((''%&& #""#%%$"&/     + 7aš›—~rjYJ930& + !$+$#%"$$#"+(%%%$!!&/1,'0///164) */1323;?:=>6349>89?=;;<>=656:=73;;830/.9283.*277>9849B>9;1443-1( , !$!!""""%%  "!$%$%*(&'$--,(,*,+!"#" "!$"!      +  +        +  + +  (EVZSPKKKHGJOLEABDEKJHHEB=@=@BFGLPUQOQhCCDBC@=>746363/-0,)$&%./2''$ ) &'$%"% $! ""'("$ "&%""!"      +    +     & $%$!!+(.##$%&#$+,,% ")*(./(,+0*16,$%%#),'#&&&(*)&*,11-)$2<1480'%)*++)-.-,-.'(,(-)--0,2+,-&*+*+(,37988:96659878=:=:5864389<>;>FEF>>C?FCFPRLHKGGFFIJKJDDNNLKHJJJIIQKLGCB7/)$ "&(%*CT]WVY^`^\XY[^^^_[b^^]YU\PIIDEFQDHA>AHEC=B?>98@79=494021251145244-468;:88282/,01/51394@5..,),-'.4385=62.+*.25154844222/2771.***/(-/)$'&/.++%&%"%( %'&%(&(*&'($(-(%$&%!##""**"(/%%" !"! + +  + + +AjŽ›§¥¥ —†leK7--)"   "))"& !$)''&*&$  ',571./0/-.1.)+,+375=;3=B79571:4;9;<;464409?68>=73/.22710/*-693751047;63/04/'# !$!$$!!! #!!#!"" ! $"&,(#&(%).-*%*% $' ##& !" #!&"      +     +    +       + + 1J_a\RPHC@DDEB?AA@A?B@>><<>9;B?8;>@BFGLLJIH@BEGIGKIDCEHHFCCLIEHIOLID<7,'#&#"$%"-BR^WWV\\^]YTX[Y^[]a_^\WXWPFBFC@JKH?>?@G@5=?=8426=982..,1-./321-)),,-822503323+0.0230-2;9)('%*-),-26532--.,+,.511654136,*5542/,-.*&,2)%)/-('&&#')($4&'$#$++&)&%%+*-'%%&$%'&!$&#*'#'$%  !    6[uŒ™ž Ÿ–w[H;2,)+ + !!!! $ $'%0*()% 2*0.-//0/+/541-.1324;9<53;:=45256867;:664/4736<<2/--,2/01-'+06-,2:85595/'*+)&!  (# !"! # " #"##&#"!$$)!&#&&*'#$)%'$ !! #$2#$   ! !   +       +  .GVSJF?=223547007:;650//,0/6/.-5465*%+&-).*#$$('&%%+*-(%(#$ %&-" !%# #"!!!#!! + +    +  +  +   !#"#$&& $''"'*)+,-+#'.-40(&+)-***/+"%%#&'--%&%)/,).)')&&+/)(%*6,+*+-/''$$((+))'(+,+)-/-'-)&+**1640285<53:9873;=66346.6=>>8CDHGFF?DABDHEBJD@DNOF?C@;2($$(!$) ,DU]YY\]^\YTT\]ecYZ^__bWWQNDDA@?FH>=7<@?@9796:8/366=1,*-00-,1..+,+(,1/2/.+4/10/+05713..34(*("'.++0454+/*0-+'*1434343,'0.)-10../-('%%+,%&,+'*'("&($ :,)&#!%&"##''%..&('%&$$%%%+%"""   + .B^oˆ‹uT=74/-,* +  $$%%$)*/'!!%).30/22./3510(+,33128>997896<;742089;=752215;B>3/-))//0-'&,+4@0*265135-#(%'+! %! #!% &#! !$" "!"$""&"')$)%$#(%$  !"!!"" "!  " "!  +      %4E@3--&'$('+)%'-01,++'$%'-+1"$..&$#!"$'((!4!%#"%'$%%$#!!%(#!"! )#"!%"   "   "##%#)**#&('#-**('-&$*/1+)((%&+*,+'" (#&+,"$"$(+'*)++)++('+###4)),/,(&%#"('*/,,*21/+,.''*'*-+(167524576<8@J739>85681.15?:<::559=CBHIKFJEB;;<;DKFC@DAAABEGE@@EGIB>EC:6/$*,#%')=LWW[\__aZMMR\ig^W`]^[WRRK@A@;>AA<7::>:<;874.112-15.0),-*2)+.0--.&/21-1-0/2,/-)-143021*'5*,(&-+(,163//00,++,.772063+('+.,-(,,*)%&')(-*),,+'+)+%&' "'(##""! &'%"'()&%($!'$#--'!  +  +  + (:TcemynT4+033,.(  * $!!#'2)"%.% "$%-22*20/0143//0-/53;><9995:5;B<73-3:>=778653;:;@EB=ABCACBEDBB<@D>2.$2("( !(=IUTTY^]\TOEL[ab_XV]]TLILE@A=?B@;;:K8=8;;75.,/-0+)04/(.-+)./*/'+----4/.5529)()*..110.),6/,(H %'(-./*.0,-/.0.,090213,(%&*-,)*'(',.*,---,))-++(("**($$## #$$"%(% %('&%)&$&&$%+-)&  !   + "DD50-*'),%+.)((*.0*&-.-30/,0-..(   "   $!"!" !!#!"$ %# %"!"!!#!'$,)'(%%)"$  % $! !#)!   +  $#!##!&! ! #%!!#$$ $%&++#'% '&"!$%!"%"'#&$!! %2*!#"!!"$ + + + + + ' +  #      % !(!""#!#(('!"""))+$,+&"(#$ &%(+($  !$$)+.$%&%#"%!$#&'%$$"#$!&$&#"%%&##)-32/*'.,/1-.%,)&*&#(**14/534411638631//,0,,-63633564;@?CDDF@=A=<:?=AECB=@CC@C?>AE@?<>?>=?:-)($!$'!*:KPSQ[Y^TRLIL^_]YTYSNMIMLKF@BA@><9>=967;;0-.65.+4.134)'*-')0/,'('#%.+1/725+))-+-,4-2*%*4-*'$%&"))//-/,+..1-.,2413.2/'),-++,,')'&-+)*,(**%+(%*%+0.%)($#$# $&&$%$&%&%%)% $%&),(*&$#  +  ;N\cd`N7"#211-) + )!  %&#$ $#$%-"!($%)(''-""&%02).+0780-2/+),'*317>996439?HD>7/9;=::<:?8>>>=2/1,)$$+&%(%&#'0+,,()*0**+'&0$  +  "!&%&'$!"!%#"!"$ !!#"$#$%,,''&*("" !!#""%" " $" "$    +     "!#%%"#"$%$ %$('"%'&'&$%$"# !##&"/8   + + +   +         +  ! !'(&"! #'%"%,%#"$&""$%##!'& !&**'&##)"!##$%##%),1('!#!#####++**'(04*,,,..-(<+&$$'*)&)*+110..+11700.-0.3..'$*13531,47:?:;@?>;;>?@;@=>?A<;BB?>>>?ECACD@B<<>72'%$$$"!';INYWXZTSMIKK^b[MQPNMEGHIGG:9@@<8=87963582,11,&)02245-*.,**'/3)&%$)),,0551-.,-/.047*+,,320*&)))*)-.,.2/10/-..140.14.-+,.163,21'&(,*,,*/+(-/,,--,)'&#"('&))&()+++'&+&'##!$&*(!&!"&%"!#"! "%  + $2GX^ZZC1$-*,**%   #"%""!!""#')('"$! $#&("'/"&,,031/)0112/0**'),)*388>;5458@HA@64:?@GB==:@BEAA<3.-#'#%%)" ')&()-,()**')'*'(&   !!!  !!"$$$ +!!"!"'#$&2162)&((!""%#$#! %$!$!$!" &        #!!!'"#! $%%()%#&!!###!! "    +  +  + + +     +      +   +!!"!  "!  "& !"$)'!&+()&& "" !$"(**("%%.('' *&'##$ ""((*$ #$$"###%*/,+(&%*&(*-,+1(AS,,*('.+.1.10')-2/341+'3)/.,($'.321-1448:6:=@?8:8=AA=;:@@<;>==>E=?EDABIII>=A2,"" &#! "7KMTXORVPJHNIXYULLIMLF>CDGA:9:@86<=9341544534,)+-04126/1.+'/9-.,(#)&-/11211/200253@>?<6>>B>?CE>=8>62$ $#$%6LINNNLOLMJCNSLHKLIKJF@@BA:?9<:92@9899:444844,,/3-.0035621-1/1).,)-.,1132.;23/2:775/-,3164-%*0(+-*.0140+*-//121.-/0-/2./60234612),5.)/.,*'++20''2*&*,1-',-/*&*&%.+&-&#$$& #'$!&',$##"""$"#%$"! "#"   5S[^QIJ+#+-+(" + & ! "&#%"$),.61+#+$ &'+&),0-" #'.-02)06262,)**)$*,33:>75757;??==>>@IEGC@AEKGGC90&"%&+")"")#,+**0-//&$)((()"     % *# ! !""#!&"$#" " %%&$*00(+22.($&!!%$#% (! ""!       +  #" &  +    + + + +  +    +          ''1476,%%'      "'"&!"!"'"#%"$"((!#! $*$)'$! '!""'+,'%$&%%*$$+"',$"#"$!*&&%'&#%"#&&&$"%#&""!&().,)+*&",(&**/../**$)+*+4000-+/.*+*,)(.0///1/327338;>987648;9<988<:8771  + #$$.-64-3482,-(#*,&'3855=>;8<>5??>@?@EFMMJE?EJHFH?3.'((#()&($!!&+/14620)',,.-.(#! +  $%   #" "!#'#" "!"!""!#(,7<1,))%+&+"!#%!"" %% !""  !!           +  $ +     +    +  + + + + +  +  +      !(9?EBFGBHOMLIA<=?FIF>:2-(($(,*+('),1579;298-10520+(  *&  ! !'"!"#!"#!"!!$"""% !'+1:>9-*+*&%%'"#'(-$! "(',' ! !  "!!   +     +   # + +  + 5  +   +   + +  + + +  + +  + +    +$05SafkaK8(' "&2(  +      $! ' %+%'$"!!"&' &$ " %)$$#%##$#$% %#" "$&#!!$&$'(%"#"""%)&# ""!!"%##"5'!!),')(.2/))10).-*-&$)(%)*,-,-41-&#$!'+---015186.524/.231357584414473:600464158532775510%!%")1<>JIFCB=C@@DECC@HDC?A@=:5660388..067::66240++.*+)&&*/-43/043-1./2/156.,0.0/--024881.,*++&&'(1/.,.011+-031-)-00+),-...,.//,+&/03/..,)-0)).,,&%++/-,(-.*)'($$(&$%(%,*$%$! %#""%! # ! ##     ,J]d`U@E!(,17.*   ! !!/,0883207-33:)$"!"*3;934.% "/469596842@326321..48:>=?AKD=>>GFHECKRNJJDC<=CDEB:4/,'/2250,-.58DFIJDEB:7:654)' $"!"##' "&&#$#$ "#!$$#%.90++*(&#$(" "!'%#!!"#%"$"!"$ "#!"+!! !!"!   +  +    +     + +  +     + + +    + +     + +   +   !#+?ThrlYD4)&(&(   "$!" !"$("  "'(" ''%)(&"!*!"$$$$$" #"%"  !!$%! "# &##"#$"+#$! !!"$$"(+$%)&+*+1.%%,**+)'0+%&*'-&-1/,$&',,.,.000624/3163.0/0226487./3;:0021.115/-132173520-+&""#!'2<=ACE=:;=>>?AFCDHC?>><<:813434560-39<96/2//+-0+(*&.),222,02340-06556412041+65.(576-+'+*,."(//-*%-+..,-/0/.,+/,*)+-3,))*-6+,,+,.-).,&,)(%)*$$&#)*),''*()#%(%)&!+'**($"'#!&$"#! ! "!! +.G^ebZL<& .12:5)   """%##$%0)+0773+02=E?A81)&(1;?>80-  ,:=AHGGAC>@?>>>16816//177460300../,,&,-*.-05./5/5.52764431491+1+(/,40/3/*').*(/)('*0,,..,.04204+0--)+2,)()*'*1-+**.&*(*)*+$#'&#'%#((-,)&'($'"(##$!"*'&)$$""'"!" "!"  "#  3J_gi`W;%"'04465$- "$%&"&&'(%%0023:8403:JVWVLB64;AQVTI@;0&AWdhoofcb^`aeb_`^WPNRYX\\`ee`cegee[YZ_Zkbb\O[\[RPPMJFEJKGEJFMRZek~Š‘Œˆƒ…€~xn^F,    )! " #%#"#&# !""&""'*%-.0&'# %$(&&'#$")%$' "!###$# "%##%( !$!#$#  !              +  + +     +  +  + Y    + + + + +   +):EYeifWB9,+,%$#   !"!   " &$# $""% $%!##$ ! !)! ! ! #! !$&$$%%##!'.1,/+--/*0-+,*))'+..+.%(+)&*,.2+(,.32.040.2/-/2-1///0,+(+0.'(,./0,," ",033544281-6=:>>9<@>:95:<R&.,,+)&,/-*)'+-.0.1/)*++1*8/-/+'*,(.+('%#)*&(,0&*1-,))&$"%%&!+(/'%(,' $*!%""%$&+%#$%!"#"" %! #%"&;Qbljg]9"!,66:;8% "%*-0/2059:567;=>@AMPOQWOJMYiy|xpha\fs~ztsmR3,^Ž’–™”’’‘‰Šƒ}{‚†„ˆƒ‡…ˆ†}~yxxwyohqmka_b]ZYVY[ZSQV[[\dt‰˜ žŸž¡žš’ƒ_:#  "!" ! #!'##!!$!$$!')%%/,'#%"$')&#$$#*&'%#$$ # !$""$"" %'"# $)! "! + + +      +             +  + +  + + + + +  + + +    +@P`flkYF910,.'# '   "$ !  " !#% (2# '%'.'%""$)/*//,/.223-02)+0,-024.0/,'(0-1-)0,2+/-0/*-42//120-,+...+,+-.+-*.40+&&$%''!  *//36573>7579842136:136675235./.+4/-//,-++,01../*,0.2./2461-014+>/3/0/21-/305020217853130347347666658:;991/453=?8<>:<::;7478784;<<<<;=8?B>;8<<:96;=>?B=@A@@AFDA@>BDACBFOHFHLCFJGJJMKIIHIILHGGGHKKOOKLJKNMKGFGGKWgpvy{n^A,&2;;?7( 2HWYbhjgiptstxxz~|€‡‡‰‰Š™¢¨¦¥¥ž›œŸ¢¡£¢Ÿš€L% 0uŸª«®²±¯®±¬¬­¯­­¬©§¢¤¥¨¥§¤¦¨¥¥¥¨§¥¢ ¡ž››™™–’’Š}}}x|}~„~{yy~ƒƒ› §£ª«¬¯­ª£•oD&! #!"  ! *% ! !!$" "!"(!$&$'-,+!$%%)''*/" %%!'&'!" !)#" %!#%%!%-' !#"!"! #'    +  + + + +       +7     +0' +  +  + + +     !1FWbirpZD702/.,"   &'!"!"$# #$$"%$,2&'),/-*,+*//-/,*&-*%./*().125641006:759569?<<;::8<9>8:;A;;A:98<9><8>;7?9:;9<>=;7?::=:8:7==B?A?>AC?CFEB@>DAA@<:+& ,:DHNRZVUS[Yabflrwsqoosnoqrj_]Z^WVYYYVRROTNMSMH@=BJJGEIGJHISPMNLNKLPMNQV\YVUXWVWZab]YX[_``cfcbgeeagnmkghijjprnztvvvxxx|xwwvy}€}‚‚ƒ…„ƒ††‡„ƒ„……ŽŠŠ‰‡ˆŠŽŽŠ‹†“™–”™™—““”™™™”—–—™š™–——˜›ž¢¡¥¢Ÿ ¢žŸ ¡¤ ¡¡¢žŸ¢¥¤£££¤¢¤£¦¤ ££¥¦¦¢£œ™— £¦ ˜tO2&1;G<80 (NvŒ”’—œž¤££¡¤£¦§ª¨¤¡©¨§¨¦¨¬°µ···³³²®®±±¯°®¯¨Ž[- 5€®¹»¾Á¿»¹»¸¼¿¼¹¼»¼¶³µ¸¶·´·»»»··¹»¸µµ²¯°®®¬­ªª£™›”•œŸ¤£¦¤£¤©¬«¬¬®°´¹»¾ÀÁÃÅÃÁ½­W1#2# !" !"#% !"###"! "&$$&+*2+($'+,+0*+# #!"!!.)!!!"!"  #'"!$"&!$ ! &(# #    +  +  +    +        w+ +     ' + + +   +   +     +!#5LVanunZB814-30" $(*!/./*'*+./'((*')($((&+*'*."(**%%*0..&)),.1000*,-3210...*.432534355659>=GD?CACBCDKJHLOPS[LRPSQMQMMNJRORMRUV[abifbbijgjfjijkkmjpspomolsopqsprppsninnjnstvprroqurkiljhnifimrtry|vz}|€|z|ƒ†~‚~~zR2%$.Mo†’˜›œŸ¡¤¤ª¬°´¸¼¾½¾¿¿»º»·´ª¨§ª¥¡Ÿ£¢¡™—™˜—–•’Š€zz†‹ŽŽŽ”•“”•”•‘“““šž Ÿžœžž¡Ÿ¤¥¨¥¥¤§«ªª«­«¬«¬¬¬¬°±±°²°®³µ¶¶µµ¶¸¹¸ºº»»¸º¹º¼¿º¾½À½¿¿ÃÀ¾ÀÀÀÁÁ¿ÀÂÂÄÁÂÄÂÆÅÆÅÇÄÂÄÀÂÇÃÂÅÉÆÅÇÇÈÉÆÈÉÈÉÆÄÅÇÅÅÄÇÅÄÄÃÆÇÇÇÆÄÄÃÃÃÆÃÃÁ¿ÁÀ¿¿»½¼½¹·¹¹º¼»¸»··´µ³±´±®­ª¥§¨©ª§¡zM+"-6?66/% Hm~ƒŽ‘˜™•—“‘–•“‘–•’•›Ÿ©©§¢œ–’”—’“”–ŠrL(#>‚¯¼À¿ÃÄÀ¾À¿ÃÁÀ¿ÀÁÁ¿¹¸µ·¸½¼¼¾À¾¾¾¾¿Â½¹¸´³²´¶²±®¬¨Ÿ›Ÿ¦ª¬°°®³µ²¶ºº¼½ÃÅÊËÏÒÕØ×ÕÓÆ«q9 $"#! %#" "!!&!!$$!$"(#$%&&#'%.3+*.-00/*,'#$$"!!$%*" !!!!"# #""'!$"! ! #+  "#%&!!     +         'C + ' +     + + + +  +  + + + + +  $9GVesvn^F>54472)&+)//.+0-,,+*++*(,.'')%%*-''&$'(+'"$')-,&)+..1-,,/4:49=CA@FFBCNX][[bdfjoe_fgbgc__YVYX[ZUSSXWZZWUXdbb_cba`ifggcdfppojlkkpokrqmquststw{}„‡„…„ƒˆŠŠˆ‰‘’‘’‘“‘“—›œ¢¥¥«°±´´±±²²³µ´³µ´²³·µ¹»¹»¹¸¼¼º¸¸¶¸¸¶µ·³´³²³³¶¹·º¹¹µ³²±­ª©¬©©©««¯±´µ¸º¹¸½À¾¿¾ÀÁÄÄÅÃÅÇý‰F-+B€³ÅÍÒ×ÖÖØÛÞãâäåçèéêêëìëèççåããáßÝÛÚÙÔÖÔÏÎÎÊËÌÇÆ»±²ºÁÅÆÅÅÅÇÈÆÇÈÇÆÄÆÈÆÆÈËËÊÍÌÌÊËÍÏÑËÌÎÐÐÐÐÏÏÑÒÑÓÒÓÒÔÕÓÖ×ÒÔÖÔÕÖ×ÕÕ×ÖÔÔØØÖØØ×ØÖÖØÖØÙØØÙÙÚÚÙÚØØØÚØÚÛÙÚÛÚÚÙÛÛÚÜÚÛÙÙÙÙ×ÚÛØÙÙÙÚÛÚÜØ××ÙÖ×ÖÓÔÑÑÐÒÒÐÐÐÍÎÏÍÉÆÄÄÂÁ¿¿¾¹¹¸¹·³²­­ª¨¥¢ ¢¡žŸ›š–—™Ž‹‹…€ƒ€ƒ|vreK3"%!-8/48+!4AKVTTV[^`__]\c\]a_ffhfb_hr‰‹ƒ~tc]fjh``ed_WJ9'!9ƒ³»¿ÁÂÁÂÁÁ¿¿¾ÁÃÂÁÁ¾»¸¸¸¹»º»¿À¾¾¾¾ÃÀ½¹·´µµµ¶´±°­¥¡¡ ¤¨¯±­¯¶±¶´¸¹·»ÀÄÇÇÎÑ×ÛÜÝÜÖÀŒG*& "!"!!!$)#$(" !"#("$(,.2/3/0..+*$'#"# #%%%#$'-#!&$# "  &#"#& " !!$"# !###    !          +      +          +        &>M]mwto]K?<85720:Tbfgchkgacaadbdfc`Z]]\\VX]^`^adc_b^begjhmknompnos|{~ƒˆ‰‹Œ“–œ¤¨ª®³µµ²³´³¶³µ±¯±®¦¥£¤¤¢  £Ÿ¡£¤¤£¦ª«ª­®¬ª¥§§§©¬­¬³´³²´²´µµ´¶´¶··¸¸¹½¸º»»ÀÃÁÁ¾¾ÂÁÁÁÂÂÂÂÅÆÅÄÆÄÅÇÆÃÄÉÊÊÊÌÎÎÒÕØÚÜÜßÞßââßßßàâßààÞàáßàááâââßáàÞÝÞßÝÜÜÝÛÛÛÛÚÛÜÜÜÞÞÝÛØØ××ÕÓÔÔÓÔÕÙÛÚÚÞàÞßáÞàâãåäæçèææçæåàµe6/PÏáæëéìîíîòóôöøúøùø÷ööõôóôôôñòííëèééèèæåãáßßÞÜÙÏÄÆÍØÝÚÚÚÜÝÜÞÞÜÜÝÜÜÝÜÞÜÞßÞàÞÞàÞÞÞßÞààâßßààßàááâãáâáâãâãââáääåãâáââäãâàãââãââáãâããááääæãäãáââãâãââââááâáâáãáâáàÞÞÜßßÞÝÝÞÞÜÝÞÝÜÜÚ×ØÔÐÎÍÈÇÆÈÇÄÁ½½¸¯«¨£Ÿœ•“Ž‹†‡~ƒ|urnigfged^a]_[_ZWTQOKGIEBA?D=>?4+&(/777'% ).*.*+,/475388>;FJGCFEAJWekniYVD@MMC@KHB<62%6€«·¹½¾½ÀÀ¿À½¼¿Â¿¾½¹¶´·¸¸¶½¼»½½½¾¿¾ºº´²³¶µ±´²±±¬¨¨¦¥¤§¨¬­­­®­®²±³±´¶¸»ÀÄÆËÐÕ×ÓÁM& #   !##"$"%&# " #!"),./40.-,'0-!!!) !#"$ $!(()"#!#%&$#!"$#"!# "% !#""% ""!!   +                  +   + +  + + +  +  "%AZamzyl^HB;9:77>X”šœ žŸ›•—ž™™˜˜šŸ¡™š ¢¡¤§¥¢«ª§«««®¬¬®¬ª¬¬©®®¯²³µ¸»¾¿¿ÂÆÈËÍÏÑÑÑÑÒÔÒÓÑÒÓÏÍÑÎÍÐÍËËÊËËÎËËÎÏÎËÌÎÑÏÐÐÐÐÌÎÎÍÍÎÍÐÑÒÒÐÓÕÖ×ÓÒÕÕ×ÖÔÔÕÖÖ××Õ×ØØÚÚÙØØÛÚÙÙÙÙÚÚØÚÜÜÜÚÛØÚÜÜßààãääåçèéèêëëëíìíëëìëííëëêêëéëéêêêéëëëëéééçèçççåççççèèçèçææçèéçææçæèèéëëêëíîîíïííîïïïîïðîîïíèÃzA4R¡Ôåêëëðððòõõùùøùüüúùööøø÷öõôñïîìëêëéèèéèçæçåçãÝÕÍÌ×ßàââââäææäääæãååæääåææææççåääååçæäçåçåååçææææåææåæææçæçéèçèæåèçæææçæçæçæåçèççææççæææææååæääåäæåççäãäããääãááàÝÞÞÝÝÝÞÜÙÙÖÑÑÐËÆû·²©¤žœ”’‰‹€xnjd_[RRNKNGHFCF=9;<649<63451333,)&$&%'#%&#$ "'3623& 1 $()#$+-5@:::588GUa`__T?8=C@8;B?91+&2sŸª°²²°²²´³¶···¸·µ²°²¬¯´²²µ¶µ··´µ¶¸¶³¯¬­­®¯¬®«¦¤¥¢¥©¦££¤¥¨©©§ª«®°«¬¬«°±³¶·¹ÁÃÀ«I$  $ #"!"  #%###" $#""%10-35/.11,+& % )&##"#! ""&#$ )!!&'(!""!% )$! #  " ##"          +                 + + +    ",F[bjw{n^KA=8998Be•¨­µ´µµ²°±²²³¶µ°±±±´¸³¶··¼½¿ÁÃÂÄÄÇÆÇÆÊÈÇÃÀ»»¹»¾»»¸¸»½¾ÂÄÆÆÈÈÆÉÎÏÐÎÐÒÓÒÒÑÐÑÑÓÖÕØÜÛÝÝÝÛÛÝÝÞÝÞÝÝÛÛÞÝÜÛÝÝÛÚÝÜÛÜÝÚÛÛÚÚÜÝÝÝÞÞÞÞÞÞÞÝÛßßàâàááàáâááßãââãââäãããáâäåäåäâåæçåçèêêëìëìíííððïðíîïïïïîìïíîííìëììïííìîîììëìëëìêéëéëëëëììëíìíððîìììíîîïððððñòòôôôóóòóòòñððñïìèÃ|?1X¡Ñäèêìíðñóô÷÷øøùùùú÷õ÷÷ööóóððïììêèêêêèéèéééééçáÛÖÕÛâççèçéèèèéèêèèçèèéèééèéçêêçèèéèéèçèççèçèééèçéêéééèéééçéééèéèèèèééèçèèèééççéççççèèççèçæåæèçãåããäææäããßßáàßÝÛÙÕÔÐÏÎÍÊȸ´­¨¨Ÿœ‘Š‚zpd]`e\UPOLFBDA<9/./1.+,1(+)(!' 1%#( #"%&'48653 & !#!&2;:;647>O_aa`TG;=>B=5@E>5)##"  ([}„Š‘”“–•˜™›Ÿœ™————–›Ÿ¡¤¦¦¢¦©¨¨¦¤¢£¢¤£¥¢£ž›œœ Ÿ™š—™¢¤£¥¢¦¨ª¨¥¤¨©¬©«¬®¯¨˜h=$ !! $$  " #"(" $ ##($$$"#" #%+16-314,,-1"### ''#%#%##''&%%##"!#%#""#$ ""%"%"## ## "#&# " !"      +      +    +  +   H)&/G\chqvnbSGA@@?7?\†š¤¨«©«§¨§©©««¬§¤ ¤«¯«¯¯µµ·»¹¾½¿Â¿½½¿ÁÀ¼¹µ°©¢›œ ¡š˜™Ÿ££¤¦¦¬­«©­±·´³¸¹¹¶·¸»¼»¿ÆÇÌÒÓÕÖÕ×ÙÚÛÛÜÚÛÛÙÚÝÛÚÛÜÜÛÛÚÝÛÙÜÚÙÙÛÞÞÞÜÜÞÞßÝßßàßßàâãããåãâãäââååäåæäææåæççåçæéèçæçèéêêëëîíîðïðððòñññðïðñðððïííîíîïîîïîïïïîïïïîìëëíìêêëëííîîíïððïññðïîîîîñðññññóóôòôôóôòñññðïïîíêã¾w@3PœÑâèçéêíïðòóòôôöõôôòðòòðîíîìëììêéèéëééêéêêéçèææâÚ×ÝãåçççèèçêéèéèèééçéèééççèéêèççèèééèèçæèèèéêéèééçêëèçéêêéèçèæèêêéêçéçéççèçèæææææåååäææåååääâßÞÜÛÜÜÚÝÖÖÖÕÒÐÍÇÁ¼¶°©©¤Ÿš“‹zyqkd_UQJEB979=94001200.**!"&$" $#$  "  %&=<3:2#('!$'059=528:FUad`cS=:>BB78!'(&"!&"&"#%&$"%#")$#%!&&"#&& !!"&$ !!" $!    +    +  +     +     N6(/J^egsyp`UPLKD=57DZku~~|uvx}€}wpns|€ƒ„‰ˆ‰Ž‘”˜”’•”–’’’Ž‹„{widd`e\\^affhnmoqrutw{€‚‚€„‡ˆ‰—œ¤«®­°´¶¸¶½¿¿¾¾½¾½ÂÄÁÃÃÄÄÂÃÆÇÈÊÈÇÇËÎÐÒÐÔÑÓÖØØÚÚÛÜÜÝÞàááßßÞàáåãääãäæâåååæççèééèèéëéêííïïðòñññòññññòñðòñðñïïîîîîììíîìëïììíííííîìêëëìëìëîðñîííîîïïðïîîîíìíîðñðññòóòòóòññïððîííîìëéá¼zB2M›ÌàæèêëëíîïíîðîïïïðïíîíìëìëëëëìêæéêêêêëêëéééçåæàÛÙÝâååççççééçèêêééèèêèéèèçèèéèèçæèéèèèææççèççéçéåæçéçéçéêèéèççèéççæâãâäåååããááâàßÝÛÚÚÙÙÙÙÙØÒÍÈÇÄÃÀÁ¿¶³°¬­§¢™–Ž‰€umkg^\XNLKGED=@74.+-.)%)*('(%**%(""#%! *!  +;=7:=<;7;@?7.,-,+&/679=>@??@EEECC@>>AIRPSRYXTQNMMIPWSTT^ciglmiecchdcfcZWVW\^`fhlpx~€ƒƒ‚ƒ‹‰Ž†uT/  ! L"    &)!"!"!"$'""%!$ $#$+,++*,03;201%$%"*(%%$"%%$&#'&)-##"$&$"!""%%"(!&!!#$!"!  "  ""%           +  +   !(3Rffhvzvjcgk_NA86759>DE?FECB>=BFF@B@ADHNOPPMTPNQYSQXXZXRRRNKC==:883*4766:=BA=:?>?CBHHHIFEFFHLOPX]cgedkqspns|€€xx|}~„ƒ†Š‡’’”—˜š¢Ÿ¤§«¬°·¸··¸½ÁÂÄÄÄÅÉÊËÍÏÑÏÐÑÒÔÕÖØØØØÛÞÝÝßáâäæççéëìëììíìêìíîíëíëééæçæåæççèçæèèéçääéééèééèçæççæèêëêéèèçèçèéééêêêëëìììììëëëêêëêêèèèçåæççåäâܵr>2HŽÄ×ÜââããââääããããâãâàâáÞßÞÞÞÝÞßáâÜÖÛÜÚÛÚÝÞÝÜÚØØ×ÔÎËÍÓÖÖÙÛÝÜÜÜÚØÙÜÝÛÜÜÝÝÝÝÜÞÛÙÛØÜÛØÙÚÛÛÙÙØÙÙØÙØ××ÖÖÖÖ×ÙÙ××ÖÖØÖ×ÕÓÓÑÎËÇÄÃÅÈÉÉÉÂÀ¾¿¾¸³±­ª§©©¦¦¡œ‘Š‡ƒƒ€{{vupkle^WSRPLFB:?97703010+).,(&!#!" #!$#)( ""#"$.?=:5<=@>2/,42+" (,,./03224347421416?CBCCGKD<:5378:75>IHKMTZRNNMNHKFF=89<=9899;EFJNLMQSOSYZ]]ZS?-!"%& ""!!#!! !!&#!!"$%$# ###! #$$"%#%',*,00.20-.5""$##&%%+ #&+$%"#'&($ $!$#!!""" $#!!$ %! "!!" (       +     +   "'5Seggu|yz‰ŽydN=3+)% &*%)#%&!#)$+'/+)(*2/*14./-/--5-/./02,,'*&(%"#" &%&%"%(+(2,,),*0233+.(+,0../233..65;=9=>:?>9:<7>=46?@?BAFIEEIIMIPPNOPUXaa_fjjhomty}{ƒ„‡‹‡‘Ž‘“—› ¤¤¥¨¨©­®¯¯°¸½¼½ÀÅÈÊËËËÊÊÉÌÍÌÌËÉÄÆ¿¿ÀÃÆÈÇÉÈÈÊÈżÂÇÍÎÐÍÌÊÊÈÉËÊËÌÎÉÊÊÉÊÉÇÊÎÑÔÖÙÛÚÜßÝÚÚ×ÖÒÍËÊÊÊÊÉÉÆÃÄÂÆÆÃýµ‰M2+;`“«´¸¹¹¹¶·¶¸¸¹··µ³´µ¸´®®¯¬¯¨®­°²«¥¦¦§¨¬­®°®®©§¥Ÿœ™šœžŸ¥­¯¯­¬©ª¦ª«¬¬®³²¯¯°®¬©§¨¬¬¬¨¥¤¨¦©¦§¥¢©£ ¤£¢ £ £¢Ÿžžž˜˜˜‘Šƒyz€‚‚xxwymhdc^Y[]WUQQJF=>=;:=@?89?:;1152/2.-*,*$*)'!$$%)$$!!#!"$!"##" #"   + "8DHGL=+  $%*(/3795/:CO[cd^UPC@@B:7;?==4..28<4&!'%%#&%))023/0,-.13419>?CIC?:82+/33+.;BDEEHLFFGDE>A>:4/+).-#''%%)'.,/5424./2168/(! !$"!! %"#!$!&"!%("%#&%""%"&$ %$!#$%(+.32+/,,*)("$*)%(%#&'$ ,$"%+$%$%!#"" $$"$(!$ !! #!""%$!"& !  #"# !       +      + +     *7Whfmyy{yŠ—–€kR=1%"#"!""$&&%'$%%&(*'&%#&)*($#'+/*(&%#!##+&#"$$&+&%)-*&,,$)&(',0-,00())//-746+1265#-()0)+,--1/28.356472/4143:B;7;@B@?@FJLJMPLSSTYWTWRT]cfgkjlojorvxxx}z|€ƒŒ“˜˜“•š‘”™™•–‰ˆ‡‡ˆ”•‘•—““’”—› œ˜—œ™š™——•›—–——••—œ¢¦¬±·º»¿ÅŶ·±ª§ ™™—–š”’’Ž‰‹Š‘‹‡~Y;)'(AYr€€„…z~}~z~~}xw|ytvprttrqxvtokkkkssvuosslkddcacclluvvswrnnkooqy{xsuvxuqpmsrtopmjlommjplggkkkfklnlhgefhlfe^ZWWWPHMRSTSOOJMQIHCBA?><;9896305--1.2/20..2/0.1)-2*,&''$).*$"""$'!""  !! "$! # #! ! # $      #2MZ_\YN8()  %13699842AG]epo`XMCHHBCB>=625.-/(.;BFEHBDKKJHCBB@92,(+'&"#$",&%&%-2..,'-00))% ""  ! "%!+$#"!!##!"# '$'''%#$# %##)$#$%%)**-1--0*(+&''(&!'!""(,(& &"##$"# $!"" "& &$$#!$%""%!%$%###!!"#$!! #!!!! %"   ! )( + + +   +##-A]mkpvrpnƒ™—‰k\C2(# !! $"$"%$"*.#(%""$%%(+$&(!!() !#"$" ()0&'&+*(%)+*.//.+))//),67*+1/)*%'/(#&'&/*('(%',--,-+.+&".,,+2047;6/532:;:<8878:;:6;;.'#-=IPRTWYSRSPLOOQPQRWSMJIJOKGKKHLHIBBDADILDGFEHCA:7<@>E_PNMQKICJJCDHKJIOLMMHAHFIJGIMKFGDJCIGJHDIEHAEMLEHCBFNKBE>?A<=;;7=@=>>:;<>:6;6684212/1.222..+,(),+'+,1.-/.*/*(''$"'('&&%"''&%# !## ! ""$!"! #&#!"  +Jasxtm[>/! !$$'14:=8536CUfjnpcWJDHIHABCFM>31+ "(')0,/11356432-)--/+5:>>C@?<8:51-(-6=EHGFBCJMGG@QR=824,')*$$$!$$#*))-4-,)#'...+"#&# #!!"  '!& !#%$#"!#&$"%* "#"$##! "%�*$%)*-),-.#%%&(+,(!)$0)*&&"#"%$"##!#$"$$ "$ #)&&!! '"#$'""$ "" #&#  # !       'R!  +  + + +   #"&0Gcmlqwulkzœ¡uYD7,#(# !! !"$%%'" $(%,'""$"#&%"!$$!!%().+')--'(,+,+32+-*()(,'+2*,(/%3$%/.%$&()**.,/'#'.,+-&&($((&(*+-23/*/+-1./1.,.3///110620:><7795:8;;::69AD=>@=@BFGIGCA<<>>?:<>BAA@@A;<:54>DEEA?IJKHJD?BEB@=@CBCA>=<70"% $48;89;:C<=<;>;::A@@??9?@;;<;89<:9978:89878752;51/52/FD?JH=95542AE3361:;=831379<<<@?;6;75:<>B<8?<;5:=::779?;<95;5634776775:5244>3/1234/.+*1-..0/-+-'+*,/,,+,0).*'/+*)+%&)-)&(&%%&##$ $*!  %## %'%%# ! 1Kgq}w_71  $$ &&,278=6/3ER_gkgb_OADJGCDGKGG?45>C=:63/,,55<>987,)*($ !" )(('-1/(''.2,'$%"!   !! "!"# !!""&#'&#"&+$"$$##$&$!!#$##&&$..-&#*-,%''%&&,'%%"7&%*'##%*$%'"#"!#"$ &!)#!#'!# !#$!$ #!" !! #$#!   !$ &   + + + +     +6Fbmmrwvne{¡­ž{Y@6,$' !""! ""%0%#$0.(+%"" % ! %%$!.'"&%$#(/.(-(*((&'+,/02.3++)/)(+.,,&)"**'-+'$*(**+.5'$',*,'&-&-,)#&&()//)*,*/.*)10,.1+**/)14-.650047153473/27878754;;??;:<96177;759::62052311/6<>867=;>@B;:;782299:><=D?CCD==@?=998;<;8;96644229>6:632+""!!%*2:627:661232647769=808;676547781453371223313-2...1((,6:85;5210,,,-/,2641/1319=<966435116498;707674554425536485327025402418-51-12////+5'+//*+,-.-*1'+++.)-0*+*+/*.+,,((('+)&)&/+&$! "%%)!##!$)&'$!!$ !*0(!-@N`ji_D/  !!#'4::655;MZbibc_UIBOKHEHLJLF@8:FJ[UH+(&"(-0+0//0.1,)+)'*12?;<7>=7:61.1,+0>BHOJLLLCGKA>??973.+&(&"  #&*))).'"&'+-$"  !  " " !#" !! "##$!#$$' ()'%&)%'% #%#")$&%*+&%)+,'+-($*%)*$# ""!$(($#!"*&*$$%% ''&!"##%#",*!".< "!!$!#" !)!#!  %  !$   + + +   !%"):N_hmuz{lcz¡³¤ˆbH4+#(" " $' !""&#*,$# $/)*'' "%'$#("'$" #-#2.,))02..))+,%)/&,11/1,-)0*(,/0+))$(.+*).)#()&,6-,3,.10)')$/.0'"+)+('#,**/,--0.+11/0.1020/162..599532/33151463716:775873410259389632.37742544;53=7:9>;;><;.[G/8;76;6:<===::57<67796358553235783:544+!# (16638@<6.11020/267<4676262+51.113972<25210/*(/.//0*),114620.)-+)+*(*.00003,5778714..00031/58501454346265300075321/1285/31,./-0310-/,-)6031),-+)%0.,-*,/..0-3**.-0.(%((&((#%'&-'&$ ####%"!!%))$!##%&%#!"$(  + (8ASSQ<*  ##$)0890466EUaiihb\UIGKIGFIMIE@9ACOTTZH/ '%%./),211/2,$")*&)5=?>9989=3110-&4=FIHIKKIKGHF>@=@42.*((#-# "'$$'"#(-+%*!#!#! ! "!$#!!!#"##!")&$$)'#+((,3" #($!%!'$)-'+-0'',-"'(%%& '&#%&'&#$)$''.'#(%!$(#"$ ! " "#'"##&"! #" $$!"!!" !    !  +  + +  $'$$!" %(-4LŠœum~wd_xž¯©‘lP7,$!% !!! $#!$%"! (''$&)$!(3/'$&!!#!!&#$$'+%& ;1(#&$'*--1.**++-..04/44///,..00-1-(()+,&,0+$()''-+)/2598%0.'+.,++-*+& %-++,,*/0.,.11/249-0/353306:88533564212585533663355830+14758410,.1965234-268:7>:@<==;;9647847:6469::==92Y913848301464347774/67' !%1141AA@<21;11003650<=20035,,.,6442746413/.+'(,.-332/1003013.,-+,*0+-10*,-+2./5450)(-/27/82/65102042/15498201576733:772212//421///023.,4.-0--(-)+)/1/)#-*..-'&'.0/)'#)(%,#%*%*$&&$!  #&#"""# %'&#*#$""" !&$!$6BJGC1" !&#',4;<557@M^hgfc\ZOFJPLGHJIKE=:@IPZXXO: $%#%+*&-/.0+/*"%%'%(08A==:==:5431-/2AKIFHNOHMLME>?C;51)./)*#("!! ! !#&-(&&" ! $"" !$!# $"#$ $ """( #%("%$('-)*$"$&!"$$&'$%$&*'&1.#$''"'''$$( %')$)%('&'((* $&!#"$ #$"! &$!!#$%&"#""# )! ! " "" #! !!! "  ! !  "$%     + !)'!!#$('8Nmt}xf\l–©¨šyQ8-+#!#%%! (! #!" &%!$"$#"")-('2"#!&!($#$+),,'&" %'(',+&+6572**34074'/5440+(/1172,4+-/**+)'1+#(+($),*24:8,%))/0-*11-*"#)-'+-),2621311044/3.,43464:689:654593345:48830?625;>404/635150-.-,33223511597736::>78:7<7957677588::<:::494844/-00592-2424)010&#!"&-2.5@=8>3640./36663,4//0443..-27435.1.32/-)*'*)/+-/13.032110.0,+1+,,.0-.),5./72-0+-,034:2041/31;32103459842354:5327;:1343/12125-2212/,/-/0,+'&*)+,..*&*'*,+(('12/-,#(*/+*(!%*&"! #"!!'#"#$!!"$#&$""$$&#$"!()"  !*2AEH9(!#"$,,49??>66;HW`hea^VPPMPQMGKING?>EJRZ_^[U7'%(-$)-.((++**%###%&18A=<99;:8454&.6=AIMSSPMKNL=?@<<73)+0,&%!"$*"&!'!"'*)&! +&"! !!""""  # !"""$! "!!!$#!'''(#$"%&%&'%$#%'"#"%%&%%&#&))($%*)***%,"()#(-,&&%#+'$'!"%*$)(%""##&! !"$"%#&# #" !"!!!!" ! !!%# "  !*"" "##$!!    ") !*#!'(4?Qqtsw|sbT`‚¢šY=.('$ " *&"!%!$&'##!%#)()*%*(%$))"'((*.///$'%'),(+/)&.8935&0:5/4/,46:1/)*,-38,.-,0*)-&('+0,1+%%).+1561/50/12*)*,,)$')('.-11055252266403.1016<;:89=<886:4=316832335?:56;7/44/2341363352/0017<8536456371:45447387247564567;487:8886316015/.//46.1+./-!  !),2.671397331/215.120/+0024340106453.0*.0.+,++,-,)+/.1..+02.10.3*'1.-,30*.-14-13./1.01584/-*)31122652/26343//2723;55<763350/13/245./22-1-/2/)($&)*)2,+()'),-,(*0+4&*'')+0/./#%&$#%$!#'$#""&'#"# $'$*&! %!"/!"")%#3=@B9*" $$%*,0:BKDC9;DUahgcaWURKOOSRQLLLFCCLT]_`ba]87!"*-&((%)&&(.2)#(! !$-;>@?9679377.&22:@LKOPPQLKJC;;=<60.1-(&"!%# &#&! !*'(*!!'"  !!  ! ! #' &!! !$##$%"%&#%"%&%##"%'%$#&(&%&'%&&')$()& "1#(7,!&.0-.)-%$'%+'(*!$$")''$*!!##$&#$%')'(&  !##. ""!!  ! !!##"# ! $" "  "'"!)  " !!!'#/*  && !!! "!%)4Hdvvt{ƒt`LOn“”€_C--($%' !!"&$####'%#%&#%%')&$#""$.'),)-*+*)&'%''**..+*3:922*.),*030367./,+*)1.+-(8.,++&&()*-0+%&/4+115.-:9/31-0&*3'('%&))-/0371522-3749203..6967:776635226340./3336988<8374+0001/.672/13-736963133463545623552676/0335322713364587.002530/,0121..43)&##)#%.0.040255,,5363050011+,39.1-001744/000,.0-),./0//.3/*,*+0.1001-.-,-++'*+))+33/-2423.2450/*/10155325514423462257854/21,-265821/-/13915/111/+-*)'(,/./,),(*)(-&$-&)(')'',*,(0('%&$&#%"((%$#$&&"'$""$$'$!#"&$%(#&!,3=??8&#%(-/375<2-0()&$ & "$%)%"! "!#  '!!"!,""& ""## %)$$+##$%$*$"&'$%$&$-.&$$"&#)*)(!"&(+'++,$#)(!$&0)00)+&''$!$*)''&#$ .0'%!"%!"%$!$&(&-"#$# %!##$$!! ! !$#"!## "#  ! ## " !  &"!  ! ""!##%%'# %$!!! "  #" )48Ljxvt}ƒs]IG]vŒ“ƒbE3)% " ""  " !$&&$ !&&#%"#!%#&"""!##*.*,0,*(''&(('+*'(&-1-00,+%#'-/-12130)&&-&(-(.'72/)+.-+%0.&(&(((*.-*)02@3,,10%*+**%$&(-+**42101-.3522576-063223133.0680(21613304418?>8574.00/..2483-/03552265043441243542272246351631335500340432-022200-/./,0312*&" "&-+++22/7532/043/22321.99/,,+/17484/--2('-+./+10+/6..0,-*,/1.-),/++*0,-(,*(.-350.5022.4502,0.-28531409303030:443/0..+/+,1856154,*,01/0/(*..*'-..,%*-,.---.'%(*)(*)-/+&)-1,*+&%$&%#% ''&$$##($%&&%'$.%#""%#(#')" $!)! )4=B@9%&-+238<<;=IRLE?=O_hnjcbdbZV\^USYVUOEGIUb]bbff]I6!'&/****),+*//0*,*&),*,8>A?A=:845413.27@EHPUSYRJFEGDA><7)'''+$!!"!!$ 4)#"! ##3 #! ! !"! "!%1%##!   "'""%!&!#$###%$&%"#&')&%##%"&*()%&('(''80$!%!)$(()),'(#%%#$')($'%*,((&"$%$ ' $$&"'*'"$/% #!""("!$%""   ! # %+! !! !"! "" !! %""%%)**("!   "-" ! !!"  !"#&+2:Ni~ƒz{ƒu_F@TkŠ•‡pI5+)!%"#!! ! "$ "$"#' $#!#&&!"###$&*-100*"#%%#%&(%&'%(+(%&-("!$&..0..-)'%#"&!-'((53)*(352+&'&2+%%%-.,/*.49H..0*((&(-%%% (/'.022/.+*.021216-00/+0/.43*'.6.+0.2634440118:A83/630/../0101//264-,4.13830111161/16512574024024242031201/*100/++./1--2030) !"(+()-2//1:8.-/06203033732/+,/.3584.,(&&+,/,..8/0107/14,*00/*1,.9+,'-1.7)-.3.634524305854544,,35763343//0./35703/0.,,3,2633/291./'.2/+/,,+*))))*))*,'-.-//-(%())*0,+'&-'.*+,)$#&(+(%(''%$"(&),&&#$'*/*!! #*'%""#$ #5>FG?&-556>BCFHNNTTMDDNdekjfe`]\Y\^XWYYRMCHP]dheaecXD5$&!#*/-*.-+'),00-+')*/34;2)$&$##"# !"# '& %# ""  ) #"!!!""## " ! #! # $#"#$$ $()%(%$%#&%##"!&&&#)$&)&%,-$,/$(%$)/'%+&)(%%%"#!'$('%$'$%'$'#%("&&# %$(''$!%&"" "#! !$ %"#""$#%#( # ! !#!"!#!!" #" !"% !#  !"!#!$#  +21-)     &'  " " #"'*/6Mk€€w{}nZ@;Mmˆ™sH0'" !" %%  ####" ""#" # %"#$'&'"*%&-1')#*%#%%$#$+*(*/)! ##! !),'-) !#!")/ ',.-+&,...-0%*.0.)&-/1,%+-11<*2,).-)'%'$$$-+*)-12/')%,*,,-/00-00-./-12,)),0411115//4/0316990/2302*+,/10..1/00&+/.2430/32145./21440431004232012/-3//11--2-**./01+*0,/.''##" '('.+,1/(//-/241560.,24051/2420/42,3)0')./0/.,'///4,10501051/62/0-+-.1+2+-,12651674832459762.2114245443.1.015271/,12020<64532400-),/1/.,+0+0-*++(.(,/3.611/&)*,*+../,*.040,-+(#(**)#()*-'(&)-'%#&''')(($%!!*,)%"$!!#!")$   3BDG@*3@EA?EGRYXRRTKRKS`c`_afZYUW\c^VXSRGHGQ^cfcdaaSD3&(2,,)$.'*.*,1)*),-/;;BCBC>>74*)0+).79>?HMOMKFFEEE@B>;/,&&" ""##&($!  &'!!&# $!"#!  #&" ! !!""! "$ ! "! "$"#"% $$ &!#'&%*%(($%%))'$#!# %"!%('/)++*),%'+&'&+$)**,+&#%%&$%$%*,%)'$(%'%$"#%$)'"('"#&(#! % %!$$"$$&$&"!"&"#! !# ""$!!    """ ""  " ! "" !#"%!  $#! -./-)# (* """""" $" #$(+2:Qm€~xwwpW@;Ggˆš˜xO1%"!!# " !" !#&"## " "!! '$'*$*%($%&#"6%)0&!#"#'+$*/*#%"$%O .*&)"!"#"" &*5.$.*+,.%'( (01)#06,,/''+3-,*,0-/+(($$()*+1,'-1.+&((&%#))052/10./.2/51*'++-033150/2,..45582..21301,455/0.**+)1011//3--1264/,2339622+.204/-//1.../02024,(+).+0++-10)0.""!"'0,+1/3,/),40311553//200468654/4250/40/.+..+/.*/..01337051561034,3335.*,-/.59<426:68542886:9411/2535336111/6495503-10835:9338120.+,2241-*/2-01,*+1(,4/,521/+)',0*-112+/+712.+.'('((0*+),,-*&,.-'($&)+).'*()(*(-&$"!"("!,5CFJB-% 0HKIDFIX\YLLLOOQZf`VTX\WQSXY^Y\SLKFGI_difdaa[JA0!')-('&*,)&).+-*&'),38>B@;;>@=3."--).5<=?HDOPEFGCFE?B@:0*&%!!$&"&+*)$ $"$!!$&' !  ! "!""! "  ! ##%  $$ !#"!"#!!" &"'+!($#&'&'()&&)&$$&!&($(++--+.+./+'&/')*)''.)''(%$')#%(%()(&""&&"%"#%$"%-,' '%  $"##"$##'"&#""##&% #&# #"!#$"!#!!&#""""#! !"!!! !!"#"!!  ! ! "! H "$)+-'#!#"$'$!$$$&"#%)-3=Vs€trukQ>5B`†žš~O5)#(,#$#! $#"#"!!#+#"!   $&$ "##&,*!$"(-/++,!! "/$#)*+$#$9#(X)+(&#*!#$($"0(*,/+')&*(%#','$//'./.,*)++,(%+,0*&)(/+()0-*)./+'%(-%%(&+1002./4+,0//.,++-3552640145512640-20832<364100,+/+-0230,.-.22701/20245265-01130+,.0--56/.2214)),+*(+233.14,&!#.-*,/40-1+(/110-1264710127;1344335.*1/-2)1=:,+,-,2.-181361./2214418561.02135=?6754995234<8>=563356446112375257461208,9128978421042//8/00-25220.+,/-,.,0.40&+6*)./011-,04.531+,4.&-1Q%)*,1()$*0'1*,(.1)*+-*&)13).)*'&#"+* !# 3HMND4/!7RYQF>DOKIIGMKPPYjdRNWOONPV\VTQQJFGIR^cfe``YOIA0#%()+*.*,(('2+'+,'+1:?A?;<99;443/0,3@C?CEFOOGG@@@FG??:6-!#$" #'(/&)" #&&$'+")!##!  "'  !!!" #"!$ $" """!$#$"##!$!"!!##($# $#$%$'$""$)%$'*.)%'%'&#*'#$)()..-.+.($/(&','%+(.)(&#+-$$%(*#!'))&"$%"$$*&"!&(,"&###! %" $$"#( &%%&"$"%"$!#!""#$ %&!"!"&"$ ! #%$"!!!!#"#"! !"!!  !   !!# ""  !"$#$! ! !%%%!"$$ !# $$.6A^v†ƒxsukT?;A^† ¢~V6-)'%("!!"*$$!)$#""%#" %$"%' ##!"&(!#"#&&% !$$&&'''$-1/)1%$#&#$&/,#('$)-(&#&)%',($#'''$+0)'"$'(%!$#'%%()'$.12-/-''-213,.+(+2.)&1-++0/&((&+++)'+034/3,.-/45011-*-,26435//1174531,2824531:5*+.,,+,--749*/,1/203.137/2149500/22/37///-.15124112.-'--,*/-3221,!! $"'..260/.14*/14241075615362533175620/00,,.2?=-.,-40*),..135822493703993/17716:>=84696542196:;753/11362444357559:4642260058:5401.045107133.01/3--.0/+-,+++4*(&(-*/1200-325285434-*-'* )++*.-)*,+,4-21,+,--..(3--)+)&)&!!/%%%# #2EOUJ1""8`f[JB:?;8@EGNINUhl]RYQLLPRSTPOPKIKKT]c]edVWLKF3!!"(*)-*+))'('-((,0-26<15649277652867431.//0145832367789:62255457662210230653/531.+,00./02+-,,-.5/)(#)'+133.-.764463/3**',)*-*-*(.--*'-,+/0,-,-),-)0*%('&'%$##'! $#5JVXP3#%*CcmgZL?8339>@CHGIbmeNQMNOPPSLTTTJHN[NYz~V[SKKKB5!$ &-.12/-,'),*/0.+/-3:>PJ?:=:4322065;?IJIUNVXQKGECIFC@F71.-0'"&*)27.,&"''+()-1-.*%#!!&$"#! !! $"! #!!" %!!!" ! %%#$$"##$$&'(#'+(,'"*(0)*)((),+('%))(')1('')'))/.$$()6*(&)'&"#&#!*$'($(.#&))('$&$(),$&&'#&#"!#! $# $&'%%$!!%+!"$""" " !$!""%!"" $ #"" ###!$%!!!"""#"!#! !!  !! "!! ! !!  #  !!! !$&'(&%(O."%%'.4Kl‡†xsqhTA:=Z†¢ …\@5*.,(&+(%(*$'%%%$*$&)""#(#*##)!"#&"#.-(' #&.+'),)).32,&#&#'&'..*(*/+()%'*,'&*)&%$$!13,-))#/"#!%##+''%$'+&+('.121-4,014.-13/)*2-('&%(+&*'#%#$))-+-0-+.-1)*315245.-.+-.-..26704243442035./04751<<+'0/.*..2423-2024200-0211.030/*./:PS<35641/-3-,12,/.3-,0201.+'($%*+22,11,,123232557642236266354=736404-11/95325<4/-,+)-,34624401:602.38113574246274893787457:562511.2069770/:94667457255225342-3020020/344//*221-/020-.12/.((-++*.12-0-6456431-.,)02,./*'(0-+-*(.,)+/+(&*&)+(('')'#"  $#!#$ "'4GR[QB.$!/8Ha}|tdJBA;@ADA@C>OnnSHKKVLTRRXUUNLNPMRP^VNHIFID1"&.66435.,,0038/-1.29CHDCA><;8;9548>HMMNS\STVLNOJCCIA>>4/34/$-0067144710-/5/232,#*"  #$ %   !"! !&"" !!#"!  !"$%&"!$ $"'"""($$'.,-+(%(*+.&*)*-)++*(&&,)4*-"&'())+(&$$$&),'''*)#"&$%&&)(&)++#,'+(')+()&%$#%#%%&&##'##%'"'&$#$"!#!#!&# $&!""'%! ! !"#! !"! " !" ! ! #" " !!! !!" "" #' ! % #  #'! ! $!!!!" "#*",*&$#% '&()1@U…¢¥cE5.0.*)'$!-*+'$%%(&($$$#$'++)&!!")(-0-$!%!"('&+1-')/.**)+*'+5+*&()-.+'')*+)$)*,"%&((',.(**)((&(-)+5$"$'((-$/,/6//33/,-*)++()./-++$&%%(+('&&*(-/0310.1/--*122734241+0286/30322353434422141014189.)IBTB:>97210.1340./.22193,//10/3:EE830.3.--/--15-,.03023/2,/%  !#&)*0/.-0..03305438324630133257<8262.1/4052101953/+&''+12231//0226/0+.33.,054116706:596578697110511511359:858<;6975954264064316/0141+0-01645-12024-./23310/*,1./.00-0/+2051162+,)(,1-+)*'&.)'1/(,++./)#&+6%+''(%$&&0!  !!! #2CW_W?0#)BZsˆ—›š–Œ~sjc[SMJLKCBZp`MGGOUTXUUXXQLRNOOQOOLFBCEA1"%1:@B>@B<=9?==>A>A:=EILJKFFHB@@BA?@CMNQZZ\\]ZVQRMEHUKGA9:599;=;B@;<3763481/12001549796>;55867644:424133/44//.2201-34<4101121/0167373/./-/1,040-2..24530/-+/02--&'(')()+-/.,,,.3,%9%))(*))(+(+)%%#$" &$("''$  ! !&5CWa[D4)%/Ffxˆ•¡¦§©¡—„zqgg^XQRj€uZTTX[ZRX[ZVZab^]bbb__^_a\@$"2DU]idfce_b\]^ZYW^XW\`b^]^`]\YPOUOPV\Z\ahhggb^_^ZXPPQYPGC@AADJPQJHAGFIGFGHDAD@;2%!"$!    #!  !#"  ! !!!'  !" ""&"$" " (&!#%!##'$"'(###&&'*(()%*-(',-+)(**,*#",/))-,)((%''''& (1*$"%%&%/)%&)###$&(!#(-$( &%$!(##$&"!! "$%%%$$$$"'$) &$""#&%% "" #!"# %""# "#!$  ""! ! ! "#!   ! !&"!"%!"$!  !!  " $!"!%! !!  #  !"$$+1++$!!!!$,07=SsŒ‚qtveVOYV\ˆ§¨‘jO8-)")$#) !')##$"!"!"%$ !%"! $%#  "# $&( ! #"#&%')($(((&%(-)+(*8%&*$','/+'-0)$"!$'%)*42?(++,'&.00,&+%!/2-21&&.//&(*+-,*,.)+()$'($,1+$)076-/)/2-4/./015130005001///233204/10.3/64422324<;4/4125.+246;-321730501564324547620+/--64.001512//134..////.0,,./23+-()#!$)*$%*--//)-47.0561411433-/--22/2663024660.,-,+//18-(+*-/1/1/4232/0.54/330.11,.*.14:585.//20<:4470222200132389=7559546447212155563445443459999977;74779;<=<=;88689:879;;;:7<888;9<7;9958876857>A?=;;8;;?::5;9@>;;995;78:>:=AKXhlhM5&+=Wkr~…ˆ‹“šŸ¤§¤ž›”Œ†zqnt—¦pddbabcgklr||~„…‡…‰†`.%5*:1/2.034267;/666988237235589654999;61533279<875363532.16975577:::99651744225<;89:7499<;>=>:>8969AE;=?;;AC>>>>;A=;?C>?ABDCEIEEFEHECFGJPMTQPTURYXXWYZZ\b]\^\^__^^aheac`a`__bhfd_chfhbehfhnlqonmpqonpolkqrtxwxvxuvqtruprqrqvvuy}yppooppprliklonqsqz‚‚„[B7@XnŒˆ‚{x‡Ž—˜—™ššœ—–•’“¦½¹£Šystprw€ƒŽ“™™žŸ £¦¦¦§¡v3!)EfŠ™›Ÿ¢ žœ¡œ——‘‘”‘‘”‘‰‰‰‡Š…ƒƒ„ƒ†‚‡ˆ‰‰€€|yz{tqolnmmlhejofbf]`]\^^WOPQRG7+%"$"  !  !"%!"&" # #%# """#$("!&&&$/&"&&%%'%%$,.'**&'-%"$&&)&,/,+%,"%#()*&*#&&'+)+()&&%&--"$+((%,++##&&'('-'*%"&%%& $'#"(%$&"" &$%&%%## #$$ #%%"'$&!!"$$ ! #!&/! ! #  !"" !#!" "!O5 !"   !"  "   !! " !" $"    !!"#!! ! "(01-'*4,0*)$,5:VxŒŠ†zwuhZYcaZ{˜‰gO:-#! ! ##  "!#$'"!#&$!%)$$''%#*)+.-(%,*-*),+)++,&(''#%('$"%**191&,1(-+,33)3)-',/54/(-*,/0.,/-.3-796/69.0852227255552715:986?><=<<9987<=:<<==@AE@=?@CBGG@EFDCEFCEJJECC>>DA@ADHDFEADGCEGJFHIEBHFIGHFFFD@BFCDDHEFJKKNKIHNNKKGFFIHIDFDDCBA>6/'&,%RI;<@CFDFGJQLNMKGKNUNJJKHLHHKOLJMOOTQTRQOMINORUURQPLOOMPNNPRWUYUV\]ZWUSLPRQQOPORWUXZWVZ]\`eedb]Z[[]^cededegjefdebggjidflmlkmprsuuvtvwz|„ˆ‰‡‹Œ‘”“•”“–—––›™˜šœœœŸŸ ¢¡¡ Ÿžœž¢£££ ¡££¦£¤£ªª¨©©ª¬¬¯­¬¬«­«¬®®­¯¯±°®®®¬®¯¯ª¬­ª¬®±¯¬«©§ª¦¥¦¥ª§¦¡¢¢Ÿ›Ÿ¡¡ žšš‘xbY`iu‡Ž’‰€‚zyz{‚…ˆ’–™˜ž¢¢­ÀÌè’…€~ƒ†‘–˜œ¡¢¢©¨§©ª£|;!,Ou“¢ª­¬¬¬ª©¬¨¡ Ÿœ¡žŸœ œžžœ˜˜šœš™š••—•‘–—•””‘‘““ŽŠˆƒ†Š‹‰†ƒ…zvx}xztoqkfcc[M=3%  $ # #)(($!  '$!#(""$""!"!## !#*) %#(3&$%)%%#"#&'&*.-'%#+)*'%&*$)+.+,'#'"(%(-"*)!)+(*%)&&$$/5 &(,$! $%)+"&&$&(*'!('#$!&"%&)'')"% !!!"#&#"$""$%!"$ %""%#$##!"! !! !!%'"$ "!###!!!' !"!9X""!!  !# ! !! ! ! "!""!#!" !!! !"",#" ""+00+##'4:+&(,1CYr‡‰…}{uj]Yf^[|œŸ‹kQ@/%"! ! $$ "" "!("!!%%&$!(*"$&%*/.,',/30272/3735874245..7.+*+3.(,++3120/.7;3//.36>00265796;:5;D>;@C:=>@EJGGEEEDFFLMIPLMMLPQSVY]]^enononiie`WPQV[gijhljklnquwsrtvxywqyxzyvxupqsruoutyyy{vyvwx||z{|yzz|{†•v}}zxzywzyz}‚†‰„…†ƒ†Š‰‰‰‡‡…†‚|{y{{€}zwZ=,-.;;9:=:;A=CKHHEHLRZZ]_^]acbgg]a[ZVSNOMIIJVJNQLOOLRVWUVZ]XZW[ac^[b__dbecdignkptoontutx{|}yyƒ‰‡ŠŠ‹‰‘”’–•œ¤¥ª®°¯¯®©¢œ‹€‰”›¨©¨©ª¨­±±²²´¶·³µ¶¹·¸¸¹º¹·µ´´²³±¯µ´µ¶´³µ¹¶´¹º¹»¸´·º¶¶¹º¸·¸¹º»·¸¸¶¸¶¹ºº¿¿À¿¾ÂÁ¿À¿¾½¼º½·¸·¶¶¶¶µ´­Š\90:S{œ«®°³´µ´³²°µ´¹µ¶¶±´µ¶µµ²®®´³³µ´¶··¶µ¹¸¸ººº·µ¶»»»º»º¹»¸¼º»»¼ººº»¾¿¾À¾¼¸º¹·¸´·´µ¶¹»½¿º½½½ÂÃÃÄÃÄÁÁÂÃÃÄÆÇÆÅÅÅÇÆÅÄÅÆÇÅÆÆÅÇÄÅÆÇÃÆÈËÌÊÊÍÍÍÎÑÐÐÐÑÒÔÔÕÔÖØÕØÙØØ×ØÙØÙÚØÚÚÜÛÙÚÜÜÛÛÛÙÙÛÙÛÚÚÚÛÚÛÛÚÛÛÙÙÜÜÝÛÜÚÚÚÛÚØØÚÖÕÔÔÔÓÏÏÎÍÊÄÿ½½¼º¶µ³¯¬©¥¢ ›—’Œ‹Š•‘‚{sqpqmlli]WSLINR[blq}†Œ‘‘‹……xpnrvtƒ«ÆÌÀ¯ž˜–“ƒ€}z||wvxtuvz|mY4$/Jyª³¶·¶·¹¶¶´±®«­¬­®¬­­®­­¬¬¨¨©­±®¯®¬¥¡£¤¥¤¥¤¥¤¥£¢£¡œ›Ÿž  ¢£¡£ žž™œšš–“ˆ„xiK5'      ! -& !$!"!"$&!!%% !###!%%&'!"%"&)($&+#*(#"'#/''(&&)+'&($'((-,("-)'#*(&()#$#$%##**)'$%$%)%')%$"!#"#%#'##%%#$!% !"#(%!!!! $"#"#%'&#$%!("#,#!"'#% %! "#"" $!#" " "#  " !!! ! !%#""$!!" """"!!" !!! " #" !!!  "  !  &.8!#  !"#).+%%%#%#'%01:Jby…„~xrqf[`e\bŠ¨¥rd[UPPSPUPOTX\a^[`\[\ZWYa``adhnponkqquxtsyvz||€†ŠŠ‹‰•šŸ¤¥¥§§ª©¨¤¥£˜•–’‹ˆŠ†‰ˆ‹‰…‹‰ŒŽ‘’•–™šš™™–™›œšŸž¢¢¡¡¤£¦©¬ªªª©¬®¯²³³µµ·½¾»»¿¿¿À¿ÁÁÃÅÃÃÆÊÍÎÑÔØ×ÖÖ×ÓÑǸ°¸ÅÎÓÕÔ×Ó××ØÙ×ØÙÙÙÙÚÚÜÝÜÝÜÞÞÝÜÚ×ÕÖ×ÔÔÖ×ÖÕÕØØ×ØÚÚØØÙØÙÙ×ØÙØÖÖÙØØÙÙÚÚ××ÙÖÖ×ÒÙØ×ØØØÖÖ×ÔÒÓÔÖÓÒÓÔÑÐÑÑÑʧlD3=fš¼ÉÎÏÏÎÏÏÍÎÑÐÐÑÏÏÏÌÎÐÍÎÎÍÊÍÍÌÌÏÏÏÐÓÑÐÏÏÏÑÓÒÏÏÓÓÓÓÑÓÓÒÏÐÑÒÒÔÑÑÒÔÓÔÔÕÕÓÒÏÒÕÓÒÒÑÐÎÑÐÐÓÓÓÓÔÖ×ØØÙØØÙØ×ØØ×ØÙÙÙØÙØØÛÚÛÚÚÙÚØÙÙ×Ø×××ÙÚÙÛÛÜÝßÞÝßÝÝÜÝßÞßàààâááàááÝààààâáââáàáááããááàâßàáâàáßàáßáßßßßàßÞßÞÝÜÜØÔÔÓÒÐÍÇÇÄÁ¾¸µ³±¦ž™˜’‘ƒ}{|ynkja]XUTUTOQSVPLHI>@<>99::330.3@IOTWbls|‚‹‘“†wmkkehzž½Ã·¢”–—”–‡ƒ~vniedcaaZH7()M|Ÿª²¶¶·¸º¹¶µ°®®­­±®°®±±°­¯¯®­¯®±²±±­ª¨¥¦¦¤¥§©¦¦¨¡¡¢¡¢¡ ¤¦©§©¨§¥£ Ÿž›œ–ŽŒŒ‰ƒmO5%"""#!!#  #'"" #$!## % #!# $#&%##"#%$('$#*)'% $#&%"&)+'%$$(&'(+&*,-',-'('+,-*('-&&(&)',,)$%(**$(&%%)('*(+%)$$$$"%#%#*+$&'&%$$&#$)#&%()($($$*$&!$$ !#$(%$ !#$#$'%#" $#$#&$(##$%"!#!$%! $$$"#$! !"###"  # #!""! "$!!%$"$!" " $&+! " '"$#& #' " #!! $!%$"!#!#  !#  !! "!    # "#!!"%" 5=!%&!""$!'/00/+'$&&'+/5=Ogz„€ypto`W`fdeª¨zvƒˆ‹ŒŠ‘““–™ššœ›™œžœ›¢ £¢¤¤§¥««ª¬°¯¯°°´µ··¸¸»º¾¿ÁÀÃÅÉÌÍÏÒÓÓÒÑÐÑÑÐÏÉÄÁ¾½¼¹¾¼»¼¼¼º¹¹¸»½¼¼ÀÀÁ¾ÂÂÂÁÄÃÆÅÄÇÆÆÆÆÇÉÅÇËÎËÊÌÌÌÐÏÏÐÓÔÖ×ØØÚÜÚÚÛÛÙÛÙÚÜÛÜÝÞßâæäæçèééèåáÜÔÒ×ÝâååæççéçæèèæççèéééêéêéêèéééçæäãäããããåâãååäãæåäããäååããâåáàáãååââäâáââßÙÞßàßßÝßáÝÝÜÛÝÝÜÜÜÝÜÝÜÜÛÜÔ²zJ8GtªÇÖÚÛÛÚØÙÚÛÛÚÛÚØÚÚØÙÚØÙØ×ÕÖ×ÚÙÙÙÙÜÛÚÛÚÛÛÙÝÜÝÛÜÝÞÜÜÝÝÞÛÜÝÜÝÙÛÜÜÚÞÝÜÝÞÝÝÞÜÝÝÝßßÝÜÜÞÝÜàßÞßßàáßáâââàáãâàáâáàááãááàãâáááàâààááâáââãââãâåäããâããáäææåäææçæçæççåææãåæåååäæååæåçææãâåääãããääáÞÞÝßÞÜÛÚ×ÓÑÏÊÆÁ½¹¶³ª¥¢›–‘Œˆ~sga]XWZWOKEGEB?=7934412012340/+*+*)&#&"!"#%&5HUMJNZ^ejqv†‘‰‡ƒudabt¹¹§‹ƒ‰’–˜›•”‹~tkjga]XB2#")Lyž¬³µ·¸¸·µ´°­­®­­°±²±²³²¯­®¯­±®°´³³°­©¨¦£¥¥¤¦¤¦¤£¡¡Ÿ  ¥¦§¨©¦¥§¨¥ ¡žš™™““‘‰ŠŠm[;/%" "! $" !!""!"! "  #!!#% "!''%)'&%%+)&%(#&'$"%"'"")("#'++++,**0-../2./1-,-,++/-/-,--..01%'.-,,+)1.1..-3,%(*-(')*0+-*-+.-++)*+'/*))-.*,)-&&),$'#%%%'.&**&*%&&()'$''+(#(%&'*'')+))$$#%"%&$#'*,)(,)&&"%')+&'$#%+('&#'(%%%&#%$$!"$&$$$"&('()&&+)#%%$)&(,'$" #"""$"#" "&$$"($+&'"#'$#()&"$$"$#%#!!!     ""$$ #"" !!"# $$!#$"#%#"$""$%$%%$$#""#!# "#!!!"!#$#'##!###"%%'%%%&%))& !!! &# #!!!!!'# "%!(! !"#$ #"$'((,38738-**)*/07>Ui{†ƒ{oqpc[emlq“«¨‘€…”¡¢¦ª­­±±°´·¶¸´±³´³µµ²²¶µ¶·´µ·¹¹½ÀÁÃÃÆÇÆÈÇÇÇÊÌÍÐÐÑÓÔÖÙÛÛÚÛÚÙØØÖÕÖÕÕÏÏÍÌÌÎÌÍÎÎÌÏÏÐÏÎÎÑÐÏÑÔÔÓÔÖÖ×ÖÖÙÙØØÚÙÙØÙÛÙÚÚÝÜÛÛÞÝßàááäãáåççèçèååæåãäææççéëêìíïîíîðîïíêåâæçêìîííîîîëëëíííîíîíîíîîíïìííììëììëêëéééééêëéééêêéééêêèéèéèèèåèéèçæææçèæßåäåäääåääãââãââäääããããàßÛ»T@N€´ÏÛàáààáàßááââàâááàáàááßÞÞÞßßÞàßßãâßàááààãäååãåããäåääâãåãåâäãåæååçæææçæåååæåææææççææèèææçççéèèæèèèééèéèçéçèçèèéèèééèéçèèèççèçéèéèéêééééééèèèèèèéééëéêêêêêéèèçæèææçæçæåääåäáßÝÚÙØ××ÓÑÎËÉÇÃÀ½¸´­¨¢—‡„~|ypkhb^^XRNLFCB=98::543.21/+,,,'(-++')1/&$(','# #$"$!#(5FIJJOOSX\ccku„‡ŠŠŒ†{zttˆ¢º¹¢zpqu€„Ž•˜––Ž‹‡wlT8)%%#"$&0Jp•¥ªª¬¯´®¨¥£¨§¦¦©©©©ª­®­¯¬¯°­®­²³³µ¯«ª©¦¥¦¥¤¥¥¥§¦ ¤ Ÿ£¤¦¤¨«¨£¤§¤£ ž››™—‘‘ˆƒv]B0'" ! !"" " "  "! " ##! ! !!! !"###&("&!"!!$ &$&(!$##$'("$#"!#$'$ "$'%'$#$&&&&%'.5$)**),/,*")(%&()(+)*.*,*--,(++./.-3- %%EndBinary grestore end % Image Trailer grestore grestore % EPS grestore \ No newline at end of file diff --git a/Build/source/extra/epstopdf/test-binary.eps b/Build/source/extra/epstopdf/test-binary.eps new file mode 100644 index 00000000000..c82441b7963 --- /dev/null +++ b/Build/source/extra/epstopdf/test-binary.eps @@ -0,0 +1,433 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Photoshop Version 7.0.1 +%%Title: 118‚̃Rƒs[.eps +%%CreationDate: Wed Jun 16 2004 18:05:10 +%%BoundingBox: (atend) +%%SuppressDotGainCompensation +%%DocumentProcessColors: Black +%%EndComments +%%BeginProlog +%%EndProlog +%%BeginSetup +%%EndSetup +%ImageData: 823 533 8 1 0 823 1 "beginimage" +%BeginPhotoshop: 4604 +% 3842494D0425000000000010000000000000000000000000000000003842494D +% 03ED000000000010012C000000010002012C0000000100023842494D04260000 +% 0000000E000000000000000000003F8000003842494D040D0000000000040000 +% 00783842494D04190000000000040000001E3842494D03F30000000000090000 +% 00000000000001003842494D040A00000000000100003842494D271000000000 +% 000A000100000000000000023842494D03F4000000000012003500000001002D +% 000000060000000000013842494D03F700000000001C0000FFFFFFFFFFFFFFFF +% FFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800003842494D04080000000000100000 +% 00010000024000000240000000003842494D041E000000000004000000003842 +% 494D041A00000000033500000006000000000000000000000215000003370000 +% 0000000000010000000000000000000000000000000000000001000000000000 +% 0000000003370000021500000000000000000000000000000000010000000000 +% 000000000000000000000000000010000000010000000000006E756C6C000000 +% 0200000006626F756E64734F626A630000000100000000000052637431000000 +% 0400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000 +% 000000000042746F6D6C6F6E670000021500000000526768746C6F6E67000003 +% 3700000006736C69636573566C4C73000000014F626A63000000010000000000 +% 05736C6963650000001200000007736C69636549446C6F6E6700000000000000 +% 0767726F757049446C6F6E6700000000000000066F726967696E656E756D0000 +% 000C45536C6963654F726967696E0000000D6175746F47656E65726174656400 +% 00000054797065656E756D0000000A45536C6963655479706500000000496D67 +% 2000000006626F756E64734F626A630000000100000000000052637431000000 +% 0400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000 +% 000000000042746F6D6C6F6E670000021500000000526768746C6F6E67000003 +% 370000000375726C54455854000000010000000000006E756C6C544558540000 +% 00010000000000004D7367655445585400000001000000000006616C74546167 +% 544558540000000100000000000E63656C6C54657874497348544D4C626F6F6C +% 010000000863656C6C546578745445585400000001000000000009686F727A41 +% 6C69676E656E756D0000000F45536C696365486F727A416C69676E0000000764 +% 656661756C740000000976657274416C69676E656E756D0000000F45536C6963 +% 6556657274416C69676E0000000764656661756C740000000B6267436F6C6F72 +% 54797065656E756D0000001145536C6963654247436F6C6F7254797065000000 +% 004E6F6E6500000009746F704F75747365746C6F6E67000000000000000A6C65 +% 66744F75747365746C6F6E67000000000000000C626F74746F6D4F7574736574 +% 6C6F6E67000000000000000B72696768744F75747365746C6F6E670000000000 +% 3842494D041100000000000101003842494D0414000000000004000000023842 +% 494D040C000000000BC90000000100000080000000530000018000007C800000 +% 0BAD00180001FFD8FFE000104A46494600010201004800480000FFED000C4164 +% 6F62655F434D0003FFEE000E41646F626500648000000001FFDB0084000C0808 +% 0809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C +% 110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B +% 0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C +% 0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0 +% 0011080053008003012200021101031101FFDD00040008FFC4013F0000010501 +% 010101010100000000000000030001020405060708090A0B0100010501010101 +% 010100000000000000010002030405060708090A0B1000010401030204020507 +% 060805030C33010002110304211231054151611322718132061491A1B1422324 +% 1552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3 +% 743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F5 +% 5666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F71100020201020404 +% 0304050607070605350100021103213112044151617122130532819114A1B142 +% 23C152D1F0332462E1728292435315637334F1250616A2B283072635C2D24493 +% 54A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5 +% E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002 +% 110311003F00E433F3732CCDB5F6DF63DEFDAE7B8B8EA5CCADEE260A08CBCA8D +% 2FB40F27BFBFF6947275C879F10CFF00CF75A1C7E29293FDB32A3F9FB6071EF7 +% FF00E49239797C1C8B4FC5EFFBFE920C189EC60A4418D414949BED595FE9ADFF +% 003DDFF924DF6AC9E0DF691E1BDFFF0092428D13441FC12527FB5E50FF000F6F +% F9EFFF00C925F6CCBFFB916FFDB8FF00FC92081A71096BDD2526FB665FFDC8BB +% FEDC7F7FED27FB6E6C7F49BA3C3D5B393CFE7A018E536BA4FDC929B1F6FCEE7E +% D57EBFF0D67E5DE9FF006867CFF4AC8F0FE7ADFF00C9AAD3F82438FCA929B3F6 +% FCE3A9C9BC9FF8DB27FEAD38CFCEFF00B95903E16D9FF9355873E613A4A6CFDB +% 73BBE55F3E3EAD9F1FDF4DF6ECD827ED57CC73EAD9FF00934083DD3381E3B424 +% A7FFD0E2AD6FE95D3E00FF00D16A8861274D0AE85BD1058C16103DCD69E7F92D +% DDE1FEBFF03E8A89FABEE1AB4C13C024FF001F77B52538ADC704093C79F92738 +% DA1DBCF87F057EDE9D915121CC1E035D38FE4FFDF7FF006D95BC1E81D4336C15 +% E2D42C7BBF343C0EDDF71FDDFF005FB2FE91253846B2DE44FC1408D7F21D5759 +% 97F513EB1D35B9FF00650F02490CB18E3C7F5FFD7FE2D60DF81978CF7D79553F +% 1EC609D8F0771746E15B7FCEF724A68867FAFC9342339C47E6B84F03DDE1FF00 +% 91FF005F4D0C9F1040F133E1FEBFFAAD25310D1E7FEA1340235F253246B1DB9E +% 6385270731C5AE696BB4D24CA4A471E1DBC3E09069E4FF00AE88D551658D96B4 +% BA0F001F094518391A7E8889F199E3FD7FB0929AA19AFC7848000787FA957460 +% 64183B23B6A4C271D3EF3008F0D267B780FF005FF46929A31A78FCFC9270907C +% D5EFD997E87C8773DC7F27FEFBFF009E7F4893BA75B1AF878FFB5253FFD12B41 +% 6B58D3D869AF11EE993ECFCEFCF6FF00C25FFAB598EA5BA06A0870D08D41F31B +% 1DEF6FF6BF48CFF0AA66BD5D3A09D64F11163BF7B6EDDFEA7F23F9EFD27ABE85 +% 2ECA401046931E1C69FCADBB3FF03FF496A4A40E0CB3D8F6970E3FEFDFEBB7FE +% 33FA37A8B53A074FC3664FAFB9C03351076EA356876BFF005CFF00C13FA2ECA9 +% 64B9B16167247819EDBE23FB3BFF00F05FF815A1D32D632A797FB9CF04358491 +% AC7A9BF78FA5FBFF00F837FDD7494F4BD62EC7B70ADA7D7F4891A3C3C34B48F7 +% 176EFCDD8DFF00D48BCF3ADF4EB58C75F539CE6D521F2E25CE24C6FF004E4BD8 +% CFF8CFFAE2E8BA939C2A058EF525A58369EFF4BDCDFCE756D76FDFFCBFA166FF +% 004964C00435C7680D3B584C011EDFA3F99F4BF9BFCC494F281E660F6241075F +% C888DAC380F6CF88F01FEBF9DFFA2D1B3B05D8D74810C7196FFD5188FEB28638 +% F7B606874D4F649499BD3C169716810274ED21BF4B77D1FF005FCC49D875B009 +% 66D2013DF8F9AB9483CED691A409E02B6CC619192CA1A016BCC97364C37F389F +% E424A4DD2F1CE3E137DA1AFB65CE1E5F99FCBFA3FEBE8EF56C86910E60FF005F +% 74FF00AFFE7A44752048681B000D1E3D8FB87FAFFA4FF8252353A62369E6098F +% 33FEBFF5CFF8349481D43203C3001CF870A1F67A5D00B403A033F87D1FF5FF00 +% 47FE115B3498DA4011AF2A06910191A771F3494D5762308E3CFF00DFB7E1FF00 +% A4BF56FD1A1BF0591B8340FC783C9FF5FF00C095E2C8ED249E2791F4BFD7FCFF +% 00F82517896C08D38D79D67FF32FF5F4D253FFD2D435904804823E2381EDFF00 +% A5FF00A56BFD25AFAD436B9A3425A67B69A0986C3377D1FF00C0FF00C17AAAD3 +% C43882351224133CCFE6FF00DF3FEB3FA6F5156B099700383A798FCDFA1FF7CF +% FD05FF000C929CE798BE2342238FED442B188C9B4498131F1FCFDDFE79DFFF00 +% 82FF0039FA240793EA92E30635F057308BC1F5043606E04F1DBF35BFCAFF005F +% 5D2533EA736545CC66E78FA0D320363DCE7EF07E8B3F72A6EFFCFA7D5FE6EBA4 +% 31EFAAB6656406B6A7582AA8D836491FF07BDCEF4D9F9BFB9FE0BD65A771D803 +% F7924C4126759D236CBAB6EEFDCFFADFE97D559DEBFBAC36FE95EE036B9C6402 +% D33B9DB4FF002BDBB7FF0041BFC324A6AE7E28B6B823576AD3B4481FCB13BBFF +% 00305935F4FC86D8006C86F7FA223E973FC95D162D61EC982E11A8264E9F4BDB +% 3F9DFC8FF8BFE6D69E2620364B849E06BACB8FE6EDFCEFA2929C7E93D1B27206 +% C70DAD265AEDA76F97BD7438BD29B80C71692EB1D0DDC47239FF005F4D6962B5 +% B4B21BB5AE1EDE48F97FE4F6A1F507B48038D36B073FD6223E8FFAFA6929C72C +% 2F63ACD61E74F31E12906B808D674F977577D22E1B60CF7274FF003930AC0307 +% 58E3533FEBFEBFCE24A6A1692244E9DA0F64C6977606077E42BC5A267B6A753E +% 4A2EAE74D4C7C6525341F4BB8D75F9E9F0FEB20B9A47D2E40D0FE2B50B44791F +% BBFF003240B69DC0E92609993E47B24A7FFFD3DCB7F9C78F331CFC3C7FEA5557 +% D6413325A662099333C46DDDBFF336FF003BFE03D1F4EC57B269FD3584081247 +% 1AF27FEA9567F1C1EFC09E7FB5F9D1EEFF0049FF0003FE1129CDB6B0DBE0C907 +% B7CA3FABFF0093FF0006AEE0B3738335E3989E63CD01F5EEBB710759248D758D +% DCE9BBF7BFE13F9DFF008157F02B0E68006EDC07224104F7494BE5B5CD1FA304 +% 91A00DD41247EEB7DCB1AD682F1B41737812220FF636FD2FE47F3DFF0069F657 +% EA2DDCAAD8D16309DA04B771048D7F35B1B7F3565D95127592499D44933F4B5F +% 66EFF3BDFF00F04929262B4BA086EE6CB76F3DBE8BBFAAFF00F33FA8B6B0DAE6 +% BF71E64973A081AF76E8D58D435EC1CEF713F9BF48687E1B99FD75AFD3CB8097 +% 364320070322797FEE7E739253A58E1D2E2E31040669E5FC9FEAA0E5D3BF2186 +% 2401B88EF2793FBCD56AB87071DA1BAC911E435E53D9509DD1A9E4C44FFAEE49 +% 4D17340800EBACF914B6B1A0C8EDCFC0231A5C1F03B9D74ED1093EA8A9C5C247 +% 3A8D78494D535CEBC0EDDD38049DAEE0F878A3FA50D70333063FBB4556C377AF +% 5EC61752E8F54813A016EFFA3EEDEC7B68D8CFF847A4A66F6E80C41E75E15778 +% 68691A900724F804FEAE6B4169C7758002438889D590C6B2B1FCA77FDB49BD6B +% CBA2DA3657EF2EB082035ADF51E1EF2EF6ED77A6CFFB75253FFFD4E92F8DD671 +% C9FA5C77555F1B4C6CFA2639F0FCE9FCDFF4ABC412494FB35D1EB3FE872EF1FD +% FF00CEFECFD3FF0087FF008457B0F6FE8F8EF1B7778BBE8FFE8C5E16924A7DE3 +% 2FF9B746DE0CCFD1EFF4A565D912E8D91EF8DDCFE66DFA5FF4B7FF00D7178DA4 +% 929F681F4DDF4237FE77D2FA436EEFCED9B7FE9FF39FA45AD851EA8E79D66777 +% FE70BC052494FD28CEFF00C7E03FE8A21E17CCE924A7E9077F3A27F95CF1DFE8 +% C7E6291EDF47B73FF7D5F36A4929FA37C62787CFDDF9BBBF35673BD1EFB2773A +% 63D58E5DFBBEDFEB7FC22F0349253EFA7D08FCDFFC16557C9F43D1B7F9AFA0EF +% E73D6DBC1FE77FE0FF00D27F2178524929FFD9003842494D0421000000000055 +% 00000001010000000F00410064006F00620065002000500068006F0074006F00 +% 730068006F00700000001300410064006F00620065002000500068006F007400 +% 6F00730068006F007000200037002E003000000001003842494D042200000000 +% 01264D4D002A000000080007011200030000000100010000011A000500000001 +% 00000062011B0005000000010000006A01280003000000010002000001310002 +% 000000140000007201320002000000140000008687690004000000010000009C +% 000000C80000012C000000010000012C0000000141646F62652050686F746F73 +% 686F7020372E3000323030343A30363A31362031383A30353A31300000000003 +% A001000300000001FFFF0000A00200040000000100000337A003000400000001 +% 000002150000000000000006010300030000000100060000011A000500000001 +% 00000116011B0005000000010000011E01280003000000010002000002010004 +% 0000000100000126020200040000000100000000000000000000004800000001 +% 00000048000000013842494D03FD0000000000070000000000000000 +%EndPhotoshop +%begin_xml_code +/pdfmark where {pop true} {false} ifelse +/currentdistillerparams where {pop currentdistillerparams +/CoreDistVersion get 5000 ge } {false} ifelse +and not {userdict /pdfmark /cleartomark load put} if +[/NamespacePush pdfmark +[/_objdef {photoshop_metadata_stream} /type /stream /OBJ pdfmark +/MetadataString 4649 string def % exact length of metadata +/TempString 100 string def +/ConsumeMetadata { +currentfile TempString readline pop pop +currentfile MetadataString readstring pop pop +} bind def +ConsumeMetadata +%begin_xml_packet: 4649 + + + + + + + adobe:docid:photoshop:4783831f-bf73-11d8-8e60-a202ecfe555c + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +%end_xml_packet +[{photoshop_metadata_stream} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT pdfmark +[{photoshop_metadata_stream} MetadataString /PUT pdfmark +[/_objdef {nextImage} /NI pdfmark +%end_xml_code +gsave % EPS gsave +40 dict begin +/_image systemdict /image get def +/_setgray systemdict /setgray get def +/_currentgray systemdict /currentgray get def +/_settransfer systemdict /settransfer get def +/_currenttransfer systemdict /currenttransfer get def +/blank 0 _currenttransfer exec +1 _currenttransfer exec eq def +/negative blank +{0 _currenttransfer exec 0.5 lt} +{0 _currenttransfer exec 1 _currenttransfer exec gt} +ifelse def +/inverted? negative def +/level2 systemdict /languagelevel known +{languagelevel 2 ge} {false} ifelse def +/level3 systemdict /languagelevel known +{languagelevel 3 ge} {false} ifelse def +gsave % Image Header gsave +/rows 533 def +/cols 823 def +197.52 127.92 scale +level2 { +/DeviceGray +setcolorspace currentdict /PhotoshopDuotoneColorSpace undef currentdict /PhotoshopDuotoneAltColorSpace undef } if +/picstr1 823 string def +/_rowpadstr 823 string def +/rawreaddata {currentfile exch readstring pop} def +/padreaddata { _topPad 0 gt { /_topPad _topPad 1 sub def pop _rowpadstr } + { _subImageRows 0 gt { /_subImageRows _subImageRows 1 sub def + dup _leftPad _picsubstr rawreaddata putinterval } + { pop _rowpadstr } ifelse } ifelse } def +/image2 level2 {/image load def} {{begin +Width Height BitsPerComponent ImageMatrix +/DataSource load image end} def} ifelse +/beginimage { +image2 +} def +/readdata /rawreaddata load bind def +12 dict begin +/ImageType 1 def +/Width cols def +/Height rows def +/ImageMatrix [cols 0 0 rows neg 0 rows] def +/BitsPerComponent 8 def +/Decode [0 1] def +/DataSource {picstr1 readdata} def +currentdict end +%%BeginBinary: 438671 +beginimage Õ¢¶®Ö㻓–£¬´³Øß¾©¶°±ÖÕÉÉÔÛØʹ«£ ©³­—‚€¢¬²¸½¿®ÉßÙƼÂÊä×ÙíöíëóèçõôÝÜêèÖÈÈÚÞÐÆÊÄÙíìäéíåïÙÏØßÝæ÷âÅÀÝîßÑÒÕòâçÞØøâçÜñÙÔëÞô×½½ÊâíÜÙÁØìåÌ»ÁÏÐÈÇÓàâÚÑàîêØÖäïôíßöØËâÆ»ÍÙÜãøüïéäÞúåãøãîâËȲØØÐíĨ»¥Õ¼ÛÕòÓÏÉÀ¿ÃÙµÅÔÀ±ØôÞÜÔÄÏƿͲåßîìÌÃÐÌáÑËËâ©|ðÝåÐÌàͺÔÅÀÀÊ××ɺ¡Ó«Ž¤Øþͼ¿ÊÉÀÍæîéÚ̶®ÒãÅÇÖÂÅòñØãÒÇαÀ²ÍÐàÈÅÊÃÅÅ´ž²ÚÇ¿¿§Ï箼ØÀÈìèй¿ÂÆÑ´ɮ¹ÚáßßÙâÎÇÑÔÉÅ̺®ºíðáøãææß×ÕÜä×ÜÛâãǶÈÓºÑÛËòÿÉÍáÛ¼­»ÑâÃæØ–ñìÍ°«êÕ×þÙééÐËÝäÝØ×áÌØêÖÉßõçìåÚÔÏÌÍÞìÅÛå²ÄëëÚõòÛͼÈÃÄÈÈÂÆÐÕ·âòìñíÜ×Ì·þïÕã¹Â³èôâéçȱ³¸¨ÇþáÁìüéïøíêñëÜõÞºáûÝÛëõõæÛÝåçÙÀÍêâÏÍÎèÏŸÕÿêïðçÞíæååÕëîóãÞòí̹ÔäæÛàïéÔñëîñèåñþíòôïæáåêôìàÿêÿëÚúûóæèõøñë÷åèæàïâëìãÙä÷òÞúúóñôñëêöïðïåàæëèñêçôñéóðæè÷üñåâëïîççðôñöûìßèðîðçèî÷úøö÷ç×òèãëØóîäÞ÷êÙõòóèòòäõþâñöïäëûùéôðóôæØéÿùóïíììðôéæêóôîîôîééëëïôñèùêÿÿØééÿøêèíêèîëãèòïêëíñììóôîîôÛÙøÿìêü÷áéðòñòñïôêóøëîúöëåëõñëíïçýéêþíáèëêôòé÷ÿïéíììñòñöèëîîëæäçúëãææáãëñåç÷ùêãêñèë÷öíõÑ4..):S\7100,-.*::@DA<9X[N:9ES^]RhMCXB;NM?:M`kvSNlen‰“M0:*=;:CL8H.UIA;J3WLVW?:C;44=/@=AGGA:Ba>0>ToNHGMKDLXWbUPB;VdKDK@R†‘}~AHGH=>>ERCDG<<@633H:CL.Dc8AT@BXRPIYRDFBCKJWm\frbZl{]b\QLGBCJ`F_wg€’sbvtb[P\PMPROQUS"h™‘pW€kMU9>Vy˜´»`[OSG[~fRu~s‚—š£±±¿Ã¡ow~\WŠ“€‚z†WOo˜œŒ†’€T†ÆÇɵ³•€]PUWx€–¡¯Ã´†hPcqrwyhOƒ“¯º§‹ŽsŽ³ÍÓȸ®¶¡„u˜¡§š¨±±²²¥”ž©ž¨²»ÕÒåϦx„‰ƒXj€›µ½º¹¦ªºÄ»­¤žzŒ“›®²³ÁˆƒŒ¥¸½¿ÅÁÄ»¦”Œ‡ª }]`u¢Œu]Wbs‚Œs}´¶¥’iu¢”„Žzdpczz†‰€…e‚“—ˆ‹“‘s€˜§œ‚vz–’“˜·°°¸»µ±²­¦£Ÿ–‘Ž†ž—}±Üɳ…‡Š“¨»¹¯­¿¬›‘Š‰‹Š’‹‹l^[†soj]k‹˜ÏϾ™sdju‰vroep…‰¥ ¡ž„{‡„‰“•Ÿœpowtlx€p†g^U\„t‰”|‚‘‰’¥¹¾±Ÿ•”Š‰“”Œ‰ŽhTHN[qšß,7R@8C>A<<<8:;632=?EHI9;977<@@<4/4;;617/4;9?E=;::<;744G74:506>2140-(=/,8*6D6:79<2:A;559:5/::<=9447DE?8856=>8K5.A322743:=:;E6D607):G)@894;2@6E*E1C6J476036H<0778<<22??>=;99;>CN59>6D8:676477.>6:81@I8:8/4FC.%6H@V6E3?F?EF86=96AN<=:,59"6:76>CDG'243+H3.33B60<53-09'$8>3/8*?=0<==2+'7?$<01+3=.'=?37?735/--)*@7<:RB1?8*;>/291,.+'F552$68+*88;8,988(!2<88*0469;4*+4GN>-+.441.*)+.640=(755(5=:9:4).3')++9531./375/=?<;>7+')*391*(%-A90156/<=642./81.4;<:8.'>4,2+E1+&310<.16506@@9%7>0'.8:9:<<84592003446:80-5:71/=8::42.''9,;=-=9830:E?31=71/495,3029<:;@2//36679G=0,4>>8+'5A<74(,1982495GC85(*8%77=92;A3)J>,705b,3=(.<+,/016=?=50-.///1418EE;<÷cMBC>9A62487;?;77<>:9;:6135/-2379::9:;=589;?A>89756;=;7==:78<:4702659;4:?@:67866<@95=?38:979=;6:=>:439@=;1?=2A;85D<9@6?8.524:5@??><::;<;<>?<96@97U>4890;>.455333474-1+4:36=504=@;9;:5@;D/71;<9?@63:<;6;16=0=;:77::6441?937198=@62AE45=:486557:;<6?<58859:56;97647404;7/18:4?6D7<:?<<77@6>;;96:90=79937=;:@>997115;167=K4>69:9:;A=9;<9:;6SG66BB;=426A<=H<3<:;<=8459<5;B?>>:<5@<??,=;:7987C;>63<@;:B92137=?=983437>A=99HC70466;E><948AE/9=>B=9=:218<:;?=DF?87658>>99AD15CA??:?=@>9=EF???<;?EFA;:;?A??A@<.799?A6)8:BIH=408?99EA6<8AGFA>;8H93318BC5CRA;43F?:F;-:;GGDIE?D=B=21:=6<><78<>;C>?EGFMÊP<-==1>7234122-/80)20+69248666422356630664233-&731122104;<52575;9;<9:<:3::2.0314>C:3;B:7970177306831466=50<:2:95295352:F;=66:17379842476336778;?704:66A57<2175:+/8>=;:9<5=>:4/:68=1@2<6.5>2849/=1:7298A95:>:<@::7<9578:;48:21772+36750749924<<0/7943>/7(5463685356227113-5182-8;5651:69?6=45:;888609=7221-,-79.,59A=9642.+A8,1A780;6-7%1>:/3854;6:<69;1958;:851>2AA87/330451470;=>;8=?;4>>>846888:45<=76:>549<@A<<84359;;A98389B@4=CA>>=923:=>>99A;89859A2534<;5598;;7:>;=<9:?>:9D?>@>868689:=?=:/0368;826:>;3/6BA5439?8925<62886SYB/8:8D:6019A=3.246>C;.98:>>:8957:<;9;?@;;<:=@<7:+.=B>069:>?87@8A:/4:5BDC7-4<8;I==@8959;<85893?967:=<80@=7>;4<@JJ?;?:/5;<88<<7@>?BC@BïRFC:5:A73586783-;2*52(07//67750;733565310-,19<;D>85338>17:62356.24432585994125551:D:.085897675136767:963*,3326853221037>47017.1532478409425765431/5<86=484132179100,/9<026:72253;6(9+:11574220-4+61,415;;:3-13+507/.3+3759:3069,97054170-46-*/04104:<94/74-1532/75/112730572/2460-049:73.B.E,;0743686348425994.15.)2512/2;224,:403;:.*006:85543>505BL<.,1454::29:9C:355683.071598==001269:986,64030=?3<@15=0&.45540,1-295.1<5<./2*10/02320.,425<=635/3>@85767533578861;4F:;0/4886630=39315-6237:81..587:@>6476::7;>8:3.05:96334650035213773.?88;:=<4338?A;2.+/577:@F67A74:5=/<:7>8,.77667888B=638>>9868;:52249=:4148=65402529=8259;@269<9.)1KQC2102>3589851.(885<6,/<3+.:C<121379511;9963:CA:D48>14<58745654?7>?26@:.+66*3>2:>8,*4:817;:99859889=CIÙ+*9--84,*.347:5/230/1.)4,-2234131/..///22/+,1216/+++*-21/0230.-*...100432221014:16@:01622343/./433333228175154644/54.350,5/192830-.131.52145201$+0483,,5;13:43761;C;2-$+310-+0,120)1*G-983;4615/)5.*403,.00038:708.08+600340,.13;40/-0*(1784..5.--0341.454,16-/-73.21-10133001032((46.-,*0/731+12024/+/30,2424)96225533038.01'5555:;2-1,-/22001/3.*00-2.0244333846:87867220**03:>:32/,/3E3G887/A1./.0/0,3BG;/*&020/20-0;=837731424124/4%;.16,3,0.11,.33/-...23-611..1..300561.10..13540141055222/4,/0(96156-,1.?=4,+-4>:.0236103>.47.812/25322/4200//15/162()25665432336-4!9*61740--0213&2,.6-;120/17<=650/7:9<:75208>:>744479623441.04644687656/37114.81-/33104<:81+002*4+.5*9-00.269<88:;856:313795/,323540./69:7324595698;>:327;C='!5427=86=+412=84B986448;<7:7259:9'6A>2-/4:964645=>5696564820C>,7:-10.1201*/8;75782185*4?5+2765664026974467776;CHÒ5/79<6)6246221+7+34&0:(5./2/057).341.,-+045441,1-/684//6-*283,(/1--22.01,,11-.2/11++79+60-.,)-46200-*,13/81,43435088/4343=3.2,3/230**06013652365:5-/138.4'-8..15'*1-/63*71.,/:33)1312\24/&6.3,6-)5/+63494483)*45,5*/9(5645773014'$62,9447/-64/4233321115/0,23&,,51.76-/+01//10-)50-72+5/1 5'=.227766/,3/327/+615--2210.4/-&39'.+10.33..4006610418,&34-4),0210123)*0-+./.*12+.50(1/+04322='A1*-,G-0,,5/8;,)03587/1/14/,2/2-*1533064&/:-.'A137-815024243-45851791.)7349+0.33-.66/23002106250-12./+27086$4.52/3/-9(/378/(-.0<1)356*8'/3(2(3,.0--.+1477653271000694*-0100122.<'@)60320132.)6*;66:(4155/-.*#01./54..-/33166-2/23.1652343016<33441.030,5:0085/2794./5/3,2745*?.5,29'7>983,-2092/3740/40168448201430.0121025532/24110)90/-472@310:C:,(78/2?6-<,04443/+21345<:.6520254//45670.56,/;;52/<)7XB*7+.20/443628-*882<3H;*66/<567633583249723:3555;DI×73;863,,-/1222100000011,-/010//21/.-./02-.0.02.04544651///00111--.01233430../234342-03-000/////00110/.-022.-/225432100/10/02332/4;9/.1../123321/001122230/010252210//13...//000/0110.,+0-,...03//024420/540/,-4110/0123124542/-/12/*+1802541//1/14442224.03/-/.41010..1-.//.-./.-./10.+.*+01--1011/,,/271,,131.3221100/0.,,.///1332353/.-,.021020010-/400011223211112101100/.-,000///..3/,-131/1/--385/152141.1//02331/322110002/-,/245000000003456542103322441/012210/3/-/46522,+275105451,13,+/21..3810.--./02./22.040110/0362210//.--../037;.010//010..12125000//...10144212-143.,/31/045458-0<+0:&2///3662.1/--.123,00-.330683020.2-01//1213,.542325/+/782*5202310041022/.066653469:675//2/2/-1683.43211357/./452//030/21/341/14775112234562H/5@04+456420017732/3N=+?>.965448<820451267335422676210001239956==646<=82258&6=:7205258753354666;DKæ@23-/42,-/01100.......--./00/..10/.....0-02./1.-01/./-*///00011////0122530.-./01021-/1*////////..//.-,+.12/-/103221100/0/..0110-065-.0+/0122210///001110.-00/022.++.0/-...///00--.///..0--//-,./..0220.-21-,))0--,,-.010123310...////12.022/-.//01110000+-0,+-,1.-/.--0,-.-,+,./../00.-.++./,-1/010.-/220/..///00////..1/--.//./110131-.-,.011020010-/4/000112220/0231/10/.--,,,,--.///-/111/.-.00./21/13/-0/-1/./1221/221110000.,,.122////////0000/.--011--/.,./0000/..,+,./.-1-,130/0212/+/2,0220-,/2//.-,,,,1,,13101./0/..02210/....,.000024,-..,+,..,-1200300///...101330/1.-,++,-.2//221250,8,-6)3.//1320.32112344/22/0330141/21/2.0/,,/101,062/101/./220-63145212--.0.,-1210//0014122-.1/22457765/132//250.046200030/21/21113552/111234550=-,8200/010//021673583))84+3943././363,+/1/155224300453210001226855;:5568731342%.0.0103367631014689=EKÎ/+4123.,-.///.---,,+***-..//.-,/////.-,--34..0.-//,++*&..///00010/../0132/-,,-...11,./(////////+,---,+*,02/./0.0000////1/,,-...++00,./)001110//....////-+,/0.-/3-)*030+....///0+++,-./0-,-00.-//.-.//-+,1/,,**1,,,,-/01.//00000,++.230-,.00.-,-//...../0+-0,+-,.,+--,-0*+,,+*+,1/-./0///,*,,+-0./110//0,/21.,,.,,,----.20.-...-.//./20+.-,.010/1001/-/3///000011.,.252/10.,++,-)*+,-/00).44/+*,).1.,.1113/,//.2.--/110.111000//.,,-/00/////////0/.-,+++120+*,-+-./00/.-,---+**+0../.+,00./.*.2-11/..../0000/-,+.++0430/-.0/.,--20/-,--.,.00/.././/.,++,,+-12/./0///....1/021.,.1-()-0.,2/.//./23'30*/-202321001--.////.021/.00.,0/.21/2.0.**-.--,260,.-.///--/041/23101+,/1/,/42/,,..-+0,./+.1/14774347,/22/.02/.045202/30/31.1013452-)00122333220&19.7////.036)3940/.+&*0/+48,*,-.241+)-003664132/.120210//01237548635541.042.472.487945641.--269;?FIÊ//:620),--..-,+--,+*))(-----,,+-.///.,+*-56.,/..00-,.-*-...////31/--./0/.-,+,--,-11-//'....////++,--,+*+/10.//----.....20,+,---+)+-,00(1100//..--------,+-01.-.20./2420--...///,+***,-/.++.00250/-...,+,0/-0/06..../134,,,-./01+++-/00/,-//..--1/-,,-..2-/3/.0/-+*,-,-0*,-,+*+,2/--.000/-***+-0,.0110//,.120.,,++,,-...20.--.-,-//./10+.-,-/00/1//0/-/3.../////0,*-252/1/,*)*,.++,-.//0,.10-*)*(,.-.243031/31/2-,,-/0/-000/////.--.010.////////430.--..230++.0/./0000/..242-*+.012/+),1/,..+/2/.-,-023323331/-+*,034211-/10.,++1/-,+,-../0/.-/01221/--.++.23/-.///...--0./10,*+20/1452/1-,...032%05++//35640/14+.021/.-///-,,+*,10031-/.//--/-)*,45-),+10/.-.011-,/0.-.2002311361-.12.*2-./-03023320/./--/1320--,/22//2/31/31-034443/+)./0122116-7(1@-:3321026:(162/034.262/32),/13685/.0356765242/.01/210///0105425316442./11.02,&(*(*12220.-,/48;?DFèE:8.+.,+,---,+*..-,+*)),,++++++,-./.-+**,45-+/.+..,-01/----.../21/.--..****+,..,-22.00(,,,--../+,--.-,,*.1/-..,,,,,----20---..-,)*,,11)00//..--,,,,,+++-,-11/-/,/21/.03---...//.-+)))*+50---.1610.../-,)-,,1228.---.012**++-./0+-.,)*/5-../0/.-30-,-..-1+.2..0/.++-.-.1,-.-,+,.1/-,./0//.,))+-.,,.010/.0..143.(,,--.///1/,,---,.00/020,.-,-///./../-+-1...-----/,*,131.0.+))*-.///////.2.*)+,+)0/-,153-)//030+,-,+,-..-...//////../110.00000000420.-.././-*+/22/012210//475.*+.0450+)-10,.0-/32/-,-02330111/-*)(/661/14/021/,++/.-,+,-.//.,,.250120.,,---/340.///...---/--/.*)*-0588520-++.0036/+/70*/+0231.,.10378632210//.,+,/32030+-,/1232-&*,43+*,+51--13201-,/1/./91-043/,51./22.*71120350940/00,'1-+0781)**-/.,-1.21030,.7642/-,,-.0110//5+8+0>*355310147.//,,0340=8084*-/255797212355322343//120210/.//0.31021052782-.027>=65326../000/.-157CG§&/1--,(#%''%%')'()))'%#$&('%$%'+*)))*+,(.,(&#")')(&&((%"%)+)(&&&(+($()!*)()*++*!&('')*)+,--,*('*&()&)-+'''&&)/4.)&()'&',+**+,./.,//*)+'"$&'''()$&(((()*$()'(++(!+-*--**',*&&$%,*%(-*)+*()*++*)(**)'$$%')(()(&(,,6-&10'+ )+))'(/%**&%(*(&$(*'*.-,-**-)&+)%%+-,,/,+*)(''')%'*),/++''+-*&#'/0)&+.-,+-1/)&(+./ 8((+.*')*)*,*"%'#)/*-'$')'&%$(**+,+(/*')*(&',*+..+*+,(+,&#''-++//*),(*+,+)'%**+++++++,,*'&(*#))')'%*)/,&(('**)((**)((**((**',*)*+,+*'0+'/1.2+&')'**%&%&),*$)*)(&&(**),0/*')&$%(('(+(&('$(,(,++,+'&()('())&$)(),,*)+#$%&''''$$&)*''*.-+)'&%%+))*(%',%+)'-0-+1--10)*1**,)$'*&*&'./*')+***'%*2()*+++++*(+,(*.-%$*/-./*70,-*%%)+,,+((*-,#+."&.')&&)++-1+.0.+*++*#(($19)-&+)02%/.'')()*'-,++-035'('+1-(,)+---,-.+'+/+),,+.110/01*-+()-.+./+)($'3,*&)0007-.-*'(+/---,+,.0)-)'*+-4-..+(')+)/)$,.*.)'+.++..(*++.220,()0420043210/..40*&)-+%0138@FH¿/).0'#."%'&$#%(&()*)'$"$&('$#%'*)(((()*(& ),((&((%$&%##(**(&%+!$,*$$$)&%'+-,+!')&#$%$-,++++(&&#&(%&)&(('$#%+0/)&')'&&((''(*,-7.+*(+-'!&+-+)()&&&&%'+.%**'&(&!),*--)(,-("#! %*&*/,+,*+++*)'%$***('(*,&%%'&$&+,7-$10&))---+-4$((#!%'%'',.*,23..++-(%*.)(.0.-0&'())'%$&"&)),.**+./+%$&(12)%*.,,)*-,()-+/.3$'.2+&%&(+/)"&$,3,,&#&))()"'*+,-+',+,,)$%(*)*..+*+)&*+$ ##(%'-.**-')+,+*'%)))******++(%#%("*++-*(,'.,&%%%(('&(*,+*(*)'&((%,+))*+*)$+&")(&0,'(*),-',+,.0-$*+*(&&(*'&*00*()+))++((*.,) $./)&(+)&%,&%+.*%$&%',,*)+)((''&&%'#"'++('+*(''()*.,+*&$)0%-+',.)&3-,0,$$+**,)!$*'( )0-'%%&)*'$(.()*++*)(.''**,,%'%*-,/30.-//) "*.//-*)+.+"+/#&/&.+*+,*,/+./,))*+'"**#2>0.(.*-, +''-/*()'),/-+-4:''&+1,',*+.../02+).1*')*,/220/01-.,),22-*,,,,'(4&%$*333;2440,,17-02-%#'-.0*%&&(.,-,*&%(+*2-*4503-)-/++0/,).63,2@1+)053//3210.-++,%",.*//06@HHÆ_&70$-"(,)%$$$)(&$##$$,-.,)%#"+-+(&'&##'&#'11)%**',43+,(#"'/0-!&)),0-&(#'+))-,*&)+$#)+#16+#(,)$+590$#(%2.%((&,-+)()*))&((+-2<*/1-(%#!&#$*-,.3#,.+)(,7*.,?*(&= 10*+"#9$&-2.% #%14-)'*2&(++'$%(&+:/#(,!%,.($.<(,3G*+'0(+%;/0/M.+&')%,=+&,3/+/21&&,)&,1/,,0/,/6.,,/-&$('&&&)-+(3.***((+00-4%(0?(*<9-'"30+18,#08$#24)%'=0*(%'-.>+'1/%A+0A6()3/-./,)(-)&)/1-(+1-,2*#*&((&&''$:1))15.#()*)'&'(6<'++!+&45-,.--83'$/50+)12*)0.%,'$*0(#)+-*).-*,%95%+4/))+-+)(+.)((+..,)(,* "23 &062+)+,+%2+7K((,.&"' ))-,%&-.5///,-/*&(.2-%%,%-54) #,&&(,11.*"!/0!#:&%%&&&)-!'(*/-)+&(*)((+.+'*1-#%0*'',,(&))(&&(*++$',/.,*)*+*))+,+--,+)'%$;/(-31+($&+00.05:*'45&&.**.*'2)0&3$*$)#+1,-.%;')1))*4'-".'4-R4(47/*)&+%#-,'-.0*/'/%))-53+)-1.,6:4/=>/'/0+/37.(22*+16!),=-14532:B;-,7(0)1#/$2))'!"2A-.1)4():*)+H4 $23%&68*(,+-8<502G804371022/--+(2(-3)'-+<*E=(#/0**-*0--54069*6()%8+#))*/-+..40,01+)67.)10)*1<6,2502*9-3,7*4,11-.54-)5*1'/#0&,'7'-%//@122*3*%'4,."1&+-,-22.(.-,2534*90-.1:/.00-+*(%-%+0(&+)#?4-1NÂj-+,'((+)%#&)& %%&'(*,-'(('%%'((**''((&"&'%(,*$,/,$"(+)#&('(*)%/-)$$()'*$'*'&)(),/)!&*%,,,*'%%'1( "(+,-%+($)+*,*)((()*+,-))//)*(,-+)*+)2-)(''+/('"!()$%/1*6"&$7*$'-)%!****'$&+(+'&-/(%!!$*+('()#$&%*,&(#"',,*)2+,&%.&4(* 0!$!&0-(,+%(-'"#%%%('%*-(+&$'*)()+$!%*)$ ,"&(%(0.)(,/+&".2./'6"'#(,''*),*!(2/($+1*%,0('#(+'&*+.'$*-+*-.1'!!"&++,//-/3+)(&&'()%('&'"",%'('(+-+*))('&%%()**)()+%),)$$%#'0.)-/,+#-.&#!%--$&01'&/*-'"&(%&%)-/0-(%$',.#(()*,-*&#*('')**)*!$,%#+*,,++,)$(,*,2,(/*!")'#$#'&**$%++*')' "((/)%&('&&)&&'&#"#,,+*()+-*.'&.-*#)-..--,-&!$%%+,*&" $'*..($&))()-/,'&)*('&((('+*(%#%(+('$""$&(&')**)((-**,,'#"$$&)(%&*')% #,,&#$5!#%8($#1'/+.2.)""-. #*+-0)&-3+/,,5#0!",+&).#*+,1/-23)4##5/-553424<+1/+--))02/.41))%73%*0..(8-62<,4(01)$)/1%0'/$,".((&B40&6+:0/0+0)#"3++ 4)%(02--2*21,.0272610&(5 132.,,)%+&*.)(,,.-C:<3EËv=00+"&+*&#$'&"$%%'(*+,''&%#$&('))''))'&*,+,.+&,00*'),,&+-+*++*.,(%&''&'"&+*+//*/2)!&*!0*'*)$#&)$"'-.("',,)((*.)))(((*,%(%$*+*.&)+**./-1.+)((*,",.*(%(1,1*5"'"/5#%* $* *+,+(')-+.+*13,)'%(.0+)+--*#!)-'$! %,.*&-, ,'$.&2&,$3(+"$%+3.').'*0+&'(%)-*'/1'-(%'+-*''$"%'(&$0%%02)+60*'+/-'$( 2+1&.+--)&*,((.,(+10*&)-)$),%4,,.+))&+%"&*))*./*(-,&&.)')+*)*++*'$$(+/,'')((++-,('))'4/)&$%)-()+*))*,(%,,"%(+0-*/1.-(22-+($&+'(/0++017/#%*)')*02/-+(&'(,/-)))*,031+&.-+*+,-.*#&-*'+.*-.,**(%*...0/-0*),+%&'#('*+&',+*(+)!"*,)&$$&),/*('('%%'(*,+)(*-(,'#(+*+$)+,,,*..'#&&',('&%%&)+#++"!+/,$(,-)%%&&%%'*-.-,+)&$%(+(&&''%%'()+,,+)(.032.'$#&$%'(&(+,*&$$%$"-&2!%"3$$$609&,)2)&+0.' *5.)0) ,<*/'5+3(2&'.+&() %)+,*)+)%4'+"0''-,*+)(.(+))13010//252,,"3. (2.+-2 -5F1/-22)#'/5%* -#.#(*+(@21&2-3*&+-,'$2$'(C2&,**-.--0-42.1213'%)3*4H1799522/+,***(*/25*/*B:D²Y0)-0$+(+*%!"%%$%%&&'''''&$""$&&()''**(&*--,,*'%+.-+*++),,)(*-,('')*)'&&!%*()-,&*/*$)-'1*&))&%'%&(*,+%*.30%")/)**)''*,).,(*,1;$')),00.*+,+++*)!+/-,)-6&.*6%+!'&"6D81-+0331/00'/.,//-.+')0/(&+-64(&/56$%&'()'$#-'3$+#.*/$0&.)<'/3671,0-&)0.*,,&*.+(/0%+(%'+.*&%(*(&&(+/'*88,*43,'),,*)'.4&9)&-/*$)/.)5,+0/*),0%%*'#$#?0)++,*$0)$',-*':,#.8/'-2)#&-.*',-,)%%)-9-%'+-*&-.,('))'7/))*(())*+*))*+1())$)+*-*(-/,-4745>=2*'.0,-33-391$$((&+)./((,(+-*$+:8''(*/32.).-,+*+-.--//2<=3)03.(')*,.60&4>/)5;/'16,*(,-)+.+,+/-&'/1&)*'%(.4&&((%"%*"&+-,*+-+-/56-,9"'*'&))''*&$'&%)'(*,..,+"+* ,0)$),,*(((&&&),...++,+)(())(*/.)%&+-./.,)'(/43/*)))&%(**-06+*31$ (D-4.4&2).(2*7',&7$19+#+6=1*40(0@$*/<%,.4)',+*)%,-24211/-+9.9.3'*,)).+$$,*%*7;770+,0/---,7.$2=6/14(.?-/22.(%(/3-+/(6)%(0+8,8.34/&+6.*'>/'&I9$/41''/2-0410781-612;04E-:<;7552/++'#$(.4/%(%C;D°F*,*0$)&+-'!!#%$%%%%$##&'&%#"#$&))''))'#&))('&'#(**)''()'%&)+*$#&,.*&%(#%($"%##$*,(*/./,)(()))*+)&%'(',,31#'-+,-+''),*0-'%$)4#&)*-0/+&*,++,*&%&$'12./ ,(5'0#$'%-2+),+!(..,+*(!+,'''(-)%(-*!"+!-,$%+19),,(%$#!,)5(.#//0"/"'#:#,///*(.)!%--+,,''**&()"%%%%(,*%&-0+&'+/)&,65*&+1,))*)*-,78$=.)(')" */--6&&0,$%*5&$,)""$9*"$&*,'5/*+/1.)3'#04%#53*$)131/*,,)'&*-7("&)+*"()(%&*,+,''.0)$#*++*('()3-'%).,$&)'%))(,/.),;?3*'23+,66,.2,##$$()$+, ")%(+(%;<%%%'),,+))**)''(*&')(-;;+)15/'%(,+.8/!3@-$.3("-4++),.+-/+,+//*+11'.0+%&*.!"$&# "& $*-.-++().76('8#)*&$((%!%#"&$!#*+.120+'(-+"!()#(+,+,..+*))*++)'(*--,*))+(+21)%',-/0/,)'&-.,-..+'%'+,/39,-<;*&3E*206#.(8*+* *(<(*3&$6-0)%,.+,9(/:'-.&$&'+,&0,04245/.,4'5+0'23/186-+1.(,7957.%'-)'*,.2'#4;2-/;)*!.&52/+'&(+-3.$5-;.&&/)5,=698/* .=0/)805)6-4085('35-02/0990)()*78>M=5884331-%*$"&)/-.=8H=JÄC.5'.$&(++'$$# #$%&&%$#"$&&%$%&'*)''))&#%'(&%&)#"#')(&%&&&&*.,'%#%,-)%%,&(*%#%#+%+1+$',+/-'&,/,,+'"$*-+.&*-#!''-//,(&),'+)%%"!&"&)+/0,&(++((*)%&(%(12--*&1%3(&$(.1) $#('%&&$'& !#%+'$(-'#1&#%&&0),*&%(($*!+&0$//5%)*!* &$#'))-*!$-,+,+,'),'$%$"&(')--)*/0+(*--')-0-'%&*)*+)&'+/16#3-4+$(#"*)'0,#&+&).*/-/,&'+'/&$%#%+,00.,-..-(%"'+%$/2.+-//14'()((()*/#$)&(,'()'$$(**%"&-,&(/++,*'&&'(/(#./*.&*)(*()1)+$!(,**+.0/011/)*'&'$&0)#.0"#*#$#&%%27))))'&&(*')+*(&&("!'(*+'+01,&&'('-1-)+,,0%"%#"%%*(+.+-.)(%*,)+.*&,.+()(&" %'%#"&&'*,,+)$)**+'$*(,((+*$&)&$&# #((*-00,(*+)%$&%!''&%)00+(('(('%"&(++*))*,'(-,%#('*,/.,)'%+**,.--'#%(),/3-.43++11%3*-!0(4*-))*5/##+'$/ "(($)-'-".*2",()'(&"(.++"&,-35+'*4$/")%&)'(--*--.,.2//8/%*1*'+,**!"//(,+:*+ ,'90/-+(&(+0-(8(5,&'(!7.7/:/*0$-<,0-/(;/.'>12222343,1.,23.,,2(/516,1442120-",)#)*'+-):2;7IÄ4%2"-)+**'&'(#"#%'''&%!$&'&'((**''((&&')*('*.+&$&))((&'(+14/'($%*,'$%.(+.+*-,8,/6+#)21&%/3-((%$*1/(.!($%(#.01-(&(,*-++0-&&"&),/0*#+.+%$'(%#.20.*+4*$-#5+)/4*(4/(3#+/,+./-"&"!%&*'%*/((9/0('0+%,&&$"(/0+( !1%/,:(%4&**%$.456-$&/.,-+3)*0+$&(#*.,-120.0-))..*)-0-)('%$&+,(#$(0#0"&)<)(-*)+"!2#$),'59+!-4++(++"!).'+.*&'+/&&(/*$111/($)1%%&'(((((!).%'0/,,(#"$%$(%%'#"0C+,,*'%$%/)#2/'5*//-.+.8380$ !(30)*33+*2'&%*-(+9*&48('-$"'0))1000.)%%)-),..+(()+%4/#'1-.,('(&#".(*4",M+ 01!&)&),*,,'# $('))$"&((+.*#(!&..'!,)&&)+*(*5/#(0,$'.,,0-%01,'(&#&"!#',0/.'&%&''%$#"$--&""#%''%#&'(('')+.&#'& ")#%),-,*($+/+*,+(.'""$%'*,/-&#')'$)>,+)=1*)6+1))'5.!(+#$&7:*.6,&*9&-)5&+.1* %./+"*-7:/$0@08%)(&,,*-/3<%+..,',;3(090+/.-,&)3-)4)2 ''8/9/131+').')(6*%#+ :0+ 3##3&*6$-2. 54;-90*.<>319)0.)+,,0"-%2,,(1442232/"00,20)*>*1'5>TÓN/)1/-(!&'#,()+&#&$#&'0.())&&+.,'&,/..0' *1*"+$),%)3/&)'+#.?(')-)$)-&*24,(,.*"/7-"'((380(*03.)*+&*6=%''%"#',2+5&,"+ &-13/%&3#*::,,1(..*%'+*#.*55%)4-4*2++!A'-*9(14K'"/Q4('=#$4!+1T* 7)"5&&3&'+P+# %&1/!#C*%(?/&*1,(.52*%'+-./*'/:&0 +'*'&+,+0*--/2.,2-))++),3.*&&()(&'!'53$".%'*++**+:,(25,(.7,(,03.!>2)+22,'0('2:7,&0&,A+)".(.C'%)4' ,6,#)-,,-/-($,' +>8*-5-0(,6,-#-2;+=6:05592*5=1+()*.=L¿;*'32-2&!%&")%&)&$'%#'$,*%&%""&(''+0.(,/(!(.)#)%+-&(-(#&#&'7 %(+(#),&+/0*&'(($&--%"%$"+-$#$-%%(&(..&),+'%&',%0#+"-#+,,..'%.$35010-285/,.2.&*#),$+2&.)5('-#'#5&-)80.-@)14A%(!*5&0*'1',#-(.!+'$6-%%&,%)&)-A*/*.2((0.'')/*&(**,.1*,7&2'%(&%+,,0&'%&*))1%##'&#$(-++-/.*&**)(&&*/&')++,-.6*&.1)',4)&*-/)94134.'"-%$,33/,2&/,<),&1%+*<$%(--('-,())((*,+'#**#'42,02,2+.7++.6.(/)"+/,,*&*,&(&%(-.)#+1/,22,(">-7.3++.+$"+64)%'*,+(%")/+%'((-$-1-+//+%2,%-*"''-/,)*)'&&) (=+11-''+,*+%-."(64)'&).0.+'")1) $+&),+'%&(!$%$&+%$%(,//.")>8&,(-3/=+.&2"%,44.*+,/!,"*!.!%%%" /'''%""%).)3('3(!",-$ &$*(8(3**6**2.)-3(+'(/,(0+3+&/+$.%%#$($!,**-.*'&""/!+!-,:2=.4/2+2$%-$3)'*(('#)%'6(&!0$"-0)+5/,01,**$8/050**-&.5>G>,"..*$%,0/4...+-/+8B&<773.(6-3'2(/&>-006"3=H$238*,''9Q$37B+'+#.0*7(6,)4;4+.-')-@8'/5-*$7-('%-&25;+?79.-,/-+58)7577742,>-3)--'"%,,))&1-%*,(%" 6A1*"-)+5,, **+.031+++2;@E?¼'0#+/($&%####&'*(&'#%%&*(',&(++'$$&'.-)*)(+,-+('&'*(/(-..7+')-*%+/)($%+)#'1)+*"),!+-)""),)(#&'"!'*%')(%%')(#/#-&2('('),(,:("$&#$$%+11,,4=1//.-00)*%''''(/*5$,&1!(&:-0'5$,)()&,3!$0")&6%+&8-/';"$,(/4&.'+(!3,2$%#'+%(:'(+*%!$+'%',,(),)'*'$'32..2.),%# $(++.,*+/1/-0,-33-,/,)%$%&%$(&&')((()%(,,.,%)$#).-($'()))+---(+))2$2,- 2'0/,((3:/%*.//.,*(((**&'00&0)/%&1*/,-+,10,++''''.3-/+(()*'%+.*')&#'(/%$!(&()'')++''(((((')-)%(*'(/0/,+*(%.+%#')*.('(*)'$"(2--�()+..+'&''-/+*1- ,)&$$&((()./067-/.-+*+,.#&)*+*(&"'*'""&##2/&.'))(#&9$'(%"%1)1$-$.*+))("$0$+) *,$'*21,!'*&$(*(.+%(,&+1-('%!#*0-'%%*'""()%$10+,0,)-.)&''&&(7$$+**)+<6F6/2&"*'$*'/''*&%'%+".(3"--5+)15/)()'*,()*'&54((*)*/30,-**/.+(%$&-3($&)*/30&736*9+2+4*2$+ ++.)$3&(;3'96A++,0-0.6'3*?/* 1&+24+6+>3+',,&&/1*"-1,('(,-)-202'5/1&=44*.010.*+02.16;CB¾9*(#$-"&##"#*(+'$&" %'&%& ")*,*#")&+*)+)&*13-&&" &%-%+.,3*#%)% %)"%&)+*'*/(.-"-,&)("#*-+"$%%*%&&$!#',,&2%.&1'%&')+(,;#",%(-%%,33-*3@,//+)))(',#-, &/(0(%0$)!3(*"7 '&/*-'!$ 1 $#8),%7)(!8&,#,2'3+."1)-*)-('("9()*)%"&-,,/1- )*-+)+'#%20,-2,%'2/*'),,(&).596.'7,(.0,.70,)(**(&#')))+)&*')-+-.**(+491%"%&%%'&#*$&)'/"3),&<.33,#$4<,"*/01/,**+(&(*(-,"-',!!,(/2-*,.0-(+*-+'*+&,($#$&$#,-)'($#*$45;5"))*++*+,-'&&&&'((*/,)..('/-+**)'%.&!"%(+.&$%*+'#"'1*.-(0)!).,'(,(1-"25,)'$"$(,0!(,&%24&/.,++,-.#()**'"#(,*%$(- %'74*.#&46@%).H032.,---%5.4$+!)'((+.+.;')%$$#!<#+)&!%$%''%!/!/()+(,1,'&" !-3+%%$)%"#$&%#-,)*.*%).)&'(&&(1 )-B-.*925#3.6*;&'%)"/)*,'&)(9 $&9+0%1'$-41+).+./+,.+)72)--)-01*%&(*2('&&$#'.-(()'*,(%672&>-59=-2"',8,27F+'&)4G-@481/82*2,A/&1&'/2'/'?6*)15*",2'"*31)&+0(D:)")<95/1&;/1*/21/,""/3/16;GLÌC*:*/&$ !",&($"%#!$&(&&' #'&'($ &$'%&*'#&)/*$'"$$-#)-(-&$&)$#& $*.+())((&'&&*'$)*%$*-,$ $($#%$'('$!"&*,&2%.&1&'%"&+((2 !&)&&+((++&!%.&+)%&'%%'7*0*4")(.$-)"'+$ - )#+$.%*%.&,)&..4'/#+"-#(* .5&0.7)1(-),0(&*0+)((&%)/((+.2$((,*),*&(/,&'-+%(%&$"$'##$)/32+&.,)),021+(&(,-*&&+**,)$,(**&(+(**-33,$!$%$"$('#+$+,"+%.$&?++*$%&+/(#(*,-,**+.&!',$"'$(#* *%++(*,)*)%%)10(''"((&#!!$'))&&'#%/&,) )*)('())))*&%$$$&')%*'&+-(&*'&(*+*)," $%&('&! $'%#$#-%,0*,$!!$*)%#%,/)!$+02('&%&)-0#"%$ &*%+,---+'$!&('()'"&&&')*****#+)%1)**7 #!4,+%"+.(5*/!+% $!$0/+&$%%$#'!0)3'(  $''''&& 1%3)'$!&*&##% (.'%'"&#$%#&)'))'(-("%-)'))'&',!+&42,)-)&1'2(*'$5 -')+&%((*")%-)#")-,)*1-/0+,/+)3+&/+$,#,39?:0- $-30(%'.))*(*,("(.0%9"325&- ("2"4$% 1%-/1'2 >070,:*,4)3!%"2)3/+ .#2-//+/.%'-(%'03,(-0#7*$4/3-/"3$'#/1.01$+=:<<:?@­8<"'," ,#%" $%$(%&&),&$+$!!&'" !"#!#(% #&$#*& '&/$).&)$(*-("&("#-1+')'!) +,& $&!"%$)#&--+' (**'#"$&+%0$-%1&*$#+($( * )*2,))&!$($!')%%!6"#%1"3,/#,!- 3%%&<((5!%%*&(9,'1*"1<*'5*''+) 29%*0?,) 0(2+.%%.!*,)''''+1'8()%*)).,)+/*##++)-"&(+03-#%!#'))+/(,83##!!$)+($$+**,)!-))'!"&$)''&#"'.))&"&-.),(2'/(('"<#)*!!$&'#&()(),/%'-")# )!!)"'!#+-%#&#%12)'($&+-(!'/$%#$&$'2*+%:+5$$""$%$#$&%###%')#%(%%&#"&+,,-+ !('%#&""#&!*!)1)(/'#&& .,)+,$".*++*(()*(!'"#)(*-0.)!'++'&*)%*$")+'!'' (&",#/*,#,!&%(%%)*')2"'."%'&#%'#$.-%!$%#"%"2'B+#(!&+**-,*!1&3(##!&*'&'#+!(#%( #!%'$'.-()(*.("$-)(**(&'')0.2B9#$--)1&#*$/,2F&+%')$"&&"*='&(<,&#$'&$$(/+--)*,(&,#!,&'%$%,07-,/2.)-4*%'**.2/'!+6-87$&*':-729$+%./-)#%M8B%0-(:%/941)%+31$1 $#40#0*$*.'%,2.+..(-$6;:)936'4#�-4:+ )&*4;>EH¼v#!)*$'($ &.*"&%&+)&(((! &(&)).*%'(%&$('%&&%"&))*)$!++$'*% $*.6 =1=++);(#-=9%$-*$&('%'.3$(-)#(,&)# #$#%*,&%+/.-/(1-$(,'& '($/+$-3##-*!$(*'$)0%*+% #*/ ,4*#)#'$-+#..'#'*&$''#'(&&'(&+12-).7&. 0++"B),'4",$$%&22"'%()%7##!7"$:,,(A%**+,'%,*,/-%"-=-*2# 3&#-&#+,9)"%""&8(!()!/))/.'&+.#&.,&#"3 %$$*$*##'CD*&$4*&++&'-7'%-9%&0( $,'!*%$*,(%%'##)*$!"'"%)(*(!.,(*1-&('&(.0,'%)+)&%'*+..%00&+&--'&-,&%$$%'*,+)(&!$..$$-",$."+")$(0(%&$*.%%!&&!)#'*#&,($+%-&#&&'$#+1,,(3)4%)!+$*,#$'#"/$)!03*%&'*#+)"## '%)+&&)'(&'"!&+6#&!3$(#3$)"-'!$'""+1'" '("6!/#*!)/#$(,,/.,)&(+)$$!##&++$#+!''&#$**(# "&(*.+((,,(),5.(&)+($6)(($).&('&1(4'%$'+*%$(!$2&,*,#&6$&%.2.)((&1&!%'$$*.*)&#*1/5'#%&/1".!(*8&0"1&410*$/&/"(&*;+$0K')/9%26(1!:0=&*+1#/+3"!%@-#/'%'(,,%!)(,<:+&0#%,-32$+<=+%12&,*,+,46-*)'+8HOÁb)5##A"')&!#*(%%$&$#("&"""#)),& #%$'"%'#"%()#&''()$ **%(+&##$,*$,1%1(5&(%5"%(20#$(!$$%&(('&!%)% &*%*%#%&$&)(#"'*(%&,/2,%''")#**%.)) (.##*$! !%&$&)--+().113'*4,().'-*#02%"',('**%(++**+-*,..*'+3)0 017)>''"4'/%($ &( #)%./):+.$.%"-"/'2%))*+%#*'%&)'%(/)%!%*%#+&%*(")/&9,$(,*),4'"+.&"'*%$*)#"(,"%.,'&%&"-#)$!,2-64(.*1)&*+&&+9+'+9*&**(.2)!$%"#*,)&%-*+01-**,(*,)+,'1.)*/+%%*" '00*$&''%$&''&*#+*!+*),(&)(&)##$'*+*(%&""()%&(!/&0$**& #,,%%' %*(-1+*"$%!&)!'.*&+.*&"$ 1#)%'&(''/503/8+5(1,-&()"$)$+.=/"($&!,,%&)((!)(#&(&'+())$&,+**00)')'!2$)"-)B&*%7*/$,$#(*%$.7&)'%('&*!,'!,".!**%"$0()'%%'%"" !$# $")$)"$$!(($&+%$&*)$! ,)(,+((+2*(+(!#+1*/0().'2'#0'.-+,.*"!)'1)8&$'#2&-#-#++($&++&-%#(($$)&$%$"(.*5---)/3('!)'3!'%6(/(-.16&)' ,1216+;&.)5 .&21*(6.,-?!*,* -#1+/)+%1!2)"'%(+(()$+0+-96)&("&+'*-%)03,&'('3242/11(//15>IN»v*&0 &)'!!&&""'&$%##*!'&"" #++-' #%&)%'% %*,%&&%&'%!!**%)+'%%(0(%(#( /#($2"+(*)$&%(&&*-+$"$'#'-(*''))'')'#"%(%! +*+)(//%&,&--&-'."$("$' $ #''&&*'##*1/*4#"10))+!$!)+&"&)%$(()*++**,.-+**(%(,'%)6$*'& 7,0$,+""&(.3.,0)8/8(%,#&3'%$'&')$"(&""',+&$&-)#%&%''-.# /2"0&!&*('),"!*/*(**%$('""&)!%-+((''7&,&%0'%#",#.(&**&%(2)$#5"1'"$%*+"$#!#)+)''(&'+,)'&)%&%!&%1,(*,)&'*%"&**('$$%&&%$$$*#*)"/0'+)&'%&,'''),-,*#&#!$%'-%!1'2&*1%'0(%/'%*,(+0-.$"$%)( %//)+,(&',$*''''-2-+)4(1$-*/)('"%+)*(4(&!!#)% %)&$"('$&'')-)*(#&--""(*%%&"#5&##+$$, ')#%)*%#*3%0-#%)$!(% -$-&-,%!)!&(&$$" "$')% 0$ ##)#($&-$,((+-+%"#,*)+*(')).0)! %+*(03(&*#1$-$,*"/./.)",%5'*"",=&'"2&-/-**,.-(%'+*$#(""&'%)-'*),*#&*%'+1%)3%#'8((!0(4*$2+5(.1%/='))*#:#,)*(-(02)"!3*(%-#&=!*)&#%-/)')&./+,31(&!!)*##((((-0*!#,--0.'&' ./59:AF½ƒ/"=),"&&" #''*+'%)('*%)'%'&&,,0+&)*)+%&$!!'++&'%"#''$%,*&)*&%'$-1((-'("/#,'5*1-+)((&!**,./-'"&'(%"+1,)*++*(()(&&(*)%"953-&'&%+$,-'-%/$$'#$'$'%$()(()%$""(.-("##$'&$%%(#!&'+$$$$'(('&%&(**'&()&%&'2%//@-*(+&E¼X')"&.)"%#!$),.,$#+,&&)(""+,''&-,)-,''"$%$&**(''$!#'(&).+')'##)/70'3;/,&/".(5//0.+($$'(+--*))*'&'$"+1+'*,+)()*(''(+-*&'',,)-20"' (+'-&,((($$)-&'*+'$','+-++.11'(%(%$*',%--$-*-%"!!+0('%$$%&&$"#)+($#) &.#/,=.,#:$(*+--,.#0(,/%#&.*;/-*#$"$*('-,,**+--,-)(..#$3+(&)-,,11-,./,)'$! %*,(%52.,)&%&($&)$"#!:'./-/(/7-"6<,)"+('()'%$&#+!2"0,(.72+-0.)%$'+-*+,-//,)0,,)!#+,/'),'&)%)''(&%).)')02-(&14(.207/41(&-,&$+**,--,*%&#%-/+-**$1-(()0,$)000(-.+&"#((&$%%!"'$.,!!$(/)0%5-5-*""&&*+&+)4)3'1-*++*+*)*,%1,)1++%,*$""(+(%'%%+'&+,'&($%$$(#)4' $+&2$#5'(!()###%&)&#7#)",&!('% *,'&"*/.+)'%%()'$#$%$&)- )1,/-***(')*+06+++)(('&-0/)&(+*, !&$())(4'0!/5%(**'&$#:2;*/(6+,)(6$'221.*'(+$',.,'&)+,12/0/'-/-*,-*'3?7.045/18'+(A5/,0&/-;5;+(+>'0?$0)"-.) *7&3!3=?';"8(,1@+1-''**..()&*00,+*'((*--++&15-*/0+0,-+%(14739;5@MÂ[*% " #!$%%%(++)! ((" '$)+$!'('+)#! #%'*,*%('%"#()'*-)'(&"$"+2(-8*+&-!.$.+(-+(&($'*($#',###! (,$$)+(%'*+''%%(,+&/-1/'%(&"&%)&-%++**(&*1$'**% $+%,/)$%+/--*13"2#)$//%*%+$#%#)4:+*('(('&"!#)*'$#'2+2#1((2-8+.%<",/-.)'.*6-.("&$)%;/*+((%'-+).+-+'%),.0(%.1##4'%%,0((5.-,,,*'$'&%&+/,&20,)&%$%(&)("!$!1(%)<(')(,",/()" #--#,G&)$0)"#&'&(')1&,0/.-+'#%$""$%#!39$%+-,*,&*%$%*+($#)+*(')(&;&"23""40!%'.0#6,,"8+,'(,-*&$",'8,/(5$/#(9&'H6&%-21-'),,+**++,00,..',0,(-.*+-6'(-+2-9:*2+>/'39)-("0.8!*B)(Q2))6*))3'#'<"+('=-(-;%(';3#(05/'(/0-)'*01/+),,+274)87.-,0>*-3?/73-,'8&0.6$2+2$00B8$(;&55O%!!K1!&41+!-+/E'$4#%%B('#9+0/E)*25102//!#' 1:#*&%.,&+<*#,1+).3)*0.*)%=-382AO¼R&$-.&$&#"''$&+)%&(!#$%&&)+'!!'&$,++($'.,&(&%"(0+%),+'#$'(&*+2/',-%+$*2+$'..()+&/)3$*!-$23!!'%$()-&(-*(,/...(&*./,*)*#05,#"!$"#(+)(()+&#'+09;($8)..+&!&,(&/&'L/$-&#)* "3%%*%/'$"5$$#<*#-%.*B'#&+&,""1$.:)+<'(%8%*(>,#<6!.=+"+)+* +,(+ -1)"#",0.*((-" (-/,#! #&$'%!"*.,+,-*)+)%(--& ")-*%))+,)%&*8 0(7.&.'/&2!%'(%#-72%*!%+&/%+"$*--(%)01*"+$&-12+#.0,+'!"& (22)"%3,'54)+"(,..-(#"&.+4'0(+('++*./3+3-()#(..*&%&"#&*,,*''+23-.0,&(/(&3/1%:/''"$(,20&$+! 1 )!&.$$"1/!2(%'/3, )-#*&$&!-+-.)$$)0'".,),*9%"!D:))+- !&1 (('/"$+*+( $+!/,3:0.))(36*&%-*2&%6--!%%,"K"1.&,0)&"!#'*+4&.$+(#3,0%1'/-",0/*+31(*2*$0882""!3($&&'#(#.%.%")&!0A0$60'%#.."4($$,'-#%(!<%2 '251/107%02@,/,0*54*21-.*)6+550*%-%=)&/< %1.(,.C6<07" '''',/(&0&0 %-5-7-0/).'-& %$!%+1,A4.&D##.3*''"00$!'.6I-%OP$"5h<(+"*/.,(%$%(*4(3).& 6),)@.+&1&+&&*%10339=/#(5''0-''(0)*--.+":(-*9$('&(.2000-?.():=+3(*(&+0,#0#",(?(4##)03/-.KJ/8:E,)&*#,,"+)3,'2+=*37:,84=+-)6.8.4%,04(4-9*('32.1.&'*,#('(1"*'.)06)/'<0&+6?00)8/2!02&,.(#&+-**600AC­(&%%$%("%!!&&#% +22."%!%(*.0-',,+'%'(%.,'(-)$'$/0+,,&#--)%%''$)*#'5.,$+6.#..0-%$$)%4(0&1'1")5*!)$!)6* ,+%$$#'+(+-..,,,-*+'"$*)#-(&''%$% &'(,+*.0!&"-+30++,&%/-,",/+-'/()-(!("*.').&%(%:0,04$-#,"/+(+1-$'2'))7'*&(!0#*"-(5)0)8)(#.#(0)))+%3"-%&-%"%'&(-%&(+,+(%+*13+%''!()&&$%,&)(#%++&+&#$&$##%*.,&"%)*('&#!&-0.''/6'*%0&/ **)),0/)(*&&4*7+.#+1+17.+*'#!#'+&(/0(',."&(*-0.*/+)((*07.+-,(,-%#'+,.11.(++%/"*)+'%)*+0%317",(1',(&,,,--,)'*(**(,.(1.-)'./%E(%5,*".+,+'),'-!, *)7$4$),&1&10#!)"++&$&%!%-)1@/"%"+(-1-&%+3" .,+10?-$&('#"&!$1(+'$05+:.*2,($1,")%(01/!A&'04/.-(:9 2,-1$($3)*-3.++)&"#&*4-:04#-',!$ 7'%&"'# '&+/67)" $.$%('-3221)0)1&2%+&.-2%,B3;-,+68'-%,0./2/).''4)6)>,+.12.--.1)+8%),0'/0(1./*-;0;'3-7*1,<,+423G.0,6<,'?,623*--15,"#)(!"#.!0+554-"4*>1(,39)0 ,*.'0$(*((*-,(1065:H¼-92+-"'"$!!&%"$ *//-$ %)**((*)&#%# %)('*($%*(%)02)),'"''&$'+,**0&*&!.0'%'-$-%*-"(-%.%<>4*+-,..($%&$&*+,2" -#266/$$1%*'.7-01:*.)8#/93$%.0.#&#(,*--$1'&)&)(/-'(,*%,#'**,,*))'02)1<5'-&&2/2'*%*/*# #%# !',("0%*)$(#('!&-1;-)4+*''(*)##("2>3 (( ",31/.).?',(3( )40(27&-+50+)!.%*-+.20*,/.:"&(H43332/.- .&3/8-=#'&)$.)".79%4&3#0!#3*)$*%3"("- .$#.+&&.2)"$.2-42/9...942/%3,.#/5*/0=&*(8*51()*+-.-+(7-<<:R¬%1)%*$"$!!&%"$#)(&)&"#++("!%((#)%"+.,.)(##'#!&,/&'+'"%&%$'+,)(!#0"(&),'")-%*%"#+)# /#)%-+*)*.-&%1"-1$(($&(&(*&)(''(((()-0.*(&$ "(*&" %'# #%'.$"5U.-#'').,+1+,&9++!1+(""'%"'!%*)*%3&&' )*8$*$.**,0.)).*+3(,$)"*#,!*&*"5.1%4- ,7(",,$)(7'2+-,)('&&(+ ")/.'& %%*12--(%**&(((!".1+)'%'-0.))*+*(&#"%&*,*%&*#.= -)3&,'(2)'/1)$&"$1#, )#3*')+.-(-*'(++(%0.0/)+11(#%&%,/'+&#$%&'*.$,1',5--/-)''%!$& *+'$(((-,!+$0"))++*+04520-,+*)'+&%$#)+$$((%%%&(5%023)3-,,'')'1.8', ,(!!,!0$+()-3%)5".+())'%$)(--&#%)-+&#&)1).(*2),0,& .%/+#""$,+(**,&,&0$$5.(*10+-1'(%4"&*(#)#!+1'!*( )8;.%###'/1+#%#!"'-0)3$) .)415%0!+.$*5$) 3/-,('*,#'*$$)$",2.,+&.0@6?.3+12(&.*$,-*93++%/()'&,53,24'4#*A232/.-+*+4(4-0)$)"*/.70#48.;-.!2(+%9//9'&(7&3/ $#/)) (+&&('-*2+&40'.7*.9-.,,!/7+/0+"''2$-,,.0.+(&3*;=;T¯>8*,+#$"%!!&&#%$($ %'#$&'$%+-#,& ''#(**$"$ $)*$')&$))(%&('#$#"&( %%'-#+&%#"*1-# ."'#(-#*1&#." *%!)%'*(*+&+*)*+,*)!&,.,)()!(+($#%&')&#&":^.(,*# &*-300$4''":&)(%!%;# #(*+.' 8'!.#):#)&/++-/.)(*)-6)&$*)%/)'4"%4** 41/@(+,(-+8'3.2%&('&%%&##%*/.("+ !$)-+*--072'" &&! %'$#$$$(-+',)&'(($ ')/20+*-22++:*A(-(1%-%$&%*47/#'&0!+!-)=2()..*(2/--.+$3..-)+/-(!###*!+(')*('(,'*-%#&$'**'&'&#(0"+&4'+01,'($ #"/ ('3#*).+"",0+/,)''''&*''%"'*$#)'#%$$+"*B%++/,7B('3(,+6(1$.-".$3%++*-=5#9J1*****(%"#(4&((2$&()(&%%$'5*#*)5$&4(+.N2-,68+(6(".%)*0%("1" 4/"&20).50 #D*$"2/.% "!")!$46+8[a&V^3(($!%-11(**(&%(+9/4#*#0'7/2(>1.#.18'!-)-2-./)'%eB087)%&-2.,,'C$+9L(!#+-)5B).!)()1'#+*'&.87085+%///*,,)()(%@=(8;A*.-4.7==D:16.& E2*/,7/<./"E-$-@,:)%(&)&#%""''#& ('"#%$&#&&"!%)+!-&# $&'#"&$$,(*&%)'#%()'%%'%!$&'$#&)('#!!&"+)++*-.&$!/#*(!)0&%/$&$" $%"+&&'%),))))+-,)&#"#&)('&$"#'*)()%'')&"$2'2&0#30&")+'&'.#+#1$-+#"%+2## !)*&&$$. & . #%6)'+&&(*($!!"4!3$&*&"*$. -'/) -#*'*$,1&"(*)-(2+(. $&%##$%(%$%&&$!*! %&()&&,,.1-%$!$&&$#$&!%&$%('"+(%%&&$"&(+.,()-$%"'+$.$/%!&-00.'(%-+#/*60)*.+'*.//.,($"0-.,%%)(+#'&"-%)*,-)%&+'*)() #$'(''('$"$"4)-.1-))$ 0 &$/!-&#!%&*'$"#%&&((*(#&)%') $"&3'141+&.:+'1,)%-#3%)%!#)2$'' $ #&$&''''&%$&5.'*&2-+***& "#.%$.*1!%2$ %% !-1#!1'+!/+-$))'"*"%*%'.,,)#:)$.)-'&-+%(%+*&#!*:O-/.) %&(+&!!+**)))*+($!(,&) 8-+ + $ ),$'+(*'?#-4-,0(&*.+,-)5 '+; 1(#+-"+*##$1(!$)+*/672-5,)45'$()'(*)%)'#'1%4#,%-338+40*,"8)2)$1(1'12##* 0$)"(%#"()#(.'4/$--+;8015(*3(-+6'$,-/ )!, ( /+.++-+&%(*".02@F¸p@'4$%$&#"''$&),&$#$)%*+($$$$%4.$*&!- ")*-71,%'+&!&$%%$%('$&#$!)/"3$")$ %:0&%-+%-#-#105.")"+#/(#().&$#"'-+%%%(**&"*"%%",'$&()+.%($!##$*-8!#(>)"!$$)67-&08*(+4)(8.!$"$+)  +&))%!1(&'()*+)%"!:&/)0"'+ *+ !&7,-%7(#".'$(%(')"*!%(+-+)*-.)% #$+)()''*'!! #+""&,,(*0#)+&$&%!((&$##$%"#$&#!$),#6%%-,(!+#1"'! +.&#(,+%"**#-'()'),&#*%).-)')-,+.+!%%0(.,&4-$*/-$#-",((/$)%)*)()&"*)%4'('+*)+(#$/ #(-,"%"'30-)(*,./'(,*#%)&2/!*(!%:&/"2!%-22'(13*,$:+'$!!-!!/(#/:(%"$##%()* +.11"%(%$)..(". ):+#-%!0"&))$(+))!)$%8*$*3%'4%$$' &.!'B/(#+"!,) "31 '82(1&!&"%%),'#)%$$&),--*"+!21;+&&,+"-/0.+-%,/$&+,56)037/"")*(#%((+-(.>!&%4(%$-!$22*!1.&111&-,-1316$5'07,#)+*+/.))2#*#%E$-'.324%+',7 @&*()(=33.;!&*;*&*>".I"&0.$*/#&&,(/#:26/,(1,&&. #&9!3")$*'(*(##(2"601FB¥E+7.+'# !"#$%%%!,.+,)%&*.-(*0,"(0/%#+*"&7$"#;+&$*-+*+' %+(!+,$""-*%(++#),!'*-,)%$#&%%%$#&+ (,'$* 3-!&&'!%'"*1(#"(*" '*)$%6!#'#$%&#%= $''$$)-(%(*#)&#""!&)&#,82#'))'')(&,+!$$,6.&"$./$"#%&" %+%,&-3'&//+-,&#),.)"#./ ',.(,"#)02+2%$+)$##(-+)-.)';4,*-121))$&01+)"%%(:&#,"#'(- 1+0+);'1$,$4,5+<,1.3(&/"+)9%+; 2: 4+/'$)#!&0/'%%*3.319/#*#,--+'&(+"40!#+/6!+;-<=LÁU+-"%)*"""#$%&&#+,*,)$$"&&$(.,$"))"$,+"'3%.*6(1*/1.--*$.*&'('(*,", &&!*++&&12%.+(())'% "',-*%#,2+'+)-%60!*+(%!$&").%&!%)&%''#(#4(+($,0.:P'*,+)()+("6,+"5#2$(3*()(+9&2.02-12((,&%(,+(%%'0)- .%+%%!$($ &*(0H*+*3(,-,+'+9,$-#*.)($',($)"$&&&&(***-%$-%!!$&%%&#)**,($'&"#(($#('$$'+++////($*&$!!"#$$ "!(47,&3$)#1#6.$!&,+'@$#0$*!441.++,,*)***(%#9-'&%))"*#"(*&&+#+"'%'*&)(!&-')!#((*.,*)(''())%%&++(*,2-'))%$#44&#"#**#,%3&'#%"#**%%(02+(+,("&'%$$#!&&%%(,*%-)+0)'-)-.$ %).1/*+,*&()'%')&!&%%#$&%&)&(!*'(,#(+)())'"%0"*',3*$*+"%8! (&-9:%*!L<*3H#.((5&(*%#4&+*# $*,%.#)(',(0%"$(%#"##!/&&02*'.*+*%#'+,+-$#%'1@)$12)'*' "*,*(%#&%1'&46%*5-.+0/,$Z,+).(/&$&'+,%H2(-00-(.3/*,,)*840..-+)(-/152+,+) 8**)/%)*&)13$/(1%.24#/1B1/07%3 %()+9.4+;03,B0**F6-(D03,>6$&& (+;71)*1*,-,**,..-,+*'',&+7*>@MªB!,(*'"%$###%'(%+*'+*#!!!$*(!$%!%,* (.&$*/11-++(%2%"*+##-3#,&/&(()(*55'2+$$),*'(&$%'*++/.+))+*(+ -')'$$"%%#')")"$*))($!,-,.*#""(-(-<+,--+)'&&(,,7)1*5&)2)*) &#(),/**+'()$&(*)&$&(#0%* /%*&$ #,+')%!"8$,+1')%"" *$1&2-4#,,+''+'#'%&'&%$%&(##),**.*'&*--,.%**)+)&*% %&#$)%##'--),,,-'#($&(&"!"$'&('!#*+ &2+'#!)(#5#%+'-!$&'*-1+)'(**'$?1(%&*+$'$%)'!!&"*%#-'($&,)!$*(&!&&(,+*)((()**''$+100-2/*,,((%34)#"%-!* ,$/$,"'(')&#&'/3.+,+()1.'$%'%%##'+*&/$%'5*&(%(,&#$"/&)+&+,'('%%()'3&&2 ++&%#"'+("+-$+(*-&('" #$"#-#"-(,1$!%,"! ('$( ,6/6'""'&(!!*%"0#&&" $)+'*&/%%"?,$+''%"!#$%$0+.4/#$/,.+#"*/+/*#"!$-8%$23+)+)# %+,,-&*!%0-1#!02$ *-?&$'E(/+1#(-'()&'($:-).,*)'*1/)***-.011-*'&&06881)*%0.0-1$' -2+0*51!2,0 *+/++:(&005% ","1#!$'7*&'5.9,/"1*%..)('(-.834/.7'(*,---.06#&3+!!,+4(>BNž: 1/.$'&$"#%(*'*'%**"""!!%#"&&#&+&,6+8//---+(&%#"+" $&"#)-%/#-%."#%*('./&/*%$'*)'$-0/,'#3&%//""-%("(%&$%&&&('!(#',*((%')- &*'#"%%)))*+($!%.', ;0*6+,.%-/.(3)5*()$"#$&&#$&'%""%((+#"4''()%'..*- *$#+,.*')&$)14!/5A+,00+()%!$%&&$! $$$#$'('"!#""#%)(&('&+(#"%&"$*#!%$'+*(*))+&"'')+)&###"!&'-2/.09%.,:0*-,)+12/&5$'341/12/,+*'$%()'%0--*#&/1%&(*& #$*)(0'&#'*($%(&& "&$%))*))(()**$.-&,330(,++//,/)01*&')+'+,")+%(&$&$"%"(*&#$%#"+2/(&)+$$"!%**&5*1+-* %)-)+$*'2##&&#$(-.,' **&/0+#%,+"/1&+()*70&"%)$%!+*18&+41()+&"5*&"+,'%"!!#%&(35*%*,&,/-#%+,-*$ "#$%"&34%(+-+"#-2/32('+(+)&"#*+$6U"- -,2#+3/%$(*&'*( 05'#('*'))*/%)..+(),(0346/''*.G%(#364*53"$,-$8+(4.;39+6.8)07+(%,36?,/!)%)'9*1*0%9,<,*(/"*+''&$&5*&>>-8>()+,,,--@,5@1.4(-,4(02+)()(&&($+) "/1(#0%(:-(+0-$%)&%')'# !#(.' !$$20(/!01:.',&/&+'$**&%'&,.$!'+,#8P#)#""+*(-$&(***)(-$C%" %-+/& 26%)4R7*!3-0+(+' !')*(&&*- 0*1!+*= ))#"!!%(/$))$, ""0%*&"7#)'#'*+/***(%##$**(%"!#$2.,--*))*.,)+)',0+),*$$("#))$%'!))%&+'#'-+**+*&"9,&'()$5')#7%)-$27-%'--I%&(1#,N:&!"#%)'((''&%%0$$*0,!&'((&%%%+"00+,"#(*$!),&$*%(*%$)*,+)'&&&&),)&(&"$&((*.*&+.(()(+-'07+3(/!(*'#%"#,,*&#%+0((&$&**($$$$'*'!!'2#+##&/+!$052)-,)***'"!$&$'1@%'(6%$'&##)-/"( (*'1-$,0-((+-(&1("%)-)(.-$,E$1,)524K3(.>(0&7 408%%$B<9631133%$%)*)*,(-.8'!*!:#%-&&%#! "%/"',%#(&+,&' $&,.(0#!))'+--$"('!1-((**%!F.-6)"(R!1!=(",B/,)#-"'%()%'+)0*)*')+( +.-/-)**++'#"',1/*+45.,7-,/6*(47-2."&!;6&837(327%*#4,3)A,614'#-7.:/6%)&E6/)6%,)I63$692).+(,,'%*75711=1)'%$%''&'*0(.:-()6)73F®G%-&(('&&%%%%&&!)(%((&'$!"'*++)-/+&%&')%!,#3)&'+,)),++(%&*+),*%0$/*,(('$'(",*&$"""!&)$$"*0&'1,%&.$%+!($+%!()%'+')*$#(*-(2F %'$*)#!$""#%((%%&)'2%1)** (&,&"1.!))5$"+%-+)-' %$&('%%'*$0(0"+&5!(&!#$"##+$1(*$+*$&)),'8-1$+#6"*("%)+/)**)'%&',(&'$")'#"$$"!!'+*'(%"&.))-,&%(#$(% %*&*)%&+($((**)'%%%)""%&+.* #)!!*,"#&!@(-)1%&/%"#"'0(+.-)&&'3%!'.,!&%$$%((&*"21**!''-&!()&*(%),((.0-,)'%###'%$*-%!)%&'+/*&,*%*,#%,*'6,2'2##$(%$'%"%,,,*''+1*,-,-//,$%&&)*%)4 0*#"(0-$&-++(%%#!('#!#''# /$*($%+/.+*#*#*,)1)%+(%'-11',&(-%*(!%'&;%)&%)%$.+**-!' ''&1!#8,'$ &#%*,)(*(&):'#!!#4%&%$&'&%$&)/"'*#"(%))%"""!#!%"(/+1&'.-*++.$%..%'*()..-/6$-;+!%4&2&%)!4&('#%'&*/-3)#"")+$&,+)-.+,***'$%(+)+)*11.///%!8'(#-%*+*4.14%2+6*3'.$,#+,: 21/%.() +&3,$%+&%9)*0*#&!#$**&+)%"!$'))&'$!$())(&1'84C¼T03'&&&%%&&&%%$ ))&'''*)$!$'('(#(,*%%*/+-/#!;%#%+,))-1&"(( (:$/< $&,!#(&5-# "%$!#%! %(49) &$)3&+#*"'($(0&$&$%)'0-#/#"-)*%$()(- #&#!%R0$;#$& )(%0&', 4+"$%,'")!##! "%-+&%1 "&*%")-($%,&)@20")%!%+17$-,4 %'/+"#%&)%&'&%$$&)#"&# +&#"%'%$&!&$""*&'--'%)$$% $.-+*%&,)%)#(,("#(.*+)!!&&%-)%-(&,*"#,+".E*)'1!-85++2)/42+&'),&$# &..$# $))'(!21)("*$/*"&&%/&#)-*+25.,)&$"!!&"#/5)&2 "$+1-+2%#.. +.0(-#2!(,++%#(&'()&$&+ '++))(&$&'(**$%",&'/(--'&(,2**+%(2*$ %,,(%)$0$,"3**6<3'")1).-',"&$!!&--)<%#)") 0-;4?(8 /9>#3&>62%!-/)&,-(% *.8-!/.($ $),-,$!-$$*#+$96B´5*14&'('%""&($'' 1#( -,*+*)..%"# #+''!#*,*(')(%%(('')%!###)*##%$',,)%*,'./!))4$(!!#%'"$.*"&,(""&5'" #$&, *6&**)'()&#, .4 !.'#%#$'#!'"''%""2,%0#*%%)%"&'%'$(.#+)>#( "/1'&%#$$#%')' $#$'&"5#0").:.!,0%$%'2)1! /+.5.')&'-"&**&#"$'"!') %94.((+-*%)"%"%$+,&)1,&)+)$"$'%'"0$'(!- #-1+" '*%!#--,..#+-'(1+%//!!/*1+*&/!,,&%,1/*(.)&&%!5.'$&('%6'*- "+%2-'$%*/1%($#**""#$&((&$"82#+.%&%;*'*.*%*#."'%&" %$"%&,"+)""&&#%*)$%03*&*( $%&+)%&$+.&#.1#*"(,##*'"')$ (%($+))$/,-0#%'#&*,1-!%#(*!!'0% 20.;-/+')(',!"))%##"$'%! .,)/'**)"&-"1+ ',/+"43 ,( !%##'"/)*)%,!$(%.0)&($-(!$(((+-"+'5!%!0&").+*.%$$%&$ !"0+!$,#$+.%,).5"$%.+))''+1-+*+)'&(+0/,+('.@-) %6+".+%'34,((4-"*, &'$&#)(4."-21%F' 0<,5 #)F#/$*!)(,/#.)<0- 3,!,0()4(-()-%"#&#!#&'+/+#" $% !# !,4-)6CÀU:$-+&#&%$%')'$%',('.,.//31&(,,')/.()$"&)(%$#&&%%((&%(%!#""'& !# *$&&!)-"# 0+!##/!(*%%+-)%*&"'+*)1.9/+831+++-1783(+,)%&(++'%%$#&)'% !&$!%((%&*'(1(4+:0+=))"!)+'&)**('<%(%&-++41+%! #,6%))$)3&&$')*.13*E1010)2$:.,.A#$ 5$#(3HD..O,*$$.!#!'**(''($#)+#(:-'##(*($*%")%"'* )*"!(!%)*($""%!-<`;*34"&+#.&-'(272./-$/%/(4))+'(/*$,,$"()"!!* (!%%.*(*+),0>1&(/0+%4/)(+./.5).2''.'*'%$&)*+-1,'($&&&''&$#)4+$25*()=*();%""",!) (%/,$(/0/-1%-,%**$#)+'&)(,+''+(! ! (*$ "$##.2('0("11%'(&"' 4,)*&)&2.,,$)/-#$(&(&-/&!%((,))/,1E'(" ')(+%&72 2$&&*7D&((/' *'$!*3'&""(,'&'''*&;.4*1/+%#*3/&.)"44$.55%!(% !#!*!()$+1*'())+/A-,%4!) &)$!#,+)(%!B01=4 **+3F)*1R10;S3/6*''((&'):0),34+")-/7?7)#<./'(6/+&'##+,*,?9)%/.(+690,41),-)#*99-%(?+--/889>0/X11, ).F76$;2,"B8),0&'63(/,2"%4,++0+%(*&%&)++.1.'0*'#!,/,+/22;FÀL:(&), %&'''')+"(') ($%(*.*&(# $'%+))*)$!!!$&%&('$#'%"$" %-%$&%'&/%#!#()).(&$5%'##(*'*&#&)(),*!'!0)%& ,-$(-)&&),+**+(%*+%!"%$#$-)#%.,&&$.!/*,5,( !,/)'&0$$*/'/+!/.("!*3%'&  .:,+"(1.&$) ;(# '1#)$0!)&'2+()+-)&,!%3%$'('%$&%#'*%(7($ "'*(%)% $+&"'*!!('!+##$&''%#7! 3%-5"%-$+ ($'04/+*%%&+'-&&)')-($)#()'&'$ + %&*)*,-)&*19-##()'%)%!"&+,,2)/4+),&!!"%'(&%&'&*+)*''''''&&%,((20*1 +*+3!#!3$)!,##"$#(2-.!)*%,/! ,-"!+)%!"&('$# $)$&$'-0,'+#!.,)'&()&*.#! &&40,+#*-0* &%('-/'"&' ,+$%$)9)( #%#&)%*3,"2(%#""$,5!%&,%'.'!)0' #'+,)'''-#.,3$2,.%%72)#)*'-6#"-'%"*$ **$'+'$""'?..".-((/2.*+.-,)% %$" !- 4 *24"'9 $%! $&#3,&(--$/.*-42,.1'.%!+&%#'%#()+2A6*+*-)/*'-%*+<2!&1*8(%!A&, < '$+$#,5/*5-"(&!(1%!3!.+$(+% #%""*-../0-(&(/0(&)'1)+139@±"'6'!1$%&('$#'-"+ %+ &!$(&'+,('*,,)*,-("!#')(((%!#(&$&$!%1++,,/,"2'%#"'5!')*.%("$!!$&%.##,,%%*0(/%!,()#.1141**1$#14,!'(&(,'"&)%'*'$$$-)"#*' '3()&!#,,(*0**/&!('$+'&')'#"#$ !(--*&/,%(,*(&;+0!13(9(%+-E$3#2).&>/"&( 1;0 &(*&)-&#$#""! $$"$(%'2)&#%)*)&'$!%*%!&#.0'$+-'*&!"'+,+$(&#9-**!((#)%&*,($$&$ 1#"%%'())&$%!)0-&$)0*"&)%*"'-.+'&('()& )# "&()1*,/'%'# !"%()'&!&&+.16%&'''()+#'++$'9*+&@5/&B'';,0&1+&&10"(B,-!,,&/,$"'("!'(""$#&+&#!!((5%!)+*+*1#!" ")'')+( E-0(1&,$%4/,/(05,'$#)) &%(' $%"+$$'%*00(""! %+/')+!3)"$(%#%$%!%:0&&&!#/+##-1*#!*$ 0$&22,'0?>2.9-)')0"(%'' !!")&$*)####"!)#-"*$%&""(+*)+(*+*&#""',+0AD51(*,-:-#)7$,)91+%#&)'" "(+(" !',12*%,0%,%!' (,*)...2*0*"+=)2/,0)#("%,%%!%%7#('8-*,4+9&>&'3/,3#(#1")%-5896,1E($'C-& 3/1,*0203),/00-($".2)#!12654*+#'+3#$.()*.33-&$&#"'/1-'))((("'7!7#&*,%.&(*&<(!/%0#$"""!&8#'&-.!#1,)%  "&(&%(()/)'%&((&$)'$(,'#*!.4-*/-%*'%)030+*#$/!(+#, ,(2.++,,,.4*'%@&!+%'*)%%%$5,*1.%)6'$.-$!%&''''%#'+0/' $,(&%%&(**5.+*%#$%&$$%(+++(22+'$"&)*)'%%(* !),&)6 $*!2#)';/4)1#%#  /-/&5)2+3)-*##+*#*'''$")4((+&'-%8&!))&&&1%#($#*&'(('%$$8#*"))'4.+1-72*%$%,-%)&&"&&"-(!).-3+0.)'&*4*0, !,+ '#"(./--$$! $,5/-,% $*.,&-(%+,-8.+!#!$%(,+! )&*,$"$!&&&)(#%),*'&')%*"1#)#,(%&'(*,&*,*&#$'%$'*),))602'$- "3$5.),/.+* )/*$$')4-$%++.:5'.+,3+*-/,-43,,!0;4'%'%084/2+$++.)$')'("% .0(#,(!,")-"*('1 (.-%8-2%,!,-&&*,,&2 4#$ &&$((+143-(%'$&##%*:D;7FN²Z71)+&### #-$-%,+"&)! $$&)',)%%)++*%&),)%%)+..+)(%!(,*')'&*++.,)..$( '&,3/%,;(')+#$%%$$&'" /,*.+*)8/"'*6''@F,*2!%'-1*!!($6C-(.%#18+&+($*)&))%%'.Z)!-8"$%()$'4,%J*$$0-19*&$&*-,**(+--*+05$"!&&(@+5$9.)#+*.1 ,,*(.P;.)I.**/,$1N"+#//!6**($!#*0*/+'+,+-&%$%%%#!,+(+.)'/&"(42&"("$*396-%6p=?2!'"4+3'.,)()-156(,*=##&'(,)"$(%H.!,4,'+)0-#"*(#$'&+'&*.+&#&%$#"#$$51+)(&'+)'%%(+,-.63+&""..,'#!$(/"'130-.6%#4*$)%8,1'0!<='#25-%'1%.%/*30$%23&,/0+$$-7(+1*&/&+$$$%$++%.5/&$(*($"&+1$2,1(92,(2+).)2#&,)"%-..+)$$+*()$$#,?(++.06B(*5?5"#2 %&"#/= !"-5$&05+&)*",#!#+$(8I&( -&&-,%'0)' /2%)&6$(91,"%'(()%&*,+*,-+6&'!9/)84/*()+-*/1,$ $8%(:5"(,&*2%P(%%3$*.($%'&&&#%$!$*)#1)'8H@-'. )*-6/2-.)*10)'+.-$"-.*3.&&"#)%!)-%(, (2&,9(%)!7$ +Q?.&2*/&;/(00*&0>6!)H,"<((//+,0-)-+-264/,-*&'& !%$/;40BN·U:!,("(%!!&2$*%1'!,! &#!$$#"!! #''&'*)''*)++('('%),)%'&&++/2,%)+#-# &/-+'2(&%,!!"#"!"%&!*$'/(('#$"'*!!"/-.0) "*'$-3+'($* )1)*/',0,'*+&$*A!!"/&%$).)*6--!5/.1(*0"# #&&&'&)++*,16!$"!##(4&-%0%.#"' 4%"2+$)$5$)+$/!&*($%-5*0+%(+('$$%&''%$+*&(+&%/(!$/0&"' #)/31*$-&< 52")"0'0'&'%#$(,..'1#+$-*).)$+&;.$'--(%'#!/,$/&$)*%"$&%(!"''""!!,+((+)(.(&%%'))(&.-()('+++*&""',0'$(,00*))+,&,)8','6/1#"()&$#+!*$0,.,&'/0+)/.$$*+)(/)'/ !!!$&#++&-0($%(*($#%(&+$(.(#*&',#(!))"$*).-.)$)-) '%"!!8"&&(/116'$0?5!6%%%%!#*! #/5"".4,()$.&#'%-$#%9$)"$"""#$%$"" '.&.+1"'60!!*%%)*)+*"%&$ "')&4')3*(((% !"-24-""-%)1.*/4>%/,0$61M"#*4 &$"#%%#"##&$'(#4+%.92+0)((&,*2+-(&***.;30) $+64-,#)!$),&#+).*$/)<%7%%# !(;'!3%"-&-!4--,# %,1)/$($4&&$',&!$.,-/.,/5+'*,))' '$*..6D³$-<%3%#!##+6#($3 #0"!*2-'((#%'& %.*'&()''*%''%%()')+'#%$%+#(+"7$%$>!!%)+ "(()+)(),0"%&","=()(,3#'#!-.&(B0$(.*%%*+" )&!)0 *&,2%57-&)) 1'8%+&#*2.-6#I&)A#'&%'-/,'%)&'+-*&$#%04.&!+' '% 3!'#1,(,?/*/0!.5#$#C5"&*)% %?&!''$!))#!(0&-( #&"$%(*,,++'%!"$ +%,+$'0-!%$##&(**#A&<("0#%())++(&())-/="#.@ ,*/)#-(*/&!',+&+*0,1?+'43+&"%%&&" #*&&&%##$% ##&,)'-$##%&&%#+0-'('%&#%%$"%-4$*1,!+..$O9%6(21=&**>) #2230-"3(2/=,%"&(&(-$*% ")$*&(- $$!%'"(& %)'()*)'$"!5!*$-#+!"'-!##&+(*,/,'+,$=3%%,"-/,%%-+"&#!"##&*0'#,76)! #" +..%*-%%')2%28,)5( "/:'0 ((#*73#$2($,8B/"(&%,-!''+-+..%,)"&*' ,&)'"%&%%')),14-!# 464=)'$7(*+: .1*+"1"*,043.,-&37* $-2!$(+%41(50&))5+/+%%'.:.+9>*"2B"12//($.$)3<2!.Q%*.)+0_)/4%"%<$.+>.*/[))%<--+B0(/:3)(,, ="2%&&-3.)--)&'&'/::-$&-+C+'784B©='-$/*"!$')))()#*+*+&!"#%(;,!$/& ,)&+'('! $$)-+$%,,&)*&+.'!'"!$ "Y"5 (%$2',2%18'(.-&&)&#*+!&3*.);%%!%#)-&"$#'**'"$,4 &$!! "*)+),. 1.-&")+&$ +6$+1(Q&+(%&),%,'6)0&+' .'1"',.#1!+07!53+-"%&/.)$'4)1* %3 +!*+'5" .'$%5>1&/.)3#"+(-0!'(&(#'- %'.%(."' '"%+'/-'*44*%&&$$(,*$7%)2#)3/'$&$"("()%)0.%&'1'5$*,,+))+)!-*--)*/."+4**2 4,*0&0#'! '!#1)&*(!!'8.# $)(&5(,70""'1151# &)&7"+ %)<&%%+.&%/&%*4&;+/#0&+ ,!&!&!&.)#  %*,,#+*&*-**$'&' )&*$6 (!!!. &-)6-+#&8"&'.&('"+!*+#"* )!7&.%*2(%)+''(#('.1&!'-',,%%+)2)-+!!*#0#!.5%$#%#")$%*$()@4&( "#')" %&##&%(+16 +#!.%)!#$"$)!/, +1)%$%#)*"($ ))()-23''+"9/, *""5!!$33"4+6&$**03/*)++2,'!%.-)&(-)#&14)1"(;'$+)(,23.)#'-.($*3,(&)$%*042,,5?,#,8$1= *:1*#!/+<)0$+/'($/2032+('=0.20)+0-+*%)(*,*&%'#/-##+173.-/17F³P)(/ ( %%%%$%&' &%$&$"'!,"&5)$(2)#*&& "+%(3#)+().,%&(&,0+',+'''%S%0 ,$,)6#')6"%.&//43*(*&''/ .&24(.D%))*/''+(%#$&('&)06#$&*'""#-0/, "6!$+,&&('#!!-('_!&)*,01/)1*4",)5&'4&.)93'". #3(6(,+)2f%-)A# *2",$/"("4(1/)(+-%+)".#*)'&<% !>%1+&/,#($*6,&#&0+&"%$$+.((+(4,--%'*"%% %$ !$$"%*-€; +32.%"'(*3;')1+).>)(%;))(/+&%'(% /'%&&*+$1(2-9'.-:&2-1%. %#%-' %6'&.+%#/*%#%())6,&')+( 5.)%(5#1.2&-)(',/((2*(+1 2#)&3).!* &''%'24*%$$&)+*(&,%&.*$') '(!+)*#5!+&))*1+&!;-(+5#-'0&#.: $.&(7','./! ;+."* #&'%*.'$*-++' (/##"9'",!'&3!3(+*'($J,!.+!"(+0")-*'),++)#+$3$./,%+ &)#18*($6$*#,,*& '.&'2-&)-##!"$%!%5$(!- 0*11%*6$!,.*((L'/4'&$'@"%&+3"2(4()0..,('**(3.+% &-*$%(*'$'-71;,-;++&&)198/&'&'**'')-94*/1+-,($#%''&!4'6@F&(+J;79M2'&1")-H8-(30>3>/,()(.201,3 )D,#-.#%69'0,*)%!!$$'(*+'+92-,036@³S*#9(!'&#! !#%!%#"%&'-$1%",&'(0*%)%#-*"*4'.%++,.+$$&%+/,*%)"$<*!1)0(3",!.&&%-))--$ #%%4!')("3%!#$4'"'**%%%&(*-02$$$(--& *,**&&.,"()!0,<1+%% 2 #%+.,&)*$($-&84:%(, $$&2 ?'+(4" +#2* #(,(!2#0+-.3*'.-$,.+(3!" ,#0#!:*41,41)-),5+&$#1-+"!#&././,)/##%$#,0(&)%!#"#)$%!$+0'$,))+)$$***06&",0)(1@.* 6.2',(%&)*'#+$$# "&#.$/+7#)(:)5.2%0$ #$*1,%(1& '-+'&('&')***,+$!.1(-)()-144$1%1-4 &*)&(+'(2,)+0.",)5,3&.##&$%+,())*+,+'$+($'+')7)+!(("-+,#3(%().31$">&427$1,3'',<,.*+.):(8/,1,#7'/" #&" #'+,*%'+''))1-)$#$'*%"6,,"0 +'/!** (#*H-)(',#*1'+.351-(%?34#0.%(-!#+2(0/:$,&*10,%!!',(&$,/# . !"!!"$*?(+,:),"174$',+-(')A+3$"?$' +$1%-+)#(0.11)$%*.0-,)$).*%)(&'('+,6,*2)*$"$-67/' "&(&"#('40)..)+/+'%&'&%)7#&(6*9%/$&4-%%#"9) +2)4)804#,-*,)$$!($-*094#!-,3.)'%#%)'#&13%&:-&$+5=I¥9-"8)%&$"!"#$$$)'&**+1!$/"'"($*(&)'*6.*02&#&++*+($&'$(*'(+3,!1%8'($4*.!)/"(&(/.36.+,+0%33C11'A%+*;*,,."%(*(!)'&'*+*(+((++,,' " (-( ,/=,+,'('*#)!%((**&!50+*?30;@16(+%7'!-@-#-4( ,83*G&:/.2$1$70$#(*((+)#-1#0+5#$#A-(-C-/6:3,0104.&($.3"#*,+')/**4-*50'/ "/3,,.+(*)(-%+++++)/ $4?$$%$','!$&0,),-*'"0'$%+/-'"#$*&&,$*5!-(.3'3+2&3,$$$*/,(('(+,&!%,)'&*./+' &$"*17+//+($"&!-(+$0/('#"%#%/*'*12)7+5+5*3(/"196104;---,*($",#):5(O)+ ''"-+.#0! 5&$*)9?&'*?++'4#,-9#)3,2 =3$&B)..)&#@3#!.4/*/'&(&(("50--.+&".1 ('@2('-%,#%#+#$ #%&" '&(*(#)4.'/32/)&(2##873+2$$#&)-- *!7.$-/1/*%#""2($%!  #%" (<+20<,!2)"-&#%0'"(".(;0 02'&9&.1?+1!,%#*1)6=4%",7*)+*',/+&,(',+%"%+)*.*((!!+11-#,78/)0;%'$+)$()/3/'$+3#2$/O62%4$,9]*0(6)-';'-#-!/)0!+010( 0O)#,F'#"(-))1-)&(*+/3*))/0&'5D5)*07@—$1'-(%$""#%()'$%**),*(,&#(%!&&((((&+6 %$"(*"%)*(&%%%$*)%%#!$"!(%'&4'-%)('"0*"'#!%(#9,,'+"+ -(!"&$$&$'$#%()&#((14,+-( "#"%*)!*(0%$4.%'%(0540.-, %!3&#*2&0(2%,) '1:."L =1#-))&*%$40.(*!!,0'%*&/%0'0#)2 #9*,)%'+,.,%'$/7(+&,*&*/((.#!1."'(,*$'-,''(%%+*$#%')*,-)"!*3*&&#%*'$(&-**/-&#*"-&4+*$#)-,('%$''"$,-)-8&2,2$/%.%0$0-,%#'(((&&),+%!#)/*&*23+"%"'/)(6*.+,3/#!(,*,,B'3((#!##%-)#'1!3*8-4(1&0(3'+),*(.0.,(%$#$'&*31#&<'* &'!+)."-1$"+%,%1'+=&(&/$+#0&#*(28-"(?)0+%%%92!%'#$-%#$%**"4+%(,+'&+4(,%;-#%/$'(*.:)##(.)$*.&)&$&*)&&"+,((#"*'5&#'"**5*+*"**(&%#>3$,-/.*&" !/$$& %& $($)"0,8-5+('1"%$%+4* $+9*,6*.$9'00:':,6*)/2)3:5,)-0+)+)&*-)).++/-%(+)-00/')$ #*010&)./*%(.%))/+%*$+/+"%,-#)!32E", 1+'!K01#/"&1 ,.@25$$',/1-*/9:"#"""*/% +&""',./1(/+$$%%)5)")4=F—=.0"/"""#'+,(%#)(')&#&(!&' #-))+'"%, "")*)&"!#&(-+'&"!&'%/$2&-)((1#.")#"'6"%"60&!'-)(/4!0N8(0+/9#%*F('$(*"""!"&)(&!$4:.**!$'0."!*-#)FP6)00./"*,%)!*20,+-/*,5"/*0/*2 (%6,((?831v.+F‹0-"151b)0$*/6%(11!!25(%1 +#+( --'5./0 &)+.-(%(1('+%4(" +0"($#'' # ')'+()%'.,$",(!"''#8&&!905-/*!&*0:<'*3,(+C);H,333( #'()-.#$+2/$.))5',1'+- )'1%"%$%'"-'#&,.("2,')/0)"0$(:.&'%)EI6-0*)/!*& $ +*2,&$;+#%&!)'%"2(;1).,'$#$&(*'.$#5*"$($!!/ +*8*1*B$#$#$+5&&1.%  **5+31$)"3$& 3)5%$'&-+),25-#1.-)$(,(%*.../,'+-#*-'*%'+/22/-0&!'%)*'*% )1-*((&# ',-->//'=$#'3)/;*,)?-"%.+;+/#)140,*&(3.,!."632$63%'%%!$((''%.)"" 6-*1654ž| 6!+!(&#"$(*'$%)'$&%$)$!+$$* #0'(,'!"%/("&'(&" #((-,)*'(1'.%+ '!,),)($$$2"&/*#"!(& 6*!)& $'"9(%*-%!##!!!"%'((& +1&&)1(,0&"*-&()).!,-!0/"&$#$%$*'+&#)'6.2"-+$&4B'C!',<'(M&0)/#.%/0('/1)',$.")&!/! 1#%*!%+/.0/)!%0&#&$#,0"/##%!#'$&$#0+.,*.,(+('"$((( ()&0,#"),1:<)"+/'&.7'.4)!3(#(+(&(,$#'),*!( !."*0%&-!(&0#"'%'( ,&"'160&,+)(''''%)"'4*#))32)$(&/O#+)-)%''(--"$3&1#)/%1%)(!' !20&+)*+)&%')%-%"-&%)"+,#+'2%1)'(&&'0!%,!0 +#+!'4"+$,!(8'*$,."4$) '#/*!%! 0+%"!")+!*#%(-#"3!#-#3'- "<$.!". '$&!&$#"$?%/'!'#)=-5*%++! !%#"(&5'3+*+(#!"&*,/,,#(1&""&%!%/,&1&1+6*A%&(&%+4#"./($"'(5584(:9--"2"%#(#2#!!,*')05/&2.,'$+31+)+/0+((#+((*"$)020-++;2+,0/+)#+&! .41.,,+'$./ )#6,-.6/&#* #5'!-- )%&55751-%%0 6,'0+*",/),,% !%%%&'*'$&$!%+%&/7;@£²8&&'2+&!!$&%#)+'#&')0!1-*+#-"$,(#$%.3.:"$'($!$)&+++.-0;280/&-$1+(! - *$-#"$ '?$/!.%D*8,&"(.*()''&%$#$%&1  !+"A$(++) 0'"*#9/-))6''%#$&#68%)!7.*,1#+"-"*&-11!:&+/*/0#<4(+1#1A&#+-+)((&".4$)*%2.)+ :1".++(#'*%"$%-%0 21(,.+/&".1!$1-% !+ +'-+'%#%. &*'%&)*'*-,)/%++().+'+,5,"$*+(/E+$';$+%(36+ !'0.!"%$#+)$0(,!!.%+*- #+())$'*-1453%)+& &- ,1&&" .-)%.)%3'1/&+'"$%%)/#&8,7#$-'7-0",,.*-%%:$(,-+))*,'(0- &?%*$..%,(6)4)%# 0,""- 1 8&% 4/E%"&;.!))*1'-*)(-0!/-!%2,("$$)""+/'!""*73,04% (* ', $%&'%&//!)-&%0/(,*4,%-&(C'%&2''0<.(&"+(3++ .&&##$&)**),!%&%+""&(");&-:#+/=,)*7'&$&%+$(,"%);,!43(%7B&/,5,*(:!,*'&.3/+,26.*(&&1=>.()00(%) -$0.$85&*,*%#',"'+( &2,0&!"+>$+1.%"&-$32:%0-6*##5*16 -,;*/1N(+$2#+(6#.7:32;+2!-),#A$(#*4'"83*""&(+-,''25(#0:0),2:G±L%)&("!!'*%/-!#" !!!%,(0& *#!,((***3,#))$'/8.#*,%#/,&"$*,*) '!&& 9 &+5**'$#"%$3.B65. D!)')'!"$#@.$$%(%-%%#!.+1,(*+! +'&#&# /%)&/*,& "'0 -#5#1,"'. ,"$('#-,&)(0'&1% "01&,%'9$*/+-/",)3%"1$&$'$ #')**+,#) *1'!,%'10'$+'%)'!))!++$ #'+&&)( ."/%)60&$.!0&$'%',*$ "*&!&&$,('*,$<"#!$..&#' -!%((-'!*+<&'"!""%!)$6%('2'%(%%+-1$"'$"&**'+.(%(',.)!")(!!%(&#$+2%,*.1+'.&$:'/'%)2&%:6&-( *'%8"+'#*,)/.."2&%*'1*'#$!! #(& $/;'$!#&')$# ')#3#(#!'!$.',) % (*&&*(!'(&-$*&65*+(",' ')0-&$$%*$#&3+,"#-'/+'.84,-!',-*<$'7'2$-/---*$!$'($,&&"$/ %&$#&++($+%(*+*&&)%!% $('*77'(/.((((+* +#-"/*''&"(3(*5 *,9'*'+*4 .+')8'%#####$'-1*)&),&$-,%!!##$%()**)'%$ 0(,%(13&(%*)!+!/)+&+&0'2$'. .%) +&*02I84&2+."++!#,,6*"+-9#)#'+-+*#&(&.)#)($(*()54:;E­J%*)/00+-'*%:#*-,#$/* #+(&(--'$/)"&#'MA80<'+/4+!%&$(07.%-1*'*)&#$('$+"*#%*!2b+(!;3!621AmH,$7-,g6(8$ %81&)/, $$9A;2,B`$'3MQ32(' ($2@;*9e0.,9F])-'%2St(9E(,(J(($)#9)/.)#&11,(,+/Z#'1-4#S*"5*&4v31"1'),R-0)#(6q/ 37)01#%(*)))*#"!*1&(=!&*+,-*& %($'(8##"%>0'! !&X3(,%*0#2 &%3)1'%&*)#!#%( ,.#"*))@$+-.*! ')&&$ 3,2"-(5% #G,!*U4(9?4)%*&&&.!%(++&4+*+&%'&5(%,0/'/20(%(&)$"%$"%)''/2,(#:$&1@$%/4,(0,%+4,)/),/81&% #*2 5(#04%!++#%%$(..**(+ #0!$ !$%(%#$&")'2$&$%"&##'!!/ ,1+&)-,&%"-(&2$ +)$%#'5&-&3(5*,&'#$%&+*(&+4)8$0%-!&-!'*+*%(4! )9..? 0!.(+*'*)&$%'&*"/,)+,(# $**%#%+.' )+*&&)%!%2#$12-,-+/,('$$+'() -(++'!#')1+*3))*!'.9 .#:402(,*6-%&.2-&'$")&+# ##"#,++**)))-2!($3'*/0$,0+0'+(/13"2!+!.+9('+%!? !(+#0%."&,1#)#9,#+.).4/(-,2(),&7J3"*6<*' 1,$2*'-+(+,+,/)+.1@I´U25,+)*% - *%!/)$'&#&)$!,)"#%*'$,$).*$((%'&)"',&!&'%##%#*")%(,%71*$/.%2%<$/-("9!,&$2%*$$*+&%('+$&+$ 0#)!" )!14'(& ""77#$+C&"&$7!())---4 /<&+%)"!+'%4!(*+%%%+,##&+8"$1-#9 +'8,/(<'/4+A"*,$!%'*+,*'%$$$!",0'*?)-')20%+%(,'',,5 )-""0-& $)L,"%!(/$,%!-)5(%%'&##$%'"",, )&2&'.+#!(*'(!.)0",'+:$L,-1(#".)<*)$)"$)())&1//,&''!7*&-1.$+24.**(#*(%#$%%%,,((,+-5$6!*7$210/+&%(*0+/"/%) -*$'''0 - #5($)-!#0+&'&&)0211%('*/ .('&%)'/+*,-+*+,"-("'"&!%%'&!.',,'',.,'%!*&%2&)/+# '4%* -$2# %&$'''+#%#$4%,$/(2$'+ (*(% $2!#&6++@"2#2"+/0%)*'%$# (!/-+-0+#"(($$"&,)"$.+*&'*&"%6&%12-.0**''("#0)!,"-$2+,/*!")'2(-7')*&'#/$7'41.*$,&81*+23-%%)*+-,$0(#%*+)'-,+))())/2'$5+/,1(.0,500+(#!)$/&2,9,0%'#''F.(10(:+-#1)+"2)5+/-5*)11+3).-.*0%3!#-7-5!/2*+$&'.,)+,*-++/02>GŽ8!,%#!#/2*0!-!,)$)&!&( #'%"(%!"$#2*7,).$(+.,'% $*' &'&"!## & &%'*%:3*C"#!*$"$7"0)6(#!<&('(&+2)-%&,/-%*%*#/*2*02,- #-/*-.#6$(7748*,,.=$$7)%1<'*//.+&"!!%($!)1,!$*+'(./)1'""".#')--$$#$&'%" '#*"$+( &2 ,'.!'&$$$$%& ),(#  +/6(+,E&#&%(0/)',!,$-"0-.$5&%'@2***%"(*!, ,(/(*0.#!)-%*.)$))1+-/(#!!,31,++*#-40&$-8'+--)"+A#0ZA6*5-&+,"%,(! 9/(1%/+&+("%%';)#,#"%%-$%$#"%)-.2+'H#")2+'#""&$! !!"$4 +.*&,$ %*'#$1)&.* (($)) &%"$*,)(.4)1%3'$'.,'))(+*/,+"=**((+$.!%*+'',)%'!/#'#3"#2#2#*-0(++&"! *%(%'2#)*($#&(&'%15+,,()-(#&())%)8;-'%"&(!$3% .$.&0&)21&&.*-%/$0)3(,0) 'A'$'.+'.#'+//,*,.#.84,-/+1)$(..*'+++*)'$#%1%**%1+6/-%!361<-2$)!6!2.7)3-<"$*B25(4'%(F.1%$#>,$ ;'-,*&'0)&.(&'%;%"17'/5?#2+5$,+&(('*,"(9<6A•@)1'$$'()'1$2.")!#*,()..('% #$!!(*,$&)""'+*('%%!!$+10)**&!#&&& !&)**)47(&.& 3*#+#3&+./*.#&(((%4)%"/'%&(#%1**,@&&:2-*!;7!7'*-(+#+-!3#-!#*(6''(!**'*"!+.!"#(%8$+((*.-2/!( "2$,$'1-#!3#. **++)&%&'%()').'.&#%%!$+2,()& $1'*(! &)'#%()*'!&#*.&#$$)4%513&&%##%'(%*-("$%$'3$2#'&)0/)):-6-7,83"+#:'%+)'/0&%$-#2!&'*)*(!$,.$,*&,.%/)))!#$)10+'(*!+3/&#,7*+,-+#'76!++#(+&(* &#91*1$,('1/# **<( *)$%" ) $#####&(+2+%@)10+&#  !%$!"#(+)&-%&-"&+*('3+!"&$&++-&!!!&+,*$$.%()#%-1,%'((++0-+ 8#!%"&*#(%)'(/.'&4$*%/**!#%'*($!!"!"+'(%&/'-+&&)+,(05---*+.)$'#%'$'68*)(%&&!-,",#*#15,)0-!5*/+'3'/*%'#9&)*5&0+5*"'-.+),/,-31*,.&+$!&++'$,.00-)# $1&,) ),5,*&!,&, 1(, +$1(2+7%'(C,'%1$+,?+(($*)<+,$1%,-**''.&&(.+40+(=8 $'1'*%.$-,'(''++%*9<5@±V76'##),*#+-B')3A7)6C6%*&%+43'*#$(&" -!%!90/.%%&!"'&#"'(-/)*+'! $)+*'%*..-./a/*63)-,*/O$#'`F#&2 '3m5.!W5#")+(-U@$)3[16**("('2G":@&7;) ,95-0R+$0/5EC5#%-)~-1 :w2*):),:G4([(4Y6,0/*6d;#-=#/I1%!A"&?oP1!:&!1O,($'1/j&(3G"$&'(*-0'!-:/ #-2$#!'#)+.2+%*0'&,(&8**'$$&%"*"'%)!3$)&%'&#$()(-'&$#() ,)!5^+---'#()'+3(50;-2'0**+M5),&)/)#0*21I4&-#$/1($-/,.2-4&!""%&#%+0.'""%&%$$%&%$3.')0,$$0'5@#'-**++)$)6*.%4&&'%&33*)+7&%0&&+7+#(!%%'*(%$'%1@%$O/,*++).0)+,*%#&*+,A#.0'' $*&&/410-& #(#+-1 ,)"$*)(+ #($ $((+$&$%+!*#0#('(().0#;-!/#)+!&&&#&&#"%()*#1-%%%/.*),.-%(0-"%4++)*.("%,!./(&&,0,&#!'&4(1)1" -3.+.,$B()"-((0 .= ,%1)2$) 1,/+(+01+&B/,334//++031.-.0331-($/2 *(6#!,0#(/-).;&&+D.$%#(+9)+,-3(.%,<0/'C2%7/3+C1 (:8()42)/($(;-(&##+*7$ .$(11+***.(45/3!##:!*#&) !(5+<,'" 2'$($!-6' .8.=0%/'%!8(*#'# %/'(H#.**< +""A$$(10!#8.!$3!.(0*L+'2'')<"70!4%)"'[ $%&&'),/,#/;-!)3/+'%# !#! '%'#)41%%0+*& "(+)$''"(!*$$$''$%*+)+%()&,.#"&"J',-'#'('+)*&3&+$%+*F) / !.0+)$.$(%.)'%&.0(&&.3-),-2)&'##&%*,-*%!"&'$"$(*(%+0-),-('$8"7&/,4/*/*$+*8'$3($,5/'*'"(-6! 4/2.7(  ,!"$*0/(&($'7&F(--12/22*"%#"#(;%./*0#$*&(013.)&%&')#'(0% 0('&-+ *+-&*/&#&)&'))).-& $$1 #-%$ #'(,1 8,!#3(+/*1/.$(*'&''%' 0-%%%+,,..-$",:5$#1'(%'+%!-!$20%'20%""41;*2-8+#'+--,&?,.$0&2**!&.?*5$--&(*+1-*+..*%>(,<82/$11488534+,----,+12)(8(&)/#&,-125'&0 %&./:,2,+?)'2-%3+1'9* $2/;/<-((8:1151,/(.-8=.2##")>0'3=(#.%'(12,*)*/+74-4 %'0'81)2,(=+*!)!,,*"&)1A') 0$*+F!+ $).!*32*')(%=#"%%))$#%)("#&&0!*--%/D(&*..";(-4+ %$",&"-*!'-*./#(4+0$4# #**$"! (%&+&"3 +%#3,%.(!9%"-,"##*)2/-).0-(%!&#'$&/''&(-20+!'*/40'$%"$("#).,*/%/0##($3-3%#2''##*/+!15; 0=H+#22.:K"'157!/0&+/,&#'-"+>. (-'*.20,+.&%$$&)-/)2$).(2$3+$":=$(4+)&H!0/>061E(#'a@/B+09X@/$=!"+M3?()1?=)%6$%=GD7/J!"#0& 2/D550*" @%/0*'&&,1,'2=7@™5(1$("!-*(3 %&$ %(5%&0-03-$!&'%$+7'.&%&% "*,.7"('$(($%$,4"-%$,17-8%$,7".$.')*"-#&*C!( (+@&"!?+!!()01/$,0,<(('#$*(%)(&'')()+'7%-$(#'(+/+(-(+/%&%*'24G)'+")!1%'(+-6( @/-)'('!'#+'-!()'4$),!>',%!)+7 /)+!"!$1"+( /"1-1$*1/(,0+2 .",$$-$&)%+-!/'(& &)) 40 %-2,&-."&/,&# !',+&"+-&.1)&/ ,+6%,%*.&$+,&!%C+)$*() *(*((++*+.) .3!", ,1+&-1+%.+)*--(# "$'())($%*/-+0:+.1/+),/#,(4$,"&%/-*')0"+*4$))2,(/' ./$' $"@)#)-&(!--*(+%% #*,$+ !%+*!:0*)')( - !,+$$'2 *1.(!0*# "&(),+-+#!#"3(# !01!5''%:+),$-%1!"(.,)&++1(1%1$"#*'$,/("$2);!!"*!.+?.#E/*(1$(&.$*+'-1$&13-)#$,2-)&*&"&&"!24)(,%"-1#/7#",3'#+!/.0,&*.+-.7(==B/(*/0/1,'%$*$/!5&9@!-(.'')7)3(3.#&&$#&*+5-(*,,060#($"#&"-9*%'&&0+2"I)*<.>-G- %H7<2")160 -$=8=++,S G9866#B*-.1/'*:'%"'! 3('0, /2 ///.+,)(*.6E¬i4,2Q+48+%#?0&/,++-U8+.*/cA.(( )<;*-; +'+|8&*("21'(0,$',+)4;J31'3'2$0#"/K"$1K''-74 *9+q?$%")-]4-!\0%"<6-8< //90(5K3#%-g2 /#(0_9+.,((,:L!%25' +60,(:$(,B(,)$&6&*'#!.2''%2*,(1'$1#":'9*@(('6(<[&11B-+.Q(1*>o4) /3o,%!-+3.p2'.,+0&0%3*+&F;(&.(!/B-!/##+90,!#*G($ +9t2$/9-%i'%&)H!1-&-,$ "')('%%%.5(!-83.8/?.(3:4,,:-)6%))$-( *#+('))''*)%-#,9.**61#%/,)+<&(%0#%0, / +')($*9,.$1&!*!5-2%.)%(063-9/')13-%* -6=:"/1%(:3#*%4,)+B&,$(1.3"+8B"&=.%%2/#&00,?62*:-3.>&)-6 ,$1/%+2*69,"$#(,) $"((5%'7)&11014;Eµ/ .#%'!0%"8,$.('%;)%*=(!**!&3.%# =7 1**#/,"3.'),''2,(7)(%"8%4'*% ''!$5,+)@/1"@+;2&""()21$!)&0=. )" <2/)" -<' #+($$# #+#+.)*$"(-)*003!! 6,+)$% .%-($. .!: %= !'!+):'$#C--*,''Q +%,(%K.(!#0B,&+'$,8&*+2&E/!%2-"(5,"-"#+7 .*(0,* !'D "))3^ '!+$@/%$##&+,*'(#!,3*$-F)$) (?,#.71*(=$"5( %.+0*&1'+(')(%$&;)''%."4(%,+*-*&&''%"$$'-21*$- /4+!$'*'" "%#$,'5&#')#%(&&$9.,"7*#*.&!&!+)!(*!'#%$)+#2#/> '&# "'+%$()#&/1&#&++-+$$'' /5+)!3("',%  %((% "%#%'#'%-40/45)&7)&-%) 2+/!+((:-'0&&+&,(#"+,&,#1(!.6%%$;%,**!K6/%9+-(:*)+27767"(""""$# "#(%%&-1(&/7&$,*++#)!4"#"=)'30$#*,!.0=%'%.$$(#=4"0&6,4!.+3'2% +#4,1'-'#'/2,%440,/2*/$,.35+266%#66.8*6.--B""&/2,*'*<(7)R>6#11&&)$9.-(:,.33$!1#$ -)!*%78+"%!#'+&!&$&(0$&6-*)+,+09@œ265)#.#('!"!/+&5&%-#$B*" '(")#60$$#(,$"+8$036.%,&!/&+'*4%%.%)-#54&2##*$#!.#&5$V%.9*+2#. ($ HX%%%5(!.*-"!!')'##+, )'-#(.&!%),('.-!(&,/(&&'$*%*%$+3&3/4/"'3 ,,5&+&7(&"+(#''$&3@0+!/"297!+)); 2)")#3!!%=,))*&'&, -)##'&&%%&$(&"&*#(?0!()(%$0!,!'))0%)-/1/)"'% (3/%&(!((%%-+#$..%$/%),#")#$$+;/&&)-,'$#*!&1+!''%*#*&#!""" (&%+11*#%$$'))(("&&##&+)$.#!**##,!(!2')*%'""&#!**'0$!-%%,,"$"+& .#'())(%#"/%!#%))"'%).-/0++(&!%+3$1!1+'#$ !%'&& !$$'(#0!#)'$$4),):&!&$*#'-#&)#'#8*"9)*,##((&&;)#/$))2&)+#! =%)#&!+&/ &#$*!*;A:0"*)&)(#"#,-(&$#',+"+( ,)+*,92&,0/04%.+)$#+*&-:)617(#.-..> 11"A-01I1%&<"%:.3%21,)()($ %5<0&),),%-"(C2'-. *>>)))7-01,-+;)*%A)!&N0,*&',2-#8$-%3&))F*,'/,-101/,'!-E$#$-( .#!((!%1.!#*-)'1"%%&-9A±*)=+(+''%;*)(/#!1%%)#%(&&,)+2!"&#%.&#!%'+.)'-0&#.%3 / '(!$#(5)'*-$.0"! )"+&+0&(-"N)8!1!&-#%.&1;&<% !$)1%$(%$")$$%*+%%"3!*'1,*$#'"."<"#*3"#4-*+!'&&<&0.!&.36!()=*! %&(16-""$% "*(("-33+4,$$&2.*"2$5* "'%"'*##"#6 '"$"'*+-,'#%-,(-3-#+*3&"/)'$00-%")'$-0*&+..,*+& #'& #., ,$+*%(10((00(0#&.*(* #&-7%!#*12+%$!$& $,+%),#*2')'%##$$$+&#&+-)$$)-,)()+$((%%).'1,5 '&&)%$#$+$2&%& !!$)('+,-$6(%/($+/&#%%3%,!/+(''+.-(#0'%&&(( $"&($&*('!-)!#'#0&9530'$!!$'&%*$$'&(("6&" %- !1)%$#/'')!("?0"8,)$'"#!&;,%0'*,5)+/)*!H3-$2)!$+'",% $,.$"()(-,()".1.-($&+)!+( 0('&'1,%.3*+5,0-)! ))'*2+)3'%/-36!3/5#<# #>*#)D. )>05&214,(+.)" 29,#)13##3-# 40(11!(:7*$$0$,3,4*>0-,G0"?"$/-&$.3/:S$'!3$'&@%+-7.24--(% )A!$)3.""&(+%'/-$)+#'.**)+2=Hš†,%)o*--4+"2Y.$.4 2B+2(/%!'%*,$#i%!~.")&!" !76$'73$":U:3+9+)&,3j.-8`6&=+2B(5[! .)2?(!%p;#,QA.*3 &"0#$2K3&*)R3?-1&)0(&#$')'%,'()&'($13-'%#)8$-! --,&(!0 *+9&+$.$4#'#, 3###'&(+*7##/$'%9'*0N6!) )'*'+%5). ").+''(($&#!&().',+-+&'%! '.(&.J+$0,%(+'!','0?-',' "&8&(!.).2&$'&&))192D47"F1:01".%)&1(7-1&5%%11&(,+&(0422(1232$(1:.(64(./.%"9&$$B/3'-+1$7.#>%0).,,69.% *$/%6'*+&3%6/+&-$)''11/4-%*!#++#0%#%)2$.))/25B‘E+=((0$!:$1'! )( &'%+("!R&)=3))#" !52!%54'!)?.,) 1&.#H)(@#$',!&., G&,8 #$&I &>'('&"% 2$=927'4)&D%/(&",**1%+# *3!9#J$-0*!"4:E#9 $"@%"@  ?!,$'C';$??!(-((1%'$?."")"+#($H'#'3#1'-'#+#01""?*+&.(,CA/') *2A#)'--&$28%4-&'!,%#11+"+&#/O01%3)!+5-)4-0," &(%1#(2*"$%, &*'5,1%#-/%6)%1#!%1.'32''%%'++(&&%+.//.,)!!& ')++,,,-*(''((&$(%!#,2*%)+)$"$( $*#1')"$!"-1)$%4'(1)+-%#'(,01401#2&&)3&(,',&'*/-).""$&()***%*44)%)+$&-.'%)) )/)$-0&*)A(&!&$#%)+*')&)*%&)&,,$%"!)(%6*(3+1#+#/#*%$0#%#.%*.,))(*+#"-&&6%) ,+)"12*'##*$)!-%)1.*-5:&'$#&%#( '(&*+''%" (/)%,E*(6/&-70(/):(.2;+'*%!(/=(("1"-15$!*("%*1#37?=1/A58,7(34)$-$7/3'/%")-*').,*)*,./>,-,25'+,90+96(*21,);+)!B)1*,+-&;#6(8 ".334,#-*7*8()- -* .!,+<3>-%%6,0./($/7.),.++/(*26'64( *AB7D‚1"17$ 0*&1#)? 8+#'*(%%&-#(*.%!(+:$%$,7!0!/%1,&)=451& &&3-%(7#()'7*' #,''#!"**5()A ,,)4$#'+"'$1 8#.(*!((,&+)'1,),"/%%7) 2,C $ 2$ &."+"+%"/(-0( '2%,2/)'!$ .$*3.('$//2&!$!C&"%($**$6'%3("#5,0$-#,$$&"%-,!#0 ,!&("("(#./+(#*#-' %/"'++6$*$.*!/$+%./8$/5.%#8$"@',9)-&%/%2.3,61#*(*+.!%:)' .%.(-",#%7(&J",!+1%& ,2&('!$'*% '+(%3"*#1-*C0$0"2)1%# *(1&$@*&%;-4 !&"6%!)/&$+&)'+.18/)('$%'#'')& #&"6#%3*&1$!(,+$-(4"'(6"1*'+.+'&-$&.$%".*2%, %.&-6,$52,%"$%#!!$((%"#8*!5#%.4I/' & $.$&5 ",<%*.,"-'&.1>-,*C3(4%,+-'$#1)%0*)#0%%*(.%+((--(&(+3+$'$*()1*"(&%&*+*)*("'*(.1&6*.)1B.(*:&'-'(&4&+!0+$ 0#'-+2!::3$7.(&28+%-/8+707+84",-'&%&+/,%%18)%+77,)/ (.& &##<%3;B/41/* .R0*9Q;J+,8!6,@+21(!2&% !*,'&?&55/.!1-)%"!#').%(584CQ244L(+1 !b,%#@ $'<.:(;#*'>4#$L1%'53&"> ##%-"A91&6.%PP*%Lh,5P$/!&.D*( (4\9+2O%;!d%#4-%X0"*f&++r267[/$$U<$3W4'):7&.4?1)j7-(81$/D`!#;?*2G@.=4j2.7)#*9(2g.5t+4N4%#I!'E4,/Y*)21q-4/3*-,T+)$*)"d,&97!\4+$/$@")9%*#>8+!4%C)#& (#+E*,..85(!)-& @I,(.%)%R#(02,#'[(7##!5 ,4)$7$9-*"$"(:7#&'%(*+/+'),,152,+-*$%& &,-!+4+'#&)$#((+#,&&6(3/,,)#!$0-2 % *0&+&&% %',-"&=+,+))++(#.1)$*5'-!- >(!.+""(%?)36>'"":":!( 0$)!2*/"<,''0+!)'$!1'*%78!%.) '5,5"!'00&"%//'(0+!$+'$'*+(&4"'62+04G),(2&624"15=#))?"-:L.(B%-#0 (6 ,-6',7)).))+$8,%-X4)/,$$/34820,),/-(%#03)$'/$#1.%%1 ,@&"//+/2$041-6`.$/=.$4S.80A#'#0)%-.)&***./,:*'7,*63/+**,-.-,/39@x3+/#(<6'/ +%%"9 ",50-,#<#*/, 0#%%+"7.':!%!&+!)<0!))"*-A/*+/ &B-(:4L%!4)#M(-O'&Z4$%D&*D#".$#-5' Z&) 0(.'8.((..$5,#(& /*3)")T(#H'))<$ *R:*8-*7G' I&#-R'2C(E$>-+,!)@a##Y0h $2('(o1'.V) ! &#"G'"&0))W/.?//-:)/+%&#!(("$1$=')*.!#)1-9c&)/'+@%*)1$'F#.(1 !)\ (K()J ""(C'*!'-'Z&%7BM-+*8#&E&%"3'.&<7*$<%-)B+#%!$*%1@/ 00"&88-%()%%9A+'-'*(,V(%(.)'#d1 3-)5)1!0$(%8*,"#*=9$#)(%)*()$%+/-0-.,''%!/119'(#&'"#*-7).#/)92''()'&*1$#.!'(-$/)+$)+%+/2,",F#'++,-+'$./(#*5! 1)&'R#,->+*"1'%0)$("+ %*8#&,-.,B.,&:"*$5') 3)0#>.'%-9").-,*9+/*86!)5'#'/*$5%-+#1+"$.+"!-($%)*($1%*2+*24H+.)1$52<#+0B./'M&%/E/-$W-+"9-!1"%"8(%9*')$',&C2# M8,3/) !'%%.%)*('&$ .(+7;3--2) %00-1!8#'5D!+-*.1"!:<34+l;!#5)G#',C(( ,+,.1-)*+/8&*4((7.+-,*)((()+/-)/>B).R%0/5($#+2$#'?(%!/'#"6! 0!1)9&-#$"-$#.!!&.*"$094$6[".< !/$/$5(+(#:N" "1"6"(,4(#+(0-Q(.0M$(/--",.%/:3*&(%6?(%*.$!//'+%.Iu,!(28N(0" /i3/$&+$6)"!**"."('$!%/7&")+),"*)(+(-%&0$!)(*!+-,#1('+((1,,&-B,3A!!#('!",%*":-%.*/"!.$ $"1,&#& ,' "4 (-,*8'7 )%! )+#'"$9)- &!"730&+-G0%. '9!8+&:#;*)>,++(,.3$)7(&(6,)'F))%+1+(,,*$58 &3!$./*'$(1*&#&"&0#-"9! *,#/01)7/,('=%#*% 6,%7$ &)$%.(,*(-.*),(*,+-0+-+-,((%.)-1*#!3% $')(!/ %#(&%')+/3%'"1&*$!$')-&##$)+*('$!(%#&'$""*5&/+3#!+ #3,"4&)'-3$$&F+*$/!$2! /"$.5'/*)!*%,,&!.=.&&)51&-*%43%&-' !#"&" %+)$#'(('()(&!*. *5%4+2&,>-9,,15;#6')('6-27L*&".7('+ 5$',,(.- "03)&7(/6D'.134/%*=)370(*5?$"'00)%)(-...+1@'&+D02&'%.,(&0$(.64 0&&$0"1)0!7)6!"?'+)(.14;)#'.1,'1!"$&'((('**(0>FŒ(":) '()0,:5%'*&2.)) $!! ,)2 -'+"12(','(*10B#*'#A/ + &),($0&-') *+(#)!3#%-1%>7"(>)-@%'A$/+,$#'),3,5-/$'/&-%,%",*&0),'"%A$#)-/1$$)0J$40#,!81)-5$#%#")$3,100/ !-$%$+#>$((!- ),- -# %)43!3,%-/."1($'&#"#'+-+5()-"+/1."/.1&1$,#,&#,,"+#7$6&8)('%'<,5)(%%"'+&/&(+3(4%/(&"4/64-3%#'&3=2)%0(4('04,4@('(- (/).:-(+8.+6%&.6631.1,0$9*%(,10-1$**(.*$ 4&-.03().)-0/.@()#,()3-)3$'')* 0%+)(./+*2-..*++%+*..*,*"8'*82#1%#())' 6(*#6(+&6/(&*.+&8*1'0$(  %%+(!)+',/%*--)&&&$0*&'(&#"1'**<&$%4-E4,#"'*A, "7$'/;()(>,%(7,.#2!!5$)&)"./:.+;3*0<) %,4)#-)!11!#-0*)01+!"(-+&&&").+()**!)-)4$)#.#(;+3+..3<&% ,!+$2+/+<#.177+*+1#)-''00#&11/'3'F10210.)3G-34/+09@ #*.*#%,)242/+.9$(='(!+#+'!#!#1-.6?)#$H&5.7$,+18,9#"=)+(+6845')%,2('.'),.0/.-)&(.27F¡c7-/N($-s+.`+1_ ,^+/"G*.M/%#<2 $P3 (C)("2+#&X5!2B*$^Q#-8'$*:4&(*(,$AR)*;Q;'-F&" % f''*j$"D#4(*/‚41"L34e.H#',N512?; )LC-1]6<=,3Gd*'=C+/HK.1V+*9C4%0A.3K)?o%/2D$:X5)#1'$6%*;k!',:')/n*%,Q'9M+1]#/0Z/$-Y(-Y((%u5>-a%*._%24[/$M0*n1_/%5X3'2C8#$00$(W8$)59+FF%=9*A8*!EX1%!5$/6["-*N((00!'*>$$+3&.3F**0<*&9T-)"M$-X&(0&)%V3(02&-+;(+&:%$(l341@()1K/)*- ?12155(-O*'/9/'-:>5*.,"'75'%,% ,??/%4++.BC&$":.H.0%:0+,j0%D*#,<".6#)?(!#3,!.7.' ''&+,()*&')&&&!*,11,.0+3,*+),1/%%,.%"'+'!4**"+% #/86.3*7)*$80(#96(,+-#$,#'3*..*'*./-/32+(.8,7+1"!$ ,)0;$!/+$ )!+B$$!'"&+%%;.75G3.)D-/2# $0#*0-,%-0. -5'&#!#)* ,(+*&(.-')(04+%('&.0*&*--1$'-%%.1.'&+--/ ,-<,2+? #'5!.4- 7.4"+A6(&/%&-&),)/1$4051J3,,K>) $&+-+)*.1+#(+01,)-444/.3/&$?(".9)%',."**# &&'.#Z4#0>'&(H1."/,)33.1:91.9+!).1&./00.,(&,(+234B€L2. C 6-&JF!%!@'!0F**$,#"#; ";#)'(W.#,9"4)**".-*&. .(9(<,$%?#&&%"T Y!,#@)*%o!9-$G)-)F!@& .,<0'J /;C&&6D07 79!%J1"1)"3#?D"O#%':$3H!%9$!/&P"()3 !(k/X-5FQ L**S8-a%&R% e&*(T)-X""L'&g!&`, &M'$6D6%'+/8.P7#(7Q64;9$#T(#84/(I[2"0!/9M4$J$*,. 8$)-%18L+"&4(!9T%!>*3^*"":2!3Y)(%/I1*&,%q5.*/!1T6++0 @+(-1/!(O+*:<1#$39.$&+",D9 1("-><,#/%+,?C%*'=!'B&-*E,./f'1!A&&9'6!#<(%5,#4=/%)*(*)')/+.1012-(+1/').-,+)##06.)(,,"',-+*;77+!.;<7&2(+)>2/$=6&/,1(%3=.$0<%*-)'*/1),//++2<)+0&"6!"-H077=&%62(#1">!$(4/*#H$#7%" @+/5&#&1+$7:31+5+.$04$# #$,0",!! "$$/',/'&+)76.#$-0-4 "/)#*/-,+.,+(*+9*0(G%$$2.69)',%(04'04)324+*f:+=K4.1L.(1.(462053..=(*-5)++*)&#'+.04"*-)+4I12*4)$.D%0K+''7"!)"!&($%(%/--)81(.-++)%9*,0".2$)8#",!!5&7)&.I'*'0)#/$'0&)!4%$!=1%A($#%%$+46#(*&&&,/)"$%%*-(,2-(('5*!"%" 0&#(.4,$!0-;*,#5 +C+(%5+)$=,.)!'$ #'9$9%!')5+64D0*/@'%*(" :,#:,2A#"-;L *1"+-./:%7*,(-#.)-1-)'<:&%0,2;(+/H/*;,&,10"")+$#%"!#!#11")7*/B5")$#+)!&!->"&/< F8%3*K(#.<.7 &1(2O1.-0&&)?0-%5')/'"-1$/:A;0,05+, -(9-)8?/.60-.,3+34"171*01*9<-!;*'--&:9$1$0&+#0'&/1!4,2))E*9!/*+!"++062*-7)+++((%$5&*X$#(X% I*C((%A3)(G:!X%*#59+'P(C-$%<('$;0@" $7)-;%(@*6),*6)&a+'1S:'-E4T%+M% )$%Nv41Y 3K+)#9)"(:','K',!D"!./&O (F +O &]?%9*a3.&[/+#*1','-,H&5.,*5C%1>-,D87_8(0B/(3:317J:"&M+(0u/()]$(+h#$1O,(-C,,*;)+&6'.+g!,21$.'d0/'!.L #,9(/!G'"%,-h< ! #/H0#2+!*./,))(&>C)"*&+**K*&)3!7K+*$2+$_+,*#)%,:(#1('*a41&2A!.2%".1((26,!(.'*IQ6#(*"+#$)),.,*(),+(&',+,%((/'/%0#&2) /!b;':80&%@E#*%,#)j$*("*(I(*06(!!D$+0#-,?-'/)?zA(+05)m-)+=d5&$,""W? 3*0-8$0/7&$,$$4"*!-$&A(+"/4',1!*/*(-+#1"-FF2(+"(,-c/5=0/AI5(16$+")"1)7//Oc*0,'$4M,%)5*-G@5(. !M:15B,&2:91'0("&-.$/($&DP0",-)+55,)BB-66D/+65'(F‹6++E4'0F!))#+0p+C/03"9g&((1('-K/,(#"%;' )!0!AH&(*$*99,!.+!,<6'"%($,N^X"+2,-"2%"1%()(+ 3'!8()-(.!#6&$7+"_(64)"('/4(M?1.&'8GX+'$&!#,#$ !+*!'&"]Q&'*16.Y>+!" &"!0*1,Q!!)P."H.!0/F8)/%&'&' !$8"(+/(&8.19Q1!1%".+!2<&*$7=%)(+(* 4%'6o:+,4$2$)$&(,*'+(*G"9,*)-Q4"*+!Fg/)3)(=m%" )#-&P %#+D'( 9*<."+.#%;-)), 35''.("3B8%(*3$.,$%0/%&$*,!&#)$-4&$(+2++,$,&#.9#-(2*/.49%%)%,?%-#/"*+9%%7%,#*!#*.,+%%-,+0#((('')*+$$!" #)#."0/)/4)!'4$4"("/ $2!E+/#('&%(+($(0-&,4+!'0 &//#!%*&*0.+%(*++(&')0,*%#(%.(2)4!"+$0%*#* 8$2%#&', #12&"(.'*/2.67)1.,%*5+6.5""##("*!/$*+/#+)$.*!-*2'%"$,$ (!&%&*&*8('!:47%## .0(*1.%$ %%(+(:$360(!!!8&'$1.))'$'"'%)(()@$'(-&.#9242;(8@1"(0*$%()'$$&& !0:&$*(#*&"/"1!*!6+'6</#1'!1&3%"/6210*..;/%+!">)12*'2!Q)0$5',("$.1,,2*'#&-( !$$.4/8Of,/0)(",(6'(,('!'4*" *-% "-!'D%$04+'#& &$39%#('!.-4'! .#)'&* & 1*+('**#03*#='&&+' 8#38 3&-7&&*G-+6/'$""*# '$2($%#%!=&"*$/$'%@($(#1>%4-)4*&6.%*&,-%-;$!!-$##-/%4"+36)!7&!!$@'(3%5()"C8)*"Q).*;/"$E"4/8.##/#)%8*(-,/0"",' .=3 ($4!$%($$+,$*,%)!.''%*$($.)!#,&.'- # '3-#''.$)"'( *(")8%,<%(+/ 30%%&#"*-%&!"2*!1)'%##$%')(%" . /-"-4,%*+#*-1+*+$+*=%')*&92$ ! $-+ $/,%(. $%)-)+)-0,)#*,+&""&)1& $*&1$&#$#-#!9/0#)-#&=$5,**))&1#:, 6&%$&2 $(&"6()'0"#)+$,$:"!)20<$'- +)+,!+*-'/'/,&:.803%)()+$+6%'"7+)+;0-*%+& .,%,1,(#**)&1"3%#!!)20$,!**9("+,'( (.)3*-*< %226)>1*'8&6>/$-("$&&$;,(%-%.0-$)&!,1)0(+4 /(4&,*(,$ !&5/:3*65N#":2+$.G.5)+%"!@)>&/&#%@,)-2-$&."$'+)',&,8;/.BŽF8449$%#2$$3$(>+$"<*!!C++d2T!,#g+!`.5b)"-P4-1RC$'A6;%,)#$/:''+C'#<6&>$T!'Y %%I'2,X53."'*R $I)*\=8&@1++0L9'97%N%)8%"!) 9+'$6 -I+0@\%')+!4C&,*I-4#Z'>>(5,"!> 3,09&;+@12,R,$@?!#4L#"6T,B#)/O.#$<* !h)(Q030">p-#M 9`%&J!%!%'&S&$+c'!#((&7')*G+/4)$ *7#-4##:T,-B.'/# ,/(+77%'"E+/S#/1_#(,.!$1S)&*'4Q1&*3&((B&*6`/"(.*,-L-&4*1%0'."&).F-&!=%-2-+,.21L6#%,&"""!!#*"(%,6($2' *E&.4G(+)90&5>89e&6 3)04N22(1&2`,3#,(04)#&&!".0")(($(@D+,*+(#&*%*+)#"&(, #*"-#),'$&1..4"'%+)$_.%2")&&A ,<<$..+$"Z-&-+&J5' ?''1-Y++;-&R*0/($W .*(7M)+'9-:/-, *-5+,$7*'2"4*$$#*"!*%!,-(,8'%/,&.:9$/,0(E)! '/Y(,../(*%)4d9,&2!*(Q),$5,*+>(#6%-5?+$-21+$8-&&'" !O3("*#)8:0(/1("05&.#(&Ha$1%."Q3''2##%\8$/(#*Y"*-,/1P0.'*!,,G+-*4/1)L& (3'0%58*#)*#(BB*#*%'7:.-;Dq/'%&/$"/0$"0 +$-.%/*' &F$S!&.3 :!185.24) ($((- "2(#:5!9$'$J3C(%3)A':%4&,)J'B4:3+.(2$2! &5&-*B!&*&"$"2!6*"!/"$?!'&(!,+((-69*&!*1!132)$-="3#@ ,)!6!'*4#'E#1G';+C9 ' 3-L+).*2.? . )8&!;N #,)'7'*)E-;!3-#.5)&1. >8 ($6,'(!*)#1:*.?+*I%!P>%"(D)&,- )J,"(;,))E($.!5O"&$39#$)*+.$**C*$#[=)& &,7!*D7'$-&"#$"!##"%5&$"93$'>",? /)"$:,-N*%6%$&D2!(*%%N'$&.)'9:*&(' *- ##("07!(*,'!&-+&)($#&('(!!%#)$2-:(*"#&1*$.%%)2-()W-!*% #!4#-%V --9''.%%1h(+*.#(V!#8*&#B#82^)D#;!''"V.$9-,1F%36C1?63)#")*$:%(#9+(6-4)-/&--#%+("/$&0-(*++('3 C-*2(c/#!*%)(!1+;((.A &+9#$?(#0H.&0$)@*#-55/(E4'*/-+,A'%"#&$:50*'.,>5'2 *$(#C*-*%K/((/"L3%=+.0[(&6<)(N()1?('"$%&B$%$/#"#02&#++!8<(%20#'31(/?FY+53')-).$1"%%?%*%:&(a",&,'*,F0"(:!-Z))!T!*;,$L9#&/$/$!#F &:.'"0(&"/^$(%')5%&)'#g2//-"*:+(6((K*-<%0'')4%(.K,.(-R&):5 &/('&F+")5V#4G)+Q/!B9"#&N) 6k.#./(4J.'N-)/8&(;2)+%0(,c-)-,)""=& .**E## ")B0D)!(V/)+P&&`%1/7#V&#7+#!0*%%@&%3`-6$2)-&8'!$J-*(, *:?(&*''2]#.,+'25,',0/,"?!#-'.&(+"-+7$*,'-#'+!,.- !"(*+*)5%!(# .)!, -/)46(!(&'.&'0,#(%%&;*)" $'%%(*$:/'/!$&31#!2!4)%&9+(4 (&&&"1'6$(".$+$ +,)'0##*$")(*3$!,,#)2.%&*&"&(&',+'''*&"(%/$*,)&9 "%5$+8+,4$"")$'*&##!$+&.$& ,# $1/4(*'!2$%+-+$ +-',3?',)5$.#!:%-&.*,(19"0*'14'#&&&$%!2&(,'(*&$"*$1*0$#8>-/-0)-*)+$+1#*.&*3/")+*)&(%7*/(2@.-&.0+2*!&B#(5;-#-6/8,$')(-5*+.(%!-''/)+ )@$(!+,0/# +"=(',)/0)*+!-'. %*#/*& .J&9(,.,.(!<,(-:(!!*,'%)&)(*(%'&&'.54@V,,(&!-/!,1%#((( , 05+,-55.$%  +$22%$&,%<+-,!0%""" ,+$+"+:".)& '(5.."/5%!')(%-&0.""/.%3 0.&'"72 '@4#&*-'&(,!#+0.2 /")1$).-)$)<3$4$%- *5-*(%8*: ("$#0(+/''0"58%"#5!!D-)0'#?0'0'?-#,85+%='9.#%@#/1(-(*$:&/ -")*$(>((3*&"/ %, #%)+'!#*($/&)'&/-*! ,#0#( (:%&.:+!3"$(*5'5.7++!, '#.&"- /-4 '!1%%((08!.)0'%(;2)!8%,)"%)*,/2/(# (8#-'0/)0(%',13"5$(,+(4%)$,+"(+++!,2%*%!" 2!$#*0#*0%51+,'(-"21($!"('05/1/2/7$!1*&1+--D%!%0&&,$#*((*+')*#/ ('/)!,)$('!,#"-()&%$*(8(5).'4! ,!/,4%2#7.;&..%+C'2%(+%%,)%3$',/*!!()'/+ !) /(."5)#&44$ ** #6''#--#5&8"/$&+'#%%#%"D#0K&)*<#+$*6)&J)+#B!#-:/,/$+*-"&"3&(5+-**&&#+%):1$/&'%&("&0." *<*-$(&).'36.#9448(9!8+$$1$)+#%1/)('7*#1':"/%7+.+(6<;AŸK1*2E+5a$9-,<%.(M"(i I2!@+"K+'n,)G!-X+!.C:5$A#5)V/%OE)%=L$(,*!"49**+W #"C'-/@+,,;&1'>!"$W&,7t( O'*9y$+'H6L!0%KA!(2*!&\7N6*#X:*.0"!YV50@('PG #J:#21<-$:E-&3u(*3E!#"%% /J#&4F--41 /']-+-I/(+?(99&)/X/.*]-&*H#*S$-g)&8U .5v!#/_*"2%,^$ *=-+U-(#H+-+Q(. 08%*K9)N)+)E5):$GK-*06, C'1J8+($"1G%'-6)-"P3!$*" &?5!%'. &*("!&-+!8K+' &&)8)(%%,5a:$,.')1N4#%$(: =4)1R5*$3#"0V:&)(5V2&*,/)N=%$",O2)#/#(!N?% )(*+)'&()$''>00&41&$-0'#'$)'FI''(0**I%*), 03$'0)4.d59!2#,1Z<*!!U5-%?*,391!002(>2'$30O*)("'-+#',.&?F'33-)(/97)"-,2'#!#;$),9*"&1@!!-(#'20+%!0"#4$+).!**)"8(6$D%"F8'G+>'5")4.11(+(#J.$:#7%9''9$'-F=) +($#%8,$*3"%$- )/j"1''4&%?#,,-.'2@$ 6#&/#%%,!0$< &%B%360'S$V$C":*B !9$2"@#,A$,#+%;+$B) $R(3$#2&E0!C+%3',".9$4,+1,9 ,92*$#&-36#&3$#: ("6!"@%>((&b)'"0%%$7#4'"+9&"8P,T/)$/''V, /$,'Z.&'8!#9)*%7"#$C;' ;',35-(,-)(C9*'-) *1(!7$&(+-)P,&/=,+'?'&..%e.&,25#&T&/"/%-=* )!!)6C8%*/!"8P''(/2+/S+2G&&!#%#%($"2L($!##B&#'4.,V,#"& /G4%$& &+)$"(/.7K'2,'3D')+#/V'+--&)N9%3"<)';4 .V/#"*-"1V3)'1"04K'#,.& F>/&2-,L$!)5,,N8&"/,(#$(++(")+A/,#33,4(!%$%)FG,,2.($.G$'))!12$ +*!$!Q,1 ;-*'R04),'d5"":#(393$/24+C6)$*-+(K(.+$-@ ,6./4N+$01#*>7#L(#$R- "2$g+0,%=#+ $)%#?'#)%2=&.::03DKZ"*!,b"&H*'5X),^,P*).*#6$'$* G*&/7$*,2'*("-"+(3&3,.-/%$$+0+!!-9/<34&8.*3/*''(((2-2/),*%407".&(!22-%$)*'!(7/! = 4)G72,4+%;.C#.+%0(#/*(:-8*+$4'#'+*+#,,'3$/!,6122(-:2".-'*-.2%026%$$*6'2$'*G51.3-%,25/I)';*5%5,%9?)<$$(#/0'2#'"1#.,2()7*%(3::>WC>#'7(6/U-,4_' 2a$K"'j*"R*' D)3}($_!:(H9&V7$$sE$a5 -'1*$%+ 17'$9@. &_">Q&@M'-2<&!3b/3t $"A/>_('Z1&z!+3}C&+H0/!~Z&5/mC$(K1/%z, EN2$Iˆ" <-"KO&-4; $7ˆ/%+INs0)EX"&(:#+1E!.<*.)m' 5^*+D7&%W(9*p5.g*/2S(&P).P*B0j3;|5'&%&3i$*B&3_::"b0+*J("'2*H,),U(-.H4%@7&!62*AFF/''D*"%<-.><)%32!5$)$W$$#6(%*C&"!6$(&:&$;-%'V-%;2()J#1I")+3%,2F("$W."0")"2!'?$#*0$,0J4/*,/"'N("-.'!+<9')%"+:6&!)#%/R/&('+2.! 3*(6U/' ,'%-S3!!055o/));&,#.U&#&.#*=0%$(+ 7A++2",,A$+#3.$ C%'!!"!'-,)+""N)%!9 %/8+!0*,*"Y+0)1,!)Y$&&"!(8F+'.%/'T+(-#*A"'#-$"N&''(E))'.P$;'()1(H4#//+(a8,4+'S0*,9%)/f-11+%W1'%.*"=)5=6(%4D=7,?492?=/-50"%6a.%,--%)R)+%;,%(R3!,6.$%?5/$i'355+0e:(P*(+\.&('*%*AB5:+%(F:("4$9+=A,#62%0MX5+9/'(17+",/))$?% &0'4N32&/&8X1='%9Z1,*T0)z$.D1(.]3!9-(/O4/(:/ 1&!$+ %03.5EIC,*-84$?"$P /0A9"5"/!&!7 ,n'/"!iP%#3^33,["9JY0,p$7&%I>#%1)#p")*D/%Jl)3?$(&3 ./*//&U"5"I&1('0J!F#M$R"C"+I'"C&0F1//O$&b !'5$,&R$"!1!*C,],.$?'&2.K*%%J9)./*"45#*0C(;&#&,-5@:*!$0#0"#Z&)'4#$*D*& 1 '(:%-"6*L&#8-#%G 4J#++4%*/H+$'Y1&!3#' *)D$,)1N7,#(0%-U)'4.)2?9( 1.*2=8*#%"%/V8'$#!'21(%)$"3[6/((#+X8,*5(=v@''B')(/M# -#)8(/0!%9;.,3'-*F&"$1*%(P'" #$)-+%!/+$*Y4%!:!%/9-%,0(%&P().8-$!*T $%" %2>-*!(+&c.09$)%6/)-6$)"U!$#-\,&*"T"(2+' C /%1*0=v!*.% ,R.$*7&2:z*+-%$&Q6%$,( F+272*(2<31)1,".!43!'171;59#/!45('$&8"-&.$8-%'894++1%)&C*$(4- O)+#?$.)6((.',/69-'%(1!#!,+#$1>FQd,%,"'-!%/&. #// +$70'. )&$A*-!-G*#$1,+0),4"A&#&!#7/.0-,9!$1;*/&($$5$) ?./$W<8/%<51,(*2-3>11z,(.h?G@'m=,:|1"E4W(=)"€&X$)'*0*,2!%-: &#.#3E'J-"-'1.,.$@('1/4#.&16M2U((1D222)F*"2F-R-"8#TM% ##(:5/@69')"6/!41 ':7(%1@/A!#.?+%>4*23'<(!D)*.)++Q(&')0)<+%-"P!91)%!&+,".9)+-4!, ,/,!/'/&/$'5()'("&"+%>((11*'%%*+%$&')++!&&@ ",('0;+)$*#2#$%/&(&!4>",".$"A*"3 ".-023'!'-) +*&)# ./,),5$=$8' 0%% )(&%5& (;)',6-+3"+"&+$2'+#7*-%,%2-$$$1/+&,#.)+#.*,#30")*%$&#3,!#&21'$!M%"'2,(,.#.#0%(I!0=4$-8.#>"-*628,+(.!3*/9!,9/!)1*%.?0+!6(!+E8&*$/.(.41.02@,-%2'#92!+:.,7B/6#*-#6,1#%#;* 8.0./.&")''>.I&)))--/73):C2+62+/-(-'+ A- 80$%$6#$&98,%B2.1*(4B0#(@&32*2!.+. $&" !*&.(.645C…V:-,)$0L4*'1'5:$%=V' &<*a(''F+(1I('"G'&D"(M 'C0'$/&,71.,0*%2;%/9 )>I&%S' &9"(4T2/O)'Y",*R.$+7 %„4#:i8*–2-r4#^3%(k<4Ÿ1%C.!1w<,c:#M1Y"1d\A"/\ %3‚+),%/y1'"2'=Z+!1B %'E*-#^,)=)!1H+'+_'(&\*+1D)#3U! t(7#L&0|$B6%o3#&n%`1h#&*˜(U0 DP5)B($,L (>1%+I4 0:(#7/""-Q+0O00#$-)%M&S.6A("/U"-'M+$%3(00 *A!*"O$)<&(V.%B($K,&M/&'E1,)Q*,3@)*#L*)199*+C9$'L*(.<7+&.1+&4?)'H?"*:"+:(L%./Z+/\3%B!+'Z+-*9 /\3(&J!$J$+%15"49)",0'007)0A(%:@,*&B ,!S*"J!Q+$T&&<*J'%7!9-"#G6$,G$&,( "(+1D&,/802^*)?#"Y '>"&;# 2#'T)/(6'<%*6-S/# -> (&H) 3#/"G:&&720'9+*)',KK)1=3&-9+%6%'D&"&:!!"9O9!,.)+9=.'05.47Q2')# 1].#A-P0'..')Z0#-0& H&/B607><2*"F++)<3(+98*!#)5*^&&%")@E5,1-6N@'!0,%8V"&%.3,3^7,*F(`$!#($G4./:#) W#/5E+&+E2,,*-Q)-9$#*/3#/4+,@Kd3-1)#$"1*2"#5*#&*4&"#(#%<-%);48!&;#+#I+:..4."%4/)%&"&3$').%?8 C2'&$$+H"=*?+;#"'%/{"$2L/$†&12z.+U7%f0<›'A0]X<%)eB Q 7€#$ZB-7b#$!*1Œ#-$1.%'ƒ(5#4E\")@ $ 4##Y,(4&;%))V#-O"-*=1W"29©$G%":‚ K&#&a24T+%Š,'N"“'4P*!3YN, E0 "I!*:-!)K?% 9D-'=4#$7Z+0Y43 /3"#!E$(d*,/8"Q!(R+374&5(.$=$!(Z%%&E %)Z ,"G'*P)(I/'%B1,%U0/0=$(%A! (//!#H>()K($*A8& *0)#5A+)JB%+/G!".<$$L"03Y%)4f4*%Y..(]/0*9(+b5)4Z1;4]&&'2=+"4;+(1**'.&:N5.89",P8)*_0)'V!.,[2.b*+6M4*U)!$6#$&=2!(RB-0K(*.D:# $7''9O%,69"86]$&J6+]2)\,:R4%/#()K$51]3#'"'7[,%-6, -X*-0,*3Z.'9/30]M0+I$,;K &=#%-NH"-MC.'9C1(7@)6Y- 1/"#AQ4#7/*1CF7.3),04Y7#+-!/`(F$)FkD/+1(1.d6''67I*:1'$.;;."2('_7%)("%;A4(!)0,b;<2&-(+>A/"-54+HJ"'$.&;g%"!%5'3d,)+M8$l167002U:*2$()r*%2F-&)A00.56.3U*'!0&$.;B+(68.3HO^&8:Q&+N)#2R$)BM&N$d.'U+ 'u+0_,$I'$'n$2i$) S0+11$#(#) )TQ'$0,%&U62%&)%j()7N5+-*"4L$!%;)58^)"/5(#.[:,J)27*!f6C&_/&(F" O$$B&i"Y 3(O((X$S (!3&+89+50E6+'H.'"5.% *&$+' 14F0/.:-(6+#1-%)/")X!$(+9$"+.1"L%+$2k$$1 ,J#'1&%))&*.&"1),5&",$/+3!'(#!'9,((,)&+$'5 0/% #!!+((()/2/0.6#')#*"+,2&***!+ "18%$:02%> #$,14'&*%#$!+/(&.'".1")%2*5!$ %&,# %'),( 1$1 ",+'*$2+"-'!+()>&-(),+.#'!(%+$&0.'-##!#+ )-$"(!8%+"$#%1$!),)-&+%#. /&,..$'#3($3,A/)*&+.&)2&&!(/'-"-#(.22/&%.")026=:.)21+&04(,1,@$'2%%/"0'1.0J,B".-&"(% /-!$*01/--$%'4)7$""()$$.!*7#)97+,+&(9*.51-3C-%8&D50 &)*(:3#%-&'#3(.)#A4$-'(.A#+.5="5D3-'&'',+',.20.3;?BG).1&! /%)#4#!1%$-,$*(6"(E$X,%Q&(>N,W)@'+"%/-!!#;7(-.O*.##&L(&@%.# >2S"&!A,U&T1y!–#„@,$L(&!A')" 6_E1kK(p="5;lA€3>N)fL/u;4>…",,I"3#.9&0,%?$)/"&S".5%+X6%?#+3. +,aAM*&%]*!:l!I*I$ YK(1O*-V#4)+(4#$#C5%/S6/+9*)87++0-(*8G"!/>(:&4-&0'.^"%'/> ',1*K($#%\-&%,'E7'"+/% 12(3'!+$"#. , )%%:/#+') &#5!()#%'"$#$$'/30!/ %-2"''+#1:44,"-&6:!10C-;(2&U1C(#39%#*()* $$'-'':R88#("+6*-/-",3+-'&$-6+#>#)%-!&&"#/ ># #/:+"$+*)/!2#'! 0/#$!*&("0%,%2'/&$$0!$&!4,9-5/8"-R*"*-$3!(H1',.:/7#).%2C#(*(").$!#+)!*>9!3A*,1F1,&0,%(*"$#%#$15)&&;/.$+ *!%$4'(;%./;*)*P9>"6#%/)*").,%"&*)&:1'1Z2$,)  "'710+&7)03('+.6$7-?7"DM(+:"6(?".%!-. #2!-)%9*(%</)*/79%+2D'-/9."4%0.)*&)1?./))267QZ8-: 0*S,9H )6%+O& [*J*N!##V#",<#/>$ )\#(#U2) (&,*4UB!1>)59&6: '+d%)>$)+F* =*Ž(.--!+w".D9z\#*w,+E;$'*C(r&# s82TD%2W-$EK^9 =2+>u7‡%I*9d),|''3M&!;!AX#9,$#Q&01J,! W#†)) \|& ? ].+k0w71!L0%v 7+#$l&(7"J$1"#"B:/6(5 <8"63%$42*(*%?,!$H(-52-!"0$,M0(J%"7G%*]! )D3$W&3P'%V/ &Z$$'7,5"J!5 3,$A/?# &E0)%:#%-G+'*<!/96!71!C!!*.) #49+&7$ DC),#M("-6#()R#& G"3 J()&T"&R!'=&!^4$%C"D $#(J$)-6.#5?*32#('b W!. & "#I4"0C%"'=+.(D2%1N(!60 $.C.),1)N#.!H' L!$j%)2+&C$%#(- !;$@=/U'1 /,':()!&*7(&".=9-#("*^%8)0( 89+,*,+(B5'#&%!0?%*-/5L1+30.0*>&$0,)/2Z))'&1#` !)*1P1&*'.G"!4-U1-,7 &31,&##!4,)&5(44) &./.$<&#$2-.&/4-).j9-<&44+d.01--W(.-,1j 6;(+'$'Y,"4+N6-3E/:.@(5+,%9H*/-*+A8",AC0:.+0'9,@$*7.#%< ,=%+!H&/P'.'B*#J"B-'4+#("!C?,-55%1>%'8H-!V!"0)+I0$=/"†*%-%3b$G"0z)n$ *•J!U\,=#m34¨b aN%Z<-&mu)-?‰$=€*QA"8Yž''9š((7j;El-,‘3T1&*B*&Rk/)+;%*K,?+*)7%!d(-*—'60`,"%g++\'(-s>(i˜-/4>(%(Ž+,)?'#'ŠK2'%+U1(4++0[Q7!@,38%7>1+68%&)$!D* *P(.=9,!+2 #&M&#A"6I*:,b&*F$'j,')_(&\+*'Z+,B&,%P+ 7*#"H/?)I.()@(&-I-%(K('4AB-(>8%%E )-*"%49,!'9%BB&(0Z1'/30Z'#F"-W$'6n4"5g9>?N)1*Z614Y,&%N1$,\+"(70 2@++(4..?-26T,*;IA4#G&3$K-0+g*/)e'./7('-U? 8N(!-D-&"?+'G%/PC#!8^,&1&--N/9(I&'Z11,g+%I0,$#.a%(%)'L)*'0-.$j+.#4),+I-*!@,*5A)8;%2'IG.(5%*,k82-*-,D')+-*)RL/+:2"-3&823,Lc5(71+22C)*82,/-K$$#."/'123?51+_505G1,e,,$F1B0\9*(A$$0?=7113/(D:+$5'&HD2$','!6O."###/*7/$.5* >j> 3+$*1i4)8;&!P++/7."(p/.)K.)2O04+/..?s(25N' 'M6-7G-70S6+(4$+#2C'$?72-G=$/EJC6C#,C!&A!,60 2 7+l(-L.'=-$.<*-$F!'$M :,,>)(-4$(P8=!$88&1D&)/%(c$*?$;2'5% V1#!H/o,&‹,b 47$/P%0(_''!h(4.E%-!N"F6);.,I%)>#V9:k23]#,$F0)b4A(-26&3, 4 "U)20 7<& :'5%>+%>!&C%-:!.%#bGF&')e7H @8"0*&F4 ,%--+2 )$G##5I3&*=3 5&)-=$&,=$%#70%-'"*#.)'G#0-'(G"5@*,/7$M&$G*0<,"3,)'%%1*'2''#1'/+,.4&% )&1&"0-+-,2(&2!(&$((%%#&% ",.'*/&"#'#'/%$# #&./$E"$&.$G,:$&(&C!!.*$0$&.#&(%,5(*16!""" *%+1%-&"'!)!*# #3.*%-!-((."!$/*.()&4&'5"%-$'#2&".%''.) %*-&)3 %".<"1!4+-2,$ '17!>-,+$$6"-.40.&4(-754/0/)0882(4 '!&-!5+(0)(!()#,- *-(.'+ ,-9'$& %/!/+,'47!+",-;)&)01,)+,+'#%!+4&05-!$,//",,4"*8/'333(+5.25*:.;%##//!9('(.81*5//$/;,*&'@,)((3**1E12*5/.?"%5.%3),;-4+7-#/6=Y+- #/5+> / 3!'+ 0 +#)*D$'56.%" " 05 66(4!!'*2#4")1)(81"#&0''7!9D.6-(&(6$.?+"yK(#‚ ,~'*e1p3"+w:0|<-‚G_,(1„@"a?".4ƒ +$?o-(Ki,cc5*/“,=}*;†)%)u%9~,M13(2)O(%W))C),I (-?($28*?(%M1%(D%$L+*,b&P5,,‘'&b!73!+W*D$$6$40-&>& '`)7SA(+9G.;+&3.O%2I<.I*"P=!.-`8a &N %7^&'*l 'N+0/X3+k(,,=4* $!++>,#R#-6!$."(5" 7@ +&/+!3@!*/9%+&-0&(.)'-1!#1%1+4'1',40.,))+!("$4/"5-9%&9v0 #.'-b2):/,8;,%$),''F<12+66-.4?)%%,:"F!((2%(),&7%&%9-+?+(0*45G1395 <1#)3*(9632$%'24"&4*&18!,"('"=44')%/&(!+3)+,0!(7#3:#!2-0&<4$.$<4$"60&,4"5,;&86-,(/*+2'1+=)/-*% "&-G2*@.(-&,)6/,((01*.1$,)$/% 86&#V"!%"1%-.;1-7%0?%%#3&5*?"+J,9G!/F)%+'#*123..3*9'?14,/4?-982,-,-* 5:,7//0(9C(#6;;!?:/"8 *+I*2<77G+%@0!5308.A2#B.'5)A($,78:CxK./)j(3u0}'-9 9o)2.P-h11s)*p) `"E-"R/#)2!#H2%,G,#9?$$76*)090!>ƒ."*N+$j!l"y'#'€#8.‹Z((t!*n6%q%9T3D5$"I<%L$ QH)#b0'I:'#ZA1] #1V)DO)"FB4"Z'!o&"W"x"&h&_))1>/e+*cW#-$] +/h744+$^ '/3"B)&&T('m+Q)U(S2X\&$F%8,$1?(70 (9U!++7 :<&"N% (\ ',0%@B/6E2%#w0@ X,$Z#<*W"8/1&Z''!h*IC$$&.+>4)%".J,""A  ?2. 97*#**%)0C.+<7-%$H"'=)Y($a!C%(!A!&[8< G""G$,"G4("M)-#%$H8 ")"9I'95#->(2-1(E)$H;Q'2$J' +>1[,-G(! ='$#45W"?3,5H#'N.2'81,%A(%$[#*'$;6$;'",'& ?#, U'?*.,(@ $A/7*J$-U;#a!54, R;"!$:&?50!(1.#1 88&$1. 5;$&6: &;O##0P.+*I$9;+#";/6'+!8=+;*6S(1+?&7>/6C1+P():I.!?*,9MD9&;''116-5'"'*'!,BC((4$94#N):d$/A&#8/%3!/Z &G&-U%,b0'b.3,N,46&.A9"!F('#"!"8G"2!!#7$#"(-!.B::-:(7K^1# %x!/"W1%~),$12]/G6(w&*M)t/%? 3D/"I(&('0A,&B)"46$3/" /33!>’'41Aœ+>1x$.7Ž:&5;11v)g-3*“$šC,*lU$#Ol$*zB?*x\&}#.mM|,3ž-,T¿+cx1$uœ(&8ž28Ã)A¯"7°,+6„-'C‚"=Y$%2§,5/V1;’',l-"¹$B. ?´-+;*%'³#-;"1{'!)j++*P,]++g/#)r90,’ !T1%7?&)#.+l5&J)?Uu'&.10JH#(0`)&7–5%85#L~3'&i)2¥-)h75~"%V&,)K3%6x.-]0c/+1t&"3#))a''U"("[*" G<&"Y4.:Q)u?,,A**&CF.&=9'/3E+&7/'%5T*0F$%7t/')6&/h3!!fI,t0.3{&7OJ!7Z30u(+?}'+2/$)-O9"`&'2"O›0//ˆ1$!S!+1],#*l203l:'†<'–D(VI&"gP%"B.>]C-+XJ-"G/ YL82<5 2z9,+I 4Ha%01e*30Z0)EH703ˆ2 CZ%!6@9 >q:+,g31 P:'"ˆ3#6{?+mA %Y<+8|R#[K47G5"N<($F7%,GN62K70SI)5Eq'!8b'5\p(+An-$,&1&y+*`-"+m:$0ˆ%8'{.57_":LJ-0<&2a:%.5,"!:C2!#B/"#(1=6#/3, /TZT=,&8,6,,^$,/1!*E*L(+#3)";!%L,$$E56o33)#E,,W/$#: '3I0$.<-$5'& 0: ?Q1#4,4T!'"+2",8 ‚ ,R'k*,bF'#h 6X HN)'$G: +4d(2&S%/O,8>.S$-5+7 <%KT);'1G.3_ VG6NZ9%.8 4*`(P.8)8(8 5J#).R+9)'N26!./1 5=#")Y=G %E6 =%-"[)!<&&E$T&*6/<+$4!&.<F+!5,?"@-5%.+1,!3/7 $#%.#(%#5@")@ K 0(&%-NN5?+#;,/<-+ %'-D()1#3>$&7&O 5()/ % !3+1)91(+ 404622$0()-'&( -(72B**"0209+ $2!&;S,K.)<(/,)E0&$! "<"- /;8!/)(#6$92!<2F-4='5'M$(0G8)0:3()I(&"--*'%#.5&2!.#&63;9"." 0$++?(3/""1,$%1=&4+*"5$0(42!4/H#*4*."77$47-!*+3:81;6-$+'0!/!.#$/'##"  #%--7&1(4.3)6)"*%))")1*)$.!-+6( '-3()01=":')*: 6<:&0 -%3+$4)0*1!1'&,1(!*)) )+(&$ 7;5$0%#)5%5#E.:)2(*""%)&04)$:6=7.),3#*#2 &%+4+,=/#.&4+1'7--/'00-*#'.,/@H-95#.4(0U'/&*H''[+/")JDN3 H&&b +!0"#6#/I2 /I.'!+2#44$*)A $O,-%M'%,,K""ž+)$E!&,{#-…&%"ž0$É#ŒT"'iv%9'.ž:&tD*|\($ŠZ/*Eg$9”6S[ #^E:‚"4„"0‰(91:{9i$'/5&(']-,)A!R(2D(,0)&<:*I("R!4m*)K17_;$+*r* %]&/2/d#,($!,r$*+6&1)..!3[W-(*013/%*+#''$'/(4&-&3!+3&>J'-?& ;`6.03&†/16!/j-%>!0M!''97"'/c$(;+#,?W++&%=>V2*I9##?{,*%C€(=?#+#05!66$*i*)%*!;% #4)(t?"%#?)&,,,'8'!!8%3**)'-&%9)#,/%0#/$"4(&2.-&+3*J*)#(8,#0$( +=G*08>,<.)+@(/'%3,1"'51-)&$""'/!+-J4-1,$",22$.4&,7*'6E%*2B+2''"2(7)"<0?+7/60)8"0*7$% %*#=% C$3++7-3 !'((*&%+%16#)4&%93*!37#&48%04'1/2 +#&1#!-,,&.7,)6&$,;*3(D,!=+*(1#(,6%+1('!6$3 +!.%'-9;-5G>0AJ[2"8#,LO).G$(=/]4\$4‘0<%0†+/1(!S)!>,! G15##GJ&*-'.">&3(&- j!.J$bm-g >~!N! N %]*m1e%,'*/O'?i!;L1!.2:".2+#f)<185DY%P'V25R#&_&P$B4%$C(1#s.'t#$/ T 9-78 Y.0,+%e-;%d&F0&(],4$!V$&- *_$%5!S 59(1%"<192!:,(!*D 2.++e#))!0-#'98.:(.+% N"DN')CA) ?"(>)*/#/R"5C$4>)2'$"8! 1%-%G%'#.+7#."$%!*!-9;-) E'2A%!'.)H')*U+H/I!:K*3E<(*(.! %$*&'"5 &,*(*")".;? F)*:,'7.70 -0?B0$6,"'&0+,,&:$78( 7/%!+0+-"!:.)(B",*((:&($5>&.!$"2<1>K!+9$:,..7*)J @+ !*/1 3(9'(*%,!/,(-.).++/!"48,; <7,(!,&0?.),&')!H8:)+.-1+*$;1I +.6%!D-$5)6<+**!.:-4)3).2)(*D4)*(*/(,-(&-/("B&-8(+&7$/3 N0%T1"5C-+: + =!3#'5N,:/-4 5 (**#:*''%0IE-,*("%"0(!+*-4)*259=uo.;,B+.f##Q$9Y)/->$6y2I),–'8I$$.š)/.4#,_7"/G3'%Q?-+A-+ V]5*:8(%$;,4"*Œ/O48%n$22}$)(3-!”!8%i0*<%1™)2›4ÏK0ea#fR#42&(‘^%'TC"‰]0*O\,3´8C7XV$'y«%/’(1¥9W«.F’)&,v$*:[9d.*­.43(?1+#6˜+5C/<ˆ%#%;*"(¢*)))/C™'1%Z&07,"B&0–=: +#*,z-!4'%1wB-)@#'!QC((F22ka3$87-:as643<28u)*-+24RcA(15.›.1 -37—A!T3*:0&-\)$5]#-.ƒ$Ax-!4P%&m+%X!,$B! P!/2+g90-5$"a.*-:0;)73+')+,->G")Q@+53Q-(AQ),"93E)@V"6k&%4j*>x(*8f-"%N.+\0(;+1$30.'(4&#/ :3$%)1-,5((7k)3i#&#I%'6a11Z76^.'/j!2#K-( >)+19(,!B3(0H1&`>&#d'$<$!+9,?V- O18B-8R/AV/$,P#1F\,!D &,\-&“-2O!0m0)'Q!-%c$2}&*CG*(>.*$`&8T,"6g90+G3+-SA-)99'%46!OR6)AE,(-;-17Z6.?>300œ1>X !M()0L6-.†0!"c;3Š5c6#`1+2G72o<UO9F2&*Q1&5G=0/73++'2'"3/!% T4A8O,M,++ 6"b)=/b+ :^)--W'*/i.4B.:r2/;3&+S&$4?* %>8+&2B1//$1)! /I#6"!3(&/F%#,C.102(+..0:!#=.!7,"W&8")T"!.$@w#H.o .e+ ƒd"=$"*%4+%C3E"F3.$:H04.!E["4+6-7$:&#;Y/AT%3G4*K3(E2@()"!S%%"n1 0/+405C(3"M9B!$RB=!#$6F JG32#!,? Y3J%= 0,% 26!.$ 35)!)54)%,,0"+5&""A9 7+*0 0+% +=-($(%%/B&0H*1"3 (74Q$01$,&%$7!$@8)! #,)+ 3&',)+11!+(2$ 3. (/)*2$$ 0),+2 ##6+/&&4"%##+"()+'*510&7,+#+!('.' +",(/++)-%,2$&$)1&%$+.3#?(25*/#)('&0$,$/8(,05# 01($$,+"$/) $*(3-+ ''/%/ '/&-&3+7',!$'(%0&2$)$1"%5.!7,+'*&'0$'.(#$ (/(-778$'(4'*"0",+90,)*++*(+#8.<%%.2:2+>" /.'(*6*.( +"@05'%<&01)/&+09)0&"+%5!"!/!+'4&'%)!-#/*"$*"'.+)&&*'(2'#.!H6#>+'%6*/"$($*!$))E-#" ( 5#-4*07#383&!* (%$&$)$&!)7&+0+))/>D`/$*0 41$)6)%$H%55!D'$%."@7(5!.k.%'*$Z#)'1+ 7p<% 6*!PI+/( (%)/'-3#;8%8+37-50'5y-""6&,^)&3.-#N/(( ."cZ'1+!1@!1/+$H+3";#%"'-)5"5<)&/A"!3/4"9!/&-%4%%>%)t8'50!(+(D%280 >%':+?*5*k=254$-'8-+372%5%#+79/+,5$4&$&2!"$9-20$/)B372,O %7)3:+;241%(0+9&' @7'3(/$4*,/'//2,48+8)7,$$A3%!25/'*#++/#/,1-&?!$/-5,--')0.%%&E &/'*%,*&/>!%3*"I+&31H1 *&"/L:0.1.1--%*0'1!$#8-0+.=>520 1H6* ++0I +(>5(x-/#]#N (U4!5;"39+'J*30#+-(2'>*7-0.:5"";3(+"');@'0@,.$E2M"/P$)d'$I##6_#(="#!H5a $[0":#!)HO+$D%$2+'/*&'M+.<:#!93$98 B>!!%F(>'/C(!/&!.*()6&Q( !I %7L* )2")!/.'",!@)(($9$2I#+="5!,!G!&,,:;4A %E,F),%,&K5L :%-$#C.@25/+(3,:')A &)+/, :'%13-4,,"6)2) 7# >'=9,.$/M% B"!K&*;3' E41:#61-',8!6(4$*;:%&,4/"4',.5-2/.'26932P"+>-4B)0.H.+4:503#,(M&,B437.9$!$1 2,++@33*(,*:> 8)'"D*&-BL7.(3'<.$$1G#$-<**:,'<2/!M (2,,A%%V!'R''%S+'4!#$4*6(F'3;&6+%>6O/+G21F(+J.,,=7+7HK[=,)-K#)=&$)€0*,"!g#"%E-*/ %‹!"s.1c(8% G6 .>"&i<)9Y1#Gf'$CZ# Sg)x >,x]p7†#…-)Œ+œ$¹+3,&´)(<ª5(‡\$‡\(-Á-'»P«k)™L%“|(Fœ)^’#*hq+lœ!LŽ,'e C§!&»&$%–)Gu7S%(‡'#6"2Hˆ")|////:q9!.ƒ¯1"0q0+‚&#•%x5/f7%‹F')µC$•'2 “04ei$\8hC*m=&J9#"C7:fw"5F )6F(2EA,)O•.$M(,$§"6X#)9“+(<#%(”+?p/*3­G/,V($5x'/N($,j0<)"!(W6!c5&c-''n/)'9-,+T>#-j>*UJ-+C7&IJ&"NF!'$P/#4U/&=I,%1S4'\3e%-j,-Y#((?*)Q-%"^:!%:,* +6;;/&>)"#+A+#=L"@[:,9l+.I!+D3O!-N **n0'*kE'HH/ h8" }.!+[9&._&1U /_c+*;,E( /H/F!%m88 (,88t$%\"7M'#.j O:@w,%*?7(L,2N=*4`8-'C#4?R0 %#))ƒ/%0m+9}*$)/=iI,)b-(8D4'L+&%>56%X<1/?G)55&8H7+#?U-.=O9+=G/+LF+23k/.?"+@[/-0f)!5|98,n)*%P!6&m7'"~+)i2.,zJ .vG(WB()=!!0[<)8R0(/;7-4BKo(-@1-/ 73!#Q%;&8'7N"(@ :5)@&A/+3e(##?"!%4%)6=$:7 0/##6##"44.b(#c,$*q"4 p%k. …0 jYy.")O N aM6< 57508K7Vq#.4J<=$..39GB&l;)[-+"(#&%10I)< </#6$'/E0#-*-(0*4'++.6 ( #%,-!%""4)$!(',H& *(4- H#- +D+6/423%!1'/6&&3 "K6.2+ '"#!."?'0-3 #J1*'," +7"7!''&)0&)"<2!'5.11"3, ,508 &35!;"++7%1'9$;#+8,%0'2#&3/ $%=999)=+= 0< 24)%'(%!%(+$!4!#016!/&5,'' /54'1..;.<#;2#.%C",&H+,*';&#(L6)/"#3014+0+)= .'2&'=.!D /-.3%$*&@()-+4&/2+$05)"0%>$&2&0"(*#!;!13-!4 %=.)=%87+<)#+1($,#*H2$'!.5..771/&(9()!!!HH"1B&'3=(?N*0=5$ -6+"!^/+o$-.J%06U!={.5*@> 3]"&=e3)+S%(8%-%1,+$$(c+&7:1=+$,,&!f+ 2,=>*,!$/L7*%1*,=F+1+)/*.E+( -0"(T)55])&#-#70*8&,b=+"/!$L.!;-$#'k+'?:#2(-*)&,4#Y,()/!%A(31*!%3$1/%,O5&$1'%'=62:'#80-(+:6/./< B0.$&,9R3;+39$V8'4,*O'&*L$'77")%3%'-}0)8.i)S$#G8"56'W4.#<$C-4H'$$#/$%557 ?> $=:/<& +%**#+ <:+#Jf!-%% ,S'",) 5m,) '!8w+'%26,dT)&=Z L*?!0/RB21-8C)!'4% K?%+L*#'9636-25*6I0#6**0"7)26456-&+/+)",'<$%/4)!4.0'*:)4.(:,LF1 ~$9? H,<:,)9#1)@.,%6$&*506?;3$4+<4 +3#$' #4',#/'8*":7!/1.( 911/=-!0>#>#)6)W +8-#-00*&: &;*:!28,C"0*B'4B%;'>8%1,% &$1(/'56;("4.#3,4F8*G* .:%/+)#72>#')@ )3+ 9/@*#>. A$7'/ 44#&&&"441;#7&(&5",;-*=1&?2F<D%=58!,3;%&4;=?"D,)35)+"B$!.2-/#>1..;(5"% .'9!96,))&9))9'@ K*236?0.05<C.,?'B,&*%+. '!$03:7>&34?#8 2/:**+J ,9#)E +!K"98%90-,!'!R;9.6813&#?/5.,#: */(($)4&+1L5.,4/9*(+;'*;-'/&N%1C,'%H5'E91#B# .%%#I%&:,%,3"3A#3+4"4.91: +!+-2"5*$EB L,4G*,S800@I@9FNVC0&%90(},&E?k&#3&+(¤/0"L&'‘(.›H-)‡)7U%$9w5 -3$+Z:& tE$*td*4A\(j‘8Wz*8µ(+3š-)E5¤#4'?¾#O²-*j2.Þ3¡ ºW*˜z'%‘c-"¶='&¼…!*¨r/ÃWœ“4\·8#mÆ “a0v–&8œ)OÊ/ c—5 PÌ&GË9H²%'>#.(°&80‡(2Zª&.?›C<¨'"9,,"º!? §"B!«&3“2*$Ÿ"(&¦.¥;-‡9'¥4)1Ž*$•''’#/)9+‡p# G,*)‡o-.-)"af$EE)dy-.K:7db14DJ#1¡1+cSŠ((=B~3T#1P¨"&$,6a&,'J+'/G$ .c+';L4h6-/V&.-Z69$M-#K''">52;J800M*+LS;+95$)97$.PB#'5b*"O%-F4*';a&']/6‰8A&/,J%%%J<(8]2#(T5'+H<)1I`7>?5GM(FQ36=I)',?*(-H,b/)&\-0*Y#20d2H(M$ &E7'*L0#T-3 j58.cB%-CG$,]0/Ta .GZ5.6l0/9P,2Gf31z00r0>Q,!8y,$Fv376Q*)kA(D‘:84r2&$X$1)D /0U&$D#E.*v[ gP"$_M%f;-17?<,7HZ@$+[k&Sm0-6D$.E,5,v4%7f.+t=v$gR's/+%#=‰@15j*(9ZA$\/@O0A0(1\>-8c=15A@+++G)$E;-7;a2(?P3*7P3+ZT+03a4!+=(#3^1'!G'+C4'3R'.Y!+2t;.†=61„<#v<&)kT 'AC&-]0..]>&7Y:/+=H;5KSX/1>#-(R5",*)D $8^(""Y.7%'I *63U1H5,I)?/#50$&.!2+#64*,:6 8#C(Y(@$%)O,'y98(D -b"bdZ&hS b =^K8E9-&/1$(0eHF@8,EZNO+:A'=dQ4R+7H+83>Nvb*O;C*$'!l,\3X +EIEGj9W +?+E%2&3"+"`:(@3a +7I$'*,+0A"C\< 5(+!0)99QM<-$)'C.'4 #2*$0+16?$$B 2:$-/+)&,,"%- +$*- 54*( 3B<;4,+8"-.91'&3S>'+ ;',6 , +5,&)0!",66,'6,$-&:)/*#!2$,/-0*!.7).)8-(/*,5@?+$)60(#)"3)$;(7 +0 (8)#("8 ,1-+$%!!/ '0 .&'/( 0"0042%$'+'&$ +0!+/791"#*4$%,/+("2+*2-E#9-&A"(4)*!(2 6 !1(6#+=,$'.,4"$0-3-I`&";512"#A3,&7-04())0 %!/!*(-#04/';3%!,+-)6< -'/% /*",,""E,''7-(#'-#/,,0 8"V 1/5 K?2(S4.6.GI- -¨,!E77˜/%S’8&’ 8(1x'Å=#5š#$,§,%+¹)\S%†v3µH*¤./²_-%¡l &‡D%$S–+BÃ5W¢#-:?+4<Ñ,,&©,%FŒ$&9.K·"7ŽBR¯&,,¦/22 #8B5Qg'$(­&-2y)?©*2%º($-H%,®-:d-V#m ."¨'n."g-65\"&\!J)'$&"(-O2"4N-.)E&):3=".'%'*7K**'>2 <@40N:-(~'/%K+#Z36,[*(0T/#J,.'Z#8q"- J)W Nb$@','P,(''0"|C54.!3="*'*-?\.".6/)==.7-!*<8!*,'1OZ*:+/ /z%!9;0P"*,/) 2c#&,>-0p82-@2&c03/:58%8:%7;9-;,3=L&01%3f;1/"($Fi&&A+!/9m+&4<-D%':4('%+&*2#=‡#3+H')A,#2J—4"-;6)3>8!!1&. +'**;9,(A|",3+%18,:*<,2//,F!//0.76,(67,&//+*)V(-83,/N01$@0&1,84K#:4#((S3):=('+43);+/(AH$!80,,7@=?«WAW!(%I+&%l%5X(P%m't+d$$3g(#R-+S U / @2I7-Y%+#H!+4o%#_-U'(o14K2C#6E'@1j 4 Q0>;V*P# 1)>3Ekj6Ne7)&>E9%S.:0%i$CRM'G.($(S:~ =N7UC8qU7jFJ&17m;jV +F$7(>-(+#PF T 0 +2(HQ5G,N#6407!6-@21B) .&.>&C#&S*'%7+"!)#; 9'/ -"/!*)*%15$:/1#/?&4$$9$(/(+%',!4,!7+75*"6*&@"3*/!0$%-7 10$";=;1$ '-%14&$"+-**(6!+#)&)780/$6$.-%53$; 0#*B#4#B$+"=*'/!< 4(:.8'$0#7,$$(50&:$& ,(+;#$*6+,2$,=+(;-756&4:'1>3!'<##,8*$&: 28#?,+)4)&3)!2 %V"#/0A50$5"9!!-9;80<.%##L#8>1;%8*!>@,7<1#10=3?):4$,-8 822&J&>&:21-&%./%+/8$/+4&"-5A>#.(1%!";41+/5%G%;2-04/'.'* 9&'(!+9!8&='9>'?9 8 ;(#)$',' +$G4!#0$(,9:&)'>“++„%$3¿1#!¦'/  9Á*.¥)*&¢75%²'' +!/‡%#)Ú/.+¨G/'ˆh2+…c+Õ.$¥‰*)Šx5}\)!…€"1* Q½+-n{(-„½/:«%8½3G£+-8Î&;£!<¥$W—3?¾%#%q *P"?5±(/+²((Ÿ,§/'4¥#4©*#0¹''/¤2 &5”T­”G}?³E"-‰K#/cq,#^J"&ƒ1&FA!_x0%.>'V‰%>M'B–.(;1gŸ+r*)Ä!.5¸%3,©()¹#')¸1&0{$)¤?(#Œ),l"(h.5V4&0D#& K!#82*'U% )<(&{1=1(%/8-&H54'8=**FC-05[-(RX'&d/*_.%(I#Nd$./[-(4V+47`-!X5,1b1%4`1-.J<(&2>/ :M(&.@*!8T.(@" .=&6DN00%g>)n%2$Q9!w 1+R5! b708%<‘=3#u*0 W>!+L/#S$//B&'J8$dY+8|D/(‡@(4y@./BF $IL$TG!)>3#'ES/CH,(BOk2)(-$8 06&F)"P&= B<-+SC1<2-!!=">!0-*):7'7"4-'#".#*& ?$+(%.1+)( +fMA@C"Z1A#8P##;%t+Z @;"XD%=J7Eu??5AG8"A27)YM1:g30h+\O(-jv MM$3„.>i&9ƒF7i @s4VLS0"1/?CJ,F78QC&9#2&@&:)76)7"8 &E2&*$)'* -(3(4.+22 <3/(:&%-+911=D*#1&&*4<$00+3 **'-( ",,&13%/E8,621#N-+4.-#5>'O 8#E +.!.M%*D* 8(#% 1,0"2AA.D!4!/.0 )''+C6!4,)%0(3%A:$,#8/"2'!-+ %"6!#%F!:'47,K#2KA11>6,%@--@9"(54(&$1(.1#3,- .*%&'"*)*,,!.-+,&3%/$) -"'.8+')&3*16*&(!''.8+9.#./13&"A<)/*-:- 5%9/(9E45;)<F22#911E2;(8@:/;=?""15!0#*)%">/(8>748Hƒ'S$0H*,,4 +#8/(0,-X +20>))o%3.9'2,)u!%"T4/!@+35D*14E20#)&(",5&BI3;f+-/œ$If5Pp-,˜()˜%5®-!¡!1®2*$Ã&#+®P*vS$Oa%£8'1›J!+AO7OL5"xH+D„ -‘>]'!p[3G¹5I–'6$)P— &:œ1Qµ%,`/O±-."ž*0¡#"G”-3"¯) 0³.0()!'1"z#.n0/6v+&|(/˜61L!/0#7/~#.K/(7$8'*'+&B)#&?1/?4#(8,1'+*,:"5A#L!,E=$/h'"N&2(D * C')8W'4+M8!S,5o2#'e.t'&W*3o $)$&#,k/*#34%9, '4#KZ#$7)-;E%),%0&>3((/0'*2&4B@5&='%=S,/7+!..A<,0510St5;Y0/'5*/nPII!(-(/Jy0=C)+@n.C'_2;!,P0)3!?n2+A!5!5202(&.D[P/'59/(?:8*6&)8QNA4)='%?<)D3**+@69(F)(6$*GA58/'L01,/,7:9,.'9)85*/903)5;49J9B5!N5=7-!#!(,$3++-3##>8../53,8†a/`$!s.e&\ $0\0I%Jd82 d(S*a0,06!,,'27)/$I!O##8(+?!^)!V%7*W5T"!SA8 0 B?%>B=U855,&+%7>2%%,3 7*9C!&102!Q:$2>+*%'0-96#631*B,8)E8"/--".&,%/)))4A,3:9202;‡”.+|"26„8$„&%)Š1'Œ0ˆ#.Œ#'˜%-r.)’B$ ’D,žI(&cn,ZK(YQ*81Y(+3_%54^27d#*¯%'²10(š9.¼.)½+&&·6!2‡0~)(‹.!$·<)¹m%)K\+,‹l.Œ2'#Ž„“‚}_(&w„2%Aª/<ˆ&*MtF„$!=±#.¨G¥(CµM·'7‰&&M¼2JÁ*$7´06\.0ª&&  +*0À$4›509®2'-¥&$*¿(+!¹0/„)-$ˆ**µ ! +fB!)‘L%%5!&uD)'Dl%#m_+m@$AbU±( ;a2 1d4=¢#=O!,Vˆ"#9›0+¡!"­&5 ,%ª"”$/!`N1µ'2d+"&,'-[)#&~.2*4%1Y/)+E&)#2-2$a&6R$|@$RO1I9)+K11'C6-03.*+8`33c4%4l<%%<1&%*5,%7K/..<*7/E-$6Q()%+*3F:),Q# .T-L-'\2+!S'#(C--.<$#'C9$!ER03I=%-UW/8{24Q!.6\)./‹$""4X'##j%-m5 ‡ '/b0,+>&!> -O)17b5- B-&#b2"z%%fK($73.1:(83I,4)HS#9Kl6)RV'HX%#5L461+7E6!2P#Am6*2y 5H#'€"*h*!#L!)Y#)uA!"^M,'‘/(A)R,'fAE8]=-8LWA+-2,J7+ UA4+AQ:->Q<+=5"-.} EV>@V9(=X)(&™#:Ÿ((6d;:771(&,0$80-:#8:,-.5>&..,2-)",'0(#/5!4"8V"%&N)(J)<"< <+I!H F5&: G*21K)/LOB.B&P4KM4/#TI.J;aH:#Id7x6;h0('N7E I+>ˆI•$+0*;&‚:/ƒ/A$l+@} AW:(D&.%'Hr+=.;&6o 6'?" #L=Z +,(E#S> R!99.)M"0% 4G(2#T $H"!-B&5.01#H.C*.3#+1+a0'.*4%_'51%@%U` K'(S%(7#L*A=3"7;W#%6"*I$" !#2#$/!1'7(-&%7%0(06/&)+,C(,"4((#)))**< G(%91!=/;">$2&:$42#37 ?!&4"#5+%#&!,<,9#'+'.9*$$4&*,&'1C!8,/(L 3 !O$/&.*3(-$3,*$44,4/).%++, 12 <5!!N8#<0/M,9.'B%;.=,%F"&D-''.5":8$@+), ,'AB6#81/(*0 (,(-4*CM30J)$2/.0'$*,!,4J,(#(* *'&%2)0B))$"4=$?*!#*.4:2#)#*,> !(4&1$:2(&9+)?$-&>1$4,(+@)"(/48"#9+8(!#%1?2%*4G-.2C+4"0&+1#'4)+9/()$,(5;635Ax'1(6‚64]#$7+6/&?)#,+%)G: Eƒ(D4+)#2x)2¡)%Q‹)!0·4,´)&5§&V,%—<#!².&Ê#! l&fR$fK)h+(aa)8X'bY 9ˆ &0¨3#D~+#dk2#2Ÿ((.4š!(!“$6(K•)`&¹3o*0~&#;‘ 6¥:-5«,:¥)&™>( q$.’$3&0 2%51"x*& L'&.l6/N0!T.1D'02-&'/$ ’8$&--)0e-:7&+5•/4R-Qž-'9(2&.ž&,_/,H#*U!#d-,o)$!L.@„6'(L-2Z$"%E-#J0+F7-#K$()a.20#0#/*#('.OH+*(&,1.-.#&!GR$3*"!(10('-$#Z%,$&%,)>43+#8#3N!77y90>* *86P& +("&.9.&3]*FT)5L'-V$>1J#*%s.'6P-1+2();*0%!7A/&1$3%!,+&/+=&%%4*'(%(1C0 &@0.%#b0(7%%+h00&'!$m00$C)!,X!4+9" ,S7"> (L,'+*+0y9"Q*-/!5/+-'3$#P5*5"E%&/&;5.$/5-2-#-'.%G!32!+<$72 +<P!A'GGK:$;'Q,Z*lWj!5H5(-A@-=L:&'3(F"%&00S1T )'J$:J6] A%_?!c/M.V +7b(E3]#34M'DeAG+7-=G J<-MHZO!VH+Q9(G <?DA D#L9"N&1"S!E ,"!18%;+)*J&<F$)5"%G!."$1,&1)(2(-W4 $6'[+6$5+&b>(*!4?$&7"4!'7))1 7)"&"(/."00< <&"E41/##*0.4(4#56')-7$' *.,,-!*4+'&92'( #"E&+!;#(*#9.,@F )9%2H,"%2,21#1-.%-+C$#/'(7*";$;"3(-&$3' +L';0 !60)(C#*+(&0-)' (!/*90,$#)&*)2#/,66>&7132&##F ('1%G*.&:2,!; .&<4&$0.*I'(;5!2-4(,' ,.'7/6.#))4 **,+3#,)*>1!/.$1& 38%3#391?"%2)"?-0$&/H7)22-'90,%4#&'7'2+#)'):0,$,<.2"-43:&#'2/)'7# 7&40/,70+02<"5&)-+'(,"1.650,5D -83 -)@& :%#0&)##75A*9**'<(,-A$@9)'É+'+¹"0"¢--/´),-0 ž.%™&-2{?0“<,(–1$’/#+s?(›1(®(&%2h(&dc WH!(Vd&'Lx#Kt*O…'2”3@”%)Fg'*L“#6ž.,”+™#/*¤/+6œ/*,²&2=³$:'™:;¬0/"–2&C*$*‡@%q9Q0&0[@("H&%[&%/m6(188&2M#>0,?5(,<;-&@Q2BG+)-\-!&I!,*9#%%b;$%p+&3q9$)U!&6)*b2/Q3 !oF.*/T& 0Q2!,H'#1]23R, ;t)$L"".{#9,u/38n<#7p53+[5-!=,"+F*,)271[O?'1%+4/# ,9,79_13N#1\##0e'(7_+%)u-*a)%2i"#4]'"p*!(XF-7z)(^3%2M%(4U65*Œ%!(sF)%I<0,L7('N '?H&3E]'(OH//,Bp/.118#?i3&!q+3›+$.N *;h*!s>15f-%,|2)(Z. *fA)82/26+1LG+$=6([@8c[.:QP%,=V5$KG'34{1Ni!<6R&*GW5,)­:'w!#i,>1+t)=)B6,x))'^#(#„S8&ˆL$gB1&$L.KA08_>20HA5 93+"QO59b|Q.&"6#+)M(;4#A#2@%< M 38 2)'#,$*7/>"#)I$/,'/0'/1!"+ ,#18*5!33-#8W6 6-1 X**Q.$U-+Z O 8.6@&> B"*"R$RZ$?&2 @# b6@J$XV<(?9B[&K")x&9F*#5˜=b/.™!-<{!&$Ÿ!22542l7@ŒH$¯7&O" V"16r*&)v;-A0*[A*I <,\8:3C#= 97!Z-.P 8&2./4M2 b&-"V+0:!=#50C7'5@8"A"&+&>3E"K1S*=O0N%NDb(;>g!)5H%+d) 5f(.+_$&hf 1'3'h(*)E&266-#6'3'B+ 12+#%@ +23#!$;$$..-$"))&*69%$;0/"-00'.=(*K&#6 + P+.A /&#Y(;' _=++&80+C)80C#*3")9L.-/$$TV"(?"!>#("I!+);!,%8###$)<15$$(.7+#'%+)71%%8&-;!/24.2 2 E+S"#$E$( P!#7!AJ91"%O+$4*/U21%S!F++*?)%(I/5$<4#+@?#"1--?L>;./E!'%C'>8,%0@%:=.4(] #2H!?&/4F(P#'$E'*M<'8/7#K,%L-($2%(@1,4%1#+1&)G&0&?-'07 $+;5)*&#-,+/&G$39-$1O) ?3!1;"4*,:. R21$L+%-,/%R<E[2(% 7A30A6"#="0"2**$#73.+1BS,/R3"1©' ©$0¦&)/¶.g,!­20,&“O)u$0K&%H**j-,5=',4;,;<' 03#*:!2,š%).¦;#:‘5,0©&3h/¶(/&¥58¹8*&§)&Ä<*Ê9,‘u&C~4uG 5›Q#\P->y#qH,Kž4 5X7ƒ+jq!$Œ)6%)-~(<©‰3*/a/%‡.>Â4ž($—"&I£*7¶1)%¥%1©2;%®*)4±#: -2¨8/€H$M2$ C 6k6&A/#*›H1f' †m()%9Q)*N1/-0.&*57 3B?+$A&'&J 0,<'/4W2+ l6%b(#‡0 ^<%&`2%)o/ 4q2+)JQ&*i /F$""D 1,+&/s/.h'*c+'i/!7z5!*b-$+f%',`5 [)&#A?3!M0P<&I2.(:J/4]++-&'T(; %"'"[7.0/o8*5+0#X5%E*%6+-%6'"!‰.QI2;8*(P<.=;+'/73/;?1-2<77((+7C?H.%'U4=„1)Q(3I, -y(=Z6"5X"!/_?0+|K+)?$5l*+H"")PD,-)P]&6!,029"@2+-=T,*-53%Xf*.P4(+*N"-&7C6B!-?!+(E0 I.“&="2-!³#??&&}B@>"#&Z 8"F,/%+50()&45+\7"NF+I776LM>N”<$'+/.%1':"7<+!0'=''(F37*$;&%%8&6,'(0!&T"/$<;.'.8$<)0!?/?/!(4;% +<?J,!E *>0+'<;&@%TO9d+34&M= SC@2(**4;090F&,2( /3+%'$"P)E17O)?:))S7S7[!C™'a!0M 4c"6‡?/m#L-X),$QY&-#P60R91Z-3_ 4D,@9"G#11&5#>'K#/'5M!/$.4J--,(0=(/2/.W! %'28#!#+> 2"2#2-&C)*89@(?*I(/ B292,'/9)"0',#2$!!9 +J2) 9#:,)3/",%.*#-,$6'#$1*.)31(0),'''&.3--7-#()8%/-9!6,7.907-O+&A"1)@$E6C* &02**@*&/!%+$#*1R&.96!(A(#(I'%S'.701%J+#)D'&5-00?1-,I-""2'8+*5$/9N(,)&1+C2)(.)P --8.L!3()B%3")(-A,#!S%-,/ 6%?%'&<*3 88/<*-'6%1%>!5&3.34,%*.((4-/,#":4$/.&)'$&M 22X,0&<3%6@"(63B4>3K +#S,71;10H&%$>"/0';4()24*'*&,20.09&-!"7*) )79+#(.(,*D4+$*5+;#%+35)&K 07 .+ <6B+6'@ 4%9"%B.4G0/,<+&F,%$%)%!/)1%#$9(B*3'722 .16097.<”œ3$3 2*])t140£(¤/!^!./H31'¦&$)¦)"•C0…u##eu"x`.m…*^v2,8s)!4Ÿ3"Å.%%•').—.2&›5$8ÏH$ª$80¦4'ªE#¬2$+’E#?a/„|'z?!~p$NW1'xs3l`(+•It'#S{%]+;«'‹'+K‡8!0J›!KZ"+2œ)/À:?}%2:©17™7'²- '5±&'*™%*#00Ž6+’9%%{*!¬,38x)&&,.¤7:'kn$+B:!,‹>6 l_,@“')E&*c| >š4-P‰$3[(-2š)5•$ ~ 7ˆ,0,¡':'›6/Ÿ$ ;z#8"€9.¡,,_)!5¥+10j$,[#f#&(G>!j1()1V;,#-0@V&<)44:.+=@3249,'?I4$P-*%B$7>$$_1")Z90+w2"'P7'T5!3^5)Œ*(3G3Gc.FZ#2I,27<&(,L6)?t#( G.)3i/#%X$/Z"-\,3Z %"6*)C7/'v&)0Y.$!€ &+y)2~%2]48,X-&>..&€'*4W,%T00;T<079(/TO-$Z?+\B=oX,09O27W5(R=F&^('CT9HB,0=X5. +&¡:.;k!/¢30{(7„4(*W-2_M%R-"u$+0UB(&4@#/LC$Q?+*T@% D21C<6:I`b9#6*;; *-2#!?F@I6"B H!=6=.)&# :#1 O@003).)<&+:1C06#8 &("3 L(3nIJ0<e+\- W6]@ f:Y19o$G6 A6(3;&-QL7'#BaC45!=#(ZB(*J$G'Ž4Fz#/XS 55MB7“#;b#+Cc!?#9D!.B}$DM5/ 9š/'V-!t%0d9† @{ 1_4"Z+*~%6A0l)1S*i!1W1.T#S'7 jICC#/:;'O!7"B1-!=L 2'*00;2%V%6G3+@$5`, a cDU'(*x/m1!l)(n!#D 3+<$E 020.>/S$2A*&(-%,/% +"-#8$81%.$$8(3(@ -)C$(15,:6/7&8M 1<$).O"1!60''2093('T)%5$).:+)-%M$)I $6%2(T 6I' !?!1,G).B$7$#.#.6<(-@+)S&2$B5)- E-=$2(1(*'C%'G.&E-8"/$?#0"E!1!G&$'%/$$;))<-!I#,&H--)$'(W%/4274.C1.'; 1*B5 7&')+*-7BB:28:3/?"-4,.-05.+&I(.!H1">%+*K&+G--B#%G+."I&+:6.H&L5-&G.,7Q$4-:20?:-755-W""21E#"8H'--,+5=./&5?-)A5*K-H3B0),&( 6n*1'6I1+K#"'>%&&%"$L+>'0(D*-$3.7"*,9-?*;-!5O¡=7*!Œ3.*2"’,¥20*)¨.$ ¡,( ƒ?-L0%3k1'*P3 (y@)fn%/C:mm$0D1$z(,7|#(£+'7¢91,¶-)% 52À2)?§2*(¹4 4{>&M-¦$)!›/#+‘Y--YY*\X&¦D#RX(bˆ ho&(5‘(1¡9>k&!Ht,˜6"#¡,.*—2LŸ00™"H¥4+D†)œ2-¬+)"".ƒ'1’&1"l#86).!%((œ9 ˜5)(u3&.s13-i2!…1 /(…;1q,,•3)Z^!?T!*hO 0uA%.&„#-h#Xƒ"2|"&8…5 G%)@@&!3%#y,2¢$'O2S>%J :<-h2%!E*&L+-!L'%^*!'M)+%C+%B&"0; &6$A(/G3 )0@""$,#(<)!*@R'*7O)))B.+-K*72.&&c. )G2&'i).k-/2H0+T+! M5%-Z#("4;$34*!,>1,G()Y.*@00, ,=)&-J%')V/."j0* O'(7$0G,(&]+)/N;%+--"@- +*5%=\8!$T+B"(4(*#.k6),"!2G,'/$.+V%*9 )6`%&("%IC)&&c<$-"#* @%!6b,D*=G"$'5+20,:Z7HH#48))1-*';K)%!4.**4,-QS(*=^1/3_0'1K*0O9%&N4%r2)6c#'c<&)VB$/U/2^2&>R8../$'@I-"3,!8LV1.:%$65(+&1-4)X!"#4'+I(7'',u#+% :*h$1) 3,~(.)9$Ix)8/1p/$*1,-/G7&@#j*'86.-/G[8!"%4 SP(L6+1<,4@H0Fi34/60F;&3- V"A 2@>9L $C%8;,.(F"+A''U*-1&$?=#O65A,*+2.7(1?%E#O+>Q@P%LM+DX1H(5E*@-6*QOF[ 1Y8/3=@8C"/2I54*+0%4I&!D2()b#7^1*:)#?P)0p$5~#?m.2.[('z3M'_&Iv+2"f1Š#7'0!I; +V'*@&O%:T";%L +0W-'A8-J"&K8H0P4L+O-1$7;+,8$+9"-N*^/1G'%&A&_&&h@&K./2.'i!G!'t($ 0+/+,;)"+4,!&'%"-*#$5.4 (&C%..>3)"-2%&=(4!=*/)")+3')-##5.".%9+& -'(&+$EA( :))/.-%?#2*80"07.'#(@#/@-,(32#6E)).,-962(.1 +&=&/"<9!!.)1N)%Y0'() J*934%B$%..,)***300#=,1)>P)"6+'7),-$*N.12&8$,#/+.>$.". .&O%0%# $ ,6'1"M*%-=$&>/ T'.3+:/(%+!%63<-=<-)2)''#('.2.#""!26),! 7.&X)$ .*2+=&,1J.)N&/H I(;;,27():+88#0("8"7$!...,)@/+,<&.2+14/4G5.7<9!'2A'2;'0!,# 3*J&)S( (/!@#?7F-+06%##79$(14 +F% ,.'5.>'/*)8.'*)$+1(=-3=E+C©‹$26Ÿ&¯, ž*/§,(Ä7!"œ *º94¢2,"‹83(¥-=(£©C*lk (-]&|=!%X},%<`%5|/-n+3§+1%)(‹77Å<+¡ 0'´87 /0¨2(Ÿ.8(°$(ƒ9$l_'‹])‘:(4uz+}R#i\+‰˜ -28„!(ydgŒ .£&(º2KŽ&.?º#;«0J„&%K†)*5£-!~?š,A~$)?’#8;½1@3¤/9'¤*;{)'¤(41£,,$‘370jC$-•+ k;6&55&%ƒ=-8H.S[5%p0( pf$/^.4DZ'?s%+1†!!2~7@P'G|&)._/([()‚,)-]%'!T!%H 'i8-#£-E‡6#&‚ ; 4›=&3_+.3b+/*2')#@!L&((„=&-4;,7R)E5*8B.B;$IZ.(>E(.“3#>1/!1;.(0S1"4s8,0c;&6ƒ+($775}65+7-0‡E'!:#Dh02C)":q( 3L2)o#'7m' 8}8 +E$))l6.^#"#0 )'82 3R1*(7@(E8J-&F<.+#G%J&,3 $%S(*'<$+1M%9f)&.O )-j- *T##D+4*6$ !I'T0,#h))-k2"i,5,r6,3*$-bR+)rE3%6@$;.)58*#/.!!(P-!-a,("f*.D0"E*+.-(503;/3/:(-*J/0+##>$DO%8&\#4U6=*7-I9"=N$CE!DM +?","u6R"#=<4[@&q#1AT$1^G,0N=*(`j>=„)m/+UK Mh){!A +/^+"‘**Š6=p>x70‹Gr 0¥6!@00h6-k+) R *Z1?(O&.S")~&-%?'%+3+%^$@7I1Q$.Z6*;.7=61#:12HE)(EH2/F&.*G&w#':Q6-5(*T6-B /"a95)3.4* W $/S"AT7_)W&}.-/< )9*/&.0>$. >%k6//#))%6F' 4(%$H':2%)35E "7A!1V%*&*-!&,=#TR_,//+! b1-)6j:"-#8#'7V $:6&;Ot'0,+^*,8.%q594b&#&:2!,)*I+("'((=5%5#%)&-3!4,#094.>1&6)7,$/3) 1$4#F&%*H+>&79 (#''H)*P"p$,-Q!$#+&|6>21"1%$L.1<.)G"&,)9/ ':7&=3(+8<862G&0>5-; 3%+$:$;! /-'5,$..=*8N1] * C% PR*;<12%.(*$U#M/%07 %6(; )9#)27982*)06$16U1A>*$<'*T652,(?$ %e8 .Z0%".f/*(( >;#C,06W;&;::7-$0C!#5?"7BF<(0$?X4$_&CE&.1;7b)'$A("4d(l<#6#%&8$#&N4# .'#A6O@+LE.015.6LH' .-,%F 4KD1;$,C1bJ7.>97H*4"F%*AY1'\?#m&,;#=3Z)D&g?&‰/HL-2*v@\0 d%3#Q4"˜S”Cq)L3 D?n)E"e"OD*@>%=)D&/%A9!@$%*$$ +=C#N-$@2+B@ /H#,3 @B0X"650N%K/0)<" I/T 93-#< It* *C K+6/% . @%&=9<.3+(*$#/6..2/"9,3),.+0%>$$2"!72'&(-''#!(")+#"+-001#9#? 4!+&/5*8 &0$3=-2$$'> 3$)7,)5"*"%,.5)(N2*$"3!+5"0/3-(@ $ &&;& 5(!"5$%/)&6&-!-;#*)2%:!",E9%G***'+#? :)+**(A#3.A%I!19'2$:)'.3",& G$1#4 $9;!,96-0*,#,&04+-/)='2&#7*(#'01&##8,2"E.$5%))539'.4?&H 6'5-- .&(+57*!!54"3%3*6-=2%9;+$+$$($%1!3C(,7+,%-,'1*,+!".!+9; *:4!4..1?$!+O9-,":J*:(+-8$(0+"*(),(.&:"#.%.(-,2(2$@«§00+²0"$½3Å)R½4¡  ·+%Ô246À,33¿:%8¶)«0-1šRmh(2`)&xW)+N~1>k,O•+0D7(!À+,µ,5€%:Ç92±+ Å:'&¾:!(Â:#&¶>)/É-$ X(["&h_9³89jm8~€+3sn&Z‹$E¦(Fª5rx(h³ 0§/7Â%!UŒ)2®**""0;…&Sš?¯':,¯ <©)8 308­"/,Ù'7$¹3+1¬14$'8°)$/!2£<7>p;"4˜)(.iD,'eC$48 ²N1'Mj'+IK(]@ ,…ˆ (;x!.Hk,(@€!@¤,$N…5)Lz&(Lo:œ1-&;1 .4£6&t#!-š42®-7'­(+%ª"&$Ÿ%!/u'3,š56t=.)\'&-M;' -)7T '#B5$:Q* JZ &p\'*K<03Ns7/CE+MY/2s5/{-076T*(6Q*4 ‰H$+G5&lM'%I7q?#3eE-"M€+(H[-$Qy4%ET+*,l8 )@&:€&2Z3(v*c'5Z) &J?2&;.&*NB=%,?="WS"$X9&5^Q7/9t2#=n!(7@"P)m1*-G/h++)l8 6m3'5f2%&v*:1n*1(m*(%O3)%‡@ =4!7†?)*f2,,@Š*@.-+rF8(M2%Sw! 3/$!Rp)&FR0V¥39B1#S‚25Fx8& 2KK)":‡"4_801”3 ,z759I(*[K3W2%#VJ,%SF('X?-B-.4HT7VJ7D-"F@&3Qc+$QZ>1730&4Q$/fd!.Bd596b88;r81A,7m$"4Š)!/}.%0m;&,“+#:w8! @! jF$2fR $AA+,MF)?-#(CF+%90Et"-y(<+„-MA4< G&g A € -M{$9!¨6+Œ(,/”'j$'Ÿ @<—'*D‰$''™0!p <~Fl%6h/@c%5h,%;7O79#H,*P(C@)%%D5 !~E1$=$",B(R;'!.,"5*)L7D#q)&J*"*]!"/e$+Z%i ''_2h(])*J) r("I3&i,!(m w(2&e?%a8 :*.B,!'=')1)(.6.4>%(2C8-1,'Ls(F!3:'G.%e!/ !+8*$*'%I+/6 #*M2C"0^7)M/)$c'963q%")0-€ 5'F.- r$ +3.1 b,7)); #%:!.-&9&.(.5+9"/13,7<2#R$*8%(5:G 9=))=9+:!),V-SO/&J*/P./a,U%.($\7/(?(1c$D!#C_#4D%%X66#;)%2Kx+3))=!3Y*!A#&=m2818 >w0$2)˜#/61l',@.(&”#%T#4UF&C0!)E -((A"+B$/-( $%3:;,"0:1(4663%B+5F"1('8#?*',:'45T"4/I3*@&--F2(7$AF +P4%E&)a4F7(124#A&(1&410.$)*87$+-$(092<%=Rw‡0kÜ)#5×*OÊO¨B»%Ë 3Ç)7Ç4À9Ü,#ª/!'‡l5n#yˆ[G$$9ˆX§4%Bk%&&½+£&,¯0&Nª.!·1, Á--"ž(©6 ¼ #(& Ë#†c+“j%'™^&Ð\)$—n*{—*a3C”'!>šT“!9TC(?Ñ"O»:¤7¬+%/™%$?Å3Qc+:*°&)'´,%& %X¬ "&‘$$Œ!((›338ªA=·68„""9š-$ÊW"p7#‹> ,¨2#) *%C$•':ww- 1)(x;*J<*@7&7B :% 1*7!,B +@>&+L2 (##R%MM24&Z'#5],(d.$ [,)\92f!-(˜(!;CJ.1/T#(/O(L@.&>h,)9~-4M#)^9'g!)^/35,"''&2e@")T:))R7*5Z7!7b:'76,+:O)3@%-1'2>X&,8U0E8{.&Qj*/31.U((&=#*C1:y7<-]A9#p14v#41a)0$V/(7:M9/_J')I."3€509/++\J2QA*&8N&?A)7X+6O>(:k-;c> +h3AD*-!/Et&(,S;(/ZC*&W))2x-*L')YD'"bP.n@ AQQ3!Fd) OJ( …E (Hq/)=$'),+6Xx.B&%@-O/"1-&'j6")u1*4G#(8t,)'#/‹<+w&%:Ž-#9^*(-Er<&$ZM Da#4f4-e>#98<&.C55.POIKkTB=9I2‹(O-f/MDz&QCs)PD“1Q.“"G!£0D›=!:‰B%k<'3E@+3?W810B1!='.@%*O7MUX)‚(+/^9m =AŠ!JU@ q'EZH†RE]oDe?-„G5%bYK"aZ22bT2)2_16z.@p@ 4h0H@‘ 6=7/•47;“!25y$>‚'.d4,¹A7#•A;t8>‚9]It?&m7_&7fO!V7Z:L$00')Q!D*j8G25218-4M 01++(5%U6",9/<>#? (!Q2.R#-l(+9##†3j&9f#3)H*4-&B'&D(3!L8!8**!3)N6%?'86,#$2+>(4$'B -"1-)20!@8%"5& %7E"1%0,1#!2)&)-0;53G 0P.!;64"%#@(.S!W( (;(?2 ':/&H!B6'R;;3EO2!D ,Q! /"A4,":('"9.1)7*-/:*A68'-1&?!#"C2,77#'>!!M1-M!%3S00+:/9S-.& '&<;%^#&G/%W49 P#*&?<D&V#36*7B/I+)L,9;29)=A,0PD!$J$3%1@'95+2H! 8&*S"D%54-,1$g('.<3-F53D*-^)*">578$+2317+4=20/.8937=,(R//% /2*7+-".-1G+D@E&O=0-.#8 ::W<"42&A$_& 4 %Q,C!C 4=?J,3L67@0'9D !@/+4-1:<#1.7835V*=ÃÁ5"˜ÐPÞ {Ú!¶:)oç)Sé+"eÝ0.Aá%-"Ä@&1ÑE&AÒ- ,ÞP‚†[Y#8sd)(´*'K“/2“)@­6)Î+Wª .J¡3’G)šL'4–F,7*6B`!/e_&(wFQ^2YŠ'/N†./7f%6®7$A§/;@n'*N„"#$=ˆ!2)€7%(y0Až9#2—*4O50v9"#¦&-(~2),q+(,›8)-k&+/~>'sA3(™B D+‚@*.C.-?y%"Q*!>l1+,/53F&0TA/%(z4Ca4#w (8d0+#•/1%i&3.o)--:,.)Z-,V'!&{X".=#6("P=.+VU"'="()H/0:<+,*U-,,]20e>-1k$/:f%;-Z111M&1.i@-!u4)2l933|&.u,2‹>.-k-mD#,@L%Za.lO2)gp+?T)0XN.8W„18n#3;)&8N *Dg3%Lv5k0#C‡$4=z00ƒ"43H?0<(!9-&y>0r-#4ˆ\,19'K7 'SA1Dg?)HX)8A;1-V;(y8<Ž9)!vH-Yƒ1+F9!$X95SV44Pv1,,N'>Bº}*7erI%žKAŽ2btM/C£&*&ª'=A¬/7K¯"N'–,>&¡7;:½1=%¬,CEmj;cW/!_P+3€s0Vb8/y25¡<#Ÿ$H™6G…(,[…4 $"³-8­$Bw)>„7~ 5Œ1,#FQ1jj+¦D4SP/bS,#pJ1.†z,"’;{¶"33` +j¨,H?™6A‹"Cƒ1A·"/Fz0‹–1mÂ&G6½53@Æ3Z &=º&,6¼6"…1'™/$v+"„/%|%?&d%.;%0i3:"k:(g,""e;,i80J1.'e*2>./^^.8B)+c25Z+ 9#-z#v+7l&)An(ƒ95 Yb ]1"‡$(t$2#1$\4$ — *(k(D/…)'#Q/#T-#M&-1}<,%E)y:*%6$""7\1,-*2j%"-#%-:}<&7s);J#!†<1:#$}H5,n$*(3+'$K/!Q- #lV,83P!+?g-";8*5z'G&4ƒ.#B"6g., V*Š$`$'@/)3:":)&12&*3%()C$Zh+00K#!<*#(4()&T,"!]&(W0 M, Q&3S"75@,#VF%yF!~4W1#:‹;(`$%"vF"$6?*1ve*%|D7 [a1OR$+[]71H}3w649*%%Nh!%9]6#Ew!! Z'S‘11/W25)˜1-J4(„/:/6;*„E* k&"6J+8*&914%.!K0A5Ij;#/?(@-((=37*A2 D- A5",:R5B0*I''O$f,c ,G .{4=2!d'.*?'+`4%"I+"v3"#N.4!:S!%;2E6*#G@!M–.0Q|*A[*o+'#ƒ7!n%*1s(A"‰#"!t+&5b3/D(+A8v,'2j)#"V!%%Z#&Q #.H1^,.1K%'=+)#<_'.:7'A4(A")QE3BL%1^*w-*Q2-.A44.R#I#2U>/'.5('x9#P*%1DW$(@J,(9%#JJ;HT0e!2:`.5i515s-0 Z4c&$2?.(*R?0'@1&#L>0'23+#=c@,)E;'3P''.b?/;[()1kJ:j)(*g2#2I%$-S!+K#-(d-"-[)5)_1/"1i6$-V8@$KH,"@3)&MA1w?2&JE.&NP27MC'%;N *EF%&H632I/&GP(#L-N*3:O0)-g21~+$,v*c..$H#*K+*Q!) ;?.([S12X95"TB06M-.94J"H5#0TD//h+BB#/!%(7a*5?[0-7",^0#+1)Az,,J'6`4'7\#†5)5{1%!p,/g%/e*$!G855>N""F.(&M5%(NLE.772M:6YXET/0›%K:ŒCKŠ5MLHJ$—+Z0›.Z6)A_­/5+ÄL1¯2;'£-'«?'%pN8sC6}J5o€1‚Œ$H‰:§+(G»-5^}y > ¡!5µ,¤%3V5!­$ ¥:y]1%^d&2‡4+"¤?0tn-Zf*.B4#;†/=x!+6c1do,15Ÿ'y¨#1`,E“%:2¯4dž$M—,8O¾.9%¯%E¥1.R‰#9µ/1—&!~.(Œ,1*{'#6‰")3ƒ+r G~,5!WC#n5-@--!d)1h'MN*EC1]M4N4*3e"6`(,[*,,[)%j /H]2-B!n'&v'L-N6D:o(2 2), 0"!&1'J *:@>+M'(L.': -</%5()8$"* $*&&*&'$-);&14$7*`T'6.=4$7#1E".29&/=.-6$)[*7#.-<*))@#-.*,35C&C#$.C&+/V/$e$&H&O$$/"J8.1,,%:"".3*#>*1,O9)-/363O&&7/3)E%Q-('T#!'[@''`$-#L'2#C#E,E),T R3.)b!(M1,"h*-"D%0!G7%>5$I=ƒB<(M3%WY/#3;9*Q^+>6%5=0@7<&8?)R1,OQ,6'\)B5b#-[ [4)F&G"+(T+(!B:*'C6/3K1/JL/45=)$>,;D%4277/(&N)"5:))-%(0J13B/5.7-+G1A%G0$@1E("T#5R9O13&`%4*T'1W3(&E7*F>#&;$.#*8(-DD45,;)9/0:̦/¢ž 17Ã0PÂ*šº†Ü ^ä JÎ'iÁ$8ÓA5Ñ%3E£"NÂ,0Áp&&Àp+£WŽ'1og )Vy(E¬ &2Ž#/!Œ#*3x .+ /#&¥#™'‹89¢C&i0!}3#œ41/^}/?[%‰,2mY'(mX%DM\p)9’ 3Ž''MoZ¯7-o&"8Ÿ#*S\ +*8£D5¯3@4Ž!(5ª-6,Ã5065M +C—K+/@*€,'$Y,#})q;/;,}?%š "G4#ƒA#w*-%Y2.(9I*-FO/&^$&!5J+2]$)(g"(6a}7O A†(")p$(3…4*#})'+}!$o)4*)‘*15‡2.^3ž,-:d)#!j'#-&'[)/q&fB**k#(5m8)>& P[7)4K+2N5"&.:HY0./!%Ui01_,o!.43!0r*&aH"!r* +.)3F(#&F1*wB#&CC(BX#5X%0YP#(;B//t ?\)+/v.!3P,#S$)'H9')o%'-?,'#,3C)(%1",3*2$9.$06(--~1*>6'1\,2*Q0.&V2F("#S<*i4(*n'<3C'.'w%-i((o-37L"@€(.,Q,7x.(&jO='E7,5\;%'N2SV+7Y+ <; "=]$*1W0%/P'EJ2u'1S4-4…09927ƒ&$_&"j$6V)2YC0n6+a(+G&+(ZF7'E<7+C3"#7C5$=I<.B(@-c_/8Pg%)!h$ O.*5-N"$)H"-:N-6I74*•,0j& X4(e);X%.)n@-1†++-aE& l.**[)+,_+61'JJ/#U?"2JN"%*>45U9Ax¸‘8<^rh—JH1{>WX‹M9­2B>)L1 =:F°N&š$!È%BA…%3%¿=7 „M+­F$.´K1'tk6qƒ: ˜ˆ"Lˆ.KŸ 5A}0?{,.@°4 š#0*·K“""¥4'u)+8—?/Lb,+[V#ª1(0ve5 r\#.RP2Y~L£3[°.\….z›$&E–`º!q†.RÐ%a´3~•7W· @G¾.-+·&4K,#D°!3›2#%¯)(*§7$“2$v$;"{),(4w*(`%-}!(Q&)+k+4+J/%G :L&(GLT1(/S13B"#%tOU< :#F!/3i))M&*z+ z$,h,T3x;(7‡)$34 †,> &d! a02)d#E63lM$B*-V5+>,)RQ)&G2V)($&./)N%,'#.Eg3#>+,j (>%@€72H"%’0, .0'#q>,4%).‚1*(:)+5:l,!N)5<,,B%Ž/+$K5&%$W&"+x2)5+u4$C/4##'5&4&<2)#>%"/4$.€'..H&!8N$L,,C%+J(%%F*"m-*0P/J%-•0*/g/'Ž@&B 4n0$(X(+€%,rB-%JR&"V7(f<dx (;j+4bH1RŒ)47z&$5y!;SR01M‰#29)5«;#B@'%8©,3J171ƒ?#1W&&ƒD.0{2+ a*.;#%„V. E0:S0$EF2%>_$!@?/1Qu1*>i32–#C.#6#5#D,*.w(+H$*&Š(.m*4:h1()^!9#[(F *€/4?C't02*C1tD4(+<)?<)&B,8)FU"'')/#:^0?à#Y¹,(ØB±f+°e,¯r ¡x'³¯!Y~$,X§,*¤%-IÃ!Z‹$'¶'²$– ?™B,ƒ"O.7+nZ($\Z^`''œS)"R>%/SU\h,'¯16° +@Hp""Ao5&7Ž(>Œ2!t>,=}&73œ,,3‚+9?‚950@+Ÿ%.¡:Q‡A'“')5‘$8dD2™0!"+~,!(‘. Š@ $’D&Œ3"9%y7&p>n-/#uh)FR*+OA%%*:"$.e!'sCw,%(u*).r%*tMC( 2‰.M "t"*-2 ,¹3.j+K6+C/7!`0 &j&'7E#+.61%''W.%3271D!**!-09B,+E9*)01 %6. 77,3"11&73q(5 m$g$38=@k+!(T',@+($O5&&A$:2'$'&3#9F..$j5'>#-(9&)!X!%=,+0L2#=/#)?16'.(D*);)-/+$! 2"Z)1*%%M5')F'6"-d'7+,D^()"7+.4$#"%*#c1 G <2U)A,=Z%N$0-U60#@()j( %%#M#G"*3L(#/;/44"c0%3G-1D//(-)B.T@›q`h_H:v-£Lt@‡8kjSceauI­%z*©9‰+‘6C0°7_(¦5H*µ7f9¯Dg§Cc™U2©i$'¦JS$tU6&oŒ1Gu &r¶5-I±1p½*-Mx&=!¹2².<¤(/„//¢$6g!+—I^@?7?C2A:.#{G6#?A4 GI7"q_)=ž46%)iz,†ƒ%5G¡8k +)<š %mŽI—3.•51t09`§,9>¼!*L§'+‚¬6.Š@.…7$m0+¹50‹(A!{'#ˆ&n-.&d 2q3/y)(h 3#T*j",,cQ=/CI' 3/-?I&,7d-$+e"#>]&,0w)y68e&(3A+%$ƒ&4Q,] 9.’9Q0,& %#9 F-&K!!?')K*+/0.0%,+'R#8&#)I#(6F@%+18.! 5#9"!+*23**(+@6'?Z>(U /7?&3)R(#`%0)('"_&"*51)-%0;%5D)04G!$8A&84(6$D3#?".4H%.L!"(>&$O $,C'5&*49.-&0G-+'&1%3+4.L'%I%(9G,&Z06E-/70'->$\6 @( S'0,-9`.)(IGN$%G)5%V )%52/I+ *Z&4Nh5C<..a2&d;51Zr908D&,9K2;[#33{H,+53lI$#)]%0/b6/'R"+N')%C=31R<&e:1@*8S0#,{!3(L/$RA%-F,$,7929-#;BB1:)K*(.5+2A3+1)2D!Z0!$M&$0Y4g%4#<2V">)+l?XI+Q/*Q$0C+2#~-+57/?h!!*%-GP)'65Di7/&“#@=¦.7Œ&O.¦,<‰'3$ˆ&*8§-.,}(/-w+%.'C.!†/+0r-#{7&8UQ)3SK"&l8#,bn+z B`*-:N* g(0j!=a+W0'!e/0.v7.$Z#K'*’9 5Z7$1}#+);&‹9/#32R&=*%A*-3P'L-'-GM"!3()#6N385*%~.-4!-(x+)C((B'*>%*!t("\9)I&'#b*()S7 &7F( *;%*+:*/-A'.C!**G+"2#&S "M*+F%"I)C&*)02U%(!*,"$;' #?13Uc-09%;w1-/$+.o#!T,!(n#P/5€%.;Z-+24g*2$*u*x("0[' Q"!R(}/<;*=%,:#"#p&.>100L"/EK&?T)'%T>>^-JL!Mk!6'Y $t $8w('/”.10s%0!j+"+y0Z>*t6/)Š!9T.)(&OO0&US;'Ts001 *??9'eP(*;E*.;#eZ%B9{7Fo&"0u<,K- €1~:".j.!{+')2$*<#‘-%r8%e.#n,,!oR:##W3-BE#l5':=N,Vm$Wq0.0^©{LVep9y.{•Ž:l\cbRj£/…(¼/…)-o+&t-¹ +bÄC|O³3E/š:f2¤)j)»Wn)‰8Jž`/,˜{A s€.4‡…&M©'oÁ'Nv,*i«# /Á4Ï+4*À, º(.©:š>³=0(JN"/„M%ª;0#F-6b_#`J”0:›,c– #¦”)#š–~¶"¹ +´‹\®g© )mgª 4=À61<Á#˜&.Iœ5A­2H¼ G§$$#Ê60‰9·%!Æa2.U01S11i"o%2b"&!†8"5L>"OK_";E$0*‹H{'2AN%$u 3u<` &5P ;o)W#)x"\*2Q1#‚1@&"X&&^r1S).Š%$$A$0—'2*$(('4+ +M 5#Fo+%Q !OR#",$4)Ue08A!12-4(4(†$&.L'"#>%/3-6™& a-%C/#%^,'^H()9C119%9>"/3<%'!@#.$I&/5"+d&!U#3M#$#P$(*F.*!,6P%**3($8)'$9+Vg*10~6/*)…)1P)@—4$?k2 9¤;'-Q#16 !$)o"3'•.&&'/?–-A}3'm;#x")ŸS2)2M$0T7#Œ3=']T+4]M,Vc'0[m )n33D‡+Bp,+_†/,l,5‘%*z.*4¦ 8„-2+~#(=’//%\L6%€>*¤/nA 119"mU/_]4(Yo 4?P%)TH1$Y]Og 1J/#Q^%<5g$Cn$9*A30#¤*#l!5k'v.&Œ10?¤7-#–>E$qD!-:#.€,++zN04:T&$QO%,lD/#Cm*/bŽ93K`%(BvF§Ð,&;×%^Ô {»$œ¶9[Ø5$dÓB"Wå&Kí&5Ý.Fç9ZÅ3;ÃY ÉQéTAáh($•e +½!ŽŠ%&“À$bË z¹¢«$18¾13Ð.1œ(.w&,—5µ*§C*gU 8VK!*H@$$gV+UB6E^"QL.;~01‹,Du$fQ,;0|5/7$5`”8h¸+.Œ121‚==Go 52¬ I ”:1z4DDx$ 6ž0>/”"84Œ+7$¥7H#‰)<¿Y'™0(--‘>"z+6*s2!€/((v8-!j)(W@*)'=5@'3-S03&d +'2%)M;:X(&Š//'1 \P/!601&;T-V` *F\),kM5*2R;Gp!%Xj1PR.” 4n)+!`&%n& u#7!n+*l%(Ÿ.)U(-c#,k6'M#1i05|$:+Sb[d6%7R&ge-37@=k:`$=›tkg8wT£0¦n4…Vy4}j{@„q‚2kkˆ1€B˜*fU¢2|\­.v½1”M½3]H‹AT]¬_aD¼[€&Ä„QO’iU$¥‡`Sˆ~W5L¯/KQ«+/qŠ)$}n .9 0.Ç#/#¦"2m+/ ­/.¦'9«#2hk&CF<%;."*Q#"">/$$)O$.\`-'C~18–2j|š}#-f’B i®&+™¢(.5±>3Ÿ9f”!$E¦3.'0H²4%x›1D§&1GÉ55`Á77#»61„D$½Kª2h$$%x3, kz(("n",#_#%d&4H<&$135+"R4,‘’l˜ U¨/&1u,t)1`"+*,(!4€#%„-$@.*e'2!+&O7'Q".'P%P'(W(<%@"&O'"B((H-'8+G#""?%!0*)$%"&!/M *#/.'1$*/(&);$6/B"-,I4S&B$)C(,^ )E8!/)12.#7<"(&C65=(!9/4#'0*-*T0(=!-&?#O$,@#!J)'S%*&7/* 9($K&($-!%&?(%'<($),F"26-2A.),K-P/^/-P&!X*1._*/'V#1[ .A(A%q7'D5&X,+&B&')H5%:A*&?K3@$(5zK#L:#&HN*=B(.(+:5+*H…---:"7,()D$F%C#$P& $R(2/ƒ&$2(*>#.[/*.›:15,)-}e%*T4-,9X![p+FY_> "N‹"*<})Dw*4Ub%6:™(6v -4&&¨.''¢+-’e7#*«%('n@%2y!!{?"v@,&2;$‰/*Lp*A:;Mk'r”("<[+3&…4I<6ºÂ19•ÚEYçM ‰Ù<³é,%ˆéT'[ÅZ_à.q÷B ð€#HñkXí`ÞW($Ú¢ ×nÙQ4ǤÙš6?Ñ¥rÖ &…° +Š~92©!aÚ/C¼!54¨3'·$%‰'¦&‰( 8iU,'†<,&›-5bd(=‚e-gU+.]t,/s2B|nAFi9q™/P‡ ŒW9(3P9šF-h 7DY$0=‘*Cn©?^Z(/_‹6V4v[.}(Q4€!P%š&5 ">‘E% j,(Z.%‡$.${.'q #T,&}+19I"@J1,\'($e:=b - });T"$w"2Y &;f,/=j,'‰ ,b't& †!2`$"U !n':"X -,g/._k6*+k)&&o(3#`&&+c5$i&$#@%L0#&13#!0&g.(2C*1 9#"Aj=[''4(n=(^%_#!E+70G(8*C 'Y%0'IA$*G*"2bB3B'R# 1-'(,#0(2:),6F%/R8 !*E& +&?' I,/%B-&$31+#O%,-E("6/0'?@,.`^56 k"#6{%);F%P,%'x*a/)!`*('c!*)\4/*5:,"ƒ#+q'a)+(X*!f)1J6$'c"R<#0(D-,F[,*EH8)`-%6]57H07@X:5V/j*:g#,t/)b/!_>,~: +iF'e78)s6"j30(;.9+C9%TM%(>K*=&W$*O9;2Xa6;a72t2@B#1*‹+7d#v-;j +58‚#?†'>1|"-u0o.d+=x0 e44,q4Bm)hB+.7Q.-U(S# '=X!5L` &D^298f¬š6e[sDnEˆ2~`5alŽJpv˜ sh¢Dyh¬mbª+>‚Dyj¤ ic³7hN¹6„_–K>P²ReL¥Nj3 tdfŸcaT’rD<”x5NO˜D\ŒO8¡}$x¨$/QÉ!EF·%'`º(3·"8£%0¹5(¶7+¥t$#‰h)¹5¯5/(w!*X-+ ƒ&o>35.%d,.qF2,@O"HM%U',¬~'¹ƒ,<åƒ*Ci% p.=a-Ck-7a$˜!{5o!"—'."e+1/$+‰ =,4+z-*?("s= ,B$(†#''Q(%#i@F$)S1011+0:%/ %&~8):!,?`%'=l&"3d$&/**­8#3V$Z*#W)&P$ 2.%U+$2U"M17aE*,7@J&"("%)99J(/A &&^+8.1'>:$)!K!!?$%6B,/_ .##[<+v(D~\+3“s24m,e)3%@Z"!)/)1{ +**;ƒ#-L-Q"!e&%)-&$j1$k0 a,$$2 )N&M F"(!G.-7##*.# 8 !@.22?D!"(/-A3"BZ#9B"#1&'A-*]-"B1,4#<&61R,)"Q(#B'*$,$!J/3#Y.*$8E - #"0&*-56(,7%&K*%E'!= *&H"#S(%B%-$L"$G!( 2!>4)$%+$A,"#B2.;k#$a,50q#3*N&757,O!*<--(E&%X$'P98+,$a!:l)&)I51r"%"E2)Z*%"j%)"T=;2UI!*[0+I0 .>$!;HUB&%1R2=Y,J*3A<5$t!*"u,€>o i7t22~+0&e,/1‡<8z2;'o&%X/'3?B#G3!%AR!NDT3. T01iK+;Gj3+w%++p*[\&;.[14b?Af#C&n<(ˆBƒDKJQ)€$.d; p5h%_4Cs@T,ˆ.?x4=/@Y18794U0#6PR%X3[.<9d/L¤ygJ5oD†7€b'gBm8hƒm@c‹F‹Lª|nkq•/bl )bg—og‡)zgO^gQfT“PkQ¬VObœ\]™|Ef±zZg~Ž>lR¢B]’˜GPŠb:ODŠ.[K¨.4 ™!GË2 Ä!,"Ÿ#A*· #/¡a``5&“,,ˆF& kg54^@.rK0\,eiB–m.!Ìd>£$"‰›-™%|¦)I¤)p”1Oy“.4™¯8t£@/ƒ¯>7š” 5tÎ-C‹Ñ.BB³"&5²-:.Ø0:7­)I¡J&®M'%ˆ=, c##h"m,%j(&>+"[O0 3C-.a3&¥Q#Â}#3«‚0D³)$p!/''(@S"10&~)*D3(‰'5#;/&O7"M% @"+W(/(X)"P %#:&&N73(A2"&C&.Q+)#)6?*&"6C%+63$G29,Ft;R9%'%)?*%T-$B+52,.*R*U'O()+F.!9*):)+p5+9A++*'2)63(1%(#@$3;")G),F+*H %C'F!(-&<1#3%3+**9% J>$*9 1'@‚8"'j!#,u .D-%:*/u&$,I/.1J)G'(F)"D +W5(z*. R$)%|/'B$$_.$0a(+wY(*UQ2$M7 .mB.HI-&(?5Pl3GqM5>P-C^X."33$$.%Du0&%-“#.I’(2,r<@1™H).¥)'&•C~H*&]h&.{T,k ._‰#*T$.e"%Sœ+&µ$+Ž& ŽC¡""Gª)-v&( ÆB *À-:Ð+z-,Ä5),–ÁJ3fY&5¹W%|KÂ6$#bp#5o¶ /h^,¤ˆ%s{0k®44m›'8¹×Q¬ï%iäo XÛDzâ;(‚ï#Há…Væ§lèd<Æ…-ã”Xät!\ÿ¤"Ý ׫.é­5ÌÊ5ºº83»¸;¸ÎbƒÒ"’ÉO¨³9)©¿53n×%HÆ?/hž.-;Ê8)$¥)/7² '"ž9'FO> Y04¥9>"hc1qg*kW9&„t6X‘ *¡~-#±e(&’=>t~-*dv7&‹u g¢3/ab$/Š‡T:£†2Gq¤60ˆ‘9M•7-ƒ’/]£2@l¢$W®2>PÌ/U&ˆ)..˜8@5@#Œ2'„7+%€38,m;s !'?51)7j'A8tK9(–H7¾ÅE$¦šJ5;[pAe-.+1+<{ +s.& \7"c *.‚/"&k"".„'.%9!&Z%4@8'{!'H),t' &L,.d%!8#/./(,K*(+5$3"0//&-T0M2! /@ 6=5,n!:>J /$k$"#F.)>(#:P*:Q,! J'%&F/!)K4&*M$(V$1D2##1A#0@+"63*45@&&-#$.L./J!4+0$)&N'H!+U+$ H,,(@()%04&R=&L0+ NL%.#v01!e:,Y$ 2T1/Bd7!n)-Q--,m)"d+0o,.&*z 1J,+ˆ))l3.\+)a+0pLF5GY.)T=.6l60,5f3GP,6p @/b9E(,4%\G*;Hi(GaX(ˆ=%3Òt: —4«—%CJ!#UAh,0,Gx.!s &6Y':'#z'7|*"’+'B$2 $%<%•""%G$#~2":*s-'&C)-I%)?%- 460"Ek9OE:"Fg$4`*?c +5>/t#"F'0@ "0Q#-%^)%\*&E+"Q>&/V/&_(G3%6A$7C#<=,./<),%4* 7Q%3N! ?"*;162M"+6T-X2/b¿.‡Õ"O¸5L¾#K·3/¼\"}H+13 ):b.2tB0šM0#| t)œ^7%ÄE$‘Všm.'£`&+{z&O|%¤Œ01³CECXT!6.9 8I?+y $430d96]B's#Z4m/.ci](1 [&R'i+7,o&9/Z1/N'>6K*H.NQHG=*?MEH%<*)FGLGY7t1WDUW;;l N0S.\7b"D'M?[{.My)k&p2?Oi4f#{*Kƒ.bMU j0U|(9|(m ž2E'Z_A3SLUKA.UX3N1-$-L?M8@a.[†q`„e…¤j¸ªa|hojª‰l…š©p´¶zk´”S{®®Gsy¨xv§½¡)%s (l&"%x/) ˆ,"3."!A@&-Y365ÏWGV΃9¸n!$:=.-+1'-3!$?*2.+>&L!5%B'=&%&4",)!3Q" :(&6E+$I)4&:1!2*"@3)*/ 5$)$'-#81#7&*$/6&'<8"*i>%*+*$'Af+)E,<70X4U&(-7#;)=D%?"</,4'!";"#+F,.'=/C$) I0$,0%#&+=*"1,5%,$;#%"1&&=)(0 ,/+C)I)*>#F /&*#+'<8(D3%)d=-5:O#$2"/4zA,@o-+$K6-WD!-5+8$D3?'$^-'?%6›B1!‚/+B‡3//<†7"=|-"6t3/'a%J^77$"ˆS.%rf9-Ya*sU23G– ;5}&Qn-(IS/.VÄJ1@"(M£2,j²$;­ &@¡'/Wµ*8+µ>(‡A%-²GE¹M#;T4"ŠT$8M$C|®zŽ$,y^(-b#'ÃC5zÊ%0uv*2„° 2hÀ(7 $Ÿ±6 ÒÒ) RÎ$QÉ,I×J)ªe%´C3Á,%.½D.ªd 2¶H°{" «‹¹}9)ÓmÝ~(ªª+—¸9*Ü O*³Ü9:Áç,5ÌÏS6â×X Õê…9Èçg}Òâ™2¾ÒŽDÈÌ‚.¾Æ‚*Éé5‡â‚9aÌ#7i¡I‰¼8U¨:@ˆ9-›%4!‘>!…5+.”!0y16J]&!XW(}1I<é£0ÆoAiK9A%/M0"#@#+!,'>N=/8-x& ,E%,,_+/>'"$p/'H,O*(7>*.7\"!3U+&@!*"N52y.!(S#!;?''Y8*1W/. 74*2@&#M52@^$6D5CM,$BP%"€)-/B &5N/,l%"$O!&V($='&P; )F,%&[&>481#"3> ><*-1B15.9,+2B#%;L!E,&"P44*3 %1G,'R7.G29,D'(C@0%E6 !H90 4N,#9”") k.Bg1X$"%5O 0l#'*q1""{-.&e$(4u!1"l 2$T.`&;a4K1=E. d-3.6>$$EG@-l!2/(H*F@C/*N,* ?e;H]1*t+/FQ!CPL3n<=ˆACU$Y\XaC+€!T5~]t(F*\G‰9H#e;?])KI7G#QGEOR'5=(#7.E*U@S?)db=8l^C\P?/$g-=5z>J"@WE&‘$O y?l"rQ.mE.1œK*”N#“,K"l4Y)d,26\(\b<c4F>V@G4KSFZ!T!LLS,NQ#@=c9C0e­™N}jJqˆ±FŽ•}^wœ’^”Ž¬b†wš`bOšX‡[¯\tQ¡vkm´’j^‹q`b¤~g‰›‹fY˜™sk­–xvŽ“;{{ˆTd  |n«fqeÆhei”7l~zhm ¥Pmz§Ezf»5{P‘6Pº6rW½03@¼'1Fµ79"¯d#´DF¸G4,Äd6ÕM4«P)Í^7m{P"¦VK³YP'¬–CN{ƒal‚^X¢kPj– Db¤¸‹oµÝe–æôŸ`àñзñྜèé»uèÝÏ›ÿâ Nñå›Oúó¢gæ¾Ã@ˆ·Cdƒ«Ap•¶+28ë5'*¿?57Æ)/#0",¡I%”. l4)B=*ZN&%¨K"Ì{=®/ ±y+". A+-.#&((&,A *5+!V*C$-K- 0B/$,R,$C))?6)+:%/S*=/"@)*F %V,(7)(I+0U/'B#*.+*%7<'*G',%V#.!k0!0U'0`b*(]L#0eD#2KP(/G$* —2C¬),0t/@…&B"I#>3;*.v$!>#13R.-¢1$(ž-$ ‡122€0)zQ 8’*!'?)%¥I.x1!šz;µF*2{‚*/U‚9}„#o¤"JÀ7.:¿''ˆ”$±&6E2CÒ#&hŸ#3·,WÆ "]Â)&Pú.1ÂR1@Æ<$,ëD)D²Q1+ÃZ2"¬c)2»x(‰Ä)ˆn:(¨b-<·œ9Œ¦1œ²&¶‡0"^Ì:t½'&g½$ŒÄ7@¾+,TÉ4SËC@à4..å9:7Ú]d3ÝG1ÒZ. À#(Ï8+'·r))¥ƒ$‹Œ"#Ä7%$…3 ¨ (&h‰'p½G¤³Jpá‚–Ûx5ŒÁc9·ÎYšéš ƒÚzMë‡\ç—#+å”WäŠ(uìvCä¬ á¼.ÎÇ-@ÅÑ7BÏÒ,Øß.ÖÇC#ƒØ{&tådtö;)²×H&næíœ'NéC”Å&2TÝ)NÀ#`³'%2ÉP¹f#¶-%BÏD:ÆA,(ÍL!ËD ²€£œ% Ðt5+Ùl*­¬(!ÌÝ_!¯—R4»ÞYF­ÆLNÊá‚“Ô髪ÖÛãÔùíëäêëßéïèâäéìèãåÜÛÌåâÕ¯ÕÛêt×Öƒ;é…Y¤Ìn+Qš-1:¨&:7½75; $%€(4”5,‰$bQ.@0V52¢C,Íd,"cW/)6G/!3 0'(&',';#&$!1B 0- 0+/'%"-$-&&/7%726**(:&#$4?,*3;11% +-%'8-1(#"7%#$7! .()+'%%3& >!'38"@l"4:X!%9#h'3) )*%!2*-?$1""-+%/),%@0"36507*5<",(67"4K!3/=.")-#'"5 "$-'U0"'$/'Y*"*)%#K(%2F- :"$,.( dL$TI2%Ki#Ak!88z3+M$,#ƒ-74n/8,`3,u+0&`3)“%4‹ / D(r. 5q7#*d> ;U-,z.p;ACD);B^"G'‚2H>MV(B+Y-NI]*Tb#O=NBQ02MBc`5)@"g-`,ZIH.U!]P42k+_6j0]d1h,i6e%t/l=^A?Iq79\M5AR4;B]8EŒ„~‰u¢ŸuoÈku©‡{´°eŒ´„U€‰lsqkbŸ”btgwtœŸ}} ÈmvK¡yhº’z¦ªƒXƒ¯§_k›¦r£³jzµ•vZ¹¢yv˜¡VO_©`_Š£so}¨pŒj-qn™0jr…?Á8?¾!b4¥8B;Çff»];±Q63Ë3=%»NGÂSA‹Shšxc]”Šre¸pcIªgb^~“H…«¨Qf•ÖVœ™og¹»€ßÒ­çùËËâÛàÏñÝêìåìêéååääåçèéäÞâÓæààÌÿÚà•êÞª_ŸÝ€UóÎyx›È‡wN560¬BFMÄ@)*®4#+¶+) °=‘P(1OG:'@ÀZ/.ʇ;•“2&6>1#0@#%//)'&1&%(+,&&0 $%0%*"3%-/'&- 0$+''#&-%* 7/#>%2(?*#1(/,#1!1"51*A*0%,'6(,).""' ****%1-"*$2I,Np+=)A4(E4&R&..'-0.&&0,I&='.$-*,))26+1F+'?@!/O'*E)!CD,*31'1%%!1&#&M52*,0G+2K#(&N),%V84+-' D9,,fFw=)/Mn+49ž/+‹')e"¦5&3Œ5n#6y(4#„%C”840ž:<+¨4%‹9-Š(29ÐH3!1')¨M2$»@+‚[%!}a"š].(©Y$)‹{30( •7(Y·Cy¡,Kˆ%-­&-€¡d¢ *y©$x©@ž:ZÏ!%iÃ.6¹C 0Ön40ÈI,PÓ54Öj"ºCC)»^(«~›-Å|=@Øk$-£&EÇ°3y >·°!'‰™(+¼Ì-*«3)SÍ1)-¿%>Z¾k²,<Ð%8=Ã%-6¸/*1æ_F'¼M+ÚY$´3¶‡$²ª9»i $Ûƒ–y-¶°&{ƒ7JáÔ-3¿æUmæŽÙD$Òµ'&¦ýyË]AzÖ–dáj;:éžJÊ„[×1bç˜/ÇÕ#ѳWå¹&ͽ5ÙË0ÁÂÕÀS •ó{"‘äK«Ç5=Íö{hêu(bûóKKþb/wë3pÌ .oÚ,"íb(/ÖM0_¿-5ÒG1;ÃF(#ªK'7Üc=¬½*:Ñ´(<ÐŒ#(á¸"4¯à=œÕ56¾Å5¼ßHSâË‘ZñÐÙðâêèÚëäèÐëòàìôêâæéæáàåêçãëÜäØååáÕÿÙÞ²ÛÕ³âØÂuáщ3J¿žG=´`>cÈ(:¢,:=®,A%À+-w/:oX%V7)Š8<FJD*&F,*7c78R$0/\0);i$$!,0BW$&+L 'b!)'5*#+" ,4Q2#!2',$0!+-.*"=.()]'1*Z&2$9'$"'')#(##W0'"2'1,2+.#!(",86+,H'(,ba'$@D/Q]+3.>:2W50"(.',.13-(-1_-//D!"#<2$34&)+[-?.]$/Ka#/2]1+3 &5J!4:")$B1",H%!%R0)l,%!I'%-V( $K# &N#)c=(9E3-JF%#I*5"ZZ"11x,q9"g";+†A ƒ*?} .+2}B 2'l-‡,.$u 8nAqo‘&MxEp#k"g.H5SC:0Y7Q2u"B9)D2.:=WQa;DH#KdT7$?_AJB[BCXNEWR,V-sIYJYDR+^/]&E‡ 6.>4½3%6Ö"JÊ926É-/æ(&DÃ$$:ÛB+L×@/6ÆN0FÌ3"%ðX$2ßE.æ4/;ÎT&¶ˆ"´k(ÖM!³w4'¡›(ˆ$´¤!³Ô@ŸÈ,ˆ/!²Ã80´¿ 2‚Ú,-³Ï7*†À Õ¡* ­»!‰Ñ*2ÚZ&8ì¯Ã‚9žØ}ëŽ[ìžËœfä–5jÒ”•È°#0âÜ'>Ï©cή1@ËÙ ÖÕ8+»¸™ÑogñlhÑ58ÆæBrÝ—zà› jïNˆçQ)Jò;5cà:+jÄ);:õOP¼I- +®#4(Å5B)¹@A/ê\=¿3; ÷B·ÐF-ã¦,ÿ§5+¢ÑDH±Õ_^ÁÅ;wÍÑwlïÝ»‘åÊÔâíîôùèàîéñïùïëòðûñðîëèæåæñèñæéÓßçÿôåçþØûìòÛèÊúÜåÛæÊ­f×ÜÍiΤ6[ï-Pè¡BxÇKA‘6'B?Oi3HO" 9A/:\>6:Cl%!2q#'R#0%Nk-Y0$7X#+q+-4<+.-',&++-#*&%1!#%9*+$..#8!/((!0'8/'1// 0* ,./1&+)$23))%+(&' -!2 "2.*86#77#((* !*-,*&,,()),4 8&7$K37'2&0/+2"l$DY &`A1_);2"09?$$"/$*'7'6!&+&1R&'73+V# 2 !9"3&8-$3.A,.%+V">>@k(9`G(Q>0h0ƒ]j$vUaNm'^i +c-r*ez%c4u_;b!‚\"h(a/uB[u+[&{8l1|7ZK[9dES"c/e-u=q+;6^F\@,7\DWQFqYUQeBILK??pGP]QtLbN^2cYaZZMI5QjuAF]fAbUM.fI~'rI~1b9ƒ'j+r=„E~7j/mBP-n.`4hZGGrVbHzQ[A~6vJuBbJƒ^MM{LX/†\@]a7U08dLZ_?TIAh,eOJjDY=5@R6b75]GpEt=n&[ Z0ƒ7t'u*“h+*k6zNM5ˆaLCšTS!wLN/7]DHJU@k8g:†d˜bh¿z]Ë“fkµ…iu¶¨qdÀ’{bÌ™‡tí{W¡‹h®±sQ‰¯‡w‘¬‹[¿§ SƒÑ´^y»‘\°Ä’^Š¼£Vu­¦Dr«¼}Z‰œzs¥Â`Yœºgp¼Óro¸×}_O²rc|§[bu¸gte§4qÁ4`h»)RKËHg*ÑaL%¾%XOÍ+*¶IB½I[,¾Tr™ž-V‡‘HH´uc<¶€]Kƒ¦]k¯¾rbÂØ\†È±`îôÑ—ÜíÆàñèçëîôðáðóöçèîçõòïëëîïîëòéòéôáééêúïæôÙñïçâܾáëѸßßËbÉÌㄳٹG¥Å•i¥É§`ÁÝ'/BË))9Òb)s€4 WVÎB(!F\8-2^)6W 28o*7h&!"62Hq: %P%*"T;#*-)2(8**5#,%2-4%:2-%4 %*,2&+%'/8#1#4--((') /5":-++9&0.#&%)%%)".&9!.)';$'#,1)-0*'&!0&4)--(0.)*,084/;3.+00,"1*A),"T$F'(y»/-;l+&B?..3;0,% /$-(5(2'*'-$P&-";.#Q*.5" ?&)M."$;<%(D (t-2-P‡'*™%2¡M#H²#'7ªOÉ.!L¯)#-¹;3=Á=.F¾/'LÆ'3/Ï7"+¿J.;Õ(('½1">Ø/3$Å&18Ê2-- „)+½w)ÂW@ÛW1:Æ„*¿n.:òz)>·Í'$“³%.±œ-<ß+ ‰Æ )’¯!™¡+/¿ËC›Ø;¥ÒC%œ¾; bÛP49Øj%EïH$dë= Dçj%2æV$/ßK""ë‰ Ñv) ßu8/ðY!Îœ%#Ǩ##´”%Ɖ"5ªœ=µÁDÔ•!HlÂ*lá}Õ+º/$]ï%1yÝ00CÚ?:DñV94ãR(Kúc'?ñ?-#Øv %ÖŸ-"Ør/%Þd)ã‡+6âœ''â“;'ÌÚJ"ÈÑTsÎw‹ÒI¯²#¶Ðp•Æ +¹Üx#׋% ÐžiÓ–fҀ˟Dȵ2ѽ3QÁÆÔÚ4ÒÒ&S·¾@óäJ–Ña3›ÔD<ÇÔ@B³×{4„ïisÑt#¤åw'…ॠ}çr&“ÙP#nìk>+×k44×G<,É)95Ä8+5½J?¯8=.ó„,(Œ¿MHÓÉ50ø¤)2ɽ$6ª³A=ÃÍw<êÉ(bÜÞÅ—ð×¼âééÔàííõÿøóõðûñêôòóòðííïððïñëóèöêñëëñìèùôûóíÙ÷êðòëÛìÈòÈÝÝÏÃ/«ØÇ5¥È´ŸáÅM8¼N9°+=’VG) *$….a]HF[0L‚G\0u16$e1Y,F€,,r.0{'%(w&$.U(''. 1-H",9G// :#,1@),*A/++v,3%M(2'V.5*b/.0P/5--0-$F0&,P-,*%,'#./*-I36,A71JA"(65;C%B3'(8#\<8%dJ%G+ˆ#L&v MDE'[&i6]4}+c%J*[:ao+gncvSi_€YZ_‚9YQphQ9RbERiNWcYY‚MY/iE`CTn[Y_l-(*X"+,b-)(^*'.c,1W&1¡S)tª-'„³Ail&*;;.4)D((&M3,Q& q%P6(,Q'$$E*(I'11N' 8*" &rM/3* 'C‰X+/”r+AØ!5Iº)f•4"eÏ'{¸ J #qÓ1%5Ä0%Œå0 šÃ'žÒ=7gè72ÿD …Ú"nòH#^îDWñ.vìg=ð+ÖB9>ÇS)Þg+ùŠ'áŒ'á+å™%9Ń"-Á~èÃ* ¹.½-ҺЫ­.$¼—*#´Ú'EÙS(ß+jË9YÞS,àT;ég#0Ü-Ûíp"ÙI,Û(Ð¥*2иô‘2Æ“Àœ+ųPʼ&sÝ1’Å'"²–'¶ã+!x÷%/[Ø1cÃ-5KÛN/3Í9 Zè5`ôY';Üx'Ðp,)Ð^΀#"·›$ ÝŽ.ÎÊIÇÜT¿Ô—ßÕW6©ÙA4ÈÚN5¦¸”ÑÞœ£ÍhÌР°ÒŠª¾†=–Íx^®®zÌÍßÁRÞÏ;áÉ&`Á¹,X×Ú%T­Ìk «ÔRÏ¿BEÃÑB…ßq Ÿì€~ãg;wÞB0ß”*]óh#qÎd$9å@+ÒP7Ï-:DÍB7"Ì/;#¬MD0ÍK0&Æ‹]§¨:!½™?1áB. ÚL?­µx]¹Ç„­ÎàÛ’âÖ¹ÀúÜÿäàñðñìèôîòðîíîðñòíðòòñïïïïïîííîïïíïêëðééúìôïèãîóÔìÔõº¿ÚÉ¢êÐî¨Ïμ3ÓËß®½ÐˆH/ÃL{*I©ONˆNL`:C9G/C'><'.3aK%P)2%j"IF'C1~:6s$$f !~+X/B*%$\'C#W/'$#(x#(b!f4$E8"F.&-=%4,A=@')#L7')2+1:-.'?% 59!0?#'3A(&5#)V0.$) 4.& 73.D'@*+.# T'86((#=$)+L42H]Q]qbWg89%9#%"232%2%!%9*.#'()A*+)'7:2 "01)*>?!4**E0#0<!7+86B/E81c.|aKx_bFZ^]2oFg1kQ`8QPF[„3ss5|-q&“0p-|>Š2hDW"gJ‰+lQ[1f<€"o4Z,HKkTZHg=zPs]d]VPa;lSWPa0TW3c4€"d:ZAWGEW`R.cp1{?{#m)u4‹{7y=Œ<ˆ#~-n"v+h9g5ŽJBEk”/s6I6k.@>eCoFn:ulfjЦWcƶ{QÄhZÁ§^u¿°KIĸy1ȳp7ѱ€Qͽ•A®¯TË«—]¯±]‚™”>Š´³h­­P¦¨¸Zw̯:{Ó¼PqÉ®-e«¯rT¹¨ZMÛÃ>ZÑ¿\`ÃÇ€>ÏÉGÉσEÂÑ/EE³q^e²AScª+FH·PWWÆXD:¬O;1æGGÛh,"ØS6"ÌS?+©›;<™B)˜‹:9ÀPXU˜“L_áÉTR¸Ò@aèæz"çÏгåáõþù÷çðúøõàöóððòòñïîðòòñïïðïïîîîîïïëïëëðëèòéíìòñâÉ©çåàŒ­Õô‹ÛßߢîÈЊêåÎp¬Ñ¿)0å22Z¹“;(Ï}80òb$Üa-‚›) Un9VŽ"€Ç&X“ 9“&&Tb&',¸.,*ž&"(k*.…&l&$i!+“3,w70o#O$&?›;k$4%n%$M0/Z.9+D&/.4+-!-(/1)6%7.+34,'((%4)-')0/?1V $-/+*6/4-'Q$?"9[&'@!+Y""P!%#X7')A.&-YY5/^c!/~S%$—H<^°*%>Äž¸4¼Å;Å7–¨3œ³;4VÑQ:`ÁJ(`¸$#©²0#qæMOLé,+HØ`Û'$GÍ_%HÙF)Lá51$ås5/½n#&ÞX#5Ðm:!Ï…,&Ó‡$-ßn%"»´¬µ Ìw *ßj ¸š ¥£("¬%‚)#“¨**¨½!¶Ç-`ÌE(&Õn>ÄQè94êa((âw1/åv4á˜á˜%«ˆÅ`Ì›$¼œ* Ó¨'#å²– (¿ =Å«/•Ð>rÎœ·,"Ì¡9 •Ð!oê9[×<%Xôv#=ð[ JîQ&eä#01Üe%Í“ +4Ù„àzÔžèŸ)%ä¥1ZÎì\RÓÐfµÕ{»ÁvÊÃ3)¶¶¯¼q#³Ì¤ +²ÒnbÓ‘¢Ø{Ò}žÈNÔÆgä±cãÔ EÖµ3Aðâ-GÚÍA@°Êj§Õq +ª×^K¿Å@.ž¹…jú}&hÖŽ"uä~ISê$Kçˆ%>öo_΋?îÂ-0ÇG"0°!S8ÒO+ËH9'Æ]5(Þ#¡£1,²Š./Å{IËÇ63£Â`H”ÉchÖÎf¥ÑÕÛ†ôç¹ÁìèÖåèðèÞï÷ôðíîòôòîîðòòðïïðïïððððïïæìêèíîééôîåêôïéîíßßÒÉxáçêÛÜðÕ¬óÙã‘ÔÖØ…2¥„OVΔ;rÕ˜XÃqU.™XC?,RDE/)X]0UKKWJ3(p7'MJEd@%]0{&%q3 q'3X((!i(in%0i!!*X $OMv&1,u)X2+(t($z %y5#T<#22)$<'/*+7)'>;,8:;/"uC˜4xS•3…=›5}Y¡,‚^ªO‡L¿1u=Ä7u:¾uh§:|@£?—V¦FvM¥cf[šcqVŠ,P+j#]\bX|xWdˆESPfL5LtgH~jM[v†0‰OŒ6”/Ž7š2œ¯$¢?1yÆ\›@«wN‹?pB{ nVÊ?t5ÂXcd§ta_—Zvj’O{_‡dMc¥oqbaFYY”m0sBp1WN=hrP^Y`O\`er,u7v:‘Hˆ)–>~‡&˜/|4}~K€,xQv&YAugP°%ha4P;i5[n3zYNY¢¸IzÅÃ|A¢¡€KÀ¯m[ÑÁ]fÄ®ŽAÀ³TRݱkO¹›Q5¥¼y1½·~s²¾‰CÊ£R¹ªWŸºK–¼š;ŽÆ¶`€ÊÈduĸ_@¥»k]±³q2ªºh{É®JkƸ‰-’ØqT£§ƒU¦ÆdSPÜL…ç‡<\åzPa¶kV8«—EY¿9KRÇ#BØd@ÒR%!Û`- àxG2ƒ‚1›¦3În3+Æ°/Z¤ÖPWÀÑ_eãÏ8nÇöÅXÝò¾¿ñîÅÞéîÙËêÿðëæèïóóñïðññðïðñïïðññðïïåëéåêðíåçíïèëæÞðåã×âÏiµÕÞ˜ëïÖ.ÚáÝ;½ã½aØy GÒa,|ÙŒ)âe#4â?Íj+³…"$­•,Ñ¡%M¡ˆ»Z• 6V¼(¸$=¾&#M­»@! %¦!1 Â%,"›@'(ª6"8V(&8B+)"tB'› ,»40C%–9))¥)2(”F#(cW3"93*"6(22+#*83%!+.++LP+(09/,Z(+B*#(8!|8:l),-/$i5'*~3!7™i2+`™$Y‡$Sc3)66)7=)&R%)@L "„25”)CŒ#4}!$4:*0s6$#Ž74€q!$ƒx9±U,ÈZ1)šÓ?“®U"ÆŠ. ¥º.¤´B“*R Ï4>bé/;lÔ,|µ!1¤Ò9Té,TÜ;6oÞ:"Tè;2_É9>Sé1måO3(Ü…9ÄR72ñ.<ëw$Ûz>5Þ_#5Ñ0ÇšÞÐX#'È”.*ʪ$ˆ½F-½’('¥´/?º¬@Ÿ¹#¢Ò 3%Á9)<ä)#WÛ!2;Ð? /üWùb(áO,ï|;àr'àQ+èŽÙ­#Ô&ò‚ ¸ª$â¨3,w–3̾/bä0%„Ý('¸'4§×,%xÒYñ,$WßB9æY$BÛ9!SÒ*#;ß`! ×y'ш!ì8!ÏŽ!Ô-é\-Õ#:ÕÛ8 ÕÖn¦×]7¹Ì[NÒÞ+#ÕÂU­Ïe'‹Ðf§±¤§×š¬àŽ)èÔt ˜Ó¸Vç¼sÀºf»Ÿ)q¸Ô.]¿±X;¦¶>*ÓÑq.ºád¶Õ>IÏÊH1ž·eU˜Ï8•×‚”Ñ‹>Ù¢/cØq2‚Ï>.Ü–Dݬ,=Þh;<Ö%I5Á0?7¹GFäE<6¾+2ŠzKIÏ•A5ÕfEB‘Ì8U­ØbjÍÅS§ÜÓÜ|þάòßÛÿôðáéíçïêòíèèíòôôïðñðïïðñððððððððïñïêêñïåìòûçèðßæáíßáï×àÝÉáß›ê³äÕÎÔš¤Ó¦]Uü[a<½Ê`6§­N8Ç*S|a2‰=\:TM+,:BdC4c>AC?+De**)u>G%_,Q+i43 g $h)r)@*^7m+*`2&\!'1f4:c*<X .7h+8 N(/l6"2!,.60$)1$'#-%5&13^"8-V(+*LC#L'@$3!"K)/@CF]QQ_B5'7,&#3';V4a1&h.31>\/$6)F_/*K,0 W*I@"A,F<59/[*N!ƒ4w@epkch¦Ÿu3£¹ucŽ³b[ˆ•i‰~^zQ€„Q´…O³k^ž³]mI·BtFÑu}LÊplfµ>€P¹Q•5®-›OÁ€cC¹XhM·Pl%­-”Lž/v;x`~J¨H’F¯dV’wkZ˜\^aw6kX‘;_5ŒƒUV€hdoŠyQi§N}„‚ep~w_c€WoV±>’@µ8{)¼,‚[Â1y'“'Ž§I!³Nj=¥di=¬8i5³O6¶<ŒTwiZƒaf_„VmQ,gfƒXS^‰KfpƒPmjL{/ƒG^^m^]qdqJg…NgBqs}-}b8T¢5v6lGˆ,n7Ž=wvFo"sCL<[Bw‰ o1wNd&pGšIw,{/SUq¹µpz»kq®¶\UÔ¼TZµ¸RTÑ¿bh¼pO¤ÓYEÍÊ”=¯Ñƒ:ÑÊ•CǶoH¹ÅÊI“¼¤I¢¹»T¨Ç¯HnÛÄkmŧMc·¶fp׺vXƽp]ã§QoÚÏTPÞªn>©ÄŽ:Á¼Teͼ<Òæ8—ÓLWÕ3U¼JCæ“IX¯#Ô:ßV+aÓQ#"¿Š$ʉ$8Õ‡ Ä«B#à}&ºl.4Þu,¢¥'+Ë«)Cº²/ פ "•¥)¾©%¼¸.7zêO<ÏNGö1}Ñ+0'êS.Ón1Ód)ØŸ à}=׈! åc%Ñž¼«.Á“åˆ* ®¥("·´'Ì{?ƒÎ!F„Ü£§ͨG*V‘&Ey¿6>×,Xìh/5ÙO(7ÄF9a÷1'ãŽ-Õˆ3ÔbÓ†@ºt9ó¬Å-¿Ì?JÂÝQ°ßg&±a$ÝÑLRßÀq‚Ñw¬É´Çt’楊̒ v¿kŸ½‡RÁÞF«¯j×Å"wçËCÙÂ2JÈÐ)YÑÆP*°×t Ñôb=ȹ5XƯk*xëhCræ‹“Î|$LÄŠbâ'iÓg?]Û“-8ÀÌ;-á”,3èjEAà˜S÷3E2çZV-æsF(™Œ'CÑ„5ëw1š¡=9£ 6QŒÍ:SÄÊ7oÝÏ“®êÊ®’Ùð¥ÔìëØÔòýåêïòòñññðññïîîðòòðíëëíðòäáìöðìíèëÍêâØïâàùìåíÜàé‘èË´–§ÄÇ—GÀ´QTÔ”0=¿JÙ”d:¼£Z'©*J&¼]55q'c—CI&H; Z*>$'P@-]+O95b / I%=2S'@+9*S2;(RE‹KU-hh“̃TeÂYv°poª³xbŠº‚}v—‚y¾Ž}k®™~u¢nhœrolŸ{xj¥xpLˆxq¼n…U°‚e½„’L¹zMŸ“Šd°ˆ{T¼•˜P¦‰a2–‹t^Ÿ„ob©u‚M|uvŒ©mbµ¸}J°u‘Z‘bUs¤wvƒx«ljµji|eˆU\uŒhfw¶x_s f•H¼†‚.£JTªgv9ÁT¤K·„ŠFÃ…„B»qro›q{OĨ‹Q¬>ŽK±IUYœg^mŸ€k[£X‡a¤hal¦jZp–usBŸ›7U·Vh˜W{”gieptAd€¸?^E¤–Kš)™D›#‚1Î9qE¨_®Arr¸Qf1À5.¬2™]¥UdB§8qM£Œf\Œb°´xp³¦—[ųy[ÉÅMf³Î^xÓ•X¨â€@Ç°<Å¿¢-誊H²¼¥BªºtTÑÑS£È¹8’©ÎH®±´5¢µÇCŽØÉ2‹»ÉB‚âàdnùg@äßE_ÀÉaiØÓy>¢ÌaWžÚweÉÀhbÌä„?ŸºI@¥ômHh» D;Ó«B.á¬-f®%J9ÜV1.à8=ÙPJÝi*¯Š1&ÉzE.ÎSH'Õq$+ –A¡Ç7sÛÁ,pæßKDÚîyÚòÍðêÌÄâîÐÛéòóñðññññïîîðóóðìêêìðóËÉÞòïéìêÔ¶ìîÎÖÒàÅ6ÃÔÕ'ÈâÕOØØ`.RÏ«BMä•;âœk׶%*ĢʅÖ<:¯REÜhΈ *æz#{˜."\²&£}} ?M¶!AÅ+A£ 3É(»(W¿5Q¦(§-.µ; ¾"3;¹(%¯4(#‘@(œ9)K/(z%-=³61†E!%]=(]R%wC&Yo0pj%%X\/[h0/9h.&1‰/#;j$.Tƒ0(3—(ª+¬:.•D%'–9 (Œ2).Ž-!5I’&@…!b^.S‰+!Pˆ#>z020¥.‡82œ&.-¡%#2©"*,»I80«T!¿68±_!=›U!#¡F#,ÆfA2ÈÞa0¢æP8˹60ÃÇwWÂÖu£êFYÂÔ-në‡/‚Üu,¢ü=6©á”§Î¡jî£%‡Ò‘Sç¤nñ“&X횤ȿ'*ê£1'߬%?æœ+;Ò–%Ö™5¾.&â’J ®Ç@+·º*!çw-$Ñ’,ȵ%;¼À!>ÍŸ?· ¾Å#@«¬3½Î04ë‰-Cð@+rà&*wÒb<Ã]8án#Sðx$1´…!Ó¯"<èD1<Ï{1%â­3Õµ"ôz)(Ó±H(Ö¬-Û¿&Ö¹'q½"±Ê#®˜·³ ¦ÜE}ö*"‡Ô2PØKTå?{ë3pÕZ7%ÞŒ"ù‰%/ð:,(ñ‘)ô^!ÙŠ/)ܶHBè¹(CÑàr'ÕÞY8ÄÎbs¯°5!êÃMñÅu ÞÊz?ÍÍ«Ãg¿à‚'Óän![Ú¦-^͹)”àÓ—Ó½'nÔÚ(?ÛÌ5bÙº eÏá`,ÕÏoUÔÙ6DËÊ>#¸ÌBµÃƒ8¯Ñ‰<£á¡7rÚ¤ ‰ÕpMåbFX¤¢-BÈŸ>I´“WÇ:C,­/U-¼EI/à5IÁ`E"”IA$Ùi56ÕLH#ª¢>EÏÂQH²¿WŒÅÊn­ÏÞ¹»ßðÀ²Õèÿöîäýàôïøðîõîóðóíóðìøðç÷éíøëí÷ÝïôíîïèãâóäèÝ÷Ï©÷³Ó’ÔÁã¤ÞØÌ´½°nrÝÄS]c´U`W•HcRË\»Tfœ0\$sT&[+V,C4bABEP)hGAL6QFC#/H5T%6I%^@C)b0W O`7[_jL"^3c"MT!j+y>T<1G,Ic?(o/)3@4R$]4f?[.D!c)>K!..B5BE1'.4.0.3&!@?'<+\"8/J 8#\$S*)6!Q%0$;+2 B&:!V.6/[01/?#5#6 +'B3O;/E#*#=/%9$; 0%G9*HVWKI/B& Oa HC T%[\h#T&b,E*dFWs:ECx3[7‰R™§|–ž¤œ˜¶r~œ¯°…¨µ„‡¨p›¯§‰›‡„…‘xp_©‚…°—vƒ„­¿•o¾qˆ‚§v‘sŽ„Š”v‰`«…ƒ€ªk~5„~—^‹•{h‘p{c¦‹o@šjx< _9´‰|F¡•ƒoš’„X¢kl¼‡€V§|eœ¶{|‚ˆˆI¦›}tŒ£uršªaQxla©C‰_µ1žI¶{j›V‚Bvk.»i•!•V—@Ÿsp7´’Š8©€P«swKŸƒ|b‚xk­< 1£v…W}_~]tu\—celO‹5pLhI}‚nN6ifkvJ“G‹8LÂJ–A¥5›^£$‘?–;nu,|NœQˆ"‹I DuXš#lIw2zH¿KhZ :ytXmÊ™;TdzšCЩŒaÒ¶k\¼¥FL¿ÇQJǬg(µ¸I4Ü»&ɹ”"¹´},Ó¬q?~å—R‡Ã¶0«Ê“I§½²S°ªGhŠ·%Çž6hÛ³\|áÃQpÀÎVSÀ×Q2ãÅ{IÊă+ÞÒmiÍ„A­§w>»ÕbYÃÍ`@áŸ>yÝÀdAÌ¥BeÞ>LHè+A8²LOÊ7/!Êy6΄BÑw@É=: ²‡E5®ª=º•9’ÐÑ4dÛÛrXòñ}óâöéúêÎÀðôöìô÷èôêîêôòî÷ìòðæëééõéüâàíðïáÅÞÙß¾á抺ȚÉæš®ìhVÒÔm%Ï?"HÑTÊ3&3ô@2#Ä#è;$2éV5¹S1°p"'b@5 ª¤&n‰k:8·j "O¾3 K·AÄ"y’Y¹7¼++0¥,"ª33Ä0&Á0#M›++¾'´'–'$´&¯-6µ0&A³!1*yL)1W:,VFi(Nj'"C> 0?J&-N“*-+ˆ"+=ª+AÎÊW'¸ÓR,ÐÍJ*›æz$vÖsšØ^ÜÔKP½y”ÝŽ;iÃy”Ù…hȪ!‰ß¢$Š«s0ØÀ,ÒǼ½>ߎ-&áÅ7#ãÉ:+Ñž5#ÎÄ!+Ä¥:#Ù‹$.è’N)Ú¥EÈË;*®ŸEã·:¿à6.´»@¬°'R‡ë;4-À-2Sí= zØ\ Aåw&'Òa'"ÃJ/'æ&àžØ~,>Ý`<,Ä CF¬¤5(äz"Åœ-«¨«Ÿ4%Õœ8µ×"xÈ3¬ÄFÌš::ƒÃ‰ß&1r£%;]ÿ?(7Ú,Yÿ&c»6/#Õo7Ëf0ÔB'-çd0-Õw6É„$èa*<ÑÔ4׺FÔÎw¹ÉoPÏÇX:ÁÓÔäv©Æy£¸k#ŸÒ”¦Én­Ît¼Ëy LÏ¿"\Þ¾!bÊÈ(ѹ)ÒÕ4H¼Þ.ZßÑ\!¯Ö\5¤×aK­±8FÂÀ‚3µÒ+lä–9À­t1…¿–0­Án5£Ìp4tǦ>`ÈÑTEÒ¦=9³“M;ä§I3Øk:.Ä+GJÂb6,¹‚3/³i7>»Q\-ÈdD&ª¨4Q¡ÕG4°³e»²K‘ê½£¬æÊÔ™êõâìôòæå÷ñæëí÷çðîòçàñïüòòôÞæÿêðØìÿåÞïìÕ¿ñáß À±É‰Òª¥†Ó¼‰:ƒÊ”T=Ï]g8Û>FI»qB8Ã+b»—Z°#^&kj@ K#W'M8\<#A¼\_V>?#Z7871=W0VM%]g[Jq(?RH`"O%W SHW`!H tEY 3'O<e acTR3 H82b%N+S$G7X :&=#M3"GS+J%;F%:6C%"7%0.+A$_+?">Q0-RCx ,c ;T#,/L*6W>h=$B4(8B:+ H:>6C83=.-=*^P%??jP!`HU<]:"NƒD(T1Os15%aII/‰@q.…6 ‡—¬”o•—’mœ³™Œ®°l——¡€¦–¨œ£•‘Œ…­‘}”§Œ—~‹mž“q—¯†­{|¥©h_¥»†~œÂ“s™§sw¢vw^u”t¾¡‰| oƒR˜Ž—{‰‚uG˜¨ƒ`˜jgq¸œU‡†‹G˜€6Ÿxb‰•y{†‹m¥–ŸQg’uio“vhhpTyŸfu<¬~‰3·v:¦|‰\³™q(½Šl4° ˆ5¡””Bª{ƒ–:¿Š‡3±}O £uWxˆ†H¦bK”—oi¡£yp¤m`_„mS‚Z°_kˆ°urnrb]’°_lK•NxgÆe„9¶L”F¶;{J´G›F«lP­L‰:°Jg2©tz<³SŒ@³]|B¤g[[¨q‹Y­uÃÆk]½È“WÆʼnE™¼y`´UjÈžW*º½l'¦»‘C¬¶U3²ÌC’ÈbNÉÄ=VȺ£eœÁ¼6‹¸œ'ѦL†ä„Zcä»^X²¡8}¾µ?Tɳ„`ºPHÝ×Itç¹rBϹmn‹ÖrBß­c3ĈYÄÌh>¦¯qTƒ¸•HvÐÅEª±?NÕŸC,ÑbR4ÜK1,ÒC!¼['¾›.Æb< ¥ZOσ#E‰QV¥ÕX[ɉWÖÅXXØÐ5[ðÞ¦ƒÞÿøôóâÏÀæèÃÐéëíùöñÛÓìõåçïëËÑòâÓÏèïÎÆåøË”çõz0Þà‹¿÷‰&¨Í‹·»åI$¼R+¸Œ$Ð’1ÝsM‰$ÈŠ ‰ œJÎCÃt¨$XÖ)B·8* $2Å8à.; Ç%Î"<Ü)%»/7 ×-%"£8"ÉI% *2¢#'šC ¤f‰!E'lr Yb'Oe//X`)%§)"ˆ/$(-T›#)&¹"-†",'­-+$™24y"&’&8'ŒO$"W€+"M¢(%^e)i–.\+:ªN‡!%%Í%!®H­1/HÏ6-EÆ4!µU*¶>Y!(³`0ç>.Iä¿,9ÄÍG/¶ÝWDů"IÝÆg>ݶaEÖßHMÙË|,dÕyI‚Ó„¤ÂB•¤~+€Ã£¼“m¼—c®©wÌ•"mÅ‘YØÇ,½È/%ºÃ3Ü£'<ïÏGÚË<-Û¿+%µÏ5C¬ßD.Ò´Cæµ9=Ø¥D5³×D¦ãR4ÄÓC³£ +°Ï<3«ÑX$µì>/̲$NÒ¦OÞwÔ§2ê‡ê-2¾ŠÓ­5æ¿%ã¶5íP7¡ OÍ°&&à²BÁ¥D.´±M§¯°·&vª)Ÿ¶7<¶¨1ºË'!‚Ïmæ3%p»8"Jä_Eê<[ç[¼\)1Ô„'ø‹20Ü?43Ý…"ßu6Ûs+V¨Ï]jÓÞiÙâA4Þ¶23ÊÐ5?˜ÄZÂÞc ÀÜU·ÍŒªÜe¤×oM³Á{©Ý¬)¶Ñ­?ÂÂĄ̀ *à°8[ÆÎHØÃV¶Ò`;æÒ`9³Ú.HÓ»+(ÊÛ`-²ªt/­Í9CĹo0ÅÐj"ˆÚwŸ¤oSפ':Ë£$>Îœ4hͬH)é‹1.ÜH)6Ø867´m6IܘE,ÒaW:ç[M(¶˜7=©/,«°,i²¼ZpÙ¡o½ÅÅ—²óÝ ‘éíÞåêÙíîßë÷ýòúööèàòòí÷úùåæýòøòìëíêáÙßöí½Ã¯±›È°‡F®¨wE9½©LkÊWZL­XGYÞqFW|,H;¹_10i2A$%V83HC4-GJ.C9=H?OBAE\'b s2LZ_#EEr\#XAHj>a+z-G,q G2fN aws"a je +j#c2d"]1HN%$S(uF)`$62V)<(PM#1E!M+A(Pk0-%3>-&L3,72U 9*+RRg g+Y&k?]xOi E‚5Aƒ*A#{+S%€=JŽP¤wyƒ˜–y²•±Ì¬‡¹ ¦¨“¿¡Ž…·…†–¥–t³žh‡®‹[“¯–” Ÿˆƒr³©†ˆ¥]r‡ªª„’¨§k¢ €y›P|²„†šƒ„_‘–ŽŠ„±…†™}|Š¥†d…–¦‚‚o]’„…e’sƒvƒ‰qdv^‰Ÿh”¦´zu|{€`owˆy¡ˆ˜o“S’€_–f~©a^ˆŒu‰K§€U²ˆq?¢¤~T§‹dS©€Ž]³j‡}Ÿjm_p§|N¨ ri£tkW–zPy¨’ca’˜/gm­qzss\~Ÿxqip™TšR«#=·6‘b¯?˜G¦…;µ.†MÌd‰RÅcGžOq<9iNÄWƒ@¶Œ;¸LlO>‡u{]µÔSvÇ®vYǸ`a®®2uª›Ir²¶[UË«k@ǵ=LʧzJÒÏcM¾µVyÏÆk<Áºœ.µÂ@°¸°.²À HŽÀ¾;ŠÌ¹7‚´ŸPn½×aiÓÃXwÇ°czÈÁS@Ò³_EËÀdBÉ»GeÕ©€iÒÁ^>ªÉtMȽ`=–á£Ymäž)êŽ0•.14ÓJUXÎ?5VÄ%D@å8@¥vJ@ÞE5GÔMAEÂw=9™•2g§®JŸÒŸR`¤é4JÖÒzì鸰õìÜÅíäÚØòöáñìðíûüöúêîëêôìêøèìïçæñìÕÆþø¢IÜ×&Çå‘—¬[&kÊ_)xä]TÖ)3b½ŽLà"%CÛ5CæY%AÐ5-4$gU*ž`8My*J\=–#š\7e$I®[É' {® 2… 9º"\¶1¶1-¥'(Ï)+8˜(Œ-” 7Å1#´'* «2&7¬!%0ž$²P/)¨zŽN$'†7 'r`7 \T(%^^"+:’,#Á*>².&OZ1'œ#.‰,*2š0¹)š29£5*2Ÿ,!%tG'C‰14Q&"’|--Z„`¨$He(*Ê, ¸&º?­# ±).®4*ˆ%»;#¨:,ÕKC@önQ|Ô·5X¹½/KØÍHˆäñK6Ãç8CâÚ*[ÝÂ=µ×„¡º}>¯ºA.ÜÄi/ÝÖƒ#¸ê†N¨ßy(´ÙšÈ“ŸÙ—šÁg*ƒæ¾O;§¿+8½œdܳTPÅÆHXÇÇH[Öª"Kμ")¿Û)ÕÔ3ÚSƾ:Jº±9,·Í'G¼ã>(«»'1ÂÜE¨Ã=šÞ Gî˜Vïs{ßxWäž+Fé£2'Ä™"&â)Ø0@ׇ!,éy(¯°@Æž'ò¬'?é¥[?ËŸ@/È£*(ÚR&¿Æ&ŒÔ-²² MƤ:,ÉŽß'&|ÈkÕ:6Î5.pò '†à.&J××yþ](6òU*ñd&ëˆ,'Ö\67ÑÆ6\Ó¼5ÔãJÁë<2ÃÕOãÊm@¾Ð` +¬å“˜Ó\ Œâ‰aÒ‚sêv2¦Íž"‹Ï½ Tݸ ›Ú½vÐÎeÒÖ7;ËäEÜÆ;)¦ÊdQ¾âa ›¾13ÔㆤÍu$Bç‚Lнs)—Ñ‚¶ë{ œÜ&|Æ› NÕ³Tʺ>RÉ¡:*àÂ&-ò¤2,Ü™>"ß±±´*(­’'3ÍC ¬®?§¬=ªägfɾN,ÀÁg¡ÐÑW¦áÞµëæÅÅíÜéÛáçó÷éïÛæêöñêõîôáíÿåáüéãæõùèÜäïÝ„ÎÀ·Š¼Õ²„ʼh=Œ¸˜*NŽ1>×p'AÁ3QYÊ-HBë`_²W]‹_JÁ,DE!0%R<-B':8;%?F+A-PL5Q.=>OYpV8W+K | 7'\r!]4A:W$8+7+$@1)37%0HH?_D%UU$_"$0k +M$W@g8dH)^B\>m@J)4N9$S(B EFK+/$M4$§KŠ ’EµÍ„ŠÃ¤x‘žƒ˜©À Å¦Ÿ›Š¸ŽuŒÂˆV€¡«a™‘³N¬¡€«†„‘—¼Š™¯l¤¾uŠ©¯h_¦ÅŽn“¯{\­¸n_™Ã°m«Á€j¹Ÿ‚k­¼Žf©ÀœŒ‡½ˆv§Àˆ|Šw‚šx}¢„zŸŠ-±tl§¢p„ˆ–…ž™qpm¦l\~»§Ž~€dfªœ·{a¯ˆ†F¯‰ˆIÄyŒJ¤Ž„tž§|\«_]’‹ƒ8±¡7‡Œ}/¡f€8¸µ|hˆ©C’2““€g›“V+¬—ib€u*Ÿ—iU\ÎsTj°y\›jmš¦^Whµk{^®Z…N¿yqH¿V‰_Ç~RªOr=À“‡=¥qw4“q™SÃe„1°h”NªzŒX—Wc+¨š¬àbx®¡mNÀ¹œxƤXh ºWt´«UDĵ\]²¾uE¸ÆuYÀ½~_¤œGº£ZTÒ®VN¬Â“\’’–9–ĉPµÆ³cnØ´ShÀ½X€©¬MVÊ°yQµ­rHÉÇ@\ίjAº¡IN`sUÒ·]B¾Éž3ÇËvg×ÖdFÖÄŽbt×ÂOsÕ°a@ª†O)²“L1×¥S5ÆnJUÒ•BHž˜P@ˆ‚EQ§rFB”‹+_¼¶VV¨\VÙÙ]VÔÝT\ºÌGíã[hêòÇÄßóÖ·ëÿÖâùéËãîíÔÊêùáÈèÿüîàðÕãïÏÅáñàzÕï±0çß»H±ÚU'­êŠ:|³(ISÝ©,ÊI0ë*^Æ!*!³i ã^!4á ' „_!r{ ¨Š&µsJ»&h‘.Q‚"qy$%;».Ü3%P¸&+¨..‹.JÉ pÑ*Ã5&Û,&£)"8™2,&“0(Å&6Ø-.Æ8)4‰’*)!’1+2D0+|….Mc`5x€&!j›™((*²+!5¸,;›:qÍ".{(È!%/½0"!ÁM$<¹86É?*/°L&+’#Qš9¢l$Jwl¡(&@±W¨#¿76¼ $ZÐF¡$#Æ8+ÈQ'0×8 *ÌSžL$þG9AäÏk×½T%ÔÅ;bÞ¿/còÊg-áÍTCÕÆ@MÙÔ‘0Ä·–@ÖÄtHÌÔ:6¯à• Áæ€+Íϧ3Ò¹‹[»¥TóvU}Æ$²Ô·Þº=0ÕÃ/GקLß»àº*$ʺ\ÉÀ7DÒ»HѼíÊЭF½Î5G¬ÒHÚÅ3µïO,¨áQ<»ì5/­×ƒ9<îÅ!AÕ­"cÖ„gïÂ5áÏ(8ß»7à·&?ÚÇ&¦Æ#åÇ'+ÙÅ#®ÃH&¿¾7؃±¹?$¿³HV£¶!ÒÜPtá/¤Â%#¨º0µÕ"„æ:(Oæ2ráv5ÝY&NÚ‡^Û>%LÝ~)؇ãˆöI/6ͦ%ÒŽ% ¬s;ˤ0TÒ·)k¹ÀƒZÜÊ^HËÖ/0Þ¹¡Íx>¥ÍoµÍb0çÛy怱äf½»‚1£Ü§-PÒº\âÁšØ·PÆ¿?ÉÉ>JÚ¸)%­ÙkNÞÑU`ÙÉrδ:!µÙk Ón,Áá[*Òµ—9ÙЂ²Ë”TÇɈ!lÖ¹$AÎÐ(WØ03:G7Oa)L/K(:,K$GN8(ZI{YP)N;T2k>p-d,V>f"fIsh`4 J(/W%>i)A#sg+m#W l%€,3‡ >Q).)@L3<7=-^")7@6A6G4A>,M\gVj:$i+<9GPqw%2 ^bx!_w^(C(h+p-],cLFE;hXD%Z1NfSECN+cM`)M+TG*gbzhia2r'd'pP(}Kr+Y4w$LtE2#e,gBqD»¡thŒ¼‡È™™ ¶©w˜¯²ŸwΑ–t¤¨P²—ƒŸ¸Îo¨±±q®¯¢‹žž¢yà¨mϲ§|̦Âu¶¡’If±­i•»ª„y··vŽ£œ}‰©Å†s®³uŽž»Žm}u§¢ƒa¶³t€­²eŠ¶Ÿ~…‡žuv˜•|r’§x«§o‚–  `Š®a}‰®o’˜¡Ÿ‚‘½frp°”ƒx—Žb‹À…pªaˆ|‘yr£„~\›`g±xv²“`\²‘ƒyĘsf˜‹YR†˜€|¶”{?É£{p¦™}Nœ©`l¡›ZaƒejT±mpkµVp{†K‰f·cka¦c„G·}‘]Éh…Aº†g3µˆcÇoÁm}?Дf.¾E‡OɯoT¹Kb¥”UQ»{‚egW¢„kfµ“dTÒžZMǸUj²£ApÁ¨Rlħf=»¢JM»ËZz¼ŸaV©£%sÁ¹ih¼¢¯Es¥™;°¼ž@·­¤G—Ù²:bµ–@k³»m‚»ž;,³»hmÚÅQ…¦Ÿ[VݽtgÙ´YIÇɉEÁ¡4<Ä´‹Nä¸`B\²ÈX ÐCµ·ƒ4œàjFŠÏœ?X¿¥\RÄœoA²,F¤‘_RÃm>R¿c9A‘°\J¹·:>¨ð>ŠÂ³>gÎÖ…|éÞ¹£çîÃÏùöåÆçêëðõìèóðñÊËëâʽöåíôäßÜÉ÷áÔÉïëÒ¦æñàêéÓHØÁf88¼{JAÔv.‰ÁRÉÚ,(9È?QhÀ$#FÊN",ÞhC¼)(" 2"%·x$,€‡.#mk)*¥© &?^%N…+1U@'(Cˆ"0³$?©0I+%…"A£/&l/¨(/%£++ˆ'-+u/('‡0(”"1)£+&¨+Ç 13ÇL/¶/ †4"/iX&pQ=¶R+Nd%/TV)+R^!I›2"Ÿ&3Š4'O…!/¶!.31É07»1+Ž' ±F#º!zo(S™8l„'•t#.X¶4&s½%-O„ ,Á:, 5(Â)§Ý€BÃÔeNÉß-ÉÁm Ìáo)¹Ô‡?ßÍP$s检Ԉ1ävÀ¸'HÄÞ1&áÈ/3Ђ-8ÒÏ,OÁ²O.¢µH5Ñ°V ¡æ0#Å´7$Û©-"ÒÐ5D°Ÿ@LµÐB†ÓÌ9;±¿5‰êÝ —êöÅéîòäãúàæáíøðïùû×ÿöìóíðõòìúÿðíóëìÛìíðßïìáÅÓþÍ™ËÜ~*R¬.@aÖ‘QXÙf+GÞ¯E'ÆVLIã–7j¿"T ®@d»+) !@#QG6C-,)7A-*K7NE[!0*)A9GcM/7S*W *c Z$1C"b.'mC{8f.%s. v7b#3Z+m82U/[cCdEmS Z%-!@95*3T+cM&,RB!>I9YDI6[='U/KIX;"jM h6X2]gZD^LV)e.l)FF@66J2FHZ:ZN˜ª¸†•“•…”¯ªžuª¯nR¼ƒriÀª_d§Ž‚u“šv{ƒ—‡lÀ©†n™yhË›sF·Œw^¶{‡wˆ¥iV™cW°¨dP‘¢}ƒÃ©s^²QdŸšbt5®STg½`T—¥xR‚²hsY½hyYÅ‹yiÍrm;Ø}lOÊ–h)†oc]ÆŸ`3®¼XC·¬U4½vgR¬³l3¸´K5ª¢b?ž¹Ž¬keÀ™u¶½ˆnš´|{¢±es¨¶ƒXÆ´tJÌ´“]½Á _º«–H œB±ÏI°Ñ¢z™Ö£G³·ŒPg©BÀÁWÓËr{ÍÂD–Ò«ea£¨UWáÐuc¾ÏKhÄ©a8¿CKÖ½mO»ÂET£³_¿Ï…>¬À\eµÆ‹9«¢Nµ–3G±ƒ>ƒÏ¥:gÆ›=gË»*@ØËSa­ÄM6¤³XWÓ²N:­£9KÃÃEPºÜT_ÁÏXX×ä?•îÜ¿²Ûó®ØçæÇÆõñÜÃÝïÕàúæ¾òøëÞÑãùÐ×íðÚÔäìɸæéɹéíÚ¼âçÁFóÊ”<‰Þ89aÒ—C½ +CÅN<7ê.%k´Â2{ì$+÷n)*ó=,Þ44¯U<{s(v‰ŠXŸ[`.[u#7™™)Dº ”/&@­0E´#-®+œ,"PÀ&Ø:!É3]È%DÈ +%‘4;§0¨êPTäÓF#ÌÛ|)È°F»â^EÎç‹2mÓŸ?dÜ®uä+eÅÔ"ÕÔ>"·£(4Á¹:/ÞÔB ÐÝA,θ&BâÆ'+ÇÄHDͨNϼG¾áUà±<*Ô©*6ãÂobôxŸßg'ÐÖC³Ôf"•áz0‚è‰sí˜62æ–.Mß™Xª‰nÔ—ÙÚ)£!/ò/<¶ª Ó®+ê¹¹Ô5;ä¼/&×Êsàäc!Ø×kMÙÔ'4ÝÕ$®Úk$Éêr2Ó¸žÊ^ÂÜh ÛÖ[«Ü©NΫ|à¸,½áÌ`×´7tÑæ*LàÇJNãÊoR¯Æ\*Ö·C]ÍâQ:¼ÖjØ6…ãj0çŽèÛy 0ùk¢àjC]ÀÊdÔÄQ¾˜QsÇ›-Kâ©!TÍÔ7G¸²GNµ»71²ŸMJÌÕ39Ñ©:M§±8EÁÓIcµÅJÍÌű ÙØŸåêÇÜèòÞîúòøâðàìöçîüïìðÙÞïëðõíðûúçàêðÿéóîñæïÙêøÕ‹ø»çlÂÄŒ9WåQf²ßžÏÙu(:Õ5[J¼‚Wçª^&¬—RC©j-N3V"V9:P( ]C-DE+:2N#4$Z-222'6YD7H1b.&*“ AQ%4%bD(g!&(j2V3%‡ c~W uNYn+SzW`44\!3o**_`N&Zl1i,u*i#76W>76+z/O>FCF7V4VJD:Ia-X b_P(Z3FS6`#w#b!T&} OaQl"d(x(e2R+…*@+WS*S/KFRr?? b_(POW5FVl0HWy!O$Œ];b/T<\N{¾Î6M¾¥_Qɼ^cÊ®SLÄ¥[nÇÙ\a׳eC³³sM¨ÈjMÔÔŽ8úz3‡Ü…=ÖÅwG’;Z¡½˜+¥¾£9²ÓpLb½¶E\Þ£qÜ­KiÓÞTWè½PVÏ»*wØ£@OµÉ[rÍàM^ÆÈ.…íïrPïã–`èëšÛòóÆÎìëôîëõíæîéãïúìÌÕìïõö÷îíñòòòîíïàÌòàÌÅêòÍŒëã–KÄѪ*mÖ|@ÒÉÑß~=OÜO7FÚ‰6ÄÏ<Öo(ãoÆM¦ ¾›!žƒz‰ Ku@|+Ð) ?º3Ä5'9Ö3.%Á8*´0.Ü?Cªx.1© 6 ‚/£g;l²7nª-%i†!1Á.$;Î1":Ìo·!3PÙ119Ê+)'Ö<'8ÚR2!°Z'6íd4Kç¸Fyâ½?)Éê7GÈËLâÄ=\ÒÍ[!ßÂSÇ´Z­ï}ÏÕŒE¼Ók=ÊÑfµÜ‰¯ß‡!Z܈,ÉݱÆá¤ÀǦ!¤¿„uÖ°"oã´(jã­JËÉ¿}ÐÎ6gмKTÚºhׯCÏÎ"[»Ð :ÓÒ ÏÅ45ÏðVÂÊ8%¿¶D-»ïCÍàU/Ù¶Q +‡ð¶ Zê™uÌ”6Ь4fÙÑHHå·DIÙÁ-cǼ%DÀîE.¤Ñ\Ù»<Úí+hú-K½¿"J¨Ø/3ÄÉ;-Ÿ0%Ñœ8µÉm„ÕBžàCß´Oép%•Ñ_/eÒelÛyWæ#Mû‰!Tå•.+ú®1ÔE(ä~)BÝz4ç *®­ Τ/ÜÈlØå;±ÙYÚæH/èÄCRèÝp$«ÄsÃÌzC£ÄpÄÈ{¾Öh(ÊÀq$½ÉµBÃÈ{æ£7NÕ¼+6ÈÜ0XÇ»1DÁÊ&NÔ®b/™Å|8ºÒ,4ÙË7Y»ÃdÇÎ]-Çأʀ$ËÝ‚-‘Ö_AÂÙK9±´¢+WÉÀ3@˧+\è¦,VÃmã­/W¸°J8½ÅFK¬Ù`N½¸Gb·»)TÇ¡NZ¬ºEh¬¾TXØÈ{ ìÚÙ©íØÈÞäë£Þíûùæðéêðöñçèóúëüñìéãíïóëèîõùø÷áëøéôÞæòäÒííâ¿×Ýš`èÁ‚Qs±˜C˜¼‚U^ÕsG\Õ€X£²¸[g£bt-f+r,R1^?^J93UET9=179D/0[#&G6<%T&:/81`T&c0BZN.q76o1U0#bGGg j NWDV'd*I#c"H'^ /z=b6€%:n-ryD6L9J'A?6U\/Jv$__!S;~PPBM1T!w0Kmam6H.˜3cv+]aU8~Es#fGP-qN)B\JX-kFH8Yl?HFg<=J_BS;~ WA€4]4w%:Lz.N=¡6m:ˆ3n*Œ-\2|Du&ˆHL%Žf™‚s† »‚Œ³¤¥—r¥–‚x¾žŸ™€´§¬z£¾Ž¦œ¹y²¸t®¢¨­™Ž·›±„£Ÿƒ€€œ”¹®|£›¿†ˆ¦¯y‰žºw—›¼zœ¤¸u¡›«“ƒ˜®€¬ ¹‰‹£Á’y¨››°•Š´Ívn“À}_Ÿ©„”¡–…³»”˜–¤“­§•ƒ”žœ——¢‘ƒ™•‰£”t—Ò‘n³½’v’žž~¢¸…•¬ Ÿ€¬ž{¥¾|ŠÁ¿oƒ°¡Œˆ©žŒ‡·¶— ’À‹À¢n‹¿k˜¡v“¤°{Yo¤_^˜´_ªpdˆ™abª¡‚>ª±u…|±xxºƒ‰aÑ“€RÇ…“Q®ˆ†]¾‚„J¸ŠdV¾‡rX®ŒK§`s7®Ža:Œ¤US–p;¥—ÂÑ-b¼¸d<Ô«{hĬroœ­8yƯtOÑÀ|:˪g]׿V â¾¥:ÒÂs.Ö£a]ظ²(¼¥Á1©ÕœO‘â™D§áÌK‹×ÀWŒÄÎ3‚Ú­R?·¯^9¢ÀV_ïÀÌ$"KÉ4-;­()SÞ4:'Á,%\À)%aìe.Ù}ls(>Âl!'¨ˆ-˜©*“–.¤½&#!º&${´ Ž³+‡½"/^ß0(JÕAJÛJ'WïeBéZ,XÕ·E}·¯1OÁÏPGʪHAäÍ)@ÁÎN4ÉÈW;óE_ʼk¯½„F½ÁVTÅÂ-¾Úˆ ¹É† Ó†DâÀz'«ã3¸ãL‰ØƒB¶ÍªrµÐœâÄEqÚ©0žÎ¸ZιkÒÇcæÎ#BÍ¢/{¼ÜR<˲z´¿ÔÎ<_ÂÄB3ãÎ12·×S1ƺCO·ÒpÜÕ‚k飂×Ê€Ъ oÖ¹MQ˦MÍ»0ü$;ÍÓ;@׶5ÓÁZι+º3 Ω"ÄÓ:ÄÝTÅ«R2«Ôr(ƒïd¾ÞSÐÖ6#ÅÑ{®ôz+â„ ƒê³0\ì§Záš^íxSç 2å§1ÚÛ2Ñ£ 8ÌÝ3â±>Læ¬.îÃKFÓÇ1LűlíÃc'Ð×RO¶ÜR,¨ämAËÞ_àl!«È—-ÓØ‘£Ùq-­Òp7ܲÇ!™ÎÊsá¨8KĹ9eÂÒ*[ØÚZlÒç>HÍЊ4·©m(¸¹B7ÎÕA ²Åk*°¾j%ÐSCÏÊ—#p×’/ŒÕ„9“ÚvERÛÉ!E»È%lØ¥-œ¶¨,YÎÈL_ʾM^¾¯5G½ÌES¢·MOµ£A;ÆÚ9j£µ`}ßÍssÅÇcËÇéȲßåÄËèðÊèïõàìÞîöóçôññëûéýùøñëîö÷ñïøîèôòë÷ýçÿîéåõõðÞïåòäâéà»ÏgFÖ²E~¸™Vz¦f]9»rvêºÆ´ÉÎwE{¥bXN}qp'L49 `?9Q0(]2?2>`B9H*.>3$+/O9ZJ"kKXg0T*d4V')1B%WNBT‡eL~'IK~ T E<odkS~0S$i"Z9^#S>!I![DHEPP@*X7H%eKJAqF;6>99.xL-9Hi;Ut)Mw[6PaM:1˜J0ŒK&‚'V5¦/P,tH2,SI¤IZ.‘]B6]W>B’NA6_cEka3tb0{o,/3u&8O™?jkYk„FXBž?I>ž:V3œ.C+ºFE9™M£ ƒ‰ Â~’²¡©¦ƒz{Ÿ“„ˆÏ¤€¯¨~–¨…›ž—‹Ç}²º†x“­„†ª¦¿¬®vȀĒ·¢«ƒÇƒ¯‰ˆ‘Á˜xª²‡”·Œ™§¼—‰Í˜e§¦ƒ}˜³|ˆ†¼˜‚’Ê’¢†Ã’»‡°£‘‡¼¢®²Že—Úrˆ¬•‚žƒ‘¬Ÿ‘¡£ŒhŸ—ˆy¡ŸŽpÉž‡V“°{…›º•>¥¹{v{¼š‰Ž½t—’µ‰g³ˆ†“«—\Ž¹……Œz‚…|Ž¸|‡•‡Ž–{“…‘ƒ|ŠŸ{uqª˜}‚©†Ž‰Œg}|—~xa¨”™˜”}šˆªh§…®Ÿ€¹‹¥‹±y@¡c“^¢‚€d¬tˆV‘œ„Q‡„|e—…nI¦›{^—|~e‚}Y…|-z¢Ó\SÍÆ`(Û½x6Ó¹Nr¥­UEÑÖg\º±tV°Îƒaá²t/êmQЩ`A¾Æs<³´)—£¬(|è«,¢½Ú=}ÀÄQs¼•;tÑÍ;eäÍG:ÅÁ^^Úª8VÚÊVJËÆt^¿·m¤§gLÛؘ/ÇÙ”6´Öj$¾éj“Õ8ŒÍ¶0£Ê©%Ñ·Å£é«/–Ò½)Ô´vÞÊ=DÁ­GVÛÀ.”ÞÆ6\Á—Nk߸LaÝÝŒðκƒàݾºêñ£Ûòôáòàåíð÷íîôåþòóñøúòìïòò÷òôöïæÙËìáõìøâåûóÝéçîæêÇÜñ¦3ŠÑ8³Â„³Ó‚LÔÈI+©ê‘L²ï}-Íé]KÑêN(ÑÄŒ0ÄÁ’!ÃØ‘CÃô‘ñ‚2¸è™E¬ò}/¶Ä£Aײ0;ê¶M¬À×–ÏÖ|Õ½ƒèۊ̼GdÃÚ$CåÅbɤ0]оZpÞÓPYÖ°0WèáOZÍÐ3VÌÏ]H¿âD;³ä¸M˜åŸTVÛ‘ ã“,Ö°}À©>€ß¥ zƶ+'ÑÁ!CкEÓ·FÍÝ.¼¾;CϹ(S¯Ø5¿Á%6ÞÉ%5ÒΩޕ §êe­ô[ßÃI‚åS'®â• ‘á¡2uϧ#Còœ!Wä«%vî‘;ñ¾3ØÁ*Þ«9ïÃ2"¾« ÔÀ$Ó¨$'Äó#cлZ#µ×S-¿Ð\À¤0±œZ"ÉË`¹¹W½Æv!jÌÂm6®Ø]'ÐŒ9A»³$tÒº2_Þ²)­ÌÕ%\˾?RÏÇ0c±»m3¢½]8®Òy#ºÔBPǯ{&µÏi)±ÀŒ)©Ç€8uÛŒ9yÀP’ÍX+˜Ç›FUѽA=Ö­8~Ö§UѲ¾RN¨»+ŠÊ”IbÈ»FV§§QA£­_ZД=_ÇÊHYÀ©Pnºß¯ÈÉÃ¥¹ïØÓµïíÂîÞùîúéñßíóíóãñþÞ÷ñäêó÷òîðñîüìóòÜáðæòßùûÿâàõëØâêÙÄéÆà ß°cŒ¨¢Qh°5X^¿nNÒ¦«wµ¯œešÈµgfœ\Y>ÌvU.AH<(L$H6Z85HS/N&/8.<'v8];$W)<p Y]!J -C*5^#.5Y!X*J&=JrY~0,6"S{ Vo +N 2U@#P4&c C4NL"=T A13/219Q(/)c]O$IJBK@.$yS4“K+]^CvY7H†K0D'‹IO’FJ,™0G5œ1F+ŠCO4‰g-!s^E8oFM7”Qc5ugA5SpIGu]LBO‘<2¢4=•=Ep}+EULKQ“2/B§:NA¯V&4›;‹Tœ‹—˜‹…Œ½ ¤ Šsteƒ“™Š¥›ŽŒŽ¨ •¬“‡™…‚—´c–¯’„•­©“’i†°pƒ{«•„a¾‰‹|³±ƒ¶¯xr­™™Žª¸pz¿†²“«”‘—¨¥ž¬t—s—Ÿ‹xµ‹—Œ³€š}²“xv–‹¿x¬~ž†«Žš˜’”{›œzŠ¡…–“€ ¢k¨±‹y‰­«€‚¸y‰¹v›Ÿs†ž‡‘z¬Š‡Ì™~”º¥x³Šœ¡¬~”ƒ °šƒ•š— z’«˜–¨¬”¾“™•˜«}’°¦q†§›Ž œŒ‘š®‹j«£|Š€s–kgy­d¶œ–¡§¶›‹œ~[Œd„‘‹`…HwˆWŸŽ|[eyR[‘T¥ˆŒ_Žg~fŽ}{VŽÈÒDT«ºS,º»Xy»°Mjô—aNÖ¿\TϲYAÓÃ…e×ËnX¨Ïa]ÏÆ`TÄÉQMÛÇ…'©Ÿ0¯Ü±=kÈ© ©µ´>×Í\‚ÔÆT–ÒÀ\5ßÉX ²¡M_ÏØ=rì±eGé´ZNÄçv9œÊA3–Å‘T¢Ç´éO$°Û…(]ÑÈTlѾ9§Æˆ½Ý­,_ר:©Ù«6xК?R½·1dê¼P?«¬J¶Í»;aäã'qíÞB`÷Æ<‡Ú籎áéÏûç»ðôä·ËéñüëîëÅäðøÂãûîÒËßõ÷íïà¿ÄâìÔ¹áíñäííÄÖé캉ÙçÄÎÅ‹Yªã¢JÃÇp3¯Øj>Üó{ ¯±B£Ìœ$/׶A(×P$Ç)%$½e)*Åf" ša(š\,ªÇ –4 i u8&6‰!!6¹ M¨+*5§29±)9¸1)G¦7&2Ÿ7(#5>¨*Gº'($À"&!Ú9 GÉ9/9ÐU/)Ë-+Ø%25¨6.#ªQ&+‰b«C!p œn#&U'›{4Aµ.jµ!,Å€+-ˆ“)B¿#bÏ#58´%(AÕ/)FÄ?3]Ü= uÈ< «p ƒŠ!ÒY-.Ï}%-c){)DР$6OÂ!%£0!¡&u$%të()2´G%SÍ+57Ã6 9ûh!EË¢"^ê«%1Ï«KRÀÊ.h×®&QÐÑS\èÁk&®ÉBLÕÔˆˆÒ„—ÛzLÄÊB-ÀÒ€ˆæv@¦Ê‘/¾Âw£ì¡‘Üm‹å~G”å *—ÉÆ+‹·³RÃÍš ¢áÌXÙæPݱtéÊ4OÊ»"kØÈ~ä‹¢Ó=<ѽ)>ÀÞ6,ÐÈ(;Õ¿6RÕÃ''ÄÀ6IÓ×h'|Ú¨(q×›(­èeµå”iê±Aåª6à¡(×Ç"Eà»$Ø©Sĵ9ÛÄ(ÌÓ'.ÏÀ1)ËåbÉË3ȵ ÑÞ>„Ùk °àOÊ®EMßÛ^šÌVdáˆ1‚⪠_Ô›">ê£)eéwâ¨%GËÇJÔË5íŽ +!ÚÍ0ÚÌ(ìÊ)$éÖAGȼ SÝÇK$²¹q8”ÕP6Ø¿#ŸØ€$‡Äk;É×Z?ÍÀ’6‹Ë–¹Ñ(µ¿z)e̤)ÑÏ/®·0pàÌ F·¼:ŽÆÓ4qäÉG|ÇÅXÉÉYÐÒC‡Ï¾VF¬´£GœÍ\C–Ù€3¾¹d¤Ã‘ZnÓmS•Ò‰#œ¼È1€Ö¶m·ºµ]¤¨±2…¬ 3ŠÒÜQ^É´Tn³ÃT^­ÏjC«ÚV€¸»A~»²\»ÅçËÒÅÑÎÚØÕºîäÈÛßöôéèôÞäÙóüñîïöøáôèðíô÷òïóõôðøþöæáêôîãùïûôñëåìÚàîÔëÃô²ÀFÁ¯rYÝ¢±»ª‹Q\¯ž‰Ç¤«oY²˜ejÍ‹bXŸu³‚S#i&8Š>]7p:-*Q*@\c +.&?%0XO&4]cN%eJq-1b*?D 0#GJ 0,FdG43E=n'aR+w=y Z‘Z2¤C.„"4(Š".w=v>E+d(&,~03žA/DwC=:aC3$Ž[I;¡ ,\z!A…U-5\e+4‹9e£[/‡+V-œ-VMœ7J¤*LϺ![¶ÅWjçÙBAÅÔUCÏÒ\Ož\ßÔr0ªà`@ØËJ(ÃÑ«-œÑ¶5ÉÍ©¯ê@¼ ;³º¯>®Ë¶+†èÓ:gÆÊSlƲ§ÅÔ +lêãuìÛ[^ÒûRŸúÝ»Šéë¤ÊóáÍßùèÍêæïññùôñõëÿóøìòòëèëêçßäéíðîêêÝëóÚûõêøô齯äà¬7ãÐsÕÚŸÅßwGÑÖu)ºè…‚Ï™7ÂÜ…·ÓÈ&8Þ{$ê/#¹-'ƒE&%Ín +†piw,3S† #?h#YM,'9¦(?¬0—'¢¹"+–% =Â(Ap(%:´=*%^43….:)Y1&%Ð/-)‚¹+#Ñ/ ¾)5Ó5¥"0'ª0†K"5' ž9'Šv$)†M.tC*D¸(*„''hjfDa¸.iÄ&&4¼#%iÎ-4]Å/99±(+9Ë(2¬o­‹!ºh-ÓZ—*§Š'©w! +ŠÍ67µ&1X&es%*rÇ(%>¯(&(Á,4%ˆ@-<ÀM"GΠ=[ß±§ÒË/YÊÃBKʺFiÓ×–ÉÐNëÊ2GÑÆ1ÖÇ7WÝË?`Ì´@Sê¿5NÍÆ%F¼ÖÉ oÞ_’ч¬ÙŽ_À¯SˆÑœ‘ó£'…¼±YáÑ€ØÉU«Ø—SùOØÁ,)ÓÎVgéÇ2?ÇÆ"bØÞ ?ËÎ4ÞÞ‡ žÇ\œ»> ÌË6¤Ë{E¦Þ›dÚxܼY»¤ZØ–Y߉"6ÛÀ ÞÄ4"Ò¯ @Å¡)Õ ¹»àÂ>#ÃÈ.IÊÃp(ÈÐ_™Ñb9 ¼"EºÞu#¯Ôm)²º‚,é»s9›¾“ {¼w-«ßknÈ‹5Ó¾=>ËÇ0.ɾ'-ËÒ/_¬ÑNNÀÁ1bÈÙl[®ÔcfªÑoQ­´P£¸sXpÂy9’Ä“'„Ák-RÓœIuÂ]{ÀP6ǃ=V¾Å7RÓ¹Q—ÂBL³¦>‚²¹;v¿¬V¾ÓµFh«ÖiYŸÓRQ»¶a½¯œc¾ÃÔƯ½Ã}»¿Ìº¸ûåÍÚ×÷èçðÿëëÖìåóöñäàòÿäûóïñðììôùðâòéñòãäíåîçÿííãìôÚëÿèìîè±Ñ©®¢dЋº½Ã«z}o¦«Eˆ”Žg‘ž¤ki©Èdt°Écy±#xFuf'e21j!8/K7+#'1'F/P5<,B=(5">/O*4#L%: Q:\[26K"I"E4":!_&EI(_@O45I L"NT |YN R s,Y'F0—.ScB7#VEp#B$MC< QQ4W@9&V–!;p4Vi"3X]JWO—$5d¢ ;1‡.5J”(MI#UE›0TC¥>4†\)2˜YTˆNQ,®OM+wO"0_kK!nO`;]¦%JBŸ0,LyB/aM%-H—)F0†7’#Ed>C8§S‰~™Š§©›ƒµž›ƒˆ£r­Ÿz¦„˜p‰§†z“¨‡{q“}q‰´‚i„œŒeŽ°•s™–n€°˜ot¨|qp¬pvÀ˜yx´šŠw¾uŠ|«¡}Å e°•–ˆÄ›Wx¸yt¤ ‘ˆ¹©|z§œˆÂ¢§m•¥™q‘¤y‰·x|gˆ±”z–¦’ox¤Ÿ’ªÃ¦\…ªš¬}„·‘_„¸ƒ–šÒ¨a¶œj‹Á’Ž…¤‹v~¶²‚o°™]‚‰ªŠ°Â‚у‹Â„Ÿ§§|ªÅ—‰‹˜wx´Ál£˜u²¤‰\Ž­¤Š¬Ð—r•¾™€’u½™m¤­“V¢Ÿ‹sži~yƒžu“¬¡„x“™‹ZšO™ow]†gqy›bˆt‰u‘k’y‰Y„tŒ{o{’e‹t±Ñ\ŠÃ·YLËÏ{fÚ¤YYÀŸ0u­Þ|V×¾S?ÏȈåÃd'Ú»†!¨ë‡(ĸEMÙ¸V!YĆ*lÆ·8TϦU®Î¹7¸1~×ÐN{»£#5³§4:ÕË:q¨¦.wÖãV7²ÍNMÏëf#ÍÑB6œåf%§ÙR1¨äK+µ±wT@«™]Ôœ!Žz3šË—­Ì¿›ÅÅ ¿Ÿ±_ÞÜipá×#ˆÐÊžäµ']ã»UPéõ_tàðŠSðâ›ÄíéÉëìñ›å÷ä±ÉìôÙÏîôºÙôúÓéúöëèîóËÆéóÎÓñçà¯ðùÈÇùêÑÁîßÈÇèé¥9·ö„ÇøÄÝëm;²à,³Ò¤†Ý…$ŠÓ†$$˵$ ÒS'ß97è8$¡A2š[#3hm(-g’"GV"®|"$“ '1§}'S—"”Ë!E¨%34Ÿ!I§,=ÎC.$Ñ$)7 7(>¡ 3´! AÆ9#Õ,,*Î0Ì 5¿( ˜* ñc6“@(™)7¶f2­b,šm!„K6;Ï$C¤4';IÕ¡#*e†"ˆÒ+Ç :ZÕ"%VÇaÜ1a¦ !ºs!Åp!*Ð=!¼w&6¢Š((ÏË•"K°#ŒÉ<.sj'—¥+6Ë'»'/¤& ;íJ0?ö©.=и?ˆæº'8½Ð@^ËÔ8N¸ÇUǺQ1¸ÊV<þ*2ÆÝE¢Ãz' ÐR/ÄÉ'ÇÑe&¹ço•è(¹±jŽºˆ¯Ø”7•±D…» OØÒ—Τ?ƒÐ–®×Ó&bË®.QÓ§@xÒÌ'^ϧfϾ'0Ò² +8в'1ÛÙ;BÎÆ=ç²"ZÛÑOEܽ3ؼ3ÌÔq¸Û¬ šÚ”„ßi ÂÈ­xßžBØœlá·zã³(ì©zê´BÍÅNpç·#¼ÎKâ¯$%ÔØ;MÒÃ+%¿»"ßÂ;3z¬Z@®ÕFºµf+ÉÔR!úƒ&Ó"eåv#;é©FZóŸ'VüŠ+ˆÞºT/ÎÕ3+Ê×&-ó&)ãÆ,+ܾ.±¶0!îÞ3tÑÉ&_¿ÉkkÚÕp*ÏÍ3MÁÅ8=ÐÆnH¿·s;Ù½h"½Î”_ÚuGÕ‰:¢Õ`[¾‹}Ô¹#©Ä¢Hĸ´0“ÄÑ;9ÎÂ7‰¾Ø8\”Äo-ÞT±¸FHÆÒ::ŒÒb8´¸’K€ËmE”»uG~º¢L†ÕqY§ÌŒmš@Kµ™JdÀ±E†É®<€¡¥E½¶À]¿Ð£?I­Ñ`•»Æ2Ï©ÊNÔ¶æ¿ÍÇЂ¾Í®¡³¶×ËÇåÁ¼ãåÛßýìõôøñãîäÿæëèýêøõçñùÿôÿèõî÷ñíëíðìåêðìõèèéãéïçèåóìäãοßÀÈÂÆ®ï°è»ß¾¿¯b–²£{Õ®[˜·ƒx_°‚}h¤¸^Mq^ƒ*W3w"I@B17@ 0I@)J)'/88mFBQJ!U@S(6A/,@..`‚>)P;)LA})]X?#=!BwSTw:”I RšB v&S™HˆK¤A4-l)E'e'\%”B<(x5;(€I4%mA-@C=^…4SO<6‡z,Uic`˜,HF>[G¬)HEˆ C5¨"=Kž0K!“]&%nQOv8J+da1CkI]ÁÑ¥$”Æ©†Çà-ŽÚÉ&oµÇKLÎÁFYɲDeܽ0]¿ÂU8ÔÝ](âçM)êÖ…³ðT6ÂÖ`*»Ø^<‚Ô° Œ¶«.ÃÌ„%Áמ™Ó‘ ±É¬©Ý»4nÌàM^ÔÙ$‹ã¿%£å¹+hÛÍJpâÝ–fòïŠÇöñ­»êÿËÐõß«ÞãôöôèæÛÚôâòõî÷ôïí÷ëûãäíóâìéäèëéíáêò÷õâȹëìòêéÕžƒéä±O¿ÌÒ=ÀÞË2èÞvÇß…×Öž®áƒ"Jæ¢JÒ™ 9¨7O¿*;åT'¯r:‰LEœ:'P]"9š31{&0]€*;‡8!­&!!’&J˜/6®87»$'-¹)«'>9-$Â%!,Æ$ ¦I2)’b1š?$%¨H%ž](¬Z"!_:* f³(\•!M„#:¬g""‚ Œ·y¿5s»% iá/(!±,<à.-ÛS‘{%Îl1$ÅQ/3´|*¢˜(3Át5l®$!…ªD“&.É”'6VÐ4$)È3- Œ71 º8,@ß46Bñ¡,©Í¢/ŽÒ­.HßÆ50©Ò2LÍËRFÓÊO3Ÿ8CÖÀI&Âá{B³Ë=­ì6@ÌÇ+(³ÇjPÊÜsôÑo)ÁØy$ÄÚm&iàwM»®{W´Á¦ܾKkÙ Ö–$‡Æ¼lɱ‡×³!‡È½)rÞ±!TÍ´*{Я >ÓÏ*GÌ·9VÉÅ2XÓÄF/ÛÂ+5ÏË4[á½6DÑÌ•$¹Ö”?ÊÖ„Íä“•Ü¢¢Þ…$~Ë¿J‘ÊÉ+bÕ±V”ξ)ƒ¹ŸkĪ^×Î!UÄ̓ØÈ+Û°/Oר@ͼ$²Ù{ ÆÓ>¹Ø>7Æ×(!µ¸^¤Ü`9†²a7|ëŠAö§)yÝy}èJWÏÒ(ãÌ=WÕ˜2EÔÅ$!Æ¿3ÇÊ0FÚÍ/1è².]ûS5ÚÑg5§Òc6ÊÍ=„¾Äv,€±mC¥ÉŒžÈr,ÍÓ‡.žÍy&uÙ\AÄÙŽ:\¸»4Ï×»3‹¹œ6rËÐ@C¼Ï/‡·ÓF‡ÁÌOM¢·hM½ÜSCÄÀAN©ÓCã\U€Úƒ:£Èz4_Ï™Y‹¶’\|èrKkÈiTXѵ)fºµJ^ƧPŒË§/[ÅÈ\u»®sÖ½À|µçÎx¸ÄÍU°±¹“Æ«Å¢ÀÚáľô¾Â´Êÿ­ÄÛýàóßêöúåýÓôíöÛûêèêßô÷ïùöñêøìúçñïáëîøôáàêçëäèéàè÷øçÞìèãïæÛÍ‘ÙµÒšú˜ù™ãÇޭ;ϱɣ ’Dz¶iW™Lm5–»‚<Ëip*‘&b$LŽP®:`>a*G'E6G%8.2/-*I--M*=-5c744n5#l"/2W"^I)N#9 +6&D5QWNE'N$L =*D1O}C{H2Š)>nSŽE/Œ!W _,@(P83H*Um8X8{QT'd@?.c6E8ps6THvL[Cm"7ŸjJ9$~6Qt‚FIT†U†^BMU #K)‹I7£:Q3´IK3tqF,šky3˜Tv>ad=abyq‘TI!d›:?nWBs~PR“kOOF°2<+¬-I(mA.B_I©V§}¦fÂœ„ٚŎJ˜’‹o„›|W«y˜©š•² Œ‚¯¢y…±™g °•a¥ —mº‹{Å ™Á–k™²™}‡Ïªs–ˆ·t‘²“p‰Á¤}¶ˆ‹¢œtÁ˜„‰¸ª‰z½“—T¬˜Æ‡¬•¢xª£ƒk°˜„ÃŽŽ~µ•wšÇŒm“•|£´t ®€‹¬˜ˆ¦À—y›À‚kdÀ‹x€Ã‚wgÀ©w’°ž¢sÉ—TyÀ”iŽÄ¤œ…³¬•¢¨Ÿƒ†¬™€u¹¥ro—ªžŒÀ¬”xÈ–™ˆ}¶}e›®œ‡™’’¤˜¢˜m‡Ú…€ ¿œtŒzº‹–‘ºq›±™x‡ª«v“•t·‡Žr¶k—»¥•–µl}¨‘ggŠ‚|w‰†€]sƒ“©œ€‹­ÃC€·À{9¿ÇWS½Ê`p¸©R}¿ÆbYŸ¿W<¢Ë%»Ém0ÍÎWж[AÖÜ^0Þ½s%«¹¢ºÌ£Áª–¬ÍÍŠÌš‡Í¾*“ϧ(7ÔÑJA¸À>eË®.U®³`FÛÛN%ÙÖUÒÒf'“âk9™¼k¬¿Q&·ÎŽGJÉ´#_Ø°‰Ãk½Ý “Ñ©¡³´,ÄÜÎ0XÒé1‚ÖͱïÚÛÍ![êã\HçØvUåòž´âêÄÓêñÆæ÷ç·âïæ¿ÕçûÑÏèãÒÞçë“ÜêéÐÜæîÍÅèðÇÏðäöÝéçÂÌéÛÀ´àåÃ×ëÜÓLÔòÃÓÇWáƘÉÜ£Ò×{ ³ÜŽŠÊW'2ø¸1ò`Añ+(AïU&æo%ÛJ /­j(&|®"&o¹7S$‘|!!f’%³):7€.©F™ Kº&R¢ '¼),$Ú-%8É*+O¢7'.º(«$®"‘).È*4Á1<¬!ŽO'™??Í"QÕp*7åj5Äc'2Üo0…«»¹ cV,/½‡*‰Â#!›Ò ÝlÜ$!=Í2#RÌ2O®0!#ß&½Ž +êW7ÉlÆ(Ÿx%'¶z4$h¸ jœ0%²•!̼0$H» &¾C <Ä>"DÐH%Mä YÚŸ!…¾ªy×Èi ÃÞ4QÉÇ#(¶êE6ÍàRRÈÐ6M˸~·ñe#Æål¿æ&¹åz1¤Ñ6µÃ},¨ßr·ÑP¡Ùf9ËÏxQ­©¯…θs·»J™Å…R¿¬ÓŒÍÂ"RÙÄ©Û²-SÙÄgøÚ-gͯŒ¾´/GÔÃ*(Ó¼+\ÛÃ(=ÍÁ>)ǹ25ËÅ22ØådxÝžÞ„šÊ}mľ¤Ö›2nܬ0Gå³$:àÕ„¹-Ûž*×Ç,-Ö¬.DÌÁ>~Þµ,>È«)SÁÇ +.Ó´lÎÆU +‚ßt«Î$?Ê«'ÀãmnÝ-zÿƒ(‹Ì—/غYߦ|Óˆfå½EÏÁ!3ι%IÝ™6(â×('Þº ÆÆ)(ÛàD@ÒßZeÙÓd£Éa<íµEBÅÌ2KÏÐP?ÝÙt0ãÓv'ݹŽ.ÎÌ~.½°IôÁnDaɪ7Z»±0CÇ£#´·.RƹR;ºÆ2lÁÁ>_«¡yU’­PHµ¹1\ξK[¤Ñ~H¦“„>nÖjg•Ñ|yÂP3kÖ~J”·DTk½„a‰Í±a\º§T¢¸³c^É©XMÁ¦GXĸ*ª±½fÁÉÀXÍ»Q͵ӕÌÒÓĺäÁɶֲ¶¾ïñÑÝÜöæäáðäñøñúçíèùíæåûòàîõóËÿòóóñßêîåöøÜÚèÞå×ÝæáèìÝçØïîÝèäÏûÁØÌÖ£×ÍçÜØåÑÂô£Ð¤ÙÀÁ¦™¹›•‡,»ufIµ‘z ²bt8v‚ATž)…{5@:zGMJRt")5HB!+;9@(>Zt9&z"2 +W$@#NL&M='u/A>cH~&:E QR@†'+a[RnI„&E(eE-—Wu!5#Š!J&MOM rE87&E3ŠD8'J;$“0E7…>D7QqMEtg3AgQ2„[-,W72A?]ax7`7“R*™0FC/“R11­@E0™p=#sKr;o^@u3BW¡AJKc.8ˆi&5‹m(E>¢$2/­#5I­/8=«I‰mhVŸ¡sÅžšp©¦²¦ž¦ž|©j„Ž¨_‘¬žl‡©–t‰¦£Š¹Ÿ¡~ž~Y‚™ŠŠˆ§q…¨qwt²wš¥ªn€³£†ª¥Á|Êšƒ­––y•‡wÄ©w¹­_}¦™Á…½’´ž…œ¯y¶Š¼’‰k²£Á†ÃŠ sß´}–”¨|–¹¦•«Ÿ›†™»–’™§‚™¬’~‹¯“ƒ¤¨–„Ï‹uºªhŠ›¬ŸpÈŠjx¸§”‰—š†w”°¬P°«›ˆ¨žn„±”žu†ŸŽz•ª›r¬º¤€¦¨£m©š¥|ª¢¨z©Œ‘…–¶†{‹¢e‡·©|Ž¯¤^‹˜›€“r•}’¸‚zˆœ…ª’‹«|kª»€~w‚”¨„_–‘‡€–‡}”†}”} “ˆu™-g¬šAi´µ‰dÃãzGدLw¿ %8ÔµO`عS(ÓÞS4تo@ÄÀW)ÒäJ4ðÉ`O¹×­3žÊ˜GŸÒ‰ÆÈŸG†âÁkÄÏ*rÞ·5väºP,ŸÁMQÙ²G…æº4K¾Åb?àÌ]ÁÓ$.À¶?½àd#ÇßjK·àG4¼ç¦³ê°,¥úuÅƗᤞԴ%§Ë°)‹ÅÕ!tÃÅŒðijβoÙÇa_âÂ\=Öã†Âäס»êçÄØóüãûòêÿëõâøæíéüóæõðáêá«ÉñðÆÂæéÞÞìæÚàæåÊÆèèÔØëãÛÖíå©‹ÕçȈÞæ»uõÔÅ­äÆÚ,¼É²ÉÈ…°Ü}JòÌ"Aº§V§KNÖ2$+ØnùR(©g,'X†CQ ;_#*O!Êa!<ÖW+¢n(Ùx&œe £´0#x¡?sx˜…).…º'@Æ.=È/:@«0E9Ú€ <ï²1ä !“å¶:jãÊEQÒØ&qÞ®B1¿À?PúH4Ç¿3)½Ù|[¬Êp%¢ÿÐÆCcÀÁ`RÃÃbUª»aJÈÜFG¨·}@|ÜlR‰Ðp\’ÎcV_ÐVFnÓqR¼Åxju²žJi»¹V]§{U¿ŸIK·^º¸žUTÀ¾J°šd¹¹ÃV£²Ã…ßÂ܈ϨɊ¨»Ã¨¼Ä¯ºÆÄé¼äãîÏÓØëÚíîìÚâôéåòÿêæêÿóàñõíïûéøééääòíìëâÛÜÞÙäåçîæÛÞîßÞÙãôçÜé²êĘ̀ãËѾÛÌÛÂã©”ŒÄ„tp³œ™zH–^t`¯e‡ºÃvƒÈRqH¸IoC,‹49g:B+!O&0)692'=#90L%2(O 8B+ I#LW"$#l/?!=?'d @#KH(m GN$Kf:#vC@|?/œ@ MTH(n%L|&GO==NAR ’=%dAR]X"=ˆB–Omz[HkhqHem;7“RfPi2.swYEq‘)BYo>n>‘-GI«3Ab‡EG/¡=D •]?"¢PH=¨UU)Ž[`)‘oyº/L3¼%HOªPˆol€¯’‚ˤlǦŠl¤´ a­¹•f¼Â€h•±Œ~°£™‡¦¤|‹®µ„“«s}“©Z•š˜…‹³–iq¡©™vÌ‹f{§«}h²~au³Špi­¦†ˆÂ¸€zª™”lÀ“€Ž  ¦u¡±Œc´‰Ã‘£œŽo¶¡¾‰¢®•Q«¢Ÿd½¥sm•”Ÿsªžcˆ¦®‚ž‹ƒ‡·_±Ÿr¦©„rŸvrˆÀ–‰vÈO‚µ”†Š²±ƒ^Ë£\t§…ƒ}À˜•x¬´}i¤gÕŒ}Ò¬²p·¡žuw§sb¹ž|”·|•£»’‹•²—Ž‘š²ƒ…¨¡§_ b®¿®m­²³f”¸ ˆ“¿½|Ž¼‹x{ž›it•‹Ñ™x„¸¦š—¤ƒw•±y|“­–„–´™˜ kv€£eŒ~ÄŠZbÖÄ*)ÜÄMQÅÏOTÑÑUO®Î27•ÄK5¯´f[ÎÕiî91/ðj+¹UÚk& s§!hg!Q- †]*/]#7–'#o%/SÇ%V“#Bs%!F™ 7¤*&?É (.’.S°$!­ 22Ž'58º,,ã""&È3;¹%#7ª1žD/ˆb),´-7žO."›C"“3,)çw. ˆ‡1Ëœ0|ƒ/é‚ 8gŠ.&Ž¶1r­BwÑ-bÆ#y§+*t§*#&Ä[&"—r#Ò>0ØZ0 Äp-*¼Š"$¿v_¾0'w¥,¿…#‡™ *cÆ(AÃ3'X½$+NÚ†#L½Ç=]Þ‹:¬ÓªrÀ¶?.Öá>UÚÑ2@ËõJEÞÎM:ÀÄ0SÊÓVšßŠ5±¸>'Æ·%UÔäsU¢àaA¨Þƒ¥ÞRâ„qÖ~ ¾ÛWZžÂŽ*SÛ­šÈ®˜ÑŠËÓÅDâÁ$–æÈwíÔ7^åÉ&wàØaìž#7ßÌ'Mâ¥.GÉÍ2`ܶ1ÌÏE +¼Ð.Ô½(3ÖÌN%–ܧ7”ÉŽ.©Îc>ÆߣJ‰ê¡gå‡ {å¹Fܸ"ià¿`æ ­ÕÊÏÈWÝÉORá³(Õ·6ÛÎ@Ùã!_ѳ<€ÙC¾ÊKÅÍ(OÆÛW@—äa,}Ý}D|¨ƒj˦*_í‘ åxŒÎ¨NÙÁGÒÆNé.HÉÏ<¼Ä7,ÔÇX0äÓ7R®¡\Yã°cXÅ­bm¥·dxã©?_¨ RRÂÇj#ÛÐ[Q¾ÍtCŸ¿n5·¾m\ÎÅ]0^«–0O¼»0Oب'§Ï²$e»®+Z¯Ë9v©ž.b¸²mp¸¿q.¬£KLÀ CKÈv5¨ZPuÚeq˜Âv+a¾ˆ'Å„;¡ÊwBm­³CT¾§VLĤhaØicÄ·=MÀ”Qx±£.¤­Ì`Á½´Q–½ÂÁ á®Ë°ÉÀ»šÌÁ§›ß³ãïÜÇèáíàéäðãééóáøÙñÌîØßæïäøæëÚôéõæëçãßàôõÛØãÝïÝäÞØìÊÌúÒßìÑí©²ê¸ÈÐãÏÐÒç¬ÞµäÜЪÄHK¥«_y´Žb.¤u{s˜Ç€Ã¨Âpx¿½| ¥75,œ8(—5",;I6?3#<@26##(!C0"DO EYd#1/~K/\$*)_<)U!7$);|-=KBh&F!‚J<‡LL‹,C'¥+C‘R6ŽC5w /hF7^81!sZ’54',+d9X¡AUCct,=o|<.fO8˜UUL_zBA]‰#OQ‹bNO¡(9Q¬Ezd–GgRm,_*LR~9‡-‰<;!ž?L1yWf:vgHr<}\6'›/GSŽ&A9¯+KU˜9a5e/ˆr“tŠ”ŠpxËŒŠx°œ‰kŒ³šf_±pw‹ž¡kŽ—w†É†zž¬–rŒÐ‹z¶“oˆ°¤’®¢n³‰Ð•tª‘zˆ·¥x{®¥®ˆ²”pvª‚Šr²™y°ž‡ƒ¼—v¾Æ{¡Êà~³£¼»•Æ…¨¡¡°©·~®–ª®–[Ÿ–‘{…‘‡|”®‘¸¥u‘„škm›Žv©žŒ—ŒÄ u¿’‡†½‡Q}©”j|Ø¢`ƒÄ‘I…Á£š]¼žx΢¢“ždz²˜É‚¤­‘~µ¥„½¦{³¢z}˜~˜ –‘Ÿ¹Ã¬µ‘r†©‡‘‹‘i‡“U ¨Šv}¥™…{‡·u‰½¤y—¼±š»“jŽ¾–^…®zŠxŽ«Š¹šv\¦…jtq‚}zˆŒbœ¹˜)^lj'oËØdOÐÐHJ¿°Mo´¨>7Ô«NH·µ=7ØØH_ÔÀoWÖÈi(Ī=>á¾C/³Õ>›´‡EÃך³Æ–A±Õ³,…ÒÊ‚¿–WâÉcl»Æ9[¹{ò–HjþºRI¿À=ÕÚP8ÐÈY0þC+ÛÐI?ÀÖ;#ºÖ¢ –Û¦‚Þ†Çáz¾Ì›F‚Õ¥ÉÁ Œ¾Ï)_ή1Šð¬/¥Ê§|ÝÒVãÒy/öÌt·óÑ€ÅêضÖúØèÐÞ¾âõïçÇãñééèñÓçêç»ÕïôØÐìòÌÆóêÃÌÖ×ÔÁþØž¢áä½ÖÕð”|äÞËÄçئáÕ½iËê ÇÕ‚ÜlÑÑJ!wÞ¬Ù±–Ï6H¹ç¦5ûjÁm#’:UZ.Tc#'g`%)J*/"PŒ1(6m+Fƒ*?i'R¯[™0"Os''‰)*&‚&73¬3!R‹-.½7%•-+º&-/ª,&$"Ÿ#¤*,‡D,6YG!w:%¦).2’_#+¿E( ù70*Â¥7†˜( —eÇZ*̇7<Ê*Ar¼’Ø2TÂ%dÏyÀ#*M°;> Ï."Ö:0<Ë9> ´e*"¿“&¯p%–*~©/.’x.§›1+lµ1.TÂERÇ),‰Ó85-â²—â$ƒæŒ(ßÈ#2ÔÜ1D×Æ?GßÚ+áÉ)A¼¾TQÄÍ/1¹¿M%³ÀU0ÇÖ[;½¾I ™ÞWf¼×ƒ9Û»gIÃㆼïuK¿ÎgN¸É€±¾ËvÖ©4£×£OžÁž!¦Ô¥¬ì¿ °Ø•§Ö¾5xàÀ"sа ŽÊ•uÇÐ/YÓÌBIØ®+n˲4cÓ±dù>cÆÏ21Üí˜0ŸØ¡L¯Øg ¾±UÅŸzܳ6Ù“O°ÃÅO~èÃ8‘ãœ'®Û“#yÐÌ^Ù©.kÓ¹#“ÿÄ,LáÎ=xÍÃ"fÚµ*VÛçp-Éÿ»AE¼£KUÁ“.9Ò¦1gȹ>Lª»P‘²´5zÁÅ[l¯¶V·¥œX̨¼¡¯¢á¿¦Ë¹µ¹Ûì¹âÕíäØãçÇÑÍó¤ïàèΕèÞÓßáçàëÙóì÷ÜèãëæèÔÐàðèàÝÔÙÅñÛíÀáÛÜÐÚî·ÈóÕß½çãðÎØÕç¹Í¢É›Ñ£Õ³µwr=U©“Ŭ©g€™²•v–³wG´è”l¨qs?®5j- ="<,,*B!,><+H#@6?#>,O#>:,#.Q,l$)T=$D@Y0#B"S3%]+GƒH` 3%xJ"vOoDa lKx=r-*,6%:Q#O*r!A%V<<+™<†¬)J rr4HdpbhiR&‘0wMyn&-a‰@V™XHc€@o!{?ˆ=ž “@•PhO~?†.‘edrv+‰,N\7db/ŠiX1€OB7TnFYQn?>R]3rm:6\œ=DB«.VBžTeG—.Ž]£˜|À—¯ˆ½‰ll¸˜µŒ—¡¤˜—‘s–…£g“´™Œ”ª¥z˜±¸‰œ©xb‡º¢†‹³£p…žyv‹¾€„z®˜z{¶‹x¿‘pt®’bŠ¯–v‚È’xVÆm¡Sª‘‰{¯„uq½£€r´‘—tºž¬p¼‹e’‰•z¶¨Œp¢ Š¨¤£q ›ši‘—q’¶zp­}™®yP¡ž§z¤¤–w˜Í¥`}¸“uŽ»Ÿl‡Í›z|¥¬šxÇœ}¹˜€‰Îš¢ˆ°Ç™“·šŽdÒ™{pÄ¢”…¿¹hœ¼|qÌ{“l›±‘˜k’—sj‡—kz²ªj‚«…v¦¡˜}£Ï¦f±O˜Ä‡ešçœ—³²|¤ÏŒ„›´–uˆÅ”¥¡}‘­›Ž†¼ˆt«·p¨£Šz’ xºÎä`zÄÃ~X¬Çl7¯®fVáEvΩbEÏ·XF¹ªka©ØNcÃÈtBš²mZ¨«O]¸­|,®â¶/›ÌœI¥Õ¦XŸÉµ!šÆÄ'cä’?ŸÇ®XaÓÆNVá“5QÌ 2_±±IPµÍZ$ÂámE¿ÙWP¨ÛpÏÅH-­âZc¹ãsBJö—![¸‰!qÃ3ÈÔI˜Ð¡*†Ú£˜¢ª"XÎÍ+nèΚÅÁ%¯âÁ&WÏÌ9JÌ÷ˆÚõ˜ÈÙÚ³Èãå¨ÐôÓsÓÙò¶yÛêÊÉÜìÔæäóÆæêíÆÛõôº®ìÿ¿èØ­ åã˱êѺ›ëé uÞܱ„ÚâàÅîÓÃ4ÉÕ? ¹ê-¤ÌršÚLWÞÂŽ*{é¿=#Ö¬pÅ¡Cä§#ãH*¯L5—t/0ƒ›'(~‚*–X(.fy)(@ˆ+#?¹ +%½})K— >‹!#GŒ)7F¦=¾10-½#-7¨3 +LѯLÌÛ.HÚ©BQɼ<2ÊÐh%¿Ðm2ÉÎI3•âmRÑÜm"ݪT ™Ôn>˜ËqxÏ€šå~*¯¾Œ;µÄ“ x˲_Ï ;ŒÁŠ%?Ư)„ÝÉâ³"†Ô½7iÑÆ9ÖÄ“éÄ·ÛÅ)GĹJÁ¼aN¯¶/YÍÎB@´Õ=`ÔÈKJ×ókKɬ&°À”çjô”‹ß¸šç¯!Õœ'sçÂBŒÙ±“Þ’w¸Ý/FçÌ:|êí%Xé¾H¾Ä@WäË-XÛ¯!*ÕÄ1¤Ü].ÕÛM<·ÉXkÍël½»_•¸yz¼•OÕ§ŸÒ‰kvá†Dg⸠ݢ[$òÎ=Ö‡1Ö¦-ÆÉ@¿º7ÖðYsç¾+cÌÌYMßÛXE§ÔnDÚÆKPÉÓa¢ÊJãÅk<¶†,ÊÎ_&ÔÃm3À±F-[Ìž2䯓â )Áµ·1\Õ³IˆÅÈP\ݸh©½DO…¼bI¹Å$@·®,ªØL:´Æq8¿u3†¯g*³ÂY1¯Ë?Dªµ\Lnߢ(+Ò4YÜœ:’¿¯=W³¢R0´»:†Ã4¥ª¸AjÍÇ_ÿ 2º¶Ä È¼ÐÁ¡·Ãµ£Õá«¿Ôé½ÖÚ䕹ããçëàß«ì×ÝîÞãßÞçßðÛàìûÞèèîÞÔìéßÛßßàêÛí×ÎóñÉÈÒÎÑÉหßåØð£ÊÀÍöÄ׿ª©zc¹‚;}¬ÊGƒœ†“ə˹¶Z¼´¾È«Ñ\X-©zp(Š6p7Z8:@AI(1)&_:/`>£g]W:VPqYjTŒS=Hf\`TŒ6½m{=Y2ŽR‚>’2U*{O6`ws8ŠB'ŠMI1LtGz>Z=kkSVGnCEMkK?ypD1ƒzJ2…(=5š%A>›BŸU€s‚;˜pŽ©–‡ƒÒ”µŠ”š”±”£š¬±…}–¡h’·šŽrœœr|¿“©Œ­ysŽ‘‘Ÿ¶™d¢š™|z¨zy™Ž‚«ªyzµ›ŠzÁ˜€Ã—qu™‚kv­„}°žr‰‰šm¡z¸‡¹±“¶m˜ ¶‹—ª¢ˆœž®Š¹Œ¾Ž¡¡”g¢¨§“˜Ž“w‹¯›ƒ§‘£Œš¥‹’•}w„£~ˆš¦v–¦’ˆ¨’œz¨§·yÌ‹h»›z¼²›wÉŒ™p¯“sxÙ‹^Ž“{—‘¢½}–ŸŸœqzž‡¶ˆžŽ†’ˆƒ”®‹ƒžª›††’£Á•i–á|˜¥~‰š–„¤¼— ºƒ¥›ª‰‹ˆqŒ“šY|’uŽt¦‹~•£‡Š¥|lƒšs‹ ž/x¹Ž?qĺgBȳJpøH†¢½C5Þ°IU¶¼{¾¶M`Àº€BÑÚd#лS1δE:«ÂŽ1¹‹?²Ûƒ4Ë»¡:€«¥#—À°B‚¿¿5sÔàM0¥´JT¥Ã-dÀ®%H¼ÈM)ÃÎk^›ÒC7¾ÖYAæàPG¸ÇJU©ÏB7uçz*{è‘oÒ†ÊÆn/ŸÜ¨™Ýœ9ÉÀ™Éµ3kϬiÒ±°Ðœ4€ÜÞ]ZáË‹AüÚr£ëé Éèè´ìèâïêÔ¯øÞôЯïõÛØìÿÛâãýÇØýå±ÈâçËÁáéÛâÍÞÉÀéñ¨Ôè¸ËÞÝ|¡Óç¼>Ðê¥*·âKËÞY"¤Ê‹¯ØË@ÀÎW*®åÀf¨¿²°Ú™ \·e({ìt&áZ%¸Y0#‡'$_t ºƒ9e=()Y“- ;u%"Mr"9M$"K‡ *(_!T5/C© 4ž")£"%cœ"6À%2f!-*Õ""´%•#$;¿**@¹.ˆ?6,«F-¯E0`¸K~QµQ·5,1³Œ/)š’ &¤u!Ôk07˜°E‹¯%p¿1,’Ô"1\ç\oÊ:$pÁ59®N5âu,Ó`'@Ó@.—O%·œ3 Å}&/”Å''…±(!Ž%%n-3}È):N¸+5.³'GuØo!3ÙA¡Ì¯Tºë .Ÿâ¾AOëÆ9WÑÀ,'Ú¯7 ÐÇKLÑÊ:FÓÓ1$¡¼aRäÒUB¿ÃM?ßÞL$¥ÌAU¶æn2ÀÁW&½Ýx-sÎx?¢×†K·ÆoU¬Ý§9yÈž*‰¦ë–7¥Ïµ•ÞÄ!§â®%†Á´6yÔÇY€ÊÄÈ͹|ÑÌ:Z·¸,RÍÄ.gãÃNUËÝ2eÙ¿D]ż56¸Ð’!£Ó¥ ®å‡к›¼¥VÏͬ”µ™9¡×ÅF†Õ­-Ö­8¢Å›-nÍÄ-ãÌ"HáÓ ˜¿Ë"BàïØ>tãÆ;VÒãe5±ÛDPÏÂD)â·*½ÛwA«Ê‹9 ÕS9ÅÒ¢«Ó›ÎÚs"ȵwK™ØÏ|×½,Éž.„è´Kyî°.RÐÆ[âµ'¼Ä'pÚ«2ÌÚdÃÙL̯…Õj?;¾µLFÔ‡;oÍw,^Ñ°M;³¢BCòR¢ºÀB\¾½Kj®Ä=Ⱦ¢KÑÈÄ µ¶»Á±ó½°Îïê°èßàÁ»áÿÚõûÞ«ÌÜöºÄèéàãáÙÉòîëžçßçïçÚÿÂÊåâÇÚôåاíãÐãÚèÜË×ë·±Üãó²Ý³è¯¹‡Ï¬žË¡Ã–¢›¾°ä˜áÄ—’Ì·¼ÚD²¯ê¯Ý–«iSºÞ¶=¾s|#V!R(o%IG)93@1hƒp”).)24?35F1*2EV3J0B9*;lRG3 EB'`K N(1 R!‰ +IxH)aJ/‹4k/tL'W ;+‡7>;{.YI‡7\=ZBLv@nˆGXkh|ƒd4REcn¢g˜@žKƒ{‹PjKWH‹VrV|[ƒI…Cs˜D‹@•Lh:ˆT…9]{@†J†'„B¦ft<Žol`K:{@A-Nn7CHuJJ_xKEn\O@R}=(”BX/§_—H–a„`uŒ{žzŠ½˜§‰¿Ž”‡„„m‡ƒ‰’•‘‘Ž²Œ•œ”ƒ‰†œv—½‰g§yh“±‰Šœ“t•´q‹…¡ŠcŸ¤–zu®‘z‹ ¡v‰­¦…±{[‡Ã’…«‰‹†µ“Œz”z­„Ä™³™¸~¸Ž—{®‘ƒ¤‹‹‹ ‚³~¸¡o­£¿«¢sy‹t¤’‚ˆ™™dŸ¨Ÿ}©”’y–¸˜£†Ï›}`³¤‚°”„†…Ž„yÏŠŠ†ËˆmyÈžˆ}³Ÿy“«Žœrņ‰‘È¢€{½˜‚‘°~¨Ä‘Œ©˜uÆ‚©‰««‹ˆ¡¤‘€ “† °››«¯‰£‹ˆ©«ƒw ©ƒj°±v£¯“Xšß˜K•Èyž½›€ŒÄ•n’{t›¤Ž°¨‹ ¥{‡®ž†€—ØÎe’ªÚm‚¿mM£“qnÊÃ[ Ï§NbãP`×µLB͸e`ÕÍoP¼™gaÒ¨X_·²rG»Þ¥[¤ÈÆ5§Ášb´×³S »Ä+¼À"“ŸÑAFÁÜ2KÔÄ\?Û¼H•½7MǵKTØÄc(à©<6Ä|+iÒjPºÐGYÓ:’¼ 0yÁ2§²pF‹Þ™'´Ã«¸œ ÃϨXÞªUyÓÌ+—Þ¬»ËÈ1QîÙ`oôÓ[bÜî‹ÔÜê®tÒð¢ÒãêŠÆëá« òãØÉôéÅøâyÕ÷å³Ðëá¶ÄåÓ¢¸ãتWêéÔÍÚܯ‚ßÙœ7áÑÔEßØi8íݵ'×ßÍhÊÉvTÇÚž&ÄÇPJŸÒ¬Ù¢¤×Ýd¦çš{È«6"ã}2Ño*ìg&l+!~tØj)h*&:ˆ!G«",6’*P­45•%FŸ"5;x%)!Î%%#Ž!,R¨)E¦),#Ð!-3¥"Ï)°5&$Ë3eà*NÉ)#$¯7˜hUÛ?Tä])!¥R)0Ïu(¾i;F¦“*>„+Ŧ9Ù”,!£È †¤* ¹*5„ÐA mÏ 'zÐ0'…Ö:10ÙŽð|9&ÝC()ûˆ,Ï•-°!ªl"µ$ #9¶™"Ó·)PÆ*/iÔ:'pÈ6Cײ"zת$ ÑŸÕݽ%RËÒ=j˾SLÙ¶iɾt^ßÕf3Õ¿.LÌÁ`¯Òz7ÂÇ\*Ó×(PËã…'¤½rЈA´ä^&§Ü‘o·|(«ãe±Ï~sʧ*xÑž1ˆÛŠªò˜ ¹ÞÈ5¦ê¶{îÎ#[Ó¼MàǯϦ—ÚÎ){ãÈ,Fã¸Z^ÜÅ>¾½/6º×>m×ÞDYËæt2»·‹,†ßŒB²ãb4ŸéHÛ»bÎ¥VܘSÙ´ lÞ¹ ©Êž•Ò²4ËÑ>gµÁU¤ÈÃ(QÝÁ +â¹+%ßÂ*!ÎÇ<.»ÉN;ÖÍLHÎá_·îVdÓÄnKÕà‹PÀ§vŠÍ•6¤ášTm觲«Cæ¬4ؽBÛ˜cå¸:Ψ&á¶Xéê\sçÎ;rÚÂs>âÜS/ÛÐ@¯Ó*¥®cP¹Ís.¶Ík6µµ’­Ñu¤ÎeCÊ®}/›Ê²+£½ºZDR*Ÿ?dDŽ=a.zCL+…CY%…Rr˜mb†~TW?|`“7™l’_eLRgT™`‡f®N’A7™4š6®XI‡@]*žb”^‹QO't8ŸLZgrei>]Q\fQSzKv>?[jGD}lL-l~,MA…6D:*ŒDgV¢z…€‰²‹¨†¼¨Å‹Ò‘Ï• µœ”®…ž­¢j„º¬„‚®£‹­t›š—§…ÁŠ‰™¦©½Ž©‡¶˜€ƒ²šuˆ¶‹Š¤¤º™­À…‰bŠ§©€£ ´”£•žgÙ‹„­ynq­Žov×̒ř½y¼°Ü£¥¡µ§§£ž~½”µ̬™£™¦ª¯¢€‘”‘Š«ª¹ƒ¢”|ƒ¾£ˆ˜ª™~‰Ázv‚Ÿjˆº¤yŠ«ˆ}b¥Ÿy£—™“­|š»œŠœÀ£œf»™‘›Æ“Ë´Ÿr‹«¡¤„À–œ‘·š®Ž½¢žˆ¯š…„°€—¹­cÀœ§‚¨®–œªˆˆ¡¶¤}«±”–Ÿµ–´’™›³£q£½•¤–Çs‘ ¯Ž¦™°’z¬‡„‹Ä‘wž™z˜s¨–¤¬ššV„ÊÙ6kÌ·x[Óabè§`c¦œ8DÒ¨VKȸY.ÕÅdQÊÈv=ÀÆTX×àWPÁÂdNÛϘ1µÈ²$®È³#ºÛ•4ŠÙVÕ»#ä¢8‚Ú·dH×Ç:@¾¬Yg·´%ZØÀYWÕÖdB ©w:ãßt"ÐÈ[Dß®Q5·ÙX8’ì¥@ŒÞŸ+ÌÏ|ºäš¦¸‹.bÒžÃñ© ™×³:cËÕ-jðÊ%›¼©+}çÓšcæâ“DæÐ_nÓÙivèà‹´Òï˜ÎääÂÒêìǼôðÁµôáªÝåÞ¿áÜÿ°Àßç¬ÎÏÒ”g×ñÐÇÍسHÐãp@Çäv,ÌòÉUºÖ°½Ù—2íÕ²7®Øl¼Õ—Ö½m,뽦ÓÍW™ã–À½”^îº,,´J&&ÉY((°v%"{'pj*.^=*"Z3-E‹=!760Vy6=$i0Lš(&Hp#!4¯5-¼$:)&U¯#?¶%(0¶(,»3})kÍ,.J±5 ³Y³B&¾M1hâD52Üc<ÖT'@á^>+ÈÊ[2œ©-­¢0Ô~–½0¡·;‰à(°Ò0)Kè;eÖ&"‰Ó,,C×O'&Í•2¿m53õw6Á†+%²’0¾o%°£?*t 0{›)Œw*9m¿(-iÐ26Hç8(~Ó¤#Gá©+ Òª!Öè(‹Â±-<Ô¾BZÊ©3ŒßÑ+3ÈÁEV×ëfIÔÆG&ßÔ{¯Îf_ÖÄI8ÂÊW3½äu ®Ô‚W²Ñw;ÔÏs+ÒÌŠ|Äv ÒáŠ.²ÕÀ7ʧ5ŸÌvIšÉ‚Cá°!¢Ö·¢Ï¼/—ÚÑ?[Ⱥ'Û¶±Õ³^ß×EÀÇ1;ÌÃDˆë¾:\ÒÊHKíÛ @ááCFËÙ˜ŠÙš#ÈÂ&ÆÜ…ŠŸœ<…¿Á ¤Á 3æ×3rÝ͌ڦ%µä®’ÊÃd¿0sçÞ?”ÁÒAeÕ·@eÑ´Q¹ÙEeÝáy Éê\LÕÂ0`ÛÚ7.´Î}CéÁ…EÏÑŠ¿Û–/¸¶©\¸³—LÍÉk¿Ýž(ÎÀ.iÕÄL~÷-O׶IËÕ/ŽæÂ%:×È,…ÏÞc/¸áZ&·¾>7¾½@(®«T?µÆ^F¡Â2ºËt2ŸÈ,~Ô}6Õv3°º™1{Ì© 8ͺ*PÅ‹:VÈÊB8»Á/FÇÊ8NÓÂZTØ¿n:’ÄWAĶ5;¶ÛyFŒÎ|<…ÈrBŒÄa=hÝ€<|ÐzL‡ÏmAˆªŽ@\ƺVTÁ¶TMÁ˜K_»±O›»ÇO?±®`NÒ¼Uh³ºVs¬Åv˧¡X±¸½² é¬¦ÂçºÐη¾¯­£»Õ§åðŸ¨ÈôÄõèóØæãðßÄçâÉÊÍ÷²ïÚÑǘîòÐÊØÜâ¥ÙÆÓµÓçÚ áÍѸ˦ۧ¸«ã˜ÙÄË„Ï•³¾ÀÚÀæ–šƒ©¯ä§ÒªÛ£¿¢¤©Ü®½†Ô¼©ŒÒ°Õ•x¶‚cž•p@Ul;LUn?M.,O24)L4B;"9>!88A M B!-<'[2+L)I)P57ZA#ƒB!YJ4U +YEX+zC€Cu(MJ9>› <<Œ-R‡:E27=™7GM›,T4šH=2ŒDD#¯I¡8’‰lwtnV4okf†E?5Op[zx~Xf?u\—oK’$¦F‚=—RI§;…/¥>•A…jxEšY„x£OŸi…jg%|fe1…_W'^z_c.È­bM¶ÕDußÉQ?ÇÔ`Zª¸S4 Åg+ ±H7¯ètC¿ÜmGÀÐRM›÷ˆ)ÏÀ.bº™x×k)£üŒ<ŸÛ˜0‰ç¤0VËÌ"_̽]ÕÓÕÅ«åÄ2PâÍZäâ™™ÕÑTZÊë—HÝÞnƒÛÛ£äè茶ß츒ãêäCÐÕÑ¥Aâݪ¦ÚШQÎå´!ÖêÁ7åÙ•-âÒÍAÝëÏHÊçnÇÎh1ÎѪ'Îè”§ê” ½Ö‰%ÖÓ“šÄ¢~Õ£)Ààž$RÂÍOаÛpÕ‡Þ<ªŠ'$eQ/s‘) G‰.-#£*+;w*)H˜0"E–, H´!@‹"!•)?Ÿ.T³:&Ú!%KÏ-5Æ&)Ý9 ]Á0A®$l»C, Õ[,-¸W.;Þ/ ?¼F!Û\!:ÄJ'HÃo/‘Ý>©„, Ìu( ºˆ9˜µ#™×!xÈF!dÛE3Aõ&dÃ.`Í<%4è΀-%íž'Ô(Ìe# ¹u?.±†H4z°1œ•8Å”²°#*\Ã<'gâ;(eôŽ4½Ä¸G«Î®Æãª&®·ß`¿¼¾DÒ %OÑË'ËØ$lêÓAì·naÙÄv6³ØapÞ£]DÀÃfOÐЗ1»»sq»µ“N£ÃyWÃÂhRÅÄr@¨ØLv¼˜+o˹hPךC\ÎÃJ\¦ÇqF¸¥Dgµ¿ycæÈZgšÈJI¸£]`ª­’\¨´i3°Írb¡°{O‚Ç—Y{ÇX‘©…NmÑÂ^B­°Ieº§MfÆ©Xc·Â/sDZUa¦•^¬«Öik«Ål™·¯WÔ£ÆnβÊÎ˪Æà¶ìÖ²¯¼»ÏÆÁ´ÍÁªÐ«ÎàëµÇÌëã¶éæÒËçîÍ·¤ùÂëåßÍÁæèÉðÐÄÎÀßœü‹ÿ±éÀЬá·é¤°©ãÊÒ¾º‹”i<ˆ¿Áðµ»”¤}©›Ãˆ¶Œ¦™«ž³’ÄŠ†iš¿’Ѷ®}o›’vN®LjCn(e7Q0pd(BqRB#6/.>94<B/">?&5#S>,C/Q^$<#P(SJI_W,h(2*—1ƒJ<Ÿ R10C˜.*P›G7Š@g‰5T2Ÿ157™(-;§A8ž<<(“OUˆ2˜d‘JzGg˜8(]iq_~?xH£^?#eƒ‘›’S‰M”MY¾K–m©/z0‹^lK„6¨,ŠBxMvWtO¯g€mtfv.rW…f¤Z?–xB4q‹UVXŒ^!k<7ˆ:&_%GS¦J™ƒ¦…’´˜nĪ”w·±|vÖ”¸sµªŽ~†È €»›…©Â¯’‘³¢|‹Å•r±³“~¿‘v…¹¦y‚Îo«±§ªj•¬‰…½¬•ž¿ª©Ž¸¤{£¤p}”Œyqœ¸}Ÿ«š|­¡ºd¼°¦{²Ö[»–ζ§ÓrµÍÖs´ÅÄu¦¸¹x®£Ìu¼°Ÿx±¬Áˆ»„e¢Á¥Ž° Šv™ž„d–»Ä„|› …ªœ€{ ˜{„º©{¸£™…̨…ijŠ­°ˆ{¦¬›^Í™˜|¾™ —Ë¥¨p²µ„j­±«yæƒ`¬¦‹_}šµ_™²¯z›šÊŽƒœ£a‹Ì‰z‡…‘¦®š˜¬Ž‚°Æw¨’yp±žÎ`£µm†ºµz‹Å£Œ{ƒÈ—x¯§–z¯š‚©Žšv›­Œ£•‡¡Æ’=WŬ8k´NDÒÂPMË 2b΢1»¢4Qá¶\+ͬc6­³`LáÉ`SÕÄf<¸¾hLÓ³£, çŸ ¿Ñ—ƒÐ›@zêáEzÉ©=FÆ•h¸ÂHEÏ›7bijL€àª8YØÉsUëÒhCâ®S>ËÂR ÕÂE¹ÂhD¼¼EW‹Ï%‹Õ”'´ÖŒ-¨êmQiÍœªÐšŸÝ¡£ë¾6f¾« gϱ±¾ºƒçЊvðÑ›8ô×€…ñß©vïå©tØá„‘ëÚ‰˜åèÍ‹í춛ëó”…çèb†áã£mîà³»ß׋;ÍðÆêá­†éà†EÅã~`Íåa­ÕuQÍKäÛ·fµÍBÅÃc#ÒɃ ÒÕ²D¦Í¸SñæuaÑÒëY³U%"½k'ED,"eY0}5$):l'6€'%Bp!1M~3.<|/!=|"#8q!$I¯*'’(%´ &Y§""£%ž%//®!©%&† («0 ,¦D3PÓO5‰M0±;?·9$‹@A×S2!Íg+)Ê¡*]-7xÐ]$¡ž+˜ÍRž¿ƒ-º±](…—)£¿v8µËy3³­Ž!¹®­GZĪ9Rߊ\º·<”§ÆR:²´)\ºÁi]ºÂlNÈÍfH¤ËKX²Èw@´…9»•Y|ÌVD^ϦVnÇ€bÌj@‚Ï“-U°ÉYOƯeZÔ•[t¶™oJ°¿V`»´dį\/œÄQ\˜É]­‹§TǙǕ‡½·ÍÅï¿ÞÑÓÑͽöÔ̼ë±Ë²Ú×Å×ßÜé¹öÝñ«ñßÍÿÒÌÔ˳µè¨Ü§Ú¥ñÎڨ×õÉõ°Õ˜â™’‘¾Šƒ¯×âÒ°´œLw•@[IŠ‚Áµ‰˜c]’˜cS‘†Š¼ž¤DV·Y|¨ib°eœ^›°‹ÉŒ„f8²žyE¦1p1@G$$9=.':.6%36 =?T&JB“*<9RX\Nv*S%†T„.3$t0#‚&)pPO¨:U'e+I9ª2DK–36#c,E)ŒH{%‘3†-{RahNl]`]hD-‡Iubv}j˜d‰g‡Qcgh9–TÀ;^Œ6e7ƒK¡ƒ~\¥P¦y}x¯G‡x«R—lˆd`$Ž{cd•V|4[–8RH‚rOl”<6˜l?NIŽDTš\œkz{«Ÿl¬¥½i“”x¸©vn¯ˆ†eœ¿‘k•—„oÆ“˜Uš‹ež­•j‡«†w•É•xm½x¸žv¿ o|¿t‚¼¡|f»ˆz…£–b±š^ˆÇ¯°¦¶msĦš¤‘|l ˜ƒIÆ•Ÿp¸²ŸXÀš¾n§›Ã`º¯Éj®¢«a«”«pʲÐrž©­t—£²‹¤¢‡ª£‹p€º±‚š¤Šq˜µœl‰ª‡L¼¡…rÕ˜wuåy}§’n£x°ºyˆ¢ |O¬­—¢¹ŸvÕŽ†k¥–b¡¢¡|©ª„UÁž”[r“w–¯ŽŒ™³Œ^¡¾ª„ŒÚp°¹~™«§—¸®_™Ê£Š…¦…Á­~k¹¤„o׺~vÈ®{sÍ¥„Fº°|Á¥tp¼q£»‹o«¡¬yǯ«Š›ÐæK~ÉàsZ²Â<0°ÁSh·ÖWoØ·iM¶ÕlNæÈrN£¯JZºÏwbÖÄMSÕÏVNÓÓ€U¿Í >:¼HsÙn9sκ#§½Ì*S†¿ GËÖcPĸMiò»Rs¬­$pÁ»dNÃÉO[Ïßt´Ë9:¢ã_'ªÈe«Ê_;”݃"~Ù¬\ã¯$oîu6ƒà«#jшÛ²%¦Å¥:Û½"^Í•ŠÓ«œÚÖ8KßÝ5QÄêh‚ëì}`ñàš‹ñõæßN}ôé<äîÀ8îèƒÝÞãmYùàsbÎò±Mìâe5ÃïцðÕ¼îà*5ìÚTÖÑ[ÂÕv"ÊÅ'oö3'ÍÈaÙX"sÚjËÈi™¹Á##à¦W¿‰Hùˆ›ºÒÛ¾6&ãh#¸š!,\–''«Œ7GJ'&>“)3$E$$BŽ'<†+$8‡9U£8 —7)³(.+*OÆ+µ&DÑ(8Ë'*(0©'.®&&Å+/AÔFËG<Þ8),­h.+ÒI'7âH!-Ê|)²%¾¸ ÀZ#.Ò”+žÚ^%˜Ùt'¹*-Wß=$YÌ>iÆ%$„ѱ!%Ú†%ç„$ò¡)$ß“) ½r¼ âm//’¬Î8!–|$ž®&+e¶,*[å†)FæŒ!^ߣ §Ð§'°À•rÐÉ.AÂÑ`¼ÚrF²¼dF¹Ëv`Ü´.hÄÜb “â}-–ã†T»Ðd,¬¿†<‡Ý@ïÕ˜C²Û¦'W㾂Ê;½Ä†$ÁÀ¢"ŠÜº’àÁ' áÔ3ÔØ(qÜÚìÊ›ÛÙ-]ãÁiÙÓ9λ+WØÉG<ÞÁ3 À¬8E¿Ök0iÕ³VÝVœèu"ž´¥„Ð"m÷%o¾¤JàÁ"fÕ±&tá­ˆÖ±E…¹Ñ,bëÁ'vÚµ>ÎÂ%ZØÈ1Câ¸RŠ¾à?*ÃánÉÒQJ̶BLÙÞ|TŒçr:ºÂ™ÃÉ&wõ– ×š›ø}0œêŸ#ò7ÚÌ oÓ¨:ËÑ ;ß®Mò¦TèÏMjäÀJ©å×~9šÐUt˽9nÀÆA_σRå´?ØÂ[Q“Á‘CÒ|F¨Ð{+€ßj4aÍ­O7¼ž4RÅ‹8E¹¡<;Õ¾M)ÍÖ::ɶft˪p4¯Æl_ºÅm-ÂÊMH–Çrf’ÍgSƒÅi:´¤œmmÔE‚Õ|E„£{Pn²«oF·½ScĉjsÁ¾es¯ÀFF­½`ίÀOz´±`gÌ“^Zœ¹Kš´’fÀ¼¤Ï°µÁ¹³ÃÔâ¼è¸çÙͼßæœË°ÉÐÅà¿èºè±ÒÎàí²ÆØÄäñäÊÀëÝÞÙ¯¸¤à±êšè”ô£¦¹§®¿¾©­¢Ð±»¶kRÀ`‚AŽ–Œ±¡n_`­ÅĹ—¤uz•´pÍ¢•tÚ–ȱ\ˆ_‹Î‹q™B}[Œ&–Q‹BeME:>V3)mQ%#-2%GO,K"D'1(A#<#E&3-L;;l8!o"<uTG*)q~Y– L0£B.£Cw<5‹<‰ CK;ž@A#‹N40˜5@(—T;&™¢ Îm0 +ƒ± +Š³0‚°5"z½$4¼#WÛ'-y¿ÝÍn-ËËH[Äâ?I¬ã}ôÒˆ Ö| +ªÔŒ®Ì¦¤ß† üw¨Ü· ‹ÂÑE…æ¡–ê»nÁ¹5€ÔÔHbÝÅ.Ö«'OÑÒX!ŠØlF´ÚT_Ä¡[´¦^7©×J<«×x*¬½j2pÒ}~Ì;©Ä\Q¥®v0Pس7uѵ*S½š(vÜ¿K-ÒÅWBƹ@M°°k*šÉ`6˜ÎiI§ªRI½£‘]‡Å~N‰ÓŒIš¹iT[ЄkΗMqÇud[¼ KU¥£TCÏÂc^±ŒGE¾ªTaÄÄdNÀ¬sQ½¬8m§¯]D¯ÊXpª°Kr²¾Â¥§´¬ùÒÕѲèÁ¹åÄÄ­ûƾŸÃ帵á¶Ù¢ó§Õ´ÓÞÈĸ¡šßÙ³ÿ¸ãÍë¨ç¨Í­¨¢ºÄ½–Œ¼È»Û¨Ü¬…¤£žÄ¥×‹”`H2^”Cp‰›–h‘´‹v¶—½x¶¥žrEy®bdƒ¦‡zœÀv*v}ki¯Æ‡O°§‚LÄf„N£¥`\$ mU:..&@<@c*P)RY7$K69JF$1'J.(K9OOH=#rI8j GNC†JlLt#M$Ž"K)I 2X€OC—;0 A;4H q'I'£G10…CY@ˆ!W!ŠvpIe`z—‹k“UŒ5e=ewg–\rL™d”61R“ZY…Ey;¨BštƒOŸ{ŸSŽn~V…s‹fpEzFsmŠTƒXšR”f‡?c…S…S›i‹Qˆs“jHŠ‚R=C‡'VG‘A”{«h~¸Œ€j¸—~¡¤}”Á¥‡r´«œ|—©|…›­”Á tŠ–‚€¤ˆP„ŸŽ}‹«’‘m˜…}x³ªƒ„¿j©–„e­Z†Ä²y‚Ä¥n•¥©¯†¼–Œp¹‘Ys½¡›c“”Ž{™˜yxÆœ™tµª¹‹ÃœÄ†¨µÆc½½Çl¬à‹¤¢pž{ž¢¤“m“°µ“Š£ˆf• ¢Š‡Ä¡‚©b…Ȫ•„»šZd¶¤ˆ}Ž¯v€Ç¢‚Á½sI¶‘~o»•tmª“…œž u²»U¼§—u±žÇ‡…«–n•žŽt¼•”„¡µ¦‚—¬§ˆ¢¼”„”£œ‡–Æœˆºš\•¾˜cŽ«ƒtË©eŽ£¯llÀ•d]·œo¼µ‡—Ѩfn¤–«ˆ½ªx ¥ptº­™Y ‡ƒe§’”‹¨¡‹p‘°¹NW¼¼WBÃŒYqÚ¸bb¨®8qÁÖvQÆÁgdÒ¬ŒAЩAC¢ÍahªÆr-¼­R]×Ô‰-¤æ¥!Ù²•§w/¸Ö³AhÇ·N{ͺSqÁµZ>Õ³gZàËEfâÆ3•Ç®f1¨äPE—Út3µÉ9Zhêt˜Ý$¡¡Z8—è”#nî¿"Uׯ(KªE@쬲Ù4F²u8@º¶#VΩDVØÈ+‚Ù´ŸÄé(„ßÑ#6ããŽOàÌvUèìˆPãÍJNÕÜUZãô:Ø×7âø¥Gæß"nâî²Gä÷®1Õó\#ê×Q äáC5ÏÌÉ7ÐÌ2HÉÆi-©ée5ŠÄ5»²*1LŸŽ‹É„.›Ê¬ÊΗ}ä±%"äº;Kì—9AÖ½> +ªÅ ÞÃ87ë»+·ÜC$|t#,„R-ka+-L­"%¾&M—&K¥"&9(ˆ)3™(Ì+- ¶5;¯/'®/.!¦7º #$Ú&«222¿$¨).È%'°/%±T5¸(*/²_8µXÇ|%à„ªÐ -˜ÀC5º“/În+‘¿,+•æ7R,)qâXdÆ-&ƒæcnïx-#ч ³¿#åa'Òº8Ñž1Í¢- ź/%tÚ15—Ð"&Â’ )ÁÊ!YÀ03Qî#:ëx$;Í›{Ë©4nÒ¢IHÀ‘//°¾UVÊÉ-kÓÃ,[ÜÐDhÓ²/Q­Ð3LÕ²}'¬ÒiEÀÒg;·Í]*ÈÈ‚ÁÞ‘œÜž@Ëâ{"rК©ç¦!—Õk%…³¥ Ê£(뼘ڟ€âÁ9Žßίí¿!§ÝÎ>xØÛ)á»vâ­"ÜÓDLÊÌ]Øî<'§ß]'ÀÔM5ÅÌb3¿âxóh ‡Ô‡#Ÿà•€Ý¶P®Å«›Å‹Ö¢|ÓÈ*MÚÃHÞ¡H­<ѳ1×É,áó'F·§cÚÐY<­ÁepÎÌ<;¿ÉFNÃÂVU¶Ãx6ÙÍ`º¶d.œ¦n4£×a3ŒÂm*vÈ« V¿°)Ï¢a¿Á:bο:JÂÉNgú:S¶—jR–ÈDn«­^dͼJ2•ÅqU N;ÑWR{¦’\p°‰L]Ìg3·‚m°¿b4¸¬EŽ¥Ç§ÆœÃŸ¦Ó­ÈÀſų¾£¸¿»Á¸À¨É¸½Èª¼¦Ã½è¤ã¡ã¹ÈÐÐËìÂå¹Ù¼Ë°­ŸÔž¸¥º¹²¤—ÁÔ±¸‹­ÄϺ¶¬ŽQ• {;+³Gcœ,ž¬§¤L[™‰¿¥Õœ²Á¯bÏÁ’i£¶U{‘’€išcey’€u}·±†]„‚t~‚!kV+BrC7/&1J@[EF0K Lš\}8}*œQœ^Šwˆ6„pŒAdWZpa;¢,}k„fr‡Soj“r„\‚c_fS•=L[|B@UMP&p¢7HE—Os6ŒW‰w•w…„q½wƒr«xz¢ƒ˜~‹†¡ª‹¨ª …œ´¡~‰ž’xŽ‚©Š¥•«‘´†|‚°¡ƒ‡Ç²‚µŽ´„–´ªº¥¸Ž¦žyŒ—”cЙŽe¾‘–Š£¶¨‰²¢ŽŠž‘¯l¯–o†»’]©’j»À‚±šÏtŠ²Ýo¯¹Îf¨¨ƒ[´µ§ps¨¸{¥…„–¡™h†¤ˆy¬³Šw­…U›¬xv¥¡‰›œ”k¿Ÿ~rÆ–Ÿj»§ˆfÁ‹rž´Žeº›Z©š¡pŒzsƒª¤rŽ§Ì˜š®¯‰„§¾€Ÿ¬¨l›Š®„¤°Ÿ€¤™ÈŸ–¥œž…¶Œ“°™„‹†…â©’}ŠÉ„•o¹¢…Ư‡²²s„²“ƒ—©³ƒ –±q‹Õ„¡¦’p–¥‹ˆ­ª˜u™¥LgÉ«!nʵfU¢¸+bµ¼3wâ¨gÌÃxU¦ÖTFÔÂ\AÙ¼VBʵ€&¶ÊNOÝÄ:?ÄǸ2£ç4±Í²<›É¡/з1Ì¿TËÀPέdD½³E_·Ò:ˆ»À,C¬ÈS1ÑE5ÒÅCD°àj$€à ÂêH1§ÓUSbÎ’?a̱#GÜŠ,‡Ò[<1І,bÛ¥$iÛ£³ÕÃAWÑ£Lv¯·(sÚ¨!9è½&vÈÝ)RâÕN`àî¨6åÔhbÌÇTgæíakßí¡uÓë{.Ùë¢iêï¯vÛã´MÑÊŒ?Ïë”bÙ¶œXøИWßÏ^EÖæ’fЬuWÓe&ä*}É)žÕ’@`ì†DϾ©µÔèÀ¬$;Ù–£Ë‰ ÕŸ'Bá¦$¶ ' Ô¶3&[/h[& [C+;c$#„!.e+a“B™-EŠ/"<ƒ/,9‰6#·/)¹826ƒ#&-²&)-Å%&'®("4™%%Á/-²1)Æ!7:§C*0ÎM!)±6>2Á;/:²o2±P)¾J1̤(›!5«Ä )Â{%/¦Â08…›*'uÇ/3”µ$CCæ0+WáE+oÖP8DûŽ1Á™Î{6ìt/"°¯G ¬ž0Ɉ)Ç5€·£˜'%°ˆ'5r¤$@rç25Kä&ÏÊ·.”ħ™Åœ"vÀ•AŒ×´Hc³C^ÔºRƒÅ¹GIÚÂEEÅåPCÂÀM<¿Ò3ÈÈa7ÁÛ'fÇÁOIÈÆiáÆ•.ËÎZ4ò­4¬Í’²É—Á¹€#ËÕ©}תI£å“F¹¼£4†ÐÀÑ£"‹é¦*’×¼5‡ÀìK{ÑÉjÔ¯\Ù®%VËÊ)9Ѻ/mßÃ*'и?LÚ¹ OÁº4Z·é”,{Õ›<ÌÕ€¶æ‡Yß®A¡Ë®!ƒÈ }·£@åÔ^Ý×Xá¦UÕ¸ nÓØ5Yܶ%¢ÌÅ0SÍÏ4LÎä>kÔ°"EÔ»aHÏÞ;K×Ä+iÏÆ%/ÆÚ|è½y ³ÃŒ4°à¢C»í’¬ávOϹŽ–¼º»º6OÄ‘ÁÌÂ-r½¶]àº)PÔÀ/ZÖ»N\¶¿X¿Íg­½dIàÕFV¬äf3©ÔeK’½g<½Îg)uД –Ì`O~¶65‡Æs{Ѭ=Hب5_ìš&e¿ÇL2ÊË;_ÀÉ4_ÁÓH<”ÂAa¼ÐON¬¿IoÌÆgm‘ÓlOƒÔrR»qX[Ðtb…Ÿ‡UjÉ{Bj½ŒHN¥¤QMÊngaÎŒZtÓ•gKÆhJ©ŒVg®²A4ž•I,–ÀSC»”m®®©:²¸¢H§¼Ô˜ÓÊ°Çšó·Í¾ÇÉÕžÁ±ÓÌÔÀ­äîí·±ºÒ®·ÔžÐÿÉáªä³ñ˜È¤Á—µ{£ºªÊº½¢›©·Ÿk¨ÏžukO ttUº¥iu¦yZh¥žƒ®—•‹Éª§¬¿©´j䬮cÂw–¸¤Æ`P°›^7±¦€AŽ‰dX©iDb…‰|4H*230&6 9?3,`M#J0.8L)PQ F"O\,3JA2NcJ)^1=0`R(ŒZ n?g.Uš7+}#.s'+ ^ 4(¬85;—B‹@–F/(}9A!}DNŽ8…+‡€]Dx_oQU\L'vP„˜p_ˆlƒ}};tPplc¨v–C}4’5rM|i†a«aˆe}@zIG‹j¢A…|„ƒr„m|eM‹‰t}%ÕŽ"9ÑaRБ °—1‹O#,hv)#h¹!%’(%O‡ '9½ ',ž ".ƒ(&8-3'¾."­#'#—+4ˆ$/® 4,» -$¸(,¿*"´%$,.$­--´P$ƒe&M×61ÈM0 »K,ÊE=$ßl-AŠÃ0­‰">®n+"вB3—Ó1#‚Û.‚Â!@yì´ ]Û1 ZÖY,sÖ\"Ò‹Ò{Ú^!ι@;®—4-•–'Þ‡#u›1)°¦#$Á«14tÇ &Né’%rÞr)_Ù¢#Í£ŒÙ¡,¢Õ´0SËÒ?SÉÛ6iæÀ,cÝÌBUÆÌZ^ÐÓ4eÑÍf*°Õp1¬ôs,á¹*/Ƚ„R˹|=£á˜ £h*~¼†(¢ë~#ÏÎOÁÝš…ØŸ*qÌ­!ŸÑŒŒÑ“!Ô¿.‹ÛË#ià¬`êИÍÉ‘à­ÙâG/µÉ(GƽikÚ¾79¯Í:IÅÄJOÄÈhRȽz/ÊÎp?ŸÐg+ŽÍ\ ›ÇJN¤µe*uÑ 5B×·BSб?>Í´JÎÂ1b¼ÃJLÂÜ.Þ¹h_ÆÚ[9ª¸Rbÿ0€ÆFZ¡¯t@Á‚Q‡®}Gp½iQ†É]¡Ê…D_¾{C@Ä‹BZÞ_;m§…LL§¼fX¼¨hYǘIJÅÂwG±®u0µ·5‡°ÃlºµÂq×­¸tÀ´Ô¥ÐÝÓÒ­¼¹¹°­¼Â»®Á°Ç¸¡îžÅ¹Ð¡Êã¡ÎªÞܲãÈİǣˢ⼾½š¾µ¾©Ï¾”¶¯toª¸ˆL˜¨{b¢šzµ¸vÁªmD¶tQI¹“k`¬˜mZµÀ_[²€b›mdc¡ˆgC—xcXŒ¦^&ž¶x0§j‚F'{UE/YC;3()!M4T-<8$2=(1c +/) 9":;;< Ui +R… OE#QP:E'N$‹3Vu…W†9]8—7Ÿp a”œu”»§’w¾œkv¹•bƒÂ™r„‘i—™sš™À‚«–ª’–‹™|‘³‡£«—¥ŠÃ~xy®¥tµ‰„¥†²¦«rs°—Äw•ªsŒÃH‰¹™­uªŠ™‰µ³‹~ª§‚k¹¥‚Èš}¹Žxv®¦¹w§ ¼¯›°Ž—›Á²«¬ƒ¹©Îˆª©†Œ‰£žœžŒ¥˜™|Žº¡f|ªœh‘¥©Š¤¸Ž‚y³œ—fÉ}‹‘õ\u•z‚³•¸sÁ¼zÀ“‰p–††k’†qÃ~œ|Æ{¤’•‹]”’ d¿¦g¢¨Å‚£­¥v³žˆ‚¶’«„·±|x¯e¢““„Š“¡_‘¿nmt¸’kpǃ…Ï´œcÍš‰mµ•s‰¬®yŸ·ˆšuÆ£˜”œ Š|Ÿ–›’¢²y‚³•~£›£^n»ºYt·¶brÉÊ/j¿¾CâbEجePÓ±m2ݾPeجhZÁ§_>Õ¿_B´ÂhF¦Æ‘G§Ù®8œÆ“0~£4PÛ”Iˆ¾Ê3w¿®,o×·HNÄÃR]ÜØTqÆ©]ÁïVPÐãnB—ÌHY¹âa,vßMB Ûe7²ÍV>rÖ¢%PÙ—,NÀy*Üi.[Ř1iîŠ/°Ë”@Æ´OUÓŸDLÊ–2¡Ë¯zàáY´½lðÖ\wÝÔ€|îØebí×\cßÄAXâÑž@Üä–E÷Á.kòßlVÝæ<ãæ‚7ÕãcJËÉf^ÓÙ|"ÓÌN7ÞÒ7BÚÅn¨Æ‘ÃÞjßÒwK~Ïj+…Ñ]œÍiVÙ®MJÝQ/ âC(Cå‹9Kº°$0ÈÀ+"ݶ/ßš?AÔp †Œ¡K',e™,7v93R#//H(3x2"èK[Ò)%sÓ"!+äY6%Ø‘#å{2Õ^Ç‘-×”'¤˜#œÌ 4n"…•/4»7;Å+.rÙ’wÉW¹å®AƒÛ£$nÖ³*PΞ$8ȶ@½ÌHNúSŠÑÓ?OÛÆ1GÊÒM2ÚÄ,AÝÕ‹&ÂÅ^ °¬2MÒÔ>*ÒËy;ÀȈ'ÓïmE¾È2»c ºÜ‰0ÌÓm™ÖÁ'°¨L¯ÏœMÀÕ¤'„Ò««Û¤:‚ߪ£ÌË5…ä¿ `ìÍ Ú¤kı$YãÚZpÖ´#tÏÉ:'ÈÎ8MÑ×/iãÇT.°çš-œÛ™zÇl£³fÍ—!µÐ¥<ŒØœsÏÏ(Uæºaǧ2®ÄŠ‰¹©(PÍ°qÒ­†ÉÅ1rèÆ@X×Ñ[eÑ©IØÔm<¨áIEÌ´&aÔÃ"Êe^µºw9ŸÙ‹\¾ò©Q´ã’>²Ã}9¦ÂmA‰¾©dÓÌ'ŠÜ˜xʽ wÔ¶GåÈ)^̼(`Âœ(RØÁ1&°¿m¨À^ÄÏ4<εe.¡Øk$š¿}+¯Îl/­×w/šÑvªÒhd¤Â|2vź!ÛÁ2ŒÅ,tϨ1.·»7Y£Ø;^¾ÑsEš±V:¤¶@P¿Õ@U£¬M8³ÄmFˆ¸8¬±`__ÇdIpºkFŽ¯|E€ßp\ZųLRʃ@k¼ˆKGÊfI¾¨Ddº›IEdz2q²¶Z]¢·A~³¦>¿¹³d¬«Ë@£ÎÆ»¾Òµ³´ÏĵÌÕ¿­ª¾³Ã¯¯»¢Ç®¯œÊ Õ˜«½½ÀØÌ×±ÑÁž¼ªÂ±¹™A`½À”Ѫ“Á²®Í²±¹|Ä¥“k£›V»¶œ[£–‚SU|y[k¯]aƒ”AHX¢€x0­Ê{)®t]x“œ}[®Š\Pš„^J®’d.—‡C©†N@>%‘7R>B]*@[ )1M)(?GH 6#J,0B"[JwU,Q&\G*Y5 +_ +bJ4Z/$6!]$Z6VU+M!u%>%‹APgD`DwH­{zDx>„!’%œl™f1Ef{D1lE‹7\ToqhURh\kR\>oVmNA§gšM9~H¨v}I¦…˜1šƒ˜bsz—9Ž`ŒM‰ƒ…Bvt„`~„ˆpvfaˆCY:o`j^btn‡qZIMY\nˆ‰±‹x“±¡˜Žš™k­™½’²–q‡¤Š‘žm‰—…s¡—Œ€’‘’w —†—’|ÆŒ®›Äˆ{„ „RuŒžvw®’ }º†›l¾‘‡r ƒW‘¢}_”£ž|x§wŠ¦Ž‡bŸ£z¥•Š†³•‚^Ÿ{~°£“r’…ƒw¬–¿|•‹lŸ´r´‘¡|¬šœ€—¥¡Œ ™®ìʲ¨{›§‚«——®¯—m¿‰‘‡¨cwÃ~yƒ˜Xo­ˆ‚€¶šs‡¹©™~Ž¯xy«…{w´{kÃ¥Œo…¾v«Æšp­©«s§«~‰™ ˜u–¥†¨¸¡rŠÉ n˜Ÿ…r§™ ™¸§ˆ»£nxÖzt‹Å‰Ì|‹¼ „†Äž`x‹‘œQª™~lºŽ–rŦ…´¨†‚Áž„x¬ÁV”¬ŸW<¿·^_ËÕfd¶¿-ƒÄÊjm×Ñsk¨«zLÏÍsRÑ¿ja±¦XSÂËVe¹”n#Ƥ—.¶ºšS¬½„9¸¼¼?ˆ´”5€ÄÌLƒÁÍU5˜º^O×æKtÍÌ)[½¦::¸ÆiV«·P?Á–@4JÒh<¶èZ0¤ÐN4pÒuU;¾‘7qÚlcËh&›ã¨'Mѧ9Š¬~1xØ vÀ§UËÔ#Í 0®Ã¸&p¦Ò1y¾ÑgßëQaÐÞfßìqäÖ“§éÄFAÎÓ4,Öë€YöÛy~øä¥Oêã¿ÜÈ­O߸-DèÒ0/¿á¦Q¿ÓR|ÜÍZ<ÖÊQ=ÅÐw2ÊÍ`SÏЄ3ZÁa$r²p3u¹?,AÅw$:âŸ#:Ýh»Ñ‡0Ó£#ߦ),ì£7ÀÀ.ñ©*œJ)&¹q/-0r& +Cl'+9£-:>’.;=’4#C€$0¯4'):­(Ež$*¾ 6¸(.ª+"ž3"°+B¬?]²0Ã84¹n&E¸5 1ãq(Ì=,·\4'Ýz)o¯""²&Áj6Ù“69r¥6œÅ*$ˆË+\µsSßF ‹äs,fæy/2ØŠD"¤ 5 ÏK*,Ѫ2"±1%¹½3¥—)n§ !£Å&.½œ!)Ǽ"4qÝ^M»—BšÐŠ$˜ÎžR§¾± ­ÉŒ,hÉÂ#`é¼WRÄËLfÅßBaÇÁXoÁèE5ÂÈ,aæÈl1ãçvZÖË83ÆÀ8BÖÆnB¾Êb¹ã™AÉÄS;’Ëv'°Â‰Ì݃—Í•™Ë¡Ezâ«, åt1—äÆxâ¿(„ËÔ!ä¬6râÖ-{ÖÈ…Ò¢ —Ñã3NÍ· ;ÎÌ7hɼ"yåÝ58ǾCÝÏ;JÁ¾X­Ú¨O¶Ø«¹á½³› Oí…äž_Þ¤#4èÊ@xɵ‚Ú—€Ì£@[Þ°/*¾¸Kyì–'CÐÁ&FËÉ-\ظW„®¹I|ïj2ÇÇaG̶aÏÇHSÒØc«Ç„%ˆÓ™&ŽÏ¨-‘ê€7ŠÌ…$‘Õ¦+Û£Uxà R?î˜gåÒ&Ô» 5ÌÝ*Ïì„ÛÔ>¨ÅV9¹×CƒïÂ7]äË*;ÐÁm_×¼o-ÐÊd.Ú¿-ÉÂuGº³}]µÖV5¬Ñ5}Ú­&’º¹kÀ·[ÅÔ,jÀÀ*gÄÍ_¢ÝÜ=IÛËLZÏÒH…ÎÈ\I`ÝVF­Ð…TÞU2•­O+kÉC‰Üa<ƒÔiGq¦‹<Ùª?[È’TvϪ<jnB1Z Jo+G'z"XdiXe +f"S¢>IpM$y,L3˜A)9i'U#Š"G7w=qyk0N9y?Ix6CohQDU>’,ˆO†dKxd¤v©X¨{^®(kIžs‡:¼cŒe}HwI†”‡<™f‚r…1˜xŠZo…Sƒqz˜}kTv{=kDXSrWClgZ@nzQBŒ%¥Z–sÆÆ{ވƬ€®|²}–yÅ—‚¦˜†¨š£k…¨ŽÀ™Ž«Ÿ„‘§™q‰–uo‘Œ®–Ë}w€¿¼ivª—“¿©‚¦¥¢‘ªœ²’Ž¦¸‰Ì•Œ›ŸºÀz©˜ªŽ›˜lnÆvudª‰ ‡Ã{{u²–ʚǟšqË¡Êx¸’y|­¬½ˆ¸ŒÄ{‘¼zŸŽ©†š¢­“•ˆv‘¡–ˆ¯¢}{‹“˜ƒ¢¦µ ³‚uÉ«ŽÇ’µ‡Ì¨vŠÁ•É›‡cj¯›˜~²ž‘„Ž‘yÂŽŒ‘»–ŽŒÀ¢€rš¥—|‚£®‹Ÿ¬‘¤‘u„¼’·ž¨²ž¨Â¢µ©¦´›£Ÿ‹€’Ÿ–—¸˜Œ}Ì¡v„µ›}‚ÒžŽ”²©ƒ®ª¼Šµ“ˆ”­‡‰¤œ£™Ž‘z‘­°ŸŠ‡s‘Ž¤wŽ†‹Gt¬ÜNÃ¥sX±¨vi²²YmÑ3GÑÌsaÕÄa=×±hNتuBƨk8ÂÊ]^µŸx=º™x:–½‘E·Ï“9–Í•rtÉ®,®¿U©»œ,`Ô½ftŬ\pÁÃJ{¿­3C‚¢5L³°PE²ÅN;³·W6žj>ÉI>ÕM-ŽÌ—V€Ñ¨;OÉe7oÕ~.‚Τ%¬·%‚Ö›4Ư:hß¡4eÒ3˜Âx-nÑÓDtȲ>âÎ>nàìµuÜá¿ŸßÙÉäÎikáä¥3äÑ8Cçñ¥|ëñ†©áé²fÙðR<ÉݨlØÄt-lÅ?5ÜÆ@QæÆG(ÇÌ|-pðs$˜³G+×]#iÍ1?‹Õv0ÝÉU9P7,ÒO2)×f,:Ù/Yɾ+‡ì)#áº?,¼n-µ"ã„7½]$68n,)8t-.R -BY%S,&g!+C,=€(&4%¸.B‹!:µ..|#² %Ë&0£Å,3¹-³=/³`#(§C ^È?!8×UQ÷@-bY1É›?%j–(%«”.!ÅS? ¨!¹¼FoÖa8‘Ñ.7W¾*4XÁC*q×G3Zå´0²©-Û™#6Þ²7!°³1"°&/¨“4ŸÕ(r¬$)œˆ1@º12pá,fÜ,ZÏœ6×î#¡áš"›Ô-¢Ð˜:_Ø¿+IËÈe¿¬!uÕÁ80ݸD5Õ¼?(½Á>0ÃÝ•»ÓxAºÉ\jÓÇ92ÉÈ\HÁÔ†YÖÚdº²•H‰Ø;ÈÍŸI¶Ìb˶ϳŤۑ'¶Ì®¦É±H¥Ó¯ ÞË4˜ÐÆnÝÀ#ƒèÌ+¶î¸tÛµbæ½0cؽGU¿·9)Ⱦ3^ÉÂAmݼ80»Í¡Œûy'ÕÊÄÈÎÄ©$†Ì+¿š@àºä¶/ã›<¢Ù–+˜ÓÒF×ÖCnÉ·O’¹!<Ò»5W¿¾.dÓÈ=@ÌÁaH´áDMîÔV;ؼh(ÈëŽ.Çãs\ÆÉvL³è”)–ç£I¸´–:ÅÁxƒº²5~¾®  Ö¼"¨ëº\Ê°RÐÇFyƵ?lÍÑS Í¬.*²Ò@3Ìá@V¼¬+RÍÕZ,Ÿäb6£Ík*¿ÀT)—Ír)¤Ài/“Úg6»Ãqvä²=JÛ²4gÎŒC7ëÏ7nÄÎ(pÒÉuÓÁG5º×V5¼ÑDdÒÈ5Ož½Z@¸ºJ,ŽÀ}/³´[9Ø{9ŽÜw=‡¸u^ˆÔ=;×±).¼‡&Jr%G +D<~H|fR(iw c>Š0\‚0V6wLF2‘Kr7mFc(sI£­ƒg¥\\Eƒ …uZ;I`Y5lŸo‚C“Lf]{QTlz¢dpJœp—H¯†`ËjqU¸dl©¼’Y‚€Qhxr/bbcb‹xl‹†^qŽ{m¨‡gŒWmHenwyH,]iˆ}I’C¥[œ§–}¬…€¯•”t¥”„q苧¿“‹‡»¤«­‘­|y­›¤‚‰´ƒ–…¸ŒŽ‘„ˆŒŽªŽ­ƒ¶Œ—“sŽ˜„œ´ƒ˜µ‡˜—°h˜‹Æw ’©¥œ‰©¦~mÁr”Ž¹”iÁ„c‡¬‰ËzГ£«žÀ‹Ê³Àz© Ð’±Ÿ“j¤‡©‚¾•¥o¢¯¦w¡³“l‘®½žª•¦Ž—¯—…°•ˆŠŽ¢‘…›½“—„Ä¢ƒŽÉ—O‚Ï–~‡Í–‚t§…{¦‰‚€Å˜šfƪ—˜¥’€É›‘ƒÏšÔ”·°—–™ „¯|Žƒ£»ŒªŽ‹°š™Ž©ž‘±”{–§²¯’£‰¨†ºy‡³—Ÿ ¹““è‹~Â¥«†É˜¥Ç¥qÖa»ª¥j²·˜„²™ƒ…¬‰‡·†¢‘¹Š‚Š­ÃÎF¼¬:=¿¹wbǧUsÀÍ<†½ÛŽj¶ÒhhÍ°ae°Òr:¥ãŒDIJ‡S©bl×ÈU@±µw<£¬¤_ŽÃ/µÃÜ-“Ç»DxÕ¯LÀÙJoµÐ‚_ÀÙkm³­OqµÓLJÅ®cY§ÖjX–ÆOB†Æ[BlÛj8³ÇpJné‰Ky¾‘WP½…k½k5ת,:ö„^I¢Œ$žÐ¡.3½©/Îœ%’Þ™X­ÁÔLaÅä/sóÜ<ìàp—ÛÖ «ìɯàßåy¶ßåu4ÇÊLNÜÝ’Xçâ,cåä¹<Ýßn7ëØ9yÌÖFcÒß|4©äs)ÁêT\Ãäª^ÎÎl,VèN”ÙX6ÍÖŒ)˜ë~Em¿^,^èM!3ÚÆ:ʽQÓh24¶’8È®$ã„*4ËÁL<ÑË4Æw(j%w-2I†C©%$Zq,H›*)–­.$@‹-a‘4+(¿/"¾("†$"G¦-"¬/¹,(8Ä$+µ**`Î%1•3c¾+.ÍU ¢U'$Ö$'Aãe=,Ò¤'Êt)Óg-.t˜3¼r89ͳ5 Òš!'š‡/›Ö#+„ÌR8gâb4uÜ`,cøp+œØ²:-¶µ$ ´.éw9)ÊÍ@9³«6¡¶ ÜÌ=ŽÓš¼&*–ˆ00ÇË6&nèf;kΞ;µÜ‰ Õ»Ö\¯ÌžHµà¨.`ÖãFAÃ×<ÝÏ)|¹h8ÈÌXFËÑ);Èåq-ÐÎeTÐÀC4ÐÑ76Ýàb$»æƒ³Ö…#®Òy¥Ý¢ÎÔ~;ŸØxÌÀ“,‘æœbá§K´Á‹ÔÖ¶1€ØħÄÅ4½Áª&káÈ"{ÏÍÕ¤“ε/mèÂ/PÛÅ4qÎÆnÑÌDGÔä7=ÇÉLe¿Êr±Ý®9Íá‘ ˆõj-Êà¢'qß“yß“%w¸¤aÅÌ¡ÅÖŸ¿«‰Ô°”ÐÁ#|âÓ1€Ê«%KÕºQiº²!kܶ0‹æÛkHÈÒLEêÔXfÛÃ%eÖÃb»ã`ÃÅ|G¼Úz'²Ì˜W¾Ó—]–ï8Ó̳ƒ×«ÐЯ” +cÈŸ!2ÚщÔÀOßè)xÒ­A;¤¾nY÷ËYYÒÜJu§·*_ÏÏvgÞ½h8žÙOpÞ¿kTÓÈa?ÍÊc4¤´s?£ÄŒ#HȺ-—Ͷ#nѦ;£ÏÎ$°ËÇ6½ÉC~ÅäguñÈNg¿ÖA\ÊÆ5b¯rbθx_“Õ7J¬¬ol³WEŒ¿k`ª JPxÈ«6S§›[`ÇvX€³†A=Õ}_]¾’4`¾·4d´¤f6”¿C>Ãœ`{ÀµL§ÉÁo½ºÍ¯½ÄÛ§ÅÃõ¸ÓàÖ«ÁÞ÷³µç÷­³¾ÀËžÊÃŽÅÓ¶ÅιÄÈÂâÆÓ¨¸«¦³Ü·Ù·ºµ…„ͬK¢Ä¢w»º±Ï³Ë»wmM›cidUh’¨ŠPbž^…²j_rÈbVcÄvdm´jnb£i^S¹kg]¦Ž[ažww@·go¨Ô‡TšVzJs b;_-C8&CHVQ?6C+J28 7MXI3E%(6C=XZ E_ 1 B*IXoo]nA(~#D'¡ SE…)0+xe*• I2–B>%‡GP~PšNŠDy5‰c–;Š=–H‰F&=/s$CTeR>dn“U’\m_Kƒl›mrS©…ZjÉH¹S«c…QƒO^¥¸““§’›€’ƒk™u‡U›{nz‹€Wyp\Rk}{ohFWQPOcT)bgN=~ŽpqvsŠ«x¬|ËwÊܴŠzÀz•†¿}‘€›˜€–¬µ’ˆ‡Àœ®¦ŸŽ‡ž¢›‹–¢œ‰‡´‚‚†­š«“¸¡§” Á¶|³£Å€©•u‰©š¶µŽÁyº¡r|±”¬¸‘ˆ‡° ƒo³ƒ …²Ž†›À‚¨†“›¹¸¡n€¶Š}¨‹º‹¹‘Ô¢qØ’¾¶¸ «Ÿ¹Š›±Ò–¥·“d´‰¤‹Š˜º“ƒŒ†|§…žŽ…·Ÿ¿™¾¯Ñx£¤t—Å–Á˜»¥”{Г‚gº«½¨Á„º‘”­­‹ŒÈ¦‚¬»¥¯ œz¸”¿™«¢Ÿ…•—™Œª¨¬†²¨Ãr›§ŠgÍœ˜Ÿ¾‘„ ¢…„¾–„•´ ~’£žŒ†Ç›pm¬±‡—°…–žÅŽÌ‰Æœž…¸¨Ÿ•¸}ˆ“¡|„†‡“½§—§™–D“±†*uƺftÖÅUo¤»>uáA\صaoÛÃYeÂÜgHÕ°[HÑÈ~RÑâ\cÑÅVJÎÈ“<Ìš+ŧ.Ÿ©‰.Ù¹6œ¼·Kã°V„ÊØgXøJcÓÊu‚¹ÂGrä¶n\æÕH/ǧ:YǪ_>ŽÞ@:¥°bé‚&Hÿ©RfÖv58ß™1 ×°: õŠ&&èˆ-$½81!\Š%?¦69o) 6R$&1c,(Gp1N+>¡/'’-›#G•64»+!4¸#%!,¹9'Ã+‡-#&¬ C´?6(¡=',ÔI ^äN(:»g#2Úc"ÔJ/±Ž •%"Á‡'Øn'Ù¿68”À1“âgªÔE&dÜ8+mÍ&:‹Øn@èÇC)ͱ+%á£5 Þ˜ +®©C%ª†DE«·E*¶¹7²:)»”!(­’>?‡×k:tÓ‰.•Ð'Èʬ*³Í­7“ÕŸžÐ¢DgÚ±+BÔ½BZÙ£!}å­>8ÓÎ9BÐÀQUØ°6CÇÔj˜Ôx9ÛãUvéÇHHÄÜc[óذуEßØ\ØÕi'lÈ‹R³ÆdÖµpѸµê§˜Ë›Ö«à²=¢Ô°ˆØÞƒë½!Ÿä¿¶è¶ŒÙ»/rÐÃ?mâº-tÊÃ,HÖË9aǶDV¾¬IB­Ø«M»ÖÊÙ„#Á¾x³Æ¡9£À’7±Õ¢O¢Ò½zê¯Q¤Ý¦Dæ¢+†ÖÄ0p¿Å!mÀ»¤òÄ8tÙ¿,mÝÌ!V×¹,›Èu"Âé[`ÒÃ8jÙ¾%=½½v7ïÛ‚,ÂØx(µÞ£ ‰ß¨žÇ˜6Æãy¼á€ÑÇ8È­7q³¬d»±JÓ² Sε'V˽5`ºÕR-¼ÐP±»2\ÑÇ=UÈÐd9ºÜnH½Î^vÛÌd"•×j?°Ì€^£³TSš¿ˆ0`Ç·-^ð»+vÑ}'‡Ð¾5iÏÕ<]Ë×=SÎÐI\ÛÄ^~áÇI|æÓAyÆÌ{:ªpG›¸wV½¼SÁ€:o§lO“È{[€§ƒRi¾ÅHg½ªUy·–;b´Ÿ?z¸—ISË bRÕ¾`X®W2¦ÉCg³·]}Ñ^5¶¢W®·Ö¾Í¸ÏóÝæÐÃÆÿº«ïæ¾ÍîãÚ©ø¶Ö¾ÒÁ’¥ÇÅ™ÙÓÖΡԵÔÌÅ¾Ç´í¤‚W‰žX¹­š£ÌΪ»¢Œm©³iSs¦žYq¢nk°a¯³µ:Ž[jƒƒe7‹Šc´Ì],¹sgr«Í‡k«¯‰<”–k[žmI u}I¨mtK0AV!H(=*S.o\{'OlA‡J‡%JCLY G1w'K$}'H%—=T9~<ŽfŠB•4”<§~ˆ4v-jBb.f`Z3}Q‹@JV(s\UP^r{‘g•p¥s‰b˜:¢T¦V•Uª|•‹v•‘ŸuhŽ–[ry9qy‡`€~–^x‹~hpwO‹d…pI~ge`s]‚—x§^•cŸs‘¬y‹u’®§t°ŒŠyǣÆ¡„z™¡©€x·’ƒ «ƒ®‹°¥|¨™™†ƒ“ˆx‚ž~|·¢–¨¦x£“Š‘­£†˜¹œqƒ¾‚}‚¡¤|€½ª…‹žj²–”‘ºŠ‰~³vŒyƴȆˆÂŒpÀ¦¡t»œåŠ®tÕÀ±·ˆ²š¢y·”žƒÁ¶²–„Žx€›‰®©§gŠ¥¤ƒ¦ª–p˜št‰µŒvŒÇ“ˆp͇mq²£…ƒ¿¤w}± y¸«ˆ†¼¤Ó‰œ¢k[¿´„§˜eq¾ “\¯•Œ‚½¥‰eÆ®œ…§¤—ƒ¢¨­œ¢·œkˆ£¨j‡Å•„œ¨™†š§¥†¦²„¬Ÿ€v»‘~€ËŸÂ~¨“¤Ä©y¡ ŸqvÅŽ›¿—Ÿr½˜sv”Š‡·Ÿ’wŠ ~¦¢–Z£ß­S›Í·djã¯rKØÁqR¸Ä8gËÑdf¼µegÔÅWGÏ—D`ÃËa>¶¸OHÝÌBMʯ`Nˆ¼±5ˆº¯R¾Ä”=¿ß¨MœÍÆ?‹ÁÒ5ƒÁÓBIßÖciÀ¾f†ÍÄNŠÊ¼e,¢Èj0¥Úg4¹Èd9£¹x7¢ÓgM§ÅMEžÚlb=Ä8d¬ƒfÂ`-í©˜Ï•U]» /lìC,¹³eZÛ.“Á‹.XÚ½2@ÍÐ'aíÁh©ÞÕ‚`çÜ«˜ÎðxtæàK‹ã×xHØÓŠ?ÞÕ-^Ö´%}Îïm?ÝÚ‹PËæpKÖÒPeÌÈlFÏÚNVÜÔpBâËq'×K"vÜ{ˆàL:žèr!ɇÚ\ÔËP8-Û¬.,ìk8Ý$]꣛åÈBAåÄ%=ÜÂ#"̓ ÚŒ3ÂY0Ä„+m¤*e¾'*:o:=š$M²,*A‘2+\É)#*™,6£ 3s& MÀ+<Ó(3³ --­.Ä&DË) !ªxÅ!3%¨62¾E/Í!?¯z&)ÝW6ë˜)Ák<¶œ ÞÔ|"1²$0’€O:ª»./nÇ.+nî5hÀ5(áˆ,äÄ(ÚÇA.Ï™! ØÌ*.±™«ž*Ä<:ŽÌ “™/<®12ÄÉ10yí€Á†¾Í’ ÉͶ¶ß§,ÀÙ¡_¨à¯%CÔ½)qâ½0}àÐcËØI3ÄæEOÀ·1k溅ÌØm0ÙÝLèÛ:>ÕçŠìÈ"•éŽ{ÚW]½Æ–OµÖ}±Í~0£Ê“]ÝÄ‘ã *¸Þ4Žß¢”Å°™èȶÀ»ìÆ'—Ö¬wبK¡É·7oÚ¿NØÞ#~û´hãÚHmèÇ3[ݪ2YÛϴ#‡à¥¼ÐhMÙë]ߦDÞˆŽæ™’ò¼CÛ¯'VÒ¨.Œ´ªkÏä)/Þ»$JÒ½"‚ÍÙ9.ÓÊ5Oæ¿.fÇä:|àYâÔfcÛÍ<3ÉÍX³ñ.eÃꄮñ«Ö Òl?›Ñ°oÎÌDͱQì’eÍÑX‡ê¶påË8x¿ûbhÕÎ.Rá¼F4»³V2ª»&`Ʊ1FÔ½XqáËi5¡ÄQ/š¯™5¾Âh"µÛn?®»„$ƒ¯™3ÔÈŸ'“Ŭ!–Öº8lÚÆ•ÔÏ3—äÎ1‡­Ø€oÐÏ_kÞÁ]‹ÈÊUfȳg_¶ÀYL‡ÍjKšÁ”OÁp\‰´ym“ÀzOe§•NEÇ¿cJÛvYiË—I:Ñž2T·³]EÑ›ab¬™BN¡ÐJo¸Ê(U½¥D[—¶R¾°Áu¬­ä½°ã³Ù§ÚÒÅ·ÇÆ¿Å´Ò¬¼¼¨Ä©ÁÂÝ ËÀ”ܬµfš½²Ý»Â¸ç·Ãµ¸Ï°²¢ž·Îĵȸ´©¼š¹¦Å±o_ZÃVv·–cm«•ul‚™j¨™w‰Á³YM»~n°qv'¨YzWÁm‡u¨¸šw ½…oŸšle…'¦D_A/…2n"i/rE>GpB6i+S/B;-J R/g)IQ"YC`]R=-A2-?"R*sX ƒ&anQ"‡YvJ1’8X\ZšD;;,†4K0€-n0ˆl¯:£0=$•j†{‹mS.Og[AoXUuuQC!KfB/[]Y6_{Q˜J‘,W3‰?D“;–L‚[ˆlƒZsqO–~€Œ‰“lvqtgŽWOgfJd›m’sgZgˆizgUuic8f•hž‚œk’£›˜‘íœr¯—¥ƒ³”­zǤˆÆ«®y•¦……’œ¤”¥¶˜²œž‰œƒu’¶­“¤²—¯•­ ‘–¨£¯½®™’ª£«„µ½³È…´•Ÿo‰³•¼¢»l¥™‡³Žµ’¸§•u±«ÆŒÃ‘z€­¥¤~ÊÃlºÚ€Ê«¾~­¹Þ·œªw¯£ˆ|´„ž‡¥£µ¥¥ÃŒ ¢Ä£°Ã¤‚­½ †¤š£†°É¬k¾®Æs£©Å}¨£z–®´Ç„——‡†˜ƒŠ´‘—t±’Šª–y€°Ÿ¡mÇ•cÀšÅ’°±s¬µ¤zÓ³´‰›³ ~³³º‹­³™›²“œ³ˆ›—µª‰ž¯µvÅn®¬›±Š¿¢¦¡¹ŸœÔ“Š†Ã§‡Š§šp_Ф‰–•„kœŠ‡Â˜°X{‘]µ“”}¼‚žN‰ÐŸTÛ©oO¥Ï\dÁËNs´½Mhо>GÏÄkPÔ¸V>«Ë¶—^PÔ³gcÕ¾]N·ÜšAÃÒ¨/¼ªœÎÈ›RšÝÆ*Œ²–:ÜŸ-t·ÌK8Âäyiµ¾AËÀC_×ÄFD·ÉFM£ã^B­Ì{=³áU5ÑQD¾½MEƒ½µnÙ°„ׇ'§×˜&ˆ¹¡+‰Ü»'æ‡9KÛ–?qßØ8•´q?yך1ƒÒÎ!ƒÔÔ0Xäã‚îÛíÄåÚ±‘åÞš“åÒ‰ÀâØ°SÚó™>ÿÉ%äÐ+NÀÇ•aûã•KßÈXwàñY<ÕÜNZîÏJdƹH>ÌÏ_;OÊb,¯Ô\*–ÚoµÌzߥi·×}.RÛ”)Ýq(1Ý?#rÊ‹EAäÓ*2½Ð;7¾¤DÈèJ(Ýg(×bäV6·ž)и25ƒ3!dƒ54E”9.X¥,)6€:,:‘+*+¦$0Ÿ(Z«3.'¤'6Â#">¶#5¤¬%4%!B°; &’50¥U.,ÊF)[Ì46àp$jH+Ûp!!³‰(œ…+Á«$µY'Œ‰5"ž1ŽÕ-&{«/iÒ'gá*†Í1ϵhUÏÌ‹Sä¾un«»mV²ÐaJqÝŒ0´”@«¤š0´ÍÈc}á“]{ØÉ%ŠÄÓ)NËÇksÇÇmhÜã:~á¿m1¸ÆRt°»_hɦW6¥ÇH+ÄV4Öj"¥Í^I0ì§7%ÑŠ*°ænV?¤•IJÞ›45åj9{˧T<£¸>5±Ó+qêœ6¥Úž=mǾðÝ*‹ææ}|ã×™­äÜŒWÓç-–èÕœE½åX)äÛ~…çË•ïãCiÚäCZØæiFã½N`Íé~8éݦ=Ù¹TÔÏeA£Þu)aæ†C°ÏF MÖp ®°€&Vî`3Ø΄%Câ­(+ê¦"„܇2Tëª!²ÞËG0ݨ$/®ºFwß›,1°ª<ÒHGÆ­=BUp$>s1&G‚& `œ*#Q\"-<„)I_ #; 'Ž &:±Ç° ¿'7®$*6Õ.'½3!©'X¸$,¶O%/¿H%9Í#)IÈE.ã]-&ÝX0)àn"/ÅC±ŒÝY/Æ•4%¥°0áG%”µ0"jã3&_Ë@(Ð „æu?'Ó¦50ÈÀ+<Ƨ-1Ï‘7#ã¢$ Ó†3ÑÊ!&bÛšÌC(Úž%'«ÄA'YãŒSœè®±ô•J­Ó°<ÍÄ”"™¼‘$^­3Û¼\@ÀÖ-nå¾t»ÆTOÓµ9SàÓ#HÓ»†½äxSÖ½n]íÅÜÒ*mÖÖ4"·ë`4Ú²<)Ò¾3bïÂr`¹ãn+¶:ÁÍz#™ß®O Ç8ÍÃyGÈݯ9ϸ;ˆí¾6cð•5‘ÍÎ ˆ¾± Qê¡9ÎÿFmàÎC\ÄÒ}^¶µdJÙ¾5YÑÈEIÑÓjpáÀu1µÊa^ã¿zLÝÇ{3¾Íu7ÄÊh5±¡M“·²*¬Ï %Ïˤ6žÙŸ8<ÀÃFš¸©/µÄzjÁÍ\x³ÒT¿Ê·Sdæ¶TÆ·{<·öR@‰Çs8xÇzGˆÕgo ¤qPpØyaFÜš6j¤’WsÊlAg·ŒMGÂŽ_j­®Ia½«]cÃ>c®²RJ̯W_¼µHu¢Ê¨µ¸ÛÉÌóÕ¿®á×·¿ì˽ųݭÍμ汴¢ß¡Ê¼†Ã·ÅƹҬ¾®¸Ì¿À±²¾ÃÅ©†œì¹ç·ÆÀƒ¸œTj‰Å”[l¥=iŒ±žYr’Dlm¦l™°…{v¢¨pp–Ž}^¨’k•¤¶?«2~^Àˆt²“„] ”ldŸt|[¨£y„±Gz6ƒ~O![.dF!<%H)5-G)4)X+m4>ud"R][(ˆZ€ I1™'R€?‰$NJ‰#N(†@Z*ˆ/?+X0z)M:§=CO_BI5]‹LLsoT:~9/.iPt„_j®|}WrIhecBG˜K‚P H‚YƒQ™O§`†dŠsƒvƒf—^—6ŽE…z‰er{‰[w:oTe`MmR~kƒ[Hsh€¥~‡^Œ…•ƒ¹‡Äƒ½Öº‹Æǵu¤§„±«v‹…‰tŒ¥©˜™§š›‡Ã©™”Šµ–jª¦§ –´¬¹…´ ¹š³š›¦­Õ¢‘m¨•°pÁŒs\°«|Ÿ±¡”µŒ€‹Åš¬’¯‘†v¦r€³ ´Š™¯­uª§omÊ¥àlƘsÃŒ¾} ¦‘€¢¢Àr»yy½¾àœ¤»ŒŸ½Ð• ¨¼ˆœ©®uš±Œq¢Ÿ¹”²š¹½¡Ç•ºŠ¬¨¯|¹«£{Ì›´~Á¡k¼’p|Ñ‘Ÿ‚ª©‘qº©qÓŒ|Æ—Œ†¢¢v£§±š›Êºµ´ŽÃ¬±„ªË¸¡“~Á颳¦s†¥†…­Â£„„½®É¡l¥¦¡…ÆÁ‹ÁœzÕ•Šx¶”œr”€†¬¯¹¤§¤ug¦¾†_‚™žnˆ­™y™¥»hЪB|»]ràËPYÆÓYy̪5W˨\mÚÂlNËÌcNÓ¯w8ÕÍu=ÐÀ[f³¹bNÂÅNª»¿ZÇÉ’,½®‚=›ç–af¿×G‰Ó¨2ˆÓÇY]ϼ0kÕÉ5‹Ç¹>nèÉTZÂÓgHÁÄrIËÛq1¬ÐdPŸãM;¶¯8NOÛ£7Κ#Ã}$£Ó@ië2xã®=yØšFL×±CBÕÊ {Ä­–ÞŽNxо2„ê½?aððQ”ÙÖ¡}ÒâŸwÎØfŽßµ8gÛÔ€:ÜïªE뻀ÎÊHKéÒr>îç_eÑÔ6WÎåX+êÛ¬2õ¼JGäµ?-ºÚ~B¦µ13°ëi ’í~.pÍ}Ëq2~Ô`K‡ù«* í«"¥Ô¹5[ÝC9-Ì©)&в%LÁ»WË€, Õ¹1³x4â:+/C„E--”+Q„.\v!.8L3L#Lz*3X’'!/s33w*/J•@)= /+,®$-·/5/À3"•&5)Ã04Â!5¿Y*HÜX34¶K2Ú.'1¼I$,³9."¼R&-Æx*‹%¸’µa3/Ñ°ªØ*—×-)¨Ê*jÝ92cç:.iÑ17Mä„-¨ŽD.Æy5/ÝW9¼£<#­–+¯d £Ã.—Ú-'­¤**›¨*@£ÝŽ8·¼ª³Þ™=ºÔÀK¤Þ's­ª °é§4/ÑײٷQÆ¿º€Ë´5lÔê,aÜÀ#›àÝ*uÎÈ~Ù½o…Ò­MÃĆ@ÍÛi>ÄØW…Õ¿E#¸Þ•ÐÉr ¬à…»ç¬*Ã×’¤ß’UÓî{-’Ï©Nf¸À<®Á¯8©ó³oËÈ9t»Ô!‚Ô¬:*ì•DjÖÏ=<¤Ïf$¢ÕZhÞÅLUÙÈh`µÅq3¶Æ%¼¹R*Ÿ¾‚EÂÊ…B»ÖOZÎÀ5£É£&jä°B…Ç%‚ɽ=jÛÂ;•Õ¾@R¯¿\=®¬So¾ÎVN¹ÚKt¬¼c4£Û^O··u]ÆÂnR‰½z8~Ïnh™«yEŽ»w`[ÉŽ`f¼²`v¸€X^º±\qÒ®bl“·]K¯X\Í£W\»¶D\¸¨UhɶT»¯¨Á¨٦àËÏáܺ¡ÔÙÒƶܧ¹¬Že¨Ì¨ÌÖßÈÝ«µµx©­×¿ÁèÂä¬É£p^n²j¢¾»ó¨Ýªxg›Œ‹I‹¿¡»Â£]aŸ”paÇ\µ»»]gb’vmm’msZ§œ`Š®yy§ÂfÀ´]qO»—Ç…d…‹m¨´É~b–MNU¿\S¶E~p(\VLI,\$E)M=#>$Q!*O+@!>0J#I J/@,C('Mf8c7[-a:OL%U#Œ;%ƒb!}8cRžBI0…;D(ž*5'†Mlš0jpAN ufUQg]i4iaW/Š6\)dtnzi[mZ7†HKO–-r4•LŒ?ŸLŠHZ¢€™6°xƒZžp‡B‚>Œ4Ž[Nvq}cv[‘UqNocˆdšuhyx{ƒœ¸”¤‰µ¬¸‚Á¿Às·ºÍg¢°Á‰½¦sxÄ oŒ“‹Ë‰–¢•Œ¯»˜µškž—‡¦}„ªª‚‘º•Ÿˆ¿£‘x«™p–¤·‚ƒµ¬švÆž‚’¶›qŠ¾•Šoº«‚Š’’jÀ”tiªž—W¯šÃz—…|n£–t‡­³‰|±§·‹ŸÀ\£¢Öˆ§©Æ€§ lÄ£~»¬©sœ–yƒ¨°Œ·Àœ‰¡Ê“‘²­‚š©ÃŸÀ«Íˆ¼”y‰®Š½º„x¿‰¿‘Ä•d¢‡az±­šƒ«›†„¤•®ŠÖ”™{¬¶k“Äž}¯¹¬c¬§·~©¢²Àµ©Œ «¢ˆ”™•Š‚Ô¾µ™¸Š¥¤Â”Ö¬®•Æ²j“ȱ¢‰¸ªoË“Øx£„w¸¬”u´£œ|‹–¡o²»“yœ§P£ˆ…y¼®­x¼¹¡~ߢg|ºÌQZ¾ÅqgåÌRsÓ™Q‰Ã™OEÄÌ{AçÓŠJ­ÆO!˜×ŽO·É‚M¬¸~^кo%¶ÂG¦Î¤<δ„H©¼Ä7¨»Ë)—ÜÐX†ËÂLfʽE[Óâ=ˆÉËD’ÜÙmSÂÑdQðÀfY¯®>>‘Ñd0“ÙQH£¾`N£äz,Fâ”2—Õ•—­>B‚ε:?Õ¤2Y¥’@R°ž;3å­-0ꊌޞ>¾ÖÌ0™èÆ/oåÆyç¿UdÎábfßÕh`èÍ4ƒÛ¾jêÙŽ5îí~¢÷É.™ÐãRSÐåFßïKB¸ÖBE欘>ÜÉ?8¶»M ÓL#¨Ó]4wÑ~•ì>/†×k:TÞo)iÞU!kâŽ%—Õ‘1JÆž$ƒïg+Wõµ>ÈÃLÒ­wÖ²=aå>(à§+!ò\+0Ød%)¹–($<ž0YŸ#$Fœ$"[—-(Or209o#,"³04(ª(*/:+­*ª(@›*Æ33Æ$ !ÁLÀD+!ÑM!1¿M.7Á)¯B'.ñj/"ÂH:.ÕZ&®Ÿ$1£’2+Él(Í”U½Ñ>)˜Ó+˜±%5gÛ#gìI ‚Ñ=1Ô”,&éÖC7Ï”1!á)7M܆3Ä´7#Í"Õ§<5‰Û%/ª·3·ÙDQËÒe:ÂË‚©à¬CºÐj-¬Òªº¯©KóŒ4hÕ»/™¹ÃIBéÆ^LÐÇ&YÜÐp>¯¿OXÕÄCnÉÄZ,ÔÃX<ÐÁs«ß7{ØÃyIÏÖ]S¼ÒŠCÈÒr>‰ä“C´Íp$½Ýy.µÉ‚Bvʯ$·Õ™U­Íu ŸØ°Q ¿É-¬ÔŸÐÈ°–Ë«%ÒÎ>{êÁ"ŒÏÃ0cÜÛ%9ÕÔ>ã³IxÔÛ/läÄAXã¿8rÕÛN)ÆÓˆ6£ñ`ÖÞP9¥äÆÍ“!¬å“iݦ˜¸ÁI–ÀºñÃÅ®$m¼½)ÀàRÏŸZÕÊ3nì×'IÎìA‡Ö¬->´ÛQºâWI˶1xÅÔp&ÀÛS3åÌ…¶Ý… ÊÙ•$ÈÀ‰<ÈÒ†)´Ò£ƒÎ­I‰ë¨mY߃iÌ·'È´;ÅÊOä½>CÅÜ)e³ÄRIãåPAÞ«&b¾ÐLf¾À|TÑÐEÈÓoVÕ±pSç¹ywèºk\Ó¸‚D¨Ó¦.„ÔŒ‚á•?—¿«6¯Å¼&²ÃÕC—Ò¾?ž×ÇQ}Ý·^“Å«A¥¾ºŒ¶ÉÌfZ°»}A¥¸r9˜¾{*d³sF]¾q`ª©mazÙ~ivÇkC³lq²™[a§uKÅ‚arœlT3ܳuGɨ'pǯV—¤­„²²Å¶ËÇÍѳ²¨Â¹¯½Ê­ŸÃÃØƳ»áª¾‹Ã«¥­Æ¶ºÜ¶É²½É®ÜÇå·ÅÞµ¹Âx¿¾Ãc|­¯}|ƒ°c£·Ÿw’½ƒEaƒ§¥hSIy¹§€y}¹SaD•Fi ®^dnm,‡i•ËxO‰†j§wiK…Mjp£›Vt¢ŽeV–±‰x ‡Uµ„H™Os=h-y:R@\9YMMa2 V2A,;>?!?H%7$E"EE*L#A >= 5&NRe T/}+1+‚Dq^%˜P*L=’+H%’=Bq&B.W/Ÿ6L#‰Rl‡*X.ˆ@]2KpFIve/:ˆO`6„~RYk„_ZE~)JTdxZP…RcF¨Q˜@‡Bt£Z„.–Ÿ”ƒ”fmB¼2•i•Yp7sp|u›\gK™dSVL9:f‚Y•ˆx{w˜™·Ã© Í²n²¢‚ÇÐƃ«žp~–bw†Ž”X¡›aŽœ³‰‘‡¾~‹›¸‹’£˜e–±†Œ“Ž›|¦¾¥“±Ø®v‡•©u¹o–ºŒ†µ°¨‡º‚¤t¢›´k©¥°~Ĉp‰¥¢†U­Œ±t•®ÂjŲ–`¨šw]½—ÄU·ŠÝO”²à‡¯Ÿx„–—ÀŽÃ–Æ‹‘–¾†Š·‰ƒ®Ÿ›¤™ŠŽÆ¨ƒ¦³|¡µã¹ƒÃž‡Ç°}f´´¤rÀ¹qq¨¡”Z¸œ·‰£¬ª‡ÆÀŸiª‘£[¶©žyÄ‘™u”»šzš¸£h¬Ät›”ÁŸ¸§¾}¡»]¦–ŒlwȸŠ€£¯„¨››½¾“m¾²o‚ƪÃm¼¶n½Šgµ{‡¿¨[α¦jºŸ”už¥™Ž€¤§ƒ—¦ŽwŒœd‚·uoŸ½J‹Â¾;|©¿rd»´lDηÁ§ƒ@ÆÀ‹7—ÏŸ+Œ½¡&Š¶®$ˆÄÎZkÖÒ;Nàå<“Ô»/[ãÑS]ªäXTÁ¯1,¶ÌX2˜åT2˜áF7®ËDNGá°)\Òª@L¼-¥ÛŠF_âš&dÌ­@VÕq5æµ3Ü£zàkœà—%’âÑfdÊÜ«{Õª4œåÒnHïÆ3€ÍÝ€ãÅ(…ÝÀNJÞ׸YêÜE~óøf_áézMÙåE\ÚÉKkÙÎo6ÖÙ5TåÒQ^Ø°+I¸Öi!nÒDOƲ[.¯½q.`Û[)«Í>)oÏ'#t¸¸æ•#FåI8pÜNKT׈*ÿ­;&Ì®:7»¾AÒ’2/Ò&@ÝQ;'ÂŽ#,Í™<'U‰7/bsC•3.;…3+I‚,D-±'0 …!Hq%%7³(-‰6+Y4$“&%¥":$²/(;¹%7"²U3“K#.˜6-/µ&#ÃU 2ËJ%3ÈN%#®c?‘„02¥k0"½U(¡¦"5‰;*\¸/)´Ò..e¿56cÖ6$eÛ6/Q×YÊÇ?!À@.:í0Óž4#Ó£6 +”W9(‹¼iÑÊ7GÖÀPUÒ²?7ÓÛt+ËÓ_1ÄÕHbá¦M/Ô°m:ÄÏ~/©çp*Þ·r,ÍÊkAÍÛ…)ÜÒsÖ¸/‰×¾ªÅ’Ùו"Ú˜$‰Õ«µ×´1ŠÑ ܷ Wؤ$£Ö½/ƒÝÄ5‚ЫD>åÉwæ¿0?ß»^ÙÃO_àðBkÞÀ™¬Û•©ÐŒ<ÏÕŠ4­â”¸Ñ¤ «Ø¢™Õí®Ô¸“Í©4·½«'Ã×.…ÀÆ-GÄÅ·ÅÉ&{àá-ƒØÀißÈ7MÁç‚QáÈB8ÎÄV_ë­C*ÀɃ¹Ò\Ú܃ÂÒ§&¢Ó•JžÖ>ñÚaŒÆ¯!yȨuÝ›9©Ò¥"\À¶ƒÐÈWÒ²3\ÍÊ5}ßÐ5EÂÎV/äÙ_4½É0MËßcr¢Ík=­Âg- ÍYJÃÛf<©œ~4¿¾TN¶³.¿¨"B½ªWÏŸ,‘ɳ-e¸·CcÂË&[±ÑWGÄ¿QˆÄ¦m„Á¿Gǹq.«×SX}Â}_†¬eBwÐfTa·~e…¥iQŠ¯igiͧlSÇ“[vÄ›qd°¢Ujº’Ua¦X;¢}\Y XG¼ºH`¦µUç Åœ³ÃÓÑÄÞÃÈ̙ؾ¹©«¼Í¦¢jÇ£åÃÛª½~¨¢³¯»æÈͳĺËÒÙÆÒÌ·šï°È®â¨º«j¢Ï““³ÃÂŽ°Ç¥rDrÁ•…|hiu›šac´dfoŠQq‰¡¦sO‹^h’¬Qhœ‘bI•UfBµ‘X¼¤|H ¸ˆV®ƒ—‡‘veœ‡ˆN¨—nE¥”—>¥sV5_5bd1WLuj0AO/CT2DK"I F1/ Da POJV"LY vR4K +D.FiYYIuN7‚Zn-Rg53(h+b-~(sF—E^;“CƒHŒAehm?8fW„szUsJ‘AT b{T\ovI/Cu19Q”0p;Hw3•@vI–L™…”T™ ›‡“qj}˜Hl ew[‘m~Z‚HvNQ„XyQn]†„–j‚œ‘ž¬›¸ÏïjÁ¹ËμÂf´ÊÌz³–pu°ŒXx¢¤’p £q‡§™z§¤¢„’—€|¯Š‡†–ž†™´’•U«–¥—²¸‹–½“³¡³­Œ­y¶™³½‰Šh®xbŸ¦¦]¹£sj° ©e¨œÃx²~¹sºš“h°§ƒ¬¤Âc²˜¦k¬È³R¡ —••s¬•¶Š¦¶Å‰¥™˜’zµêz˜‘ÁŠ‚À¾’‘™º‹ ½g„¹¡¥mÒ©±uÔ˜Št¬¬„RÍ‚XÒ ZºŽŒQϱ g½³„›¨½pÍ«˜Žº±«c£¼£~Ž˜«SÖŸ·tœ¸}«¨·€¤·œn…«¼}v»‚m}ħnn¦¥Šo´žgtºÂ^ƒ²”wÅ‹i°œn‡©‰‰i½’vlÅ©¯b¯®¥s’³œt¬¢’m¬Ÿ dŸ‹—j†©˜iÓÞJ‡ÆÕiXÐÂ|c©®FIº°Eq¢°QF±àks²æzZ¿×UBÈ·JQÁÚtHÎã‚]ÙÈ€-¯¶ŽO¡Ëªi©áQ¿ÊÄ5£ÖÊC†Ë»GqÑÐWsÓÝLLËãmfßÂ*zºÊWFÁÆlD‰ÂiS϶j1«ðM.mç^-ªV.yÖv0Nݧ2Hߟ/vÈxQ£Â¡/7â”Q5ÌŽ+Jij?(·Ç$u´¢ŒÍ§ËÅxìÝlhßÖDkþÍ7mëáDfÝË8eúÖdÚÞ0†ÄáFFÙÑX\óàu’ô׶­×ã›PèÓ–eÀÈK.ÂòZFæØ@NÛ½E!·Ø\*„çm&µÄfL¢ÜVdoÓL%®æ{/sÍ/)¡ßvODݼ"3ä-Sñ¢rØÉ03±µ â´2"µd#2Ö¹EÙ‘6 ô©-'Þ–5»‰-€™!=°n4)SÊ0_ª3@./"5x##©42  )Q±>@Õ,/Â0$E0*» 2±3'¶!´('-°*$Ÿ?5!œ=2EÐ(&4åW6,ÇH+ÛT)×]%#QÞÔ34ÕÔ"iËÎXeÈØP>Ï®.u»µm0¶Ý`WÊÐs<æÑ'OÉÑ`&»ÊtÛßp9ÉÒo(ÂÅ’@ÊЋ±Ìp1­ê‹#ˆÒ´$¢Þ§ÒÑœ$¸Î¶.‡×ͺÅÒ”ÑÃ5cÕÔexÒÀ0ƒÞ¯+’Û¦)„óÏ4ZÌ×5‘ˈÚÖeZâÒ#YÍÐpîÕI2¯ÝŸ*àÜ"ÎÑ€µÞ¨„Ë¥²Ö´9²ÙÙÔÁ•×Ç$–䎲½¹sÑÍ@xÒÄ ŒÙ¹jÕÛ=eãØ5iåÇjÅÃT<Ï×F%ÏÜ5ÀÒ+zݾGPÃØj!ÖÆŒ/¦â‚—Ò¡ˆå +³Åz6“âµ›Óº:ì¶# Åˆ&QË´Yì­Oç»`ÓÂB¸Ö$vʵfhÒÅRLÀ¤-~¯²'AwÜjtÓº{g×ÇbN¸Ât3‰ÅuSî½iRáÂi>ÙÀ4šÖ¬;¡ÊŒD~ËœGŸÃÈFsµ¸W«Á©Yœ¹¹g‹Ì™RtÕ³I‰Î¶@c¸ÎmuÝÆo_ʼcZ¯¼jq} TZ‡¨K6«‹/R’°”]jÒƒ/tÙJB‹Åž+²=&QЖ#^Û€'l®ã iȯ"+±r)5èÓ#¹Z,1îq'1»AÆ‹%¸v!xx+™}#1:ƒ'>0b*#Ae*3?‰93n/*z0,J##–&5­.>·4«-'µ %½ )¨% Ž*Ê_ $°KlÉC:8ÙS)ÓF(½79/¤x#ƒjAp%ÔO/ª©Žš*Ž³,,”Î( OÊ,&€çSyóm%Lã¶5(Û´-õc-*ÀŒÖ*̘)1È0!¨Ã™¤&ÁÛ0kåá9BÎÑŠGÁí—&Ää†fÄã’?½ã¨&¿×©+«ò‹Oáµ+CÚÊ-jÜÍ-‘ÎÓ16ÍÏ?zÅãJE׺-BÒÙvµ²\IÔÎ;qÍÃBdä×DUÁÄqÇÍgZÇÕmNº×ŠÝÖ¼à‚,¬´ž,½ñµÂפÊ䙪⧡蹷˕ˆñÔ(ŽÐÊ!™óμá¨%|õ%ŒâÀ4]ò΋մ'cÕ±FzÞÖ,Ö´&;ÅÊ&¾Ó‹)ÞÖ`#Úäc©Ú™ºÙ¥"­Ù¢¨Ä¨*«ïº¶Ï²1 Ü—&’ë¬ bÒàJGéÒ7cÐÖwعŒÙÈU’é³8vÃÉfqÁê2i¿ÙLˆÕÐ?iߺBÂØtAÇÍlNžÄ«+~ÛŠ0Ùê|¿q®Æ§´ÅÈ[®Ì£ +„Þœ ‹ï¯ +_ñº)Ô´UºÇ94½Ê6"½ÑhĬWMÔÓ…8ß¼sP¯Äj`ª¸b8°»_3¶Î‰pÄÑm(–Êk5ºÁh._º´.€®“$¹¤8‹³È@£ÍÌQq¶Ê?¹½ÎdšÓ·lkÐêm|ñPpƶyd»´`:¡¿ƒR®É~I|®iˆ¶†V°R/‚·ˆ[h¬’CR¶°OMÏyH[Í´m`Ã~qe¹‹PS›‘k\Ÿ¾_L¤¿n[½¹Dr¦·‚ºªÄ­ØÞº¢Ô¦Å£Ø§¿È®ë¡x©·¾©±º¹Æ®µµãµµ®ÒÉÄìÚΣ×Ô¼ï°á¿Â¼Ê¾·¢fCÔ­Žyµ—k‹·Um‰±–mf§7qC¶"K8F+,LFM$; h<*U*F$YMH}O`%EmQle7|4!aR%X(N‚D=&¢:w^—5I0„1Z+Ÿ:œ\™I›ny\EÑç¾{ðôššîÝ™¬øÒq<ßà QÍädWäà@,ÔÊ=3ôÏS>Æ®+Ë×`&ˆÖ ,YÑ(1eìAyå0dÐc8bÙ\ ÌÌ|™ßµ¦Ô¦1hç…^Э"™Øµ6¾É!—éÎrçÊ+ßÅ4"ðµ&ãu¾"­™Ž…?ý(O!/2†,%U‰(3œ(Ã,J¡&R»+o"†0g˜$ ÕWÉ!( À)5¸$7¼K.ÈJ(ô-<7ÅO&Þ6/Ý€)Càp1.ƒŒ4/•§!ÃQ*Ο;|¯'Ò°¾"1cì1!kçl2Háy‘×°5±§0•!1å°0ëÆWÛ(Á¸8 Ñ©+pÖ>$—Þµá4aâÛb7½Ñˆ±ò§Æáu)µÏĘθ±Æ¥=}ÚÍ/ˆÖÙ<_ÖÒ>ƒÛ¹UÙÞA,è·>ÎáWÓÌg»ßm!´ë`'ì¹EEãÌo%ÙÏy0§Ö˜^¸Ül´Ô‘+×à€ +Ñä{-ÂàŒ'ˆã³“鶩î#©ìÄ‚Õ½”ßµŽ¶É"råÆ ëޥ豃ÕÛ/„ç¿VÃÝ@xÔ²}ÙàU]Õ½#VÝè0UÅÚbÛ飢äêëŒÃË«¦Í¹GÁò«8¹â› [óÍ@ ×¯Pè“' ÖÏ%ŠäÀ ~µ½*5ݲ ‡æÂ$^ÜÓ 1áÖ{ÉÀ1-ËÑ[?¹×M=ñ¾)QÞ¾@XÙÛ~ÚÊx*›¼…Ú¹'ŠÑ•7¢ím@ͺ¡/“Ï×÷ ‡Æ‘†áËuà±WÔ»^Ìß2u´»—ϼsHçÈC5ÍÄ;hÉ¢mxê¿~a»ÁnFÃÖhGÍ°g0Þч{ݽggÅÂW7Ç¿ŸsÕÙÍ5ƒËÃ+œä¯*±ÁÆ7¢ÂÆ*üÅ9|¸©mlÕÁ`…¾·rŠÉÎ}ÎÌq…½´j,ζ`l´©‡K~Ó„<{Å]B|´RSlŃ<<É£/D½€J€ÆœkIÓ—DDΕPT°]3H¹ÇW>¬žIRÇ ;X¯N·³Ö”ÀÉ°¶³ÃªÎ«Ô­¥ÞƬȯ¨GƫžáêÛÔ™ãÞÊÎêßÖÈÅÊ׽ȱ´Ó©Ìº—Ï™Œ³¼¶…M®£nbƒ¬†[Ž3fIØum€¤Yac¼<_¨p_›¦–Yx•¾_`œfE1£¡klšaj½¤íjh®¥eb¯Îqy§¾ºˆœŽwXµtpÆTšfaOf1Y_aB:BqBr]TK.G(X#50N8D[2~"b4dk&d"=N"d&J 1"AU]J#ƒXO„(L2f?uRš,2&“?;3¢>x7‘4G*Ž2ƒ/‹LS/}2k)Bo|nƒ‹qt5‚8YhboCen¢GiR‡L‘rTC…>u5ˆU‚E}`˜ }~‹°šzy}v]zr˜Œw ˜ˆƒŒm‹€zgkˆc~i?oMj@kqts¬»¡¦Á˜Æ¨Æ³¦Æƒ»°»| Â‰°¡‡”³’‡™¤Œ·©”άŠÇ¡¡˜§–À“œ¬¡¤§›«¦˜¬„£…¶·¢¢®ˆ¬“ÎØ•«“‰ËŒÂ£»•²¦¨ž°‡ÄŸ°›²Ó±ž¹­Ä‘¶”±‘¤§¡¢~ɽ–”Á‘۞Ø´†Á–¿~­‚¯r¡”Ä„›ƒã‡½•Î¡Â›ÍŸ±™Î¡ª±Âœœ›Ù• Ÿ¤›—¢ÂŸ¦Â™žµ«¿Ÿ¾€Á¤­‹Ì”ˆ½~ |°w”t¼ƒt¿‚†|¯¿Š³™}Á¢dš´d²’Èx«­©†–¦Ì™Â¦È›¡}­‘”¶‘q°žÃ”l˜ž{zœ¾ž¢£ Œ¾£¤¡¹±wz§xxp¹§ºƒ½ªkqàƒ|„·£ž••­½y°£b•‰®¬—i¦„žš†‹v¢ à7{«”9yÀÅsuËÁX{µÀ‰½ÉG`Í¿KHÊÇqKÍ¿wbÏ°{DÜÁ`ZßÃS[ÓÆp9Ù¼ƒN¼ÅžD«³zP²Š@»¯¤C°×Ú+§¶Â>q²¸^Tº­OsÈÂKŽAb¾¿pR¿Ì]9´¿ZPÑÂyM£¦gC†È\;†­0EmÕ…O€Ù¥4iÛ4˜íˆ4ƒß–;Žä™7JÈtA^ÛÂO@À¤=zå¥.‡ËŸ2™ÓÊbêÃÿæ¦SÞÞJÜÂT1ÖáDFäïbÌ©8­Ñ}%¹¤35_à^)‹ÊI2ªØ€8n¼y/°®Y?`ÔU}·W(3á–xÓ‰$ѹ³O\¡ÆqÏ«VrÁ 15ãy;4έ>BËl(1ËŒ!$Æ%­Š#CÖ˜8$¥©8+U›'*8n3#D¢01&#(0©2)EŠ"•5/$½$3‰:(œ!)²!$+°3%·/2€#7 …6)Ÿ9DYÐC5(®J56ç[;À0E¸€)9 ’/ʦ$×E#’£(’˜&.ˆ¬ ;‰È(G]Ó&/rÎ=*€ç‹(KÓÄ0±”#-Ú©68ÝÀ@?Éœ$#Òž#)Ò–:ž°* ‚•'-¼±(tÙÏCP¼âœH¿ÝŠ+¦×˜.°×4®Üª,¢Ø @¯Ð¥+ŒÅ³2oÕ¾7bÛÀ7“ÒµD4ØÔ:yÌÒDZìÉ7@ÒÓs?°×l/ÇÙ[—ÏÂ.8Ãë}Z³ÏwààkmÔÏg*ÂÕ{7à݉5áào4ÎãÇ(—ðÀ¼×«Óβ¼ÙÇ!›ÞÆ%²Êª'—ÈÈvÒË/‡Ð¼¦ÜÇ/™àÈ%‚áÍDzåÀ2žÓ³3JàÊ=ƒëÁEjæ¾@I¿çšÊÚŸ"¬Ï}0ÌÕƒÉÇ¥ À⨠‰Âžž×¬(ŠêÄ,rѸ‰Ú³ßË%ÖÆ,_ê°LÆé·0ˆäØsìÑTJðµ5ÀÉr&Ò¼NuØÎ=Þ¶.(ªÁo^ñÏiGݼ:0×É}6ŒÐz!ˆÆrQµ³‘=˱?‰¼«"KͶ)ŠÂÄCŒ¾©:™ËÁ'“ÑÄ8W½ÀZYÉÇF|¿ÙZ¼ÕÁ\MÚºO@³Åd9À w@—¸|5•Ï_6‡¥D>àc[i¹ÂQa®«?nµsJlÍ›IE¸·^[³‡GQ±²^Mµ 1H–ÑTLßTPÅÑIiÎÈ©ʈÌÆÍ¡À°Î§ÑÀÖ˜ÕµÁ£²£Å„šÛ±Ø°üÍϹãÍžÜÉ®íÁéñ¸Ú¾å¬Ñ²mV°Àϵ¦µƒ‰ÈÅoU‰Ä†|Õ¨oUrº^Su‘SRi¨œKËj<…´“b™¹vˆZÎãS'Ðg~I³xn¨³m:·Ðbs®·zC±©h/š¦k!°fo°¨ok±½}FS\NzTuc†y^%=xhRO.^T.2@#XO'>#e-N#+4Z2^j +t K]!gR$lO;oM"u$N!?*Ha-;-ŠD›WŽ3X+†2]v&ŸJ‚2—3rTNAWMƒ<‡h›…ˆA®‰ƒsz´«Ts|ic\µq~Oµ=~?±L‹Q¯[—i¢ªœ¨‰…T«Œ~Xt‡s—ˆPˆtgˆ‰ pœoft]wiYz—…y‚Ä¢¯®¶¦­µŸ´žÍ ÃsÁˆ¿¶ÊĸÁš½±y˜ÄžÀŒÂœË•£ŒÅˆ‘É‘Ï —­‡¢ˆ‹£˜†¤¯º¢„ªŽ ¥•”ˆš£’œªš—¸³žš‹Â~°–Š©©™‰”ºŒŠ¹©«‰ªÌµ§È˜æ¶¨Òˆ­»|̆̋ňÊ{ƠƉÉÀ…¬Ë“°—ºe§ Æ»‘ÝÆ Á˜¶©Ã¤¤š³†˜Ë…©ºŽ¢·»¦Ÿ®¢’«¾´¶Ô“´Àªª‘¾•||Ŷ‚׬¼–Ìu‚Å•±¬–Ž˜Ä¦¹{±Ž€qª£ÇŠ¿›šƒ¼·•Ð”£ ³–Åœ½¦Š~¢ƒu±¶¤Ž§³ª‹—¡Š}«‘¿›‰½¢—›Í¢€ž½¡y‹ÇŒz{Àvƒ†Â‰{˜¾ oËŸÄk¡µˆ†¼·”}­Ž’|¶™q_Ç‹–{±£­o¦ÄäIÈÕcjÇ®t^Í»RrÙÚ0…·ài^ÏÐ`_ÌÐoPÍÖóÊRHÖê­\Ð×H.̳B¼ÚU9æÏ14xì_*§ÏB#åzDšïv&„Ü\gÌÝŸ,Fµ#7Û…{ç†XÜ·u¼¿!Fæ¾4iÛÈ5*ÇÓ_åÈ20¬É1h×´;"Р ÌÁá”!'Fz= Ž*9-,e—#¢,aÅ:,^!-?¦!14Ò'6Ë*)2Ã0'*Ñ0#.±#/;½.&Á4:É>°mLÙB,CÀ96$ÖO66Ø| YÛ]7,¤Š!Ô‚#%Òß ÊÆA ¥Úp-’¸> ­äa,zà;0{Õ<$’ðe/ƒãœ)*ä±0Ü«2÷»%Àº!( €+Ú¬&!Ø›(|Å"+›âW&Æã1gÚÈ`5¾ìƒ&ÑÕ›ÉÈ›5ÆÎ¥(ÆÔœ.|á•,©Ã¼,žÍÌ/ÕÜÙÐ!ÊÈ2TòÕ4TäÍ:ÝÅbÊÎU$ÉÛv_ú½7\Õº&ËÈ’!åé‹iéÑY/¾ï€¸è‘.ÝÖq|Óã–'¶å½¯éŽÑó˜#Èܸ ¹áÂ$¦ã´0²ÖÅLwÖÞ+“óÝ1Žð¿"ÈÑÙ/wïè!KäÞ.xݦ ‰¾Ú2sñ¹@qÎÎ1tÛßeëÝ”Éã|>ÜÛ€ʲ£Æ噲êž/ª×›"”Ò°¥ÆÂ:­Ø–ŸÌº¯Ûà&wæÜ›ÎÃ(“¿Î.wøÊ*_ÌÉ ‚ÕÍ;8åÉ]&òÅ>UÞÍoòÎ}(Öä~:ÚÛ”W¸Ì|ª½†—݉äÁ–ªØ¤€ÚÈ]æ´[ÁÕ‰ Ù¬ zÓ½:…˹VÔÿSžÕº¢ßÄfHËÉQiÏÊVŸ·Á#oÈÌQƒÔæRGÙÒeO¿²qnØ®v[ÐÖM‘ØÃdMÓÏŠ=ÖŸ3µÛ?Ïʦ%’¹ÅJ ÍÌ>pǼ:“´=—ÛÍ-¨ÂÅp½¹F£Åºz‘ಆc¨´{i®³†-Œ¹iX‡©bbžÍ9q{×X[³Gj¾v>yÀ¡VeÒBqÇŸkR®¨OP˜”@F²ÀOT̶KK½­9V·ÏjÉ®Ïq·Å·XÌ®¯j£µÊ[¹³ÛœÊªØ¢À±¥ž¯¾³Ð³ÜåËÍÂÎÓÒ˾ڶÎÌæ«ÈÄÔ¼ÇËÊÄÂÃm®¼©S"ƒbz‡²ŠV`ÉGdo¸at‹šUD’»i›]blÁèÅÕ¦–`8¹€uOªžn_šzs_ª¾†Ê©¶‘m²¼~q«©zίo[¾šz—Äwª†cTšQfS¯irZJE5f8I>J->#)+@!IQ)@Laa=$*2S ZV#ŠX#|Lƒg ˆ"h€%^5ŽH&{V(|0j†Qf40NA{4“8ŽD«^8X+Š`OffC;fW”ic–4yj^D†ypgt`~bŠp™D—A¢X~QNwl™z“~{”a—Š„ƒ‹~™t‘{tm¡{‚S“f~_œW X}mRnmŠzyˆn˜±³Ê¹”¾¼³‘»yƊǾ~Ê©Ï…¶‚q—²™¸…ùՀÁÍØ–­›æ–±˜Ö­ž’x±§«ˆŠŒá“©¥»²¬­Ÿ™£›ž{¡¿ˆ®›­³Ÿ®¥´˜· ¦²°§ŸÂ´˜­›˜”Å“¨§°•ËŠÀ™º‰½¿ »³Åu­¹ìƒ·§ÕÏiÆ|µ©Ä‰œ¡ÄÆŠ½}¶´Ô‚Пܑ­Ä‘©œÎ”¸ƒ³œÂ«·ˆ›”Ë¡·¯¢›’½º†¾v~ƒÀ£žÀ¢f¸«¸‰¾‡Ž„Ä” ‚¶—ÞŽÍ®’ˆÆz³¢o`Ìœ²‰ª²Á•³§’h­›Šq­Ä‰®ž¬hµ´¦Œ¢Å·š§£¯‰ž±ÎzÁ²Ä©®º¡£³²–˜¹³q‡´¢‘¿¿{Æ·®œÀžt’½‘}…´¢¯sÑŠp“«‘†¶§™€¶¬«ƒ«°FuÁ 8…ÖÍeiåÍ1ZÈÕ2qµ³>cÉ´_a˸ŠPؾc~ÕÀ?<¿Ó\`íe^ÇÆ}\ØÉ€J¯Ð»·Â†;Ò̦:©³›;©×Ó_³Ù±6§¹ÉNNâÏOtÏá!™ÃÌ;jàïXSèÄK=ÐãdݽnV”­\?ŸëV)·Ú:A©ën,fÞ¨3‡Ý7Þ‘h€É¢-KØ¢ ¬ÞyRÇ¥9á¦%lô¼Eج3 Ù§%&¼¡"Ì©).Iz30tœOŠ6$:£;1(~25š˜2E“+-1¢""±)?,‹$#Ë-¿.*(«)0˜4'=ÍJ8'ºc4CÞ"5fÀ@.:äU8?ìi-ÝC.;Ê•¡£+ Ë­èb1¸¨4?´¸ŽÖ$'½É:/pÊ;‹×;­òl*Jì¸%'غ8.¬‡Zן%)È›%Ø‘(+ç{F›½¦ëB0§Ö5wêÖHfÀØ6ÍÊž$¶ß.Ü×E®é¬,¤Ø¡'ÀÐ ªãÎYzçË3{Ò¼<¡äÎ@MÙÕ,`ÈÎS‚Ô¶8n´Ód+ÝÊ5=ÞÊM UmCnX‡,N!y9G@£(;q5¤9QOy)T?´QG/¥Gf6°;X:—rqRbjˆq†X)?ˆ8{v‹{‰u4E]’hbtŠ\zG‘I}iœ[z¡q’I¶t¥{–g~šb•ˆ‹bexe}SˆirZ›P‚NnQn‰kŽ{‰…¥ƒ¡¹å“ˆÆ½¼ƒÄ°´~Ÿ¥~Å¢™x¾¢†~¸¥µÃ®Åo°É狩׊…¨¼x›™Ì’›ªt‡¨‚‘“gƒ®¬­Ž¶È­€·Ü—™¨»Œ¬»²Ž·œ¡‹Ç¦«‹µÒ«Ë±ŽyÔȳu©ª°{·²ë{ÌÍÛtÓßÃrÀµÍw¶£Óv¡ ÙgºÂÈd½¢Ëw¢²Ïr«²Úp¿¾Ðw¤«Ý{˜Éµ¬pª™æu’¶ä‘¯à£žÉwÓ·ËuÀ˹fˬ¦|²šcγq¶¶´x¯ÄÀpÉž·tÆ´Ç…»É”ŠÕ¤w¼¬¸t½¢œ`«µ©Uª¸˜uµ•¹n®´aœÇ¡q‘ª¶|ƒË´•µ®‡°¾©n‡Ä¼Šy¶£ƒkÄ°–jΘ­zǹtpήc…ÏÈd×­z¾°­v¸±œ]иÁy«¡_Ò¬™t©·´{­ÏÃN–¯Å.QÓÍBTÒß=wÉÔ2”ÛÞ?PÔ°h^àÙiVÙÛ>IÖǃd´ÙJJÁÔm[×Ê(Á²³"ÄÚ˜5¬Üx:ýº.žÜÑ$¥ËÊ)ÄÍÎ;RÜàAtàê2{ÜÇ,§ÐäHSåÍVWÛë[_ÄÇ>K½Ü=X­ÀD6«ÒRN¹Ëw)¢×¤Dsö­¬Þl6¼Ï¯!Ö‡&ɳF(¼-"³Ã2zé =…à+$¡Ú55Ê@"Aà˜6'ËÃ$RØ{,3â€)'Ý5Í#*Ú‚&)¬Ë&7ÁèIMàÔ6‘æÂmVãÚYK·ë“>ÁÌn(±Ï£€ß2ËòÑã¡$¨Ö¼.‡ëº!yä¿ÁÅ!YݯB\)@[…+9]\'>+•@cU:b,.!X,U—)U +I@#›!2_’#NV—;$ˆ%:w”)L2©)<#i/%IœrO<µ723¤122¬`[!µZ†p‘oooŸgC'•#7.”ecC‰|x\\‹ancw`iU‘6pL¡V\R“i„€ž:—C©@Œaœ|ƒh¹Á´Y-³É9*—ÚR)ÕÝv“ÌxI{èK;+ìV*FÊ'~Ã'Ceâ­&*J(´"*xË@74¸J67ÀS:0Ð8+FÝ¢-š¢0,¯r-¶9%Ø›)-µ´%>¾#"ŸÃ/6gÑCÖ;‘Ë:;aÎQ;$ÁÁ./Í*9èG,ÞP3Úž'(ׇ.3›Ü?2¥íaXÀÃ?å¾FxÉ׶aâÖ~CËØfßß‘.¶Ð"¾×ŒÝ̉'ºá¹Q‘ÚË>sè¿HµÖÄHPÉÇ1yÞÂe|çÒGoãÃ…‡ãÞ®zÕÊm§ìËURÖÌ‚kìÆs=ÚËeaÕ¿w4µÙtvÏÛrXåÚŽJÚѸ1ÂÚËUÛäš;âѪCÓßÆ'Ë×¹5ÊÓ¯&ÂéÊ,¡Û¹6¤àÊ%¼ã¼:àÒ3ªèÉE›ÌÇ0¦êÂ.rêêA‚ÑÆ5{ßÉHÆÜ–4Ôå„.á¼]+ÂÍV"×Ì¢'Þã·%¼Î¤#­Ú×*›Ñ¿¦ËÊ!º¾±)ºÒ¸/ ãÊ7nÚ׳ÔÓ8‘äÏ, ÆÇ)ŠåÀ%}Ľg9ËÔMLÝç*KëÔ5]³ÇWS±Î€,·Ù‰K²ÏˆæÞ¦$½Ð}MøÔˆ-kÊ®™ÅÏ"”é“(Ðј­È°@e×Ä&½ëÃ/iÃØH[¨Á4wÌ»i]ËÅVs¶ÔT‘¼­?g¼¡mx¥¼m?ÃƆh¶•|ȯh¡±©zg­\‹§¥C|½¯C‘´¢fɵ\®µ§m¨Áa§º¿]f¬ÐhM³ÑUwÁ­cКËv¿ÇeŽÈÁ€aœÅg‰•—v„•^W¦IJ~²ZrY£¶jišyPy·{fsª¦weʃeNÈV|~²«m_¡£b…œËykŽ·‰n§µ€N¤ºg¸¸±r}­¿™½€Ó¤Ê°à®ÍÇä™±²¸¤–ѽ¾uv{ɾˠ¥–°ŒºÕØÛÝÓÉ ž•º²…Ò¨¯‘u°‰Xˆˆ–§Àº›ƒ¢¹Y†˜„mb”ŠŽu£²‡†©€€‘™Z{9T£N“m”VP{X¢«’‘d˜R’›‡Lžn˜žq}b™pŸ¡·Ê¯J~‰Œl•¶šs‰ˆ‚€|­YQ]cv726R"5)G1+r‹4L9YK94RT!9 G$I\02$z +~ÆÙXsÒÐ@ƒËÆ%§Ð¼-IÃÒ-bÜÇO[¬Ì 3¬»ZœË8¨Ø59¯é_1Xâ˜Jã}´ÃmP{ô—, ì!‹Îy)gæž@-¨˜7­Û´6NØ¥!ªØ \cö›(•ÑÃ=„äÀ~ÍÀл2‘é­/±æ¶sôÎLoòÊCqú¬%Ÿä×(]ÍâLaöÒ{}ñß2hçé/rá¹:>æ½%PÈ +8ËÛW`¹ã}PÔÄMC‘äJ.¯Ô~.˜ÛZ6¢·/>iíU*Eûm%dÞ1'â®hïA04âž11å‡%eߨ=3̲6÷®"bϪ?¼Ã"`ÕÍ[FÕ•#?ÖŸ>/ZŠ+2z .9$‹´$+8’1"JŠ8#Kw"-(›F&=˜1@°I).³0(Ã.3:1´&3/Â?A#¦??OÈ5)OÍ,3 âEBËF:4Ò@=¡Š1¹l< Üg.-Íb&"¾“J<²Í!š5AÚ("‘Ì"3¥Ò58ÇG*$´ƒ-.ɳ5/óq=(ðª6½ž6%Ò—+7Ó¹<$·ïVR½ßO|Ñès çÑZnßÛ¡XÑÏœ3Ä×¢,àȱ)Ù·³»Õ€,ÅÓ¬;¯ÔÂA™ÒÛ3¬Ø®µÆÆÀ㬼ÓÂ&ÉÐÀ"iÚÅ'˜·É;¥ÖŸ&ÈÖ×3¦îÆG¡ÑàCŒÑÓDŠÞÛV€ÔÜ9gßÏ-ƒï§@,ÝÖ¤ °Ôp'Ý×`:¼Ö˜6×ÔŸ#±æµNÇÙŒ+­Û¼ ¯Û».àΉ:¶ÙÀ)£ç©'eçÕ"»á©%eÕ×7yÄÇCKÅÒ“ÍÙ6>µÍ`V¼¸4RØê*ÐÀ};½Õ@9°¿w5¯Ù_4±á„/‡ì†8ÅÎkX»êš2|æ·"TÍÈ#½áŠ%ÁѾ :Üϔ֮‘ÃëN³Ã®9±¨NÀ›H¬Éºf²ÈÈH®Ë°ez®ºs™ÌÅU¤Å¦csÀµtfÀ«tw¶Y®Ã¹Jª¤¢RÛ««_£¼®GaµÖ[»Ä½W­À²|аÇxˆ¼Çtʲ³T¡º¶n„È·qp±·ƒ†¼Æu^°‹h¨bfn«YY“¦FŒ]¤c{o™vyi£ ‚€³ztm¹–|p± qf}[zj™ŠlM™¶Œa†žur¬Äs•ª´x‰«º‹¨›¢‰½±É{§«°s«¹Â¾Ä”õ̠ªÃÜȧ¯Ñ²Ô¸Â¤ª¤Å“¥†Ê¤¸ÂÕ¡¾ÅÖ¾¤¥µ¡§¶ˆr¢†‰ˆcu†š²z§Åq°Œb“w‹b~o•¡Ž‚©kžt›±tq²›5˜.”i‡TœQ–m gŒi/œc–ƒ€oŒP}iŠUŠL{a‡h¥o¦x‘hwy‚jxˆ£dXœRA@¡s<6CxRˆf3.¤pHFx<]:P#-E=S5&† /2’2<«JŒ8*n( !€?4¬B?.”?@“/2A°/>+•>T E<(®7…h{\&~qhG²]>ªULy}sq€XisndHO´Hsq°Bšs®QgF™)zpŽ=oT¬kyXÃXjK¸qRdxPde‡W~=žddyeÐn£¹è••ÎÇb™àÜrÞ̨b®ßºs¯Ý¨oÅ¥Å`¼¢¾cÌ°³Yɵ¸`£ÀØowÖÜe¬ÔÚqžÁÌm¡ÙÎx{ÐÚl{ÐÊ“zÂ݃oëí„›®×}“ÎÏŽnж“vêÙ™p¥Î“„ºÑ™€æö›uØÚ„»°•R®¼^»Í±aÀÃ¥g¿ÀÇ]ÚÚÉY«ÕÔW¼¹ØB¬²ÒQ¯Âî[¿·³_Ç´Üd–ÂÝ`“ÅÖi¡±ÆgŸÄÊŽ Ñäd˜¼Ûf©®ënGÖÉ¢sÓ§ €ÖèŠ}ÐÆ£A˳³D¬¶Œ`дÊ^¬Â¼RʲÉGƼ_sË»Ìh­ÓÌ`¨­¿bµÏºb³ªÖc§¥ÕUƒºÌc¯Ó¼Š‘Ô¤‰cË›j…§Õcª´³ˆvöjdⳇtªÌ…RÀÁ‰^«·syÓÀpƒ±ª¥=Çš¦J¥ÃÏRÊʈW¼ÆÕy§´7›¾U¸¤§3‰ÏÖP×ÕU.ÌÅ@HÒÝG˜Õ®;lÂË\cÞÝHWË»JaÊÜVWÌÆj.½ÌB7½½S\»Ïm3ÛЮ0ÎÝT²Ç—6¨Ï—^¥Þ¼:Þœ6‹¿Á6bºØFf̪8£ÚÇ)s¿ÀG[ÚÀ=QزNL¨¯SJ«ß98œ¼/1±©8œåˆ-Oå„*kÉg+ÁÍ}=¢Íš=ŠâªŠÉQ0Zà¦?;ϱJXÀ¬YÈŸ"tÏÈ)q»ÏkѳX½Ø±}ÛË †Ç;¡ÝÇ“áÝNLâÃ9pæÕn°Ù­5yàÙ=oÜÌCzïÂ@€ëËhuæ¸;8ÖµF^´­4%ÄÞfæñ—9׺V"ÈÕX)²²šU¿Øf-†êWß®&Eå./LÙF"zÏ)=îH1*ç¤+Ô² /á¸1*í¬9"ä„!1Êg)&À»-'À«="­˜#Üp-2`d88Ml$)ZQ4 ?±!*5‰1$+©2Ty('€%(|,0“34©:*À)/7¯/'4|&0,´<!¤I36¥7)I¤%"CÐJ$:ÌW&²97'ά&4É(4¡†1"ÏO4À1,¬Á)”×C9¦×#A\é,5‰Ë{%}Ç7Qí´&#Èw1;Éh=4Ò5#ʲÔ¦$òŽ*²ìnEÈÏnrçÈ“…Ûá¥sÌÉÃ×צ‚¹Ü“cÍߘ ½Ô·+¸Û“ÃÁ…F·ÔÂAŠÄÔzw×ÛX²ÂÐOtàÉU‚˺syèÓUƒÖÕ‡léÜŠŒïÌjÜä}ˆàÍg2ÏáŽnÇàupÅÅŠ(Êæ“ŒÒàKÓËVE¤Ó¶"ж¨@ÌÀpX¿ÙŠ8Äà²d³ê¶?ÆàÁ?®ÔÈNÜØÍ7¯éÆBáä¨/©ÖÍBœÑâqÒÆ„ÕÑ<„Ü´M´Ì¿Kžñ×C…ÚÁ…1ÊÖ/áÚ]Rìçv-ÍØŸ Ö׋ŸÛ§$ÄÈÃ/©êº,Î߶DªÎ”*ÁÝÈX®ÆÖ6‘Ö²1ÍÞ½.€ÑÌ&oÍå'±ÏÌ$˜ïÒSeÌÔ5`ãäŸs†^•_”q¡uˆuƒŒ€aª€€QšttC‹™‹Ÿž„‘paijR6If*F#M [*O\+>"\#KU:$…E4}D‡$A1™C;T,Š-<{C9,†EG9¤T¤\©C?D»BE5¦-F/¨rt€ŠgpoiCxQšZt*|s_Te€ˆv¨VTl¡Q†g«Po]¬Leh}2¸§3µªL'¤ £È¶"8Ö¬)*ÞÊ8SÎÂ3têÁ˜Ò–9ŽÕ»#ªí¶;}Ó¿4ÏË3ïÕ? ðÑ+“Ø´-†äé;pëÐ&7íÜ*YÌÊLpÚÑRá¾H¢ÝX_æÆj›·:7é¿S3ÅË{~òWÇES=â“ JÝ~;TëGä–&&Û»".æ´1ðŠ3>®À:7Ò›9ÿŠ$A×Æ9uÚ“D8²ª½s)Ц:@¼'Vx&,¾w0&•D»!"0P)106Â#!1›3+¥) ¿#*%À)Á)MÅ'"¨5,%±9(SÀ"?têj8(ÕF#8ÏF#/Ô$)#ª·2 Ф(Óx6Óe4®KC¤¼=(‹˜=5‚ÅP*cã*'„Ì.-…ÝuNÉ¢5'Ì–"=â¢16Ú«+1Ô­-؉* ËÞC5‹ü]ˆÝá8‰ÖÍU…ÐÔ¡SØÖ§JÐæ˜;Ñ¿§4ÆξÂߦ´è…@Óد(šãÙ;háÎ9‘ÒÓ.ÝÐD{ʽ)GÚÅxÐÃzrÞÓrrÉØevÒèf›ÚãX)ÐÒ€iÐЈ„ÛÖMJ¿ç„QÖÖ_+×áp€áÙž>ºÜ¥0»ê¢NÙãz2æÔ˜?Èç¯2ØÛ½.ÒÒÃ^×¼,ŸÜ¹dìª%ªåÂ,‰ßÉ'~×Î`œÌÆ-}ÖàVå¿*èÂ[«ÕÈh5¹×}>æÙu(Ãß7%ÈÛ… ¸Í˜‚ù›>ÑË”4¸Ý·yÒ®%«Ä‡.¢Ù·%‹ÔÀ4GâÌ~ß ¯Ò½%ŽÜÁuÛ 'íÃ?5¼ç@eÓÙEiÑ×&tÉØi ´Òa3ãÛ‰N¸îy"ÀÞ‚7Ïé“F³Ët'ÁÊ‘ Kæ¡®á°%§Á|¤Ï°ˆÛ­)ЯõÒL…η@j¸Û˜\ɵelÄ«0pºÒTiǺPœÍ­UжFd¼¶TrÐÆsK°ÑYb³µlI͵ƒF»¹°8ßà”PÔ¼ŸU®È¹8º½MµÇÃG¥µÄx¢ÈÃd«¾µmÁ¿¸ˆ´Ï´fJ¢Ô‚^¬¦db»¹c`Œ­OQ©˜ME¬™YVgºiR[Ò‘XiÈai»|Nm¹˜R^¨œnWÍt]p·v0@¿¨_q·v{MĺZ€·¡=‚ª’ns ¯dÁ¢Çs›¼¦RŽ¥Ëiר׳۱Ñ·´ª Ã»Ï­Ñ­æÇѦ¬ѢÇÁÙ©ÊÕ¹—ª°’µº{•­®Œu¦Á­’£¤zWi²¯‹c›Tr¬»¯p€˜o‚;fvµ‰lcª|{£¸kjj³W{e¡ˆv[­>•j’0w^œ‚{L˜¹zrŠ¥;´¸„J­©€€ƒºM‰{qAŽŠ…FV9wi=Eq]%B;[rN…H(4x\Iq-L'AD9!NE~2As#MnDw [‹F ‘MI™"W$[*c˜B4:¯TpVE[1œBP(•NW,©0W8nia0•d_,›ef9’n}`xxE,g¡]L_TJKZgTKDŸP]{3[Z¬f¦RW¡d’Nœu‰>‹Y‰~†yjwY _z„‰špe©Ÿ‘ºÄ°™ÜÕrªâݵyêÏ´dÚÕ´eÿº°nǧԇ½È‚¢«¹m¸ªËi”«À~œÐƹ³È„µ¾Ù™‘¤Ø~¢Ûš«¥²|Š¤¥˜„³²™˜¶Ûh|ÊÜ’ŽÜØŸŽ¸Ú¯˜´‘·µ­}¦¤rÆÁŠváײ_±Ö­Z¡¸Êt¹Î¥fѪ¿hª¾Ê{ØÊÝxº®Ô{§¿×{˜°Ø™¢Ã¶g³·íw¤µÈq°¼Ìˆ¤®Ñf ½á“–¦Ðv—ÁÄt»§ä­}¾µ½ŒÉ¡¦w¼Å—Œ°¦µZ¼Ë¹l®Ç¸‰Õ·–m¤Ð~¼£ÑrÀª¶tÂÆÖo½¾§g§­Êu³º¿u©µªh»ª§^Ÿ¹Ð‘•¸Õ“ŒÓº‹]»¹‰‚©Öu¾¶¼ž„»–kvÑ´¦v²£m`Á½–`РŒ‚µ’uOÕ ¥i¦‹oÀ¤Äh°›¦e¥¤–xá©{¸‹œh—¥¼Cwͯ0k£Å><¹°yÓ™BŠ®ÏNk»»J[Ý«?Oݽ=oÇÝysϽPcö/oƬƒ\ÝÁ7¸Å”3½°KÓá“6«µÔ=¯ÝÉ>¨¿Ó&Ÿìã5…ĸFg¶ß#~Ñž2fϵnb¹ÂKF×Ã\NÀ±5A’Ü@@¿ÊJ9²¯W(pÛ‚B„áž4Šçk¤ÈiQYÓoZ›æ¤&˜È”—Ó¤5.Ϭ=Xî›$cß+¦ÐÂ,‹Æ²K[ê®.°ÆÄQ|ß“dͶ#¸ñ©+‡åÒ0^ݽElôâI¦áäCrâÐ:`õÎMëÔMmÎÕi?À­(IИ,9×¹TP¶ÆF)˜ÝT%ØTQðºQ +€±F «-4™ìUzÏ”DP×E(Eé8+“ão?Eè2/D¶Gi¼’aÐÅ@KÌÓ%'å­!=߬B9ÍÒ5.Éš.ª±5(Ðe~Š%`–.*Æ(0;º)-˜((A„:3I[*C˜,$D,9¤#(/ $¤(4«$?¹'*1ÅG/²@"q:vÛ027ÇU.>Ä:13×6#>Éz&(Ï‘>Ÿ]#/ÝM5¹”8=§ŸE ®=™–+gÆ!Ë8–­"-UÕ^(9Û},?Ìž>^Þ¤*<ß±:,΄,ÇÀ SÃÚfIãÊ`cîí›yÛÝzJÙôÃPÑíÍT»äªCÙá˜6»Ü›*Áç~LÚÚ‚1µêÏ;ƒÔ؃ŠØÁA¯éêhŽç¼LŠàÔ:oãÕ/CÏÚrgëÖ‰UÿË=‡âÅlxÝëprÏêiOÞìJAØâ†)ßâi3Ôâ2áÃiÊð¢I¯Ç¶³Û„5ÑÞ2³è¥9Êá»iÀä”+ÌÛÊ0Ú»!´ç§LØÖ 5¹éÈ(“ÛÔ?ç¼2µÔ¸"ŠÚÆ*àÎ&çä0•ØÖ“0ºÎ›>âÐMBáÚd#ÌË|:Ýá•(ÆØ¥6«¿»(ªÙ»"µÒ¥ßÒ:ÎáÌ-~Ó×#œò·¸×¶+säÖcزQ¯Ý¹R¢éÂ_L³ÊB‚Ïß +zåËHTÁä`?¾ÞiNçÇ7ÅÞ 6À×*×ÛºËv0¾Ð›ß®ÀÔ•ν¥X•Ý®$•ÅÃ!˜Ñš'tÙÅD–¿æF_¯Ë/T´á+xËÄA²Á½O9¾¤^dÞÃurÅÛgrʧm9µÔgA¡ÓlgÖ³‰?ä¿­K›Æ›-ÙdžPâų#·ÏÇX¤ÁÐH¼¸ÃXœ®ÞSuÎÀ;¥³¹;‚¹ÊvpÖË\W²·kj£”pd“À†HšÚqX«]Iš°=Hbͪt[²—jzµrO‚¸¢E´¼md·“@l­ÇZk¾]u¸§]f³™mN·ÃV`»¶\e¯¤h²ÅIU°È^r¨³_w«µi±¹¸p]›Õ‘¿®½½Í¢Àžë¹Ë¿Ø²Å³Ç³¤§á®»yVpšƒg‡¹r]~„†l¡Çy|œNikª^\‡›ª„ËÆo‹²lv“©†…œŸ{em–t9¬tp>¿[w—²‡w;ª…m.¾²`£É‡n²¯qz¢‡fH„‹rZ—ƒ|d†¤|=~ƒWxŽG|EgCNInV^`5/s_Og3m*^-I1V$%#A$aT8€4Oi I+uU`!<Q#9p!3,O'f!Mi9Mœ0NIƒ?¦r‡?„J[)Šua7‡m„sGx0~>šz|nfhr{†¥‚Žf•|x[‰Q9”EwLzQ‡y”n—9ŽuVu‰L› †_‚‘Žd”¥T‰ƒ|‹ŠÈ­—ž“·È˜›ÙÔêÏÏĶ“ÛÍÅzïØ¿`áÓ¯ŠÚÄË“®¢¶z¶˜‡ªÄº†º­Âj«ÞΛ›»Ó~²žÉ•¥¶’¦Íç«­¢Û“«Éº«¡ÄÀ°‚¹Í‘­Â¸~£³Ä¥Ú³˜~¤ï¦ˆ´ÀÁ’¶È¹„°³¿‘ÀÛ’µ³§m¼‰¼j¶Æ±uÑÝÆr¤¾»Q¼¤ÄÇÔËzº«íŒ²§æe¡´Óq·«Ê Íès™˜¼‚ŽÌÄh¸±Þœ®˜Â¢¨ÁoŽÁÖv¥²¶Àp¨«Åq¾¬”ƒÀ³ŸrÊ´¡iÚ³¹_Ò¥ºrʤÀz¸šÀxƾãlá¡qyÎœ³q¼Èd¢¯©kË•›o¢¬…¤¸ªs£ ®Œ“²”hˆ¯ªs›¯w«¿¶™©Ãº€Š¼¤xhÀƒ|Éž¦oŨƒcÌ›»{Úº~zؤ“f¼°“\Ì®‡rÍ©ˆt«¢–wЦ—h¦•¬~¨ÐÐL›¿½Eh¯ÕK^Üæ-uãÉ<‡éÓtQèßIm¸ócLÁàM\ØÄŠ?ºÑxtÁÏe€Ë¸Š/Ò¼³'ÆÕœEÁàž7Ã˯/šÆ½2˜¿«#œÚÔGjÑØBƒÚÙ8“ÚÐ0¤¥¾dT±¹XK­¨.;·¬N;žÅDC•×B2»+Ož«PMYá—*E¯|5‰±GJ†á¢#×x1Kªx<8Þ'2ØÈ3^Ü¢,GÝšiã¥&ߥ#@ö(™Î¸-zÕÅž·ÉA‡È¿¸ÄÍlôÛ=~Ýß!bîÎ'žæÝ/rÛä>aëÎi¸Ê:HÂÞRR»+8ë-6Áª+1˜à(,tå[)¹Æ>5¯°[­ã{>½êi(ŒÀ^$€ØœQ͆!jä,nÇ¥(*ñ´!6î“'7ªE,¼´5>Ū1CÞ­#1Ø«2Éá> +­».ä†#4Ùž@&È„;,k‹)j”"(Â)6d½*2E‡/Z™$;C© ?Ê %K¨5BÕ2"'¨*:¡%+IÌ,'"®B,Ã=*¡5&bÊC4BÜD)5âN/$Ó8»s'*Ö²Óc";̬K®¡GE»ÑC.›ž 3sÞ/jë.“Ì,(¥ß&9Ùª1(é©#6д79Ñ­$9èŸ#ÕµWÔìV?Îì_aæÛ¯eÙñ…§ÖãÚFÚëÒJÞåßDÉí™JÆÛ¶ºÙž#–ëz>ÄΧ˜ïÙk‹ã³,©Ý¨!†ÞÎ*[Ìã„tâî)šÑÌP6×ÚDKÎähŒíÏ6šæÊM=Ó×µÒìdUÛîLaáÍ”HÒ¾o)çèp”ÆÜž ºé³#²ï¤ZæÔtMÛæ° ºâ¥$ϽÉKÒߪŸæÓ¾Ó¯"Æê¯!¥ÏÌ/“ౄàá[™ëÊÓ½,~ÜÈ/nÞµïÕL°Û|#ÇØ~ ¸ÙM<¼¿|½ê„éËž¿à– “ÜÅÃÝ´ÒÚ†—ѽ‘ï®1{ðÌ,˜é¤œØÓ>z÷Ê$nѯ¨ÝÍE ÐÕjÔÏ*PäÐ+‡Àº`/ØÔH#ßÈy_Òâr&¼ï˜¾â‡(êáp"©Î—!–β †ì¿1ë]ŠÆ¹>Ý·!‰Û›&žÜÙ8¤íª' µÍlHº¶T“ÑËbÆÕ¼g¥ðÇ—‰Ó³VwÙΣšÝªlwÒÔlpßÄrj¾·OIêÛ9ÖÍ©>±É¢aäÆ¡(·µ®:¦Ì½6¹ÈÃN©¿¿p˜Ïßt¾µ¾qÑÁ¿Fe×ÐH^ªÆ‚9œÈh\¥Íucš­e^‘œO^‘ËU2z”_cmºw9nÒ]”¶vcm°­G\»•R^»UajÁ¬~[¨ ?V¥sQfÍ~?F²›bb£ŠtV¨ËcÒ²³Q»¶ÅLŽ·µHºÅ¯wÀ³¾ÙÇÄdzӤ¾¢Í¥ß²ÌܾҾµØÛµ°­c˜¿´…`’°vK{£dU¯”OM‰RRy‰Qn€¼}Z„ŸqYq¹l Ë¶Ä™“°uekŽ”yW´>rX·vqG·[~²n‚y«‰wq§‚„b·q~¤»ž€l¥ž‡j¦•nh¬Žor”q]¦e~\°lrŽ³x]889:Y1KK_\d:I,PN'E@'Dcb ^FKBOƒ:O;ž6Q%25A‰,J(† c ‡(i/‚)R=’,i.“?Y,›<[6p2A8jQ9xo|1“Y•CofUnv’yvxpmzm¤Ce [RŠf–k›v“l‰qš^}o‹rŠn”z‰y…^ŸjŠK|z–‰À¥Ó¯«ÜÙ°µÚ㪘ãäÙ½ê¸à‚äÆë‹ìÓÕ}æ㶑ÁÑÕ‰¾²Â‡²{ªŽ§°Ër°¦Ö•ž¶Ó‹±´Áo¦›ïž˜Î™‹¥æŠ¹¤¤‘Çñ}÷Á„xÄÊu²Ô哃ÏÃÈ}Ò³™…©ç¨‚ÉÌ£ƒåÔ¬†»Ä¢…´È§wÇÂס¶¦¯™¡à§eàÌÕ|º™¼«ÃÓnª£Ò~½¦ÕŠ¹°Ãp¼·Éi¶ÀÔs¬®Õ•°È–¾—£Ó¤½«’¤¸Îy›¨Ì“dγ›ˆê¹ ¤ƒŽx¯ÀŸ…¼¿®o̶•}ÂÀ©w¸ŸÎrÀ´‡j˪șºœÌvÅ«³y¹±Ù¸´¬·¸Ç“²¯Ô¤·¯¾rË»”|˜À¤z—³Ç|˜¸ÆV´»žl”¼ÂŸ˜·Â‡|·Ã ˆÄönسÇyä­®‡¿¶’uºžk¬°±j•¯ÂŪ¢sĺ¡tŸ³\±­¶_ˆáÇW„ÐÏ}VÌ»)kÎÙ3“ÞÄBgëÒ_nãÏCSÔéCSÓÆ\P¼Å[ZÖÑteÀÌiWÓ¿y>Å¥y¾Ï†*Ì·”3¸·š˜ÖÆ6®Å´5 ØÚ9`Ô¶7{Þ°7ªÝÈ6và³Ka»½bMº«DQ¼ÓOD¨àR&–ÑB1°×U6‰Âœ'UÊ•=¡Ðv4¯¼…6€±x"vÞ{‹ÛŽ2oÇÂ0o¬«0#å­DyÞ­@fÖ¹0l±»QJÓ¯Ⱥ½uæÃ0r´ŽU½°™"¢æÇ&ˆÙÄD€ß¾:ªä×ZeíØh}÷Övƒöà qÌ«QLÉ·P$ MDí­A¦®C"´ÓY#£åp@åÅC4•ÒjLÕË‚T·¸a6—èu!(Ã',hÜX/ÊS2Ë×o3,íºCÁ‰nß~*KÂÁd_ÌÎ*ðz58Ê°:HÒ¬'Ö}?DͦH3ÃÚL,z}B*˜p$=Ѹ,2@”!'=h,\r1N¡24l"/ –-ž”%$"´5!*—&":º$:‘53+¿<,6ç.2…Á!"ÅI7*¶l%>Ý<35шµr2 Ì…*AÞO6/¡›!8¥ÝU,µÈD šÒD”àP)ŠêZ$ä-*oÝ’0#á€/)ì©6nîº5(á51ÔÕ WáÕ6‹Íï“LÖḌÜêjôò“PíÚæMßÜÌGâÍ¡WßÒ¢N³Ô–(¢ã¬/Îã…6Áå½;‘ãË8žÙÐ1£ë¹P‹»À6lØÏF•è¸6=¾ÍrkÖÏ}péÄ0œáÓDnÏÆr~÷Ù\ÉßQnØ΄bÎÏ|ÎäƒrìåFPàܲFÂà¡8®Ö‡qÕÔ‘PÅÛ ãÔ”FÜ¿½#·ÊÎ5¨êÝ,˜Ýµ&×Õ•.»ÑÂ4£Ù¶2â¾$­Ã±7‰ÓÇ3}àÕ%—ݾ#hÚÏ-ïã•$Ç¿f)ÆÙd4ÖЋßÝÜØ™,ÃÛÄ,«ØÄ'²Ø³@»Å 2¨ÒÔ+žÓÁ#“é°¿ï²’Ü·×Ü0†ßÐsâñg:Éò'pß¾‡Éã-AÁÓjláìhU³Ê_>ÓÞ‹1ÚÛ$äça0áÒU"ÂÖ¦ª×ÂEµµ¡UØÀ¥ˆÁ¢$Œã¯*¼Üº!OãÉv½Ìì–]Ï·hhÌÉU”ǺhÁ»Ð™m¿»dPª©jtÅ»oTĽpRÈÉo5¯·mp´€R©Ë·+”Á§H‚°•2È×¢G|·®@ÅÎÒ=”´ÁL±ÌÐr\½¹L¾ÙT•­±fe²¶l\£º{W¾Ômb’¨wVªÇh]¦ÀfN†©>Inº}Y|¬“G€¿wFÀ§Š4x¤‡jc¦“p°±vj¢Æ[3žo_Mœ¦oZª¶}X–±g\¼Àh~ªÍ„‚³ÈªÛ¾´lc—˜Xc­­wЦÄx­¢Å»Ó£Û¾Æ¬³¸»¥»¹Þ¬©Šu•¼|‡ª¨’]–t+†ŒpD¯Ldu·~ld­Œt“ŸŽ=gj{õ±€…•ž†¼]v\’ot4¤tzY—xqH¥¼ƒ?¢WxX¬±zGª¹ˆV§º†vž²q{•~‰x˜Ë“m•¤Œiž˜Œlœ¢V¨¯«|X:k_g†„YF6‡q@O0r!@/@)R RF"RWFS”mzŒL6T,“P!o5F+› EyP%…O¦8™0?~Aj)†+[3‡6P"š(= et@t5…fˆ?i.°J¦t¯wqv}yY‚nokvEo~ƒYqo…om_~`Šy§oœ3“U¤‚j‹¯‘o‡{¨Z‰yˆw†±§³r¼ÐÖºŠêÈ» àËØÉÑÈÛ³ïÍæ‹öΰ]ÜÒ¨hâÒ¿k²Ñ¿w­¤½v°”½ˆ®´ß{Ž«Þsž¨ÍU©¸´¨³™h‘¢¾„–¸Ð¯†³™š‹Äš£§ù’¤´ïŒ¾­o‹âÕ²—º¹‰‚³À²‚ÆÌ™}¥º›·Áy‡íËß·ÉÅ|Ìáªr«×¡b¹Ê×tÀ¶ÇgµvË[¯±èz·ÇãoŸ¤¸eʪ§Y¶ÎØW¥Öè…£¶œg·«Ï›»Ös´µésžÍç~›¿Â·uÔ˜³kÆ£»†»²yN份q³¹Œjµœ©o˾Øj¯³ÉzѧœxÖ£‚nɺ¼mײ­l°Ã¥]Ë ¶g¶´žX­»·{µ²¨b³¶¢i„°´k•–ª[®¯²o…ŧ…vÁ¢f~Õ¢uvÉ£šaΪœoÚºbp×£znË‘Á~·©ÆJ—Š—TÀ¥W«Ã{hªÂ«Uº°Ïll¿²>´ÕÙDLÚÐqwâæELϺU…ÛÅwBÄÛOIçÞWXÍäc;Úço>Ñäz[ðÕHU½Û‡;ª¼™$Íã<¶Ù6³½­+¡®Ï2¸Ìµ-¢Í¿>l×ÐA_æØ5„ÌÑ#“ЪT\ÎÛjYÈËOHÁÉCI­Èt:µëQ#§Å8‰ÒMNCè›5‹°•-’džCÍ׎)‚׉0Y¼~"|Û˜6À¤EØ­%D²ˆVaÓÄF%¾¬W"¹§>œÜÎ-~ÙҚȭK‰Ê¾BžÃÂ4WîÙvëê<™Úº<¬éË,oøÓ@môÅ)u¼±,hÚÐ\&Æâi!ÐäCÕŸ&A¸Ør2šäMšãQ#©ÊA ©ÅOH·vUÒÒ6#[æ€9ÛEjô|4}è•;éS,nÚº^ݵ2BçÌ%6àª3äŒ žÜºA;¿ÄL$¶¯S9Û¾)1ª½D5¾jµ‰ÄŠE>x±'J¦"$N£"@J•!.%Ì'1-»!£¼x×.03Í*"DÁ#2³%1¾-(\²78;¤5qçM6/âJ4>Ö>0I²?&Ä™6¾”1ÊY5;ÊØ="œÈB¬äh/›È6rÏ/'ƒÆ&Î!$…â¤'JÚX/0×´BS¶‹WHì¨A:Ú©E¾¯!ÎÕwYÝü½‰Ùõ¹tæé‡yéä×^Êè³t»ä¶V¹ÐŠZÊÝ¢HÃÛ›ÇÝ~.Ãç»8ž½É&ˆæÆ6›áÌ(š·Ä7rºÚ/Wã¶6šñºLßÔLXÈ΂šúÏC•ÌºF:ÂàˆHÚÞvEçØe^àÝŒdÒÉk=»Ýw\ØçÀPË׶K»ÜœjÃËx]ÇÀ¹PØÛ­@Øå¥&Íâ¬,©ÚÔU­Ø½­ç¢#¶×ÃP¬ØÌV ÇèVvꯎÇÅAˆåß#—âÚS«äØ<=Üá’'ÅЃ7ÑÐ\6ÒÍ¡.ÑГ5¾ÐŽ"Ýï«A±ÞÃ&´Þ¥(¡Ïš;½Ê¶%xÚä$sâÏ.‹é»ÀçÌ#QÍÈ/\ÌÐ&~å¹:AÎÖacàëDXãÂFàÊj/éÇm%´Î“Òìx6Çç—%ÕÛnžÛv%ÈÉ­%qÓ­œ×ª+ÍžjϽ-`Þ¶߸¹ãº4ˆ¼Êƒºµ¿R‡¸ªY³¾¡>Á¶Ä=£ÐÖ±Í×}”ÎÈr’ÓËd†Ýµi‚Òºd¤Ý¬vŽÖ»•OÑÍ™/ØÅ©MÔÄŽ_Í×¥[Ô©ªf¹Ã¦P®ËÅŒž¶¿V›¿²Wн»p‡ÄÚ}È°jmÖºmf¿vkš¶bsš”BE—¬=JcÄ€nw¿o~{ª>s‘Á¬n_¶Ždhºbm×foj–¤aa±•e}ÈŽn†‹™„b¯¬\h¨AtŸµ|´³¸—Ö™¸Sz²ÂTΠ§mרʼ¿´¹¦É¥Å¦Ë¦Ï«Ü»±µÓ·ÊÒÑ­¤~p™¶Š‘ݪ”´šrz¸›sRŠ«T}˜’Dca¬rtŒ\}fštje¦„t”™} vˆh­zhaŒy‘–\ƒ8²jˆA‡o€k’±„—‘“sx§·™Ñ ©’l¼¤Y™›~|¢€k‡Œ¯«Šžp|oK"pId5gia!~Ng„hŠ*Aˆ%6Nh*%%u7|Kˆ43t†s´!:&‡)U"ˆ(&1’B †#G;„=8…CL,©HM&¯)4*˜TN.†AJ1yeXŒrG%[§+‚µ‡|{etxh—mpb|JO;teŠn‹\H‰`jVŸ˜M´<žž‚€£¥{‡u¨ki`žˆspŒ£~±®Ó…ƒÚÍÀ²ãÕ½ŒÐÍ„ŽäÔÂq×Òr•ºÅj´Ñ–cÊà¼z§´zĪ£©¦ÌgŠºŠ’Êèt˜»Ì\ª¹×”˜¸×“¯œz™ Á–}Ê“€­Ï¥u¼Û~›¸Ý±€½Õ£sÍ°¤ŒÀÚ§„°Í®yÌݱwºªžÁѺ^¤ÅÏdµÎ·p·¼ wêÔÞp½ÉÃQÊ×»p°Ç¿d¶¾âtªÌÏrµ©ºc²°Êg±ÒÈP¡ÏЋš×Ådµ°Âx´×_›¼c‹¨æƒ…Á­«|¹Íšp¸¶¢æÆ»eÕËÂM´Â°[¶¨¼p™§Ø^·¹·g¼œrMÉ©§\¢®×e¦»Ñp§Ÿ½_¾²ÖtŠ»Äk©ÅÙs½Ë¶‰’Ĺ…¸Ø†¾³j‘»©§‚º·šwÒ¹«s¬}|Á°ždСng¡É¥ŠÄ²Çpƒ §lœ¦›Wº½y±¯Û>§®×]¶Ê·W¼·ÂA¤Ç¾9£½à^oÇÜ+rÃÇ6³àÎ>oÎÄfïx8Îy%©Öƒ-jÖÍ'bÓ¦4)î•H}àŽ3OÛ¯]¶Å1_Ì¡,¹Ø°C©Þ½3…ÞŸŧ2²ÒؤSëÏ>|îÎC»íª:•ñ¾'œêʤƒÓÓ0}Ô̳Õ.:å96œÖB'«·cF¤õ‘,YõŠ)­é[*Ê_bÚe2R¾}‹¿ÅÀÝÅ-6¼ÆSÄÐÃ/NÒ¤ CóĹ·&α<4ÜÁ-;¼~--Ås6ËV1&ËÕ+37¬+ ?b<'|h5@ƒ 0/—(/;¬2-0À#@ž3.À !T”'0·('+£,&!œ3*r«)+7«0@B¿-&I¹-I2Æy3(Ór! ±H:0èdm¹µLS™" ¾¡<(±/.†ál!“å(™¿%9}ÌUL6Ô§FDÌ¥7åµ00Ý™>i̽(eàÕ=ŠÁÕÇYÖÔ¾bÒà ¥ÑÙ›ÜãÈqÛÈwDèà„SÜƲ_ËÔ“7ÍߘLÑË’+ªÌ­BrÝÆC®ÖÅ:ÄÞ³ŒÃä2À®cÂÑbÔÊAd¿ÞZ£×ÍM•ÄÝvâß‚jÛôQšæØtmØÛz{ØÑi=ÙÐ>rÈá¯0ÏØ©Vì̈?Üà©SØñ¤ZÎÕÒcÉÞ”JÌÝÉHÐÅ¥]§ÑªÁÈ™&ÁÕ·K½ÜÈ1‰æ©;ÀÔ².zå¹7±á¿1Ÿîº(—Åæ:É߈Ýà€^àÎv9ÛÅŽ‰ëÃ’sÚÞy#ÃΧ!ºÛªÃÚª"˜É›!©ËªªÄ»&–Ô² ËÒÈ“Ó§!â¾/¯íÁ/‰ÉÈ`rÂÀ<{»Ñ‰ÏÎ;XáÖ8qîÔWOäÏJBÄÍš)¶Û‚>µÐ:BÃÎT@Òº£$Êž¯Ö¥-¸Ãœ½Ä©ºÞÀ#­Øš)—²<Ö¿É=q¹ÁM€Á¸CœÈÆPÀ³ÉcF±¿Fs¶»pu¸·[ŒÊ·mT±¾tp¸Ù|xÆÒ‚lÀ«£DºÇ·D”šW̼¤1¢½®Db³¸Qz©¾J_£½^k¨×Y{¤¿Fu³bhÄÃsn£ª‹Y¥¸ki†”oq•ÓwP”£Xf‰°^]/Özxe±{e[Ä€bv±yn„®š]|½Ÿiu¤¬x\ ²_²…mOª©‰Tœ˜rS©ÄskŒ‰tg­«1¾v¥©¿–”ÂSƒ™ÊÞâ¾¹Úå¬ËÐّ̽Ρ“wË ÈØѦ™¿°¾ºÂ¢±Š›–ºŒs‘Œ{n¦Š•mªŽl_yY|~¿’›‰—”šfŒihR„iy†Z‚„vugˆÀ›eˆYsY‰…ƒQšg€d¤´ƒ¸¶g‡‰žŠ|ŒÅy…”³’…Š™µ€˜“~‹” ŠˆZšY}VŽ]5$}cgF”Dk720 "*LSBSL^DDCk,>Š&G9™@ }"F.?‚,>œ%J"€. y!.p— HH³FO1¬-4/ŸV‡2˜KD8“L]C¡Dh& [|r›‚pwªkc›ž{o{„q8 {“ni~ŒJu‘xT”€²(ˆTœƒnaŒvÊ·Š‚q–`v« ‰•·®Ã|¼Ö½×yæÑÝ‹çÝ«¾ÖÑ‚ßÏ¢UáÍ­kÉÙŽYÌÃÂb¾¹µxÊ™‰iª¾­Q»ÐÁr§Õæs°¸ÏY¸²¥}¤ÃÈq¥³Æƒ˜·Ý‰…¸Ì‡•«Îv‘·Ù\ŸÍ×`¼ì€±¼qc¶Å‚¢¸Ð«Óå³´j¼Î„™¸ÂÌGÑÒ±QͶ¥_Åݹgµ½©hÐÓÌaÈÀ°KÓÁ¹UÙϵ^¨ž¶^´¦²L²¹¦I©Íék°ÔÃ[ØÎÆhˆ´Ñ[¹¼ÐpžÀÞh°¤·›aÐÁ‡‰ÚÅtƒÆÛ™uâ¬RΫ£Dε—f»µÐ]·ÄÁgÒ¬«oÒÅ~]Ö½º`´®g¼´ÃK½—ÉOž¬—IºÎ\³²¦wÏÀ£“‡ÂÇV”¿¿T±®ÌzšÍ¼IˆÂ®]{âºh‹Ô°ÄpÂÄ|nɳg|ÓÄqe潤SÆ¥Žjß´´zÞ°™DÃܶ\µÍ•FÔɉB´ÚÍ+¢Ö¿PiÕì:TÊÌ cظ*¢ØÏK/ÇÒ8uÚÇ[uÕÐ0NÂÆbLÑÌETßàOwÒáAJÍÉw#ÅÅ–!ÀÚ3³¾ žÑ£<™¬¢n£º´1`ÓÇBaиU‰Ò£/™¹Î.Fæ¿PoÑÃ1;²³0O½³);¹Ó'3»±G1´×E,~Øœ-gÄ|ˆß-Q™æ”(Ö„9fæv:‘Õ—8à§Y^ä¯&o¹tˆçŸ&#ß$=ïE_Á¢8ÕÔ+žë¤(¢øª%°½¾#„ñÚ‚•ØèY°Þ¹0˜ÚЉêÆXrÔÜd“ÞÈYyÏá"mÂ×T5¸W-Ũ.B¦àE–£1°Û8MÊÐe+šäI4Š°/J´ÁQa§é©_×páMŠÕ„zß>Úª)ÂК1‰Ë°.@Ú™až¬ª=;Øl@"ÃÉJjÛÃ<"Ñv5+â£'/³y+9Æ¢5&êd (g0I™9´Š7FÈ—)+, +(²0-_£94²8.,…!41M®$HË(B"žJ@°/!V¹<1<×,58°M3OÂ=)¦€+3Æ|8Π8JÞ²$'É·6šá=0§¢H$|ûK5„Ð:8‘ëS?±Î@AGçk/>Ñ¿*XÆ¡;ë®?V̵6pÙ¨,¨ÜØw‚åÓÑ®úק«Úç‘žÓѽbåܤpÉÎ¥U¿ÔkRåÛŸ/ãáœ/½Ø“`ÞÒ´K¸ãÓ‘âàM¢Ü­%‡çÞ>ˆúÄ?nÚÎ5­½ÅSqܼWºÎ\nÖ½E«éÑ[ƒ×Ì_QÁºN7ï­PmÛÞŸzÚÙxNÚË_{é¹@ÄѨEÉÙ™FÛ΃RÓëÉMÖµ¶YÒݳ)àÕ–PÕÕÈsÓܼ0»Ù”3ºÐ5Ó¹:³ØÐJ·Æ¸HÈÞÝ$­ÇË-­Ñç'ÁÕßJ=âÐ-¾Úu<ØÎo–ÕÒ‰&ÊÙ|5¶Ø„Ä×–EÅß½5Öä¯-ÎöŽ9ÍÙ­$µßº8oÚÞ+¼Ç¾ÔÍ:nÜÅ:‰èÆ2žæ½ZUÄÌZYÊÏ=nÒ³ ”×ÒlJÐÜKZßÍ`AÀÌdAÕ݉(ÊLjAµ½n5¼ãz±Ü¥'ZÂ.Ò×n)«»¯-À˜*“å¸&£ÜÚjºÏ}MÀÐÖ_¤»½U´³§M¹Ê¯R±Á´‚ž¿½a‰ÎÇoÎÄÂn_¼ytÇεÀDzq•Ô½†W±·¡MÊÉ’YÊÉŸ›º¢³J¶ºB“·¼>™¤­[»Ãhw¾ÅC†¿µg‡»Ái^¬¾rV“²pc–½yl‡°iU”–]e‹Á[zh¦‰qq´}jt­jpwœ—ˆe¨€mf¼€{}«›|_›zm¨Âd¯µyh±‹€}Ÿ›„ŠŸ®{m›Âf~·yº³¹yµœÇ“·¥³©ÊÆÑÆœÑÂ׳پԣÚÕÏ•Ï¡Ó¢ÀÜÓ®©áȦ™Œ¼—¢•†«°ŠŽ„©{‚“ƒow ]FOŠyˆ{™–wwež^‡g`zš Žwâ­iˆtmq”TŒl~ay]൲©¡‹‡šÅ¡ÉÈͶ“²—Xˆ¶‹lžjƒ!tu|‹·˜V“Y‰?žnb+©F”¤º‡V '™lk*²[„S®H[R“]vJg[‰¦wfl™Rnu˜Dxk¥hw†…Fze¥)up¦‰mH•zn™‹c¡¦¦tŸ²¨i¯ÃÜzqíÜœ˜ð眒ÍÜ™áÒ¸dÝÛ„e×ÞœYÍÌhÙ§¸_½­döפêÆ¿h¨ÁÜ|ÏÜW¢ÈÑh™±îx³®¶o„ëÙmž½Útl¿tÐ⋈ټ[¥Éß{ƒÌ㢀ªå„jÌ¿yfäÌœ{ÃïŸ{ÒÎmò×£`ÈÖµVÈÕ¶[ÐÜœl¸¾ÌIÀׯUÂéNÅÔ¿_£«¸W¾ÆÏr¸Ü´eƯÌT¢ÂÕPœÆéX ÉÌV¶·ìktœÛD…µå` ËÛy`Õ¾“bÄ߈|ãâ|u±¾¤GɦŸ]ØпiÐÚ¨L±ÐÄ:ÇƶEÅݨnÓ£É=ǧÂQ¸ÅÑP¶±ÊU³ºÌZ¤»Ê\žÓÓ`½Â¼ƒ‡ÖÙqƒ£Èj˜ÊÄKªÂÄa{¬±S{륈zÄ­}`¿±OÍÌlhϲ‹sIJ¥Mͪ¸j¸¼¿Ù¨¦cÇ¿¢L¿Ë–8ÀħGå½I™ÎŒ)Œà¸5d¿à#m¹Ù!¦ÈÍ#™ÓÓ3Qã¾INæµ*aÑÒ\9Ý·JWÊÝGuɸ6`ËÐy7±Û„2ËÏ{FÔ×’%Å͵¦Ê¢B­Î¶1™­ÂPÌÎ4‘ƘD“У*w½¼8eÊ­KB³ÁHlÍÅ76ĤHD°ÖN¥²(2‡àb@càu!híq!ÄÞr7Œåc'‘Ü'“ÎfSUÞ¸5`ížP5°¢ß{#žÔÏΠQ„Ʋ&¥Ã¬šÈ¸M•áâ$ èœ&«öÄL‡ôôt§òÉN°ßÍs~çÊ-ˆòëx›ÝÞœcØæASâÇ(VÄÀXt¿¼<`³Ü6/«ìu ¾NHã¸@R‘îF,™³5¬Îm Ì‘B\Ú‰?È3–Î_)Ïœ]¾À²"¥Ü²=ÕèÝKoå¢28½ªVá—1(Ê·KSÌß2)½*Û~!Ý…60Úº@!Ì{)(£† uŠ(S¢7&bi28Ž#(3‘'+s1#[´*#05'*§-0• @¡>.&šL70Â2)¡6;8¬JKC³Q;>Ä;&7¾ˆ%)¸t?É}59êL5 Ú¡.œ’9;§£0FÍÌ]1‰­#C‚ÓF„ž¹±ÈI¬®«N¨³¯„uÊÙkq±½S›½¶V{ÉÈtvǵ{qÖ¶“ZÏÁŒN×¾rjÊÅz…ÒÇYY½ÑšfÂÏÐhÅÖgYÅÁ«<¸ÆÅL©Á­]˜ºŒS•ÛÈ<¿ÂÄ5@ÒÏ)Q¼É0†ÚÆ!¾ÜÅE\Äø/mÒè/rÜÖ5HÍÕSwÎá2Zêº)_ÝÛe(¶º€7¢Ã›2ÕÍ;ÊÖ¦)ªÍ•7¥Ç°7¼Á¶jÝÚ"hÝ჌ºÕ7ÌÖE4ããa`ÐÍyQÖÁ,=ÆÝe ½ïO7Ÿµ%\Þ›;gí—RÝ’x÷D;óŠ)]Ï™K@¼³PpÀ¢J¡ÄÄ>Øh,«§nܺ4!´´?oäÀ.IãÉ;0ÏÎ'*ê»6'×—+8Ëa.1£Íe‘*$^_+4^y)"C¡"'@¯# L³#.S·*$0—+"³#<œ(1«325“(+S¹&aÄ (1§=Q2Í6.VÒ7;Á–% Ñk)æŒ1.êW2Ö“&Á«I6³áhL¾Ëj0–Ä!-®çM-£ÚX37ÕŸ26¾Ä2fĆ=£ÐÉe¤æÅC‰ûµµóЋ[åáÀtýྀÞ⤦ÔãÒeÚÓÒKëç½yãä‚eÞݤ&‹Èy/Ãâd4ÚÛÂ]ºÝÜ4ëÕ0 Ô«|ÚÀ[¡Ø¯):ÔÉ$ÏÖYP±ÞW‘ÚÔ)máé–¥âÖeuåÕ3ZñægoÁ¿~äÕk=ü×gxÂÈt~½å²:ÖËŽ+·Ü‹ÂËc:×Ü¥/ÀÅ~ ËäŽ%Èà§;±àÇNÆÒ·VÛÆ¢¹à¾!Ž×¼vÙÀ/ŸÕ°1¼ÚêF‡×Û7¥Ø¯S¶Ë£//¼ÜW1ÓâxvÒÚlK³Ú…*õçƒ0äÔ€+Î΃Œ¿ª½ÙŽ$ÓÛ„Zàø´Íܲ!«ê²/±ê‚&¿ÓÚ%‚ÖÀ2’Õ³3¤áÏDD×Ì^ŒÅÌÑStЦ¬Ô’^ç¶+Yø¨;>Üš>ù#Й>\Á« díÁ3N½š1-ÍÊ2åm()øL:2Ö¾Š¬/:—‹12b91#†g15?‘'6 #2Š'.(y!4U§$,D #¤.w¦/Y¾-$¨‰UÈ39T¼9/DÝF&WÝq#®s<àª%8ÓH"'Ô¥).Ñš04Ž¿:·àd2˜É:-žî?OÄÍAF^ç–;IιL-È›:ªÕ¡Y¬ÖÉ…¨èÁ<£ößp£ÃÈÊXàõ¤xê鲶ÝäšzãåÖ\ëæÄCÝÛÇfÿÇ‘Ì×~PËÙ~AÖØ_ÔÔÁZªçéTiÚÃ-´å¼4~ñ¹/‡ÎçT¨×­@kèÞ€dã»^ÅÕ$µÊÈ:‡ÒÐcmÙÀ…‘âÇw„ÓÃmÔÂ…fìÜP‚Ö׎kÇè§`½æÊkèêwEàè¯ZÆמ@ÖÙ¨:ãΟLÛÝäI½Óž+ßÔ°7èÓ¦X¼ÜÇ+¨ÔÇ-¨äÃ8ÉΪ#˜ð×BÈáØ;©Ü×hÙÆeOèÙyjÖÖZpìÍw[áâ|)äÔ„&Ò½voàÍ¢¶×—@åê–GåÄq+ÉôœA¸ÖÁ+žÑ¯!¶Þ½%µâÒLÅÌÑPÎÀ*³·ÍKdȵ=w×É%®Û¯GrÅÑ_bÄÕ?rÐÓjxÇÀ†#Žòv9ÀÇLN·Ù{<Øݪ0ÇÒ² ã‡RÝÖ™"ÅÏ’$´Çº'Òì¬7¶ÕË?ØÑÃ?‡Ã¸V›ÆÇG„À±ZÅ¿²[‘¼Äz¾½°_~ÀÈ™»Ð£pƒ³ÃkkÖ¹[ªÅ¢ekÒ©„S˪L̲ŽbÀǤY½Á©Y­¹Ãc½©¶MlË¿b^¡µ[gµØRŲ«cq·¶m\ »K«³_]‘¸uh—”VP„‡e)©¢Bhg¸‡db¤dkÉlo¼vqq±ˆeS³ŠvŠ°©ibž”\a«£b9š…yn²³|e®¯Ur¹³~O_>£¶c^ ¿~Á«Á°Ì˜©…õ«ºÇ™ÄÄìÇá¶Ä”ËÌÅž³—髸ÈЦ«Kb£„¥›¼àÃ×·£Xs¶›‘ƒÃ”zV­«ƒœ}jiNhw~†potpmt…YƒC°°zbŒocC–]‚g–¦„—š‘}{̓l“ÇâÝ©‘q‰g¨e«Tœ†•¿n:w¹ ~„¹˜Zv‡}j”hf€€SmIT¢:£q¤†-Mhm8?k_-.C+J@JW 7%|D/m$E"]Hc‡!1Zr91’=e&eA…%­\.O9E`ž@_%›;=6œT;2‡W|3³vr= Hˆu¤zxt l…}lS|~{e‰xˆhg~£kžáã{UzNn}™œu«y‚¦¹k±Ñ㿺·Ñv±Ò鎧ÜÑÆ„àÓ…|ßã¸Ûîì¬wìÚÇdâÛÌkçØ«KìåÆYãm¹°¥cÉà—X·¼Æe¡›Î”•¯ÇpÀËÚ{³Ø€—¸Üqµ¼ÈwšÇÎ’ÂÍ}zÎÖGª´ÔW…¤ê…`ÅÆUµË†Äê¸|ÎÒŽ‰ìÍ‹j½²Šu´Ýµg­Î¹SÒÆ_±ØÄnËݱf¸¢°U·ÁÓ\°­ÎH±Ë·W²ÐÔ]ÏÔ©N®ÂÐY¸Ä×q¢ÞÇ5·ÑÎN•ÏÖ]²²Õb}¸În‰­·ˆGÆÓ«Š´¹€b£ŠƒÇÀžNÍÀ¯Uɱœ}·ÓaÁĦP¸¨dØ­‘g·Î g¶µ©d¢¥ÄEÀÇËM¼º¾_»¥ºn§Ã§@º¸Å…s§²z È¸M÷`«Çx~º¡oydz‚v¶Á—R¬æ¶‹Ç¶{~¶½aaÞÀŽH¹¶a¸¯m\ÊΡOÏÀ…Rɺ‡,θ”UÀÍÉÄãÀ@_ÖêInØÒ,’Å´/°Ïà-IèÒ%„Áã?G½Ö1rÏìV>ÃÏclÃÅ3pÕØc5ÙÒwÓΆ"ÕÉl Ñ­®+ÁÉ©,¢è¶%Æ¿–.‚ÍÄm|ÔÉa~ã¾ĽºWlÕÏZoÓ°]oÉÁe¶,/Qß3&PÚ<+PÌ(+¯~µO&ÙY>>Ò¢$%ª¤BÊÍe$¶Ü4>„ç-?šÞc.›á…K¡Ær(Dê´ 1ܱI`æHÁÍ爪ÝÂt×ÓY¾ÚƲbïæŒtÕÞ¦ÚímÿμTÞìÍSéã™JÏÕx^Ê݆Äâ›!ɾqHãÔ 2«ãÔ?€ÔÂ8­Ø´G«ÒÎ,œÍÊ/‘Э(¸¶ÑTàÖ<‹ÑÎfê´+šÓÁaxÃåxeÐɆÍÒHvñÜzöÈ’hèÑaBÝçw4ÑÉ’8ÈÒ‘CÖ×xUìÓº_Òà¨'À׊?Ú¾”¨ß©&·ÖÅMÎߎXËÚ·4¥ØÆ9¢ÕÈ?­Ò¤3ÃÔ´6¤çÆ.±Ó¶,šåÄ68ÚÓ{OÒÓMNäÙDBÝÐn@ÕÞu*äÍz ¯Î7Åק%ÓÔ§/ÒãcºÞ¡'Û½…Ìø̔3ÐÖº ¿ê£,v¿Õ âÂE`ºÚX}ÝÐ,}ݽ€ÎÑOiéÕx-ç¾x(×ëpbÀ×nJàç|+¯×y:ÉÛ~!²á¤*³ãŒ"¬ÜpÊ⨢窌ӷžäÐT¯º¿t­Ó¿d›ÚÈm¼Ê¶¾º¿Ÿµ·¿f†¿Ôr¤Ï¿r«¯¯TŠÑµ^…ÃÁd~«Í`žß§‰L´¤¡`ÍÁ€:Ô®|M¢Æ¡=Ÿ¾=õ­My¬¶b€½Æ_£©ºiÍïh[¸Åv³¸zd†°`‚—¾QM§¢Z`›®_g¬¦JTp‡^s`®‡_y¾]q˜Ïymv¬zgs‘DUs¥‹‰g§nj¼«rs©¶kc o\U¤±E:¥¥mg Ç\wžpt½¾g¸›¦t§ÑÁȳÀ»ÀœÍÎÖ¯á½á¤ËŸÒ¨»ÉÙ£¸†Ì´‘sNuA0nF6_3<…(;A{ %es#-4{"K=¢8O;©(=&F2e–2|[ª*J0¤'8(¢V%tXC&t?J"›:w)ŠR{eu~‡dr€`€o‘{uY•M˜²˜q‡i£q‚v…w†”ªÃy©Ù€“›|¥µÎ|£ÜÊe–ÓÈv»ÕЬ‚ïÚšˆà䬭ÖÓ¼£äÈ£páŵ`컢xÔæ•cÁ²¾i¶«°‡¶–}¿µÆx¿Äãt˜ÖÍ|«ªÅe–ÃÌa¸Îq‘¼Ìb ¿ÛŠzµè£Ž¬ã{š¯Ïo²âáŽÂÀ pÛÅ•‚Éíˆ}ÖÏ’}ÝÅZôÏŽv¹Þ‡eȧ¥R¥­¬kÖ¼”Òè¶`ÔÓÊfý·\ÔÈ¿V±ÀÂ`²œ²`¾Ô¯t´¸¼b¼Öd›ÊÕq´ÆÄ`­ÐÊl˜ËТµÏb¢³ÛwÅã¡xíÚ‡£ÍàˆVƽ¨aÍÔ©[Ê¥‰k±Ñ¨kǽÂN¼ÂÃhË›¡jÌË»iÉÈÌjÃÁ½Y»¯®k½Ç¾_°°Ñq•ÅÞZ½ÅÚx²¯s|³Âc‡½Ó>¯°¼x{µÆÅĘ_Çìa¶«‡[ÕÇthÛºžmѵ´>Á²ÕW®²»[ÒºxVͲ£Lʹ¯X²Í¯Bš¿ï-€Ýª0‰ÑÙ“Ã5¬×`uDW>_rsPiU…žih¦tT|M±j~Y¥vzŽcsˆl}ƒˆŒ|4rf„Œf•Äli–§’x‰rŠqšbA£‹ml‰„ˆ€ ‹·¹§yA†wqx“N‰F¥Žšo4M#fMAdXm9|O,-‚oEM5m!>,WIPJ}TM+‚"I.r@X[hWVD™'8;˜4%‡€Ð­¬Þé?XÙÞRhä×@XÜØ@`ÛÓI@ÐÇEkÃÍAsÀçQ!ËØ…G­À“9ÖÔ{7ÐÕ¿$ÓܱAªÕ±%ÅÒ¤&r¹½;pÌç5g°¡J­ÀÈ;D±¼I_±¬Mi©¥9=¤Ë3N­ÃNI°ÇKX’±E#|ê‚5sÞŠ& ÒMnÜq/†Üv.uéswÖP,бF:ÇŒÜc1{ÓŸ-b϶(=¬§¨¸‡‹×ĥϱ0œÍ¬A³ï¢yéÄ2‰ÒÒC çÏ2“ܺ/¥ç×/¢äÆ-^½¹K>Èù¤tÞÛ<(ÅÊ)>ä½F.Ž«²‰9.¼…+'»”7>Ž$#›¦K˜¤0lÞŠ+Qü[%Žå]$°âŽ:QÕ˜dî”'‡ç«QEѸ†´³.>òŒ|Ѧ/"Þ»78¹¾8%³¼2CÉ¿-ÕÀ4+ÅŠ6<Û“F-…$(¿‚(Ùl'Žj#=µž$^£!²“q® 5O¤3Ÿª;;¶¢+0,¦#2³7?F¼%|¿:@IÜ03AÒB(]Ö?7-¶–0áU.ø4GBß•<¹ÇAÃÐ2!¾×[9¿Þy$ˆéo0¼ÉnO²â4«ÙªŽïÇ †æ›¯Óž5¥÷Ñ_ŠÚÐØ¥qÑäÀŒÕ楛×ÕnžÕÜ´^ÝçÂ_ÖÕÕGåÔsMÉËsNèÛŠäåwÁÓŸ9¶ØáAŠå±B¿âµ+¥ÛÖ9†à°!„àÃA¨ÊÔE*ãá1sºÌ0‹ÓËI¥áænyÎÊ@VºÒPhÛÕWjÑáz9ÑÚ†`ÌÝNsÒÖo?®â”GÜÜ‚9ÖÍYkæÙ›AÐÞ³!ÑçŽ8ãÖŸ(­ç¥¹àÂ*ÎÖ<ÔÄ3¡Ö¬"Žà±&²æ4ÄÐ×PµÐÈ1¡ÛÉB¹åÖEfÎ×^TÙà’{ÄÔNCÁã_5âçp.Ðφ8ÛÞ)™³¦1ÔÒ~-¾èr7Ûáª*½ïÀ+{Ñ¢Çá‘?ÔêÆ/¡ßµ“ؽ$¹Ù¯$KØØ'”Ù»/‘àÀ-»È93ÑÀ-0ÎÑj<ÇÒp?µÎˆ5ο‚1°Ô†HÓÏ|›Ï²,ÇÍ’#è×cGÍÔ©%ÅⷌҟÒÄZ½Ã‡YØ΂uÍÖ®©ÉØcŽÃÛ†¯Ú¹p ÓÐh£Ì¯S¿äÁ^•½³c‰Ç­`›ÏÁs‚ÑÇ—bÚÂoÒÕ‡^Ó¹£mܲנʹ»TÁ¿®#d¨ËZ†´À…Å»¶5tŸ¥< ¹È_^³Ïsn¡³Sd «n\±UZ£²SZ§ŽcV~¢?Ux´\t¼]z“”34a±…mo»^do¬xDH„‰tU¢‰VY¿ž\k”†vKš˜q^‡’l\¦²dš¯¶M³¦½ä”›ڲ§”¿¬°¹Ì£´yȺÒØΗÒÂÁŸÓ­ÁÈ•¡µ¹tª¶†Á៙³£ªƒÔ©Åmy‡dXzDGa,:vNžthd˜‹bgs~`l`HJ]y®‡}`£^™f‹u…‹|­\›mxv¬˜•fzhiƒ£›¬È—µq—‡”„q§ž|t•n…wš —{†{¥‡b‹w…i~}š‡…m}T‘–¥MIDŽV-(ƒCB|X ?sP/ASv/%„v.?YŽ/X0z70yu0C~A-‚!I/F84RSª5K(—J‰:‹6R:«;wHˆuA-ŽOR®S¨hwˆ~rzx…|c—¯z¥Šœˆ‰‹n‘¹“‚€kžŒxÓÃňËÛÏ—¦ ³nÌ°™®ÎäsÍâ±ØÑÝÕÏõäáÄÜÆ› ÄÇqœÏÒ˜rÕ׳jÞÔ»bÒŸˆÃ¿³t±¬Çp·¤ ‡àżu¶­×ƒšèÝl¦½Íp°Ãéx§áÂi ÝËiÁÁÕ¦Ýá‚È߀€²Þr¥¾Ò—ÌïÛÈ”ˆ»ãŒëÇ«ˆÕÔ wÎß™½Þ­‚ºÉ¯_×ñn¿ÕgØϹhàÌÔcÇ·»`¾Ì¾q»ÏÏ^ÌÅÒGÖ×·HÈËÍe»éån¶ÞÜp­ÈÏg¨ÄëU•´ã\¤¾õa²ÊÕìñÒ”Ç匇ÅÓ–yÕħwùÚ®v¼Á¬i©œµSÇÒ²h»Ð•`½¿Ñeµ³»ežÃÔXÊϵn·¾åt¶Ô×\´šË^¹©½p…¡Öjµ¶Ïu™¬ÌA³¹½l€¸ã‹zÖÏvÓ˘…Å­ƒnÅË’hѦkm°°hǽ²b¼¬ÃdÁ¹”h®µ¨Hʨ”Q›Á°X·º×1 é9ÌßHCâäb…òãH¬Ò²(uËØ8rÆÊ;lÁÐ.nÕÞEzÐÎH]Îì8s¹ATÏÉ„=×ËZjÐÝy6¸Î^%¼Ñ«c·Ô¿8¹¿œ7˜ÁÇ-wÑ´0…ÖÁ? ÉÃ&zɹO\½°3\ʶFsãÐK/¿¤ \¬‹Íü© ]ä«&¨Í®AiÔ“*QË…$(Ž4]êÍB%àħ(*ݼ,&å¨)"ÍØD5©$ ~g#œH,.m{."ix8'hp"/Cˆ!L¬'89£+4Ex0,6œ)-‡.:#u $_¶/1;¬&(Qó7)'Â"/Dà'³R.ÅS1>ôš09Ǻ9?´ÓXQ¾ÝGeè¿n'Ìåi5¶Ô_)ÁÜM^¼Û·T¾Øè œí¿B»Ì¼2ƒøÏj¾ä㌵ä×{ªæâÇlîë®^âã’Ÿß안×ؤpÖߤ\ÜÙ–\ÆâŽRÑÒ€5¼Ü|6ÑѦZÓà·W±ÙÔŽ Ö©;ÇÙÛe©ãÎr›æçp›ßÑVˆÖÞ†uÈÉ`tèÕnžçÐ<ŒËèƒ~ÚÂc´Çoã˪wËà’ÂÕ€cÝÏh{éÌ¢ZËȵQÅêu…Ìʘ^ÉßÃcÏÝš'®Ô^ÝÙÏQËÓ¼P´Õ¯`ÈÆ}L³ÔÓ^¹ØÏRŸÐª.Äç¹@¨ÑÅ;¸ÝÊ;«èÓ<±ÜÎ{gÕÝ–rØÛ_ãíwGßßuSæßÈpâ×lMÒÝÃ9Ëß‘LßÛ›NÕÞŽ'¿Ì²¢à¾7ÄÎ¥2Þé§+±ÙÑA»ÔÄ&—ïÀ2™ÔºRÁ³@†èÍ?ÀŽ1RÓßWƒ¼«IgÝÓA;·ÑhTÁÓ„HÏä^?ÔÌ`5¼Î•4¹Î›,Ëìo/ëÖo®Í£!ÔŸ?ÍÝ™2¯Éȉĸ»B‰Í®f ÝÅ`ÃÃÅCËÿ0|ƸTØÒp˜ÂÞˆžÞ¸J˜³Ñ[›¼Í4~ÆÇuXÚȤS˜Í’ZƲc@ž¯¬d—«KÕ·´AŸ¼ÐB§ÁSr«ÀB ÁÄB½ÃÅT\¿¾[`¥Æm[¶È~^ŸqX—š?Oœ¤C'’¤Y]{ÊQO¨ms„­ybkɪ|r¦h|«„na£š]Z˜´ei•»Re·ŒqM¼ª|_ªºqw§µnKÌ©dP°È}“Ñ`¼¦Ã²Ýž¾Ø±¨¸×¨¾¡Ò»¬”ʳä¾Ç±¿oš¨µ±Ó¤Á˜­»ÚÅu¯š{Y‘¼§‚¤ÀOrAT;Cu`J•žqI‰Ë•OŽÆˆx‚XWorRed‹JƒB||uvÄm‰b›n‚eŸ~t†±„U¦¹ƒ‡nlp£Äƒk Ÿ‹º”‘f:‚to£›‘‰‹m„™oJxw‹o„r~ƒ`m}p}`pYWN@c2{>=1UaKKZOaIr{$;3v%70`4M$ˆQ.\$)3ƒ%V+r;J.i%bY†/19šGj8©5MŒ'=5`I{/\8•PH”“r£nŽ‹ƒˆœªœ‰ºöϸꛉÄÉ«£´–Ƹ•öÙçÝÍÎâ­Ö¼ÎŒ§Ø؇µËäÀÞáç»àôÞþ¹þÏ»‰ì岡ÑË~èПuÑÑ[çÞ¦€³º­v½Ÿ¥}¢Ø±w®Ô±qÔÐϪàà™½¿k×Ð×s¾Ù|ˆºÄq“¶Áj™º²£Œ§Çw£…——ÇvŠ«¸Ž€ß¿—t·ÆvƒË¼—tâÊ–ž×’‚¼Ó†Éµ¯‚ÚÓÃq¡µ‹x«·ªqÌÈ®[³»¿mÁà²wÕ½ËkÀ¨²g¾Ï®w¹Ø–S¡¯Ådœ£º_©ÍÔS‰œ»k‡ÁÆU©ßÝhu·ÒQ¦¼Ä–féÒ‰k¹Û•„»´‚[äÔž:ÔܯRÊÆ“a²¯ÍbÆÁ™SÒº¯_ÏȵqÁ¢ÄdÄÃŽ9«°¿cÔÁ[¯ÁÞa¶»Ãr¡Î¿S›´£lƒ·¥v~±Òl½Æ×j¾µz“¾·amÀ¢iƒáÁjpº©fa̸Œ²®}gåÀ¬Uм™Oµ³}KÑ´}FÄøfƸˆC¸¯œd¿ÝÂ7æÀIwÞÐ:~ÈÛ2–м1¬½Ä4]ÚÐ>cîßEbØË7SííF^Õ÷RAÁÕ9nÈÆFGÚáA®Ï…7Óú~EØç›_²Ý•8Ïؤ2®¶Ç6läâ kãУҾ,±ºÃ-UÍÅd}¼ÄaHؽB3ÅÖ9P–ªJK©¿J7ÁÒ^CoÏ|4_ái*›¶HO—òs4 ðk@‰ð^1 ØŽVQê’0Hå§,yÚt#‹î¡QOÀ¸>U¬¸WFÚ,}ç¥%ªÍ½³ä¦$¸í¤;‘èß.€ä¿(±Ý%»åÐ@‰ÞÆ'†ðÁ@¨ãàuYòÛ.AÏè<+ßÅO“ÎÄD¹‡68–ÕW@®»37¶×m®àoG¤ªEA¼º/6uÙX'eã†2ŽÎ=/²Õƒ&]å™#Àäš/`¾-!ݪ,fä§*B»šdÍݬ/)á®5E¼ÃK1³Ã':¿Ï.5é­#&ßÆ5Ë…š£F+С('¸]$8¹x'<ªJ1¿¡=2E*#,­2­¦4)A®"2Y|1,¨=;¯ 'C«.5Mš#1[è)7+·C&PÄ?-ÅvB µ‚80èz8Wç…C1Ä×C.ÓºLuÜØ—ä߀LèßUX»ñNLÐà9ÌÜØd¨Ñäj²ë“?¶ëß³Ûß^‰ýïxÅñÝ¥{åû·hÉí–càÍ€ˆíлwÁÉ•YÅÕ¹lÁày7Ûá”-¹í€iÌç~Ì×ÍP®Øé°šÛÀ5œçæi˜áÕ7˜ÚÂo‹òÇ%©ÑÇRƒÀÌE]ÙÊ4{ÚÀ-›ÑÕ„IÆÍ€ãÊÇÒfpÚàÍnÈÀ}Ž¸ßvqÓÐ|xÏã¶qÀ×/ñÕ…MÞÉ·MÐÏ¥*ÅκXÀç¹~¹ÕÑ:²ÏÐ*¸ò€[ãÁ¿ˆé¸âÑIªá±#ÛæW’åÌk­ÛÙ)¯ãÖF]âÞ©háèhjÔár;ÉСRÝÕ‰dêÏ/ÖÈ‹CÈÞ´/ÙÙÁFÓÓ›>èÅ·%ªÙ°.dÕŶá'ËÕU°Û½3©ÌÉ5®É¿6;Ó²4PÖÍ;ó¸'·íèNoÏÅGLÓËb(Ýäv2Èßh,½Æ„1ëÞ:QÛÀ‹àβ(ªÚ¶­Ðx&šÍ´3Û姒Ԝ+ÉíÒaÐÅQÆÃÛ¼µ½/°Ó·v׳¯Nº½Àq±¾Í¢¡à¹R¶Ã¸‰§ÄÅX©Ï¯]«§ØC¿Å‡bàÄ \Ó¶§•Ï¸¡X–ɯRົ^¯Ò®A¯³Áo»²ÈxźÅn¦·¨SÃĹWo´Ñks§ fi± dsƒœiIž­lY¡šN\‹¬xUX¬tk¬huŸ®`a—µ†btµ™}Âc^ º€DÀ¥\·¬oy°Ÿƒo§®pjÆ·‡aŸ¦wa®ªjrŸ½tâ ·–³‰ÔÂƦ·ԸΨҜŪ͞нà Ô²´ºÉãïÆÇÙÄ°ÙÕ¬®”ѱ‡z‘’Ì|UŒtYi`K|–™zf¸Ž‚—„u{˜ˆ~eŠ²jjz’{~dŽ€†}–e}|±u`ª±‘}“ßq–š}m–ow[‘”͈µ¦fŸ½’c…‡•oŠ¼–˜“€‰¦ª™ºÀ¥¡Q¬|>ji™¢s‰aMyyM/}OK¡ÂɽBÑĺV³ó½[ÉÌï:µØ±(™¼µ/x¿Û—Ô³-¨ï¹'}ãè;zØÁ@cÏÙ%›ñ½>lÒ¸W_ÅÔ"‡ÙÃ6b¸ÊfBÝÐ|3Ù݆gâÕ{A¸Õ˜>ö¯+Â̓8§ÜÎ3ÖÁ5¡Îg´Ä£,˜ºÆ6b°3sÝÃ7wÒ¶]=¶ÑCKÈ®,º0+žÛS2žÓQ1­ÅK?¹ÐV5´Ü‚G°Éj+¹åWDŠâ—*RùŠ"Ï„4uÞx'vß´FGð<º€(fç°AŠÕª0­Û«ÌØß>©áÔDŒÈÀF“Ûº(¡ß¨*¬ùÌ9|×îz¡Þº+ŒçÒ¨¿ÖÍ4•ÔÆX˜Ø±/ǵ='Ö· G½áY'ÔÓ?§s+&ÜE1/¶Ž-µv2Aw+4·—':6o4!8˜*dfP";È6G`À/?§)4Q4!V¼3)1£P>WÌk,4Õo*<à·(:É$*?âÊGvÍÒ6CÉîM™ßº\>ÃׄÞâ¾™õË]làéël¶àè[¶åÑbßØùtŸãØáÇðûÕÀðàã¿vÕêzòø•˜óÒ¼„ÞÛ¤ZëÕuaÆÎLÒĘJÚåQáÞ­mãØ»l£á°:¥â¦UÍß³>ìÇ/yÖ퓧ÕÕZ†ÏÚŒ‚ææ­ÛÞOÃ̾S«×уîÉŸ™ÞÐŒwÑÄYfïÖwrÉÎQnâÙ}ÙÓ¯oÚÚ¡dóÏnÅÜtRÝÌšSØߘ2×Õ†NåÑÑKÒß¿O¼×ÀiÜÞ¡]ÁÁÂIÃ×Îb¬ÁÁJÛÂÐlžÐÓ]àÊ×c³áÛL·âÐwNõË‹æ»HOïÛ_möݱ”ØÙfoãЄqÔÔ¼OË߯\ëάyØòtáÕÃ-»Ñ·XÆׯIçÑ»hžÕ¾9Ãé®Õݨ!ÂìºO˜éÒi å×*Á×·-ÏÎ=pÖÔi‡ïÖ^‚ÞÞt=ÝÏz@¶ÀpkÜ×pFÙߨ5ÏϤ1ÆÛ’PœÓ &Â夺æ¶JÖá‰:ÊÓ©päÒ§Pš¨ M¹ÆÎg©É˒ΩӦËÃÅ£Ž¹Âuµ¼¼oº«¾r|³Î§¿¸tή¼ec¸ ‘aÁÇŸ_Í«ƒoÒÅ©U˵Nµ¾°L—“¥ZÇ¡°\°¥¹S|¬¢UÀµ¿l`°À[z«¿}mÆ·U`¤˜ni–“Q8›ŒV_–•cf€¥pMl¸{o’Ò€mƒÆ¢ŒŠ­£wa¶‡x…®ƒ~e¸{|h¢¯gk¤•u··€bª¡qk”‘j“’qo˜±t›¹}Ö—Ú¤á‰á½Ó˜ºÆË ¡~Ó–³‰Ò›°•Ë˜—’Õ®½ÒžÜÓÏÈèÙÄÙªš’‰§”`m0m[]?]`f”…™œ‘†ˆtsj|a‚Š‘R\8]‚aše™h­“– †€s‹{›…”p—}ˆ‰l‡†—ª‘|¼Ž‰’y’…£¨s‰·”‚“²ƒ†…„ˆÂw‘Š™˜¦zj˜M~±·u€‡tql‰§h#œ0I(}l>šob@-LP:h>$k8"Œ1ff%/U—OO=¸ºÄÙDÔѾB¥³ªH¾§¶C©ÐµF±ÔÚ@³­²?¥ÄÜcvÄÑlºØ_¶¹Æ\¹Ãz|»Û‚~ÒêloÏÊŸWÇÁ‹AºÓkeáèLÊÄKã·²1Î؃pÎÌ‘3¾Ê™>ÅÈ¿5Èß›QÏÜ¡0¶ïÀ:yÝË(‹âÒ0”×±9³ÖÑ,cÌ´^tßÄ*îØ&mÉÚ?méäG{ÛÀFÅ«C*ß [6¬½Z7Šä&œÚu˜½J)¨Ïr&²ÂeI’ä~žÔž7YܲiÙœMƒ«X0kׯ[׬2áÁ1KòqX=ݲ&”Τ¶ä”/»Ýº/‚ïÏ7„áµÄÙ©.»æÕ@§Û±!˜åÒkŸöׄÕæÆ•õ¹ ¸Ê2ºN(-¿Ÿ*3ª¿0-ÄÒ3LżODĤ2)±¹A3¥ž'‚ïp>íˆ-ãÙHA²ñ5(mð”;ià•2ªë¡DIÇ«ƒÝ›ŸÐŸ%ÁΡ*>»¤&[ϵ!*ĺA¿ÔÈ5hÝÁ4 Ó®>0ïc<1ÊØ&&¨¼Ié`'0Íq97Ò€(G¿‘8/Â*2]²2=²>e‡ *Yˆ)cÉ02oÔ)(?"ŒÆN2oÀ3,mØ;BuæE*/ÉV9)ä‡-+ê‡/Xñµ49²UyàܘÄÍÉCHäø¹Ïå¿ŒÈßy•ìóÒsÌíèf±äðXÍêÜuÜåËw³ÚÅjÈüáwÓðß«y×ò¢qìû«Œäà“¤Éαt»ÚÄ×Ï’SïÕƒ‚ÙÔŸ4ðÓusåÏ´”ðÑÂmÑî홟ÙÕcÊØÄ7³ÔÌŒ·¯ìa˜×ÒP°Ï $UºÓi”ÈÐx¦ÜÉd²ÌЂˆÕÑ„±ßç“šûÁ|ßÖb˜ÇâqÔÞ>ŽÏÊ“fãä™MؼÐrßêjˆìÓ¸bÆâÀˆáÙœxÌØ•>¸ØÚßãºlÍÎwÛåÂaÓÙË_¶ÏÖ<´àòTÒÞÊS¯íÇÃß¿OÊÚê¬ÐÞLj÷âLgöÈS\ÜÓz‡ß×}“»íx}æõ|T®ÛÇ[½ÏŽeèÏt›éÖ®?ÚȾAÈÞ¾2ÌÜ}2ëÎÓ.œÑÈ5Ý׿2 ÙÉC¢¿Ñy—ØÖ>¤ØÍOÑÏßSjÜà‚]¹(T’\Ž?˜}}i hw¬–‰iµœn…¶àÓåÏì„yËáÍ·öÄ»lÂÀ‡Îæâ°ïßéÃÔØßlßîïŠêàøÌÎÕÌOÝì»þÔì÷éáº~èÔ’©áæ”®×Ø¡nùÈ~g±ÄbÍ䘂ÄÁµwÖæ¦gÀÒ«åè´D¶Îêx±ÿçZÌá¾g¿éÏV•«½R¦ÖÙx­©¯trËòUsÆòp ÉêVÕßçy€ìÚ†”Öátˆã×qyùÞ£Õ摆ääy–ÒÕ«“ÕÉÍZìÛ¦Uñê‰[ãà£vÔÖ®UÃé•€ÝÕ¶X¹ÕÇrÃì¿YÖîœcÍÌÅHµàåY¦âÑL©äàS»âÖJ»××Q©ÌëcÀ×ßj„ÔÈš`Û¾‚Qèßu€ÜÕqtÌð•mâφZÓÙ™cÙÛ¥OÞå…tÍç‚IÓò©5ÉÅ­2ËÄÓOÚí¡FÈÞÔQßïÒ?¹ØÒJÐË8‹îÛp|æàS®ÔÅDÀÄ×GoßëR‘ËäZuÈÌalÏò~pÛÕ_o¼æmwå¶s@´¡KÑʯ6°ÐMÐÆœGÀ»’9¿Æ°J´ÃÇcø¬?µçÀX˜¡¾G¶ÑØQ¼Ô™%’¯ÖR§ÛÞB€ÖØe—çÂny¹ÐBy ´Q’¹È8‰¿Çgd»ê|mÌÃXWÆÏf[Îݧ:±·œW¿¸—S¸ËÎF˜»ÃJ¤Ä¡k³Á§9¦ÅÁRŠÇ¤G‚²¢6˜Õš[O¬:ËÂ.KÏw'5™ 3BoÕRD±ÀZ;Ñ»\H¼¹X(§¾r:¾Â:N¹Ë¡5‹É~CÎi.væEG·êœ4¹Ìš'¦Ò“/»¨,¿Ê†^¾Ù™"Äâ­6ÌÕª5Ÿí˜IºË“+áâ©%²Ú¬a¥Ý¬#ŸÕ£. æÜeܧ#Ÿå±=f§23=ÔlA0´“O1õ]PÃÅkzÅ¢>/È»24¸|8#Éç`C¼àn@åê×wëÇCHíF(xÐTõÙu$ü¶3¨ÎœC_Ïv*•Õ²WÅÉœ<„¾œH¦².ÇŠ&EÒÁ70¾f'HÆ‹"Dà›-!¹Í92¬g$#³x&•v*NÃf':É™ œœ'Ç36s†"4¦o$§¡-&-“$7‘0)“¢,Z("‘ì(&“Ý:xÓY*6ßlCL£x2]ç…7'¼¥5ÌÚ*bãànŠáî1FìåÇláÞCOîêb­úâÔµëïá¤ÒáØCÆèÕ¾åêÙ¢Øãꑺðë[Àãç¨òë¦kñâ…­ÕÏmŠØî°cåâ52ÀßM‡Þá|8Ýã}^ÌÕX=ööl9áå¨AÁî½P­Û¿yÅäÊ`¦â¤$Ûår§ðªÑÜY€éÒ1ñ±0¾à®GäÉsëÎŽ^óÞe¦ÜìŸZíä„}ëЗƒáÖl‡Çù•_ÈÞFÐâŠ[ýß}dÌõ{4ÝÝ^âîHäÈ¿\Êé‘8àßAîÞvBÆÙßQ¼ÛÉ;Ãå¢&É÷Ý_ÄÚ½AÁÛ°¤Ò®,¢Öé}UîÉ_Nß×hvàÍ'`êÄGhÙîlhçíJ[úÒŸSâò|]âí‰jÑä;IÍä¬>æÖ Üæ«PûÛ~.Ùèž4¿èµÊã±6ÁÒå;‹ë¯j¯åÏEÛâ9¬ËË|ÏÈ5†êã1NçÂeOääSFÏâEmáÐ;0ÈÚc.Ü܈ÝâRTç×u­áy"²â‰Ôíz(ÂÛ»^ÌÁ°„·Ñ¬‰ÃËZ¾Ô˜[Ü·²?¯âÜyÅË¡cË׫yýÄm”¶ÕFTÒÌ'²ÂE_ÒÎgpÜÍq:´Öyeϸ~CíÂt4×Õ~=Ô· 8Ʊ¥=°¶±7ÐÇŒFÒ˳@ Ì°3nÖÚMYµ³FWÁ«WK¬ÍdMŒžG?b’Z?‹½Z_¢ê`SÀÖQW˜Êyj§©HP‘ÖaS§Ó~i¹™Y}ÓO}ËPN{¿WMº°;¡¶¸SÂ{O¥Î®/ןQÏÄ€¦àžŸià±ÍŸÉ¼­[κŽuÞ¸Ú¡ÕÀA¼É³–ÈŸ«g׺ `ϵ^fÌŒc:¦M$®“T3œ¥P{Ķ{ˆ­¸ra¹ž\e„taA»¹qp¶Å”¯ÇÚÔ¾Üë{w©Ãša^¯7v}¤¡m³¾sÞœ³Xd¼jwm–wv¾°œb‘¤­`…¶œsŒœhy_й|W§rrA½™}eŒŽmZ}ŽdV‡p>¦ˆiQGUeœWHšwbW‹ecNAJuLg6Hi™UVJ\_Oo‡BŠ>UtnS_lBR&hG—R‰ATNˆm£sv8†*wN¸ª‹L«}}®w3†pzŽŽÃÎݤ¢ç°³ßÈÏçÚËÁ²—ÝÒÈØÔçäõ½ßÙ׸ù¤õÅóãÜÖüÕçÖèÙ÷¸æÒÿ¸ÈóåÍÐÙ¸×êÖóÈЗ«ÝØ´“ÚÓ—¤º½¢Ã¶×ÏŠ­¶¨Ÿ—›®¡·½°ŠåÎ̉ÇÃã•ÅØÎïÎÒ“·ÂÍ‘áÏÒ¦·Ó˜™×Žž¿Üw®¾Ò|¶éɎñϑœ»Ä¥‘¹ß“¼ÉÞš‚Á┄Ñâ¡•·ßŸ‰·¦’¦Ô¬¤ÍÚ¨ªÚ©¤Ä·€µÛÉ·Ñ«âÍÆdžÓΊ×ØÈtļ¤{Æ›½}ÞÌÒ”»Ù€÷ÓØw±ÙÂw›ªÅ†ÑÜ}¿Ù~¨â£¤«ÿ…Œ±à{œ¬q´Ö¢s¨Öª²¾È‚ºÚ¥‰½ÍÀ¼¶‰µÚÈl´¸Ñ½®Òk¼ÀÖc¹ªÀ²Ã渶ÎoŮЂ™°Øq–§Ás¹³²o²·ß”ž®Ýv™Áʈ™£àˆ•®ÂœŸ±¿›••Â}—¥°ˆµ¯»Qµ¬¢™º¨¼]¦Ç§{¼Ÿ¿]¸fhñɱD´°I¡ÐÐJ É¹=±ë¥m®ÆÆNnÁÑfšÂ»Qžé°DsÉÔUv×ËdvÄÕKšÃÆRhÀÎkX¸®~`ÁÉj‚¿¸¤?ÓÎ{>Úµ§OÕG¦ÙÉ/¬ÌÂB¿Þ¡:Áî@‘·›A…¦‘H€º“Jj·§S#ËšR%¹‘8;‡ /,‹¢MGw²XD¬´X:ž­QMµ«WT¦´db·ÑgJiËž#Ös9dÓ*9žÄŒ-?Ýi1žž2¿²klؼ±3¾Ì—:°ëx3Âëw"¾Õ¼+´×§(»×‘,ÛÞµ,£à’-¾ÚªÑÆ™#ŸÏ㠬ʻ90ÅŠ3FÍCF7Û ?2­•'A²§A€áÆ5ЙF;¯‹34Õ¿BO×ãŒiçÔruãÆ9Dιn)ˆ¨6vÙC/~Ù "Ôܬ8žÕ=dýR6­¯…›æ¦D¢ÓÂ+-é/Qá­'0éZ*4ëm0/Ë& §¦A/ª¯*í‚$^¼eÊ’#å›#݆%[ŸDÍ4çŒ0À’;0Œ¹.yÎ#†¦2·)0{Ô'}É-#˜Ñq:5à\W:ë¤M\뛎¨#.“JqϸM|é¹-vÚÙ¤­àêÇ_êÝPxêåÙÆéå·DÈîÜfëäÏ`öàäÎåéãV¸âÛXãïÌršØñvmÍài‹èÖC®èЩ‹íßxqßÚS=áÑdÙÕo>×ã:5à×Q`ëΡFÄáµV«î¶DÖô×TÂè¯<«Ê´6ºÝ¸l¼»-âÓ/£àÏ7¶ãÀ0Ç×ÒSzÛÖ#•ÜÇCƒôÚ_‰ßÄ#‰å×:‚ÔágšÙÞ85èÜW_ÒÔblëØ/xÌàt0ÙÖª{ÑÞlhÁÕ“>¨ñ{(ÏÜ”-Ççu@ÏÜŸ!µæ¿?«Õµ·âÒEíÚªE½ì¨!Îà­2¸ã¹AÏÕa€ÕÕ)™ÝÒ5”Ö¼?4ÎÂEnÉó<^Æï4`ÖëˆQÐéwcÉåF6×àzE¨â†.ÖÛ±%ÜÖg/ÀÞ°"Þá½É F½Ï¨ £ÚÅÅâÓ±Û”#Ûë½£ËÔ&žÝ†æÔ ’ÇÏ=]ÞËTËÍoâÌJ&âÝ€#àÒƒ$èÑ82µèƒ#Úð{!»ëwÑƦ5ÏÙ£-ÂÎÎ{ŒØº2«á»{ÐÖ‚X³Ö¥?¶ÎÐ9xÜÑq¡â®:“ÖÍZ¨¿ÂWÊá¿A‡ßÑcdà¿7C¾Ó\_ͳUeÓÆh³ÄˆgÏÔ†5®Í¸8ÂÁ¥3ÉÌ›`×Î{0ÀÃÇ2x̯4W½´DWÂÀ\VÆ·NKº£84Ñ•;9´Š)8…À/>¯²C\¸œ57Ž¯RLÇcH›Îsd‘ɈQpË›eq¹M?‚™?L¡·q@²¹¤D“Æ‘PÁ´OÀÁ¬0àÆmݺ¤¿ÅÓf®Àᶻž|À­ËªÉ»œW}©È‘Á¯÷~Vª·qÈĤwª¦‘b=¥}a!À›ch™™L=ž«D'´™eJm%dG²¶/;»dR–¢€µáµš½Ç†l½{W¥µrER“NVIŽ¨FkVuNd/[6TI`žÁŽ\‹¢¡V}ȤY˜Ä˜UJº¡V]¹Ÿ@1¯UN>ª‚)Nj¤1<Œ½[@¾‚B!¨Þ:C®³:N¹¦0X­¾EYºf-}¹i=£–A0ÁÓ§EØЯ§êž_Ú¼™;¸Ò«/»Ê–&¼è7¿ó·F­ä¥D±Ø¤^ÐÈ*©ú¸B”Ë£;¬ÖàYšÁÖ†ÜÀ'®×2:Ù™Ÿ²^iÃŦU̧48ÖŽ7×58¸T)+Ê`5?߇:8Èx/Ⱥ,(èsLà—2!Í/Ö…/,‹r(݆(!­œ-Á™4Ì}%‡¼I$–ÍC-t«-±Þd!Ñ!mÂ(kÙ]0¾ºg=%Ò]0Bµ§(TÆ™+<Ù¿9€áÙ9w×ÐEãø…tÕå©síìáÀÊèóÕzÄéÜ~ÆàëY×èÎhÍòÎZ¹âÒŽÑåÕ`¤ìí‹pááxeáÓdªàÓQÙÞ—‡ÚÖ\SáÂTuçÏPD·ñ†PÔÅ„sãÔ}?×УBªßãR¨èÖ8×Þ¬1ªå¦-¸ÞÊ[²ïŸÓÚAÀ×&™à×,¹Ó´.¤áÌW¦áÆBxãË,pì¼ApÕ¸LqäÃJfØÁ0jØåwJÃÞ…cÒÑlsôÂxFàâsZÒî†aÕÝ‚?ÇÜ»0Âê®K¿ô¬XÉâ‘5¼á¶=¶Û5½ê«(Ìä«E³ß¼@Æס'ªã´6ªßÖkÝÒ7BßÚdaãâ0cÓßPdÊßlj×ÜsHÛê†/ÈÕšMÚ¼†yðÚÆvíà¨HÌÏ Bµß¥EÑÑr&Òݯ=ºÜ¨CÌÇ”2ÂÓ¸0}ËÕ< Ú²%Ô݈¤Ù³(‡Ï»*^ßì jéÁFr×Ö¼ÁMV¢Ã{V…ΉC‡ÎsBˆº]I–Òz9ɼlhǼ¯ãÞ{>ÍÜ¥%̹›3®Õ–PÚë•-¯ÕÁ8®á§+³ÑxN¦Â¬2¨Ò¯)Åߪ'ÇÔ¶)Ø®YªÊ­@^™¤$‡ÐÆN‰ãÅ_1²¨KeÔ³2Ú5 ·¤;@««Kl¿»F6ªöœ2äÜ›OÝàÀ¿ðÎ]SœÂ`.‚Þr8åÓ‚/½È·8Jœ’2~¸[EºÓnDmɯ/´×¬PkÑx0bÓ®7$­E6'åœ1Kçw>#¾‰Ë´7&Ó\0,Åm2DÈ 2!Ï­=@Ÿ^$µ‘$Ñ{8'Ã5³ƒ*A¯Ù\;“É/LžŠ'@²¸99°À)4h¢1?•Ò @VÝhB@â[4>¿(çÑŸA”Õª<œçË{köÄ:Uéë©LèðõÜý롳àê¸ÛïáUÇíÚrèêÊQÆäÛgÌãÉDÜñïˆâæÝ|jðÜ›Šàî§çÐH®çÎw@ùÁNZë»~=×Æ <ÛÐ]+åÍ@âÓLSÉá†MÂÛ­E¯íÎ%Âí“Æç´=¬¹¤!¢Ü¨+¶ð³3rà¾.”àº2‰ë 3˜èÔ2€÷ÍE}âÙ(ƒéÁ9”ÖÙVUçÓ%~çÌ4xÞì”_ÜÝjEÓÕ}uÆÑ:gÎæÈïÝj<ÛÕ]8èâ€4Àßœ7äê­HÍ×S/ÎÙ“-¨á«Q¬ÜÁ-µïš5ÈâÒC­ã«2«à³+¹ë¨7sÖßKaíÚboâàYoâäPfæÆ?$ËÒO_áì}BØîB¹Þi&Ø¿“~ÉæjÔ×p ÃÛÙjÇÎnGÚê$·é™¹Þ‘%¾×°*wÐÏ'¡Ø»½à²ÿÀ;šçßD‘áÒ,rÕ×&DÄÏ-yØÌ2sãâ$uÓÓJçÒ„#ÖàrÏÅ/3âÎsðá{¶þN3²é‡/§×½¨×Ó>¡ç¼) Ú¨'ÙÒÙj½ßÅ-§ÝØfž×耮×Ûz¦Í¾!£Ú¿+§Ö´3˜ÇÔxÍÔkwÎÂr’ÓÓeeÜãyS×ØŒLÃÚGɽ¶AÎßµ%±Þ²=ÚÌrC±± Bfɽ2vÖ¶2~Ì«kL±ÆI?¿·E.¾ŽY,·º><…ÖeL™ÇVHÀ©QLÂQ<½p^¯É4‡¹‡cktSXÆ|B“§wOŸ½˜'”¶œ@®É¤ à·¦5ÏįHºÊh¼ÉtŽñÆÕ¥Ö¿Ö½Á¢{ƹ…>»½´r;ԙåÎÒoü¨Ya¸±A_É3Ëž]ѻĉ¤Ð¦n4“ÒxX¦ÌR,\XLÔÄ^^¸°]}Á¹¼ªÛÙç—ɶ½Î×ïÅw”ÅWtÅ[X‚¦Ú«Ç®oеoTn­•R\°Zr¯°U¶¾°n~³¦odž‰Ca´™['ÕP\o¨wY\¿xOFeB\q¬—V/{`nB£…Y,^;qS¬˜o6a7FAuLY|kfN¦[XDn^Mryjlq•c^‡gjz«àgb´ob¾b†^ªÌ‘*²Ÿf`Å{[“Žº_[šÇw¯ ÕÅÓίÓËž·ìËä±ðèèãÑÎêçíêäØݶðÙéæâÑäïâ×õ”Øæî Ð­ÙÄáÙñäñ̳ؿÔÀ¾È©Ó¼äµÑÂÕ­ªÔ¹Ç¬Ô²·¨t”µ¡¨¼ÀŽÍ¦À˜äÎ¥¸¬˜§¥ÁµÕ“ÇËáççĞ̢߯§yÔ‰›™Ø­¸¢ËŒª–æš¹¼Û’«¨Ã|©Ï•Ÿ²ÍšªëÆ®µÇ֫ĩǨœÔØ ¿Ãà•Ä¨Ê¹³¼¯–äб°–Тv½Ë‚Ä»Á–Ê®½º¨¥¯ÌÖ¼›Î®淣›ãĹ˜Ø¹w›ªÇ¾­·‡Í´ÏɻɆËÑÒŠÖÃÒš¢ÛÖ«£½³›¬ÇѤ¹áØš•©º²œÒ·™—£°µŽ°¢½‘ÃÈŒ°¼™˜ËÊÇκŅ´™žmØÅ¢¡çÃÚˆ¬ÄꆳÀÄÀÑÆ€¾”Ó|À á€³˜Ä‡¿ÃÔŒ¡£Þˆ¶¢Ë˜«®âŠŠ­¶˜—Ž¸“ž‰Ù†šŒ¨±”Ä—¯x­˜»…£¯¥˜È½»o´ªµy—«‚ŠÀ½æN™³Ã@«¼În§Ñ¾HƒÁÅC²Û¿f§²ÓM¥±ÕEhŠ¾M¦æÆQ××M“¸ÒR”¯¿<Ž»Þnl¯»a¶´fe«Âm{ÁÍ›X«½Ÿ_¿ÊƒK¸ »!¤ÂÆ4®»ŽBż‹F¨Ï¶c‰»£D‚¹”UªÐPN¸QW¸¤I9µuRK« LC­GG¡¸NQ ‡i;Ž½8I¡ŸKI¤Ín\{ÕŒRuÀpE‡ÕdB¢²\YȽB¨Òj'ÈÌ %ɤ#¸ÜˆH·Õ™>ÏÔ€QªÜÁ3›Ë´)¢ìžP¶á“!¼Û«/Ÿà£1§Åµ6šÍÍP|âÄ¡Ä»?ÈÊÎ8¯ÜÇAR¹§KA–Ÿ;]À¬T-­_@/¬¤K?ÌÇn‘ÞØΚÐêÔ”ÎæÀÇâÜ@‚§P*dÞ-Stî­7­Àš@¤Ò~ ï‚*Œ»SR„êÈ.ªÖÇK é²;qÖž>GÁÁN/ñrSFŹ0?Ú¹?J¥q#<Ǿ'^Ú–9*Ú–;»u8Ì’+)·d4/¤™-0áµ7%Ù~,$—–A?‰Îg&™Ç=:«©:9×ç¯:‚à‡,~ðm&ŒÊÊ8Úµ(få·6²å‚>7ÒÍ'¨Ôä©ÇäëQ£æí¯bÖØñêåî©vüÿÝÖêòÏwÊð÷¡ÿÝÖ£ðÜÌ_É÷Ô]¾êà‚´ôèÏöãí…_íñvwúÛ—ÖãëŸÁÛÛšgÉÏf;ÑãHaðÞUPÒÉtJèã‹TëÜ“IÞòÇN³Õ¼N«ðÑyÊß³8¦ÚŸ –ç¤:ªå›*–ÓÅ.†ìº^‘Û¬%¨é§:”ÅÛ†ñêšuåËUœîÉ_cáÙoléßBNçÛˆÛìvAÕã¹rÑ×Ipà²G>ÀåDàõ†CÌàfBÉÜÅ?Ùè¤CÊÚÁLÝê=ÁÕÂZ»Ü £â¬¹æ°0¦èädËà¾>µáÀM°ßÞ’_ÞÑZ`Ö×N„äÛloåâdUØä“Ußéi6ÏÚy5Úä¦oÖ×¥QâãHÎ߬?Òáž±ã9ÇÛ£/Æç°3Ëí±$Éå1¼è³$ŒÕÅ.§ä°ÉÞŸ!´îÒ1£çâjÖÕ7|àÆW5èÔ)GâÁvî¹&;Ñàx*ÃÛsÐïoYÊÕv;ÈØf%»Þ‰.ÙÂ…&ëÍx3ÕÈ’,®ÛÅc°¾¦cÈÓd@Èç«=¯âÆAùÂ8¿äÅ\ĵuœß·'ŒçÊ<šÏÂCƒÑÞ{?éÏhWËÄErÁÍlRçÊ}4êÇ…TÑÅ“2ª±±2®Ã´“×”4ÆÊÁAw¸½;fÆ¿7U¹¤=.•ºJ9²±IFÀŸ6´½fMµ»X1ˆÊU/ ¼:7ÅÆZ?ãkK—ªWT¨Øx4ZÄž@lÀsZŒÀkSŒÖ™7žÑˆAvÊ›=ÒÖnR±«ÀMŸÆŽHá–ʶƒ^ÚÑ×…àÀ°‡ÙÁ€CÔ³UÊ´»\ÅÁ±QβšPq²¬]×ȯ:OÀÄjØÏÆŸ…ɾK9˜¤CKÁfVŦK:±«P<£žW†ÂÞÃÉîÛÖ¨üîÑÆïݧñ}XQ#`PÓV á¬‰Uc ‡Wr¬¬Oƒ®’_|¤s“ÓºÓ’ì·¿W¿¶jU§¤]¬â˜]O´œPž™nq¦†IEª­dgªžoe­so+”rjQ²‘r=x0eB ~ULq6g]žer^³E;‰¾rk‹…Jj§~t¦°ÂZuµ[j²m„š¦œgT“‡sr¡a•µÕ‡ƒ¦sr]–ÅŸÉóë©Ù±ïÚÄãªïÓðÝȼñµÖ×ÖØÑÖû×ÿâì›Û½æ×êÔåáù°Û°ÙÏùÍéÊ×ÏóºÊ¿¸ßÛÓÄÔ×êì›àÔÑÆÔµšª¼¸šŠ¶¿®¤Å½ªÜ­À¬‰É¿žòÁݧӻèÊÌàš¼ÄÌ£´§È”Ŷנ°Å§¡ÍªÄÁÈšŸÐù¨¬ãœ³»Þ± ›ç¡œ³£¦Ê ¼¹Ì¶¡®â­Çߪ™¡Ï€ÒÏȵ•ÒÄÊ•¿¬š”•²±˜‡¸ªÔÒ»¸Ï¬Ö²·Š¿Ò¹ŠàˆÞÊ¿„ÁªÎ©¹ÒŒ··Ão¹»ÈsÄ´Ò|§ãÔÇÖ—­žÀ˜¡ÓÉ¥ŸÄÙª¦ÔΫ«ÞØ®§ÅÉÆ×ι®ä͸|¦x|áæÃ}ŸË£”ȼׅ¹¯Í–ÚȺ›âÄÕ†¶¨Û‰ÄÑˉÆÂЉÒÏÒ”¶ºÔsœ¤º”¸Á̉¬Ô‘ÄÂ☒͕¯Ì¬y©•Ÿ‰ÎŠ|°¥’~ª«¸ƒÈÈÉ­™™vy‘²z¶Å´w¯»ÌsÀ€À‰ìܤZØɯK²ÝÕI²ÓÐB΢rÚļn„ÈÂZÖë>¨ÁÓP£ÎÌ\¼à[ƒÈÑ\³ÀÚOs½Õ…ÑÓ‚¯î}x¾Å™|¶¥DÝÂ’]ž A‹ÉÁTµÅªQŸ´¨P¹ÇÁC‚½Ç\‘³ŽV…±¤QOž—PRŸža\¨‡K:¯žS0…£SOÑd\±YT”ÃmKÌhR‰£tiˆ¨h\£ÛŽTr¡oN¯ÂL±~<ºÇ”@­é¸%žÉyWÉ°“5žÃ—6·ï‰K½Õœ0³ä¸EŸß¼4¡Çœ1Óέ6ÈĶ7§ÐÂ,®Ã³B>Ϥ7ŠÈ¡eKäª8ÏÐÉJQͨS1ŸÀ.VŦ=LÓžFZ³¯Y8²™8„ñ⮼ÔøÃœèâÁ¸ÜÛ~ÊÄhAlÓ$2uîb4½×†MhãŽ/]ÆŒ4°Â!ˆÕ‰-ÀÁ 7ˆÀ¹'…Ù”-RåšXÁã­;„ȼF¹¶²8&É“-8¿µ++°¥RîK&ʳ-=Þ«7EÆ~5.ÌŸ0Ò“;#Óo-\Ù…8*ñm#˜Ø0-žÕkK±Ë®:RÑ2Dl¶”(²¹Ž*C¾Ä6O̪&®×Ë7×Û­Iqâ¬CƒéÖNoàáobúâÌNÿÍÄfðï¹ãíð¾¥ìÞèªîðç<äëÀ„åøÖ`ÏÞã¦ÞïÜ_ÍÜ≷äî¤våæœâÔQ¯Þפcà×H^ÖÝjbн9TÛá–ZÈãTHãàª`ÊäSÃà¸<¶Þ«<¶òŠ5¾Ú¾NµÇÁ4°Ý¨0¯èÁGƒäáA”èÉ)ªÍÌ#¿Åà}oðÃoåæ4~Ü»8ŽÐÚUzÑÙZŒñÐ/¢èÝ•HØë›TÇÉ|:éÛ3o䯉/×Î’1ÏåŽSÊÓ²Z´Þš;Éã¿*ÓåžWÒ׌B¹ÙžH¨à¸0·èŽ'»ß¶7»í›,¸äÂA¼æ³7iáÕy€ñÍNuåÙ‹æÎlkåßpXÞÒŠPÜÓ†EÇÜy¸ÖËQÅçqSÖß”%ºêš1Ôß­AÈç’_Ì׳*»è’7­å‘$Ñß³6£â¼-½Ò¹(¨å¶)À×±*‘äã_„Ë×(ˆ×Î8uÃàXaáÛg€ð«3zÚÃg0ÎÈ;ÈÎz Í×K+ßÝw)ÈÕw(Ìåv3áæÁ[ßÝ”\ÜÛÅO·Ô®:»ÑŠ€ÇÓ³_ÈÉØk¿Ã­P Þ¿.ÓÙ曕åÄ5´äÁ7±ì®2Á»fŽæÕ`…ãÅcÖÅKnÌÇqZáÄ«^ÊÙv'ÙÂ¥;ºÓ®AÀÜ„+ÓÅx'°Í 3µÍ¯7FÓ¡x´ª,FǸ4SÛ?I“c?а<>ªÖJBœ²;EÏ·H[’ÃLT§¤gOÊ´WU‘Ñ‹9€ËU‰¯—I¼ÄI]­ÅžRtÉŒSȼ{F‰ËŸG}À 8»¼ŠnáÒØŒñÀÖ¥Îˤ{ÝÖIÚ½j{Ó¨Ä=ºÃ¡DÞ·™€ÅºŸLgÅ«,]Ψcäµ±hÏèZe°›_s˜6š°k3œœeiÏ–EƒÒÓ¿éâÚãØéàúÓéðǵúygŽ½GkWŽ*nr§Fd–Âgµ€]»šn¢™H©Ö¬¤a]µ…ph±¨r`ÈZwg©°‰wÉk^·ŸWo¦Za:Ž>\k¹bq¢GD¹pX[¶œ{gÈšu9­’„\iFd_ª¬qW¡v{BšQ`{Ž£Bgw¬|¡µ£{`h‘4b{«vÄ žF®§wQyœ™¢Íº¼¥èºâ‡Àı‰—¥»·Ãª®³à¾ ÙÂÚÅßêõÛùõØóßÊèôéëëÙòÁæÖ×êÕãÿÛÉÚÅéäìËúÇö¨í×êÖßѾ¼×¤ÍÄѯÜÕÚ׸ßͦâÀÅœ€¿ªˆ±·È¨É㼶ãÆÄ—ßÖϧåÁֹ̑ŒۼÀ’×ßʨ½ÃÚ¥¿ÊÞ‰ÙËã«´ÑÚ ½ÏÓœ§Œê“Ÿݤ²ÏÙ¢©Ý੨»É ´ÞÊ–œÆÝ’¡«é¬µ²Ù²…ÞÓÅ£»Ê¨¨ÓÚš¢¥ÃÈ“Æɲ¨Ð°ÃÒß»‹¡‘¼Õ×ΘßÌ·ÞÌÅ‘Áɱ”áÍÒšÙÛ³ŠÎÈà†ÆÅÔ…¾ØÞ’ÓÝØ“ÂÚÓ§™¸Ø¤¥ÔК°Ìñ¨£ÚÙ¥ªãΫžÛС{ÝÞÁ†çÏ¿ˆÞÏ”˜áÞ¶ƒ·Ý£ÅÄÐŽçåªâÕÙ‘×ÃÆ|‘Ë´”ÂàÒ´½Ï€²ÈÙyÄÝ݈±ÆÔ…ªºÍ{£®Þ†ˆ˜à‡‹·à›š¹ä“{ ÍŒ«Ñ¥Œ½Á˜Ȇ§Ÿƒ¾á«yƾ´l¨¬À‘ÃßKÛÓƒH¶·ÅR¡ÆªA›Ì¶R¯¿ŒA¡¾ÁO…ÅÍ4©È¿I¹Ù×j«îV«¿ÜB®Ç¥1 Á¾Ti°É„ʱ\o¼àngÅã dÌØ—YÆÈ„HÑ¥“KÄÊ·S¼È¬QÕÌ…8Ï»§?ªÄ°m•³¤c¦¢‹SnΛQIÄTˆÎUU[¾™F[„±Nb›“=]ʽSoÑãCFк\B–·JT´ÌmU¤Òw<—ÁzU½°IXÕÄk5 ÏxAÁ¹h=«ß‚@«Ï€Iʽ—RÆÔ´2ÒϸB£Ð¢T¾Æ TÞÔDÇϯ(ÅÓ¼,Íð 9«Ö‘R ÒÇeŒÝ½OÐĘ;Âß©ZsȹTEÔšc™Ð¶2=®Ù=uÃÝ9×ï®ÔãàÈ»ÝÚóÅßáµ]Õ§7P’ß'c¢%8{›$˜ÚlAN¸_1ÚŒH½åX3ÜÂDlߢ6\Ç ;[ÊJI'ìHSµN6šË|QŸÍi15Ë…4,Ï«HæÚRJÊï~OäÛ…$âï|?Öæªyà×:­Ù¼,ºÞ¼&°Ýµ<ÙÚ¹C·Ó«6´àÖ2®â·[¶ÊÂ5›Óўϯ¹ÙÁ.UÛæ]VÓ»VFÂÈm}ƽŽwèÇ…f×Ì’8ÌÉ–5}˽&¸Î­2Å›BÇÁÀ0p½Ê9l¶ÄTxÅÈ,/ÉÂTTʹU5¦¶K'Ò«U4œÛ]=¡Õ_<Ž¬Vc©Ò}E—ÁbXŒµGLŒÙ>P¯©K{ÅI—Ð5š·’:¡Àœ@¨Ïµ?–Å—9zÉ·:ª¶š[èÇ‚ƒÏ´±}ÏÐÁJ»À­Iµº…HÔÇ·`ϲFЪۥӰ¸]³Å¸X«±ÃvÚ¯¹Tœ©È]_°¾c}¢°\c£½UM§¦q„¡ÔvŸ¾ÞϱÜíÇÊéÒÛ¶×Øê·×»‰G{Ÿ]aU‘!4j¯G;s¨xXz²\i¯›]r´ h{»ÂlpÀª^q«´Ñâ©kgK®že\ª„J9´ÂB”Ö|9¨¾}\·dH¹Ý}@·€g±¢iµXd:}GvO…Ÿ|Lš™[a®‘~]“ŸŠVŽ´{kiz}ÎѲ•n†“tpiµqf_˜‰…p¾µw{¢Á…³‘ŒߦÖÎÞ¯å½ÍªÑìïÊâíêÄÁÃéëÈãÄÌëÏöÛ÷ÓÌÚæïÚìåéâÿ»ùåìÏïâéÝæÉèÛðÞíßâÔçÚöÛξ£ºãÐæÎÛÐß·ÕÈÙæÌÚ¨ÈÜ“£‘{’•¶­›ªÓµžåÇØšØÔ¿‹íÉÔ‘ìξ…ÛÄÁŠÔ¬Â‘ªÀÁŒ´¬Ï…ÕÏÌ–ÈÌË¢¯µéƒÐÇëÏÓÅȩӘ˷Δ­ÄɖӾணµÑ˜±ÇËš±Éà”¿’ѱŽÃãʯ§Ú­³×Ü”‘º¯§ƒãÐÀ™ÏÜ¿“çаxµÀµ˜Úæ¼u»Ä¼w´ÀÓƒ¾ÂÀ~¾µ³~ºªÂÛÙÖŽÐÈÀzÞîÏš²Ö–•äÇ•”ÐÅu«àÛÉ”ÈÕ¶£Ö¾œ¤Ã™”ïË»„ìÞŸ~àמŒÐؤ™Øå¼hÞ̽ƒÆÏ»uǤ·€µ¥Á†Êܸ‹ºËèp´Ø×eÜç¿YϾzÈ®½}³»Ùw¯ºÛ•®­‰z¡´²ž…±y›µÁxª»¬”ºŸ‚sЯˆ”Ŧ{¸Î¬{¸’šwÑ­¶‚Èê¥gÈÖ³`®ÀÑBµÎÄ1¸ÌÐ@ÐÛÇ<ŠÈÉ7 ÐËUŒ¿ÅKžÅÀR_»ßN«ÈÆJºÍÛnyµÔ‹nÆ̃dÁÎwmǸ\ÈÖ“M¾Ð¤7ÑÓ›]¡ÑËDÀɼS¾Í­Eʺ±J°¼ E¦¦Œl°¤‘V]ƨWT¨ÁF2ÞO'É©S;¦ÒU]‚›\k§žDZ«¸a.®ÕWF‰¼eYŠÜfY…›—BU¼vP¯Ñf8¥§Ž2ÀÆ‘6ÀБ;Ǽs]˜¹À#ÅDZG¹Û–fÄ¿Ä-Ìâ½0¨Á´4·ãˆ.ÕÞ¸5¾Ò§ÍÓ¶4Æí¯Q’Ðß'œÑ¯¶Â®5²Ú=XÎÊ7ÎÒcI¸ 3WÁÏZkÓ覑áÚ¢Tèܲ­öçØÚì–HÝáE-«ÎA9kÍ3uà94“ÌM+§Æ…7†²“J›Ým,¦êˆ1Ë»6ëÂÇÝË’==ãŸAkçˆ!HƯ,>Ù°)"¤ÐP[à¥;Ó«)?ÎŒzÜž7KÍ€- Þ`'4ÑÇ='¶ŠW, ‰+;ÍÐU=¯ÏTÌÖqsèÍ“LÙÓ’aζÀFËÚ«kï»:ÎÓˆ0¼ÌÁ*ÉÊ@UÄÅB_Ë›GH©à@ZË«N6ÚŠRD§”>B’£.9–´PTį}R©¸N/ gG§ÑQ[‚Á©*aÍzU™²ŸlšÈw/­Ä©@¦Î¸KgÏ¢Pˆ¿‡jØ¿¡CÆŧ’ì°£ Ù˼¥ÓÑÃU©ºÇ–Ê°¥_ÌÍÀR¹Âú­å£˜e¸¹ÖڵݶĿhµ¶­bu¸ÚÇÈÁØoNßkzÓ²‡®¹ÂÆàíÇËѹÌÅìÝÕ¯ïéťȨԣ¯­HWRÄ8R]£6W]˜A_q™{T‚±žaš¾mª®‹G©vS—ÀÖzb™½‹bqb¯¤oq¡†X`ŒHi˜¤˜kw´Ê}P¯‰b®Á%hf®¿‰JžpgAU>r9”—so¢¥|Pl6¿ŸÇ© ~vq–~„v¾‡f}¹˜Šb uˆ¨Šbvª†€¿™«ÂÃö¾Ì¶ÝÈâ˜ÜàìØëÎäÑÓ½ÔììÉúÙÛÎÓãÌòõÚ×ÏÉáÏÝÍæÜåÂôâûß÷ÝãäûáÿÁñßìÜýÙøçæðáÇßåéÓâ­»èÖŸ¿¼äËÞÈÙá¼ÔÀ™·¡¾±–ίŽ¹½¿¬é·ÒzݬÂÏÕÒºÞìÑàÕÝ”ÜÇÇ•ßÊϛŮГ³·ØœÚ²ØÁ¢ÛŠ¼´ÞŸ²ÔÒˆ¾¼Ó›ÆÙÑ“¨ÔÖ¨´ÂÙº©Çã—¬œÅœ°ËÔŠ¾ÛÛ¢¨ÊÕÐ{é´±¦ÙÂŒ¥ÜÖ¸wí¹µœôÙ°šíÆÅ…ÀéÍŽÒÙ€£Õ¢¢ÔÛÎ~ÙåÎzâÕá{ÝÚµwâÆïvÌÓ½xƽÊwËäÙ¥Îĵ¤îÛ¤œÊجäÓž™á鶯ãѦšëÔ«”ἯŽá׫ÁÊ¥zãÄŸ…Æá·àÎɃÝÜ­ÌÂã…ÀÑÎ}ÂãÄ}·Æ³tžÎ߆¸ÒÓiÂÍÓb²¯Öp®¿Ôu£¿à‚£ÕЦŠÓÕŸ‘°ÑŠ°Ö¥«Ë¥Œ­§¯tÖÔÅ‚¦‰uš¬¿˜»ÀµS«ÆÀtļíP»¿•[ÀÂÇZ—Ò¹C‡Ä©C¶Ç™[¦ÑÉB£ë¹H–·ÁO³òÐcx¼ßZžÊÓHŒÎÇX®·ßvtÎÄuƒÄ·u‰»Á`dÉňjÃȉD¿ÂŒYÓ¼¯EºÒ·C®ÀŽ;ÚÁŠH³°¡9ªÇ­Z†È—XΘKa©¥^]ÇŸCZÂ~Y[±¤`MŠž9D”°MN¾œ_H°È?:«¹WA¸ÕK^ ØeIŽ¾yK±ÄzO«±OF̼zFÑÂnL§¼rAšØOǽŒ6¹ç¨7Õè|)ÊÚ°8’Ò¤3»æŸCÚØŠ7Ëê¸.ÐìÏA¶ß¿UÓáÅ4ŽÐ¡5§Çœ^ÁЛ-\×ãq…¿Úfa͸Q‰ÞȨtÆÜšäÒØÇÞWäî´1×Õ\FÇÚHâÑ^Y“Ó&7É'7Z¬+5rËA>RΊ4¸Ò‡CëP-º×1¦Öœ"E‡)gã›+EÅ¥ ^ܤ1VÕ31œÍÅ7XÉÊ5%Åœ—ÚF+ŒÒÑ0Ò€5B¦u:VÔª5]ÏÄZQÊ¿-,Õ„-—ÛÍ9?±û‚^~ëi_Ÿ«Jsín1³ÄI@kä[`Ú²¨!£éá^ºôÒj×ÑÛXáÓéo˜Üím{éö˜ÃóâÈìñÇÅìâ­ åè›âèÕ…ÛîÔ¹ßìÚÅèìãzáëè€éïêªëãã\³ãàl˜ÚËwˆíï’»âÌY|ßéžkÚÞ8_ÅÐ*_ØÍ`Dßï¢BçÔ©XïÖ­?îØï^ÇÙÇY¼ä®FÓäÁ?©è­-°ì±'³ì©A§æÁ)§ø·CŸÚ¹M³á¨@Ú½axêé–oßÏKšåØY~ôÞKsçØdŒçàk–ÕØsEÍåŒZÑñ^Vç×…HíײPÎé¦HÙÝ›UßÚ¾QßÉÉjÇÏ‘LÖÙ˜TÒç×dÚÙÖ[ÅâÄ?Ôß»@±ÞÕH´äÄ?ÉäšH´Óâh\ÒÖ¸tÐÚ?„Üð¤‡ñÜpTäñ}iäÓxnÖÚ”Mâè¢NÃÐxÝЃ=Ïâ®/âÜÀUÞÕ¨e×Ü~#àÜŽ3ÏÝ™AÕÖΰÛàW°ÝÚaÄʲ=Ëç<­ÝÎ*”ÜΉÛÒ%˜Üê…pÜáO{ÐË:‘â¯$fÕÝ`?ÔèŠ=ÅéL]ÐÖSµÚaAÑÚ–Îâi<ñÝŠhéÜ“D¨Î·>µÄ¤*§Ðˆ1ÑÔ¶A·ËÄe©ã·-·ÕưεJŸÐÎJ¸äª4¿ØÍG’ëÄsƒÜÊeUÓÊK;ÅÒe;æá‡4Û¼x:ȹ¤B¦Ì¾AÇÁ¥?ž­«FÚܱ4w¿À-zÑÈFHªÃCU®¶?&ƬO9–¨CFæ^T¯Âk+›ÅRI™¤UZ¸Ç^L‰ÊUZÈ_^žØkdBǪ3…½ŒCˆ¯B›ÆŽ •Äž+^ĺDwÉŠ7¤Ê­Gæ͇RÌÃë°ÆÅ­šÞÓÅ>±¼Ä‹Ð·â’ßÄ­]áÒèžâ¸á¦íÈÝ£½¾Å^~¶¿Ln¬µd²¸µË»Ìeˆ³ÔnbÀ¿eÊàÇœÚÍèȺ·ºc´²ÔǨ좑Ug¡g¨ð®¶vÀ°‹P^®6^]š*Lr¼N`4Ï}j‘·Ü«Ý¯”t¡°¨h¡«½a^««\;«edŸ‰i·¯wd³­k1›uΘÂh`™X@›„N1´Ês{““~=¥²{8’¬€b“Å•ºµsb†qQ©À–€®‰ÇÌ©s˜°µT€½„Z{¤¡xgd³r}q¡µ`—‹ÑšÙªØ°Öœ²©Ð›åÏàÊØÅΨÄéÂÞØÈìôÐæÖâÛóþØÕÖåéÜïÜûÁûØò÷ëÞïëòñòßìúñÑòÕÛêí¸üÆÜש°Ó߯ÂÍÚßëÎùöߴɨÔФ´Ó¦°¥•ÊÉÝÌÊíÁ»õÊÛîÏçŽàÎÑ’ÚÊÇ‘îÒÙŽÒÄÙ”ÑÊÏ{̾ÙÅÐÓ™ºÀÕ­§ªÜÈÄÚ„¶¥Ñ¯’g¢£µÕ˜Ã¾çªÝ⢜¯Ô›¥×ßž¹Ó»¸˜ÞѬ®ÔÖ—œÑ¶–nÿÓÀ™å߸~忉ÞÜÊ–ßÐÎÞ㮑¯×·—àáéÛÀÚyÀÉÁ[ñ×Âo’°ËtÕÚÌ€±ÛË‚Ò×âšžèÁ½£áÔ¤®âØž„åݧŸí褜çÍ‘ÜÔ¸„Ú±ƒâÞ¿ˆÚê zÔá°uûãÈvê̹ÞÚ´|îÔ»nÔØÆaªªÓm¶ÒÝ–´ÊïŠÑÊÊ`ÆÈÒm³­Ëx›®Ôb¥¹¾{·½Á–«è‰š¾á‰’¹è|­¸¨}¹Åºr Å—½ß®y¶¿¥±±Í{̯£c·Ñ¤sÍÓªT¤ÒËX³ÛÈYÈÁ[ÅÿN•´¾MÀÁÅo±ÄÏY”ÆÚXžÊÝ@ž³ÎP¢ÊÕgxÂÔ€…ÄÁ“}¸¿ƒ³ÖŠZ¹ YÐÉ„Fн­9«½ÅH°ÈÈ:±­“H̯«;šÛ¸W¯¸´b}¨Ÿ;ˆ±¯`CÈ¥/7©˜Q6Ï¢bP˜ºO.ŠµHF®ÀR[¶ÄNDh³IJyå(Z®ÈS×ç—QÌÛ†TÔÖÓK¼úËVÕæ¨6·ÿgOÙÚÛIÁâ¸4Æм.µæÌ9»è±3´÷Ýn¿Þ«<Æð×fsÜä\VôÂŽŠæÔˆ|åìÃ’Ñál[ÖèŠ]Ëß“QÏï¥LÔë…?Öá–ŠÊæ‘9ÐñÄ5ÖìémÂðžSÞõ»AÄó·K¶à¡$ÜÝ«8ïÆQ£Í¬:¸á· ÚÑÜ–Ó½%€éÎ"gïÎ,{çÛo}ðÎB€÷»3êÎ;>åÓEÔíŒnÝÊ7ZÆÛˆ2ÇÜqÛçzâì¯IÁä®>æÑ؉¤ÖÃ[¹Ô¼Z¼Á„8Í¿À'¿àÇwˆéÔNå·É?§²ÃI¨ËЩÕÅ?³æÍP‰âÞd|õÑzæÁPcìσVÞÓ—HèƇp˾,±¿ª.ÁÍ¥,ÔÄ@‘¸ÏJ°ÎÖAi¾»)ˆ²¯=P¢»61ɦ8PÌ¥N2¥ÆbU¿j6’´UP˜ºXh¡ÍFFŽ¨KP¡ÕXBŠµ€@ZÙƒP{Ät^¾´‡wÖ·»5®Ò¡RœÇŽkª¶¤]ÒÁ¥mϳūØ̱شݩÇŵtÍÌì—öÃæ¦ÍÊâ“ÓÇÚ»Ò³Ú‰±µÆFÊÏ_¨»cĸ­n¹¾ÊgÅÎÂŽÄâÍÍÝÓ÷µ»µÐ¥Ùʵtr®Õ±¾ä¼†G°nHoÌÓ´Ô½g‚x´OY^¹9Bm¦CdtÀF{W½ˆ^q©whk¬å…¬ª’~S¾žbU wA›¼¨tk¼Ï›R­Žpn£€lx©Šg_¢‰nPµˆ‰HÐx­¶²’r™·‡¬¼“ˆ±°¶ µ²¿Žo „b¹«Ex˜¾Ã•k¯¢®Ô·•È¢Æ³€“¡ƒgz§ÀjlΑ€¦©Þµç ¸uÐÞÁΙðÂáÞܠا¶ÖüØÞàðÜðìêäîõçäóéøæñÛäæâõÐøÎÿíîæëñèåôÌøóçêëÜíÈë®í¶Ø©ÂÒϯ¹ÁѨÓÀè¯ÒÈÛ˱åÑ‘·ç¾´¦âº¹±ìÆÆåϹ›ÎÏ© ãÄ®„èÁ܈áÊÚŒÏÑÉxÒËÕ“àÎמвÆÕ×Ä›žÃã•ÀàßœÃÜÆŠÞ½Û²¶ä™­åà—£²Ù¸äÇ ¨Þž¿ÎêŸÀÏÚž‘èÎÁŽäͶ¥Òߦ¦ëâµ™ðΪ‹ñì‘ãÁ»‰ÔÌÓ‚îÖ„ҿ½•çÍ֎ո؋ÊÓÙ•ÇÍÉuÙÖÙ€ÖÚæÊÏÐŒéÕÛ„ªêã®ñǤ©ÞÝ™ à׿ŒéÇ••ßÈŠËÝÀŽíÝ·ÚÔ·‹éÌŒˆá̲}ÝÔÃxÞÙφÖóµ€æÍá~êÔ¯™ÉÅÉzåÚÍ–£ÔÚ~˼ÈcÍÌÐtÚÈÛ…·ÌÔy’Ö⚨¶è²³©›¾çšƒªà£•µÌ¥‹Ì¾ŸŒÃ¦»°Ëœ“»²±~Ì˼k»Ä¶d°»÷nÆÆg®«È]•­ÆY¹ÃÃ[ÄÖ§=´¯§e£ÐÚ9rÛáW¯ÍÁ:“â¦C“Ïß>´Ô¯J‘©Âu„±Å“vÍßjtÉßvl»× ]¥Á¦OÈÃŒR½¸°H°¶‘<¸Å™EÄÁ3œÑ¿<¹È§E–¸ŽVžÑ§W|ÅšS8¾FOÛ}RR·Äb[‘ÖVK¡ `h®±^Q€ÒdVœÐ[N¤Ø_KšÎ„D—¯jCg¸ƒPÀÉV?ÊÄ›/±ÁŒ9»Ä–TÆÂp,×Ø 2¯×’/ÐúxEÊö¯8£øÅ?²ìÀ+ÉÝÎwÜí¡,½íÁ8¨ì–V™Ê³?\ÂÈ4§Ã˜;«Ï³¸Çï0œÙÕ=–ÚÜ ÁöÐDp×çhgàÀDFåætRë¯NIÕâVOšÐ‰fÎÈ9L¢Çl6áiÚÔ¶}ùÍØAÊò²MÖà‚Iìì«F¾ïÉK«éÖP¹ê±E³Ôå`¢íÒMºæÒLžêÚT§ßÞS{èê…„ìçw¬áÎfšßÆQÝÚ{ÓÈe›åçšœÙÏ6„å×_œÝËiƒâÓ£EÃæâRÑè¿zÞ܇SÏÚ¼MÎÕ×qÊÇ­V¾àãB¼ÛÀ[ÝÞ¯BÑä±C½êìQÇçÚd­á¸AÌéÅB®ëìM¶ÛèpÃéÚmÄÎ盌ßÙ“yáÔItäÔvnÛì¥Z×ÚmPÙæ{yÙÖ›NÈî’GàÖ’RÙã¨`ÆÔ·]ÞèÙ/ÂõšLÓÓµGÀÔ¹KÉä¼O¼Ó£:¸ËꃲßØqµÕÓ)³è¹<“àÚN‘ÝÆ}ŒÛæ:šà½(OÿÐ?ŠëËBqÖÖ#xÕÞX&Ôîg2²ÕROÕÊl!¸×pGÝÚŠ)ÝåyCäÍ°eØ‹@¹¹¨3¿ÔÏfÏà UÓÖ¢4|Ú§QÊÅ°U¾Ù·E¤Ñ昕ÇÊk­à¨0¸Ù¿5dÇÏlUÆÁq×Íc×ÕŠ‹ÜÃw`ÎÄ‚:ÒÙ5±Ë¹?‡Ã¾4°»˜8~À¹5½ºÌB¼À>J׫@PÅÃh@ÒH.ÁŸV;µPP«½UMŸÏhJ´°Xp»ÏPO˜ÄlNŸËrWžË€2ƒ»{מ66È¥6Q·™ABžE=±ºIO¨šeO±ÑTL·ÖMZ±Áj_©±[/¬ÕlY{Ü(œ˜iqËâpBÆ»Ÿ4غ’bÁÓsi¹ä¤-¶ñ›Ôâ¨$Ù÷ÊI¶ã©6ÀÖª!Èæ¹Zßߧ3µÚ»;µÜ¼c¤½Ó9H½º<ƒÒÍ9¯Ï¡Êѵ0‰ß¿3~ðÉ=¡âãs˜ÖâNM»½DN¹ç?ŒîÊS)«ÍDµµ2_òÀo9ßÔ8J‡ßn$›òT9q°HGÑä*LŸÛŽ#Œ×=,¤È‚8 Ó­,v©¹ºò~8—Þ¯K·ó¯10è­+¿ç­…˹Q‰ÝÊ15É¥ÄÖÉS…ãµ!@ËÆb*¶À<5ÇëM9ÓÉPJ¿Ð;¼§1IÉã?TÑßlX¾ÚMM˼w,âñ³*Íå›*Í׆'ªÛã_µïÝJµâÒ]Îðê²áÒàh‡ìë´îøÔêðÛÀÔéåÔå÷ï Žðò¼§ôÙÈyÿêèÆîêáÏæùãgÿââZ¾ôÖDÛíÒf|äÔs êàw£óÒ@ªñë˜uÍß=täÞ°fáÉ”[èà¨DÕÓÂTéÞ®OÖéÔTÌüÀ>·æÍ?½å®@ÅïÀ.µã¹I¬ï¹%¼Ñ³H~ÓìZ•ôÄ*¦ä²R¾ÉÐLŸÛÓOƒÜÞ8¦÷¿$öÐ:{åà&€ôÑ6Ûæ©^ÆáØ_åëÁiÚàOkÎݯYèÞ}MÔدcËí§W¿ëÛOÎ÷>Øñ°^Ìå¼IºäàF™î¶AÙíŸTÎì»:¸òÞT¹Ú¸\ØÙ¶Q’ÚödMÛæ–‡ßÑIˆÍç}ZÒâ­ˆÎÞœ~ÜßêÍÖ—òÏÆ`õÝœ_ãá¢LÙñ›5ÚáŒ_Õåé]Éì¤VÆï¡`×Ô¾a¦×ÅO¸ÓÉD¾ô™Ðâ¿KäÜU¢ÈÏCšÙÆ6xèàDæÌ,‹âÏ7™ÚÞMÓÚh9ËÙ{-Û×.FÕÙoâØhËÞ…+ÜÚ§`ºá e×ÎÍ;³Çª?©ìÁ™ÉÂØnºÔͶ¾éŒ´ÓÑ•Ùé‡×Ü—±Ñ¾xÏϾq§ÈÎWƒÜÞZoçÏsÞºƒ„Ú¿[ÂÄ:ÏÓdÚµ¾9ª½ÁNÁÇž=¼ÒXZ²ÌH|ÊÇ>pÜÅ^`«·F>µ©EC´¶/FÍ—^U¸¼ME† l?ÁhW´ªgP‹±SI³½‚VËr:¦µ@`Ä‹HyÒ\S†ª€b¬±¸KÁÀY~Ö£S®²·]ßȘ꺮i׸ò›éÕÖœ¡·¸oÍÀå¢Ó§ìªÍ­º•Û±Çªß­ÃWÊ°Êlb®²eÓÐÄb‡´¤p¹ÃÀk`ÆЭ¿ÚÙ·éØɯʼ£fm”³y˸ÌÑνœL’§—VˆÁ³¸¸„t€¯}‡…hs™‰T¬´Îi]È®wh¦™bu˜rvaž”ƒ™“´t”«Í{P°³‰e”¯~zŒ‹l–¡æÀ»ž¹“q‹ºo}”šsP°¯jB¨Ìr¨¼‹m¥ž‚x«ÂrΞ¿€‰²¬”µ¿“…yŠ·¤„W™µ«¸x‰šÅཞ¡±Ñ’­À¯’ªÂ¥ÏÚŸÏÇç­èÈè•áËʬÔÒמ½ÌäÔìÔóÚóþçÎìëêèíàïßîèóÜÇêÍ÷ÛýÚïÓùëøëòÏçáëÃð®ÖÎá“ïÅÔ£²àѨÑàÛ±Å×ÖŽÌËÖ¡«áÁ”¬àɶƒÏ褦Ø䤚æÖ½œÙÆÈšòÇÜžÍÉß™ÉÕç‚ØÙƀɻΒÙÆÕ¿Ê͇Ԭق¶àÞ›º³Ò~ÄμŠèÔÎŒ¬ÖàzºòÓ¬—¶ÞŒ²ÖØŠ±ÛÞ‰¦Íåu°Úħ}áÊÆ„ßÛ²’àį¥ëÜÅyöÎÀ‰äÍÑâèªßÙÌwñÚÃy뾘ŠÝµºmßÞÜt¿Ñ»bÝË¡…äÌÈrÑËÊzÛÓÎpÐÊËw§àÙ” ÞбŸëáy­²Ò²˜àÙ£ÙØ™„Ø¿‡“Ûä´nèÕ´dÖĺZüͧjØÚ´bâ׿ZÞΡÞÊÖi×ï¹oÓß¿’èÉ»oµß×sÏÍÒdÓÝÝfÊÐ×j©éÜk¢®æz³ÈÛ†•ÒÕšÊãŽÊÒq—³Õ¦€Ëϯ’Éü|½Î‚…ÄÑ·såêÄzÆ¿«_¯¿ùU£Î›HØÊÑK¡á¾4œñ´?ÅÛ±7¥ÄÃ3²ÖË>yÌÖ8“ÝÚH‹ÌÓEvŸ)ˆ±ËF’ÐéfpÇè{XàßwpÖ¹/OÌ­€IÊÛ©6Êå•@ºÓÉ2£»Ê3±Û¤9ÁÒa:¬Ê·^¤Ý®G±µ<€ß´PsзDO¦²/ZÁ~CA¬§/:™½`>²ÃSnÜÇr]°ÆcI¤´OSË°W^ËíŽF›ðvB¥Å`2¥ãV_Ùݤ3çÔž>ÅÏxX×À,Ëï‡7ÆÜš5ÖÜÏBÄå㈖á±1½à¹Iµâ¬1¿é®V½º´*¬Í·¹Ôß;ŽÜË/ÔÛÒ ¥Ùš­È¹EiÛÆBUëäh‰ç¸,eÝÇ04Êç-…õÂ4…ÆÕs(ËßZ@¢ó%[Ý×[8’¼ATÒu+¯Ú…À˨‘ç| éh0yÜP(bç‡S5±jé¤NsÕƒ#*ã¶>UÁ¶’Ü¢9_µµ%C¬¸K¿°>-º±TÆ»3xáÐ/DÂÉ/@ÁÁ-|ÓÝISÛ»)LÝÊ?µè²5ˆÙ0ÅÓ…:ãã˜lºÉ§XñËžWÉÃV#Øͺ9œèÓƒ¥îçrÜܪHÇÜä¨Ðê÷œÀîî¬ßáìÝäçÖï¿ÛìíÙÛôîË‘êïí½öãëÅððÝ•óéæ„êÝÜnÙêÍR¾ÝÖ ãî€ê݃µîçb™ÕÈœvàÐweÕ×›yì˵;ÆÏÇLÇÙÜUâæ¥N×ߨW¸èÜg¯çÍSÑÊ­>¤áÓ]©Û¹\µäÆ:¢Ï䘓ÝÄ;«âÙR±ôºNuùÍ}¨Øï›~ôß|™çàeäî‹€áØhŠæç zìØÃBÅã«dÞç¦háݲZêÖËZÎáÔf×Û²Zßìð\ÎèÎ`ØàÖJ¾Ûž>×ÙäcÄÚÚa¯ÝÒUËäÂ`µèÛ>¶ÚÛb´àÈRµÌèž}ØÓskå؉–Ýèioß㊑Üç«€ÏÙ˜SÖиcÇ؃FìÝ–KðÓ aßà¦PÛÛÄMÙæÑ]áíâ\ÆåµKÛåÑ×å QðÚÒs©é×U©áÓRÞê°[³àÚe–ð½7Žååz”ÐíºrõÜ|å݇‹éÊ(|¼Ñ‰`àáŒgÜè^SÓÒqVàäŽZÛí¡"ÀÔx6Îå’QÙÉð~¹æÂ}ÆÌÝ—ÎÁ¨h»Ç¶IªÀÞÌÆ®8ÈÊQººÑG˜Ù¸<…ɶÌÇËc‰½³qÖÁ““Ý·P?¸À‚MÍД8Ù¾–]Õ±™Oø¯<¸¼ºB;§E¦ÊÅIu¶µNg·¸-]± hdÑÓpX«¡>KŸ®<1·­I;²gD¤ºp\«½ed·Ñ†R¦Ä}gˆ«…0«ÝulkÂŒ{¿¤I}Øb˜Î™Uk´¦\xª¢S£Ë{L º—…ƯÜðʾ®é¯û¦Õ¹©O·±ï¦Ø¢Œ|Ò©µ_•¦¯R¼©ºRøÉ~Ë©ÂbÒÃíæÚÁÊ^’»³`n´Ày–Á¯ÏÅ¿®h‘³qH˜¯¹°Ì±„šeŒœª…ou’SŠ‹¸Œ|²nxzÄ©r‘¨¶lƒ· tÍ´Ìna«„u` \}‚¥|x]ªkxnŒ“Rc¦œ`>£’]»Ÿe¾Èy•¥¡‡•”cªÂ‡p²‹—™´ÆŠv†’xyzÀ§Û¡ªŒw£§Çx™²†s’ ””—¨š y¡“˼‡¶ªßŽ»¹À¯ŽÄßÚÈ€|¡—¤{±èÖ׌ÂØÞ˺ßùÈßÆÛœäÉÛâñÓáÄïûûÝûÜÙÜíÜÌñàìùÛõïçíìîî÷ÈüåûßûÇóÒìéîèîÐèèçãþ¡éÓ׌ç×Þ¹¶Øî¹ÀÔØ°ÁË抺à̦“¦Î¢¡ÒΠ¾Ñ¼yÿꥅüÓÓ×ƨƒ×·Ë¼³å‰¡Æ×nÚɈ¸©Î‰™¹ÉÍ¿Í}¢ÖÚ¢ªÏÙ²×ÜsËäÁºçÔ²¿ØŸœÐʈ¡Úá} ¹Å¡ÃÞ¥­àÌ™‚éÇÙwÅϱ{þÕ°ŽÜÔÓpôѽlîÕÌtÛçÓräÏÛnßÖ¾rÐÅäzËɤqëÐæ‹çØÐl½ßÑrл¹~ÎÔÖhÏÉÐs¿ÓÄcÂÔ둆õݬ”Êߢ¡Õè¢æË’ZÌßœ€ÔÎ…näÎßsÛݱoØеwåÙzêå¶fã×ÂlжÉwíÖÈkÎîÂ_æÖ¼kËÚ·lïØÄv¯äÔdµßÔg½Î½m¿ìÕ_Ÿý»i”Ï懫ÆѨzÏï†wÂî{¸ãX›¤·§wÈÇ‹~¹½‡sµÇŽmÑΚ\®®·[ÅÂ¥W¸Üˆ@ÇåF©ÛÐDŽ¿È4¾ß†5¦ÖÁ8£áµ0°Îì2£ã·<¥ßÓAÜÑK…Åç6¶ÕÚJqÚÅ]xÏãeVÒãMMÃêLËà~>ÌÜ›\Ú¶¨5¨Ö»@­Ø³.¸Â~*Í¿³B”Ó¼DXºÃ0C´i8®»K!ª¤C7¤¤9*ÏÑ\L©ÀVF¥±.4ų48ÅÎ[C¾¶;J¤ª`-ºÓq`ß’@Š¤v:ªÇPW§Ø‚.WÝ‚F¥ÜŒ$¾¾c@»âª"¼ÆŒ"Âߊ4äØÀ1¾åÆÁܺ¶Ïd)ÊÊ¡%žÚ«&³è©¶ÖÃ.©Þ­)©òä§ßâ±´àÉILóÁ@Hï؂ù5»Îc:ÞÌWˆÇË;6È­(O‘»I”µBÁÝ6[ãÎQ9ÚÊ+¶ÇyC¹l<ÐνM~Ñy[Úy}äc%M¦¶<-à±!µÓ€2%Ü}41ß’W˜Ó·¯Ê¥;Ç×:TË´?:ºÃ¸Öào[ÐÄ0UÊØÇÉ.IÙÖ¡-ÌÍ54ÀÀaÛÊG-ºæmhÙÕ}'ÙÜIrÔµdmÂß|2ÑÖ‚L}ñÙ¢ðåÞm®æß°ÿçÏYÆæâŠëùÑñäáÎïæå‘žèú·êïÒÍÝïÎãåö·—ñää²ëôÓpïîßÐíìÒ‰ÝÿÞµñèÎZÖØà‘zÛÔý¿LÄ×ʉ}ÏÐErãÝ•SÝÔVUÂæÀXààÄMêȺPÒÕ“LÞʵQ»ß¸IÒÙ¹O¹Õ¶7¾å·5´ÑÆP»Þ½SžÜÍV™×ÂQœÛÓVÁì´e–ãÊ5…àÝqÞè]–Ùækr××rŒÛ÷™‹ÔÞµ[ÞΊUÙÔÃhèÞ¯uýÔÉuÖà·RÝê¥fÝ×—R¿ÞÏbÞÛµMòÐvgàÔämÖâÕg¿ØÒyÎÚRã×æS¿âÁRÉÖ²EÏæ¾T“ËáÏßÇa–ËÍd ëÚÌ{ßæŒbÒà\BòÈ™ZäÖîoæädìÕŠ†ÜЗQÕë³JËÝãRçÜ©kÏìÙcÌôÇdÈä³PÚܸ}¢ÓÖa»ÙÛVÈÛ»bÛÎöœåö‹‰õË îÁašÕä;‡Êâ9ˆçÒ$˜å¼K<ËÔ}7´Êƒ2ÆÇ5Iǽž_ÎÑŽÛæ;éâªpÄΰpÕØ͇®æ“9ÂÊâuȾqiÊÉÔƒ¾ÐÉK¬ÅÏlÂÈÕŠ‰ÐޡγRÐÂÅ;дÑg›Å¹\žÂÖr°ÄÈ[ŒÍÕ±ˆÞ­‹hÎÙ|ZÞ¸»kɲ¶2Ò½­D°È™GºÆÂD¿¬¥P}±£:[ןYE¼¬DaÌ™R]º¢3W«Æ^[˜³WVŸ²QW£¢ol°‡UŠ´|Z­²^h‰¯³S¤½˜o{ÁŒZ†µw[¨›•>‡»¦E^³˜hª©ÚÁÔ¯ˆdҶƯ˻ݡÊÂÓÆ·ê·Ú°¬rž•˜Ê¯Çg‹¶´‘Ë­©MʸԡüѨÒÜæ¦à«œ|W¬Õ‰m˜Óּίm¢¼§o„¾ÁkǤԗu¤aI‹Cn‹}k„¥xǾ¶…mo¦ˆÒ£´kª¯„bo¥ßÊȧ¯zC[7n|ªNRF›pEš xoi¨ÉhH‰`s5Œˆmž™Àl`®µ¨«§Ÿs~ž‹}|¡}z¡²Ð¦’’¡¸¶±¬‰€™¶Ëͳ—sššŽŠ œ§×¸²’¯ ²…Æ‘ÃײŸ‹u€¥°q³ŸØÀ¸¢ßåÐíÐÕ¶ºÄŬíÓàÕÚäÌÖÈìíèÔ×ïýÛÌÚÕØàÓçíÑíâáØÚõééØÎôïìÌóÖùØüìÚãøôíÊü×õÌí¹Ø„ãÃæ±®ÊηºÖЭ²ÝÀnÎ×Ò’Œ˜¶˜˜÷¹£äÊšŒáЮ}æǽmÝËÌ’æŶvéÂÝ|ÌËÃ|ã̼„½ÂÑ…ÈÙÂu¼°ÖhÒ½²ˆªÑÇl¨ÏÛšÃÏÓxÂ×Ç„—èÚ‰¤³â“«Õܘß╪ñˆ±ÌÌ•¬ÆƪpåÍ°†äÊÞŒìÚŽ©ÞÜ®€èÉ£oâí¤€Úâ«sÐã¸ZÖÜ­fáѪqáÖÅ‚Ê̽kÉÑàu½ÏÀ|ãØÕnÃÙÀa¿ÙÀjÊ×Óˆ ÕÚ±~Þèf›ÐÊ\—÷é ˆÜϘ„ÎÎljÓΛN¹Åª`äáŠQüÍpƒâÖ”féǹiØÙÓbÜñ’câÛÁZÚÖÖc¸Þ¼QáÏ´\¢íÅi¿Þçf³Ö½FÅÍÛwŽÓÜ|­Áåk‰Âè‚zëÝ_xÐäƒyÂïn„›Ø¤…¼Á¸R¶Ó¡qÑÃusÆ×µP¯î³[·é´Q¯ÁÖNÎÓš[¼Çå^”¸ÃN¹ÅÑ`±½‚2ÌÚ¸_—ÞºOŠÎÒ@­Ñ¿4ƒÄÊ?tâÄ/ιM‘â×UPÆÃubÒÐQ^Ѳ…n´Ð xÙÀ†tÁ¾pAÀ¶5ºÊ†<·¶¢<­¿‚4·ÈÄ@©·3‹Åª8‚ɳMA¬LZ¸‰16¯ŠUX©Æ>D‘’7J¦ÀKKƲWY«µdS©ÜTFµª?L­ÓŒ[̪‰Sš©bEµÀLaÀ×y"¿œv#•çP7ê«‚¹Úª'ÕÝ­4Ä×È'ÌâÏE—áåJ¬àžDÀÜ‹>ÀÑ•<¦Ì¦!ÁØ™A”ϯD™å²1˜ÚË_³æ–‰ß¤]ƒâÈ¥€ÍÈl†à®>O¶ÍF}κB'ÅlKEÅÄ=,ÒÖk/°ÀSIèÍV.ˆÝv;æʉY¹ØZ:‰Ù«;µ½r(G¬'@ÈD7g¹š5¸ÑŒ1=»™,iÅS2QלFFÔ¸DÇZSÒ±DKºÇ`‚ϯCƒà‘^´Á̆ÍÜ{s¼¶%ZÔà@sÌÑ*\ãÂ3XßÌ3’ѹREãÛm>×ñОÖÍW*¹Ò†<ÏÒ?ÌÜ“¡ìÙÌh¦âÓj»éâJ¤ÚÍkÏïì±Ñå÷”ºäâ¹ùèªÁõõµéðŒ˜îåÁãøîïÓçíåœñïÕÒùæñ½àêØ€×ðÖM¾ãç[µëײ³ëߣ®ÔÜZ¹äÝŠŸÀº?uÙã—äΛìÝsI×ÕÌeÜï¼PëÛXØÚÛm»òÔ_±íÝ_ÆÒ­5žì·Q·îËWÉÙÝd©àÁP}ßÂLžèË^®ê¸J®ÙÖ’ƒÞå`sÝÜ‘§ãØ‹{ØÆM‚ßÙo‚ðÒpŒÚâ¡RÚņpïåLJÚá„VØ׺LÑæÒ‚ÜⶀéÔÇ^ÐáÁw¹ê²`Êè¥nÇçÍRÁéÙM¢àáÙÓßU±×Ü]®ÙÛT°îÆM±ØÛ›Öû„†ïÓ~”åäwØû”RÒÉb^ÆÒ‰•ÅÚËRØçªl×Û³{öð¬ÞíçjáÙÐg½âÚ\ßé§aÖÚíiÔÔêšÝå¦[ÀØâì[¡ïÑRêë§M¬âÆzŸçÌS¡ëÙP…æןnìÆz|ÕÚJŠÕÈ6oâÒƒ[ÑáuMØáKØß|aÖêfmÐП_ñÏP:ØÜ•d×Ü›F¯Õµ#Ãס4µÐu3¿ÉÒf¯â²N«ß´C¶ÞÔq¼ÊÂ7‹¹ÂRÁÕÉ2·Êµ@£Èémyݼ‰hд€ZÎËVÞÍv@ÛÕuX Ã“2ž¹¯JwÒ¹2Ǩ˜7¸Â@¥ÌÃ8‡ÁÓEOÁ¸\9°·Z=¬­I6¥—Ká3PœÆK&šÒ_W¡œQ\ËÔlI¤Ë{R•¼hI¬ÄM„Õ´M|¼Xy²wQ‘¤¤3i¬¤:—»·UŒÅR>—²®UÛÈÀ˜Ùª‘…乪Ÿ½¼ÌZÐÒم˹šṶI‰´±SÀ»¥OQÁ½B‰±±lº¸Ì³¾³’M»º³p@ŒÎĮ龎l³½[Hž¢wž«¶q^®Ÿe>µ°|sŽ¿wd”˜´£uj•ÃŽmyÖqµ¿Žkv¶‚m”š¾`L8|2!uz—LX·¿c'žsk¦–jH£´}X–Êd‚±…ui˜‹‚¨»˜p£­Ç‡§®«fP¹vªÆÖ~¨žs|Š¶É¿´¥x~tË¢µÀ¶ŸØ±µ‚–礗ÇöªÍµ‡Š±°ã¸Ã‰ ©Ù±Ï±ÔÚç¢Í ÂÇýÉê¸Î—´§Å·óÇÌ×ýÇðÌóÓë»òØÉåëäÎá¾ËòèéÿçÛèåÕéâðÝ÷ÊüæèÛìæèÌòìñÇú¸Ê¦ë»åÎÔÜìÞêÙÊåÈÙ–ØÄÕ¥³ÑÓŽ°ÂΔ–¤¶À¢Ë®”޷ˆéÏÔä˳zßÔùš»¹»ŠÉÁß°»¿x¹ÇÀ‰¼¿ß‡¿µØ€²½Ê¡³ÁÅÇÎÛœÈǺy¾ØЯž¹Ü šÁࢨÕÍ™¦Éµ{›Üά¹ÝÍ™«Þá sñ㢊彽—åÚ–uëÑˇÚÛÈ~ÜѪ{ÓØßtÏÆ­‚çÒ­ˆÅǦqÝÑÐÒÌÊq¶ØÉ”×­Û}²¿ÈuÔÛ×yÔÙÈ€ÐÑÑ …ÕΛÚÙ™Žäˈ—Æϱ—ÛËŽÍÈ”›ÚͽrâÇ zçضŽæϹƒâãÛtêÛÔeÙÝÑ^ïÈ’VÐÈâvΩ½sÎá¬sÐÒâ¦ÜÔ`ŽÄ×\Ü׶r¬ÑÖi–»¸|›»ì´¾Ì‡ƒÄ·„µ»ƒ ØÔoˆÛ㪎³Á±[è²q«Ïzv°ãŽ|³È­~Á¡¡‡ÍÜ`ÐÝ¿d•ÇàN»ÛµXÁà¦OµÛÄE¬ÉÅI™ÚÙM¯ÐÉNÐÑOªÞß;­ÒÛM·ÈÚAhßåYRÚÝŠe¶¼€xµ¦a¬Í¤UÄ̇J§Ç±C ÎŒV›¹±NÁ«§fʼ§Eœ¹¦BŸ®žKp¢§U1Ö¨\h§EP»›FN³ŒET¢ÉKL‰´HI«ž.?¹ÃsT”°TP«»XI»Ö}R°‘GȇQ…Â[?ÁÅ9~¿ƒaÆÄ•J´­…lÊÈ°8¹âB¶ã‚GÏÀ¡6ŸÉÜ6¡ô±#ÍϘG¼¸Æ@¢×­'—¿®?œÉÂH¦,£È¹4¤å£-²×Õ?I¾ábfïØj[¿®N0¨àFrÑßUVá¬>6¨Á4,†Ë[;ƒ·jKÆÇUuÃÃYH¡ó:ÚÙˆ3¨Ôw"{Ï„49›%5wŽ-0¸Ó—;TÓˆWAÝ°9AÍ)F½…-d£°«²¥1TϧAˆÍË@}Ï­)|ȲfuÛ¡*{Ùà >¸³,DÚÍ€g×ÃNT«¹ExØÂ;žæÞBF¾ã²AÒÛ²5ÛÛ9Fì̾uÈƉS¿ô‰BÜçÐo¿ØÛòùÐJµÛºL¾ï˘Õñ»éó¦Òæúöج˜íêž¾öÞÉî÷íθåøó¶ëååºøìÛÞÝéìºðéÙA–Öæ^Æç畆ïᳫÞë^‘öâhÂÝÒ}|ÛÍQkÔÚQCãÛmJÛì²OÝóÍ<Îá±TáâÀQÓÙÚ4ŸâÈ9Ëá@µæÅ?®è©#±Ò´;ÁÞÅGÙÈ=•Ü¿?§ÞÃA£ÞÏ^åÕFèâN—×ÕvŒÒÞm}ßÐlmå×›¥æÃOÃÙ½˜ãÔÇNßê¡|ÒÞ©KËÞ¼ZÐÝ¢\Ãϧi¼ÛÆ`Ïß«FÕæ…,ØåáR½ðÀH¯âø‹¾Ý¶DÆܾM¢ßãc¯íÔ\ÁçèuoÐêÍqààRwÐÝR~äÊeRÆìhVáÔyaØί\ÈÝš5ÛܲKÙßrZÜÞÉnÚØ¿YÈÑâRÜÚ½I¹ÞÝVÂÛÊDÀ×ÎTÒѵN™×Úl«ÖÁ1´åÑOÖÞµB—ÖçUˆÛá@—èÒK|ÍòI_æÛP>ñÛp‡áæpjÇñ‡O¹á ØÐ86Óâs]áä€&ÐÙ}4ÎÞ°fÄОK¾×Ò[žËÕe¿ê­ƒÒÕ`ÇÏÏ}¢ÝÍuºæÏ€°ËÊf”ÖÞv¸ÒÔœ·Ê©DÁÈÐN~̽cœÞÅwl¬ÔW@ÔÜ”‰×Ý‘_и‚3Õž5pÆ©C¾À¬F½Ò—OÌË·(mÄÌEaÔ¼GOǼPo¨?C¬’AMÖ¥>.¿ÑZK“ÎQY™aÐívS±·0D½æ~NÍÄ)iâÑ;œêÕ|ŠÈðµkÈå©=áã°;Ðä“MÖàÎ;ËæÂHÉ×Þh¾çámÇÛáw´ëìvÃçðÎçõíÎØùëîïçõ°”æÜóêâò©ÙûåµÆåèÛ»ã÷úÛôçêÆéíó¿äíÌb¹ãæj°çØc™áìÁ¡çá„šÛïY±âÎe‘æÍ^Ý×pìê·‚àâxEÜа^ëòÆaâë¹AÆãÕ`™æÇS§Ø³>Äã¿C¡æ±P·×¼]°èÄZ©Þßy’æÊT¢àÀV­òÇS¦ßáw•òâ‹yÝÄu–ßäVç̘†àÕ²|ê×\}ÅÔ»LÛí­jßÔ™SÜáÆPÉØÖHåäÛ^ÖÛÆ`åÚÔW»á¾JÍãŠZØøÂ\ÕíçX¼çÒvÆâÙE´Ü³Y¾ÖÔ]ºíñh¹åècªçí´nÌâªtáÖ‚—ßâ‰lÔðkgÖÙ‘YÜÔÂ{ÀêÜOÄݵ+Úð¥aåì½PìØ·V×åáU³Ï½CíÕ»8À×ÜPâßµU°Ýž?¸ã剒äÏS©ä¼7¸Ý×y¨Ýä_ãÄ6äê}ò̈fú횎éÒ_‰ÒÏ"e×Çœ>ÔÊ .ËæSäÞR%ßå|'äï)ÖñSãìv9Éå²X©åÊ]«Ð»dÅâ¢{ÒÙ©P¬Ø¬+¤äÈ:¼ÜºNŠÊš7»ÍÍJ®×Ë@¶ÙÒ)±×ÏG_ìÅZXâ¶D@¼×‡CÚÐr[ãÂošÏè–/¯Ï¾(¶Îª4ز—'·Â*DÉÄ8jĸK>Ψ`3º¶F0¼½HFÊ¥/+ã£EH§ž)#°¨B[›¬JB²ÃPH¼·I,°¸bYªË‡UmÆšN]´’m•ÉyE›z3`Ñ¿ÙšŸ½¾“x¿Ñ§‡ÀƲŽçµB–½™WضªOÝ®À?ʸ§…ÌЪVÄÈÈd…¥­XU´ÆS¶º¸M¦°¾g”·¸qg¨¢i­ÓÏsC—xgVŽ­[`©¸~aŽÂma‰Ë˜pµyŒÉ¶}xØÈԱ㼠b ½ŸQeÁ_yÈxns±M´Ò«›je©“lqÀªP’¡ÁDy¥›™å»d[´´^FŠ£c„§Ì€ƒŸÄzµ«¾dn²½l…¨Àyd «ˆÆ¹­dh˜™•{©·}¬Ä½ÌÆ·Æ¿ÚàÓÂäÕõ¼Ö²æ£ÍºÂ¨öÝغâ§ÙÔ擵 ÚªÖÕâÏõÛöÓåÝõÇöàøÜóÌàçøãèñöÀÎóæçÝäüíúÖôÕìâÝääíß÷êìïçÉúàêëïàêËÛ±èÆæÆÒ³ãÐÞàÕìÓÌÔ¾ÃáÛ¡ÚÑö­©èÕ¥§Ð¸‡}¦ÎϬÐóšßÁÆ—ï½Ó‹¯Àì¤ðÐß¡ÔÆ–áËʆØÒ̓Å˽ÌÊÖŸÉÓÊÂæØ£³Éê«­ÕÑšÊÆמ·ÎÜ“·â׺¨èÕœ²ÏÕ±Ÿî¿¦´ÖÔÙ·àØ’µßÞLJàÎÀâÛ·˜ÛÕÙpÛÎä„íÝç€øÞÑ‚ÎÀæÎÕÓŠßа³åÖã²ÔÏé€ÊÒÉ“ÉÅÖ‰àÒÀyůÀÍÕçŠÚÀêžÁÞë°™èÆÑ©ÜØ­óߧ®ÙؤœæÕ©|溾“×ÛØÛÉÀ‡íÓ¥‚èÆ‘{òÍÅlÞâÔoÇÛ·móÆÀ|ƼÙeíâÁiÈë´nÚ×¼­ÜÂ{ÄÞØxÕÛì­ÂÒÝœµßç‘Š¬öl¦ÕÍ’ºÒ™—ÙÍ}°³å‹–ËÀ­kÂì‰Ô㘧«µm½¶º~º³½¹°ÂˆªÃ¥W¡È­RµêäT¬©±YžÔ¢FŽ–´Z°Ú¶Uò×e­Ù·`™ÂæM–ÁÙXÒÎ>¶ÞßitÆÇlpÆÓbƒÂÜm„ËÉ™]¸Ê£RÉÍ£MͲ¨B«¯œaº¤´6ÈÃ0¸°‹C“®‡hœ¯¤4g³›X„Ì«U3µ«CA †W?Ø‹]H•½FU¦¡d]ÄFc•²eeÌ­4Q·h[²»{]¢¸˜WyÒvQ–·jIµÓaT‚¸­B‡×©VØуAÏå°)¿ÍVËÎr=ÊÌ£(ÆDZ0²Ó¶<«³ˆ5àÔº+À±¬0¸Á Áê¤2ÀËÔm‹¾¾A_ÊŸ=ϽÐ=‰Ñ¿-UÓØCnßÌD’Ä·eÃvMQÁ°IʦG.™ÂR[²±scÇÍNK×êbDåà°=ɹŽ*Çˈ?¢é‹2ŸÓz3`¨`@²¨„.‡Ø¿I¢åÄ"¼Ï¢(¼Ú¦7…Ô©)é£>AÓ‘\Õâáë´Còæ†BâØ¿KËíáZ­çë`ÃÜÐL¼ÜÐiµßÖ_¡êÜT§îÎq„ßÛ=åÊ\´ÝÀG¸òÓ?§Ùê’ãë”ÕÚRtåã¡›ÑØxxÚéÙÒ‹NÅìÖMÜÖ¹cÐê¦QÝݵHÚïµ8Û÷ËPÓìâKªø¼@ËÜå|Öò´GáÞÏ>Æè½tÇÖågÄç©LÔ×Ç>®óÉI²äÏ^ÖÛ×nÑÙ¨aäð¥~æÿ‰•âázYåÛyPÎαYÎã…Báå‹/ÓìÕcÔäž„äè©,ÌëÅhÉä”BÉç«]Æל*ÍÝÂJÄÞÌ@Äëå[wÜÍZ¦íø]µÞäSÀÛÊSŸæÂ,ÚÙ7‡åæ†qÍÖ4lìØ’“Üâ/‡ÝÔDNÉí`FÂæ¹cëÞ*1Ù׊1ÊÞk&Ïøƒ&Þá“pÚÏe;ÔÎéˆÅ×Ñ9ÂΗSÂÈ 3¶äß ŸâÓq®îɈµÒØS™ØÇH£ÞÀQºÁØj¾åÂw[ê½j—ÒÙT’dzrvÝËYàʃTáÌ`aÉ϶&Çȳ(ÊËœYÔÈ“!…±Ë3hÅÕ$Q¹¯&]ÉÀOE¼¯EP§»F;О:8à`0“Ñp_¸¯OY¦ÑG>–¿q<¨ÞXM¤½oK¦ß°;Ê¢QÂÏzf´ÒV[q½’eಧS˜È”Aླ7Ͳ¥Aʺ–”ÔÅ•¿Ó¼dË®ÔD˽¿Y¤´è¥ßǶJ¼Ã¸Tˆ´Äa¨ÃÊqªÏÁ;…Ê¡miƹQ¿Àδœ°¬l¿º¼s[ƉtD°…^=º¸sb³¥\b£¡__‚»“j•ºŸÈÁ‰¶Ø³é±Æ±¤]£rÔ¤¿dr¼«vi³uKX¿¤`j³Ê»ÄÀ‹a³½P\‚´­š]ÄŸ¿€l™…hh´Ê™Äª¼x±Âª½²‡v¥È†fžÄy”Ë~e•ÈÁ±™§—˸«¢‰”¤Ÿ¼Å©éÁÕáìÏÛÀÞ˜ßpÏ“åÔèáú¦ïßäÊÅØãÅàÚóÌäØóûàèöÕé×äñçßéñðÛüÜéíêöëõÜîòßíïïÛðïðêãôïøÛüéðÞñÙëÚæÍâÖëÆîÕýÎå¼­èÈäàÔÛÇÃÎÚ ÜÏÓ£¦ÙÍ¢µé¹·›ãǼ›äÌÄŽñ¼¾’ãÓ¼ð¾ÈŠÜÐáÍÐêœÛÅÛ•âÊÝ¡Õ½ÚŠ¼ÓÛ×ÆϵœÎÝ™³Ìá’¾ÑØâÃè­­Ò즧ºÇÂÁÇÍ›»ÞÌ¥¸ÇÒ‘¦äÒ™±ÙÄ«–çÑø‘ãÊá›ØÝװ󻯃ÕÛ½•ëÎÚ™ãÙÜ•À׿uÍËÒéÙâ‘æÞÙ—ÔÉ¿šÕ×Ô„êÜÒ–ÒÕÃ{×ÂêÙßЂÔÔí£¢ðÕ ›çí© ÅÌ¢µØÕš÷ݨ‰ðÜ°”ìÖ»•êʹ‰èÆÍ‚ó΋—ìÕ¹fÞäÀ{ÒÔ²œÒ姑ã䵌â˼…×Ó×mçáÐ}ŸÎÖmÌåÝ|ÅÐØ|âÎÕt¦×Üo¥ë㘋ßÊxŽÊÙ†xÎ䆞çà‚¨éÝœzí龆éÔ°v¶Ú¡mÐÀ¸j¸´¼x«×¬µÅÉP±ÏWãÖÎg¸ãÀa±Ô½VóÐ~cÍËÛnœÂÏEy ×P—±ÁPx¼ö\‹¿Ä:®Û«C‚ÌÓyqßÕemÈÂvv·Ë€dàÕxC¹Ô£?ÀÆ[T¼µ²N¾¿•I·{>Ö³c`®Å™=Í9‹Ç¨W¾Ç­H|­SQº¦F-¿‚c3»£fB~Û[K±ÄN4ĘST›¸a8«Ìtn¯°g^±Ö8¼¼‰HÐÐiU¶±6V£Ø˜PÕÒ¢9ËÉcÖɆ!­Éž:Ôä“RÏÍx>çÁ™*¸Ô !˺Ÿ-×ܱ:ªÏµ>Íà¸I´Æ­5³ãÁ<Ý”E¨Û³/¨¶œ/ÌâÉ'“¹Í=wñçIJÔyC)£âSHãäU(À—E#»­45ª¶dKÕ­BhÒÑJpùâ¶/óÖ‹.º¯]IÍ×’7†×‚%\ØA¹ßs?’Ú¡OeÅ $TÏ#v¯&6¯éœ5­Øº1OѬ%FǦ3ز2r¿›Q“Öœ%pƲOH§Ð0jȽ7O¾ÏarÙÖ:GÙÂ:¤öÅ=UèéP;àè¹LÍð¯ö׫<éÜÉ)Àà¾ÛåÑZÈàÝšèßpÎòæfÀüíææúè}Ýëí¹çìç¹æîí½»ÝèÒØðïÄãÞ÷ÓãíùÔÊåöèÕôåëÒóìíêÿÙyÑéÚxØÙÎfÍàÞ›mêì—ÛÞXµîÃQ—Ùèn{ïÚwZØõ{aÛê½UÑéØsÐó¿RÝì‡@ÝÔØVÄòÉ`¾éÎa×ô¬T¦Ûæ[¹Øê^«æÎWŒââ}ëÐU¨Þ¼K¾óÜr´Ïà<™ðçy—ê×q°òߣKìÝgváåž~øÛtÑïÅMáßÌFÞöËdäçÅLÆëÈBÎÍÆHçáÃAçÜÔxÙÜÎ3ÉóÚNáóÏMÂÙêS»ÞÙCÂìÌQÒîðS±íø_Áèâ\²Þ×ZÛäIíÙ¶büÛƒ}ßô‰‰ëà¥oêݧ\æÝ»VÛÙŸ+ÇÔåUéìÞqðà»háìªNàççB²ßªZÂé³_ÙáÍVàâã]ÑܾBÈÛên€ãÚn´ÛÚrÔâ¸F‰ÕóŸ­ÚâOìðƒ‡ÚÎva×àikæÒ˜‚ÕÁ‰‰ÔÝ“WÍé›RØáWeÙÍWBÔÆi:ÎÜkÒéa6Ð×vmÞ×Æp¯òÁYÇѧF¸È¨lÕÈÊ€³×ÅQÀ»ÏUÁÆ¥0âÎr¹Ó¸®ÞÎS¿Î¼;«×ØXž×¼nU×ÀGqÕ¼‹V½Ï‚k×ÍŠ.¬Ô}.ŒÖÅodÀ¬@¢É†6ˆÑµ5Q¸Õ<-ËÃBsÀÓ>+¾×^X¸£dDÁ•I)ß’DM®Ã57‘±JX½œkQ«ËxU§±Ngª_h´É‹ci¦›Z‡Ã‘?ÃÑ€@ˆÁŽPeÑšXšÙ¹A”Ïp5«ÌJÕÁIÖÈh¹Ø JÁÁFŠÄ¬lÕ¸–¥Û¼ÁkзƇÀÚ¯I¤Ä­X¦ºÍfhѶkm¾¹k³½Ô¹Ð±ÌPNªÅŸÊÁÊe –˜d–¼¤yQ—¦_GÄŒ_M©pS£kŸ¹¼¸Ê«ˆË¶Í ×¦£Ly¦‘we¤’p—?o€Á…u|¾‘cV ‹oY…¼aAÄ›[L­Ãme½Âf’¯²|¾­œJ‰­¸Šˆ¢©v†–“p–‡¢r†’<µ±Î®—– evœžk€¥ž–´á®Ü¹­˜¥Ö¡¾°å ó³¶©ÃÏ»ªì®¿³‡±ÎçèÂÙ ïÙæËÌÑùÜÿ¾îÅÕÕððîÉèÒöÇñÉòÊÌÏðÔÅíìïÒèýÌÝìÿ®ïìöåâìñõæïÙòàì×öìøßìÝàÓäÍîÞóÓèËÛÃü ãäÎÐÁêžÃÁà˜©ÒÒž²ÝÁ±¨ãß³¯âÕíŸãÙäËòÉà›êÙ¤’àÕá“ÙâÓ’ÝÔÉ‚îÄ·ˆ¨¥ç¶¦ËÔÛã¨ÎØܼ¹Ú×”ÄÕô˜ÅÆÙ¯Ôè‹ÌÅʤ²ÚÏÁÑÖÝ£ßá©æÓº»âÚ· áÚîšâÌæƒæÚלãÞÔ†îäÚ”æÃÄ–ðÚÕòÍÓ¯ÞÖÃÐâóŒíÛã”äÕé–ßÙÖˆÝÙÖòÉã}ÉÐÒˆÖèê•ÚÐ׆¹ÊÔ•ßÝÂœÖÌ‚ ÐÛ‘æܦ’áﲑÜÞæ‰çì |îßèççÖçãÁ€²ÊªmóÉìàÓ¾ïߺqô×ÔeîÅÙ€ÝÛÏfßÏÆ©¤ÞσÍàÙ_§¼Æv©Óá–ŸÂÜxžÒÓ‹…ÇÚ—‚ðÊŒÐÇ‚¤ÒΚµß®uêá·„Óߧ—Ñø±vÇäŒéÒ®y­¿²xØéŒ\ËÛ¬E¢êÐWÏÑ»G¦Ñœ>ïܹ6¢Î¼=­·ÙN¦ãÉK–Ú¹OâÒK¤â¼A°ÖÖJjíòeP»¿igÇëL}Ç܇A©ÓwQÀ˜JµÜJ­³œn¤É 8ÁÐs_º­¶P‡ÊÉ>sÙ˜J{®TB¥‰=.ª D)»¤2*ÈžOI…ËSQ™´IFÇ°38¢»Y6±Ò:A±²mb£³R5K»MẽVÝÃfHÅÖ„SžæPjÃã /¸ÍFXÉÚÁ(Çצ7Óî†9ãÒ†L°³É1¯ñµ¹»‚-ÂìµÕ÷Áº»Ÿ0Í¿ÀÞÂ2oÚ¸7­Ü§2ÆÍãu¡Ù«_6ÜÔL†ÅÌ8GÓ·H.ÓÇaF¬«;»£89¢½<8¸³3båß:gÚö`.ÔÚq6ÊÐzI‘ªV2`än1D¹/2›¸tK³Í„Qî¡70·²'6íf<šÒÇMg×®"ã»FLÝ{6pÎá(AЧCšÌµN½è¼(xã½,€Íˇ޴0[ÓÂ3QßÃ<]ìÌ;¤Úè‘<¼à¹aëí½=íá4aÔìÂ=àØX8äë‰AÛò»G¤ìèŸØïâ9½þÕæìærÂþçŽÎåé‘Š÷Øvmñë¸]ï褾øî…Ìßíº¡èúÙ©üèéÌðáì×ãðå[ÝêìvÚáábêèænuêÜ–€ßØF¢í¬3¿Ü°b‚ÛÚ{uæÛ³„ìâ«dÓÔ¡VÐý¼5Þî—YöÖÌDßäÛY¬êâK¸Ø¾?ÄçË7¸ö·H¤õèOÁßÓ‚yç×9…éÑ:­ê­*Æææ|÷áZ‡çÌi…óõgäמ™âî‚qÞΗï×®VëàÄIãð¸XÑòœ{ßæÇV¸îÜSæâÒEÆûáWÛßãS¾ÿ©Eßô¬EÚì¹;ÓÎò9µññNÔìÝJ¯íåd¦öÈ\µõÝJ¹åÝb^×èDdÊøLvÂÐb’þÜ`[èÙVØÐÄfçÙQÕÛÕHØÔvSÔír‚Éál>ÇïÔLÙåÉMÏîÆPæäÎbÛáÐHÅóÓLÕíÙwšÇÝ_µáÂIª×¤:ÔÝÊV”Û±:‡ëñœãÇD}Óä¯oì¾nxô¶@’ݳ?GÐÔ×rçäVñÑLmÜØLÑÝ›PÎçƒ ÐçœRóï“iåÐÍ’ÁÔç˜ÌךkÊ¿Ì~ËÁáÆÁ¶4µßÁÅk±Ï½Š¼á»ËËâ’Á»ÚW‘ÕÄZNÀß[ªÊÕtsÉâwpÛنݿ„ŠÜÁ²0°»¹C¿›5¼Ð~FÖ¯«N®±;[Ä·A]²·PY£EV¿©6K‹B%‘ÁP\‚Ë]]±šRm¯™aJ–©MD˜¶dQ¯¨DMˆœ\•ÂiY»OU½»ikƒÃsL}Í€}´¸Ü¼ÄÀ¬¯½©¦[nȇad”u€e§JJ:µzº²Xn‘™¦‡k°Šefªhpk—’zŒ·”bР´ct¨Kg»Ç¦Ýºd‚¢¿{²ë¤ÑµÒÄd©ÍÏÐÖµÏ̵¿“™Ãټغ¾ÁÓ ²“ÊÅ«ê¹Ê¤ÙÐÛ¢ÄÌħܩ·«Ü¨±ÀÞ½ÐÑÂÔŠÌÌÜÁÙ®ñ˜ÏãøßíàÿÍÿÝôÍÉÖëßÙìïÎÅæÃçÉè¸å÷ÖÔØàãûñÒóéðÚÿÜïàìÔïâúÐîÖÜÍòÉù¸æóèÀΕ·ØÁ´ ÉÌÉÞ™ԬП¯ßÙ¡šÖº³™Ú»²›ðÓ¶›Þ¸Î—ÞÊ´—æÉÅ–ØÛÞ†ËÙ×~êܺ‹ÓÂæÊÝІÍÙØ‘êÊÛ¨²âψµÆÀ‘®ÆÌnɾã¤öÌš¨Îߢ©å܆ºê棢æè ”÷Õš²ÛÞÀ„íØ߀ëÒÔšåÔ âàè£íÖÖ„ÞÏ»©éãá“ÛÉЦɿÊ|îÙÀò±ª€ëÙäÕäénÙÌÏ|ËÎÍÑä¤fÆÈÏwÞÊÏŠ{ØÇ„šêß±ôÔœµÔÁžœÙ؃‚â矀õ׈ÜÙµ‚ñ碄áðŠšÜÊŸpÝÚÈtÐÒÕqèΩFæ̵rÕæÈjÚÜætêëÖ…¹ÎÖ_¼ßÉcÄØÕzëÒÍs¹ÚÅa¦Â¿¡{Éårê⪾딧ÓÕX­Ûð‡ßÈÆdãÄ¥‘àσ€§Ï¶ƒÙÙ¥uâźrÎÏÓSÓÖ—_ÖÕÅN«¶Â_»Û¨=¬÷©=ìÓ]¥åÏG¡ÑÂF®æãW’ÌË:}¯±+²­¼9€Ç¯dFÕënÛÆYf¹àX_¯Í„Y¾¼ˆ>§ÈuSÀ¼¹K¦·ˆ,¦Î@´Ë˜+º°ªTºµ¡<}×’N}Û™Nf¨§UR ­FS ˆA4 Ç;7³×aB¯ºW_¯š[[¯¼]T¿¬4BÐÀ3BÀËW4‘éxJ’ÒnJ¯¿cRÌÊI§Ñ;±ÂxJ­É{+¿É­#Åâ‘mÚÑ-¨¿œ²äªº÷™LÕÕ’-Äèº9Âë­*¯Ó¾5¶ÔÏ8›¿Ð!–ű?ÍÝ=ß½F~ÅÇ@[ܤOGÁ´@SÖÍA0Ä·iTÕ§'AÁÄQ9‹Ý^O£ãRhÉìrKÔäš'ÐÑ‚:yÜV$·½Y06£H6g؈ÒÐo4ÌËŸ!L¹=:Ì–)X¸GŽî­/ÂÐñiªïªÕÏ,^èÁ:€Û´4®ß¿Q ÛñRÚÏvxÞÉ;ÕÓ)3ÜëU€ÛÜL}ä×DžïΫìâÓBçä^HâÛÀIÚæÜ,ãÛÜcæÜ’?ÙæÕŒÆíó‹äçð¯×þßÐàìç¹åýûÙÎëø¹ÙïïlÚíž|áç­ÊÿçÐÎòåÚµêëå®æðÒªçìÖräßîdÍãÚ`ÊáÞ\ÅâÛ|eÚÞ››åÉp•ÝÆ6˜ÔëhvøãoOÚä|aÝô´CÚè¬Fçö¦hãÚ¦YßÐÞOÃæßc¤æÙZËáÆP¢ãÐJ¯íÖK¶íÌc¥Þê—“øß_êÄK¹ã·I›ÛÓ^†ëÕoŠæá‚šÝÔ“|äÕƒpìÑ¢mÛå^×ô¶EãæÈKïåªlâÙªhêãÏTíÕàAÛäÀFèÝêFäèæDÁàÇGÞîÁ2ÌáøHÝéðbµæ݆Þæã`µ×»W´ñð:Ëðð^©æמlòê£tæ㈈ÔòœàÙ¨GÙÓ›6ÙÜ•fÅÕÄ/Öã¬NÓåœHèäÃeÚáßyÓݱGËÓÌRæâ»PÈìÃeÊßâVàèÄXÜÐÈ—‡ßêŠÅÖ¾BËôËd±àÐL¨Öíx‹ÙÎUåé½…ÎÐ[xú×¢’òÂJÒÔ_àÙ—JÊÖÔhXÃâŽpÅÒ¦^èñ€QãäœnØÒ³r°áÆ:Çʺb¸í…IÍå…BµÒº‰ÄÜùž—ßÉu½ÚØzuÅÍ1¦ÉÉÁÚ®(Y×·\å×qLƳ\‰ÎÃs>×Éy/Ø͇^×̆C·Ì¡=yÀ¬6¨Õ~MàŸNaº¿1mÀ·P<±P*ÎÀU[Å›E]Ʋ9AµŸS\˜¡m7–¬VV¿À\TŸÆmP£¥h,ªÕ^+Ž·~GpÒ—kl¸†HŸÀhX—¹“HnÁŠ(ZߤY‹¾‰8®Ò¡'׸bÛÕp{ÄËvJ·¹\ÉÌä®ÂÌ—¦Ê¹ò¨Ý·ï²Ðз^¸Ä¯Œ×ľE¹Ÿº`dÞ“fc·Ñ£š¯¸[­Ò§b]DzhU®Ôyt¶©y5§¾_J ŸNE–DZ{ T„­q²Ñ ›¸×¨‰m†¤c[„«•VO°saf«|orcµx^Ê°’GK·‘P£rZ‚©Ï}x´ÁN¾ÄÓ}i¯¡ZS‚®q|§³\^½Æ†ƒ½¾™ßȲ¨³›r¿©t«²Ÿ†ˆ¾§³½¬ÕÈ»˜‘¼•š¿è¦ô½Ì¿Òêó¸Þ±Ï£è¨á¤­¯é¨ëÝöÞôÎêæú×êùå¶ÞãàÅÓñå¼î仪ïêî·áÞÔÿòðáóóãñÔÑìÚâÐøÛûêñÒøõôÒúûõÒóÈÿËåÅÔÓçÀïÊÚÒÊ«žßã­ÎѤżؗ¼ßÂœ£Ð͵šæº¢ÏÇЃéɲ„çÀ¸—åÇÀ£ÖÅÞ‰ØåèŽÇÚÖ|êÅ×çÇÖËv×ÎÆ•ÇÜѪ¦ÆОÑÔä…ÃÈÇ}¹Õ¿±ÌÇ«½ÚѾØѳªÜÒ¦’ëÆDZÆã§áÚÝ’øÚÝ‚ùѼ¤èÔªîÉÕ‘ùÌåããÂŽçÊÛ„Ô¿é‰ÉÌÅgáÁµtâÒÕƒÆÞÛ†ÀÚãÃÔÔ䈾Õ؇ԹÞ{ÞÖæ~ÁàέŠíÖŸšðÞŽ«Òט¥äή۳”ƒá狉ÝÔ¸ræô™eëïÂkÿζ‘ïØò³ëÖÃjÒËÁjõæ¬äêàxÝØìuÝɬYëâÞ éßwªÇÔuÔÞ¾k»ÞÃlºÜÎ…œ¦Ö†¤àÔ®“×Øœq¦Ü—ŒìÒj†ÍÒ±‹ÞÒ»ŒÔÑ™–ÄÌ—{½Ø’s¶Ø¾q¶Ý±x°ã­nÚë¯Ož×ÇG±ô«Q¨Î›:åÃÀM­ç²NšÇåy˜å¯6‘Ü×u‘ÖÏF|û²E²ÜÎiLÃÚ_SÖøZ_ÞÜ9Z̲…)ÅÒ“WÕ¿š~ÒÄ,ªÀÍ5ÃÄÆ5¿×“C»Ú€@d²”G…ͧR2»”:e¿šM2Á’PB´GA»§cI§¿KU„¼cCºµJ4¼ØA=¼«hCŸ³:>ÏÄG!wÉ›3•Æ`K–¹<@®ÔY+ẪTŠ½ŒE°Ûm<Ÿ½¢1Ðܤ3½Û¥cÓ¸ª*ŒÇ½4ªÏâN¶àˆnÚæÀ-µÕÞ7¹Ë’!Èá»7¬àÊA¹Î«<‹Ì€I¢Ý¾0ŠÇÈ+|ÌÃ/då§GGζSMƹ1V»É>'ЭJ7–ÂP%ƒ¶<_½Ð)qæöoGÙД1yêy+ÀÔx5FÛ„/wéx8›¿i8Âߎ+Á¼ƒ#XȽ.»àŠ'^ǽ0:Ç”&¬½°$[Ñ”04ȬAwÑÎfiÖ¡1Fí·2‘×Ç:ÎØ'‹á¸.vÞÀFUÞÞ(Pïî@nàÕ`IÒÙ@<ßæÙƒâà­Âîל?ÖåÑZÆã|TéÞÙ¡íáãyšíå¿óáÚFÕåõp ñèl¹îÔxÖÜÿ‡­ëãÍÔõà»âäç‘·Þ罉øîäÃæñâºÿôãÐìß×IÉÙ×2¦ñÜ>½ðáf|ë磞òÝ“ÐçKŸõ׌\ëÏEcï×±çÚžZÞð½oÝè§LæצTäέ5ÈçÙh©äÙBÌò±5Ìßã[±î½9£ßÃA¾ÚÞgmèç]¥ðÅe¦Û·(²Úç”rþ¼YäÒ©}åÞB{ÖÞ§rÓÛ†oÿá•çä·;íçÚIßê±lìꦓÚåÜzáè×Fèá²cÐçÅLÔáÃ0ÝÚÓ[ÒÞ¦>Êã¡8Èû¹R¹ßâH¹þt_ÊàØd¯ßä;¹èÙRÛìæ‘yÞ×­†çܦæÙzŠåêyV×Õ›:ÙÚxVÈá½DÖøÊ€Üö®WÛë¥lßØÆTÄõ»LÇ×¼\Èã¯Våç -Õ׸2ÅìÞYÙçÄcÕÙ?›æÉG¶æÀUßãÞr«îƘ¢ÔÕG„Ý×ÒäŠzËóvyÊØŸnõäLØדRÙìŸQÈÞ‡‚ÒÚiK×ØdJÖÒuHÛÿ‡qÈѶTÌÚÖT¥á²RÉå´0ÙÍ´qÏÓÌx­Þ´7©ä»e¼ÌᘙÔË€´ÝÒs»ÓËmÀÄÅWzÚÐ^…ÔàIyIJtDÁÊoLßˈJËÎw-ÂÀÁ4µÄ·4½Ì­Ͷw8f›,b¾ž.V͸;\§²6>ËÆM6Ë®J*Ê»HRÓª,O£ÅC4ÁÅVe­§=/ËkW¡ËY:žÆmC´~V}Ðh€È[ÇaGaǨ7qÕ–9ŒÏšaÝË ZÛÀ›RÊÌoèÅ^oÈ´ÏS±¿­Nó½”OÑÈ•oÝǨ`ܹµ\»Å¼mßÄÂW¶ÄÄU\ijYǺ>ÎǯvGºÏ_e± Cf¹HD¢¸[FžÕqSÇ·@p™–HPzµIbœÂ†h˜Æz˜ÖžÇ´Ä´im°®e_uŸ:l^·xam°›L¶žwʤÁP@¶‹bg»´Niº‹|–¼ Pe¹Æ_m¦ŠhÆ»«}}®Àh¥³e€³sª™Î’ҠɲZ¢áÄÖ»Çsº¨ÄŠÏ°ÇÄÕľ×Á̳x·¶±àÀàÜÝ¿¼ÙËkÇ°ä¸çÛí°áÖìö»ÌæÏÅÒÔÖÝðã÷àÕëù÷ÖèôèÂé¾ùÙîåÿæìîöçâÑÍÜúÓðÉúÙöíßõðÿÖíüåÕ÷Ðñåíîå™ãÂԠ̹ҚèÈÞÚíÙÊÍÕÖÒÎĶݚÎÍƶŸäº¶¦Ö¾Â íÉ°˜í¥Î§àñƒöÙ®¦ÞÍÇ‘éÅæžÌÏì‘ÚÕËŒæ½Ù”ÌÏ¿ÌÒ€ÄÅä­²îá™»ÅÖ°ÊÐÕŽêÈ᪦Äܦ½éÙ¯±Å»´íDz—ìÒ™–èá ºààÚäÙë—äÉ©ŸõÖ½›íÔóˆìÛà¢×Õ­ŒÔÓáçÀêªäÊäyúÊŇæÙÓìÒå’ÔÃÜ}ÊÖÖµîÑÄ…ÏÆæÉâ܌ݺќŒÝͲšïÛ“ºÚÐ|­åÙ§‡êÏŸq÷Ù }⺶sêǬ…èܬé㚟ê鯃âÙÉqçÓÛ‹âß¡›âËÂ~ýɪ€ÜÒÍqóØ¿‚³ê±°ÅÏnÈêÂ^ÇÀò—©äÍ|²ßÒ¥äæ„œÜ锇çÑ©ðᥛéÝ‘áܱláÓ¾wÛ³šÜ϶~êÌšÒͱvÊËÞg³¥”SÉÍÙM×ÇU³ÙÁNäÍ¡N¿×Ì<£ÁÈF½ÐS‘»ã³µ²G©ì‹9ͬ}kÈÍ’7˜èŸM‡Å£L~ǪU;ØQv¹¤HZÄ\\³¦M]“¥un®¤GOª«T\¡¦AM¥Ð\7¦Öc2Ëp2´ä‰4­­\P²ÐHH¬È”9ÑćXÕÇ‚XÄÅ;´‰4Íìª,æà—(ÉÞ…2«ÆŠ$ÀèŸ6ðó“4ºà±AÁﯻ߿=Ëã¢9¤Õ¥X‘ϾI³ÖˆK³ÁÂo…ÓÜ@Sʤ;RªB/ŸµS-¼ÇM(Þ¶LT¤ÈZ>¤›=<Åça,¾«-;ÑÒŒÄÐf*©\-ÛD0|Ï—=nä†1ÇÕ€-ÕÒ{só»9<É¢9×’$TÌš+”´`{¼¬Ää¹2|Ͼ/’í§N¡í­3ªØ¹epÙêZsßê”ÝâË@ˆäß-oæÈ6oøÖr‘ÝÜM_áèÓ4äð«HýéÓ8ÓáåõæÎbÚáÓ¬ÝîÝpwþßk¾ìæ¹ðþ÷àìù׿Îäí–ÛîìÍéñøïýçì¿›Õõ»âéêÈÓâïæºíÿؼçãßèáî¼òìÿ•½åÚL¸øß^®çЭÅúØ‚‰Üµ;½ì¥8†Ñã§MÔå¶jáà¬pÖà»NÏàÃ]ÑÙ±Låê¼J¿úäm­ìêf±ðÎVÓõßW§þàD¯íâz­à´;¤êÓh~ôçZªáÀM´×»M…×ÂaéÛ°^íÔ€ŒéÞ‡SÏÛ”Pàä”|æÞŽfçòáJåìÅPØíÕwèÞÀNßáå<Îâ¼5ÉäÉIÏÛÄ=ÄîÞAÜâß?Ýè¸GÓèâTÂêá;³ãÄJÁóÒJ´íõ^ÁÞäbÎôáLžéëªUêÀÀ|îÖ„óÞŽtÄè“9éÞ©FÜ׳/òçÈC×èÜ\ÕĽnç×¾‚ÒëÅSÉÖìTÂ×ÖáÓä>ÑëÞNÂàÏIÄäÒH¿ÏÜ”›×ÉE¤ÑøbÑì¾T¥ÙÕx­äë“–ÖꨂÞÚ_RÙ̯yØ쟊ÌáHyÅå«uÎëš@Ñ内ÙÝ‘CÜó„CÃÖ•6¸àtAíãx7ÈÓ¿a¢äÀg¯Ü»`ÑЫjÞεs«ÛÜ3·ê´/ÉÀß[¸ÖÚ‚¬ÓÆmÊÃû”ÈÉÇjŒÞÑEC²ÏK_ϳ<:ÍÉŠWåΊ5èÊ„,»Ã¡(ʾ½¬ß›*“¾™.¶Î´3FÇÉ0Sϼ9*àŒ):¹»PVÉÕ<:ÊÆ*,˺@@¬ÒzG°Î\@·¹7eÅàlLŒªYV‘­u]®¿`Ut½¶K’¿•;ŒËŽ\’Ý%gФ]|ϸ=…Þ|W¬º­0‰ËŸ^ÔÐÄV駤F|¾À5‘ÀÊ¡éÂ؛ȷÁ‚ÔºÁ?¼¾D”»¹J}¯ºk¶²LÀµ½Jj»Æ_y­Û‚¯Ã¸sT¥³[/É­ph·”SZ®VNºÄjd‰Ë˜4t©‰‹¿®t`ÉÓ¸Ô·©qbÇ\dk®†bJ²Åtª²…ci¥ˆS¶»ªY.³ÆŽÄ¥‰c[º¬…z§‘x^»ÂnzƶL–¢Ën…¬¬‚`¶¹{´¸ÑªáµÅƒ|ªÃ`¤¿¼‹Òì⌊”¶Â̲¼ur¨¸Í¿ԧf“²ÏÁاϻΒ߷êÀý·ëÐÿ¨ó¼äÂéµ×¹ãÏɳîàîÉêÝòº×ÿ×ÔèÆàÓÒÛøÛíÖò×åêïà×ÝÝáÀåñÒÒßéíëìÚêµØþðÑóìñ¿ìØÿ¯æàïÂÒ¤äÌôÄèÙ×éíÜÍÄÂÃΚçÙÒ™½ÕÀ­¦ÜÓæ¹È×µèËÓî˹“ÚáÒ©ëÁàŸëÖìÆÑÆø±ÔËÔ‰ÏÎé¡ÇÈÔyÇÐÕ¶ÝÅÒ ÒÖØ”¡Ãß‚®ÂåžÜÔÔ…§áÑŒ¯ÔÄÊšÄÉ–¢áΛ’æȶ¢ðа¹áÛ½©íÔð‡áÀņÿÎìºßÎà’ðÀî‹ðÈÙ™ÚÔãïÌÒãÕé—Ü¿ï…â»Á„ȺÕ|ÍÄÛv¸àÊwßÉÔšÐÔëˆÞÕçŒÉÕÜÉÝÓ®uß⟠ÛÛ®Èß éÎÀ’éبŒä̸Š÷Ø»ƒØåïzìæɱÚá²€¾ÊÃvèÞâ€ÙÑÔxè·ï‹ä×ÖzÝËâiÑÖÌfäÙÔ”¥ÓÑnÅÎÜ…ÑÌƈ»Õäu¦½Û§¾È›™ÌàŽ™éì°‘éÓ“žÉÌ•†¡Ëžs»‘£zéâ—››Ä¤kÉÌ©l²Æ®½¸­kËá•kìÒ¯[¤¥ÅMj­Èd²Ï›HÈÚ°GŽÇÕH·Ô¼YœÊÙO¥ÝÇ]™ûÁ2šÓÒBžâÏhÖ˜,Äp-‚ÎPOìÂx.(Øž$±ÙË.†ÑŸ2jç´Cˆì½>µÑ¿*²ÇÍ"Õ·UMÚÕowÏ£-·Û°'WÉÇ2sÚ½C…äÀ<^áÈVTÞØ/SþÁ[wåÝ>/ÑÖ“/ÜßtBîô¨™õî¹LÏÛÉ:ÈÝPÒíÕpºßã:žìÈdÜñêMêÙæêÿ襩õå©Ûãï¥ÕùïÔòï¯iò랇ôñâÒåîßgÂåátöÞÛjéäæS´ùße¯ôàFÀïÚ„˜åÑxìÏ[¢ßÉ@²óÎm]ìÚ˜<ë×SãÚI×ÍÄDÖáÎ?ëó§GâñÁB¾ðÑ3°íÙC¹éÇ:ÈàÙM³ýÖPœðÕ1¦ïÌe‹åðJ˜ÚÙ1“ãÒQÊÔÖq}áÕu{Óàeáâ}Íв_Ôõ£‰ìé””ßá˜SêæÖ?ÊëÊHðæ—YÚïÞLÖðÔ6ðæÑ+ßÔÍXÁå×SÁùÔBÔçÇLËì©?»åÑL¹éÜ‚¾äÔ<¹íØZºèê^»ñÁSÇÛÝvhÙè‚fèÐ…vðå=„ÜÕ¸NíæÃxíû\Ûú¯(ÚÕ»Pçã´SÇÑ^nÈã˜NÐìÂR½éÜ{êåºRÓç¸UÎõÖOãáÔQÔíÚušìÒz£àèp·ëãaÑØÌ_£áÔT©ÏÛ\hÒåooáßn\âÛ¤dÖàrpÛÓ<>ã܉âì¤UæèBBÔÝ‚)ßÒe8ÃÛ{&ÕÞUßãŸDØâÌ,­ÛÅ0®äÍ7äߥfݼ $ÄÜÞŒ¾Ô¸OÂßÙ‘ªÉÔ‡¥ÓÍK¥ÚЗ¾ÅÊP~äÏdÁ¦FkÇÔcláÕ_Ñ͈4ÆÝz5×ÇÄ/´¸¿(®Ò—'ŽÜœÁ¥H¼´7NÍ°Ig¥ž.6üA¾¸K"رL:·ÅPL“¶\P•ºj=¨Œ>E–ºYOœâeF¥¶N6ŒÚŠ^QÔ„H”Èu[ˆ·dD{àœ6ŠÆ <ÕÐŽ6§â™[ÕÇmÌÕþʇ…ÕÃÊUÅ˹XéÔÎäÌõ Ð×Ó~Ì¿ç¯ÃÅê¼âÐÕŠÔѶ`ÎÊçÅÁɹAÑ°ÙoG´¹U–°nG§˜Vi£¯V]  M)¸–Y>›¹†gœÐhiˆžyhª²bnÌ»§f|Ä\_PÈvjq¸ŒUkÍ®_`º£]o±•C7±nCs³×rh¿ÁuhÉ‹hY¾À†T²ÕUZ²µ˜ªÅ¹ºÑÈãÕ¸–r´œºa®¬³€ÈÀÄn«×“­®²§œÂ¹âÆε·ÈÇÀһǡè¶Ò¹Þ¯Ç«ùÌçÝà¸Í¬Ü ë¯ãÅÄ´âàòÌøÊÜ´à´ïŸÜÇðÚÿ·úÙìØÄÝöëéèöÙØÜøËÜþåòÁéÎèÏðÒøãäîåËóÞúÄô÷çÁôÍï¥åÃïÁËÍâºá²àºéîÜãÈ«ºÑ˽Ӹ̘ÃÆÜ©šåË–µðÍÚ°ë³³ŸõÊÝ¢öÓ´žÜÍ¢³ëÅͩߧٛäÅԜ̽ýží¸Ý¦ÏÈǘÏÕÓ”ÖÐá¡®Ï퓬ÁશÕõ›àÀÛ”£æÀ¢¬ÔϯªÒ×–ªîÔ­¬ñ˳¼ñ׉²íÑ©†ÿÏë‚ãÈàŽÿɪ”õÐÖwëÍÛ¢øÇëœíËè’ÙÊâšãÈÉ“ð·Í~×ÑƆáÐÜ“áÆè¬ÞÏâ‹ùÎÙ™éÒÞ†ÔÔÕ‚á´°ŽžèÔœ“ã̵µôÝ¢©÷Õ¿˜èŸÜѨ…ßƪ†áÙÆ”à碉Äæs–ÚÓ¸yåæ·gíÏÈŠÔß¹zßÜÖ‘ÖÄÎræÎäwèâÉz¶ÏÕ—¹ÔÞ¿Éô‚×Ïàƒ£Û΄ÂâàœªâϧŠø϶–ïÚ¥‡öÛx·Äœ¡ÒɾXÕ²«~àÆž…êÔÃyÇÁ¤i–æуòÜÃM»Ë²TÂËÔ?¬¹ÎS·ØæTÅϧHÅÌÂM°äÈDš÷ÎP¤éÂ?zåÞYàÓLŽÂ³GŽ®Ýb^Ëæ{{¤¿]`ÆÒr]ÆÊŽR¾¾zMÑ΃KÖ¸µ:­¶ÀIÇÇ•c³¶Œ?¸œ9†ß«H}ߦ*‡Ð¥@qÌ¥J@’´>;áƒ0CʾHY¦ÑR2‹´oT £TU§ÍbW³×qU¬fY—ætI‡áJÐã^RªËR:¤Ò–.ξs@ÃË°,ÔÂ’7»É¬0ÆК9Ëèq9ÆéÄ7¨ÇÊ%¾ÖºH×çÓP³å­<­ÝëN¿äÊ$±Ìº;ŸÛÂ4ºíèš¼Ô¢.¶íÅ>}ÌÊM³Ëe^ÙË=gÀíJFÂÀBDУ7AÈÕZ/¢ÄR:w¶YsÇÞXNÜÄ{)`ßz(žÜ]'³Ùw6>®['iÞ‡ {Þx!báœ,yܶZS׳/ɧ-—Ñ­)m°¿RkѨ"ŸÒ×Uoܹ…¿É(±Ä¼'˜ÌÔGméºDZî×=wÐÂ:CÚÓ¢XçÊ?~ÝÔg|Ôë’5áÜÓ‚ßò |îðÎSÝÛ£aßÞÛcÊòåŸÕè騽ÊðZ¶äãláïÜyñßßx¡âð·áïã~oêúŠºèð¢_ÓïªzêìóïöòËšÚ÷ìôÞÝuóéÂnàîÞ‚ÇõåsÍêÚm»î⯨á曎×ÚW¨ñÌOÝè¦v÷Ý®PÚìº[Ñé·VËéÔSØÜÆväè•TÑå´5ªìïT›è®,ÒèÙuÆò×XÁßßx¡ãÚZ—éÖy„ÞÕ‚”äÈT¼çÈZœàñ™oêÏ›oï·™ãÔŠYíì§cåëœoîàŒlíãÏPÍä½:ýݨëá»DØÚåMÍÛßðÚÚ9ãØÄOÑíäWÁ×Í9ÌÚÎ>½ááQ½âäT±ðçPÓÜìX¯éçJ·ÙÚWÉÝãa›àï£KêÕ føÞy|ôç¥`ÙçÀ>ãÝÃJßà­BÑßÅ)áÞ±QÌÜÏV÷¸‹JÔâÏxØáï]ºæ¤bÒáéQ¶ÖÎCÉàÓNÏäËQÍÑÙ`—ÙÚ^½ß»AÉà↢Ýô—žíÝ‹çÇŒ{ÜßštäãáÖ”‹ÐäGjÎëŸÙת:Çé¤hðñ˜@àño;ÏÚ}LÓó–QäÓzSæÖ¯R”ÛÊ3¹â®=Øׇjê͹n¸Õ±P¹ìÔrÇÑÝt•Ò×­ÔÓ}¸Ó¸?ÒÉJ‰ßºWiÌÏJ4«Ø5ŒÓ·qCξ€!ÒÓ“=ÙÑ™*m¸Á*~Õ¼1ŽÚ˜<ÐÐÈHKÕË1dÓ¸Ocи@9ªÔXÇà?A§šA<»Åb4†¾nHŽ°nB£ÇFM¼Í]a¤£E[¡µ_D¶ÚpCWÊD~»°m‰É‚S—Ë‘aeÌRYÛ±0ÁÒT ¾±–ßÊ›iÜÊqμ«dÔÕÆYÚ®§eÞÊÔïÎߘʿËàÙà›åǶN®ÃȖέծãÏ·ƒØÊÅkd¡ßO] ²Fu³Åjf¡Ë_ªÑÌ}l¬³kS¶knzÐic¢À[`¿y²ÎÌ°c†·crsªpi´—SUÅqLP£j[i´~]y¥VSŽ¶ª|iªÉŸ´Ÿz|§Æ`W¨Ä‚] Âm“ºÀz±É¹¡À§¹zi½»qÌ¥À„Ï»Ëpu°§•Ãªž¡É®·ÑºÐ¦’»¶b§¹Íâ·ÀªÛÊëáÓ¼±ÂÓ»ð˜ÚÁÔÖкðíÿ¾üÝøÔëÚÉlåÚàáä¸ØÁÌÛðêÿÚûÒÔËøÍïÙªÏóÔÿùÍç¯ÀÙôÖ÷ùàóîàâÖûéöÛû·õÞúÄêßÿÊÝÊø¼æËô¼ôØïÏãïßÒâáÑÐÙ¥ÊÖ뙸ÃÊ™«Þµ·§íÎç¨êÕÉŒàÖÉ„ÙÝå×ðÇ·œí·½—ÚÎìšÐÛà‘æÔóÐúÓޘٸٯÆÐú¶ÍßÈ­§çêãÇÐéÆÆÌ‚±ÞæÌ­ôIJŒæã°²ãÞ¿°ùÕÉ©Ú»¬±øו’öÈîÑéÜÕuýØš¡õÜÜ…è¼ñåÇçŒâÎé{ä»Ê€Ö¿Û‘ܽòœÜ¾õ‰áÙñ‘ßÓðœ³Äì|îÍò¥àÚå†èÛì›ØÈà˜Òâݤœðá¹ÕÍ׫žÇìºzúÉìšæ¾ÐŸÍص‰èà·näÐÆ|ñ×ÂhüÌ•uçÜÕßÏÍwÚçÛ–ç×ì„áßÿ¢èÒÌn¼ÆÐeÙÓÒ¸ÒÜzÏî݊ӷ滬¾ã¨©ÕÝŸµïÈ’›×Þž”ÖËŽ Û̉ŽèÓotíñƒrÌÌ®~éÞ¥z½æ¤fÑÕ¢rÉÓ¶—ÙؾçÝždÔȨDˆ½ÏAµÏ´AµØ˜UÊÞº?›ÝÉC¡Î×B¡å«-˜ÅÍRwÔÕ=…¾ÔH¸ãÏOZ»ÛeLÊätNÈÁZUÇè†)Ë»s@¬É1ÒÉ›LÒ®+iÔx6«ÊsMØ¡¨7n¸ÃWmƵDb£–7©œI+µ–0/Ø­DBÊÅT;Ä[<ž¶tF‘¸C*ª×dT¤°?\žURŸ¬lFOàfg©‘B…É_2™ÔŠ\Oëw;˜Ë™(ÈáwO×ß±.Äè6ÔºœJÏÅ—2²ÛË@ªå­3ÈÜ¢+ÅèÍ>¬Ý¯-±Ð¾!°ÕÁ5Þ«L¡ÏÆ,¡â&§ÇÇ4VÀ¨5F°³@{ÓÏ2.ÁÄ1`ÙÆ4&ÑÂ;$·Ü5f…Î+D£ÄH(ÁßChùm6~ÛO0¯æ\@³Øt7YÞp1}Ó€UcÙm(†Ì`8›ã°\]Ô°2jäCNÚ« G¤½MOáÀ#®Â®*œÔÍ1vÜÄ>‡ÐÆ0¶ÍÃ,ƒÚÕUpÕÙA…éÁ@xÎ݆mÖÜ8hÁÖ1’àÉ­ŒÙ÷ž:Øêµ=ìë¯U×íuLÚèhoëàÌ1ÖðØxèèÁK¬ÿÒP´ð¯VöâëÊãîÞ‰Çßä‚ÆæñÖùÛ´eêê¨ìë×ÜùôÕÎíáéÄæåëeñï×JÓôá|åìäzØöãXÅíØpvúòy†ñàt¡åÒ\³ãÏH\ÞâŒ[ñÄ•VåצRÐܾCêä¿KÌï«hêÉ¡D·æà^±ÓÌIºÛµIÈÓÝeµÝ±Q±èÌX¼ãÛjÖÜrëÛt¥äØH¼Öâ‘^óÏhdÙÞ¦ëÖl…îê•mØÑ}kØ혛àð³JÉàÖ@Öæ± ã×±jääÀBÜä¸DáíÅGÜäÚWÎîÀB¿ãÆBÏé¹>ÖÔÛTÅíÐRÀÚáKÒÛÖSÎäðU·îßM·òìcÑàÙˆ‡ÚÓÆZÙ䞃òß_‰÷ÏÅXëáÈXõß…jàÖÏcÌôØFàè×DêⳊÈê¿YØí£JÕÝÑ9àïŸOàá÷[¼å°CÑßž3äߨZŸßÛ|ÀôÆZÁÛìDÈ÷ÉLŸÙÐR­Ïõ„”àÔ¶mÔö^ëÓjtÞ°…|óߤsÛëv%Êâ©HÃò]OÑÝš>ÞçŠ7ÕÙ PÑüÛYæÝÄrÌȹ8³Ì‚½Õ܉ËÛÏkÎÍÚŒ¾Í¹B¾ØÛvÇÓÆq§ÌÒUÁÖ½1¢ãà“·Ä´ZŽ¿ÒššçÄS‘Ë¢r|èÃt\ß΀tÛ¾AÔÐÀ<º±¤RFÓ©A¾Ë¬D`ĺ3^̺;RË´I]¤µ:B¯Æ)G«·DbÊšCWÂÍB=”£P7®Ä=`ž¨\{©¬`Z¥ÛhK§ÆGH§¿ƒaj°sGoÓ{2‚¿DK{²Ža‰ÀŽOšÍ‰jæÄ´™æƱŽá¿¥ZÌ»‰¨íйOÃÅ¿]ï·Ñ£ÝÁΪإ¿qæËÍ–ÅÂà¢ÜµÅ_N¶¹eÒ«ß´Í©º?Ê°«k[£Áhn¼ÃEÁÁ¨pw§Áw…£…dd–ŸI’µ•Hq|‘@dŽ¡c‚“Áv|‰µZzt½˜f‡¯¢wŠ¹bh_Ép¡’}yw¤bqj±•…rª ‹dµžl®mdœ¡ˆ{§§oÀ¶´rq¨½~{¬by¥Á´Ô³·w¸¬®¸e§Äy¨»Ã®Ì ¿œ½’kȼ¨‰Á¿ÇŸ©ÃÍÙ϶¯ã±ñ“æÆÒ–ò½ÃÓÙ»»ËøÉëœä¬ñÛðÕøÕåÒâ£ÐàÜ¿óîöëñÙÐæáîöÐòÕôÐÿÎêÛÖãåéãééÝïæÙñÞïÔéãùÑòçùÓç›íÌêãóÐêàíÒïÎÿÐíµ´ëÒ¼ÉÎÈ¢®·ÕÁÌÕ›µÛØ°¦ÍÍ©Ÿã梯ÒÖ¼—ëÕËðÒ¯°ËÍvàÇÙ˜ÓÄãŠßÄÅ•ÛËÌŒÑÛņ­Òê—ÕÝåÓ¨âܤ¤ÞØ«ÂÞÙmÚÓ×£©Ü” Þщ¼ÐÔŠ„ìã¤èΞ­áןßØÎwíÚ¾nê̬†ãð¸£ôÔ¸¢ëã¶{ÝÉÀ‰éÍûÄûåÕqéо¨ÞÕ¨¢Ø¾ÞuÔáÞvÖåè×ÏáfçÌòËÝÝwÂçñÚÙá–áèÕ’ðÖ¨sÜÉ£æÒ±˜îæ͇뾣oîÚ¼{ëÚ´qæÝ®Oè݃ðׯeÓÓËdÚå°iÈä¨néÛü|ãØÌeàá¿kø׺}™ÖÞtëÖÓkÌààtÒÚðy©ËÞPµÉ׎ŸÕᵇÔØ“{ñÑ©‰ÑÐqŸä݉~ÝаlÚÚ»z×Óš‹üÍ·i÷ÒÐf²Ú¯bËåö_Ò‘BÑãÌ7¨À”_­Õ´$µå±6¶¹š6žÌÒ-´¾¹)•³ÑO‚§ÛBÅéJ§éÖj¾ß`SžãjZÆÌfe¿áUM»Â’\ÅÅ^ÏÁ…=ÔÕÌ=¸È¢Srlj@̲nC¼ÆŸ9v¿›T‡Ð¯;“ÀÂ2}Ì¡Ai··7JÊ”0E£½NBžÅ4a®¤3-¾½WYž¶D7¸ÒDEµID¶çj)…Ïm4®Îi@¥¿Q@ŸÖ† µÉ—'¾Æ^@ÄæG¸î§RÈÞ¥3¶Ó{WÆÙ©,€éÓ5ÕØ™,ÆÓ‘0Ðá•$ÑÁ¼,´Ñ˜EÉâŸE‡ç¬7§ÅÊ¿è§2·¼ÀXVÜÔIÞÔ=‘è´&OÂÐOEÒ˜GS½±ZÓ¢%?‡–+-®²:IJCD²äh?»¢Z)¬çs&ðN+…ÛY!’æm,ÒQ-wÑ…;TÖ¸[aË :„ÒƒJà¯5‚͎DŽË©@7°º>[ÃÑ=¥Ø¢2–Êßy>»Ó. àÀU~×ÍRA»À5‰ÙÓ,aÑëufÊí°fÑþà,ååÆEáï£HÊôÁKßü»XÞÔ±ÓÛé¡Øôä`³ïé«Ìñôÿòî݆¾àûïÜßø„äìå˜Æðí´ÎóßÀÏæø¡ÈáêÛåøè‚çóßuÿÞ×bµïà†ÍÛÌeÀð×cÊëì½¥êë—¡àÔAÀï¶H‚ßÓœŽ×Ú‰wÓܲQÑàºWèܱ[Ùõ½XÏÞ¥nÞíÉIªâÀPÁáÏWÃç¾g¤åØ]ÀíÎ`¨ýåV˜ôïœ}øÒqŽâÛP°ü×Q¥ÚÛ¡ŽâÙ¡ióÖœ°éåª]ñ櫉çßž ÔÙ•|ÜûÜQåðÉ4Îë°_íÚÁiíÖ½ƒÐÕÏ@ËÛÏ-ÆâÎgèæ×@ÅÚÄ<ÜãÂ7¹èâQÉëñ~¾ñËhÍëçS¸àßY­äê_¤ôèT¢Õסhøá¤sá秜âЛÅæÊdãß­VÎÕ·ZÌÞÐ^ÙãÀ3ÙéÈXéîÕ|ÒÜÒ\ÕØæG¿ãÙjÁÝê\ÃàüQáÂ×NÏó¤aÖï͉¸ÞÐ@£ùär¼ÙቬÏñŒ¬Ï홉ÒÕl–ÎévxØÅ®§ÈÞm›Ðà~|Ìà_ÙÛàƒÞâxØáÄgßç¿JÎÏ…Ï×Sùä›UÉéär¸ÜÑ/žÜ½>ÅÄ­pÊδ+KͧEÒÅÞY¤½©.¸Æ­6œÐÌ€ÈÆÆ|ÆÑÀLÚ̓yËÀ^Œ¼¼J‡ÞÅt?п…:ÇÂ?Éá¶.·Ñ¨ ‹É 2™Ï8Ñ™@=ÚÏ2sã»QV½Æ@YÁÙf7´º/I¦›H1ÉšGP‡ßmRmÚF®®[VšÈmV™°fc“²8;£´ŽWbÓ–TlÏ¡sy³kjƒ¶’G`¹“2xÆ”.‘ÑŽÕ¿¥vËÇ­[ʹ¢ƒÔÁ¯ŽÚÁÄTÒ¯á’å¼´uÝ«±kÊ»·Qº²¦W…»´dl¹ÊT¯É]ÓµÂbVÀºWvœ‰o¸ÈɛӦá©q¹Â€l—œtJšŽ:a«È_uºh=…£eQ“’JM‹¦{g€ª¿@^¼¶j`²ul]ºn‹{vp¬pWi™xsf±›{m£¯Wš¡¬j¨Â®Xd§·q}±Âqg¶¿wš¡zd®h‘£wjƒ™Êuœ®™wѨ¯Ãˆs–²²¬¨©Ï¢¤½~ʘ¬äÁθò½Þ¦ó¿ð¨Í»è˜ç°æö·×˜æÓÙÙèµôçëÀë·Øàâ›ÔúðþãÓøáÿÃìûàêïéûÓÑàåâÇçæóåÜçæèÝ÷ôñûÇýÛÿÓúÙîÔÿÂó¯ôØôÇÿÎè²ÑÌÿ¾ìÜòçÒéáºÁÀÓˆ¿ÄÜ”¬èÁ°«áئ”ÛÔ¼–Û³·“ëͶå¾Æ¡â ²ÝÂË–ÙÏܘßÍâŒàÌÆœÆÊÒ‹ÛÊÙœ¼Ñ放ÌÙêèÇ—·Î݈ÓÜØ„²ØÖ”–áÍÀœëÉ«²Üç»—æЬçшèᥘââ×åÄ߃éáéµùП‚çÓ½°ædz}ãàÂcðÏÊ€ìÆɆÒàú~æÔãxËÔÕnãÜå›ÈÛÍŽÝÓÞ„¿Ôë…ÁÖðŽÏåèwÇÛÁ©†Ú½½ïë¡´ëìÌÒðÉwïç£rÙæÐißàÚuèЪsäå·’ôå²¹çÎÞƒÞÈÞ|åÉÇ_ßâó¥Ñçî~àÏÈ\Ýâ§ØÖ釒°Ån¾î×p×ñÔm°ÜÌmØЛ—ìßb”Çû‹™äÒ‚ˆÕóµ€ï⇆æߨkóÔµsßæ†_Æغ]²¸´\ÐθaÌÝ›kàð©i·»¿J’ÑðG—Ç·6Áè˜;Çç¬9 ÝÊB¦ÕÛO¤ÜÎ0’ÒÎEŒÞÏFÆÅA“•×GeÜã|VÈØQjµÕER¾Æ•J²¯4Ù¹…8·Å¢R¯Ý¤J´¾®EÑÁsb‰Ò£cº£O’Ý¥1\´Ž=gɬBKµ²Hh»•>ߘ3<çN;¦Ç,F˶P`¾ÙP:¹â]B§Ç?Kº±T5`¸”*–Ñp-”°eSÇÅr.±Ñ‰6¿ÁV±ÿ<ÉÜ›-¹é±,ÑÜf'ÃÞˆ1ÃåÏ%´áÎÈó…)·½œ+Îà«%ÎÙ¬ ¸¾ÍG”åÂ;©ÚÄ%®Ô·z¢â±?{ë®oÔÆšÏÊN- )U©°UB£¿<_³·_;«WR›°\>Žã*Q¸ÉH1rºf:\ãx?‹Ýp7>¨q-mäu<„Ò55Íy.@Ø 9;§À +žã–—á $“ç¥F¤ÞÊD?ѹ>¢ãÂU@¾¶4qí·^²È«6kÕÅ#âãPdËÚA_ÌÜ[äÈ‚7ñæ0ˆëѤ>ÁßÃ?ÓéÔRÉÚˆ=âèÔQêçÆKÛôÚ‹ðÞÏG®ðÜfÈÿç£ÅÜí¿èåØi’ãè„ÄöëÓÂãèš|éóÈyÿäÒÚôêÆÎôãÛ®âñ߉ð÷ÝoÎÿÁ^ÔÞÍ>Ëââ^¿ìãçææ”äÛ¤¤àÞhŽé¥;Áëè}Hèë|^íãtYÒÞ¬5åìÊHÂä¸=ÞûŸJßã»A¯æâe»îêMÐáËSÊÝßr¨æåq»å¾>«âÙYlíã{ƒêök•éÝ1²ßÑ\†Ìé‘]à÷ž¹èÒ{†âý»–ëá‡ßÔ¢’èÜ°DÒçÕCÞóÂ^áã¡]åØÇ@Ïò»<¿ÖãNÆáÃB½éÛY¹ðë>ðáÙ2æÕÍC²ìàPµèÖR¾ÞáHÏëçnÃðÚ^·ïÕFÓèÖmVÓó§kãý{éÈ—ŽÃÖ’[ïÛÀÒîVÒèÌWÒؽJÇÝÓJïíÀ|ìéËXÆéÝdÊÞÍ@ÐØáXÒîå6ÎÓ¿KÅáæNÛã¶A¡ãÃ: çífÄêÂJÉÑ놑ÜÞŸÔà€âàvÏÝ€yàìuwÞÞ¬€ã߸mæÓØPàÕgÏÌšuàÛ–:ââ½[Ãê{3ØëÈ‘ºÏ¨6ÍÛÉ`·Úš\«ð¹aÔÚÆeÏØÀ_´Å¿x±ÈÚ¢ÅÃ܆®Ì਷¹¶IÁÓ»´ÏÞ‘’ÆÖWf×Ã`ZÌ¿nPÛÕ\7Ú͆+­Ïc<Ò;;zÓ›=˾­(ŸÆŠ/ŒÄÄ=YÀ·2Eο:H¤±0jÁ¼^`·¥<8¾©C;§ÔWF–Ìc^›²c_ ÏsQ—ÍeR¬ÊQ<ÄE-~Ï‚TYà”aŘqqÎlVrϹHkͤB¾ÉŠÑ¹à›¿»ŽbáärÍÇ•‹ÎÀΆ¿½¤pà­£Ú¶}-œ¹ß†ö¾Ë»Ëª©•ß¼ÓMXºÎUд«`ŪÄcjÁÂf?”¿ˆË¶ÜµT™“8B’°Yd’¯XH¶Ãnf¹¦ˆ`Ž§_Rr-SŠÇrRr¿igg°I}i´€‚Ã…SŠšH{b¦rg^_V¡’~c£ˆA·²Ôe€´Çv à‚¥·Ð‡d©zÁºêʪ·šugŸÕÎË©Ù§À­«½­É«©®ˆrҭʺ»Ê§ÆÀɭ᪶¯ÚÏÔ­ú¶é•à¸ì¶ä¸À¯à®ï¿ùÃÙªÏÞô¿üÖÿáØÿÊì¸ÓçïêýÖõÅë³ÉêþØõÔéÚÉÕûòÊïÑñêÙÍáîêàÜôÞÛïÑòñÿÞÿÞôœä¶ôÑæâê…öÌìÐðÌöÝù¾õ×áìàéáÔÔ©­¸¼–·ªæ˜‹å˨™åħ¢äÚŸ¢Ü³Á”û̯†íÕךõÂÚ¢ÇÁá¬ÀÃéæÃÛ‰ã±ÚÃÇÅè˜ÅÁ׺ñÇɲÉûϬ²ÔÒ§°ÇÚ}ÖÍò ±Ì溔êÑžÅÈÉž£êβœêÖˆ”ÛÉ¡õϹzôʹƒë¸ÛŒæÙØ¢âÓ°ƒéÆÄ‘áãÌ•ÚÒÄwÞÖìªæÄÐwåâ¢yîÄÁg×àÐqÓÌÍpÔÇææÅð‘ÁÈÛ…ÁÐÖ_äÙݶžÛåɘÑÜ™ßÞ—¶îÕ»¤ñÑ­‰ÖäŽmóÕÌjê×ÑhÛÉÍzÕè«áÖÅvöêÀjè­Äa÷ÔêqèÉå|ÏòªzäÌÞ_éÐÞ‡¾ãê…°Ñåq·ÑÊfáËÔŽ¸ÝË—‘âÜ ‡æÓ¡~ÿ؈…ÍÉ‹–úÛ‘‡×Ú»vèÇÐ]âÖ­‡Þ×±z¥Ó¿kÝÙÅwÀ¦Éƒ·Ýê]ľF«¹ÄB¢ÉXŽÏÃQæݨAµÕÌI©äÀWŒÞÙ5ƒÅ¿:}×Ñ4éçA©ØåQ”°×vp±ÒqjÁÒ‚`Æ×qaÃÆ“UÄ׋X³ÏqN̦¢LžÞ¥C·¶x=½¥DJÃÏ«KØ¥L~ÔIN¶²DlÕªWd¾”=3 —EB¡ÌXBˆºTD½Y?Ûš`_°Ñ`X¦¿gKŠš8PžÚw4€Ã~9‘°M4´»H3…«•6¯í§!¿¯Š[ÄÖ¥#¤ð˜?àçšXäìxE¿è¹:¢ßº?­ä¦<Þå¢C©ÑÚB«ûÂÂåš0»ÚÓ9`ËÙ4”Ö¦§Ê†2¨Êº;:×ßLsñ¿qD®¨Ii½åOU¯ëSE¶¶6:¼Äl6¿¦0>Šª#?¦º*'yÎA.¼=EUàtJÎÃkW¸N8ÁªÛ³ž,¤Èƒ>ÚÚÄ*¶Ú¸AÉÁ¢$΂:\Ȩ8_³C8âµK`ÍÏ9@ƪ)=µº19ÕÀ0NËÏmKžÞe*ºÄ,B§·C&ª¥FN•Ì^WŠ¯FN‘Ï‘A^ΊglÔ|I›ÙyC’Á©U×ÆŸ0È¿géË¡kÐÁÞŸØОSܽ¦WÍÆ¥b¼¼ÑÅÀȱ—ÙÑã«Å¾ê˜ÕÇðÂÙÂß–âÂÏ|¯Ôµ@Ù¬¾kᤙ\tàLc½²iKª¸bš±¶sDšžk[²È}e«®g]Ÿ²ft³»vV›ÈZj«dls›;l»SI€µul«£¦P=ª`kºªmE©Zl|²˜lZ—ª•Â·¿`^¨ˆNƒ¨Û›¦­Öx¢”a¤²Ìƒ~ȶd¦µÀyi½Ç§Ì¥¹ Õ­À“¾²­|r«³ì°Ç¸Î²Ý©ã¹ÏÌÇÅ·Áƺæ´çÄåÕÛÂÌèå«Ý½ü›ÎÉû¬ìÐû½ñÍù¼ðÛê°ÓÌÜÝå´å¤çæñÖùÞÿßõáòÖçîçæÒìëüêÛòÙ¾ìáËäóÎûÎóÔüÈßØíÁù›ôáû×òÄââð½ã¼æÁÔ í¹¹¼¯ç©Ã«ËÕÁ×·§ÜÓѶ֭ͯн¹°âÀĤíÊè¬ëÞÇ©ç¹¼™Ò°ÉŽ¾ÍÔªÚ¶óµÐ®à¶ÒÕßÑâÉÞÌÒÔãÎÿÉäÁÞ¨µÍâŽèÅȦ©ßÕ™ØÔ¾ªäÏõÐêЮäÀ¡¢ÝÎήÅÅÊåÖÔŒÝѳ곎çÍåùÀóŸé×ç‚Ö·ÖÎøÀ̃íÏòÈõܸ†ÕÇßÛÅäÁ½Õ’ÏØÈ¥ÈÞÌ™ÐÓÑ—¸ÔÞ»ðµ×¬±¦ÅÕ èÙßáϯ‹¹†²’¨Û­ƒüâÖÕåÙºˆâßÀäÓÑ‚ðã³…òÍÂtÉç²–ÑèÄŠãÜІßÏä¥è¸Æ…ÏîØqÝÔЊ§ð½¯±ÚÜ“ºÐÕxÊÏч›Ûá¥Æ˨“åé’†èÛ¢–áÞ„åØ’“ÏΗs¹Ê¿nÝÕ®“ÿÙ‹uÞØ¿_ÜÆÅrãÌÇoöäÞT»ÁÇgÜîÉ`·çÇS¯Ý¶HÄÆ®A§ÃåA¢Ãßy¦ÞÙP»ÛÄLËÍ}•×ÕO´¶ÕPŽÏÚ[]ÏåsZ¯Ã@o¸µp_Ý«¡<ÇÍ™MÆΉNÜÅÍ8¿Ò½C³È§L´Å‚hÅÇ´Q§Ð¤@•ÔªW˜â¨H}Â¥AhÆM@¨¬RG¦™?N„ËnJ©ÆM;Á¬]>¬¬?C£·^B˜]^¦Ê‰EwÃeI«ÓyHëÉzwÉÓeÀljK´ÉsÛÏ '¶×Å)±ÀpGâìŠ'ÖÄÙÀâò„“å¥?ÚܵB»÷ÏW³åÉH¢Ý¼D¯äÝJyܯ1¦ì¥8ÅΛ#’ÑéA{£×FWÈØSqеWKƹpbÇÌ^8½¸L0ŸØe/Ù¸_D¨²Y)«©<5šÃoG•áo?¶Üp)àÅrJN¾/5PÐu'ƒÇX:”às+IÈÀJ¥Á¬(±ÍÑh…ÐÉK¬ÔËA¦Æ¸?¢ÄãŸQоŸ´Å'_áª,‘àƆèæHa×àL}âì¸èÛˆtàá—oÐÚrbàì§oØìÃ_îê¼ZÿØÀ3ÙñÖ+Ü÷ß^ÑÝÖìáÏmÏâÛuÂñÛ®ñÚèxÒâã§àñÜÌåûà Ôëî¸Äèãëïëá°›ìþ©«êô݇×ôßyÌå×wÿéìÉÚäÙe¸òÙtÇæÇU¶×êœmÔÌHˆâ¾I¤Úâe˜ËÍ®<Úì¯<Ëê¶QéÓ½BÊä´MÖ÷¬M×ìºEÉæÇJ¬éÖpœñìeÉ×ÑX¯÷×{¸ñâv¾öÏ_¢ãú…`åép–ëÜc¹èÝgÞê«‹ÜèµVã版Ðï¦IòÓŸ‡õá•HäÞ|‚ÛËÇIÙíÈEçæµUÛå³IÜð¥?ãÝÔFÝ×á?ÖîÊPÍëì,Íõ¿8Ìݾ@ÖãñiÍëãX±ØÏhÐçÍd«ÔÉF¿òáE æÈN ÍÕ”Bçæ´AìâµCæèlqò×D*æïÒGÜð•8ÔÞÏ<àÞ¶,ÔÝ׈ßãÊKàäÃY²ãéTÞÛºIáÝÜ<½ÛÒD½àæIÊÙÊ@ÑÐæ‘¢ëÏSµÜãw·Éòo«ÞÞohäØ¥nØç­ƒÓÎ×zÎòÂjÜ䛊íÝ®vâÝ"Äàº>ËÛœ†ÚªNÌæ¸4¹ï™cÜä½Séà£'ëê¾gªÝÔy½çÃmÓÙ—BäѺI™áÂ;ÎÕ_©åÚ”¢ÛáÝÈP–Þ½"§ÐÂS¡ØÑ\ƒÙ³v@ÏÃPRÈÁŒTêÕ”)àËFØÑ¥4¡ÍÖ+¹Í­,ËÏ’8±ÊÁ4GáÁ-PÈËH*¿Ï6DÈÌ3)ÓË\,Çž-QÖ§G6“ÛV@˜Ø^2´µQZŸ¯€Y—ÄgD“°jH­ÒƒLQ¸®-€Ú—9‡ÙHªÈ°W`Ù¨KcÏ©9¹ß—Cܾ¸[ð̦V_ÐœsËÛ¤VÃÃÆMÜÛ¢[ÊÁÈ“å¼â­×ÈÉQÐѶyӺݼ¹ËÍb„ϹR¤Á³e¢Êp³ÕÝQ€´»}ºÃ·iy¹›T]ÀÆeh˜Vg—¥`ZŪa˜Ç•E“¨DH‹Äw^} ŽYuµ¦W{²›[KÔbqgËskl¥‰^“ ~g1¸ bnªÀ‚f»®ƒ¿µ¼yº°Àr©Äc‹¿»™ÈàÉWµÌ~‚§ÁQ|µ¿p„²ÙÜÍÄÊÈÐƾ›¸Þâ­°Æ¥u¢µÀÉÊ´¿ÜÑæËÚÃÐÑÆÃÍîݳíºÙÈßÂì¶ã¼ÚÑìÔ麩·ô¹èáòãøÔÓÑòæÞëùâüÛýçñ×åÞþçüÛõå­÷õàÔÛÈîëïòÚôÑèôÑøáåÙè¹Ù¯÷çöëÿÈï½ÜÐäÁáÈÊ°¸¤¦Å±ÎÐÔŸÞÃÙ›¼¬ºê•êºÔ©Þ«¹šÛ½Æ“ëÃ˦ãÉç´ïØä±ÙÝÅŠËÔܾʼöÂÙ»ñ±ÑÍìØí¹ÛÃäÂØÃôÖæ´¬Ýß±ÄÝÏ“ëÐÛ§¿ÑÔ«³ìÜÚªîΩÅèëà Òײ¢ô×ͯíä¢ßéÒÈžëÌÊ”ØáÅ–Þ³½çàÑ’ðÕÚ™å×÷¡èÑÜ–Ù¼í…ÐÜ¿”å×ͨàÃû°ëÏà‹ÈßåÏñçÙª´Öÿ­ñ¸ç»ÕÏŒÆëÙÌ›ìй¦ÜÌà´æË»ÕÞÄěݤÀšçÜь轲]ÚÌÇ“ÿʵ}ÚáÞ‡ÔáƤÝæÑŠÝÕÁŽæÎÍkÜÙÜ|èåîˆÖÞЈÛ×䉓¹Ú~Ì¿ßdɾ݈°¾ã©îÖÜ“ôÉ¡–ýËç¢âÚ°„õÊš¡ÞÖ¥…ÜÓÆxëÛ±˜Öá¼—Øà¦tåÐÁvßØÔ³ÁÄ]ìñ´PÍÚÁF±Ò¿U®äÂEŽá­VÛÖ¼?rÖÌ;’êãB¦äÈ[tÝÂ]Ëâ?fÖä?wâÅTlâÉr^ËäŠ]ºð|y;~=ǶBºÂŒ:ÏÆ£P‡¼Â2´µ¿IÄ°v?æȸX•É™]…â½VSĪ<ˆÜµQJÄ’Q=¨®Z"±f`ŸÕ^Viµd.´ÁDP¾Z£×[Gœ=1Ém:T¦¡G¯Î‘X”ÈcrÙÃŒ/¯´9¬­Ã-ʹ€FÖÚÈ?½Þ¦1`܈UÊÖ¯4ÅÜÁ:¯Ø¿*Þë™3Òë½9·ç¾0¬ñ®,ÉÞçF…à»K|ÛÖA§é«2™¹É:_ݳ:ZóÅ<‚ÉØ4aÙ»<<«±:N¶ÎBtÌÅHH“Ý’.}Éu2ßM#˜ÞF3•Æ?”Þl;žÒ}L7Ù7BdÖb'låb,¯Û{>9è¤EO··9fך/ÅÏ»%˜Ó¬(¯Å±.›ÚºšÚ³|Õ»m.éÆ:¦Ò±LZöæbÜØkmÙÉDkðãOZäß/]Ýõ–yÜÙ§¸÷ä¯^ÑëÑ8ØâÈVÏéØúçè[Þô̦äöÃ}™îØDŸíä¶öòΆãìÝ­ììë˜ãïì¦Øòð¿ÙòèÆ„øäÇÆÿêäÎëôÝ¥ñøô|äïé|üÖÑXåâð·îöÙ=§ñÙqÚ×Ü{cÚÐ2iåÛGžèã;ŸßËIhèïªVÂò×LÓå«8ÒÚ¬`Äñ¾Bäï¬9ÚãÉ6½ÔèWòîP»ÜŠ?È÷ã`³øÞq£áÙPÀýÔ˜dÑà™yåÎhŒçðMÃìꜚÑä}RÜí±YåÜŽcÜéZ‰Ýáš^Öë®süåÅUÈùëIéßžNÝظZåüÌ;êÜëRâëÓ.ÚèáY¼îÒRØõåFÁêØ=Ìàß?¶éÏK·ìê[Ôâ¿=³àðd¢éã8°ÚÎQ¶ïÞªkÙòÇOÖèÆcâë«}ìä³gêÞ»"îä×DÄìÍ'ÉÛÔ@äñÈRÓèœUáà”<ÜÙ³GÔýÍKèãâHÁÑæzÏæÒ\ÍêÚ:Ûäêx˜ìÝvšãÞT©›ÐY£ßÌX“í߈häýŠ×ݧWÝâ™oËÍ—èÙ]sØÝ]*Ìì¥Jëà®nÆôVBÙضEãתRÂÖ‚àÿårÍå©iÜÍÒŸ°ÕòL¯ÔHÕÜ·}±±+ÕÄÉ„½åÉxÌÛߟ­ÈÅt²ÓãZ´Ó¯.ٽ̉µÇÌKÊÕk’½¾S-ËÂhCñÏŠFÐÚ{2ÌÅÁ6¡Ð©%ÖÃ¥"ªÙ£#£ÔÔ,hÉÔ´;7£©9;Ç£NH²Í29žËN#”]A‰Ò‚7wµS¶…%©¿‚ZuÊ™oÞÅ’QÏ»…tò´§•ä½¦vñ³™B½Ø{rËÍÄP½ÆñÈÀò„Ø¿º‚ÅÊä”ֺƖλå³ÜÄ hY´¸mÉÆЫ˸lLª¦¾ztµ×½½¾ÃYª¿²fj”cY³¤Rl±Áte¸ËuƒÐµlQ‡¨b½—aZy {|­}q£yfmÈbj:Ï„Z[ÅeyÁ{dhœ•x¿’b{²˜X­Ø{i¨Ör¡¾cÆæî®~–¦‘c]§§žåŸÏ‚{»»`À›ib¤¤g˜§ÌϬÀÅѽ´ÑÕÆֹ̻ºáë¹Ä›è³ü¬©ÄàºÂ´¼æïÂè×ø³ãåæÖäØèÞß—Æ°Ýéç»èïæøçëîêÿãÚøýêé×Ùêðð§ìîàÈÞÓç¿êðÌßæãà¾êóî½ßáÝËúÒíãìåøµá©ÔÀõÝí²ì¶ ˆÃ­ËÑÖ¨µÄàãàÝŸ’ãÒ¢êÀð³ÖÛ¯žǪ́ä׿ŽùÇÄ£ÑÒÑ›¿Ï¶è¿ìɽ°òËá¯ÀÄêåáÂЫæÔòµ¤èá×¢ÒáÄÕÕä¾Þ©ÀáÏ—žþÙã¢ù×´©éÒ™°ØÞ̘ßÎĵîѶ³ÜÏê¤ÞÈ©«äÒ¹£îÈîŠýÍê…ÒàÎ’öÎé…ÓÓã£úÅÓ}ÒëÇŽïÌßuÓÏÞ˜áÉåŠ×ÏÆÂéßë¥ÃèÚ„ÝØá×èéÌêÕ§’ÚÚ®°×ù·¨ëÐÓ…÷àÒ{àÕÛœðÜæÍø½séâÔ‚÷Ý’iøäìÒõåÓÃÑ̃ÌÇÏ€âØÛnÈããpÆÎéƒÇÍÆ “Ãò¾£ßÙ~­ºâˆËÔÔ„ Õäz°ÒÕ‘–ë΢”ýÍŠñ뤛ÏÚ „éì“uäÖ©}ÐׯˆâÔ—~ëÜÔcÙŲyÜØÇgüùîGÝñ²h³ØÞ.È×-­Ù°7ãî†IÂáË6µÛÈ>w¹ÍB¬ÌácŽÑæIÁÌ;£×ËAžÄËa[Õ¹ZF®ã_Y×ÛbKÈåRÑPÌÙ”Hʼ”5–ÊÍ*ºÜ‚K̯†fÃÕº4§é˜K|ƱKxΦ8hÉ­{Æ©YK¼FYÑÕR8—Êt=¨ÜbI¹¥68©Ê&8™™EP–£NDlÛ?‹Ü{0êyWÓÁVU¨È¢WÏÀ˜9ÅÐN¼Ì #ÃíŽIØÜ°¾Ýb'ÚÀ„!¤Æ´2¬ÜÁ5×î4µïÕC›Ü¯&ÆÜ¡{¶½­URáÍ%®ßÒwŸÌiLzĨ>m¶µ\YÇ·@ŒÅ³U:È›HM¿ÂV:ÁÀ<"¯×O4Íç‰M›Ï=>á‚1C¸\4Žæu3xÕP¨ÑE8?í’0mám-pÞP:rÖ¶0HÀ‡;:¾³)´Ú²9ݽ œâ³/IÓàpòÞ¾B€æÍ%sÚÁS®ó¬2›ñÙEyÔ×IGÕÉ+{ÞúŠ\ÕÉhoÝÛŒ€ãácæÿ«EÅû»<ÊÞdMíäbÕ÷Ô[ñúæzÕæΓßïäÁéÔÍw½æðwÜâû³öìàÆüñèÁßæãÁ¾ñà´NÛôèçÏÁ›çôêð|çëá‡ðåÞxêõíòàúèZÑìÓnÌïÐM›Ìã.ƒÞÎZó¾K­ÝÖ\ ÝÜ‘YåêÍBøÝËVßÚÚNÔØ«]Úî¦Gîâ©8ÍÝÂK»äÕh«ðâ…ÚéÚg¼ñÍqáØ…¶ñãg¾ìè•yÜæ}™ÔÙ_³åÊR–Ð㨇ââž^ÞØm“ØáfîÚu_õ沇ØãŒqääÑ_Îß»=åÖ¾kÞí¿SÜé¤IìáØIï×àIÚÕËPÂáÝHÚåáNüâÛ=ÉáèQµÜãk¬Ê×.ÜðÖj‹âÛ‚¼èá_­ôÚT­öÄÉIßפNÛí‹­ÚæupëàÆŸíËæWí×¾L×éÙgÚåáVâáÒqÖîËeÜÏÙQââÞVãÒçHòÕìgØæß]ÐååiæÞâ6¹ÓÓW‡èá–±ßÒSÕÛßo«×úŽåËJšÛà¢~ÖÞ°_Ìé­‚Öð¹uÕÕyhæÛŸOçäÙUõÎă¿ñÞ^èæªF»ß¶`òá NàÔ«KÝãŒU¾âº5¯×ÕV±ë»tÕãç’«×®n¼¾ÏD³ÑËi¿ºÃPÕ´O¢Ë¹QÎÏÂ?–ϾcS×ÆN•Ç×YàÊryÍ×|0êωEçÖ™(x¿º#ÐÌ£6ˆº  ‘è²RAÕÆ5?Ч¦®.*§Ë87¨é-A“Ü:WˆÙbWsÍ­BjÖœA¢ÙnvÅ»KŽÑœ<{¸¯=ª·t9Ы²5 Í¦uÀ½†Q»Í PM¾¦[ÇËÁeϱ©¬Ì¹Ö™Þ½¹~㪪G·ÆX^¦±W°¼Ù°Ë½š_>¨¼H>¡ÄlV³¨We«lrÒ—]KŸ°_jš‰ol‰Ÿj^}Ìr•ØÍ}j|¤™>ŒÉca‹±jv–qfj»‡pUÃjs…¯]m¨jt~Á lx¢Èwc©z|s©žš®­šgm²Áel¬š’ÝÒ¼x«ñ°m¨«{€¥©£¬©Ù½Îÿ‰ÐÇÏÓÄ£¯“DzŸ–œ§¸¿©¶»˜Ï°½¾¹Ì¡ÒÖÅ«¥½º¨ÂÃàÚíÐÞçéËïÑè¼êÍé·ÚÈâ¾ÖÌç¼ÿæç±ßØéÈÕØ÷½ïÔôÅØùéÓÉْظëÖè¹ùÙéÚïÜëôíÞýºßÚôÆðÕÞÇêûëÇæ®ðÝâ¼ìºñ¹¾Ì֓˻Ҥɿã™ÛËÓˆÀÒ¸®–ì¸äæÉñ¤ÒÕÞèÏö¶ëÍÌœçáÙÙÜɈɿÿÖêÚæ·àÓí¯ÜÏçÍÔÞâÄÓÊ÷­ÉÍËìÛâöª²×ÒãÒÍ»ÔͳíÔ˜“àà‚ÉÆËŠ“ìʘ†çǤœÉà…±Õ¿ÉœâëÇ鸷‹ØÓÙ•èб~ßØÐïÐØ‹ýËÉqÜØÜxÍÔèìÂÙ‰Ï×û“ãÏÙ•Àà»`ÛÆà½ÂÔñ£ÔÖò«µèÝa¾ÝÎØ—ëаµÒܳ¦ØÑ› éêÆÞéÕ„ÛÚLjÞíÿ¸÷çåyìʽzÛÒŸpêÙà‡ÓãñŠçÕóŠóËíˆáßçwááÜ~ľÓp¶Øå©œÀꩽ×é„êÖá~¨¼Þ„žÑºo¥ëÐ’ÕÞz绦Ÿé˯×çtvïÚ¶yîµÌNåñ¢W¹ÎžUã¿«‡çÓºWÐñÕ`Ýå¢Aè̦O“Ó¹9ºÔµ6¿éœ<ÝÙºB“ÓÙ-¥ÒÞ-žåÃ=£ÉØ!“Ôž3šäÂ/³ÜÀDnÜÜhUïÔ[K´ÖKpÙÛˆMÎÀ{5Ñߘ1ÎÕ¤3¨®Í%µÓ¥4ÈÀ–U¡Ò>¤ç­;›Ö·B{Ъ&Tº¸V>Å•eK¶ª6/п@7“"LŸ¥A/ž¶Q8·Ò>F•×O6—×67¢ëM-†Ü†/pìƒ)·nnâÇ“7ÐÕz&´Â®!¹Á€ÀÝ®'¼Ç¡=°ïmB×Ï™6–²¹)Ââ–,àÜr2Ïܬ'±úÔ3¼ß¦DÆ¿¿1`´À&¤êâ\¨ß—@SÔ®(@Á¸7@ιCS½™W%Ê´FYµ«@J¢ÇKP¬¯"?¡ÂD1ª¾H(±·%¥Ø[NŒÝX”µD/–ÑIIMå|(jä{(€åjqØ…1uÒºcÌ’jÖ¤£ÎØi„ëŸW‘ε-Áã¹A^Øê <Ö½-MΪX»áè•€ÝÂ'˜ã÷ª®ðÓ3‡×Û=`éÖ{ÞÚ%¢ÛÅSZÖæ¥MÍì¤ÈáX€îÌð½òñÉ–èèÛpÜùÖ\ÉêÑŠ¯ØãÙáÑVËóìd’ëäÞv[äåzˆÿêÇwïó¸bÿ賫èõãÕëíÜ}ßðáiâôÒaêßæiºóÎŽÆäëH³è¬C‚â×2¢éÌA³ìÙE½åÆaXÖÚ—lâéÒkëå”_äá¼9öÑUèì¬bÒìÔIÀëä^ÅÚÈkÆïÝHÌéßo­çí`žóßS¹äé”GöÖz“éòvªéßVËÜß}néØ{‹Ýó¥ŽäóY‡Ñé¢kÚè\Å÷›”ìÚšBØ鸌ÖïÓ[ßå[gèÝæYãñÓdÙà×[ââÇUËáÑiÌàÒ?Þêµ9íÒÖWÂæíxÅá˃¸ÝîGÝÛÔ8¼äÊD¸âÓRÄÜëwvìé¬gÙ六ÑÚ¡Z÷ë­•éã±_ÕïªKåÙÎCÔåÐJîáÅSÔíŸMÐÚèRÚÞ¯OÖßà\ÞÇØQìèØiÛùÝaËàíNÓÜÁz•ÈÓažäÜ_§Ù¤MËÛæ ™ÛÞˆ‘çÌF”×÷€ ¬äÂbôâ¨~¾â“£ßåƒaäé²râ쳎æÙ%^ÒÛÝaíÖ”XØéœBñÖÉ}Äܨ`ÁÑÊ?“ßµBÀÕÂlÇÉÁc¶ÇÒR½ÀÂx®½ØŠ¿ÅÛL¯ÉÑy¶¾×s°ÂéxÀÃÖdÒȪ¢È¿]tÊÀdlÓÚYfËÊŒfÛËBÚ˱9›¿Æ.wȨÈÑŽDBÑÀPIÍÕ:W»½JXÆ´GQ¿¿)R§À5RÞII£·Q)‚ª]R¶ÂV+¯ÒI_™Õm]‘Ïo8‹ÈFY†Áq?Ÿ¸ˆM|È“A±µ…VÆ·Äp¼¶­bħžOß¹µ™èÆï“×±«M¿Â™^ÍÀÀO©ÄÅ]v¶éÇ´”‰¿ºÎ­á«Ô‰ÏÊ»I¿¾¥q§¾ÄlÒ»¾df´Žk¾ªÄgŒÈ†}ž—h.§Œ^^ ¸aP¦¦Yk”¶R\‹¦{[o£i|jŸF^‰škš¥|[šplZÑa€Y½j}Zªhwe¦¨Yw¦ol°¬v±žµwR¤‹i¸“œŸÍ¾º†]ž² Ð‘áµëµÈÊÀ½™}£ªÄ¨Å½ë»Õ¬¦‹§”ãÜé‚©¨³–¸´×Á«Äãµ×Ú¼º£à̶£ØöÁݵÁÎøõäâòïâÝïÎòÅçáÝÚõÊÃäâÀîáë»Ï¨ïÎôÏÙáêèÕ觜Ž´Ó•ºëÖêÖÝßåìêòÐõÕÐÞéïÇêØè¼óÓÿßîÝô»ä‹ÝÕîØã¾ÒÒÌÙš¸Û՛ɾâ‘ÇÖÎÀÂèšêÞœýÝâÒóÉŠëÙ¾„øË¥‹òÍä áÍˈÖÓÝŒÎÕÄŸöÖä¢ÿÒí–ÂßÛÂáÙÓ¶ãÍÓœœëÞ»äçÉÚÆà‚ÚÏêÁµÔÍ‹ñÚÁ¦ìÕ®áÙݺÛͯïÝÕÞÕÙžuòÜÚÂÚÐâˆÿ¸d™þØä‡ããÐnðÀç_ùãÀhâÑälÈÑã…ÔÔ¦pÑÃå†ÔÓý§ÑÃÆ–ÑÉÒsáÎÚ…ÉæÂu®âÑÐÌᶙïìÐkôì„žéͺrñÍ«ÐêøéÂøͳ|ÖåéµâÞ¼dáÞº|æÙ¡xåÕàtÖÍÒmßåúƒÜÛÚlæÝêƒäîÃwÖÛÊdîÈÉd£ÜÕc¹àßj±ÛË”çÊí¡§ÒÌ•âÆ~~ÜìŒxÞÝ™aõ鲌ãÖ}†àÈ¥méÏ™Vìç åÝ‘šÏÕÒhÖå¦aÙÔÁqñáÂGÁÙ…7½àÕ9­éÂC±Ý¿>½ï€3™ÎÔ0ï¼,téµ?•¿Ì@nåÉ0„ÐÔ.¨æ²1wÜáN`ÎÐlFÁЀmëÕlUÄÆ„=³ïœ ÉÊc:ÂÝÝ'ŒÙË9¡Ç¢ÉÌ_æµ9ß­GdØ¥œÖ’J¼—Aq×½H>¸ªU^ÀÇZ9‘ÒF<¬­\Q±ÏHC“ì_>±Å50“°&BŸæŒ9­¾¬:­º‚4ÏÎb#ÙÇAÎ̤§Í“%Õç°Ãæz#àè–9ÓáŸ"àÅ®'•ÔÐE¤âÃ*·¾šE’Ü©7¯á±9¬Ô½<¸Ýîf’èÏ›×™L”Øv8¢Ü¨+DÇÎGFDz5É—'UÄÚwPÚ—/Y¼£*¬ÖY*ÚM.‘¡:V¤µ@7›´V"oÖa1n¤$%aán=;Åq3}¼q ‰}6_wÚ£.­ò´VZ°—?¯Ï’G¦¹,BÀ¬:¢ïÐB£ÁºJfÿÁ=ŒæÞ3­êÎOšÜàHoàÓ)´ó¾&oßë7DÃæ¸ÎÖ¤Ñí†fÝÛ¸wÚêÜF×ïºaÑß×ÑæïãÓçæãcÙíÒŽèÑà¡—ÚÚƒÎðâ;¿÷çp»øû¾¿óÓ†íÞp¡Þÿ·ï䬾èÿõÿÚäš™ùÕëëáÝmÆÙñ¡öáÜIÅíÛY³ïàrÉäÐRžçáfðâK ãào¡ååk¤ÕìÄ`íãÄeîú¼“éêËÒòÆbÐóÁU×íÊlÞáÞp­æׂÅíá“ÝõÒrÁåàj³îâl†ïçm«ùë©fï뎎ðâ[¬Ú×{‰æátƒÕô¤XîÛ‚~ãܨWîÒoíâ¿HèÞ…˜òÓÃQÛä¶LèÜÁ[âá¾NíéÄjâÙ·kæßÆZÆëäe¶èÕL°áãZâïÑ=ÙßÛWËÞÜ{š×¬4ÌÔÖ]¼Ûó›Âàá—ßáÕu¤ÓáÑ_ôä¼’ãá¡{Ìí¡Ròí»VÙå¼aäعEÒôÌkæÝæGßé¾gÝüáaäâÕFÎÛÞFÁÛÊNáÍî_½éêxÚÈÎv·êËQÁ×؇{Þäi¥àí¡ÄÝرêЧåí·€Öæ¹…ÁßÝ{Õî½köÇÆvåé—|ïßÒHáåÏdÅßÙ‰ÊÉÏJÌÜÜeÜÒ¤:ÈÜ”Tè纎ÙɳvÁÈà‘ÃÑÍ–Áà¸Á¯o¿Ñ¾q¾ÄÇ’¼ÈÁ\ɾ׶¥Û»gÀÇÄyÁ²Ù—¼¼¶M~ÜÀd‰õÇzÆغ|~Õ¾u_×Ѐ=¸ÇœXÉÕ­:½ÂÁ8ÜÈ—:·ÂÈ+NÃÎV\¹ÄD:Ñ¿KW¯¦šñ¸>£é±D©ÛŽBÕÙ¼?«êÇ ¨òÁ0·Ú´B°¾×Pdͽ/Žæ¸0¸¿ÅAFôäXJÙÓTgÉÌLqÊÇlaÈì}.ÕåwE»Ò™&µó­#º¸¯/¼Ñ€2櫯A“½›ANªÇ,Nµ&YȽ1)¯‘k1á±W?®©73²Í[?…µO2³Ü_0¹èJ2­Ï@.‘ÓJ5›Óh@èMËÔb4ĬQ=ØÙj>±Öm0³Ñ ÛƘ%ÛÚ£!Öër-Öäm4×Ù™°Ý¬2¾·(ÉÜ…#Æé›#¹×£$©Ô».Àά¬ßÕÆϸ%¥ÐXÇÞ±ƒú´3_ÁÈA9Õ¯AÀž0 ÁÂ=AÞÇ"6»³,V·Æ6'¥é@,¸¦$6±éI'ŽÌ=†áo9¢èw'hÿy@‰èŽì#B¨ÛŽ=O®©WLá­ ÑŽàÕ­V•²´BFÛçx®×¡5ÒÚ.SäÇ!ט(ÅäÒ{zÚÓ3îàU{ßà0‚ùÒGxÚÝz`Þß{ ÚÖTGÙÛtXÚçÆa×õÈpæâè×äæïÁîñÃ1Ûô×y±ãì Æ÷åxÈèÌ?ÔëæW¤éë{€ðÛ¾ÔÛãÎÈð㪦éæÞèïÞ¤ÓâßϬûØì¿áæøRæûÀMÆóÔWá×ÂXËæÌPÔî¶>{Õ®(™áßëÞO¹êÌžsëâ®mæà¼Råï¦QäòØTëò»Uãð­léáÍ@ÏÛÒV®ëßeËùÖ]ÃïâUÅíÎ^šêßlÀöÚ§zÉðv«íÞ—Œðåb¯ëÍ`}åƯrôö•àÕ†‰åò—éí£hîÿ£§ÔܨZØÛÊdÏöÇZó߈Hìë»dØê¼`Øßâ`àëãnÕàì\Òî¸;ÏݲHáâÔjÉÔ×_­ÛÑaÍØž@àäÜnÊæËmºàËbÇÚÙ àãÞlòìš×á©ëßµlÞàÕhæÞÚ^ïÜžNíÖÖdðÕÐuÛÊ¥kñåÚbÓáçjÃâï_óï¼oããßaÞäÓm¹êÅM÷è슫ôâ@¸èÙ½çægÔÝؘ©ßÓl³Þó©«Õ×ëë¬uðÔ³çâ§Úëž|òÕß^ßÙŸ`Ý謈æÃ}RäåÏdÙÕº`éæ»tÖÇÕˆÅÀñ•ªÎàŠ¼·á ä©æ“ӼߛÇÌã–ÀÕמÀÒÇd¦Ë½~©Âþ¡Ì¸´@¯·ÏW¢ÝÄO–æ±m”ÍÕt„ãµwfÕÞ”rÛȈ¢Ò¸¨?¤Íž&ÄÁ—=ẪF‡ÁÁ¬ÅÄ5§6£òÈIœÅãC™ÍË*¢ÃáLÕÁ8‘ÒÒ+’ÑÁ!ÏÜP<ÌÜ]WÏéIk¹Í[Ö´jd¼ÄŽ'¿íg2·¹´#šß­%¾Ó¦,íÚu/¬Ý³2›ô«P„鸇ЖM5Ñ´=dšÆ%oѲ<"¥¯3=›Ç:E’¦!>Í©77´®7? À/# ã\^¢Ù‹*tÕ„PʳqAäãb'ËжÎÜ…ÀÕƒD¼Ðª Áè—,³ë™6Éå˜&çÍØ šÒ¼$·èŸÔÜÏ;°óÓG®Õµ7§Ù¶)´Å¼!œçÉ(²ÛÀg¨Ü¥$¤âÚUjØÐG…ØÚM¹»FzÓÃVgÒ´39Õ»D+ÎÜr1œâq9–»b¥»xtjÒ£gpÁ£Q ž”ŠÌÁ‰_Êê\’¾ÆX„ÁcÈ° —䮿‘ҥκɴ§o­ºÆ‘¼¦špÀ¹Â¸Ü™å±é³ºsÄ°ºmʧ»l´ªê½Û¦¾¾©±ÒˆÇª¸ˆ¼§·{Ūɞխ¹}~™È”sªÄ”|¡˜]Z˜vhq´{”»­vw—eb…šrwyœ§……ŠjyŒƒ‡ž¾¡£yk“mt•¨¯È˜©‰}‚…¦¿Ó´« •Ÿ„„œ»¤¸‹²•Í§©h©“¶ŽÃ‚ªu®¥¸}ˆ‹Ä¬˜¨¤å¹žÇק‘½·ÍÐÖÁÁØØâÊ㿱¿ùº×…çÔöÞêÛåêõõó±ë½ðŒ×ÉÿÐüåöÖÿÇàšÊ¿üøîÍõÜéâëÙùÕÿ×ÎúïÖíïèäàãçàÛõïÈíèéðãÖóòè÷ÜÜÿèÁí«ßÙõšâÍÿÍîØÿ²îÍ€­’Ë{‰¡Ú|ŠÆã­ËØê’¼Ôé¼ØØó¬‚ñÝç‘ÞÎâˆóÕÚyØÔ¹’ñËî¼áåç«âÊî¼·ÙêuÝÆüÀÝÚà{ÅÕ主ÕÿÒÐßã·Úà੧Ôä’È×Ç]§åàÇß¾ßé–¢ÞÉî¿ðãÃ{áêÒ—éáΓìÂï¼ÿÕàañ÷¨göêÞtÜØé‡áøájãîëoíåËÕÎÜfïÙ»bãѺgÖÙëtÓÙÑ_ªÝínÖÈÊ‘ççðqãçû´Üãä•ÄÛãè¾ÿÕ×yÚ¿Ý›àÖðÁðêéÁßåéuæöãwãçºbâÚãróÛìvûæÊ]Ýâä\ÝäèyÜøïdïÛï†ÖÚõSåÉÖ`Øܹ_ÃèôÔ£èÚW¦éߢËáè¦ÊïÛ¥ÚæÀwÕ؉ÙȤhÙÐbõÍÐo×ô°`õÊ«Sß×HîȪHãè«T½ÄÀ(Âó±@Èä¥dçà²%É⢆öÃ0•ç”(²æ£"ÚÛ½”Û¬ ¤Û®1šä¾8„ßµ/ί'ݪ(®Ù¥5lØÐQHåºNP»ÕL_Å܃3¿·],È·‹ÏÜŠ¾Û´²ÒŸÏÏrIÞÏ„2‰ÍÈ"PÊ hZËEa¯±Q!³°L8¨µ8#Õ¼?SÑáQ3—Ô'›ÛD0ÍÍ_C¾Ë@-¤ã #´ÀK`ÞŒ1ªÆsëÊk4ÛË~Ó߉:ÁÇ®*ÄÉ[#Òà‹LÇÁš×Øt$àͼ弤ì´$Úã-èâ±Ç笶ë¶Ãæ¯%¯ìÀ/²ð¨§îŸ¿Û³'Õå +ŠÓÙ"˜ß‹K;¦Œ('Í¿8!¿¼V­5QÃàZ(°ãRËÇ4'®Ú7,“á}'„ÄiŽÜd#a°Ž$s×x ˆöh’à‹†Þ´§..×¼*cé’(Ðؾ`¤ÖÉ&?äª ½ç/žÈÆ-…àÈ ©íÃ'¸ó³6oîÓ#žÊØ(„ääSoÕÙ.fíÎ]|áî“vñÖnCóãÀQÛàÌFßþ˜AíãðÊðêÔdôÚãFæéÜ­ñìâU±â×mÚÝíeßÞùyÅ÷ìŒÖõòúóåÝÍàñåÁ‚ôçÝëöí³ÔèèÍÿÜë®õìÞfèôÁnïàáOÉîÙ€åëßjÏܧ!oäÒ$ìÉ:£ë±MÈÝ×zàôâáÍOöä®Iìáçqç×Ú†éõ´dàðËMÍìÙ_·ëØz×äâTÔÓãdªôéy®ìØj¿òÚˆäìåÜ› ëôWÙÜ埕áü£öâ©‘Þü xâì¯oÝ⫃êò±ŒãßÇUÓíÛXÜòÔuÚâÍpõÇŽ^áäœ[áìãhâéà€ÙÜÖKâäÜiäÜÛmèÚÑeÍÜÜpÃâÿnÖÚ£6¼èäoÚâô€ÏÞß_ÃãÔ„yäãßg÷ݲtãÞ–›âáàxçó˜líç¹óäÌŒÕõÝxçä×^ñãÕrôÞÜpãæãn×ÜÝvçßÜrÞÝÖFâÐëˆÞâúbàÓê©åã‚ËÔâÖÖ½pÍÐ슖Îõ¡ŸëæÊ•ÙÆ~•åË­¦ÄÚ²“îÓ‚µêáÑ}ÍÞÙnÞÍØ|ÒÖÐuÛÞ^5éËÇèÕ·jóâ³hԴ„㱕ÊÇÖcÒÇpϹƗϹíœÏ¿Ã¡Ç½Ö˜ÎÆÊ{¹É¹U§·Ø©ÂËĦ¼Õ¨l¹Ùªm–Ú¸\¡Ñ¤w‘ÌÄrqÀÂ’=âÆ€gÜéYȽªA—±³9®¥žLDÇÂW·Ò\eªÄQqÀ´wg½“iV³¡eVʉHZ¶Ç„k½^bªÀ.»¦xe‘µea–Ãd ”]^Œ®tWq¬‹c˜›¥~Ѧu ­°qÔÈŠnò¡i ÅWƒ°°\Ưö§Ñ¯u›Ø­Èpá¥äÆÀ¸äÅƟߨàœ×ÈϧºyÕ¹ºÚ±èÃҙήɞ¶„°²ÙáË©È}ЬÀ„m€º¥Nš…l@w—j•±žk¢Ž†v•±Ž…p«\‡‰˜|^…b}YŠbŽˆ’wy‹?pu–xˆœ£wd‹¨–q¥ÍÀÖŽ›Š…—”•«ŠÁŒ¶ÉÈ›ž†ŠìÌΫä̘®èܪ¿¹ÚÛ¬¨•³ËÛš°¿ÅŽ®À妎ÇË«¦â±¤›®çÝÅîØÞ¤òÏæ§ÝæÒhãíÏ…ÞÕÞåºÆÙÈñãàŠÞÆùÆéÖØ‹¬×òÔðÝù³åÏù¼ëöàÈì×ÜûÿÝëØåÞìéáíùæèéõßèìïßÛóìó¼ðáâÏðîßÖçÖÝl×Öä¿åðæ…áÛÚ–¨¿ÚÃÂç…¹ä»vÌÎÛzpÅÎœ“íÎ܇äâ¨ëÎßxÝâßžÝçã»íÓÝ»ò穸Ýÿ¨ðÕópÓÞð‘¦Íø‚ÍØì¾ðÝ틉Úèn™Ëݨ¢äù€ÈÛì¡´ÏÚ¨¦õàÀ Íö«’×âÒÇÚè¬ÛæÐÙð¾Ý•õï×bââïæÞ¹züÎÒzëãÒrçϺaéä»XÖÔÐ`æÛâ\íà¤JåèÓ[ÑÜßt¶ìãkÍñÂwÒãÞeÏàüÀôìŠËÙÒTlçÙÛBää›Öá–‡ÞâãuäײeêÒ˜Më×Ë;èÞåWõìÔˆáÚÖkåÞØUåÓä•ÕéóNãà™SáÕÄIÖÜìÖÝÃBßÞÌf’Âÿ[¼ÀÌ]´Íà|ÓÛßd{Ûä„ÊïáÖè{{ãèZßà’e͵JŒØåœCïÈ¥8Õä®PØЇ^Û¶¥/ÐâxHÚä¡IÔÕÔD¶äe'ºÉ²'¥Ù (£Ú©¼Þ©+®ÕÃœÚÍ/Ƴ'œÒÎ5‚àÆ*‰ò¹"£Ü·#ŽØæ/+ÌÂQOàÆ6Oãá@VÝáQ+º×ˆ"ÝÍr0Ô¿¥%µÚµLºÄ¤'ÅÞl ð¼)žÄ¸h¸½-ŽÒÓ,­²+¶‹"5á¾E8Í¿"=½¯@7Ä×.+ɤ/D±µ!´ð&¶Ã=>¡Ð_nŃ.×χ5ÃÄD!·ÞÉÏz Ýû€&Ôi ɽ‡.éÊ¡=Ûç`(×Û£ÀîÊ<šöÁLÇè—6Îü·ÙÖ¡(šçG©âÅ#©óš4ÃÒ¦ÍÛÑ4½ÎÑ5‚î»/<ÖÝSFë‹@Ÿ·4QÒÆB,âÀUPϼ=3žÈ-%²àGB—§.A•Ì91¡ÒW¼2ão±Óe ÍÔz" à_<ÁÒ°D]Ð¥VL§¬(¥çj”ᴪ̪—Ôé9±ÃÏB^ÌÊk´àÐCªæ»:«èÜ~ŽÚÔMŽêÇ<”ÔÊK[åñjÊÐEqóît‡ëäÆTØõèÂôîáÿÐÙvdåðqKâõáðþÛÓhÅðÙlÈìÚ›×èãYÍêàÔöçð¦åäåéó©ÜìÜœµäêÑêçïÚéìåÌÞçéêÔûôëçëÔÞìÝTÑÞ¾iÜêÛ}åÿÑZµ×Öj¢äØK›ñâlÂÞ晧ÚÚ‹¥ææ·Pìõ³‚Þë¼bæÖÑ^ðÞÃ_íç¤`ÔìâdµÜÖH¢ÿáNÝîàc­êØ„¯èàj»ùÞ| ñç”Üçx„åÞ‡ÑðËf‹ðä}¥áæjÓ䑈õ럮áø­Ûó´Œóè ‚Òðâ`ååÔ\âèŒwôØÁvâôÃ>èîÝTàÍÆfäߪaÝòÝ[ÛÕØXàÕÔ€ÞÙðjÑëÛr·Ñó‘ÜäìŒÎÔêfÕãÊoÈàíw³ÐζpíÛ®œÜ৞àÓœ‡äâÈpñíÕlîܱxìÉçaîÒàcëðÙ|úÞË`ïØÝbÚëËwòÑðoØæ¿yÖàÜ~ÖñÚÝÝîxñ××Á™ØæuÐä×iáØâwö»­­äì·àÕ£àÔ§‡ëÊ»Œôά¥îæ®zåìÆ`íâÞoÒäÑãÀʛྫྷ„èËÔŒçÎŒa÷ÍȧֹeRĹٖÑÍÚˆ½¹½ÜÌؖ½§i嬮_¬¶ÌžÎ¾¾’»¹Á¨Æº­T¹´¾0 ³½_بX~ë¿sÆÒ·‹uá¼–dÆ·Žc½Á§U{®¸NÕ¦…oÒ¿‰0„«µ@M¾ÒhÀºYKÓnf¸°Q7œ›`9 —OcÄd^•ÀWH“ …^ÁžjPŸÎ€L‹ÃSYžqgÇu]e¬qj®˜ŠØ¬p£¬šaÁ­«f•´hëžtƒ»§d”ŸÚÃÄšº ×±¡ªÚ¯äÉø®Ö±àŸ£Œ´¬­kâ´äÁÆ«¿­ÏŸã¹Ù¦¾hŽž×¬·šºsÍ™ºqÓ¼µš†–²ÙÜзEšœdk“±–§n^†±’‰¤pw†²|~yjtk™bZGª¦of|eoFŸhˆI£»‡_©×¶x…„{1¥†qxnˆw—‘ªu“¹vÃ’³“½ÕºÇ¦–Ç…½{›Œ²”±…‡ͳȭëæñ±¢¡ÌªÕ¹–¥µ¬Ñ•¤ÁŬš»Ñž´¹ñ¤±òÇÛ¹óÌìÔõ×õõÈÿÄÑÏÍ«ÏãÞþúõËÚáßÛìäèèèÄóÝéÎðÍÐÙâÆëÈÿÕä¹²û÷ÑðóôÒæìÐÙíÖîæèíçÞèåâêÖíÒïÏõÊçÈëèú·õÏù±âÛñ¿ûÝÕ„ÆÐÖ…˜ÓÉ}«Ùï}ÞÛÞ£™ÄçÂßòãé”ôÐÜÇí˱xîãæŽòàö®çÍä¹ôÐí`¿ÓÛ{ÉÝï²æÔØq²ßæ©ÈÖÚuÉåÚ½çàÝÞÇî⬪ÍꑸÞñ¨Àë¼~~æØÛºå×­˜ÊíÞäçÛÞ¶ÕÕÅ»ðÞÑÖåËÕyùÕÝyÕߨ{õÞ½sßëÕwæèÝaîØÐpÉê¶jÝßÕ]áÖÖXà̸UÌÔñjÆÜÖkÏÐð„èâîoÇÑçh×ëà‡Ë¶Ø\¤ÙÀÅ€æðË´ðåÊÎíá©°åæ×oèäÂJÙâ¿VëÚÁHëäË`ìØÆlçáÍOçïãvØç¿—ëÔÝSàåª^ØéÞ€ÌÛËcÔÛØPÕÚòȇòÔ]¶ÜÂFÏÞÿ¢ÃqIP–ëÚžˆäÝzŠåבfÙ˧eÝΆˆæ̱cÕߦAßáã~Íâ”^Ù׬XÌÌzAçêš<Ðä˜XíÔš%ÝíŽ8ŸéÌ$¸·Á%£Ò}¾ñ¡$Ÿä ¤íÂ'“é©2ƒïÌ%‡ÌÆ'wá¯"¢ÏÑ"GùÓAS×åC^Æï6DËÉkÛËz!¹ÒlÞÓ™‹Ûõ⣠Åßn"ÑÒ!«â |Û³->£¯"7ÍÅ+%Ú¹-#ƪ6×Æ3—×N(½ÄMáÑ3#ÆÎO0Ÿã±JO»âNHê”ÌØhQÓÊpJÂÞ†ÇÈ’nå¤ÈÁi1Â˸Úï¤Ûã‡ôí‡ÜÖß7¶ÓÌÌä[NßÜž"ÃÜÅ.¯è˜"Êݾ/ä³±Ñâ@—éŸdÂç´"—å×.`ÛÆ{Âÿ¨=A¥Æ<4Úá"`ë¸'BÂÙ11Ŷ-'’÷E1¹˜B8˜íU'jéw"x¬ -oÓ?1\ìoæ”lá~ŽÞŠ2Râ“QJ¯¯2LÚ¹ÛǦï™LqÍ°#§Û›#)ÐÖJ„æÂ#éëG»êß¼ÜÐÆ6†æönV×ÖH}Ûða~êä‹àç3®íÛ¹cÎð¶bæêÎcä絯ÜåÇ’ééÊ{ìéÃ\ÿÖÝ]ˆöÙ¾äùå|¶ò×~Üáás—ìæ¾êÞÛÛöâ¶Ôçä«xåé®ÒìÞÐ×øè¿·ëò×nÊõèNïáÏ•ëîà]ÒçàhÄòÖK¹àÜy‰íÚŒàߣâÔZ´äÌaÕá©ãß¾iîé“`ïâ´TðñÄUÚæ°iéåÏsñßàsÇààcÉêÑaÎéâp¸ôçs±Íál°öï•hñæ}ûãƒììiÂà쥓ñÉœaðúºvÜðqïݳŽöâ¶ß㨑áͪZèÜßPÙëÉNá͹}éÔëpÝëàuñçËdàÒ’oÞÝÞMÙÔÔSäçÉjåÖºaãíÖ`¼íÿnáèájîÕó{×âéq¸èÓ^íÔ练íÖ×}ëÙ½…Òâ«´ÔïÐôâÁzïÙØŽàÖßtÐÜÙvæëålÜâÊ„ñØÑÒæÕ™ØôÆfíææsÐÔõvçèÚ[ÎéåfçÖØÌíè—¯Üë¤ÃÛí{ËÙÚg™„Ú••Ñ쵦âø–à诔ÿÇxŽÖ玲çʤaôÔËvÚä‹nÓñ¿‡ÌØePø¿×‹ÐÎë˜êÖÄ°Ù¿Â|âÄÌTϺÞ8ÌÀءղș۹‚ÆÇᮽ©Ù©Ø½Ï¥Æ¯Å€¶¯ÉvǸ¹5ǘ…ǤeºÌÊ`¾µ²Toæ®q`ⶂªË‹qй·P¼ÁÁk¼»Â„ÅÈ—VÀÃÀETÔ“pUŸ–XE¿‰pV½”zU”ŠcZΖVLšje€´uY¨£UX²{nœ»`g¨ ]U¢µViš–šmbÉ‘u™°j¤¾†uÄ’­PÎŒŠ‡Ä¬ºN£º•“ຩ›½­¯°Õµ¤¸Ó²¨sײ¹uáŸÍ°¿„Æ­ä©íÅԜҷޚ—dѵ»ÊÚ‰¾‰ÉÅU\¤°`¼·‰â±Ä¶¹¡ÂÀƒ—§…o‘†q˜½Ÿnˆ±~qyt‡~«goˆ„v>€€r–Ÿ m‰´ŒFRs€;€bž(¡S›r“~’dœƒ¤–~€Š}§y£‘as—’¯žÆ¿Ô®ˆY™v‹ÄuÀ‡¤¬”¤¦³ÑªÀ×Ò‘æÑîÛÕÌÑ~½ÃÔ¦ˆ¡Î¦º¼Ý­ÖÍîÙϸÓxÀ¹ÝÇÔÏéÇØÁóØïóÇÎûÌâÛÙãÙÆîÀóÈùàñ¹ÍÓæãß×ô·ãæöÉö»ùÊÇâíÔäïñÜîõçÐêàëçÖíöÎçññèçÛøõáìèó¹èîäÌÜêÓÏßâåŠìÈçÉæÊå ÌÂ݆œÞ¼¦ÙDZÿÚrÈßå~Â÷ÒœƒÞéíÃ黡†ëÊ oøÂà…õÏíÄðèë¹ðØ埯Òö‘ÙÑìtÕÙÚƒÄëÞ…§Øõ©ñêᨉØÁ ¨ÙÐo óãcÑîãÜÂÝ׳ÎÇÔŸÉíÅËîê˜Îðèâ¼åÕÕªâØÃ[ÚäÙƒßÕåbÜä‹sòÕÑQÖëÇaâ×ÂlïئrÜÙâZáàÂQÔÑÆfÝå®RÐäÌQ¶ãËUÍÑÁCÞÝò×äáa°ÛÒIÉçóqðçÀlúí½çä„wÞòÛpóÙâ¦ùÔê«ïøÏaäé¶I×ÒÓbÝëËuÛçÑyËêÞ™ÞѲT×ÜÓZâäôdÔØÄHËìÏBÕÙÒfƒÙãt ûꢯàápÎáàbÞè{–âÚ‚qâÛlyæõ¡cËߎšÚÔeÔÊ¢Lë΢<ãà˜SÑÚ¤NòϦOÙà«<ÑÔ¼CÐ÷Ä Îß|4–ÞÕ ²ìÉ5»â°Ôæ‘%¿Ï›&¬é³DÔöÒÊ.iÜ·"å­ ½º§™âÁl6ÃðFMÒÆ&WÙÍ6?ÎÊ\&±»bJÄÚx ¬Ï¬«çš)¾Ö†4³Íb ¹Ôš*¡Õ¥ gà¶0YÍÖ!3µ€»—%-߬&%žŸ2=À»;>·»-P¹#T¹»áÒƒSæÇ|£×i"ÏÓ‡Ôâ—#Úæ¡+ÚÙj1ÎÓÂ,´óÐAØê€,Ôù´/¨öñVÈ圼ß!ÈÕÅ-Ÿî›%ÒÓ§$ ÜŠ½îÔ.¢Ü×c}ëÝ9<Ù·_˼\NÜÀO/ͯ/@Ö·:)ÎÆ=&¾´*´˜1@ÀÕP2ÇÂ. ÀJ(”Þ5"AÉ|)qµ_¢¼WRià(@Û¸BÝ™\Íɲ2¯çˆ#LÉ8ªÐ{-£ÖÃ;ÓÁpœçàžþêH’ß选ÅÖGîÃ0 ßÑ[ƒÞíwãìÝN×Ö–—×Ж[Ïñ¾CÅûñÛáà¼ùõâðëÜAãÝìÉýÔåè¯ïëáøôíÅj³úñƒÂóáºèòüåëòñ°ÊöêËåïîÓïðçÑäêæèÖùéí¨ëòé¶äêÿ±üíÙiÓãÕf¼ßÐlºÉÛ™èØ“žëÛÆÜÚu¡ØॖÑã¿mìó±wßÚ³…äïÍ~êÚº„ãåǸç÷ËXºáë•¿ëÖHàÑánªâ×Çôʆ´àÜ^³Ùض›ðãŒÜ߈ÇáÉv¦ØÚ ŽþÝŠv÷ðõ椤ðþ‘¾âå—ZÕÞ±˜ÔåÙZÙîÐXÖðǘÔÕ·vÙååjææÝZäÞ×_ÙóÖxÔÙÙ’ÊßÉFÿñÖžààð‚Ûäõ~½ÙÛqâÍéwÇÞñ|Ùá÷–ÌØã†ÂÜðÏ×î´ŸúÛ«©æÑ¿ðßÊ’çÕÎkïëÈ|ìÛÜ[á϶`ïÚÓ‰üè׆ïÝ¿jãéÞlàÔÏ[ßÖëràèè”ÑÚázÜÚÞaâÔÙ¦™ë䯵ñÖpÙÜóx¾Ãщ¡ÙصžéÕ¤’áߦ„òЛ³ÜË©¯Þæ­xìѶuìã×bîÚÕ‹óº©Æß߃æݦoçÓgã»ÔyÎÖlp»Ü׺ÊÉŒÁÕ¼}ßÈšDÖÈ€Àµ°t½»Ðx³»Ëu¬¾žÊ±È2¶Æ³Dg¸ÂU—¸Äy8ª±lgÇ bnÖµqBÔ¶mwÅ»ƒF»¾:¹Ç³O»°~*‚°¾N±½B$Þ`<`èf(¡çmhî‘1[Ã)fóv"£Ûz/[Ú°HžÑ«$èuBÐÔ¤O¥À¶']â¬gDZ'gï¹7‚ÞÆ9¥ÝålÆÜÖyˆ×Â?†çÆU–ÝÇG…Úë¨OýÏ{b×ájŒéØ\NàÝr[ÐëÙIçÙøçîñÞ}ØàÒìæÑM×ðàeÈàåsšñèœØéÐqÙñïƒÂòÝi–òâ½éðè–ªêí¾Êõç° èê‡ÜñòàØîæð¼âßèïåÖ€Ñô×TÎäí_Æî×^ÓæÓuyí猬×Ñ’œäÙU¶ëÕƒmèñ¨^Îò²Vßæ¯cÝî°iéêí»q÷ØÙPÃñáS»çí[¹ëÒWÂëçf´úÞoÎõÜ`·ì╆àòm àèc˜ñÞQ·â퀧ä倵ãå ÁØê…líð¬xöãÀ•õß•€ÔØÌpìçÔgÒàÉBîíÃräèÒEãáÞQÖð×`ßÜÖJáÝÝnÉÖÛCÙâºhóÕä\¹ìä\ÄäÆŒÆîÎ]Çëé{ËÛÌI·áèuéãà™ŒìÛ¶Kïå³›øÞl™ÝâÁ–øèºdîä²^ïçÔNõÐØWêÞØŒäàÇXð÷ÕaçæðiÍÚêmÚ×Çb×ÐôyÜÕãl½ÐîtÞÓ쎕ÙÂY¨òåg½ìËsåÛí–ªÑÍ}«ÜØ£›Þì”–ÙØyÙÎc©ÙÑx°ßËËhßØËlÝæÆØålÞÚš`êãÞ`ÛܺtèðÿŸÝÚ¢làÍÓˆÅÔÝ–ËàËxî·¹_ÅÛ×—ÎÄ؃À¿Ù”ÒÀ̤ŒÀÈ‘¾Ê·ƒ¼«TÏÂУ‘ï¶XƒÐ³Z¨²ÏkwÖ¼|“èÉ‚WàÄu8ƹ¼EÁÛÇ"‘È›¢Â…@º»Ã3zÁ¶A@¶­;q¼¢M4¥¢:GÄœL@Ú£QXʸIO~ªW^“e[®¦bd ¾if®ÎfUž²kQ›Å¥JZÒ¦E…Éw\¦¬„\pÆŽWËÀ·“ÅĈ~ÍÏèÜÀxÏÀ՛߱˜\Ü—ÅX·ÅؤßÙü–̾À¯ç¨á«É´¶t̸± å«ÇaÍ”À5Œ®Òmm±·hƒ§¨É§¯†h‘¬KZŸ˜h]’ºwÔ¶¢…e›©vk–œglq°?oq™D„—¢OJj®w€‡¶ezm©˜{lžcŒd¡[Ó“–Ó£YªÖ¡¸†Ê¢‚|›kŽ°m™¦Æ¾Ì¿—«º„rˆ™“·áӱܠ趥滹٪«mšžÂ±‰Ÿ›¯ºÍ³×²³¦â¹«Ãä½·¤ØÅÚÖÖÇï¢×øäæèËàßïÆßßîÀÝ“Þëï£ÕØÛ›¸Åä¬æÛÞœðÓÿ½þÕÏÔØíïÒñâÚØæõáéâÜíäîéñâíàßêéöôâÞìíéáïæïÔè´ëÃîÆ县ÛֆШá{·Úè´¦ÐÕ°º¶Ü¿ñÍÝáÑßÎÉëÂΉã¿àžìÒ¹¿éÁ÷ÂêÊÝÐñâʧáÌÞ{ÈÙ÷‘Ççà¸ðØê³ÒÃÌyµÝïˆÒÊéÖÕç× °çÙÆËðá­ÌÐ×ØïÚàËÝêÓ̶Ñï·¼çÕâÎåÜàªãÜ«ŸåÏÓzæâç¶ßË×yèàÕxÞÓÛŒßÝ»[éÔö‰âîÁißÕÕuåÚÑoäפWßØÜcÑÄÙdÉÝÞ¨ëÖÈ[ÏàäÚÓ׉Ý×Ý€ÒÞï¼ÚÆЮíå°³ÙÍ›üʧ™ð¾ÜhåÜÅZéëÔ†àϺ]ñöé¹âÚßuëåï~çÜÌPÃÛå˜ÛóÌnËÕâkÁßãIÊÝЀéÍöÃÀØÁ‡ºäât²çØvÑßë›™ÊÝc§ÖϤ”ÓÒyçÖ¤gìäxòÔY¤ãâ¦mæÔ²RÖéµo×â“ŠËוjÜÝÃZ××±båÏÿ9Ñû™JàÒ¬(°×ÎA®ÙÄ6ÞâzA¶Ð¹O§È¸0©Ñª$¤Ú¸7ŽÒÛ—ÓÅ<§Ì¼ªÍ¾aXÊÙWTËïDjÅáF:âÓfcÞËŽOæÃt.ÝÏ™¸Ï/ÒÞ“)˽[Ö¶˜=¯Å©GŠÒ2·ÍÀ>²¯O?â™ Tד82´¸?S½Í-Á¼;Z¼²/8¸ÚQE°îHF¸³[`¾ÎyJ€±iC¨Îk.ÏÊA]ÂÖ“cÌØ¿íƒIÏЂ6²½$ÏÔ‹;ÊƈÞñ©Àâ¼>¹ÔÅ>ÜØ“'ÉåÒAÀê®<ÄÕ›!´Ó¨%²Ü¼¥æ·.¨æ¨2¾î«a’ÛÅZ Ä«  Ó¯?1·´Jyã¶60²ÓtÜ¿IÓ&¬Õ*@Í¥N? ßX%qÔ?J™ÒV9ÛL2oºH0¶¹/ÏÃX3ÈæÐ:sðXATá•%~ñ +‡Â»D»ß¤h¶Â˜VRÔÆ6\ç㊞à»(ºá§5³ßÄl©Ú¼.‹ÉµVZéçZ…èÕ‰~ëÒŽíÙ™’ÆÝžSÕÎYHøå¦ÛâãÏbíöÁdÝðÛ{ááö×øÝ≮ÙÉF±ìÙPÃôÖ…áöÞ¯ãõòÿìïžÌëûãüôþÈÜæïÖççå±ÆßÙé×ôûèÏúäãŸåóÏLÛñ×kîÝÒm°Éº5¸àävçÜ…”åÑUÀá×x“úêÂŒÙݼfóé¬|íáÍnëáÔBôÚÊHãó®¿çÛÍR¼èÉOéâæ†Ûáêfžöæt±áç`ºç·K¡éá„öÛŸµëØDÒóÜZ¥óÝ‚žã䤋ãû‹ßûéuéð §ë긭ãå©yÿÖÓLÜìÂMéØÅ‘Êí½SÜîÎ…ÓÛçEÛåàKÜÝçaÒÙéhÚçÕTÖîÓ:Éì¬NÃçôsªëÛMÆãíc¼ìõjÚéÚeÅæói·ùísÿá¢vÝß®ˆÝ×¥ƒáתNîáßfÍàÆ^êê½`öéäWÚíÈpãÝÔQèéÛˆÜÎìq×ÛÊyËÓÝr¿ÔíaÞßòqËê×GÄ×ñ¡¤ÞÕˆ¢éÚ‘ÍÑêl½îÔ~¦Úð±˜ìÖ›~öåÏðÙ¬oçë´šæç•‹øßß^ÚðårÎê‹ÏÅŽaíê­LöÞ¼màí¤\äØžŒÜÍ°M™ÙÝtֽтËÖšnßιXÆÕăÎÃÖ˜ÆÖÏ~¹ÈÖQÅÑÅ_²Ì¯[×ÓÃAgÕÍ•§×ÁT‚ϹY‡Ò×EqáÖz<Øȇ`Úʆ/’ɼ!½¸¤:ÇЃ6…»+lÒËT‡ÛÀHKÈ£W8Õ“C<è>-¬‘NHÖºGP¶Ëi:Ÿ¡Q>¥ÊKS¯Ïo^˜¸|WœÀ}k¼¿nbf¼™3…Ï{)®ºsa´»f¾ÉtyཥH±¿€‘ΰ‹jѪŒu¾°sOзˡäÂÅ»ÖÌñ¿Ø¶è¯ÑÂá½çÂê½ÕÆ£~˱» £®²Sž¾^«·³ž¹®»ZUµ½xiŸŸX|«È^k£—hb¶¨k_—Îwj’³vcol?a••^qŠÈ†dŸ”Ywr›Ox„¶Ò”‡ bxt§Œdm¦¬~ ¨’\r²´¹ÒÄ~v6¥v^«™²i®Äyv’Àb„›Þ¹ˆÂŠwÔ¥´³Ü¯ ‹µ•ÒÄÇØ ˜ º§Ö¤ª‹«žÆÂ몴«ÕÉ®ïÇ·¸ÑÒ¹ºÛب‘â´µ—öÆÕÖöÑüÍòǾÓëÍäÇÿÉðÍÿÏØááÌÌ{¬·à‹åãðãûÒìäçëõæëÓäÊûÍéÝÿÞØëëÛåÝîìøåóïÖÿÖúÎðßêâýÛæÁöÈøÛçÍÿÑšÆ…˹ޡ§Ìß²¹ÏãŒÑÇ÷ãÜâêãËéÐë­ÒÏѯâÚîŒáÎé¸ñßˤìß×ëãÅõ’ÞÐâ€ëÌÿ¹úèí¼éÉÞÎëÖó”ÌÇÓÂíʱ®ö×Ðâ×Úaݲý¿èçäÒñéçæîÜô¿ùÒìÜâéèâòâåãÅüâÏ—ùØìÓòÜÓdóíÚ½æîÐËðãåËâÜìnðÞüxöæôxÝØêgçàåƒèÕÎfßÝ°|Þ×æ´Õè‡çÔÝs±ÞïvÝÝã†ÒÈéo¼ÈÒzuöܹŠúÞÃÑâܱ‰ëãÏnðÿÑí÷ë‚èÚËrç×çµÿÚÄtÙìßÀöíîÛóÛç¨ôãô»üÞç¦èÜùâËå‘ßäàuÜÍô”®áò¨²ðÝœ×Îäm±×Ìe£äÀs…ßÔ¦ôÞ¯mëÔ¤Œëº‹”çà´ŒæÞê~æÙÖkßñ’€ÞÖ©_Þà·_óƪcâã‡S¯×VÈÝ›4Çé¸0¿ç³@ÂÌt,ÅÅÊP¢å«*£è³1§â£F¥Õß@–õ5–Þ°-©ÏÃ)fçÁIJÐÏK\ÐÇ4UÝ×YU³Ôc>ÇÔƒ(ùÉD¨Ì¬!Ö¿’/Ùä€DÂâ¡E¢¶¿¹¼V…æž=M¾¾>3μ05Ñ‘I7ÝÂ8?·ÃCH§¬0<º­Y^ÂÔ[V¸ÆIEѾ$7¼³[X¦Ø‡Q›¶u`¶¬PnðÅ„FÏÅ~?Ðã‹.ÎÎz5åÞ¢#´Á‹åÍ…;Äç”%¬à±(¶ÑÍÏã¾6ÜõÔÒîÑK¿Ú¾Å×·#{Í—d¥Ï¤¯Ô•;ÉÜ­2=Á½>jͺ_ˆö¹;˜àœ?*·®2V½³L"׬3¶W&¶Û*L­ÊYl¹°%G‚ÍF(•å—8”̓P¥ÜDË‚»ªz=·Ôk2ÚÚ61Þs"méˆ6kÙ»%\Òª)¼í¹2¸è’ ŠéÒ0£Ô¾&’à±ZÀáÉCfåÇ2‚×Ä;yÕÖFˆáÕ@nÞà°ˆôØm¬éÛÄ Øî°_íßÝyæíÅKÝøÊMÚè°AëÕÕ`ÝÒÞe¢îÖh¦êÇTÅçÇ>ÆòßmëçÜÂïðמ½öù‚¾õò±sóçºÎééËèôÙ§šÿ×çoÿäãvúÏÏGâøòGáìî\ÄëÛ/µà»<“ëÛf•ãán‘ãÞtÏóê†ÙÜÖ¹wÜà®Jí׉YåëÇGäîÔcÚà·gîâ´màäÍeÑüåbÅíËwØéÍXªçè_¯îÙKÎîØŒsæ꧕êÛs§ïæ\ÚÿÛ‚ØðkƒÞÕ†uæä}¶òë”xíð¢ƒõå‚–ÒñÈTáïÄUÛç×|ÒåÀoïæÕLüâ¡OÛåØOòó¶GÐåàuéßèXØó´PßæÎ,¾àÌ6±ÖÑXÄë×\ÑøêwÔèÎSËðì_ÍÝãñ®ˆÝÒ®ŠñòàÕºmãë³ÐééË^ææ¸Yßè¿ZâåÄnçòÆ|ãñÀ5ïÛáTÔüÖWË÷ÏbðÝÒ^ÚéØ_éÞÓ\ØîÛoŸÌËg¼êæwÌáãnÆí到ÐÏ€¡ÜúªÞà«ŽÔëÉ„íÌŽÜáª÷妅áðÉK×àÉoÑÛ«ˆÝÜ næîÆkäÝÀdê爂ÙÐœ|زÛsÍØå¡Ë÷~ÐÊ«t¸ÇÔ‚ÐÆц̾̃ÒË͜ζۉÊÁÄqÑϾ`À¹â®Ù°JÖ½s°²ßl¡áÂ…DìÈxr¿á|YÌÓ¹…ê¹/šÐŽ>츈EÚ·°AlÒÄ8…ËÖYu½¼^O­]MÕ—6ZÇŸ`S·¼OO—žOl¾¼Z@¸Øa\£±bo¨á{S§×g.£¼‘q…ª‰p±ÌŠD¤Æƒj—½©?ǹ¸H„É—ŸÆÄ¡šÊ¸©œÄ¹«ƒâɘξ·Ï¬ãºÎ½Ûµ×¶ÝµÔÃâÈò¯ä°½³£ŽÍ©µL©Å…bÃÆ—IÉѺȪªx«Èƒ‚œ²…³¦ÄgNœ¯w{»Ã}e¤”N{«³Šqˆ’jk{¥B\ˆ×|w½hhy™Y}‚°‘Ì¢¥ŠÏžmnÁ¡¿}v©›±§•½rÃœky>˜kœx¬‘ñ•³œ¼¯ÒÉÓð Í‘±žÑ‘°Ç©w“«gªª¿ÂÉ­½£á«´ÚÁ¸¿¯É«®ÛÌɹʬÔÉàëÎèÊÁ¶êêÖÔÿãÖ´ðáСÐÀ¶ŸêÄú¾ÿæ׉ÎÙß ½Îñ·ìÏÝ‘òÀÔ˜ÊÚéÎéËßÚÿßêÚåìÜáÕÙæÖìùø×äàëß×ÿ²ûÓéçøÏíÑÛ–áµÞ¿ÒÓÿ¿ïÍí„×ËÄ{ºÙß »Ã橳ËÚ¸ïÌë×æëÕÖÇë×Û‡ôñÉ’ÛÙã…æÑÞ»ðÖÜ“óÂÿÛñØÖÆßØäŒÑäü¢æß×ÃçîÔìÔÒ‰ÙÌÿÁ´äÔÎÆãñ›½ßåÐéÎå™Úë©äí—˜ñüÌçæåæÇãÊݾãæíæÑÔÎÿ×ß…éìã€ßâÔÆíÞÈfÔð§vòÖ×eòÔ®WÖâô‰èÚÐkæÓ˜aõÖÎNÞ×ÇbâÚÚtËÑç˜äÑívÃ×ÇVÍ×ñ–Ù×Ô ìÛ‰‡Ïóª˜ðàèÉÛðÚˆìí ×ôåÅx÷¶é°ÿßÁsìéߤê϶síÕ¾mÎÙý¹òæé…ßȳ`çëÁWãäñŠÑÞä„ðàÍv§Ñ»k´ÙöfÌÛúŒÏçß…­Ôô¬¡ÆØó­‹ØñªZÛò‹hèçf‘ÐÊ‹tÌìÃJßØ«Nâã•_õñ \ßã©_çá¹Qó×»AÃâ~1ÖÛ¸2«Ô¸i·Ï—*Ï×’.ªË¾,”ĸ.£Ë¦.¢ÒÁ1ˆÙË'¨Þ³´ñµ6£Âæ=H½Á@RÒ²†×áB/áÕ[>×Ë€iÞÞz9èÚ›"¸Ö°+Áê+ïÚ‡"»Î¸K´ÉÇŸÇ«B¾½%fÙÃF1Ö³47ãª=3ËÙC?­ÚaE¼½Zr½µU{àÑG^ÚÐOP¿ÃM5¦ÐsIšÉX8Ùµc`ÑÉ]>²ç}hßô† ¶ÏmBßÌo$¾â—$äã¥YåÚYpñïš(µåÃ)ÈèÒWåÔÃ@Óß×Y¼ææAÁÞ™-ÓÌÄ/<î·7¿ê›8wå£0¥ÛÜG}á¿-Wܺ%…ÓŸ2 §¯9]Ï·R7¥|-zà¢h'­ÁATÌÎM·Â)]ÒÐB#¥ópD¬ÞYFŸÄ£Ñ¢kͧƒ'Ÿ¾])Çù‡7È«)YÞ$œÈ‰ÂÕ¯H«ÝÙr¢Ú—o¨×í*åÛJEÎìk’Õ&ÎË6ŽÝÅ'ŠÝÂJ’×Ýo„Ü߆yÐÖP~ðÎhyêëËžæî½äîèÍýßíéÿÙßDçÛŒIÑÿêÔâçà©Óåæ•áæà]ÚìÞ‘Ëïã£èåàƒ¼Üç‚óçÙðòóºßéìÙïíî¢ÔíäÂRÆÿû«÷àÓgÚèÍAÏåÒPÝéî>Àà¯H¼ÔÉa‘ÜÓUªáàa¿ìÃS˜ôÛŒvçü zßାöñÆbÕ×ÂxõÚÊ‹âܧHÖåÐlÉáÎTÑäïiâëàd¥ëà…Æíéd¼æÊg¨ÙΞ™è⎯ôòc¸ûÙuÇë诳è㚺éÝ‹áäé—sòÝœ—ãû©âð ‘ìáÞ\ÏéÎgùÖ°bÝó±UññØxãåÞYõÞàXËèâVçßÅ?ÓëäbÒàÜhÓâÀ~ÙâåQÛèÖOØîÙqÀãÕgÝçòaÂïÙ½êë¾}Óô®Òæå©‚ùÍœ‰åþÓ}éö¿§äÓ»vÿåÂaâåÒZÝüÏnòéÆnÏÓÍSØïàpåæàSåòàxàÏÝQÈÝáxËçâdÞä÷‘ìêÕÐâ]Úéã]­ãä‘ âÖ¥ªÚé ¦íÙ¹œêÔ´fÒÙ¬˜èí¦–ãçÓƒÚÒÖkÛßÉ•áÖÞ‰ìÐÂmàÚá}ÛÞÖfóä†z×ÁÅ‹ÏÈØÒȦiÇÀÄœë­âˆ»¸­yÒÄȉÃÀ´JÄ˺kÓÌ·yÒÇÌ”ÜË°F³ÖÐuÝÏgZ²ä©¸É•Ù»yxÐÎxƒÒÀ„$¸È¹Cä½¢PæÈšcÑÚ GtÉÐKµÍÇLàž_HÍÊ`i̧BaÛ…`B½ MqÈÌq`²¥cZ§ÊoW¼Ïgj¯½riš»qK¥Àr]eª˜S±‹o”À†vÇœœ_†¿|uÁÅ N­¹‘Ô¶¦’௢êÔf¬ËœWͳ½°Ì èËä³²®ìÎï²éÍ´sز¥›Ð¡¡³×±¦ŠÐ®³g’« ¦Ú²¸r» »Ÿ{»zš¤˜dk¨ti¥Å‹d£va"±´|@„…kYpª–‹Ã–|•¹ŸTn•|•·–¬…‹™v„˜µÞ¶ÁaA¡~ ³em’Œ|¤±vZ–¯„‚¶‚|¢½`®¬¡w‹—ƽθ­Ÿ×¬y‰ù«½—ȪÚÐÌ™¡¨â’’©Ñ…º‘çÙÓ·Ø¡±ÜÚ¹ÙÔ©­çÔÚÚéÂîáòÞõ²êëéíåÈî’äÙ¿–ÞÎÙÎîßäÞîÍçÏèÅÿìÖñÚèãòÍÿÖôÁæáúØæçÛáñØîÚõÓÏãôáþçï×àóÉôçüÆæÿë¸äåó±äÕé¥ÓÀÖvæÓ­eÛÔºŽ¸ÎÙÍÏý˜ÌÖæ·ÜâåÏÂçëÜÝ÷ø¸¿Óàó©úåÜãðèÏåçݼíÔÿ—ÚÑîŒ×Èõ{×äå¸ôßëÑîÒ÷®íßøÉÚóéÒÙ×ÿÓîÒö–àÎøÄéÚïàÙáá½òÞþÈÿÚÝϹ÷ÖÝßÖòÒ¦ÖáÙÍößßÁìääs÷íΑÿÞ¾´ñฆñÇÙg÷ÚÝqàìébèß×]ÞÖ¿`ôéÈ_ÞܹêÍÄMÑÒëèÞÜžÇñê‚êãî]Úèê«×Öç´{ÜÙœ¹äûÁ»èäסàæ¼g÷ÙÕßÿݾeßÍå˜ôäÖ©ýÙ»cÙèÁ½áßã¯ìôîoÛÑìwýÛ¸>ÞÖ÷–îØé­æçàmàÐاŸéã^¾ÜémÔààU¡×Ók¢ï㤜Öß°œâÜŸx×ÚŠuëÙ«—×Ób€àâ½nØù¹Tää³pÝç›Tì×¢Qçð·]ÈØŸPóáuXÔÍ&µé®¹êœºéQ8Éê¯,ªß£ ¦ô«œÒ¦ºÑÀ!¤å¬(¥ê¥$¯ä»${æèEYØÒ=fíÃ6ˆÐ¶\CÌÓ\DʼOWá·u(ÍÅœƲŽ ÌÕw0ßעΫãÑŸC“§–7só¨J:ì±:=Ê£:ä¦ 4´·H¯Ç8CʶYlÊÁPrȼNw®¼U?ÅÖS>žÔs=ŸµQÁåsHÆÍ_3ʹ’Ï×…YÙÁF ÑØ„#ßñ‚#çÃa1ÛÕj&ÞÖ©Êß²Ùï`6ÆÞÉ'Ëí#¿èš#ÔÔ˜/¨ïʹæšW¾Ãš)ãÌ©¡î¹('Ê»Râ® ºÙÁ=4е6$ÝÇ@/¿­4<›æ=4­µ4%¿Ì+$Í«V!®ÌX4¿ØT-°ãW)zì‡(Õ¹c\ß>3¶Ïz2gРZ³·ƒ»€H¾Û®? Ü© uã§LÂÛÉ9©ç×4¢ÁÀÎÐŒ$ÌÈÊŠdá¹0›òÓ`¦ß¼5™ËÞ5€ÜÞ©‘çÚK­îÐ|sæû«UåîØÔâáµÑëê¸LìêÈSØÞÆLé×Ó]¾èà~¸ïÃN¾ùÑYæÝæ±ëñÚ[¹ìåŸìÜþS‹êá±Òêñžÿë™Ùåâ¡ŸÚöÚnëúðÊòêÏ{ÖÞÒS×ÝËEÌïÑDÔíÏB~ïòr³Ïðp¦÷ÓwÔã쌂èðÄËî俹àà›{êóÁ]ïã¶rêå®±äâßXâáðs¹âÌ]ÊÚÍ=ÖìÆqÉèá`¸ë×ZÐåéz™Ùê}ÝçíyÁðÝXÑìì‹Žîìp£ëéœÚöÓˆ›ßñ¢uéÕ“ï딫Üç¢{êçÍBðìćÜìºvóÕÑsÞíºQü×¼dç×äjàéÙ_ÔÛ¼vïäÅvîêÖ\áÛÕZËÚëgââ¿jÔâÓoÑÿæ\Þãé~èÚÙ‚¶ÞÙ¯á÷±³ë䦨ÏßÐmðë¹…ù梂÷ÖÚwðìÇyæâÄdúñ§…îãØbêßßiæáÝ`ääÙaóØïzêÖ½fÝôåsææÕ{°ØÜâÀïËßÝuÌßÛ®áä|ªÝÕŠ³ì䦸ÑÝ­’àÛ¬¡ÝÞ–½Éô¥‰Ðõ»fðÜÛzñбŽø×ÃÞîÈlëàÆŽæÿÁdÞ¦å Ç¾æ ÓªšÂ»ì™ºÂÛÏÃڧҾьؼ°¼¿Ï³ºÐƒÀº¦†»ÀÆvÑÀ΃¼ÌÆ‘ÇÂÏavȺn>›µrŒÉ»rnÆ«•F¯À­=л}Â͵XÕ®³:ÔÄ eV«¦2}¾¾md»•sYÁ^T¯d> ­Yuƒ¼J_¥Tiʺ€q¯Ìuv—½dX¢µ…[¦­U`¬|Ÿ¨oŬ…Ƹ‡†Ñ­œOˆ«‹„ÅžÙÆÉ«óÍâªÙ¹Â±§ÒÚ±ÍÂÖ´ÜÂÃñȵ¦Ñ¯è—ÿ´Í–¤‘Ѧ”Â̯¼¥Ê®Ìc‰¬³ÅĬҚŨνޑoq„²x|ªÄ«”—ˆ‰ž†„“¦ye‚—j…~Œhy}xh†‘”xgx‚v‚rˆ‹œ‚t€bcœ}©…Œz“Œƒ…™xuŒ§„­¤£¥‰—¨Éœ§œƒ¶žÏ¨–¡ŒÙÍ„ÒÝÖ–ÀÉÚÅ­ÀxÀ í“œ”ÕˆÈÝ柹·Ç…®î»~ªà骻ÀÀ¿ÝÒ·ÂñÓÜ‹ïÕéëÜÜÅóåçì§÷Îè›ñÍñÂðÏÛ‡ÈÐû¡ÅÊÅf²¡Á”ÙóëÆãÇòÉîèáÓðÖéÄÛóçØòïïÊòçÿÞïæãÛÚõÞàÔôïóÝìóÔÒôäéÆñÄËlÚÞÛjÛãæy¥ðãÀàÉp²äؤöÝíÍÇóõÒÖõðУîÍðÊò×òÇÿæÙzãôÒä÷Úñ£ãØçxÀÉÉfãáÌfÓúå¢åÑäo³é° ÜâÐ^‰ÚèÖÿìýÃôäå·ûØÿÆØã俾ÄôÐÕóì×Öï眑Òõ§¥òÔì­ƒïÜÆkèÔÅzëäÛ­øâÔuãÓÌ[ôΣMëéÚfâã¶LâŵgäâŒrëܼPÏÚÏ=ÉÝÜRóÉ°BÖÛåSÖèí€ÜäãKáåÚX‘ãê„oÑãšÐî–¯Ìá¡_ðÞ¹uîå£_ôèÓkÙîçÞìÏ®øߪ†ååÞmÒòë|äæØ íõ±KßêäQæçŸDêäØZåìÔ‡¦ÚÚkÎÍÛV¸îòiåáÍNµæÒg˜Îða‰Ú씋Éñ|cÔätiîØe¨Îë„MÛý¶>æäÆbÒæ¥TÊñ“Oáí¸HÞè¡4ØðÔ&Èíf.Óñµ!¬Ú§%Îï+àá†ÒѶ³å£¯Þ¢¿Õ´ •ÛßѬªäšíÆ?qܼ%^íÁ6rá³*IÆÐM2ÔÔSAºè>'èÉ“¬ëœ¾ë{ðÒcÜϱ¾Ó¡…Ý¢5 ì™NÁ½^Æž(h㯠TûD­À$I²®(FÕÅUMÆÍ 4ɺ;aéÃ9*¹ÒF&¸ì>#ÇäL2äÝ;̯‚IÍãtÎÞCÑÏU ÕñÍEÏìx&Öã]8ÞðŸ¶êÈKžë¦1áòÈ5ÉÙ·8Ìç¦$­ëx)Àõ¸"ªê“ ­ë¥ãÜ•+ÏÆü`ºÎÊ5‹Í¼!PéÄ5ÙÐ(³ä­œ SÍÌ95¥í+!«ì3%àÄ,A§Ö>žäW¡³2$ŸÖUŒÃo.Íâ]GÉÖP9¸ÆˆÍš3GØ™FÒî‡2MÜ­´Ï˜W—î"Áö×€iô肧æ±v¾Íƒ<²Îª,™êåZ­ëÃ0žïØb~ßÖ©ÖчŸåÛq ÝíÆAÿåÆgÒãœsíä³¢çøÊjÊîÙRèäÁsîÞô˜ÖàâvÚçÇ2ÅäøÊååæsÂçòÊñçí~—ÿð¤‹êæÎúãËåõê¦ÓÝÚåÐòîñÎèëì÷÷ëÝÉöåÓ?ÓðèhÄæáaÁëæ ²çÕ·ÜØ€Ïíì…¢çì¼ÊúêÅÔøì°§÷ß´gÓîË@öä¼Íâä±lÚæÞw£Üç€ëêÕ^ÿíÈ_×âÞYÎÚëlºßà€¨Ý祒Øã…¢øämÄíæYÊöÖ²ÍàÒŽßó‹§ñôˆ±×ç‹ŸôõÁíßè‘—îÙÄuÄݲsúí „ñë¿gîÔÊ[èÑíjëÞÎZíÛànãÖÞ[äÑˉÝìÔ„ÛéØPàÊÝ{ÃÍÖ?ÖØÙgÈÐçW×ðïqÒóêsËß䶚âߣ‰ö库áñ“èàÍ”ïâÑãÚLJñßÒiÔÔÞuìÖË‚òå·xÐÑÛsîõåkÚêÖ}äÕâ|åÑïrØäõnàèèxåØÃY£ãÝc·ääãâÝÞãܨ§ïä« ÏÔ¤™îÏtÖ๠â×®¨ÝÛª†âØÍ~æÛÞ„ÓÓÅŸØÞ­ŒÚÎàsÝϸ„÷Ïâ{ÿÃΤæЖ„ÄÉљѯĒƴ®¬¿¾î±Ø±Ý©Ïºà©Ð½ãŽÚ®Èy¼³žXÅÉǔܼ™hÀ̽Sü`ÃÏ{ÁÚ¼~w¼–ƒ¤ÔÄl‘ݪžV»½ÜÇ.˜ËŠ¡Ù¹ÅU·«¹Ki¨ÞQX«¼h¾¥{N¦Êd?¶§xm¿Âf\ª¦WQ±ee™§yn©ÍŒpªÔm^ Å‹y»Ã\w¤’a„²—Y‰ªeu•¯\¬‹WĤºG”´‚´º¬­ªß¢Ð¾ÏšØ׿©ßÂÒ¨æ»èÖÐÁ¯ÿÖö–úÃ͘޹åÒ·Í’ç·Ú•Ä Ì²³ŠÍ‡¼¦¦¶«™¼‰ŠŸÇ—žŸe}•¥‡ŠœÊµ_wµ¯§­b}¡—¦t‡g±“‡xƒ}™hsd¡dœ”˜`wh„j`˜š†u”ŸˆN³v˜¶‹yª“}šwˆ›¡Ë™gtŸ£¿zÐœ|©³{ËÐÛ¬»‚À•Œ¹ŒŒ”ŹֆµºÝž§–¿žÇÅã©£ØíÄÜÎᦢœ½Žµà×ËkñÁÝ£òç°…õìÆÌìÖáÆñÞåÂíîÔÕðÚÝÀðâÿÀÛ¹Ø{ÒÂëÓñÞá½ß÷ïÃëÑïÖÄüîâçÿðàöæéãòäóÃðÝÝõÞúÎø×òêèæíØíÐø¾ðnßÝã‡ßäéyÆÑ뜯éã´ÖÚÕ¡çÙç¾ÞñÕÝãÙÎ×åçàÈÕñèÕ çÑæqèéÚÎòõÑ—æÛð«ßàÚœÜæׂÖàêÌüÕâ¢ÎëúnÓØü‘­àù²§ç÷ÂáååÁàáî»åðø©¥ßØ•¯úøÄãÜðËêïÝ’’ããØòìêÂÉäØì™îòÝœóðÓ»ëÜ´béÙÞoïåÐ[åÜæeéßä]ØÚî—õÔÕ¢îã±OÏç¿2ÙÞõ¦ÐðÒNßåÖ[¹ËÚDÇèóuÕîÍl½äÍ—zÅヮíè–™ÛòuhÛÛºfÛßÆpâæРïßî–ÿáÁMîÓÙ`ÎÜÍ£èãåbÑàÔ\Ûèçuúæßo×Þâ`ìëç~Üßí}×ÍÑ\µøÙ^µèáÅéÙQžÑö¡˜éÝ®’éÑ»”ãÊ©aåá¬fÕÚ£‡éÝœlëæ¶WÍâ©@Ëé¢rÕáf1Åß½IßàAëå¦3ïæ•$¼Ü\¡î¡)ºè‚Æá_#çÌ àÁ6¡Þ¿=²ðŸ£ëºšîª%µêŠ«Ü½#‚áÓZÛáNÛÊzÆ´B$ÍÅ6VÕÝaVäßÙÖ–)²ÞwÊäm?êØ”ÍΰižÄÊAð„!3»£J:Ǹ#Gß!*Öš&.©Ú¸À3FĹBDÓ¿+]̲%"¼É"%½ÐC&‘Ðp'³ÛWF·ç:ÑáG×Ï_·ÉsÙÓL%êàz Âå}ðÜj%ûÖ¹ãë­#ÈÜ‹Üõ¼*äï³Öí…*ÚࣿÎîT™Õµ·å–ÇÖ¢ŸËŸ~û³"9ê½91Ö»%›éÓ2rÀ¼Vì£&oЯ8&Ê×I¬Ê$7ĽJÄ",¡ØP/ÍïB!®·†à!ŠÛT4gÑl0—Øk+dñ¢KE¼“/ŸÔxCŒÖ›ÀÞ£`Å•I±Ê¢Eœï×™Êà#•ë¥¨ÒËAŸãÕ6uÙº „ø½D¦ðʃ¬äÄK§ÓÈ=Ÿåߧœßè­aä⪈çè˜ÃùðÚsúôÉbáîÀ˜öߧbÏáî‚Ó÷ºHÙë½WËåÌx“ëãÅéñâŸ×ççÌâßñÂêåéžîäðŸÞöä§öåÔcëáçÌìâßÇãÔÑGæà®=ÌäÖXÜëÛc…ÙÔ€¡ëêw´üÎ\ºàìqãÖy•ç湧æäÐÓåêÝbÿë´¬îåÃÀçâÌaÍÕØA¾ÚëGáâÛ\ØôÉÆáùY¼èÞ^ÜÞßiªÕÝž¬Úæ\¾ÛéHÕîÙ‚ºñôœ¢Ùò™‡éèrŠû㣖ðë´‹óî„Ñì佄ÎòÖsõà»lìì³éîÙ~óÒ†ÐáÌ^ÿÝáméÙÓváãÞiäú¥ñÛÝ‚ÒÙÜ_ÉèÚŽÜêÉnæÞínÕÑÐdÔÚámÛâëØãéæÁŠâ瓦êÇsÅÎÏÁsÛé̆ïïІîìÁkææç•êÚÄZðÙ¾ íñÝyâåÕ÷Ï݈üÐÓkààÛˆßÕãaßâìiÞèÝŽ¤âø’ÈÔánÉÓ¼sæÃôƒ³ÙÛ‘¹ßÔ±Àâã“ëÒ½©íغåÓ¬ŸÑâÔªäÚ¨wï×æ¤ÝͲ‡ÜË¡ƒâÖÌ—ÝÇ¿âå÷–ÖÀ͑Ƶ§qÒÏÒ¼ÙÐØƉ´¼º?ÇÈÓ~ìɺÆÈÖ•·¸Û–¾¬ÝœÕ¸›<ÔµÞ¼¦ëÀs§ÞÄb­ÔºDêZ‹Í¯}¥Þ³–×¼»NÅÉ‹Ë¥i¬ÔÂ…eÈ´¼H±µ­VÓÅ»Oƒ¼a^U¹žjUÌttl³g=M–žhj ªYVµ®TU³Á~i”ÄuhºÄS_¬ºfu™©yuÁÌŸSt…r¦ÑÖ~À¿¶‘£Ò£šTÉ‚ŽÈÍ̲˲â¨À¨ä¾Ø¥õ³È£ë±Ø¢É§À´îÁå¨Ñ²ÑŸè±Ï¥xtò‡ûÐäÄßÃß¼tq³äÁ¼§plŽ¯Ã|¿¬n{€ˆm\œÝ‹oª¯³pŽ’>™—°y‡¢žžŽjB‚—€…¬€K†u[zt¼¨®‚ŒLQ_·c‹\™}ub‚Qt‹ƒƒ…gŠ’„~œœÂ–¯€yŽ•©·‰à„¸†—§“®—m{¼”˜“´ÅÑš²¨·…»{Ê…´ÜÇž›Æ¤®è‡•¬ß¡¬êÛ§ÕÔЦÙÓáÉÕäÖØ´áµÊ¶ùà­Ï×Úæ“ù×í·þïÝëæÙ±ÂÿÒÿÑðÍÛšÎÌÓŒæÏåÁáÛýËìöê¾ÙçêÝÿäúÓêÐñÂôáÿÈääôÁÓùÕí¶ÿæëÒô×ëÚèíèwÛÒ¥nîɾgÚÙñ¨§ìÂiªòá|½Ò±‚àËãÌ×øäÍàÝÓíËôàÍÙíݲyßãÏæÜø»µØÞî©õÇÒsÒâÞ¥ÚÐþ~ÙØïlÑØßk¾ÎÜrðÛëu³Üó¾×ëÁèåõÏìåëªÏôÆ¿ÓÕª¬èìÃÍ÷ÙÔÇÙêØÅæãÀäèæà³ÖÖ§nÕËÿ²êṂáÞÊsòàÛ“àäÒ]ÊèÆ\êåÉgæá³UÑÜ‹rïâÞbÀîØ]ÉÛã›íóÄ]ÔÒäcÈÙÞaÓäØVêàÊ^–ÞÞ¬fÓÓÐ}ÄßìÂiáêÃ}çÕ©kéåÃmÞàñ§øÖ¹fä⪦òßð‰ãóÜmãáèsìÒÄYâ×Û‰ÝÝÞHÜÓÈJàñÈpŸàÎc°×ÇR»ê¤=áàãS“ÙÝf©×뜪äñlˆåì˜páÕ”–íÏ{¥âÊtIÂÙ“@æÞ¥IÑÈ}dåÝvAìÜ‚KÏÒ~I×ä®Ñß~ÅØ™ ¯Ü­$®Ñ›"åÚ©*ÈáÇ*´ãà"ªÚÚ.¿ÚÆ;wè£ ˜äͦó°¹ÉÇ/dòÊ?qÆÜ3‚ÄÑoÂâ22àÐI:ÝàGNÐÒ•¼â’XÄäq)ÒíT ÖÇ‚«Ý£$£ëªÞǾ.¤ä­1lÒ¤qÔ§4Zи-&Ĥ-;Í£IrÜ´Mέ)Yã°VÙ¼-qÅåR1·¾s?¿Û;SÖÓ.X×ÓŒ0½ánÔÜr6÷ÈqØì¶%×ÚL)Íð’3ëÜç'¼×®ÔÛÓ3ãðp%Îõ©/Òä¡3ÖÝÃ.ÈØäí¨TÃÊÆÔ¹–V­ÐÁ)¡Çº?&ʸYܲG0ÏÓINïÈI|ÊÂ6–ÑÊF]ÁÆ+ËÙ,VŬA´*ák¯¢*-¢Î;@’Ä|.®ÔNEÀÅ[G Ø”&Èð‰(·Û¤,‰Ïy8Âȼ×ÞŽ<Ûq1„ÒÍg_Ç—o¥ö¾0 ×“*–×ä„¿Ü¡0—ÝÖ(¯çËGžßí”õÜ…÷å…†èÙNâÜÊSìâÁièÞªWàèô×ôçä¾ëÚÉuà×Â}ÝíÎH»êãXäÙÖg×ðàtééîÑöøà·ÞìòØÕêð’¬àéêßîç–ßêãʘàúÝÊÿíÇ„ÞóàÖïïÛa¸ìÛWÎïÈVÏàß±«ÐÙ§áÞzÄâÚjŽäêÛ‹—ì݇žõÝcäå±ÆæùÁÎÛå»ÙéÔfìÝÔTÊàçUÐåßjÑöÐZ±ÒðSÞÌäpÙÛ癡èÓ§ìÜjßáÞk¤íñ‰«ÿÚ‡–î╶Òï®·áö®âäîªÁóïÞÕãÙÞœÙç©Xäð«€èéÇt÷ÒËhÝÐÐbÿñ†ŠüÜÑeÜÒáOØßÚŠÞ߶gò͉âÛÙ^ÀíÞ^ãßÖjÞîènðÞåréðêUÓÕ垆Üì–³Ù寧ëì¥ÞÐÆ·ëÏÉ~ìéËŸúÝÇ`ààÌŠêι‘Õæ©}ýá¾_ãëôyôÎå•îÍÜ`×æßqïÀàuá˸ZÚÛئ«àÞšªÕça½ÉÕy¹Üð’µÛ훨×塾ÚÛ»¥à놚ÏÚ¢¶Ì×›ÜáÕnÖÖÖ~ÖÛÈŸáóÓÖ¿ÊtÜáÆŽïéÏ€÷°Ì•Û²©kƶ¸~ÌÀÉ×Á²›Ý»³ÐÂŽ4ÓÄáà¼Ë}ÖÆê»Å›[Ǫ{ÈÕ›LÀºÝ˜É¯ÖrÍ¿¯&²ÐÂRŒÊ­c>»«ƒ‰à¼nR¼´¤3¼»‘@Ög¶Ä½NnÀ´]ÆÀze°®bdǯF\µ¡[P¸x[¶µ‡Z²¿bK¦Ã_eš–oc¹yy–ÑpWˆ±ŒFÊÅ€p¢Í€z½ÂË·Á±—tÑœ¢kϾƒÍ½Ô´å®ÿï¬èϼ£è´é¬Ø¯Ë¥ã¼ç¯ô­Ç¯Õ²â»É˜Ö¦Ý«ä‹¯xë©ÞÊ㺘j¡|ÿÓÇ°µxƒ•ÉqH˜ˆn‡º€j¤¬•Ö°¾‚´´œirƒãÃÅ£¹™bgŠwe®h^”UR\¦h€†ªwiiªp7¡“›¡’€n”š™£–il¶•_’¼n€›¯”‰–«tÆ„áš¹wt¢³¥ß–Œf›šµ§ØŸ½¸»–¬­å¦Ü­±‘œŸíºÅâÁá»í®ž½×È¿Ú×¢¤â½¥‹Ì´ðÄøÄï¤ëÚãÁÿÆæúê½ì×àÏàÁðÎЭæÊÕ‰¿´ÚhàÄôªøÞà»þóíËçàòÕúÊäñëéÕâÚûßò·ÚõÕìÞÓèØíÖøÊïçûËÿÈæÎäÚàpäÑòïÖ¯aÛÓ绾äì¯ÀÚõ»ýæÛ—²Ïî×âëȲÉâ峩âÖìµôãÓïçÀÞÕÛôÞ¶óãÓgÞàݪåØø½úÑð½ÙÙÝÊëßñfêÜòˆÓæᯣÏàŸºäõÂïÔàÆÒÚÜÉöáÕåÞãàÏüÚìĺìßÄíÐÝÙÝÙ转íåΪèàá¬ëæÉ“ÒÞ·fýåí¥üÛÏWØÝÚêÜzïÊè_åãÇyâß°wéÙà¬ïèÜYÕÛæWëÞÕb´ÑËUàÔÜ_éßÍfÛßà²éáаäÇ~œßã»ÂîóϹþðà€äæμÿÙß–ýÌ¥­ÿÛÑšõß©eääÝzíãÚzîàì éâßtâèîÿâíæßì’ïÖÖ©»óܱÞäqÊÊõ—·áæ™›âÞ˜£ÖÓ´µïÕ¹—ÖખÞç«ÉÓ¢‚ÓðÜm÷è»Xáó¢qÔÙ¤UïÛ™=ËË…<ÆæŸKæÞ’ Òã‘0¬áªæ’ÀßY,Ö˱ج¸Û¶¦á“¥Þǣ䨙éž&¸Ú¨%wâºF\éÛ5[ÎÙ5sÚÕP0Àï>=¼Ë\OäÒeÆÛ ßÓ†"¶Êk>Ö܃&•ã°»Ï¾ ÷”4QÎÎ2Jµ³E:â (w×¥ ,³À8Ë´[_Úµ0V¾Ã-Mι71ÃÒGz½ÐG<¬ÐoË¿]@ïÒ[ZÅÒƒ ÖÛf4Þ͇ÌÒK]í×~È÷Š#éØ‹òäÐA¹ê®®êÁ*Èê»1çõ˜±ö¨Æã°&ØഴðªÂñ²ZÅÏ®RŠÎµC$ÓÌErÒ¯A•Ô¼ƒÞ¶rë§#CÞ¶@AÄÊZ ÀÒE%±ÔP$Ѩ=!¢Úa%™îZ4Îl0bÖo,¿åg0žØIX¾×x4<À9#Dì¯*è†I«Ù£!ÊÕ»*§Ôœ+~Âœ+©ÏØ—Ó»:§ê¢8Áμ+îÈN†Ûµ9°àè}ŠÕä<˜ßß7–â÷mÁâÕsqÌèrPËã¹aãðÑååÞÒZéÙ¥`Ýá²SÌÞÙc½øÑV°åÙh´ßÇMëúØ|òúÙ·íþÕ‡æðÝréáò³eúç¡ðݘˆîã¿­äï×”ëåõÍÿ××oðéãUÄÓÿZÎììpáãÔ]öçw•îðy´õËdÂÝæ‰îô•…Òè¹zÿÙ–TÜç»TïÓ΃ãù„Âàá·`ëÝá{ÓäÚGÕçÕ\ÖßðfÁáßL¥ôégÎæàxˆïÚl¶îçuíçÚ\¹êõ‘ºâì~îÞìÞ€‘éØ‹}íé­ôè¨îç™ÝíÊSáéÅbÞ綠óâÜpã÷ºfÕïºqØúÚàäÙOñéÌvÛóËÙäÞgÉö¢FÌåóWôßÛhèÞÛtÎãòoÚÐëlÞöÑ ßÜ’t÷öf§çê~›óóª“çè‡üëÁ‚òóÉbâîÍlìó¿qýÛÍ€êìÝwáíÙsåñÞ‰ãܧïîÞvèéìuâìäMÉåÒx™ê醱òävÊåÞMìàçž·ëË®¹Ø櫼âẗãØž›óÜÁ–öÕ®«æÒizäáàeãÖÈãÚ±áêÈÚÒ©ŠàÏ€„íÛ¦¢â¾Û§ØÀ؛ش؃ÐÃÇœãÂÀ¡ÔµÕÓ©¼Œà±à Ü´å¬ÏÄ֛¬Ì|ֻҫγ¼YÉ£×±ÎļFº°Ñae½»v¨Ï­t‹Ü¿p¢Ö²ŽeÅÀ«pÖÈ”RнŠcÆÆ­eؾºVÁ¶ÈGÓëgGýcMµUiÉ­YIÀ¾Zw–¤^`“¸‚Z¤½[f“³q¯Äln©Ð‚k³ÁpmÖš‘˱ƒˆÂ­m‡Á®Þ¹Ï´˜z¸»”œÅ¥Ÿ¥Àªô²ËÂÌÔ¸›ù¶èªä°¼§ç²ß¤í¯Å¦áÊâ—î¶Ô ²¬Ì™å¶À¢¥„Ö£¾³ß®·nÇ¢¸ˆv¡¹|o’a‰ÂÌÈ®„›¥¦§¯ÙŒ¼‡}¥­žy‰Œn¶“in„g‹£„[Šb~q§‡…“u™H‘Q¸ª•ožã ‰­wor†e^°}Ÿ\†Ç‹¼šž‡Œ‡Ö–€Š¾Ž–Å餓·°¯Ð–¬½¹š³ÁÖ–ºÔÊ£Œ±†ÏÐÍ›•Ñá“ž­ÞšâµßÊçç–›ãᨉµ¯É”çìÔàãáúºûÙÅÄß涅ÝÛÙ{Ãëܾ×Åí„Ûξ…ûãèÉðçÿÉûñùÐêçò»ðöðØáÞæâÏý÷ÑÌßçÕèñàéáé÷äâæõÛÎóæàÕææàšÆÛû´óÀæÄÅÍÿÀªîÚÄáåè”ÃÇô¬¯ßùÃÛ×ãÝÈðÚÇÍîààÅêãØßäòšÕçðÃuäÓѳüÈÿÁèÞû¸ðåùÝßñ²çäç ãÀè·â÷mÔäóÑóÚ׬áäõ‹ÊÝôÌÒÇíÎÃíõ¦«Üݤ¤åýÌÂòØÅ×íàÇ’ÐëØ·ÖûѦøëljßì·wÜ×Ù®îÛ—Yòß©gàÄßWßðë¸äè¦ÁãÝì¡çÒ²˜ëäõ´ééÁMÏîÚ`ÔÒÿrÕÐÍ]ÜÜ댉Üß¾~íáU™ãò‰¨Ñå}sìßоæê»jåàÑ©ðæ÷¥ìæÇfØáè°ùäÉdáÝÉNÕîÞ³æö‹påÜÛwÛðë|Óôæ~ØÝÛa•áà`´ßÆ>ËàÑBÐÝêl¥çàˆ±ì溔Ìã™|Üßgqòì[|ÝßByáÏfOäßÚdËïˆUÉç]åñè~Ü×3áÿ‘UÞñ½éäŒ8ÎáÇ5ºÊ®¯Ý¬ÖÞ‰ÆÒ´Æë¢ ÄëůéÄ2œÈÓ Æª¹Ü±ªÆá!tÇÏ8dåØ,€ÐÊ2¸â)jÀÇ^Z±âZFÓÐŽ±øŽ¿á‹0·Ùp$Ëß²/ÃÕ™»áŸ7Õ¾ŽUŒ¬°2—Ѥ+ŸÑŸ –Þ¯Dþ9[ÀÇ=€µ·'CßÆ+qôÄ'Wͳ)·ÐC%áÄ^@ØÄMUÚ¿-GÓÙ îíuÒãbTÛøo%ÖÕ·"Øï}$éõ´;ÍÿÄ-ªõÁÆä¸-òÞ‰ Îé¸(ÀÕ›7µàš ²è¯«ÿ©-ÑßÅ ð͹#ÂѸRä«6UÛÑQxÞ½:‹Ý­G¦ØÎ :ݹ41ÜÃ$6é¶:*ä³#®¼H!ŸêK/¯ÐP)¼Íb¸åg?’ÕtKŸò¿_£¸G+‹Î•)ÆÛ¯#8ÐÇ4ê°yQªÖÆm‰à°b±Ô‡C¸ä£#cÛìióÀ,¿Ùž@¼÷Öd³ËÈQŽÍôz«ßÔv™èÓc­Úë•éæg®æì´cÓã²X×ëñþëàÆhëãÖÅÛðÖªèëĵåçôíáîÐFÊáÜ‚Ößûà÷ßöÂðåê§ëóëÂïåðÄêóãÅÝõâìòíî¦ÖâðåÎâãôíêñêøöèÆjÕïÎtãÓíEÂøÛLÕÒóP”âÖ«¼åè‡ùßØu¶æãžãëã—fÿø®ŸèÞ½½òñ¼ ãí§Èåö¯ßæËgÎèßOÄë܃ÛóÅNÝéájÒßêqÇæÃb¨îð˜Ôêú}¾õìuÓÜãqÆßljÁéá—«ßóÁíØè ²îÛ˜Òäã’Žäè‡ÉäæÙ{ÿéª|åö°™Ðê³nößÆÌçðÚ`×ØÏŒÜâäƒÓÕÚTæíÖyÙüуÜäîRÖÜéÑìÒzëÝÜ^¸ßårÐÙé¢Ë×僽ÌÓë¹›Ù剰èä ¹î÷͇âçȤÛÊÉŽëïÅ^äïζàú³xéí¸“éßæmïæð…øååñãÎxÕÝðƒâÚÕzìàÚ~ôèÜ®¾¿îÚÛí^áÄïoÑãõ¤áì롲îÕÉ»ìÆ»ŸÖؾ¢áÿ¤©ÑૹàìÚëì¹xçÕÏ‘ìÑÚuðäׂááÙŒ×Òâoî·Å¢ä´¸ŒËÂÅuѨŸoØÉ„JݵË|ó¬{ؼ؉Äк•Ö±ŸL¹¯¼…ƪãžÍºÀsѳÀ„½ªÌ„¯ÂÖ`µÀºscÜÁy«Ê§{^¤²G0ͱ¶vÄ°¬XÊÏbÌ¿¹P¾±·LÔÁ¹Br§³^ËÆdƒºËReœ¼[l§Êmk–Ñll£®™ašÄyr³Ð‹PuÃ}v’ÎjQ£§g]‚º¡T}­„ªËÀ”w«_¿ž²yÉ®®^Ó°“²Â³Öººæ·É´æDz©Ú¶Ö¥Ø³½œïÂÕ°ôÑ°µéÓΚ‘|Ô™¦”É’¡v詾ÃèžÀ‘ÎáŸÀ’Àƒã´¨Œz¤¹‘nž}ƒ™«p—Š¿†Ê”¡’–‡|…eb½©x– ´b‚Š|Wbw€cab‹JŸVŸ„“CsXžš¬•“§“Ÿ…‡–«œ€È}„ˆzšÅŠ¹Œrš»Œ›²“ƒÅ}¡£Æµ¥Ís¯|«™»Š³º»ÑÑÖª­áó€žÀá–»×݃œÜ׺ÕæÚʳÝÿÊÚåÑÙˆçéì¶ôâé÷ÇäѧôäÝàÙíâÛõÌÙßçÚùìøȺhÃÍùÆ÷ÜßÿôïãÐ÷ïò·íÙâÈïíïÄôõêÇÝïéìíçÿºçêðçÛðìîóöïëòíÙê»íçë¼ñ¿Ó‚Ùû׃Ý×Ïn¯Üö½ÖÙàºûÚâÏÓÖçÆùÜÐÓâÒÍÑìÙâàåÌßÏó÷ÏåïáÚÊõå݇Øàí€ÞÝè¬÷Øè¸æ×íµÔÓìŠÜðë©ãæôÇôàÿÄØîíŽáÑ÷¥åèÚ¼éãìÑêÖöÒóÑúÏÞôéÂôêò¿Ïæê¦êááÞióÏËëÛÖÓíÜ´uëÛ«†æÐá~éä™jöéÕ„íáî›ìÏÈ^êÛÆfâÏÅOÓáßÂèúŸðÔòÑßð–ñêêËëî°÷ÌÚ„Îì䟥æÚ³°ÜÃnsÜàÈtâéײöúͬëßê‰ÚéàÈäó·|ß渟öãáeæÕÚ@ÝêØsÙìëÝêÿàÙåïØã†ãÞ÷¥Äð^Äàæ‚ûÊä_ÂåØr¿ÙÔx‡ãæØžkÝëdÐç—’ÖÉH]ÁÖ<ÏÙm"ÜãÄEÈâ¹PèÖË]Ýߨ5ÞÛ°+ãð^áÙu%¿ä¸%¶á„ ÂÕf*ÍË!œä§)«Ùª °ù’›ä³ Žç¤œÍ¥$¿Ò¼-ŒÝÊ%XîÐ"pÄÞ]éâ74×ë;%õÎHLÕÒc'ÀÖ‹Òáˆ$ÙÒ`5Ð̈ ¿Ö¨ÏØ¥Ä̉ ¿Ý½:­Ú¥ ¦‡?<à¸Ì» ,ÅØUëèҽ+NÖ´д`c¢é8R·²}'ÓÐV@ÙÖE=ÓãB*Ýé^-¸ã|%ÄÞ:6ïÚ‹$æã¡ðØ|*åî]*Üë«åáÉ,êâÚ&çé†(ÔÙ¡ÍΈ¿ë–"Èã©,Å졷dz ¸ßš'¥Öª@ø³/&À¸=´ˆÑÁ á· 3§³/+§åB §ØQ¾À7.Ä×Q%¨Á ¾Í^ÅÓ,2ˆê†EÚÞl|ÌZ1§ó€V¢ÿH\è² +ÜÐh8Þ¬(¹Öœ5–Ò¬ÄÙ{6tÓÐ& ãÈI·â–B¯åÓR˜áØ»ßÛߊ¢ãã¡­Ñߎˆáãäáa¨êé¡pÓäõ¼çñ¬dæð¬äßò§nÛã±°çéÒ[ßéÒq¶æów½ÜŸ0²ÝØFæßÿßøíî¹äîì˜ÜìéÆçîýÒèæçÖâ÷ëÇòâèÎÛéáãÌéíÜËôð´oôðìyôßÛMÀÛïpüÜã^|åØEµëÎ6°ëáMàëñsŒïÝhéê¸qïåèÀmðëÍÊæ㤈ÙöÁlèêÑdÆÔòqÑäËPèØêzüÚél»êåwßàá{ªìö\¸úè|¹æÚpÌùÎ|¶ëèz¦ÜèŸæÙoœõ噇Þâ‘æ׌œîì™|èÞ­iÿéÒRöí¥~û﯈ÝÙêRõÙËpØõ¹gëØå`ëæÎræàæŠìÚã^à¾Ö^ÞÛÙjÏåÛbÚÚÿSÓë÷_ÜÚá{×ß爭ÛìƒÎìž¹ýø“¹çÒÅ}ÿ縘ðå´ïÙ¾ië÷Û¤òîÞwñÞ±ÿöÝkáéÝ_åÜçîáÊ„ïÚÝíøÙmçãáÞîñ}¾äÜ‹ßÚç†ÛåînçäÛÞ˜Åèˬ§àׂ¨ÚË»ŸÑã°“ìω­ÅÆeÉ»ÉyßÄÌ›Õ̲‹ãÑÝtõ×ÍdýÎß„áÚþ×Ñ՜خډԶ휿¯ò«ÎÊ·²Ó«Ó‚Ò¸¼pͭʙӶۓ½»×¥Ø°µiÈ ¦Ý¤ñ¯¥½Ãj¤½¼~º½·H¦Ë¯c¤Ç¸u¨²¸¿¼Â¹º}âÃ¥vɵӱ„Øá15æäFRéÐAtÎË–%Èæ‰"«÷`TÌÐ@/³´¬ÄèŸ ¬Ñ˜¸Ö†$­Ð¦$’’œ ’ï¾ZáÇ0'Ó¹%"Ñ´B`»©)B×ÁIÑ6IÈ´%cÃÐtIë¿N)æÁOTÒ½7MÊÜg(ÌÂ:ÔáPnèÉfRõݸdØù©<áħ5Ãñy%ÉäØ°æÖ0ää³0Éð•*Ïäz#Íý¦/Ïú£AÒß®jÊâ0²ÉŸK{Ù¼SlÅÆ#žÜ«$ˆÚÑ[sáµYŒÊ«/Aɨ:2ÂÐ2LäÀ5ά2"šŠ.£Ò,3§ÉG3ÁÃW$’ÙdTÖÉ],µÇ7$¢à•Ck¯›1Åá™9˜è€6ÁÕ}1Éå³^½Ó†µÜÈ$„ÛÚÓêåÍ3ÇÓÙLÄß׆àìÓi“íÌdïØ„™×ét¬þÑŸ£àå_‘àîyÝñ²_ÞåÆ€ÿ˹ƒõÛÚ^áäÍpòæ¶jÚà¶Q¼ÛØW½ìÜuÎñÍ‚ïêê¹äâñ¡éúÑÉïÝ÷ÌáðåÛêîöÊîåóÌæáîçÓêñùÌëéìÑòâñÚÿíÔØïÜOÙôÑEÞÞð‰­èë{¯áñUÊÚÝR™ãÔ¢¥öל«Õܤ¢ìáÁºãêºuâ妡ìñº†æìÃ|ÞßèzÓæÔfÛÜÏ^ãÞÛd×îÔ[ÕÿÕvÈñð“ºêÕ•Êñãyæä×cÀØà©ìò˜ñôžËÚðž¾äÖž¼âúšºÜâ„ÃÚàÓkÜÞ¿Ê씡ð㽑õݾpìâÇkãÚÕ}âáÖ{ÝÝÜaÎжœéä½hÓÑ×dÍàà{ÏïñPêÞâp×êðxÈßéqÎÓîÒãÚ›ˆç×´ºàô¡ºÙј™ëØ­‘ÍùÅŽûḑøêÖ}åêÉméó³šïâ«£ïÓÝoçÛýwîÎû‚ðÙì}á×Ý€êâärúçËrìàÝŽÆÜóoØèô{ãÙÓhÂêášËÓÞ¢µïÔµîÞ­ÿÑ¥žÝí—®Þè¦ÙÞÊ{Ñã¾däÜ‘†ÛÑŠxÌÙË‹ÞéØzíÀÌpÿÐ˟ɸۆÃÃÏŽà²ÌœÊÂw‹ÆÅ´ƒÅɈA½»Ö‡ÌÀÒŒÍÆˈĵџ׶í¡È¶°£º·Çr¡«ÕpÁ·ÏpÄÏÔ‡ÇÍ©fšË¸{¡ÁoRÚ©”=ÂÉ<µ¯xDz—XбµI¼¦»]Ǫ£P\¢Èa=”´:c¦TX­ÃpJŸÂjV–¶QZšÚDU¢œV^‹§PDˆ¬GT²·k[…¯šV‰ gx˜“uj¯“e°´œNƒ£š‹»¥˜£Å¦|¾¿¶é¾Î»¿Èµ•ÿÆܹà»æ¦ÞÊù´ãÖÇëµÆÀÜ´¿¬ê¼á»ìÂÕ›À‚¥’°}¦Â”ɶº¾‚±©¨€y«ƒy’Às¿Š—š…ŠY~‘N–££•l‚¹› £¡|™ˆŠz†JePQ‹i|k°§Œ~š˜‚b—¤£gz­‘s–lToŒ“tqÁ¥tu¤ÙÍŽ—«~kÅŠ£»±‹Ä©ê‘³Àß÷àÅÓpÆ·é~àÙòÐãÙ×—ÖÃŽ¹ËÑ¢²È—ëèÓ«™¦Ú­ÆØéÑìÐÍnèëÜ°ÿØÄžöØâ‘ðéôÇÿÛÓžðÈÊ|ÑǽpÕÙâÉéëÈÂôúåÂö×ú»èùÍÒñÃõÕÝûæ×ìØéÐèÇòÞòÙØâæôÞëÜõÚñËçèÞñíÑì×ìðâÁÊÝ íÝÎk˜àèÅÞÚç€ÓÝæÈéòìÌÆÕáÁÑîÅÈÎåÕäßÙÖë¸÷çãÞíÕëÉðÓÇ–ã¾îšÛÝÛtãÀïÌüÕà¦ÚßÎcÏìߣìÕôÊÖÔåáèñôêåö™ñÛìÀØâç·Ôäï¯ÝÚùÄìñêÊßâóœÀêò¢èðáË_àâê»îø–ìÙ•tãßò¢íÿÙ®ëû½häè¶VãÛÚœìâ´”ëðÇYßÞå•õÿÝiÝÙÞDêäíqÍãê|ÛãÏGÝÜ«IÕÛåߢùÎŽ²ÞÖ¯£ØÜ“›ÖÞ™xèÿ¨lãÌrpÌàç•òçæè竃ØÎx]ÔÜòŠþØÝ“ðãé¡ëçà“íÝéìàêSÓÙîò×èu¶ÙìS¶Õî{Öëíä×ÏI­ãñœŸÝÌBŒîÙ£}òítÙ楥äшpí÷’HÐ×ÅFåâœpÐÁñå»K»Ë¬O×á«EúàoAÛã¥,§äŸ»Ö„Áä_HÔÜŒ(ÀÕŠ#Áå¬"«èˆ"¥ß­Šèª$¨ØœÂߺ$jå¹&Nã¿lè½*wÊÜG5ËÆYFßÆWEÚç]:Òé·&Ìß{*´ôXGÐ˫ø"¾Ø½ Õ¨1¤Ô³ á‘#€árIcåŸV1Ƕ0UÁ«BÙ¥DøIϵSGÖ­Dx»´++°ÃeÔçWKÔÄ58×êHQÒÞ\]´ß…RëÜ5.àà€>æã³ ÝÑB<àù±ØÛ¼åÞ®&ÉÏÒ1äÞÀ&Áß¹)µöÂFÞÜ›£à¾¥ë¢Ñ×u3ßÛ—ŸÕµ0OÖ×07Ú£ßÏl\Øæ«)ÉÚ¡_ÜÑÃ'¿ä›?»èÀ:Ûæ.²Õ²¼î¦µÍ´EÀæ¾”Û² ¾Ú³!Óá«*£ÿ¹#Zóß8LÂÌ„ØèhoÿçLLä¸eHÛÂ=9ÝÛª*Êß›.²Òy«ìJ Ø̪*ØÔ¥ºÊ@Æç ?ŠêÀô—,jÍ™B”ÔÆ:ÁB3ÙÒ‚ºƒ7pκ9K½­2NäÊ@AÕßb'ÊÐBE¶çEE׺/9ÀÏHFÚÏh4ÓãKNêõn.ËÑ¡ßä»)ãêƒ'Þ÷¦ÅäÐ ÝëÐ/Ýì”(¾Ý•8¼åßGÄà˜Úײ+¤¬²+ØÙ3Ê㉯ϯž¸ÂzøÍ,Ž×¯8<À±.E²¾==Ù¨$XÜ£).Ÿ“"=¶·:Q±wQ?¼¶;¬Ë`±¥92š½[3yÀYFÈ´B*ÐØn2šÙyvÕ†-ÉÜœЦyOÞÚ$ÊLJ ^ÖjO®Ï™ˆÊ½$ñË_¾å¨1®Ôäl¦èÂ;‚éÚôÂuuòÏZŸéæ‚„ÛÅ0·àæÃeÚí¿máÿ…„ÓëûåôàÒ»ðÖàÕáÿÏŠ×êãj®ÔöŒÞøÒTîâæ‹çèýáöÿõuÜÿÞ²çèê±×éäÖØìòÁäéè€høöãÎèùØ}åÿßÇíßë½îãèr×ëÖcð×ÉAÕÞ͈¢ôÖh¸õÖPÄÛãažîï†øÛÒØáôŸyâö£lëêÎÍö잃éã±aÓÿÜTÆäÛBÊø×TæèäJÃÛï›ìçýKÁèÍEÈêítÖçá`¾íÛeÅìåhßÞÝŒÓÑæ¡žãÚœÙꎂöﳂìÓŠùÞœ ÏòÊ…øÖ·_ÚÜ päìµbèó³TñãíØçÀ‚óØÙmÏß¿MçÞ¹kÚÛÑYèìÝLÔÝáiË÷ðTóäìbÈèàMÙ×ÑbÒÚÌtæÞå¦zÛè¯ÑÞ—¿àá’†èõ¡kÜÖ·sÕõ®}ðÜÉcöؼdñåÜ…äãÑvìßÓaöàÎPÓò»EîêÔAáÛºMìæôbèÜÔ7ËçÜ…©ÑÜh¾ÕßmÜäìcÀãô™¹ÛØ«Ÿã暨èÕ¨vÞè•”ãਖþÇœ¢ñßÝbæãÜ|Ëß»¥ãؤmÕ׬ißÓÑOÎÍŒkûÖ‡iØÝ™hÝÖÕ†ÖÈ~XÖÙ¹ŽðÜ´†ÆͲcÚÂËtéŪ‚ÔÊè–¶ÖÉsâÈø…âȾ‹›àÚœ«ÈªhšÆ½O¼×ÑvŠßÖ­´ÇÉ€:µÖ»•æÊžJÜÊleñ¹L–ÂÄvVâÏ–8Ùµ)¢É˜,¢Ç¡2YÕ¬;ZÓ…AUÒ¼@X­Ê,3±­OIÁÀ?Q¡ÇCDÁ¾B_­ÎN'§¹aP¯´€[£µur°ÉJVŸÉU1™»ƒZƹ—A¶×P€Í®o®ã£È§Ô¯ä¸ÑÆÐÀܼÿ³ÌÇëËìêިЪç¬Ò¬yžâÆϲڮپ͵ˆa«¦·kÉÃeZ½¦œTa¿·m…°Êg_÷nmœ›^O•‚f_®ve­¶mhŽ `lŸ±dt”ŠU9²¨ˆK„ÊŠƒ˜§oL‰©qjržtz‰lžˆ±Ï¨‰dµ––”¬¨|x™c\‘¬³°ÄˆÌe‰ ‹ŠP«’ž¾¡|—«¤ë¦¼¦Ô—³£Ø™°‹³™…—Á£¯ƒ¾ £Íœª¹Á©›¦Ý¶çñÔçÉúÈÃÍãĘ¼ËÍáñïÄóîöçóçÙÏÛÖûÇô§ÏàêÕáÓó¥ðÆëÞïôøõåâòÕÿéèÁöñöÈëôðåúÞñÓìÉýÀŒñõèâøíüÑø×ßÛáÆðßÜëãÒñÓì×ñºñ¬ËÍÝÙéåÔ«ñÐÜØÖëúÁÿÈßijåâëÛìÚÙ×ÓÚ×Ìé×ÞáîäâÔÿíá×ÚÌÚÄùÎÚŒÊÜí½óÌî¤ÕÓîÕö×ÞÔëæÐñàäÖîÖ÷¿ñíÛÍïÏï×êÝì˜àÅÿÐãîå¼âÑøôÌèæÖ²ÝÙ¹¯ÑçØÌàûÕ¹ìÍë„éáÒ¤ëìÛœôîêÆ÷òäéõù¾yæÕú£ÿàÝfèÄ°ƒñÞá•ñÔå|èØêvÈåô‰éæÒ{ÒÛëiØÚÿ³êâÅIÞÓóѨÞíÄÖùð‹èó圓ìø²„ÙåË‚×êÔ¿÷íæÄèîå}ÿÓõÃæßÀtôëã®äàÿ©ëôØnøîÐ[ñÕ±OâÑínêÛêlÙà퀥úõ«ÆÚæuÙÚçdÁßí¦´è䯞Öï•ßÝÂÚÈ©zÍË¢×ÕxƒâÙÔ^êåÛŠ»é¶ÐÚ´[ãòDåÚºQãéœkÿÝgIëØh!°à§.Íæo3ÚæŽ:ÈÞ~-¤à!Éí¬(²Î¤2â»,˜Úž)ªêË%Ðå´‚ÛÄ'jÁËBTØÑŒìÛ6[ÜÌN:ÝÝfHûêd$ÎÖŸ1Ñá’jãÚrDÎØš9Çàœ3ÚÞºQй„1«¼Ÿ&¹ô­‚Ü 2‡àª$¸?d‹Î3W½¤-…ÐáUSÕÒ3b«ËS?½ÌFMËÞuUÓÏfP¾ÒŽÓ®/µà+‹ã–­ÜÖM5åÅ/­ë²3Çî ;´èБîÑ'‹ï¼&³Æã1¯è×hˆó¼(‘ûåªsÝè°häߨAÙ뤪äñÁˆáëÒÆùñË9Úç¹FÊèï—ïóåQÇíÒ*ßðâ±×ñç‡ç×özùñî¿ìîñÓäèüÏéüÝ€ºÿîÞã÷àáŽêöÑŒóù¸ëîéªíîÖAååÑ-ßæåRŸåóižìÝT³ßánòÜès‰ññ¿áÙ²hæ÷}Zíþž~ãö©sãóÄàáÖÅ;ÔñÞ:Ïáë8ØöÕLåáëMÝìÛiÖôÐJÙããp¡óç@¦æê}âáÏ=Ñåñk²Òâ}Àäí™Úßßráá}ˆøú‰–ñåš ðÛ—YÍõWJìî®u÷䛆Üý´^ëßÀiÝè´dÖÚ»LÒâÙXèèÏšòز~éØêQÙÿçkìîÛDôâÝYÑÚã^ÒåßkÞÝâ½ô×ÿt˜ìÞ˜žòሟîÞT‘ûü”^ïðš¯åÛ„~Ýô«c×âÀeõìÏ2åü§¸äâäJçøÏKÔðäZþã°LÏáÐgÝâÞhëð×fçóÞn¿âÝAÕÚÜ^ÓçÞnÝîØa¦ãÛŒ«ÑÉcíø˜îí¨ƒëØMžÕᬿ×Þ¥jìäœ_ãÙ—cóÚ—ŒçÓ»‚ðÔÀdÜî‘zåÝé„ǸÖê»ÃxÐÍów´ÝÒ}ÞоŸÜ±¹{ÉÛÛ‡ÇÒÆsÐÀÜ›ÊÅð©Ù͘uÜÆ؀»ÖM¶ñèÅ”ÇÙSªÖ䃴îÝÀ¤Õ¶_šÐÝʧÁÄ…z×£›l×Éz Ð³QtèÑ®Iè´œ*¼Ã¬D•°¬#sγAN×£X[Ë®H6¯ ZQ³Á|;°ÆUSʸHM­²\„º·NbÀ¼PpŸ¶huÒÃ}kÒ¼km¹ÈaZ±×‘h¼ºH̆rÒÈEªÅ³x}´Ëü±ÙÙÓÇÕËÃû®Õˆæ®ø®À«óÁ½¥×™Ú·å§ì×´žÞ²åÂßÌÊ}ïÌ·]ÊT•³±Ô®¿ÆÚ«¾wRÊ¢Q`”®ogŽœ]a¬ŒSQ¿ epœ«t{½‘]e±wSk¥˜a~²„sr¯av…ŸQ“¿œm{}“lxŽ‘O‰p¦v™—©³€qšÁŒ|žœÂî ÄÁ֚“€¡¸hÒœÈs«ª«–ѵµËì»Ë ¿¸É³Šå§¾ÕЯƬӨ¼ä⻹ÅЗԿÚÉÂöÆäÑñçåŠñæÏìéÍ÷âîß÷Üâ¿é’÷µÈ–ÖâèãñÐíÅçÓÝ™ÓÏÑåùßíßíÌøÒïùïÉöéëÛï×ÄØîòáÇÇÜóäíêÚÿÛòáÿëõÐãðíÛÔäÔìðÊÞ×Û¤ÖÕíÏâÓð¿øÚÙ¼ÍêìÒöÓìâáÞíÆÉÐôßÞðÑãÉþØìãóÞßÃõÙÜßÕÙ×ÑüÒ¶­ðÎâÈéÐæ¾øËáÖøÔïØîÙáyâÔôÇÝóâ̽ÓäÚçâîÎòâ÷ØíÕÑ„ÈÖè¢ÞÙë ´èç·µÍãÌÙïâ´²Üñ½gã埘ð宓ÖÏ¢¢áÑ”uÿÄÔ}ì¿Ínïãæ‚êâínêé°|àãè±ôÞçqÞÎÁrîÊë|ðâÚÂÿé×mßâÝdÑÛâÊöá늧ÿΗüÛ¤œàé¿åéìÅôÜ{žàóʺë첶îö¦{æâ܉ùç×ûæãÓ€ÓåèÁâåÿcàæÉzýؽkñèãvñáÂqÞÚú¼ÕêÄQ¯çæ™çßøšöðÚrÀïé™°ÒÓo•××q€ãæ“]çÚ\¦ÅË•–ËÓUíê™]ú³KòØ”aêå„1ñÞ—GØæhïÐÒ5Ì—-Ü̱&ÃàÂ#Áè…'½ì{ÈЧµçŸ%ß»-ÄÞ«ãÁ¨ÿ”1Áò¡&¡ÚÅ+fÍË>RØä#‚ÐÍ%-ÉéRLÎÞDcÓæH;ÄÇŠ¸îž%ÊÚt,Öà\#ú×¼.Áȸ*çÈQÏÙ¤B¿Æ½#eИ%ç›KQÜÏaÈÂhj¿«œà¦J`ØÈ@qÍ´]jÇÑBn¾ÙOJÜÖ^FÑÅMPØ¿fgÎápCÙêv6¶Òh*ÇÜi\âÐg9ÜãÁ?éî[-ëݶ3ÇîëÚÚ¿èû¡FÇë™ÚçÀÇõçkÑÓÓJµéÃÕé¡"±´†E¤Ý½»Û¸P‹¿ß"˜Ø̶ŸW)º¨0*¼èy0ÌÛ³;vÚª%¦½”7ËÞ¶@¶ê®0wä‰Éá×D‡Ø»"©ó³(»êïXºêÄDéº2–øÍpˆåÆHVñ䟤òãwÁáÒ?‘æô¾bß÷ÔÕúá·Éêð¥aàóâÅõáÍ™èá–YÉëíÁóàùaáÞç¦ßÛäjéàç–ìëñkâõðÊíëõ·ÖîóŒŸêòëîöß¿ÏøÿÕÆïóó¸æëÒ±íëÒ”ííàŸïåÞcâïÌbêòÛ·ÜâáhÄÜõÀïïê_îäíŒðíØÆßê³tòìšBåèÀ›øêµyòæ«oïòÒcÝåãCÍîÌKñêÙ[æïßN¾åÿVèñëJ¨æýnÁÚõg¥öãVºîëRÂìã†ÍÍÿšÄ×átŸôó‹sæõ±¿ò棜çÛq¯ëäØlÜóÊYÆñ„Œèã¹gØíÄ\äâÑgòؽ]çìàfò×µBÙõåhÜòÁGëâßYÙæèVÕçû7àãÊZ×åÞ\îä×dÈßÒm¶êܳyÞÔ¸€ÝÛ§“øꀔêåÁ¤ãø»jìð¬ŠìÝÄDÖûÒiðé …õóº]ëàáQâçÔdÙïÖžÞÜÛléïæcçàìbßóçmÃé쉞ÞÛ\âåØXÝêàP¸ÜࢬáÖ—Ð܆œèá¹…æéµð䑨ð홟æÔâkàÍÎKÿ̵‚ñÔÌ‹éé¿zãÇÄVåÝÉfü×zóDZrÎÒÌ€ëúlÑÑrÝÁÖǮ뙽Ðô°¾ÃžuÔÉß—À˵ÑؾŽÏÊ摾߭=”ɽqŽ½¾Q¾Ä¸|šÕÂLŒè×~­ñ¶ruؼ €ìÀ‰jߧ^ŽÝ·{NÒÌ¡BÒΟNà³~>ãÊÈGPÞ…!zוky»ÄEO®ÄXo®ž:TнVa²ª>\ÊÓJM¬Åk¦ÇÆoE§º}WµÉƒ‰À¹~\²°^|èº`B°½›cÅ°G”;ɸپ߭ÿÍ»ÖÆßß å¼Û¡ê²­‹Ã¼à²Ò²Õ§ÝºÙ‰Ó½£yò×ݯßÆ–«ÙºßÉÒ¿²fŽ°¶nŠ½Å„\¼¿__®¬sƶÀ†P£n[À‘hf¼vqŽ³­}{ž­‹X£¨in©ªnEs¦‚œ¥bov˜ssn ³}ƒ¬}]y•WmŽ—€h©Çy¨³‹Œ“r¬Ü‘À~¬‘ª”¢Ç¸´Â®Ñ¤Ü­ž¥Õ’§uݖԽ뒡ªãšÈ½Ü¹»ÅÖº¿³ÔŸ›ºÞóÔå÷¥ÏºÎžÁÛÄàÐøÃÔÅÝÙØóÝ×åÊøÆôæ×ÛïÙæÏ­ªäïëÖó¼ùÑîÃìëÛÀðÈúóçÒõÌÝãñìÚÔõÒßÐëàåÇéñìïößùïçÎâÚÝðßßÝêØúä÷ê÷ØùÎÝÜï«ôÕáÓùÓàÛüÆÜÙènÇØõ¡àÑãÈâîÞéÔìÙ®éÄîÏãÞÇŒêÔêËìÇà«Öä×Ìà×ñÍñËÛ…ÈÒâ®òÅäÏÿÒÕÖîò«íÚëÈÏÛêÇÞÒÿÉæãÚÀêÔò¼ÆÏÝËÿÜ÷¨ÀïÙÅéÐò͘äóÕêÚä̪×óÄæëàÚwäÝè†èì‘’ßèÌøãÓÉìëÝïçä ñáÔhãñÆhÎÌó¬ùäÁkéÇÙ€øÝâpÍÞñyâßܧØåâ[ÞÝ÷§ôÜï‹Ðéæ§~ßê–Öߨ°û냊éðÀ…çó¹iÐìãÍáÕÖ|ÐÐÇvïÞÃÓõ×æ„âàæ«éÆá±ãäíÍöïânôðàgéØê‹èÐá¼ïÐÓ†›òÄjÐíîwÞÛãdÉä誰Ûí´œçí™îñЙîçµ²äÔ zé狇êâÒeòШLïÅ“QÑ̤TÜã€HïÛ¿C澞RùðqDÒÐj.¾é¶1¼Ð†ãàBOÖè°«ï»ñ¨(Çîz4¸à±#¯Ü¨ŽÍ~»Û± pÈÜŒÕÙT`ÕÕ&„æèƒ0ØÛ@QÜßLVÚÚb¿È–H«Üo3ÎÔL@ÏæuÆÓ«ÌÊÅ»ñ”ÉÁÎ#sÞƒ‘Õƒ-gå¢A#ªÐ> ªÑ%GÒ¸9bºÅ=cæÁ+R·¶wÜ°-TÁÅmKÛîOOßÔGPÝÖS5àÜg,¹Õ…;àã4&Õåo(èæ¸,×çXAåõz&åÒå8éÇ„Þê¡#ç÷©%¼å†"Ïåt"ýÊÔ*Äï±ÎÛ°%Àò­VßÆ‹ˆÖž"{éÑ1Rÿ9¬æ»'&ä¼%-ØŠ9<Ø„[yµðL]ÎÌD!·1¹Â;»¾M#´ØS'³¡0ºÈj%¤×E&“ÑC ½ße9t­“-Œá± ÍÔl-ÎÏ—"¹ß„)fÑ¥&ËÓˆ1®ÙÁ%¯ÍÄ=Åó§>Àé˜%°âÌ9¨ãÅ+îÜžÊÑÛlt÷ç›ìèÓt¶ÞáyTêè•TÜãËqéëƒh×á¶EÔû¹ÄæêŸ\èæãíêìí\ÛëàsÒàÊCìøÛÖññév·ûìÖòëÙiöð’¨ðêÁèëù¿êÜú…¬èÝÎzþ。÷ÞØßîîãcãîÏJÌîÍZÔúÞn½åêH¯êîj°õãZÙõár¬âÕ‘Õõã­uäí‘“ìä·WâòŸ7Ûá”{Þö»TÏßÞ5ÈÓÂ>ÕðÄLÓìØKÊÔ×rÛÜë<ìÕÝ\tñçm¶ÙÿbËéÒUÑêèhˆû×m¡ñÚ{­æÒcªÝÜsÔåg“ó瓘ñã†aïØÖZÚÛ±wëé‹¥ÚàÇpßíªiõÞ²QãôÑTÎñÖœÖéÛ_èõ°wìíãXßôÓ`åàé\éä¿\ëâèpâìà\Ïæãgààæo¹ïôš•âä§ìàÊëÙ²‚Î䶧àózmêÞ¡‚òØåQìåÁxûòu™óî¿wóåÉUÜçäUçó¬{ôêßvèçÓMÎÚÕ‹ßòÕ‚³ÐÞpÕêðmÝèÚoäèÁZ¿éÜsÌûÖŽ¡Úî””à渨çÖ”îÌbÀíÚÇ–æíÆcÙÚ¬^ôΫ‘äã¬\æϲoÚÞÇ{ñèé¬ëÛî»ÛƒÈÉ—KÙ»ë|ɾrˆÄÀ¹ˆàÉÊ€ÑØåÞÅÑ­Á¿ÇŒ×Á•fÛ´×¥½¿¯N¦Ñë°â·s¼ê¸²ÐÈ]«åÒ¨·ÙÎZ±ÈÇs†ÆÏ’*ÝÈ…‚¾_•ÎΣGãѦEíÁ±5麂(ƶ§;_±½8v¦wPE›ZW¦zO®ÊzX½©z¡ª¸`ª»ÒDF¿ÆYR›¨€M±Ár}Ñ£iˆ¿ÁZV·²p£Ñ¬{iÓ¹WšÉÅô®Å¿Òºå±å¹ß¾Ö½Ä³©ãÖÕ›ÒÈì¶Í«ïÂܲö¶¶®ÒÃÜ™ç´Ð¥îÇ̯¬’ƱÓËÎÊœ]˨³X„·ºhuš¢rkžŽ`tžƒkq |]=¢d[Q¼ˆ¬¦Ån}•špv‡ŸZ‹–ˆ}…–bx©±~m†»“q^žj|ŠŸWmº{\”yk ¨±£ÍÅv®žtx¿¨ÅÄŸ¨MÊ¢¦‚©Œ©©Ù‡¢¦áÐçƺ ‘ÇÃŽÉÔ»¥¹ÊÇž½Â×ßéà΢¤Ò¯ãäØ´µÏߨôÒÖâÝâ»éÓ¥·Ù¾Ó‹ôÆåÞêÈè¥ÎÒúâìî×Ó÷ÑôÂì¾õ¹ÿêèÜôÄøÙáåÖÕìÑí¬ÁáúÖçÿñ×ëÝõÛéíôßéîãéÐïéñÙêßÛæíäðÞôäâÆýÖïÎÿÔå¸ÎÔáž·èõ‰ÎÐàÚÚ×ñÒàáΊ®ãñãÌðÞÖÛóÝÙÕÅÔ·‘è¼®Þãá}îÚßÛ×чäî׎ÜÕêmäÌîÓÉÿ»âäèy¤ÛîŽÇâìÔìçæ…×ôçÌ®ëᎽØݧÚÐâ…©ÓëÈðÐפ¥êëÅÛîב†ÜÝêÀîБvÒãÛÙèêÏ€îßÅÇãßÍlôÞñÀÿÚà²ìçå`úÞ¼vßìËUØæ¿YáäåPðÔ®lÝÙÓsÞîÙ`ËñìWçèÈk¯ÉÚ˜ŒíÚ™©ÞÉw¦ÞÛâ­èæ‚ïð”°ôå Åôí°mßÞÈ}àìÆÅâèÌgïàÅqàÛå¸óÞ×oîãàyíÌò£ãáØjíæࡳæÐWÎÝÞL×ê¿RßÃÌ\®îÒmÎÙÚ]¤Üê¦äðt‚Ù½§jÖÕE±ÓÚ|‚Õâ°bÙݱOìÄnXçáWîÙ:Úâžlñç²/æçP7ÐÇìï€"®óØUÙÆMßßœ!ÓÝœ*žÄÒ%À镛꙯âº'­à¬ Þµ(‹ÓÑ5RÚËsÌÙQ1Ëè1zÒßQ-ÒÉw@ÛÁz½ÿzåÖ†CÚÛ>1Ñئ¯Á¬·»—¹Ò¼¤Ï”5Œå‚.måx1PÑ—!/™·.)­Ì*Wõ¹"[Þ§uÙ¥"IÊå-ÒÞVNÙ¿TK¡ä,Yã¸=Þèh$ÚÒ€çF=ÜÀ’,ÐÒÌ/ÊçÇ<ÛôvHòÝ…OÍôµ$²ëº=Ùêž ×ïµ0ÊöªÏã¾Ãé¿ÉÜ¡¾á¯Ò×6*ªßÄ!}ÕÞmé¢RfÞ›;4ªÅ?@½©IKή/.ÑÏ>aÏÈ.<ÌÐ4Læº,.ÛÛ9B·ç: ¿ÕCZºÆJŠíP*¡ên?À¢(7Ìàz+šÒ”*¿Ûw-«ÆbZÞâ¦?³à„òÎqâƹ'Ïß…ÐæÂPÈÛ9·áäZžêÚtœåá`›àÇ„vâÄ<¶ç㑨͹E®ÿç´háâþø霊æâ³dçë¿Zæâ¿dðê¬fÓóûäÿöÕzÚêÝ{æáðùñþâh¯áî‡Ðÿà„§Û銿ìäÉÝóïôðäß¾âåïåÓçáçÉðêÒÆèøâÎíúÌfÒÞÒeØæÂQÉã܆–èß’ìâÜœàßÕZ¸êߨäôÅÒîê®»ìò·lßå²›êÛ¦~Úã³MùÒËTÁßûPÎáãCעsýÊã;ÃãÛXÆèçðÍ×l±îã^ÂêãQÙæàSàÝÝ‘Ù×ëš”ñÊxÑßΈ™èÒl“íéŸîÞk¨ß߆fìð¨r×â›”ßí·`×òºgù꾃ÿ×´ZñÞ½fáàÀjßèáfâã¥Sèèä`ØùöTäÃé[ÍàÚ}ååÐ\×ØØ~Óáê|ÝÚñ¢ŽëØ¡¢ÛÞ¤®âè‘“ßæ£sãã´™ðÿ°©áöÌläÚÝ£ÓΰÞé¸záðÕ—Ùáèzßö»–ÛÞåeñóÌzâöÜfôÜØmÑäÛ©¢ààuÌÂÿ~ËÍåpÜÑíž«ë眡ÐÒªÀÒÚ´‹òÜ«ªØæ°Óê–“èÖÎtîÝÙjÝâÁ†ÚÚÔnëÑÌéØÑkÜåÎqÿ¿Â¥Á·pÊ¿·—Ö³OVæ½oyËÖçžËÄÓ}ÆÊŸJÍËÆ”ÓÃÍ©¾°È„庺³»±è›¸Ìí¹ºÓجȲ¿_³ÌÐO‹ÐÀ”¥Úà«Ìå¬}Ë°¦aÖ»„9κoo¿Ð‚XÝ°¼bꨯ4¾¿WÕƱ>n¿½?[¾qlQ¾>J˜^h®½mq“¨SW¶­UY¹Ëgm°µ?¢ººja¾Ÿfª³…f˜§t£Ê­v^©¥^rÊÒ™¿¼¨v¿½·àÊçŒò´òÀÌÌÅÆÜËûÚÞ½äÄÖÀ¾¢âÁÛãÕҚѧà«ã¯º•ç¹È¤ÐÐÇ™Ÿqáœâ£·°´•´§¬MÌ«Ò¿x±¬gI•am£”‘†µÂjk©„‘b›¸ŒgŽÂ™Äµºps¯Ÿ–€x©Šš£€Œ†¤Šrs xŠƒ–œsx’»‚Ž–´wl“§uŠ¥Ê»À¦xœ·}É©Þ¥ÅËÜƺ’Ç|´’ÃÇïÎòÅÅÎÀãzèÅðŸ·ØÜ¡ÁÑãŸÊÕÙª‘Éè°ÚÝÞÉ×Àâ§ÞâÇó¿ô÷ÝáèÛ­ÑÅÁ’äÔ‡ùéèÎûÞȧìËëìçÎû×ñÏäÃöòÜãîßëâÞíñàßÞðÆÙõÿÒ÷àæâòÖæõîÊçÉèâêèÞñêñÎòìØÐâÔäÔß½ÙáÇßÂæÛå½àßëÞÏçÿÃôÚè¿ÙÎè­åèìÉËÒ×ÎîáÚâéÚçåšàÍÝÙáÓÞ¯õÐàæÜñÁþãÞ¡ÔØå¹ó×ÑÏÿÕáiÉÔð¾ÝßïÍÝÝѧ¸ßýÒæÜñ«û»ûÀôñêÁÞÚêÕÃÕèÀîÑåÏèÝؽ½Úî¹Éààß²ÇääÇvàਸ਼ãçÙÎíÙÝZîÂœqõÜÂi÷äã¦ñÖë¯õãâ…üØÀ[ÝÞÔŽÜàÔˆÝðÿiõöîÇåìàlâé÷¦Õâ×^ÍÑðºè⤩áè°¯ñÖŽzæíÒ»öÒ̸ùàÙ¨úÚËMÿõÜ·é÷ç¡ÜçͳæçÖ©ÛÍýlÖïÚ¶éíËCØéð²áÔè}ñÜÊhÞåòǽïó™ùÝò«ÇÜÏN¹Éë îÛ¦£ìå¼ÎÿØyëÜŠ„ÊÕ¤ì䛈òÐÈVèÔáiçê¬kÒÙ£NëÊœ\ÞãªCÓà¡DùútLæ×V/ÄÙ˜ÇÖeÝÎ^8ÐÓ©ÆÔ”*»ô•»è‡·þž%¶Ù¨©Ô“`ÅܽråÓ]gå×gïÛ63ðë84ÕçPÐåšÞßj!æàF?¾÷{%²ÝŸ¸ä¶ÈÝ}"»àµV¯³¨*rÛ€%tÄ’²À%1˵:*¸ ˜ä qÚ³E_ÐÑ&bºÅAUÑÉYNÓÂM<Õ¾ jÙºkIÒ¨ibÒÃu.ÐÜ%:êìt%ÞÛf&ÝâU9âã¡#ëÏÐÅçÁ ×ó¼/èá¹#ÕÄ”Ïïš(¶ô•1ÂÞ¦¿íŠ5Ûß~äñ˜¦ý ¨âÄY’ÑŸF’éÄTØ°¤â½=,ݳM7ÌæN!¶ñ Vʵ)MÑÖ,¥Ë=8¸¼(“íh*wæD'¾ço#‘ÆY'®½t%ˆÞ{0¥äÔDßÆS>Å౯æ¬3ÄÐÄQæÄŠ·ëÇL—çÏVªèÎOÕÕáM¦Ë패âï~¬áÎj±ÊÛb£æíwŸíäi¯îÝvåæõåñì¿™üäv„àæÍvÛèâÈÿçÔÏÿå¸UÉóȇÛûÁLÄçÔÕüßãe®âè¬ýÿìqäçõßèø÷™Öæì‹éáíÍßî×åõâÍ¢ìäð×êà­nóéÉAïàÆPÔåÒPôêÕlæÜóÎåêÙqåÛÞzößó‡ééž´æò¢~øÜîÜ¥VüÜ­ŒâüžŠØåÄoÎìÜ^ÜñàaìçÄHäßàNæÚãIÆ×ÚGÛóÚtÎÝå{îçã\ÉÜíPÒèçj­÷ßÏìÚô—Ðâ×c±åã–—ìÂ`·äç_´êë˜cÅç”_þ×¼ŠÏàh—Ìÿ½iâ꺜ÚæÂgûóÈnÛÿÍqëæÐsèØÑ]õáß|æðÜvÙßÔVû÷ÓtßÕâsÚîàsÜðá`ßâå}°êòš©òé µäÚŠÉÆòµ•âóÌíÛ®vÿê¶eÿØÏ€ãÿÂiâ뤬úõÁyõîË@ÛÝÙxéÝȓ׸ÝjéðçrîìÍ•øÝÚvÍÔï{ÚÝ÷zÚæ{{èÕÐ|ÇñìŽÁïÔ~³èæ°åÝ£³âß«µãÛp¿âÔ¤“èÉÉ‚ããÙ~õÙµ­Ü貂àÕÆ‚ÚÊ°ÝâãpÀáÕ‹µÀº~ɤ¹…ÙÂÓ¨ÐÅO”ÌšÄ涃VØÌߦ۬­tͲ½zλ֗àÆ–k·ؘ½ÔËϺÄ͸ÎÊޫºС¶¿Ï¹¦¿¸b±Ó¶tà°Ç Ò³Á¬Á±u^ÒÌ ‘ÏЧ‡È±ªGÓ±¾H¸Á£QŒÂamªž0JÙ§Qk³Ÿj\¤‘mf·¨Jo™¹Kr¿°c‰Ë«Hj¼¼‚M­½ph®±n‹¸ºw„ËÅrTζ„’»¯}°µ×Ôª·°ËÁ·¸ç¦¹ÃÙÎŨުԼټµÜÈÓ«ç»Ç²È¥á Ú“Ù²ä´Å¦Í¨×¬ÐÄ러ŠÝ¸šÄà©ÍÅÓ¥ÕÒ̯©Å¥º›Ô°°‹N‘Äj¡yx~—¼rË»›\Œ•}~§®y¯¼­“p†Žml—m~‘u€—†|¡r—‡„£¸‰Ž ¥ ¸‹¹ˆÃgvŠ² Ä‹²­‘âË¿²Ã•®©‡¿„¬ºÆ—ؼÉxàÉЇºÀÜž£òÇáÆɘټڅ±Ùì´·é¼ÕÙðÞÚÕÁøßãÄñÅÖ•­éíïµç×ßÏçðçãéÃåŸæÈóßÔÉØvÓÕßÓúÜàÅèàÜçæÿØëÙÙïñËöÐáèû´ÿÐûÑóØðÚáñéèÒëëíÉæöçÈîÙÞbùÐÒkðÅÙÉÛÕîÂîÜ׺ëãìÛêíÞÞããàÆÆÝÜÁÐÌßÜËíÜÎÊèÞÛ·êÔ¶àÖÎ×íåÝsòÎâÆïè÷—òØÛ¶øíòÁêàêÔÞçÊáÓúÜÚèñÍÝßôœÜ›çU÷Óå´¼Óõ¸ùÍ諵ÀòµÞÛèæçµôèÙ®ÊÝ몋ëؤ_àà±ÖÝŸ­çðÏ¿äëÛÄòìÞ„ìÑþŸíì¿pã糪íÖÈ‚òëÌ]çÐîjìàïqÔÒÿ äãÞbÉðú•éßçaÜãë}¥Üé~™âó³Çìä”±ÜîÕŒÛÞ¸‹îâ͆âõß~éãÜŸëáÐzÔÓ†íéݨõÎßtæêïtÞÞ“íæÙWæäÎ]Ûî¦[ÐØâpÊêÂ@ÙÑ©:ÚÇytÙÖÆT›áÿ~¼ÜÕd¨ç²P{èívŽëÓÆøËe°íÎ\nææžBÓéÌUÛȆ_ÒÑ|KÕÖ ;ØÇŒ]×íË=¶Õ~>ÏåÍéy8µ×‹1àæ>2åÊ¡Îà†.¹¼Ö?È䣠˷§Ü¨ºÞ¨çÕCŒÝÖNgæÖFpØÅ9uÄè+@ÙÔ`:ðÈG-Íê!¶àhØÝ^UÏý9#äÌ“iÎò€@Áô‚ÚÒ’ ©Åž$Üé %Ì×€9Uã¾EOÆÆ7jÖÇ=Y͆#€¸ÊL†Ö¿%DÕ²7\×Ûe8ÝÙS]À×7^Ñ·>gâ¯x4âÒc9îÜIXëÙp#ØîJ6îØ¢<áí‹WÿÚ”)¿Ø€âòŸ7úî¥/åÖ›!ÀÖ2Ñ÷Ž6ÑéœÇÙ¦8È܆&½èaWÅÛÅ#¦îäRœÔ¬+Î윱àµ$Ì­O€òu2<±Ñ)bÊ´"aË®ETà${æ×"´¸*ÐëEP×Îg °æR/¹×]KÙ¿Ymåõ{<ÀÆf)žèŒD¨³fBÇÚ‘&¸ç©7áÏqBÄÓ/ Ø´S¹êç`ÖØÙƒÕæ«I°åÎK¶ëôoÄåä’’ÔɤÞÛÚT±ââ™Ääê”yà×Â_æòâÁêôï°váèæÖáß«hêèñtÌõÐ’öÓÐ^ÖÞáïëððòûÏæxñèèŠÀþàwÉîæºäèÜ–¾úáŒÒãëåÓéòÓ×ÿêÝÕæëÆ¡ðÕÖMãÕ«Oßò×ièôû„ŸÿÝgÏçêÂòîÔÔÜé’³èÞ˜¢Ûú¹ùá¤pÙÔÆ{åò´³òá™–íçÍYÞÞäpÝâãGÞóÌ|éíæYßáä‰êáÑZÓ×æ|Ïÿë\ÏíæPÙøõ[Úéû—ÅúÑx½íà ÐÞÜ~§éÔ—¦éß‹¼ôÒW²Üá¯dâà¥Èë£áÛ®¿åçÆrê߸`øñ¶pàáè’òáÄ‚æÿºŸÈäºqâçÚzßñÛcìÐÑcõçÒdÕÛßwêèÛdâçÐ`ÞÑÙ£³Øç·ç݃ÑÛÝe¢ÅÜ’|ëìµxìÞ…—ÿÞªúá‘ñí½“ÚÍ®ÎïôÅxßðãv÷ç×Ìäêà~óÞ»yâéÌyÚßãðÕÿª¹çé~ßÞÙvÎÖµaÖÊð~ãåà˜¹Ø䓺âƧ’àêž­ÜéºÎ茪ÜàÓ~ÌàÇ{ëÓÁ¥éÀÃrñȈãÐΊôÚÅÿ¾|ƒÆÂѤҵå¤ÍÇslÇË ›µÁ¬ˆÄ¿ÃŒÍϳMÞ©¡uÖ­Ô‘èËʔжңܵÀ”µȡÇÉˬÇÌÀ“¿ÃÖ±ÁÚo«Ð±€ªÆ·z˜Ë¯’Wª±}¾ç„¯ÑË=ܾ¤fÊƹEÌ˧?wÆ»=Y»¬bY¿ Z]š¡oG¶ÚrUšÊ^Y©¹Y…µÀEgš«|b›©FU¥Èl^¦°—f©~n²ÊaQ¨v[™±š³°«‹¢ÁÔ’³Î±Š§Í±Â·ý¯å²Ã²¸¹È¦žfĺòæÌ駶›æÄݹîÀ·°ÉØÆ«Ø·¹¦ÎÔÁ ™z¾¢‘ŽÂ¥îÔÕžÔÊ©Ì›½›Ëg¢ŒµsË…–·¹…/Ÿ|p“ŸfVzÆžµ­}{€²cx¡y`|¥ps˜¸®”ƒ‡ty¤š|˜ Ÿ`‘©º’eÒv\§ÃŸ€Ž£ž¨‡³˜»}­±Àƒ³¨†¤~lŽÄ˲ƒÐÏè––”Ç©ÃŽx·ÊⳫê«ìÎÈÊÌÿʬçÌØÉ¿õÞçßÍ”ŒìýÒÌéÌ”–éäÌåÏÜ×ÁíÈÞáÞáí·ñÊÜÍÜ´áÄáÑê™ùõòûèÙßàýÖúÂÒÆöÌðÖÒÇùéëÐõõðÞÖúã¿ùôìäÓåíÞÜìÖâÚÝéäÆýØÒaåĨœÝÕçÁêÛßöÑã²öÜìßêÛáÛÿÜð¸åÝáçßêçÒíìÖÒ¢âñíÐäÖÛ·ãÛßðÝäã¯øñáÚêÔâ¹îèÞÂâêë©þÅàØþäê­âñêÙñàëÈæÝå´äØöÃÙÜêàòüáàôØðÏæàóˆçá…§ðãºÞâêyÈâתlåùÓ²àÔ–§×ß[Šéêé²Þãâ†óëßÊìÅËoáäŸIìÍÏæþñ½VëãÝ¿ãßÒ¦ìòéhøâé±Ðäô…èèðŠàéç‚ôÜᢗÂꑼçàˆ¼Þìö¶¾îØĤÖß |ïÛ¢îÔ¥lÉÛ¯pÎçÈÛæ×à²ìç×{ãÝȳØâÜlßáä¤æß×ýâÍtÜÅÙZ ìäiÙðèeäØÃ[åÜôuÉßÌ…œÖÀn£áá蟭èÛž–ãÓMxÒĶ[Õí»RÒÛ¹ŒäÕ¤KãÇQÑæ”dãÓEïçVWÙÏp'ÇÊÆ!ÃÍP%¹Ïg=ãÄa­é€2·ÎŒ Ó݆¸Þ³«Ì‰²á‚!È쀗å¼>‰éÑ-qáÇ-êØBSÖÎ*AìÐ4IíÍI$Àâ ÎÙz#ÞÛ5>ëÓƒ´Ëž Îɯ%ÀÔv3ÐÔ‘"©Ï2™Ü}4RÍ™'5¸±G$ÃÃ=9ÚŸ°Ü¸Ftß´JkÏÍ sÑÒ2IÛàWJîÚKa¸ÈTpæØH0ÜÇZ*åÖmBìÇm1óäh1àäI=ÕÖl>ÝÏQ"¼ÝyÝÙ€-ÞÙ”5ñã™)ÓàÐ<Ðí9ÝÙ›-ÑÙ°"ÈØŒ ÑÔ7èÝÒEžô­&ªÕ¶"¬Û´#žÖÉTVË°!§®³(:ݪEyÕÆB0¾ÙuÞ¹$”´¾`±Ö9D°ÜHWÉË;w÷ µ³ZBѶZÍÓq'‰áG«Ó¡ ÃàaDÜÁ’$ÑÙKÐÝ°¤ÒšR£ÝØk¥îÉ\ÇÖ“(±ø®“àæl¸Ò»<³ßÜn¦æÕ’œïöy¨ØïkÉãÜy~ãäÆÝåå™iÒçÓããð½‡Ðì¨~ÝÕÀ§îß»d³ñÞPÊðˆ[Òæ̱åÞã€äÞåuÝåï˜ÃïÛ€»õã¥ØéÞzÀûݸëÝö×ÞýøëÎè帑äè° éæÌPØìØRÐÞÃQÓëÝrìéÃyÈõØméëÙzñÛÜ€ÕìôoŽúß³uøç…€äç¼kÖæ°wÞ䘅âô·U×ëÙI¾âØEðÚÈ„ãìãpÑûÌgÌàÌfÕØòt«ßéqÀâëMÃÚæjãíät¨òÞcÑì뎮ÞÞj·Ùí—ÊÔæ— ðÔuÈÜ䩉ôß½|ðÚ¾qëè{–ÛÐBbâòÄÜà»içãÏ^íßÄ¢ßëÊpèÝÊóßßbòàÜgñÎî^ÖÞÉgíçâhÐêß}áÜ÷bèòào¬æ¹S§æþ­Áãâ{ÕØë ˜ÞÞÁ‘Øêš Úí¿ŒíáÎÝÒ°ƒòÕ¢´ÐßÓgåè݃èôÔ€ëØÈŒæáäiïéÓbãÞå’èÛæŒÇÓñqàÔã†àÎ؇óÆô•ÉÚè¾ë⯯ÛÞݦÉÞ­£ÔÇ–¶ÕܱŠåÇÊ~ùÐΑô·”›òÃŒ…âÄÅœÚ亃æôðšìÈx§ÂĺoѾÐδá›ÅÄŤ׳užÒªéɲҎǶ´žÃ¶íϽ܎áÈרÿÀ¤Ó»ê¶Ç¼Ê²¶¸äÁÅսεÁδ¼ÉØÕªÖ¸á¸×¾˜˜ÕËƧѰWªËÛ¦šÜ¦Ÿ‰ä°£°Æ¼—G]²žEJĵbXÄqTV¸Ÿjj®¤LV° kJ¿·gK©Êf{µÂw°­ÁZ›¿Ç‘¨³²‚ ¾³pf•¿m¼¼²}¦²µàÆúššÅ—°Á̵ÄÖºªìµ¹Ç¾ÕœªŒqq¼†·ËªÕ­¼´š¶Ã…èÇî¿õÇÄ´ÜΧÑÀÔ•­}ÖŸÁ«‹Òº¤’†¼°¡rwžÜ©ƒ’ºtu¬d£º~‹µP•i˜¾—„‘—jt€zˆ£{}›‰{p…“‡–€¥–Š‰_ÐÂŒ †¨˜¡ Ž”Ĺ•–l’Ÿ™l¨’“u£ÄÄÉ~ÕŽ’áÒÅ¢ÒàÆÔØÒТÂß̤µ}¨™ÉÜm’¼¸ã¯Õ¶Ê}ºÓö¹ÐËΙµÝÖ„µßá’ÕÙô”ªÑÈãÍéÛ¦‡ÔÿÍðàÐØå×ŃîÓÜØèìä½ÞëØtéȾ¨ñàð’ÍöñßòçðÚððãÊñèíÌîÈçÓïèì¹ÿÔÿÐòÏðßäòææÖòæçÒðêÙÔðÛáÅóÙãtÙåÑmèçÚ»õàÞ·ñãå½í×æÄïëÛÍâå苹èïÈÈçî¯ÝÑÖÉà飆¸îËÌÕýÍyæÏë¯òÛºjïßäÀûáéÇà×õ¿ïÚÛ¸øÊìy­Ýä¾àæñ°öËÿ~ÿÑîÁÛÎù¹þÎúËÞêãšÁÅÿºåîà­Æáÿ€´çöˆlãëËqÿÌʪæçvžÙÔ‡}îÚÝÉñë¶eèôÊZßå—zïÝä¡öðÍŠßåëlõæåfÌàòqÊêÍdäôó~çÎæmÜÐáMæßé_¹ÏÐx²Ä禩×ô™¼ìé·‹ÓëȺæâ‚wäá¿®ûã²pÛå­áîaèôÀbåÝç”èÞà™íì˯äöΕñÞÚ£ÞéØXöâÐ\ÜîØ=ÙÖàLÑÊÍ^îÖÆ>½âÝð §íÝ›‰áÊgåÌouàØ¡ÌÐä¦Ø×y<ëÜÒXåãPgæÙ|4ÕÑ‚DÏÕ?Ó¾¯.ÛÏtSÑÒ¡)µíŒ+¶ú¬LÒã\!Ð׌&¿âz)½Ó¡ºÚ•³ÊË¢ÚÊ&¸Þ©¹°Æ]ãÊ0s×ÝxÞÉ%ZÖÔ7EåáQ<ÔÊR)îà›$Ç×` ÛçU*Ó·,Wßá‹;©À¨Ï–^ż©¨Ê})Ñ{Ìßj!¢Õ;¾¾@_ä«~¦¢R]Ѫ@~ฌ¼£Ž¼Ç89àØ@KíÁMaÃË!wçÌNâí &¹ÑfNØåqÛÚd4çæªZíÕMNàãPFÓº{àâL:å̶~èß‘0×íÂOäë+ëÙª/·îÏÚ€9ÖàfEÛÒ±*¼¤¼#Åê}ÄÜÜ$êÍJÓ¾I•Çr9B°¶2ÍÈVaɈ+Ñ%¸¿<*ÅæH3ÈÍ,/É×TDÓàdRÙ¶>JÜÅ-tãÝf5xÖ9ÏwD˜ßxB×àŽ/Ü̹mØÀ–IÕè·]¾àÃY´Ú“"ÈÙÑ3´Ù×D«ÚÐD¦äßK¦åù‹¨ÝÆU¯Ùñp«ÝËÞÝÔefèó¿ÈïÚÄáê픥æò½«õÛГéÞåñúðëXÃûÞœáäÔ®ýíúßîíü¶ñôïÕíáç˜çñâ}çð¤ãÙè¦éÙÚ’×ëäÐÔ÷èÛÄðèÕÓéÞ¯›ðÙÕ„÷ëßY×ç±VÜøßh­äÿ²êòñ³øàíÆïÞôpÂàý¢Ïð鉒ÖÔµ¤ßéŒvÌâ “ÚÁž×ÙáÒdìÕÕ£ÎêͨëñÍOíéêtàéÊaÿååYðãñ¢«íÓs¼ßßYä×ìPÔãêz½ôïv¡éÙTÑéìtöÈn¶íÌt°èÉdçרWúó­ô燿Ú㜂×åñòãÖ½r÷×»ÖãäãgïêÝžÛöÍÉõèÆ„ëÚífêÚÑhÍç½\ìÛâ{ðÍà†ïÙálâÃægËÔæžÌÕç}®éß‘Øàð«©ðÚÀ¡Ý߬©Ð̤–ÞèÉ›ìѹ–ßü¾¨ÒÞ©ËåÆÙéßÏsêÏÖÍøãÉlãÞÇêÝÛO÷ÖÚ–úÓãŸ÷ÅâvßÃìnðÝàxÛÊï¢ÅÑÛ~»ï觬Î߸®×뢪Þߢ¬ÙÍ«±ÙÕÓŠÔÚÕÿÔ«®Êݵ‰ÜìΘØØÆ“æÐè€õÕ£›È°„ŒÌžŒÏ¿öÀ|›ÚÅŎܽ‰ÏÇË‹Ò¯µ}¾“Åmزx8Áº×›Ôº–,Ë¥žt³¾§gɳז½©¤g»ÜÕÅ»¹Ù²»Ô®dxÙ·—²´¯Ä·»ÍË}®¬Œ±ÕµŸgÊ­Ÿ@Ô¼rT°¸ÐS7¥²WXžfe¢Äm[šÇ_L“Çf\›¬OV®´v\«Ë_cŸÇis Àds­”„a¬Ä•§Ã¿x°¬¼{ ºšuµ©Ÿ»åÄÀÒεëÆÂÊÕǹ´¡À¾¯Š’~­±Ï«í±×³ÒÓåÔìÍÊ·wÂõÊà¿Ãª–ÇÙžä¶Ð¼ÂÂÒ³p‡šËƒÕŽ¹yY³­¡Ó‰Ð­nÍwØ’‹y—Ѐ:ªuyN•ž‹{ˆºœE‚qpdŠŒ‚ŽŒu‡’š„’t{Žb~©^ ¹fq©¢°›¡°™u‹ˆsÐxiŽžº‘Œ½™kpª›° Â™Ÿ™·žÃ¯ÅÀ¾r»’~ÜÇÙ‹´ÀÝ}š¤Ò‹¿¿ÖyÂÍ꨷ËÊ‚ÃÐì˜Ï×ÙÃíÚן¬âɶ‘ÉêæíÏßäåÜùÕåéíÝÇöãæíÜÀîŠÎÝãÊúÇ·ÆìæôãöÓîÊüçêÜô×êË÷Äû¼àþâÌõÚØÃùíóÆðõéÎÖüãåÌäÜß×âåؼüÌë‘ê¿ÛfÜÝèšüçíËÙÜéÓäÞÓÊõÝÓÕîßñ±ÿæÕÇõÛè±åíÑÁïÒǾïÕ½«Ýî…ÝøÙòÒäåÙÀýãÒãðäâ¹äïìÉþàÚªãäÕÙàæÍçãå¸æãðÄöåò¯íåè¢Ùéô×ÍÝû‰âßý¯ÜÕÿ ÁßÜm¬Þï” ãÍ¡]òé‘ìá}¯æé®–õè©’ÚòÄjþàÙžôØÖSõãç“æòÚÂçñÊ‘ÿßåtïÚæçéÅfàÚ»OÙÚÏ‹äÛ¿nÉàÎP²×É¡²ÉÄW‘ÛÍ|ÈÒÙÝÔ»ÖíÚ“ƒËÝšzÏἕéÔ¦^Ï̘néë³ÂÒÒÂi¸áÊ[ÑÍÑÅçØÄYÐÖÁ‘ßʶWÆÌØŸÚÕÖœãá×aÆÚÐgÍØ·XºÙØ‚»ÓÎq¥Ûׂ±ÐÚž‚ÆÞ¨°Ù½oŽßãdpàÙ½TÀͨAÊÏim΂SÐÙjXÙÈ&×Õ´3ÿêST×ÕQ:¨äŒÆç~ ÊÚDSêÐ\§ädËÙ«+ÄÝ‚#­æ×2­ãž$Âè¡&Ã㉧۱ÛÇ {íà •ßÒbÜÇ)HåË@:êîH-ÒêrßÆxìånH»ôRÈö¡»á  +ÎËľÀ#Q눴Ës#ŠÜNH°¹>dż*8ÔƒVƒÛÉUt´­"\¿À¤¾¥$7ÎÏ_2Òð3tçÒgÕÚKQíÉ:<ãöY8éÑ7PÞ݇*ÞØSOÝÓ‹OöÓ_6â׌ÃþƒÿÝbSíÒ¿(×ÏR/ÖÛ´"ßÚQ+ÐÝ¡-ÂáŽ#ÐÛ¨$Ýð¿!ªñ®(NÏ ¸äµ9+ô½©ÉÞ +}á¼A?ÛÊ=Ýçi&¨ÍGëÈ=ŒØ°"/¼Ó@cÑÆ2I¼Ä24§ëS5 æj­é*[Û´S.‹Ün(zÛš0ÇToÙà˜ÁÑt(­Ã7­Ä‘·Ûéw³Ñ´œæ©I×Ö£(ÄÔ¨.œÝ¶-ŸòÃa«íÚ€¦Ýâz£íÖO±íî†xÛåµ|ÖâÄÌíóŒáêÜßßõ½×ïíº¾Ôß®`ìãçgòäÏtÁïÅ´áðÚi”æöÂðöÝŠ¶üêvõÛîÅîÿضõüÉßòñÚêòàÔ©ó⹤ïÝ´ÏåäÕ”ÿâÌCäæâZëäí®óãðq·áþ[ëãÜkïáØyãøØ€söå’«ØÝ„™åß³{åå©iîòž…æâ xÉßÛ[âîáeÔëÈ¢øôÔlðòÊ>ØòÞ]âðð| çòuÃðÜpÏåÔ7ÓôâP›èãköÜp¾îà¥öäÓiËääVÃáÛUºåÛŽñáÄ~ä鱊ßô¤¥çéÜÛéÕ·…åòÚoûé½oõàÐnåÝÇYåàèãïØ»ZßìÍZÌßå±×ÔÈÑÔßÐàäåÅÏÜÊÅÞÔàÆ»ÓÖÆƬÙÖÊÑäºÈËËÌ¿ÜÕ»ÈâÞÚÚÌ×àÀº¼¤ÅÇÞÊã³Ò¿ÐÛÊÍâÌËÑØÆÞÆã×ƸÎßâÅåÏáÇÜÐÏÁâââÕËÞäÎßÂØÇÎÙÔÃÓÊÍÉâÌçÌÕÇÑÊÑËâÆÊå×ÍÏÐÒÐÏÑÌÎÛÚÌ¿ÆÍÅÚËÔÈÓÃÛÈÊÒþìÔ¹¾â³Ò¯Èïóÿ¤È¿à¢Ë¥×Ô®½ˆà±Ÿ«ÔǽŸÆª©bհЗà«Ð¯²ªª}ĭΘذ̓¬ã£Ù·å´»¿Òƶ©ß¾¨—Í°ÂÁÅdË¿®ÏÔ¼³w¾ÂΧ„׸΅㮿ÁÕ¹qºÌ°Œh»¹ºvŲ¢S¼¹³N»¹¬Tk³¢.{¨ad²•eO©ÃtXΡm“©¾UUvÆ\h}ºgm©³vv“«~ÆȲÀ­š¹šÅ°Ì­¼’®Ÿ‰ÇäÑܱ¬Äϼ½½å·¼ñÎœÇÙزÈì²Ö¸ð¹Â¬˜”βïãíäи¨×߲ϼ¾Š—’Ë­ŒÈ£äº¶¡³»Ð¯½œ~ŸŠµxçТ‹»Šºz|›ž|ʥϟ˜Ü©Œ¤•u}…ŠÉ’tšš¨É¶¯ž‡Ž‹x[eŸ•V‹e„zl…¢’¡šª‘ž±‡s™²›v‰»œ¥·¦p¥¦[†„›†³Áë•¿ž»€Ñ˶“µ§½ÎºÃwµ¾ØÊÒäµäßÔ¢¬¥Ë•±ËÀqÓËÝ·™çÎð¾ôÑãàÊÞ½¾áåÛ×ÕÝñéñâÒßÞçÌ{êÞ÷ñÅ÷¿æÿÜâê×î¥ØÝÿÙÿèüÌöâç»ÿôì¾ùàçÓîîäÐûä÷×âúéäÞÿíÒ¿ûéÌåÙôÚ¼øòØ~óÙÜrçáøÂìöêÅããØ¿øçÚ¶ùòòÈÚû䜎ðèÑÙòö‡•èúĨÝÛÐÞâÁ›èÚä‹çéæÆïïØUÙÓ—Ãéæî¡èÛñ¶óÌÓyÓÝüÁíÚãºûÝðœÅìçÂèíé®ÙòÛ­ÕßöºØïí»ÿñéÛ×ÿÄ÷Îô ÕãÄ\gîìŽDðãÞÀ÷宧ãåÚÛóêÛhêçÚ­òæä©ñèãŸëáÉjûæèÝæçä™÷Ö£`àÔܨ’à¾ÉÄÞøÄÕ¿ÅÐÐظÁε¿ËÒÇËÌ¿ÔźËÇ°¿¿¾Á´ÀÎÁ¾Èƺ¸ÃÄ̵¾Å¹ÑÖÊ·¿¸¿ÂÖÍʼ¹ËÒÎÍÍÓ¾ÊÑÖÓÚ¿ÒÌáÉÓÁËÊË¿ÇÚÆÆĺØÄ¿Ï˲ÉÒÎÆÇÜÉÄÙÛɽӾÀÑÐÃÂ×ÍÃËÅËÔÃÂÏÌ¿ÁÌÄÝÁÎÅØÆÇÌ»ÉËÁÄܵÈÌļÖ·¿¾ÖÃüÒì7æàd+ÚÊžºä^ËóQ(ãÏAÁÚ‰ÞÝa½â‘·å„,±Ó¡Áà¡Çؘ +»ã³díÖ!{ßÉDkÀÇ"[àÙ“ÞÞ-'èº03ýÊr ÕÓ§+ÞÛF-ÓÌ1Gãω'ºìˆ¸åŒ,ÜÃÈÓŠ¹Â'°×ˆNʶ+fÈ·,⮢Êzf·¿*pÙÀ#vƦ„èÞFG¼â6Bã×)héÏhÕÊULóÜJQ×àFaëâJcèÜh/ìÑÉ<äè‡\ÚÇÆ>×â¹RÒóHAîáž2òÔ«õÙh4êÆ1ßÓ‡*·ï èì®KåÅ]1Ó̾#«Û¾6¡Û¼*ÏÍ£-µÁ· LѵÉê¢*ÎÔÊ%€Ç×%RÊá>ŒÑ¢.7àÊ7ZÏÍH¹£8B£Ð·Ê7AâÓ9CÛÁ:iÆß‚6ªÄl&lß‹.¬ñ°*Êé‹BÔÆ‚*³°Wªä£%®¾ª ®ì»uÔÊ|#»ßÈ3¡Ö¼9½ïÓN½ëê}­äÁJ±æÞc©Ýà{§áѵtðÝ«eÛÿÖèí躠Óú°oòà¿žùçÅÑóåòÈôèÚkàèàîäôµtÛÕénÔäò£øòñÐïÿãÙäñíÉ÷öò½ôõé’èîéëÖâõáÊðéÙÒìñÜØÝôÕ¶ßéÛ«ÿáΖÜàîn¾ÚÛvÊÒ׉÷áÞ]âòò‰ÁÞðž·íó±íêУËôï°™ò᥅Îà©„ûÛçgßßíÝéë»zïêÏuæââdåíÕSæÙÛkÐßê~·ìåd¼ôшðåéŽâóìÉåêÏoºææ€úçääéå‰Èâ牻áÓ“¿ïÔ¬OÑËÉtæ振ô壑îÛ¨©ðÛ¼páüÇyëôÕ}ÏáÕcùëÈ¡àú¯zÜèäãÞÕ^Ëã~Ë°ÂɲÄÈÀÉÇÒ¹ÈÊÇʹÏÍ»¹ÌÆ·ÀÊľÂÂƯ­ÇƼÀÕͽÄÇÄÍÍÍÁ®–¨Í·ÄͳËÊÈ®¶ÆÍÊÄÒÒÇÂÊÉÂÃÆÀ¹°ÒÒÉ´ÑÑÊ·ÅÃÆײºÏºÔÍÃÅ¿¸Ð½Áν¼½ÏÇÀÃÇÏ¿½ÒÇ̸ξ͸¾ÂËÇÀÁÀÂÍű²´Á»Á¼ºÄ¹¾Ä¼ÅдµÀÌʾ¼Â¿ÆÉÜ ÿ©¥²ÌÁȣߵ­›¾±§žÏǵ¡ËÎÌ“¿½º”Á¾½‘È®âœÎ´ѿãŸÓ ®oÀ¾¸y¿¶Ï¬Ù«Ü²Ì¹’`ƮǸÐÈä Æ Ð®±ÄŶ®Ø¯¥¯Å¼…Ï®„t̼•Ž×«µ‹Èª¹Xκ^¿½UPÂœg‰­¸Vl±¡r`wÕcR´pq—·WK¤Õ}^¨¿h\«¶ha™¯‰\†©yŒÂ«‰Ç¥²¸Õœ¿w°°¬hѧ¶˜Äµ£w »»}¢²²¼£ê­Í¯®ìÅÛˆÙÄéÔë°·›Ì³¨Ð²»šì³²¦Ö¯Æ¡¬ºÀ“̦½šèȽ˜–½Ëª–€™{­x·[Ì‘½w^©{i¡œjsŒÂ–@xÉ‹‚ƒ§Ùœ¬ŒœˆÆ¢„‹ˆmf¤’q‡|o“‚wˆ§˜kŸ°nŒŒŽ¢°©¤ŸÏ›€Š¡©µ zˆŠç±gžÒ¾œˆ¿ˆšËÉÅ·‘e­¢¤‹Ø̇ÌÄsÀÈÈd°½Ú˜âÑçÆêæÌŠ²ÏË|Éàí¨ÓÈØÄ“ÔùÍÅñæßòÔëÛõãÙúÎéåíÒÿÓÓÛßßïÝޠˣúÑ÷éàíÛ¾ÿ×ôÀøÜý»ûßøÇõëòÝâá×ØùÔê¸òÚëÂõçáæÙãäçÚîÜâÝçîí×ÝêãÌöÚêËòßßÓóóï¿æìäÂïïè¬èäñ¥øßö¸ÿÜê¹äÕÉ æç蚪âèÕØ÷êÀ¿òõÕ»ñÃÍ_îáèÙóÞÀ¬ùéëÓØê¾|åÙðÅóíÐÁÿÜèºýÛå’ÓìíÐöÖïÃëÞâºóÛüÎ÷ëóŠôßî°îÏ÷¶¾Ûë°ÛèÿÄÔòÜÚ°ë轂æð“§êõÇÄþÈ •áïɽæÙØÈçÒÞ ôäèUçåæÑÞëОçïï¶óÉ°BØ·“ãźÔÁÉÌÌÕйÆÄÑÇÆ¿ÁÈÂŽÉÇÎÎÌƺ»¹·½ÁÆ·ÃÁÂÎÈÀÌÆÃÆǹµÚÉÍÎнÓÉËÅÆȾ̵ÂÄØÆ¿ÐÒÓÃÀļ¿ÂÒÎÒÅ»¸ÒƸÄÂĶÐǽÏÇÁ¸ÉÓÁÇÉÄÄ͵ÎÆÀÔÆÀ¶¿ÊÆÃÕÐÂÛ¾Ò½¬ÅÎÁÆڶʷ̰ÌÓË»µÅ½ÄÈÈÈÀ¼¼«Â˾Ϧ×˽V÷çN5üÆjÒÜwÉÓg ÖØA6ÁÓz ¹ð“3Ïâ¡ ÎܱÄß‚³Þ—¹äˆÜؼ#«ÞÑJ‡êË~äÁéÍ!GãØ2@âïVÍéC)ßÌw3ÓäYUß¿-CØìL"¶ÝÂÛš×âbÓÓ¤¸àœ ÓƈG’Ì}$5Ç®"(ä¯$EÞ¢UÚ²1 Ó±0^â¸(ç¡MžÐi6Ý»7VóÅ,‹Úå-/ïØ&YðÖWPàËHØÕ3#éæ-áä,Qôì›éäÀ"ÅÞ¹0Þì4fîåR8×ê•#îÝ”;Øã’+ßÑ-¿óÏ$ËäLJÚÊ–%«Ú¶žé¿¬Õ‹YƯ&pÜŸ&†×®UÇÚ$“¼È)oéÈÛ²K¸·$»ÃRFµ¶_PÆÔ*¶Ü^ÁÜTB®Ñ'KÝÝJ'³Õq\ͺ†¡Ýr!ŠâÉ#…óY—Ïh,ÒÅtJÏâÝeVì¡ÉÚŽsËÒ©3¾å¨3·÷¾A²âëL‹èÍc¢øØš­åÜrÜÙÉP–ßà²óôÒοèÕi ÛÑ¿fêõ‘¾âý¡‰êý¯ƒéÜù7ØíßXèñÆ°åöÆgÚôÐpæöé‡âêé`ïäã—¾íÝ„éìãˆâþÛ§ÈóæÈ”÷üºöë¯ÊàíÜ¡âç×JÚåäÈâðÒ·åÞì›ÔïçWáõèsýÚàlëãê›æò–¹éæ~ÝôÑ®Ïí윘åø˜¨èð·aæóâùãÕsîù·¨äâë‰øÕü‘öÙçLÖ÷âwµßúqÚóùnèâÎgæÙæ÷ââvÚòä¸îÿÊmÐíöŒ¦îèq¬ùÛiÙÿèˆ~éì«ì礼êב¨æö¡yéî¼oâÿ•¸ëíÉ}êãáYêÿÕRíå~îêÏñå’\éÞÍZ“ÏÓ¿ºÐÃÂÑξÂÐÆÃÊÂÂÌÇÇ»ÀÆÁϺ¾Á¸»¯·ÆļºÁÅÆÃÇÑÑÊǻɷ³ÍÂÔÈÉÇÃÆÍÀ¼Ë¿×¶Â½ÕµÃÉÂÒÁÅÅźÁ¶¸ÉÈÆÇÍÏÇ·ÆĺÃȶżÊÄÖÆÉÆÊÆÊÐÑÈÉÇÄÄÂȽÒÉÇɶÊÌ»ËÄʾÂÅ¿Éͻǻ»®Ï½˸·¹ÁµÊÅÁÀ¿·ÒÒÁª¾¼Ó©ÕûÙèŒÆ×ΞȽ֑״ϦҪϓ۳‡Ž¾ºÉ¬àÅ—¿½ä£Û¬Ä¥ÀµÌ¢½ËÇ˳ˑà§ç¨ºÈʗĴÃÑÀØ´½»õÎɽ̫»ºÅÙ¸Ô¹¶k׶»²n”Ϊm­¸·—ɬ™dÚ±¨aÀÌotœ«uV¾±d™¬”PŠ«¯bB¯ÂmCœÀVY™§v§½¬xU±¥nf¯»[?j”xyÂfd•›€Ö²ÕÁ¸ÒÏÈ»¸¶Í¥É¸¬ç²»¦Û»Â«Ý¾¦±Ú«ºËâÁДö³·¨ö®ÀÅÌѱ¥¦v½§Ü¿à£óÐͣʳͩݵՑá¹Æ¡›Ë˜»`±µ­ˆÐˆ°b¼£¶‚gÀ¬¿”¼’V™ ×©Å¦~”œ‚…ŒˆvŽ‘©‹U‹uftz´ŸŠu{…‚¶ªv““¡§œk–šŽ~›®…Ÿ¥§¹£µ†“‘™Ÿà„ ›©—~—lœÊ•ZŸ®Œ»}¨É¶‰¶Êº€Ð¬²€ºÊÊ…àÃÓ…°©ÆªÇψ¤ßçÒÒÒÇ•ÂÌÓªõ¾´ææÒÔÛâ§}¦ÌÉÛ‚îêÑáÜÜØÔîÿÜØìíëvóæú¾éâõÏãëê¹óåæÆÿóýÒñÚôÉíõáÑëçâ×ðØÿÂèçñÏäÿçàâÿçâÕáçÓìäßåÞéæå¤ÜÈèÎæßâÁìÓçÍÞÚðÃõìéÔÞäô±äâó¶ÛììÕîÙßÑåãßØíÜáÛæåæËÏñãÕ~ÝùÏfõÚÂ{éÞÚÝñèé”ÒéìfèäÖlÝïßošèópÎâôaáÙâiôïô¢äããvÊòë½ææä¢ØÞîÔ÷ø¶ÌæçOàÄ߃äáªpò긡ã銆ñä¨Fôé˶ÝâIgïìɨùòâhà÷ÚÁçäºÀßãßÐöäoNÖݱˆÞÑÕÀÑÍÇÉÇ¿ÆÏÉËÆÆÇÄÇÉÅÉÈÁ¿ÅÆÄÆǾ·Ä¼¥²ÅÂý¾ÆÃÄÓÃʾ¿ÃÇÓÊĶ¸Ø×½½ÀÈ»¸ÅÆ´³ÈÉÊÏÏÉÈ÷½¿¼½ÁÂÄÌÃÑÒÉÇÈÄÃÆÉÎÊÃÆÉÄÊÄÃËÎËÇÈÅÃÁÁÂÂÁÀÇÌÍÉÅÅÆÅÀÀÀÃÅÅÁ½ÏõÇÐÂÿº²¸ÄÈÇÄ¿ÆÀ¾Áÿ¶±´ÇÀÆñÝÍ7ÕÍyEÓÓ¬¿ÜŸÏæ<Úñh7âÏÌêuÉç²8ßÛŒ¥ò¢šÖ«¾ã‚ ·å±{ßÈ {âÍ~ÑÃ[çÕ*1éÝ4Xíùj3×ܵÉðt.´Ñ[FöÕD'ÎæÆ÷|#ÅÜ$àµx<•×‚¤åh$¢Ý}·ï QYÖ‰WM·°‹Â– ¡Øº,ŽÁ·2OãÉ0SÖ¿/;ÔÃ9IêÌ3mÌÐ^èÙnPÐÒP&áÓ)v×ú‚&ÔãTèÚyDÝܪRýד1ËÝ×.äÿ˜0êàPRìË'Éó›'Ôâ’,èë—(ÈáÆä‡/ØêOèÕ¹¹Ã¸EŸ¹žÉݱ&JåÒ%®É©5Õ¿^‘à¼0½ÁHbÛÈ<Žî·7píË(»ÎF;ÛÃ7QµÌœõ¤R‹ß»A;ì·)ã5VмHe×Ý(“ÖÄ"*Ó´,A´±4>î¼/B­·:'¹å[=»ÓF7ÃëZ<È»"- âr- à‘)·µX=ÙémaÞõÆ=Óè›.ÈçnKÜÚ¬)©ë3˜Ë•[Üä€(¸ÔèLçÚoµá»*³áÇS¢æ¯'tÚë“»î÷ôñßë­|Ðá÷úêé¸ãÜë’ÕìÜÇ·ÚúÚ®ì÷ÖãâòéÆßÿçÝÚÿàÍìãÚ¿ûéß´ïíé¹ðêä}äôêÇàóÞ¸îøá€ÜõàƒÜäÛâÜëíÚÅïïÖçèãßÒçëΧÕæÛ¯âäêÕôðê»êÒáŸâ÷îÃåóÌPÕõóæüïÛ“½Ûád‡þÞªfíàŸ{ÙÚ™zßóŠ«æâÝQííçóÐÝkòäãXáÚÜPÓåámÙßÜFÖÙòU®öéJÐìÚiÞæÔfßßÞrÞßô¡îìߺìäô`Äèàãáé|ÑÛÕƒ»å㦔Þÿ±ûä™ËðÕ±ñÒ±ŒÙê®eïâ©©ìåÇmñàÞyùÕÆ¡ûà¨møíÛkéàÝmáÖž¸×ÅÓËÇż»ÈÎÈÃÌÆÆÅÂÃÅÁÁÅÃÀÂÁÀÅĹº”Š£¡±Äº¹È̽½Ï½ÍÅÁÅÍÓ¿µ½Ì»ÉÕ¨™µÂ¿¸ÅÔͼ‚žÂÍÄÆÍÈ¿ÏÈ´¶ÆÈÂÇÄ¿ÂÉÇÁÄËÈÌÏËÌÓÖÒÉÅÈÉÄÁÂÂÂÃÅÇÇĹ½ÀÁÄÆÄÀ¿¾¾ÁÅÈÇÅ»ÌÊËÆÂËÄÌþ¼½ÄŽ¿ÀÄÈÈÄÃijÁÃÊî}ÿı±Óµ jÞÀ¸„ɨw’λ²Ü³•”à¾Ó—Ô³Þ—Ý¥¿“ÏÅšưܾ̈¶Õ±¡tÕÁÆ“Ö´¾ˆ¼±Ïˆ½¯Ùp¤ÄͨºÁç—´´ËmœÓºÖmÛÀw‚¶±¢Õ§vpìÉBÊÊœO´ªnaz¼¹@±¹4|Ç DŒÅ¿FZ·²UQ†ÀG0IJTl³Õ>j­´m[‘Ä`x«ÚGf™¶e:Ž¾n«ºÅu»·ÇŠª¤±˜Ê϶’¸æµçÂ×ɹÆÓÝÈã´ÏÉ麼Ðÿ»ú´æ¢é»Ã½Ç°³Í‰²·ÒºË–ü¼à£ë¹Ï¡©¡Ø³ÓÏÏ¥âÊÖ«¬l¿¥Ÿ“Ö¦¨yo£˜†°Äz­·‰aq®«fŠ¶wˆÀžÀ‡œ£¨’‡™Ã‰‰ ÈŸi’¡ž|™…€‹Ž©™€›ƒ€p‡£¬¨ƒc²rQ·¢Y¢¤¨š˜¶²Þ¡¿„¶‰®¤‹¼|½ƒ¿Ÿ­­‰š…Ö’¤²¤Ö‡ÐÎØ‹±´ðŸÛâÔƒÂïÕ}š¿úÂãÜíëöËÖÛÃãÓâãàÝäñÆõÎÚïóûäóÏêëîÓæïéáìÛíÌôóðæïÐåÚÿÛàáîÑìÚÿÙçÏüÙðÏõËëõñÃøçù²îÿãÉÿùìåßïæíÙäÙÙæßöØÛíëçÖóåðÆê×ÜÏìßìÍï×æÕðÁÞÜãíÿÀëÝåÞôêèÄ÷ìæ°ÂÖíõ¬îùäÛìÐœ áàÒóæÈétðëèÆÿîÚ„þáæ‚ÞÛá…ìõõ½üãë´õèí¿×ÛíŸÓ×ߺåäîÐÿÞëÁëÏîàðßðÓþõÛ¿ùØòÙÿÕÿ»ýÏ÷ÂòîÖ£yíÑáÇêÕÁÃðã¸ÎÍøÚÏô߶ÏåæÕÒåõÞiçÓìäîãÚÀùøÒµéÝõ¤ñöâ¡çÙ¬¹Ó¹ÊÄÅÉ¿ÉËÆÈÍÈÈÉÄÄþÃÅÂÀÄÃÀ»PCguWFŽ´ËÌËÒ´ûÉÅÈÈÆÌÀ¿ÂÕÄÈ´Y6cƒ–™£¢…dD²¾ÁÃÁ¿ÆȽÁÄÁÁÈËÆÂÇÈÄÂÆÄËÒÎÌÑÓÐÆÂÈÎËÅÄÄÃÃÅÇÇÆÅ»¿ÂÂÁÃÄÂÅÅÃÂÁÂÄżÉÆÊżÇÅÅÃÿ»ÂÊÇ¿ÁÆÉÆÃÆ˺Á¾¿ÕZíÑT<æÌ¢#Éã3ÁøG0ÑÙK)Üþ]·à—!ÜШ¼îL7ÄÝ•ÊÏ µìo1¹èv¦íÁ‹áÌ3ƒäµœëòt4ÛÛ/FóÕ6_Öç1/ÞÞÏÉZ,èÈ6RÅÝS"Óñ€ÖÊ–%ÖÞs1Áæ“Y¼º£&­³m&ÁØŒ$UË×"O”™êš'ºÞÆdt¯%$ÐÄŒÙÂ/8ßÜiIäÒ$eÐé&„ÔÍ'OÖð]GÕå<9÷Þ\WâàdqÄî)âíŠcßêR0ÌæÃÇä³8úÛEXøÁp4Ð÷x+äæÞíÕ(Éä—ÊÓ‘-æì‰;ßóŠËÏ¢¹¹Á!‘é?½è¬!·Óª-UÕ¼ zéÃ"†º·0DÖÜ‹ÕÑ%#ÎÕ91íB$Ê«_ ÆÇ1ÌÞY?Ñ¿D9§Ð=XÎÛ\$–ÔeNš°a+°ÉI\Îç€pÖÌŽ1àÚŠF©Ñ‚2»ØÆ1©Ù¢+§ÁÁ:•Ñ—$»äÉ<¹õ¨(ÊÙÙÍìÔ¶ÙßC¹èé›ëêáw‚ë樎èë³ñë“Ìððß»göä±–ößâ×ëùÞòëáÊâåÉ}ÕöáÈàïï„õåèyãçÖ…ðÞõÍíìÝväôáÓâõæÈÞëÝÓ¦ôíîíç§ÏãïáÕöâãàòàИßùËkßÚ÷‡ïàÝJÎâëÐäêôÆåôã¾ôðá§äø†åäà¶ÙåÝŠ„á÷~šíå«}ëÚæ¡í÷ÌDíâ½Yê×Ë8âäÜÜâñaÙùâp·ñå[ÎØçYâî½aÜôápÜâÞdÁâçvª÷×UÓåæzìàv¹äèFÌèæ‚«û߶hæ㬕áíŽÅé×jÜæ ëèÇu÷æÇoÛìÄ^ìêÁ…Öùª¬èÜÓDûÞÛïôÕ‰¥¼¾·¿ÈÀÌÊÆÍÍÊÑËÈËÍÈÆüÈÉÄÃÆûºWt»ÄÈÁuQ·Ã¼Ï˺ĻÄÄÏ˼ÃÃÁ­ÂÇÒ­K9ED=9;746{ÁØÇÊËÇÕͽÈÍÀ¸ÁÆÍÉÀÃǾ½¼ÆÎËÇÊÌ̾ÈÑÏÉÆÇÆÄÅÆÇÇÆÀÅÇÿ¿À¿Æž»½ÂÈÉɼÄƽÀ¸´½ÈŽÀÈÇÅ¿¾ÄËÍËʾƾÇëÛ÷«ÓÀÖª¿É¹ªÌÍЇѫғι¨•Ç¸Âĵٟط»—¾ºäžØŤ…µ¿³•á¿Ï£º®ã±Ö©Ø¶± ì¬Æ®Ó©Ð±µ›ÄÈÄÃʬR˜Ö¾¼¤Á©°¯ÊȼԿұªÌ¾×©Ô¸¦qÔµ¦HÔ´ž\˜Á¯M½¾¯W—©©P{§¬V_›ÂRi«ÕxK¾½Udº¸7RÆÅZz¾½m‡©Ávx¾Ò…Û»ÚyÁ©¼…Ô̦í©Ë¯»Á³¶óϤÍâÓɬ³°Ä¹ÕŬ¯Ûв¤ö¸¹‹ëÙ§꾫¹ñÎϲÀº»«òÎü§è­·ŽÝÔΉ¹¾½™¹Ê³¥Ï¿Ñ¦Î†Å’°‡Š›³z°­¶ˆnŠº¨j’§¯Æ’» í’¸ˆ€–­°º¢¦¹lˆsš•©v{˜‚h—‹…ƒ°±“l·z¡¨›’œ¡wŽ‹p‡ gHÀ‘„›£“j‘楿•Ú¦„}‘ˆ¦‰ÝÄ̇³§ƒ…Í•|‡ŽwˆÌ¼Æ»Ý¸”ÚâåÀçÇÿÈÜÉçƒÛÎã‚ÑÚíÍÆéÌßÔëôÛãóàÙèçåÏìÖ÷Ï¿óÔæåäõÚæñãôÑóðãÝêÚêÕêÿáÕõì÷ÔòòøÕõîæÒóßÿÄòåèØßðõÓðÝöÑãææàÙåÔëÚéóÇéïïãÎóðéÜàúßÎòãéÏ÷àûÃýáô¶èòçÏîéßÖóØÿÆôòåÁÑõí×ïç䮲åà×ÅæãÎèÞÞáÖùÍïÐïâê¯îäÕ¸åìÔgïÞÿÕúåæÏëèè¹êãûµíÐðµÿäηõÖóÉÿâõÁÝâýªõæö·øäøÐÖÛù¶Ùåð[Ûëâ×ÜõèËÔÿÑÒîÔ~¸Øá«wï×ÕÊïàØ­úåç¼æéé®çâîÒùÙÞ£åÛÔµáÔåxüØ㨫¸¾Á¾ÂÅÑÕÎËÏÎÆÐÄÇÂÆÎÃÄÆÕÈÂÒ»¿:Dû½Ì»¾-pØ¿»Ì¹³ºÈÒÎÃÀƭȱǻ»849;;LGE·¼ÏÌÃÊÉÈÕÇлڿËÆÉÅÍÁ¿ÂÀÄÀÁÀÅÊÇÇÈÃϽÆÎÌÊÌǾÇÅÂÈÂÀ¿ÊÃÀÊƾÇÉÌƺ¶¼¿¹Æ¾½ÂÃÅÆÂþ¹ºÀÅÈÈÐÅ·ÁÓÇÀÌÇ¿©òäæ=ãôi9ëßm¿È¿áu/ØÕD,âÝ‘ʆÍàlßÙ‡ÃÒ•Èìy +âÜaÓØ°"‘ëϊЯ žç¹vÞôEqàÇ8ÍÄ2UàÄKéìE%ãìP<èÍ*<âÉ–ÞË~0ÐÛ|4ËÈfN»Î˜NÞ½•$´âw5ÚÅÌQ·Û*ŒË‘RfÖ£Œê¥KÛ¶X|­´YôÉkeÜ×6TæÞ3vÑÕiß×vÑæ:.Üá‚rúÛe3Ôê,AÛÛx6Ýã*$ôô±FæóÁ;Ùù—:è÷=ñâi#Òè¾=Ôô¹:ÏÛÙI©Þ¸Râì€`Üía0ÙÖ¿¿Ä¤ž¼¢U¾ÂŸ!…²¸,x®2¨Ô±ÊÃÇ2eªÔRbû¶5AÖ®0\Ó½5IÅÆ+KÔ·+8ÎïKl½Õ?9­íg?×¹28µÝi.‹¹Z'~Át&Ò¸<6½×±)»ä¸ÁÕU(ɶ¬R¹Õ­;©î™nÞŠ'±Ô¹NÑå®T±ãØqÑîºVŠêÛ€­éço¥ÖÀPËîÕ¢ãàÈÂôéÅÒíÖ¡ÝâÿÌÚßÝÜÜìçÌÞïíÛjó÷Þ¦ÝîݳÚíÕ½éùà½îìçÁ÷öì‰ñóï©ãôý„åêûÈåçô›èéîÛßçåÑ·êèÝòâõèÑéå×ËîððÍóäÙ×éüá“ãçÔ|×ó܈ëû¼jÓèÙ}Ñê
ýçš®éÚ­ÛÖß’¢äà¡ìé×—¹à׫yëâ¦NÐö·ŸöÞÉQÚóå–ÞæíjÔêÇ äéßÆëãpÈïðJôïÞoÖô߃ÖõÚˆ¬öØ~Ýöì…¾ãÔcËÝêo®ãÖkËç㜚ëÙª†×ס«×ðœµéѶˆÿל|ëäÈŠßýÕœÅæÊtúࡘåÝ©¢ÙðÙ‘âæãoãפªÊ¾ÍºËÊÈÈÏÕÑÇÐÅÈÃÇÎÃÅÅÏÈÉĺ|3žáÉÃËÃÕ»[J Ä¸ÃÁ¹ÉÎÄÃÊƹ²Á³È¼¸@{Œ¨±¹¼½Ã³…¾ÕÆÄËÊ˸ĵ϶ÁÃÈ¿ÔÏÄÅÌÑÉÌÈÇÅÄÊÍƲÃËþÀ¸¨±±¿Â¿ÆÎÙÇÉÅÄÇÅÈÕÄËľÆô®¾ÂÍÐÆÀÂôºÀÀ»»ÂÉ»ÂÓËÈÐÉËÔÇÏÅÖ¢çÚ«Á×Éê¤ÜÉÊh°¹ß¶È­¤µÜ½­„Ö°½ŠÉ¸Ø£Ì±ÎªÃ¿Ì§Ð²»²ÅÆʩβǚέ¹{¾«½ŠÁ­ÕªÙ¾Û„Áµ¢m®Ë¾yµÁÀnÅÄžˬ®³¥¾·Ó¦v˪}JÄ®©„߶‡Fo¸ºUy¹§Kª¦My¬µJgž´Bc¥µGuÇ n¸ Ôpd´ÁZcœ¸i›¯ri‘¡c³µjÈ£¨€Ï¥°{—®¥Ú⳦­ÌÈ̱«œ¢À¡¦ë¾¬¥ÚÅ«ÃßÐîÒèÏâ¤íÚ¬«ëÈͪøÑ­–íÌÚ‘ì½³‡óØƪªª·«ï¾œ­¹œª¤Æ¤Ëe–”ªŽu‰Ä•q‘Ï}f~²ƒ]ŠÁlŸº‡“t®Ž[]®©u“°œˆ¶ž‹i§`xw«¡™ŠŸÁ•u”Æt^}qcŒ¬•ˆ‰j™šR—´…\~¥Œe£ÖÎæ}²ª¶‘¸¿¯¢†µn¯ÇÍîׂ‘«ÎÒº¡¾|ÅÖÎt¼¿Ð{¿×ÇŒ”éðÄÒæÛ†¸ÈÃ}ÊÚßÊ´ëèÍÔòЪ´ÐâÚåâúâèîîÛÍäìÖäâÆí¥öÈóØñÔôÔéöáÊðÝàÆëçêÅóòð¶ÿÒÿÛâìíÎÿæò÷äòéÄøâãÕàèßßÆïêÛèÖáØÁçðâ×ñÞÔ³éåÜàæØë½úáóÁûáïÄéáÝÆõèì´÷éò½ÏÖâ²ÌòêÍöòÖÑ™çÒÅââãÓâÒìÚÀòâÀ~½à·¥ôðÝ~ÜÖéªÿíøpòééµûàñ±ìòñ—ñÕýœûëêµìàê¾ÿïá®Ïùï®ýïéŸÝóö³ÿØÿ¹Ýßíªùáâ­’ñåÓ»ìëµÁãî„žÚå™zÎÕÚ¶óàÄ°ïÿáÍÔÿØÊÄëéÉ×ÿÝòÂÿÔåÂíÐ¥¨Í¾Ì²ÍÇÅÊÏÏÌÌÑÆÊÄÈÏÄÆÈÊÇɸ«:GÆÐÃÄĽÆÄœ,]ĸ¾ÀËÅÍÊÀÁËȺ»º¶Å¼²>ÄÂÔȽÁÊǤ•ÆÙǾ¾º¸ÇÒÄѼÃÌÐÁÏÐÇÄÅÅǼÃÈ¿¶¹º°¼ÉʾºÀ¿´ÅÀ¿¿»¶ºÂ½°´Âþ¸³¾Ä¼·À½·¿¯½Ðλ²¹¿°¸ÀÁ»·¹½²½ÓÎÉÐÊÐÀºËÎΓÚûGOãèˆ-Üå}+ÉØsàÙ>&×ØY"¹ÐqËë(ÁÀsÎä°&²ä–'Òä‹"Òã'Õ´!¢è¸‰ìµ™ÜïJÕÛ"\ïÏ)…Ñã*<íÚy#ñÅN íÕ'SËÜd$¼ìlÀᓳÕo–ˬ:´é~eºÙz'¯Ö—ü¥'bݪX•³¡?Á½´FÛº+mãÖ€ÝÌ"?ÕØJF˽)mÃÁ†åÀ,1Üå?7Õ÷4&üÇŒ8ëì(ìßs1ÔãKTïÕ—5ÙêË'ëèÁ"á÷¨X÷à¿èç£ÍñÑ\êçk<åÌ¢Úé±ÖÔsdËÛ†#Áô›Ü¿ Pøˆ:³á¨0Rà’T;Ô®-=Ú†2;Ö°E<®ÚNDÀ»S"¾¦7ÀÐ?CÓ¿'6ÞРÉ_JÀØM+´á7DÐ¥N9•ð|YxËÑŠÀfBÛç®]ÞÅk'™ë|IñËC1ÁÕ©A„Ûâ_oê’6ÄØw9¹áº_Îæº@¿Ýº\¨ØÖ‡ªÝß_µÛë_Âè營ëÔ·ÄêõŽî膛éëÒÔîûâäòåïëâæ­bÂéÍR×òÏzàóãÌäòÊj¾öëÂîðèÄôøì…ãúëËáðêzÝçñ²ÝíåµØëçÇ öéíÛçæ½ÎïæèØíéÕ èôåÕçÚÅhÒåá„ìñß{àñê\ñÕð¾ãçÝZ™îý’çÚ‡°ÛÞ½}ã嬛âøz±íî­ÔÜëÜaÊ÷{UÚàÐiØíÕMØìÚbäëÚ_òìÚsÄåð‰ÛÝéVÚíËUòíâ`Ãñãe³íõpÌÝÛmÅÝè‡È÷àe¹ößv¿èØ{“óؽ¨èغ™ø݇Éêé±±Èë›èݳ«ÙïÂgãàÖlòÞÃpòß­ŽäêÍnúØÝgñäÛ€¡¨ÈÐÕÐÉÉÐÔË¿ÂÐÑÇÌÆÈÏÅÈÊÌÆÀ»†({ѾÆÎËÈÂÅÇ16°¼ÅÃÐÏÅÂÊÌÅÅ̺½¿¼±/ÝÉÉ»½º°·±ÃÄ¿½Á¿Âϼù¿·ÀÒÐÌÆÉÈĹ¯½¿ËÐÁ²»ÈǺ¼ÈÍƾ¼ÍÁ³Áʽ¹¶²¬ÁÒÁ¶¾ÁÌÊËŶ²¼ÅÐÁ·¹ÀÅ»©»ºº¼¿½¶°ÀºÁ¼ÃÐÇÈƸ¸àâøµÔÕ̸ڱã­ÞÀ¸sѼµ£Ç¸Ô·Á½Ò°ÄµèªäÁ²¬ËÄÔ»³ŽØ—ÍÀÄ°³¿É±¿žè­Ê¾Ò¹É Ù¶Ú®ÎŸÉµá€Á¶º˜ÖÁ±›Î¼¼ÚÁö³ÉƲ}»¤²j¯Ð˜™{Ø–­œÅ±™—Á¥”F»¦ŠBVœ¡\Œ˜€_e¸¢io´¾`³ÊV€µ§T§¼u·£¾…{¦«‚‚«•x¤®r¢¢°ŠÄ‘Ç×Á´Æ×˶ȭ¬Å¼ã²¶æÆέ槢ÿ«œÁÑË°¯âÏå˜â±žèÀõóíÊÞ‹ÏÍÖ´ò¼à¯Á¨°ú¾¬©çÂߦßį†‚±”¨Ê‡º~½‚­”…‘Á‡‘srS–N‰W´¡•°rƒt‘‰xŒ¯ª{Ÿn¡€wƒ—›°€w§¶ŸŒs‰}p—QŽ ƒ¶Ð˜iƒ}–•ƒd¥È•¨°mª–lVÀž†r–š¡t¾th}ÀÊçž¡Ôï¢Áή|—À¸­åÔÔo°··\ËÚ¹pÆÕܪÛÑr¾Â×yçÝò ±èïËÈãÄ”ËçÉØÙÈëÙåîåëõèûöåæó·êÜÿªõâé²ðçæØèÖÊs´ìêÂåæçÃëá÷ÑñÚÿØÙØáÒéããÊíõìÁæñïÞÄìåä×çëÑáæäáÆÛãâÀæìàÜðéð³÷ëú·ôÏ߸òÚèÑÿ×àÓîáúªÀÔê’™ðù·áýçÂ~óå‹êÞÂÝáÖ„ÅõêÕ_Óì‚sòÚÞbîÅâÝüʬâíü£üçè¨ÞÖé°ÿæë³×îÓ´ùñúa¿îù¨ìóîÂýèí îãã©íäשàßê¤ÎöòvjÜí“¡óç»”êöƒ³îââÔãê·•ÙåÉÍßÛÉ…ÿæËmÿóâ“ÿåÑ»òཅýέBóéê’· ÃÃÆÈÆÆÏ×οÁÏÑÈÍÆÈÎÅÉÅÏÆ»ÇT4¤ÛÀÊÈÄÐËÌÉK,„ÀÏÇÏÍÆÇÐÎÅÆÑÁ¿Ã¾Ã¼'Òľ³¿¼®¾É×Ⱥ¹¿ÁÆÐÂÊÉÇÇÁÊ·ÛÎÍ¿ÂɼÈËȾ«¤µÇÈÆ»·»¼·¶»Á¸£¹Æµ»ÁÄ©ª¹¸¹º°¶ª½Æ±¶Æºµ¶¼½¼¿¿¶¾¼º¼ÀÀ¼·Ë½¼¶¿ÌÀ¿ËÌ»ÁäíÙ*ùäJ>ïã…(æˉ(ÇÞG#ßåf-Êê¡Ñø¢ËêŒ%Ôã–Ö̧æÜ•%Æု穖ÅÉŸêÅ—߯'}ãã„êÒ,_Ûè(xïÙ†ÝâA&êÕEAßâGçí†7Ïé`/Æà€aÎÉyÌÏŽR¥ìˆ8êH5¿æ¤(3ÝÃ#]ÕšK§Û¡@ÔÊ)Ÿã¹Ø«!{ªÛ*[ãÅ}ÞÞ€òÆ*@ÚÒ;>àîN<øÚŠ†ÞÆÇOáè¨DÓë‘8ßðSNæãÅ*ÌôÄKÙÙÌ-ÿì3ìÌ’1íêŸ7Öà\9èßÚFÚ̹<Ï߆`ÐÌSNæÁ›T´è›­ü¢OnÚ¯¸ß§*Pë»0Îðxq¾»=4ÄË8.ã¾4eí­,GÅÉBfÝ»+½µ,kÉäF0­Ñ*/ÀÓT7ÈÛk5¸áS(Öáa1ÍÎ~1ϽU)Áј7®Ì|Cœ×±VÉÔ¨;¿ô§fËÕÃcÖÖ6CÃéÜcÇá­A¿ÙÕ~Óáãw§å±Q¶Þ˼ÚáhÃãà¤ÐòÔŸj×ʱÎæàœvóæÑÎé渮èí±zàçÕ{ïæõ´÷úíÛñè½dÓéæ¼òðã»÷øêèõýà…áéöÝêô{ñãïÐõââÁÈèñàÔèåÕãíòßßÿíÕÉêåͤàæο×òë©ûïÙ’åÞü©ÿæÕ^Æëã”ÚîÝžßÛãŸÈîëÓåëÜ‚ùÁì‘ßÞé{¾Üó½oáÑÐ_¼ûÊpæäìlÓêÐ|üÖÖèèÌ•êðô„¿õñwÛíçVòÙÜ]Õìï´äòá…ÈïÑtÔñåˆ×ëç‚çæès¾íÜ›øÞîŘðÞ°ŸÏî–×êí¸‘ûࡃèÛûßæ·ŸÕýȉöñ¼yìçϳìï²±Ûìß®ÌÏáyãÔÈμÏÈÈÀÂÎÔÏÊÌÐÈÎÇÇÎÅÊÀÎÄÂÆ1;°ÏÃÉÃÁËÅÀºc2UÄÌÈËÇÏÑÊÆËÌǽÃÆÃÌÆ/ȹÀµ¸¼¾ÈÀ¾ÊÍüÁ»ÒÔнÅÃÝËÌÊÓºÂÚÃÁÌÄÂÃÈÐÎÁ¹ÊÏ»¿¼²½Ç¹ÒÓ±ÁÖÀ´µÀÅÆùº«¶¿¶Ä˱½Àº³½ÍѶ½Ãþ¾ÄËÆÀÉÃÁź¾ÎȼÕ×Ýÿ½Õ«ºÏâ´à»ó”Üþ­Ì¤‹©ÐÃÝ©Ý®¼šã½Ì©ï¿½¶Ô»æ±Ó ÐžÑ¸™¼©œ§Ì©ÇU¯½Ð¢Ò¨ÄѬèÌÓÙ£ÉËÈ}¤°Ø£½Î§Æ½»ÇƵšª«vÆÁÆ‚ŸÁ§’u­ž‰n¼©Ä`†²¥ia©’Ra¤£`_ ˜[I¤¹ai¤¯e|¦¼g¬š¿a©¼µy}–•^«¼¯tšº¹€Åˆ·ÙÛµÀµÊ¨®×º»¥àÙ§ÅÆ×֓ðëñÅ£˜åÅ„¥ÚÖÚŽåÇé¿ôÂë–㹸£ÔÛÍ›ö°Ï›ÙÉÀ¦‘«ñŽÎÂÇ€ùÙ¾¢§’ƒv­dZª®|ŒŠº‹Æ¢z¥Ä”ªž‰c¢ÿÄÙµY”Œ‚„’¥n†´ ˆž–Š²¢—†®›Ÿ¡¤q§™\x©` µ‹o…””h„~^ó}†·™„Š “tˆ¹¹¦…®Š„¢§Ú㕧™Åy¨¡€lºÁ¿oš‘k’âÌÍf¢¯Œ`Äѽx¡¨êw–®ªeÅâáÀôâÙjÑÜÖ·çè²kóëÄÌÜæ®›ïÒíìù÷ÆËóåÒ’ØëðÂöÞøÙîæØÑíÜì¦ðñóÀñòïÄöøõòßæú¾øÚñÍÿêñ±úùðÍôìùØ×êéàÚìèÓÛêìÍÖïãäÜíæÝÀóîàÒÜðë¿þÛéÂÿÙܽÚãßÉáÚøÅïêñ¾óæü§ÎìåÜëßüÂèÛü´Ëãï»èñæë±îÖÔVèÿÔ}ëæÝ¡ÝÒÓ_ÿöõ}ôÝÊoØÙúªÙîí‰ìßÿ£ôãä‹èÔéÃïø÷¬þòê¨ûòê¨ûõõ¹ÿ×í¦Úáÿ¸ëÔûÔ¤üäÈÁÕô–Ðë蔉éò¢óñËÔéⳌëèÖ×÷ãÞ×çñÚËñáÄÐÿåÔØêèÓ¸èèÔÕ½ÁºÊ¿ÇÐÓÑÏÏÈÎÇÇÍÄÊÇ̽ͮ-6³ÈÎÎÑÒÌÈþs>9Ë»ÃÅÇÊÈÃÅÌÍǼÅÄËÌÀ9̶ÎÍËÊËθ¤·ËÍÈÌÐË„”¦—«¨Î¾Ú²¡~š›ÁÐÏÔÑ·˜€p‹¡·ÂÍÒÀ¥Á·€~v^–ʺËǨ‡uxˆ±ÅÐÍËéŽbam†§À½§¹ÁÇÇÂÁÆËÁ¿ÌÇÄÄ»Á»½»ÞÌÏþízWáù†2Õç€Ïáu+äç@qÞ½o ½×`ÇÛ€(½ßp!ÁåÃÞˆ$ÝÚpbÔÞt°ì¾5…àËjà³™ßÐ6DìÚ/MßÜ3ûÖ).ÞÖeäÜ]1ÒâeÓãMCà½z,¶Û‰6Åác ´Ù>ÆÄš­w¿ÐšXð¸eÏŠ>Ÿá²¾Ù¾ƒÛÒ ‰Ò«kÏ·[ØçA5òÏ$ZæÍf•ÓÅ.5àÇBAöÜÀDÝánQËås6Öã¨6ÝÖ€b÷ߊ8Ìí±ëéÀ.õ祉ãäƒ;àæ‘8ÖæÉ„ØÛG'çÔ¼)ÔÝÐ?Äïg0Øål%_Õ²¨ß×ÎÚyÞÓ¨!=ݵUÌÏÍ96Ñ£,)Íâ$CÛÂ_æµ4CßÏ#%Õ¿,Bá°%K͵IÌÍR*»Ú1Wʾ3¿·,.›ñÓǖ0¼àI<ÊÅ,Šàw"ÝwYâÐg0³Ù®%â¨|ÝÚr@ÓÞ·r¶Ç¼VîÚ{¹ß ØÃÈ*–ÛéƒÈÜâhã×é„­ÖãÆâàñ°…àსÐãµmÜçÌßéå¿ÛãÏ«íäÕÐÿìÐûìÒxäôÆñêâÂöñݽûçãÈû÷ù˜çé}ôìöÄøòÖ¨×èðíÙÜèáÙäãÛèáêÃœàîϱÛ÷ѵèñð¼ìñÞ‡îßéÍëèõÖîêÎt¾ïþ»óÝâ³ÒìÞ}žéÞ¡¬òÖ˜ªäÜŠ˜ûé£oÕýÏwéÓè}ûÖÌpÞæÒOÐçÛXìãå\ÿÎöqÊíñ’÷ïÛtÆêÆsêÏâkÄîÚ‹êðõˆÙìäkÏìà‚ÝõÍoÁçÞ…Ýóß••âê×àï°±òéÑß뢮àîåÚæùŸ”Úâµ¢áâÕ˜ÞæÎŽáëÏ—þìÍŒíïÒÇðòتՆÙÔ½ÇÉÉÉÇÆÉÐÕÎÇÎÇÆÌÄÊÓÌ´Ó“91»ÆÐÀÈÍÀÊÑÐ}H3Ò©½¿Ì¹´ÃÌÇÉÓ¾ÅÀÏDZ<ӿDzž˜»ÇŽÈØÔÇÊÓ¨–u4=S®Ãªt~„{\>u«·É™wy‰‚fYrž¼ÅÆÈ¿…ƒm2E^˪jMm‰‚z4ˆ¸Äѱyg‰‚aHd£ÐÇÅÄÇÊÉýĺÁ¿ÂȾÃÇλÏËìÿ°ÌÃÔÀ˱ç¶Í¤ØÜÆäµÂ¾²¯¾¤Ó¥Ì¦Ø²Ì¥á¬Û¬æ¦ä¾Î´Ò¸Å¼Ç¤ˆ¬Ï¦ìºÍ¯½˜Õ¤º¼Ü£Ê¬ç§ÊËҩͻӽ²³¯­®™¯²»ÜÌÀ´ÙÆŸ³{˜°°·Ÿ»­[ʬt˜¾¥£zÕŸ•}Ä©|rq¦eÒžŸ„d¨°DŽ¨°‰º£È{é¥ÆGh¡¿|¤ªÇfŸ©¢‹Ó¯·¤Ø”˜‰Ð©§µÐ®¡àÇ°âçƘáÍ¢½àî›ëÏÑšØבªìߧ•éƸƒîÄä~湟§ßƱ¡áκ’çèòÆý¿µ•ë¿ÉrÔÉèˆæÒ·¤ãе™œ…ÀyÅÍé…Ô›¸ŒË¨»˜¦¢–šÞÛω^¢Ë’k|«{ªÊ椦Ɔ·’ŒW‡—ŽŽ«nNW“ŒÉˆ~|˜p“­‘nyybq¹ÈÆw¨Å¯¡¦¥‹É©¹zy»¹x°æ®ÁÞ§‹Ð¶Él¹ÈˆlÀ¹gvÀÃÊm§¥¾t—ÀÜm´©¸j»®ƒ©ÏÜs°íîÀëÑî¿Æä맭Þà½çç‘ŸäçÃvéäÍÜíæljÓäÕÕèßê´èêÚÞãèåÒòÓù¼ÿÞí·üïç«üãüÉíâüȽØüÇîóݽéñêÃÛêóâÛçõÕÝÞèÝ×ðÜÌÃïíßÆëÚçÛûÔï®ëëè°ùéã·éìçâÜÿÚÄÞñêºÝñáÒèâêÀ²èõÆßå׆ìô¦µôæêèìê¦þáí°çßÖsæóÏKÛë݈íèè`áðî¡÷áÚ­ÿäè¢ßÏô¦ïÚìÁàÝ÷·ôäÿ¢üáì—Üîï™ÑÞþ§Õèî§ôçñ´¹íãÖ¼ïæÖÃíЈÝÞê±ÔçÍÑì뇫äîäâäÒ¯ÜùÕÆøÛÉ}ðèÞÀøàßËÿÚè¬âˆÃÄÃÇÁÂÆÇÅÃÉÑÊÁÄËÇÃÇËÔÍÊƘ/3ÊÁÄÄÍÔÉÄÕˉ26Å¿¹Ä¿ÀÈÄ·¿ÍÌÅÉÀļ²=¹¥ˆƒsRFrœÜÑêÙ¾ÇÇÂÉÊA:W¦š’¾º½Ç¾“9&½¬a{»½ÉÍÅs9KεÃÂÊÊË·4Œç¬ ’òÈŸñ¬‚Üä$[ÉÔ0aáÑVõÜ`OéÝ:/åâ@CòÍGÕÑ}Uö¸q"Îùw(íÆo)Åä’æÌ]7ÉïX!ØØ´pØ©=‚Ô¹Íí‘#²ËÓÀÀ¹¤Ù±nÐÞM÷ÒOêå!cê½yóí©>ãåj(êñ›xâ׎'àéœHÝö‘léÕ‡OÝãµ5Øó°CðâÃ,ñé´AÍàÈcçÔÒIåâÑ8âî©=çßÃ.ÒêâBëا1òöŸ8Ðã¾W¾æ° ÚÏÁ:¸Ã­±àçºä¥ÚÓ¾ ^ÕÕ:œÍÕLKФAÄÑ,-ËÐBg‚´ÉºÂÒÉ®76QMÈÙ¼·¾Â¢76©ÂÄÄÇÊÆÀÀ¼ÇËÈÄÀÂ˼ÂÈÓºÿíÉÔ©¿×ܛɾدۥ¡‹Ã´«¬¹´¯•Ô³½žÞªÁ Ï–v»Å¨Ö¹¶‘œ¢Ì¾´±µ¯–ì°Ó®ã¶Îι©s槫„̱¡‡É·¸±Ç²ÂÎÄ×—ŽÅÅÃÃÈÄÅÖß½±jfʦ‰€º³ƒtƦMlšµ¥eÏ«¥wd œ[½¤o`¬¼t_´¥ze¢±uŠ¥ºoÓ‡Ÿl½ž¿)„¥Âvœ¬¦Ÿ°®ŸœË¤¢Ú¡¸ˆ°³¤Ù΢«èÚÊÀÞÃð¦ê®Ò©Ì¹­«Ùá¾´ÝÒߗܾ±’۾ܜîÌÅŸ÷½˜íÚì´ãèä©ëÒƨÉ×i¸ÆêïÓ·°qi‰·pˆ¿¦¥x«mª~¬z‚v£“Щ˜xzu®‡™Ž¢v}{º¤‹Œ–›Å—° nž€tj—š† ÍŒiaf”—°}‹—†”³‡x‘ ŒƒÍ‚‚²£•m­”u‰­Ãmuǵ”Œª°¶g¬–€¹Óƒ…’Í‹®‘‚ßún»§£O½ q‹z¬ï•ºÖâƒÆâîÇèÕу–ÑÝÛ³ùçÎéðåÞ¼ÜÊÆØÛøÖ¼áÔ¢êäÍà¹èëÝpïæÿèÚïÛÕüâã¬òçõÆþåíºþÕàÄíßü¸ôíýÞôëïÇíâáÏáëðáÜêðÝæÉÛÑéùçûôðßÓ®öäØÔñàÙ¬êèè·íãÞÁÿËíÇùÙõ¸ÙúÙ±Áãä¼Ëóç½æáíÊÚêÌäãÎú¬èÕçÓÄû÷ظúÚÛÖïáÖ£ðÊüÁóÆÿ¡÷ãá°Þæà–âèô¶ÿàï´åÿÝ—ìêø«æÿë¼öàä´çäô•êÞù‰Àëù±ýêùîÝ窑çãÄ«ïí¨ÚÞÓ‡–ÜïÀÓäã¨ìÞÑõçîÔÝëëÖÐíüÝàìÿ¾ãÿÚÝÇçìê¢þíÃeßÎÉÉÔÌÇÉËÉÅÄɾ¿ÉÌËÉÄÆÀ¿Â75Á½ÅÉËÐÌÄÈ89ÇÌÇÅÅÇÍÎÉÌÐÊÂÉȶ¸Kj®ÖÓÕÂÂÇn3rÍ×ÊÔÏÈƽÇaD0¦¿Åº¼³¼½q<5|»¾¼ºº½Â97²ËÄÀÀºÄÄE><˜¹ÎÀ³¾Â²®>AF†ÁÞº¹º»¼³B8ÅÇÊÍÌÅÂöÅÌÈÁ¹»Æ¹¶¶À±÷ñÿ[ïñk´ã¦ÛѯXñéF=Ýìb*ÈâeÒã}(ËõdæÖ¶½å‰ÄêcÕà` +œçÀˆå»ƒß¨ žÚÍ'déÍ,nñÖ*NëÔ)èßnêÝZââ&ZíäB(³â|ÚݬÉâ' ÉÌ®ÈÆœ¨ðo:¾µp 7ªÅ|¸´-•÷¨³Ù²}Û°vßÓ±ÞÖ(8ßÑ"RçÌbι"ÓÏ3JñÙ/>ìóª&õ×)BÛå£)åÔB+áýrWáê]&ÆôÃßÛÐ+ñïg9àäË*àá¶,áï·(ÍÞ\ÉádWÔ礄Ú庇Àðw*ŽÊ©¤é¯¥ó ÎË£M¨âŽÎâŸSã«{ÎÛ"1ÙÐ0Ô¾S¸áÇ3GÔÝB=ÕÕN\íÏ"oÙ½mVÇè@ZßÎ)gÐÓ=@ÏÒd;ÌÑ&Óò_E×ì+Ãéi,±äx?ÎËR]»ÛÀ,Œò‰>wÜtYÀÕv$kíÂSÙò -Ë«"=ÁÄ2±ßÂmžëæiÜíà€·å쥆ÝæÌÜú覴Ùá¤]ñç—žòôȯæýÂk×ìØäóæšäé×ÄüÞÛ„×ùâîÝã–æñîƒÅûç˜äñí»çðà¼÷ñçÇßäíâÚòôìâêÞ¶ðà¿£ÞîºbçãʾéâÙ‡ÜîÙ‡æõØ~èåÒfíóßzìçætßò슋åñÑìÙ᛹õÜŽúÞŒÊà猒Þ÷ÅióéÚ[ëìÕÕöîáUáóÐyÝæÞrÞéטõíç“óößuäëÄ»îéïyøÛè\Ôûç~ãòØ…þñÚ]­ÜæôöùåzÛÝÞ¸øÞ¯‰êå”Ìïí±çñÀÙâ⛕ÑÛ¿¸òû±‹óÝÆ°øñÕ¼ãÒÏðÜÕ‚èûÒ‡äáφˌÊÅÅÎÕÏËÌÍÊÇÅ»¾ÉÏÇÄËÐÉÄÂÁš79È»ÄÈÉÌËÁ¸¿†74¿ÊÉÂÄÄÆÇÇÉÉÅÊ»»Â¸À“ÂÙ®»ÓÍÀ´º:H‚ØÆÏÁÉ·¼^HA¸ÙÌÈÅι¿Æu;<¹â¿¹ÆÃij“>2ƒ½ÃÁùÁÅE<=ÚË´²ÇÏú»C8AÉÉÇ¿Äĺ±¹A6‡ÃÁÅÉÄ¿ÁžÂÂÂÆÁ¸¶ÆËÉÁ¸ýöµÏÌËž´ªÑظެ¼¶¾«²Ã̿«۲įà̳À¦Ò²Ä¯Õ˜à¬×´Ô¶½³ëžç¥ß»Õ¼ªaںњè¸å¹ÅµÓ¡È±»“ÓÀŨ×Å­¾¿Ñ¬rµÎ²»ÔÒÁ¡±ílƒÖ•»n䪬cǺ•|ᬡR~¦{©ž™jo ›ms¦»j~¬ÀwØ‹­¡êŸhÙš£næ·vÒ²¾©ƒÈ¦¼Ì©Ñ¿ï½•‰Ò€Êл­±×Ê«±ÛÎ¥ˆØÌ«µÖÆ°¤ðŸ³ìÄËzåÏìÌãЧ£öᣛ×É®ø¹¸ŒêËÆ•z»¤»ËéÖÿ½¸ˆ›±Þ Þñ¼¯¸ÓÞ¡¹°y¢˜ƒ{¬Œv§©ž•fŽ®œ®~Ž~zzÂ}Œƒx²•Â£™©œŒŠ”ç…Ž–Ú›áéØw¨›œª˜y™‚|‡£”°¬¹½‘̯¡œ¶¤x}ÍǪk¶¬µm˜Š†whœ©ÓÁ€¡á¼…»˜¨“¸º×r½ ‡aµ–£ˆš«g¿±–x¢»ä’õÔö¿íâåØÃéêÍßöõÄãåäÎÅó̸‰ãâÙáñåщÏâä˜ÍùíÃöãßÏÿèò§ÿóîÆúÿí¿õôÞ«÷èæÆíßãÀåïðÅõ÷íÐèèñêàßâßßô÷¶ëâïîÏåãغÞøäÖêèê¸îíá©ùãßËüáìËñáñ»òäæ»Øééʺúå®ìîÿÃÝìàÃÊìÜÔåæîÛÆôàà¿÷âË­ÜÔìˆèãèêÑë½úäê¸öÖèµïÒùºëâñ§óúØ»ïðÞJàêà°äÿæÉýáø¤éôò²Óññáçÿìêê⇕êí­YêçκôñŽ«ßä°ÔéíåÁÞÿÁÒîÛ¹SçèÛ¹îòÞÝøú’²ëõèùÜì•ñáçœâžÑÅÄÇËÉÉËÊÆÆÈ¿ÂÌÐÇÄÉÌÍÈ»18˽ÁÅÆÇÈ¿²Ã…63»ÈÊÂÅÃÀÀÄÄÃÄÍÀÄÎÆƳÍÎÄÆÀÄÄ´¼748Ö¿ÎÄÏÊļS>EÅÒº¶¹Å­²·a78ÀÎÁÎÓÄȵ <4k¿Ä¼Ä»ÀÂB?JÎÆ»ÃÓÉÂÐÀ79Uê½²½ÆƼ®À>5jÁ¹½Ã¼ºÂÇÃÃÀÄÎ̽ɿ¼ÃÒÿåDéýƒOðæt-ïå½ÞèLNçñS3Öè¥ßôŒ!ÚêŽ<ÖÝpÏÜ”Ýé¨-Ýæˆ"¾ÓÆQ±ÛÆ—Îѯٰ‚ëÎ!‚Øá&•ÑÁ dÊòAØàW;ÔñWÙ«('ÅóU%ºÆ^pìÓi<îÙY.•ÒxgâÐj$¥Ôq(»çŒD{ç—?×߬sÑÔh½Íº@×Л-¾é¿'ÉèBçÄ8•ÜÛAÏæÓˆÑáé‹çë°”æôÎðêð„Ëøã–°ãæÕèäõ³×÷îçðîâ̲çéÙãèöÏÅðàñèäÿéÿãúìÌøëÿ¿õ÷çÃöûèÃÿòéËïììÌÞòóíàèîÛêÜýåçñéøßäðÛÊèÝËãèïöÍûíóÂïçäÑëí¼œ×åðzÞÚåˆââîÖæÝø¼îäè¡Éñá£éç•ÆóÚÏvßìÄgãÞÕs÷õÂfßîç€îåç“Üõù×ÿõçtÝúÚáðË¢èîíÈðßö“üðÿ¹òòÑhâþó»ôïÚŒáàñÃðïÜnàÓܧ”àØš­Éø£âå⦲á箬äâµÖç쫨æÞÆu×þ¿Îßö©îêíÛùèÓdñâÚ}æ×¾fÖÆÈÄÀÀÃÆÆÄÅÈÐÈÇËËÌȾËž¶Œ.4ÄľÀÆÆÆÀ³Çƒ79¾ÈÍÅÇÇÁÁÆÃÁÇÈÊÇÄÅĹ­²ßÉÑ×ÅжKL8ÍÁÑÎËÌÑÃT?OÏÂÂÃÂ˹ÂÅn>7ÊÅÂÆÆÍÉƵ2:kÑŴžÁÂABWËÏÊÄýºÂÇ2Glܻ¼¾ÀõÇ=9OõºÃ¼»ÅÈ´¼¿ÁÅÅÅ˸ÀÄÂäÿàÊÃïÑʤíܢۥÊÌÁÖ±¬ÆÏױ˱ӔƾÔĹv£Ñ¿äÂÓÅĶÁ³‡”Á˜‘įÊnÒ¸»NƳ¥=˳ˠ¾½»rÇ¥ä§Ë¼±f’Ų™ª¿Žž¼ªl¬ºÅmYÌ—eƒ¶°v̵˜Ä´¥l…º”m}­‡`xµ§bwƬk` Èpa´°j°Œ”]E´ž^ºŸÇe]·Êd‹ª®s²´«z¶£Ëwͦ»wg«ÆŒ²·©Ø»©°åÌó£à¬ ËÜÁ£·ÐðÀÑß¾áßîèþÈççܨÛåÀ³úʹ•©¼Ð¦ßÕ¸˜Ÿ¶Í˜ªÏª¨àĸ¢ÇÛ¶—ÿÝéÊðÒÉ–¶³ß¦·”g¥§‚v¡ÇœËÓ½˜Î²†”ŽŒ‚µ£‘zñºvÏ”¿vª•‚}¡£xp¨¢«†¨›|l¢«·‚Ÿµ©”•ž×¢‡ª©ˆ”¾«‹ƒÌšˆ‹—r{Î˯ž‘x’Ä…r†¦£¢nàÊÅoºÒ”|É­Ç}ÁоqÅ­É‘ÖªŠµ ²v¾ÊôxçÏÄ«ëÖÕ¦³ÙìÓÖñÑÂúàý…®æÔÔéÈÖÙÞÌâÌèØÝøûéÅøÑëÓ°âÞíÕÓõâþýäðêöÜëë¼ÿáèÂíßí¿äìݵñæêÈëëëÇÙïñåßàïÓàçôÎ×çâóßäíâÚôèÇÞçÿÚ´îëî±êüåìëÙÑËñÝî·øáâ¹ñëìÎüåþÅíàë·åØñ´×ðô¶äÓÜè›ñæî¥ÍïÔsãîí»úËÿÂçó¡ÇúÜìŽÒÀä‹Úäì½ñî߬îÕòÍøéÒ©íâñÎíãè¡èàëµöÛí¤öÏõÂðÝé•ÿâ黩ÔóŨæþÏîæö§²äçËÕêùØÐå×µÊéàGáå»Ýì÷¿äìâ~×òîÔ¡÷á̯óéÑq×ÇËÂÁ¾¿ÆËËÉÉÔÊÆÉËÏË¿ÆÀ»¸–82¶Î¾¾ÈÇŹÂz3?ÃÈËÅÆÉÅÆËÄ¿ÈÅÌľ±·¯ºÊ¸ÑγÌÀ[<<™ÄÍÒËÇÐÁVCWÝǼÇÀ¹ľeC8ßÏû»ÑÏÌ·)C`ͶËÅÆÅ@?UÑƼ¸»Ãľ´,@jÇ»Á¶Á¾Ê¹Æ7?@ųºÇÀ½Ä¯¸»º»¼ÂÌÍ»ÁÂÄÚÿäYHëÔIÍÒÎ+ÈÔXñÈ9DÙØ^2ÂÜ}'Óé…)Ñç6àØ·ÒÝsÖÊ\Ðè~¬÷¸ŒÍµ¡×´ŸÞ¶*sôÏ…îÖ^Ýê??Îåk%ûè?aáÞ)?ìÊ\Ðê„MÕÑ“&ËÖZ#ÏÓžÂÇv ÐÒ[ÃÚ˜ ÃÓŸ +v¨»ƒð˜ Áä„AŸÍ´à¶I{à» gìÎ1RÜÁ"}ÞКÎá$EâÞ0uÓëe=îóhVËê»+íò>`ëæ€oÖßo.ðÌÚ$ÿåͤÿ×Geíܼ?ãÝ°)ùß½=ëÙe4ÛÛ‡4åá‰(ÈàHEïó¸5ËäÃ0ºÑ¶3Âûd+zÚGžÜ•'¼õŽÃë¶8ŠËÉ"HÖ»&jã±ÂǨ'mÐÜJ8Ó»7+˶*,¹Ú2Þ¾MmôÕ)wáÌXZÝÝt:Â×{X§´hVÙÁd0ÕÌ’NºÐo7¬æ…Q¹·!¸×µ]áâŠ^¬ÛdMÏÙ¡aÆí¦(¿ßÒF•Ùµ¹å¨8ÄîàTÆäâ…ÒÖŠ¢ã꣗êémäéàŒèÝ¥høè¾®ðå³’åàáL×æÞËØåÌ´úèÖ€ñâôÌþßåºóöÒŽãòÿ×îñÝÊóíâ«êúî×ðåïîâãòÚëæãÖÙãðïÒêçÓ«âö¾ÃßïåÐïÿÝßóõÌîÎÎÊêèçtëîÚ^ñóà—ãåävÈåç’êëí~àèûÊáìö›Ë÷äéÙêæàqëà¹iÝòÝ[ÞìêöãîË„åäádÙãó{ÂíÛóèÈ`äîÞvéúÝnáèëéüíÝèãîpÎçÝj¹ëætåöåžöãÀ¦ë즑äósÌàê®­æð®«ðè²ìá·—ÝÌÒ|ü⢌íôìöáÿÄÅéýÛåøéЖéšÀÁÌÇÉÂÀÉÓÕÐÌÉÈËËÈÌÐÌýº¿¤E5®Õ¾½ÊÉÅÅ¿ºp.AÆÆÇÂÂÈÇÉÎļÆÈÎÍÓΙ©½Å³ÊÍÀÎÕÒ…0DoÐÆÌÊÇͺP;MÚÇÂÖÌÊÅ̼^@%ÒÅÊÏÅÄÚÅ«&KI¸½½ÓÌËÈ>7KпÂ˹»»µ;3[ÅÁ¼ÐÍÃϸ½/D;ıºÊ½À¹À½»ÀÂÄʾºÂ¶¿àÿ¯ÇÇԜɫâxØÆð£É¤ã¤·¼ÎÁ¿á›¸»Ü¤Ê¶¬¥Ù»Ï˜Ñ´Ô¢ÁÃ’ŠÄÊà¢ã“µÇ´H¾¼ÄjÉ­§|Á§¾[«¼Ö¿º±µ‚¹Ù®×®æ³˜ÀÑŽÁ½Ä_§Æ¼“X½ÉUΛ֯•VƯ­O¾¶N‚¯}Wˆ˜Äp;™Ã]Y¦­‚¯¯ªQl¢Åwc¯Êwwªº™Ë¨±Š°²Á…¹²»uÍ­¸¢Ô¬œ’ÙŲ¢èÓ³¼åÆá½Õ·²‡ôÉ­»âŸ¥¢å²Þ©íÆåáîͺæع¦êØí¬éǺ¤“©¹œûÓÌžåƵ󽥻éÓ¿ŠßÇÇšÈÇÒ¦ÎÞÁ›§‚q“³šµ~Ù¢»ƒ½³±ƒª„š—n•Â§¸¹¢q{´˜§–Š¨§}v††´x—Ÿ›œŠÍ’·ž“nµ£åœš‚§­H”‰}¤¾¾êÔ›¨¤n™Ã¸¹‹[±Þo¾£jv¶‹qm›‹{†¶§»€³½Í~ÔÒÍs¾©áiÅãÆÁéÆsØÔâ§î×´®öâÅÕÙìÂôËÍÞÒíÓ¥o²ÅØ×ûðÀÙíÝöjç÷ÍvñìÊÞàØìÂôáõ¿ÿÎÝhÝáÿÕìíæÅíïîÀëìÑÌìî÷ÊèöíãèðóÙèìæÎçéÕéÓ×úàÔóïÌÑïëÛÎïëßÃèçÞÁßäÒÙòâ÷ËûÛðÕßåâÑñÕ÷»ÿÔäÅïìò´äØè¿áÓÿÈãòßãÔâíö¤ÿÜϦõÚñƒñÕùßîèó¿îâ÷´éóÐsÁìÞ¨õ×ù«ë÷߯ñèÿ»øáëíÿ×ì¸ñäý´×æ÷†ÒÞñ£úêñ¨¢ïìŽíð»ÒÝÿ¶èØËÆÉâìË×æñÂÀÐìÎÞÒßwmâáÔÒêÚÿîæìÖÂðæÒÞ÷ÝÕ¿î—ÅÀÐÅÊÂÄËÍÐÑÌÔÅÅÇ¿ÀÉÊÄ®·Äª63¼ËžÁÖ¼É`0RÕÂÐÂηÍÂÐǹι±Ïΰ:K¦Î»¿¹ÃÄÑÄ€85jÌÀ¿ÉÅų@A`ÍÀÈÐË̹»¶a5=ÃÔ¿Ô¶¹Ë¸£6?O²Ã¯¹ÀÇËH7KÚÌÅÄÀ¾½¸½+6gØþ·ÄÒÀ¾ÉK@GÏ»¼ÇÄÀÁ¿ÁÁ¼¼ÃÄÀÁÉƾ¦¹á·BØÙn<Þà©Öæ *ÓãÏ<åà†FÍÚ´(ÎÙ“&ÞÜo%×Ëœ4¼á~*ÎÜp&ËÖ-ÅÔ©ÝÓ£ÞØ<º×¸*‡ÀÛ.‚ÍÝ1†ÇËlÞür,èÓR>ÝÙ]QÚÐ-4Ûèk5㯀+ìÀM9½Ç‡-ÀÉ}.Ì×u^ÆÀJEÁÕ®)Z³Ÿ 6ůKØÅ–-¡ó¼¨í¼.§ë°G™ÌÂRÒÕ3wÕÕvϲsÔ÷7câñ\#ùé”täíš@ÔܘmäëFóÝ›këÏÑ?Úô¿KêíÿçÜ™`ÀçŒ9ÒßuBÖÂB4ÕåÂAÓÙÝv×î£Vçç GÛ鼩ÐëUÆÞ¬JËê‹ £Þ« Ç¿´U‰Ä¥?ÂÑÇ)t­Õ@—ÓϺ蹌ÞË3a¸Ù)`ÑÌ%G»Ï51Ô¿DgÍÏ/mØÜITìÖJ]ÕÑa,½ÊS>ÚËN5ÔñÕ€ÛÖvT}ÛvoØÏ5ÂÚ '¬ÖŽ/¼¹iT¼ßÇ5åí§,µèáPÑׯ9¨ìáU¯ÞáfÒÚÆkÀßÚ˜”áÕ¸tñì„…ôÛc˜æã™–ðÃHáöÞíéöÚyê×âÖöãéËòÛ¾¶áéð•ßÿÝ~äñû~×çöÕôìäÔúääÑîçßrÜôýãáëòßéêìÍàèé‘£éòîÿéâÙÞéôÞ×ìàß¿áäãÓ÷ïçØÛåÏ´óêáÄëØáëôÕå™ÞÖÿ}âï”ÂçõœÒÿ܉Þà뺇äôæ•æøÑiñåÔ‘îÿ¾ZíæÃkâÛñßñá÷ÜýêöÒñûÉGÒæÐæðõÃöàâŠÕìësÐñèqÚðæŽãïÚ}ÅõåpÀîÒ³×õíÁ¼êç¡ããøš¨óݼÒèá·Ðñë»ÉÝïÌëîÖÇîß´”óëÒöíêÙ~ððôäãæÔwÞÙÍÅÆÂÆÍÏÐÎÇÌÄÌÕÌÇÈÄÂӹú@>nÐÃÊμ¼Ä´µM7dàÊÇÃÄÄϼ½¹ºÅÊÊβ]/8R¼ÄÉ»ÀÀúK<<ÔËËÇÄÓÍM=aÙÉÆÊÂƺÁ½e7<ÉǺËÊںƺ@EbÈÅ­¾ÆÁº;7SÎÈÊÎÉý¶°.:X¼²Â˽ÑÇ¿;:QÓ¿¾ÉÈÈÌ˼¿½¼ÀÀ¿Äž¹¼Ý÷ºªÇÑÙœ¢¾Àص٠ê¶æ»Ñ´Â¾å Ó¯ã³¹Â֤ųûµçÅҲȩ®sÅ£Þ­±ž„•Ì¥¼\ʲÁŽâ¬­uЪ«a¹½Åϲ­_ľ⚰̶†ÇÀ·n…¥˜c—¡¹’·Õ®f•¡³s¿»[Irªgq¾«I—ćdu«±‡r‰¢oIš§ca¤®Ue½±ŠQ¬Ãil¢ÁrZ ª`r”®€º¯ºw¥®¾}ê‰ڷ´|³®œÃÒ¨®Éë§ØÅ«¢ÃÀÐÀÚÊ»°ãéû‡ïììÍî¾øÇ׿š–ëܬ‰ëá „›Âž£ñʶ‰ôàÔ°ðÀ½ ‹Á¾‘Øʯš”݇¯„²sŒÈɖĆ@…°§k‚­QvƒÁ°Œ¸~‹¼¦ pǔԉ½¢Âª§¡ o­…“w•¤“~¸‡œ™“o—´ô£«’”prïȯ‹À“€£ÓÚ’§æÕ܀¦nµ©…ƒ”Œ‚}®Oˆ½­t…Áž‹Ž¾ÈÝ[ÕÌÂvÑÙâs·ª¯_Ÿ¼ËaÚßáSÔÔÛŒÅÜÚ‰‡å鲨ÙÛ¥£àÕÄËæùÐÈ×Âl¢ãùÜþÜÞÙ\òñº”áÛÝÒÿìÕÑéâðÏôõëÄøÜ÷ÕÿìðËçéïÎÿóéÑ÷çÿÑÿæàÔáðóãæáåÍåêèÒÙéÞíõÚíáßäèÐÒôðêÅìäâÐñÍâ×ÝéâÈøòåÈìâöÝëíóºúÍô‰…ùûÇìàðÂëßðÃýèïäÃûâ݇æûò¦óéÚÉÛðÒ³ðÛç¼õøäßßíÿØêÊã¾Üãä“ÿÊìÆóßï²íÜõ¾èéì¾ìïå¹ùáî¥ùù߇Òâü«öñÚ³ëêÊÆèô¾ëßñ‡£åáȺçêÑÚÛÙºÀëîÜàêéåÌô彚áëÑØñíÜ«ãêêó÷×Æc¹Å³¿ÄÂÈÏÏÏËÂÙÉÈÉÁÅÓÙÈÓ¿¾Êc8QÖÆÅ°£Ãζ»/EŽàÍÉÉÎÑÁ¾ÉÒѹ¸ÈÚÂ88G<ÈÉÄÅÏÍÀºDF@¿Ê¾ÇÉÃÈÉO5UÓÃÊÎÄó»¹d78Õº¾Â°»¤)5ZÈÁ±»¿¹±8;XÕÈÁ½¹»Âĵ5>]ÍÆɱÅÃŽ45NÔÀ¾Æ¾¾¹¼ÂÁ½¼º»Ãµ·ÁÉßøÎOCÿÓ9%éÿ”AÙÚž'ËÜ\\ØÙ’ÔÚ´4ÑÔ¦(ÑÑv+ÁÚŠ%ÜâmòÊS(×àf ÆóŸ+¶ã¬!§Ø£¥Ë¹jïº"Žâµ„ØÁ#<áé9-ê½=\Ǿ~Ãô42àÍ<Ù¼uÈÝHT»ê…_çÕj»Á_E¤µ…“¬¨@dÌ´$ÌÝ™±ï¼yÞ©?ï°)˜¹Á"hÙÃnÒØ9cÓ±§çÔ'pûâ)UéÐ-Rö¾=Ôß¹KôÞ7IâÙe~ðÖ“¤ÿæá ÷ñ½L÷îq{ÉÖ¢kÞâFåÐ@&ðÝ¡RÿãjRÌäÀ:òé`^ØÙÜ}¿ä‚äÍŒáâSHÇé–OˆÞDÇÖš*™Õ‘ÒµFØÑ]õ¯2¾½Æ–ͽ?>ÇÈ<ÞÏ!6ÉÐ"KߤG0ÅÅ@Ïå¹/ZËεjÌÒŠGçÏ…}êÊ~nþÉi.ˆÍdC¹µ5CžÜ¹.MÄ‹æ³DÌØgLÖàßaÆá?Ìñ–*Èæ×FÏñâuºÜàoæáÛ_£ôºl•ì웽ÜØs¤á㔢äín…ãÛ´Êâþ›™Ö×ÄeÛãÑXØçÖâäæÚ™çöÏ~ôÿípÓïÜØíàÁòäëÏïèá˜åúØœÔöçűøìÆØìïÓäæ㹪è姻ÿæ¼ÈêẌîåùÐùê×~êã¾³çåæÏúììÃÿåå×âëìnÂíÕ‘Ôüù†ÁêãjÍààÏàðéËuïÚÎsÜüÏëäòÆœßþË`áåçŸüÏá‹ÚÙÅiÑæÚŒÿÓÃiÿùà‚ôàæ|Òÿè€Ýßðgæëßáðéè‡èÞÓV×éô}ÔÜÕ·²î找ôëyÙâùã’­Þá’®ßášçíÇÎñݺíѯÈçß¿ˆÜýª¤çíҗ梱ǵÃÆÅÊÎÌÎÌÃÇÁÌ×ÎÊÎÌϪȷ͖4@ÉÍÁ¿½ÀÉ·¸e»ÒÉÓйν̾½ÍÄÔÁÓÅT\™®Ê¾¼ÑÅ»ÀH8SÄÉ´¿Ïп¼T>WÑÁÒÛÒ˶½¿lB<áÆÕ½½²Åº–3H`ÏÍƹ¶¾ÁGD^ÉÃÇÏÎÉÀ¶¹7AeÖý¸¿Ã¸¾¾GèÖ==ÚÊ{KËÈt$ºÊ\2ºÛ€)Ç×dÌØqÄË~BÀÕ©8Žáº'ã£ÊÔ•"¥¾Ä™ÈÁ@{ƼtÛá:]Üæ WäôTÝÍ màØ@.ó×>7âñlpîÏ…"ÕãŸpÞî‡oôÞ…ŽáæÕ{äãÊ>ÿà¢PëÏxUðÞ?#äß[FÚÛ‚6ÓØ{(Æ÷~;Ýã©(ëÑ´W¿Ô“"©ËšÄ×y?ºÖyçž1ËÙ©Çãž>©ÅÄ4FåÂ4‰¼±8»×Èc,§¶D»Ë:1»­!jÄË1A§Ù`BÊÇItêÏgPÅÄG<Ý߃EÕÃq8âÕb>ÊÙhíét.™Õ8=Ëܧ%gì+Èà¨eÃïÑeÛáÅQÜιUÌáÅbÃ×ÊX¥ÕêŽÐÝãu§Øª[×ÙêÛö¬yõàêðç盘äóÀµØäy©ÛúŸ€àíÕ‡áìÁrÓñÑ´öëÐÈçæöÅðþìÛôöãÅþñä¶ìùéÉûç܇äáìÀúóöÚÞëãàéêíÏáççÞæ÷ôÜÓàëÛÞîè±®åíéÁÿîú³íëôÓêêØÍóóÞ¹öêù¸ÿñôéèãðÄõåü¼íö×ð€¨ùì¥YÏÐÇ`Úï̘ñì¾eÖöÔdÕåØ{íÞóÕðÞÜwÎÔÙ„ëçÝnÌÿÊNËñøÒêåû…ïèÞpáëßiÑØì×õâï~åÙÎb¶Þû¯£îëËÝðõÙéíã‰ÉÞê°±ÓãÇÜòß°ÏÝïÈyÖë¹~ûùÂÀäß©ØùàݬêæÂ|×ý¸kš²ÉÃËÊÉÃÀÈÏÊÔÊÍ;¹ÀÁÀÃʽÃÀ«B^ÂÓľÀɦoÇÊÆÑÂÌÄÓÊÎbH{×ÃÅäÁ¥jŽ­Æ̹Ưݲt=`Õ½ÅÉÈÊ»ÔÐI7^ÔÀÕÕÄÆÂϾT27Ö¿º³½È¹È 48IÎËȸ¼Á³13MÒľÅÊÍÉÀ»7:`׿ºÄºÅÃÄ·68@ÑÇÊÈ»¸¿¾ÃÁººÃÇÅǼËÁÉÉØÿ±—ÃàÒÙ®÷³á§ê²íÅ©·Ã´Á¡Ú´Ð®ê©áµÓ”íºà·à¦½›Ã°Ü¤Å¡ù±µ£Óª×²¹‚Ï®«p˱ܦ۷ͲÀ°ÀÄÖ¸º˜Ê¤¤”²Ã¥„¹¼ÌÃÌ·¢|šŽª•œË³€±Å½ˆv»´}­¹®Q‰£‹NÍÀ eœ¦˜ek›¹ps…ÐVg ½u‰´«cu˜ºT»©es˜°yg£¾“Ú¶¶™Î¬¿ŒØ°¶œ´º½Òή–ÜŸÏßѦšèÈ­ ë³ÑçæóºãÖèü×úÔõ§ñÚÒ–àÌ»¤åį•‘º®ÌÊŽú㬕¾µ¯Ì®ƒÛǧŠßÍÄÜá·šÃl˜¡¤º¡©b¡¨®ÜŠ«qzzš‘ºœ ’y{¹ª€‘µŒqƒXLy†¦˜wn~s¢¶˜{¬¤£•’Ÿ¥z®ßǧ˜’›rrÈ´Ÿ~Ðw£Ä蓲͛k‡¿å Ž‹v„ÄÀfš°™’²Šh§ÜÕ^ÌÔÞ‘öÌÀd²™yÄÏÚ€­°Ø°àÑäe§ÔÓ¡Õàëp”ëÿ´‘ìßóôßêÚÁïÙÑÁÞýßØéíÀ›÷Øæ¾ùãñÆíïÝÄêèçßïéõÁöôæùõì÷ÀúõñÀíòݧðÙú±òäóÅöçêÚïûåàçåèÌâééÎÞèêàÞïöÝË×ïßæýÛîÊùÍð¯êéß¼ìóÔÌõíà¼îâÿªïíïòôÚÞÃçîñÑÿæé¾îäþºáéÐÙ‘îõê®ÿÚÔÀÿéÙ§ìÚýÃ÷åõÎÿèÜâäÜñ§ýâû©ñìóÂã÷ÓšòäðÃêäÿ­ÿøä»ÿíزþåýµäåö¬ûöõ’ÔíÖ¬¤ãáºÑâÚËóßð¸åèÿÁßþñÃÔïî´¥ÝãäÄÿçÌœþñÀÉÞìÀãçéÞÌëûέëòÙ£³ÕÙÆÇÇÆ¿»ÅÍÈÇÄÑÙÊ¿¿¼ÅÒÊÄǺÌVƒÇÄÅÝ®rR§ÏÊÃÎÄÈÂÀ¹²7*P¼¹»½Áб^¢Ç¶ÕÉÚƒR‚ªßÀ´ÃÁÊÂÔÅICUÀ¸ÉÊÎÄÐÇg>?ÇÁ³Â½ÊÄÍŸ>FMÒÎÌÊȶ§?GMÌÂÁÆÈÌÏÍ£38RÍÄ»¶ÂËźCD?º¾ÏÕÆÀÄÁÁ½»ÀÃÄÉ¿Ä´ËÏÔÿØ2`ÝÙl$ÏÓ¾(ÒôŒ;êÞ@kåØ£Îã¥ÓܘØò_-ÊÊ|Çê”ßä½'é猿틣ᣯݦèÃ!Vñ·)aàÃwÛÙ(8ÞØA%îÉ4HîÎ*váá#)Ýß]ßÎd'É×i%è݈&ËØ[$ÎÔ{]µèi ­Û³%}Ö¼ +Çè£EØÙ¾‰¾¡!}Ú—>‰¹Ì cáÕ'uçàŠ×Á›ë±']ßÒ,héá]?ü¯&WÖæŽ7ñÓˆSåÕtœôß|B×ôÅFÒùž>äòŒfñð¨såÞU5ñãDBõÞ\>ÕÜq&ÒæK9ËêHZíáa3Úò™=yëž­ìnß×›™Å”ÍÒˆ3ĺ„&ÊÌÄKÜ¡%<Õ‹Y´c-²Â/Dߟ&CÖÔ=Q¿ÎUGÆãDRÜÙq¡Ì°21Èáf'ÍÚv.Ø×?¦ÓÒt$¸ë&†ÞÈiTêÛ2M¸Ñ¶ˆÜ†%·ÚtMÿÙ°×éÝ]Ë͉.£Ü”EÝ×¹*µßë]Êß¿EÒñ²L«æ匹ý×ÌêäÑt³Üâ¹xçö¢Œá쎉õâÉfÚóíWÛîÊ{ôü¬»çäОîéúÒüÝÞÆôôé¹ïõïÑïøågÎäó²ïôìÇêìêéÞõêÃÔçíÔèïò¶ªãîÞæëëâéèáãÕîæÛ{æ×ì¾ÿßìÝâéëÇëõÑsøïíæôã¡ÜÿÞ˜ÙñꃽÞ・ïî•€þÜÁaîëº_íøµÑñëåœçáÜY×ðÄwîìÓ‚àâæYäõà”âÿÔÁõðÏ}óÞáh¸þçlÜëëŠîëß~íñÿ†Ì÷ØdØéè¡ÿᤨÞ÷“àòƒËìê‹äßê‘°í䀫ëݦzÓñËŽðóÙÛöꃴäð¿†ó걉ìôÔsÞÄ‚ÈÍÈÁÃý¹ÃËÅÏÅÈÊ¿ÀÐ×ÓÂÌÇ̸¸#U‹Ž‚@YÆÆÀÔ½ÄÒÈÊÈÌÁBC[ÈÀͺÑÌ×®§k¤„‰WN2~ªÆ¼Ð¾É½Ï·¥ˆ,7)†£–ºÆºŽ†‚/4„‹‰¾ºÊ‰~Y%;!ˆ|¬® |09'nƒªÇÅ°–h&=/~ž»À­…sz"73e{¦À½º¼·ÃƼ»º¼Å¿È´ÈÎÕþ¸²¾Ôªß®á˜À®ß›°žß®²ÄǸÀ±ß˜ÊŸé¦Çšó¾¹´Ü¥¯±Ö Ó³É¾Ù´Â»Ö·±§É¥ë¬Ö¢À”Ó‡¾ Ä©¿°™žÌ¹À¹¯¨Ö¹»ƒÊ§}ß®¯‡¾´¨~ÐÍ­á«É‘Í·¡z@·’¦dĬ“Lö–r‡®–B_¯¨^KŸÁVˆŠ½^˶­Ù™·Jc±Ä[c«•z·œ¬Œ¸¡±–ūԴ尹ܦ»æË ÀËÕ®™¡Ü •—¥­›ñÀÀ¦éÜ–Òô½¤’èÅÁ“ÿÉïªÞéѱÞç—˜³š“ôÕº¡ÿØ°Ž­âµv³¶¤‘éÚ¬¨é⧋¬É ±cn« µyùž‘¤wš†½¥|‰¿”½‚Âr|°qobpdp’™¯Ç–˜›žŠ¢Ÿ‚»ÜëǨ™šx‘¤ž…¢ÐŽj®”w¯”€„Ê·¯ÑîÂÑá汊ÈÊ}†²½ ŽÀÎs„©ÊŠ›×¿s°«šƒÛòdÖÎÌhÎÕŒY×wcâ´µ|£Üñv¶äÊXðÔÁÎãñ‹²ÙäįæÒ– æñÄÔðèèÀïÎvÑìðÒªðÚõmþïß¾ûîÓÝèàÛáôôÞ¾ýûá¼ú÷ç»ÿíñÐìïïÆçïê²ñìòÊáâèíæìôÞìåéâèêñã×ãëãÝèãáááãÙÇëãèÑþäØ»ëðåÖïãÞ»êÝåšþßõÔûçè½ûáìÔìåêºÐøð°òç뽓òäßGïäÐRéêÊÞñßäÄìçç¬óãÞÝêéã¹íûð¹úêâ®ë÷Øàîýå²ôÖýöÝò¡ÕôõÆê÷ðžÿäÿ‰ÖââœòÙöšÊàçj„úÖ•Ñàö¯ëõÙÑÕìì©îÞâ³ÃßõÀªðçÓÜá×æðß²ÑÿåËÆýìÆÝñäݵóÁˆÙÚ¸É˾ÄÉÄÊÎÉÅÎ͹´ÁÉÁÎÕØÖľÎÕ£{qpz—³ÇÊÊÆÃÅÊμÌÙº–£ÇÄÈÆÌÔËÆÓÅ«Ž^lš²ÁÆÊÊÆÄÆÉŠ{uuu{u^†ÅÒ¦kj€|qv˜¶½¹…€Š‚t“ªr‰Š}z}‰°Ì¬|q~mr‹}|¦µ´±no…•‹ƒy’ºÉÇÆÃÁ̸±Ì¼Ä¹ÊÉÊÁÉÙæ:æñ9;êïƒ%áßd$Õë›Cü¸D@øÛwÒÚ± +Öà¦øÝ°¸Ôœ<ëàs"òÝE.ØÇ©„ñÛ6Ÿìµ§Òˆ‚߶póÁƒéÎsÈëHºÍK2åÙDMßÃöãÄ èÚ–pßæc3éë[Bçà¤R×îuKæôªJÜàdIãÚHIñÉŠJ×Êu+‘ó™ÆÑ%¨ìΠ¿›Y¾‘,ѾÀ³¿+`î¸+…ߦd¼ÛÍS{µ»_oõÙÎÉ÷º)4òÍYtêå4ƒáÍA7ÙËd8ÛÂV+ÌòsaãÛqcÝÜk<¤èbÉàRvËÊ|6»å•$Ôæ­áÓy[×æÀFÏÛ¯f°è»†áÖ#œåÁCÔâÉ9ÆâÜ‘ÆíðËøÔí–|íÞ¢©âц©ñÜ–ÿå–ƒÓíßòúäÁtñáÉbáÿäÛéìààïõïÕÿïíÜõßöÍöâôÄúðìÑÿôë­øëô¼ôéêÎ×ïòéáãùÖãïçÎëóçâãçñêéëçâçíéíÃìïç¾èëôÞåá×ÒÿöáÕèæò”ïêâ–Õçã¨ãß÷çôóáÚéÜèÂûÔÌŠ×ÚÕ¿ùìÒ½ßë컩ÛÖÜ•ëáÞ³ôëÞbÒñàeèìðÎíêãÖíæÏyêóè’öñÜÔÝþðååïéŒëéøçìäÚ|éêî»­ìÍž¸êøèóñè‚ÀõÿÉññäÖ®ëæÅÙñÞœ”ïܲùà‡…ïãÍ‹ä鹇çÖ½““Ì˺¿¿ËÓÍÑ×ÔÐÆÅÌÇÀǾÇÉÌÐÇÀÇÊþ½¿ÇǼÉÆÁ¾¿ÄÉËÇÐÖÎÄÇÆ»ÊÈÃÈÑÊÃÌ¿Ç˽ÂÇ´³ÂÆÊËÉÇÇÈÒÉÈÅÁÆŶºÛ×ÀÂÆÈ×ÈÑÍÆÊÑÑÑÁºÂź½Â¸ÇÚʼÌʽȸ¿»¾ÊÁµ¾ÆÄÈÍ´«½°¸Í»ÇÔÆÍÊÆ»ÄÑÊÁ¿½ÁÊÈÀ»¯ÄÂÊÂÍÏÃÆÿÄÀ¯¸·Ö•Òªå·Ó­éµÆ±ØÐÓÃñËÁ—èÀËåÀÙ³á£ôœØ«Í¥£µË¥¸µÁ­“là¨áªã«µ¾ÎÀ¤‹Á“Ÿ€´¸º©Ï®Ä—Ì”³r±Å“u½Á¥ÎÂ¥½šÃ¬°~©Ë™”´±ª¯ É¡ƒsŒ£•^_¯ŸŠ‹¢£[‰¢–‹q™§^®•°[О¶žÇº{}­­Ì•®N_¢Î~z˜Kˆž½½ŸÐÐÖs¾¶´¢—µÛ ªáÓ…ÓÖÌ­”ïÉÙ³ÚÝÈ âàÈÎðßíèÎúÍÿÚÙâÕÝÕ™ Ø£žÛÍ•‘ÿÇО˶“¾Üä¢àˬ†¼¾‘Ù¢o~©ž[ŒÉ”„Áƒg†ª‘¹‰×š¡ŽZ•‘Úĵ‡®¦‚c–‘{Â¥¨|¤ª—x¶§ a§ÈÊȸ›Ì¶ž«¸s®¨µv‡’‘Ž‚È£Š€À´•áœŒ‰ÕÓ¤r”•t‚ñô}›z^º§ÌcÕÆèlìÿÌv½´”Â¥Z©¨¹uÌÐÁjÈÅÙ¤çÖã[ÃÛìÈãëà£âÕÕ‡sìꟚÞù¯ÛüÒÓãòΧ|öØ¿Øåãê½íÔÂYæàõðÙãÒâòÙÿ³öðöëÿçìÂúëøËöâ÷½óÝø¹ÿÝö¹ïåéÎÕìòëßáô×æêäÑìóçããçóéæåâßæìèãºëíåÐÿîÔÕïéÑÃñçñâãëå«ÿñôÀÿÿí³ïçõäÕäîÊâäÿÀÔïæå¾ÿßäÊÖóÏÍ÷ãØÉýßåÊßùêÂø÷ÛÀåÕñ­ÿäñ›Éäë¾þôñÊïçÿ½äçïµøôçÁüäùØøêí®ôôñôöçä…õâÞ¼¢Òø·ÏùÖºõÔùÂõÙПÛÛéÙÎêê¶öëòÑ×ÙúºÏÿäºÈïê§ÌäéãŠéÖϺÿÜѳ›ÑÆËÉÊÍÖÙÐÏÚÓ×ÃÀÙÔÃÎÈÍÊÊÒÓËÇÐƼ·»ÊÓÎÌŽ»ÁÇÊËÃÑÒÂÄÚÔ´ÐÊÂÅÎÊÃÇÙÝÊ¿º¶ÈÕÆÈÊÌÌËÉÈÆÃÄÁº¼À¼ËÒúÌÔÐØ·ÇÍÉÇÄÀÀžÃÇÀÄËÅÉÎÉÆËžýÌƹ¼¾¾Æ®½ÆǺÀͯ³ÂÁÀ¸°µº¸½¿¸ºÅ˽¿ÈÄ°¯¾ÄÓ¼ÁÎÊÆÿõ_Tãߣ)Íôª:ï×1ÝårGíÔÂÒá®Úè»!ÞòRÇí·)¿îjÞÙ„+ÙßnDÇÛÊ +~í±´Ë¿”äÜ8rûË+„ßß1eàã:êçO(ðèB=èß21ôâ+%äÚe)æào2ãÝnãÈ~L°ÿx?ÕèM ¼Èq&¶Ã°§Ë¹ Ç梵ݿ!•è¶«Â½;šÈ£NÙÞ]â×tåÁŸìÍ<æêPg×ò VÞÔFkâá­Oëÿ€ZõítZïþ›;ÉêÏ,õéÇTîëhPí¿\2ßä¨ éä´=èõ>Rðæ±#âáÖFå×iYÅω/šÂ‘/žã§9Æïh@ÌÛ‘ÁÞŸëš±ì–>DìÑhíǘçžQŤ.6óÉ%oàÕyÎÓ*HêéHmóÅ3kçÀ,xå¶.2Öèh;ÍöÑãŒCÝê®|ëÎY<Îà„€éÖo$¿Ï²ÎùÉZêâŠxîÐy+ié¹áÁ¼å¢BÄòÇX¿ðÍaÔåÉhßéÞ²ÿß휄ÐÒ¯«ÞןÌßò˜uìÿ™zðç÷îîä¡`ßñÅcÞÒåaüõ«ÕÛíÐ|àôðÌôóîÉïíÖŸèþûªÚôð’éØçƒëæèÅåçæèäïïÜãæñÕãôôãØåëâÞðãÝàåçßÎëåøÔìçÓuðíÕÇñêÆ{áåéÎôýÖ}ëíß–äåÚ•¡øë“êöëV­ñÚÕîëßÞ]ëüÙÒùß·qèÞÍ}øíÙÁèõâÍêõÛmßéâ¨×ããUçðÊ©ï÷îÕøèئíõåláìéeÝçá‚ÚìæŒÌáØtæàÿ‹®ðÛ¡¥ØêšÌðð{Áçà˜­ßìÖêàä»÷àêǪãåÇæâÝ«šäê†Äçñ×ÑÿäïÌòâÇvßÛuʽÄÆÀÄÆÊÇÀÍÉÏÅÄÓÑÊÓÏÒÎÉÏÖÑÈÑ»¶ÂÄ¿ÂÊÍÈÃÄÇÊÍÐÄÅÉÇÃÇÊÄÐÊÄÅÉÇÅȻȺǿ§»¿ÌÊÉÊËÍÍÌËËÊÇÃÅÉÊÊÐËÉ͸ÀÆËÉÉÏÍ¿¶¿¹½Â¿ÁÄÀÔÌÊÊþÀ¾ÆÃÀÅľ¾ÀÉÈÇÁËÚÁÎÅĽÇοļÀÁ»¶¼ÆÊÏËÌÎÉйÆǾºµºÆüØ­ºÕÝÕ¾í±â¯ç¿ÂôÕ’ÀñÅí¤Û§È¦à¼Ù¬ÝÂŦáµã}èÃͯÅŵª×½È›Ë¬Õ¾mØÀÞÅɌʺ٫¬ŠÔ¼ÂÀܶÎÔצ³~Ç®ۢÑÙͯ¤ÃÀ™‹ŽÊ²ÇÌÀ™»°†Ñ«“Ä”¹‰Ñ¦–|µž|¦¼hÄ‹³t±—¢tؘ¾w—²“v„Šw¨ͱ–“ݘ«“לÃÃ稴ÊÖš’­Ä¤›õÝšºåÌÒéÕ˪–áìºÕäÕã³óåíºãßïÕÖçÁ›çö—èÖ¬‹ÿÌä‚ÒÍš»åÒÀ‰ÚÚØy¦‰¨žu¯Ž’¿ē“ªwÇ‹ÐŽ´¥ÈmƉ›Žñ«Ñ›”¨Ìržƒº½rŠ®wmj¸¶w˜µ™œ”¼Š‡¥äšž—xˆ¾Á—©¿ÖŠ°ª¥z¨Ã«~¶ª‹ÐÑ…j°Ñ„c²ÖŒÄÙɆ¼ÏÈw·»·j­á”vÅàº_•ÛÌ[ɾÔ^æ׿`Ø̯h©Óñ°òÒñ´÷Óí¸ÿÔé±™Ûåõæ怬ØÝÁÃæéǘëõÖêÛר]Õßö¡ßòÚqñÛÌãäòÛ´ÿãìÎòííÍöêÖ¸øïñ´ïíó±ÿæÿ±üíìÈîóíéäíðãâäñÒë÷õâÙåéßÚôæáæêìäÖñàç½ßòú°éåÎÀîôå«÷ìäÅèùò»àõñ¤îôô½¼ßý¢ÿÑìP™ðãÂÖèöθïðæãôíϤãâÚ¦âæéÅößð¾úßñŸïêå½÷ðݸöôÓÐàòí¿ëãÑœìüç¯ßêé³òýëºééø¢ÿÞûñ×äS†ÜÞ´ÀÖð·æáâ«ÖÚñÊÞæì¸ôËÿ½îÝÿЧáñÕëëõ¼Ûõ–âõóÖÏèä×ÌêâЉìø†ØÉÓ»ÈËØÝÄÅÊÃÃÆÆËÌÅÅÉÉÄÅÎÐÉÐÁÃÑÑÆÃÄÈÈÊÍÌÉËÑÑÇÈÎÆÁÉÓÈÆÆÄ¿¾ÄÈÉɶÈIJÌÐÑÍÈÆÈÌÏÑÍÊÅÄÆÇÇÉÄÏØßÞÍÅÏÈÆ¿ÀÌÏÇÁÍÈËÒÒÎÊÇÊÂÄƼ·»»ÎÉÆÊËÅÈÔÑÌÁÄ¿¾ÌÀɾÀ½ÆÊ´°ÊÏÌÃÁÂÀ¼ÌÏÅÃÉË~Ø˾½ÔÝê;öñ—V¿ü¬àîSAÔì•%øã‰:õß¾%ÞâË#àÕ¦ìâk!Ðå˜ÞÞ»NÜÜZ åÌq%Šß¨«â¸¶ô¦¥ð½ “ãè"|åàQtèúA=çÑF7óã,Xç½BåácâÖN!Ìå^0âÔcåËZJÄåŽÚÐaKËè¢&ÈÈ¥ºÑ“+ÐÛpÂÁ¯ºâ·AZ¼9¤éÇfÞÁ zôå)Ÿé½1€ÔæVòÅ$Yùø™¨ñã‡IÝéh`àú˜éዉæãÅaåå²sÿ梅øøzLïàŸ2ÞÙšJëÚ¸OëéÁ_âשHÓÝ;+ëÜ1+Óד(½½šZÜÚ Èñ|Í»ˆ[Ôê¢ +ÏÖ¡/Ô»¢—ܵPã°I»ÆœJnæÊ|ßÀ#iß¿>zÆÃ+pÜÕ)Uç¹2‡äË'fÛÔg=íËbY­Ø'_ÀÙ~ƒÔæJ}áÔBsãÐE~ã×DÇÞ{QáßpHÕÔR^íÊ¿bÓ׌AÚæ±QäÖàcÈÜÚõæäíYÐñÏcÖíÿœ¸Ëé¸|ßάóÕÂgêûåÓäï铲×ÑÐyåþÕãåÚˆóëàåâûã…åíçÓýçíÔéìñ¼ÿìóÆ÷îéxñõåÈòèüèåðòéßïïÑéà÷ØìñêçáàìçâåæâäíñèÄøúìÐüêããüîƱêòïÞéùߊãéø¿ëæöÐüáø€ÎÛûn×Éâ‹¿ôðµ¸õÿÁÉÝó²ÙëæºÉáþÚçôëÖ®êðÑáîݘîÏÿ³òîÞÝê÷ØçìÞÿØïÞöÉýÜüÝìÚéÎöýÒ…ÜÆîðéì¤ø×èÆ¿éضÿ×æíüèöŒïçè‘ïÝÿ˜îñæ–ÎðçÍêàÙŠ®òãÃ÷ðð•»åï¾´åé͸õèÈ×;ÌÖÊÐÀÁ´lIÒÀ¾ÂÃÌÊ´ÃÃÈÈÆÎ×ÔÎËĹ·ÆÍÃÄÄÉÎÊÃÄËÓËÆÄÃÉÍÈÃÂÆù¹ÁÄÏüÌÌÆÔ×ÑÎÉÅÆÊÏÓÓÏÆÆÌÊÄǾÂÈÑÕÌÆÊÃÇÄÂÆÉÎ×ÌÈÈÏÑÉÁÀÃÈÑÔÐËÉÆÁÀÈÎÄ·ÀÓÐÉÀÏÏÆÑÎÈÉÆĽ¶´±¾ÄÂÁÈÈÀ¼¹Ä»²«£1aÿÀÃÿ¸ñ´Ô¯æɺªøÓ¼ºÙ¡œ­à×âÛáÛíŸõÊå°è°×šö¶º¯ÓÉʱê½ð©x´Ö«{|ËÒÎÈ˭¿¯¯å¥Ëг·l߶«ŽÝ½­ Ç¶›œÄ±¦ãÁ‘˽؄ž€¦ÄŒ’ß¡œ‚£‰ƒ®Ä¥¢cp»ž’®¥¯Š¡ u‹»Šu˜¼dÕ™\¿s±z³J™€\“¡`–Šmi{ŸƒÅ©­‘É”ÒÇÜŽÇââ‘¥¿½•«äá«©Ôãà£ïÈÀ³Üò·ÅïëçØÙÑù›êÌÔÃÝêçìêòçéÍžzøÍÈ’óÊö‹õÕÁƒÀë¤lÎÖœ–éÒ–´¶¤š¾¨}‚¤“}ƒÃÁ”¬½’Yoµ²À‚­«yãÅÛ|¤°„zÓ¦vp­šnd¬›»¬åàsº¢Åo•¡ªpœ¬Æ†–°×“¦ÈŠ’­¸£€Ä‘ox¨>¢“kz³ïpZªÄszÔŸuœÚΤRð~“̽¡{Üê„…äÈö´äБyàÔŸa­ßútÀÊ̺ݹñ¨í××jÑÍåµàÞð¤òê¾ò×ö®Çëã·³òßÍßéø®æãúÛÁðôäßìÚÔÄÿåÚßÛ÷ÙªúîÚÁëÜè»ïúè«ïÔò¶îøé—úýêÊëÜòååñõëÛëçÐíÞøÕéñîíçåñáßäçàßéñëÆññã·âèéÓãåÔÂðîâÜõôÿ õçî½òèä­çêö©ôïñ·þÙû¤ÖèòÍÅïÖÍäéçÆêíØÑÔÞÜÛÛÚóÑÇÝ÷Û¼òñÝ™ùíÙWùÿÕÊþöãÞØëò°ÿëó¬øåò¾öìá¬øîó£ñïä’öîæ¢èÙõ­¬ßéºùë÷ÀèÚñ•üàñ–ÙìðÃç÷ëºÏþé½ÒêܱÅÔâ­á×ä°ïõèËÇÿíÆçø¹Ï›ÐÏ×ÎÂοÍÊk1ËÈÂÀÈÍƼÍÄÉÏËÏ×ÖËÎÍÃÀÊ˽ÇÃÄÉÈÂÁÇÌÈÅÂÁÉËÂËÇÊȼ¾ÄÀÆ´¿ÇÈÍËÎÌÌËÈÆÈÍÒ×ÖÍËÑÉÁÇÇÇÈÌÎÊÄÃÇÌȾ·°³¿ÍÈÅÊÎƾÀºËÐÌÏÎÈÇ¿ÅÏÑÇÂÄÆÌËÂÌʾ½½È»Ã½¸ÕÒËÎÉÉÏȾÁÁÂÿ©¦$Rǽ¼ÄÉÁûÿ^càã^#óâ½0Ûå¸0éó€PÎîháç­#Òñ¸%ÄÚ­&èä¨ÓÚÉ%ËäJ>æá™$»ï¿­æÉ­Ý©#­æÆ+‚äÕŽÝÎ#„ÜÐ,CÏé79åÙFGö³CaøÏH,Ôê]ðàƒÝÎNRÓÞ|ÑÕbÇæg*Ûë’ÀÛ»:ŽÝ®ÉÑ°ÑݯžÏÄtÀ¡¨×•RfÒÏ+{àÐ#€ãÉ:©×ÞS\òÝ)fíë²JýÔfqîÙ”Nßꥵåñ€zñÞ˜oïïåyêù§TÉéqxü߬WÝíÅDÜ̸5æäÉCêáiBÐæ‘SßúžgÚæ]/çÑ ÄÍ åg ÐŸµá« ÑÕ•ºÌ¶aÃÜÚ–Õµ8—àŠ¢Øµ0YÛÊ<†é®˜ËÊP1µñDaÝÓk|ÆÅC\ÔÔ+CØÞfÊ5*°åFGÑàƒlÝÉW%Õä;úÔ¼‚ßØ©(mäŽKÏÕÇrµì²p×á¹*”ݳ\ØÕƒ`ÝãÀpÍÐÝs¸îëvôÊÝuÅèõ™«ëç«©ßßeÆêû­îñµ¬çí¤ßÙÿŸ­íôéóàãuà÷¼µÝúâÊóëðÓûöïÉñïûØñ÷ÿ¦óúýÌìýö¸þóݬÛïðîëñèÜÐàúÍóñîáâôöéäìåéñîéäßõìíÐüéíÜòæÏÄæâîÝüôì‹ûòó¤ëôê§óèòàôíðª¾ôì‹Ùòê³æìäÈ~ØÛÛ¯êÙ­”óåðéßôäýëÃ|îõéáÞÿß—ñÙç›éçÊÛóÁyãåóxóôð¶èõ×îíéä„ÿçùì÷èæœîóêŒàÝí»¸æêöÝü‘Î×à|Æôõ›§ÿÙœÄÿ뢢ùòá¢òïÀÛßÿ–ÓïåÔ²ñãÍ—÷ØÔÑÝò}ËÒÈÒÄÏ¿×ßz5¹ÐÌÂÍÊÅÔÓÂÃÌÇÆÊÈÜËÅÆÁ¼ÀÄÏÄÀÆÉÄÂÆÊÆÍÓÊÃÈÐ×ÏÐÎÅÇÊÀ¯ÊÍËÖÆÊÇÊÍÌÈÇËÏ×ÙÒÏÒƾÇÃÊÒÓÐÍÌËÅÈÅÄÆÄÅÌÑËÄÈÎÆÀÅÀÕÐÂÉÌÇÌÐÎÈ¿¿ÎνÇÎÅÈÈÄÊÂÀηÉĴѼÃÆÁÂÉÁ½ÉÆ´½Å­¹2SÉþÁÉÇþέ±éÓ¯¬ç¼äžÖ¼ñ«ÕÁãëò”ðŸÉ–ÿ®À”ñ·Å•øȹê¯ÊŠö¹Ë–ŽËàҩٜ¢¬Õ‹©ƒÏ™ã í©¸»í¤ÅÈÍ®¬šâ§­äÈ°£¹À±±¼ã·¬ÜÅ¥•©É¼Ÿ«­Ê¥¨å µ›†Ñ—¦u±–”¹©§¢Å¨Á†€¢{Ê“œbÅl¦yÖˆšÇ‘¥Žu†¨khŠ—™Ö”Û””ZÚžÁÒš–èÔ›äÏ“ž´æw³ä̈–òëØóÙàÓáìä߸éâîÉéÖ܉Ùâ’¨ìÜš†ÝÑá„åó‚|íÞÜŽ¥à¨¬àÕž¤â¦†ÊŸ°}Ä”µwÁ·¹]¸”ªvŸ±µsÉ°§i³°Òiš‡s©™äq®Á¼p•Žn{·˜l­ž´@„ßÜ}•¬•†Z–Ú}”²¸Œ„Û¯n’Ÿ`‡æÁ‹y¢Š0Du³s»±Yh¾¦pmÅÂKŠÝÒœO³Á¨Q¾äÃSºÃ’Yű¨Z¾ÛÀR¯³¼>Ý ¤c×ÐÈV°ªÆ4¦Ôí_Þçèc¯×Ýhwæ强çä«áÝÿ³ËæÿÃÂÝëÉòÝóÄÖÝåàºýìÔ™ðÞàÜ×ëãÌèü¾qìüÞ·ô÷âÊûøì¼ðüë³îìæ¸ôòÖ£ïðä×êëëäÚíùºãëìÖâêøßÚêðÞßûìÍÒõãÿÇæôߺòäØÅÿÏÿ¼ïêÜ”âîôºáëÚ²áïá·äíñÅõàñ Ýäà}ŒèýÍ•àì¶\ïôËÉâëÚ®àúèãöâÝ´ýçÛØïõ߯æøà²àìÒ¾çáãžòëì‘äêá’øáõ¶öîë—èòá­ïç×üâî…Øåᳺ÷ËmÅóñ‚ÖÝû£åíÛåËÝóèªYæäÆÍôꈂõù«­óäÀÇðãØíåÌ¿òòÁÓÂÈÈÈÓÉÀp>ÆÑÐÆÁÀÇÒÊ»ÄÖÐÇÉÌÇÃÂÂÂÀÁÄÅÌÐǿö¿º½ÊÈ´²ÇÐÊËËÄÁÃÂËÉÌÒÔÐËÉÃÄÁ×ØÀÆÔÞÕÎÊÆÈǾÉÁ½ÊÖǼÈÔËÅÇÈÇÇÊÖȺÀÎÍÁ¼·ÁÍʾ¿ÅÄ˾·ÂÊÀ¾ÌÌÎÊÇÉÅ¿À½½½¿ÃÅÇÇ̵ºÉÀº½·¾Ë²¾Ìš9KμºÇÇÚêAöùqeéé¤#Ôß—5Èæš.þÞq@èâ®ûÜ£!áâ°ïÞ’Ïæœ +Öé¿.äÔ:Yôã‹%Ç䭳ƻÄßv‡ÑÅ›çÕ%pò½#¤Åêt6ÜÜZGêÒ ƒÞÓyîÇ5<ãÓ@VÛî78è·Oâäyêñn4ÞÊE+ÂçŸS¾ÎºY¾ŒÊíuÜɬP²Ñ¼¥Ò#†ÊÎŹ0•ã·"µìš•áç4mñßEYêÛ3˜Ùêƒ{ÍÞx„ìçn\ùØŠ‡Ìä´LåëºOéÝt‚ýÚ{èãoXêÛ`Uåð±aÝÚ†WÔç¬PèÙ`sõÉ>Käè|1ËÓsVàÖDÙÀ˜GÕ×£4±ê(ØÙ‚!»ñ©»×ÂLªó¢3¢âŸ$ °Ú(fÍÿ™‰Ø±#YÒÇdkÐÐhŽÔÀ*hßÙI|×пœêâ_(’â5@Ãò>:¦ÕiSôÉ[±Åšš½×—ÍØŠÙÒƒ[ÞÓ…BÚÉÈRÛá:×Ú¶4¼ÊœaÙßš/ÓÎÔGØΰ„Úàî€Â×ÓÝòïÙŽÂñ׈´çí¬ÜçìÉçââ½éÝá÷òüëÏbÿóבêòåæãîç‘ÚÍúáÿææçüÿýÎúöÿÏêèáÒâèõÀöáõÖêïíÞíþïÕúî÷ÂñôîßòäâæÜïóÙßôíí³ùòïæöèëÚõÞÆvèçõ¾÷çô¹øó÷åòÚâæÿõþÕòïð¡ÞíõÄûèÙÎÆðäÞÌðãÄÖéäôêæÙ÷óèû¼–ÜÙ̽íêâïÿÎæôñÿÞîèîüèõèfØòóÒîùçlËùíËÝéàòï¬òéØŠÛÛü›¤ÿÕªÉ×ñÞñðë‰Ùïñ©ëÞà®ÉðçºêÿÌçÚóòäýåتäÝ넽ç××ÐïýƼù÷ÆÓ³¾ÏÍÊÎÄÁÁÎv)ÈËÉËÔÒƾÔÆÌÙÓÉÊËÆÃÁÂÁ¿ÀÂÅÅÆÄÁÆĹºÇËÈÈÆÄÆÌÊÎÍÄÁÅÅÊÇÈÎÑÏËÈÄÖŵ¶ÂÔÏÎÇÆÉÌÐÍÂÇÐÉÁÉËÃÁÈÄÅËÏËÇÆÈÇÄÆÊÄ¿ÄÃÈÏËÂÄÈÆÆÁ·¶¿ÂÃÇÃÇÅÂÃÂÂÈ¿ÀÂÅÉÌÍÎÄ´¾Íû½¸ÁľÅÅœ=UÐÂÂËÄÍì¥åÚ´»â´£¬ë¹”«ÝÞȵÕÝž¿â³¸¥ÅËͦݼֻ嵟•ê¦®¦´ÅÉ{œ¾¾•¶®Ð—Ò±Ö²•Ü¥ÈΪ¬šÉËÃߣ¼ÏÇ›¾tdzo­º³Ÿä˨µ‰éŒ˜n¦¡¢ñ㺢’všŸ‘ˆ§’£­¢¢os˜£|‚žª‹a‰¶g^…»ʇ¤²b»Ždz”£»qÅun•¶ƒyr¨à€¶…Í…ºÉÂkÕÓ䜩²±Ÿ“áå†ÄÅÊ„¢×ã™ ëϵ›èêßëäÜâ‰üÞñšêË«­Ãу®àÔŠ–òß}–äçÏÅôÞhíɳaíåÛ˜­Ò—™èÁ u¦˜_b»ˆ‚{´¡¬ZÜÖœşyÈŽq{{Ñ·’§—‰W»®LgȬwX¹”ªožyÅŽ”¥®`Šµ“\pµ›]Á¸q°´Â„´­³¬€Ÿ¿g{_¤mm~Ïyjœ¦{ÌϨmŸ×°ˆ´á¤dµ®_yÀÚ”lÕÏeéÒÖ`¿ãº]çê°UÑè¤SÊâÇÓáà_ÝÚˆ5ÁÎêƒÀÞ×µñáלÖðà¦çìлÿëíÉéíæÖîìáÿóèàÙU÷âèÛôæÛðñäç¬ÿìèÌõÝòÊëíÝ®êêë³úòäÀíéú´ùäêÇæëÝÆàïè¿ÝéâµçñïáõíðâÓëìÈ×õàÖ›ãëîçýåçÒîéÚ“íçÔ¡ùãåšññçÈíæßµáñÿæöåñªàõå¼òðàÊÓúêßÂêìÐÝïìçÝðèøïíîÒ±èúÉÉëñÿŒïÿßòõêîÅóïØÝÛßøÿïÚ¿ïÚïïôÚëçÿ„ôäà—×ÖÝ”ïðàvzêÑ‹ÆèúàëèàvÃßê«òåø°ÊÛâ­ðîåÔ×å躼ßøŽìèú ÊâõÏßèÛÔÄÿëÇß¼µÒØÑÔÈÄÅÑw)ÕÒÈÈÕÛÓÌÑÆÇÏÊÂÁÁÌÈÇÈÇÄÄÇÊÂÁÅÇÊÉÁµÂÆÃÆÇÄÅÇÇËÉÀ¿ÄÅÒÍËÐÓÒÎ˯ÏųµÃλƾ¾ÄÈÎÏÇÊÔË¿ÃÅ¿¿À¾ÁÈÍÌÉÇÉÎÏÐÒÌÊÐÅÆÉƾÀÿÄƹ¯¹ÈÉƵ¹·³´µ¹Á·¹¼¾ÀÁÁÀ°©·Å½¶·´´®½¾»Ÿ9]ÓÆÂÈÆÇäè\hõÞ^Håܪ0âظ/Øëg‰æÙž3ÚáK7Ûе-ÞØh,ÓÕÌÔãSÜä•EàîM(Ôà›¯ø¦Á죦֯gçØ;”çÄbîÇ$tÛÚ9AåáICÍÄ„×Ógæè_HïÜg!ßêJ<©Ù†1¼ïO'Ëá5)áÀuÈɼ ŠÎ—Ò׊ÔÁ™ \ã ®ÔŸÇʱfÁԙܦ! ñ°)±ÝÔ6wÛæ#”ßØg„ìÒ;•â×>lÝØ¥bçô„›ØçœaàéÉBÚî©Yáß~Úü›lÛ쪂ÕÙ½Pë鞆ÎóØ^äçœUïÒ?òׂ2ÓÞn*¶ÙŽ&¦ÚE;¯ËïŒáÎ~BÏÝ„;³é‡;Ãð®RƒÂ·'IݨOס8pÙß,‡ÖÅrήT϶;[Ëè0-ÛØ-‰âÄ.væÖKe™ßaS¾«8dÊÓh$ÌØL†éÔacúÏXUÞÖµ:Šá{SÍÜswðÔ”víÕµWäк^ÕæÙåvÝàÇpÏì¨XÓß½R»Ø°_ªîõõ|Áäæèïïã™Öáä¬ûâž“çâôÚÿÓÙ‡ïî»ÞãèÂÙÙï«ãöâžïìïÔëêþÖõíÝxõèõ‘óñôÄñéñåáçýíúìêâãáæÖæë÷ãçõõíçïôäÍÿñÿÜñîÚ˜ÚíöåÿØöÖýâð™óàñ–ÿñùÑýßèÓïïäŸáÝÝœçðç¡¡ÕøÊ ãá¸xýß­ÜñòߺäçÃzäçÌáßõÔqïñç´íôêëúõâÌåÚçœïìÛƒéèè{æëó¥ñçèŠùãôææÜwñáÿÜöõé¶íêì±êíæ¬óæïŒØíò¬ìáìž×Õõ¦Øëõœ¼×Þ§ºìÿ°ÙûìÑ¡øòéÜçìΕæù“žÌÊÎÊÇÒÊÁk6ÄÊÇÁÄÈÍÔÒÌËÍÌÉÇÅÇÄÃÿ¾À·¶½¼»»¹¼·¸Åʾ½ÍÏÌÌÉÄÈÎÌÌÆÃÆÊÉÆÅ´ÄÃÏÓÆÇÂÔËÉÉÆÊÑÒÎÊÃÅȹ´ÅÅÁ¾ÁÆÊÌÌÃÁ¼¿ÉÊÄÂÃÅËÊÁÀÄ»»°ª´¿¿½ÆÇÂÀÄÄÃÈ·¹»»¹µ³±³°ºÆÄ¿¿³À·¾¡$RÕÇ»ºÈÌÔÀªÈå˽£×³²¸æ»ÙŸïßšÒÃ˨šâÙ©ºØö’íÆ›½ý¾Èó¡¨ÍÚ¹£ß¢®šÎ«Ò’»¬¹™®¸Áž®äŸ­ŸÖ˜¯ ×œÄÍå­§¢è¯±Íà­­àÕœ®š‡™«¥¤Á»Ã¥ßžšŽ²Œ¤º’Œy§¦ªš±©‰Ó|Çm„…Æ›¯Žµv¸’Ǝѽ¢oŸ°¤Â‡‹“€¹é¿ÝÙ‚ßÕÔ}ÁÚÆ¡«Á’šºËvÄåÐn–×ëë‘ÚíÀžÖÿÅ{íøêúÕ–…öÄŽÄóѱŠïÖëÁôÔ¢‹ä馉ÞìåyóेÑõ˜}®Ð|lº¥¤vèʪx´®dq¦öz½ªƒuº…+~ÛÜ°lÀ®Žw±µ†l’²±m—²‘{¼–¯lÁÁ´p¥³›h•¶œhušÕ„ÌÁd°Êãp•¦ªZz·Ý¡]¯¾‰Ã¿”wη[ƒ¨Ä”]´˜amåâÐZ„Æ‘…àÏŽhÇÔWÚïÄIÝÙ¯]À¾À¤ùؼ9½× GÀêœ\æß×S­ÞÉ}Ãíç¦ÁêðxÅÝ÷ñêêùÈ÷áçÌ×÷ãÓËðéù¹èöŒUéçÂëéñÞ¨üðæ°òùë©ïìâÇìñúËïåò˜ýßú ùíå¶ïçä×ÞêóÛîéêÞÛ÷òØäèð×ØâòâÙðîÐÅëßôÏëçà«åòåËñãè¶ßìñ“ñêð¥ûççªîìÿÐìÙî¾îéí©óÜ쥯ÞØ×ßêÎÿܸ¯íï̸ñïʆðñÕäØîÙŸòñÛªÿàò·åïØËøãÒ±ÿóåªÿèê”ëèç üíç”æÿå”ìéè•ðëâºôèæ“âôê­êÇôžäìú‚Îíå°ìå÷©àÛõ·ÞÐõ³ÖÜߣ‚ÿêªã÷òÏ”ïóÑÙêÜЛìí—¥ÔÄÂÁÂÐȽf/»ÌÕÓÐËÈÌÉÊÇÆËÎÊÆÐÎÍÍËÇÆÇÇÀÁľº¼½Å½»ÅËÃÂÐÌÆ¿¿ÈËÄËÇÇËÏÐÑÓÉÆ»Ê̺ÂÍÍÉËɽ¹ÂÉÉÉÄÈ̾¸ÆÊÈÅÅÉÍÍËÄý½ÆÉÆƺ¿Ê̾ÃÄÅÁ»ÀÉÆÃÊÂÁ»¼Äž¼ÄÆÈǾ»º³¯±µ·¸·²¾·¹´Ò¶.dÐÆ»«ÀÒÏQëõ^]ûè¯-Óï‚#ß×·:êÚƒGÙó¦éÕ¨&Ñç›íÜ­Õár%çä‚êÑ<.éÖ“"¸ÿ½µê°ÆÔ–%¤íËœçÁ)ŠØ¹%”ßàFxåÓDSèØCzÛÃ]ÅÜ;3æéOZÞìV5éÄpÞÔSÑåQ%ÃÖ.%åÔ  +ÀÚ+›ÉœhÔì…šà¯3·Õ°’ú¥G»Å´)xï»i‰ó·=²êÆR¬ÓÝ«‘±Õ'jëÑ+«åÐgoÀÁA{ÿâ«xÖëdðõ¼HôíÆpë顈ìÏaèåºXþñ¬<ôå¤XàÐÀRöæËNèêheìë2wãÒ|3ÚÞ§AÍÖ«XÔÊo5èÍ¡-_ÌŒl¬¦wí«¨'&ã¦+W빋ؙB“Ù¾*kÐÞDPÛ±Oƒã¼7mäÊ?ÄÅ8¡ÙÓ?¡ìÛRU¸¼{aàågsóÞAaÂædRÉÓ]=ÖÄK=¾ò¥‡ˆîn¶ß†[³ËsqåâènÏÜבÇÛ‰%Îç kÙÜÓ€ØÑâaÈüçƒÐÙï—ÃÜë©áâï…Ïàç—èÿê³êâ㪴ÔåßüùÖ×yñðá÷ñäÑ¥éóØßìêèâÿòê®õïûÜæéôÎöêóßëÛùßóäüÈûéÿâìðõééêñØöûïËíêèßòåçÜéõòèéïïíÎøù÷ÑöôüêïïõïÿØõãûãÿÛéÜÿÈÿòí•ßûë›ìüè¦ßìñîñþÓƒÿàÚ¿öø®¯ð×áÑï÷Þ¿ìîáÁìò±±èãí¯ÿèÔšîîã¸öûáîúßýžîðÑ–öæÿÏÿîâ–ûûéÖòøåÅòêñèìÿ£ÜãøÅæïú…òèã¡õæóÇúïøºáìï¸ðåÿ¸ÜëòÅøòØ«Üçמ¡äòÛÿÛõàüêÈ·½¯ÕÄÃÍÊÊÊÒu&ÁÇÇÅÊÉÃÁÂÊÆÁÊÐÊÃÎÌËËÉÄÂÃÁ¿Ãº¹¼ºµ¾º²¹Â½¶ÊÇÆÄÄÌÍ»¼ÀÆÉËÐÖÓÙÈÆÇÁÉÇÆÆÎй¿Æ¹ËǺÁÇÀ»ÁÄÆÇÊÊûÀÉÊÄÄÄÇÎÂÄÏÔÍÊÎÐÂÀÀÈÌÿÉÁÀ¼¿ÉÉÂÀ¾ÁÄÿ»»»ÉÉÅÁÁÂÁ¿µ¯©«Ç§2cËÃÄ­¸Ò׶ÚÕŸ³ö¹µšèç¾èľ­ã¾ÂÂÖÀºŒÞ²ã¤Ò»¿•à“·´ç¼¹ŽðÊÊ•Ú˲˜Î´Þ‘¶´ÇšÌʾ ¯Ã¢ÌÅç“ÉÂÚ“·ªÅ’³¬Õ¦©²Á™œå݇Âɵ–½™¡µ‘ÐÈ¥§ÃÂÁ™¡²§ˆ›² ‹‹–r¨€‹¡¾…¼€—ž­‹u¶j¤a¯~¾}ª¶}w‰•‘’{££Î‚ËÎЊÖÏʀꩀ´Æ×jÃß昋ƒÎmŸãùéªÑÖ}¯ÛØØrüâä±÷ØâÕÓðÒ¤éÓÒïÓÙŠÚ½›„ÀÔÞjâäãpܾ¡„°ÿŠ®®§wÄÔ¾oåÅÃwƈŒ_Äœ~t€kv¤¯n|«¤}‘•´˜l¡ÉÔr¹¦†i©²pvŸŸnƒÊŠ…¢µÙ†›£ÖqŠÂ¿K©°Ø[~©jm¼´“ÁÕ’‰›i‡¶íŽ~œ°rªªu‚©¹HLͧmÀÖ’iÓÝdiÝØïŸçõÇ|µ×ŸRåêàØvÔØîSÐæå¤ñíÜw¿ñúœæäðxÂÌÔ~´ñ÷«ÛðõÇÛñúÅëéìô™êööçöãËÒýѶÓëñÖ¶èñë¬öéó×éïõÈïèó¸íÿâ»ãøì»ïÜ÷ÙéììããòðØîÞï»ãèëâôéîÛÙìñÝàïëí×íæîÂæóÕÐçîÜÌêðØÏîùíÍãüߢõñòæÿô°øñçµäíó¥ëéÿÏuðóà·çß„ˆáæÊÄúòÕÊùëåÉïãÚËÿáì™öäê¿ùèäÂýðÅÑçæâ–ÿÿé¨ïãñÀùêåæêèÀøíçƒÅìèøöèî®íìé¥ßÑé—éÜé˜âäç¨éïã¹ÙëܾðàïÀÕéÚ†•åìˆæîÔ¨©÷øëøÑø„Dñ俤¶š¿¾ËÖÑÎÉÒy.Âü»ÆÎÎϽÊĺÅËÀ¶ÏÍÌÍÊÅ¿ÁÆÄÂÈÊÀ¿ËÉÂÉÎõ¶¾ÇÆÁÃÁ¶¹½ÄÇÅÄÉÑ¿ÐÅ¿Á¿Â´ÉÂÃż·½ÄÉØÑÃÌ×ÑÊÊÎÐÐÒÒËÂÁÌÎÊÊÉÇȺ¼ÃÃÄÇƸÂÅ¿½ÁÀÃÀ¾ÁÀ¾ÂÄÇÉÆÁ¾¿ÁÃÎÏÅÂÃÆËÐĽĸ‘Ei͸ȽÂ×ÚÝ[|ìÓqKåä–üÛ_+éÙ‘vêך0çå“0ÚÓ¹ ÕÖy2ÝæœÜÝÅ&Ôä‹*åæI#Îé¡Èó²3ºñŽSÏ欔î»-¡ÙÅø«3Zìæ,uîÝM[üÉi äá9/íÕA;óåm&ñÜA1ÍèXÍÕoå¦jDÝÉj-šö—°ßª:¿äNÜå‰"œæuÆØ´ +·Ý‹oÈÈ,lÀ®€ë´ ¸èã~œòÁU†ÿÐMvöÈBšÍÏ%}ÜésrÑàŒ¨Ñð†@ïò²KïþŒJëÐ~“Ýç‹Iãë™NúÞÂRáÞ^Sèáx@ðìJKÑã(}ïÌGBíéa^êÏ—ÜÝ6××s’Ü8…ÃŒ(£°o3¤×±!ŒÙ©Éæ~%²“,7ßË1XÝÀ7%Ó§^¯ÊÐ3¯ËÕ5u亵ݶ$&¹µVUÆÕauÏÄ{NÃÀQuÚâ:fÍÑPoÅ·c(¾Ú„YÓО^éã}•×ã—hÕêácªÃ°q×ÓÚyÂãáeìÎçpÒÑÞ`åìã|¹àî¹íàâ¤Ë×ïvÓÜç­Úïé‘¥åå¦Ýïð…›ÙäïÕýçܨþããèêéƸòòïÖÿïî¬ñîïÜúñõÌøëòÏöß÷ØôçÞ¯íðóäæãäêììÜžÝéëÜíëêÐÕöèäïõñãÖëþå·ôåèÝýêÈÆéëáã÷ûâ×çÿïÓ÷èï‰Þèÿ äåð’Õõã‘ÜôÖ’ÕóÓÏšÞåÚ™çÊãÒåõÓ’Þý¶‚óô¾ößÁnéæÞæÖÆvØ﬎âòäîêíé†ôëçšçîÙ†öêë•õãælàãáªçàÒ˜»ûÿàûåÿ€Ïèätèàçàâú±¸å諸íô–ºíë¶ÎÎͲŸíö¨åÔîÀìéïÉÀõåÕ¯öئ“ÃÑÉËÌÑÀ³e9n|†—œ›œª£–Ÿ¥—Š•“’“Š‡‡„‡‹‹œŒ‰†‡’˜‰xwy‹’Ž‹…Š‡€„ŒŒ”††‹ˆŒ­šŽŒ‡‰”Ž‰~Š†‹‚ƒ€}ƒ{€ƒ€Œr€y€‡‹ˆq‡Š{x{{vqmpz€€{topr\rzqkmu€repŠjO4SÓ¬ÅÎÔßÕ¦©ÌÇݾ­ÞÜ”¨ôÀ¬æοµÏÚ²¨æÀ»¥âѲ{󵤓øг¡ãÓÀ‚ö²ªŸó»µ’ž¬ÛœØÌÄŸ¬ÍͬÙÎΓÀÅ¢ØÄפʺլ«Ï½£¬ÜÔ¼ŒŸã•—ʲ ô¸¶¤á´Êì³®–ŸŠ»Ž™r¹ž•Ž®™Žwɸw€‰›x}®Ž»„–±¸h‚¥”¸t²—¿Š«˜Â€”˜Ý~²ÌÒ…ÛÓ┥æÜ…„¶â–¬ÌÞ›µÙ왥Ïøœ¤ÞßÉ«ãꧠñÜÖeùâÇ›÷ù·´âɳŽýβ“ÒåÓ†÷·™çÜ‹yåèŽzïÝ–¿æ¥†ëÖ¥f·šozáÒª‡Ò£œÁŸ–s’–‘Š©³L‹µ¼ÆfÀ³ÛaË¡³cǬN€…ÃÀvš¥sZL¤ƒZ±¹ºt‘¹Úe»àÌnÁÒºcp¦u’Äoy´Ô—”ñ×zoβ‡`Í®svº²}OÂÚ©^èæ–qËâ¯s¿È—\ÀêÎ[~é~U¶Îºóã×VÞ¢Å9êãÈ<éÛà­Ôìì¸ññ×¥è÷äjÂÛô½åõÐl¤öåÆÜãíºãõñå½ÿãÑ”íéÕõàÛÛÂÿôçÌúëõ³òæìÀÿåí¶èèä¯õïÛÙóíâµåóîÂíôá×òçá¡ãíéÁÕïêÃ×êôÚçôõÌÊñïÞ¿åõé¼êîÖÊçößÉùíìâùûºêëÿžÐôú´îíâãÝðŸøåÓªîçÝàÂÿÞàÄøÛ¿™ÞßÙ}îßÂéñÉÇÿÙÞ¡ìÜÑ8äìÒ¡õåÏÃêÙí³äîÚ˜ìÙܘéëÏ‚ïéõóèÞyåéí£ÿÙï|ÄòïÁáòé’åçè^Ôäò²Þæ÷€~Þÿ‘Ãäÿ¸ÑÞò¹ÜàÞš“ðú•äñá“êïÚ¬¹ßôϾï颊ÍÁÍÀÅÏÀÁ©P120-+-..7*)01254/.(2.&1-4'*66/.057,496;26,,+(37*5/2308:,'3)08,.19367036+1+-1..1143/,-0/+/64,*1530220120,132362.3.142176)(+03/,.3470+29761/4920Ijà¹ÃÕÓÔX×Ì`ãìVÿç‰wëê£9æôˆ[çõ®JÓð°Þò­$õú–Wéßw"ì׫%ØášTßË…·ãµ=¸Û´PÄÙ»¸ÓÕ!}å¿"ŸÞ¼èê.2×ÜAYßêšâÍ ^áØ‹RåÊ™0Ùâ¢OîÀb'ºÜz2êÛ\CØÆ?4Õâ†?žÆË/—Õ­VÒÏaOÕ³Ž.«Ú¨³Þ¤'ÌÙ¸(uÛ×$€ð¼S­à·&žóÕc߸1zåÜC¢í¾AgíÍ?váò~šÜÝSªÜæ»1îñ¡>ÿé tÿÿ}yÛõ•SÔãQTîësп—^ÚøÀn×ë½]áÛ6…ôÞÀeÈíŒ!°à¥míàb0¤Ë~&¬ä:¦ÒnG‘Ä’0j×É-»î¶Øë™+¦æ¾DÍåÝ&IÊ®,ÖÜ+eÇÄ< ðÈ©¦ÞÜ‘¡ÉÈ[PÂÎLFÊÐL…Ñ몆Óë uïåU/ÀÑ%YÚ¾P<Üí²|óÌsŠëÏPuÒЛRàíq\­ß‹cÈá¿áÝÔQ×ÐÜzÙÔÚmÝèçf¯ù÷|¦ëé‰ÛÉà °ðïµØà©ÙôÿÚöäéÇ|âÿ¶†Øë·ÍëÞÀÏéçÙ¥äëæ¢âÞñéô×â–àêíãøëïËûûôÓóïüÖðèôßìóîÐÿÝïßîìòÞïíòïîëòÔåðùðØôøóéÿîØâéëèáçøÿÒÿé÷Ææïî›ãîõËïáìœØòðp¼íþƒ»âð¶”çîÆ£þçʵéâÃÌåÜÿôÜÛãÔåâÔ¤ãèð•ò¾áÕüîõÙñÝ·˜Ùöï‹õúçãéìç×þìôëñ߇ÙÞû²êóäŸâÎõ»óâøÃòäñ”Ü×ÝÔôâþ¶àÚí§óâÿ¤àêòĪ÷íÕïÿÕºÞõôœââäÊäÞáÞÓãÿ¿ÌÒ‹Éû¼ÇÃÐÑš–Ž‡‰‘˜–ƒ’Ÿžœžq„w‡Ž‰Š‹Šžœ‹|~‚ƒ’•Ž‘’£™¢š—…Ž›—‡©§ ¥¨¬Ÿ¤——š•™ œš££•ž¡ˆˆ‡†‹‘“‘Œ“”‹‘–”œš‘zƒ–¤ˆ—›˜‘¡Œ˜ •†Š™‹Š‹Œ˜¡••—¡¨£   œ›ª½ÈÀÈÌÐÍÕ©È׬¼À¸«§ô§·§²ÍÀ¢«Õê¶èºê˜ÎÌó·â¦µ¯ßÄÏ ÞаºËÑ­š½·‡±” ³ÜÝ庤¾¯œ|Ƙ¿pÞŽ¬°à|”£Ù•Ïçݪ¢Ý̦ª«Ù§¦›î¯»Òì´†¨Ô©z®Ç·”‹‰——±ªz¬º¥­«—†²ˆmu¤‡²‡¯˜…©‹lz«koŒ¹¸‹µy}‘Óx±~¤ªÝ“ËÑè˜ÊÊÄmÍéÙ‹¹ÎqœÂÈØÚ—ŸÒ‰œ«Òx³ÅŠÀã÷ÝtîàÿÖãâÝÔÕÝÖìöÝ°ã퉠ðÕ‹‚ºÖ–x±ÇrxúéÁwûá¯ìÖâ±zèê¨gצ‡{¿³sĹ„hÈ°|r»°ox¾«•w¸¶ÙpƾÄ[ÎÎdlÝÅ¥n›˜Ð€¤«ÌuŸ´Õn½ß•G‘¾Ï]±åÑaš®Ð}u°žJdزf©Öö£y骚Œµ¬qŽÛÕY”ÃÍrgÕ¹[UÃÙ–^°Íw‘Ýà¥CæãIµÛŸšèÊ—P¿ÔÌYßÛµAÅçï—øÕñh¯Òë·ÈöÛ€íæó©Ç÷ä†ÁêïºëèòÎéÙïé²çðºªæçÊÓì׺Õýýé´ÿðä®üÿøÌáæþ·÷ñÎâîëÝÂúâûÊíëúÖóéñËéêáÈøÝöÔæêîÔåéïÓÚçøÙåêíàÈëúï×ìäéáåãÓÔçñõÎýíÿÀÜ÷ê¦õõåºöñò­ãâè™çæèz·æà¨øÛÌ»öÙÖÏáèËÛìáùúòìÞÑòõÔ´üìé”óõàÉÿçßÏøùÔÀÿïä¢öãÚÐñíØÒñêæ€ÿøäáîò¬üêܬøëüµòñÿÄÚêÞŽÛüé¶äñü²ÿÔú¬ùäïëäÿµ®çûÀØáÝÏñÿæ’ñòöÂÚõ㶾ôÿ»ÕߎÌËÎÎÅÈÅÌ×ÂÁ¼¸»ÃÉÉÇÈÒÚÕÑÔɱÙͼÆÉÁ¾©ººº»ÄÔÔ»Á¹ÀÁ¼Å¿¾º¼¾ÀÉÎÈÚÕÓȹÁÓ׶ÙÛ×××ÜÏÒ¿¿ÇÂÀÆÆËÒѼÊο¸¹¸·¼ÂÆźÂÅÀ¾ÂÆÅËÌǽ¹¿Éϳ´ºÃĸ¸ÉµÁË¿¬­»Â¶³²µ¸¼ÂȾ»·¹¿ÀÇÕÉÆÁ¼º»½¿µ»ÌÌÎÎÖÝ?˜îÜiFÜÞ“5åÞ&;ÿÑ7Üצ4Åß±ÝéÄ ïó¨VßÞc2ìæV,ÑÞ>7¿Ò[ÉÙÕص¶Þ§Àǧ'¢Ù¬¡ÿ®5©ñÌUrÄØN6îÛ4ˆøÐ6‡ïÒ8?ÖÓ/uÉàEMÜÑ74Õ¶aWÝÇlÝÑX-½Èd/Åö²Äß©ºË‰¿¨ÀÌ»¾ÕÀ%ØĦ(„êÒ aÚò,¡ç¹'ªÜÈ@‡í¿zÞÄ(‹ø±"ŽäÂ1†õä!šâãP€þì}yíê¬Pêí­_ãàr‰ôÕSèÖ@qËç‘_ÜàWCêØ+lØ䛄åì´níÏGDÆúßãØ„1›çh2ÉËŸ-¯Þ’&£Ù‹4Ü}%pÜÓ¾æÀÈê'aæµ&KñÁ3•öÔ*”áÈ0°×á¯XÄè2cãÈa¼Ö²dßÜL0ÐúÆÿ™žçé¯+ÍØd9ËÕ‡_ÊÂ:–ãkïp^åâ>UÒ¹vgÛáµ…üÕ™ŽïäŠ=ááÌWÜÛâyÞÆä{ìäéyàÕô„½áü«ÒáßmÊëíªîü†Ÿùì«Ôîëš®Ú÷ÆyÖæÄséꜻèò¹…ãÿÚ{Ü÷æ¶ãïß»èàöÜòòèÍòùÙˆÔûõÅìôë´ÒíÝ«Ðôö¬ÝóöÚë÷õÙîìïÖãîýæêðììßúíÛÀñâçëèðÖ—ñòà‡ØåðæìîëÏïâkêäÿØÿàãwåìݳ¸åæÖœÚãÔ¨Úã²¹æåÔ’êçÖ ÖßÏ×éàë°ãíܽéÞêÊðéÖÜéÝÛ©èûæŽâííç÷õÙ¹þÕø­ûíå¦êêÿàÿ×é ÖïèŸÕôåÔëìãyäå÷§Éäé¥ÂòÿµïîöÒñÞá·ÿûéÀÊõíœáðò½óïïéìà÷æªáùµ‘ÐÐÂÌÄÉÍÊÓпÄÊËÆÄÊÒÖÈÆÍÊÄÆÊÁÇÅÎÉÁËÄ¿°±ÀÅÃÅÈ¿ÉÆÏÍÂƾÄÃÃÄÄÇÉÇÇÄÊÇ»¾ËËÄÎÎÜÙÈÍÍÖÀÁÎǽ½¼ÑÆÅÉÅÃÉÍÎÎËÆÄÆÇÅÀÈÌÉÆÇÉÉÅÂÀÅÎÐŷǸ±¾ÊÁ¹Á½Àź¸·¯¶¶»ÄÇÿ½Ã¾¹½½´·ÈÊÍÉÀ½À¼´¸»ÄÂÎØÖè”ÒÍØÍ©ìƦšôºŸ»ÍÕx¹ÀéÂâÐÖ›ôÑݢ㽧–ùȨŸè©—üÜ¢žÜÄŠ³ðغ—ÛÛÓšàÏ·’ÅÒÈ›ÃÇÜŒ¦¾Ú™ÈÔÙ‹“–Л¨è㡶՚º¹ÍšºÚ¤¡æÌ”›Â왘À¸‰…±¯“›Ò£–¥‚–‡¯Øz¥{’³¢¼—™ij«·„¦Š´‘³¸Ðt¢Ú‰–Ìq¨ßä†ÝÎ΂†¾ä}¬É܇–ÿÚd°åÝi¢ÉI¸áè ´ÇâŒyïåóÀñçÝœÓÏ©³ßéá‹ïÔ™¡ðÜ»„ëÔˆ{óåõÑm…òéŒ}å‰bóàšfij£WƒÆ—c²“£tæÛœ„Ú³yg’Ì bŠÆ¿aŸËrÊÉ¿}©²Åw’®Ëk¢³ÄuººÕZ•ÙÂtQ¶Í›·»GQºæsŽê¤of¼®veÞÕoŽÚÐÕ¯â¢nèè…wÐÓlcgºyh§ÿ¢ˆìêˆpØÑjÕãœ[ÍÙ–‰ÕÖ:ǹ®FØè¦GÐäò‚è×´D¦ÓïKœÓÞtªãõŒåóå¨ÀØä¡ÃíïÉîëùÀÈìçÙ©ëÙÑ–ôé½Úâìݸÿáö²ðêàÅüèà¾íúîÆñãâ¯àôÖäààµÝêì¾ÞêçÃñüä©ëíìÐáíïÓâëæÊ×áðØÕðñêÑìêزèÙâèàèÐÞóì“çöðÊæüÛtÉêížþâå§ëæù‰æñé®·ÞãÊ’èöÁšÞï¢ÒîèÖ©òåÌ äïÇÑìïÕßÿÖ¬âèؽéïÍÕêìÛŸïåÛ—êûÞ½ìùê´ãñð¤íîÖ”ëøàªèèã~·òõ¯ÞåøÂóòèöéÁ<›ýܸÿã‘ûîÖd¢û✥åܦ»òî”âúÜ´ÓîìÄãîæÃrÚñœŽÆÉÁÍÄÊÐÇÉÇÄÈÏÐÉÂÅÌÎÂÇÓÐÆÅÈ»ÈËÑÇÀÎËɾÁÊÆÀÆÎÒ×ËÌÈÂÌÉËÍÍÌÍÊÉÌÆ¿ÄÈÂÄÉÃÐÎÈØØËÑÎâÊÈÓÍÅÆÆÖÊÉÏËÈÎÔÖÖÒÊÄÁ¿¼ÂÆÉÈÆÅÅÄÏÉÃÅÏÔÍÁÔĹÃÏÊÅÌÆÃÆÈÇÇ·º¼ÅÏÒÌÄÀÈÄÁÄ´±¿»ÃÄ»·¹¶®ÄÄÇÀÎÛ×ðØO†öÛd*Ûô˜aÞÔiŒÞåO‘áì™ÔÚÂòêj@ý÷—UÜÔ|0ïÒ¥0ìáqcèÔ2Ûò¢!Öå¾(ÉâB§éô}©Üª öéQœÞÎ-mËØ.bÜÛ%¤à½:›âë†wäâ©|äÉmZëºw3ÎàVVìËN_ÚÞ7;×ÓyÏÞƒS¿ÎŽ,àçf8¹Ý©ÓàŸÑÞ„ßØ¢+–äº ”åÆc¹×©3´õÐ*šîÊ7˜òèu¬óærŽáÌ-¦íér™åÓQžöÙ£_Öòš–ÝçmréØn³î廀óÒ¢cèÙ¨~ôß»€âõµuìö˜lÔ߀VýìÖ‹äð' ËlEæÌh2¶æ¨‚ßß<ÁÔ€WðÝ•UÂé¼:Åé‰:ãÓ…TÜçÁ$©ÓÑEÃݸ,ÄÅÃlhÈÓ#œÚ·4kȺ·ÝिÙFRÏÕZ”áÀc§ÛëX5Ú昗ãÔ^žèãQU©Ñ|‡ôÖ—…ÞËt«ãË»ùÕp~Òà}ƒêÒŒ@ËæÙwÚÝÐ’àøÜtÝÒÅjÑáúwµÓÔ’æÕö´÷êìÓÿõæ·àøòŽÅôÿøóöô¶ˆÖþÞÞõñåñõçßÁòØóÒýïúÚñòýììÞéëÿëè×þïôÌúùùÎòïôÞëáþåøàâÛèïôÔíõìîæðÿÛéïäôãüõêäúäêáòô×ØòøòÜÿÞõÐêéüèõãû¤ÉëòÐÿêÙ”ëâò‘âãê½²èí¿¾òæ´ÇíöÍììòÒÝçäçäáõÞéæâôÎþúçðúéÜéêïËÖìðìÖôáñ¯ûð×»ûÿçÝ÷øîÔøçóà÷þãçþãì¬ÌÎçŠüáÿªðéá“ÁØä›ÀÚï»ïÐúƒÚÍÚ×ààåÜçæõáúóé­ÖìðÉÅäó¾ÈÿâëöКÿÍÔÈÉËÆËÂÏÆÂÈÌÈÃÂÐÓÖÐËÑÑÇÒÕÎÐÊÃȹÆÎÒƼÅÎÈÑ×ÎÓÐÆÊÁÀÆÇÈËÅÄËÙÊÊÎËÎÒËÉÑÊËÍÕßÊãËÄÉÆÈÏÐÎÑÐÆÂÌÐÆÊÌËÅ¿¼º¶ÁÁÁÂÄÃÁ¾ÃÈËÊÉÊÉÆÅÄÁÃÅÂÆÔ¾¾ÄÅ¿ÂÉË·¸½ÃÆÅÄÆ¿¿¾ÀÁ·²¹ÁÊÍÇÃľÆÍÔÈËÕÙ¤ÈÀ–³ÊË‘˜ÕÕÒ¯çÔžÇÚàªØѧŸéÓã­Ùì¸âÃÍœÙˬ«íÖǹç×Á£ØÛÍÜÓÉ¡´È­mÍÃݘ¼¶É¡ÅÈã’ÇÜÒš¡½~µÆÍ“ÇÅÒ‚~q¾Ž’Ðæ—{¹¾“ˆŽŸ§œ­ºŠ‡³Ñ›¬¨Èš½–ª®~p©z~º”¥»²«†À›Î}Åü}º–¹„¶¥®l¯”ÁË×Óv½´édºØäv´ß䘻ÙᛪÂçg«æâ¥Ñê☫ëÕ³¤ñåñØûßÆšáù˜·î빈ðÚ²{ãöÚ¼õâ©ìáîÏÙËŽˆÎ·¢ÜÙ¦kÇÄ£l»­mù¿½—ËÊx\µ» w˲˜hÔª…Zù¶h¿ nX½Éy~Ç©¯Y ¯ÒdÀ¶¦X¿ÔÉ•‰‡ÌK©º¢m“ÃyV®¾æžBÃÿs‰ÃÉv“ÕØc•ëÖŒxÀ™Z˸n£Öä•`±ÉrNèòª]â¬Aõç @·É‰kÃÕŸhÁà›PÞëå‚éóÔŠÑóÈVæäë–ÑÞÒj˜èíÿçÙûàâÄíðð±òæ÷­ÏñøåïçéÓÂëä¿Õ÷îÑÞöòä»úïëÅÿåëàïöùìõñé¹ãòìÒÿÚÚ®äêê¾äãéÏéæøÍòóèÐàìîÆßìäôçëóÄÙïñåÏíïã×õïÃÍèïÙÑâìñÐÿê÷ÌêçæÝöåãƒÅÿä´óöþ åîÿœõÝÿ¸¯ÝèĽàè»Ïòæ½âÞè½ÐãíØÕáùÍæìäçªïè×ÔïîÏàäì¾ÐæåÒÐêÚ×x÷ÿÞÂæïɹîùáÇøðØÀóíØÖãæá›ßìýááè¡îÝ·;™õÖlÇïôçä×oÏáèÂòàì»ÔçêÀïÿÝz—æì«£êõ¬ÚßîÌÝΑÕÈÃÊÇËÊÑàÒ×È¿ÅÍÎÌÎÖÓÏľÈÐÌÊËÁÈËÌÒÀ¿ÆȽ¶ÁÉÃÃÌÊÖÖÈÄ´¼ÄÆÈÌÄÂÎÔÅÅÌÉÌÐËÎÔÐÒÏÖãÏÝÌÇÊÈÍÒÊÌÏÐÉÄÎÑÇÅËÎÍÊÉÇÄËÆÃÈÏÑÍʲ½ÈÌÉž¹¿ÈÈÄÄÄÆͽÀÈÊÂÃÍÒ¿¿ÁÃÃÃÈÎÁÄÂÁÆÅÀÂÂÄÅÄÂÁ¿½¿ÇÑÈÉÐØÞ0u÷É7WèߎEÓð‰nóøG’çÖl-àâ¸@ÃðšMçÍ¡^ÙÔl:Ýæ¯5Ïã [ïãI3éñ 8Áõ›9¼ìjÌ÷«,¯ß¸£ãÁA—êÌP|ê¹,Vçó@†êÃL–ïÌ"BÒÕIYçÛULÜßuçÚe`ÓÍohêÐBiæÉZ&¯Õ‰"…·£:´´†[ÛÙšÓâr Íî§Ûæ¡ ƒìÌàÞ$¨í¼:ÊÛª-Ÿïð5¬íòœ‡ÿÅd½ØÇOù÷‹ ÞàuœæñŒtãÕ¶mæñqƒóÜYŸÿæ¶mîú pÝñ°Žãÿ˜pïæÝMê̇—ÓÊv‰ßäsdïß~>Þ߀"ËëÁ*ÿß]/ÖägFäÚ”#ÁÛq*¢èÀ%¾ç¸‘߇ƒÖÈ+ÔØÁá8„ãÊSÝ·-›äÊ3›ÕœŽÂÁ(ŒÉÓ;~ÉÈH5÷µJ¶ßضvò¿sK¶ã}pè¿wŠêÔ’äáÓ—Üò¸×Ø¥‰å׊DÜÒ†.òÛ¤‘ÞÑúüÙÜÝÚÖ‘íÔÊ~Øí᧻çïèý×ç€Ìøà€¸ñëµåëû€Íøé¼ÙóèÜ•Ùêá”ûõµÙøõ¾‘ðïÞ»óëÓ‡êòÖ¿Úùöåïûèíïäò¨úíüÙõôñÁàíå¹áåþåäóøæòíïÝìëñéöëñßÝñèèßøîïêíñðëñÿõ×öåâ’ÏæþÜíø͉çîë’¾ðò}Éã÷„ßçÿöÝôÌ¿îîÉÖäùäêêàÎÊüïÓØêòÝíÖùãÕ÷ìé³õçôçêûÕáÜðغÿÙþäôçÿèíöÐÏøîóéøñøâóëí°ñîîçñãù±ëïîöëïá“ä¾ï¶Ëóíšþâó¦±ëí½Áíò¿¹âî©Çâó±ÛõÿöçãÚÊëäûÝååî­{Ü¿Ï××ÖÇÊØ¿ËÁ»¾¿ÁËØÔÄÄÏÊÀÅÑÕØÏÐËÉÑÂÎÀÀÉÇÄËÓÏÒÈÏÒÌÏüÅÇÈËÁ¾ËĺÂÍÊËÏÊÖÎÍßÕÆÕÔÑÈËÏÌÎȶ̿ÂÏÍÆÊÒÀÈÏÐÏÏÎËËÄÀÇÒÖÓÎÈÈÈÌÒÔÌÂÄÉÅÀÇÊÁ¹ÁÀÈÐÍÊÈÃÆÈËÌÈÄÆÌÇËÆÁÈÎËÉÍÈÅÇÈÅÁÀ¹ºÃÁÊÑÖ¸†»¬À{»Ü˱¡çÛžžìÚÆÀã¡éσðÈ ‘îߟ§ß奔ØʨìÍ ‚ïÙ¯£Õ×¹žÞÕ¿ŽÍس®­§Ã’ÿÍ{·¶Ðƒ³½Ço¡˜ž™Ž“ê™±ÕØ¡£ÒØ©…ÝÑ’³Ô§Œä᜗–͈y§ž¨•±±©¢¦™‚wÁ™}…°«xgÀ¦”¯Ž‚^»œ¯„¹•³~«©Ð†°±Ýr¯†ß€Õ³ÇpÎíÊd†²Ýz¿Øâ¯ðÇk«Ýµi™ûÍkžðÙ§ªøóž™ùó¸¶äÞ¢æÉ^µÖ祔öíäÂïÞˆÖãœjÓåªyÄÚ–”ÚÅ‚ê~céÁ¨xÝÒ¢síâaéÖ–bÆÀ¯N¬¼ŸZ¬Ã\]º²–[¢×¨n·Êhmºº^ħ§_ÍÉŒ]´Æ¿OOš‰Z¡Çº]®ÁÎ~Õ×Õ[Z«‘XX¸àsÅà[ ÓÌŸ„ĺLvéá…‚ÍÏa}æÓšÛãÀXéê¼|×ãgI±»kWÎÝEÖÂ’4âêãAÑñ¤LÑð±7Éï”jáÕÎ_ÈîçìüîÒB¸ñÍD‰éë§ððè¯øÐŒ–ÿçׂåê Mâã¾äöðÚ¿òòÚÇíõΤèæݯêéíÀòõçÑúâõ™ïìâ¥æúï°îóñÁÙþé¿õòåÒÜÿê¿Þöîçèíçзäö×ÇòþßÓòáÓÜô÷Ô«êýì˜ãñè§ëèÛãùé¶ïêÆôì—çïè•èàõÌ¿ýâËÓéô±çëáÖÃçí×ÖæåÙÝçæßÃõÙâ´æçëËùðÈÖùìʘèÝÖ²ñåíÂêêȺñíæÐîÿ¤§ì÷ë§ïì×­òòä–Øäö·öãÌ|ßðô–ÕÛö‹îéÏ’ÎòÝ ÄèÞŸÉï⇩õßtÎóîÑìÛö¥Éíð»Ùî÷œzÒËÎËÍÍÈÈÉÅÅÏÆ»ÃÊÉÌÔÆÀÈËÆÅËÖËÊÑÓÑÎÉ¿ÂÅÆÆÈÌÏÎÊÊÏÐËËÏÓÆÁÊÍÆÃȾÃÀÃÏÍÈÑÓÇÑÉÁÍÏÐÆÈÊËÊÊÌÎÊÊÐÐÉÈËÊÉÏÍÈÆÂÁÈÎÃÂÐмºÏÊȾ¼ÇÌÅÀÏÐËËÎÁ¸ÄÁÁÂÆÉÉÆÂÌÃÁÊÍÆÁÂÏÉÅÆÆÁ»·Ïü½Âƽ¬»¼»ÁÉÇÑKù¸«Ùâ‡Eéó[UýßaŽäã` Úæ¯?Òú˜;ÝÑ­aäü¢=Îä©#èÙ‚aãÝxXâÚfCÎݶ(ÍÏ .äÝ®,¨òÃ0½ìµݼ-®óØCZçí0zÎí& ßÒ:„ÖåffÞé5hêÒfƒÔíCgÂÙ{YÌÅISËÏ7KÄç‚G¥ò£6¼ÓDÖÏb.³Ì•IÁè–³án,Ðѯ'ŸÍÀ&¯áµ­ùÈi¶Ô´9¡ìèx²ßß²ûó¥°ÒÔ ñÜ€•ÿçªàç˜êý¸úák˜úüj§öܦjüõœ™ë㉋äÍsYæÞmÞèjÚ³@•èËÓ˜îÖ”_âÜÏ™ÌãÖØ»…Läì~1êßPP¾å„3râ§JÀâŠ(±À~fÚ䧊áÛGuÖ©1¬¨[:uàÍ%cÙÉ:²ÿ×Vr¸¬6MÉÅ[¨ØØd§ôÛjrõÕ[GÄݘ•òÆbŽÕÝå£ÞÙ¦‡ÊδçЃ–ðÔ¦W¹Ò}dÞÞ•1ºòî„æìÒ{ëäåƒßÜÝéìÖŽÆíå‹´ÿô‡ÔÙóÔâçöéôÿÁÿôÎïùÙÃÄûúÌ‘þÉêæÿìëôëîÐñÜíèöÿýåÿóÿØüèì¨ÿÿÝ¢ÿéíêùéÿØýóþßëïøáõùúßóüîöýíö×áïöóîëëóãóûçîüéåìîëëîîéòÜÿèíÕÿêþ’èøÕ’úùÿwÓÿÕŸÿíá¢öÝîÀÕåí¼©èè±ÉõÛ±¼äêÕáõõìèïðáÞíôجïãîàúãÓÎæóÚÕùòòÆìßãºÞ÷ìÕçõó×ÿñùèÏîé¹õàô¾üëî§ÝîçÁãòãÃöë×–ëîÛ”ßåü¬Þÿÿ¸àèðÞíòùãîÍíìÿïê™ÜãïÅêÚè¾¼ïòÍæÓ›ÂÞÝÍÂÁÄËËÂÉθÂÉÄÄÏÎËÉËÎÏÌÐÇÇÍÎÎÍÉÄÅÅÃÁÁÄÇÎÈÇÌÏÏÒÙÝÑÊÌÎÊÈÊÃÈÆÉÐÉÁÆÐÃÌžÊËÎÐÐÐÎËÊÉÉÃÁÆÊÊÑÜßÊÌÉÇÅ¿¿ÉÇÖÒÄÄÍÍÈÅÉÅÂÈÌÊËÁÌÉÃÈÉÄÅÉÉËÎÑÑÏËÇÂÁÇÍÌÊÉÕÑÎÍËÊÎÓÖÍÈÄÂÇǾ·¼½ÀÅÁͨøÉvÕÁÆ’ãÚœ™ëØ›»Ôé­ÝÚÑÛœ÷Û¿‹ìß•Úà›œêß»ƒï½¦œà妘Կ«‘âÐÙ}¥Þ›‰×ÏÓˆ±ÎÙÙÔŠ˜˜ÁŒÌÑÏ’‰µØ„¢ºÐ|¢œêi¡ªÎ„¦Ô›‡©ß”œ¨×‚„©­€s²¹ˆ£ª–¡²¥iz—•ƒª°ŠžÉ¸ˆp³œ|§¼u¨¶»{µÅÐr®«Þ~ÁòÈw×êߟº¶Ôl©åídŒùç¼Áæó£¢á㎗éè®®Úì³áØÞœÆëàíÅÿåo²ïÞ^ ù㺃ôãÍËâ× ™ÊçŽç¹zµñ{˜¹œdìí´rÝè—LéãÅ“ÑàžS¿¨€Z³½ŸVŵk‡ÃÀ‚_”¼ÀeÁ££TÆ¥iaÁļk¼ÛÓ^¨áÉI“˜‰n•­Çk£ÆÏK¥®…s~¨šT€Ì«7bÁµ\‚Öû•lÀ«bqÚÔwYãÀTÜÌ.×æ›aíö_YâÙså̺:½ÙuKñÛ‰OþãÐ6ÈÕäRóܺSãö³HÚé½e«ÿû“ÃõÖrÌìð˜ÚôñöñÞöïñÂõâåÔ¾çù»WÚèØ•ñõÚäïðá¾ìã×ÑêâãÁðèîÒñãï—çðášóûèÍîòê­âòèÄÕðòÀäøáÏæþêàñïêºÌçùõçäê׶ßýÔÖúîÕáçáÛàêðÚ±êóݯãìÚ™øæÒ}ßäðvÐöÜ’ñìå\Óéå•’äè¼ÇôêÉ×öé°ÄáûËÝïîâÛãäÓÏàå¿šéëæÒèïÚÖîðÍÍùÿÌžòùÆ›ôîÌÃíðܺãáêÍâôÞ—íëÄiÝæꃹúâ˜êíÝ–åñæžÝëÚ’Ôôâ‘Öæ݇áæóÛèìÛºØñó±áìß_¤ÿå¸Úèö«ŸýâžÂ߬«¸Ñû¼ÀÇÈÁË̽µÀž»ÔÜÙÊÃÈÆ»ÐÊÌÑÐÑÔÒËÊÈÅÂÃÅÈÊ¿ÃÇÉÎÖØÑÉÆÉËËÉÇËÍÐÓÊÁÃØËÒÊÇÒÓØÓÕÔÑÌÈÈÉÊÈÌÍÇÅÄ¿ÑÍÉËÊÁÁϹÍȱ²ÄŹÀÉÉÄÄÅÆÌÀÑÐÄÊÕÒÊÉÉÊÍÐÑÏÍÂÁ¿¿ÅÌËÆÆÆÇÇÃÁÆÎÊÊÌÈÀÁÅÁ¹ÂÃÄÆÁÎÓW¬óÎKuÖíœ`öïj‰èÝN§åÙi?ÐãRRâæ’EòÙpm×ù^:Øüo:ÜÞ]cûàb?éäŠCÄþ@ÞÏ×@ÊäyšûÇVµú¨A±ý¹D‘òÏ;açÑ`‰öÒ*¡èÆ_ùÔ4`ÿà8eúÑ5hâ×c'âÆK1âÑSXå×W%bÈ’U´î‹Üèv ÑÖ"½Üg(³ü˜¿ê†#œâÉ£óÏi¸á¯BÇõ™+¦óÊ9ªþÀ9–ì¾d½ðÖ¾€ÿÿœüäwÇâép…ãÿ”XùñÜäìô…¼ãᬑïñ§ƒüípqÙãšdõ÷£BÐÌDÜÒ;Uéí³”ñç›xé×ÈiÜÞ‹…øà–F·Ú}MóÙ|8¦Ôh?¨Ó¦9Îئ%Ôæ¤3”ì¿F­ÜÜ…ÈÑä”ùÛ“-¤ÕØ-ˆéÈ3­ÐÔ+P×±MVÕº>'¡Î=XóØO·ìá;LÂÞlkÍßg}ƶp™áàËuÛƬ£ÓÃy™Äå•põИâ»ë§õÄÀÿèÈmôêÝ’äÜþâñæáÑèøœØéÝŸÎèÿÜöþý­Ùáïšÿáôçíðó‰ÃáçЫðÍÁÄèæñëôÿñéùîéöèòäéÙæÃáóÙ±ðïõâÿåòïäïÿõõæõéúñ÷ñøàäÙÚõêòóõðÞãìåçððàÑÍ÷áêúíáãàóíåæóúíÚùéóîÿåëë÷Þà†ùúÿ–Óíù£üëï¸ýÌÿ¶ÝñÐÕÒã÷λòûÌùçöÊíáúØçôïÞâîëâÀæãöæøïàÒÿÿÖÐîñÚ¯öçØÜûìÿÿåã×­ÜðêÊïêöÒøÙûùïÎýÏþîþÿîòûÿïèèÍÿùøÉòíüææëÿ­âÍò¸ÍÛæÍãèç«ÐÑî£ëßÿº·êûºÓßúàóðñ¾—º¾¸½ÈÎÉÉÌËÎÑļÅÇÁÂÉÒÕÎÉÍÏÌÇÃÆÉÈÊÏÎÐÎÌÉÉÌÐÒÍÄÀÃÇÇÊÏÎÍÈÅÉÑÐÉÈËÎÓÔÏËÍ×ÊÎÇÇÑÏÙÕÛßÚÑÌÐ×ÕÑÒÑÌËËÇØÑËÏÏÅÆÖÌËÇÇÉÅÄÌÇÏÎÇÆÄÃÇÁÉÈÀÃÊÈÁÆÆÇÉËÌÌÌÆǼÁËËÂÌÎÓÖÒËÇÈÈÏÛÜÓÐÎÇÂÈÇÇÌÉÑà„¹á볶âʼ„ÙˇªÇÐuÄàÒ¬•õô›¢êæ¸w÷Û¨ ò¿£”òºŽ”¹°–•ìðŸ‡öä m×ίáקmØÕ·…¹êáœÊÜÒžËìÖŠ ÉÝ­ÿЀ¥Ç®~ÈÓÑš”Åל ßäí–¬äѦŒÃÔ¦‡íà™£µÃ£¦–­Œ±¿ªr×Ê©zÝ̹~Ùç–r»É°}ÌåÄ|¼ÊÖ‹ÍèÈŸÍ¿~Éغ ¼ÛÐk•ÓÌ|¥Õ¾q£àÔ‰„ÛÍÈØ×ØÞܤ”ÜïÁ¤ñÝÀÑàÌ„ØÝØáÃÔË rÚà”ÞÑ“€ßפmèâgyº³ŸàÀ•qÑÞuAÍÓ‘[×û‘bÓã’Z¼ÕuQÔ˦V°Û‹\¡ÐºYÇÔž`ÍÚ§cÂô´X¦ÊÓU¶áÔY²ÎµEœ¸ÛL›óÑM®èàb‡×Á\qòÕhcÒãYÐÁTžÒâvwËÏYSµÒJdàÓY}ÚÛKÚáYKêðgŠÉݬˆÝî›SÚâ«KáøtAçÉògæèÍmÎÛÛÓñÔÝ‚ÊìÞ‰ÌáÓ|ºèéÊåèߤóåìµîáØÊäáÄfÆëÔØ®õñº±ñùÀÒæåØÃæéÈÓÞíÐzãêÛ·ÛüÕ±îÉÚ¸æåòîÚæèÏàôãÄßàâÏäìîÚðèÓÊÒçÕ³ÅíÖÅÍßèééæãØ×âÜÊÄãÖÉÌÞåеêñßÊîîÛÌñÎÞœìßÙbÏåÝëæÖ—åïèÅõá»ÀÏìÓÁæÝ©ÎÙæžÇÖñ¸ÈâÝÂÈáßÈ åïÛÇá⾘à꯫ã꼇ôõ¹¸ìèÝãâäÁ×òÖ¬Ùßâ§éæãÜäðÕ¢Ñõ×Ûéáóºêèâ½ÒÞæ²ÚêæàÛåääíጷâß¼å늹ÛãrÅàØäæ‘®ÛíÆé㣗ÍʸÁÒÚÔÑÔÓØßØÐÕÔÒÚÛØØØÎÂÁÉËÉÌÎËÏÒÏÑÎËÉÊÍÑÓÓÊÇÌÐÏÏÒÍÏÎÍÑÖÑÉËÊÌÐÎÍÒÕÝÐÒÌÐ×ÑÞÕßæàÑËÒÜåÜ×ÒÍÒÛÝÕÎÈËÍÅÅÓÒÈÇÔØÈÃÓÙÝÙÕ××ÓÒÚÔÓ×ÖÔÔÔÓÓÔÔÔÕ×ØÕÖÑËÏÚÚÒÓÑÒÖ×ÐÉÆÄÉÓÖÑÐÍÄÇÉÃÄÎÎÑ +%%EndBinary +grestore end % Image Trailer grestore +grestore % EPS grestore +[{nextImage} 1 dict begin /Metadata {photoshop_metadata_stream} def currentdict end /PUT pdfmark +[/NamespacePop pdfmark +%%BoundingBox: 0 0 198 128 diff --git a/Build/source/extra/epstopdf/test-binhdr-cr.eps b/Build/source/extra/epstopdf/test-binhdr-cr.eps new file mode 100644 index 00000000000..e8f215bd32d Binary files /dev/null and b/Build/source/extra/epstopdf/test-binhdr-cr.eps differ diff --git a/Build/source/extra/epstopdf/test-binhdr-crlf.eps b/Build/source/extra/epstopdf/test-binhdr-crlf.eps new file mode 100644 index 00000000000..a13d4efd4ce Binary files /dev/null and b/Build/source/extra/epstopdf/test-binhdr-crlf.eps differ diff --git a/Build/source/extra/epstopdf/test-binhdr-lf.eps b/Build/source/extra/epstopdf/test-binhdr-lf.eps new file mode 100644 index 00000000000..4325ef5c334 Binary files /dev/null and b/Build/source/extra/epstopdf/test-binhdr-lf.eps differ diff --git a/Build/source/extra/epstopdf/test-simple.eps b/Build/source/extra/epstopdf/test-simple.eps new file mode 100644 index 00000000000..10a06d16543 --- /dev/null +++ b/Build/source/extra/epstopdf/test-simple.eps @@ -0,0 +1,12 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 0 0 100 100 +%%Creator: Karl Berry +%%Title: Simple epstopdf test + +% This file is public domain. + +gsave +0 0 moveto +100 100 lineto +stroke +grestore diff --git a/Build/source/extra/expat/COPYING b/Build/source/extra/expat/COPYING new file mode 100644 index 00000000000..fc97b02d909 --- /dev/null +++ b/Build/source/extra/expat/COPYING @@ -0,0 +1,21 @@ +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Build/source/extra/expat/Changes b/Build/source/extra/expat/Changes new file mode 100644 index 00000000000..5b78b862a72 --- /dev/null +++ b/Build/source/extra/expat/Changes @@ -0,0 +1,34 @@ +Release 1.95.1 Sun Oct 22 15:11:36 EDT 2000 + - Changes to get expat to build under Microsoft compiler + - Removed all aborts and instead return an UNEXPECTED_STATE error. + - Fixed a bug where a stray '%' in an entity value would cause an + abort. + - Defined XML_SetEndNamespaceDeclHandler. Thanks to Darryl Miles for + finding this oversight. + - Changed default patterns in lib/Makefile.in to fit non-GNU makes + Thanks to robin@unrated.net for reporting and providing an + account to test on. + - The reference had the wrong label for XML_SetStartNamespaceDecl. + Reported by an anonymous user. +Release 1.95.0 Fri Sep 29 2000 + - XML_ParserCreate_MM + Allows you to set a memory management suite to replace the + standard malloc,realloc, and free. + - XML_SetReturnNSTriplet + If you turn this feature on when namespace processing is in + effect, then qualified, prefixed element and attribute names + are returned as "uri|name|prefix" where '|' is whatever + separator character is used in namespace processing. + - Merged in features from perl-expat + o XML_SetElementDeclHandler + o XML_SetAttlistDeclHandler + o XML_SetXmlDeclHandler + o XML_SetEntityDeclHandler + o StartDoctypeDeclHandler takes 3 additional parameters: + sysid, pubid, has_internal_subset + o Many paired handler setters (like XML_SetElementHandler) + now have corresponding individual handler setters + o XML_GetInputContext for getting the input context of + the current parse position. + - Added reference material + - Packaged into a distribution that builds a sharable library \ No newline at end of file diff --git a/Build/source/extra/expat/MANIFEST b/Build/source/extra/expat/MANIFEST new file mode 100644 index 00000000000..645bfd9c33d --- /dev/null +++ b/Build/source/extra/expat/MANIFEST @@ -0,0 +1,58 @@ +Changes +COPYING +MANIFEST +Makefile.in +README +aclocal.m4 +config.hin +configure +configure.in +conftools/config.guess +conftools/config.sub +conftools/install-sh +conftools/ltconfig +conftools/ltmain.sh +conftools/missing +conftools/mkinstalldirs +doc/reference.html +doc/style.css +examples/Makefile.in +examples/outline.c +lib/Makefile.in +lib/ascii.h +lib/asciitab.h +lib/expat.dsp +lib/expat.h +lib/iasciitab.h +lib/latin1tab.h +lib/nametab.h +lib/utf8tab.h +lib/xmlparse.c +lib/xmlrole.c +lib/xmlrole.h +lib/xmltok.c +lib/xmltok.h +lib/xmltok_impl.c +lib/xmltok_impl.h +lib/xmltok_ns.c +lib/winconfig.h +xmlwf/Makefile.in +xmlwf/codepage.c +xmlwf/codepage.h +xmlwf/ct.c +xmlwf/filemap.h +xmlwf/readfilemap.c +xmlwf/unixfilemap.c +xmlwf/wfcheck.c +xmlwf/wfcheck.h +xmlwf/wfcheckmessage.c +xmlwf/win32filemap.c +xmlwf/xmlfile.c +xmlwf/xmlfile.h +xmlwf/xmlmime.c +xmlwf/xmlmime.h +xmlwf/xmltchar.h +xmlwf/xmlurl.h +xmlwf/xmlwf.c +xmlwf/xmlwf.dsp +xmlwf/xmlwin32url.cxx diff --git a/Build/source/extra/expat/Makefile.in b/Build/source/extra/expat/Makefile.in new file mode 100644 index 00000000000..ce0a987c096 --- /dev/null +++ b/Build/source/extra/expat/Makefile.in @@ -0,0 +1,148 @@ +################################################################ +# Process this file with top-level configure script to produce Makefile +# +# Copyright 2000 Clark Cooper +# +# This file is part of EXPAT. +# +# EXPAT is free software; you can redistribute it and/or modify it +# under the terms of the License (based on the MIT/X license) contained +# in the file COPYING that comes with this distribution. +# +# EXPAT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN EXPAT. +# +# --- +# I started using automake, but +# 1) it seemed like overkill +# 2) I don't want all the GNU policies +# 3) I wanted more explicit control over what gets built +# +# So I'm doing my Makefile.in files manually. But a fair part is based +# on what I learned from perusing the Makefile.in's generated by automake, +# and the automake authors still get my kudos. +# + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +top_builddir = . + + +AUTOCONF = autoconf + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ + +CC = @CC@ + +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +PACKAGE = @PACKAGE@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +SUBDIRS = lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +CONFIG_HEADERS = config.h:config.hin + +DISTDIR = $(PACKAGE)-$(VERSION) +DISTRIBUTION = $(DISTDIR).tar.gz + +all: $(SUBDIRS) + +.PHONY: all $(SUBDIRS) clean distclean maintainer-clean dist install \ + uninstall distdir + +Makefile: Makefile.in config.status + CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) config.status + +config.status: configure + @if test -f $@; then \ + $(SHELL) config.status --recheck ; \ + else \ + $(SHELL) configure ; \ + fi + +configure: configure.in + $(AUTOCONF) + +config.h: config.hin config.status + CONFIG_FILES= CONFIG_HEADERS=$(CONFIG_HEADERS) \ + $(SHELL) ./config.status + +$(SUBDIRS): config.status + cd $@; $(MAKE) + + +clean: + @list='$(SUBDIRS)'; for dir in $$list; do \ + cd $$dir; $(MAKE) clean; cd ..; \ + done + rm -f core *~ + +distclean: + @list='$(SUBDIRS)'; for dir in $$list; do \ + cd $$dir; $(MAKE) distclean; cd ..; \ + done + rm -f config.h config.status config.log libtool examples/Makefile xmlwf/Makefile + +maintainer-clean: distclean + rm -f $(DISTRIBUTION) + rm -rf $(DISTDIR) + +distdir: MANIFEST + test -d $(DISTDIR) && rm -rf $(DISTDIR); \ + mkdir $(DISTDIR); \ + flist=`sed -e "s/[ ]:.*$$//" MANIFEST`; for file in $$flist; do \ + cp -P $$file $(DISTDIR); \ + done + +$(DISTRIBUTION): distdir + tar cfz $(DISTRIBUTION) $(DISTDIR) + +dist: $(DISTRIBUTION) + +install: + @list='$(SUBDIRS)'; for dir in $$list; do \ + cd $$dir; $(MAKE) install; cd ..; \ + done + +uninstall: + @list='$(SUBDIRS)'; for dir in $$list; do \ + cd $$dir; $(MAKE) uninstall; cd ..; \ + done diff --git a/Build/source/extra/expat/README b/Build/source/extra/expat/README new file mode 100644 index 00000000000..d1c68741909 --- /dev/null +++ b/Build/source/extra/expat/README @@ -0,0 +1,57 @@ + + Expat, Release 1.95.1 + +This is expat, the C library for parsing XML, written by James Clark. Expat +is a stream oriented XML parser. This means that you register handlers with +the parser prior to starting the parse. These handlers are called when +the parser discovers the associated structures in the document being parsed. +A start tag is an example of the kind of structures for which you may +register handlers. + +Expat is free software. You may copy, distribute, and modify it under the +terms of the License contained in the file, COPYING, distributed with this +package. This license is the same as the MIT/X Consortium license. + +Versions of expat that have an odd minor version (the middle number in the +release above), are development releases and should be considered as +beta software. Releases with even minor version numbers are intended to be +production grade software. + +To build expat, you first run the configuration shell script in the top +level distribution directory: + + ./configure + +There are many options which you may provide to configure (which you can +discover by running configure with the --help option.) But the one of most +interest is the one that sets the installation directory. By default, +the configure script will set things up to install libexpat into +/usr/local/lib and expat.h into /usr/local/include. If, for example, you'd +prefer to install into /home/me/mystuff/lib and /home/me/mystuff/include, +you can tell configure about that with: + + ./configure --prefix=/home/me/mystuff + +After running the configure script, the "make" command will build things and +"make install" will install things into their proper location. Note that +you need to have write permission into the directories into which things +will be installed. + +Alternatively, on Win32 systems with Microsoft's Developer's Studio installed, +you can simply double-click on lib/expat.dsp from Windows Explorer and build +and install in the usual way from with DevStudio. + +As a third alternative you may choose to download expat_win32bin which has +a pre-compiled dll in it. + +A reference manual is available in the doc/reference.html in this +distribution. + +The homepage for this project is http://expat.sourceforge.net. There are +links there to connect you to the bug reports page. If you need to report +a bug when you don't have access to a browser, you may also send a bug +report by email to expat-bugs@lists.sourceforge.net. + +Discussion related to the direction of future expat development takes place +on expat-discuss@lists.sourceforge.net. Archives of this list may be found +at http://www.geocrawler.com/redir-sf.php3?list=expat-discuss. diff --git a/Build/source/extra/expat/aclocal.m4 b/Build/source/extra/expat/aclocal.m4 new file mode 100644 index 00000000000..983268ba09f --- /dev/null +++ b/Build/source/extra/expat/aclocal.m4 @@ -0,0 +1,425 @@ +## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*- +## Copyright (C) 1996-1999, 2000 Free Software Foundation, Inc. +## Originally by Gordon Matzigkeit , 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 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +## +## 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. + +# serial 40 AC_PROG_LIBTOOL +AC_DEFUN(AC_PROG_LIBTOOL, +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl + +# Save cache, so that ltconfig can load it +AC_CACHE_SAVE + +# Actually configure libtool. ac_aux_dir is where install-sh is found. +CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ +LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ +LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \ +DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \ +${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ +$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \ +|| AC_MSG_ERROR([libtool configure failed]) + +# Reload cache, that may have been modified by ltconfig +AC_CACHE_LOAD + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Redirect the config.log output again, so that the ltconfig log is not +# clobbered by the next message. +exec 5>>./config.log +]) + +AC_DEFUN(AC_LIBTOOL_SETUP, +[AC_PREREQ(2.13)dnl +AC_REQUIRE([AC_ENABLE_SHARED])dnl +AC_REQUIRE([AC_ENABLE_STATIC])dnl +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([AC_PROG_RANLIB])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_NM])dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +dnl + +case "$target" in +NONE) lt_target="$host" ;; +*) lt_target="$target" ;; +esac + +# Check for any special flags to pass to ltconfig. +libtool_flags="--cache-file=$cache_file" +test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" +test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" +test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" +test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" +test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" +ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], +[libtool_flags="$libtool_flags --enable-dlopen"]) +ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], +[libtool_flags="$libtool_flags --enable-win32-dll"]) +AC_ARG_ENABLE(libtool-lock, + [ --disable-libtool-lock avoid locking (might break parallel builds)]) +test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" +test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case "$lt_target" in +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; + +ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], +[*-*-cygwin* | *-*-mingw*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +]) +esac +]) + +# AC_LIBTOOL_DLOPEN - enable checks for dlopen support +AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])]) + +# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's +AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])]) + +# AC_ENABLE_SHARED - implement the --enable-shared flag +# Usage: AC_ENABLE_SHARED[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN(AC_ENABLE_SHARED, [dnl +define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(shared, +changequote(<<, >>)dnl +<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT], +changequote([, ])dnl +[p=${PACKAGE-default} +case "$enableval" in +yes) enable_shared=yes ;; +no) enable_shared=no ;; +*) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl +]) + +# AC_DISABLE_SHARED - set the default shared flag to --disable-shared +AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_SHARED(no)]) + +# AC_ENABLE_STATIC - implement the --enable-static flag +# Usage: AC_ENABLE_STATIC[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN(AC_ENABLE_STATIC, [dnl +define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(static, +changequote(<<, >>)dnl +<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT], +changequote([, ])dnl +[p=${PACKAGE-default} +case "$enableval" in +yes) enable_static=yes ;; +no) enable_static=no ;; +*) + enable_static=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_static=AC_ENABLE_STATIC_DEFAULT)dnl +]) + +# AC_DISABLE_STATIC - set the default static flag to --disable-static +AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_STATIC(no)]) + + +# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag +# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl +define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(fast-install, +changequote(<<, >>)dnl +<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT], +changequote([, ])dnl +[p=${PACKAGE-default} +case "$enableval" in +yes) enable_fast_install=yes ;; +no) enable_fast_install=no ;; +*) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl +]) + +# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install +AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_FAST_INSTALL(no)]) + +# AC_PROG_LD - find the path to the GNU or non-GNU linker +AC_DEFUN(AC_PROG_LD, +[AC_ARG_WITH(gnu-ld, +[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], +test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +ac_prog=ld +if test "$ac_cv_prog_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. +changequote(,)dnl + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' +changequote([,])dnl + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(ac_cv_path_LD, +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + ac_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + ac_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$ac_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_PROG_LD_GNU +]) + +AC_DEFUN(AC_PROG_LD_GNU, +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + ac_cv_prog_gnu_ld=yes +else + ac_cv_prog_gnu_ld=no +fi]) +]) + +# AC_PROG_NM - find the path to a BSD-compatible name lister +AC_DEFUN(AC_PROG_NM, +[AC_MSG_CHECKING([for BSD-compatible nm]) +AC_CACHE_VAL(ac_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + ac_cv_path_NM="$NM" +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -B" + break + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -p" + break + else + ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm +fi]) +NM="$ac_cv_path_NM" +AC_MSG_RESULT([$NM]) +]) + +# AC_CHECK_LIBM - check for math library +AC_DEFUN(AC_CHECK_LIBM, +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case "$lt_target" in +*-*-beos* | *-*-cygwin*) + # These system don't have libm + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, main, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, main, LIBM="-lm") + ;; +esac +]) + +# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for +# the libltdl convenience library and INCLTDL to the include flags for +# the libltdl header and adds --enable-ltdl-convenience to the +# configure arguments. Note that LIBLTDL and INCLTDL are not +# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not +# provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed +# with '${top_builddir}/' and INCLTDL will be prefixed with +# '${top_srcdir}/' (note the single quotes!). If your package is not +# flat and you're not using automake, define top_builddir and +# top_srcdir appropriately in the Makefiles. +AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case "$enable_ltdl_convenience" in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) +]) + +# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for +# the libltdl installable library and INCLTDL to the include flags for +# the libltdl header and adds --enable-ltdl-install to the configure +# arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is +# AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed +# libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will +# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed +# with '${top_srcdir}/' (note the single quotes!). If your package is +# not flat and you're not using automake, define top_builddir and +# top_srcdir appropriately in the Makefiles. +# In the future, this macro may have to be called after AC_PROG_LIBTOOL. +AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, main, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + INCLTDL= + fi +]) + +dnl This is just to silence aclocal about the macro not being used +ifelse([AC_DISABLE_FAST_INSTALL])dnl diff --git a/Build/source/extra/expat/config.hin b/Build/source/extra/expat/config.hin new file mode 100644 index 00000000000..5dd8d5b77a1 --- /dev/null +++ b/Build/source/extra/expat/config.hin @@ -0,0 +1,65 @@ +/*================================================================ +** Copyright 2000, Clark Cooper +** All rights reserved. +** +** This is free software. You are permitted to copy, distribute, or modify +** it under the terms of the MIT/X license (contained in the COPYING file +** with this distribution.) +** +** +*/ + +/* Define to empty if the keyword does not work. */ +#undef const + +/* Define if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define to `long' if doesn't define. */ +#undef off_t + +/* Define to `unsigned' if doesn't define. */ +#undef size_t + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define if your processor stores words with the most significant + byte first (like Motorola and SPARC, unlike Intel and VAX). */ +#undef WORDS_BIGENDIAN + +/* Define if you have the bcopy function. */ +#undef HAVE_BCOPY + +/* Define if you have the getpagesize function. */ +#undef HAVE_GETPAGESIZE + +/* Define if you have the memmove function. */ +#undef HAVE_MEMMOVE + +/* Define if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define if you have the header file. */ +#undef HAVE_UNISTD_H + +#define XML_NS +#define XML_DTD + +#ifdef WORDS_BIGENDIAN +#define XML_BYTE_ORDER 21 +#else +#define XML_BYTE_ORDER 12 +#endif + +#define XML_CONTEXT_BYTES 1024 + +#ifndef HAVE_MEMMOVE +#ifdef HAVE_BCOPY +#define memmove(d,s,l) bcopy((s),(d),(l)) +#else +#define memmove(d,s,l) ;punting on memmove; +#endif + +#endif + diff --git a/Build/source/extra/expat/configure b/Build/source/extra/expat/configure new file mode 100755 index 00000000000..bdcedeb706d --- /dev/null +++ b/Build/source/extra/expat/configure @@ -0,0 +1,7042 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.61. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell autoconf@gnu.org about your system, + echo including any error possibly output before this + echo message +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # 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). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... 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'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + 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 + +# 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'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="Makefile.in" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL +PATH_SEPARATOR +PACKAGE_NAME +PACKAGE_TARNAME +PACKAGE_VERSION +PACKAGE_STRING +PACKAGE_BUGREPORT +exec_prefix +prefix +program_transform_name +bindir +sbindir +libexecdir +datarootdir +datadir +sysconfdir +sharedstatedir +localstatedir +includedir +oldincludedir +docdir +infodir +htmldir +dvidir +pdfdir +psdir +libdir +localedir +mandir +DEFS +ECHO_C +ECHO_N +ECHO_T +LIBS +build_alias +host_alias +target_alias +build +build_cpu +build_vendor +build_os +host +host_cpu +host_vendor +host_os +RANLIB +CC +CFLAGS +LDFLAGS +CPPFLAGS +ac_ct_CC +EXEEXT +OBJEXT +LN_S +LIBTOOL +PACKAGE +VERSION +LIBCURRENT +LIBREVISION +LIBAGE +INSTALL_PROGRAM +INSTALL_SCRIPT +INSTALL_DATA +CPP +GREP +EGREP +LIBOBJS +FILEMAP_OBJ +LTLIBOBJS' +ac_subst_files='' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=\$ac_optarg ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute directory names. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + 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 +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { echo "$as_me: error: Working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$0" || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +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 this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --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-libtool-lock avoid locking (might break parallel builds) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gnu-ld assume the C compiler uses GNU ld default=no + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +configure +generated by GNU Autoconf 2.61 + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi +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 $as_me, which was +generated by GNU Autoconf 2.61. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -n "$CONFIG_SITE"; then + set x "$CONFIG_SITE" +elif test "x$prefix" != xNONE; then + set x "$prefix/share/config.site" "$prefix/etc/config.site" +else + set x "$ac_default_prefix/share/config.site" \ + "$ac_default_prefix/etc/config.site" +fi +shift +for ac_site_file +do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +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 + + +ac_aux_dir= +for ac_dir in conftools "$srcdir"/conftools; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in conftools \"$srcdir\"/conftools" >&5 +echo "$as_me: error: cannot find install-sh or install.sh in conftools \"$srcdir\"/conftools" >&2;} + { (exit 1); exit 1; }; } +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +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. + + + + +EXPAT_MAJOR_VERSION=1 +EXPAT_MINOR_VERSION=95 +EXPAT_EDIT=1 + +EXPAT_VERSION=$EXPAT_MAJOR_VERSION.$EXPAT_MINOR_VERSION.$EXPAT_EDIT +VERSION=$EXPAT_VERSION +PACKAGE=expat + + +LIBCURRENT=0 +LIBREVISION=1 +LIBAGE=0 + +ac_config_headers="$ac_config_headers config.h:config.hin" + + + +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then + enableval=$enable_shared; p=${PACKAGE-default} +case "$enableval" in +yes) enable_shared=yes ;; +no) enable_shared=no ;; +*) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac +else + enable_shared=yes +fi + +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then + enableval=$enable_static; p=${PACKAGE-default} +case "$enableval" in +yes) enable_static=yes ;; +no) enable_static=no ;; +*) + enable_static=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac +else + enable_static=yes +fi + +# Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval=$enable_fast_install; p=${PACKAGE-default} +case "$enableval" in +yes) enable_fast_install=yes ;; +no) enable_fast_install=no ;; +*) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac +else + enable_fast_install=yes +fi + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 +echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +{ echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6; } +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 +echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 +echo "$as_me: error: invalid value of canonical build" >&2;} + { (exit 1); exit 1; }; };; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6; } +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 +echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 +echo "$as_me: error: invalid value of canonical host" >&2;} + { (exit 1); exit 1; }; };; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +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 +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +# +# List of possible output files, starting from the most likely. +# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) +# only as a last resort. b.out is created by i960 compilers. +ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' +# +# The IRIX 6 linker writes into existing files which may not be +# executable, retaining their permissions. Remove them first so a +# subsequent execution test works. +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6; } +if test -z "$ac_file"; then + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6; } + +{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* 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); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6; } ;; + xno) + { echo "$as_me:$LINENO: result: unsupported" >&5 +echo "${ECHO_T}unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +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 + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$ac_cv_c_compiler_gnu" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { echo "$as_me:$LINENO: checking for ld used by GCC" >&5 +echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; } + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } +else + { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } +fi +if test "${ac_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + ac_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + ac_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$ac_cv_path_LD" +if test -n "$LD"; then + { echo "$as_me:$LINENO: result: $LD" >&5 +echo "${ECHO_T}$LD" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } +if test "${ac_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + ac_cv_prog_gnu_ld=yes +else + ac_cv_prog_gnu_ld=no +fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_gnu_ld" >&5 +echo "${ECHO_T}$ac_cv_prog_gnu_ld" >&6; } + + +{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } +if test "${ac_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$NM"; then + # Let the user override the test. + ac_cv_path_NM="$NM" +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -B" + break + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -p" + break + else + ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm +fi +fi + +NM="$ac_cv_path_NM" +{ echo "$as_me:$LINENO: result: $NM" >&5 +echo "${ECHO_T}$NM" >&6; } + +{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +else + { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6; } +fi + + + +case "$target" in +NONE) lt_target="$host" ;; +*) lt_target="$target" ;; +esac + +# Check for any special flags to pass to ltconfig. +libtool_flags="--cache-file=$cache_file" +test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" +test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" +test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" +test "$ac_cv_c_compiler_gnu" = yes && libtool_flags="$libtool_flags --with-gcc" +test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" +test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case "$lt_target" in +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 3093 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + lt_cv_cc_needs_belf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + lt_cv_cc_needs_belf=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; + + +esac + + +# Save cache, so that ltconfig can load it +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { echo "$as_me:$LINENO: updating cache $cache_file" >&5 +echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +# Actually configure libtool. ac_aux_dir is where install-sh is found. +CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ +LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ +LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \ +DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \ +${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ +$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \ +|| { { echo "$as_me:$LINENO: error: libtool configure failed" >&5 +echo "$as_me: error: libtool configure failed" >&2;} + { (exit 1); exit 1; }; } + +# Reload cache, that may have been modified by ltconfig +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + +# Redirect the config.log output again, so that the ltconfig log is not +# clobbered by the next message. +exec 5>>./config.log + + + + + + + + + +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 +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* 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); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6; } ;; + xno) + { echo "$as_me:$LINENO: result: unsupported" >&5 +echo "${ECHO_T}unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +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 + +# 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: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # 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 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. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done +IFS=$as_save_IFS + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + + +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 +{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +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 + + +{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } +if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Extract the first word of "grep ggrep" to use in msg output +if test -z "$GREP"; then +set dummy grep ggrep; ac_prog_name=$2 +if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_path_GREP_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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 + # 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 +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_GREP_found && break 3 + done +done + +done +IFS=$as_save_IFS + + +fi + +GREP="$ac_cv_path_GREP" +if test -z "$GREP"; then + { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } +fi + +else + ac_cv_path_GREP=$GREP +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +echo "${ECHO_T}$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + # Extract the first word of "egrep" to use in msg output +if test -z "$EGREP"; then +set dummy egrep; ac_prog_name=$2 +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_path_EGREP_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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 + # 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 +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_EGREP_found && break 3 + done +done + +done +IFS=$as_save_IFS + + +fi + +EGREP="$ac_cv_path_EGREP" +if test -z "$EGREP"; then + { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } +fi + +else + ac_cv_path_EGREP=$EGREP +fi + + + fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + +for ac_header in fcntl.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 +echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # See if sys/param.h defines the BYTE_ORDER macro. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \ + && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN) + bogus endian macros +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # It does; now see whether it defined to BIG_ENDIAN or not. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_bigendian=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_bigendian=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # It does not; compile a test program. +if test "$cross_compiling" = yes; then + # try to guess the endianness by grepping values into an object file + ac_cv_c_bigendian=unknown + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; +short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; +void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } +short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; +short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; +void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } +int +main () +{ + _ascii (); _ebcdic (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then + ac_cv_c_bigendian=yes +fi +if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi +fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_bigendian=no +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 +echo "${ECHO_T}$ac_cv_c_bigendian" >&6; } +case $ac_cv_c_bigendian in + yes) + +cat >>confdefs.h <<\_ACEOF +#define WORDS_BIGENDIAN 1 +_ACEOF + ;; + no) + ;; + *) + { { echo "$as_me:$LINENO: error: unknown endianness +presetting ac_cv_c_bigendian=no (or yes) will help" >&5 +echo "$as_me: error: unknown endianness +presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} + { (exit 1); exit 1; }; } ;; +esac + +{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } +if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_const=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_const=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +echo "${ECHO_T}$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\_ACEOF +#define const +_ACEOF + +fi + +{ echo "$as_me:$LINENO: checking for off_t" >&5 +echo $ECHO_N "checking for off_t... $ECHO_C" >&6; } +if test "${ac_cv_type_off_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +typedef off_t ac__type_new_; +int +main () +{ +if ((ac__type_new_ *) 0) + return 0; +if (sizeof (ac__type_new_)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_off_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_off_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 +echo "${ECHO_T}$ac_cv_type_off_t" >&6; } +if test $ac_cv_type_off_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define off_t long int +_ACEOF + +fi + +{ echo "$as_me:$LINENO: checking for size_t" >&5 +echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } +if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +typedef size_t ac__type_new_; +int +main () +{ +if ((ac__type_new_ *) 0) + return 0; +if (sizeof (ac__type_new_)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_size_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_size_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +echo "${ECHO_T}$ac_cv_type_size_t" >&6; } +if test $ac_cv_type_size_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + + + +{ echo "$as_me:$LINENO: checking for working memcmp" >&5 +echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6; } +if test "${ac_cv_func_memcmp_working+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_memcmp_working=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Some versions of memcmp are not 8-bit clean. */ + char c0 = '\100', c1 = '\200', c2 = '\201'; + if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) + return 1; + + /* The Next x86 OpenStep bug shows up only when comparing 16 bytes + or more and with at least one buffer not starting on a 4-byte boundary. + William Lewis provided this test program. */ + { + char foo[21]; + char bar[21]; + int i; + for (i = 0; i < 4; i++) + { + char *a = foo + i; + char *b = bar + i; + strcpy (a, "--------01111111"); + strcpy (b, "--------10000000"); + if (memcmp (a, b, 16) >= 0) + return 1; + } + return 0; + } + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_memcmp_working=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_func_memcmp_working=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5 +echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6; } +test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in + *" memcmp.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" + ;; +esac + + + + +for ac_header in stdlib.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_func in getpagesize +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +{ echo "$as_me:$LINENO: checking for working mmap" >&5 +echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; } +if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_mmap_fixed_mapped=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +/* malloc might have been renamed as rpl_malloc. */ +#undef malloc + +/* Thanks to Mike Haertel and Jim Avera for this test. + Here is a matrix of mmap possibilities: + mmap private not fixed + mmap private fixed at somewhere currently unmapped + mmap private fixed at somewhere already mapped + mmap shared not fixed + mmap shared fixed at somewhere currently unmapped + mmap shared fixed at somewhere already mapped + For private mappings, we should verify that changes cannot be read() + back from the file, nor mmap's back from the file at a different + address. (There have been systems where private was not correctly + implemented like the infamous i386 svr4.0, and systems where the + VM page cache was not coherent with the file system buffer cache + like early versions of FreeBSD and possibly contemporary NetBSD.) + For shared mappings, we should conversely verify that changes get + propagated back to all the places they're supposed to be. + + Grep wants private fixed already mapped. + The main things grep needs to know about mmap are: + * does it exist and is it safe to write into the mmap'd area + * how to use it (BSD variants) */ + +#include +#include + +#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H +char *malloc (); +#endif + +/* This mess was copied from the GNU getpagesize.h. */ +#ifndef HAVE_GETPAGESIZE +/* Assume that all systems that can run configure have sys/param.h. */ +# ifndef HAVE_SYS_PARAM_H +# define HAVE_SYS_PARAM_H 1 +# endif + +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# ifdef HAVE_SYS_PARAM_H +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +int +main () +{ + char *data, *data2, *data3; + int i, pagesize; + int fd; + + pagesize = getpagesize (); + + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) + return 1; + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) + return 1; + if (write (fd, data, pagesize) != pagesize) + return 1; + close (fd); + + /* Next, try to mmap the file at a fixed address which already has + something else allocated at it. If we can, also make sure that + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) + return 1; + data2 = (char *) malloc (2 * pagesize); + if (!data2) + return 1; + data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + return 1; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + return 1; + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on + some variants of i386 svr4.0.) */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) + return 1; + if (read (fd, data3, pagesize) != pagesize) + return 1; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + return 1; + close (fd); + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_mmap_fixed_mapped=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_func_mmap_fixed_mapped=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 +echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; } +if test $ac_cv_func_mmap_fixed_mapped = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_MMAP 1 +_ACEOF + +fi +rm -f conftest.mmap + + +if test -z "$HAVE_MMAP"; then +FILEMAP_OBJ=unixfilemap.o +else +FILEMAP_OBJ=readfilemap.o +fi + + + +for ac_func in memmove bcopy +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +ac_config_files="$ac_config_files Makefile lib/Makefile xmlwf/Makefile examples/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { echo "$as_me:$LINENO: updating cache $cache_file" >&5 +echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # 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). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... 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'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + 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 + +# 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'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.61, + with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2006 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + { echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + CONFIG_SHELL=$SHELL + export CONFIG_SHELL + exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.hin" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "xmlwf/Makefile") CONFIG_FILES="$CONFIG_FILES xmlwf/Makefile" ;; + "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; + + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# +# Set up the sed scripts for CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "$CONFIG_FILES"; then + +_ACEOF + + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +SHELL!$SHELL$ac_delim +PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim +PACKAGE_NAME!$PACKAGE_NAME$ac_delim +PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim +PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim +PACKAGE_STRING!$PACKAGE_STRING$ac_delim +PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim +exec_prefix!$exec_prefix$ac_delim +prefix!$prefix$ac_delim +program_transform_name!$program_transform_name$ac_delim +bindir!$bindir$ac_delim +sbindir!$sbindir$ac_delim +libexecdir!$libexecdir$ac_delim +datarootdir!$datarootdir$ac_delim +datadir!$datadir$ac_delim +sysconfdir!$sysconfdir$ac_delim +sharedstatedir!$sharedstatedir$ac_delim +localstatedir!$localstatedir$ac_delim +includedir!$includedir$ac_delim +oldincludedir!$oldincludedir$ac_delim +docdir!$docdir$ac_delim +infodir!$infodir$ac_delim +htmldir!$htmldir$ac_delim +dvidir!$dvidir$ac_delim +pdfdir!$pdfdir$ac_delim +psdir!$psdir$ac_delim +libdir!$libdir$ac_delim +localedir!$localedir$ac_delim +mandir!$mandir$ac_delim +DEFS!$DEFS$ac_delim +ECHO_C!$ECHO_C$ac_delim +ECHO_N!$ECHO_N$ac_delim +ECHO_T!$ECHO_T$ac_delim +LIBS!$LIBS$ac_delim +build_alias!$build_alias$ac_delim +host_alias!$host_alias$ac_delim +target_alias!$target_alias$ac_delim +build!$build$ac_delim +build_cpu!$build_cpu$ac_delim +build_vendor!$build_vendor$ac_delim +build_os!$build_os$ac_delim +host!$host$ac_delim +host_cpu!$host_cpu$ac_delim +host_vendor!$host_vendor$ac_delim +host_os!$host_os$ac_delim +RANLIB!$RANLIB$ac_delim +CC!$CC$ac_delim +CFLAGS!$CFLAGS$ac_delim +LDFLAGS!$LDFLAGS$ac_delim +CPPFLAGS!$CPPFLAGS$ac_delim +ac_ct_CC!$ac_ct_CC$ac_delim +EXEEXT!$EXEEXT$ac_delim +OBJEXT!$OBJEXT$ac_delim +LN_S!$LN_S$ac_delim +LIBTOOL!$LIBTOOL$ac_delim +PACKAGE!$PACKAGE$ac_delim +VERSION!$VERSION$ac_delim +LIBCURRENT!$LIBCURRENT$ac_delim +LIBREVISION!$LIBREVISION$ac_delim +LIBAGE!$LIBAGE$ac_delim +INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim +INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim +INSTALL_DATA!$INSTALL_DATA$ac_delim +CPP!$CPP$ac_delim +GREP!$GREP$ac_delim +EGREP!$EGREP$ac_delim +LIBOBJS!$LIBOBJS$ac_delim +FILEMAP_OBJ!$FILEMAP_OBJ$ac_delim +LTLIBOBJS!$LTLIBOBJS$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 69; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF +:end +s/|#_!!_#|//g +CEOF$ac_eof +_ACEOF + + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF +fi # test -n "$CONFIG_FILES" + + +for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 +echo "$as_me: error: Invalid tag $ac_tag." >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + ac_file_inputs="$ac_file_inputs $ac_f" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input="Generated from "`IFS=: + echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + fi + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin";; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +case `sed -n '/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' $ac_file_inputs` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s&@configure_input@&$configure_input&;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +$ac_datarootdir_hack +" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out"; rm -f "$tmp/out";; + *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; + esac + ;; + :H) + # + # CONFIG_HEADER + # +_ACEOF + +# Transform confdefs.h into a sed script `conftest.defines', that +# substitutes the proper values into config.h.in to produce config.h. +rm -f conftest.defines conftest.tail +# First, append a space to every undef/define line, to ease matching. +echo 's/$/ /' >conftest.defines +# Then, protect against being on the right side of a sed subst, or in +# an unquoted here document, in config.status. If some macros were +# called several times there might be several #defines for the same +# symbol, which is useless. But do not sort them, since the last +# AC_DEFINE must be honored. +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where +# NAME is the cpp macro being defined, VALUE is the value it is being given. +# PARAMS is the parameter list in the macro definition--in most cases, it's +# just an empty string. +ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' +ac_dB='\\)[ (].*,\\1define\\2' +ac_dC=' ' +ac_dD=' ,' + +uniq confdefs.h | + sed -n ' + t rset + :rset + s/^[ ]*#[ ]*define[ ][ ]*// + t ok + d + :ok + s/[\\&,]/\\&/g + s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p + s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p + ' >>conftest.defines + +# Remove the space that was appended to ease matching. +# Then replace #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +# (The regexp can be short, since the line contains either #define or #undef.) +echo 's/ $// +s,^[ #]*u.*,/* & */,' >>conftest.defines + +# Break up conftest.defines: +ac_max_sed_lines=50 + +# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" +# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" +# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" +# et cetera. +ac_in='$ac_file_inputs' +ac_out='"$tmp/out1"' +ac_nxt='"$tmp/out2"' + +while : +do + # Write a here document: + cat >>$CONFIG_STATUS <<_ACEOF + # First, check the format of the line: + cat >"\$tmp/defines.sed" <<\\CEOF +/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def +/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def +b +:def +_ACEOF + sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS + ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in + sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail + grep . conftest.tail >/dev/null || break + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines conftest.tail + +echo "ac_result=$ac_in" >>$CONFIG_STATUS +cat >>$CONFIG_STATUS <<\_ACEOF + if test x"$ac_file" != x-; then + echo "/* $configure_input */" >"$tmp/config.h" + cat "$ac_result" >>"$tmp/config.h" + if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f $ac_file + mv "$tmp/config.h" $ac_file + fi + else + echo "/* $configure_input */" + cat "$ac_result" + fi + rm -f "$tmp/out12" + ;; + + + esac + +done # for ac_tag + + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + diff --git a/Build/source/extra/expat/configure.in b/Build/source/extra/expat/configure.in new file mode 100644 index 00000000000..5b3e29a8d5d --- /dev/null +++ b/Build/source/extra/expat/configure.in @@ -0,0 +1,87 @@ +dnl configuration script for expat +dnl Process this file with autoconf to produce a configure script. +dnl +dnl Copyright 2000 Clark Cooper +dnl +dnl This file is part of EXPAT. +dnl +dnl EXPAT is free software; you can redistribute it and/or modify it +dnl under the terms of the License (based on the MIT/X license) contained +dnl in the file COPYING that comes with this distribution. +dnl + +AC_INIT(Makefile.in) +AC_CONFIG_AUX_DIR(conftools) + +dnl +dnl Follow the GNU/Linux convention of odd number minor version for +dnl beta/development releases and even number minor version for stable +dnl releases. Edit is bumped with each release and set to 0 with +dnl change to major or minor version. +dnl + +EXPAT_MAJOR_VERSION=1 +EXPAT_MINOR_VERSION=95 +EXPAT_EDIT=1 + +EXPAT_VERSION=$EXPAT_MAJOR_VERSION.$EXPAT_MINOR_VERSION.$EXPAT_EDIT +VERSION=$EXPAT_VERSION +PACKAGE=expat + +dnl +dnl Increment LIBREVISION if source code has changed at all +dnl +dnl If the API has changed, increment LIBCURRENT and set LIBREVISION to 0 +dnl +dnl If the API changes compatibly (i.e. simply adding a new function +dnl without changing or removing earlier interfaces), then increment LIBAGE. +dnl +dnl If the API changes incompatibly set LIBAGE back to 0 +dnl + +LIBCURRENT=0 +LIBREVISION=1 +LIBAGE=0 + +AC_CONFIG_HEADER(config.h:config.hin) + +AC_LIBTOOL_WIN32_DLL +AC_PROG_LIBTOOL + +AC_SUBST(PACKAGE) +AC_SUBST(VERSION) + +AC_SUBST(LIBCURRENT) +AC_SUBST(LIBREVISION) +AC_SUBST(LIBAGE) + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_INSTALL + +dnl Checks for libraries. + +dnl Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS(fcntl.h unistd.h) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_BIGENDIAN +AC_C_CONST +AC_TYPE_OFF_T +AC_TYPE_SIZE_T + +dnl Checks for library functions. + +AC_FUNC_MEMCMP +AC_FUNC_MMAP +AC_SUBST(FILEMAP_OBJ) +if test -z "$HAVE_MMAP"; then +FILEMAP_OBJ=unixfilemap.o +else +FILEMAP_OBJ=readfilemap.o +fi + +AC_CHECK_FUNCS(memmove bcopy) + +AC_OUTPUT(Makefile lib/Makefile xmlwf/Makefile examples/Makefile) diff --git a/Build/source/extra/expat/conftools/config.guess b/Build/source/extra/expat/conftools/config.guess new file mode 100644 index 00000000000..e792aac6080 --- /dev/null +++ b/Build/source/extra/expat/conftools/config.guess @@ -0,0 +1,1494 @@ +#! /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 +# Free Software Foundation, Inc. + +timestamp='2009-09-18' + +# 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 +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# 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. +# +# 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. +# +# 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 + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +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 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." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +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 + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd | genuineintel) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`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 + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + 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} + 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 + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + 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 ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + 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 + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + 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 < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/Build/source/extra/expat/conftools/config.sub b/Build/source/extra/expat/conftools/config.sub new file mode 100644 index 00000000000..5ecc18b6ada --- /dev/null +++ b/Build/source/extra/expat/conftools/config.sub @@ -0,0 +1,1700 @@ +#! /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 +# Free Software Foundation, Inc. + +timestamp='2009-10-07' + +# 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 +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# 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. + + +# Please send patches to . Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +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 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." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -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) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | 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 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -kopensolaris* \ + | -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* \ + | -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* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/Build/source/extra/expat/conftools/install-sh b/Build/source/extra/expat/conftools/install-sh new file mode 100644 index 00000000000..6781b987bdb --- /dev/null +++ b/Build/source/extra/expat/conftools/install-sh @@ -0,0 +1,520 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2009-04-28.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# 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 +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + 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. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# 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/Build/source/extra/expat/conftools/ltconfig b/Build/source/extra/expat/conftools/ltconfig new file mode 100644 index 00000000000..c14d83c1697 --- /dev/null +++ b/Build/source/extra/expat/conftools/ltconfig @@ -0,0 +1,3114 @@ +#! /bin/sh + +# ltconfig - Create a system-specific libtool. +# Copyright (C) 1996-1999 Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 1996 +# +# 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 +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# 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. + +# A lot of this script is taken from autoconf-2.10. + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} +echo=echo +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec "$SHELL" "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null`} + case X$UNAME in + *-DOS) PATH_SEPARATOR=';' ;; + *) PATH_SEPARATOR=':' ;; + esac +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string="`eval $cmd`") 2>/dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" != 'X\t' || + test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH /usr/ucb; do + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running ltconfig again with it. + ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}" + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + echo='printf "%s\n"' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + # Cool, printf works + : + elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' && + test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL" + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL $0 --fallback-echo" + elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' && + test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + echo="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# The name of this program. +progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'` + +# Constants: +PROGRAM=ltconfig +PACKAGE=libtool +VERSION=1.3.5 +TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)" +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +rm="rm -f" + +help="Try \`$progname --help' for more information." + +# Global variables: +default_ofile=libtool +can_build_shared=yes +enable_shared=yes +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +enable_static=yes +enable_fast_install=yes +enable_dlopen=unknown +enable_win32_dll=no +ltmain= +silent= +srcdir= +ac_config_guess= +ac_config_sub= +host= +nonopt= +ofile="$default_ofile" +verify_host=yes +with_gcc=no +with_gnu_ld=no +need_locks=yes +ac_ext=c +objext=o +libext=a +exeext= +cache_file= + +old_AR="$AR" +old_CC="$CC" +old_CFLAGS="$CFLAGS" +old_CPPFLAGS="$CPPFLAGS" +old_LDFLAGS="$LDFLAGS" +old_LD="$LD" +old_LN_S="$LN_S" +old_LIBS="$LIBS" +old_NM="$NM" +old_RANLIB="$RANLIB" +old_DLLTOOL="$DLLTOOL" +old_OBJDUMP="$OBJDUMP" +old_AS="$AS" + +# Parse the command line options. +args= +prev= +for option +do + case "$option" in + -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + eval "$prev=\$option" + prev= + continue + fi + + case "$option" in + --help) cat <&2 + echo "$help" 1>&2 + exit 1 + ;; + + *) + if test -z "$ltmain"; then + ltmain="$option" + elif test -z "$host"; then +# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1 +# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then +# echo "$progname: warning \`$option' is not a valid host type" 1>&2 +# fi + host="$option" + else + echo "$progname: too many arguments" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac +done + +if test -z "$ltmain"; then + echo "$progname: you must specify a LTMAIN file" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +if test ! -f "$ltmain"; then + echo "$progname: \`$ltmain' does not exist" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +# Quote any args containing shell metacharacters. +ltconfig_args= +for arg +do + case "$arg" in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ltconfig_args="$ltconfig_args '$arg'" ;; + *) ltconfig_args="$ltconfig_args $arg" ;; + esac +done + +# A relevant subset of AC_INIT. + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 5 compiler messages saved in config.log +# 6 checking for... messages and results +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>>./config.log + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi +if test "X${LANG+set}" = Xset; then LANG=C; export LANG; fi + +if test -n "$cache_file" && test -r "$cache_file"; then + echo "loading cache $cache_file within ltconfig" + . $cache_file +fi + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + +if test -z "$srcdir"; then + # Assume the source directory is the same one as the path to LTMAIN. + srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'` + test "$srcdir" = "$ltmain" && srcdir=. +fi + +trap "$rm conftest*; exit 1" 1 2 15 +if test "$verify_host" = yes; then + # Check for config.guess and config.sub. + ac_aux_dir= + for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/config.guess; then + ac_aux_dir=$ac_dir + break + fi + done + if test -z "$ac_aux_dir"; then + echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2 + echo "$help" 1>&2 + exit 1 + fi + ac_config_guess=$ac_aux_dir/config.guess + ac_config_sub=$ac_aux_dir/config.sub + + # Make sure we can run config.sub. + if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then : + else + echo "$progname: cannot run $ac_config_sub" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + echo $ac_n "checking host system type""... $ac_c" 1>&6 + + host_alias=$host + case "$host_alias" in + "") + if host_alias=`$SHELL $ac_config_guess`; then : + else + echo "$progname: cannot guess host type; you must specify one" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac + host=`$SHELL $ac_config_sub $host_alias` + echo "$ac_t$host" 1>&6 + + # Make sure the host verified. + test -z "$host" && exit 1 + +elif test -z "$host"; then + echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2 + echo "$help" 1>&2 + exit 1 +else + host_alias=$host +fi + +# Transform linux* to *-*-linux-gnu*, to support old configure scripts. +case "$host_os" in +linux-gnu*) ;; +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` +esac + +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +case "$host_os" in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR cru $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +# Set a sane default for `AR'. +test -z "$AR" && AR=ar + +# Set a sane default for `OBJDUMP'. +test -z "$OBJDUMP" && OBJDUMP=objdump + +# If RANLIB is not set, then run the test. +if test "${RANLIB+set}" != "set"; then + result=no + + echo $ac_n "checking for ranlib... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then + RANLIB="ranlib" + result="ranlib" + break + fi + done + IFS="$save_ifs" + + echo "$ac_t$result" 1>&6 +fi + +if test -n "$RANLIB"; then + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" +fi + +# Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin. +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$AS" && AS=as + +# Check to see if we are using GCC. +if test "$with_gcc" != yes || test -z "$CC"; then + # If CC is not set, then try to find GCC or a usable CC. + if test -z "$CC"; then + echo $ac_n "checking for gcc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then + CC="gcc" + break + fi + done + IFS="$save_ifs" + + if test -n "$CC"; then + echo "$ac_t$CC" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + fi + + # Not "gcc", so try "cc", rejecting "/usr/ucb/cc". + if test -z "$CC"; then + echo $ac_n "checking for cc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + cc_rejected=no + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/cc || test -f $dir/cc$ac_exeext; then + if test "$dir/cc" = "/usr/ucb/cc"; then + cc_rejected=yes + continue + fi + CC="cc" + break + fi + done + IFS="$save_ifs" + if test $cc_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same name, so the bogon will be chosen + # first if we set CC to just the name; use the full file name. + shift + set dummy "$dir/cc" "$@" + shift + CC="$@" + fi + fi + + if test -n "$CC"; then + echo "$ac_t$CC" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + + if test -z "$CC"; then + echo "$progname: error: no acceptable cc found in \$PATH" 1>&2 + exit 1 + fi + fi + + # Now see if the compiler is really GCC. + with_gcc=no + echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6 + echo "$progname:581: checking whether we are using GNU C" >&5 + + $rm conftest.c + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + with_gcc=yes + fi + $rm conftest.c + echo "$ac_t$with_gcc" 1>&6 +fi + +# Allow CC to be a program name with arguments. +set dummy $CC +compiler="$2" + +echo $ac_n "checking for object suffix... $ac_c" 1>&6 +$rm conftest* +echo 'int i = 1;' > conftest.c +echo "$progname:603: checking for object suffix" >& 5 +if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then + # Append any warnings to the config.log. + cat conftest.err 1>&5 + + for ac_file in conftest.*; do + case $ac_file in + *.c) ;; + *) objext=`echo $ac_file | sed -e s/conftest.//` ;; + esac + done +else + cat conftest.err 1>&5 + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 +fi +$rm conftest* +echo "$ac_t$objext" 1>&6 + +echo $ac_n "checking for executable suffix... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_exeext="no" + $rm conftest* + echo 'main () { return 0; }' > conftest.c + echo "$progname:629: checking for executable suffix" >& 5 + if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then + # Append any warnings to the config.log. + cat conftest.err 1>&5 + + for ac_file in conftest.*; do + case $ac_file in + *.c | *.err | *.$objext ) ;; + *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;; + esac + done + else + cat conftest.err 1>&5 + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 + fi + $rm conftest* +fi +if test "X$ac_cv_exeext" = Xno; then + exeext="" +else + exeext="$ac_cv_exeext" +fi +echo "$ac_t$ac_cv_exeext" 1>&6 + +echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6 +pic_flag= +special_shlib_compile_flags= +wl= +link_static_flag= +no_builtin_flag= + +if test "$with_gcc" = yes; then + wl='-Wl,' + link_static_flag='-static' + + case "$host_os" in + beos* | irix5* | irix6* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + aix*) + # Below there is a dirty hack to force normal static linking with -ldl + # The problem is because libdl dynamically linked with both libc and + # libC (AIX C++ library), which obviously doesn't included in libraries + # list by gcc. This cause undefined symbols with -static flags. + # This hack allows C programs to be linked with "-static -ldl", but + # we not sure about C++ programs. + link_static_flag="$link_static_flag ${wl}-lC" + ;; + cygwin* | mingw* | os2*) + # We can build DLLs from non-PIC. + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + pic_flag='-m68020 -resident32 -malways-restore-a4' + ;; + sysv4*MP*) + if test -d /usr/nec; then + pic_flag=-Kconform_pic + fi + ;; + *) + pic_flag='-fPIC' + ;; + esac +else + # PORTME Check for PIC flags for the system compiler. + case "$host_os" in + aix3* | aix4*) + # All AIX code is PIC. + link_static_flag='-bnso -bI:/lib/syscalls.exp' + ;; + + hpux9* | hpux10* | hpux11*) + # Is there a better link_static_flag that works with the bundled CC? + wl='-Wl,' + link_static_flag="${wl}-a ${wl}archive" + pic_flag='+Z' + ;; + + irix5* | irix6*) + wl='-Wl,' + link_static_flag='-non_shared' + # PIC (with -KPIC) is the default. + ;; + + cygwin* | mingw* | os2*) + # We can build DLLs from non-PIC. + ;; + + osf3* | osf4* | osf5*) + # All OSF/1 code is PIC. + wl='-Wl,' + link_static_flag='-non_shared' + ;; + + sco3.2v5*) + pic_flag='-Kpic' + link_static_flag='-dn' + special_shlib_compile_flags='-belf' + ;; + + solaris*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + sunos4*) + pic_flag='-PIC' + link_static_flag='-Bstatic' + wl='-Qoption ld ' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + uts4*) + pic_flag='-pic' + link_static_flag='-Bstatic' + ;; + sysv4*MP*) + if test -d /usr/nec ;then + pic_flag='-Kconform_pic' + link_static_flag='-Bstatic' + fi + ;; + *) + can_build_shared=no + ;; + esac +fi + +if test -n "$pic_flag"; then + echo "$ac_t$pic_flag" 1>&6 + + # Check to make sure the pic_flag actually works. + echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6 + $rm conftest* + echo "int some_variable = 0;" > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $pic_flag -DPIC" + echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5 + if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then + # Append any warnings to the config.log. + cat conftest.err 1>&5 + + case "$host_os" in + hpux9* | hpux10* | hpux11*) + # On HP-UX, both CC and GCC only warn that PIC is supported... then they + # create non-PIC objects. So, if there were any warnings, we assume that + # PIC is not supported. + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + can_build_shared=no + pic_flag= + else + echo "$ac_t"yes 1>&6 + pic_flag=" $pic_flag" + fi + ;; + *) + echo "$ac_t"yes 1>&6 + pic_flag=" $pic_flag" + ;; + esac + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + can_build_shared=no + pic_flag= + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* +else + echo "$ac_t"none 1>&6 +fi + +# Check to see if options -o and -c are simultaneously supported by compiler +echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6 +$rm -r conftest 2>/dev/null +mkdir conftest +cd conftest +$rm conftest* +echo "int some_variable = 0;" > conftest.c +mkdir out +# According to Tom Tromey, Ian Lance Taylor reported there are C compilers +# that will create temporary files in the current directory regardless of +# the output directory. Thus, making CWD read-only will cause this test +# to fail, enabling locking or at least warning the user not to do parallel +# builds. +chmod -w . +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -o out/conftest2.o" +echo "$progname:829: checking if $compiler supports -c -o file.o" >&5 +if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then + + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s out/conftest.err; then + echo "$ac_t"no 1>&6 + compiler_c_o=no + else + echo "$ac_t"yes 1>&6 + compiler_c_o=yes + fi +else + # Append any errors to the config.log. + cat out/conftest.err 1>&5 + compiler_c_o=no + echo "$ac_t"no 1>&6 +fi +CFLAGS="$save_CFLAGS" +chmod u+w . +$rm conftest* out/* +rmdir out +cd .. +rmdir conftest +$rm -r conftest 2>/dev/null + +if test x"$compiler_c_o" = x"yes"; then + # Check to see if we can write to a .lo + echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6 + $rm conftest* + echo "int some_variable = 0;" > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -c -o conftest.lo" + echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5 +if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then + + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + compiler_o_lo=no + else + echo "$ac_t"yes 1>&6 + compiler_o_lo=yes + fi + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + compiler_o_lo=no + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* +else + compiler_o_lo=no +fi + +# Check to see if we can do hard links to lock some files if needed +hard_links="nottested" +if test "$compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$ac_t$hard_links" 1>&6 + $rm conftest* + if test "$hard_links" = no; then + echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2 + need_locks=warn + fi +else + need_locks=no +fi + +if test "$with_gcc" = yes; then + # Check to see if options -fno-rtti -fno-exceptions are supported by compiler + echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6 + $rm conftest* + echo "int some_variable = 0;" > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c" + echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 + if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then + + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + compiler_rtti_exceptions=no + else + echo "$ac_t"yes 1>&6 + compiler_rtti_exceptions=yes + fi + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + compiler_rtti_exceptions=no + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* + + if test "$compiler_rtti_exceptions" = "yes"; then + no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' + else + no_builtin_flag=' -fno-builtin' + fi + +fi + +# Check for any special shared library compilation flags. +if test -n "$special_shlib_compile_flags"; then + echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2 + if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then : + else + echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2 + can_build_shared=no + fi +fi + +echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6 +$rm conftest* +echo 'main(){return(0);}' > conftest.c +save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS $link_static_flag" +echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5 +if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + echo "$ac_t$link_static_flag" 1>&6 +else + echo "$ac_t"none 1>&6 + link_static_flag= +fi +LDFLAGS="$save_LDFLAGS" +$rm conftest* + +if test -z "$LN_S"; then + # Check to see if we can use ln -s, or we need hard links. + echo $ac_n "checking whether ln -s works... $ac_c" 1>&6 + $rm conftest.dat + if ln -s X conftest.dat 2>/dev/null; then + $rm conftest.dat + LN_S="ln -s" + else + LN_S=ln + fi + if test "$LN_S" = "ln -s"; then + echo "$ac_t"yes 1>&6 + else + echo "$ac_t"no 1>&6 + fi +fi + +# Make sure LD is an absolute path. +if test -z "$LD"; then + ac_prog=ld + if test "$with_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6 + echo "$progname:991: checking for ld used by GCC" >&5 + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we are not using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac + elif test "$with_gnu_ld" = yes; then + echo $ac_n "checking for GNU ld... $ac_c" 1>&6 + echo "$progname:1015: checking for GNU ld" >&5 + else + echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 + echo "$progname:1018: checking for non-GNU ld" >&5 + fi + + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" + fi + + if test -n "$LD"; then + echo "$ac_t$LD" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + + if test -z "$LD"; then + echo "$progname: error: no acceptable ld found in \$PATH" 1>&2 + exit 1 + fi +fi + +# Check to see if it really is or is not GNU ld. +echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6 +# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + with_gnu_ld=yes +else + with_gnu_ld=no +fi +echo "$ac_t$with_gnu_ld" 1>&6 + +# See if the linker supports building shared libraries. +echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6 + +allow_undefined_flag= +no_undefined_flag= +need_lib_prefix=unknown +need_version=unknown +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +archive_cmds= +archive_expsym_cmds= +old_archive_from_new_cmds= +export_dynamic_flag_spec= +whole_archive_flag_spec= +thread_safe_flag_spec= +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no +hardcode_shlibpath_var=unsupported +runpath_var= +always_export_symbols=no +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' +# include_expsyms should be a list of space-separated symbols to be *always* +# included in the symbol list +include_expsyms= +# exclude_expsyms can be an egrep regular expression of symbols to exclude +# it will be wrapped by ` (' and `)$', so one must not match beginning or +# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', +# as well as any symbol that contains `d'. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_" +# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out +# platforms (ab)use it in PIC code, but their linkers get confused if +# the symbol is explicitly referenced. Since portable code cannot +# rely on this symbol name, it's probably fine to never include it in +# preloaded symbol tables. + +case "$host_os" in +cygwin* | mingw*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$with_gcc" != yes; then + with_gnu_ld=no + fi + ;; + +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case "$host_os" in + aix3* | aix4*) + # On AIX, the GNU linker is very broken + ld_shlibs=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + ;; + + amigaos*) + archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=yes + + # Extract the symbol export list from an `--export-all' def file, + # then regenerate the def file from the symbol export list, so that + # the compiled dll only exports the symbol export list. + # Be careful not to strip the DATA tag left by newer dlltools. + export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~ + test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~ + $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def $objdir/$soname-ltdll.$objext $libobjs $convenience~ + sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $objdir/$soname-def > $export_symbols' + + # If DATA tags from a recent dlltool are present, honour them! + archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~ + _lt_hint=1; + cat $export_symbols | while read symbol; do + set dummy \$symbol; + case \$# in + 2) echo " \$2 @ \$_lt_hint ; " >> $objdir/$soname-def;; + *) echo " \$2 @ \$_lt_hint \$3 ; " >> $objdir/$soname-def;; + esac; + _lt_hint=`expr 1 + \$_lt_hint`; + done~ + test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~ + test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~ + $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~ + $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~ + $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts' + + old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a' + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib' + # can we support soname and/or expsyms with a.out? -oliva + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + case $host_os in + cygwin* | mingw*) + # dlltool doesn't understand --whole-archive et. al. + whole_archive_flag_spec= + ;; + *) + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + ;; + esac + fi +else + # PORTME fill in a description of your system's linker (not GNU ld) + case "$host_os" in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$with_gcc" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4*) + hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib' + hardcode_libdir_separator=':' + if test "$with_gcc" = yes; then + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + shared_flag='-shared' + else + shared_flag='${wl}-bM:SRE' + hardcode_direct=yes + fi + allow_undefined_flag=' ${wl}-berok' + archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}' + archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}' + case "$host_os" in aix4.[01]|aix4.[01].*) + # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on + always_export_symbols=yes ;; + esac + ;; + + amigaos*) + archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + cygwin* | mingw*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs' + fix_srcfile_path='`cygpath -w $srcfile`' + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9* | hpux10* | hpux11*) + case "$host_os" in + hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;; + *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;; + esac + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_minus_L=yes # Not in the search PATH, but as the default + # location of the library. + export_dynamic_flag_spec='${wl}-E' + ;; + + irix5* | irix6*) + if test "$with_gcc" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts' # ELF + fi + hardcode_libdir_flag_spec='${wl}-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + openbsd*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def' + ;; + + osf3*) + if test "$with_gcc" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # As osf3* with the addition of the -msym flag + if test "$with_gcc" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + rhapsody*) + archive_cmds='$CC -bundle -undefined suppress -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flags_spec='-L$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + sco3.2v5*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case "$host_os" in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $linkopts' + else + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv5*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp' + hardcode_libdir_flag_spec= + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts' + hardcode_direct=yes + hardcode_minus_L=no + hardcode_shlibpath_var=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + unixware7*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac +fi +echo "$ac_t$ld_shlibs" 1>&6 +test "$ld_shlibs" = no && can_build_shared=no + +if test -z "$NM"; then + echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6 + case "$NM" in + [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path. + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + NM="$ac_dir/nm -B" + break + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + NM="$ac_dir/nm -p" + break + else + NM=${NM="$ac_dir/nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + fi + fi + done + IFS="$ac_save_ifs" + test -z "$NM" && NM=nm + ;; + esac + echo "$ac_t$NM" 1>&6 +fi + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6 + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" + +# Define system-specific variables. +case "$host_os" in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw*) + symcode='[ABCDGISTW]' + ;; +hpux*) # Its linker distinguishes data from code symbols + global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'" + ;; +irix*) + symcode='[BCDEGRST]' + ;; +solaris*) + symcode='[BDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then + symcode='[ABCDGISTW]' +fi + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode\)[ ][ ]*\($ac_symprfx\)$sympat$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + $rm conftest* + cat > conftest.c <&5 + if { (eval echo $progname:1654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then + # Now try to grab the symbols. + nlist=conftest.nm + if { echo "$progname:1657: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then + + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if egrep ' nm_test_var$' "$nlist" >/dev/null; then + if egrep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.c +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c' + + cat <> conftest.c +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{ +EOF + sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c + cat <<\EOF >> conftest.c + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$objext conftstm.$objext + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="conftstm.$objext" + CFLAGS="$CFLAGS$no_builtin_flag" + if { (eval echo $progname:1709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + pipe_works=yes + else + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 + fi + LIBS="$save_LIBS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 + fi + $rm conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + global_symbol_pipe= + fi +done +if test "$pipe_works" = yes; then + echo "${ac_t}ok" 1>&6 +else + echo "${ac_t}failed" 1>&6 +fi + +if test -z "$global_symbol_pipe"; then + global_symbol_to_cdecl= +fi + +# Check hardcoding attributes. +echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var"; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$hardcode_shlibpath_var" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +echo "$ac_t$hardcode_action" 1>&6 + + +reload_flag= +reload_cmds='$LD$reload_flag -o $output$reload_objs' +echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6 +# PORTME Some linkers may need a different reload flag. +reload_flag='-r' +echo "$ac_t$reload_flag" 1>&6 +test -n "$reload_flag" && reload_flag=" $reload_flag" + +# PORTME Fill in your ld.so characteristics +library_names_spec= +libname_spec='lib$name' +soname_spec= +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +file_magic_cmd= +file_magic_test_file= +deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [regex]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given egrep regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. +echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6 +case "$host_os" in +aix3*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}.so$major' + ;; + +aix4*) + version_type=linux + # AIX has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + # We preserve .a as extension for shared libraries though AIX4.2 + # and later linker supports .so + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a' + shlibpath_var=LIBPATH + deplibs_check_method=pass_all + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}.so' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + deplibs_check_method=pass_all + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + file_magic_cmd=/usr/bin/file + file_magic_test_file=/shlib/libc.so + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + export_dynamic_flag_spec=-rdynamic + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw*) + version_type=windows + need_version=no + need_lib_prefix=no + if test "$with_gcc" = yes; then + library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a' + else + library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib' + fi + dynamic_linker='Win32 ld.exe' + deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + file_magic_cmd='${OBJDUMP} -f' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case "$version_type" in + freebsd-elf*) + deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /usr/lib/libc.so*` + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + deplibs_check_method=unknown + library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case "$host_os" in + freebsd2* | freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + dynamic_linker="$host_os dld.sl" + version_type=sunos + need_lib_prefix=no + need_version=no + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' + soname_spec='${libname}${release}.sl$major' + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + case "$host_os" in + hpux10.20*) + # TODO: Does this work for hpux-11 too? + deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + file_magic_cmd=/usr/bin/file + file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +irix5* | irix6*) + version_type=irix + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}.so.$major' + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so' + case "$host_os" in + irix5*) + libsuff= shlibsuff= + # this will be overridden with pass_all, but let us keep it just in case + deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" + ;; + *) + case "$LD" in # libtool.m4 will add one of these switches to LD + *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /lib${libsuff}/libc.so*` + deplibs_check_method='pass_all' + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + deplibs_check_method=pass_all + + if test -f /lib/ld.so.1; then + dynamic_linker='GNU ld.so' + else + # Only the GNU ld.so supports shared libraries on MkLinux. + case "$host_cpu" in + powerpc*) dynamic_linker=no ;; + *) dynamic_linker='Linux ld.so' ;; + esac + fi + ;; + +netbsd*) + version_type=sunos + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' + soname_spec='${libname}${release}.so$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + ;; + +openbsd*) + version_type=sunos + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + need_version=no + fi + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +os2*) + libname_spec='$name' + need_lib_prefix=no + library_names_spec='$libname.dll $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_version=no + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + shlibpath_var=LD_LIBRARY_PATH + # this will be overridden with pass_all, but let us keep it just in case + deplibs_check_method='file_magic COFF format alpha shared library' + file_magic_cmd=/usr/bin/file + file_magic_test_file=/shlib/libc.so + deplibs_check_method='pass_all' + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rhapsody*) + version_type=sunos + library_names_spec='${libname}.so' + soname_spec='${libname}.so' + shlibpath_var=DYLD_LIBRARY_PATH + deplibs_check_method=pass_all + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib" + file_magic_cmd=/usr/bin/file + file_magic_test_file=/lib/libc.so + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + case "$host_vendor" in + sequent) + file_magic_cmd='/bin/file' + deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + ncr) + deplibs_check_method='pass_all' + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + esac + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' + soname_spec='$libname.so.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$ac_t$dynamic_linker" 1>&6 +test "$dynamic_linker" = no && can_build_shared=no + +# Report the final consequences. +echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6 + +# Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in +# configure.in, otherwise build static only libraries. +case "$host_os" in +cygwin* | mingw* | os2*) + if test x$can_build_shared = xyes; then + test x$enable_win32_dll = xno && can_build_shared=no + echo "checking if package supports dlls... $can_build_shared" 1>&6 + fi +;; +esac + +if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then + case "$deplibs_check_method" in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + egrep "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac +fi + +echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4*) + test "$enable_shared" = yes && enable_static=no + ;; +esac + +echo "$ac_t$enable_shared" 1>&6 + +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes + +echo "checking whether to build static libraries... $enable_static" 1>&6 + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +echo $ac_n "checking for objdir... $ac_c" 1>&6 +rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + objdir=_libs +fi +rmdir .libs 2>/dev/null +echo "$ac_t$objdir" 1>&6 + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else +if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then + lt_cv_dlopen=no lt_cv_dlopen_libs= +echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 +echo "$progname:2248: checking for dlopen in -ldl" >&5 +ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dlopen""... $ac_c" 1>&6 +echo "$progname:2288: checking for dlopen" >&5 +if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +dlopen(); +#endif + +; return 0; } +EOF +if { (eval echo $progname:2318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_dlopen=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_dlopen=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dlopen" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6 +echo "$progname:2335: checking for dld_link in -ldld" >&5 +ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldld $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for shl_load""... $ac_c" 1>&6 +echo "$progname:2375: checking for shl_load" >&5 +if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +shl_load(); +#endif + +; return 0; } +EOF +if { (eval echo $progname:2405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_shl_load=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_shl_load=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="shl_load" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 +echo "$progname:2423: checking for shl_load in -ldld" >&5 +ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldld $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + echo "$ac_t""no" 1>&6 +fi + + +fi + + +fi + + +fi + + +fi + +fi + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + fi + + case "$lt_cv_dlopen" in + dlopen) +for ac_hdr in dlfcn.h; do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "$progname:2488: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int fnord = 0; +EOF +ac_try="$ac_compile >/dev/null 2>conftest.out" +{ (eval echo $progname:2498: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi +done + + if test "x$ac_cv_header_dlfcn_h" = xyes; then + CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + fi + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6 +echo "$progname:2526: checking whether a program can dlopen itself" >&5 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + lt_cv_dlopen_self=cross + else + cat > conftest.c < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LTDL_GLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LTDL_GLOBAL DL_GLOBAL +# else +# define LTDL_GLOBAL 0 +# endif +#endif + +/* We may have to define LTDL_LAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LTDL_LAZY_OR_NOW +# ifdef RTLD_LAZY +# define LTDL_LAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LTDL_LAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LTDL_LAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LTDL_LAZY_OR_NOW DL_NOW +# else +# define LTDL_LAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +fnord() { int i=42;} +main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); + if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); + if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } + +EOF +if { (eval echo $progname:2580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + lt_cv_dlopen_self=yes +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + lt_cv_dlopen_self=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$lt_cv_dlopen_self" 1>&6 + + if test "$lt_cv_dlopen_self" = yes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6 +echo "$progname:2599: checking whether a statically linked program can dlopen itself" >&5 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + lt_cv_dlopen_self_static=cross + else + cat > conftest.c < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LTDL_GLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LTDL_GLOBAL DL_GLOBAL +# else +# define LTDL_GLOBAL 0 +# endif +#endif + +/* We may have to define LTDL_LAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LTDL_LAZY_OR_NOW +# ifdef RTLD_LAZY +# define LTDL_LAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LTDL_LAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LTDL_LAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LTDL_LAZY_OR_NOW DL_NOW +# else +# define LTDL_LAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +fnord() { int i=42;} +main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); + if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); + if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } + +EOF +if { (eval echo $progname:2653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + lt_cv_dlopen_self_static=yes +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + lt_cv_dlopen_self_static=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6 +fi + ;; + esac + + case "$lt_cv_dlopen_self" in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case "$lt_cv_dlopen_self_static" in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + +# Copy echo and quote the copy, instead of the original, because it is +# used later. +ltecho="$echo" +if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then + ltecho="$CONFIG_SHELL \$0 --fallback-echo" +fi +LTSHELL="$SHELL" + +LTCONFIG_VERSION="$VERSION" + +# Only quote variables if we're using ltmain.sh. +case "$ltmain" in +*.sh) + # Now quote all the things that may contain metacharacters. + for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \ + old_LD old_LDFLAGS old_LIBS \ + old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \ + AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \ + reload_flag reload_cmds wl \ + pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ + thread_safe_flag_spec whole_archive_flag_spec libname_spec \ + library_names_spec soname_spec \ + RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ + old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \ + file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \ + finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ + hardcode_libdir_flag_spec hardcode_libdir_separator \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do + + case "$var" in + reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case "$ltecho" in + *'\$0 --fallback-echo"') + ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + + trap "$rm \"$ofile\"; exit 1" 1 2 15 + echo "creating $ofile" + $rm "$ofile" + cat < "$ofile" +#! $SHELL + +# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh. +# +# Copyright (C) 1996-1999 Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 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 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# 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. + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="sed -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +### BEGIN LIBTOOL CONFIG +EOF + cfgfile="$ofile" + ;; + +*) + # Double-quote the variables that need it (for aesthetics). + for var in old_CC old_CFLAGS old_CPPFLAGS \ + old_LD old_LDFLAGS old_LIBS \ + old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do + eval "$var=\\\"\$var\\\"" + done + + # Just create a config file. + cfgfile="$ofile.cfg" + trap "$rm \"$cfgfile\"; exit 1" 1 2 15 + echo "creating $cfgfile" + $rm "$cfgfile" + cat < "$cfgfile" +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +EOF + ;; +esac + +cat <> "$cfgfile" +# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# +# CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\ +# LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\ +# NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\ +# DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\ +# $0$ltconfig_args +# +# Compiler and other test output produced by $progname, useful for +# debugging $progname, is in ./config.log if it exists. + +# The version of $progname that generated this script. +LTCONFIG_VERSION=$LTCONFIG_VERSION + +# Shell to use when invoking shell scripts. +SHELL=$LTSHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$ltecho + +# The archiver. +AR=$AR + +# The default C compiler. +CC=$CC + +# The linker used to build libraries. +LD=$LD + +# Whether we need hard or soft links. +LN_S=$LN_S + +# A BSD-compatible nm program. +NM=$NM + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$reload_flag +reload_cmds=$reload_cmds + +# How to pass a linker flag through the compiler. +wl=$wl + +# Object file suffix (normally "o"). +objext="$objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$pic_flag + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$compiler_c_o + +# Can we write directly to a .lo ? +compiler_o_lo=$compiler_o_lo + +# Must we lock files when doing compilation ? +need_locks=$need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$link_static_flag + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$RANLIB +old_archive_cmds=$old_archive_cmds +old_postinstall_cmds=$old_postinstall_cmds +old_postuninstall_cmds=$old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$old_archive_from_new_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$archive_cmds +archive_expsym_cmds=$archive_expsym_cmds +postinstall_cmds=$postinstall_cmds +postuninstall_cmds=$postuninstall_cmds + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$global_symbol_to_cdecl + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$hardcode_libdir_separator + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$include_expsyms + +EOF + +case "$ltmain" in +*.sh) + echo '### END LIBTOOL CONFIG' >> "$ofile" + echo >> "$ofile" + case "$host_os" in + aix3*) + cat <<\EOF >> "$ofile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # Append the ltmain.sh script. + sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1) + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + + chmod +x "$ofile" + ;; + +*) + # Compile the libtool program. + echo "FIXME: would compile $ltmain" + ;; +esac + +test -n "$cache_file" || exit 0 + +# AC_CACHE_SAVE +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/Build/source/extra/expat/conftools/ltmain.sh b/Build/source/extra/expat/conftools/ltmain.sh new file mode 100644 index 00000000000..95908ae5985 --- /dev/null +++ b/Build/source/extra/expat/conftools/ltmain.sh @@ -0,0 +1,4025 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun ltconfig. +# +# Copyright (C) 1996-1999 Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 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 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# 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. + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + echo "$modename: not configured to build any kind of library" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" + +# Parse our command line options once, thoroughly. +while test $# -gt 0 +do + arg="$1" + shift + + case "$arg" in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + execute_dlfiles) + eval "$prev=\"\$$prev \$arg\"" + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case "$arg" in + --help) + show_help=yes + ;; + + --version) + echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + exit 0 + ;; + + --config) + sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0 + exit 0 + ;; + + --debug) + echo "$progname: enabling shell trace mode" + set -x + ;; + + --dry-run | -n) + run=: + ;; + + --features) + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + exit 0 + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --quiet | --silent) + show=: + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 +fi + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + case "$nonopt" in + *cc | *++ | gcc* | *-gcc*) + mode=link + for arg + do + case "$arg" in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case "$mode" in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + lastarg= + srcfile="$nonopt" + suppress_output= + + user_target=no + for arg + do + # Accept any command-line options. + case "$arg" in + -o) + if test "$user_target" != "no"; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit 1 + fi + user_target=next + ;; + + -static) + build_old_libs=yes + continue + ;; + esac + + case "$user_target" in + next) + # The next one is the -o target name + user_target=yes + continue + ;; + yes) + # We got the output file + user_target=set + libobj="$arg" + continue + ;; + esac + + # Accept the current argument as the source file. + lastarg="$srcfile" + srcfile="$arg" + + # Aesthetically quote the previous argument. + + # Backslashify any backslashes, double quotes, and dollar signs. + # These are the only characters that are still specially + # interpreted inside of double-quoted scrings. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly in scan + # sets, so we specify it separately. + case "$lastarg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + lastarg="\"$lastarg\"" + ;; + esac + + # Add the previous argument to base_compile. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + done + + case "$user_target" in + set) + ;; + no) + # Get the name of the library object. + libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + *) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit 1 + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSfmso]' + case "$libobj" in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case "$libobj" in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit 1 + ;; + esac + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $libobj" + else + removelist="$libobj" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit 1" 1 2 15 + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit 1" 1 2 15 + else + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until ln "$0" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + echo $srcfile > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + # All platforms use -DPIC, to notify preprocessed assembler code. + command="$base_compile $srcfile $pic_flag -DPIC" + if test "$build_old_libs" = yes; then + lo_libobj="$libobj" + dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$libobj"; then + dir="$objdir" + else + dir="$dir/$objdir" + fi + libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` + + if test -d "$dir"; then + $show "$rm $libobj" + $run $rm $libobj + else + $show "$mkdir $dir" + $run $mkdir $dir + status=$? + if test $status -ne 0 && test ! -d $dir; then + exit $status + fi + fi + fi + if test "$compiler_o_lo" = yes; then + output_obj="$libobj" + command="$command -o $output_obj" + elif test "$compiler_c_o" = yes; then + output_obj="$obj" + command="$command -o $output_obj" + fi + + $run $rm "$output_obj" + $show "$command" + if $run eval "$command"; then : + else + test -n "$output_obj" && $run $rm $removelist + exit 1 + fi + + if test "$need_locks" = warn && + test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then + echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed, then go on to compile the next one + if test x"$output_obj" != x"$libobj"; then + $show "$mv $output_obj $libobj" + if $run $mv $output_obj $libobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # If we have no pic_flag, then copy the object into place and finish. + if test -z "$pic_flag" && test "$build_old_libs" = yes; then + # Rename the .lo from within objdir to obj + if test -f $obj; then + $show $rm $obj + $run $rm $obj + fi + + $show "$mv $libobj $obj" + if $run $mv $libobj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` + libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` + # Now arrange that obj and lo_libobj become the same file + $show "(cd $xdir && $LN_S $baseobj $libobj)" + if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then + exit 0 + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Allow error messages only from the first compilation. + suppress_output=' >/dev/null 2>&1' + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + command="$base_compile $srcfile" + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + output_obj="$obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + $run $rm "$output_obj" + $show "$command" + if $run eval "$command"; then : + else + $run $rm $removelist + exit 1 + fi + + if test "$need_locks" = warn && + test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then + echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed + if test x"$output_obj" != x"$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Create an invalid libtool object if no PIC, so that we do not + # accidentally link it into a program. + if test "$build_libtool_libs" != yes; then + $show "echo timestamp > $libobj" + $run eval "echo timestamp > \$libobj" || exit $? + else + # Move the .lo from within objdir + $show "$mv $libobj $lo_libobj" + if $run $mv $libobj $lo_libobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + fi + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + $rm "$lockfile" + fi + + exit 0 + ;; + + # libtool link mode + link) + modename="$modename: link" + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invokation. + allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + # allow_undefined=yes + + # This is a source program that is used to create dlls on Windows + # Don't remove nor modify the starting and closing comments +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __CYGWIN__ +# #include +# DECLARE_CYGWIN_DLL( DllMain ); +# #else +# # ifdef __cplusplus +# extern "C" { +# # endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# # ifdef __cplusplus +# } +# # endif +# +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# #endif +# /* ltdll.c ends here */ + # This is a source program that is used to create import libraries + # on Windows for dlls which lack them. Don't remove nor modify the + # starting and closing comments +# /* impgen.c starts here */ +# /* Copyright (C) 1999 Free Software Foundation, Inc. +# +# This file is part of GNU libtool. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# */ +# +# #include /* for printf() */ +# #include /* for open(), lseek(), read() */ +# #include /* for O_RDONLY, O_BINARY */ +# #include /* for strdup() */ +# +# static unsigned int +# pe_get16 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[2]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 2); +# return b[0] + (b[1]<<8); +# } +# +# static unsigned int +# pe_get32 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[4]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 4); +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# static unsigned int +# pe_as32 (ptr) +# void *ptr; +# { +# unsigned char *b = ptr; +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# int +# main (argc, argv) +# int argc; +# char *argv[]; +# { +# int dll; +# unsigned long pe_header_offset, opthdr_ofs, num_entries, i; +# unsigned long export_rva, export_size, nsections, secptr, expptr; +# unsigned long name_rvas, nexp; +# unsigned char *expdata, *erva; +# char *filename, *dll_name; +# +# filename = argv[1]; +# +# dll = open(filename, O_RDONLY|O_BINARY); +# if (!dll) +# return 1; +# +# dll_name = filename; +# +# for (i=0; filename[i]; i++) +# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') +# dll_name = filename + i +1; +# +# pe_header_offset = pe_get32 (dll, 0x3c); +# opthdr_ofs = pe_header_offset + 4 + 20; +# num_entries = pe_get32 (dll, opthdr_ofs + 92); +# +# if (num_entries < 1) /* no exports */ +# return 1; +# +# export_rva = pe_get32 (dll, opthdr_ofs + 96); +# export_size = pe_get32 (dll, opthdr_ofs + 100); +# nsections = pe_get16 (dll, pe_header_offset + 4 +2); +# secptr = (pe_header_offset + 4 + 20 + +# pe_get16 (dll, pe_header_offset + 4 + 16)); +# +# expptr = 0; +# for (i = 0; i < nsections; i++) +# { +# char sname[8]; +# unsigned long secptr1 = secptr + 40 * i; +# unsigned long vaddr = pe_get32 (dll, secptr1 + 12); +# unsigned long vsize = pe_get32 (dll, secptr1 + 16); +# unsigned long fptr = pe_get32 (dll, secptr1 + 20); +# lseek(dll, secptr1, SEEK_SET); +# read(dll, sname, 8); +# if (vaddr <= export_rva && vaddr+vsize > export_rva) +# { +# expptr = fptr + (export_rva - vaddr); +# if (export_rva + export_size > vaddr + vsize) +# export_size = vsize - (export_rva - vaddr); +# break; +# } +# } +# +# expdata = (unsigned char*)malloc(export_size); +# lseek (dll, expptr, SEEK_SET); +# read (dll, expdata, export_size); +# erva = expdata - export_rva; +# +# nexp = pe_as32 (expdata+24); +# name_rvas = pe_as32 (expdata+32); +# +# printf ("EXPORTS\n"); +# for (i = 0; i&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + fi + build_libtool_libs=no + build_old_libs=yes + prefer_static_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test $# -gt 0; do + arg="$1" + shift + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case "$prev" in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case "$arg" in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit 1 + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case "$arg" in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi + + prevarg="$arg" + + case "$arg" in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: not more than one -exported-symbols argument allowed" + exit 1 + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case "$dir" in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + absdir="$dir" + fi + dir="$absdir" + ;; + esac + case " $deplibs " in + *" $arg "*) ;; + *) deplibs="$deplibs $arg";; + esac + case " $lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir";; + esac + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2*) + dllsearchdir=`cd "$dir" && pwd || echo "$dir"` + case ":$dllsearchpath:" in + ::) dllsearchpath="$dllsearchdir";; + *":$dllsearchdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dllsearchdir";; + esac + ;; + esac + ;; + + -l*) + if test "$arg" = "-lc"; then + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) + # These systems don't actually have c library (as such) + continue + ;; + esac + elif test "$arg" = "-lm"; then + case "$host" in + *-*-cygwin* | *-*-beos*) + # These systems don't actually have math library (as such) + continue + ;; + esac + fi + deplibs="$deplibs $arg" + ;; + + -module) + module=yes + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -o) prev=output ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case "$dir" in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # If we have no pic_flag, then this is the same as -all-static. + if test -z "$pic_flag" && test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + ;; + + *.o | *.obj | *.a | *.lib) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A library object. + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` + prev= + fi + libobjs="$libobjs $arg" + ;; + + *.la) + # A libtool-controlled library. + + dlname= + libdir= + library_names= + old_library= + + # Check to see that this really is a libtool archive. + if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2 + exit 1 + fi + + # If the library was installed with an old release of libtool, + # it will not redefine variable installed. + installed=yes + + # Read the .la file + # If there is no directory component, then add one. + case "$arg" in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$arg'" 1>&2 + exit 1 + fi + + # Find the relevant object directory and library name. + name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'` + + if test "X$installed" = Xyes; then + dir="$libdir" + else + dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$arg"; then + dir="$objdir" + else + dir="$dir/$objdir" + fi + fi + + if test -n "$dependency_libs"; then + # Extract -R and -L from dependency_libs + temp_deplibs= + for deplib in $dependency_libs; do + case "$deplib" in + -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + case " $rpath $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + -L*) case "$compile_command $temp_deplibs " in + *" $deplib "*) ;; + *) temp_deplibs="$temp_deplibs $deplib";; + esac + temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'` + case " $lib_search_path " in + *" $temp_dir "*) ;; + *) lib_search_path="$lib_search_path $temp_dir";; + esac + ;; + *) temp_deplibs="$temp_deplibs $deplib";; + esac + done + dependency_libs="$temp_deplibs" + fi + + if test -z "$libdir"; then + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $dir/$old_library" + old_convenience="$old_convenience $dir/$old_library" + deplibs="$deplibs$dependency_libs" + compile_command="$compile_command $dir/$old_library$dependency_libs" + finalize_command="$finalize_command $dir/$old_library$dependency_libs" + continue + fi + + # This library was specified with -dlopen. + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking statically, + # we need to preload. + prev=dlprefiles + else + # We should not create a dependency on this library, but we + # may need any libraries it requires. + compile_command="$compile_command$dependency_libs" + finalize_command="$finalize_command$dependency_libs" + prev= + continue + fi + fi + + # The library was specified with -dlpreopen. + if test "$prev" = dlprefiles; then + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + dlprefiles="$dlprefiles $dir/$old_library" + else + dlprefiles="$dlprefiles $dir/$linklib" + fi + prev= + fi + + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + link_against_libtool_libs="$link_against_libtool_libs $arg" + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + + # We need an absolute path. + case "$dir" in + [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + absdir="$dir" + fi + ;; + esac + + # This is the magic to use -rpath. + # Skip directories that are in the system default run-time + # search path, unless they have been requested with -R. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + + lib_linked=yes + case "$hardcode_action" in + immediate | unsupported) + if test "$hardcode_direct" = no; then + compile_command="$compile_command $dir/$linklib" + deplibs="$deplibs $dir/$linklib" + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2*) + dllsearchdir=`cd "$dir" && pwd || echo "$dir"` + if test -n "$dllsearchpath"; then + dllsearchpath="$dllsearchpath:$dllsearchdir" + else + dllsearchpath="$dllsearchdir" + fi + ;; + esac + elif test "$hardcode_minus_L" = no; then + case "$host" in + *-*-sunos*) + compile_shlibpath="$compile_shlibpath$dir:" + ;; + esac + case "$compile_command " in + *" -L$dir "*) ;; + *) compile_command="$compile_command -L$dir";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -L$dir -l$name" + elif test "$hardcode_shlibpath_var" = no; then + case ":$compile_shlibpath:" in + *":$dir:"*) ;; + *) compile_shlibpath="$compile_shlibpath$dir:";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -l$name" + else + lib_linked=no + fi + ;; + + relink) + if test "$hardcode_direct" = yes; then + compile_command="$compile_command $absdir/$linklib" + deplibs="$deplibs $absdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + case "$compile_command " in + *" -L$absdir "*) ;; + *) compile_command="$compile_command -L$absdir";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -L$absdir -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case ":$compile_shlibpath:" in + *":$absdir:"*) ;; + *) compile_shlibpath="$compile_shlibpath$absdir:";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -l$name" + else + lib_linked=no + fi + ;; + + *) + lib_linked=no + ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit 1 + fi + + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + finalize_command="$finalize_command $libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + case "$finalize_command " in + *" -L$libdir "*) ;; + *) finalize_command="$finalize_command -L$libdir";; + esac + finalize_command="$finalize_command -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case ":$finalize_shlibpath:" in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:";; + esac + finalize_command="$finalize_command -l$name" + else + # We cannot seem to hardcode it, guess we'll fake it. + case "$finalize_command " in + *" -L$dir "*) ;; + *) finalize_command="$finalize_command -L$libdir";; + esac + finalize_command="$finalize_command -l$name" + fi + else + # Transform directly to old archives if we don't build new libraries. + if test -n "$pic_flag" && test -z "$old_library"; then + $echo "$modename: cannot find static library for \`$arg'" 1>&2 + exit 1 + fi + + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_command="$compile_command $dir/$linklib" + finalize_command="$finalize_command $dir/$linklib" + else + case "$compile_command " in + *" -L$dir "*) ;; + *) compile_command="$compile_command -L$dir";; + esac + compile_command="$compile_command -l$name" + case "$finalize_command " in + *" -L$dir "*) ;; + *) finalize_command="$finalize_command -L$dir";; + esac + finalize_command="$finalize_command -l$name" + fi + fi + + # Add in any libraries that this one depends upon. + compile_command="$compile_command$dependency_libs" + finalize_command="$finalize_command$dependency_libs" + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + ;; + esac + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + case "$output" in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *.a | *.lib) + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link libtool libraries into archives" 1>&2 + exit 1 + fi + + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + ;; + + *.la) + # Make sure we only generate libraries of the form `libNAME.la'. + case "$outputname" in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + + if test -n "$objs"; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 + exit 1 + fi + + # How the heck are we supposed to write a wrapper for a shared library? + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2 + exit 1 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test $# -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + libext=al + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + dependency_libs="$deplibs" + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + current="$2" + revision="$3" + age="$4" + + # Check that each of the things are valid numbers. + case "$current" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$revision" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$age" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + if test $age -gt $current; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case "$version_type" in + none) ;; + + irix) + major=`expr $current - $age + 1` + versuffix="$major.$revision" + verstring="sgi$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test $loop != 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="sgi$major.$iface:$verstring" + done + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test $loop != 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + windows) + # Like Linux, but with '-' rather than '.', since we only + # want one extension on Windows 95. + major=`expr $current - $age` + versuffix="-$major-$age-$revision" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + verstring="0.0" + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + dependency_libs="$deplibs" + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody*) + # rhapsody is a little odd... + deplibs="$deplibs -framework System" + ;; + *) + # Add libc to deplibs on all other systems. + deplibs="$deplibs -lc" + ;; + esac + fi + + # Create the output directory, or remove our outputs if we need to. + if test -d $output_objdir; then + $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" + $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* + else + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test $status -ne 0 && test ! -d $output_objdir; then + exit $status + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + if test "$build_libtool_libs" = yes; then + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case "$deplibs_check_method" in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behaviour. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | sed 's/.* -> //'` + case "$potliblink" in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | sed 10q \ + | egrep "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + echo "*** Warning: This library needs some functionality provided by $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' | + grep . >/dev/null; then + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + echo "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + # Get the real and link names of the library. + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + lib="$output_objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Ensure that we have .o objects for linkers which dislike .lo + # (e.g. aix) in case we are running --disable-static + for obj in $libobjs; do + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` + if test ! -f $xdir/$oldobj; then + $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" + $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? + fi + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + eval cmds=\"$export_symbols_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case "$xlib" in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linkopts="$linkopts $flag" + fi + + # Do each of the archive commands. + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval cmds=\"$archive_expsym_cmds\" + else + eval cmds=\"$archive_cmds\" + fi + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + *.lo | *.o | *.obj) + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link libtool libraries into objects" 1>&2 + exit 1 + fi + + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case "$output" in + *.lo) + if test -n "$objs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit 1 + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case "$xlib" in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + # Create the old-style object. + reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" + + output="$obj" + eval cmds=\"$reload_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + $show "echo timestamp > $libobj" + $run eval "echo timestamp > $libobj" || exit $? + exit 0 + fi + + if test -n "$pic_flag"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + eval cmds=\"$reload_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + else + # Just create a symlink. + $show $rm $libobj + $run $rm $libobj + xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$libobj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` + oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` + $show "(cd $xdir && $LN_S $oldobj $baseobj)" + $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + ;; + + # Anything else should be a program. + *) + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$compile_rpath " in + *" $libdir "*) ;; + *) compile_rpath="$compile_rpath $libdir" ;; + esac + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + + # Create the binary in the object directory, then wrap it. + if test ! -d $output_objdir; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test $status -ne 0 && test ! -d $output_objdir; then + exit $status + fi + fi + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case "$dlsyms" in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$output.exp" + $run $rm $export_symbols + $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + else + $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' + $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`echo "$arg" | sed -e 's%^.*/%%'` + $run eval 'echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{\ +" + + sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \ + -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \ + < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr_t) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case "$host" in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DPIC";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit 1 + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case "$dir" in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $0 --fallback-echo"; then + case "$0" in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; + *) qecho="$SHELL `pwd`/$0 --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`echo $output|sed 's,.exe$,,'` ;; + esac + $rm $output + trap "$rm $output; exit 1" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + link_against_libtool_libs='$link_against_libtool_libs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + echo >> $output "\ + program=lt-'$outputname' + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if (cd \"\$thisdir\" && eval \$relink_command); then : + else + $rm \"\$progdir/\$file\" + exit 1 + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # win32 systems need to use the prog path for dll + # lookup to work + *-*-cygwin*) + $echo >> $output "\ + exec \$progdir/\$program \${1+\"\$@\"} +" + ;; + + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \$progdir\\\\\$program \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + # Export the path to the program. + PATH=\"\$progdir:\$PATH\" + export PATH + + exec \$program \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit 1 + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" + chmod +x $output + fi + exit 0 + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + # Add in members from convenience archives. + for xlib in $addlibs; do + # Extract the objects. + case "$xlib" in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` + done + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + eval cmds=\"$old_archive_from_new_cmds\" + else + # Ensure that we have .o objects in place in case we decided + # not to build a shared library, and have fallen back to building + # static libs even though --disable-static was passed! + for oldobj in $oldobjs; do + if test ! -f $oldobj; then + xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$oldobj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` + obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` + $show "(cd $xdir && ${LN_S} $obj $baseobj)" + $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? + fi + done + + eval cmds=\"$old_archive_cmds\" + fi + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case "$output" in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + if test -n "$xrpath"; then + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + done + dependency_libs="$temp_xrpath $dependency_libs" + fi + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + fi + $rm $output + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$dlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Directory that this library needs to be installed in: +libdir='$install_libdir'\ +" + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $? + ;; + esac + exit 0 + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case "$arg" in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit 1 + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test $# -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + fi + case "$destdir" in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case "$file" in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case "$file" in + *.a | *.lib) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + library_names= + old_library= + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/" + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$realname $destdir/$realname" + $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? + + if test $# -gt 0; then + # Delete the old symlinks, and create new ones. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + eval cmds=\"$postinstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case "$destfile" in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.o | *.obj) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit 0 + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Do a test to see if this is really a libtool program. + if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + link_against_libtool_libs= + relink_command= + + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Check the variables that should have been set. + if test -z "$link_against_libtool_libs"; then + $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 + exit 1 + fi + + finalize=yes + for lib in $link_against_libtool_libs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case "$lib" in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`" + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir="/tmp" + test -n "$TMPDIR" && tmpdir="$TMPDIR" + tmpdir="$tmpdir/libtool-$$" + if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : + else + $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 + continue + fi + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + # Do each command in the postinstall commands. + eval cmds=\"$old_postinstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec $SHELL $0 --finish$current_libdirs + exit 1 + fi + + exit 0 + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + eval cmds=\"$finish_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit 0 + + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + echo " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + echo "See any operating system documentation about shared libraries for" + echo "more information, such as the ld(1) and ld.so(8) manual pages." + echo "----------------------------------------------------------------------" + exit 0 + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit 1 + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + dir= + case "$file" in + *.la) + # Check to see that this really is a libtool archive. + if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit 1 + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case "$file" in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved enviroment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now actually exec the command. + eval "exec \$cmd$args" + + $echo "$modename: cannot exec \$cmd$args" + exit 1 + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + fi + $echo "$cmd$args" + exit 0 + fi + ;; + + # libtool uninstall mode + uninstall) + modename="$modename: uninstall" + rm="$nonopt" + files= + + for arg + do + case "$arg" in + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + rmfiles="$file" + + case "$name" in + *.la) + # Possibly a libtool archive, so verify it. + if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $dir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" + + $show "$rm $rmfiles" + $run $rm $rmfiles + + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + eval cmds=\"$postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + eval cmds=\"$old_postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + + # FIXME: should reinstall the best remaining shared library. + fi + ;; + + *.lo) + if test "$build_old_libs" = yes; then + oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` + rmfiles="$rmfiles $dir/$oldobj" + fi + $show "$rm $rmfiles" + $run $rm $rmfiles + ;; + + *) + $show "$rm $rmfiles" + $run $rm $rmfiles + ;; + esac + done + exit 0 + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + ;; + esac + + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 +fi # test -z "$show_help" + +# We need to display help for each of the modes. +case "$mode" in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --version print version information + +MODE must be one of the following: + + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE." + exit 0 + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo \ +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; +esac + +echo +$echo "Try \`$modename --help' for more information about other modes." + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/Build/source/extra/expat/conftools/missing b/Build/source/extra/expat/conftools/missing new file mode 100644 index 00000000000..28055d2ae6f --- /dev/null +++ b/Build/source/extra/expat/conftools/missing @@ -0,0 +1,376 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 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 + tar try tar, gnutar, gtar, then tar without non-portable flags + 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. + ;; + + tar*) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + 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 + ;; + + tar*) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + 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/Build/source/extra/expat/conftools/mkinstalldirs b/Build/source/extra/expat/conftools/mkinstalldirs new file mode 100644 index 00000000000..4191a45dbd7 --- /dev/null +++ b/Build/source/extra/expat/conftools/mkinstalldirs @@ -0,0 +1,162 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy + +scriptversion=2009-04-28.21; # UTC + +# Original author: Noah Friedman +# Created: 1993-05-16 +# Public domain. +# +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' +IFS=" "" $nl" +errstatus=0 +dirmode= + +usage="\ +Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... + +Create each directory DIR (with mode MODE, if specified), including all +leading file name components. + +Report bugs to ." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" + exit $? + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --version) + echo "$0 $scriptversion" + exit $? + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and +# mkdir -p a/c at the same time, both will detect that a is missing, +# one will create a, then the other will try to create a and die with +# a "File exists" error. This is a problem when calling mkinstalldirs +# from a parallel make. We use --version in the probe to restrict +# ourselves to GNU mkdir, which is thread-safe. +case $dirmode in + '') + if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + test -d ./-p && rmdir ./-p + test -d ./--version && rmdir ./--version + fi + ;; + *) + if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && + test ! -d ./--version; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + else + # Clean up after NextStep and OpenStep mkdir. + for d in ./-m ./-p ./--version "./$dirmode"; + do + test -d $d && rmdir $d + done + fi + ;; +esac + +for file +do + case $file in + /*) pathcomp=/ ;; + *) pathcomp= ;; + esac + oIFS=$IFS + IFS=/ + set fnord $file + shift + IFS=$oIFS + + for d + do + test "x$d" = x && continue + + pathcomp=$pathcomp$d + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr= + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp=$pathcomp/ + done +done + +exit $errstatus + +# 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/Build/source/extra/expat/doc/reference.html b/Build/source/extra/expat/doc/reference.html new file mode 100644 index 00000000000..07df5e38330 --- /dev/null +++ b/Build/source/extra/expat/doc/reference.html @@ -0,0 +1,1493 @@ + + + + + + Expat XML Parser + + + + + +

Expat XML Parser

+ +

Expat is a library, written in C, for parsing XML documents. It's the +underlying XML parser for the open source Mozilla project, perl's +XML::Parser, and other open-source XML parsers.

+ +

This library is the creation of James Clark, who's also given us +groff (an nroff look-alike), Jade (an implemention of ISO's DSSSL stylesheet +language for SGML), XP (a Java XML parser package), XT (a Java XSL engine). +James was also the technical lead on the XML Working Group at W3 that produced +the XML specification.

+ +

This is free software, licensed under the +MIT/X Consortium license. You may download it from +the expat homepage on Source Forge. +

+ +

The bulk of this document was originally commissioned as an article by +XML.com. They graciously allowed me to retain +copyright and to distribute it with expat. + +


+

Table of Contents

+ + +
+

Overview

+

Expat is a stream-oriented parser. You register callback (or handler) +functions with +the parser and then start feeding it the document. +As the parser recognizes parts of +the document, it will call the appropriate handler for that part (if you've +registered one.) The document is fed to the parser in pieces, so you can +start parsing before you have all the document. This also allows you to +parse really huge documents that won't fit into memory.

+ +

Expat can be intimidating due to the many kinds of handlers and options +you can set. But you only need to learn four functions in order to do 90% +of what you'll want to do with it:

+ +
+ +
XML_ParserCreate
+
Create a new parser object.
+ +
XML_SetElementHandler
+
Set handlers for start and end tags.
+ +
XML_SetCharacterDataHandler
+
Set handler for text.
+ +
XML_Parse
+
Pass a buffer full of document to the parser
+
+ +

These functions and others are described in the +reference part of this document. The reference +section also describes in detail the parameters passed to the different +types of handlers. + +

Let's look at a very simple example program that only uses 3 of the above +functions (it doesn't need to set a character handler.) The program +outline.c +prints an element outline, indenting child elements to distinguish them from +the parent element that contains them. The start handler does all the work. +It prints two indenting spaces for every level of ancestor elements, then +it prints the element and attribute information. Finally it increments the +global Depth variable. + +

+
+int Depth;
+
+void
+start(void *data, const char *el, const char **attr) {
+  int i;
+
+  for (i = 0; i < Depth; i++)
+    printf("  ");
+
+  printf("%s", el);
+
+  for (i = 0; attr[i]; i += 2) {
+    printf(" %s='%s'", attr[i], attr[i + 1]);
+  }
+
+  printf("\n");
+  Depth++;
+}  /* End of start handler */
+
+
+ +

The end tag simply does the bookkeeping work of decrementing the Depth. +

+
+void
+end(void *data, const char *el) {
+  Depth--;
+}  /* End of end handler */
+
+
+ +

After creating the parser, the main program just has the job of +shoveling the document to the parser so that it can do its work. + +


+

Building and Installing expat

+

The expat distribution comes as a compressed (with GNU gzip) tar file. +You may download the latest version from +Source Forge. +After unpacking this, cd into the directory. Then follow either the +Win32 directions or Unix directions below.

+ +

Building under Win32

+

If you're using the GNU compiler under cygwin, follow the Unix directions +in the next section. Otherwise if you have Microsoft's Developer Studio +installed, then from Windows Explorer double-click on "expat.dsp" in the +lib directory and build and install in the usual manner.

+ +

Alternatively, you may download the win32 binary package that contains +the expat.h include file and a pre-built dll.

+ +

Building under Unix (or GNU)

+

First you'll need to run the configure shell script in order to configure +the Makefiles and headers for your system.

+ +

If you're happy with all the defaults that configure picks for you, +and you have permission on your system to install into /usr/local, you can +install expat with this sequence of commands:

+ +
+   ./configure
+   make
+   make install
+
+ +

There are some options that you can provide to this script, but the +only one we'll mention here is the --prefix option. You can +find out all the options available by running configure with just the +--help option. +

+ +By default, the configure script sets things up so that the library gets +installed in /usr/local/lib and the associated header file in +/usr/local/include. +But if you were to give the option, --prefix=/home/me/mystuff, +then the library and header would get installed in +/home/me/mystuff/lib and /home/me/mystuff/include +respectively. +

+ +
+

Using Expat

+

Compiling and Linking against expat

+

Unless you installed expat in a location not expected by your compiler +and linker, all you have to do to use expat in your programs is to include +the expat header (#include <expat.h>) in your files that +make calls to it and to tell the linker +that it needs to link against the expat library. On Unix systems, this would +be the -lexpat argument. +Otherwise, you'll need to tell the compiler where to look for the expat header +and the linker where to find the expat library. You may also need to take +steps to tell the operating system where to find this libary at run time. +

+

On a Unix based system, here's what a Makefile might look like when expat +is installed in a standard location:

+ +
+
+CC=cc
+LDFLAGS=
+LIBS= -lexpat
+xmlapp: xmlapp.o
+        $(CC) $(LDFLAGS) -o xmlapp xmlapp.o $(LIBS)
+
+
+ +

If you installed expat in, say, /home/me/mystuff, then +the Makefile would look like this:

+ +
+
+CC=cc
+CFLAGS= -I/home/me/mystuff/include
+LDFLAGS=
+LIBS= -L/home/me/mystuff/lib -lexpat
+xmlapp: xmlapp.o
+        $(CC) $(LDFLAGS) -o xmlapp xmlapp.o $(LIBS)
+
+
+ +

You'd also have to set the environment variable LD_LIBRARY_PATH +to /home/me/mystuff/lib (or to +${LD_LIBRARY_PATH}:/home/me/mystuff/lib if LD_LIBRARY_PATH +already has some directories in it) in order to run your application. +

+ +

Expat Basics

+

As we saw in the example in the overview, the first step in parsing an +XML document with expat is to create a parser object. There are +three functions in the expat API for creating a +parser object. +However, only two of these +(XML_ParserCreate and +XML_ParserCreateNS) +can be used for constructing a parser for a top-level document. +The object returned by these functions is an opaque pointer +(i.e. expat.h declares it as void *) to data with further internal structure. +In order to free the memory associated with this object you must call +XML_ParserFree. Note that if +you have provided any user data that gets stored +in the parser, then your application is responsible for freeing it prior to +calling XML_ParserFree. +

+ +

The objects returned by the parser creation functions are good for +parsing only one XML document or external parsed entity. If your application +needs to parse many XML documents, then it needs to create a parser object +for each one. The best way to deal with this is to create a higher level +object that contains all the default initialization you want for your parser +objects. + +

Walking through a document hierarchy with a stream oriented parser will +require a good stack mechanism in order to keep track of current context. +For instance, to answer the simple question, +"What element does this text belong to?" requires a stack, since the +parser may have descended into other elements that are children of the +current one and has encountered this text on the way out. + +

The things you're likely to want to keep on a stack are the currently +opened element and it's attributes. You push this information onto the +stack in the start handler and you pop it off in the end handler. + +

For some tasks, it is sufficient to just keep information on what the +depth of the stack is (or would be if you had one.) The outline program shown +above presents one example. Another such task would be skipping over a +complete element. When you see the start tag for the element you want to +skip, you set a skip flag and record the depth at which the element started. +When the end tag handler encounters the same depth, the skipped element has +ended and the flag may be cleared. If you follow the convention that the +root element starts at 1, then you can use the same variable for skip flag +and skip depth. + +

+
+void
+init_info(Parseinfo *info) {
+  info->skip = 0;
+  info->depth = 1;
+  /* Other initializations here */
+}  /* End of init_info */
+
+void
+rawstart(void *data, const char *el, const char **attr) {
+  Parseinfo *inf = (Parseinfo *) data;
+
+  if (! inf->skip) {
+    if (should_skip(inf, el, attr)) {
+      inf->skip = inf->depth;
+    }
+    else
+      start(inf, el, attr);     /* This does rest of start handling */
+  }
+
+  inf->depth++;
+}  /* End of rawstart */
+
+void
+rawend(void *data, const char *el) {
+  Parseinfo *inf = (Parseinfo *) data;
+
+  inf->depth--;
+
+  if (! inf->skip)
+    end(inf, el);              /* This does rest of end handling */
+
+  if (inf->skip == inf->depth)
+    inf->skip = 0;
+}  /* End rawend */
+
+
+
+ +

Notice in the above example the difference in how depth is manipulated +in the start and end handlers. The end tag handler should be the mirror +image of the start tag handler. This is necessary to properly model +containment. Since, in the start tag handler, we +incremented depth after the main body of start tag code, then in +the end handler, we need to manipulate it before the main body. +If we'd decided to increment it first thing in the start handler, then +we'd have had to decrement it last thing in the end handler. + +

Communicating between handlers

+ +

In order to be able to pass information between different handlers +without using globals, you'll need to define a data structure to hold +the shared variables. You can then tell expat (with the XML_SetUserData +function) to pass a pointer to this +structure to the handlers. This is typically the first argument received +by most handlers. + +

Namespace Processing

+ +

When the parser is created using the XML_ParserCreateNS, +function, expat performs namespace processing. Under namespace processing, +expat consumes xmlns and xmlns:... attributes, +which declare namespaces for the scope of the element in which they +occur. This means that your start handler will not see these attributes. +Your application can still be informed of these declarations by setting +namespace declaration handlers with + +XML_SetNamespaceDeclHandler. + +

Element type and attribute names that belong to a given namespace are +passed to the appropriate handler in expanded form. By default this expanded +form is a concatenation of the namespace URI, the separator character (which +is the 2nd argument to XML_ParserCreateNS), and the local +name (i.e. the part after the colon). Names with undeclared prefixes are +passed through to the handlers unchanged, with the prefix and colon still +attached. Unprefixed attribute names are never expanded, and unprefixed +element names are only expanded when they are in the scope of a default +namespace. + +

However if XML_SetReturnNSTriplet +has been called with a non-zero do_nst parameter, then the +expanded form for names with an explicit prefix is a concatenation of: +URI, separator, local name, separator, prefix. +

+ +

You can set handlers for the start of a namespace declaration and for +the end of a scope of a declaration with the +XML_SetNamespaceDeclHandler function. +The StartNamespaceDeclHandler is called prior to the start tag handler +and the EndNamespaceDeclHandler is called before the corresponding end tag +that ends the namespace's scope. +The namespace start handler gets passed the prefix and URI for the namespace. +For a default namespace declaration (xmlns='...'), the prefix will be null. +The URI will be null for the case where the default namespace is being unset. +The namespace end handler just gets the prefix for the closing scope. + +

These handlers are called for each declaration. So if, for instance, a +start tag had three namespace declarations, then the StartNamespaceDeclHandler +would be called three times before the start tag handler is called, once for +each declaration. + +

The namespace.c example demonstrates the +use of these features. Like outline.c, it produces an outline, but +in addition it annotates when a namespace scope starts and when it ends. +This example also demonstrates use of application user data. + +

Character Encodings

+ +

While XML is based on Unicode, and every XML processor is required to +recognized UTF-8 and UTF-16 (1 and 2 byte encodings of Unicode), other +encodings may be declared in XML documents or entities. For the main +document, an XML declaration may contain an encoding declaration: +

+<?xml version="1.0" encoding="ISO-8859-2"?>
+
+ +

External parsed entities may begin with a text declaration, which +looks like an XML declaration with just an encoding declaration: +

+<?xml encoding="Big5"?>
+
+ +

With expat, you may also specify an encoding at the time of creating a +parser. This is useful when the encoding information may come from a source +outside the document itself (like a higher level protocol.) + +

There are four built-in encodings in expat: +

    +
  • UTF-8 +
  • UTF-16 +
  • ISO-8859-1 +
  • US-ASCII +
+ +

Anything else discovered in an encoding declaration or in the +protocol encoding specified in the parser constructor, triggers a call +to the UnknownEncodingHandler. This handler gets passed +the encoding name and a pointer to an XML_Encoding data +structure. Your handler must fill in this structure and return 1 if +it knows how to deal with the encoding. Otherwise the handler should +return 0. +The handler also gets passed a pointer to an +optional application data structure that you may indicate when you set +the handler. + +

Expat places restrictions on character encodings that it can support +by filling in the XML_Encoding structure. +include file: +

    +
  1. Every ASCII character that can appear in a well-formed XML document +must be represented by a single byte, and that byte must correspond to +it's ASCII encoding (except for the characters $@\^'{}~)
  2. +
  3. Characters must be encoded in 4 bytes or less.
  4. +
  5. All characters encoded must have Unicode scalar values less than or +equal to 65535 (0xFFFF)This does not apply to the built-in support +for UTF-16 and UTF-8
  6. +
  7. No character may be encoded by more that one distinct sequence of +bytes
  8. +
+ +

XML_Encoding contains an array of integers that correspond +to the 1st byte of an encoding sequence. If the value in the array for a +byte is zero or positive, then the byte is a single byte encoding that +encodes the Unicode scalar value contained in the array. A -1 in this array +indicates a malformed byte. If the value is +-2, -3, or -4, then the byte is the beginning of a 2, 3, or 4 byte sequence +respectively. Multi-byte sequences are sent to the convert function pointed +at in the XML_Encoding structure. This function should return +the Unicode scalar value for the sequence or -1 if the sequence is malformed. + +

One pitfall that novice expat users are likely to fall into is that +although expat may accept input in various encodings, the strings that it +passes to the handlers are always encoded in UTF-8. Your application is +responsible for any translation of these strings into other encodings. + +

Handling External Entity References

+ +

Expat does not read or parse external entities directly. Note that any +external DTD is a special case of an external entity. +If you've set no ExternalEntityRefHandler, then external +entity references are silently ignored. Otherwise, it calls your handler with +the information needed to read and parse the external entity. + +

Your handler +isn't actually responsible for parsing the entity, but it is responsible +for creating a subsidiary parser with +XML_ExternalEntityParserCreate that will do the job. This returns +an instance of XML_Parser that has handlers and other data +structures initialized from the parent parser. You may then use +XML_Parse or XML_ParseBuffer calls against this +parser. +Since external entities my refer to other external entities, your handler +should be prepared to be called recursively. + +

Parsing DTDs

+

In order to parse parameter entities, before starting the parse, you must +call XML_SetParamEntityParsing with one of the following +arguments: +

+
XML_PARAM_ENTITY_PARSING_NEVER
+
Don't parse parameter entities or the external subset
+
XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE
+
Parse parameter entites and the external subset unless +standalone was set to "yes" in the XML declaration.
+
XML_PARAM_ENTITY_PARSING_ALWAYS
+
Always parse parameter entities and the external subset
+
+ +

In order to read an external DTD, you also have to set an +external entity reference handler as described above. + +


+

Some expat Examples

+ +
+ + +

Expat Reference

+ +

Parser Creation

+ + +
+Construct a new parser. If encoding is non-null, it specifies a +character encoding to use for the document. This overrides the document +encoding declaration. There are four built-in encodings: +
    +
  • US-ASCII +
  • UTF-8 +
  • UTF-16 +
  • ISO-8859-1 +
+Any other value will invoke a call to the UnknownEncodingHandler. +
+ + +
+Constructs a new parser that has namespace processing in effect. Namespace +expanded element names and attribute names are returned as a concatenation +of the namespace URI, sep, and the local part of the name. This +means that you should pick a character for sep that can't be +part of a legal URI.
+ + +
+

Construct a new parser using the suite of memory handling functions +specified in ms. If ms is NULL, then use the +standard set of memory management functions. If sep is +non NULL, then namespace processing is enabled in the created parser +and the character pointed at by sep is used as the separator between +the namespace URI and the local part of the name

+
+typedef struct {
+  void *(*malloc_fcn)(size_t size);
+  void *(*realloc_fcn)(void *ptr, size_t size);
+  void (*free_fcn)(void *ptr);
+} XML_Memory_Handling_Suite;
+
+
+ + +
+Construct a new XML_Parser object for parsing an external general +entity. Context is the context argument passed in a call to a +ExternalEntityRefHandler. Other state information such as handlers, user data, +namespace processing is inherited from the parser passed as the 1st +argument. So you shouldn't need to call any of the behavior changing +functions on this parser (unless you want it to act differently than the +parent parser.) +
+ + +
+Free memory used by the parser. Your application is responsible for +freeing any memory associated with UserData. +
+ +

Parsing

+ + + +
+Parse some more of the document. The string s is a buffer +containing part (or perhaps all) of the document. The number of bytes of s +that are part of the document is indicated by len. This means +that s doesn't have to be null terminated. It also means that +if len is larger than the number of bytes in the block of +memory that s points at, then a memory fault is likely. The +isFinal parameter informs the parser that this is the last +piece of the document. Frequently, the last piece is empty (i.e. +len is zero.) +If a parse error occurred, it returns 0. Otherwise it returns a non-zero +value. +
+ + +
+This is just like XML_Parse, except in this case expat provides the buffer. +By obtaining the buffer from expat with the XML_GetBuffer +function, the application can avoid double copying of the input. +
+ + +
+Obtain a buffer of size len to read a piece of the document +into. A NULL value is returned if expat can't allocate enough memory for +this buffer. This has to be called prior to every call to +XML_ParseBuffer. A typical use would look like this: + +
+
+for (;;) {
+  int bytes_read;
+  void *buff = XML_GetBuffer(p, BUFF_SIZE);
+  if (buff == NULL) {
+    /* handle error */
+  }
+
+  bytes_read = read(docfd, buff, BUFF_SIZE);
+  if (bytes_read < 0) {
+    /* handle error */
+  }
+
+  if (! XML_ParseBuffer(p, bytes_read, bytes_read == 0)) {
+    /* handle parse error */
+  }
+
+  if (bytes_read == 0)
+    break;
+}  
+
+
+
+ +

Handler Setting

+

Although handlers are typically set prior to parsing and left alone, an +application may choose to set or change the handler for a parsing event +while the parse is in progress. For instance, your application may choose +to ignore all text not descended from a para element. One +way it could do this is to set the character handler when a para start tag +is seen, and unset it for the corresponding end tag. + +

A handler may be unset by providing a NULL pointer to the +appropriate handler setter. None of the handler setting functions have +a return value. + +

Your handlers will be receiving strings in arrays of type +XML_Char. This type is defined in expat.h as char * +and contains bytes encoding UTF-8. +Note that you'll receive them in this form independent of the original +encoding of the document.

+ +
+ +
+typedef void
+(*XML_StartElementHandler)(void *userData,
+                           const XML_Char *name,
+                           const XML_Char **atts);
+
+

Set handler for start (and empty) tags. Attributes are passed to the start +handler as a pointer to a vector of char pointers. Each attribute seen in +a start (or empty) tag occupies 2 consecutive places in this vector: the +attribute name followed by the attribute value. These pairs are terminated +by a null pointer.

+

Note that an empty tag generates a call to both start and end handlers +(in that order).

+
+ +
+ +
+typedef void
+(*XML_EndElementHandler)(void *userData,
+                         const XML_Char *name);
+
+

Set handler for end (and empty) tags. As noted above, an empty tag +generates a call to both start and end handlers.

+
+ + + +
+ +
+typedef void
+(*XML_CharacterDataHandler)(void *userData,
+                            const XML_Char *s,
+                            int len);
+
+

Set a text handler. The string your handler receives +is NOT zero terminated. You have to use the length argument +to deal with the end of the string. A single block of contiguous text +free of markup may still result in a sequence of calls to this handler. +In other words, if you're searching for a pattern in the text, it may +be split across calls to this handler.

+
+ +
+ +
+typedef void
+(*XML_ProcessingInstructionHandler)(void *userData,
+                                    const XML_Char *target,
+                                    const XML_Char *data);
+
+
+

Set a handler for processing instructions. The target is the first word +in the processing instruction. The data is the rest of the characters in +it after skipping all whitespace after the initial word.

+
+ +
+ +
+typedef void
+(*XML_CommentHandler)(void *userData,
+                      const XML_Char *data);
+
+

Set a handler for comments. The data is all text inside the comment +delimiters.

+
+ +
+ +
+typedef void
+(*XML_StartCdataSectionHandler)(void *userData);
+
+

Set a handler that gets called at the beginning of a CDATA section.

+
+ +
+ +
+typedef void
+(*XML_EndCdataSectionHandler)(void *userData);
+
+

Set a handler that gets called at the end of a CDATA section.

+
+ + + +
+ +
+typedef void
+(*XML_DefaultHandler)(void *userData,
+                      const XML_Char *s,
+                      int len);
+
+

Sets a handler for any characters in the document which wouldn't +otherwise be handled. This includes both data for which no handlers can be +set (like some kinds of DTD declarations) and data which could be reported +but which currently has no handler set. Note that a contiguous piece of +data that is destined to be reported to the default handler may actually +be reported over several calls to the handler. Setting the handler with +this call has the side effect of turning off expansion of references +to internally defined general entities. Instead these references are +passed to the default handler.

+
+ +
+ +
+typedef void
+(*XML_DefaultHandler)(void *userData,
+                      const XML_Char *s,
+                      int len);
+
+

This sets a default handler, but doesn't affect expansion of internal +entity references.

+
+ +
+ +
+typedef int
+(*XML_ExternalEntityRefHandler)(XML_Parser p,
+                                const XML_Char *context,
+                                const XML_Char *base,
+                                const XML_Char *systemId,
+                                const XML_Char *publicId);
+
+

Set an external entity reference handler. This handler is also +called for processing an external DTD subset if parameter entity parsing +is in effect. (See +XML_SetParamEntityParsing.)

+ + +

The base parameter is the base to use for relative system identifiers. +It is set by XML_SetBase and may be null. The +public id parameter is the public id given in the entity declaration and +may be null. The system id is the system identifier specified in the entity +declaration and is never null.

+ +

There are a couple of ways in which this handler differs from others. +First, this handler returns an integer. A non-zero value should be returned +for successful handling of the external entity reference. Returning a zero +indicates failure, and causes the calling parser to return +an XML_ERROR_EXTERNAL_ENTITY_HANDLING error.

+ +

Second, instead of having userData as its first argument, it receives the +parser that encountered the entity reference. This, along with the context +parameter, may be used as arguments to a call to +XML_ExternalEntityParserCreate. +Using the returned parser, the body of the external entity can be recursively +parsed.

+ +

Since this handler may be called recursively, it should not be saving +information into global or static variables.

+
+ +
+ +
+typedef int
+(*XML_UnknownEncodingHandler)(void *encodingHandlerData,
+                              const XML_Char *name,
+                              XML_Encoding *info);
+
+

Set a handler to deal with encodings other than the +built in set. If the handler knows how +to deal with an encoding with the given name, it should fill in the info +data structure and return 1. Otherwise it should return 0.

+ +
+    typedef struct {
+      int map[256];
+      void *data;
+      int (*convert)(void *data, const char *s);
+      void (*release)(void *data);
+    } XML_Encoding;
+
+ +

The map array contains information for every possible possible leading +byte in a byte sequence. If the corresponding value is >= 0, then it's +a single byte sequence and the byte encodes that Unicode value. If the +value is -1, then that byte is invalid as the initial byte in a sequence. +If the value is -n, where n is an integer > 1, then n is the number of +bytes in the sequence and the actual conversion is accomplished by a +call to the function pointed at by convert. This function may return -1 +if the sequence itself is invalid. The convert pointer may be null if +there are only single byte codes. The data parameter passed to the convert +function is the data pointer from XML_Encoding. The string s is NOT +null terminated and points at the sequence of bytes to be converted.

+ +

The function pointed at by release is called by the parser when it is +finished with the encoding. It may be null.

+
+ +
+ +
+typedef void
+(*XML_StartNamespaceDeclHandler)(void *userData,
+                                 const XML_Char *prefix,
+                                 const XML_Char *uri);
+
+

Set a handler to be called when a namespace is declared. Namespace +declarations occur inside start tags. But the namespace declaration start +handler is called before the start tag handler for each namespace declared +in that start tag.

+
+ +
+ +
+typedef void
+(*XML_EndNamespaceDeclHandler)(void *userData,
+                               const XML_Char *prefix);
+
+

Set a handler to be called when leaving the scope of a namespace +declaration. This will be called, for each namespace declaration, after +the handler for the end tag of the element in which the namespace was declared. +

+
+ + + +
+ +
+typedef void
+(*XML_XmlDeclHandler) (void            *userData,
+                       const XML_Char  *version,
+                       const XML_Char  *encoding,
+                       int             standalone);
+
+

Sets a handler that is called for XML declarations and also for +text declarations discovered in external entities. The way to distinguish +is that the version parameter will be NULL for text +declarations. The encoding parameter may be NULL for +an XML declaration. The standalone argument will contain +-1, 0, or 1 indicating respectively that there was no standalone parameter in +the declaration, that it was given as no, or that it was given as yes.

+
+ +
+ +
+typedef void
+(*XML_StartDoctypeDeclHandler)(void           *userData,
+                               const XML_Char *doctypeName,
+                               const XML_Char *sysid,
+                               const XML_Char *pubid,
+                               int            has_internal_subset);
+
+

Set a handler that is called at the start of a DOCTYPE declaration, +before any external or internal subset is parsed. Both sysid +and pubid may be NULL. The has_internal_subset +will be non-zero if the DOCTYPE declaration has an internal subset.

+
+ +
+ +
+typedef void
+(*XML_EndDoctypeDeclHandler)(void *userData);
+
+

Set a handler that is called at the end of a DOCTYPE declaration, +after parsing any external subset.

+
+ + + +
+ +
+typedef void
+(*XML_ElementDeclHandler)(void *userData,
+                          const XML_Char *name,
+                          XML_Content *model);
+
+
+enum XML_Content_Type {
+  XML_CTYPE_EMPTY = 1,
+  XML_CTYPE_ANY,
+  XML_CTYPE_MIXED,
+  XML_CTYPE_NAME,
+  XML_CTYPE_CHOICE,
+  XML_CTYPE_SEQ
+};
+
+enum XML_Content_Quant {
+  XML_CQUANT_NONE,
+  XML_CQUANT_OPT,
+  XML_CQUANT_REP,
+  XML_CQUANT_PLUS
+};
+
+typedef struct XML_cp XML_Content;
+
+struct XML_cp {
+  enum XML_Content_Type		type;
+  enum XML_Content_Quant	quant;
+  const XML_Char *		name;
+  unsigned int			numchildren;
+  XML_Content *			children;
+};
+
+

Sets a handler for element declarations in a DTD. The handler gets called +with the name of the element in the declaration and a pointer to a structure +that contains the element model. It is the application's responsibility to +free this data structure.

+ +

The model argument is the root of a tree of +XML_Content nodes. If type equals +XML_CTYPE_EMPTY or XML_CTYPE_ANY, then +quant will be XML_CQUANT_NONE, and the other fields +will be zero or NULL. +If type is XML_CTYPE_MIXED, then quant +will be XML_CQUANT_NONE or XML_CQUANT_REP and +numchildren will contain the number of elements that are allowed +to be mixed in and children points to an array of +XML_Content structures that will all have type XML_CTYPE_NAME +with no quantification. +Only the root node can be type XML_CTYPE_EMPTY, XML_CTYPE_ANY, or XML_CTYPE_MIXED.

+ +

For type XML_CTYPE_NAME, the name field points +to the name and the numchildren and children fields +will be zero and NULL. The quant field will indicate any +quantifiers placed on the name.

+ +

Types XML_CTYPE_CHOICE and XML_CTYPE_SEQ +indicate a choice or sequence respectively. The numchildren +field indicates how many nodes in the choice or sequence and +children points to the nodes.

+
+ +
+ +
+typedef void
+(*XML_AttlistDeclHandler) (void           *userData,
+                           const XML_Char *elname,
+                           const XML_Char *attname,
+                           const XML_Char *att_type,
+                           const XML_Char *dflt,
+                           int            isrequired);
+
+

Set a handler for attlist declarations in the DTD. This handler is called +for each attribute. So a single attlist declaration with multiple +attributes declared will generate multiple calls to this handler. The +elname parameter returns the name of the element for which the +attribute is being declared. The attribute name is in the attname +parameter. The attribute type is in the att_type parameter. +It is the string representing the type in the declaration with whitespace +removed.

+ +

The dflt parameter holds the default value. It will +be NULL in the case of "#IMPLIED" or "#REQUIRED" attributes. You can +distinguish these two cases by checking the isrequired +parameter, which will be true in the case of "#REQUIRED" attributes. +Attributes which are "#FIXED" will have also have a true +isrequired, but they will have the non-NULL fixed value in the +dflt parameter. +

+
+ +
+ +
+typedef void
+(*XML_EntityDeclHandler) (void           *userData,
+                          const XML_Char *entityName,
+                          int            is_parameter_entity,
+                          const XML_Char *value,
+                          int            value_length,
+                          const XML_Char *base,
+                          const XML_Char *systemId,
+                          const XML_Char *publicId,
+                          const XML_Char *notationName);
+
+

Sets a handler that will be called for all entity declarations. +The is_parameter_entity argument will be non-zero in the case +of parameter entities and zero otherwise. +

+

For internal entities (<!ENTITY foo "bar">), +value will be non-NULL and systemId, +publicId, and notationName will all be NULL. +The value string is not NULL terminated; the length is provided in +the value_length parameter. Do not use value_length +to test for internal entities, since it is legal to have zero-length +values. Instead check for whether or not value is NULL.

+

The notationName argument will have a non-NULL value only +for unparsed entity declarations.

+
+ +
+ +
+typedef void
+(*XML_UnparsedEntityDeclHandler)(void *userData,
+                                 const XML_Char *entityName,
+                                 const XML_Char *base,
+                                 const XML_Char *systemId,
+                                 const XML_Char *publicId,
+                                 const XML_Char *notationName);
+
+

Set a handler that receives declarations of unparsed entities. These +are entity declarations that have a notation (NDATA) field:

+ +
+<!ENTITY logo SYSTEM "images/logo.gif" NDATA gif>
+
+ +

This handler is obsolete and is provided for backwards compatibility. +Use instead XML_SetEntityDeclHandler. +

+
+ +
+ +
+typedef void
+(*XML_NotationDeclHandler)(void *userData,
+                           const XML_Char *notationName,
+                           const XML_Char *base,
+                           const XML_Char *systemId,
+                           const XML_Char *publicId);
+
+

Set a handler that receives notation declarations.

+
+ +
+ +
+typedef int 
+(*XML_NotStandaloneHandler)(void *userData);
+
+

Set a handler that is called if the document is not "standalone". +This happens when there is an external subset or a reference to a parameter +entity, but does not have standalone set to "yes" in an XML declaration. +If this handler returns 0, then the parser will throw an +XML_ERROR_NOT_STANDALONE error.

+
+ +

Parse position and error reporting functions

+

These are the functions you'll want to call when the parse functions +return 0 (i.e. a parse error has ocurred), although the position reporting +functions are useful outside of errors. The position reported is the byte +position (in the original document or entity encoding) of the first of the +sequence of characters that generated the current event (or the error that +caused the parse functions to return 0.)

+

The position reporting functions are accurate only outside of the DTD. +In other words, they usually return bogus information when called from within +a DTD declaration handler.

+ + +
+Return what type of error has occurred. +
+ + +
+Return a string describing the error corresponding to code. +The code should be one of the enums that can be returned from +XML_GetErrorCode. +
+ + +
+Return the byte offset of the position. +
+ + +
+Return the line number of the position. +
+ + +
+Return the offset, from the beginning of the current line, of +the position. +
+ + +
+Return the number of bytes in the current event. Returns 0 if the event is +inside a reference to an internal entity. +
+ + +
+

Returns the parser's input buffer, sets the integer pointed at by +offset to the offset within this buffer of the current +parse position, and set the integer pointed at by size +to the size of the returned buffer.

+

This should only be called from within a handler during an active +parse and the returned buffer should only be referred to from within +the handler that made the call. This input buffer contains the untranslated +bytes of the input.

+

Only a limited amount of context is kept, so if the event triggering +a call spans over a very large amount of input, the actual parse position +may be before the beginning of the buffer.

+
+ +

Miscellaneous functions

+

The functions in this section either obtain state information from the +parser or can be used to dynamicly set parser options. + +

+
+This sets the user data pointer that gets passed to handlers. +It overwrites any previous value for this pointer. Note that the +application is responsible for freeing the memory associated with +userData when it is finished with the parser. So if +you call this when there's already a pointer there, and you haven't +freed the memory associated with it, then you've probably just leaked +memory. +
+ + +
+This returns the user data pointer that gets passed to handlers. +It is actually implemented as a macro. +
+ + +
+After this is called, handlers receive the parser in the +userData argument. The userData information can still be obtained using +the XML_GetUserData function. +
+ + +
+Set the base to be used for resolving relative URIs in system identifiers. +The return value is 0 if there's no memory to store base, otherwise it's +non-zero. +
+ + +
+Return the base for resolving relative URIs. +
+ + +
+When attributes are reported to the start handler in the atts vector, +attributes that were explicitly set in the element occur before any +attributes that receive their value from default information in an +ATTLIST declaration. This function returns the number of attributes that +were explicitly set times two, thus giving the offset in the atts +array passed to the start tag handler of the first attribute set +due to defaults. It supplies information for the last call to a start +handler. If called inside a start handler, then that means the current call. +
+ + +
+Returns the index of the ID attribute passed in the atts array +in the last call to XML_StartElementHandler, or -1 if there is no ID +attribute. If called inside a start handler, then that means the current call. +
+ + +
+Set the encoding to be used by the parser. It is equivalent to +passing a non-null encoding argument to the parser creation functions. +It must not be called after XML_Parser or XML_ParseBuffer have been +called on the given parser. +
+ + +
+This enables parsing of parameter entities, including the external +parameter entity that is the external DTD subset, according to +code. +The choices for code are: +
    +
  • XML_PARAM_ENTITY_PARSING_NEVER +
  • XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE +
  • XML_PARAM_ENTITY_PARSING_ALWAYS +
+
+ + +
+

+This function only has an effect when using a parser created with +XML_ParserCreateNS, i.e. when namespace +processing is in effect. The do_nst sets whether or not prefixes +are returned with names qualified with a namespace prefix. If this function +is called with do_nst non-zero, then afterwards namespace +qualified names (that is qualified with a prefix as opposed to belonging +to a default namespace) are returned as a triplet with the three parts +separated by the namespace separator specified when the parser was created. +The order of returned parts is URI, local name, and prefix.

+

If do_nst is zero, then namespaces are reported in the +default manner, URI then local_name separated by the namespace separator.

+
+ + +
+Return the library version string (e.g. "expat_1.95.1"). + +
+ + + diff --git a/Build/source/extra/expat/doc/style.css b/Build/source/extra/expat/doc/style.css new file mode 100644 index 00000000000..343e974dba5 --- /dev/null +++ b/Build/source/extra/expat/doc/style.css @@ -0,0 +1,47 @@ +body { +background-color: white +} + +.eg { + padding-left: 1em; + padding-top: .5em; + border: solid thin; + margin: 1em 0; + background-color: tan; + margin-left: 5%; + margin-right: 10%; +} + +.handler { + width: 100%; + border-top-width: thin; + margin-left: 5%; + margin-bottom: 1em; +} + +.handler p { + margin-left: 3%; +} + +.setter { + font-weight: bold; +} + +.signature { + color: navy; +} + +.fcndec { + width: 100%; + border-top-width: thin; + font-weight: bold; +} + +.fcndef { + margin-left: 5%; + margin-bottom: 2em; +} + +dd { +margin-bottom: 2em; +} \ No newline at end of file diff --git a/Build/source/extra/expat/examples/Makefile.in b/Build/source/extra/expat/examples/Makefile.in new file mode 100644 index 00000000000..76a771195a5 --- /dev/null +++ b/Build/source/extra/expat/examples/Makefile.in @@ -0,0 +1,29 @@ +################################################################ +# Process this file with top-level configure script to produce Makefile +# +# Copyright 2000 Clark Cooper +# +# This file is part of EXPAT. +# +# EXPAT is free software; you can redistribute it and/or modify it +# under the terms of the License (based on the MIT/X license) contained +# in the file COPYING that comes with this distribution. +# +# EXPAT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN EXPAT. +# + +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = -lexpat +CFLAGS = @CFLAGS@ + +all: outline + +outline: outline.o + $(CC) -o outline outline.o $(LDFLAGS) $(LIBS) \ No newline at end of file diff --git a/Build/source/extra/expat/examples/outline.c b/Build/source/extra/expat/examples/outline.c new file mode 100644 index 00000000000..22ab278d770 --- /dev/null +++ b/Build/source/extra/expat/examples/outline.c @@ -0,0 +1,86 @@ +/***************************************************************** + * outline.c + * + * Copyright 1999, Clark Cooper + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the license contained in the + * COPYING file that comes with the expat distribution. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Read an XML document from standard input and print an element + * outline on standard output. + */ + + +#include +#include + +#define BUFFSIZE 8192 + +char Buff[BUFFSIZE]; + +int Depth; + +void +start(void *data, const char *el, const char **attr) { + int i; + + for (i = 0; i < Depth; i++) + printf(" "); + + printf("%s", el); + + for (i = 0; attr[i]; i += 2) { + printf(" %s='%s'", attr[i], attr[i + 1]); + } + + printf("\n"); + Depth++; +} /* End of start handler */ + +void +end(void *data, const char *el) { + Depth--; +} /* End of end handler */ + +main(int argc, char **argv) { + XML_Parser p = XML_ParserCreate(NULL); + if (! p) { + fprintf(stderr, "Couldn't allocate memory for parser\n"); + exit(-1); + } + + XML_SetElementHandler(p, start, end); + + for (;;) { + int done; + int len; + + len = fread(Buff, 1, BUFFSIZE, stdin); + if (ferror(stdin)) { + fprintf(stderr, "Read error\n"); + exit(-1); + } + done = feof(stdin); + + if (! XML_Parse(p, Buff, len, done)) { + fprintf(stderr, "Parse error at line %d:\n%s\n", + XML_GetCurrentLineNumber(p), + XML_ErrorString(XML_GetErrorCode(p))); + exit(-1); + } + + if (done) + break; + } +} /* End of main */ + diff --git a/Build/source/extra/expat/lib/Makefile.in b/Build/source/extra/expat/lib/Makefile.in new file mode 100644 index 00000000000..24c43d94469 --- /dev/null +++ b/Build/source/extra/expat/lib/Makefile.in @@ -0,0 +1,168 @@ +################################################################ +# Process this file with top-level configure script to produce Makefile +# +# Copyright 2000 Clark Cooper +# +# This file is part of EXPAT. +# +# EXPAT is free software; you can redistribute it and/or modify it +# under the terms of the License (based on the MIT/X license) contained +# in the file COPYING that comes with this distribution. +# +# EXPAT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN EXPAT. +# + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +subdir = lib + +DESTDIR = + +top_builddir = .. + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_DATA = @INSTALL_DATA@ + +host_alias = @host_alias@ +host_triplet = @host@ +AS = @AS@ +CC = @CC@ +DLLTOOL = @DLLTOOL@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +OBJDUMP = @OBJDUMP@ +PACKAGE = @PACKAGE@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ + +LIBRARY = libexpat.la +SOURCES = xmlparse.c xmltok.c xmlrole.c +OBJECTS = $(SOURCES:.c=.o) +LTOBJECTS = $(SOURCES:.c=.lo) + +TEMPLATES = xmltok_impl.c xmltok_ns.c +APIHEADER = expat.h +HEADERS = ascii.h iasciitab.h utf8tab.h xmltok.h asciitab.h latin1tab.h \ + nametab.h xmldef.h xmlrole.h xmltok_impl.h + +mkinstalldirs = $(SHELL) $(top_srcdir)/conftools/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = + +INCLUDES = -I$(srcdir) -I.. +DEFS = @DEFS@ -DPACKAGE='"$(PACKAGE)"' -DVERSION='"$(PACKAGE)_$(VERSION)"' +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +CFLAGS = @CFLAGS@ + +LIBREVISION = @LIBREVISION@ +LIBCURRENT = @LIBCURRENT@ +LIBAGE = @LIBAGE@ + +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) -version-info $(LIBCURRENT):$(LIBREVISION):$(LIBAGE) $(CFLAGS) $(LDFLAGS) -o $@ +DIST_COMMON = Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(TEMPLATES) $(APIHEADER) $(HEADERS) + +TAR = gtar +GZIP_ENV = --best + +all: $(LIBRARY) + +.SUFFIXES: .c .lo .o +.PHONY: all clean distclean maintainer-clean + +.c.o: + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +.c.lo: + @echo '$(LTCOMPILE) -c $<'; \ + test -d .deps || mkdir .deps ; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(top_builddir)/config.status: $(top_builddir)/configure + cd $(top_builddir) && $(MAKE) config.status + +$(top_builddir)/config.h: $(top_builddir)/config.hin + cd $(top_builddir) && $(MAKE) config.h + +clean: + rm -f $(LIBRARY) *.o *.lo *~ + rm -rf .libs _libs .deps + +distclean: clean + rm -f Makefile + +maintainer-clean: distclean + +install: $(LIBRARY) $(APIHEADER) + $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir) + $(LIBTOOL) --mode=install $(INSTALL) $(LIBRARY) $(DESTDIR)$(libdir)/$(LIBRARY) + $(INSTALL_DATA) $(APIHEADER) $(DESTDIR)$(includedir) + +uninstall: + $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$(LIBRARY); + rm -f $(DESTDIR)$(libdir)/$(APIHEADER) + +$(LIBRARY): $(LTOBJECTS) + $(LINK) -rpath $(libdir) $(LDFLAGS) $(LTOBJECTS) + +xmlparse.o \ +xmlparse.lo: xmlparse.c expat.h xmlrole.h xmltok.h $(top_builddir)/config.h + +xmlrole.o \ +xmlrole.lo: xmlrole.c ascii.h xmlrole.h $(top_builddir)/config.h + +xmltok.o \ +xmltok.lo: xmltok.c xmltok_impl.c xmltok_ns.c \ + ascii.h asciitab.h iasciitab.h latin1tab.h nametab.h utf8tab.h \ + xmltok.h xmltok_impl.h $(top_builddir)/config.h diff --git a/Build/source/extra/expat/lib/ascii.h b/Build/source/extra/expat/lib/ascii.h new file mode 100644 index 00000000000..6376b1f311b --- /dev/null +++ b/Build/source/extra/expat/lib/ascii.h @@ -0,0 +1,86 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +#define ASCII_A 0x41 +#define ASCII_B 0x42 +#define ASCII_C 0x43 +#define ASCII_D 0x44 +#define ASCII_E 0x45 +#define ASCII_F 0x46 +#define ASCII_G 0x47 +#define ASCII_H 0x48 +#define ASCII_I 0x49 +#define ASCII_J 0x4A +#define ASCII_K 0x4B +#define ASCII_L 0x4C +#define ASCII_M 0x4D +#define ASCII_N 0x4E +#define ASCII_O 0x4F +#define ASCII_P 0x50 +#define ASCII_Q 0x51 +#define ASCII_R 0x52 +#define ASCII_S 0x53 +#define ASCII_T 0x54 +#define ASCII_U 0x55 +#define ASCII_V 0x56 +#define ASCII_W 0x57 +#define ASCII_X 0x58 +#define ASCII_Y 0x59 +#define ASCII_Z 0x5A + +#define ASCII_a 0x61 +#define ASCII_b 0x62 +#define ASCII_c 0x63 +#define ASCII_d 0x64 +#define ASCII_e 0x65 +#define ASCII_f 0x66 +#define ASCII_g 0x67 +#define ASCII_h 0x68 +#define ASCII_i 0x69 +#define ASCII_j 0x6A +#define ASCII_k 0x6B +#define ASCII_l 0x6C +#define ASCII_m 0x6D +#define ASCII_n 0x6E +#define ASCII_o 0x6F +#define ASCII_p 0x70 +#define ASCII_q 0x71 +#define ASCII_r 0x72 +#define ASCII_s 0x73 +#define ASCII_t 0x74 +#define ASCII_u 0x75 +#define ASCII_v 0x76 +#define ASCII_w 0x77 +#define ASCII_x 0x78 +#define ASCII_y 0x79 +#define ASCII_z 0x7A + +#define ASCII_0 0x30 +#define ASCII_1 0x31 +#define ASCII_2 0x32 +#define ASCII_3 0x33 +#define ASCII_4 0x34 +#define ASCII_5 0x35 +#define ASCII_6 0x36 +#define ASCII_7 0x37 +#define ASCII_8 0x38 +#define ASCII_9 0x39 + +#define ASCII_TAB 0x09 +#define ASCII_SPACE 0x20 +#define ASCII_EXCL 0x21 +#define ASCII_QUOT 0x22 +#define ASCII_AMP 0x26 +#define ASCII_APOS 0x27 +#define ASCII_MINUS 0x2D +#define ASCII_PERIOD 0x2E +#define ASCII_COLON 0x3A +#define ASCII_SEMI 0x3B +#define ASCII_LT 0x3C +#define ASCII_EQUALS 0x3D +#define ASCII_GT 0x3E +#define ASCII_LSQB 0x5B +#define ASCII_RSQB 0x5D +#define ASCII_UNDERSCORE 0x5F diff --git a/Build/source/extra/expat/lib/asciitab.h b/Build/source/extra/expat/lib/asciitab.h new file mode 100644 index 00000000000..eb445cc52c1 --- /dev/null +++ b/Build/source/extra/expat/lib/asciitab.h @@ -0,0 +1,37 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, +/* 0x0C */ BT_NONXML, BT_CR, BT_NONXML, BT_NONXML, +/* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, +/* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, +/* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, +/* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, +/* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, +/* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, +/* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, +/* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, +/* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, +/* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, +/* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, +/* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, +/* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, +/* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, +/* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, +/* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, diff --git a/Build/source/extra/expat/lib/config.h b/Build/source/extra/expat/lib/config.h new file mode 100644 index 00000000000..77b1ece8ca1 --- /dev/null +++ b/Build/source/extra/expat/lib/config.h @@ -0,0 +1,27 @@ +/*================================================================ +** Copyright 2000, Clark Cooper +** All rights reserved. +** +** This is free software. You are permitted to copy, distribute, or modify +** it under the terms of the MIT/X license (contained in the COPYING file +** with this distribution.) +** +** +*/ + +#ifndef WINCONFIG_H +#define WINCONFIG_H + +#define WIN32_LEAN_AND_MEAN +#include +#undef WIN32_LEAN_AND_MEAN + +#include +#include + +#define XML_NS 1 +#define XML_DTD 1 +#define XML_BYTE_ORDER 12 +#define XML_CONTEXT_BYTES 1024 + +#endif /* ndef WINCONFIG_H */ diff --git a/Build/source/extra/expat/lib/expat.dep b/Build/source/extra/expat/lib/expat.dep new file mode 100644 index 00000000000..067e3fb33fe --- /dev/null +++ b/Build/source/extra/expat/lib/expat.dep @@ -0,0 +1,32 @@ +# Microsoft Developer Studio Generated Dependency File, included by expat.mak + +.\xmlparse.c : \ + ".\expat.h"\ + ".\winconfig.h"\ + ".\xmlrole.h"\ + ".\xmltok.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\xmlrole.c : \ + ".\ascii.h"\ + ".\winconfig.h"\ + ".\xmlrole.h"\ + ".\xmltok.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\xmltok.c : \ + ".\ascii.h"\ + ".\asciitab.h"\ + ".\iasciitab.h"\ + ".\latin1tab.h"\ + ".\nametab.h"\ + ".\utf8tab.h"\ + ".\winconfig.h"\ + ".\xmltok.h"\ + ".\xmltok_impl.c"\ + ".\xmltok_impl.h"\ + ".\xmltok_ns.c"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + diff --git a/Build/source/extra/expat/lib/expat.dsp b/Build/source/extra/expat/lib/expat.dsp new file mode 100644 index 00000000000..0d975d01b76 --- /dev/null +++ b/Build/source/extra/expat/lib/expat.dsp @@ -0,0 +1,105 @@ +# Microsoft Developer Studio Project File - Name="expat" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=expat - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "expat.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "expat.mak" CFG="expat - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "expat - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "expat - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "expat - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "COMPILED_FROM_DSP" /D VERSION=\"expat_1.95.1\" /YX /FD /c +# ADD BASE RSC /l 0x40c /d "NDEBUG" +# ADD RSC /l 0x40c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "expat - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "expat___Win32_Debug" +# PROP BASE Intermediate_Dir "expat___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "COMPILED_FROM_DSP" /D VERSION=\"expat_1.95.1\" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x40c /d "_DEBUG" +# ADD RSC /l 0x40c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ENDIF + +# Begin Target + +# Name "expat - Win32 Release" +# Name "expat - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\xmlparse.c +# End Source File +# Begin Source File + +SOURCE=.\xmlrole.c +# End Source File +# Begin Source File + +SOURCE=.\xmltok.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# End Target +# End Project diff --git a/Build/source/extra/expat/lib/expat.dsw b/Build/source/extra/expat/lib/expat.dsw new file mode 100644 index 00000000000..65adfb9369d --- /dev/null +++ b/Build/source/extra/expat/lib/expat.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "expat"=".\expat.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/Build/source/extra/expat/lib/expat.h b/Build/source/extra/expat/lib/expat.h new file mode 100644 index 00000000000..3df19ed613d --- /dev/null +++ b/Build/source/extra/expat/lib/expat.h @@ -0,0 +1,712 @@ +/* +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +#ifndef XmlParse_INCLUDED +#define XmlParse_INCLUDED 1 + +#include + +#ifndef XMLPARSEAPI +# ifdef __declspec +# define XMLPARSEAPI __declspec(dllimport) +# else +# define XMLPARSEAPI /* nothing */ +# endif +#endif /* not defined XMLPARSEAPI */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *XML_Parser; + +/* Information is UTF-8 encoded. */ +typedef char XML_Char; +typedef char XML_LChar; + +enum XML_Content_Type { + XML_CTYPE_EMPTY = 1, + XML_CTYPE_ANY, + XML_CTYPE_MIXED, + XML_CTYPE_NAME, + XML_CTYPE_CHOICE, + XML_CTYPE_SEQ +}; + +enum XML_Content_Quant { + XML_CQUANT_NONE, + XML_CQUANT_OPT, + XML_CQUANT_REP, + XML_CQUANT_PLUS +}; + +/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be + XML_CQUANT_NONE, and the other fields will be zero or NULL. + If type == XML_CTYPE_MIXED, then quant will be NONE or REP and + numchildren will contain number of elements that may be mixed in + and children point to an array of XML_Content cells that will be + all of XML_CTYPE_NAME type with no quantification. + + If type == XML_CTYPE_NAME, then the name points to the name, and + the numchildren field will be zero and children will be NULL. The + quant fields indicates any quantifiers placed on the name. + + CHOICE and SEQ will have name NULL, the number of children in + numchildren and children will point, recursively, to an array + of XML_Content cells. + + The EMPTY, ANY, and MIXED types will only occur at top level. +*/ + +typedef struct XML_cp XML_Content; + +struct XML_cp { + enum XML_Content_Type type; + enum XML_Content_Quant quant; + const XML_Char * name; + unsigned int numchildren; + XML_Content * children; +}; + + +/* This is called for an element declaration. See above for + description of the model argument. It's the caller's responsibility + to free model when finished with it. +*/ + +typedef void (*XML_ElementDeclHandler) (void *userData, + const XML_Char *name, + XML_Content *model); + +void XMLPARSEAPI +XML_SetElementDeclHandler(XML_Parser parser, + XML_ElementDeclHandler eldecl); + +/* + The Attlist declaration handler is called for *each* attribute. So + a single Attlist declaration with multiple attributes declared will + generate multiple calls to this handler. The "default" parameter + may be NULL in the case of the "#IMPLIED" or "#REQUIRED" keyword. + The "isrequired" parameter will be true and the default value will + be NULL in the case of "#REQUIRED". If "isrequired" is true and + default is non-NULL, then this is a "#FIXED" default. + */ + +typedef void (*XML_AttlistDeclHandler) (void *userData, + const XML_Char *elname, + const XML_Char *attname, + const XML_Char *att_type, + const XML_Char *dflt, + int isrequired); + +void XMLPARSEAPI +XML_SetAttlistDeclHandler(XML_Parser parser, + XML_AttlistDeclHandler attdecl); + + + /* The XML declaration handler is called for *both* XML declarations and + text declarations. The way to distinguish is that the version parameter + will be null for text declarations. The encoding parameter may be null + for XML declarations. The standalone parameter will be -1, 0, or 1 + indicating respectively that there was no standalone parameter in + the declaration, that it was given as no, or that it was given as yes. + */ + +typedef void (*XML_XmlDeclHandler) (void *userData, + const XML_Char *version, + const XML_Char *encoding, + int standalone); + +void XMLPARSEAPI +XML_SetXmlDeclHandler(XML_Parser parser, + XML_XmlDeclHandler xmldecl); + + +typedef struct { + void *(__cdecl * malloc_fcn)(size_t size); + void *(__cdecl * realloc_fcn)(void *ptr, size_t size); + void (__cdecl * free_fcn)(void *ptr); +} XML_Memory_Handling_Suite; + +/* Constructs a new parser; encoding is the encoding specified by the external +protocol or null if there is none specified. */ + +XML_Parser XMLPARSEAPI +XML_ParserCreate(const XML_Char *encoding); + +/* Constructs a new parser and namespace processor. Element type names +and attribute names that belong to a namespace will be expanded; +unprefixed attribute names are never expanded; unprefixed element type +names are expanded only if there is a default namespace. The expanded +name is the concatenation of the namespace URI, the namespace separator character, +and the local part of the name. If the namespace separator is '\0' then +the namespace URI and the local part will be concatenated without any +separator. When a namespace is not declared, the name and prefix will be +passed through without expansion. */ + +XML_Parser XMLPARSEAPI +XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); + + +/* Constructs a new parser using the memory management suit referred to + by memsuite. If memsuite is NULL, then use the standard library memory + suite. If namespaceSeparator is non-NULL it creates a parser with + namespace processing as described above. The character pointed at + will serve as the namespace separator. + + All further memory operations used for the created parser will come from + the given suite. +*/ + +XML_Parser XMLPARSEAPI +XML_ParserCreate_MM(const XML_Char *encoding, + const XML_Memory_Handling_Suite *memsuite, + const XML_Char *namespaceSeparator); + +/* atts is array of name/value pairs, terminated by 0; + names and values are 0 terminated. */ + +typedef void (*XML_StartElementHandler)(void *userData, + const XML_Char *name, + const XML_Char **atts); + +typedef void (*XML_EndElementHandler)(void *userData, + const XML_Char *name); + + +/* s is not 0 terminated. */ +typedef void (*XML_CharacterDataHandler)(void *userData, + const XML_Char *s, + int len); + +/* target and data are 0 terminated */ +typedef void (*XML_ProcessingInstructionHandler)(void *userData, + const XML_Char *target, + const XML_Char *data); + +/* data is 0 terminated */ +typedef void (*XML_CommentHandler)(void *userData, const XML_Char *data); + +typedef void (*XML_StartCdataSectionHandler)(void *userData); +typedef void (*XML_EndCdataSectionHandler)(void *userData); + +/* This is called for any characters in the XML document for +which there is no applicable handler. This includes both +characters that are part of markup which is of a kind that is +not reported (comments, markup declarations), or characters +that are part of a construct which could be reported but +for which no handler has been supplied. The characters are passed +exactly as they were in the XML document except that +they will be encoded in UTF-8. Line boundaries are not normalized. +Note that a byte order mark character is not passed to the default handler. +There are no guarantees about how characters are divided between calls +to the default handler: for example, a comment might be split between +multiple calls. */ + +typedef void (*XML_DefaultHandler)(void *userData, + const XML_Char *s, + int len); + +/* This is called for the start of the DOCTYPE declaration, before + any DTD or internal subset is parsed. */ + +typedef void (*XML_StartDoctypeDeclHandler)(void *userData, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid, + int has_internal_subset + ); + +/* This is called for the start of the DOCTYPE declaration when the +closing > is encountered, but after processing any external subset. */ +typedef void (*XML_EndDoctypeDeclHandler)(void *userData); + +/* This is called for entity declarations. The is_parameter_entity + argument will be non-zero if the entity is a parameter entity, zero + otherwise. + + For internal entities (), value will + be non-null and systemId, publicID, and notationName will be null. + The value string is NOT null terminated; the length is provided in + the value_length argument. Since it is legal to have zero-length + values, do not use this argument to test for internal entities. + + For external entities, value will be null and systemId will be non-null. + The publicId argument will be null unless a public identifier was + provided. The notationName argument will have a non-null value only + for unparsed entity declarations. +*/ + +typedef void (*XML_EntityDeclHandler) (void *userData, + const XML_Char *entityName, + int is_parameter_entity, + const XML_Char *value, + int value_length, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId, + const XML_Char *notationName); + +void XMLPARSEAPI +XML_SetEntityDeclHandler(XML_Parser parser, + XML_EntityDeclHandler handler); + +/* OBSOLETE -- OBSOLETE -- OBSOLETE + This handler has been superceded by the EntityDeclHandler above. + It is provided here for backward compatibility. +This is called for a declaration of an unparsed (NDATA) +entity. The base argument is whatever was set by XML_SetBase. +The entityName, systemId and notationName arguments will never be null. +The other arguments may be. */ + +typedef void (*XML_UnparsedEntityDeclHandler)(void *userData, + const XML_Char *entityName, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId, + const XML_Char *notationName); + +/* This is called for a declaration of notation. +The base argument is whatever was set by XML_SetBase. +The notationName will never be null. The other arguments can be. */ + +typedef void (*XML_NotationDeclHandler)(void *userData, + const XML_Char *notationName, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +/* When namespace processing is enabled, these are called once for +each namespace declaration. The call to the start and end element +handlers occur between the calls to the start and end namespace +declaration handlers. For an xmlns attribute, prefix will be null. +For an xmlns="" attribute, uri will be null. */ + +typedef void (*XML_StartNamespaceDeclHandler)(void *userData, + const XML_Char *prefix, + const XML_Char *uri); + +typedef void (*XML_EndNamespaceDeclHandler)(void *userData, + const XML_Char *prefix); + +/* This is called if the document is not standalone (it has an +external subset or a reference to a parameter entity, but does not +have standalone="yes"). If this handler returns 0, then processing +will not continue, and the parser will return a +XML_ERROR_NOT_STANDALONE error. */ + +typedef int (*XML_NotStandaloneHandler)(void *userData); + +/* This is called for a reference to an external parsed general entity. +The referenced entity is not automatically parsed. +The application can parse it immediately or later using +XML_ExternalEntityParserCreate. +The parser argument is the parser parsing the entity containing the reference; +it can be passed as the parser argument to XML_ExternalEntityParserCreate. +The systemId argument is the system identifier as specified in the entity declaration; +it will not be null. +The base argument is the system identifier that should be used as the base for +resolving systemId if systemId was relative; this is set by XML_SetBase; +it may be null. +The publicId argument is the public identifier as specified in the entity declaration, +or null if none was specified; the whitespace in the public identifier +will have been normalized as required by the XML spec. +The context argument specifies the parsing context in the format +expected by the context argument to +XML_ExternalEntityParserCreate; context is valid only until the handler +returns, so if the referenced entity is to be parsed later, it must be copied. +The handler should return 0 if processing should not continue because of +a fatal error in the handling of the external entity. +In this case the calling parser will return an XML_ERROR_EXTERNAL_ENTITY_HANDLING +error. +Note that unlike other handlers the first argument is the parser, not userData. */ + +typedef int (*XML_ExternalEntityRefHandler)(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +/* This structure is filled in by the XML_UnknownEncodingHandler +to provide information to the parser about encodings that are unknown +to the parser. +The map[b] member gives information about byte sequences +whose first byte is b. +If map[b] is c where c is >= 0, then b by itself encodes the Unicode scalar value c. +If map[b] is -1, then the byte sequence is malformed. +If map[b] is -n, where n >= 2, then b is the first byte of an n-byte +sequence that encodes a single Unicode scalar value. +The data member will be passed as the first argument to the convert function. +The convert function is used to convert multibyte sequences; +s will point to a n-byte sequence where map[(unsigned char)*s] == -n. +The convert function must return the Unicode scalar value +represented by this byte sequence or -1 if the byte sequence is malformed. +The convert function may be null if the encoding is a single-byte encoding, +that is if map[b] >= -1 for all bytes b. +When the parser is finished with the encoding, then if release is not null, +it will call release passing it the data member; +once release has been called, the convert function will not be called again. + +Expat places certain restrictions on the encodings that are supported +using this mechanism. + +1. Every ASCII character that can appear in a well-formed XML document, +other than the characters + + $@\^`{}~ + +must be represented by a single byte, and that byte must be the +same byte that represents that character in ASCII. + +2. No character may require more than 4 bytes to encode. + +3. All characters encoded must have Unicode scalar values <= 0xFFFF, +(ie characters that would be encoded by surrogates in UTF-16 +are not allowed). Note that this restriction doesn't apply to +the built-in support for UTF-8 and UTF-16. + +4. No Unicode character may be encoded by more than one distinct sequence +of bytes. */ + +typedef struct { + int map[256]; + void *data; + int (*convert)(void *data, const char *s); + void (*release)(void *data); +} XML_Encoding; + +/* This is called for an encoding that is unknown to the parser. +The encodingHandlerData argument is that which was passed as the +second argument to XML_SetUnknownEncodingHandler. +The name argument gives the name of the encoding as specified in +the encoding declaration. +If the callback can provide information about the encoding, +it must fill in the XML_Encoding structure, and return 1. +Otherwise it must return 0. +If info does not describe a suitable encoding, +then the parser will return an XML_UNKNOWN_ENCODING error. */ + +typedef int (*XML_UnknownEncodingHandler)(void *encodingHandlerData, + const XML_Char *name, + XML_Encoding *info); + +void XMLPARSEAPI +XML_SetElementHandler(XML_Parser parser, + XML_StartElementHandler start, + XML_EndElementHandler end); + +void XMLPARSEAPI +XML_SetStartElementHandler(XML_Parser, XML_StartElementHandler); + +void XMLPARSEAPI +XML_SetEndElementHandler(XML_Parser, XML_EndElementHandler); + +void XMLPARSEAPI +XML_SetCharacterDataHandler(XML_Parser parser, + XML_CharacterDataHandler handler); + +void XMLPARSEAPI +XML_SetProcessingInstructionHandler(XML_Parser parser, + XML_ProcessingInstructionHandler handler); +void XMLPARSEAPI +XML_SetCommentHandler(XML_Parser parser, + XML_CommentHandler handler); + +void XMLPARSEAPI +XML_SetCdataSectionHandler(XML_Parser parser, + XML_StartCdataSectionHandler start, + XML_EndCdataSectionHandler end); + +void XMLPARSEAPI +XML_SetStartCdataSectionHandler(XML_Parser parser, + XML_StartCdataSectionHandler start); + +void XMLPARSEAPI +XML_SetEndCdataSectionHandler(XML_Parser parser, + XML_EndCdataSectionHandler end); + +/* This sets the default handler and also inhibits expansion of internal entities. +The entity reference will be passed to the default handler. */ + +void XMLPARSEAPI +XML_SetDefaultHandler(XML_Parser parser, + XML_DefaultHandler handler); + +/* This sets the default handler but does not inhibit expansion of internal entities. +The entity reference will not be passed to the default handler. */ + +void XMLPARSEAPI +XML_SetDefaultHandlerExpand(XML_Parser parser, + XML_DefaultHandler handler); + +void XMLPARSEAPI +XML_SetDoctypeDeclHandler(XML_Parser parser, + XML_StartDoctypeDeclHandler start, + XML_EndDoctypeDeclHandler end); + +void XMLPARSEAPI +XML_SetStartDoctypeDeclHandler(XML_Parser parser, + XML_StartDoctypeDeclHandler start); + +void XMLPARSEAPI +XML_SetEndDoctypeDeclHandler(XML_Parser parser, + XML_EndDoctypeDeclHandler end); + +void XMLPARSEAPI +XML_SetUnparsedEntityDeclHandler(XML_Parser parser, + XML_UnparsedEntityDeclHandler handler); + +void XMLPARSEAPI +XML_SetNotationDeclHandler(XML_Parser parser, + XML_NotationDeclHandler handler); + +void XMLPARSEAPI +XML_SetNamespaceDeclHandler(XML_Parser parser, + XML_StartNamespaceDeclHandler start, + XML_EndNamespaceDeclHandler end); + +void XMLPARSEAPI +XML_SetStartNamespaceDeclHandler(XML_Parser parser, + XML_StartNamespaceDeclHandler start); + +void XMLPARSEAPI +XML_SetEndNamespaceDeclHandler(XML_Parser parser, + XML_EndNamespaceDeclHandler end); + +void XMLPARSEAPI +XML_SetNotStandaloneHandler(XML_Parser parser, + XML_NotStandaloneHandler handler); + +void XMLPARSEAPI +XML_SetExternalEntityRefHandler(XML_Parser parser, + XML_ExternalEntityRefHandler handler); + +/* If a non-null value for arg is specified here, then it will be passed +as the first argument to the external entity ref handler instead +of the parser object. */ +void XMLPARSEAPI +XML_SetExternalEntityRefHandlerArg(XML_Parser, void *arg); + +void XMLPARSEAPI +XML_SetUnknownEncodingHandler(XML_Parser parser, + XML_UnknownEncodingHandler handler, + void *encodingHandlerData); + +/* This can be called within a handler for a start element, end element, +processing instruction or character data. It causes the corresponding +markup to be passed to the default handler. */ +void XML_DefaultCurrent(XML_Parser parser); + +/* If do_nst is non-zero, and namespace processing is in effect, and + a name has a prefix (i.e. an explicit namespace qualifier) then + that name is returned as a triplet in a single + string separated by the separator character specified when the parser + was created: URI + sep + local_name + sep + prefix. + + If do_nst is zero, then namespace information is returned in the + default manner (URI + sep + local_name) whether or not the names + has a prefix. +*/ + +void XMLPARSEAPI +XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); + +/* This value is passed as the userData argument to callbacks. */ +void XMLPARSEAPI +XML_SetUserData(XML_Parser parser, void *userData); + +/* Returns the last value set by XML_SetUserData or null. */ +#define XML_GetUserData(parser) (*(void **)(parser)) + +/* This is equivalent to supplying an encoding argument +to XML_ParserCreate. It must not be called after XML_Parse +or XML_ParseBuffer. */ + +int XMLPARSEAPI +XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); + +/* If this function is called, then the parser will be passed +as the first argument to callbacks instead of userData. +The userData will still be accessible using XML_GetUserData. */ + +void XMLPARSEAPI +XML_UseParserAsHandlerArg(XML_Parser parser); + +/* Sets the base to be used for resolving relative URIs in system identifiers in +declarations. Resolving relative identifiers is left to the application: +this value will be passed through as the base argument to the +XML_ExternalEntityRefHandler, XML_NotationDeclHandler +and XML_UnparsedEntityDeclHandler. The base argument will be copied. +Returns zero if out of memory, non-zero otherwise. */ + +int XMLPARSEAPI +XML_SetBase(XML_Parser parser, const XML_Char *base); + +const XML_Char XMLPARSEAPI * +XML_GetBase(XML_Parser parser); + +/* Returns the number of the attribute/value pairs passed in last call +to the XML_StartElementHandler that were specified in the start-tag +rather than defaulted. Each attribute/value pair counts as 2; thus +this correspondds to an index into the atts array passed to the +XML_StartElementHandler. */ + +int XMLPARSEAPI +XML_GetSpecifiedAttributeCount(XML_Parser parser); + +/* Returns the index of the ID attribute passed in the last call to +XML_StartElementHandler, or -1 if there is no ID attribute. Each +attribute/value pair counts as 2; thus this correspondds to an index +into the atts array passed to the XML_StartElementHandler. */ + +int XMLPARSEAPI +XML_GetIdAttributeIndex(XML_Parser parser); + +/* Parses some input. Returns 0 if a fatal error is detected. +The last call to XML_Parse must have isFinal true; +len may be zero for this call (or any other). */ +int XMLPARSEAPI +XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); + +void XMLPARSEAPI * +XML_GetBuffer(XML_Parser parser, int len); + +int XMLPARSEAPI +XML_ParseBuffer(XML_Parser parser, int len, int isFinal); + +/* Creates an XML_Parser object that can parse an external general entity; +context is a '\0'-terminated string specifying the parse context; +encoding is a '\0'-terminated string giving the name of the externally specified encoding, +or null if there is no externally specified encoding. +The context string consists of a sequence of tokens separated by formfeeds (\f); +a token consisting of a name specifies that the general entity of the name +is open; a token of the form prefix=uri specifies the namespace for a particular +prefix; a token of the form =uri specifies the default namespace. +This can be called at any point after the first call to an ExternalEntityRefHandler +so longer as the parser has not yet been freed. +The new parser is completely independent and may safely be used in a separate thread. +The handlers and userData are initialized from the parser argument. +Returns 0 if out of memory. Otherwise returns a new XML_Parser object. */ +XML_Parser XMLPARSEAPI +XML_ExternalEntityParserCreate(XML_Parser parser, + const XML_Char *context, + const XML_Char *encoding); + +enum XML_ParamEntityParsing { + XML_PARAM_ENTITY_PARSING_NEVER, + XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, + XML_PARAM_ENTITY_PARSING_ALWAYS +}; + +/* Controls parsing of parameter entities (including the external DTD +subset). If parsing of parameter entities is enabled, then references +to external parameter entities (including the external DTD subset) +will be passed to the handler set with +XML_SetExternalEntityRefHandler. The context passed will be 0. +Unlike external general entities, external parameter entities can only +be parsed synchronously. If the external parameter entity is to be +parsed, it must be parsed during the call to the external entity ref +handler: the complete sequence of XML_ExternalEntityParserCreate, +XML_Parse/XML_ParseBuffer and XML_ParserFree calls must be made during +this call. After XML_ExternalEntityParserCreate has been called to +create the parser for the external parameter entity (context must be 0 +for this call), it is illegal to make any calls on the old parser +until XML_ParserFree has been called on the newly created parser. If +the library has been compiled without support for parameter entity +parsing (ie without XML_DTD being defined), then +XML_SetParamEntityParsing will return 0 if parsing of parameter +entities is requested; otherwise it will return non-zero. */ + +int XMLPARSEAPI +XML_SetParamEntityParsing(XML_Parser parser, + enum XML_ParamEntityParsing parsing); + +enum XML_Error { + XML_ERROR_NONE, + XML_ERROR_NO_MEMORY, + XML_ERROR_SYNTAX, + XML_ERROR_NO_ELEMENTS, + XML_ERROR_INVALID_TOKEN, + XML_ERROR_UNCLOSED_TOKEN, + XML_ERROR_PARTIAL_CHAR, + XML_ERROR_TAG_MISMATCH, + XML_ERROR_DUPLICATE_ATTRIBUTE, + XML_ERROR_JUNK_AFTER_DOC_ELEMENT, + XML_ERROR_PARAM_ENTITY_REF, + XML_ERROR_UNDEFINED_ENTITY, + XML_ERROR_RECURSIVE_ENTITY_REF, + XML_ERROR_ASYNC_ENTITY, + XML_ERROR_BAD_CHAR_REF, + XML_ERROR_BINARY_ENTITY_REF, + XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, + XML_ERROR_MISPLACED_XML_PI, + XML_ERROR_UNKNOWN_ENCODING, + XML_ERROR_INCORRECT_ENCODING, + XML_ERROR_UNCLOSED_CDATA_SECTION, + XML_ERROR_EXTERNAL_ENTITY_HANDLING, + XML_ERROR_NOT_STANDALONE, + XML_ERROR_UNEXPECTED_STATE +}; + +/* If XML_Parse or XML_ParseBuffer have returned 0, then XML_GetErrorCode +returns information about the error. */ + +enum XML_Error XMLPARSEAPI +XML_GetErrorCode(XML_Parser parser); + +/* These functions return information about the current parse location. +They may be called when XML_Parse or XML_ParseBuffer return 0; +in this case the location is the location of the character at which +the error was detected. +They may also be called from any other callback called to report +some parse event; in this the location is the location of the first +of the sequence of characters that generated the event. */ + +int XMLPARSEAPI XML_GetCurrentLineNumber(XML_Parser parser); +int XMLPARSEAPI XML_GetCurrentColumnNumber(XML_Parser parser); +long XMLPARSEAPI XML_GetCurrentByteIndex(XML_Parser parser); + +/* Return the number of bytes in the current event. +Returns 0 if the event is in an internal entity. */ + +int XMLPARSEAPI +XML_GetCurrentByteCount(XML_Parser parser); + +/* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets + the integer pointed to by offset to the offset within this buffer + of the current parse position, and sets the integer pointed to by size + to the size of this buffer (the number of input bytes). Otherwise + returns a null pointer. Also returns a null pointer if a parse isn't active. + + NOTE: The character pointer returned should not be used outside + the handler that makes the call. */ + +const char XMLPARSEAPI * +XML_GetInputContext(XML_Parser parser, + int *offset, + int *size); + +/* For backwards compatibility with previous versions. */ +#define XML_GetErrorLineNumber XML_GetCurrentLineNumber +#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber +#define XML_GetErrorByteIndex XML_GetCurrentByteIndex + +/* Frees memory used by the parser. */ +void XMLPARSEAPI +XML_ParserFree(XML_Parser parser); + +/* Returns a string describing the error. */ +const XML_LChar XMLPARSEAPI * +XML_ErrorString(int code); + +/* Return a string containing the version number of this expat */ +const XML_LChar XMLPARSEAPI * +XML_ExpatVersion(); + +#ifdef __cplusplus +} +#endif + +#endif /* not XmlParse_INCLUDED */ diff --git a/Build/source/extra/expat/lib/expat.mak b/Build/source/extra/expat/lib/expat.mak new file mode 100644 index 00000000000..0ef8041b1d1 --- /dev/null +++ b/Build/source/extra/expat/lib/expat.mak @@ -0,0 +1,168 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on expat.dsp +!IF "$(CFG)" == "" +CFG=expat - Win32 Debug +!MESSAGE No configuration specified. Defaulting to expat - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "expat - Win32 Release" && "$(CFG)" != "expat - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "expat.mak" CFG="expat - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "expat - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "expat - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "expat - Win32 Release" + +OUTDIR=.\Release +INTDIR=.\Release +# Begin Custom Macros +OutDir=.\Release +# End Custom Macros + +ALL : "$(OUTDIR)\expat.lib" + + +CLEAN : + -@erase "$(INTDIR)\vc60.idb" + -@erase "$(INTDIR)\xmlparse.obj" + -@erase "$(INTDIR)\xmlrole.obj" + -@erase "$(INTDIR)\xmltok.obj" + -@erase "$(OUTDIR)\expat.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "COMPILED_FROM_DSP" /D VERSION=\"expat_1.95.1\" /Fp"$(INTDIR)\expat.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\expat.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"$(OUTDIR)\expat.lib" +LIB32_OBJS= \ + "$(INTDIR)\xmlparse.obj" \ + "$(INTDIR)\xmlrole.obj" \ + "$(INTDIR)\xmltok.obj" + +"$(OUTDIR)\expat.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "expat - Win32 Debug" + +OUTDIR=.\Debug +INTDIR=.\Debug +# Begin Custom Macros +OutDir=.\Debug +# End Custom Macros + +ALL : "$(OUTDIR)\expat.lib" + + +CLEAN : + -@erase "$(INTDIR)\vc60.idb" + -@erase "$(INTDIR)\vc60.pdb" + -@erase "$(INTDIR)\xmlparse.obj" + -@erase "$(INTDIR)\xmlrole.obj" + -@erase "$(INTDIR)\xmltok.obj" + -@erase "$(OUTDIR)\expat.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "COMPILED_FROM_DSP" /D VERSION=\"expat_1.95.1\" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\expat.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"$(OUTDIR)\expat.lib" +LIB32_OBJS= \ + "$(INTDIR)\xmlparse.obj" \ + "$(INTDIR)\xmlrole.obj" \ + "$(INTDIR)\xmltok.obj" + +"$(OUTDIR)\expat.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(NO_EXTERNAL_DEPS)" != "1" +!IF EXISTS("expat.dep") +!INCLUDE "expat.dep" +!ELSE +!MESSAGE Warning: cannot find "expat.dep" +!ENDIF +!ENDIF + + +!IF "$(CFG)" == "expat - Win32 Release" || "$(CFG)" == "expat - Win32 Debug" +SOURCE=.\xmlparse.c + +"$(INTDIR)\xmlparse.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\xmlrole.c + +"$(INTDIR)\xmlrole.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\xmltok.c + +"$(INTDIR)\xmltok.obj" : $(SOURCE) "$(INTDIR)" + + + +!ENDIF + diff --git a/Build/source/extra/expat/lib/expat.plg b/Build/source/extra/expat/lib/expat.plg new file mode 100644 index 00000000000..da52bfdd21f --- /dev/null +++ b/Build/source/extra/expat/lib/expat.plg @@ -0,0 +1,16 @@ + + +
+

Build Log

+

+--------------------Configuration: expat - Win32 Debug-------------------- +

+

Command Lines

+ + + +

Results

+expat.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/Build/source/extra/expat/lib/expat.vcproj b/Build/source/extra/expat/lib/expat.vcproj new file mode 100644 index 00000000000..8f62d2587a7 --- /dev/null +++ b/Build/source/extra/expat/lib/expat.vcproj @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Build/source/extra/expat/lib/iasciitab.h b/Build/source/extra/expat/lib/iasciitab.h new file mode 100644 index 00000000000..55dbc398b87 --- /dev/null +++ b/Build/source/extra/expat/lib/iasciitab.h @@ -0,0 +1,38 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +/* Like asciitab.h, except that 0xD has code BT_S rather than BT_CR */ +/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, +/* 0x0C */ BT_NONXML, BT_S, BT_NONXML, BT_NONXML, +/* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, +/* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, +/* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, +/* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, +/* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, +/* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, +/* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, +/* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, +/* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, +/* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, +/* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, +/* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, +/* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, +/* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, +/* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, +/* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, diff --git a/Build/source/extra/expat/lib/latin1tab.h b/Build/source/extra/expat/lib/latin1tab.h new file mode 100644 index 00000000000..178b1d186dd --- /dev/null +++ b/Build/source/extra/expat/lib/latin1tab.h @@ -0,0 +1,37 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +/* 0x80 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0x84 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0x88 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0x8C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0x90 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0x94 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0x98 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0x9C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0xA0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0xA4 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0xA8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, +/* 0xAC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0xB0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0xB4 */ BT_OTHER, BT_NMSTRT, BT_OTHER, BT_NAME, +/* 0xB8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, +/* 0xBC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, +/* 0xC0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xC4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xC8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xCC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xD0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xD4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, +/* 0xD8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xDC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xE0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xE4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xE8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xEC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xF0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xF4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, +/* 0xF8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, +/* 0xFC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, diff --git a/Build/source/extra/expat/lib/nametab.h b/Build/source/extra/expat/lib/nametab.h new file mode 100644 index 00000000000..b05e62c77a6 --- /dev/null +++ b/Build/source/extra/expat/lib/nametab.h @@ -0,0 +1,150 @@ +static const unsigned namingBitmap[] = { +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, +0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, +0x00000000, 0x04000000, 0x87FFFFFE, 0x07FFFFFE, +0x00000000, 0x00000000, 0xFF7FFFFF, 0xFF7FFFFF, +0xFFFFFFFF, 0x7FF3FFFF, 0xFFFFFDFE, 0x7FFFFFFF, +0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE00F, 0xFC31FFFF, +0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, +0xFFFFFFFF, 0xF80001FF, 0x00000003, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0xFFFFD740, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, +0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, +0xFFFF0003, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, +0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, +0x0000007F, 0x00000000, 0xFFFF0000, 0x000707FF, +0x00000000, 0x07FFFFFE, 0x000007FE, 0xFFFE0000, +0xFFFFFFFF, 0x7CFFFFFF, 0x002F7FFF, 0x00000060, +0xFFFFFFE0, 0x23FFFFFF, 0xFF000000, 0x00000003, +0xFFF99FE0, 0x03C5FDFF, 0xB0000000, 0x00030003, +0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, +0xFFFBAFE0, 0x23EDFDFF, 0x00000000, 0x00000001, +0xFFF99FE0, 0x23CDFDFF, 0xB0000000, 0x00000003, +0xD63DC7E0, 0x03BFC718, 0x00000000, 0x00000000, +0xFFFDDFE0, 0x03EFFDFF, 0x00000000, 0x00000003, +0xFFFDDFE0, 0x03EFFDFF, 0x40000000, 0x00000003, +0xFFFDDFE0, 0x03FFFDFF, 0x00000000, 0x00000003, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0xFFFFFFFE, 0x000D7FFF, 0x0000003F, 0x00000000, +0xFEF02596, 0x200D6CAE, 0x0000001F, 0x00000000, +0x00000000, 0x00000000, 0xFFFFFEFF, 0x000003FF, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0xFFFFFFFF, 0xFFFF003F, 0x007FFFFF, +0x0007DAED, 0x50000000, 0x82315001, 0x002C62AB, +0x40000000, 0xF580C900, 0x00000007, 0x02010800, +0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, +0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, +0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, +0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, +0x00000000, 0x00004C40, 0x00000000, 0x00000000, +0x00000007, 0x00000000, 0x00000000, 0x00000000, +0x00000080, 0x000003FE, 0xFFFFFFFE, 0xFFFFFFFF, +0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x07FFFFFF, +0xFFFFFFE0, 0x00001FFF, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, +0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, +0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, +0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, +0x00000000, 0x07FF6000, 0x87FFFFFE, 0x07FFFFFE, +0x00000000, 0x00800000, 0xFF7FFFFF, 0xFF7FFFFF, +0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, +0xFFFFFFFF, 0xF80001FF, 0x00030003, 0x00000000, +0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000003, +0xFFFFD7C0, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, +0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, +0xFFFF007B, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, +0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, +0xFFFE007F, 0xBBFFFFFB, 0xFFFF0016, 0x000707FF, +0x00000000, 0x07FFFFFE, 0x0007FFFF, 0xFFFF03FF, +0xFFFFFFFF, 0x7CFFFFFF, 0xFFEF7FFF, 0x03FF3DFF, +0xFFFFFFEE, 0xF3FFFFFF, 0xFF1E3FFF, 0x0000FFCF, +0xFFF99FEE, 0xD3C5FDFF, 0xB080399F, 0x0003FFCF, +0xFFF987E4, 0xD36DFDFF, 0x5E003987, 0x001FFFC0, +0xFFFBAFEE, 0xF3EDFDFF, 0x00003BBF, 0x0000FFC1, +0xFFF99FEE, 0xF3CDFDFF, 0xB0C0398F, 0x0000FFC3, +0xD63DC7EC, 0xC3BFC718, 0x00803DC7, 0x0000FF80, +0xFFFDDFEE, 0xC3EFFDFF, 0x00603DDF, 0x0000FFC3, +0xFFFDDFEC, 0xC3EFFDFF, 0x40603DDF, 0x0000FFC3, +0xFFFDDFEC, 0xC3FFFDFF, 0x00803DCF, 0x0000FFC3, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FFF, 0x00000000, +0xFEF02596, 0x3BFF6CAE, 0x03FF3F5F, 0x00000000, +0x03000000, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE03FF, +0xFEBF0FDF, 0x02FE3FFF, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x1FFF0000, 0x00000002, +0x000000A0, 0x003EFFFE, 0xFFFFFFFE, 0xFFFFFFFF, +0x661FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x77FFFFFF, +}; +static const unsigned char nmstrtPages[] = { +0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00, +0x00, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, +0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, +0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x15, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static const unsigned char namePages[] = { +0x19, 0x03, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x00, +0x00, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, +0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, +0x26, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x27, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; diff --git a/Build/source/extra/expat/lib/utf8tab.h b/Build/source/extra/expat/lib/utf8tab.h new file mode 100644 index 00000000000..9e3b6b83eb6 --- /dev/null +++ b/Build/source/extra/expat/lib/utf8tab.h @@ -0,0 +1,38 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + + +/* 0x80 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0x84 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0x88 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0x8C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0x90 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0x94 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0x98 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0x9C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xA0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xA4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xA8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xAC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xB0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xB4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xB8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xBC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, +/* 0xC0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xC4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xC8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xCC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xD0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xD4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xD8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xDC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, +/* 0xE0 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, +/* 0xE4 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, +/* 0xE8 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, +/* 0xEC */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, +/* 0xF0 */ BT_LEAD4, BT_LEAD4, BT_LEAD4, BT_LEAD4, +/* 0xF4 */ BT_LEAD4, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0xF8 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, +/* 0xFC */ BT_NONXML, BT_NONXML, BT_MALFORM, BT_MALFORM, diff --git a/Build/source/extra/expat/lib/winconfig.h b/Build/source/extra/expat/lib/winconfig.h new file mode 100644 index 00000000000..2863a2642bf --- /dev/null +++ b/Build/source/extra/expat/lib/winconfig.h @@ -0,0 +1,29 @@ +/*================================================================ +** Copyright 2000, Clark Cooper +** All rights reserved. +** +** This is free software. You are permitted to copy, distribute, or modify +** it under the terms of the MIT/X license (contained in the COPYING file +** with this distribution.) +** +** +*/ + +#ifndef WINCONFIG_H +#define WINCONFIG_H + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#undef WIN32_LEAN_AND_MEAN + +#include +#include + +#define XML_NS 1 +#define XML_DTD 1 +#define XML_BYTE_ORDER 12 +#define XML_CONTEXT_BYTES 1024 + +#endif /* ndef WINCONFIG_H */ diff --git a/Build/source/extra/expat/lib/xmlparse.c b/Build/source/extra/expat/lib/xmlparse.c new file mode 100644 index 00000000000..c7ccb9f7264 --- /dev/null +++ b/Build/source/extra/expat/lib/xmlparse.c @@ -0,0 +1,4625 @@ +/* +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +static char RCSId[] + = "$Header: /cvsroot/expat/expat/lib/xmlparse.c,v 1.11 2000/10/22 19:20:23 coopercc Exp $"; + +#ifdef COMPILED_FROM_DSP +# include "winconfig.h" +# define XMLPARSEAPI __declspec(dllexport) +# include "expat.h" +# undef XMLPARSEAPI +#else +#include + +#ifdef __declspec +# define XMLPARSEAPI __declspec(dllexport) +#endif + +#include "expat.h" + +#ifdef __declspec +# undef XMLPARSEAPI +#endif +#endif /* ndef COMPILED_FROM_DSP */ + +#include + +#ifdef XML_UNICODE +#define XML_ENCODE_MAX XML_UTF16_ENCODE_MAX +#define XmlConvert XmlUtf16Convert +#define XmlGetInternalEncoding XmlGetUtf16InternalEncoding +#define XmlGetInternalEncodingNS XmlGetUtf16InternalEncodingNS +#define XmlEncode XmlUtf16Encode +#define MUST_CONVERT(enc, s) (!(enc)->isUtf16 || (((unsigned long)s) & 1)) +typedef unsigned short ICHAR; +#else +#define XML_ENCODE_MAX XML_UTF8_ENCODE_MAX +#define XmlConvert XmlUtf8Convert +#define XmlGetInternalEncoding XmlGetUtf8InternalEncoding +#define XmlGetInternalEncodingNS XmlGetUtf8InternalEncodingNS +#define XmlEncode XmlUtf8Encode +#define MUST_CONVERT(enc, s) (!(enc)->isUtf8) +typedef char ICHAR; +#endif + + +#ifndef XML_NS + +#define XmlInitEncodingNS XmlInitEncoding +#define XmlInitUnknownEncodingNS XmlInitUnknownEncoding +#undef XmlGetInternalEncodingNS +#define XmlGetInternalEncodingNS XmlGetInternalEncoding +#define XmlParseXmlDeclNS XmlParseXmlDecl + +#endif + +#ifdef XML_UNICODE_WCHAR_T +#define XML_T(x) L ## x +#else +#define XML_T(x) x +#endif + +/* Round up n to be a multiple of sz, where sz is a power of 2. */ +#define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1)) + +#include "xmltok.h" +#include "xmlrole.h" + +typedef const XML_Char *KEY; + +typedef struct { + KEY name; +} NAMED; + +typedef struct { + NAMED **v; + size_t size; + size_t used; + size_t usedLim; + XML_Memory_Handling_Suite *mem; +} HASH_TABLE; + +typedef struct { + NAMED **p; + NAMED **end; +} HASH_TABLE_ITER; + +#define INIT_TAG_BUF_SIZE 32 /* must be a multiple of sizeof(XML_Char) */ +#define INIT_DATA_BUF_SIZE 1024 +#define INIT_ATTS_SIZE 16 +#define INIT_BLOCK_SIZE 1024 +#define INIT_BUFFER_SIZE 1024 + +#define EXPAND_SPARE 24 + +typedef struct binding { + struct prefix *prefix; + struct binding *nextTagBinding; + struct binding *prevPrefixBinding; + const struct attribute_id *attId; + XML_Char *uri; + int uriLen; + int uriAlloc; +} BINDING; + +typedef struct prefix { + const XML_Char *name; + BINDING *binding; +} PREFIX; + +typedef struct { + const XML_Char *str; + const XML_Char *localPart; + int uriLen; +} TAG_NAME; + +typedef struct tag { + struct tag *parent; + const char *rawName; + int rawNameLength; + TAG_NAME name; + char *buf; + char *bufEnd; + BINDING *bindings; +} TAG; + +typedef struct { + const XML_Char *name; + const XML_Char *textPtr; + int textLen; + const XML_Char *systemId; + const XML_Char *base; + const XML_Char *publicId; + const XML_Char *notation; + char open; + char is_param; +} ENTITY; + +typedef struct { + enum XML_Content_Type type; + enum XML_Content_Quant quant; + const XML_Char * name; + int firstchild; + int lastchild; + int childcnt; + int nextsib; +} CONTENT_SCAFFOLD; + +typedef struct block { + struct block *next; + int size; + XML_Char s[1]; +} BLOCK; + +typedef struct { + BLOCK *blocks; + BLOCK *freeBlocks; + const XML_Char *end; + XML_Char *ptr; + XML_Char *start; + XML_Memory_Handling_Suite *mem; +} STRING_POOL; + +/* The XML_Char before the name is used to determine whether +an attribute has been specified. */ +typedef struct attribute_id { + XML_Char *name; + PREFIX *prefix; + char maybeTokenized; + char xmlns; +} ATTRIBUTE_ID; + +typedef struct { + const ATTRIBUTE_ID *id; + char isCdata; + const XML_Char *value; +} DEFAULT_ATTRIBUTE; + +typedef struct { + const XML_Char *name; + PREFIX *prefix; + const ATTRIBUTE_ID *idAtt; + int nDefaultAtts; + int allocDefaultAtts; + DEFAULT_ATTRIBUTE *defaultAtts; +} ELEMENT_TYPE; + +typedef struct { + HASH_TABLE generalEntities; + HASH_TABLE elementTypes; + HASH_TABLE attributeIds; + HASH_TABLE prefixes; + STRING_POOL pool; + int complete; + int standalone; +#ifdef XML_DTD + HASH_TABLE paramEntities; +#endif /* XML_DTD */ + PREFIX defaultPrefix; + /* === scaffolding for building content model === */ + int in_eldecl; + CONTENT_SCAFFOLD *scaffold; + unsigned contentStringLen; + unsigned scaffSize; + unsigned scaffCount; + int scaffLevel; + int *scaffIndex; +} DTD; + +typedef struct open_internal_entity { + const char *internalEventPtr; + const char *internalEventEndPtr; + struct open_internal_entity *next; + ENTITY *entity; +} OPEN_INTERNAL_ENTITY; + +typedef enum XML_Error Processor(XML_Parser parser, + const char *start, + const char *end, + const char **endPtr); + +static Processor prologProcessor; +static Processor prologInitProcessor; +static Processor contentProcessor; +static Processor cdataSectionProcessor; +#ifdef XML_DTD +static Processor ignoreSectionProcessor; +#endif /* XML_DTD */ +static Processor epilogProcessor; +static Processor errorProcessor; +static Processor externalEntityInitProcessor; +static Processor externalEntityInitProcessor2; +static Processor externalEntityInitProcessor3; +static Processor externalEntityContentProcessor; + +static enum XML_Error +handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName); +static enum XML_Error +processXmlDecl(XML_Parser parser, int isGeneralTextEntity, const char *, const char *); +static enum XML_Error +initializeEncoding(XML_Parser parser); +static enum XML_Error +doProlog(XML_Parser parser, const ENCODING *enc, const char *s, + const char *end, int tok, const char *next, const char **nextPtr); +static enum XML_Error +processInternalParamEntity(XML_Parser parser, ENTITY *entity); +static enum XML_Error +doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, + const char *start, const char *end, const char **endPtr); +static enum XML_Error +doCdataSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, const char **nextPtr); +#ifdef XML_DTD +static enum XML_Error +doIgnoreSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, const char **nextPtr); +#endif /* XML_DTD */ +static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *, const char *s, + TAG_NAME *tagNamePtr, BINDING **bindingsPtr); +static +int addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr); + +static int +defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *, + int isCdata, int isId, const XML_Char *dfltValue, + XML_Parser parser); + +static enum XML_Error +storeAttributeValue(XML_Parser parser, const ENCODING *, int isCdata, const char *, const char *, + STRING_POOL *); +static enum XML_Error +appendAttributeValue(XML_Parser parser, const ENCODING *, int isCdata, const char *, const char *, + STRING_POOL *); +static ATTRIBUTE_ID * +getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); +static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *); +static enum XML_Error +storeEntityValue(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); +static int +reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); +static int +reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); +static void +reportDefault(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); + +static const XML_Char *getContext(XML_Parser parser); +static int setContext(XML_Parser parser, const XML_Char *context); +static void normalizePublicId(XML_Char *s); +static int dtdInit(DTD *, XML_Parser parser); + +static void dtdDestroy(DTD *, XML_Parser parser); + +static int dtdCopy(DTD *newDtd, const DTD *oldDtd, XML_Parser parser); + +static int copyEntityTable(HASH_TABLE *, STRING_POOL *, const HASH_TABLE *, + XML_Parser parser); + +#ifdef XML_DTD +static void dtdSwap(DTD *, DTD *); +#endif /* XML_DTD */ + +static NAMED *lookup(HASH_TABLE *table, KEY name, size_t createSize); + +static void hashTableInit(HASH_TABLE *, XML_Memory_Handling_Suite *ms); + +static void hashTableDestroy(HASH_TABLE *); +static void hashTableIterInit(HASH_TABLE_ITER *, const HASH_TABLE *); +static NAMED *hashTableIterNext(HASH_TABLE_ITER *); +static void poolInit(STRING_POOL *, XML_Memory_Handling_Suite *ms); +static void poolClear(STRING_POOL *); +static void poolDestroy(STRING_POOL *); +static XML_Char *poolAppend(STRING_POOL *pool, const ENCODING *enc, + const char *ptr, const char *end); +static XML_Char *poolStoreString(STRING_POOL *pool, const ENCODING *enc, + const char *ptr, const char *end); + +static int poolGrow(STRING_POOL *pool); + +static int nextScaffoldPart(XML_Parser parser); +static XML_Content *build_model(XML_Parser parser); + +static const XML_Char *poolCopyString(STRING_POOL *pool, const XML_Char *s); +static const XML_Char *poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n); +static const XML_Char *poolAppendString(STRING_POOL *pool, const XML_Char *s); +static ELEMENT_TYPE * getElementType(XML_Parser Paraser, + const ENCODING *enc, + const char *ptr, + const char *end); + +#define poolStart(pool) ((pool)->start) +#define poolEnd(pool) ((pool)->ptr) +#define poolLength(pool) ((pool)->ptr - (pool)->start) +#define poolChop(pool) ((void)--(pool->ptr)) +#define poolLastChar(pool) (((pool)->ptr)[-1]) +#define poolDiscard(pool) ((pool)->ptr = (pool)->start) +#define poolFinish(pool) ((pool)->start = (pool)->ptr) +#define poolAppendChar(pool, c) \ + (((pool)->ptr == (pool)->end && !poolGrow(pool)) \ + ? 0 \ + : ((*((pool)->ptr)++ = c), 1)) + +typedef struct { + /* The first member must be userData so that the XML_GetUserData macro works. */ + void *m_userData; + void *m_handlerArg; + char *m_buffer; + XML_Memory_Handling_Suite m_mem; + /* first character to be parsed */ + const char *m_bufferPtr; + /* past last character to be parsed */ + char *m_bufferEnd; + /* allocated end of buffer */ + const char *m_bufferLim; + long m_parseEndByteIndex; + const char *m_parseEndPtr; + XML_Char *m_dataBuf; + XML_Char *m_dataBufEnd; + XML_StartElementHandler m_startElementHandler; + XML_EndElementHandler m_endElementHandler; + XML_CharacterDataHandler m_characterDataHandler; + XML_ProcessingInstructionHandler m_processingInstructionHandler; + XML_CommentHandler m_commentHandler; + XML_StartCdataSectionHandler m_startCdataSectionHandler; + XML_EndCdataSectionHandler m_endCdataSectionHandler; + XML_DefaultHandler m_defaultHandler; + XML_StartDoctypeDeclHandler m_startDoctypeDeclHandler; + XML_EndDoctypeDeclHandler m_endDoctypeDeclHandler; + XML_UnparsedEntityDeclHandler m_unparsedEntityDeclHandler; + XML_NotationDeclHandler m_notationDeclHandler; + XML_StartNamespaceDeclHandler m_startNamespaceDeclHandler; + XML_EndNamespaceDeclHandler m_endNamespaceDeclHandler; + XML_NotStandaloneHandler m_notStandaloneHandler; + XML_ExternalEntityRefHandler m_externalEntityRefHandler; + void *m_externalEntityRefHandlerArg; + XML_UnknownEncodingHandler m_unknownEncodingHandler; + XML_ElementDeclHandler m_elementDeclHandler; + XML_AttlistDeclHandler m_attlistDeclHandler; + XML_EntityDeclHandler m_entityDeclHandler; + XML_XmlDeclHandler m_xmlDeclHandler; + const ENCODING *m_encoding; + INIT_ENCODING m_initEncoding; + const ENCODING *m_internalEncoding; + const XML_Char *m_protocolEncodingName; + int m_ns; + int m_ns_triplets; + void *m_unknownEncodingMem; + void *m_unknownEncodingData; + void *m_unknownEncodingHandlerData; + void (*m_unknownEncodingRelease)(void *); + PROLOG_STATE m_prologState; + Processor *m_processor; + enum XML_Error m_errorCode; + const char *m_eventPtr; + const char *m_eventEndPtr; + const char *m_positionPtr; + OPEN_INTERNAL_ENTITY *m_openInternalEntities; + int m_defaultExpandInternalEntities; + int m_tagLevel; + ENTITY *m_declEntity; + const XML_Char *m_doctypeName; + const XML_Char *m_doctypeSysid; + const XML_Char *m_doctypePubid; + const XML_Char *m_declAttributeType; + const XML_Char *m_declNotationName; + const XML_Char *m_declNotationPublicId; + ELEMENT_TYPE *m_declElementType; + ATTRIBUTE_ID *m_declAttributeId; + char m_declAttributeIsCdata; + char m_declAttributeIsId; + DTD m_dtd; + const XML_Char *m_curBase; + TAG *m_tagStack; + TAG *m_freeTagList; + BINDING *m_inheritedBindings; + BINDING *m_freeBindingList; + int m_attsSize; + int m_nSpecifiedAtts; + int m_idAttIndex; + ATTRIBUTE *m_atts; + POSITION m_position; + STRING_POOL m_tempPool; + STRING_POOL m_temp2Pool; + char *m_groupConnector; + unsigned m_groupSize; + int m_hadExternalDoctype; + XML_Char m_namespaceSeparator; +#ifdef XML_DTD + enum XML_ParamEntityParsing m_paramEntityParsing; + XML_Parser m_parentParser; +#endif +} Parser; + +#define MALLOC(s) (((Parser *)parser)->m_mem.malloc_fcn((s))) +#define REALLOC(p,s) (((Parser *)parser)->m_mem.realloc_fcn((p),(s))) +#define FREE(p) (((Parser *)parser)->m_mem.free_fcn((p))) + +#define userData (((Parser *)parser)->m_userData) +#define handlerArg (((Parser *)parser)->m_handlerArg) +#define startElementHandler (((Parser *)parser)->m_startElementHandler) +#define endElementHandler (((Parser *)parser)->m_endElementHandler) +#define characterDataHandler (((Parser *)parser)->m_characterDataHandler) +#define processingInstructionHandler (((Parser *)parser)->m_processingInstructionHandler) +#define commentHandler (((Parser *)parser)->m_commentHandler) +#define startCdataSectionHandler (((Parser *)parser)->m_startCdataSectionHandler) +#define endCdataSectionHandler (((Parser *)parser)->m_endCdataSectionHandler) +#define defaultHandler (((Parser *)parser)->m_defaultHandler) +#define startDoctypeDeclHandler (((Parser *)parser)->m_startDoctypeDeclHandler) +#define endDoctypeDeclHandler (((Parser *)parser)->m_endDoctypeDeclHandler) +#define unparsedEntityDeclHandler (((Parser *)parser)->m_unparsedEntityDeclHandler) +#define notationDeclHandler (((Parser *)parser)->m_notationDeclHandler) +#define startNamespaceDeclHandler (((Parser *)parser)->m_startNamespaceDeclHandler) +#define endNamespaceDeclHandler (((Parser *)parser)->m_endNamespaceDeclHandler) +#define notStandaloneHandler (((Parser *)parser)->m_notStandaloneHandler) +#define externalEntityRefHandler (((Parser *)parser)->m_externalEntityRefHandler) +#define externalEntityRefHandlerArg (((Parser *)parser)->m_externalEntityRefHandlerArg) +#define unknownEncodingHandler (((Parser *)parser)->m_unknownEncodingHandler) +#define elementDeclHandler (((Parser *)parser)->m_elementDeclHandler) +#define attlistDeclHandler (((Parser *)parser)->m_attlistDeclHandler) +#define entityDeclHandler (((Parser *)parser)->m_entityDeclHandler) +#define xmlDeclHandler (((Parser *)parser)->m_xmlDeclHandler) +#define encoding (((Parser *)parser)->m_encoding) +#define initEncoding (((Parser *)parser)->m_initEncoding) +#define internalEncoding (((Parser *)parser)->m_internalEncoding) +#define unknownEncodingMem (((Parser *)parser)->m_unknownEncodingMem) +#define unknownEncodingData (((Parser *)parser)->m_unknownEncodingData) +#define unknownEncodingHandlerData \ + (((Parser *)parser)->m_unknownEncodingHandlerData) +#define unknownEncodingRelease (((Parser *)parser)->m_unknownEncodingRelease) +#define protocolEncodingName (((Parser *)parser)->m_protocolEncodingName) +#define ns (((Parser *)parser)->m_ns) +#define ns_triplets (((Parser *)parser)->m_ns_triplets) +#define prologState (((Parser *)parser)->m_prologState) +#define processor (((Parser *)parser)->m_processor) +#define errorCode (((Parser *)parser)->m_errorCode) +#define eventPtr (((Parser *)parser)->m_eventPtr) +#define eventEndPtr (((Parser *)parser)->m_eventEndPtr) +#define positionPtr (((Parser *)parser)->m_positionPtr) +#define position (((Parser *)parser)->m_position) +#define openInternalEntities (((Parser *)parser)->m_openInternalEntities) +#define defaultExpandInternalEntities (((Parser *)parser)->m_defaultExpandInternalEntities) +#define tagLevel (((Parser *)parser)->m_tagLevel) +#define buffer (((Parser *)parser)->m_buffer) +#define bufferPtr (((Parser *)parser)->m_bufferPtr) +#define bufferEnd (((Parser *)parser)->m_bufferEnd) +#define parseEndByteIndex (((Parser *)parser)->m_parseEndByteIndex) +#define parseEndPtr (((Parser *)parser)->m_parseEndPtr) +#define bufferLim (((Parser *)parser)->m_bufferLim) +#define dataBuf (((Parser *)parser)->m_dataBuf) +#define dataBufEnd (((Parser *)parser)->m_dataBufEnd) +#define dtd (((Parser *)parser)->m_dtd) +#define curBase (((Parser *)parser)->m_curBase) +#define declEntity (((Parser *)parser)->m_declEntity) +#define doctypeName (((Parser *)parser)->m_doctypeName) +#define doctypeSysid (((Parser *)parser)->m_doctypeSysid) +#define doctypePubid (((Parser *)parser)->m_doctypePubid) +#define declAttributeType (((Parser *)parser)->m_declAttributeType) +#define declNotationName (((Parser *)parser)->m_declNotationName) +#define declNotationPublicId (((Parser *)parser)->m_declNotationPublicId) +#define declElementType (((Parser *)parser)->m_declElementType) +#define declAttributeId (((Parser *)parser)->m_declAttributeId) +#define declAttributeIsCdata (((Parser *)parser)->m_declAttributeIsCdata) +#define declAttributeIsId (((Parser *)parser)->m_declAttributeIsId) +#define freeTagList (((Parser *)parser)->m_freeTagList) +#define freeBindingList (((Parser *)parser)->m_freeBindingList) +#define inheritedBindings (((Parser *)parser)->m_inheritedBindings) +#define tagStack (((Parser *)parser)->m_tagStack) +#define atts (((Parser *)parser)->m_atts) +#define attsSize (((Parser *)parser)->m_attsSize) +#define nSpecifiedAtts (((Parser *)parser)->m_nSpecifiedAtts) +#define idAttIndex (((Parser *)parser)->m_idAttIndex) +#define tempPool (((Parser *)parser)->m_tempPool) +#define temp2Pool (((Parser *)parser)->m_temp2Pool) +#define groupConnector (((Parser *)parser)->m_groupConnector) +#define groupSize (((Parser *)parser)->m_groupSize) +#define hadExternalDoctype (((Parser *)parser)->m_hadExternalDoctype) +#define namespaceSeparator (((Parser *)parser)->m_namespaceSeparator) +#ifdef XML_DTD +#define parentParser (((Parser *)parser)->m_parentParser) +#define paramEntityParsing (((Parser *)parser)->m_paramEntityParsing) +#endif /* XML_DTD */ + +#ifdef COMPILED_FROM_DSP +BOOL WINAPI DllMain(HINSTANCE h, DWORD r, LPVOID p) { + return TRUE; +} +#endif /* def COMPILED_FROM_DSP */ + +#ifdef _MSC_VER +#ifdef _DEBUG +Parser *asParser(XML_Parser parser) +{ + return parser; +} +#endif +#endif + +XML_Parser XML_ParserCreate(const XML_Char *encodingName) +{ + return XML_ParserCreate_MM(encodingName, NULL, NULL); +} + +XML_Parser XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep) +{ + XML_Char tmp[2]; + *tmp = nsSep; + return XML_ParserCreate_MM(encodingName, NULL, tmp); +} + +XML_Parser +XML_ParserCreate_MM(const XML_Char *encodingName, + const XML_Memory_Handling_Suite *memsuite, + const XML_Char *nameSep) { + + XML_Parser parser; + static + const XML_Char implicitContext[] = { + XML_T('x'), XML_T('m'), XML_T('l'), XML_T('='), + XML_T('h'), XML_T('t'), XML_T('t'), XML_T('p'), XML_T(':'), + XML_T('/'), XML_T('/'), XML_T('w'), XML_T('w'), XML_T('w'), + XML_T('.'), XML_T('w'), XML_T('3'), + XML_T('.'), XML_T('o'), XML_T('r'), XML_T('g'), + XML_T('/'), XML_T('X'), XML_T('M'), XML_T('L'), + XML_T('/'), XML_T('1'), XML_T('9'), XML_T('9'), XML_T('8'), + XML_T('/'), XML_T('n'), XML_T('a'), XML_T('m'), XML_T('e'), + XML_T('s'), XML_T('p'), XML_T('a'), XML_T('c'), XML_T('e'), + XML_T('\0') + }; + + + if (memsuite) { + XML_Memory_Handling_Suite *mtemp; + parser = memsuite->malloc_fcn(sizeof(Parser)); + mtemp = &(((Parser *) parser)->m_mem); + mtemp->malloc_fcn = memsuite->malloc_fcn; + mtemp->realloc_fcn = memsuite->realloc_fcn; + mtemp->free_fcn = memsuite->free_fcn; + } + else { + XML_Memory_Handling_Suite *mtemp; + parser = malloc(sizeof(Parser)); + mtemp = &(((Parser *) parser)->m_mem); + mtemp->malloc_fcn = malloc; + mtemp->realloc_fcn = realloc; + mtemp->free_fcn = free; + } + + if (!parser) + return parser; + processor = prologInitProcessor; + XmlPrologStateInit(&prologState); + userData = 0; + handlerArg = 0; + startElementHandler = 0; + endElementHandler = 0; + characterDataHandler = 0; + processingInstructionHandler = 0; + commentHandler = 0; + startCdataSectionHandler = 0; + endCdataSectionHandler = 0; + defaultHandler = 0; + startDoctypeDeclHandler = 0; + endDoctypeDeclHandler = 0; + unparsedEntityDeclHandler = 0; + notationDeclHandler = 0; + startNamespaceDeclHandler = 0; + endNamespaceDeclHandler = 0; + notStandaloneHandler = 0; + externalEntityRefHandler = 0; + externalEntityRefHandlerArg = parser; + unknownEncodingHandler = 0; + elementDeclHandler = 0; + attlistDeclHandler = 0; + entityDeclHandler = 0; + xmlDeclHandler = 0; + buffer = 0; + bufferPtr = 0; + bufferEnd = 0; + parseEndByteIndex = 0; + parseEndPtr = 0; + bufferLim = 0; + declElementType = 0; + declAttributeId = 0; + declEntity = 0; + doctypeName = 0; + doctypeSysid = 0; + doctypePubid = 0; + declAttributeType = 0; + declNotationName = 0; + declNotationPublicId = 0; + memset(&position, 0, sizeof(POSITION)); + errorCode = XML_ERROR_NONE; + eventPtr = 0; + eventEndPtr = 0; + positionPtr = 0; + openInternalEntities = 0; + tagLevel = 0; + tagStack = 0; + freeTagList = 0; + freeBindingList = 0; + inheritedBindings = 0; + attsSize = INIT_ATTS_SIZE; + atts = MALLOC(attsSize * sizeof(ATTRIBUTE)); + nSpecifiedAtts = 0; + dataBuf = MALLOC(INIT_DATA_BUF_SIZE * sizeof(XML_Char)); + groupSize = 0; + groupConnector = 0; + hadExternalDoctype = 0; + unknownEncodingMem = 0; + unknownEncodingRelease = 0; + unknownEncodingData = 0; + unknownEncodingHandlerData = 0; + namespaceSeparator = '!'; +#ifdef XML_DTD + parentParser = 0; + paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; +#endif + ns = 0; + ns_triplets = 0; + poolInit(&tempPool, &(((Parser *) parser)->m_mem)); + poolInit(&temp2Pool, &(((Parser *) parser)->m_mem)); + protocolEncodingName = encodingName ? poolCopyString(&tempPool, encodingName) : 0; + curBase = 0; + if (!dtdInit(&dtd, parser) || !atts || !dataBuf + || (encodingName && !protocolEncodingName)) { + XML_ParserFree(parser); + return 0; + } + dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE; + + if (nameSep) { + XmlInitEncodingNS(&initEncoding, &encoding, 0); + ns = 1; + internalEncoding = XmlGetInternalEncodingNS(); + namespaceSeparator = *nameSep; + + if (! setContext(parser, implicitContext)) { + XML_ParserFree(parser); + return 0; + } + } + else { + XmlInitEncoding(&initEncoding, &encoding, 0); + internalEncoding = XmlGetInternalEncoding(); + } + + return parser; +} /* End XML_ParserCreate_MM */ + +int XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName) +{ + if (!encodingName) + protocolEncodingName = 0; + else { + protocolEncodingName = poolCopyString(&tempPool, encodingName); + if (!protocolEncodingName) + return 0; + } + return 1; +} + +XML_Parser XML_ExternalEntityParserCreate(XML_Parser oldParser, + const XML_Char *context, + const XML_Char *encodingName) +{ + XML_Parser parser = oldParser; + DTD *oldDtd = &dtd; + XML_StartElementHandler oldStartElementHandler = startElementHandler; + XML_EndElementHandler oldEndElementHandler = endElementHandler; + XML_CharacterDataHandler oldCharacterDataHandler = characterDataHandler; + XML_ProcessingInstructionHandler oldProcessingInstructionHandler = processingInstructionHandler; + XML_CommentHandler oldCommentHandler = commentHandler; + XML_StartCdataSectionHandler oldStartCdataSectionHandler = startCdataSectionHandler; + XML_EndCdataSectionHandler oldEndCdataSectionHandler = endCdataSectionHandler; + XML_DefaultHandler oldDefaultHandler = defaultHandler; + XML_UnparsedEntityDeclHandler oldUnparsedEntityDeclHandler = unparsedEntityDeclHandler; + XML_NotationDeclHandler oldNotationDeclHandler = notationDeclHandler; + XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler = startNamespaceDeclHandler; + XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler = endNamespaceDeclHandler; + XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler; + XML_ExternalEntityRefHandler oldExternalEntityRefHandler = externalEntityRefHandler; + XML_UnknownEncodingHandler oldUnknownEncodingHandler = unknownEncodingHandler; + XML_ElementDeclHandler oldElementDeclHandler = elementDeclHandler; + XML_AttlistDeclHandler oldAttlistDeclHandler = attlistDeclHandler; + XML_EntityDeclHandler oldEntityDeclHandler = entityDeclHandler; + XML_XmlDeclHandler oldXmlDeclHandler = xmlDeclHandler; + ELEMENT_TYPE * oldDeclElementType = declElementType; + + void *oldUserData = userData; + void *oldHandlerArg = handlerArg; + int oldDefaultExpandInternalEntities = defaultExpandInternalEntities; + void *oldExternalEntityRefHandlerArg = externalEntityRefHandlerArg; +#ifdef XML_DTD + int oldParamEntityParsing = paramEntityParsing; +#endif + int oldns_triplets = ns_triplets; + + if (ns) { + XML_Char tmp[2]; + + *tmp = namespaceSeparator; + parser = XML_ParserCreate_MM(encodingName, &((Parser *)parser)->m_mem, + tmp); + } + else { + parser = XML_ParserCreate_MM(encodingName, &((Parser *)parser)->m_mem, + NULL); + } + + if (!parser) + return 0; + + startElementHandler = oldStartElementHandler; + endElementHandler = oldEndElementHandler; + characterDataHandler = oldCharacterDataHandler; + processingInstructionHandler = oldProcessingInstructionHandler; + commentHandler = oldCommentHandler; + startCdataSectionHandler = oldStartCdataSectionHandler; + endCdataSectionHandler = oldEndCdataSectionHandler; + defaultHandler = oldDefaultHandler; + unparsedEntityDeclHandler = oldUnparsedEntityDeclHandler; + notationDeclHandler = oldNotationDeclHandler; + startNamespaceDeclHandler = oldStartNamespaceDeclHandler; + endNamespaceDeclHandler = oldEndNamespaceDeclHandler; + notStandaloneHandler = oldNotStandaloneHandler; + externalEntityRefHandler = oldExternalEntityRefHandler; + unknownEncodingHandler = oldUnknownEncodingHandler; + elementDeclHandler = oldElementDeclHandler; + attlistDeclHandler = oldAttlistDeclHandler; + entityDeclHandler = oldEntityDeclHandler; + xmlDeclHandler = oldXmlDeclHandler; + declElementType = oldDeclElementType; + userData = oldUserData; + if (oldUserData == oldHandlerArg) + handlerArg = userData; + else + handlerArg = parser; + if (oldExternalEntityRefHandlerArg != oldParser) + externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg; + defaultExpandInternalEntities = oldDefaultExpandInternalEntities; + ns_triplets = oldns_triplets; +#ifdef XML_DTD + paramEntityParsing = oldParamEntityParsing; + if (context) { +#endif /* XML_DTD */ + if (!dtdCopy(&dtd, oldDtd, parser) || !setContext(parser, context)) { + XML_ParserFree(parser); + return 0; + } + processor = externalEntityInitProcessor; +#ifdef XML_DTD + } + else { + dtdSwap(&dtd, oldDtd); + parentParser = oldParser; + XmlPrologStateInitExternalEntity(&prologState); + dtd.complete = 1; + hadExternalDoctype = 1; + } +#endif /* XML_DTD */ + return parser; +} + +static +void destroyBindings(BINDING *bindings, XML_Parser parser) +{ + for (;;) { + BINDING *b = bindings; + if (!b) + break; + bindings = b->nextTagBinding; + FREE(b->uri); + FREE(b); + } +} + +void XML_ParserFree(XML_Parser parser) +{ + for (;;) { + TAG *p; + if (tagStack == 0) { + if (freeTagList == 0) + break; + tagStack = freeTagList; + freeTagList = 0; + } + p = tagStack; + tagStack = tagStack->parent; + FREE(p->buf); + destroyBindings(p->bindings, parser); + FREE(p); + } + destroyBindings(freeBindingList, parser); + destroyBindings(inheritedBindings, parser); + poolDestroy(&tempPool); + poolDestroy(&temp2Pool); +#ifdef XML_DTD + if (parentParser) { + if (hadExternalDoctype) + dtd.complete = 0; + dtdSwap(&dtd, &((Parser *)parentParser)->m_dtd); + } +#endif /* XML_DTD */ + dtdDestroy(&dtd, parser); + FREE((void *)atts); + if (groupConnector) + FREE(groupConnector); + if (buffer) + FREE(buffer); + FREE(dataBuf); + if (unknownEncodingMem) + FREE(unknownEncodingMem); + if (unknownEncodingRelease) + unknownEncodingRelease(unknownEncodingData); + FREE(parser); +} + +void XML_UseParserAsHandlerArg(XML_Parser parser) +{ + handlerArg = parser; +} + +void +XML_SetReturnNSTriplet(XML_Parser parser, int do_nst) { + ns_triplets = do_nst; +} + +void XML_SetUserData(XML_Parser parser, void *p) +{ + if (handlerArg == userData) + handlerArg = userData = p; + else + userData = p; +} + +int XML_SetBase(XML_Parser parser, const XML_Char *p) +{ + if (p) { + p = poolCopyString(&dtd.pool, p); + if (!p) + return 0; + curBase = p; + } + else + curBase = 0; + return 1; +} + +const XML_Char *XML_GetBase(XML_Parser parser) +{ + return curBase; +} + +int XML_GetSpecifiedAttributeCount(XML_Parser parser) +{ + return nSpecifiedAtts; +} + +int XML_GetIdAttributeIndex(XML_Parser parser) +{ + return idAttIndex; +} + +void XML_SetElementHandler(XML_Parser parser, + XML_StartElementHandler start, + XML_EndElementHandler end) +{ + startElementHandler = start; + endElementHandler = end; +} + +void XML_SetStartElementHandler(XML_Parser parser, + XML_StartElementHandler start) { + startElementHandler = start; +} + +void XML_SetEndElementHandler(XML_Parser parser, + XML_EndElementHandler end) { + endElementHandler = end; +} + +void XML_SetCharacterDataHandler(XML_Parser parser, + XML_CharacterDataHandler handler) +{ + characterDataHandler = handler; +} + +void XML_SetProcessingInstructionHandler(XML_Parser parser, + XML_ProcessingInstructionHandler handler) +{ + processingInstructionHandler = handler; +} + +void XML_SetCommentHandler(XML_Parser parser, + XML_CommentHandler handler) +{ + commentHandler = handler; +} + +void XML_SetCdataSectionHandler(XML_Parser parser, + XML_StartCdataSectionHandler start, + XML_EndCdataSectionHandler end) +{ + startCdataSectionHandler = start; + endCdataSectionHandler = end; +} + +void XML_SetStartCdataSectionHandler(XML_Parser parser, + XML_StartCdataSectionHandler start) { + startCdataSectionHandler = start; +} + +void XML_SetEndCdataSectionHandler(XML_Parser parser, + XML_EndCdataSectionHandler end) { + endCdataSectionHandler = end; +} + +void XML_SetDefaultHandler(XML_Parser parser, + XML_DefaultHandler handler) +{ + defaultHandler = handler; + defaultExpandInternalEntities = 0; +} + +void XML_SetDefaultHandlerExpand(XML_Parser parser, + XML_DefaultHandler handler) +{ + defaultHandler = handler; + defaultExpandInternalEntities = 1; +} + +void XML_SetDoctypeDeclHandler(XML_Parser parser, + XML_StartDoctypeDeclHandler start, + XML_EndDoctypeDeclHandler end) +{ + startDoctypeDeclHandler = start; + endDoctypeDeclHandler = end; +} + +void XML_SetStartDoctypeDeclHandler(XML_Parser parser, + XML_StartDoctypeDeclHandler start) { + startDoctypeDeclHandler = start; +} + +void XML_SetEndDoctypeDeclHandler(XML_Parser parser, + XML_EndDoctypeDeclHandler end) { + endDoctypeDeclHandler = end; +} + +void XML_SetUnparsedEntityDeclHandler(XML_Parser parser, + XML_UnparsedEntityDeclHandler handler) +{ + unparsedEntityDeclHandler = handler; +} + +void XML_SetNotationDeclHandler(XML_Parser parser, + XML_NotationDeclHandler handler) +{ + notationDeclHandler = handler; +} + +void XML_SetNamespaceDeclHandler(XML_Parser parser, + XML_StartNamespaceDeclHandler start, + XML_EndNamespaceDeclHandler end) +{ + startNamespaceDeclHandler = start; + endNamespaceDeclHandler = end; +} + +void XML_SetStartNamespaceDeclHandler(XML_Parser parser, + XML_StartNamespaceDeclHandler start) { + startNamespaceDeclHandler = start; +} + +void XML_SetEndNamespaceDeclHandler(XML_Parser parser, + XML_EndNamespaceDeclHandler end) { + endNamespaceDeclHandler = end; +} + + +void XML_SetNotStandaloneHandler(XML_Parser parser, + XML_NotStandaloneHandler handler) +{ + notStandaloneHandler = handler; +} + +void XML_SetExternalEntityRefHandler(XML_Parser parser, + XML_ExternalEntityRefHandler handler) +{ + externalEntityRefHandler = handler; +} + +void XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg) +{ + if (arg) + externalEntityRefHandlerArg = arg; + else + externalEntityRefHandlerArg = parser; +} + +void XML_SetUnknownEncodingHandler(XML_Parser parser, + XML_UnknownEncodingHandler handler, + void *data) +{ + unknownEncodingHandler = handler; + unknownEncodingHandlerData = data; +} + +void XML_SetElementDeclHandler(XML_Parser parser, + XML_ElementDeclHandler eldecl) +{ + elementDeclHandler = eldecl; +} + +void XML_SetAttlistDeclHandler(XML_Parser parser, + XML_AttlistDeclHandler attdecl) +{ + attlistDeclHandler = attdecl; +} + +void XML_SetEntityDeclHandler(XML_Parser parser, + XML_EntityDeclHandler handler) +{ + entityDeclHandler = handler; +} + +void XML_SetXmlDeclHandler(XML_Parser parser, + XML_XmlDeclHandler handler) { + xmlDeclHandler = handler; +} + +int XML_SetParamEntityParsing(XML_Parser parser, + enum XML_ParamEntityParsing parsing) +{ +#ifdef XML_DTD + paramEntityParsing = parsing; + return 1; +#else + return parsing == XML_PARAM_ENTITY_PARSING_NEVER; +#endif +} + +int XML_Parse(XML_Parser parser, const char *s, int len, int isFinal) +{ + if (len == 0) { + if (!isFinal) + return 1; + positionPtr = bufferPtr; + errorCode = processor(parser, bufferPtr, parseEndPtr = bufferEnd, 0); + if (errorCode == XML_ERROR_NONE) + return 1; + eventEndPtr = eventPtr; + processor = errorProcessor; + return 0; + } +#ifndef XML_CONTEXT_BYTES + else if (bufferPtr == bufferEnd) { + const char *end; + int nLeftOver; + parseEndByteIndex += len; + positionPtr = s; + if (isFinal) { + errorCode = processor(parser, s, parseEndPtr = s + len, 0); + if (errorCode == XML_ERROR_NONE) + return 1; + eventEndPtr = eventPtr; + processor = errorProcessor; + return 0; + } + errorCode = processor(parser, s, parseEndPtr = s + len, &end); + if (errorCode != XML_ERROR_NONE) { + eventEndPtr = eventPtr; + processor = errorProcessor; + return 0; + } + XmlUpdatePosition(encoding, positionPtr, end, &position); + nLeftOver = s + len - end; + if (nLeftOver) { + if (buffer == 0 || nLeftOver > bufferLim - buffer) { + /* FIXME avoid integer overflow */ + buffer = buffer == 0 ? MALLOC(len * 2) : REALLOC(buffer, len * 2); + /* FIXME storage leak if realloc fails */ + if (!buffer) { + errorCode = XML_ERROR_NO_MEMORY; + eventPtr = eventEndPtr = 0; + processor = errorProcessor; + return 0; + } + bufferLim = buffer + len * 2; + } + memcpy(buffer, end, nLeftOver); + bufferPtr = buffer; + bufferEnd = buffer + nLeftOver; + } + return 1; + } +#endif /* not defined XML_CONTEXT_BYTES */ + else { + memcpy(XML_GetBuffer(parser, len), s, len); + return XML_ParseBuffer(parser, len, isFinal); + } +} + +int XML_ParseBuffer(XML_Parser parser, int len, int isFinal) +{ + const char *start = bufferPtr; + positionPtr = start; + bufferEnd += len; + parseEndByteIndex += len; + errorCode = processor(parser, start, parseEndPtr = bufferEnd, + isFinal ? (const char **)0 : &bufferPtr); + if (errorCode == XML_ERROR_NONE) { + if (!isFinal) + XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position); + return 1; + } + else { + eventEndPtr = eventPtr; + processor = errorProcessor; + return 0; + } +} + +void *XML_GetBuffer(XML_Parser parser, int len) +{ + if (len > bufferLim - bufferEnd) { + /* FIXME avoid integer overflow */ + int neededSize = len + (bufferEnd - bufferPtr); +#ifdef XML_CONTEXT_BYTES + int keep = bufferPtr - buffer; + + if (keep > XML_CONTEXT_BYTES) + keep = XML_CONTEXT_BYTES; + neededSize += keep; +#endif /* defined XML_CONTEXT_BYTES */ + if (neededSize <= bufferLim - buffer) { +#ifdef XML_CONTEXT_BYTES + if (keep < bufferPtr - buffer) { + int offset = (bufferPtr - buffer) - keep; + memmove(buffer, &buffer[offset], bufferEnd - bufferPtr + keep); + bufferEnd -= offset; + bufferPtr -= offset; + } +#else + memmove(buffer, bufferPtr, bufferEnd - bufferPtr); + bufferEnd = buffer + (bufferEnd - bufferPtr); + bufferPtr = buffer; +#endif /* not defined XML_CONTEXT_BYTES */ + } + else { + char *newBuf; + int bufferSize = bufferLim - bufferPtr; + if (bufferSize == 0) + bufferSize = INIT_BUFFER_SIZE; + do { + bufferSize *= 2; + } while (bufferSize < neededSize); + newBuf = MALLOC(bufferSize); + if (newBuf == 0) { + errorCode = XML_ERROR_NO_MEMORY; + return 0; + } + bufferLim = newBuf + bufferSize; +#ifdef XML_CONTEXT_BYTES + if (bufferPtr) { + int keep = bufferPtr - buffer; + if (keep > XML_CONTEXT_BYTES) + keep = XML_CONTEXT_BYTES; + memcpy(newBuf, &bufferPtr[-keep], bufferEnd - bufferPtr + keep); + FREE(buffer); + buffer = newBuf; + bufferEnd = buffer + (bufferEnd - bufferPtr) + keep; + bufferPtr = buffer + keep; + } + else { + bufferEnd = newBuf + (bufferEnd - bufferPtr); + bufferPtr = buffer = newBuf; + } +#else + if (bufferPtr) { + memcpy(newBuf, bufferPtr, bufferEnd - bufferPtr); + FREE(buffer); + } + bufferEnd = newBuf + (bufferEnd - bufferPtr); + bufferPtr = buffer = newBuf; +#endif /* not defined XML_CONTEXT_BYTES */ + } + } + return bufferEnd; +} + +enum XML_Error XML_GetErrorCode(XML_Parser parser) +{ + return errorCode; +} + +long XML_GetCurrentByteIndex(XML_Parser parser) +{ + if (eventPtr) + return parseEndByteIndex - (parseEndPtr - eventPtr); + return -1; +} + +int XML_GetCurrentByteCount(XML_Parser parser) +{ + if (eventEndPtr && eventPtr) + return eventEndPtr - eventPtr; + return 0; +} + +const char * XML_GetInputContext(XML_Parser parser, int *offset, int *size) +{ +#ifdef XML_CONTEXT_BYTES + if (eventPtr && buffer) { + *offset = eventPtr - buffer; + *size = bufferEnd - buffer; + return buffer; + } +#endif /* defined XML_CONTEXT_BYTES */ + return (char *) 0; +} + +int XML_GetCurrentLineNumber(XML_Parser parser) +{ + if (eventPtr) { + XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); + positionPtr = eventPtr; + } + return position.lineNumber + 1; +} + +int XML_GetCurrentColumnNumber(XML_Parser parser) +{ + if (eventPtr) { + XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); + positionPtr = eventPtr; + } + return position.columnNumber; +} + +void XML_DefaultCurrent(XML_Parser parser) +{ + if (defaultHandler) { + if (openInternalEntities) + reportDefault(parser, + internalEncoding, + openInternalEntities->internalEventPtr, + openInternalEntities->internalEventEndPtr); + else + reportDefault(parser, encoding, eventPtr, eventEndPtr); + } +} + +const XML_LChar *XML_ErrorString(int code) +{ + static const XML_LChar *message[] = { + 0, + XML_T("out of memory"), + XML_T("syntax error"), + XML_T("no element found"), + XML_T("not well-formed (invalid token)"), + XML_T("unclosed token"), + XML_T("unclosed token"), + XML_T("mismatched tag"), + XML_T("duplicate attribute"), + XML_T("junk after document element"), + XML_T("illegal parameter entity reference"), + XML_T("undefined entity"), + XML_T("recursive entity reference"), + XML_T("asynchronous entity"), + XML_T("reference to invalid character number"), + XML_T("reference to binary entity"), + XML_T("reference to external entity in attribute"), + XML_T("xml processing instruction not at start of external entity"), + XML_T("unknown encoding"), + XML_T("encoding specified in XML declaration is incorrect"), + XML_T("unclosed CDATA section"), + XML_T("error in processing external entity reference"), + XML_T("document is not standalone"), + XML_T("unexpected parser state - please send a bug report") + }; + if (code > 0 && code < sizeof(message)/sizeof(message[0])) + return message[code]; + return 0; +} + +const XML_LChar * +XML_ExpatVersion() { + return VERSION; +} + +static +enum XML_Error contentProcessor(XML_Parser parser, + const char *start, + const char *end, + const char **endPtr) +{ + return doContent(parser, 0, encoding, start, end, endPtr); +} + +static +enum XML_Error externalEntityInitProcessor(XML_Parser parser, + const char *start, + const char *end, + const char **endPtr) +{ + enum XML_Error result = initializeEncoding(parser); + if (result != XML_ERROR_NONE) + return result; + processor = externalEntityInitProcessor2; + return externalEntityInitProcessor2(parser, start, end, endPtr); +} + +static +enum XML_Error externalEntityInitProcessor2(XML_Parser parser, + const char *start, + const char *end, + const char **endPtr) +{ + const char *next; + int tok = XmlContentTok(encoding, start, end, &next); + switch (tok) { + case XML_TOK_BOM: + start = next; + break; + case XML_TOK_PARTIAL: + if (endPtr) { + *endPtr = start; + return XML_ERROR_NONE; + } + eventPtr = start; + return XML_ERROR_UNCLOSED_TOKEN; + case XML_TOK_PARTIAL_CHAR: + if (endPtr) { + *endPtr = start; + return XML_ERROR_NONE; + } + eventPtr = start; + return XML_ERROR_PARTIAL_CHAR; + } + processor = externalEntityInitProcessor3; + return externalEntityInitProcessor3(parser, start, end, endPtr); +} + +static +enum XML_Error externalEntityInitProcessor3(XML_Parser parser, + const char *start, + const char *end, + const char **endPtr) +{ + const char *next; + int tok = XmlContentTok(encoding, start, end, &next); + switch (tok) { + case XML_TOK_XML_DECL: + { + enum XML_Error result = processXmlDecl(parser, 1, start, next); + if (result != XML_ERROR_NONE) + return result; + start = next; + } + break; + case XML_TOK_PARTIAL: + if (endPtr) { + *endPtr = start; + return XML_ERROR_NONE; + } + eventPtr = start; + return XML_ERROR_UNCLOSED_TOKEN; + case XML_TOK_PARTIAL_CHAR: + if (endPtr) { + *endPtr = start; + return XML_ERROR_NONE; + } + eventPtr = start; + return XML_ERROR_PARTIAL_CHAR; + } + processor = externalEntityContentProcessor; + tagLevel = 1; + return doContent(parser, 1, encoding, start, end, endPtr); +} + +static +enum XML_Error externalEntityContentProcessor(XML_Parser parser, + const char *start, + const char *end, + const char **endPtr) +{ + return doContent(parser, 1, encoding, start, end, endPtr); +} + +static enum XML_Error +doContent(XML_Parser parser, + int startTagLevel, + const ENCODING *enc, + const char *s, + const char *end, + const char **nextPtr) +{ + const char **eventPP; + const char **eventEndPP; + if (enc == encoding) { + eventPP = &eventPtr; + eventEndPP = &eventEndPtr; + } + else { + eventPP = &(openInternalEntities->internalEventPtr); + eventEndPP = &(openInternalEntities->internalEventEndPtr); + } + *eventPP = s; + for (;;) { + const char *next = s; /* XmlContentTok doesn't always set the last arg */ + int tok = XmlContentTok(enc, s, end, &next); + *eventEndPP = next; + switch (tok) { + case XML_TOK_TRAILING_CR: + if (nextPtr) { + *nextPtr = s; + return XML_ERROR_NONE; + } + *eventEndPP = end; + if (characterDataHandler) { + XML_Char c = 0xA; + characterDataHandler(handlerArg, &c, 1); + } + else if (defaultHandler) + reportDefault(parser, enc, s, end); + if (startTagLevel == 0) + return XML_ERROR_NO_ELEMENTS; + if (tagLevel != startTagLevel) + return XML_ERROR_ASYNC_ENTITY; + return XML_ERROR_NONE; + case XML_TOK_NONE: + if (nextPtr) { + *nextPtr = s; + return XML_ERROR_NONE; + } + if (startTagLevel > 0) { + if (tagLevel != startTagLevel) + return XML_ERROR_ASYNC_ENTITY; + return XML_ERROR_NONE; + } + return XML_ERROR_NO_ELEMENTS; + case XML_TOK_INVALID: + *eventPP = next; + return XML_ERROR_INVALID_TOKEN; + case XML_TOK_PARTIAL: + if (nextPtr) { + *nextPtr = s; + return XML_ERROR_NONE; + } + return XML_ERROR_UNCLOSED_TOKEN; + case XML_TOK_PARTIAL_CHAR: + if (nextPtr) { + *nextPtr = s; + return XML_ERROR_NONE; + } + return XML_ERROR_PARTIAL_CHAR; + case XML_TOK_ENTITY_REF: + { + const XML_Char *name; + ENTITY *entity; + XML_Char ch = XmlPredefinedEntityName(enc, + s + enc->minBytesPerChar, + next - enc->minBytesPerChar); + if (ch) { + if (characterDataHandler) + characterDataHandler(handlerArg, &ch, 1); + else if (defaultHandler) + reportDefault(parser, enc, s, next); + break; + } + name = poolStoreString(&dtd.pool, enc, + s + enc->minBytesPerChar, + next - enc->minBytesPerChar); + if (!name) + return XML_ERROR_NO_MEMORY; + entity = (ENTITY *)lookup(&dtd.generalEntities, name, 0); + poolDiscard(&dtd.pool); + if (!entity) { + if (dtd.complete || dtd.standalone) + return XML_ERROR_UNDEFINED_ENTITY; + if (defaultHandler) + reportDefault(parser, enc, s, next); + break; + } + if (entity->open) + return XML_ERROR_RECURSIVE_ENTITY_REF; + if (entity->notation) + return XML_ERROR_BINARY_ENTITY_REF; + if (entity) { + if (entity->textPtr) { + enum XML_Error result; + OPEN_INTERNAL_ENTITY openEntity; + if (defaultHandler && !defaultExpandInternalEntities) { + reportDefault(parser, enc, s, next); + break; + } + entity->open = 1; + openEntity.next = openInternalEntities; + openInternalEntities = &openEntity; + openEntity.entity = entity; + openEntity.internalEventPtr = 0; + openEntity.internalEventEndPtr = 0; + result = doContent(parser, + tagLevel, + internalEncoding, + (char *)entity->textPtr, + (char *)(entity->textPtr + entity->textLen), + 0); + entity->open = 0; + openInternalEntities = openEntity.next; + if (result) + return result; + } + else if (externalEntityRefHandler) { + const XML_Char *context; + entity->open = 1; + context = getContext(parser); + entity->open = 0; + if (!context) + return XML_ERROR_NO_MEMORY; + if (!externalEntityRefHandler(externalEntityRefHandlerArg, + context, + entity->base, + entity->systemId, + entity->publicId)) + return XML_ERROR_EXTERNAL_ENTITY_HANDLING; + poolDiscard(&tempPool); + } + else if (defaultHandler) + reportDefault(parser, enc, s, next); + } + break; + } + case XML_TOK_START_TAG_WITH_ATTS: + if (!startElementHandler) { + enum XML_Error result = storeAtts(parser, enc, s, 0, 0); + if (result) + return result; + } + /* fall through */ + case XML_TOK_START_TAG_NO_ATTS: + { + TAG *tag; + if (freeTagList) { + tag = freeTagList; + freeTagList = freeTagList->parent; + } + else { + tag = MALLOC(sizeof(TAG)); + if (!tag) + return XML_ERROR_NO_MEMORY; + tag->buf = MALLOC(INIT_TAG_BUF_SIZE); + if (!tag->buf) + return XML_ERROR_NO_MEMORY; + tag->bufEnd = tag->buf + INIT_TAG_BUF_SIZE; + } + tag->bindings = 0; + tag->parent = tagStack; + tagStack = tag; + tag->name.localPart = 0; + tag->rawName = s + enc->minBytesPerChar; + tag->rawNameLength = XmlNameLength(enc, tag->rawName); + if (nextPtr) { + /* Need to guarantee that: + tag->buf + ROUND_UP(tag->rawNameLength, sizeof(XML_Char)) <= tag->bufEnd - sizeof(XML_Char) */ + if (tag->rawNameLength + (int)(sizeof(XML_Char) - 1) + (int)sizeof(XML_Char) > tag->bufEnd - tag->buf) { + int bufSize = tag->rawNameLength * 4; + bufSize = ROUND_UP(bufSize, sizeof(XML_Char)); + tag->buf = REALLOC(tag->buf, bufSize); + if (!tag->buf) + return XML_ERROR_NO_MEMORY; + tag->bufEnd = tag->buf + bufSize; + } + memcpy(tag->buf, tag->rawName, tag->rawNameLength); + tag->rawName = tag->buf; + } + ++tagLevel; + if (startElementHandler) { + enum XML_Error result; + XML_Char *toPtr; + for (;;) { + const char *rawNameEnd = tag->rawName + tag->rawNameLength; + const char *fromPtr = tag->rawName; + int bufSize; + if (nextPtr) + toPtr = (XML_Char *)(tag->buf + ROUND_UP(tag->rawNameLength, sizeof(XML_Char))); + else + toPtr = (XML_Char *)tag->buf; + tag->name.str = toPtr; + XmlConvert(enc, + &fromPtr, rawNameEnd, + (ICHAR **)&toPtr, (ICHAR *)tag->bufEnd - 1); + if (fromPtr == rawNameEnd) + break; + bufSize = (tag->bufEnd - tag->buf) << 1; + tag->buf = REALLOC(tag->buf, bufSize); + if (!tag->buf) + return XML_ERROR_NO_MEMORY; + tag->bufEnd = tag->buf + bufSize; + if (nextPtr) + tag->rawName = tag->buf; + } + *toPtr = XML_T('\0'); + result = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings)); + if (result) + return result; + startElementHandler(handlerArg, tag->name.str, (const XML_Char **)atts); + poolClear(&tempPool); + } + else { + tag->name.str = 0; + if (defaultHandler) + reportDefault(parser, enc, s, next); + } + break; + } + case XML_TOK_EMPTY_ELEMENT_WITH_ATTS: + if (!startElementHandler) { + enum XML_Error result = storeAtts(parser, enc, s, 0, 0); + if (result) + return result; + } + /* fall through */ + case XML_TOK_EMPTY_ELEMENT_NO_ATTS: + if (startElementHandler || endElementHandler) { + const char *rawName = s + enc->minBytesPerChar; + enum XML_Error result; + BINDING *bindings = 0; + TAG_NAME name; + name.str = poolStoreString(&tempPool, enc, rawName, + rawName + XmlNameLength(enc, rawName)); + if (!name.str) + return XML_ERROR_NO_MEMORY; + poolFinish(&tempPool); + result = storeAtts(parser, enc, s, &name, &bindings); + if (result) + return result; + poolFinish(&tempPool); + if (startElementHandler) + startElementHandler(handlerArg, name.str, (const XML_Char **)atts); + if (endElementHandler) { + if (startElementHandler) + *eventPP = *eventEndPP; + endElementHandler(handlerArg, name.str); + } + poolClear(&tempPool); + while (bindings) { + BINDING *b = bindings; + if (endNamespaceDeclHandler) + endNamespaceDeclHandler(handlerArg, b->prefix->name); + bindings = bindings->nextTagBinding; + b->nextTagBinding = freeBindingList; + freeBindingList = b; + b->prefix->binding = b->prevPrefixBinding; + } + } + else if (defaultHandler) + reportDefault(parser, enc, s, next); + if (tagLevel == 0) + return epilogProcessor(parser, next, end, nextPtr); + break; + case XML_TOK_END_TAG: + if (tagLevel == startTagLevel) + return XML_ERROR_ASYNC_ENTITY; + else { + int len; + const char *rawName; + TAG *tag = tagStack; + tagStack = tag->parent; + tag->parent = freeTagList; + freeTagList = tag; + rawName = s + enc->minBytesPerChar*2; + len = XmlNameLength(enc, rawName); + if (len != tag->rawNameLength + || memcmp(tag->rawName, rawName, len) != 0) { + *eventPP = rawName; + return XML_ERROR_TAG_MISMATCH; + } + --tagLevel; + if (endElementHandler && tag->name.str) { + if (tag->name.localPart) { + XML_Char *to = (XML_Char *)tag->name.str + tag->name.uriLen; + const XML_Char *from = tag->name.localPart; + while ((*to++ = *from++) != 0) + ; + } + endElementHandler(handlerArg, tag->name.str); + } + else if (defaultHandler) + reportDefault(parser, enc, s, next); + while (tag->bindings) { + BINDING *b = tag->bindings; + if (endNamespaceDeclHandler) + endNamespaceDeclHandler(handlerArg, b->prefix->name); + tag->bindings = tag->bindings->nextTagBinding; + b->nextTagBinding = freeBindingList; + freeBindingList = b; + b->prefix->binding = b->prevPrefixBinding; + } + if (tagLevel == 0) + return epilogProcessor(parser, next, end, nextPtr); + } + break; + case XML_TOK_CHAR_REF: + { + int n = XmlCharRefNumber(enc, s); + if (n < 0) + return XML_ERROR_BAD_CHAR_REF; + if (characterDataHandler) { + XML_Char buf[XML_ENCODE_MAX]; + characterDataHandler(handlerArg, buf, XmlEncode(n, (ICHAR *)buf)); + } + else if (defaultHandler) + reportDefault(parser, enc, s, next); + } + break; + case XML_TOK_XML_DECL: + return XML_ERROR_MISPLACED_XML_PI; + case XML_TOK_DATA_NEWLINE: + if (characterDataHandler) { + XML_Char c = 0xA; + characterDataHandler(handlerArg, &c, 1); + } + else if (defaultHandler) + reportDefault(parser, enc, s, next); + break; + case XML_TOK_CDATA_SECT_OPEN: + { + enum XML_Error result; + if (startCdataSectionHandler) + startCdataSectionHandler(handlerArg); +#if 0 + /* Suppose you doing a transformation on a document that involves + changing only the character data. You set up a defaultHandler + and a characterDataHandler. The defaultHandler simply copies + characters through. The characterDataHandler does the transformation + and writes the characters out escaping them as necessary. This case + will fail to work if we leave out the following two lines (because & + and < inside CDATA sections will be incorrectly escaped). + + However, now we have a start/endCdataSectionHandler, so it seems + easier to let the user deal with this. */ + + else if (characterDataHandler) + characterDataHandler(handlerArg, dataBuf, 0); +#endif + else if (defaultHandler) + reportDefault(parser, enc, s, next); + result = doCdataSection(parser, enc, &next, end, nextPtr); + if (!next) { + processor = cdataSectionProcessor; + return result; + } + } + break; + case XML_TOK_TRAILING_RSQB: + if (nextPtr) { + *nextPtr = s; + return XML_ERROR_NONE; + } + if (characterDataHandler) { + if (MUST_CONVERT(enc, s)) { + ICHAR *dataPtr = (ICHAR *)dataBuf; + XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd); + characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); + } + else + characterDataHandler(handlerArg, + (XML_Char *)s, + (XML_Char *)end - (XML_Char *)s); + } + else if (defaultHandler) + reportDefault(parser, enc, s, end); + if (startTagLevel == 0) { + *eventPP = end; + return XML_ERROR_NO_ELEMENTS; + } + if (tagLevel != startTagLevel) { + *eventPP = end; + return XML_ERROR_ASYNC_ENTITY; + } + return XML_ERROR_NONE; + case XML_TOK_DATA_CHARS: + if (characterDataHandler) { + if (MUST_CONVERT(enc, s)) { + for (;;) { + ICHAR *dataPtr = (ICHAR *)dataBuf; + XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd); + *eventEndPP = s; + characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); + if (s == next) + break; + *eventPP = s; + } + } + else + characterDataHandler(handlerArg, + (XML_Char *)s, + (XML_Char *)next - (XML_Char *)s); + } + else if (defaultHandler) + reportDefault(parser, enc, s, next); + break; + case XML_TOK_PI: + if (!reportProcessingInstruction(parser, enc, s, next)) + return XML_ERROR_NO_MEMORY; + break; + case XML_TOK_COMMENT: + if (!reportComment(parser, enc, s, next)) + return XML_ERROR_NO_MEMORY; + break; + default: + if (defaultHandler) + reportDefault(parser, enc, s, next); + break; + } + *eventPP = s = next; + } + /* not reached */ +} + +/* If tagNamePtr is non-null, build a real list of attributes, +otherwise just check the attributes for well-formedness. */ + +static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *enc, + const char *attStr, TAG_NAME *tagNamePtr, + BINDING **bindingsPtr) +{ + ELEMENT_TYPE *elementType = 0; + int nDefaultAtts = 0; + const XML_Char **appAtts; /* the attribute list to pass to the application */ + int attIndex = 0; + int i; + int n; + int nPrefixes = 0; + BINDING *binding; + const XML_Char *localPart; + + /* lookup the element type name */ + if (tagNamePtr) { + elementType = (ELEMENT_TYPE *)lookup(&dtd.elementTypes, tagNamePtr->str,0); + if (!elementType) { + tagNamePtr->str = poolCopyString(&dtd.pool, tagNamePtr->str); + if (!tagNamePtr->str) + return XML_ERROR_NO_MEMORY; + elementType = (ELEMENT_TYPE *)lookup(&dtd.elementTypes, tagNamePtr->str, sizeof(ELEMENT_TYPE)); + if (!elementType) + return XML_ERROR_NO_MEMORY; + if (ns && !setElementTypePrefix(parser, elementType)) + return XML_ERROR_NO_MEMORY; + } + nDefaultAtts = elementType->nDefaultAtts; + } + /* get the attributes from the tokenizer */ + n = XmlGetAttributes(enc, attStr, attsSize, atts); + if (n + nDefaultAtts > attsSize) { + int oldAttsSize = attsSize; + attsSize = n + nDefaultAtts + INIT_ATTS_SIZE; + atts = REALLOC((void *)atts, attsSize * sizeof(ATTRIBUTE)); + if (!atts) + return XML_ERROR_NO_MEMORY; + if (n > oldAttsSize) + XmlGetAttributes(enc, attStr, n, atts); + } + appAtts = (const XML_Char **)atts; + for (i = 0; i < n; i++) { + /* add the name and value to the attribute list */ + ATTRIBUTE_ID *attId = getAttributeId(parser, enc, atts[i].name, + atts[i].name + + XmlNameLength(enc, atts[i].name)); + if (!attId) + return XML_ERROR_NO_MEMORY; + /* detect duplicate attributes */ + if ((attId->name)[-1]) { + if (enc == encoding) + eventPtr = atts[i].name; + return XML_ERROR_DUPLICATE_ATTRIBUTE; + } + (attId->name)[-1] = 1; + appAtts[attIndex++] = attId->name; + if (!atts[i].normalized) { + enum XML_Error result; + int isCdata = 1; + + /* figure out whether declared as other than CDATA */ + if (attId->maybeTokenized) { + int j; + for (j = 0; j < nDefaultAtts; j++) { + if (attId == elementType->defaultAtts[j].id) { + isCdata = elementType->defaultAtts[j].isCdata; + break; + } + } + } + + /* normalize the attribute value */ + result = storeAttributeValue(parser, enc, isCdata, + atts[i].valuePtr, atts[i].valueEnd, + &tempPool); + if (result) + return result; + if (tagNamePtr) { + appAtts[attIndex] = poolStart(&tempPool); + poolFinish(&tempPool); + } + else + poolDiscard(&tempPool); + } + else if (tagNamePtr) { + /* the value did not need normalizing */ + appAtts[attIndex] = poolStoreString(&tempPool, enc, atts[i].valuePtr, atts[i].valueEnd); + if (appAtts[attIndex] == 0) + return XML_ERROR_NO_MEMORY; + poolFinish(&tempPool); + } + /* handle prefixed attribute names */ + if (attId->prefix && tagNamePtr) { + if (attId->xmlns) { + /* deal with namespace declarations here */ + if (!addBinding(parser, attId->prefix, attId, appAtts[attIndex], bindingsPtr)) + return XML_ERROR_NO_MEMORY; + --attIndex; + } + else { + /* deal with other prefixed names later */ + attIndex++; + nPrefixes++; + (attId->name)[-1] = 2; + } + } + else + attIndex++; + } + if (tagNamePtr) { + int j; + nSpecifiedAtts = attIndex; + if (elementType->idAtt && (elementType->idAtt->name)[-1]) { + for (i = 0; i < attIndex; i += 2) + if (appAtts[i] == elementType->idAtt->name) { + idAttIndex = i; + break; + } + } + else + idAttIndex = -1; + /* do attribute defaulting */ + for (j = 0; j < nDefaultAtts; j++) { + const DEFAULT_ATTRIBUTE *da = elementType->defaultAtts + j; + if (!(da->id->name)[-1] && da->value) { + if (da->id->prefix) { + if (da->id->xmlns) { + if (!addBinding(parser, da->id->prefix, da->id, da->value, bindingsPtr)) + return XML_ERROR_NO_MEMORY; + } + else { + (da->id->name)[-1] = 2; + nPrefixes++; + appAtts[attIndex++] = da->id->name; + appAtts[attIndex++] = da->value; + } + } + else { + (da->id->name)[-1] = 1; + appAtts[attIndex++] = da->id->name; + appAtts[attIndex++] = da->value; + } + } + } + appAtts[attIndex] = 0; + } + i = 0; + if (nPrefixes) { + /* expand prefixed attribute names */ + for (; i < attIndex; i += 2) { + if (appAtts[i][-1] == 2) { + ATTRIBUTE_ID *id; + ((XML_Char *)(appAtts[i]))[-1] = 0; + id = (ATTRIBUTE_ID *)lookup(&dtd.attributeIds, appAtts[i], 0); + if (id->prefix->binding) { + int j; + const BINDING *b = id->prefix->binding; + const XML_Char *s = appAtts[i]; + for (j = 0; j < b->uriLen; j++) { + if (!poolAppendChar(&tempPool, b->uri[j])) + return XML_ERROR_NO_MEMORY; + } + while (*s++ != ':') + ; + do { + if (!poolAppendChar(&tempPool, *s)) + return XML_ERROR_NO_MEMORY; + } while (*s++); + if (ns_triplets) { + tempPool.ptr[-1] = namespaceSeparator; + s = b->prefix->name; + do { + if (!poolAppendChar(&tempPool, *s)) + return XML_ERROR_NO_MEMORY; + } while (*s++); + } + + appAtts[i] = poolStart(&tempPool); + poolFinish(&tempPool); + } + if (!--nPrefixes) + break; + } + else + ((XML_Char *)(appAtts[i]))[-1] = 0; + } + } + /* clear the flags that say whether attributes were specified */ + for (; i < attIndex; i += 2) + ((XML_Char *)(appAtts[i]))[-1] = 0; + if (!tagNamePtr) + return XML_ERROR_NONE; + for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding) + binding->attId->name[-1] = 0; + /* expand the element type name */ + if (elementType->prefix) { + binding = elementType->prefix->binding; + if (!binding) + return XML_ERROR_NONE; + localPart = tagNamePtr->str; + while (*localPart++ != XML_T(':')) + ; + } + else if (dtd.defaultPrefix.binding) { + binding = dtd.defaultPrefix.binding; + localPart = tagNamePtr->str; + } + else + return XML_ERROR_NONE; + tagNamePtr->localPart = localPart; + tagNamePtr->uriLen = binding->uriLen; + for (i = 0; localPart[i++];) + ; + n = i + binding->uriLen; + if (n > binding->uriAlloc) { + TAG *p; + XML_Char *uri = MALLOC((n + EXPAND_SPARE) * sizeof(XML_Char)); + if (!uri) + return XML_ERROR_NO_MEMORY; + binding->uriAlloc = n + EXPAND_SPARE; + memcpy(uri, binding->uri, binding->uriLen * sizeof(XML_Char)); + for (p = tagStack; p; p = p->parent) + if (p->name.str == binding->uri) + p->name.str = uri; + FREE(binding->uri); + binding->uri = uri; + } + memcpy(binding->uri + binding->uriLen, localPart, i * sizeof(XML_Char)); + tagNamePtr->str = binding->uri; + return XML_ERROR_NONE; +} + +static +int addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr) +{ + BINDING *b; + int len; + for (len = 0; uri[len]; len++) + ; + if (namespaceSeparator) + len++; + if (freeBindingList) { + b = freeBindingList; + if (len > b->uriAlloc) { + b->uri = REALLOC(b->uri, sizeof(XML_Char) * (len + EXPAND_SPARE)); + if (!b->uri) + return 0; + b->uriAlloc = len + EXPAND_SPARE; + } + freeBindingList = b->nextTagBinding; + } + else { + b = MALLOC(sizeof(BINDING)); + if (!b) + return 0; + b->uri = MALLOC(sizeof(XML_Char) * (len + EXPAND_SPARE)); + if (!b->uri) { + FREE(b); + return 0; + } + b->uriAlloc = len + EXPAND_SPARE; + } + b->uriLen = len; + memcpy(b->uri, uri, len * sizeof(XML_Char)); + if (namespaceSeparator) + b->uri[len - 1] = namespaceSeparator; + b->prefix = prefix; + b->attId = attId; + b->prevPrefixBinding = prefix->binding; + if (*uri == XML_T('\0') && prefix == &dtd.defaultPrefix) + prefix->binding = 0; + else + prefix->binding = b; + b->nextTagBinding = *bindingsPtr; + *bindingsPtr = b; + if (startNamespaceDeclHandler) + startNamespaceDeclHandler(handlerArg, prefix->name, + prefix->binding ? uri : 0); + return 1; +} + +/* The idea here is to avoid using stack for each CDATA section when +the whole file is parsed with one call. */ + +static +enum XML_Error cdataSectionProcessor(XML_Parser parser, + const char *start, + const char *end, + const char **endPtr) +{ + enum XML_Error result = doCdataSection(parser, encoding, &start, end, endPtr); + if (start) { + processor = contentProcessor; + return contentProcessor(parser, start, end, endPtr); + } + return result; +} + +/* startPtr gets set to non-null is the section is closed, and to null if +the section is not yet closed. */ + +static +enum XML_Error doCdataSection(XML_Parser parser, + const ENCODING *enc, + const char **startPtr, + const char *end, + const char **nextPtr) +{ + const char *s = *startPtr; + const char **eventPP; + const char **eventEndPP; + if (enc == encoding) { + eventPP = &eventPtr; + *eventPP = s; + eventEndPP = &eventEndPtr; + } + else { + eventPP = &(openInternalEntities->internalEventPtr); + eventEndPP = &(openInternalEntities->internalEventEndPtr); + } + *eventPP = s; + *startPtr = 0; + for (;;) { + const char *next; + int tok = XmlCdataSectionTok(enc, s, end, &next); + *eventEndPP = next; + switch (tok) { + case XML_TOK_CDATA_SECT_CLOSE: + if (endCdataSectionHandler) + endCdataSectionHandler(handlerArg); +#if 0 + /* see comment under XML_TOK_CDATA_SECT_OPEN */ + else if (characterDataHandler) + characterDataHandler(handlerArg, dataBuf, 0); +#endif + else if (defaultHandler) + reportDefault(parser, enc, s, next); + *startPtr = next; + return XML_ERROR_NONE; + case XML_TOK_DATA_NEWLINE: + if (characterDataHandler) { + XML_Char c = 0xA; + characterDataHandler(handlerArg, &c, 1); + } + else if (defaultHandler) + reportDefault(parser, enc, s, next); + break; + case XML_TOK_DATA_CHARS: + if (characterDataHandler) { + if (MUST_CONVERT(enc, s)) { + for (;;) { + ICHAR *dataPtr = (ICHAR *)dataBuf; + XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd); + *eventEndPP = next; + characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); + if (s == next) + break; + *eventPP = s; + } + } + else + characterDataHandler(handlerArg, + (XML_Char *)s, + (XML_Char *)next - (XML_Char *)s); + } + else if (defaultHandler) + reportDefault(parser, enc, s, next); + break; + case XML_TOK_INVALID: + *eventPP = next; + return XML_ERROR_INVALID_TOKEN; + case XML_TOK_PARTIAL_CHAR: + if (nextPtr) { + *nextPtr = s; + return XML_ERROR_NONE; + } + return XML_ERROR_PARTIAL_CHAR; + case XML_TOK_PARTIAL: + case XML_TOK_NONE: + if (nextPtr) { + *nextPtr = s; + return XML_ERROR_NONE; + } + return XML_ERROR_UNCLOSED_CDATA_SECTION; + default: + *eventPP = next; + return XML_ERROR_UNEXPECTED_STATE; + } + *eventPP = s = next; + } + /* not reached */ +} + +#ifdef XML_DTD + +/* The idea here is to avoid using stack for each IGNORE section when +the whole file is parsed with one call. */ + +static +enum XML_Error ignoreSectionProcessor(XML_Parser parser, + const char *start, + const char *end, + const char **endPtr) +{ + enum XML_Error result = doIgnoreSection(parser, encoding, &start, end, endPtr); + if (start) { + processor = prologProcessor; + return prologProcessor(parser, start, end, endPtr); + } + return result; +} + +/* startPtr gets set to non-null is the section is closed, and to null if +the section is not yet closed. */ + +static +enum XML_Error doIgnoreSection(XML_Parser parser, + const ENCODING *enc, + const char **startPtr, + const char *end, + const char **nextPtr) +{ + const char *next; + int tok; + const char *s = *startPtr; + const char **eventPP; + const char **eventEndPP; + if (enc == encoding) { + eventPP = &eventPtr; + *eventPP = s; + eventEndPP = &eventEndPtr; + } + else { + eventPP = &(openInternalEntities->internalEventPtr); + eventEndPP = &(openInternalEntities->internalEventEndPtr); + } + *eventPP = s; + *startPtr = 0; + tok = XmlIgnoreSectionTok(enc, s, end, &next); + *eventEndPP = next; + switch (tok) { + case XML_TOK_IGNORE_SECT: + if (defaultHandler) + reportDefault(parser, enc, s, next); + *startPtr = next; + return XML_ERROR_NONE; + case XML_TOK_INVALID: + *eventPP = next; + return XML_ERROR_INVALID_TOKEN; + case XML_TOK_PARTIAL_CHAR: + if (nextPtr) { + *nextPtr = s; + return XML_ERROR_NONE; + } + return XML_ERROR_PARTIAL_CHAR; + case XML_TOK_PARTIAL: + case XML_TOK_NONE: + if (nextPtr) { + *nextPtr = s; + return XML_ERROR_NONE; + } + return XML_ERROR_SYNTAX; /* XML_ERROR_UNCLOSED_IGNORE_SECTION */ + default: + *eventPP = next; + return XML_ERROR_UNEXPECTED_STATE; + } + /* not reached */ +} + +#endif /* XML_DTD */ + +static enum XML_Error +initializeEncoding(XML_Parser parser) +{ + const char *s; +#ifdef XML_UNICODE + char encodingBuf[128]; + if (!protocolEncodingName) + s = 0; + else { + int i; + for (i = 0; protocolEncodingName[i]; i++) { + if (i == sizeof(encodingBuf) - 1 + || (protocolEncodingName[i] & ~0x7f) != 0) { + encodingBuf[0] = '\0'; + break; + } + encodingBuf[i] = (char)protocolEncodingName[i]; + } + encodingBuf[i] = '\0'; + s = encodingBuf; + } +#else + s = protocolEncodingName; +#endif + if ((ns ? XmlInitEncodingNS : XmlInitEncoding)(&initEncoding, &encoding, s)) + return XML_ERROR_NONE; + return handleUnknownEncoding(parser, protocolEncodingName); +} + +static enum XML_Error +processXmlDecl(XML_Parser parser, int isGeneralTextEntity, + const char *s, const char *next) +{ + const char *encodingName = 0; + const char *storedEncName = 0; + const ENCODING *newEncoding = 0; + const char *version = 0; + const char *versionend; + const char *storedversion = 0; + int standalone = -1; + if (!(ns + ? XmlParseXmlDeclNS + : XmlParseXmlDecl)(isGeneralTextEntity, + encoding, + s, + next, + &eventPtr, + &version, + &versionend, + &encodingName, + &newEncoding, + &standalone)) + return XML_ERROR_SYNTAX; + if (!isGeneralTextEntity && standalone == 1) { + dtd.standalone = 1; +#ifdef XML_DTD + if (paramEntityParsing == XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE) + paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; +#endif /* XML_DTD */ + } + if (xmlDeclHandler) { + if (encodingName) { + storedEncName = poolStoreString(&temp2Pool, + encoding, + encodingName, + encodingName + + XmlNameLength(encoding, encodingName)); + if (! storedEncName) + return XML_ERROR_NO_MEMORY; + poolFinish(&temp2Pool); + } + if (version) { + storedversion = poolStoreString(&temp2Pool, + encoding, + version, + versionend - encoding->minBytesPerChar); + if (! storedversion) + return XML_ERROR_NO_MEMORY; + } + xmlDeclHandler(handlerArg, storedversion, storedEncName, standalone); + } + else if (defaultHandler) + reportDefault(parser, encoding, s, next); + if (!protocolEncodingName) { + if (newEncoding) { + if (newEncoding->minBytesPerChar != encoding->minBytesPerChar) { + eventPtr = encodingName; + return XML_ERROR_INCORRECT_ENCODING; + } + encoding = newEncoding; + } + else if (encodingName) { + enum XML_Error result; + if (! storedEncName) { + storedEncName = poolStoreString(&temp2Pool, + encoding, + encodingName, + encodingName + + XmlNameLength(encoding, encodingName)); + if (! storedEncName) + return XML_ERROR_NO_MEMORY; + } + result = handleUnknownEncoding(parser, storedEncName); + poolClear(&tempPool); + if (result == XML_ERROR_UNKNOWN_ENCODING) + eventPtr = encodingName; + return result; + } + } + + if (storedEncName || storedversion) + poolClear(&temp2Pool); + + return XML_ERROR_NONE; +} + +static enum XML_Error +handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName) +{ + if (unknownEncodingHandler) { + XML_Encoding info; + int i; + for (i = 0; i < 256; i++) + info.map[i] = -1; + info.convert = 0; + info.data = 0; + info.release = 0; + if (unknownEncodingHandler(unknownEncodingHandlerData, encodingName, &info)) { + ENCODING *enc; + unknownEncodingMem = MALLOC(XmlSizeOfUnknownEncoding()); + if (!unknownEncodingMem) { + if (info.release) + info.release(info.data); + return XML_ERROR_NO_MEMORY; + } + enc = (ns + ? XmlInitUnknownEncodingNS + : XmlInitUnknownEncoding)(unknownEncodingMem, + info.map, + info.convert, + info.data); + if (enc) { + unknownEncodingData = info.data; + unknownEncodingRelease = info.release; + encoding = enc; + return XML_ERROR_NONE; + } + } + if (info.release) + info.release(info.data); + } + return XML_ERROR_UNKNOWN_ENCODING; +} + +static enum XML_Error +prologInitProcessor(XML_Parser parser, + const char *s, + const char *end, + const char **nextPtr) +{ + enum XML_Error result = initializeEncoding(parser); + if (result != XML_ERROR_NONE) + return result; + processor = prologProcessor; + return prologProcessor(parser, s, end, nextPtr); +} + +static enum XML_Error +prologProcessor(XML_Parser parser, + const char *s, + const char *end, + const char **nextPtr) +{ + const char *next; + int tok = XmlPrologTok(encoding, s, end, &next); + return doProlog(parser, encoding, s, end, tok, next, nextPtr); +} + +static enum XML_Error +doProlog(XML_Parser parser, + const ENCODING *enc, + const char *s, + const char *end, + int tok, + const char *next, + const char **nextPtr) +{ +#ifdef XML_DTD + static const XML_Char externalSubsetName[] = { '#' , '\0' }; +#endif /* XML_DTD */ + + const char **eventPP; + const char **eventEndPP; + enum XML_Content_Quant quant; + + if (enc == encoding) { + eventPP = &eventPtr; + eventEndPP = &eventEndPtr; + } + else { + eventPP = &(openInternalEntities->internalEventPtr); + eventEndPP = &(openInternalEntities->internalEventEndPtr); + } + for (;;) { + int role; + *eventPP = s; + *eventEndPP = next; + if (tok <= 0) { + if (nextPtr != 0 && tok != XML_TOK_INVALID) { + *nextPtr = s; + return XML_ERROR_NONE; + } + switch (tok) { + case XML_TOK_INVALID: + *eventPP = next; + return XML_ERROR_INVALID_TOKEN; + case XML_TOK_PARTIAL: + return XML_ERROR_UNCLOSED_TOKEN; + case XML_TOK_PARTIAL_CHAR: + return XML_ERROR_PARTIAL_CHAR; + case XML_TOK_NONE: +#ifdef XML_DTD + if (enc != encoding) + return XML_ERROR_NONE; + if (parentParser) { + if (XmlTokenRole(&prologState, XML_TOK_NONE, end, end, enc) + == XML_ROLE_ERROR) + return XML_ERROR_SYNTAX; + hadExternalDoctype = 0; + return XML_ERROR_NONE; + } +#endif /* XML_DTD */ + return XML_ERROR_NO_ELEMENTS; + default: + tok = -tok; + next = end; + break; + } + } + role = XmlTokenRole(&prologState, tok, s, next, enc); + switch (role) { + case XML_ROLE_XML_DECL: + { + enum XML_Error result = processXmlDecl(parser, 0, s, next); + if (result != XML_ERROR_NONE) + return result; + enc = encoding; + } + break; + case XML_ROLE_DOCTYPE_NAME: + if (startDoctypeDeclHandler) { + doctypeName = poolStoreString(&tempPool, enc, s, next); + if (! doctypeName) + return XML_ERROR_NO_MEMORY; + poolFinish(&tempPool); + doctypeSysid = 0; + doctypePubid = 0; + } + break; + case XML_ROLE_DOCTYPE_INTERNAL_SUBSET: + if (startDoctypeDeclHandler) { + startDoctypeDeclHandler(handlerArg, doctypeName, doctypeSysid, + doctypePubid, 1); + doctypeName = 0; + poolClear(&tempPool); + } + break; +#ifdef XML_DTD + case XML_ROLE_TEXT_DECL: + { + enum XML_Error result = processXmlDecl(parser, 1, s, next); + if (result != XML_ERROR_NONE) + return result; + enc = encoding; + } + break; +#endif /* XML_DTD */ + case XML_ROLE_DOCTYPE_PUBLIC_ID: + if (startDoctypeDeclHandler) { + doctypePubid = poolStoreString(&tempPool, enc, s + 1, next - 1); + if (! doctypePubid) + return XML_ERROR_NO_MEMORY; + poolFinish(&tempPool); + } +#ifdef XML_DTD + declEntity = (ENTITY *)lookup(&dtd.paramEntities, + externalSubsetName, + sizeof(ENTITY)); + if (!declEntity) + return XML_ERROR_NO_MEMORY; +#endif /* XML_DTD */ + /* fall through */ + case XML_ROLE_ENTITY_PUBLIC_ID: + if (!XmlIsPublicId(enc, s, next, eventPP)) + return XML_ERROR_SYNTAX; + if (declEntity) { + XML_Char *tem = poolStoreString(&dtd.pool, + enc, + s + enc->minBytesPerChar, + next - enc->minBytesPerChar); + if (!tem) + return XML_ERROR_NO_MEMORY; + normalizePublicId(tem); + declEntity->publicId = tem; + poolFinish(&dtd.pool); + } + break; + case XML_ROLE_DOCTYPE_CLOSE: + if (doctypeName) { + startDoctypeDeclHandler(handlerArg, doctypeName, + doctypeSysid, doctypePubid, 0); + poolClear(&tempPool); + } + if (dtd.complete && hadExternalDoctype) { + dtd.complete = 0; +#ifdef XML_DTD + if (paramEntityParsing && externalEntityRefHandler) { + ENTITY *entity = (ENTITY *)lookup(&dtd.paramEntities, + externalSubsetName, + 0); + if (!externalEntityRefHandler(externalEntityRefHandlerArg, + 0, + entity->base, + entity->systemId, + entity->publicId)) + return XML_ERROR_EXTERNAL_ENTITY_HANDLING; + } +#endif /* XML_DTD */ + if (!dtd.complete + && !dtd.standalone + && notStandaloneHandler + && !notStandaloneHandler(handlerArg)) + return XML_ERROR_NOT_STANDALONE; + } + if (endDoctypeDeclHandler) + endDoctypeDeclHandler(handlerArg); + break; + case XML_ROLE_INSTANCE_START: + processor = contentProcessor; + return contentProcessor(parser, s, end, nextPtr); + case XML_ROLE_ATTLIST_ELEMENT_NAME: + declElementType = getElementType(parser, enc, s, next); + if (!declElementType) + return XML_ERROR_NO_MEMORY; + break; + case XML_ROLE_ATTRIBUTE_NAME: + declAttributeId = getAttributeId(parser, enc, s, next); + if (!declAttributeId) + return XML_ERROR_NO_MEMORY; + declAttributeIsCdata = 0; + declAttributeType = 0; + declAttributeIsId = 0; + break; + case XML_ROLE_ATTRIBUTE_TYPE_CDATA: + declAttributeIsCdata = 1; + declAttributeType = "CDATA"; + break; + case XML_ROLE_ATTRIBUTE_TYPE_ID: + declAttributeIsId = 1; + declAttributeType = "ID"; + break; + case XML_ROLE_ATTRIBUTE_TYPE_IDREF: + declAttributeType = "IDREF"; + break; + case XML_ROLE_ATTRIBUTE_TYPE_IDREFS: + declAttributeType = "IDREFS"; + break; + case XML_ROLE_ATTRIBUTE_TYPE_ENTITY: + declAttributeType = "ENTITY"; + break; + case XML_ROLE_ATTRIBUTE_TYPE_ENTITIES: + declAttributeType = "ENTITIES"; + break; + case XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN: + declAttributeType = "NMTOKEN"; + break; + case XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS: + declAttributeType = "NMTOKENS"; + break; + + case XML_ROLE_ATTRIBUTE_ENUM_VALUE: + case XML_ROLE_ATTRIBUTE_NOTATION_VALUE: + if (attlistDeclHandler) + { + char *prefix; + if (declAttributeType) { + prefix = "|"; + } + else { + prefix = (role == XML_ROLE_ATTRIBUTE_NOTATION_VALUE + ? "NOTATION(" + : "("); + } + if (! poolAppendString(&tempPool, prefix)) + return XML_ERROR_NO_MEMORY; + if (! poolAppend(&tempPool, enc, s, next)) + return XML_ERROR_NO_MEMORY; + declAttributeType = tempPool.start; + } + break; + case XML_ROLE_IMPLIED_ATTRIBUTE_VALUE: + case XML_ROLE_REQUIRED_ATTRIBUTE_VALUE: + if (dtd.complete + && !defineAttribute(declElementType, declAttributeId, + declAttributeIsCdata, declAttributeIsId, 0, + parser)) + return XML_ERROR_NO_MEMORY; + if (attlistDeclHandler && declAttributeType) { + if (*declAttributeType == '(' + || *declAttributeType == 'N' && declAttributeType[1] == 'O') { + /* Enumerated or Notation type */ + if (! poolAppendChar(&tempPool, ')') + || ! poolAppendChar(&tempPool, '\0')) + return XML_ERROR_NO_MEMORY; + declAttributeType = tempPool.start; + poolFinish(&tempPool); + } + *eventEndPP = s; + attlistDeclHandler(handlerArg, declElementType->name, + declAttributeId->name, declAttributeType, + 0, role == XML_ROLE_REQUIRED_ATTRIBUTE_VALUE); + poolClear(&tempPool); + } + break; + case XML_ROLE_DEFAULT_ATTRIBUTE_VALUE: + case XML_ROLE_FIXED_ATTRIBUTE_VALUE: + { + const XML_Char *attVal; + enum XML_Error result + = storeAttributeValue(parser, enc, declAttributeIsCdata, + s + enc->minBytesPerChar, + next - enc->minBytesPerChar, + &dtd.pool); + if (result) + return result; + attVal = poolStart(&dtd.pool); + poolFinish(&dtd.pool); + if (dtd.complete + /* ID attributes aren't allowed to have a default */ + && !defineAttribute(declElementType, declAttributeId, declAttributeIsCdata, 0, attVal, parser)) + return XML_ERROR_NO_MEMORY; + if (attlistDeclHandler && declAttributeType) { + if (*declAttributeType == '(' + || *declAttributeType == 'N' && declAttributeType[1] == 'O') { + /* Enumerated or Notation type */ + if (! poolAppendChar(&tempPool, ')') + || ! poolAppendChar(&tempPool, '\0')) + return XML_ERROR_NO_MEMORY; + declAttributeType = tempPool.start; + poolFinish(&tempPool); + } + *eventEndPP = s; + attlistDeclHandler(handlerArg, declElementType->name, + declAttributeId->name, declAttributeType, + attVal, + role == XML_ROLE_FIXED_ATTRIBUTE_VALUE); + poolClear(&tempPool); + } + break; + } + case XML_ROLE_ENTITY_VALUE: + { + enum XML_Error result = storeEntityValue(parser, enc, + s + enc->minBytesPerChar, + next - enc->minBytesPerChar); + if (declEntity) { + declEntity->textPtr = poolStart(&dtd.pool); + declEntity->textLen = poolLength(&dtd.pool); + poolFinish(&dtd.pool); + if (entityDeclHandler) { + *eventEndPP = s; + entityDeclHandler(handlerArg, + declEntity->name, + declEntity->is_param, + declEntity->textPtr, + declEntity->textLen, + curBase, 0, 0, 0); + } + } + else + poolDiscard(&dtd.pool); + if (result != XML_ERROR_NONE) + return result; + } + break; + case XML_ROLE_DOCTYPE_SYSTEM_ID: + if (startDoctypeDeclHandler) { + doctypeSysid = poolStoreString(&tempPool, enc, s + 1, next - 1); + if (! doctypeSysid) + return XML_ERROR_NO_MEMORY; + poolFinish(&tempPool); + } + if (!dtd.standalone +#ifdef XML_DTD + && !paramEntityParsing +#endif /* XML_DTD */ + && notStandaloneHandler + && !notStandaloneHandler(handlerArg)) + return XML_ERROR_NOT_STANDALONE; + hadExternalDoctype = 1; +#ifndef XML_DTD + break; +#else /* XML_DTD */ + if (!declEntity) { + declEntity = (ENTITY *)lookup(&dtd.paramEntities, + externalSubsetName, + sizeof(ENTITY)); + declEntity->publicId = 0; + if (!declEntity) + return XML_ERROR_NO_MEMORY; + } + /* fall through */ +#endif /* XML_DTD */ + case XML_ROLE_ENTITY_SYSTEM_ID: + if (declEntity) { + declEntity->systemId = poolStoreString(&dtd.pool, enc, + s + enc->minBytesPerChar, + next - enc->minBytesPerChar); + if (!declEntity->systemId) + return XML_ERROR_NO_MEMORY; + declEntity->base = curBase; + poolFinish(&dtd.pool); + } + break; + case XML_ROLE_ENTITY_COMPLETE: + if (declEntity && entityDeclHandler) { + *eventEndPP = s; + entityDeclHandler(handlerArg, + declEntity->name, + 0,0,0, + declEntity->base, + declEntity->systemId, + declEntity->publicId, + 0); + } + break; + case XML_ROLE_ENTITY_NOTATION_NAME: + if (declEntity) { + declEntity->notation = poolStoreString(&dtd.pool, enc, s, next); + if (!declEntity->notation) + return XML_ERROR_NO_MEMORY; + poolFinish(&dtd.pool); + if (unparsedEntityDeclHandler) { + *eventEndPP = s; + unparsedEntityDeclHandler(handlerArg, + declEntity->name, + declEntity->base, + declEntity->systemId, + declEntity->publicId, + declEntity->notation); + } + else if (entityDeclHandler) { + *eventEndPP = s; + entityDeclHandler(handlerArg, + declEntity->name, + 0,0,0, + declEntity->base, + declEntity->systemId, + declEntity->publicId, + declEntity->notation); + } + } + break; + case XML_ROLE_GENERAL_ENTITY_NAME: + { + const XML_Char *name; + if (XmlPredefinedEntityName(enc, s, next)) { + declEntity = 0; + break; + } + name = poolStoreString(&dtd.pool, enc, s, next); + if (!name) + return XML_ERROR_NO_MEMORY; + if (dtd.complete) { + declEntity = (ENTITY *)lookup(&dtd.generalEntities, name, sizeof(ENTITY)); + if (!declEntity) + return XML_ERROR_NO_MEMORY; + if (declEntity->name != name) { + poolDiscard(&dtd.pool); + declEntity = 0; + } + else { + poolFinish(&dtd.pool); + declEntity->publicId = 0; + declEntity->is_param = 0; + } + } + else { + poolDiscard(&dtd.pool); + declEntity = 0; + } + } + break; + case XML_ROLE_PARAM_ENTITY_NAME: +#ifdef XML_DTD + if (dtd.complete) { + const XML_Char *name = poolStoreString(&dtd.pool, enc, s, next); + if (!name) + return XML_ERROR_NO_MEMORY; + declEntity = (ENTITY *)lookup(&dtd.paramEntities, + name, sizeof(ENTITY)); + if (!declEntity) + return XML_ERROR_NO_MEMORY; + if (declEntity->name != name) { + poolDiscard(&dtd.pool); + declEntity = 0; + } + else { + poolFinish(&dtd.pool); + declEntity->publicId = 0; + declEntity->is_param = 1; + } + } +#else /* not XML_DTD */ + declEntity = 0; +#endif /* not XML_DTD */ + break; + case XML_ROLE_NOTATION_NAME: + declNotationPublicId = 0; + declNotationName = 0; + if (notationDeclHandler) { + declNotationName = poolStoreString(&tempPool, enc, s, next); + if (!declNotationName) + return XML_ERROR_NO_MEMORY; + poolFinish(&tempPool); + } + break; + case XML_ROLE_NOTATION_PUBLIC_ID: + if (!XmlIsPublicId(enc, s, next, eventPP)) + return XML_ERROR_SYNTAX; + if (declNotationName) { + XML_Char *tem = poolStoreString(&tempPool, + enc, + s + enc->minBytesPerChar, + next - enc->minBytesPerChar); + if (!tem) + return XML_ERROR_NO_MEMORY; + normalizePublicId(tem); + declNotationPublicId = tem; + poolFinish(&tempPool); + } + break; + case XML_ROLE_NOTATION_SYSTEM_ID: + if (declNotationName && notationDeclHandler) { + const XML_Char *systemId + = poolStoreString(&tempPool, enc, + s + enc->minBytesPerChar, + next - enc->minBytesPerChar); + if (!systemId) + return XML_ERROR_NO_MEMORY; + *eventEndPP = s; + notationDeclHandler(handlerArg, + declNotationName, + curBase, + systemId, + declNotationPublicId); + } + poolClear(&tempPool); + break; + case XML_ROLE_NOTATION_NO_SYSTEM_ID: + if (declNotationPublicId && notationDeclHandler) { + *eventEndPP = s; + notationDeclHandler(handlerArg, + declNotationName, + curBase, + 0, + declNotationPublicId); + } + poolClear(&tempPool); + break; + case XML_ROLE_ERROR: + switch (tok) { + case XML_TOK_PARAM_ENTITY_REF: + return XML_ERROR_PARAM_ENTITY_REF; + case XML_TOK_XML_DECL: + return XML_ERROR_MISPLACED_XML_PI; + default: + return XML_ERROR_SYNTAX; + } +#ifdef XML_DTD + case XML_ROLE_IGNORE_SECT: + { + enum XML_Error result; + if (defaultHandler) + reportDefault(parser, enc, s, next); + result = doIgnoreSection(parser, enc, &next, end, nextPtr); + if (!next) { + processor = ignoreSectionProcessor; + return result; + } + } + break; +#endif /* XML_DTD */ + case XML_ROLE_GROUP_OPEN: + if (prologState.level >= groupSize) { + if (groupSize) { + groupConnector = REALLOC(groupConnector, groupSize *= 2); + if (dtd.scaffIndex) + dtd.scaffIndex = REALLOC(dtd.scaffIndex, groupSize * sizeof(int)); + } + else + groupConnector = MALLOC(groupSize = 32); + if (!groupConnector) + return XML_ERROR_NO_MEMORY; + } + groupConnector[prologState.level] = 0; + if (dtd.in_eldecl) { + int myindex = nextScaffoldPart(parser); + if (myindex < 0) + return XML_ERROR_NO_MEMORY; + dtd.scaffIndex[dtd.scaffLevel] = myindex; + dtd.scaffLevel++; + dtd.scaffold[myindex].type = XML_CTYPE_SEQ; + } + break; + case XML_ROLE_GROUP_SEQUENCE: + if (groupConnector[prologState.level] == '|') + return XML_ERROR_SYNTAX; + groupConnector[prologState.level] = ','; + break; + case XML_ROLE_GROUP_CHOICE: + if (groupConnector[prologState.level] == ',') + return XML_ERROR_SYNTAX; + if (dtd.in_eldecl + && ! groupConnector[prologState.level] + && dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]].type != XML_CTYPE_MIXED + ) { + dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]].type = XML_CTYPE_CHOICE; + } + groupConnector[prologState.level] = '|'; + break; + case XML_ROLE_PARAM_ENTITY_REF: +#ifdef XML_DTD + case XML_ROLE_INNER_PARAM_ENTITY_REF: + if (paramEntityParsing + && (dtd.complete || role == XML_ROLE_INNER_PARAM_ENTITY_REF)) { + const XML_Char *name; + ENTITY *entity; + name = poolStoreString(&dtd.pool, enc, + s + enc->minBytesPerChar, + next - enc->minBytesPerChar); + if (!name) + return XML_ERROR_NO_MEMORY; + entity = (ENTITY *)lookup(&dtd.paramEntities, name, 0); + poolDiscard(&dtd.pool); + if (!entity) { + /* FIXME what to do if !dtd.complete? */ + return XML_ERROR_UNDEFINED_ENTITY; + } + if (entity->open) + return XML_ERROR_RECURSIVE_ENTITY_REF; + if (entity->textPtr) { + enum XML_Error result; + result = processInternalParamEntity(parser, entity); + if (result != XML_ERROR_NONE) + return result; + break; + } + if (role == XML_ROLE_INNER_PARAM_ENTITY_REF) + return XML_ERROR_PARAM_ENTITY_REF; + if (externalEntityRefHandler) { + dtd.complete = 0; + entity->open = 1; + if (!externalEntityRefHandler(externalEntityRefHandlerArg, + 0, + entity->base, + entity->systemId, + entity->publicId)) { + entity->open = 0; + return XML_ERROR_EXTERNAL_ENTITY_HANDLING; + } + entity->open = 0; + if (dtd.complete) + break; + } + } +#endif /* XML_DTD */ + if (!dtd.standalone + && notStandaloneHandler + && !notStandaloneHandler(handlerArg)) + return XML_ERROR_NOT_STANDALONE; + dtd.complete = 0; + if (defaultHandler) + reportDefault(parser, enc, s, next); + break; + + /* Element declaration stuff */ + + case XML_ROLE_ELEMENT_NAME: + if (elementDeclHandler) { + declElementType = getElementType(parser, enc, s, next); + if (! declElementType) + return XML_ERROR_NO_MEMORY; + dtd.scaffLevel = 0; + dtd.scaffCount = 0; + dtd.in_eldecl = 1; + } + break; + + case XML_ROLE_CONTENT_ANY: + case XML_ROLE_CONTENT_EMPTY: + if (dtd.in_eldecl) { + if (elementDeclHandler) { + XML_Content * content = (XML_Content *) MALLOC(sizeof(XML_Content)); + if (! content) + return XML_ERROR_NO_MEMORY; + content->quant = XML_CQUANT_NONE; + content->name = 0; + content->numchildren = 0; + content->children = 0; + content->type = ((role == XML_ROLE_CONTENT_ANY) ? + XML_CTYPE_ANY : + XML_CTYPE_EMPTY); + *eventEndPP = s; + elementDeclHandler(handlerArg, declElementType->name, content); + } + dtd.in_eldecl = 0; + } + break; + + case XML_ROLE_CONTENT_PCDATA: + if (dtd.in_eldecl) { + dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]].type = XML_CTYPE_MIXED; + } + break; + + case XML_ROLE_CONTENT_ELEMENT: + quant = XML_CQUANT_NONE; + goto elementContent; + case XML_ROLE_CONTENT_ELEMENT_OPT: + quant = XML_CQUANT_OPT; + goto elementContent; + case XML_ROLE_CONTENT_ELEMENT_REP: + quant = XML_CQUANT_REP; + goto elementContent; + case XML_ROLE_CONTENT_ELEMENT_PLUS: + quant = XML_CQUANT_PLUS; + elementContent: + if (dtd.in_eldecl) + { + ELEMENT_TYPE *el; + const char *nxt = quant == XML_CQUANT_NONE ? next : next - 1; + int myindex = nextScaffoldPart(parser); + if (myindex < 0) + return XML_ERROR_NO_MEMORY; + dtd.scaffold[myindex].type = XML_CTYPE_NAME; + dtd.scaffold[myindex].quant = quant; + el = getElementType(parser, enc, s, nxt); + if (! el) + return XML_ERROR_NO_MEMORY; + dtd.scaffold[myindex].name = el->name; + dtd.contentStringLen += nxt - s + 1; + } + break; + + case XML_ROLE_GROUP_CLOSE: + quant = XML_CQUANT_NONE; + goto closeGroup; + case XML_ROLE_GROUP_CLOSE_OPT: + quant = XML_CQUANT_OPT; + goto closeGroup; + case XML_ROLE_GROUP_CLOSE_REP: + quant = XML_CQUANT_REP; + goto closeGroup; + case XML_ROLE_GROUP_CLOSE_PLUS: + quant = XML_CQUANT_PLUS; + closeGroup: + if (dtd.in_eldecl) { + dtd.scaffLevel--; + dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel]].quant = quant; + if (dtd.scaffLevel == 0) { + if (elementDeclHandler) { + XML_Content *model = build_model(parser); + if (! model) + return XML_ERROR_NO_MEMORY; + *eventEndPP = s; + elementDeclHandler(handlerArg, declElementType->name, model); + } + dtd.in_eldecl = 0; + dtd.contentStringLen = 0; + } + } + break; + /* End element declaration stuff */ + + case XML_ROLE_NONE: + switch (tok) { + case XML_TOK_PI: + if (!reportProcessingInstruction(parser, enc, s, next)) + return XML_ERROR_NO_MEMORY; + break; + case XML_TOK_COMMENT: + if (!reportComment(parser, enc, s, next)) + return XML_ERROR_NO_MEMORY; + break; + } + break; + } + if (defaultHandler) { + switch (tok) { + case XML_TOK_PI: + case XML_TOK_COMMENT: + case XML_TOK_BOM: + case XML_TOK_XML_DECL: +#ifdef XML_DTD + case XML_TOK_IGNORE_SECT: +#endif /* XML_DTD */ + case XML_TOK_PARAM_ENTITY_REF: + break; + default: +#ifdef XML_DTD + if (role != XML_ROLE_IGNORE_SECT) +#endif /* XML_DTD */ + reportDefault(parser, enc, s, next); + } + } + s = next; + tok = XmlPrologTok(enc, s, end, &next); + } + /* not reached */ +} + +static +enum XML_Error epilogProcessor(XML_Parser parser, + const char *s, + const char *end, + const char **nextPtr) +{ + processor = epilogProcessor; + eventPtr = s; + for (;;) { + const char *next; + int tok = XmlPrologTok(encoding, s, end, &next); + eventEndPtr = next; + switch (tok) { + case -XML_TOK_PROLOG_S: + if (defaultHandler) { + eventEndPtr = end; + reportDefault(parser, encoding, s, end); + } + /* fall through */ + case XML_TOK_NONE: + if (nextPtr) + *nextPtr = end; + return XML_ERROR_NONE; + case XML_TOK_PROLOG_S: + if (defaultHandler) + reportDefault(parser, encoding, s, next); + break; + case XML_TOK_PI: + if (!reportProcessingInstruction(parser, encoding, s, next)) + return XML_ERROR_NO_MEMORY; + break; + case XML_TOK_COMMENT: + if (!reportComment(parser, encoding, s, next)) + return XML_ERROR_NO_MEMORY; + break; + case XML_TOK_INVALID: + eventPtr = next; + return XML_ERROR_INVALID_TOKEN; + case XML_TOK_PARTIAL: + if (nextPtr) { + *nextPtr = s; + return XML_ERROR_NONE; + } + return XML_ERROR_UNCLOSED_TOKEN; + case XML_TOK_PARTIAL_CHAR: + if (nextPtr) { + *nextPtr = s; + return XML_ERROR_NONE; + } + return XML_ERROR_PARTIAL_CHAR; + default: + return XML_ERROR_JUNK_AFTER_DOC_ELEMENT; + } + eventPtr = s = next; + } +} + +#ifdef XML_DTD + +static enum XML_Error +processInternalParamEntity(XML_Parser parser, ENTITY *entity) +{ + const char *s, *end, *next; + int tok; + enum XML_Error result; + OPEN_INTERNAL_ENTITY openEntity; + entity->open = 1; + openEntity.next = openInternalEntities; + openInternalEntities = &openEntity; + openEntity.entity = entity; + openEntity.internalEventPtr = 0; + openEntity.internalEventEndPtr = 0; + s = (char *)entity->textPtr; + end = (char *)(entity->textPtr + entity->textLen); + tok = XmlPrologTok(internalEncoding, s, end, &next); + result = doProlog(parser, internalEncoding, s, end, tok, next, 0); + entity->open = 0; + openInternalEntities = openEntity.next; + return result; +} + +#endif /* XML_DTD */ + +static +enum XML_Error errorProcessor(XML_Parser parser, + const char *s, + const char *end, + const char **nextPtr) +{ + return errorCode; +} + +static enum XML_Error +storeAttributeValue(XML_Parser parser, const ENCODING *enc, int isCdata, + const char *ptr, const char *end, + STRING_POOL *pool) +{ + enum XML_Error result = appendAttributeValue(parser, enc, isCdata, ptr, end, pool); + if (result) + return result; + if (!isCdata && poolLength(pool) && poolLastChar(pool) == 0x20) + poolChop(pool); + if (!poolAppendChar(pool, XML_T('\0'))) + return XML_ERROR_NO_MEMORY; + return XML_ERROR_NONE; +} + +static enum XML_Error +appendAttributeValue(XML_Parser parser, const ENCODING *enc, int isCdata, + const char *ptr, const char *end, + STRING_POOL *pool) +{ + for (;;) { + const char *next; + int tok = XmlAttributeValueTok(enc, ptr, end, &next); + switch (tok) { + case XML_TOK_NONE: + return XML_ERROR_NONE; + case XML_TOK_INVALID: + if (enc == encoding) + eventPtr = next; + return XML_ERROR_INVALID_TOKEN; + case XML_TOK_PARTIAL: + if (enc == encoding) + eventPtr = ptr; + return XML_ERROR_INVALID_TOKEN; + case XML_TOK_CHAR_REF: + { + XML_Char buf[XML_ENCODE_MAX]; + int i; + int n = XmlCharRefNumber(enc, ptr); + if (n < 0) { + if (enc == encoding) + eventPtr = ptr; + return XML_ERROR_BAD_CHAR_REF; + } + if (!isCdata + && n == 0x20 /* space */ + && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) + break; + n = XmlEncode(n, (ICHAR *)buf); + if (!n) { + if (enc == encoding) + eventPtr = ptr; + return XML_ERROR_BAD_CHAR_REF; + } + for (i = 0; i < n; i++) { + if (!poolAppendChar(pool, buf[i])) + return XML_ERROR_NO_MEMORY; + } + } + break; + case XML_TOK_DATA_CHARS: + if (!poolAppend(pool, enc, ptr, next)) + return XML_ERROR_NO_MEMORY; + break; + break; + case XML_TOK_TRAILING_CR: + next = ptr + enc->minBytesPerChar; + /* fall through */ + case XML_TOK_ATTRIBUTE_VALUE_S: + case XML_TOK_DATA_NEWLINE: + if (!isCdata && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) + break; + if (!poolAppendChar(pool, 0x20)) + return XML_ERROR_NO_MEMORY; + break; + case XML_TOK_ENTITY_REF: + { + const XML_Char *name; + ENTITY *entity; + XML_Char ch = XmlPredefinedEntityName(enc, + ptr + enc->minBytesPerChar, + next - enc->minBytesPerChar); + if (ch) { + if (!poolAppendChar(pool, ch)) + return XML_ERROR_NO_MEMORY; + break; + } + name = poolStoreString(&temp2Pool, enc, + ptr + enc->minBytesPerChar, + next - enc->minBytesPerChar); + if (!name) + return XML_ERROR_NO_MEMORY; + entity = (ENTITY *)lookup(&dtd.generalEntities, name, 0); + poolDiscard(&temp2Pool); + if (!entity) { + if (dtd.complete) { + if (enc == encoding) + eventPtr = ptr; + return XML_ERROR_UNDEFINED_ENTITY; + } + } + else if (entity->open) { + if (enc == encoding) + eventPtr = ptr; + return XML_ERROR_RECURSIVE_ENTITY_REF; + } + else if (entity->notation) { + if (enc == encoding) + eventPtr = ptr; + return XML_ERROR_BINARY_ENTITY_REF; + } + else if (!entity->textPtr) { + if (enc == encoding) + eventPtr = ptr; + return XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF; + } + else { + enum XML_Error result; + const XML_Char *textEnd = entity->textPtr + entity->textLen; + entity->open = 1; + result = appendAttributeValue(parser, internalEncoding, isCdata, (char *)entity->textPtr, (char *)textEnd, pool); + entity->open = 0; + if (result) + return result; + } + } + break; + default: + if (enc == encoding) + eventPtr = ptr; + return XML_ERROR_UNEXPECTED_STATE; + } + ptr = next; + } + /* not reached */ +} + +static +enum XML_Error storeEntityValue(XML_Parser parser, + const ENCODING *enc, + const char *entityTextPtr, + const char *entityTextEnd) +{ + STRING_POOL *pool = &(dtd.pool); + for (;;) { + const char *next; + int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next); + switch (tok) { + case XML_TOK_PARAM_ENTITY_REF: +#ifdef XML_DTD + if (parentParser || enc != encoding) { + enum XML_Error result; + const XML_Char *name; + ENTITY *entity; + name = poolStoreString(&tempPool, enc, + entityTextPtr + enc->minBytesPerChar, + next - enc->minBytesPerChar); + if (!name) + return XML_ERROR_NO_MEMORY; + entity = (ENTITY *)lookup(&dtd.paramEntities, name, 0); + poolDiscard(&tempPool); + if (!entity) { + if (enc == encoding) + eventPtr = entityTextPtr; + return XML_ERROR_UNDEFINED_ENTITY; + } + if (entity->open) { + if (enc == encoding) + eventPtr = entityTextPtr; + return XML_ERROR_RECURSIVE_ENTITY_REF; + } + if (entity->systemId) { + if (enc == encoding) + eventPtr = entityTextPtr; + return XML_ERROR_PARAM_ENTITY_REF; + } + entity->open = 1; + result = storeEntityValue(parser, + internalEncoding, + (char *)entity->textPtr, + (char *)(entity->textPtr + entity->textLen)); + entity->open = 0; + if (result) + return result; + break; + } +#endif /* XML_DTD */ + eventPtr = entityTextPtr; + return XML_ERROR_SYNTAX; + case XML_TOK_NONE: + return XML_ERROR_NONE; + case XML_TOK_ENTITY_REF: + case XML_TOK_DATA_CHARS: + if (!poolAppend(pool, enc, entityTextPtr, next)) + return XML_ERROR_NO_MEMORY; + break; + case XML_TOK_TRAILING_CR: + next = entityTextPtr + enc->minBytesPerChar; + /* fall through */ + case XML_TOK_DATA_NEWLINE: + if (pool->end == pool->ptr && !poolGrow(pool)) + return XML_ERROR_NO_MEMORY; + *(pool->ptr)++ = 0xA; + break; + case XML_TOK_CHAR_REF: + { + XML_Char buf[XML_ENCODE_MAX]; + int i; + int n = XmlCharRefNumber(enc, entityTextPtr); + if (n < 0) { + if (enc == encoding) + eventPtr = entityTextPtr; + return XML_ERROR_BAD_CHAR_REF; + } + n = XmlEncode(n, (ICHAR *)buf); + if (!n) { + if (enc == encoding) + eventPtr = entityTextPtr; + return XML_ERROR_BAD_CHAR_REF; + } + for (i = 0; i < n; i++) { + if (pool->end == pool->ptr && !poolGrow(pool)) + return XML_ERROR_NO_MEMORY; + *(pool->ptr)++ = buf[i]; + } + } + break; + case XML_TOK_PARTIAL: + if (enc == encoding) + eventPtr = entityTextPtr; + return XML_ERROR_INVALID_TOKEN; + case XML_TOK_INVALID: + if (enc == encoding) + eventPtr = next; + return XML_ERROR_INVALID_TOKEN; + default: + if (enc == encoding) + eventPtr = entityTextPtr; + return XML_ERROR_UNEXPECTED_STATE; + } + entityTextPtr = next; + } + /* not reached */ +} + +static void +normalizeLines(XML_Char *s) +{ + XML_Char *p; + for (;; s++) { + if (*s == XML_T('\0')) + return; + if (*s == 0xD) + break; + } + p = s; + do { + if (*s == 0xD) { + *p++ = 0xA; + if (*++s == 0xA) + s++; + } + else + *p++ = *s++; + } while (*s); + *p = XML_T('\0'); +} + +static int +reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) +{ + const XML_Char *target; + XML_Char *data; + const char *tem; + if (!processingInstructionHandler) { + if (defaultHandler) + reportDefault(parser, enc, start, end); + return 1; + } + start += enc->minBytesPerChar * 2; + tem = start + XmlNameLength(enc, start); + target = poolStoreString(&tempPool, enc, start, tem); + if (!target) + return 0; + poolFinish(&tempPool); + data = poolStoreString(&tempPool, enc, + XmlSkipS(enc, tem), + end - enc->minBytesPerChar*2); + if (!data) + return 0; + normalizeLines(data); + processingInstructionHandler(handlerArg, target, data); + poolClear(&tempPool); + return 1; +} + +static int +reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) +{ + XML_Char *data; + if (!commentHandler) { + if (defaultHandler) + reportDefault(parser, enc, start, end); + return 1; + } + data = poolStoreString(&tempPool, + enc, + start + enc->minBytesPerChar * 4, + end - enc->minBytesPerChar * 3); + if (!data) + return 0; + normalizeLines(data); + commentHandler(handlerArg, data); + poolClear(&tempPool); + return 1; +} + +static void +reportDefault(XML_Parser parser, const ENCODING *enc, const char *s, const char *end) +{ + if (MUST_CONVERT(enc, s)) { + const char **eventPP; + const char **eventEndPP; + if (enc == encoding) { + eventPP = &eventPtr; + eventEndPP = &eventEndPtr; + } + else { + eventPP = &(openInternalEntities->internalEventPtr); + eventEndPP = &(openInternalEntities->internalEventEndPtr); + } + do { + ICHAR *dataPtr = (ICHAR *)dataBuf; + XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd); + *eventEndPP = s; + defaultHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); + *eventPP = s; + } while (s != end); + } + else + defaultHandler(handlerArg, (XML_Char *)s, (XML_Char *)end - (XML_Char *)s); +} + + +static int +defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, int isCdata, + int isId, const XML_Char *value, XML_Parser parser) +{ + DEFAULT_ATTRIBUTE *att; + if (value || isId) { + /* The handling of default attributes gets messed up if we have + a default which duplicates a non-default. */ + int i; + for (i = 0; i < type->nDefaultAtts; i++) + if (attId == type->defaultAtts[i].id) + return 1; + if (isId && !type->idAtt && !attId->xmlns) + type->idAtt = attId; + } + if (type->nDefaultAtts == type->allocDefaultAtts) { + if (type->allocDefaultAtts == 0) { + type->allocDefaultAtts = 8; + type->defaultAtts = MALLOC(type->allocDefaultAtts*sizeof(DEFAULT_ATTRIBUTE)); + } + else { + type->allocDefaultAtts *= 2; + type->defaultAtts = REALLOC(type->defaultAtts, + type->allocDefaultAtts*sizeof(DEFAULT_ATTRIBUTE)); + } + if (!type->defaultAtts) + return 0; + } + att = type->defaultAtts + type->nDefaultAtts; + att->id = attId; + att->value = value; + att->isCdata = isCdata; + if (!isCdata) + attId->maybeTokenized = 1; + type->nDefaultAtts += 1; + return 1; +} + +static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType) +{ + const XML_Char *name; + for (name = elementType->name; *name; name++) { + if (*name == XML_T(':')) { + PREFIX *prefix; + const XML_Char *s; + for (s = elementType->name; s != name; s++) { + if (!poolAppendChar(&dtd.pool, *s)) + return 0; + } + if (!poolAppendChar(&dtd.pool, XML_T('\0'))) + return 0; + prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&dtd.pool), sizeof(PREFIX)); + if (!prefix) + return 0; + if (prefix->name == poolStart(&dtd.pool)) + poolFinish(&dtd.pool); + else + poolDiscard(&dtd.pool); + elementType->prefix = prefix; + + } + } + return 1; +} + +static ATTRIBUTE_ID * +getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) +{ + ATTRIBUTE_ID *id; + const XML_Char *name; + if (!poolAppendChar(&dtd.pool, XML_T('\0'))) + return 0; + name = poolStoreString(&dtd.pool, enc, start, end); + if (!name) + return 0; + ++name; + id = (ATTRIBUTE_ID *)lookup(&dtd.attributeIds, name, sizeof(ATTRIBUTE_ID)); + if (!id) + return 0; + if (id->name != name) + poolDiscard(&dtd.pool); + else { + poolFinish(&dtd.pool); + if (!ns) + ; + else if (name[0] == 'x' + && name[1] == 'm' + && name[2] == 'l' + && name[3] == 'n' + && name[4] == 's' + && (name[5] == XML_T('\0') || name[5] == XML_T(':'))) { + if (name[5] == '\0') + id->prefix = &dtd.defaultPrefix; + else + id->prefix = (PREFIX *)lookup(&dtd.prefixes, name + 6, sizeof(PREFIX)); + id->xmlns = 1; + } + else { + int i; + for (i = 0; name[i]; i++) { + if (name[i] == XML_T(':')) { + int j; + for (j = 0; j < i; j++) { + if (!poolAppendChar(&dtd.pool, name[j])) + return 0; + } + if (!poolAppendChar(&dtd.pool, XML_T('\0'))) + return 0; + id->prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&dtd.pool), sizeof(PREFIX)); + if (id->prefix->name == poolStart(&dtd.pool)) + poolFinish(&dtd.pool); + else + poolDiscard(&dtd.pool); + break; + } + } + } + } + return id; +} + +#define CONTEXT_SEP XML_T('\f') + +static +const XML_Char *getContext(XML_Parser parser) +{ + HASH_TABLE_ITER iter; + int needSep = 0; + + if (dtd.defaultPrefix.binding) { + int i; + int len; + if (!poolAppendChar(&tempPool, XML_T('='))) + return 0; + len = dtd.defaultPrefix.binding->uriLen; + if (namespaceSeparator != XML_T('\0')) + len--; + for (i = 0; i < len; i++) + if (!poolAppendChar(&tempPool, dtd.defaultPrefix.binding->uri[i])) + return 0; + needSep = 1; + } + + hashTableIterInit(&iter, &(dtd.prefixes)); + for (;;) { + int i; + int len; + const XML_Char *s; + PREFIX *prefix = (PREFIX *)hashTableIterNext(&iter); + if (!prefix) + break; + if (!prefix->binding) + continue; + if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP)) + return 0; + for (s = prefix->name; *s; s++) + if (!poolAppendChar(&tempPool, *s)) + return 0; + if (!poolAppendChar(&tempPool, XML_T('='))) + return 0; + len = prefix->binding->uriLen; + if (namespaceSeparator != XML_T('\0')) + len--; + for (i = 0; i < len; i++) + if (!poolAppendChar(&tempPool, prefix->binding->uri[i])) + return 0; + needSep = 1; + } + + + hashTableIterInit(&iter, &(dtd.generalEntities)); + for (;;) { + const XML_Char *s; + ENTITY *e = (ENTITY *)hashTableIterNext(&iter); + if (!e) + break; + if (!e->open) + continue; + if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP)) + return 0; + for (s = e->name; *s; s++) + if (!poolAppendChar(&tempPool, *s)) + return 0; + needSep = 1; + } + + if (!poolAppendChar(&tempPool, XML_T('\0'))) + return 0; + return tempPool.start; +} + +static +int setContext(XML_Parser parser, const XML_Char *context) +{ + const XML_Char *s = context; + + while (*context != XML_T('\0')) { + if (*s == CONTEXT_SEP || *s == XML_T('\0')) { + ENTITY *e; + if (!poolAppendChar(&tempPool, XML_T('\0'))) + return 0; + e = (ENTITY *)lookup(&dtd.generalEntities, poolStart(&tempPool), 0); + if (e) + e->open = 1; + if (*s != XML_T('\0')) + s++; + context = s; + poolDiscard(&tempPool); + } + else if (*s == '=') { + PREFIX *prefix; + if (poolLength(&tempPool) == 0) + prefix = &dtd.defaultPrefix; + else { + if (!poolAppendChar(&tempPool, XML_T('\0'))) + return 0; + prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&tempPool), sizeof(PREFIX)); + if (!prefix) + return 0; + if (prefix->name == poolStart(&tempPool)) { + prefix->name = poolCopyString(&dtd.pool, prefix->name); + if (!prefix->name) + return 0; + } + poolDiscard(&tempPool); + } + for (context = s + 1; *context != CONTEXT_SEP && *context != XML_T('\0'); context++) + if (!poolAppendChar(&tempPool, *context)) + return 0; + if (!poolAppendChar(&tempPool, XML_T('\0'))) + return 0; + if (!addBinding(parser, prefix, 0, poolStart(&tempPool), &inheritedBindings)) + return 0; + poolDiscard(&tempPool); + if (*context != XML_T('\0')) + ++context; + s = context; + } + else { + if (!poolAppendChar(&tempPool, *s)) + return 0; + s++; + } + } + return 1; +} + + +static +void normalizePublicId(XML_Char *publicId) +{ + XML_Char *p = publicId; + XML_Char *s; + for (s = publicId; *s; s++) { + switch (*s) { + case 0x20: + case 0xD: + case 0xA: + if (p != publicId && p[-1] != 0x20) + *p++ = 0x20; + break; + default: + *p++ = *s; + } + } + if (p != publicId && p[-1] == 0x20) + --p; + *p = XML_T('\0'); +} + +static int dtdInit(DTD *p, XML_Parser parser) +{ + XML_Memory_Handling_Suite *ms = &((Parser *) parser)->m_mem; + poolInit(&(p->pool), ms); + hashTableInit(&(p->generalEntities), ms); + hashTableInit(&(p->elementTypes), ms); + hashTableInit(&(p->attributeIds), ms); + hashTableInit(&(p->prefixes), ms); + p->complete = 1; + p->standalone = 0; +#ifdef XML_DTD + hashTableInit(&(p->paramEntities), ms); +#endif /* XML_DTD */ + p->defaultPrefix.name = 0; + p->defaultPrefix.binding = 0; + + p->in_eldecl = 0; + p->scaffIndex = 0; + p->scaffLevel = 0; + p->scaffold = 0; + p->contentStringLen = 0; + p->scaffSize = 0; + p->scaffCount = 0; + + return 1; +} + +#ifdef XML_DTD + +static void dtdSwap(DTD *p1, DTD *p2) +{ + DTD tem; + memcpy(&tem, p1, sizeof(DTD)); + memcpy(p1, p2, sizeof(DTD)); + memcpy(p2, &tem, sizeof(DTD)); +} + +#endif /* XML_DTD */ + +static void dtdDestroy(DTD *p, XML_Parser parser) +{ + HASH_TABLE_ITER iter; + hashTableIterInit(&iter, &(p->elementTypes)); + for (;;) { + ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter); + if (!e) + break; + if (e->allocDefaultAtts != 0) + FREE(e->defaultAtts); + } + hashTableDestroy(&(p->generalEntities)); +#ifdef XML_DTD + hashTableDestroy(&(p->paramEntities)); +#endif /* XML_DTD */ + hashTableDestroy(&(p->elementTypes)); + hashTableDestroy(&(p->attributeIds)); + hashTableDestroy(&(p->prefixes)); + poolDestroy(&(p->pool)); + if (p->scaffIndex) + FREE(p->scaffIndex); + if (p->scaffold) + FREE(p->scaffold); +} + +/* Do a deep copy of the DTD. Return 0 for out of memory; non-zero otherwise. +The new DTD has already been initialized. */ + +static int dtdCopy(DTD *newDtd, const DTD *oldDtd, XML_Parser parser) +{ + HASH_TABLE_ITER iter; + + /* Copy the prefix table. */ + + hashTableIterInit(&iter, &(oldDtd->prefixes)); + for (;;) { + const XML_Char *name; + const PREFIX *oldP = (PREFIX *)hashTableIterNext(&iter); + if (!oldP) + break; + name = poolCopyString(&(newDtd->pool), oldP->name); + if (!name) + return 0; + if (!lookup(&(newDtd->prefixes), name, sizeof(PREFIX))) + return 0; + } + + hashTableIterInit(&iter, &(oldDtd->attributeIds)); + + /* Copy the attribute id table. */ + + for (;;) { + ATTRIBUTE_ID *newA; + const XML_Char *name; + const ATTRIBUTE_ID *oldA = (ATTRIBUTE_ID *)hashTableIterNext(&iter); + + if (!oldA) + break; + /* Remember to allocate the scratch byte before the name. */ + if (!poolAppendChar(&(newDtd->pool), XML_T('\0'))) + return 0; + name = poolCopyString(&(newDtd->pool), oldA->name); + if (!name) + return 0; + ++name; + newA = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), name, sizeof(ATTRIBUTE_ID)); + if (!newA) + return 0; + newA->maybeTokenized = oldA->maybeTokenized; + if (oldA->prefix) { + newA->xmlns = oldA->xmlns; + if (oldA->prefix == &oldDtd->defaultPrefix) + newA->prefix = &newDtd->defaultPrefix; + else + newA->prefix = (PREFIX *)lookup(&(newDtd->prefixes), oldA->prefix->name, 0); + } + } + + /* Copy the element type table. */ + + hashTableIterInit(&iter, &(oldDtd->elementTypes)); + + for (;;) { + int i; + ELEMENT_TYPE *newE; + const XML_Char *name; + const ELEMENT_TYPE *oldE = (ELEMENT_TYPE *)hashTableIterNext(&iter); + if (!oldE) + break; + name = poolCopyString(&(newDtd->pool), oldE->name); + if (!name) + return 0; + newE = (ELEMENT_TYPE *)lookup(&(newDtd->elementTypes), name, sizeof(ELEMENT_TYPE)); + if (!newE) + return 0; + if (oldE->nDefaultAtts) { + newE->defaultAtts = (DEFAULT_ATTRIBUTE *)MALLOC(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); + if (!newE->defaultAtts) + return 0; + } + if (oldE->idAtt) + newE->idAtt = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), oldE->idAtt->name, 0); + newE->allocDefaultAtts = newE->nDefaultAtts = oldE->nDefaultAtts; + if (oldE->prefix) + newE->prefix = (PREFIX *)lookup(&(newDtd->prefixes), oldE->prefix->name, 0); + for (i = 0; i < newE->nDefaultAtts; i++) { + newE->defaultAtts[i].id = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), oldE->defaultAtts[i].id->name, 0); + newE->defaultAtts[i].isCdata = oldE->defaultAtts[i].isCdata; + if (oldE->defaultAtts[i].value) { + newE->defaultAtts[i].value = poolCopyString(&(newDtd->pool), oldE->defaultAtts[i].value); + if (!newE->defaultAtts[i].value) + return 0; + } + else + newE->defaultAtts[i].value = 0; + } + } + + /* Copy the entity tables. */ + if (!copyEntityTable(&(newDtd->generalEntities), + &(newDtd->pool), + &(oldDtd->generalEntities), parser)) + return 0; + +#ifdef XML_DTD + if (!copyEntityTable(&(newDtd->paramEntities), + &(newDtd->pool), + &(oldDtd->paramEntities), parser)) + return 0; +#endif /* XML_DTD */ + + newDtd->complete = oldDtd->complete; + newDtd->standalone = oldDtd->standalone; + + /* Don't want deep copying for scaffolding */ + newDtd->in_eldecl = oldDtd->in_eldecl; + newDtd->scaffold = oldDtd->scaffold; + newDtd->contentStringLen = oldDtd->contentStringLen; + newDtd->scaffSize = oldDtd->scaffSize; + newDtd->scaffLevel = oldDtd->scaffLevel; + newDtd->scaffIndex = oldDtd->scaffIndex; + + return 1; +} /* End dtdCopy */ + +static int copyEntityTable(HASH_TABLE *newTable, + STRING_POOL *newPool, + const HASH_TABLE *oldTable, + XML_Parser parser) +{ + HASH_TABLE_ITER iter; + const XML_Char *cachedOldBase = 0; + const XML_Char *cachedNewBase = 0; + + hashTableIterInit(&iter, oldTable); + + for (;;) { + ENTITY *newE; + const XML_Char *name; + const ENTITY *oldE = (ENTITY *)hashTableIterNext(&iter); + if (!oldE) + break; + name = poolCopyString(newPool, oldE->name); + if (!name) + return 0; + newE = (ENTITY *)lookup(newTable, name, sizeof(ENTITY)); + if (!newE) + return 0; + if (oldE->systemId) { + const XML_Char *tem = poolCopyString(newPool, oldE->systemId); + if (!tem) + return 0; + newE->systemId = tem; + if (oldE->base) { + if (oldE->base == cachedOldBase) + newE->base = cachedNewBase; + else { + cachedOldBase = oldE->base; + tem = poolCopyString(newPool, cachedOldBase); + if (!tem) + return 0; + cachedNewBase = newE->base = tem; + } + } + } + else { + const XML_Char *tem = poolCopyStringN(newPool, oldE->textPtr, oldE->textLen); + if (!tem) + return 0; + newE->textPtr = tem; + newE->textLen = oldE->textLen; + } + if (oldE->notation) { + const XML_Char *tem = poolCopyString(newPool, oldE->notation); + if (!tem) + return 0; + newE->notation = tem; + } + } + return 1; +} + +#define INIT_SIZE 64 + +static +int keyeq(KEY s1, KEY s2) +{ + for (; *s1 == *s2; s1++, s2++) + if (*s1 == 0) + return 1; + return 0; +} + +static +unsigned long hash(KEY s) +{ + unsigned long h = 0; + while (*s) + h = (h << 5) + h + (unsigned char)*s++; + return h; +} + +static +NAMED *lookup(HASH_TABLE *table, KEY name, size_t createSize) +{ + size_t i; + if (table->size == 0) { + size_t tsize; + + if (!createSize) + return 0; + tsize = INIT_SIZE * sizeof(NAMED *); + table->v = table->mem->malloc_fcn(tsize); + if (!table->v) + return 0; + memset(table->v, 0, tsize); + table->size = INIT_SIZE; + table->usedLim = INIT_SIZE / 2; + i = hash(name) & (table->size - 1); + } + else { + unsigned long h = hash(name); + for (i = h & (table->size - 1); + table->v[i]; + i == 0 ? i = table->size - 1 : --i) { + if (keyeq(name, table->v[i]->name)) + return table->v[i]; + } + if (!createSize) + return 0; + if (table->used == table->usedLim) { + /* check for overflow */ + size_t newSize = table->size * 2; + size_t tsize = newSize * sizeof(NAMED *); + NAMED **newV = table->mem->malloc_fcn(tsize); + if (!newV) + return 0; + memset(newV, 0, tsize); + for (i = 0; i < table->size; i++) + if (table->v[i]) { + size_t j; + for (j = hash(table->v[i]->name) & (newSize - 1); + newV[j]; + j == 0 ? j = newSize - 1 : --j) + ; + newV[j] = table->v[i]; + } + table->mem->free_fcn(table->v); + table->v = newV; + table->size = newSize; + table->usedLim = newSize/2; + for (i = h & (table->size - 1); + table->v[i]; + i == 0 ? i = table->size - 1 : --i) + ; + } + } + table->v[i] = table->mem->malloc_fcn(createSize); + if (!table->v[i]) + return 0; + memset(table->v[i], 0, createSize); + table->v[i]->name = name; + (table->used)++; + return table->v[i]; +} + +static +void hashTableDestroy(HASH_TABLE *table) +{ + size_t i; + for (i = 0; i < table->size; i++) { + NAMED *p = table->v[i]; + if (p) + table->mem->free_fcn(p); + } + if (table->v) + table->mem->free_fcn(table->v); +} + +static +void hashTableInit(HASH_TABLE *p, XML_Memory_Handling_Suite *ms) +{ + p->size = 0; + p->usedLim = 0; + p->used = 0; + p->v = 0; + p->mem = ms; +} + +static +void hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table) +{ + iter->p = table->v; + iter->end = iter->p + table->size; +} + +static +NAMED *hashTableIterNext(HASH_TABLE_ITER *iter) +{ + while (iter->p != iter->end) { + NAMED *tem = *(iter->p)++; + if (tem) + return tem; + } + return 0; +} + + +static +void poolInit(STRING_POOL *pool, XML_Memory_Handling_Suite *ms) +{ + pool->blocks = 0; + pool->freeBlocks = 0; + pool->start = 0; + pool->ptr = 0; + pool->end = 0; + pool->mem = ms; +} + +static +void poolClear(STRING_POOL *pool) +{ + if (!pool->freeBlocks) + pool->freeBlocks = pool->blocks; + else { + BLOCK *p = pool->blocks; + while (p) { + BLOCK *tem = p->next; + p->next = pool->freeBlocks; + pool->freeBlocks = p; + p = tem; + } + } + pool->blocks = 0; + pool->start = 0; + pool->ptr = 0; + pool->end = 0; +} + +static +void poolDestroy(STRING_POOL *pool) +{ + BLOCK *p = pool->blocks; + while (p) { + BLOCK *tem = p->next; + pool->mem->free_fcn(p); + p = tem; + } + pool->blocks = 0; + p = pool->freeBlocks; + while (p) { + BLOCK *tem = p->next; + pool->mem->free_fcn(p); + p = tem; + } + pool->freeBlocks = 0; + pool->ptr = 0; + pool->start = 0; + pool->end = 0; +} + +static +XML_Char *poolAppend(STRING_POOL *pool, const ENCODING *enc, + const char *ptr, const char *end) +{ + if (!pool->ptr && !poolGrow(pool)) + return 0; + for (;;) { + XmlConvert(enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end); + if (ptr == end) + break; + if (!poolGrow(pool)) + return 0; + } + return pool->start; +} + +static const XML_Char *poolCopyString(STRING_POOL *pool, const XML_Char *s) +{ + do { + if (!poolAppendChar(pool, *s)) + return 0; + } while (*s++); + s = pool->start; + poolFinish(pool); + return s; +} + +static const XML_Char *poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n) +{ + if (!pool->ptr && !poolGrow(pool)) + return 0; + for (; n > 0; --n, s++) { + if (!poolAppendChar(pool, *s)) + return 0; + + } + s = pool->start; + poolFinish(pool); + return s; +} + +static +const XML_Char *poolAppendString(STRING_POOL *pool, const XML_Char *s) +{ + while (*s) { + if (!poolAppendChar(pool, *s)) + return 0; + s++; + } + return pool->start; +} /* End poolAppendString */ + +static +XML_Char *poolStoreString(STRING_POOL *pool, const ENCODING *enc, + const char *ptr, const char *end) +{ + if (!poolAppend(pool, enc, ptr, end)) + return 0; + if (pool->ptr == pool->end && !poolGrow(pool)) + return 0; + *(pool->ptr)++ = 0; + return pool->start; +} + +static +int poolGrow(STRING_POOL *pool) +{ + if (pool->freeBlocks) { + if (pool->start == 0) { + pool->blocks = pool->freeBlocks; + pool->freeBlocks = pool->freeBlocks->next; + pool->blocks->next = 0; + pool->start = pool->blocks->s; + pool->end = pool->start + pool->blocks->size; + pool->ptr = pool->start; + return 1; + } + if (pool->end - pool->start < pool->freeBlocks->size) { + BLOCK *tem = pool->freeBlocks->next; + pool->freeBlocks->next = pool->blocks; + pool->blocks = pool->freeBlocks; + pool->freeBlocks = tem; + memcpy(pool->blocks->s, pool->start, (pool->end - pool->start) * sizeof(XML_Char)); + pool->ptr = pool->blocks->s + (pool->ptr - pool->start); + pool->start = pool->blocks->s; + pool->end = pool->start + pool->blocks->size; + return 1; + } + } + if (pool->blocks && pool->start == pool->blocks->s) { + int blockSize = (pool->end - pool->start)*2; + pool->blocks = pool->mem->realloc_fcn(pool->blocks, offsetof(BLOCK, s) + blockSize * sizeof(XML_Char)); + if (!pool->blocks) + return 0; + pool->blocks->size = blockSize; + pool->ptr = pool->blocks->s + (pool->ptr - pool->start); + pool->start = pool->blocks->s; + pool->end = pool->start + blockSize; + } + else { + BLOCK *tem; + int blockSize = pool->end - pool->start; + if (blockSize < INIT_BLOCK_SIZE) + blockSize = INIT_BLOCK_SIZE; + else + blockSize *= 2; + tem = pool->mem->malloc_fcn(offsetof(BLOCK, s) + blockSize * sizeof(XML_Char)); + if (!tem) + return 0; + tem->size = blockSize; + tem->next = pool->blocks; + pool->blocks = tem; + if (pool->ptr != pool->start) + memcpy(tem->s, pool->start, (pool->ptr - pool->start) * sizeof(XML_Char)); + pool->ptr = tem->s + (pool->ptr - pool->start); + pool->start = tem->s; + pool->end = tem->s + blockSize; + } + return 1; +} + +static int +nextScaffoldPart(XML_Parser parser) +{ + CONTENT_SCAFFOLD * me; + int next; + + if (! dtd.scaffIndex) { + dtd.scaffIndex = MALLOC(groupSize * sizeof(int)); + if (! dtd.scaffIndex) + return -1; + dtd.scaffIndex[0] = 0; + } + + if (dtd.scaffCount >= dtd.scaffSize) { + if (dtd.scaffold) { + dtd.scaffSize *= 2; + dtd.scaffold = (CONTENT_SCAFFOLD *) REALLOC(dtd.scaffold, + dtd.scaffSize * sizeof(CONTENT_SCAFFOLD)); + } + else { + dtd.scaffSize = 32; + dtd.scaffold = (CONTENT_SCAFFOLD *) MALLOC(dtd.scaffSize * sizeof(CONTENT_SCAFFOLD)); + } + if (! dtd.scaffold) + return -1; + } + next = dtd.scaffCount++; + me = &dtd.scaffold[next]; + if (dtd.scaffLevel) { + CONTENT_SCAFFOLD *parent = &dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]]; + if (parent->lastchild) { + dtd.scaffold[parent->lastchild].nextsib = next; + } + if (! parent->childcnt) + parent->firstchild = next; + parent->lastchild = next; + parent->childcnt++; + } + me->firstchild = me->lastchild = me->childcnt = me->nextsib = 0; + return next; +} /* End nextScaffoldPart */ + +static void +build_node (XML_Parser parser, + int src_node, + XML_Content *dest, + XML_Content **contpos, + char **strpos) +{ + dest->type = dtd.scaffold[src_node].type; + dest->quant = dtd.scaffold[src_node].quant; + if (dest->type == XML_CTYPE_NAME) { + const char *src; + dest->name = *strpos; + src = dtd.scaffold[src_node].name; + for (;;) { + *(*strpos)++ = *src; + if (! *src) + break; + src++; + } + dest->numchildren = 0; + dest->children = 0; + } + else { + unsigned int i; + int cn; + dest->numchildren = dtd.scaffold[src_node].childcnt; + dest->children = *contpos; + *contpos += dest->numchildren; + for (i = 0, cn = dtd.scaffold[src_node].firstchild; + i < dest->numchildren; + i++, cn = dtd.scaffold[cn].nextsib) { + build_node(parser, cn, &(dest->children[i]), contpos, strpos); + } + dest->name = 0; + } +} /* End build_node */ + +static XML_Content * +build_model (XML_Parser parser) +{ + XML_Content *ret; + XML_Content *cpos; + char * str; + int allocsize = dtd.scaffCount * sizeof(XML_Content) + dtd.contentStringLen; + + ret = MALLOC(allocsize); + if (! ret) + return 0; + + str = (char *) (&ret[dtd.scaffCount]); + cpos = &ret[1]; + + build_node(parser, 0, ret, &cpos, &str); + return ret; +} /* End build_model */ + +static ELEMENT_TYPE * +getElementType(XML_Parser parser, + const ENCODING *enc, + const char *ptr, + const char *end) +{ + const XML_Char *name = poolStoreString(&dtd.pool, enc, ptr, end); + ELEMENT_TYPE *ret; + + if (! name) + return 0; + ret = (ELEMENT_TYPE *) lookup(&dtd.elementTypes, name, sizeof(ELEMENT_TYPE)); + if (! ret) + return 0; + if (ret->name != name) + poolDiscard(&dtd.pool); + else { + poolFinish(&dtd.pool); + if (!setElementTypePrefix(parser, ret)) + return 0; + } + return ret; +} /* End getElementType */ diff --git a/Build/source/extra/expat/lib/xmlrole.c b/Build/source/extra/expat/lib/xmlrole.c new file mode 100644 index 00000000000..09fb12d6c75 --- /dev/null +++ b/Build/source/extra/expat/lib/xmlrole.c @@ -0,0 +1,1275 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +static char RCSId[] + = "$Header: /cvsroot/expat/expat/lib/xmlrole.c,v 1.5 2000/10/22 19:20:23 coopercc Exp $"; + +#ifdef COMPILED_FROM_DSP +# include "winconfig.h" +#else +# include +#endif /* ndef COMPILED_FROM_DSP */ + +#include "xmlrole.h" +#include "ascii.h" + +/* Doesn't check: + + that ,| are not mixed in a model group + content of literals + +*/ + +static const char KW_ANY[] = { ASCII_A, ASCII_N, ASCII_Y, '\0' }; +static const char KW_ATTLIST[] = { ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0' }; +static const char KW_CDATA[] = { ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; +static const char KW_DOCTYPE[] = { ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0' }; +static const char KW_ELEMENT[] = { ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0' }; +static const char KW_EMPTY[] = { ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0' }; +static const char KW_ENTITIES[] = { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S, '\0' }; +static const char KW_ENTITY[] = { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' }; +static const char KW_FIXED[] = { ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0' }; +static const char KW_ID[] = { ASCII_I, ASCII_D, '\0' }; +static const char KW_IDREF[] = { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' }; +static const char KW_IDREFS[] = { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' }; +static const char KW_IGNORE[] = { ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0' }; +static const char KW_IMPLIED[] = { ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0' }; +static const char KW_INCLUDE[] = { ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0' }; +static const char KW_NDATA[] = { ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; +static const char KW_NMTOKEN[] = { ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' }; +static const char KW_NMTOKENS[] = { ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S, '\0' }; +static const char KW_NOTATION[] = { ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N, '\0' }; +static const char KW_PCDATA[] = { ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; +static const char KW_PUBLIC[] = { ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0' }; +static const char KW_REQUIRED[] = { ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I, ASCII_R, ASCII_E, ASCII_D, '\0' }; +static const char KW_SYSTEM[] = { ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0' }; + +#ifndef MIN_BYTES_PER_CHAR +#define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar) +#endif + +#ifdef XML_DTD +#define setTopLevel(state) \ + ((state)->handler = ((state)->documentEntity \ + ? internalSubset \ + : externalSubset1)) +#else /* not XML_DTD */ +#define setTopLevel(state) ((state)->handler = internalSubset) +#endif /* not XML_DTD */ + +typedef int PROLOG_HANDLER(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc); + +static PROLOG_HANDLER + prolog0, prolog1, prolog2, + doctype0, doctype1, doctype2, doctype3, doctype4, doctype5, + internalSubset, + entity0, entity1, entity2, entity3, entity4, entity5, entity6, + entity7, entity8, entity9, + notation0, notation1, notation2, notation3, notation4, + attlist0, attlist1, attlist2, attlist3, attlist4, attlist5, attlist6, + attlist7, attlist8, attlist9, + element0, element1, element2, element3, element4, element5, element6, + element7, +#ifdef XML_DTD + externalSubset0, externalSubset1, + condSect0, condSect1, condSect2, +#endif /* XML_DTD */ + declClose, + error; + +static +int common(PROLOG_STATE *state, int tok); + +static +int prolog0(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + state->handler = prolog1; + return XML_ROLE_NONE; + case XML_TOK_XML_DECL: + state->handler = prolog1; + return XML_ROLE_XML_DECL; + case XML_TOK_PI: + state->handler = prolog1; + return XML_ROLE_NONE; + case XML_TOK_COMMENT: + state->handler = prolog1; + case XML_TOK_BOM: + return XML_ROLE_NONE; + case XML_TOK_DECL_OPEN: + if (!XmlNameMatchesAscii(enc, + ptr + 2 * MIN_BYTES_PER_CHAR(enc), + end, + KW_DOCTYPE)) + break; + state->handler = doctype0; + return XML_ROLE_NONE; + case XML_TOK_INSTANCE_START: + state->handler = error; + return XML_ROLE_INSTANCE_START; + } + return common(state, tok); +} + +static +int prolog1(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_PI: + case XML_TOK_COMMENT: + case XML_TOK_BOM: + return XML_ROLE_NONE; + case XML_TOK_DECL_OPEN: + if (!XmlNameMatchesAscii(enc, + ptr + 2 * MIN_BYTES_PER_CHAR(enc), + end, + KW_DOCTYPE)) + break; + state->handler = doctype0; + return XML_ROLE_NONE; + case XML_TOK_INSTANCE_START: + state->handler = error; + return XML_ROLE_INSTANCE_START; + } + return common(state, tok); +} + +static +int prolog2(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_PI: + case XML_TOK_COMMENT: + return XML_ROLE_NONE; + case XML_TOK_INSTANCE_START: + state->handler = error; + return XML_ROLE_INSTANCE_START; + } + return common(state, tok); +} + +static +int doctype0(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NAME: + case XML_TOK_PREFIXED_NAME: + state->handler = doctype1; + return XML_ROLE_DOCTYPE_NAME; + } + return common(state, tok); +} + +static +int doctype1(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_OPEN_BRACKET: + state->handler = internalSubset; + return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; + case XML_TOK_DECL_CLOSE: + state->handler = prolog2; + return XML_ROLE_DOCTYPE_CLOSE; + case XML_TOK_NAME: + if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { + state->handler = doctype3; + return XML_ROLE_NONE; + } + if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { + state->handler = doctype2; + return XML_ROLE_NONE; + } + break; + } + return common(state, tok); +} + +static +int doctype2(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_LITERAL: + state->handler = doctype3; + return XML_ROLE_DOCTYPE_PUBLIC_ID; + } + return common(state, tok); +} + +static +int doctype3(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_LITERAL: + state->handler = doctype4; + return XML_ROLE_DOCTYPE_SYSTEM_ID; + } + return common(state, tok); +} + +static +int doctype4(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_OPEN_BRACKET: + state->handler = internalSubset; + return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; + case XML_TOK_DECL_CLOSE: + state->handler = prolog2; + return XML_ROLE_DOCTYPE_CLOSE; + } + return common(state, tok); +} + +static +int doctype5(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_DECL_CLOSE: + state->handler = prolog2; + return XML_ROLE_DOCTYPE_CLOSE; + } + return common(state, tok); +} + +static +int internalSubset(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_DECL_OPEN: + if (XmlNameMatchesAscii(enc, + ptr + 2 * MIN_BYTES_PER_CHAR(enc), + end, + KW_ENTITY)) { + state->handler = entity0; + return XML_ROLE_NONE; + } + if (XmlNameMatchesAscii(enc, + ptr + 2 * MIN_BYTES_PER_CHAR(enc), + end, + KW_ATTLIST)) { + state->handler = attlist0; + return XML_ROLE_NONE; + } + if (XmlNameMatchesAscii(enc, + ptr + 2 * MIN_BYTES_PER_CHAR(enc), + end, + KW_ELEMENT)) { + state->handler = element0; + return XML_ROLE_NONE; + } + if (XmlNameMatchesAscii(enc, + ptr + 2 * MIN_BYTES_PER_CHAR(enc), + end, + KW_NOTATION)) { + state->handler = notation0; + return XML_ROLE_NONE; + } + break; + case XML_TOK_PI: + case XML_TOK_COMMENT: + return XML_ROLE_NONE; + case XML_TOK_PARAM_ENTITY_REF: + return XML_ROLE_PARAM_ENTITY_REF; + case XML_TOK_CLOSE_BRACKET: + state->handler = doctype5; + return XML_ROLE_NONE; + } + return common(state, tok); +} + +#ifdef XML_DTD + +static +int externalSubset0(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + state->handler = externalSubset1; + if (tok == XML_TOK_XML_DECL) + return XML_ROLE_TEXT_DECL; + return externalSubset1(state, tok, ptr, end, enc); +} + +static +int externalSubset1(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_COND_SECT_OPEN: + state->handler = condSect0; + return XML_ROLE_NONE; + case XML_TOK_COND_SECT_CLOSE: + if (state->includeLevel == 0) + break; + state->includeLevel -= 1; + return XML_ROLE_NONE; + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_CLOSE_BRACKET: + break; + case XML_TOK_NONE: + if (state->includeLevel) + break; + return XML_ROLE_NONE; + default: + return internalSubset(state, tok, ptr, end, enc); + } + return common(state, tok); +} + +#endif /* XML_DTD */ + +static +int entity0(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_PERCENT: + state->handler = entity1; + return XML_ROLE_NONE; + case XML_TOK_NAME: + state->handler = entity2; + return XML_ROLE_GENERAL_ENTITY_NAME; + } + return common(state, tok); +} + +static +int entity1(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NAME: + state->handler = entity7; + return XML_ROLE_PARAM_ENTITY_NAME; + } + return common(state, tok); +} + +static +int entity2(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NAME: + if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { + state->handler = entity4; + return XML_ROLE_NONE; + } + if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { + state->handler = entity3; + return XML_ROLE_NONE; + } + break; + case XML_TOK_LITERAL: + state->handler = declClose; + return XML_ROLE_ENTITY_VALUE; + } + return common(state, tok); +} + +static +int entity3(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_LITERAL: + state->handler = entity4; + return XML_ROLE_ENTITY_PUBLIC_ID; + } + return common(state, tok); +} + + +static +int entity4(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_LITERAL: + state->handler = entity5; + return XML_ROLE_ENTITY_SYSTEM_ID; + } + return common(state, tok); +} + +static +int entity5(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_DECL_CLOSE: + setTopLevel(state); + return XML_ROLE_ENTITY_COMPLETE; + case XML_TOK_NAME: + if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) { + state->handler = entity6; + return XML_ROLE_NONE; + } + break; + } + return common(state, tok); +} + +static +int entity6(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NAME: + state->handler = declClose; + return XML_ROLE_ENTITY_NOTATION_NAME; + } + return common(state, tok); +} + +static +int entity7(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NAME: + if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { + state->handler = entity9; + return XML_ROLE_NONE; + } + if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { + state->handler = entity8; + return XML_ROLE_NONE; + } + break; + case XML_TOK_LITERAL: + state->handler = declClose; + return XML_ROLE_ENTITY_VALUE; + } + return common(state, tok); +} + +static +int entity8(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_LITERAL: + state->handler = entity9; + return XML_ROLE_ENTITY_PUBLIC_ID; + } + return common(state, tok); +} + +static +int entity9(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_LITERAL: + state->handler = declClose; + return XML_ROLE_ENTITY_SYSTEM_ID; + } + return common(state, tok); +} + +static +int notation0(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NAME: + state->handler = notation1; + return XML_ROLE_NOTATION_NAME; + } + return common(state, tok); +} + +static +int notation1(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NAME: + if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { + state->handler = notation3; + return XML_ROLE_NONE; + } + if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { + state->handler = notation2; + return XML_ROLE_NONE; + } + break; + } + return common(state, tok); +} + +static +int notation2(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_LITERAL: + state->handler = notation4; + return XML_ROLE_NOTATION_PUBLIC_ID; + } + return common(state, tok); +} + +static +int notation3(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_LITERAL: + state->handler = declClose; + return XML_ROLE_NOTATION_SYSTEM_ID; + } + return common(state, tok); +} + +static +int notation4(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_LITERAL: + state->handler = declClose; + return XML_ROLE_NOTATION_SYSTEM_ID; + case XML_TOK_DECL_CLOSE: + setTopLevel(state); + return XML_ROLE_NOTATION_NO_SYSTEM_ID; + } + return common(state, tok); +} + +static +int attlist0(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NAME: + case XML_TOK_PREFIXED_NAME: + state->handler = attlist1; + return XML_ROLE_ATTLIST_ELEMENT_NAME; + } + return common(state, tok); +} + +static +int attlist1(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_DECL_CLOSE: + setTopLevel(state); + return XML_ROLE_NONE; + case XML_TOK_NAME: + case XML_TOK_PREFIXED_NAME: + state->handler = attlist2; + return XML_ROLE_ATTRIBUTE_NAME; + } + return common(state, tok); +} + +static +int attlist2(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NAME: + { + static const char *types[] = { + KW_CDATA, + KW_ID, + KW_IDREF, + KW_IDREFS, + KW_ENTITY, + KW_ENTITIES, + KW_NMTOKEN, + KW_NMTOKENS, + }; + int i; + for (i = 0; i < (int)(sizeof(types)/sizeof(types[0])); i++) + if (XmlNameMatchesAscii(enc, ptr, end, types[i])) { + state->handler = attlist8; + return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i; + } + } + if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) { + state->handler = attlist5; + return XML_ROLE_NONE; + } + break; + case XML_TOK_OPEN_PAREN: + state->handler = attlist3; + return XML_ROLE_NONE; + } + return common(state, tok); +} + +static +int attlist3(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NMTOKEN: + case XML_TOK_NAME: + case XML_TOK_PREFIXED_NAME: + state->handler = attlist4; + return XML_ROLE_ATTRIBUTE_ENUM_VALUE; + } + return common(state, tok); +} + +static +int attlist4(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_CLOSE_PAREN: + state->handler = attlist8; + return XML_ROLE_NONE; + case XML_TOK_OR: + state->handler = attlist3; + return XML_ROLE_NONE; + } + return common(state, tok); +} + +static +int attlist5(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_OPEN_PAREN: + state->handler = attlist6; + return XML_ROLE_NONE; + } + return common(state, tok); +} + + +static +int attlist6(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NAME: + state->handler = attlist7; + return XML_ROLE_ATTRIBUTE_NOTATION_VALUE; + } + return common(state, tok); +} + +static +int attlist7(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_CLOSE_PAREN: + state->handler = attlist8; + return XML_ROLE_NONE; + case XML_TOK_OR: + state->handler = attlist6; + return XML_ROLE_NONE; + } + return common(state, tok); +} + +/* default value */ +static +int attlist8(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_POUND_NAME: + if (XmlNameMatchesAscii(enc, + ptr + MIN_BYTES_PER_CHAR(enc), + end, + KW_IMPLIED)) { + state->handler = attlist1; + return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE; + } + if (XmlNameMatchesAscii(enc, + ptr + MIN_BYTES_PER_CHAR(enc), + end, + KW_REQUIRED)) { + state->handler = attlist1; + return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE; + } + if (XmlNameMatchesAscii(enc, + ptr + MIN_BYTES_PER_CHAR(enc), + end, + KW_FIXED)) { + state->handler = attlist9; + return XML_ROLE_NONE; + } + break; + case XML_TOK_LITERAL: + state->handler = attlist1; + return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE; + } + return common(state, tok); +} + +static +int attlist9(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_LITERAL: + state->handler = attlist1; + return XML_ROLE_FIXED_ATTRIBUTE_VALUE; + } + return common(state, tok); +} + +static +int element0(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NAME: + case XML_TOK_PREFIXED_NAME: + state->handler = element1; + return XML_ROLE_ELEMENT_NAME; + } + return common(state, tok); +} + +static +int element1(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NAME: + if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) { + state->handler = declClose; + return XML_ROLE_CONTENT_EMPTY; + } + if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) { + state->handler = declClose; + return XML_ROLE_CONTENT_ANY; + } + break; + case XML_TOK_OPEN_PAREN: + state->handler = element2; + state->level = 1; + return XML_ROLE_GROUP_OPEN; + } + return common(state, tok); +} + +static +int element2(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_POUND_NAME: + if (XmlNameMatchesAscii(enc, + ptr + MIN_BYTES_PER_CHAR(enc), + end, + KW_PCDATA)) { + state->handler = element3; + return XML_ROLE_CONTENT_PCDATA; + } + break; + case XML_TOK_OPEN_PAREN: + state->level = 2; + state->handler = element6; + return XML_ROLE_GROUP_OPEN; + case XML_TOK_NAME: + case XML_TOK_PREFIXED_NAME: + state->handler = element7; + return XML_ROLE_CONTENT_ELEMENT; + case XML_TOK_NAME_QUESTION: + state->handler = element7; + return XML_ROLE_CONTENT_ELEMENT_OPT; + case XML_TOK_NAME_ASTERISK: + state->handler = element7; + return XML_ROLE_CONTENT_ELEMENT_REP; + case XML_TOK_NAME_PLUS: + state->handler = element7; + return XML_ROLE_CONTENT_ELEMENT_PLUS; + } + return common(state, tok); +} + +static +int element3(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_CLOSE_PAREN: + state->handler = declClose; + return XML_ROLE_GROUP_CLOSE; + case XML_TOK_CLOSE_PAREN_ASTERISK: + state->handler = declClose; + return XML_ROLE_GROUP_CLOSE_REP; + case XML_TOK_OR: + state->handler = element4; + return XML_ROLE_NONE; + } + return common(state, tok); +} + +static +int element4(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NAME: + case XML_TOK_PREFIXED_NAME: + state->handler = element5; + return XML_ROLE_CONTENT_ELEMENT; + } + return common(state, tok); +} + +static +int element5(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_CLOSE_PAREN_ASTERISK: + state->handler = declClose; + return XML_ROLE_GROUP_CLOSE_REP; + case XML_TOK_OR: + state->handler = element4; + return XML_ROLE_NONE; + } + return common(state, tok); +} + +static +int element6(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_OPEN_PAREN: + state->level += 1; + return XML_ROLE_GROUP_OPEN; + case XML_TOK_NAME: + case XML_TOK_PREFIXED_NAME: + state->handler = element7; + return XML_ROLE_CONTENT_ELEMENT; + case XML_TOK_NAME_QUESTION: + state->handler = element7; + return XML_ROLE_CONTENT_ELEMENT_OPT; + case XML_TOK_NAME_ASTERISK: + state->handler = element7; + return XML_ROLE_CONTENT_ELEMENT_REP; + case XML_TOK_NAME_PLUS: + state->handler = element7; + return XML_ROLE_CONTENT_ELEMENT_PLUS; + } + return common(state, tok); +} + +static +int element7(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_CLOSE_PAREN: + state->level -= 1; + if (state->level == 0) + state->handler = declClose; + return XML_ROLE_GROUP_CLOSE; + case XML_TOK_CLOSE_PAREN_ASTERISK: + state->level -= 1; + if (state->level == 0) + state->handler = declClose; + return XML_ROLE_GROUP_CLOSE_REP; + case XML_TOK_CLOSE_PAREN_QUESTION: + state->level -= 1; + if (state->level == 0) + state->handler = declClose; + return XML_ROLE_GROUP_CLOSE_OPT; + case XML_TOK_CLOSE_PAREN_PLUS: + state->level -= 1; + if (state->level == 0) + state->handler = declClose; + return XML_ROLE_GROUP_CLOSE_PLUS; + case XML_TOK_COMMA: + state->handler = element6; + return XML_ROLE_GROUP_SEQUENCE; + case XML_TOK_OR: + state->handler = element6; + return XML_ROLE_GROUP_CHOICE; + } + return common(state, tok); +} + +#ifdef XML_DTD + +static +int condSect0(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_NAME: + if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) { + state->handler = condSect1; + return XML_ROLE_NONE; + } + if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) { + state->handler = condSect2; + return XML_ROLE_NONE; + } + break; + } + return common(state, tok); +} + +static +int condSect1(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_OPEN_BRACKET: + state->handler = externalSubset1; + state->includeLevel += 1; + return XML_ROLE_NONE; + } + return common(state, tok); +} + +static +int condSect2(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_OPEN_BRACKET: + state->handler = externalSubset1; + return XML_ROLE_IGNORE_SECT; + } + return common(state, tok); +} + +#endif /* XML_DTD */ + +static +int declClose(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_PROLOG_S: + return XML_ROLE_NONE; + case XML_TOK_DECL_CLOSE: + setTopLevel(state); + return XML_ROLE_NONE; + } + return common(state, tok); +} + +#if 0 + +static +int ignore(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + switch (tok) { + case XML_TOK_DECL_CLOSE: + state->handler = internalSubset; + return 0; + default: + return XML_ROLE_NONE; + } + return common(state, tok); +} +#endif + +static +int error(PROLOG_STATE *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc) +{ + return XML_ROLE_NONE; +} + +static +int common(PROLOG_STATE *state, int tok) +{ +#ifdef XML_DTD + if (!state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF) + return XML_ROLE_INNER_PARAM_ENTITY_REF; +#endif + state->handler = error; + return XML_ROLE_ERROR; +} + +void XmlPrologStateInit(PROLOG_STATE *state) +{ + state->handler = prolog0; +#ifdef XML_DTD + state->documentEntity = 1; + state->includeLevel = 0; +#endif /* XML_DTD */ +} + +#ifdef XML_DTD + +void XmlPrologStateInitExternalEntity(PROLOG_STATE *state) +{ + state->handler = externalSubset0; + state->documentEntity = 0; + state->includeLevel = 0; +} + +#endif /* XML_DTD */ diff --git a/Build/source/extra/expat/lib/xmlrole.h b/Build/source/extra/expat/lib/xmlrole.h new file mode 100644 index 00000000000..db3ebc84843 --- /dev/null +++ b/Build/source/extra/expat/lib/xmlrole.h @@ -0,0 +1,100 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +#ifndef XmlRole_INCLUDED +#define XmlRole_INCLUDED 1 + +#include "xmltok.h" + +#ifdef __cplusplus +extern "C" { +#endif + +enum { + XML_ROLE_ERROR = -1, + XML_ROLE_NONE = 0, + XML_ROLE_XML_DECL, + XML_ROLE_INSTANCE_START, + XML_ROLE_DOCTYPE_NAME, + XML_ROLE_DOCTYPE_SYSTEM_ID, + XML_ROLE_DOCTYPE_PUBLIC_ID, + XML_ROLE_DOCTYPE_INTERNAL_SUBSET, + XML_ROLE_DOCTYPE_CLOSE, + XML_ROLE_GENERAL_ENTITY_NAME, + XML_ROLE_PARAM_ENTITY_NAME, + XML_ROLE_ENTITY_VALUE, + XML_ROLE_ENTITY_SYSTEM_ID, + XML_ROLE_ENTITY_PUBLIC_ID, + XML_ROLE_ENTITY_COMPLETE, + XML_ROLE_ENTITY_NOTATION_NAME, + XML_ROLE_NOTATION_NAME, + XML_ROLE_NOTATION_SYSTEM_ID, + XML_ROLE_NOTATION_NO_SYSTEM_ID, + XML_ROLE_NOTATION_PUBLIC_ID, + XML_ROLE_ATTRIBUTE_NAME, + XML_ROLE_ATTRIBUTE_TYPE_CDATA, + XML_ROLE_ATTRIBUTE_TYPE_ID, + XML_ROLE_ATTRIBUTE_TYPE_IDREF, + XML_ROLE_ATTRIBUTE_TYPE_IDREFS, + XML_ROLE_ATTRIBUTE_TYPE_ENTITY, + XML_ROLE_ATTRIBUTE_TYPE_ENTITIES, + XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN, + XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS, + XML_ROLE_ATTRIBUTE_ENUM_VALUE, + XML_ROLE_ATTRIBUTE_NOTATION_VALUE, + XML_ROLE_ATTLIST_ELEMENT_NAME, + XML_ROLE_IMPLIED_ATTRIBUTE_VALUE, + XML_ROLE_REQUIRED_ATTRIBUTE_VALUE, + XML_ROLE_DEFAULT_ATTRIBUTE_VALUE, + XML_ROLE_FIXED_ATTRIBUTE_VALUE, + XML_ROLE_ELEMENT_NAME, + XML_ROLE_CONTENT_ANY, + XML_ROLE_CONTENT_EMPTY, + XML_ROLE_CONTENT_PCDATA, + XML_ROLE_GROUP_OPEN, + XML_ROLE_GROUP_CLOSE, + XML_ROLE_GROUP_CLOSE_REP, + XML_ROLE_GROUP_CLOSE_OPT, + XML_ROLE_GROUP_CLOSE_PLUS, + XML_ROLE_GROUP_CHOICE, + XML_ROLE_GROUP_SEQUENCE, + XML_ROLE_CONTENT_ELEMENT, + XML_ROLE_CONTENT_ELEMENT_REP, + XML_ROLE_CONTENT_ELEMENT_OPT, + XML_ROLE_CONTENT_ELEMENT_PLUS, +#ifdef XML_DTD + XML_ROLE_TEXT_DECL, + XML_ROLE_IGNORE_SECT, + XML_ROLE_INNER_PARAM_ENTITY_REF, +#endif /* XML_DTD */ + XML_ROLE_PARAM_ENTITY_REF +}; + +typedef struct prolog_state { + int (*handler)(struct prolog_state *state, + int tok, + const char *ptr, + const char *end, + const ENCODING *enc); + unsigned level; +#ifdef XML_DTD + unsigned includeLevel; + int documentEntity; +#endif /* XML_DTD */ +} PROLOG_STATE; + +void XmlPrologStateInit(PROLOG_STATE *); +#ifdef XML_DTD +void XmlPrologStateInitExternalEntity(PROLOG_STATE *); +#endif /* XML_DTD */ + +#define XmlTokenRole(state, tok, ptr, end, enc) \ + (((state)->handler)(state, tok, ptr, end, enc)) + +#ifdef __cplusplus +} +#endif + +#endif /* not XmlRole_INCLUDED */ diff --git a/Build/source/extra/expat/lib/xmltok.c b/Build/source/extra/expat/lib/xmltok.c new file mode 100644 index 00000000000..521bd1cbaf3 --- /dev/null +++ b/Build/source/extra/expat/lib/xmltok.c @@ -0,0 +1,1568 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +static char RCSId[] + = "$Header: /cvsroot/expat/expat/lib/xmltok.c,v 1.5 2000/10/22 19:20:23 coopercc Exp $"; + +#ifdef COMPILED_FROM_DSP +# include "winconfig.h" +#else +# include +#endif /* ndef COMPILED_FROM_DSP */ + +#include "xmltok.h" +#include "nametab.h" + +#ifdef XML_DTD +#define IGNORE_SECTION_TOK_VTABLE , PREFIX(ignoreSectionTok) +#else +#define IGNORE_SECTION_TOK_VTABLE /* as nothing */ +#endif + +#define VTABLE1 \ + { PREFIX(prologTok), PREFIX(contentTok), \ + PREFIX(cdataSectionTok) IGNORE_SECTION_TOK_VTABLE }, \ + { PREFIX(attributeValueTok), PREFIX(entityValueTok) }, \ + PREFIX(sameName), \ + PREFIX(nameMatchesAscii), \ + PREFIX(nameLength), \ + PREFIX(skipS), \ + PREFIX(getAtts), \ + PREFIX(charRefNumber), \ + PREFIX(predefinedEntityName), \ + PREFIX(updatePosition), \ + PREFIX(isPublicId) + +#define VTABLE VTABLE1, PREFIX(toUtf8), PREFIX(toUtf16) + +#define UCS2_GET_NAMING(pages, hi, lo) \ + (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1 << ((lo) & 0x1F))) + +/* A 2 byte UTF-8 representation splits the characters 11 bits +between the bottom 5 and 6 bits of the bytes. +We need 8 bits to index into pages, 3 bits to add to that index and +5 bits to generate the mask. */ +#define UTF8_GET_NAMING2(pages, byte) \ + (namingBitmap[((pages)[(((byte)[0]) >> 2) & 7] << 3) \ + + ((((byte)[0]) & 3) << 1) \ + + ((((byte)[1]) >> 5) & 1)] \ + & (1 << (((byte)[1]) & 0x1F))) + +/* A 3 byte UTF-8 representation splits the characters 16 bits +between the bottom 4, 6 and 6 bits of the bytes. +We need 8 bits to index into pages, 3 bits to add to that index and +5 bits to generate the mask. */ +#define UTF8_GET_NAMING3(pages, byte) \ + (namingBitmap[((pages)[((((byte)[0]) & 0xF) << 4) \ + + ((((byte)[1]) >> 2) & 0xF)] \ + << 3) \ + + ((((byte)[1]) & 3) << 1) \ + + ((((byte)[2]) >> 5) & 1)] \ + & (1 << (((byte)[2]) & 0x1F))) + +#define UTF8_GET_NAMING(pages, p, n) \ + ((n) == 2 \ + ? UTF8_GET_NAMING2(pages, (const unsigned char *)(p)) \ + : ((n) == 3 \ + ? UTF8_GET_NAMING3(pages, (const unsigned char *)(p)) \ + : 0)) + +#define UTF8_INVALID3(p) \ + ((*p) == 0xED \ + ? (((p)[1] & 0x20) != 0) \ + : ((*p) == 0xEF \ + ? ((p)[1] == 0xBF && ((p)[2] == 0xBF || (p)[2] == 0xBE)) \ + : 0)) + +#define UTF8_INVALID4(p) ((*p) == 0xF4 && ((p)[1] & 0x30) != 0) + +static +int isNever(const ENCODING *enc, const char *p) +{ + return 0; +} + +static +int utf8_isName2(const ENCODING *enc, const char *p) +{ + return UTF8_GET_NAMING2(namePages, (const unsigned char *)p); +} + +static +int utf8_isName3(const ENCODING *enc, const char *p) +{ + return UTF8_GET_NAMING3(namePages, (const unsigned char *)p); +} + +#define utf8_isName4 isNever + +static +int utf8_isNmstrt2(const ENCODING *enc, const char *p) +{ + return UTF8_GET_NAMING2(nmstrtPages, (const unsigned char *)p); +} + +static +int utf8_isNmstrt3(const ENCODING *enc, const char *p) +{ + return UTF8_GET_NAMING3(nmstrtPages, (const unsigned char *)p); +} + +#define utf8_isNmstrt4 isNever + +#define utf8_isInvalid2 isNever + +static +int utf8_isInvalid3(const ENCODING *enc, const char *p) +{ + return UTF8_INVALID3((const unsigned char *)p); +} + +static +int utf8_isInvalid4(const ENCODING *enc, const char *p) +{ + return UTF8_INVALID4((const unsigned char *)p); +} + +struct normal_encoding { + ENCODING enc; + unsigned char type[256]; +#ifdef XML_MIN_SIZE + int (*byteType)(const ENCODING *, const char *); + int (*isNameMin)(const ENCODING *, const char *); + int (*isNmstrtMin)(const ENCODING *, const char *); + int (*byteToAscii)(const ENCODING *, const char *); + int (*charMatches)(const ENCODING *, const char *, int); +#endif /* XML_MIN_SIZE */ + int (*isName2)(const ENCODING *, const char *); + int (*isName3)(const ENCODING *, const char *); + int (*isName4)(const ENCODING *, const char *); + int (*isNmstrt2)(const ENCODING *, const char *); + int (*isNmstrt3)(const ENCODING *, const char *); + int (*isNmstrt4)(const ENCODING *, const char *); + int (*isInvalid2)(const ENCODING *, const char *); + int (*isInvalid3)(const ENCODING *, const char *); + int (*isInvalid4)(const ENCODING *, const char *); +}; + +#ifdef XML_MIN_SIZE + +#define STANDARD_VTABLE(E) \ + E ## byteType, \ + E ## isNameMin, \ + E ## isNmstrtMin, \ + E ## byteToAscii, \ + E ## charMatches, + +#else + +#define STANDARD_VTABLE(E) /* as nothing */ + +#endif + +#define NORMAL_VTABLE(E) \ + E ## isName2, \ + E ## isName3, \ + E ## isName4, \ + E ## isNmstrt2, \ + E ## isNmstrt3, \ + E ## isNmstrt4, \ + E ## isInvalid2, \ + E ## isInvalid3, \ + E ## isInvalid4 + +static int checkCharRefNumber(int); + +#include "xmltok_impl.h" +#include "ascii.h" + +#ifdef XML_MIN_SIZE +#define sb_isNameMin isNever +#define sb_isNmstrtMin isNever +#endif + +#ifdef XML_MIN_SIZE +#define MINBPC(enc) ((enc)->minBytesPerChar) +#else +/* minimum bytes per character */ +#define MINBPC(enc) 1 +#endif + +#define SB_BYTE_TYPE(enc, p) \ + (((struct normal_encoding *)(enc))->type[(unsigned char)*(p)]) + +#ifdef XML_MIN_SIZE +static +int sb_byteType(const ENCODING *enc, const char *p) +{ + return SB_BYTE_TYPE(enc, p); +} +#define BYTE_TYPE(enc, p) \ + (((const struct normal_encoding *)(enc))->byteType(enc, p)) +#else +#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p) +#endif + +#ifdef XML_MIN_SIZE +#define BYTE_TO_ASCII(enc, p) \ + (((const struct normal_encoding *)(enc))->byteToAscii(enc, p)) +static +int sb_byteToAscii(const ENCODING *enc, const char *p) +{ + return *p; +} +#else +#define BYTE_TO_ASCII(enc, p) (*(p)) +#endif + +#define IS_NAME_CHAR(enc, p, n) \ + (((const struct normal_encoding *)(enc))->isName ## n(enc, p)) +#define IS_NMSTRT_CHAR(enc, p, n) \ + (((const struct normal_encoding *)(enc))->isNmstrt ## n(enc, p)) +#define IS_INVALID_CHAR(enc, p, n) \ + (((const struct normal_encoding *)(enc))->isInvalid ## n(enc, p)) + +#ifdef XML_MIN_SIZE +#define IS_NAME_CHAR_MINBPC(enc, p) \ + (((const struct normal_encoding *)(enc))->isNameMin(enc, p)) +#define IS_NMSTRT_CHAR_MINBPC(enc, p) \ + (((const struct normal_encoding *)(enc))->isNmstrtMin(enc, p)) +#else +#define IS_NAME_CHAR_MINBPC(enc, p) (0) +#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0) +#endif + +#ifdef XML_MIN_SIZE +#define CHAR_MATCHES(enc, p, c) \ + (((const struct normal_encoding *)(enc))->charMatches(enc, p, c)) +static +int sb_charMatches(const ENCODING *enc, const char *p, int c) +{ + return *p == c; +} +#else +/* c is an ASCII character */ +#define CHAR_MATCHES(enc, p, c) (*(p) == c) +#endif + +#define PREFIX(ident) normal_ ## ident +#include "xmltok_impl.c" + +#undef MINBPC +#undef BYTE_TYPE +#undef BYTE_TO_ASCII +#undef CHAR_MATCHES +#undef IS_NAME_CHAR +#undef IS_NAME_CHAR_MINBPC +#undef IS_NMSTRT_CHAR +#undef IS_NMSTRT_CHAR_MINBPC +#undef IS_INVALID_CHAR + +enum { /* UTF8_cvalN is value of masked first byte of N byte sequence */ + UTF8_cval1 = 0x00, + UTF8_cval2 = 0xc0, + UTF8_cval3 = 0xe0, + UTF8_cval4 = 0xf0 +}; + +static +void utf8_toUtf8(const ENCODING *enc, + const char **fromP, const char *fromLim, + char **toP, const char *toLim) +{ + char *to; + const char *from; + if (fromLim - *fromP > toLim - *toP) { + /* Avoid copying partial characters. */ + for (fromLim = *fromP + (toLim - *toP); fromLim > *fromP; fromLim--) + if (((unsigned char)fromLim[-1] & 0xc0) != 0x80) + break; + } + for (to = *toP, from = *fromP; from != fromLim; from++, to++) + *to = *from; + *fromP = from; + *toP = to; +} + +static +void utf8_toUtf16(const ENCODING *enc, + const char **fromP, const char *fromLim, + unsigned short **toP, const unsigned short *toLim) +{ + unsigned short *to = *toP; + const char *from = *fromP; + while (from != fromLim && to != toLim) { + switch (((struct normal_encoding *)enc)->type[(unsigned char)*from]) { + case BT_LEAD2: + *to++ = ((from[0] & 0x1f) << 6) | (from[1] & 0x3f); + from += 2; + break; + case BT_LEAD3: + *to++ = ((from[0] & 0xf) << 12) | ((from[1] & 0x3f) << 6) | (from[2] & 0x3f); + from += 3; + break; + case BT_LEAD4: + { + unsigned long n; + if (to + 1 == toLim) + break; + n = ((from[0] & 0x7) << 18) | ((from[1] & 0x3f) << 12) | ((from[2] & 0x3f) << 6) | (from[3] & 0x3f); + n -= 0x10000; + to[0] = (unsigned short)((n >> 10) | 0xD800); + to[1] = (unsigned short)((n & 0x3FF) | 0xDC00); + to += 2; + from += 4; + } + break; + default: + *to++ = *from++; + break; + } + } + *fromP = from; + *toP = to; +} + +#ifdef XML_NS +static const struct normal_encoding utf8_encoding_ns = { + { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, + { +#include "asciitab.h" +#include "utf8tab.h" + }, + STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) +}; +#endif + +static const struct normal_encoding utf8_encoding = { + { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, + { +#define BT_COLON BT_NMSTRT +#include "asciitab.h" +#undef BT_COLON +#include "utf8tab.h" + }, + STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) +}; + +#ifdef XML_NS + +static const struct normal_encoding internal_utf8_encoding_ns = { + { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, + { +#include "iasciitab.h" +#include "utf8tab.h" + }, + STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) +}; + +#endif + +static const struct normal_encoding internal_utf8_encoding = { + { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, + { +#define BT_COLON BT_NMSTRT +#include "iasciitab.h" +#undef BT_COLON +#include "utf8tab.h" + }, + STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) +}; + +static +void latin1_toUtf8(const ENCODING *enc, + const char **fromP, const char *fromLim, + char **toP, const char *toLim) +{ + for (;;) { + unsigned char c; + if (*fromP == fromLim) + break; + c = (unsigned char)**fromP; + if (c & 0x80) { + if (toLim - *toP < 2) + break; + *(*toP)++ = ((c >> 6) | UTF8_cval2); + *(*toP)++ = ((c & 0x3f) | 0x80); + (*fromP)++; + } + else { + if (*toP == toLim) + break; + *(*toP)++ = *(*fromP)++; + } + } +} + +static +void latin1_toUtf16(const ENCODING *enc, + const char **fromP, const char *fromLim, + unsigned short **toP, const unsigned short *toLim) +{ + while (*fromP != fromLim && *toP != toLim) + *(*toP)++ = (unsigned char)*(*fromP)++; +} + +#ifdef XML_NS + +static const struct normal_encoding latin1_encoding_ns = { + { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 }, + { +#include "asciitab.h" +#include "latin1tab.h" + }, + STANDARD_VTABLE(sb_) +}; + +#endif + +static const struct normal_encoding latin1_encoding = { + { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 }, + { +#define BT_COLON BT_NMSTRT +#include "asciitab.h" +#undef BT_COLON +#include "latin1tab.h" + }, + STANDARD_VTABLE(sb_) +}; + +static +void ascii_toUtf8(const ENCODING *enc, + const char **fromP, const char *fromLim, + char **toP, const char *toLim) +{ + while (*fromP != fromLim && *toP != toLim) + *(*toP)++ = *(*fromP)++; +} + +#ifdef XML_NS + +static const struct normal_encoding ascii_encoding_ns = { + { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 }, + { +#include "asciitab.h" +/* BT_NONXML == 0 */ + }, + STANDARD_VTABLE(sb_) +}; + +#endif + +static const struct normal_encoding ascii_encoding = { + { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 }, + { +#define BT_COLON BT_NMSTRT +#include "asciitab.h" +#undef BT_COLON +/* BT_NONXML == 0 */ + }, + STANDARD_VTABLE(sb_) +}; + +static int unicode_byte_type(char hi, char lo) +{ + switch ((unsigned char)hi) { + case 0xD8: case 0xD9: case 0xDA: case 0xDB: + return BT_LEAD4; + case 0xDC: case 0xDD: case 0xDE: case 0xDF: + return BT_TRAIL; + case 0xFF: + switch ((unsigned char)lo) { + case 0xFF: + case 0xFE: + return BT_NONXML; + } + break; + } + return BT_NONASCII; +} + +#define DEFINE_UTF16_TO_UTF8(E) \ +static \ +void E ## toUtf8(const ENCODING *enc, \ + const char **fromP, const char *fromLim, \ + char **toP, const char *toLim) \ +{ \ + const char *from; \ + for (from = *fromP; from != fromLim; from += 2) { \ + int plane; \ + unsigned char lo2; \ + unsigned char lo = GET_LO(from); \ + unsigned char hi = GET_HI(from); \ + switch (hi) { \ + case 0: \ + if (lo < 0x80) { \ + if (*toP == toLim) { \ + *fromP = from; \ + return; \ + } \ + *(*toP)++ = lo; \ + break; \ + } \ + /* fall through */ \ + case 0x1: case 0x2: case 0x3: \ + case 0x4: case 0x5: case 0x6: case 0x7: \ + if (toLim - *toP < 2) { \ + *fromP = from; \ + return; \ + } \ + *(*toP)++ = ((lo >> 6) | (hi << 2) | UTF8_cval2); \ + *(*toP)++ = ((lo & 0x3f) | 0x80); \ + break; \ + default: \ + if (toLim - *toP < 3) { \ + *fromP = from; \ + return; \ + } \ + /* 16 bits divided 4, 6, 6 amongst 3 bytes */ \ + *(*toP)++ = ((hi >> 4) | UTF8_cval3); \ + *(*toP)++ = (((hi & 0xf) << 2) | (lo >> 6) | 0x80); \ + *(*toP)++ = ((lo & 0x3f) | 0x80); \ + break; \ + case 0xD8: case 0xD9: case 0xDA: case 0xDB: \ + if (toLim - *toP < 4) { \ + *fromP = from; \ + return; \ + } \ + plane = (((hi & 0x3) << 2) | ((lo >> 6) & 0x3)) + 1; \ + *(*toP)++ = ((plane >> 2) | UTF8_cval4); \ + *(*toP)++ = (((lo >> 2) & 0xF) | ((plane & 0x3) << 4) | 0x80); \ + from += 2; \ + lo2 = GET_LO(from); \ + *(*toP)++ = (((lo & 0x3) << 4) \ + | ((GET_HI(from) & 0x3) << 2) \ + | (lo2 >> 6) \ + | 0x80); \ + *(*toP)++ = ((lo2 & 0x3f) | 0x80); \ + break; \ + } \ + } \ + *fromP = from; \ +} + +#define DEFINE_UTF16_TO_UTF16(E) \ +static \ +void E ## toUtf16(const ENCODING *enc, \ + const char **fromP, const char *fromLim, \ + unsigned short **toP, const unsigned short *toLim) \ +{ \ + /* Avoid copying first half only of surrogate */ \ + if (fromLim - *fromP > ((toLim - *toP) << 1) \ + && (GET_HI(fromLim - 2) & 0xF8) == 0xD8) \ + fromLim -= 2; \ + for (; *fromP != fromLim && *toP != toLim; *fromP += 2) \ + *(*toP)++ = (GET_HI(*fromP) << 8) | GET_LO(*fromP); \ +} + +#define SET2(ptr, ch) \ + (((ptr)[0] = ((ch) & 0xff)), ((ptr)[1] = ((ch) >> 8))) +#define GET_LO(ptr) ((unsigned char)(ptr)[0]) +#define GET_HI(ptr) ((unsigned char)(ptr)[1]) + +DEFINE_UTF16_TO_UTF8(little2_) +DEFINE_UTF16_TO_UTF16(little2_) + +#undef SET2 +#undef GET_LO +#undef GET_HI + +#define SET2(ptr, ch) \ + (((ptr)[0] = ((ch) >> 8)), ((ptr)[1] = ((ch) & 0xFF))) +#define GET_LO(ptr) ((unsigned char)(ptr)[1]) +#define GET_HI(ptr) ((unsigned char)(ptr)[0]) + +DEFINE_UTF16_TO_UTF8(big2_) +DEFINE_UTF16_TO_UTF16(big2_) + +#undef SET2 +#undef GET_LO +#undef GET_HI + +#define LITTLE2_BYTE_TYPE(enc, p) \ + ((p)[1] == 0 \ + ? ((struct normal_encoding *)(enc))->type[(unsigned char)*(p)] \ + : unicode_byte_type((p)[1], (p)[0])) +#define LITTLE2_BYTE_TO_ASCII(enc, p) ((p)[1] == 0 ? (p)[0] : -1) +#define LITTLE2_CHAR_MATCHES(enc, p, c) ((p)[1] == 0 && (p)[0] == c) +#define LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) \ + UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0]) +#define LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) \ + UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0]) + +#ifdef XML_MIN_SIZE + +static +int little2_byteType(const ENCODING *enc, const char *p) +{ + return LITTLE2_BYTE_TYPE(enc, p); +} + +static +int little2_byteToAscii(const ENCODING *enc, const char *p) +{ + return LITTLE2_BYTE_TO_ASCII(enc, p); +} + +static +int little2_charMatches(const ENCODING *enc, const char *p, int c) +{ + return LITTLE2_CHAR_MATCHES(enc, p, c); +} + +static +int little2_isNameMin(const ENCODING *enc, const char *p) +{ + return LITTLE2_IS_NAME_CHAR_MINBPC(enc, p); +} + +static +int little2_isNmstrtMin(const ENCODING *enc, const char *p) +{ + return LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p); +} + +#undef VTABLE +#define VTABLE VTABLE1, little2_toUtf8, little2_toUtf16 + +#else /* not XML_MIN_SIZE */ + +#undef PREFIX +#define PREFIX(ident) little2_ ## ident +#define MINBPC(enc) 2 +/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */ +#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p) +#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(enc, p) +#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(enc, p, c) +#define IS_NAME_CHAR(enc, p, n) 0 +#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) +#define IS_NMSTRT_CHAR(enc, p, n) (0) +#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) + +#include "xmltok_impl.c" + +#undef MINBPC +#undef BYTE_TYPE +#undef BYTE_TO_ASCII +#undef CHAR_MATCHES +#undef IS_NAME_CHAR +#undef IS_NAME_CHAR_MINBPC +#undef IS_NMSTRT_CHAR +#undef IS_NMSTRT_CHAR_MINBPC +#undef IS_INVALID_CHAR + +#endif /* not XML_MIN_SIZE */ + +#ifdef XML_NS + +static const struct normal_encoding little2_encoding_ns = { + { VTABLE, 2, 0, +#if XML_BYTE_ORDER == 12 + 1 +#else + 0 +#endif + }, + { +#include "asciitab.h" +#include "latin1tab.h" + }, + STANDARD_VTABLE(little2_) +}; + +#endif + +static const struct normal_encoding little2_encoding = { + { VTABLE, 2, 0, +#if XML_BYTE_ORDER == 12 + 1 +#else + 0 +#endif + }, + { +#define BT_COLON BT_NMSTRT +#include "asciitab.h" +#undef BT_COLON +#include "latin1tab.h" + }, + STANDARD_VTABLE(little2_) +}; + +#if XML_BYTE_ORDER != 21 + +#ifdef XML_NS + +static const struct normal_encoding internal_little2_encoding_ns = { + { VTABLE, 2, 0, 1 }, + { +#include "iasciitab.h" +#include "latin1tab.h" + }, + STANDARD_VTABLE(little2_) +}; + +#endif + +static const struct normal_encoding internal_little2_encoding = { + { VTABLE, 2, 0, 1 }, + { +#define BT_COLON BT_NMSTRT +#include "iasciitab.h" +#undef BT_COLON +#include "latin1tab.h" + }, + STANDARD_VTABLE(little2_) +}; + +#endif + + +#define BIG2_BYTE_TYPE(enc, p) \ + ((p)[0] == 0 \ + ? ((struct normal_encoding *)(enc))->type[(unsigned char)(p)[1]] \ + : unicode_byte_type((p)[0], (p)[1])) +#define BIG2_BYTE_TO_ASCII(enc, p) ((p)[0] == 0 ? (p)[1] : -1) +#define BIG2_CHAR_MATCHES(enc, p, c) ((p)[0] == 0 && (p)[1] == c) +#define BIG2_IS_NAME_CHAR_MINBPC(enc, p) \ + UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1]) +#define BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) \ + UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[0], (unsigned char)p[1]) + +#ifdef XML_MIN_SIZE + +static +int big2_byteType(const ENCODING *enc, const char *p) +{ + return BIG2_BYTE_TYPE(enc, p); +} + +static +int big2_byteToAscii(const ENCODING *enc, const char *p) +{ + return BIG2_BYTE_TO_ASCII(enc, p); +} + +static +int big2_charMatches(const ENCODING *enc, const char *p, int c) +{ + return BIG2_CHAR_MATCHES(enc, p, c); +} + +static +int big2_isNameMin(const ENCODING *enc, const char *p) +{ + return BIG2_IS_NAME_CHAR_MINBPC(enc, p); +} + +static +int big2_isNmstrtMin(const ENCODING *enc, const char *p) +{ + return BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p); +} + +#undef VTABLE +#define VTABLE VTABLE1, big2_toUtf8, big2_toUtf16 + +#else /* not XML_MIN_SIZE */ + +#undef PREFIX +#define PREFIX(ident) big2_ ## ident +#define MINBPC(enc) 2 +/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */ +#define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p) +#define BYTE_TO_ASCII(enc, p) BIG2_BYTE_TO_ASCII(enc, p) +#define CHAR_MATCHES(enc, p, c) BIG2_CHAR_MATCHES(enc, p, c) +#define IS_NAME_CHAR(enc, p, n) 0 +#define IS_NAME_CHAR_MINBPC(enc, p) BIG2_IS_NAME_CHAR_MINBPC(enc, p) +#define IS_NMSTRT_CHAR(enc, p, n) (0) +#define IS_NMSTRT_CHAR_MINBPC(enc, p) BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) + +#include "xmltok_impl.c" + +#undef MINBPC +#undef BYTE_TYPE +#undef BYTE_TO_ASCII +#undef CHAR_MATCHES +#undef IS_NAME_CHAR +#undef IS_NAME_CHAR_MINBPC +#undef IS_NMSTRT_CHAR +#undef IS_NMSTRT_CHAR_MINBPC +#undef IS_INVALID_CHAR + +#endif /* not XML_MIN_SIZE */ + +#ifdef XML_NS + +static const struct normal_encoding big2_encoding_ns = { + { VTABLE, 2, 0, +#if XML_BYTE_ORDER == 21 + 1 +#else + 0 +#endif + }, + { +#include "asciitab.h" +#include "latin1tab.h" + }, + STANDARD_VTABLE(big2_) +}; + +#endif + +static const struct normal_encoding big2_encoding = { + { VTABLE, 2, 0, +#if XML_BYTE_ORDER == 21 + 1 +#else + 0 +#endif + }, + { +#define BT_COLON BT_NMSTRT +#include "asciitab.h" +#undef BT_COLON +#include "latin1tab.h" + }, + STANDARD_VTABLE(big2_) +}; + +#if XML_BYTE_ORDER != 12 + +#ifdef XML_NS + +static const struct normal_encoding internal_big2_encoding_ns = { + { VTABLE, 2, 0, 1 }, + { +#include "iasciitab.h" +#include "latin1tab.h" + }, + STANDARD_VTABLE(big2_) +}; + +#endif + +static const struct normal_encoding internal_big2_encoding = { + { VTABLE, 2, 0, 1 }, + { +#define BT_COLON BT_NMSTRT +#include "iasciitab.h" +#undef BT_COLON +#include "latin1tab.h" + }, + STANDARD_VTABLE(big2_) +}; + +#endif + +#undef PREFIX + +static +int streqci(const char *s1, const char *s2) +{ + for (;;) { + char c1 = *s1++; + char c2 = *s2++; + if (ASCII_a <= c1 && c1 <= ASCII_z) + c1 += ASCII_A - ASCII_a; + if (ASCII_a <= c2 && c2 <= ASCII_z) + c2 += ASCII_A - ASCII_a; + if (c1 != c2) + return 0; + if (!c1) + break; + } + return 1; +} + +static +void initUpdatePosition(const ENCODING *enc, const char *ptr, + const char *end, POSITION *pos) +{ + normal_updatePosition(&utf8_encoding.enc, ptr, end, pos); +} + +static +int toAscii(const ENCODING *enc, const char *ptr, const char *end) +{ + char buf[1]; + char *p = buf; + XmlUtf8Convert(enc, &ptr, end, &p, p + 1); + if (p == buf) + return -1; + else + return buf[0]; +} + +static +int isSpace(int c) +{ + switch (c) { + case 0x20: + case 0xD: + case 0xA: + case 0x9: + return 1; + } + return 0; +} + +/* Return 1 if there's just optional white space +or there's an S followed by name=val. */ +static +int parsePseudoAttribute(const ENCODING *enc, + const char *ptr, + const char *end, + const char **namePtr, + const char **nameEndPtr, + const char **valPtr, + const char **nextTokPtr) +{ + int c; + char open; + if (ptr == end) { + *namePtr = 0; + return 1; + } + if (!isSpace(toAscii(enc, ptr, end))) { + *nextTokPtr = ptr; + return 0; + } + do { + ptr += enc->minBytesPerChar; + } while (isSpace(toAscii(enc, ptr, end))); + if (ptr == end) { + *namePtr = 0; + return 1; + } + *namePtr = ptr; + for (;;) { + c = toAscii(enc, ptr, end); + if (c == -1) { + *nextTokPtr = ptr; + return 0; + } + if (c == ASCII_EQUALS) { + *nameEndPtr = ptr; + break; + } + if (isSpace(c)) { + *nameEndPtr = ptr; + do { + ptr += enc->minBytesPerChar; + } while (isSpace(c = toAscii(enc, ptr, end))); + if (c != ASCII_EQUALS) { + *nextTokPtr = ptr; + return 0; + } + break; + } + ptr += enc->minBytesPerChar; + } + if (ptr == *namePtr) { + *nextTokPtr = ptr; + return 0; + } + ptr += enc->minBytesPerChar; + c = toAscii(enc, ptr, end); + while (isSpace(c)) { + ptr += enc->minBytesPerChar; + c = toAscii(enc, ptr, end); + } + if (c != ASCII_QUOT && c != ASCII_APOS) { + *nextTokPtr = ptr; + return 0; + } + open = c; + ptr += enc->minBytesPerChar; + *valPtr = ptr; + for (;; ptr += enc->minBytesPerChar) { + c = toAscii(enc, ptr, end); + if (c == open) + break; + if (!(ASCII_a <= c && c <= ASCII_z) + && !(ASCII_A <= c && c <= ASCII_Z) + && !(ASCII_0 <= c && c <= ASCII_9) + && c != ASCII_PERIOD + && c != ASCII_MINUS + && c != ASCII_UNDERSCORE) { + *nextTokPtr = ptr; + return 0; + } + } + *nextTokPtr = ptr + enc->minBytesPerChar; + return 1; +} + +static const char KW_version[] = { + ASCII_v, ASCII_e, ASCII_r, ASCII_s, ASCII_i, ASCII_o, ASCII_n, '\0' +}; + +static const char KW_encoding[] = { + ASCII_e, ASCII_n, ASCII_c, ASCII_o, ASCII_d, ASCII_i, ASCII_n, ASCII_g, '\0' +}; + +static const char KW_standalone[] = { + ASCII_s, ASCII_t, ASCII_a, ASCII_n, ASCII_d, ASCII_a, ASCII_l, ASCII_o, ASCII_n, ASCII_e, '\0' +}; + +static const char KW_yes[] = { + ASCII_y, ASCII_e, ASCII_s, '\0' +}; + +static const char KW_no[] = { + ASCII_n, ASCII_o, '\0' +}; + +static +int doParseXmlDecl(const ENCODING *(*encodingFinder)(const ENCODING *, + const char *, + const char *), + int isGeneralTextEntity, + const ENCODING *enc, + const char *ptr, + const char *end, + const char **badPtr, + const char **versionPtr, + const char **versionEndPtr, + const char **encodingName, + const ENCODING **encoding, + int *standalone) +{ + const char *val = 0; + const char *name = 0; + const char *nameEnd = 0; + ptr += 5 * enc->minBytesPerChar; + end -= 2 * enc->minBytesPerChar; + if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr) || !name) { + *badPtr = ptr; + return 0; + } + if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_version)) { + if (!isGeneralTextEntity) { + *badPtr = name; + return 0; + } + } + else { + if (versionPtr) + *versionPtr = val; + if (versionEndPtr) + *versionEndPtr = ptr; + if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) { + *badPtr = ptr; + return 0; + } + if (!name) { + if (isGeneralTextEntity) { + /* a TextDecl must have an EncodingDecl */ + *badPtr = ptr; + return 0; + } + return 1; + } + } + if (XmlNameMatchesAscii(enc, name, nameEnd, KW_encoding)) { + int c = toAscii(enc, val, end); + if (!(ASCII_a <= c && c <= ASCII_z) && !(ASCII_A <= c && c <= ASCII_Z)) { + *badPtr = val; + return 0; + } + if (encodingName) + *encodingName = val; + if (encoding) + *encoding = encodingFinder(enc, val, ptr - enc->minBytesPerChar); + if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) { + *badPtr = ptr; + return 0; + } + if (!name) + return 1; + } + if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_standalone) || isGeneralTextEntity) { + *badPtr = name; + return 0; + } + if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_yes)) { + if (standalone) + *standalone = 1; + } + else if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_no)) { + if (standalone) + *standalone = 0; + } + else { + *badPtr = val; + return 0; + } + while (isSpace(toAscii(enc, ptr, end))) + ptr += enc->minBytesPerChar; + if (ptr != end) { + *badPtr = ptr; + return 0; + } + return 1; +} + +static +int checkCharRefNumber(int result) +{ + switch (result >> 8) { + case 0xD8: case 0xD9: case 0xDA: case 0xDB: + case 0xDC: case 0xDD: case 0xDE: case 0xDF: + return -1; + case 0: + if (latin1_encoding.type[result] == BT_NONXML) + return -1; + break; + case 0xFF: + if (result == 0xFFFE || result == 0xFFFF) + return -1; + break; + } + return result; +} + +int XmlUtf8Encode(int c, char *buf) +{ + enum { + /* minN is minimum legal resulting value for N byte sequence */ + min2 = 0x80, + min3 = 0x800, + min4 = 0x10000 + }; + + if (c < 0) + return 0; + if (c < min2) { + buf[0] = (c | UTF8_cval1); + return 1; + } + if (c < min3) { + buf[0] = ((c >> 6) | UTF8_cval2); + buf[1] = ((c & 0x3f) | 0x80); + return 2; + } + if (c < min4) { + buf[0] = ((c >> 12) | UTF8_cval3); + buf[1] = (((c >> 6) & 0x3f) | 0x80); + buf[2] = ((c & 0x3f) | 0x80); + return 3; + } + if (c < 0x110000) { + buf[0] = ((c >> 18) | UTF8_cval4); + buf[1] = (((c >> 12) & 0x3f) | 0x80); + buf[2] = (((c >> 6) & 0x3f) | 0x80); + buf[3] = ((c & 0x3f) | 0x80); + return 4; + } + return 0; +} + +int XmlUtf16Encode(int charNum, unsigned short *buf) +{ + if (charNum < 0) + return 0; + if (charNum < 0x10000) { + buf[0] = charNum; + return 1; + } + if (charNum < 0x110000) { + charNum -= 0x10000; + buf[0] = (charNum >> 10) + 0xD800; + buf[1] = (charNum & 0x3FF) + 0xDC00; + return 2; + } + return 0; +} + +struct unknown_encoding { + struct normal_encoding normal; + int (*convert)(void *userData, const char *p); + void *userData; + unsigned short utf16[256]; + char utf8[256][4]; +}; + +int XmlSizeOfUnknownEncoding(void) +{ + return sizeof(struct unknown_encoding); +} + +static +int unknown_isName(const ENCODING *enc, const char *p) +{ + int c = ((const struct unknown_encoding *)enc) + ->convert(((const struct unknown_encoding *)enc)->userData, p); + if (c & ~0xFFFF) + return 0; + return UCS2_GET_NAMING(namePages, c >> 8, c & 0xFF); +} + +static +int unknown_isNmstrt(const ENCODING *enc, const char *p) +{ + int c = ((const struct unknown_encoding *)enc) + ->convert(((const struct unknown_encoding *)enc)->userData, p); + if (c & ~0xFFFF) + return 0; + return UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xFF); +} + +static +int unknown_isInvalid(const ENCODING *enc, const char *p) +{ + int c = ((const struct unknown_encoding *)enc) + ->convert(((const struct unknown_encoding *)enc)->userData, p); + return (c & ~0xFFFF) || checkCharRefNumber(c) < 0; +} + +static +void unknown_toUtf8(const ENCODING *enc, + const char **fromP, const char *fromLim, + char **toP, const char *toLim) +{ + char buf[XML_UTF8_ENCODE_MAX]; + for (;;) { + const char *utf8; + int n; + if (*fromP == fromLim) + break; + utf8 = ((const struct unknown_encoding *)enc)->utf8[(unsigned char)**fromP]; + n = *utf8++; + if (n == 0) { + int c = ((const struct unknown_encoding *)enc) + ->convert(((const struct unknown_encoding *)enc)->userData, *fromP); + n = XmlUtf8Encode(c, buf); + if (n > toLim - *toP) + break; + utf8 = buf; + *fromP += ((const struct normal_encoding *)enc)->type[(unsigned char)**fromP] + - (BT_LEAD2 - 2); + } + else { + if (n > toLim - *toP) + break; + (*fromP)++; + } + do { + *(*toP)++ = *utf8++; + } while (--n != 0); + } +} + +static +void unknown_toUtf16(const ENCODING *enc, + const char **fromP, const char *fromLim, + unsigned short **toP, const unsigned short *toLim) +{ + while (*fromP != fromLim && *toP != toLim) { + unsigned short c + = ((const struct unknown_encoding *)enc)->utf16[(unsigned char)**fromP]; + if (c == 0) { + c = (unsigned short)((const struct unknown_encoding *)enc) + ->convert(((const struct unknown_encoding *)enc)->userData, *fromP); + *fromP += ((const struct normal_encoding *)enc)->type[(unsigned char)**fromP] + - (BT_LEAD2 - 2); + } + else + (*fromP)++; + *(*toP)++ = c; + } +} + +ENCODING * +XmlInitUnknownEncoding(void *mem, + int *table, + int (*convert)(void *userData, const char *p), + void *userData) +{ + int i; + struct unknown_encoding *e = mem; + for (i = 0; i < (int)sizeof(struct normal_encoding); i++) + ((char *)mem)[i] = ((char *)&latin1_encoding)[i]; + for (i = 0; i < 128; i++) + if (latin1_encoding.type[i] != BT_OTHER + && latin1_encoding.type[i] != BT_NONXML + && table[i] != i) + return 0; + for (i = 0; i < 256; i++) { + int c = table[i]; + if (c == -1) { + e->normal.type[i] = BT_MALFORM; + /* This shouldn't really get used. */ + e->utf16[i] = 0xFFFF; + e->utf8[i][0] = 1; + e->utf8[i][1] = 0; + } + else if (c < 0) { + if (c < -4) + return 0; + e->normal.type[i] = BT_LEAD2 - (c + 2); + e->utf8[i][0] = 0; + e->utf16[i] = 0; + } + else if (c < 0x80) { + if (latin1_encoding.type[c] != BT_OTHER + && latin1_encoding.type[c] != BT_NONXML + && c != i) + return 0; + e->normal.type[i] = latin1_encoding.type[c]; + e->utf8[i][0] = 1; + e->utf8[i][1] = (char)c; + e->utf16[i] = c == 0 ? 0xFFFF : c; + } + else if (checkCharRefNumber(c) < 0) { + e->normal.type[i] = BT_NONXML; + /* This shouldn't really get used. */ + e->utf16[i] = 0xFFFF; + e->utf8[i][0] = 1; + e->utf8[i][1] = 0; + } + else { + if (c > 0xFFFF) + return 0; + if (UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xff)) + e->normal.type[i] = BT_NMSTRT; + else if (UCS2_GET_NAMING(namePages, c >> 8, c & 0xff)) + e->normal.type[i] = BT_NAME; + else + e->normal.type[i] = BT_OTHER; + e->utf8[i][0] = (char)XmlUtf8Encode(c, e->utf8[i] + 1); + e->utf16[i] = c; + } + } + e->userData = userData; + e->convert = convert; + if (convert) { + e->normal.isName2 = unknown_isName; + e->normal.isName3 = unknown_isName; + e->normal.isName4 = unknown_isName; + e->normal.isNmstrt2 = unknown_isNmstrt; + e->normal.isNmstrt3 = unknown_isNmstrt; + e->normal.isNmstrt4 = unknown_isNmstrt; + e->normal.isInvalid2 = unknown_isInvalid; + e->normal.isInvalid3 = unknown_isInvalid; + e->normal.isInvalid4 = unknown_isInvalid; + } + e->normal.enc.utf8Convert = unknown_toUtf8; + e->normal.enc.utf16Convert = unknown_toUtf16; + return &(e->normal.enc); +} + +/* If this enumeration is changed, getEncodingIndex and encodings +must also be changed. */ +enum { + UNKNOWN_ENC = -1, + ISO_8859_1_ENC = 0, + US_ASCII_ENC, + UTF_8_ENC, + UTF_16_ENC, + UTF_16BE_ENC, + UTF_16LE_ENC, + /* must match encodingNames up to here */ + NO_ENC +}; + +static const char KW_ISO_8859_1[] = { + ASCII_I, ASCII_S, ASCII_O, ASCII_MINUS, ASCII_8, ASCII_8, ASCII_5, ASCII_9, ASCII_MINUS, ASCII_1, '\0' +}; +static const char KW_US_ASCII[] = { + ASCII_U, ASCII_S, ASCII_MINUS, ASCII_A, ASCII_S, ASCII_C, ASCII_I, ASCII_I, '\0' +}; +static const char KW_UTF_8[] = { + ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_8, '\0' +}; +static const char KW_UTF_16[] = { + ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, '\0' +}; +static const char KW_UTF_16BE[] = { + ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_B, ASCII_E, '\0' +}; +static const char KW_UTF_16LE[] = { + ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_L, ASCII_E, '\0' +}; + +static +int getEncodingIndex(const char *name) +{ + static const char *encodingNames[] = { + KW_ISO_8859_1, + KW_US_ASCII, + KW_UTF_8, + KW_UTF_16, + KW_UTF_16BE, + KW_UTF_16LE, + }; + int i; + if (name == 0) + return NO_ENC; + for (i = 0; i < (int)(sizeof(encodingNames)/sizeof(encodingNames[0])); i++) + if (streqci(name, encodingNames[i])) + return i; + return UNKNOWN_ENC; +} + +/* For binary compatibility, we store the index of the encoding specified +at initialization in the isUtf16 member. */ + +#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16) +#define SET_INIT_ENC_INDEX(enc, i) ((enc)->initEnc.isUtf16 = (char)i) + +/* This is what detects the encoding. +encodingTable maps from encoding indices to encodings; +INIT_ENC_INDEX(enc) is the index of the external (protocol) specified encoding; +state is XML_CONTENT_STATE if we're parsing an external text entity, +and XML_PROLOG_STATE otherwise. +*/ + + +static +int initScan(const ENCODING **encodingTable, + const INIT_ENCODING *enc, + int state, + const char *ptr, + const char *end, + const char **nextTokPtr) +{ + const ENCODING **encPtr; + + if (ptr == end) + return XML_TOK_NONE; + encPtr = enc->encPtr; + if (ptr + 1 == end) { + /* only a single byte available for auto-detection */ +#ifndef XML_DTD /* FIXME */ + /* a well-formed document entity must have more than one byte */ + if (state != XML_CONTENT_STATE) + return XML_TOK_PARTIAL; +#endif + /* so we're parsing an external text entity... */ + /* if UTF-16 was externally specified, then we need at least 2 bytes */ + switch (INIT_ENC_INDEX(enc)) { + case UTF_16_ENC: + case UTF_16LE_ENC: + case UTF_16BE_ENC: + return XML_TOK_PARTIAL; + } + switch ((unsigned char)*ptr) { + case 0xFE: + case 0xFF: + case 0xEF: /* possibly first byte of UTF-8 BOM */ + if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC + && state == XML_CONTENT_STATE) + break; + /* fall through */ + case 0x00: + case 0x3C: + return XML_TOK_PARTIAL; + } + } + else { + switch (((unsigned char)ptr[0] << 8) | (unsigned char)ptr[1]) { + case 0xFEFF: + if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC + && state == XML_CONTENT_STATE) + break; + *nextTokPtr = ptr + 2; + *encPtr = encodingTable[UTF_16BE_ENC]; + return XML_TOK_BOM; + /* 00 3C is handled in the default case */ + case 0x3C00: + if ((INIT_ENC_INDEX(enc) == UTF_16BE_ENC + || INIT_ENC_INDEX(enc) == UTF_16_ENC) + && state == XML_CONTENT_STATE) + break; + *encPtr = encodingTable[UTF_16LE_ENC]; + return XmlTok(*encPtr, state, ptr, end, nextTokPtr); + case 0xFFFE: + if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC + && state == XML_CONTENT_STATE) + break; + *nextTokPtr = ptr + 2; + *encPtr = encodingTable[UTF_16LE_ENC]; + return XML_TOK_BOM; + case 0xEFBB: + /* Maybe a UTF-8 BOM (EF BB BF) */ + /* If there's an explicitly specified (external) encoding + of ISO-8859-1 or some flavour of UTF-16 + and this is an external text entity, + don't look for the BOM, + because it might be a legal data. */ + if (state == XML_CONTENT_STATE) { + int e = INIT_ENC_INDEX(enc); + if (e == ISO_8859_1_ENC || e == UTF_16BE_ENC || e == UTF_16LE_ENC || e == UTF_16_ENC) + break; + } + if (ptr + 2 == end) + return XML_TOK_PARTIAL; + if ((unsigned char)ptr[2] == 0xBF) { + *encPtr = encodingTable[UTF_8_ENC]; + return XML_TOK_BOM; + } + break; + default: + if (ptr[0] == '\0') { + /* 0 isn't a legal data character. Furthermore a document entity can only + start with ASCII characters. So the only way this can fail to be big-endian + UTF-16 if it it's an external parsed general entity that's labelled as + UTF-16LE. */ + if (state == XML_CONTENT_STATE && INIT_ENC_INDEX(enc) == UTF_16LE_ENC) + break; + *encPtr = encodingTable[UTF_16BE_ENC]; + return XmlTok(*encPtr, state, ptr, end, nextTokPtr); + } + else if (ptr[1] == '\0') { + /* We could recover here in the case: + - parsing an external entity + - second byte is 0 + - no externally specified encoding + - no encoding declaration + by assuming UTF-16LE. But we don't, because this would mean when + presented just with a single byte, we couldn't reliably determine + whether we needed further bytes. */ + if (state == XML_CONTENT_STATE) + break; + *encPtr = encodingTable[UTF_16LE_ENC]; + return XmlTok(*encPtr, state, ptr, end, nextTokPtr); + } + break; + } + } + *encPtr = encodingTable[INIT_ENC_INDEX(enc)]; + return XmlTok(*encPtr, state, ptr, end, nextTokPtr); +} + + +#define NS(x) x +#define ns(x) x +#include "xmltok_ns.c" +#undef NS +#undef ns + +#ifdef XML_NS + +#define NS(x) x ## NS +#define ns(x) x ## _ns + +#include "xmltok_ns.c" + +#undef NS +#undef ns + +ENCODING * +XmlInitUnknownEncodingNS(void *mem, + int *table, + int (*convert)(void *userData, const char *p), + void *userData) +{ + ENCODING *enc = XmlInitUnknownEncoding(mem, table, convert, userData); + if (enc) + ((struct normal_encoding *)enc)->type[ASCII_COLON] = BT_COLON; + return enc; +} + +#endif /* XML_NS */ diff --git a/Build/source/extra/expat/lib/xmltok.h b/Build/source/extra/expat/lib/xmltok.h new file mode 100644 index 00000000000..8b02324c387 --- /dev/null +++ b/Build/source/extra/expat/lib/xmltok.h @@ -0,0 +1,299 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +#ifndef XmlTok_INCLUDED +#define XmlTok_INCLUDED 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* The following token may be returned by XmlContentTok */ +#define XML_TOK_TRAILING_RSQB -5 /* ] or ]] at the end of the scan; might be start of + illegal ]]> sequence */ +/* The following tokens may be returned by both XmlPrologTok and XmlContentTok */ +#define XML_TOK_NONE -4 /* The string to be scanned is empty */ +#define XML_TOK_TRAILING_CR -3 /* A CR at the end of the scan; + might be part of CRLF sequence */ +#define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */ +#define XML_TOK_PARTIAL -1 /* only part of a token */ +#define XML_TOK_INVALID 0 + +/* The following tokens are returned by XmlContentTok; some are also + returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok */ + +#define XML_TOK_START_TAG_WITH_ATTS 1 +#define XML_TOK_START_TAG_NO_ATTS 2 +#define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag */ +#define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4 +#define XML_TOK_END_TAG 5 +#define XML_TOK_DATA_CHARS 6 +#define XML_TOK_DATA_NEWLINE 7 +#define XML_TOK_CDATA_SECT_OPEN 8 +#define XML_TOK_ENTITY_REF 9 +#define XML_TOK_CHAR_REF 10 /* numeric character reference */ + +/* The following tokens may be returned by both XmlPrologTok and XmlContentTok */ +#define XML_TOK_PI 11 /* processing instruction */ +#define XML_TOK_XML_DECL 12 /* XML decl or text decl */ +#define XML_TOK_COMMENT 13 +#define XML_TOK_BOM 14 /* Byte order mark */ + +/* The following tokens are returned only by XmlPrologTok */ +#define XML_TOK_PROLOG_S 15 +#define XML_TOK_DECL_OPEN 16 /* */ +#define XML_TOK_NAME 18 +#define XML_TOK_NMTOKEN 19 +#define XML_TOK_POUND_NAME 20 /* #name */ +#define XML_TOK_OR 21 /* | */ +#define XML_TOK_PERCENT 22 +#define XML_TOK_OPEN_PAREN 23 +#define XML_TOK_CLOSE_PAREN 24 +#define XML_TOK_OPEN_BRACKET 25 +#define XML_TOK_CLOSE_BRACKET 26 +#define XML_TOK_LITERAL 27 +#define XML_TOK_PARAM_ENTITY_REF 28 +#define XML_TOK_INSTANCE_START 29 + +/* The following occur only in element type declarations */ +#define XML_TOK_NAME_QUESTION 30 /* name? */ +#define XML_TOK_NAME_ASTERISK 31 /* name* */ +#define XML_TOK_NAME_PLUS 32 /* name+ */ +#define XML_TOK_COND_SECT_OPEN 33 /* */ +#define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */ +#define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */ +#define XML_TOK_CLOSE_PAREN_PLUS 37 /* )+ */ +#define XML_TOK_COMMA 38 + +/* The following token is returned only by XmlAttributeValueTok */ +#define XML_TOK_ATTRIBUTE_VALUE_S 39 + +/* The following token is returned only by XmlCdataSectionTok */ +#define XML_TOK_CDATA_SECT_CLOSE 40 + +/* With namespace processing this is returned by XmlPrologTok + for a name with a colon. */ +#define XML_TOK_PREFIXED_NAME 41 + +#ifdef XML_DTD +#define XML_TOK_IGNORE_SECT 42 +#endif /* XML_DTD */ + +#ifdef XML_DTD +#define XML_N_STATES 4 +#else /* not XML_DTD */ +#define XML_N_STATES 3 +#endif /* not XML_DTD */ + +#define XML_PROLOG_STATE 0 +#define XML_CONTENT_STATE 1 +#define XML_CDATA_SECTION_STATE 2 +#ifdef XML_DTD +#define XML_IGNORE_SECTION_STATE 3 +#endif /* XML_DTD */ + +#define XML_N_LITERAL_TYPES 2 +#define XML_ATTRIBUTE_VALUE_LITERAL 0 +#define XML_ENTITY_VALUE_LITERAL 1 + +/* The size of the buffer passed to XmlUtf8Encode must be at least this. */ +#define XML_UTF8_ENCODE_MAX 4 +/* The size of the buffer passed to XmlUtf16Encode must be at least this. */ +#define XML_UTF16_ENCODE_MAX 2 + +typedef struct position { + /* first line and first column are 0 not 1 */ + unsigned long lineNumber; + unsigned long columnNumber; +} POSITION; + +typedef struct { + const char *name; + const char *valuePtr; + const char *valueEnd; + char normalized; +} ATTRIBUTE; + +struct encoding; +typedef struct encoding ENCODING; + +struct encoding { + int (*scanners[XML_N_STATES])(const ENCODING *, + const char *, + const char *, + const char **); + int (*literalScanners[XML_N_LITERAL_TYPES])(const ENCODING *, + const char *, + const char *, + const char **); + int (*sameName)(const ENCODING *, + const char *, const char *); + int (*nameMatchesAscii)(const ENCODING *, + const char *, const char *, const char *); + int (*nameLength)(const ENCODING *, const char *); + const char *(*skipS)(const ENCODING *, const char *); + int (*getAtts)(const ENCODING *enc, const char *ptr, + int attsMax, ATTRIBUTE *atts); + int (*charRefNumber)(const ENCODING *enc, const char *ptr); + int (*predefinedEntityName)(const ENCODING *, const char *, const char *); + void (*updatePosition)(const ENCODING *, + const char *ptr, + const char *end, + POSITION *); + int (*isPublicId)(const ENCODING *enc, const char *ptr, const char *end, + const char **badPtr); + void (*utf8Convert)(const ENCODING *enc, + const char **fromP, + const char *fromLim, + char **toP, + const char *toLim); + void (*utf16Convert)(const ENCODING *enc, + const char **fromP, + const char *fromLim, + unsigned short **toP, + const unsigned short *toLim); + int minBytesPerChar; + char isUtf8; + char isUtf16; +}; + +/* +Scan the string starting at ptr until the end of the next complete token, +but do not scan past eptr. Return an integer giving the type of token. + +Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set. + +Return XML_TOK_PARTIAL when the string does not contain a complete token; +nextTokPtr will not be set. + +Return XML_TOK_INVALID when the string does not start a valid token; nextTokPtr +will be set to point to the character which made the token invalid. + +Otherwise the string starts with a valid token; nextTokPtr will be set to point +to the character following the end of that token. + +Each data character counts as a single token, but adjacent data characters +may be returned together. Similarly for characters in the prolog outside +literals, comments and processing instructions. +*/ + + +#define XmlTok(enc, state, ptr, end, nextTokPtr) \ + (((enc)->scanners[state])(enc, ptr, end, nextTokPtr)) + +#define XmlPrologTok(enc, ptr, end, nextTokPtr) \ + XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr) + +#define XmlContentTok(enc, ptr, end, nextTokPtr) \ + XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr) + +#define XmlCdataSectionTok(enc, ptr, end, nextTokPtr) \ + XmlTok(enc, XML_CDATA_SECTION_STATE, ptr, end, nextTokPtr) + +#ifdef XML_DTD + +#define XmlIgnoreSectionTok(enc, ptr, end, nextTokPtr) \ + XmlTok(enc, XML_IGNORE_SECTION_STATE, ptr, end, nextTokPtr) + +#endif /* XML_DTD */ + +/* This is used for performing a 2nd-level tokenization on +the content of a literal that has already been returned by XmlTok. */ + +#define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \ + (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr)) + +#define XmlAttributeValueTok(enc, ptr, end, nextTokPtr) \ + XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr) + +#define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \ + XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr) + +#define XmlSameName(enc, ptr1, ptr2) (((enc)->sameName)(enc, ptr1, ptr2)) + +#define XmlNameMatchesAscii(enc, ptr1, end1, ptr2) \ + (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2)) + +#define XmlNameLength(enc, ptr) \ + (((enc)->nameLength)(enc, ptr)) + +#define XmlSkipS(enc, ptr) \ + (((enc)->skipS)(enc, ptr)) + +#define XmlGetAttributes(enc, ptr, attsMax, atts) \ + (((enc)->getAtts)(enc, ptr, attsMax, atts)) + +#define XmlCharRefNumber(enc, ptr) \ + (((enc)->charRefNumber)(enc, ptr)) + +#define XmlPredefinedEntityName(enc, ptr, end) \ + (((enc)->predefinedEntityName)(enc, ptr, end)) + +#define XmlUpdatePosition(enc, ptr, end, pos) \ + (((enc)->updatePosition)(enc, ptr, end, pos)) + +#define XmlIsPublicId(enc, ptr, end, badPtr) \ + (((enc)->isPublicId)(enc, ptr, end, badPtr)) + +#define XmlUtf8Convert(enc, fromP, fromLim, toP, toLim) \ + (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim)) + +#define XmlUtf16Convert(enc, fromP, fromLim, toP, toLim) \ + (((enc)->utf16Convert)(enc, fromP, fromLim, toP, toLim)) + +typedef struct { + ENCODING initEnc; + const ENCODING **encPtr; +} INIT_ENCODING; + +int XmlParseXmlDecl(int isGeneralTextEntity, + const ENCODING *enc, + const char *ptr, + const char *end, + const char **badPtr, + const char **versionPtr, + const char **versionEndPtr, + const char **encodingNamePtr, + const ENCODING **namedEncodingPtr, + int *standalonePtr); + +int XmlInitEncoding(INIT_ENCODING *, const ENCODING **, const char *name); +const ENCODING *XmlGetUtf8InternalEncoding(void); +const ENCODING *XmlGetUtf16InternalEncoding(void); +int XmlUtf8Encode(int charNumber, char *buf); +int XmlUtf16Encode(int charNumber, unsigned short *buf); + +int XmlSizeOfUnknownEncoding(void); +ENCODING * +XmlInitUnknownEncoding(void *mem, + int *table, + int (*conv)(void *userData, const char *p), + void *userData); + +int XmlParseXmlDeclNS(int isGeneralTextEntity, + const ENCODING *enc, + const char *ptr, + const char *end, + const char **badPtr, + const char **versionPtr, + const char **versionEndPtr, + const char **encodingNamePtr, + const ENCODING **namedEncodingPtr, + int *standalonePtr); +int XmlInitEncodingNS(INIT_ENCODING *, const ENCODING **, const char *name); +const ENCODING *XmlGetUtf8InternalEncodingNS(void); +const ENCODING *XmlGetUtf16InternalEncodingNS(void); +ENCODING * +XmlInitUnknownEncodingNS(void *mem, + int *table, + int (*conv)(void *userData, const char *p), + void *userData); +#ifdef __cplusplus +} +#endif + +#endif /* not XmlTok_INCLUDED */ diff --git a/Build/source/extra/expat/lib/xmltok_impl.c b/Build/source/extra/expat/lib/xmltok_impl.c new file mode 100644 index 00000000000..36d2065ce36 --- /dev/null +++ b/Build/source/extra/expat/lib/xmltok_impl.c @@ -0,0 +1,1768 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +#ifndef IS_INVALID_CHAR +#define IS_INVALID_CHAR(enc, ptr, n) (0) +#endif + +#define INVALID_LEAD_CASE(n, ptr, nextTokPtr) \ + case BT_LEAD ## n: \ + if (end - ptr < n) \ + return XML_TOK_PARTIAL_CHAR; \ + if (IS_INVALID_CHAR(enc, ptr, n)) { \ + *(nextTokPtr) = (ptr); \ + return XML_TOK_INVALID; \ + } \ + ptr += n; \ + break; + +#define INVALID_CASES(ptr, nextTokPtr) \ + INVALID_LEAD_CASE(2, ptr, nextTokPtr) \ + INVALID_LEAD_CASE(3, ptr, nextTokPtr) \ + INVALID_LEAD_CASE(4, ptr, nextTokPtr) \ + case BT_NONXML: \ + case BT_MALFORM: \ + case BT_TRAIL: \ + *(nextTokPtr) = (ptr); \ + return XML_TOK_INVALID; + +#define CHECK_NAME_CASE(n, enc, ptr, end, nextTokPtr) \ + case BT_LEAD ## n: \ + if (end - ptr < n) \ + return XML_TOK_PARTIAL_CHAR; \ + if (!IS_NAME_CHAR(enc, ptr, n)) { \ + *nextTokPtr = ptr; \ + return XML_TOK_INVALID; \ + } \ + ptr += n; \ + break; + +#define CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) \ + case BT_NONASCII: \ + if (!IS_NAME_CHAR_MINBPC(enc, ptr)) { \ + *nextTokPtr = ptr; \ + return XML_TOK_INVALID; \ + } \ + case BT_NMSTRT: \ + case BT_HEX: \ + case BT_DIGIT: \ + case BT_NAME: \ + case BT_MINUS: \ + ptr += MINBPC(enc); \ + break; \ + CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr) \ + CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr) \ + CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr) + +#define CHECK_NMSTRT_CASE(n, enc, ptr, end, nextTokPtr) \ + case BT_LEAD ## n: \ + if (end - ptr < n) \ + return XML_TOK_PARTIAL_CHAR; \ + if (!IS_NMSTRT_CHAR(enc, ptr, n)) { \ + *nextTokPtr = ptr; \ + return XML_TOK_INVALID; \ + } \ + ptr += n; \ + break; + +#define CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) \ + case BT_NONASCII: \ + if (!IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { \ + *nextTokPtr = ptr; \ + return XML_TOK_INVALID; \ + } \ + case BT_NMSTRT: \ + case BT_HEX: \ + ptr += MINBPC(enc); \ + break; \ + CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr) \ + CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr) \ + CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr) + +#ifndef PREFIX +#define PREFIX(ident) ident +#endif + +/* ptr points to character following " */ + switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) { + case BT_S: case BT_CR: case BT_LF: case BT_PERCNT: + *nextTokPtr = ptr; + return XML_TOK_INVALID; + } + /* fall through */ + case BT_S: case BT_CR: case BT_LF: + *nextTokPtr = ptr; + return XML_TOK_DECL_OPEN; + case BT_NMSTRT: + case BT_HEX: + ptr += MINBPC(enc); + break; + default: + *nextTokPtr = ptr; + return XML_TOK_INVALID; + } + } + return XML_TOK_PARTIAL; +} + +static +int PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr, const char *end, int *tokPtr) +{ + int upper = 0; + *tokPtr = XML_TOK_PI; + if (end - ptr != MINBPC(enc)*3) + return 1; + switch (BYTE_TO_ASCII(enc, ptr)) { + case ASCII_x: + break; + case ASCII_X: + upper = 1; + break; + default: + return 1; + } + ptr += MINBPC(enc); + switch (BYTE_TO_ASCII(enc, ptr)) { + case ASCII_m: + break; + case ASCII_M: + upper = 1; + break; + default: + return 1; + } + ptr += MINBPC(enc); + switch (BYTE_TO_ASCII(enc, ptr)) { + case ASCII_l: + break; + case ASCII_L: + upper = 1; + break; + default: + return 1; + } + if (upper) + return 0; + *tokPtr = XML_TOK_XML_DECL; + return 1; +} + +/* ptr points to character following " 1) { + size_t n = end - ptr; + if (n & (MINBPC(enc) - 1)) { + n &= ~(MINBPC(enc) - 1); + if (n == 0) + return XML_TOK_PARTIAL; + end = ptr + n; + } + } + switch (BYTE_TYPE(enc, ptr)) { + case BT_RSQB: + ptr += MINBPC(enc); + if (ptr == end) + return XML_TOK_PARTIAL; + if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB)) + break; + ptr += MINBPC(enc); + if (ptr == end) + return XML_TOK_PARTIAL; + if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { + ptr -= MINBPC(enc); + break; + } + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_CDATA_SECT_CLOSE; + case BT_CR: + ptr += MINBPC(enc); + if (ptr == end) + return XML_TOK_PARTIAL; + if (BYTE_TYPE(enc, ptr) == BT_LF) + ptr += MINBPC(enc); + *nextTokPtr = ptr; + return XML_TOK_DATA_NEWLINE; + case BT_LF: + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_DATA_NEWLINE; + INVALID_CASES(ptr, nextTokPtr) + default: + ptr += MINBPC(enc); + break; + } + while (ptr != end) { + switch (BYTE_TYPE(enc, ptr)) { +#define LEAD_CASE(n) \ + case BT_LEAD ## n: \ + if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \ + *nextTokPtr = ptr; \ + return XML_TOK_DATA_CHARS; \ + } \ + ptr += n; \ + break; + LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) +#undef LEAD_CASE + case BT_NONXML: + case BT_MALFORM: + case BT_TRAIL: + case BT_CR: + case BT_LF: + case BT_RSQB: + *nextTokPtr = ptr; + return XML_TOK_DATA_CHARS; + default: + ptr += MINBPC(enc); + break; + } + } + *nextTokPtr = ptr; + return XML_TOK_DATA_CHARS; +} + +/* ptr points to character following " 1) { + size_t n = end - ptr; + if (n & (MINBPC(enc) - 1)) { + n &= ~(MINBPC(enc) - 1); + if (n == 0) + return XML_TOK_PARTIAL; + end = ptr + n; + } + } + switch (BYTE_TYPE(enc, ptr)) { + case BT_LT: + return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr); + case BT_AMP: + return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); + case BT_CR: + ptr += MINBPC(enc); + if (ptr == end) + return XML_TOK_TRAILING_CR; + if (BYTE_TYPE(enc, ptr) == BT_LF) + ptr += MINBPC(enc); + *nextTokPtr = ptr; + return XML_TOK_DATA_NEWLINE; + case BT_LF: + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_DATA_NEWLINE; + case BT_RSQB: + ptr += MINBPC(enc); + if (ptr == end) + return XML_TOK_TRAILING_RSQB; + if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB)) + break; + ptr += MINBPC(enc); + if (ptr == end) + return XML_TOK_TRAILING_RSQB; + if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { + ptr -= MINBPC(enc); + break; + } + *nextTokPtr = ptr; + return XML_TOK_INVALID; + INVALID_CASES(ptr, nextTokPtr) + default: + ptr += MINBPC(enc); + break; + } + while (ptr != end) { + switch (BYTE_TYPE(enc, ptr)) { +#define LEAD_CASE(n) \ + case BT_LEAD ## n: \ + if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \ + *nextTokPtr = ptr; \ + return XML_TOK_DATA_CHARS; \ + } \ + ptr += n; \ + break; + LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) +#undef LEAD_CASE + case BT_RSQB: + if (ptr + MINBPC(enc) != end) { + if (!CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) { + ptr += MINBPC(enc); + break; + } + if (ptr + 2*MINBPC(enc) != end) { + if (!CHAR_MATCHES(enc, ptr + 2*MINBPC(enc), ASCII_GT)) { + ptr += MINBPC(enc); + break; + } + *nextTokPtr = ptr + 2*MINBPC(enc); + return XML_TOK_INVALID; + } + } + /* fall through */ + case BT_AMP: + case BT_LT: + case BT_NONXML: + case BT_MALFORM: + case BT_TRAIL: + case BT_CR: + case BT_LF: + *nextTokPtr = ptr; + return XML_TOK_DATA_CHARS; + default: + ptr += MINBPC(enc); + break; + } + } + *nextTokPtr = ptr; + return XML_TOK_DATA_CHARS; +} + +/* ptr points to character following "%" */ + +static +int PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end, + const char **nextTokPtr) +{ + if (ptr == end) + return XML_TOK_PARTIAL; + switch (BYTE_TYPE(enc, ptr)) { + CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) + case BT_S: case BT_LF: case BT_CR: case BT_PERCNT: + *nextTokPtr = ptr; + return XML_TOK_PERCENT; + default: + *nextTokPtr = ptr; + return XML_TOK_INVALID; + } + while (ptr != end) { + switch (BYTE_TYPE(enc, ptr)) { + CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) + case BT_SEMI: + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_PARAM_ENTITY_REF; + default: + *nextTokPtr = ptr; + return XML_TOK_INVALID; + } + } + return XML_TOK_PARTIAL; +} + +static +int PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end, + const char **nextTokPtr) +{ + if (ptr == end) + return XML_TOK_PARTIAL; + switch (BYTE_TYPE(enc, ptr)) { + CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) + default: + *nextTokPtr = ptr; + return XML_TOK_INVALID; + } + while (ptr != end) { + switch (BYTE_TYPE(enc, ptr)) { + CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) + case BT_CR: case BT_LF: case BT_S: + case BT_RPAR: case BT_GT: case BT_PERCNT: case BT_VERBAR: + *nextTokPtr = ptr; + return XML_TOK_POUND_NAME; + default: + *nextTokPtr = ptr; + return XML_TOK_INVALID; + } + } + return -XML_TOK_POUND_NAME; +} + +static +int PREFIX(scanLit)(int open, const ENCODING *enc, + const char *ptr, const char *end, + const char **nextTokPtr) +{ + while (ptr != end) { + int t = BYTE_TYPE(enc, ptr); + switch (t) { + INVALID_CASES(ptr, nextTokPtr) + case BT_QUOT: + case BT_APOS: + ptr += MINBPC(enc); + if (t != open) + break; + if (ptr == end) + return -XML_TOK_LITERAL; + *nextTokPtr = ptr; + switch (BYTE_TYPE(enc, ptr)) { + case BT_S: case BT_CR: case BT_LF: + case BT_GT: case BT_PERCNT: case BT_LSQB: + return XML_TOK_LITERAL; + default: + return XML_TOK_INVALID; + } + default: + ptr += MINBPC(enc); + break; + } + } + return XML_TOK_PARTIAL; +} + +static +int PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end, + const char **nextTokPtr) +{ + int tok; + if (ptr == end) + return XML_TOK_NONE; + if (MINBPC(enc) > 1) { + size_t n = end - ptr; + if (n & (MINBPC(enc) - 1)) { + n &= ~(MINBPC(enc) - 1); + if (n == 0) + return XML_TOK_PARTIAL; + end = ptr + n; + } + } + switch (BYTE_TYPE(enc, ptr)) { + case BT_QUOT: + return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr); + case BT_APOS: + return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr); + case BT_LT: + { + ptr += MINBPC(enc); + if (ptr == end) + return XML_TOK_PARTIAL; + switch (BYTE_TYPE(enc, ptr)) { + case BT_EXCL: + return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr); + case BT_QUEST: + return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr); + case BT_NMSTRT: + case BT_HEX: + case BT_NONASCII: + case BT_LEAD2: + case BT_LEAD3: + case BT_LEAD4: + *nextTokPtr = ptr - MINBPC(enc); + return XML_TOK_INSTANCE_START; + } + *nextTokPtr = ptr; + return XML_TOK_INVALID; + } + case BT_CR: + if (ptr + MINBPC(enc) == end) + return -XML_TOK_PROLOG_S; + /* fall through */ + case BT_S: case BT_LF: + for (;;) { + ptr += MINBPC(enc); + if (ptr == end) + break; + switch (BYTE_TYPE(enc, ptr)) { + case BT_S: case BT_LF: + break; + case BT_CR: + /* don't split CR/LF pair */ + if (ptr + MINBPC(enc) != end) + break; + /* fall through */ + default: + *nextTokPtr = ptr; + return XML_TOK_PROLOG_S; + } + } + *nextTokPtr = ptr; + return XML_TOK_PROLOG_S; + case BT_PERCNT: + return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr); + case BT_COMMA: + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_COMMA; + case BT_LSQB: + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_OPEN_BRACKET; + case BT_RSQB: + ptr += MINBPC(enc); + if (ptr == end) + return -XML_TOK_CLOSE_BRACKET; + if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) { + if (ptr + MINBPC(enc) == end) + return XML_TOK_PARTIAL; + if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) { + *nextTokPtr = ptr + 2*MINBPC(enc); + return XML_TOK_COND_SECT_CLOSE; + } + } + *nextTokPtr = ptr; + return XML_TOK_CLOSE_BRACKET; + case BT_LPAR: + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_OPEN_PAREN; + case BT_RPAR: + ptr += MINBPC(enc); + if (ptr == end) + return -XML_TOK_CLOSE_PAREN; + switch (BYTE_TYPE(enc, ptr)) { + case BT_AST: + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_CLOSE_PAREN_ASTERISK; + case BT_QUEST: + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_CLOSE_PAREN_QUESTION; + case BT_PLUS: + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_CLOSE_PAREN_PLUS; + case BT_CR: case BT_LF: case BT_S: + case BT_GT: case BT_COMMA: case BT_VERBAR: + case BT_RPAR: + *nextTokPtr = ptr; + return XML_TOK_CLOSE_PAREN; + } + *nextTokPtr = ptr; + return XML_TOK_INVALID; + case BT_VERBAR: + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_OR; + case BT_GT: + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_DECL_CLOSE; + case BT_NUM: + return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr); +#define LEAD_CASE(n) \ + case BT_LEAD ## n: \ + if (end - ptr < n) \ + return XML_TOK_PARTIAL_CHAR; \ + if (IS_NMSTRT_CHAR(enc, ptr, n)) { \ + ptr += n; \ + tok = XML_TOK_NAME; \ + break; \ + } \ + if (IS_NAME_CHAR(enc, ptr, n)) { \ + ptr += n; \ + tok = XML_TOK_NMTOKEN; \ + break; \ + } \ + *nextTokPtr = ptr; \ + return XML_TOK_INVALID; + LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) +#undef LEAD_CASE + case BT_NMSTRT: + case BT_HEX: + tok = XML_TOK_NAME; + ptr += MINBPC(enc); + break; + case BT_DIGIT: + case BT_NAME: + case BT_MINUS: +#ifdef XML_NS + case BT_COLON: +#endif + tok = XML_TOK_NMTOKEN; + ptr += MINBPC(enc); + break; + case BT_NONASCII: + if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { + ptr += MINBPC(enc); + tok = XML_TOK_NAME; + break; + } + if (IS_NAME_CHAR_MINBPC(enc, ptr)) { + ptr += MINBPC(enc); + tok = XML_TOK_NMTOKEN; + break; + } + /* fall through */ + default: + *nextTokPtr = ptr; + return XML_TOK_INVALID; + } + while (ptr != end) { + switch (BYTE_TYPE(enc, ptr)) { + CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) + case BT_GT: case BT_RPAR: case BT_COMMA: + case BT_VERBAR: case BT_LSQB: case BT_PERCNT: + case BT_S: case BT_CR: case BT_LF: + *nextTokPtr = ptr; + return tok; +#ifdef XML_NS + case BT_COLON: + ptr += MINBPC(enc); + switch (tok) { + case XML_TOK_NAME: + if (ptr == end) + return XML_TOK_PARTIAL; + tok = XML_TOK_PREFIXED_NAME; + switch (BYTE_TYPE(enc, ptr)) { + CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) + default: + tok = XML_TOK_NMTOKEN; + break; + } + break; + case XML_TOK_PREFIXED_NAME: + tok = XML_TOK_NMTOKEN; + break; + } + break; +#endif + case BT_PLUS: + if (tok == XML_TOK_NMTOKEN) { + *nextTokPtr = ptr; + return XML_TOK_INVALID; + } + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_NAME_PLUS; + case BT_AST: + if (tok == XML_TOK_NMTOKEN) { + *nextTokPtr = ptr; + return XML_TOK_INVALID; + } + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_NAME_ASTERISK; + case BT_QUEST: + if (tok == XML_TOK_NMTOKEN) { + *nextTokPtr = ptr; + return XML_TOK_INVALID; + } + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_NAME_QUESTION; + default: + *nextTokPtr = ptr; + return XML_TOK_INVALID; + } + } + return -tok; +} + +static +int PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr, const char *end, + const char **nextTokPtr) +{ + const char *start; + if (ptr == end) + return XML_TOK_NONE; + start = ptr; + while (ptr != end) { + switch (BYTE_TYPE(enc, ptr)) { +#define LEAD_CASE(n) \ + case BT_LEAD ## n: ptr += n; break; + LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) +#undef LEAD_CASE + case BT_AMP: + if (ptr == start) + return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); + *nextTokPtr = ptr; + return XML_TOK_DATA_CHARS; + case BT_LT: + /* this is for inside entity references */ + *nextTokPtr = ptr; + return XML_TOK_INVALID; + case BT_LF: + if (ptr == start) { + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_DATA_NEWLINE; + } + *nextTokPtr = ptr; + return XML_TOK_DATA_CHARS; + case BT_CR: + if (ptr == start) { + ptr += MINBPC(enc); + if (ptr == end) + return XML_TOK_TRAILING_CR; + if (BYTE_TYPE(enc, ptr) == BT_LF) + ptr += MINBPC(enc); + *nextTokPtr = ptr; + return XML_TOK_DATA_NEWLINE; + } + *nextTokPtr = ptr; + return XML_TOK_DATA_CHARS; + case BT_S: + if (ptr == start) { + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_ATTRIBUTE_VALUE_S; + } + *nextTokPtr = ptr; + return XML_TOK_DATA_CHARS; + default: + ptr += MINBPC(enc); + break; + } + } + *nextTokPtr = ptr; + return XML_TOK_DATA_CHARS; +} + +static +int PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr, const char *end, + const char **nextTokPtr) +{ + const char *start; + if (ptr == end) + return XML_TOK_NONE; + start = ptr; + while (ptr != end) { + switch (BYTE_TYPE(enc, ptr)) { +#define LEAD_CASE(n) \ + case BT_LEAD ## n: ptr += n; break; + LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) +#undef LEAD_CASE + case BT_AMP: + if (ptr == start) + return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); + *nextTokPtr = ptr; + return XML_TOK_DATA_CHARS; + case BT_PERCNT: + if (ptr == start) { + int tok = PREFIX(scanPercent)(enc, ptr + MINBPC(enc), + end, nextTokPtr); + return (tok == XML_TOK_PERCENT) ? XML_TOK_INVALID : tok; + } + *nextTokPtr = ptr; + return XML_TOK_DATA_CHARS; + case BT_LF: + if (ptr == start) { + *nextTokPtr = ptr + MINBPC(enc); + return XML_TOK_DATA_NEWLINE; + } + *nextTokPtr = ptr; + return XML_TOK_DATA_CHARS; + case BT_CR: + if (ptr == start) { + ptr += MINBPC(enc); + if (ptr == end) + return XML_TOK_TRAILING_CR; + if (BYTE_TYPE(enc, ptr) == BT_LF) + ptr += MINBPC(enc); + *nextTokPtr = ptr; + return XML_TOK_DATA_NEWLINE; + } + *nextTokPtr = ptr; + return XML_TOK_DATA_CHARS; + default: + ptr += MINBPC(enc); + break; + } + } + *nextTokPtr = ptr; + return XML_TOK_DATA_CHARS; +} + +#ifdef XML_DTD + +static +int PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr, const char *end, + const char **nextTokPtr) +{ + int level = 0; + if (MINBPC(enc) > 1) { + size_t n = end - ptr; + if (n & (MINBPC(enc) - 1)) { + n &= ~(MINBPC(enc) - 1); + end = ptr + n; + } + } + while (ptr != end) { + switch (BYTE_TYPE(enc, ptr)) { + INVALID_CASES(ptr, nextTokPtr) + case BT_LT: + if ((ptr += MINBPC(enc)) == end) + return XML_TOK_PARTIAL; + if (CHAR_MATCHES(enc, ptr, ASCII_EXCL)) { + if ((ptr += MINBPC(enc)) == end) + return XML_TOK_PARTIAL; + if (CHAR_MATCHES(enc, ptr, ASCII_LSQB)) { + ++level; + ptr += MINBPC(enc); + } + } + break; + case BT_RSQB: + if ((ptr += MINBPC(enc)) == end) + return XML_TOK_PARTIAL; + if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) { + if ((ptr += MINBPC(enc)) == end) + return XML_TOK_PARTIAL; + if (CHAR_MATCHES(enc, ptr, ASCII_GT)) { + ptr += MINBPC(enc); + if (level == 0) { + *nextTokPtr = ptr; + return XML_TOK_IGNORE_SECT; + } + --level; + } + } + break; + default: + ptr += MINBPC(enc); + break; + } + } + return XML_TOK_PARTIAL; +} + +#endif /* XML_DTD */ + +static +int PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end, + const char **badPtr) +{ + ptr += MINBPC(enc); + end -= MINBPC(enc); + for (; ptr != end; ptr += MINBPC(enc)) { + switch (BYTE_TYPE(enc, ptr)) { + case BT_DIGIT: + case BT_HEX: + case BT_MINUS: + case BT_APOS: + case BT_LPAR: + case BT_RPAR: + case BT_PLUS: + case BT_COMMA: + case BT_SOL: + case BT_EQUALS: + case BT_QUEST: + case BT_CR: + case BT_LF: + case BT_SEMI: + case BT_EXCL: + case BT_AST: + case BT_PERCNT: + case BT_NUM: +#ifdef XML_NS + case BT_COLON: +#endif + break; + case BT_S: + if (CHAR_MATCHES(enc, ptr, ASCII_TAB)) { + *badPtr = ptr; + return 0; + } + break; + case BT_NAME: + case BT_NMSTRT: + if (!(BYTE_TO_ASCII(enc, ptr) & ~0x7f)) + break; + default: + switch (BYTE_TO_ASCII(enc, ptr)) { + case 0x24: /* $ */ + case 0x40: /* @ */ + break; + default: + *badPtr = ptr; + return 0; + } + break; + } + } + return 1; +} + +/* This must only be called for a well-formed start-tag or empty element tag. +Returns the number of attributes. Pointers to the first attsMax attributes +are stored in atts. */ + +static +int PREFIX(getAtts)(const ENCODING *enc, const char *ptr, + int attsMax, ATTRIBUTE *atts) +{ + enum { other, inName, inValue } state = inName; + int nAtts = 0; + int open = 0; /* defined when state == inValue; + initialization just to shut up compilers */ + + for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) { + switch (BYTE_TYPE(enc, ptr)) { +#define START_NAME \ + if (state == other) { \ + if (nAtts < attsMax) { \ + atts[nAtts].name = ptr; \ + atts[nAtts].normalized = 1; \ + } \ + state = inName; \ + } +#define LEAD_CASE(n) \ + case BT_LEAD ## n: START_NAME ptr += (n - MINBPC(enc)); break; + LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) +#undef LEAD_CASE + case BT_NONASCII: + case BT_NMSTRT: + case BT_HEX: + START_NAME + break; +#undef START_NAME + case BT_QUOT: + if (state != inValue) { + if (nAtts < attsMax) + atts[nAtts].valuePtr = ptr + MINBPC(enc); + state = inValue; + open = BT_QUOT; + } + else if (open == BT_QUOT) { + state = other; + if (nAtts < attsMax) + atts[nAtts].valueEnd = ptr; + nAtts++; + } + break; + case BT_APOS: + if (state != inValue) { + if (nAtts < attsMax) + atts[nAtts].valuePtr = ptr + MINBPC(enc); + state = inValue; + open = BT_APOS; + } + else if (open == BT_APOS) { + state = other; + if (nAtts < attsMax) + atts[nAtts].valueEnd = ptr; + nAtts++; + } + break; + case BT_AMP: + if (nAtts < attsMax) + atts[nAtts].normalized = 0; + break; + case BT_S: + if (state == inName) + state = other; + else if (state == inValue + && nAtts < attsMax + && atts[nAtts].normalized + && (ptr == atts[nAtts].valuePtr + || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE + || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE + || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open)) + atts[nAtts].normalized = 0; + break; + case BT_CR: case BT_LF: + /* This case ensures that the first attribute name is counted + Apart from that we could just change state on the quote. */ + if (state == inName) + state = other; + else if (state == inValue && nAtts < attsMax) + atts[nAtts].normalized = 0; + break; + case BT_GT: + case BT_SOL: + if (state != inValue) + return nAtts; + break; + default: + break; + } + } + /* not reached */ +} + +static +int PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr) +{ + int result = 0; + /* skip &# */ + ptr += 2*MINBPC(enc); + if (CHAR_MATCHES(enc, ptr, ASCII_x)) { + for (ptr += MINBPC(enc); !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) { + int c = BYTE_TO_ASCII(enc, ptr); + switch (c) { + case ASCII_0: case ASCII_1: case ASCII_2: case ASCII_3: case ASCII_4: + case ASCII_5: case ASCII_6: case ASCII_7: case ASCII_8: case ASCII_9: + result <<= 4; + result |= (c - ASCII_0); + break; + case ASCII_A: case ASCII_B: case ASCII_C: case ASCII_D: case ASCII_E: case ASCII_F: + result <<= 4; + result += 10 + (c - ASCII_A); + break; + case ASCII_a: case ASCII_b: case ASCII_c: case ASCII_d: case ASCII_e: case ASCII_f: + result <<= 4; + result += 10 + (c - ASCII_a); + break; + } + if (result >= 0x110000) + return -1; + } + } + else { + for (; !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) { + int c = BYTE_TO_ASCII(enc, ptr); + result *= 10; + result += (c - ASCII_0); + if (result >= 0x110000) + return -1; + } + } + return checkCharRefNumber(result); +} + +static +int PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr, const char *end) +{ + switch ((end - ptr)/MINBPC(enc)) { + case 2: + if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) { + switch (BYTE_TO_ASCII(enc, ptr)) { + case ASCII_l: + return ASCII_LT; + case ASCII_g: + return ASCII_GT; + } + } + break; + case 3: + if (CHAR_MATCHES(enc, ptr, ASCII_a)) { + ptr += MINBPC(enc); + if (CHAR_MATCHES(enc, ptr, ASCII_m)) { + ptr += MINBPC(enc); + if (CHAR_MATCHES(enc, ptr, ASCII_p)) + return ASCII_AMP; + } + } + break; + case 4: + switch (BYTE_TO_ASCII(enc, ptr)) { + case ASCII_q: + ptr += MINBPC(enc); + if (CHAR_MATCHES(enc, ptr, ASCII_u)) { + ptr += MINBPC(enc); + if (CHAR_MATCHES(enc, ptr, ASCII_o)) { + ptr += MINBPC(enc); + if (CHAR_MATCHES(enc, ptr, ASCII_t)) + return ASCII_QUOT; + } + } + break; + case ASCII_a: + ptr += MINBPC(enc); + if (CHAR_MATCHES(enc, ptr, ASCII_p)) { + ptr += MINBPC(enc); + if (CHAR_MATCHES(enc, ptr, ASCII_o)) { + ptr += MINBPC(enc); + if (CHAR_MATCHES(enc, ptr, ASCII_s)) + return ASCII_APOS; + } + } + break; + } + } + return 0; +} + +static +int PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2) +{ + for (;;) { + switch (BYTE_TYPE(enc, ptr1)) { +#define LEAD_CASE(n) \ + case BT_LEAD ## n: \ + if (*ptr1++ != *ptr2++) \ + return 0; + LEAD_CASE(4) LEAD_CASE(3) LEAD_CASE(2) +#undef LEAD_CASE + /* fall through */ + if (*ptr1++ != *ptr2++) + return 0; + break; + case BT_NONASCII: + case BT_NMSTRT: +#ifdef XML_NS + case BT_COLON: +#endif + case BT_HEX: + case BT_DIGIT: + case BT_NAME: + case BT_MINUS: + if (*ptr2++ != *ptr1++) + return 0; + if (MINBPC(enc) > 1) { + if (*ptr2++ != *ptr1++) + return 0; + if (MINBPC(enc) > 2) { + if (*ptr2++ != *ptr1++) + return 0; + if (MINBPC(enc) > 3) { + if (*ptr2++ != *ptr1++) + return 0; + } + } + } + break; + default: + if (MINBPC(enc) == 1 && *ptr1 == *ptr2) + return 1; + switch (BYTE_TYPE(enc, ptr2)) { + case BT_LEAD2: + case BT_LEAD3: + case BT_LEAD4: + case BT_NONASCII: + case BT_NMSTRT: +#ifdef XML_NS + case BT_COLON: +#endif + case BT_HEX: + case BT_DIGIT: + case BT_NAME: + case BT_MINUS: + return 0; + default: + return 1; + } + } + } + /* not reached */ +} + +static +int PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1, + const char *end1, const char *ptr2) +{ + for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) { + if (ptr1 == end1) + return 0; + if (!CHAR_MATCHES(enc, ptr1, *ptr2)) + return 0; + } + return ptr1 == end1; +} + +static +int PREFIX(nameLength)(const ENCODING *enc, const char *ptr) +{ + const char *start = ptr; + for (;;) { + switch (BYTE_TYPE(enc, ptr)) { +#define LEAD_CASE(n) \ + case BT_LEAD ## n: ptr += n; break; + LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) +#undef LEAD_CASE + case BT_NONASCII: + case BT_NMSTRT: +#ifdef XML_NS + case BT_COLON: +#endif + case BT_HEX: + case BT_DIGIT: + case BT_NAME: + case BT_MINUS: + ptr += MINBPC(enc); + break; + default: + return ptr - start; + } + } +} + +static +const char *PREFIX(skipS)(const ENCODING *enc, const char *ptr) +{ + for (;;) { + switch (BYTE_TYPE(enc, ptr)) { + case BT_LF: + case BT_CR: + case BT_S: + ptr += MINBPC(enc); + break; + default: + return ptr; + } + } +} + +static +void PREFIX(updatePosition)(const ENCODING *enc, + const char *ptr, + const char *end, + POSITION *pos) +{ + while (ptr != end) { + switch (BYTE_TYPE(enc, ptr)) { +#define LEAD_CASE(n) \ + case BT_LEAD ## n: \ + ptr += n; \ + break; + LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) +#undef LEAD_CASE + case BT_LF: + pos->columnNumber = (unsigned)-1; + pos->lineNumber++; + ptr += MINBPC(enc); + break; + case BT_CR: + pos->lineNumber++; + ptr += MINBPC(enc); + if (ptr != end && BYTE_TYPE(enc, ptr) == BT_LF) + ptr += MINBPC(enc); + pos->columnNumber = (unsigned)-1; + break; + default: + ptr += MINBPC(enc); + break; + } + pos->columnNumber++; + } +} + +#undef DO_LEAD_CASE +#undef MULTIBYTE_CASES +#undef INVALID_CASES +#undef CHECK_NAME_CASE +#undef CHECK_NAME_CASES +#undef CHECK_NMSTRT_CASE +#undef CHECK_NMSTRT_CASES diff --git a/Build/source/extra/expat/lib/xmltok_impl.h b/Build/source/extra/expat/lib/xmltok_impl.h new file mode 100644 index 00000000000..da0ea60a657 --- /dev/null +++ b/Build/source/extra/expat/lib/xmltok_impl.h @@ -0,0 +1,46 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +enum { + BT_NONXML, + BT_MALFORM, + BT_LT, + BT_AMP, + BT_RSQB, + BT_LEAD2, + BT_LEAD3, + BT_LEAD4, + BT_TRAIL, + BT_CR, + BT_LF, + BT_GT, + BT_QUOT, + BT_APOS, + BT_EQUALS, + BT_QUEST, + BT_EXCL, + BT_SOL, + BT_SEMI, + BT_NUM, + BT_LSQB, + BT_S, + BT_NMSTRT, + BT_COLON, + BT_HEX, + BT_DIGIT, + BT_NAME, + BT_MINUS, + BT_OTHER, /* known not to be a name or name start character */ + BT_NONASCII, /* might be a name or name start character */ + BT_PERCNT, + BT_LPAR, + BT_RPAR, + BT_AST, + BT_PLUS, + BT_COMMA, + BT_VERBAR +}; + +#include diff --git a/Build/source/extra/expat/lib/xmltok_ns.c b/Build/source/extra/expat/lib/xmltok_ns.c new file mode 100644 index 00000000000..21859738ac2 --- /dev/null +++ b/Build/source/extra/expat/lib/xmltok_ns.c @@ -0,0 +1,98 @@ +const ENCODING *NS(XmlGetUtf8InternalEncoding)(void) +{ + return &ns(internal_utf8_encoding).enc; +} + +const ENCODING *NS(XmlGetUtf16InternalEncoding)(void) +{ +#if XML_BYTE_ORDER == 12 + return &ns(internal_little2_encoding).enc; +#elif XML_BYTE_ORDER == 21 + return &ns(internal_big2_encoding).enc; +#else + const short n = 1; + return *(const char *)&n ? &ns(internal_little2_encoding).enc : &ns(internal_big2_encoding).enc; +#endif +} + +static +const ENCODING *NS(encodings)[] = { + &ns(latin1_encoding).enc, + &ns(ascii_encoding).enc, + &ns(utf8_encoding).enc, + &ns(big2_encoding).enc, + &ns(big2_encoding).enc, + &ns(little2_encoding).enc, + &ns(utf8_encoding).enc /* NO_ENC */ +}; + +static +int NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end, + const char **nextTokPtr) +{ + return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE, ptr, end, nextTokPtr); +} + +static +int NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end, + const char **nextTokPtr) +{ + return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_CONTENT_STATE, ptr, end, nextTokPtr); +} + +int NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, const char *name) +{ + int i = getEncodingIndex(name); + if (i == UNKNOWN_ENC) + return 0; + SET_INIT_ENC_INDEX(p, i); + p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog); + p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent); + p->initEnc.updatePosition = initUpdatePosition; + p->encPtr = encPtr; + *encPtr = &(p->initEnc); + return 1; +} + +static +const ENCODING *NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) +{ +#define ENCODING_MAX 128 + char buf[ENCODING_MAX]; + char *p = buf; + int i; + XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1); + if (ptr != end) + return 0; + *p = 0; + if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2) + return enc; + i = getEncodingIndex(buf); + if (i == UNKNOWN_ENC) + return 0; + return NS(encodings)[i]; +} + +int NS(XmlParseXmlDecl)(int isGeneralTextEntity, + const ENCODING *enc, + const char *ptr, + const char *end, + const char **badPtr, + const char **versionPtr, + const char **versionEndPtr, + const char **encodingName, + const ENCODING **encoding, + int *standalone) +{ + return doParseXmlDecl(NS(findEncoding), + isGeneralTextEntity, + enc, + ptr, + end, + badPtr, + versionPtr, + versionEndPtr, + encodingName, + encoding, + standalone); +} diff --git a/Build/source/extra/expat/xmlwf/Makefile.in b/Build/source/extra/expat/xmlwf/Makefile.in new file mode 100644 index 00000000000..d7c4cb07fac --- /dev/null +++ b/Build/source/extra/expat/xmlwf/Makefile.in @@ -0,0 +1,15 @@ +LIBDIR= ../lib/.libs +INCDIR= ../lib + +LDFLAGS= @LDFLAGS@ +CFLAGS= @CFLAGS@ -I$(INCDIR) + +FILEMAP_OBJ= @FILEMAP_OBJ@ +OBJS= xmlwf.o xmlfile.o codepage.o $(FILEMAP_OBJ) +LIBS= -L$(LIBDIR) -lexpat + +xmlwf: $(OBJS) + $(CC) -o xmlwf $(LDFLAGS) $(OBJS) $(LIBS) + +clean: + rm -f xmlwf core *.o \ No newline at end of file diff --git a/Build/source/extra/expat/xmlwf/codepage.c b/Build/source/extra/expat/xmlwf/codepage.c new file mode 100644 index 00000000000..4ab1344e70e --- /dev/null +++ b/Build/source/extra/expat/xmlwf/codepage.c @@ -0,0 +1,65 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +#include "codepage.h" + +#ifdef WIN32 +#define STRICT 1 +#define WIN32_LEAN_AND_MEAN 1 + +#include + +int codepageMap(int cp, int *map) +{ + int i; + CPINFO info; + if (!GetCPInfo(cp, &info) || info.MaxCharSize > 2) + return 0; + for (i = 0; i < 256; i++) + map[i] = -1; + if (info.MaxCharSize > 1) { + for (i = 0; i < MAX_LEADBYTES; i++) { + int j, lim; + if (info.LeadByte[i] == 0 && info.LeadByte[i + 1] == 0) + break; + lim = info.LeadByte[i + 1]; + for (j = info.LeadByte[i]; j < lim; j++) + map[j] = -2; + } + } + for (i = 0; i < 256; i++) { + if (map[i] == -1) { + char c = i; + unsigned short n; + if (MultiByteToWideChar(cp, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, + &c, 1, &n, 1) == 1) + map[i] = n; + } + } + return 1; +} + +int codepageConvert(int cp, const char *p) +{ + unsigned short c; + if (MultiByteToWideChar(cp, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, + p, 2, &c, 1) == 1) + return c; + return -1; +} + +#else /* not WIN32 */ + +int codepageMap(int cp, int *map) +{ + return 0; +} + +int codepageConvert(int cp, const char *p) +{ + return -1; +} + +#endif /* not WIN32 */ diff --git a/Build/source/extra/expat/xmlwf/codepage.h b/Build/source/extra/expat/xmlwf/codepage.h new file mode 100644 index 00000000000..b36a5502df7 --- /dev/null +++ b/Build/source/extra/expat/xmlwf/codepage.h @@ -0,0 +1,7 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +int codepageMap(int cp, int *map); +int codepageConvert(int cp, const char *p); diff --git a/Build/source/extra/expat/xmlwf/ct.c b/Build/source/extra/expat/xmlwf/ct.c new file mode 100644 index 00000000000..098699d0b0f --- /dev/null +++ b/Build/source/extra/expat/xmlwf/ct.c @@ -0,0 +1,145 @@ +#define CHARSET_MAX 41 + +static +const char *getTok(const char **pp) +{ + enum { inAtom, inString, init, inComment }; + int state = init; + const char *tokStart = 0; + for (;;) { + switch (**pp) { + case '\0': + return 0; + case ' ': + case '\r': + case '\t': + case '\n': + if (state == inAtom) + return tokStart; + break; + case '(': + if (state == inAtom) + return tokStart; + if (state != inString) + state++; + break; + case ')': + if (state > init) + --state; + else if (state != inString) + return 0; + break; + case ';': + case '/': + case '=': + if (state == inAtom) + return tokStart; + if (state == init) + return (*pp)++; + break; + case '\\': + ++*pp; + if (**pp == '\0') + return 0; + break; + case '"': + switch (state) { + case inString: + ++*pp; + return tokStart; + case inAtom: + return tokStart; + case init: + tokStart = *pp; + state = inString; + break; + } + break; + default: + if (state == init) { + tokStart = *pp; + state = inAtom; + } + break; + } + ++*pp; + } + /* not reached */ +} + +/* key must be lowercase ASCII */ + +static +int matchkey(const char *start, const char *end, const char *key) +{ + if (!start) + return 0; + for (; start != end; start++, key++) + if (*start != *key && *start != 'A' + (*key - 'a')) + return 0; + return *key == '\0'; +} + +void getXMLCharset(const char *buf, char *charset) +{ + const char *next, *p; + + charset[0] = '\0'; + next = buf; + p = getTok(&next); + if (matchkey(p, next, "text")) + strcpy(charset, "us-ascii"); + else if (!matchkey(p, next, "application")) + return; + p = getTok(&next); + if (!p || *p != '/') + return; + p = getTok(&next); + if (matchkey(p, next, "xml")) + isXml = 1; + p = getTok(&next); + while (p) { + if (*p == ';') { + p = getTok(&next); + if (matchkey(p, next, "charset")) { + p = getTok(&next); + if (p && *p == '=') { + p = getTok(&next); + if (p) { + char *s = charset; + if (*p == '"') { + while (++p != next - 1) { + if (*p == '\\') + ++p; + if (s == charset + CHARSET_MAX - 1) { + charset[0] = '\0'; + break; + } + *s++ = *p; + } + *s++ = '\0'; + } + else { + if (next - p > CHARSET_MAX - 1) + break; + while (p != next) + *s++ = *p++; + *s = 0; + break; + } + } + } + } + } + else + p = getTok(&next); + } +} + +int main(int argc, char **argv) +{ + char buf[CHARSET_MAX]; + getXMLCharset(argv[1], buf); + printf("charset = \"%s\"\n", buf); + return 0; +} diff --git a/Build/source/extra/expat/xmlwf/filemap.h b/Build/source/extra/expat/xmlwf/filemap.h new file mode 100644 index 00000000000..ecf01751daf --- /dev/null +++ b/Build/source/extra/expat/xmlwf/filemap.h @@ -0,0 +1,17 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + + +#include + +#ifdef XML_UNICODE +int filemap(const wchar_t *name, + void (*processor)(const void *, size_t, const wchar_t *, void *arg), + void *arg); +#else +int filemap(const char *name, + void (*processor)(const void *, size_t, const char *, void *arg), + void *arg); +#endif diff --git a/Build/source/extra/expat/xmlwf/readfilemap.c b/Build/source/extra/expat/xmlwf/readfilemap.c new file mode 100644 index 00000000000..7829f612b6c --- /dev/null +++ b/Build/source/extra/expat/xmlwf/readfilemap.c @@ -0,0 +1,74 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +#include +#include +#include +#include +#include + +#ifndef S_ISREG +#ifndef S_IFREG +#define S_IFREG _S_IFREG +#endif +#ifndef S_IFMT +#define S_IFMT _S_IFMT +#endif +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#endif /* not S_ISREG */ + +#ifndef O_BINARY +#ifdef _O_BINARY +#define O_BINARY _O_BINARY +#else +#define O_BINARY 0 +#endif +#endif + +int filemap(const char *name, + void (*processor)(const void *, size_t, const char *, void *arg), + void *arg) +{ + size_t nbytes; + int fd; + int n; + struct stat sb; + void *p; + + fd = open(name, O_RDONLY|O_BINARY); + if (fd < 0) { + perror(name); + return 0; + } + if (fstat(fd, &sb) < 0) { + perror(name); + return 0; + } + if (!S_ISREG(sb.st_mode)) { + fprintf(stderr, "%s: not a regular file\n", name); + return 0; + } + nbytes = sb.st_size; + p = malloc(nbytes); + if (!p) { + fprintf(stderr, "%s: out of memory\n", name); + return 0; + } + n = read(fd, p, nbytes); + if (n < 0) { + perror(name); + close(fd); + return 0; + } + if (n != nbytes) { + fprintf(stderr, "%s: read unexpected number of bytes\n", name); + close(fd); + return 0; + } + processor(p, nbytes, name, arg); + free(p); + close(fd); + return 1; +} diff --git a/Build/source/extra/expat/xmlwf/unixfilemap.c b/Build/source/extra/expat/xmlwf/unixfilemap.c new file mode 100644 index 00000000000..4016dd05397 --- /dev/null +++ b/Build/source/extra/expat/xmlwf/unixfilemap.c @@ -0,0 +1,57 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +#include +#include +#include +#include +#include +#include +#include + +#ifndef MAP_FILE +#define MAP_FILE 0 +#endif + +#include "filemap.h" + +int filemap(const char *name, + void (*processor)(const void *, size_t, const char *, void *arg), + void *arg) +{ + int fd; + size_t nbytes; + struct stat sb; + void *p; + + fd = open(name, O_RDONLY); + if (fd < 0) { + perror(name); + return 0; + } + if (fstat(fd, &sb) < 0) { + perror(name); + close(fd); + return 0; + } + if (!S_ISREG(sb.st_mode)) { + close(fd); + fprintf(stderr, "%s: not a regular file\n", name); + return 0; + } + + nbytes = sb.st_size; + p = (void *)mmap((caddr_t)0, (size_t)nbytes, PROT_READ, + MAP_FILE|MAP_PRIVATE, fd, (off_t)0); + if (p == (void *)-1) { + perror(name); + close(fd); + return 0; + } + processor(p, nbytes, name, arg); + munmap((caddr_t)p, nbytes); + close(fd); + return 1; +} diff --git a/Build/source/extra/expat/xmlwf/wfcheck.c b/Build/source/extra/expat/xmlwf/wfcheck.c new file mode 100644 index 00000000000..c18abd290bd --- /dev/null +++ b/Build/source/extra/expat/xmlwf/wfcheck.c @@ -0,0 +1,953 @@ +#include +#include + +#include "wfcheck.h" +#include "hashtable.h" + +#include "xmltok.h" +#include "xmlrole.h" + +typedef struct { + const char *name; + const char *textPtr; + size_t textLen; + const char *docTextPtr; + const char *systemId; + const char *publicId; + const char *notation; + char open; + char wfInContent; + char wfInAttribute; + char magic; +} ENTITY; + +#define INIT_BLOCK_SIZE 1024 + +typedef struct block { + struct block *next; + char s[1]; +} BLOCK; + +typedef struct { + BLOCK *blocks; + const char *end; + char *ptr; + char *start; +} STRING_POOL; + +typedef struct { + HASH_TABLE generalEntities; + HASH_TABLE paramEntities; + STRING_POOL pool; + int containsRef; + int standalone; + char *groupConnector; + size_t groupSize; +} DTD; + +typedef struct { + DTD dtd; + size_t stackSize; + const char **startName; + int attsSize; + ATTRIBUTE *atts; +} CONTEXT; + +static void poolInit(STRING_POOL *); +static void poolDestroy(STRING_POOL *); +static const char *poolAppend(STRING_POOL *pool, const ENCODING *enc, + const char *ptr, const char *end); +static const char *poolStoreString(STRING_POOL *pool, const ENCODING *enc, + const char *ptr, const char *end); +static int poolGrow(STRING_POOL *); +static int dtdInit(DTD *); +static void dtdDestroy(DTD *); +static int contextInit(CONTEXT *); +static void contextDestroy(CONTEXT *); + +#define poolStart(pool) ((pool)->start) +#define poolDiscard(pool) ((pool)->ptr = (pool)->start) +#define poolFinish(pool) ((pool)->start = (pool)->ptr) + +static enum WfCheckResult +checkProlog(DTD *, const char *s, const char *end, const char **, const ENCODING **enc); +static enum WfCheckResult +checkContent(size_t level, CONTEXT *context, const ENCODING *enc, + const char *s, const char *end, const char **badPtr); +static enum WfCheckResult +checkGeneralTextEntity(CONTEXT *context, + const char *s, const char *end, + const char **nextPtr, + const ENCODING **enc); +static enum WfCheckResult +checkAttributeValue(DTD *, const ENCODING *, const char *, const char *, const char **); +static enum WfCheckResult +checkAttributeUniqueness(CONTEXT *context, const ENCODING *enc, int nAtts, + const char **badPtr); +static enum WfCheckResult +checkParsedEntities(CONTEXT *context, const char **badPtr); + +static +enum WfCheckResult storeEntity(DTD *dtd, + const ENCODING *enc, + int isParam, + const char *entityNamePtr, + const char *entityNameEnd, + const char *entityTextPtr, + const char *entityTextEnd, + const char **badPtr); + + +enum WfCheckResult +wfCheck(enum EntityType entityType, const char *s, size_t n, + const char **badPtr, unsigned long *badLine, unsigned long *badCol) +{ + CONTEXT context; + const ENCODING *enc; + const char *start = s; + const char *end = s + n; + const char *next = 0; + enum WfCheckResult result; + + if (!contextInit(&context)) { + contextDestroy(&context); + return noMemory; + } + if (entityType == documentEntity) { + result = checkProlog(&context.dtd, s, end, &next, &enc); + s = next; + if (!result) { + result = checkParsedEntities(&context, &next); + s = next; + if (!result) { + result = checkContent(0, &context, enc, s, end, &next); + s = next; + } + } + } + else { + result = checkGeneralTextEntity(&context, s, end, &next, &enc); + s = next; + } + if (result && s) { + POSITION pos; + memset(&pos, 0, sizeof(POSITION)); + XmlUpdatePosition(enc, start, s, &pos); + *badPtr = s; + *badLine = pos.lineNumber; + *badCol = pos.columnNumber; + } + contextDestroy(&context); + return result; +} + +static +int contextInit(CONTEXT *p) +{ + p->stackSize = 1024; + p->startName = malloc(p->stackSize * sizeof(char *)); + p->attsSize = 1024; + p->atts = malloc(p->attsSize * sizeof(ATTRIBUTE)); + return dtdInit(&(p->dtd)) && p->atts && p->startName; +} + +static +void contextDestroy(CONTEXT *p) +{ + dtdDestroy(&(p->dtd)); + free((void *)p->startName); + free((void *)p->atts); +} + +static enum WfCheckResult +checkContent(size_t level, CONTEXT *context, const ENCODING *enc, + const char *s, const char *end, const char **badPtr) +{ + size_t startLevel = level; + const char *next; + int tok = XmlContentTok(enc, s, end, &next); + for (;;) { + switch (tok) { + case XML_TOK_TRAILING_CR: + case XML_TOK_NONE: + if (startLevel > 0) { + if (level != startLevel) { + *badPtr = s; + return asyncEntity; + } + return wellFormed; + } + *badPtr = s; + return noElements; + case XML_TOK_INVALID: + *badPtr = next; + return invalidToken; + case XML_TOK_PARTIAL: + *badPtr = s; + return unclosedToken; + case XML_TOK_PARTIAL_CHAR: + *badPtr = s; + return partialChar; + case XML_TOK_EMPTY_ELEMENT_NO_ATTS: + break; + case XML_TOK_ENTITY_REF: + { + const char *name = poolStoreString(&context->dtd.pool, enc, + s + enc->minBytesPerChar, + next - enc->minBytesPerChar); + ENTITY *entity = (ENTITY *)lookup(&context->dtd.generalEntities, name, 0); + poolDiscard(&context->dtd.pool); + if (!entity) { + if (!context->dtd.containsRef || context->dtd.standalone) { + *badPtr = s; + return undefinedEntity; + } + break; + } + if (entity->wfInContent) + break; + if (entity->open) { + *badPtr = s; + return recursiveEntityRef; + } + if (entity->notation) { + *badPtr = s; + return binaryEntityRef; + } + if (entity) { + if (entity->textPtr) { + enum WfCheckResult result; + const ENCODING *internalEnc = XmlGetInternalEncoding(XML_UTF8_ENCODING); + entity->open = 1; + result = checkContent(level, context, internalEnc, + entity->textPtr, entity->textPtr + entity->textLen, + badPtr); + entity->open = 0; + if (result && *badPtr) { + *badPtr = s; + return result; + } + entity->wfInContent = 1; + } + } + break; + } + case XML_TOK_START_TAG_NO_ATTS: + if (level == context->stackSize) { + context->startName + = realloc((void *)context->startName, (context->stackSize *= 2) * sizeof(char *)); + if (!context->startName) + return noMemory; + } + context->startName[level++] = s + enc->minBytesPerChar; + break; + case XML_TOK_START_TAG_WITH_ATTS: + if (level == context->stackSize) { + context->startName = realloc((void *)context->startName, (context->stackSize *= 2) * sizeof(char *)); + if (!context->startName) + return noMemory; + } + context->startName[level++] = s + enc->minBytesPerChar; + /* fall through */ + case XML_TOK_EMPTY_ELEMENT_WITH_ATTS: + { + int i; + int n = XmlGetAttributes(enc, s, context->attsSize, context->atts); + if (n > context->attsSize) { + context->attsSize = 2*n; + context->atts = realloc((void *)context->atts, context->attsSize * sizeof(ATTRIBUTE)); + if (!context->atts) + return noMemory; + XmlGetAttributes(enc, s, n, context->atts); + } + for (i = 0; i < n; i++) { + if (!context->atts[i].normalized) { + enum WfCheckResult result + = checkAttributeValue(&context->dtd, enc, + context->atts[i].valuePtr, + context->atts[i].valueEnd, + badPtr); + if (result) + return result; + } + } + if (i > 1) { + enum WfCheckResult result = checkAttributeUniqueness(context, enc, n, badPtr); + if (result) + return result; + } + } + break; + case XML_TOK_END_TAG: + if (level == startLevel) { + *badPtr = s; + return asyncEntity; + } + --level; + if (!XmlSameName(enc, context->startName[level], s + enc->minBytesPerChar * 2)) { + *badPtr = s; + return tagMismatch; + } + break; + case XML_TOK_CHAR_REF: + if (XmlCharRefNumber(enc, s) < 0) { + *badPtr = s; + return badCharRef; + } + break; + case XML_TOK_XML_DECL: + *badPtr = s; + return misplacedXmlPi; + } + s = next; + if (level == 0) { + do { + tok = XmlPrologTok(enc, s, end, &next); + switch (tok) { + case XML_TOK_TRAILING_CR: + case XML_TOK_NONE: + return wellFormed; + case XML_TOK_PROLOG_S: + case XML_TOK_COMMENT: + case XML_TOK_PI: + s = next; + break; + default: + if (tok > 0) { + *badPtr = s; + return junkAfterDocElement; + } + break; + } + } while (tok > 0); + } + else + tok = XmlContentTok(enc, s, end, &next); + } + /* not reached */ +} + +static +int attcmp(const void *p1, const void *p2) +{ + const ATTRIBUTE *a1 = p1; + const ATTRIBUTE *a2 = p2; + size_t n1 = a1->valuePtr - a1->name; + size_t n2 = a2->valuePtr - a2->name; + + if (n1 == n2) { + int n = memcmp(a1->name, a2->name, n1); + if (n) + return n; + /* Sort identical attribute names by position, so that we always + report the first duplicate attribute. */ + if (a1->name < a2->name) + return -1; + else if (a1->name > a2->name) + return 1; + else + return 0; + } + else if (n1 < n2) + return -1; + else + return 1; +} + +/* Note that this trashes the attribute values. */ + +static enum WfCheckResult +checkAttributeUniqueness(CONTEXT *context, const ENCODING *enc, int nAtts, + const char **badPtr) +{ +#define QSORT_MIN_ATTS 10 + if (nAtts < QSORT_MIN_ATTS) { + int i; + for (i = 1; i < nAtts; i++) { + int j; + for (j = 0; j < i; j++) { + if (XmlSameName(enc, context->atts[i].name, context->atts[j].name)) { + *badPtr = context->atts[i].name; + return duplicateAttribute; + } + } + } + } + else { + int i; + const char *dup = 0; + /* Store the end of the name in valuePtr */ + for (i = 0; i < nAtts; i++) { + ATTRIBUTE *a = context->atts + i; + a->valuePtr = a->name + XmlNameLength(enc, a->name); + } + qsort(context->atts, nAtts, sizeof(ATTRIBUTE), attcmp); + for (i = 1; i < nAtts; i++) { + ATTRIBUTE *a = context->atts + i; + if (XmlSameName(enc, a->name, a[-1].name)) { + if (!dup || a->name < dup) + dup = a->name; + } + } + if (dup) { + *badPtr = dup; + return duplicateAttribute; + } + } + return wellFormed; +} + +static enum WfCheckResult +checkProlog(DTD *dtd, const char *s, const char *end, + const char **nextPtr, const ENCODING **enc) +{ + const char *entityNamePtr, *entityNameEnd; + int entityIsParam; + PROLOG_STATE state; + ENTITY *entity; + INIT_ENCODING initEnc; + XmlInitEncoding(&initEnc, enc); + XmlPrologStateInit(&state); + for (;;) { + const char *next; + int tok = XmlPrologTok(*enc, s, end, &next); + switch (XmlTokenRole(&state, tok, s, next, *enc)) { + case XML_ROLE_XML_DECL: + { + const char *encodingName = 0; + const ENCODING *encoding = 0; + const char *version; + int standalone = -1; + if (!XmlParseXmlDecl(0, + *enc, + s, + next, + nextPtr, + &version, + &encodingName, + &encoding, + &standalone)) + return syntaxError; + if (encoding) { + if (encoding->minBytesPerChar != (*enc)->minBytesPerChar) { + *nextPtr = encodingName; + return incorrectEncoding; + } + *enc = encoding; + } + else if (encodingName) { + *nextPtr = encodingName; + return unknownEncoding; + } + if (standalone == 1) + dtd->standalone = 1; + break; + } + case XML_ROLE_DOCTYPE_SYSTEM_ID: + dtd->containsRef = 1; + break; + case XML_ROLE_DOCTYPE_PUBLIC_ID: + case XML_ROLE_ENTITY_PUBLIC_ID: + case XML_ROLE_NOTATION_PUBLIC_ID: + if (!XmlIsPublicId(*enc, s, next, nextPtr)) + return syntaxError; + break; + case XML_ROLE_INSTANCE_START: + *nextPtr = s; + return wellFormed; + case XML_ROLE_DEFAULT_ATTRIBUTE_VALUE: + case XML_ROLE_FIXED_ATTRIBUTE_VALUE: + { + const char *tem = 0; + enum WfCheckResult result + = checkAttributeValue(dtd, *enc, s + (*enc)->minBytesPerChar, + next - (*enc)->minBytesPerChar, + &tem); + if (result) { + if (tem) + *nextPtr = tem; + return result; + } + break; + } + case XML_ROLE_ENTITY_VALUE: + { + enum WfCheckResult result + = storeEntity(dtd, + *enc, + entityIsParam, + entityNamePtr, + entityNameEnd, + s, + next, + nextPtr); + if (result != wellFormed) + return result; + } + break; + case XML_ROLE_ENTITY_SYSTEM_ID: + { + const char *name = poolStoreString(&dtd->pool, *enc, entityNamePtr, entityNameEnd); + entity = (ENTITY *)lookup(entityIsParam ? &dtd->paramEntities : &dtd->generalEntities, + name, sizeof(ENTITY)); + if (entity->name != name) { + poolDiscard(&dtd->pool); + entity = 0; + } + else { + poolFinish(&dtd->pool); + entity->systemId = poolStoreString(&dtd->pool, *enc, + s + (*enc)->minBytesPerChar, + next - (*enc)->minBytesPerChar); + poolFinish(&dtd->pool); + } + } + break; + case XML_ROLE_PARAM_ENTITY_REF: + { + const char *name = poolStoreString(&dtd->pool, *enc, + s + (*enc)->minBytesPerChar, + next - (*enc)->minBytesPerChar); + ENTITY *entity = (ENTITY *)lookup(&dtd->paramEntities, name, 0); + poolDiscard(&dtd->pool); + if (!entity) { + if (!dtd->containsRef || dtd->standalone) { + *nextPtr = s; + return undefinedEntity; + } + } + } + break; + case XML_ROLE_ENTITY_NOTATION_NAME: + if (entity) { + entity->notation = poolStoreString(&dtd->pool, *enc, s, next); + poolFinish(&dtd->pool); + } + break; + case XML_ROLE_GENERAL_ENTITY_NAME: + entityNamePtr = s; + entityNameEnd = next; + entityIsParam = 0; + break; + case XML_ROLE_PARAM_ENTITY_NAME: + entityNamePtr = s; + entityNameEnd = next; + entityIsParam = 1; + break; + case XML_ROLE_ERROR: + *nextPtr = s; + switch (tok) { + case XML_TOK_PARAM_ENTITY_REF: + return paramEntityRef; + case XML_TOK_INVALID: + *nextPtr = next; + return invalidToken; + case XML_TOK_NONE: + return noElements; + case XML_TOK_PARTIAL: + return unclosedToken; + case XML_TOK_PARTIAL_CHAR: + return partialChar; + case XML_TOK_TRAILING_CR: + *nextPtr = s + (*enc)->minBytesPerChar; + return noElements; + case XML_TOK_XML_DECL: + return misplacedXmlPi; + default: + return syntaxError; + } + case XML_ROLE_GROUP_OPEN: + if (state.level >= dtd->groupSize) { + if (dtd->groupSize) + dtd->groupConnector = realloc(dtd->groupConnector, dtd->groupSize *= 2); + else + dtd->groupConnector = malloc(dtd->groupSize = 32); + if (!dtd->groupConnector) + return noMemory; + } + dtd->groupConnector[state.level] = 0; + break; + case XML_ROLE_GROUP_SEQUENCE: + if (dtd->groupConnector[state.level] == '|') { + *nextPtr = s; + return syntaxError; + } + dtd->groupConnector[state.level] = ','; + break; + case XML_ROLE_GROUP_CHOICE: + if (dtd->groupConnector[state.level] == ',') { + *nextPtr = s; + return syntaxError; + } + dtd->groupConnector[state.level] = '|'; + break; + case XML_ROLE_NONE: + if (tok == XML_TOK_PARAM_ENTITY_REF) + dtd->containsRef = 1; + break; + } + s = next; + } + /* not reached */ +} + +static enum WfCheckResult +checkParsedEntities(CONTEXT *context, const char **badPtr) +{ + HASH_TABLE_ITER iter; + hashTableIterInit(&iter, &context->dtd.generalEntities); + for (;;) { + ENTITY *entity = (ENTITY *)hashTableIterNext(&iter); + if (!entity) + break; + if (entity->textPtr && !entity->wfInContent && !entity->magic) { + enum WfCheckResult result; + const ENCODING *internalEnc = XmlGetInternalEncoding(XML_UTF8_ENCODING); + entity->open = 1; + result = checkContent(1, context, internalEnc, + entity->textPtr, entity->textPtr + entity->textLen, + badPtr); + entity->open = 0; + if (result && *badPtr) { + *badPtr = entity->docTextPtr; + return result; + } + entity->wfInContent = 1; + } + } + return wellFormed; +} + +static enum WfCheckResult +checkGeneralTextEntity(CONTEXT *context, + const char *s, const char *end, + const char **nextPtr, + const ENCODING **enc) +{ + INIT_ENCODING initEnc; + const char *next; + int tok; + + XmlInitEncoding(&initEnc, enc); + tok = XmlContentTok(*enc, s, end, &next); + + if (tok == XML_TOK_BOM) { + s = next; + tok = XmlContentTok(*enc, s, end, &next); + } + if (tok == XML_TOK_XML_DECL) { + const char *encodingName = 0; + const ENCODING *encoding = 0; + const char *version; + if (!XmlParseXmlDecl(1, + *enc, + s, + next, + nextPtr, + &version, + &encodingName, + &encoding, + 0)) + return syntaxError; + if (encoding) { + if (encoding->minBytesPerChar != (*enc)->minBytesPerChar) { + *nextPtr = encodingName; + return incorrectEncoding; + } + *enc = encoding; + } + else if (encodingName) { + *nextPtr = encodingName; + return unknownEncoding; + } + s = next; + } + context->dtd.containsRef = 1; + return checkContent(1, context, *enc, s, end, nextPtr); +} + +static enum WfCheckResult +checkAttributeValue(DTD *dtd, const ENCODING *enc, + const char *ptr, const char *end, const char **badPtr) +{ + for (;;) { + const char *next; + int tok = XmlAttributeValueTok(enc, ptr, end, &next); + switch (tok) { + case XML_TOK_TRAILING_CR: + case XML_TOK_NONE: + return wellFormed; + case XML_TOK_INVALID: + *badPtr = next; + return invalidToken; + case XML_TOK_PARTIAL: + *badPtr = ptr; + return invalidToken; + case XML_TOK_CHAR_REF: + if (XmlCharRefNumber(enc, ptr) < 0) { + *badPtr = ptr; + return badCharRef; + } + break; + case XML_TOK_DATA_CHARS: + case XML_TOK_DATA_NEWLINE: + break; + case XML_TOK_ENTITY_REF: + { + const char *name = poolStoreString(&dtd->pool, enc, + ptr + enc->minBytesPerChar, + next - enc->minBytesPerChar); + ENTITY *entity = (ENTITY *)lookup(&dtd->generalEntities, name, 0); + poolDiscard(&dtd->pool); + if (!entity) { + if (!dtd->containsRef) { + *badPtr = ptr; + return undefinedEntity; + } + break; + } + if (entity->wfInAttribute) + break; + if (entity->open) { + *badPtr = ptr; + return recursiveEntityRef; + } + if (entity->notation) { + *badPtr = ptr; + return binaryEntityRef; + } + if (entity) { + if (entity->textPtr) { + enum WfCheckResult result; + const ENCODING *internalEnc = XmlGetInternalEncoding(XML_UTF8_ENCODING); + const char *textEnd = entity->textPtr + entity->textLen; + entity->open = 1; + result = checkAttributeValue(dtd, internalEnc, entity->textPtr, textEnd, badPtr); + entity->open = 0; + if (result && *badPtr) { + *badPtr = ptr; + return result; + } + entity->wfInAttribute = 1; + } + else { + *badPtr = ptr; + return attributeExternalEntityRef; + } + } + break; + } + break; + default: + abort(); + } + ptr = next; + } + /* not reached */ +} + +static +void poolInit(STRING_POOL *pool) +{ + pool->blocks = 0; + pool->start = 0; + pool->ptr = 0; + pool->end = 0; +} + +static +void poolDestroy(STRING_POOL *pool) +{ + BLOCK *p = pool->blocks; + while (p) { + BLOCK *tem = p->next; + free(p); + p = tem; + } + pool->blocks = 0; + pool->ptr = 0; + pool->start = 0; + pool->end = 0; +} + +static +const char *poolAppend(STRING_POOL *pool, const ENCODING *enc, + const char *ptr, const char *end) +{ + for (;;) { + XmlConvert(enc, XML_UTF8_ENCODING, &ptr, end, &(pool->ptr), pool->end); + if (ptr == end) + break; + if (!poolGrow(pool)) + return 0; + } + return pool->start; +} + +static +const char *poolStoreString(STRING_POOL *pool, const ENCODING *enc, + const char *ptr, const char *end) +{ + if (!poolAppend(pool, enc, ptr, end)) + return 0; + if (pool->ptr == pool->end && !poolGrow(pool)) + return 0; + *(pool->ptr)++ = 0; + return pool->start; +} + +static +int poolGrow(STRING_POOL *pool) +{ + if (pool->blocks && pool->start == pool->blocks->s) { + size_t blockSize = (pool->end - pool->start)*2; + pool->blocks = realloc(pool->blocks, offsetof(BLOCK, s) + blockSize); + if (!pool->blocks) + return 0; + pool->ptr = pool->blocks->s + (pool->ptr - pool->start); + pool->start = pool->blocks->s; + pool->end = pool->start + blockSize; + } + else { + BLOCK *tem; + size_t blockSize = pool->end - pool->start; + if (blockSize < INIT_BLOCK_SIZE) + blockSize = INIT_BLOCK_SIZE; + else + blockSize *= 2; + tem = malloc(offsetof(BLOCK, s) + blockSize); + if (!tem) + return 0; + tem->next = pool->blocks; + pool->blocks = tem; + memcpy(tem->s, pool->start, pool->ptr - pool->start); + pool->ptr = tem->s + (pool->ptr - pool->start); + pool->start = tem->s; + pool->end = tem->s + blockSize; + } + return 1; +} + +static int dtdInit(DTD *dtd) +{ + static const char *names[] = { "lt", "amp", "gt", "quot", "apos" }; + static const char chars[] = { '<', '&', '>', '"', '\'' }; + int i; + + poolInit(&(dtd->pool)); + hashTableInit(&(dtd->generalEntities)); + for (i = 0; i < 5; i++) { + ENTITY *entity = (ENTITY *)lookup(&(dtd->generalEntities), names[i], sizeof(ENTITY)); + if (!entity) + return 0; + entity->textPtr = chars + i; + entity->textLen = 1; + entity->magic = 1; + entity->wfInContent = 1; + entity->wfInAttribute = 1; + } + hashTableInit(&(dtd->paramEntities)); + dtd->containsRef = 0; + dtd->groupSize = 0; + dtd->groupConnector = 0; + return 1; +} + +static void dtdDestroy(DTD *dtd) +{ + poolDestroy(&(dtd->pool)); + hashTableDestroy(&(dtd->generalEntities)); + hashTableDestroy(&(dtd->paramEntities)); + free(dtd->groupConnector); +} + +static +enum WfCheckResult storeEntity(DTD *dtd, + const ENCODING *enc, + int isParam, + const char *entityNamePtr, + const char *entityNameEnd, + const char *entityTextPtr, + const char *entityTextEnd, + const char **badPtr) +{ + ENTITY *entity; + const ENCODING *utf8 = XmlGetInternalEncoding(XML_UTF8_ENCODING); + STRING_POOL *pool = &(dtd->pool); + if (!poolStoreString(pool, enc, entityNamePtr, entityNameEnd)) + return noMemory; + entity = (ENTITY *)lookup(isParam ? &(dtd->paramEntities) : &(dtd->generalEntities), + pool->start, + sizeof(ENTITY)); + if (entity->name != pool->start) { + poolDiscard(pool); + entityNamePtr = 0; + } + else + poolFinish(pool); + entityTextPtr += enc->minBytesPerChar; + entityTextEnd -= enc->minBytesPerChar; + entity->docTextPtr = entityTextPtr; + for (;;) { + const char *next; + int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next); + switch (tok) { + case XML_TOK_PARAM_ENTITY_REF: + *badPtr = entityTextPtr; + return syntaxError; + case XML_TOK_NONE: + if (entityNamePtr) { + entity->textPtr = pool->start; + entity->textLen = pool->ptr - pool->start; + poolFinish(pool); + } + else + poolDiscard(pool); + return wellFormed; + case XML_TOK_ENTITY_REF: + case XML_TOK_DATA_CHARS: + if (!poolAppend(pool, enc, entityTextPtr, next)) + return noMemory; + break; + case XML_TOK_TRAILING_CR: + next = entityTextPtr + enc->minBytesPerChar; + /* fall through */ + case XML_TOK_DATA_NEWLINE: + if (pool->end == pool->ptr && !poolGrow(pool)) + return noMemory; + *(pool->ptr)++ = '\n'; + break; + case XML_TOK_CHAR_REF: + { + char buf[XML_MAX_BYTES_PER_CHAR]; + int i; + int n = XmlCharRefNumber(enc, entityTextPtr); + if (n < 0) { + *badPtr = entityTextPtr; + return badCharRef; + } + n = XmlEncode(utf8, n, buf); + if (!n) { + *badPtr = entityTextPtr; + return badCharRef; + } + for (i = 0; i < n; i++) { + if (pool->end == pool->ptr && !poolGrow(pool)) + return noMemory; + *(pool->ptr)++ = buf[i]; + } + } + break; + case XML_TOK_PARTIAL: + *badPtr = entityTextPtr; + return invalidToken; + case XML_TOK_INVALID: + *badPtr = next; + return invalidToken; + default: + abort(); + } + entityTextPtr = next; + } + /* not reached */ +} diff --git a/Build/source/extra/expat/xmlwf/wfcheck.h b/Build/source/extra/expat/xmlwf/wfcheck.h new file mode 100644 index 00000000000..ea8fe573502 --- /dev/null +++ b/Build/source/extra/expat/xmlwf/wfcheck.h @@ -0,0 +1,38 @@ + +#include + +enum WfCheckResult { + wellFormed, + noMemory, + syntaxError, + noElements, + invalidToken, + unclosedToken, + partialChar, + tagMismatch, + duplicateAttribute, + junkAfterDocElement, + paramEntityRef, + undefinedEntity, + recursiveEntityRef, + asyncEntity, + badCharRef, + binaryEntityRef, + attributeExternalEntityRef, + misplacedXmlPi, + unknownEncoding, + incorrectEncoding +}; + +enum EntityType { + documentEntity, + generalTextEntity +}; + +enum WfCheckResult wfCheck(enum EntityType entityType, + const char *s, size_t n, + const char **errorPtr, + unsigned long *errorLineNumber, + unsigned long *errorColNumber); +const char *wfCheckMessage(enum WfCheckResult); + diff --git a/Build/source/extra/expat/xmlwf/wfcheckmessage.c b/Build/source/extra/expat/xmlwf/wfcheckmessage.c new file mode 100644 index 00000000000..95e811f49dc --- /dev/null +++ b/Build/source/extra/expat/xmlwf/wfcheckmessage.c @@ -0,0 +1,30 @@ +#include "wfcheck.h" + +const char *wfCheckMessage(enum WfCheckResult result) +{ + static const char *message[] = { + 0, + "out of memory", + "syntax error", + "no element found", + "not well-formed", + "unclosed token", + "unclosed token", + "mismatched tag", + "duplicate attribute", + "junk after document element", + "parameter entity reference not allowed within declaration in internal subset", + "undefined entity", + "recursive entity reference", + "asynchronous entity", + "reference to invalid character number", + "reference to binary entity", + "reference to external entity in attribute", + "xml pi not at start of external entity", + "unknown encoding", + "encoding specified in XML declaration is incorrect" + }; + if (result > 0 && result < sizeof(message)/sizeof(message[0])) + return message[result]; + return 0; +} diff --git a/Build/source/extra/expat/xmlwf/win32filemap.c b/Build/source/extra/expat/xmlwf/win32filemap.c new file mode 100644 index 00000000000..7546fea8933 --- /dev/null +++ b/Build/source/extra/expat/xmlwf/win32filemap.c @@ -0,0 +1,95 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +#define STRICT 1 +#define WIN32_LEAN_AND_MEAN 1 + +#ifdef XML_UNICODE_WCHAR_T +#ifndef XML_UNICODE +#define XML_UNICODE +#endif +#endif + +#ifdef XML_UNICODE +#define UNICODE +#define _UNICODE +#endif /* XML_UNICODE */ +#include +#include +#include +#include "filemap.h" + +static void win32perror(const TCHAR *); + +int filemap(const TCHAR *name, + void (*processor)(const void *, size_t, const TCHAR *, void *arg), + void *arg) +{ + HANDLE f; + HANDLE m; + DWORD size; + DWORD sizeHi; + void *p; + + f = CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, + FILE_FLAG_SEQUENTIAL_SCAN, NULL); + if (f == INVALID_HANDLE_VALUE) { + win32perror(name); + return 0; + } + size = GetFileSize(f, &sizeHi); + if (size == (DWORD)-1) { + win32perror(name); + return 0; + } + if (sizeHi) { + _ftprintf(stderr, _T("%s: bigger than 2Gb\n"), name); + return 0; + } + /* CreateFileMapping barfs on zero length files */ + if (size == 0) { + static const char c = '\0'; + processor(&c, 0, name, arg); + CloseHandle(f); + return 1; + } + m = CreateFileMapping(f, NULL, PAGE_READONLY, 0, 0, NULL); + if (m == NULL) { + win32perror(name); + CloseHandle(f); + return 0; + } + p = MapViewOfFile(m, FILE_MAP_READ, 0, 0, 0); + if (p == NULL) { + win32perror(name); + CloseHandle(m); + CloseHandle(f); + return 0; + } + processor(p, size, name, arg); + UnmapViewOfFile(p); + CloseHandle(m); + CloseHandle(f); + return 1; +} + +static +void win32perror(const TCHAR *s) +{ + LPVOID buf; + if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &buf, + 0, + NULL)) { + _ftprintf(stderr, _T("%s: %s"), s, buf); + fflush(stderr); + LocalFree(buf); + } + else + _ftprintf(stderr, _T("%s: unknown Windows error\n"), s); +} diff --git a/Build/source/extra/expat/xmlwf/xmlfile.c b/Build/source/extra/expat/xmlwf/xmlfile.c new file mode 100644 index 00000000000..ba79b23b3ff --- /dev/null +++ b/Build/source/extra/expat/xmlwf/xmlfile.c @@ -0,0 +1,217 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +#include +#include +#include +#include +#include +#include "expat.h" +#include "xmlfile.h" +#include "xmltchar.h" +#include "filemap.h" + +#ifdef _MSC_VER +#include +#endif + +#ifdef _POSIX_SOURCE +#include +#endif + +#ifndef O_BINARY +#ifdef _O_BINARY +#define O_BINARY _O_BINARY +#else +#define O_BINARY 0 +#endif +#endif + +#ifdef _DEBUG +#define READ_SIZE 16 +#else +#define READ_SIZE (1024*8) +#endif + + + +typedef struct { + XML_Parser parser; + int *retPtr; +} PROCESS_ARGS; + +static +void reportError(XML_Parser parser, const XML_Char *filename) +{ + int code = XML_GetErrorCode(parser); + const XML_Char *message = XML_ErrorString(code); + if (message) + ftprintf(stdout, T("%s:%d:%d: %s\n"), + filename, + XML_GetErrorLineNumber(parser), + XML_GetErrorColumnNumber(parser), + message); + else + ftprintf(stderr, T("%s: (unknown message %d)\n"), filename, code); +} + +static +void processFile(const void *data, + size_t size, + const XML_Char *filename, + void *args) +{ + XML_Parser parser = ((PROCESS_ARGS *)args)->parser; + int *retPtr = ((PROCESS_ARGS *)args)->retPtr; + if (!XML_Parse(parser, data, size, 1)) { + reportError(parser, filename); + *retPtr = 0; + } + else + *retPtr = 1; +} + +#ifdef WIN32 + +static +int isAsciiLetter(XML_Char c) +{ + return (T('a') <= c && c <= T('z')) || (T('A') <= c && c <= T('Z')); +} + +#endif /* WIN32 */ + +static +const XML_Char *resolveSystemId(const XML_Char *base, const XML_Char *systemId, XML_Char **toFree) +{ + XML_Char *s; + *toFree = 0; + if (!base + || *systemId == T('/') +#ifdef WIN32 + || *systemId == T('\\') + || (isAsciiLetter(systemId[0]) && systemId[1] == T(':')) +#endif + ) + return systemId; + *toFree = (XML_Char *)malloc((tcslen(base) + tcslen(systemId) + 2)*sizeof(XML_Char)); + if (!*toFree) + return systemId; + tcscpy(*toFree, base); + s = *toFree; + if (tcsrchr(s, T('/'))) + s = tcsrchr(s, T('/')) + 1; +#ifdef WIN32 + if (tcsrchr(s, T('\\'))) + s = tcsrchr(s, T('\\')) + 1; +#endif + tcscpy(s, systemId); + return *toFree; +} + +static +int externalEntityRefFilemap(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId) +{ + int result; + XML_Char *s; + const XML_Char *filename; + XML_Parser entParser = XML_ExternalEntityParserCreate(parser, context, 0); + PROCESS_ARGS args; + args.retPtr = &result; + args.parser = entParser; + filename = resolveSystemId(base, systemId, &s); + XML_SetBase(entParser, filename); + if (!filemap(filename, processFile, &args)) + result = 0; + free(s); + XML_ParserFree(entParser); + return result; +} + +static +int processStream(const XML_Char *filename, XML_Parser parser) +{ + int fd = topen(filename, O_BINARY|O_RDONLY); + if (fd < 0) { + tperror(filename); + return 0; + } + for (;;) { + int nread; + char *buf = XML_GetBuffer(parser, READ_SIZE); + if (!buf) { + close(fd); + ftprintf(stderr, T("%s: out of memory\n"), filename); + return 0; + } + nread = read(fd, buf, READ_SIZE); + if (nread < 0) { + tperror(filename); + close(fd); + return 0; + } + if (!XML_ParseBuffer(parser, nread, nread == 0)) { + reportError(parser, filename); + close(fd); + return 0; + } + if (nread == 0) { + close(fd); + break;; + } + } + return 1; +} + +static +int externalEntityRefStream(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId) +{ + XML_Char *s; + const XML_Char *filename; + int ret; + XML_Parser entParser = XML_ExternalEntityParserCreate(parser, context, 0); + filename = resolveSystemId(base, systemId, &s); + XML_SetBase(entParser, filename); + ret = processStream(filename, entParser); + free(s); + XML_ParserFree(entParser); + return ret; +} + +int XML_ProcessFile(XML_Parser parser, + const XML_Char *filename, + unsigned flags) +{ + int result; + + if (!XML_SetBase(parser, filename)) { + ftprintf(stderr, T("%s: out of memory"), filename); + exit(1); + } + + if (flags & XML_EXTERNAL_ENTITIES) + XML_SetExternalEntityRefHandler(parser, + (flags & XML_MAP_FILE) + ? externalEntityRefFilemap + : externalEntityRefStream); + if (flags & XML_MAP_FILE) { + PROCESS_ARGS args; + args.retPtr = &result; + args.parser = parser; + if (!filemap(filename, processFile, &args)) + result = 0; + } + else + result = processStream(filename, parser); + return result; +} diff --git a/Build/source/extra/expat/xmlwf/xmlfile.h b/Build/source/extra/expat/xmlwf/xmlfile.h new file mode 100644 index 00000000000..5d6bdce457d --- /dev/null +++ b/Build/source/extra/expat/xmlwf/xmlfile.h @@ -0,0 +1,11 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +#define XML_MAP_FILE 01 +#define XML_EXTERNAL_ENTITIES 02 + +extern int XML_ProcessFile(XML_Parser parser, + const XML_Char *filename, + unsigned flags); diff --git a/Build/source/extra/expat/xmlwf/xmlmime.c b/Build/source/extra/expat/xmlwf/xmlmime.c new file mode 100644 index 00000000000..4b32c86fe2b --- /dev/null +++ b/Build/source/extra/expat/xmlwf/xmlmime.c @@ -0,0 +1,161 @@ +#include +#include "xmlmime.h" + +static +const char *getTok(const char **pp) +{ + /* inComment means one level of nesting; inComment+1 means two levels etc */ + enum { inAtom, inString, init, inComment }; + int state = init; + const char *tokStart = 0; + for (;;) { + switch (**pp) { + case '\0': + if (state == inAtom) + return tokStart; + return 0; + case ' ': + case '\r': + case '\t': + case '\n': + if (state == inAtom) + return tokStart; + break; + case '(': + if (state == inAtom) + return tokStart; + if (state != inString) + state++; + break; + case ')': + if (state > init) + --state; + else if (state != inString) + return 0; + break; + case ';': + case '/': + case '=': + if (state == inAtom) + return tokStart; + if (state == init) + return (*pp)++; + break; + case '\\': + ++*pp; + if (**pp == '\0') + return 0; + break; + case '"': + switch (state) { + case inString: + ++*pp; + return tokStart; + case inAtom: + return tokStart; + case init: + tokStart = *pp; + state = inString; + break; + } + break; + default: + if (state == init) { + tokStart = *pp; + state = inAtom; + } + break; + } + ++*pp; + } + /* not reached */ +} + +/* key must be lowercase ASCII */ + +static +int matchkey(const char *start, const char *end, const char *key) +{ + if (!start) + return 0; + for (; start != end; start++, key++) + if (*start != *key && *start != 'A' + (*key - 'a')) + return 0; + return *key == '\0'; +} + +void getXMLCharset(const char *buf, char *charset) +{ + const char *next, *p; + + charset[0] = '\0'; + next = buf; + p = getTok(&next); + if (matchkey(p, next, "text")) + strcpy(charset, "us-ascii"); + else if (!matchkey(p, next, "application")) + return; + p = getTok(&next); + if (!p || *p != '/') + return; + p = getTok(&next); +#if 0 + if (!matchkey(p, next, "xml") && charset[0] == '\0') + return; +#endif + p = getTok(&next); + while (p) { + if (*p == ';') { + p = getTok(&next); + if (matchkey(p, next, "charset")) { + p = getTok(&next); + if (p && *p == '=') { + p = getTok(&next); + if (p) { + char *s = charset; + if (*p == '"') { + while (++p != next - 1) { + if (*p == '\\') + ++p; + if (s == charset + CHARSET_MAX - 1) { + charset[0] = '\0'; + break; + } + *s++ = *p; + } + *s++ = '\0'; + } + else { + if (next - p > CHARSET_MAX - 1) + break; + while (p != next) + *s++ = *p++; + *s = 0; + break; + } + } + } + break; + } + } + else + p = getTok(&next); + } +} + +#ifdef TEST + +#include + +int main(int argc, char **argv) +{ + char buf[CHARSET_MAX]; + if (argc <= 1) + return 1; + printf("%s\n", argv[1]); + getXMLCharset(argv[1], buf); + printf("charset=\"%s\"\n", buf); + return 0; +} + +#endif /* TEST */ diff --git a/Build/source/extra/expat/xmlwf/xmlmime.h b/Build/source/extra/expat/xmlwf/xmlmime.h new file mode 100644 index 00000000000..79654b69bf5 --- /dev/null +++ b/Build/source/extra/expat/xmlwf/xmlmime.h @@ -0,0 +1,19 @@ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Registered charset names are at most 40 characters long. */ + +#define CHARSET_MAX 41 + +/* Figure out the charset to use from the ContentType. +buf contains the body of the header field (the part after "Content-Type:"). +charset gets the charset to use. It must be at least CHARSET_MAX chars long. +charset will be empty if the default charset should be used. */ + +void getXMLCharset(const char *buf, char *charset); + +#ifdef __cplusplus +} +#endif diff --git a/Build/source/extra/expat/xmlwf/xmltchar.h b/Build/source/extra/expat/xmlwf/xmltchar.h new file mode 100644 index 00000000000..1088575512d --- /dev/null +++ b/Build/source/extra/expat/xmlwf/xmltchar.h @@ -0,0 +1,36 @@ +#ifdef XML_UNICODE +#ifndef XML_UNICODE_WCHAR_T +#error xmlwf requires a 16-bit Unicode-compatible wchar_t +#endif +#define T(x) L ## x +#define ftprintf fwprintf +#define tfopen _wfopen +#define fputts fputws +#define puttc putwc +#define tcscmp wcscmp +#define tcscpy wcscpy +#define tcscat wcscat +#define tcschr wcschr +#define tcsrchr wcsrchr +#define tcslen wcslen +#define tperror _wperror +#define topen _wopen +#define tmain wmain +#define tremove _wremove +#else /* not XML_UNICODE */ +#define T(x) x +#define ftprintf fprintf +#define tfopen fopen +#define fputts fputs +#define puttc putc +#define tcscmp strcmp +#define tcscpy strcpy +#define tcscat strcat +#define tcschr strchr +#define tcsrchr strrchr +#define tcslen strlen +#define tperror perror +#define topen open +#define tmain main +#define tremove remove +#endif /* not XML_UNICODE */ diff --git a/Build/source/extra/expat/xmlwf/xmlurl.h b/Build/source/extra/expat/xmlwf/xmlurl.h new file mode 100644 index 00000000000..3ab1726889b --- /dev/null +++ b/Build/source/extra/expat/xmlwf/xmlurl.h @@ -0,0 +1,13 @@ +#ifdef __cplusplus +extern "C" { +#endif + +int XML_URLInit(); +void XML_URLUninit(); +int XML_ProcessURL(XML_Parser parser, + const XML_Char *url, + unsigned flags); + +#ifdef __cplusplus +} +#endif diff --git a/Build/source/extra/expat/xmlwf/xmlwf.c b/Build/source/extra/expat/xmlwf/xmlwf.c new file mode 100644 index 00000000000..891c0db5f3d --- /dev/null +++ b/Build/source/extra/expat/xmlwf/xmlwf.c @@ -0,0 +1,759 @@ +/* +Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd +See the file COPYING for copying permission. +*/ + +#include +#include +#include +#include + +#include "expat.h" +#include "codepage.h" +#include "xmlfile.h" +#include "xmltchar.h" + +#ifdef _MSC_VER +#include +#endif + +/* This ensures proper sorting. */ + +#define NSSEP T('\001') + +static void characterData(void *userData, const XML_Char *s, int len) +{ + FILE *fp = userData; + for (; len > 0; --len, ++s) { + switch (*s) { + case T('&'): + fputts(T("&"), fp); + break; + case T('<'): + fputts(T("<"), fp); + break; + case T('>'): + fputts(T(">"), fp); + break; +#ifdef W3C14N + case 13: + fputts(T(" "), fp); + break; +#else + case T('"'): + fputts(T("""), fp); + break; + case 9: + case 10: + case 13: + ftprintf(fp, T("&#%d;"), *s); + break; +#endif + default: + puttc(*s, fp); + break; + } + } +} + +static void attributeValue(FILE *fp, const XML_Char *s) +{ + puttc(T('='), fp); + puttc(T('"'), fp); + for (;;) { + switch (*s) { + case 0: + case NSSEP: + puttc(T('"'), fp); + return; + case T('&'): + fputts(T("&"), fp); + break; + case T('<'): + fputts(T("<"), fp); + break; + case T('"'): + fputts(T("""), fp); + break; +#ifdef W3C14N + case 9: + fputts(T(" "), fp); + break; + case 10: + fputts(T(" "), fp); + break; + case 13: + fputts(T(" "), fp); + break; +#else + case T('>'): + fputts(T(">"), fp); + break; + case 9: + case 10: + case 13: + ftprintf(fp, T("&#%d;"), *s); + break; +#endif + default: + puttc(*s, fp); + break; + } + s++; + } +} + +/* Lexicographically comparing UTF-8 encoded attribute values, +is equivalent to lexicographically comparing based on the character number. */ + +static int attcmp(const void *att1, const void *att2) +{ + return tcscmp(*(const XML_Char **)att1, *(const XML_Char **)att2); +} + +static void startElement(void *userData, const XML_Char *name, const XML_Char **atts) +{ + int nAtts; + const XML_Char **p; + FILE *fp = userData; + puttc(T('<'), fp); + fputts(name, fp); + + p = atts; + while (*p) + ++p; + nAtts = (p - atts) >> 1; + if (nAtts > 1) + qsort((void *)atts, nAtts, sizeof(XML_Char *) * 2, attcmp); + while (*atts) { + puttc(T(' '), fp); + fputts(*atts++, fp); + attributeValue(fp, *atts); + atts++; + } + puttc(T('>'), fp); +} + +static void endElement(void *userData, const XML_Char *name) +{ + FILE *fp = userData; + puttc(T('<'), fp); + puttc(T('/'), fp); + fputts(name, fp); + puttc(T('>'), fp); +} + +static int nsattcmp(const void *p1, const void *p2) +{ + const XML_Char *att1 = *(const XML_Char **)p1; + const XML_Char *att2 = *(const XML_Char **)p2; + int sep1 = (tcsrchr(att1, NSSEP) != 0); + int sep2 = (tcsrchr(att1, NSSEP) != 0); + if (sep1 != sep2) + return sep1 - sep2; + return tcscmp(att1, att2); +} + +static void startElementNS(void *userData, const XML_Char *name, const XML_Char **atts) +{ + int nAtts; + int nsi; + const XML_Char **p; + FILE *fp = userData; + const XML_Char *sep; + puttc(T('<'), fp); + + sep = tcsrchr(name, NSSEP); + if (sep) { + fputts(T("n1:"), fp); + fputts(sep + 1, fp); + fputts(T(" xmlns:n1"), fp); + attributeValue(fp, name); + nsi = 2; + } + else { + fputts(name, fp); + nsi = 1; + } + + p = atts; + while (*p) + ++p; + nAtts = (p - atts) >> 1; + if (nAtts > 1) + qsort((void *)atts, nAtts, sizeof(XML_Char *) * 2, nsattcmp); + while (*atts) { + name = *atts++; + sep = tcsrchr(name, NSSEP); + puttc(T(' '), fp); + if (sep) { + ftprintf(fp, T("n%d:"), nsi); + fputts(sep + 1, fp); + } + else + fputts(name, fp); + attributeValue(fp, *atts); + if (sep) { + ftprintf(fp, T(" xmlns:n%d"), nsi++); + attributeValue(fp, name); + } + atts++; + } + puttc(T('>'), fp); +} + +static void endElementNS(void *userData, const XML_Char *name) +{ + FILE *fp = userData; + const XML_Char *sep; + puttc(T('<'), fp); + puttc(T('/'), fp); + sep = tcsrchr(name, NSSEP); + if (sep) { + fputts(T("n1:"), fp); + fputts(sep + 1, fp); + } + else + fputts(name, fp); + puttc(T('>'), fp); +} + +#ifndef W3C14N + +static void processingInstruction(void *userData, const XML_Char *target, const XML_Char *data) +{ + FILE *fp = userData; + puttc(T('<'), fp); + puttc(T('?'), fp); + fputts(target, fp); + puttc(T(' '), fp); + fputts(data, fp); + puttc(T('?'), fp); + puttc(T('>'), fp); +} + +#endif /* not W3C14N */ + +static void defaultCharacterData(XML_Parser parser, const XML_Char *s, int len) +{ + XML_DefaultCurrent(parser); +} + +static void defaultStartElement(XML_Parser parser, const XML_Char *name, const XML_Char **atts) +{ + XML_DefaultCurrent(parser); +} + +static void defaultEndElement(XML_Parser parser, const XML_Char *name) +{ + XML_DefaultCurrent(parser); +} + +static void defaultProcessingInstruction(XML_Parser parser, const XML_Char *target, const XML_Char *data) +{ + XML_DefaultCurrent(parser); +} + +static void nopCharacterData(XML_Parser parser, const XML_Char *s, int len) +{ +} + +static void nopStartElement(XML_Parser parser, const XML_Char *name, const XML_Char **atts) +{ +} + +static void nopEndElement(XML_Parser parser, const XML_Char *name) +{ +} + +static void nopProcessingInstruction(XML_Parser parser, const XML_Char *target, const XML_Char *data) +{ +} + +static void markup(XML_Parser parser, const XML_Char *s, int len) +{ + FILE *fp = XML_GetUserData(parser); + for (; len > 0; --len, ++s) + puttc(*s, fp); +} + +static +void metaLocation(XML_Parser parser) +{ + const XML_Char *uri = XML_GetBase(parser); + if (uri) + ftprintf(XML_GetUserData(parser), T(" uri=\"%s\""), uri); + ftprintf(XML_GetUserData(parser), + T(" byte=\"%ld\" nbytes=\"%d\" line=\"%d\" col=\"%d\""), + XML_GetCurrentByteIndex(parser), + XML_GetCurrentByteCount(parser), + XML_GetCurrentLineNumber(parser), + XML_GetCurrentColumnNumber(parser)); +} + +static +void metaStartDocument(XML_Parser parser) +{ + fputts(T("\n"), XML_GetUserData(parser)); +} + +static +void metaEndDocument(XML_Parser parser) +{ + fputts(T("\n"), XML_GetUserData(parser)); +} + +static +void metaStartElement(XML_Parser parser, const XML_Char *name, const XML_Char **atts) +{ + FILE *fp = XML_GetUserData(parser); + const XML_Char **specifiedAttsEnd + = atts + XML_GetSpecifiedAttributeCount(parser); + const XML_Char **idAttPtr; + int idAttIndex = XML_GetIdAttributeIndex(parser); + if (idAttIndex < 0) + idAttPtr = 0; + else + idAttPtr = atts + idAttIndex; + + ftprintf(fp, T("\n"), fp); + do { + ftprintf(fp, T("= specifiedAttsEnd) + fputts(T("\" defaulted=\"yes\"/>\n"), fp); + else if (atts == idAttPtr) + fputts(T("\" id=\"yes\"/>\n"), fp); + else + fputts(T("\"/>\n"), fp); + } while (*(atts += 2)); + fputts(T("\n"), fp); + } + else + fputts(T("/>\n"), fp); +} + +static +void metaEndElement(XML_Parser parser, const XML_Char *name) +{ + FILE *fp = XML_GetUserData(parser); + ftprintf(fp, T("\n"), fp); +} + +static +void metaProcessingInstruction(XML_Parser parser, const XML_Char *target, const XML_Char *data) +{ + FILE *fp = XML_GetUserData(parser); + ftprintf(fp, T("\n"), fp); +} + +static +void metaComment(XML_Parser parser, const XML_Char *data) +{ + FILE *fp = XML_GetUserData(parser); + fputts(T("\n"), fp); +} + +static +void metaStartCdataSection(XML_Parser parser) +{ + FILE *fp = XML_GetUserData(parser); + fputts(T("\n"), fp); +} + +static +void metaEndCdataSection(XML_Parser parser) +{ + FILE *fp = XML_GetUserData(parser); + fputts(T("\n"), fp); +} + +static +void metaCharacterData(XML_Parser parser, const XML_Char *s, int len) +{ + FILE *fp = XML_GetUserData(parser); + fputts(T("\n"), fp); +} + +static +void metaStartDoctypeDecl(XML_Parser parser, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid, + int has_internal_subset) +{ + FILE *fp = XML_GetUserData(parser); + ftprintf(fp, T("\n"), fp); +} + +static +void metaEndDoctypeDecl(XML_Parser parser) +{ + FILE *fp = XML_GetUserData(parser); + fputts(T("\n"), fp); +} + +static +void metaNotationDecl(XML_Parser parser, + const XML_Char *notationName, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId) +{ + FILE *fp = XML_GetUserData(parser); + ftprintf(fp, T("\n"), fp); +} + + +static +void metaEntityDecl(XML_Parser parser, + const XML_Char *entityName, + int is_param, + const XML_Char *value, + int value_length, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId, + const XML_Char *notationName) +{ + FILE *fp = XML_GetUserData(parser); + + if (value) { + ftprintf(fp, T("'), fp); + characterData(fp, value, value_length); + fputts(T("\n"), fp); + } + else if (notationName) { + ftprintf(fp, T("\n"), fp); + } + else { + ftprintf(fp, T("\n"), fp); + } +} + +static +void metaStartNamespaceDecl(XML_Parser parser, + const XML_Char *prefix, + const XML_Char *uri) +{ + FILE *fp = XML_GetUserData(parser); + fputts(T("\n"), fp); + } + else + fputts(T("/>\n"), fp); +} + +static +void metaEndNamespaceDecl(XML_Parser parser, const XML_Char *prefix) +{ + FILE *fp = XML_GetUserData(parser); + if (!prefix) + fputts(T("\n"), fp); + else + ftprintf(fp, T("\n"), prefix); +} + +static +int unknownEncodingConvert(void *data, const char *p) +{ + return codepageConvert(*(int *)data, p); +} + +static +int unknownEncoding(void *userData, + const XML_Char *name, + XML_Encoding *info) +{ + int cp; + static const XML_Char prefixL[] = T("windows-"); + static const XML_Char prefixU[] = T("WINDOWS-"); + int i; + + for (i = 0; prefixU[i]; i++) + if (name[i] != prefixU[i] && name[i] != prefixL[i]) + return 0; + + cp = 0; + for (; name[i]; i++) { + static const XML_Char digits[] = T("0123456789"); + const XML_Char *s = tcschr(digits, name[i]); + if (!s) + return 0; + cp *= 10; + cp += s - digits; + if (cp >= 0x10000) + return 0; + } + if (!codepageMap(cp, info->map)) + return 0; + info->convert = unknownEncodingConvert; + /* We could just cast the code page integer to a void *, + and avoid the use of release. */ + info->release = free; + info->data = malloc(sizeof(int)); + if (!info->data) + return 0; + *(int *)info->data = cp; + return 1; +} + +static +int notStandalone(void *userData) +{ + return 0; +} + +static +void usage(const XML_Char *prog) +{ + ftprintf(stderr, T("usage: %s [-n] [-p] [-r] [-s] [-w] [-x] [-d output-dir] [-e encoding] file ...\n"), prog); + exit(1); +} + +int tmain(int argc, XML_Char **argv) +{ + int i, j; + const XML_Char *outputDir = 0; + const XML_Char *encoding = 0; + unsigned processFlags = XML_MAP_FILE; + int windowsCodePages = 0; + int outputType = 0; + int useNamespaces = 0; + int requireStandalone = 0; + int paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; + +#ifdef _MSC_VER + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF); +#endif + + i = 1; + j = 0; + while (i < argc) { + if (j == 0) { + if (argv[i][0] != T('-')) + break; + if (argv[i][1] == T('-') && argv[i][2] == T('\0')) { + i++; + break; + } + j++; + } + switch (argv[i][j]) { + case T('r'): + processFlags &= ~XML_MAP_FILE; + j++; + break; + case T('s'): + requireStandalone = 1; + j++; + break; + case T('n'): + useNamespaces = 1; + j++; + break; + case T('p'): + paramEntityParsing = XML_PARAM_ENTITY_PARSING_ALWAYS; + /* fall through */ + case T('x'): + processFlags |= XML_EXTERNAL_ENTITIES; + j++; + break; + case T('w'): + windowsCodePages = 1; + j++; + break; + case T('m'): + outputType = 'm'; + j++; + break; + case T('c'): + outputType = 'c'; + useNamespaces = 0; + j++; + break; + case T('t'): + outputType = 't'; + j++; + break; + case T('d'): + if (argv[i][j + 1] == T('\0')) { + if (++i == argc) + usage(argv[0]); + outputDir = argv[i]; + } + else + outputDir = argv[i] + j + 1; + i++; + j = 0; + break; + case T('e'): + if (argv[i][j + 1] == T('\0')) { + if (++i == argc) + usage(argv[0]); + encoding = argv[i]; + } + else + encoding = argv[i] + j + 1; + i++; + j = 0; + break; + case T('\0'): + if (j > 1) { + i++; + j = 0; + break; + } + /* fall through */ + default: + usage(argv[0]); + } + } + if (i == argc) + usage(argv[0]); + for (; i < argc; i++) { + FILE *fp = 0; + XML_Char *outName = 0; + int result; + XML_Parser parser; + if (useNamespaces) + parser = XML_ParserCreateNS(encoding, NSSEP); + else + parser = XML_ParserCreate(encoding); + if (requireStandalone) + XML_SetNotStandaloneHandler(parser, notStandalone); + XML_SetParamEntityParsing(parser, paramEntityParsing); + if (outputType == 't') { + /* This is for doing timings; this gives a more realistic estimate of + the parsing time. */ + outputDir = 0; + XML_SetElementHandler(parser, nopStartElement, nopEndElement); + XML_SetCharacterDataHandler(parser, nopCharacterData); + XML_SetProcessingInstructionHandler(parser, nopProcessingInstruction); + } + else if (outputDir) { + const XML_Char *file = argv[i]; + if (tcsrchr(file, T('/'))) + file = tcsrchr(file, T('/')) + 1; +#ifdef WIN32 + if (tcsrchr(file, T('\\'))) + file = tcsrchr(file, T('\\')) + 1; +#endif + outName = malloc((tcslen(outputDir) + tcslen(file) + 2) * sizeof(XML_Char)); + tcscpy(outName, outputDir); + tcscat(outName, T("/")); + tcscat(outName, file); + fp = tfopen(outName, T("wb")); + if (!fp) { + tperror(outName); + exit(1); + } + setvbuf(fp, NULL, _IOFBF, 16384); +#ifdef XML_UNICODE + puttc(0xFEFF, fp); +#endif + XML_SetUserData(parser, fp); + switch (outputType) { + case 'm': + XML_UseParserAsHandlerArg(parser); + XML_SetElementHandler(parser, metaStartElement, metaEndElement); + XML_SetProcessingInstructionHandler(parser, metaProcessingInstruction); + XML_SetCommentHandler(parser, metaComment); + XML_SetCdataSectionHandler(parser, metaStartCdataSection, metaEndCdataSection); + XML_SetCharacterDataHandler(parser, metaCharacterData); + XML_SetDoctypeDeclHandler(parser, metaStartDoctypeDecl, metaEndDoctypeDecl); + XML_SetEntityDeclHandler(parser, metaEntityDecl); + XML_SetNotationDeclHandler(parser, metaNotationDecl); + XML_SetNamespaceDeclHandler(parser, metaStartNamespaceDecl, metaEndNamespaceDecl); + metaStartDocument(parser); + break; + case 'c': + XML_UseParserAsHandlerArg(parser); + XML_SetDefaultHandler(parser, markup); + XML_SetElementHandler(parser, defaultStartElement, defaultEndElement); + XML_SetCharacterDataHandler(parser, defaultCharacterData); + XML_SetProcessingInstructionHandler(parser, defaultProcessingInstruction); + break; + default: + if (useNamespaces) + XML_SetElementHandler(parser, startElementNS, endElementNS); + else + XML_SetElementHandler(parser, startElement, endElement); + XML_SetCharacterDataHandler(parser, characterData); +#ifndef W3C14N + XML_SetProcessingInstructionHandler(parser, processingInstruction); +#endif /* not W3C14N */ + break; + } + } + if (windowsCodePages) + XML_SetUnknownEncodingHandler(parser, unknownEncoding, 0); + result = XML_ProcessFile(parser, argv[i], processFlags); + if (outputDir) { + if (outputType == 'm') + metaEndDocument(parser); + fclose(fp); + if (!result) + tremove(outName); + free(outName); + } + XML_ParserFree(parser); + } + return 0; +} diff --git a/Build/source/extra/expat/xmlwf/xmlwf.dsp b/Build/source/extra/expat/xmlwf/xmlwf.dsp new file mode 100644 index 00000000000..51de958bf7a --- /dev/null +++ b/Build/source/extra/expat/xmlwf/xmlwf.dsp @@ -0,0 +1,136 @@ +# Microsoft Developer Studio Project File - Name="xmlwf" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=xmlwf - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "xmlwf.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "xmlwf.mak" CFG="xmlwf - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "xmlwf - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "xmlwf - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "xmlwf - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "." +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "." +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /I "..\xmlparse" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllimport) /YX /FD /c +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"..\bin\xmlwf.exe" + +!ELSEIF "$(CFG)" == "xmlwf - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "." +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\Debug" +# PROP Intermediate_Dir ".\Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "." +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".\xmlparse" /I "..\xmlparse" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllimport) /YX /FD /c +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 +# ADD LINK32 setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\dbgbin\xmlwf.exe" + +!ENDIF + +# Begin Target + +# Name "xmlwf - Win32 Release" +# Name "xmlwf - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\codepage.c +# End Source File +# Begin Source File + +SOURCE=.\readfilemap.c +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\unixfilemap.c +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\win32filemap.c +# End Source File +# Begin Source File + +SOURCE=.\xmlfile.c +# End Source File +# Begin Source File + +SOURCE=.\xmlwf.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\codepage.h +# End Source File +# Begin Source File + +SOURCE=.\xmlfile.h +# End Source File +# Begin Source File + +SOURCE=.\xmltchar.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/Build/source/extra/expat/xmlwf/xmlwin32url.cxx b/Build/source/extra/expat/xmlwf/xmlwin32url.cxx new file mode 100644 index 00000000000..4f33aa8e75a --- /dev/null +++ b/Build/source/extra/expat/xmlwf/xmlwin32url.cxx @@ -0,0 +1,371 @@ +#include "xmlparse.h" +#ifdef XML_UNICODE +#define UNICODE +#endif +#include +#include +#include +#include +#include +#include "xmlurl.h" +#include "xmlmime.h" + +static +int processURL(XML_Parser parser, IMoniker *baseMoniker, const XML_Char *url); + +typedef void (*StopHandler)(void *, HRESULT); + +class Callback : public IBindStatusCallback { +public: + // IUnknown methods + STDMETHODIMP QueryInterface(REFIID,void **); + STDMETHODIMP_(ULONG) AddRef(); + STDMETHODIMP_(ULONG) Release(); + // IBindStatusCallback methods + STDMETHODIMP OnStartBinding(DWORD, IBinding *); + STDMETHODIMP GetPriority(LONG *); + STDMETHODIMP OnLowResource(DWORD); + STDMETHODIMP OnProgress(ULONG, ULONG, ULONG, LPCWSTR); + STDMETHODIMP OnStopBinding(HRESULT, LPCWSTR); + STDMETHODIMP GetBindInfo(DWORD *, BINDINFO *); + STDMETHODIMP OnDataAvailable(DWORD, DWORD, FORMATETC *, STGMEDIUM *); + STDMETHODIMP OnObjectAvailable(REFIID, IUnknown *); + Callback(XML_Parser, IMoniker *, StopHandler, void *); + ~Callback(); + int externalEntityRef(const XML_Char *context, const XML_Char *systemId, const XML_Char *publicId); +private: + XML_Parser parser_; + IMoniker *baseMoniker_; + DWORD totalRead_; + ULONG ref_; + IBinding *pBinding_; + StopHandler stopHandler_; + void *stopArg_; +}; + +STDMETHODIMP_(ULONG) Callback::AddRef() +{ + return ref_++; +} + +STDMETHODIMP_(ULONG) Callback::Release() +{ + if (--ref_ == 0) { + delete this; + return 0; + } + return ref_; +} + +STDMETHODIMP Callback::QueryInterface(REFIID riid, void** ppv) +{ + if (IsEqualGUID(riid, IID_IUnknown)) + *ppv = (IUnknown *)this; + else if (IsEqualGUID(riid, IID_IBindStatusCallback)) + *ppv = (IBindStatusCallback *)this; + else + return E_NOINTERFACE; + ((LPUNKNOWN)*ppv)->AddRef(); + return S_OK; +} + +STDMETHODIMP Callback::OnStartBinding(DWORD, IBinding* pBinding) +{ + pBinding_ = pBinding; + pBinding->AddRef(); + return S_OK; +} + +STDMETHODIMP Callback::GetPriority(LONG *) +{ + return E_NOTIMPL; +} + +STDMETHODIMP Callback::OnLowResource(DWORD) +{ + return E_NOTIMPL; +} + +STDMETHODIMP Callback::OnProgress(ULONG, ULONG, ULONG, LPCWSTR) +{ + return S_OK; +} + +STDMETHODIMP Callback::OnStopBinding(HRESULT hr, LPCWSTR szError) +{ + if (pBinding_) { + pBinding_->Release(); + pBinding_ = 0; + } + if (baseMoniker_) { + baseMoniker_->Release(); + baseMoniker_ = 0; + } + stopHandler_(stopArg_, hr); + return S_OK; +} + +STDMETHODIMP Callback::GetBindInfo(DWORD* pgrfBINDF, BINDINFO* pbindinfo) +{ + *pgrfBINDF = BINDF_ASYNCHRONOUS; + return S_OK; +} + +static +void reportError(XML_Parser parser) +{ + int code = XML_GetErrorCode(parser); + const XML_Char *message = XML_ErrorString(code); + if (message) + _ftprintf(stderr, _T("%s:%d:%ld: %s\n"), + XML_GetBase(parser), + XML_GetErrorLineNumber(parser), + XML_GetErrorColumnNumber(parser), + message); + else + _ftprintf(stderr, _T("%s: (unknown message %d)\n"), XML_GetBase(parser), code); +} + +STDMETHODIMP Callback::OnDataAvailable(DWORD grfBSCF, + DWORD dwSize, + FORMATETC *pfmtetc, + STGMEDIUM* pstgmed) +{ + if (grfBSCF & BSCF_FIRSTDATANOTIFICATION) { + IWinInetHttpInfo *hp; + HRESULT hr = pBinding_->QueryInterface(IID_IWinInetHttpInfo, (void **)&hp); + if (SUCCEEDED(hr)) { + char contentType[1024]; + DWORD bufSize = sizeof(contentType); + DWORD flags = 0; + contentType[0] = 0; + hr = hp->QueryInfo(HTTP_QUERY_CONTENT_TYPE, contentType, &bufSize, 0, NULL); + if (SUCCEEDED(hr)) { + char charset[CHARSET_MAX]; + getXMLCharset(contentType, charset); + if (charset[0]) { +#ifdef XML_UNICODE + XML_Char wcharset[CHARSET_MAX]; + XML_Char *p1 = wcharset; + const char *p2 = charset; + while ((*p1++ = (unsigned char)*p2++) != 0) + ; + XML_SetEncoding(parser_, wcharset); +#else + XML_SetEncoding(parser_, charset); +#endif + } + } + hp->Release(); + } + } + if (!parser_) + return E_ABORT; + if (pstgmed->tymed == TYMED_ISTREAM) { + while (totalRead_ < dwSize) { +#define READ_MAX (64*1024) + DWORD nToRead = dwSize - totalRead_; + if (nToRead > READ_MAX) + nToRead = READ_MAX; + void *buf = XML_GetBuffer(parser_, nToRead); + if (!buf) { + _ftprintf(stderr, _T("out of memory\n")); + return E_ABORT; + } + DWORD nRead; + HRESULT hr = pstgmed->pstm->Read(buf, nToRead, &nRead); + if (SUCCEEDED(hr)) { + totalRead_ += nRead; + if (!XML_ParseBuffer(parser_, + nRead, + (grfBSCF & BSCF_LASTDATANOTIFICATION) != 0 + && totalRead_ == dwSize)) { + reportError(parser_); + return E_ABORT; + } + } + } + } + return S_OK; +} + +STDMETHODIMP Callback::OnObjectAvailable(REFIID, IUnknown *) +{ + return S_OK; +} + +int Callback::externalEntityRef(const XML_Char *context, const XML_Char *systemId, const XML_Char *publicId) +{ + XML_Parser entParser = XML_ExternalEntityParserCreate(parser_, context, 0); + XML_SetBase(entParser, systemId); + int ret = processURL(entParser, baseMoniker_, systemId); + XML_ParserFree(entParser); + return ret; +} + +Callback::Callback(XML_Parser parser, IMoniker *baseMoniker, StopHandler stopHandler, void *stopArg) +: parser_(parser), + baseMoniker_(baseMoniker), + ref_(0), + pBinding_(0), + totalRead_(0), + stopHandler_(stopHandler), + stopArg_(stopArg) +{ + if (baseMoniker_) + baseMoniker_->AddRef(); +} + +Callback::~Callback() +{ + if (pBinding_) + pBinding_->Release(); + if (baseMoniker_) + baseMoniker_->Release(); +} + +static +int externalEntityRef(void *arg, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId) +{ + return ((Callback *)arg)->externalEntityRef(context, systemId, publicId); +} + + +static +HRESULT openStream(XML_Parser parser, + IMoniker *baseMoniker, + const XML_Char *uri, + StopHandler stopHandler, void *stopArg) +{ + if (!XML_SetBase(parser, uri)) + return E_OUTOFMEMORY; + HRESULT hr; + IMoniker *m; +#ifdef XML_UNICODE + hr = CreateURLMoniker(0, uri, &m); +#else + LPWSTR uriw = new wchar_t[strlen(uri) + 1]; + for (int i = 0;; i++) { + uriw[i] = uri[i]; + if (uriw[i] == 0) + break; + } + hr = CreateURLMoniker(baseMoniker, uriw, &m); + delete [] uriw; +#endif + if (FAILED(hr)) + return hr; + IBindStatusCallback *cb = new Callback(parser, m, stopHandler, stopArg); + XML_SetExternalEntityRefHandler(parser, externalEntityRef); + XML_SetExternalEntityRefHandlerArg(parser, cb); + cb->AddRef(); + IBindCtx *b; + if (FAILED(hr = CreateAsyncBindCtx(0, cb, 0, &b))) { + cb->Release(); + m->Release(); + return hr; + } + cb->Release(); + IStream *pStream; + hr = m->BindToStorage(b, 0, IID_IStream, (void **)&pStream); + if (SUCCEEDED(hr)) { + if (pStream) + pStream->Release(); + } + if (hr == MK_S_ASYNCHRONOUS) + hr = S_OK; + m->Release(); + b->Release(); + return hr; +} + +struct QuitInfo { + const XML_Char *url; + HRESULT hr; + int stop; +}; + +static +void winPerror(const XML_Char *url, HRESULT hr) +{ + LPVOID buf; + if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER + | FORMAT_MESSAGE_FROM_HMODULE, + GetModuleHandleA("urlmon.dll"), + hr, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &buf, + 0, + NULL) + || FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER + | FORMAT_MESSAGE_FROM_SYSTEM, + 0, + hr, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &buf, + 0, + NULL)) { + /* The system error messages seem to end with a newline. */ + _ftprintf(stderr, _T("%s: %s"), url, buf); + fflush(stderr); + LocalFree(buf); + } + else + _ftprintf(stderr, _T("%s: error %x\n"), url, hr); +} + +static void threadQuit(void *p, HRESULT hr) +{ + QuitInfo *qi = (QuitInfo *)p; + qi->hr = hr; + qi->stop = 1; +} + +extern "C" +int XML_URLInit() +{ + return SUCCEEDED(CoInitialize(0)); +} + +extern "C" +void XML_URLUninit() +{ + CoUninitialize(); +} + +static +int processURL(XML_Parser parser, IMoniker *baseMoniker, const XML_Char *url) +{ + QuitInfo qi; + qi.stop = 0; + qi.url = url; + + XML_SetBase(parser, url); + HRESULT hr = openStream(parser, baseMoniker, url, threadQuit, &qi); + if (FAILED(hr)) { + winPerror(url, hr); + return 0; + } + else if (FAILED(qi.hr)) { + winPerror(url, qi.hr); + return 0; + } + MSG msg; + while (!qi.stop && GetMessage (&msg, NULL, 0, 0)) { + TranslateMessage (&msg); + DispatchMessage (&msg); + } + return 1; +} + +extern "C" +int XML_ProcessURL(XML_Parser parser, + const XML_Char *url, + unsigned flags) +{ + return processURL(parser, 0, url); +} diff --git a/Build/source/extra/jpeg/README b/Build/source/extra/jpeg/README new file mode 100644 index 00000000000..86cc20669d6 --- /dev/null +++ b/Build/source/extra/jpeg/README @@ -0,0 +1,385 @@ +The Independent JPEG Group's JPEG software +========================================== + +README for release 6b of 27-Mar-1998 +==================================== + +This distribution contains the sixth public release of the Independent JPEG +Group's free JPEG software. You are welcome to redistribute this software and +to use it for any purpose, subject to the conditions under LEGAL ISSUES, below. + +Serious users of this software (particularly those incorporating it into +larger programs) should contact IJG at jpeg-info@uunet.uu.net to be added to +our electronic mailing list. Mailing list members are notified of updates +and have a chance to participate in technical discussions, etc. + +This software is the work of Tom Lane, Philip Gladstone, Jim Boucher, +Lee Crocker, Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, +Guido Vollbeding, Ge' Weijers, and other members of the Independent JPEG +Group. + +IJG is not affiliated with the official ISO JPEG standards committee. + + +DOCUMENTATION ROADMAP +===================== + +This file contains the following sections: + +OVERVIEW General description of JPEG and the IJG software. +LEGAL ISSUES Copyright, lack of warranty, terms of distribution. +REFERENCES Where to learn more about JPEG. +ARCHIVE LOCATIONS Where to find newer versions of this software. +RELATED SOFTWARE Other stuff you should get. +FILE FORMAT WARS Software *not* to get. +TO DO Plans for future IJG releases. + +Other documentation files in the distribution are: + +User documentation: + install.doc How to configure and install the IJG software. + usage.doc Usage instructions for cjpeg, djpeg, jpegtran, + rdjpgcom, and wrjpgcom. + *.1 Unix-style man pages for programs (same info as usage.doc). + wizard.doc Advanced usage instructions for JPEG wizards only. + change.log Version-to-version change highlights. +Programmer and internal documentation: + libjpeg.doc How to use the JPEG library in your own programs. + example.c Sample code for calling the JPEG library. + structure.doc Overview of the JPEG library's internal structure. + filelist.doc Road map of IJG files. + coderules.doc Coding style rules --- please read if you contribute code. + +Please read at least the files install.doc and usage.doc. Useful information +can also be found in the JPEG FAQ (Frequently Asked Questions) article. See +ARCHIVE LOCATIONS below to find out where to obtain the FAQ article. + +If you want to understand how the JPEG code works, we suggest reading one or +more of the REFERENCES, then looking at the documentation files (in roughly +the order listed) before diving into the code. + + +OVERVIEW +======== + +This package contains C software to implement JPEG image compression and +decompression. JPEG (pronounced "jay-peg") is a standardized compression +method for full-color and gray-scale images. JPEG is intended for compressing +"real-world" scenes; line drawings, cartoons and other non-realistic images +are not its strong suit. JPEG is lossy, meaning that the output image is not +exactly identical to the input image. Hence you must not use JPEG if you +have to have identical output bits. However, on typical photographic images, +very good compression levels can be obtained with no visible change, and +remarkably high compression levels are possible if you can tolerate a +low-quality image. For more details, see the references, or just experiment +with various compression settings. + +This software implements JPEG baseline, extended-sequential, and progressive +compression processes. Provision is made for supporting all variants of these +processes, although some uncommon parameter settings aren't implemented yet. +For legal reasons, we are not distributing code for the arithmetic-coding +variants of JPEG; see LEGAL ISSUES. We have made no provision for supporting +the hierarchical or lossless processes defined in the standard. + +We provide a set of library routines for reading and writing JPEG image files, +plus two sample applications "cjpeg" and "djpeg", which use the library to +perform conversion between JPEG and some other popular image file formats. +The library is intended to be reused in other applications. + +In order to support file conversion and viewing software, we have included +considerable functionality beyond the bare JPEG coding/decoding capability; +for example, the color quantization modules are not strictly part of JPEG +decoding, but they are essential for output to colormapped file formats or +colormapped displays. These extra functions can be compiled out of the +library if not required for a particular application. We have also included +"jpegtran", a utility for lossless transcoding between different JPEG +processes, and "rdjpgcom" and "wrjpgcom", two simple applications for +inserting and extracting textual comments in JFIF files. + +The emphasis in designing this software has been on achieving portability and +flexibility, while also making it fast enough to be useful. In particular, +the software is not intended to be read as a tutorial on JPEG. (See the +REFERENCES section for introductory material.) Rather, it is intended to +be reliable, portable, industrial-strength code. We do not claim to have +achieved that goal in every aspect of the software, but we strive for it. + +We welcome the use of this software as a component of commercial products. +No royalty is required, but we do ask for an acknowledgement in product +documentation, as described under LEGAL ISSUES. + + +LEGAL ISSUES +============ + +In plain English: + +1. We don't promise that this software works. (But if you find any bugs, + please let us know!) +2. You can use this software for whatever you want. You don't have to pay us. +3. You may not pretend that you wrote this software. If you use it in a + program, you must acknowledge somewhere in your documentation that + you've used the IJG code. + +In legalese: + +The authors make NO WARRANTY or representation, either express or implied, +with respect to this software, its quality, accuracy, merchantability, or +fitness for a particular purpose. This software is provided "AS IS", and you, +its user, assume the entire risk as to its quality and accuracy. + +This software is copyright (C) 1991-1998, Thomas G. Lane. +All Rights Reserved except as specified below. + +Permission is hereby granted to use, copy, modify, and distribute this +software (or portions thereof) for any purpose, without fee, subject to these +conditions: +(1) If any part of the source code for this software is distributed, then this +README file must be included, with this copyright and no-warranty notice +unaltered; and any additions, deletions, or changes to the original files +must be clearly indicated in accompanying documentation. +(2) If only executable code is distributed, then the accompanying +documentation must state that "this software is based in part on the work of +the Independent JPEG Group". +(3) Permission for use of this software is granted only if the user accepts +full responsibility for any undesirable consequences; the authors accept +NO LIABILITY for damages of any kind. + +These conditions apply to any software derived from or based on the IJG code, +not just to the unmodified library. If you use our work, you ought to +acknowledge us. + +Permission is NOT granted for the use of any IJG author's name or company name +in advertising or publicity relating to this software or products derived from +it. This software may be referred to only as "the Independent JPEG Group's +software". + +We specifically permit and encourage the use of this software as the basis of +commercial products, provided that all warranty or liability claims are +assumed by the product vendor. + + +ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, +sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. +ansi2knr.c is NOT covered by the above copyright and conditions, but instead +by the usual distribution terms of the Free Software Foundation; principally, +that you must include source code if you redistribute it. (See the file +ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part +of any program generated from the IJG code, this does not limit you more than +the foregoing paragraphs do. + +The Unix configuration script "configure" was produced with GNU Autoconf. +It is copyright by the Free Software Foundation but is freely distributable. +The same holds for its supporting scripts (config.guess, config.sub, +ltconfig, ltmain.sh). Another support script, install-sh, is copyright +by M.I.T. but is also freely distributable. + +It appears that the arithmetic coding option of the JPEG spec is covered by +patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot +legally be used without obtaining one or more licenses. For this reason, +support for arithmetic coding has been removed from the free JPEG software. +(Since arithmetic coding provides only a marginal gain over the unpatented +Huffman mode, it is unlikely that very many implementations will support it.) +So far as we are aware, there are no patent restrictions on the remaining +code. + +The IJG distribution formerly included code to read and write GIF files. +To avoid entanglement with the Unisys LZW patent, GIF reading support has +been removed altogether, and the GIF writer has been simplified to produce +"uncompressed GIFs". This technique does not use the LZW algorithm; the +resulting GIF files are larger than usual, but are readable by all standard +GIF decoders. + +We are required to state that + "The Graphics Interchange Format(c) is the Copyright property of + CompuServe Incorporated. GIF(sm) is a Service Mark property of + CompuServe Incorporated." + + +REFERENCES +========== + +We highly recommend reading one or more of these references before trying to +understand the innards of the JPEG software. + +The best short technical introduction to the JPEG compression algorithm is + Wallace, Gregory K. "The JPEG Still Picture Compression Standard", + Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44. +(Adjacent articles in that issue discuss MPEG motion picture compression, +applications of JPEG, and related topics.) If you don't have the CACM issue +handy, a PostScript file containing a revised version of Wallace's article is +available at ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz. The file (actually +a preprint for an article that appeared in IEEE Trans. Consumer Electronics) +omits the sample images that appeared in CACM, but it includes corrections +and some added material. Note: the Wallace article is copyright ACM and IEEE, +and it may not be used for commercial purposes. + +A somewhat less technical, more leisurely introduction to JPEG can be found in +"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by +M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides +good explanations and example C code for a multitude of compression methods +including JPEG. It is an excellent source if you are comfortable reading C +code but don't know much about data compression in general. The book's JPEG +sample code is far from industrial-strength, but when you are ready to look +at a full implementation, you've got one here... + +The best full description of JPEG is the textbook "JPEG Still Image Data +Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published +by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. Price US$59.95, 638 pp. +The book includes the complete text of the ISO JPEG standards (DIS 10918-1 +and draft DIS 10918-2). This is by far the most complete exposition of JPEG +in existence, and we highly recommend it. + +The JPEG standard itself is not available electronically; you must order a +paper copy through ISO or ITU. (Unless you feel a need to own a certified +official copy, we recommend buying the Pennebaker and Mitchell book instead; +it's much cheaper and includes a great deal of useful explanatory material.) +In the USA, copies of the standard may be ordered from ANSI Sales at (212) +642-4900, or from Global Engineering Documents at (800) 854-7179. (ANSI +doesn't take credit card orders, but Global does.) It's not cheap: as of +1992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7% +shipping/handling. The standard is divided into two parts, Part 1 being the +actual specification, while Part 2 covers compliance testing methods. Part 1 +is titled "Digital Compression and Coding of Continuous-tone Still Images, +Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS +10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of +Continuous-tone Still Images, Part 2: Compliance testing" and has document +numbers ISO/IEC IS 10918-2, ITU-T T.83. + +Some extensions to the original JPEG standard are defined in JPEG Part 3, +a newer ISO standard numbered ISO/IEC IS 10918-3 and ITU-T T.84. IJG +currently does not support any Part 3 extensions. + +The JPEG standard does not specify all details of an interchangeable file +format. For the omitted details we follow the "JFIF" conventions, revision +1.02. A copy of the JFIF spec is available from: + Literature Department + C-Cube Microsystems, Inc. + 1778 McCarthy Blvd. + Milpitas, CA 95035 + phone (408) 944-6300, fax (408) 944-6314 +A PostScript version of this document is available by FTP at +ftp://ftp.uu.net/graphics/jpeg/jfif.ps.gz. There is also a plain text +version at ftp://ftp.uu.net/graphics/jpeg/jfif.txt.gz, but it is missing +the figures. + +The TIFF 6.0 file format specification can be obtained by FTP from +ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme +found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems. +IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6). +Instead, we recommend the JPEG design proposed by TIFF Technical Note #2 +(Compression tag 7). Copies of this Note can be obtained from ftp.sgi.com or +from ftp://ftp.uu.net/graphics/jpeg/. It is expected that the next revision +of the TIFF spec will replace the 6.0 JPEG design with the Note's design. +Although IJG's own code does not support TIFF/JPEG, the free libtiff library +uses our library to implement TIFF/JPEG per the Note. libtiff is available +from ftp://ftp.sgi.com/graphics/tiff/. + + +ARCHIVE LOCATIONS +================= + +The "official" archive site for this software is ftp.uu.net (Internet +address 192.48.96.9). The most recent released version can always be found +there in directory graphics/jpeg. This particular version will be archived +as ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz. If you don't have +direct Internet access, UUNET's archives are also available via UUCP; contact +help@uunet.uu.net for information on retrieving files that way. + +Numerous Internet sites maintain copies of the UUNET files. However, only +ftp.uu.net is guaranteed to have the latest official version. + +You can also obtain this software in DOS-compatible "zip" archive format from +the SimTel archives (ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/), or +on CompuServe in the Graphics Support forum (GO CIS:GRAPHSUP), library 12 +"JPEG Tools". Again, these versions may sometimes lag behind the ftp.uu.net +release. + +The JPEG FAQ (Frequently Asked Questions) article is a useful source of +general information about JPEG. It is updated constantly and therefore is +not included in this distribution. The FAQ is posted every two weeks to +Usenet newsgroups comp.graphics.misc, news.answers, and other groups. +It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/ +and other news.answers archive sites, including the official news.answers +archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/. +If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu +with body + send usenet/news.answers/jpeg-faq/part1 + send usenet/news.answers/jpeg-faq/part2 + + +RELATED SOFTWARE +================ + +Numerous viewing and image manipulation programs now support JPEG. (Quite a +few of them use this library to do so.) The JPEG FAQ described above lists +some of the more popular free and shareware viewers, and tells where to +obtain them on Internet. + +If you are on a Unix machine, we highly recommend Jef Poskanzer's free +PBMPLUS software, which provides many useful operations on PPM-format image +files. In particular, it can convert PPM images to and from a wide range of +other formats, thus making cjpeg/djpeg considerably more useful. The latest +version is distributed by the NetPBM group, and is available from numerous +sites, notably ftp://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/. +Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software is; +you are likely to have difficulty making it work on any non-Unix machine. + +A different free JPEG implementation, written by the PVRG group at Stanford, +is available from ftp://havefun.stanford.edu/pub/jpeg/. This program +is designed for research and experimentation rather than production use; +it is slower, harder to use, and less portable than the IJG code, but it +is easier to read and modify. Also, the PVRG code supports lossless JPEG, +which we do not. (On the other hand, it doesn't do progressive JPEG.) + + +FILE FORMAT WARS +================ + +Some JPEG programs produce files that are not compatible with our library. +The root of the problem is that the ISO JPEG committee failed to specify a +concrete file format. Some vendors "filled in the blanks" on their own, +creating proprietary formats that no one else could read. (For example, none +of the early commercial JPEG implementations for the Macintosh were able to +exchange compressed files.) + +The file format we have adopted is called JFIF (see REFERENCES). This format +has been agreed to by a number of major commercial JPEG vendors, and it has +become the de facto standard. JFIF is a minimal or "low end" representation. +We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF +Technical Note #2) for "high end" applications that need to record a lot of +additional data about an image. TIFF/JPEG is fairly new and not yet widely +supported, unfortunately. + +The upcoming JPEG Part 3 standard defines a file format called SPIFF. +SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should +be able to read the most common variant of SPIFF. SPIFF has some technical +advantages over JFIF, but its major claim to fame is simply that it is an +official standard rather than an informal one. At this point it is unclear +whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto +standard. IJG intends to support SPIFF once the standard is frozen, but we +have not decided whether it should become our default output format or not. +(In any case, our decoder will remain capable of reading JFIF indefinitely.) + +Various proprietary file formats incorporating JPEG compression also exist. +We have little or no sympathy for the existence of these formats. Indeed, +one of the original reasons for developing this free software was to help +force convergence on common, open format standards for JPEG files. Don't +use a proprietary file format! + + +TO DO +===== + +The major thrust for v7 will probably be improvement of visual quality. +The current method for scaling the quantization tables is known not to be +very good at low Q values. We also intend to investigate block boundary +smoothing, "poor man's variable quantization", and other means of improving +quality-vs-file-size performance without sacrificing compatibility. + +In future versions, we are considering supporting some of the upcoming JPEG +Part 3 extensions --- principally, variable quantization and the SPIFF file +format. + +As always, speeding things up is of great interest. + +Please send bug reports, offers of help, etc. to jpeg-info@uunet.uu.net. diff --git a/Build/source/extra/jpeg/ansi2knr.1 b/Build/source/extra/jpeg/ansi2knr.1 new file mode 100644 index 00000000000..f9ee5a631c2 --- /dev/null +++ b/Build/source/extra/jpeg/ansi2knr.1 @@ -0,0 +1,36 @@ +.TH ANSI2KNR 1 "19 Jan 1996" +.SH NAME +ansi2knr \- convert ANSI C to Kernighan & Ritchie C +.SH SYNOPSIS +.I ansi2knr +[--varargs] input_file [output_file] +.SH DESCRIPTION +If no output_file is supplied, output goes to stdout. +.br +There are no error messages. +.sp +.I ansi2knr +recognizes function definitions by seeing a non-keyword identifier at the left +margin, followed by a left parenthesis, with a right parenthesis as the last +character on the line, and with a left brace as the first token on the +following line (ignoring possible intervening comments). It will recognize a +multi-line header provided that no intervening line ends with a left or right +brace or a semicolon. These algorithms ignore whitespace and comments, except +that the function name must be the first thing on the line. +.sp +The following constructs will confuse it: +.br + - Any other construct that starts at the left margin and follows the +above syntax (such as a macro or function call). +.br + - Some macros that tinker with the syntax of the function header. +.sp +The --varargs switch is obsolete, and is recognized only for +backwards compatibility. The present version of +.I ansi2knr +will always attempt to convert a ... argument to va_alist and va_dcl. +.SH AUTHOR +L. Peter Deutsch wrote the original ansi2knr and +continues to maintain the current version; most of the code in the current +version is his work. ansi2knr also includes contributions by Francois +Pinard and Jim Avera . diff --git a/Build/source/extra/jpeg/ansi2knr.c b/Build/source/extra/jpeg/ansi2knr.c new file mode 100644 index 00000000000..4e05fc2d321 --- /dev/null +++ b/Build/source/extra/jpeg/ansi2knr.c @@ -0,0 +1,693 @@ +/* ansi2knr.c */ +/* Convert ANSI C function definitions to K&R ("traditional C") syntax */ + +/* +ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY. No author or distributor accepts responsibility to anyone for the +consequences of using it or for whether it serves any particular purpose or +works at all, unless he says so in writing. Refer to the GNU General Public +License (the "GPL") for full details. + +Everyone is granted permission to copy, modify and redistribute ansi2knr, +but only under the conditions described in the GPL. A copy of this license +is supposed to have been given to you along with ansi2knr so you can know +your rights and responsibilities. It should be in a file named COPYLEFT. +[In the IJG distribution, the GPL appears below, not in a separate file.] +Among other things, the copyright notice and this notice must be preserved +on all copies. + +We explicitly state here what we believe is already implied by the GPL: if +the ansi2knr program is distributed as a separate set of sources and a +separate executable file which are aggregated on a storage medium together +with another program, this in itself does not bring the other program under +the GPL, nor does the mere fact that such a program or the procedures for +constructing it invoke the ansi2knr executable bring any other part of the +program under the GPL. +*/ + +/* +---------- Here is the GNU GPL file COPYLEFT, referred to above ---------- +----- These terms do NOT apply to the JPEG software itself; see README ------ + + GHOSTSCRIPT GENERAL PUBLIC LICENSE + (Clarified 11 Feb 1988) + + Copyright (C) 1988 Richard M. Stallman + Everyone is permitted to copy and distribute verbatim copies of this + license, but changing it is not allowed. You can also use this wording + to make the terms for other programs. + + The license agreements of most software companies keep you at the +mercy of those companies. By contrast, our general public license is +intended to give everyone the right to share Ghostscript. To make sure +that you get the rights we want you to have, we need to make +restrictions that forbid anyone to deny you these rights or to ask you +to surrender the rights. Hence this license agreement. + + Specifically, we want to make sure that you have the right to give +away copies of Ghostscript, that you receive source code or else can get +it if you want it, that you can change Ghostscript or use pieces of it +in new free programs, and that you know you can do these things. + + To make sure that everyone has such rights, we have to forbid you to +deprive anyone else of these rights. For example, if you distribute +copies of Ghostscript, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + Also, for our own protection, we must make certain that everyone finds +out that there is no warranty for Ghostscript. If Ghostscript is +modified by someone else and passed on, we want its recipients to know +that what they have is not what we distributed, so that any problems +introduced by others will not reflect on our reputation. + + Therefore we (Richard M. Stallman and the Free Software Foundation, +Inc.) make the following terms which say what you must do to be allowed +to distribute or change Ghostscript. + + + COPYING POLICIES + + 1. You may copy and distribute verbatim copies of Ghostscript source +code as you receive it, in any medium, provided that you conspicuously +and appropriately publish on each copy a valid copyright and license +notice "Copyright (C) 1989 Aladdin Enterprises. All rights reserved. +Distributed by Free Software Foundation, Inc." (or with whatever year is +appropriate); keep intact the notices on all files that refer to this +License Agreement and to the absence of any warranty; and give any other +recipients of the Ghostscript program a copy of this License Agreement +along with the program. You may charge a distribution fee for the +physical act of transferring a copy. + + 2. You may modify your copy or copies of Ghostscript or any portion of +it, and copy and distribute such modifications under the terms of +Paragraph 1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating + that you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, + that in whole or in part contains or is a derivative of Ghostscript + or any part thereof, to be licensed at no charge to all third + parties on terms identical to those contained in this License + Agreement (except that you may choose to grant more extensive + warranty protection to some or all third parties, at your option). + + c) You may charge a distribution fee for the physical act of + transferring a copy, and you may at your option offer warranty + protection in exchange for a fee. + +Mere aggregation of another unrelated program with this program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other program under the scope of these terms. + + 3. You may copy and distribute Ghostscript (or a portion or derivative +of it, under Paragraph 2) in object code or executable form under the +terms of Paragraphs 1 and 2 above provided that you also do one of the +following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal + shipping charge) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +For an executable file, complete source code means all the source code for +all modules it contains; but, as a special exception, it need not include +source code for modules which are standard libraries that accompany the +operating system on which the executable file runs. + + 4. You may not copy, sublicense, distribute or transfer Ghostscript +except as expressly provided under this License Agreement. Any attempt +otherwise to copy, sublicense, distribute or transfer Ghostscript is +void and your rights to use the program under this License agreement +shall be automatically terminated. However, parties who have received +computer software programs from you with this License Agreement will not +have their licenses terminated so long as such parties remain in full +compliance. + + 5. If you wish to incorporate parts of Ghostscript into other free +programs whose distribution conditions are different, write to the Free +Software Foundation at 675 Mass Ave, Cambridge, MA 02139. We have not +yet worked out a simple rule that can be stated here, but we will often +permit this. We will be guided by the two goals of preserving the free +status of all derivatives of our free software and of promoting the +sharing and reuse of software. + +Your comments and suggestions about our licensing policies and our +software are welcome! Please contact the Free Software Foundation, +Inc., 675 Mass Ave, Cambridge, MA 02139, or call (617) 876-3296. + + NO WARRANTY + + BECAUSE GHOSTSCRIPT IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY +NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT +WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC, RICHARD +M. STALLMAN, ALADDIN ENTERPRISES, L. PETER DEUTSCH, AND/OR OTHER PARTIES +PROVIDE GHOSTSCRIPT "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER +EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE +ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF GHOSTSCRIPT IS WITH +YOU. SHOULD GHOSTSCRIPT PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL +NECESSARY SERVICING, REPAIR OR CORRECTION. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M. +STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., L. PETER DEUTSCH, ALADDIN +ENTERPRISES, AND/OR ANY OTHER PARTY WHO MAY MODIFY AND REDISTRIBUTE +GHOSTSCRIPT AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING +ANY LOST PROFITS, LOST MONIES, OR OTHER SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE +(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED +INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A FAILURE OF THE +PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) GHOSTSCRIPT, EVEN IF YOU +HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM +BY ANY OTHER PARTY. + +-------------------- End of file COPYLEFT ------------------------------ +*/ + +/* + * Usage: + ansi2knr input_file [output_file] + * If no output_file is supplied, output goes to stdout. + * There are no error messages. + * + * ansi2knr recognizes function definitions by seeing a non-keyword + * identifier at the left margin, followed by a left parenthesis, + * with a right parenthesis as the last character on the line, + * and with a left brace as the first token on the following line + * (ignoring possible intervening comments). + * It will recognize a multi-line header provided that no intervening + * line ends with a left or right brace or a semicolon. + * These algorithms ignore whitespace and comments, except that + * the function name must be the first thing on the line. + * The following constructs will confuse it: + * - Any other construct that starts at the left margin and + * follows the above syntax (such as a macro or function call). + * - Some macros that tinker with the syntax of the function header. + */ + +/* + * The original and principal author of ansi2knr is L. Peter Deutsch + * . Other authors are noted in the change history + * that follows (in reverse chronological order): + lpd 96-01-21 added code to cope with not HAVE_CONFIG_H and with + compilers that don't understand void, as suggested by + Tom Lane + lpd 96-01-15 changed to require that the first non-comment token + on the line following a function header be a left brace, + to reduce sensitivity to macros, as suggested by Tom Lane + + lpd 95-06-22 removed #ifndefs whose sole purpose was to define + undefined preprocessor symbols as 0; changed all #ifdefs + for configuration symbols to #ifs + lpd 95-04-05 changed copyright notice to make it clear that + including ansi2knr in a program does not bring the entire + program under the GPL + lpd 94-12-18 added conditionals for systems where ctype macros + don't handle 8-bit characters properly, suggested by + Francois Pinard ; + removed --varargs switch (this is now the default) + lpd 94-10-10 removed CONFIG_BROKETS conditional + lpd 94-07-16 added some conditionals to help GNU `configure', + suggested by Francois Pinard ; + properly erase prototype args in function parameters, + contributed by Jim Avera ; + correct error in writeblanks (it shouldn't erase EOLs) + lpd 89-xx-xx original version + */ + +/* Most of the conditionals here are to make ansi2knr work with */ +/* or without the GNU configure machinery. */ + +#if HAVE_CONFIG_H +# include +#endif + +#include +#include + +#if HAVE_CONFIG_H + +/* + For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h). + This will define HAVE_CONFIG_H and so, activate the following lines. + */ + +# if STDC_HEADERS || HAVE_STRING_H +# include +# else +# include +# endif + +#else /* not HAVE_CONFIG_H */ + +/* Otherwise do it the hard way */ + +# ifdef BSD +# include +# else +# ifdef VMS + extern int strlen(), strncmp(); +# else +# include +# endif +# endif + +#endif /* not HAVE_CONFIG_H */ + +#if STDC_HEADERS +# include +#else +/* + malloc and free should be declared in stdlib.h, + but if you've got a K&R compiler, they probably aren't. + */ +# ifdef MSDOS +# include +# else +# ifdef VMS + extern char *malloc(); + extern void free(); +# else + extern char *malloc(); + extern int free(); +# endif +# endif + +#endif + +/* + * The ctype macros don't always handle 8-bit characters correctly. + * Compensate for this here. + */ +#ifdef isascii +# undef HAVE_ISASCII /* just in case */ +# define HAVE_ISASCII 1 +#else +#endif +#if STDC_HEADERS || !HAVE_ISASCII +# define is_ascii(c) 1 +#else +# define is_ascii(c) isascii(c) +#endif + +#define is_space(c) (is_ascii(c) && isspace(c)) +#define is_alpha(c) (is_ascii(c) && isalpha(c)) +#define is_alnum(c) (is_ascii(c) && isalnum(c)) + +/* Scanning macros */ +#define isidchar(ch) (is_alnum(ch) || (ch) == '_') +#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_') + +/* Forward references */ +char *skipspace(); +int writeblanks(); +int test1(); +int convert1(); + +/* The main program */ +int +main(argc, argv) + int argc; + char *argv[]; +{ FILE *in, *out; +#define bufsize 5000 /* arbitrary size */ + char *buf; + char *line; + char *more; + /* + * In previous versions, ansi2knr recognized a --varargs switch. + * If this switch was supplied, ansi2knr would attempt to convert + * a ... argument to va_alist and va_dcl; if this switch was not + * supplied, ansi2knr would simply drop any such arguments. + * Now, ansi2knr always does this conversion, and we only + * check for this switch for backward compatibility. + */ + int convert_varargs = 1; + + if ( argc > 1 && argv[1][0] == '-' ) + { if ( !strcmp(argv[1], "--varargs") ) + { convert_varargs = 1; + argc--; + argv++; + } + else + { fprintf(stderr, "Unrecognized switch: %s\n", argv[1]); + exit(1); + } + } + switch ( argc ) + { + default: + printf("Usage: ansi2knr input_file [output_file]\n"); + exit(0); + case 2: + out = stdout; + break; + case 3: + out = fopen(argv[2], "w"); + if ( out == NULL ) + { fprintf(stderr, "Cannot open output file %s\n", argv[2]); + exit(1); + } + } + in = fopen(argv[1], "r"); + if ( in == NULL ) + { fprintf(stderr, "Cannot open input file %s\n", argv[1]); + exit(1); + } + fprintf(out, "#line 1 \"%s\"\n", argv[1]); + buf = malloc(bufsize); + line = buf; + while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL ) + { +test: line += strlen(line); + switch ( test1(buf) ) + { + case 2: /* a function header */ + convert1(buf, out, 1, convert_varargs); + break; + case 1: /* a function */ + /* Check for a { at the start of the next line. */ + more = ++line; +f: if ( line >= buf + (bufsize - 1) ) /* overflow check */ + goto wl; + if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL ) + goto wl; + switch ( *skipspace(more, 1) ) + { + case '{': + /* Definitely a function header. */ + convert1(buf, out, 0, convert_varargs); + fputs(more, out); + break; + case 0: + /* The next line was blank or a comment: */ + /* keep scanning for a non-comment. */ + line += strlen(line); + goto f; + default: + /* buf isn't a function header, but */ + /* more might be. */ + fputs(buf, out); + strcpy(buf, more); + line = buf; + goto test; + } + break; + case -1: /* maybe the start of a function */ + if ( line != buf + (bufsize - 1) ) /* overflow check */ + continue; + /* falls through */ + default: /* not a function */ +wl: fputs(buf, out); + break; + } + line = buf; + } + if ( line != buf ) + fputs(buf, out); + free(buf); + fclose(out); + fclose(in); + return 0; +} + +/* Skip over space and comments, in either direction. */ +char * +skipspace(p, dir) + register char *p; + register int dir; /* 1 for forward, -1 for backward */ +{ for ( ; ; ) + { while ( is_space(*p) ) + p += dir; + if ( !(*p == '/' && p[dir] == '*') ) + break; + p += dir; p += dir; + while ( !(*p == '*' && p[dir] == '/') ) + { if ( *p == 0 ) + return p; /* multi-line comment?? */ + p += dir; + } + p += dir; p += dir; + } + return p; +} + +/* + * Write blanks over part of a string. + * Don't overwrite end-of-line characters. + */ +int +writeblanks(start, end) + char *start; + char *end; +{ char *p; + for ( p = start; p < end; p++ ) + if ( *p != '\r' && *p != '\n' ) + *p = ' '; + return 0; +} + +/* + * Test whether the string in buf is a function definition. + * The string may contain and/or end with a newline. + * Return as follows: + * 0 - definitely not a function definition; + * 1 - definitely a function definition; + * 2 - definitely a function prototype (NOT USED); + * -1 - may be the beginning of a function definition, + * append another line and look again. + * The reason we don't attempt to convert function prototypes is that + * Ghostscript's declaration-generating macros look too much like + * prototypes, and confuse the algorithms. + */ +int +test1(buf) + char *buf; +{ register char *p = buf; + char *bend; + char *endfn; + int contin; + + if ( !isidfirstchar(*p) ) + return 0; /* no name at left margin */ + bend = skipspace(buf + strlen(buf) - 1, -1); + switch ( *bend ) + { + case ';': contin = 0 /*2*/; break; + case ')': contin = 1; break; + case '{': return 0; /* not a function */ + case '}': return 0; /* not a function */ + default: contin = -1; + } + while ( isidchar(*p) ) + p++; + endfn = p; + p = skipspace(p, 1); + if ( *p++ != '(' ) + return 0; /* not a function */ + p = skipspace(p, 1); + if ( *p == ')' ) + return 0; /* no parameters */ + /* Check that the apparent function name isn't a keyword. */ + /* We only need to check for keywords that could be followed */ + /* by a left parenthesis (which, unfortunately, is most of them). */ + { static char *words[] = + { "asm", "auto", "case", "char", "const", "double", + "extern", "float", "for", "if", "int", "long", + "register", "return", "short", "signed", "sizeof", + "static", "switch", "typedef", "unsigned", + "void", "volatile", "while", 0 + }; + char **key = words; + char *kp; + int len = endfn - buf; + + while ( (kp = *key) != 0 ) + { if ( strlen(kp) == len && !strncmp(kp, buf, len) ) + return 0; /* name is a keyword */ + key++; + } + } + return contin; +} + +/* Convert a recognized function definition or header to K&R syntax. */ +int +convert1(buf, out, header, convert_varargs) + char *buf; + FILE *out; + int header; /* Boolean */ + int convert_varargs; /* Boolean */ +{ char *endfn; + register char *p; + char **breaks; + unsigned num_breaks = 2; /* for testing */ + char **btop; + char **bp; + char **ap; + char *vararg = 0; + + /* Pre-ANSI implementations don't agree on whether strchr */ + /* is called strchr or index, so we open-code it here. */ + for ( endfn = buf; *(endfn++) != '('; ) + ; +top: p = endfn; + breaks = (char **)malloc(sizeof(char *) * num_breaks * 2); + if ( breaks == 0 ) + { /* Couldn't allocate break table, give up */ + fprintf(stderr, "Unable to allocate break table!\n"); + fputs(buf, out); + return -1; + } + btop = breaks + num_breaks * 2 - 2; + bp = breaks; + /* Parse the argument list */ + do + { int level = 0; + char *lp = NULL; + char *rp; + char *end = NULL; + + if ( bp >= btop ) + { /* Filled up break table. */ + /* Allocate a bigger one and start over. */ + free((char *)breaks); + num_breaks <<= 1; + goto top; + } + *bp++ = p; + /* Find the end of the argument */ + for ( ; end == NULL; p++ ) + { switch(*p) + { + case ',': + if ( !level ) end = p; + break; + case '(': + if ( !level ) lp = p; + level++; + break; + case ')': + if ( --level < 0 ) end = p; + else rp = p; + break; + case '/': + p = skipspace(p, 1) - 1; + break; + default: + ; + } + } + /* Erase any embedded prototype parameters. */ + if ( lp ) + writeblanks(lp + 1, rp); + p--; /* back up over terminator */ + /* Find the name being declared. */ + /* This is complicated because of procedure and */ + /* array modifiers. */ + for ( ; ; ) + { p = skipspace(p - 1, -1); + switch ( *p ) + { + case ']': /* skip array dimension(s) */ + case ')': /* skip procedure args OR name */ + { int level = 1; + while ( level ) + switch ( *--p ) + { + case ']': case ')': level++; break; + case '[': case '(': level--; break; + case '/': p = skipspace(p, -1) + 1; break; + default: ; + } + } + if ( *p == '(' && *skipspace(p + 1, 1) == '*' ) + { /* We found the name being declared */ + while ( !isidfirstchar(*p) ) + p = skipspace(p, 1) + 1; + goto found; + } + break; + default: + goto found; + } + } +found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' ) + { if ( convert_varargs ) + { *bp++ = "va_alist"; + vararg = p-2; + } + else + { p++; + if ( bp == breaks + 1 ) /* sole argument */ + writeblanks(breaks[0], p); + else + writeblanks(bp[-1] - 1, p); + bp--; + } + } + else + { while ( isidchar(*p) ) p--; + *bp++ = p+1; + } + p = end; + } + while ( *p++ == ',' ); + *bp = p; + /* Make a special check for 'void' arglist */ + if ( bp == breaks+2 ) + { p = skipspace(breaks[0], 1); + if ( !strncmp(p, "void", 4) ) + { p = skipspace(p+4, 1); + if ( p == breaks[2] - 1 ) + { bp = breaks; /* yup, pretend arglist is empty */ + writeblanks(breaks[0], p + 1); + } + } + } + /* Put out the function name and left parenthesis. */ + p = buf; + while ( p != endfn ) putc(*p, out), p++; + /* Put out the declaration. */ + if ( header ) + { fputs(");", out); + for ( p = breaks[0]; *p; p++ ) + if ( *p == '\r' || *p == '\n' ) + putc(*p, out); + } + else + { for ( ap = breaks+1; ap < bp; ap += 2 ) + { p = *ap; + while ( isidchar(*p) ) + putc(*p, out), p++; + if ( ap < bp - 1 ) + fputs(", ", out); + } + fputs(") ", out); + /* Put out the argument declarations */ + for ( ap = breaks+2; ap <= bp; ap += 2 ) + (*ap)[-1] = ';'; + if ( vararg != 0 ) + { *vararg = 0; + fputs(breaks[0], out); /* any prior args */ + fputs("va_dcl", out); /* the final arg */ + fputs(bp[0], out); + } + else + fputs(breaks[0], out); + } + free((char *)breaks); + return 0; +} diff --git a/Build/source/extra/jpeg/cderror.h b/Build/source/extra/jpeg/cderror.h new file mode 100644 index 00000000000..70435e161c0 --- /dev/null +++ b/Build/source/extra/jpeg/cderror.h @@ -0,0 +1,132 @@ +/* + * cderror.h + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the error and message codes for the cjpeg/djpeg + * applications. These strings are not needed as part of the JPEG library + * proper. + * Edit this file to add new codes, or to translate the message strings to + * some other language. + */ + +/* + * To define the enum list of message codes, include this file without + * defining macro JMESSAGE. To create a message string table, include it + * again with a suitable JMESSAGE definition (see jerror.c for an example). + */ +#ifndef JMESSAGE +#ifndef CDERROR_H +#define CDERROR_H +/* First time through, define the enum list */ +#define JMAKE_ENUM_LIST +#else +/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */ +#define JMESSAGE(code,string) +#endif /* CDERROR_H */ +#endif /* JMESSAGE */ + +#ifdef JMAKE_ENUM_LIST + +typedef enum { + +#define JMESSAGE(code,string) code , + +#endif /* JMAKE_ENUM_LIST */ + +JMESSAGE(JMSG_FIRSTADDONCODE=1000, NULL) /* Must be first entry! */ + +#ifdef BMP_SUPPORTED +JMESSAGE(JERR_BMP_BADCMAP, "Unsupported BMP colormap format") +JMESSAGE(JERR_BMP_BADDEPTH, "Only 8- and 24-bit BMP files are supported") +JMESSAGE(JERR_BMP_BADHEADER, "Invalid BMP file: bad header length") +JMESSAGE(JERR_BMP_BADPLANES, "Invalid BMP file: biPlanes not equal to 1") +JMESSAGE(JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB") +JMESSAGE(JERR_BMP_COMPRESSED, "Sorry, compressed BMPs not yet supported") +JMESSAGE(JERR_BMP_NOT, "Not a BMP file - does not start with BM") +JMESSAGE(JTRC_BMP, "%ux%u 24-bit BMP image") +JMESSAGE(JTRC_BMP_MAPPED, "%ux%u 8-bit colormapped BMP image") +JMESSAGE(JTRC_BMP_OS2, "%ux%u 24-bit OS2 BMP image") +JMESSAGE(JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image") +#endif /* BMP_SUPPORTED */ + +#ifdef GIF_SUPPORTED +JMESSAGE(JERR_GIF_BUG, "GIF output got confused") +JMESSAGE(JERR_GIF_CODESIZE, "Bogus GIF codesize %d") +JMESSAGE(JERR_GIF_COLORSPACE, "GIF output must be grayscale or RGB") +JMESSAGE(JERR_GIF_IMAGENOTFOUND, "Too few images in GIF file") +JMESSAGE(JERR_GIF_NOT, "Not a GIF file") +JMESSAGE(JTRC_GIF, "%ux%ux%d GIF image") +JMESSAGE(JTRC_GIF_BADVERSION, + "Warning: unexpected GIF version number '%c%c%c'") +JMESSAGE(JTRC_GIF_EXTENSION, "Ignoring GIF extension block of type 0x%02x") +JMESSAGE(JTRC_GIF_NONSQUARE, "Caution: nonsquare pixels in input") +JMESSAGE(JWRN_GIF_BADDATA, "Corrupt data in GIF file") +JMESSAGE(JWRN_GIF_CHAR, "Bogus char 0x%02x in GIF file, ignoring") +JMESSAGE(JWRN_GIF_ENDCODE, "Premature end of GIF image") +JMESSAGE(JWRN_GIF_NOMOREDATA, "Ran out of GIF bits") +#endif /* GIF_SUPPORTED */ + +#ifdef PPM_SUPPORTED +JMESSAGE(JERR_PPM_COLORSPACE, "PPM output must be grayscale or RGB") +JMESSAGE(JERR_PPM_NONNUMERIC, "Nonnumeric data in PPM file") +JMESSAGE(JERR_PPM_NOT, "Not a PPM/PGM file") +JMESSAGE(JTRC_PGM, "%ux%u PGM image") +JMESSAGE(JTRC_PGM_TEXT, "%ux%u text PGM image") +JMESSAGE(JTRC_PPM, "%ux%u PPM image") +JMESSAGE(JTRC_PPM_TEXT, "%ux%u text PPM image") +#endif /* PPM_SUPPORTED */ + +#ifdef RLE_SUPPORTED +JMESSAGE(JERR_RLE_BADERROR, "Bogus error code from RLE library") +JMESSAGE(JERR_RLE_COLORSPACE, "RLE output must be grayscale or RGB") +JMESSAGE(JERR_RLE_DIMENSIONS, "Image dimensions (%ux%u) too large for RLE") +JMESSAGE(JERR_RLE_EMPTY, "Empty RLE file") +JMESSAGE(JERR_RLE_EOF, "Premature EOF in RLE header") +JMESSAGE(JERR_RLE_MEM, "Insufficient memory for RLE header") +JMESSAGE(JERR_RLE_NOT, "Not an RLE file") +JMESSAGE(JERR_RLE_TOOMANYCHANNELS, "Cannot handle %d output channels for RLE") +JMESSAGE(JERR_RLE_UNSUPPORTED, "Cannot handle this RLE setup") +JMESSAGE(JTRC_RLE, "%ux%u full-color RLE file") +JMESSAGE(JTRC_RLE_FULLMAP, "%ux%u full-color RLE file with map of length %d") +JMESSAGE(JTRC_RLE_GRAY, "%ux%u grayscale RLE file") +JMESSAGE(JTRC_RLE_MAPGRAY, "%ux%u grayscale RLE file with map of length %d") +JMESSAGE(JTRC_RLE_MAPPED, "%ux%u colormapped RLE file with map of length %d") +#endif /* RLE_SUPPORTED */ + +#ifdef TARGA_SUPPORTED +JMESSAGE(JERR_TGA_BADCMAP, "Unsupported Targa colormap format") +JMESSAGE(JERR_TGA_BADPARMS, "Invalid or unsupported Targa file") +JMESSAGE(JERR_TGA_COLORSPACE, "Targa output must be grayscale or RGB") +JMESSAGE(JTRC_TGA, "%ux%u RGB Targa image") +JMESSAGE(JTRC_TGA_GRAY, "%ux%u grayscale Targa image") +JMESSAGE(JTRC_TGA_MAPPED, "%ux%u colormapped Targa image") +#else +JMESSAGE(JERR_TGA_NOTCOMP, "Targa support was not compiled") +#endif /* TARGA_SUPPORTED */ + +JMESSAGE(JERR_BAD_CMAP_FILE, + "Color map file is invalid or of unsupported format") +JMESSAGE(JERR_TOO_MANY_COLORS, + "Output file format cannot handle %d colormap entries") +JMESSAGE(JERR_UNGETC_FAILED, "ungetc failed") +#ifdef TARGA_SUPPORTED +JMESSAGE(JERR_UNKNOWN_FORMAT, + "Unrecognized input file format --- perhaps you need -targa") +#else +JMESSAGE(JERR_UNKNOWN_FORMAT, "Unrecognized input file format") +#endif +JMESSAGE(JERR_UNSUPPORTED_FORMAT, "Unsupported output file format") + +#ifdef JMAKE_ENUM_LIST + + JMSG_LASTADDONCODE +} ADDON_MESSAGE_CODE; + +#undef JMAKE_ENUM_LIST +#endif /* JMAKE_ENUM_LIST */ + +/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */ +#undef JMESSAGE diff --git a/Build/source/extra/jpeg/cdjpeg.c b/Build/source/extra/jpeg/cdjpeg.c new file mode 100644 index 00000000000..b6250ff97cb --- /dev/null +++ b/Build/source/extra/jpeg/cdjpeg.c @@ -0,0 +1,181 @@ +/* + * cdjpeg.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains common support routines used by the IJG application + * programs (cjpeg, djpeg, jpegtran). + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ +#include /* to declare isupper(), tolower() */ +#ifdef NEED_SIGNAL_CATCHER +#include /* to declare signal() */ +#endif +#ifdef USE_SETMODE +#include /* to declare setmode()'s parameter macros */ +/* If you have setmode() but not , just delete this line: */ +#include /* to declare setmode() */ +#endif + + +/* + * Signal catcher to ensure that temporary files are removed before aborting. + * NB: for Amiga Manx C this is actually a global routine named _abort(); + * we put "#define signal_catcher _abort" in jconfig.h. Talk about bogus... + */ + +#ifdef NEED_SIGNAL_CATCHER + +static j_common_ptr sig_cinfo; + +void /* must be global for Manx C */ +signal_catcher (int signum) +{ + if (sig_cinfo != NULL) { + if (sig_cinfo->err != NULL) /* turn off trace output */ + sig_cinfo->err->trace_level = 0; + jpeg_destroy(sig_cinfo); /* clean up memory allocation & temp files */ + } + exit(EXIT_FAILURE); +} + + +GLOBAL(void) +enable_signal_catcher (j_common_ptr cinfo) +{ + sig_cinfo = cinfo; +#ifdef SIGINT /* not all systems have SIGINT */ + signal(SIGINT, signal_catcher); +#endif +#ifdef SIGTERM /* not all systems have SIGTERM */ + signal(SIGTERM, signal_catcher); +#endif +} + +#endif + + +/* + * Optional progress monitor: display a percent-done figure on stderr. + */ + +#ifdef PROGRESS_REPORT + +METHODDEF(void) +progress_monitor (j_common_ptr cinfo) +{ + cd_progress_ptr prog = (cd_progress_ptr) cinfo->progress; + int total_passes = prog->pub.total_passes + prog->total_extra_passes; + int percent_done = (int) (prog->pub.pass_counter*100L/prog->pub.pass_limit); + + if (percent_done != prog->percent_done) { + prog->percent_done = percent_done; + if (total_passes > 1) { + fprintf(stderr, "\rPass %d/%d: %3d%% ", + prog->pub.completed_passes + prog->completed_extra_passes + 1, + total_passes, percent_done); + } else { + fprintf(stderr, "\r %3d%% ", percent_done); + } + fflush(stderr); + } +} + + +GLOBAL(void) +start_progress_monitor (j_common_ptr cinfo, cd_progress_ptr progress) +{ + /* Enable progress display, unless trace output is on */ + if (cinfo->err->trace_level == 0) { + progress->pub.progress_monitor = progress_monitor; + progress->completed_extra_passes = 0; + progress->total_extra_passes = 0; + progress->percent_done = -1; + cinfo->progress = &progress->pub; + } +} + + +GLOBAL(void) +end_progress_monitor (j_common_ptr cinfo) +{ + /* Clear away progress display */ + if (cinfo->err->trace_level == 0) { + fprintf(stderr, "\r \r"); + fflush(stderr); + } +} + +#endif + + +/* + * Case-insensitive matching of possibly-abbreviated keyword switches. + * keyword is the constant keyword (must be lower case already), + * minchars is length of minimum legal abbreviation. + */ + +GLOBAL(boolean) +keymatch (char * arg, const char * keyword, int minchars) +{ + register int ca, ck; + register int nmatched = 0; + + while ((ca = *arg++) != '\0') { + if ((ck = *keyword++) == '\0') + return FALSE; /* arg longer than keyword, no good */ + if (isupper(ca)) /* force arg to lcase (assume ck is already) */ + ca = tolower(ca); + if (ca != ck) + return FALSE; /* no good */ + nmatched++; /* count matched characters */ + } + /* reached end of argument; fail if it's too short for unique abbrev */ + if (nmatched < minchars) + return FALSE; + return TRUE; /* A-OK */ +} + + +/* + * Routines to establish binary I/O mode for stdin and stdout. + * Non-Unix systems often require some hacking to get out of text mode. + */ + +GLOBAL(FILE *) +read_stdin (void) +{ + FILE * input_file = stdin; + +#ifdef USE_SETMODE /* need to hack file mode? */ + setmode(fileno(stdin), O_BINARY); +#endif +#ifdef USE_FDOPEN /* need to re-open in binary mode? */ + if ((input_file = fdopen(fileno(stdin), READ_BINARY)) == NULL) { + fprintf(stderr, "Cannot reopen stdin\n"); + exit(EXIT_FAILURE); + } +#endif + return input_file; +} + + +GLOBAL(FILE *) +write_stdout (void) +{ + FILE * output_file = stdout; + +#ifdef USE_SETMODE /* need to hack file mode? */ + setmode(fileno(stdout), O_BINARY); +#endif +#ifdef USE_FDOPEN /* need to re-open in binary mode? */ + if ((output_file = fdopen(fileno(stdout), WRITE_BINARY)) == NULL) { + fprintf(stderr, "Cannot reopen stdout\n"); + exit(EXIT_FAILURE); + } +#endif + return output_file; +} diff --git a/Build/source/extra/jpeg/cdjpeg.h b/Build/source/extra/jpeg/cdjpeg.h new file mode 100644 index 00000000000..2b387b6e5fa --- /dev/null +++ b/Build/source/extra/jpeg/cdjpeg.h @@ -0,0 +1,184 @@ +/* + * cdjpeg.h + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains common declarations for the sample applications + * cjpeg and djpeg. It is NOT used by the core JPEG library. + */ + +#define JPEG_CJPEG_DJPEG /* define proper options in jconfig.h */ +#define JPEG_INTERNAL_OPTIONS /* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */ +#include "jinclude.h" +#include "jpeglib.h" +#include "jerror.h" /* get library error codes too */ +#include "cderror.h" /* get application-specific error codes */ + + +/* + * Object interface for cjpeg's source file decoding modules + */ + +typedef struct cjpeg_source_struct * cjpeg_source_ptr; + +struct cjpeg_source_struct { + JMETHOD(void, start_input, (j_compress_ptr cinfo, + cjpeg_source_ptr sinfo)); + JMETHOD(JDIMENSION, get_pixel_rows, (j_compress_ptr cinfo, + cjpeg_source_ptr sinfo)); + JMETHOD(void, finish_input, (j_compress_ptr cinfo, + cjpeg_source_ptr sinfo)); + + FILE *input_file; + + JSAMPARRAY buffer; + JDIMENSION buffer_height; +}; + + +/* + * Object interface for djpeg's output file encoding modules + */ + +typedef struct djpeg_dest_struct * djpeg_dest_ptr; + +struct djpeg_dest_struct { + /* start_output is called after jpeg_start_decompress finishes. + * The color map will be ready at this time, if one is needed. + */ + JMETHOD(void, start_output, (j_decompress_ptr cinfo, + djpeg_dest_ptr dinfo)); + /* Emit the specified number of pixel rows from the buffer. */ + JMETHOD(void, put_pixel_rows, (j_decompress_ptr cinfo, + djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied)); + /* Finish up at the end of the image. */ + JMETHOD(void, finish_output, (j_decompress_ptr cinfo, + djpeg_dest_ptr dinfo)); + + /* Target file spec; filled in by djpeg.c after object is created. */ + FILE * output_file; + + /* Output pixel-row buffer. Created by module init or start_output. + * Width is cinfo->output_width * cinfo->output_components; + * height is buffer_height. + */ + JSAMPARRAY buffer; + JDIMENSION buffer_height; +}; + + +/* + * cjpeg/djpeg may need to perform extra passes to convert to or from + * the source/destination file format. The JPEG library does not know + * about these passes, but we'd like them to be counted by the progress + * monitor. We use an expanded progress monitor object to hold the + * additional pass count. + */ + +struct cdjpeg_progress_mgr { + struct jpeg_progress_mgr pub; /* fields known to JPEG library */ + int completed_extra_passes; /* extra passes completed */ + int total_extra_passes; /* total extra */ + /* last printed percentage stored here to avoid multiple printouts */ + int percent_done; +}; + +typedef struct cdjpeg_progress_mgr * cd_progress_ptr; + + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jinit_read_bmp jIRdBMP +#define jinit_write_bmp jIWrBMP +#define jinit_read_gif jIRdGIF +#define jinit_write_gif jIWrGIF +#define jinit_read_ppm jIRdPPM +#define jinit_write_ppm jIWrPPM +#define jinit_read_rle jIRdRLE +#define jinit_write_rle jIWrRLE +#define jinit_read_targa jIRdTarga +#define jinit_write_targa jIWrTarga +#define read_quant_tables RdQTables +#define read_scan_script RdScnScript +#define set_quant_slots SetQSlots +#define set_sample_factors SetSFacts +#define read_color_map RdCMap +#define enable_signal_catcher EnSigCatcher +#define start_progress_monitor StProgMon +#define end_progress_monitor EnProgMon +#define read_stdin RdStdin +#define write_stdout WrStdout +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + +/* Module selection routines for I/O modules. */ + +EXTERN(cjpeg_source_ptr) jinit_read_bmp JPP((j_compress_ptr cinfo)); +EXTERN(djpeg_dest_ptr) jinit_write_bmp JPP((j_decompress_ptr cinfo, + boolean is_os2)); +EXTERN(cjpeg_source_ptr) jinit_read_gif JPP((j_compress_ptr cinfo)); +EXTERN(djpeg_dest_ptr) jinit_write_gif JPP((j_decompress_ptr cinfo)); +EXTERN(cjpeg_source_ptr) jinit_read_ppm JPP((j_compress_ptr cinfo)); +EXTERN(djpeg_dest_ptr) jinit_write_ppm JPP((j_decompress_ptr cinfo)); +EXTERN(cjpeg_source_ptr) jinit_read_rle JPP((j_compress_ptr cinfo)); +EXTERN(djpeg_dest_ptr) jinit_write_rle JPP((j_decompress_ptr cinfo)); +EXTERN(cjpeg_source_ptr) jinit_read_targa JPP((j_compress_ptr cinfo)); +EXTERN(djpeg_dest_ptr) jinit_write_targa JPP((j_decompress_ptr cinfo)); + +/* cjpeg support routines (in rdswitch.c) */ + +EXTERN(boolean) read_quant_tables JPP((j_compress_ptr cinfo, char * filename, + int scale_factor, boolean force_baseline)); +EXTERN(boolean) read_scan_script JPP((j_compress_ptr cinfo, char * filename)); +EXTERN(boolean) set_quant_slots JPP((j_compress_ptr cinfo, char *arg)); +EXTERN(boolean) set_sample_factors JPP((j_compress_ptr cinfo, char *arg)); + +/* djpeg support routines (in rdcolmap.c) */ + +EXTERN(void) read_color_map JPP((j_decompress_ptr cinfo, FILE * infile)); + +/* common support routines (in cdjpeg.c) */ + +EXTERN(void) enable_signal_catcher JPP((j_common_ptr cinfo)); +EXTERN(void) start_progress_monitor JPP((j_common_ptr cinfo, + cd_progress_ptr progress)); +EXTERN(void) end_progress_monitor JPP((j_common_ptr cinfo)); +EXTERN(boolean) keymatch JPP((char * arg, const char * keyword, int minchars)); +EXTERN(FILE *) read_stdin JPP((void)); +EXTERN(FILE *) write_stdout JPP((void)); + +/* miscellaneous useful macros */ + +#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ +#define READ_BINARY "r" +#define WRITE_BINARY "w" +#else +#ifdef VMS /* VMS is very nonstandard */ +#define READ_BINARY "rb", "ctx=stm" +#define WRITE_BINARY "wb", "ctx=stm" +#else /* standard ANSI-compliant case */ +#define READ_BINARY "rb" +#define WRITE_BINARY "wb" +#endif +#endif + +#ifndef EXIT_FAILURE /* define exit() codes if not provided */ +#define EXIT_FAILURE 1 +#endif +#ifndef EXIT_SUCCESS +#ifdef VMS +#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ +#else +#define EXIT_SUCCESS 0 +#endif +#endif +#ifndef EXIT_WARNING +#ifdef VMS +#define EXIT_WARNING 1 /* VMS is very nonstandard */ +#else +#define EXIT_WARNING 2 +#endif +#endif diff --git a/Build/source/extra/jpeg/cjpeg.1 b/Build/source/extra/jpeg/cjpeg.1 new file mode 100644 index 00000000000..d175a961c6a --- /dev/null +++ b/Build/source/extra/jpeg/cjpeg.1 @@ -0,0 +1,292 @@ +.TH CJPEG 1 "20 March 1998" +.SH NAME +cjpeg \- compress an image file to a JPEG file +.SH SYNOPSIS +.B cjpeg +[ +.I options +] +[ +.I filename +] +.LP +.SH DESCRIPTION +.LP +.B cjpeg +compresses the named image file, or the standard input if no file is +named, and produces a JPEG/JFIF file on the standard output. +The currently supported input file formats are: PPM (PBMPLUS color +format), PGM (PBMPLUS gray-scale format), BMP, Targa, and RLE (Utah Raster +Toolkit format). (RLE is supported only if the URT library is available.) +.SH OPTIONS +All switch names may be abbreviated; for example, +.B \-grayscale +may be written +.B \-gray +or +.BR \-gr . +Most of the "basic" switches can be abbreviated to as little as one letter. +Upper and lower case are equivalent (thus +.B \-BMP +is the same as +.BR \-bmp ). +British spellings are also accepted (e.g., +.BR \-greyscale ), +though for brevity these are not mentioned below. +.PP +The basic switches are: +.TP +.BI \-quality " N" +Scale quantization tables to adjust image quality. Quality is 0 (worst) to +100 (best); default is 75. (See below for more info.) +.TP +.B \-grayscale +Create monochrome JPEG file from color input. Be sure to use this switch when +compressing a grayscale BMP file, because +.B cjpeg +isn't bright enough to notice whether a BMP file uses only shades of gray. +By saying +.BR \-grayscale , +you'll get a smaller JPEG file that takes less time to process. +.TP +.B \-optimize +Perform optimization of entropy encoding parameters. Without this, default +encoding parameters are used. +.B \-optimize +usually makes the JPEG file a little smaller, but +.B cjpeg +runs somewhat slower and needs much more memory. Image quality and speed of +decompression are unaffected by +.BR \-optimize . +.TP +.B \-progressive +Create progressive JPEG file (see below). +.TP +.B \-targa +Input file is Targa format. Targa files that contain an "identification" +field will not be automatically recognized by +.BR cjpeg ; +for such files you must specify +.B \-targa +to make +.B cjpeg +treat the input as Targa format. +For most Targa files, you won't need this switch. +.PP +The +.B \-quality +switch lets you trade off compressed file size against quality of the +reconstructed image: the higher the quality setting, the larger the JPEG file, +and the closer the output image will be to the original input. Normally you +want to use the lowest quality setting (smallest file) that decompresses into +something visually indistinguishable from the original image. For this +purpose the quality setting should be between 50 and 95; the default of 75 is +often about right. If you see defects at +.B \-quality +75, then go up 5 or 10 counts at a time until you are happy with the output +image. (The optimal setting will vary from one image to another.) +.PP +.B \-quality +100 will generate a quantization table of all 1's, minimizing loss in the +quantization step (but there is still information loss in subsampling, as well +as roundoff error). This setting is mainly of interest for experimental +purposes. Quality values above about 95 are +.B not +recommended for normal use; the compressed file size goes up dramatically for +hardly any gain in output image quality. +.PP +In the other direction, quality values below 50 will produce very small files +of low image quality. Settings around 5 to 10 might be useful in preparing an +index of a large image library, for example. Try +.B \-quality +2 (or so) for some amusing Cubist effects. (Note: quality +values below about 25 generate 2-byte quantization tables, which are +considered optional in the JPEG standard. +.B cjpeg +emits a warning message when you give such a quality value, because some +other JPEG programs may be unable to decode the resulting file. Use +.B \-baseline +if you need to ensure compatibility at low quality values.) +.PP +The +.B \-progressive +switch creates a "progressive JPEG" file. In this type of JPEG file, the data +is stored in multiple scans of increasing quality. If the file is being +transmitted over a slow communications link, the decoder can use the first +scan to display a low-quality image very quickly, and can then improve the +display with each subsequent scan. The final image is exactly equivalent to a +standard JPEG file of the same quality setting, and the total file size is +about the same --- often a little smaller. +.B Caution: +progressive JPEG is not yet widely implemented, so many decoders will be +unable to view a progressive JPEG file at all. +.PP +Switches for advanced users: +.TP +.B \-dct int +Use integer DCT method (default). +.TP +.B \-dct fast +Use fast integer DCT (less accurate). +.TP +.B \-dct float +Use floating-point DCT method. +The float method is very slightly more accurate than the int method, but is +much slower unless your machine has very fast floating-point hardware. Also +note that results of the floating-point method may vary slightly across +machines, while the integer methods should give the same results everywhere. +The fast integer method is much less accurate than the other two. +.TP +.BI \-restart " N" +Emit a JPEG restart marker every N MCU rows, or every N MCU blocks if "B" is +attached to the number. +.B \-restart 0 +(the default) means no restart markers. +.TP +.BI \-smooth " N" +Smooth the input image to eliminate dithering noise. N, ranging from 1 to +100, indicates the strength of smoothing. 0 (the default) means no smoothing. +.TP +.BI \-maxmemory " N" +Set limit for amount of memory to use in processing large images. Value is +in thousands of bytes, or millions of bytes if "M" is attached to the +number. For example, +.B \-max 4m +selects 4000000 bytes. If more space is needed, temporary files will be used. +.TP +.BI \-outfile " name" +Send output image to the named file, not to standard output. +.TP +.B \-verbose +Enable debug printout. More +.BR \-v 's +give more output. Also, version information is printed at startup. +.TP +.B \-debug +Same as +.BR \-verbose . +.PP +The +.B \-restart +option inserts extra markers that allow a JPEG decoder to resynchronize after +a transmission error. Without restart markers, any damage to a compressed +file will usually ruin the image from the point of the error to the end of the +image; with restart markers, the damage is usually confined to the portion of +the image up to the next restart marker. Of course, the restart markers +occupy extra space. We recommend +.B \-restart 1 +for images that will be transmitted across unreliable networks such as Usenet. +.PP +The +.B \-smooth +option filters the input to eliminate fine-scale noise. This is often useful +when converting dithered images to JPEG: a moderate smoothing factor of 10 to +50 gets rid of dithering patterns in the input file, resulting in a smaller +JPEG file and a better-looking image. Too large a smoothing factor will +visibly blur the image, however. +.PP +Switches for wizards: +.TP +.B \-baseline +Force baseline-compatible quantization tables to be generated. This clamps +quantization values to 8 bits even at low quality settings. (This switch is +poorly named, since it does not ensure that the output is actually baseline +JPEG. For example, you can use +.B \-baseline +and +.B \-progressive +together.) +.TP +.BI \-qtables " file" +Use the quantization tables given in the specified text file. +.TP +.BI \-qslots " N[,...]" +Select which quantization table to use for each color component. +.TP +.BI \-sample " HxV[,...]" +Set JPEG sampling factors for each color component. +.TP +.BI \-scans " file" +Use the scan script given in the specified text file. +.PP +The "wizard" switches are intended for experimentation with JPEG. If you +don't know what you are doing, \fBdon't use them\fR. These switches are +documented further in the file wizard.doc. +.SH EXAMPLES +.LP +This example compresses the PPM file foo.ppm with a quality factor of +60 and saves the output as foo.jpg: +.IP +.B cjpeg \-quality +.I 60 foo.ppm +.B > +.I foo.jpg +.SH HINTS +Color GIF files are not the ideal input for JPEG; JPEG is really intended for +compressing full-color (24-bit) images. In particular, don't try to convert +cartoons, line drawings, and other images that have only a few distinct +colors. GIF works great on these, JPEG does not. If you want to convert a +GIF to JPEG, you should experiment with +.BR cjpeg 's +.B \-quality +and +.B \-smooth +options to get a satisfactory conversion. +.B \-smooth 10 +or so is often helpful. +.PP +Avoid running an image through a series of JPEG compression/decompression +cycles. Image quality loss will accumulate; after ten or so cycles the image +may be noticeably worse than it was after one cycle. It's best to use a +lossless format while manipulating an image, then convert to JPEG format when +you are ready to file the image away. +.PP +The +.B \-optimize +option to +.B cjpeg +is worth using when you are making a "final" version for posting or archiving. +It's also a win when you are using low quality settings to make very small +JPEG files; the percentage improvement is often a lot more than it is on +larger files. (At present, +.B \-optimize +mode is always selected when generating progressive JPEG files.) +.SH ENVIRONMENT +.TP +.B JPEGMEM +If this environment variable is set, its value is the default memory limit. +The value is specified as described for the +.B \-maxmemory +switch. +.B JPEGMEM +overrides the default value specified when the program was compiled, and +itself is overridden by an explicit +.BR \-maxmemory . +.SH SEE ALSO +.BR djpeg (1), +.BR jpegtran (1), +.BR rdjpgcom (1), +.BR wrjpgcom (1) +.br +.BR ppm (5), +.BR pgm (5) +.br +Wallace, Gregory K. "The JPEG Still Picture Compression Standard", +Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44. +.SH AUTHOR +Independent JPEG Group +.SH BUGS +Arithmetic coding is not supported for legal reasons. +.PP +GIF input files are no longer supported, to avoid the Unisys LZW patent. +Use a Unisys-licensed program if you need to read a GIF file. (Conversion +of GIF files to JPEG is usually a bad idea anyway.) +.PP +Not all variants of BMP and Targa file formats are supported. +.PP +The +.B \-targa +switch is not a bug, it's a feature. (It would be a bug if the Targa format +designers had not been clueless.) +.PP +Still not as fast as we'd like. diff --git a/Build/source/extra/jpeg/cjpeg.c b/Build/source/extra/jpeg/cjpeg.c new file mode 100644 index 00000000000..f2a929f0c9f --- /dev/null +++ b/Build/source/extra/jpeg/cjpeg.c @@ -0,0 +1,606 @@ +/* + * cjpeg.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a command-line user interface for the JPEG compressor. + * It should work on any system with Unix- or MS-DOS-style command lines. + * + * Two different command line styles are permitted, depending on the + * compile-time switch TWO_FILE_COMMANDLINE: + * cjpeg [options] inputfile outputfile + * cjpeg [options] [inputfile] + * In the second style, output is always to standard output, which you'd + * normally redirect to a file or pipe to some other program. Input is + * either from a named file or from standard input (typically redirected). + * The second style is convenient on Unix but is unhelpful on systems that + * don't support pipes. Also, you MUST use the first style if your system + * doesn't do binary I/O to stdin/stdout. + * To simplify script writing, the "-outfile" switch is provided. The syntax + * cjpeg [options] -outfile outputfile inputfile + * works regardless of which command line style is used. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ +#include "jversion.h" /* for version message */ + +#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ +#ifdef __MWERKS__ +#include /* Metrowerks needs this */ +#include /* ... and this */ +#endif +#ifdef THINK_C +#include /* Think declares it here */ +#endif +#endif + + +/* Create the add-on message string table. */ + +#define JMESSAGE(code,string) string , + +static const char * const cdjpeg_message_table[] = { +#include "cderror.h" + NULL +}; + + +/* + * This routine determines what format the input file is, + * and selects the appropriate input-reading module. + * + * To determine which family of input formats the file belongs to, + * we may look only at the first byte of the file, since C does not + * guarantee that more than one character can be pushed back with ungetc. + * Looking at additional bytes would require one of these approaches: + * 1) assume we can fseek() the input file (fails for piped input); + * 2) assume we can push back more than one character (works in + * some C implementations, but unportable); + * 3) provide our own buffering (breaks input readers that want to use + * stdio directly, such as the RLE library); + * or 4) don't put back the data, and modify the input_init methods to assume + * they start reading after the start of file (also breaks RLE library). + * #1 is attractive for MS-DOS but is untenable on Unix. + * + * The most portable solution for file types that can't be identified by their + * first byte is to make the user tell us what they are. This is also the + * only approach for "raw" file types that contain only arbitrary values. + * We presently apply this method for Targa files. Most of the time Targa + * files start with 0x00, so we recognize that case. Potentially, however, + * a Targa file could start with any byte value (byte 0 is the length of the + * seldom-used ID field), so we provide a switch to force Targa input mode. + */ + +static boolean is_targa; /* records user -targa switch */ + + +LOCAL(cjpeg_source_ptr) +select_file_type (j_compress_ptr cinfo, FILE * infile) +{ + int c; + + if (is_targa) { +#ifdef TARGA_SUPPORTED + return jinit_read_targa(cinfo); +#else + ERREXIT(cinfo, JERR_TGA_NOTCOMP); +#endif + } + + if ((c = getc(infile)) == EOF) + ERREXIT(cinfo, JERR_INPUT_EMPTY); + if (ungetc(c, infile) == EOF) + ERREXIT(cinfo, JERR_UNGETC_FAILED); + + switch (c) { +#ifdef BMP_SUPPORTED + case 'B': + return jinit_read_bmp(cinfo); +#endif +#ifdef GIF_SUPPORTED + case 'G': + return jinit_read_gif(cinfo); +#endif +#ifdef PPM_SUPPORTED + case 'P': + return jinit_read_ppm(cinfo); +#endif +#ifdef RLE_SUPPORTED + case 'R': + return jinit_read_rle(cinfo); +#endif +#ifdef TARGA_SUPPORTED + case 0x00: + return jinit_read_targa(cinfo); +#endif + default: + ERREXIT(cinfo, JERR_UNKNOWN_FORMAT); + break; + } + + return NULL; /* suppress compiler warnings */ +} + + +/* + * Argument-parsing code. + * The switch parser is designed to be useful with DOS-style command line + * syntax, ie, intermixed switches and file names, where only the switches + * to the left of a given file name affect processing of that file. + * The main program in this file doesn't actually use this capability... + */ + + +static const char * progname; /* program name for error messages */ +static char * outfilename; /* for -outfile switch */ + + +LOCAL(void) +usage (void) +/* complain about bad command line */ +{ + fprintf(stderr, "usage: %s [switches] ", progname); +#ifdef TWO_FILE_COMMANDLINE + fprintf(stderr, "inputfile outputfile\n"); +#else + fprintf(stderr, "[inputfile]\n"); +#endif + + fprintf(stderr, "Switches (names may be abbreviated):\n"); + fprintf(stderr, " -quality N Compression quality (0..100; 5-95 is useful range)\n"); + fprintf(stderr, " -grayscale Create monochrome JPEG file\n"); +#ifdef ENTROPY_OPT_SUPPORTED + fprintf(stderr, " -optimize Optimize Huffman table (smaller file, but slow compression)\n"); +#endif +#ifdef C_PROGRESSIVE_SUPPORTED + fprintf(stderr, " -progressive Create progressive JPEG file\n"); +#endif +#ifdef TARGA_SUPPORTED + fprintf(stderr, " -targa Input file is Targa format (usually not needed)\n"); +#endif + fprintf(stderr, "Switches for advanced users:\n"); +#ifdef DCT_ISLOW_SUPPORTED + fprintf(stderr, " -dct int Use integer DCT method%s\n", + (JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : "")); +#endif +#ifdef DCT_IFAST_SUPPORTED + fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n", + (JDCT_DEFAULT == JDCT_IFAST ? " (default)" : "")); +#endif +#ifdef DCT_FLOAT_SUPPORTED + fprintf(stderr, " -dct float Use floating-point DCT method%s\n", + (JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : "")); +#endif + fprintf(stderr, " -restart N Set restart interval in rows, or in blocks with B\n"); +#ifdef INPUT_SMOOTHING_SUPPORTED + fprintf(stderr, " -smooth N Smooth dithered input (N=1..100 is strength)\n"); +#endif + fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n"); + fprintf(stderr, " -outfile name Specify name for output file\n"); + fprintf(stderr, " -verbose or -debug Emit debug output\n"); + fprintf(stderr, "Switches for wizards:\n"); +#ifdef C_ARITH_CODING_SUPPORTED + fprintf(stderr, " -arithmetic Use arithmetic coding\n"); +#endif + fprintf(stderr, " -baseline Force baseline quantization tables\n"); + fprintf(stderr, " -qtables file Use quantization tables given in file\n"); + fprintf(stderr, " -qslots N[,...] Set component quantization tables\n"); + fprintf(stderr, " -sample HxV[,...] Set component sampling factors\n"); +#ifdef C_MULTISCAN_FILES_SUPPORTED + fprintf(stderr, " -scans file Create multi-scan JPEG per script file\n"); +#endif + exit(EXIT_FAILURE); +} + + +LOCAL(int) +parse_switches (j_compress_ptr cinfo, int argc, char **argv, + int last_file_arg_seen, boolean for_real) +/* Parse optional switches. + * Returns argv[] index of first file-name argument (== argc if none). + * Any file names with indexes <= last_file_arg_seen are ignored; + * they have presumably been processed in a previous iteration. + * (Pass 0 for last_file_arg_seen on the first or only iteration.) + * for_real is FALSE on the first (dummy) pass; we may skip any expensive + * processing. + */ +{ + int argn; + char * arg; + int quality; /* -quality parameter */ + int q_scale_factor; /* scaling percentage for -qtables */ + boolean force_baseline; + boolean simple_progressive; + char * qtablefile = NULL; /* saves -qtables filename if any */ + char * qslotsarg = NULL; /* saves -qslots parm if any */ + char * samplearg = NULL; /* saves -sample parm if any */ + char * scansarg = NULL; /* saves -scans parm if any */ + + /* Set up default JPEG parameters. */ + /* Note that default -quality level need not, and does not, + * match the default scaling for an explicit -qtables argument. + */ + quality = 75; /* default -quality value */ + q_scale_factor = 100; /* default to no scaling for -qtables */ + force_baseline = FALSE; /* by default, allow 16-bit quantizers */ + simple_progressive = FALSE; + is_targa = FALSE; + outfilename = NULL; + cinfo->err->trace_level = 0; + + /* Scan command line options, adjust parameters */ + + for (argn = 1; argn < argc; argn++) { + arg = argv[argn]; + if (*arg != '-') { + /* Not a switch, must be a file name argument */ + if (argn <= last_file_arg_seen) { + outfilename = NULL; /* -outfile applies to just one input file */ + continue; /* ignore this name if previously processed */ + } + break; /* else done parsing switches */ + } + arg++; /* advance past switch marker character */ + + if (keymatch(arg, "arithmetic", 1)) { + /* Use arithmetic coding. */ +#ifdef C_ARITH_CODING_SUPPORTED + cinfo->arith_code = TRUE; +#else + fprintf(stderr, "%s: sorry, arithmetic coding not supported\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "baseline", 1)) { + /* Force baseline-compatible output (8-bit quantizer values). */ + force_baseline = TRUE; + + } else if (keymatch(arg, "dct", 2)) { + /* Select DCT algorithm. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (keymatch(argv[argn], "int", 1)) { + cinfo->dct_method = JDCT_ISLOW; + } else if (keymatch(argv[argn], "fast", 2)) { + cinfo->dct_method = JDCT_IFAST; + } else if (keymatch(argv[argn], "float", 2)) { + cinfo->dct_method = JDCT_FLOAT; + } else + usage(); + + } else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) { + /* Enable debug printouts. */ + /* On first -d, print version identification */ + static boolean printed_version = FALSE; + + if (! printed_version) { + fprintf(stderr, "Independent JPEG Group's CJPEG, version %s\n%s\n", + JVERSION, JCOPYRIGHT); + printed_version = TRUE; + } + cinfo->err->trace_level++; + + } else if (keymatch(arg, "grayscale", 2) || keymatch(arg, "greyscale",2)) { + /* Force a monochrome JPEG file to be generated. */ + jpeg_set_colorspace(cinfo, JCS_GRAYSCALE); + + } else if (keymatch(arg, "maxmemory", 3)) { + /* Maximum memory in Kb (or Mb with 'm'). */ + long lval; + char ch = 'x'; + + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) + usage(); + if (ch == 'm' || ch == 'M') + lval *= 1000L; + cinfo->mem->max_memory_to_use = lval * 1000L; + + } else if (keymatch(arg, "optimize", 1) || keymatch(arg, "optimise", 1)) { + /* Enable entropy parm optimization. */ +#ifdef ENTROPY_OPT_SUPPORTED + cinfo->optimize_coding = TRUE; +#else + fprintf(stderr, "%s: sorry, entropy optimization was not compiled\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "outfile", 4)) { + /* Set output file name. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + outfilename = argv[argn]; /* save it away for later use */ + + } else if (keymatch(arg, "progressive", 1)) { + /* Select simple progressive mode. */ +#ifdef C_PROGRESSIVE_SUPPORTED + simple_progressive = TRUE; + /* We must postpone execution until num_components is known. */ +#else + fprintf(stderr, "%s: sorry, progressive output was not compiled\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "quality", 1)) { + /* Quality factor (quantization table scaling factor). */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%d", &quality) != 1) + usage(); + /* Change scale factor in case -qtables is present. */ + q_scale_factor = jpeg_quality_scaling(quality); + + } else if (keymatch(arg, "qslots", 2)) { + /* Quantization table slot numbers. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + qslotsarg = argv[argn]; + /* Must delay setting qslots until after we have processed any + * colorspace-determining switches, since jpeg_set_colorspace sets + * default quant table numbers. + */ + + } else if (keymatch(arg, "qtables", 2)) { + /* Quantization tables fetched from file. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + qtablefile = argv[argn]; + /* We postpone actually reading the file in case -quality comes later. */ + + } else if (keymatch(arg, "restart", 1)) { + /* Restart interval in MCU rows (or in MCUs with 'b'). */ + long lval; + char ch = 'x'; + + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) + usage(); + if (lval < 0 || lval > 65535L) + usage(); + if (ch == 'b' || ch == 'B') { + cinfo->restart_interval = (unsigned int) lval; + cinfo->restart_in_rows = 0; /* else prior '-restart n' overrides me */ + } else { + cinfo->restart_in_rows = (int) lval; + /* restart_interval will be computed during startup */ + } + + } else if (keymatch(arg, "sample", 2)) { + /* Set sampling factors. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + samplearg = argv[argn]; + /* Must delay setting sample factors until after we have processed any + * colorspace-determining switches, since jpeg_set_colorspace sets + * default sampling factors. + */ + + } else if (keymatch(arg, "scans", 2)) { + /* Set scan script. */ +#ifdef C_MULTISCAN_FILES_SUPPORTED + if (++argn >= argc) /* advance to next argument */ + usage(); + scansarg = argv[argn]; + /* We must postpone reading the file in case -progressive appears. */ +#else + fprintf(stderr, "%s: sorry, multi-scan output was not compiled\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "smooth", 2)) { + /* Set input smoothing factor. */ + int val; + + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%d", &val) != 1) + usage(); + if (val < 0 || val > 100) + usage(); + cinfo->smoothing_factor = val; + + } else if (keymatch(arg, "targa", 1)) { + /* Input file is Targa format. */ + is_targa = TRUE; + + } else { + usage(); /* bogus switch */ + } + } + + /* Post-switch-scanning cleanup */ + + if (for_real) { + + /* Set quantization tables for selected quality. */ + /* Some or all may be overridden if -qtables is present. */ + jpeg_set_quality(cinfo, quality, force_baseline); + + if (qtablefile != NULL) /* process -qtables if it was present */ + if (! read_quant_tables(cinfo, qtablefile, + q_scale_factor, force_baseline)) + usage(); + + if (qslotsarg != NULL) /* process -qslots if it was present */ + if (! set_quant_slots(cinfo, qslotsarg)) + usage(); + + if (samplearg != NULL) /* process -sample if it was present */ + if (! set_sample_factors(cinfo, samplearg)) + usage(); + +#ifdef C_PROGRESSIVE_SUPPORTED + if (simple_progressive) /* process -progressive; -scans can override */ + jpeg_simple_progression(cinfo); +#endif + +#ifdef C_MULTISCAN_FILES_SUPPORTED + if (scansarg != NULL) /* process -scans if it was present */ + if (! read_scan_script(cinfo, scansarg)) + usage(); +#endif + } + + return argn; /* return index of next arg (file name) */ +} + + +/* + * The main program. + */ + +int +main (int argc, char **argv) +{ + struct jpeg_compress_struct cinfo; + struct jpeg_error_mgr jerr; +#ifdef PROGRESS_REPORT + struct cdjpeg_progress_mgr progress; +#endif + int file_index; + cjpeg_source_ptr src_mgr; + FILE * input_file; + FILE * output_file; + JDIMENSION num_scanlines; + + /* On Mac, fetch a command line. */ +#ifdef USE_CCOMMAND + argc = ccommand(&argv); +#endif + + progname = argv[0]; + if (progname == NULL || progname[0] == 0) + progname = "cjpeg"; /* in case C library doesn't provide it */ + + /* Initialize the JPEG compression object with default error handling. */ + cinfo.err = jpeg_std_error(&jerr); + jpeg_create_compress(&cinfo); + /* Add some application-specific error messages (from cderror.h) */ + jerr.addon_message_table = cdjpeg_message_table; + jerr.first_addon_message = JMSG_FIRSTADDONCODE; + jerr.last_addon_message = JMSG_LASTADDONCODE; + + /* Now safe to enable signal catcher. */ +#ifdef NEED_SIGNAL_CATCHER + enable_signal_catcher((j_common_ptr) &cinfo); +#endif + + /* Initialize JPEG parameters. + * Much of this may be overridden later. + * In particular, we don't yet know the input file's color space, + * but we need to provide some value for jpeg_set_defaults() to work. + */ + + cinfo.in_color_space = JCS_RGB; /* arbitrary guess */ + jpeg_set_defaults(&cinfo); + + /* Scan command line to find file names. + * It is convenient to use just one switch-parsing routine, but the switch + * values read here are ignored; we will rescan the switches after opening + * the input file. + */ + + file_index = parse_switches(&cinfo, argc, argv, 0, FALSE); + +#ifdef TWO_FILE_COMMANDLINE + /* Must have either -outfile switch or explicit output file name */ + if (outfilename == NULL) { + if (file_index != argc-2) { + fprintf(stderr, "%s: must name one input and one output file\n", + progname); + usage(); + } + outfilename = argv[file_index+1]; + } else { + if (file_index != argc-1) { + fprintf(stderr, "%s: must name one input and one output file\n", + progname); + usage(); + } + } +#else + /* Unix style: expect zero or one file name */ + if (file_index < argc-1) { + fprintf(stderr, "%s: only one input file\n", progname); + usage(); + } +#endif /* TWO_FILE_COMMANDLINE */ + + /* Open the input file. */ + if (file_index < argc) { + if ((input_file = fopen(argv[file_index], READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[file_index]); + exit(EXIT_FAILURE); + } + } else { + /* default input file is stdin */ + input_file = read_stdin(); + } + + /* Open the output file. */ + if (outfilename != NULL) { + if ((output_file = fopen(outfilename, WRITE_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, outfilename); + exit(EXIT_FAILURE); + } + } else { + /* default output file is stdout */ + output_file = write_stdout(); + } + +#ifdef PROGRESS_REPORT + start_progress_monitor((j_common_ptr) &cinfo, &progress); +#endif + + /* Figure out the input file format, and set up to read it. */ + src_mgr = select_file_type(&cinfo, input_file); + src_mgr->input_file = input_file; + + /* Read the input file header to obtain file size & colorspace. */ + (*src_mgr->start_input) (&cinfo, src_mgr); + + /* Now that we know input colorspace, fix colorspace-dependent defaults */ + jpeg_default_colorspace(&cinfo); + + /* Adjust default compression parameters by re-parsing the options */ + file_index = parse_switches(&cinfo, argc, argv, 0, TRUE); + + /* Specify data destination for compression */ + jpeg_stdio_dest(&cinfo, output_file); + + /* Start compressor */ + jpeg_start_compress(&cinfo, TRUE); + + /* Process data */ + while (cinfo.next_scanline < cinfo.image_height) { + num_scanlines = (*src_mgr->get_pixel_rows) (&cinfo, src_mgr); + (void) jpeg_write_scanlines(&cinfo, src_mgr->buffer, num_scanlines); + } + + /* Finish compression and release memory */ + (*src_mgr->finish_input) (&cinfo, src_mgr); + jpeg_finish_compress(&cinfo); + jpeg_destroy_compress(&cinfo); + + /* Close files, if we opened them */ + if (input_file != stdin) + fclose(input_file); + if (output_file != stdout) + fclose(output_file); + +#ifdef PROGRESS_REPORT + end_progress_monitor((j_common_ptr) &cinfo); +#endif + + /* All done. */ + exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS); + return 0; /* suppress no-return-value warnings */ +} diff --git a/Build/source/extra/jpeg/ckconfig.c b/Build/source/extra/jpeg/ckconfig.c new file mode 100644 index 00000000000..34baf795b00 --- /dev/null +++ b/Build/source/extra/jpeg/ckconfig.c @@ -0,0 +1,402 @@ +/* + * ckconfig.c + * + * Copyright (C) 1991-1994, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + */ + +/* + * This program is intended to help you determine how to configure the JPEG + * software for installation on a particular system. The idea is to try to + * compile and execute this program. If your compiler fails to compile the + * program, make changes as indicated in the comments below. Once you can + * compile the program, run it, and it will produce a "jconfig.h" file for + * your system. + * + * As a general rule, each time you try to compile this program, + * pay attention only to the *first* error message you get from the compiler. + * Many C compilers will issue lots of spurious error messages once they + * have gotten confused. Go to the line indicated in the first error message, + * and read the comments preceding that line to see what to change. + * + * Almost all of the edits you may need to make to this program consist of + * changing a line that reads "#define SOME_SYMBOL" to "#undef SOME_SYMBOL", + * or vice versa. This is called defining or undefining that symbol. + */ + + +/* First we must see if your system has the include files we need. + * We start out with the assumption that your system has all the ANSI-standard + * include files. If you get any error trying to include one of these files, + * undefine the corresponding HAVE_xxx symbol. + */ + +#define HAVE_STDDEF_H /* replace 'define' by 'undef' if error here */ +#ifdef HAVE_STDDEF_H /* next line will be skipped if you undef... */ +#include +#endif + +#define HAVE_STDLIB_H /* same thing for stdlib.h */ +#ifdef HAVE_STDLIB_H +#include +#endif + +#include /* If you ain't got this, you ain't got C. */ + +/* We have to see if your string functions are defined by + * strings.h (old BSD convention) or string.h (everybody else). + * We try the non-BSD convention first; define NEED_BSD_STRINGS + * if the compiler says it can't find string.h. + */ + +#undef NEED_BSD_STRINGS + +#ifdef NEED_BSD_STRINGS +#include +#else +#include +#endif + +/* On some systems (especially older Unix machines), type size_t is + * defined only in the include file . If you get a failure + * on the size_t test below, try defining NEED_SYS_TYPES_H. + */ + +#undef NEED_SYS_TYPES_H /* start by assuming we don't need it */ +#ifdef NEED_SYS_TYPES_H +#include +#endif + + +/* Usually type size_t is defined in one of the include files we've included + * above. If not, you'll get an error on the "typedef size_t my_size_t;" line. + * In that case, first try defining NEED_SYS_TYPES_H just above. + * If that doesn't work, you'll have to search through your system library + * to figure out which include file defines "size_t". Look for a line that + * says "typedef something-or-other size_t;". Then, change the line below + * that says "#include " to instead include the file + * you found size_t in, and define NEED_SPECIAL_INCLUDE. If you can't find + * type size_t anywhere, try replacing "#include " with + * "typedef unsigned int size_t;". + */ + +#undef NEED_SPECIAL_INCLUDE /* assume we DON'T need it, for starters */ + +#ifdef NEED_SPECIAL_INCLUDE +#include +#endif + +typedef size_t my_size_t; /* The payoff: do we have size_t now? */ + + +/* The next question is whether your compiler supports ANSI-style function + * prototypes. You need to know this in order to choose between using + * makefile.ansi and using makefile.unix. + * The #define line below is set to assume you have ANSI function prototypes. + * If you get an error in this group of lines, undefine HAVE_PROTOTYPES. + */ + +#define HAVE_PROTOTYPES + +#ifdef HAVE_PROTOTYPES +int testfunction (int arg1, int * arg2); /* check prototypes */ + +struct methods_struct { /* check method-pointer declarations */ + int (*error_exit) (char *msgtext); + int (*trace_message) (char *msgtext); + int (*another_method) (void); +}; + +int testfunction (int arg1, int * arg2) /* check definitions */ +{ + return arg2[arg1]; +} + +int test2function (void) /* check void arg list */ +{ + return 0; +} +#endif + + +/* Now we want to find out if your compiler knows what "unsigned char" means. + * If you get an error on the "unsigned char un_char;" line, + * then undefine HAVE_UNSIGNED_CHAR. + */ + +#define HAVE_UNSIGNED_CHAR + +#ifdef HAVE_UNSIGNED_CHAR +unsigned char un_char; +#endif + + +/* Now we want to find out if your compiler knows what "unsigned short" means. + * If you get an error on the "unsigned short un_short;" line, + * then undefine HAVE_UNSIGNED_SHORT. + */ + +#define HAVE_UNSIGNED_SHORT + +#ifdef HAVE_UNSIGNED_SHORT +unsigned short un_short; +#endif + + +/* Now we want to find out if your compiler understands type "void". + * If you get an error anywhere in here, undefine HAVE_VOID. + */ + +#define HAVE_VOID + +#ifdef HAVE_VOID +/* Caution: a C++ compiler will insist on complete prototypes */ +typedef void * void_ptr; /* check void * */ +#ifdef HAVE_PROTOTYPES /* check ptr to function returning void */ +typedef void (*void_func) (int a, int b); +#else +typedef void (*void_func) (); +#endif + +#ifdef HAVE_PROTOTYPES /* check void function result */ +void test3function (void_ptr arg1, void_func arg2) +#else +void test3function (arg1, arg2) + void_ptr arg1; + void_func arg2; +#endif +{ + char * locptr = (char *) arg1; /* check casting to and from void * */ + arg1 = (void *) locptr; + (*arg2) (1, 2); /* check call of fcn returning void */ +} +#endif + + +/* Now we want to find out if your compiler knows what "const" means. + * If you get an error here, undefine HAVE_CONST. + */ + +#define HAVE_CONST + +#ifdef HAVE_CONST +static const int carray[3] = {1, 2, 3}; + +#ifdef HAVE_PROTOTYPES +int test4function (const int arg1) +#else +int test4function (arg1) + const int arg1; +#endif +{ + return carray[arg1]; +} +#endif + + +/* If you get an error or warning about this structure definition, + * define INCOMPLETE_TYPES_BROKEN. + */ + +#undef INCOMPLETE_TYPES_BROKEN + +#ifndef INCOMPLETE_TYPES_BROKEN +typedef struct undefined_structure * undef_struct_ptr; +#endif + + +/* If you get an error about duplicate names, + * define NEED_SHORT_EXTERNAL_NAMES. + */ + +#undef NEED_SHORT_EXTERNAL_NAMES + +#ifndef NEED_SHORT_EXTERNAL_NAMES + +int possibly_duplicate_function () +{ + return 0; +} + +int possibly_dupli_function () +{ + return 1; +} + +#endif + + + +/************************************************************************ + * OK, that's it. You should not have to change anything beyond this + * point in order to compile and execute this program. (You might get + * some warnings, but you can ignore them.) + * When you run the program, it will make a couple more tests that it + * can do automatically, and then it will create jconfig.h and print out + * any additional suggestions it has. + ************************************************************************ + */ + + +#ifdef HAVE_PROTOTYPES +int is_char_signed (int arg) +#else +int is_char_signed (arg) + int arg; +#endif +{ + if (arg == 189) { /* expected result for unsigned char */ + return 0; /* type char is unsigned */ + } + else if (arg != -67) { /* expected result for signed char */ + printf("Hmm, it seems 'char' is not eight bits wide on your machine.\n"); + printf("I fear the JPEG software will not work at all.\n\n"); + } + return 1; /* assume char is signed otherwise */ +} + + +#ifdef HAVE_PROTOTYPES +int is_shifting_signed (long arg) +#else +int is_shifting_signed (arg) + long arg; +#endif +/* See whether right-shift on a long is signed or not. */ +{ + long res = arg >> 4; + + if (res == -0x7F7E80CL) { /* expected result for signed shift */ + return 1; /* right shift is signed */ + } + /* see if unsigned-shift hack will fix it. */ + /* we can't just test exact value since it depends on width of long... */ + res |= (~0L) << (32-4); + if (res == -0x7F7E80CL) { /* expected result now? */ + return 0; /* right shift is unsigned */ + } + printf("Right shift isn't acting as I expect it to.\n"); + printf("I fear the JPEG software will not work at all.\n\n"); + return 0; /* try it with unsigned anyway */ +} + + +#ifdef HAVE_PROTOTYPES +int main (int argc, char ** argv) +#else +int main (argc, argv) + int argc; + char ** argv; +#endif +{ + char signed_char_check = (char) (-67); + FILE *outfile; + + /* Attempt to write jconfig.h */ + if ((outfile = fopen("jconfig.h", "w")) == NULL) { + printf("Failed to write jconfig.h\n"); + return 1; + } + + /* Write out all the info */ + fprintf(outfile, "/* jconfig.h --- generated by ckconfig.c */\n"); + fprintf(outfile, "/* see jconfig.doc for explanations */\n\n"); +#ifdef HAVE_PROTOTYPES + fprintf(outfile, "#define HAVE_PROTOTYPES\n"); +#else + fprintf(outfile, "#undef HAVE_PROTOTYPES\n"); +#endif +#ifdef HAVE_UNSIGNED_CHAR + fprintf(outfile, "#define HAVE_UNSIGNED_CHAR\n"); +#else + fprintf(outfile, "#undef HAVE_UNSIGNED_CHAR\n"); +#endif +#ifdef HAVE_UNSIGNED_SHORT + fprintf(outfile, "#define HAVE_UNSIGNED_SHORT\n"); +#else + fprintf(outfile, "#undef HAVE_UNSIGNED_SHORT\n"); +#endif +#ifdef HAVE_VOID + fprintf(outfile, "/* #define void char */\n"); +#else + fprintf(outfile, "#define void char\n"); +#endif +#ifdef HAVE_CONST + fprintf(outfile, "/* #define const */\n"); +#else + fprintf(outfile, "#define const\n"); +#endif + if (is_char_signed((int) signed_char_check)) + fprintf(outfile, "#undef CHAR_IS_UNSIGNED\n"); + else + fprintf(outfile, "#define CHAR_IS_UNSIGNED\n"); +#ifdef HAVE_STDDEF_H + fprintf(outfile, "#define HAVE_STDDEF_H\n"); +#else + fprintf(outfile, "#undef HAVE_STDDEF_H\n"); +#endif +#ifdef HAVE_STDLIB_H + fprintf(outfile, "#define HAVE_STDLIB_H\n"); +#else + fprintf(outfile, "#undef HAVE_STDLIB_H\n"); +#endif +#ifdef NEED_BSD_STRINGS + fprintf(outfile, "#define NEED_BSD_STRINGS\n"); +#else + fprintf(outfile, "#undef NEED_BSD_STRINGS\n"); +#endif +#ifdef NEED_SYS_TYPES_H + fprintf(outfile, "#define NEED_SYS_TYPES_H\n"); +#else + fprintf(outfile, "#undef NEED_SYS_TYPES_H\n"); +#endif + fprintf(outfile, "#undef NEED_FAR_POINTERS\n"); +#ifdef NEED_SHORT_EXTERNAL_NAMES + fprintf(outfile, "#define NEED_SHORT_EXTERNAL_NAMES\n"); +#else + fprintf(outfile, "#undef NEED_SHORT_EXTERNAL_NAMES\n"); +#endif +#ifdef INCOMPLETE_TYPES_BROKEN + fprintf(outfile, "#define INCOMPLETE_TYPES_BROKEN\n"); +#else + fprintf(outfile, "#undef INCOMPLETE_TYPES_BROKEN\n"); +#endif + fprintf(outfile, "\n#ifdef JPEG_INTERNALS\n\n"); + if (is_shifting_signed(-0x7F7E80B1L)) + fprintf(outfile, "#undef RIGHT_SHIFT_IS_UNSIGNED\n"); + else + fprintf(outfile, "#define RIGHT_SHIFT_IS_UNSIGNED\n"); + fprintf(outfile, "\n#endif /* JPEG_INTERNALS */\n"); + fprintf(outfile, "\n#ifdef JPEG_CJPEG_DJPEG\n\n"); + fprintf(outfile, "#define BMP_SUPPORTED /* BMP image file format */\n"); + fprintf(outfile, "#define GIF_SUPPORTED /* GIF image file format */\n"); + fprintf(outfile, "#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */\n"); + fprintf(outfile, "#undef RLE_SUPPORTED /* Utah RLE image file format */\n"); + fprintf(outfile, "#define TARGA_SUPPORTED /* Targa image file format */\n\n"); + fprintf(outfile, "#undef TWO_FILE_COMMANDLINE /* You may need this on non-Unix systems */\n"); + fprintf(outfile, "#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */\n"); + fprintf(outfile, "#undef DONT_USE_B_MODE\n"); + fprintf(outfile, "/* #define PROGRESS_REPORT */ /* optional */\n"); + fprintf(outfile, "\n#endif /* JPEG_CJPEG_DJPEG */\n"); + + /* Close the jconfig.h file */ + fclose(outfile); + + /* User report */ + printf("Configuration check for Independent JPEG Group's software done.\n"); + printf("\nI have written the jconfig.h file for you.\n\n"); +#ifdef HAVE_PROTOTYPES + printf("You should use makefile.ansi as the starting point for your Makefile.\n"); +#else + printf("You should use makefile.unix as the starting point for your Makefile.\n"); +#endif + +#ifdef NEED_SPECIAL_INCLUDE + printf("\nYou'll need to change jconfig.h to include the system include file\n"); + printf("that you found type size_t in, or add a direct definition of type\n"); + printf("size_t if that's what you used. Just add it to the end.\n"); +#endif + + return 0; +} diff --git a/Build/source/extra/jpeg/coderules.doc b/Build/source/extra/jpeg/coderules.doc new file mode 100644 index 00000000000..0ab5d9bd302 --- /dev/null +++ b/Build/source/extra/jpeg/coderules.doc @@ -0,0 +1,118 @@ +IJG JPEG LIBRARY: CODING RULES + +Copyright (C) 1991-1996, Thomas G. Lane. +This file is part of the Independent JPEG Group's software. +For conditions of distribution and use, see the accompanying README file. + + +Since numerous people will be contributing code and bug fixes, it's important +to establish a common coding style. The goal of using similar coding styles +is much more important than the details of just what that style is. + +In general we follow the recommendations of "Recommended C Style and Coding +Standards" revision 6.1 (Cannon et al. as modified by Spencer, Keppel and +Brader). This document is available in the IJG FTP archive (see +jpeg/doc/cstyle.ms.tbl.Z, or cstyle.txt.Z for those without nroff/tbl). + +Block comments should be laid out thusly: + +/* + * Block comments in this style. + */ + +We indent statements in K&R style, e.g., + if (test) { + then-part; + } else { + else-part; + } +with two spaces per indentation level. (This indentation convention is +handled automatically by GNU Emacs and many other text editors.) + +Multi-word names should be written in lower case with underscores, e.g., +multi_word_name (not multiWordName). Preprocessor symbols and enum constants +are similar but upper case (MULTI_WORD_NAME). Names should be unique within +the first fifteen characters. (On some older systems, global names must be +unique within six characters. We accommodate this without cluttering the +source code by using macros to substitute shorter names.) + +We use function prototypes everywhere; we rely on automatic source code +transformation to feed prototype-less C compilers. Transformation is done +by the simple and portable tool 'ansi2knr.c' (courtesy of Ghostscript). +ansi2knr is not very bright, so it imposes a format requirement on function +declarations: the function name MUST BEGIN IN COLUMN 1. Thus all functions +should be written in the following style: + +LOCAL(int *) +function_name (int a, char *b) +{ + code... +} + +Note that each function definition must begin with GLOBAL(type), LOCAL(type), +or METHODDEF(type). These macros expand to "static type" or just "type" as +appropriate. They provide a readable indication of the routine's usage and +can readily be changed for special needs. (For instance, special linkage +keywords can be inserted for use in Windows DLLs.) + +ansi2knr does not transform method declarations (function pointers in +structs). We handle these with a macro JMETHOD, defined as + #ifdef HAVE_PROTOTYPES + #define JMETHOD(type,methodname,arglist) type (*methodname) arglist + #else + #define JMETHOD(type,methodname,arglist) type (*methodname) () + #endif +which is used like this: + struct function_pointers { + JMETHOD(void, init_entropy_encoder, (int somearg, jparms *jp)); + JMETHOD(void, term_entropy_encoder, (void)); + }; +Note the set of parentheses surrounding the parameter list. + +A similar solution is used for forward and external function declarations +(see the EXTERN and JPP macros). + +If the code is to work on non-ANSI compilers, we cannot rely on a prototype +declaration to coerce actual parameters into the right types. Therefore, use +explicit casts on actual parameters whenever the actual parameter type is not +identical to the formal parameter. Beware of implicit conversions to "int". + +It seems there are some non-ANSI compilers in which the sizeof() operator +is defined to return int, yet size_t is defined as long. Needless to say, +this is brain-damaged. Always use the SIZEOF() macro in place of sizeof(), +so that the result is guaranteed to be of type size_t. + + +The JPEG library is intended to be used within larger programs. Furthermore, +we want it to be reentrant so that it can be used by applications that process +multiple images concurrently. The following rules support these requirements: + +1. Avoid direct use of file I/O, "malloc", error report printouts, etc; +pass these through the common routines provided. + +2. Minimize global namespace pollution. Functions should be declared static +wherever possible. (Note that our method-based calling conventions help this +a lot: in many modules only the initialization function will ever need to be +called directly, so only that function need be externally visible.) All +global function names should begin with "jpeg_", and should have an +abbreviated name (unique in the first six characters) substituted by macro +when NEED_SHORT_EXTERNAL_NAMES is set. + +3. Don't use global variables; anything that must be used in another module +should be in the common data structures. + +4. Don't use static variables except for read-only constant tables. Variables +that should be private to a module can be placed into private structures (see +the system architecture document, structure.doc). + +5. Source file names should begin with "j" for files that are part of the +library proper; source files that are not part of the library, such as cjpeg.c +and djpeg.c, do not begin with "j". Keep source file names to eight +characters (plus ".c" or ".h", etc) to make life easy for MS-DOSers. Keep +compression and decompression code in separate source files --- some +applications may want only one half of the library. + +Note: these rules (particularly #4) are not followed religiously in the +modules that are used in cjpeg/djpeg but are not part of the JPEG library +proper. Those modules are not really intended to be used in other +applications. diff --git a/Build/source/extra/jpeg/config.guess b/Build/source/extra/jpeg/config.guess new file mode 100644 index 00000000000..e792aac6080 --- /dev/null +++ b/Build/source/extra/jpeg/config.guess @@ -0,0 +1,1494 @@ +#! /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 +# Free Software Foundation, Inc. + +timestamp='2009-09-18' + +# 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 +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# 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. +# +# 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. +# +# 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 + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +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 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." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +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 + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd | genuineintel) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`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 + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + 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} + 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 + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + 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 ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + 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 + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + 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 < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/Build/source/extra/jpeg/config.sub b/Build/source/extra/jpeg/config.sub new file mode 100644 index 00000000000..5ecc18b6ada --- /dev/null +++ b/Build/source/extra/jpeg/config.sub @@ -0,0 +1,1700 @@ +#! /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 +# Free Software Foundation, Inc. + +timestamp='2009-10-07' + +# 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 +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# 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. + + +# Please send patches to . Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +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 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." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -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) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | 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 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -kopensolaris* \ + | -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* \ + | -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* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/Build/source/extra/jpeg/configure b/Build/source/extra/jpeg/configure new file mode 100755 index 00000000000..35c9db5cadc --- /dev/null +++ b/Build/source/extra/jpeg/configure @@ -0,0 +1,2011 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.12 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --enable-shared build shared library using GNU libtool" +ac_help="$ac_help + --enable-static build static library using GNU libtool" +ac_help="$ac_help + --enable-maxmem[=N] enable use of temp files, set max mem usage to N MB" +ac_help="$ac_help +" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # 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 << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.12" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *=*) + varname=`echo "$ac_option"|sed -e 's/=.*//'` + # Reject names that aren't valid shell variable names. + if test -n "`echo $varname| sed 's/[a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $varname: invalid shell variable name" 1>&2; exit 1; } + fi + val="`echo "$ac_option"|sed 's/[^=]*=//'`" + test -n "$verbose" && echo " setting shell variable $varname to $val" + eval "$varname='$val'" + eval "export $varname" ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=jcmaster.c + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:538: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:567: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + ac_prog_rejected=no + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:615: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:649: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:654: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes + test "${CFLAGS+set}" = set || CFLAGS="-O2" +else + GCC= + test "${CFLAGS+set}" = set || CFLAGS="-O" +fi + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:681: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:702: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:719: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + +echo $ac_n "checking for function prototypes""... $ac_c" 1>&6 +echo "configure:742: checking for function prototypes" >&5 +if eval "test \"`echo '$''{'ijg_cv_have_prototypes'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ijg_cv_have_prototypes=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ijg_cv_have_prototypes=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ijg_cv_have_prototypes" 1>&6 +if test $ijg_cv_have_prototypes = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_PROTOTYPES +EOF + +else + echo Your compiler does not seem to know about function prototypes. + echo Perhaps it needs a special switch to enable ANSI C mode. + echo If so, we recommend running configure like this: + echo " ./configure CC='cc -switch'" + echo where -switch is the proper switch. +fi +ac_safe=`echo "stddef.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for stddef.h""... $ac_c" 1>&6 +echo "configure:792: checking for stddef.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:802: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_STDDEF_H +EOF + +else + echo "$ac_t""no" 1>&6 +fi + +ac_safe=`echo "stdlib.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for stdlib.h""... $ac_c" 1>&6 +echo "configure:828: checking for stdlib.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:838: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_STDLIB_H +EOF + +else + echo "$ac_t""no" 1>&6 +fi + +ac_safe=`echo "string.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for string.h""... $ac_c" 1>&6 +echo "configure:864: checking for string.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NEED_BSD_STRINGS +EOF + +fi + +echo $ac_n "checking for size_t""... $ac_c" 1>&6 +echo "configure:900: checking for size_t" >&5 +cat > conftest.$ac_ext < +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#include +#ifdef NEED_BSD_STRINGS +#include +#else +#include +#endif +typedef size_t my_size_t; + +int main() { + my_size_t foovar; +; return 0; } +EOF +if { (eval echo configure:923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ijg_size_t_ok=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ijg_size_t_ok="not ANSI, perhaps it is in sys/types.h" +fi +rm -f conftest* +echo "$ac_t""$ijg_size_t_ok" 1>&6 +if test "$ijg_size_t_ok" != yes; then +ac_safe=`echo "sys/types.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for sys/types.h""... $ac_c" 1>&6 +echo "configure:937: checking for sys/types.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:947: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define NEED_SYS_TYPES_H +EOF + +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "size_t" >/dev/null 2>&1; then + rm -rf conftest* + ijg_size_t_ok="size_t is in sys/types.h" +else + rm -rf conftest* + ijg_size_t_ok=no +fi +rm -f conftest* + +else + echo "$ac_t""no" 1>&6 +ijg_size_t_ok=no +fi + +echo "$ac_t""$ijg_size_t_ok" 1>&6 +if test "$ijg_size_t_ok" = no; then + echo Type size_t is not defined in any of the usual places. + echo Try putting '"typedef unsigned int size_t;"' in jconfig.h. +fi +fi +echo $ac_n "checking for type unsigned char""... $ac_c" 1>&6 +echo "configure:994: checking for type unsigned char" >&5 +cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 +cat >> confdefs.h <<\EOF +#define HAVE_UNSIGNED_CHAR +EOF + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""no" 1>&6 +fi +rm -f conftest* +echo $ac_n "checking for type unsigned short""... $ac_c" 1>&6 +echo "configure:1018: checking for type unsigned short" >&5 +cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 +cat >> confdefs.h <<\EOF +#define HAVE_UNSIGNED_SHORT +EOF + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""no" 1>&6 +fi +rm -f conftest* +echo $ac_n "checking for type void""... $ac_c" 1>&6 +echo "configure:1042: checking for type void" >&5 +cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define void char +EOF + +fi +rm -f conftest* + +echo $ac_n "checking for working const""... $ac_c" 1>&6 +echo "configure:1088: checking for working const" >&5 +if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <j = 5; +} +{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; +} + +; return 0; } +EOF +if { (eval echo configure:1142: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_const=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_const=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_c_const" 1>&6 +if test $ac_cv_c_const = no; then + cat >> confdefs.h <<\EOF +#define const +EOF + +fi + +echo $ac_n "checking for inline""... $ac_c" 1>&6 +echo "configure:1163: checking for inline" >&5 +ijg_cv_inline="" +cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ijg_cv_inline="__inline__" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ijg_cv_inline="__inline" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ijg_cv_inline="inline" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +fi +rm -f conftest* +fi +rm -f conftest* +echo "$ac_t""$ijg_cv_inline" 1>&6 +cat >> confdefs.h <&6 +echo "configure:1224: checking for broken incomplete types" >&5 +cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + echo "$ac_t""ok" 1>&6 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""broken" 1>&6 +cat >> confdefs.h <<\EOF +#define INCOMPLETE_TYPES_BROKEN +EOF + +fi +rm -f conftest* +echo $ac_n "checking for short external names""... $ac_c" 1>&6 +echo "configure:1248: checking for short external names" >&5 +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + echo "$ac_t""ok" 1>&6 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""short" 1>&6 +cat >> confdefs.h <<\EOF +#define NEED_SHORT_EXTERNAL_NAMES +EOF + +fi +rm -f conftest* +echo $ac_n "checking to see if char is signed""... $ac_c" 1>&6 +echo "configure:1275: checking to see if char is signed" >&5 +if test "$cross_compiling" = yes; then + echo Assuming that char is signed on target machine. +echo If it is unsigned, this will be a little bit inefficient. + +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define CHAR_IS_UNSIGNED +EOF + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + echo "$ac_t""yes" 1>&6 +fi +rm -fr conftest* +fi + +echo $ac_n "checking to see if right shift is signed""... $ac_c" 1>&6 +echo "configure:1323: checking to see if right shift is signed" >&5 +if test "$cross_compiling" = yes; then + echo "$ac_t""Assuming that right shift is signed on target machine." 1>&6 +else + cat > conftest.$ac_ext <> 4; + + if (res == -0x7F7E80CL) { /* expected result for signed shift */ + return 1; /* right shift is signed */ + } + /* see if unsigned-shift hack will fix it. */ + /* we can't just test exact value since it depends on width of long... */ + res |= (~0L) << (32-4); + if (res == -0x7F7E80CL) { /* expected result now? */ + return 0; /* right shift is unsigned */ + } + printf("Right shift isn't acting as I expect it to.\n"); + printf("I fear the JPEG software will not work at all.\n\n"); + return 0; /* try it with unsigned anyway */ +} +main() { + exit(is_shifting_signed(-0x7F7E80B1L)); +} +EOF +if { (eval echo configure:1358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define RIGHT_SHIFT_IS_UNSIGNED +EOF + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + echo "$ac_t""yes" 1>&6 +fi +rm -fr conftest* +fi + +echo $ac_n "checking to see if fopen accepts b spec""... $ac_c" 1>&6 +echo "configure:1375: checking to see if fopen accepts b spec" >&5 +if test "$cross_compiling" = yes; then + echo "$ac_t""Assuming that it does." 1>&6 +else + cat > conftest.$ac_ext < +main() { + if (fopen("conftestdata", "wb") != NULL) + exit(0); + exit(1); +} +EOF +if { (eval echo configure:1390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + echo "$ac_t""yes" 1>&6 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define DONT_USE_B_MODE +EOF + +fi +rm -fr conftest* +fi + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + +# 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: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:1436: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + for ac_prog in ginstall installbsd scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + # OSF/1 installbsd also uses dspmsg, but is usable. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1488: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + +# Decide whether to use libtool, +# and if so whether to build shared, static, or both flavors of library. +LTSHARED="no" +# Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + LTSHARED="$enableval" +fi + +LTSTATIC="no" +# Check whether --enable-static or --disable-static was given. +if test "${enable_static+set}" = set; then + enableval="$enable_static" + LTSTATIC="$enableval" +fi + +if test "x$LTSHARED" != xno -o "x$LTSTATIC" != xno; then + USELIBTOOL="yes" + LIBTOOL="./libtool" + O="lo" + A="la" + LN='$(LIBTOOL) --mode=link $(CC)' + INSTALL_LIB='$(LIBTOOL) --mode=install ${INSTALL}' + INSTALL_PROGRAM="\$(LIBTOOL) --mode=install $INSTALL_PROGRAM" +else + USELIBTOOL="no" + LIBTOOL="" + O="o" + A="a" + LN='$(CC)' + INSTALL_LIB="$INSTALL_DATA" +fi + + + + + + +# Configure libtool if needed. +if test $USELIBTOOL = yes; then + disable_shared= + disable_static= + if test "x$LTSHARED" = xno; then + disable_shared="--disable-shared" + fi + if test "x$LTSTATIC" = xno; then + disable_static="--disable-static" + fi + $srcdir/ltconfig $disable_shared $disable_static $srcdir/ltmain.sh +fi + +# Select memory manager depending on user input. +# If no "-enable-maxmem", use jmemnobs +MEMORYMGR='jmemnobs.$(O)' +MAXMEM="no" +# Check whether --enable-maxmem or --disable-maxmem was given. +if test "${enable_maxmem+set}" = set; then + enableval="$enable_maxmem" + MAXMEM="$enableval" +fi + +# support --with-maxmem for backwards compatibility with IJG V5. +# Check whether --with-maxmem or --without-maxmem was given. +if test "${with_maxmem+set}" = set; then + withval="$with_maxmem" + MAXMEM="$withval" +fi + +if test "x$MAXMEM" = xyes; then + MAXMEM=1 +fi +if test "x$MAXMEM" != xno; then + if test -n "`echo $MAXMEM | sed 's/[0-9]//g'`"; then + { echo "configure: error: non-numeric argument to --enable-maxmem" 1>&2; exit 1; } + fi + DEFAULTMAXMEM=`expr $MAXMEM \* 1048576` +cat >> confdefs.h <&6 +echo "configure:1596: checking for 'tmpfile()'" >&5 +cat > conftest.$ac_ext < +int main() { + FILE * tfile = tmpfile(); +; return 0; } +EOF +if { (eval echo configure:1605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 +MEMORYMGR='jmemansi.$(O)' +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""no" 1>&6 +MEMORYMGR='jmemname.$(O)' +cat >> confdefs.h <<\EOF +#define NEED_SIGNAL_CATCHER +EOF + +echo $ac_n "checking for 'mktemp()'""... $ac_c" 1>&6 +echo "configure:1620: checking for 'mktemp()'" >&5 +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_MKTEMP +EOF + +fi +rm -f conftest* +fi +rm -f conftest* +fi + + +# Extract the library version ID from jpeglib.h. +echo $ac_n "checking libjpeg version number""... $ac_c" 1>&6 +echo "configure:1650: checking libjpeg version number" >&5 +JPEG_LIB_VERSION=`sed -e '/^#define JPEG_LIB_VERSION/!d' -e 's/^[^0-9]*\([0-9][0-9]*\).*$/\1/' $srcdir/jpeglib.h` +echo "$ac_t""$JPEG_LIB_VERSION" 1>&6 + + +# Prepare to massage makefile.cfg correctly. +if test $ijg_cv_have_prototypes = yes; then + A2K_DEPS="" + COM_A2K="# " +else + A2K_DEPS="ansi2knr" + COM_A2K="" +fi + + +# ansi2knr needs -DBSD if string.h is missing +if test $ac_cv_header_string_h = no; then + ANSI2KNRFLAGS="-DBSD" +else + ANSI2KNRFLAGS="" +fi + +# Substitutions to enable or disable libtool-related stuff +if test $USELIBTOOL = yes -a $ijg_cv_have_prototypes = yes; then + COM_LT="" +else + COM_LT="# " +fi + +if test "x$LTSHARED" != xno; then + FORCE_INSTALL_LIB="install-lib" +else + FORCE_INSTALL_LIB="" +fi + +# Set up -I directives +if test "x$srcdir" = x.; then + INCLUDEFLAGS='-I$(srcdir)' +else + INCLUDEFLAGS='-I. -I$(srcdir)' +fi + +trap '' 1 2 15 + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +DEFS=-DHAVE_CONFIG_H + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.12" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo "Makefile:makefile.cfg jconfig.h:jconfig.cfg" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@CC@%$CC%g +s%@CPP@%$CPP%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@RANLIB@%$RANLIB%g +s%@LIBTOOL@%$LIBTOOL%g +s%@O@%$O%g +s%@A@%$A%g +s%@LN@%$LN%g +s%@INSTALL_LIB@%$INSTALL_LIB%g +s%@MEMORYMGR@%$MEMORYMGR%g +s%@JPEG_LIB_VERSION@%$JPEG_LIB_VERSION%g +s%@A2K_DEPS@%$A2K_DEPS%g +s%@COM_A2K@%$COM_A2K%g +s%@ANSI2KNRFLAGS@%$ANSI2KNRFLAGS%g +s%@COM_LT@%$COM_LT%g +s%@FORCE_INSTALL_LIB@%$FORCE_INSTALL_LIB%g +s%@INCLUDEFLAGS@%$INCLUDEFLAGS%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' +ac_dC='\3' +ac_dD='%g' +# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='\([ ]\)%\1#\2define\3' +ac_uC=' ' +ac_uD='\4%g' +# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_eB='$%\1#\2define\3' +ac_eC=' ' +ac_eD='%g' + +if test "${CONFIG_HEADERS+set}" != set; then +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +fi +for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + echo creating $ac_file + + rm -f conftest.frag conftest.in conftest.out + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + cat $ac_file_inputs > conftest.in + +EOF + +# Transform confdefs.h into a sed script conftest.vals that substitutes +# the proper values into config.h.in to produce config.h. And first: +# Protect against being on the right side of a sed subst in config.status. +# Protect against being in an unquoted here document in config.status. +rm -f conftest.vals +cat > conftest.hdr <<\EOF +s/[\\&%]/\\&/g +s%[\\$`]%\\&%g +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp +s%ac_d%ac_u%gp +s%ac_u%ac_e%gp +EOF +sed -n -f conftest.hdr confdefs.h > conftest.vals +rm -f conftest.hdr + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >> conftest.vals <<\EOF +EOF + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. + +rm -f conftest.tail +while : +do + ac_lines=`grep -c . conftest.vals` + # grep -c gives empty output for an empty file on some AIX systems. + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + # Write a limited-size here document to conftest.frag. + echo ' cat > conftest.frag <> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + echo 'CEOF + sed -f conftest.frag conftest.in > conftest.out + rm -f conftest.in + mv conftest.out conftest.in +' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals +done +rm -f conftest.vals + +cat >> $CONFIG_STATUS <<\EOF + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + fi + rm -f $ac_file + mv conftest.h $ac_file + fi +fi; done + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/Build/source/extra/jpeg/djpeg.1 b/Build/source/extra/jpeg/djpeg.1 new file mode 100644 index 00000000000..11beb6a5133 --- /dev/null +++ b/Build/source/extra/jpeg/djpeg.1 @@ -0,0 +1,253 @@ +.TH DJPEG 1 "22 August 1997" +.SH NAME +djpeg \- decompress a JPEG file to an image file +.SH SYNOPSIS +.B djpeg +[ +.I options +] +[ +.I filename +] +.LP +.SH DESCRIPTION +.LP +.B djpeg +decompresses the named JPEG file, or the standard input if no file is named, +and produces an image file on the standard output. PBMPLUS (PPM/PGM), BMP, +GIF, Targa, or RLE (Utah Raster Toolkit) output format can be selected. +(RLE is supported only if the URT library is available.) +.SH OPTIONS +All switch names may be abbreviated; for example, +.B \-grayscale +may be written +.B \-gray +or +.BR \-gr . +Most of the "basic" switches can be abbreviated to as little as one letter. +Upper and lower case are equivalent (thus +.B \-BMP +is the same as +.BR \-bmp ). +British spellings are also accepted (e.g., +.BR \-greyscale ), +though for brevity these are not mentioned below. +.PP +The basic switches are: +.TP +.BI \-colors " N" +Reduce image to at most N colors. This reduces the number of colors used in +the output image, so that it can be displayed on a colormapped display or +stored in a colormapped file format. For example, if you have an 8-bit +display, you'd need to reduce to 256 or fewer colors. +.TP +.BI \-quantize " N" +Same as +.BR \-colors . +.B \-colors +is the recommended name, +.B \-quantize +is provided only for backwards compatibility. +.TP +.B \-fast +Select recommended processing options for fast, low quality output. (The +default options are chosen for highest quality output.) Currently, this is +equivalent to \fB\-dct fast \-nosmooth \-onepass \-dither ordered\fR. +.TP +.B \-grayscale +Force gray-scale output even if JPEG file is color. Useful for viewing on +monochrome displays; also, +.B djpeg +runs noticeably faster in this mode. +.TP +.BI \-scale " M/N" +Scale the output image by a factor M/N. Currently the scale factor must be +1/1, 1/2, 1/4, or 1/8. Scaling is handy if the image is larger than your +screen; also, +.B djpeg +runs much faster when scaling down the output. +.TP +.B \-bmp +Select BMP output format (Windows flavor). 8-bit colormapped format is +emitted if +.B \-colors +or +.B \-grayscale +is specified, or if the JPEG file is gray-scale; otherwise, 24-bit full-color +format is emitted. +.TP +.B \-gif +Select GIF output format. Since GIF does not support more than 256 colors, +.B \-colors 256 +is assumed (unless you specify a smaller number of colors). +.TP +.B \-os2 +Select BMP output format (OS/2 1.x flavor). 8-bit colormapped format is +emitted if +.B \-colors +or +.B \-grayscale +is specified, or if the JPEG file is gray-scale; otherwise, 24-bit full-color +format is emitted. +.TP +.B \-pnm +Select PBMPLUS (PPM/PGM) output format (this is the default format). +PGM is emitted if the JPEG file is gray-scale or if +.B \-grayscale +is specified; otherwise PPM is emitted. +.TP +.B \-rle +Select RLE output format. (Requires URT library.) +.TP +.B \-targa +Select Targa output format. Gray-scale format is emitted if the JPEG file is +gray-scale or if +.B \-grayscale +is specified; otherwise, colormapped format is emitted if +.B \-colors +is specified; otherwise, 24-bit full-color format is emitted. +.PP +Switches for advanced users: +.TP +.B \-dct int +Use integer DCT method (default). +.TP +.B \-dct fast +Use fast integer DCT (less accurate). +.TP +.B \-dct float +Use floating-point DCT method. +The float method is very slightly more accurate than the int method, but is +much slower unless your machine has very fast floating-point hardware. Also +note that results of the floating-point method may vary slightly across +machines, while the integer methods should give the same results everywhere. +The fast integer method is much less accurate than the other two. +.TP +.B \-dither fs +Use Floyd-Steinberg dithering in color quantization. +.TP +.B \-dither ordered +Use ordered dithering in color quantization. +.TP +.B \-dither none +Do not use dithering in color quantization. +By default, Floyd-Steinberg dithering is applied when quantizing colors; this +is slow but usually produces the best results. Ordered dither is a compromise +between speed and quality; no dithering is fast but usually looks awful. Note +that these switches have no effect unless color quantization is being done. +Ordered dither is only available in +.B \-onepass +mode. +.TP +.BI \-map " file" +Quantize to the colors used in the specified image file. This is useful for +producing multiple files with identical color maps, or for forcing a +predefined set of colors to be used. The +.I file +must be a GIF or PPM file. This option overrides +.B \-colors +and +.BR \-onepass . +.TP +.B \-nosmooth +Use a faster, lower-quality upsampling routine. +.TP +.B \-onepass +Use one-pass instead of two-pass color quantization. The one-pass method is +faster and needs less memory, but it produces a lower-quality image. +.B \-onepass +is ignored unless you also say +.B \-colors +.IR N . +Also, the one-pass method is always used for gray-scale output (the two-pass +method is no improvement then). +.TP +.BI \-maxmemory " N" +Set limit for amount of memory to use in processing large images. Value is +in thousands of bytes, or millions of bytes if "M" is attached to the +number. For example, +.B \-max 4m +selects 4000000 bytes. If more space is needed, temporary files will be used. +.TP +.BI \-outfile " name" +Send output image to the named file, not to standard output. +.TP +.B \-verbose +Enable debug printout. More +.BR \-v 's +give more output. Also, version information is printed at startup. +.TP +.B \-debug +Same as +.BR \-verbose . +.SH EXAMPLES +.LP +This example decompresses the JPEG file foo.jpg, quantizes it to +256 colors, and saves the output in 8-bit BMP format in foo.bmp: +.IP +.B djpeg \-colors 256 \-bmp +.I foo.jpg +.B > +.I foo.bmp +.SH HINTS +To get a quick preview of an image, use the +.B \-grayscale +and/or +.B \-scale +switches. +.B \-grayscale \-scale 1/8 +is the fastest case. +.PP +Several options are available that trade off image quality to gain speed. +.B \-fast +turns on the recommended settings. +.PP +.B \-dct fast +and/or +.B \-nosmooth +gain speed at a small sacrifice in quality. +When producing a color-quantized image, +.B \-onepass \-dither ordered +is fast but much lower quality than the default behavior. +.B \-dither none +may give acceptable results in two-pass mode, but is seldom tolerable in +one-pass mode. +.PP +If you are fortunate enough to have very fast floating point hardware, +\fB\-dct float\fR may be even faster than \fB\-dct fast\fR. But on most +machines \fB\-dct float\fR is slower than \fB\-dct int\fR; in this case it is +not worth using, because its theoretical accuracy advantage is too small to be +significant in practice. +.SH ENVIRONMENT +.TP +.B JPEGMEM +If this environment variable is set, its value is the default memory limit. +The value is specified as described for the +.B \-maxmemory +switch. +.B JPEGMEM +overrides the default value specified when the program was compiled, and +itself is overridden by an explicit +.BR \-maxmemory . +.SH SEE ALSO +.BR cjpeg (1), +.BR jpegtran (1), +.BR rdjpgcom (1), +.BR wrjpgcom (1) +.br +.BR ppm (5), +.BR pgm (5) +.br +Wallace, Gregory K. "The JPEG Still Picture Compression Standard", +Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44. +.SH AUTHOR +Independent JPEG Group +.SH BUGS +Arithmetic coding is not supported for legal reasons. +.PP +To avoid the Unisys LZW patent, +.B djpeg +produces uncompressed GIF files. These are larger than they should be, but +are readable by standard GIF decoders. +.PP +Still not as fast as we'd like. diff --git a/Build/source/extra/jpeg/djpeg.c b/Build/source/extra/jpeg/djpeg.c new file mode 100644 index 00000000000..e099e90aee3 --- /dev/null +++ b/Build/source/extra/jpeg/djpeg.c @@ -0,0 +1,616 @@ +/* + * djpeg.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a command-line user interface for the JPEG decompressor. + * It should work on any system with Unix- or MS-DOS-style command lines. + * + * Two different command line styles are permitted, depending on the + * compile-time switch TWO_FILE_COMMANDLINE: + * djpeg [options] inputfile outputfile + * djpeg [options] [inputfile] + * In the second style, output is always to standard output, which you'd + * normally redirect to a file or pipe to some other program. Input is + * either from a named file or from standard input (typically redirected). + * The second style is convenient on Unix but is unhelpful on systems that + * don't support pipes. Also, you MUST use the first style if your system + * doesn't do binary I/O to stdin/stdout. + * To simplify script writing, the "-outfile" switch is provided. The syntax + * djpeg [options] -outfile outputfile inputfile + * works regardless of which command line style is used. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ +#include "jversion.h" /* for version message */ + +#include /* to declare isprint() */ + +#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ +#ifdef __MWERKS__ +#include /* Metrowerks needs this */ +#include /* ... and this */ +#endif +#ifdef THINK_C +#include /* Think declares it here */ +#endif +#endif + + +/* Create the add-on message string table. */ + +#define JMESSAGE(code,string) string , + +static const char * const cdjpeg_message_table[] = { +#include "cderror.h" + NULL +}; + + +/* + * This list defines the known output image formats + * (not all of which need be supported by a given version). + * You can change the default output format by defining DEFAULT_FMT; + * indeed, you had better do so if you undefine PPM_SUPPORTED. + */ + +typedef enum { + FMT_BMP, /* BMP format (Windows flavor) */ + FMT_GIF, /* GIF format */ + FMT_OS2, /* BMP format (OS/2 flavor) */ + FMT_PPM, /* PPM/PGM (PBMPLUS formats) */ + FMT_RLE, /* RLE format */ + FMT_TARGA, /* Targa format */ + FMT_TIFF /* TIFF format */ +} IMAGE_FORMATS; + +#ifndef DEFAULT_FMT /* so can override from CFLAGS in Makefile */ +#define DEFAULT_FMT FMT_PPM +#endif + +static IMAGE_FORMATS requested_fmt; + + +/* + * Argument-parsing code. + * The switch parser is designed to be useful with DOS-style command line + * syntax, ie, intermixed switches and file names, where only the switches + * to the left of a given file name affect processing of that file. + * The main program in this file doesn't actually use this capability... + */ + + +static const char * progname; /* program name for error messages */ +static char * outfilename; /* for -outfile switch */ + + +LOCAL(void) +usage (void) +/* complain about bad command line */ +{ + fprintf(stderr, "usage: %s [switches] ", progname); +#ifdef TWO_FILE_COMMANDLINE + fprintf(stderr, "inputfile outputfile\n"); +#else + fprintf(stderr, "[inputfile]\n"); +#endif + + fprintf(stderr, "Switches (names may be abbreviated):\n"); + fprintf(stderr, " -colors N Reduce image to no more than N colors\n"); + fprintf(stderr, " -fast Fast, low-quality processing\n"); + fprintf(stderr, " -grayscale Force grayscale output\n"); +#ifdef IDCT_SCALING_SUPPORTED + fprintf(stderr, " -scale M/N Scale output image by fraction M/N, eg, 1/8\n"); +#endif +#ifdef BMP_SUPPORTED + fprintf(stderr, " -bmp Select BMP output format (Windows style)%s\n", + (DEFAULT_FMT == FMT_BMP ? " (default)" : "")); +#endif +#ifdef GIF_SUPPORTED + fprintf(stderr, " -gif Select GIF output format%s\n", + (DEFAULT_FMT == FMT_GIF ? " (default)" : "")); +#endif +#ifdef BMP_SUPPORTED + fprintf(stderr, " -os2 Select BMP output format (OS/2 style)%s\n", + (DEFAULT_FMT == FMT_OS2 ? " (default)" : "")); +#endif +#ifdef PPM_SUPPORTED + fprintf(stderr, " -pnm Select PBMPLUS (PPM/PGM) output format%s\n", + (DEFAULT_FMT == FMT_PPM ? " (default)" : "")); +#endif +#ifdef RLE_SUPPORTED + fprintf(stderr, " -rle Select Utah RLE output format%s\n", + (DEFAULT_FMT == FMT_RLE ? " (default)" : "")); +#endif +#ifdef TARGA_SUPPORTED + fprintf(stderr, " -targa Select Targa output format%s\n", + (DEFAULT_FMT == FMT_TARGA ? " (default)" : "")); +#endif + fprintf(stderr, "Switches for advanced users:\n"); +#ifdef DCT_ISLOW_SUPPORTED + fprintf(stderr, " -dct int Use integer DCT method%s\n", + (JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : "")); +#endif +#ifdef DCT_IFAST_SUPPORTED + fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n", + (JDCT_DEFAULT == JDCT_IFAST ? " (default)" : "")); +#endif +#ifdef DCT_FLOAT_SUPPORTED + fprintf(stderr, " -dct float Use floating-point DCT method%s\n", + (JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : "")); +#endif + fprintf(stderr, " -dither fs Use F-S dithering (default)\n"); + fprintf(stderr, " -dither none Don't use dithering in quantization\n"); + fprintf(stderr, " -dither ordered Use ordered dither (medium speed, quality)\n"); +#ifdef QUANT_2PASS_SUPPORTED + fprintf(stderr, " -map FILE Map to colors used in named image file\n"); +#endif + fprintf(stderr, " -nosmooth Don't use high-quality upsampling\n"); +#ifdef QUANT_1PASS_SUPPORTED + fprintf(stderr, " -onepass Use 1-pass quantization (fast, low quality)\n"); +#endif + fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n"); + fprintf(stderr, " -outfile name Specify name for output file\n"); + fprintf(stderr, " -verbose or -debug Emit debug output\n"); + exit(EXIT_FAILURE); +} + + +LOCAL(int) +parse_switches (j_decompress_ptr cinfo, int argc, char **argv, + int last_file_arg_seen, boolean for_real) +/* Parse optional switches. + * Returns argv[] index of first file-name argument (== argc if none). + * Any file names with indexes <= last_file_arg_seen are ignored; + * they have presumably been processed in a previous iteration. + * (Pass 0 for last_file_arg_seen on the first or only iteration.) + * for_real is FALSE on the first (dummy) pass; we may skip any expensive + * processing. + */ +{ + int argn; + char * arg; + + /* Set up default JPEG parameters. */ + requested_fmt = DEFAULT_FMT; /* set default output file format */ + outfilename = NULL; + cinfo->err->trace_level = 0; + + /* Scan command line options, adjust parameters */ + + for (argn = 1; argn < argc; argn++) { + arg = argv[argn]; + if (*arg != '-') { + /* Not a switch, must be a file name argument */ + if (argn <= last_file_arg_seen) { + outfilename = NULL; /* -outfile applies to just one input file */ + continue; /* ignore this name if previously processed */ + } + break; /* else done parsing switches */ + } + arg++; /* advance past switch marker character */ + + if (keymatch(arg, "bmp", 1)) { + /* BMP output format. */ + requested_fmt = FMT_BMP; + + } else if (keymatch(arg, "colors", 1) || keymatch(arg, "colours", 1) || + keymatch(arg, "quantize", 1) || keymatch(arg, "quantise", 1)) { + /* Do color quantization. */ + int val; + + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%d", &val) != 1) + usage(); + cinfo->desired_number_of_colors = val; + cinfo->quantize_colors = TRUE; + + } else if (keymatch(arg, "dct", 2)) { + /* Select IDCT algorithm. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (keymatch(argv[argn], "int", 1)) { + cinfo->dct_method = JDCT_ISLOW; + } else if (keymatch(argv[argn], "fast", 2)) { + cinfo->dct_method = JDCT_IFAST; + } else if (keymatch(argv[argn], "float", 2)) { + cinfo->dct_method = JDCT_FLOAT; + } else + usage(); + + } else if (keymatch(arg, "dither", 2)) { + /* Select dithering algorithm. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (keymatch(argv[argn], "fs", 2)) { + cinfo->dither_mode = JDITHER_FS; + } else if (keymatch(argv[argn], "none", 2)) { + cinfo->dither_mode = JDITHER_NONE; + } else if (keymatch(argv[argn], "ordered", 2)) { + cinfo->dither_mode = JDITHER_ORDERED; + } else + usage(); + + } else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) { + /* Enable debug printouts. */ + /* On first -d, print version identification */ + static boolean printed_version = FALSE; + + if (! printed_version) { + fprintf(stderr, "Independent JPEG Group's DJPEG, version %s\n%s\n", + JVERSION, JCOPYRIGHT); + printed_version = TRUE; + } + cinfo->err->trace_level++; + + } else if (keymatch(arg, "fast", 1)) { + /* Select recommended processing options for quick-and-dirty output. */ + cinfo->two_pass_quantize = FALSE; + cinfo->dither_mode = JDITHER_ORDERED; + if (! cinfo->quantize_colors) /* don't override an earlier -colors */ + cinfo->desired_number_of_colors = 216; + cinfo->dct_method = JDCT_FASTEST; + cinfo->do_fancy_upsampling = FALSE; + + } else if (keymatch(arg, "gif", 1)) { + /* GIF output format. */ + requested_fmt = FMT_GIF; + + } else if (keymatch(arg, "grayscale", 2) || keymatch(arg, "greyscale",2)) { + /* Force monochrome output. */ + cinfo->out_color_space = JCS_GRAYSCALE; + + } else if (keymatch(arg, "map", 3)) { + /* Quantize to a color map taken from an input file. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (for_real) { /* too expensive to do twice! */ +#ifdef QUANT_2PASS_SUPPORTED /* otherwise can't quantize to supplied map */ + FILE * mapfile; + + if ((mapfile = fopen(argv[argn], READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); + exit(EXIT_FAILURE); + } + read_color_map(cinfo, mapfile); + fclose(mapfile); + cinfo->quantize_colors = TRUE; +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } + + } else if (keymatch(arg, "maxmemory", 3)) { + /* Maximum memory in Kb (or Mb with 'm'). */ + long lval; + char ch = 'x'; + + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) + usage(); + if (ch == 'm' || ch == 'M') + lval *= 1000L; + cinfo->mem->max_memory_to_use = lval * 1000L; + + } else if (keymatch(arg, "nosmooth", 3)) { + /* Suppress fancy upsampling */ + cinfo->do_fancy_upsampling = FALSE; + + } else if (keymatch(arg, "onepass", 3)) { + /* Use fast one-pass quantization. */ + cinfo->two_pass_quantize = FALSE; + + } else if (keymatch(arg, "os2", 3)) { + /* BMP output format (OS/2 flavor). */ + requested_fmt = FMT_OS2; + + } else if (keymatch(arg, "outfile", 4)) { + /* Set output file name. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + outfilename = argv[argn]; /* save it away for later use */ + + } else if (keymatch(arg, "pnm", 1) || keymatch(arg, "ppm", 1)) { + /* PPM/PGM output format. */ + requested_fmt = FMT_PPM; + + } else if (keymatch(arg, "rle", 1)) { + /* RLE output format. */ + requested_fmt = FMT_RLE; + + } else if (keymatch(arg, "scale", 1)) { + /* Scale the output image by a fraction M/N. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%d/%d", + &cinfo->scale_num, &cinfo->scale_denom) != 2) + usage(); + + } else if (keymatch(arg, "targa", 1)) { + /* Targa output format. */ + requested_fmt = FMT_TARGA; + + } else { + usage(); /* bogus switch */ + } + } + + return argn; /* return index of next arg (file name) */ +} + + +/* + * Marker processor for COM and interesting APPn markers. + * This replaces the library's built-in processor, which just skips the marker. + * We want to print out the marker as text, to the extent possible. + * Note this code relies on a non-suspending data source. + */ + +LOCAL(unsigned int) +jpeg_getc (j_decompress_ptr cinfo) +/* Read next byte */ +{ + struct jpeg_source_mgr * datasrc = cinfo->src; + + if (datasrc->bytes_in_buffer == 0) { + if (! (*datasrc->fill_input_buffer) (cinfo)) + ERREXIT(cinfo, JERR_CANT_SUSPEND); + } + datasrc->bytes_in_buffer--; + return GETJOCTET(*datasrc->next_input_byte++); +} + + +METHODDEF(boolean) +print_text_marker (j_decompress_ptr cinfo) +{ + boolean traceit = (cinfo->err->trace_level >= 1); + INT32 length; + unsigned int ch; + unsigned int lastch = 0; + + length = jpeg_getc(cinfo) << 8; + length += jpeg_getc(cinfo); + length -= 2; /* discount the length word itself */ + + if (traceit) { + if (cinfo->unread_marker == JPEG_COM) + fprintf(stderr, "Comment, length %ld:\n", (long) length); + else /* assume it is an APPn otherwise */ + fprintf(stderr, "APP%d, length %ld:\n", + cinfo->unread_marker - JPEG_APP0, (long) length); + } + + while (--length >= 0) { + ch = jpeg_getc(cinfo); + if (traceit) { + /* Emit the character in a readable form. + * Nonprintables are converted to \nnn form, + * while \ is converted to \\. + * Newlines in CR, CR/LF, or LF form will be printed as one newline. + */ + if (ch == '\r') { + fprintf(stderr, "\n"); + } else if (ch == '\n') { + if (lastch != '\r') + fprintf(stderr, "\n"); + } else if (ch == '\\') { + fprintf(stderr, "\\\\"); + } else if (isprint(ch)) { + putc(ch, stderr); + } else { + fprintf(stderr, "\\%03o", ch); + } + lastch = ch; + } + } + + if (traceit) + fprintf(stderr, "\n"); + + return TRUE; +} + + +/* + * The main program. + */ + +int +main (int argc, char **argv) +{ + struct jpeg_decompress_struct cinfo; + struct jpeg_error_mgr jerr; +#ifdef PROGRESS_REPORT + struct cdjpeg_progress_mgr progress; +#endif + int file_index; + djpeg_dest_ptr dest_mgr = NULL; + FILE * input_file; + FILE * output_file; + JDIMENSION num_scanlines; + + /* On Mac, fetch a command line. */ +#ifdef USE_CCOMMAND + argc = ccommand(&argv); +#endif + + progname = argv[0]; + if (progname == NULL || progname[0] == 0) + progname = "djpeg"; /* in case C library doesn't provide it */ + + /* Initialize the JPEG decompression object with default error handling. */ + cinfo.err = jpeg_std_error(&jerr); + jpeg_create_decompress(&cinfo); + /* Add some application-specific error messages (from cderror.h) */ + jerr.addon_message_table = cdjpeg_message_table; + jerr.first_addon_message = JMSG_FIRSTADDONCODE; + jerr.last_addon_message = JMSG_LASTADDONCODE; + + /* Insert custom marker processor for COM and APP12. + * APP12 is used by some digital camera makers for textual info, + * so we provide the ability to display it as text. + * If you like, additional APPn marker types can be selected for display, + * but don't try to override APP0 or APP14 this way (see libjpeg.doc). + */ + jpeg_set_marker_processor(&cinfo, JPEG_COM, print_text_marker); + jpeg_set_marker_processor(&cinfo, JPEG_APP0+12, print_text_marker); + + /* Now safe to enable signal catcher. */ +#ifdef NEED_SIGNAL_CATCHER + enable_signal_catcher((j_common_ptr) &cinfo); +#endif + + /* Scan command line to find file names. */ + /* It is convenient to use just one switch-parsing routine, but the switch + * values read here are ignored; we will rescan the switches after opening + * the input file. + * (Exception: tracing level set here controls verbosity for COM markers + * found during jpeg_read_header...) + */ + + file_index = parse_switches(&cinfo, argc, argv, 0, FALSE); + +#ifdef TWO_FILE_COMMANDLINE + /* Must have either -outfile switch or explicit output file name */ + if (outfilename == NULL) { + if (file_index != argc-2) { + fprintf(stderr, "%s: must name one input and one output file\n", + progname); + usage(); + } + outfilename = argv[file_index+1]; + } else { + if (file_index != argc-1) { + fprintf(stderr, "%s: must name one input and one output file\n", + progname); + usage(); + } + } +#else + /* Unix style: expect zero or one file name */ + if (file_index < argc-1) { + fprintf(stderr, "%s: only one input file\n", progname); + usage(); + } +#endif /* TWO_FILE_COMMANDLINE */ + + /* Open the input file. */ + if (file_index < argc) { + if ((input_file = fopen(argv[file_index], READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[file_index]); + exit(EXIT_FAILURE); + } + } else { + /* default input file is stdin */ + input_file = read_stdin(); + } + + /* Open the output file. */ + if (outfilename != NULL) { + if ((output_file = fopen(outfilename, WRITE_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, outfilename); + exit(EXIT_FAILURE); + } + } else { + /* default output file is stdout */ + output_file = write_stdout(); + } + +#ifdef PROGRESS_REPORT + start_progress_monitor((j_common_ptr) &cinfo, &progress); +#endif + + /* Specify data source for decompression */ + jpeg_stdio_src(&cinfo, input_file); + + /* Read file header, set default decompression parameters */ + (void) jpeg_read_header(&cinfo, TRUE); + + /* Adjust default decompression parameters by re-parsing the options */ + file_index = parse_switches(&cinfo, argc, argv, 0, TRUE); + + /* Initialize the output module now to let it override any crucial + * option settings (for instance, GIF wants to force color quantization). + */ + switch (requested_fmt) { +#ifdef BMP_SUPPORTED + case FMT_BMP: + dest_mgr = jinit_write_bmp(&cinfo, FALSE); + break; + case FMT_OS2: + dest_mgr = jinit_write_bmp(&cinfo, TRUE); + break; +#endif +#ifdef GIF_SUPPORTED + case FMT_GIF: + dest_mgr = jinit_write_gif(&cinfo); + break; +#endif +#ifdef PPM_SUPPORTED + case FMT_PPM: + dest_mgr = jinit_write_ppm(&cinfo); + break; +#endif +#ifdef RLE_SUPPORTED + case FMT_RLE: + dest_mgr = jinit_write_rle(&cinfo); + break; +#endif +#ifdef TARGA_SUPPORTED + case FMT_TARGA: + dest_mgr = jinit_write_targa(&cinfo); + break; +#endif + default: + ERREXIT(&cinfo, JERR_UNSUPPORTED_FORMAT); + break; + } + dest_mgr->output_file = output_file; + + /* Start decompressor */ + (void) jpeg_start_decompress(&cinfo); + + /* Write output file header */ + (*dest_mgr->start_output) (&cinfo, dest_mgr); + + /* Process data */ + while (cinfo.output_scanline < cinfo.output_height) { + num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer, + dest_mgr->buffer_height); + (*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines); + } + +#ifdef PROGRESS_REPORT + /* Hack: count final pass as done in case finish_output does an extra pass. + * The library won't have updated completed_passes. + */ + progress.pub.completed_passes = progress.pub.total_passes; +#endif + + /* Finish decompression and release memory. + * I must do it in this order because output module has allocated memory + * of lifespan JPOOL_IMAGE; it needs to finish before releasing memory. + */ + (*dest_mgr->finish_output) (&cinfo, dest_mgr); + (void) jpeg_finish_decompress(&cinfo); + jpeg_destroy_decompress(&cinfo); + + /* Close files, if we opened them */ + if (input_file != stdin) + fclose(input_file); + if (output_file != stdout) + fclose(output_file); + +#ifdef PROGRESS_REPORT + end_progress_monitor((j_common_ptr) &cinfo); +#endif + + /* All done. */ + exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS); + return 0; /* suppress no-return-value warnings */ +} diff --git a/Build/source/extra/jpeg/example.c b/Build/source/extra/jpeg/example.c new file mode 100644 index 00000000000..7fc354f04d9 --- /dev/null +++ b/Build/source/extra/jpeg/example.c @@ -0,0 +1,433 @@ +/* + * example.c + * + * This file illustrates how to use the IJG code as a subroutine library + * to read or write JPEG image files. You should look at this code in + * conjunction with the documentation file libjpeg.doc. + * + * This code will not do anything useful as-is, but it may be helpful as a + * skeleton for constructing routines that call the JPEG library. + * + * We present these routines in the same coding style used in the JPEG code + * (ANSI function definitions, etc); but you are of course free to code your + * routines in a different style if you prefer. + */ + +#include + +/* + * Include file for users of JPEG library. + * You will need to have included system headers that define at least + * the typedefs FILE and size_t before you can include jpeglib.h. + * (stdio.h is sufficient on ANSI-conforming systems.) + * You may also wish to include "jerror.h". + */ + +#include "jpeglib.h" + +/* + * is used for the optional error recovery mechanism shown in + * the second part of the example. + */ + +#include + + + +/******************** JPEG COMPRESSION SAMPLE INTERFACE *******************/ + +/* This half of the example shows how to feed data into the JPEG compressor. + * We present a minimal version that does not worry about refinements such + * as error recovery (the JPEG code will just exit() if it gets an error). + */ + + +/* + * IMAGE DATA FORMATS: + * + * The standard input image format is a rectangular array of pixels, with + * each pixel having the same number of "component" values (color channels). + * Each pixel row is an array of JSAMPLEs (which typically are unsigned chars). + * If you are working with color data, then the color values for each pixel + * must be adjacent in the row; for example, R,G,B,R,G,B,R,G,B,... for 24-bit + * RGB color. + * + * For this example, we'll assume that this data structure matches the way + * our application has stored the image in memory, so we can just pass a + * pointer to our image buffer. In particular, let's say that the image is + * RGB color and is described by: + */ + +extern JSAMPLE * image_buffer; /* Points to large array of R,G,B-order data */ +extern int image_height; /* Number of rows in image */ +extern int image_width; /* Number of columns in image */ + + +/* + * Sample routine for JPEG compression. We assume that the target file name + * and a compression quality factor are passed in. + */ + +GLOBAL(void) +write_JPEG_file (char * filename, int quality) +{ + /* This struct contains the JPEG compression parameters and pointers to + * working space (which is allocated as needed by the JPEG library). + * It is possible to have several such structures, representing multiple + * compression/decompression processes, in existence at once. We refer + * to any one struct (and its associated working data) as a "JPEG object". + */ + struct jpeg_compress_struct cinfo; + /* This struct represents a JPEG error handler. It is declared separately + * because applications often want to supply a specialized error handler + * (see the second half of this file for an example). But here we just + * take the easy way out and use the standard error handler, which will + * print a message on stderr and call exit() if compression fails. + * Note that this struct must live as long as the main JPEG parameter + * struct, to avoid dangling-pointer problems. + */ + struct jpeg_error_mgr jerr; + /* More stuff */ + FILE * outfile; /* target file */ + JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */ + int row_stride; /* physical row width in image buffer */ + + /* Step 1: allocate and initialize JPEG compression object */ + + /* We have to set up the error handler first, in case the initialization + * step fails. (Unlikely, but it could happen if you are out of memory.) + * This routine fills in the contents of struct jerr, and returns jerr's + * address which we place into the link field in cinfo. + */ + cinfo.err = jpeg_std_error(&jerr); + /* Now we can initialize the JPEG compression object. */ + jpeg_create_compress(&cinfo); + + /* Step 2: specify data destination (eg, a file) */ + /* Note: steps 2 and 3 can be done in either order. */ + + /* Here we use the library-supplied code to send compressed data to a + * stdio stream. You can also write your own code to do something else. + * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that + * requires it in order to write binary files. + */ + if ((outfile = fopen(filename, "wb")) == NULL) { + fprintf(stderr, "can't open %s\n", filename); + exit(1); + } + jpeg_stdio_dest(&cinfo, outfile); + + /* Step 3: set parameters for compression */ + + /* First we supply a description of the input image. + * Four fields of the cinfo struct must be filled in: + */ + cinfo.image_width = image_width; /* image width and height, in pixels */ + cinfo.image_height = image_height; + cinfo.input_components = 3; /* # of color components per pixel */ + cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ + /* Now use the library's routine to set default compression parameters. + * (You must set at least cinfo.in_color_space before calling this, + * since the defaults depend on the source color space.) + */ + jpeg_set_defaults(&cinfo); + /* Now you can set any non-default parameters you wish to. + * Here we just illustrate the use of quality (quantization table) scaling: + */ + jpeg_set_quality(&cinfo, quality, TRUE /* limit to baseline-JPEG values */); + + /* Step 4: Start compressor */ + + /* TRUE ensures that we will write a complete interchange-JPEG file. + * Pass TRUE unless you are very sure of what you're doing. + */ + jpeg_start_compress(&cinfo, TRUE); + + /* Step 5: while (scan lines remain to be written) */ + /* jpeg_write_scanlines(...); */ + + /* Here we use the library's state variable cinfo.next_scanline as the + * loop counter, so that we don't have to keep track ourselves. + * To keep things simple, we pass one scanline per call; you can pass + * more if you wish, though. + */ + row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */ + + while (cinfo.next_scanline < cinfo.image_height) { + /* jpeg_write_scanlines expects an array of pointers to scanlines. + * Here the array is only one element long, but you could pass + * more than one scanline at a time if that's more convenient. + */ + row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride]; + (void) jpeg_write_scanlines(&cinfo, row_pointer, 1); + } + + /* Step 6: Finish compression */ + + jpeg_finish_compress(&cinfo); + /* After finish_compress, we can close the output file. */ + fclose(outfile); + + /* Step 7: release JPEG compression object */ + + /* This is an important step since it will release a good deal of memory. */ + jpeg_destroy_compress(&cinfo); + + /* And we're done! */ +} + + +/* + * SOME FINE POINTS: + * + * In the above loop, we ignored the return value of jpeg_write_scanlines, + * which is the number of scanlines actually written. We could get away + * with this because we were only relying on the value of cinfo.next_scanline, + * which will be incremented correctly. If you maintain additional loop + * variables then you should be careful to increment them properly. + * Actually, for output to a stdio stream you needn't worry, because + * then jpeg_write_scanlines will write all the lines passed (or else exit + * with a fatal error). Partial writes can only occur if you use a data + * destination module that can demand suspension of the compressor. + * (If you don't know what that's for, you don't need it.) + * + * If the compressor requires full-image buffers (for entropy-coding + * optimization or a multi-scan JPEG file), it will create temporary + * files for anything that doesn't fit within the maximum-memory setting. + * (Note that temp files are NOT needed if you use the default parameters.) + * On some systems you may need to set up a signal handler to ensure that + * temporary files are deleted if the program is interrupted. See libjpeg.doc. + * + * Scanlines MUST be supplied in top-to-bottom order if you want your JPEG + * files to be compatible with everyone else's. If you cannot readily read + * your data in that order, you'll need an intermediate array to hold the + * image. See rdtarga.c or rdbmp.c for examples of handling bottom-to-top + * source data using the JPEG code's internal virtual-array mechanisms. + */ + + + +/******************** JPEG DECOMPRESSION SAMPLE INTERFACE *******************/ + +/* This half of the example shows how to read data from the JPEG decompressor. + * It's a bit more refined than the above, in that we show: + * (a) how to modify the JPEG library's standard error-reporting behavior; + * (b) how to allocate workspace using the library's memory manager. + * + * Just to make this example a little different from the first one, we'll + * assume that we do not intend to put the whole image into an in-memory + * buffer, but to send it line-by-line someplace else. We need a one- + * scanline-high JSAMPLE array as a work buffer, and we will let the JPEG + * memory manager allocate it for us. This approach is actually quite useful + * because we don't need to remember to deallocate the buffer separately: it + * will go away automatically when the JPEG object is cleaned up. + */ + + +/* + * ERROR HANDLING: + * + * The JPEG library's standard error handler (jerror.c) is divided into + * several "methods" which you can override individually. This lets you + * adjust the behavior without duplicating a lot of code, which you might + * have to update with each future release. + * + * Our example here shows how to override the "error_exit" method so that + * control is returned to the library's caller when a fatal error occurs, + * rather than calling exit() as the standard error_exit method does. + * + * We use C's setjmp/longjmp facility to return control. This means that the + * routine which calls the JPEG library must first execute a setjmp() call to + * establish the return point. We want the replacement error_exit to do a + * longjmp(). But we need to make the setjmp buffer accessible to the + * error_exit routine. To do this, we make a private extension of the + * standard JPEG error handler object. (If we were using C++, we'd say we + * were making a subclass of the regular error handler.) + * + * Here's the extended error handler struct: + */ + +struct my_error_mgr { + struct jpeg_error_mgr pub; /* "public" fields */ + + jmp_buf setjmp_buffer; /* for return to caller */ +}; + +typedef struct my_error_mgr * my_error_ptr; + +/* + * Here's the routine that will replace the standard error_exit method: + */ + +METHODDEF(void) +my_error_exit (j_common_ptr cinfo) +{ + /* cinfo->err really points to a my_error_mgr struct, so coerce pointer */ + my_error_ptr myerr = (my_error_ptr) cinfo->err; + + /* Always display the message. */ + /* We could postpone this until after returning, if we chose. */ + (*cinfo->err->output_message) (cinfo); + + /* Return control to the setjmp point */ + longjmp(myerr->setjmp_buffer, 1); +} + + +/* + * Sample routine for JPEG decompression. We assume that the source file name + * is passed in. We want to return 1 on success, 0 on error. + */ + + +GLOBAL(int) +read_JPEG_file (char * filename) +{ + /* This struct contains the JPEG decompression parameters and pointers to + * working space (which is allocated as needed by the JPEG library). + */ + struct jpeg_decompress_struct cinfo; + /* We use our private extension JPEG error handler. + * Note that this struct must live as long as the main JPEG parameter + * struct, to avoid dangling-pointer problems. + */ + struct my_error_mgr jerr; + /* More stuff */ + FILE * infile; /* source file */ + JSAMPARRAY buffer; /* Output row buffer */ + int row_stride; /* physical row width in output buffer */ + + /* In this example we want to open the input file before doing anything else, + * so that the setjmp() error recovery below can assume the file is open. + * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that + * requires it in order to read binary files. + */ + + if ((infile = fopen(filename, "rb")) == NULL) { + fprintf(stderr, "can't open %s\n", filename); + return 0; + } + + /* Step 1: allocate and initialize JPEG decompression object */ + + /* We set up the normal JPEG error routines, then override error_exit. */ + cinfo.err = jpeg_std_error(&jerr.pub); + jerr.pub.error_exit = my_error_exit; + /* Establish the setjmp return context for my_error_exit to use. */ + if (setjmp(jerr.setjmp_buffer)) { + /* If we get here, the JPEG code has signaled an error. + * We need to clean up the JPEG object, close the input file, and return. + */ + jpeg_destroy_decompress(&cinfo); + fclose(infile); + return 0; + } + /* Now we can initialize the JPEG decompression object. */ + jpeg_create_decompress(&cinfo); + + /* Step 2: specify data source (eg, a file) */ + + jpeg_stdio_src(&cinfo, infile); + + /* Step 3: read file parameters with jpeg_read_header() */ + + (void) jpeg_read_header(&cinfo, TRUE); + /* We can ignore the return value from jpeg_read_header since + * (a) suspension is not possible with the stdio data source, and + * (b) we passed TRUE to reject a tables-only JPEG file as an error. + * See libjpeg.doc for more info. + */ + + /* Step 4: set parameters for decompression */ + + /* In this example, we don't need to change any of the defaults set by + * jpeg_read_header(), so we do nothing here. + */ + + /* Step 5: Start decompressor */ + + (void) jpeg_start_decompress(&cinfo); + /* We can ignore the return value since suspension is not possible + * with the stdio data source. + */ + + /* We may need to do some setup of our own at this point before reading + * the data. After jpeg_start_decompress() we have the correct scaled + * output image dimensions available, as well as the output colormap + * if we asked for color quantization. + * In this example, we need to make an output work buffer of the right size. + */ + /* JSAMPLEs per row in output buffer */ + row_stride = cinfo.output_width * cinfo.output_components; + /* Make a one-row-high sample array that will go away when done with image */ + buffer = (*cinfo.mem->alloc_sarray) + ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); + + /* Step 6: while (scan lines remain to be read) */ + /* jpeg_read_scanlines(...); */ + + /* Here we use the library's state variable cinfo.output_scanline as the + * loop counter, so that we don't have to keep track ourselves. + */ + while (cinfo.output_scanline < cinfo.output_height) { + /* jpeg_read_scanlines expects an array of pointers to scanlines. + * Here the array is only one element long, but you could ask for + * more than one scanline at a time if that's more convenient. + */ + (void) jpeg_read_scanlines(&cinfo, buffer, 1); + /* Assume put_scanline_someplace wants a pointer and sample count. */ + put_scanline_someplace(buffer[0], row_stride); + } + + /* Step 7: Finish decompression */ + + (void) jpeg_finish_decompress(&cinfo); + /* We can ignore the return value since suspension is not possible + * with the stdio data source. + */ + + /* Step 8: Release JPEG decompression object */ + + /* This is an important step since it will release a good deal of memory. */ + jpeg_destroy_decompress(&cinfo); + + /* After finish_decompress, we can close the input file. + * Here we postpone it until after no more JPEG errors are possible, + * so as to simplify the setjmp error logic above. (Actually, I don't + * think that jpeg_destroy can do an error exit, but why assume anything...) + */ + fclose(infile); + + /* At this point you may want to check to see whether any corrupt-data + * warnings occurred (test whether jerr.pub.num_warnings is nonzero). + */ + + /* And we're done! */ + return 1; +} + + +/* + * SOME FINE POINTS: + * + * In the above code, we ignored the return value of jpeg_read_scanlines, + * which is the number of scanlines actually read. We could get away with + * this because we asked for only one line at a time and we weren't using + * a suspending data source. See libjpeg.doc for more info. + * + * We cheated a bit by calling alloc_sarray() after jpeg_start_decompress(); + * we should have done it beforehand to ensure that the space would be + * counted against the JPEG max_memory setting. In some systems the above + * code would risk an out-of-memory error. However, in general we don't + * know the output image dimensions before jpeg_start_decompress(), unless we + * call jpeg_calc_output_dimensions(). See libjpeg.doc for more about this. + * + * Scanlines are returned in the same order as they appear in the JPEG file, + * which is standardly top-to-bottom. If you must emit data bottom-to-top, + * you can use one of the virtual arrays provided by the JPEG memory manager + * to invert the data. See wrbmp.c for an example. + * + * As with compression, some operating modes may require temporary files. + * On some systems you may need to set up a signal handler to ensure that + * temporary files are deleted if the program is interrupted. See libjpeg.doc. + */ diff --git a/Build/source/extra/jpeg/filelist.doc b/Build/source/extra/jpeg/filelist.doc new file mode 100644 index 00000000000..e14982ca55b --- /dev/null +++ b/Build/source/extra/jpeg/filelist.doc @@ -0,0 +1,210 @@ +IJG JPEG LIBRARY: FILE LIST + +Copyright (C) 1994-1998, Thomas G. Lane. +This file is part of the Independent JPEG Group's software. +For conditions of distribution and use, see the accompanying README file. + + +Here is a road map to the files in the IJG JPEG distribution. The +distribution includes the JPEG library proper, plus two application +programs ("cjpeg" and "djpeg") which use the library to convert JPEG +files to and from some other popular image formats. A third application +"jpegtran" uses the library to do lossless conversion between different +variants of JPEG. There are also two stand-alone applications, +"rdjpgcom" and "wrjpgcom". + + +THE JPEG LIBRARY +================ + +Include files: + +jpeglib.h JPEG library's exported data and function declarations. +jconfig.h Configuration declarations. Note: this file is not present + in the distribution; it is generated during installation. +jmorecfg.h Additional configuration declarations; need not be changed + for a standard installation. +jerror.h Declares JPEG library's error and trace message codes. +jinclude.h Central include file used by all IJG .c files to reference + system include files. +jpegint.h JPEG library's internal data structures. +jchuff.h Private declarations for Huffman encoder modules. +jdhuff.h Private declarations for Huffman decoder modules. +jdct.h Private declarations for forward & reverse DCT subsystems. +jmemsys.h Private declarations for memory management subsystem. +jversion.h Version information. + +Applications using the library should include jpeglib.h (which in turn +includes jconfig.h and jmorecfg.h). Optionally, jerror.h may be included +if the application needs to reference individual JPEG error codes. The +other include files are intended for internal use and would not normally +be included by an application program. (cjpeg/djpeg/etc do use jinclude.h, +since its function is to improve portability of the whole IJG distribution. +Most other applications will directly include the system include files they +want, and hence won't need jinclude.h.) + + +C source code files: + +These files contain most of the functions intended to be called directly by +an application program: + +jcapimin.c Application program interface: core routines for compression. +jcapistd.c Application program interface: standard compression. +jdapimin.c Application program interface: core routines for decompression. +jdapistd.c Application program interface: standard decompression. +jcomapi.c Application program interface routines common to compression + and decompression. +jcparam.c Compression parameter setting helper routines. +jctrans.c API and library routines for transcoding compression. +jdtrans.c API and library routines for transcoding decompression. + +Compression side of the library: + +jcinit.c Initialization: determines which other modules to use. +jcmaster.c Master control: setup and inter-pass sequencing logic. +jcmainct.c Main buffer controller (preprocessor => JPEG compressor). +jcprepct.c Preprocessor buffer controller. +jccoefct.c Buffer controller for DCT coefficient buffer. +jccolor.c Color space conversion. +jcsample.c Downsampling. +jcdctmgr.c DCT manager (DCT implementation selection & control). +jfdctint.c Forward DCT using slow-but-accurate integer method. +jfdctfst.c Forward DCT using faster, less accurate integer method. +jfdctflt.c Forward DCT using floating-point arithmetic. +jchuff.c Huffman entropy coding for sequential JPEG. +jcphuff.c Huffman entropy coding for progressive JPEG. +jcmarker.c JPEG marker writing. +jdatadst.c Data destination manager for stdio output. + +Decompression side of the library: + +jdmaster.c Master control: determines which other modules to use. +jdinput.c Input controller: controls input processing modules. +jdmainct.c Main buffer controller (JPEG decompressor => postprocessor). +jdcoefct.c Buffer controller for DCT coefficient buffer. +jdpostct.c Postprocessor buffer controller. +jdmarker.c JPEG marker reading. +jdhuff.c Huffman entropy decoding for sequential JPEG. +jdphuff.c Huffman entropy decoding for progressive JPEG. +jddctmgr.c IDCT manager (IDCT implementation selection & control). +jidctint.c Inverse DCT using slow-but-accurate integer method. +jidctfst.c Inverse DCT using faster, less accurate integer method. +jidctflt.c Inverse DCT using floating-point arithmetic. +jidctred.c Inverse DCTs with reduced-size outputs. +jdsample.c Upsampling. +jdcolor.c Color space conversion. +jdmerge.c Merged upsampling/color conversion (faster, lower quality). +jquant1.c One-pass color quantization using a fixed-spacing colormap. +jquant2.c Two-pass color quantization using a custom-generated colormap. + Also handles one-pass quantization to an externally given map. +jdatasrc.c Data source manager for stdio input. + +Support files for both compression and decompression: + +jerror.c Standard error handling routines (application replaceable). +jmemmgr.c System-independent (more or less) memory management code. +jutils.c Miscellaneous utility routines. + +jmemmgr.c relies on a system-dependent memory management module. The IJG +distribution includes the following implementations of the system-dependent +module: + +jmemnobs.c "No backing store": assumes adequate virtual memory exists. +jmemansi.c Makes temporary files with ANSI-standard routine tmpfile(). +jmemname.c Makes temporary files with program-generated file names. +jmemdos.c Custom implementation for MS-DOS (16-bit environment only): + can use extended and expanded memory as well as temp files. +jmemmac.c Custom implementation for Apple Macintosh. + +Exactly one of the system-dependent modules should be configured into an +installed JPEG library (see install.doc for hints about which one to use). +On unusual systems you may find it worthwhile to make a special +system-dependent memory manager. + + +Non-C source code files: + +jmemdosa.asm 80x86 assembly code support for jmemdos.c; used only in + MS-DOS-specific configurations of the JPEG library. + + +CJPEG/DJPEG/JPEGTRAN +==================== + +Include files: + +cdjpeg.h Declarations shared by cjpeg/djpeg/jpegtran modules. +cderror.h Additional error and trace message codes for cjpeg et al. +transupp.h Declarations for jpegtran support routines in transupp.c. + +C source code files: + +cjpeg.c Main program for cjpeg. +djpeg.c Main program for djpeg. +jpegtran.c Main program for jpegtran. +cdjpeg.c Utility routines used by all three programs. +rdcolmap.c Code to read a colormap file for djpeg's "-map" switch. +rdswitch.c Code to process some of cjpeg's more complex switches. + Also used by jpegtran. +transupp.c Support code for jpegtran: lossless image manipulations. + +Image file reader modules for cjpeg: + +rdbmp.c BMP file input. +rdgif.c GIF file input (now just a stub). +rdppm.c PPM/PGM file input. +rdrle.c Utah RLE file input. +rdtarga.c Targa file input. + +Image file writer modules for djpeg: + +wrbmp.c BMP file output. +wrgif.c GIF file output (a mere shadow of its former self). +wrppm.c PPM/PGM file output. +wrrle.c Utah RLE file output. +wrtarga.c Targa file output. + + +RDJPGCOM/WRJPGCOM +================= + +C source code files: + +rdjpgcom.c Stand-alone rdjpgcom application. +wrjpgcom.c Stand-alone wrjpgcom application. + +These programs do not depend on the IJG library. They do use +jconfig.h and jinclude.h, only to improve portability. + + +ADDITIONAL FILES +================ + +Documentation (see README for a guide to the documentation files): + +README Master documentation file. +*.doc Other documentation files. +*.1 Documentation in Unix man page format. +change.log Version-to-version change highlights. +example.c Sample code for calling JPEG library. + +Configuration/installation files and programs (see install.doc for more info): + +configure Unix shell script to perform automatic configuration. +ltconfig Support scripts for configure (from GNU libtool). +ltmain.sh +config.guess +config.sub +install-sh Install shell script for those Unix systems lacking one. +ckconfig.c Program to generate jconfig.h on non-Unix systems. +jconfig.doc Template for making jconfig.h by hand. +makefile.* Sample makefiles for particular systems. +jconfig.* Sample jconfig.h for particular systems. +ansi2knr.c De-ANSIfier for pre-ANSI C compilers (courtesy of + L. Peter Deutsch and Aladdin Enterprises). + +Test files (see install.doc for test procedure): + +test*.* Source and comparison files for confidence test. + These are binary image files, NOT text files. diff --git a/Build/source/extra/jpeg/install-sh b/Build/source/extra/jpeg/install-sh new file mode 100644 index 00000000000..6781b987bdb --- /dev/null +++ b/Build/source/extra/jpeg/install-sh @@ -0,0 +1,520 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2009-04-28.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# 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 +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + 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. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# 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/Build/source/extra/jpeg/install.doc b/Build/source/extra/jpeg/install.doc new file mode 100644 index 00000000000..3702b986b6f --- /dev/null +++ b/Build/source/extra/jpeg/install.doc @@ -0,0 +1,1063 @@ +INSTALLATION INSTRUCTIONS for the Independent JPEG Group's JPEG software + +Copyright (C) 1991-1998, Thomas G. Lane. +This file is part of the Independent JPEG Group's software. +For conditions of distribution and use, see the accompanying README file. + + +This file explains how to configure and install the IJG software. We have +tried to make this software extremely portable and flexible, so that it can be +adapted to almost any environment. The downside of this decision is that the +installation process is complicated. We have provided shortcuts to simplify +the task on common systems. But in any case, you will need at least a little +familiarity with C programming and program build procedures for your system. + +If you are only using this software as part of a larger program, the larger +program's installation procedure may take care of configuring the IJG code. +For example, Ghostscript's installation script will configure the IJG code. +You don't need to read this file if you just want to compile Ghostscript. + +If you are on a Unix machine, you may not need to read this file at all. +Try doing + ./configure + make + make test +If that doesn't complain, do + make install +(better do "make -n install" first to see if the makefile will put the files +where you want them). Read further if you run into snags or want to customize +the code for your system. + + +TABLE OF CONTENTS +----------------- + +Before you start +Configuring the software: + using the automatic "configure" script + using one of the supplied jconfig and makefile files + by hand +Building the software +Testing the software +Installing the software +Optional stuff +Optimization +Hints for specific systems + + +BEFORE YOU START +================ + +Before installing the software you must unpack the distributed source code. +Since you are reading this file, you have probably already succeeded in this +task. However, there is a potential for error if you needed to convert the +files to the local standard text file format (for example, if you are on +MS-DOS you may have converted LF end-of-line to CR/LF). You must apply +such conversion to all the files EXCEPT those whose names begin with "test". +The test files contain binary data; if you change them in any way then the +self-test will give bad results. + +Please check the last section of this file to see if there are hints for the +specific machine or compiler you are using. + + +CONFIGURING THE SOFTWARE +======================== + +To configure the IJG code for your system, you need to create two files: + * jconfig.h: contains values for system-dependent #define symbols. + * Makefile: controls the compilation process. +(On a non-Unix machine, you may create "project files" or some other +substitute for a Makefile. jconfig.h is needed in any environment.) + +We provide three different ways to generate these files: + * On a Unix system, you can just run the "configure" script. + * We provide sample jconfig files and makefiles for popular machines; + if your machine matches one of the samples, just copy the right sample + files to jconfig.h and Makefile. + * If all else fails, read the instructions below and make your own files. + + +Configuring the software using the automatic "configure" script +--------------------------------------------------------------- + +If you are on a Unix machine, you can just type + ./configure +and let the configure script construct appropriate configuration files. +If you're using "csh" on an old version of System V, you might need to type + sh configure +instead to prevent csh from trying to execute configure itself. +Expect configure to run for a few minutes, particularly on slower machines; +it works by compiling a series of test programs. + +Configure was created with GNU Autoconf and it follows the usual conventions +for GNU configure scripts. It makes a few assumptions that you may want to +override. You can do this by providing optional switches to configure: + +* If you want to build libjpeg as a shared library, say + ./configure --enable-shared +To get both shared and static libraries, say + ./configure --enable-shared --enable-static +Note that these switches invoke GNU libtool to take care of system-dependent +shared library building methods. If things don't work this way, please try +running configure without either switch; that should build a static library +without using libtool. If that works, your problem is probably with libtool +not with the IJG code. libtool is fairly new and doesn't support all flavors +of Unix yet. (You might be able to find a newer version of libtool than the +one included with libjpeg; see ftp.gnu.org. Report libtool problems to +bug-libtool@gnu.org.) + +* Configure will use gcc (GNU C compiler) if it's available, otherwise cc. +To force a particular compiler to be selected, use the CC option, for example + ./configure CC='cc' +The same method can be used to include any unusual compiler switches. +For example, on HP-UX you probably want to say + ./configure CC='cc -Aa' +to get HP's compiler to run in ANSI mode. + +* The default CFLAGS setting is "-O" for non-gcc compilers, "-O2" for gcc. +You can override this by saying, for example, + ./configure CFLAGS='-g' +if you want to compile with debugging support. + +* Configure will set up the makefile so that "make install" will install files +into /usr/local/bin, /usr/local/man, etc. You can specify an installation +prefix other than "/usr/local" by giving configure the option "--prefix=PATH". + +* If you don't have a lot of swap space, you may need to enable the IJG +software's internal virtual memory mechanism. To do this, give the option +"--enable-maxmem=N" where N is the default maxmemory limit in megabytes. +This is discussed in more detail under "Selecting a memory manager", below. +You probably don't need to worry about this on reasonably-sized Unix machines, +unless you plan to process very large images. + +Configure has some other features that are useful if you are cross-compiling +or working in a network of multiple machine types; but if you need those +features, you probably already know how to use them. + + +Configuring the software using one of the supplied jconfig and makefile files +----------------------------------------------------------------------------- + +If you have one of these systems, you can just use the provided configuration +files: + +Makefile jconfig file System and/or compiler + +makefile.manx jconfig.manx Amiga, Manx Aztec C +makefile.sas jconfig.sas Amiga, SAS C +makeproj.mac jconfig.mac Apple Macintosh, Metrowerks CodeWarrior +mak*jpeg.st jconfig.st Atari ST/STE/TT, Pure C or Turbo C +makefile.bcc jconfig.bcc MS-DOS or OS/2, Borland C +makefile.dj jconfig.dj MS-DOS, DJGPP (Delorie's port of GNU C) +makefile.mc6 jconfig.mc6 MS-DOS, Microsoft C (16-bit only) +makefile.wat jconfig.wat MS-DOS, OS/2, or Windows NT, Watcom C +makefile.vc jconfig.vc Windows NT/95, MS Visual C++ +make*.ds jconfig.vc Windows NT/95, MS Developer Studio +makefile.mms jconfig.vms Digital VMS, with MMS software +makefile.vms jconfig.vms Digital VMS, without MMS software + +Copy the proper jconfig file to jconfig.h and the makefile to Makefile (or +whatever your system uses as the standard makefile name). For more info see +the appropriate system-specific hints section near the end of this file. + + +Configuring the software by hand +-------------------------------- + +First, generate a jconfig.h file. If you are moderately familiar with C, +the comments in jconfig.doc should be enough information to do this; just +copy jconfig.doc to jconfig.h and edit it appropriately. Otherwise, you may +prefer to use the ckconfig.c program. You will need to compile and execute +ckconfig.c by hand --- we hope you know at least enough to do that. +ckconfig.c may not compile the first try (in fact, the whole idea is for it +to fail if anything is going to). If you get compile errors, fix them by +editing ckconfig.c according to the directions given in ckconfig.c. Once +you get it to run, it will write a suitable jconfig.h file, and will also +print out some advice about which makefile to use. + +You may also want to look at the canned jconfig files, if there is one for a +system similar to yours. + +Second, select a makefile and copy it to Makefile (or whatever your system +uses as the standard makefile name). The most generic makefiles we provide +are + makefile.ansi: if your C compiler supports function prototypes + makefile.unix: if not. +(You have function prototypes if ckconfig.c put "#define HAVE_PROTOTYPES" +in jconfig.h.) You may want to start from one of the other makefiles if +there is one for a system similar to yours. + +Look over the selected Makefile and adjust options as needed. In particular +you may want to change the CC and CFLAGS definitions. For instance, if you +are using GCC, set CC=gcc. If you had to use any compiler switches to get +ckconfig.c to work, make sure the same switches are in CFLAGS. + +If you are on a system that doesn't use makefiles, you'll need to set up +project files (or whatever you do use) to compile all the source files and +link them into executable files cjpeg, djpeg, jpegtran, rdjpgcom, and wrjpgcom. +See the file lists in any of the makefiles to find out which files go into +each program. Note that the provided makefiles all make a "library" file +libjpeg first, but you don't have to do that if you don't want to; the file +lists identify which source files are actually needed for compression, +decompression, or both. As a last resort, you can make a batch script that +just compiles everything and links it all together; makefile.vms is an example +of this (it's for VMS systems that have no make-like utility). + +Here are comments about some specific configuration decisions you'll +need to make: + +Command line style +------------------ + +These programs can use a Unix-like command line style which supports +redirection and piping, like this: + cjpeg inputfile >outputfile + cjpeg outputfile + source program | cjpeg >outputfile +The simpler "two file" command line style is just + cjpeg inputfile outputfile +You may prefer the two-file style, particularly if you don't have pipes. + +You MUST use two-file style on any system that doesn't cope well with binary +data fed through stdin/stdout; this is true for some MS-DOS compilers, for +example. If you're not on a Unix system, it's safest to assume you need +two-file style. (But if your compiler provides either the Posix-standard +fdopen() library routine or a Microsoft-compatible setmode() routine, you +can safely use the Unix command line style, by defining USE_FDOPEN or +USE_SETMODE respectively.) + +To use the two-file style, make jconfig.h say "#define TWO_FILE_COMMANDLINE". + +Selecting a memory manager +-------------------------- + +The IJG code is capable of working on images that are too big to fit in main +memory; data is swapped out to temporary files as necessary. However, the +code to do this is rather system-dependent. We provide five different +memory managers: + +* jmemansi.c This version uses the ANSI-standard library routine tmpfile(), + which not all non-ANSI systems have. On some systems + tmpfile() may put the temporary file in a non-optimal + location; if you don't like what it does, use jmemname.c. + +* jmemname.c This version creates named temporary files. For anything + except a Unix machine, you'll need to configure the + select_file_name() routine appropriately; see the comments + near the head of jmemname.c. If you use this version, define + NEED_SIGNAL_CATCHER in jconfig.h to make sure the temp files + are removed if the program is aborted. + +* jmemnobs.c (That stands for No Backing Store :-).) This will compile on + almost any system, but it assumes you have enough main memory + or virtual memory to hold the biggest images you work with. + +* jmemdos.c This should be used with most 16-bit MS-DOS compilers. + See the system-specific notes about MS-DOS for more info. + IMPORTANT: if you use this, define USE_MSDOS_MEMMGR in + jconfig.h, and include the assembly file jmemdosa.asm in the + programs. The supplied makefiles and jconfig files for + 16-bit MS-DOS compilers already do both. + +* jmemmac.c Custom version for Apple Macintosh; see the system-specific + notes for Macintosh for more info. + +To use a particular memory manager, change the SYSDEPMEM variable in your +makefile to equal the corresponding object file name (for example, jmemansi.o +or jmemansi.obj for jmemansi.c). + +If you have plenty of (real or virtual) main memory, just use jmemnobs.c. +"Plenty" means about ten bytes for every pixel in the largest images +you plan to process, so a lot of systems don't meet this criterion. +If yours doesn't, try jmemansi.c first. If that doesn't compile, you'll have +to use jmemname.c; be sure to adjust select_file_name() for local conditions. +You may also need to change unlink() to remove() in close_backing_store(). + +Except with jmemnobs.c or jmemmac.c, you need to adjust the DEFAULT_MAX_MEM +setting to a reasonable value for your system (either by adding a #define for +DEFAULT_MAX_MEM to jconfig.h, or by adding a -D switch to the Makefile). +This value limits the amount of data space the program will attempt to +allocate. Code and static data space isn't counted, so the actual memory +needs for cjpeg or djpeg are typically 100 to 150Kb more than the max-memory +setting. Larger max-memory settings reduce the amount of I/O needed to +process a large image, but too large a value can result in "insufficient +memory" failures. On most Unix machines (and other systems with virtual +memory), just set DEFAULT_MAX_MEM to several million and forget it. At the +other end of the spectrum, for MS-DOS machines you probably can't go much +above 300K to 400K. (On MS-DOS the value refers to conventional memory only. +Extended/expanded memory is handled separately by jmemdos.c.) + + +BUILDING THE SOFTWARE +===================== + +Now you should be able to compile the software. Just say "make" (or +whatever's necessary to start the compilation). Have a cup of coffee. + +Here are some things that could go wrong: + +If your compiler complains about undefined structures, you should be able to +shut it up by putting "#define INCOMPLETE_TYPES_BROKEN" in jconfig.h. + +If you have trouble with missing system include files or inclusion of the +wrong ones, read jinclude.h. This shouldn't happen if you used configure +or ckconfig.c to set up jconfig.h. + +There are a fair number of routines that do not use all of their parameters; +some compilers will issue warnings about this, which you can ignore. There +are also a few configuration checks that may give "unreachable code" warnings. +Any other warning deserves investigation. + +If you don't have a getenv() library routine, define NO_GETENV. + +Also see the system-specific hints, below. + + +TESTING THE SOFTWARE +==================== + +As a quick test of functionality we've included a small sample image in +several forms: + testorig.jpg Starting point for the djpeg tests. + testimg.ppm The output of djpeg testorig.jpg + testimg.bmp The output of djpeg -bmp -colors 256 testorig.jpg + testimg.jpg The output of cjpeg testimg.ppm + testprog.jpg Progressive-mode equivalent of testorig.jpg. + testimgp.jpg The output of cjpeg -progressive -optimize testimg.ppm +(The first- and second-generation .jpg files aren't identical since JPEG is +lossy.) If you can generate duplicates of the testimg* files then you +probably have working programs. + +With most of the makefiles, "make test" will perform the necessary +comparisons. + +If you're using a makefile that doesn't provide the test option, run djpeg +and cjpeg by hand and compare the output files to testimg* with whatever +binary file comparison tool you have. The files should be bit-for-bit +identical. + +If the programs complain "MAX_ALLOC_CHUNK is wrong, please fix", then you +need to reduce MAX_ALLOC_CHUNK to a value that fits in type size_t. +Try adding "#define MAX_ALLOC_CHUNK 65520L" to jconfig.h. A less likely +configuration error is "ALIGN_TYPE is wrong, please fix": defining ALIGN_TYPE +as long should take care of that one. + +If the cjpeg test run fails with "Missing Huffman code table entry", it's a +good bet that you needed to define RIGHT_SHIFT_IS_UNSIGNED. Go back to the +configuration step and run ckconfig.c. (This is a good plan for any other +test failure, too.) + +If you are using Unix (one-file) command line style on a non-Unix system, +it's a good idea to check that binary I/O through stdin/stdout actually +works. You should get the same results from "djpeg out.ppm" +as from "djpeg -outfile out.ppm testorig.jpg". Note that the makefiles all +use the latter style and therefore do not exercise stdin/stdout! If this +check fails, try recompiling with USE_SETMODE or USE_FDOPEN defined. +If it still doesn't work, better use two-file style. + +If you chose a memory manager other than jmemnobs.c, you should test that +temporary-file usage works. Try "djpeg -bmp -colors 256 -max 0 testorig.jpg" +and make sure its output matches testimg.bmp. If you have any really large +images handy, try compressing them with -optimize and/or decompressing with +-colors 256 to make sure your DEFAULT_MAX_MEM setting is not too large. + +NOTE: this is far from an exhaustive test of the JPEG software; some modules, +such as 1-pass color quantization, are not exercised at all. It's just a +quick test to give you some confidence that you haven't missed something +major. + + +INSTALLING THE SOFTWARE +======================= + +Once you're done with the above steps, you can install the software by +copying the executable files (cjpeg, djpeg, jpegtran, rdjpgcom, and wrjpgcom) +to wherever you normally install programs. On Unix systems, you'll also want +to put the man pages (cjpeg.1, djpeg.1, jpegtran.1, rdjpgcom.1, wrjpgcom.1) +in the man-page directory. The pre-fab makefiles don't support this step +since there's such a wide variety of installation procedures on different +systems. + +If you generated a Makefile with the "configure" script, you can just say + make install +to install the programs and their man pages into the standard places. +(You'll probably need to be root to do this.) We recommend first saying + make -n install +to see where configure thought the files should go. You may need to edit +the Makefile, particularly if your system's conventions for man page +filenames don't match what configure expects. + +If you want to install the IJG library itself, for use in compiling other +programs besides ours, then you need to put the four include files + jpeglib.h jerror.h jconfig.h jmorecfg.h +into your include-file directory, and put the library file libjpeg.a +(extension may vary depending on system) wherever library files go. +If you generated a Makefile with "configure", it will do what it thinks +is the right thing if you say + make install-lib + + +OPTIONAL STUFF +============== + +Progress monitor: + +If you like, you can #define PROGRESS_REPORT (in jconfig.h) to enable display +of percent-done progress reports. The routine provided in cdjpeg.c merely +prints percentages to stderr, but you can customize it to do something +fancier. + +Utah RLE file format support: + +We distribute the software with support for RLE image files (Utah Raster +Toolkit format) disabled, because the RLE support won't compile without the +Utah library. If you have URT version 3.1 or later, you can enable RLE +support as follows: + 1. #define RLE_SUPPORTED in jconfig.h. + 2. Add a -I option to CFLAGS in the Makefile for the directory + containing the URT .h files (typically the "include" + subdirectory of the URT distribution). + 3. Add -L... -lrle to LDLIBS in the Makefile, where ... specifies + the directory containing the URT "librle.a" file (typically the + "lib" subdirectory of the URT distribution). + +Support for 12-bit-deep pixel data: + +The JPEG standard allows either 8-bit or 12-bit data precision. (For color, +this means 8 or 12 bits per channel, of course.) If you need to work with +deeper than 8-bit data, you can compile the IJG code for 12-bit operation. +To do so: + 1. In jmorecfg.h, define BITS_IN_JSAMPLE as 12 rather than 8. + 2. In jconfig.h, undefine BMP_SUPPORTED, RLE_SUPPORTED, and TARGA_SUPPORTED, + because the code for those formats doesn't handle 12-bit data and won't + even compile. (The PPM code does work, as explained below. The GIF + code works too; it scales 8-bit GIF data to and from 12-bit depth + automatically.) + 3. Compile. Don't expect "make test" to pass, since the supplied test + files are for 8-bit data. + +Currently, 12-bit support does not work on 16-bit-int machines. + +Note that a 12-bit version will not read 8-bit JPEG files, nor vice versa; +so you'll want to keep around a regular 8-bit compilation as well. +(Run-time selection of data depth, to allow a single copy that does both, +is possible but would probably slow things down considerably; it's very low +on our to-do list.) + +The PPM reader (rdppm.c) can read 12-bit data from either text-format or +binary-format PPM and PGM files. Binary-format PPM/PGM files which have a +maxval greater than 255 are assumed to use 2 bytes per sample, LSB first +(little-endian order). As of early 1995, 2-byte binary format is not +officially supported by the PBMPLUS library, but it is expected that a +future release of PBMPLUS will support it. Note that the PPM reader will +read files of any maxval regardless of the BITS_IN_JSAMPLE setting; incoming +data is automatically rescaled to either maxval=255 or maxval=4095 as +appropriate for the cjpeg bit depth. + +The PPM writer (wrppm.c) will normally write 2-byte binary PPM or PGM +format, maxval 4095, when compiled with BITS_IN_JSAMPLE=12. Since this +format is not yet widely supported, you can disable it by compiling wrppm.c +with PPM_NORAWWORD defined; then the data is scaled down to 8 bits to make a +standard 1-byte/sample PPM or PGM file. (Yes, this means still another copy +of djpeg to keep around. But hopefully you won't need it for very long. +Poskanzer's supposed to get that new PBMPLUS release out Real Soon Now.) + +Of course, if you are working with 12-bit data, you probably have it stored +in some other, nonstandard format. In that case you'll probably want to +write your own I/O modules to read and write your format. + +Note that a 12-bit version of cjpeg always runs in "-optimize" mode, in +order to generate valid Huffman tables. This is necessary because our +default Huffman tables only cover 8-bit data. + +Removing code: + +If you need to make a smaller version of the JPEG software, some optional +functions can be removed at compile time. See the xxx_SUPPORTED #defines in +jconfig.h and jmorecfg.h. If at all possible, we recommend that you leave in +decoder support for all valid JPEG files, to ensure that you can read anyone's +output. Taking out support for image file formats that you don't use is the +most painless way to make the programs smaller. Another possibility is to +remove some of the DCT methods: in particular, the "IFAST" method may not be +enough faster than the others to be worth keeping on your machine. (If you +do remove ISLOW or IFAST, be sure to redefine JDCT_DEFAULT or JDCT_FASTEST +to a supported method, by adding a #define in jconfig.h.) + + +OPTIMIZATION +============ + +Unless you own a Cray, you'll probably be interested in making the JPEG +software go as fast as possible. This section covers some machine-dependent +optimizations you may want to try. We suggest that before trying any of +this, you first get the basic installation to pass the self-test step. +Repeat the self-test after any optimization to make sure that you haven't +broken anything. + +The integer DCT routines perform a lot of multiplications. These +multiplications must yield 32-bit results, but none of their input values +are more than 16 bits wide. On many machines, notably the 680x0 and 80x86 +CPUs, a 16x16=>32 bit multiply instruction is faster than a full 32x32=>32 +bit multiply. Unfortunately there is no portable way to specify such a +multiplication in C, but some compilers can generate one when you use the +right combination of casts. See the MULTIPLYxxx macro definitions in +jdct.h. If your compiler makes "int" be 32 bits and "short" be 16 bits, +defining SHORTxSHORT_32 is fairly likely to work. When experimenting with +alternate definitions, be sure to test not only whether the code still works +(use the self-test), but also whether it is actually faster --- on some +compilers, alternate definitions may compute the right answer, yet be slower +than the default. Timing cjpeg on a large PGM (grayscale) input file is the +best way to check this, as the DCT will be the largest fraction of the runtime +in that mode. (Note: some of the distributed compiler-specific jconfig files +already contain #define switches to select appropriate MULTIPLYxxx +definitions.) + +If your machine has sufficiently fast floating point hardware, you may find +that the float DCT method is faster than the integer DCT methods, even +after tweaking the integer multiply macros. In that case you may want to +make the float DCT be the default method. (The only objection to this is +that float DCT results may vary slightly across machines.) To do that, add +"#define JDCT_DEFAULT JDCT_FLOAT" to jconfig.h. Even if you don't change +the default, you should redefine JDCT_FASTEST, which is the method selected +by djpeg's -fast switch. Don't forget to update the documentation files +(usage.doc and/or cjpeg.1, djpeg.1) to agree with what you've done. + +If access to "short" arrays is slow on your machine, it may be a win to +define type JCOEF as int rather than short. This will cost a good deal of +memory though, particularly in some multi-pass modes, so don't do it unless +you have memory to burn and short is REALLY slow. + +If your compiler can compile function calls in-line, make sure the INLINE +macro in jmorecfg.h is defined as the keyword that marks a function +inline-able. Some compilers have a switch that tells the compiler to inline +any function it thinks is profitable (e.g., -finline-functions for gcc). +Enabling such a switch is likely to make the compiled code bigger but faster. + +In general, it's worth trying the maximum optimization level of your compiler, +and experimenting with any optional optimizations such as loop unrolling. +(Unfortunately, far too many compilers have optimizer bugs ... be prepared to +back off if the code fails self-test.) If you do any experimentation along +these lines, please report the optimal settings to jpeg-info@uunet.uu.net so +we can mention them in future releases. Be sure to specify your machine and +compiler version. + + +HINTS FOR SPECIFIC SYSTEMS +========================== + +We welcome reports on changes needed for systems not mentioned here. Submit +'em to jpeg-info@uunet.uu.net. Also, if configure or ckconfig.c is wrong +about how to configure the JPEG software for your system, please let us know. + + +Acorn RISC OS: + +(Thanks to Simon Middleton for these hints on compiling with Desktop C.) +After renaming the files according to Acorn conventions, take a copy of +makefile.ansi, change all occurrences of 'libjpeg.a' to 'libjpeg.o' and +change these definitions as indicated: + +CFLAGS= -throwback -IC: -Wn +LDLIBS=C:o.Stubs +SYSDEPMEM=jmemansi.o +LN=Link +AR=LibFile -c -o + +Also add a new line '.c.o:; $(cc) $< $(cflags) -c -o $@'. Remove the +lines '$(RM) libjpeg.o' and '$(AR2) libjpeg.o' and the 'jconfig.h' +dependency section. + +Copy jconfig.doc to jconfig.h. Edit jconfig.h to define TWO_FILE_COMMANDLINE +and CHAR_IS_UNSIGNED. + +Run the makefile using !AMU not !Make. If you want to use the 'clean' and +'test' makefile entries then you will have to fiddle with the syntax a bit +and rename the test files. + + +Amiga: + +SAS C 6.50 reportedly is too buggy to compile the IJG code properly. +A patch to update to 6.51 is available from SAS or AmiNet FTP sites. + +The supplied config files are set up to use jmemname.c as the memory +manager, with temporary files being created on the device named by +"JPEGTMP:". + + +Atari ST/STE/TT: + +Copy the project files makcjpeg.st, makdjpeg.st, maktjpeg.st, and makljpeg.st +to cjpeg.prj, djpeg.prj, jpegtran.prj, and libjpeg.prj respectively. The +project files should work as-is with Pure C. For Turbo C, change library +filenames "pc..." to "tc..." in each project file. Note that libjpeg.prj +selects jmemansi.c as the recommended memory manager. You'll probably want to +adjust the DEFAULT_MAX_MEM setting --- you want it to be a couple hundred K +less than your normal free memory. Put "#define DEFAULT_MAX_MEM nnnn" into +jconfig.h to do this. + +To use the 68881/68882 coprocessor for the floating point DCT, add the +compiler option "-8" to the project files and replace pcfltlib.lib with +pc881lib.lib in cjpeg.prj and djpeg.prj. Or if you don't have a +coprocessor, you may prefer to remove the float DCT code by undefining +DCT_FLOAT_SUPPORTED in jmorecfg.h (since without a coprocessor, the float +code will be too slow to be useful). In that case, you can delete +pcfltlib.lib from the project files. + +Note that you must make libjpeg.lib before making cjpeg.ttp, djpeg.ttp, +or jpegtran.ttp. You'll have to perform the self-test by hand. + +We haven't bothered to include project files for rdjpgcom and wrjpgcom. +Those source files should just be compiled by themselves; they don't +depend on the JPEG library. + +There is a bug in some older versions of the Turbo C library which causes the +space used by temporary files created with "tmpfile()" not to be freed after +an abnormal program exit. If you check your disk afterwards, you will find +cluster chains that are allocated but not used by a file. This should not +happen in cjpeg/djpeg/jpegtran, since we enable a signal catcher to explicitly +close temp files before exiting. But if you use the JPEG library with your +own code, be sure to supply a signal catcher, or else use a different +system-dependent memory manager. + + +Cray: + +Should you be so fortunate as to be running JPEG on a Cray YMP, there is a +compiler bug in old versions of Cray's Standard C (prior to 3.1). If you +still have an old compiler, you'll need to insert a line reading +"#pragma novector" just before the loop + for (i = 1; i <= (int) htbl->bits[l]; i++) + huffsize[p++] = (char) l; +in fix_huff_tbl (in V5beta1, line 204 of jchuff.c and line 176 of jdhuff.c). +[This bug may or may not still occur with the current IJG code, but it's +probably a dead issue anyway...] + + +HP-UX: + +If you have HP-UX 7.05 or later with the "software development" C compiler, +you should run the compiler in ANSI mode. If using the configure script, +say + ./configure CC='cc -Aa' +(or -Ae if you prefer). If configuring by hand, use makefile.ansi and add +"-Aa" to the CFLAGS line in the makefile. + +If you have a pre-7.05 system, or if you are using the non-ANSI C compiler +delivered with a minimum HP-UX system, then you must use makefile.unix +(and do NOT add -Aa); or just run configure without the CC option. + +On HP 9000 series 800 machines, the HP C compiler is buggy in revisions prior +to A.08.07. If you get complaints about "not a typedef name", you'll have to +use makefile.unix, or run configure without the CC option. + + +Macintosh, generic comments: + +The supplied user-interface files (cjpeg.c, djpeg.c, etc) are set up to +provide a Unix-style command line interface. You can use this interface on +the Mac by means of the ccommand() library routine provided by Metrowerks +CodeWarrior or Think C. This is only appropriate for testing the library, +however; to make a user-friendly equivalent of cjpeg/djpeg you'd really want +to develop a Mac-style user interface. There isn't a complete example +available at the moment, but there are some helpful starting points: +1. Sam Bushell's free "To JPEG" applet provides drag-and-drop conversion to +JPEG under System 7 and later. This only illustrates how to use the +compression half of the library, but it does a very nice job of that part. +The CodeWarrior source code is available from http://www.pobox.com/~jsam. +2. Jim Brunner prepared a Mac-style user interface for both compression and +decompression. Unfortunately, it hasn't been updated since IJG v4, and +the library's API has changed considerably since then. Still it may be of +some help, particularly as a guide to compiling the IJG code under Think C. +Jim's code is available from the Info-Mac archives, at sumex-aim.stanford.edu +or mirrors thereof; see file /info-mac/dev/src/jpeg-convert-c.hqx. + +jmemmac.c is the recommended memory manager back end for Macintosh. It uses +NewPtr/DisposePtr instead of malloc/free, and has a Mac-specific +implementation of jpeg_mem_available(). It also creates temporary files that +follow Mac conventions. (That part of the code relies on System-7-or-later OS +functions. See the comments in jmemmac.c if you need to run it on System 6.) +NOTE that USE_MAC_MEMMGR must be defined in jconfig.h to use jmemmac.c. + +You can also use jmemnobs.c, if you don't care about handling images larger +than available memory. If you use any memory manager back end other than +jmemmac.c, we recommend replacing "malloc" and "free" by "NewPtr" and +"DisposePtr", because Mac C libraries often have peculiar implementations of +malloc/free. (For instance, free() may not return the freed space to the +Mac Memory Manager. This is undesirable for the IJG code because jmemmgr.c +already clumps space requests.) + + +Macintosh, Metrowerks CodeWarrior: + +The Unix-command-line-style interface can be used by defining USE_CCOMMAND. +You'll also need to define TWO_FILE_COMMANDLINE to avoid stdin/stdout. +This means that when using the cjpeg/djpeg programs, you'll have to type the +input and output file names in the "Arguments" text-edit box, rather than +using the file radio buttons. (Perhaps USE_FDOPEN or USE_SETMODE would +eliminate the problem, but I haven't heard from anyone who's tried it.) + +On 680x0 Macs, Metrowerks defines type "double" as a 10-byte IEEE extended +float. jmemmgr.c won't like this: it wants sizeof(ALIGN_TYPE) to be a power +of 2. Add "#define ALIGN_TYPE long" to jconfig.h to eliminate the complaint. + +The supplied configuration file jconfig.mac can be used for your jconfig.h; +it includes all the recommended symbol definitions. If you have AppleScript +installed, you can run the supplied script makeproj.mac to create CodeWarrior +project files for the library and the testbed applications, then build the +library and applications. (Thanks to Dan Sears and Don Agro for this nifty +hack, which saves us from trying to maintain CodeWarrior project files as part +of the IJG distribution...) + + +Macintosh, Think C: + +The documentation in Jim Brunner's "JPEG Convert" source code (see above) +includes detailed build instructions for Think C; it's probably somewhat +out of date for the current release, but may be helpful. + +If you want to build the minimal command line version, proceed as follows. +You'll have to prepare project files for the programs; we don't include any +in the distribution since they are not text files. Use the file lists in +any of the supplied makefiles as a guide. Also add the ANSI and Unix C +libraries in a separate segment. You may need to divide the JPEG files into +more than one segment; we recommend dividing compression and decompression +modules. Define USE_CCOMMAND in jconfig.h so that the ccommand() routine is +called. You must also define TWO_FILE_COMMANDLINE because stdin/stdout +don't handle binary data correctly. + +On 680x0 Macs, Think C defines type "double" as a 12-byte IEEE extended float. +jmemmgr.c won't like this: it wants sizeof(ALIGN_TYPE) to be a power of 2. +Add "#define ALIGN_TYPE long" to jconfig.h to eliminate the complaint. + +jconfig.mac should work as a jconfig.h configuration file for Think C, +but the makeproj.mac AppleScript script is specific to CodeWarrior. Sorry. + + +MIPS R3000: + +MIPS's cc version 1.31 has a rather nasty optimization bug. Don't use -O +if you have that compiler version. (Use "cc -V" to check the version.) +Note that the R3000 chip is found in workstations from DEC and others. + + +MS-DOS, generic comments for 16-bit compilers: + +The IJG code is designed to work well in 80x86 "small" or "medium" memory +models (i.e., data pointers are 16 bits unless explicitly declared "far"; +code pointers can be either size). You may be able to use small model to +compile cjpeg or djpeg by itself, but you will probably have to use medium +model for any larger application. This won't make much difference in +performance. You *will* take a noticeable performance hit if you use a +large-data memory model, and you should avoid "huge" model if at all +possible. Be sure that NEED_FAR_POINTERS is defined in jconfig.h if you use +a small-data memory model; be sure it is NOT defined if you use a large-data +model. (The supplied makefiles and jconfig files for Borland and Microsoft C +compile in medium model and define NEED_FAR_POINTERS.) + +The DOS-specific memory manager, jmemdos.c, should be used if possible. +It needs some assembly-code routines which are in jmemdosa.asm; make sure +your makefile assembles that file and includes it in the library. If you +don't have a suitable assembler, you can get pre-assembled object files for +jmemdosa by FTP from ftp.uu.net:/graphics/jpeg/jdosaobj.zip. (DOS-oriented +distributions of the IJG source code often include these object files.) + +When using jmemdos.c, jconfig.h must define USE_MSDOS_MEMMGR and must set +MAX_ALLOC_CHUNK to less than 64K (65520L is a typical value). If your +C library's far-heap malloc() can't allocate blocks that large, reduce +MAX_ALLOC_CHUNK to whatever it can handle. + +If you can't use jmemdos.c for some reason --- for example, because you +don't have an assembler to assemble jmemdosa.asm --- you'll have to fall +back to jmemansi.c or jmemname.c. You'll probably still need to set +MAX_ALLOC_CHUNK in jconfig.h, because most DOS C libraries won't malloc() +more than 64K at a time. IMPORTANT: if you use jmemansi.c or jmemname.c, +you will have to compile in a large-data memory model in order to get the +right stdio library. Too bad. + +wrjpgcom needs to be compiled in large model, because it malloc()s a 64KB +work area to hold the comment text. If your C library's malloc can't +handle that, reduce MAX_COM_LENGTH as necessary in wrjpgcom.c. + +Most MS-DOS compilers treat stdin/stdout as text files, so you must use +two-file command line style. But if your compiler has either fdopen() or +setmode(), you can use one-file style if you like. To do this, define +USE_SETMODE or USE_FDOPEN so that stdin/stdout will be set to binary mode. +(USE_SETMODE seems to work with more DOS compilers than USE_FDOPEN.) You +should test that I/O through stdin/stdout produces the same results as I/O +to explicitly named files... the "make test" procedures in the supplied +makefiles do NOT use stdin/stdout. + + +MS-DOS, generic comments for 32-bit compilers: + +None of the above comments about memory models apply if you are using a +32-bit flat-memory-space environment, such as DJGPP or Watcom C. (And you +should use one if you have it, as performance will be much better than +8086-compatible code!) For flat-memory-space compilers, do NOT define +NEED_FAR_POINTERS, and do NOT use jmemdos.c. Use jmemnobs.c if the +environment supplies adequate virtual memory, otherwise use jmemansi.c or +jmemname.c. + +You'll still need to be careful about binary I/O through stdin/stdout. +See the last paragraph of the previous section. + + +MS-DOS, Borland C: + +Be sure to convert all the source files to DOS text format (CR/LF newlines). +Although Borland C will often work OK with unmodified Unix (LF newlines) +source files, sometimes it will give bogus compile errors. +"Illegal character '#'" is the most common such error. (This is true with +Borland C 3.1, but perhaps is fixed in newer releases.) + +If you want one-file command line style, just undefine TWO_FILE_COMMANDLINE. +jconfig.bcc already includes #define USE_SETMODE to make this work. +(fdopen does not work correctly.) + + +MS-DOS, Microsoft C: + +makefile.mc6 works with Microsoft C, DOS Visual C++, etc. It should only +be used if you want to build a 16-bit (small or medium memory model) program. + +If you want one-file command line style, just undefine TWO_FILE_COMMANDLINE. +jconfig.mc6 already includes #define USE_SETMODE to make this work. +(fdopen does not work correctly.) + +Note that this makefile assumes that the working copy of itself is called +"makefile". If you want to call it something else, say "makefile.mak", +be sure to adjust the dependency line that reads "$(RFILE) : makefile". +Otherwise the make will fail because it doesn't know how to create "makefile". +Worse, some releases of Microsoft's make utilities give an incorrect error +message in this situation. + +Old versions of MS C fail with an "out of macro expansion space" error +because they can't cope with the macro TRACEMS8 (defined in jerror.h). +If this happens to you, the easiest solution is to change TRACEMS8 to +expand to nothing. You'll lose the ability to dump out JPEG coefficient +tables with djpeg -debug -debug, but at least you can compile. + +Original MS C 6.0 is very buggy; it compiles incorrect code unless you turn +off optimization entirely (remove -O from CFLAGS). 6.00A is better, but it +still generates bad code if you enable loop optimizations (-Ol or -Ox). + +MS C 8.0 crashes when compiling jquant1.c with optimization switch /Oo ... +which is on by default. To work around this bug, compile that one file +with /Oo-. + + +Microsoft Windows (all versions), generic comments: + +Some Windows system include files define typedef boolean as "unsigned char". +The IJG code also defines typedef boolean, but we make it "int" by default. +This doesn't affect the IJG programs because we don't import those Windows +include files. But if you use the JPEG library in your own program, and some +of your program's files import one definition of boolean while some import the +other, you can get all sorts of mysterious problems. A good preventive step +is to make the IJG library use "unsigned char" for boolean. To do that, +add something like this to your jconfig.h file: + /* Define "boolean" as unsigned char, not int, per Windows custom */ + #ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ + typedef unsigned char boolean; + #endif + #define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ +(This is already in jconfig.vc, by the way.) + +windef.h contains the declarations + #define far + #define FAR far +Since jmorecfg.h tries to define FAR as empty, you may get a compiler +warning if you include both jpeglib.h and windef.h (which windows.h +includes). To suppress the warning, you can put "#ifndef FAR"/"#endif" +around the line "#define FAR" in jmorecfg.h. + +When using the library in a Windows application, you will almost certainly +want to modify or replace the error handler module jerror.c, since our +default error handler does a couple of inappropriate things: + 1. it tries to write error and warning messages on stderr; + 2. in event of a fatal error, it exits by calling exit(). + +A simple stopgap solution for problem 1 is to replace the line + fprintf(stderr, "%s\n", buffer); +(in output_message in jerror.c) with + MessageBox(GetActiveWindow(),buffer,"JPEG Error",MB_OK|MB_ICONERROR); +It's highly recommended that you at least do that much, since otherwise +error messages will disappear into nowhere. (Beginning with IJG v6b, this +code is already present in jerror.c; just define USE_WINDOWS_MESSAGEBOX in +jconfig.h to enable it.) + +The proper solution for problem 2 is to return control to your calling +application after a library error. This can be done with the setjmp/longjmp +technique discussed in libjpeg.doc and illustrated in example.c. (NOTE: +some older Windows C compilers provide versions of setjmp/longjmp that +don't actually work under Windows. You may need to use the Windows system +functions Catch and Throw instead.) + +The recommended memory manager under Windows is jmemnobs.c; in other words, +let Windows do any virtual memory management needed. You should NOT use +jmemdos.c nor jmemdosa.asm under Windows. + +For Windows 3.1, we recommend compiling in medium or large memory model; +for newer Windows versions, use a 32-bit flat memory model. (See the MS-DOS +sections above for more info about memory models.) In the 16-bit memory +models only, you'll need to put + #define MAX_ALLOC_CHUNK 65520L /* Maximum request to malloc() */ +into jconfig.h to limit allocation chunks to 64Kb. (Without that, you'd +have to use huge memory model, which slows things down unnecessarily.) +jmemnobs.c works without modification in large or flat memory models, but to +use medium model, you need to modify its jpeg_get_large and jpeg_free_large +routines to allocate far memory. In any case, you might like to replace +its calls to malloc and free with direct calls on Windows memory allocation +functions. + +You may also want to modify jdatasrc.c and jdatadst.c to use Windows file +operations rather than fread/fwrite. This is only necessary if your C +compiler doesn't provide a competent implementation of C stdio functions. + +You might want to tweak the RGB_xxx macros in jmorecfg.h so that the library +will accept or deliver color pixels in BGR sample order, not RGB; BGR order +is usually more convenient under Windows. Note that this change will break +the sample applications cjpeg/djpeg, but the library itself works fine. + + +Many people want to convert the IJG library into a DLL. This is reasonably +straightforward, but watch out for the following: + + 1. Don't try to compile as a DLL in small or medium memory model; use +large model, or even better, 32-bit flat model. Many places in the IJG code +assume the address of a local variable is an ordinary (not FAR) pointer; +that isn't true in a medium-model DLL. + + 2. Microsoft C cannot pass file pointers between applications and DLLs. +(See Microsoft Knowledge Base, PSS ID Number Q50336.) So jdatasrc.c and +jdatadst.c don't work if you open a file in your application and then pass +the pointer to the DLL. One workaround is to make jdatasrc.c/jdatadst.c +part of your main application rather than part of the DLL. + + 3. You'll probably need to modify the macros GLOBAL() and EXTERN() to +attach suitable linkage keywords to the exported routine names. Similarly, +you'll want to modify METHODDEF() and JMETHOD() to ensure function pointers +are declared in a way that lets application routines be called back through +the function pointers. These macros are in jmorecfg.h. Typical definitions +for a 16-bit DLL are: + #define GLOBAL(type) type _far _pascal _loadds _export + #define EXTERN(type) extern type _far _pascal _loadds + #define METHODDEF(type) static type _far _pascal + #define JMETHOD(type,methodname,arglist) \ + type (_far _pascal *methodname) arglist +For a 32-bit DLL you may want something like + #define GLOBAL(type) __declspec(dllexport) type + #define EXTERN(type) extern __declspec(dllexport) type +Although not all the GLOBAL routines are actually intended to be called by +the application, the performance cost of making them all DLL entry points is +negligible. + +The unmodified IJG library presents a very C-specific application interface, +so the resulting DLL is only usable from C or C++ applications. There has +been some talk of writing wrapper code that would present a simpler interface +usable from other languages, such as Visual Basic. This is on our to-do list +but hasn't been very high priority --- any volunteers out there? + + +Microsoft Windows, Borland C: + +The provided jconfig.bcc should work OK in a 32-bit Windows environment, +but you'll need to tweak it in a 16-bit environment (you'd need to define +NEED_FAR_POINTERS and MAX_ALLOC_CHUNK). Beware that makefile.bcc will need +alteration if you want to use it for Windows --- in particular, you should +use jmemnobs.c not jmemdos.c under Windows. + +Borland C++ 4.5 fails with an internal compiler error when trying to compile +jdmerge.c in 32-bit mode. If enough people complain, perhaps Borland will fix +it. In the meantime, the simplest known workaround is to add a redundant +definition of the variable range_limit in h2v1_merged_upsample(), at the head +of the block that handles odd image width (about line 268 in v6 jdmerge.c): + /* If image width is odd, do the last output column separately */ + if (cinfo->output_width & 1) { + register JSAMPLE * range_limit = cinfo->sample_range_limit; /* ADD THIS */ + cb = GETJSAMPLE(*inptr1); +Pretty bizarre, especially since the very similar routine h2v2_merged_upsample +doesn't trigger the bug. +Recent reports suggest that this bug does not occur with "bcc32a" (the +Pentium-optimized version of the compiler). + +Another report from a user of Borland C 4.5 was that incorrect code (leading +to a color shift in processed images) was produced if any of the following +optimization switch combinations were used: + -Ot -Og + -Ot -Op + -Ot -Om +So try backing off on optimization if you see such a problem. (Are there +several different releases all numbered "4.5"??) + + +Microsoft Windows, Microsoft Visual C++: + +jconfig.vc should work OK with any Microsoft compiler for a 32-bit memory +model. makefile.vc is intended for command-line use. (If you are using +the Developer Studio environment, you may prefer the DevStudio project +files; see below.) + +Some users feel that it's easier to call the library from C++ code if you +force VC++ to treat the library as C++ code, which you can do by renaming +all the *.c files to *.cpp (and adjusting the makefile to match). This +avoids the need to put extern "C" { ... } around #include "jpeglib.h" in +your C++ application. + + +Microsoft Windows, Microsoft Developer Studio: + +We include makefiles that should work as project files in DevStudio 4.2 or +later. There is a library makefile that builds the IJG library as a static +Win32 library, and an application makefile that builds the sample applications +as Win32 console applications. (Even if you only want the library, we +recommend building the applications so that you can run the self-test.) + +To use: +1. Copy jconfig.vc to jconfig.h, makelib.ds to jpeg.mak, and + makeapps.ds to apps.mak. (Note that the renaming is critical!) +2. Click on the .mak files to construct project workspaces. + (If you are using DevStudio more recent than 4.2, you'll probably + get a message saying that the makefiles are being updated.) +3. Build the library project, then the applications project. +4. Move the application .exe files from `app`\Release to an + appropriate location on your path. +5. To perform the self-test, execute the command line + NMAKE /f makefile.vc test + + +OS/2, Borland C++: + +Watch out for optimization bugs in older Borland compilers; you may need +to back off the optimization switch settings. See the comments in +makefile.bcc. + + +SGI: + +On some SGI systems, you may need to set "AR2= ar -ts" in the Makefile. +If you are using configure, you can do this by saying + ./configure RANLIB='ar -ts' +This change is not needed on all SGIs. Use it only if the make fails at the +stage of linking the completed programs. + +On the MIPS R4000 architecture (Indy, etc.), the compiler option "-mips2" +reportedly speeds up the float DCT method substantially, enough to make it +faster than the default int method (but still slower than the fast int +method). If you use -mips2, you may want to alter the default DCT method to +be float. To do this, put "#define JDCT_DEFAULT JDCT_FLOAT" in jconfig.h. + + +VMS: + +On an Alpha/VMS system with MMS, be sure to use the "/Marco=Alpha=1" +qualifier with MMS when building the JPEG package. + +VAX/VMS v5.5-1 may have problems with the test step of the build procedure +reporting differences when it compares the original and test images. If the +error points to the last block of the files, it is most likely bogus and may +be safely ignored. It seems to be because the files are Stream_LF and +Backup/Compare has difficulty with the (presumably) null padded files. +This problem was not observed on VAX/VMS v6.1 or AXP/VMS v6.1. diff --git a/Build/source/extra/jpeg/jcapimin.c b/Build/source/extra/jpeg/jcapimin.c new file mode 100644 index 00000000000..54fb8c58c56 --- /dev/null +++ b/Build/source/extra/jpeg/jcapimin.c @@ -0,0 +1,280 @@ +/* + * jcapimin.c + * + * Copyright (C) 1994-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains application interface code for the compression half + * of the JPEG library. These are the "minimum" API routines that may be + * needed in either the normal full-compression case or the transcoding-only + * case. + * + * Most of the routines intended to be called directly by an application + * are in this file or in jcapistd.c. But also see jcparam.c for + * parameter-setup helper routines, jcomapi.c for routines shared by + * compression and decompression, and jctrans.c for the transcoding case. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * Initialization of a JPEG compression object. + * The error manager must already be set up (in case memory manager fails). + */ + +GLOBAL(void) +jpeg_CreateCompress (j_compress_ptr cinfo, int version, size_t structsize) +{ + int i; + + /* Guard against version mismatches between library and caller. */ + cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */ + if (version != JPEG_LIB_VERSION) + ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version); + if (structsize != SIZEOF(struct jpeg_compress_struct)) + ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, + (int) SIZEOF(struct jpeg_compress_struct), (int) structsize); + + /* For debugging purposes, we zero the whole master structure. + * But the application has already set the err pointer, and may have set + * client_data, so we have to save and restore those fields. + * Note: if application hasn't set client_data, tools like Purify may + * complain here. + */ + { + struct jpeg_error_mgr * err = cinfo->err; + void * client_data = cinfo->client_data; /* ignore Purify complaint here */ + MEMZERO(cinfo, SIZEOF(struct jpeg_compress_struct)); + cinfo->err = err; + cinfo->client_data = client_data; + } + cinfo->is_decompressor = FALSE; + + /* Initialize a memory manager instance for this object */ + jinit_memory_mgr((j_common_ptr) cinfo); + + /* Zero out pointers to permanent structures. */ + cinfo->progress = NULL; + cinfo->dest = NULL; + + cinfo->comp_info = NULL; + + for (i = 0; i < NUM_QUANT_TBLS; i++) + cinfo->quant_tbl_ptrs[i] = NULL; + + for (i = 0; i < NUM_HUFF_TBLS; i++) { + cinfo->dc_huff_tbl_ptrs[i] = NULL; + cinfo->ac_huff_tbl_ptrs[i] = NULL; + } + + cinfo->script_space = NULL; + + cinfo->input_gamma = 1.0; /* in case application forgets */ + + /* OK, I'm ready */ + cinfo->global_state = CSTATE_START; +} + + +/* + * Destruction of a JPEG compression object + */ + +GLOBAL(void) +jpeg_destroy_compress (j_compress_ptr cinfo) +{ + jpeg_destroy((j_common_ptr) cinfo); /* use common routine */ +} + + +/* + * Abort processing of a JPEG compression operation, + * but don't destroy the object itself. + */ + +GLOBAL(void) +jpeg_abort_compress (j_compress_ptr cinfo) +{ + jpeg_abort((j_common_ptr) cinfo); /* use common routine */ +} + + +/* + * Forcibly suppress or un-suppress all quantization and Huffman tables. + * Marks all currently defined tables as already written (if suppress) + * or not written (if !suppress). This will control whether they get emitted + * by a subsequent jpeg_start_compress call. + * + * This routine is exported for use by applications that want to produce + * abbreviated JPEG datastreams. It logically belongs in jcparam.c, but + * since it is called by jpeg_start_compress, we put it here --- otherwise + * jcparam.o would be linked whether the application used it or not. + */ + +GLOBAL(void) +jpeg_suppress_tables (j_compress_ptr cinfo, boolean suppress) +{ + int i; + JQUANT_TBL * qtbl; + JHUFF_TBL * htbl; + + for (i = 0; i < NUM_QUANT_TBLS; i++) { + if ((qtbl = cinfo->quant_tbl_ptrs[i]) != NULL) + qtbl->sent_table = suppress; + } + + for (i = 0; i < NUM_HUFF_TBLS; i++) { + if ((htbl = cinfo->dc_huff_tbl_ptrs[i]) != NULL) + htbl->sent_table = suppress; + if ((htbl = cinfo->ac_huff_tbl_ptrs[i]) != NULL) + htbl->sent_table = suppress; + } +} + + +/* + * Finish JPEG compression. + * + * If a multipass operating mode was selected, this may do a great deal of + * work including most of the actual output. + */ + +GLOBAL(void) +jpeg_finish_compress (j_compress_ptr cinfo) +{ + JDIMENSION iMCU_row; + + if (cinfo->global_state == CSTATE_SCANNING || + cinfo->global_state == CSTATE_RAW_OK) { + /* Terminate first pass */ + if (cinfo->next_scanline < cinfo->image_height) + ERREXIT(cinfo, JERR_TOO_LITTLE_DATA); + (*cinfo->master->finish_pass) (cinfo); + } else if (cinfo->global_state != CSTATE_WRCOEFS) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + /* Perform any remaining passes */ + while (! cinfo->master->is_last_pass) { + (*cinfo->master->prepare_for_pass) (cinfo); + for (iMCU_row = 0; iMCU_row < cinfo->total_iMCU_rows; iMCU_row++) { + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) iMCU_row; + cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + /* We bypass the main controller and invoke coef controller directly; + * all work is being done from the coefficient buffer. + */ + if (! (*cinfo->coef->compress_data) (cinfo, (JSAMPIMAGE) NULL)) + ERREXIT(cinfo, JERR_CANT_SUSPEND); + } + (*cinfo->master->finish_pass) (cinfo); + } + /* Write EOI, do final cleanup */ + (*cinfo->marker->write_file_trailer) (cinfo); + (*cinfo->dest->term_destination) (cinfo); + /* We can use jpeg_abort to release memory and reset global_state */ + jpeg_abort((j_common_ptr) cinfo); +} + + +/* + * Write a special marker. + * This is only recommended for writing COM or APPn markers. + * Must be called after jpeg_start_compress() and before + * first call to jpeg_write_scanlines() or jpeg_write_raw_data(). + */ + +GLOBAL(void) +jpeg_write_marker (j_compress_ptr cinfo, int marker, + const JOCTET *dataptr, unsigned int datalen) +{ + JMETHOD(void, write_marker_byte, (j_compress_ptr info, int val)); + + if (cinfo->next_scanline != 0 || + (cinfo->global_state != CSTATE_SCANNING && + cinfo->global_state != CSTATE_RAW_OK && + cinfo->global_state != CSTATE_WRCOEFS)) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + (*cinfo->marker->write_marker_header) (cinfo, marker, datalen); + write_marker_byte = cinfo->marker->write_marker_byte; /* copy for speed */ + while (datalen--) { + (*write_marker_byte) (cinfo, *dataptr); + dataptr++; + } +} + +/* Same, but piecemeal. */ + +GLOBAL(void) +jpeg_write_m_header (j_compress_ptr cinfo, int marker, unsigned int datalen) +{ + if (cinfo->next_scanline != 0 || + (cinfo->global_state != CSTATE_SCANNING && + cinfo->global_state != CSTATE_RAW_OK && + cinfo->global_state != CSTATE_WRCOEFS)) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + (*cinfo->marker->write_marker_header) (cinfo, marker, datalen); +} + +GLOBAL(void) +jpeg_write_m_byte (j_compress_ptr cinfo, int val) +{ + (*cinfo->marker->write_marker_byte) (cinfo, val); +} + + +/* + * Alternate compression function: just write an abbreviated table file. + * Before calling this, all parameters and a data destination must be set up. + * + * To produce a pair of files containing abbreviated tables and abbreviated + * image data, one would proceed as follows: + * + * initialize JPEG object + * set JPEG parameters + * set destination to table file + * jpeg_write_tables(cinfo); + * set destination to image file + * jpeg_start_compress(cinfo, FALSE); + * write data... + * jpeg_finish_compress(cinfo); + * + * jpeg_write_tables has the side effect of marking all tables written + * (same as jpeg_suppress_tables(..., TRUE)). Thus a subsequent start_compress + * will not re-emit the tables unless it is passed write_all_tables=TRUE. + */ + +GLOBAL(void) +jpeg_write_tables (j_compress_ptr cinfo) +{ + if (cinfo->global_state != CSTATE_START) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + /* (Re)initialize error mgr and destination modules */ + (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); + (*cinfo->dest->init_destination) (cinfo); + /* Initialize the marker writer ... bit of a crock to do it here. */ + jinit_marker_writer(cinfo); + /* Write them tables! */ + (*cinfo->marker->write_tables_only) (cinfo); + /* And clean up. */ + (*cinfo->dest->term_destination) (cinfo); + /* + * In library releases up through v6a, we called jpeg_abort() here to free + * any working memory allocated by the destination manager and marker + * writer. Some applications had a problem with that: they allocated space + * of their own from the library memory manager, and didn't want it to go + * away during write_tables. So now we do nothing. This will cause a + * memory leak if an app calls write_tables repeatedly without doing a full + * compression cycle or otherwise resetting the JPEG object. However, that + * seems less bad than unexpectedly freeing memory in the normal case. + * An app that prefers the old behavior can call jpeg_abort for itself after + * each call to jpeg_write_tables(). + */ +} diff --git a/Build/source/extra/jpeg/jcapistd.c b/Build/source/extra/jpeg/jcapistd.c new file mode 100644 index 00000000000..c0320b1b190 --- /dev/null +++ b/Build/source/extra/jpeg/jcapistd.c @@ -0,0 +1,161 @@ +/* + * jcapistd.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains application interface code for the compression half + * of the JPEG library. These are the "standard" API routines that are + * used in the normal full-compression case. They are not used by a + * transcoding-only application. Note that if an application links in + * jpeg_start_compress, it will end up linking in the entire compressor. + * We thus must separate this file from jcapimin.c to avoid linking the + * whole compression library into a transcoder. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * Compression initialization. + * Before calling this, all parameters and a data destination must be set up. + * + * We require a write_all_tables parameter as a failsafe check when writing + * multiple datastreams from the same compression object. Since prior runs + * will have left all the tables marked sent_table=TRUE, a subsequent run + * would emit an abbreviated stream (no tables) by default. This may be what + * is wanted, but for safety's sake it should not be the default behavior: + * programmers should have to make a deliberate choice to emit abbreviated + * images. Therefore the documentation and examples should encourage people + * to pass write_all_tables=TRUE; then it will take active thought to do the + * wrong thing. + */ + +GLOBAL(void) +jpeg_start_compress (j_compress_ptr cinfo, boolean write_all_tables) +{ + if (cinfo->global_state != CSTATE_START) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + if (write_all_tables) + jpeg_suppress_tables(cinfo, FALSE); /* mark all tables to be written */ + + /* (Re)initialize error mgr and destination modules */ + (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); + (*cinfo->dest->init_destination) (cinfo); + /* Perform master selection of active modules */ + jinit_compress_master(cinfo); + /* Set up for the first pass */ + (*cinfo->master->prepare_for_pass) (cinfo); + /* Ready for application to drive first pass through jpeg_write_scanlines + * or jpeg_write_raw_data. + */ + cinfo->next_scanline = 0; + cinfo->global_state = (cinfo->raw_data_in ? CSTATE_RAW_OK : CSTATE_SCANNING); +} + + +/* + * Write some scanlines of data to the JPEG compressor. + * + * The return value will be the number of lines actually written. + * This should be less than the supplied num_lines only in case that + * the data destination module has requested suspension of the compressor, + * or if more than image_height scanlines are passed in. + * + * Note: we warn about excess calls to jpeg_write_scanlines() since + * this likely signals an application programmer error. However, + * excess scanlines passed in the last valid call are *silently* ignored, + * so that the application need not adjust num_lines for end-of-image + * when using a multiple-scanline buffer. + */ + +GLOBAL(JDIMENSION) +jpeg_write_scanlines (j_compress_ptr cinfo, JSAMPARRAY scanlines, + JDIMENSION num_lines) +{ + JDIMENSION row_ctr, rows_left; + + if (cinfo->global_state != CSTATE_SCANNING) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + if (cinfo->next_scanline >= cinfo->image_height) + WARNMS(cinfo, JWRN_TOO_MUCH_DATA); + + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) cinfo->next_scanline; + cinfo->progress->pass_limit = (long) cinfo->image_height; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + + /* Give master control module another chance if this is first call to + * jpeg_write_scanlines. This lets output of the frame/scan headers be + * delayed so that application can write COM, etc, markers between + * jpeg_start_compress and jpeg_write_scanlines. + */ + if (cinfo->master->call_pass_startup) + (*cinfo->master->pass_startup) (cinfo); + + /* Ignore any extra scanlines at bottom of image. */ + rows_left = cinfo->image_height - cinfo->next_scanline; + if (num_lines > rows_left) + num_lines = rows_left; + + row_ctr = 0; + (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, num_lines); + cinfo->next_scanline += row_ctr; + return row_ctr; +} + + +/* + * Alternate entry point to write raw data. + * Processes exactly one iMCU row per call, unless suspended. + */ + +GLOBAL(JDIMENSION) +jpeg_write_raw_data (j_compress_ptr cinfo, JSAMPIMAGE data, + JDIMENSION num_lines) +{ + JDIMENSION lines_per_iMCU_row; + + if (cinfo->global_state != CSTATE_RAW_OK) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + if (cinfo->next_scanline >= cinfo->image_height) { + WARNMS(cinfo, JWRN_TOO_MUCH_DATA); + return 0; + } + + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) cinfo->next_scanline; + cinfo->progress->pass_limit = (long) cinfo->image_height; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + + /* Give master control module another chance if this is first call to + * jpeg_write_raw_data. This lets output of the frame/scan headers be + * delayed so that application can write COM, etc, markers between + * jpeg_start_compress and jpeg_write_raw_data. + */ + if (cinfo->master->call_pass_startup) + (*cinfo->master->pass_startup) (cinfo); + + /* Verify that at least one iMCU row has been passed. */ + lines_per_iMCU_row = cinfo->max_v_samp_factor * DCTSIZE; + if (num_lines < lines_per_iMCU_row) + ERREXIT(cinfo, JERR_BUFFER_SIZE); + + /* Directly compress the row. */ + if (! (*cinfo->coef->compress_data) (cinfo, data)) { + /* If compressor did not consume the whole row, suspend processing. */ + return 0; + } + + /* OK, we processed one iMCU row. */ + cinfo->next_scanline += lines_per_iMCU_row; + return lines_per_iMCU_row; +} diff --git a/Build/source/extra/jpeg/jccoefct.c b/Build/source/extra/jpeg/jccoefct.c new file mode 100644 index 00000000000..1963ddb61b1 --- /dev/null +++ b/Build/source/extra/jpeg/jccoefct.c @@ -0,0 +1,449 @@ +/* + * jccoefct.c + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the coefficient buffer controller for compression. + * This controller is the top level of the JPEG compressor proper. + * The coefficient buffer lies between forward-DCT and entropy encoding steps. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* We use a full-image coefficient buffer when doing Huffman optimization, + * and also for writing multiple-scan JPEG files. In all cases, the DCT + * step is run during the first pass, and subsequent passes need only read + * the buffered coefficients. + */ +#ifdef ENTROPY_OPT_SUPPORTED +#define FULL_COEF_BUFFER_SUPPORTED +#else +#ifdef C_MULTISCAN_FILES_SUPPORTED +#define FULL_COEF_BUFFER_SUPPORTED +#endif +#endif + + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_c_coef_controller pub; /* public fields */ + + JDIMENSION iMCU_row_num; /* iMCU row # within image */ + JDIMENSION mcu_ctr; /* counts MCUs processed in current row */ + int MCU_vert_offset; /* counts MCU rows within iMCU row */ + int MCU_rows_per_iMCU_row; /* number of such rows needed */ + + /* For single-pass compression, it's sufficient to buffer just one MCU + * (although this may prove a bit slow in practice). We allocate a + * workspace of C_MAX_BLOCKS_IN_MCU coefficient blocks, and reuse it for each + * MCU constructed and sent. (On 80x86, the workspace is FAR even though + * it's not really very big; this is to keep the module interfaces unchanged + * when a large coefficient buffer is necessary.) + * In multi-pass modes, this array points to the current MCU's blocks + * within the virtual arrays. + */ + JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU]; + + /* In multi-pass modes, we need a virtual block array for each component. */ + jvirt_barray_ptr whole_image[MAX_COMPONENTS]; +} my_coef_controller; + +typedef my_coef_controller * my_coef_ptr; + + +/* Forward declarations */ +METHODDEF(boolean) compress_data + JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf)); +#ifdef FULL_COEF_BUFFER_SUPPORTED +METHODDEF(boolean) compress_first_pass + JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf)); +METHODDEF(boolean) compress_output + JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf)); +#endif + + +LOCAL(void) +start_iMCU_row (j_compress_ptr cinfo) +/* Reset within-iMCU-row counters for a new row */ +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + + /* In an interleaved scan, an MCU row is the same as an iMCU row. + * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows. + * But at the bottom of the image, process only what's left. + */ + if (cinfo->comps_in_scan > 1) { + coef->MCU_rows_per_iMCU_row = 1; + } else { + if (coef->iMCU_row_num < (cinfo->total_iMCU_rows-1)) + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; + else + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height; + } + + coef->mcu_ctr = 0; + coef->MCU_vert_offset = 0; +} + + +/* + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_coef (j_compress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + + coef->iMCU_row_num = 0; + start_iMCU_row(cinfo); + + switch (pass_mode) { + case JBUF_PASS_THRU: + if (coef->whole_image[0] != NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + coef->pub.compress_data = compress_data; + break; +#ifdef FULL_COEF_BUFFER_SUPPORTED + case JBUF_SAVE_AND_PASS: + if (coef->whole_image[0] == NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + coef->pub.compress_data = compress_first_pass; + break; + case JBUF_CRANK_DEST: + if (coef->whole_image[0] == NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + coef->pub.compress_data = compress_output; + break; +#endif + default: + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + break; + } +} + + +/* + * Process some data in the single-pass case. + * We process the equivalent of one fully interleaved MCU row ("iMCU" row) + * per call, ie, v_samp_factor block rows for each component in the image. + * Returns TRUE if the iMCU row is completed, FALSE if suspended. + * + * NB: input_buf contains a plane for each component in image, + * which we index according to the component's SOF position. + */ + +METHODDEF(boolean) +compress_data (j_compress_ptr cinfo, JSAMPIMAGE input_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION MCU_col_num; /* index of current MCU within row */ + JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + int blkn, bi, ci, yindex, yoffset, blockcnt; + JDIMENSION ypos, xpos; + jpeg_component_info *compptr; + + /* Loop to write as much as one whole iMCU row */ + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + yoffset++) { + for (MCU_col_num = coef->mcu_ctr; MCU_col_num <= last_MCU_col; + MCU_col_num++) { + /* Determine where data comes from in input_buf and do the DCT thing. + * Each call on forward_DCT processes a horizontal row of DCT blocks + * as wide as an MCU; we rely on having allocated the MCU_buffer[] blocks + * sequentially. Dummy blocks at the right or bottom edge are filled in + * specially. The data in them does not matter for image reconstruction, + * so we fill them with values that will encode to the smallest amount of + * data, viz: all zeroes in the AC entries, DC entries equal to previous + * block's DC value. (Thanks to Thomas Kinsman for this idea.) + */ + blkn = 0; + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + blockcnt = (MCU_col_num < last_MCU_col) ? compptr->MCU_width + : compptr->last_col_width; + xpos = MCU_col_num * compptr->MCU_sample_width; + ypos = yoffset * DCTSIZE; /* ypos == (yoffset+yindex) * DCTSIZE */ + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + if (coef->iMCU_row_num < last_iMCU_row || + yoffset+yindex < compptr->last_row_height) { + (*cinfo->fdct->forward_DCT) (cinfo, compptr, + input_buf[compptr->component_index], + coef->MCU_buffer[blkn], + ypos, xpos, (JDIMENSION) blockcnt); + if (blockcnt < compptr->MCU_width) { + /* Create some dummy blocks at the right edge of the image. */ + jzero_far((void FAR *) coef->MCU_buffer[blkn + blockcnt], + (compptr->MCU_width - blockcnt) * SIZEOF(JBLOCK)); + for (bi = blockcnt; bi < compptr->MCU_width; bi++) { + coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn+bi-1][0][0]; + } + } + } else { + /* Create a row of dummy blocks at the bottom of the image. */ + jzero_far((void FAR *) coef->MCU_buffer[blkn], + compptr->MCU_width * SIZEOF(JBLOCK)); + for (bi = 0; bi < compptr->MCU_width; bi++) { + coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn-1][0][0]; + } + } + blkn += compptr->MCU_width; + ypos += DCTSIZE; + } + } + /* Try to write the MCU. In event of a suspension failure, we will + * re-DCT the MCU on restart (a bit inefficient, could be fixed...) + */ + if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) { + /* Suspension forced; update state counters and exit */ + coef->MCU_vert_offset = yoffset; + coef->mcu_ctr = MCU_col_num; + return FALSE; + } + } + /* Completed an MCU row, but perhaps not an iMCU row */ + coef->mcu_ctr = 0; + } + /* Completed the iMCU row, advance counters for next one */ + coef->iMCU_row_num++; + start_iMCU_row(cinfo); + return TRUE; +} + + +#ifdef FULL_COEF_BUFFER_SUPPORTED + +/* + * Process some data in the first pass of a multi-pass case. + * We process the equivalent of one fully interleaved MCU row ("iMCU" row) + * per call, ie, v_samp_factor block rows for each component in the image. + * This amount of data is read from the source buffer, DCT'd and quantized, + * and saved into the virtual arrays. We also generate suitable dummy blocks + * as needed at the right and lower edges. (The dummy blocks are constructed + * in the virtual arrays, which have been padded appropriately.) This makes + * it possible for subsequent passes not to worry about real vs. dummy blocks. + * + * We must also emit the data to the entropy encoder. This is conveniently + * done by calling compress_output() after we've loaded the current strip + * of the virtual arrays. + * + * NB: input_buf contains a plane for each component in image. All + * components are DCT'd and loaded into the virtual arrays in this pass. + * However, it may be that only a subset of the components are emitted to + * the entropy encoder during this first pass; be careful about looking + * at the scan-dependent variables (MCU dimensions, etc). + */ + +METHODDEF(boolean) +compress_first_pass (j_compress_ptr cinfo, JSAMPIMAGE input_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + JDIMENSION blocks_across, MCUs_across, MCUindex; + int bi, ci, h_samp_factor, block_row, block_rows, ndummy; + JCOEF lastDC; + jpeg_component_info *compptr; + JBLOCKARRAY buffer; + JBLOCKROW thisblockrow, lastblockrow; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Align the virtual buffer for this component. */ + buffer = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[ci], + coef->iMCU_row_num * compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, TRUE); + /* Count non-dummy DCT block rows in this iMCU row. */ + if (coef->iMCU_row_num < last_iMCU_row) + block_rows = compptr->v_samp_factor; + else { + /* NB: can't use last_row_height here, since may not be set! */ + block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + if (block_rows == 0) block_rows = compptr->v_samp_factor; + } + blocks_across = compptr->width_in_blocks; + h_samp_factor = compptr->h_samp_factor; + /* Count number of dummy blocks to be added at the right margin. */ + ndummy = (int) (blocks_across % h_samp_factor); + if (ndummy > 0) + ndummy = h_samp_factor - ndummy; + /* Perform DCT for all non-dummy blocks in this iMCU row. Each call + * on forward_DCT processes a complete horizontal row of DCT blocks. + */ + for (block_row = 0; block_row < block_rows; block_row++) { + thisblockrow = buffer[block_row]; + (*cinfo->fdct->forward_DCT) (cinfo, compptr, + input_buf[ci], thisblockrow, + (JDIMENSION) (block_row * DCTSIZE), + (JDIMENSION) 0, blocks_across); + if (ndummy > 0) { + /* Create dummy blocks at the right edge of the image. */ + thisblockrow += blocks_across; /* => first dummy block */ + jzero_far((void FAR *) thisblockrow, ndummy * SIZEOF(JBLOCK)); + lastDC = thisblockrow[-1][0]; + for (bi = 0; bi < ndummy; bi++) { + thisblockrow[bi][0] = lastDC; + } + } + } + /* If at end of image, create dummy block rows as needed. + * The tricky part here is that within each MCU, we want the DC values + * of the dummy blocks to match the last real block's DC value. + * This squeezes a few more bytes out of the resulting file... + */ + if (coef->iMCU_row_num == last_iMCU_row) { + blocks_across += ndummy; /* include lower right corner */ + MCUs_across = blocks_across / h_samp_factor; + for (block_row = block_rows; block_row < compptr->v_samp_factor; + block_row++) { + thisblockrow = buffer[block_row]; + lastblockrow = buffer[block_row-1]; + jzero_far((void FAR *) thisblockrow, + (size_t) (blocks_across * SIZEOF(JBLOCK))); + for (MCUindex = 0; MCUindex < MCUs_across; MCUindex++) { + lastDC = lastblockrow[h_samp_factor-1][0]; + for (bi = 0; bi < h_samp_factor; bi++) { + thisblockrow[bi][0] = lastDC; + } + thisblockrow += h_samp_factor; /* advance to next MCU in row */ + lastblockrow += h_samp_factor; + } + } + } + } + /* NB: compress_output will increment iMCU_row_num if successful. + * A suspension return will result in redoing all the work above next time. + */ + + /* Emit data to the entropy encoder, sharing code with subsequent passes */ + return compress_output(cinfo, input_buf); +} + + +/* + * Process some data in subsequent passes of a multi-pass case. + * We process the equivalent of one fully interleaved MCU row ("iMCU" row) + * per call, ie, v_samp_factor block rows for each component in the scan. + * The data is obtained from the virtual arrays and fed to the entropy coder. + * Returns TRUE if the iMCU row is completed, FALSE if suspended. + * + * NB: input_buf is ignored; it is likely to be a NULL pointer. + */ + +METHODDEF(boolean) +compress_output (j_compress_ptr cinfo, JSAMPIMAGE input_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION MCU_col_num; /* index of current MCU within row */ + int blkn, ci, xindex, yindex, yoffset; + JDIMENSION start_col; + JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; + JBLOCKROW buffer_ptr; + jpeg_component_info *compptr; + + /* Align the virtual buffers for the components used in this scan. + * NB: during first pass, this is safe only because the buffers will + * already be aligned properly, so jmemmgr.c won't need to do any I/O. + */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + buffer[ci] = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index], + coef->iMCU_row_num * compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, FALSE); + } + + /* Loop to process one whole iMCU row */ + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + yoffset++) { + for (MCU_col_num = coef->mcu_ctr; MCU_col_num < cinfo->MCUs_per_row; + MCU_col_num++) { + /* Construct list of pointers to DCT blocks belonging to this MCU */ + blkn = 0; /* index of current DCT block within MCU */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + start_col = MCU_col_num * compptr->MCU_width; + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + buffer_ptr = buffer[ci][yindex+yoffset] + start_col; + for (xindex = 0; xindex < compptr->MCU_width; xindex++) { + coef->MCU_buffer[blkn++] = buffer_ptr++; + } + } + } + /* Try to write the MCU. */ + if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) { + /* Suspension forced; update state counters and exit */ + coef->MCU_vert_offset = yoffset; + coef->mcu_ctr = MCU_col_num; + return FALSE; + } + } + /* Completed an MCU row, but perhaps not an iMCU row */ + coef->mcu_ctr = 0; + } + /* Completed the iMCU row, advance counters for next one */ + coef->iMCU_row_num++; + start_iMCU_row(cinfo); + return TRUE; +} + +#endif /* FULL_COEF_BUFFER_SUPPORTED */ + + +/* + * Initialize coefficient buffer controller. + */ + +GLOBAL(void) +jinit_c_coef_controller (j_compress_ptr cinfo, boolean need_full_buffer) +{ + my_coef_ptr coef; + + coef = (my_coef_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_coef_controller)); + cinfo->coef = (struct jpeg_c_coef_controller *) coef; + coef->pub.start_pass = start_pass_coef; + + /* Create the coefficient buffer. */ + if (need_full_buffer) { +#ifdef FULL_COEF_BUFFER_SUPPORTED + /* Allocate a full-image virtual array for each component, */ + /* padded to a multiple of samp_factor DCT blocks in each direction. */ + int ci; + jpeg_component_info *compptr; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + coef->whole_image[ci] = (*cinfo->mem->request_virt_barray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + (JDIMENSION) jround_up((long) compptr->width_in_blocks, + (long) compptr->h_samp_factor), + (JDIMENSION) jround_up((long) compptr->height_in_blocks, + (long) compptr->v_samp_factor), + (JDIMENSION) compptr->v_samp_factor); + } +#else + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); +#endif + } else { + /* We only need a single-MCU buffer. */ + JBLOCKROW buffer; + int i; + + buffer = (JBLOCKROW) + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); + for (i = 0; i < C_MAX_BLOCKS_IN_MCU; i++) { + coef->MCU_buffer[i] = buffer + i; + } + coef->whole_image[0] = NULL; /* flag for no virtual arrays */ + } +} diff --git a/Build/source/extra/jpeg/jccolor.c b/Build/source/extra/jpeg/jccolor.c new file mode 100644 index 00000000000..0a8a4b5d13c --- /dev/null +++ b/Build/source/extra/jpeg/jccolor.c @@ -0,0 +1,459 @@ +/* + * jccolor.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains input colorspace conversion routines. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private subobject */ + +typedef struct { + struct jpeg_color_converter pub; /* public fields */ + + /* Private state for RGB->YCC conversion */ + INT32 * rgb_ycc_tab; /* => table for RGB to YCbCr conversion */ +} my_color_converter; + +typedef my_color_converter * my_cconvert_ptr; + + +/**************** RGB -> YCbCr conversion: most common case **************/ + +/* + * YCbCr is defined per CCIR 601-1, except that Cb and Cr are + * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. + * The conversion equations to be implemented are therefore + * Y = 0.29900 * R + 0.58700 * G + 0.11400 * B + * Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + CENTERJSAMPLE + * Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + CENTERJSAMPLE + * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) + * Note: older versions of the IJG code used a zero offset of MAXJSAMPLE/2, + * rather than CENTERJSAMPLE, for Cb and Cr. This gave equal positive and + * negative swings for Cb/Cr, but meant that grayscale values (Cb=Cr=0) + * were not represented exactly. Now we sacrifice exact representation of + * maximum red and maximum blue in order to get exact grayscales. + * + * To avoid floating-point arithmetic, we represent the fractional constants + * as integers scaled up by 2^16 (about 4 digits precision); we have to divide + * the products by 2^16, with appropriate rounding, to get the correct answer. + * + * For even more speed, we avoid doing any multiplications in the inner loop + * by precalculating the constants times R,G,B for all possible values. + * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table); + * for 12-bit samples it is still acceptable. It's not very reasonable for + * 16-bit samples, but if you want lossless storage you shouldn't be changing + * colorspace anyway. + * The CENTERJSAMPLE offsets and the rounding fudge-factor of 0.5 are included + * in the tables to save adding them separately in the inner loop. + */ + +#define SCALEBITS 16 /* speediest right-shift on some machines */ +#define CBCR_OFFSET ((INT32) CENTERJSAMPLE << SCALEBITS) +#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) +#define FIX(x) ((INT32) ((x) * (1L< Y section */ +#define G_Y_OFF (1*(MAXJSAMPLE+1)) /* offset to G => Y section */ +#define B_Y_OFF (2*(MAXJSAMPLE+1)) /* etc. */ +#define R_CB_OFF (3*(MAXJSAMPLE+1)) +#define G_CB_OFF (4*(MAXJSAMPLE+1)) +#define B_CB_OFF (5*(MAXJSAMPLE+1)) +#define R_CR_OFF B_CB_OFF /* B=>Cb, R=>Cr are the same */ +#define G_CR_OFF (6*(MAXJSAMPLE+1)) +#define B_CR_OFF (7*(MAXJSAMPLE+1)) +#define TABLE_SIZE (8*(MAXJSAMPLE+1)) + + +/* + * Initialize for RGB->YCC colorspace conversion. + */ + +METHODDEF(void) +rgb_ycc_start (j_compress_ptr cinfo) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + INT32 * rgb_ycc_tab; + INT32 i; + + /* Allocate and fill in the conversion tables. */ + cconvert->rgb_ycc_tab = rgb_ycc_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (TABLE_SIZE * SIZEOF(INT32))); + + for (i = 0; i <= MAXJSAMPLE; i++) { + rgb_ycc_tab[i+R_Y_OFF] = FIX(0.29900) * i; + rgb_ycc_tab[i+G_Y_OFF] = FIX(0.58700) * i; + rgb_ycc_tab[i+B_Y_OFF] = FIX(0.11400) * i + ONE_HALF; + rgb_ycc_tab[i+R_CB_OFF] = (-FIX(0.16874)) * i; + rgb_ycc_tab[i+G_CB_OFF] = (-FIX(0.33126)) * i; + /* We use a rounding fudge-factor of 0.5-epsilon for Cb and Cr. + * This ensures that the maximum output will round to MAXJSAMPLE + * not MAXJSAMPLE+1, and thus that we don't have to range-limit. + */ + rgb_ycc_tab[i+B_CB_OFF] = FIX(0.50000) * i + CBCR_OFFSET + ONE_HALF-1; +/* B=>Cb and R=>Cr tables are the same + rgb_ycc_tab[i+R_CR_OFF] = FIX(0.50000) * i + CBCR_OFFSET + ONE_HALF-1; +*/ + rgb_ycc_tab[i+G_CR_OFF] = (-FIX(0.41869)) * i; + rgb_ycc_tab[i+B_CR_OFF] = (-FIX(0.08131)) * i; + } +} + + +/* + * Convert some rows of samples to the JPEG colorspace. + * + * Note that we change from the application's interleaved-pixel format + * to our internal noninterleaved, one-plane-per-component format. + * The input buffer is therefore three times as wide as the output buffer. + * + * A starting row offset is provided only for the output buffer. The caller + * can easily adjust the passed input_buf value to accommodate any row + * offset required on that side. + */ + +METHODDEF(void) +rgb_ycc_convert (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register int r, g, b; + register INT32 * ctab = cconvert->rgb_ycc_tab; + register JSAMPROW inptr; + register JSAMPROW outptr0, outptr1, outptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->image_width; + + while (--num_rows >= 0) { + inptr = *input_buf++; + outptr0 = output_buf[0][output_row]; + outptr1 = output_buf[1][output_row]; + outptr2 = output_buf[2][output_row]; + output_row++; + for (col = 0; col < num_cols; col++) { + r = GETJSAMPLE(inptr[RGB_RED]); + g = GETJSAMPLE(inptr[RGB_GREEN]); + b = GETJSAMPLE(inptr[RGB_BLUE]); + inptr += RGB_PIXELSIZE; + /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations + * must be too; we do not need an explicit range-limiting operation. + * Hence the value being shifted is never negative, and we don't + * need the general RIGHT_SHIFT macro. + */ + /* Y */ + outptr0[col] = (JSAMPLE) + ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) + >> SCALEBITS); + /* Cb */ + outptr1[col] = (JSAMPLE) + ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF]) + >> SCALEBITS); + /* Cr */ + outptr2[col] = (JSAMPLE) + ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF]) + >> SCALEBITS); + } + } +} + + +/**************** Cases other than RGB -> YCbCr **************/ + + +/* + * Convert some rows of samples to the JPEG colorspace. + * This version handles RGB->grayscale conversion, which is the same + * as the RGB->Y portion of RGB->YCbCr. + * We assume rgb_ycc_start has been called (we only use the Y tables). + */ + +METHODDEF(void) +rgb_gray_convert (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register int r, g, b; + register INT32 * ctab = cconvert->rgb_ycc_tab; + register JSAMPROW inptr; + register JSAMPROW outptr; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->image_width; + + while (--num_rows >= 0) { + inptr = *input_buf++; + outptr = output_buf[0][output_row]; + output_row++; + for (col = 0; col < num_cols; col++) { + r = GETJSAMPLE(inptr[RGB_RED]); + g = GETJSAMPLE(inptr[RGB_GREEN]); + b = GETJSAMPLE(inptr[RGB_BLUE]); + inptr += RGB_PIXELSIZE; + /* Y */ + outptr[col] = (JSAMPLE) + ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) + >> SCALEBITS); + } + } +} + + +/* + * Convert some rows of samples to the JPEG colorspace. + * This version handles Adobe-style CMYK->YCCK conversion, + * where we convert R=1-C, G=1-M, and B=1-Y to YCbCr using the same + * conversion as above, while passing K (black) unchanged. + * We assume rgb_ycc_start has been called. + */ + +METHODDEF(void) +cmyk_ycck_convert (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register int r, g, b; + register INT32 * ctab = cconvert->rgb_ycc_tab; + register JSAMPROW inptr; + register JSAMPROW outptr0, outptr1, outptr2, outptr3; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->image_width; + + while (--num_rows >= 0) { + inptr = *input_buf++; + outptr0 = output_buf[0][output_row]; + outptr1 = output_buf[1][output_row]; + outptr2 = output_buf[2][output_row]; + outptr3 = output_buf[3][output_row]; + output_row++; + for (col = 0; col < num_cols; col++) { + r = MAXJSAMPLE - GETJSAMPLE(inptr[0]); + g = MAXJSAMPLE - GETJSAMPLE(inptr[1]); + b = MAXJSAMPLE - GETJSAMPLE(inptr[2]); + /* K passes through as-is */ + outptr3[col] = inptr[3]; /* don't need GETJSAMPLE here */ + inptr += 4; + /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations + * must be too; we do not need an explicit range-limiting operation. + * Hence the value being shifted is never negative, and we don't + * need the general RIGHT_SHIFT macro. + */ + /* Y */ + outptr0[col] = (JSAMPLE) + ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) + >> SCALEBITS); + /* Cb */ + outptr1[col] = (JSAMPLE) + ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF]) + >> SCALEBITS); + /* Cr */ + outptr2[col] = (JSAMPLE) + ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF]) + >> SCALEBITS); + } + } +} + + +/* + * Convert some rows of samples to the JPEG colorspace. + * This version handles grayscale output with no conversion. + * The source can be either plain grayscale or YCbCr (since Y == gray). + */ + +METHODDEF(void) +grayscale_convert (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows) +{ + register JSAMPROW inptr; + register JSAMPROW outptr; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->image_width; + int instride = cinfo->input_components; + + while (--num_rows >= 0) { + inptr = *input_buf++; + outptr = output_buf[0][output_row]; + output_row++; + for (col = 0; col < num_cols; col++) { + outptr[col] = inptr[0]; /* don't need GETJSAMPLE() here */ + inptr += instride; + } + } +} + + +/* + * Convert some rows of samples to the JPEG colorspace. + * This version handles multi-component colorspaces without conversion. + * We assume input_components == num_components. + */ + +METHODDEF(void) +null_convert (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows) +{ + register JSAMPROW inptr; + register JSAMPROW outptr; + register JDIMENSION col; + register int ci; + int nc = cinfo->num_components; + JDIMENSION num_cols = cinfo->image_width; + + while (--num_rows >= 0) { + /* It seems fastest to make a separate pass for each component. */ + for (ci = 0; ci < nc; ci++) { + inptr = *input_buf; + outptr = output_buf[ci][output_row]; + for (col = 0; col < num_cols; col++) { + outptr[col] = inptr[ci]; /* don't need GETJSAMPLE() here */ + inptr += nc; + } + } + input_buf++; + output_row++; + } +} + + +/* + * Empty method for start_pass. + */ + +METHODDEF(void) +null_method (j_compress_ptr cinfo) +{ + /* no work needed */ +} + + +/* + * Module initialization routine for input colorspace conversion. + */ + +GLOBAL(void) +jinit_color_converter (j_compress_ptr cinfo) +{ + my_cconvert_ptr cconvert; + + cconvert = (my_cconvert_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_color_converter)); + cinfo->cconvert = (struct jpeg_color_converter *) cconvert; + /* set start_pass to null method until we find out differently */ + cconvert->pub.start_pass = null_method; + + /* Make sure input_components agrees with in_color_space */ + switch (cinfo->in_color_space) { + case JCS_GRAYSCALE: + if (cinfo->input_components != 1) + ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); + break; + + case JCS_RGB: +#if RGB_PIXELSIZE != 3 + if (cinfo->input_components != RGB_PIXELSIZE) + ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); + break; +#endif /* else share code with YCbCr */ + + case JCS_YCbCr: + if (cinfo->input_components != 3) + ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); + break; + + case JCS_CMYK: + case JCS_YCCK: + if (cinfo->input_components != 4) + ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); + break; + + default: /* JCS_UNKNOWN can be anything */ + if (cinfo->input_components < 1) + ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); + break; + } + + /* Check num_components, set conversion method based on requested space */ + switch (cinfo->jpeg_color_space) { + case JCS_GRAYSCALE: + if (cinfo->num_components != 1) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + if (cinfo->in_color_space == JCS_GRAYSCALE) + cconvert->pub.color_convert = grayscale_convert; + else if (cinfo->in_color_space == JCS_RGB) { + cconvert->pub.start_pass = rgb_ycc_start; + cconvert->pub.color_convert = rgb_gray_convert; + } else if (cinfo->in_color_space == JCS_YCbCr) + cconvert->pub.color_convert = grayscale_convert; + else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + case JCS_RGB: + if (cinfo->num_components != 3) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + if (cinfo->in_color_space == JCS_RGB && RGB_PIXELSIZE == 3) + cconvert->pub.color_convert = null_convert; + else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + case JCS_YCbCr: + if (cinfo->num_components != 3) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + if (cinfo->in_color_space == JCS_RGB) { + cconvert->pub.start_pass = rgb_ycc_start; + cconvert->pub.color_convert = rgb_ycc_convert; + } else if (cinfo->in_color_space == JCS_YCbCr) + cconvert->pub.color_convert = null_convert; + else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + case JCS_CMYK: + if (cinfo->num_components != 4) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + if (cinfo->in_color_space == JCS_CMYK) + cconvert->pub.color_convert = null_convert; + else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + case JCS_YCCK: + if (cinfo->num_components != 4) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + if (cinfo->in_color_space == JCS_CMYK) { + cconvert->pub.start_pass = rgb_ycc_start; + cconvert->pub.color_convert = cmyk_ycck_convert; + } else if (cinfo->in_color_space == JCS_YCCK) + cconvert->pub.color_convert = null_convert; + else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + default: /* allow null conversion of JCS_UNKNOWN */ + if (cinfo->jpeg_color_space != cinfo->in_color_space || + cinfo->num_components != cinfo->input_components) + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + cconvert->pub.color_convert = null_convert; + break; + } +} diff --git a/Build/source/extra/jpeg/jcdctmgr.c b/Build/source/extra/jpeg/jcdctmgr.c new file mode 100644 index 00000000000..61fa79b9e68 --- /dev/null +++ b/Build/source/extra/jpeg/jcdctmgr.c @@ -0,0 +1,387 @@ +/* + * jcdctmgr.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the forward-DCT management logic. + * This code selects a particular DCT implementation to be used, + * and it performs related housekeeping chores including coefficient + * quantization. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + + +/* Private subobject for this module */ + +typedef struct { + struct jpeg_forward_dct pub; /* public fields */ + + /* Pointer to the DCT routine actually in use */ + forward_DCT_method_ptr do_dct; + + /* The actual post-DCT divisors --- not identical to the quant table + * entries, because of scaling (especially for an unnormalized DCT). + * Each table is given in normal array order. + */ + DCTELEM * divisors[NUM_QUANT_TBLS]; + +#ifdef DCT_FLOAT_SUPPORTED + /* Same as above for the floating-point case. */ + float_DCT_method_ptr do_float_dct; + FAST_FLOAT * float_divisors[NUM_QUANT_TBLS]; +#endif +} my_fdct_controller; + +typedef my_fdct_controller * my_fdct_ptr; + + +/* + * Initialize for a processing pass. + * Verify that all referenced Q-tables are present, and set up + * the divisor table for each one. + * In the current implementation, DCT of all components is done during + * the first pass, even if only some components will be output in the + * first scan. Hence all components should be examined here. + */ + +METHODDEF(void) +start_pass_fdctmgr (j_compress_ptr cinfo) +{ + my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; + int ci, qtblno, i; + jpeg_component_info *compptr; + JQUANT_TBL * qtbl; + DCTELEM * dtbl; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + qtblno = compptr->quant_tbl_no; + /* Make sure specified quantization table is present */ + if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS || + cinfo->quant_tbl_ptrs[qtblno] == NULL) + ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno); + qtbl = cinfo->quant_tbl_ptrs[qtblno]; + /* Compute divisors for this quant table */ + /* We may do this more than once for same table, but it's not a big deal */ + switch (cinfo->dct_method) { +#ifdef DCT_ISLOW_SUPPORTED + case JDCT_ISLOW: + /* For LL&M IDCT method, divisors are equal to raw quantization + * coefficients multiplied by 8 (to counteract scaling). + */ + if (fdct->divisors[qtblno] == NULL) { + fdct->divisors[qtblno] = (DCTELEM *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + DCTSIZE2 * SIZEOF(DCTELEM)); + } + dtbl = fdct->divisors[qtblno]; + for (i = 0; i < DCTSIZE2; i++) { + dtbl[i] = ((DCTELEM) qtbl->quantval[i]) << 3; + } + break; +#endif +#ifdef DCT_IFAST_SUPPORTED + case JDCT_IFAST: + { + /* For AA&N IDCT method, divisors are equal to quantization + * coefficients scaled by scalefactor[row]*scalefactor[col], where + * scalefactor[0] = 1 + * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 + * We apply a further scale factor of 8. + */ +#define CONST_BITS 14 + static const INT16 aanscales[DCTSIZE2] = { + /* precomputed values scaled up by 14 bits */ + 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, + 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270, + 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906, + 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315, + 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, + 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552, + 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446, + 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247 + }; + SHIFT_TEMPS + + if (fdct->divisors[qtblno] == NULL) { + fdct->divisors[qtblno] = (DCTELEM *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + DCTSIZE2 * SIZEOF(DCTELEM)); + } + dtbl = fdct->divisors[qtblno]; + for (i = 0; i < DCTSIZE2; i++) { + dtbl[i] = (DCTELEM) + DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], + (INT32) aanscales[i]), + CONST_BITS-3); + } + } + break; +#endif +#ifdef DCT_FLOAT_SUPPORTED + case JDCT_FLOAT: + { + /* For float AA&N IDCT method, divisors are equal to quantization + * coefficients scaled by scalefactor[row]*scalefactor[col], where + * scalefactor[0] = 1 + * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 + * We apply a further scale factor of 8. + * What's actually stored is 1/divisor so that the inner loop can + * use a multiplication rather than a division. + */ + FAST_FLOAT * fdtbl; + int row, col; + static const double aanscalefactor[DCTSIZE] = { + 1.0, 1.387039845, 1.306562965, 1.175875602, + 1.0, 0.785694958, 0.541196100, 0.275899379 + }; + + if (fdct->float_divisors[qtblno] == NULL) { + fdct->float_divisors[qtblno] = (FAST_FLOAT *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + DCTSIZE2 * SIZEOF(FAST_FLOAT)); + } + fdtbl = fdct->float_divisors[qtblno]; + i = 0; + for (row = 0; row < DCTSIZE; row++) { + for (col = 0; col < DCTSIZE; col++) { + fdtbl[i] = (FAST_FLOAT) + (1.0 / (((double) qtbl->quantval[i] * + aanscalefactor[row] * aanscalefactor[col] * 8.0))); + i++; + } + } + } + break; +#endif + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + break; + } + } +} + + +/* + * Perform forward DCT on one or more blocks of a component. + * + * The input samples are taken from the sample_data[] array starting at + * position start_row/start_col, and moving to the right for any additional + * blocks. The quantized coefficients are returned in coef_blocks[]. + */ + +METHODDEF(void) +forward_DCT (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY sample_data, JBLOCKROW coef_blocks, + JDIMENSION start_row, JDIMENSION start_col, + JDIMENSION num_blocks) +/* This version is used for integer DCT implementations. */ +{ + /* This routine is heavily used, so it's worth coding it tightly. */ + my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; + forward_DCT_method_ptr do_dct = fdct->do_dct; + DCTELEM * divisors = fdct->divisors[compptr->quant_tbl_no]; + DCTELEM workspace[DCTSIZE2]; /* work area for FDCT subroutine */ + JDIMENSION bi; + + sample_data += start_row; /* fold in the vertical offset once */ + + for (bi = 0; bi < num_blocks; bi++, start_col += DCTSIZE) { + /* Load data into workspace, applying unsigned->signed conversion */ + { register DCTELEM *workspaceptr; + register JSAMPROW elemptr; + register int elemr; + + workspaceptr = workspace; + for (elemr = 0; elemr < DCTSIZE; elemr++) { + elemptr = sample_data[elemr] + start_col; +#if DCTSIZE == 8 /* unroll the inner loop */ + *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; + *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; + *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; + *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; + *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; + *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; + *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; + *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; +#else + { register int elemc; + for (elemc = DCTSIZE; elemc > 0; elemc--) { + *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; + } + } +#endif + } + } + + /* Perform the DCT */ + (*do_dct) (workspace); + + /* Quantize/descale the coefficients, and store into coef_blocks[] */ + { register DCTELEM temp, qval; + register int i; + register JCOEFPTR output_ptr = coef_blocks[bi]; + + for (i = 0; i < DCTSIZE2; i++) { + qval = divisors[i]; + temp = workspace[i]; + /* Divide the coefficient value by qval, ensuring proper rounding. + * Since C does not specify the direction of rounding for negative + * quotients, we have to force the dividend positive for portability. + * + * In most files, at least half of the output values will be zero + * (at default quantization settings, more like three-quarters...) + * so we should ensure that this case is fast. On many machines, + * a comparison is enough cheaper than a divide to make a special test + * a win. Since both inputs will be nonnegative, we need only test + * for a < b to discover whether a/b is 0. + * If your machine's division is fast enough, define FAST_DIVIDE. + */ +#ifdef FAST_DIVIDE +#define DIVIDE_BY(a,b) a /= b +#else +#define DIVIDE_BY(a,b) if (a >= b) a /= b; else a = 0 +#endif + if (temp < 0) { + temp = -temp; + temp += qval>>1; /* for rounding */ + DIVIDE_BY(temp, qval); + temp = -temp; + } else { + temp += qval>>1; /* for rounding */ + DIVIDE_BY(temp, qval); + } + output_ptr[i] = (JCOEF) temp; + } + } + } +} + + +#ifdef DCT_FLOAT_SUPPORTED + +METHODDEF(void) +forward_DCT_float (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY sample_data, JBLOCKROW coef_blocks, + JDIMENSION start_row, JDIMENSION start_col, + JDIMENSION num_blocks) +/* This version is used for floating-point DCT implementations. */ +{ + /* This routine is heavily used, so it's worth coding it tightly. */ + my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; + float_DCT_method_ptr do_dct = fdct->do_float_dct; + FAST_FLOAT * divisors = fdct->float_divisors[compptr->quant_tbl_no]; + FAST_FLOAT workspace[DCTSIZE2]; /* work area for FDCT subroutine */ + JDIMENSION bi; + + sample_data += start_row; /* fold in the vertical offset once */ + + for (bi = 0; bi < num_blocks; bi++, start_col += DCTSIZE) { + /* Load data into workspace, applying unsigned->signed conversion */ + { register FAST_FLOAT *workspaceptr; + register JSAMPROW elemptr; + register int elemr; + + workspaceptr = workspace; + for (elemr = 0; elemr < DCTSIZE; elemr++) { + elemptr = sample_data[elemr] + start_col; +#if DCTSIZE == 8 /* unroll the inner loop */ + *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); + *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); + *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); + *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); + *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); + *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); + *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); + *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); +#else + { register int elemc; + for (elemc = DCTSIZE; elemc > 0; elemc--) { + *workspaceptr++ = (FAST_FLOAT) + (GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); + } + } +#endif + } + } + + /* Perform the DCT */ + (*do_dct) (workspace); + + /* Quantize/descale the coefficients, and store into coef_blocks[] */ + { register FAST_FLOAT temp; + register int i; + register JCOEFPTR output_ptr = coef_blocks[bi]; + + for (i = 0; i < DCTSIZE2; i++) { + /* Apply the quantization and scaling factor */ + temp = workspace[i] * divisors[i]; + /* Round to nearest integer. + * Since C does not specify the direction of rounding for negative + * quotients, we have to force the dividend positive for portability. + * The maximum coefficient size is +-16K (for 12-bit data), so this + * code should work for either 16-bit or 32-bit ints. + */ + output_ptr[i] = (JCOEF) ((int) (temp + (FAST_FLOAT) 16384.5) - 16384); + } + } + } +} + +#endif /* DCT_FLOAT_SUPPORTED */ + + +/* + * Initialize FDCT manager. + */ + +GLOBAL(void) +jinit_forward_dct (j_compress_ptr cinfo) +{ + my_fdct_ptr fdct; + int i; + + fdct = (my_fdct_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_fdct_controller)); + cinfo->fdct = (struct jpeg_forward_dct *) fdct; + fdct->pub.start_pass = start_pass_fdctmgr; + + switch (cinfo->dct_method) { +#ifdef DCT_ISLOW_SUPPORTED + case JDCT_ISLOW: + fdct->pub.forward_DCT = forward_DCT; + fdct->do_dct = jpeg_fdct_islow; + break; +#endif +#ifdef DCT_IFAST_SUPPORTED + case JDCT_IFAST: + fdct->pub.forward_DCT = forward_DCT; + fdct->do_dct = jpeg_fdct_ifast; + break; +#endif +#ifdef DCT_FLOAT_SUPPORTED + case JDCT_FLOAT: + fdct->pub.forward_DCT = forward_DCT_float; + fdct->do_float_dct = jpeg_fdct_float; + break; +#endif + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + break; + } + + /* Mark divisor tables unallocated */ + for (i = 0; i < NUM_QUANT_TBLS; i++) { + fdct->divisors[i] = NULL; +#ifdef DCT_FLOAT_SUPPORTED + fdct->float_divisors[i] = NULL; +#endif + } +} diff --git a/Build/source/extra/jpeg/jchuff.c b/Build/source/extra/jpeg/jchuff.c new file mode 100644 index 00000000000..f2352505486 --- /dev/null +++ b/Build/source/extra/jpeg/jchuff.c @@ -0,0 +1,909 @@ +/* + * jchuff.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains Huffman entropy encoding routines. + * + * Much of the complexity here has to do with supporting output suspension. + * If the data destination module demands suspension, we want to be able to + * back up to the start of the current MCU. To do this, we copy state + * variables into local working storage, and update them back to the + * permanent JPEG objects only upon successful completion of an MCU. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jchuff.h" /* Declarations shared with jcphuff.c */ + + +/* Expanded entropy encoder object for Huffman encoding. + * + * The savable_state subrecord contains fields that change within an MCU, + * but must not be updated permanently until we complete the MCU. + */ + +typedef struct { + INT32 put_buffer; /* current bit-accumulation buffer */ + int put_bits; /* # of bits now in it */ + int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ +} savable_state; + +/* This macro is to work around compilers with missing or broken + * structure assignment. You'll need to fix this code if you have + * such a compiler and you change MAX_COMPS_IN_SCAN. + */ + +#ifndef NO_STRUCT_ASSIGN +#define ASSIGN_STATE(dest,src) ((dest) = (src)) +#else +#if MAX_COMPS_IN_SCAN == 4 +#define ASSIGN_STATE(dest,src) \ + ((dest).put_buffer = (src).put_buffer, \ + (dest).put_bits = (src).put_bits, \ + (dest).last_dc_val[0] = (src).last_dc_val[0], \ + (dest).last_dc_val[1] = (src).last_dc_val[1], \ + (dest).last_dc_val[2] = (src).last_dc_val[2], \ + (dest).last_dc_val[3] = (src).last_dc_val[3]) +#endif +#endif + + +typedef struct { + struct jpeg_entropy_encoder pub; /* public fields */ + + savable_state saved; /* Bit buffer & DC state at start of MCU */ + + /* These fields are NOT loaded into local working state. */ + unsigned int restarts_to_go; /* MCUs left in this restart interval */ + int next_restart_num; /* next restart number to write (0-7) */ + + /* Pointers to derived tables (these workspaces have image lifespan) */ + c_derived_tbl * dc_derived_tbls[NUM_HUFF_TBLS]; + c_derived_tbl * ac_derived_tbls[NUM_HUFF_TBLS]; + +#ifdef ENTROPY_OPT_SUPPORTED /* Statistics tables for optimization */ + long * dc_count_ptrs[NUM_HUFF_TBLS]; + long * ac_count_ptrs[NUM_HUFF_TBLS]; +#endif +} huff_entropy_encoder; + +typedef huff_entropy_encoder * huff_entropy_ptr; + +/* Working state while writing an MCU. + * This struct contains all the fields that are needed by subroutines. + */ + +typedef struct { + JOCTET * next_output_byte; /* => next byte to write in buffer */ + size_t free_in_buffer; /* # of byte spaces remaining in buffer */ + savable_state cur; /* Current bit buffer & DC state */ + j_compress_ptr cinfo; /* dump_buffer needs access to this */ +} working_state; + + +/* Forward declarations */ +METHODDEF(boolean) encode_mcu_huff JPP((j_compress_ptr cinfo, + JBLOCKROW *MCU_data)); +METHODDEF(void) finish_pass_huff JPP((j_compress_ptr cinfo)); +#ifdef ENTROPY_OPT_SUPPORTED +METHODDEF(boolean) encode_mcu_gather JPP((j_compress_ptr cinfo, + JBLOCKROW *MCU_data)); +METHODDEF(void) finish_pass_gather JPP((j_compress_ptr cinfo)); +#endif + + +/* + * Initialize for a Huffman-compressed scan. + * If gather_statistics is TRUE, we do not output anything during the scan, + * just count the Huffman symbols used and generate Huffman code tables. + */ + +METHODDEF(void) +start_pass_huff (j_compress_ptr cinfo, boolean gather_statistics) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int ci, dctbl, actbl; + jpeg_component_info * compptr; + + if (gather_statistics) { +#ifdef ENTROPY_OPT_SUPPORTED + entropy->pub.encode_mcu = encode_mcu_gather; + entropy->pub.finish_pass = finish_pass_gather; +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else { + entropy->pub.encode_mcu = encode_mcu_huff; + entropy->pub.finish_pass = finish_pass_huff; + } + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + dctbl = compptr->dc_tbl_no; + actbl = compptr->ac_tbl_no; + if (gather_statistics) { +#ifdef ENTROPY_OPT_SUPPORTED + /* Check for invalid table indexes */ + /* (make_c_derived_tbl does this in the other path) */ + if (dctbl < 0 || dctbl >= NUM_HUFF_TBLS) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, dctbl); + if (actbl < 0 || actbl >= NUM_HUFF_TBLS) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, actbl); + /* Allocate and zero the statistics tables */ + /* Note that jpeg_gen_optimal_table expects 257 entries in each table! */ + if (entropy->dc_count_ptrs[dctbl] == NULL) + entropy->dc_count_ptrs[dctbl] = (long *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 257 * SIZEOF(long)); + MEMZERO(entropy->dc_count_ptrs[dctbl], 257 * SIZEOF(long)); + if (entropy->ac_count_ptrs[actbl] == NULL) + entropy->ac_count_ptrs[actbl] = (long *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 257 * SIZEOF(long)); + MEMZERO(entropy->ac_count_ptrs[actbl], 257 * SIZEOF(long)); +#endif + } else { + /* Compute derived values for Huffman tables */ + /* We may do this more than once for a table, but it's not expensive */ + jpeg_make_c_derived_tbl(cinfo, TRUE, dctbl, + & entropy->dc_derived_tbls[dctbl]); + jpeg_make_c_derived_tbl(cinfo, FALSE, actbl, + & entropy->ac_derived_tbls[actbl]); + } + /* Initialize DC predictions to 0 */ + entropy->saved.last_dc_val[ci] = 0; + } + + /* Initialize bit buffer to empty */ + entropy->saved.put_buffer = 0; + entropy->saved.put_bits = 0; + + /* Initialize restart stuff */ + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num = 0; +} + + +/* + * Compute the derived values for a Huffman table. + * This routine also performs some validation checks on the table. + * + * Note this is also used by jcphuff.c. + */ + +GLOBAL(void) +jpeg_make_c_derived_tbl (j_compress_ptr cinfo, boolean isDC, int tblno, + c_derived_tbl ** pdtbl) +{ + JHUFF_TBL *htbl; + c_derived_tbl *dtbl; + int p, i, l, lastp, si, maxsymbol; + char huffsize[257]; + unsigned int huffcode[257]; + unsigned int code; + + /* Note that huffsize[] and huffcode[] are filled in code-length order, + * paralleling the order of the symbols themselves in htbl->huffval[]. + */ + + /* Find the input Huffman table */ + if (tblno < 0 || tblno >= NUM_HUFF_TBLS) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); + htbl = + isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno]; + if (htbl == NULL) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); + + /* Allocate a workspace if we haven't already done so. */ + if (*pdtbl == NULL) + *pdtbl = (c_derived_tbl *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(c_derived_tbl)); + dtbl = *pdtbl; + + /* Figure C.1: make table of Huffman code length for each symbol */ + + p = 0; + for (l = 1; l <= 16; l++) { + i = (int) htbl->bits[l]; + if (i < 0 || p + i > 256) /* protect against table overrun */ + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + while (i--) + huffsize[p++] = (char) l; + } + huffsize[p] = 0; + lastp = p; + + /* Figure C.2: generate the codes themselves */ + /* We also validate that the counts represent a legal Huffman code tree. */ + + code = 0; + si = huffsize[0]; + p = 0; + while (huffsize[p]) { + while (((int) huffsize[p]) == si) { + huffcode[p++] = code; + code++; + } + /* code is now 1 more than the last code used for codelength si; but + * it must still fit in si bits, since no code is allowed to be all ones. + */ + if (((INT32) code) >= (((INT32) 1) << si)) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + code <<= 1; + si++; + } + + /* Figure C.3: generate encoding tables */ + /* These are code and size indexed by symbol value */ + + /* Set all codeless symbols to have code length 0; + * this lets us detect duplicate VAL entries here, and later + * allows emit_bits to detect any attempt to emit such symbols. + */ + MEMZERO(dtbl->ehufsi, SIZEOF(dtbl->ehufsi)); + + /* This is also a convenient place to check for out-of-range + * and duplicated VAL entries. We allow 0..255 for AC symbols + * but only 0..15 for DC. (We could constrain them further + * based on data depth and mode, but this seems enough.) + */ + maxsymbol = isDC ? 15 : 255; + + for (p = 0; p < lastp; p++) { + i = htbl->huffval[p]; + if (i < 0 || i > maxsymbol || dtbl->ehufsi[i]) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + dtbl->ehufco[i] = huffcode[p]; + dtbl->ehufsi[i] = huffsize[p]; + } +} + + +/* Outputting bytes to the file */ + +/* Emit a byte, taking 'action' if must suspend. */ +#define emit_byte(state,val,action) \ + { *(state)->next_output_byte++ = (JOCTET) (val); \ + if (--(state)->free_in_buffer == 0) \ + if (! dump_buffer(state)) \ + { action; } } + + +LOCAL(boolean) +dump_buffer (working_state * state) +/* Empty the output buffer; return TRUE if successful, FALSE if must suspend */ +{ + struct jpeg_destination_mgr * dest = state->cinfo->dest; + + if (! (*dest->empty_output_buffer) (state->cinfo)) + return FALSE; + /* After a successful buffer dump, must reset buffer pointers */ + state->next_output_byte = dest->next_output_byte; + state->free_in_buffer = dest->free_in_buffer; + return TRUE; +} + + +/* Outputting bits to the file */ + +/* Only the right 24 bits of put_buffer are used; the valid bits are + * left-justified in this part. At most 16 bits can be passed to emit_bits + * in one call, and we never retain more than 7 bits in put_buffer + * between calls, so 24 bits are sufficient. + */ + +INLINE +LOCAL(boolean) +emit_bits (working_state * state, unsigned int code, int size) +/* Emit some bits; return TRUE if successful, FALSE if must suspend */ +{ + /* This routine is heavily used, so it's worth coding tightly. */ + register INT32 put_buffer = (INT32) code; + register int put_bits = state->cur.put_bits; + + /* if size is 0, caller used an invalid Huffman table entry */ + if (size == 0) + ERREXIT(state->cinfo, JERR_HUFF_MISSING_CODE); + + put_buffer &= (((INT32) 1)<cur.put_buffer; /* and merge with old buffer contents */ + + while (put_bits >= 8) { + int c = (int) ((put_buffer >> 16) & 0xFF); + + emit_byte(state, c, return FALSE); + if (c == 0xFF) { /* need to stuff a zero byte? */ + emit_byte(state, 0, return FALSE); + } + put_buffer <<= 8; + put_bits -= 8; + } + + state->cur.put_buffer = put_buffer; /* update state variables */ + state->cur.put_bits = put_bits; + + return TRUE; +} + + +LOCAL(boolean) +flush_bits (working_state * state) +{ + if (! emit_bits(state, 0x7F, 7)) /* fill any partial byte with ones */ + return FALSE; + state->cur.put_buffer = 0; /* and reset bit-buffer to empty */ + state->cur.put_bits = 0; + return TRUE; +} + + +/* Encode a single block's worth of coefficients */ + +LOCAL(boolean) +encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val, + c_derived_tbl *dctbl, c_derived_tbl *actbl) +{ + register int temp, temp2; + register int nbits; + register int k, r, i; + + /* Encode the DC coefficient difference per section F.1.2.1 */ + + temp = temp2 = block[0] - last_dc_val; + + if (temp < 0) { + temp = -temp; /* temp is abs value of input */ + /* For a negative input, want temp2 = bitwise complement of abs(input) */ + /* This code assumes we are on a two's complement machine */ + temp2--; + } + + /* Find the number of bits needed for the magnitude of the coefficient */ + nbits = 0; + while (temp) { + nbits++; + temp >>= 1; + } + /* Check for out-of-range coefficient values. + * Since we're encoding a difference, the range limit is twice as much. + */ + if (nbits > MAX_COEF_BITS+1) + ERREXIT(state->cinfo, JERR_BAD_DCT_COEF); + + /* Emit the Huffman-coded symbol for the number of bits */ + if (! emit_bits(state, dctbl->ehufco[nbits], dctbl->ehufsi[nbits])) + return FALSE; + + /* Emit that number of bits of the value, if positive, */ + /* or the complement of its magnitude, if negative. */ + if (nbits) /* emit_bits rejects calls with size 0 */ + if (! emit_bits(state, (unsigned int) temp2, nbits)) + return FALSE; + + /* Encode the AC coefficients per section F.1.2.2 */ + + r = 0; /* r = run length of zeros */ + + for (k = 1; k < DCTSIZE2; k++) { + if ((temp = block[jpeg_natural_order[k]]) == 0) { + r++; + } else { + /* if run length > 15, must emit special run-length-16 codes (0xF0) */ + while (r > 15) { + if (! emit_bits(state, actbl->ehufco[0xF0], actbl->ehufsi[0xF0])) + return FALSE; + r -= 16; + } + + temp2 = temp; + if (temp < 0) { + temp = -temp; /* temp is abs value of input */ + /* This code assumes we are on a two's complement machine */ + temp2--; + } + + /* Find the number of bits needed for the magnitude of the coefficient */ + nbits = 1; /* there must be at least one 1 bit */ + while ((temp >>= 1)) + nbits++; + /* Check for out-of-range coefficient values */ + if (nbits > MAX_COEF_BITS) + ERREXIT(state->cinfo, JERR_BAD_DCT_COEF); + + /* Emit Huffman symbol for run length / number of bits */ + i = (r << 4) + nbits; + if (! emit_bits(state, actbl->ehufco[i], actbl->ehufsi[i])) + return FALSE; + + /* Emit that number of bits of the value, if positive, */ + /* or the complement of its magnitude, if negative. */ + if (! emit_bits(state, (unsigned int) temp2, nbits)) + return FALSE; + + r = 0; + } + } + + /* If the last coef(s) were zero, emit an end-of-block code */ + if (r > 0) + if (! emit_bits(state, actbl->ehufco[0], actbl->ehufsi[0])) + return FALSE; + + return TRUE; +} + + +/* + * Emit a restart marker & resynchronize predictions. + */ + +LOCAL(boolean) +emit_restart (working_state * state, int restart_num) +{ + int ci; + + if (! flush_bits(state)) + return FALSE; + + emit_byte(state, 0xFF, return FALSE); + emit_byte(state, JPEG_RST0 + restart_num, return FALSE); + + /* Re-initialize DC predictions to 0 */ + for (ci = 0; ci < state->cinfo->comps_in_scan; ci++) + state->cur.last_dc_val[ci] = 0; + + /* The restart counter is not updated until we successfully write the MCU. */ + + return TRUE; +} + + +/* + * Encode and output one MCU's worth of Huffman-compressed coefficients. + */ + +METHODDEF(boolean) +encode_mcu_huff (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + working_state state; + int blkn, ci; + jpeg_component_info * compptr; + + /* Load up working state */ + state.next_output_byte = cinfo->dest->next_output_byte; + state.free_in_buffer = cinfo->dest->free_in_buffer; + ASSIGN_STATE(state.cur, entropy->saved); + state.cinfo = cinfo; + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! emit_restart(&state, entropy->next_restart_num)) + return FALSE; + } + + /* Encode the MCU data blocks */ + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + ci = cinfo->MCU_membership[blkn]; + compptr = cinfo->cur_comp_info[ci]; + if (! encode_one_block(&state, + MCU_data[blkn][0], state.cur.last_dc_val[ci], + entropy->dc_derived_tbls[compptr->dc_tbl_no], + entropy->ac_derived_tbls[compptr->ac_tbl_no])) + return FALSE; + /* Update last_dc_val */ + state.cur.last_dc_val[ci] = MCU_data[blkn][0][0]; + } + + /* Completed MCU, so update state */ + cinfo->dest->next_output_byte = state.next_output_byte; + cinfo->dest->free_in_buffer = state.free_in_buffer; + ASSIGN_STATE(entropy->saved, state.cur); + + /* Update restart-interval state too */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + return TRUE; +} + + +/* + * Finish up at the end of a Huffman-compressed scan. + */ + +METHODDEF(void) +finish_pass_huff (j_compress_ptr cinfo) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + working_state state; + + /* Load up working state ... flush_bits needs it */ + state.next_output_byte = cinfo->dest->next_output_byte; + state.free_in_buffer = cinfo->dest->free_in_buffer; + ASSIGN_STATE(state.cur, entropy->saved); + state.cinfo = cinfo; + + /* Flush out the last data */ + if (! flush_bits(&state)) + ERREXIT(cinfo, JERR_CANT_SUSPEND); + + /* Update state */ + cinfo->dest->next_output_byte = state.next_output_byte; + cinfo->dest->free_in_buffer = state.free_in_buffer; + ASSIGN_STATE(entropy->saved, state.cur); +} + + +/* + * Huffman coding optimization. + * + * We first scan the supplied data and count the number of uses of each symbol + * that is to be Huffman-coded. (This process MUST agree with the code above.) + * Then we build a Huffman coding tree for the observed counts. + * Symbols which are not needed at all for the particular image are not + * assigned any code, which saves space in the DHT marker as well as in + * the compressed data. + */ + +#ifdef ENTROPY_OPT_SUPPORTED + + +/* Process a single block's worth of coefficients */ + +LOCAL(void) +htest_one_block (j_compress_ptr cinfo, JCOEFPTR block, int last_dc_val, + long dc_counts[], long ac_counts[]) +{ + register int temp; + register int nbits; + register int k, r; + + /* Encode the DC coefficient difference per section F.1.2.1 */ + + temp = block[0] - last_dc_val; + if (temp < 0) + temp = -temp; + + /* Find the number of bits needed for the magnitude of the coefficient */ + nbits = 0; + while (temp) { + nbits++; + temp >>= 1; + } + /* Check for out-of-range coefficient values. + * Since we're encoding a difference, the range limit is twice as much. + */ + if (nbits > MAX_COEF_BITS+1) + ERREXIT(cinfo, JERR_BAD_DCT_COEF); + + /* Count the Huffman symbol for the number of bits */ + dc_counts[nbits]++; + + /* Encode the AC coefficients per section F.1.2.2 */ + + r = 0; /* r = run length of zeros */ + + for (k = 1; k < DCTSIZE2; k++) { + if ((temp = block[jpeg_natural_order[k]]) == 0) { + r++; + } else { + /* if run length > 15, must emit special run-length-16 codes (0xF0) */ + while (r > 15) { + ac_counts[0xF0]++; + r -= 16; + } + + /* Find the number of bits needed for the magnitude of the coefficient */ + if (temp < 0) + temp = -temp; + + /* Find the number of bits needed for the magnitude of the coefficient */ + nbits = 1; /* there must be at least one 1 bit */ + while ((temp >>= 1)) + nbits++; + /* Check for out-of-range coefficient values */ + if (nbits > MAX_COEF_BITS) + ERREXIT(cinfo, JERR_BAD_DCT_COEF); + + /* Count Huffman symbol for run length / number of bits */ + ac_counts[(r << 4) + nbits]++; + + r = 0; + } + } + + /* If the last coef(s) were zero, emit an end-of-block code */ + if (r > 0) + ac_counts[0]++; +} + + +/* + * Trial-encode one MCU's worth of Huffman-compressed coefficients. + * No data is actually output, so no suspension return is possible. + */ + +METHODDEF(boolean) +encode_mcu_gather (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int blkn, ci; + jpeg_component_info * compptr; + + /* Take care of restart intervals if needed */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + /* Re-initialize DC predictions to 0 */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) + entropy->saved.last_dc_val[ci] = 0; + /* Update restart state */ + entropy->restarts_to_go = cinfo->restart_interval; + } + entropy->restarts_to_go--; + } + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + ci = cinfo->MCU_membership[blkn]; + compptr = cinfo->cur_comp_info[ci]; + htest_one_block(cinfo, MCU_data[blkn][0], entropy->saved.last_dc_val[ci], + entropy->dc_count_ptrs[compptr->dc_tbl_no], + entropy->ac_count_ptrs[compptr->ac_tbl_no]); + entropy->saved.last_dc_val[ci] = MCU_data[blkn][0][0]; + } + + return TRUE; +} + + +/* + * Generate the best Huffman code table for the given counts, fill htbl. + * Note this is also used by jcphuff.c. + * + * The JPEG standard requires that no symbol be assigned a codeword of all + * one bits (so that padding bits added at the end of a compressed segment + * can't look like a valid code). Because of the canonical ordering of + * codewords, this just means that there must be an unused slot in the + * longest codeword length category. Section K.2 of the JPEG spec suggests + * reserving such a slot by pretending that symbol 256 is a valid symbol + * with count 1. In theory that's not optimal; giving it count zero but + * including it in the symbol set anyway should give a better Huffman code. + * But the theoretically better code actually seems to come out worse in + * practice, because it produces more all-ones bytes (which incur stuffed + * zero bytes in the final file). In any case the difference is tiny. + * + * The JPEG standard requires Huffman codes to be no more than 16 bits long. + * If some symbols have a very small but nonzero probability, the Huffman tree + * must be adjusted to meet the code length restriction. We currently use + * the adjustment method suggested in JPEG section K.2. This method is *not* + * optimal; it may not choose the best possible limited-length code. But + * typically only very-low-frequency symbols will be given less-than-optimal + * lengths, so the code is almost optimal. Experimental comparisons against + * an optimal limited-length-code algorithm indicate that the difference is + * microscopic --- usually less than a hundredth of a percent of total size. + * So the extra complexity of an optimal algorithm doesn't seem worthwhile. + */ + +GLOBAL(void) +jpeg_gen_optimal_table (j_compress_ptr cinfo, JHUFF_TBL * htbl, long freq[]) +{ +#define MAX_CLEN 32 /* assumed maximum initial code length */ + UINT8 bits[MAX_CLEN+1]; /* bits[k] = # of symbols with code length k */ + int codesize[257]; /* codesize[k] = code length of symbol k */ + int others[257]; /* next symbol in current branch of tree */ + int c1, c2; + int p, i, j; + long v; + + /* This algorithm is explained in section K.2 of the JPEG standard */ + + MEMZERO(bits, SIZEOF(bits)); + MEMZERO(codesize, SIZEOF(codesize)); + for (i = 0; i < 257; i++) + others[i] = -1; /* init links to empty */ + + freq[256] = 1; /* make sure 256 has a nonzero count */ + /* Including the pseudo-symbol 256 in the Huffman procedure guarantees + * that no real symbol is given code-value of all ones, because 256 + * will be placed last in the largest codeword category. + */ + + /* Huffman's basic algorithm to assign optimal code lengths to symbols */ + + for (;;) { + /* Find the smallest nonzero frequency, set c1 = its symbol */ + /* In case of ties, take the larger symbol number */ + c1 = -1; + v = 1000000000L; + for (i = 0; i <= 256; i++) { + if (freq[i] && freq[i] <= v) { + v = freq[i]; + c1 = i; + } + } + + /* Find the next smallest nonzero frequency, set c2 = its symbol */ + /* In case of ties, take the larger symbol number */ + c2 = -1; + v = 1000000000L; + for (i = 0; i <= 256; i++) { + if (freq[i] && freq[i] <= v && i != c1) { + v = freq[i]; + c2 = i; + } + } + + /* Done if we've merged everything into one frequency */ + if (c2 < 0) + break; + + /* Else merge the two counts/trees */ + freq[c1] += freq[c2]; + freq[c2] = 0; + + /* Increment the codesize of everything in c1's tree branch */ + codesize[c1]++; + while (others[c1] >= 0) { + c1 = others[c1]; + codesize[c1]++; + } + + others[c1] = c2; /* chain c2 onto c1's tree branch */ + + /* Increment the codesize of everything in c2's tree branch */ + codesize[c2]++; + while (others[c2] >= 0) { + c2 = others[c2]; + codesize[c2]++; + } + } + + /* Now count the number of symbols of each code length */ + for (i = 0; i <= 256; i++) { + if (codesize[i]) { + /* The JPEG standard seems to think that this can't happen, */ + /* but I'm paranoid... */ + if (codesize[i] > MAX_CLEN) + ERREXIT(cinfo, JERR_HUFF_CLEN_OVERFLOW); + + bits[codesize[i]]++; + } + } + + /* JPEG doesn't allow symbols with code lengths over 16 bits, so if the pure + * Huffman procedure assigned any such lengths, we must adjust the coding. + * Here is what the JPEG spec says about how this next bit works: + * Since symbols are paired for the longest Huffman code, the symbols are + * removed from this length category two at a time. The prefix for the pair + * (which is one bit shorter) is allocated to one of the pair; then, + * skipping the BITS entry for that prefix length, a code word from the next + * shortest nonzero BITS entry is converted into a prefix for two code words + * one bit longer. + */ + + for (i = MAX_CLEN; i > 16; i--) { + while (bits[i] > 0) { + j = i - 2; /* find length of new prefix to be used */ + while (bits[j] == 0) + j--; + + bits[i] -= 2; /* remove two symbols */ + bits[i-1]++; /* one goes in this length */ + bits[j+1] += 2; /* two new symbols in this length */ + bits[j]--; /* symbol of this length is now a prefix */ + } + } + + /* Remove the count for the pseudo-symbol 256 from the largest codelength */ + while (bits[i] == 0) /* find largest codelength still in use */ + i--; + bits[i]--; + + /* Return final symbol counts (only for lengths 0..16) */ + MEMCOPY(htbl->bits, bits, SIZEOF(htbl->bits)); + + /* Return a list of the symbols sorted by code length */ + /* It's not real clear to me why we don't need to consider the codelength + * changes made above, but the JPEG spec seems to think this works. + */ + p = 0; + for (i = 1; i <= MAX_CLEN; i++) { + for (j = 0; j <= 255; j++) { + if (codesize[j] == i) { + htbl->huffval[p] = (UINT8) j; + p++; + } + } + } + + /* Set sent_table FALSE so updated table will be written to JPEG file. */ + htbl->sent_table = FALSE; +} + + +/* + * Finish up a statistics-gathering pass and create the new Huffman tables. + */ + +METHODDEF(void) +finish_pass_gather (j_compress_ptr cinfo) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int ci, dctbl, actbl; + jpeg_component_info * compptr; + JHUFF_TBL **htblptr; + boolean did_dc[NUM_HUFF_TBLS]; + boolean did_ac[NUM_HUFF_TBLS]; + + /* It's important not to apply jpeg_gen_optimal_table more than once + * per table, because it clobbers the input frequency counts! + */ + MEMZERO(did_dc, SIZEOF(did_dc)); + MEMZERO(did_ac, SIZEOF(did_ac)); + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + dctbl = compptr->dc_tbl_no; + actbl = compptr->ac_tbl_no; + if (! did_dc[dctbl]) { + htblptr = & cinfo->dc_huff_tbl_ptrs[dctbl]; + if (*htblptr == NULL) + *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); + jpeg_gen_optimal_table(cinfo, *htblptr, entropy->dc_count_ptrs[dctbl]); + did_dc[dctbl] = TRUE; + } + if (! did_ac[actbl]) { + htblptr = & cinfo->ac_huff_tbl_ptrs[actbl]; + if (*htblptr == NULL) + *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); + jpeg_gen_optimal_table(cinfo, *htblptr, entropy->ac_count_ptrs[actbl]); + did_ac[actbl] = TRUE; + } + } +} + + +#endif /* ENTROPY_OPT_SUPPORTED */ + + +/* + * Module initialization routine for Huffman entropy encoding. + */ + +GLOBAL(void) +jinit_huff_encoder (j_compress_ptr cinfo) +{ + huff_entropy_ptr entropy; + int i; + + entropy = (huff_entropy_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(huff_entropy_encoder)); + cinfo->entropy = (struct jpeg_entropy_encoder *) entropy; + entropy->pub.start_pass = start_pass_huff; + + /* Mark tables unallocated */ + for (i = 0; i < NUM_HUFF_TBLS; i++) { + entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL; +#ifdef ENTROPY_OPT_SUPPORTED + entropy->dc_count_ptrs[i] = entropy->ac_count_ptrs[i] = NULL; +#endif + } +} diff --git a/Build/source/extra/jpeg/jchuff.h b/Build/source/extra/jpeg/jchuff.h new file mode 100644 index 00000000000..a9599fc1e6f --- /dev/null +++ b/Build/source/extra/jpeg/jchuff.h @@ -0,0 +1,47 @@ +/* + * jchuff.h + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains declarations for Huffman entropy encoding routines + * that are shared between the sequential encoder (jchuff.c) and the + * progressive encoder (jcphuff.c). No other modules need to see these. + */ + +/* The legal range of a DCT coefficient is + * -1024 .. +1023 for 8-bit data; + * -16384 .. +16383 for 12-bit data. + * Hence the magnitude should always fit in 10 or 14 bits respectively. + */ + +#if BITS_IN_JSAMPLE == 8 +#define MAX_COEF_BITS 10 +#else +#define MAX_COEF_BITS 14 +#endif + +/* Derived data constructed for each Huffman table */ + +typedef struct { + unsigned int ehufco[256]; /* code for each symbol */ + char ehufsi[256]; /* length of code for each symbol */ + /* If no code has been allocated for a symbol S, ehufsi[S] contains 0 */ +} c_derived_tbl; + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_make_c_derived_tbl jMkCDerived +#define jpeg_gen_optimal_table jGenOptTbl +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + +/* Expand a Huffman table definition into the derived format */ +EXTERN(void) jpeg_make_c_derived_tbl + JPP((j_compress_ptr cinfo, boolean isDC, int tblno, + c_derived_tbl ** pdtbl)); + +/* Generate an optimal table definition given the specified counts */ +EXTERN(void) jpeg_gen_optimal_table + JPP((j_compress_ptr cinfo, JHUFF_TBL * htbl, long freq[])); diff --git a/Build/source/extra/jpeg/jcinit.c b/Build/source/extra/jpeg/jcinit.c new file mode 100644 index 00000000000..5efffe33166 --- /dev/null +++ b/Build/source/extra/jpeg/jcinit.c @@ -0,0 +1,72 @@ +/* + * jcinit.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains initialization logic for the JPEG compressor. + * This routine is in charge of selecting the modules to be executed and + * making an initialization call to each one. + * + * Logically, this code belongs in jcmaster.c. It's split out because + * linking this routine implies linking the entire compression library. + * For a transcoding-only application, we want to be able to use jcmaster.c + * without linking in the whole library. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * Master selection of compression modules. + * This is done once at the start of processing an image. We determine + * which modules will be used and give them appropriate initialization calls. + */ + +GLOBAL(void) +jinit_compress_master (j_compress_ptr cinfo) +{ + /* Initialize master control (includes parameter checking/processing) */ + jinit_c_master_control(cinfo, FALSE /* full compression */); + + /* Preprocessing */ + if (! cinfo->raw_data_in) { + jinit_color_converter(cinfo); + jinit_downsampler(cinfo); + jinit_c_prep_controller(cinfo, FALSE /* never need full buffer here */); + } + /* Forward DCT */ + jinit_forward_dct(cinfo); + /* Entropy encoding: either Huffman or arithmetic coding. */ + if (cinfo->arith_code) { + ERREXIT(cinfo, JERR_ARITH_NOTIMPL); + } else { + if (cinfo->progressive_mode) { +#ifdef C_PROGRESSIVE_SUPPORTED + jinit_phuff_encoder(cinfo); +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else + jinit_huff_encoder(cinfo); + } + + /* Need a full-image coefficient buffer in any multi-pass mode. */ + jinit_c_coef_controller(cinfo, + (boolean) (cinfo->num_scans > 1 || cinfo->optimize_coding)); + jinit_c_main_controller(cinfo, FALSE /* never need full buffer here */); + + jinit_marker_writer(cinfo); + + /* We can now tell the memory manager to allocate virtual arrays. */ + (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); + + /* Write the datastream header (SOI) immediately. + * Frame and scan headers are postponed till later. + * This lets application insert special markers after the SOI. + */ + (*cinfo->marker->write_file_header) (cinfo); +} diff --git a/Build/source/extra/jpeg/jcmainct.c b/Build/source/extra/jpeg/jcmainct.c new file mode 100644 index 00000000000..e0279a7e017 --- /dev/null +++ b/Build/source/extra/jpeg/jcmainct.c @@ -0,0 +1,293 @@ +/* + * jcmainct.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the main buffer controller for compression. + * The main buffer lies between the pre-processor and the JPEG + * compressor proper; it holds downsampled data in the JPEG colorspace. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Note: currently, there is no operating mode in which a full-image buffer + * is needed at this step. If there were, that mode could not be used with + * "raw data" input, since this module is bypassed in that case. However, + * we've left the code here for possible use in special applications. + */ +#undef FULL_MAIN_BUFFER_SUPPORTED + + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_c_main_controller pub; /* public fields */ + + JDIMENSION cur_iMCU_row; /* number of current iMCU row */ + JDIMENSION rowgroup_ctr; /* counts row groups received in iMCU row */ + boolean suspended; /* remember if we suspended output */ + J_BUF_MODE pass_mode; /* current operating mode */ + + /* If using just a strip buffer, this points to the entire set of buffers + * (we allocate one for each component). In the full-image case, this + * points to the currently accessible strips of the virtual arrays. + */ + JSAMPARRAY buffer[MAX_COMPONENTS]; + +#ifdef FULL_MAIN_BUFFER_SUPPORTED + /* If using full-image storage, this array holds pointers to virtual-array + * control blocks for each component. Unused if not full-image storage. + */ + jvirt_sarray_ptr whole_image[MAX_COMPONENTS]; +#endif +} my_main_controller; + +typedef my_main_controller * my_main_ptr; + + +/* Forward declarations */ +METHODDEF(void) process_data_simple_main + JPP((j_compress_ptr cinfo, JSAMPARRAY input_buf, + JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail)); +#ifdef FULL_MAIN_BUFFER_SUPPORTED +METHODDEF(void) process_data_buffer_main + JPP((j_compress_ptr cinfo, JSAMPARRAY input_buf, + JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail)); +#endif + + +/* + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_main (j_compress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + + /* Do nothing in raw-data mode. */ + if (cinfo->raw_data_in) + return; + + main->cur_iMCU_row = 0; /* initialize counters */ + main->rowgroup_ctr = 0; + main->suspended = FALSE; + main->pass_mode = pass_mode; /* save mode for use by process_data */ + + switch (pass_mode) { + case JBUF_PASS_THRU: +#ifdef FULL_MAIN_BUFFER_SUPPORTED + if (main->whole_image[0] != NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); +#endif + main->pub.process_data = process_data_simple_main; + break; +#ifdef FULL_MAIN_BUFFER_SUPPORTED + case JBUF_SAVE_SOURCE: + case JBUF_CRANK_DEST: + case JBUF_SAVE_AND_PASS: + if (main->whole_image[0] == NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + main->pub.process_data = process_data_buffer_main; + break; +#endif + default: + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + break; + } +} + + +/* + * Process some data. + * This routine handles the simple pass-through mode, + * where we have only a strip buffer. + */ + +METHODDEF(void) +process_data_simple_main (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, + JDIMENSION in_rows_avail) +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + + while (main->cur_iMCU_row < cinfo->total_iMCU_rows) { + /* Read input data if we haven't filled the main buffer yet */ + if (main->rowgroup_ctr < DCTSIZE) + (*cinfo->prep->pre_process_data) (cinfo, + input_buf, in_row_ctr, in_rows_avail, + main->buffer, &main->rowgroup_ctr, + (JDIMENSION) DCTSIZE); + + /* If we don't have a full iMCU row buffered, return to application for + * more data. Note that preprocessor will always pad to fill the iMCU row + * at the bottom of the image. + */ + if (main->rowgroup_ctr != DCTSIZE) + return; + + /* Send the completed row to the compressor */ + if (! (*cinfo->coef->compress_data) (cinfo, main->buffer)) { + /* If compressor did not consume the whole row, then we must need to + * suspend processing and return to the application. In this situation + * we pretend we didn't yet consume the last input row; otherwise, if + * it happened to be the last row of the image, the application would + * think we were done. + */ + if (! main->suspended) { + (*in_row_ctr)--; + main->suspended = TRUE; + } + return; + } + /* We did finish the row. Undo our little suspension hack if a previous + * call suspended; then mark the main buffer empty. + */ + if (main->suspended) { + (*in_row_ctr)++; + main->suspended = FALSE; + } + main->rowgroup_ctr = 0; + main->cur_iMCU_row++; + } +} + + +#ifdef FULL_MAIN_BUFFER_SUPPORTED + +/* + * Process some data. + * This routine handles all of the modes that use a full-size buffer. + */ + +METHODDEF(void) +process_data_buffer_main (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, + JDIMENSION in_rows_avail) +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + int ci; + jpeg_component_info *compptr; + boolean writing = (main->pass_mode != JBUF_CRANK_DEST); + + while (main->cur_iMCU_row < cinfo->total_iMCU_rows) { + /* Realign the virtual buffers if at the start of an iMCU row. */ + if (main->rowgroup_ctr == 0) { + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + main->buffer[ci] = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, main->whole_image[ci], + main->cur_iMCU_row * (compptr->v_samp_factor * DCTSIZE), + (JDIMENSION) (compptr->v_samp_factor * DCTSIZE), writing); + } + /* In a read pass, pretend we just read some source data. */ + if (! writing) { + *in_row_ctr += cinfo->max_v_samp_factor * DCTSIZE; + main->rowgroup_ctr = DCTSIZE; + } + } + + /* If a write pass, read input data until the current iMCU row is full. */ + /* Note: preprocessor will pad if necessary to fill the last iMCU row. */ + if (writing) { + (*cinfo->prep->pre_process_data) (cinfo, + input_buf, in_row_ctr, in_rows_avail, + main->buffer, &main->rowgroup_ctr, + (JDIMENSION) DCTSIZE); + /* Return to application if we need more data to fill the iMCU row. */ + if (main->rowgroup_ctr < DCTSIZE) + return; + } + + /* Emit data, unless this is a sink-only pass. */ + if (main->pass_mode != JBUF_SAVE_SOURCE) { + if (! (*cinfo->coef->compress_data) (cinfo, main->buffer)) { + /* If compressor did not consume the whole row, then we must need to + * suspend processing and return to the application. In this situation + * we pretend we didn't yet consume the last input row; otherwise, if + * it happened to be the last row of the image, the application would + * think we were done. + */ + if (! main->suspended) { + (*in_row_ctr)--; + main->suspended = TRUE; + } + return; + } + /* We did finish the row. Undo our little suspension hack if a previous + * call suspended; then mark the main buffer empty. + */ + if (main->suspended) { + (*in_row_ctr)++; + main->suspended = FALSE; + } + } + + /* If get here, we are done with this iMCU row. Mark buffer empty. */ + main->rowgroup_ctr = 0; + main->cur_iMCU_row++; + } +} + +#endif /* FULL_MAIN_BUFFER_SUPPORTED */ + + +/* + * Initialize main buffer controller. + */ + +GLOBAL(void) +jinit_c_main_controller (j_compress_ptr cinfo, boolean need_full_buffer) +{ + my_main_ptr main; + int ci; + jpeg_component_info *compptr; + + main = (my_main_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_main_controller)); + cinfo->main = (struct jpeg_c_main_controller *) main; + main->pub.start_pass = start_pass_main; + + /* We don't need to create a buffer in raw-data mode. */ + if (cinfo->raw_data_in) + return; + + /* Create the buffer. It holds downsampled data, so each component + * may be of a different size. + */ + if (need_full_buffer) { +#ifdef FULL_MAIN_BUFFER_SUPPORTED + /* Allocate a full-image virtual array for each component */ + /* Note we pad the bottom to a multiple of the iMCU height */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + main->whole_image[ci] = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + compptr->width_in_blocks * DCTSIZE, + (JDIMENSION) jround_up((long) compptr->height_in_blocks, + (long) compptr->v_samp_factor) * DCTSIZE, + (JDIMENSION) (compptr->v_samp_factor * DCTSIZE)); + } +#else + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); +#endif + } else { +#ifdef FULL_MAIN_BUFFER_SUPPORTED + main->whole_image[0] = NULL; /* flag for no virtual arrays */ +#endif + /* Allocate a strip buffer for each component */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + main->buffer[ci] = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + compptr->width_in_blocks * DCTSIZE, + (JDIMENSION) (compptr->v_samp_factor * DCTSIZE)); + } + } +} diff --git a/Build/source/extra/jpeg/jcmarker.c b/Build/source/extra/jpeg/jcmarker.c new file mode 100644 index 00000000000..3d1e6c6d524 --- /dev/null +++ b/Build/source/extra/jpeg/jcmarker.c @@ -0,0 +1,664 @@ +/* + * jcmarker.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to write JPEG datastream markers. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +typedef enum { /* JPEG marker codes */ + M_SOF0 = 0xc0, + M_SOF1 = 0xc1, + M_SOF2 = 0xc2, + M_SOF3 = 0xc3, + + M_SOF5 = 0xc5, + M_SOF6 = 0xc6, + M_SOF7 = 0xc7, + + M_JPG = 0xc8, + M_SOF9 = 0xc9, + M_SOF10 = 0xca, + M_SOF11 = 0xcb, + + M_SOF13 = 0xcd, + M_SOF14 = 0xce, + M_SOF15 = 0xcf, + + M_DHT = 0xc4, + + M_DAC = 0xcc, + + M_RST0 = 0xd0, + M_RST1 = 0xd1, + M_RST2 = 0xd2, + M_RST3 = 0xd3, + M_RST4 = 0xd4, + M_RST5 = 0xd5, + M_RST6 = 0xd6, + M_RST7 = 0xd7, + + M_SOI = 0xd8, + M_EOI = 0xd9, + M_SOS = 0xda, + M_DQT = 0xdb, + M_DNL = 0xdc, + M_DRI = 0xdd, + M_DHP = 0xde, + M_EXP = 0xdf, + + M_APP0 = 0xe0, + M_APP1 = 0xe1, + M_APP2 = 0xe2, + M_APP3 = 0xe3, + M_APP4 = 0xe4, + M_APP5 = 0xe5, + M_APP6 = 0xe6, + M_APP7 = 0xe7, + M_APP8 = 0xe8, + M_APP9 = 0xe9, + M_APP10 = 0xea, + M_APP11 = 0xeb, + M_APP12 = 0xec, + M_APP13 = 0xed, + M_APP14 = 0xee, + M_APP15 = 0xef, + + M_JPG0 = 0xf0, + M_JPG13 = 0xfd, + M_COM = 0xfe, + + M_TEM = 0x01, + + M_ERROR = 0x100 +} JPEG_MARKER; + + +/* Private state */ + +typedef struct { + struct jpeg_marker_writer pub; /* public fields */ + + unsigned int last_restart_interval; /* last DRI value emitted; 0 after SOI */ +} my_marker_writer; + +typedef my_marker_writer * my_marker_ptr; + + +/* + * Basic output routines. + * + * Note that we do not support suspension while writing a marker. + * Therefore, an application using suspension must ensure that there is + * enough buffer space for the initial markers (typ. 600-700 bytes) before + * calling jpeg_start_compress, and enough space to write the trailing EOI + * (a few bytes) before calling jpeg_finish_compress. Multipass compression + * modes are not supported at all with suspension, so those two are the only + * points where markers will be written. + */ + +LOCAL(void) +emit_byte (j_compress_ptr cinfo, int val) +/* Emit a byte */ +{ + struct jpeg_destination_mgr * dest = cinfo->dest; + + *(dest->next_output_byte)++ = (JOCTET) val; + if (--dest->free_in_buffer == 0) { + if (! (*dest->empty_output_buffer) (cinfo)) + ERREXIT(cinfo, JERR_CANT_SUSPEND); + } +} + + +LOCAL(void) +emit_marker (j_compress_ptr cinfo, JPEG_MARKER mark) +/* Emit a marker code */ +{ + emit_byte(cinfo, 0xFF); + emit_byte(cinfo, (int) mark); +} + + +LOCAL(void) +emit_2bytes (j_compress_ptr cinfo, int value) +/* Emit a 2-byte integer; these are always MSB first in JPEG files */ +{ + emit_byte(cinfo, (value >> 8) & 0xFF); + emit_byte(cinfo, value & 0xFF); +} + + +/* + * Routines to write specific marker types. + */ + +LOCAL(int) +emit_dqt (j_compress_ptr cinfo, int index) +/* Emit a DQT marker */ +/* Returns the precision used (0 = 8bits, 1 = 16bits) for baseline checking */ +{ + JQUANT_TBL * qtbl = cinfo->quant_tbl_ptrs[index]; + int prec; + int i; + + if (qtbl == NULL) + ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, index); + + prec = 0; + for (i = 0; i < DCTSIZE2; i++) { + if (qtbl->quantval[i] > 255) + prec = 1; + } + + if (! qtbl->sent_table) { + emit_marker(cinfo, M_DQT); + + emit_2bytes(cinfo, prec ? DCTSIZE2*2 + 1 + 2 : DCTSIZE2 + 1 + 2); + + emit_byte(cinfo, index + (prec<<4)); + + for (i = 0; i < DCTSIZE2; i++) { + /* The table entries must be emitted in zigzag order. */ + unsigned int qval = qtbl->quantval[jpeg_natural_order[i]]; + if (prec) + emit_byte(cinfo, (int) (qval >> 8)); + emit_byte(cinfo, (int) (qval & 0xFF)); + } + + qtbl->sent_table = TRUE; + } + + return prec; +} + + +LOCAL(void) +emit_dht (j_compress_ptr cinfo, int index, boolean is_ac) +/* Emit a DHT marker */ +{ + JHUFF_TBL * htbl; + int length, i; + + if (is_ac) { + htbl = cinfo->ac_huff_tbl_ptrs[index]; + index += 0x10; /* output index has AC bit set */ + } else { + htbl = cinfo->dc_huff_tbl_ptrs[index]; + } + + if (htbl == NULL) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, index); + + if (! htbl->sent_table) { + emit_marker(cinfo, M_DHT); + + length = 0; + for (i = 1; i <= 16; i++) + length += htbl->bits[i]; + + emit_2bytes(cinfo, length + 2 + 1 + 16); + emit_byte(cinfo, index); + + for (i = 1; i <= 16; i++) + emit_byte(cinfo, htbl->bits[i]); + + for (i = 0; i < length; i++) + emit_byte(cinfo, htbl->huffval[i]); + + htbl->sent_table = TRUE; + } +} + + +LOCAL(void) +emit_dac (j_compress_ptr cinfo) +/* Emit a DAC marker */ +/* Since the useful info is so small, we want to emit all the tables in */ +/* one DAC marker. Therefore this routine does its own scan of the table. */ +{ +#ifdef C_ARITH_CODING_SUPPORTED + char dc_in_use[NUM_ARITH_TBLS]; + char ac_in_use[NUM_ARITH_TBLS]; + int length, i; + jpeg_component_info *compptr; + + for (i = 0; i < NUM_ARITH_TBLS; i++) + dc_in_use[i] = ac_in_use[i] = 0; + + for (i = 0; i < cinfo->comps_in_scan; i++) { + compptr = cinfo->cur_comp_info[i]; + dc_in_use[compptr->dc_tbl_no] = 1; + ac_in_use[compptr->ac_tbl_no] = 1; + } + + length = 0; + for (i = 0; i < NUM_ARITH_TBLS; i++) + length += dc_in_use[i] + ac_in_use[i]; + + emit_marker(cinfo, M_DAC); + + emit_2bytes(cinfo, length*2 + 2); + + for (i = 0; i < NUM_ARITH_TBLS; i++) { + if (dc_in_use[i]) { + emit_byte(cinfo, i); + emit_byte(cinfo, cinfo->arith_dc_L[i] + (cinfo->arith_dc_U[i]<<4)); + } + if (ac_in_use[i]) { + emit_byte(cinfo, i + 0x10); + emit_byte(cinfo, cinfo->arith_ac_K[i]); + } + } +#endif /* C_ARITH_CODING_SUPPORTED */ +} + + +LOCAL(void) +emit_dri (j_compress_ptr cinfo) +/* Emit a DRI marker */ +{ + emit_marker(cinfo, M_DRI); + + emit_2bytes(cinfo, 4); /* fixed length */ + + emit_2bytes(cinfo, (int) cinfo->restart_interval); +} + + +LOCAL(void) +emit_sof (j_compress_ptr cinfo, JPEG_MARKER code) +/* Emit a SOF marker */ +{ + int ci; + jpeg_component_info *compptr; + + emit_marker(cinfo, code); + + emit_2bytes(cinfo, 3 * cinfo->num_components + 2 + 5 + 1); /* length */ + + /* Make sure image isn't bigger than SOF field can handle */ + if ((long) cinfo->image_height > 65535L || + (long) cinfo->image_width > 65535L) + ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) 65535); + + emit_byte(cinfo, cinfo->data_precision); + emit_2bytes(cinfo, (int) cinfo->image_height); + emit_2bytes(cinfo, (int) cinfo->image_width); + + emit_byte(cinfo, cinfo->num_components); + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + emit_byte(cinfo, compptr->component_id); + emit_byte(cinfo, (compptr->h_samp_factor << 4) + compptr->v_samp_factor); + emit_byte(cinfo, compptr->quant_tbl_no); + } +} + + +LOCAL(void) +emit_sos (j_compress_ptr cinfo) +/* Emit a SOS marker */ +{ + int i, td, ta; + jpeg_component_info *compptr; + + emit_marker(cinfo, M_SOS); + + emit_2bytes(cinfo, 2 * cinfo->comps_in_scan + 2 + 1 + 3); /* length */ + + emit_byte(cinfo, cinfo->comps_in_scan); + + for (i = 0; i < cinfo->comps_in_scan; i++) { + compptr = cinfo->cur_comp_info[i]; + emit_byte(cinfo, compptr->component_id); + td = compptr->dc_tbl_no; + ta = compptr->ac_tbl_no; + if (cinfo->progressive_mode) { + /* Progressive mode: only DC or only AC tables are used in one scan; + * furthermore, Huffman coding of DC refinement uses no table at all. + * We emit 0 for unused field(s); this is recommended by the P&M text + * but does not seem to be specified in the standard. + */ + if (cinfo->Ss == 0) { + ta = 0; /* DC scan */ + if (cinfo->Ah != 0 && !cinfo->arith_code) + td = 0; /* no DC table either */ + } else { + td = 0; /* AC scan */ + } + } + emit_byte(cinfo, (td << 4) + ta); + } + + emit_byte(cinfo, cinfo->Ss); + emit_byte(cinfo, cinfo->Se); + emit_byte(cinfo, (cinfo->Ah << 4) + cinfo->Al); +} + + +LOCAL(void) +emit_jfif_app0 (j_compress_ptr cinfo) +/* Emit a JFIF-compliant APP0 marker */ +{ + /* + * Length of APP0 block (2 bytes) + * Block ID (4 bytes - ASCII "JFIF") + * Zero byte (1 byte to terminate the ID string) + * Version Major, Minor (2 bytes - major first) + * Units (1 byte - 0x00 = none, 0x01 = inch, 0x02 = cm) + * Xdpu (2 bytes - dots per unit horizontal) + * Ydpu (2 bytes - dots per unit vertical) + * Thumbnail X size (1 byte) + * Thumbnail Y size (1 byte) + */ + + emit_marker(cinfo, M_APP0); + + emit_2bytes(cinfo, 2 + 4 + 1 + 2 + 1 + 2 + 2 + 1 + 1); /* length */ + + emit_byte(cinfo, 0x4A); /* Identifier: ASCII "JFIF" */ + emit_byte(cinfo, 0x46); + emit_byte(cinfo, 0x49); + emit_byte(cinfo, 0x46); + emit_byte(cinfo, 0); + emit_byte(cinfo, cinfo->JFIF_major_version); /* Version fields */ + emit_byte(cinfo, cinfo->JFIF_minor_version); + emit_byte(cinfo, cinfo->density_unit); /* Pixel size information */ + emit_2bytes(cinfo, (int) cinfo->X_density); + emit_2bytes(cinfo, (int) cinfo->Y_density); + emit_byte(cinfo, 0); /* No thumbnail image */ + emit_byte(cinfo, 0); +} + + +LOCAL(void) +emit_adobe_app14 (j_compress_ptr cinfo) +/* Emit an Adobe APP14 marker */ +{ + /* + * Length of APP14 block (2 bytes) + * Block ID (5 bytes - ASCII "Adobe") + * Version Number (2 bytes - currently 100) + * Flags0 (2 bytes - currently 0) + * Flags1 (2 bytes - currently 0) + * Color transform (1 byte) + * + * Although Adobe TN 5116 mentions Version = 101, all the Adobe files + * now in circulation seem to use Version = 100, so that's what we write. + * + * We write the color transform byte as 1 if the JPEG color space is + * YCbCr, 2 if it's YCCK, 0 otherwise. Adobe's definition has to do with + * whether the encoder performed a transformation, which is pretty useless. + */ + + emit_marker(cinfo, M_APP14); + + emit_2bytes(cinfo, 2 + 5 + 2 + 2 + 2 + 1); /* length */ + + emit_byte(cinfo, 0x41); /* Identifier: ASCII "Adobe" */ + emit_byte(cinfo, 0x64); + emit_byte(cinfo, 0x6F); + emit_byte(cinfo, 0x62); + emit_byte(cinfo, 0x65); + emit_2bytes(cinfo, 100); /* Version */ + emit_2bytes(cinfo, 0); /* Flags0 */ + emit_2bytes(cinfo, 0); /* Flags1 */ + switch (cinfo->jpeg_color_space) { + case JCS_YCbCr: + emit_byte(cinfo, 1); /* Color transform = 1 */ + break; + case JCS_YCCK: + emit_byte(cinfo, 2); /* Color transform = 2 */ + break; + default: + emit_byte(cinfo, 0); /* Color transform = 0 */ + break; + } +} + + +/* + * These routines allow writing an arbitrary marker with parameters. + * The only intended use is to emit COM or APPn markers after calling + * write_file_header and before calling write_frame_header. + * Other uses are not guaranteed to produce desirable results. + * Counting the parameter bytes properly is the caller's responsibility. + */ + +METHODDEF(void) +write_marker_header (j_compress_ptr cinfo, int marker, unsigned int datalen) +/* Emit an arbitrary marker header */ +{ + if (datalen > (unsigned int) 65533) /* safety check */ + ERREXIT(cinfo, JERR_BAD_LENGTH); + + emit_marker(cinfo, (JPEG_MARKER) marker); + + emit_2bytes(cinfo, (int) (datalen + 2)); /* total length */ +} + +METHODDEF(void) +write_marker_byte (j_compress_ptr cinfo, int val) +/* Emit one byte of marker parameters following write_marker_header */ +{ + emit_byte(cinfo, val); +} + + +/* + * Write datastream header. + * This consists of an SOI and optional APPn markers. + * We recommend use of the JFIF marker, but not the Adobe marker, + * when using YCbCr or grayscale data. The JFIF marker should NOT + * be used for any other JPEG colorspace. The Adobe marker is helpful + * to distinguish RGB, CMYK, and YCCK colorspaces. + * Note that an application can write additional header markers after + * jpeg_start_compress returns. + */ + +METHODDEF(void) +write_file_header (j_compress_ptr cinfo) +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + + emit_marker(cinfo, M_SOI); /* first the SOI */ + + /* SOI is defined to reset restart interval to 0 */ + marker->last_restart_interval = 0; + + if (cinfo->write_JFIF_header) /* next an optional JFIF APP0 */ + emit_jfif_app0(cinfo); + if (cinfo->write_Adobe_marker) /* next an optional Adobe APP14 */ + emit_adobe_app14(cinfo); +} + + +/* + * Write frame header. + * This consists of DQT and SOFn markers. + * Note that we do not emit the SOF until we have emitted the DQT(s). + * This avoids compatibility problems with incorrect implementations that + * try to error-check the quant table numbers as soon as they see the SOF. + */ + +METHODDEF(void) +write_frame_header (j_compress_ptr cinfo) +{ + int ci, prec; + boolean is_baseline; + jpeg_component_info *compptr; + + /* Emit DQT for each quantization table. + * Note that emit_dqt() suppresses any duplicate tables. + */ + prec = 0; + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + prec += emit_dqt(cinfo, compptr->quant_tbl_no); + } + /* now prec is nonzero iff there are any 16-bit quant tables. */ + + /* Check for a non-baseline specification. + * Note we assume that Huffman table numbers won't be changed later. + */ + if (cinfo->arith_code || cinfo->progressive_mode || + cinfo->data_precision != 8) { + is_baseline = FALSE; + } else { + is_baseline = TRUE; + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + if (compptr->dc_tbl_no > 1 || compptr->ac_tbl_no > 1) + is_baseline = FALSE; + } + if (prec && is_baseline) { + is_baseline = FALSE; + /* If it's baseline except for quantizer size, warn the user */ + TRACEMS(cinfo, 0, JTRC_16BIT_TABLES); + } + } + + /* Emit the proper SOF marker */ + if (cinfo->arith_code) { + emit_sof(cinfo, M_SOF9); /* SOF code for arithmetic coding */ + } else { + if (cinfo->progressive_mode) + emit_sof(cinfo, M_SOF2); /* SOF code for progressive Huffman */ + else if (is_baseline) + emit_sof(cinfo, M_SOF0); /* SOF code for baseline implementation */ + else + emit_sof(cinfo, M_SOF1); /* SOF code for non-baseline Huffman file */ + } +} + + +/* + * Write scan header. + * This consists of DHT or DAC markers, optional DRI, and SOS. + * Compressed data will be written following the SOS. + */ + +METHODDEF(void) +write_scan_header (j_compress_ptr cinfo) +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + int i; + jpeg_component_info *compptr; + + if (cinfo->arith_code) { + /* Emit arith conditioning info. We may have some duplication + * if the file has multiple scans, but it's so small it's hardly + * worth worrying about. + */ + emit_dac(cinfo); + } else { + /* Emit Huffman tables. + * Note that emit_dht() suppresses any duplicate tables. + */ + for (i = 0; i < cinfo->comps_in_scan; i++) { + compptr = cinfo->cur_comp_info[i]; + if (cinfo->progressive_mode) { + /* Progressive mode: only DC or only AC tables are used in one scan */ + if (cinfo->Ss == 0) { + if (cinfo->Ah == 0) /* DC needs no table for refinement scan */ + emit_dht(cinfo, compptr->dc_tbl_no, FALSE); + } else { + emit_dht(cinfo, compptr->ac_tbl_no, TRUE); + } + } else { + /* Sequential mode: need both DC and AC tables */ + emit_dht(cinfo, compptr->dc_tbl_no, FALSE); + emit_dht(cinfo, compptr->ac_tbl_no, TRUE); + } + } + } + + /* Emit DRI if required --- note that DRI value could change for each scan. + * We avoid wasting space with unnecessary DRIs, however. + */ + if (cinfo->restart_interval != marker->last_restart_interval) { + emit_dri(cinfo); + marker->last_restart_interval = cinfo->restart_interval; + } + + emit_sos(cinfo); +} + + +/* + * Write datastream trailer. + */ + +METHODDEF(void) +write_file_trailer (j_compress_ptr cinfo) +{ + emit_marker(cinfo, M_EOI); +} + + +/* + * Write an abbreviated table-specification datastream. + * This consists of SOI, DQT and DHT tables, and EOI. + * Any table that is defined and not marked sent_table = TRUE will be + * emitted. Note that all tables will be marked sent_table = TRUE at exit. + */ + +METHODDEF(void) +write_tables_only (j_compress_ptr cinfo) +{ + int i; + + emit_marker(cinfo, M_SOI); + + for (i = 0; i < NUM_QUANT_TBLS; i++) { + if (cinfo->quant_tbl_ptrs[i] != NULL) + (void) emit_dqt(cinfo, i); + } + + if (! cinfo->arith_code) { + for (i = 0; i < NUM_HUFF_TBLS; i++) { + if (cinfo->dc_huff_tbl_ptrs[i] != NULL) + emit_dht(cinfo, i, FALSE); + if (cinfo->ac_huff_tbl_ptrs[i] != NULL) + emit_dht(cinfo, i, TRUE); + } + } + + emit_marker(cinfo, M_EOI); +} + + +/* + * Initialize the marker writer module. + */ + +GLOBAL(void) +jinit_marker_writer (j_compress_ptr cinfo) +{ + my_marker_ptr marker; + + /* Create the subobject */ + marker = (my_marker_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_marker_writer)); + cinfo->marker = (struct jpeg_marker_writer *) marker; + /* Initialize method pointers */ + marker->pub.write_file_header = write_file_header; + marker->pub.write_frame_header = write_frame_header; + marker->pub.write_scan_header = write_scan_header; + marker->pub.write_file_trailer = write_file_trailer; + marker->pub.write_tables_only = write_tables_only; + marker->pub.write_marker_header = write_marker_header; + marker->pub.write_marker_byte = write_marker_byte; + /* Initialize private state */ + marker->last_restart_interval = 0; +} diff --git a/Build/source/extra/jpeg/jcmaster.c b/Build/source/extra/jpeg/jcmaster.c new file mode 100644 index 00000000000..aab4020b879 --- /dev/null +++ b/Build/source/extra/jpeg/jcmaster.c @@ -0,0 +1,590 @@ +/* + * jcmaster.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains master control logic for the JPEG compressor. + * These routines are concerned with parameter validation, initial setup, + * and inter-pass control (determining the number of passes and the work + * to be done in each pass). + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private state */ + +typedef enum { + main_pass, /* input data, also do first output step */ + huff_opt_pass, /* Huffman code optimization pass */ + output_pass /* data output pass */ +} c_pass_type; + +typedef struct { + struct jpeg_comp_master pub; /* public fields */ + + c_pass_type pass_type; /* the type of the current pass */ + + int pass_number; /* # of passes completed */ + int total_passes; /* total # of passes needed */ + + int scan_number; /* current index in scan_info[] */ +} my_comp_master; + +typedef my_comp_master * my_master_ptr; + + +/* + * Support routines that do various essential calculations. + */ + +LOCAL(void) +initial_setup (j_compress_ptr cinfo) +/* Do computations that are needed before master selection phase */ +{ + int ci; + jpeg_component_info *compptr; + long samplesperrow; + JDIMENSION jd_samplesperrow; + + /* Sanity check on image dimensions */ + if (cinfo->image_height <= 0 || cinfo->image_width <= 0 + || cinfo->num_components <= 0 || cinfo->input_components <= 0) + ERREXIT(cinfo, JERR_EMPTY_IMAGE); + + /* Make sure image isn't bigger than I can handle */ + if ((long) cinfo->image_height > (long) JPEG_MAX_DIMENSION || + (long) cinfo->image_width > (long) JPEG_MAX_DIMENSION) + ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION); + + /* Width of an input scanline must be representable as JDIMENSION. */ + samplesperrow = (long) cinfo->image_width * (long) cinfo->input_components; + jd_samplesperrow = (JDIMENSION) samplesperrow; + if ((long) jd_samplesperrow != samplesperrow) + ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); + + /* For now, precision must match compiled-in value... */ + if (cinfo->data_precision != BITS_IN_JSAMPLE) + ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); + + /* Check that number of components won't exceed internal array sizes */ + if (cinfo->num_components > MAX_COMPONENTS) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, + MAX_COMPONENTS); + + /* Compute maximum sampling factors; check factor validity */ + cinfo->max_h_samp_factor = 1; + cinfo->max_v_samp_factor = 1; + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR || + compptr->v_samp_factor<=0 || compptr->v_samp_factor>MAX_SAMP_FACTOR) + ERREXIT(cinfo, JERR_BAD_SAMPLING); + cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor, + compptr->h_samp_factor); + cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor, + compptr->v_samp_factor); + } + + /* Compute dimensions of components */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Fill in the correct component_index value; don't rely on application */ + compptr->component_index = ci; + /* For compression, we never do DCT scaling. */ + compptr->DCT_scaled_size = DCTSIZE; + /* Size in DCT blocks */ + compptr->width_in_blocks = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, + (long) (cinfo->max_h_samp_factor * DCTSIZE)); + compptr->height_in_blocks = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, + (long) (cinfo->max_v_samp_factor * DCTSIZE)); + /* Size in samples */ + compptr->downsampled_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, + (long) cinfo->max_h_samp_factor); + compptr->downsampled_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, + (long) cinfo->max_v_samp_factor); + /* Mark component needed (this flag isn't actually used for compression) */ + compptr->component_needed = TRUE; + } + + /* Compute number of fully interleaved MCU rows (number of times that + * main controller will call coefficient controller). + */ + cinfo->total_iMCU_rows = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, + (long) (cinfo->max_v_samp_factor*DCTSIZE)); +} + + +#ifdef C_MULTISCAN_FILES_SUPPORTED + +LOCAL(void) +validate_script (j_compress_ptr cinfo) +/* Verify that the scan script in cinfo->scan_info[] is valid; also + * determine whether it uses progressive JPEG, and set cinfo->progressive_mode. + */ +{ + const jpeg_scan_info * scanptr; + int scanno, ncomps, ci, coefi, thisi; + int Ss, Se, Ah, Al; + boolean component_sent[MAX_COMPONENTS]; +#ifdef C_PROGRESSIVE_SUPPORTED + int * last_bitpos_ptr; + int last_bitpos[MAX_COMPONENTS][DCTSIZE2]; + /* -1 until that coefficient has been seen; then last Al for it */ +#endif + + if (cinfo->num_scans <= 0) + ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, 0); + + /* For sequential JPEG, all scans must have Ss=0, Se=DCTSIZE2-1; + * for progressive JPEG, no scan can have this. + */ + scanptr = cinfo->scan_info; + if (scanptr->Ss != 0 || scanptr->Se != DCTSIZE2-1) { +#ifdef C_PROGRESSIVE_SUPPORTED + cinfo->progressive_mode = TRUE; + last_bitpos_ptr = & last_bitpos[0][0]; + for (ci = 0; ci < cinfo->num_components; ci++) + for (coefi = 0; coefi < DCTSIZE2; coefi++) + *last_bitpos_ptr++ = -1; +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else { + cinfo->progressive_mode = FALSE; + for (ci = 0; ci < cinfo->num_components; ci++) + component_sent[ci] = FALSE; + } + + for (scanno = 1; scanno <= cinfo->num_scans; scanptr++, scanno++) { + /* Validate component indexes */ + ncomps = scanptr->comps_in_scan; + if (ncomps <= 0 || ncomps > MAX_COMPS_IN_SCAN) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, ncomps, MAX_COMPS_IN_SCAN); + for (ci = 0; ci < ncomps; ci++) { + thisi = scanptr->component_index[ci]; + if (thisi < 0 || thisi >= cinfo->num_components) + ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno); + /* Components must appear in SOF order within each scan */ + if (ci > 0 && thisi <= scanptr->component_index[ci-1]) + ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno); + } + /* Validate progression parameters */ + Ss = scanptr->Ss; + Se = scanptr->Se; + Ah = scanptr->Ah; + Al = scanptr->Al; + if (cinfo->progressive_mode) { +#ifdef C_PROGRESSIVE_SUPPORTED + /* The JPEG spec simply gives the ranges 0..13 for Ah and Al, but that + * seems wrong: the upper bound ought to depend on data precision. + * Perhaps they really meant 0..N+1 for N-bit precision. + * Here we allow 0..10 for 8-bit data; Al larger than 10 results in + * out-of-range reconstructed DC values during the first DC scan, + * which might cause problems for some decoders. + */ +#if BITS_IN_JSAMPLE == 8 +#define MAX_AH_AL 10 +#else +#define MAX_AH_AL 13 +#endif + if (Ss < 0 || Ss >= DCTSIZE2 || Se < Ss || Se >= DCTSIZE2 || + Ah < 0 || Ah > MAX_AH_AL || Al < 0 || Al > MAX_AH_AL) + ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); + if (Ss == 0) { + if (Se != 0) /* DC and AC together not OK */ + ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); + } else { + if (ncomps != 1) /* AC scans must be for only one component */ + ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); + } + for (ci = 0; ci < ncomps; ci++) { + last_bitpos_ptr = & last_bitpos[scanptr->component_index[ci]][0]; + if (Ss != 0 && last_bitpos_ptr[0] < 0) /* AC without prior DC scan */ + ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); + for (coefi = Ss; coefi <= Se; coefi++) { + if (last_bitpos_ptr[coefi] < 0) { + /* first scan of this coefficient */ + if (Ah != 0) + ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); + } else { + /* not first scan */ + if (Ah != last_bitpos_ptr[coefi] || Al != Ah-1) + ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); + } + last_bitpos_ptr[coefi] = Al; + } + } +#endif + } else { + /* For sequential JPEG, all progression parameters must be these: */ + if (Ss != 0 || Se != DCTSIZE2-1 || Ah != 0 || Al != 0) + ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); + /* Make sure components are not sent twice */ + for (ci = 0; ci < ncomps; ci++) { + thisi = scanptr->component_index[ci]; + if (component_sent[thisi]) + ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno); + component_sent[thisi] = TRUE; + } + } + } + + /* Now verify that everything got sent. */ + if (cinfo->progressive_mode) { +#ifdef C_PROGRESSIVE_SUPPORTED + /* For progressive mode, we only check that at least some DC data + * got sent for each component; the spec does not require that all bits + * of all coefficients be transmitted. Would it be wiser to enforce + * transmission of all coefficient bits?? + */ + for (ci = 0; ci < cinfo->num_components; ci++) { + if (last_bitpos[ci][0] < 0) + ERREXIT(cinfo, JERR_MISSING_DATA); + } +#endif + } else { + for (ci = 0; ci < cinfo->num_components; ci++) { + if (! component_sent[ci]) + ERREXIT(cinfo, JERR_MISSING_DATA); + } + } +} + +#endif /* C_MULTISCAN_FILES_SUPPORTED */ + + +LOCAL(void) +select_scan_parameters (j_compress_ptr cinfo) +/* Set up the scan parameters for the current scan */ +{ + int ci; + +#ifdef C_MULTISCAN_FILES_SUPPORTED + if (cinfo->scan_info != NULL) { + /* Prepare for current scan --- the script is already validated */ + my_master_ptr master = (my_master_ptr) cinfo->master; + const jpeg_scan_info * scanptr = cinfo->scan_info + master->scan_number; + + cinfo->comps_in_scan = scanptr->comps_in_scan; + for (ci = 0; ci < scanptr->comps_in_scan; ci++) { + cinfo->cur_comp_info[ci] = + &cinfo->comp_info[scanptr->component_index[ci]]; + } + cinfo->Ss = scanptr->Ss; + cinfo->Se = scanptr->Se; + cinfo->Ah = scanptr->Ah; + cinfo->Al = scanptr->Al; + } + else +#endif + { + /* Prepare for single sequential-JPEG scan containing all components */ + if (cinfo->num_components > MAX_COMPS_IN_SCAN) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, + MAX_COMPS_IN_SCAN); + cinfo->comps_in_scan = cinfo->num_components; + for (ci = 0; ci < cinfo->num_components; ci++) { + cinfo->cur_comp_info[ci] = &cinfo->comp_info[ci]; + } + cinfo->Ss = 0; + cinfo->Se = DCTSIZE2-1; + cinfo->Ah = 0; + cinfo->Al = 0; + } +} + + +LOCAL(void) +per_scan_setup (j_compress_ptr cinfo) +/* Do computations that are needed before processing a JPEG scan */ +/* cinfo->comps_in_scan and cinfo->cur_comp_info[] are already set */ +{ + int ci, mcublks, tmp; + jpeg_component_info *compptr; + + if (cinfo->comps_in_scan == 1) { + + /* Noninterleaved (single-component) scan */ + compptr = cinfo->cur_comp_info[0]; + + /* Overall image size in MCUs */ + cinfo->MCUs_per_row = compptr->width_in_blocks; + cinfo->MCU_rows_in_scan = compptr->height_in_blocks; + + /* For noninterleaved scan, always one block per MCU */ + compptr->MCU_width = 1; + compptr->MCU_height = 1; + compptr->MCU_blocks = 1; + compptr->MCU_sample_width = DCTSIZE; + compptr->last_col_width = 1; + /* For noninterleaved scans, it is convenient to define last_row_height + * as the number of block rows present in the last iMCU row. + */ + tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + if (tmp == 0) tmp = compptr->v_samp_factor; + compptr->last_row_height = tmp; + + /* Prepare array describing MCU composition */ + cinfo->blocks_in_MCU = 1; + cinfo->MCU_membership[0] = 0; + + } else { + + /* Interleaved (multi-component) scan */ + if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan, + MAX_COMPS_IN_SCAN); + + /* Overall image size in MCUs */ + cinfo->MCUs_per_row = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, + (long) (cinfo->max_h_samp_factor*DCTSIZE)); + cinfo->MCU_rows_in_scan = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, + (long) (cinfo->max_v_samp_factor*DCTSIZE)); + + cinfo->blocks_in_MCU = 0; + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Sampling factors give # of blocks of component in each MCU */ + compptr->MCU_width = compptr->h_samp_factor; + compptr->MCU_height = compptr->v_samp_factor; + compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height; + compptr->MCU_sample_width = compptr->MCU_width * DCTSIZE; + /* Figure number of non-dummy blocks in last MCU column & row */ + tmp = (int) (compptr->width_in_blocks % compptr->MCU_width); + if (tmp == 0) tmp = compptr->MCU_width; + compptr->last_col_width = tmp; + tmp = (int) (compptr->height_in_blocks % compptr->MCU_height); + if (tmp == 0) tmp = compptr->MCU_height; + compptr->last_row_height = tmp; + /* Prepare array describing MCU composition */ + mcublks = compptr->MCU_blocks; + if (cinfo->blocks_in_MCU + mcublks > C_MAX_BLOCKS_IN_MCU) + ERREXIT(cinfo, JERR_BAD_MCU_SIZE); + while (mcublks-- > 0) { + cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci; + } + } + + } + + /* Convert restart specified in rows to actual MCU count. */ + /* Note that count must fit in 16 bits, so we provide limiting. */ + if (cinfo->restart_in_rows > 0) { + long nominal = (long) cinfo->restart_in_rows * (long) cinfo->MCUs_per_row; + cinfo->restart_interval = (unsigned int) MIN(nominal, 65535L); + } +} + + +/* + * Per-pass setup. + * This is called at the beginning of each pass. We determine which modules + * will be active during this pass and give them appropriate start_pass calls. + * We also set is_last_pass to indicate whether any more passes will be + * required. + */ + +METHODDEF(void) +prepare_for_pass (j_compress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + + switch (master->pass_type) { + case main_pass: + /* Initial pass: will collect input data, and do either Huffman + * optimization or data output for the first scan. + */ + select_scan_parameters(cinfo); + per_scan_setup(cinfo); + if (! cinfo->raw_data_in) { + (*cinfo->cconvert->start_pass) (cinfo); + (*cinfo->downsample->start_pass) (cinfo); + (*cinfo->prep->start_pass) (cinfo, JBUF_PASS_THRU); + } + (*cinfo->fdct->start_pass) (cinfo); + (*cinfo->entropy->start_pass) (cinfo, cinfo->optimize_coding); + (*cinfo->coef->start_pass) (cinfo, + (master->total_passes > 1 ? + JBUF_SAVE_AND_PASS : JBUF_PASS_THRU)); + (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); + if (cinfo->optimize_coding) { + /* No immediate data output; postpone writing frame/scan headers */ + master->pub.call_pass_startup = FALSE; + } else { + /* Will write frame/scan headers at first jpeg_write_scanlines call */ + master->pub.call_pass_startup = TRUE; + } + break; +#ifdef ENTROPY_OPT_SUPPORTED + case huff_opt_pass: + /* Do Huffman optimization for a scan after the first one. */ + select_scan_parameters(cinfo); + per_scan_setup(cinfo); + if (cinfo->Ss != 0 || cinfo->Ah == 0 || cinfo->arith_code) { + (*cinfo->entropy->start_pass) (cinfo, TRUE); + (*cinfo->coef->start_pass) (cinfo, JBUF_CRANK_DEST); + master->pub.call_pass_startup = FALSE; + break; + } + /* Special case: Huffman DC refinement scans need no Huffman table + * and therefore we can skip the optimization pass for them. + */ + master->pass_type = output_pass; + master->pass_number++; + /*FALLTHROUGH*/ +#endif + case output_pass: + /* Do a data-output pass. */ + /* We need not repeat per-scan setup if prior optimization pass did it. */ + if (! cinfo->optimize_coding) { + select_scan_parameters(cinfo); + per_scan_setup(cinfo); + } + (*cinfo->entropy->start_pass) (cinfo, FALSE); + (*cinfo->coef->start_pass) (cinfo, JBUF_CRANK_DEST); + /* We emit frame/scan headers now */ + if (master->scan_number == 0) + (*cinfo->marker->write_frame_header) (cinfo); + (*cinfo->marker->write_scan_header) (cinfo); + master->pub.call_pass_startup = FALSE; + break; + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + } + + master->pub.is_last_pass = (master->pass_number == master->total_passes-1); + + /* Set up progress monitor's pass info if present */ + if (cinfo->progress != NULL) { + cinfo->progress->completed_passes = master->pass_number; + cinfo->progress->total_passes = master->total_passes; + } +} + + +/* + * Special start-of-pass hook. + * This is called by jpeg_write_scanlines if call_pass_startup is TRUE. + * In single-pass processing, we need this hook because we don't want to + * write frame/scan headers during jpeg_start_compress; we want to let the + * application write COM markers etc. between jpeg_start_compress and the + * jpeg_write_scanlines loop. + * In multi-pass processing, this routine is not used. + */ + +METHODDEF(void) +pass_startup (j_compress_ptr cinfo) +{ + cinfo->master->call_pass_startup = FALSE; /* reset flag so call only once */ + + (*cinfo->marker->write_frame_header) (cinfo); + (*cinfo->marker->write_scan_header) (cinfo); +} + + +/* + * Finish up at end of pass. + */ + +METHODDEF(void) +finish_pass_master (j_compress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + + /* The entropy coder always needs an end-of-pass call, + * either to analyze statistics or to flush its output buffer. + */ + (*cinfo->entropy->finish_pass) (cinfo); + + /* Update state for next pass */ + switch (master->pass_type) { + case main_pass: + /* next pass is either output of scan 0 (after optimization) + * or output of scan 1 (if no optimization). + */ + master->pass_type = output_pass; + if (! cinfo->optimize_coding) + master->scan_number++; + break; + case huff_opt_pass: + /* next pass is always output of current scan */ + master->pass_type = output_pass; + break; + case output_pass: + /* next pass is either optimization or output of next scan */ + if (cinfo->optimize_coding) + master->pass_type = huff_opt_pass; + master->scan_number++; + break; + } + + master->pass_number++; +} + + +/* + * Initialize master compression control. + */ + +GLOBAL(void) +jinit_c_master_control (j_compress_ptr cinfo, boolean transcode_only) +{ + my_master_ptr master; + + master = (my_master_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_comp_master)); + cinfo->master = (struct jpeg_comp_master *) master; + master->pub.prepare_for_pass = prepare_for_pass; + master->pub.pass_startup = pass_startup; + master->pub.finish_pass = finish_pass_master; + master->pub.is_last_pass = FALSE; + + /* Validate parameters, determine derived values */ + initial_setup(cinfo); + + if (cinfo->scan_info != NULL) { +#ifdef C_MULTISCAN_FILES_SUPPORTED + validate_script(cinfo); +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else { + cinfo->progressive_mode = FALSE; + cinfo->num_scans = 1; + } + + if (cinfo->progressive_mode) /* TEMPORARY HACK ??? */ + cinfo->optimize_coding = TRUE; /* assume default tables no good for progressive mode */ + + /* Initialize my private state */ + if (transcode_only) { + /* no main pass in transcoding */ + if (cinfo->optimize_coding) + master->pass_type = huff_opt_pass; + else + master->pass_type = output_pass; + } else { + /* for normal compression, first pass is always this type: */ + master->pass_type = main_pass; + } + master->scan_number = 0; + master->pass_number = 0; + if (cinfo->optimize_coding) + master->total_passes = cinfo->num_scans * 2; + else + master->total_passes = cinfo->num_scans; +} diff --git a/Build/source/extra/jpeg/jcomapi.c b/Build/source/extra/jpeg/jcomapi.c new file mode 100644 index 00000000000..9b1fa7568a6 --- /dev/null +++ b/Build/source/extra/jpeg/jcomapi.c @@ -0,0 +1,106 @@ +/* + * jcomapi.c + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains application interface routines that are used for both + * compression and decompression. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * Abort processing of a JPEG compression or decompression operation, + * but don't destroy the object itself. + * + * For this, we merely clean up all the nonpermanent memory pools. + * Note that temp files (virtual arrays) are not allowed to belong to + * the permanent pool, so we will be able to close all temp files here. + * Closing a data source or destination, if necessary, is the application's + * responsibility. + */ + +GLOBAL(void) +jpeg_abort (j_common_ptr cinfo) +{ + int pool; + + /* Do nothing if called on a not-initialized or destroyed JPEG object. */ + if (cinfo->mem == NULL) + return; + + /* Releasing pools in reverse order might help avoid fragmentation + * with some (brain-damaged) malloc libraries. + */ + for (pool = JPOOL_NUMPOOLS-1; pool > JPOOL_PERMANENT; pool--) { + (*cinfo->mem->free_pool) (cinfo, pool); + } + + /* Reset overall state for possible reuse of object */ + if (cinfo->is_decompressor) { + cinfo->global_state = DSTATE_START; + /* Try to keep application from accessing now-deleted marker list. + * A bit kludgy to do it here, but this is the most central place. + */ + ((j_decompress_ptr) cinfo)->marker_list = NULL; + } else { + cinfo->global_state = CSTATE_START; + } +} + + +/* + * Destruction of a JPEG object. + * + * Everything gets deallocated except the master jpeg_compress_struct itself + * and the error manager struct. Both of these are supplied by the application + * and must be freed, if necessary, by the application. (Often they are on + * the stack and so don't need to be freed anyway.) + * Closing a data source or destination, if necessary, is the application's + * responsibility. + */ + +GLOBAL(void) +jpeg_destroy (j_common_ptr cinfo) +{ + /* We need only tell the memory manager to release everything. */ + /* NB: mem pointer is NULL if memory mgr failed to initialize. */ + if (cinfo->mem != NULL) + (*cinfo->mem->self_destruct) (cinfo); + cinfo->mem = NULL; /* be safe if jpeg_destroy is called twice */ + cinfo->global_state = 0; /* mark it destroyed */ +} + + +/* + * Convenience routines for allocating quantization and Huffman tables. + * (Would jutils.c be a more reasonable place to put these?) + */ + +GLOBAL(JQUANT_TBL *) +jpeg_alloc_quant_table (j_common_ptr cinfo) +{ + JQUANT_TBL *tbl; + + tbl = (JQUANT_TBL *) + (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JQUANT_TBL)); + tbl->sent_table = FALSE; /* make sure this is false in any new table */ + return tbl; +} + + +GLOBAL(JHUFF_TBL *) +jpeg_alloc_huff_table (j_common_ptr cinfo) +{ + JHUFF_TBL *tbl; + + tbl = (JHUFF_TBL *) + (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JHUFF_TBL)); + tbl->sent_table = FALSE; /* make sure this is false in any new table */ + return tbl; +} diff --git a/Build/source/extra/jpeg/jconfig.bcc b/Build/source/extra/jpeg/jconfig.bcc new file mode 100644 index 00000000000..c6c53ff63a7 --- /dev/null +++ b/Build/source/extra/jpeg/jconfig.bcc @@ -0,0 +1,48 @@ +/* jconfig.bcc --- jconfig.h for Borland C (Turbo C) on MS-DOS or OS/2. */ +/* see jconfig.doc for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#ifdef __MSDOS__ +#define NEED_FAR_POINTERS /* for small or medium memory model */ +#endif +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN /* this assumes you have -w-stu in CFLAGS */ + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#ifdef __MSDOS__ +#define USE_MSDOS_MEMMGR /* Define this if you use jmemdos.c */ +#define MAX_ALLOC_CHUNK 65520L /* Maximum request to malloc() */ +#define USE_FMEM /* Borland has _fmemcpy() and _fmemset() */ +#endif + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE +#define USE_SETMODE /* Borland has setmode() */ +#ifdef __MSDOS__ +#define NEED_SIGNAL_CATCHER /* Define this if you use jmemdos.c */ +#endif +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/extra/jpeg/jconfig.cfg b/Build/source/extra/jpeg/jconfig.cfg new file mode 100644 index 00000000000..36a04fa8402 --- /dev/null +++ b/Build/source/extra/jpeg/jconfig.cfg @@ -0,0 +1,44 @@ +/* jconfig.cfg --- source file edited by configure script */ +/* see jconfig.doc for explanations */ + +#undef HAVE_PROTOTYPES +#undef HAVE_UNSIGNED_CHAR +#undef HAVE_UNSIGNED_SHORT +#undef void +#undef const +#undef CHAR_IS_UNSIGNED +#undef HAVE_STDDEF_H +#undef HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +/* Define this if you get warnings about undefined structures. */ +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED +#undef INLINE +/* These are for configuring the JPEG memory manager. */ +#undef DEFAULT_MAX_MEM +#undef NO_MKTEMP + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#undef TWO_FILE_COMMANDLINE +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE + +/* Define this if you want percent-done progress reports from cjpeg/djpeg. */ +#undef PROGRESS_REPORT + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/extra/jpeg/jconfig.dj b/Build/source/extra/jpeg/jconfig.dj new file mode 100644 index 00000000000..f759a9dbd6b --- /dev/null +++ b/Build/source/extra/jpeg/jconfig.dj @@ -0,0 +1,38 @@ +/* jconfig.dj --- jconfig.h for DJGPP (Delorie's GNU C port) on MS-DOS. */ +/* see jconfig.doc for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS /* DJGPP uses flat 32-bit addressing */ +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#undef TWO_FILE_COMMANDLINE /* optional */ +#define USE_SETMODE /* Needed to make one-file style work in DJGPP */ +#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */ +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/extra/jpeg/jconfig.doc b/Build/source/extra/jpeg/jconfig.doc new file mode 100644 index 00000000000..c18d1c064b7 --- /dev/null +++ b/Build/source/extra/jpeg/jconfig.doc @@ -0,0 +1,155 @@ +/* + * jconfig.doc + * + * Copyright (C) 1991-1994, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file documents the configuration options that are required to + * customize the JPEG software for a particular system. + * + * The actual configuration options for a particular installation are stored + * in jconfig.h. On many machines, jconfig.h can be generated automatically + * or copied from one of the "canned" jconfig files that we supply. But if + * you need to generate a jconfig.h file by hand, this file tells you how. + * + * DO NOT EDIT THIS FILE --- IT WON'T ACCOMPLISH ANYTHING. + * EDIT A COPY NAMED JCONFIG.H. + */ + + +/* + * These symbols indicate the properties of your machine or compiler. + * #define the symbol if yes, #undef it if no. + */ + +/* Does your compiler support function prototypes? + * (If not, you also need to use ansi2knr, see install.doc) + */ +#define HAVE_PROTOTYPES + +/* Does your compiler support the declaration "unsigned char" ? + * How about "unsigned short" ? + */ +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT + +/* Define "void" as "char" if your compiler doesn't know about type void. + * NOTE: be sure to define void such that "void *" represents the most general + * pointer type, e.g., that returned by malloc(). + */ +/* #define void char */ + +/* Define "const" as empty if your compiler doesn't know the "const" keyword. + */ +/* #define const */ + +/* Define this if an ordinary "char" type is unsigned. + * If you're not sure, leaving it undefined will work at some cost in speed. + * If you defined HAVE_UNSIGNED_CHAR then the speed difference is minimal. + */ +#undef CHAR_IS_UNSIGNED + +/* Define this if your system has an ANSI-conforming file. + */ +#define HAVE_STDDEF_H + +/* Define this if your system has an ANSI-conforming file. + */ +#define HAVE_STDLIB_H + +/* Define this if your system does not have an ANSI/SysV , + * but does have a BSD-style . + */ +#undef NEED_BSD_STRINGS + +/* Define this if your system does not provide typedef size_t in any of the + * ANSI-standard places (stddef.h, stdlib.h, or stdio.h), but places it in + * instead. + */ +#undef NEED_SYS_TYPES_H + +/* For 80x86 machines, you need to define NEED_FAR_POINTERS, + * unless you are using a large-data memory model or 80386 flat-memory mode. + * On less brain-damaged CPUs this symbol must not be defined. + * (Defining this symbol causes large data structures to be referenced through + * "far" pointers and to be allocated with a special version of malloc.) + */ +#undef NEED_FAR_POINTERS + +/* Define this if your linker needs global names to be unique in less + * than the first 15 characters. + */ +#undef NEED_SHORT_EXTERNAL_NAMES + +/* Although a real ANSI C compiler can deal perfectly well with pointers to + * unspecified structures (see "incomplete types" in the spec), a few pre-ANSI + * and pseudo-ANSI compilers get confused. To keep one of these bozos happy, + * define INCOMPLETE_TYPES_BROKEN. This is not recommended unless you + * actually get "missing structure definition" warnings or errors while + * compiling the JPEG code. + */ +#undef INCOMPLETE_TYPES_BROKEN + + +/* + * The following options affect code selection within the JPEG library, + * but they don't need to be visible to applications using the library. + * To minimize application namespace pollution, the symbols won't be + * defined unless JPEG_INTERNALS has been defined. + */ + +#ifdef JPEG_INTERNALS + +/* Define this if your compiler implements ">>" on signed values as a logical + * (unsigned) shift; leave it undefined if ">>" is a signed (arithmetic) shift, + * which is the normal and rational definition. + */ +#undef RIGHT_SHIFT_IS_UNSIGNED + + +#endif /* JPEG_INTERNALS */ + + +/* + * The remaining options do not affect the JPEG library proper, + * but only the sample applications cjpeg/djpeg (see cjpeg.c, djpeg.c). + * Other applications can ignore these. + */ + +#ifdef JPEG_CJPEG_DJPEG + +/* These defines indicate which image (non-JPEG) file formats are allowed. */ + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +/* Define this if you want to name both input and output files on the command + * line, rather than using stdout and optionally stdin. You MUST do this if + * your system can't cope with binary I/O to stdin/stdout. See comments at + * head of cjpeg.c or djpeg.c. + */ +#undef TWO_FILE_COMMANDLINE + +/* Define this if your system needs explicit cleanup of temporary files. + * This is crucial under MS-DOS, where the temporary "files" may be areas + * of extended memory; on most other systems it's not as important. + */ +#undef NEED_SIGNAL_CATCHER + +/* By default, we open image files with fopen(...,"rb") or fopen(...,"wb"). + * This is necessary on systems that distinguish text files from binary files, + * and is harmless on most systems that don't. If you have one of the rare + * systems that complains about the "b" spec, define this symbol. + */ +#undef DONT_USE_B_MODE + +/* Define this if you want percent-done progress reports from cjpeg/djpeg. + */ +#undef PROGRESS_REPORT + + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/extra/jpeg/jconfig.mac b/Build/source/extra/jpeg/jconfig.mac new file mode 100644 index 00000000000..0de3efe24d7 --- /dev/null +++ b/Build/source/extra/jpeg/jconfig.mac @@ -0,0 +1,43 @@ +/* jconfig.mac --- jconfig.h for CodeWarrior on Apple Macintosh */ +/* see jconfig.doc for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#define USE_MAC_MEMMGR /* Define this if you use jmemmac.c */ + +#define ALIGN_TYPE long /* Needed for 680x0 Macs */ + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define USE_CCOMMAND /* Command line reader for Macintosh */ +#define TWO_FILE_COMMANDLINE /* Binary I/O thru stdin/stdout doesn't work */ + +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/extra/jpeg/jconfig.manx b/Build/source/extra/jpeg/jconfig.manx new file mode 100644 index 00000000000..6dd0d008ea8 --- /dev/null +++ b/Build/source/extra/jpeg/jconfig.manx @@ -0,0 +1,43 @@ +/* jconfig.manx --- jconfig.h for Amiga systems using Manx Aztec C ver 5.x. */ +/* see jconfig.doc for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#define TEMP_DIRECTORY "JPEGTMP:" /* recommended setting for Amiga */ + +#define SHORTxSHORT_32 /* produces better DCT code with Aztec C */ + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE +#define NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#define signal_catcher _abort /* hack for Aztec C naming requirements */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/extra/jpeg/jconfig.mc6 b/Build/source/extra/jpeg/jconfig.mc6 new file mode 100644 index 00000000000..c55082df435 --- /dev/null +++ b/Build/source/extra/jpeg/jconfig.mc6 @@ -0,0 +1,52 @@ +/* jconfig.mc6 --- jconfig.h for Microsoft C on MS-DOS, version 6.00A & up. */ +/* see jconfig.doc for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#define NEED_FAR_POINTERS /* for small or medium memory model */ +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#define USE_MSDOS_MEMMGR /* Define this if you use jmemdos.c */ + +#define MAX_ALLOC_CHUNK 65520L /* Maximum request to malloc() */ + +#define USE_FMEM /* Microsoft has _fmemcpy() and _fmemset() */ + +#define NEED_FHEAPMIN /* far heap management routines are broken */ + +#define SHORTxLCONST_32 /* enable compiler-specific DCT optimization */ +/* Note: the above define is known to improve the code with Microsoft C 6.00A. + * I do not know whether it is good for later compiler versions. + * Please report any info on this point to jpeg-info@uunet.uu.net. + */ + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE +#define USE_SETMODE /* Microsoft has setmode() */ +#define NEED_SIGNAL_CATCHER /* Define this if you use jmemdos.c */ +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/extra/jpeg/jconfig.sas b/Build/source/extra/jpeg/jconfig.sas new file mode 100644 index 00000000000..efdac22294f --- /dev/null +++ b/Build/source/extra/jpeg/jconfig.sas @@ -0,0 +1,43 @@ +/* jconfig.sas --- jconfig.h for Amiga systems using SAS C 6.0 and up. */ +/* see jconfig.doc for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#define TEMP_DIRECTORY "JPEGTMP:" /* recommended setting for Amiga */ + +#define NO_MKTEMP /* SAS C doesn't have mktemp() */ + +#define SHORTxSHORT_32 /* produces better DCT code with SAS C */ + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE +#define NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/extra/jpeg/jconfig.st b/Build/source/extra/jpeg/jconfig.st new file mode 100644 index 00000000000..4421b7a1a67 --- /dev/null +++ b/Build/source/extra/jpeg/jconfig.st @@ -0,0 +1,42 @@ +/* jconfig.st --- jconfig.h for Atari ST/STE/TT using Pure C or Turbo C. */ +/* see jconfig.doc for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +#define INCOMPLETE_TYPES_BROKEN /* suppress undefined-structure warnings */ + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#define ALIGN_TYPE long /* apparently double is a weird size? */ + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE /* optional -- undef if you like Unix style */ +/* Note: if you undef TWO_FILE_COMMANDLINE, you may need to define + * USE_SETMODE. Some Atari compilers require it, some do not. + */ +#define NEED_SIGNAL_CATCHER /* needed if you use jmemname.c */ +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/extra/jpeg/jconfig.vc b/Build/source/extra/jpeg/jconfig.vc new file mode 100644 index 00000000000..2b42dcd949d --- /dev/null +++ b/Build/source/extra/jpeg/jconfig.vc @@ -0,0 +1,71 @@ +/* jconfig.vc --- jconfig.h for Microsoft Visual C++ on Windows 95 or NT. */ +/* see jconfig.doc for explanations */ + +#if defined(WIN32) +# ifdef JPEG_DLL +# ifdef MAKE_JPEG_DLL +# define JPEGDLL __declspec( dllexport) +# else +# define JPEGDLL __declspec( dllimport) +# endif +# else +# define JPEGDLL +# endif +#else /* ! WIN32 */ +# define JPEGDLL +#endif + +#ifdef FPTEX +#include +#endif + +#ifndef HAVE_PROTOTYPES +# define HAVE_PROTOTYPES +#endif + +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#ifndef HAVE_STDDEF_H +# define HAVE_STDDEF_H +#endif +#ifndef HAVE_STDLIB_H +# define HAVE_STDLIB_H +#endif +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS /* we presume a 32-bit flat memory model */ +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +/* Define "boolean" as unsigned char, not int, per Windows custom */ +#ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ +typedef unsigned char boolean; +#endif +#ifndef HAVE_BOOLEAN +#define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ +#endif + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE /* optional */ +#define USE_SETMODE /* Microsoft has setmode() */ +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/extra/jpeg/jconfig.vms b/Build/source/extra/jpeg/jconfig.vms new file mode 100644 index 00000000000..55a6ffba5cd --- /dev/null +++ b/Build/source/extra/jpeg/jconfig.vms @@ -0,0 +1,37 @@ +/* jconfig.vms --- jconfig.h for use on Digital VMS. */ +/* see jconfig.doc for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#define TWO_FILE_COMMANDLINE /* Needed on VMS */ +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/extra/jpeg/jconfig.wat b/Build/source/extra/jpeg/jconfig.wat new file mode 100644 index 00000000000..6cc545baeea --- /dev/null +++ b/Build/source/extra/jpeg/jconfig.wat @@ -0,0 +1,38 @@ +/* jconfig.wat --- jconfig.h for Watcom C/C++ on MS-DOS or OS/2. */ +/* see jconfig.doc for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +/* #define void char */ +/* #define const */ +#define CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS /* Watcom uses flat 32-bit addressing */ +#undef NEED_SHORT_EXTERNAL_NAMES +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#undef TWO_FILE_COMMANDLINE /* optional */ +#define USE_SETMODE /* Needed to make one-file style work in Watcom */ +#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */ +#undef DONT_USE_B_MODE +#undef PROGRESS_REPORT /* optional */ + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/extra/jpeg/jcparam.c b/Build/source/extra/jpeg/jcparam.c new file mode 100644 index 00000000000..6fc48f53653 --- /dev/null +++ b/Build/source/extra/jpeg/jcparam.c @@ -0,0 +1,610 @@ +/* + * jcparam.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains optional default-setting code for the JPEG compressor. + * Applications do not have to use this file, but those that don't use it + * must know a lot more about the innards of the JPEG code. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * Quantization table setup routines + */ + +GLOBAL(void) +jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl, + const unsigned int *basic_table, + int scale_factor, boolean force_baseline) +/* Define a quantization table equal to the basic_table times + * a scale factor (given as a percentage). + * If force_baseline is TRUE, the computed quantization table entries + * are limited to 1..255 for JPEG baseline compatibility. + */ +{ + JQUANT_TBL ** qtblptr; + int i; + long temp; + + /* Safety check to ensure start_compress not called yet. */ + if (cinfo->global_state != CSTATE_START) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + if (which_tbl < 0 || which_tbl >= NUM_QUANT_TBLS) + ERREXIT1(cinfo, JERR_DQT_INDEX, which_tbl); + + qtblptr = & cinfo->quant_tbl_ptrs[which_tbl]; + + if (*qtblptr == NULL) + *qtblptr = jpeg_alloc_quant_table((j_common_ptr) cinfo); + + for (i = 0; i < DCTSIZE2; i++) { + temp = ((long) basic_table[i] * scale_factor + 50L) / 100L; + /* limit the values to the valid range */ + if (temp <= 0L) temp = 1L; + if (temp > 32767L) temp = 32767L; /* max quantizer needed for 12 bits */ + if (force_baseline && temp > 255L) + temp = 255L; /* limit to baseline range if requested */ + (*qtblptr)->quantval[i] = (UINT16) temp; + } + + /* Initialize sent_table FALSE so table will be written to JPEG file. */ + (*qtblptr)->sent_table = FALSE; +} + + +GLOBAL(void) +jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor, + boolean force_baseline) +/* Set or change the 'quality' (quantization) setting, using default tables + * and a straight percentage-scaling quality scale. In most cases it's better + * to use jpeg_set_quality (below); this entry point is provided for + * applications that insist on a linear percentage scaling. + */ +{ + /* These are the sample quantization tables given in JPEG spec section K.1. + * The spec says that the values given produce "good" quality, and + * when divided by 2, "very good" quality. + */ + static const unsigned int std_luminance_quant_tbl[DCTSIZE2] = { + 16, 11, 10, 16, 24, 40, 51, 61, + 12, 12, 14, 19, 26, 58, 60, 55, + 14, 13, 16, 24, 40, 57, 69, 56, + 14, 17, 22, 29, 51, 87, 80, 62, + 18, 22, 37, 56, 68, 109, 103, 77, + 24, 35, 55, 64, 81, 104, 113, 92, + 49, 64, 78, 87, 103, 121, 120, 101, + 72, 92, 95, 98, 112, 100, 103, 99 + }; + static const unsigned int std_chrominance_quant_tbl[DCTSIZE2] = { + 17, 18, 24, 47, 99, 99, 99, 99, + 18, 21, 26, 66, 99, 99, 99, 99, + 24, 26, 56, 99, 99, 99, 99, 99, + 47, 66, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99 + }; + + /* Set up two quantization tables using the specified scaling */ + jpeg_add_quant_table(cinfo, 0, std_luminance_quant_tbl, + scale_factor, force_baseline); + jpeg_add_quant_table(cinfo, 1, std_chrominance_quant_tbl, + scale_factor, force_baseline); +} + + +GLOBAL(int) +jpeg_quality_scaling (int quality) +/* Convert a user-specified quality rating to a percentage scaling factor + * for an underlying quantization table, using our recommended scaling curve. + * The input 'quality' factor should be 0 (terrible) to 100 (very good). + */ +{ + /* Safety limit on quality factor. Convert 0 to 1 to avoid zero divide. */ + if (quality <= 0) quality = 1; + if (quality > 100) quality = 100; + + /* The basic table is used as-is (scaling 100) for a quality of 50. + * Qualities 50..100 are converted to scaling percentage 200 - 2*Q; + * note that at Q=100 the scaling is 0, which will cause jpeg_add_quant_table + * to make all the table entries 1 (hence, minimum quantization loss). + * Qualities 1..50 are converted to scaling percentage 5000/Q. + */ + if (quality < 50) + quality = 5000 / quality; + else + quality = 200 - quality*2; + + return quality; +} + + +GLOBAL(void) +jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline) +/* Set or change the 'quality' (quantization) setting, using default tables. + * This is the standard quality-adjusting entry point for typical user + * interfaces; only those who want detailed control over quantization tables + * would use the preceding three routines directly. + */ +{ + /* Convert user 0-100 rating to percentage scaling */ + quality = jpeg_quality_scaling(quality); + + /* Set up standard quality tables */ + jpeg_set_linear_quality(cinfo, quality, force_baseline); +} + + +/* + * Huffman table setup routines + */ + +LOCAL(void) +add_huff_table (j_compress_ptr cinfo, + JHUFF_TBL **htblptr, const UINT8 *bits, const UINT8 *val) +/* Define a Huffman table */ +{ + int nsymbols, len; + + if (*htblptr == NULL) + *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); + + /* Copy the number-of-symbols-of-each-code-length counts */ + MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits)); + + /* Validate the counts. We do this here mainly so we can copy the right + * number of symbols from the val[] array, without risking marching off + * the end of memory. jchuff.c will do a more thorough test later. + */ + nsymbols = 0; + for (len = 1; len <= 16; len++) + nsymbols += bits[len]; + if (nsymbols < 1 || nsymbols > 256) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + + MEMCOPY((*htblptr)->huffval, val, nsymbols * SIZEOF(UINT8)); + + /* Initialize sent_table FALSE so table will be written to JPEG file. */ + (*htblptr)->sent_table = FALSE; +} + + +LOCAL(void) +std_huff_tables (j_compress_ptr cinfo) +/* Set up the standard Huffman tables (cf. JPEG standard section K.3) */ +/* IMPORTANT: these are only valid for 8-bit data precision! */ +{ + static const UINT8 bits_dc_luminance[17] = + { /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }; + static const UINT8 val_dc_luminance[] = + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; + + static const UINT8 bits_dc_chrominance[17] = + { /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }; + static const UINT8 val_dc_chrominance[] = + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; + + static const UINT8 bits_ac_luminance[17] = + { /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d }; + static const UINT8 val_ac_luminance[] = + { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, + 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, + 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, + 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, + 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, + 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, + 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, + 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, + 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, + 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, + 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, + 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, + 0xf9, 0xfa }; + + static const UINT8 bits_ac_chrominance[17] = + { /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 }; + static const UINT8 val_ac_chrominance[] = + { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, + 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, + 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, + 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, + 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, + 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, + 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, + 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, + 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, + 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, + 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, + 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, + 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, + 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, + 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, + 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, + 0xf9, 0xfa }; + + add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[0], + bits_dc_luminance, val_dc_luminance); + add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[0], + bits_ac_luminance, val_ac_luminance); + add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[1], + bits_dc_chrominance, val_dc_chrominance); + add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[1], + bits_ac_chrominance, val_ac_chrominance); +} + + +/* + * Default parameter setup for compression. + * + * Applications that don't choose to use this routine must do their + * own setup of all these parameters. Alternately, you can call this + * to establish defaults and then alter parameters selectively. This + * is the recommended approach since, if we add any new parameters, + * your code will still work (they'll be set to reasonable defaults). + */ + +GLOBAL(void) +jpeg_set_defaults (j_compress_ptr cinfo) +{ + int i; + + /* Safety check to ensure start_compress not called yet. */ + if (cinfo->global_state != CSTATE_START) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + /* Allocate comp_info array large enough for maximum component count. + * Array is made permanent in case application wants to compress + * multiple images at same param settings. + */ + if (cinfo->comp_info == NULL) + cinfo->comp_info = (jpeg_component_info *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + MAX_COMPONENTS * SIZEOF(jpeg_component_info)); + + /* Initialize everything not dependent on the color space */ + + cinfo->data_precision = BITS_IN_JSAMPLE; + /* Set up two quantization tables using default quality of 75 */ + jpeg_set_quality(cinfo, 75, TRUE); + /* Set up two Huffman tables */ + std_huff_tables(cinfo); + + /* Initialize default arithmetic coding conditioning */ + for (i = 0; i < NUM_ARITH_TBLS; i++) { + cinfo->arith_dc_L[i] = 0; + cinfo->arith_dc_U[i] = 1; + cinfo->arith_ac_K[i] = 5; + } + + /* Default is no multiple-scan output */ + cinfo->scan_info = NULL; + cinfo->num_scans = 0; + + /* Expect normal source image, not raw downsampled data */ + cinfo->raw_data_in = FALSE; + + /* Use Huffman coding, not arithmetic coding, by default */ + cinfo->arith_code = FALSE; + + /* By default, don't do extra passes to optimize entropy coding */ + cinfo->optimize_coding = FALSE; + /* The standard Huffman tables are only valid for 8-bit data precision. + * If the precision is higher, force optimization on so that usable + * tables will be computed. This test can be removed if default tables + * are supplied that are valid for the desired precision. + */ + if (cinfo->data_precision > 8) + cinfo->optimize_coding = TRUE; + + /* By default, use the simpler non-cosited sampling alignment */ + cinfo->CCIR601_sampling = FALSE; + + /* No input smoothing */ + cinfo->smoothing_factor = 0; + + /* DCT algorithm preference */ + cinfo->dct_method = JDCT_DEFAULT; + + /* No restart markers */ + cinfo->restart_interval = 0; + cinfo->restart_in_rows = 0; + + /* Fill in default JFIF marker parameters. Note that whether the marker + * will actually be written is determined by jpeg_set_colorspace. + * + * By default, the library emits JFIF version code 1.01. + * An application that wants to emit JFIF 1.02 extension markers should set + * JFIF_minor_version to 2. We could probably get away with just defaulting + * to 1.02, but there may still be some decoders in use that will complain + * about that; saying 1.01 should minimize compatibility problems. + */ + cinfo->JFIF_major_version = 1; /* Default JFIF version = 1.01 */ + cinfo->JFIF_minor_version = 1; + cinfo->density_unit = 0; /* Pixel size is unknown by default */ + cinfo->X_density = 1; /* Pixel aspect ratio is square by default */ + cinfo->Y_density = 1; + + /* Choose JPEG colorspace based on input space, set defaults accordingly */ + + jpeg_default_colorspace(cinfo); +} + + +/* + * Select an appropriate JPEG colorspace for in_color_space. + */ + +GLOBAL(void) +jpeg_default_colorspace (j_compress_ptr cinfo) +{ + switch (cinfo->in_color_space) { + case JCS_GRAYSCALE: + jpeg_set_colorspace(cinfo, JCS_GRAYSCALE); + break; + case JCS_RGB: + jpeg_set_colorspace(cinfo, JCS_YCbCr); + break; + case JCS_YCbCr: + jpeg_set_colorspace(cinfo, JCS_YCbCr); + break; + case JCS_CMYK: + jpeg_set_colorspace(cinfo, JCS_CMYK); /* By default, no translation */ + break; + case JCS_YCCK: + jpeg_set_colorspace(cinfo, JCS_YCCK); + break; + case JCS_UNKNOWN: + jpeg_set_colorspace(cinfo, JCS_UNKNOWN); + break; + default: + ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); + } +} + + +/* + * Set the JPEG colorspace, and choose colorspace-dependent default values. + */ + +GLOBAL(void) +jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) +{ + jpeg_component_info * compptr; + int ci; + +#define SET_COMP(index,id,hsamp,vsamp,quant,dctbl,actbl) \ + (compptr = &cinfo->comp_info[index], \ + compptr->component_id = (id), \ + compptr->h_samp_factor = (hsamp), \ + compptr->v_samp_factor = (vsamp), \ + compptr->quant_tbl_no = (quant), \ + compptr->dc_tbl_no = (dctbl), \ + compptr->ac_tbl_no = (actbl) ) + + /* Safety check to ensure start_compress not called yet. */ + if (cinfo->global_state != CSTATE_START) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + /* For all colorspaces, we use Q and Huff tables 0 for luminance components, + * tables 1 for chrominance components. + */ + + cinfo->jpeg_color_space = colorspace; + + cinfo->write_JFIF_header = FALSE; /* No marker for non-JFIF colorspaces */ + cinfo->write_Adobe_marker = FALSE; /* write no Adobe marker by default */ + + switch (colorspace) { + case JCS_GRAYSCALE: + cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */ + cinfo->num_components = 1; + /* JFIF specifies component ID 1 */ + SET_COMP(0, 1, 1,1, 0, 0,0); + break; + case JCS_RGB: + cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag RGB */ + cinfo->num_components = 3; + SET_COMP(0, 0x52 /* 'R' */, 1,1, 0, 0,0); + SET_COMP(1, 0x47 /* 'G' */, 1,1, 0, 0,0); + SET_COMP(2, 0x42 /* 'B' */, 1,1, 0, 0,0); + break; + case JCS_YCbCr: + cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */ + cinfo->num_components = 3; + /* JFIF specifies component IDs 1,2,3 */ + /* We default to 2x2 subsamples of chrominance */ + SET_COMP(0, 1, 2,2, 0, 0,0); + SET_COMP(1, 2, 1,1, 1, 1,1); + SET_COMP(2, 3, 1,1, 1, 1,1); + break; + case JCS_CMYK: + cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag CMYK */ + cinfo->num_components = 4; + SET_COMP(0, 0x43 /* 'C' */, 1,1, 0, 0,0); + SET_COMP(1, 0x4D /* 'M' */, 1,1, 0, 0,0); + SET_COMP(2, 0x59 /* 'Y' */, 1,1, 0, 0,0); + SET_COMP(3, 0x4B /* 'K' */, 1,1, 0, 0,0); + break; + case JCS_YCCK: + cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag YCCK */ + cinfo->num_components = 4; + SET_COMP(0, 1, 2,2, 0, 0,0); + SET_COMP(1, 2, 1,1, 1, 1,1); + SET_COMP(2, 3, 1,1, 1, 1,1); + SET_COMP(3, 4, 2,2, 0, 0,0); + break; + case JCS_UNKNOWN: + cinfo->num_components = cinfo->input_components; + if (cinfo->num_components < 1 || cinfo->num_components > MAX_COMPONENTS) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, + MAX_COMPONENTS); + for (ci = 0; ci < cinfo->num_components; ci++) { + SET_COMP(ci, ci, 1,1, 0, 0,0); + } + break; + default: + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + } +} + + +#ifdef C_PROGRESSIVE_SUPPORTED + +LOCAL(jpeg_scan_info *) +fill_a_scan (jpeg_scan_info * scanptr, int ci, + int Ss, int Se, int Ah, int Al) +/* Support routine: generate one scan for specified component */ +{ + scanptr->comps_in_scan = 1; + scanptr->component_index[0] = ci; + scanptr->Ss = Ss; + scanptr->Se = Se; + scanptr->Ah = Ah; + scanptr->Al = Al; + scanptr++; + return scanptr; +} + +LOCAL(jpeg_scan_info *) +fill_scans (jpeg_scan_info * scanptr, int ncomps, + int Ss, int Se, int Ah, int Al) +/* Support routine: generate one scan for each component */ +{ + int ci; + + for (ci = 0; ci < ncomps; ci++) { + scanptr->comps_in_scan = 1; + scanptr->component_index[0] = ci; + scanptr->Ss = Ss; + scanptr->Se = Se; + scanptr->Ah = Ah; + scanptr->Al = Al; + scanptr++; + } + return scanptr; +} + +LOCAL(jpeg_scan_info *) +fill_dc_scans (jpeg_scan_info * scanptr, int ncomps, int Ah, int Al) +/* Support routine: generate interleaved DC scan if possible, else N scans */ +{ + int ci; + + if (ncomps <= MAX_COMPS_IN_SCAN) { + /* Single interleaved DC scan */ + scanptr->comps_in_scan = ncomps; + for (ci = 0; ci < ncomps; ci++) + scanptr->component_index[ci] = ci; + scanptr->Ss = scanptr->Se = 0; + scanptr->Ah = Ah; + scanptr->Al = Al; + scanptr++; + } else { + /* Noninterleaved DC scan for each component */ + scanptr = fill_scans(scanptr, ncomps, 0, 0, Ah, Al); + } + return scanptr; +} + + +/* + * Create a recommended progressive-JPEG script. + * cinfo->num_components and cinfo->jpeg_color_space must be correct. + */ + +GLOBAL(void) +jpeg_simple_progression (j_compress_ptr cinfo) +{ + int ncomps = cinfo->num_components; + int nscans; + jpeg_scan_info * scanptr; + + /* Safety check to ensure start_compress not called yet. */ + if (cinfo->global_state != CSTATE_START) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + /* Figure space needed for script. Calculation must match code below! */ + if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) { + /* Custom script for YCbCr color images. */ + nscans = 10; + } else { + /* All-purpose script for other color spaces. */ + if (ncomps > MAX_COMPS_IN_SCAN) + nscans = 6 * ncomps; /* 2 DC + 4 AC scans per component */ + else + nscans = 2 + 4 * ncomps; /* 2 DC scans; 4 AC scans per component */ + } + + /* Allocate space for script. + * We need to put it in the permanent pool in case the application performs + * multiple compressions without changing the settings. To avoid a memory + * leak if jpeg_simple_progression is called repeatedly for the same JPEG + * object, we try to re-use previously allocated space, and we allocate + * enough space to handle YCbCr even if initially asked for grayscale. + */ + if (cinfo->script_space == NULL || cinfo->script_space_size < nscans) { + cinfo->script_space_size = MAX(nscans, 10); + cinfo->script_space = (jpeg_scan_info *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + cinfo->script_space_size * SIZEOF(jpeg_scan_info)); + } + scanptr = cinfo->script_space; + cinfo->scan_info = scanptr; + cinfo->num_scans = nscans; + + if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) { + /* Custom script for YCbCr color images. */ + /* Initial DC scan */ + scanptr = fill_dc_scans(scanptr, ncomps, 0, 1); + /* Initial AC scan: get some luma data out in a hurry */ + scanptr = fill_a_scan(scanptr, 0, 1, 5, 0, 2); + /* Chroma data is too small to be worth expending many scans on */ + scanptr = fill_a_scan(scanptr, 2, 1, 63, 0, 1); + scanptr = fill_a_scan(scanptr, 1, 1, 63, 0, 1); + /* Complete spectral selection for luma AC */ + scanptr = fill_a_scan(scanptr, 0, 6, 63, 0, 2); + /* Refine next bit of luma AC */ + scanptr = fill_a_scan(scanptr, 0, 1, 63, 2, 1); + /* Finish DC successive approximation */ + scanptr = fill_dc_scans(scanptr, ncomps, 1, 0); + /* Finish AC successive approximation */ + scanptr = fill_a_scan(scanptr, 2, 1, 63, 1, 0); + scanptr = fill_a_scan(scanptr, 1, 1, 63, 1, 0); + /* Luma bottom bit comes last since it's usually largest scan */ + scanptr = fill_a_scan(scanptr, 0, 1, 63, 1, 0); + } else { + /* All-purpose script for other color spaces. */ + /* Successive approximation first pass */ + scanptr = fill_dc_scans(scanptr, ncomps, 0, 1); + scanptr = fill_scans(scanptr, ncomps, 1, 5, 0, 2); + scanptr = fill_scans(scanptr, ncomps, 6, 63, 0, 2); + /* Successive approximation second pass */ + scanptr = fill_scans(scanptr, ncomps, 1, 63, 2, 1); + /* Successive approximation final pass */ + scanptr = fill_dc_scans(scanptr, ncomps, 1, 0); + scanptr = fill_scans(scanptr, ncomps, 1, 63, 1, 0); + } +} + +#endif /* C_PROGRESSIVE_SUPPORTED */ diff --git a/Build/source/extra/jpeg/jcphuff.c b/Build/source/extra/jpeg/jcphuff.c new file mode 100644 index 00000000000..07f9178b01c --- /dev/null +++ b/Build/source/extra/jpeg/jcphuff.c @@ -0,0 +1,833 @@ +/* + * jcphuff.c + * + * Copyright (C) 1995-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains Huffman entropy encoding routines for progressive JPEG. + * + * We do not support output suspension in this module, since the library + * currently does not allow multiple-scan files to be written with output + * suspension. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jchuff.h" /* Declarations shared with jchuff.c */ + +#ifdef C_PROGRESSIVE_SUPPORTED + +/* Expanded entropy encoder object for progressive Huffman encoding. */ + +typedef struct { + struct jpeg_entropy_encoder pub; /* public fields */ + + /* Mode flag: TRUE for optimization, FALSE for actual data output */ + boolean gather_statistics; + + /* Bit-level coding status. + * next_output_byte/free_in_buffer are local copies of cinfo->dest fields. + */ + JOCTET * next_output_byte; /* => next byte to write in buffer */ + size_t free_in_buffer; /* # of byte spaces remaining in buffer */ + INT32 put_buffer; /* current bit-accumulation buffer */ + int put_bits; /* # of bits now in it */ + j_compress_ptr cinfo; /* link to cinfo (needed for dump_buffer) */ + + /* Coding status for DC components */ + int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ + + /* Coding status for AC components */ + int ac_tbl_no; /* the table number of the single component */ + unsigned int EOBRUN; /* run length of EOBs */ + unsigned int BE; /* # of buffered correction bits before MCU */ + char * bit_buffer; /* buffer for correction bits (1 per char) */ + /* packing correction bits tightly would save some space but cost time... */ + + unsigned int restarts_to_go; /* MCUs left in this restart interval */ + int next_restart_num; /* next restart number to write (0-7) */ + + /* Pointers to derived tables (these workspaces have image lifespan). + * Since any one scan codes only DC or only AC, we only need one set + * of tables, not one for DC and one for AC. + */ + c_derived_tbl * derived_tbls[NUM_HUFF_TBLS]; + + /* Statistics tables for optimization; again, one set is enough */ + long * count_ptrs[NUM_HUFF_TBLS]; +} phuff_entropy_encoder; + +typedef phuff_entropy_encoder * phuff_entropy_ptr; + +/* MAX_CORR_BITS is the number of bits the AC refinement correction-bit + * buffer can hold. Larger sizes may slightly improve compression, but + * 1000 is already well into the realm of overkill. + * The minimum safe size is 64 bits. + */ + +#define MAX_CORR_BITS 1000 /* Max # of correction bits I can buffer */ + +/* IRIGHT_SHIFT is like RIGHT_SHIFT, but works on int rather than INT32. + * We assume that int right shift is unsigned if INT32 right shift is, + * which should be safe. + */ + +#ifdef RIGHT_SHIFT_IS_UNSIGNED +#define ISHIFT_TEMPS int ishift_temp; +#define IRIGHT_SHIFT(x,shft) \ + ((ishift_temp = (x)) < 0 ? \ + (ishift_temp >> (shft)) | ((~0) << (16-(shft))) : \ + (ishift_temp >> (shft))) +#else +#define ISHIFT_TEMPS +#define IRIGHT_SHIFT(x,shft) ((x) >> (shft)) +#endif + +/* Forward declarations */ +METHODDEF(boolean) encode_mcu_DC_first JPP((j_compress_ptr cinfo, + JBLOCKROW *MCU_data)); +METHODDEF(boolean) encode_mcu_AC_first JPP((j_compress_ptr cinfo, + JBLOCKROW *MCU_data)); +METHODDEF(boolean) encode_mcu_DC_refine JPP((j_compress_ptr cinfo, + JBLOCKROW *MCU_data)); +METHODDEF(boolean) encode_mcu_AC_refine JPP((j_compress_ptr cinfo, + JBLOCKROW *MCU_data)); +METHODDEF(void) finish_pass_phuff JPP((j_compress_ptr cinfo)); +METHODDEF(void) finish_pass_gather_phuff JPP((j_compress_ptr cinfo)); + + +/* + * Initialize for a Huffman-compressed scan using progressive JPEG. + */ + +METHODDEF(void) +start_pass_phuff (j_compress_ptr cinfo, boolean gather_statistics) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + boolean is_DC_band; + int ci, tbl; + jpeg_component_info * compptr; + + entropy->cinfo = cinfo; + entropy->gather_statistics = gather_statistics; + + is_DC_band = (cinfo->Ss == 0); + + /* We assume jcmaster.c already validated the scan parameters. */ + + /* Select execution routines */ + if (cinfo->Ah == 0) { + if (is_DC_band) + entropy->pub.encode_mcu = encode_mcu_DC_first; + else + entropy->pub.encode_mcu = encode_mcu_AC_first; + } else { + if (is_DC_band) + entropy->pub.encode_mcu = encode_mcu_DC_refine; + else { + entropy->pub.encode_mcu = encode_mcu_AC_refine; + /* AC refinement needs a correction bit buffer */ + if (entropy->bit_buffer == NULL) + entropy->bit_buffer = (char *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + MAX_CORR_BITS * SIZEOF(char)); + } + } + if (gather_statistics) + entropy->pub.finish_pass = finish_pass_gather_phuff; + else + entropy->pub.finish_pass = finish_pass_phuff; + + /* Only DC coefficients may be interleaved, so cinfo->comps_in_scan = 1 + * for AC coefficients. + */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Initialize DC predictions to 0 */ + entropy->last_dc_val[ci] = 0; + /* Get table index */ + if (is_DC_band) { + if (cinfo->Ah != 0) /* DC refinement needs no table */ + continue; + tbl = compptr->dc_tbl_no; + } else { + entropy->ac_tbl_no = tbl = compptr->ac_tbl_no; + } + if (gather_statistics) { + /* Check for invalid table index */ + /* (make_c_derived_tbl does this in the other path) */ + if (tbl < 0 || tbl >= NUM_HUFF_TBLS) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tbl); + /* Allocate and zero the statistics tables */ + /* Note that jpeg_gen_optimal_table expects 257 entries in each table! */ + if (entropy->count_ptrs[tbl] == NULL) + entropy->count_ptrs[tbl] = (long *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 257 * SIZEOF(long)); + MEMZERO(entropy->count_ptrs[tbl], 257 * SIZEOF(long)); + } else { + /* Compute derived values for Huffman table */ + /* We may do this more than once for a table, but it's not expensive */ + jpeg_make_c_derived_tbl(cinfo, is_DC_band, tbl, + & entropy->derived_tbls[tbl]); + } + } + + /* Initialize AC stuff */ + entropy->EOBRUN = 0; + entropy->BE = 0; + + /* Initialize bit buffer to empty */ + entropy->put_buffer = 0; + entropy->put_bits = 0; + + /* Initialize restart stuff */ + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num = 0; +} + + +/* Outputting bytes to the file. + * NB: these must be called only when actually outputting, + * that is, entropy->gather_statistics == FALSE. + */ + +/* Emit a byte */ +#define emit_byte(entropy,val) \ + { *(entropy)->next_output_byte++ = (JOCTET) (val); \ + if (--(entropy)->free_in_buffer == 0) \ + dump_buffer(entropy); } + + +LOCAL(void) +dump_buffer (phuff_entropy_ptr entropy) +/* Empty the output buffer; we do not support suspension in this module. */ +{ + struct jpeg_destination_mgr * dest = entropy->cinfo->dest; + + if (! (*dest->empty_output_buffer) (entropy->cinfo)) + ERREXIT(entropy->cinfo, JERR_CANT_SUSPEND); + /* After a successful buffer dump, must reset buffer pointers */ + entropy->next_output_byte = dest->next_output_byte; + entropy->free_in_buffer = dest->free_in_buffer; +} + + +/* Outputting bits to the file */ + +/* Only the right 24 bits of put_buffer are used; the valid bits are + * left-justified in this part. At most 16 bits can be passed to emit_bits + * in one call, and we never retain more than 7 bits in put_buffer + * between calls, so 24 bits are sufficient. + */ + +INLINE +LOCAL(void) +emit_bits (phuff_entropy_ptr entropy, unsigned int code, int size) +/* Emit some bits, unless we are in gather mode */ +{ + /* This routine is heavily used, so it's worth coding tightly. */ + register INT32 put_buffer = (INT32) code; + register int put_bits = entropy->put_bits; + + /* if size is 0, caller used an invalid Huffman table entry */ + if (size == 0) + ERREXIT(entropy->cinfo, JERR_HUFF_MISSING_CODE); + + if (entropy->gather_statistics) + return; /* do nothing if we're only getting stats */ + + put_buffer &= (((INT32) 1)<put_buffer; /* and merge with old buffer contents */ + + while (put_bits >= 8) { + int c = (int) ((put_buffer >> 16) & 0xFF); + + emit_byte(entropy, c); + if (c == 0xFF) { /* need to stuff a zero byte? */ + emit_byte(entropy, 0); + } + put_buffer <<= 8; + put_bits -= 8; + } + + entropy->put_buffer = put_buffer; /* update variables */ + entropy->put_bits = put_bits; +} + + +LOCAL(void) +flush_bits (phuff_entropy_ptr entropy) +{ + emit_bits(entropy, 0x7F, 7); /* fill any partial byte with ones */ + entropy->put_buffer = 0; /* and reset bit-buffer to empty */ + entropy->put_bits = 0; +} + + +/* + * Emit (or just count) a Huffman symbol. + */ + +INLINE +LOCAL(void) +emit_symbol (phuff_entropy_ptr entropy, int tbl_no, int symbol) +{ + if (entropy->gather_statistics) + entropy->count_ptrs[tbl_no][symbol]++; + else { + c_derived_tbl * tbl = entropy->derived_tbls[tbl_no]; + emit_bits(entropy, tbl->ehufco[symbol], tbl->ehufsi[symbol]); + } +} + + +/* + * Emit bits from a correction bit buffer. + */ + +LOCAL(void) +emit_buffered_bits (phuff_entropy_ptr entropy, char * bufstart, + unsigned int nbits) +{ + if (entropy->gather_statistics) + return; /* no real work */ + + while (nbits > 0) { + emit_bits(entropy, (unsigned int) (*bufstart), 1); + bufstart++; + nbits--; + } +} + + +/* + * Emit any pending EOBRUN symbol. + */ + +LOCAL(void) +emit_eobrun (phuff_entropy_ptr entropy) +{ + register int temp, nbits; + + if (entropy->EOBRUN > 0) { /* if there is any pending EOBRUN */ + temp = entropy->EOBRUN; + nbits = 0; + while ((temp >>= 1)) + nbits++; + /* safety check: shouldn't happen given limited correction-bit buffer */ + if (nbits > 14) + ERREXIT(entropy->cinfo, JERR_HUFF_MISSING_CODE); + + emit_symbol(entropy, entropy->ac_tbl_no, nbits << 4); + if (nbits) + emit_bits(entropy, entropy->EOBRUN, nbits); + + entropy->EOBRUN = 0; + + /* Emit any buffered correction bits */ + emit_buffered_bits(entropy, entropy->bit_buffer, entropy->BE); + entropy->BE = 0; + } +} + + +/* + * Emit a restart marker & resynchronize predictions. + */ + +LOCAL(void) +emit_restart (phuff_entropy_ptr entropy, int restart_num) +{ + int ci; + + emit_eobrun(entropy); + + if (! entropy->gather_statistics) { + flush_bits(entropy); + emit_byte(entropy, 0xFF); + emit_byte(entropy, JPEG_RST0 + restart_num); + } + + if (entropy->cinfo->Ss == 0) { + /* Re-initialize DC predictions to 0 */ + for (ci = 0; ci < entropy->cinfo->comps_in_scan; ci++) + entropy->last_dc_val[ci] = 0; + } else { + /* Re-initialize all AC-related fields to 0 */ + entropy->EOBRUN = 0; + entropy->BE = 0; + } +} + + +/* + * MCU encoding for DC initial scan (either spectral selection, + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +encode_mcu_DC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + register int temp, temp2; + register int nbits; + int blkn, ci; + int Al = cinfo->Al; + JBLOCKROW block; + jpeg_component_info * compptr; + ISHIFT_TEMPS + + entropy->next_output_byte = cinfo->dest->next_output_byte; + entropy->free_in_buffer = cinfo->dest->free_in_buffer; + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) + if (entropy->restarts_to_go == 0) + emit_restart(entropy, entropy->next_restart_num); + + /* Encode the MCU data blocks */ + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + block = MCU_data[blkn]; + ci = cinfo->MCU_membership[blkn]; + compptr = cinfo->cur_comp_info[ci]; + + /* Compute the DC value after the required point transform by Al. + * This is simply an arithmetic right shift. + */ + temp2 = IRIGHT_SHIFT((int) ((*block)[0]), Al); + + /* DC differences are figured on the point-transformed values. */ + temp = temp2 - entropy->last_dc_val[ci]; + entropy->last_dc_val[ci] = temp2; + + /* Encode the DC coefficient difference per section G.1.2.1 */ + temp2 = temp; + if (temp < 0) { + temp = -temp; /* temp is abs value of input */ + /* For a negative input, want temp2 = bitwise complement of abs(input) */ + /* This code assumes we are on a two's complement machine */ + temp2--; + } + + /* Find the number of bits needed for the magnitude of the coefficient */ + nbits = 0; + while (temp) { + nbits++; + temp >>= 1; + } + /* Check for out-of-range coefficient values. + * Since we're encoding a difference, the range limit is twice as much. + */ + if (nbits > MAX_COEF_BITS+1) + ERREXIT(cinfo, JERR_BAD_DCT_COEF); + + /* Count/emit the Huffman-coded symbol for the number of bits */ + emit_symbol(entropy, compptr->dc_tbl_no, nbits); + + /* Emit that number of bits of the value, if positive, */ + /* or the complement of its magnitude, if negative. */ + if (nbits) /* emit_bits rejects calls with size 0 */ + emit_bits(entropy, (unsigned int) temp2, nbits); + } + + cinfo->dest->next_output_byte = entropy->next_output_byte; + cinfo->dest->free_in_buffer = entropy->free_in_buffer; + + /* Update restart-interval state too */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + return TRUE; +} + + +/* + * MCU encoding for AC initial scan (either spectral selection, + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + register int temp, temp2; + register int nbits; + register int r, k; + int Se = cinfo->Se; + int Al = cinfo->Al; + JBLOCKROW block; + + entropy->next_output_byte = cinfo->dest->next_output_byte; + entropy->free_in_buffer = cinfo->dest->free_in_buffer; + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) + if (entropy->restarts_to_go == 0) + emit_restart(entropy, entropy->next_restart_num); + + /* Encode the MCU data block */ + block = MCU_data[0]; + + /* Encode the AC coefficients per section G.1.2.2, fig. G.3 */ + + r = 0; /* r = run length of zeros */ + + for (k = cinfo->Ss; k <= Se; k++) { + if ((temp = (*block)[jpeg_natural_order[k]]) == 0) { + r++; + continue; + } + /* We must apply the point transform by Al. For AC coefficients this + * is an integer division with rounding towards 0. To do this portably + * in C, we shift after obtaining the absolute value; so the code is + * interwoven with finding the abs value (temp) and output bits (temp2). + */ + if (temp < 0) { + temp = -temp; /* temp is abs value of input */ + temp >>= Al; /* apply the point transform */ + /* For a negative coef, want temp2 = bitwise complement of abs(coef) */ + temp2 = ~temp; + } else { + temp >>= Al; /* apply the point transform */ + temp2 = temp; + } + /* Watch out for case that nonzero coef is zero after point transform */ + if (temp == 0) { + r++; + continue; + } + + /* Emit any pending EOBRUN */ + if (entropy->EOBRUN > 0) + emit_eobrun(entropy); + /* if run length > 15, must emit special run-length-16 codes (0xF0) */ + while (r > 15) { + emit_symbol(entropy, entropy->ac_tbl_no, 0xF0); + r -= 16; + } + + /* Find the number of bits needed for the magnitude of the coefficient */ + nbits = 1; /* there must be at least one 1 bit */ + while ((temp >>= 1)) + nbits++; + /* Check for out-of-range coefficient values */ + if (nbits > MAX_COEF_BITS) + ERREXIT(cinfo, JERR_BAD_DCT_COEF); + + /* Count/emit Huffman symbol for run length / number of bits */ + emit_symbol(entropy, entropy->ac_tbl_no, (r << 4) + nbits); + + /* Emit that number of bits of the value, if positive, */ + /* or the complement of its magnitude, if negative. */ + emit_bits(entropy, (unsigned int) temp2, nbits); + + r = 0; /* reset zero run length */ + } + + if (r > 0) { /* If there are trailing zeroes, */ + entropy->EOBRUN++; /* count an EOB */ + if (entropy->EOBRUN == 0x7FFF) + emit_eobrun(entropy); /* force it out to avoid overflow */ + } + + cinfo->dest->next_output_byte = entropy->next_output_byte; + cinfo->dest->free_in_buffer = entropy->free_in_buffer; + + /* Update restart-interval state too */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + return TRUE; +} + + +/* + * MCU encoding for DC successive approximation refinement scan. + * Note: we assume such scans can be multi-component, although the spec + * is not very clear on the point. + */ + +METHODDEF(boolean) +encode_mcu_DC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + register int temp; + int blkn; + int Al = cinfo->Al; + JBLOCKROW block; + + entropy->next_output_byte = cinfo->dest->next_output_byte; + entropy->free_in_buffer = cinfo->dest->free_in_buffer; + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) + if (entropy->restarts_to_go == 0) + emit_restart(entropy, entropy->next_restart_num); + + /* Encode the MCU data blocks */ + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + block = MCU_data[blkn]; + + /* We simply emit the Al'th bit of the DC coefficient value. */ + temp = (*block)[0]; + emit_bits(entropy, (unsigned int) (temp >> Al), 1); + } + + cinfo->dest->next_output_byte = entropy->next_output_byte; + cinfo->dest->free_in_buffer = entropy->free_in_buffer; + + /* Update restart-interval state too */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + return TRUE; +} + + +/* + * MCU encoding for AC successive approximation refinement scan. + */ + +METHODDEF(boolean) +encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + register int temp; + register int r, k; + int EOB; + char *BR_buffer; + unsigned int BR; + int Se = cinfo->Se; + int Al = cinfo->Al; + JBLOCKROW block; + int absvalues[DCTSIZE2]; + + entropy->next_output_byte = cinfo->dest->next_output_byte; + entropy->free_in_buffer = cinfo->dest->free_in_buffer; + + /* Emit restart marker if needed */ + if (cinfo->restart_interval) + if (entropy->restarts_to_go == 0) + emit_restart(entropy, entropy->next_restart_num); + + /* Encode the MCU data block */ + block = MCU_data[0]; + + /* It is convenient to make a pre-pass to determine the transformed + * coefficients' absolute values and the EOB position. + */ + EOB = 0; + for (k = cinfo->Ss; k <= Se; k++) { + temp = (*block)[jpeg_natural_order[k]]; + /* We must apply the point transform by Al. For AC coefficients this + * is an integer division with rounding towards 0. To do this portably + * in C, we shift after obtaining the absolute value. + */ + if (temp < 0) + temp = -temp; /* temp is abs value of input */ + temp >>= Al; /* apply the point transform */ + absvalues[k] = temp; /* save abs value for main pass */ + if (temp == 1) + EOB = k; /* EOB = index of last newly-nonzero coef */ + } + + /* Encode the AC coefficients per section G.1.2.3, fig. G.7 */ + + r = 0; /* r = run length of zeros */ + BR = 0; /* BR = count of buffered bits added now */ + BR_buffer = entropy->bit_buffer + entropy->BE; /* Append bits to buffer */ + + for (k = cinfo->Ss; k <= Se; k++) { + if ((temp = absvalues[k]) == 0) { + r++; + continue; + } + + /* Emit any required ZRLs, but not if they can be folded into EOB */ + while (r > 15 && k <= EOB) { + /* emit any pending EOBRUN and the BE correction bits */ + emit_eobrun(entropy); + /* Emit ZRL */ + emit_symbol(entropy, entropy->ac_tbl_no, 0xF0); + r -= 16; + /* Emit buffered correction bits that must be associated with ZRL */ + emit_buffered_bits(entropy, BR_buffer, BR); + BR_buffer = entropy->bit_buffer; /* BE bits are gone now */ + BR = 0; + } + + /* If the coef was previously nonzero, it only needs a correction bit. + * NOTE: a straight translation of the spec's figure G.7 would suggest + * that we also need to test r > 15. But if r > 15, we can only get here + * if k > EOB, which implies that this coefficient is not 1. + */ + if (temp > 1) { + /* The correction bit is the next bit of the absolute value. */ + BR_buffer[BR++] = (char) (temp & 1); + continue; + } + + /* Emit any pending EOBRUN and the BE correction bits */ + emit_eobrun(entropy); + + /* Count/emit Huffman symbol for run length / number of bits */ + emit_symbol(entropy, entropy->ac_tbl_no, (r << 4) + 1); + + /* Emit output bit for newly-nonzero coef */ + temp = ((*block)[jpeg_natural_order[k]] < 0) ? 0 : 1; + emit_bits(entropy, (unsigned int) temp, 1); + + /* Emit buffered correction bits that must be associated with this code */ + emit_buffered_bits(entropy, BR_buffer, BR); + BR_buffer = entropy->bit_buffer; /* BE bits are gone now */ + BR = 0; + r = 0; /* reset zero run length */ + } + + if (r > 0 || BR > 0) { /* If there are trailing zeroes, */ + entropy->EOBRUN++; /* count an EOB */ + entropy->BE += BR; /* concat my correction bits to older ones */ + /* We force out the EOB if we risk either: + * 1. overflow of the EOB counter; + * 2. overflow of the correction bit buffer during the next MCU. + */ + if (entropy->EOBRUN == 0x7FFF || entropy->BE > (MAX_CORR_BITS-DCTSIZE2+1)) + emit_eobrun(entropy); + } + + cinfo->dest->next_output_byte = entropy->next_output_byte; + cinfo->dest->free_in_buffer = entropy->free_in_buffer; + + /* Update restart-interval state too */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) { + entropy->restarts_to_go = cinfo->restart_interval; + entropy->next_restart_num++; + entropy->next_restart_num &= 7; + } + entropy->restarts_to_go--; + } + + return TRUE; +} + + +/* + * Finish up at the end of a Huffman-compressed progressive scan. + */ + +METHODDEF(void) +finish_pass_phuff (j_compress_ptr cinfo) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + + entropy->next_output_byte = cinfo->dest->next_output_byte; + entropy->free_in_buffer = cinfo->dest->free_in_buffer; + + /* Flush out any buffered data */ + emit_eobrun(entropy); + flush_bits(entropy); + + cinfo->dest->next_output_byte = entropy->next_output_byte; + cinfo->dest->free_in_buffer = entropy->free_in_buffer; +} + + +/* + * Finish up a statistics-gathering pass and create the new Huffman tables. + */ + +METHODDEF(void) +finish_pass_gather_phuff (j_compress_ptr cinfo) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + boolean is_DC_band; + int ci, tbl; + jpeg_component_info * compptr; + JHUFF_TBL **htblptr; + boolean did[NUM_HUFF_TBLS]; + + /* Flush out buffered data (all we care about is counting the EOB symbol) */ + emit_eobrun(entropy); + + is_DC_band = (cinfo->Ss == 0); + + /* It's important not to apply jpeg_gen_optimal_table more than once + * per table, because it clobbers the input frequency counts! + */ + MEMZERO(did, SIZEOF(did)); + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + if (is_DC_band) { + if (cinfo->Ah != 0) /* DC refinement needs no table */ + continue; + tbl = compptr->dc_tbl_no; + } else { + tbl = compptr->ac_tbl_no; + } + if (! did[tbl]) { + if (is_DC_band) + htblptr = & cinfo->dc_huff_tbl_ptrs[tbl]; + else + htblptr = & cinfo->ac_huff_tbl_ptrs[tbl]; + if (*htblptr == NULL) + *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); + jpeg_gen_optimal_table(cinfo, *htblptr, entropy->count_ptrs[tbl]); + did[tbl] = TRUE; + } + } +} + + +/* + * Module initialization routine for progressive Huffman entropy encoding. + */ + +GLOBAL(void) +jinit_phuff_encoder (j_compress_ptr cinfo) +{ + phuff_entropy_ptr entropy; + int i; + + entropy = (phuff_entropy_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(phuff_entropy_encoder)); + cinfo->entropy = (struct jpeg_entropy_encoder *) entropy; + entropy->pub.start_pass = start_pass_phuff; + + /* Mark tables unallocated */ + for (i = 0; i < NUM_HUFF_TBLS; i++) { + entropy->derived_tbls[i] = NULL; + entropy->count_ptrs[i] = NULL; + } + entropy->bit_buffer = NULL; /* needed only in AC refinement scan */ +} + +#endif /* C_PROGRESSIVE_SUPPORTED */ diff --git a/Build/source/extra/jpeg/jcprepct.c b/Build/source/extra/jpeg/jcprepct.c new file mode 100644 index 00000000000..fa93333db20 --- /dev/null +++ b/Build/source/extra/jpeg/jcprepct.c @@ -0,0 +1,354 @@ +/* + * jcprepct.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the compression preprocessing controller. + * This controller manages the color conversion, downsampling, + * and edge expansion steps. + * + * Most of the complexity here is associated with buffering input rows + * as required by the downsampler. See the comments at the head of + * jcsample.c for the downsampler's needs. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* At present, jcsample.c can request context rows only for smoothing. + * In the future, we might also need context rows for CCIR601 sampling + * or other more-complex downsampling procedures. The code to support + * context rows should be compiled only if needed. + */ +#ifdef INPUT_SMOOTHING_SUPPORTED +#define CONTEXT_ROWS_SUPPORTED +#endif + + +/* + * For the simple (no-context-row) case, we just need to buffer one + * row group's worth of pixels for the downsampling step. At the bottom of + * the image, we pad to a full row group by replicating the last pixel row. + * The downsampler's last output row is then replicated if needed to pad + * out to a full iMCU row. + * + * When providing context rows, we must buffer three row groups' worth of + * pixels. Three row groups are physically allocated, but the row pointer + * arrays are made five row groups high, with the extra pointers above and + * below "wrapping around" to point to the last and first real row groups. + * This allows the downsampler to access the proper context rows. + * At the top and bottom of the image, we create dummy context rows by + * copying the first or last real pixel row. This copying could be avoided + * by pointer hacking as is done in jdmainct.c, but it doesn't seem worth the + * trouble on the compression side. + */ + + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_c_prep_controller pub; /* public fields */ + + /* Downsampling input buffer. This buffer holds color-converted data + * until we have enough to do a downsample step. + */ + JSAMPARRAY color_buf[MAX_COMPONENTS]; + + JDIMENSION rows_to_go; /* counts rows remaining in source image */ + int next_buf_row; /* index of next row to store in color_buf */ + +#ifdef CONTEXT_ROWS_SUPPORTED /* only needed for context case */ + int this_row_group; /* starting row index of group to process */ + int next_buf_stop; /* downsample when we reach this index */ +#endif +} my_prep_controller; + +typedef my_prep_controller * my_prep_ptr; + + +/* + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_prep (j_compress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_prep_ptr prep = (my_prep_ptr) cinfo->prep; + + if (pass_mode != JBUF_PASS_THRU) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + + /* Initialize total-height counter for detecting bottom of image */ + prep->rows_to_go = cinfo->image_height; + /* Mark the conversion buffer empty */ + prep->next_buf_row = 0; +#ifdef CONTEXT_ROWS_SUPPORTED + /* Preset additional state variables for context mode. + * These aren't used in non-context mode, so we needn't test which mode. + */ + prep->this_row_group = 0; + /* Set next_buf_stop to stop after two row groups have been read in. */ + prep->next_buf_stop = 2 * cinfo->max_v_samp_factor; +#endif +} + + +/* + * Expand an image vertically from height input_rows to height output_rows, + * by duplicating the bottom row. + */ + +LOCAL(void) +expand_bottom_edge (JSAMPARRAY image_data, JDIMENSION num_cols, + int input_rows, int output_rows) +{ + register int row; + + for (row = input_rows; row < output_rows; row++) { + jcopy_sample_rows(image_data, input_rows-1, image_data, row, + 1, num_cols); + } +} + + +/* + * Process some data in the simple no-context case. + * + * Preprocessor output data is counted in "row groups". A row group + * is defined to be v_samp_factor sample rows of each component. + * Downsampling will produce this much data from each max_v_samp_factor + * input rows. + */ + +METHODDEF(void) +pre_process_data (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, + JDIMENSION in_rows_avail, + JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr, + JDIMENSION out_row_groups_avail) +{ + my_prep_ptr prep = (my_prep_ptr) cinfo->prep; + int numrows, ci; + JDIMENSION inrows; + jpeg_component_info * compptr; + + while (*in_row_ctr < in_rows_avail && + *out_row_group_ctr < out_row_groups_avail) { + /* Do color conversion to fill the conversion buffer. */ + inrows = in_rows_avail - *in_row_ctr; + numrows = cinfo->max_v_samp_factor - prep->next_buf_row; + numrows = (int) MIN((JDIMENSION) numrows, inrows); + (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr, + prep->color_buf, + (JDIMENSION) prep->next_buf_row, + numrows); + *in_row_ctr += numrows; + prep->next_buf_row += numrows; + prep->rows_to_go -= numrows; + /* If at bottom of image, pad to fill the conversion buffer. */ + if (prep->rows_to_go == 0 && + prep->next_buf_row < cinfo->max_v_samp_factor) { + for (ci = 0; ci < cinfo->num_components; ci++) { + expand_bottom_edge(prep->color_buf[ci], cinfo->image_width, + prep->next_buf_row, cinfo->max_v_samp_factor); + } + prep->next_buf_row = cinfo->max_v_samp_factor; + } + /* If we've filled the conversion buffer, empty it. */ + if (prep->next_buf_row == cinfo->max_v_samp_factor) { + (*cinfo->downsample->downsample) (cinfo, + prep->color_buf, (JDIMENSION) 0, + output_buf, *out_row_group_ctr); + prep->next_buf_row = 0; + (*out_row_group_ctr)++; + } + /* If at bottom of image, pad the output to a full iMCU height. + * Note we assume the caller is providing a one-iMCU-height output buffer! + */ + if (prep->rows_to_go == 0 && + *out_row_group_ctr < out_row_groups_avail) { + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + expand_bottom_edge(output_buf[ci], + compptr->width_in_blocks * DCTSIZE, + (int) (*out_row_group_ctr * compptr->v_samp_factor), + (int) (out_row_groups_avail * compptr->v_samp_factor)); + } + *out_row_group_ctr = out_row_groups_avail; + break; /* can exit outer loop without test */ + } + } +} + + +#ifdef CONTEXT_ROWS_SUPPORTED + +/* + * Process some data in the context case. + */ + +METHODDEF(void) +pre_process_context (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, + JDIMENSION in_rows_avail, + JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr, + JDIMENSION out_row_groups_avail) +{ + my_prep_ptr prep = (my_prep_ptr) cinfo->prep; + int numrows, ci; + int buf_height = cinfo->max_v_samp_factor * 3; + JDIMENSION inrows; + + while (*out_row_group_ctr < out_row_groups_avail) { + if (*in_row_ctr < in_rows_avail) { + /* Do color conversion to fill the conversion buffer. */ + inrows = in_rows_avail - *in_row_ctr; + numrows = prep->next_buf_stop - prep->next_buf_row; + numrows = (int) MIN((JDIMENSION) numrows, inrows); + (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr, + prep->color_buf, + (JDIMENSION) prep->next_buf_row, + numrows); + /* Pad at top of image, if first time through */ + if (prep->rows_to_go == cinfo->image_height) { + for (ci = 0; ci < cinfo->num_components; ci++) { + int row; + for (row = 1; row <= cinfo->max_v_samp_factor; row++) { + jcopy_sample_rows(prep->color_buf[ci], 0, + prep->color_buf[ci], -row, + 1, cinfo->image_width); + } + } + } + *in_row_ctr += numrows; + prep->next_buf_row += numrows; + prep->rows_to_go -= numrows; + } else { + /* Return for more data, unless we are at the bottom of the image. */ + if (prep->rows_to_go != 0) + break; + /* When at bottom of image, pad to fill the conversion buffer. */ + if (prep->next_buf_row < prep->next_buf_stop) { + for (ci = 0; ci < cinfo->num_components; ci++) { + expand_bottom_edge(prep->color_buf[ci], cinfo->image_width, + prep->next_buf_row, prep->next_buf_stop); + } + prep->next_buf_row = prep->next_buf_stop; + } + } + /* If we've gotten enough data, downsample a row group. */ + if (prep->next_buf_row == prep->next_buf_stop) { + (*cinfo->downsample->downsample) (cinfo, + prep->color_buf, + (JDIMENSION) prep->this_row_group, + output_buf, *out_row_group_ctr); + (*out_row_group_ctr)++; + /* Advance pointers with wraparound as necessary. */ + prep->this_row_group += cinfo->max_v_samp_factor; + if (prep->this_row_group >= buf_height) + prep->this_row_group = 0; + if (prep->next_buf_row >= buf_height) + prep->next_buf_row = 0; + prep->next_buf_stop = prep->next_buf_row + cinfo->max_v_samp_factor; + } + } +} + + +/* + * Create the wrapped-around downsampling input buffer needed for context mode. + */ + +LOCAL(void) +create_context_buffer (j_compress_ptr cinfo) +{ + my_prep_ptr prep = (my_prep_ptr) cinfo->prep; + int rgroup_height = cinfo->max_v_samp_factor; + int ci, i; + jpeg_component_info * compptr; + JSAMPARRAY true_buffer, fake_buffer; + + /* Grab enough space for fake row pointers for all the components; + * we need five row groups' worth of pointers for each component. + */ + fake_buffer = (JSAMPARRAY) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (cinfo->num_components * 5 * rgroup_height) * + SIZEOF(JSAMPROW)); + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Allocate the actual buffer space (3 row groups) for this component. + * We make the buffer wide enough to allow the downsampler to edge-expand + * horizontally within the buffer, if it so chooses. + */ + true_buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) (((long) compptr->width_in_blocks * DCTSIZE * + cinfo->max_h_samp_factor) / compptr->h_samp_factor), + (JDIMENSION) (3 * rgroup_height)); + /* Copy true buffer row pointers into the middle of the fake row array */ + MEMCOPY(fake_buffer + rgroup_height, true_buffer, + 3 * rgroup_height * SIZEOF(JSAMPROW)); + /* Fill in the above and below wraparound pointers */ + for (i = 0; i < rgroup_height; i++) { + fake_buffer[i] = true_buffer[2 * rgroup_height + i]; + fake_buffer[4 * rgroup_height + i] = true_buffer[i]; + } + prep->color_buf[ci] = fake_buffer + rgroup_height; + fake_buffer += 5 * rgroup_height; /* point to space for next component */ + } +} + +#endif /* CONTEXT_ROWS_SUPPORTED */ + + +/* + * Initialize preprocessing controller. + */ + +GLOBAL(void) +jinit_c_prep_controller (j_compress_ptr cinfo, boolean need_full_buffer) +{ + my_prep_ptr prep; + int ci; + jpeg_component_info * compptr; + + if (need_full_buffer) /* safety check */ + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + + prep = (my_prep_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_prep_controller)); + cinfo->prep = (struct jpeg_c_prep_controller *) prep; + prep->pub.start_pass = start_pass_prep; + + /* Allocate the color conversion buffer. + * We make the buffer wide enough to allow the downsampler to edge-expand + * horizontally within the buffer, if it so chooses. + */ + if (cinfo->downsample->need_context_rows) { + /* Set up to provide context rows */ +#ifdef CONTEXT_ROWS_SUPPORTED + prep->pub.pre_process_data = pre_process_context; + create_context_buffer(cinfo); +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else { + /* No context, just make it tall enough for one row group */ + prep->pub.pre_process_data = pre_process_data; + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + prep->color_buf[ci] = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) (((long) compptr->width_in_blocks * DCTSIZE * + cinfo->max_h_samp_factor) / compptr->h_samp_factor), + (JDIMENSION) cinfo->max_v_samp_factor); + } + } +} diff --git a/Build/source/extra/jpeg/jcsample.c b/Build/source/extra/jpeg/jcsample.c new file mode 100644 index 00000000000..212ec8757c4 --- /dev/null +++ b/Build/source/extra/jpeg/jcsample.c @@ -0,0 +1,519 @@ +/* + * jcsample.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains downsampling routines. + * + * Downsampling input data is counted in "row groups". A row group + * is defined to be max_v_samp_factor pixel rows of each component, + * from which the downsampler produces v_samp_factor sample rows. + * A single row group is processed in each call to the downsampler module. + * + * The downsampler is responsible for edge-expansion of its output data + * to fill an integral number of DCT blocks horizontally. The source buffer + * may be modified if it is helpful for this purpose (the source buffer is + * allocated wide enough to correspond to the desired output width). + * The caller (the prep controller) is responsible for vertical padding. + * + * The downsampler may request "context rows" by setting need_context_rows + * during startup. In this case, the input arrays will contain at least + * one row group's worth of pixels above and below the passed-in data; + * the caller will create dummy rows at image top and bottom by replicating + * the first or last real pixel row. + * + * An excellent reference for image resampling is + * Digital Image Warping, George Wolberg, 1990. + * Pub. by IEEE Computer Society Press, Los Alamitos, CA. ISBN 0-8186-8944-7. + * + * The downsampling algorithm used here is a simple average of the source + * pixels covered by the output pixel. The hi-falutin sampling literature + * refers to this as a "box filter". In general the characteristics of a box + * filter are not very good, but for the specific cases we normally use (1:1 + * and 2:1 ratios) the box is equivalent to a "triangle filter" which is not + * nearly so bad. If you intend to use other sampling ratios, you'd be well + * advised to improve this code. + * + * A simple input-smoothing capability is provided. This is mainly intended + * for cleaning up color-dithered GIF input files (if you find it inadequate, + * we suggest using an external filtering program such as pnmconvol). When + * enabled, each input pixel P is replaced by a weighted sum of itself and its + * eight neighbors. P's weight is 1-8*SF and each neighbor's weight is SF, + * where SF = (smoothing_factor / 1024). + * Currently, smoothing is only supported for 2h2v sampling factors. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Pointer to routine to downsample a single component */ +typedef JMETHOD(void, downsample1_ptr, + (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY output_data)); + +/* Private subobject */ + +typedef struct { + struct jpeg_downsampler pub; /* public fields */ + + /* Downsampling method pointers, one per component */ + downsample1_ptr methods[MAX_COMPONENTS]; +} my_downsampler; + +typedef my_downsampler * my_downsample_ptr; + + +/* + * Initialize for a downsampling pass. + */ + +METHODDEF(void) +start_pass_downsample (j_compress_ptr cinfo) +{ + /* no work for now */ +} + + +/* + * Expand a component horizontally from width input_cols to width output_cols, + * by duplicating the rightmost samples. + */ + +LOCAL(void) +expand_right_edge (JSAMPARRAY image_data, int num_rows, + JDIMENSION input_cols, JDIMENSION output_cols) +{ + register JSAMPROW ptr; + register JSAMPLE pixval; + register int count; + int row; + int numcols = (int) (output_cols - input_cols); + + if (numcols > 0) { + for (row = 0; row < num_rows; row++) { + ptr = image_data[row] + input_cols; + pixval = ptr[-1]; /* don't need GETJSAMPLE() here */ + for (count = numcols; count > 0; count--) + *ptr++ = pixval; + } + } +} + + +/* + * Do downsampling for a whole row group (all components). + * + * In this version we simply downsample each component independently. + */ + +METHODDEF(void) +sep_downsample (j_compress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_index, + JSAMPIMAGE output_buf, JDIMENSION out_row_group_index) +{ + my_downsample_ptr downsample = (my_downsample_ptr) cinfo->downsample; + int ci; + jpeg_component_info * compptr; + JSAMPARRAY in_ptr, out_ptr; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + in_ptr = input_buf[ci] + in_row_index; + out_ptr = output_buf[ci] + (out_row_group_index * compptr->v_samp_factor); + (*downsample->methods[ci]) (cinfo, compptr, in_ptr, out_ptr); + } +} + + +/* + * Downsample pixel values of a single component. + * One row group is processed per call. + * This version handles arbitrary integral sampling ratios, without smoothing. + * Note that this version is not actually used for customary sampling ratios. + */ + +METHODDEF(void) +int_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY output_data) +{ + int inrow, outrow, h_expand, v_expand, numpix, numpix2, h, v; + JDIMENSION outcol, outcol_h; /* outcol_h == outcol*h_expand */ + JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; + JSAMPROW inptr, outptr; + INT32 outvalue; + + h_expand = cinfo->max_h_samp_factor / compptr->h_samp_factor; + v_expand = cinfo->max_v_samp_factor / compptr->v_samp_factor; + numpix = h_expand * v_expand; + numpix2 = numpix/2; + + /* Expand input data enough to let all the output samples be generated + * by the standard loop. Special-casing padded output would be more + * efficient. + */ + expand_right_edge(input_data, cinfo->max_v_samp_factor, + cinfo->image_width, output_cols * h_expand); + + inrow = 0; + for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { + outptr = output_data[outrow]; + for (outcol = 0, outcol_h = 0; outcol < output_cols; + outcol++, outcol_h += h_expand) { + outvalue = 0; + for (v = 0; v < v_expand; v++) { + inptr = input_data[inrow+v] + outcol_h; + for (h = 0; h < h_expand; h++) { + outvalue += (INT32) GETJSAMPLE(*inptr++); + } + } + *outptr++ = (JSAMPLE) ((outvalue + numpix2) / numpix); + } + inrow += v_expand; + } +} + + +/* + * Downsample pixel values of a single component. + * This version handles the special case of a full-size component, + * without smoothing. + */ + +METHODDEF(void) +fullsize_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY output_data) +{ + /* Copy the data */ + jcopy_sample_rows(input_data, 0, output_data, 0, + cinfo->max_v_samp_factor, cinfo->image_width); + /* Edge-expand */ + expand_right_edge(output_data, cinfo->max_v_samp_factor, + cinfo->image_width, compptr->width_in_blocks * DCTSIZE); +} + + +/* + * Downsample pixel values of a single component. + * This version handles the common case of 2:1 horizontal and 1:1 vertical, + * without smoothing. + * + * A note about the "bias" calculations: when rounding fractional values to + * integer, we do not want to always round 0.5 up to the next integer. + * If we did that, we'd introduce a noticeable bias towards larger values. + * Instead, this code is arranged so that 0.5 will be rounded up or down at + * alternate pixel locations (a simple ordered dither pattern). + */ + +METHODDEF(void) +h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY output_data) +{ + int outrow; + JDIMENSION outcol; + JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; + register JSAMPROW inptr, outptr; + register int bias; + + /* Expand input data enough to let all the output samples be generated + * by the standard loop. Special-casing padded output would be more + * efficient. + */ + expand_right_edge(input_data, cinfo->max_v_samp_factor, + cinfo->image_width, output_cols * 2); + + for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { + outptr = output_data[outrow]; + inptr = input_data[outrow]; + bias = 0; /* bias = 0,1,0,1,... for successive samples */ + for (outcol = 0; outcol < output_cols; outcol++) { + *outptr++ = (JSAMPLE) ((GETJSAMPLE(*inptr) + GETJSAMPLE(inptr[1]) + + bias) >> 1); + bias ^= 1; /* 0=>1, 1=>0 */ + inptr += 2; + } + } +} + + +/* + * Downsample pixel values of a single component. + * This version handles the standard case of 2:1 horizontal and 2:1 vertical, + * without smoothing. + */ + +METHODDEF(void) +h2v2_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY output_data) +{ + int inrow, outrow; + JDIMENSION outcol; + JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; + register JSAMPROW inptr0, inptr1, outptr; + register int bias; + + /* Expand input data enough to let all the output samples be generated + * by the standard loop. Special-casing padded output would be more + * efficient. + */ + expand_right_edge(input_data, cinfo->max_v_samp_factor, + cinfo->image_width, output_cols * 2); + + inrow = 0; + for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { + outptr = output_data[outrow]; + inptr0 = input_data[inrow]; + inptr1 = input_data[inrow+1]; + bias = 1; /* bias = 1,2,1,2,... for successive samples */ + for (outcol = 0; outcol < output_cols; outcol++) { + *outptr++ = (JSAMPLE) ((GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]) + + bias) >> 2); + bias ^= 3; /* 1=>2, 2=>1 */ + inptr0 += 2; inptr1 += 2; + } + inrow += 2; + } +} + + +#ifdef INPUT_SMOOTHING_SUPPORTED + +/* + * Downsample pixel values of a single component. + * This version handles the standard case of 2:1 horizontal and 2:1 vertical, + * with smoothing. One row of context is required. + */ + +METHODDEF(void) +h2v2_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY output_data) +{ + int inrow, outrow; + JDIMENSION colctr; + JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; + register JSAMPROW inptr0, inptr1, above_ptr, below_ptr, outptr; + INT32 membersum, neighsum, memberscale, neighscale; + + /* Expand input data enough to let all the output samples be generated + * by the standard loop. Special-casing padded output would be more + * efficient. + */ + expand_right_edge(input_data - 1, cinfo->max_v_samp_factor + 2, + cinfo->image_width, output_cols * 2); + + /* We don't bother to form the individual "smoothed" input pixel values; + * we can directly compute the output which is the average of the four + * smoothed values. Each of the four member pixels contributes a fraction + * (1-8*SF) to its own smoothed image and a fraction SF to each of the three + * other smoothed pixels, therefore a total fraction (1-5*SF)/4 to the final + * output. The four corner-adjacent neighbor pixels contribute a fraction + * SF to just one smoothed pixel, or SF/4 to the final output; while the + * eight edge-adjacent neighbors contribute SF to each of two smoothed + * pixels, or SF/2 overall. In order to use integer arithmetic, these + * factors are scaled by 2^16 = 65536. + * Also recall that SF = smoothing_factor / 1024. + */ + + memberscale = 16384 - cinfo->smoothing_factor * 80; /* scaled (1-5*SF)/4 */ + neighscale = cinfo->smoothing_factor * 16; /* scaled SF/4 */ + + inrow = 0; + for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { + outptr = output_data[outrow]; + inptr0 = input_data[inrow]; + inptr1 = input_data[inrow+1]; + above_ptr = input_data[inrow-1]; + below_ptr = input_data[inrow+2]; + + /* Special case for first column: pretend column -1 is same as column 0 */ + membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); + neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + + GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + + GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[2]) + + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[2]); + neighsum += neighsum; + neighsum += GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[2]) + + GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[2]); + membersum = membersum * memberscale + neighsum * neighscale; + *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); + inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2; + + for (colctr = output_cols - 2; colctr > 0; colctr--) { + /* sum of pixels directly mapped to this output element */ + membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); + /* sum of edge-neighbor pixels */ + neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + + GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + + GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[2]) + + GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[2]); + /* The edge-neighbors count twice as much as corner-neighbors */ + neighsum += neighsum; + /* Add in the corner-neighbors */ + neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[2]) + + GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[2]); + /* form final output scaled up by 2^16 */ + membersum = membersum * memberscale + neighsum * neighscale; + /* round, descale and output it */ + *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); + inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2; + } + + /* Special case for last column */ + membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + + GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); + neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + + GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + + GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[1]) + + GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[1]); + neighsum += neighsum; + neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[1]) + + GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[1]); + membersum = membersum * memberscale + neighsum * neighscale; + *outptr = (JSAMPLE) ((membersum + 32768) >> 16); + + inrow += 2; + } +} + + +/* + * Downsample pixel values of a single component. + * This version handles the special case of a full-size component, + * with smoothing. One row of context is required. + */ + +METHODDEF(void) +fullsize_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr, + JSAMPARRAY input_data, JSAMPARRAY output_data) +{ + int outrow; + JDIMENSION colctr; + JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; + register JSAMPROW inptr, above_ptr, below_ptr, outptr; + INT32 membersum, neighsum, memberscale, neighscale; + int colsum, lastcolsum, nextcolsum; + + /* Expand input data enough to let all the output samples be generated + * by the standard loop. Special-casing padded output would be more + * efficient. + */ + expand_right_edge(input_data - 1, cinfo->max_v_samp_factor + 2, + cinfo->image_width, output_cols); + + /* Each of the eight neighbor pixels contributes a fraction SF to the + * smoothed pixel, while the main pixel contributes (1-8*SF). In order + * to use integer arithmetic, these factors are multiplied by 2^16 = 65536. + * Also recall that SF = smoothing_factor / 1024. + */ + + memberscale = 65536L - cinfo->smoothing_factor * 512L; /* scaled 1-8*SF */ + neighscale = cinfo->smoothing_factor * 64; /* scaled SF */ + + for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { + outptr = output_data[outrow]; + inptr = input_data[outrow]; + above_ptr = input_data[outrow-1]; + below_ptr = input_data[outrow+1]; + + /* Special case for first column */ + colsum = GETJSAMPLE(*above_ptr++) + GETJSAMPLE(*below_ptr++) + + GETJSAMPLE(*inptr); + membersum = GETJSAMPLE(*inptr++); + nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) + + GETJSAMPLE(*inptr); + neighsum = colsum + (colsum - membersum) + nextcolsum; + membersum = membersum * memberscale + neighsum * neighscale; + *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); + lastcolsum = colsum; colsum = nextcolsum; + + for (colctr = output_cols - 2; colctr > 0; colctr--) { + membersum = GETJSAMPLE(*inptr++); + above_ptr++; below_ptr++; + nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) + + GETJSAMPLE(*inptr); + neighsum = lastcolsum + (colsum - membersum) + nextcolsum; + membersum = membersum * memberscale + neighsum * neighscale; + *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); + lastcolsum = colsum; colsum = nextcolsum; + } + + /* Special case for last column */ + membersum = GETJSAMPLE(*inptr); + neighsum = lastcolsum + (colsum - membersum) + colsum; + membersum = membersum * memberscale + neighsum * neighscale; + *outptr = (JSAMPLE) ((membersum + 32768) >> 16); + + } +} + +#endif /* INPUT_SMOOTHING_SUPPORTED */ + + +/* + * Module initialization routine for downsampling. + * Note that we must select a routine for each component. + */ + +GLOBAL(void) +jinit_downsampler (j_compress_ptr cinfo) +{ + my_downsample_ptr downsample; + int ci; + jpeg_component_info * compptr; + boolean smoothok = TRUE; + + downsample = (my_downsample_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_downsampler)); + cinfo->downsample = (struct jpeg_downsampler *) downsample; + downsample->pub.start_pass = start_pass_downsample; + downsample->pub.downsample = sep_downsample; + downsample->pub.need_context_rows = FALSE; + + if (cinfo->CCIR601_sampling) + ERREXIT(cinfo, JERR_CCIR601_NOTIMPL); + + /* Verify we can handle the sampling factors, and set up method pointers */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + if (compptr->h_samp_factor == cinfo->max_h_samp_factor && + compptr->v_samp_factor == cinfo->max_v_samp_factor) { +#ifdef INPUT_SMOOTHING_SUPPORTED + if (cinfo->smoothing_factor) { + downsample->methods[ci] = fullsize_smooth_downsample; + downsample->pub.need_context_rows = TRUE; + } else +#endif + downsample->methods[ci] = fullsize_downsample; + } else if (compptr->h_samp_factor * 2 == cinfo->max_h_samp_factor && + compptr->v_samp_factor == cinfo->max_v_samp_factor) { + smoothok = FALSE; + downsample->methods[ci] = h2v1_downsample; + } else if (compptr->h_samp_factor * 2 == cinfo->max_h_samp_factor && + compptr->v_samp_factor * 2 == cinfo->max_v_samp_factor) { +#ifdef INPUT_SMOOTHING_SUPPORTED + if (cinfo->smoothing_factor) { + downsample->methods[ci] = h2v2_smooth_downsample; + downsample->pub.need_context_rows = TRUE; + } else +#endif + downsample->methods[ci] = h2v2_downsample; + } else if ((cinfo->max_h_samp_factor % compptr->h_samp_factor) == 0 && + (cinfo->max_v_samp_factor % compptr->v_samp_factor) == 0) { + smoothok = FALSE; + downsample->methods[ci] = int_downsample; + } else + ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL); + } + +#ifdef INPUT_SMOOTHING_SUPPORTED + if (cinfo->smoothing_factor && !smoothok) + TRACEMS(cinfo, 0, JTRC_SMOOTH_NOTIMPL); +#endif +} diff --git a/Build/source/extra/jpeg/jctrans.c b/Build/source/extra/jpeg/jctrans.c new file mode 100644 index 00000000000..0e6d70769df --- /dev/null +++ b/Build/source/extra/jpeg/jctrans.c @@ -0,0 +1,388 @@ +/* + * jctrans.c + * + * Copyright (C) 1995-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains library routines for transcoding compression, + * that is, writing raw DCT coefficient arrays to an output JPEG file. + * The routines in jcapimin.c will also be needed by a transcoder. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Forward declarations */ +LOCAL(void) transencode_master_selection + JPP((j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays)); +LOCAL(void) transencode_coef_controller + JPP((j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays)); + + +/* + * Compression initialization for writing raw-coefficient data. + * Before calling this, all parameters and a data destination must be set up. + * Call jpeg_finish_compress() to actually write the data. + * + * The number of passed virtual arrays must match cinfo->num_components. + * Note that the virtual arrays need not be filled or even realized at + * the time write_coefficients is called; indeed, if the virtual arrays + * were requested from this compression object's memory manager, they + * typically will be realized during this routine and filled afterwards. + */ + +GLOBAL(void) +jpeg_write_coefficients (j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays) +{ + if (cinfo->global_state != CSTATE_START) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + /* Mark all tables to be written */ + jpeg_suppress_tables(cinfo, FALSE); + /* (Re)initialize error mgr and destination modules */ + (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); + (*cinfo->dest->init_destination) (cinfo); + /* Perform master selection of active modules */ + transencode_master_selection(cinfo, coef_arrays); + /* Wait for jpeg_finish_compress() call */ + cinfo->next_scanline = 0; /* so jpeg_write_marker works */ + cinfo->global_state = CSTATE_WRCOEFS; +} + + +/* + * Initialize the compression object with default parameters, + * then copy from the source object all parameters needed for lossless + * transcoding. Parameters that can be varied without loss (such as + * scan script and Huffman optimization) are left in their default states. + */ + +GLOBAL(void) +jpeg_copy_critical_parameters (j_decompress_ptr srcinfo, + j_compress_ptr dstinfo) +{ + JQUANT_TBL ** qtblptr; + jpeg_component_info *incomp, *outcomp; + JQUANT_TBL *c_quant, *slot_quant; + int tblno, ci, coefi; + + /* Safety check to ensure start_compress not called yet. */ + if (dstinfo->global_state != CSTATE_START) + ERREXIT1(dstinfo, JERR_BAD_STATE, dstinfo->global_state); + /* Copy fundamental image dimensions */ + dstinfo->image_width = srcinfo->image_width; + dstinfo->image_height = srcinfo->image_height; + dstinfo->input_components = srcinfo->num_components; + dstinfo->in_color_space = srcinfo->jpeg_color_space; + /* Initialize all parameters to default values */ + jpeg_set_defaults(dstinfo); + /* jpeg_set_defaults may choose wrong colorspace, eg YCbCr if input is RGB. + * Fix it to get the right header markers for the image colorspace. + */ + jpeg_set_colorspace(dstinfo, srcinfo->jpeg_color_space); + dstinfo->data_precision = srcinfo->data_precision; + dstinfo->CCIR601_sampling = srcinfo->CCIR601_sampling; + /* Copy the source's quantization tables. */ + for (tblno = 0; tblno < NUM_QUANT_TBLS; tblno++) { + if (srcinfo->quant_tbl_ptrs[tblno] != NULL) { + qtblptr = & dstinfo->quant_tbl_ptrs[tblno]; + if (*qtblptr == NULL) + *qtblptr = jpeg_alloc_quant_table((j_common_ptr) dstinfo); + MEMCOPY((*qtblptr)->quantval, + srcinfo->quant_tbl_ptrs[tblno]->quantval, + SIZEOF((*qtblptr)->quantval)); + (*qtblptr)->sent_table = FALSE; + } + } + /* Copy the source's per-component info. + * Note we assume jpeg_set_defaults has allocated the dest comp_info array. + */ + dstinfo->num_components = srcinfo->num_components; + if (dstinfo->num_components < 1 || dstinfo->num_components > MAX_COMPONENTS) + ERREXIT2(dstinfo, JERR_COMPONENT_COUNT, dstinfo->num_components, + MAX_COMPONENTS); + for (ci = 0, incomp = srcinfo->comp_info, outcomp = dstinfo->comp_info; + ci < dstinfo->num_components; ci++, incomp++, outcomp++) { + outcomp->component_id = incomp->component_id; + outcomp->h_samp_factor = incomp->h_samp_factor; + outcomp->v_samp_factor = incomp->v_samp_factor; + outcomp->quant_tbl_no = incomp->quant_tbl_no; + /* Make sure saved quantization table for component matches the qtable + * slot. If not, the input file re-used this qtable slot. + * IJG encoder currently cannot duplicate this. + */ + tblno = outcomp->quant_tbl_no; + if (tblno < 0 || tblno >= NUM_QUANT_TBLS || + srcinfo->quant_tbl_ptrs[tblno] == NULL) + ERREXIT1(dstinfo, JERR_NO_QUANT_TABLE, tblno); + slot_quant = srcinfo->quant_tbl_ptrs[tblno]; + c_quant = incomp->quant_table; + if (c_quant != NULL) { + for (coefi = 0; coefi < DCTSIZE2; coefi++) { + if (c_quant->quantval[coefi] != slot_quant->quantval[coefi]) + ERREXIT1(dstinfo, JERR_MISMATCHED_QUANT_TABLE, tblno); + } + } + /* Note: we do not copy the source's Huffman table assignments; + * instead we rely on jpeg_set_colorspace to have made a suitable choice. + */ + } + /* Also copy JFIF version and resolution information, if available. + * Strictly speaking this isn't "critical" info, but it's nearly + * always appropriate to copy it if available. In particular, + * if the application chooses to copy JFIF 1.02 extension markers from + * the source file, we need to copy the version to make sure we don't + * emit a file that has 1.02 extensions but a claimed version of 1.01. + * We will *not*, however, copy version info from mislabeled "2.01" files. + */ + if (srcinfo->saw_JFIF_marker) { + if (srcinfo->JFIF_major_version == 1) { + dstinfo->JFIF_major_version = srcinfo->JFIF_major_version; + dstinfo->JFIF_minor_version = srcinfo->JFIF_minor_version; + } + dstinfo->density_unit = srcinfo->density_unit; + dstinfo->X_density = srcinfo->X_density; + dstinfo->Y_density = srcinfo->Y_density; + } +} + + +/* + * Master selection of compression modules for transcoding. + * This substitutes for jcinit.c's initialization of the full compressor. + */ + +LOCAL(void) +transencode_master_selection (j_compress_ptr cinfo, + jvirt_barray_ptr * coef_arrays) +{ + /* Although we don't actually use input_components for transcoding, + * jcmaster.c's initial_setup will complain if input_components is 0. + */ + cinfo->input_components = 1; + /* Initialize master control (includes parameter checking/processing) */ + jinit_c_master_control(cinfo, TRUE /* transcode only */); + + /* Entropy encoding: either Huffman or arithmetic coding. */ + if (cinfo->arith_code) { + ERREXIT(cinfo, JERR_ARITH_NOTIMPL); + } else { + if (cinfo->progressive_mode) { +#ifdef C_PROGRESSIVE_SUPPORTED + jinit_phuff_encoder(cinfo); +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else + jinit_huff_encoder(cinfo); + } + + /* We need a special coefficient buffer controller. */ + transencode_coef_controller(cinfo, coef_arrays); + + jinit_marker_writer(cinfo); + + /* We can now tell the memory manager to allocate virtual arrays. */ + (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); + + /* Write the datastream header (SOI, JFIF) immediately. + * Frame and scan headers are postponed till later. + * This lets application insert special markers after the SOI. + */ + (*cinfo->marker->write_file_header) (cinfo); +} + + +/* + * The rest of this file is a special implementation of the coefficient + * buffer controller. This is similar to jccoefct.c, but it handles only + * output from presupplied virtual arrays. Furthermore, we generate any + * dummy padding blocks on-the-fly rather than expecting them to be present + * in the arrays. + */ + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_c_coef_controller pub; /* public fields */ + + JDIMENSION iMCU_row_num; /* iMCU row # within image */ + JDIMENSION mcu_ctr; /* counts MCUs processed in current row */ + int MCU_vert_offset; /* counts MCU rows within iMCU row */ + int MCU_rows_per_iMCU_row; /* number of such rows needed */ + + /* Virtual block array for each component. */ + jvirt_barray_ptr * whole_image; + + /* Workspace for constructing dummy blocks at right/bottom edges. */ + JBLOCKROW dummy_buffer[C_MAX_BLOCKS_IN_MCU]; +} my_coef_controller; + +typedef my_coef_controller * my_coef_ptr; + + +LOCAL(void) +start_iMCU_row (j_compress_ptr cinfo) +/* Reset within-iMCU-row counters for a new row */ +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + + /* In an interleaved scan, an MCU row is the same as an iMCU row. + * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows. + * But at the bottom of the image, process only what's left. + */ + if (cinfo->comps_in_scan > 1) { + coef->MCU_rows_per_iMCU_row = 1; + } else { + if (coef->iMCU_row_num < (cinfo->total_iMCU_rows-1)) + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; + else + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height; + } + + coef->mcu_ctr = 0; + coef->MCU_vert_offset = 0; +} + + +/* + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_coef (j_compress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + + if (pass_mode != JBUF_CRANK_DEST) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + + coef->iMCU_row_num = 0; + start_iMCU_row(cinfo); +} + + +/* + * Process some data. + * We process the equivalent of one fully interleaved MCU row ("iMCU" row) + * per call, ie, v_samp_factor block rows for each component in the scan. + * The data is obtained from the virtual arrays and fed to the entropy coder. + * Returns TRUE if the iMCU row is completed, FALSE if suspended. + * + * NB: input_buf is ignored; it is likely to be a NULL pointer. + */ + +METHODDEF(boolean) +compress_output (j_compress_ptr cinfo, JSAMPIMAGE input_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION MCU_col_num; /* index of current MCU within row */ + JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + int blkn, ci, xindex, yindex, yoffset, blockcnt; + JDIMENSION start_col; + JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; + JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU]; + JBLOCKROW buffer_ptr; + jpeg_component_info *compptr; + + /* Align the virtual buffers for the components used in this scan. */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + buffer[ci] = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index], + coef->iMCU_row_num * compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, FALSE); + } + + /* Loop to process one whole iMCU row */ + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + yoffset++) { + for (MCU_col_num = coef->mcu_ctr; MCU_col_num < cinfo->MCUs_per_row; + MCU_col_num++) { + /* Construct list of pointers to DCT blocks belonging to this MCU */ + blkn = 0; /* index of current DCT block within MCU */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + start_col = MCU_col_num * compptr->MCU_width; + blockcnt = (MCU_col_num < last_MCU_col) ? compptr->MCU_width + : compptr->last_col_width; + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + if (coef->iMCU_row_num < last_iMCU_row || + yindex+yoffset < compptr->last_row_height) { + /* Fill in pointers to real blocks in this row */ + buffer_ptr = buffer[ci][yindex+yoffset] + start_col; + for (xindex = 0; xindex < blockcnt; xindex++) + MCU_buffer[blkn++] = buffer_ptr++; + } else { + /* At bottom of image, need a whole row of dummy blocks */ + xindex = 0; + } + /* Fill in any dummy blocks needed in this row. + * Dummy blocks are filled in the same way as in jccoefct.c: + * all zeroes in the AC entries, DC entries equal to previous + * block's DC value. The init routine has already zeroed the + * AC entries, so we need only set the DC entries correctly. + */ + for (; xindex < compptr->MCU_width; xindex++) { + MCU_buffer[blkn] = coef->dummy_buffer[blkn]; + MCU_buffer[blkn][0][0] = MCU_buffer[blkn-1][0][0]; + blkn++; + } + } + } + /* Try to write the MCU. */ + if (! (*cinfo->entropy->encode_mcu) (cinfo, MCU_buffer)) { + /* Suspension forced; update state counters and exit */ + coef->MCU_vert_offset = yoffset; + coef->mcu_ctr = MCU_col_num; + return FALSE; + } + } + /* Completed an MCU row, but perhaps not an iMCU row */ + coef->mcu_ctr = 0; + } + /* Completed the iMCU row, advance counters for next one */ + coef->iMCU_row_num++; + start_iMCU_row(cinfo); + return TRUE; +} + + +/* + * Initialize coefficient buffer controller. + * + * Each passed coefficient array must be the right size for that + * coefficient: width_in_blocks wide and height_in_blocks high, + * with unitheight at least v_samp_factor. + */ + +LOCAL(void) +transencode_coef_controller (j_compress_ptr cinfo, + jvirt_barray_ptr * coef_arrays) +{ + my_coef_ptr coef; + JBLOCKROW buffer; + int i; + + coef = (my_coef_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_coef_controller)); + cinfo->coef = (struct jpeg_c_coef_controller *) coef; + coef->pub.start_pass = start_pass_coef; + coef->pub.compress_data = compress_output; + + /* Save pointer to virtual arrays */ + coef->whole_image = coef_arrays; + + /* Allocate and pre-zero space for dummy DCT blocks. */ + buffer = (JBLOCKROW) + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); + jzero_far((void FAR *) buffer, C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); + for (i = 0; i < C_MAX_BLOCKS_IN_MCU; i++) { + coef->dummy_buffer[i] = buffer + i; + } +} diff --git a/Build/source/extra/jpeg/jdapimin.c b/Build/source/extra/jpeg/jdapimin.c new file mode 100644 index 00000000000..cadb59fce3a --- /dev/null +++ b/Build/source/extra/jpeg/jdapimin.c @@ -0,0 +1,395 @@ +/* + * jdapimin.c + * + * Copyright (C) 1994-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains application interface code for the decompression half + * of the JPEG library. These are the "minimum" API routines that may be + * needed in either the normal full-decompression case or the + * transcoding-only case. + * + * Most of the routines intended to be called directly by an application + * are in this file or in jdapistd.c. But also see jcomapi.c for routines + * shared by compression and decompression, and jdtrans.c for the transcoding + * case. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * Initialization of a JPEG decompression object. + * The error manager must already be set up (in case memory manager fails). + */ + +GLOBAL(void) +jpeg_CreateDecompress (j_decompress_ptr cinfo, int version, size_t structsize) +{ + int i; + + /* Guard against version mismatches between library and caller. */ + cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */ + if (version != JPEG_LIB_VERSION) + ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version); + if (structsize != SIZEOF(struct jpeg_decompress_struct)) + ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, + (int) SIZEOF(struct jpeg_decompress_struct), (int) structsize); + + /* For debugging purposes, we zero the whole master structure. + * But the application has already set the err pointer, and may have set + * client_data, so we have to save and restore those fields. + * Note: if application hasn't set client_data, tools like Purify may + * complain here. + */ + { + struct jpeg_error_mgr * err = cinfo->err; + void * client_data = cinfo->client_data; /* ignore Purify complaint here */ + MEMZERO(cinfo, SIZEOF(struct jpeg_decompress_struct)); + cinfo->err = err; + cinfo->client_data = client_data; + } + cinfo->is_decompressor = TRUE; + + /* Initialize a memory manager instance for this object */ + jinit_memory_mgr((j_common_ptr) cinfo); + + /* Zero out pointers to permanent structures. */ + cinfo->progress = NULL; + cinfo->src = NULL; + + for (i = 0; i < NUM_QUANT_TBLS; i++) + cinfo->quant_tbl_ptrs[i] = NULL; + + for (i = 0; i < NUM_HUFF_TBLS; i++) { + cinfo->dc_huff_tbl_ptrs[i] = NULL; + cinfo->ac_huff_tbl_ptrs[i] = NULL; + } + + /* Initialize marker processor so application can override methods + * for COM, APPn markers before calling jpeg_read_header. + */ + cinfo->marker_list = NULL; + jinit_marker_reader(cinfo); + + /* And initialize the overall input controller. */ + jinit_input_controller(cinfo); + + /* OK, I'm ready */ + cinfo->global_state = DSTATE_START; +} + + +/* + * Destruction of a JPEG decompression object + */ + +GLOBAL(void) +jpeg_destroy_decompress (j_decompress_ptr cinfo) +{ + jpeg_destroy((j_common_ptr) cinfo); /* use common routine */ +} + + +/* + * Abort processing of a JPEG decompression operation, + * but don't destroy the object itself. + */ + +GLOBAL(void) +jpeg_abort_decompress (j_decompress_ptr cinfo) +{ + jpeg_abort((j_common_ptr) cinfo); /* use common routine */ +} + + +/* + * Set default decompression parameters. + */ + +LOCAL(void) +default_decompress_parms (j_decompress_ptr cinfo) +{ + /* Guess the input colorspace, and set output colorspace accordingly. */ + /* (Wish JPEG committee had provided a real way to specify this...) */ + /* Note application may override our guesses. */ + switch (cinfo->num_components) { + case 1: + cinfo->jpeg_color_space = JCS_GRAYSCALE; + cinfo->out_color_space = JCS_GRAYSCALE; + break; + + case 3: + if (cinfo->saw_JFIF_marker) { + cinfo->jpeg_color_space = JCS_YCbCr; /* JFIF implies YCbCr */ + } else if (cinfo->saw_Adobe_marker) { + switch (cinfo->Adobe_transform) { + case 0: + cinfo->jpeg_color_space = JCS_RGB; + break; + case 1: + cinfo->jpeg_color_space = JCS_YCbCr; + break; + default: + WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); + cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ + break; + } + } else { + /* Saw no special markers, try to guess from the component IDs */ + int cid0 = cinfo->comp_info[0].component_id; + int cid1 = cinfo->comp_info[1].component_id; + int cid2 = cinfo->comp_info[2].component_id; + + if (cid0 == 1 && cid1 == 2 && cid2 == 3) + cinfo->jpeg_color_space = JCS_YCbCr; /* assume JFIF w/out marker */ + else if (cid0 == 82 && cid1 == 71 && cid2 == 66) + cinfo->jpeg_color_space = JCS_RGB; /* ASCII 'R', 'G', 'B' */ + else { + TRACEMS3(cinfo, 1, JTRC_UNKNOWN_IDS, cid0, cid1, cid2); + cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ + } + } + /* Always guess RGB is proper output colorspace. */ + cinfo->out_color_space = JCS_RGB; + break; + + case 4: + if (cinfo->saw_Adobe_marker) { + switch (cinfo->Adobe_transform) { + case 0: + cinfo->jpeg_color_space = JCS_CMYK; + break; + case 2: + cinfo->jpeg_color_space = JCS_YCCK; + break; + default: + WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); + cinfo->jpeg_color_space = JCS_YCCK; /* assume it's YCCK */ + break; + } + } else { + /* No special markers, assume straight CMYK. */ + cinfo->jpeg_color_space = JCS_CMYK; + } + cinfo->out_color_space = JCS_CMYK; + break; + + default: + cinfo->jpeg_color_space = JCS_UNKNOWN; + cinfo->out_color_space = JCS_UNKNOWN; + break; + } + + /* Set defaults for other decompression parameters. */ + cinfo->scale_num = 1; /* 1:1 scaling */ + cinfo->scale_denom = 1; + cinfo->output_gamma = 1.0; + cinfo->buffered_image = FALSE; + cinfo->raw_data_out = FALSE; + cinfo->dct_method = JDCT_DEFAULT; + cinfo->do_fancy_upsampling = TRUE; + cinfo->do_block_smoothing = TRUE; + cinfo->quantize_colors = FALSE; + /* We set these in case application only sets quantize_colors. */ + cinfo->dither_mode = JDITHER_FS; +#ifdef QUANT_2PASS_SUPPORTED + cinfo->two_pass_quantize = TRUE; +#else + cinfo->two_pass_quantize = FALSE; +#endif + cinfo->desired_number_of_colors = 256; + cinfo->colormap = NULL; + /* Initialize for no mode change in buffered-image mode. */ + cinfo->enable_1pass_quant = FALSE; + cinfo->enable_external_quant = FALSE; + cinfo->enable_2pass_quant = FALSE; +} + + +/* + * Decompression startup: read start of JPEG datastream to see what's there. + * Need only initialize JPEG object and supply a data source before calling. + * + * This routine will read as far as the first SOS marker (ie, actual start of + * compressed data), and will save all tables and parameters in the JPEG + * object. It will also initialize the decompression parameters to default + * values, and finally return JPEG_HEADER_OK. On return, the application may + * adjust the decompression parameters and then call jpeg_start_decompress. + * (Or, if the application only wanted to determine the image parameters, + * the data need not be decompressed. In that case, call jpeg_abort or + * jpeg_destroy to release any temporary space.) + * If an abbreviated (tables only) datastream is presented, the routine will + * return JPEG_HEADER_TABLES_ONLY upon reaching EOI. The application may then + * re-use the JPEG object to read the abbreviated image datastream(s). + * It is unnecessary (but OK) to call jpeg_abort in this case. + * The JPEG_SUSPENDED return code only occurs if the data source module + * requests suspension of the decompressor. In this case the application + * should load more source data and then re-call jpeg_read_header to resume + * processing. + * If a non-suspending data source is used and require_image is TRUE, then the + * return code need not be inspected since only JPEG_HEADER_OK is possible. + * + * This routine is now just a front end to jpeg_consume_input, with some + * extra error checking. + */ + +GLOBAL(int) +jpeg_read_header (j_decompress_ptr cinfo, boolean require_image) +{ + int retcode; + + if (cinfo->global_state != DSTATE_START && + cinfo->global_state != DSTATE_INHEADER) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + retcode = jpeg_consume_input(cinfo); + + switch (retcode) { + case JPEG_REACHED_SOS: + retcode = JPEG_HEADER_OK; + break; + case JPEG_REACHED_EOI: + if (require_image) /* Complain if application wanted an image */ + ERREXIT(cinfo, JERR_NO_IMAGE); + /* Reset to start state; it would be safer to require the application to + * call jpeg_abort, but we can't change it now for compatibility reasons. + * A side effect is to free any temporary memory (there shouldn't be any). + */ + jpeg_abort((j_common_ptr) cinfo); /* sets state = DSTATE_START */ + retcode = JPEG_HEADER_TABLES_ONLY; + break; + case JPEG_SUSPENDED: + /* no work */ + break; + } + + return retcode; +} + + +/* + * Consume data in advance of what the decompressor requires. + * This can be called at any time once the decompressor object has + * been created and a data source has been set up. + * + * This routine is essentially a state machine that handles a couple + * of critical state-transition actions, namely initial setup and + * transition from header scanning to ready-for-start_decompress. + * All the actual input is done via the input controller's consume_input + * method. + */ + +GLOBAL(int) +jpeg_consume_input (j_decompress_ptr cinfo) +{ + int retcode = JPEG_SUSPENDED; + + /* NB: every possible DSTATE value should be listed in this switch */ + switch (cinfo->global_state) { + case DSTATE_START: + /* Start-of-datastream actions: reset appropriate modules */ + (*cinfo->inputctl->reset_input_controller) (cinfo); + /* Initialize application's data source module */ + (*cinfo->src->init_source) (cinfo); + cinfo->global_state = DSTATE_INHEADER; + /*FALLTHROUGH*/ + case DSTATE_INHEADER: + retcode = (*cinfo->inputctl->consume_input) (cinfo); + if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */ + /* Set up default parameters based on header data */ + default_decompress_parms(cinfo); + /* Set global state: ready for start_decompress */ + cinfo->global_state = DSTATE_READY; + } + break; + case DSTATE_READY: + /* Can't advance past first SOS until start_decompress is called */ + retcode = JPEG_REACHED_SOS; + break; + case DSTATE_PRELOAD: + case DSTATE_PRESCAN: + case DSTATE_SCANNING: + case DSTATE_RAW_OK: + case DSTATE_BUFIMAGE: + case DSTATE_BUFPOST: + case DSTATE_STOPPING: + retcode = (*cinfo->inputctl->consume_input) (cinfo); + break; + default: + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + } + return retcode; +} + + +/* + * Have we finished reading the input file? + */ + +GLOBAL(boolean) +jpeg_input_complete (j_decompress_ptr cinfo) +{ + /* Check for valid jpeg object */ + if (cinfo->global_state < DSTATE_START || + cinfo->global_state > DSTATE_STOPPING) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + return cinfo->inputctl->eoi_reached; +} + + +/* + * Is there more than one scan? + */ + +GLOBAL(boolean) +jpeg_has_multiple_scans (j_decompress_ptr cinfo) +{ + /* Only valid after jpeg_read_header completes */ + if (cinfo->global_state < DSTATE_READY || + cinfo->global_state > DSTATE_STOPPING) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + return cinfo->inputctl->has_multiple_scans; +} + + +/* + * Finish JPEG decompression. + * + * This will normally just verify the file trailer and release temp storage. + * + * Returns FALSE if suspended. The return value need be inspected only if + * a suspending data source is used. + */ + +GLOBAL(boolean) +jpeg_finish_decompress (j_decompress_ptr cinfo) +{ + if ((cinfo->global_state == DSTATE_SCANNING || + cinfo->global_state == DSTATE_RAW_OK) && ! cinfo->buffered_image) { + /* Terminate final pass of non-buffered mode */ + if (cinfo->output_scanline < cinfo->output_height) + ERREXIT(cinfo, JERR_TOO_LITTLE_DATA); + (*cinfo->master->finish_output_pass) (cinfo); + cinfo->global_state = DSTATE_STOPPING; + } else if (cinfo->global_state == DSTATE_BUFIMAGE) { + /* Finishing after a buffered-image operation */ + cinfo->global_state = DSTATE_STOPPING; + } else if (cinfo->global_state != DSTATE_STOPPING) { + /* STOPPING = repeat call after a suspension, anything else is error */ + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + } + /* Read until EOI */ + while (! cinfo->inputctl->eoi_reached) { + if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED) + return FALSE; /* Suspend, come back later */ + } + /* Do final cleanup */ + (*cinfo->src->term_source) (cinfo); + /* We can use jpeg_abort to release memory and reset global_state */ + jpeg_abort((j_common_ptr) cinfo); + return TRUE; +} diff --git a/Build/source/extra/jpeg/jdapistd.c b/Build/source/extra/jpeg/jdapistd.c new file mode 100644 index 00000000000..c8e3fa0c35d --- /dev/null +++ b/Build/source/extra/jpeg/jdapistd.c @@ -0,0 +1,275 @@ +/* + * jdapistd.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains application interface code for the decompression half + * of the JPEG library. These are the "standard" API routines that are + * used in the normal full-decompression case. They are not used by a + * transcoding-only application. Note that if an application links in + * jpeg_start_decompress, it will end up linking in the entire decompressor. + * We thus must separate this file from jdapimin.c to avoid linking the + * whole decompression library into a transcoder. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Forward declarations */ +LOCAL(boolean) output_pass_setup JPP((j_decompress_ptr cinfo)); + + +/* + * Decompression initialization. + * jpeg_read_header must be completed before calling this. + * + * If a multipass operating mode was selected, this will do all but the + * last pass, and thus may take a great deal of time. + * + * Returns FALSE if suspended. The return value need be inspected only if + * a suspending data source is used. + */ + +GLOBAL(boolean) +jpeg_start_decompress (j_decompress_ptr cinfo) +{ + if (cinfo->global_state == DSTATE_READY) { + /* First call: initialize master control, select active modules */ + jinit_master_decompress(cinfo); + if (cinfo->buffered_image) { + /* No more work here; expecting jpeg_start_output next */ + cinfo->global_state = DSTATE_BUFIMAGE; + return TRUE; + } + cinfo->global_state = DSTATE_PRELOAD; + } + if (cinfo->global_state == DSTATE_PRELOAD) { + /* If file has multiple scans, absorb them all into the coef buffer */ + if (cinfo->inputctl->has_multiple_scans) { +#ifdef D_MULTISCAN_FILES_SUPPORTED + for (;;) { + int retcode; + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + /* Absorb some more input */ + retcode = (*cinfo->inputctl->consume_input) (cinfo); + if (retcode == JPEG_SUSPENDED) + return FALSE; + if (retcode == JPEG_REACHED_EOI) + break; + /* Advance progress counter if appropriate */ + if (cinfo->progress != NULL && + (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) { + if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) { + /* jdmaster underestimated number of scans; ratchet up one scan */ + cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows; + } + } + } +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif /* D_MULTISCAN_FILES_SUPPORTED */ + } + cinfo->output_scan_number = cinfo->input_scan_number; + } else if (cinfo->global_state != DSTATE_PRESCAN) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + /* Perform any dummy output passes, and set up for the final pass */ + return output_pass_setup(cinfo); +} + + +/* + * Set up for an output pass, and perform any dummy pass(es) needed. + * Common subroutine for jpeg_start_decompress and jpeg_start_output. + * Entry: global_state = DSTATE_PRESCAN only if previously suspended. + * Exit: If done, returns TRUE and sets global_state for proper output mode. + * If suspended, returns FALSE and sets global_state = DSTATE_PRESCAN. + */ + +LOCAL(boolean) +output_pass_setup (j_decompress_ptr cinfo) +{ + if (cinfo->global_state != DSTATE_PRESCAN) { + /* First call: do pass setup */ + (*cinfo->master->prepare_for_output_pass) (cinfo); + cinfo->output_scanline = 0; + cinfo->global_state = DSTATE_PRESCAN; + } + /* Loop over any required dummy passes */ + while (cinfo->master->is_dummy_pass) { +#ifdef QUANT_2PASS_SUPPORTED + /* Crank through the dummy pass */ + while (cinfo->output_scanline < cinfo->output_height) { + JDIMENSION last_scanline; + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) cinfo->output_scanline; + cinfo->progress->pass_limit = (long) cinfo->output_height; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + /* Process some data */ + last_scanline = cinfo->output_scanline; + (*cinfo->main->process_data) (cinfo, (JSAMPARRAY) NULL, + &cinfo->output_scanline, (JDIMENSION) 0); + if (cinfo->output_scanline == last_scanline) + return FALSE; /* No progress made, must suspend */ + } + /* Finish up dummy pass, and set up for another one */ + (*cinfo->master->finish_output_pass) (cinfo); + (*cinfo->master->prepare_for_output_pass) (cinfo); + cinfo->output_scanline = 0; +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif /* QUANT_2PASS_SUPPORTED */ + } + /* Ready for application to drive output pass through + * jpeg_read_scanlines or jpeg_read_raw_data. + */ + cinfo->global_state = cinfo->raw_data_out ? DSTATE_RAW_OK : DSTATE_SCANNING; + return TRUE; +} + + +/* + * Read some scanlines of data from the JPEG decompressor. + * + * The return value will be the number of lines actually read. + * This may be less than the number requested in several cases, + * including bottom of image, data source suspension, and operating + * modes that emit multiple scanlines at a time. + * + * Note: we warn about excess calls to jpeg_read_scanlines() since + * this likely signals an application programmer error. However, + * an oversize buffer (max_lines > scanlines remaining) is not an error. + */ + +GLOBAL(JDIMENSION) +jpeg_read_scanlines (j_decompress_ptr cinfo, JSAMPARRAY scanlines, + JDIMENSION max_lines) +{ + JDIMENSION row_ctr; + + if (cinfo->global_state != DSTATE_SCANNING) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + if (cinfo->output_scanline >= cinfo->output_height) { + WARNMS(cinfo, JWRN_TOO_MUCH_DATA); + return 0; + } + + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) cinfo->output_scanline; + cinfo->progress->pass_limit = (long) cinfo->output_height; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + + /* Process some data */ + row_ctr = 0; + (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, max_lines); + cinfo->output_scanline += row_ctr; + return row_ctr; +} + + +/* + * Alternate entry point to read raw data. + * Processes exactly one iMCU row per call, unless suspended. + */ + +GLOBAL(JDIMENSION) +jpeg_read_raw_data (j_decompress_ptr cinfo, JSAMPIMAGE data, + JDIMENSION max_lines) +{ + JDIMENSION lines_per_iMCU_row; + + if (cinfo->global_state != DSTATE_RAW_OK) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + if (cinfo->output_scanline >= cinfo->output_height) { + WARNMS(cinfo, JWRN_TOO_MUCH_DATA); + return 0; + } + + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) { + cinfo->progress->pass_counter = (long) cinfo->output_scanline; + cinfo->progress->pass_limit = (long) cinfo->output_height; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + + /* Verify that at least one iMCU row can be returned. */ + lines_per_iMCU_row = cinfo->max_v_samp_factor * cinfo->min_DCT_scaled_size; + if (max_lines < lines_per_iMCU_row) + ERREXIT(cinfo, JERR_BUFFER_SIZE); + + /* Decompress directly into user's buffer. */ + if (! (*cinfo->coef->decompress_data) (cinfo, data)) + return 0; /* suspension forced, can do nothing more */ + + /* OK, we processed one iMCU row. */ + cinfo->output_scanline += lines_per_iMCU_row; + return lines_per_iMCU_row; +} + + +/* Additional entry points for buffered-image mode. */ + +#ifdef D_MULTISCAN_FILES_SUPPORTED + +/* + * Initialize for an output pass in buffered-image mode. + */ + +GLOBAL(boolean) +jpeg_start_output (j_decompress_ptr cinfo, int scan_number) +{ + if (cinfo->global_state != DSTATE_BUFIMAGE && + cinfo->global_state != DSTATE_PRESCAN) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + /* Limit scan number to valid range */ + if (scan_number <= 0) + scan_number = 1; + if (cinfo->inputctl->eoi_reached && + scan_number > cinfo->input_scan_number) + scan_number = cinfo->input_scan_number; + cinfo->output_scan_number = scan_number; + /* Perform any dummy output passes, and set up for the real pass */ + return output_pass_setup(cinfo); +} + + +/* + * Finish up after an output pass in buffered-image mode. + * + * Returns FALSE if suspended. The return value need be inspected only if + * a suspending data source is used. + */ + +GLOBAL(boolean) +jpeg_finish_output (j_decompress_ptr cinfo) +{ + if ((cinfo->global_state == DSTATE_SCANNING || + cinfo->global_state == DSTATE_RAW_OK) && cinfo->buffered_image) { + /* Terminate this pass. */ + /* We do not require the whole pass to have been completed. */ + (*cinfo->master->finish_output_pass) (cinfo); + cinfo->global_state = DSTATE_BUFPOST; + } else if (cinfo->global_state != DSTATE_BUFPOST) { + /* BUFPOST = repeat call after a suspension, anything else is error */ + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + } + /* Read markers looking for SOS or EOI */ + while (cinfo->input_scan_number <= cinfo->output_scan_number && + ! cinfo->inputctl->eoi_reached) { + if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED) + return FALSE; /* Suspend, come back later */ + } + cinfo->global_state = DSTATE_BUFIMAGE; + return TRUE; +} + +#endif /* D_MULTISCAN_FILES_SUPPORTED */ diff --git a/Build/source/extra/jpeg/jdatadst.c b/Build/source/extra/jpeg/jdatadst.c new file mode 100644 index 00000000000..a8f6fb0e025 --- /dev/null +++ b/Build/source/extra/jpeg/jdatadst.c @@ -0,0 +1,151 @@ +/* + * jdatadst.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains compression data destination routines for the case of + * emitting JPEG data to a file (or any stdio stream). While these routines + * are sufficient for most applications, some will want to use a different + * destination manager. + * IMPORTANT: we assume that fwrite() will correctly transcribe an array of + * JOCTETs into 8-bit-wide elements on external storage. If char is wider + * than 8 bits on your machine, you may need to do some tweaking. + */ + +/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ +#include "jinclude.h" +#include "jpeglib.h" +#include "jerror.h" + + +/* Expanded data destination object for stdio output */ + +typedef struct { + struct jpeg_destination_mgr pub; /* public fields */ + + FILE * outfile; /* target stream */ + JOCTET * buffer; /* start of buffer */ +} my_destination_mgr; + +typedef my_destination_mgr * my_dest_ptr; + +#define OUTPUT_BUF_SIZE 4096 /* choose an efficiently fwrite'able size */ + + +/* + * Initialize destination --- called by jpeg_start_compress + * before any data is actually written. + */ + +METHODDEF(void) +init_destination (j_compress_ptr cinfo) +{ + my_dest_ptr dest = (my_dest_ptr) cinfo->dest; + + /* Allocate the output buffer --- it will be released when done with image */ + dest->buffer = (JOCTET *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + OUTPUT_BUF_SIZE * SIZEOF(JOCTET)); + + dest->pub.next_output_byte = dest->buffer; + dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; +} + + +/* + * Empty the output buffer --- called whenever buffer fills up. + * + * In typical applications, this should write the entire output buffer + * (ignoring the current state of next_output_byte & free_in_buffer), + * reset the pointer & count to the start of the buffer, and return TRUE + * indicating that the buffer has been dumped. + * + * In applications that need to be able to suspend compression due to output + * overrun, a FALSE return indicates that the buffer cannot be emptied now. + * In this situation, the compressor will return to its caller (possibly with + * an indication that it has not accepted all the supplied scanlines). The + * application should resume compression after it has made more room in the + * output buffer. Note that there are substantial restrictions on the use of + * suspension --- see the documentation. + * + * When suspending, the compressor will back up to a convenient restart point + * (typically the start of the current MCU). next_output_byte & free_in_buffer + * indicate where the restart point will be if the current call returns FALSE. + * Data beyond this point will be regenerated after resumption, so do not + * write it out when emptying the buffer externally. + */ + +METHODDEF(boolean) +empty_output_buffer (j_compress_ptr cinfo) +{ + my_dest_ptr dest = (my_dest_ptr) cinfo->dest; + + if (JFWRITE(dest->outfile, dest->buffer, OUTPUT_BUF_SIZE) != + (size_t) OUTPUT_BUF_SIZE) + ERREXIT(cinfo, JERR_FILE_WRITE); + + dest->pub.next_output_byte = dest->buffer; + dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; + + return TRUE; +} + + +/* + * Terminate destination --- called by jpeg_finish_compress + * after all data has been written. Usually needs to flush buffer. + * + * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding + * application must deal with any cleanup that should happen even + * for error exit. + */ + +METHODDEF(void) +term_destination (j_compress_ptr cinfo) +{ + my_dest_ptr dest = (my_dest_ptr) cinfo->dest; + size_t datacount = OUTPUT_BUF_SIZE - dest->pub.free_in_buffer; + + /* Write any data remaining in the buffer */ + if (datacount > 0) { + if (JFWRITE(dest->outfile, dest->buffer, datacount) != datacount) + ERREXIT(cinfo, JERR_FILE_WRITE); + } + fflush(dest->outfile); + /* Make sure we wrote the output file OK */ + if (ferror(dest->outfile)) + ERREXIT(cinfo, JERR_FILE_WRITE); +} + + +/* + * Prepare for output to a stdio stream. + * The caller must have already opened the stream, and is responsible + * for closing it after finishing compression. + */ + +GLOBAL(void) +jpeg_stdio_dest (j_compress_ptr cinfo, FILE * outfile) +{ + my_dest_ptr dest; + + /* The destination object is made permanent so that multiple JPEG images + * can be written to the same file without re-executing jpeg_stdio_dest. + * This makes it dangerous to use this manager and a different destination + * manager serially with the same JPEG object, because their private object + * sizes may be different. Caveat programmer. + */ + if (cinfo->dest == NULL) { /* first time for this JPEG object? */ + cinfo->dest = (struct jpeg_destination_mgr *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + SIZEOF(my_destination_mgr)); + } + + dest = (my_dest_ptr) cinfo->dest; + dest->pub.init_destination = init_destination; + dest->pub.empty_output_buffer = empty_output_buffer; + dest->pub.term_destination = term_destination; + dest->outfile = outfile; +} diff --git a/Build/source/extra/jpeg/jdatasrc.c b/Build/source/extra/jpeg/jdatasrc.c new file mode 100644 index 00000000000..edc752bf5d8 --- /dev/null +++ b/Build/source/extra/jpeg/jdatasrc.c @@ -0,0 +1,212 @@ +/* + * jdatasrc.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains decompression data source routines for the case of + * reading JPEG data from a file (or any stdio stream). While these routines + * are sufficient for most applications, some will want to use a different + * source manager. + * IMPORTANT: we assume that fread() will correctly transcribe an array of + * JOCTETs from 8-bit-wide elements on external storage. If char is wider + * than 8 bits on your machine, you may need to do some tweaking. + */ + +/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ +#include "jinclude.h" +#include "jpeglib.h" +#include "jerror.h" + + +/* Expanded data source object for stdio input */ + +typedef struct { + struct jpeg_source_mgr pub; /* public fields */ + + FILE * infile; /* source stream */ + JOCTET * buffer; /* start of buffer */ + boolean start_of_file; /* have we gotten any data yet? */ +} my_source_mgr; + +typedef my_source_mgr * my_src_ptr; + +#define INPUT_BUF_SIZE 4096 /* choose an efficiently fread'able size */ + + +/* + * Initialize source --- called by jpeg_read_header + * before any data is actually read. + */ + +METHODDEF(void) +init_source (j_decompress_ptr cinfo) +{ + my_src_ptr src = (my_src_ptr) cinfo->src; + + /* We reset the empty-input-file flag for each image, + * but we don't clear the input buffer. + * This is correct behavior for reading a series of images from one source. + */ + src->start_of_file = TRUE; +} + + +/* + * Fill the input buffer --- called whenever buffer is emptied. + * + * In typical applications, this should read fresh data into the buffer + * (ignoring the current state of next_input_byte & bytes_in_buffer), + * reset the pointer & count to the start of the buffer, and return TRUE + * indicating that the buffer has been reloaded. It is not necessary to + * fill the buffer entirely, only to obtain at least one more byte. + * + * There is no such thing as an EOF return. If the end of the file has been + * reached, the routine has a choice of ERREXIT() or inserting fake data into + * the buffer. In most cases, generating a warning message and inserting a + * fake EOI marker is the best course of action --- this will allow the + * decompressor to output however much of the image is there. However, + * the resulting error message is misleading if the real problem is an empty + * input file, so we handle that case specially. + * + * In applications that need to be able to suspend compression due to input + * not being available yet, a FALSE return indicates that no more data can be + * obtained right now, but more may be forthcoming later. In this situation, + * the decompressor will return to its caller (with an indication of the + * number of scanlines it has read, if any). The application should resume + * decompression after it has loaded more data into the input buffer. Note + * that there are substantial restrictions on the use of suspension --- see + * the documentation. + * + * When suspending, the decompressor will back up to a convenient restart point + * (typically the start of the current MCU). next_input_byte & bytes_in_buffer + * indicate where the restart point will be if the current call returns FALSE. + * Data beyond this point must be rescanned after resumption, so move it to + * the front of the buffer rather than discarding it. + */ + +METHODDEF(boolean) +fill_input_buffer (j_decompress_ptr cinfo) +{ + my_src_ptr src = (my_src_ptr) cinfo->src; + size_t nbytes; + + nbytes = JFREAD(src->infile, src->buffer, INPUT_BUF_SIZE); + + if (nbytes <= 0) { + if (src->start_of_file) /* Treat empty input file as fatal error */ + ERREXIT(cinfo, JERR_INPUT_EMPTY); + WARNMS(cinfo, JWRN_JPEG_EOF); + /* Insert a fake EOI marker */ + src->buffer[0] = (JOCTET) 0xFF; + src->buffer[1] = (JOCTET) JPEG_EOI; + nbytes = 2; + } + + src->pub.next_input_byte = src->buffer; + src->pub.bytes_in_buffer = nbytes; + src->start_of_file = FALSE; + + return TRUE; +} + + +/* + * Skip data --- used to skip over a potentially large amount of + * uninteresting data (such as an APPn marker). + * + * Writers of suspendable-input applications must note that skip_input_data + * is not granted the right to give a suspension return. If the skip extends + * beyond the data currently in the buffer, the buffer can be marked empty so + * that the next read will cause a fill_input_buffer call that can suspend. + * Arranging for additional bytes to be discarded before reloading the input + * buffer is the application writer's problem. + */ + +METHODDEF(void) +skip_input_data (j_decompress_ptr cinfo, long num_bytes) +{ + my_src_ptr src = (my_src_ptr) cinfo->src; + + /* Just a dumb implementation for now. Could use fseek() except + * it doesn't work on pipes. Not clear that being smart is worth + * any trouble anyway --- large skips are infrequent. + */ + if (num_bytes > 0) { + while (num_bytes > (long) src->pub.bytes_in_buffer) { + num_bytes -= (long) src->pub.bytes_in_buffer; + (void) fill_input_buffer(cinfo); + /* note we assume that fill_input_buffer will never return FALSE, + * so suspension need not be handled. + */ + } + src->pub.next_input_byte += (size_t) num_bytes; + src->pub.bytes_in_buffer -= (size_t) num_bytes; + } +} + + +/* + * An additional method that can be provided by data source modules is the + * resync_to_restart method for error recovery in the presence of RST markers. + * For the moment, this source module just uses the default resync method + * provided by the JPEG library. That method assumes that no backtracking + * is possible. + */ + + +/* + * Terminate source --- called by jpeg_finish_decompress + * after all data has been read. Often a no-op. + * + * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding + * application must deal with any cleanup that should happen even + * for error exit. + */ + +METHODDEF(void) +term_source (j_decompress_ptr cinfo) +{ + /* no work necessary here */ +} + + +/* + * Prepare for input from a stdio stream. + * The caller must have already opened the stream, and is responsible + * for closing it after finishing decompression. + */ + +GLOBAL(void) +jpeg_stdio_src (j_decompress_ptr cinfo, FILE * infile) +{ + my_src_ptr src; + + /* The source object and input buffer are made permanent so that a series + * of JPEG images can be read from the same file by calling jpeg_stdio_src + * only before the first one. (If we discarded the buffer at the end of + * one image, we'd likely lose the start of the next one.) + * This makes it unsafe to use this manager and a different source + * manager serially with the same JPEG object. Caveat programmer. + */ + if (cinfo->src == NULL) { /* first time for this JPEG object? */ + cinfo->src = (struct jpeg_source_mgr *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + SIZEOF(my_source_mgr)); + src = (my_src_ptr) cinfo->src; + src->buffer = (JOCTET *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + INPUT_BUF_SIZE * SIZEOF(JOCTET)); + } + + src = (my_src_ptr) cinfo->src; + src->pub.init_source = init_source; + src->pub.fill_input_buffer = fill_input_buffer; + src->pub.skip_input_data = skip_input_data; + src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */ + src->pub.term_source = term_source; + src->infile = infile; + src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */ + src->pub.next_input_byte = NULL; /* until buffer loaded */ +} diff --git a/Build/source/extra/jpeg/jdcoefct.c b/Build/source/extra/jpeg/jdcoefct.c new file mode 100644 index 00000000000..4938d20fcb6 --- /dev/null +++ b/Build/source/extra/jpeg/jdcoefct.c @@ -0,0 +1,736 @@ +/* + * jdcoefct.c + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the coefficient buffer controller for decompression. + * This controller is the top level of the JPEG decompressor proper. + * The coefficient buffer lies between entropy decoding and inverse-DCT steps. + * + * In buffered-image mode, this controller is the interface between + * input-oriented processing and output-oriented processing. + * Also, the input side (only) is used when reading a file for transcoding. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + +/* Block smoothing is only applicable for progressive JPEG, so: */ +#ifndef D_PROGRESSIVE_SUPPORTED +#undef BLOCK_SMOOTHING_SUPPORTED +#endif + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_d_coef_controller pub; /* public fields */ + + /* These variables keep track of the current location of the input side. */ + /* cinfo->input_iMCU_row is also used for this. */ + JDIMENSION MCU_ctr; /* counts MCUs processed in current row */ + int MCU_vert_offset; /* counts MCU rows within iMCU row */ + int MCU_rows_per_iMCU_row; /* number of such rows needed */ + + /* The output side's location is represented by cinfo->output_iMCU_row. */ + + /* In single-pass modes, it's sufficient to buffer just one MCU. + * We allocate a workspace of D_MAX_BLOCKS_IN_MCU coefficient blocks, + * and let the entropy decoder write into that workspace each time. + * (On 80x86, the workspace is FAR even though it's not really very big; + * this is to keep the module interfaces unchanged when a large coefficient + * buffer is necessary.) + * In multi-pass modes, this array points to the current MCU's blocks + * within the virtual arrays; it is used only by the input side. + */ + JBLOCKROW MCU_buffer[D_MAX_BLOCKS_IN_MCU]; + +#ifdef D_MULTISCAN_FILES_SUPPORTED + /* In multi-pass modes, we need a virtual block array for each component. */ + jvirt_barray_ptr whole_image[MAX_COMPONENTS]; +#endif + +#ifdef BLOCK_SMOOTHING_SUPPORTED + /* When doing block smoothing, we latch coefficient Al values here */ + int * coef_bits_latch; +#define SAVED_COEFS 6 /* we save coef_bits[0..5] */ +#endif +} my_coef_controller; + +typedef my_coef_controller * my_coef_ptr; + +/* Forward declarations */ +METHODDEF(int) decompress_onepass + JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); +#ifdef D_MULTISCAN_FILES_SUPPORTED +METHODDEF(int) decompress_data + JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); +#endif +#ifdef BLOCK_SMOOTHING_SUPPORTED +LOCAL(boolean) smoothing_ok JPP((j_decompress_ptr cinfo)); +METHODDEF(int) decompress_smooth_data + JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); +#endif + + +LOCAL(void) +start_iMCU_row (j_decompress_ptr cinfo) +/* Reset within-iMCU-row counters for a new row (input side) */ +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + + /* In an interleaved scan, an MCU row is the same as an iMCU row. + * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows. + * But at the bottom of the image, process only what's left. + */ + if (cinfo->comps_in_scan > 1) { + coef->MCU_rows_per_iMCU_row = 1; + } else { + if (cinfo->input_iMCU_row < (cinfo->total_iMCU_rows-1)) + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; + else + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height; + } + + coef->MCU_ctr = 0; + coef->MCU_vert_offset = 0; +} + + +/* + * Initialize for an input processing pass. + */ + +METHODDEF(void) +start_input_pass (j_decompress_ptr cinfo) +{ + cinfo->input_iMCU_row = 0; + start_iMCU_row(cinfo); +} + + +/* + * Initialize for an output processing pass. + */ + +METHODDEF(void) +start_output_pass (j_decompress_ptr cinfo) +{ +#ifdef BLOCK_SMOOTHING_SUPPORTED + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + + /* If multipass, check to see whether to use block smoothing on this pass */ + if (coef->pub.coef_arrays != NULL) { + if (cinfo->do_block_smoothing && smoothing_ok(cinfo)) + coef->pub.decompress_data = decompress_smooth_data; + else + coef->pub.decompress_data = decompress_data; + } +#endif + cinfo->output_iMCU_row = 0; +} + + +/* + * Decompress and return some data in the single-pass case. + * Always attempts to emit one fully interleaved MCU row ("iMCU" row). + * Input and output must run in lockstep since we have only a one-MCU buffer. + * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. + * + * NB: output_buf contains a plane for each component in image, + * which we index according to the component's SOF position. + */ + +METHODDEF(int) +decompress_onepass (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION MCU_col_num; /* index of current MCU within row */ + JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + int blkn, ci, xindex, yindex, yoffset, useful_width; + JSAMPARRAY output_ptr; + JDIMENSION start_col, output_col; + jpeg_component_info *compptr; + inverse_DCT_method_ptr inverse_DCT; + + /* Loop to process as much as one whole iMCU row */ + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + yoffset++) { + for (MCU_col_num = coef->MCU_ctr; MCU_col_num <= last_MCU_col; + MCU_col_num++) { + /* Try to fetch an MCU. Entropy decoder expects buffer to be zeroed. */ + jzero_far((void FAR *) coef->MCU_buffer[0], + (size_t) (cinfo->blocks_in_MCU * SIZEOF(JBLOCK))); + if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) { + /* Suspension forced; update state counters and exit */ + coef->MCU_vert_offset = yoffset; + coef->MCU_ctr = MCU_col_num; + return JPEG_SUSPENDED; + } + /* Determine where data should go in output_buf and do the IDCT thing. + * We skip dummy blocks at the right and bottom edges (but blkn gets + * incremented past them!). Note the inner loop relies on having + * allocated the MCU_buffer[] blocks sequentially. + */ + blkn = 0; /* index of current DCT block within MCU */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Don't bother to IDCT an uninteresting component. */ + if (! compptr->component_needed) { + blkn += compptr->MCU_blocks; + continue; + } + inverse_DCT = cinfo->idct->inverse_DCT[compptr->component_index]; + useful_width = (MCU_col_num < last_MCU_col) ? compptr->MCU_width + : compptr->last_col_width; + output_ptr = output_buf[compptr->component_index] + + yoffset * compptr->DCT_scaled_size; + start_col = MCU_col_num * compptr->MCU_sample_width; + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + if (cinfo->input_iMCU_row < last_iMCU_row || + yoffset+yindex < compptr->last_row_height) { + output_col = start_col; + for (xindex = 0; xindex < useful_width; xindex++) { + (*inverse_DCT) (cinfo, compptr, + (JCOEFPTR) coef->MCU_buffer[blkn+xindex], + output_ptr, output_col); + output_col += compptr->DCT_scaled_size; + } + } + blkn += compptr->MCU_width; + output_ptr += compptr->DCT_scaled_size; + } + } + } + /* Completed an MCU row, but perhaps not an iMCU row */ + coef->MCU_ctr = 0; + } + /* Completed the iMCU row, advance counters for next one */ + cinfo->output_iMCU_row++; + if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) { + start_iMCU_row(cinfo); + return JPEG_ROW_COMPLETED; + } + /* Completed the scan */ + (*cinfo->inputctl->finish_input_pass) (cinfo); + return JPEG_SCAN_COMPLETED; +} + + +/* + * Dummy consume-input routine for single-pass operation. + */ + +METHODDEF(int) +dummy_consume_data (j_decompress_ptr cinfo) +{ + return JPEG_SUSPENDED; /* Always indicate nothing was done */ +} + + +#ifdef D_MULTISCAN_FILES_SUPPORTED + +/* + * Consume input data and store it in the full-image coefficient buffer. + * We read as much as one fully interleaved MCU row ("iMCU" row) per call, + * ie, v_samp_factor block rows for each component in the scan. + * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. + */ + +METHODDEF(int) +consume_data (j_decompress_ptr cinfo) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION MCU_col_num; /* index of current MCU within row */ + int blkn, ci, xindex, yindex, yoffset; + JDIMENSION start_col; + JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; + JBLOCKROW buffer_ptr; + jpeg_component_info *compptr; + + /* Align the virtual buffers for the components used in this scan. */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + buffer[ci] = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index], + cinfo->input_iMCU_row * compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, TRUE); + /* Note: entropy decoder expects buffer to be zeroed, + * but this is handled automatically by the memory manager + * because we requested a pre-zeroed array. + */ + } + + /* Loop to process one whole iMCU row */ + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + yoffset++) { + for (MCU_col_num = coef->MCU_ctr; MCU_col_num < cinfo->MCUs_per_row; + MCU_col_num++) { + /* Construct list of pointers to DCT blocks belonging to this MCU */ + blkn = 0; /* index of current DCT block within MCU */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + start_col = MCU_col_num * compptr->MCU_width; + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + buffer_ptr = buffer[ci][yindex+yoffset] + start_col; + for (xindex = 0; xindex < compptr->MCU_width; xindex++) { + coef->MCU_buffer[blkn++] = buffer_ptr++; + } + } + } + /* Try to fetch the MCU. */ + if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) { + /* Suspension forced; update state counters and exit */ + coef->MCU_vert_offset = yoffset; + coef->MCU_ctr = MCU_col_num; + return JPEG_SUSPENDED; + } + } + /* Completed an MCU row, but perhaps not an iMCU row */ + coef->MCU_ctr = 0; + } + /* Completed the iMCU row, advance counters for next one */ + if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) { + start_iMCU_row(cinfo); + return JPEG_ROW_COMPLETED; + } + /* Completed the scan */ + (*cinfo->inputctl->finish_input_pass) (cinfo); + return JPEG_SCAN_COMPLETED; +} + + +/* + * Decompress and return some data in the multi-pass case. + * Always attempts to emit one fully interleaved MCU row ("iMCU" row). + * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. + * + * NB: output_buf contains a plane for each component in image. + */ + +METHODDEF(int) +decompress_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + JDIMENSION block_num; + int ci, block_row, block_rows; + JBLOCKARRAY buffer; + JBLOCKROW buffer_ptr; + JSAMPARRAY output_ptr; + JDIMENSION output_col; + jpeg_component_info *compptr; + inverse_DCT_method_ptr inverse_DCT; + + /* Force some input to be done if we are getting ahead of the input. */ + while (cinfo->input_scan_number < cinfo->output_scan_number || + (cinfo->input_scan_number == cinfo->output_scan_number && + cinfo->input_iMCU_row <= cinfo->output_iMCU_row)) { + if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED) + return JPEG_SUSPENDED; + } + + /* OK, output from the virtual arrays. */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Don't bother to IDCT an uninteresting component. */ + if (! compptr->component_needed) + continue; + /* Align the virtual buffer for this component. */ + buffer = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[ci], + cinfo->output_iMCU_row * compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, FALSE); + /* Count non-dummy DCT block rows in this iMCU row. */ + if (cinfo->output_iMCU_row < last_iMCU_row) + block_rows = compptr->v_samp_factor; + else { + /* NB: can't use last_row_height here; it is input-side-dependent! */ + block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + if (block_rows == 0) block_rows = compptr->v_samp_factor; + } + inverse_DCT = cinfo->idct->inverse_DCT[ci]; + output_ptr = output_buf[ci]; + /* Loop over all DCT blocks to be processed. */ + for (block_row = 0; block_row < block_rows; block_row++) { + buffer_ptr = buffer[block_row]; + output_col = 0; + for (block_num = 0; block_num < compptr->width_in_blocks; block_num++) { + (*inverse_DCT) (cinfo, compptr, (JCOEFPTR) buffer_ptr, + output_ptr, output_col); + buffer_ptr++; + output_col += compptr->DCT_scaled_size; + } + output_ptr += compptr->DCT_scaled_size; + } + } + + if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows) + return JPEG_ROW_COMPLETED; + return JPEG_SCAN_COMPLETED; +} + +#endif /* D_MULTISCAN_FILES_SUPPORTED */ + + +#ifdef BLOCK_SMOOTHING_SUPPORTED + +/* + * This code applies interblock smoothing as described by section K.8 + * of the JPEG standard: the first 5 AC coefficients are estimated from + * the DC values of a DCT block and its 8 neighboring blocks. + * We apply smoothing only for progressive JPEG decoding, and only if + * the coefficients it can estimate are not yet known to full precision. + */ + +/* Natural-order array positions of the first 5 zigzag-order coefficients */ +#define Q01_POS 1 +#define Q10_POS 8 +#define Q20_POS 16 +#define Q11_POS 9 +#define Q02_POS 2 + +/* + * Determine whether block smoothing is applicable and safe. + * We also latch the current states of the coef_bits[] entries for the + * AC coefficients; otherwise, if the input side of the decompressor + * advances into a new scan, we might think the coefficients are known + * more accurately than they really are. + */ + +LOCAL(boolean) +smoothing_ok (j_decompress_ptr cinfo) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + boolean smoothing_useful = FALSE; + int ci, coefi; + jpeg_component_info *compptr; + JQUANT_TBL * qtable; + int * coef_bits; + int * coef_bits_latch; + + if (! cinfo->progressive_mode || cinfo->coef_bits == NULL) + return FALSE; + + /* Allocate latch area if not already done */ + if (coef->coef_bits_latch == NULL) + coef->coef_bits_latch = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->num_components * + (SAVED_COEFS * SIZEOF(int))); + coef_bits_latch = coef->coef_bits_latch; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* All components' quantization values must already be latched. */ + if ((qtable = compptr->quant_table) == NULL) + return FALSE; + /* Verify DC & first 5 AC quantizers are nonzero to avoid zero-divide. */ + if (qtable->quantval[0] == 0 || + qtable->quantval[Q01_POS] == 0 || + qtable->quantval[Q10_POS] == 0 || + qtable->quantval[Q20_POS] == 0 || + qtable->quantval[Q11_POS] == 0 || + qtable->quantval[Q02_POS] == 0) + return FALSE; + /* DC values must be at least partly known for all components. */ + coef_bits = cinfo->coef_bits[ci]; + if (coef_bits[0] < 0) + return FALSE; + /* Block smoothing is helpful if some AC coefficients remain inaccurate. */ + for (coefi = 1; coefi <= 5; coefi++) { + coef_bits_latch[coefi] = coef_bits[coefi]; + if (coef_bits[coefi] != 0) + smoothing_useful = TRUE; + } + coef_bits_latch += SAVED_COEFS; + } + + return smoothing_useful; +} + + +/* + * Variant of decompress_data for use when doing block smoothing. + */ + +METHODDEF(int) +decompress_smooth_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) +{ + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + JDIMENSION block_num, last_block_column; + int ci, block_row, block_rows, access_rows; + JBLOCKARRAY buffer; + JBLOCKROW buffer_ptr, prev_block_row, next_block_row; + JSAMPARRAY output_ptr; + JDIMENSION output_col; + jpeg_component_info *compptr; + inverse_DCT_method_ptr inverse_DCT; + boolean first_row, last_row; + JBLOCK workspace; + int *coef_bits; + JQUANT_TBL *quanttbl; + INT32 Q00,Q01,Q02,Q10,Q11,Q20, num; + int DC1,DC2,DC3,DC4,DC5,DC6,DC7,DC8,DC9; + int Al, pred; + + /* Force some input to be done if we are getting ahead of the input. */ + while (cinfo->input_scan_number <= cinfo->output_scan_number && + ! cinfo->inputctl->eoi_reached) { + if (cinfo->input_scan_number == cinfo->output_scan_number) { + /* If input is working on current scan, we ordinarily want it to + * have completed the current row. But if input scan is DC, + * we want it to keep one row ahead so that next block row's DC + * values are up to date. + */ + JDIMENSION delta = (cinfo->Ss == 0) ? 1 : 0; + if (cinfo->input_iMCU_row > cinfo->output_iMCU_row+delta) + break; + } + if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED) + return JPEG_SUSPENDED; + } + + /* OK, output from the virtual arrays. */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Don't bother to IDCT an uninteresting component. */ + if (! compptr->component_needed) + continue; + /* Count non-dummy DCT block rows in this iMCU row. */ + if (cinfo->output_iMCU_row < last_iMCU_row) { + block_rows = compptr->v_samp_factor; + access_rows = block_rows * 2; /* this and next iMCU row */ + last_row = FALSE; + } else { + /* NB: can't use last_row_height here; it is input-side-dependent! */ + block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + if (block_rows == 0) block_rows = compptr->v_samp_factor; + access_rows = block_rows; /* this iMCU row only */ + last_row = TRUE; + } + /* Align the virtual buffer for this component. */ + if (cinfo->output_iMCU_row > 0) { + access_rows += compptr->v_samp_factor; /* prior iMCU row too */ + buffer = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[ci], + (cinfo->output_iMCU_row - 1) * compptr->v_samp_factor, + (JDIMENSION) access_rows, FALSE); + buffer += compptr->v_samp_factor; /* point to current iMCU row */ + first_row = FALSE; + } else { + buffer = (*cinfo->mem->access_virt_barray) + ((j_common_ptr) cinfo, coef->whole_image[ci], + (JDIMENSION) 0, (JDIMENSION) access_rows, FALSE); + first_row = TRUE; + } + /* Fetch component-dependent info */ + coef_bits = coef->coef_bits_latch + (ci * SAVED_COEFS); + quanttbl = compptr->quant_table; + Q00 = quanttbl->quantval[0]; + Q01 = quanttbl->quantval[Q01_POS]; + Q10 = quanttbl->quantval[Q10_POS]; + Q20 = quanttbl->quantval[Q20_POS]; + Q11 = quanttbl->quantval[Q11_POS]; + Q02 = quanttbl->quantval[Q02_POS]; + inverse_DCT = cinfo->idct->inverse_DCT[ci]; + output_ptr = output_buf[ci]; + /* Loop over all DCT blocks to be processed. */ + for (block_row = 0; block_row < block_rows; block_row++) { + buffer_ptr = buffer[block_row]; + if (first_row && block_row == 0) + prev_block_row = buffer_ptr; + else + prev_block_row = buffer[block_row-1]; + if (last_row && block_row == block_rows-1) + next_block_row = buffer_ptr; + else + next_block_row = buffer[block_row+1]; + /* We fetch the surrounding DC values using a sliding-register approach. + * Initialize all nine here so as to do the right thing on narrow pics. + */ + DC1 = DC2 = DC3 = (int) prev_block_row[0][0]; + DC4 = DC5 = DC6 = (int) buffer_ptr[0][0]; + DC7 = DC8 = DC9 = (int) next_block_row[0][0]; + output_col = 0; + last_block_column = compptr->width_in_blocks - 1; + for (block_num = 0; block_num <= last_block_column; block_num++) { + /* Fetch current DCT block into workspace so we can modify it. */ + jcopy_block_row(buffer_ptr, (JBLOCKROW) workspace, (JDIMENSION) 1); + /* Update DC values */ + if (block_num < last_block_column) { + DC3 = (int) prev_block_row[1][0]; + DC6 = (int) buffer_ptr[1][0]; + DC9 = (int) next_block_row[1][0]; + } + /* Compute coefficient estimates per K.8. + * An estimate is applied only if coefficient is still zero, + * and is not known to be fully accurate. + */ + /* AC01 */ + if ((Al=coef_bits[1]) != 0 && workspace[1] == 0) { + num = 36 * Q00 * (DC4 - DC6); + if (num >= 0) { + pred = (int) (((Q01<<7) + num) / (Q01<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { + pred = (int) (((Q10<<7) + num) / (Q10<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { + pred = (int) (((Q20<<7) + num) / (Q20<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { + pred = (int) (((Q11<<7) + num) / (Q11<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { + pred = (int) (((Q02<<7) + num) / (Q02<<8)); + if (Al > 0 && pred >= (1< 0 && pred >= (1<DCT_scaled_size; + } + output_ptr += compptr->DCT_scaled_size; + } + } + + if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows) + return JPEG_ROW_COMPLETED; + return JPEG_SCAN_COMPLETED; +} + +#endif /* BLOCK_SMOOTHING_SUPPORTED */ + + +/* + * Initialize coefficient buffer controller. + */ + +GLOBAL(void) +jinit_d_coef_controller (j_decompress_ptr cinfo, boolean need_full_buffer) +{ + my_coef_ptr coef; + + coef = (my_coef_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_coef_controller)); + cinfo->coef = (struct jpeg_d_coef_controller *) coef; + coef->pub.start_input_pass = start_input_pass; + coef->pub.start_output_pass = start_output_pass; +#ifdef BLOCK_SMOOTHING_SUPPORTED + coef->coef_bits_latch = NULL; +#endif + + /* Create the coefficient buffer. */ + if (need_full_buffer) { +#ifdef D_MULTISCAN_FILES_SUPPORTED + /* Allocate a full-image virtual array for each component, */ + /* padded to a multiple of samp_factor DCT blocks in each direction. */ + /* Note we ask for a pre-zeroed array. */ + int ci, access_rows; + jpeg_component_info *compptr; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + access_rows = compptr->v_samp_factor; +#ifdef BLOCK_SMOOTHING_SUPPORTED + /* If block smoothing could be used, need a bigger window */ + if (cinfo->progressive_mode) + access_rows *= 3; +#endif + coef->whole_image[ci] = (*cinfo->mem->request_virt_barray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, TRUE, + (JDIMENSION) jround_up((long) compptr->width_in_blocks, + (long) compptr->h_samp_factor), + (JDIMENSION) jround_up((long) compptr->height_in_blocks, + (long) compptr->v_samp_factor), + (JDIMENSION) access_rows); + } + coef->pub.consume_data = consume_data; + coef->pub.decompress_data = decompress_data; + coef->pub.coef_arrays = coef->whole_image; /* link to virtual arrays */ +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else { + /* We only need a single-MCU buffer. */ + JBLOCKROW buffer; + int i; + + buffer = (JBLOCKROW) + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + D_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); + for (i = 0; i < D_MAX_BLOCKS_IN_MCU; i++) { + coef->MCU_buffer[i] = buffer + i; + } + coef->pub.consume_data = dummy_consume_data; + coef->pub.decompress_data = decompress_onepass; + coef->pub.coef_arrays = NULL; /* flag for no virtual arrays */ + } +} diff --git a/Build/source/extra/jpeg/jdcolor.c b/Build/source/extra/jpeg/jdcolor.c new file mode 100644 index 00000000000..6c04dfe8aa1 --- /dev/null +++ b/Build/source/extra/jpeg/jdcolor.c @@ -0,0 +1,396 @@ +/* + * jdcolor.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains output colorspace conversion routines. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private subobject */ + +typedef struct { + struct jpeg_color_deconverter pub; /* public fields */ + + /* Private state for YCC->RGB conversion */ + int * Cr_r_tab; /* => table for Cr to R conversion */ + int * Cb_b_tab; /* => table for Cb to B conversion */ + INT32 * Cr_g_tab; /* => table for Cr to G conversion */ + INT32 * Cb_g_tab; /* => table for Cb to G conversion */ +} my_color_deconverter; + +typedef my_color_deconverter * my_cconvert_ptr; + + +/**************** YCbCr -> RGB conversion: most common case **************/ + +/* + * YCbCr is defined per CCIR 601-1, except that Cb and Cr are + * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. + * The conversion equations to be implemented are therefore + * R = Y + 1.40200 * Cr + * G = Y - 0.34414 * Cb - 0.71414 * Cr + * B = Y + 1.77200 * Cb + * where Cb and Cr represent the incoming values less CENTERJSAMPLE. + * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) + * + * To avoid floating-point arithmetic, we represent the fractional constants + * as integers scaled up by 2^16 (about 4 digits precision); we have to divide + * the products by 2^16, with appropriate rounding, to get the correct answer. + * Notice that Y, being an integral input, does not contribute any fraction + * so it need not participate in the rounding. + * + * For even more speed, we avoid doing any multiplications in the inner loop + * by precalculating the constants times Cb and Cr for all possible values. + * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table); + * for 12-bit samples it is still acceptable. It's not very reasonable for + * 16-bit samples, but if you want lossless storage you shouldn't be changing + * colorspace anyway. + * The Cr=>R and Cb=>B values can be rounded to integers in advance; the + * values for the G calculation are left scaled up, since we must add them + * together before rounding. + */ + +#define SCALEBITS 16 /* speediest right-shift on some machines */ +#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) +#define FIX(x) ((INT32) ((x) * (1L<RGB colorspace conversion. + */ + +LOCAL(void) +build_ycc_rgb_table (j_decompress_ptr cinfo) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + int i; + INT32 x; + SHIFT_TEMPS + + cconvert->Cr_r_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(int)); + cconvert->Cb_b_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(int)); + cconvert->Cr_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(INT32)); + cconvert->Cb_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(INT32)); + + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { + /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ + /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ + /* Cr=>R value is nearest int to 1.40200 * x */ + cconvert->Cr_r_tab[i] = (int) + RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); + /* Cb=>B value is nearest int to 1.77200 * x */ + cconvert->Cb_b_tab[i] = (int) + RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); + /* Cr=>G value is scaled-up -0.71414 * x */ + cconvert->Cr_g_tab[i] = (- FIX(0.71414)) * x; + /* Cb=>G value is scaled-up -0.34414 * x */ + /* We also add in ONE_HALF so that need not do it in inner loop */ + cconvert->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; + } +} + + +/* + * Convert some rows of samples to the output colorspace. + * + * Note that we change from noninterleaved, one-plane-per-component format + * to interleaved-pixel format. The output buffer is therefore three times + * as wide as the input buffer. + * A starting row offset is provided only for the input buffer. The caller + * can easily adjust the passed output_buf value to accommodate any row + * offset required on that side. + */ + +METHODDEF(void) +ycc_rgb_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register int y, cb, cr; + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + register int * Crrtab = cconvert->Cr_r_tab; + register int * Cbbtab = cconvert->Cb_b_tab; + register INT32 * Crgtab = cconvert->Cr_g_tab; + register INT32 * Cbgtab = cconvert->Cb_g_tab; + SHIFT_TEMPS + + while (--num_rows >= 0) { + inptr0 = input_buf[0][input_row]; + inptr1 = input_buf[1][input_row]; + inptr2 = input_buf[2][input_row]; + input_row++; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + y = GETJSAMPLE(inptr0[col]); + cb = GETJSAMPLE(inptr1[col]); + cr = GETJSAMPLE(inptr2[col]); + /* Range-limiting is essential due to noise introduced by DCT losses. */ + outptr[RGB_RED] = range_limit[y + Crrtab[cr]]; + outptr[RGB_GREEN] = range_limit[y + + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], + SCALEBITS))]; + outptr[RGB_BLUE] = range_limit[y + Cbbtab[cb]]; + outptr += RGB_PIXELSIZE; + } + } +} + + +/**************** Cases other than YCbCr -> RGB **************/ + + +/* + * Color conversion for no colorspace change: just copy the data, + * converting from separate-planes to interleaved representation. + */ + +METHODDEF(void) +null_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + register JSAMPROW inptr, outptr; + register JDIMENSION count; + register int num_components = cinfo->num_components; + JDIMENSION num_cols = cinfo->output_width; + int ci; + + while (--num_rows >= 0) { + for (ci = 0; ci < num_components; ci++) { + inptr = input_buf[ci][input_row]; + outptr = output_buf[0] + ci; + for (count = num_cols; count > 0; count--) { + *outptr = *inptr++; /* needn't bother with GETJSAMPLE() here */ + outptr += num_components; + } + } + input_row++; + output_buf++; + } +} + + +/* + * Color conversion for grayscale: just copy the data. + * This also works for YCbCr -> grayscale conversion, in which + * we just copy the Y (luminance) component and ignore chrominance. + */ + +METHODDEF(void) +grayscale_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + jcopy_sample_rows(input_buf[0], (int) input_row, output_buf, 0, + num_rows, cinfo->output_width); +} + + +/* + * Convert grayscale to RGB: just duplicate the graylevel three times. + * This is provided to support applications that don't want to cope + * with grayscale as a separate case. + */ + +METHODDEF(void) +gray_rgb_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + register JSAMPROW inptr, outptr; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + + while (--num_rows >= 0) { + inptr = input_buf[0][input_row++]; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + /* We can dispense with GETJSAMPLE() here */ + outptr[RGB_RED] = outptr[RGB_GREEN] = outptr[RGB_BLUE] = inptr[col]; + outptr += RGB_PIXELSIZE; + } + } +} + + +/* + * Adobe-style YCCK->CMYK conversion. + * We convert YCbCr to R=1-C, G=1-M, and B=1-Y using the same + * conversion as above, while passing K (black) unchanged. + * We assume build_ycc_rgb_table has been called. + */ + +METHODDEF(void) +ycck_cmyk_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register int y, cb, cr; + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2, inptr3; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + register int * Crrtab = cconvert->Cr_r_tab; + register int * Cbbtab = cconvert->Cb_b_tab; + register INT32 * Crgtab = cconvert->Cr_g_tab; + register INT32 * Cbgtab = cconvert->Cb_g_tab; + SHIFT_TEMPS + + while (--num_rows >= 0) { + inptr0 = input_buf[0][input_row]; + inptr1 = input_buf[1][input_row]; + inptr2 = input_buf[2][input_row]; + inptr3 = input_buf[3][input_row]; + input_row++; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + y = GETJSAMPLE(inptr0[col]); + cb = GETJSAMPLE(inptr1[col]); + cr = GETJSAMPLE(inptr2[col]); + /* Range-limiting is essential due to noise introduced by DCT losses. */ + outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])]; /* red */ + outptr[1] = range_limit[MAXJSAMPLE - (y + /* green */ + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], + SCALEBITS)))]; + outptr[2] = range_limit[MAXJSAMPLE - (y + Cbbtab[cb])]; /* blue */ + /* K passes through unchanged */ + outptr[3] = inptr3[col]; /* don't need GETJSAMPLE here */ + outptr += 4; + } + } +} + + +/* + * Empty method for start_pass. + */ + +METHODDEF(void) +start_pass_dcolor (j_decompress_ptr cinfo) +{ + /* no work needed */ +} + + +/* + * Module initialization routine for output colorspace conversion. + */ + +GLOBAL(void) +jinit_color_deconverter (j_decompress_ptr cinfo) +{ + my_cconvert_ptr cconvert; + int ci; + + cconvert = (my_cconvert_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_color_deconverter)); + cinfo->cconvert = (struct jpeg_color_deconverter *) cconvert; + cconvert->pub.start_pass = start_pass_dcolor; + + /* Make sure num_components agrees with jpeg_color_space */ + switch (cinfo->jpeg_color_space) { + case JCS_GRAYSCALE: + if (cinfo->num_components != 1) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + break; + + case JCS_RGB: + case JCS_YCbCr: + if (cinfo->num_components != 3) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + break; + + case JCS_CMYK: + case JCS_YCCK: + if (cinfo->num_components != 4) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + break; + + default: /* JCS_UNKNOWN can be anything */ + if (cinfo->num_components < 1) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + break; + } + + /* Set out_color_components and conversion method based on requested space. + * Also clear the component_needed flags for any unused components, + * so that earlier pipeline stages can avoid useless computation. + */ + + switch (cinfo->out_color_space) { + case JCS_GRAYSCALE: + cinfo->out_color_components = 1; + if (cinfo->jpeg_color_space == JCS_GRAYSCALE || + cinfo->jpeg_color_space == JCS_YCbCr) { + cconvert->pub.color_convert = grayscale_convert; + /* For color->grayscale conversion, only the Y (0) component is needed */ + for (ci = 1; ci < cinfo->num_components; ci++) + cinfo->comp_info[ci].component_needed = FALSE; + } else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + case JCS_RGB: + cinfo->out_color_components = RGB_PIXELSIZE; + if (cinfo->jpeg_color_space == JCS_YCbCr) { + cconvert->pub.color_convert = ycc_rgb_convert; + build_ycc_rgb_table(cinfo); + } else if (cinfo->jpeg_color_space == JCS_GRAYSCALE) { + cconvert->pub.color_convert = gray_rgb_convert; + } else if (cinfo->jpeg_color_space == JCS_RGB && RGB_PIXELSIZE == 3) { + cconvert->pub.color_convert = null_convert; + } else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + case JCS_CMYK: + cinfo->out_color_components = 4; + if (cinfo->jpeg_color_space == JCS_YCCK) { + cconvert->pub.color_convert = ycck_cmyk_convert; + build_ycc_rgb_table(cinfo); + } else if (cinfo->jpeg_color_space == JCS_CMYK) { + cconvert->pub.color_convert = null_convert; + } else + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + + default: + /* Permit null conversion to same output space */ + if (cinfo->out_color_space == cinfo->jpeg_color_space) { + cinfo->out_color_components = cinfo->num_components; + cconvert->pub.color_convert = null_convert; + } else /* unsupported non-null conversion */ + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + } + + if (cinfo->quantize_colors) + cinfo->output_components = 1; /* single colormapped output component */ + else + cinfo->output_components = cinfo->out_color_components; +} diff --git a/Build/source/extra/jpeg/jdct.h b/Build/source/extra/jpeg/jdct.h new file mode 100644 index 00000000000..04192a266ae --- /dev/null +++ b/Build/source/extra/jpeg/jdct.h @@ -0,0 +1,176 @@ +/* + * jdct.h + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This include file contains common declarations for the forward and + * inverse DCT modules. These declarations are private to the DCT managers + * (jcdctmgr.c, jddctmgr.c) and the individual DCT algorithms. + * The individual DCT algorithms are kept in separate files to ease + * machine-dependent tuning (e.g., assembly coding). + */ + + +/* + * A forward DCT routine is given a pointer to a work area of type DCTELEM[]; + * the DCT is to be performed in-place in that buffer. Type DCTELEM is int + * for 8-bit samples, INT32 for 12-bit samples. (NOTE: Floating-point DCT + * implementations use an array of type FAST_FLOAT, instead.) + * The DCT inputs are expected to be signed (range +-CENTERJSAMPLE). + * The DCT outputs are returned scaled up by a factor of 8; they therefore + * have a range of +-8K for 8-bit data, +-128K for 12-bit data. This + * convention improves accuracy in integer implementations and saves some + * work in floating-point ones. + * Quantization of the output coefficients is done by jcdctmgr.c. + */ + +#if BITS_IN_JSAMPLE == 8 +typedef int DCTELEM; /* 16 or 32 bits is fine */ +#else +typedef INT32 DCTELEM; /* must have 32 bits */ +#endif + +typedef JMETHOD(void, forward_DCT_method_ptr, (DCTELEM * data)); +typedef JMETHOD(void, float_DCT_method_ptr, (FAST_FLOAT * data)); + + +/* + * An inverse DCT routine is given a pointer to the input JBLOCK and a pointer + * to an output sample array. The routine must dequantize the input data as + * well as perform the IDCT; for dequantization, it uses the multiplier table + * pointed to by compptr->dct_table. The output data is to be placed into the + * sample array starting at a specified column. (Any row offset needed will + * be applied to the array pointer before it is passed to the IDCT code.) + * Note that the number of samples emitted by the IDCT routine is + * DCT_scaled_size * DCT_scaled_size. + */ + +/* typedef inverse_DCT_method_ptr is declared in jpegint.h */ + +/* + * Each IDCT routine has its own ideas about the best dct_table element type. + */ + +typedef MULTIPLIER ISLOW_MULT_TYPE; /* short or int, whichever is faster */ +#if BITS_IN_JSAMPLE == 8 +typedef MULTIPLIER IFAST_MULT_TYPE; /* 16 bits is OK, use short if faster */ +#define IFAST_SCALE_BITS 2 /* fractional bits in scale factors */ +#else +typedef INT32 IFAST_MULT_TYPE; /* need 32 bits for scaled quantizers */ +#define IFAST_SCALE_BITS 13 /* fractional bits in scale factors */ +#endif +typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */ + + +/* + * Each IDCT routine is responsible for range-limiting its results and + * converting them to unsigned form (0..MAXJSAMPLE). The raw outputs could + * be quite far out of range if the input data is corrupt, so a bulletproof + * range-limiting step is required. We use a mask-and-table-lookup method + * to do the combined operations quickly. See the comments with + * prepare_range_limit_table (in jdmaster.c) for more info. + */ + +#define IDCT_range_limit(cinfo) ((cinfo)->sample_range_limit + CENTERJSAMPLE) + +#define RANGE_MASK (MAXJSAMPLE * 4 + 3) /* 2 bits wider than legal samples */ + + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_fdct_islow jFDislow +#define jpeg_fdct_ifast jFDifast +#define jpeg_fdct_float jFDfloat +#define jpeg_idct_islow jRDislow +#define jpeg_idct_ifast jRDifast +#define jpeg_idct_float jRDfloat +#define jpeg_idct_4x4 jRD4x4 +#define jpeg_idct_2x2 jRD2x2 +#define jpeg_idct_1x1 jRD1x1 +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + +/* Extern declarations for the forward and inverse DCT routines. */ + +EXTERN(void) jpeg_fdct_islow JPP((DCTELEM * data)); +EXTERN(void) jpeg_fdct_ifast JPP((DCTELEM * data)); +EXTERN(void) jpeg_fdct_float JPP((FAST_FLOAT * data)); + +EXTERN(void) jpeg_idct_islow + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_ifast + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_float + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_4x4 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_2x2 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_1x1 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); + + +/* + * Macros for handling fixed-point arithmetic; these are used by many + * but not all of the DCT/IDCT modules. + * + * All values are expected to be of type INT32. + * Fractional constants are scaled left by CONST_BITS bits. + * CONST_BITS is defined within each module using these macros, + * and may differ from one module to the next. + */ + +#define ONE ((INT32) 1) +#define CONST_SCALE (ONE << CONST_BITS) + +/* Convert a positive real constant to an integer scaled by CONST_SCALE. + * Caution: some C compilers fail to reduce "FIX(constant)" at compile time, + * thus causing a lot of useless floating-point operations at run time. + */ + +#define FIX(x) ((INT32) ((x) * CONST_SCALE + 0.5)) + +/* Descale and correctly round an INT32 value that's scaled by N bits. + * We assume RIGHT_SHIFT rounds towards minus infinity, so adding + * the fudge factor is correct for either sign of X. + */ + +#define DESCALE(x,n) RIGHT_SHIFT((x) + (ONE << ((n)-1)), n) + +/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. + * This macro is used only when the two inputs will actually be no more than + * 16 bits wide, so that a 16x16->32 bit multiply can be used instead of a + * full 32x32 multiply. This provides a useful speedup on many machines. + * Unfortunately there is no way to specify a 16x16->32 multiply portably + * in C, but some C compilers will do the right thing if you provide the + * correct combination of casts. + */ + +#ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ +#define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT16) (const))) +#endif +#ifdef SHORTxLCONST_32 /* known to work with Microsoft C 6.0 */ +#define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT32) (const))) +#endif + +#ifndef MULTIPLY16C16 /* default definition */ +#define MULTIPLY16C16(var,const) ((var) * (const)) +#endif + +/* Same except both inputs are variables. */ + +#ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ +#define MULTIPLY16V16(var1,var2) (((INT16) (var1)) * ((INT16) (var2))) +#endif + +#ifndef MULTIPLY16V16 /* default definition */ +#define MULTIPLY16V16(var1,var2) ((var1) * (var2)) +#endif diff --git a/Build/source/extra/jpeg/jddctmgr.c b/Build/source/extra/jpeg/jddctmgr.c new file mode 100644 index 00000000000..bbf8d0e92fd --- /dev/null +++ b/Build/source/extra/jpeg/jddctmgr.c @@ -0,0 +1,269 @@ +/* + * jddctmgr.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the inverse-DCT management logic. + * This code selects a particular IDCT implementation to be used, + * and it performs related housekeeping chores. No code in this file + * is executed per IDCT step, only during output pass setup. + * + * Note that the IDCT routines are responsible for performing coefficient + * dequantization as well as the IDCT proper. This module sets up the + * dequantization multiplier table needed by the IDCT routine. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + + +/* + * The decompressor input side (jdinput.c) saves away the appropriate + * quantization table for each component at the start of the first scan + * involving that component. (This is necessary in order to correctly + * decode files that reuse Q-table slots.) + * When we are ready to make an output pass, the saved Q-table is converted + * to a multiplier table that will actually be used by the IDCT routine. + * The multiplier table contents are IDCT-method-dependent. To support + * application changes in IDCT method between scans, we can remake the + * multiplier tables if necessary. + * In buffered-image mode, the first output pass may occur before any data + * has been seen for some components, and thus before their Q-tables have + * been saved away. To handle this case, multiplier tables are preset + * to zeroes; the result of the IDCT will be a neutral gray level. + */ + + +/* Private subobject for this module */ + +typedef struct { + struct jpeg_inverse_dct pub; /* public fields */ + + /* This array contains the IDCT method code that each multiplier table + * is currently set up for, or -1 if it's not yet set up. + * The actual multiplier tables are pointed to by dct_table in the + * per-component comp_info structures. + */ + int cur_method[MAX_COMPONENTS]; +} my_idct_controller; + +typedef my_idct_controller * my_idct_ptr; + + +/* Allocated multiplier tables: big enough for any supported variant */ + +typedef union { + ISLOW_MULT_TYPE islow_array[DCTSIZE2]; +#ifdef DCT_IFAST_SUPPORTED + IFAST_MULT_TYPE ifast_array[DCTSIZE2]; +#endif +#ifdef DCT_FLOAT_SUPPORTED + FLOAT_MULT_TYPE float_array[DCTSIZE2]; +#endif +} multiplier_table; + + +/* The current scaled-IDCT routines require ISLOW-style multiplier tables, + * so be sure to compile that code if either ISLOW or SCALING is requested. + */ +#ifdef DCT_ISLOW_SUPPORTED +#define PROVIDE_ISLOW_TABLES +#else +#ifdef IDCT_SCALING_SUPPORTED +#define PROVIDE_ISLOW_TABLES +#endif +#endif + + +/* + * Prepare for an output pass. + * Here we select the proper IDCT routine for each component and build + * a matching multiplier table. + */ + +METHODDEF(void) +start_pass (j_decompress_ptr cinfo) +{ + my_idct_ptr idct = (my_idct_ptr) cinfo->idct; + int ci, i; + jpeg_component_info *compptr; + int method = 0; + inverse_DCT_method_ptr method_ptr = NULL; + JQUANT_TBL * qtbl; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Select the proper IDCT routine for this component's scaling */ + switch (compptr->DCT_scaled_size) { +#ifdef IDCT_SCALING_SUPPORTED + case 1: + method_ptr = jpeg_idct_1x1; + method = JDCT_ISLOW; /* jidctred uses islow-style table */ + break; + case 2: + method_ptr = jpeg_idct_2x2; + method = JDCT_ISLOW; /* jidctred uses islow-style table */ + break; + case 4: + method_ptr = jpeg_idct_4x4; + method = JDCT_ISLOW; /* jidctred uses islow-style table */ + break; +#endif + case DCTSIZE: + switch (cinfo->dct_method) { +#ifdef DCT_ISLOW_SUPPORTED + case JDCT_ISLOW: + method_ptr = jpeg_idct_islow; + method = JDCT_ISLOW; + break; +#endif +#ifdef DCT_IFAST_SUPPORTED + case JDCT_IFAST: + method_ptr = jpeg_idct_ifast; + method = JDCT_IFAST; + break; +#endif +#ifdef DCT_FLOAT_SUPPORTED + case JDCT_FLOAT: + method_ptr = jpeg_idct_float; + method = JDCT_FLOAT; + break; +#endif + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + break; + } + break; + default: + ERREXIT1(cinfo, JERR_BAD_DCTSIZE, compptr->DCT_scaled_size); + break; + } + idct->pub.inverse_DCT[ci] = method_ptr; + /* Create multiplier table from quant table. + * However, we can skip this if the component is uninteresting + * or if we already built the table. Also, if no quant table + * has yet been saved for the component, we leave the + * multiplier table all-zero; we'll be reading zeroes from the + * coefficient controller's buffer anyway. + */ + if (! compptr->component_needed || idct->cur_method[ci] == method) + continue; + qtbl = compptr->quant_table; + if (qtbl == NULL) /* happens if no data yet for component */ + continue; + idct->cur_method[ci] = method; + switch (method) { +#ifdef PROVIDE_ISLOW_TABLES + case JDCT_ISLOW: + { + /* For LL&M IDCT method, multipliers are equal to raw quantization + * coefficients, but are stored as ints to ensure access efficiency. + */ + ISLOW_MULT_TYPE * ismtbl = (ISLOW_MULT_TYPE *) compptr->dct_table; + for (i = 0; i < DCTSIZE2; i++) { + ismtbl[i] = (ISLOW_MULT_TYPE) qtbl->quantval[i]; + } + } + break; +#endif +#ifdef DCT_IFAST_SUPPORTED + case JDCT_IFAST: + { + /* For AA&N IDCT method, multipliers are equal to quantization + * coefficients scaled by scalefactor[row]*scalefactor[col], where + * scalefactor[0] = 1 + * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 + * For integer operation, the multiplier table is to be scaled by + * IFAST_SCALE_BITS. + */ + IFAST_MULT_TYPE * ifmtbl = (IFAST_MULT_TYPE *) compptr->dct_table; +#define CONST_BITS 14 + static const INT16 aanscales[DCTSIZE2] = { + /* precomputed values scaled up by 14 bits */ + 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, + 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270, + 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906, + 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315, + 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, + 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552, + 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446, + 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247 + }; + SHIFT_TEMPS + + for (i = 0; i < DCTSIZE2; i++) { + ifmtbl[i] = (IFAST_MULT_TYPE) + DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], + (INT32) aanscales[i]), + CONST_BITS-IFAST_SCALE_BITS); + } + } + break; +#endif +#ifdef DCT_FLOAT_SUPPORTED + case JDCT_FLOAT: + { + /* For float AA&N IDCT method, multipliers are equal to quantization + * coefficients scaled by scalefactor[row]*scalefactor[col], where + * scalefactor[0] = 1 + * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 + */ + FLOAT_MULT_TYPE * fmtbl = (FLOAT_MULT_TYPE *) compptr->dct_table; + int row, col; + static const double aanscalefactor[DCTSIZE] = { + 1.0, 1.387039845, 1.306562965, 1.175875602, + 1.0, 0.785694958, 0.541196100, 0.275899379 + }; + + i = 0; + for (row = 0; row < DCTSIZE; row++) { + for (col = 0; col < DCTSIZE; col++) { + fmtbl[i] = (FLOAT_MULT_TYPE) + ((double) qtbl->quantval[i] * + aanscalefactor[row] * aanscalefactor[col]); + i++; + } + } + } + break; +#endif + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + break; + } + } +} + + +/* + * Initialize IDCT manager. + */ + +GLOBAL(void) +jinit_inverse_dct (j_decompress_ptr cinfo) +{ + my_idct_ptr idct; + int ci; + jpeg_component_info *compptr; + + idct = (my_idct_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_idct_controller)); + cinfo->idct = (struct jpeg_inverse_dct *) idct; + idct->pub.start_pass = start_pass; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Allocate and pre-zero a multiplier table for each component */ + compptr->dct_table = + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(multiplier_table)); + MEMZERO(compptr->dct_table, SIZEOF(multiplier_table)); + /* Mark multiplier table not yet set up for any method */ + idct->cur_method[ci] = -1; + } +} diff --git a/Build/source/extra/jpeg/jdhuff.c b/Build/source/extra/jpeg/jdhuff.c new file mode 100644 index 00000000000..b5ba39f736a --- /dev/null +++ b/Build/source/extra/jpeg/jdhuff.c @@ -0,0 +1,651 @@ +/* + * jdhuff.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains Huffman entropy decoding routines. + * + * Much of the complexity here has to do with supporting input suspension. + * If the data source module demands suspension, we want to be able to back + * up to the start of the current MCU. To do this, we copy state variables + * into local working storage, and update them back to the permanent + * storage only upon successful completion of an MCU. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdhuff.h" /* Declarations shared with jdphuff.c */ + + +/* + * Expanded entropy decoder object for Huffman decoding. + * + * The savable_state subrecord contains fields that change within an MCU, + * but must not be updated permanently until we complete the MCU. + */ + +typedef struct { + int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ +} savable_state; + +/* This macro is to work around compilers with missing or broken + * structure assignment. You'll need to fix this code if you have + * such a compiler and you change MAX_COMPS_IN_SCAN. + */ + +#ifndef NO_STRUCT_ASSIGN +#define ASSIGN_STATE(dest,src) ((dest) = (src)) +#else +#if MAX_COMPS_IN_SCAN == 4 +#define ASSIGN_STATE(dest,src) \ + ((dest).last_dc_val[0] = (src).last_dc_val[0], \ + (dest).last_dc_val[1] = (src).last_dc_val[1], \ + (dest).last_dc_val[2] = (src).last_dc_val[2], \ + (dest).last_dc_val[3] = (src).last_dc_val[3]) +#endif +#endif + + +typedef struct { + struct jpeg_entropy_decoder pub; /* public fields */ + + /* These fields are loaded into local variables at start of each MCU. + * In case of suspension, we exit WITHOUT updating them. + */ + bitread_perm_state bitstate; /* Bit buffer at start of MCU */ + savable_state saved; /* Other state at start of MCU */ + + /* These fields are NOT loaded into local working state. */ + unsigned int restarts_to_go; /* MCUs left in this restart interval */ + + /* Pointers to derived tables (these workspaces have image lifespan) */ + d_derived_tbl * dc_derived_tbls[NUM_HUFF_TBLS]; + d_derived_tbl * ac_derived_tbls[NUM_HUFF_TBLS]; + + /* Precalculated info set up by start_pass for use in decode_mcu: */ + + /* Pointers to derived tables to be used for each block within an MCU */ + d_derived_tbl * dc_cur_tbls[D_MAX_BLOCKS_IN_MCU]; + d_derived_tbl * ac_cur_tbls[D_MAX_BLOCKS_IN_MCU]; + /* Whether we care about the DC and AC coefficient values for each block */ + boolean dc_needed[D_MAX_BLOCKS_IN_MCU]; + boolean ac_needed[D_MAX_BLOCKS_IN_MCU]; +} huff_entropy_decoder; + +typedef huff_entropy_decoder * huff_entropy_ptr; + + +/* + * Initialize for a Huffman-compressed scan. + */ + +METHODDEF(void) +start_pass_huff_decoder (j_decompress_ptr cinfo) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int ci, blkn, dctbl, actbl; + jpeg_component_info * compptr; + + /* Check that the scan parameters Ss, Se, Ah/Al are OK for sequential JPEG. + * This ought to be an error condition, but we make it a warning because + * there are some baseline files out there with all zeroes in these bytes. + */ + if (cinfo->Ss != 0 || cinfo->Se != DCTSIZE2-1 || + cinfo->Ah != 0 || cinfo->Al != 0) + WARNMS(cinfo, JWRN_NOT_SEQUENTIAL); + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + dctbl = compptr->dc_tbl_no; + actbl = compptr->ac_tbl_no; + /* Compute derived values for Huffman tables */ + /* We may do this more than once for a table, but it's not expensive */ + jpeg_make_d_derived_tbl(cinfo, TRUE, dctbl, + & entropy->dc_derived_tbls[dctbl]); + jpeg_make_d_derived_tbl(cinfo, FALSE, actbl, + & entropy->ac_derived_tbls[actbl]); + /* Initialize DC predictions to 0 */ + entropy->saved.last_dc_val[ci] = 0; + } + + /* Precalculate decoding info for each block in an MCU of this scan */ + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + ci = cinfo->MCU_membership[blkn]; + compptr = cinfo->cur_comp_info[ci]; + /* Precalculate which table to use for each block */ + entropy->dc_cur_tbls[blkn] = entropy->dc_derived_tbls[compptr->dc_tbl_no]; + entropy->ac_cur_tbls[blkn] = entropy->ac_derived_tbls[compptr->ac_tbl_no]; + /* Decide whether we really care about the coefficient values */ + if (compptr->component_needed) { + entropy->dc_needed[blkn] = TRUE; + /* we don't need the ACs if producing a 1/8th-size image */ + entropy->ac_needed[blkn] = (compptr->DCT_scaled_size > 1); + } else { + entropy->dc_needed[blkn] = entropy->ac_needed[blkn] = FALSE; + } + } + + /* Initialize bitread state variables */ + entropy->bitstate.bits_left = 0; + entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */ + entropy->pub.insufficient_data = FALSE; + + /* Initialize restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; +} + + +/* + * Compute the derived values for a Huffman table. + * This routine also performs some validation checks on the table. + * + * Note this is also used by jdphuff.c. + */ + +GLOBAL(void) +jpeg_make_d_derived_tbl (j_decompress_ptr cinfo, boolean isDC, int tblno, + d_derived_tbl ** pdtbl) +{ + JHUFF_TBL *htbl; + d_derived_tbl *dtbl; + int p, i, l, si, numsymbols; + int lookbits, ctr; + char huffsize[257]; + unsigned int huffcode[257]; + unsigned int code; + + /* Note that huffsize[] and huffcode[] are filled in code-length order, + * paralleling the order of the symbols themselves in htbl->huffval[]. + */ + + /* Find the input Huffman table */ + if (tblno < 0 || tblno >= NUM_HUFF_TBLS) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); + htbl = + isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno]; + if (htbl == NULL) + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); + + /* Allocate a workspace if we haven't already done so. */ + if (*pdtbl == NULL) + *pdtbl = (d_derived_tbl *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(d_derived_tbl)); + dtbl = *pdtbl; + dtbl->pub = htbl; /* fill in back link */ + + /* Figure C.1: make table of Huffman code length for each symbol */ + + p = 0; + for (l = 1; l <= 16; l++) { + i = (int) htbl->bits[l]; + if (i < 0 || p + i > 256) /* protect against table overrun */ + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + while (i--) + huffsize[p++] = (char) l; + } + huffsize[p] = 0; + numsymbols = p; + + /* Figure C.2: generate the codes themselves */ + /* We also validate that the counts represent a legal Huffman code tree. */ + + code = 0; + si = huffsize[0]; + p = 0; + while (huffsize[p]) { + while (((int) huffsize[p]) == si) { + huffcode[p++] = code; + code++; + } + /* code is now 1 more than the last code used for codelength si; but + * it must still fit in si bits, since no code is allowed to be all ones. + */ + if (((INT32) code) >= (((INT32) 1) << si)) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + code <<= 1; + si++; + } + + /* Figure F.15: generate decoding tables for bit-sequential decoding */ + + p = 0; + for (l = 1; l <= 16; l++) { + if (htbl->bits[l]) { + /* valoffset[l] = huffval[] index of 1st symbol of code length l, + * minus the minimum code of length l + */ + dtbl->valoffset[l] = (INT32) p - (INT32) huffcode[p]; + p += htbl->bits[l]; + dtbl->maxcode[l] = huffcode[p-1]; /* maximum code of length l */ + } else { + dtbl->maxcode[l] = -1; /* -1 if no codes of this length */ + } + } + dtbl->maxcode[17] = 0xFFFFFL; /* ensures jpeg_huff_decode terminates */ + + /* Compute lookahead tables to speed up decoding. + * First we set all the table entries to 0, indicating "too long"; + * then we iterate through the Huffman codes that are short enough and + * fill in all the entries that correspond to bit sequences starting + * with that code. + */ + + MEMZERO(dtbl->look_nbits, SIZEOF(dtbl->look_nbits)); + + p = 0; + for (l = 1; l <= HUFF_LOOKAHEAD; l++) { + for (i = 1; i <= (int) htbl->bits[l]; i++, p++) { + /* l = current code's length, p = its index in huffcode[] & huffval[]. */ + /* Generate left-justified code followed by all possible bit sequences */ + lookbits = huffcode[p] << (HUFF_LOOKAHEAD-l); + for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) { + dtbl->look_nbits[lookbits] = l; + dtbl->look_sym[lookbits] = htbl->huffval[p]; + lookbits++; + } + } + } + + /* Validate symbols as being reasonable. + * For AC tables, we make no check, but accept all byte values 0..255. + * For DC tables, we require the symbols to be in range 0..15. + * (Tighter bounds could be applied depending on the data depth and mode, + * but this is sufficient to ensure safe decoding.) + */ + if (isDC) { + for (i = 0; i < numsymbols; i++) { + int sym = htbl->huffval[i]; + if (sym < 0 || sym > 15) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + } + } +} + + +/* + * Out-of-line code for bit fetching (shared with jdphuff.c). + * See jdhuff.h for info about usage. + * Note: current values of get_buffer and bits_left are passed as parameters, + * but are returned in the corresponding fields of the state struct. + * + * On most machines MIN_GET_BITS should be 25 to allow the full 32-bit width + * of get_buffer to be used. (On machines with wider words, an even larger + * buffer could be used.) However, on some machines 32-bit shifts are + * quite slow and take time proportional to the number of places shifted. + * (This is true with most PC compilers, for instance.) In this case it may + * be a win to set MIN_GET_BITS to the minimum value of 15. This reduces the + * average shift distance at the cost of more calls to jpeg_fill_bit_buffer. + */ + +#ifdef SLOW_SHIFT_32 +#define MIN_GET_BITS 15 /* minimum allowable value */ +#else +#define MIN_GET_BITS (BIT_BUF_SIZE-7) +#endif + + +GLOBAL(boolean) +jpeg_fill_bit_buffer (bitread_working_state * state, + register bit_buf_type get_buffer, register int bits_left, + int nbits) +/* Load up the bit buffer to a depth of at least nbits */ +{ + /* Copy heavily used state fields into locals (hopefully registers) */ + register const JOCTET * next_input_byte = state->next_input_byte; + register size_t bytes_in_buffer = state->bytes_in_buffer; + j_decompress_ptr cinfo = state->cinfo; + + /* Attempt to load at least MIN_GET_BITS bits into get_buffer. */ + /* (It is assumed that no request will be for more than that many bits.) */ + /* We fail to do so only if we hit a marker or are forced to suspend. */ + + if (cinfo->unread_marker == 0) { /* cannot advance past a marker */ + while (bits_left < MIN_GET_BITS) { + register int c; + + /* Attempt to read a byte */ + if (bytes_in_buffer == 0) { + if (! (*cinfo->src->fill_input_buffer) (cinfo)) + return FALSE; + next_input_byte = cinfo->src->next_input_byte; + bytes_in_buffer = cinfo->src->bytes_in_buffer; + } + bytes_in_buffer--; + c = GETJOCTET(*next_input_byte++); + + /* If it's 0xFF, check and discard stuffed zero byte */ + if (c == 0xFF) { + /* Loop here to discard any padding FF's on terminating marker, + * so that we can save a valid unread_marker value. NOTE: we will + * accept multiple FF's followed by a 0 as meaning a single FF data + * byte. This data pattern is not valid according to the standard. + */ + do { + if (bytes_in_buffer == 0) { + if (! (*cinfo->src->fill_input_buffer) (cinfo)) + return FALSE; + next_input_byte = cinfo->src->next_input_byte; + bytes_in_buffer = cinfo->src->bytes_in_buffer; + } + bytes_in_buffer--; + c = GETJOCTET(*next_input_byte++); + } while (c == 0xFF); + + if (c == 0) { + /* Found FF/00, which represents an FF data byte */ + c = 0xFF; + } else { + /* Oops, it's actually a marker indicating end of compressed data. + * Save the marker code for later use. + * Fine point: it might appear that we should save the marker into + * bitread working state, not straight into permanent state. But + * once we have hit a marker, we cannot need to suspend within the + * current MCU, because we will read no more bytes from the data + * source. So it is OK to update permanent state right away. + */ + cinfo->unread_marker = c; + /* See if we need to insert some fake zero bits. */ + goto no_more_bytes; + } + } + + /* OK, load c into get_buffer */ + get_buffer = (get_buffer << 8) | c; + bits_left += 8; + } /* end while */ + } else { + no_more_bytes: + /* We get here if we've read the marker that terminates the compressed + * data segment. There should be enough bits in the buffer register + * to satisfy the request; if so, no problem. + */ + if (nbits > bits_left) { + /* Uh-oh. Report corrupted data to user and stuff zeroes into + * the data stream, so that we can produce some kind of image. + * We use a nonvolatile flag to ensure that only one warning message + * appears per data segment. + */ + if (! cinfo->entropy->insufficient_data) { + WARNMS(cinfo, JWRN_HIT_MARKER); + cinfo->entropy->insufficient_data = TRUE; + } + /* Fill the buffer with zero bits */ + get_buffer <<= MIN_GET_BITS - bits_left; + bits_left = MIN_GET_BITS; + } + } + + /* Unload the local registers */ + state->next_input_byte = next_input_byte; + state->bytes_in_buffer = bytes_in_buffer; + state->get_buffer = get_buffer; + state->bits_left = bits_left; + + return TRUE; +} + + +/* + * Out-of-line code for Huffman code decoding. + * See jdhuff.h for info about usage. + */ + +GLOBAL(int) +jpeg_huff_decode (bitread_working_state * state, + register bit_buf_type get_buffer, register int bits_left, + d_derived_tbl * htbl, int min_bits) +{ + register int l = min_bits; + register INT32 code; + + /* HUFF_DECODE has determined that the code is at least min_bits */ + /* bits long, so fetch that many bits in one swoop. */ + + CHECK_BIT_BUFFER(*state, l, return -1); + code = GET_BITS(l); + + /* Collect the rest of the Huffman code one bit at a time. */ + /* This is per Figure F.16 in the JPEG spec. */ + + while (code > htbl->maxcode[l]) { + code <<= 1; + CHECK_BIT_BUFFER(*state, 1, return -1); + code |= GET_BITS(1); + l++; + } + + /* Unload the local registers */ + state->get_buffer = get_buffer; + state->bits_left = bits_left; + + /* With garbage input we may reach the sentinel value l = 17. */ + + if (l > 16) { + WARNMS(state->cinfo, JWRN_HUFF_BAD_CODE); + return 0; /* fake a zero as the safest result */ + } + + return htbl->pub->huffval[ (int) (code + htbl->valoffset[l]) ]; +} + + +/* + * Figure F.12: extend sign bit. + * On some machines, a shift and add will be faster than a table lookup. + */ + +#ifdef AVOID_TABLES + +#define HUFF_EXTEND(x,s) ((x) < (1<<((s)-1)) ? (x) + (((-1)<<(s)) + 1) : (x)) + +#else + +#define HUFF_EXTEND(x,s) ((x) < extend_test[s] ? (x) + extend_offset[s] : (x)) + +static const int extend_test[16] = /* entry n is 2**(n-1) */ + { 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, + 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 }; + +static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */ + { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, + ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, + ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, + ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; + +#endif /* AVOID_TABLES */ + + +/* + * Check for a restart marker & resynchronize decoder. + * Returns FALSE if must suspend. + */ + +LOCAL(boolean) +process_restart (j_decompress_ptr cinfo) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int ci; + + /* Throw away any unused bits remaining in bit buffer; */ + /* include any full bytes in next_marker's count of discarded bytes */ + cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8; + entropy->bitstate.bits_left = 0; + + /* Advance past the RSTn marker */ + if (! (*cinfo->marker->read_restart_marker) (cinfo)) + return FALSE; + + /* Re-initialize DC predictions to 0 */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) + entropy->saved.last_dc_val[ci] = 0; + + /* Reset restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; + + /* Reset out-of-data flag, unless read_restart_marker left us smack up + * against a marker. In that case we will end up treating the next data + * segment as empty, and we can avoid producing bogus output pixels by + * leaving the flag set. + */ + if (cinfo->unread_marker == 0) + entropy->pub.insufficient_data = FALSE; + + return TRUE; +} + + +/* + * Decode and return one MCU's worth of Huffman-compressed coefficients. + * The coefficients are reordered from zigzag order into natural array order, + * but are not dequantized. + * + * The i'th block of the MCU is stored into the block pointed to by + * MCU_data[i]. WE ASSUME THIS AREA HAS BEEN ZEROED BY THE CALLER. + * (Wholesale zeroing is usually a little faster than retail...) + * + * Returns FALSE if data source requested suspension. In that case no + * changes have been made to permanent state. (Exception: some output + * coefficients may already have been assigned. This is harmless for + * this module, since we'll just re-assign them on the next call.) + */ + +METHODDEF(boolean) +decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int blkn; + BITREAD_STATE_VARS; + savable_state state; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* If we've run out of data, just leave the MCU set to zeroes. + * This way, we return uniform gray for the remainder of the segment. + */ + if (! entropy->pub.insufficient_data) { + + /* Load up working state */ + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(state, entropy->saved); + + /* Outer loop handles each block in the MCU */ + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + JBLOCKROW block = MCU_data[blkn]; + d_derived_tbl * dctbl = entropy->dc_cur_tbls[blkn]; + d_derived_tbl * actbl = entropy->ac_cur_tbls[blkn]; + register int s, k, r; + + /* Decode a single block's worth of coefficients */ + + /* Section F.2.2.1: decode the DC coefficient difference */ + HUFF_DECODE(s, br_state, dctbl, return FALSE, label1); + if (s) { + CHECK_BIT_BUFFER(br_state, s, return FALSE); + r = GET_BITS(s); + s = HUFF_EXTEND(r, s); + } + + if (entropy->dc_needed[blkn]) { + /* Convert DC difference to actual value, update last_dc_val */ + int ci = cinfo->MCU_membership[blkn]; + s += state.last_dc_val[ci]; + state.last_dc_val[ci] = s; + /* Output the DC coefficient (assumes jpeg_natural_order[0] = 0) */ + (*block)[0] = (JCOEF) s; + } + + if (entropy->ac_needed[blkn]) { + + /* Section F.2.2.2: decode the AC coefficients */ + /* Since zeroes are skipped, output area must be cleared beforehand */ + for (k = 1; k < DCTSIZE2; k++) { + HUFF_DECODE(s, br_state, actbl, return FALSE, label2); + + r = s >> 4; + s &= 15; + + if (s) { + k += r; + CHECK_BIT_BUFFER(br_state, s, return FALSE); + r = GET_BITS(s); + s = HUFF_EXTEND(r, s); + /* Output coefficient in natural (dezigzagged) order. + * Note: the extra entries in jpeg_natural_order[] will save us + * if k >= DCTSIZE2, which could happen if the data is corrupted. + */ + (*block)[jpeg_natural_order[k]] = (JCOEF) s; + } else { + if (r != 15) + break; + k += 15; + } + } + + } else { + + /* Section F.2.2.2: decode the AC coefficients */ + /* In this path we just discard the values */ + for (k = 1; k < DCTSIZE2; k++) { + HUFF_DECODE(s, br_state, actbl, return FALSE, label3); + + r = s >> 4; + s &= 15; + + if (s) { + k += r; + CHECK_BIT_BUFFER(br_state, s, return FALSE); + DROP_BITS(s); + } else { + if (r != 15) + break; + k += 15; + } + } + + } + } + + /* Completed MCU, so update state */ + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(entropy->saved, state); + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; +} + + +/* + * Module initialization routine for Huffman entropy decoding. + */ + +GLOBAL(void) +jinit_huff_decoder (j_decompress_ptr cinfo) +{ + huff_entropy_ptr entropy; + int i; + + entropy = (huff_entropy_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(huff_entropy_decoder)); + cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; + entropy->pub.start_pass = start_pass_huff_decoder; + entropy->pub.decode_mcu = decode_mcu; + + /* Mark tables unallocated */ + for (i = 0; i < NUM_HUFF_TBLS; i++) { + entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL; + } +} diff --git a/Build/source/extra/jpeg/jdhuff.h b/Build/source/extra/jpeg/jdhuff.h new file mode 100644 index 00000000000..ae19b6cafd7 --- /dev/null +++ b/Build/source/extra/jpeg/jdhuff.h @@ -0,0 +1,201 @@ +/* + * jdhuff.h + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains declarations for Huffman entropy decoding routines + * that are shared between the sequential decoder (jdhuff.c) and the + * progressive decoder (jdphuff.c). No other modules need to see these. + */ + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_make_d_derived_tbl jMkDDerived +#define jpeg_fill_bit_buffer jFilBitBuf +#define jpeg_huff_decode jHufDecode +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* Derived data constructed for each Huffman table */ + +#define HUFF_LOOKAHEAD 8 /* # of bits of lookahead */ + +typedef struct { + /* Basic tables: (element [0] of each array is unused) */ + INT32 maxcode[18]; /* largest code of length k (-1 if none) */ + /* (maxcode[17] is a sentinel to ensure jpeg_huff_decode terminates) */ + INT32 valoffset[17]; /* huffval[] offset for codes of length k */ + /* valoffset[k] = huffval[] index of 1st symbol of code length k, less + * the smallest code of length k; so given a code of length k, the + * corresponding symbol is huffval[code + valoffset[k]] + */ + + /* Link to public Huffman table (needed only in jpeg_huff_decode) */ + JHUFF_TBL *pub; + + /* Lookahead tables: indexed by the next HUFF_LOOKAHEAD bits of + * the input data stream. If the next Huffman code is no more + * than HUFF_LOOKAHEAD bits long, we can obtain its length and + * the corresponding symbol directly from these tables. + */ + int look_nbits[1< 32 bits on your machine, and shifting/masking longs is + * reasonably fast, making bit_buf_type be long and setting BIT_BUF_SIZE + * appropriately should be a win. Unfortunately we can't define the size + * with something like #define BIT_BUF_SIZE (sizeof(bit_buf_type)*8) + * because not all machines measure sizeof in 8-bit bytes. + */ + +typedef struct { /* Bitreading state saved across MCUs */ + bit_buf_type get_buffer; /* current bit-extraction buffer */ + int bits_left; /* # of unused bits in it */ +} bitread_perm_state; + +typedef struct { /* Bitreading working state within an MCU */ + /* Current data source location */ + /* We need a copy, rather than munging the original, in case of suspension */ + const JOCTET * next_input_byte; /* => next byte to read from source */ + size_t bytes_in_buffer; /* # of bytes remaining in source buffer */ + /* Bit input buffer --- note these values are kept in register variables, + * not in this struct, inside the inner loops. + */ + bit_buf_type get_buffer; /* current bit-extraction buffer */ + int bits_left; /* # of unused bits in it */ + /* Pointer needed by jpeg_fill_bit_buffer. */ + j_decompress_ptr cinfo; /* back link to decompress master record */ +} bitread_working_state; + +/* Macros to declare and load/save bitread local variables. */ +#define BITREAD_STATE_VARS \ + register bit_buf_type get_buffer; \ + register int bits_left; \ + bitread_working_state br_state + +#define BITREAD_LOAD_STATE(cinfop,permstate) \ + br_state.cinfo = cinfop; \ + br_state.next_input_byte = cinfop->src->next_input_byte; \ + br_state.bytes_in_buffer = cinfop->src->bytes_in_buffer; \ + get_buffer = permstate.get_buffer; \ + bits_left = permstate.bits_left; + +#define BITREAD_SAVE_STATE(cinfop,permstate) \ + cinfop->src->next_input_byte = br_state.next_input_byte; \ + cinfop->src->bytes_in_buffer = br_state.bytes_in_buffer; \ + permstate.get_buffer = get_buffer; \ + permstate.bits_left = bits_left + +/* + * These macros provide the in-line portion of bit fetching. + * Use CHECK_BIT_BUFFER to ensure there are N bits in get_buffer + * before using GET_BITS, PEEK_BITS, or DROP_BITS. + * The variables get_buffer and bits_left are assumed to be locals, + * but the state struct might not be (jpeg_huff_decode needs this). + * CHECK_BIT_BUFFER(state,n,action); + * Ensure there are N bits in get_buffer; if suspend, take action. + * val = GET_BITS(n); + * Fetch next N bits. + * val = PEEK_BITS(n); + * Fetch next N bits without removing them from the buffer. + * DROP_BITS(n); + * Discard next N bits. + * The value N should be a simple variable, not an expression, because it + * is evaluated multiple times. + */ + +#define CHECK_BIT_BUFFER(state,nbits,action) \ + { if (bits_left < (nbits)) { \ + if (! jpeg_fill_bit_buffer(&(state),get_buffer,bits_left,nbits)) \ + { action; } \ + get_buffer = (state).get_buffer; bits_left = (state).bits_left; } } + +#define GET_BITS(nbits) \ + (((int) (get_buffer >> (bits_left -= (nbits)))) & ((1<<(nbits))-1)) + +#define PEEK_BITS(nbits) \ + (((int) (get_buffer >> (bits_left - (nbits)))) & ((1<<(nbits))-1)) + +#define DROP_BITS(nbits) \ + (bits_left -= (nbits)) + +/* Load up the bit buffer to a depth of at least nbits */ +EXTERN(boolean) jpeg_fill_bit_buffer + JPP((bitread_working_state * state, register bit_buf_type get_buffer, + register int bits_left, int nbits)); + + +/* + * Code for extracting next Huffman-coded symbol from input bit stream. + * Again, this is time-critical and we make the main paths be macros. + * + * We use a lookahead table to process codes of up to HUFF_LOOKAHEAD bits + * without looping. Usually, more than 95% of the Huffman codes will be 8 + * or fewer bits long. The few overlength codes are handled with a loop, + * which need not be inline code. + * + * Notes about the HUFF_DECODE macro: + * 1. Near the end of the data segment, we may fail to get enough bits + * for a lookahead. In that case, we do it the hard way. + * 2. If the lookahead table contains no entry, the next code must be + * more than HUFF_LOOKAHEAD bits long. + * 3. jpeg_huff_decode returns -1 if forced to suspend. + */ + +#define HUFF_DECODE(result,state,htbl,failaction,slowlabel) \ +{ register int nb, look; \ + if (bits_left < HUFF_LOOKAHEAD) { \ + if (! jpeg_fill_bit_buffer(&state,get_buffer,bits_left, 0)) {failaction;} \ + get_buffer = state.get_buffer; bits_left = state.bits_left; \ + if (bits_left < HUFF_LOOKAHEAD) { \ + nb = 1; goto slowlabel; \ + } \ + } \ + look = PEEK_BITS(HUFF_LOOKAHEAD); \ + if ((nb = htbl->look_nbits[look]) != 0) { \ + DROP_BITS(nb); \ + result = htbl->look_sym[look]; \ + } else { \ + nb = HUFF_LOOKAHEAD+1; \ +slowlabel: \ + if ((result=jpeg_huff_decode(&state,get_buffer,bits_left,htbl,nb)) < 0) \ + { failaction; } \ + get_buffer = state.get_buffer; bits_left = state.bits_left; \ + } \ +} + +/* Out-of-line case for Huffman code fetching */ +EXTERN(int) jpeg_huff_decode + JPP((bitread_working_state * state, register bit_buf_type get_buffer, + register int bits_left, d_derived_tbl * htbl, int min_bits)); diff --git a/Build/source/extra/jpeg/jdinput.c b/Build/source/extra/jpeg/jdinput.c new file mode 100644 index 00000000000..0c2ac8f120b --- /dev/null +++ b/Build/source/extra/jpeg/jdinput.c @@ -0,0 +1,381 @@ +/* + * jdinput.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains input control logic for the JPEG decompressor. + * These routines are concerned with controlling the decompressor's input + * processing (marker reading and coefficient decoding). The actual input + * reading is done in jdmarker.c, jdhuff.c, and jdphuff.c. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private state */ + +typedef struct { + struct jpeg_input_controller pub; /* public fields */ + + boolean inheaders; /* TRUE until first SOS is reached */ +} my_input_controller; + +typedef my_input_controller * my_inputctl_ptr; + + +/* Forward declarations */ +METHODDEF(int) consume_markers JPP((j_decompress_ptr cinfo)); + + +/* + * Routines to calculate various quantities related to the size of the image. + */ + +LOCAL(void) +initial_setup (j_decompress_ptr cinfo) +/* Called once, when first SOS marker is reached */ +{ + int ci; + jpeg_component_info *compptr; + + /* Make sure image isn't bigger than I can handle */ + if ((long) cinfo->image_height > (long) JPEG_MAX_DIMENSION || + (long) cinfo->image_width > (long) JPEG_MAX_DIMENSION) + ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION); + + /* For now, precision must match compiled-in value... */ + if (cinfo->data_precision != BITS_IN_JSAMPLE) + ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); + + /* Check that number of components won't exceed internal array sizes */ + if (cinfo->num_components > MAX_COMPONENTS) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, + MAX_COMPONENTS); + + /* Compute maximum sampling factors; check factor validity */ + cinfo->max_h_samp_factor = 1; + cinfo->max_v_samp_factor = 1; + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR || + compptr->v_samp_factor<=0 || compptr->v_samp_factor>MAX_SAMP_FACTOR) + ERREXIT(cinfo, JERR_BAD_SAMPLING); + cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor, + compptr->h_samp_factor); + cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor, + compptr->v_samp_factor); + } + + /* We initialize DCT_scaled_size and min_DCT_scaled_size to DCTSIZE. + * In the full decompressor, this will be overridden by jdmaster.c; + * but in the transcoder, jdmaster.c is not used, so we must do it here. + */ + cinfo->min_DCT_scaled_size = DCTSIZE; + + /* Compute dimensions of components */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + compptr->DCT_scaled_size = DCTSIZE; + /* Size in DCT blocks */ + compptr->width_in_blocks = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, + (long) (cinfo->max_h_samp_factor * DCTSIZE)); + compptr->height_in_blocks = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, + (long) (cinfo->max_v_samp_factor * DCTSIZE)); + /* downsampled_width and downsampled_height will also be overridden by + * jdmaster.c if we are doing full decompression. The transcoder library + * doesn't use these values, but the calling application might. + */ + /* Size in samples */ + compptr->downsampled_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, + (long) cinfo->max_h_samp_factor); + compptr->downsampled_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, + (long) cinfo->max_v_samp_factor); + /* Mark component needed, until color conversion says otherwise */ + compptr->component_needed = TRUE; + /* Mark no quantization table yet saved for component */ + compptr->quant_table = NULL; + } + + /* Compute number of fully interleaved MCU rows. */ + cinfo->total_iMCU_rows = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, + (long) (cinfo->max_v_samp_factor*DCTSIZE)); + + /* Decide whether file contains multiple scans */ + if (cinfo->comps_in_scan < cinfo->num_components || cinfo->progressive_mode) + cinfo->inputctl->has_multiple_scans = TRUE; + else + cinfo->inputctl->has_multiple_scans = FALSE; +} + + +LOCAL(void) +per_scan_setup (j_decompress_ptr cinfo) +/* Do computations that are needed before processing a JPEG scan */ +/* cinfo->comps_in_scan and cinfo->cur_comp_info[] were set from SOS marker */ +{ + int ci, mcublks, tmp; + jpeg_component_info *compptr; + + if (cinfo->comps_in_scan == 1) { + + /* Noninterleaved (single-component) scan */ + compptr = cinfo->cur_comp_info[0]; + + /* Overall image size in MCUs */ + cinfo->MCUs_per_row = compptr->width_in_blocks; + cinfo->MCU_rows_in_scan = compptr->height_in_blocks; + + /* For noninterleaved scan, always one block per MCU */ + compptr->MCU_width = 1; + compptr->MCU_height = 1; + compptr->MCU_blocks = 1; + compptr->MCU_sample_width = compptr->DCT_scaled_size; + compptr->last_col_width = 1; + /* For noninterleaved scans, it is convenient to define last_row_height + * as the number of block rows present in the last iMCU row. + */ + tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + if (tmp == 0) tmp = compptr->v_samp_factor; + compptr->last_row_height = tmp; + + /* Prepare array describing MCU composition */ + cinfo->blocks_in_MCU = 1; + cinfo->MCU_membership[0] = 0; + + } else { + + /* Interleaved (multi-component) scan */ + if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN) + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan, + MAX_COMPS_IN_SCAN); + + /* Overall image size in MCUs */ + cinfo->MCUs_per_row = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, + (long) (cinfo->max_h_samp_factor*DCTSIZE)); + cinfo->MCU_rows_in_scan = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, + (long) (cinfo->max_v_samp_factor*DCTSIZE)); + + cinfo->blocks_in_MCU = 0; + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Sampling factors give # of blocks of component in each MCU */ + compptr->MCU_width = compptr->h_samp_factor; + compptr->MCU_height = compptr->v_samp_factor; + compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height; + compptr->MCU_sample_width = compptr->MCU_width * compptr->DCT_scaled_size; + /* Figure number of non-dummy blocks in last MCU column & row */ + tmp = (int) (compptr->width_in_blocks % compptr->MCU_width); + if (tmp == 0) tmp = compptr->MCU_width; + compptr->last_col_width = tmp; + tmp = (int) (compptr->height_in_blocks % compptr->MCU_height); + if (tmp == 0) tmp = compptr->MCU_height; + compptr->last_row_height = tmp; + /* Prepare array describing MCU composition */ + mcublks = compptr->MCU_blocks; + if (cinfo->blocks_in_MCU + mcublks > D_MAX_BLOCKS_IN_MCU) + ERREXIT(cinfo, JERR_BAD_MCU_SIZE); + while (mcublks-- > 0) { + cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci; + } + } + + } +} + + +/* + * Save away a copy of the Q-table referenced by each component present + * in the current scan, unless already saved during a prior scan. + * + * In a multiple-scan JPEG file, the encoder could assign different components + * the same Q-table slot number, but change table definitions between scans + * so that each component uses a different Q-table. (The IJG encoder is not + * currently capable of doing this, but other encoders might.) Since we want + * to be able to dequantize all the components at the end of the file, this + * means that we have to save away the table actually used for each component. + * We do this by copying the table at the start of the first scan containing + * the component. + * The JPEG spec prohibits the encoder from changing the contents of a Q-table + * slot between scans of a component using that slot. If the encoder does so + * anyway, this decoder will simply use the Q-table values that were current + * at the start of the first scan for the component. + * + * The decompressor output side looks only at the saved quant tables, + * not at the current Q-table slots. + */ + +LOCAL(void) +latch_quant_tables (j_decompress_ptr cinfo) +{ + int ci, qtblno; + jpeg_component_info *compptr; + JQUANT_TBL * qtbl; + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* No work if we already saved Q-table for this component */ + if (compptr->quant_table != NULL) + continue; + /* Make sure specified quantization table is present */ + qtblno = compptr->quant_tbl_no; + if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS || + cinfo->quant_tbl_ptrs[qtblno] == NULL) + ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno); + /* OK, save away the quantization table */ + qtbl = (JQUANT_TBL *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(JQUANT_TBL)); + MEMCOPY(qtbl, cinfo->quant_tbl_ptrs[qtblno], SIZEOF(JQUANT_TBL)); + compptr->quant_table = qtbl; + } +} + + +/* + * Initialize the input modules to read a scan of compressed data. + * The first call to this is done by jdmaster.c after initializing + * the entire decompressor (during jpeg_start_decompress). + * Subsequent calls come from consume_markers, below. + */ + +METHODDEF(void) +start_input_pass (j_decompress_ptr cinfo) +{ + per_scan_setup(cinfo); + latch_quant_tables(cinfo); + (*cinfo->entropy->start_pass) (cinfo); + (*cinfo->coef->start_input_pass) (cinfo); + cinfo->inputctl->consume_input = cinfo->coef->consume_data; +} + + +/* + * Finish up after inputting a compressed-data scan. + * This is called by the coefficient controller after it's read all + * the expected data of the scan. + */ + +METHODDEF(void) +finish_input_pass (j_decompress_ptr cinfo) +{ + cinfo->inputctl->consume_input = consume_markers; +} + + +/* + * Read JPEG markers before, between, or after compressed-data scans. + * Change state as necessary when a new scan is reached. + * Return value is JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. + * + * The consume_input method pointer points either here or to the + * coefficient controller's consume_data routine, depending on whether + * we are reading a compressed data segment or inter-segment markers. + */ + +METHODDEF(int) +consume_markers (j_decompress_ptr cinfo) +{ + my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl; + int val; + + if (inputctl->pub.eoi_reached) /* After hitting EOI, read no further */ + return JPEG_REACHED_EOI; + + val = (*cinfo->marker->read_markers) (cinfo); + + switch (val) { + case JPEG_REACHED_SOS: /* Found SOS */ + if (inputctl->inheaders) { /* 1st SOS */ + initial_setup(cinfo); + inputctl->inheaders = FALSE; + /* Note: start_input_pass must be called by jdmaster.c + * before any more input can be consumed. jdapimin.c is + * responsible for enforcing this sequencing. + */ + } else { /* 2nd or later SOS marker */ + if (! inputctl->pub.has_multiple_scans) + ERREXIT(cinfo, JERR_EOI_EXPECTED); /* Oops, I wasn't expecting this! */ + start_input_pass(cinfo); + } + break; + case JPEG_REACHED_EOI: /* Found EOI */ + inputctl->pub.eoi_reached = TRUE; + if (inputctl->inheaders) { /* Tables-only datastream, apparently */ + if (cinfo->marker->saw_SOF) + ERREXIT(cinfo, JERR_SOF_NO_SOS); + } else { + /* Prevent infinite loop in coef ctlr's decompress_data routine + * if user set output_scan_number larger than number of scans. + */ + if (cinfo->output_scan_number > cinfo->input_scan_number) + cinfo->output_scan_number = cinfo->input_scan_number; + } + break; + case JPEG_SUSPENDED: + break; + } + + return val; +} + + +/* + * Reset state to begin a fresh datastream. + */ + +METHODDEF(void) +reset_input_controller (j_decompress_ptr cinfo) +{ + my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl; + + inputctl->pub.consume_input = consume_markers; + inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */ + inputctl->pub.eoi_reached = FALSE; + inputctl->inheaders = TRUE; + /* Reset other modules */ + (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); + (*cinfo->marker->reset_marker_reader) (cinfo); + /* Reset progression state -- would be cleaner if entropy decoder did this */ + cinfo->coef_bits = NULL; +} + + +/* + * Initialize the input controller module. + * This is called only once, when the decompression object is created. + */ + +GLOBAL(void) +jinit_input_controller (j_decompress_ptr cinfo) +{ + my_inputctl_ptr inputctl; + + /* Create subobject in permanent pool */ + inputctl = (my_inputctl_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + SIZEOF(my_input_controller)); + cinfo->inputctl = (struct jpeg_input_controller *) inputctl; + /* Initialize method pointers */ + inputctl->pub.consume_input = consume_markers; + inputctl->pub.reset_input_controller = reset_input_controller; + inputctl->pub.start_input_pass = start_input_pass; + inputctl->pub.finish_input_pass = finish_input_pass; + /* Initialize state: can't use reset_input_controller since we don't + * want to try to reset other modules yet. + */ + inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */ + inputctl->pub.eoi_reached = FALSE; + inputctl->inheaders = TRUE; +} diff --git a/Build/source/extra/jpeg/jdmainct.c b/Build/source/extra/jpeg/jdmainct.c new file mode 100644 index 00000000000..13c956f5deb --- /dev/null +++ b/Build/source/extra/jpeg/jdmainct.c @@ -0,0 +1,512 @@ +/* + * jdmainct.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the main buffer controller for decompression. + * The main buffer lies between the JPEG decompressor proper and the + * post-processor; it holds downsampled data in the JPEG colorspace. + * + * Note that this code is bypassed in raw-data mode, since the application + * supplies the equivalent of the main buffer in that case. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * In the current system design, the main buffer need never be a full-image + * buffer; any full-height buffers will be found inside the coefficient or + * postprocessing controllers. Nonetheless, the main controller is not + * trivial. Its responsibility is to provide context rows for upsampling/ + * rescaling, and doing this in an efficient fashion is a bit tricky. + * + * Postprocessor input data is counted in "row groups". A row group + * is defined to be (v_samp_factor * DCT_scaled_size / min_DCT_scaled_size) + * sample rows of each component. (We require DCT_scaled_size values to be + * chosen such that these numbers are integers. In practice DCT_scaled_size + * values will likely be powers of two, so we actually have the stronger + * condition that DCT_scaled_size / min_DCT_scaled_size is an integer.) + * Upsampling will typically produce max_v_samp_factor pixel rows from each + * row group (times any additional scale factor that the upsampler is + * applying). + * + * The coefficient controller will deliver data to us one iMCU row at a time; + * each iMCU row contains v_samp_factor * DCT_scaled_size sample rows, or + * exactly min_DCT_scaled_size row groups. (This amount of data corresponds + * to one row of MCUs when the image is fully interleaved.) Note that the + * number of sample rows varies across components, but the number of row + * groups does not. Some garbage sample rows may be included in the last iMCU + * row at the bottom of the image. + * + * Depending on the vertical scaling algorithm used, the upsampler may need + * access to the sample row(s) above and below its current input row group. + * The upsampler is required to set need_context_rows TRUE at global selection + * time if so. When need_context_rows is FALSE, this controller can simply + * obtain one iMCU row at a time from the coefficient controller and dole it + * out as row groups to the postprocessor. + * + * When need_context_rows is TRUE, this controller guarantees that the buffer + * passed to postprocessing contains at least one row group's worth of samples + * above and below the row group(s) being processed. Note that the context + * rows "above" the first passed row group appear at negative row offsets in + * the passed buffer. At the top and bottom of the image, the required + * context rows are manufactured by duplicating the first or last real sample + * row; this avoids having special cases in the upsampling inner loops. + * + * The amount of context is fixed at one row group just because that's a + * convenient number for this controller to work with. The existing + * upsamplers really only need one sample row of context. An upsampler + * supporting arbitrary output rescaling might wish for more than one row + * group of context when shrinking the image; tough, we don't handle that. + * (This is justified by the assumption that downsizing will be handled mostly + * by adjusting the DCT_scaled_size values, so that the actual scale factor at + * the upsample step needn't be much less than one.) + * + * To provide the desired context, we have to retain the last two row groups + * of one iMCU row while reading in the next iMCU row. (The last row group + * can't be processed until we have another row group for its below-context, + * and so we have to save the next-to-last group too for its above-context.) + * We could do this most simply by copying data around in our buffer, but + * that'd be very slow. We can avoid copying any data by creating a rather + * strange pointer structure. Here's how it works. We allocate a workspace + * consisting of M+2 row groups (where M = min_DCT_scaled_size is the number + * of row groups per iMCU row). We create two sets of redundant pointers to + * the workspace. Labeling the physical row groups 0 to M+1, the synthesized + * pointer lists look like this: + * M+1 M-1 + * master pointer --> 0 master pointer --> 0 + * 1 1 + * ... ... + * M-3 M-3 + * M-2 M + * M-1 M+1 + * M M-2 + * M+1 M-1 + * 0 0 + * We read alternate iMCU rows using each master pointer; thus the last two + * row groups of the previous iMCU row remain un-overwritten in the workspace. + * The pointer lists are set up so that the required context rows appear to + * be adjacent to the proper places when we pass the pointer lists to the + * upsampler. + * + * The above pictures describe the normal state of the pointer lists. + * At top and bottom of the image, we diddle the pointer lists to duplicate + * the first or last sample row as necessary (this is cheaper than copying + * sample rows around). + * + * This scheme breaks down if M < 2, ie, min_DCT_scaled_size is 1. In that + * situation each iMCU row provides only one row group so the buffering logic + * must be different (eg, we must read two iMCU rows before we can emit the + * first row group). For now, we simply do not support providing context + * rows when min_DCT_scaled_size is 1. That combination seems unlikely to + * be worth providing --- if someone wants a 1/8th-size preview, they probably + * want it quick and dirty, so a context-free upsampler is sufficient. + */ + + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_d_main_controller pub; /* public fields */ + + /* Pointer to allocated workspace (M or M+2 row groups). */ + JSAMPARRAY buffer[MAX_COMPONENTS]; + + boolean buffer_full; /* Have we gotten an iMCU row from decoder? */ + JDIMENSION rowgroup_ctr; /* counts row groups output to postprocessor */ + + /* Remaining fields are only used in the context case. */ + + /* These are the master pointers to the funny-order pointer lists. */ + JSAMPIMAGE xbuffer[2]; /* pointers to weird pointer lists */ + + int whichptr; /* indicates which pointer set is now in use */ + int context_state; /* process_data state machine status */ + JDIMENSION rowgroups_avail; /* row groups available to postprocessor */ + JDIMENSION iMCU_row_ctr; /* counts iMCU rows to detect image top/bot */ +} my_main_controller; + +typedef my_main_controller * my_main_ptr; + +/* context_state values: */ +#define CTX_PREPARE_FOR_IMCU 0 /* need to prepare for MCU row */ +#define CTX_PROCESS_IMCU 1 /* feeding iMCU to postprocessor */ +#define CTX_POSTPONED_ROW 2 /* feeding postponed row group */ + + +/* Forward declarations */ +METHODDEF(void) process_data_simple_main + JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); +METHODDEF(void) process_data_context_main + JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); +#ifdef QUANT_2PASS_SUPPORTED +METHODDEF(void) process_data_crank_post + JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); +#endif + + +LOCAL(void) +alloc_funny_pointers (j_decompress_ptr cinfo) +/* Allocate space for the funny pointer lists. + * This is done only once, not once per pass. + */ +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + int ci, rgroup; + int M = cinfo->min_DCT_scaled_size; + jpeg_component_info *compptr; + JSAMPARRAY xbuf; + + /* Get top-level space for component array pointers. + * We alloc both arrays with one call to save a few cycles. + */ + main->xbuffer[0] = (JSAMPIMAGE) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->num_components * 2 * SIZEOF(JSAMPARRAY)); + main->xbuffer[1] = main->xbuffer[0] + cinfo->num_components; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / + cinfo->min_DCT_scaled_size; /* height of a row group of component */ + /* Get space for pointer lists --- M+4 row groups in each list. + * We alloc both pointer lists with one call to save a few cycles. + */ + xbuf = (JSAMPARRAY) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 2 * (rgroup * (M + 4)) * SIZEOF(JSAMPROW)); + xbuf += rgroup; /* want one row group at negative offsets */ + main->xbuffer[0][ci] = xbuf; + xbuf += rgroup * (M + 4); + main->xbuffer[1][ci] = xbuf; + } +} + + +LOCAL(void) +make_funny_pointers (j_decompress_ptr cinfo) +/* Create the funny pointer lists discussed in the comments above. + * The actual workspace is already allocated (in main->buffer), + * and the space for the pointer lists is allocated too. + * This routine just fills in the curiously ordered lists. + * This will be repeated at the beginning of each pass. + */ +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + int ci, i, rgroup; + int M = cinfo->min_DCT_scaled_size; + jpeg_component_info *compptr; + JSAMPARRAY buf, xbuf0, xbuf1; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / + cinfo->min_DCT_scaled_size; /* height of a row group of component */ + xbuf0 = main->xbuffer[0][ci]; + xbuf1 = main->xbuffer[1][ci]; + /* First copy the workspace pointers as-is */ + buf = main->buffer[ci]; + for (i = 0; i < rgroup * (M + 2); i++) { + xbuf0[i] = xbuf1[i] = buf[i]; + } + /* In the second list, put the last four row groups in swapped order */ + for (i = 0; i < rgroup * 2; i++) { + xbuf1[rgroup*(M-2) + i] = buf[rgroup*M + i]; + xbuf1[rgroup*M + i] = buf[rgroup*(M-2) + i]; + } + /* The wraparound pointers at top and bottom will be filled later + * (see set_wraparound_pointers, below). Initially we want the "above" + * pointers to duplicate the first actual data line. This only needs + * to happen in xbuffer[0]. + */ + for (i = 0; i < rgroup; i++) { + xbuf0[i - rgroup] = xbuf0[0]; + } + } +} + + +LOCAL(void) +set_wraparound_pointers (j_decompress_ptr cinfo) +/* Set up the "wraparound" pointers at top and bottom of the pointer lists. + * This changes the pointer list state from top-of-image to the normal state. + */ +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + int ci, i, rgroup; + int M = cinfo->min_DCT_scaled_size; + jpeg_component_info *compptr; + JSAMPARRAY xbuf0, xbuf1; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / + cinfo->min_DCT_scaled_size; /* height of a row group of component */ + xbuf0 = main->xbuffer[0][ci]; + xbuf1 = main->xbuffer[1][ci]; + for (i = 0; i < rgroup; i++) { + xbuf0[i - rgroup] = xbuf0[rgroup*(M+1) + i]; + xbuf1[i - rgroup] = xbuf1[rgroup*(M+1) + i]; + xbuf0[rgroup*(M+2) + i] = xbuf0[i]; + xbuf1[rgroup*(M+2) + i] = xbuf1[i]; + } + } +} + + +LOCAL(void) +set_bottom_pointers (j_decompress_ptr cinfo) +/* Change the pointer lists to duplicate the last sample row at the bottom + * of the image. whichptr indicates which xbuffer holds the final iMCU row. + * Also sets rowgroups_avail to indicate number of nondummy row groups in row. + */ +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + int ci, i, rgroup, iMCUheight, rows_left; + jpeg_component_info *compptr; + JSAMPARRAY xbuf; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Count sample rows in one iMCU row and in one row group */ + iMCUheight = compptr->v_samp_factor * compptr->DCT_scaled_size; + rgroup = iMCUheight / cinfo->min_DCT_scaled_size; + /* Count nondummy sample rows remaining for this component */ + rows_left = (int) (compptr->downsampled_height % (JDIMENSION) iMCUheight); + if (rows_left == 0) rows_left = iMCUheight; + /* Count nondummy row groups. Should get same answer for each component, + * so we need only do it once. + */ + if (ci == 0) { + main->rowgroups_avail = (JDIMENSION) ((rows_left-1) / rgroup + 1); + } + /* Duplicate the last real sample row rgroup*2 times; this pads out the + * last partial rowgroup and ensures at least one full rowgroup of context. + */ + xbuf = main->xbuffer[main->whichptr][ci]; + for (i = 0; i < rgroup * 2; i++) { + xbuf[rows_left + i] = xbuf[rows_left-1]; + } + } +} + + +/* + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_main (j_decompress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + + switch (pass_mode) { + case JBUF_PASS_THRU: + if (cinfo->upsample->need_context_rows) { + main->pub.process_data = process_data_context_main; + make_funny_pointers(cinfo); /* Create the xbuffer[] lists */ + main->whichptr = 0; /* Read first iMCU row into xbuffer[0] */ + main->context_state = CTX_PREPARE_FOR_IMCU; + main->iMCU_row_ctr = 0; + } else { + /* Simple case with no context needed */ + main->pub.process_data = process_data_simple_main; + } + main->buffer_full = FALSE; /* Mark buffer empty */ + main->rowgroup_ctr = 0; + break; +#ifdef QUANT_2PASS_SUPPORTED + case JBUF_CRANK_DEST: + /* For last pass of 2-pass quantization, just crank the postprocessor */ + main->pub.process_data = process_data_crank_post; + break; +#endif + default: + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + break; + } +} + + +/* + * Process some data. + * This handles the simple case where no context is required. + */ + +METHODDEF(void) +process_data_simple_main (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + JDIMENSION rowgroups_avail; + + /* Read input data if we haven't filled the main buffer yet */ + if (! main->buffer_full) { + if (! (*cinfo->coef->decompress_data) (cinfo, main->buffer)) + return; /* suspension forced, can do nothing more */ + main->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ + } + + /* There are always min_DCT_scaled_size row groups in an iMCU row. */ + rowgroups_avail = (JDIMENSION) cinfo->min_DCT_scaled_size; + /* Note: at the bottom of the image, we may pass extra garbage row groups + * to the postprocessor. The postprocessor has to check for bottom + * of image anyway (at row resolution), so no point in us doing it too. + */ + + /* Feed the postprocessor */ + (*cinfo->post->post_process_data) (cinfo, main->buffer, + &main->rowgroup_ctr, rowgroups_avail, + output_buf, out_row_ctr, out_rows_avail); + + /* Has postprocessor consumed all the data yet? If so, mark buffer empty */ + if (main->rowgroup_ctr >= rowgroups_avail) { + main->buffer_full = FALSE; + main->rowgroup_ctr = 0; + } +} + + +/* + * Process some data. + * This handles the case where context rows must be provided. + */ + +METHODDEF(void) +process_data_context_main (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_main_ptr main = (my_main_ptr) cinfo->main; + + /* Read input data if we haven't filled the main buffer yet */ + if (! main->buffer_full) { + if (! (*cinfo->coef->decompress_data) (cinfo, + main->xbuffer[main->whichptr])) + return; /* suspension forced, can do nothing more */ + main->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ + main->iMCU_row_ctr++; /* count rows received */ + } + + /* Postprocessor typically will not swallow all the input data it is handed + * in one call (due to filling the output buffer first). Must be prepared + * to exit and restart. This switch lets us keep track of how far we got. + * Note that each case falls through to the next on successful completion. + */ + switch (main->context_state) { + case CTX_POSTPONED_ROW: + /* Call postprocessor using previously set pointers for postponed row */ + (*cinfo->post->post_process_data) (cinfo, main->xbuffer[main->whichptr], + &main->rowgroup_ctr, main->rowgroups_avail, + output_buf, out_row_ctr, out_rows_avail); + if (main->rowgroup_ctr < main->rowgroups_avail) + return; /* Need to suspend */ + main->context_state = CTX_PREPARE_FOR_IMCU; + if (*out_row_ctr >= out_rows_avail) + return; /* Postprocessor exactly filled output buf */ + /*FALLTHROUGH*/ + case CTX_PREPARE_FOR_IMCU: + /* Prepare to process first M-1 row groups of this iMCU row */ + main->rowgroup_ctr = 0; + main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_scaled_size - 1); + /* Check for bottom of image: if so, tweak pointers to "duplicate" + * the last sample row, and adjust rowgroups_avail to ignore padding rows. + */ + if (main->iMCU_row_ctr == cinfo->total_iMCU_rows) + set_bottom_pointers(cinfo); + main->context_state = CTX_PROCESS_IMCU; + /*FALLTHROUGH*/ + case CTX_PROCESS_IMCU: + /* Call postprocessor using previously set pointers */ + (*cinfo->post->post_process_data) (cinfo, main->xbuffer[main->whichptr], + &main->rowgroup_ctr, main->rowgroups_avail, + output_buf, out_row_ctr, out_rows_avail); + if (main->rowgroup_ctr < main->rowgroups_avail) + return; /* Need to suspend */ + /* After the first iMCU, change wraparound pointers to normal state */ + if (main->iMCU_row_ctr == 1) + set_wraparound_pointers(cinfo); + /* Prepare to load new iMCU row using other xbuffer list */ + main->whichptr ^= 1; /* 0=>1 or 1=>0 */ + main->buffer_full = FALSE; + /* Still need to process last row group of this iMCU row, */ + /* which is saved at index M+1 of the other xbuffer */ + main->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_scaled_size + 1); + main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_scaled_size + 2); + main->context_state = CTX_POSTPONED_ROW; + } +} + + +/* + * Process some data. + * Final pass of two-pass quantization: just call the postprocessor. + * Source data will be the postprocessor controller's internal buffer. + */ + +#ifdef QUANT_2PASS_SUPPORTED + +METHODDEF(void) +process_data_crank_post (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + (*cinfo->post->post_process_data) (cinfo, (JSAMPIMAGE) NULL, + (JDIMENSION *) NULL, (JDIMENSION) 0, + output_buf, out_row_ctr, out_rows_avail); +} + +#endif /* QUANT_2PASS_SUPPORTED */ + + +/* + * Initialize main buffer controller. + */ + +GLOBAL(void) +jinit_d_main_controller (j_decompress_ptr cinfo, boolean need_full_buffer) +{ + my_main_ptr main; + int ci, rgroup, ngroups; + jpeg_component_info *compptr; + + main = (my_main_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_main_controller)); + cinfo->main = (struct jpeg_d_main_controller *) main; + main->pub.start_pass = start_pass_main; + + if (need_full_buffer) /* shouldn't happen */ + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + + /* Allocate the workspace. + * ngroups is the number of row groups we need. + */ + if (cinfo->upsample->need_context_rows) { + if (cinfo->min_DCT_scaled_size < 2) /* unsupported, see comments above */ + ERREXIT(cinfo, JERR_NOTIMPL); + alloc_funny_pointers(cinfo); /* Alloc space for xbuffer[] lists */ + ngroups = cinfo->min_DCT_scaled_size + 2; + } else { + ngroups = cinfo->min_DCT_scaled_size; + } + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / + cinfo->min_DCT_scaled_size; /* height of a row group of component */ + main->buffer[ci] = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + compptr->width_in_blocks * compptr->DCT_scaled_size, + (JDIMENSION) (rgroup * ngroups)); + } +} diff --git a/Build/source/extra/jpeg/jdmarker.c b/Build/source/extra/jpeg/jdmarker.c new file mode 100644 index 00000000000..f4cca8cc835 --- /dev/null +++ b/Build/source/extra/jpeg/jdmarker.c @@ -0,0 +1,1360 @@ +/* + * jdmarker.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to decode JPEG datastream markers. + * Most of the complexity arises from our desire to support input + * suspension: if not all of the data for a marker is available, + * we must exit back to the application. On resumption, we reprocess + * the marker. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +typedef enum { /* JPEG marker codes */ + M_SOF0 = 0xc0, + M_SOF1 = 0xc1, + M_SOF2 = 0xc2, + M_SOF3 = 0xc3, + + M_SOF5 = 0xc5, + M_SOF6 = 0xc6, + M_SOF7 = 0xc7, + + M_JPG = 0xc8, + M_SOF9 = 0xc9, + M_SOF10 = 0xca, + M_SOF11 = 0xcb, + + M_SOF13 = 0xcd, + M_SOF14 = 0xce, + M_SOF15 = 0xcf, + + M_DHT = 0xc4, + + M_DAC = 0xcc, + + M_RST0 = 0xd0, + M_RST1 = 0xd1, + M_RST2 = 0xd2, + M_RST3 = 0xd3, + M_RST4 = 0xd4, + M_RST5 = 0xd5, + M_RST6 = 0xd6, + M_RST7 = 0xd7, + + M_SOI = 0xd8, + M_EOI = 0xd9, + M_SOS = 0xda, + M_DQT = 0xdb, + M_DNL = 0xdc, + M_DRI = 0xdd, + M_DHP = 0xde, + M_EXP = 0xdf, + + M_APP0 = 0xe0, + M_APP1 = 0xe1, + M_APP2 = 0xe2, + M_APP3 = 0xe3, + M_APP4 = 0xe4, + M_APP5 = 0xe5, + M_APP6 = 0xe6, + M_APP7 = 0xe7, + M_APP8 = 0xe8, + M_APP9 = 0xe9, + M_APP10 = 0xea, + M_APP11 = 0xeb, + M_APP12 = 0xec, + M_APP13 = 0xed, + M_APP14 = 0xee, + M_APP15 = 0xef, + + M_JPG0 = 0xf0, + M_JPG13 = 0xfd, + M_COM = 0xfe, + + M_TEM = 0x01, + + M_ERROR = 0x100 +} JPEG_MARKER; + + +/* Private state */ + +typedef struct { + struct jpeg_marker_reader pub; /* public fields */ + + /* Application-overridable marker processing methods */ + jpeg_marker_parser_method process_COM; + jpeg_marker_parser_method process_APPn[16]; + + /* Limit on marker data length to save for each marker type */ + unsigned int length_limit_COM; + unsigned int length_limit_APPn[16]; + + /* Status of COM/APPn marker saving */ + jpeg_saved_marker_ptr cur_marker; /* NULL if not processing a marker */ + unsigned int bytes_read; /* data bytes read so far in marker */ + /* Note: cur_marker is not linked into marker_list until it's all read. */ +} my_marker_reader; + +typedef my_marker_reader * my_marker_ptr; + + +/* + * Macros for fetching data from the data source module. + * + * At all times, cinfo->src->next_input_byte and ->bytes_in_buffer reflect + * the current restart point; we update them only when we have reached a + * suitable place to restart if a suspension occurs. + */ + +/* Declare and initialize local copies of input pointer/count */ +#define INPUT_VARS(cinfo) \ + struct jpeg_source_mgr * datasrc = (cinfo)->src; \ + const JOCTET * next_input_byte = datasrc->next_input_byte; \ + size_t bytes_in_buffer = datasrc->bytes_in_buffer + +/* Unload the local copies --- do this only at a restart boundary */ +#define INPUT_SYNC(cinfo) \ + ( datasrc->next_input_byte = next_input_byte, \ + datasrc->bytes_in_buffer = bytes_in_buffer ) + +/* Reload the local copies --- used only in MAKE_BYTE_AVAIL */ +#define INPUT_RELOAD(cinfo) \ + ( next_input_byte = datasrc->next_input_byte, \ + bytes_in_buffer = datasrc->bytes_in_buffer ) + +/* Internal macro for INPUT_BYTE and INPUT_2BYTES: make a byte available. + * Note we do *not* do INPUT_SYNC before calling fill_input_buffer, + * but we must reload the local copies after a successful fill. + */ +#define MAKE_BYTE_AVAIL(cinfo,action) \ + if (bytes_in_buffer == 0) { \ + if (! (*datasrc->fill_input_buffer) (cinfo)) \ + { action; } \ + INPUT_RELOAD(cinfo); \ + } + +/* Read a byte into variable V. + * If must suspend, take the specified action (typically "return FALSE"). + */ +#define INPUT_BYTE(cinfo,V,action) \ + MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \ + bytes_in_buffer--; \ + V = GETJOCTET(*next_input_byte++); ) + +/* As above, but read two bytes interpreted as an unsigned 16-bit integer. + * V should be declared unsigned int or perhaps INT32. + */ +#define INPUT_2BYTES(cinfo,V,action) \ + MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \ + bytes_in_buffer--; \ + V = ((unsigned int) GETJOCTET(*next_input_byte++)) << 8; \ + MAKE_BYTE_AVAIL(cinfo,action); \ + bytes_in_buffer--; \ + V += GETJOCTET(*next_input_byte++); ) + + +/* + * Routines to process JPEG markers. + * + * Entry condition: JPEG marker itself has been read and its code saved + * in cinfo->unread_marker; input restart point is just after the marker. + * + * Exit: if return TRUE, have read and processed any parameters, and have + * updated the restart point to point after the parameters. + * If return FALSE, was forced to suspend before reaching end of + * marker parameters; restart point has not been moved. Same routine + * will be called again after application supplies more input data. + * + * This approach to suspension assumes that all of a marker's parameters + * can fit into a single input bufferload. This should hold for "normal" + * markers. Some COM/APPn markers might have large parameter segments + * that might not fit. If we are simply dropping such a marker, we use + * skip_input_data to get past it, and thereby put the problem on the + * source manager's shoulders. If we are saving the marker's contents + * into memory, we use a slightly different convention: when forced to + * suspend, the marker processor updates the restart point to the end of + * what it's consumed (ie, the end of the buffer) before returning FALSE. + * On resumption, cinfo->unread_marker still contains the marker code, + * but the data source will point to the next chunk of marker data. + * The marker processor must retain internal state to deal with this. + * + * Note that we don't bother to avoid duplicate trace messages if a + * suspension occurs within marker parameters. Other side effects + * require more care. + */ + + +LOCAL(boolean) +get_soi (j_decompress_ptr cinfo) +/* Process an SOI marker */ +{ + int i; + + TRACEMS(cinfo, 1, JTRC_SOI); + + if (cinfo->marker->saw_SOI) + ERREXIT(cinfo, JERR_SOI_DUPLICATE); + + /* Reset all parameters that are defined to be reset by SOI */ + + for (i = 0; i < NUM_ARITH_TBLS; i++) { + cinfo->arith_dc_L[i] = 0; + cinfo->arith_dc_U[i] = 1; + cinfo->arith_ac_K[i] = 5; + } + cinfo->restart_interval = 0; + + /* Set initial assumptions for colorspace etc */ + + cinfo->jpeg_color_space = JCS_UNKNOWN; + cinfo->CCIR601_sampling = FALSE; /* Assume non-CCIR sampling??? */ + + cinfo->saw_JFIF_marker = FALSE; + cinfo->JFIF_major_version = 1; /* set default JFIF APP0 values */ + cinfo->JFIF_minor_version = 1; + cinfo->density_unit = 0; + cinfo->X_density = 1; + cinfo->Y_density = 1; + cinfo->saw_Adobe_marker = FALSE; + cinfo->Adobe_transform = 0; + + cinfo->marker->saw_SOI = TRUE; + + return TRUE; +} + + +LOCAL(boolean) +get_sof (j_decompress_ptr cinfo, boolean is_prog, boolean is_arith) +/* Process a SOFn marker */ +{ + INT32 length; + int c, ci; + jpeg_component_info * compptr; + INPUT_VARS(cinfo); + + cinfo->progressive_mode = is_prog; + cinfo->arith_code = is_arith; + + INPUT_2BYTES(cinfo, length, return FALSE); + + INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE); + INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE); + INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE); + INPUT_BYTE(cinfo, cinfo->num_components, return FALSE); + + length -= 8; + + TRACEMS4(cinfo, 1, JTRC_SOF, cinfo->unread_marker, + (int) cinfo->image_width, (int) cinfo->image_height, + cinfo->num_components); + + if (cinfo->marker->saw_SOF) + ERREXIT(cinfo, JERR_SOF_DUPLICATE); + + /* We don't support files in which the image height is initially specified */ + /* as 0 and is later redefined by DNL. As long as we have to check that, */ + /* might as well have a general sanity check. */ + if (cinfo->image_height <= 0 || cinfo->image_width <= 0 + || cinfo->num_components <= 0) + ERREXIT(cinfo, JERR_EMPTY_IMAGE); + + if (length != (cinfo->num_components * 3)) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + if (cinfo->comp_info == NULL) /* do only once, even if suspend */ + cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->num_components * SIZEOF(jpeg_component_info)); + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + compptr->component_index = ci; + INPUT_BYTE(cinfo, compptr->component_id, return FALSE); + INPUT_BYTE(cinfo, c, return FALSE); + compptr->h_samp_factor = (c >> 4) & 15; + compptr->v_samp_factor = (c ) & 15; + INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE); + + TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT, + compptr->component_id, compptr->h_samp_factor, + compptr->v_samp_factor, compptr->quant_tbl_no); + } + + cinfo->marker->saw_SOF = TRUE; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +LOCAL(boolean) +get_sos (j_decompress_ptr cinfo) +/* Process a SOS marker */ +{ + INT32 length; + int i, ci, n, c, cc; + jpeg_component_info * compptr; + INPUT_VARS(cinfo); + + if (! cinfo->marker->saw_SOF) + ERREXIT(cinfo, JERR_SOS_NO_SOF); + + INPUT_2BYTES(cinfo, length, return FALSE); + + INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */ + + TRACEMS1(cinfo, 1, JTRC_SOS, n); + + if (length != (n * 2 + 6) || n < 1 || n > MAX_COMPS_IN_SCAN) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + cinfo->comps_in_scan = n; + + /* Collect the component-spec parameters */ + + for (i = 0; i < n; i++) { + INPUT_BYTE(cinfo, cc, return FALSE); + INPUT_BYTE(cinfo, c, return FALSE); + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + if (cc == compptr->component_id) + goto id_found; + } + + ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc); + + id_found: + + cinfo->cur_comp_info[i] = compptr; + compptr->dc_tbl_no = (c >> 4) & 15; + compptr->ac_tbl_no = (c ) & 15; + + TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc, + compptr->dc_tbl_no, compptr->ac_tbl_no); + } + + /* Collect the additional scan parameters Ss, Se, Ah/Al. */ + INPUT_BYTE(cinfo, c, return FALSE); + cinfo->Ss = c; + INPUT_BYTE(cinfo, c, return FALSE); + cinfo->Se = c; + INPUT_BYTE(cinfo, c, return FALSE); + cinfo->Ah = (c >> 4) & 15; + cinfo->Al = (c ) & 15; + + TRACEMS4(cinfo, 1, JTRC_SOS_PARAMS, cinfo->Ss, cinfo->Se, + cinfo->Ah, cinfo->Al); + + /* Prepare to scan data & restart markers */ + cinfo->marker->next_restart_num = 0; + + /* Count another SOS marker */ + cinfo->input_scan_number++; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +#ifdef D_ARITH_CODING_SUPPORTED + +LOCAL(boolean) +get_dac (j_decompress_ptr cinfo) +/* Process a DAC marker */ +{ + INT32 length; + int index, val; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + while (length > 0) { + INPUT_BYTE(cinfo, index, return FALSE); + INPUT_BYTE(cinfo, val, return FALSE); + + length -= 2; + + TRACEMS2(cinfo, 1, JTRC_DAC, index, val); + + if (index < 0 || index >= (2*NUM_ARITH_TBLS)) + ERREXIT1(cinfo, JERR_DAC_INDEX, index); + + if (index >= NUM_ARITH_TBLS) { /* define AC table */ + cinfo->arith_ac_K[index-NUM_ARITH_TBLS] = (UINT8) val; + } else { /* define DC table */ + cinfo->arith_dc_L[index] = (UINT8) (val & 0x0F); + cinfo->arith_dc_U[index] = (UINT8) (val >> 4); + if (cinfo->arith_dc_L[index] > cinfo->arith_dc_U[index]) + ERREXIT1(cinfo, JERR_DAC_VALUE, val); + } + } + + if (length != 0) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + INPUT_SYNC(cinfo); + return TRUE; +} + +#else /* ! D_ARITH_CODING_SUPPORTED */ + +#define get_dac(cinfo) skip_variable(cinfo) + +#endif /* D_ARITH_CODING_SUPPORTED */ + + +LOCAL(boolean) +get_dht (j_decompress_ptr cinfo) +/* Process a DHT marker */ +{ + INT32 length; + UINT8 bits[17]; + UINT8 huffval[256]; + int i, index, count; + JHUFF_TBL **htblptr; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + while (length > 16) { + INPUT_BYTE(cinfo, index, return FALSE); + + TRACEMS1(cinfo, 1, JTRC_DHT, index); + + bits[0] = 0; + count = 0; + for (i = 1; i <= 16; i++) { + INPUT_BYTE(cinfo, bits[i], return FALSE); + count += bits[i]; + } + + length -= 1 + 16; + + TRACEMS8(cinfo, 2, JTRC_HUFFBITS, + bits[1], bits[2], bits[3], bits[4], + bits[5], bits[6], bits[7], bits[8]); + TRACEMS8(cinfo, 2, JTRC_HUFFBITS, + bits[9], bits[10], bits[11], bits[12], + bits[13], bits[14], bits[15], bits[16]); + + /* Here we just do minimal validation of the counts to avoid walking + * off the end of our table space. jdhuff.c will check more carefully. + */ + if (count > 256 || ((INT32) count) > length) + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + + for (i = 0; i < count; i++) + INPUT_BYTE(cinfo, huffval[i], return FALSE); + + length -= count; + + if (index & 0x10) { /* AC table definition */ + index -= 0x10; + htblptr = &cinfo->ac_huff_tbl_ptrs[index]; + } else { /* DC table definition */ + htblptr = &cinfo->dc_huff_tbl_ptrs[index]; + } + + if (index < 0 || index >= NUM_HUFF_TBLS) + ERREXIT1(cinfo, JERR_DHT_INDEX, index); + + if (*htblptr == NULL) + *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); + + MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits)); + MEMCOPY((*htblptr)->huffval, huffval, SIZEOF((*htblptr)->huffval)); + } + + if (length != 0) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + INPUT_SYNC(cinfo); + return TRUE; +} + + +LOCAL(boolean) +get_dqt (j_decompress_ptr cinfo) +/* Process a DQT marker */ +{ + INT32 length; + int n, i, prec; + unsigned int tmp; + JQUANT_TBL *quant_ptr; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + while (length > 0) { + INPUT_BYTE(cinfo, n, return FALSE); + prec = n >> 4; + n &= 0x0F; + + TRACEMS2(cinfo, 1, JTRC_DQT, n, prec); + + if (n >= NUM_QUANT_TBLS) + ERREXIT1(cinfo, JERR_DQT_INDEX, n); + + if (cinfo->quant_tbl_ptrs[n] == NULL) + cinfo->quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) cinfo); + quant_ptr = cinfo->quant_tbl_ptrs[n]; + + for (i = 0; i < DCTSIZE2; i++) { + if (prec) + INPUT_2BYTES(cinfo, tmp, return FALSE); + else + INPUT_BYTE(cinfo, tmp, return FALSE); + /* We convert the zigzag-order table to natural array order. */ + quant_ptr->quantval[jpeg_natural_order[i]] = (UINT16) tmp; + } + + if (cinfo->err->trace_level >= 2) { + for (i = 0; i < DCTSIZE2; i += 8) { + TRACEMS8(cinfo, 2, JTRC_QUANTVALS, + quant_ptr->quantval[i], quant_ptr->quantval[i+1], + quant_ptr->quantval[i+2], quant_ptr->quantval[i+3], + quant_ptr->quantval[i+4], quant_ptr->quantval[i+5], + quant_ptr->quantval[i+6], quant_ptr->quantval[i+7]); + } + } + + length -= DCTSIZE2+1; + if (prec) length -= DCTSIZE2; + } + + if (length != 0) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + INPUT_SYNC(cinfo); + return TRUE; +} + + +LOCAL(boolean) +get_dri (j_decompress_ptr cinfo) +/* Process a DRI marker */ +{ + INT32 length; + unsigned int tmp; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + + if (length != 4) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + INPUT_2BYTES(cinfo, tmp, return FALSE); + + TRACEMS1(cinfo, 1, JTRC_DRI, tmp); + + cinfo->restart_interval = tmp; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +/* + * Routines for processing APPn and COM markers. + * These are either saved in memory or discarded, per application request. + * APP0 and APP14 are specially checked to see if they are + * JFIF and Adobe markers, respectively. + */ + +#define APP0_DATA_LEN 14 /* Length of interesting data in APP0 */ +#define APP14_DATA_LEN 12 /* Length of interesting data in APP14 */ +#define APPN_DATA_LEN 14 /* Must be the largest of the above!! */ + + +LOCAL(void) +examine_app0 (j_decompress_ptr cinfo, JOCTET FAR * data, + unsigned int datalen, INT32 remaining) +/* Examine first few bytes from an APP0. + * Take appropriate action if it is a JFIF marker. + * datalen is # of bytes at data[], remaining is length of rest of marker data. + */ +{ + INT32 totallen = (INT32) datalen + remaining; + + if (datalen >= APP0_DATA_LEN && + GETJOCTET(data[0]) == 0x4A && + GETJOCTET(data[1]) == 0x46 && + GETJOCTET(data[2]) == 0x49 && + GETJOCTET(data[3]) == 0x46 && + GETJOCTET(data[4]) == 0) { + /* Found JFIF APP0 marker: save info */ + cinfo->saw_JFIF_marker = TRUE; + cinfo->JFIF_major_version = GETJOCTET(data[5]); + cinfo->JFIF_minor_version = GETJOCTET(data[6]); + cinfo->density_unit = GETJOCTET(data[7]); + cinfo->X_density = (GETJOCTET(data[8]) << 8) + GETJOCTET(data[9]); + cinfo->Y_density = (GETJOCTET(data[10]) << 8) + GETJOCTET(data[11]); + /* Check version. + * Major version must be 1, anything else signals an incompatible change. + * (We used to treat this as an error, but now it's a nonfatal warning, + * because some bozo at Hijaak couldn't read the spec.) + * Minor version should be 0..2, but process anyway if newer. + */ + if (cinfo->JFIF_major_version != 1) + WARNMS2(cinfo, JWRN_JFIF_MAJOR, + cinfo->JFIF_major_version, cinfo->JFIF_minor_version); + /* Generate trace messages */ + TRACEMS5(cinfo, 1, JTRC_JFIF, + cinfo->JFIF_major_version, cinfo->JFIF_minor_version, + cinfo->X_density, cinfo->Y_density, cinfo->density_unit); + /* Validate thumbnail dimensions and issue appropriate messages */ + if (GETJOCTET(data[12]) | GETJOCTET(data[13])) + TRACEMS2(cinfo, 1, JTRC_JFIF_THUMBNAIL, + GETJOCTET(data[12]), GETJOCTET(data[13])); + totallen -= APP0_DATA_LEN; + if (totallen != + ((INT32)GETJOCTET(data[12]) * (INT32)GETJOCTET(data[13]) * (INT32) 3)) + TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int) totallen); + } else if (datalen >= 6 && + GETJOCTET(data[0]) == 0x4A && + GETJOCTET(data[1]) == 0x46 && + GETJOCTET(data[2]) == 0x58 && + GETJOCTET(data[3]) == 0x58 && + GETJOCTET(data[4]) == 0) { + /* Found JFIF "JFXX" extension APP0 marker */ + /* The library doesn't actually do anything with these, + * but we try to produce a helpful trace message. + */ + switch (GETJOCTET(data[5])) { + case 0x10: + TRACEMS1(cinfo, 1, JTRC_THUMB_JPEG, (int) totallen); + break; + case 0x11: + TRACEMS1(cinfo, 1, JTRC_THUMB_PALETTE, (int) totallen); + break; + case 0x13: + TRACEMS1(cinfo, 1, JTRC_THUMB_RGB, (int) totallen); + break; + default: + TRACEMS2(cinfo, 1, JTRC_JFIF_EXTENSION, + GETJOCTET(data[5]), (int) totallen); + break; + } + } else { + /* Start of APP0 does not match "JFIF" or "JFXX", or too short */ + TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen); + } +} + + +LOCAL(void) +examine_app14 (j_decompress_ptr cinfo, JOCTET FAR * data, + unsigned int datalen, INT32 remaining) +/* Examine first few bytes from an APP14. + * Take appropriate action if it is an Adobe marker. + * datalen is # of bytes at data[], remaining is length of rest of marker data. + */ +{ + unsigned int version, flags0, flags1, transform; + + if (datalen >= APP14_DATA_LEN && + GETJOCTET(data[0]) == 0x41 && + GETJOCTET(data[1]) == 0x64 && + GETJOCTET(data[2]) == 0x6F && + GETJOCTET(data[3]) == 0x62 && + GETJOCTET(data[4]) == 0x65) { + /* Found Adobe APP14 marker */ + version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]); + flags0 = (GETJOCTET(data[7]) << 8) + GETJOCTET(data[8]); + flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]); + transform = GETJOCTET(data[11]); + TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform); + cinfo->saw_Adobe_marker = TRUE; + cinfo->Adobe_transform = (UINT8) transform; + } else { + /* Start of APP14 does not match "Adobe", or too short */ + TRACEMS1(cinfo, 1, JTRC_APP14, (int) (datalen + remaining)); + } +} + + +METHODDEF(boolean) +get_interesting_appn (j_decompress_ptr cinfo) +/* Process an APP0 or APP14 marker without saving it */ +{ + INT32 length; + JOCTET b[APPN_DATA_LEN]; + unsigned int i, numtoread; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + /* get the interesting part of the marker data */ + if (length >= APPN_DATA_LEN) + numtoread = APPN_DATA_LEN; + else if (length > 0) + numtoread = (unsigned int) length; + else + numtoread = 0; + for (i = 0; i < numtoread; i++) + INPUT_BYTE(cinfo, b[i], return FALSE); + length -= numtoread; + + /* process it */ + switch (cinfo->unread_marker) { + case M_APP0: + examine_app0(cinfo, (JOCTET FAR *) b, numtoread, length); + break; + case M_APP14: + examine_app14(cinfo, (JOCTET FAR *) b, numtoread, length); + break; + default: + /* can't get here unless jpeg_save_markers chooses wrong processor */ + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); + break; + } + + /* skip any remaining data -- could be lots */ + INPUT_SYNC(cinfo); + if (length > 0) + (*cinfo->src->skip_input_data) (cinfo, (long) length); + + return TRUE; +} + + +#ifdef SAVE_MARKERS_SUPPORTED + +METHODDEF(boolean) +save_marker (j_decompress_ptr cinfo) +/* Save an APPn or COM marker into the marker list */ +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + jpeg_saved_marker_ptr cur_marker = marker->cur_marker; + unsigned int bytes_read, data_length; + JOCTET FAR * data; + INT32 length = 0; + INPUT_VARS(cinfo); + + if (cur_marker == NULL) { + /* begin reading a marker */ + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + if (length >= 0) { /* watch out for bogus length word */ + /* figure out how much we want to save */ + unsigned int limit; + if (cinfo->unread_marker == (int) M_COM) + limit = marker->length_limit_COM; + else + limit = marker->length_limit_APPn[cinfo->unread_marker - (int) M_APP0]; + if ((unsigned int) length < limit) + limit = (unsigned int) length; + /* allocate and initialize the marker item */ + cur_marker = (jpeg_saved_marker_ptr) + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(struct jpeg_marker_struct) + limit); + cur_marker->next = NULL; + cur_marker->marker = (UINT8) cinfo->unread_marker; + cur_marker->original_length = (unsigned int) length; + cur_marker->data_length = limit; + /* data area is just beyond the jpeg_marker_struct */ + data = cur_marker->data = (JOCTET FAR *) (cur_marker + 1); + marker->cur_marker = cur_marker; + marker->bytes_read = 0; + bytes_read = 0; + data_length = limit; + } else { + /* deal with bogus length word */ + bytes_read = data_length = 0; + data = NULL; + } + } else { + /* resume reading a marker */ + bytes_read = marker->bytes_read; + data_length = cur_marker->data_length; + data = cur_marker->data + bytes_read; + } + + while (bytes_read < data_length) { + INPUT_SYNC(cinfo); /* move the restart point to here */ + marker->bytes_read = bytes_read; + /* If there's not at least one byte in buffer, suspend */ + MAKE_BYTE_AVAIL(cinfo, return FALSE); + /* Copy bytes with reasonable rapidity */ + while (bytes_read < data_length && bytes_in_buffer > 0) { + *data++ = *next_input_byte++; + bytes_in_buffer--; + bytes_read++; + } + } + + /* Done reading what we want to read */ + if (cur_marker != NULL) { /* will be NULL if bogus length word */ + /* Add new marker to end of list */ + if (cinfo->marker_list == NULL) { + cinfo->marker_list = cur_marker; + } else { + jpeg_saved_marker_ptr prev = cinfo->marker_list; + while (prev->next != NULL) + prev = prev->next; + prev->next = cur_marker; + } + /* Reset pointer & calc remaining data length */ + data = cur_marker->data; + length = cur_marker->original_length - data_length; + } + /* Reset to initial state for next marker */ + marker->cur_marker = NULL; + + /* Process the marker if interesting; else just make a generic trace msg */ + switch (cinfo->unread_marker) { + case M_APP0: + examine_app0(cinfo, data, data_length, length); + break; + case M_APP14: + examine_app14(cinfo, data, data_length, length); + break; + default: + TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, + (int) (data_length + length)); + break; + } + + /* skip any remaining data -- could be lots */ + INPUT_SYNC(cinfo); /* do before skip_input_data */ + if (length > 0) + (*cinfo->src->skip_input_data) (cinfo, (long) length); + + return TRUE; +} + +#endif /* SAVE_MARKERS_SUPPORTED */ + + +METHODDEF(boolean) +skip_variable (j_decompress_ptr cinfo) +/* Skip over an unknown or uninteresting variable-length marker */ +{ + INT32 length; + INPUT_VARS(cinfo); + + INPUT_2BYTES(cinfo, length, return FALSE); + length -= 2; + + TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (int) length); + + INPUT_SYNC(cinfo); /* do before skip_input_data */ + if (length > 0) + (*cinfo->src->skip_input_data) (cinfo, (long) length); + + return TRUE; +} + + +/* + * Find the next JPEG marker, save it in cinfo->unread_marker. + * Returns FALSE if had to suspend before reaching a marker; + * in that case cinfo->unread_marker is unchanged. + * + * Note that the result might not be a valid marker code, + * but it will never be 0 or FF. + */ + +LOCAL(boolean) +next_marker (j_decompress_ptr cinfo) +{ + int c; + INPUT_VARS(cinfo); + + for (;;) { + INPUT_BYTE(cinfo, c, return FALSE); + /* Skip any non-FF bytes. + * This may look a bit inefficient, but it will not occur in a valid file. + * We sync after each discarded byte so that a suspending data source + * can discard the byte from its buffer. + */ + while (c != 0xFF) { + cinfo->marker->discarded_bytes++; + INPUT_SYNC(cinfo); + INPUT_BYTE(cinfo, c, return FALSE); + } + /* This loop swallows any duplicate FF bytes. Extra FFs are legal as + * pad bytes, so don't count them in discarded_bytes. We assume there + * will not be so many consecutive FF bytes as to overflow a suspending + * data source's input buffer. + */ + do { + INPUT_BYTE(cinfo, c, return FALSE); + } while (c == 0xFF); + if (c != 0) + break; /* found a valid marker, exit loop */ + /* Reach here if we found a stuffed-zero data sequence (FF/00). + * Discard it and loop back to try again. + */ + cinfo->marker->discarded_bytes += 2; + INPUT_SYNC(cinfo); + } + + if (cinfo->marker->discarded_bytes != 0) { + WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c); + cinfo->marker->discarded_bytes = 0; + } + + cinfo->unread_marker = c; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +LOCAL(boolean) +first_marker (j_decompress_ptr cinfo) +/* Like next_marker, but used to obtain the initial SOI marker. */ +/* For this marker, we do not allow preceding garbage or fill; otherwise, + * we might well scan an entire input file before realizing it ain't JPEG. + * If an application wants to process non-JFIF files, it must seek to the + * SOI before calling the JPEG library. + */ +{ + int c, c2; + INPUT_VARS(cinfo); + + INPUT_BYTE(cinfo, c, return FALSE); + INPUT_BYTE(cinfo, c2, return FALSE); + if (c != 0xFF || c2 != (int) M_SOI) + ERREXIT2(cinfo, JERR_NO_SOI, c, c2); + + cinfo->unread_marker = c2; + + INPUT_SYNC(cinfo); + return TRUE; +} + + +/* + * Read markers until SOS or EOI. + * + * Returns same codes as are defined for jpeg_consume_input: + * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. + */ + +METHODDEF(int) +read_markers (j_decompress_ptr cinfo) +{ + /* Outer loop repeats once for each marker. */ + for (;;) { + /* Collect the marker proper, unless we already did. */ + /* NB: first_marker() enforces the requirement that SOI appear first. */ + if (cinfo->unread_marker == 0) { + if (! cinfo->marker->saw_SOI) { + if (! first_marker(cinfo)) + return JPEG_SUSPENDED; + } else { + if (! next_marker(cinfo)) + return JPEG_SUSPENDED; + } + } + /* At this point cinfo->unread_marker contains the marker code and the + * input point is just past the marker proper, but before any parameters. + * A suspension will cause us to return with this state still true. + */ + switch (cinfo->unread_marker) { + case M_SOI: + if (! get_soi(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_SOF0: /* Baseline */ + case M_SOF1: /* Extended sequential, Huffman */ + if (! get_sof(cinfo, FALSE, FALSE)) + return JPEG_SUSPENDED; + break; + + case M_SOF2: /* Progressive, Huffman */ + if (! get_sof(cinfo, TRUE, FALSE)) + return JPEG_SUSPENDED; + break; + + case M_SOF9: /* Extended sequential, arithmetic */ + if (! get_sof(cinfo, FALSE, TRUE)) + return JPEG_SUSPENDED; + break; + + case M_SOF10: /* Progressive, arithmetic */ + if (! get_sof(cinfo, TRUE, TRUE)) + return JPEG_SUSPENDED; + break; + + /* Currently unsupported SOFn types */ + case M_SOF3: /* Lossless, Huffman */ + case M_SOF5: /* Differential sequential, Huffman */ + case M_SOF6: /* Differential progressive, Huffman */ + case M_SOF7: /* Differential lossless, Huffman */ + case M_JPG: /* Reserved for JPEG extensions */ + case M_SOF11: /* Lossless, arithmetic */ + case M_SOF13: /* Differential sequential, arithmetic */ + case M_SOF14: /* Differential progressive, arithmetic */ + case M_SOF15: /* Differential lossless, arithmetic */ + ERREXIT1(cinfo, JERR_SOF_UNSUPPORTED, cinfo->unread_marker); + break; + + case M_SOS: + if (! get_sos(cinfo)) + return JPEG_SUSPENDED; + cinfo->unread_marker = 0; /* processed the marker */ + return JPEG_REACHED_SOS; + + case M_EOI: + TRACEMS(cinfo, 1, JTRC_EOI); + cinfo->unread_marker = 0; /* processed the marker */ + return JPEG_REACHED_EOI; + + case M_DAC: + if (! get_dac(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_DHT: + if (! get_dht(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_DQT: + if (! get_dqt(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_DRI: + if (! get_dri(cinfo)) + return JPEG_SUSPENDED; + break; + + case M_APP0: + case M_APP1: + case M_APP2: + case M_APP3: + case M_APP4: + case M_APP5: + case M_APP6: + case M_APP7: + case M_APP8: + case M_APP9: + case M_APP10: + case M_APP11: + case M_APP12: + case M_APP13: + case M_APP14: + case M_APP15: + if (! (*((my_marker_ptr) cinfo->marker)->process_APPn[ + cinfo->unread_marker - (int) M_APP0]) (cinfo)) + return JPEG_SUSPENDED; + break; + + case M_COM: + if (! (*((my_marker_ptr) cinfo->marker)->process_COM) (cinfo)) + return JPEG_SUSPENDED; + break; + + case M_RST0: /* these are all parameterless */ + case M_RST1: + case M_RST2: + case M_RST3: + case M_RST4: + case M_RST5: + case M_RST6: + case M_RST7: + case M_TEM: + TRACEMS1(cinfo, 1, JTRC_PARMLESS_MARKER, cinfo->unread_marker); + break; + + case M_DNL: /* Ignore DNL ... perhaps the wrong thing */ + if (! skip_variable(cinfo)) + return JPEG_SUSPENDED; + break; + + default: /* must be DHP, EXP, JPGn, or RESn */ + /* For now, we treat the reserved markers as fatal errors since they are + * likely to be used to signal incompatible JPEG Part 3 extensions. + * Once the JPEG 3 version-number marker is well defined, this code + * ought to change! + */ + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); + break; + } + /* Successfully processed marker, so reset state variable */ + cinfo->unread_marker = 0; + } /* end loop */ +} + + +/* + * Read a restart marker, which is expected to appear next in the datastream; + * if the marker is not there, take appropriate recovery action. + * Returns FALSE if suspension is required. + * + * This is called by the entropy decoder after it has read an appropriate + * number of MCUs. cinfo->unread_marker may be nonzero if the entropy decoder + * has already read a marker from the data source. Under normal conditions + * cinfo->unread_marker will be reset to 0 before returning; if not reset, + * it holds a marker which the decoder will be unable to read past. + */ + +METHODDEF(boolean) +read_restart_marker (j_decompress_ptr cinfo) +{ + /* Obtain a marker unless we already did. */ + /* Note that next_marker will complain if it skips any data. */ + if (cinfo->unread_marker == 0) { + if (! next_marker(cinfo)) + return FALSE; + } + + if (cinfo->unread_marker == + ((int) M_RST0 + cinfo->marker->next_restart_num)) { + /* Normal case --- swallow the marker and let entropy decoder continue */ + TRACEMS1(cinfo, 3, JTRC_RST, cinfo->marker->next_restart_num); + cinfo->unread_marker = 0; + } else { + /* Uh-oh, the restart markers have been messed up. */ + /* Let the data source manager determine how to resync. */ + if (! (*cinfo->src->resync_to_restart) (cinfo, + cinfo->marker->next_restart_num)) + return FALSE; + } + + /* Update next-restart state */ + cinfo->marker->next_restart_num = (cinfo->marker->next_restart_num + 1) & 7; + + return TRUE; +} + + +/* + * This is the default resync_to_restart method for data source managers + * to use if they don't have any better approach. Some data source managers + * may be able to back up, or may have additional knowledge about the data + * which permits a more intelligent recovery strategy; such managers would + * presumably supply their own resync method. + * + * read_restart_marker calls resync_to_restart if it finds a marker other than + * the restart marker it was expecting. (This code is *not* used unless + * a nonzero restart interval has been declared.) cinfo->unread_marker is + * the marker code actually found (might be anything, except 0 or FF). + * The desired restart marker number (0..7) is passed as a parameter. + * This routine is supposed to apply whatever error recovery strategy seems + * appropriate in order to position the input stream to the next data segment. + * Note that cinfo->unread_marker is treated as a marker appearing before + * the current data-source input point; usually it should be reset to zero + * before returning. + * Returns FALSE if suspension is required. + * + * This implementation is substantially constrained by wanting to treat the + * input as a data stream; this means we can't back up. Therefore, we have + * only the following actions to work with: + * 1. Simply discard the marker and let the entropy decoder resume at next + * byte of file. + * 2. Read forward until we find another marker, discarding intervening + * data. (In theory we could look ahead within the current bufferload, + * without having to discard data if we don't find the desired marker. + * This idea is not implemented here, in part because it makes behavior + * dependent on buffer size and chance buffer-boundary positions.) + * 3. Leave the marker unread (by failing to zero cinfo->unread_marker). + * This will cause the entropy decoder to process an empty data segment, + * inserting dummy zeroes, and then we will reprocess the marker. + * + * #2 is appropriate if we think the desired marker lies ahead, while #3 is + * appropriate if the found marker is a future restart marker (indicating + * that we have missed the desired restart marker, probably because it got + * corrupted). + * We apply #2 or #3 if the found marker is a restart marker no more than + * two counts behind or ahead of the expected one. We also apply #2 if the + * found marker is not a legal JPEG marker code (it's certainly bogus data). + * If the found marker is a restart marker more than 2 counts away, we do #1 + * (too much risk that the marker is erroneous; with luck we will be able to + * resync at some future point). + * For any valid non-restart JPEG marker, we apply #3. This keeps us from + * overrunning the end of a scan. An implementation limited to single-scan + * files might find it better to apply #2 for markers other than EOI, since + * any other marker would have to be bogus data in that case. + */ + +GLOBAL(boolean) +jpeg_resync_to_restart (j_decompress_ptr cinfo, int desired) +{ + int marker = cinfo->unread_marker; + int action = 1; + + /* Always put up a warning. */ + WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired); + + /* Outer loop handles repeated decision after scanning forward. */ + for (;;) { + if (marker < (int) M_SOF0) + action = 2; /* invalid marker */ + else if (marker < (int) M_RST0 || marker > (int) M_RST7) + action = 3; /* valid non-restart marker */ + else { + if (marker == ((int) M_RST0 + ((desired+1) & 7)) || + marker == ((int) M_RST0 + ((desired+2) & 7))) + action = 3; /* one of the next two expected restarts */ + else if (marker == ((int) M_RST0 + ((desired-1) & 7)) || + marker == ((int) M_RST0 + ((desired-2) & 7))) + action = 2; /* a prior restart, so advance */ + else + action = 1; /* desired restart or too far away */ + } + TRACEMS2(cinfo, 4, JTRC_RECOVERY_ACTION, marker, action); + switch (action) { + case 1: + /* Discard marker and let entropy decoder resume processing. */ + cinfo->unread_marker = 0; + return TRUE; + case 2: + /* Scan to the next marker, and repeat the decision loop. */ + if (! next_marker(cinfo)) + return FALSE; + marker = cinfo->unread_marker; + break; + case 3: + /* Return without advancing past this marker. */ + /* Entropy decoder will be forced to process an empty segment. */ + return TRUE; + } + } /* end loop */ +} + + +/* + * Reset marker processing state to begin a fresh datastream. + */ + +METHODDEF(void) +reset_marker_reader (j_decompress_ptr cinfo) +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + + cinfo->comp_info = NULL; /* until allocated by get_sof */ + cinfo->input_scan_number = 0; /* no SOS seen yet */ + cinfo->unread_marker = 0; /* no pending marker */ + marker->pub.saw_SOI = FALSE; /* set internal state too */ + marker->pub.saw_SOF = FALSE; + marker->pub.discarded_bytes = 0; + marker->cur_marker = NULL; +} + + +/* + * Initialize the marker reader module. + * This is called only once, when the decompression object is created. + */ + +GLOBAL(void) +jinit_marker_reader (j_decompress_ptr cinfo) +{ + my_marker_ptr marker; + int i; + + /* Create subobject in permanent pool */ + marker = (my_marker_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + SIZEOF(my_marker_reader)); + cinfo->marker = (struct jpeg_marker_reader *) marker; + /* Initialize public method pointers */ + marker->pub.reset_marker_reader = reset_marker_reader; + marker->pub.read_markers = read_markers; + marker->pub.read_restart_marker = read_restart_marker; + /* Initialize COM/APPn processing. + * By default, we examine and then discard APP0 and APP14, + * but simply discard COM and all other APPn. + */ + marker->process_COM = skip_variable; + marker->length_limit_COM = 0; + for (i = 0; i < 16; i++) { + marker->process_APPn[i] = skip_variable; + marker->length_limit_APPn[i] = 0; + } + marker->process_APPn[0] = get_interesting_appn; + marker->process_APPn[14] = get_interesting_appn; + /* Reset marker processing state */ + reset_marker_reader(cinfo); +} + + +/* + * Control saving of COM and APPn markers into marker_list. + */ + +#ifdef SAVE_MARKERS_SUPPORTED + +GLOBAL(void) +jpeg_save_markers (j_decompress_ptr cinfo, int marker_code, + unsigned int length_limit) +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + long maxlength; + jpeg_marker_parser_method processor; + + /* Length limit mustn't be larger than what we can allocate + * (should only be a concern in a 16-bit environment). + */ + maxlength = cinfo->mem->max_alloc_chunk - SIZEOF(struct jpeg_marker_struct); + if (((long) length_limit) > maxlength) + length_limit = (unsigned int) maxlength; + + /* Choose processor routine to use. + * APP0/APP14 have special requirements. + */ + if (length_limit) { + processor = save_marker; + /* If saving APP0/APP14, save at least enough for our internal use. */ + if (marker_code == (int) M_APP0 && length_limit < APP0_DATA_LEN) + length_limit = APP0_DATA_LEN; + else if (marker_code == (int) M_APP14 && length_limit < APP14_DATA_LEN) + length_limit = APP14_DATA_LEN; + } else { + processor = skip_variable; + /* If discarding APP0/APP14, use our regular on-the-fly processor. */ + if (marker_code == (int) M_APP0 || marker_code == (int) M_APP14) + processor = get_interesting_appn; + } + + if (marker_code == (int) M_COM) { + marker->process_COM = processor; + marker->length_limit_COM = length_limit; + } else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15) { + marker->process_APPn[marker_code - (int) M_APP0] = processor; + marker->length_limit_APPn[marker_code - (int) M_APP0] = length_limit; + } else + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code); +} + +#endif /* SAVE_MARKERS_SUPPORTED */ + + +/* + * Install a special processing method for COM or APPn markers. + */ + +GLOBAL(void) +jpeg_set_marker_processor (j_decompress_ptr cinfo, int marker_code, + jpeg_marker_parser_method routine) +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + + if (marker_code == (int) M_COM) + marker->process_COM = routine; + else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15) + marker->process_APPn[marker_code - (int) M_APP0] = routine; + else + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code); +} diff --git a/Build/source/extra/jpeg/jdmaster.c b/Build/source/extra/jpeg/jdmaster.c new file mode 100644 index 00000000000..2802c5b7b29 --- /dev/null +++ b/Build/source/extra/jpeg/jdmaster.c @@ -0,0 +1,557 @@ +/* + * jdmaster.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains master control logic for the JPEG decompressor. + * These routines are concerned with selecting the modules to be executed + * and with determining the number of passes and the work to be done in each + * pass. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private state */ + +typedef struct { + struct jpeg_decomp_master pub; /* public fields */ + + int pass_number; /* # of passes completed */ + + boolean using_merged_upsample; /* TRUE if using merged upsample/cconvert */ + + /* Saved references to initialized quantizer modules, + * in case we need to switch modes. + */ + struct jpeg_color_quantizer * quantizer_1pass; + struct jpeg_color_quantizer * quantizer_2pass; +} my_decomp_master; + +typedef my_decomp_master * my_master_ptr; + + +/* + * Determine whether merged upsample/color conversion should be used. + * CRUCIAL: this must match the actual capabilities of jdmerge.c! + */ + +LOCAL(boolean) +use_merged_upsample (j_decompress_ptr cinfo) +{ +#ifdef UPSAMPLE_MERGING_SUPPORTED + /* Merging is the equivalent of plain box-filter upsampling */ + if (cinfo->do_fancy_upsampling || cinfo->CCIR601_sampling) + return FALSE; + /* jdmerge.c only supports YCC=>RGB color conversion */ + if (cinfo->jpeg_color_space != JCS_YCbCr || cinfo->num_components != 3 || + cinfo->out_color_space != JCS_RGB || + cinfo->out_color_components != RGB_PIXELSIZE) + return FALSE; + /* and it only handles 2h1v or 2h2v sampling ratios */ + if (cinfo->comp_info[0].h_samp_factor != 2 || + cinfo->comp_info[1].h_samp_factor != 1 || + cinfo->comp_info[2].h_samp_factor != 1 || + cinfo->comp_info[0].v_samp_factor > 2 || + cinfo->comp_info[1].v_samp_factor != 1 || + cinfo->comp_info[2].v_samp_factor != 1) + return FALSE; + /* furthermore, it doesn't work if we've scaled the IDCTs differently */ + if (cinfo->comp_info[0].DCT_scaled_size != cinfo->min_DCT_scaled_size || + cinfo->comp_info[1].DCT_scaled_size != cinfo->min_DCT_scaled_size || + cinfo->comp_info[2].DCT_scaled_size != cinfo->min_DCT_scaled_size) + return FALSE; + /* ??? also need to test for upsample-time rescaling, when & if supported */ + return TRUE; /* by golly, it'll work... */ +#else + return FALSE; +#endif +} + + +/* + * Compute output image dimensions and related values. + * NOTE: this is exported for possible use by application. + * Hence it mustn't do anything that can't be done twice. + * Also note that it may be called before the master module is initialized! + */ + +GLOBAL(void) +jpeg_calc_output_dimensions (j_decompress_ptr cinfo) +/* Do computations that are needed before master selection phase */ +{ +#ifdef IDCT_SCALING_SUPPORTED + int ci; + jpeg_component_info *compptr; +#endif + + /* Prevent application from calling me at wrong times */ + if (cinfo->global_state != DSTATE_READY) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + +#ifdef IDCT_SCALING_SUPPORTED + + /* Compute actual output image dimensions and DCT scaling choices. */ + if (cinfo->scale_num * 8 <= cinfo->scale_denom) { + /* Provide 1/8 scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 8L); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 8L); + cinfo->min_DCT_scaled_size = 1; + } else if (cinfo->scale_num * 4 <= cinfo->scale_denom) { + /* Provide 1/4 scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 4L); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 4L); + cinfo->min_DCT_scaled_size = 2; + } else if (cinfo->scale_num * 2 <= cinfo->scale_denom) { + /* Provide 1/2 scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, 2L); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, 2L); + cinfo->min_DCT_scaled_size = 4; + } else { + /* Provide 1/1 scaling */ + cinfo->output_width = cinfo->image_width; + cinfo->output_height = cinfo->image_height; + cinfo->min_DCT_scaled_size = DCTSIZE; + } + /* In selecting the actual DCT scaling for each component, we try to + * scale up the chroma components via IDCT scaling rather than upsampling. + * This saves time if the upsampler gets to use 1:1 scaling. + * Note this code assumes that the supported DCT scalings are powers of 2. + */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + int ssize = cinfo->min_DCT_scaled_size; + while (ssize < DCTSIZE && + (compptr->h_samp_factor * ssize * 2 <= + cinfo->max_h_samp_factor * cinfo->min_DCT_scaled_size) && + (compptr->v_samp_factor * ssize * 2 <= + cinfo->max_v_samp_factor * cinfo->min_DCT_scaled_size)) { + ssize = ssize * 2; + } + compptr->DCT_scaled_size = ssize; + } + + /* Recompute downsampled dimensions of components; + * application needs to know these if using raw downsampled data. + */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Size in samples, after IDCT scaling */ + compptr->downsampled_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * + (long) (compptr->h_samp_factor * compptr->DCT_scaled_size), + (long) (cinfo->max_h_samp_factor * DCTSIZE)); + compptr->downsampled_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * + (long) (compptr->v_samp_factor * compptr->DCT_scaled_size), + (long) (cinfo->max_v_samp_factor * DCTSIZE)); + } + +#else /* !IDCT_SCALING_SUPPORTED */ + + /* Hardwire it to "no scaling" */ + cinfo->output_width = cinfo->image_width; + cinfo->output_height = cinfo->image_height; + /* jdinput.c has already initialized DCT_scaled_size to DCTSIZE, + * and has computed unscaled downsampled_width and downsampled_height. + */ + +#endif /* IDCT_SCALING_SUPPORTED */ + + /* Report number of components in selected colorspace. */ + /* Probably this should be in the color conversion module... */ + switch (cinfo->out_color_space) { + case JCS_GRAYSCALE: + cinfo->out_color_components = 1; + break; + case JCS_RGB: +#if RGB_PIXELSIZE != 3 + cinfo->out_color_components = RGB_PIXELSIZE; + break; +#endif /* else share code with YCbCr */ + case JCS_YCbCr: + cinfo->out_color_components = 3; + break; + case JCS_CMYK: + case JCS_YCCK: + cinfo->out_color_components = 4; + break; + default: /* else must be same colorspace as in file */ + cinfo->out_color_components = cinfo->num_components; + break; + } + cinfo->output_components = (cinfo->quantize_colors ? 1 : + cinfo->out_color_components); + + /* See if upsampler will want to emit more than one row at a time */ + if (use_merged_upsample(cinfo)) + cinfo->rec_outbuf_height = cinfo->max_v_samp_factor; + else + cinfo->rec_outbuf_height = 1; +} + + +/* + * Several decompression processes need to range-limit values to the range + * 0..MAXJSAMPLE; the input value may fall somewhat outside this range + * due to noise introduced by quantization, roundoff error, etc. These + * processes are inner loops and need to be as fast as possible. On most + * machines, particularly CPUs with pipelines or instruction prefetch, + * a (subscript-check-less) C table lookup + * x = sample_range_limit[x]; + * is faster than explicit tests + * if (x < 0) x = 0; + * else if (x > MAXJSAMPLE) x = MAXJSAMPLE; + * These processes all use a common table prepared by the routine below. + * + * For most steps we can mathematically guarantee that the initial value + * of x is within MAXJSAMPLE+1 of the legal range, so a table running from + * -(MAXJSAMPLE+1) to 2*MAXJSAMPLE+1 is sufficient. But for the initial + * limiting step (just after the IDCT), a wildly out-of-range value is + * possible if the input data is corrupt. To avoid any chance of indexing + * off the end of memory and getting a bad-pointer trap, we perform the + * post-IDCT limiting thus: + * x = range_limit[x & MASK]; + * where MASK is 2 bits wider than legal sample data, ie 10 bits for 8-bit + * samples. Under normal circumstances this is more than enough range and + * a correct output will be generated; with bogus input data the mask will + * cause wraparound, and we will safely generate a bogus-but-in-range output. + * For the post-IDCT step, we want to convert the data from signed to unsigned + * representation by adding CENTERJSAMPLE at the same time that we limit it. + * So the post-IDCT limiting table ends up looking like this: + * CENTERJSAMPLE,CENTERJSAMPLE+1,...,MAXJSAMPLE, + * MAXJSAMPLE (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times), + * 0 (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times), + * 0,1,...,CENTERJSAMPLE-1 + * Negative inputs select values from the upper half of the table after + * masking. + * + * We can save some space by overlapping the start of the post-IDCT table + * with the simpler range limiting table. The post-IDCT table begins at + * sample_range_limit + CENTERJSAMPLE. + * + * Note that the table is allocated in near data space on PCs; it's small + * enough and used often enough to justify this. + */ + +LOCAL(void) +prepare_range_limit_table (j_decompress_ptr cinfo) +/* Allocate and fill in the sample_range_limit table */ +{ + JSAMPLE * table; + int i; + + table = (JSAMPLE *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (5 * (MAXJSAMPLE+1) + CENTERJSAMPLE) * SIZEOF(JSAMPLE)); + table += (MAXJSAMPLE+1); /* allow negative subscripts of simple table */ + cinfo->sample_range_limit = table; + /* First segment of "simple" table: limit[x] = 0 for x < 0 */ + MEMZERO(table - (MAXJSAMPLE+1), (MAXJSAMPLE+1) * SIZEOF(JSAMPLE)); + /* Main part of "simple" table: limit[x] = x */ + for (i = 0; i <= MAXJSAMPLE; i++) + table[i] = (JSAMPLE) i; + table += CENTERJSAMPLE; /* Point to where post-IDCT table starts */ + /* End of simple table, rest of first half of post-IDCT table */ + for (i = CENTERJSAMPLE; i < 2*(MAXJSAMPLE+1); i++) + table[i] = MAXJSAMPLE; + /* Second half of post-IDCT table */ + MEMZERO(table + (2 * (MAXJSAMPLE+1)), + (2 * (MAXJSAMPLE+1) - CENTERJSAMPLE) * SIZEOF(JSAMPLE)); + MEMCOPY(table + (4 * (MAXJSAMPLE+1) - CENTERJSAMPLE), + cinfo->sample_range_limit, CENTERJSAMPLE * SIZEOF(JSAMPLE)); +} + + +/* + * Master selection of decompression modules. + * This is done once at jpeg_start_decompress time. We determine + * which modules will be used and give them appropriate initialization calls. + * We also initialize the decompressor input side to begin consuming data. + * + * Since jpeg_read_header has finished, we know what is in the SOF + * and (first) SOS markers. We also have all the application parameter + * settings. + */ + +LOCAL(void) +master_selection (j_decompress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + boolean use_c_buffer; + long samplesperrow; + JDIMENSION jd_samplesperrow; + + /* Initialize dimensions and other stuff */ + jpeg_calc_output_dimensions(cinfo); + prepare_range_limit_table(cinfo); + + /* Width of an output scanline must be representable as JDIMENSION. */ + samplesperrow = (long) cinfo->output_width * (long) cinfo->out_color_components; + jd_samplesperrow = (JDIMENSION) samplesperrow; + if ((long) jd_samplesperrow != samplesperrow) + ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); + + /* Initialize my private state */ + master->pass_number = 0; + master->using_merged_upsample = use_merged_upsample(cinfo); + + /* Color quantizer selection */ + master->quantizer_1pass = NULL; + master->quantizer_2pass = NULL; + /* No mode changes if not using buffered-image mode. */ + if (! cinfo->quantize_colors || ! cinfo->buffered_image) { + cinfo->enable_1pass_quant = FALSE; + cinfo->enable_external_quant = FALSE; + cinfo->enable_2pass_quant = FALSE; + } + if (cinfo->quantize_colors) { + if (cinfo->raw_data_out) + ERREXIT(cinfo, JERR_NOTIMPL); + /* 2-pass quantizer only works in 3-component color space. */ + if (cinfo->out_color_components != 3) { + cinfo->enable_1pass_quant = TRUE; + cinfo->enable_external_quant = FALSE; + cinfo->enable_2pass_quant = FALSE; + cinfo->colormap = NULL; + } else if (cinfo->colormap != NULL) { + cinfo->enable_external_quant = TRUE; + } else if (cinfo->two_pass_quantize) { + cinfo->enable_2pass_quant = TRUE; + } else { + cinfo->enable_1pass_quant = TRUE; + } + + if (cinfo->enable_1pass_quant) { +#ifdef QUANT_1PASS_SUPPORTED + jinit_1pass_quantizer(cinfo); + master->quantizer_1pass = cinfo->cquantize; +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } + + /* We use the 2-pass code to map to external colormaps. */ + if (cinfo->enable_2pass_quant || cinfo->enable_external_quant) { +#ifdef QUANT_2PASS_SUPPORTED + jinit_2pass_quantizer(cinfo); + master->quantizer_2pass = cinfo->cquantize; +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } + /* If both quantizers are initialized, the 2-pass one is left active; + * this is necessary for starting with quantization to an external map. + */ + } + + /* Post-processing: in particular, color conversion first */ + if (! cinfo->raw_data_out) { + if (master->using_merged_upsample) { +#ifdef UPSAMPLE_MERGING_SUPPORTED + jinit_merged_upsampler(cinfo); /* does color conversion too */ +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else { + jinit_color_deconverter(cinfo); + jinit_upsampler(cinfo); + } + jinit_d_post_controller(cinfo, cinfo->enable_2pass_quant); + } + /* Inverse DCT */ + jinit_inverse_dct(cinfo); + /* Entropy decoding: either Huffman or arithmetic coding. */ + if (cinfo->arith_code) { + ERREXIT(cinfo, JERR_ARITH_NOTIMPL); + } else { + if (cinfo->progressive_mode) { +#ifdef D_PROGRESSIVE_SUPPORTED + jinit_phuff_decoder(cinfo); +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else + jinit_huff_decoder(cinfo); + } + + /* Initialize principal buffer controllers. */ + use_c_buffer = cinfo->inputctl->has_multiple_scans || cinfo->buffered_image; + jinit_d_coef_controller(cinfo, use_c_buffer); + + if (! cinfo->raw_data_out) + jinit_d_main_controller(cinfo, FALSE /* never need full buffer here */); + + /* We can now tell the memory manager to allocate virtual arrays. */ + (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); + + /* Initialize input side of decompressor to consume first scan. */ + (*cinfo->inputctl->start_input_pass) (cinfo); + +#ifdef D_MULTISCAN_FILES_SUPPORTED + /* If jpeg_start_decompress will read the whole file, initialize + * progress monitoring appropriately. The input step is counted + * as one pass. + */ + if (cinfo->progress != NULL && ! cinfo->buffered_image && + cinfo->inputctl->has_multiple_scans) { + int nscans; + /* Estimate number of scans to set pass_limit. */ + if (cinfo->progressive_mode) { + /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */ + nscans = 2 + 3 * cinfo->num_components; + } else { + /* For a nonprogressive multiscan file, estimate 1 scan per component. */ + nscans = cinfo->num_components; + } + cinfo->progress->pass_counter = 0L; + cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans; + cinfo->progress->completed_passes = 0; + cinfo->progress->total_passes = (cinfo->enable_2pass_quant ? 3 : 2); + /* Count the input pass as done */ + master->pass_number++; + } +#endif /* D_MULTISCAN_FILES_SUPPORTED */ +} + + +/* + * Per-pass setup. + * This is called at the beginning of each output pass. We determine which + * modules will be active during this pass and give them appropriate + * start_pass calls. We also set is_dummy_pass to indicate whether this + * is a "real" output pass or a dummy pass for color quantization. + * (In the latter case, jdapistd.c will crank the pass to completion.) + */ + +METHODDEF(void) +prepare_for_output_pass (j_decompress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + + if (master->pub.is_dummy_pass) { +#ifdef QUANT_2PASS_SUPPORTED + /* Final pass of 2-pass quantization */ + master->pub.is_dummy_pass = FALSE; + (*cinfo->cquantize->start_pass) (cinfo, FALSE); + (*cinfo->post->start_pass) (cinfo, JBUF_CRANK_DEST); + (*cinfo->main->start_pass) (cinfo, JBUF_CRANK_DEST); +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif /* QUANT_2PASS_SUPPORTED */ + } else { + if (cinfo->quantize_colors && cinfo->colormap == NULL) { + /* Select new quantization method */ + if (cinfo->two_pass_quantize && cinfo->enable_2pass_quant) { + cinfo->cquantize = master->quantizer_2pass; + master->pub.is_dummy_pass = TRUE; + } else if (cinfo->enable_1pass_quant) { + cinfo->cquantize = master->quantizer_1pass; + } else { + ERREXIT(cinfo, JERR_MODE_CHANGE); + } + } + (*cinfo->idct->start_pass) (cinfo); + (*cinfo->coef->start_output_pass) (cinfo); + if (! cinfo->raw_data_out) { + if (! master->using_merged_upsample) + (*cinfo->cconvert->start_pass) (cinfo); + (*cinfo->upsample->start_pass) (cinfo); + if (cinfo->quantize_colors) + (*cinfo->cquantize->start_pass) (cinfo, master->pub.is_dummy_pass); + (*cinfo->post->start_pass) (cinfo, + (master->pub.is_dummy_pass ? JBUF_SAVE_AND_PASS : JBUF_PASS_THRU)); + (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); + } + } + + /* Set up progress monitor's pass info if present */ + if (cinfo->progress != NULL) { + cinfo->progress->completed_passes = master->pass_number; + cinfo->progress->total_passes = master->pass_number + + (master->pub.is_dummy_pass ? 2 : 1); + /* In buffered-image mode, we assume one more output pass if EOI not + * yet reached, but no more passes if EOI has been reached. + */ + if (cinfo->buffered_image && ! cinfo->inputctl->eoi_reached) { + cinfo->progress->total_passes += (cinfo->enable_2pass_quant ? 2 : 1); + } + } +} + + +/* + * Finish up at end of an output pass. + */ + +METHODDEF(void) +finish_output_pass (j_decompress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + + if (cinfo->quantize_colors) + (*cinfo->cquantize->finish_pass) (cinfo); + master->pass_number++; +} + + +#ifdef D_MULTISCAN_FILES_SUPPORTED + +/* + * Switch to a new external colormap between output passes. + */ + +GLOBAL(void) +jpeg_new_colormap (j_decompress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + + /* Prevent application from calling me at wrong times */ + if (cinfo->global_state != DSTATE_BUFIMAGE) + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + + if (cinfo->quantize_colors && cinfo->enable_external_quant && + cinfo->colormap != NULL) { + /* Select 2-pass quantizer for external colormap use */ + cinfo->cquantize = master->quantizer_2pass; + /* Notify quantizer of colormap change */ + (*cinfo->cquantize->new_color_map) (cinfo); + master->pub.is_dummy_pass = FALSE; /* just in case */ + } else + ERREXIT(cinfo, JERR_MODE_CHANGE); +} + +#endif /* D_MULTISCAN_FILES_SUPPORTED */ + + +/* + * Initialize master decompression control and select active modules. + * This is performed at the start of jpeg_start_decompress. + */ + +GLOBAL(void) +jinit_master_decompress (j_decompress_ptr cinfo) +{ + my_master_ptr master; + + master = (my_master_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_decomp_master)); + cinfo->master = (struct jpeg_decomp_master *) master; + master->pub.prepare_for_output_pass = prepare_for_output_pass; + master->pub.finish_output_pass = finish_output_pass; + + master->pub.is_dummy_pass = FALSE; + + master_selection(cinfo); +} diff --git a/Build/source/extra/jpeg/jdmerge.c b/Build/source/extra/jpeg/jdmerge.c new file mode 100644 index 00000000000..37444468c23 --- /dev/null +++ b/Build/source/extra/jpeg/jdmerge.c @@ -0,0 +1,400 @@ +/* + * jdmerge.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains code for merged upsampling/color conversion. + * + * This file combines functions from jdsample.c and jdcolor.c; + * read those files first to understand what's going on. + * + * When the chroma components are to be upsampled by simple replication + * (ie, box filtering), we can save some work in color conversion by + * calculating all the output pixels corresponding to a pair of chroma + * samples at one time. In the conversion equations + * R = Y + K1 * Cr + * G = Y + K2 * Cb + K3 * Cr + * B = Y + K4 * Cb + * only the Y term varies among the group of pixels corresponding to a pair + * of chroma samples, so the rest of the terms can be calculated just once. + * At typical sampling ratios, this eliminates half or three-quarters of the + * multiplications needed for color conversion. + * + * This file currently provides implementations for the following cases: + * YCbCr => RGB color conversion only. + * Sampling ratios of 2h1v or 2h2v. + * No scaling needed at upsample time. + * Corner-aligned (non-CCIR601) sampling alignment. + * Other special cases could be added, but in most applications these are + * the only common cases. (For uncommon cases we fall back on the more + * general code in jdsample.c and jdcolor.c.) + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + +#ifdef UPSAMPLE_MERGING_SUPPORTED + + +/* Private subobject */ + +typedef struct { + struct jpeg_upsampler pub; /* public fields */ + + /* Pointer to routine to do actual upsampling/conversion of one row group */ + JMETHOD(void, upmethod, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, + JSAMPARRAY output_buf)); + + /* Private state for YCC->RGB conversion */ + int * Cr_r_tab; /* => table for Cr to R conversion */ + int * Cb_b_tab; /* => table for Cb to B conversion */ + INT32 * Cr_g_tab; /* => table for Cr to G conversion */ + INT32 * Cb_g_tab; /* => table for Cb to G conversion */ + + /* For 2:1 vertical sampling, we produce two output rows at a time. + * We need a "spare" row buffer to hold the second output row if the + * application provides just a one-row buffer; we also use the spare + * to discard the dummy last row if the image height is odd. + */ + JSAMPROW spare_row; + boolean spare_full; /* T if spare buffer is occupied */ + + JDIMENSION out_row_width; /* samples per output row */ + JDIMENSION rows_to_go; /* counts rows remaining in image */ +} my_upsampler; + +typedef my_upsampler * my_upsample_ptr; + +#define SCALEBITS 16 /* speediest right-shift on some machines */ +#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) +#define FIX(x) ((INT32) ((x) * (1L<RGB colorspace conversion. + * This is taken directly from jdcolor.c; see that file for more info. + */ + +LOCAL(void) +build_ycc_rgb_table (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + int i; + INT32 x; + SHIFT_TEMPS + + upsample->Cr_r_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(int)); + upsample->Cb_b_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(int)); + upsample->Cr_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(INT32)); + upsample->Cb_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (MAXJSAMPLE+1) * SIZEOF(INT32)); + + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { + /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ + /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ + /* Cr=>R value is nearest int to 1.40200 * x */ + upsample->Cr_r_tab[i] = (int) + RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); + /* Cb=>B value is nearest int to 1.77200 * x */ + upsample->Cb_b_tab[i] = (int) + RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); + /* Cr=>G value is scaled-up -0.71414 * x */ + upsample->Cr_g_tab[i] = (- FIX(0.71414)) * x; + /* Cb=>G value is scaled-up -0.34414 * x */ + /* We also add in ONE_HALF so that need not do it in inner loop */ + upsample->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; + } +} + + +/* + * Initialize for an upsampling pass. + */ + +METHODDEF(void) +start_pass_merged_upsample (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + + /* Mark the spare buffer empty */ + upsample->spare_full = FALSE; + /* Initialize total-height counter for detecting bottom of image */ + upsample->rows_to_go = cinfo->output_height; +} + + +/* + * Control routine to do upsampling (and color conversion). + * + * The control routine just handles the row buffering considerations. + */ + +METHODDEF(void) +merged_2v_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +/* 2:1 vertical sampling case: may need a spare row. */ +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + JSAMPROW work_ptrs[2]; + JDIMENSION num_rows; /* number of rows returned to caller */ + + if (upsample->spare_full) { + /* If we have a spare row saved from a previous cycle, just return it. */ + jcopy_sample_rows(& upsample->spare_row, 0, output_buf + *out_row_ctr, 0, + 1, upsample->out_row_width); + num_rows = 1; + upsample->spare_full = FALSE; + } else { + /* Figure number of rows to return to caller. */ + num_rows = 2; + /* Not more than the distance to the end of the image. */ + if (num_rows > upsample->rows_to_go) + num_rows = upsample->rows_to_go; + /* And not more than what the client can accept: */ + out_rows_avail -= *out_row_ctr; + if (num_rows > out_rows_avail) + num_rows = out_rows_avail; + /* Create output pointer array for upsampler. */ + work_ptrs[0] = output_buf[*out_row_ctr]; + if (num_rows > 1) { + work_ptrs[1] = output_buf[*out_row_ctr + 1]; + } else { + work_ptrs[1] = upsample->spare_row; + upsample->spare_full = TRUE; + } + /* Now do the upsampling. */ + (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, work_ptrs); + } + + /* Adjust counts */ + *out_row_ctr += num_rows; + upsample->rows_to_go -= num_rows; + /* When the buffer is emptied, declare this input row group consumed */ + if (! upsample->spare_full) + (*in_row_group_ctr)++; +} + + +METHODDEF(void) +merged_1v_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +/* 1:1 vertical sampling case: much easier, never need a spare row. */ +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + + /* Just do the upsampling. */ + (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, + output_buf + *out_row_ctr); + /* Adjust counts */ + (*out_row_ctr)++; + (*in_row_group_ctr)++; +} + + +/* + * These are the routines invoked by the control routines to do + * the actual upsampling/conversion. One row group is processed per call. + * + * Note: since we may be writing directly into application-supplied buffers, + * we have to be honest about the output width; we can't assume the buffer + * has been rounded up to an even width. + */ + + +/* + * Upsample and color convert for the case of 2:1 horizontal and 1:1 vertical. + */ + +METHODDEF(void) +h2v1_merged_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, + JSAMPARRAY output_buf) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + register int y, cred, cgreen, cblue; + int cb, cr; + register JSAMPROW outptr; + JSAMPROW inptr0, inptr1, inptr2; + JDIMENSION col; + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + int * Crrtab = upsample->Cr_r_tab; + int * Cbbtab = upsample->Cb_b_tab; + INT32 * Crgtab = upsample->Cr_g_tab; + INT32 * Cbgtab = upsample->Cb_g_tab; + SHIFT_TEMPS + + inptr0 = input_buf[0][in_row_group_ctr]; + inptr1 = input_buf[1][in_row_group_ctr]; + inptr2 = input_buf[2][in_row_group_ctr]; + outptr = output_buf[0]; + /* Loop for each pair of output pixels */ + for (col = cinfo->output_width >> 1; col > 0; col--) { + /* Do the chroma part of the calculation */ + cb = GETJSAMPLE(*inptr1++); + cr = GETJSAMPLE(*inptr2++); + cred = Crrtab[cr]; + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + cblue = Cbbtab[cb]; + /* Fetch 2 Y values and emit 2 pixels */ + y = GETJSAMPLE(*inptr0++); + outptr[RGB_RED] = range_limit[y + cred]; + outptr[RGB_GREEN] = range_limit[y + cgreen]; + outptr[RGB_BLUE] = range_limit[y + cblue]; + outptr += RGB_PIXELSIZE; + y = GETJSAMPLE(*inptr0++); + outptr[RGB_RED] = range_limit[y + cred]; + outptr[RGB_GREEN] = range_limit[y + cgreen]; + outptr[RGB_BLUE] = range_limit[y + cblue]; + outptr += RGB_PIXELSIZE; + } + /* If image width is odd, do the last output column separately */ + if (cinfo->output_width & 1) { + cb = GETJSAMPLE(*inptr1); + cr = GETJSAMPLE(*inptr2); + cred = Crrtab[cr]; + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + cblue = Cbbtab[cb]; + y = GETJSAMPLE(*inptr0); + outptr[RGB_RED] = range_limit[y + cred]; + outptr[RGB_GREEN] = range_limit[y + cgreen]; + outptr[RGB_BLUE] = range_limit[y + cblue]; + } +} + + +/* + * Upsample and color convert for the case of 2:1 horizontal and 2:1 vertical. + */ + +METHODDEF(void) +h2v2_merged_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, + JSAMPARRAY output_buf) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + register int y, cred, cgreen, cblue; + int cb, cr; + register JSAMPROW outptr0, outptr1; + JSAMPROW inptr00, inptr01, inptr1, inptr2; + JDIMENSION col; + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + int * Crrtab = upsample->Cr_r_tab; + int * Cbbtab = upsample->Cb_b_tab; + INT32 * Crgtab = upsample->Cr_g_tab; + INT32 * Cbgtab = upsample->Cb_g_tab; + SHIFT_TEMPS + + inptr00 = input_buf[0][in_row_group_ctr*2]; + inptr01 = input_buf[0][in_row_group_ctr*2 + 1]; + inptr1 = input_buf[1][in_row_group_ctr]; + inptr2 = input_buf[2][in_row_group_ctr]; + outptr0 = output_buf[0]; + outptr1 = output_buf[1]; + /* Loop for each group of output pixels */ + for (col = cinfo->output_width >> 1; col > 0; col--) { + /* Do the chroma part of the calculation */ + cb = GETJSAMPLE(*inptr1++); + cr = GETJSAMPLE(*inptr2++); + cred = Crrtab[cr]; + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + cblue = Cbbtab[cb]; + /* Fetch 4 Y values and emit 4 pixels */ + y = GETJSAMPLE(*inptr00++); + outptr0[RGB_RED] = range_limit[y + cred]; + outptr0[RGB_GREEN] = range_limit[y + cgreen]; + outptr0[RGB_BLUE] = range_limit[y + cblue]; + outptr0 += RGB_PIXELSIZE; + y = GETJSAMPLE(*inptr00++); + outptr0[RGB_RED] = range_limit[y + cred]; + outptr0[RGB_GREEN] = range_limit[y + cgreen]; + outptr0[RGB_BLUE] = range_limit[y + cblue]; + outptr0 += RGB_PIXELSIZE; + y = GETJSAMPLE(*inptr01++); + outptr1[RGB_RED] = range_limit[y + cred]; + outptr1[RGB_GREEN] = range_limit[y + cgreen]; + outptr1[RGB_BLUE] = range_limit[y + cblue]; + outptr1 += RGB_PIXELSIZE; + y = GETJSAMPLE(*inptr01++); + outptr1[RGB_RED] = range_limit[y + cred]; + outptr1[RGB_GREEN] = range_limit[y + cgreen]; + outptr1[RGB_BLUE] = range_limit[y + cblue]; + outptr1 += RGB_PIXELSIZE; + } + /* If image width is odd, do the last output column separately */ + if (cinfo->output_width & 1) { + cb = GETJSAMPLE(*inptr1); + cr = GETJSAMPLE(*inptr2); + cred = Crrtab[cr]; + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + cblue = Cbbtab[cb]; + y = GETJSAMPLE(*inptr00); + outptr0[RGB_RED] = range_limit[y + cred]; + outptr0[RGB_GREEN] = range_limit[y + cgreen]; + outptr0[RGB_BLUE] = range_limit[y + cblue]; + y = GETJSAMPLE(*inptr01); + outptr1[RGB_RED] = range_limit[y + cred]; + outptr1[RGB_GREEN] = range_limit[y + cgreen]; + outptr1[RGB_BLUE] = range_limit[y + cblue]; + } +} + + +/* + * Module initialization routine for merged upsampling/color conversion. + * + * NB: this is called under the conditions determined by use_merged_upsample() + * in jdmaster.c. That routine MUST correspond to the actual capabilities + * of this module; no safety checks are made here. + */ + +GLOBAL(void) +jinit_merged_upsampler (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample; + + upsample = (my_upsample_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_upsampler)); + cinfo->upsample = (struct jpeg_upsampler *) upsample; + upsample->pub.start_pass = start_pass_merged_upsample; + upsample->pub.need_context_rows = FALSE; + + upsample->out_row_width = cinfo->output_width * cinfo->out_color_components; + + if (cinfo->max_v_samp_factor == 2) { + upsample->pub.upsample = merged_2v_upsample; + upsample->upmethod = h2v2_merged_upsample; + /* Allocate a spare row buffer */ + upsample->spare_row = (JSAMPROW) + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (size_t) (upsample->out_row_width * SIZEOF(JSAMPLE))); + } else { + upsample->pub.upsample = merged_1v_upsample; + upsample->upmethod = h2v1_merged_upsample; + /* No spare row needed */ + upsample->spare_row = NULL; + } + + build_ycc_rgb_table(cinfo); +} + +#endif /* UPSAMPLE_MERGING_SUPPORTED */ diff --git a/Build/source/extra/jpeg/jdphuff.c b/Build/source/extra/jpeg/jdphuff.c new file mode 100644 index 00000000000..22678099451 --- /dev/null +++ b/Build/source/extra/jpeg/jdphuff.c @@ -0,0 +1,668 @@ +/* + * jdphuff.c + * + * Copyright (C) 1995-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains Huffman entropy decoding routines for progressive JPEG. + * + * Much of the complexity here has to do with supporting input suspension. + * If the data source module demands suspension, we want to be able to back + * up to the start of the current MCU. To do this, we copy state variables + * into local working storage, and update them back to the permanent + * storage only upon successful completion of an MCU. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdhuff.h" /* Declarations shared with jdhuff.c */ + + +#ifdef D_PROGRESSIVE_SUPPORTED + +/* + * Expanded entropy decoder object for progressive Huffman decoding. + * + * The savable_state subrecord contains fields that change within an MCU, + * but must not be updated permanently until we complete the MCU. + */ + +typedef struct { + unsigned int EOBRUN; /* remaining EOBs in EOBRUN */ + int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ +} savable_state; + +/* This macro is to work around compilers with missing or broken + * structure assignment. You'll need to fix this code if you have + * such a compiler and you change MAX_COMPS_IN_SCAN. + */ + +#ifndef NO_STRUCT_ASSIGN +#define ASSIGN_STATE(dest,src) ((dest) = (src)) +#else +#if MAX_COMPS_IN_SCAN == 4 +#define ASSIGN_STATE(dest,src) \ + ((dest).EOBRUN = (src).EOBRUN, \ + (dest).last_dc_val[0] = (src).last_dc_val[0], \ + (dest).last_dc_val[1] = (src).last_dc_val[1], \ + (dest).last_dc_val[2] = (src).last_dc_val[2], \ + (dest).last_dc_val[3] = (src).last_dc_val[3]) +#endif +#endif + + +typedef struct { + struct jpeg_entropy_decoder pub; /* public fields */ + + /* These fields are loaded into local variables at start of each MCU. + * In case of suspension, we exit WITHOUT updating them. + */ + bitread_perm_state bitstate; /* Bit buffer at start of MCU */ + savable_state saved; /* Other state at start of MCU */ + + /* These fields are NOT loaded into local working state. */ + unsigned int restarts_to_go; /* MCUs left in this restart interval */ + + /* Pointers to derived tables (these workspaces have image lifespan) */ + d_derived_tbl * derived_tbls[NUM_HUFF_TBLS]; + + d_derived_tbl * ac_derived_tbl; /* active table during an AC scan */ +} phuff_entropy_decoder; + +typedef phuff_entropy_decoder * phuff_entropy_ptr; + +/* Forward declarations */ +METHODDEF(boolean) decode_mcu_DC_first JPP((j_decompress_ptr cinfo, + JBLOCKROW *MCU_data)); +METHODDEF(boolean) decode_mcu_AC_first JPP((j_decompress_ptr cinfo, + JBLOCKROW *MCU_data)); +METHODDEF(boolean) decode_mcu_DC_refine JPP((j_decompress_ptr cinfo, + JBLOCKROW *MCU_data)); +METHODDEF(boolean) decode_mcu_AC_refine JPP((j_decompress_ptr cinfo, + JBLOCKROW *MCU_data)); + + +/* + * Initialize for a Huffman-compressed scan. + */ + +METHODDEF(void) +start_pass_phuff_decoder (j_decompress_ptr cinfo) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + boolean is_DC_band, bad; + int ci, coefi, tbl; + int *coef_bit_ptr; + jpeg_component_info * compptr; + + is_DC_band = (cinfo->Ss == 0); + + /* Validate scan parameters */ + bad = FALSE; + if (is_DC_band) { + if (cinfo->Se != 0) + bad = TRUE; + } else { + /* need not check Ss/Se < 0 since they came from unsigned bytes */ + if (cinfo->Ss > cinfo->Se || cinfo->Se >= DCTSIZE2) + bad = TRUE; + /* AC scans may have only one component */ + if (cinfo->comps_in_scan != 1) + bad = TRUE; + } + if (cinfo->Ah != 0) { + /* Successive approximation refinement scan: must have Al = Ah-1. */ + if (cinfo->Al != cinfo->Ah-1) + bad = TRUE; + } + if (cinfo->Al > 13) /* need not check for < 0 */ + bad = TRUE; + /* Arguably the maximum Al value should be less than 13 for 8-bit precision, + * but the spec doesn't say so, and we try to be liberal about what we + * accept. Note: large Al values could result in out-of-range DC + * coefficients during early scans, leading to bizarre displays due to + * overflows in the IDCT math. But we won't crash. + */ + if (bad) + ERREXIT4(cinfo, JERR_BAD_PROGRESSION, + cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al); + /* Update progression status, and verify that scan order is legal. + * Note that inter-scan inconsistencies are treated as warnings + * not fatal errors ... not clear if this is right way to behave. + */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + int cindex = cinfo->cur_comp_info[ci]->component_index; + coef_bit_ptr = & cinfo->coef_bits[cindex][0]; + if (!is_DC_band && coef_bit_ptr[0] < 0) /* AC without prior DC scan */ + WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0); + for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) { + int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi]; + if (cinfo->Ah != expected) + WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi); + coef_bit_ptr[coefi] = cinfo->Al; + } + } + + /* Select MCU decoding routine */ + if (cinfo->Ah == 0) { + if (is_DC_band) + entropy->pub.decode_mcu = decode_mcu_DC_first; + else + entropy->pub.decode_mcu = decode_mcu_AC_first; + } else { + if (is_DC_band) + entropy->pub.decode_mcu = decode_mcu_DC_refine; + else + entropy->pub.decode_mcu = decode_mcu_AC_refine; + } + + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + /* Make sure requested tables are present, and compute derived tables. + * We may build same derived table more than once, but it's not expensive. + */ + if (is_DC_band) { + if (cinfo->Ah == 0) { /* DC refinement needs no table */ + tbl = compptr->dc_tbl_no; + jpeg_make_d_derived_tbl(cinfo, TRUE, tbl, + & entropy->derived_tbls[tbl]); + } + } else { + tbl = compptr->ac_tbl_no; + jpeg_make_d_derived_tbl(cinfo, FALSE, tbl, + & entropy->derived_tbls[tbl]); + /* remember the single active table */ + entropy->ac_derived_tbl = entropy->derived_tbls[tbl]; + } + /* Initialize DC predictions to 0 */ + entropy->saved.last_dc_val[ci] = 0; + } + + /* Initialize bitread state variables */ + entropy->bitstate.bits_left = 0; + entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */ + entropy->pub.insufficient_data = FALSE; + + /* Initialize private state variables */ + entropy->saved.EOBRUN = 0; + + /* Initialize restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; +} + + +/* + * Figure F.12: extend sign bit. + * On some machines, a shift and add will be faster than a table lookup. + */ + +#ifdef AVOID_TABLES + +#define HUFF_EXTEND(x,s) ((x) < (1<<((s)-1)) ? (x) + (((-1)<<(s)) + 1) : (x)) + +#else + +#define HUFF_EXTEND(x,s) ((x) < extend_test[s] ? (x) + extend_offset[s] : (x)) + +static const int extend_test[16] = /* entry n is 2**(n-1) */ + { 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, + 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 }; + +static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */ + { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, + ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, + ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, + ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; + +#endif /* AVOID_TABLES */ + + +/* + * Check for a restart marker & resynchronize decoder. + * Returns FALSE if must suspend. + */ + +LOCAL(boolean) +process_restart (j_decompress_ptr cinfo) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + int ci; + + /* Throw away any unused bits remaining in bit buffer; */ + /* include any full bytes in next_marker's count of discarded bytes */ + cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8; + entropy->bitstate.bits_left = 0; + + /* Advance past the RSTn marker */ + if (! (*cinfo->marker->read_restart_marker) (cinfo)) + return FALSE; + + /* Re-initialize DC predictions to 0 */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) + entropy->saved.last_dc_val[ci] = 0; + /* Re-init EOB run count, too */ + entropy->saved.EOBRUN = 0; + + /* Reset restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; + + /* Reset out-of-data flag, unless read_restart_marker left us smack up + * against a marker. In that case we will end up treating the next data + * segment as empty, and we can avoid producing bogus output pixels by + * leaving the flag set. + */ + if (cinfo->unread_marker == 0) + entropy->pub.insufficient_data = FALSE; + + return TRUE; +} + + +/* + * Huffman MCU decoding. + * Each of these routines decodes and returns one MCU's worth of + * Huffman-compressed coefficients. + * The coefficients are reordered from zigzag order into natural array order, + * but are not dequantized. + * + * The i'th block of the MCU is stored into the block pointed to by + * MCU_data[i]. WE ASSUME THIS AREA IS INITIALLY ZEROED BY THE CALLER. + * + * We return FALSE if data source requested suspension. In that case no + * changes have been made to permanent state. (Exception: some output + * coefficients may already have been assigned. This is harmless for + * spectral selection, since we'll just re-assign them on the next call. + * Successive approximation AC refinement has to be more careful, however.) + */ + +/* + * MCU decoding for DC initial scan (either spectral selection, + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +decode_mcu_DC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + int Al = cinfo->Al; + register int s, r; + int blkn, ci; + JBLOCKROW block; + BITREAD_STATE_VARS; + savable_state state; + d_derived_tbl * tbl; + jpeg_component_info * compptr; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* If we've run out of data, just leave the MCU set to zeroes. + * This way, we return uniform gray for the remainder of the segment. + */ + if (! entropy->pub.insufficient_data) { + + /* Load up working state */ + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(state, entropy->saved); + + /* Outer loop handles each block in the MCU */ + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + block = MCU_data[blkn]; + ci = cinfo->MCU_membership[blkn]; + compptr = cinfo->cur_comp_info[ci]; + tbl = entropy->derived_tbls[compptr->dc_tbl_no]; + + /* Decode a single block's worth of coefficients */ + + /* Section F.2.2.1: decode the DC coefficient difference */ + HUFF_DECODE(s, br_state, tbl, return FALSE, label1); + if (s) { + CHECK_BIT_BUFFER(br_state, s, return FALSE); + r = GET_BITS(s); + s = HUFF_EXTEND(r, s); + } + + /* Convert DC difference to actual value, update last_dc_val */ + s += state.last_dc_val[ci]; + state.last_dc_val[ci] = s; + /* Scale and output the coefficient (assumes jpeg_natural_order[0]=0) */ + (*block)[0] = (JCOEF) (s << Al); + } + + /* Completed MCU, so update state */ + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(entropy->saved, state); + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; +} + + +/* + * MCU decoding for AC initial scan (either spectral selection, + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + int Se = cinfo->Se; + int Al = cinfo->Al; + register int s, k, r; + unsigned int EOBRUN; + JBLOCKROW block; + BITREAD_STATE_VARS; + d_derived_tbl * tbl; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* If we've run out of data, just leave the MCU set to zeroes. + * This way, we return uniform gray for the remainder of the segment. + */ + if (! entropy->pub.insufficient_data) { + + /* Load up working state. + * We can avoid loading/saving bitread state if in an EOB run. + */ + EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */ + + /* There is always only one block per MCU */ + + if (EOBRUN > 0) /* if it's a band of zeroes... */ + EOBRUN--; /* ...process it now (we do nothing) */ + else { + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + block = MCU_data[0]; + tbl = entropy->ac_derived_tbl; + + for (k = cinfo->Ss; k <= Se; k++) { + HUFF_DECODE(s, br_state, tbl, return FALSE, label2); + r = s >> 4; + s &= 15; + if (s) { + k += r; + CHECK_BIT_BUFFER(br_state, s, return FALSE); + r = GET_BITS(s); + s = HUFF_EXTEND(r, s); + /* Scale and output coefficient in natural (dezigzagged) order */ + (*block)[jpeg_natural_order[k]] = (JCOEF) (s << Al); + } else { + if (r == 15) { /* ZRL */ + k += 15; /* skip 15 zeroes in band */ + } else { /* EOBr, run length is 2^r + appended bits */ + EOBRUN = 1 << r; + if (r) { /* EOBr, r > 0 */ + CHECK_BIT_BUFFER(br_state, r, return FALSE); + r = GET_BITS(r); + EOBRUN += r; + } + EOBRUN--; /* this band is processed at this moment */ + break; /* force end-of-band */ + } + } + } + + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + } + + /* Completed MCU, so update state */ + entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; +} + + +/* + * MCU decoding for DC successive approximation refinement scan. + * Note: we assume such scans can be multi-component, although the spec + * is not very clear on the point. + */ + +METHODDEF(boolean) +decode_mcu_DC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + int blkn; + JBLOCKROW block; + BITREAD_STATE_VARS; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* Not worth the cycles to check insufficient_data here, + * since we will not change the data anyway if we read zeroes. + */ + + /* Load up working state */ + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + + /* Outer loop handles each block in the MCU */ + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + block = MCU_data[blkn]; + + /* Encoded data is simply the next bit of the two's-complement DC value */ + CHECK_BIT_BUFFER(br_state, 1, return FALSE); + if (GET_BITS(1)) + (*block)[0] |= p1; + /* Note: since we use |=, repeating the assignment later is safe */ + } + + /* Completed MCU, so update state */ + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; +} + + +/* + * MCU decoding for AC successive approximation refinement scan. + */ + +METHODDEF(boolean) +decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; + int Se = cinfo->Se; + int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + int m1 = (-1) << cinfo->Al; /* -1 in the bit position being coded */ + register int s, k, r; + unsigned int EOBRUN; + JBLOCKROW block; + JCOEFPTR thiscoef; + BITREAD_STATE_VARS; + d_derived_tbl * tbl; + int num_newnz; + int newnz_pos[DCTSIZE2]; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + if (entropy->restarts_to_go == 0) + if (! process_restart(cinfo)) + return FALSE; + } + + /* If we've run out of data, don't modify the MCU. + */ + if (! entropy->pub.insufficient_data) { + + /* Load up working state */ + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */ + + /* There is always only one block per MCU */ + block = MCU_data[0]; + tbl = entropy->ac_derived_tbl; + + /* If we are forced to suspend, we must undo the assignments to any newly + * nonzero coefficients in the block, because otherwise we'd get confused + * next time about which coefficients were already nonzero. + * But we need not undo addition of bits to already-nonzero coefficients; + * instead, we can test the current bit to see if we already did it. + */ + num_newnz = 0; + + /* initialize coefficient loop counter to start of band */ + k = cinfo->Ss; + + if (EOBRUN == 0) { + for (; k <= Se; k++) { + HUFF_DECODE(s, br_state, tbl, goto undoit, label3); + r = s >> 4; + s &= 15; + if (s) { + if (s != 1) /* size of new coef should always be 1 */ + WARNMS(cinfo, JWRN_HUFF_BAD_CODE); + CHECK_BIT_BUFFER(br_state, 1, goto undoit); + if (GET_BITS(1)) + s = p1; /* newly nonzero coef is positive */ + else + s = m1; /* newly nonzero coef is negative */ + } else { + if (r != 15) { + EOBRUN = 1 << r; /* EOBr, run length is 2^r + appended bits */ + if (r) { + CHECK_BIT_BUFFER(br_state, r, goto undoit); + r = GET_BITS(r); + EOBRUN += r; + } + break; /* rest of block is handled by EOB logic */ + } + /* note s = 0 for processing ZRL */ + } + /* Advance over already-nonzero coefs and r still-zero coefs, + * appending correction bits to the nonzeroes. A correction bit is 1 + * if the absolute value of the coefficient must be increased. + */ + do { + thiscoef = *block + jpeg_natural_order[k]; + if (*thiscoef != 0) { + CHECK_BIT_BUFFER(br_state, 1, goto undoit); + if (GET_BITS(1)) { + if ((*thiscoef & p1) == 0) { /* do nothing if already set it */ + if (*thiscoef >= 0) + *thiscoef += p1; + else + *thiscoef += m1; + } + } + } else { + if (--r < 0) + break; /* reached target zero coefficient */ + } + k++; + } while (k <= Se); + if (s) { + int pos = jpeg_natural_order[k]; + /* Output newly nonzero coefficient */ + (*block)[pos] = (JCOEF) s; + /* Remember its position in case we have to suspend */ + newnz_pos[num_newnz++] = pos; + } + } + } + + if (EOBRUN > 0) { + /* Scan any remaining coefficient positions after the end-of-band + * (the last newly nonzero coefficient, if any). Append a correction + * bit to each already-nonzero coefficient. A correction bit is 1 + * if the absolute value of the coefficient must be increased. + */ + for (; k <= Se; k++) { + thiscoef = *block + jpeg_natural_order[k]; + if (*thiscoef != 0) { + CHECK_BIT_BUFFER(br_state, 1, goto undoit); + if (GET_BITS(1)) { + if ((*thiscoef & p1) == 0) { /* do nothing if already changed it */ + if (*thiscoef >= 0) + *thiscoef += p1; + else + *thiscoef += m1; + } + } + } + } + /* Count one block completed in EOB run */ + EOBRUN--; + } + + /* Completed MCU, so update state */ + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; + +undoit: + /* Re-zero any output coefficients that we made newly nonzero */ + while (num_newnz > 0) + (*block)[newnz_pos[--num_newnz]] = 0; + + return FALSE; +} + + +/* + * Module initialization routine for progressive Huffman entropy decoding. + */ + +GLOBAL(void) +jinit_phuff_decoder (j_decompress_ptr cinfo) +{ + phuff_entropy_ptr entropy; + int *coef_bit_ptr; + int ci, i; + + entropy = (phuff_entropy_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(phuff_entropy_decoder)); + cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; + entropy->pub.start_pass = start_pass_phuff_decoder; + + /* Mark derived tables unallocated */ + for (i = 0; i < NUM_HUFF_TBLS; i++) { + entropy->derived_tbls[i] = NULL; + } + + /* Create progression status table */ + cinfo->coef_bits = (int (*)[DCTSIZE2]) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->num_components*DCTSIZE2*SIZEOF(int)); + coef_bit_ptr = & cinfo->coef_bits[0][0]; + for (ci = 0; ci < cinfo->num_components; ci++) + for (i = 0; i < DCTSIZE2; i++) + *coef_bit_ptr++ = -1; +} + +#endif /* D_PROGRESSIVE_SUPPORTED */ diff --git a/Build/source/extra/jpeg/jdpostct.c b/Build/source/extra/jpeg/jdpostct.c new file mode 100644 index 00000000000..571563d728e --- /dev/null +++ b/Build/source/extra/jpeg/jdpostct.c @@ -0,0 +1,290 @@ +/* + * jdpostct.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the decompression postprocessing controller. + * This controller manages the upsampling, color conversion, and color + * quantization/reduction steps; specifically, it controls the buffering + * between upsample/color conversion and color quantization/reduction. + * + * If no color quantization/reduction is required, then this module has no + * work to do, and it just hands off to the upsample/color conversion code. + * An integrated upsample/convert/quantize process would replace this module + * entirely. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Private buffer controller object */ + +typedef struct { + struct jpeg_d_post_controller pub; /* public fields */ + + /* Color quantization source buffer: this holds output data from + * the upsample/color conversion step to be passed to the quantizer. + * For two-pass color quantization, we need a full-image buffer; + * for one-pass operation, a strip buffer is sufficient. + */ + jvirt_sarray_ptr whole_image; /* virtual array, or NULL if one-pass */ + JSAMPARRAY buffer; /* strip buffer, or current strip of virtual */ + JDIMENSION strip_height; /* buffer size in rows */ + /* for two-pass mode only: */ + JDIMENSION starting_row; /* row # of first row in current strip */ + JDIMENSION next_row; /* index of next row to fill/empty in strip */ +} my_post_controller; + +typedef my_post_controller * my_post_ptr; + + +/* Forward declarations */ +METHODDEF(void) post_process_1pass + JPP((j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +#ifdef QUANT_2PASS_SUPPORTED +METHODDEF(void) post_process_prepass + JPP((j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +METHODDEF(void) post_process_2pass + JPP((j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +#endif + + +/* + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_dpost (j_decompress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_post_ptr post = (my_post_ptr) cinfo->post; + + switch (pass_mode) { + case JBUF_PASS_THRU: + if (cinfo->quantize_colors) { + /* Single-pass processing with color quantization. */ + post->pub.post_process_data = post_process_1pass; + /* We could be doing buffered-image output before starting a 2-pass + * color quantization; in that case, jinit_d_post_controller did not + * allocate a strip buffer. Use the virtual-array buffer as workspace. + */ + if (post->buffer == NULL) { + post->buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, post->whole_image, + (JDIMENSION) 0, post->strip_height, TRUE); + } + } else { + /* For single-pass processing without color quantization, + * I have no work to do; just call the upsampler directly. + */ + post->pub.post_process_data = cinfo->upsample->upsample; + } + break; +#ifdef QUANT_2PASS_SUPPORTED + case JBUF_SAVE_AND_PASS: + /* First pass of 2-pass quantization */ + if (post->whole_image == NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + post->pub.post_process_data = post_process_prepass; + break; + case JBUF_CRANK_DEST: + /* Second pass of 2-pass quantization */ + if (post->whole_image == NULL) + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + post->pub.post_process_data = post_process_2pass; + break; +#endif /* QUANT_2PASS_SUPPORTED */ + default: + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + break; + } + post->starting_row = post->next_row = 0; +} + + +/* + * Process some data in the one-pass (strip buffer) case. + * This is used for color precision reduction as well as one-pass quantization. + */ + +METHODDEF(void) +post_process_1pass (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_post_ptr post = (my_post_ptr) cinfo->post; + JDIMENSION num_rows, max_rows; + + /* Fill the buffer, but not more than what we can dump out in one go. */ + /* Note we rely on the upsampler to detect bottom of image. */ + max_rows = out_rows_avail - *out_row_ctr; + if (max_rows > post->strip_height) + max_rows = post->strip_height; + num_rows = 0; + (*cinfo->upsample->upsample) (cinfo, + input_buf, in_row_group_ctr, in_row_groups_avail, + post->buffer, &num_rows, max_rows); + /* Quantize and emit data. */ + (*cinfo->cquantize->color_quantize) (cinfo, + post->buffer, output_buf + *out_row_ctr, (int) num_rows); + *out_row_ctr += num_rows; +} + + +#ifdef QUANT_2PASS_SUPPORTED + +/* + * Process some data in the first pass of 2-pass quantization. + */ + +METHODDEF(void) +post_process_prepass (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_post_ptr post = (my_post_ptr) cinfo->post; + JDIMENSION old_next_row, num_rows; + + /* Reposition virtual buffer if at start of strip. */ + if (post->next_row == 0) { + post->buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, post->whole_image, + post->starting_row, post->strip_height, TRUE); + } + + /* Upsample some data (up to a strip height's worth). */ + old_next_row = post->next_row; + (*cinfo->upsample->upsample) (cinfo, + input_buf, in_row_group_ctr, in_row_groups_avail, + post->buffer, &post->next_row, post->strip_height); + + /* Allow quantizer to scan new data. No data is emitted, */ + /* but we advance out_row_ctr so outer loop can tell when we're done. */ + if (post->next_row > old_next_row) { + num_rows = post->next_row - old_next_row; + (*cinfo->cquantize->color_quantize) (cinfo, post->buffer + old_next_row, + (JSAMPARRAY) NULL, (int) num_rows); + *out_row_ctr += num_rows; + } + + /* Advance if we filled the strip. */ + if (post->next_row >= post->strip_height) { + post->starting_row += post->strip_height; + post->next_row = 0; + } +} + + +/* + * Process some data in the second pass of 2-pass quantization. + */ + +METHODDEF(void) +post_process_2pass (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_post_ptr post = (my_post_ptr) cinfo->post; + JDIMENSION num_rows, max_rows; + + /* Reposition virtual buffer if at start of strip. */ + if (post->next_row == 0) { + post->buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, post->whole_image, + post->starting_row, post->strip_height, FALSE); + } + + /* Determine number of rows to emit. */ + num_rows = post->strip_height - post->next_row; /* available in strip */ + max_rows = out_rows_avail - *out_row_ctr; /* available in output area */ + if (num_rows > max_rows) + num_rows = max_rows; + /* We have to check bottom of image here, can't depend on upsampler. */ + max_rows = cinfo->output_height - post->starting_row; + if (num_rows > max_rows) + num_rows = max_rows; + + /* Quantize and emit data. */ + (*cinfo->cquantize->color_quantize) (cinfo, + post->buffer + post->next_row, output_buf + *out_row_ctr, + (int) num_rows); + *out_row_ctr += num_rows; + + /* Advance if we filled the strip. */ + post->next_row += num_rows; + if (post->next_row >= post->strip_height) { + post->starting_row += post->strip_height; + post->next_row = 0; + } +} + +#endif /* QUANT_2PASS_SUPPORTED */ + + +/* + * Initialize postprocessing controller. + */ + +GLOBAL(void) +jinit_d_post_controller (j_decompress_ptr cinfo, boolean need_full_buffer) +{ + my_post_ptr post; + + post = (my_post_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_post_controller)); + cinfo->post = (struct jpeg_d_post_controller *) post; + post->pub.start_pass = start_pass_dpost; + post->whole_image = NULL; /* flag for no virtual arrays */ + post->buffer = NULL; /* flag for no strip buffer */ + + /* Create the quantization buffer, if needed */ + if (cinfo->quantize_colors) { + /* The buffer strip height is max_v_samp_factor, which is typically + * an efficient number of rows for upsampling to return. + * (In the presence of output rescaling, we might want to be smarter?) + */ + post->strip_height = (JDIMENSION) cinfo->max_v_samp_factor; + if (need_full_buffer) { + /* Two-pass color quantization: need full-image storage. */ + /* We round up the number of rows to a multiple of the strip height. */ +#ifdef QUANT_2PASS_SUPPORTED + post->whole_image = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + cinfo->output_width * cinfo->out_color_components, + (JDIMENSION) jround_up((long) cinfo->output_height, + (long) post->strip_height), + post->strip_height); +#else + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); +#endif /* QUANT_2PASS_SUPPORTED */ + } else { + /* One-pass color quantization: just make a strip buffer. */ + post->buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->output_width * cinfo->out_color_components, + post->strip_height); + } + } +} diff --git a/Build/source/extra/jpeg/jdsample.c b/Build/source/extra/jpeg/jdsample.c new file mode 100644 index 00000000000..80ffefb2a1c --- /dev/null +++ b/Build/source/extra/jpeg/jdsample.c @@ -0,0 +1,478 @@ +/* + * jdsample.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains upsampling routines. + * + * Upsampling input data is counted in "row groups". A row group + * is defined to be (v_samp_factor * DCT_scaled_size / min_DCT_scaled_size) + * sample rows of each component. Upsampling will normally produce + * max_v_samp_factor pixel rows from each row group (but this could vary + * if the upsampler is applying a scale factor of its own). + * + * An excellent reference for image resampling is + * Digital Image Warping, George Wolberg, 1990. + * Pub. by IEEE Computer Society Press, Los Alamitos, CA. ISBN 0-8186-8944-7. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Pointer to routine to upsample a single component */ +typedef JMETHOD(void, upsample1_ptr, + (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)); + +/* Private subobject */ + +typedef struct { + struct jpeg_upsampler pub; /* public fields */ + + /* Color conversion buffer. When using separate upsampling and color + * conversion steps, this buffer holds one upsampled row group until it + * has been color converted and output. + * Note: we do not allocate any storage for component(s) which are full-size, + * ie do not need rescaling. The corresponding entry of color_buf[] is + * simply set to point to the input data array, thereby avoiding copying. + */ + JSAMPARRAY color_buf[MAX_COMPONENTS]; + + /* Per-component upsampling method pointers */ + upsample1_ptr methods[MAX_COMPONENTS]; + + int next_row_out; /* counts rows emitted from color_buf */ + JDIMENSION rows_to_go; /* counts rows remaining in image */ + + /* Height of an input row group for each component. */ + int rowgroup_height[MAX_COMPONENTS]; + + /* These arrays save pixel expansion factors so that int_expand need not + * recompute them each time. They are unused for other upsampling methods. + */ + UINT8 h_expand[MAX_COMPONENTS]; + UINT8 v_expand[MAX_COMPONENTS]; +} my_upsampler; + +typedef my_upsampler * my_upsample_ptr; + + +/* + * Initialize for an upsampling pass. + */ + +METHODDEF(void) +start_pass_upsample (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + + /* Mark the conversion buffer empty */ + upsample->next_row_out = cinfo->max_v_samp_factor; + /* Initialize total-height counter for detecting bottom of image */ + upsample->rows_to_go = cinfo->output_height; +} + + +/* + * Control routine to do upsampling (and color conversion). + * + * In this version we upsample each component independently. + * We upsample one row group into the conversion buffer, then apply + * color conversion a row at a time. + */ + +METHODDEF(void) +sep_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + int ci; + jpeg_component_info * compptr; + JDIMENSION num_rows; + + /* Fill the conversion buffer, if it's empty */ + if (upsample->next_row_out >= cinfo->max_v_samp_factor) { + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Invoke per-component upsample method. Notice we pass a POINTER + * to color_buf[ci], so that fullsize_upsample can change it. + */ + (*upsample->methods[ci]) (cinfo, compptr, + input_buf[ci] + (*in_row_group_ctr * upsample->rowgroup_height[ci]), + upsample->color_buf + ci); + } + upsample->next_row_out = 0; + } + + /* Color-convert and emit rows */ + + /* How many we have in the buffer: */ + num_rows = (JDIMENSION) (cinfo->max_v_samp_factor - upsample->next_row_out); + /* Not more than the distance to the end of the image. Need this test + * in case the image height is not a multiple of max_v_samp_factor: + */ + if (num_rows > upsample->rows_to_go) + num_rows = upsample->rows_to_go; + /* And not more than what the client can accept: */ + out_rows_avail -= *out_row_ctr; + if (num_rows > out_rows_avail) + num_rows = out_rows_avail; + + (*cinfo->cconvert->color_convert) (cinfo, upsample->color_buf, + (JDIMENSION) upsample->next_row_out, + output_buf + *out_row_ctr, + (int) num_rows); + + /* Adjust counts */ + *out_row_ctr += num_rows; + upsample->rows_to_go -= num_rows; + upsample->next_row_out += num_rows; + /* When the buffer is emptied, declare this input row group consumed */ + if (upsample->next_row_out >= cinfo->max_v_samp_factor) + (*in_row_group_ctr)++; +} + + +/* + * These are the routines invoked by sep_upsample to upsample pixel values + * of a single component. One row group is processed per call. + */ + + +/* + * For full-size components, we just make color_buf[ci] point at the + * input buffer, and thus avoid copying any data. Note that this is + * safe only because sep_upsample doesn't declare the input row group + * "consumed" until we are done color converting and emitting it. + */ + +METHODDEF(void) +fullsize_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + *output_data_ptr = input_data; +} + + +/* + * This is a no-op version used for "uninteresting" components. + * These components will not be referenced by color conversion. + */ + +METHODDEF(void) +noop_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + *output_data_ptr = NULL; /* safety check */ +} + + +/* + * This version handles any integral sampling ratios. + * This is not used for typical JPEG files, so it need not be fast. + * Nor, for that matter, is it particularly accurate: the algorithm is + * simple replication of the input pixel onto the corresponding output + * pixels. The hi-falutin sampling literature refers to this as a + * "box filter". A box filter tends to introduce visible artifacts, + * so if you are actually going to use 3:1 or 4:1 sampling ratios + * you would be well advised to improve this code. + */ + +METHODDEF(void) +int_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + JSAMPARRAY output_data = *output_data_ptr; + register JSAMPROW inptr, outptr; + register JSAMPLE invalue; + register int h; + JSAMPROW outend; + int h_expand, v_expand; + int inrow, outrow; + + h_expand = upsample->h_expand[compptr->component_index]; + v_expand = upsample->v_expand[compptr->component_index]; + + inrow = outrow = 0; + while (outrow < cinfo->max_v_samp_factor) { + /* Generate one output row with proper horizontal expansion */ + inptr = input_data[inrow]; + outptr = output_data[outrow]; + outend = outptr + cinfo->output_width; + while (outptr < outend) { + invalue = *inptr++; /* don't need GETJSAMPLE() here */ + for (h = h_expand; h > 0; h--) { + *outptr++ = invalue; + } + } + /* Generate any additional output rows by duplicating the first one */ + if (v_expand > 1) { + jcopy_sample_rows(output_data, outrow, output_data, outrow+1, + v_expand-1, cinfo->output_width); + } + inrow++; + outrow += v_expand; + } +} + + +/* + * Fast processing for the common case of 2:1 horizontal and 1:1 vertical. + * It's still a box filter. + */ + +METHODDEF(void) +h2v1_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + JSAMPARRAY output_data = *output_data_ptr; + register JSAMPROW inptr, outptr; + register JSAMPLE invalue; + JSAMPROW outend; + int inrow; + + for (inrow = 0; inrow < cinfo->max_v_samp_factor; inrow++) { + inptr = input_data[inrow]; + outptr = output_data[inrow]; + outend = outptr + cinfo->output_width; + while (outptr < outend) { + invalue = *inptr++; /* don't need GETJSAMPLE() here */ + *outptr++ = invalue; + *outptr++ = invalue; + } + } +} + + +/* + * Fast processing for the common case of 2:1 horizontal and 2:1 vertical. + * It's still a box filter. + */ + +METHODDEF(void) +h2v2_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + JSAMPARRAY output_data = *output_data_ptr; + register JSAMPROW inptr, outptr; + register JSAMPLE invalue; + JSAMPROW outend; + int inrow, outrow; + + inrow = outrow = 0; + while (outrow < cinfo->max_v_samp_factor) { + inptr = input_data[inrow]; + outptr = output_data[outrow]; + outend = outptr + cinfo->output_width; + while (outptr < outend) { + invalue = *inptr++; /* don't need GETJSAMPLE() here */ + *outptr++ = invalue; + *outptr++ = invalue; + } + jcopy_sample_rows(output_data, outrow, output_data, outrow+1, + 1, cinfo->output_width); + inrow++; + outrow += 2; + } +} + + +/* + * Fancy processing for the common case of 2:1 horizontal and 1:1 vertical. + * + * The upsampling algorithm is linear interpolation between pixel centers, + * also known as a "triangle filter". This is a good compromise between + * speed and visual quality. The centers of the output pixels are 1/4 and 3/4 + * of the way between input pixel centers. + * + * A note about the "bias" calculations: when rounding fractional values to + * integer, we do not want to always round 0.5 up to the next integer. + * If we did that, we'd introduce a noticeable bias towards larger values. + * Instead, this code is arranged so that 0.5 will be rounded up or down at + * alternate pixel locations (a simple ordered dither pattern). + */ + +METHODDEF(void) +h2v1_fancy_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + JSAMPARRAY output_data = *output_data_ptr; + register JSAMPROW inptr, outptr; + register int invalue; + register JDIMENSION colctr; + int inrow; + + for (inrow = 0; inrow < cinfo->max_v_samp_factor; inrow++) { + inptr = input_data[inrow]; + outptr = output_data[inrow]; + /* Special case for first column */ + invalue = GETJSAMPLE(*inptr++); + *outptr++ = (JSAMPLE) invalue; + *outptr++ = (JSAMPLE) ((invalue * 3 + GETJSAMPLE(*inptr) + 2) >> 2); + + for (colctr = compptr->downsampled_width - 2; colctr > 0; colctr--) { + /* General case: 3/4 * nearer pixel + 1/4 * further pixel */ + invalue = GETJSAMPLE(*inptr++) * 3; + *outptr++ = (JSAMPLE) ((invalue + GETJSAMPLE(inptr[-2]) + 1) >> 2); + *outptr++ = (JSAMPLE) ((invalue + GETJSAMPLE(*inptr) + 2) >> 2); + } + + /* Special case for last column */ + invalue = GETJSAMPLE(*inptr); + *outptr++ = (JSAMPLE) ((invalue * 3 + GETJSAMPLE(inptr[-1]) + 1) >> 2); + *outptr++ = (JSAMPLE) invalue; + } +} + + +/* + * Fancy processing for the common case of 2:1 horizontal and 2:1 vertical. + * Again a triangle filter; see comments for h2v1 case, above. + * + * It is OK for us to reference the adjacent input rows because we demanded + * context from the main buffer controller (see initialization code). + */ + +METHODDEF(void) +h2v2_fancy_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + JSAMPARRAY output_data = *output_data_ptr; + register JSAMPROW inptr0, inptr1, outptr; +#if BITS_IN_JSAMPLE == 8 + register int thiscolsum, lastcolsum, nextcolsum; +#else + register INT32 thiscolsum, lastcolsum, nextcolsum; +#endif + register JDIMENSION colctr; + int inrow, outrow, v; + + inrow = outrow = 0; + while (outrow < cinfo->max_v_samp_factor) { + for (v = 0; v < 2; v++) { + /* inptr0 points to nearest input row, inptr1 points to next nearest */ + inptr0 = input_data[inrow]; + if (v == 0) /* next nearest is row above */ + inptr1 = input_data[inrow-1]; + else /* next nearest is row below */ + inptr1 = input_data[inrow+1]; + outptr = output_data[outrow++]; + + /* Special case for first column */ + thiscolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++); + nextcolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++); + *outptr++ = (JSAMPLE) ((thiscolsum * 4 + 8) >> 4); + *outptr++ = (JSAMPLE) ((thiscolsum * 3 + nextcolsum + 7) >> 4); + lastcolsum = thiscolsum; thiscolsum = nextcolsum; + + for (colctr = compptr->downsampled_width - 2; colctr > 0; colctr--) { + /* General case: 3/4 * nearer pixel + 1/4 * further pixel in each */ + /* dimension, thus 9/16, 3/16, 3/16, 1/16 overall */ + nextcolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++); + *outptr++ = (JSAMPLE) ((thiscolsum * 3 + lastcolsum + 8) >> 4); + *outptr++ = (JSAMPLE) ((thiscolsum * 3 + nextcolsum + 7) >> 4); + lastcolsum = thiscolsum; thiscolsum = nextcolsum; + } + + /* Special case for last column */ + *outptr++ = (JSAMPLE) ((thiscolsum * 3 + lastcolsum + 8) >> 4); + *outptr++ = (JSAMPLE) ((thiscolsum * 4 + 7) >> 4); + } + inrow++; + } +} + + +/* + * Module initialization routine for upsampling. + */ + +GLOBAL(void) +jinit_upsampler (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample; + int ci; + jpeg_component_info * compptr; + boolean need_buffer, do_fancy; + int h_in_group, v_in_group, h_out_group, v_out_group; + + upsample = (my_upsample_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_upsampler)); + cinfo->upsample = (struct jpeg_upsampler *) upsample; + upsample->pub.start_pass = start_pass_upsample; + upsample->pub.upsample = sep_upsample; + upsample->pub.need_context_rows = FALSE; /* until we find out differently */ + + if (cinfo->CCIR601_sampling) /* this isn't supported */ + ERREXIT(cinfo, JERR_CCIR601_NOTIMPL); + + /* jdmainct.c doesn't support context rows when min_DCT_scaled_size = 1, + * so don't ask for it. + */ + do_fancy = cinfo->do_fancy_upsampling && cinfo->min_DCT_scaled_size > 1; + + /* Verify we can handle the sampling factors, select per-component methods, + * and create storage as needed. + */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + /* Compute size of an "input group" after IDCT scaling. This many samples + * are to be converted to max_h_samp_factor * max_v_samp_factor pixels. + */ + h_in_group = (compptr->h_samp_factor * compptr->DCT_scaled_size) / + cinfo->min_DCT_scaled_size; + v_in_group = (compptr->v_samp_factor * compptr->DCT_scaled_size) / + cinfo->min_DCT_scaled_size; + h_out_group = cinfo->max_h_samp_factor; + v_out_group = cinfo->max_v_samp_factor; + upsample->rowgroup_height[ci] = v_in_group; /* save for use later */ + need_buffer = TRUE; + if (! compptr->component_needed) { + /* Don't bother to upsample an uninteresting component. */ + upsample->methods[ci] = noop_upsample; + need_buffer = FALSE; + } else if (h_in_group == h_out_group && v_in_group == v_out_group) { + /* Fullsize components can be processed without any work. */ + upsample->methods[ci] = fullsize_upsample; + need_buffer = FALSE; + } else if (h_in_group * 2 == h_out_group && + v_in_group == v_out_group) { + /* Special cases for 2h1v upsampling */ + if (do_fancy && compptr->downsampled_width > 2) + upsample->methods[ci] = h2v1_fancy_upsample; + else + upsample->methods[ci] = h2v1_upsample; + } else if (h_in_group * 2 == h_out_group && + v_in_group * 2 == v_out_group) { + /* Special cases for 2h2v upsampling */ + if (do_fancy && compptr->downsampled_width > 2) { + upsample->methods[ci] = h2v2_fancy_upsample; + upsample->pub.need_context_rows = TRUE; + } else + upsample->methods[ci] = h2v2_upsample; + } else if ((h_out_group % h_in_group) == 0 && + (v_out_group % v_in_group) == 0) { + /* Generic integral-factors upsampling method */ + upsample->methods[ci] = int_upsample; + upsample->h_expand[ci] = (UINT8) (h_out_group / h_in_group); + upsample->v_expand[ci] = (UINT8) (v_out_group / v_in_group); + } else + ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL); + if (need_buffer) { + upsample->color_buf[ci] = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) jround_up((long) cinfo->output_width, + (long) cinfo->max_h_samp_factor), + (JDIMENSION) cinfo->max_v_samp_factor); + } + } +} diff --git a/Build/source/extra/jpeg/jdtrans.c b/Build/source/extra/jpeg/jdtrans.c new file mode 100644 index 00000000000..6c0ab715d32 --- /dev/null +++ b/Build/source/extra/jpeg/jdtrans.c @@ -0,0 +1,143 @@ +/* + * jdtrans.c + * + * Copyright (C) 1995-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains library routines for transcoding decompression, + * that is, reading raw DCT coefficient arrays from an input JPEG file. + * The routines in jdapimin.c will also be needed by a transcoder. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* Forward declarations */ +LOCAL(void) transdecode_master_selection JPP((j_decompress_ptr cinfo)); + + +/* + * Read the coefficient arrays from a JPEG file. + * jpeg_read_header must be completed before calling this. + * + * The entire image is read into a set of virtual coefficient-block arrays, + * one per component. The return value is a pointer to the array of + * virtual-array descriptors. These can be manipulated directly via the + * JPEG memory manager, or handed off to jpeg_write_coefficients(). + * To release the memory occupied by the virtual arrays, call + * jpeg_finish_decompress() when done with the data. + * + * An alternative usage is to simply obtain access to the coefficient arrays + * during a buffered-image-mode decompression operation. This is allowed + * after any jpeg_finish_output() call. The arrays can be accessed until + * jpeg_finish_decompress() is called. (Note that any call to the library + * may reposition the arrays, so don't rely on access_virt_barray() results + * to stay valid across library calls.) + * + * Returns NULL if suspended. This case need be checked only if + * a suspending data source is used. + */ + +GLOBAL(jvirt_barray_ptr *) +jpeg_read_coefficients (j_decompress_ptr cinfo) +{ + if (cinfo->global_state == DSTATE_READY) { + /* First call: initialize active modules */ + transdecode_master_selection(cinfo); + cinfo->global_state = DSTATE_RDCOEFS; + } + if (cinfo->global_state == DSTATE_RDCOEFS) { + /* Absorb whole file into the coef buffer */ + for (;;) { + int retcode; + /* Call progress monitor hook if present */ + if (cinfo->progress != NULL) + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + /* Absorb some more input */ + retcode = (*cinfo->inputctl->consume_input) (cinfo); + if (retcode == JPEG_SUSPENDED) + return NULL; + if (retcode == JPEG_REACHED_EOI) + break; + /* Advance progress counter if appropriate */ + if (cinfo->progress != NULL && + (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) { + if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) { + /* startup underestimated number of scans; ratchet up one scan */ + cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows; + } + } + } + /* Set state so that jpeg_finish_decompress does the right thing */ + cinfo->global_state = DSTATE_STOPPING; + } + /* At this point we should be in state DSTATE_STOPPING if being used + * standalone, or in state DSTATE_BUFIMAGE if being invoked to get access + * to the coefficients during a full buffered-image-mode decompression. + */ + if ((cinfo->global_state == DSTATE_STOPPING || + cinfo->global_state == DSTATE_BUFIMAGE) && cinfo->buffered_image) { + return cinfo->coef->coef_arrays; + } + /* Oops, improper usage */ + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + return NULL; /* keep compiler happy */ +} + + +/* + * Master selection of decompression modules for transcoding. + * This substitutes for jdmaster.c's initialization of the full decompressor. + */ + +LOCAL(void) +transdecode_master_selection (j_decompress_ptr cinfo) +{ + /* This is effectively a buffered-image operation. */ + cinfo->buffered_image = TRUE; + + /* Entropy decoding: either Huffman or arithmetic coding. */ + if (cinfo->arith_code) { + ERREXIT(cinfo, JERR_ARITH_NOTIMPL); + } else { + if (cinfo->progressive_mode) { +#ifdef D_PROGRESSIVE_SUPPORTED + jinit_phuff_decoder(cinfo); +#else + ERREXIT(cinfo, JERR_NOT_COMPILED); +#endif + } else + jinit_huff_decoder(cinfo); + } + + /* Always get a full-image coefficient buffer. */ + jinit_d_coef_controller(cinfo, TRUE); + + /* We can now tell the memory manager to allocate virtual arrays. */ + (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); + + /* Initialize input side of decompressor to consume first scan. */ + (*cinfo->inputctl->start_input_pass) (cinfo); + + /* Initialize progress monitoring. */ + if (cinfo->progress != NULL) { + int nscans; + /* Estimate number of scans to set pass_limit. */ + if (cinfo->progressive_mode) { + /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */ + nscans = 2 + 3 * cinfo->num_components; + } else if (cinfo->inputctl->has_multiple_scans) { + /* For a nonprogressive multiscan file, estimate 1 scan per component. */ + nscans = cinfo->num_components; + } else { + nscans = 1; + } + cinfo->progress->pass_counter = 0L; + cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans; + cinfo->progress->completed_passes = 0; + cinfo->progress->total_passes = 1; + } +} diff --git a/Build/source/extra/jpeg/jerror.c b/Build/source/extra/jpeg/jerror.c new file mode 100644 index 00000000000..3da7be86a00 --- /dev/null +++ b/Build/source/extra/jpeg/jerror.c @@ -0,0 +1,252 @@ +/* + * jerror.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains simple error-reporting and trace-message routines. + * These are suitable for Unix-like systems and others where writing to + * stderr is the right thing to do. Many applications will want to replace + * some or all of these routines. + * + * If you define USE_WINDOWS_MESSAGEBOX in jconfig.h or in the makefile, + * you get a Windows-specific hack to display error messages in a dialog box. + * It ain't much, but it beats dropping error messages into the bit bucket, + * which is what happens to output to stderr under most Windows C compilers. + * + * These routines are used by both the compression and decompression code. + */ + +/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ +#include "jinclude.h" +#include "jpeglib.h" +#include "jversion.h" +#include "jerror.h" + +#ifdef USE_WINDOWS_MESSAGEBOX +#include +#endif + +#ifndef EXIT_FAILURE /* define exit() codes if not provided */ +#define EXIT_FAILURE 1 +#endif + + +/* + * Create the message string table. + * We do this from the master message list in jerror.h by re-reading + * jerror.h with a suitable definition for macro JMESSAGE. + * The message table is made an external symbol just in case any applications + * want to refer to it directly. + */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_std_message_table jMsgTable +#endif + +#define JMESSAGE(code,string) string , + +const char * const jpeg_std_message_table[] = { +#include "jerror.h" + NULL +}; + + +/* + * Error exit handler: must not return to caller. + * + * Applications may override this if they want to get control back after + * an error. Typically one would longjmp somewhere instead of exiting. + * The setjmp buffer can be made a private field within an expanded error + * handler object. Note that the info needed to generate an error message + * is stored in the error object, so you can generate the message now or + * later, at your convenience. + * You should make sure that the JPEG object is cleaned up (with jpeg_abort + * or jpeg_destroy) at some point. + */ + +METHODDEF(void) +error_exit (j_common_ptr cinfo) +{ + /* Always display the message */ + (*cinfo->err->output_message) (cinfo); + + /* Let the memory manager delete any temp files before we die */ + jpeg_destroy(cinfo); + + exit(EXIT_FAILURE); +} + + +/* + * Actual output of an error or trace message. + * Applications may override this method to send JPEG messages somewhere + * other than stderr. + * + * On Windows, printing to stderr is generally completely useless, + * so we provide optional code to produce an error-dialog popup. + * Most Windows applications will still prefer to override this routine, + * but if they don't, it'll do something at least marginally useful. + * + * NOTE: to use the library in an environment that doesn't support the + * C stdio library, you may have to delete the call to fprintf() entirely, + * not just not use this routine. + */ + +METHODDEF(void) +output_message (j_common_ptr cinfo) +{ + char buffer[JMSG_LENGTH_MAX]; + + /* Create the message */ + (*cinfo->err->format_message) (cinfo, buffer); + +#ifdef USE_WINDOWS_MESSAGEBOX + /* Display it in a message dialog box */ + MessageBox(GetActiveWindow(), buffer, "JPEG Library Error", + MB_OK | MB_ICONERROR); +#else + /* Send it to stderr, adding a newline */ + fprintf(stderr, "%s\n", buffer); +#endif +} + + +/* + * Decide whether to emit a trace or warning message. + * msg_level is one of: + * -1: recoverable corrupt-data warning, may want to abort. + * 0: important advisory messages (always display to user). + * 1: first level of tracing detail. + * 2,3,...: successively more detailed tracing messages. + * An application might override this method if it wanted to abort on warnings + * or change the policy about which messages to display. + */ + +METHODDEF(void) +emit_message (j_common_ptr cinfo, int msg_level) +{ + struct jpeg_error_mgr * err = cinfo->err; + + if (msg_level < 0) { + /* It's a warning message. Since corrupt files may generate many warnings, + * the policy implemented here is to show only the first warning, + * unless trace_level >= 3. + */ + if (err->num_warnings == 0 || err->trace_level >= 3) + (*err->output_message) (cinfo); + /* Always count warnings in num_warnings. */ + err->num_warnings++; + } else { + /* It's a trace message. Show it if trace_level >= msg_level. */ + if (err->trace_level >= msg_level) + (*err->output_message) (cinfo); + } +} + + +/* + * Format a message string for the most recent JPEG error or message. + * The message is stored into buffer, which should be at least JMSG_LENGTH_MAX + * characters. Note that no '\n' character is added to the string. + * Few applications should need to override this method. + */ + +METHODDEF(void) +format_message (j_common_ptr cinfo, char * buffer) +{ + struct jpeg_error_mgr * err = cinfo->err; + int msg_code = err->msg_code; + const char * msgtext = NULL; + const char * msgptr; + char ch; + boolean isstring; + + /* Look up message string in proper table */ + if (msg_code > 0 && msg_code <= err->last_jpeg_message) { + msgtext = err->jpeg_message_table[msg_code]; + } else if (err->addon_message_table != NULL && + msg_code >= err->first_addon_message && + msg_code <= err->last_addon_message) { + msgtext = err->addon_message_table[msg_code - err->first_addon_message]; + } + + /* Defend against bogus message number */ + if (msgtext == NULL) { + err->msg_parm.i[0] = msg_code; + msgtext = err->jpeg_message_table[0]; + } + + /* Check for string parameter, as indicated by %s in the message text */ + isstring = FALSE; + msgptr = msgtext; + while ((ch = *msgptr++) != '\0') { + if (ch == '%') { + if (*msgptr == 's') isstring = TRUE; + break; + } + } + + /* Format the message into the passed buffer */ + if (isstring) + sprintf(buffer, msgtext, err->msg_parm.s); + else + sprintf(buffer, msgtext, + err->msg_parm.i[0], err->msg_parm.i[1], + err->msg_parm.i[2], err->msg_parm.i[3], + err->msg_parm.i[4], err->msg_parm.i[5], + err->msg_parm.i[6], err->msg_parm.i[7]); +} + + +/* + * Reset error state variables at start of a new image. + * This is called during compression startup to reset trace/error + * processing to default state, without losing any application-specific + * method pointers. An application might possibly want to override + * this method if it has additional error processing state. + */ + +METHODDEF(void) +reset_error_mgr (j_common_ptr cinfo) +{ + cinfo->err->num_warnings = 0; + /* trace_level is not reset since it is an application-supplied parameter */ + cinfo->err->msg_code = 0; /* may be useful as a flag for "no error" */ +} + + +/* + * Fill in the standard error-handling methods in a jpeg_error_mgr object. + * Typical call is: + * struct jpeg_compress_struct cinfo; + * struct jpeg_error_mgr err; + * + * cinfo.err = jpeg_std_error(&err); + * after which the application may override some of the methods. + */ + +GLOBAL(struct jpeg_error_mgr *) +jpeg_std_error (struct jpeg_error_mgr * err) +{ + err->error_exit = error_exit; + err->emit_message = emit_message; + err->output_message = output_message; + err->format_message = format_message; + err->reset_error_mgr = reset_error_mgr; + + err->trace_level = 0; /* default = no tracing */ + err->num_warnings = 0; /* no warnings emitted yet */ + err->msg_code = 0; /* may be useful as a flag for "no error" */ + + /* Initialize message table pointers */ + err->jpeg_message_table = jpeg_std_message_table; + err->last_jpeg_message = (int) JMSG_LASTMSGCODE - 1; + + err->addon_message_table = NULL; + err->first_addon_message = 0; /* for safety */ + err->last_addon_message = 0; + + return err; +} diff --git a/Build/source/extra/jpeg/jerror.h b/Build/source/extra/jpeg/jerror.h new file mode 100644 index 00000000000..fc2fffeac29 --- /dev/null +++ b/Build/source/extra/jpeg/jerror.h @@ -0,0 +1,291 @@ +/* + * jerror.h + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the error and message codes for the JPEG library. + * Edit this file to add new codes, or to translate the message strings to + * some other language. + * A set of error-reporting macros are defined too. Some applications using + * the JPEG library may wish to include this file to get the error codes + * and/or the macros. + */ + +/* + * To define the enum list of message codes, include this file without + * defining macro JMESSAGE. To create a message string table, include it + * again with a suitable JMESSAGE definition (see jerror.c for an example). + */ +#ifndef JMESSAGE +#ifndef JERROR_H +/* First time through, define the enum list */ +#define JMAKE_ENUM_LIST +#else +/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */ +#define JMESSAGE(code,string) +#endif /* JERROR_H */ +#endif /* JMESSAGE */ + +#ifdef JMAKE_ENUM_LIST + +typedef enum { + +#define JMESSAGE(code,string) code , + +#endif /* JMAKE_ENUM_LIST */ + +JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */ + +/* For maintenance convenience, list is alphabetical by message code name */ +JMESSAGE(JERR_ARITH_NOTIMPL, + "Sorry, there are legal restrictions on arithmetic coding") +JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix") +JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix") +JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode") +JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS") +JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range") +JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported") +JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition") +JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace") +JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace") +JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length") +JMESSAGE(JERR_BAD_LIB_VERSION, + "Wrong JPEG library version: library is %d, caller expects %d") +JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan") +JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d") +JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d") +JMESSAGE(JERR_BAD_PROGRESSION, + "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d") +JMESSAGE(JERR_BAD_PROG_SCRIPT, + "Invalid progressive parameters at scan script entry %d") +JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors") +JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d") +JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d") +JMESSAGE(JERR_BAD_STRUCT_SIZE, + "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u") +JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access") +JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small") +JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here") +JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet") +JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d") +JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request") +JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d") +JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x") +JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d") +JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d") +JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)") +JMESSAGE(JERR_EMS_READ, "Read from EMS failed") +JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed") +JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan") +JMESSAGE(JERR_FILE_READ, "Input file read error") +JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?") +JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet") +JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow") +JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry") +JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels") +JMESSAGE(JERR_INPUT_EMPTY, "Empty input file") +JMESSAGE(JERR_INPUT_EOF, "Premature end of input file") +JMESSAGE(JERR_MISMATCHED_QUANT_TABLE, + "Cannot transcode due to multiple use of quantization table %d") +JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data") +JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change") +JMESSAGE(JERR_NOTIMPL, "Not implemented yet") +JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time") +JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported") +JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined") +JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image") +JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined") +JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x") +JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)") +JMESSAGE(JERR_QUANT_COMPONENTS, + "Cannot quantize more than %d color components") +JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors") +JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors") +JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers") +JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker") +JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x") +JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers") +JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF") +JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s") +JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file") +JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file") +JMESSAGE(JERR_TFILE_WRITE, + "Write failed on temporary file --- out of disk space?") +JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines") +JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x") +JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up") +JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation") +JMESSAGE(JERR_XMS_READ, "Read from XMS failed") +JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed") +JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT) +JMESSAGE(JMSG_VERSION, JVERSION) +JMESSAGE(JTRC_16BIT_TABLES, + "Caution: quantization tables are too coarse for baseline JPEG") +JMESSAGE(JTRC_ADOBE, + "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d") +JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u") +JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u") +JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x") +JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x") +JMESSAGE(JTRC_DQT, "Define Quantization Table %d precision %d") +JMESSAGE(JTRC_DRI, "Define Restart Interval %u") +JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u") +JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u") +JMESSAGE(JTRC_EOI, "End Of Image") +JMESSAGE(JTRC_HUFFBITS, " %3d %3d %3d %3d %3d %3d %3d %3d") +JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d %d") +JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE, + "Warning: thumbnail image size does not match data length %u") +JMESSAGE(JTRC_JFIF_EXTENSION, + "JFIF extension marker: type 0x%02x, length %u") +JMESSAGE(JTRC_JFIF_THUMBNAIL, " with %d x %d thumbnail image") +JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u") +JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x") +JMESSAGE(JTRC_QUANTVALS, " %4u %4u %4u %4u %4u %4u %4u %4u") +JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors") +JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors") +JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization") +JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d") +JMESSAGE(JTRC_RST, "RST%d") +JMESSAGE(JTRC_SMOOTH_NOTIMPL, + "Smoothing not supported with nonstandard sampling ratios") +JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d") +JMESSAGE(JTRC_SOF_COMPONENT, " Component %d: %dhx%dv q=%d") +JMESSAGE(JTRC_SOI, "Start of Image") +JMESSAGE(JTRC_SOS, "Start Of Scan: %d components") +JMESSAGE(JTRC_SOS_COMPONENT, " Component %d: dc=%d ac=%d") +JMESSAGE(JTRC_SOS_PARAMS, " Ss=%d, Se=%d, Ah=%d, Al=%d") +JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s") +JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s") +JMESSAGE(JTRC_THUMB_JPEG, + "JFIF extension marker: JPEG-compressed thumbnail image, length %u") +JMESSAGE(JTRC_THUMB_PALETTE, + "JFIF extension marker: palette thumbnail image, length %u") +JMESSAGE(JTRC_THUMB_RGB, + "JFIF extension marker: RGB thumbnail image, length %u") +JMESSAGE(JTRC_UNKNOWN_IDS, + "Unrecognized component IDs %d %d %d, assuming YCbCr") +JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u") +JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u") +JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d") +JMESSAGE(JWRN_BOGUS_PROGRESSION, + "Inconsistent progression sequence for component %d coefficient %d") +JMESSAGE(JWRN_EXTRANEOUS_DATA, + "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x") +JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment") +JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code") +JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d") +JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file") +JMESSAGE(JWRN_MUST_RESYNC, + "Corrupt JPEG data: found marker 0x%02x instead of RST%d") +JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG") +JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines") + +#ifdef JMAKE_ENUM_LIST + + JMSG_LASTMSGCODE +} J_MESSAGE_CODE; + +#undef JMAKE_ENUM_LIST +#endif /* JMAKE_ENUM_LIST */ + +/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */ +#undef JMESSAGE + + +#ifndef JERROR_H +#define JERROR_H + +/* Macros to simplify using the error and trace message stuff */ +/* The first parameter is either type of cinfo pointer */ + +/* Fatal errors (print message and exit) */ +#define ERREXIT(cinfo,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT1(cinfo,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT2(cinfo,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT3(cinfo,code,p1,p2,p3) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (cinfo)->err->msg_parm.i[2] = (p3), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT4(cinfo,code,p1,p2,p3,p4) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (cinfo)->err->msg_parm.i[2] = (p3), \ + (cinfo)->err->msg_parm.i[3] = (p4), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXITS(cinfo,code,str) \ + ((cinfo)->err->msg_code = (code), \ + strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) + +#define MAKESTMT(stuff) do { stuff } while (0) + +/* Nonfatal errors (we can keep going, but the data is probably corrupt) */ +#define WARNMS(cinfo,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) +#define WARNMS1(cinfo,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) +#define WARNMS2(cinfo,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) + +/* Informational/debugging messages */ +#define TRACEMS(cinfo,lvl,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS1(cinfo,lvl,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS2(cinfo,lvl,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS3(cinfo,lvl,code,p1,p2,p3) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS5(cinfo,lvl,code,p1,p2,p3,p4,p5) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + _mp[4] = (p5); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMSS(cinfo,lvl,code,str) \ + ((cinfo)->err->msg_code = (code), \ + strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) + +#endif /* JERROR_H */ diff --git a/Build/source/extra/jpeg/jfdctflt.c b/Build/source/extra/jpeg/jfdctflt.c new file mode 100644 index 00000000000..79d7a007874 --- /dev/null +++ b/Build/source/extra/jpeg/jfdctflt.c @@ -0,0 +1,168 @@ +/* + * jfdctflt.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a floating-point implementation of the + * forward DCT (Discrete Cosine Transform). + * + * This implementation should be more accurate than either of the integer + * DCT implementations. However, it may not give the same results on all + * machines because of differences in roundoff behavior. Speed will depend + * on the hardware's floating point capacity. + * + * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT + * on each column. Direct algorithms are also available, but they are + * much more complex and seem not to be any faster when reduced to code. + * + * This implementation is based on Arai, Agui, and Nakajima's algorithm for + * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in + * Japanese, but the algorithm is described in the Pennebaker & Mitchell + * JPEG textbook (see REFERENCES section in file README). The following code + * is based directly on figure 4-8 in P&M. + * While an 8-point DCT cannot be done in less than 11 multiplies, it is + * possible to arrange the computation so that many of the multiplies are + * simple scalings of the final outputs. These multiplies can then be + * folded into the multiplications or divisions by the JPEG quantization + * table entries. The AA&N method leaves only 5 multiplies and 29 adds + * to be done in the DCT itself. + * The primary disadvantage of this method is that with a fixed-point + * implementation, accuracy is lost due to imprecise representation of the + * scaled quantization values. However, that problem does not arise if + * we use floating point arithmetic. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_FLOAT_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* + * Perform the forward DCT on one block of samples. + */ + +GLOBAL(void) +jpeg_fdct_float (FAST_FLOAT * data) +{ + FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + FAST_FLOAT tmp10, tmp11, tmp12, tmp13; + FAST_FLOAT z1, z2, z3, z4, z5, z11, z13; + FAST_FLOAT *dataptr; + int ctr; + + /* Pass 1: process rows. */ + + dataptr = data; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + tmp0 = dataptr[0] + dataptr[7]; + tmp7 = dataptr[0] - dataptr[7]; + tmp1 = dataptr[1] + dataptr[6]; + tmp6 = dataptr[1] - dataptr[6]; + tmp2 = dataptr[2] + dataptr[5]; + tmp5 = dataptr[2] - dataptr[5]; + tmp3 = dataptr[3] + dataptr[4]; + tmp4 = dataptr[3] - dataptr[4]; + + /* Even part */ + + tmp10 = tmp0 + tmp3; /* phase 2 */ + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + dataptr[0] = tmp10 + tmp11; /* phase 3 */ + dataptr[4] = tmp10 - tmp11; + + z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */ + dataptr[2] = tmp13 + z1; /* phase 5 */ + dataptr[6] = tmp13 - z1; + + /* Odd part */ + + tmp10 = tmp4 + tmp5; /* phase 2 */ + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */ + z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */ + z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */ + z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */ + + z11 = tmp7 + z3; /* phase 5 */ + z13 = tmp7 - z3; + + dataptr[5] = z13 + z2; /* phase 6 */ + dataptr[3] = z13 - z2; + dataptr[1] = z11 + z4; + dataptr[7] = z11 - z4; + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. */ + + dataptr = data; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; + tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; + tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; + tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; + tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; + + /* Even part */ + + tmp10 = tmp0 + tmp3; /* phase 2 */ + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */ + dataptr[DCTSIZE*4] = tmp10 - tmp11; + + z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */ + dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */ + dataptr[DCTSIZE*6] = tmp13 - z1; + + /* Odd part */ + + tmp10 = tmp4 + tmp5; /* phase 2 */ + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */ + z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */ + z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */ + z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */ + + z11 = tmp7 + z3; /* phase 5 */ + z13 = tmp7 - z3; + + dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */ + dataptr[DCTSIZE*3] = z13 - z2; + dataptr[DCTSIZE*1] = z11 + z4; + dataptr[DCTSIZE*7] = z11 - z4; + + dataptr++; /* advance pointer to next column */ + } +} + +#endif /* DCT_FLOAT_SUPPORTED */ diff --git a/Build/source/extra/jpeg/jfdctfst.c b/Build/source/extra/jpeg/jfdctfst.c new file mode 100644 index 00000000000..ccb378a3b45 --- /dev/null +++ b/Build/source/extra/jpeg/jfdctfst.c @@ -0,0 +1,224 @@ +/* + * jfdctfst.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a fast, not so accurate integer implementation of the + * forward DCT (Discrete Cosine Transform). + * + * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT + * on each column. Direct algorithms are also available, but they are + * much more complex and seem not to be any faster when reduced to code. + * + * This implementation is based on Arai, Agui, and Nakajima's algorithm for + * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in + * Japanese, but the algorithm is described in the Pennebaker & Mitchell + * JPEG textbook (see REFERENCES section in file README). The following code + * is based directly on figure 4-8 in P&M. + * While an 8-point DCT cannot be done in less than 11 multiplies, it is + * possible to arrange the computation so that many of the multiplies are + * simple scalings of the final outputs. These multiplies can then be + * folded into the multiplications or divisions by the JPEG quantization + * table entries. The AA&N method leaves only 5 multiplies and 29 adds + * to be done in the DCT itself. + * The primary disadvantage of this method is that with fixed-point math, + * accuracy is lost due to imprecise representation of the scaled + * quantization values. The smaller the quantization table entry, the less + * precise the scaled value, so this implementation does worse with high- + * quality-setting files than with low-quality ones. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_IFAST_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* Scaling decisions are generally the same as in the LL&M algorithm; + * see jfdctint.c for more details. However, we choose to descale + * (right shift) multiplication products as soon as they are formed, + * rather than carrying additional fractional bits into subsequent additions. + * This compromises accuracy slightly, but it lets us save a few shifts. + * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples) + * everywhere except in the multiplications proper; this saves a good deal + * of work on 16-bit-int machines. + * + * Again to save a few shifts, the intermediate results between pass 1 and + * pass 2 are not upscaled, but are represented only to integral precision. + * + * A final compromise is to represent the multiplicative constants to only + * 8 fractional bits, rather than 13. This saves some shifting work on some + * machines, and may also reduce the cost of multiplication (since there + * are fewer one-bits in the constants). + */ + +#define CONST_BITS 8 + + +/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus + * causing a lot of useless floating-point operations at run time. + * To get around this we use the following pre-calculated constants. + * If you change CONST_BITS you may want to add appropriate values. + * (With a reasonable C compiler, you can just rely on the FIX() macro...) + */ + +#if CONST_BITS == 8 +#define FIX_0_382683433 ((INT32) 98) /* FIX(0.382683433) */ +#define FIX_0_541196100 ((INT32) 139) /* FIX(0.541196100) */ +#define FIX_0_707106781 ((INT32) 181) /* FIX(0.707106781) */ +#define FIX_1_306562965 ((INT32) 334) /* FIX(1.306562965) */ +#else +#define FIX_0_382683433 FIX(0.382683433) +#define FIX_0_541196100 FIX(0.541196100) +#define FIX_0_707106781 FIX(0.707106781) +#define FIX_1_306562965 FIX(1.306562965) +#endif + + +/* We can gain a little more speed, with a further compromise in accuracy, + * by omitting the addition in a descaling shift. This yields an incorrectly + * rounded result half the time... + */ + +#ifndef USE_ACCURATE_ROUNDING +#undef DESCALE +#define DESCALE(x,n) RIGHT_SHIFT(x, n) +#endif + + +/* Multiply a DCTELEM variable by an INT32 constant, and immediately + * descale to yield a DCTELEM result. + */ + +#define MULTIPLY(var,const) ((DCTELEM) DESCALE((var) * (const), CONST_BITS)) + + +/* + * Perform the forward DCT on one block of samples. + */ + +GLOBAL(void) +jpeg_fdct_ifast (DCTELEM * data) +{ + DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + DCTELEM tmp10, tmp11, tmp12, tmp13; + DCTELEM z1, z2, z3, z4, z5, z11, z13; + DCTELEM *dataptr; + int ctr; + SHIFT_TEMPS + + /* Pass 1: process rows. */ + + dataptr = data; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + tmp0 = dataptr[0] + dataptr[7]; + tmp7 = dataptr[0] - dataptr[7]; + tmp1 = dataptr[1] + dataptr[6]; + tmp6 = dataptr[1] - dataptr[6]; + tmp2 = dataptr[2] + dataptr[5]; + tmp5 = dataptr[2] - dataptr[5]; + tmp3 = dataptr[3] + dataptr[4]; + tmp4 = dataptr[3] - dataptr[4]; + + /* Even part */ + + tmp10 = tmp0 + tmp3; /* phase 2 */ + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + dataptr[0] = tmp10 + tmp11; /* phase 3 */ + dataptr[4] = tmp10 - tmp11; + + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */ + dataptr[2] = tmp13 + z1; /* phase 5 */ + dataptr[6] = tmp13 - z1; + + /* Odd part */ + + tmp10 = tmp4 + tmp5; /* phase 2 */ + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */ + z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */ + z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */ + z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */ + + z11 = tmp7 + z3; /* phase 5 */ + z13 = tmp7 - z3; + + dataptr[5] = z13 + z2; /* phase 6 */ + dataptr[3] = z13 - z2; + dataptr[1] = z11 + z4; + dataptr[7] = z11 - z4; + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. */ + + dataptr = data; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; + tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; + tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; + tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; + tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; + + /* Even part */ + + tmp10 = tmp0 + tmp3; /* phase 2 */ + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */ + dataptr[DCTSIZE*4] = tmp10 - tmp11; + + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */ + dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */ + dataptr[DCTSIZE*6] = tmp13 - z1; + + /* Odd part */ + + tmp10 = tmp4 + tmp5; /* phase 2 */ + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */ + z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */ + z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */ + z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */ + + z11 = tmp7 + z3; /* phase 5 */ + z13 = tmp7 - z3; + + dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */ + dataptr[DCTSIZE*3] = z13 - z2; + dataptr[DCTSIZE*1] = z11 + z4; + dataptr[DCTSIZE*7] = z11 - z4; + + dataptr++; /* advance pointer to next column */ + } +} + +#endif /* DCT_IFAST_SUPPORTED */ diff --git a/Build/source/extra/jpeg/jfdctint.c b/Build/source/extra/jpeg/jfdctint.c new file mode 100644 index 00000000000..0a78b64aee8 --- /dev/null +++ b/Build/source/extra/jpeg/jfdctint.c @@ -0,0 +1,283 @@ +/* + * jfdctint.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a slow-but-accurate integer implementation of the + * forward DCT (Discrete Cosine Transform). + * + * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT + * on each column. Direct algorithms are also available, but they are + * much more complex and seem not to be any faster when reduced to code. + * + * This implementation is based on an algorithm described in + * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT + * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, + * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. + * The primary algorithm described there uses 11 multiplies and 29 adds. + * We use their alternate method with 12 multiplies and 32 adds. + * The advantage of this method is that no data path contains more than one + * multiplication; this allows a very simple and accurate implementation in + * scaled fixed-point arithmetic, with a minimal number of shifts. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_ISLOW_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* + * The poop on this scaling stuff is as follows: + * + * Each 1-D DCT step produces outputs which are a factor of sqrt(N) + * larger than the true DCT outputs. The final outputs are therefore + * a factor of N larger than desired; since N=8 this can be cured by + * a simple right shift at the end of the algorithm. The advantage of + * this arrangement is that we save two multiplications per 1-D DCT, + * because the y0 and y4 outputs need not be divided by sqrt(N). + * In the IJG code, this factor of 8 is removed by the quantization step + * (in jcdctmgr.c), NOT in this module. + * + * We have to do addition and subtraction of the integer inputs, which + * is no problem, and multiplication by fractional constants, which is + * a problem to do in integer arithmetic. We multiply all the constants + * by CONST_SCALE and convert them to integer constants (thus retaining + * CONST_BITS bits of precision in the constants). After doing a + * multiplication we have to divide the product by CONST_SCALE, with proper + * rounding, to produce the correct output. This division can be done + * cheaply as a right shift of CONST_BITS bits. We postpone shifting + * as long as possible so that partial sums can be added together with + * full fractional precision. + * + * The outputs of the first pass are scaled up by PASS1_BITS bits so that + * they are represented to better-than-integral precision. These outputs + * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word + * with the recommended scaling. (For 12-bit sample data, the intermediate + * array is INT32 anyway.) + * + * To avoid overflow of the 32-bit intermediate results in pass 2, we must + * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis + * shows that the values given below are the most effective. + */ + +#if BITS_IN_JSAMPLE == 8 +#define CONST_BITS 13 +#define PASS1_BITS 2 +#else +#define CONST_BITS 13 +#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ +#endif + +/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus + * causing a lot of useless floating-point operations at run time. + * To get around this we use the following pre-calculated constants. + * If you change CONST_BITS you may want to add appropriate values. + * (With a reasonable C compiler, you can just rely on the FIX() macro...) + */ + +#if CONST_BITS == 13 +#define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */ +#define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */ +#define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */ +#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ +#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ +#define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */ +#define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */ +#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ +#define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */ +#define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */ +#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ +#define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */ +#else +#define FIX_0_298631336 FIX(0.298631336) +#define FIX_0_390180644 FIX(0.390180644) +#define FIX_0_541196100 FIX(0.541196100) +#define FIX_0_765366865 FIX(0.765366865) +#define FIX_0_899976223 FIX(0.899976223) +#define FIX_1_175875602 FIX(1.175875602) +#define FIX_1_501321110 FIX(1.501321110) +#define FIX_1_847759065 FIX(1.847759065) +#define FIX_1_961570560 FIX(1.961570560) +#define FIX_2_053119869 FIX(2.053119869) +#define FIX_2_562915447 FIX(2.562915447) +#define FIX_3_072711026 FIX(3.072711026) +#endif + + +/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. + * For 8-bit samples with the recommended scaling, all the variable + * and constant values involved are no more than 16 bits wide, so a + * 16x16->32 bit multiply can be used instead of a full 32x32 multiply. + * For 12-bit samples, a full 32-bit multiplication will be needed. + */ + +#if BITS_IN_JSAMPLE == 8 +#define MULTIPLY(var,const) MULTIPLY16C16(var,const) +#else +#define MULTIPLY(var,const) ((var) * (const)) +#endif + + +/* + * Perform the forward DCT on one block of samples. + */ + +GLOBAL(void) +jpeg_fdct_islow (DCTELEM * data) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + INT32 tmp10, tmp11, tmp12, tmp13; + INT32 z1, z2, z3, z4, z5; + DCTELEM *dataptr; + int ctr; + SHIFT_TEMPS + + /* Pass 1: process rows. */ + /* Note results are scaled up by sqrt(8) compared to a true DCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + + dataptr = data; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + tmp0 = dataptr[0] + dataptr[7]; + tmp7 = dataptr[0] - dataptr[7]; + tmp1 = dataptr[1] + dataptr[6]; + tmp6 = dataptr[1] - dataptr[6]; + tmp2 = dataptr[2] + dataptr[5]; + tmp5 = dataptr[2] - dataptr[5]; + tmp3 = dataptr[3] + dataptr[4]; + tmp4 = dataptr[3] - dataptr[4]; + + /* Even part per LL&M figure 1 --- note that published figure is faulty; + * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". + */ + + tmp10 = tmp0 + tmp3; + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + dataptr[0] = (DCTELEM) ((tmp10 + tmp11) << PASS1_BITS); + dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS); + + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); + dataptr[2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865), + CONST_BITS-PASS1_BITS); + dataptr[6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065), + CONST_BITS-PASS1_BITS); + + /* Odd part per figure 8 --- note paper omits factor of sqrt(2). + * cK represents cos(K*pi/16). + * i0..i3 in the paper are tmp4..tmp7 here. + */ + + z1 = tmp4 + tmp7; + z2 = tmp5 + tmp6; + z3 = tmp4 + tmp6; + z4 = tmp5 + tmp7; + z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ + + tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ + tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ + tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ + z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + + z3 += z5; + z4 += z5; + + dataptr[7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS-PASS1_BITS); + dataptr[5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, CONST_BITS-PASS1_BITS); + dataptr[3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, CONST_BITS-PASS1_BITS); + dataptr[1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, CONST_BITS-PASS1_BITS); + + dataptr += DCTSIZE; /* advance pointer to next row */ + } + + /* Pass 2: process columns. + * We remove the PASS1_BITS scaling, but leave the results scaled up + * by an overall factor of 8. + */ + + dataptr = data; + for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { + tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; + tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; + tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; + tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; + tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; + tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; + tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; + tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; + + /* Even part per LL&M figure 1 --- note that published figure is faulty; + * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". + */ + + tmp10 = tmp0 + tmp3; + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS); + dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS); + + z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); + dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865), + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065), + CONST_BITS+PASS1_BITS); + + /* Odd part per figure 8 --- note paper omits factor of sqrt(2). + * cK represents cos(K*pi/16). + * i0..i3 in the paper are tmp4..tmp7 here. + */ + + z1 = tmp4 + tmp7; + z2 = tmp5 + tmp6; + z3 = tmp4 + tmp6; + z4 = tmp5 + tmp7; + z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ + + tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ + tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ + tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ + z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + + z3 += z5; + z4 += z5; + + dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, + CONST_BITS+PASS1_BITS); + dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, + CONST_BITS+PASS1_BITS); + + dataptr++; /* advance pointer to next column */ + } +} + +#endif /* DCT_ISLOW_SUPPORTED */ diff --git a/Build/source/extra/jpeg/jidctflt.c b/Build/source/extra/jpeg/jidctflt.c new file mode 100644 index 00000000000..0188ce3dfcd --- /dev/null +++ b/Build/source/extra/jpeg/jidctflt.c @@ -0,0 +1,242 @@ +/* + * jidctflt.c + * + * Copyright (C) 1994-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a floating-point implementation of the + * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine + * must also perform dequantization of the input coefficients. + * + * This implementation should be more accurate than either of the integer + * IDCT implementations. However, it may not give the same results on all + * machines because of differences in roundoff behavior. Speed will depend + * on the hardware's floating point capacity. + * + * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT + * on each row (or vice versa, but it's more convenient to emit a row at + * a time). Direct algorithms are also available, but they are much more + * complex and seem not to be any faster when reduced to code. + * + * This implementation is based on Arai, Agui, and Nakajima's algorithm for + * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in + * Japanese, but the algorithm is described in the Pennebaker & Mitchell + * JPEG textbook (see REFERENCES section in file README). The following code + * is based directly on figure 4-8 in P&M. + * While an 8-point DCT cannot be done in less than 11 multiplies, it is + * possible to arrange the computation so that many of the multiplies are + * simple scalings of the final outputs. These multiplies can then be + * folded into the multiplications or divisions by the JPEG quantization + * table entries. The AA&N method leaves only 5 multiplies and 29 adds + * to be done in the DCT itself. + * The primary disadvantage of this method is that with a fixed-point + * implementation, accuracy is lost due to imprecise representation of the + * scaled quantization values. However, that problem does not arise if + * we use floating point arithmetic. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_FLOAT_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* Dequantize a coefficient by multiplying it by the multiplier-table + * entry; produce a float result. + */ + +#define DEQUANTIZE(coef,quantval) (((FAST_FLOAT) (coef)) * (quantval)) + + +/* + * Perform dequantization and inverse DCT on one block of coefficients. + */ + +GLOBAL(void) +jpeg_idct_float (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + FAST_FLOAT tmp10, tmp11, tmp12, tmp13; + FAST_FLOAT z5, z10, z11, z12, z13; + JCOEFPTR inptr; + FLOAT_MULT_TYPE * quantptr; + FAST_FLOAT * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + FAST_FLOAT workspace[DCTSIZE2]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (FLOAT_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; ctr--) { + /* Due to quantization, we will usually find that many of the input + * coefficients are zero, especially the AC terms. We can exploit this + * by short-circuiting the IDCT calculation for any column in which all + * the AC terms are zero. In that case each output is equal to the + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + inptr[DCTSIZE*7] == 0) { + /* AC terms all zero */ + FAST_FLOAT dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + + wsptr[DCTSIZE*0] = dcval; + wsptr[DCTSIZE*1] = dcval; + wsptr[DCTSIZE*2] = dcval; + wsptr[DCTSIZE*3] = dcval; + wsptr[DCTSIZE*4] = dcval; + wsptr[DCTSIZE*5] = dcval; + wsptr[DCTSIZE*6] = dcval; + wsptr[DCTSIZE*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + continue; + } + + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp10 = tmp0 + tmp2; /* phase 3 */ + tmp11 = tmp0 - tmp2; + + tmp13 = tmp1 + tmp3; /* phases 5-3 */ + tmp12 = (tmp1 - tmp3) * ((FAST_FLOAT) 1.414213562) - tmp13; /* 2*c4 */ + + tmp0 = tmp10 + tmp13; /* phase 2 */ + tmp3 = tmp10 - tmp13; + tmp1 = tmp11 + tmp12; + tmp2 = tmp11 - tmp12; + + /* Odd part */ + + tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + z13 = tmp6 + tmp5; /* phase 6 */ + z10 = tmp6 - tmp5; + z11 = tmp4 + tmp7; + z12 = tmp4 - tmp7; + + tmp7 = z11 + z13; /* phase 5 */ + tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); /* 2*c4 */ + + z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */ + tmp10 = ((FAST_FLOAT) 1.082392200) * z12 - z5; /* 2*(c2-c6) */ + tmp12 = ((FAST_FLOAT) -2.613125930) * z10 + z5; /* -2*(c2+c6) */ + + tmp6 = tmp12 - tmp7; /* phase 2 */ + tmp5 = tmp11 - tmp6; + tmp4 = tmp10 + tmp5; + + wsptr[DCTSIZE*0] = tmp0 + tmp7; + wsptr[DCTSIZE*7] = tmp0 - tmp7; + wsptr[DCTSIZE*1] = tmp1 + tmp6; + wsptr[DCTSIZE*6] = tmp1 - tmp6; + wsptr[DCTSIZE*2] = tmp2 + tmp5; + wsptr[DCTSIZE*5] = tmp2 - tmp5; + wsptr[DCTSIZE*4] = tmp3 + tmp4; + wsptr[DCTSIZE*3] = tmp3 - tmp4; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + } + + /* Pass 2: process rows from work array, store into output array. */ + /* Note that we must descale the results by a factor of 8 == 2**3. */ + + wsptr = workspace; + for (ctr = 0; ctr < DCTSIZE; ctr++) { + outptr = output_buf[ctr] + output_col; + /* Rows of zeroes can be exploited in the same way as we did with columns. + * However, the column calculation has created many nonzero AC terms, so + * the simplification applies less often (typically 5% to 10% of the time). + * And testing floats for zero is relatively expensive, so we don't bother. + */ + + /* Even part */ + + tmp10 = wsptr[0] + wsptr[4]; + tmp11 = wsptr[0] - wsptr[4]; + + tmp13 = wsptr[2] + wsptr[6]; + tmp12 = (wsptr[2] - wsptr[6]) * ((FAST_FLOAT) 1.414213562) - tmp13; + + tmp0 = tmp10 + tmp13; + tmp3 = tmp10 - tmp13; + tmp1 = tmp11 + tmp12; + tmp2 = tmp11 - tmp12; + + /* Odd part */ + + z13 = wsptr[5] + wsptr[3]; + z10 = wsptr[5] - wsptr[3]; + z11 = wsptr[1] + wsptr[7]; + z12 = wsptr[1] - wsptr[7]; + + tmp7 = z11 + z13; + tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); + + z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */ + tmp10 = ((FAST_FLOAT) 1.082392200) * z12 - z5; /* 2*(c2-c6) */ + tmp12 = ((FAST_FLOAT) -2.613125930) * z10 + z5; /* -2*(c2+c6) */ + + tmp6 = tmp12 - tmp7; + tmp5 = tmp11 - tmp6; + tmp4 = tmp10 + tmp5; + + /* Final output stage: scale down by a factor of 8 and range-limit */ + + outptr[0] = range_limit[(int) DESCALE((INT32) (tmp0 + tmp7), 3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) DESCALE((INT32) (tmp0 - tmp7), 3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) DESCALE((INT32) (tmp1 + tmp6), 3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) DESCALE((INT32) (tmp1 - tmp6), 3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) DESCALE((INT32) (tmp2 + tmp5), 3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) DESCALE((INT32) (tmp2 - tmp5), 3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) DESCALE((INT32) (tmp3 + tmp4), 3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) DESCALE((INT32) (tmp3 - tmp4), 3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + +#endif /* DCT_FLOAT_SUPPORTED */ diff --git a/Build/source/extra/jpeg/jidctfst.c b/Build/source/extra/jpeg/jidctfst.c new file mode 100644 index 00000000000..dba4216fb95 --- /dev/null +++ b/Build/source/extra/jpeg/jidctfst.c @@ -0,0 +1,368 @@ +/* + * jidctfst.c + * + * Copyright (C) 1994-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a fast, not so accurate integer implementation of the + * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine + * must also perform dequantization of the input coefficients. + * + * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT + * on each row (or vice versa, but it's more convenient to emit a row at + * a time). Direct algorithms are also available, but they are much more + * complex and seem not to be any faster when reduced to code. + * + * This implementation is based on Arai, Agui, and Nakajima's algorithm for + * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in + * Japanese, but the algorithm is described in the Pennebaker & Mitchell + * JPEG textbook (see REFERENCES section in file README). The following code + * is based directly on figure 4-8 in P&M. + * While an 8-point DCT cannot be done in less than 11 multiplies, it is + * possible to arrange the computation so that many of the multiplies are + * simple scalings of the final outputs. These multiplies can then be + * folded into the multiplications or divisions by the JPEG quantization + * table entries. The AA&N method leaves only 5 multiplies and 29 adds + * to be done in the DCT itself. + * The primary disadvantage of this method is that with fixed-point math, + * accuracy is lost due to imprecise representation of the scaled + * quantization values. The smaller the quantization table entry, the less + * precise the scaled value, so this implementation does worse with high- + * quality-setting files than with low-quality ones. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_IFAST_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* Scaling decisions are generally the same as in the LL&M algorithm; + * see jidctint.c for more details. However, we choose to descale + * (right shift) multiplication products as soon as they are formed, + * rather than carrying additional fractional bits into subsequent additions. + * This compromises accuracy slightly, but it lets us save a few shifts. + * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples) + * everywhere except in the multiplications proper; this saves a good deal + * of work on 16-bit-int machines. + * + * The dequantized coefficients are not integers because the AA&N scaling + * factors have been incorporated. We represent them scaled up by PASS1_BITS, + * so that the first and second IDCT rounds have the same input scaling. + * For 8-bit JSAMPLEs, we choose IFAST_SCALE_BITS = PASS1_BITS so as to + * avoid a descaling shift; this compromises accuracy rather drastically + * for small quantization table entries, but it saves a lot of shifts. + * For 12-bit JSAMPLEs, there's no hope of using 16x16 multiplies anyway, + * so we use a much larger scaling factor to preserve accuracy. + * + * A final compromise is to represent the multiplicative constants to only + * 8 fractional bits, rather than 13. This saves some shifting work on some + * machines, and may also reduce the cost of multiplication (since there + * are fewer one-bits in the constants). + */ + +#if BITS_IN_JSAMPLE == 8 +#define CONST_BITS 8 +#define PASS1_BITS 2 +#else +#define CONST_BITS 8 +#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ +#endif + +/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus + * causing a lot of useless floating-point operations at run time. + * To get around this we use the following pre-calculated constants. + * If you change CONST_BITS you may want to add appropriate values. + * (With a reasonable C compiler, you can just rely on the FIX() macro...) + */ + +#if CONST_BITS == 8 +#define FIX_1_082392200 ((INT32) 277) /* FIX(1.082392200) */ +#define FIX_1_414213562 ((INT32) 362) /* FIX(1.414213562) */ +#define FIX_1_847759065 ((INT32) 473) /* FIX(1.847759065) */ +#define FIX_2_613125930 ((INT32) 669) /* FIX(2.613125930) */ +#else +#define FIX_1_082392200 FIX(1.082392200) +#define FIX_1_414213562 FIX(1.414213562) +#define FIX_1_847759065 FIX(1.847759065) +#define FIX_2_613125930 FIX(2.613125930) +#endif + + +/* We can gain a little more speed, with a further compromise in accuracy, + * by omitting the addition in a descaling shift. This yields an incorrectly + * rounded result half the time... + */ + +#ifndef USE_ACCURATE_ROUNDING +#undef DESCALE +#define DESCALE(x,n) RIGHT_SHIFT(x, n) +#endif + + +/* Multiply a DCTELEM variable by an INT32 constant, and immediately + * descale to yield a DCTELEM result. + */ + +#define MULTIPLY(var,const) ((DCTELEM) DESCALE((var) * (const), CONST_BITS)) + + +/* Dequantize a coefficient by multiplying it by the multiplier-table + * entry; produce a DCTELEM result. For 8-bit data a 16x16->16 + * multiplication will do. For 12-bit data, the multiplier table is + * declared INT32, so a 32-bit multiply will be used. + */ + +#if BITS_IN_JSAMPLE == 8 +#define DEQUANTIZE(coef,quantval) (((IFAST_MULT_TYPE) (coef)) * (quantval)) +#else +#define DEQUANTIZE(coef,quantval) \ + DESCALE((coef)*(quantval), IFAST_SCALE_BITS-PASS1_BITS) +#endif + + +/* Like DESCALE, but applies to a DCTELEM and produces an int. + * We assume that int right shift is unsigned if INT32 right shift is. + */ + +#ifdef RIGHT_SHIFT_IS_UNSIGNED +#define ISHIFT_TEMPS DCTELEM ishift_temp; +#if BITS_IN_JSAMPLE == 8 +#define DCTELEMBITS 16 /* DCTELEM may be 16 or 32 bits */ +#else +#define DCTELEMBITS 32 /* DCTELEM must be 32 bits */ +#endif +#define IRIGHT_SHIFT(x,shft) \ + ((ishift_temp = (x)) < 0 ? \ + (ishift_temp >> (shft)) | ((~((DCTELEM) 0)) << (DCTELEMBITS-(shft))) : \ + (ishift_temp >> (shft))) +#else +#define ISHIFT_TEMPS +#define IRIGHT_SHIFT(x,shft) ((x) >> (shft)) +#endif + +#ifdef USE_ACCURATE_ROUNDING +#define IDESCALE(x,n) ((int) IRIGHT_SHIFT((x) + (1 << ((n)-1)), n)) +#else +#define IDESCALE(x,n) ((int) IRIGHT_SHIFT(x, n)) +#endif + + +/* + * Perform dequantization and inverse DCT on one block of coefficients. + */ + +GLOBAL(void) +jpeg_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; + DCTELEM tmp10, tmp11, tmp12, tmp13; + DCTELEM z5, z10, z11, z12, z13; + JCOEFPTR inptr; + IFAST_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[DCTSIZE2]; /* buffers data between passes */ + SHIFT_TEMPS /* for DESCALE */ + ISHIFT_TEMPS /* for IDESCALE */ + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (IFAST_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; ctr--) { + /* Due to quantization, we will usually find that many of the input + * coefficients are zero, especially the AC terms. We can exploit this + * by short-circuiting the IDCT calculation for any column in which all + * the AC terms are zero. In that case each output is equal to the + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + inptr[DCTSIZE*7] == 0) { + /* AC terms all zero */ + int dcval = (int) DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + + wsptr[DCTSIZE*0] = dcval; + wsptr[DCTSIZE*1] = dcval; + wsptr[DCTSIZE*2] = dcval; + wsptr[DCTSIZE*3] = dcval; + wsptr[DCTSIZE*4] = dcval; + wsptr[DCTSIZE*5] = dcval; + wsptr[DCTSIZE*6] = dcval; + wsptr[DCTSIZE*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + continue; + } + + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp10 = tmp0 + tmp2; /* phase 3 */ + tmp11 = tmp0 - tmp2; + + tmp13 = tmp1 + tmp3; /* phases 5-3 */ + tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; /* 2*c4 */ + + tmp0 = tmp10 + tmp13; /* phase 2 */ + tmp3 = tmp10 - tmp13; + tmp1 = tmp11 + tmp12; + tmp2 = tmp11 - tmp12; + + /* Odd part */ + + tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + z13 = tmp6 + tmp5; /* phase 6 */ + z10 = tmp6 - tmp5; + z11 = tmp4 + tmp7; + z12 = tmp4 - tmp7; + + tmp7 = z11 + z13; /* phase 5 */ + tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */ + + z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */ + tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ + tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ + + tmp6 = tmp12 - tmp7; /* phase 2 */ + tmp5 = tmp11 - tmp6; + tmp4 = tmp10 + tmp5; + + wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7); + wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7); + wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6); + wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6); + wsptr[DCTSIZE*2] = (int) (tmp2 + tmp5); + wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5); + wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4); + wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4); + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + } + + /* Pass 2: process rows from work array, store into output array. */ + /* Note that we must descale the results by a factor of 8 == 2**3, */ + /* and also undo the PASS1_BITS scaling. */ + + wsptr = workspace; + for (ctr = 0; ctr < DCTSIZE; ctr++) { + outptr = output_buf[ctr] + output_col; + /* Rows of zeroes can be exploited in the same way as we did with columns. + * However, the column calculation has created many nonzero AC terms, so + * the simplification applies less often (typically 5% to 10% of the time). + * On machines with very fast multiplication, it's possible that the + * test takes more time than it's worth. In that case this section + * may be commented out. + */ + +#ifndef NO_ZERO_ROW_TEST + if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + /* AC terms all zero */ + JSAMPLE dcval = range_limit[IDESCALE(wsptr[0], PASS1_BITS+3) + & RANGE_MASK]; + + outptr[0] = dcval; + outptr[1] = dcval; + outptr[2] = dcval; + outptr[3] = dcval; + outptr[4] = dcval; + outptr[5] = dcval; + outptr[6] = dcval; + outptr[7] = dcval; + + wsptr += DCTSIZE; /* advance pointer to next row */ + continue; + } +#endif + + /* Even part */ + + tmp10 = ((DCTELEM) wsptr[0] + (DCTELEM) wsptr[4]); + tmp11 = ((DCTELEM) wsptr[0] - (DCTELEM) wsptr[4]); + + tmp13 = ((DCTELEM) wsptr[2] + (DCTELEM) wsptr[6]); + tmp12 = MULTIPLY((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6], FIX_1_414213562) + - tmp13; + + tmp0 = tmp10 + tmp13; + tmp3 = tmp10 - tmp13; + tmp1 = tmp11 + tmp12; + tmp2 = tmp11 - tmp12; + + /* Odd part */ + + z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3]; + z10 = (DCTELEM) wsptr[5] - (DCTELEM) wsptr[3]; + z11 = (DCTELEM) wsptr[1] + (DCTELEM) wsptr[7]; + z12 = (DCTELEM) wsptr[1] - (DCTELEM) wsptr[7]; + + tmp7 = z11 + z13; /* phase 5 */ + tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */ + + z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */ + tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ + tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ + + tmp6 = tmp12 - tmp7; /* phase 2 */ + tmp5 = tmp11 - tmp6; + tmp4 = tmp10 + tmp5; + + /* Final output stage: scale down by a factor of 8 and range-limit */ + + outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + +#endif /* DCT_IFAST_SUPPORTED */ diff --git a/Build/source/extra/jpeg/jidctint.c b/Build/source/extra/jpeg/jidctint.c new file mode 100644 index 00000000000..a72b3207caf --- /dev/null +++ b/Build/source/extra/jpeg/jidctint.c @@ -0,0 +1,389 @@ +/* + * jidctint.c + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a slow-but-accurate integer implementation of the + * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine + * must also perform dequantization of the input coefficients. + * + * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT + * on each row (or vice versa, but it's more convenient to emit a row at + * a time). Direct algorithms are also available, but they are much more + * complex and seem not to be any faster when reduced to code. + * + * This implementation is based on an algorithm described in + * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT + * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, + * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. + * The primary algorithm described there uses 11 multiplies and 29 adds. + * We use their alternate method with 12 multiplies and 32 adds. + * The advantage of this method is that no data path contains more than one + * multiplication; this allows a very simple and accurate implementation in + * scaled fixed-point arithmetic, with a minimal number of shifts. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef DCT_ISLOW_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* + * The poop on this scaling stuff is as follows: + * + * Each 1-D IDCT step produces outputs which are a factor of sqrt(N) + * larger than the true IDCT outputs. The final outputs are therefore + * a factor of N larger than desired; since N=8 this can be cured by + * a simple right shift at the end of the algorithm. The advantage of + * this arrangement is that we save two multiplications per 1-D IDCT, + * because the y0 and y4 inputs need not be divided by sqrt(N). + * + * We have to do addition and subtraction of the integer inputs, which + * is no problem, and multiplication by fractional constants, which is + * a problem to do in integer arithmetic. We multiply all the constants + * by CONST_SCALE and convert them to integer constants (thus retaining + * CONST_BITS bits of precision in the constants). After doing a + * multiplication we have to divide the product by CONST_SCALE, with proper + * rounding, to produce the correct output. This division can be done + * cheaply as a right shift of CONST_BITS bits. We postpone shifting + * as long as possible so that partial sums can be added together with + * full fractional precision. + * + * The outputs of the first pass are scaled up by PASS1_BITS bits so that + * they are represented to better-than-integral precision. These outputs + * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word + * with the recommended scaling. (To scale up 12-bit sample data further, an + * intermediate INT32 array would be needed.) + * + * To avoid overflow of the 32-bit intermediate results in pass 2, we must + * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis + * shows that the values given below are the most effective. + */ + +#if BITS_IN_JSAMPLE == 8 +#define CONST_BITS 13 +#define PASS1_BITS 2 +#else +#define CONST_BITS 13 +#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ +#endif + +/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus + * causing a lot of useless floating-point operations at run time. + * To get around this we use the following pre-calculated constants. + * If you change CONST_BITS you may want to add appropriate values. + * (With a reasonable C compiler, you can just rely on the FIX() macro...) + */ + +#if CONST_BITS == 13 +#define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */ +#define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */ +#define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */ +#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ +#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ +#define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */ +#define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */ +#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ +#define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */ +#define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */ +#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ +#define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */ +#else +#define FIX_0_298631336 FIX(0.298631336) +#define FIX_0_390180644 FIX(0.390180644) +#define FIX_0_541196100 FIX(0.541196100) +#define FIX_0_765366865 FIX(0.765366865) +#define FIX_0_899976223 FIX(0.899976223) +#define FIX_1_175875602 FIX(1.175875602) +#define FIX_1_501321110 FIX(1.501321110) +#define FIX_1_847759065 FIX(1.847759065) +#define FIX_1_961570560 FIX(1.961570560) +#define FIX_2_053119869 FIX(2.053119869) +#define FIX_2_562915447 FIX(2.562915447) +#define FIX_3_072711026 FIX(3.072711026) +#endif + + +/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. + * For 8-bit samples with the recommended scaling, all the variable + * and constant values involved are no more than 16 bits wide, so a + * 16x16->32 bit multiply can be used instead of a full 32x32 multiply. + * For 12-bit samples, a full 32-bit multiplication will be needed. + */ + +#if BITS_IN_JSAMPLE == 8 +#define MULTIPLY(var,const) MULTIPLY16C16(var,const) +#else +#define MULTIPLY(var,const) ((var) * (const)) +#endif + + +/* Dequantize a coefficient by multiplying it by the multiplier-table + * entry; produce an int result. In this module, both inputs and result + * are 16 bits or less, so either int or short multiply will work. + */ + +#define DEQUANTIZE(coef,quantval) (((ISLOW_MULT_TYPE) (coef)) * (quantval)) + + +/* + * Perform dequantization and inverse DCT on one block of coefficients. + */ + +GLOBAL(void) +jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3; + INT32 tmp10, tmp11, tmp12, tmp13; + INT32 z1, z2, z3, z4, z5; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[DCTSIZE2]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; ctr--) { + /* Due to quantization, we will usually find that many of the input + * coefficients are zero, especially the AC terms. We can exploit this + * by short-circuiting the IDCT calculation for any column in which all + * the AC terms are zero. In that case each output is equal to the + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + inptr[DCTSIZE*7] == 0) { + /* AC terms all zero */ + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + + wsptr[DCTSIZE*0] = dcval; + wsptr[DCTSIZE*1] = dcval; + wsptr[DCTSIZE*2] = dcval; + wsptr[DCTSIZE*3] = dcval; + wsptr[DCTSIZE*4] = dcval; + wsptr[DCTSIZE*5] = dcval; + wsptr[DCTSIZE*6] = dcval; + wsptr[DCTSIZE*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + continue; + } + + /* Even part: reverse the even part of the forward DCT. */ + /* The rotator is sqrt(2)*c(-6). */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065); + tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865); + + z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + + tmp0 = (z2 + z3) << CONST_BITS; + tmp1 = (z2 - z3) << CONST_BITS; + + tmp10 = tmp0 + tmp3; + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + /* Odd part per figure 8; the matrix is unitary and hence its + * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. + */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + + z1 = tmp0 + tmp3; + z2 = tmp1 + tmp2; + z3 = tmp0 + tmp2; + z4 = tmp1 + tmp3; + z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ + + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ + z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + + z3 += z5; + z4 += z5; + + tmp0 += z1 + z3; + tmp1 += z2 + z4; + tmp2 += z2 + z3; + tmp3 += z1 + z4; + + /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ + + wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp3, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*7] = (int) DESCALE(tmp10 - tmp3, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*1] = (int) DESCALE(tmp11 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*6] = (int) DESCALE(tmp11 - tmp2, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*2] = (int) DESCALE(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*5] = (int) DESCALE(tmp12 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*3] = (int) DESCALE(tmp13 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[DCTSIZE*4] = (int) DESCALE(tmp13 - tmp0, CONST_BITS-PASS1_BITS); + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + } + + /* Pass 2: process rows from work array, store into output array. */ + /* Note that we must descale the results by a factor of 8 == 2**3, */ + /* and also undo the PASS1_BITS scaling. */ + + wsptr = workspace; + for (ctr = 0; ctr < DCTSIZE; ctr++) { + outptr = output_buf[ctr] + output_col; + /* Rows of zeroes can be exploited in the same way as we did with columns. + * However, the column calculation has created many nonzero AC terms, so + * the simplification applies less often (typically 5% to 10% of the time). + * On machines with very fast multiplication, it's possible that the + * test takes more time than it's worth. In that case this section + * may be commented out. + */ + +#ifndef NO_ZERO_ROW_TEST + if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + /* AC terms all zero */ + JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) + & RANGE_MASK]; + + outptr[0] = dcval; + outptr[1] = dcval; + outptr[2] = dcval; + outptr[3] = dcval; + outptr[4] = dcval; + outptr[5] = dcval; + outptr[6] = dcval; + outptr[7] = dcval; + + wsptr += DCTSIZE; /* advance pointer to next row */ + continue; + } +#endif + + /* Even part: reverse the even part of the forward DCT. */ + /* The rotator is sqrt(2)*c(-6). */ + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[6]; + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065); + tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865); + + tmp0 = ((INT32) wsptr[0] + (INT32) wsptr[4]) << CONST_BITS; + tmp1 = ((INT32) wsptr[0] - (INT32) wsptr[4]) << CONST_BITS; + + tmp10 = tmp0 + tmp3; + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + /* Odd part per figure 8; the matrix is unitary and hence its + * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. + */ + + tmp0 = (INT32) wsptr[7]; + tmp1 = (INT32) wsptr[5]; + tmp2 = (INT32) wsptr[3]; + tmp3 = (INT32) wsptr[1]; + + z1 = tmp0 + tmp3; + z2 = tmp1 + tmp2; + z3 = tmp0 + tmp2; + z4 = tmp1 + tmp3; + z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ + + tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ + tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ + tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ + tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ + z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ + z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ + + z3 += z5; + z4 += z5; + + tmp0 += z1 + z3; + tmp1 += z2 + z4; + tmp2 += z2 + z3; + tmp3 += z1 + z4; + + /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ + + outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) DESCALE(tmp10 - tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) DESCALE(tmp11 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) DESCALE(tmp11 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) DESCALE(tmp12 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) DESCALE(tmp12 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) DESCALE(tmp13 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) DESCALE(tmp13 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + +#endif /* DCT_ISLOW_SUPPORTED */ diff --git a/Build/source/extra/jpeg/jidctred.c b/Build/source/extra/jpeg/jidctred.c new file mode 100644 index 00000000000..421f3c7ca1e --- /dev/null +++ b/Build/source/extra/jpeg/jidctred.c @@ -0,0 +1,398 @@ +/* + * jidctred.c + * + * Copyright (C) 1994-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains inverse-DCT routines that produce reduced-size output: + * either 4x4, 2x2, or 1x1 pixels from an 8x8 DCT block. + * + * The implementation is based on the Loeffler, Ligtenberg and Moschytz (LL&M) + * algorithm used in jidctint.c. We simply replace each 8-to-8 1-D IDCT step + * with an 8-to-4 step that produces the four averages of two adjacent outputs + * (or an 8-to-2 step producing two averages of four outputs, for 2x2 output). + * These steps were derived by computing the corresponding values at the end + * of the normal LL&M code, then simplifying as much as possible. + * + * 1x1 is trivial: just take the DC coefficient divided by 8. + * + * See jidctint.c for additional comments. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jdct.h" /* Private declarations for DCT subsystem */ + +#ifdef IDCT_SCALING_SUPPORTED + + +/* + * This module is specialized to the case DCTSIZE = 8. + */ + +#if DCTSIZE != 8 + Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ +#endif + + +/* Scaling is the same as in jidctint.c. */ + +#if BITS_IN_JSAMPLE == 8 +#define CONST_BITS 13 +#define PASS1_BITS 2 +#else +#define CONST_BITS 13 +#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ +#endif + +/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus + * causing a lot of useless floating-point operations at run time. + * To get around this we use the following pre-calculated constants. + * If you change CONST_BITS you may want to add appropriate values. + * (With a reasonable C compiler, you can just rely on the FIX() macro...) + */ + +#if CONST_BITS == 13 +#define FIX_0_211164243 ((INT32) 1730) /* FIX(0.211164243) */ +#define FIX_0_509795579 ((INT32) 4176) /* FIX(0.509795579) */ +#define FIX_0_601344887 ((INT32) 4926) /* FIX(0.601344887) */ +#define FIX_0_720959822 ((INT32) 5906) /* FIX(0.720959822) */ +#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ +#define FIX_0_850430095 ((INT32) 6967) /* FIX(0.850430095) */ +#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ +#define FIX_1_061594337 ((INT32) 8697) /* FIX(1.061594337) */ +#define FIX_1_272758580 ((INT32) 10426) /* FIX(1.272758580) */ +#define FIX_1_451774981 ((INT32) 11893) /* FIX(1.451774981) */ +#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ +#define FIX_2_172734803 ((INT32) 17799) /* FIX(2.172734803) */ +#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ +#define FIX_3_624509785 ((INT32) 29692) /* FIX(3.624509785) */ +#else +#define FIX_0_211164243 FIX(0.211164243) +#define FIX_0_509795579 FIX(0.509795579) +#define FIX_0_601344887 FIX(0.601344887) +#define FIX_0_720959822 FIX(0.720959822) +#define FIX_0_765366865 FIX(0.765366865) +#define FIX_0_850430095 FIX(0.850430095) +#define FIX_0_899976223 FIX(0.899976223) +#define FIX_1_061594337 FIX(1.061594337) +#define FIX_1_272758580 FIX(1.272758580) +#define FIX_1_451774981 FIX(1.451774981) +#define FIX_1_847759065 FIX(1.847759065) +#define FIX_2_172734803 FIX(2.172734803) +#define FIX_2_562915447 FIX(2.562915447) +#define FIX_3_624509785 FIX(3.624509785) +#endif + + +/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. + * For 8-bit samples with the recommended scaling, all the variable + * and constant values involved are no more than 16 bits wide, so a + * 16x16->32 bit multiply can be used instead of a full 32x32 multiply. + * For 12-bit samples, a full 32-bit multiplication will be needed. + */ + +#if BITS_IN_JSAMPLE == 8 +#define MULTIPLY(var,const) MULTIPLY16C16(var,const) +#else +#define MULTIPLY(var,const) ((var) * (const)) +#endif + + +/* Dequantize a coefficient by multiplying it by the multiplier-table + * entry; produce an int result. In this module, both inputs and result + * are 16 bits or less, so either int or short multiply will work. + */ + +#define DEQUANTIZE(coef,quantval) (((ISLOW_MULT_TYPE) (coef)) * (quantval)) + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 4x4 output block. + */ + +GLOBAL(void) +jpeg_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp2, tmp10, tmp12; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[DCTSIZE*4]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; inptr++, quantptr++, wsptr++, ctr--) { + /* Don't bother to process column 4, because second pass won't use it */ + if (ctr == DCTSIZE-4) + continue; + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*5] == 0 && + inptr[DCTSIZE*6] == 0 && inptr[DCTSIZE*7] == 0) { + /* AC terms all zero; we need not examine term 4 for 4x4 output */ + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + + wsptr[DCTSIZE*0] = dcval; + wsptr[DCTSIZE*1] = dcval; + wsptr[DCTSIZE*2] = dcval; + wsptr[DCTSIZE*3] = dcval; + + continue; + } + + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= (CONST_BITS+1); + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp2 = MULTIPLY(z2, FIX_1_847759065) + MULTIPLY(z3, - FIX_0_765366865); + + tmp10 = tmp0 + tmp2; + tmp12 = tmp0 - tmp2; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + z2 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + + tmp0 = MULTIPLY(z1, - FIX_0_211164243) /* sqrt(2) * (c3-c1) */ + + MULTIPLY(z2, FIX_1_451774981) /* sqrt(2) * (c3+c7) */ + + MULTIPLY(z3, - FIX_2_172734803) /* sqrt(2) * (-c1-c5) */ + + MULTIPLY(z4, FIX_1_061594337); /* sqrt(2) * (c5+c7) */ + + tmp2 = MULTIPLY(z1, - FIX_0_509795579) /* sqrt(2) * (c7-c5) */ + + MULTIPLY(z2, - FIX_0_601344887) /* sqrt(2) * (c5-c1) */ + + MULTIPLY(z3, FIX_0_899976223) /* sqrt(2) * (c3-c7) */ + + MULTIPLY(z4, FIX_2_562915447); /* sqrt(2) * (c1+c3) */ + + /* Final output stage */ + + wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp2, CONST_BITS-PASS1_BITS+1); + wsptr[DCTSIZE*3] = (int) DESCALE(tmp10 - tmp2, CONST_BITS-PASS1_BITS+1); + wsptr[DCTSIZE*1] = (int) DESCALE(tmp12 + tmp0, CONST_BITS-PASS1_BITS+1); + wsptr[DCTSIZE*2] = (int) DESCALE(tmp12 - tmp0, CONST_BITS-PASS1_BITS+1); + } + + /* Pass 2: process 4 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 4; ctr++) { + outptr = output_buf[ctr] + output_col; + /* It's not clear whether a zero row test is worthwhile here ... */ + +#ifndef NO_ZERO_ROW_TEST + if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + /* AC terms all zero */ + JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) + & RANGE_MASK]; + + outptr[0] = dcval; + outptr[1] = dcval; + outptr[2] = dcval; + outptr[3] = dcval; + + wsptr += DCTSIZE; /* advance pointer to next row */ + continue; + } +#endif + + /* Even part */ + + tmp0 = ((INT32) wsptr[0]) << (CONST_BITS+1); + + tmp2 = MULTIPLY((INT32) wsptr[2], FIX_1_847759065) + + MULTIPLY((INT32) wsptr[6], - FIX_0_765366865); + + tmp10 = tmp0 + tmp2; + tmp12 = tmp0 - tmp2; + + /* Odd part */ + + z1 = (INT32) wsptr[7]; + z2 = (INT32) wsptr[5]; + z3 = (INT32) wsptr[3]; + z4 = (INT32) wsptr[1]; + + tmp0 = MULTIPLY(z1, - FIX_0_211164243) /* sqrt(2) * (c3-c1) */ + + MULTIPLY(z2, FIX_1_451774981) /* sqrt(2) * (c3+c7) */ + + MULTIPLY(z3, - FIX_2_172734803) /* sqrt(2) * (-c1-c5) */ + + MULTIPLY(z4, FIX_1_061594337); /* sqrt(2) * (c5+c7) */ + + tmp2 = MULTIPLY(z1, - FIX_0_509795579) /* sqrt(2) * (c7-c5) */ + + MULTIPLY(z2, - FIX_0_601344887) /* sqrt(2) * (c5-c1) */ + + MULTIPLY(z3, FIX_0_899976223) /* sqrt(2) * (c3-c7) */ + + MULTIPLY(z4, FIX_2_562915447); /* sqrt(2) * (c1+c3) */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp2, + CONST_BITS+PASS1_BITS+3+1) + & RANGE_MASK]; + outptr[3] = range_limit[(int) DESCALE(tmp10 - tmp2, + CONST_BITS+PASS1_BITS+3+1) + & RANGE_MASK]; + outptr[1] = range_limit[(int) DESCALE(tmp12 + tmp0, + CONST_BITS+PASS1_BITS+3+1) + & RANGE_MASK]; + outptr[2] = range_limit[(int) DESCALE(tmp12 - tmp0, + CONST_BITS+PASS1_BITS+3+1) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 2x2 output block. + */ + +GLOBAL(void) +jpeg_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp10, z1; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[DCTSIZE*2]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; inptr++, quantptr++, wsptr++, ctr--) { + /* Don't bother to process columns 2,4,6 */ + if (ctr == DCTSIZE-2 || ctr == DCTSIZE-4 || ctr == DCTSIZE-6) + continue; + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*3] == 0 && + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*7] == 0) { + /* AC terms all zero; we need not examine terms 2,4,6 for 2x2 output */ + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + + wsptr[DCTSIZE*0] = dcval; + wsptr[DCTSIZE*1] = dcval; + + continue; + } + + /* Even part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp10 = z1 << (CONST_BITS+2); + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + tmp0 = MULTIPLY(z1, - FIX_0_720959822); /* sqrt(2) * (c7-c5+c3-c1) */ + z1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp0 += MULTIPLY(z1, FIX_0_850430095); /* sqrt(2) * (-c1+c3+c5+c7) */ + z1 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + tmp0 += MULTIPLY(z1, - FIX_1_272758580); /* sqrt(2) * (-c1+c3-c5-c7) */ + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + tmp0 += MULTIPLY(z1, FIX_3_624509785); /* sqrt(2) * (c1+c3+c5+c7) */ + + /* Final output stage */ + + wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp0, CONST_BITS-PASS1_BITS+2); + wsptr[DCTSIZE*1] = (int) DESCALE(tmp10 - tmp0, CONST_BITS-PASS1_BITS+2); + } + + /* Pass 2: process 2 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 2; ctr++) { + outptr = output_buf[ctr] + output_col; + /* It's not clear whether a zero row test is worthwhile here ... */ + +#ifndef NO_ZERO_ROW_TEST + if (wsptr[1] == 0 && wsptr[3] == 0 && wsptr[5] == 0 && wsptr[7] == 0) { + /* AC terms all zero */ + JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) + & RANGE_MASK]; + + outptr[0] = dcval; + outptr[1] = dcval; + + wsptr += DCTSIZE; /* advance pointer to next row */ + continue; + } +#endif + + /* Even part */ + + tmp10 = ((INT32) wsptr[0]) << (CONST_BITS+2); + + /* Odd part */ + + tmp0 = MULTIPLY((INT32) wsptr[7], - FIX_0_720959822) /* sqrt(2) * (c7-c5+c3-c1) */ + + MULTIPLY((INT32) wsptr[5], FIX_0_850430095) /* sqrt(2) * (-c1+c3+c5+c7) */ + + MULTIPLY((INT32) wsptr[3], - FIX_1_272758580) /* sqrt(2) * (-c1+c3-c5-c7) */ + + MULTIPLY((INT32) wsptr[1], FIX_3_624509785); /* sqrt(2) * (c1+c3+c5+c7) */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3+2) + & RANGE_MASK]; + outptr[1] = range_limit[(int) DESCALE(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3+2) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 1x1 output block. + */ + +GLOBAL(void) +jpeg_idct_1x1 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + int dcval; + ISLOW_MULT_TYPE * quantptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + SHIFT_TEMPS + + /* We hardly need an inverse DCT routine for this: just take the + * average pixel value, which is one-eighth of the DC coefficient. + */ + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + dcval = DEQUANTIZE(coef_block[0], quantptr[0]); + dcval = (int) DESCALE((INT32) dcval, 3); + + output_buf[0][output_col] = range_limit[dcval & RANGE_MASK]; +} + +#endif /* IDCT_SCALING_SUPPORTED */ diff --git a/Build/source/extra/jpeg/jinclude.h b/Build/source/extra/jpeg/jinclude.h new file mode 100644 index 00000000000..0a4f15146ae --- /dev/null +++ b/Build/source/extra/jpeg/jinclude.h @@ -0,0 +1,91 @@ +/* + * jinclude.h + * + * Copyright (C) 1991-1994, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file exists to provide a single place to fix any problems with + * including the wrong system include files. (Common problems are taken + * care of by the standard jconfig symbols, but on really weird systems + * you may have to edit this file.) + * + * NOTE: this file is NOT intended to be included by applications using the + * JPEG library. Most applications need only include jpeglib.h. + */ + + +/* Include auto-config file to find out which system include files we need. */ + +#include "jconfig.h" /* auto configuration options */ +#define JCONFIG_INCLUDED /* so that jpeglib.h doesn't do it again */ + +/* + * We need the NULL macro and size_t typedef. + * On an ANSI-conforming system it is sufficient to include . + * Otherwise, we get them from or ; we may have to + * pull in as well. + * Note that the core JPEG library does not require ; + * only the default error handler and data source/destination modules do. + * But we must pull it in because of the references to FILE in jpeglib.h. + * You can remove those references if you want to compile without . + */ + +#ifdef HAVE_STDDEF_H +#include +#endif + +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef NEED_SYS_TYPES_H +#include +#endif + +#include + +/* + * We need memory copying and zeroing functions, plus strncpy(). + * ANSI and System V implementations declare these in . + * BSD doesn't have the mem() functions, but it does have bcopy()/bzero(). + * Some systems may declare memset and memcpy in . + * + * NOTE: we assume the size parameters to these functions are of type size_t. + * Change the casts in these macros if not! + */ + +#ifdef NEED_BSD_STRINGS + +#include +#define MEMZERO(target,size) bzero((void *)(target), (size_t)(size)) +#define MEMCOPY(dest,src,size) bcopy((const void *)(src), (void *)(dest), (size_t)(size)) + +#else /* not BSD, assume ANSI/SysV string lib */ + +#include +#define MEMZERO(target,size) memset((void *)(target), 0, (size_t)(size)) +#define MEMCOPY(dest,src,size) memcpy((void *)(dest), (const void *)(src), (size_t)(size)) + +#endif + +/* + * In ANSI C, and indeed any rational implementation, size_t is also the + * type returned by sizeof(). However, it seems there are some irrational + * implementations out there, in which sizeof() returns an int even though + * size_t is defined as long or unsigned long. To ensure consistent results + * we always use this SIZEOF() macro in place of using sizeof() directly. + */ + +#define SIZEOF(object) ((size_t) sizeof(object)) + +/* + * The modules that use fread() and fwrite() always invoke them through + * these macros. On some systems you may need to twiddle the argument casts. + * CAUTION: argument order is different from underlying functions! + */ + +#define JFREAD(file,buf,sizeofbuf) \ + ((size_t) fread((void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file))) +#define JFWRITE(file,buf,sizeofbuf) \ + ((size_t) fwrite((const void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file))) diff --git a/Build/source/extra/jpeg/jmemansi.c b/Build/source/extra/jpeg/jmemansi.c new file mode 100644 index 00000000000..2d93e496251 --- /dev/null +++ b/Build/source/extra/jpeg/jmemansi.c @@ -0,0 +1,167 @@ +/* + * jmemansi.c + * + * Copyright (C) 1992-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file provides a simple generic implementation of the system- + * dependent portion of the JPEG memory manager. This implementation + * assumes that you have the ANSI-standard library routine tmpfile(). + * Also, the problem of determining the amount of memory available + * is shoved onto the user. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef HAVE_STDLIB_H /* should declare malloc(),free() */ +extern void * malloc JPP((size_t size)); +extern void free JPP((void *ptr)); +#endif + +#ifndef SEEK_SET /* pre-ANSI systems may not define this; */ +#define SEEK_SET 0 /* if not, assume 0 is correct */ +#endif + + +/* + * Memory allocation and freeing are controlled by the regular library + * routines malloc() and free(). + */ + +GLOBAL(void *) +jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * "Large" objects are treated the same as "small" ones. + * NB: although we include FAR keywords in the routine declarations, + * this file won't actually work in 80x86 small/medium model; at least, + * you probably won't be able to process useful-size images in only 64KB. + */ + +GLOBAL(void FAR *) +jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void FAR *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * This routine computes the total memory space available for allocation. + * It's impossible to do this in a portable way; our current solution is + * to make the user tell us (with a default value set at compile time). + * If you can actually get the available space, it's a good idea to subtract + * a slop factor of 5% or so. + */ + +#ifndef DEFAULT_MAX_MEM /* so can override from makefile */ +#define DEFAULT_MAX_MEM 1000000L /* default: one megabyte */ +#endif + +GLOBAL(long) +jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, + long max_bytes_needed, long already_allocated) +{ + return cinfo->mem->max_memory_to_use - already_allocated; +} + + +/* + * Backing store (temporary file) management. + * Backing store objects are only used when the value returned by + * jpeg_mem_available is less than the total space needed. You can dispense + * with these routines if you have plenty of virtual memory; see jmemnobs.c. + */ + + +METHODDEF(void) +read_backing_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + if (fseek(info->temp_file, file_offset, SEEK_SET)) + ERREXIT(cinfo, JERR_TFILE_SEEK); + if (JFREAD(info->temp_file, buffer_address, byte_count) + != (size_t) byte_count) + ERREXIT(cinfo, JERR_TFILE_READ); +} + + +METHODDEF(void) +write_backing_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + if (fseek(info->temp_file, file_offset, SEEK_SET)) + ERREXIT(cinfo, JERR_TFILE_SEEK); + if (JFWRITE(info->temp_file, buffer_address, byte_count) + != (size_t) byte_count) + ERREXIT(cinfo, JERR_TFILE_WRITE); +} + + +METHODDEF(void) +close_backing_store (j_common_ptr cinfo, backing_store_ptr info) +{ + fclose(info->temp_file); + /* Since this implementation uses tmpfile() to create the file, + * no explicit file deletion is needed. + */ +} + + +/* + * Initial opening of a backing-store object. + * + * This version uses tmpfile(), which constructs a suitable file name + * behind the scenes. We don't have to use info->temp_name[] at all; + * indeed, we can't even find out the actual name of the temp file. + */ + +GLOBAL(void) +jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + if ((info->temp_file = tmpfile()) == NULL) + ERREXITS(cinfo, JERR_TFILE_CREATE, ""); + info->read_backing_store = read_backing_store; + info->write_backing_store = write_backing_store; + info->close_backing_store = close_backing_store; +} + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. + */ + +GLOBAL(long) +jpeg_mem_init (j_common_ptr cinfo) +{ + return DEFAULT_MAX_MEM; /* default for max_memory_to_use */ +} + +GLOBAL(void) +jpeg_mem_term (j_common_ptr cinfo) +{ + /* no work */ +} diff --git a/Build/source/extra/jpeg/jmemdos.c b/Build/source/extra/jpeg/jmemdos.c new file mode 100644 index 00000000000..60b45c69388 --- /dev/null +++ b/Build/source/extra/jpeg/jmemdos.c @@ -0,0 +1,638 @@ +/* + * jmemdos.c + * + * Copyright (C) 1992-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file provides an MS-DOS-compatible implementation of the system- + * dependent portion of the JPEG memory manager. Temporary data can be + * stored in extended or expanded memory as well as in regular DOS files. + * + * If you use this file, you must be sure that NEED_FAR_POINTERS is defined + * if you compile in a small-data memory model; it should NOT be defined if + * you use a large-data memory model. This file is not recommended if you + * are using a flat-memory-space 386 environment such as DJGCC or Watcom C. + * Also, this code will NOT work if struct fields are aligned on greater than + * 2-byte boundaries. + * + * Based on code contributed by Ge' Weijers. + */ + +/* + * If you have both extended and expanded memory, you may want to change the + * order in which they are tried in jopen_backing_store. On a 286 machine + * expanded memory is usually faster, since extended memory access involves + * an expensive protected-mode-and-back switch. On 386 and better, extended + * memory is usually faster. As distributed, the code tries extended memory + * first (what? not everyone has a 386? :-). + * + * You can disable use of extended/expanded memory entirely by altering these + * definitions or overriding them from the Makefile (eg, -DEMS_SUPPORTED=0). + */ + +#ifndef XMS_SUPPORTED +#define XMS_SUPPORTED 1 +#endif +#ifndef EMS_SUPPORTED +#define EMS_SUPPORTED 1 +#endif + + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef HAVE_STDLIB_H /* should declare these */ +extern void * malloc JPP((size_t size)); +extern void free JPP((void *ptr)); +extern char * getenv JPP((const char * name)); +#endif + +#ifdef NEED_FAR_POINTERS + +#ifdef __TURBOC__ +/* These definitions work for Borland C (Turbo C) */ +#include /* need farmalloc(), farfree() */ +#define far_malloc(x) farmalloc(x) +#define far_free(x) farfree(x) +#else +/* These definitions work for Microsoft C and compatible compilers */ +#include /* need _fmalloc(), _ffree() */ +#define far_malloc(x) _fmalloc(x) +#define far_free(x) _ffree(x) +#endif + +#else /* not NEED_FAR_POINTERS */ + +#define far_malloc(x) malloc(x) +#define far_free(x) free(x) + +#endif /* NEED_FAR_POINTERS */ + +#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ +#define READ_BINARY "r" +#else +#define READ_BINARY "rb" +#endif + +#ifndef USE_MSDOS_MEMMGR /* make sure user got configuration right */ + You forgot to define USE_MSDOS_MEMMGR in jconfig.h. /* deliberate syntax error */ +#endif + +#if MAX_ALLOC_CHUNK >= 65535L /* make sure jconfig.h got this right */ + MAX_ALLOC_CHUNK should be less than 64K. /* deliberate syntax error */ +#endif + + +/* + * Declarations for assembly-language support routines (see jmemdosa.asm). + * + * The functions are declared "far" as are all their pointer arguments; + * this ensures the assembly source code will work regardless of the + * compiler memory model. We assume "short" is 16 bits, "long" is 32. + */ + +typedef void far * XMSDRIVER; /* actually a pointer to code */ +typedef struct { /* registers for calling XMS driver */ + unsigned short ax, dx, bx; + void far * ds_si; + } XMScontext; +typedef struct { /* registers for calling EMS driver */ + unsigned short ax, dx, bx; + void far * ds_si; + } EMScontext; + +extern short far jdos_open JPP((short far * handle, char far * filename)); +extern short far jdos_close JPP((short handle)); +extern short far jdos_seek JPP((short handle, long offset)); +extern short far jdos_read JPP((short handle, void far * buffer, + unsigned short count)); +extern short far jdos_write JPP((short handle, void far * buffer, + unsigned short count)); +extern void far jxms_getdriver JPP((XMSDRIVER far *)); +extern void far jxms_calldriver JPP((XMSDRIVER, XMScontext far *)); +extern short far jems_available JPP((void)); +extern void far jems_calldriver JPP((EMScontext far *)); + + +/* + * Selection of a file name for a temporary file. + * This is highly system-dependent, and you may want to customize it. + */ + +static int next_file_num; /* to distinguish among several temp files */ + +LOCAL(void) +select_file_name (char * fname) +{ + const char * env; + char * ptr; + FILE * tfile; + + /* Keep generating file names till we find one that's not in use */ + for (;;) { + /* Get temp directory name from environment TMP or TEMP variable; + * if none, use "." + */ + if ((env = (const char *) getenv("TMP")) == NULL) + if ((env = (const char *) getenv("TEMP")) == NULL) + env = "."; + if (*env == '\0') /* null string means "." */ + env = "."; + ptr = fname; /* copy name to fname */ + while (*env != '\0') + *ptr++ = *env++; + if (ptr[-1] != '\\' && ptr[-1] != '/') + *ptr++ = '\\'; /* append backslash if not in env variable */ + /* Append a suitable file name */ + next_file_num++; /* advance counter */ + sprintf(ptr, "JPG%03d.TMP", next_file_num); + /* Probe to see if file name is already in use */ + if ((tfile = fopen(fname, READ_BINARY)) == NULL) + break; + fclose(tfile); /* oops, it's there; close tfile & try again */ + } +} + + +/* + * Near-memory allocation and freeing are controlled by the regular library + * routines malloc() and free(). + */ + +GLOBAL(void *) +jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * "Large" objects are allocated in far memory, if possible + */ + +GLOBAL(void FAR *) +jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void FAR *) far_malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) +{ + far_free(object); +} + + +/* + * This routine computes the total memory space available for allocation. + * It's impossible to do this in a portable way; our current solution is + * to make the user tell us (with a default value set at compile time). + * If you can actually get the available space, it's a good idea to subtract + * a slop factor of 5% or so. + */ + +#ifndef DEFAULT_MAX_MEM /* so can override from makefile */ +#define DEFAULT_MAX_MEM 300000L /* for total usage about 450K */ +#endif + +GLOBAL(long) +jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, + long max_bytes_needed, long already_allocated) +{ + return cinfo->mem->max_memory_to_use - already_allocated; +} + + +/* + * Backing store (temporary file) management. + * Backing store objects are only used when the value returned by + * jpeg_mem_available is less than the total space needed. You can dispense + * with these routines if you have plenty of virtual memory; see jmemnobs.c. + */ + +/* + * For MS-DOS we support three types of backing storage: + * 1. Conventional DOS files. We access these by direct DOS calls rather + * than via the stdio package. This provides a bit better performance, + * but the real reason is that the buffers to be read or written are FAR. + * The stdio library for small-data memory models can't cope with that. + * 2. Extended memory, accessed per the XMS V2.0 specification. + * 3. Expanded memory, accessed per the LIM/EMS 4.0 specification. + * You'll need copies of those specs to make sense of the related code. + * The specs are available by Internet FTP from the SIMTEL archives + * (oak.oakland.edu and its various mirror sites). See files + * pub/msdos/microsoft/xms20.arc and pub/msdos/info/limems41.zip. + */ + + +/* + * Access methods for a DOS file. + */ + + +METHODDEF(void) +read_file_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + if (jdos_seek(info->handle.file_handle, file_offset)) + ERREXIT(cinfo, JERR_TFILE_SEEK); + /* Since MAX_ALLOC_CHUNK is less than 64K, byte_count will be too. */ + if (byte_count > 65535L) /* safety check */ + ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); + if (jdos_read(info->handle.file_handle, buffer_address, + (unsigned short) byte_count)) + ERREXIT(cinfo, JERR_TFILE_READ); +} + + +METHODDEF(void) +write_file_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + if (jdos_seek(info->handle.file_handle, file_offset)) + ERREXIT(cinfo, JERR_TFILE_SEEK); + /* Since MAX_ALLOC_CHUNK is less than 64K, byte_count will be too. */ + if (byte_count > 65535L) /* safety check */ + ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); + if (jdos_write(info->handle.file_handle, buffer_address, + (unsigned short) byte_count)) + ERREXIT(cinfo, JERR_TFILE_WRITE); +} + + +METHODDEF(void) +close_file_store (j_common_ptr cinfo, backing_store_ptr info) +{ + jdos_close(info->handle.file_handle); /* close the file */ + remove(info->temp_name); /* delete the file */ +/* If your system doesn't have remove(), try unlink() instead. + * remove() is the ANSI-standard name for this function, but + * unlink() was more common in pre-ANSI systems. + */ + TRACEMSS(cinfo, 1, JTRC_TFILE_CLOSE, info->temp_name); +} + + +LOCAL(boolean) +open_file_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + short handle; + + select_file_name(info->temp_name); + if (jdos_open((short far *) & handle, (char far *) info->temp_name)) { + /* might as well exit since jpeg_open_backing_store will fail anyway */ + ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); + return FALSE; + } + info->handle.file_handle = handle; + info->read_backing_store = read_file_store; + info->write_backing_store = write_file_store; + info->close_backing_store = close_file_store; + TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name); + return TRUE; /* succeeded */ +} + + +/* + * Access methods for extended memory. + */ + +#if XMS_SUPPORTED + +static XMSDRIVER xms_driver; /* saved address of XMS driver */ + +typedef union { /* either long offset or real-mode pointer */ + long offset; + void far * ptr; + } XMSPTR; + +typedef struct { /* XMS move specification structure */ + long length; + XMSH src_handle; + XMSPTR src; + XMSH dst_handle; + XMSPTR dst; + } XMSspec; + +#define ODD(X) (((X) & 1L) != 0) + + +METHODDEF(void) +read_xms_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + XMScontext ctx; + XMSspec spec; + char endbuffer[2]; + + /* The XMS driver can't cope with an odd length, so handle the last byte + * specially if byte_count is odd. We don't expect this to be common. + */ + + spec.length = byte_count & (~ 1L); + spec.src_handle = info->handle.xms_handle; + spec.src.offset = file_offset; + spec.dst_handle = 0; + spec.dst.ptr = buffer_address; + + ctx.ds_si = (void far *) & spec; + ctx.ax = 0x0b00; /* EMB move */ + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + if (ctx.ax != 1) + ERREXIT(cinfo, JERR_XMS_READ); + + if (ODD(byte_count)) { + read_xms_store(cinfo, info, (void FAR *) endbuffer, + file_offset + byte_count - 1L, 2L); + ((char FAR *) buffer_address)[byte_count - 1L] = endbuffer[0]; + } +} + + +METHODDEF(void) +write_xms_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + XMScontext ctx; + XMSspec spec; + char endbuffer[2]; + + /* The XMS driver can't cope with an odd length, so handle the last byte + * specially if byte_count is odd. We don't expect this to be common. + */ + + spec.length = byte_count & (~ 1L); + spec.src_handle = 0; + spec.src.ptr = buffer_address; + spec.dst_handle = info->handle.xms_handle; + spec.dst.offset = file_offset; + + ctx.ds_si = (void far *) & spec; + ctx.ax = 0x0b00; /* EMB move */ + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + if (ctx.ax != 1) + ERREXIT(cinfo, JERR_XMS_WRITE); + + if (ODD(byte_count)) { + read_xms_store(cinfo, info, (void FAR *) endbuffer, + file_offset + byte_count - 1L, 2L); + endbuffer[0] = ((char FAR *) buffer_address)[byte_count - 1L]; + write_xms_store(cinfo, info, (void FAR *) endbuffer, + file_offset + byte_count - 1L, 2L); + } +} + + +METHODDEF(void) +close_xms_store (j_common_ptr cinfo, backing_store_ptr info) +{ + XMScontext ctx; + + ctx.dx = info->handle.xms_handle; + ctx.ax = 0x0a00; + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + TRACEMS1(cinfo, 1, JTRC_XMS_CLOSE, info->handle.xms_handle); + /* we ignore any error return from the driver */ +} + + +LOCAL(boolean) +open_xms_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + XMScontext ctx; + + /* Get address of XMS driver */ + jxms_getdriver((XMSDRIVER far *) & xms_driver); + if (xms_driver == NULL) + return FALSE; /* no driver to be had */ + + /* Get version number, must be >= 2.00 */ + ctx.ax = 0x0000; + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + if (ctx.ax < (unsigned short) 0x0200) + return FALSE; + + /* Try to get space (expressed in kilobytes) */ + ctx.dx = (unsigned short) ((total_bytes_needed + 1023L) >> 10); + ctx.ax = 0x0900; + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + if (ctx.ax != 1) + return FALSE; + + /* Succeeded, save the handle and away we go */ + info->handle.xms_handle = ctx.dx; + info->read_backing_store = read_xms_store; + info->write_backing_store = write_xms_store; + info->close_backing_store = close_xms_store; + TRACEMS1(cinfo, 1, JTRC_XMS_OPEN, ctx.dx); + return TRUE; /* succeeded */ +} + +#endif /* XMS_SUPPORTED */ + + +/* + * Access methods for expanded memory. + */ + +#if EMS_SUPPORTED + +/* The EMS move specification structure requires word and long fields aligned + * at odd byte boundaries. Some compilers will align struct fields at even + * byte boundaries. While it's usually possible to force byte alignment, + * that causes an overall performance penalty and may pose problems in merging + * JPEG into a larger application. Instead we accept some rather dirty code + * here. Note this code would fail if the hardware did not allow odd-byte + * word & long accesses, but all 80x86 CPUs do. + */ + +typedef void far * EMSPTR; + +typedef union { /* EMS move specification structure */ + long length; /* It's easy to access first 4 bytes */ + char bytes[18]; /* Misaligned fields in here! */ + } EMSspec; + +/* Macros for accessing misaligned fields */ +#define FIELD_AT(spec,offset,type) (*((type *) &(spec.bytes[offset]))) +#define SRC_TYPE(spec) FIELD_AT(spec,4,char) +#define SRC_HANDLE(spec) FIELD_AT(spec,5,EMSH) +#define SRC_OFFSET(spec) FIELD_AT(spec,7,unsigned short) +#define SRC_PAGE(spec) FIELD_AT(spec,9,unsigned short) +#define SRC_PTR(spec) FIELD_AT(spec,7,EMSPTR) +#define DST_TYPE(spec) FIELD_AT(spec,11,char) +#define DST_HANDLE(spec) FIELD_AT(spec,12,EMSH) +#define DST_OFFSET(spec) FIELD_AT(spec,14,unsigned short) +#define DST_PAGE(spec) FIELD_AT(spec,16,unsigned short) +#define DST_PTR(spec) FIELD_AT(spec,14,EMSPTR) + +#define EMSPAGESIZE 16384L /* gospel, see the EMS specs */ + +#define HIBYTE(W) (((W) >> 8) & 0xFF) +#define LOBYTE(W) ((W) & 0xFF) + + +METHODDEF(void) +read_ems_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + EMScontext ctx; + EMSspec spec; + + spec.length = byte_count; + SRC_TYPE(spec) = 1; + SRC_HANDLE(spec) = info->handle.ems_handle; + SRC_PAGE(spec) = (unsigned short) (file_offset / EMSPAGESIZE); + SRC_OFFSET(spec) = (unsigned short) (file_offset % EMSPAGESIZE); + DST_TYPE(spec) = 0; + DST_HANDLE(spec) = 0; + DST_PTR(spec) = buffer_address; + + ctx.ds_si = (void far *) & spec; + ctx.ax = 0x5700; /* move memory region */ + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0) + ERREXIT(cinfo, JERR_EMS_READ); +} + + +METHODDEF(void) +write_ems_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + EMScontext ctx; + EMSspec spec; + + spec.length = byte_count; + SRC_TYPE(spec) = 0; + SRC_HANDLE(spec) = 0; + SRC_PTR(spec) = buffer_address; + DST_TYPE(spec) = 1; + DST_HANDLE(spec) = info->handle.ems_handle; + DST_PAGE(spec) = (unsigned short) (file_offset / EMSPAGESIZE); + DST_OFFSET(spec) = (unsigned short) (file_offset % EMSPAGESIZE); + + ctx.ds_si = (void far *) & spec; + ctx.ax = 0x5700; /* move memory region */ + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0) + ERREXIT(cinfo, JERR_EMS_WRITE); +} + + +METHODDEF(void) +close_ems_store (j_common_ptr cinfo, backing_store_ptr info) +{ + EMScontext ctx; + + ctx.ax = 0x4500; + ctx.dx = info->handle.ems_handle; + jems_calldriver((EMScontext far *) & ctx); + TRACEMS1(cinfo, 1, JTRC_EMS_CLOSE, info->handle.ems_handle); + /* we ignore any error return from the driver */ +} + + +LOCAL(boolean) +open_ems_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + EMScontext ctx; + + /* Is EMS driver there? */ + if (! jems_available()) + return FALSE; + + /* Get status, make sure EMS is OK */ + ctx.ax = 0x4000; + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0) + return FALSE; + + /* Get version, must be >= 4.0 */ + ctx.ax = 0x4600; + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0 || LOBYTE(ctx.ax) < 0x40) + return FALSE; + + /* Try to allocate requested space */ + ctx.ax = 0x4300; + ctx.bx = (unsigned short) ((total_bytes_needed + EMSPAGESIZE-1L) / EMSPAGESIZE); + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0) + return FALSE; + + /* Succeeded, save the handle and away we go */ + info->handle.ems_handle = ctx.dx; + info->read_backing_store = read_ems_store; + info->write_backing_store = write_ems_store; + info->close_backing_store = close_ems_store; + TRACEMS1(cinfo, 1, JTRC_EMS_OPEN, ctx.dx); + return TRUE; /* succeeded */ +} + +#endif /* EMS_SUPPORTED */ + + +/* + * Initial opening of a backing-store object. + */ + +GLOBAL(void) +jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + /* Try extended memory, then expanded memory, then regular file. */ +#if XMS_SUPPORTED + if (open_xms_store(cinfo, info, total_bytes_needed)) + return; +#endif +#if EMS_SUPPORTED + if (open_ems_store(cinfo, info, total_bytes_needed)) + return; +#endif + if (open_file_store(cinfo, info, total_bytes_needed)) + return; + ERREXITS(cinfo, JERR_TFILE_CREATE, ""); +} + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. + */ + +GLOBAL(long) +jpeg_mem_init (j_common_ptr cinfo) +{ + next_file_num = 0; /* initialize temp file name generator */ + return DEFAULT_MAX_MEM; /* default for max_memory_to_use */ +} + +GLOBAL(void) +jpeg_mem_term (j_common_ptr cinfo) +{ + /* Microsoft C, at least in v6.00A, will not successfully reclaim freed + * blocks of size > 32Kbytes unless we give it a kick in the rear, like so: + */ +#ifdef NEED_FHEAPMIN + _fheapmin(); +#endif +} diff --git a/Build/source/extra/jpeg/jmemdosa.asm b/Build/source/extra/jpeg/jmemdosa.asm new file mode 100644 index 00000000000..ecd43729fe5 --- /dev/null +++ b/Build/source/extra/jpeg/jmemdosa.asm @@ -0,0 +1,379 @@ +; +; jmemdosa.asm +; +; Copyright (C) 1992, Thomas G. Lane. +; This file is part of the Independent JPEG Group's software. +; For conditions of distribution and use, see the accompanying README file. +; +; This file contains low-level interface routines to support the MS-DOS +; backing store manager (jmemdos.c). Routines are provided to access disk +; files through direct DOS calls, and to access XMS and EMS drivers. +; +; This file should assemble with Microsoft's MASM or any compatible +; assembler (including Borland's Turbo Assembler). If you haven't got +; a compatible assembler, better fall back to jmemansi.c or jmemname.c. +; +; To minimize dependence on the C compiler's register usage conventions, +; we save and restore all 8086 registers, even though most compilers only +; require SI,DI,DS to be preserved. Also, we use only 16-bit-wide return +; values, which everybody returns in AX. +; +; Based on code contributed by Ge' Weijers. +; + +JMEMDOSA_TXT segment byte public 'CODE' + + assume cs:JMEMDOSA_TXT + + public _jdos_open + public _jdos_close + public _jdos_seek + public _jdos_read + public _jdos_write + public _jxms_getdriver + public _jxms_calldriver + public _jems_available + public _jems_calldriver + +; +; short far jdos_open (short far * handle, char far * filename) +; +; Create and open a temporary file +; +_jdos_open proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + mov cx,0 ; normal file attributes + lds dx,dword ptr [bp+10] ; get filename pointer + mov ah,3ch ; create file + int 21h + jc open_err ; if failed, return error code + lds bx,dword ptr [bp+6] ; get handle pointer + mov word ptr [bx],ax ; save the handle + xor ax,ax ; return zero for OK +open_err: pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jdos_open endp + + +; +; short far jdos_close (short handle) +; +; Close the file handle +; +_jdos_close proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + mov bx,word ptr [bp+6] ; file handle + mov ah,3eh ; close file + int 21h + jc close_err ; if failed, return error code + xor ax,ax ; return zero for OK +close_err: pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jdos_close endp + + +; +; short far jdos_seek (short handle, long offset) +; +; Set file position +; +_jdos_seek proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + mov bx,word ptr [bp+6] ; file handle + mov dx,word ptr [bp+8] ; LS offset + mov cx,word ptr [bp+10] ; MS offset + mov ax,4200h ; absolute seek + int 21h + jc seek_err ; if failed, return error code + xor ax,ax ; return zero for OK +seek_err: pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jdos_seek endp + + +; +; short far jdos_read (short handle, void far * buffer, unsigned short count) +; +; Read from file +; +_jdos_read proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + mov bx,word ptr [bp+6] ; file handle + lds dx,dword ptr [bp+8] ; buffer address + mov cx,word ptr [bp+12] ; number of bytes + mov ah,3fh ; read file + int 21h + jc read_err ; if failed, return error code + cmp ax,word ptr [bp+12] ; make sure all bytes were read + je read_ok + mov ax,1 ; else return 1 for not OK + jmp short read_err +read_ok: xor ax,ax ; return zero for OK +read_err: pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jdos_read endp + + +; +; short far jdos_write (short handle, void far * buffer, unsigned short count) +; +; Write to file +; +_jdos_write proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + mov bx,word ptr [bp+6] ; file handle + lds dx,dword ptr [bp+8] ; buffer address + mov cx,word ptr [bp+12] ; number of bytes + mov ah,40h ; write file + int 21h + jc write_err ; if failed, return error code + cmp ax,word ptr [bp+12] ; make sure all bytes written + je write_ok + mov ax,1 ; else return 1 for not OK + jmp short write_err +write_ok: xor ax,ax ; return zero for OK +write_err: pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jdos_write endp + + +; +; void far jxms_getdriver (XMSDRIVER far *) +; +; Get the address of the XMS driver, or NULL if not available +; +_jxms_getdriver proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + mov ax,4300h ; call multiplex interrupt with + int 2fh ; a magic cookie, hex 4300 + cmp al,80h ; AL should contain hex 80 + je xmsavail + xor dx,dx ; no XMS driver available + xor ax,ax ; return a nil pointer + jmp short xmsavail_done +xmsavail: mov ax,4310h ; fetch driver address with + int 2fh ; another magic cookie + mov dx,es ; copy address to dx:ax + mov ax,bx +xmsavail_done: les bx,dword ptr [bp+6] ; get pointer to return value + mov word ptr es:[bx],ax + mov word ptr es:[bx+2],dx + pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jxms_getdriver endp + + +; +; void far jxms_calldriver (XMSDRIVER, XMScontext far *) +; +; The XMScontext structure contains values for the AX,DX,BX,SI,DS registers. +; These are loaded, the XMS call is performed, and the new values of the +; AX,DX,BX registers are written back to the context structure. +; +_jxms_calldriver proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + les bx,dword ptr [bp+10] ; get XMScontext pointer + mov ax,word ptr es:[bx] ; load registers + mov dx,word ptr es:[bx+2] + mov si,word ptr es:[bx+6] + mov ds,word ptr es:[bx+8] + mov bx,word ptr es:[bx+4] + call dword ptr [bp+6] ; call the driver + mov cx,bx ; save returned BX for a sec + les bx,dword ptr [bp+10] ; get XMScontext pointer + mov word ptr es:[bx],ax ; put back ax,dx,bx + mov word ptr es:[bx+2],dx + mov word ptr es:[bx+4],cx + pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jxms_calldriver endp + + +; +; short far jems_available (void) +; +; Have we got an EMS driver? (this comes straight from the EMS 4.0 specs) +; +_jems_available proc far + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + mov ax,3567h ; get interrupt vector 67h + int 21h + push cs + pop ds + mov di,000ah ; check offs 10 in returned seg + lea si,ASCII_device_name ; against literal string + mov cx,8 + cld + repe cmpsb + jne no_ems + mov ax,1 ; match, it's there + jmp short avail_done +no_ems: xor ax,ax ; it's not there +avail_done: pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + ret + +ASCII_device_name db "EMMXXXX0" + +_jems_available endp + + +; +; void far jems_calldriver (EMScontext far *) +; +; The EMScontext structure contains values for the AX,DX,BX,SI,DS registers. +; These are loaded, the EMS trap is performed, and the new values of the +; AX,DX,BX registers are written back to the context structure. +; +_jems_calldriver proc far + push bp ; linkage + mov bp,sp + push si ; save all registers for safety + push di + push bx + push cx + push dx + push es + push ds + les bx,dword ptr [bp+6] ; get EMScontext pointer + mov ax,word ptr es:[bx] ; load registers + mov dx,word ptr es:[bx+2] + mov si,word ptr es:[bx+6] + mov ds,word ptr es:[bx+8] + mov bx,word ptr es:[bx+4] + int 67h ; call the EMS driver + mov cx,bx ; save returned BX for a sec + les bx,dword ptr [bp+6] ; get EMScontext pointer + mov word ptr es:[bx],ax ; put back ax,dx,bx + mov word ptr es:[bx+2],dx + mov word ptr es:[bx+4],cx + pop ds ; restore registers and exit + pop es + pop dx + pop cx + pop bx + pop di + pop si + pop bp + ret +_jems_calldriver endp + +JMEMDOSA_TXT ends + + end diff --git a/Build/source/extra/jpeg/jmemmac.c b/Build/source/extra/jpeg/jmemmac.c new file mode 100644 index 00000000000..106f9bea05d --- /dev/null +++ b/Build/source/extra/jpeg/jmemmac.c @@ -0,0 +1,289 @@ +/* + * jmemmac.c + * + * Copyright (C) 1992-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * jmemmac.c provides an Apple Macintosh implementation of the system- + * dependent portion of the JPEG memory manager. + * + * If you use jmemmac.c, then you must define USE_MAC_MEMMGR in the + * JPEG_INTERNALS part of jconfig.h. + * + * jmemmac.c uses the Macintosh toolbox routines NewPtr and DisposePtr + * instead of malloc and free. It accurately determines the amount of + * memory available by using CompactMem. Notice that if left to its + * own devices, this code can chew up all available space in the + * application's zone, with the exception of the rather small "slop" + * factor computed in jpeg_mem_available(). The application can ensure + * that more space is left over by reducing max_memory_to_use. + * + * Large images are swapped to disk using temporary files and System 7.0+'s + * temporary folder functionality. + * + * Note that jmemmac.c depends on two features of MacOS that were first + * introduced in System 7: FindFolder and the FSSpec-based calls. + * If your application uses jmemmac.c and is run under System 6 or earlier, + * and the jpeg library decides it needs a temporary file, it will abort, + * printing error messages about requiring System 7. (If no temporary files + * are created, it will run fine.) + * + * If you want to use jmemmac.c in an application that might be used with + * System 6 or earlier, then you should remove dependencies on FindFolder + * and the FSSpec calls. You will need to replace FindFolder with some + * other mechanism for finding a place to put temporary files, and you + * should replace the FSSpec calls with their HFS equivalents: + * + * FSpDelete -> HDelete + * FSpGetFInfo -> HGetFInfo + * FSpCreate -> HCreate + * FSpOpenDF -> HOpen *** Note: not HOpenDF *** + * FSMakeFSSpec -> (fill in spec by hand.) + * + * (Use HOpen instead of HOpenDF. HOpen is just a glue-interface to PBHOpen, + * which is on all HFS macs. HOpenDF is a System 7 addition which avoids the + * ages-old problem of names starting with a period.) + * + * Contributed by Sam Bushell (jsam@iagu.on.net) and + * Dan Gildor (gyld@in-touch.com). + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef USE_MAC_MEMMGR /* make sure user got configuration right */ + You forgot to define USE_MAC_MEMMGR in jconfig.h. /* deliberate syntax error */ +#endif + +#include /* we use the MacOS memory manager */ +#include /* we use the MacOS File stuff */ +#include /* we use the MacOS HFS stuff */ +#include /* for smSystemScript */ +#include /* we use Gestalt to test for specific functionality */ + +#ifndef TEMP_FILE_NAME /* can override from jconfig.h or Makefile */ +#define TEMP_FILE_NAME "JPG%03d.TMP" +#endif + +static int next_file_num; /* to distinguish among several temp files */ + + +/* + * Memory allocation and freeing are controlled by the MacOS library + * routines NewPtr() and DisposePtr(), which allocate fixed-address + * storage. Unfortunately, the IJG library isn't smart enough to cope + * with relocatable storage. + */ + +GLOBAL(void *) +jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void *) NewPtr(sizeofobject); +} + +GLOBAL(void) +jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) +{ + DisposePtr((Ptr) object); +} + + +/* + * "Large" objects are treated the same as "small" ones. + * NB: we include FAR keywords in the routine declarations simply for + * consistency with the rest of the IJG code; FAR should expand to empty + * on rational architectures like the Mac. + */ + +GLOBAL(void FAR *) +jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void FAR *) NewPtr(sizeofobject); +} + +GLOBAL(void) +jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) +{ + DisposePtr((Ptr) object); +} + + +/* + * This routine computes the total memory space available for allocation. + */ + +GLOBAL(long) +jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, + long max_bytes_needed, long already_allocated) +{ + long limit = cinfo->mem->max_memory_to_use - already_allocated; + long slop, mem; + + /* Don't ask for more than what application has told us we may use */ + if (max_bytes_needed > limit && limit > 0) + max_bytes_needed = limit; + /* Find whether there's a big enough free block in the heap. + * CompactMem tries to create a contiguous block of the requested size, + * and then returns the size of the largest free block (which could be + * much more or much less than we asked for). + * We add some slop to ensure we don't use up all available memory. + */ + slop = max_bytes_needed / 16 + 32768L; + mem = CompactMem(max_bytes_needed + slop) - slop; + if (mem < 0) + mem = 0; /* sigh, couldn't even get the slop */ + /* Don't take more than the application says we can have */ + if (mem > limit && limit > 0) + mem = limit; + return mem; +} + + +/* + * Backing store (temporary file) management. + * Backing store objects are only used when the value returned by + * jpeg_mem_available is less than the total space needed. You can dispense + * with these routines if you have plenty of virtual memory; see jmemnobs.c. + */ + + +METHODDEF(void) +read_backing_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + long bytes = byte_count; + long retVal; + + if ( SetFPos ( info->temp_file, fsFromStart, file_offset ) != noErr ) + ERREXIT(cinfo, JERR_TFILE_SEEK); + + retVal = FSRead ( info->temp_file, &bytes, + (unsigned char *) buffer_address ); + if ( retVal != noErr || bytes != byte_count ) + ERREXIT(cinfo, JERR_TFILE_READ); +} + + +METHODDEF(void) +write_backing_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + long bytes = byte_count; + long retVal; + + if ( SetFPos ( info->temp_file, fsFromStart, file_offset ) != noErr ) + ERREXIT(cinfo, JERR_TFILE_SEEK); + + retVal = FSWrite ( info->temp_file, &bytes, + (unsigned char *) buffer_address ); + if ( retVal != noErr || bytes != byte_count ) + ERREXIT(cinfo, JERR_TFILE_WRITE); +} + + +METHODDEF(void) +close_backing_store (j_common_ptr cinfo, backing_store_ptr info) +{ + FSClose ( info->temp_file ); + FSpDelete ( &(info->tempSpec) ); +} + + +/* + * Initial opening of a backing-store object. + * + * This version uses FindFolder to find the Temporary Items folder, + * and puts the temporary file in there. + */ + +GLOBAL(void) +jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + short tmpRef, vRefNum; + long dirID; + FInfo finderInfo; + FSSpec theSpec; + Str255 fName; + OSErr osErr; + long gestaltResponse = 0; + + /* Check that FSSpec calls are available. */ + osErr = Gestalt( gestaltFSAttr, &gestaltResponse ); + if ( ( osErr != noErr ) + || !( gestaltResponse & (1<temp_name, TEMP_FILE_NAME, next_file_num); + strcpy ( (Ptr)fName+1, info->temp_name ); + *fName = strlen (info->temp_name); + osErr = FSMakeFSSpec ( vRefNum, dirID, fName, &theSpec ); + + if ( (osErr = FSpGetFInfo ( &theSpec, &finderInfo ) ) != noErr ) + break; + } + + osErr = FSpCreate ( &theSpec, '????', '????', smSystemScript ); + if ( osErr != noErr ) + ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); + + osErr = FSpOpenDF ( &theSpec, fsRdWrPerm, &(info->temp_file) ); + if ( osErr != noErr ) + ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); + + info->tempSpec = theSpec; + + info->read_backing_store = read_backing_store; + info->write_backing_store = write_backing_store; + info->close_backing_store = close_backing_store; + TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name); +} + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. + */ + +GLOBAL(long) +jpeg_mem_init (j_common_ptr cinfo) +{ + next_file_num = 0; + + /* max_memory_to_use will be initialized to FreeMem()'s result; + * the calling application might later reduce it, for example + * to leave room to invoke multiple JPEG objects. + * Note that FreeMem returns the total number of free bytes; + * it may not be possible to allocate a single block of this size. + */ + return FreeMem(); +} + +GLOBAL(void) +jpeg_mem_term (j_common_ptr cinfo) +{ + /* no work */ +} diff --git a/Build/source/extra/jpeg/jmemmgr.c b/Build/source/extra/jpeg/jmemmgr.c new file mode 100644 index 00000000000..d801b322da0 --- /dev/null +++ b/Build/source/extra/jpeg/jmemmgr.c @@ -0,0 +1,1118 @@ +/* + * jmemmgr.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains the JPEG system-independent memory management + * routines. This code is usable across a wide variety of machines; most + * of the system dependencies have been isolated in a separate file. + * The major functions provided here are: + * * pool-based allocation and freeing of memory; + * * policy decisions about how to divide available memory among the + * virtual arrays; + * * control logic for swapping virtual arrays between main memory and + * backing storage. + * The separate system-dependent file provides the actual backing-storage + * access code, and it contains the policy decision about how much total + * main memory to use. + * This file is system-dependent in the sense that some of its functions + * are unnecessary in some systems. For example, if there is enough virtual + * memory so that backing storage will never be used, much of the virtual + * array control logic could be removed. (Of course, if you have that much + * memory then you shouldn't care about a little bit of unused code...) + */ + +#define JPEG_INTERNALS +#define AM_MEMORY_MANAGER /* we define jvirt_Xarray_control structs */ +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef NO_GETENV +#ifndef HAVE_STDLIB_H /* should declare getenv() */ +extern char * getenv JPP((const char * name)); +#endif +#endif + + +/* + * Some important notes: + * The allocation routines provided here must never return NULL. + * They should exit to error_exit if unsuccessful. + * + * It's not a good idea to try to merge the sarray and barray routines, + * even though they are textually almost the same, because samples are + * usually stored as bytes while coefficients are shorts or ints. Thus, + * in machines where byte pointers have a different representation from + * word pointers, the resulting machine code could not be the same. + */ + + +/* + * Many machines require storage alignment: longs must start on 4-byte + * boundaries, doubles on 8-byte boundaries, etc. On such machines, malloc() + * always returns pointers that are multiples of the worst-case alignment + * requirement, and we had better do so too. + * There isn't any really portable way to determine the worst-case alignment + * requirement. This module assumes that the alignment requirement is + * multiples of sizeof(ALIGN_TYPE). + * By default, we define ALIGN_TYPE as double. This is necessary on some + * workstations (where doubles really do need 8-byte alignment) and will work + * fine on nearly everything. If your machine has lesser alignment needs, + * you can save a few bytes by making ALIGN_TYPE smaller. + * The only place I know of where this will NOT work is certain Macintosh + * 680x0 compilers that define double as a 10-byte IEEE extended float. + * Doing 10-byte alignment is counterproductive because longwords won't be + * aligned well. Put "#define ALIGN_TYPE long" in jconfig.h if you have + * such a compiler. + */ + +#ifndef ALIGN_TYPE /* so can override from jconfig.h */ +#define ALIGN_TYPE double +#endif + + +/* + * We allocate objects from "pools", where each pool is gotten with a single + * request to jpeg_get_small() or jpeg_get_large(). There is no per-object + * overhead within a pool, except for alignment padding. Each pool has a + * header with a link to the next pool of the same class. + * Small and large pool headers are identical except that the latter's + * link pointer must be FAR on 80x86 machines. + * Notice that the "real" header fields are union'ed with a dummy ALIGN_TYPE + * field. This forces the compiler to make SIZEOF(small_pool_hdr) a multiple + * of the alignment requirement of ALIGN_TYPE. + */ + +typedef union small_pool_struct * small_pool_ptr; + +typedef union small_pool_struct { + struct { + small_pool_ptr next; /* next in list of pools */ + size_t bytes_used; /* how many bytes already used within pool */ + size_t bytes_left; /* bytes still available in this pool */ + } hdr; + ALIGN_TYPE dummy; /* included in union to ensure alignment */ +} small_pool_hdr; + +typedef union large_pool_struct FAR * large_pool_ptr; + +typedef union large_pool_struct { + struct { + large_pool_ptr next; /* next in list of pools */ + size_t bytes_used; /* how many bytes already used within pool */ + size_t bytes_left; /* bytes still available in this pool */ + } hdr; + ALIGN_TYPE dummy; /* included in union to ensure alignment */ +} large_pool_hdr; + + +/* + * Here is the full definition of a memory manager object. + */ + +typedef struct { + struct jpeg_memory_mgr pub; /* public fields */ + + /* Each pool identifier (lifetime class) names a linked list of pools. */ + small_pool_ptr small_list[JPOOL_NUMPOOLS]; + large_pool_ptr large_list[JPOOL_NUMPOOLS]; + + /* Since we only have one lifetime class of virtual arrays, only one + * linked list is necessary (for each datatype). Note that the virtual + * array control blocks being linked together are actually stored somewhere + * in the small-pool list. + */ + jvirt_sarray_ptr virt_sarray_list; + jvirt_barray_ptr virt_barray_list; + + /* This counts total space obtained from jpeg_get_small/large */ + long total_space_allocated; + + /* alloc_sarray and alloc_barray set this value for use by virtual + * array routines. + */ + JDIMENSION last_rowsperchunk; /* from most recent alloc_sarray/barray */ +} my_memory_mgr; + +typedef my_memory_mgr * my_mem_ptr; + + +/* + * The control blocks for virtual arrays. + * Note that these blocks are allocated in the "small" pool area. + * System-dependent info for the associated backing store (if any) is hidden + * inside the backing_store_info struct. + */ + +struct jvirt_sarray_control { + JSAMPARRAY mem_buffer; /* => the in-memory buffer */ + JDIMENSION rows_in_array; /* total virtual array height */ + JDIMENSION samplesperrow; /* width of array (and of memory buffer) */ + JDIMENSION maxaccess; /* max rows accessed by access_virt_sarray */ + JDIMENSION rows_in_mem; /* height of memory buffer */ + JDIMENSION rowsperchunk; /* allocation chunk size in mem_buffer */ + JDIMENSION cur_start_row; /* first logical row # in the buffer */ + JDIMENSION first_undef_row; /* row # of first uninitialized row */ + boolean pre_zero; /* pre-zero mode requested? */ + boolean dirty; /* do current buffer contents need written? */ + boolean b_s_open; /* is backing-store data valid? */ + jvirt_sarray_ptr next; /* link to next virtual sarray control block */ + backing_store_info b_s_info; /* System-dependent control info */ +}; + +struct jvirt_barray_control { + JBLOCKARRAY mem_buffer; /* => the in-memory buffer */ + JDIMENSION rows_in_array; /* total virtual array height */ + JDIMENSION blocksperrow; /* width of array (and of memory buffer) */ + JDIMENSION maxaccess; /* max rows accessed by access_virt_barray */ + JDIMENSION rows_in_mem; /* height of memory buffer */ + JDIMENSION rowsperchunk; /* allocation chunk size in mem_buffer */ + JDIMENSION cur_start_row; /* first logical row # in the buffer */ + JDIMENSION first_undef_row; /* row # of first uninitialized row */ + boolean pre_zero; /* pre-zero mode requested? */ + boolean dirty; /* do current buffer contents need written? */ + boolean b_s_open; /* is backing-store data valid? */ + jvirt_barray_ptr next; /* link to next virtual barray control block */ + backing_store_info b_s_info; /* System-dependent control info */ +}; + + +#ifdef MEM_STATS /* optional extra stuff for statistics */ + +LOCAL(void) +print_mem_stats (j_common_ptr cinfo, int pool_id) +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + small_pool_ptr shdr_ptr; + large_pool_ptr lhdr_ptr; + + /* Since this is only a debugging stub, we can cheat a little by using + * fprintf directly rather than going through the trace message code. + * This is helpful because message parm array can't handle longs. + */ + fprintf(stderr, "Freeing pool %d, total space = %ld\n", + pool_id, mem->total_space_allocated); + + for (lhdr_ptr = mem->large_list[pool_id]; lhdr_ptr != NULL; + lhdr_ptr = lhdr_ptr->hdr.next) { + fprintf(stderr, " Large chunk used %ld\n", + (long) lhdr_ptr->hdr.bytes_used); + } + + for (shdr_ptr = mem->small_list[pool_id]; shdr_ptr != NULL; + shdr_ptr = shdr_ptr->hdr.next) { + fprintf(stderr, " Small chunk used %ld free %ld\n", + (long) shdr_ptr->hdr.bytes_used, + (long) shdr_ptr->hdr.bytes_left); + } +} + +#endif /* MEM_STATS */ + + +LOCAL(void) +out_of_memory (j_common_ptr cinfo, int which) +/* Report an out-of-memory error and stop execution */ +/* If we compiled MEM_STATS support, report alloc requests before dying */ +{ +#ifdef MEM_STATS + cinfo->err->trace_level = 2; /* force self_destruct to report stats */ +#endif + ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, which); +} + + +/* + * Allocation of "small" objects. + * + * For these, we use pooled storage. When a new pool must be created, + * we try to get enough space for the current request plus a "slop" factor, + * where the slop will be the amount of leftover space in the new pool. + * The speed vs. space tradeoff is largely determined by the slop values. + * A different slop value is provided for each pool class (lifetime), + * and we also distinguish the first pool of a class from later ones. + * NOTE: the values given work fairly well on both 16- and 32-bit-int + * machines, but may be too small if longs are 64 bits or more. + */ + +static const size_t first_pool_slop[JPOOL_NUMPOOLS] = +{ + 1600, /* first PERMANENT pool */ + 16000 /* first IMAGE pool */ +}; + +static const size_t extra_pool_slop[JPOOL_NUMPOOLS] = +{ + 0, /* additional PERMANENT pools */ + 5000 /* additional IMAGE pools */ +}; + +#define MIN_SLOP 50 /* greater than 0 to avoid futile looping */ + + +METHODDEF(void *) +alloc_small (j_common_ptr cinfo, int pool_id, size_t sizeofobject) +/* Allocate a "small" object */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + small_pool_ptr hdr_ptr, prev_hdr_ptr; + char * data_ptr; + size_t odd_bytes, min_request, slop; + + /* Check for unsatisfiable request (do now to ensure no overflow below) */ + if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(small_pool_hdr))) + out_of_memory(cinfo, 1); /* request exceeds malloc's ability */ + + /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */ + odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE); + if (odd_bytes > 0) + sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes; + + /* See if space is available in any existing pool */ + if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + prev_hdr_ptr = NULL; + hdr_ptr = mem->small_list[pool_id]; + while (hdr_ptr != NULL) { + if (hdr_ptr->hdr.bytes_left >= sizeofobject) + break; /* found pool with enough space */ + prev_hdr_ptr = hdr_ptr; + hdr_ptr = hdr_ptr->hdr.next; + } + + /* Time to make a new pool? */ + if (hdr_ptr == NULL) { + /* min_request is what we need now, slop is what will be leftover */ + min_request = sizeofobject + SIZEOF(small_pool_hdr); + if (prev_hdr_ptr == NULL) /* first pool in class? */ + slop = first_pool_slop[pool_id]; + else + slop = extra_pool_slop[pool_id]; + /* Don't ask for more than MAX_ALLOC_CHUNK */ + if (slop > (size_t) (MAX_ALLOC_CHUNK-min_request)) + slop = (size_t) (MAX_ALLOC_CHUNK-min_request); + /* Try to get space, if fail reduce slop and try again */ + for (;;) { + hdr_ptr = (small_pool_ptr) jpeg_get_small(cinfo, min_request + slop); + if (hdr_ptr != NULL) + break; + slop /= 2; + if (slop < MIN_SLOP) /* give up when it gets real small */ + out_of_memory(cinfo, 2); /* jpeg_get_small failed */ + } + mem->total_space_allocated += min_request + slop; + /* Success, initialize the new pool header and add to end of list */ + hdr_ptr->hdr.next = NULL; + hdr_ptr->hdr.bytes_used = 0; + hdr_ptr->hdr.bytes_left = sizeofobject + slop; + if (prev_hdr_ptr == NULL) /* first pool in class? */ + mem->small_list[pool_id] = hdr_ptr; + else + prev_hdr_ptr->hdr.next = hdr_ptr; + } + + /* OK, allocate the object from the current pool */ + data_ptr = (char *) (hdr_ptr + 1); /* point to first data byte in pool */ + data_ptr += hdr_ptr->hdr.bytes_used; /* point to place for object */ + hdr_ptr->hdr.bytes_used += sizeofobject; + hdr_ptr->hdr.bytes_left -= sizeofobject; + + return (void *) data_ptr; +} + + +/* + * Allocation of "large" objects. + * + * The external semantics of these are the same as "small" objects, + * except that FAR pointers are used on 80x86. However the pool + * management heuristics are quite different. We assume that each + * request is large enough that it may as well be passed directly to + * jpeg_get_large; the pool management just links everything together + * so that we can free it all on demand. + * Note: the major use of "large" objects is in JSAMPARRAY and JBLOCKARRAY + * structures. The routines that create these structures (see below) + * deliberately bunch rows together to ensure a large request size. + */ + +METHODDEF(void FAR *) +alloc_large (j_common_ptr cinfo, int pool_id, size_t sizeofobject) +/* Allocate a "large" object */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + large_pool_ptr hdr_ptr; + size_t odd_bytes; + + /* Check for unsatisfiable request (do now to ensure no overflow below) */ + if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr))) + out_of_memory(cinfo, 3); /* request exceeds malloc's ability */ + + /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */ + odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE); + if (odd_bytes > 0) + sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes; + + /* Always make a new pool */ + if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + + hdr_ptr = (large_pool_ptr) jpeg_get_large(cinfo, sizeofobject + + SIZEOF(large_pool_hdr)); + if (hdr_ptr == NULL) + out_of_memory(cinfo, 4); /* jpeg_get_large failed */ + mem->total_space_allocated += sizeofobject + SIZEOF(large_pool_hdr); + + /* Success, initialize the new pool header and add to list */ + hdr_ptr->hdr.next = mem->large_list[pool_id]; + /* We maintain space counts in each pool header for statistical purposes, + * even though they are not needed for allocation. + */ + hdr_ptr->hdr.bytes_used = sizeofobject; + hdr_ptr->hdr.bytes_left = 0; + mem->large_list[pool_id] = hdr_ptr; + + return (void FAR *) (hdr_ptr + 1); /* point to first data byte in pool */ +} + + +/* + * Creation of 2-D sample arrays. + * The pointers are in near heap, the samples themselves in FAR heap. + * + * To minimize allocation overhead and to allow I/O of large contiguous + * blocks, we allocate the sample rows in groups of as many rows as possible + * without exceeding MAX_ALLOC_CHUNK total bytes per allocation request. + * NB: the virtual array control routines, later in this file, know about + * this chunking of rows. The rowsperchunk value is left in the mem manager + * object so that it can be saved away if this sarray is the workspace for + * a virtual array. + */ + +METHODDEF(JSAMPARRAY) +alloc_sarray (j_common_ptr cinfo, int pool_id, + JDIMENSION samplesperrow, JDIMENSION numrows) +/* Allocate a 2-D sample array */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + JSAMPARRAY result; + JSAMPROW workspace; + JDIMENSION rowsperchunk, currow, i; + long ltemp; + + /* Calculate max # of rows allowed in one allocation chunk */ + ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / + ((long) samplesperrow * SIZEOF(JSAMPLE)); + if (ltemp <= 0) + ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); + if (ltemp < (long) numrows) + rowsperchunk = (JDIMENSION) ltemp; + else + rowsperchunk = numrows; + mem->last_rowsperchunk = rowsperchunk; + + /* Get space for row pointers (small object) */ + result = (JSAMPARRAY) alloc_small(cinfo, pool_id, + (size_t) (numrows * SIZEOF(JSAMPROW))); + + /* Get the rows themselves (large objects) */ + currow = 0; + while (currow < numrows) { + rowsperchunk = MIN(rowsperchunk, numrows - currow); + workspace = (JSAMPROW) alloc_large(cinfo, pool_id, + (size_t) ((size_t) rowsperchunk * (size_t) samplesperrow + * SIZEOF(JSAMPLE))); + for (i = rowsperchunk; i > 0; i--) { + result[currow++] = workspace; + workspace += samplesperrow; + } + } + + return result; +} + + +/* + * Creation of 2-D coefficient-block arrays. + * This is essentially the same as the code for sample arrays, above. + */ + +METHODDEF(JBLOCKARRAY) +alloc_barray (j_common_ptr cinfo, int pool_id, + JDIMENSION blocksperrow, JDIMENSION numrows) +/* Allocate a 2-D coefficient-block array */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + JBLOCKARRAY result; + JBLOCKROW workspace; + JDIMENSION rowsperchunk, currow, i; + long ltemp; + + /* Calculate max # of rows allowed in one allocation chunk */ + ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / + ((long) blocksperrow * SIZEOF(JBLOCK)); + if (ltemp <= 0) + ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); + if (ltemp < (long) numrows) + rowsperchunk = (JDIMENSION) ltemp; + else + rowsperchunk = numrows; + mem->last_rowsperchunk = rowsperchunk; + + /* Get space for row pointers (small object) */ + result = (JBLOCKARRAY) alloc_small(cinfo, pool_id, + (size_t) (numrows * SIZEOF(JBLOCKROW))); + + /* Get the rows themselves (large objects) */ + currow = 0; + while (currow < numrows) { + rowsperchunk = MIN(rowsperchunk, numrows - currow); + workspace = (JBLOCKROW) alloc_large(cinfo, pool_id, + (size_t) ((size_t) rowsperchunk * (size_t) blocksperrow + * SIZEOF(JBLOCK))); + for (i = rowsperchunk; i > 0; i--) { + result[currow++] = workspace; + workspace += blocksperrow; + } + } + + return result; +} + + +/* + * About virtual array management: + * + * The above "normal" array routines are only used to allocate strip buffers + * (as wide as the image, but just a few rows high). Full-image-sized buffers + * are handled as "virtual" arrays. The array is still accessed a strip at a + * time, but the memory manager must save the whole array for repeated + * accesses. The intended implementation is that there is a strip buffer in + * memory (as high as is possible given the desired memory limit), plus a + * backing file that holds the rest of the array. + * + * The request_virt_array routines are told the total size of the image and + * the maximum number of rows that will be accessed at once. The in-memory + * buffer must be at least as large as the maxaccess value. + * + * The request routines create control blocks but not the in-memory buffers. + * That is postponed until realize_virt_arrays is called. At that time the + * total amount of space needed is known (approximately, anyway), so free + * memory can be divided up fairly. + * + * The access_virt_array routines are responsible for making a specific strip + * area accessible (after reading or writing the backing file, if necessary). + * Note that the access routines are told whether the caller intends to modify + * the accessed strip; during a read-only pass this saves having to rewrite + * data to disk. The access routines are also responsible for pre-zeroing + * any newly accessed rows, if pre-zeroing was requested. + * + * In current usage, the access requests are usually for nonoverlapping + * strips; that is, successive access start_row numbers differ by exactly + * num_rows = maxaccess. This means we can get good performance with simple + * buffer dump/reload logic, by making the in-memory buffer be a multiple + * of the access height; then there will never be accesses across bufferload + * boundaries. The code will still work with overlapping access requests, + * but it doesn't handle bufferload overlaps very efficiently. + */ + + +METHODDEF(jvirt_sarray_ptr) +request_virt_sarray (j_common_ptr cinfo, int pool_id, boolean pre_zero, + JDIMENSION samplesperrow, JDIMENSION numrows, + JDIMENSION maxaccess) +/* Request a virtual 2-D sample array */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + jvirt_sarray_ptr result; + + /* Only IMAGE-lifetime virtual arrays are currently supported */ + if (pool_id != JPOOL_IMAGE) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + + /* get control block */ + result = (jvirt_sarray_ptr) alloc_small(cinfo, pool_id, + SIZEOF(struct jvirt_sarray_control)); + + result->mem_buffer = NULL; /* marks array not yet realized */ + result->rows_in_array = numrows; + result->samplesperrow = samplesperrow; + result->maxaccess = maxaccess; + result->pre_zero = pre_zero; + result->b_s_open = FALSE; /* no associated backing-store object */ + result->next = mem->virt_sarray_list; /* add to list of virtual arrays */ + mem->virt_sarray_list = result; + + return result; +} + + +METHODDEF(jvirt_barray_ptr) +request_virt_barray (j_common_ptr cinfo, int pool_id, boolean pre_zero, + JDIMENSION blocksperrow, JDIMENSION numrows, + JDIMENSION maxaccess) +/* Request a virtual 2-D coefficient-block array */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + jvirt_barray_ptr result; + + /* Only IMAGE-lifetime virtual arrays are currently supported */ + if (pool_id != JPOOL_IMAGE) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + + /* get control block */ + result = (jvirt_barray_ptr) alloc_small(cinfo, pool_id, + SIZEOF(struct jvirt_barray_control)); + + result->mem_buffer = NULL; /* marks array not yet realized */ + result->rows_in_array = numrows; + result->blocksperrow = blocksperrow; + result->maxaccess = maxaccess; + result->pre_zero = pre_zero; + result->b_s_open = FALSE; /* no associated backing-store object */ + result->next = mem->virt_barray_list; /* add to list of virtual arrays */ + mem->virt_barray_list = result; + + return result; +} + + +METHODDEF(void) +realize_virt_arrays (j_common_ptr cinfo) +/* Allocate the in-memory buffers for any unrealized virtual arrays */ +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + long space_per_minheight, maximum_space, avail_mem; + long minheights, max_minheights; + jvirt_sarray_ptr sptr; + jvirt_barray_ptr bptr; + + /* Compute the minimum space needed (maxaccess rows in each buffer) + * and the maximum space needed (full image height in each buffer). + * These may be of use to the system-dependent jpeg_mem_available routine. + */ + space_per_minheight = 0; + maximum_space = 0; + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + if (sptr->mem_buffer == NULL) { /* if not realized yet */ + space_per_minheight += (long) sptr->maxaccess * + (long) sptr->samplesperrow * SIZEOF(JSAMPLE); + maximum_space += (long) sptr->rows_in_array * + (long) sptr->samplesperrow * SIZEOF(JSAMPLE); + } + } + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + if (bptr->mem_buffer == NULL) { /* if not realized yet */ + space_per_minheight += (long) bptr->maxaccess * + (long) bptr->blocksperrow * SIZEOF(JBLOCK); + maximum_space += (long) bptr->rows_in_array * + (long) bptr->blocksperrow * SIZEOF(JBLOCK); + } + } + + if (space_per_minheight <= 0) + return; /* no unrealized arrays, no work */ + + /* Determine amount of memory to actually use; this is system-dependent. */ + avail_mem = jpeg_mem_available(cinfo, space_per_minheight, maximum_space, + mem->total_space_allocated); + + /* If the maximum space needed is available, make all the buffers full + * height; otherwise parcel it out with the same number of minheights + * in each buffer. + */ + if (avail_mem >= maximum_space) + max_minheights = 1000000000L; + else { + max_minheights = avail_mem / space_per_minheight; + /* If there doesn't seem to be enough space, try to get the minimum + * anyway. This allows a "stub" implementation of jpeg_mem_available(). + */ + if (max_minheights <= 0) + max_minheights = 1; + } + + /* Allocate the in-memory buffers and initialize backing store as needed. */ + + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + if (sptr->mem_buffer == NULL) { /* if not realized yet */ + minheights = ((long) sptr->rows_in_array - 1L) / sptr->maxaccess + 1L; + if (minheights <= max_minheights) { + /* This buffer fits in memory */ + sptr->rows_in_mem = sptr->rows_in_array; + } else { + /* It doesn't fit in memory, create backing store. */ + sptr->rows_in_mem = (JDIMENSION) (max_minheights * sptr->maxaccess); + jpeg_open_backing_store(cinfo, & sptr->b_s_info, + (long) sptr->rows_in_array * + (long) sptr->samplesperrow * + (long) SIZEOF(JSAMPLE)); + sptr->b_s_open = TRUE; + } + sptr->mem_buffer = alloc_sarray(cinfo, JPOOL_IMAGE, + sptr->samplesperrow, sptr->rows_in_mem); + sptr->rowsperchunk = mem->last_rowsperchunk; + sptr->cur_start_row = 0; + sptr->first_undef_row = 0; + sptr->dirty = FALSE; + } + } + + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + if (bptr->mem_buffer == NULL) { /* if not realized yet */ + minheights = ((long) bptr->rows_in_array - 1L) / bptr->maxaccess + 1L; + if (minheights <= max_minheights) { + /* This buffer fits in memory */ + bptr->rows_in_mem = bptr->rows_in_array; + } else { + /* It doesn't fit in memory, create backing store. */ + bptr->rows_in_mem = (JDIMENSION) (max_minheights * bptr->maxaccess); + jpeg_open_backing_store(cinfo, & bptr->b_s_info, + (long) bptr->rows_in_array * + (long) bptr->blocksperrow * + (long) SIZEOF(JBLOCK)); + bptr->b_s_open = TRUE; + } + bptr->mem_buffer = alloc_barray(cinfo, JPOOL_IMAGE, + bptr->blocksperrow, bptr->rows_in_mem); + bptr->rowsperchunk = mem->last_rowsperchunk; + bptr->cur_start_row = 0; + bptr->first_undef_row = 0; + bptr->dirty = FALSE; + } + } +} + + +LOCAL(void) +do_sarray_io (j_common_ptr cinfo, jvirt_sarray_ptr ptr, boolean writing) +/* Do backing store read or write of a virtual sample array */ +{ + long bytesperrow, file_offset, byte_count, rows, thisrow, i; + + bytesperrow = (long) ptr->samplesperrow * SIZEOF(JSAMPLE); + file_offset = ptr->cur_start_row * bytesperrow; + /* Loop to read or write each allocation chunk in mem_buffer */ + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + /* One chunk, but check for short chunk at end of buffer */ + rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); + /* Transfer no more than is currently defined */ + thisrow = (long) ptr->cur_start_row + i; + rows = MIN(rows, (long) ptr->first_undef_row - thisrow); + /* Transfer no more than fits in file */ + rows = MIN(rows, (long) ptr->rows_in_array - thisrow); + if (rows <= 0) /* this chunk might be past end of file! */ + break; + byte_count = rows * bytesperrow; + if (writing) + (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, + (void FAR *) ptr->mem_buffer[i], + file_offset, byte_count); + else + (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, + (void FAR *) ptr->mem_buffer[i], + file_offset, byte_count); + file_offset += byte_count; + } +} + + +LOCAL(void) +do_barray_io (j_common_ptr cinfo, jvirt_barray_ptr ptr, boolean writing) +/* Do backing store read or write of a virtual coefficient-block array */ +{ + long bytesperrow, file_offset, byte_count, rows, thisrow, i; + + bytesperrow = (long) ptr->blocksperrow * SIZEOF(JBLOCK); + file_offset = ptr->cur_start_row * bytesperrow; + /* Loop to read or write each allocation chunk in mem_buffer */ + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + /* One chunk, but check for short chunk at end of buffer */ + rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); + /* Transfer no more than is currently defined */ + thisrow = (long) ptr->cur_start_row + i; + rows = MIN(rows, (long) ptr->first_undef_row - thisrow); + /* Transfer no more than fits in file */ + rows = MIN(rows, (long) ptr->rows_in_array - thisrow); + if (rows <= 0) /* this chunk might be past end of file! */ + break; + byte_count = rows * bytesperrow; + if (writing) + (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, + (void FAR *) ptr->mem_buffer[i], + file_offset, byte_count); + else + (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, + (void FAR *) ptr->mem_buffer[i], + file_offset, byte_count); + file_offset += byte_count; + } +} + + +METHODDEF(JSAMPARRAY) +access_virt_sarray (j_common_ptr cinfo, jvirt_sarray_ptr ptr, + JDIMENSION start_row, JDIMENSION num_rows, + boolean writable) +/* Access the part of a virtual sample array starting at start_row */ +/* and extending for num_rows rows. writable is true if */ +/* caller intends to modify the accessed area. */ +{ + JDIMENSION end_row = start_row + num_rows; + JDIMENSION undef_row; + + /* debugging check */ + if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || + ptr->mem_buffer == NULL) + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + + /* Make the desired part of the virtual array accessible */ + if (start_row < ptr->cur_start_row || + end_row > ptr->cur_start_row+ptr->rows_in_mem) { + if (! ptr->b_s_open) + ERREXIT(cinfo, JERR_VIRTUAL_BUG); + /* Flush old buffer contents if necessary */ + if (ptr->dirty) { + do_sarray_io(cinfo, ptr, TRUE); + ptr->dirty = FALSE; + } + /* Decide what part of virtual array to access. + * Algorithm: if target address > current window, assume forward scan, + * load starting at target address. If target address < current window, + * assume backward scan, load so that target area is top of window. + * Note that when switching from forward write to forward read, will have + * start_row = 0, so the limiting case applies and we load from 0 anyway. + */ + if (start_row > ptr->cur_start_row) { + ptr->cur_start_row = start_row; + } else { + /* use long arithmetic here to avoid overflow & unsigned problems */ + long ltemp; + + ltemp = (long) end_row - (long) ptr->rows_in_mem; + if (ltemp < 0) + ltemp = 0; /* don't fall off front end of file */ + ptr->cur_start_row = (JDIMENSION) ltemp; + } + /* Read in the selected part of the array. + * During the initial write pass, we will do no actual read + * because the selected part is all undefined. + */ + do_sarray_io(cinfo, ptr, FALSE); + } + /* Ensure the accessed part of the array is defined; prezero if needed. + * To improve locality of access, we only prezero the part of the array + * that the caller is about to access, not the entire in-memory array. + */ + if (ptr->first_undef_row < end_row) { + if (ptr->first_undef_row < start_row) { + if (writable) /* writer skipped over a section of array */ + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + undef_row = start_row; /* but reader is allowed to read ahead */ + } else { + undef_row = ptr->first_undef_row; + } + if (writable) + ptr->first_undef_row = end_row; + if (ptr->pre_zero) { + size_t bytesperrow = (size_t) ptr->samplesperrow * SIZEOF(JSAMPLE); + undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ + end_row -= ptr->cur_start_row; + while (undef_row < end_row) { + jzero_far((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); + undef_row++; + } + } else { + if (! writable) /* reader looking at undefined data */ + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + } + } + /* Flag the buffer dirty if caller will write in it */ + if (writable) + ptr->dirty = TRUE; + /* Return address of proper part of the buffer */ + return ptr->mem_buffer + (start_row - ptr->cur_start_row); +} + + +METHODDEF(JBLOCKARRAY) +access_virt_barray (j_common_ptr cinfo, jvirt_barray_ptr ptr, + JDIMENSION start_row, JDIMENSION num_rows, + boolean writable) +/* Access the part of a virtual block array starting at start_row */ +/* and extending for num_rows rows. writable is true if */ +/* caller intends to modify the accessed area. */ +{ + JDIMENSION end_row = start_row + num_rows; + JDIMENSION undef_row; + + /* debugging check */ + if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || + ptr->mem_buffer == NULL) + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + + /* Make the desired part of the virtual array accessible */ + if (start_row < ptr->cur_start_row || + end_row > ptr->cur_start_row+ptr->rows_in_mem) { + if (! ptr->b_s_open) + ERREXIT(cinfo, JERR_VIRTUAL_BUG); + /* Flush old buffer contents if necessary */ + if (ptr->dirty) { + do_barray_io(cinfo, ptr, TRUE); + ptr->dirty = FALSE; + } + /* Decide what part of virtual array to access. + * Algorithm: if target address > current window, assume forward scan, + * load starting at target address. If target address < current window, + * assume backward scan, load so that target area is top of window. + * Note that when switching from forward write to forward read, will have + * start_row = 0, so the limiting case applies and we load from 0 anyway. + */ + if (start_row > ptr->cur_start_row) { + ptr->cur_start_row = start_row; + } else { + /* use long arithmetic here to avoid overflow & unsigned problems */ + long ltemp; + + ltemp = (long) end_row - (long) ptr->rows_in_mem; + if (ltemp < 0) + ltemp = 0; /* don't fall off front end of file */ + ptr->cur_start_row = (JDIMENSION) ltemp; + } + /* Read in the selected part of the array. + * During the initial write pass, we will do no actual read + * because the selected part is all undefined. + */ + do_barray_io(cinfo, ptr, FALSE); + } + /* Ensure the accessed part of the array is defined; prezero if needed. + * To improve locality of access, we only prezero the part of the array + * that the caller is about to access, not the entire in-memory array. + */ + if (ptr->first_undef_row < end_row) { + if (ptr->first_undef_row < start_row) { + if (writable) /* writer skipped over a section of array */ + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + undef_row = start_row; /* but reader is allowed to read ahead */ + } else { + undef_row = ptr->first_undef_row; + } + if (writable) + ptr->first_undef_row = end_row; + if (ptr->pre_zero) { + size_t bytesperrow = (size_t) ptr->blocksperrow * SIZEOF(JBLOCK); + undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ + end_row -= ptr->cur_start_row; + while (undef_row < end_row) { + jzero_far((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); + undef_row++; + } + } else { + if (! writable) /* reader looking at undefined data */ + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + } + } + /* Flag the buffer dirty if caller will write in it */ + if (writable) + ptr->dirty = TRUE; + /* Return address of proper part of the buffer */ + return ptr->mem_buffer + (start_row - ptr->cur_start_row); +} + + +/* + * Release all objects belonging to a specified pool. + */ + +METHODDEF(void) +free_pool (j_common_ptr cinfo, int pool_id) +{ + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + small_pool_ptr shdr_ptr; + large_pool_ptr lhdr_ptr; + size_t space_freed; + + if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + +#ifdef MEM_STATS + if (cinfo->err->trace_level > 1) + print_mem_stats(cinfo, pool_id); /* print pool's memory usage statistics */ +#endif + + /* If freeing IMAGE pool, close any virtual arrays first */ + if (pool_id == JPOOL_IMAGE) { + jvirt_sarray_ptr sptr; + jvirt_barray_ptr bptr; + + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + if (sptr->b_s_open) { /* there may be no backing store */ + sptr->b_s_open = FALSE; /* prevent recursive close if error */ + (*sptr->b_s_info.close_backing_store) (cinfo, & sptr->b_s_info); + } + } + mem->virt_sarray_list = NULL; + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + if (bptr->b_s_open) { /* there may be no backing store */ + bptr->b_s_open = FALSE; /* prevent recursive close if error */ + (*bptr->b_s_info.close_backing_store) (cinfo, & bptr->b_s_info); + } + } + mem->virt_barray_list = NULL; + } + + /* Release large objects */ + lhdr_ptr = mem->large_list[pool_id]; + mem->large_list[pool_id] = NULL; + + while (lhdr_ptr != NULL) { + large_pool_ptr next_lhdr_ptr = lhdr_ptr->hdr.next; + space_freed = lhdr_ptr->hdr.bytes_used + + lhdr_ptr->hdr.bytes_left + + SIZEOF(large_pool_hdr); + jpeg_free_large(cinfo, (void FAR *) lhdr_ptr, space_freed); + mem->total_space_allocated -= space_freed; + lhdr_ptr = next_lhdr_ptr; + } + + /* Release small objects */ + shdr_ptr = mem->small_list[pool_id]; + mem->small_list[pool_id] = NULL; + + while (shdr_ptr != NULL) { + small_pool_ptr next_shdr_ptr = shdr_ptr->hdr.next; + space_freed = shdr_ptr->hdr.bytes_used + + shdr_ptr->hdr.bytes_left + + SIZEOF(small_pool_hdr); + jpeg_free_small(cinfo, (void *) shdr_ptr, space_freed); + mem->total_space_allocated -= space_freed; + shdr_ptr = next_shdr_ptr; + } +} + + +/* + * Close up shop entirely. + * Note that this cannot be called unless cinfo->mem is non-NULL. + */ + +METHODDEF(void) +self_destruct (j_common_ptr cinfo) +{ + int pool; + + /* Close all backing store, release all memory. + * Releasing pools in reverse order might help avoid fragmentation + * with some (brain-damaged) malloc libraries. + */ + for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) { + free_pool(cinfo, pool); + } + + /* Release the memory manager control block too. */ + jpeg_free_small(cinfo, (void *) cinfo->mem, SIZEOF(my_memory_mgr)); + cinfo->mem = NULL; /* ensures I will be called only once */ + + jpeg_mem_term(cinfo); /* system-dependent cleanup */ +} + + +/* + * Memory manager initialization. + * When this is called, only the error manager pointer is valid in cinfo! + */ + +GLOBAL(void) +jinit_memory_mgr (j_common_ptr cinfo) +{ + my_mem_ptr mem; + long max_to_use; + int pool; + size_t test_mac; + + cinfo->mem = NULL; /* for safety if init fails */ + + /* Check for configuration errors. + * SIZEOF(ALIGN_TYPE) should be a power of 2; otherwise, it probably + * doesn't reflect any real hardware alignment requirement. + * The test is a little tricky: for X>0, X and X-1 have no one-bits + * in common if and only if X is a power of 2, ie has only one one-bit. + * Some compilers may give an "unreachable code" warning here; ignore it. + */ + if ((SIZEOF(ALIGN_TYPE) & (SIZEOF(ALIGN_TYPE)-1)) != 0) + ERREXIT(cinfo, JERR_BAD_ALIGN_TYPE); + /* MAX_ALLOC_CHUNK must be representable as type size_t, and must be + * a multiple of SIZEOF(ALIGN_TYPE). + * Again, an "unreachable code" warning may be ignored here. + * But a "constant too large" warning means you need to fix MAX_ALLOC_CHUNK. + */ + test_mac = (size_t) MAX_ALLOC_CHUNK; + if ((long) test_mac != MAX_ALLOC_CHUNK || + (MAX_ALLOC_CHUNK % SIZEOF(ALIGN_TYPE)) != 0) + ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); + + max_to_use = jpeg_mem_init(cinfo); /* system-dependent initialization */ + + /* Attempt to allocate memory manager's control block */ + mem = (my_mem_ptr) jpeg_get_small(cinfo, SIZEOF(my_memory_mgr)); + + if (mem == NULL) { + jpeg_mem_term(cinfo); /* system-dependent cleanup */ + ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 0); + } + + /* OK, fill in the method pointers */ + mem->pub.alloc_small = alloc_small; + mem->pub.alloc_large = alloc_large; + mem->pub.alloc_sarray = alloc_sarray; + mem->pub.alloc_barray = alloc_barray; + mem->pub.request_virt_sarray = request_virt_sarray; + mem->pub.request_virt_barray = request_virt_barray; + mem->pub.realize_virt_arrays = realize_virt_arrays; + mem->pub.access_virt_sarray = access_virt_sarray; + mem->pub.access_virt_barray = access_virt_barray; + mem->pub.free_pool = free_pool; + mem->pub.self_destruct = self_destruct; + + /* Make MAX_ALLOC_CHUNK accessible to other modules */ + mem->pub.max_alloc_chunk = MAX_ALLOC_CHUNK; + + /* Initialize working state */ + mem->pub.max_memory_to_use = max_to_use; + + for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) { + mem->small_list[pool] = NULL; + mem->large_list[pool] = NULL; + } + mem->virt_sarray_list = NULL; + mem->virt_barray_list = NULL; + + mem->total_space_allocated = SIZEOF(my_memory_mgr); + + /* Declare ourselves open for business */ + cinfo->mem = & mem->pub; + + /* Check for an environment variable JPEGMEM; if found, override the + * default max_memory setting from jpeg_mem_init. Note that the + * surrounding application may again override this value. + * If your system doesn't support getenv(), define NO_GETENV to disable + * this feature. + */ +#ifndef NO_GETENV + { char * memenv; + + if ((memenv = getenv("JPEGMEM")) != NULL) { + char ch = 'x'; + + if (sscanf(memenv, "%ld%c", &max_to_use, &ch) > 0) { + if (ch == 'm' || ch == 'M') + max_to_use *= 1000L; + mem->pub.max_memory_to_use = max_to_use * 1000L; + } + } + } +#endif + +} diff --git a/Build/source/extra/jpeg/jmemname.c b/Build/source/extra/jpeg/jmemname.c new file mode 100644 index 00000000000..ed96dee1bc8 --- /dev/null +++ b/Build/source/extra/jpeg/jmemname.c @@ -0,0 +1,276 @@ +/* + * jmemname.c + * + * Copyright (C) 1992-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file provides a generic implementation of the system-dependent + * portion of the JPEG memory manager. This implementation assumes that + * you must explicitly construct a name for each temp file. + * Also, the problem of determining the amount of memory available + * is shoved onto the user. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef HAVE_STDLIB_H /* should declare malloc(),free() */ +extern void * malloc JPP((size_t size)); +extern void free JPP((void *ptr)); +#endif + +#ifndef SEEK_SET /* pre-ANSI systems may not define this; */ +#define SEEK_SET 0 /* if not, assume 0 is correct */ +#endif + +#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ +#define READ_BINARY "r" +#define RW_BINARY "w+" +#else +#ifdef VMS /* VMS is very nonstandard */ +#define READ_BINARY "rb", "ctx=stm" +#define RW_BINARY "w+b", "ctx=stm" +#else /* standard ANSI-compliant case */ +#define READ_BINARY "rb" +#define RW_BINARY "w+b" +#endif +#endif + + +/* + * Selection of a file name for a temporary file. + * This is system-dependent! + * + * The code as given is suitable for most Unix systems, and it is easily + * modified for most non-Unix systems. Some notes: + * 1. The temp file is created in the directory named by TEMP_DIRECTORY. + * The default value is /usr/tmp, which is the conventional place for + * creating large temp files on Unix. On other systems you'll probably + * want to change the file location. You can do this by editing the + * #define, or (preferred) by defining TEMP_DIRECTORY in jconfig.h. + * + * 2. If you need to change the file name as well as its location, + * you can override the TEMP_FILE_NAME macro. (Note that this is + * actually a printf format string; it must contain %s and %d.) + * Few people should need to do this. + * + * 3. mktemp() is used to ensure that multiple processes running + * simultaneously won't select the same file names. If your system + * doesn't have mktemp(), define NO_MKTEMP to do it the hard way. + * (If you don't have , also define NO_ERRNO_H.) + * + * 4. You probably want to define NEED_SIGNAL_CATCHER so that cjpeg.c/djpeg.c + * will cause the temp files to be removed if you stop the program early. + */ + +#ifndef TEMP_DIRECTORY /* can override from jconfig.h or Makefile */ +#define TEMP_DIRECTORY "/usr/tmp/" /* recommended setting for Unix */ +#endif + +static int next_file_num; /* to distinguish among several temp files */ + +#ifdef NO_MKTEMP + +#ifndef TEMP_FILE_NAME /* can override from jconfig.h or Makefile */ +#define TEMP_FILE_NAME "%sJPG%03d.TMP" +#endif + +#ifndef NO_ERRNO_H +#include /* to define ENOENT */ +#endif + +/* ANSI C specifies that errno is a macro, but on older systems it's more + * likely to be a plain int variable. And not all versions of errno.h + * bother to declare it, so we have to in order to be most portable. Thus: + */ +#ifndef errno +extern int errno; +#endif + + +LOCAL(void) +select_file_name (char * fname) +{ + FILE * tfile; + + /* Keep generating file names till we find one that's not in use */ + for (;;) { + next_file_num++; /* advance counter */ + sprintf(fname, TEMP_FILE_NAME, TEMP_DIRECTORY, next_file_num); + if ((tfile = fopen(fname, READ_BINARY)) == NULL) { + /* fopen could have failed for a reason other than the file not + * being there; for example, file there but unreadable. + * If isn't available, then we cannot test the cause. + */ +#ifdef ENOENT + if (errno != ENOENT) + continue; +#endif + break; + } + fclose(tfile); /* oops, it's there; close tfile & try again */ + } +} + +#else /* ! NO_MKTEMP */ + +/* Note that mktemp() requires the initial filename to end in six X's */ +#ifndef TEMP_FILE_NAME /* can override from jconfig.h or Makefile */ +#define TEMP_FILE_NAME "%sJPG%dXXXXXX" +#endif + +LOCAL(void) +select_file_name (char * fname) +{ + next_file_num++; /* advance counter */ + sprintf(fname, TEMP_FILE_NAME, TEMP_DIRECTORY, next_file_num); + mktemp(fname); /* make sure file name is unique */ + /* mktemp replaces the trailing XXXXXX with a unique string of characters */ +} + +#endif /* NO_MKTEMP */ + + +/* + * Memory allocation and freeing are controlled by the regular library + * routines malloc() and free(). + */ + +GLOBAL(void *) +jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * "Large" objects are treated the same as "small" ones. + * NB: although we include FAR keywords in the routine declarations, + * this file won't actually work in 80x86 small/medium model; at least, + * you probably won't be able to process useful-size images in only 64KB. + */ + +GLOBAL(void FAR *) +jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void FAR *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * This routine computes the total memory space available for allocation. + * It's impossible to do this in a portable way; our current solution is + * to make the user tell us (with a default value set at compile time). + * If you can actually get the available space, it's a good idea to subtract + * a slop factor of 5% or so. + */ + +#ifndef DEFAULT_MAX_MEM /* so can override from makefile */ +#define DEFAULT_MAX_MEM 1000000L /* default: one megabyte */ +#endif + +GLOBAL(long) +jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, + long max_bytes_needed, long already_allocated) +{ + return cinfo->mem->max_memory_to_use - already_allocated; +} + + +/* + * Backing store (temporary file) management. + * Backing store objects are only used when the value returned by + * jpeg_mem_available is less than the total space needed. You can dispense + * with these routines if you have plenty of virtual memory; see jmemnobs.c. + */ + + +METHODDEF(void) +read_backing_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + if (fseek(info->temp_file, file_offset, SEEK_SET)) + ERREXIT(cinfo, JERR_TFILE_SEEK); + if (JFREAD(info->temp_file, buffer_address, byte_count) + != (size_t) byte_count) + ERREXIT(cinfo, JERR_TFILE_READ); +} + + +METHODDEF(void) +write_backing_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + if (fseek(info->temp_file, file_offset, SEEK_SET)) + ERREXIT(cinfo, JERR_TFILE_SEEK); + if (JFWRITE(info->temp_file, buffer_address, byte_count) + != (size_t) byte_count) + ERREXIT(cinfo, JERR_TFILE_WRITE); +} + + +METHODDEF(void) +close_backing_store (j_common_ptr cinfo, backing_store_ptr info) +{ + fclose(info->temp_file); /* close the file */ + unlink(info->temp_name); /* delete the file */ +/* If your system doesn't have unlink(), use remove() instead. + * remove() is the ANSI-standard name for this function, but if + * your system was ANSI you'd be using jmemansi.c, right? + */ + TRACEMSS(cinfo, 1, JTRC_TFILE_CLOSE, info->temp_name); +} + + +/* + * Initial opening of a backing-store object. + */ + +GLOBAL(void) +jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + select_file_name(info->temp_name); + if ((info->temp_file = fopen(info->temp_name, RW_BINARY)) == NULL) + ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); + info->read_backing_store = read_backing_store; + info->write_backing_store = write_backing_store; + info->close_backing_store = close_backing_store; + TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name); +} + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. + */ + +GLOBAL(long) +jpeg_mem_init (j_common_ptr cinfo) +{ + next_file_num = 0; /* initialize temp file name generator */ + return DEFAULT_MAX_MEM; /* default for max_memory_to_use */ +} + +GLOBAL(void) +jpeg_mem_term (j_common_ptr cinfo) +{ + /* no work */ +} diff --git a/Build/source/extra/jpeg/jmemnobs.c b/Build/source/extra/jpeg/jmemnobs.c new file mode 100644 index 00000000000..eb8c337725f --- /dev/null +++ b/Build/source/extra/jpeg/jmemnobs.c @@ -0,0 +1,109 @@ +/* + * jmemnobs.c + * + * Copyright (C) 1992-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file provides a really simple implementation of the system- + * dependent portion of the JPEG memory manager. This implementation + * assumes that no backing-store files are needed: all required space + * can be obtained from malloc(). + * This is very portable in the sense that it'll compile on almost anything, + * but you'd better have lots of main memory (or virtual memory) if you want + * to process big images. + * Note that the max_memory_to_use option is ignored by this implementation. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef HAVE_STDLIB_H /* should declare malloc(),free() */ +extern void * malloc JPP((size_t size)); +extern void free JPP((void *ptr)); +#endif + + +/* + * Memory allocation and freeing are controlled by the regular library + * routines malloc() and free(). + */ + +GLOBAL(void *) +jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * "Large" objects are treated the same as "small" ones. + * NB: although we include FAR keywords in the routine declarations, + * this file won't actually work in 80x86 small/medium model; at least, + * you probably won't be able to process useful-size images in only 64KB. + */ + +GLOBAL(void FAR *) +jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void FAR *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * This routine computes the total memory space available for allocation. + * Here we always say, "we got all you want bud!" + */ + +GLOBAL(long) +jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, + long max_bytes_needed, long already_allocated) +{ + return max_bytes_needed; +} + + +/* + * Backing store (temporary file) management. + * Since jpeg_mem_available always promised the moon, + * this should never be called and we can just error out. + */ + +GLOBAL(void) +jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + ERREXIT(cinfo, JERR_NO_BACKING_STORE); +} + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. Here, there isn't any. + */ + +GLOBAL(long) +jpeg_mem_init (j_common_ptr cinfo) +{ + return 0; /* just set max_memory_to_use to 0 */ +} + +GLOBAL(void) +jpeg_mem_term (j_common_ptr cinfo) +{ + /* no work */ +} diff --git a/Build/source/extra/jpeg/jmemsys.h b/Build/source/extra/jpeg/jmemsys.h new file mode 100644 index 00000000000..6c3c6d348f2 --- /dev/null +++ b/Build/source/extra/jpeg/jmemsys.h @@ -0,0 +1,198 @@ +/* + * jmemsys.h + * + * Copyright (C) 1992-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This include file defines the interface between the system-independent + * and system-dependent portions of the JPEG memory manager. No other + * modules need include it. (The system-independent portion is jmemmgr.c; + * there are several different versions of the system-dependent portion.) + * + * This file works as-is for the system-dependent memory managers supplied + * in the IJG distribution. You may need to modify it if you write a + * custom memory manager. If system-dependent changes are needed in + * this file, the best method is to #ifdef them based on a configuration + * symbol supplied in jconfig.h, as we have done with USE_MSDOS_MEMMGR + * and USE_MAC_MEMMGR. + */ + + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_get_small jGetSmall +#define jpeg_free_small jFreeSmall +#define jpeg_get_large jGetLarge +#define jpeg_free_large jFreeLarge +#define jpeg_mem_available jMemAvail +#define jpeg_open_backing_store jOpenBackStore +#define jpeg_mem_init jMemInit +#define jpeg_mem_term jMemTerm +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* + * These two functions are used to allocate and release small chunks of + * memory. (Typically the total amount requested through jpeg_get_small is + * no more than 20K or so; this will be requested in chunks of a few K each.) + * Behavior should be the same as for the standard library functions malloc + * and free; in particular, jpeg_get_small must return NULL on failure. + * On most systems, these ARE malloc and free. jpeg_free_small is passed the + * size of the object being freed, just in case it's needed. + * On an 80x86 machine using small-data memory model, these manage near heap. + */ + +EXTERN(void *) jpeg_get_small JPP((j_common_ptr cinfo, size_t sizeofobject)); +EXTERN(void) jpeg_free_small JPP((j_common_ptr cinfo, void * object, + size_t sizeofobject)); + +/* + * These two functions are used to allocate and release large chunks of + * memory (up to the total free space designated by jpeg_mem_available). + * The interface is the same as above, except that on an 80x86 machine, + * far pointers are used. On most other machines these are identical to + * the jpeg_get/free_small routines; but we keep them separate anyway, + * in case a different allocation strategy is desirable for large chunks. + */ + +EXTERN(void FAR *) jpeg_get_large JPP((j_common_ptr cinfo, + size_t sizeofobject)); +EXTERN(void) jpeg_free_large JPP((j_common_ptr cinfo, void FAR * object, + size_t sizeofobject)); + +/* + * The macro MAX_ALLOC_CHUNK designates the maximum number of bytes that may + * be requested in a single call to jpeg_get_large (and jpeg_get_small for that + * matter, but that case should never come into play). This macro is needed + * to model the 64Kb-segment-size limit of far addressing on 80x86 machines. + * On those machines, we expect that jconfig.h will provide a proper value. + * On machines with 32-bit flat address spaces, any large constant may be used. + * + * NB: jmemmgr.c expects that MAX_ALLOC_CHUNK will be representable as type + * size_t and will be a multiple of sizeof(align_type). + */ + +#ifndef MAX_ALLOC_CHUNK /* may be overridden in jconfig.h */ +#define MAX_ALLOC_CHUNK 1000000000L +#endif + +/* + * This routine computes the total space still available for allocation by + * jpeg_get_large. If more space than this is needed, backing store will be + * used. NOTE: any memory already allocated must not be counted. + * + * There is a minimum space requirement, corresponding to the minimum + * feasible buffer sizes; jmemmgr.c will request that much space even if + * jpeg_mem_available returns zero. The maximum space needed, enough to hold + * all working storage in memory, is also passed in case it is useful. + * Finally, the total space already allocated is passed. If no better + * method is available, cinfo->mem->max_memory_to_use - already_allocated + * is often a suitable calculation. + * + * It is OK for jpeg_mem_available to underestimate the space available + * (that'll just lead to more backing-store access than is really necessary). + * However, an overestimate will lead to failure. Hence it's wise to subtract + * a slop factor from the true available space. 5% should be enough. + * + * On machines with lots of virtual memory, any large constant may be returned. + * Conversely, zero may be returned to always use the minimum amount of memory. + */ + +EXTERN(long) jpeg_mem_available JPP((j_common_ptr cinfo, + long min_bytes_needed, + long max_bytes_needed, + long already_allocated)); + + +/* + * This structure holds whatever state is needed to access a single + * backing-store object. The read/write/close method pointers are called + * by jmemmgr.c to manipulate the backing-store object; all other fields + * are private to the system-dependent backing store routines. + */ + +#define TEMP_NAME_LENGTH 64 /* max length of a temporary file's name */ + + +#ifdef USE_MSDOS_MEMMGR /* DOS-specific junk */ + +typedef unsigned short XMSH; /* type of extended-memory handles */ +typedef unsigned short EMSH; /* type of expanded-memory handles */ + +typedef union { + short file_handle; /* DOS file handle if it's a temp file */ + XMSH xms_handle; /* handle if it's a chunk of XMS */ + EMSH ems_handle; /* handle if it's a chunk of EMS */ +} handle_union; + +#endif /* USE_MSDOS_MEMMGR */ + +#ifdef USE_MAC_MEMMGR /* Mac-specific junk */ +#include +#endif /* USE_MAC_MEMMGR */ + + +typedef struct backing_store_struct * backing_store_ptr; + +typedef struct backing_store_struct { + /* Methods for reading/writing/closing this backing-store object */ + JMETHOD(void, read_backing_store, (j_common_ptr cinfo, + backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count)); + JMETHOD(void, write_backing_store, (j_common_ptr cinfo, + backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count)); + JMETHOD(void, close_backing_store, (j_common_ptr cinfo, + backing_store_ptr info)); + + /* Private fields for system-dependent backing-store management */ +#ifdef USE_MSDOS_MEMMGR + /* For the MS-DOS manager (jmemdos.c), we need: */ + handle_union handle; /* reference to backing-store storage object */ + char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */ +#else +#ifdef USE_MAC_MEMMGR + /* For the Mac manager (jmemmac.c), we need: */ + short temp_file; /* file reference number to temp file */ + FSSpec tempSpec; /* the FSSpec for the temp file */ + char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */ +#else + /* For a typical implementation with temp files, we need: */ + FILE * temp_file; /* stdio reference to temp file */ + char temp_name[TEMP_NAME_LENGTH]; /* name of temp file */ +#endif +#endif +} backing_store_info; + + +/* + * Initial opening of a backing-store object. This must fill in the + * read/write/close pointers in the object. The read/write routines + * may take an error exit if the specified maximum file size is exceeded. + * (If jpeg_mem_available always returns a large value, this routine can + * just take an error exit.) + */ + +EXTERN(void) jpeg_open_backing_store JPP((j_common_ptr cinfo, + backing_store_ptr info, + long total_bytes_needed)); + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. jpeg_mem_init will be called before anything is + * allocated (and, therefore, nothing in cinfo is of use except the error + * manager pointer). It should return a suitable default value for + * max_memory_to_use; this may subsequently be overridden by the surrounding + * application. (Note that max_memory_to_use is only important if + * jpeg_mem_available chooses to consult it ... no one else will.) + * jpeg_mem_term may assume that all requested memory has been freed and that + * all opened backing-store objects have been closed. + */ + +EXTERN(long) jpeg_mem_init JPP((j_common_ptr cinfo)); +EXTERN(void) jpeg_mem_term JPP((j_common_ptr cinfo)); diff --git a/Build/source/extra/jpeg/jmorecfg.h b/Build/source/extra/jpeg/jmorecfg.h new file mode 100644 index 00000000000..fc0899ec829 --- /dev/null +++ b/Build/source/extra/jpeg/jmorecfg.h @@ -0,0 +1,366 @@ +/* + * jmorecfg.h + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains additional configuration options that customize the + * JPEG software for special applications or support machine-dependent + * optimizations. Most users will not need to touch this file. + */ + + +/* + * Define BITS_IN_JSAMPLE as either + * 8 for 8-bit sample values (the usual setting) + * 12 for 12-bit sample values + * Only 8 and 12 are legal data precisions for lossy JPEG according to the + * JPEG standard, and the IJG code does not support anything else! + * We do not support run-time selection of data precision, sorry. + */ + +#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ + + +/* + * Maximum number of components (color channels) allowed in JPEG image. + * To meet the letter of the JPEG spec, set this to 255. However, darn + * few applications need more than 4 channels (maybe 5 for CMYK + alpha + * mask). We recommend 10 as a reasonable compromise; use 4 if you are + * really short on memory. (Each allowed component costs a hundred or so + * bytes of storage, whether actually used in an image or not.) + */ + +#define MAX_COMPONENTS 10 /* maximum number of image components */ + + +/* + * Basic data types. + * You may need to change these if you have a machine with unusual data + * type sizes; for example, "char" not 8 bits, "short" not 16 bits, + * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, + * but it had better be at least 16. + */ + +/* Representation of a single sample (pixel element value). + * We frequently allocate large arrays of these, so it's important to keep + * them small. But if you have memory to burn and access to char or short + * arrays is very slow on your hardware, you might want to change these. + */ + +#if BITS_IN_JSAMPLE == 8 +/* JSAMPLE should be the smallest type that will hold the values 0..255. + * You can use a signed char by having GETJSAMPLE mask it with 0xFF. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JSAMPLE; +#ifdef CHAR_IS_UNSIGNED +#define GETJSAMPLE(value) ((int) (value)) +#else +#define GETJSAMPLE(value) ((int) (value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + +#define MAXJSAMPLE 255 +#define CENTERJSAMPLE 128 + +#endif /* BITS_IN_JSAMPLE == 8 */ + + +#if BITS_IN_JSAMPLE == 12 +/* JSAMPLE should be the smallest type that will hold the values 0..4095. + * On nearly all machines "short" will do nicely. + */ + +typedef short JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#define MAXJSAMPLE 4095 +#define CENTERJSAMPLE 2048 + +#endif /* BITS_IN_JSAMPLE == 12 */ + + +/* Representation of a DCT frequency coefficient. + * This should be a signed value of at least 16 bits; "short" is usually OK. + * Again, we allocate large arrays of these, but you can change to int + * if you have memory to burn and "short" is really slow. + */ + +typedef short JCOEF; + + +/* Compressed datastreams are represented as arrays of JOCTET. + * These must be EXACTLY 8 bits wide, at least once they are written to + * external storage. Note that when using the stdio data source/destination + * managers, this is also the data type passed to fread/fwrite. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JOCTET; +#define GETJOCTET(value) (value) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JOCTET; +#ifdef CHAR_IS_UNSIGNED +#define GETJOCTET(value) (value) +#else +#define GETJOCTET(value) ((value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + + +/* These typedefs are used for various table entries and so forth. + * They must be at least as wide as specified; but making them too big + * won't cost a huge amount of memory, so we don't provide special + * extraction code like we did for JSAMPLE. (In other words, these + * typedefs live at a different point on the speed/space tradeoff curve.) + */ + +/* UINT8 must hold at least the values 0..255. */ + +#ifdef HAVE_UNSIGNED_CHAR +typedef unsigned char UINT8; +#else /* not HAVE_UNSIGNED_CHAR */ +#ifdef CHAR_IS_UNSIGNED +typedef char UINT8; +#else /* not CHAR_IS_UNSIGNED */ +typedef short UINT8; +#endif /* CHAR_IS_UNSIGNED */ +#endif /* HAVE_UNSIGNED_CHAR */ + +/* UINT16 must hold at least the values 0..65535. */ + +#ifdef HAVE_UNSIGNED_SHORT +typedef unsigned short UINT16; +#else /* not HAVE_UNSIGNED_SHORT */ +typedef unsigned int UINT16; +#endif /* HAVE_UNSIGNED_SHORT */ + +/* INT16 must hold at least the values -32768..32767. */ + +#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ +typedef short INT16; +#endif + +/* INT32 must hold at least signed 32-bit values. */ + +#if !defined(XMD_H) && !defined(_WIN32) /* X11/xmd.h correctly defines INT32 */ +typedef long INT32; +#endif + +/* Datatype used for image dimensions. The JPEG standard only supports + * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore + * "unsigned int" is sufficient on all machines. However, if you need to + * handle larger images and you don't mind deviating from the spec, you + * can change this datatype. + */ + +typedef unsigned int JDIMENSION; + +#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ + + +/* These macros are used in all function definitions and extern declarations. + * You could modify them if you need to change function linkage conventions; + * in particular, you'll need to do that to make the library a Windows DLL. + * Another application is to make all functions global for use with debuggers + * or code profilers that require it. + */ + +/* a function called through method pointers: */ +#define METHODDEF(type) static type +/* a function used only in its module: */ +#define LOCAL(type) static type +/* a function referenced thru EXTERNs: */ +#define GLOBAL(type) type +/* a reference to a GLOBAL function: */ +#define EXTERN(type) extern JPEGDLL type + + +/* This macro is used to declare a "method", that is, a function pointer. + * We want to supply prototype parameters if the compiler can cope. + * Note that the arglist parameter must be parenthesized! + * Again, you can customize this if you need special linkage keywords. + */ + +#ifdef HAVE_PROTOTYPES +#define JMETHOD(type,methodname,arglist) type (*methodname) arglist +#else +#define JMETHOD(type,methodname,arglist) type (*methodname) () +#endif + + +/* Here is the pseudo-keyword for declaring pointers that must be "far" + * on 80x86 machines. Most of the specialized coding for 80x86 is handled + * by just saying "FAR *" where such a pointer is needed. In a few places + * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. + */ + +#ifdef FAR +#undef FAR +#endif +#ifdef NEED_FAR_POINTERS +#define FAR far +#else +#define FAR +#endif + + +/* + * On a few systems, type boolean and/or its values FALSE, TRUE may appear + * in standard header files. Or you may have conflicts with application- + * specific header files that you want to include together with these files. + * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. + */ + +#ifndef HAVE_BOOLEAN +typedef int boolean; +#endif +#ifndef FALSE /* in case these macros already exist */ +#define FALSE 0 /* values of boolean */ +#endif +#ifndef TRUE +#define TRUE 1 +#endif + + +/* + * The remaining options affect code selection within the JPEG library, + * but they don't need to be visible to most applications using the library. + * To minimize application namespace pollution, the symbols won't be + * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. + */ + +#ifdef JPEG_INTERNALS +#define JPEG_INTERNAL_OPTIONS +#endif + +#ifdef JPEG_INTERNAL_OPTIONS + + +/* + * These defines indicate whether to include various optional functions. + * Undefining some of these symbols will produce a smaller but less capable + * library. Note that you can leave certain source files out of the + * compilation/linking process if you've #undef'd the corresponding symbols. + * (You may HAVE to do that if your compiler doesn't like null source files.) + */ + +/* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */ + +/* Capability options common to encoder and decoder: */ + +#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ +#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ +#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ + +/* Encoder capability options: */ + +#undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ +/* Note: if you selected 12-bit data precision, it is dangerous to turn off + * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit + * precision, so jchuff.c normally uses entropy optimization to compute + * usable tables for higher precision. If you don't want to do optimization, + * you'll have to supply different default Huffman tables. + * The exact same statements apply for progressive JPEG: the default tables + * don't work for progressive mode. (This may get fixed, however.) + */ +#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ + +/* Decoder capability options: */ + +#undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ +#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ +#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ +#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ +#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ +#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ +#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ + +/* more capability options later, no doubt */ + + +/* + * Ordering of RGB data in scanlines passed to or from the application. + * If your application wants to deal with data in the order B,G,R, just + * change these macros. You can also deal with formats such as R,G,B,X + * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing + * the offsets will also change the order in which colormap data is organized. + * RESTRICTIONS: + * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. + * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not + * useful if you are using JPEG color spaces other than YCbCr or grayscale. + * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE + * is not 3 (they don't understand about dummy color components!). So you + * can't use color quantization if you change that value. + */ + +#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ +#define RGB_GREEN 1 /* Offset of Green */ +#define RGB_BLUE 2 /* Offset of Blue */ +#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ + + +/* Definitions for speed-related optimizations. */ + + +/* If your compiler supports inline functions, define INLINE + * as the inline keyword; otherwise define it as empty. + */ + +#ifndef INLINE +#ifdef __GNUC__ /* for instance, GNU C knows about inline */ +#define INLINE __inline__ +#endif +#ifndef INLINE +#define INLINE /* default is to define it as empty */ +#endif +#endif + + +/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying + * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER + * as short on such a machine. MULTIPLIER must be at least 16 bits wide. + */ + +#ifndef MULTIPLIER +#define MULTIPLIER int /* type for fastest integer multiply */ +#endif + + +/* FAST_FLOAT should be either float or double, whichever is done faster + * by your compiler. (Note that this type is only used in the floating point + * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) + * Typically, float is faster in ANSI C compilers, while double is faster in + * pre-ANSI compilers (because they insist on converting to double anyway). + * The code below therefore chooses float if we have ANSI-style prototypes. + */ + +#ifndef FAST_FLOAT +#ifdef HAVE_PROTOTYPES +#define FAST_FLOAT float +#else +#define FAST_FLOAT double +#endif +#endif + +#endif /* JPEG_INTERNAL_OPTIONS */ diff --git a/Build/source/extra/jpeg/jpegint.h b/Build/source/extra/jpeg/jpegint.h new file mode 100644 index 00000000000..95b00d405ca --- /dev/null +++ b/Build/source/extra/jpeg/jpegint.h @@ -0,0 +1,392 @@ +/* + * jpegint.h + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file provides common declarations for the various JPEG modules. + * These declarations are considered internal to the JPEG library; most + * applications using the library shouldn't need to include this file. + */ + + +/* Declarations for both compression & decompression */ + +typedef enum { /* Operating modes for buffer controllers */ + JBUF_PASS_THRU, /* Plain stripwise operation */ + /* Remaining modes require a full-image buffer to have been created */ + JBUF_SAVE_SOURCE, /* Run source subobject only, save output */ + JBUF_CRANK_DEST, /* Run dest subobject only, using saved data */ + JBUF_SAVE_AND_PASS /* Run both subobjects, save output */ +} J_BUF_MODE; + +/* Values of global_state field (jdapi.c has some dependencies on ordering!) */ +#define CSTATE_START 100 /* after create_compress */ +#define CSTATE_SCANNING 101 /* start_compress done, write_scanlines OK */ +#define CSTATE_RAW_OK 102 /* start_compress done, write_raw_data OK */ +#define CSTATE_WRCOEFS 103 /* jpeg_write_coefficients done */ +#define DSTATE_START 200 /* after create_decompress */ +#define DSTATE_INHEADER 201 /* reading header markers, no SOS yet */ +#define DSTATE_READY 202 /* found SOS, ready for start_decompress */ +#define DSTATE_PRELOAD 203 /* reading multiscan file in start_decompress*/ +#define DSTATE_PRESCAN 204 /* performing dummy pass for 2-pass quant */ +#define DSTATE_SCANNING 205 /* start_decompress done, read_scanlines OK */ +#define DSTATE_RAW_OK 206 /* start_decompress done, read_raw_data OK */ +#define DSTATE_BUFIMAGE 207 /* expecting jpeg_start_output */ +#define DSTATE_BUFPOST 208 /* looking for SOS/EOI in jpeg_finish_output */ +#define DSTATE_RDCOEFS 209 /* reading file in jpeg_read_coefficients */ +#define DSTATE_STOPPING 210 /* looking for EOI in jpeg_finish_decompress */ + + +/* Declarations for compression modules */ + +/* Master control module */ +struct jpeg_comp_master { + JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo)); + JMETHOD(void, pass_startup, (j_compress_ptr cinfo)); + JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); + + /* State variables made visible to other modules */ + boolean call_pass_startup; /* True if pass_startup must be called */ + boolean is_last_pass; /* True during last pass */ +}; + +/* Main buffer control (downsampled-data buffer) */ +struct jpeg_c_main_controller { + JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(void, process_data, (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, + JDIMENSION in_rows_avail)); +}; + +/* Compression preprocessing (downsampling input buffer control) */ +struct jpeg_c_prep_controller { + JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(void, pre_process_data, (j_compress_ptr cinfo, + JSAMPARRAY input_buf, + JDIMENSION *in_row_ctr, + JDIMENSION in_rows_avail, + JSAMPIMAGE output_buf, + JDIMENSION *out_row_group_ctr, + JDIMENSION out_row_groups_avail)); +}; + +/* Coefficient buffer control */ +struct jpeg_c_coef_controller { + JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(boolean, compress_data, (j_compress_ptr cinfo, + JSAMPIMAGE input_buf)); +}; + +/* Colorspace conversion */ +struct jpeg_color_converter { + JMETHOD(void, start_pass, (j_compress_ptr cinfo)); + JMETHOD(void, color_convert, (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows)); +}; + +/* Downsampling */ +struct jpeg_downsampler { + JMETHOD(void, start_pass, (j_compress_ptr cinfo)); + JMETHOD(void, downsample, (j_compress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_index, + JSAMPIMAGE output_buf, + JDIMENSION out_row_group_index)); + + boolean need_context_rows; /* TRUE if need rows above & below */ +}; + +/* Forward DCT (also controls coefficient quantization) */ +struct jpeg_forward_dct { + JMETHOD(void, start_pass, (j_compress_ptr cinfo)); + /* perhaps this should be an array??? */ + JMETHOD(void, forward_DCT, (j_compress_ptr cinfo, + jpeg_component_info * compptr, + JSAMPARRAY sample_data, JBLOCKROW coef_blocks, + JDIMENSION start_row, JDIMENSION start_col, + JDIMENSION num_blocks)); +}; + +/* Entropy encoding */ +struct jpeg_entropy_encoder { + JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics)); + JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data)); + JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); +}; + +/* Marker writing */ +struct jpeg_marker_writer { + JMETHOD(void, write_file_header, (j_compress_ptr cinfo)); + JMETHOD(void, write_frame_header, (j_compress_ptr cinfo)); + JMETHOD(void, write_scan_header, (j_compress_ptr cinfo)); + JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo)); + JMETHOD(void, write_tables_only, (j_compress_ptr cinfo)); + /* These routines are exported to allow insertion of extra markers */ + /* Probably only COM and APPn markers should be written this way */ + JMETHOD(void, write_marker_header, (j_compress_ptr cinfo, int marker, + unsigned int datalen)); + JMETHOD(void, write_marker_byte, (j_compress_ptr cinfo, int val)); +}; + + +/* Declarations for decompression modules */ + +/* Master control module */ +struct jpeg_decomp_master { + JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo)); + + /* State variables made visible to other modules */ + boolean is_dummy_pass; /* True during 1st pass for 2-pass quant */ +}; + +/* Input control module */ +struct jpeg_input_controller { + JMETHOD(int, consume_input, (j_decompress_ptr cinfo)); + JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo)); + JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo)); + + /* State variables made visible to other modules */ + boolean has_multiple_scans; /* True if file has multiple scans */ + boolean eoi_reached; /* True when EOI has been consumed */ +}; + +/* Main buffer control (downsampled-data buffer) */ +struct jpeg_d_main_controller { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(void, process_data, (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +}; + +/* Coefficient buffer control */ +struct jpeg_d_coef_controller { + JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); + JMETHOD(int, consume_data, (j_decompress_ptr cinfo)); + JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo)); + JMETHOD(int, decompress_data, (j_decompress_ptr cinfo, + JSAMPIMAGE output_buf)); + /* Pointer to array of coefficient virtual arrays, or NULL if none */ + jvirt_barray_ptr *coef_arrays; +}; + +/* Decompression postprocessing (color quantization buffer control) */ +struct jpeg_d_post_controller { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); + JMETHOD(void, post_process_data, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, + JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); +}; + +/* Marker reading & parsing */ +struct jpeg_marker_reader { + JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo)); + /* Read markers until SOS or EOI. + * Returns same codes as are defined for jpeg_consume_input: + * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. + */ + JMETHOD(int, read_markers, (j_decompress_ptr cinfo)); + /* Read a restart marker --- exported for use by entropy decoder only */ + jpeg_marker_parser_method read_restart_marker; + + /* State of marker reader --- nominally internal, but applications + * supplying COM or APPn handlers might like to know the state. + */ + boolean saw_SOI; /* found SOI? */ + boolean saw_SOF; /* found SOF? */ + int next_restart_num; /* next restart number expected (0-7) */ + unsigned int discarded_bytes; /* # of bytes skipped looking for a marker */ +}; + +/* Entropy decoding */ +struct jpeg_entropy_decoder { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo, + JBLOCKROW *MCU_data)); + + /* This is here to share code between baseline and progressive decoders; */ + /* other modules probably should not use it */ + boolean insufficient_data; /* set TRUE after emitting warning */ +}; + +/* Inverse DCT (also performs dequantization) */ +typedef JMETHOD(void, inverse_DCT_method_ptr, + (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col)); + +struct jpeg_inverse_dct { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + /* It is useful to allow each component to have a separate IDCT method. */ + inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS]; +}; + +/* Upsampling (note that upsampler must also call color converter) */ +struct jpeg_upsampler { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, upsample, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, + JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, + JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail)); + + boolean need_context_rows; /* TRUE if need rows above & below */ +}; + +/* Colorspace conversion */ +struct jpeg_color_deconverter { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, color_convert, (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows)); +}; + +/* Color quantization or color precision reduction */ +struct jpeg_color_quantizer { + JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan)); + JMETHOD(void, color_quantize, (j_decompress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPARRAY output_buf, + int num_rows)); + JMETHOD(void, finish_pass, (j_decompress_ptr cinfo)); + JMETHOD(void, new_color_map, (j_decompress_ptr cinfo)); +}; + + +/* Miscellaneous useful macros */ + +#undef MAX +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#undef MIN +#define MIN(a,b) ((a) < (b) ? (a) : (b)) + + +/* We assume that right shift corresponds to signed division by 2 with + * rounding towards minus infinity. This is correct for typical "arithmetic + * shift" instructions that shift in copies of the sign bit. But some + * C compilers implement >> with an unsigned shift. For these machines you + * must define RIGHT_SHIFT_IS_UNSIGNED. + * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity. + * It is only applied with constant shift counts. SHIFT_TEMPS must be + * included in the variables of any routine using RIGHT_SHIFT. + */ + +#ifdef RIGHT_SHIFT_IS_UNSIGNED +#define SHIFT_TEMPS INT32 shift_temp; +#define RIGHT_SHIFT(x,shft) \ + ((shift_temp = (x)) < 0 ? \ + (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \ + (shift_temp >> (shft))) +#else +#define SHIFT_TEMPS +#define RIGHT_SHIFT(x,shft) ((x) >> (shft)) +#endif + + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jinit_compress_master jICompress +#define jinit_c_master_control jICMaster +#define jinit_c_main_controller jICMainC +#define jinit_c_prep_controller jICPrepC +#define jinit_c_coef_controller jICCoefC +#define jinit_color_converter jICColor +#define jinit_downsampler jIDownsampler +#define jinit_forward_dct jIFDCT +#define jinit_huff_encoder jIHEncoder +#define jinit_phuff_encoder jIPHEncoder +#define jinit_marker_writer jIMWriter +#define jinit_master_decompress jIDMaster +#define jinit_d_main_controller jIDMainC +#define jinit_d_coef_controller jIDCoefC +#define jinit_d_post_controller jIDPostC +#define jinit_input_controller jIInCtlr +#define jinit_marker_reader jIMReader +#define jinit_huff_decoder jIHDecoder +#define jinit_phuff_decoder jIPHDecoder +#define jinit_inverse_dct jIIDCT +#define jinit_upsampler jIUpsampler +#define jinit_color_deconverter jIDColor +#define jinit_1pass_quantizer jI1Quant +#define jinit_2pass_quantizer jI2Quant +#define jinit_merged_upsampler jIMUpsampler +#define jinit_memory_mgr jIMemMgr +#define jdiv_round_up jDivRound +#define jround_up jRound +#define jcopy_sample_rows jCopySamples +#define jcopy_block_row jCopyBlocks +#define jzero_far jZeroFar +#define jpeg_zigzag_order jZIGTable +#define jpeg_natural_order jZAGTable +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* Compression module initialization routines */ +EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo, + boolean transcode_only)); +EXTERN(void) jinit_c_main_controller JPP((j_compress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_c_prep_controller JPP((j_compress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_c_coef_controller JPP((j_compress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_color_converter JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_downsampler JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_forward_dct JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_huff_encoder JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_phuff_encoder JPP((j_compress_ptr cinfo)); +EXTERN(void) jinit_marker_writer JPP((j_compress_ptr cinfo)); +/* Decompression module initialization routines */ +EXTERN(void) jinit_master_decompress JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_d_main_controller JPP((j_decompress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_d_coef_controller JPP((j_decompress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_d_post_controller JPP((j_decompress_ptr cinfo, + boolean need_full_buffer)); +EXTERN(void) jinit_input_controller JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_marker_reader JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_huff_decoder JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_phuff_decoder JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_inverse_dct JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_upsampler JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_color_deconverter JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_1pass_quantizer JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_2pass_quantizer JPP((j_decompress_ptr cinfo)); +EXTERN(void) jinit_merged_upsampler JPP((j_decompress_ptr cinfo)); +/* Memory manager initialization */ +EXTERN(void) jinit_memory_mgr JPP((j_common_ptr cinfo)); + +/* Utility routines in jutils.c */ +EXTERN(long) jdiv_round_up JPP((long a, long b)); +EXTERN(long) jround_up JPP((long a, long b)); +EXTERN(void) jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row, + JSAMPARRAY output_array, int dest_row, + int num_rows, JDIMENSION num_cols)); +EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row, + JDIMENSION num_blocks)); +EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero)); +/* Constant tables in jutils.c */ +#if 0 /* This table is not actually needed in v6a */ +extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */ +#endif +extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */ + +/* Suppress undefined-structure complaints if necessary. */ + +#ifdef INCOMPLETE_TYPES_BROKEN +#ifndef AM_MEMORY_MANAGER /* only jmemmgr.c defines these */ +struct jvirt_sarray_control { long dummy; }; +struct jvirt_barray_control { long dummy; }; +#endif +#endif /* INCOMPLETE_TYPES_BROKEN */ diff --git a/Build/source/extra/jpeg/jpeglib.h b/Build/source/extra/jpeg/jpeglib.h new file mode 100644 index 00000000000..d1be8ddeff1 --- /dev/null +++ b/Build/source/extra/jpeg/jpeglib.h @@ -0,0 +1,1096 @@ +/* + * jpeglib.h + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the application interface for the JPEG library. + * Most applications using the library need only include this file, + * and perhaps jerror.h if they want to know the exact error codes. + */ + +#ifndef JPEGLIB_H +#define JPEGLIB_H + +/* + * First we include the configuration files that record how this + * installation of the JPEG library is set up. jconfig.h can be + * generated automatically for many systems. jmorecfg.h contains + * manual configuration options that most people need not worry about. + */ + +#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ +#include "jconfig.h" /* widely used configuration options */ +#endif +#include "jmorecfg.h" /* seldom changed options */ + + +/* Version ID for the JPEG library. + * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". + */ + +#define JPEG_LIB_VERSION 62 /* Version 6b */ + + +/* Various constants determining the sizes of things. + * All of these are specified by the JPEG standard, so don't change them + * if you want to be compatible. + */ + +#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ +#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ +#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ +#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ +#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ +#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ +#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ +/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; + * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. + * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU + * to handle it. We even let you do this from the jconfig.h file. However, + * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe + * sometimes emits noncompliant files doesn't mean you should too. + */ +#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ +#ifndef D_MAX_BLOCKS_IN_MCU +#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ +#endif + + +/* Data structures for images (arrays of samples and of DCT coefficients). + * On 80x86 machines, the image arrays are too big for near pointers, + * but the pointer arrays can fit in near memory. + */ + +typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ +typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ +typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ + +typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ +typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ +typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ +typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ + +typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ + + +/* Types for JPEG compression parameters and working tables. */ + + +/* DCT coefficient quantization tables. */ + +typedef struct { + /* This array gives the coefficient quantizers in natural array order + * (not the zigzag order in which they are stored in a JPEG DQT marker). + * CAUTION: IJG versions prior to v6a kept this array in zigzag order. + */ + UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JQUANT_TBL; + + +/* Huffman coding tables. */ + +typedef struct { + /* These two fields directly represent the contents of a JPEG DHT marker */ + UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ + /* length k bits; bits[0] is unused */ + UINT8 huffval[256]; /* The symbols, in order of incr code length */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JHUFF_TBL; + + +/* Basic info about one component (color channel). */ + +typedef struct { + /* These values are fixed over the whole image. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOF marker. */ + int component_id; /* identifier for this component (0..255) */ + int component_index; /* its index in SOF or cinfo->comp_info[] */ + int h_samp_factor; /* horizontal sampling factor (1..4) */ + int v_samp_factor; /* vertical sampling factor (1..4) */ + int quant_tbl_no; /* quantization table selector (0..3) */ + /* These values may vary between scans. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOS marker. */ + /* The decompressor output side may not use these variables. */ + int dc_tbl_no; /* DC entropy table selector (0..3) */ + int ac_tbl_no; /* AC entropy table selector (0..3) */ + + /* Remaining fields should be treated as private by applications. */ + + /* These values are computed during compression or decompression startup: */ + /* Component's size in DCT blocks. + * Any dummy blocks added to complete an MCU are not counted; therefore + * these values do not depend on whether a scan is interleaved or not. + */ + JDIMENSION width_in_blocks; + JDIMENSION height_in_blocks; + /* Size of a DCT block in samples. Always DCTSIZE for compression. + * For decompression this is the size of the output from one DCT block, + * reflecting any scaling we choose to apply during the IDCT step. + * Values of 1,2,4,8 are likely to be supported. Note that different + * components may receive different IDCT scalings. + */ + int DCT_scaled_size; + /* The downsampled dimensions are the component's actual, unpadded number + * of samples at the main buffer (preprocessing/compression interface), thus + * downsampled_width = ceil(image_width * Hi/Hmax) + * and similarly for height. For decompression, IDCT scaling is included, so + * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE) + */ + JDIMENSION downsampled_width; /* actual width in samples */ + JDIMENSION downsampled_height; /* actual height in samples */ + /* This flag is used only for decompression. In cases where some of the + * components will be ignored (eg grayscale output from YCbCr image), + * we can skip most computations for the unused components. + */ + boolean component_needed; /* do we need the value of this component? */ + + /* These values are computed before starting a scan of the component. */ + /* The decompressor output side may not use these variables. */ + int MCU_width; /* number of blocks per MCU, horizontally */ + int MCU_height; /* number of blocks per MCU, vertically */ + int MCU_blocks; /* MCU_width * MCU_height */ + int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */ + int last_col_width; /* # of non-dummy blocks across in last MCU */ + int last_row_height; /* # of non-dummy blocks down in last MCU */ + + /* Saved quantization table for component; NULL if none yet saved. + * See jdinput.c comments about the need for this information. + * This field is currently used only for decompression. + */ + JQUANT_TBL * quant_table; + + /* Private per-component storage for DCT or IDCT subsystem. */ + void * dct_table; +} jpeg_component_info; + + +/* The script for encoding a multiple-scan file is an array of these: */ + +typedef struct { + int comps_in_scan; /* number of components encoded in this scan */ + int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ + int Ss, Se; /* progressive JPEG spectral selection parms */ + int Ah, Al; /* progressive JPEG successive approx. parms */ +} jpeg_scan_info; + +/* The decompressor can save APPn and COM markers in a list of these: */ + +typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; + +struct jpeg_marker_struct { + jpeg_saved_marker_ptr next; /* next in list, or NULL */ + UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ + unsigned int original_length; /* # bytes of data in the file */ + unsigned int data_length; /* # bytes of data saved at data[] */ + JOCTET FAR * data; /* the data contained in the marker */ + /* the marker length word is not counted in data_length or original_length */ +}; + +/* Known color spaces. */ + +typedef enum { + JCS_UNKNOWN, /* error/unspecified */ + JCS_GRAYSCALE, /* monochrome */ + JCS_RGB, /* red/green/blue */ + JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ + JCS_CMYK, /* C/M/Y/K */ + JCS_YCCK /* Y/Cb/Cr/K */ +} J_COLOR_SPACE; + +/* DCT/IDCT algorithm options. */ + +typedef enum { + JDCT_ISLOW, /* slow but accurate integer algorithm */ + JDCT_IFAST, /* faster, less accurate integer method */ + JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ +} J_DCT_METHOD; + +#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ +#define JDCT_DEFAULT JDCT_ISLOW +#endif +#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ +#define JDCT_FASTEST JDCT_IFAST +#endif + +/* Dithering options for decompression. */ + +typedef enum { + JDITHER_NONE, /* no dithering */ + JDITHER_ORDERED, /* simple ordered dither */ + JDITHER_FS /* Floyd-Steinberg error diffusion dither */ +} J_DITHER_MODE; + + +/* Common fields between JPEG compression and decompression master structs. */ + +#define jpeg_common_fields \ + struct jpeg_error_mgr * err; /* Error handler module */\ + struct jpeg_memory_mgr * mem; /* Memory manager module */\ + struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ + void * client_data; /* Available for use by application */\ + boolean is_decompressor; /* So common code can tell which is which */\ + int global_state /* For checking call sequence validity */ + +/* Routines that are to be used by both halves of the library are declared + * to receive a pointer to this structure. There are no actual instances of + * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. + */ +struct jpeg_common_struct { + jpeg_common_fields; /* Fields common to both master struct types */ + /* Additional fields follow in an actual jpeg_compress_struct or + * jpeg_decompress_struct. All three structs must agree on these + * initial fields! (This would be a lot cleaner in C++.) + */ +}; + +typedef struct jpeg_common_struct * j_common_ptr; +typedef struct jpeg_compress_struct * j_compress_ptr; +typedef struct jpeg_decompress_struct * j_decompress_ptr; + + +/* Master record for a compression instance */ + +struct jpeg_compress_struct { + jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ + + /* Destination for compressed data */ + struct jpeg_destination_mgr * dest; + + /* Description of source image --- these fields must be filled in by + * outer application before starting compression. in_color_space must + * be correct before you can even call jpeg_set_defaults(). + */ + + JDIMENSION image_width; /* input image width */ + JDIMENSION image_height; /* input image height */ + int input_components; /* # of color components in input image */ + J_COLOR_SPACE in_color_space; /* colorspace of input image */ + + double input_gamma; /* image gamma of input image */ + + /* Compression parameters --- these fields must be set before calling + * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to + * initialize everything to reasonable defaults, then changing anything + * the application specifically wants to change. That way you won't get + * burnt when new parameters are added. Also note that there are several + * helper routines to simplify changing parameters. + */ + + int data_precision; /* bits of precision in image data */ + + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + int num_scans; /* # of entries in scan_info array */ + const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ + /* The default value of scan_info is NULL, which causes a single-scan + * sequential JPEG file to be emitted. To create a multi-scan file, + * set num_scans and scan_info to point to an array of scan definitions. + */ + + boolean raw_data_in; /* TRUE=caller supplies downsampled data */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + int smoothing_factor; /* 1..100, or 0 for no input smoothing */ + J_DCT_METHOD dct_method; /* DCT algorithm selector */ + + /* The restart interval can be specified in absolute MCUs by setting + * restart_interval, or in MCU rows by setting restart_in_rows + * (in which case the correct restart_interval will be figured + * for each scan). + */ + unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ + int restart_in_rows; /* if > 0, MCU rows per restart interval */ + + /* Parameters controlling emission of special markers. */ + + boolean write_JFIF_header; /* should a JFIF marker be written? */ + UINT8 JFIF_major_version; /* What to write for the JFIF version number */ + UINT8 JFIF_minor_version; + /* These three values are not used by the JPEG code, merely copied */ + /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ + /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ + /* ratio is defined by X_density/Y_density even when density_unit=0. */ + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean write_Adobe_marker; /* should an Adobe marker be written? */ + + /* State variable: index of next scanline to be written to + * jpeg_write_scanlines(). Application may use this to control its + * processing loop, e.g., "while (next_scanline < image_height)". + */ + + JDIMENSION next_scanline; /* 0 .. image_height-1 */ + + /* Remaining fields are known throughout compressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during compression startup + */ + boolean progressive_mode; /* TRUE if scan script uses progressive mode */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ + /* The coefficient controller receives data in units of MCU rows as defined + * for fully interleaved scans (whether the JPEG file is interleaved or not). + * There are v_samp_factor * DCTSIZE sample rows of each component in an + * "iMCU" (interleaved MCU) row. + */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[C_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* + * Links to compression subobjects (methods and private variables of modules) + */ + struct jpeg_comp_master * master; + struct jpeg_c_main_controller * main; + struct jpeg_c_prep_controller * prep; + struct jpeg_c_coef_controller * coef; + struct jpeg_marker_writer * marker; + struct jpeg_color_converter * cconvert; + struct jpeg_downsampler * downsample; + struct jpeg_forward_dct * fdct; + struct jpeg_entropy_encoder * entropy; + jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ + int script_space_size; +}; + + +/* Master record for a decompression instance */ + +struct jpeg_decompress_struct { + jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ + + /* Source of compressed data */ + struct jpeg_source_mgr * src; + + /* Basic description of image --- filled in by jpeg_read_header(). */ + /* Application may inspect these values to decide how to process image. */ + + JDIMENSION image_width; /* nominal image width (from SOF marker) */ + JDIMENSION image_height; /* nominal image height */ + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + /* Decompression processing parameters --- these fields must be set before + * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes + * them to default values. + */ + + J_COLOR_SPACE out_color_space; /* colorspace for output */ + + unsigned int scale_num, scale_denom; /* fraction by which to scale image */ + + double output_gamma; /* image gamma wanted in output */ + + boolean buffered_image; /* TRUE=multiple output passes */ + boolean raw_data_out; /* TRUE=downsampled data wanted */ + + J_DCT_METHOD dct_method; /* IDCT algorithm selector */ + boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ + boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ + + boolean quantize_colors; /* TRUE=colormapped output wanted */ + /* the following are ignored if not quantize_colors: */ + J_DITHER_MODE dither_mode; /* type of color dithering to use */ + boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ + int desired_number_of_colors; /* max # colors to use in created colormap */ + /* these are significant only in buffered-image mode: */ + boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ + boolean enable_external_quant;/* enable future use of external colormap */ + boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ + + /* Description of actual output image that will be returned to application. + * These fields are computed by jpeg_start_decompress(). + * You can also use jpeg_calc_output_dimensions() to determine these values + * in advance of calling jpeg_start_decompress(). + */ + + JDIMENSION output_width; /* scaled image width */ + JDIMENSION output_height; /* scaled image height */ + int out_color_components; /* # of color components in out_color_space */ + int output_components; /* # of color components returned */ + /* output_components is 1 (a colormap index) when quantizing colors; + * otherwise it equals out_color_components. + */ + int rec_outbuf_height; /* min recommended height of scanline buffer */ + /* If the buffer passed to jpeg_read_scanlines() is less than this many rows + * high, space and time will be wasted due to unnecessary data copying. + * Usually rec_outbuf_height will be 1 or 2, at most 4. + */ + + /* When quantizing colors, the output colormap is described by these fields. + * The application can supply a colormap by setting colormap non-NULL before + * calling jpeg_start_decompress; otherwise a colormap is created during + * jpeg_start_decompress or jpeg_start_output. + * The map has out_color_components rows and actual_number_of_colors columns. + */ + int actual_number_of_colors; /* number of entries in use */ + JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ + + /* State variables: these variables indicate the progress of decompression. + * The application may examine these but must not modify them. + */ + + /* Row index of next scanline to be read from jpeg_read_scanlines(). + * Application may use this to control its processing loop, e.g., + * "while (output_scanline < output_height)". + */ + JDIMENSION output_scanline; /* 0 .. output_height-1 */ + + /* Current input scan number and number of iMCU rows completed in scan. + * These indicate the progress of the decompressor input side. + */ + int input_scan_number; /* Number of SOS markers seen so far */ + JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ + + /* The "output scan number" is the notional scan being displayed by the + * output side. The decompressor will not allow output scan/row number + * to get ahead of input scan/row, but it can fall arbitrarily far behind. + */ + int output_scan_number; /* Nominal scan number being displayed */ + JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ + + /* Current progression status. coef_bits[c][i] indicates the precision + * with which component c's DCT coefficient i (in zigzag order) is known. + * It is -1 when no data has yet been received, otherwise it is the point + * transform (shift) value for the most recent scan of the coefficient + * (thus, 0 at completion of the progression). + * This pointer is NULL when reading a non-progressive file. + */ + int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ + + /* Internal JPEG parameters --- the application usually need not look at + * these fields. Note that the decompressor output side may not use + * any parameters that can change between scans. + */ + + /* Quantization and Huffman tables are carried forward across input + * datastreams when processing abbreviated JPEG datastreams. + */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + /* These parameters are never carried across datastreams, since they + * are given in SOF/SOS markers or defined to be reset by SOI. + */ + + int data_precision; /* bits of precision in image data */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ + + /* These fields record data obtained from optional markers recognized by + * the JPEG library. + */ + boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ + /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ + UINT8 JFIF_major_version; /* JFIF version number */ + UINT8 JFIF_minor_version; + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ + UINT8 Adobe_transform; /* Color transform code from Adobe marker */ + + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + + /* Aside from the specific data retained from APPn markers known to the + * library, the uninterpreted contents of any or all APPn and COM markers + * can be saved in a list for examination by the application. + */ + jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ + + /* Remaining fields are known throughout decompressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during decompression startup + */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ + /* The coefficient controller's input and output progress is measured in + * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows + * in fully interleaved JPEG scans, but are used whether the scan is + * interleaved or not. We define an iMCU row as v_samp_factor DCT block + * rows of each component. Therefore, the IDCT output contains + * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row. + */ + + JSAMPLE * sample_range_limit; /* table for fast range-limiting */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + * Note that the decompressor output side must not use these fields. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[D_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* This field is shared between entropy decoder and marker parser. + * It is either zero or the code of a JPEG marker that has been + * read from the data source, but has not yet been processed. + */ + int unread_marker; + + /* + * Links to decompression subobjects (methods, private variables of modules) + */ + struct jpeg_decomp_master * master; + struct jpeg_d_main_controller * main; + struct jpeg_d_coef_controller * coef; + struct jpeg_d_post_controller * post; + struct jpeg_input_controller * inputctl; + struct jpeg_marker_reader * marker; + struct jpeg_entropy_decoder * entropy; + struct jpeg_inverse_dct * idct; + struct jpeg_upsampler * upsample; + struct jpeg_color_deconverter * cconvert; + struct jpeg_color_quantizer * cquantize; +}; + + +/* "Object" declarations for JPEG modules that may be supplied or called + * directly by the surrounding application. + * As with all objects in the JPEG library, these structs only define the + * publicly visible methods and state variables of a module. Additional + * private fields may exist after the public ones. + */ + + +/* Error handler object */ + +struct jpeg_error_mgr { + /* Error exit handler: does not return to caller */ + JMETHOD(void, error_exit, (j_common_ptr cinfo)); + /* Conditionally emit a trace or warning message */ + JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); + /* Routine that actually outputs a trace or error message */ + JMETHOD(void, output_message, (j_common_ptr cinfo)); + /* Format a message string for the most recent JPEG error or message */ + JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); +#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ + /* Reset error state variables at start of a new image */ + JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); + + /* The message ID code and any parameters are saved here. + * A message can have one string parameter or up to 8 int parameters. + */ + int msg_code; +#define JMSG_STR_PARM_MAX 80 + union { + int i[8]; + char s[JMSG_STR_PARM_MAX]; + } msg_parm; + + /* Standard state variables for error facility */ + + int trace_level; /* max msg_level that will be displayed */ + + /* For recoverable corrupt-data errors, we emit a warning message, + * but keep going unless emit_message chooses to abort. emit_message + * should count warnings in num_warnings. The surrounding application + * can check for bad data by seeing if num_warnings is nonzero at the + * end of processing. + */ + long num_warnings; /* number of corrupt-data warnings */ + + /* These fields point to the table(s) of error message strings. + * An application can change the table pointer to switch to a different + * message list (typically, to change the language in which errors are + * reported). Some applications may wish to add additional error codes + * that will be handled by the JPEG library error mechanism; the second + * table pointer is used for this purpose. + * + * First table includes all errors generated by JPEG library itself. + * Error code 0 is reserved for a "no such error string" message. + */ + const char * const * jpeg_message_table; /* Library errors */ + int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ + /* Second table can be added by application (see cjpeg/djpeg for example). + * It contains strings numbered first_addon_message..last_addon_message. + */ + const char * const * addon_message_table; /* Non-library errors */ + int first_addon_message; /* code for first string in addon table */ + int last_addon_message; /* code for last string in addon table */ +}; + + +/* Progress monitor object */ + +struct jpeg_progress_mgr { + JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); + + long pass_counter; /* work units completed in this pass */ + long pass_limit; /* total number of work units in this pass */ + int completed_passes; /* passes completed so far */ + int total_passes; /* total number of passes expected */ +}; + + +/* Data destination object for compression */ + +struct jpeg_destination_mgr { + JOCTET * next_output_byte; /* => next byte to write in buffer */ + size_t free_in_buffer; /* # of byte spaces remaining in buffer */ + + JMETHOD(void, init_destination, (j_compress_ptr cinfo)); + JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); + JMETHOD(void, term_destination, (j_compress_ptr cinfo)); +}; + + +/* Data source object for decompression */ + +struct jpeg_source_mgr { + const JOCTET * next_input_byte; /* => next byte to read from buffer */ + size_t bytes_in_buffer; /* # of bytes remaining in buffer */ + + JMETHOD(void, init_source, (j_decompress_ptr cinfo)); + JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); + JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); + JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); + JMETHOD(void, term_source, (j_decompress_ptr cinfo)); +}; + + +/* Memory manager object. + * Allocates "small" objects (a few K total), "large" objects (tens of K), + * and "really big" objects (virtual arrays with backing store if needed). + * The memory manager does not allow individual objects to be freed; rather, + * each created object is assigned to a pool, and whole pools can be freed + * at once. This is faster and more convenient than remembering exactly what + * to free, especially where malloc()/free() are not too speedy. + * NB: alloc routines never return NULL. They exit to error_exit if not + * successful. + */ + +#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ +#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ +#define JPOOL_NUMPOOLS 2 + +typedef struct jvirt_sarray_control * jvirt_sarray_ptr; +typedef struct jvirt_barray_control * jvirt_barray_ptr; + + +struct jpeg_memory_mgr { + /* Method pointers */ + JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, + JDIMENSION samplesperrow, + JDIMENSION numrows)); + JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, + JDIMENSION blocksperrow, + JDIMENSION numrows)); + JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION samplesperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION blocksperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); + JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, + jvirt_sarray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, + jvirt_barray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); + JMETHOD(void, self_destruct, (j_common_ptr cinfo)); + + /* Limit on memory allocation for this JPEG object. (Note that this is + * merely advisory, not a guaranteed maximum; it only affects the space + * used for virtual-array buffers.) May be changed by outer application + * after creating the JPEG object. + */ + long max_memory_to_use; + + /* Maximum allocation request accepted by alloc_large. */ + long max_alloc_chunk; +}; + + +/* Routine signature for application-supplied marker processing methods. + * Need not pass marker code since it is stored in cinfo->unread_marker. + */ +typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); + + +/* Declarations for routines called by application. + * The JPP macro hides prototype parameters from compilers that can't cope. + * Note JPP requires double parentheses. + */ + +#ifdef HAVE_PROTOTYPES +#define JPP(arglist) arglist +#else +#define JPP(arglist) () +#endif + + +/* Short forms of external names for systems with brain-damaged linkers. + * We shorten external names to be unique in the first six letters, which + * is good enough for all known systems. + * (If your compiler itself needs names to be unique in less than 15 + * characters, you are out of luck. Get a better compiler.) + */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_std_error jStdError +#define jpeg_CreateCompress jCreaCompress +#define jpeg_CreateDecompress jCreaDecompress +#define jpeg_destroy_compress jDestCompress +#define jpeg_destroy_decompress jDestDecompress +#define jpeg_stdio_dest jStdDest +#define jpeg_stdio_src jStdSrc +#define jpeg_set_defaults jSetDefaults +#define jpeg_set_colorspace jSetColorspace +#define jpeg_default_colorspace jDefColorspace +#define jpeg_set_quality jSetQuality +#define jpeg_set_linear_quality jSetLQuality +#define jpeg_add_quant_table jAddQuantTable +#define jpeg_quality_scaling jQualityScaling +#define jpeg_simple_progression jSimProgress +#define jpeg_suppress_tables jSuppressTables +#define jpeg_alloc_quant_table jAlcQTable +#define jpeg_alloc_huff_table jAlcHTable +#define jpeg_start_compress jStrtCompress +#define jpeg_write_scanlines jWrtScanlines +#define jpeg_finish_compress jFinCompress +#define jpeg_write_raw_data jWrtRawData +#define jpeg_write_marker jWrtMarker +#define jpeg_write_m_header jWrtMHeader +#define jpeg_write_m_byte jWrtMByte +#define jpeg_write_tables jWrtTables +#define jpeg_read_header jReadHeader +#define jpeg_start_decompress jStrtDecompress +#define jpeg_read_scanlines jReadScanlines +#define jpeg_finish_decompress jFinDecompress +#define jpeg_read_raw_data jReadRawData +#define jpeg_has_multiple_scans jHasMultScn +#define jpeg_start_output jStrtOutput +#define jpeg_finish_output jFinOutput +#define jpeg_input_complete jInComplete +#define jpeg_new_colormap jNewCMap +#define jpeg_consume_input jConsumeInput +#define jpeg_calc_output_dimensions jCalcDimensions +#define jpeg_save_markers jSaveMarkers +#define jpeg_set_marker_processor jSetMarker +#define jpeg_read_coefficients jReadCoefs +#define jpeg_write_coefficients jWrtCoefs +#define jpeg_copy_critical_parameters jCopyCrit +#define jpeg_abort_compress jAbrtCompress +#define jpeg_abort_decompress jAbrtDecompress +#define jpeg_abort jAbort +#define jpeg_destroy jDestroy +#define jpeg_resync_to_restart jResyncRestart +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* Default error-management setup */ +EXTERN(struct jpeg_error_mgr *) jpeg_std_error + JPP((struct jpeg_error_mgr * err)); + +/* Initialization of JPEG compression objects. + * jpeg_create_compress() and jpeg_create_decompress() are the exported + * names that applications should call. These expand to calls on + * jpeg_CreateCompress and jpeg_CreateDecompress with additional information + * passed for version mismatch checking. + * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. + */ +#define jpeg_create_compress(cinfo) \ + jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_compress_struct)) +#define jpeg_create_decompress(cinfo) \ + jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_decompress_struct)) +EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, + int version, size_t structsize)); +EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, + int version, size_t structsize)); +/* Destruction of JPEG compression objects */ +EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); + +/* Standard data source and destination managers: stdio streams. */ +/* Caller is responsible for opening the file before and closing after. */ +EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); +EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); + +/* Default parameter setup for compression */ +EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); +/* Compression parameter setup aids */ +EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, + J_COLOR_SPACE colorspace)); +EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, + boolean force_baseline)); +EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, + int scale_factor, + boolean force_baseline)); +EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, + const unsigned int *basic_table, + int scale_factor, + boolean force_baseline)); +EXTERN(int) jpeg_quality_scaling JPP((int quality)); +EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, + boolean suppress)); +EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); +EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); + +/* Main entry points for compression */ +EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, + boolean write_all_tables)); +EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION num_lines)); +EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); + +/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION num_lines)); + +/* Write a special marker. See libjpeg.doc concerning safe usage. */ +EXTERN(void) jpeg_write_marker + JPP((j_compress_ptr cinfo, int marker, + const JOCTET * dataptr, unsigned int datalen)); +/* Same, but piecemeal. */ +EXTERN(void) jpeg_write_m_header + JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); +EXTERN(void) jpeg_write_m_byte + JPP((j_compress_ptr cinfo, int val)); + +/* Alternate compression function: just write an abbreviated table file */ +EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); + +/* Decompression startup: read start of JPEG datastream to see what's there */ +EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, + boolean require_image)); +/* Return value is one of: */ +#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ +#define JPEG_HEADER_OK 1 /* Found valid image datastream */ +#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ +/* If you pass require_image = TRUE (normal case), you need not check for + * a TABLES_ONLY return code; an abbreviated file will cause an error exit. + * JPEG_SUSPENDED is only possible if you use a data source module that can + * give a suspension return (the stdio source module doesn't). + */ + +/* Main entry points for decompression */ +EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); +EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION max_lines)); +EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); + +/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION max_lines)); + +/* Additional entry points for buffered-image mode. */ +EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, + int scan_number)); +EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); +EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); +/* Return value is one of: */ +/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ +#define JPEG_REACHED_SOS 1 /* Reached start of new scan */ +#define JPEG_REACHED_EOI 2 /* Reached end of image */ +#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ +#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ + +/* Precalculate output dimensions for current decompression parameters. */ +EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); + +/* Control saving of COM and APPn markers into marker_list. */ +EXTERN(void) jpeg_save_markers + JPP((j_decompress_ptr cinfo, int marker_code, + unsigned int length_limit)); + +/* Install a special processing method for COM or APPn markers. */ +EXTERN(void) jpeg_set_marker_processor + JPP((j_decompress_ptr cinfo, int marker_code, + jpeg_marker_parser_method routine)); + +/* Read or write raw DCT coefficients --- useful for lossless transcoding. */ +EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, + jvirt_barray_ptr * coef_arrays)); +EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, + j_compress_ptr dstinfo)); + +/* If you choose to abort compression or decompression before completing + * jpeg_finish_(de)compress, then you need to clean up to release memory, + * temporary files, etc. You can just call jpeg_destroy_(de)compress + * if you're done with the JPEG object, but if you want to clean it up and + * reuse it, call this: + */ +EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); + +/* Generic versions of jpeg_abort and jpeg_destroy that work on either + * flavor of JPEG object. These may be more convenient in some places. + */ +EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); +EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); + +/* Default restart-marker-resync procedure for use by data source modules */ +EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, + int desired)); + + +/* These marker codes are exported since applications and data source modules + * are likely to want to use them. + */ + +#define JPEG_RST0 0xD0 /* RST0 marker code */ +#define JPEG_EOI 0xD9 /* EOI marker code */ +#define JPEG_APP0 0xE0 /* APP0 marker code */ +#define JPEG_COM 0xFE /* COM marker code */ + + +/* If we have a brain-damaged compiler that emits warnings (or worse, errors) + * for structure definitions that are never filled in, keep it quiet by + * supplying dummy definitions for the various substructures. + */ + +#ifdef INCOMPLETE_TYPES_BROKEN +#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ +struct jvirt_sarray_control { long dummy; }; +struct jvirt_barray_control { long dummy; }; +struct jpeg_comp_master { long dummy; }; +struct jpeg_c_main_controller { long dummy; }; +struct jpeg_c_prep_controller { long dummy; }; +struct jpeg_c_coef_controller { long dummy; }; +struct jpeg_marker_writer { long dummy; }; +struct jpeg_color_converter { long dummy; }; +struct jpeg_downsampler { long dummy; }; +struct jpeg_forward_dct { long dummy; }; +struct jpeg_entropy_encoder { long dummy; }; +struct jpeg_decomp_master { long dummy; }; +struct jpeg_d_main_controller { long dummy; }; +struct jpeg_d_coef_controller { long dummy; }; +struct jpeg_d_post_controller { long dummy; }; +struct jpeg_input_controller { long dummy; }; +struct jpeg_marker_reader { long dummy; }; +struct jpeg_entropy_decoder { long dummy; }; +struct jpeg_inverse_dct { long dummy; }; +struct jpeg_upsampler { long dummy; }; +struct jpeg_color_deconverter { long dummy; }; +struct jpeg_color_quantizer { long dummy; }; +#endif /* JPEG_INTERNALS */ +#endif /* INCOMPLETE_TYPES_BROKEN */ + + +/* + * The JPEG library modules define JPEG_INTERNALS before including this file. + * The internal structure declarations are read only when that is true. + * Applications using the library should not include jpegint.h, but may wish + * to include jerror.h. + */ + +#ifdef JPEG_INTERNALS +#include "jpegint.h" /* fetch private declarations */ +#include "jerror.h" /* fetch error codes too */ +#endif + +#endif /* JPEGLIB_H */ diff --git a/Build/source/extra/jpeg/jpegtran.1 b/Build/source/extra/jpeg/jpegtran.1 new file mode 100644 index 00000000000..6de18e2af96 --- /dev/null +++ b/Build/source/extra/jpeg/jpegtran.1 @@ -0,0 +1,238 @@ +.TH JPEGTRAN 1 "3 August 1997" +.SH NAME +jpegtran \- lossless transformation of JPEG files +.SH SYNOPSIS +.B jpegtran +[ +.I options +] +[ +.I filename +] +.LP +.SH DESCRIPTION +.LP +.B jpegtran +performs various useful transformations of JPEG files. +It can translate the coded representation from one variant of JPEG to another, +for example from baseline JPEG to progressive JPEG or vice versa. It can also +perform some rearrangements of the image data, for example turning an image +from landscape to portrait format by rotation. +.PP +.B jpegtran +works by rearranging the compressed data (DCT coefficients), without +ever fully decoding the image. Therefore, its transformations are lossless: +there is no image degradation at all, which would not be true if you used +.B djpeg +followed by +.B cjpeg +to accomplish the same conversion. But by the same token, +.B jpegtran +cannot perform lossy operations such as changing the image quality. +.PP +.B jpegtran +reads the named JPEG/JFIF file, or the standard input if no file is +named, and produces a JPEG/JFIF file on the standard output. +.SH OPTIONS +All switch names may be abbreviated; for example, +.B \-optimize +may be written +.B \-opt +or +.BR \-o . +Upper and lower case are equivalent. +British spellings are also accepted (e.g., +.BR \-optimise ), +though for brevity these are not mentioned below. +.PP +To specify the coded JPEG representation used in the output file, +.B jpegtran +accepts a subset of the switches recognized by +.BR cjpeg : +.TP +.B \-optimize +Perform optimization of entropy encoding parameters. +.TP +.B \-progressive +Create progressive JPEG file. +.TP +.BI \-restart " N" +Emit a JPEG restart marker every N MCU rows, or every N MCU blocks if "B" is +attached to the number. +.TP +.BI \-scans " file" +Use the scan script given in the specified text file. +.PP +See +.BR cjpeg (1) +for more details about these switches. +If you specify none of these switches, you get a plain baseline-JPEG output +file. The quality setting and so forth are determined by the input file. +.PP +The image can be losslessly transformed by giving one of these switches: +.TP +.B \-flip horizontal +Mirror image horizontally (left-right). +.TP +.B \-flip vertical +Mirror image vertically (top-bottom). +.TP +.B \-rotate 90 +Rotate image 90 degrees clockwise. +.TP +.B \-rotate 180 +Rotate image 180 degrees. +.TP +.B \-rotate 270 +Rotate image 270 degrees clockwise (or 90 ccw). +.TP +.B \-transpose +Transpose image (across UL-to-LR axis). +.TP +.B \-transverse +Transverse transpose (across UR-to-LL axis). +.PP +The transpose transformation has no restrictions regarding image dimensions. +The other transformations operate rather oddly if the image dimensions are not +a multiple of the iMCU size (usually 8 or 16 pixels), because they can only +transform complete blocks of DCT coefficient data in the desired way. +.PP +.BR jpegtran 's +default behavior when transforming an odd-size image is designed +to preserve exact reversibility and mathematical consistency of the +transformation set. As stated, transpose is able to flip the entire image +area. Horizontal mirroring leaves any partial iMCU column at the right edge +untouched, but is able to flip all rows of the image. Similarly, vertical +mirroring leaves any partial iMCU row at the bottom edge untouched, but is +able to flip all columns. The other transforms can be built up as sequences +of transpose and flip operations; for consistency, their actions on edge +pixels are defined to be the same as the end result of the corresponding +transpose-and-flip sequence. +.PP +For practical use, you may prefer to discard any untransformable edge pixels +rather than having a strange-looking strip along the right and/or bottom edges +of a transformed image. To do this, add the +.B \-trim +switch: +.TP +.B \-trim +Drop non-transformable edge blocks. +.PP +Obviously, a transformation with +.B \-trim +is not reversible, so strictly speaking +.B jpegtran +with this switch is not lossless. Also, the expected mathematical +equivalences between the transformations no longer hold. For example, +.B \-rot 270 -trim +trims only the bottom edge, but +.B \-rot 90 -trim +followed by +.B \-rot 180 -trim +trims both edges. +.PP +Another not-strictly-lossless transformation switch is: +.TP +.B \-grayscale +Force grayscale output. +.PP +This option discards the chrominance channels if the input image is YCbCr +(ie, a standard color JPEG), resulting in a grayscale JPEG file. The +luminance channel is preserved exactly, so this is a better method of reducing +to grayscale than decompression, conversion, and recompression. This switch +is particularly handy for fixing a monochrome picture that was mistakenly +encoded as a color JPEG. (In such a case, the space savings from getting rid +of the near-empty chroma channels won't be large; but the decoding time for +a grayscale JPEG is substantially less than that for a color JPEG.) +.PP +.B jpegtran +also recognizes these switches that control what to do with "extra" markers, +such as comment blocks: +.TP +.B \-copy none +Copy no extra markers from source file. This setting suppresses all +comments and other excess baggage present in the source file. +.TP +.B \-copy comments +Copy only comment markers. This setting copies comments from the source file, +but discards any other inessential data. +.TP +.B \-copy all +Copy all extra markers. This setting preserves miscellaneous markers +found in the source file, such as JFIF thumbnails and Photoshop settings. +In some files these extra markers can be sizable. +.PP +The default behavior is +.BR "\-copy comments" . +(Note: in IJG releases v6 and v6a, +.B jpegtran +always did the equivalent of +.BR "\-copy none" .) +.PP +Additional switches recognized by jpegtran are: +.TP +.BI \-maxmemory " N" +Set limit for amount of memory to use in processing large images. Value is +in thousands of bytes, or millions of bytes if "M" is attached to the +number. For example, +.B \-max 4m +selects 4000000 bytes. If more space is needed, temporary files will be used. +.TP +.BI \-outfile " name" +Send output image to the named file, not to standard output. +.TP +.B \-verbose +Enable debug printout. More +.BR \-v 's +give more output. Also, version information is printed at startup. +.TP +.B \-debug +Same as +.BR \-verbose . +.SH EXAMPLES +.LP +This example converts a baseline JPEG file to progressive form: +.IP +.B jpegtran \-progressive +.I foo.jpg +.B > +.I fooprog.jpg +.PP +This example rotates an image 90 degrees clockwise, discarding any +unrotatable edge pixels: +.IP +.B jpegtran \-rot 90 -trim +.I foo.jpg +.B > +.I foo90.jpg +.SH ENVIRONMENT +.TP +.B JPEGMEM +If this environment variable is set, its value is the default memory limit. +The value is specified as described for the +.B \-maxmemory +switch. +.B JPEGMEM +overrides the default value specified when the program was compiled, and +itself is overridden by an explicit +.BR \-maxmemory . +.SH SEE ALSO +.BR cjpeg (1), +.BR djpeg (1), +.BR rdjpgcom (1), +.BR wrjpgcom (1) +.br +Wallace, Gregory K. "The JPEG Still Picture Compression Standard", +Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44. +.SH AUTHOR +Independent JPEG Group +.SH BUGS +Arithmetic coding is not supported for legal reasons. +.PP +The transform options can't transform odd-size images perfectly. Use +.B \-trim +if you don't like the results without it. +.PP +The entire image is read into memory and then written out again, even in +cases where this isn't really necessary. Expect swapping on large images, +especially when using the more complex transform options. diff --git a/Build/source/extra/jpeg/jpegtran.c b/Build/source/extra/jpeg/jpegtran.c new file mode 100644 index 00000000000..20ef111b3f5 --- /dev/null +++ b/Build/source/extra/jpeg/jpegtran.c @@ -0,0 +1,504 @@ +/* + * jpegtran.c + * + * Copyright (C) 1995-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a command-line user interface for JPEG transcoding. + * It is very similar to cjpeg.c, but provides lossless transcoding between + * different JPEG file formats. It also provides some lossless and sort-of- + * lossless transformations of JPEG data. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ +#include "transupp.h" /* Support routines for jpegtran */ +#include "jversion.h" /* for version message */ + +#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ +#ifdef __MWERKS__ +#include /* Metrowerks needs this */ +#include /* ... and this */ +#endif +#ifdef THINK_C +#include /* Think declares it here */ +#endif +#endif + + +/* + * Argument-parsing code. + * The switch parser is designed to be useful with DOS-style command line + * syntax, ie, intermixed switches and file names, where only the switches + * to the left of a given file name affect processing of that file. + * The main program in this file doesn't actually use this capability... + */ + + +static const char * progname; /* program name for error messages */ +static char * outfilename; /* for -outfile switch */ +static JCOPY_OPTION copyoption; /* -copy switch */ +static jpeg_transform_info transformoption; /* image transformation options */ + + +LOCAL(void) +usage (void) +/* complain about bad command line */ +{ + fprintf(stderr, "usage: %s [switches] ", progname); +#ifdef TWO_FILE_COMMANDLINE + fprintf(stderr, "inputfile outputfile\n"); +#else + fprintf(stderr, "[inputfile]\n"); +#endif + + fprintf(stderr, "Switches (names may be abbreviated):\n"); + fprintf(stderr, " -copy none Copy no extra markers from source file\n"); + fprintf(stderr, " -copy comments Copy only comment markers (default)\n"); + fprintf(stderr, " -copy all Copy all extra markers\n"); +#ifdef ENTROPY_OPT_SUPPORTED + fprintf(stderr, " -optimize Optimize Huffman table (smaller file, but slow compression)\n"); +#endif +#ifdef C_PROGRESSIVE_SUPPORTED + fprintf(stderr, " -progressive Create progressive JPEG file\n"); +#endif +#if TRANSFORMS_SUPPORTED + fprintf(stderr, "Switches for modifying the image:\n"); + fprintf(stderr, " -grayscale Reduce to grayscale (omit color data)\n"); + fprintf(stderr, " -flip [horizontal|vertical] Mirror image (left-right or top-bottom)\n"); + fprintf(stderr, " -rotate [90|180|270] Rotate image (degrees clockwise)\n"); + fprintf(stderr, " -transpose Transpose image\n"); + fprintf(stderr, " -transverse Transverse transpose image\n"); + fprintf(stderr, " -trim Drop non-transformable edge blocks\n"); +#endif /* TRANSFORMS_SUPPORTED */ + fprintf(stderr, "Switches for advanced users:\n"); + fprintf(stderr, " -restart N Set restart interval in rows, or in blocks with B\n"); + fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n"); + fprintf(stderr, " -outfile name Specify name for output file\n"); + fprintf(stderr, " -verbose or -debug Emit debug output\n"); + fprintf(stderr, "Switches for wizards:\n"); +#ifdef C_ARITH_CODING_SUPPORTED + fprintf(stderr, " -arithmetic Use arithmetic coding\n"); +#endif +#ifdef C_MULTISCAN_FILES_SUPPORTED + fprintf(stderr, " -scans file Create multi-scan JPEG per script file\n"); +#endif + exit(EXIT_FAILURE); +} + + +LOCAL(void) +select_transform (JXFORM_CODE transform) +/* Silly little routine to detect multiple transform options, + * which we can't handle. + */ +{ +#if TRANSFORMS_SUPPORTED + if (transformoption.transform == JXFORM_NONE || + transformoption.transform == transform) { + transformoption.transform = transform; + } else { + fprintf(stderr, "%s: can only do one image transformation at a time\n", + progname); + usage(); + } +#else + fprintf(stderr, "%s: sorry, image transformation was not compiled\n", + progname); + exit(EXIT_FAILURE); +#endif +} + + +LOCAL(int) +parse_switches (j_compress_ptr cinfo, int argc, char **argv, + int last_file_arg_seen, boolean for_real) +/* Parse optional switches. + * Returns argv[] index of first file-name argument (== argc if none). + * Any file names with indexes <= last_file_arg_seen are ignored; + * they have presumably been processed in a previous iteration. + * (Pass 0 for last_file_arg_seen on the first or only iteration.) + * for_real is FALSE on the first (dummy) pass; we may skip any expensive + * processing. + */ +{ + int argn; + char * arg; + boolean simple_progressive; + char * scansarg = NULL; /* saves -scans parm if any */ + + /* Set up default JPEG parameters. */ + simple_progressive = FALSE; + outfilename = NULL; + copyoption = JCOPYOPT_DEFAULT; + transformoption.transform = JXFORM_NONE; + transformoption.trim = FALSE; + transformoption.force_grayscale = FALSE; + cinfo->err->trace_level = 0; + + /* Scan command line options, adjust parameters */ + + for (argn = 1; argn < argc; argn++) { + arg = argv[argn]; + if (*arg != '-') { + /* Not a switch, must be a file name argument */ + if (argn <= last_file_arg_seen) { + outfilename = NULL; /* -outfile applies to just one input file */ + continue; /* ignore this name if previously processed */ + } + break; /* else done parsing switches */ + } + arg++; /* advance past switch marker character */ + + if (keymatch(arg, "arithmetic", 1)) { + /* Use arithmetic coding. */ +#ifdef C_ARITH_CODING_SUPPORTED + cinfo->arith_code = TRUE; +#else + fprintf(stderr, "%s: sorry, arithmetic coding not supported\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "copy", 1)) { + /* Select which extra markers to copy. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (keymatch(argv[argn], "none", 1)) { + copyoption = JCOPYOPT_NONE; + } else if (keymatch(argv[argn], "comments", 1)) { + copyoption = JCOPYOPT_COMMENTS; + } else if (keymatch(argv[argn], "all", 1)) { + copyoption = JCOPYOPT_ALL; + } else + usage(); + + } else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) { + /* Enable debug printouts. */ + /* On first -d, print version identification */ + static boolean printed_version = FALSE; + + if (! printed_version) { + fprintf(stderr, "Independent JPEG Group's JPEGTRAN, version %s\n%s\n", + JVERSION, JCOPYRIGHT); + printed_version = TRUE; + } + cinfo->err->trace_level++; + + } else if (keymatch(arg, "flip", 1)) { + /* Mirror left-right or top-bottom. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (keymatch(argv[argn], "horizontal", 1)) + select_transform(JXFORM_FLIP_H); + else if (keymatch(argv[argn], "vertical", 1)) + select_transform(JXFORM_FLIP_V); + else + usage(); + + } else if (keymatch(arg, "grayscale", 1) || keymatch(arg, "greyscale",1)) { + /* Force to grayscale. */ +#if TRANSFORMS_SUPPORTED + transformoption.force_grayscale = TRUE; +#else + select_transform(JXFORM_NONE); /* force an error */ +#endif + + } else if (keymatch(arg, "maxmemory", 3)) { + /* Maximum memory in Kb (or Mb with 'm'). */ + long lval; + char ch = 'x'; + + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) + usage(); + if (ch == 'm' || ch == 'M') + lval *= 1000L; + cinfo->mem->max_memory_to_use = lval * 1000L; + + } else if (keymatch(arg, "optimize", 1) || keymatch(arg, "optimise", 1)) { + /* Enable entropy parm optimization. */ +#ifdef ENTROPY_OPT_SUPPORTED + cinfo->optimize_coding = TRUE; +#else + fprintf(stderr, "%s: sorry, entropy optimization was not compiled\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "outfile", 4)) { + /* Set output file name. */ + if (++argn >= argc) /* advance to next argument */ + usage(); + outfilename = argv[argn]; /* save it away for later use */ + + } else if (keymatch(arg, "progressive", 1)) { + /* Select simple progressive mode. */ +#ifdef C_PROGRESSIVE_SUPPORTED + simple_progressive = TRUE; + /* We must postpone execution until num_components is known. */ +#else + fprintf(stderr, "%s: sorry, progressive output was not compiled\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "restart", 1)) { + /* Restart interval in MCU rows (or in MCUs with 'b'). */ + long lval; + char ch = 'x'; + + if (++argn >= argc) /* advance to next argument */ + usage(); + if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) + usage(); + if (lval < 0 || lval > 65535L) + usage(); + if (ch == 'b' || ch == 'B') { + cinfo->restart_interval = (unsigned int) lval; + cinfo->restart_in_rows = 0; /* else prior '-restart n' overrides me */ + } else { + cinfo->restart_in_rows = (int) lval; + /* restart_interval will be computed during startup */ + } + + } else if (keymatch(arg, "rotate", 2)) { + /* Rotate 90, 180, or 270 degrees (measured clockwise). */ + if (++argn >= argc) /* advance to next argument */ + usage(); + if (keymatch(argv[argn], "90", 2)) + select_transform(JXFORM_ROT_90); + else if (keymatch(argv[argn], "180", 3)) + select_transform(JXFORM_ROT_180); + else if (keymatch(argv[argn], "270", 3)) + select_transform(JXFORM_ROT_270); + else + usage(); + + } else if (keymatch(arg, "scans", 1)) { + /* Set scan script. */ +#ifdef C_MULTISCAN_FILES_SUPPORTED + if (++argn >= argc) /* advance to next argument */ + usage(); + scansarg = argv[argn]; + /* We must postpone reading the file in case -progressive appears. */ +#else + fprintf(stderr, "%s: sorry, multi-scan output was not compiled\n", + progname); + exit(EXIT_FAILURE); +#endif + + } else if (keymatch(arg, "transpose", 1)) { + /* Transpose (across UL-to-LR axis). */ + select_transform(JXFORM_TRANSPOSE); + + } else if (keymatch(arg, "transverse", 6)) { + /* Transverse transpose (across UR-to-LL axis). */ + select_transform(JXFORM_TRANSVERSE); + + } else if (keymatch(arg, "trim", 3)) { + /* Trim off any partial edge MCUs that the transform can't handle. */ + transformoption.trim = TRUE; + + } else { + usage(); /* bogus switch */ + } + } + + /* Post-switch-scanning cleanup */ + + if (for_real) { + +#ifdef C_PROGRESSIVE_SUPPORTED + if (simple_progressive) /* process -progressive; -scans can override */ + jpeg_simple_progression(cinfo); +#endif + +#ifdef C_MULTISCAN_FILES_SUPPORTED + if (scansarg != NULL) /* process -scans if it was present */ + if (! read_scan_script(cinfo, scansarg)) + usage(); +#endif + } + + return argn; /* return index of next arg (file name) */ +} + + +/* + * The main program. + */ + +int +main (int argc, char **argv) +{ + struct jpeg_decompress_struct srcinfo; + struct jpeg_compress_struct dstinfo; + struct jpeg_error_mgr jsrcerr, jdsterr; +#ifdef PROGRESS_REPORT + struct cdjpeg_progress_mgr progress; +#endif + jvirt_barray_ptr * src_coef_arrays; + jvirt_barray_ptr * dst_coef_arrays; + int file_index; + FILE * input_file; + FILE * output_file; + + /* On Mac, fetch a command line. */ +#ifdef USE_CCOMMAND + argc = ccommand(&argv); +#endif + + progname = argv[0]; + if (progname == NULL || progname[0] == 0) + progname = "jpegtran"; /* in case C library doesn't provide it */ + + /* Initialize the JPEG decompression object with default error handling. */ + srcinfo.err = jpeg_std_error(&jsrcerr); + jpeg_create_decompress(&srcinfo); + /* Initialize the JPEG compression object with default error handling. */ + dstinfo.err = jpeg_std_error(&jdsterr); + jpeg_create_compress(&dstinfo); + + /* Now safe to enable signal catcher. + * Note: we assume only the decompression object will have virtual arrays. + */ +#ifdef NEED_SIGNAL_CATCHER + enable_signal_catcher((j_common_ptr) &srcinfo); +#endif + + /* Scan command line to find file names. + * It is convenient to use just one switch-parsing routine, but the switch + * values read here are mostly ignored; we will rescan the switches after + * opening the input file. Also note that most of the switches affect the + * destination JPEG object, so we parse into that and then copy over what + * needs to affects the source too. + */ + + file_index = parse_switches(&dstinfo, argc, argv, 0, FALSE); + jsrcerr.trace_level = jdsterr.trace_level; + srcinfo.mem->max_memory_to_use = dstinfo.mem->max_memory_to_use; + +#ifdef TWO_FILE_COMMANDLINE + /* Must have either -outfile switch or explicit output file name */ + if (outfilename == NULL) { + if (file_index != argc-2) { + fprintf(stderr, "%s: must name one input and one output file\n", + progname); + usage(); + } + outfilename = argv[file_index+1]; + } else { + if (file_index != argc-1) { + fprintf(stderr, "%s: must name one input and one output file\n", + progname); + usage(); + } + } +#else + /* Unix style: expect zero or one file name */ + if (file_index < argc-1) { + fprintf(stderr, "%s: only one input file\n", progname); + usage(); + } +#endif /* TWO_FILE_COMMANDLINE */ + + /* Open the input file. */ + if (file_index < argc) { + if ((input_file = fopen(argv[file_index], READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[file_index]); + exit(EXIT_FAILURE); + } + } else { + /* default input file is stdin */ + input_file = read_stdin(); + } + + /* Open the output file. */ + if (outfilename != NULL) { + if ((output_file = fopen(outfilename, WRITE_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, outfilename); + exit(EXIT_FAILURE); + } + } else { + /* default output file is stdout */ + output_file = write_stdout(); + } + +#ifdef PROGRESS_REPORT + start_progress_monitor((j_common_ptr) &dstinfo, &progress); +#endif + + /* Specify data source for decompression */ + jpeg_stdio_src(&srcinfo, input_file); + + /* Enable saving of extra markers that we want to copy */ + jcopy_markers_setup(&srcinfo, copyoption); + + /* Read file header */ + (void) jpeg_read_header(&srcinfo, TRUE); + + /* Any space needed by a transform option must be requested before + * jpeg_read_coefficients so that memory allocation will be done right. + */ +#if TRANSFORMS_SUPPORTED + jtransform_request_workspace(&srcinfo, &transformoption); +#endif + + /* Read source file as DCT coefficients */ + src_coef_arrays = jpeg_read_coefficients(&srcinfo); + + /* Initialize destination compression parameters from source values */ + jpeg_copy_critical_parameters(&srcinfo, &dstinfo); + + /* Adjust destination parameters if required by transform options; + * also find out which set of coefficient arrays will hold the output. + */ +#if TRANSFORMS_SUPPORTED + dst_coef_arrays = jtransform_adjust_parameters(&srcinfo, &dstinfo, + src_coef_arrays, + &transformoption); +#else + dst_coef_arrays = src_coef_arrays; +#endif + + /* Adjust default compression parameters by re-parsing the options */ + file_index = parse_switches(&dstinfo, argc, argv, 0, TRUE); + + /* Specify data destination for compression */ + jpeg_stdio_dest(&dstinfo, output_file); + + /* Start compressor (note no image data is actually written here) */ + jpeg_write_coefficients(&dstinfo, dst_coef_arrays); + + /* Copy to the output file any extra markers that we want to preserve */ + jcopy_markers_execute(&srcinfo, &dstinfo, copyoption); + + /* Execute image transformation, if any */ +#if TRANSFORMS_SUPPORTED + jtransform_execute_transformation(&srcinfo, &dstinfo, + src_coef_arrays, + &transformoption); +#endif + + /* Finish compression and release memory */ + jpeg_finish_compress(&dstinfo); + jpeg_destroy_compress(&dstinfo); + (void) jpeg_finish_decompress(&srcinfo); + jpeg_destroy_decompress(&srcinfo); + + /* Close files, if we opened them */ + if (input_file != stdin) + fclose(input_file); + if (output_file != stdout) + fclose(output_file); + +#ifdef PROGRESS_REPORT + end_progress_monitor((j_common_ptr) &dstinfo); +#endif + + /* All done. */ + exit(jsrcerr.num_warnings + jdsterr.num_warnings ?EXIT_WARNING:EXIT_SUCCESS); + return 0; /* suppress no-return-value warnings */ +} diff --git a/Build/source/extra/jpeg/jquant1.c b/Build/source/extra/jpeg/jquant1.c new file mode 100644 index 00000000000..b2f96aa15d2 --- /dev/null +++ b/Build/source/extra/jpeg/jquant1.c @@ -0,0 +1,856 @@ +/* + * jquant1.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains 1-pass color quantization (color mapping) routines. + * These routines provide mapping to a fixed color map using equally spaced + * color values. Optional Floyd-Steinberg or ordered dithering is available. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + +#ifdef QUANT_1PASS_SUPPORTED + + +/* + * The main purpose of 1-pass quantization is to provide a fast, if not very + * high quality, colormapped output capability. A 2-pass quantizer usually + * gives better visual quality; however, for quantized grayscale output this + * quantizer is perfectly adequate. Dithering is highly recommended with this + * quantizer, though you can turn it off if you really want to. + * + * In 1-pass quantization the colormap must be chosen in advance of seeing the + * image. We use a map consisting of all combinations of Ncolors[i] color + * values for the i'th component. The Ncolors[] values are chosen so that + * their product, the total number of colors, is no more than that requested. + * (In most cases, the product will be somewhat less.) + * + * Since the colormap is orthogonal, the representative value for each color + * component can be determined without considering the other components; + * then these indexes can be combined into a colormap index by a standard + * N-dimensional-array-subscript calculation. Most of the arithmetic involved + * can be precalculated and stored in the lookup table colorindex[]. + * colorindex[i][j] maps pixel value j in component i to the nearest + * representative value (grid plane) for that component; this index is + * multiplied by the array stride for component i, so that the + * index of the colormap entry closest to a given pixel value is just + * sum( colorindex[component-number][pixel-component-value] ) + * Aside from being fast, this scheme allows for variable spacing between + * representative values with no additional lookup cost. + * + * If gamma correction has been applied in color conversion, it might be wise + * to adjust the color grid spacing so that the representative colors are + * equidistant in linear space. At this writing, gamma correction is not + * implemented by jdcolor, so nothing is done here. + */ + + +/* Declarations for ordered dithering. + * + * We use a standard 16x16 ordered dither array. The basic concept of ordered + * dithering is described in many references, for instance Dale Schumacher's + * chapter II.2 of Graphics Gems II (James Arvo, ed. Academic Press, 1991). + * In place of Schumacher's comparisons against a "threshold" value, we add a + * "dither" value to the input pixel and then round the result to the nearest + * output value. The dither value is equivalent to (0.5 - threshold) times + * the distance between output values. For ordered dithering, we assume that + * the output colors are equally spaced; if not, results will probably be + * worse, since the dither may be too much or too little at a given point. + * + * The normal calculation would be to form pixel value + dither, range-limit + * this to 0..MAXJSAMPLE, and then index into the colorindex table as usual. + * We can skip the separate range-limiting step by extending the colorindex + * table in both directions. + */ + +#define ODITHER_SIZE 16 /* dimension of dither matrix */ +/* NB: if ODITHER_SIZE is not a power of 2, ODITHER_MASK uses will break */ +#define ODITHER_CELLS (ODITHER_SIZE*ODITHER_SIZE) /* # cells in matrix */ +#define ODITHER_MASK (ODITHER_SIZE-1) /* mask for wrapping around counters */ + +typedef int ODITHER_MATRIX[ODITHER_SIZE][ODITHER_SIZE]; +typedef int (*ODITHER_MATRIX_PTR)[ODITHER_SIZE]; + +static const UINT8 base_dither_matrix[ODITHER_SIZE][ODITHER_SIZE] = { + /* Bayer's order-4 dither array. Generated by the code given in + * Stephen Hawley's article "Ordered Dithering" in Graphics Gems I. + * The values in this array must range from 0 to ODITHER_CELLS-1. + */ + { 0,192, 48,240, 12,204, 60,252, 3,195, 51,243, 15,207, 63,255 }, + { 128, 64,176,112,140, 76,188,124,131, 67,179,115,143, 79,191,127 }, + { 32,224, 16,208, 44,236, 28,220, 35,227, 19,211, 47,239, 31,223 }, + { 160, 96,144, 80,172,108,156, 92,163, 99,147, 83,175,111,159, 95 }, + { 8,200, 56,248, 4,196, 52,244, 11,203, 59,251, 7,199, 55,247 }, + { 136, 72,184,120,132, 68,180,116,139, 75,187,123,135, 71,183,119 }, + { 40,232, 24,216, 36,228, 20,212, 43,235, 27,219, 39,231, 23,215 }, + { 168,104,152, 88,164,100,148, 84,171,107,155, 91,167,103,151, 87 }, + { 2,194, 50,242, 14,206, 62,254, 1,193, 49,241, 13,205, 61,253 }, + { 130, 66,178,114,142, 78,190,126,129, 65,177,113,141, 77,189,125 }, + { 34,226, 18,210, 46,238, 30,222, 33,225, 17,209, 45,237, 29,221 }, + { 162, 98,146, 82,174,110,158, 94,161, 97,145, 81,173,109,157, 93 }, + { 10,202, 58,250, 6,198, 54,246, 9,201, 57,249, 5,197, 53,245 }, + { 138, 74,186,122,134, 70,182,118,137, 73,185,121,133, 69,181,117 }, + { 42,234, 26,218, 38,230, 22,214, 41,233, 25,217, 37,229, 21,213 }, + { 170,106,154, 90,166,102,150, 86,169,105,153, 89,165,101,149, 85 } +}; + + +/* Declarations for Floyd-Steinberg dithering. + * + * Errors are accumulated into the array fserrors[], at a resolution of + * 1/16th of a pixel count. The error at a given pixel is propagated + * to its not-yet-processed neighbors using the standard F-S fractions, + * ... (here) 7/16 + * 3/16 5/16 1/16 + * We work left-to-right on even rows, right-to-left on odd rows. + * + * We can get away with a single array (holding one row's worth of errors) + * by using it to store the current row's errors at pixel columns not yet + * processed, but the next row's errors at columns already processed. We + * need only a few extra variables to hold the errors immediately around the + * current column. (If we are lucky, those variables are in registers, but + * even if not, they're probably cheaper to access than array elements are.) + * + * The fserrors[] array is indexed [component#][position]. + * We provide (#columns + 2) entries per component; the extra entry at each + * end saves us from special-casing the first and last pixels. + * + * Note: on a wide image, we might not have enough room in a PC's near data + * segment to hold the error array; so it is allocated with alloc_large. + */ + +#if BITS_IN_JSAMPLE == 8 +typedef INT16 FSERROR; /* 16 bits should be enough */ +typedef int LOCFSERROR; /* use 'int' for calculation temps */ +#else +typedef INT32 FSERROR; /* may need more than 16 bits */ +typedef INT32 LOCFSERROR; /* be sure calculation temps are big enough */ +#endif + +typedef FSERROR FAR *FSERRPTR; /* pointer to error array (in FAR storage!) */ + + +/* Private subobject */ + +#define MAX_Q_COMPS 4 /* max components I can handle */ + +typedef struct { + struct jpeg_color_quantizer pub; /* public fields */ + + /* Initially allocated colormap is saved here */ + JSAMPARRAY sv_colormap; /* The color map as a 2-D pixel array */ + int sv_actual; /* number of entries in use */ + + JSAMPARRAY colorindex; /* Precomputed mapping for speed */ + /* colorindex[i][j] = index of color closest to pixel value j in component i, + * premultiplied as described above. Since colormap indexes must fit into + * JSAMPLEs, the entries of this array will too. + */ + boolean is_padded; /* is the colorindex padded for odither? */ + + int Ncolors[MAX_Q_COMPS]; /* # of values alloced to each component */ + + /* Variables for ordered dithering */ + int row_index; /* cur row's vertical index in dither matrix */ + ODITHER_MATRIX_PTR odither[MAX_Q_COMPS]; /* one dither array per component */ + + /* Variables for Floyd-Steinberg dithering */ + FSERRPTR fserrors[MAX_Q_COMPS]; /* accumulated errors */ + boolean on_odd_row; /* flag to remember which row we are on */ +} my_cquantizer; + +typedef my_cquantizer * my_cquantize_ptr; + + +/* + * Policy-making subroutines for create_colormap and create_colorindex. + * These routines determine the colormap to be used. The rest of the module + * only assumes that the colormap is orthogonal. + * + * * select_ncolors decides how to divvy up the available colors + * among the components. + * * output_value defines the set of representative values for a component. + * * largest_input_value defines the mapping from input values to + * representative values for a component. + * Note that the latter two routines may impose different policies for + * different components, though this is not currently done. + */ + + +LOCAL(int) +select_ncolors (j_decompress_ptr cinfo, int Ncolors[]) +/* Determine allocation of desired colors to components, */ +/* and fill in Ncolors[] array to indicate choice. */ +/* Return value is total number of colors (product of Ncolors[] values). */ +{ + int nc = cinfo->out_color_components; /* number of color components */ + int max_colors = cinfo->desired_number_of_colors; + int total_colors, iroot, i, j; + boolean changed; + long temp; + static const int RGB_order[3] = { RGB_GREEN, RGB_RED, RGB_BLUE }; + + /* We can allocate at least the nc'th root of max_colors per component. */ + /* Compute floor(nc'th root of max_colors). */ + iroot = 1; + do { + iroot++; + temp = iroot; /* set temp = iroot ** nc */ + for (i = 1; i < nc; i++) + temp *= iroot; + } while (temp <= (long) max_colors); /* repeat till iroot exceeds root */ + iroot--; /* now iroot = floor(root) */ + + /* Must have at least 2 color values per component */ + if (iroot < 2) + ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, (int) temp); + + /* Initialize to iroot color values for each component */ + total_colors = 1; + for (i = 0; i < nc; i++) { + Ncolors[i] = iroot; + total_colors *= iroot; + } + /* We may be able to increment the count for one or more components without + * exceeding max_colors, though we know not all can be incremented. + * Sometimes, the first component can be incremented more than once! + * (Example: for 16 colors, we start at 2*2*2, go to 3*2*2, then 4*2*2.) + * In RGB colorspace, try to increment G first, then R, then B. + */ + do { + changed = FALSE; + for (i = 0; i < nc; i++) { + j = (cinfo->out_color_space == JCS_RGB ? RGB_order[i] : i); + /* calculate new total_colors if Ncolors[j] is incremented */ + temp = total_colors / Ncolors[j]; + temp *= Ncolors[j]+1; /* done in long arith to avoid oflo */ + if (temp > (long) max_colors) + break; /* won't fit, done with this pass */ + Ncolors[j]++; /* OK, apply the increment */ + total_colors = (int) temp; + changed = TRUE; + } + } while (changed); + + return total_colors; +} + + +LOCAL(int) +output_value (j_decompress_ptr cinfo, int ci, int j, int maxj) +/* Return j'th output value, where j will range from 0 to maxj */ +/* The output values must fall in 0..MAXJSAMPLE in increasing order */ +{ + /* We always provide values 0 and MAXJSAMPLE for each component; + * any additional values are equally spaced between these limits. + * (Forcing the upper and lower values to the limits ensures that + * dithering can't produce a color outside the selected gamut.) + */ + return (int) (((INT32) j * MAXJSAMPLE + maxj/2) / maxj); +} + + +LOCAL(int) +largest_input_value (j_decompress_ptr cinfo, int ci, int j, int maxj) +/* Return largest input value that should map to j'th output value */ +/* Must have largest(j=0) >= 0, and largest(j=maxj) >= MAXJSAMPLE */ +{ + /* Breakpoints are halfway between values returned by output_value */ + return (int) (((INT32) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj)); +} + + +/* + * Create the colormap. + */ + +LOCAL(void) +create_colormap (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + JSAMPARRAY colormap; /* Created colormap */ + int total_colors; /* Number of distinct output colors */ + int i,j,k, nci, blksize, blkdist, ptr, val; + + /* Select number of colors for each component */ + total_colors = select_ncolors(cinfo, cquantize->Ncolors); + + /* Report selected color counts */ + if (cinfo->out_color_components == 3) + TRACEMS4(cinfo, 1, JTRC_QUANT_3_NCOLORS, + total_colors, cquantize->Ncolors[0], + cquantize->Ncolors[1], cquantize->Ncolors[2]); + else + TRACEMS1(cinfo, 1, JTRC_QUANT_NCOLORS, total_colors); + + /* Allocate and fill in the colormap. */ + /* The colors are ordered in the map in standard row-major order, */ + /* i.e. rightmost (highest-indexed) color changes most rapidly. */ + + colormap = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) total_colors, (JDIMENSION) cinfo->out_color_components); + + /* blksize is number of adjacent repeated entries for a component */ + /* blkdist is distance between groups of identical entries for a component */ + blkdist = total_colors; + + for (i = 0; i < cinfo->out_color_components; i++) { + /* fill in colormap entries for i'th color component */ + nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ + blksize = blkdist / nci; + for (j = 0; j < nci; j++) { + /* Compute j'th output value (out of nci) for component */ + val = output_value(cinfo, i, j, nci-1); + /* Fill in all colormap entries that have this value of this component */ + for (ptr = j * blksize; ptr < total_colors; ptr += blkdist) { + /* fill in blksize entries beginning at ptr */ + for (k = 0; k < blksize; k++) + colormap[i][ptr+k] = (JSAMPLE) val; + } + } + blkdist = blksize; /* blksize of this color is blkdist of next */ + } + + /* Save the colormap in private storage, + * where it will survive color quantization mode changes. + */ + cquantize->sv_colormap = colormap; + cquantize->sv_actual = total_colors; +} + + +/* + * Create the color index table. + */ + +LOCAL(void) +create_colorindex (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + JSAMPROW indexptr; + int i,j,k, nci, blksize, val, pad; + + /* For ordered dither, we pad the color index tables by MAXJSAMPLE in + * each direction (input index values can be -MAXJSAMPLE .. 2*MAXJSAMPLE). + * This is not necessary in the other dithering modes. However, we + * flag whether it was done in case user changes dithering mode. + */ + if (cinfo->dither_mode == JDITHER_ORDERED) { + pad = MAXJSAMPLE*2; + cquantize->is_padded = TRUE; + } else { + pad = 0; + cquantize->is_padded = FALSE; + } + + cquantize->colorindex = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) (MAXJSAMPLE+1 + pad), + (JDIMENSION) cinfo->out_color_components); + + /* blksize is number of adjacent repeated entries for a component */ + blksize = cquantize->sv_actual; + + for (i = 0; i < cinfo->out_color_components; i++) { + /* fill in colorindex entries for i'th color component */ + nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ + blksize = blksize / nci; + + /* adjust colorindex pointers to provide padding at negative indexes. */ + if (pad) + cquantize->colorindex[i] += MAXJSAMPLE; + + /* in loop, val = index of current output value, */ + /* and k = largest j that maps to current val */ + indexptr = cquantize->colorindex[i]; + val = 0; + k = largest_input_value(cinfo, i, 0, nci-1); + for (j = 0; j <= MAXJSAMPLE; j++) { + while (j > k) /* advance val if past boundary */ + k = largest_input_value(cinfo, i, ++val, nci-1); + /* premultiply so that no multiplication needed in main processing */ + indexptr[j] = (JSAMPLE) (val * blksize); + } + /* Pad at both ends if necessary */ + if (pad) + for (j = 1; j <= MAXJSAMPLE; j++) { + indexptr[-j] = indexptr[0]; + indexptr[MAXJSAMPLE+j] = indexptr[MAXJSAMPLE]; + } + } +} + + +/* + * Create an ordered-dither array for a component having ncolors + * distinct output values. + */ + +LOCAL(ODITHER_MATRIX_PTR) +make_odither_array (j_decompress_ptr cinfo, int ncolors) +{ + ODITHER_MATRIX_PTR odither; + int j,k; + INT32 num,den; + + odither = (ODITHER_MATRIX_PTR) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(ODITHER_MATRIX)); + /* The inter-value distance for this color is MAXJSAMPLE/(ncolors-1). + * Hence the dither value for the matrix cell with fill order f + * (f=0..N-1) should be (N-1-2*f)/(2*N) * MAXJSAMPLE/(ncolors-1). + * On 16-bit-int machine, be careful to avoid overflow. + */ + den = 2 * ODITHER_CELLS * ((INT32) (ncolors - 1)); + for (j = 0; j < ODITHER_SIZE; j++) { + for (k = 0; k < ODITHER_SIZE; k++) { + num = ((INT32) (ODITHER_CELLS-1 - 2*((int)base_dither_matrix[j][k]))) + * MAXJSAMPLE; + /* Ensure round towards zero despite C's lack of consistency + * about rounding negative values in integer division... + */ + odither[j][k] = (int) (num<0 ? -((-num)/den) : num/den); + } + } + return odither; +} + + +/* + * Create the ordered-dither tables. + * Components having the same number of representative colors may + * share a dither table. + */ + +LOCAL(void) +create_odither_tables (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + ODITHER_MATRIX_PTR odither; + int i, j, nci; + + for (i = 0; i < cinfo->out_color_components; i++) { + nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ + odither = NULL; /* search for matching prior component */ + for (j = 0; j < i; j++) { + if (nci == cquantize->Ncolors[j]) { + odither = cquantize->odither[j]; + break; + } + } + if (odither == NULL) /* need a new table? */ + odither = make_odither_array(cinfo, nci); + cquantize->odither[i] = odither; + } +} + + +/* + * Map some rows of pixels to the output colormapped representation. + */ + +METHODDEF(void) +color_quantize (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* General case, no dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + JSAMPARRAY colorindex = cquantize->colorindex; + register int pixcode, ci; + register JSAMPROW ptrin, ptrout; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + register int nc = cinfo->out_color_components; + + for (row = 0; row < num_rows; row++) { + ptrin = input_buf[row]; + ptrout = output_buf[row]; + for (col = width; col > 0; col--) { + pixcode = 0; + for (ci = 0; ci < nc; ci++) { + pixcode += GETJSAMPLE(colorindex[ci][GETJSAMPLE(*ptrin++)]); + } + *ptrout++ = (JSAMPLE) pixcode; + } + } +} + + +METHODDEF(void) +color_quantize3 (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* Fast path for out_color_components==3, no dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + register int pixcode; + register JSAMPROW ptrin, ptrout; + JSAMPROW colorindex0 = cquantize->colorindex[0]; + JSAMPROW colorindex1 = cquantize->colorindex[1]; + JSAMPROW colorindex2 = cquantize->colorindex[2]; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + ptrin = input_buf[row]; + ptrout = output_buf[row]; + for (col = width; col > 0; col--) { + pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*ptrin++)]); + pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*ptrin++)]); + pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*ptrin++)]); + *ptrout++ = (JSAMPLE) pixcode; + } + } +} + + +METHODDEF(void) +quantize_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* General case, with ordered dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + register JSAMPROW input_ptr; + register JSAMPROW output_ptr; + JSAMPROW colorindex_ci; + int * dither; /* points to active row of dither matrix */ + int row_index, col_index; /* current indexes into dither matrix */ + int nc = cinfo->out_color_components; + int ci; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + /* Initialize output values to 0 so can process components separately */ + jzero_far((void FAR *) output_buf[row], + (size_t) (width * SIZEOF(JSAMPLE))); + row_index = cquantize->row_index; + for (ci = 0; ci < nc; ci++) { + input_ptr = input_buf[row] + ci; + output_ptr = output_buf[row]; + colorindex_ci = cquantize->colorindex[ci]; + dither = cquantize->odither[ci][row_index]; + col_index = 0; + + for (col = width; col > 0; col--) { + /* Form pixel value + dither, range-limit to 0..MAXJSAMPLE, + * select output value, accumulate into output code for this pixel. + * Range-limiting need not be done explicitly, as we have extended + * the colorindex table to produce the right answers for out-of-range + * inputs. The maximum dither is +- MAXJSAMPLE; this sets the + * required amount of padding. + */ + *output_ptr += colorindex_ci[GETJSAMPLE(*input_ptr)+dither[col_index]]; + input_ptr += nc; + output_ptr++; + col_index = (col_index + 1) & ODITHER_MASK; + } + } + /* Advance row index for next row */ + row_index = (row_index + 1) & ODITHER_MASK; + cquantize->row_index = row_index; + } +} + + +METHODDEF(void) +quantize3_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* Fast path for out_color_components==3, with ordered dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + register int pixcode; + register JSAMPROW input_ptr; + register JSAMPROW output_ptr; + JSAMPROW colorindex0 = cquantize->colorindex[0]; + JSAMPROW colorindex1 = cquantize->colorindex[1]; + JSAMPROW colorindex2 = cquantize->colorindex[2]; + int * dither0; /* points to active row of dither matrix */ + int * dither1; + int * dither2; + int row_index, col_index; /* current indexes into dither matrix */ + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + row_index = cquantize->row_index; + input_ptr = input_buf[row]; + output_ptr = output_buf[row]; + dither0 = cquantize->odither[0][row_index]; + dither1 = cquantize->odither[1][row_index]; + dither2 = cquantize->odither[2][row_index]; + col_index = 0; + + for (col = width; col > 0; col--) { + pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*input_ptr++) + + dither0[col_index]]); + pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*input_ptr++) + + dither1[col_index]]); + pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*input_ptr++) + + dither2[col_index]]); + *output_ptr++ = (JSAMPLE) pixcode; + col_index = (col_index + 1) & ODITHER_MASK; + } + row_index = (row_index + 1) & ODITHER_MASK; + cquantize->row_index = row_index; + } +} + + +METHODDEF(void) +quantize_fs_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* General case, with Floyd-Steinberg dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + register LOCFSERROR cur; /* current error or pixel value */ + LOCFSERROR belowerr; /* error for pixel below cur */ + LOCFSERROR bpreverr; /* error for below/prev col */ + LOCFSERROR bnexterr; /* error for below/next col */ + LOCFSERROR delta; + register FSERRPTR errorptr; /* => fserrors[] at column before current */ + register JSAMPROW input_ptr; + register JSAMPROW output_ptr; + JSAMPROW colorindex_ci; + JSAMPROW colormap_ci; + int pixcode; + int nc = cinfo->out_color_components; + int dir; /* 1 for left-to-right, -1 for right-to-left */ + int dirnc; /* dir * nc */ + int ci; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + JSAMPLE *range_limit = cinfo->sample_range_limit; + SHIFT_TEMPS + + for (row = 0; row < num_rows; row++) { + /* Initialize output values to 0 so can process components separately */ + jzero_far((void FAR *) output_buf[row], + (size_t) (width * SIZEOF(JSAMPLE))); + for (ci = 0; ci < nc; ci++) { + input_ptr = input_buf[row] + ci; + output_ptr = output_buf[row]; + if (cquantize->on_odd_row) { + /* work right to left in this row */ + input_ptr += (width-1) * nc; /* so point to rightmost pixel */ + output_ptr += width-1; + dir = -1; + dirnc = -nc; + errorptr = cquantize->fserrors[ci] + (width+1); /* => entry after last column */ + } else { + /* work left to right in this row */ + dir = 1; + dirnc = nc; + errorptr = cquantize->fserrors[ci]; /* => entry before first column */ + } + colorindex_ci = cquantize->colorindex[ci]; + colormap_ci = cquantize->sv_colormap[ci]; + /* Preset error values: no error propagated to first pixel from left */ + cur = 0; + /* and no error propagated to row below yet */ + belowerr = bpreverr = 0; + + for (col = width; col > 0; col--) { + /* cur holds the error propagated from the previous pixel on the + * current line. Add the error propagated from the previous line + * to form the complete error correction term for this pixel, and + * round the error term (which is expressed * 16) to an integer. + * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct + * for either sign of the error value. + * Note: errorptr points to *previous* column's array entry. + */ + cur = RIGHT_SHIFT(cur + errorptr[dir] + 8, 4); + /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE. + * The maximum error is +- MAXJSAMPLE; this sets the required size + * of the range_limit array. + */ + cur += GETJSAMPLE(*input_ptr); + cur = GETJSAMPLE(range_limit[cur]); + /* Select output value, accumulate into output code for this pixel */ + pixcode = GETJSAMPLE(colorindex_ci[cur]); + *output_ptr += (JSAMPLE) pixcode; + /* Compute actual representation error at this pixel */ + /* Note: we can do this even though we don't have the final */ + /* pixel code, because the colormap is orthogonal. */ + cur -= GETJSAMPLE(colormap_ci[pixcode]); + /* Compute error fractions to be propagated to adjacent pixels. + * Add these into the running sums, and simultaneously shift the + * next-line error sums left by 1 column. + */ + bnexterr = cur; + delta = cur * 2; + cur += delta; /* form error * 3 */ + errorptr[0] = (FSERROR) (bpreverr + cur); + cur += delta; /* form error * 5 */ + bpreverr = belowerr + cur; + belowerr = bnexterr; + cur += delta; /* form error * 7 */ + /* At this point cur contains the 7/16 error value to be propagated + * to the next pixel on the current line, and all the errors for the + * next line have been shifted over. We are therefore ready to move on. + */ + input_ptr += dirnc; /* advance input ptr to next column */ + output_ptr += dir; /* advance output ptr to next column */ + errorptr += dir; /* advance errorptr to current column */ + } + /* Post-loop cleanup: we must unload the final error value into the + * final fserrors[] entry. Note we need not unload belowerr because + * it is for the dummy column before or after the actual array. + */ + errorptr[0] = (FSERROR) bpreverr; /* unload prev err into array */ + } + cquantize->on_odd_row = (cquantize->on_odd_row ? FALSE : TRUE); + } +} + + +/* + * Allocate workspace for Floyd-Steinberg errors. + */ + +LOCAL(void) +alloc_fs_workspace (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + size_t arraysize; + int i; + + arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); + for (i = 0; i < cinfo->out_color_components; i++) { + cquantize->fserrors[i] = (FSERRPTR) + (*cinfo->mem->alloc_large)((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize); + } +} + + +/* + * Initialize for one-pass color quantization. + */ + +METHODDEF(void) +start_pass_1_quant (j_decompress_ptr cinfo, boolean is_pre_scan) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + size_t arraysize; + int i; + + /* Install my colormap. */ + cinfo->colormap = cquantize->sv_colormap; + cinfo->actual_number_of_colors = cquantize->sv_actual; + + /* Initialize for desired dithering mode. */ + switch (cinfo->dither_mode) { + case JDITHER_NONE: + if (cinfo->out_color_components == 3) + cquantize->pub.color_quantize = color_quantize3; + else + cquantize->pub.color_quantize = color_quantize; + break; + case JDITHER_ORDERED: + if (cinfo->out_color_components == 3) + cquantize->pub.color_quantize = quantize3_ord_dither; + else + cquantize->pub.color_quantize = quantize_ord_dither; + cquantize->row_index = 0; /* initialize state for ordered dither */ + /* If user changed to ordered dither from another mode, + * we must recreate the color index table with padding. + * This will cost extra space, but probably isn't very likely. + */ + if (! cquantize->is_padded) + create_colorindex(cinfo); + /* Create ordered-dither tables if we didn't already. */ + if (cquantize->odither[0] == NULL) + create_odither_tables(cinfo); + break; + case JDITHER_FS: + cquantize->pub.color_quantize = quantize_fs_dither; + cquantize->on_odd_row = FALSE; /* initialize state for F-S dither */ + /* Allocate Floyd-Steinberg workspace if didn't already. */ + if (cquantize->fserrors[0] == NULL) + alloc_fs_workspace(cinfo); + /* Initialize the propagated errors to zero. */ + arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); + for (i = 0; i < cinfo->out_color_components; i++) + jzero_far((void FAR *) cquantize->fserrors[i], arraysize); + break; + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + break; + } +} + + +/* + * Finish up at the end of the pass. + */ + +METHODDEF(void) +finish_pass_1_quant (j_decompress_ptr cinfo) +{ + /* no work in 1-pass case */ +} + + +/* + * Switch to a new external colormap between output passes. + * Shouldn't get to this module! + */ + +METHODDEF(void) +new_color_map_1_quant (j_decompress_ptr cinfo) +{ + ERREXIT(cinfo, JERR_MODE_CHANGE); +} + + +/* + * Module initialization routine for 1-pass color quantization. + */ + +GLOBAL(void) +jinit_1pass_quantizer (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize; + + cquantize = (my_cquantize_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_cquantizer)); + cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize; + cquantize->pub.start_pass = start_pass_1_quant; + cquantize->pub.finish_pass = finish_pass_1_quant; + cquantize->pub.new_color_map = new_color_map_1_quant; + cquantize->fserrors[0] = NULL; /* Flag FS workspace not allocated */ + cquantize->odither[0] = NULL; /* Also flag odither arrays not allocated */ + + /* Make sure my internal arrays won't overflow */ + if (cinfo->out_color_components > MAX_Q_COMPS) + ERREXIT1(cinfo, JERR_QUANT_COMPONENTS, MAX_Q_COMPS); + /* Make sure colormap indexes can be represented by JSAMPLEs */ + if (cinfo->desired_number_of_colors > (MAXJSAMPLE+1)) + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXJSAMPLE+1); + + /* Create the colormap and color index table. */ + create_colormap(cinfo); + create_colorindex(cinfo); + + /* Allocate Floyd-Steinberg workspace now if requested. + * We do this now since it is FAR storage and may affect the memory + * manager's space calculations. If the user changes to FS dither + * mode in a later pass, we will allocate the space then, and will + * possibly overrun the max_memory_to_use setting. + */ + if (cinfo->dither_mode == JDITHER_FS) + alloc_fs_workspace(cinfo); +} + +#endif /* QUANT_1PASS_SUPPORTED */ diff --git a/Build/source/extra/jpeg/jquant2.c b/Build/source/extra/jpeg/jquant2.c new file mode 100644 index 00000000000..af601e334b2 --- /dev/null +++ b/Build/source/extra/jpeg/jquant2.c @@ -0,0 +1,1310 @@ +/* + * jquant2.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains 2-pass color quantization (color mapping) routines. + * These routines provide selection of a custom color map for an image, + * followed by mapping of the image to that color map, with optional + * Floyd-Steinberg dithering. + * It is also possible to use just the second pass to map to an arbitrary + * externally-given color map. + * + * Note: ordered dithering is not supported, since there isn't any fast + * way to compute intercolor distances; it's unclear that ordered dither's + * fundamental assumptions even hold with an irregularly spaced color map. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + +#ifdef QUANT_2PASS_SUPPORTED + + +/* + * This module implements the well-known Heckbert paradigm for color + * quantization. Most of the ideas used here can be traced back to + * Heckbert's seminal paper + * Heckbert, Paul. "Color Image Quantization for Frame Buffer Display", + * Proc. SIGGRAPH '82, Computer Graphics v.16 #3 (July 1982), pp 297-304. + * + * In the first pass over the image, we accumulate a histogram showing the + * usage count of each possible color. To keep the histogram to a reasonable + * size, we reduce the precision of the input; typical practice is to retain + * 5 or 6 bits per color, so that 8 or 4 different input values are counted + * in the same histogram cell. + * + * Next, the color-selection step begins with a box representing the whole + * color space, and repeatedly splits the "largest" remaining box until we + * have as many boxes as desired colors. Then the mean color in each + * remaining box becomes one of the possible output colors. + * + * The second pass over the image maps each input pixel to the closest output + * color (optionally after applying a Floyd-Steinberg dithering correction). + * This mapping is logically trivial, but making it go fast enough requires + * considerable care. + * + * Heckbert-style quantizers vary a good deal in their policies for choosing + * the "largest" box and deciding where to cut it. The particular policies + * used here have proved out well in experimental comparisons, but better ones + * may yet be found. + * + * In earlier versions of the IJG code, this module quantized in YCbCr color + * space, processing the raw upsampled data without a color conversion step. + * This allowed the color conversion math to be done only once per colormap + * entry, not once per pixel. However, that optimization precluded other + * useful optimizations (such as merging color conversion with upsampling) + * and it also interfered with desired capabilities such as quantizing to an + * externally-supplied colormap. We have therefore abandoned that approach. + * The present code works in the post-conversion color space, typically RGB. + * + * To improve the visual quality of the results, we actually work in scaled + * RGB space, giving G distances more weight than R, and R in turn more than + * B. To do everything in integer math, we must use integer scale factors. + * The 2/3/1 scale factors used here correspond loosely to the relative + * weights of the colors in the NTSC grayscale equation. + * If you want to use this code to quantize a non-RGB color space, you'll + * probably need to change these scale factors. + */ + +#define R_SCALE 2 /* scale R distances by this much */ +#define G_SCALE 3 /* scale G distances by this much */ +#define B_SCALE 1 /* and B by this much */ + +/* Relabel R/G/B as components 0/1/2, respecting the RGB ordering defined + * in jmorecfg.h. As the code stands, it will do the right thing for R,G,B + * and B,G,R orders. If you define some other weird order in jmorecfg.h, + * you'll get compile errors until you extend this logic. In that case + * you'll probably want to tweak the histogram sizes too. + */ + +#if RGB_RED == 0 +#define C0_SCALE R_SCALE +#endif +#if RGB_BLUE == 0 +#define C0_SCALE B_SCALE +#endif +#if RGB_GREEN == 1 +#define C1_SCALE G_SCALE +#endif +#if RGB_RED == 2 +#define C2_SCALE R_SCALE +#endif +#if RGB_BLUE == 2 +#define C2_SCALE B_SCALE +#endif + + +/* + * First we have the histogram data structure and routines for creating it. + * + * The number of bits of precision can be adjusted by changing these symbols. + * We recommend keeping 6 bits for G and 5 each for R and B. + * If you have plenty of memory and cycles, 6 bits all around gives marginally + * better results; if you are short of memory, 5 bits all around will save + * some space but degrade the results. + * To maintain a fully accurate histogram, we'd need to allocate a "long" + * (preferably unsigned long) for each cell. In practice this is overkill; + * we can get by with 16 bits per cell. Few of the cell counts will overflow, + * and clamping those that do overflow to the maximum value will give close- + * enough results. This reduces the recommended histogram size from 256Kb + * to 128Kb, which is a useful savings on PC-class machines. + * (In the second pass the histogram space is re-used for pixel mapping data; + * in that capacity, each cell must be able to store zero to the number of + * desired colors. 16 bits/cell is plenty for that too.) + * Since the JPEG code is intended to run in small memory model on 80x86 + * machines, we can't just allocate the histogram in one chunk. Instead + * of a true 3-D array, we use a row of pointers to 2-D arrays. Each + * pointer corresponds to a C0 value (typically 2^5 = 32 pointers) and + * each 2-D array has 2^6*2^5 = 2048 or 2^6*2^6 = 4096 entries. Note that + * on 80x86 machines, the pointer row is in near memory but the actual + * arrays are in far memory (same arrangement as we use for image arrays). + */ + +#define MAXNUMCOLORS (MAXJSAMPLE+1) /* maximum size of colormap */ + +/* These will do the right thing for either R,G,B or B,G,R color order, + * but you may not like the results for other color orders. + */ +#define HIST_C0_BITS 5 /* bits of precision in R/B histogram */ +#define HIST_C1_BITS 6 /* bits of precision in G histogram */ +#define HIST_C2_BITS 5 /* bits of precision in B/R histogram */ + +/* Number of elements along histogram axes. */ +#define HIST_C0_ELEMS (1<cquantize; + register JSAMPROW ptr; + register histptr histp; + register hist3d histogram = cquantize->histogram; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + ptr = input_buf[row]; + for (col = width; col > 0; col--) { + /* get pixel value and index into the histogram */ + histp = & histogram[GETJSAMPLE(ptr[0]) >> C0_SHIFT] + [GETJSAMPLE(ptr[1]) >> C1_SHIFT] + [GETJSAMPLE(ptr[2]) >> C2_SHIFT]; + /* increment, check for overflow and undo increment if so. */ + if (++(*histp) <= 0) + (*histp)--; + ptr += 3; + } + } +} + + +/* + * Next we have the really interesting routines: selection of a colormap + * given the completed histogram. + * These routines work with a list of "boxes", each representing a rectangular + * subset of the input color space (to histogram precision). + */ + +typedef struct { + /* The bounds of the box (inclusive); expressed as histogram indexes */ + int c0min, c0max; + int c1min, c1max; + int c2min, c2max; + /* The volume (actually 2-norm) of the box */ + INT32 volume; + /* The number of nonzero histogram cells within this box */ + long colorcount; +} box; + +typedef box * boxptr; + + +LOCAL(boxptr) +find_biggest_color_pop (boxptr boxlist, int numboxes) +/* Find the splittable box with the largest color population */ +/* Returns NULL if no splittable boxes remain */ +{ + register boxptr boxp; + register int i; + register long maxc = 0; + boxptr which = NULL; + + for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { + if (boxp->colorcount > maxc && boxp->volume > 0) { + which = boxp; + maxc = boxp->colorcount; + } + } + return which; +} + + +LOCAL(boxptr) +find_biggest_volume (boxptr boxlist, int numboxes) +/* Find the splittable box with the largest (scaled) volume */ +/* Returns NULL if no splittable boxes remain */ +{ + register boxptr boxp; + register int i; + register INT32 maxv = 0; + boxptr which = NULL; + + for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { + if (boxp->volume > maxv) { + which = boxp; + maxv = boxp->volume; + } + } + return which; +} + + +LOCAL(void) +update_box (j_decompress_ptr cinfo, boxptr boxp) +/* Shrink the min/max bounds of a box to enclose only nonzero elements, */ +/* and recompute its volume and population */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + histptr histp; + int c0,c1,c2; + int c0min,c0max,c1min,c1max,c2min,c2max; + INT32 dist0,dist1,dist2; + long ccount; + + c0min = boxp->c0min; c0max = boxp->c0max; + c1min = boxp->c1min; c1max = boxp->c1max; + c2min = boxp->c2min; c2max = boxp->c2max; + + if (c0max > c0min) + for (c0 = c0min; c0 <= c0max; c0++) + for (c1 = c1min; c1 <= c1max; c1++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) + if (*histp++ != 0) { + boxp->c0min = c0min = c0; + goto have_c0min; + } + } + have_c0min: + if (c0max > c0min) + for (c0 = c0max; c0 >= c0min; c0--) + for (c1 = c1min; c1 <= c1max; c1++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) + if (*histp++ != 0) { + boxp->c0max = c0max = c0; + goto have_c0max; + } + } + have_c0max: + if (c1max > c1min) + for (c1 = c1min; c1 <= c1max; c1++) + for (c0 = c0min; c0 <= c0max; c0++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) + if (*histp++ != 0) { + boxp->c1min = c1min = c1; + goto have_c1min; + } + } + have_c1min: + if (c1max > c1min) + for (c1 = c1max; c1 >= c1min; c1--) + for (c0 = c0min; c0 <= c0max; c0++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) + if (*histp++ != 0) { + boxp->c1max = c1max = c1; + goto have_c1max; + } + } + have_c1max: + if (c2max > c2min) + for (c2 = c2min; c2 <= c2max; c2++) + for (c0 = c0min; c0 <= c0max; c0++) { + histp = & histogram[c0][c1min][c2]; + for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) + if (*histp != 0) { + boxp->c2min = c2min = c2; + goto have_c2min; + } + } + have_c2min: + if (c2max > c2min) + for (c2 = c2max; c2 >= c2min; c2--) + for (c0 = c0min; c0 <= c0max; c0++) { + histp = & histogram[c0][c1min][c2]; + for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) + if (*histp != 0) { + boxp->c2max = c2max = c2; + goto have_c2max; + } + } + have_c2max: + + /* Update box volume. + * We use 2-norm rather than real volume here; this biases the method + * against making long narrow boxes, and it has the side benefit that + * a box is splittable iff norm > 0. + * Since the differences are expressed in histogram-cell units, + * we have to shift back to JSAMPLE units to get consistent distances; + * after which, we scale according to the selected distance scale factors. + */ + dist0 = ((c0max - c0min) << C0_SHIFT) * C0_SCALE; + dist1 = ((c1max - c1min) << C1_SHIFT) * C1_SCALE; + dist2 = ((c2max - c2min) << C2_SHIFT) * C2_SCALE; + boxp->volume = dist0*dist0 + dist1*dist1 + dist2*dist2; + + /* Now scan remaining volume of box and compute population */ + ccount = 0; + for (c0 = c0min; c0 <= c0max; c0++) + for (c1 = c1min; c1 <= c1max; c1++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++, histp++) + if (*histp != 0) { + ccount++; + } + } + boxp->colorcount = ccount; +} + + +LOCAL(int) +median_cut (j_decompress_ptr cinfo, boxptr boxlist, int numboxes, + int desired_colors) +/* Repeatedly select and split the largest box until we have enough boxes */ +{ + int n,lb; + int c0,c1,c2,cmax; + register boxptr b1,b2; + + while (numboxes < desired_colors) { + /* Select box to split. + * Current algorithm: by population for first half, then by volume. + */ + if (numboxes*2 <= desired_colors) { + b1 = find_biggest_color_pop(boxlist, numboxes); + } else { + b1 = find_biggest_volume(boxlist, numboxes); + } + if (b1 == NULL) /* no splittable boxes left! */ + break; + b2 = &boxlist[numboxes]; /* where new box will go */ + /* Copy the color bounds to the new box. */ + b2->c0max = b1->c0max; b2->c1max = b1->c1max; b2->c2max = b1->c2max; + b2->c0min = b1->c0min; b2->c1min = b1->c1min; b2->c2min = b1->c2min; + /* Choose which axis to split the box on. + * Current algorithm: longest scaled axis. + * See notes in update_box about scaling distances. + */ + c0 = ((b1->c0max - b1->c0min) << C0_SHIFT) * C0_SCALE; + c1 = ((b1->c1max - b1->c1min) << C1_SHIFT) * C1_SCALE; + c2 = ((b1->c2max - b1->c2min) << C2_SHIFT) * C2_SCALE; + /* We want to break any ties in favor of green, then red, blue last. + * This code does the right thing for R,G,B or B,G,R color orders only. + */ +#if RGB_RED == 0 + cmax = c1; n = 1; + if (c0 > cmax) { cmax = c0; n = 0; } + if (c2 > cmax) { n = 2; } +#else + cmax = c1; n = 1; + if (c2 > cmax) { cmax = c2; n = 2; } + if (c0 > cmax) { n = 0; } +#endif + /* Choose split point along selected axis, and update box bounds. + * Current algorithm: split at halfway point. + * (Since the box has been shrunk to minimum volume, + * any split will produce two nonempty subboxes.) + * Note that lb value is max for lower box, so must be < old max. + */ + switch (n) { + case 0: + lb = (b1->c0max + b1->c0min) / 2; + b1->c0max = lb; + b2->c0min = lb+1; + break; + case 1: + lb = (b1->c1max + b1->c1min) / 2; + b1->c1max = lb; + b2->c1min = lb+1; + break; + case 2: + lb = (b1->c2max + b1->c2min) / 2; + b1->c2max = lb; + b2->c2min = lb+1; + break; + } + /* Update stats for boxes */ + update_box(cinfo, b1); + update_box(cinfo, b2); + numboxes++; + } + return numboxes; +} + + +LOCAL(void) +compute_color (j_decompress_ptr cinfo, boxptr boxp, int icolor) +/* Compute representative color for a box, put it in colormap[icolor] */ +{ + /* Current algorithm: mean weighted by pixels (not colors) */ + /* Note it is important to get the rounding correct! */ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + histptr histp; + int c0,c1,c2; + int c0min,c0max,c1min,c1max,c2min,c2max; + long count; + long total = 0; + long c0total = 0; + long c1total = 0; + long c2total = 0; + + c0min = boxp->c0min; c0max = boxp->c0max; + c1min = boxp->c1min; c1max = boxp->c1max; + c2min = boxp->c2min; c2max = boxp->c2max; + + for (c0 = c0min; c0 <= c0max; c0++) + for (c1 = c1min; c1 <= c1max; c1++) { + histp = & histogram[c0][c1][c2min]; + for (c2 = c2min; c2 <= c2max; c2++) { + if ((count = *histp++) != 0) { + total += count; + c0total += ((c0 << C0_SHIFT) + ((1<>1)) * count; + c1total += ((c1 << C1_SHIFT) + ((1<>1)) * count; + c2total += ((c2 << C2_SHIFT) + ((1<>1)) * count; + } + } + } + + cinfo->colormap[0][icolor] = (JSAMPLE) ((c0total + (total>>1)) / total); + cinfo->colormap[1][icolor] = (JSAMPLE) ((c1total + (total>>1)) / total); + cinfo->colormap[2][icolor] = (JSAMPLE) ((c2total + (total>>1)) / total); +} + + +LOCAL(void) +select_colors (j_decompress_ptr cinfo, int desired_colors) +/* Master routine for color selection */ +{ + boxptr boxlist; + int numboxes; + int i; + + /* Allocate workspace for box list */ + boxlist = (boxptr) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, desired_colors * SIZEOF(box)); + /* Initialize one box containing whole space */ + numboxes = 1; + boxlist[0].c0min = 0; + boxlist[0].c0max = MAXJSAMPLE >> C0_SHIFT; + boxlist[0].c1min = 0; + boxlist[0].c1max = MAXJSAMPLE >> C1_SHIFT; + boxlist[0].c2min = 0; + boxlist[0].c2max = MAXJSAMPLE >> C2_SHIFT; + /* Shrink it to actually-used volume and set its statistics */ + update_box(cinfo, & boxlist[0]); + /* Perform median-cut to produce final box list */ + numboxes = median_cut(cinfo, boxlist, numboxes, desired_colors); + /* Compute the representative color for each box, fill colormap */ + for (i = 0; i < numboxes; i++) + compute_color(cinfo, & boxlist[i], i); + cinfo->actual_number_of_colors = numboxes; + TRACEMS1(cinfo, 1, JTRC_QUANT_SELECTED, numboxes); +} + + +/* + * These routines are concerned with the time-critical task of mapping input + * colors to the nearest color in the selected colormap. + * + * We re-use the histogram space as an "inverse color map", essentially a + * cache for the results of nearest-color searches. All colors within a + * histogram cell will be mapped to the same colormap entry, namely the one + * closest to the cell's center. This may not be quite the closest entry to + * the actual input color, but it's almost as good. A zero in the cache + * indicates we haven't found the nearest color for that cell yet; the array + * is cleared to zeroes before starting the mapping pass. When we find the + * nearest color for a cell, its colormap index plus one is recorded in the + * cache for future use. The pass2 scanning routines call fill_inverse_cmap + * when they need to use an unfilled entry in the cache. + * + * Our method of efficiently finding nearest colors is based on the "locally + * sorted search" idea described by Heckbert and on the incremental distance + * calculation described by Spencer W. Thomas in chapter III.1 of Graphics + * Gems II (James Arvo, ed. Academic Press, 1991). Thomas points out that + * the distances from a given colormap entry to each cell of the histogram can + * be computed quickly using an incremental method: the differences between + * distances to adjacent cells themselves differ by a constant. This allows a + * fairly fast implementation of the "brute force" approach of computing the + * distance from every colormap entry to every histogram cell. Unfortunately, + * it needs a work array to hold the best-distance-so-far for each histogram + * cell (because the inner loop has to be over cells, not colormap entries). + * The work array elements have to be INT32s, so the work array would need + * 256Kb at our recommended precision. This is not feasible in DOS machines. + * + * To get around these problems, we apply Thomas' method to compute the + * nearest colors for only the cells within a small subbox of the histogram. + * The work array need be only as big as the subbox, so the memory usage + * problem is solved. Furthermore, we need not fill subboxes that are never + * referenced in pass2; many images use only part of the color gamut, so a + * fair amount of work is saved. An additional advantage of this + * approach is that we can apply Heckbert's locality criterion to quickly + * eliminate colormap entries that are far away from the subbox; typically + * three-fourths of the colormap entries are rejected by Heckbert's criterion, + * and we need not compute their distances to individual cells in the subbox. + * The speed of this approach is heavily influenced by the subbox size: too + * small means too much overhead, too big loses because Heckbert's criterion + * can't eliminate as many colormap entries. Empirically the best subbox + * size seems to be about 1/512th of the histogram (1/8th in each direction). + * + * Thomas' article also describes a refined method which is asymptotically + * faster than the brute-force method, but it is also far more complex and + * cannot efficiently be applied to small subboxes. It is therefore not + * useful for programs intended to be portable to DOS machines. On machines + * with plenty of memory, filling the whole histogram in one shot with Thomas' + * refined method might be faster than the present code --- but then again, + * it might not be any faster, and it's certainly more complicated. + */ + + +/* log2(histogram cells in update box) for each axis; this can be adjusted */ +#define BOX_C0_LOG (HIST_C0_BITS-3) +#define BOX_C1_LOG (HIST_C1_BITS-3) +#define BOX_C2_LOG (HIST_C2_BITS-3) + +#define BOX_C0_ELEMS (1<actual_number_of_colors; + int maxc0, maxc1, maxc2; + int centerc0, centerc1, centerc2; + int i, x, ncolors; + INT32 minmaxdist, min_dist, max_dist, tdist; + INT32 mindist[MAXNUMCOLORS]; /* min distance to colormap entry i */ + + /* Compute true coordinates of update box's upper corner and center. + * Actually we compute the coordinates of the center of the upper-corner + * histogram cell, which are the upper bounds of the volume we care about. + * Note that since ">>" rounds down, the "center" values may be closer to + * min than to max; hence comparisons to them must be "<=", not "<". + */ + maxc0 = minc0 + ((1 << BOX_C0_SHIFT) - (1 << C0_SHIFT)); + centerc0 = (minc0 + maxc0) >> 1; + maxc1 = minc1 + ((1 << BOX_C1_SHIFT) - (1 << C1_SHIFT)); + centerc1 = (minc1 + maxc1) >> 1; + maxc2 = minc2 + ((1 << BOX_C2_SHIFT) - (1 << C2_SHIFT)); + centerc2 = (minc2 + maxc2) >> 1; + + /* For each color in colormap, find: + * 1. its minimum squared-distance to any point in the update box + * (zero if color is within update box); + * 2. its maximum squared-distance to any point in the update box. + * Both of these can be found by considering only the corners of the box. + * We save the minimum distance for each color in mindist[]; + * only the smallest maximum distance is of interest. + */ + minmaxdist = 0x7FFFFFFFL; + + for (i = 0; i < numcolors; i++) { + /* We compute the squared-c0-distance term, then add in the other two. */ + x = GETJSAMPLE(cinfo->colormap[0][i]); + if (x < minc0) { + tdist = (x - minc0) * C0_SCALE; + min_dist = tdist*tdist; + tdist = (x - maxc0) * C0_SCALE; + max_dist = tdist*tdist; + } else if (x > maxc0) { + tdist = (x - maxc0) * C0_SCALE; + min_dist = tdist*tdist; + tdist = (x - minc0) * C0_SCALE; + max_dist = tdist*tdist; + } else { + /* within cell range so no contribution to min_dist */ + min_dist = 0; + if (x <= centerc0) { + tdist = (x - maxc0) * C0_SCALE; + max_dist = tdist*tdist; + } else { + tdist = (x - minc0) * C0_SCALE; + max_dist = tdist*tdist; + } + } + + x = GETJSAMPLE(cinfo->colormap[1][i]); + if (x < minc1) { + tdist = (x - minc1) * C1_SCALE; + min_dist += tdist*tdist; + tdist = (x - maxc1) * C1_SCALE; + max_dist += tdist*tdist; + } else if (x > maxc1) { + tdist = (x - maxc1) * C1_SCALE; + min_dist += tdist*tdist; + tdist = (x - minc1) * C1_SCALE; + max_dist += tdist*tdist; + } else { + /* within cell range so no contribution to min_dist */ + if (x <= centerc1) { + tdist = (x - maxc1) * C1_SCALE; + max_dist += tdist*tdist; + } else { + tdist = (x - minc1) * C1_SCALE; + max_dist += tdist*tdist; + } + } + + x = GETJSAMPLE(cinfo->colormap[2][i]); + if (x < minc2) { + tdist = (x - minc2) * C2_SCALE; + min_dist += tdist*tdist; + tdist = (x - maxc2) * C2_SCALE; + max_dist += tdist*tdist; + } else if (x > maxc2) { + tdist = (x - maxc2) * C2_SCALE; + min_dist += tdist*tdist; + tdist = (x - minc2) * C2_SCALE; + max_dist += tdist*tdist; + } else { + /* within cell range so no contribution to min_dist */ + if (x <= centerc2) { + tdist = (x - maxc2) * C2_SCALE; + max_dist += tdist*tdist; + } else { + tdist = (x - minc2) * C2_SCALE; + max_dist += tdist*tdist; + } + } + + mindist[i] = min_dist; /* save away the results */ + if (max_dist < minmaxdist) + minmaxdist = max_dist; + } + + /* Now we know that no cell in the update box is more than minmaxdist + * away from some colormap entry. Therefore, only colors that are + * within minmaxdist of some part of the box need be considered. + */ + ncolors = 0; + for (i = 0; i < numcolors; i++) { + if (mindist[i] <= minmaxdist) + colorlist[ncolors++] = (JSAMPLE) i; + } + return ncolors; +} + + +LOCAL(void) +find_best_colors (j_decompress_ptr cinfo, int minc0, int minc1, int minc2, + int numcolors, JSAMPLE colorlist[], JSAMPLE bestcolor[]) +/* Find the closest colormap entry for each cell in the update box, + * given the list of candidate colors prepared by find_nearby_colors. + * Return the indexes of the closest entries in the bestcolor[] array. + * This routine uses Thomas' incremental distance calculation method to + * find the distance from a colormap entry to successive cells in the box. + */ +{ + int ic0, ic1, ic2; + int i, icolor; + register INT32 * bptr; /* pointer into bestdist[] array */ + JSAMPLE * cptr; /* pointer into bestcolor[] array */ + INT32 dist0, dist1; /* initial distance values */ + register INT32 dist2; /* current distance in inner loop */ + INT32 xx0, xx1; /* distance increments */ + register INT32 xx2; + INT32 inc0, inc1, inc2; /* initial values for increments */ + /* This array holds the distance to the nearest-so-far color for each cell */ + INT32 bestdist[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS]; + + /* Initialize best-distance for each cell of the update box */ + bptr = bestdist; + for (i = BOX_C0_ELEMS*BOX_C1_ELEMS*BOX_C2_ELEMS-1; i >= 0; i--) + *bptr++ = 0x7FFFFFFFL; + + /* For each color selected by find_nearby_colors, + * compute its distance to the center of each cell in the box. + * If that's less than best-so-far, update best distance and color number. + */ + + /* Nominal steps between cell centers ("x" in Thomas article) */ +#define STEP_C0 ((1 << C0_SHIFT) * C0_SCALE) +#define STEP_C1 ((1 << C1_SHIFT) * C1_SCALE) +#define STEP_C2 ((1 << C2_SHIFT) * C2_SCALE) + + for (i = 0; i < numcolors; i++) { + icolor = GETJSAMPLE(colorlist[i]); + /* Compute (square of) distance from minc0/c1/c2 to this color */ + inc0 = (minc0 - GETJSAMPLE(cinfo->colormap[0][icolor])) * C0_SCALE; + dist0 = inc0*inc0; + inc1 = (minc1 - GETJSAMPLE(cinfo->colormap[1][icolor])) * C1_SCALE; + dist0 += inc1*inc1; + inc2 = (minc2 - GETJSAMPLE(cinfo->colormap[2][icolor])) * C2_SCALE; + dist0 += inc2*inc2; + /* Form the initial difference increments */ + inc0 = inc0 * (2 * STEP_C0) + STEP_C0 * STEP_C0; + inc1 = inc1 * (2 * STEP_C1) + STEP_C1 * STEP_C1; + inc2 = inc2 * (2 * STEP_C2) + STEP_C2 * STEP_C2; + /* Now loop over all cells in box, updating distance per Thomas method */ + bptr = bestdist; + cptr = bestcolor; + xx0 = inc0; + for (ic0 = BOX_C0_ELEMS-1; ic0 >= 0; ic0--) { + dist1 = dist0; + xx1 = inc1; + for (ic1 = BOX_C1_ELEMS-1; ic1 >= 0; ic1--) { + dist2 = dist1; + xx2 = inc2; + for (ic2 = BOX_C2_ELEMS-1; ic2 >= 0; ic2--) { + if (dist2 < *bptr) { + *bptr = dist2; + *cptr = (JSAMPLE) icolor; + } + dist2 += xx2; + xx2 += 2 * STEP_C2 * STEP_C2; + bptr++; + cptr++; + } + dist1 += xx1; + xx1 += 2 * STEP_C1 * STEP_C1; + } + dist0 += xx0; + xx0 += 2 * STEP_C0 * STEP_C0; + } + } +} + + +LOCAL(void) +fill_inverse_cmap (j_decompress_ptr cinfo, int c0, int c1, int c2) +/* Fill the inverse-colormap entries in the update box that contains */ +/* histogram cell c0/c1/c2. (Only that one cell MUST be filled, but */ +/* we can fill as many others as we wish.) */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + int minc0, minc1, minc2; /* lower left corner of update box */ + int ic0, ic1, ic2; + register JSAMPLE * cptr; /* pointer into bestcolor[] array */ + register histptr cachep; /* pointer into main cache array */ + /* This array lists the candidate colormap indexes. */ + JSAMPLE colorlist[MAXNUMCOLORS]; + int numcolors; /* number of candidate colors */ + /* This array holds the actually closest colormap index for each cell. */ + JSAMPLE bestcolor[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS]; + + /* Convert cell coordinates to update box ID */ + c0 >>= BOX_C0_LOG; + c1 >>= BOX_C1_LOG; + c2 >>= BOX_C2_LOG; + + /* Compute true coordinates of update box's origin corner. + * Actually we compute the coordinates of the center of the corner + * histogram cell, which are the lower bounds of the volume we care about. + */ + minc0 = (c0 << BOX_C0_SHIFT) + ((1 << C0_SHIFT) >> 1); + minc1 = (c1 << BOX_C1_SHIFT) + ((1 << C1_SHIFT) >> 1); + minc2 = (c2 << BOX_C2_SHIFT) + ((1 << C2_SHIFT) >> 1); + + /* Determine which colormap entries are close enough to be candidates + * for the nearest entry to some cell in the update box. + */ + numcolors = find_nearby_colors(cinfo, minc0, minc1, minc2, colorlist); + + /* Determine the actually nearest colors. */ + find_best_colors(cinfo, minc0, minc1, minc2, numcolors, colorlist, + bestcolor); + + /* Save the best color numbers (plus 1) in the main cache array */ + c0 <<= BOX_C0_LOG; /* convert ID back to base cell indexes */ + c1 <<= BOX_C1_LOG; + c2 <<= BOX_C2_LOG; + cptr = bestcolor; + for (ic0 = 0; ic0 < BOX_C0_ELEMS; ic0++) { + for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++) { + cachep = & histogram[c0+ic0][c1+ic1][c2]; + for (ic2 = 0; ic2 < BOX_C2_ELEMS; ic2++) { + *cachep++ = (histcell) (GETJSAMPLE(*cptr++) + 1); + } + } + } +} + + +/* + * Map some rows of pixels to the output colormapped representation. + */ + +METHODDEF(void) +pass2_no_dither (j_decompress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) +/* This version performs no dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + register JSAMPROW inptr, outptr; + register histptr cachep; + register int c0, c1, c2; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + inptr = input_buf[row]; + outptr = output_buf[row]; + for (col = width; col > 0; col--) { + /* get pixel value and index into the cache */ + c0 = GETJSAMPLE(*inptr++) >> C0_SHIFT; + c1 = GETJSAMPLE(*inptr++) >> C1_SHIFT; + c2 = GETJSAMPLE(*inptr++) >> C2_SHIFT; + cachep = & histogram[c0][c1][c2]; + /* If we have not seen this color before, find nearest colormap entry */ + /* and update the cache */ + if (*cachep == 0) + fill_inverse_cmap(cinfo, c0,c1,c2); + /* Now emit the colormap index for this cell */ + *outptr++ = (JSAMPLE) (*cachep - 1); + } + } +} + + +METHODDEF(void) +pass2_fs_dither (j_decompress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) +/* This version performs Floyd-Steinberg dithering */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + register LOCFSERROR cur0, cur1, cur2; /* current error or pixel value */ + LOCFSERROR belowerr0, belowerr1, belowerr2; /* error for pixel below cur */ + LOCFSERROR bpreverr0, bpreverr1, bpreverr2; /* error for below/prev col */ + register FSERRPTR errorptr; /* => fserrors[] at column before current */ + JSAMPROW inptr; /* => current input pixel */ + JSAMPROW outptr; /* => current output pixel */ + histptr cachep; + int dir; /* +1 or -1 depending on direction */ + int dir3; /* 3*dir, for advancing inptr & errorptr */ + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + JSAMPLE *range_limit = cinfo->sample_range_limit; + int *error_limit = cquantize->error_limiter; + JSAMPROW colormap0 = cinfo->colormap[0]; + JSAMPROW colormap1 = cinfo->colormap[1]; + JSAMPROW colormap2 = cinfo->colormap[2]; + SHIFT_TEMPS + + for (row = 0; row < num_rows; row++) { + inptr = input_buf[row]; + outptr = output_buf[row]; + if (cquantize->on_odd_row) { + /* work right to left in this row */ + inptr += (width-1) * 3; /* so point to rightmost pixel */ + outptr += width-1; + dir = -1; + dir3 = -3; + errorptr = cquantize->fserrors + (width+1)*3; /* => entry after last column */ + cquantize->on_odd_row = FALSE; /* flip for next time */ + } else { + /* work left to right in this row */ + dir = 1; + dir3 = 3; + errorptr = cquantize->fserrors; /* => entry before first real column */ + cquantize->on_odd_row = TRUE; /* flip for next time */ + } + /* Preset error values: no error propagated to first pixel from left */ + cur0 = cur1 = cur2 = 0; + /* and no error propagated to row below yet */ + belowerr0 = belowerr1 = belowerr2 = 0; + bpreverr0 = bpreverr1 = bpreverr2 = 0; + + for (col = width; col > 0; col--) { + /* curN holds the error propagated from the previous pixel on the + * current line. Add the error propagated from the previous line + * to form the complete error correction term for this pixel, and + * round the error term (which is expressed * 16) to an integer. + * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct + * for either sign of the error value. + * Note: errorptr points to *previous* column's array entry. + */ + cur0 = RIGHT_SHIFT(cur0 + errorptr[dir3+0] + 8, 4); + cur1 = RIGHT_SHIFT(cur1 + errorptr[dir3+1] + 8, 4); + cur2 = RIGHT_SHIFT(cur2 + errorptr[dir3+2] + 8, 4); + /* Limit the error using transfer function set by init_error_limit. + * See comments with init_error_limit for rationale. + */ + cur0 = error_limit[cur0]; + cur1 = error_limit[cur1]; + cur2 = error_limit[cur2]; + /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE. + * The maximum error is +- MAXJSAMPLE (or less with error limiting); + * this sets the required size of the range_limit array. + */ + cur0 += GETJSAMPLE(inptr[0]); + cur1 += GETJSAMPLE(inptr[1]); + cur2 += GETJSAMPLE(inptr[2]); + cur0 = GETJSAMPLE(range_limit[cur0]); + cur1 = GETJSAMPLE(range_limit[cur1]); + cur2 = GETJSAMPLE(range_limit[cur2]); + /* Index into the cache with adjusted pixel value */ + cachep = & histogram[cur0>>C0_SHIFT][cur1>>C1_SHIFT][cur2>>C2_SHIFT]; + /* If we have not seen this color before, find nearest colormap */ + /* entry and update the cache */ + if (*cachep == 0) + fill_inverse_cmap(cinfo, cur0>>C0_SHIFT,cur1>>C1_SHIFT,cur2>>C2_SHIFT); + /* Now emit the colormap index for this cell */ + { register int pixcode = *cachep - 1; + *outptr = (JSAMPLE) pixcode; + /* Compute representation error for this pixel */ + cur0 -= GETJSAMPLE(colormap0[pixcode]); + cur1 -= GETJSAMPLE(colormap1[pixcode]); + cur2 -= GETJSAMPLE(colormap2[pixcode]); + } + /* Compute error fractions to be propagated to adjacent pixels. + * Add these into the running sums, and simultaneously shift the + * next-line error sums left by 1 column. + */ + { register LOCFSERROR bnexterr, delta; + + bnexterr = cur0; /* Process component 0 */ + delta = cur0 * 2; + cur0 += delta; /* form error * 3 */ + errorptr[0] = (FSERROR) (bpreverr0 + cur0); + cur0 += delta; /* form error * 5 */ + bpreverr0 = belowerr0 + cur0; + belowerr0 = bnexterr; + cur0 += delta; /* form error * 7 */ + bnexterr = cur1; /* Process component 1 */ + delta = cur1 * 2; + cur1 += delta; /* form error * 3 */ + errorptr[1] = (FSERROR) (bpreverr1 + cur1); + cur1 += delta; /* form error * 5 */ + bpreverr1 = belowerr1 + cur1; + belowerr1 = bnexterr; + cur1 += delta; /* form error * 7 */ + bnexterr = cur2; /* Process component 2 */ + delta = cur2 * 2; + cur2 += delta; /* form error * 3 */ + errorptr[2] = (FSERROR) (bpreverr2 + cur2); + cur2 += delta; /* form error * 5 */ + bpreverr2 = belowerr2 + cur2; + belowerr2 = bnexterr; + cur2 += delta; /* form error * 7 */ + } + /* At this point curN contains the 7/16 error value to be propagated + * to the next pixel on the current line, and all the errors for the + * next line have been shifted over. We are therefore ready to move on. + */ + inptr += dir3; /* Advance pixel pointers to next column */ + outptr += dir; + errorptr += dir3; /* advance errorptr to current column */ + } + /* Post-loop cleanup: we must unload the final error values into the + * final fserrors[] entry. Note we need not unload belowerrN because + * it is for the dummy column before or after the actual array. + */ + errorptr[0] = (FSERROR) bpreverr0; /* unload prev errs into array */ + errorptr[1] = (FSERROR) bpreverr1; + errorptr[2] = (FSERROR) bpreverr2; + } +} + + +/* + * Initialize the error-limiting transfer function (lookup table). + * The raw F-S error computation can potentially compute error values of up to + * +- MAXJSAMPLE. But we want the maximum correction applied to a pixel to be + * much less, otherwise obviously wrong pixels will be created. (Typical + * effects include weird fringes at color-area boundaries, isolated bright + * pixels in a dark area, etc.) The standard advice for avoiding this problem + * is to ensure that the "corners" of the color cube are allocated as output + * colors; then repeated errors in the same direction cannot cause cascading + * error buildup. However, that only prevents the error from getting + * completely out of hand; Aaron Giles reports that error limiting improves + * the results even with corner colors allocated. + * A simple clamping of the error values to about +- MAXJSAMPLE/8 works pretty + * well, but the smoother transfer function used below is even better. Thanks + * to Aaron Giles for this idea. + */ + +LOCAL(void) +init_error_limit (j_decompress_ptr cinfo) +/* Allocate and fill in the error_limiter table */ +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + int * table; + int in, out; + + table = (int *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE*2+1) * SIZEOF(int)); + table += MAXJSAMPLE; /* so can index -MAXJSAMPLE .. +MAXJSAMPLE */ + cquantize->error_limiter = table; + +#define STEPSIZE ((MAXJSAMPLE+1)/16) + /* Map errors 1:1 up to +- MAXJSAMPLE/16 */ + out = 0; + for (in = 0; in < STEPSIZE; in++, out++) { + table[in] = out; table[-in] = -out; + } + /* Map errors 1:2 up to +- 3*MAXJSAMPLE/16 */ + for (; in < STEPSIZE*3; in++, out += (in&1) ? 0 : 1) { + table[in] = out; table[-in] = -out; + } + /* Clamp the rest to final out value (which is (MAXJSAMPLE+1)/8) */ + for (; in <= MAXJSAMPLE; in++) { + table[in] = out; table[-in] = -out; + } +#undef STEPSIZE +} + + +/* + * Finish up at the end of each pass. + */ + +METHODDEF(void) +finish_pass1 (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + + /* Select the representative colors and fill in cinfo->colormap */ + cinfo->colormap = cquantize->sv_colormap; + select_colors(cinfo, cquantize->desired); + /* Force next pass to zero the color index table */ + cquantize->needs_zeroed = TRUE; +} + + +METHODDEF(void) +finish_pass2 (j_decompress_ptr cinfo) +{ + /* no work */ +} + + +/* + * Initialize for each processing pass. + */ + +METHODDEF(void) +start_pass_2_quant (j_decompress_ptr cinfo, boolean is_pre_scan) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + int i; + + /* Only F-S dithering or no dithering is supported. */ + /* If user asks for ordered dither, give him F-S. */ + if (cinfo->dither_mode != JDITHER_NONE) + cinfo->dither_mode = JDITHER_FS; + + if (is_pre_scan) { + /* Set up method pointers */ + cquantize->pub.color_quantize = prescan_quantize; + cquantize->pub.finish_pass = finish_pass1; + cquantize->needs_zeroed = TRUE; /* Always zero histogram */ + } else { + /* Set up method pointers */ + if (cinfo->dither_mode == JDITHER_FS) + cquantize->pub.color_quantize = pass2_fs_dither; + else + cquantize->pub.color_quantize = pass2_no_dither; + cquantize->pub.finish_pass = finish_pass2; + + /* Make sure color count is acceptable */ + i = cinfo->actual_number_of_colors; + if (i < 1) + ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 1); + if (i > MAXNUMCOLORS) + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS); + + if (cinfo->dither_mode == JDITHER_FS) { + size_t arraysize = (size_t) ((cinfo->output_width + 2) * + (3 * SIZEOF(FSERROR))); + /* Allocate Floyd-Steinberg workspace if we didn't already. */ + if (cquantize->fserrors == NULL) + cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large) + ((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize); + /* Initialize the propagated errors to zero. */ + jzero_far((void FAR *) cquantize->fserrors, arraysize); + /* Make the error-limit table if we didn't already. */ + if (cquantize->error_limiter == NULL) + init_error_limit(cinfo); + cquantize->on_odd_row = FALSE; + } + + } + /* Zero the histogram or inverse color map, if necessary */ + if (cquantize->needs_zeroed) { + for (i = 0; i < HIST_C0_ELEMS; i++) { + jzero_far((void FAR *) histogram[i], + HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell)); + } + cquantize->needs_zeroed = FALSE; + } +} + + +/* + * Switch to a new external colormap between output passes. + */ + +METHODDEF(void) +new_color_map_2_quant (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + + /* Reset the inverse color map */ + cquantize->needs_zeroed = TRUE; +} + + +/* + * Module initialization routine for 2-pass color quantization. + */ + +GLOBAL(void) +jinit_2pass_quantizer (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize; + int i; + + cquantize = (my_cquantize_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(my_cquantizer)); + cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize; + cquantize->pub.start_pass = start_pass_2_quant; + cquantize->pub.new_color_map = new_color_map_2_quant; + cquantize->fserrors = NULL; /* flag optional arrays not allocated */ + cquantize->error_limiter = NULL; + + /* Make sure jdmaster didn't give me a case I can't handle */ + if (cinfo->out_color_components != 3) + ERREXIT(cinfo, JERR_NOTIMPL); + + /* Allocate the histogram/inverse colormap storage */ + cquantize->histogram = (hist3d) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, HIST_C0_ELEMS * SIZEOF(hist2d)); + for (i = 0; i < HIST_C0_ELEMS; i++) { + cquantize->histogram[i] = (hist2d) (*cinfo->mem->alloc_large) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell)); + } + cquantize->needs_zeroed = TRUE; /* histogram is garbage now */ + + /* Allocate storage for the completed colormap, if required. + * We do this now since it is FAR storage and may affect + * the memory manager's space calculations. + */ + if (cinfo->enable_2pass_quant) { + /* Make sure color count is acceptable */ + int desired = cinfo->desired_number_of_colors; + /* Lower bound on # of colors ... somewhat arbitrary as long as > 0 */ + if (desired < 8) + ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 8); + /* Make sure colormap indexes can be represented by JSAMPLEs */ + if (desired > MAXNUMCOLORS) + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS); + cquantize->sv_colormap = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo,JPOOL_IMAGE, (JDIMENSION) desired, (JDIMENSION) 3); + cquantize->desired = desired; + } else + cquantize->sv_colormap = NULL; + + /* Only F-S dithering or no dithering is supported. */ + /* If user asks for ordered dither, give him F-S. */ + if (cinfo->dither_mode != JDITHER_NONE) + cinfo->dither_mode = JDITHER_FS; + + /* Allocate Floyd-Steinberg workspace if necessary. + * This isn't really needed until pass 2, but again it is FAR storage. + * Although we will cope with a later change in dither_mode, + * we do not promise to honor max_memory_to_use if dither_mode changes. + */ + if (cinfo->dither_mode == JDITHER_FS) { + cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (size_t) ((cinfo->output_width + 2) * (3 * SIZEOF(FSERROR)))); + /* Might as well create the error-limiting table too. */ + init_error_limit(cinfo); + } +} + +#endif /* QUANT_2PASS_SUPPORTED */ diff --git a/Build/source/extra/jpeg/jutils.c b/Build/source/extra/jpeg/jutils.c new file mode 100644 index 00000000000..d18a9555621 --- /dev/null +++ b/Build/source/extra/jpeg/jutils.c @@ -0,0 +1,179 @@ +/* + * jutils.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains tables and miscellaneous utility routines needed + * for both compression and decompression. + * Note we prefix all global names with "j" to minimize conflicts with + * a surrounding application. + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" + + +/* + * jpeg_zigzag_order[i] is the zigzag-order position of the i'th element + * of a DCT block read in natural order (left to right, top to bottom). + */ + +#if 0 /* This table is not actually needed in v6a */ + +const int jpeg_zigzag_order[DCTSIZE2] = { + 0, 1, 5, 6, 14, 15, 27, 28, + 2, 4, 7, 13, 16, 26, 29, 42, + 3, 8, 12, 17, 25, 30, 41, 43, + 9, 11, 18, 24, 31, 40, 44, 53, + 10, 19, 23, 32, 39, 45, 52, 54, + 20, 22, 33, 38, 46, 51, 55, 60, + 21, 34, 37, 47, 50, 56, 59, 61, + 35, 36, 48, 49, 57, 58, 62, 63 +}; + +#endif + +/* + * jpeg_natural_order[i] is the natural-order position of the i'th element + * of zigzag order. + * + * When reading corrupted data, the Huffman decoders could attempt + * to reference an entry beyond the end of this array (if the decoded + * zero run length reaches past the end of the block). To prevent + * wild stores without adding an inner-loop test, we put some extra + * "63"s after the real entries. This will cause the extra coefficient + * to be stored in location 63 of the block, not somewhere random. + * The worst case would be a run-length of 15, which means we need 16 + * fake entries. + */ + +const int jpeg_natural_order[DCTSIZE2+16] = { + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, + 63, 63, 63, 63, 63, 63, 63, 63, /* extra entries for safety in decoder */ + 63, 63, 63, 63, 63, 63, 63, 63 +}; + + +/* + * Arithmetic utilities + */ + +GLOBAL(long) +jdiv_round_up (long a, long b) +/* Compute a/b rounded up to next integer, ie, ceil(a/b) */ +/* Assumes a >= 0, b > 0 */ +{ + return (a + b - 1L) / b; +} + + +GLOBAL(long) +jround_up (long a, long b) +/* Compute a rounded up to next multiple of b, ie, ceil(a/b)*b */ +/* Assumes a >= 0, b > 0 */ +{ + a += b - 1L; + return a - (a % b); +} + + +/* On normal machines we can apply MEMCOPY() and MEMZERO() to sample arrays + * and coefficient-block arrays. This won't work on 80x86 because the arrays + * are FAR and we're assuming a small-pointer memory model. However, some + * DOS compilers provide far-pointer versions of memcpy() and memset() even + * in the small-model libraries. These will be used if USE_FMEM is defined. + * Otherwise, the routines below do it the hard way. (The performance cost + * is not all that great, because these routines aren't very heavily used.) + */ + +#ifndef NEED_FAR_POINTERS /* normal case, same as regular macros */ +#define FMEMCOPY(dest,src,size) MEMCOPY(dest,src,size) +#define FMEMZERO(target,size) MEMZERO(target,size) +#else /* 80x86 case, define if we can */ +#ifdef USE_FMEM +#define FMEMCOPY(dest,src,size) _fmemcpy((void FAR *)(dest), (const void FAR *)(src), (size_t)(size)) +#define FMEMZERO(target,size) _fmemset((void FAR *)(target), 0, (size_t)(size)) +#endif +#endif + + +GLOBAL(void) +jcopy_sample_rows (JSAMPARRAY input_array, int source_row, + JSAMPARRAY output_array, int dest_row, + int num_rows, JDIMENSION num_cols) +/* Copy some rows of samples from one place to another. + * num_rows rows are copied from input_array[source_row++] + * to output_array[dest_row++]; these areas may overlap for duplication. + * The source and destination arrays must be at least as wide as num_cols. + */ +{ + register JSAMPROW inptr, outptr; +#ifdef FMEMCOPY + register size_t count = (size_t) (num_cols * SIZEOF(JSAMPLE)); +#else + register JDIMENSION count; +#endif + register int row; + + input_array += source_row; + output_array += dest_row; + + for (row = num_rows; row > 0; row--) { + inptr = *input_array++; + outptr = *output_array++; +#ifdef FMEMCOPY + FMEMCOPY(outptr, inptr, count); +#else + for (count = num_cols; count > 0; count--) + *outptr++ = *inptr++; /* needn't bother with GETJSAMPLE() here */ +#endif + } +} + + +GLOBAL(void) +jcopy_block_row (JBLOCKROW input_row, JBLOCKROW output_row, + JDIMENSION num_blocks) +/* Copy a row of coefficient blocks from one place to another. */ +{ +#ifdef FMEMCOPY + FMEMCOPY(output_row, input_row, num_blocks * (DCTSIZE2 * SIZEOF(JCOEF))); +#else + register JCOEFPTR inptr, outptr; + register long count; + + inptr = (JCOEFPTR) input_row; + outptr = (JCOEFPTR) output_row; + for (count = (long) num_blocks * DCTSIZE2; count > 0; count--) { + *outptr++ = *inptr++; + } +#endif +} + + +GLOBAL(void) +jzero_far (void FAR * target, size_t bytestozero) +/* Zero out a chunk of FAR memory. */ +/* This might be sample-array data, block-array data, or alloc_large data. */ +{ +#ifdef FMEMZERO + FMEMZERO(target, bytestozero); +#else + register char FAR * ptr = (char FAR *) target; + register size_t count; + + for (count = bytestozero; count > 0; count--) { + *ptr++ = 0; + } +#endif +} diff --git a/Build/source/extra/jpeg/jversion.h b/Build/source/extra/jpeg/jversion.h new file mode 100644 index 00000000000..6472c58d351 --- /dev/null +++ b/Build/source/extra/jpeg/jversion.h @@ -0,0 +1,14 @@ +/* + * jversion.h + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains software version identification. + */ + + +#define JVERSION "6b 27-Mar-1998" + +#define JCOPYRIGHT "Copyright (C) 1998, Thomas G. Lane" diff --git a/Build/source/extra/jpeg/libjpeg.doc b/Build/source/extra/jpeg/libjpeg.doc new file mode 100644 index 00000000000..689b206c07f --- /dev/null +++ b/Build/source/extra/jpeg/libjpeg.doc @@ -0,0 +1,3006 @@ +USING THE IJG JPEG LIBRARY + +Copyright (C) 1994-1998, Thomas G. Lane. +This file is part of the Independent JPEG Group's software. +For conditions of distribution and use, see the accompanying README file. + + +This file describes how to use the IJG JPEG library within an application +program. Read it if you want to write a program that uses the library. + +The file example.c provides heavily commented skeleton code for calling the +JPEG library. Also see jpeglib.h (the include file to be used by application +programs) for full details about data structures and function parameter lists. +The library source code, of course, is the ultimate reference. + +Note that there have been *major* changes from the application interface +presented by IJG version 4 and earlier versions. The old design had several +inherent limitations, and it had accumulated a lot of cruft as we added +features while trying to minimize application-interface changes. We have +sacrificed backward compatibility in the version 5 rewrite, but we think the +improvements justify this. + + +TABLE OF CONTENTS +----------------- + +Overview: + Functions provided by the library + Outline of typical usage +Basic library usage: + Data formats + Compression details + Decompression details + Mechanics of usage: include files, linking, etc +Advanced features: + Compression parameter selection + Decompression parameter selection + Special color spaces + Error handling + Compressed data handling (source and destination managers) + I/O suspension + Progressive JPEG support + Buffered-image mode + Abbreviated datastreams and multiple images + Special markers + Raw (downsampled) image data + Really raw data: DCT coefficients + Progress monitoring + Memory management + Memory usage + Library compile-time options + Portability considerations + Notes for MS-DOS implementors + +You should read at least the overview and basic usage sections before trying +to program with the library. The sections on advanced features can be read +if and when you need them. + + +OVERVIEW +======== + +Functions provided by the library +--------------------------------- + +The IJG JPEG library provides C code to read and write JPEG-compressed image +files. The surrounding application program receives or supplies image data a +scanline at a time, using a straightforward uncompressed image format. All +details of color conversion and other preprocessing/postprocessing can be +handled by the library. + +The library includes a substantial amount of code that is not covered by the +JPEG standard but is necessary for typical applications of JPEG. These +functions preprocess the image before JPEG compression or postprocess it after +decompression. They include colorspace conversion, downsampling/upsampling, +and color quantization. The application indirectly selects use of this code +by specifying the format in which it wishes to supply or receive image data. +For example, if colormapped output is requested, then the decompression +library automatically invokes color quantization. + +A wide range of quality vs. speed tradeoffs are possible in JPEG processing, +and even more so in decompression postprocessing. The decompression library +provides multiple implementations that cover most of the useful tradeoffs, +ranging from very-high-quality down to fast-preview operation. On the +compression side we have generally not provided low-quality choices, since +compression is normally less time-critical. It should be understood that the +low-quality modes may not meet the JPEG standard's accuracy requirements; +nonetheless, they are useful for viewers. + +A word about functions *not* provided by the library. We handle a subset of +the ISO JPEG standard; most baseline, extended-sequential, and progressive +JPEG processes are supported. (Our subset includes all features now in common +use.) Unsupported ISO options include: + * Hierarchical storage + * Lossless JPEG + * Arithmetic entropy coding (unsupported for legal reasons) + * DNL marker + * Nonintegral subsampling ratios +We support both 8- and 12-bit data precision, but this is a compile-time +choice rather than a run-time choice; hence it is difficult to use both +precisions in a single application. + +By itself, the library handles only interchange JPEG datastreams --- in +particular the widely used JFIF file format. The library can be used by +surrounding code to process interchange or abbreviated JPEG datastreams that +are embedded in more complex file formats. (For example, this library is +used by the free LIBTIFF library to support JPEG compression in TIFF.) + + +Outline of typical usage +------------------------ + +The rough outline of a JPEG compression operation is: + + Allocate and initialize a JPEG compression object + Specify the destination for the compressed data (eg, a file) + Set parameters for compression, including image size & colorspace + jpeg_start_compress(...); + while (scan lines remain to be written) + jpeg_write_scanlines(...); + jpeg_finish_compress(...); + Release the JPEG compression object + +A JPEG compression object holds parameters and working state for the JPEG +library. We make creation/destruction of the object separate from starting +or finishing compression of an image; the same object can be re-used for a +series of image compression operations. This makes it easy to re-use the +same parameter settings for a sequence of images. Re-use of a JPEG object +also has important implications for processing abbreviated JPEG datastreams, +as discussed later. + +The image data to be compressed is supplied to jpeg_write_scanlines() from +in-memory buffers. If the application is doing file-to-file compression, +reading image data from the source file is the application's responsibility. +The library emits compressed data by calling a "data destination manager", +which typically will write the data into a file; but the application can +provide its own destination manager to do something else. + +Similarly, the rough outline of a JPEG decompression operation is: + + Allocate and initialize a JPEG decompression object + Specify the source of the compressed data (eg, a file) + Call jpeg_read_header() to obtain image info + Set parameters for decompression + jpeg_start_decompress(...); + while (scan lines remain to be read) + jpeg_read_scanlines(...); + jpeg_finish_decompress(...); + Release the JPEG decompression object + +This is comparable to the compression outline except that reading the +datastream header is a separate step. This is helpful because information +about the image's size, colorspace, etc is available when the application +selects decompression parameters. For example, the application can choose an +output scaling ratio that will fit the image into the available screen size. + +The decompression library obtains compressed data by calling a data source +manager, which typically will read the data from a file; but other behaviors +can be obtained with a custom source manager. Decompressed data is delivered +into in-memory buffers passed to jpeg_read_scanlines(). + +It is possible to abort an incomplete compression or decompression operation +by calling jpeg_abort(); or, if you do not need to retain the JPEG object, +simply release it by calling jpeg_destroy(). + +JPEG compression and decompression objects are two separate struct types. +However, they share some common fields, and certain routines such as +jpeg_destroy() can work on either type of object. + +The JPEG library has no static variables: all state is in the compression +or decompression object. Therefore it is possible to process multiple +compression and decompression operations concurrently, using multiple JPEG +objects. + +Both compression and decompression can be done in an incremental memory-to- +memory fashion, if suitable source/destination managers are used. See the +section on "I/O suspension" for more details. + + +BASIC LIBRARY USAGE +=================== + +Data formats +------------ + +Before diving into procedural details, it is helpful to understand the +image data format that the JPEG library expects or returns. + +The standard input image format is a rectangular array of pixels, with each +pixel having the same number of "component" or "sample" values (color +channels). You must specify how many components there are and the colorspace +interpretation of the components. Most applications will use RGB data +(three components per pixel) or grayscale data (one component per pixel). +PLEASE NOTE THAT RGB DATA IS THREE SAMPLES PER PIXEL, GRAYSCALE ONLY ONE. +A remarkable number of people manage to miss this, only to find that their +programs don't work with grayscale JPEG files. + +There is no provision for colormapped input. JPEG files are always full-color +or full grayscale (or sometimes another colorspace such as CMYK). You can +feed in a colormapped image by expanding it to full-color format. However +JPEG often doesn't work very well with source data that has been colormapped, +because of dithering noise. This is discussed in more detail in the JPEG FAQ +and the other references mentioned in the README file. + +Pixels are stored by scanlines, with each scanline running from left to +right. The component values for each pixel are adjacent in the row; for +example, R,G,B,R,G,B,R,G,B,... for 24-bit RGB color. Each scanline is an +array of data type JSAMPLE --- which is typically "unsigned char", unless +you've changed jmorecfg.h. (You can also change the RGB pixel layout, say +to B,G,R order, by modifying jmorecfg.h. But see the restrictions listed in +that file before doing so.) + +A 2-D array of pixels is formed by making a list of pointers to the starts of +scanlines; so the scanlines need not be physically adjacent in memory. Even +if you process just one scanline at a time, you must make a one-element +pointer array to conform to this structure. Pointers to JSAMPLE rows are of +type JSAMPROW, and the pointer to the pointer array is of type JSAMPARRAY. + +The library accepts or supplies one or more complete scanlines per call. +It is not possible to process part of a row at a time. Scanlines are always +processed top-to-bottom. You can process an entire image in one call if you +have it all in memory, but usually it's simplest to process one scanline at +a time. + +For best results, source data values should have the precision specified by +BITS_IN_JSAMPLE (normally 8 bits). For instance, if you choose to compress +data that's only 6 bits/channel, you should left-justify each value in a +byte before passing it to the compressor. If you need to compress data +that has more than 8 bits/channel, compile with BITS_IN_JSAMPLE = 12. +(See "Library compile-time options", later.) + + +The data format returned by the decompressor is the same in all details, +except that colormapped output is supported. (Again, a JPEG file is never +colormapped. But you can ask the decompressor to perform on-the-fly color +quantization to deliver colormapped output.) If you request colormapped +output then the returned data array contains a single JSAMPLE per pixel; +its value is an index into a color map. The color map is represented as +a 2-D JSAMPARRAY in which each row holds the values of one color component, +that is, colormap[i][j] is the value of the i'th color component for pixel +value (map index) j. Note that since the colormap indexes are stored in +JSAMPLEs, the maximum number of colors is limited by the size of JSAMPLE +(ie, at most 256 colors for an 8-bit JPEG library). + + +Compression details +------------------- + +Here we revisit the JPEG compression outline given in the overview. + +1. Allocate and initialize a JPEG compression object. + +A JPEG compression object is a "struct jpeg_compress_struct". (It also has +a bunch of subsidiary structures which are allocated via malloc(), but the +application doesn't control those directly.) This struct can be just a local +variable in the calling routine, if a single routine is going to execute the +whole JPEG compression sequence. Otherwise it can be static or allocated +from malloc(). + +You will also need a structure representing a JPEG error handler. The part +of this that the library cares about is a "struct jpeg_error_mgr". If you +are providing your own error handler, you'll typically want to embed the +jpeg_error_mgr struct in a larger structure; this is discussed later under +"Error handling". For now we'll assume you are just using the default error +handler. The default error handler will print JPEG error/warning messages +on stderr, and it will call exit() if a fatal error occurs. + +You must initialize the error handler structure, store a pointer to it into +the JPEG object's "err" field, and then call jpeg_create_compress() to +initialize the rest of the JPEG object. + +Typical code for this step, if you are using the default error handler, is + + struct jpeg_compress_struct cinfo; + struct jpeg_error_mgr jerr; + ... + cinfo.err = jpeg_std_error(&jerr); + jpeg_create_compress(&cinfo); + +jpeg_create_compress allocates a small amount of memory, so it could fail +if you are out of memory. In that case it will exit via the error handler; +that's why the error handler must be initialized first. + + +2. Specify the destination for the compressed data (eg, a file). + +As previously mentioned, the JPEG library delivers compressed data to a +"data destination" module. The library includes one data destination +module which knows how to write to a stdio stream. You can use your own +destination module if you want to do something else, as discussed later. + +If you use the standard destination module, you must open the target stdio +stream beforehand. Typical code for this step looks like: + + FILE * outfile; + ... + if ((outfile = fopen(filename, "wb")) == NULL) { + fprintf(stderr, "can't open %s\n", filename); + exit(1); + } + jpeg_stdio_dest(&cinfo, outfile); + +where the last line invokes the standard destination module. + +WARNING: it is critical that the binary compressed data be delivered to the +output file unchanged. On non-Unix systems the stdio library may perform +newline translation or otherwise corrupt binary data. To suppress this +behavior, you may need to use a "b" option to fopen (as shown above), or use +setmode() or another routine to put the stdio stream in binary mode. See +cjpeg.c and djpeg.c for code that has been found to work on many systems. + +You can select the data destination after setting other parameters (step 3), +if that's more convenient. You may not change the destination between +calling jpeg_start_compress() and jpeg_finish_compress(). + + +3. Set parameters for compression, including image size & colorspace. + +You must supply information about the source image by setting the following +fields in the JPEG object (cinfo structure): + + image_width Width of image, in pixels + image_height Height of image, in pixels + input_components Number of color channels (samples per pixel) + in_color_space Color space of source image + +The image dimensions are, hopefully, obvious. JPEG supports image dimensions +of 1 to 64K pixels in either direction. The input color space is typically +RGB or grayscale, and input_components is 3 or 1 accordingly. (See "Special +color spaces", later, for more info.) The in_color_space field must be +assigned one of the J_COLOR_SPACE enum constants, typically JCS_RGB or +JCS_GRAYSCALE. + +JPEG has a large number of compression parameters that determine how the +image is encoded. Most applications don't need or want to know about all +these parameters. You can set all the parameters to reasonable defaults by +calling jpeg_set_defaults(); then, if there are particular values you want +to change, you can do so after that. The "Compression parameter selection" +section tells about all the parameters. + +You must set in_color_space correctly before calling jpeg_set_defaults(), +because the defaults depend on the source image colorspace. However the +other three source image parameters need not be valid until you call +jpeg_start_compress(). There's no harm in calling jpeg_set_defaults() more +than once, if that happens to be convenient. + +Typical code for a 24-bit RGB source image is + + cinfo.image_width = Width; /* image width and height, in pixels */ + cinfo.image_height = Height; + cinfo.input_components = 3; /* # of color components per pixel */ + cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ + + jpeg_set_defaults(&cinfo); + /* Make optional parameter settings here */ + + +4. jpeg_start_compress(...); + +After you have established the data destination and set all the necessary +source image info and other parameters, call jpeg_start_compress() to begin +a compression cycle. This will initialize internal state, allocate working +storage, and emit the first few bytes of the JPEG datastream header. + +Typical code: + + jpeg_start_compress(&cinfo, TRUE); + +The "TRUE" parameter ensures that a complete JPEG interchange datastream +will be written. This is appropriate in most cases. If you think you might +want to use an abbreviated datastream, read the section on abbreviated +datastreams, below. + +Once you have called jpeg_start_compress(), you may not alter any JPEG +parameters or other fields of the JPEG object until you have completed +the compression cycle. + + +5. while (scan lines remain to be written) + jpeg_write_scanlines(...); + +Now write all the required image data by calling jpeg_write_scanlines() +one or more times. You can pass one or more scanlines in each call, up +to the total image height. In most applications it is convenient to pass +just one or a few scanlines at a time. The expected format for the passed +data is discussed under "Data formats", above. + +Image data should be written in top-to-bottom scanline order. The JPEG spec +contains some weasel wording about how top and bottom are application-defined +terms (a curious interpretation of the English language...) but if you want +your files to be compatible with everyone else's, you WILL use top-to-bottom +order. If the source data must be read in bottom-to-top order, you can use +the JPEG library's virtual array mechanism to invert the data efficiently. +Examples of this can be found in the sample application cjpeg. + +The library maintains a count of the number of scanlines written so far +in the next_scanline field of the JPEG object. Usually you can just use +this variable as the loop counter, so that the loop test looks like +"while (cinfo.next_scanline < cinfo.image_height)". + +Code for this step depends heavily on the way that you store the source data. +example.c shows the following code for the case of a full-size 2-D source +array containing 3-byte RGB pixels: + + JSAMPROW row_pointer[1]; /* pointer to a single row */ + int row_stride; /* physical row width in buffer */ + + row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */ + + while (cinfo.next_scanline < cinfo.image_height) { + row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride]; + jpeg_write_scanlines(&cinfo, row_pointer, 1); + } + +jpeg_write_scanlines() returns the number of scanlines actually written. +This will normally be equal to the number passed in, so you can usually +ignore the return value. It is different in just two cases: + * If you try to write more scanlines than the declared image height, + the additional scanlines are ignored. + * If you use a suspending data destination manager, output buffer overrun + will cause the compressor to return before accepting all the passed lines. + This feature is discussed under "I/O suspension", below. The normal + stdio destination manager will NOT cause this to happen. +In any case, the return value is the same as the change in the value of +next_scanline. + + +6. jpeg_finish_compress(...); + +After all the image data has been written, call jpeg_finish_compress() to +complete the compression cycle. This step is ESSENTIAL to ensure that the +last bufferload of data is written to the data destination. +jpeg_finish_compress() also releases working memory associated with the JPEG +object. + +Typical code: + + jpeg_finish_compress(&cinfo); + +If using the stdio destination manager, don't forget to close the output +stdio stream (if necessary) afterwards. + +If you have requested a multi-pass operating mode, such as Huffman code +optimization, jpeg_finish_compress() will perform the additional passes using +data buffered by the first pass. In this case jpeg_finish_compress() may take +quite a while to complete. With the default compression parameters, this will +not happen. + +It is an error to call jpeg_finish_compress() before writing the necessary +total number of scanlines. If you wish to abort compression, call +jpeg_abort() as discussed below. + +After completing a compression cycle, you may dispose of the JPEG object +as discussed next, or you may use it to compress another image. In that case +return to step 2, 3, or 4 as appropriate. If you do not change the +destination manager, the new datastream will be written to the same target. +If you do not change any JPEG parameters, the new datastream will be written +with the same parameters as before. Note that you can change the input image +dimensions freely between cycles, but if you change the input colorspace, you +should call jpeg_set_defaults() to adjust for the new colorspace; and then +you'll need to repeat all of step 3. + + +7. Release the JPEG compression object. + +When you are done with a JPEG compression object, destroy it by calling +jpeg_destroy_compress(). This will free all subsidiary memory (regardless of +the previous state of the object). Or you can call jpeg_destroy(), which +works for either compression or decompression objects --- this may be more +convenient if you are sharing code between compression and decompression +cases. (Actually, these routines are equivalent except for the declared type +of the passed pointer. To avoid gripes from ANSI C compilers, jpeg_destroy() +should be passed a j_common_ptr.) + +If you allocated the jpeg_compress_struct structure from malloc(), freeing +it is your responsibility --- jpeg_destroy() won't. Ditto for the error +handler structure. + +Typical code: + + jpeg_destroy_compress(&cinfo); + + +8. Aborting. + +If you decide to abort a compression cycle before finishing, you can clean up +in either of two ways: + +* If you don't need the JPEG object any more, just call + jpeg_destroy_compress() or jpeg_destroy() to release memory. This is + legitimate at any point after calling jpeg_create_compress() --- in fact, + it's safe even if jpeg_create_compress() fails. + +* If you want to re-use the JPEG object, call jpeg_abort_compress(), or call + jpeg_abort() which works on both compression and decompression objects. + This will return the object to an idle state, releasing any working memory. + jpeg_abort() is allowed at any time after successful object creation. + +Note that cleaning up the data destination, if required, is your +responsibility; neither of these routines will call term_destination(). +(See "Compressed data handling", below, for more about that.) + +jpeg_destroy() and jpeg_abort() are the only safe calls to make on a JPEG +object that has reported an error by calling error_exit (see "Error handling" +for more info). The internal state of such an object is likely to be out of +whack. Either of these two routines will return the object to a known state. + + +Decompression details +--------------------- + +Here we revisit the JPEG decompression outline given in the overview. + +1. Allocate and initialize a JPEG decompression object. + +This is just like initialization for compression, as discussed above, +except that the object is a "struct jpeg_decompress_struct" and you +call jpeg_create_decompress(). Error handling is exactly the same. + +Typical code: + + struct jpeg_decompress_struct cinfo; + struct jpeg_error_mgr jerr; + ... + cinfo.err = jpeg_std_error(&jerr); + jpeg_create_decompress(&cinfo); + +(Both here and in the IJG code, we usually use variable name "cinfo" for +both compression and decompression objects.) + + +2. Specify the source of the compressed data (eg, a file). + +As previously mentioned, the JPEG library reads compressed data from a "data +source" module. The library includes one data source module which knows how +to read from a stdio stream. You can use your own source module if you want +to do something else, as discussed later. + +If you use the standard source module, you must open the source stdio stream +beforehand. Typical code for this step looks like: + + FILE * infile; + ... + if ((infile = fopen(filename, "rb")) == NULL) { + fprintf(stderr, "can't open %s\n", filename); + exit(1); + } + jpeg_stdio_src(&cinfo, infile); + +where the last line invokes the standard source module. + +WARNING: it is critical that the binary compressed data be read unchanged. +On non-Unix systems the stdio library may perform newline translation or +otherwise corrupt binary data. To suppress this behavior, you may need to use +a "b" option to fopen (as shown above), or use setmode() or another routine to +put the stdio stream in binary mode. See cjpeg.c and djpeg.c for code that +has been found to work on many systems. + +You may not change the data source between calling jpeg_read_header() and +jpeg_finish_decompress(). If you wish to read a series of JPEG images from +a single source file, you should repeat the jpeg_read_header() to +jpeg_finish_decompress() sequence without reinitializing either the JPEG +object or the data source module; this prevents buffered input data from +being discarded. + + +3. Call jpeg_read_header() to obtain image info. + +Typical code for this step is just + + jpeg_read_header(&cinfo, TRUE); + +This will read the source datastream header markers, up to the beginning +of the compressed data proper. On return, the image dimensions and other +info have been stored in the JPEG object. The application may wish to +consult this information before selecting decompression parameters. + +More complex code is necessary if + * A suspending data source is used --- in that case jpeg_read_header() + may return before it has read all the header data. See "I/O suspension", + below. The normal stdio source manager will NOT cause this to happen. + * Abbreviated JPEG files are to be processed --- see the section on + abbreviated datastreams. Standard applications that deal only in + interchange JPEG files need not be concerned with this case either. + +It is permissible to stop at this point if you just wanted to find out the +image dimensions and other header info for a JPEG file. In that case, +call jpeg_destroy() when you are done with the JPEG object, or call +jpeg_abort() to return it to an idle state before selecting a new data +source and reading another header. + + +4. Set parameters for decompression. + +jpeg_read_header() sets appropriate default decompression parameters based on +the properties of the image (in particular, its colorspace). However, you +may well want to alter these defaults before beginning the decompression. +For example, the default is to produce full color output from a color file. +If you want colormapped output you must ask for it. Other options allow the +returned image to be scaled and allow various speed/quality tradeoffs to be +selected. "Decompression parameter selection", below, gives details. + +If the defaults are appropriate, nothing need be done at this step. + +Note that all default values are set by each call to jpeg_read_header(). +If you reuse a decompression object, you cannot expect your parameter +settings to be preserved across cycles, as you can for compression. +You must set desired parameter values each time. + + +5. jpeg_start_decompress(...); + +Once the parameter values are satisfactory, call jpeg_start_decompress() to +begin decompression. This will initialize internal state, allocate working +memory, and prepare for returning data. + +Typical code is just + + jpeg_start_decompress(&cinfo); + +If you have requested a multi-pass operating mode, such as 2-pass color +quantization, jpeg_start_decompress() will do everything needed before data +output can begin. In this case jpeg_start_decompress() may take quite a while +to complete. With a single-scan (non progressive) JPEG file and default +decompression parameters, this will not happen; jpeg_start_decompress() will +return quickly. + +After this call, the final output image dimensions, including any requested +scaling, are available in the JPEG object; so is the selected colormap, if +colormapped output has been requested. Useful fields include + + output_width image width and height, as scaled + output_height + out_color_components # of color components in out_color_space + output_components # of color components returned per pixel + colormap the selected colormap, if any + actual_number_of_colors number of entries in colormap + +output_components is 1 (a colormap index) when quantizing colors; otherwise it +equals out_color_components. It is the number of JSAMPLE values that will be +emitted per pixel in the output arrays. + +Typically you will need to allocate data buffers to hold the incoming image. +You will need output_width * output_components JSAMPLEs per scanline in your +output buffer, and a total of output_height scanlines will be returned. + +Note: if you are using the JPEG library's internal memory manager to allocate +data buffers (as djpeg does), then the manager's protocol requires that you +request large buffers *before* calling jpeg_start_decompress(). This is a +little tricky since the output_XXX fields are not normally valid then. You +can make them valid by calling jpeg_calc_output_dimensions() after setting the +relevant parameters (scaling, output color space, and quantization flag). + + +6. while (scan lines remain to be read) + jpeg_read_scanlines(...); + +Now you can read the decompressed image data by calling jpeg_read_scanlines() +one or more times. At each call, you pass in the maximum number of scanlines +to be read (ie, the height of your working buffer); jpeg_read_scanlines() +will return up to that many lines. The return value is the number of lines +actually read. The format of the returned data is discussed under "Data +formats", above. Don't forget that grayscale and color JPEGs will return +different data formats! + +Image data is returned in top-to-bottom scanline order. If you must write +out the image in bottom-to-top order, you can use the JPEG library's virtual +array mechanism to invert the data efficiently. Examples of this can be +found in the sample application djpeg. + +The library maintains a count of the number of scanlines returned so far +in the output_scanline field of the JPEG object. Usually you can just use +this variable as the loop counter, so that the loop test looks like +"while (cinfo.output_scanline < cinfo.output_height)". (Note that the test +should NOT be against image_height, unless you never use scaling. The +image_height field is the height of the original unscaled image.) +The return value always equals the change in the value of output_scanline. + +If you don't use a suspending data source, it is safe to assume that +jpeg_read_scanlines() reads at least one scanline per call, until the +bottom of the image has been reached. + +If you use a buffer larger than one scanline, it is NOT safe to assume that +jpeg_read_scanlines() fills it. (The current implementation returns only a +few scanlines per call, no matter how large a buffer you pass.) So you must +always provide a loop that calls jpeg_read_scanlines() repeatedly until the +whole image has been read. + + +7. jpeg_finish_decompress(...); + +After all the image data has been read, call jpeg_finish_decompress() to +complete the decompression cycle. This causes working memory associated +with the JPEG object to be released. + +Typical code: + + jpeg_finish_decompress(&cinfo); + +If using the stdio source manager, don't forget to close the source stdio +stream if necessary. + +It is an error to call jpeg_finish_decompress() before reading the correct +total number of scanlines. If you wish to abort decompression, call +jpeg_abort() as discussed below. + +After completing a decompression cycle, you may dispose of the JPEG object as +discussed next, or you may use it to decompress another image. In that case +return to step 2 or 3 as appropriate. If you do not change the source +manager, the next image will be read from the same source. + + +8. Release the JPEG decompression object. + +When you are done with a JPEG decompression object, destroy it by calling +jpeg_destroy_decompress() or jpeg_destroy(). The previous discussion of +destroying compression objects applies here too. + +Typical code: + + jpeg_destroy_decompress(&cinfo); + + +9. Aborting. + +You can abort a decompression cycle by calling jpeg_destroy_decompress() or +jpeg_destroy() if you don't need the JPEG object any more, or +jpeg_abort_decompress() or jpeg_abort() if you want to reuse the object. +The previous discussion of aborting compression cycles applies here too. + + +Mechanics of usage: include files, linking, etc +----------------------------------------------- + +Applications using the JPEG library should include the header file jpeglib.h +to obtain declarations of data types and routines. Before including +jpeglib.h, include system headers that define at least the typedefs FILE and +size_t. On ANSI-conforming systems, including is sufficient; on +older Unix systems, you may need to define size_t. + +If the application needs to refer to individual JPEG library error codes, also +include jerror.h to define those symbols. + +jpeglib.h indirectly includes the files jconfig.h and jmorecfg.h. If you are +installing the JPEG header files in a system directory, you will want to +install all four files: jpeglib.h, jerror.h, jconfig.h, jmorecfg.h. + +The most convenient way to include the JPEG code into your executable program +is to prepare a library file ("libjpeg.a", or a corresponding name on non-Unix +machines) and reference it at your link step. If you use only half of the +library (only compression or only decompression), only that much code will be +included from the library, unless your linker is hopelessly brain-damaged. +The supplied makefiles build libjpeg.a automatically (see install.doc). + +While you can build the JPEG library as a shared library if the whim strikes +you, we don't really recommend it. The trouble with shared libraries is that +at some point you'll probably try to substitute a new version of the library +without recompiling the calling applications. That generally doesn't work +because the parameter struct declarations usually change with each new +version. In other words, the library's API is *not* guaranteed binary +compatible across versions; we only try to ensure source-code compatibility. +(In hindsight, it might have been smarter to hide the parameter structs from +applications and introduce a ton of access functions instead. Too late now, +however.) + +On some systems your application may need to set up a signal handler to ensure +that temporary files are deleted if the program is interrupted. This is most +critical if you are on MS-DOS and use the jmemdos.c memory manager back end; +it will try to grab extended memory for temp files, and that space will NOT be +freed automatically. See cjpeg.c or djpeg.c for an example signal handler. + +It may be worth pointing out that the core JPEG library does not actually +require the stdio library: only the default source/destination managers and +error handler need it. You can use the library in a stdio-less environment +if you replace those modules and use jmemnobs.c (or another memory manager of +your own devising). More info about the minimum system library requirements +may be found in jinclude.h. + + +ADVANCED FEATURES +================= + +Compression parameter selection +------------------------------- + +This section describes all the optional parameters you can set for JPEG +compression, as well as the "helper" routines provided to assist in this +task. Proper setting of some parameters requires detailed understanding +of the JPEG standard; if you don't know what a parameter is for, it's best +not to mess with it! See REFERENCES in the README file for pointers to +more info about JPEG. + +It's a good idea to call jpeg_set_defaults() first, even if you plan to set +all the parameters; that way your code is more likely to work with future JPEG +libraries that have additional parameters. For the same reason, we recommend +you use a helper routine where one is provided, in preference to twiddling +cinfo fields directly. + +The helper routines are: + +jpeg_set_defaults (j_compress_ptr cinfo) + This routine sets all JPEG parameters to reasonable defaults, using + only the input image's color space (field in_color_space, which must + already be set in cinfo). Many applications will only need to use + this routine and perhaps jpeg_set_quality(). + +jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) + Sets the JPEG file's colorspace (field jpeg_color_space) as specified, + and sets other color-space-dependent parameters appropriately. See + "Special color spaces", below, before using this. A large number of + parameters, including all per-component parameters, are set by this + routine; if you want to twiddle individual parameters you should call + jpeg_set_colorspace() before rather than after. + +jpeg_default_colorspace (j_compress_ptr cinfo) + Selects an appropriate JPEG colorspace based on cinfo->in_color_space, + and calls jpeg_set_colorspace(). This is actually a subroutine of + jpeg_set_defaults(). It's broken out in case you want to change + just the colorspace-dependent JPEG parameters. + +jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline) + Constructs JPEG quantization tables appropriate for the indicated + quality setting. The quality value is expressed on the 0..100 scale + recommended by IJG (cjpeg's "-quality" switch uses this routine). + Note that the exact mapping from quality values to tables may change + in future IJG releases as more is learned about DCT quantization. + If the force_baseline parameter is TRUE, then the quantization table + entries are constrained to the range 1..255 for full JPEG baseline + compatibility. In the current implementation, this only makes a + difference for quality settings below 25, and it effectively prevents + very small/low quality files from being generated. The IJG decoder + is capable of reading the non-baseline files generated at low quality + settings when force_baseline is FALSE, but other decoders may not be. + +jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor, + boolean force_baseline) + Same as jpeg_set_quality() except that the generated tables are the + sample tables given in the JPEC spec section K.1, multiplied by the + specified scale factor (which is expressed as a percentage; thus + scale_factor = 100 reproduces the spec's tables). Note that larger + scale factors give lower quality. This entry point is useful for + conforming to the Adobe PostScript DCT conventions, but we do not + recommend linear scaling as a user-visible quality scale otherwise. + force_baseline again constrains the computed table entries to 1..255. + +int jpeg_quality_scaling (int quality) + Converts a value on the IJG-recommended quality scale to a linear + scaling percentage. Note that this routine may change or go away + in future releases --- IJG may choose to adopt a scaling method that + can't be expressed as a simple scalar multiplier, in which case the + premise of this routine collapses. Caveat user. + +jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl, + const unsigned int *basic_table, + int scale_factor, boolean force_baseline) + Allows an arbitrary quantization table to be created. which_tbl + indicates which table slot to fill. basic_table points to an array + of 64 unsigned ints given in normal array order. These values are + multiplied by scale_factor/100 and then clamped to the range 1..65535 + (or to 1..255 if force_baseline is TRUE). + CAUTION: prior to library version 6a, jpeg_add_quant_table expected + the basic table to be given in JPEG zigzag order. If you need to + write code that works with either older or newer versions of this + routine, you must check the library version number. Something like + "#if JPEG_LIB_VERSION >= 61" is the right test. + +jpeg_simple_progression (j_compress_ptr cinfo) + Generates a default scan script for writing a progressive-JPEG file. + This is the recommended method of creating a progressive file, + unless you want to make a custom scan sequence. You must ensure that + the JPEG color space is set correctly before calling this routine. + + +Compression parameters (cinfo fields) include: + +J_DCT_METHOD dct_method + Selects the algorithm used for the DCT step. Choices are: + JDCT_ISLOW: slow but accurate integer algorithm + JDCT_IFAST: faster, less accurate integer method + JDCT_FLOAT: floating-point method + JDCT_DEFAULT: default method (normally JDCT_ISLOW) + JDCT_FASTEST: fastest method (normally JDCT_IFAST) + The FLOAT method is very slightly more accurate than the ISLOW method, + but may give different results on different machines due to varying + roundoff behavior. The integer methods should give the same results + on all machines. On machines with sufficiently fast FP hardware, the + floating-point method may also be the fastest. The IFAST method is + considerably less accurate than the other two; its use is not + recommended if high quality is a concern. JDCT_DEFAULT and + JDCT_FASTEST are macros configurable by each installation. + +J_COLOR_SPACE jpeg_color_space +int num_components + The JPEG color space and corresponding number of components; see + "Special color spaces", below, for more info. We recommend using + jpeg_set_color_space() if you want to change these. + +boolean optimize_coding + TRUE causes the compressor to compute optimal Huffman coding tables + for the image. This requires an extra pass over the data and + therefore costs a good deal of space and time. The default is + FALSE, which tells the compressor to use the supplied or default + Huffman tables. In most cases optimal tables save only a few percent + of file size compared to the default tables. Note that when this is + TRUE, you need not supply Huffman tables at all, and any you do + supply will be overwritten. + +unsigned int restart_interval +int restart_in_rows + To emit restart markers in the JPEG file, set one of these nonzero. + Set restart_interval to specify the exact interval in MCU blocks. + Set restart_in_rows to specify the interval in MCU rows. (If + restart_in_rows is not 0, then restart_interval is set after the + image width in MCUs is computed.) Defaults are zero (no restarts). + One restart marker per MCU row is often a good choice. + NOTE: the overhead of restart markers is higher in grayscale JPEG + files than in color files, and MUCH higher in progressive JPEGs. + If you use restarts, you may want to use larger intervals in those + cases. + +const jpeg_scan_info * scan_info +int num_scans + By default, scan_info is NULL; this causes the compressor to write a + single-scan sequential JPEG file. If not NULL, scan_info points to + an array of scan definition records of length num_scans. The + compressor will then write a JPEG file having one scan for each scan + definition record. This is used to generate noninterleaved or + progressive JPEG files. The library checks that the scan array + defines a valid JPEG scan sequence. (jpeg_simple_progression creates + a suitable scan definition array for progressive JPEG.) This is + discussed further under "Progressive JPEG support". + +int smoothing_factor + If non-zero, the input image is smoothed; the value should be 1 for + minimal smoothing to 100 for maximum smoothing. Consult jcsample.c + for details of the smoothing algorithm. The default is zero. + +boolean write_JFIF_header + If TRUE, a JFIF APP0 marker is emitted. jpeg_set_defaults() and + jpeg_set_colorspace() set this TRUE if a JFIF-legal JPEG color space + (ie, YCbCr or grayscale) is selected, otherwise FALSE. + +UINT8 JFIF_major_version +UINT8 JFIF_minor_version + The version number to be written into the JFIF marker. + jpeg_set_defaults() initializes the version to 1.01 (major=minor=1). + You should set it to 1.02 (major=1, minor=2) if you plan to write + any JFIF 1.02 extension markers. + +UINT8 density_unit +UINT16 X_density +UINT16 Y_density + The resolution information to be written into the JFIF marker; + not used otherwise. density_unit may be 0 for unknown, + 1 for dots/inch, or 2 for dots/cm. The default values are 0,1,1 + indicating square pixels of unknown size. + +boolean write_Adobe_marker + If TRUE, an Adobe APP14 marker is emitted. jpeg_set_defaults() and + jpeg_set_colorspace() set this TRUE if JPEG color space RGB, CMYK, + or YCCK is selected, otherwise FALSE. It is generally a bad idea + to set both write_JFIF_header and write_Adobe_marker. In fact, + you probably shouldn't change the default settings at all --- the + default behavior ensures that the JPEG file's color space can be + recognized by the decoder. + +JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS] + Pointers to coefficient quantization tables, one per table slot, + or NULL if no table is defined for a slot. Usually these should + be set via one of the above helper routines; jpeg_add_quant_table() + is general enough to define any quantization table. The other + routines will set up table slot 0 for luminance quality and table + slot 1 for chrominance. + +JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS] +JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS] + Pointers to Huffman coding tables, one per table slot, or NULL if + no table is defined for a slot. Slots 0 and 1 are filled with the + JPEG sample tables by jpeg_set_defaults(). If you need to allocate + more table structures, jpeg_alloc_huff_table() may be used. + Note that optimal Huffman tables can be computed for an image + by setting optimize_coding, as discussed above; there's seldom + any need to mess with providing your own Huffman tables. + +There are some additional cinfo fields which are not documented here +because you currently can't change them; for example, you can't set +arith_code TRUE because arithmetic coding is unsupported. + + +Per-component parameters are stored in the struct cinfo.comp_info[i] for +component number i. Note that components here refer to components of the +JPEG color space, *not* the source image color space. A suitably large +comp_info[] array is allocated by jpeg_set_defaults(); if you choose not +to use that routine, it's up to you to allocate the array. + +int component_id + The one-byte identifier code to be recorded in the JPEG file for + this component. For the standard color spaces, we recommend you + leave the default values alone. + +int h_samp_factor +int v_samp_factor + Horizontal and vertical sampling factors for the component; must + be 1..4 according to the JPEG standard. Note that larger sampling + factors indicate a higher-resolution component; many people find + this behavior quite unintuitive. The default values are 2,2 for + luminance components and 1,1 for chrominance components, except + for grayscale where 1,1 is used. + +int quant_tbl_no + Quantization table number for component. The default value is + 0 for luminance components and 1 for chrominance components. + +int dc_tbl_no +int ac_tbl_no + DC and AC entropy coding table numbers. The default values are + 0 for luminance components and 1 for chrominance components. + +int component_index + Must equal the component's index in comp_info[]. (Beginning in + release v6, the compressor library will fill this in automatically; + you don't have to.) + + +Decompression parameter selection +--------------------------------- + +Decompression parameter selection is somewhat simpler than compression +parameter selection, since all of the JPEG internal parameters are +recorded in the source file and need not be supplied by the application. +(Unless you are working with abbreviated files, in which case see +"Abbreviated datastreams", below.) Decompression parameters control +the postprocessing done on the image to deliver it in a format suitable +for the application's use. Many of the parameters control speed/quality +tradeoffs, in which faster decompression may be obtained at the price of +a poorer-quality image. The defaults select the highest quality (slowest) +processing. + +The following fields in the JPEG object are set by jpeg_read_header() and +may be useful to the application in choosing decompression parameters: + +JDIMENSION image_width Width and height of image +JDIMENSION image_height +int num_components Number of color components +J_COLOR_SPACE jpeg_color_space Colorspace of image +boolean saw_JFIF_marker TRUE if a JFIF APP0 marker was seen + UINT8 JFIF_major_version Version information from JFIF marker + UINT8 JFIF_minor_version + UINT8 density_unit Resolution data from JFIF marker + UINT16 X_density + UINT16 Y_density +boolean saw_Adobe_marker TRUE if an Adobe APP14 marker was seen + UINT8 Adobe_transform Color transform code from Adobe marker + +The JPEG color space, unfortunately, is something of a guess since the JPEG +standard proper does not provide a way to record it. In practice most files +adhere to the JFIF or Adobe conventions, and the decoder will recognize these +correctly. See "Special color spaces", below, for more info. + + +The decompression parameters that determine the basic properties of the +returned image are: + +J_COLOR_SPACE out_color_space + Output color space. jpeg_read_header() sets an appropriate default + based on jpeg_color_space; typically it will be RGB or grayscale. + The application can change this field to request output in a different + colorspace. For example, set it to JCS_GRAYSCALE to get grayscale + output from a color file. (This is useful for previewing: grayscale + output is faster than full color since the color components need not + be processed.) Note that not all possible color space transforms are + currently implemented; you may need to extend jdcolor.c if you want an + unusual conversion. + +unsigned int scale_num, scale_denom + Scale the image by the fraction scale_num/scale_denom. Default is + 1/1, or no scaling. Currently, the only supported scaling ratios + are 1/1, 1/2, 1/4, and 1/8. (The library design allows for arbitrary + scaling ratios but this is not likely to be implemented any time soon.) + Smaller scaling ratios permit significantly faster decoding since + fewer pixels need be processed and a simpler IDCT method can be used. + +boolean quantize_colors + If set TRUE, colormapped output will be delivered. Default is FALSE, + meaning that full-color output will be delivered. + +The next three parameters are relevant only if quantize_colors is TRUE. + +int desired_number_of_colors + Maximum number of colors to use in generating a library-supplied color + map (the actual number of colors is returned in a different field). + Default 256. Ignored when the application supplies its own color map. + +boolean two_pass_quantize + If TRUE, an extra pass over the image is made to select a custom color + map for the image. This usually looks a lot better than the one-size- + fits-all colormap that is used otherwise. Default is TRUE. Ignored + when the application supplies its own color map. + +J_DITHER_MODE dither_mode + Selects color dithering method. Supported values are: + JDITHER_NONE no dithering: fast, very low quality + JDITHER_ORDERED ordered dither: moderate speed and quality + JDITHER_FS Floyd-Steinberg dither: slow, high quality + Default is JDITHER_FS. (At present, ordered dither is implemented + only in the single-pass, standard-colormap case. If you ask for + ordered dither when two_pass_quantize is TRUE or when you supply + an external color map, you'll get F-S dithering.) + +When quantize_colors is TRUE, the target color map is described by the next +two fields. colormap is set to NULL by jpeg_read_header(). The application +can supply a color map by setting colormap non-NULL and setting +actual_number_of_colors to the map size. Otherwise, jpeg_start_decompress() +selects a suitable color map and sets these two fields itself. +[Implementation restriction: at present, an externally supplied colormap is +only accepted for 3-component output color spaces.] + +JSAMPARRAY colormap + The color map, represented as a 2-D pixel array of out_color_components + rows and actual_number_of_colors columns. Ignored if not quantizing. + CAUTION: if the JPEG library creates its own colormap, the storage + pointed to by this field is released by jpeg_finish_decompress(). + Copy the colormap somewhere else first, if you want to save it. + +int actual_number_of_colors + The number of colors in the color map. + +Additional decompression parameters that the application may set include: + +J_DCT_METHOD dct_method + Selects the algorithm used for the DCT step. Choices are the same + as described above for compression. + +boolean do_fancy_upsampling + If TRUE, do careful upsampling of chroma components. If FALSE, + a faster but sloppier method is used. Default is TRUE. The visual + impact of the sloppier method is often very small. + +boolean do_block_smoothing + If TRUE, interblock smoothing is applied in early stages of decoding + progressive JPEG files; if FALSE, not. Default is TRUE. Early + progression stages look "fuzzy" with smoothing, "blocky" without. + In any case, block smoothing ceases to be applied after the first few + AC coefficients are known to full accuracy, so it is relevant only + when using buffered-image mode for progressive images. + +boolean enable_1pass_quant +boolean enable_external_quant +boolean enable_2pass_quant + These are significant only in buffered-image mode, which is + described in its own section below. + + +The output image dimensions are given by the following fields. These are +computed from the source image dimensions and the decompression parameters +by jpeg_start_decompress(). You can also call jpeg_calc_output_dimensions() +to obtain the values that will result from the current parameter settings. +This can be useful if you are trying to pick a scaling ratio that will get +close to a desired target size. It's also important if you are using the +JPEG library's memory manager to allocate output buffer space, because you +are supposed to request such buffers *before* jpeg_start_decompress(). + +JDIMENSION output_width Actual dimensions of output image. +JDIMENSION output_height +int out_color_components Number of color components in out_color_space. +int output_components Number of color components returned. +int rec_outbuf_height Recommended height of scanline buffer. + +When quantizing colors, output_components is 1, indicating a single color map +index per pixel. Otherwise it equals out_color_components. The output arrays +are required to be output_width * output_components JSAMPLEs wide. + +rec_outbuf_height is the recommended minimum height (in scanlines) of the +buffer passed to jpeg_read_scanlines(). If the buffer is smaller, the +library will still work, but time will be wasted due to unnecessary data +copying. In high-quality modes, rec_outbuf_height is always 1, but some +faster, lower-quality modes set it to larger values (typically 2 to 4). +If you are going to ask for a high-speed processing mode, you may as well +go to the trouble of honoring rec_outbuf_height so as to avoid data copying. +(An output buffer larger than rec_outbuf_height lines is OK, but won't +provide any material speed improvement over that height.) + + +Special color spaces +-------------------- + +The JPEG standard itself is "color blind" and doesn't specify any particular +color space. It is customary to convert color data to a luminance/chrominance +color space before compressing, since this permits greater compression. The +existing de-facto JPEG file format standards specify YCbCr or grayscale data +(JFIF), or grayscale, RGB, YCbCr, CMYK, or YCCK (Adobe). For special +applications such as multispectral images, other color spaces can be used, +but it must be understood that such files will be unportable. + +The JPEG library can handle the most common colorspace conversions (namely +RGB <=> YCbCr and CMYK <=> YCCK). It can also deal with data of an unknown +color space, passing it through without conversion. If you deal extensively +with an unusual color space, you can easily extend the library to understand +additional color spaces and perform appropriate conversions. + +For compression, the source data's color space is specified by field +in_color_space. This is transformed to the JPEG file's color space given +by jpeg_color_space. jpeg_set_defaults() chooses a reasonable JPEG color +space depending on in_color_space, but you can override this by calling +jpeg_set_colorspace(). Of course you must select a supported transformation. +jccolor.c currently supports the following transformations: + RGB => YCbCr + RGB => GRAYSCALE + YCbCr => GRAYSCALE + CMYK => YCCK +plus the null transforms: GRAYSCALE => GRAYSCALE, RGB => RGB, +YCbCr => YCbCr, CMYK => CMYK, YCCK => YCCK, and UNKNOWN => UNKNOWN. + +The de-facto file format standards (JFIF and Adobe) specify APPn markers that +indicate the color space of the JPEG file. It is important to ensure that +these are written correctly, or omitted if the JPEG file's color space is not +one of the ones supported by the de-facto standards. jpeg_set_colorspace() +will set the compression parameters to include or omit the APPn markers +properly, so long as it is told the truth about the JPEG color space. +For example, if you are writing some random 3-component color space without +conversion, don't try to fake out the library by setting in_color_space and +jpeg_color_space to JCS_YCbCr; use JCS_UNKNOWN. You may want to write an +APPn marker of your own devising to identify the colorspace --- see "Special +markers", below. + +When told that the color space is UNKNOWN, the library will default to using +luminance-quality compression parameters for all color components. You may +well want to change these parameters. See the source code for +jpeg_set_colorspace(), in jcparam.c, for details. + +For decompression, the JPEG file's color space is given in jpeg_color_space, +and this is transformed to the output color space out_color_space. +jpeg_read_header's setting of jpeg_color_space can be relied on if the file +conforms to JFIF or Adobe conventions, but otherwise it is no better than a +guess. If you know the JPEG file's color space for certain, you can override +jpeg_read_header's guess by setting jpeg_color_space. jpeg_read_header also +selects a default output color space based on (its guess of) jpeg_color_space; +set out_color_space to override this. Again, you must select a supported +transformation. jdcolor.c currently supports + YCbCr => GRAYSCALE + YCbCr => RGB + GRAYSCALE => RGB + YCCK => CMYK +as well as the null transforms. (Since GRAYSCALE=>RGB is provided, an +application can force grayscale JPEGs to look like color JPEGs if it only +wants to handle one case.) + +The two-pass color quantizer, jquant2.c, is specialized to handle RGB data +(it weights distances appropriately for RGB colors). You'll need to modify +the code if you want to use it for non-RGB output color spaces. Note that +jquant2.c is used to map to an application-supplied colormap as well as for +the normal two-pass colormap selection process. + +CAUTION: it appears that Adobe Photoshop writes inverted data in CMYK JPEG +files: 0 represents 100% ink coverage, rather than 0% ink as you'd expect. +This is arguably a bug in Photoshop, but if you need to work with Photoshop +CMYK files, you will have to deal with it in your application. We cannot +"fix" this in the library by inverting the data during the CMYK<=>YCCK +transform, because that would break other applications, notably Ghostscript. +Photoshop versions prior to 3.0 write EPS files containing JPEG-encoded CMYK +data in the same inverted-YCCK representation used in bare JPEG files, but +the surrounding PostScript code performs an inversion using the PS image +operator. I am told that Photoshop 3.0 will write uninverted YCCK in +EPS/JPEG files, and will omit the PS-level inversion. (But the data +polarity used in bare JPEG files will not change in 3.0.) In either case, +the JPEG library must not invert the data itself, or else Ghostscript would +read these EPS files incorrectly. + + +Error handling +-------------- + +When the default error handler is used, any error detected inside the JPEG +routines will cause a message to be printed on stderr, followed by exit(). +You can supply your own error handling routines to override this behavior +and to control the treatment of nonfatal warnings and trace/debug messages. +The file example.c illustrates the most common case, which is to have the +application regain control after an error rather than exiting. + +The JPEG library never writes any message directly; it always goes through +the error handling routines. Three classes of messages are recognized: + * Fatal errors: the library cannot continue. + * Warnings: the library can continue, but the data is corrupt, and a + damaged output image is likely to result. + * Trace/informational messages. These come with a trace level indicating + the importance of the message; you can control the verbosity of the + program by adjusting the maximum trace level that will be displayed. + +You may, if you wish, simply replace the entire JPEG error handling module +(jerror.c) with your own code. However, you can avoid code duplication by +only replacing some of the routines depending on the behavior you need. +This is accomplished by calling jpeg_std_error() as usual, but then overriding +some of the method pointers in the jpeg_error_mgr struct, as illustrated by +example.c. + +All of the error handling routines will receive a pointer to the JPEG object +(a j_common_ptr which points to either a jpeg_compress_struct or a +jpeg_decompress_struct; if you need to tell which, test the is_decompressor +field). This struct includes a pointer to the error manager struct in its +"err" field. Frequently, custom error handler routines will need to access +additional data which is not known to the JPEG library or the standard error +handler. The most convenient way to do this is to embed either the JPEG +object or the jpeg_error_mgr struct in a larger structure that contains +additional fields; then casting the passed pointer provides access to the +additional fields. Again, see example.c for one way to do it. (Beginning +with IJG version 6b, there is also a void pointer "client_data" in each +JPEG object, which the application can also use to find related data. +The library does not touch client_data at all.) + +The individual methods that you might wish to override are: + +error_exit (j_common_ptr cinfo) + Receives control for a fatal error. Information sufficient to + generate the error message has been stored in cinfo->err; call + output_message to display it. Control must NOT return to the caller; + generally this routine will exit() or longjmp() somewhere. + Typically you would override this routine to get rid of the exit() + default behavior. Note that if you continue processing, you should + clean up the JPEG object with jpeg_abort() or jpeg_destroy(). + +output_message (j_common_ptr cinfo) + Actual output of any JPEG message. Override this to send messages + somewhere other than stderr. Note that this method does not know + how to generate a message, only where to send it. + +format_message (j_common_ptr cinfo, char * buffer) + Constructs a readable error message string based on the error info + stored in cinfo->err. This method is called by output_message. Few + applications should need to override this method. One possible + reason for doing so is to implement dynamic switching of error message + language. + +emit_message (j_common_ptr cinfo, int msg_level) + Decide whether or not to emit a warning or trace message; if so, + calls output_message. The main reason for overriding this method + would be to abort on warnings. msg_level is -1 for warnings, + 0 and up for trace messages. + +Only error_exit() and emit_message() are called from the rest of the JPEG +library; the other two are internal to the error handler. + +The actual message texts are stored in an array of strings which is pointed to +by the field err->jpeg_message_table. The messages are numbered from 0 to +err->last_jpeg_message, and it is these code numbers that are used in the +JPEG library code. You could replace the message texts (for instance, with +messages in French or German) by changing the message table pointer. See +jerror.h for the default texts. CAUTION: this table will almost certainly +change or grow from one library version to the next. + +It may be useful for an application to add its own message texts that are +handled by the same mechanism. The error handler supports a second "add-on" +message table for this purpose. To define an addon table, set the pointer +err->addon_message_table and the message numbers err->first_addon_message and +err->last_addon_message. If you number the addon messages beginning at 1000 +or so, you won't have to worry about conflicts with the library's built-in +messages. See the sample applications cjpeg/djpeg for an example of using +addon messages (the addon messages are defined in cderror.h). + +Actual invocation of the error handler is done via macros defined in jerror.h: + ERREXITn(...) for fatal errors + WARNMSn(...) for corrupt-data warnings + TRACEMSn(...) for trace and informational messages. +These macros store the message code and any additional parameters into the +error handler struct, then invoke the error_exit() or emit_message() method. +The variants of each macro are for varying numbers of additional parameters. +The additional parameters are inserted into the generated message using +standard printf() format codes. + +See jerror.h and jerror.c for further details. + + +Compressed data handling (source and destination managers) +---------------------------------------------------------- + +The JPEG compression library sends its compressed data to a "destination +manager" module. The default destination manager just writes the data to a +stdio stream, but you can provide your own manager to do something else. +Similarly, the decompression library calls a "source manager" to obtain the +compressed data; you can provide your own source manager if you want the data +to come from somewhere other than a stdio stream. + +In both cases, compressed data is processed a bufferload at a time: the +destination or source manager provides a work buffer, and the library invokes +the manager only when the buffer is filled or emptied. (You could define a +one-character buffer to force the manager to be invoked for each byte, but +that would be rather inefficient.) The buffer's size and location are +controlled by the manager, not by the library. For example, if you desired to +decompress a JPEG datastream that was all in memory, you could just make the +buffer pointer and length point to the original data in memory. Then the +buffer-reload procedure would be invoked only if the decompressor ran off the +end of the datastream, which would indicate an erroneous datastream. + +The work buffer is defined as an array of datatype JOCTET, which is generally +"char" or "unsigned char". On a machine where char is not exactly 8 bits +wide, you must define JOCTET as a wider data type and then modify the data +source and destination modules to transcribe the work arrays into 8-bit units +on external storage. + +A data destination manager struct contains a pointer and count defining the +next byte to write in the work buffer and the remaining free space: + + JOCTET * next_output_byte; /* => next byte to write in buffer */ + size_t free_in_buffer; /* # of byte spaces remaining in buffer */ + +The library increments the pointer and decrements the count until the buffer +is filled. The manager's empty_output_buffer method must reset the pointer +and count. The manager is expected to remember the buffer's starting address +and total size in private fields not visible to the library. + +A data destination manager provides three methods: + +init_destination (j_compress_ptr cinfo) + Initialize destination. This is called by jpeg_start_compress() + before any data is actually written. It must initialize + next_output_byte and free_in_buffer. free_in_buffer must be + initialized to a positive value. + +empty_output_buffer (j_compress_ptr cinfo) + This is called whenever the buffer has filled (free_in_buffer + reaches zero). In typical applications, it should write out the + *entire* buffer (use the saved start address and buffer length; + ignore the current state of next_output_byte and free_in_buffer). + Then reset the pointer & count to the start of the buffer, and + return TRUE indicating that the buffer has been dumped. + free_in_buffer must be set to a positive value when TRUE is + returned. A FALSE return should only be used when I/O suspension is + desired (this operating mode is discussed in the next section). + +term_destination (j_compress_ptr cinfo) + Terminate destination --- called by jpeg_finish_compress() after all + data has been written. In most applications, this must flush any + data remaining in the buffer. Use either next_output_byte or + free_in_buffer to determine how much data is in the buffer. + +term_destination() is NOT called by jpeg_abort() or jpeg_destroy(). If you +want the destination manager to be cleaned up during an abort, you must do it +yourself. + +You will also need code to create a jpeg_destination_mgr struct, fill in its +method pointers, and insert a pointer to the struct into the "dest" field of +the JPEG compression object. This can be done in-line in your setup code if +you like, but it's probably cleaner to provide a separate routine similar to +the jpeg_stdio_dest() routine of the supplied destination manager. + +Decompression source managers follow a parallel design, but with some +additional frammishes. The source manager struct contains a pointer and count +defining the next byte to read from the work buffer and the number of bytes +remaining: + + const JOCTET * next_input_byte; /* => next byte to read from buffer */ + size_t bytes_in_buffer; /* # of bytes remaining in buffer */ + +The library increments the pointer and decrements the count until the buffer +is emptied. The manager's fill_input_buffer method must reset the pointer and +count. In most applications, the manager must remember the buffer's starting +address and total size in private fields not visible to the library. + +A data source manager provides five methods: + +init_source (j_decompress_ptr cinfo) + Initialize source. This is called by jpeg_read_header() before any + data is actually read. Unlike init_destination(), it may leave + bytes_in_buffer set to 0 (in which case a fill_input_buffer() call + will occur immediately). + +fill_input_buffer (j_decompress_ptr cinfo) + This is called whenever bytes_in_buffer has reached zero and more + data is wanted. In typical applications, it should read fresh data + into the buffer (ignoring the current state of next_input_byte and + bytes_in_buffer), reset the pointer & count to the start of the + buffer, and return TRUE indicating that the buffer has been reloaded. + It is not necessary to fill the buffer entirely, only to obtain at + least one more byte. bytes_in_buffer MUST be set to a positive value + if TRUE is returned. A FALSE return should only be used when I/O + suspension is desired (this mode is discussed in the next section). + +skip_input_data (j_decompress_ptr cinfo, long num_bytes) + Skip num_bytes worth of data. The buffer pointer and count should + be advanced over num_bytes input bytes, refilling the buffer as + needed. This is used to skip over a potentially large amount of + uninteresting data (such as an APPn marker). In some applications + it may be possible to optimize away the reading of the skipped data, + but it's not clear that being smart is worth much trouble; large + skips are uncommon. bytes_in_buffer may be zero on return. + A zero or negative skip count should be treated as a no-op. + +resync_to_restart (j_decompress_ptr cinfo, int desired) + This routine is called only when the decompressor has failed to find + a restart (RSTn) marker where one is expected. Its mission is to + find a suitable point for resuming decompression. For most + applications, we recommend that you just use the default resync + procedure, jpeg_resync_to_restart(). However, if you are able to back + up in the input data stream, or if you have a-priori knowledge about + the likely location of restart markers, you may be able to do better. + Read the read_restart_marker() and jpeg_resync_to_restart() routines + in jdmarker.c if you think you'd like to implement your own resync + procedure. + +term_source (j_decompress_ptr cinfo) + Terminate source --- called by jpeg_finish_decompress() after all + data has been read. Often a no-op. + +For both fill_input_buffer() and skip_input_data(), there is no such thing +as an EOF return. If the end of the file has been reached, the routine has +a choice of exiting via ERREXIT() or inserting fake data into the buffer. +In most cases, generating a warning message and inserting a fake EOI marker +is the best course of action --- this will allow the decompressor to output +however much of the image is there. In pathological cases, the decompressor +may swallow the EOI and again demand data ... just keep feeding it fake EOIs. +jdatasrc.c illustrates the recommended error recovery behavior. + +term_source() is NOT called by jpeg_abort() or jpeg_destroy(). If you want +the source manager to be cleaned up during an abort, you must do it yourself. + +You will also need code to create a jpeg_source_mgr struct, fill in its method +pointers, and insert a pointer to the struct into the "src" field of the JPEG +decompression object. This can be done in-line in your setup code if you +like, but it's probably cleaner to provide a separate routine similar to the +jpeg_stdio_src() routine of the supplied source manager. + +For more information, consult the stdio source and destination managers +in jdatasrc.c and jdatadst.c. + + +I/O suspension +-------------- + +Some applications need to use the JPEG library as an incremental memory-to- +memory filter: when the compressed data buffer is filled or emptied, they want +control to return to the outer loop, rather than expecting that the buffer can +be emptied or reloaded within the data source/destination manager subroutine. +The library supports this need by providing an "I/O suspension" mode, which we +describe in this section. + +The I/O suspension mode is not a panacea: nothing is guaranteed about the +maximum amount of time spent in any one call to the library, so it will not +eliminate response-time problems in single-threaded applications. If you +need guaranteed response time, we suggest you "bite the bullet" and implement +a real multi-tasking capability. + +To use I/O suspension, cooperation is needed between the calling application +and the data source or destination manager; you will always need a custom +source/destination manager. (Please read the previous section if you haven't +already.) The basic idea is that the empty_output_buffer() or +fill_input_buffer() routine is a no-op, merely returning FALSE to indicate +that it has done nothing. Upon seeing this, the JPEG library suspends +operation and returns to its caller. The surrounding application is +responsible for emptying or refilling the work buffer before calling the +JPEG library again. + +Compression suspension: + +For compression suspension, use an empty_output_buffer() routine that returns +FALSE; typically it will not do anything else. This will cause the +compressor to return to the caller of jpeg_write_scanlines(), with the return +value indicating that not all the supplied scanlines have been accepted. +The application must make more room in the output buffer, adjust the output +buffer pointer/count appropriately, and then call jpeg_write_scanlines() +again, pointing to the first unconsumed scanline. + +When forced to suspend, the compressor will backtrack to a convenient stopping +point (usually the start of the current MCU); it will regenerate some output +data when restarted. Therefore, although empty_output_buffer() is only +called when the buffer is filled, you should NOT write out the entire buffer +after a suspension. Write only the data up to the current position of +next_output_byte/free_in_buffer. The data beyond that point will be +regenerated after resumption. + +Because of the backtracking behavior, a good-size output buffer is essential +for efficiency; you don't want the compressor to suspend often. (In fact, an +overly small buffer could lead to infinite looping, if a single MCU required +more data than would fit in the buffer.) We recommend a buffer of at least +several Kbytes. You may want to insert explicit code to ensure that you don't +call jpeg_write_scanlines() unless there is a reasonable amount of space in +the output buffer; in other words, flush the buffer before trying to compress +more data. + +The compressor does not allow suspension while it is trying to write JPEG +markers at the beginning and end of the file. This means that: + * At the beginning of a compression operation, there must be enough free + space in the output buffer to hold the header markers (typically 600 or + so bytes). The recommended buffer size is bigger than this anyway, so + this is not a problem as long as you start with an empty buffer. However, + this restriction might catch you if you insert large special markers, such + as a JFIF thumbnail image, without flushing the buffer afterwards. + * When you call jpeg_finish_compress(), there must be enough space in the + output buffer to emit any buffered data and the final EOI marker. In the + current implementation, half a dozen bytes should suffice for this, but + for safety's sake we recommend ensuring that at least 100 bytes are free + before calling jpeg_finish_compress(). + +A more significant restriction is that jpeg_finish_compress() cannot suspend. +This means you cannot use suspension with multi-pass operating modes, namely +Huffman code optimization and multiple-scan output. Those modes write the +whole file during jpeg_finish_compress(), which will certainly result in +buffer overrun. (Note that this restriction applies only to compression, +not decompression. The decompressor supports input suspension in all of its +operating modes.) + +Decompression suspension: + +For decompression suspension, use a fill_input_buffer() routine that simply +returns FALSE (except perhaps during error recovery, as discussed below). +This will cause the decompressor to return to its caller with an indication +that suspension has occurred. This can happen at four places: + * jpeg_read_header(): will return JPEG_SUSPENDED. + * jpeg_start_decompress(): will return FALSE, rather than its usual TRUE. + * jpeg_read_scanlines(): will return the number of scanlines already + completed (possibly 0). + * jpeg_finish_decompress(): will return FALSE, rather than its usual TRUE. +The surrounding application must recognize these cases, load more data into +the input buffer, and repeat the call. In the case of jpeg_read_scanlines(), +increment the passed pointers past any scanlines successfully read. + +Just as with compression, the decompressor will typically backtrack to a +convenient restart point before suspending. When fill_input_buffer() is +called, next_input_byte/bytes_in_buffer point to the current restart point, +which is where the decompressor will backtrack to if FALSE is returned. +The data beyond that position must NOT be discarded if you suspend; it needs +to be re-read upon resumption. In most implementations, you'll need to shift +this data down to the start of your work buffer and then load more data after +it. Again, this behavior means that a several-Kbyte work buffer is essential +for decent performance; furthermore, you should load a reasonable amount of +new data before resuming decompression. (If you loaded, say, only one new +byte each time around, you could waste a LOT of cycles.) + +The skip_input_data() source manager routine requires special care in a +suspension scenario. This routine is NOT granted the ability to suspend the +decompressor; it can decrement bytes_in_buffer to zero, but no more. If the +requested skip distance exceeds the amount of data currently in the input +buffer, then skip_input_data() must set bytes_in_buffer to zero and record the +additional skip distance somewhere else. The decompressor will immediately +call fill_input_buffer(), which should return FALSE, which will cause a +suspension return. The surrounding application must then arrange to discard +the recorded number of bytes before it resumes loading the input buffer. +(Yes, this design is rather baroque, but it avoids complexity in the far more +common case where a non-suspending source manager is used.) + +If the input data has been exhausted, we recommend that you emit a warning +and insert dummy EOI markers just as a non-suspending data source manager +would do. This can be handled either in the surrounding application logic or +within fill_input_buffer(); the latter is probably more efficient. If +fill_input_buffer() knows that no more data is available, it can set the +pointer/count to point to a dummy EOI marker and then return TRUE just as +though it had read more data in a non-suspending situation. + +The decompressor does not attempt to suspend within standard JPEG markers; +instead it will backtrack to the start of the marker and reprocess the whole +marker next time. Hence the input buffer must be large enough to hold the +longest standard marker in the file. Standard JPEG markers should normally +not exceed a few hundred bytes each (DHT tables are typically the longest). +We recommend at least a 2K buffer for performance reasons, which is much +larger than any correct marker is likely to be. For robustness against +damaged marker length counts, you may wish to insert a test in your +application for the case that the input buffer is completely full and yet +the decoder has suspended without consuming any data --- otherwise, if this +situation did occur, it would lead to an endless loop. (The library can't +provide this test since it has no idea whether "the buffer is full", or +even whether there is a fixed-size input buffer.) + +The input buffer would need to be 64K to allow for arbitrary COM or APPn +markers, but these are handled specially: they are either saved into allocated +memory, or skipped over by calling skip_input_data(). In the former case, +suspension is handled correctly, and in the latter case, the problem of +buffer overrun is placed on skip_input_data's shoulders, as explained above. +Note that if you provide your own marker handling routine for large markers, +you should consider how to deal with buffer overflow. + +Multiple-buffer management: + +In some applications it is desirable to store the compressed data in a linked +list of buffer areas, so as to avoid data copying. This can be handled by +having empty_output_buffer() or fill_input_buffer() set the pointer and count +to reference the next available buffer; FALSE is returned only if no more +buffers are available. Although seemingly straightforward, there is a +pitfall in this approach: the backtrack that occurs when FALSE is returned +could back up into an earlier buffer. For example, when fill_input_buffer() +is called, the current pointer & count indicate the backtrack restart point. +Since fill_input_buffer() will set the pointer and count to refer to a new +buffer, the restart position must be saved somewhere else. Suppose a second +call to fill_input_buffer() occurs in the same library call, and no +additional input data is available, so fill_input_buffer must return FALSE. +If the JPEG library has not moved the pointer/count forward in the current +buffer, then *the correct restart point is the saved position in the prior +buffer*. Prior buffers may be discarded only after the library establishes +a restart point within a later buffer. Similar remarks apply for output into +a chain of buffers. + +The library will never attempt to backtrack over a skip_input_data() call, +so any skipped data can be permanently discarded. You still have to deal +with the case of skipping not-yet-received data, however. + +It's much simpler to use only a single buffer; when fill_input_buffer() is +called, move any unconsumed data (beyond the current pointer/count) down to +the beginning of this buffer and then load new data into the remaining buffer +space. This approach requires a little more data copying but is far easier +to get right. + + +Progressive JPEG support +------------------------ + +Progressive JPEG rearranges the stored data into a series of scans of +increasing quality. In situations where a JPEG file is transmitted across a +slow communications link, a decoder can generate a low-quality image very +quickly from the first scan, then gradually improve the displayed quality as +more scans are received. The final image after all scans are complete is +identical to that of a regular (sequential) JPEG file of the same quality +setting. Progressive JPEG files are often slightly smaller than equivalent +sequential JPEG files, but the possibility of incremental display is the main +reason for using progressive JPEG. + +The IJG encoder library generates progressive JPEG files when given a +suitable "scan script" defining how to divide the data into scans. +Creation of progressive JPEG files is otherwise transparent to the encoder. +Progressive JPEG files can also be read transparently by the decoder library. +If the decoding application simply uses the library as defined above, it +will receive a final decoded image without any indication that the file was +progressive. Of course, this approach does not allow incremental display. +To perform incremental display, an application needs to use the decoder +library's "buffered-image" mode, in which it receives a decoded image +multiple times. + +Each displayed scan requires about as much work to decode as a full JPEG +image of the same size, so the decoder must be fairly fast in relation to the +data transmission rate in order to make incremental display useful. However, +it is possible to skip displaying the image and simply add the incoming bits +to the decoder's coefficient buffer. This is fast because only Huffman +decoding need be done, not IDCT, upsampling, colorspace conversion, etc. +The IJG decoder library allows the application to switch dynamically between +displaying the image and simply absorbing the incoming bits. A properly +coded application can automatically adapt the number of display passes to +suit the time available as the image is received. Also, a final +higher-quality display cycle can be performed from the buffered data after +the end of the file is reached. + +Progressive compression: + +To create a progressive JPEG file (or a multiple-scan sequential JPEG file), +set the scan_info cinfo field to point to an array of scan descriptors, and +perform compression as usual. Instead of constructing your own scan list, +you can call the jpeg_simple_progression() helper routine to create a +recommended progression sequence; this method should be used by all +applications that don't want to get involved in the nitty-gritty of +progressive scan sequence design. (If you want to provide user control of +scan sequences, you may wish to borrow the scan script reading code found +in rdswitch.c, so that you can read scan script files just like cjpeg's.) +When scan_info is not NULL, the compression library will store DCT'd data +into a buffer array as jpeg_write_scanlines() is called, and will emit all +the requested scans during jpeg_finish_compress(). This implies that +multiple-scan output cannot be created with a suspending data destination +manager, since jpeg_finish_compress() does not support suspension. We +should also note that the compressor currently forces Huffman optimization +mode when creating a progressive JPEG file, because the default Huffman +tables are unsuitable for progressive files. + +Progressive decompression: + +When buffered-image mode is not used, the decoder library will read all of +a multi-scan file during jpeg_start_decompress(), so that it can provide a +final decoded image. (Here "multi-scan" means either progressive or +multi-scan sequential.) This makes multi-scan files transparent to the +decoding application. However, existing applications that used suspending +input with version 5 of the IJG library will need to be modified to check +for a suspension return from jpeg_start_decompress(). + +To perform incremental display, an application must use the library's +buffered-image mode. This is described in the next section. + + +Buffered-image mode +------------------- + +In buffered-image mode, the library stores the partially decoded image in a +coefficient buffer, from which it can be read out as many times as desired. +This mode is typically used for incremental display of progressive JPEG files, +but it can be used with any JPEG file. Each scan of a progressive JPEG file +adds more data (more detail) to the buffered image. The application can +display in lockstep with the source file (one display pass per input scan), +or it can allow input processing to outrun display processing. By making +input and display processing run independently, it is possible for the +application to adapt progressive display to a wide range of data transmission +rates. + +The basic control flow for buffered-image decoding is + + jpeg_create_decompress() + set data source + jpeg_read_header() + set overall decompression parameters + cinfo.buffered_image = TRUE; /* select buffered-image mode */ + jpeg_start_decompress() + for (each output pass) { + adjust output decompression parameters if required + jpeg_start_output() /* start a new output pass */ + for (all scanlines in image) { + jpeg_read_scanlines() + display scanlines + } + jpeg_finish_output() /* terminate output pass */ + } + jpeg_finish_decompress() + jpeg_destroy_decompress() + +This differs from ordinary unbuffered decoding in that there is an additional +level of looping. The application can choose how many output passes to make +and how to display each pass. + +The simplest approach to displaying progressive images is to do one display +pass for each scan appearing in the input file. In this case the outer loop +condition is typically + while (! jpeg_input_complete(&cinfo)) +and the start-output call should read + jpeg_start_output(&cinfo, cinfo.input_scan_number); +The second parameter to jpeg_start_output() indicates which scan of the input +file is to be displayed; the scans are numbered starting at 1 for this +purpose. (You can use a loop counter starting at 1 if you like, but using +the library's input scan counter is easier.) The library automatically reads +data as necessary to complete each requested scan, and jpeg_finish_output() +advances to the next scan or end-of-image marker (hence input_scan_number +will be incremented by the time control arrives back at jpeg_start_output()). +With this technique, data is read from the input file only as needed, and +input and output processing run in lockstep. + +After reading the final scan and reaching the end of the input file, the +buffered image remains available; it can be read additional times by +repeating the jpeg_start_output()/jpeg_read_scanlines()/jpeg_finish_output() +sequence. For example, a useful technique is to use fast one-pass color +quantization for display passes made while the image is arriving, followed by +a final display pass using two-pass quantization for highest quality. This +is done by changing the library parameters before the final output pass. +Changing parameters between passes is discussed in detail below. + +In general the last scan of a progressive file cannot be recognized as such +until after it is read, so a post-input display pass is the best approach if +you want special processing in the final pass. + +When done with the image, be sure to call jpeg_finish_decompress() to release +the buffered image (or just use jpeg_destroy_decompress()). + +If input data arrives faster than it can be displayed, the application can +cause the library to decode input data in advance of what's needed to produce +output. This is done by calling the routine jpeg_consume_input(). +The return value is one of the following: + JPEG_REACHED_SOS: reached an SOS marker (the start of a new scan) + JPEG_REACHED_EOI: reached the EOI marker (end of image) + JPEG_ROW_COMPLETED: completed reading one MCU row of compressed data + JPEG_SCAN_COMPLETED: completed reading last MCU row of current scan + JPEG_SUSPENDED: suspended before completing any of the above +(JPEG_SUSPENDED can occur only if a suspending data source is used.) This +routine can be called at any time after initializing the JPEG object. It +reads some additional data and returns when one of the indicated significant +events occurs. (If called after the EOI marker is reached, it will +immediately return JPEG_REACHED_EOI without attempting to read more data.) + +The library's output processing will automatically call jpeg_consume_input() +whenever the output processing overtakes the input; thus, simple lockstep +display requires no direct calls to jpeg_consume_input(). But by adding +calls to jpeg_consume_input(), you can absorb data in advance of what is +being displayed. This has two benefits: + * You can limit buildup of unprocessed data in your input buffer. + * You can eliminate extra display passes by paying attention to the + state of the library's input processing. + +The first of these benefits only requires interspersing calls to +jpeg_consume_input() with your display operations and any other processing +you may be doing. To avoid wasting cycles due to backtracking, it's best to +call jpeg_consume_input() only after a hundred or so new bytes have arrived. +This is discussed further under "I/O suspension", above. (Note: the JPEG +library currently is not thread-safe. You must not call jpeg_consume_input() +from one thread of control if a different library routine is working on the +same JPEG object in another thread.) + +When input arrives fast enough that more than one new scan is available +before you start a new output pass, you may as well skip the output pass +corresponding to the completed scan. This occurs for free if you pass +cinfo.input_scan_number as the target scan number to jpeg_start_output(). +The input_scan_number field is simply the index of the scan currently being +consumed by the input processor. You can ensure that this is up-to-date by +emptying the input buffer just before calling jpeg_start_output(): call +jpeg_consume_input() repeatedly until it returns JPEG_SUSPENDED or +JPEG_REACHED_EOI. + +The target scan number passed to jpeg_start_output() is saved in the +cinfo.output_scan_number field. The library's output processing calls +jpeg_consume_input() whenever the current input scan number and row within +that scan is less than or equal to the current output scan number and row. +Thus, input processing can "get ahead" of the output processing but is not +allowed to "fall behind". You can achieve several different effects by +manipulating this interlock rule. For example, if you pass a target scan +number greater than the current input scan number, the output processor will +wait until that scan starts to arrive before producing any output. (To avoid +an infinite loop, the target scan number is automatically reset to the last +scan number when the end of image is reached. Thus, if you specify a large +target scan number, the library will just absorb the entire input file and +then perform an output pass. This is effectively the same as what +jpeg_start_decompress() does when you don't select buffered-image mode.) +When you pass a target scan number equal to the current input scan number, +the image is displayed no faster than the current input scan arrives. The +final possibility is to pass a target scan number less than the current input +scan number; this disables the input/output interlock and causes the output +processor to simply display whatever it finds in the image buffer, without +waiting for input. (However, the library will not accept a target scan +number less than one, so you can't avoid waiting for the first scan.) + +When data is arriving faster than the output display processing can advance +through the image, jpeg_consume_input() will store data into the buffered +image beyond the point at which the output processing is reading data out +again. If the input arrives fast enough, it may "wrap around" the buffer to +the point where the input is more than one whole scan ahead of the output. +If the output processing simply proceeds through its display pass without +paying attention to the input, the effect seen on-screen is that the lower +part of the image is one or more scans better in quality than the upper part. +Then, when the next output scan is started, you have a choice of what target +scan number to use. The recommended choice is to use the current input scan +number at that time, which implies that you've skipped the output scans +corresponding to the input scans that were completed while you processed the +previous output scan. In this way, the decoder automatically adapts its +speed to the arriving data, by skipping output scans as necessary to keep up +with the arriving data. + +When using this strategy, you'll want to be sure that you perform a final +output pass after receiving all the data; otherwise your last display may not +be full quality across the whole screen. So the right outer loop logic is +something like this: + do { + absorb any waiting input by calling jpeg_consume_input() + final_pass = jpeg_input_complete(&cinfo); + adjust output decompression parameters if required + jpeg_start_output(&cinfo, cinfo.input_scan_number); + ... + jpeg_finish_output() + } while (! final_pass); +rather than quitting as soon as jpeg_input_complete() returns TRUE. This +arrangement makes it simple to use higher-quality decoding parameters +for the final pass. But if you don't want to use special parameters for +the final pass, the right loop logic is like this: + for (;;) { + absorb any waiting input by calling jpeg_consume_input() + jpeg_start_output(&cinfo, cinfo.input_scan_number); + ... + jpeg_finish_output() + if (jpeg_input_complete(&cinfo) && + cinfo.input_scan_number == cinfo.output_scan_number) + break; + } +In this case you don't need to know in advance whether an output pass is to +be the last one, so it's not necessary to have reached EOF before starting +the final output pass; rather, what you want to test is whether the output +pass was performed in sync with the final input scan. This form of the loop +will avoid an extra output pass whenever the decoder is able (or nearly able) +to keep up with the incoming data. + +When the data transmission speed is high, you might begin a display pass, +then find that much or all of the file has arrived before you can complete +the pass. (You can detect this by noting the JPEG_REACHED_EOI return code +from jpeg_consume_input(), or equivalently by testing jpeg_input_complete().) +In this situation you may wish to abort the current display pass and start a +new one using the newly arrived information. To do so, just call +jpeg_finish_output() and then start a new pass with jpeg_start_output(). + +A variant strategy is to abort and restart display if more than one complete +scan arrives during an output pass; this can be detected by noting +JPEG_REACHED_SOS returns and/or examining cinfo.input_scan_number. This +idea should be employed with caution, however, since the display process +might never get to the bottom of the image before being aborted, resulting +in the lower part of the screen being several passes worse than the upper. +In most cases it's probably best to abort an output pass only if the whole +file has arrived and you want to begin the final output pass immediately. + +When receiving data across a communication link, we recommend always using +the current input scan number for the output target scan number; if a +higher-quality final pass is to be done, it should be started (aborting any +incomplete output pass) as soon as the end of file is received. However, +many other strategies are possible. For example, the application can examine +the parameters of the current input scan and decide whether to display it or +not. If the scan contains only chroma data, one might choose not to use it +as the target scan, expecting that the scan will be small and will arrive +quickly. To skip to the next scan, call jpeg_consume_input() until it +returns JPEG_REACHED_SOS or JPEG_REACHED_EOI. Or just use the next higher +number as the target scan for jpeg_start_output(); but that method doesn't +let you inspect the next scan's parameters before deciding to display it. + + +In buffered-image mode, jpeg_start_decompress() never performs input and +thus never suspends. An application that uses input suspension with +buffered-image mode must be prepared for suspension returns from these +routines: +* jpeg_start_output() performs input only if you request 2-pass quantization + and the target scan isn't fully read yet. (This is discussed below.) +* jpeg_read_scanlines(), as always, returns the number of scanlines that it + was able to produce before suspending. +* jpeg_finish_output() will read any markers following the target scan, + up to the end of the file or the SOS marker that begins another scan. + (But it reads no input if jpeg_consume_input() has already reached the + end of the file or a SOS marker beyond the target output scan.) +* jpeg_finish_decompress() will read until the end of file, and thus can + suspend if the end hasn't already been reached (as can be tested by + calling jpeg_input_complete()). +jpeg_start_output(), jpeg_finish_output(), and jpeg_finish_decompress() +all return TRUE if they completed their tasks, FALSE if they had to suspend. +In the event of a FALSE return, the application must load more input data +and repeat the call. Applications that use non-suspending data sources need +not check the return values of these three routines. + + +It is possible to change decoding parameters between output passes in the +buffered-image mode. The decoder library currently supports only very +limited changes of parameters. ONLY THE FOLLOWING parameter changes are +allowed after jpeg_start_decompress() is called: +* dct_method can be changed before each call to jpeg_start_output(). + For example, one could use a fast DCT method for early scans, changing + to a higher quality method for the final scan. +* dither_mode can be changed before each call to jpeg_start_output(); + of course this has no impact if not using color quantization. Typically + one would use ordered dither for initial passes, then switch to + Floyd-Steinberg dither for the final pass. Caution: changing dither mode + can cause more memory to be allocated by the library. Although the amount + of memory involved is not large (a scanline or so), it may cause the + initial max_memory_to_use specification to be exceeded, which in the worst + case would result in an out-of-memory failure. +* do_block_smoothing can be changed before each call to jpeg_start_output(). + This setting is relevant only when decoding a progressive JPEG image. + During the first DC-only scan, block smoothing provides a very "fuzzy" look + instead of the very "blocky" look seen without it; which is better seems a + matter of personal taste. But block smoothing is nearly always a win + during later stages, especially when decoding a successive-approximation + image: smoothing helps to hide the slight blockiness that otherwise shows + up on smooth gradients until the lowest coefficient bits are sent. +* Color quantization mode can be changed under the rules described below. + You *cannot* change between full-color and quantized output (because that + would alter the required I/O buffer sizes), but you can change which + quantization method is used. + +When generating color-quantized output, changing quantization method is a +very useful way of switching between high-speed and high-quality display. +The library allows you to change among its three quantization methods: +1. Single-pass quantization to a fixed color cube. + Selected by cinfo.two_pass_quantize = FALSE and cinfo.colormap = NULL. +2. Single-pass quantization to an application-supplied colormap. + Selected by setting cinfo.colormap to point to the colormap (the value of + two_pass_quantize is ignored); also set cinfo.actual_number_of_colors. +3. Two-pass quantization to a colormap chosen specifically for the image. + Selected by cinfo.two_pass_quantize = TRUE and cinfo.colormap = NULL. + (This is the default setting selected by jpeg_read_header, but it is + probably NOT what you want for the first pass of progressive display!) +These methods offer successively better quality and lesser speed. However, +only the first method is available for quantizing in non-RGB color spaces. + +IMPORTANT: because the different quantizer methods have very different +working-storage requirements, the library requires you to indicate which +one(s) you intend to use before you call jpeg_start_decompress(). (If we did +not require this, the max_memory_to_use setting would be a complete fiction.) +You do this by setting one or more of these three cinfo fields to TRUE: + enable_1pass_quant Fixed color cube colormap + enable_external_quant Externally-supplied colormap + enable_2pass_quant Two-pass custom colormap +All three are initialized FALSE by jpeg_read_header(). But +jpeg_start_decompress() automatically sets TRUE the one selected by the +current two_pass_quantize and colormap settings, so you only need to set the +enable flags for any other quantization methods you plan to change to later. + +After setting the enable flags correctly at jpeg_start_decompress() time, you +can change to any enabled quantization method by setting two_pass_quantize +and colormap properly just before calling jpeg_start_output(). The following +special rules apply: +1. You must explicitly set cinfo.colormap to NULL when switching to 1-pass + or 2-pass mode from a different mode, or when you want the 2-pass + quantizer to be re-run to generate a new colormap. +2. To switch to an external colormap, or to change to a different external + colormap than was used on the prior pass, you must call + jpeg_new_colormap() after setting cinfo.colormap. +NOTE: if you want to use the same colormap as was used in the prior pass, +you should not do either of these things. This will save some nontrivial +switchover costs. +(These requirements exist because cinfo.colormap will always be non-NULL +after completing a prior output pass, since both the 1-pass and 2-pass +quantizers set it to point to their output colormaps. Thus you have to +do one of these two things to notify the library that something has changed. +Yup, it's a bit klugy, but it's necessary to do it this way for backwards +compatibility.) + +Note that in buffered-image mode, the library generates any requested colormap +during jpeg_start_output(), not during jpeg_start_decompress(). + +When using two-pass quantization, jpeg_start_output() makes a pass over the +buffered image to determine the optimum color map; it therefore may take a +significant amount of time, whereas ordinarily it does little work. The +progress monitor hook is called during this pass, if defined. It is also +important to realize that if the specified target scan number is greater than +or equal to the current input scan number, jpeg_start_output() will attempt +to consume input as it makes this pass. If you use a suspending data source, +you need to check for a FALSE return from jpeg_start_output() under these +conditions. The combination of 2-pass quantization and a not-yet-fully-read +target scan is the only case in which jpeg_start_output() will consume input. + + +Application authors who support buffered-image mode may be tempted to use it +for all JPEG images, even single-scan ones. This will work, but it is +inefficient: there is no need to create an image-sized coefficient buffer for +single-scan images. Requesting buffered-image mode for such an image wastes +memory. Worse, it can cost time on large images, since the buffered data has +to be swapped out or written to a temporary file. If you are concerned about +maximum performance on baseline JPEG files, you should use buffered-image +mode only when the incoming file actually has multiple scans. This can be +tested by calling jpeg_has_multiple_scans(), which will return a correct +result at any time after jpeg_read_header() completes. + +It is also worth noting that when you use jpeg_consume_input() to let input +processing get ahead of output processing, the resulting pattern of access to +the coefficient buffer is quite nonsequential. It's best to use the memory +manager jmemnobs.c if you can (ie, if you have enough real or virtual main +memory). If not, at least make sure that max_memory_to_use is set as high as +possible. If the JPEG memory manager has to use a temporary file, you will +probably see a lot of disk traffic and poor performance. (This could be +improved with additional work on the memory manager, but we haven't gotten +around to it yet.) + +In some applications it may be convenient to use jpeg_consume_input() for all +input processing, including reading the initial markers; that is, you may +wish to call jpeg_consume_input() instead of jpeg_read_header() during +startup. This works, but note that you must check for JPEG_REACHED_SOS and +JPEG_REACHED_EOI return codes as the equivalent of jpeg_read_header's codes. +Once the first SOS marker has been reached, you must call +jpeg_start_decompress() before jpeg_consume_input() will consume more input; +it'll just keep returning JPEG_REACHED_SOS until you do. If you read a +tables-only file this way, jpeg_consume_input() will return JPEG_REACHED_EOI +without ever returning JPEG_REACHED_SOS; be sure to check for this case. +If this happens, the decompressor will not read any more input until you call +jpeg_abort() to reset it. It is OK to call jpeg_consume_input() even when not +using buffered-image mode, but in that case it's basically a no-op after the +initial markers have been read: it will just return JPEG_SUSPENDED. + + +Abbreviated datastreams and multiple images +------------------------------------------- + +A JPEG compression or decompression object can be reused to process multiple +images. This saves a small amount of time per image by eliminating the +"create" and "destroy" operations, but that isn't the real purpose of the +feature. Rather, reuse of an object provides support for abbreviated JPEG +datastreams. Object reuse can also simplify processing a series of images in +a single input or output file. This section explains these features. + +A JPEG file normally contains several hundred bytes worth of quantization +and Huffman tables. In a situation where many images will be stored or +transmitted with identical tables, this may represent an annoying overhead. +The JPEG standard therefore permits tables to be omitted. The standard +defines three classes of JPEG datastreams: + * "Interchange" datastreams contain an image and all tables needed to decode + the image. These are the usual kind of JPEG file. + * "Abbreviated image" datastreams contain an image, but are missing some or + all of the tables needed to decode that image. + * "Abbreviated table specification" (henceforth "tables-only") datastreams + contain only table specifications. +To decode an abbreviated image, it is necessary to load the missing table(s) +into the decoder beforehand. This can be accomplished by reading a separate +tables-only file. A variant scheme uses a series of images in which the first +image is an interchange (complete) datastream, while subsequent ones are +abbreviated and rely on the tables loaded by the first image. It is assumed +that once the decoder has read a table, it will remember that table until a +new definition for the same table number is encountered. + +It is the application designer's responsibility to figure out how to associate +the correct tables with an abbreviated image. While abbreviated datastreams +can be useful in a closed environment, their use is strongly discouraged in +any situation where data exchange with other applications might be needed. +Caveat designer. + +The JPEG library provides support for reading and writing any combination of +tables-only datastreams and abbreviated images. In both compression and +decompression objects, a quantization or Huffman table will be retained for +the lifetime of the object, unless it is overwritten by a new table definition. + + +To create abbreviated image datastreams, it is only necessary to tell the +compressor not to emit some or all of the tables it is using. Each +quantization and Huffman table struct contains a boolean field "sent_table", +which normally is initialized to FALSE. For each table used by the image, the +header-writing process emits the table and sets sent_table = TRUE unless it is +already TRUE. (In normal usage, this prevents outputting the same table +definition multiple times, as would otherwise occur because the chroma +components typically share tables.) Thus, setting this field to TRUE before +calling jpeg_start_compress() will prevent the table from being written at +all. + +If you want to create a "pure" abbreviated image file containing no tables, +just call "jpeg_suppress_tables(&cinfo, TRUE)" after constructing all the +tables. If you want to emit some but not all tables, you'll need to set the +individual sent_table fields directly. + +To create an abbreviated image, you must also call jpeg_start_compress() +with a second parameter of FALSE, not TRUE. Otherwise jpeg_start_compress() +will force all the sent_table fields to FALSE. (This is a safety feature to +prevent abbreviated images from being created accidentally.) + +To create a tables-only file, perform the same parameter setup that you +normally would, but instead of calling jpeg_start_compress() and so on, call +jpeg_write_tables(&cinfo). This will write an abbreviated datastream +containing only SOI, DQT and/or DHT markers, and EOI. All the quantization +and Huffman tables that are currently defined in the compression object will +be emitted unless their sent_tables flag is already TRUE, and then all the +sent_tables flags will be set TRUE. + +A sure-fire way to create matching tables-only and abbreviated image files +is to proceed as follows: + + create JPEG compression object + set JPEG parameters + set destination to tables-only file + jpeg_write_tables(&cinfo); + set destination to image file + jpeg_start_compress(&cinfo, FALSE); + write data... + jpeg_finish_compress(&cinfo); + +Since the JPEG parameters are not altered between writing the table file and +the abbreviated image file, the same tables are sure to be used. Of course, +you can repeat the jpeg_start_compress() ... jpeg_finish_compress() sequence +many times to produce many abbreviated image files matching the table file. + +You cannot suppress output of the computed Huffman tables when Huffman +optimization is selected. (If you could, there'd be no way to decode the +image...) Generally, you don't want to set optimize_coding = TRUE when +you are trying to produce abbreviated files. + +In some cases you might want to compress an image using tables which are +not stored in the application, but are defined in an interchange or +tables-only file readable by the application. This can be done by setting up +a JPEG decompression object to read the specification file, then copying the +tables into your compression object. See jpeg_copy_critical_parameters() +for an example of copying quantization tables. + + +To read abbreviated image files, you simply need to load the proper tables +into the decompression object before trying to read the abbreviated image. +If the proper tables are stored in the application program, you can just +allocate the table structs and fill in their contents directly. For example, +to load a fixed quantization table into table slot "n": + + if (cinfo.quant_tbl_ptrs[n] == NULL) + cinfo.quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) &cinfo); + quant_ptr = cinfo.quant_tbl_ptrs[n]; /* quant_ptr is JQUANT_TBL* */ + for (i = 0; i < 64; i++) { + /* Qtable[] is desired quantization table, in natural array order */ + quant_ptr->quantval[i] = Qtable[i]; + } + +Code to load a fixed Huffman table is typically (for AC table "n"): + + if (cinfo.ac_huff_tbl_ptrs[n] == NULL) + cinfo.ac_huff_tbl_ptrs[n] = jpeg_alloc_huff_table((j_common_ptr) &cinfo); + huff_ptr = cinfo.ac_huff_tbl_ptrs[n]; /* huff_ptr is JHUFF_TBL* */ + for (i = 1; i <= 16; i++) { + /* counts[i] is number of Huffman codes of length i bits, i=1..16 */ + huff_ptr->bits[i] = counts[i]; + } + for (i = 0; i < 256; i++) { + /* symbols[] is the list of Huffman symbols, in code-length order */ + huff_ptr->huffval[i] = symbols[i]; + } + +(Note that trying to set cinfo.quant_tbl_ptrs[n] to point directly at a +constant JQUANT_TBL object is not safe. If the incoming file happened to +contain a quantization table definition, your master table would get +overwritten! Instead allocate a working table copy and copy the master table +into it, as illustrated above. Ditto for Huffman tables, of course.) + +You might want to read the tables from a tables-only file, rather than +hard-wiring them into your application. The jpeg_read_header() call is +sufficient to read a tables-only file. You must pass a second parameter of +FALSE to indicate that you do not require an image to be present. Thus, the +typical scenario is + + create JPEG decompression object + set source to tables-only file + jpeg_read_header(&cinfo, FALSE); + set source to abbreviated image file + jpeg_read_header(&cinfo, TRUE); + set decompression parameters + jpeg_start_decompress(&cinfo); + read data... + jpeg_finish_decompress(&cinfo); + +In some cases, you may want to read a file without knowing whether it contains +an image or just tables. In that case, pass FALSE and check the return value +from jpeg_read_header(): it will be JPEG_HEADER_OK if an image was found, +JPEG_HEADER_TABLES_ONLY if only tables were found. (A third return value, +JPEG_SUSPENDED, is possible when using a suspending data source manager.) +Note that jpeg_read_header() will not complain if you read an abbreviated +image for which you haven't loaded the missing tables; the missing-table check +occurs later, in jpeg_start_decompress(). + + +It is possible to read a series of images from a single source file by +repeating the jpeg_read_header() ... jpeg_finish_decompress() sequence, +without releasing/recreating the JPEG object or the data source module. +(If you did reinitialize, any partial bufferload left in the data source +buffer at the end of one image would be discarded, causing you to lose the +start of the next image.) When you use this method, stored tables are +automatically carried forward, so some of the images can be abbreviated images +that depend on tables from earlier images. + +If you intend to write a series of images into a single destination file, +you might want to make a specialized data destination module that doesn't +flush the output buffer at term_destination() time. This would speed things +up by some trifling amount. Of course, you'd need to remember to flush the +buffer after the last image. You can make the later images be abbreviated +ones by passing FALSE to jpeg_start_compress(). + + +Special markers +--------------- + +Some applications may need to insert or extract special data in the JPEG +datastream. The JPEG standard provides marker types "COM" (comment) and +"APP0" through "APP15" (application) to hold application-specific data. +Unfortunately, the use of these markers is not specified by the standard. +COM markers are fairly widely used to hold user-supplied text. The JFIF file +format spec uses APP0 markers with specified initial strings to hold certain +data. Adobe applications use APP14 markers beginning with the string "Adobe" +for miscellaneous data. Other APPn markers are rarely seen, but might +contain almost anything. + +If you wish to store user-supplied text, we recommend you use COM markers +and place readable 7-bit ASCII text in them. Newline conventions are not +standardized --- expect to find LF (Unix style), CR/LF (DOS style), or CR +(Mac style). A robust COM reader should be able to cope with random binary +garbage, including nulls, since some applications generate COM markers +containing non-ASCII junk. (But yours should not be one of them.) + +For program-supplied data, use an APPn marker, and be sure to begin it with an +identifying string so that you can tell whether the marker is actually yours. +It's probably best to avoid using APP0 or APP14 for any private markers. +(NOTE: the upcoming SPIFF standard will use APP8 markers; we recommend you +not use APP8 markers for any private purposes, either.) + +Keep in mind that at most 65533 bytes can be put into one marker, but you +can have as many markers as you like. + +By default, the IJG compression library will write a JFIF APP0 marker if the +selected JPEG colorspace is grayscale or YCbCr, or an Adobe APP14 marker if +the selected colorspace is RGB, CMYK, or YCCK. You can disable this, but +we don't recommend it. The decompression library will recognize JFIF and +Adobe markers and will set the JPEG colorspace properly when one is found. + + +You can write special markers immediately following the datastream header by +calling jpeg_write_marker() after jpeg_start_compress() and before the first +call to jpeg_write_scanlines(). When you do this, the markers appear after +the SOI and the JFIF APP0 and Adobe APP14 markers (if written), but before +all else. Specify the marker type parameter as "JPEG_COM" for COM or +"JPEG_APP0 + n" for APPn. (Actually, jpeg_write_marker will let you write +any marker type, but we don't recommend writing any other kinds of marker.) +For example, to write a user comment string pointed to by comment_text: + jpeg_write_marker(cinfo, JPEG_COM, comment_text, strlen(comment_text)); + +If it's not convenient to store all the marker data in memory at once, +you can instead call jpeg_write_m_header() followed by multiple calls to +jpeg_write_m_byte(). If you do it this way, it's your responsibility to +call jpeg_write_m_byte() exactly the number of times given in the length +parameter to jpeg_write_m_header(). (This method lets you empty the +output buffer partway through a marker, which might be important when +using a suspending data destination module. In any case, if you are using +a suspending destination, you should flush its buffer after inserting +any special markers. See "I/O suspension".) + +Or, if you prefer to synthesize the marker byte sequence yourself, +you can just cram it straight into the data destination module. + +If you are writing JFIF 1.02 extension markers (thumbnail images), don't +forget to set cinfo.JFIF_minor_version = 2 so that the encoder will write the +correct JFIF version number in the JFIF header marker. The library's default +is to write version 1.01, but that's wrong if you insert any 1.02 extension +markers. (We could probably get away with just defaulting to 1.02, but there +used to be broken decoders that would complain about unknown minor version +numbers. To reduce compatibility risks it's safest not to write 1.02 unless +you are actually using 1.02 extensions.) + + +When reading, two methods of handling special markers are available: +1. You can ask the library to save the contents of COM and/or APPn markers +into memory, and then examine them at your leisure afterwards. +2. You can supply your own routine to process COM and/or APPn markers +on-the-fly as they are read. +The first method is simpler to use, especially if you are using a suspending +data source; writing a marker processor that copes with input suspension is +not easy (consider what happens if the marker is longer than your available +input buffer). However, the second method conserves memory since the marker +data need not be kept around after it's been processed. + +For either method, you'd normally set up marker handling after creating a +decompression object and before calling jpeg_read_header(), because the +markers of interest will typically be near the head of the file and so will +be scanned by jpeg_read_header. Once you've established a marker handling +method, it will be used for the life of that decompression object +(potentially many datastreams), unless you change it. Marker handling is +determined separately for COM markers and for each APPn marker code. + + +To save the contents of special markers in memory, call + jpeg_save_markers(cinfo, marker_code, length_limit) +where marker_code is the marker type to save, JPEG_COM or JPEG_APP0+n. +(To arrange to save all the special marker types, you need to call this +routine 17 times, for COM and APP0-APP15.) If the incoming marker is longer +than length_limit data bytes, only length_limit bytes will be saved; this +parameter allows you to avoid chewing up memory when you only need to see the +first few bytes of a potentially large marker. If you want to save all the +data, set length_limit to 0xFFFF; that is enough since marker lengths are only +16 bits. As a special case, setting length_limit to 0 prevents that marker +type from being saved at all. (That is the default behavior, in fact.) + +After jpeg_read_header() completes, you can examine the special markers by +following the cinfo->marker_list pointer chain. All the special markers in +the file appear in this list, in order of their occurrence in the file (but +omitting any markers of types you didn't ask for). Both the original data +length and the saved data length are recorded for each list entry; the latter +will not exceed length_limit for the particular marker type. Note that these +lengths exclude the marker length word, whereas the stored representation +within the JPEG file includes it. (Hence the maximum data length is really +only 65533.) + +It is possible that additional special markers appear in the file beyond the +SOS marker at which jpeg_read_header stops; if so, the marker list will be +extended during reading of the rest of the file. This is not expected to be +common, however. If you are short on memory you may want to reset the length +limit to zero for all marker types after finishing jpeg_read_header, to +ensure that the max_memory_to_use setting cannot be exceeded due to addition +of later markers. + +The marker list remains stored until you call jpeg_finish_decompress or +jpeg_abort, at which point the memory is freed and the list is set to empty. +(jpeg_destroy also releases the storage, of course.) + +Note that the library is internally interested in APP0 and APP14 markers; +if you try to set a small nonzero length limit on these types, the library +will silently force the length up to the minimum it wants. (But you can set +a zero length limit to prevent them from being saved at all.) Also, in a +16-bit environment, the maximum length limit may be constrained to less than +65533 by malloc() limitations. It is therefore best not to assume that the +effective length limit is exactly what you set it to be. + + +If you want to supply your own marker-reading routine, you do it by calling +jpeg_set_marker_processor(). A marker processor routine must have the +signature + boolean jpeg_marker_parser_method (j_decompress_ptr cinfo) +Although the marker code is not explicitly passed, the routine can find it +in cinfo->unread_marker. At the time of call, the marker proper has been +read from the data source module. The processor routine is responsible for +reading the marker length word and the remaining parameter bytes, if any. +Return TRUE to indicate success. (FALSE should be returned only if you are +using a suspending data source and it tells you to suspend. See the standard +marker processors in jdmarker.c for appropriate coding methods if you need to +use a suspending data source.) + +If you override the default APP0 or APP14 processors, it is up to you to +recognize JFIF and Adobe markers if you want colorspace recognition to occur +properly. We recommend copying and extending the default processors if you +want to do that. (A better idea is to save these marker types for later +examination by calling jpeg_save_markers(); that method doesn't interfere +with the library's own processing of these markers.) + +jpeg_set_marker_processor() and jpeg_save_markers() are mutually exclusive +--- if you call one it overrides any previous call to the other, for the +particular marker type specified. + +A simple example of an external COM processor can be found in djpeg.c. +Also, see jpegtran.c for an example of using jpeg_save_markers. + + +Raw (downsampled) image data +---------------------------- + +Some applications need to supply already-downsampled image data to the JPEG +compressor, or to receive raw downsampled data from the decompressor. The +library supports this requirement by allowing the application to write or +read raw data, bypassing the normal preprocessing or postprocessing steps. +The interface is different from the standard one and is somewhat harder to +use. If your interest is merely in bypassing color conversion, we recommend +that you use the standard interface and simply set jpeg_color_space = +in_color_space (or jpeg_color_space = out_color_space for decompression). +The mechanism described in this section is necessary only to supply or +receive downsampled image data, in which not all components have the same +dimensions. + + +To compress raw data, you must supply the data in the colorspace to be used +in the JPEG file (please read the earlier section on Special color spaces) +and downsampled to the sampling factors specified in the JPEG parameters. +You must supply the data in the format used internally by the JPEG library, +namely a JSAMPIMAGE array. This is an array of pointers to two-dimensional +arrays, each of type JSAMPARRAY. Each 2-D array holds the values for one +color component. This structure is necessary since the components are of +different sizes. If the image dimensions are not a multiple of the MCU size, +you must also pad the data correctly (usually, this is done by replicating +the last column and/or row). The data must be padded to a multiple of a DCT +block in each component: that is, each downsampled row must contain a +multiple of 8 valid samples, and there must be a multiple of 8 sample rows +for each component. (For applications such as conversion of digital TV +images, the standard image size is usually a multiple of the DCT block size, +so that no padding need actually be done.) + +The procedure for compression of raw data is basically the same as normal +compression, except that you call jpeg_write_raw_data() in place of +jpeg_write_scanlines(). Before calling jpeg_start_compress(), you must do +the following: + * Set cinfo->raw_data_in to TRUE. (It is set FALSE by jpeg_set_defaults().) + This notifies the library that you will be supplying raw data. + * Ensure jpeg_color_space is correct --- an explicit jpeg_set_colorspace() + call is a good idea. Note that since color conversion is bypassed, + in_color_space is ignored, except that jpeg_set_defaults() uses it to + choose the default jpeg_color_space setting. + * Ensure the sampling factors, cinfo->comp_info[i].h_samp_factor and + cinfo->comp_info[i].v_samp_factor, are correct. Since these indicate the + dimensions of the data you are supplying, it's wise to set them + explicitly, rather than assuming the library's defaults are what you want. + +To pass raw data to the library, call jpeg_write_raw_data() in place of +jpeg_write_scanlines(). The two routines work similarly except that +jpeg_write_raw_data takes a JSAMPIMAGE data array rather than JSAMPARRAY. +The scanlines count passed to and returned from jpeg_write_raw_data is +measured in terms of the component with the largest v_samp_factor. + +jpeg_write_raw_data() processes one MCU row per call, which is to say +v_samp_factor*DCTSIZE sample rows of each component. The passed num_lines +value must be at least max_v_samp_factor*DCTSIZE, and the return value will +be exactly that amount (or possibly some multiple of that amount, in future +library versions). This is true even on the last call at the bottom of the +image; don't forget to pad your data as necessary. + +The required dimensions of the supplied data can be computed for each +component as + cinfo->comp_info[i].width_in_blocks*DCTSIZE samples per row + cinfo->comp_info[i].height_in_blocks*DCTSIZE rows in image +after jpeg_start_compress() has initialized those fields. If the valid data +is smaller than this, it must be padded appropriately. For some sampling +factors and image sizes, additional dummy DCT blocks are inserted to make +the image a multiple of the MCU dimensions. The library creates such dummy +blocks itself; it does not read them from your supplied data. Therefore you +need never pad by more than DCTSIZE samples. An example may help here. +Assume 2h2v downsampling of YCbCr data, that is + cinfo->comp_info[0].h_samp_factor = 2 for Y + cinfo->comp_info[0].v_samp_factor = 2 + cinfo->comp_info[1].h_samp_factor = 1 for Cb + cinfo->comp_info[1].v_samp_factor = 1 + cinfo->comp_info[2].h_samp_factor = 1 for Cr + cinfo->comp_info[2].v_samp_factor = 1 +and suppose that the nominal image dimensions (cinfo->image_width and +cinfo->image_height) are 101x101 pixels. Then jpeg_start_compress() will +compute downsampled_width = 101 and width_in_blocks = 13 for Y, +downsampled_width = 51 and width_in_blocks = 7 for Cb and Cr (and the same +for the height fields). You must pad the Y data to at least 13*8 = 104 +columns and rows, the Cb/Cr data to at least 7*8 = 56 columns and rows. The +MCU height is max_v_samp_factor = 2 DCT rows so you must pass at least 16 +scanlines on each call to jpeg_write_raw_data(), which is to say 16 actual +sample rows of Y and 8 each of Cb and Cr. A total of 7 MCU rows are needed, +so you must pass a total of 7*16 = 112 "scanlines". The last DCT block row +of Y data is dummy, so it doesn't matter what you pass for it in the data +arrays, but the scanlines count must total up to 112 so that all of the Cb +and Cr data gets passed. + +Output suspension is supported with raw-data compression: if the data +destination module suspends, jpeg_write_raw_data() will return 0. +In this case the same data rows must be passed again on the next call. + + +Decompression with raw data output implies bypassing all postprocessing: +you cannot ask for rescaling or color quantization, for instance. More +seriously, you must deal with the color space and sampling factors present in +the incoming file. If your application only handles, say, 2h1v YCbCr data, +you must check for and fail on other color spaces or other sampling factors. +The library will not convert to a different color space for you. + +To obtain raw data output, set cinfo->raw_data_out = TRUE before +jpeg_start_decompress() (it is set FALSE by jpeg_read_header()). Be sure to +verify that the color space and sampling factors are ones you can handle. +Then call jpeg_read_raw_data() in place of jpeg_read_scanlines(). The +decompression process is otherwise the same as usual. + +jpeg_read_raw_data() returns one MCU row per call, and thus you must pass a +buffer of at least max_v_samp_factor*DCTSIZE scanlines (scanline counting is +the same as for raw-data compression). The buffer you pass must be large +enough to hold the actual data plus padding to DCT-block boundaries. As with +compression, any entirely dummy DCT blocks are not processed so you need not +allocate space for them, but the total scanline count includes them. The +above example of computing buffer dimensions for raw-data compression is +equally valid for decompression. + +Input suspension is supported with raw-data decompression: if the data source +module suspends, jpeg_read_raw_data() will return 0. You can also use +buffered-image mode to read raw data in multiple passes. + + +Really raw data: DCT coefficients +--------------------------------- + +It is possible to read or write the contents of a JPEG file as raw DCT +coefficients. This facility is mainly intended for use in lossless +transcoding between different JPEG file formats. Other possible applications +include lossless cropping of a JPEG image, lossless reassembly of a +multi-strip or multi-tile TIFF/JPEG file into a single JPEG datastream, etc. + +To read the contents of a JPEG file as DCT coefficients, open the file and do +jpeg_read_header() as usual. But instead of calling jpeg_start_decompress() +and jpeg_read_scanlines(), call jpeg_read_coefficients(). This will read the +entire image into a set of virtual coefficient-block arrays, one array per +component. The return value is a pointer to an array of virtual-array +descriptors. Each virtual array can be accessed directly using the JPEG +memory manager's access_virt_barray method (see Memory management, below, +and also read structure.doc's discussion of virtual array handling). Or, +for simple transcoding to a different JPEG file format, the array list can +just be handed directly to jpeg_write_coefficients(). + +Each block in the block arrays contains quantized coefficient values in +normal array order (not JPEG zigzag order). The block arrays contain only +DCT blocks containing real data; any entirely-dummy blocks added to fill out +interleaved MCUs at the right or bottom edges of the image are discarded +during reading and are not stored in the block arrays. (The size of each +block array can be determined from the width_in_blocks and height_in_blocks +fields of the component's comp_info entry.) This is also the data format +expected by jpeg_write_coefficients(). + +When you are done using the virtual arrays, call jpeg_finish_decompress() +to release the array storage and return the decompression object to an idle +state; or just call jpeg_destroy() if you don't need to reuse the object. + +If you use a suspending data source, jpeg_read_coefficients() will return +NULL if it is forced to suspend; a non-NULL return value indicates successful +completion. You need not test for a NULL return value when using a +non-suspending data source. + +It is also possible to call jpeg_read_coefficients() to obtain access to the +decoder's coefficient arrays during a normal decode cycle in buffered-image +mode. This frammish might be useful for progressively displaying an incoming +image and then re-encoding it without loss. To do this, decode in buffered- +image mode as discussed previously, then call jpeg_read_coefficients() after +the last jpeg_finish_output() call. The arrays will be available for your use +until you call jpeg_finish_decompress(). + + +To write the contents of a JPEG file as DCT coefficients, you must provide +the DCT coefficients stored in virtual block arrays. You can either pass +block arrays read from an input JPEG file by jpeg_read_coefficients(), or +allocate virtual arrays from the JPEG compression object and fill them +yourself. In either case, jpeg_write_coefficients() is substituted for +jpeg_start_compress() and jpeg_write_scanlines(). Thus the sequence is + * Create compression object + * Set all compression parameters as necessary + * Request virtual arrays if needed + * jpeg_write_coefficients() + * jpeg_finish_compress() + * Destroy or re-use compression object +jpeg_write_coefficients() is passed a pointer to an array of virtual block +array descriptors; the number of arrays is equal to cinfo.num_components. + +The virtual arrays need only have been requested, not realized, before +jpeg_write_coefficients() is called. A side-effect of +jpeg_write_coefficients() is to realize any virtual arrays that have been +requested from the compression object's memory manager. Thus, when obtaining +the virtual arrays from the compression object, you should fill the arrays +after calling jpeg_write_coefficients(). The data is actually written out +when you call jpeg_finish_compress(); jpeg_write_coefficients() only writes +the file header. + +When writing raw DCT coefficients, it is crucial that the JPEG quantization +tables and sampling factors match the way the data was encoded, or the +resulting file will be invalid. For transcoding from an existing JPEG file, +we recommend using jpeg_copy_critical_parameters(). This routine initializes +all the compression parameters to default values (like jpeg_set_defaults()), +then copies the critical information from a source decompression object. +The decompression object should have just been used to read the entire +JPEG input file --- that is, it should be awaiting jpeg_finish_decompress(). + +jpeg_write_coefficients() marks all tables stored in the compression object +as needing to be written to the output file (thus, it acts like +jpeg_start_compress(cinfo, TRUE)). This is for safety's sake, to avoid +emitting abbreviated JPEG files by accident. If you really want to emit an +abbreviated JPEG file, call jpeg_suppress_tables(), or set the tables' +individual sent_table flags, between calling jpeg_write_coefficients() and +jpeg_finish_compress(). + + +Progress monitoring +------------------- + +Some applications may need to regain control from the JPEG library every so +often. The typical use of this feature is to produce a percent-done bar or +other progress display. (For a simple example, see cjpeg.c or djpeg.c.) +Although you do get control back frequently during the data-transferring pass +(the jpeg_read_scanlines or jpeg_write_scanlines loop), any additional passes +will occur inside jpeg_finish_compress or jpeg_start_decompress; those +routines may take a long time to execute, and you don't get control back +until they are done. + +You can define a progress-monitor routine which will be called periodically +by the library. No guarantees are made about how often this call will occur, +so we don't recommend you use it for mouse tracking or anything like that. +At present, a call will occur once per MCU row, scanline, or sample row +group, whichever unit is convenient for the current processing mode; so the +wider the image, the longer the time between calls. During the data +transferring pass, only one call occurs per call of jpeg_read_scanlines or +jpeg_write_scanlines, so don't pass a large number of scanlines at once if +you want fine resolution in the progress count. (If you really need to use +the callback mechanism for time-critical tasks like mouse tracking, you could +insert additional calls inside some of the library's inner loops.) + +To establish a progress-monitor callback, create a struct jpeg_progress_mgr, +fill in its progress_monitor field with a pointer to your callback routine, +and set cinfo->progress to point to the struct. The callback will be called +whenever cinfo->progress is non-NULL. (This pointer is set to NULL by +jpeg_create_compress or jpeg_create_decompress; the library will not change +it thereafter. So if you allocate dynamic storage for the progress struct, +make sure it will live as long as the JPEG object does. Allocating from the +JPEG memory manager with lifetime JPOOL_PERMANENT will work nicely.) You +can use the same callback routine for both compression and decompression. + +The jpeg_progress_mgr struct contains four fields which are set by the library: + long pass_counter; /* work units completed in this pass */ + long pass_limit; /* total number of work units in this pass */ + int completed_passes; /* passes completed so far */ + int total_passes; /* total number of passes expected */ +During any one pass, pass_counter increases from 0 up to (not including) +pass_limit; the step size is usually but not necessarily 1. The pass_limit +value may change from one pass to another. The expected total number of +passes is in total_passes, and the number of passes already completed is in +completed_passes. Thus the fraction of work completed may be estimated as + completed_passes + (pass_counter/pass_limit) + -------------------------------------------- + total_passes +ignoring the fact that the passes may not be equal amounts of work. + +When decompressing, pass_limit can even change within a pass, because it +depends on the number of scans in the JPEG file, which isn't always known in +advance. The computed fraction-of-work-done may jump suddenly (if the library +discovers it has overestimated the number of scans) or even decrease (in the +opposite case). It is not wise to put great faith in the work estimate. + +When using the decompressor's buffered-image mode, the progress monitor work +estimate is likely to be completely unhelpful, because the library has no way +to know how many output passes will be demanded of it. Currently, the library +sets total_passes based on the assumption that there will be one more output +pass if the input file end hasn't yet been read (jpeg_input_complete() isn't +TRUE), but no more output passes if the file end has been reached when the +output pass is started. This means that total_passes will rise as additional +output passes are requested. If you have a way of determining the input file +size, estimating progress based on the fraction of the file that's been read +will probably be more useful than using the library's value. + + +Memory management +----------------- + +This section covers some key facts about the JPEG library's built-in memory +manager. For more info, please read structure.doc's section about the memory +manager, and consult the source code if necessary. + +All memory and temporary file allocation within the library is done via the +memory manager. If necessary, you can replace the "back end" of the memory +manager to control allocation yourself (for example, if you don't want the +library to use malloc() and free() for some reason). + +Some data is allocated "permanently" and will not be freed until the JPEG +object is destroyed. Most data is allocated "per image" and is freed by +jpeg_finish_compress, jpeg_finish_decompress, or jpeg_abort. You can call the +memory manager yourself to allocate structures that will automatically be +freed at these times. Typical code for this is + ptr = (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, size); +Use JPOOL_PERMANENT to get storage that lasts as long as the JPEG object. +Use alloc_large instead of alloc_small for anything bigger than a few Kbytes. +There are also alloc_sarray and alloc_barray routines that automatically +build 2-D sample or block arrays. + +The library's minimum space requirements to process an image depend on the +image's width, but not on its height, because the library ordinarily works +with "strip" buffers that are as wide as the image but just a few rows high. +Some operating modes (eg, two-pass color quantization) require full-image +buffers. Such buffers are treated as "virtual arrays": only the current strip +need be in memory, and the rest can be swapped out to a temporary file. + +If you use the simplest memory manager back end (jmemnobs.c), then no +temporary files are used; virtual arrays are simply malloc()'d. Images bigger +than memory can be processed only if your system supports virtual memory. +The other memory manager back ends support temporary files of various flavors +and thus work in machines without virtual memory. They may also be useful on +Unix machines if you need to process images that exceed available swap space. + +When using temporary files, the library will make the in-memory buffers for +its virtual arrays just big enough to stay within a "maximum memory" setting. +Your application can set this limit by setting cinfo->mem->max_memory_to_use +after creating the JPEG object. (Of course, there is still a minimum size for +the buffers, so the max-memory setting is effective only if it is bigger than +the minimum space needed.) If you allocate any large structures yourself, you +must allocate them before jpeg_start_compress() or jpeg_start_decompress() in +order to have them counted against the max memory limit. Also keep in mind +that space allocated with alloc_small() is ignored, on the assumption that +it's too small to be worth worrying about; so a reasonable safety margin +should be left when setting max_memory_to_use. + +If you use the jmemname.c or jmemdos.c memory manager back end, it is +important to clean up the JPEG object properly to ensure that the temporary +files get deleted. (This is especially crucial with jmemdos.c, where the +"temporary files" may be extended-memory segments; if they are not freed, +DOS will require a reboot to recover the memory.) Thus, with these memory +managers, it's a good idea to provide a signal handler that will trap any +early exit from your program. The handler should call either jpeg_abort() +or jpeg_destroy() for any active JPEG objects. A handler is not needed with +jmemnobs.c, and shouldn't be necessary with jmemansi.c or jmemmac.c either, +since the C library is supposed to take care of deleting files made with +tmpfile(). + + +Memory usage +------------ + +Working memory requirements while performing compression or decompression +depend on image dimensions, image characteristics (such as colorspace and +JPEG process), and operating mode (application-selected options). + +As of v6b, the decompressor requires: + 1. About 24K in more-or-less-fixed-size data. This varies a bit depending + on operating mode and image characteristics (particularly color vs. + grayscale), but it doesn't depend on image dimensions. + 2. Strip buffers (of size proportional to the image width) for IDCT and + upsampling results. The worst case for commonly used sampling factors + is about 34 bytes * width in pixels for a color image. A grayscale image + only needs about 8 bytes per pixel column. + 3. A full-image DCT coefficient buffer is needed to decode a multi-scan JPEG + file (including progressive JPEGs), or whenever you select buffered-image + mode. This takes 2 bytes/coefficient. At typical 2x2 sampling, that's + 3 bytes per pixel for a color image. Worst case (1x1 sampling) requires + 6 bytes/pixel. For grayscale, figure 2 bytes/pixel. + 4. To perform 2-pass color quantization, the decompressor also needs a + 128K color lookup table and a full-image pixel buffer (3 bytes/pixel). +This does not count any memory allocated by the application, such as a +buffer to hold the final output image. + +The above figures are valid for 8-bit JPEG data precision and a machine with +32-bit ints. For 12-bit JPEG data, double the size of the strip buffers and +quantization pixel buffer. The "fixed-size" data will be somewhat smaller +with 16-bit ints, larger with 64-bit ints. Also, CMYK or other unusual +color spaces will require different amounts of space. + +The full-image coefficient and pixel buffers, if needed at all, do not +have to be fully RAM resident; you can have the library use temporary +files instead when the total memory usage would exceed a limit you set. +(But if your OS supports virtual memory, it's probably better to just use +jmemnobs and let the OS do the swapping.) + +The compressor's memory requirements are similar, except that it has no need +for color quantization. Also, it needs a full-image DCT coefficient buffer +if Huffman-table optimization is asked for, even if progressive mode is not +requested. + +If you need more detailed information about memory usage in a particular +situation, you can enable the MEM_STATS code in jmemmgr.c. + + +Library compile-time options +---------------------------- + +A number of compile-time options are available by modifying jmorecfg.h. + +The JPEG standard provides for both the baseline 8-bit DCT process and +a 12-bit DCT process. The IJG code supports 12-bit lossy JPEG if you define +BITS_IN_JSAMPLE as 12 rather than 8. Note that this causes JSAMPLE to be +larger than a char, so it affects the surrounding application's image data. +The sample applications cjpeg and djpeg can support 12-bit mode only for PPM +and GIF file formats; you must disable the other file formats to compile a +12-bit cjpeg or djpeg. (install.doc has more information about that.) +At present, a 12-bit library can handle *only* 12-bit images, not both +precisions. (If you need to include both 8- and 12-bit libraries in a single +application, you could probably do it by defining NEED_SHORT_EXTERNAL_NAMES +for just one of the copies. You'd have to access the 8-bit and 12-bit copies +from separate application source files. This is untested ... if you try it, +we'd like to hear whether it works!) + +Note that a 12-bit library always compresses in Huffman optimization mode, +in order to generate valid Huffman tables. This is necessary because our +default Huffman tables only cover 8-bit data. If you need to output 12-bit +files in one pass, you'll have to supply suitable default Huffman tables. +You may also want to supply your own DCT quantization tables; the existing +quality-scaling code has been developed for 8-bit use, and probably doesn't +generate especially good tables for 12-bit. + +The maximum number of components (color channels) in the image is determined +by MAX_COMPONENTS. The JPEG standard allows up to 255 components, but we +expect that few applications will need more than four or so. + +On machines with unusual data type sizes, you may be able to improve +performance or reduce memory space by tweaking the various typedefs in +jmorecfg.h. In particular, on some RISC CPUs, access to arrays of "short"s +is quite slow; consider trading memory for speed by making JCOEF, INT16, and +UINT16 be "int" or "unsigned int". UINT8 is also a candidate to become int. +You probably don't want to make JSAMPLE be int unless you have lots of memory +to burn. + +You can reduce the size of the library by compiling out various optional +functions. To do this, undefine xxx_SUPPORTED symbols as necessary. + +You can also save a few K by not having text error messages in the library; +the standard error message table occupies about 5Kb. This is particularly +reasonable for embedded applications where there's no good way to display +a message anyway. To do this, remove the creation of the message table +(jpeg_std_message_table[]) from jerror.c, and alter format_message to do +something reasonable without it. You could output the numeric value of the +message code number, for example. If you do this, you can also save a couple +more K by modifying the TRACEMSn() macros in jerror.h to expand to nothing; +you don't need trace capability anyway, right? + + +Portability considerations +-------------------------- + +The JPEG library has been written to be extremely portable; the sample +applications cjpeg and djpeg are slightly less so. This section summarizes +the design goals in this area. (If you encounter any bugs that cause the +library to be less portable than is claimed here, we'd appreciate hearing +about them.) + +The code works fine on ANSI C, C++, and pre-ANSI C compilers, using any of +the popular system include file setups, and some not-so-popular ones too. +See install.doc for configuration procedures. + +The code is not dependent on the exact sizes of the C data types. As +distributed, we make the assumptions that + char is at least 8 bits wide + short is at least 16 bits wide + int is at least 16 bits wide + long is at least 32 bits wide +(These are the minimum requirements of the ANSI C standard.) Wider types will +work fine, although memory may be used inefficiently if char is much larger +than 8 bits or short is much bigger than 16 bits. The code should work +equally well with 16- or 32-bit ints. + +In a system where these assumptions are not met, you may be able to make the +code work by modifying the typedefs in jmorecfg.h. However, you will probably +have difficulty if int is less than 16 bits wide, since references to plain +int abound in the code. + +char can be either signed or unsigned, although the code runs faster if an +unsigned char type is available. If char is wider than 8 bits, you will need +to redefine JOCTET and/or provide custom data source/destination managers so +that JOCTET represents exactly 8 bits of data on external storage. + +The JPEG library proper does not assume ASCII representation of characters. +But some of the image file I/O modules in cjpeg/djpeg do have ASCII +dependencies in file-header manipulation; so does cjpeg's select_file_type() +routine. + +The JPEG library does not rely heavily on the C library. In particular, C +stdio is used only by the data source/destination modules and the error +handler, all of which are application-replaceable. (cjpeg/djpeg are more +heavily dependent on stdio.) malloc and free are called only from the memory +manager "back end" module, so you can use a different memory allocator by +replacing that one file. + +The code generally assumes that C names must be unique in the first 15 +characters. However, global function names can be made unique in the +first 6 characters by defining NEED_SHORT_EXTERNAL_NAMES. + +More info about porting the code may be gleaned by reading jconfig.doc, +jmorecfg.h, and jinclude.h. + + +Notes for MS-DOS implementors +----------------------------- + +The IJG code is designed to work efficiently in 80x86 "small" or "medium" +memory models (i.e., data pointers are 16 bits unless explicitly declared +"far"; code pointers can be either size). You may be able to use small +model to compile cjpeg or djpeg by itself, but you will probably have to use +medium model for any larger application. This won't make much difference in +performance. You *will* take a noticeable performance hit if you use a +large-data memory model (perhaps 10%-25%), and you should avoid "huge" model +if at all possible. + +The JPEG library typically needs 2Kb-3Kb of stack space. It will also +malloc about 20K-30K of near heap space while executing (and lots of far +heap, but that doesn't count in this calculation). This figure will vary +depending on selected operating mode, and to a lesser extent on image size. +There is also about 5Kb-6Kb of constant data which will be allocated in the +near data segment (about 4Kb of this is the error message table). +Thus you have perhaps 20K available for other modules' static data and near +heap space before you need to go to a larger memory model. The C library's +static data will account for several K of this, but that still leaves a good +deal for your needs. (If you are tight on space, you could reduce the sizes +of the I/O buffers allocated by jdatasrc.c and jdatadst.c, say from 4K to +1K. Another possibility is to move the error message table to far memory; +this should be doable with only localized hacking on jerror.c.) + +About 2K of the near heap space is "permanent" memory that will not be +released until you destroy the JPEG object. This is only an issue if you +save a JPEG object between compression or decompression operations. + +Far data space may also be a tight resource when you are dealing with large +images. The most memory-intensive case is decompression with two-pass color +quantization, or single-pass quantization to an externally supplied color +map. This requires a 128Kb color lookup table plus strip buffers amounting +to about 40 bytes per column for typical sampling ratios (eg, about 25600 +bytes for a 640-pixel-wide image). You may not be able to process wide +images if you have large data structures of your own. + +Of course, all of these concerns vanish if you use a 32-bit flat-memory-model +compiler, such as DJGPP or Watcom C. We highly recommend flat model if you +can use it; the JPEG library is significantly faster in flat model. diff --git a/Build/source/extra/jpeg/ltconfig b/Build/source/extra/jpeg/ltconfig new file mode 100644 index 00000000000..2347e694395 --- /dev/null +++ b/Build/source/extra/jpeg/ltconfig @@ -0,0 +1,1512 @@ +#! /bin/sh + +# ltconfig - Create a system-specific libtool. +# Copyright (C) 1996-1998 Free Software Foundation, Inc. +# Gordon Matzigkeit , 1996 +# +# 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 +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# 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. + +# A lot of this script is taken from autoconf-2.10. + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi + +echo=echo +if test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then : +else + # The Solaris and AIX default echo program unquotes backslashes. + # This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # So, we emulate echo with printf '%s\n' + echo="printf %s\\n" + if test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then : + else + # Oops. We have no working printf. Try to find a not-so-buggy echo. + echo=echo + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + for dir in $PATH /usr/ucb; do + if test -f $dir/echo && test "X`$dir/echo '\t'`" = 'X\t'; then + echo="$dir/echo" + break + fi + done + IFS="$save_ifs" + fi +fi + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# The name of this program. +progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'` + +# Constants: +PROGRAM=ltconfig +PACKAGE=libtool +VERSION=1.2 +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.c $LIBS 1>&5' +rm="rm -f" + +help="Try \`$progname --help' for more information." + +# Global variables: +can_build_shared=yes +enable_shared=yes +# All known linkers require a `.a' archive for static linking. +enable_static=yes +ltmain= +silent= +srcdir= +ac_config_guess= +ac_config_sub= +host= +nonopt= +verify_host=yes +with_gcc=no +with_gnu_ld=no + +old_AR="$AR" +old_CC="$CC" +old_CFLAGS="$CFLAGS" +old_CPPFLAGS="$CPPFLAGS" +old_LD="$LD" +old_LN_S="$LN_S" +old_NM="$NM" +old_RANLIB="$RANLIB" + +# Parse the command line options. +args= +prev= +for option +do + case "$option" in + -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + eval "$prev=\$option" + prev= + continue + fi + + case "$option" in + --help) cat <&2 + echo "$help" 1>&2 + exit 1 + ;; + + *) + if test -z "$ltmain"; then + ltmain="$option" + elif test -z "$host"; then +# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1 +# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then +# echo "$progname: warning \`$option' is not a valid host type" 1>&2 +# fi + host="$option" + else + echo "$progname: too many arguments" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac +done + +if test -z "$ltmain"; then + echo "$progname: you must specify a LTMAIN file" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +if test -f "$ltmain"; then : +else + echo "$progname: \`$ltmain' does not exist" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +# Quote any args containing shell metacharacters. +ltconfig_args= +for arg +do + case "$arg" in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ltconfig_args="$ltconfig_args '$arg'" ;; + *) ltconfig_args="$ltconfig_args $arg" ;; + esac +done + +# A relevant subset of AC_INIT. + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 5 compiler messages saved in config.log +# 6 checking for... messages and results +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>>./config.log + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LANG+set}" = set; then LANG=C; export LANG; fi + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + +if test -z "$srcdir"; then + # Assume the source directory is the same one as the path to ltmain.sh. + srcdir=`$echo "$ltmain" | $Xsed -e 's%/[^/]*$%%'` + test "$srcdir" = "$ltmain" && srcdir=. +fi + +trap "$rm conftest*; exit 1" 1 2 15 +if test "$verify_host" = yes; then + # Check for config.guess and config.sub. + ac_aux_dir= + for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/config.guess; then + ac_aux_dir=$ac_dir + break + fi + done + if test -z "$ac_aux_dir"; then + echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2 + echo "$help" 1>&2 + exit 1 + fi + ac_config_guess=$ac_aux_dir/config.guess + ac_config_sub=$ac_aux_dir/config.sub + + # Make sure we can run config.sub. + if $ac_config_sub sun4 >/dev/null 2>&1; then : + else + echo "$progname: cannot run $ac_config_sub" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + echo $ac_n "checking host system type""... $ac_c" 1>&6 + + host_alias=$host + case "$host_alias" in + "") + if host_alias=`$ac_config_guess`; then : + else + echo "$progname: cannot guess host type; you must specify one" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac + host=`$ac_config_sub $host_alias` + echo "$ac_t$host" 1>&6 + + # Make sure the host verified. + test -z "$host" && exit 1 + +elif test -z "$host"; then + echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2 + echo "$help" 1>&2 + exit 1 +else + host_alias=$host +fi + +# Transform linux* to *-*-linux-gnu*, to support old configure scripts. +case "$host_os" in +linux-gnu*) ;; +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` +esac + +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +case "$host_os" in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "${COLLECT_NAMES+set}" != set; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR cru $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +# Set a sane default for `AR'. +test -z "$AR" && AR=ar + +# If RANLIB is not set, then run the test. +if test "${RANLIB+set}" != "set"; then + result=no + + echo $ac_n "checking for ranlib... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/ranlib; then + RANLIB="ranlib" + result="ranlib" + break + fi + done + IFS="$save_ifs" + + echo "$ac_t$result" 1>&6 +fi + +if test -n "$RANLIB"; then + old_archive_cmds="$old_archive_cmds;\$RANLIB \$oldlib" + old_postinstall_cmds="\$RANLIB \$oldlib;$old_postinstall_cmds" +fi + +# Check to see if we are using GCC. +if test "$with_gcc" != yes || test -z "$CC"; then + # If CC is not set, then try to find GCC or a usable CC. + if test -z "$CC"; then + echo $ac_n "checking for gcc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + for dir in $PATH; do + IFS="$save_ifs" + test -z "$dir" && dir=. + if test -f $dir/gcc; then + CC="gcc" + break + fi + done + IFS="$save_ifs" + + if test -n "$CC"; then + echo "$ac_t$CC" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + fi + + # Not "gcc", so try "cc", rejecting "/usr/ucb/cc". + if test -z "$CC"; then + echo $ac_n "checking for cc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + cc_rejected=no + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/cc; then + if test "$dir/cc" = "/usr/ucb/cc"; then + cc_rejected=yes + continue + fi + CC="cc" + break + fi + done + IFS="$save_ifs" + if test $cc_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same name, so the bogon will be chosen + # first if we set CC to just the name; use the full file name. + shift + set dummy "$dir/cc" "$@" + shift + CC="$@" + fi + fi + + if test -n "$CC"; then + echo "$ac_t$CC" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + + if test -z "$CC"; then + echo "$progname: error: no acceptable cc found in \$PATH" 1>&2 + exit 1 + fi + fi + + # Now see if the compiler is really GCC. + with_gcc=no + echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6 + echo "$progname:424: checking whether we are using GNU C" >&5 + + $rm conftest.c + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + with_gcc=yes + fi + $rm conftest.c + echo "$ac_t$with_gcc" 1>&6 +fi + +# Allow CC to be a program name with arguments. +set dummy $CC +compiler="$2" + +echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6 +pic_flag= +special_shlib_compile_flags= +wl= +link_static_flag= +no_builtin_flag= + +if test "$with_gcc" = yes; then + wl='-Wl,' + link_static_flag='-static' + no_builtin_flag=' -fno-builtin' + + case "$host_os" in + aix3* | aix4* | irix5* | irix6* | osf3* | osf4*) + # PIC is the default for these OSes. + ;; + os2*) + # We can build DLLs from non-PIC. + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + pic_flag='-m68020 -resident32 -malways-restore-a4' + ;; + *) + pic_flag='-fPIC' + ;; + esac +else + # PORTME Check for PIC flags for the system compiler. + case "$host_os" in + aix3* | aix4*) + # All AIX code is PIC. + link_static_flag='-bnso -bI:/lib/syscalls.exp' + ;; + + hpux9* | hpux10*) + # Is there a better link_static_flag that works with the bundled CC? + wl='-Wl,' + link_static_flag="${wl}-a ${wl}archive" + pic_flag='+Z' + ;; + + irix5* | irix6*) + wl='-Wl,' + link_static_flag='-non_shared' + # PIC (with -KPIC) is the default. + ;; + + os2*) + # We can build DLLs from non-PIC. + ;; + + osf3* | osf4*) + # All OSF/1 code is PIC. + wl='-Wl,' + link_static_flag='-non_shared' + ;; + + sco3.2v5*) + pic_flag='-Kpic' + link_static_flag='-dn' + special_shlib_compile_flags='-belf' + ;; + + solaris2*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + sunos4*) + pic_flag='-PIC' + link_static_flag='-Bstatic' + wl='-Qoption ld ' + ;; + + sysv4.2uw2*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + uts4*) + pic_flag='-pic' + link_static_flag='-Bstatic' + ;; + + *) + can_build_shared=no + ;; + esac +fi + +if test -n "$pic_flag"; then + echo "$ac_t$pic_flag" 1>&6 + + # Check to make sure the pic_flag actually works. + echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6 + $rm conftest* + echo > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $pic_flag -DPIC" + echo "$progname:547: checking if $compiler PIC flag $pic_flag works" >&5 + if { (eval echo $progname:548: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then + # Append any warnings to the config.log. + cat conftest.err 1>&5 + + # On HP-UX, both CC and GCC only warn that PIC is supported... then they + # create non-PIC objects. So, if there were any warnings, we assume that + # PIC is not supported. + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + can_build_shared=no + pic_flag= + else + echo "$ac_t"yes 1>&6 + pic_flag=" $pic_flag" + fi + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + can_build_shared=no + pic_flag= + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* +else + echo "$ac_t"none 1>&6 +fi + +# Check for any special shared library compilation flags. +if test -n "$special_shlib_compile_flags"; then + echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2 + if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then : + else + echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2 + can_build_shared=no + fi +fi + +echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6 +$rm conftest* +echo 'main(){return(0);}' > conftest.c +save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS $link_static_flag" +echo "$progname:591: checking if $compiler static flag $link_static_flag works" >&5 +if { (eval echo $progname:592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + echo "$ac_t$link_static_flag" 1>&6 +else + echo "$ac_t"none 1>&6 + link_static_flag= +fi +LDFLAGS="$save_LDFLAGS" +$rm conftest* + +if test -z "$LN_S"; then + # Check to see if we can use ln -s, or we need hard links. + echo $ac_n "checking whether ln -s works... $ac_c" 1>&6 + $rm conftestdata + if ln -s X conftestdata 2>/dev/null; then + $rm conftestdata + LN_S="ln -s" + else + LN_S=ln + fi + if test "$LN_S" = "ln -s"; then + echo "$ac_t"yes 1>&6 + else + echo "$ac_t"no 1>&6 + fi +fi + +# Make sure LD is an absolute path. +if test -z "$LD"; then + ac_prog=ld + if test "$with_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6 + echo "$progname:624: checking for ld used by GCC" >&5 + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. + /* | [A-Za-z]:\\*) + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we are not using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac + elif test "$with_gnu_ld" = yes; then + echo $ac_n "checking for GNU ld... $ac_c" 1>&6 + echo "$progname:642: checking for GNU ld" >&5 + else + echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 + echo "$progname:645: checking for non-GNU ld" >&5 + fi + + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog"; then + LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" + fi + + if test -n "$LD"; then + echo "$ac_t$LD" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + + if test -z "$LD"; then + echo "$progname: error: no acceptable ld found in \$PATH" 1>&2 + exit 1 + fi +fi + +# Check to see if it really is or is not GNU ld. +echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6 +# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + with_gnu_ld=yes +else + with_gnu_ld=no +fi +echo "$ac_t$with_gnu_ld" 1>&6 + +# See if the linker supports building shared libraries. +echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6 + +allow_undefined_flag= +no_undefined_flag= +archive_cmds= +old_archive_from_new_cmds= +export_dynamic_flag_spec= +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no +hardcode_shlibpath_var=unsupported +runpath_var= + +case "$host_os" in +amigaos* | sunos4*) + # On these operating systems, we should treat GNU ld like the system ld. + gnu_ld_acts_native=yes + ;; +*) + gnu_ld_acts_native=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes && test "$gnu_ld_acts_native" != yes; then + + # See if GNU ld supports shared libraries. + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared ${wl}-soname $wl$soname -o $lib$libobjs' + runpath_var=LD_RUN_PATH + ld_shlibs=yes + else + ld_shlibs=no + fi + + if test "$ld_shlibs" = yes; then + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + fi +else + # PORTME fill in a description of your system's linker (not GNU ld) + case "$host_os" in + aix3*) + allow_undefined_flag=unsupported + archive_cmds='$NM$libobjs | $global_symbol_pipe | sed '\''s/.* //'\'' > $lib.exp;$LD -o $objdir/$soname$libobjs -bE:$lib.exp -T512 -H512 -bM:SRE;$AR cru $lib $objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$with_gcc" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4*) + allow_undefined_flag=unsupported + archive_cmds='$NM$libobjs | $global_symbol_pipe | sed '\''s/.* //'\'' > $lib.exp;$CC -o $objdir/$soname$libobjs ${wl}-bE:$lib.exp ${wl}-bM:SRE ${wl}-bnoentry;$AR cru $lib $objdir/$soname' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + + amigaos*) + archive_cmds='$rm $objdir/a2ixlibrary.data;$echo "#define NAME $libname" > $objdir/a2ixlibrary.data;$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data;$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data;$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data;$AR cru $lib$libobjs;$RANLIB $lib;(cd $objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib$libobjs /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib$libobjs' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3, at last, uses gcc -shared to do shared libraries. + freebsd3*) + archive_cmds='$CC -shared -o $lib$libobjs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + archive_cmds='$rm $objdir/$soname;$LD -b +s +b $install_libdir -o $objdir/$soname$libobjs;mv $objdir/$soname $lib' + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + archive_cmds='$LD -b +h $soname +s +b $install_libdir -o $lib$libobjs' + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + irix5* | irix6*) + archive_cmds='$LD -shared -o $lib -soname $soname -set_version $verstring$libobjs' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + ;; + + netbsd*) + # Tested with NetBSD 1.2 ld + archive_cmds='$LD -Bshareable -o $lib$libobjs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + openbsd*) + archive_cmds='$LD -Bshareable -o $lib$libobjs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def;$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def;$echo DATA >> $objdir/$libname.def;$echo " SINGLE NONSHARED" >> $objdir/$libname.def;$echo EXPORTS >> $objdir/$libname.def;emxexp$libobjs >> $objdir/$libname.def;$CC -Zdll -Zcrtdll -o $lib$libobjs $objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def' + ;; + + osf3* | osf4*) + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} -o $lib -soname $soname -set_version $verstring$libobjs$deplibs' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -o $lib$libobjs' + hardcode_direct=yes + ;; + + solaris2*) + no_undefined_flag=' -z text' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib$libobjs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + + # Solaris 2 before 2.5 hardcodes -L paths. + case "$host_os" in + solaris2.[0-4]*) + hardcode_minus_L=yes + ;; + esac + ;; + + sunos4*) + if test "$with_gcc" = yes; then + archive_cmds='$CC -shared -o $lib$libobjs' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib$libobjs' + fi + + if test "$with_gnu_ld" = yes; then + export_dynamic_flag_spec='${wl}-export-dynamic' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib$libobjs' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + can_build_shared=no + ;; + esac +fi +echo "$ac_t$ld_shlibs" 1>&6 + +if test -z "$NM"; then + echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6 + case "$NM" in + /* | [A-Za-z]:\\*) ;; # Let the user override the test with a path. + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + NM="$ac_dir/nm -B" + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + NM="$ac_dir/nm -p" + else + NM="$ac_dir/nm" + fi + break + fi + done + IFS="$ac_save_ifs" + test -z "$NM" && NM=nm + ;; + esac + echo "$ac_t$NM" 1>&6 +fi + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6 + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRSTU]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \1' + +# Define system-specific variables. +case "$host_os" in +aix*) + symcode='[BCDTU]' + ;; +irix*) + # Cannot use undefined symbols on IRIX because inlined functions mess us up. + symcode='[BCDEGRST]' + ;; +solaris2*) + symcode='[BDTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then + symcode='[ABCDGISTUW]' +fi + +# Write the raw and C identifiers. +global_symbol_pipe="sed -n -e 's/^.* $symcode $sympat$/$symxfrm/p'" + +# Check to see that the pipe works correctly. +pipe_works=no +$rm conftest* +cat > conftest.c <&5 +if { (eval echo $progname:972: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.o; then + # Now try to grab the symbols. + nlist=conftest.nm + if { echo "$progname:975: eval \"$NM conftest.o | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.o | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then + + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + wcout=`wc "$nlist" 2>/dev/null` + count=`$echo "X$wcout" | $Xsed -e 's/^[ ]*\([0-9][0-9]*\).*$/\1/'` + (test "$count" -ge 0) 2>/dev/null || count=-1 + else + rm -f "$nlist"T + count=-1 + fi + + # Make sure that we snagged all the symbols we need. + if egrep ' nm_test_var$' "$nlist" >/dev/null; then + if egrep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.c +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + sed 's/^.* \(.*\)$/extern char \1;/' < "$nlist" >> conftest.c + + cat <> conftest.c +#if defined (__STDC__) && __STDC__ +# define __ptr_t void * +#else +# define __ptr_t char * +#endif + +/* The number of symbols in dld_preloaded_symbols, -1 if unsorted. */ +int dld_preloaded_symbol_count = $count; + +/* The mapping between symbol names and symbols. */ +struct { + char *name; + __ptr_t address; +} +dld_preloaded_symbols[] = +{ +EOF + sed 's/^\(.*\) \(.*\)$/ {"\1", (__ptr_t) \&\2},/' < "$nlist" >> conftest.c + cat <<\EOF >> conftest.c + {0, (__ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.o conftestm.o + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS='conftestm.o' + CFLAGS="$CFLAGS$no_builtin_flag" + if { (eval echo $progname:1033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + pipe_works=yes + else + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 + fi + LIBS="$save_LIBS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $global_symbol_pipe" >&5 + fi +else + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 +fi +$rm conftest* + +# Do not use the global_symbol_pipe unless it works. +echo "$ac_t$pipe_works" 1>&6 +test "$pipe_works" = yes || global_symbol_pipe= + +# Check hardcoding attributes. +echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var"; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && \ + test "$hardcode_minus_L" != no && \ + test "$hardcode_shlibpath_var" != no; then + + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +elif test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" != yes; then + # We cannot hardcode anything. + hardcode_action=unsupported +else + # We can only hardcode existing directories. + hardcode_action=relink +fi +echo "$ac_t$hardcode_action" 1>&6 +test "$hardcode_action" = unsupported && can_build_shared=no + + +reload_flag= +reload_cmds='$LD$reload_flag -o $output$reload_objs' +echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6 +# PORTME Some linker may need a different reload flag. +reload_flag='-r' +echo "$ac_t$reload_flag" +test -n "$reload_flag" && reload_flag=" $reload_flag" + +# PORTME Fill in your ld.so characteristics +library_names_spec= +libname_spec='lib$name' +soname_spec= +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +version_type=none +dynamic_linker="$host_os ld.so" + +echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6 +case "$host_os" in +aix3* | aix4*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}.so.$major' + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' + ;; + +freebsd2* | freebsd3*) + version_type=sunos + library_names_spec='${libname}${release}.so.$versuffix $libname.so' + finish_cmds='PATH="$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +gnu*) + version_type=sunos + library_names_spec='${libname}${release}.so.$versuffix' + shlibpath_var=LD_LIBRARY_PATH + ;; + +hpux9* | hpux10*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + dynamic_linker="$host_os dld.sl" + version_type=sunos + shlibpath_var=SHLIB_PATH + library_names_spec='${libname}${release}.sl.$versuffix ${libname}${release}.sl.$major $libname.sl' + soname_spec='${libname}${release}.sl.$major' + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6*) + version_type=osf + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so.$versuffix $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux-gnu*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + soname_spec='${libname}${release}.so.$major' + finish_cmds='PATH="$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + + if test -f /lib/ld.so.1; then + dynamic_linker='GNU ld.so' + else + # Only the GNU ld.so supports shared libraries on MkLinux. + case "$host_cpu" in + powerpc*) dynamic_linker=no ;; + *) dynamic_linker='Linux ld.so' ;; + esac + fi + ;; + +netbsd* | openbsd*) + version_type=sunos + library_names_spec='${libname}${release}.so.$versuffix' + finish_cmds='PATH="$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +os2*) + libname_spec='$name' + library_names_spec='$libname.dll $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4*) + version_type=osf + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so.$versuffix $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}.so.$major' + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris2*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + soname_spec='${libname}${release}.so.$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}.so.$versuffix' + finish_cmds='PATH="$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sysv4.2uw2*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + soname_spec='${libname}${release}.so.$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + soname_spec='${libname}${release}.so.$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$ac_t$dynamic_linker" +test "$dynamic_linker" = no && can_build_shared=no + +# Report the final consequences. +echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6 + +echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds;\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; +esac + +echo "$ac_t$enable_shared" 1>&6 + +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes + +echo "checking whether to build static libraries... $enable_static" 1>&6 + +echo $ac_n "checking for objdir... $ac_c" 1>&6 +rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + objdir=_libs +fi +rmdir .libs 2>/dev/null +echo "$ac_t$objdir" 1>&6 + +# Copy echo and quote the copy, instead of the original, because it is +# used later. +ltecho="$echo" + +# Now quote all the things that may contain metacharacters. +for var in ltecho old_CC old_CFLAGS old_CPPFLAGS old_LD old_NM old_RANLIB \ + old_LN_S AR CC LD LN_S NM reload_flag reload_cmds wl pic_flag \ + link_static_flag no_builtin_flag export_dynamic_flag_spec \ + libname_spec library_names_spec soname_spec RANLIB \ + old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ + old_postuninstall_cmds archive_cmds postinstall_cmds postuninstall_cmds \ + allow_undefined_flag no_undefined_flag \ + finish_cmds finish_eval global_symbol_pipe \ + hardcode_libdir_flag_spec hardcode_libdir_separator; do + + case "$var" in + reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | archive_cmds | \ + postinstall_cmds | postuninstall_cmds | finish_cmds) + # Double-quote double-evaled strings. + eval "$var=\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\"\`" + ;; + *) + eval "$var=\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`" + ;; + esac +done + +ofile=libtool +trap "$rm $ofile; exit 1" 1 2 15 +echo creating $ofile +$rm $ofile +cat < $ofile +#! /bin/sh + +# libtool - Provide generalized library-building support services. +# Generated automatically by $PROGRAM - GNU $PACKAGE $VERSION +# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh. +# +# Copyright (C) 1996-1998 Free Software Foundation, Inc. +# Gordon Matzigkeit , 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 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# 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 program was configured as follows, +# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# +# CC="$old_CC" CFLAGS="$old_CFLAGS" CPPFLAGS="$old_CPPFLAGS" \\ +# LD="$old_LD" NM="$old_NM" RANLIB="$old_RANLIB" LN_S="$old_LN_S" \\ +# $0$ltconfig_args +# +# Compiler and other test output produced by $progname, useful for +# debugging $progname, is in ./config.log if it exists. + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="sed -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "\${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi + +# An echo program that does not interpret backslashes. +echo="$ltecho" + +# The version of $progname that generated this script. +LTCONFIG_VERSION="$VERSION" + +# Shell to use when invoking shell scripts. +SHELL=${CONFIG_SHELL-/bin/sh} + +# Whether or not to build libtool libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build old-style libraries. +build_old_libs=$enable_static + +# The host system. +host_alias="$host_alias" +host="$host" + +# The archiver. +AR="$AR" + +# The default C compiler. +CC="$CC" + +# The linker used to build libraries. +LD="$LD" + +# Whether we need hard or soft links. +LN_S="$LN_S" + +# A BSD-compatible nm program. +NM="$NM" + +# The name of the directory that contains temporary libtool files. +objdir="$objdir" + +# How to create reloadable object files. +reload_flag="$reload_flag" +reload_cmds="$reload_cmds" + +# How to pass a linker flag through the compiler. +wl="$wl" + +# Additional compiler flags for building library objects. +pic_flag="$pic_flag" + +# Compiler flag to prevent dynamic linking. +link_static_flag="$link_static_flag" + +# Compiler flag to turn off builtin functions. +no_builtin_flag="$no_builtin_flag" + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="$export_dynamic_flag_spec" + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec="$libname_spec" + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec="$library_names_spec" + +# The coded name of the library, if different from the real name. +soname_spec="$soname_spec" + +# Commands used to build and install an old-style archive. +RANLIB="$RANLIB" +old_archive_cmds="$old_archive_cmds" +old_postinstall_cmds="$old_postinstall_cmds" +old_postuninstall_cmds="$old_postuninstall_cmds" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="$old_archive_from_new_cmds" + +# Commands used to build and install a shared archive. +archive_cmds="$archive_cmds" +postinstall_cmds="$postinstall_cmds" +postuninstall_cmds="$postuninstall_cmds" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="$allow_undefined_flag" + +# Flag that forces no undefined symbols. +no_undefined_flag="$no_undefined_flag" + +# Commands used to finish a libtool library installation in a directory. +finish_cmds="$finish_cmds" + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval="$finish_eval" + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe="$global_symbol_pipe" + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec="$hardcode_libdir_flag_spec" + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator="$hardcode_libdir_separator" + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +EOF + +case "$host_os" in +aix3*) + cat <<\EOF >> $ofile +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "${COLLECT_NAMES+set}" != set; then + COLLECT_NAMES= + export COLLECT_NAMES +fi + +EOF + ;; +esac + +# Append the ltmain.sh script. +cat "$ltmain" >> $ofile || (rm -f $ofile; exit 1) + +chmod +x $ofile +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/Build/source/extra/jpeg/ltmain.sh b/Build/source/extra/jpeg/ltmain.sh new file mode 100644 index 00000000000..e9350b3fab0 --- /dev/null +++ b/Build/source/extra/jpeg/ltmain.sh @@ -0,0 +1,2453 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun ltconfig. +# +# Copyright (C) 1996-1998 Free Software Foundation, Inc. +# Gordon Matzigkeit , 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 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# 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 name of this program. +progname=`$echo "$0" | sed 's%^.*/%%'` +modename="$progname" + +# Constants. +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=1.2 + +default_mode= +help="Try \`$progname --help' for more information." +magic="%%%MAGIC variable%%%" +mkdir="mkdir" +mv="mv -f" +rm="rm -f" + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LANG+set}" = set; then LANG=C; export LANG; fi + +if test "$LTCONFIG_VERSION" != "$VERSION"; then + echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + echo "$modename: not configured to build any kind of library" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= + +# Parse our command line options once, thoroughly. +while test $# -gt 0 +do + arg="$1" + shift + + case "$arg" in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + execute_dlfiles) + eval "$prev=\"\$$prev \$arg\"" + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case "$arg" in + --help) + show_help=yes + ;; + + --version) + echo "$PROGRAM (GNU $PACKAGE) $VERSION" + exit 0 + ;; + + --dry-run | -n) + run=: + ;; + + --features) + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + exit 0 + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --quiet | --silent) + show=: + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 +fi + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + case "$nonopt" in + *cc | *++ | gcc* | *-gcc*) + mode=link + for arg + do + case "$arg" in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case "$mode" in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + lastarg= + srcfile="$nonopt" + suppress_output= + + for arg + do + # Accept any command-line options. + case "$arg" in + -o) + $echo "$modename: you cannot specify the output filename with \`-o'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + esac + + # Accept the current argument as the source file. + lastarg="$srcfile" + srcfile="$arg" + + # Aesthetically quote the previous argument. + + # Backslashify any backslashes, double quotes, and dollar signs. + # These are the only characters that are still specially + # interpreted inside of double-quoted scrings. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly in scan + # sets, so we specify it separately. + case "$lastarg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + lastarg="\"$lastarg\"" + ;; + esac + + # Add the previous argument to base_compile. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + done + + # Get the name of the library object. + libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + + # Recognize several different file suffixes. + xform='[cCFSfms]' + case "$libobj" in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case "$libobj" in + *.lo) obj=`$echo "X$libobj" | $Xsed -e 's/\.lo$/.o/'` ;; + *) + $echo "$modename: cannot determine name of library object from \`$srcfile'" 1>&2 + exit 1 + ;; + esac + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + $run $rm $obj $libobj + trap "$run $rm $obj $libobj; exit 1" 1 2 15 + else + $run $rm $libobj + trap "$run $rm $libobj; exit 1" 1 2 15 + fi + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + # All platforms use -DPIC, to notify preprocessed assembler code. + $show "$base_compile$pic_flag -DPIC $srcfile" + if $run eval "$base_compile\$pic_flag -DPIC \$srcfile"; then : + else + test -n "$obj" && $run $rm $obj + exit 1 + fi + + # If we have no pic_flag, then copy the object into place and finish. + if test -z "$pic_flag"; then + $show "$LN_S $obj $libobj" + $run $LN_S $obj $libobj + exit $? + fi + + # Just move the object, then go on to compile the next one + $show "$mv $obj $libobj" + $run $mv $obj $libobj || exit 1 + + # Allow error messages only from the first compilation. + suppress_output=' >/dev/null 2>&1' + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + # Suppress compiler output if we already did a PIC compilation. + $show "$base_compile $srcfile$suppress_output" + if $run eval "$base_compile \$srcfile$suppress_output"; then : + else + $run $rm $obj $libobj + exit 1 + fi + fi + + # Create an invalid libtool object if no PIC, so that we do not + # accidentally link it into a program. + if test "$build_libtool_libs" != yes; then + $show "echo timestamp > $libobj" + $run eval "echo timestamp > \$libobj" || exit $? + fi + + exit 0 + ;; + + # libtool link mode + link) + modename="$modename: link" + CC="$nonopt" + allow_undefined=yes + compile_command="$CC" + finalize_command="$CC" + + compile_shlibpath= + finalize_shlibpath= + deplibs= + dlfiles= + dlprefiles= + export_dynamic=no + hardcode_libdirs= + libobjs= + link_against_libtool_libs= + ltlibs= + objs= + prev= + prevarg= + release= + rpath= + perm_rpath= + temp_rpath= + vinfo= + + # We need to know -static, to get the right output filenames. + for arg + do + case "$arg" in + -all-static | -static) + if test "X$arg" = "X-all-static" && test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 + fi + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + for arg + do + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case "$prev" in + dlfiles|dlprefiles) + case "$arg" in + *.la | *.lo) ;; # We handle these cases below. + *) + dlprefiles="$dlprefiles $arg" + test "$prev" = dlfiles && dlfiles="$dlfiles $arg" + prev= + ;; + esac + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath) + rpath="$rpath $arg" + prev= + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi + + prevarg="$arg" + + case "$arg" in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + if test "$export_dynamic" != yes; then + export_dynamic=yes + if test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + else + arg= + fi + + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + fi + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's%^-L\(.*\)$%\1%'` + case "$dir" in + /* | [A-Za-z]:\\*) + # Add the corresponding hardcode_libdir_flag, if it is not identical. + ;; + *) + $echo "$modename: \`-L$dir' cannot specify a relative directory" 1>&2 + exit 1 + ;; + esac + deplibs="$deplibs $arg" + ;; + + -l*) deplibs="$deplibs $arg" ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -o) prev=output ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -static) + # If we have no pic_flag, then this is the same as -all-static. + if test -z "$pic_flag" && test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + ;; + + *.o | *.a) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A library object. + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + if test "$build_libtool_libs" = yes; then + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e 's/\.lo$/\.o/'` + prev= + fi + libobjs="$libobjs $arg" + ;; + + *.la) + # A libtool-controlled library. + + dlname= + libdir= + library_names= + old_library= + + # Check to see that this really is a libtool archive. + if (sed -e '2q' $arg | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : + else + $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2 + exit 1 + fi + + # If there is no directory component, then add one. + case "$arg" in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$libdir"; then + $echo "$modename: \`$arg' contains no -rpath information" 1>&2 + exit 1 + fi + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$arg'" 1>&2 + exit 1 + fi + + # Find the relevant object directory and library name. + name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'` + dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$arg"; then + dir="$objdir" + else + dir="$dir/$objdir" + fi + + # This library was specified with -dlopen. + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + if test -z "$dlname"; then + # If there is no dlname, we need to preload. + prev=dlprefiles + else + # We should not create a dependency on this library, but we + # may need any libraries it requires. + compile_command="$compile_command$dependency_libs" + finalize_command="$finalize_command$dependency_libs" + prev= + continue + fi + fi + + # The library was specified with -dlpreopen. + if test "$prev" = dlprefiles; then + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + dlprefiles="$dlprefiles $dir/$old_library" + else + dlprefiles="$dlprefiles $dir/$linklib" + fi + prev= + fi + + if test "$build_libtool_libs" = yes && test -n "$library_names"; then + link_against_libtool_libs="$link_against_libtool_libs $arg" + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + + # This is the magic to use -rpath. + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + # Put the magic libdir with the hardcode flag. + hardcode_libdirs="$libdir" + libdir="@HARDCODE_LIBDIRS@" + else + # Just accumulate the unique libdirs. + case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + libdir= + fi + fi + + if test -n "$libdir"; then + eval flag=\"$hardcode_libdir_flag_spec\" + + compile_command="$compile_command $flag" + finalize_command="$finalize_command $flag" + fi + elif test -n "$runpath_var"; then + # Do the same for the permanent run path. + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + + + case "$hardcode_action" in + immediate) + if test "$hardcode_direct" = no; then + compile_command="$compile_command $dir/$linklib" + elif test "$hardcode_minus_L" = no; then + compile_command="$compile_command -L$dir -l$name" + elif test "$hardcode_shlibpath_var" = no; then + compile_shlibpath="$compile_shlibpath$dir:" + compile_command="$compile_command -l$name" + fi + ;; + + relink) + # We need an absolute path. + case "$dir" in + /* | [A-Za-z]:\\*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + exit 1 + fi + dir="$absdir" + ;; + esac + + if test "$hardcode_direct" = yes; then + compile_command="$compile_command $dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + compile_command="$compile_command -L$dir -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + compile_shlibpath="$compile_shlibpath$dir:" + compile_command="$compile_command -l$name" + fi + ;; + + *) + $echo "$modename: \`$hardcode_action' is an unknown hardcode action" 1>&2 + exit 1 + ;; + esac + + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + finalize_command="$finalize_command $libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + finalize_command="$finalize_command -L$libdir -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + finalize_shlibpath="$finalize_shlibpath$libdir:" + finalize_command="$finalize_command -l$name" + else + # We cannot seem to hardcode it, guess we'll fake it. + finalize_command="$finalize_command -L$libdir -l$name" + fi + else + # Transform directly to old archives if we don't build new libraries. + if test -n "$pic_flag" && test -z "$old_library"; then + $echo "$modename: cannot find static library for \`$arg'" 1>&2 + exit 1 + fi + + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_command="$compile_command $dir/$linklib" + finalize_command="$finalize_command $dir/$linklib" + else + compile_command="$compile_command -L$dir -l$name" + finalize_command="$finalize_command -L$dir -l$name" + fi + fi + + # Add in any libraries that this one depends upon. + compile_command="$compile_command$dependency_libs" + finalize_command="$finalize_command$dependency_libs" + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + ;; + esac + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$vinfo" && test -n "$release"; then + $echo "$modename: you cannot specify both \`-version-info' and \`-release'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + oldlib= + oldobjs= + case "$output" in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + */* | *\\*) + $echo "$modename: output file \`$output' must have no directory components" 1>&2 + exit 1 + ;; + + *.a) + # Now set the variables for building old libraries. + build_libtool_libs=no + build_old_libs=yes + oldlib="$output" + $show "$rm $oldlib" + $run $rm $oldlib + ;; + + *.la) + # Make sure we only generate libraries of the form `libNAME.la'. + case "$output" in + lib*) ;; + *) + $echo "$modename: libtool library \`$arg' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + name=`$echo "X$output" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval libname=\"$libname_spec\" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + current=0 + revision=0 + age=0 + + if test -n "$objs"; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 + exit 1 + fi + + # How the heck are we supposed to write a wrapper for a shared library? + if test -n "$link_against_libtool_libs"; then + $echo "$modename: libtool library \`$output' may not depend on uninstalled libraries:$link_against_libtool_libs" 1>&2 + exit 1 + fi + + if test -n "$dlfiles$dlprefiles"; then + $echo "$modename: warning: \`-dlopen' is ignored while creating libtool libraries" 1>&2 + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test -z "$rpath"; then + $echo "$modename: you must specify an installation directory with \`-rpath'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + set dummy $rpath + if test $# -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + # Parse the version information argument. + IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' + set dummy $vinfo + IFS="$save_ifs" + + if test -n "$5"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + test -n "$2" && current="$2" + test -n "$3" && revision="$3" + test -n "$4" && age="$4" + + # Check that each of the things are valid numbers. + case "$current" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$revision" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$age" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + if test $age -gt $current; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + fi + + # Calculate the version variables. + version_vars="version_type current age revision" + case "$version_type" in + none) ;; + + linux) + version_vars="$version_vars major versuffix" + major=`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + version_vars="$version_vars versuffix verstring" + major=`expr $current - $age` + versuffix="$current.$age.$revision" + verstring="$versuffix" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test $loop != 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + version_vars="$version_vars major versuffix" + major="$current" + versuffix="$current.$revision" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + ;; + esac + + # Create the output directory, or remove our outputs if we need to. + if test -d $objdir; then + $show "$rm $objdir/$output $objdir/$libname.* $objdir/${libname}${release}.*" + $run $rm $objdir/$output $objdir/$libname.* $objdir/${libname}${release}.* + else + $show "$mkdir $objdir" + $run $mkdir $objdir + status=$? + if test $status -eq 0 || test -d $objdir; then : + else + exit $status + fi + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + # Add libc to deplibs on all systems. + dependency_libs="$deplibs" + deplibs="$deplibs -lc" + + if test "$build_libtool_libs" = yes; then + # Get the real and link names of the library. + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + lib="$objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are PIC. + test -z "$pic_flag" && libobjs=`$echo "X$libobjs " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//g'` + + # Do each of the archive commands. + eval cmds=\"$archive_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Create links to the real library. + for linkname in $linknames; do + $show "(cd $objdir && $LN_S $realname $linkname)" + $run eval '(cd $objdir && $LN_S $realname $linkname)' || exit $? + done + + # If -export-dynamic was specified, set the dlname. + if test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + + # Now set the variables for building old libraries. + oldlib="$objdir/$libname.a" + ;; + + *.lo | *.o) + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link libtool libraries into reloadable objects" 1>&2 + exit 1 + fi + + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored while creating objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles"; then + $echo "$modename: warning: \`-dlopen' is ignored while creating objects" 1>&2 + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored while creating objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored while creating objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored while creating objects" 1>&2 + fi + + case "$output" in + *.lo) + if test -n "$objs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit 1 + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e 's/\.lo$/.o/'` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Create the old-style object. + reload_objs="$objs"`$echo "X$libobjs " | $Xsed -e 's/[^ ]*\.a //g' -e 's/\.lo /.o /g' -e 's/ $//g'` + + output="$obj" + eval cmds=\"$reload_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + test -z "$libobj" && exit 0 + + if test "$build_libtool_libs" != yes; then + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + $show "echo timestamp > $libobj" + $run eval "echo timestamp > $libobj" || exit $? + exit 0 + fi + + if test -n "$pic_flag"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs" + output="$libobj" + eval cmds=\"$reload_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + else + # Just create a symlink. + $show "$LN_S $obj $libobj" + $run $LN_S $obj $libobj || exit 1 + fi + + exit 0 + ;; + + *) + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored while linking programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored while creating objects" 1>&2 + fi + + if test -n "$rpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + # Put the magic libdir with the hardcode flag. + hardcode_libdirs="$libdir" + libdir="@HARDCODE_LIBDIRS@" + else + # Just accumulate the unique libdirs. + case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + libdir= + fi + fi + + if test -n "$libdir"; then + eval flag=\"$hardcode_libdir_flag_spec\" + + compile_command="$compile_command $flag" + finalize_command="$finalize_command $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + fi + + # Substitute the hardcoded libdirs into the compile commands. + if test -n "$hardcode_libdir_separator"; then + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` + fi + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` + finalize_command=`$echo "X$finalize_command " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` + fi + + if test "$export_dynamic" = yes && test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${output}S.c" + else + dlsyms= + fi + + if test -n "$dlsyms"; then + # Add our own program objects to the preloaded list. + dlprefiles=`$echo "X$objs$dlprefiles " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` + + # Discover the nlist of each of the dlfiles. + nlist="$objdir/${output}.nm" + + if test -d $objdir; then + $show "$rm $nlist ${nlist}T" + $run $rm "$nlist" "${nlist}T" + else + $show "$mkdir $objdir" + $run $mkdir $objdir + status=$? + if test $status -eq 0 || test -d $objdir; then : + else + exit $status + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + # Parse the name list into a source file. + $show "creating $objdir/$dlsyms" + if test -z "$run"; then + # Make sure we at least have an empty file. + test -f "$nlist" || : > "$nlist" + + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + wcout=`wc "$nlist" 2>/dev/null` + count=`echo "X$wcout" | $Xsed -e 's/^[ ]*\([0-9][0-9]*\).*$/\1/'` + (test "$count" -ge 0) 2>/dev/null || count=-1 + else + $rm "$nlist"T + count=-1 + fi + + case "$dlsyms" in + "") ;; + *.c) + $echo > "$objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$output' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define dld_preloaded_symbol_count some_other_symbol +#define dld_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test -f "$nlist"; then + sed -e 's/^.* \(.*\)$/extern char \1;/' < "$nlist" >> "$objdir/$dlsyms" + else + echo '/* NONE */' >> "$objdir/$dlsyms" + fi + + $echo >> "$objdir/$dlsyms" "\ + +#undef dld_preloaded_symbol_count +#undef dld_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define __ptr_t void * +#else +# define __ptr_t char * +#endif + +/* The number of symbols in dld_preloaded_symbols, -1 if unsorted. */ +int dld_preloaded_symbol_count = $count; + +/* The mapping between symbol names and symbols. */ +struct { + char *name; + __ptr_t address; +} +dld_preloaded_symbols[] = +{\ +" + + if test -f "$nlist"; then + sed 's/^\(.*\) \(.*\)$/ {"\1", (__ptr_t) \&\2},/' < "$nlist" >> "$objdir/$dlsyms" + fi + + $echo >> "$objdir/$dlsyms" "\ + {0, (__ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif\ +" + ;; + + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit 1 + ;; + esac + fi + + # Now compile the dynamic symbol file. + $show "(cd $objdir && $CC -c$no_builtin_flag \"$dlsyms\")" + $run eval '(cd $objdir && $CC -c$no_builtin_flag "$dlsyms")' || exit $? + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$objdir/${output}S.o%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$objdir/${output}S.o%"` + elif test "$export_dynamic" != yes; then + test -n "$dlfiles$dlprefiles" && $echo "$modename: warning: \`-dlopen' and \`-dlpreopen' are ignored without \`-export-dynamic'" 1>&2 + else + # We keep going just in case the user didn't refer to + # dld_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + finalize_command=`$echo "X$finalize_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + + # We have no uninstalled library dependencies, so finalize right now. + $show "$compile_command" + $run eval "$compile_command" + exit $? + fi + + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$objdir/$output"'%g'` + finalize_command=`$echo "X$finalize_command" | $Xsed -e 's%@OUTPUT@%'"$objdir/$output"'T%g'` + + # Create the binary in the object directory, then wrap it. + if test -d $objdir; then : + else + $show "$mkdir $objdir" + $run $mkdir $objdir + status=$? + if test $status -eq 0 || test -d $objdir; then : + else + exit $status + fi + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case "$dir" in + /* | [A-Za-z]:\\*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + # Delete the old output file. + $run $rm $output + + if test -n "$compile_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_command="$runpath_var=\"$rpath\$$runpath_var\" $compile_command" + finalize_command="$runpath_var=\"$rpath\$$runpath_var\" $finalize_command" + fi + + case "$hardcode_action" in + relink) + # AGH! Flame the AIX and HP-UX people for me, will ya? + $echo "$modename: warning: using a buggy system linker" 1>&2 + $echo "$modename: relinking will be required before \`$output' can be installed" 1>&2 + ;; + esac + + $show "$compile_command" + $run eval "$compile_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the finalize command for shipping. + finalize_command=`$echo "X$finalize_command" | $Xsed -e "$sed_quote_subst"` + + # Quote $echo for shipping. + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + $rm $output + trap "$rm $output; exit 1" 1 2 15 + + $echo > $output "\ +#! /bin/sh + +# $output - temporary wrapper script for $objdir/$output +# Generated by ltmain.sh - GNU $PACKAGE $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of \``pwd`'. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=; export CDPATH; fi + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + link_against_libtool_libs='$link_against_libtool_libs' + finalize_command=\"$finalize_command\" +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" = \"$magic\"; then : + else + echo=\"$qecho\" + file=\"\$0\" + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + /* | [A-Za-z]:\\*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" + + progdir=\"\$thisdir/$objdir\" + program='$output' + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/:*\$//'\` + + export $shlibpath_var +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + + # Export the path to the program. + PATH=\"\$progdir:\$PATH\" + export PATH + + exec \$program \${1+\"\$@\"} + + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit 1 + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" + chmod +x $output + fi + exit 0 + ;; + esac + + # See if we need to build an old-fashioned archive. + if test "$build_old_libs" = "yes"; then + # Transform .lo files to .o files. + oldobjs="$objs"`$echo "X$libobjs " | $Xsed -e 's/[^ ]*\.a //g' -e 's/\.lo /.o /g' -e 's/ $//g'` + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + eval cmds=\"$old_archive_from_new_cmds\" + else + eval cmds=\"$old_archive_cmds\" + fi + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Now create the libtool archive. + case "$output" in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.a" + + $show "creating $output" + + # Only create the output if not a dry run. + if test -z "$run"; then + $echo > $output "\ +# $output - a libtool library file +# Generated by ltmain.sh - GNU $PACKAGE $VERSION + +# The name that we can dlopen(3). +dlname='$dlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Directory that this library needs to be installed in: +libdir='$install_libdir'\ +" + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $objdir && $LN_S ../$output $output)" + $run eval "(cd $objdir && $LN_S ../$output $output)" || exit 1 + ;; + esac + exit 0 + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional /bin/sh argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL"; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir= + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case "$arg" in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit 1 + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test -n "$isdir"; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test $# -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + fi + case "$destdir" in + /* | [A-Za-z]:\\*) ;; + *) + for file in $files; do + case "$file" in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case "$file" in + *.a) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + library_names= + old_library= + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/" + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$realname $destdir/$realname" + $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? + test "X$dlname" = "X$realname" && dlname= + + if test $# -gt 0; then + # Delete the old symlinks. + rmcmd="$rm" + for linkname + do + rmcmd="$rmcmd $destdir/$linkname" + done + $show "$rmcmd" + $run $rmcmd + + # ... and create new ones. + for linkname + do + test "X$dlname" = "X$linkname" && dlname= + $show "(cd $destdir && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $LN_S $realname $linkname)" + done + fi + + if test -n "$dlname"; then + # Install the dynamically-loadable library. + $show "$install_prog $dir/$dlname $destdir/$dlname" + $run eval "$install_prog $dir/$dlname $destdir/$dlname" || exit $? + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + eval cmds=\"$postinstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + $show "$install_prog $file $destdir/$name" + $run eval "$install_prog $file $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case "$destfile" in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e 's/\.lo$/\.o/'` + ;; + *.o) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e 's/\.lo$/\.o/'` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit 0 + ;; + + *) + # Do a test to see if this is really a libtool program. + if (sed -e '4q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then + link_against_libtool_libs= + finalize_command= + + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Check the variables that should have been set. + if test -z "$link_against_libtool_libs" || test -z "$finalize_command"; then + $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 + exit 1 + fi + + finalize=yes + for lib in $link_against_libtool_libs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case "$lib" in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`" + if test -z "$libdir"; then + $echo "$modename: warning: \`$lib' contains no -rpath information" 1>&2 + elif test -f "$libfile"; then : + else + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + if test "$hardcode_action" = relink; then + if test "$finalize" = yes; then + $echo "$modename: warning: relinking \`$file' on behalf of your buggy system linker" 1>&2 + $show "$finalize_command" + if $run eval "$finalize_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + continue + fi + file="$objdir/$file"T + else + $echo "$modename: warning: cannot relink \`$file' on behalf of your buggy system linker" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + $show "$install_prog$stripme $file $dest" + $run eval "$install_prog\$stripme \$file \$dest" || exit $? + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + # Do each command in the postinstall commands. + eval cmds=\"$old_postinstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec $SHELL $0 --finish$current_libdirs + exit 1 + fi + + exit 0 + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + eval cmds=\"$finish_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" + fi + done + fi + + echo "------------------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + echo " $libdir" + done + echo + echo "To link against installed libraries in a given directory, LIBDIR," + echo "you must use the \`-LLIBDIR' flag during linking." + echo + echo " You will also need to do one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + echo " - use the \`$flag' linker flag" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + echo "See any operating system documentation about shared libraries for" + echo "more information, such as the ld(1) and ld.so(8) manual pages." + echo "------------------------------------------------------------------------------" + exit 0 + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit 1 + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test -f "$file"; then : + else + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + dir= + case "$file" in + *.la) + # Check to see that this really is a libtool archive. + if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit 1 + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case "$file" in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (sed -e '4q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + + # Now actually exec the command. + eval "exec \$cmd$args" + + $echo "$modename: cannot exec \$cmd$args" + exit 1 + else + # Display what would be done. + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + $echo "$cmd$args" + exit 0 + fi + ;; + + # libtool uninstall mode + uninstall) + modename="$modename: uninstall" + rm="$nonopt" + files= + + for arg + do + case "$arg" in + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + rmfiles="$file" + + case "$name" in + *.la) + # Possibly a libtool archive, so verify it. + if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $dir/$n" + test "X$n" = "X$dlname" && dlname= + done + test -n "$dlname" && rmfiles="$rmfiles $dir/$dlname" + test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" + + $show "$rm $rmfiles" + $run $rm $rmfiles + + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + eval cmds=\"$postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + eval cmds=\"$old_postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + + # FIXME: should reinstall the best remaining shared library. + fi + ;; + + *.lo) + if test "$build_old_libs" = yes; then + oldobj=`$echo "X$name" | $Xsed -e 's/\.lo$/\.o/'` + rmfiles="$rmfiles $dir/$oldobj" + fi + $show "$rm $rmfiles" + $run $rm $rmfiles + ;; + + *) + $show "$rm $rmfiles" + $run $rm $rmfiles + ;; + esac + done + exit 0 + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + ;; + esac + + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 +fi # test -z "$show_help" + +# We need to display help for each of the modes. +case "$mode" in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + +-n, --dry-run display commands without modifying any files + --features display configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --version print version information + +MODE must be one of the following: + + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE." + exit 0 + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to dld_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only +library objects (\`.lo' files) may be specified, and \`-rpath' is required. + +If OUTPUT-FILE ends in \`.a', then a standard library is created using \`ar' +and \`ranlib'. + +If OUTPUT-FILE ends in \`.lo' or \`.o', then a reloadable object file is +created, otherwise an executable program is created." + ;; + +uninstall) + $echo +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; +esac + +echo +$echo "Try \`$modename --help' for more information about other modes." + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/Build/source/extra/jpeg/makcjpeg.st b/Build/source/extra/jpeg/makcjpeg.st new file mode 100644 index 00000000000..fc72c898230 --- /dev/null +++ b/Build/source/extra/jpeg/makcjpeg.st @@ -0,0 +1,38 @@ +; Project file for Independent JPEG Group's software +; +; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. +; Thanks to Frank Moehle (Frank.Moehle@arbi.informatik.uni-oldenburg.de), +; Dr. B. Setzepfandt (bernd@gina.uni-muenster.de), +; and Guido Vollbeding (guivol@esc.de). +; +; To use this file, rename it to cjpeg.prj. +; If you are using Turbo C, change filenames beginning with "pc..." to "tc..." +; Read installation instructions before trying to make the program! +; +; +; * * * Output file * * * +cjpeg.ttp +; +; * * * COMPILER OPTIONS * * * +.C[-P] ; absolute calls +.C[-M] ; and no string merging, folks +.C[-w-cln] ; no "constant is long" warnings +.C[-w-par] ; no "parameter xxxx unused" +.C[-w-rch] ; no "unreachable code" +.C[-wsig] ; warn if significant digits may be lost += +; * * * * List of modules * * * * +pcstart.o +cjpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h,jversion.h) +cdjpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdswitch.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdppm.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdgif.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdtarga.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdbmp.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdrle.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +libjpeg.lib ; built by libjpeg.prj +pcfltlib.lib ; floating point library +; the float library can be omitted if you've turned off DCT_FLOAT_SUPPORTED +pcstdlib.lib ; standard library +pcextlib.lib ; extended library diff --git a/Build/source/extra/jpeg/makdjpeg.st b/Build/source/extra/jpeg/makdjpeg.st new file mode 100644 index 00000000000..32267263110 --- /dev/null +++ b/Build/source/extra/jpeg/makdjpeg.st @@ -0,0 +1,38 @@ +; Project file for Independent JPEG Group's software +; +; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. +; Thanks to Frank Moehle (Frank.Moehle@arbi.informatik.uni-oldenburg.de), +; Dr. B. Setzepfandt (bernd@gina.uni-muenster.de), +; and Guido Vollbeding (guivol@esc.de). +; +; To use this file, rename it to djpeg.prj. +; If you are using Turbo C, change filenames beginning with "pc..." to "tc..." +; Read installation instructions before trying to make the program! +; +; +; * * * Output file * * * +djpeg.ttp +; +; * * * COMPILER OPTIONS * * * +.C[-P] ; absolute calls +.C[-M] ; and no string merging, folks +.C[-w-cln] ; no "constant is long" warnings +.C[-w-par] ; no "parameter xxxx unused" +.C[-w-rch] ; no "unreachable code" +.C[-wsig] ; warn if significant digits may be lost += +; * * * * List of modules * * * * +pcstart.o +djpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h,jversion.h) +cdjpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdcolmap.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +wrppm.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +wrgif.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +wrtarga.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +wrbmp.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +wrrle.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +libjpeg.lib ; built by libjpeg.prj +pcfltlib.lib ; floating point library +; the float library can be omitted if you've turned off DCT_FLOAT_SUPPORTED +pcstdlib.lib ; standard library +pcextlib.lib ; extended library diff --git a/Build/source/extra/jpeg/makeapps.ds b/Build/source/extra/jpeg/makeapps.ds new file mode 100644 index 00000000000..bedd038a395 --- /dev/null +++ b/Build/source/extra/jpeg/makeapps.ds @@ -0,0 +1,828 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +!IF "$(CFG)" == "" +CFG=cjpeg - Win32 +!MESSAGE No configuration specified. Defaulting to cjpeg - Win32. +!ENDIF + +!IF "$(CFG)" != "cjpeg - Win32" && "$(CFG)" != "djpeg - Win32" &&\ + "$(CFG)" != "jpegtran - Win32" && "$(CFG)" != "rdjpgcom - Win32" &&\ + "$(CFG)" != "wrjpgcom - Win32" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "apps.mak" CFG="cjpeg - Win32" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "cjpeg - Win32" (based on "Win32 (x86) Console Application") +!MESSAGE "djpeg - Win32" (based on "Win32 (x86) Console Application") +!MESSAGE "jpegtran - Win32" (based on "Win32 (x86) Console Application") +!MESSAGE "rdjpgcom - Win32" (based on "Win32 (x86) Console Application") +!MESSAGE "wrjpgcom - Win32" (based on "Win32 (x86) Console Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "cjpeg - Win32" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "cjpeg - Win32" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "cjpeg\Release" +# PROP BASE Intermediate_Dir "cjpeg\Release" +# PROP BASE Target_Dir "cjpeg" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "cjpeg\Release" +# PROP Intermediate_Dir "cjpeg\Release" +# PROP Target_Dir "cjpeg" +OUTDIR=.\cjpeg\Release +INTDIR=.\cjpeg\Release + +ALL : "$(OUTDIR)\cjpeg.exe" + +CLEAN : + -@erase "$(INTDIR)\cjpeg.obj" + -@erase "$(INTDIR)\rdppm.obj" + -@erase "$(INTDIR)\rdgif.obj" + -@erase "$(INTDIR)\rdtarga.obj" + -@erase "$(INTDIR)\rdrle.obj" + -@erase "$(INTDIR)\rdbmp.obj" + -@erase "$(INTDIR)\rdswitch.obj" + -@erase "$(INTDIR)\cdjpeg.obj" + -@erase "$(OUTDIR)\cjpeg.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"\ + /Fp"$(INTDIR)/cjpeg.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\cjpeg\Release/ +CPP_SBRS=.\. +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/cjpeg.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib\ + comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\ + odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no\ + /pdb:"$(OUTDIR)/cjpeg.pdb" /machine:I386 /out:"$(OUTDIR)/cjpeg.exe" +LINK32_OBJS= \ + "$(INTDIR)\cjpeg.obj" \ + "$(INTDIR)\rdppm.obj" \ + "$(INTDIR)\rdgif.obj" \ + "$(INTDIR)\rdtarga.obj" \ + "$(INTDIR)\rdrle.obj" \ + "$(INTDIR)\rdbmp.obj" \ + "$(INTDIR)\rdswitch.obj" \ + "$(INTDIR)\cdjpeg.obj" \ + + +"$(OUTDIR)\cjpeg.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "djpeg - Win32" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "djpeg\Release" +# PROP BASE Intermediate_Dir "djpeg\Release" +# PROP BASE Target_Dir "djpeg" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "djpeg\Release" +# PROP Intermediate_Dir "djpeg\Release" +# PROP Target_Dir "djpeg" +OUTDIR=.\djpeg\Release +INTDIR=.\djpeg\Release + +ALL : "$(OUTDIR)\djpeg.exe" + +CLEAN : + -@erase "$(INTDIR)\djpeg.obj" + -@erase "$(INTDIR)\wrppm.obj" + -@erase "$(INTDIR)\wrgif.obj" + -@erase "$(INTDIR)\wrtarga.obj" + -@erase "$(INTDIR)\wrrle.obj" + -@erase "$(INTDIR)\wrbmp.obj" + -@erase "$(INTDIR)\rdcolmap.obj" + -@erase "$(INTDIR)\cdjpeg.obj" + -@erase "$(OUTDIR)\djpeg.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"\ + /Fp"$(INTDIR)/djpeg.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\djpeg\Release/ +CPP_SBRS=.\. +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/djpeg.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib\ + comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\ + odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no\ + /pdb:"$(OUTDIR)/djpeg.pdb" /machine:I386 /out:"$(OUTDIR)/djpeg.exe" +LINK32_OBJS= \ + "$(INTDIR)\djpeg.obj" \ + "$(INTDIR)\wrppm.obj" \ + "$(INTDIR)\wrgif.obj" \ + "$(INTDIR)\wrtarga.obj" \ + "$(INTDIR)\wrrle.obj" \ + "$(INTDIR)\wrbmp.obj" \ + "$(INTDIR)\rdcolmap.obj" \ + "$(INTDIR)\cdjpeg.obj" \ + + +"$(OUTDIR)\djpeg.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "jpegtran - Win32" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "jpegtran\Release" +# PROP BASE Intermediate_Dir "jpegtran\Release" +# PROP BASE Target_Dir "jpegtran" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "jpegtran\Release" +# PROP Intermediate_Dir "jpegtran\Release" +# PROP Target_Dir "jpegtran" +OUTDIR=.\jpegtran\Release +INTDIR=.\jpegtran\Release + +ALL : "$(OUTDIR)\jpegtran.exe" + +CLEAN : + -@erase "$(INTDIR)\jpegtran.obj" + -@erase "$(INTDIR)\rdswitch.obj" + -@erase "$(INTDIR)\cdjpeg.obj" + -@erase "$(INTDIR)\transupp.obj" + -@erase "$(OUTDIR)\jpegtran.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"\ + /Fp"$(INTDIR)/jpegtran.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\jpegtran\Release/ +CPP_SBRS=.\. +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/jpegtran.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib\ + comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\ + odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no\ + /pdb:"$(OUTDIR)/jpegtran.pdb" /machine:I386 /out:"$(OUTDIR)/jpegtran.exe" +LINK32_OBJS= \ + "$(INTDIR)\jpegtran.obj" \ + "$(INTDIR)\rdswitch.obj" \ + "$(INTDIR)\cdjpeg.obj" \ + "$(INTDIR)\transupp.obj" \ + + +"$(OUTDIR)\jpegtran.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "rdjpgcom - Win32" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "rdjpgcom\Release" +# PROP BASE Intermediate_Dir "rdjpgcom\Release" +# PROP BASE Target_Dir "rdjpgcom" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "rdjpgcom\Release" +# PROP Intermediate_Dir "rdjpgcom\Release" +# PROP Target_Dir "rdjpgcom" +OUTDIR=.\rdjpgcom\Release +INTDIR=.\rdjpgcom\Release + +ALL : "$(OUTDIR)\rdjpgcom.exe" + +CLEAN : + -@erase "$(INTDIR)\rdjpgcom.obj" + -@erase "$(OUTDIR)\rdjpgcom.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"\ + /Fp"$(INTDIR)/rdjpgcom.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\rdjpgcom\Release/ +CPP_SBRS=.\. +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/rdjpgcom.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib\ + comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\ + odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no\ + /pdb:"$(OUTDIR)/rdjpgcom.pdb" /machine:I386 /out:"$(OUTDIR)/rdjpgcom.exe" +LINK32_OBJS= \ + "$(INTDIR)\rdjpgcom.obj" + +"$(OUTDIR)\rdjpgcom.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "wrjpgcom - Win32" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "wrjpgcom\Release" +# PROP BASE Intermediate_Dir "wrjpgcom\Release" +# PROP BASE Target_Dir "wrjpgcom" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "wrjpgcom\Release" +# PROP Intermediate_Dir "wrjpgcom\Release" +# PROP Target_Dir "wrjpgcom" +OUTDIR=.\wrjpgcom\Release +INTDIR=.\wrjpgcom\Release + +ALL : "$(OUTDIR)\wrjpgcom.exe" + +CLEAN : + -@erase "$(INTDIR)\wrjpgcom.obj" + -@erase "$(OUTDIR)\wrjpgcom.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"\ + /Fp"$(INTDIR)/wrjpgcom.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\wrjpgcom\Release/ +CPP_SBRS=.\. +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/wrjpgcom.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib\ + comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\ + odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no\ + /pdb:"$(OUTDIR)/wrjpgcom.pdb" /machine:I386 /out:"$(OUTDIR)/wrjpgcom.exe" +LINK32_OBJS= \ + "$(INTDIR)\wrjpgcom.obj" + +"$(OUTDIR)\wrjpgcom.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "cjpeg - Win32" + +!IF "$(CFG)" == "cjpeg - Win32" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE="cjpeg.c" +DEP_CPP_CJPEG=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + "jversion.h"\ + + +"$(INTDIR)\cjpeg.obj" : $(SOURCE) $(DEP_CPP_CJPEG) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="cdjpeg.c" +DEP_CPP_CDJPE=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\cdjpeg.obj" : $(SOURCE) $(DEP_CPP_CDJPE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="rdswitch.c" +DEP_CPP_RDSWI=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\rdswitch.obj" : $(SOURCE) $(DEP_CPP_RDSWI) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="rdppm.c" +DEP_CPP_RDPPM=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\rdppm.obj" : $(SOURCE) $(DEP_CPP_RDPPM) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="rdgif.c" +DEP_CPP_RDGIF=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\rdgif.obj" : $(SOURCE) $(DEP_CPP_RDGIF) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="rdtarga.c" +DEP_CPP_RDTAR=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\rdtarga.obj" : $(SOURCE) $(DEP_CPP_RDTAR) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="rdbmp.c" +DEP_CPP_RDBMP=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\rdbmp.obj" : $(SOURCE) $(DEP_CPP_RDBMP) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="rdrle.c" +DEP_CPP_RDRLE=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\rdrle.obj" : $(SOURCE) $(DEP_CPP_RDRLE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +# End Target +################################################################################ +# Begin Target + +# Name "djpeg - Win32" + +!IF "$(CFG)" == "djpeg - Win32" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE="djpeg.c" +DEP_CPP_DJPEG=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + "jversion.h"\ + + +"$(INTDIR)\djpeg.obj" : $(SOURCE) $(DEP_CPP_DJPEG) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="cdjpeg.c" +DEP_CPP_CDJPE=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\cdjpeg.obj" : $(SOURCE) $(DEP_CPP_CDJPE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="rdcolmap.c" +DEP_CPP_RDCOL=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\rdcolmap.obj" : $(SOURCE) $(DEP_CPP_RDCOL) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="wrppm.c" +DEP_CPP_WRPPM=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\wrppm.obj" : $(SOURCE) $(DEP_CPP_WRPPM) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="wrgif.c" +DEP_CPP_WRGIF=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\wrgif.obj" : $(SOURCE) $(DEP_CPP_WRGIF) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="wrtarga.c" +DEP_CPP_WRTAR=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\wrtarga.obj" : $(SOURCE) $(DEP_CPP_WRTAR) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="wrbmp.c" +DEP_CPP_WRBMP=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\wrbmp.obj" : $(SOURCE) $(DEP_CPP_WRBMP) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="wrrle.c" +DEP_CPP_WRRLE=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\wrrle.obj" : $(SOURCE) $(DEP_CPP_WRRLE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +# End Target +################################################################################ +# Begin Target + +# Name "jpegtran - Win32" + +!IF "$(CFG)" == "jpegtran - Win32" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE="jpegtran.c" +DEP_CPP_JPEGT=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + "transupp.h"\ + "jversion.h"\ + + +"$(INTDIR)\jpegtran.obj" : $(SOURCE) $(DEP_CPP_JPEGT) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="cdjpeg.c" +DEP_CPP_CDJPE=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\cdjpeg.obj" : $(SOURCE) $(DEP_CPP_CDJPE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="rdswitch.c" +DEP_CPP_RDSWI=\ + "cdjpeg.h"\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + "cderror.h"\ + + +"$(INTDIR)\rdswitch.obj" : $(SOURCE) $(DEP_CPP_RDSWI) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="transupp.c" +DEP_CPP_TRANS=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "transupp.h"\ + + +"$(INTDIR)\transupp.obj" : $(SOURCE) $(DEP_CPP_TRANS) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +# End Target +################################################################################ +# Begin Target + +# Name "rdjpgcom - Win32" + +!IF "$(CFG)" == "rdjpgcom - Win32" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE="rdjpgcom.c" +DEP_CPP_RDJPG=\ + "jinclude.h"\ + "jconfig.h"\ + + +"$(INTDIR)\rdjpgcom.obj" : $(SOURCE) $(DEP_CPP_RDJPG) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +# End Target +################################################################################ +# Begin Target + +# Name "wrjpgcom - Win32" + +!IF "$(CFG)" == "wrjpgcom - Win32" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE="wrjpgcom.c" +DEP_CPP_WRJPG=\ + "jinclude.h"\ + "jconfig.h"\ + + +"$(INTDIR)\wrjpgcom.obj" : $(SOURCE) $(DEP_CPP_WRJPG) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +# End Target +# End Project +################################################################################ + diff --git a/Build/source/extra/jpeg/makefile.ansi b/Build/source/extra/jpeg/makefile.ansi new file mode 100644 index 00000000000..82919135937 --- /dev/null +++ b/Build/source/extra/jpeg/makefile.ansi @@ -0,0 +1,214 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is suitable for Unix-like systems with ANSI-capable compilers. +# If you have a non-ANSI compiler, makefile.unix is a better starting point. + +# Read installation instructions before saying "make" !! + +# The name of your C compiler: +CC= cc + +# You may need to adjust these cc options: +CFLAGS= -O +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Link-time cc options: +LDFLAGS= + +# To link any special libraries, add the necessary -l commands here. +LDLIBS= + +# Put here the object file name for the correct system-dependent memory +# manager file. For Unix this is usually jmemnobs.o, but you may want +# to use jmemansi.o or jmemname.o if you have limited swap space. +SYSDEPMEM= jmemnobs.o + +# miscellaneous OS-dependent stuff +# linker +LN= $(CC) +# file deletion command +RM= rm -f +# library (.a) file creation command +AR= ar rc +# second step in .a creation (use "touch" if not needed) +AR2= ranlib + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ + jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ + jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ + jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ + jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ + jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ + jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ + jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ + coderules.doc filelist.doc change.log +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ + makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ + maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ + makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh +OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.o jcapistd.o jctrans.o jcparam.o jdatadst.o jcinit.o \ + jcmaster.o jcmarker.o jcmainct.o jcprepct.o jccoefct.o jccolor.o \ + jcsample.o jchuff.o jcphuff.o jcdctmgr.o jfdctfst.o jfdctflt.o \ + jfdctint.o +# decompression library object files +DLIBOBJECTS= jdapimin.o jdapistd.o jdtrans.o jdatasrc.o jdmaster.o \ + jdinput.o jdmarker.o jdhuff.o jdphuff.o jdmainct.o jdcoefct.o \ + jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ + jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o +# These objectfiles are included in libjpeg.a +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ + cdjpeg.o +DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ + cdjpeg.o +TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o + + +all: libjpeg.a cjpeg djpeg jpegtran rdjpgcom wrjpgcom + +libjpeg.a: $(LIBOBJECTS) + $(RM) libjpeg.a + $(AR) libjpeg.a $(LIBOBJECTS) + $(AR2) libjpeg.a + +cjpeg: $(COBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.a $(LDLIBS) + +djpeg: $(DOBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.a $(LDLIBS) + +jpegtran: $(TROBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o jpegtran $(TROBJECTS) libjpeg.a $(LDLIBS) + +rdjpgcom: rdjpgcom.o + $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.o $(LDLIBS) + +wrjpgcom: wrjpgcom.o + $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.o $(LDLIBS) + +jconfig.h: jconfig.doc + echo You must prepare a system-dependent jconfig.h file. + echo Please read the installation directions in install.doc. + exit 1 + +clean: + $(RM) *.o cjpeg djpeg jpegtran libjpeg.a rdjpgcom wrjpgcom + $(RM) core testout* + +test: cjpeg djpeg jpegtran + $(RM) testout* + ./djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + ./cjpeg -dct int -outfile testout.jpg testimg.ppm + ./djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + ./jpegtran -outfile testoutt.jpg testprog.jpg + cmp testimg.ppm testout.ppm + cmp testimg.bmp testout.bmp + cmp testimg.jpg testout.jpg + cmp testimg.ppm testoutp.ppm + cmp testimgp.jpg testoutp.jpg + cmp testorig.jpg testoutt.jpg + + +jcapimin.o: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.o: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcinit.o: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcphuff.o: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.o: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.o: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.o: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdinput.o: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdphuff.o: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.o: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctred.o: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.o: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.o: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.o: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.o: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.o: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.o: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.o: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.o: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.o: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.o: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.o: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.o: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.o: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.o: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.o: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.o: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.o: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.o: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.o: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.o: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.o: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.o: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.o: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/Build/source/extra/jpeg/makefile.bcc b/Build/source/extra/jpeg/makefile.bcc new file mode 100644 index 00000000000..a1cfcde6697 --- /dev/null +++ b/Build/source/extra/jpeg/makefile.bcc @@ -0,0 +1,285 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is suitable for Borland C on MS-DOS or OS/2. +# It works with Borland C++ for DOS, revision 3.0 or later, +# and has been tested with Borland C++ for OS/2. +# Watch out for optimization bugs in the OS/2 compilers --- see notes below! +# Thanks to Tom Wright and Ge' Weijers (original DOS) and +# Ken Porter (OS/2) for this file. + +# Read installation instructions before saying "make" !! + +# Are we under DOS or OS/2? +!if !$d(DOS) && !$d(OS2) +!if $d(__OS2__) +OS2=1 +!else +DOS=1 +!endif +!endif + +# The name of your C compiler: +CC= bcc + +# You may need to adjust these cc options: +!if $d(DOS) +CFLAGS= -O2 -mm -w-par -w-stu -w-ccc -w-rch +!else +CFLAGS= -O1 -w-par -w-stu -w-ccc -w-rch +!endif +# -O2 enables full code optimization (for pre-3.0 Borland C++, use -O -G -Z). +# -O2 is buggy in Borland OS/2 C++ revision 2.0, so use -O1 there for now. +# If you have Borland OS/2 C++ revision 1.0, use -O or no optimization at all. +# -mm selects medium memory model (near data, far code pointers; DOS only!) +# -w-par suppresses warnings about unused function parameters +# -w-stu suppresses warnings about incomplete structures +# -w-ccc suppresses warnings about compile-time-constant conditions +# -w-rch suppresses warnings about unreachable code +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Link-time cc options: +!if $d(DOS) +LDFLAGS= -mm +# memory model option here must match CFLAGS! +!else +LDFLAGS= +# -lai full-screen app +# -lc case-significant link +!endif + +# Put here the object file name for the correct system-dependent memory +# manager file. +# For DOS, we recommend jmemdos.c and jmemdosa.asm. +# For OS/2, we recommend jmemnobs.c (flat memory!) +# SYSDEPMEMLIB must list the same files with "+" signs for the librarian. +!if $d(DOS) +SYSDEPMEM= jmemdos.obj jmemdosa.obj +SYSDEPMEMLIB= +jmemdos.obj +jmemdosa.obj +!else +SYSDEPMEM= jmemnobs.obj +SYSDEPMEMLIB= +jmemnobs.obj +!endif + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ + jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ + jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ + jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ + jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ + jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ + jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ + jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ + coderules.doc filelist.doc change.log +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ + makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ + maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ + makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh +OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.obj jcapistd.obj jctrans.obj jcparam.obj jdatadst.obj \ + jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj jcprepct.obj \ + jccoefct.obj jccolor.obj jcsample.obj jchuff.obj jcphuff.obj \ + jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj +# decompression library object files +DLIBOBJECTS= jdapimin.obj jdapistd.obj jdtrans.obj jdatasrc.obj \ + jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdphuff.obj \ + jdmainct.obj jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj \ + jidctflt.obj jidctint.obj jidctred.obj jdsample.obj jdcolor.obj \ + jquant1.obj jquant2.obj jdmerge.obj +# These objectfiles are included in libjpeg.lib +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj \ + rdswitch.obj cdjpeg.obj +DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ + rdcolmap.obj cdjpeg.obj +TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj + + +all: libjpeg.lib cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe + +libjpeg.lib: $(LIBOBJECTS) + - del libjpeg.lib + tlib libjpeg.lib /E /C @&&| ++jcapimin.obj +jcapistd.obj +jctrans.obj +jcparam.obj +jdatadst.obj & ++jcinit.obj +jcmaster.obj +jcmarker.obj +jcmainct.obj +jcprepct.obj & ++jccoefct.obj +jccolor.obj +jcsample.obj +jchuff.obj +jcphuff.obj & ++jcdctmgr.obj +jfdctfst.obj +jfdctflt.obj +jfdctint.obj +jdapimin.obj & ++jdapistd.obj +jdtrans.obj +jdatasrc.obj +jdmaster.obj +jdinput.obj & ++jdmarker.obj +jdhuff.obj +jdphuff.obj +jdmainct.obj +jdcoefct.obj & ++jdpostct.obj +jddctmgr.obj +jidctfst.obj +jidctflt.obj +jidctint.obj & ++jidctred.obj +jdsample.obj +jdcolor.obj +jquant1.obj +jquant2.obj & ++jdmerge.obj +jcomapi.obj +jutils.obj +jerror.obj +jmemmgr.obj & +$(SYSDEPMEMLIB) +| + +cjpeg.exe: $(COBJECTS) libjpeg.lib + $(CC) $(LDFLAGS) -ecjpeg.exe $(COBJECTS) libjpeg.lib + +djpeg.exe: $(DOBJECTS) libjpeg.lib + $(CC) $(LDFLAGS) -edjpeg.exe $(DOBJECTS) libjpeg.lib + +jpegtran.exe: $(TROBJECTS) libjpeg.lib + $(CC) $(LDFLAGS) -ejpegtran.exe $(TROBJECTS) libjpeg.lib + +rdjpgcom.exe: rdjpgcom.c +!if $d(DOS) + $(CC) -ms -O rdjpgcom.c +!else + $(CC) $(CFLAGS) rdjpgcom.c +!endif + +# On DOS, wrjpgcom needs large model so it can malloc a 64K chunk +wrjpgcom.exe: wrjpgcom.c +!if $d(DOS) + $(CC) -ml -O wrjpgcom.c +!else + $(CC) $(CFLAGS) wrjpgcom.c +!endif + +# This "{}" syntax allows Borland Make to "batch" source files. +# In this way, each run of the compiler can build many modules. +.c.obj: + $(CC) $(CFLAGS) -c{ $<} + +jconfig.h: jconfig.doc + echo You must prepare a system-dependent jconfig.h file. + echo Please read the installation directions in install.doc. + exit 1 + +clean: + - del *.obj + - del libjpeg.lib + - del cjpeg.exe + - del djpeg.exe + - del jpegtran.exe + - del rdjpgcom.exe + - del wrjpgcom.exe + - del testout*.* + +test: cjpeg.exe djpeg.exe jpegtran.exe + - del testout*.* + djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + cjpeg -dct int -outfile testout.jpg testimg.ppm + djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + jpegtran -outfile testoutt.jpg testprog.jpg +!if $d(DOS) + fc /b testimg.ppm testout.ppm + fc /b testimg.bmp testout.bmp + fc /b testimg.jpg testout.jpg + fc /b testimg.ppm testoutp.ppm + fc /b testimgp.jpg testoutp.jpg + fc /b testorig.jpg testoutt.jpg +!else + echo n > n.tmp + comp testimg.ppm testout.ppm < n.tmp + comp testimg.bmp testout.bmp < n.tmp + comp testimg.jpg testout.jpg < n.tmp + comp testimg.ppm testoutp.ppm < n.tmp + comp testimgp.jpg testoutp.jpg < n.tmp + comp testorig.jpg testoutt.jpg < n.tmp + del n.tmp +!endif + + +jcapimin.obj: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.obj: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.obj: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.obj: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.obj: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.obj: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcinit.obj: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.obj: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.obj: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.obj: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.obj: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.obj: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcphuff.obj: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcprepct.obj: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.obj: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.obj: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.obj: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.obj: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.obj: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.obj: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.obj: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.obj: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.obj: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.obj: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdinput.obj: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.obj: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.obj: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.obj: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.obj: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdphuff.obj: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdpostct.obj: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.obj: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.obj: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.obj: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.obj: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.obj: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.obj: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.obj: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.obj: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.obj: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctred.obj: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.obj: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.obj: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.obj: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.obj: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.obj: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.obj: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.obj: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.obj: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.obj: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.obj: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.obj: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.obj: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.obj: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.obj: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.obj: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.obj: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.obj: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.obj: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.obj: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.obj: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.obj: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.obj: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.obj: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.obj: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.obj: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.obj: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.obj: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.obj: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +jmemdosa.obj: jmemdosa.asm + tasm /mx jmemdosa.asm diff --git a/Build/source/extra/jpeg/makefile.cfg b/Build/source/extra/jpeg/makefile.cfg new file mode 100644 index 00000000000..f25e42e3e66 --- /dev/null +++ b/Build/source/extra/jpeg/makefile.cfg @@ -0,0 +1,319 @@ +# Makefile for Independent JPEG Group's software + +# makefile.cfg is edited by configure to produce a custom Makefile. + +# Read installation instructions before saying "make" !! + +# For compiling with source and object files in different directories. +srcdir = @srcdir@ +VPATH = @srcdir@ + +# Where to install the programs and man pages. +prefix = @prefix@ +exec_prefix = @exec_prefix@ +bindir = $(exec_prefix)/bin +libdir = $(exec_prefix)/lib +includedir = $(prefix)/include +binprefix = +manprefix = +manext = 1 +mandir = $(prefix)/man/man$(manext) + +# The name of your C compiler: +CC= @CC@ + +# You may need to adjust these cc options: +CFLAGS= @CFLAGS@ @CPPFLAGS@ @INCLUDEFLAGS@ +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. +# However, any special defines for ansi2knr.c may be included here: +ANSI2KNRFLAGS= @ANSI2KNRFLAGS@ + +# Link-time cc options: +LDFLAGS= @LDFLAGS@ + +# To link any special libraries, add the necessary -l commands here. +LDLIBS= @LIBS@ + +# If using GNU libtool, LIBTOOL references it; if not, LIBTOOL is empty. +LIBTOOL = @LIBTOOL@ +# $(O) expands to "lo" if using libtool, plain "o" if not. +# Similarly, $(A) expands to "la" or "a". +O = @O@ +A = @A@ + +# Library version ID; libtool uses this for the shared library version number. +# Note: we suggest this match the macro of the same name in jpeglib.h. +JPEG_LIB_VERSION = @JPEG_LIB_VERSION@ + +# Put here the object file name for the correct system-dependent memory +# manager file. For Unix this is usually jmemnobs.o, but you may want +# to use jmemansi.o or jmemname.o if you have limited swap space. +SYSDEPMEM= @MEMORYMGR@ + +# miscellaneous OS-dependent stuff +SHELL= /bin/sh +# linker +LN= @LN@ +# file deletion command +RM= rm -f +# directory creation command +MKDIR= mkdir +# library (.a) file creation command +AR= ar rc +# second step in .a creation (use "touch" if not needed) +AR2= @RANLIB@ +# installation program +INSTALL= @INSTALL@ +INSTALL_PROGRAM= @INSTALL_PROGRAM@ +INSTALL_LIB= @INSTALL_LIB@ +INSTALL_DATA= @INSTALL_DATA@ + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ + jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ + jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ + jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ + jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ + jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ + jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ + jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ + coderules.doc filelist.doc change.log +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ + makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ + maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ + makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh +OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jcomapi.$(O) jutils.$(O) jerror.$(O) jmemmgr.$(O) $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.$(O) jcapistd.$(O) jctrans.$(O) jcparam.$(O) \ + jdatadst.$(O) jcinit.$(O) jcmaster.$(O) jcmarker.$(O) jcmainct.$(O) \ + jcprepct.$(O) jccoefct.$(O) jccolor.$(O) jcsample.$(O) jchuff.$(O) \ + jcphuff.$(O) jcdctmgr.$(O) jfdctfst.$(O) jfdctflt.$(O) \ + jfdctint.$(O) +# decompression library object files +DLIBOBJECTS= jdapimin.$(O) jdapistd.$(O) jdtrans.$(O) jdatasrc.$(O) \ + jdmaster.$(O) jdinput.$(O) jdmarker.$(O) jdhuff.$(O) jdphuff.$(O) \ + jdmainct.$(O) jdcoefct.$(O) jdpostct.$(O) jddctmgr.$(O) \ + jidctfst.$(O) jidctflt.$(O) jidctint.$(O) jidctred.$(O) \ + jdsample.$(O) jdcolor.$(O) jquant1.$(O) jquant2.$(O) jdmerge.$(O) +# These objectfiles are included in libjpeg.a +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.$(O) rdppm.$(O) rdgif.$(O) rdtarga.$(O) rdrle.$(O) \ + rdbmp.$(O) rdswitch.$(O) cdjpeg.$(O) +DOBJECTS= djpeg.$(O) wrppm.$(O) wrgif.$(O) wrtarga.$(O) wrrle.$(O) \ + wrbmp.$(O) rdcolmap.$(O) cdjpeg.$(O) +TROBJECTS= jpegtran.$(O) rdswitch.$(O) cdjpeg.$(O) transupp.$(O) + + +all: @A2K_DEPS@ libjpeg.$(A) cjpeg djpeg jpegtran rdjpgcom wrjpgcom + +# Special compilation rules to support ansi2knr and libtool. +.SUFFIXES: .lo .la + +# How to compile with libtool. +@COM_LT@.c.lo: +@COM_LT@ $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c $(srcdir)/$*.c + +# How to use ansi2knr, when not using libtool. +@COM_A2K@.c.o: +@COM_A2K@ ./ansi2knr $(srcdir)/$*.c knr/$*.c +@COM_A2K@ $(CC) $(CFLAGS) -c knr/$*.c +@COM_A2K@ $(RM) knr/$*.c + +# How to use ansi2knr AND libtool. +@COM_A2K@.c.lo: +@COM_A2K@ ./ansi2knr $(srcdir)/$*.c knr/$*.c +@COM_A2K@ $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c knr/$*.c +@COM_A2K@ $(RM) knr/$*.c + +ansi2knr: ansi2knr.c + $(CC) $(CFLAGS) $(ANSI2KNRFLAGS) -o ansi2knr $(srcdir)/ansi2knr.c + $(MKDIR) knr + +# the library: + +# without libtool: +libjpeg.a: @A2K_DEPS@ $(LIBOBJECTS) + $(RM) libjpeg.a + $(AR) libjpeg.a $(LIBOBJECTS) + $(AR2) libjpeg.a + +# with libtool: +libjpeg.la: @A2K_DEPS@ $(LIBOBJECTS) + $(LIBTOOL) --mode=link $(CC) -o libjpeg.la $(LIBOBJECTS) \ + -rpath $(libdir) -version-info $(JPEG_LIB_VERSION) + +# sample programs: + +cjpeg: $(COBJECTS) libjpeg.$(A) + $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.$(A) $(LDLIBS) + +djpeg: $(DOBJECTS) libjpeg.$(A) + $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.$(A) $(LDLIBS) + +jpegtran: $(TROBJECTS) libjpeg.$(A) + $(LN) $(LDFLAGS) -o jpegtran $(TROBJECTS) libjpeg.$(A) $(LDLIBS) + +rdjpgcom: rdjpgcom.$(O) + $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.$(O) $(LDLIBS) + +wrjpgcom: wrjpgcom.$(O) + $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.$(O) $(LDLIBS) + +# Installation rules: + +install: cjpeg djpeg jpegtran rdjpgcom wrjpgcom @FORCE_INSTALL_LIB@ + $(INSTALL_PROGRAM) cjpeg $(bindir)/$(binprefix)cjpeg + $(INSTALL_PROGRAM) djpeg $(bindir)/$(binprefix)djpeg + $(INSTALL_PROGRAM) jpegtran $(bindir)/$(binprefix)jpegtran + $(INSTALL_PROGRAM) rdjpgcom $(bindir)/$(binprefix)rdjpgcom + $(INSTALL_PROGRAM) wrjpgcom $(bindir)/$(binprefix)wrjpgcom + $(INSTALL_DATA) $(srcdir)/cjpeg.1 $(mandir)/$(manprefix)cjpeg.$(manext) + $(INSTALL_DATA) $(srcdir)/djpeg.1 $(mandir)/$(manprefix)djpeg.$(manext) + $(INSTALL_DATA) $(srcdir)/jpegtran.1 $(mandir)/$(manprefix)jpegtran.$(manext) + $(INSTALL_DATA) $(srcdir)/rdjpgcom.1 $(mandir)/$(manprefix)rdjpgcom.$(manext) + $(INSTALL_DATA) $(srcdir)/wrjpgcom.1 $(mandir)/$(manprefix)wrjpgcom.$(manext) + +install-lib: libjpeg.$(A) install-headers + $(INSTALL_LIB) libjpeg.$(A) $(libdir)/$(binprefix)libjpeg.$(A) + +install-headers: jconfig.h + $(INSTALL_DATA) jconfig.h $(includedir)/jconfig.h + $(INSTALL_DATA) $(srcdir)/jpeglib.h $(includedir)/jpeglib.h + $(INSTALL_DATA) $(srcdir)/jmorecfg.h $(includedir)/jmorecfg.h + $(INSTALL_DATA) $(srcdir)/jerror.h $(includedir)/jerror.h + +clean: + $(RM) *.o *.lo libjpeg.a libjpeg.la + $(RM) cjpeg djpeg jpegtran rdjpgcom wrjpgcom + $(RM) ansi2knr core testout* config.log config.status + $(RM) -r knr .libs _libs + +distclean: clean + $(RM) Makefile jconfig.h libtool config.cache + +test: cjpeg djpeg jpegtran + $(RM) testout* + ./djpeg -dct int -ppm -outfile testout.ppm $(srcdir)/testorig.jpg + ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp $(srcdir)/testorig.jpg + ./cjpeg -dct int -outfile testout.jpg $(srcdir)/testimg.ppm + ./djpeg -dct int -ppm -outfile testoutp.ppm $(srcdir)/testprog.jpg + ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg $(srcdir)/testimg.ppm + ./jpegtran -outfile testoutt.jpg $(srcdir)/testprog.jpg + cmp $(srcdir)/testimg.ppm testout.ppm + cmp $(srcdir)/testimg.bmp testout.bmp + cmp $(srcdir)/testimg.jpg testout.jpg + cmp $(srcdir)/testimg.ppm testoutp.ppm + cmp $(srcdir)/testimgp.jpg testoutp.jpg + cmp $(srcdir)/testorig.jpg testoutt.jpg + +check: test + +# Mistake catcher: + +jconfig.h: jconfig.doc + echo You must prepare a system-dependent jconfig.h file. + echo Please read the installation directions in install.doc. + exit 1 + +# GNU Make likes to know which target names are not really files to be made: +.PHONY: all install install-lib install-headers clean distclean test check + + +jcapimin.$(O): jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.$(O): jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.$(O): jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.$(O): jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.$(O): jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.$(O): jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcinit.$(O): jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.$(O): jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.$(O): jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.$(O): jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.$(O): jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.$(O): jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcphuff.$(O): jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcprepct.$(O): jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.$(O): jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.$(O): jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.$(O): jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.$(O): jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.$(O): jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.$(O): jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.$(O): jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.$(O): jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.$(O): jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.$(O): jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdinput.$(O): jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.$(O): jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.$(O): jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.$(O): jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.$(O): jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdphuff.$(O): jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdpostct.$(O): jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.$(O): jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.$(O): jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.$(O): jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.$(O): jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.$(O): jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.$(O): jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.$(O): jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.$(O): jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.$(O): jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctred.$(O): jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.$(O): jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.$(O): jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.$(O): jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.$(O): jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.$(O): jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.$(O): jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.$(O): jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.$(O): jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.$(O): jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.$(O): cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.$(O): djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.$(O): jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.$(O): rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.$(O): wrjpgcom.c jinclude.h jconfig.h +cdjpeg.$(O): cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.$(O): rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.$(O): rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.$(O): transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.$(O): rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.$(O): wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.$(O): rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.$(O): wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.$(O): rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.$(O): wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.$(O): rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.$(O): wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.$(O): rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.$(O): wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/Build/source/extra/jpeg/makefile.dj b/Build/source/extra/jpeg/makefile.dj new file mode 100644 index 00000000000..f766d25e38a --- /dev/null +++ b/Build/source/extra/jpeg/makefile.dj @@ -0,0 +1,220 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is for DJGPP (Delorie's GNU C port on MS-DOS), v2.0 or later. +# Thanks to Frank J. Donahoe for this version. + +# Read installation instructions before saying "make" !! + +# The name of your C compiler: +CC= gcc + +# You may need to adjust these cc options: +CFLAGS= -O2 -Wall -I. +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Link-time cc options: +LDFLAGS= -s + +# To link any special libraries, add the necessary -l commands here. +LDLIBS= + +# Put here the object file name for the correct system-dependent memory +# manager file. For DJGPP this is usually jmemnobs.o, but you could +# use jmemname.o if you want to use named temp files instead of swap space. +SYSDEPMEM= jmemnobs.o + +# miscellaneous OS-dependent stuff +# linker +LN= $(CC) +# file deletion command +RM= del +# library (.a) file creation command +AR= ar rc +# second step in .a creation (use "touch" if not needed) +AR2= ranlib + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ + jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ + jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ + jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ + jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ + jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ + jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ + jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ + coderules.doc filelist.doc change.log +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ + makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ + maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ + makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh +OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.o jcapistd.o jctrans.o jcparam.o jdatadst.o jcinit.o \ + jcmaster.o jcmarker.o jcmainct.o jcprepct.o jccoefct.o jccolor.o \ + jcsample.o jchuff.o jcphuff.o jcdctmgr.o jfdctfst.o jfdctflt.o \ + jfdctint.o +# decompression library object files +DLIBOBJECTS= jdapimin.o jdapistd.o jdtrans.o jdatasrc.o jdmaster.o \ + jdinput.o jdmarker.o jdhuff.o jdphuff.o jdmainct.o jdcoefct.o \ + jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ + jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o +# These objectfiles are included in libjpeg.a +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ + cdjpeg.o +DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ + cdjpeg.o +TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o + + +all: libjpeg.a cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe + +libjpeg.a: $(LIBOBJECTS) + $(RM) libjpeg.a + $(AR) libjpeg.a $(LIBOBJECTS) + $(AR2) libjpeg.a + +cjpeg.exe: $(COBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o cjpeg.exe $(COBJECTS) libjpeg.a $(LDLIBS) + +djpeg.exe: $(DOBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o djpeg.exe $(DOBJECTS) libjpeg.a $(LDLIBS) + +jpegtran.exe: $(TROBJECTS) libjpeg.a + $(LN) $(LDFLAGS) -o jpegtran.exe $(TROBJECTS) libjpeg.a $(LDLIBS) + +rdjpgcom.exe: rdjpgcom.o + $(LN) $(LDFLAGS) -o rdjpgcom.exe rdjpgcom.o $(LDLIBS) + +wrjpgcom.exe: wrjpgcom.o + $(LN) $(LDFLAGS) -o wrjpgcom.exe wrjpgcom.o $(LDLIBS) + +jconfig.h: jconfig.doc + echo You must prepare a system-dependent jconfig.h file. + echo Please read the installation directions in install.doc. + exit 1 + +clean: + $(RM) *.o + $(RM) cjpeg.exe + $(RM) djpeg.exe + $(RM) jpegtran.exe + $(RM) rdjpgcom.exe + $(RM) wrjpgcom.exe + $(RM) libjpeg.a + $(RM) testout*.* + +test: cjpeg.exe djpeg.exe jpegtran.exe + $(RM) testout*.* + ./djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + ./cjpeg -dct int -outfile testout.jpg testimg.ppm + ./djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + ./jpegtran -outfile testoutt.jpg testprog.jpg + fc /b testimg.ppm testout.ppm + fc /b testimg.bmp testout.bmp + fc /b testimg.jpg testout.jpg + fc /b testimg.ppm testoutp.ppm + fc /b testimgp.jpg testoutp.jpg + fc /b testorig.jpg testoutt.jpg + + +jcapimin.o: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.o: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcinit.o: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcphuff.o: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.o: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.o: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.o: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdinput.o: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdphuff.o: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.o: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctred.o: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.o: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.o: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.o: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.o: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.o: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.o: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.o: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.o: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.o: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.o: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.o: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.o: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.o: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.o: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.o: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.o: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.o: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.o: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.o: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.o: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.o: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.o: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.o: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/Build/source/extra/jpeg/makefile.manx b/Build/source/extra/jpeg/makefile.manx new file mode 100644 index 00000000000..4cb42d17ca1 --- /dev/null +++ b/Build/source/extra/jpeg/makefile.manx @@ -0,0 +1,214 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is for Amiga systems using Manx Aztec C ver 5.x. +# Thanks to D.J. James (djjames@cup.portal.com) for this version. + +# Read installation instructions before saying "make" !! + +# The name of your C compiler: +CC= cc + +# You may need to adjust these cc options: +# Uncomment for generic 68000 code (will work on any Amiga) +ARCHFLAGS= -sn + +# Uncomment for 68020/68030 code (faster, but won't run on 68000 CPU) +#ARCHFLAGS= -c2 + +CFLAGS= -MC -MD $(ARCHFLAGS) -spfam -r4 + +# Link-time cc options: +LDFLAGS= -g + +# To link any special libraries, add the necessary -l commands here. +LDLIBS= -lml -lcl + +# Put here the object file name for the correct system-dependent memory +# manager file. For Amiga we recommend jmemname.o. +SYSDEPMEM= jmemname.o + +# miscellaneous OS-dependent stuff +# linker +LN= ln +# file deletion command +RM= delete quiet +# library (.lib) file creation command +AR= lb + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ + jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ + jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ + jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ + jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ + jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ + jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ + jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ + coderules.doc filelist.doc change.log +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ + makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ + maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ + makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh +OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.o jcapistd.o jctrans.o jcparam.o jdatadst.o jcinit.o \ + jcmaster.o jcmarker.o jcmainct.o jcprepct.o jccoefct.o jccolor.o \ + jcsample.o jchuff.o jcphuff.o jcdctmgr.o jfdctfst.o jfdctflt.o \ + jfdctint.o +# decompression library object files +DLIBOBJECTS= jdapimin.o jdapistd.o jdtrans.o jdatasrc.o jdmaster.o \ + jdinput.o jdmarker.o jdhuff.o jdphuff.o jdmainct.o jdcoefct.o \ + jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ + jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o +# These objectfiles are included in libjpeg.lib +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ + cdjpeg.o +DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ + cdjpeg.o +TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o + + +all: libjpeg.lib cjpeg djpeg jpegtran rdjpgcom wrjpgcom + +libjpeg.lib: $(LIBOBJECTS) + -$(RM) libjpeg.lib + $(AR) libjpeg.lib $(LIBOBJECTS) + +cjpeg: $(COBJECTS) libjpeg.lib + $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.lib $(LDLIBS) + +djpeg: $(DOBJECTS) libjpeg.lib + $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.lib $(LDLIBS) + +jpegtran: $(TROBJECTS) libjpeg.lib + $(LN) $(LDFLAGS) -o jpegtran $(TROBJECTS) libjpeg.lib $(LDLIBS) + +rdjpgcom: rdjpgcom.o + $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.o $(LDLIBS) + +wrjpgcom: wrjpgcom.o + $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.o $(LDLIBS) + +jconfig.h: jconfig.doc + echo You must prepare a system-dependent jconfig.h file. + echo Please read the installation directions in install.doc. + exit 1 + +clean: + -$(RM) *.o cjpeg djpeg jpegtran libjpeg.lib rdjpgcom wrjpgcom + -$(RM) core testout*.* + +test: cjpeg djpeg jpegtran + -$(RM) testout*.* + djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + cjpeg -dct int -outfile testout.jpg testimg.ppm + djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + jpegtran -outfile testoutt.jpg testprog.jpg + cmp testimg.ppm testout.ppm + cmp testimg.bmp testout.bmp + cmp testimg.jpg testout.jpg + cmp testimg.ppm testoutp.ppm + cmp testimgp.jpg testoutp.jpg + cmp testorig.jpg testoutt.jpg + + +jcapimin.o: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.o: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcinit.o: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcphuff.o: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.o: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.o: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.o: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdinput.o: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdphuff.o: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.o: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctred.o: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.o: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.o: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.o: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.o: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.o: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.o: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.o: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.o: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.o: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.o: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.o: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.o: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.o: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.o: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.o: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.o: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.o: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.o: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.o: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.o: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.o: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.o: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.o: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/Build/source/extra/jpeg/makefile.mc6 b/Build/source/extra/jpeg/makefile.mc6 new file mode 100644 index 00000000000..6aff054646a --- /dev/null +++ b/Build/source/extra/jpeg/makefile.mc6 @@ -0,0 +1,249 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is for Microsoft C for MS-DOS, version 6.00A and up. +# Use NMAKE, not Microsoft's brain-damaged MAKE. +# Thanks to Alan Wright and Chris Turner of Olivetti Research Ltd. + +# Read installation instructions before saying "nmake" !! + +# You may need to adjust these compiler options: +CFLAGS = -AM -Oecigt -Gs -W3 +# -AM medium memory model (or use -AS for small model, if you remove features) +# -Oecigt -Gs maximum safe optimisation (-Ol has bugs in MSC 6.00A) +# -W3 warning level 3 +# You might also want to add -G2 if you have an 80286, etc. +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Jan-Herman Buining suggests the following switches for MS C 8.0 and a 486: +# CFLAGS = /AM /f- /FPi87 /G3 /Gs /Gy /Ob1 /Oc /Oe /Og /Oi /Ol /On /Oo /Ot \ +# /OV4 /W3 +# except for jquant1.c, which must be compiled with /Oo- to avoid a compiler +# crash. + +# Ingar Steinsland suggests the following switches when building +# a 16-bit Windows DLL: +# CFLAGS = -ALw -Gsw -Zpe -W3 -O2 -Zi -Zd + +# Put here the object file name for the correct system-dependent memory +# manager file. For DOS, we recommend jmemdos.c and jmemdosa.asm. +# (But not for Windows; see install.doc if you use this makefile for Windows.) +SYSDEPMEM= jmemdos.obj jmemdosa.obj +# SYSDEPMEMLIB must list the same files with "+" signs for the librarian. +SYSDEPMEMLIB= +jmemdos.obj +jmemdosa.obj + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ + jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ + jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ + jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ + jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ + jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ + jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ + jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ + coderules.doc filelist.doc change.log +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ + makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ + maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ + makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh +OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.obj jcapistd.obj jctrans.obj jcparam.obj jdatadst.obj \ + jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj jcprepct.obj \ + jccoefct.obj jccolor.obj jcsample.obj jchuff.obj jcphuff.obj \ + jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj +# decompression library object files +DLIBOBJECTS= jdapimin.obj jdapistd.obj jdtrans.obj jdatasrc.obj \ + jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdphuff.obj \ + jdmainct.obj jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj \ + jidctflt.obj jidctint.obj jidctred.obj jdsample.obj jdcolor.obj \ + jquant1.obj jquant2.obj jdmerge.obj +# These objectfiles are included in libjpeg.lib +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj \ + rdswitch.obj cdjpeg.obj +DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ + rdcolmap.obj cdjpeg.obj +TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj + +# need linker response file because file list > 128 chars +RFILE = libjpeg.ans + + +all: libjpeg.lib cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe + +libjpeg.lib: $(LIBOBJECTS) $(RFILE) + del libjpeg.lib + lib @$(RFILE) + +# linker response file for building libjpeg.lib +$(RFILE) : makefile + del $(RFILE) + echo libjpeg.lib >$(RFILE) +# silly want-to-create-it prompt: + echo y >>$(RFILE) + echo +jcapimin.obj +jcapistd.obj +jctrans.obj +jcparam.obj & >>$(RFILE) + echo +jdatadst.obj +jcinit.obj +jcmaster.obj +jcmarker.obj & >>$(RFILE) + echo +jcmainct.obj +jcprepct.obj +jccoefct.obj & >>$(RFILE) + echo +jccolor.obj +jcsample.obj +jchuff.obj +jcphuff.obj & >>$(RFILE) + echo +jcdctmgr.obj +jfdctfst.obj +jfdctflt.obj & >>$(RFILE) + echo +jfdctint.obj +jdapimin.obj +jdapistd.obj & >>$(RFILE) + echo +jdtrans.obj +jdatasrc.obj +jdmaster.obj +jdinput.obj & >>$(RFILE) + echo +jdmarker.obj +jdhuff.obj +jdphuff.obj +jdmainct.obj & >>$(RFILE) + echo +jdcoefct.obj +jdpostct.obj +jddctmgr.obj & >>$(RFILE) + echo +jidctfst.obj +jidctflt.obj +jidctint.obj & >>$(RFILE) + echo +jidctred.obj +jdsample.obj +jdcolor.obj +jquant1.obj & >>$(RFILE) + echo +jquant2.obj +jdmerge.obj +jcomapi.obj +jutils.obj & >>$(RFILE) + echo +jerror.obj +jmemmgr.obj & >>$(RFILE) + echo $(SYSDEPMEMLIB) ; >>$(RFILE) + +cjpeg.exe: $(COBJECTS) libjpeg.lib + echo $(COBJECTS) >cjpeg.lst + link /STACK:4096 /EXEPACK @cjpeg.lst, cjpeg.exe, , libjpeg.lib, ; + del cjpeg.lst + +djpeg.exe: $(DOBJECTS) libjpeg.lib + echo $(DOBJECTS) >djpeg.lst + link /STACK:4096 /EXEPACK @djpeg.lst, djpeg.exe, , libjpeg.lib, ; + del djpeg.lst + +jpegtran.exe: $(TROBJECTS) libjpeg.lib + link /STACK:4096 /EXEPACK $(TROBJECTS), jpegtran.exe, , libjpeg.lib, ; + +rdjpgcom.exe: rdjpgcom.c + $(CC) -AS -O -W3 rdjpgcom.c + +# wrjpgcom needs large model so it can malloc a 64K chunk +wrjpgcom.exe: wrjpgcom.c + $(CC) -AL -O -W3 wrjpgcom.c + +jconfig.h: jconfig.doc + echo You must prepare a system-dependent jconfig.h file. + echo Please read the installation directions in install.doc. + exit 1 + +clean: + del *.obj + del libjpeg.lib + del cjpeg.exe + del djpeg.exe + del jpegtran.exe + del rdjpgcom.exe + del wrjpgcom.exe + del testout*.* + +test: cjpeg.exe djpeg.exe jpegtran.exe + del testout*.* + djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + cjpeg -dct int -outfile testout.jpg testimg.ppm + djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + jpegtran -outfile testoutt.jpg testprog.jpg + fc /b testimg.ppm testout.ppm + fc /b testimg.bmp testout.bmp + fc /b testimg.jpg testout.jpg + fc /b testimg.ppm testoutp.ppm + fc /b testimgp.jpg testoutp.jpg + fc /b testorig.jpg testoutt.jpg + + +jcapimin.obj: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.obj: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.obj: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.obj: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.obj: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.obj: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcinit.obj: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.obj: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.obj: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.obj: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.obj: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.obj: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcphuff.obj: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcprepct.obj: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.obj: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.obj: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.obj: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.obj: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.obj: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.obj: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.obj: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.obj: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.obj: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.obj: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdinput.obj: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.obj: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.obj: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.obj: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.obj: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdphuff.obj: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdpostct.obj: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.obj: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.obj: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.obj: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.obj: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.obj: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.obj: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.obj: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.obj: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.obj: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctred.obj: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.obj: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.obj: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.obj: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.obj: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.obj: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.obj: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.obj: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.obj: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.obj: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.obj: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.obj: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.obj: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.obj: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.obj: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.obj: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.obj: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.obj: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.obj: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.obj: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.obj: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.obj: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.obj: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.obj: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.obj: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.obj: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.obj: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.obj: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.obj: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +jmemdosa.obj : jmemdosa.asm + masm /mx $*; diff --git a/Build/source/extra/jpeg/makefile.mms b/Build/source/extra/jpeg/makefile.mms new file mode 100644 index 00000000000..cf130e5b9f3 --- /dev/null +++ b/Build/source/extra/jpeg/makefile.mms @@ -0,0 +1,218 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is for use with MMS on Digital VMS systems. +# Thanks to Rick Dyson (dyson@iowasp.physics.uiowa.edu) +# and Tim Bell (tbell@netcom.com) for their help. + +# Read installation instructions before saying "MMS" !! + +# You may need to adjust these cc options: +CFLAGS= $(CFLAGS) /NoDebug /Optimize +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via /Define switches here. +.ifdef ALPHA +OPT= +.else +OPT= ,Sys$Disk:[]MAKVMS.OPT/Option +.endif + +# Put here the object file name for the correct system-dependent memory +# manager file. For Unix this is usually jmemnobs.o, but you may want +# to use jmemansi.o or jmemname.o if you have limited swap space. +SYSDEPMEM= jmemnobs.obj + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ + jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ + jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ + jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ + jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ + jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ + jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ + jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ + coderules.doc filelist.doc change.log +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ + makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ + maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ + makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh +OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.obj jcapistd.obj jctrans.obj jcparam.obj jdatadst.obj \ + jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj jcprepct.obj \ + jccoefct.obj jccolor.obj jcsample.obj jchuff.obj jcphuff.obj \ + jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj +# decompression library object files +DLIBOBJECTS= jdapimin.obj jdapistd.obj jdtrans.obj jdatasrc.obj \ + jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdphuff.obj \ + jdmainct.obj jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj \ + jidctflt.obj jidctint.obj jidctred.obj jdsample.obj jdcolor.obj \ + jquant1.obj jquant2.obj jdmerge.obj +# These objectfiles are included in libjpeg.olb +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj \ + rdswitch.obj cdjpeg.obj +DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ + rdcolmap.obj cdjpeg.obj +TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj +# objectfile lists with commas --- what a crock +COBJLIST= cjpeg.obj,rdppm.obj,rdgif.obj,rdtarga.obj,rdrle.obj,rdbmp.obj,\ + rdswitch.obj,cdjpeg.obj +DOBJLIST= djpeg.obj,wrppm.obj,wrgif.obj,wrtarga.obj,wrrle.obj,wrbmp.obj,\ + rdcolmap.obj,cdjpeg.obj +TROBJLIST= jpegtran.obj,rdswitch.obj,cdjpeg.obj,transupp.obj +LIBOBJLIST= jcapimin.obj,jcapistd.obj,jctrans.obj,jcparam.obj,jdatadst.obj,\ + jcinit.obj,jcmaster.obj,jcmarker.obj,jcmainct.obj,jcprepct.obj,\ + jccoefct.obj,jccolor.obj,jcsample.obj,jchuff.obj,jcphuff.obj,\ + jcdctmgr.obj,jfdctfst.obj,jfdctflt.obj,jfdctint.obj,jdapimin.obj,\ + jdapistd.obj,jdtrans.obj,jdatasrc.obj,jdmaster.obj,jdinput.obj,\ + jdmarker.obj,jdhuff.obj,jdphuff.obj,jdmainct.obj,jdcoefct.obj,\ + jdpostct.obj,jddctmgr.obj,jidctfst.obj,jidctflt.obj,jidctint.obj,\ + jidctred.obj,jdsample.obj,jdcolor.obj,jquant1.obj,jquant2.obj,\ + jdmerge.obj,jcomapi.obj,jutils.obj,jerror.obj,jmemmgr.obj,$(SYSDEPMEM) + + +.first + @- Define /NoLog Sys Sys$Library + +ALL : libjpeg.olb cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe + @ Continue + +libjpeg.olb : $(LIBOBJECTS) + Library /Create libjpeg.olb $(LIBOBJLIST) + +cjpeg.exe : $(COBJECTS) libjpeg.olb + $(LINK) $(LFLAGS) /Executable = cjpeg.exe $(COBJLIST),libjpeg.olb/Library$(OPT) + +djpeg.exe : $(DOBJECTS) libjpeg.olb + $(LINK) $(LFLAGS) /Executable = djpeg.exe $(DOBJLIST),libjpeg.olb/Library$(OPT) + +jpegtran.exe : $(TROBJECTS) libjpeg.olb + $(LINK) $(LFLAGS) /Executable = jpegtran.exe $(TROBJLIST),libjpeg.olb/Library$(OPT) + +rdjpgcom.exe : rdjpgcom.obj + $(LINK) $(LFLAGS) /Executable = rdjpgcom.exe rdjpgcom.obj$(OPT) + +wrjpgcom.exe : wrjpgcom.obj + $(LINK) $(LFLAGS) /Executable = wrjpgcom.exe wrjpgcom.obj$(OPT) + +jconfig.h : jconfig.vms + @- Copy jconfig.vms jconfig.h + +clean : + @- Set Protection = Owner:RWED *.*;-1 + @- Set Protection = Owner:RWED *.OBJ + - Purge /NoLog /NoConfirm *.* + - Delete /NoLog /NoConfirm *.OBJ; + +test : cjpeg.exe djpeg.exe jpegtran.exe + mcr sys$disk:[]djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + mcr sys$disk:[]djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + mcr sys$disk:[]cjpeg -dct int -outfile testout.jpg testimg.ppm + mcr sys$disk:[]djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + mcr sys$disk:[]cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + mcr sys$disk:[]jpegtran -outfile testoutt.jpg testprog.jpg + - Backup /Compare/Log testimg.ppm testout.ppm + - Backup /Compare/Log testimg.bmp testout.bmp + - Backup /Compare/Log testimg.jpg testout.jpg + - Backup /Compare/Log testimg.ppm testoutp.ppm + - Backup /Compare/Log testimgp.jpg testoutp.jpg + - Backup /Compare/Log testorig.jpg testoutt.jpg + + +jcapimin.obj : jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.obj : jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.obj : jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.obj : jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.obj : jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.obj : jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcinit.obj : jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.obj : jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.obj : jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.obj : jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.obj : jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.obj : jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcphuff.obj : jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcprepct.obj : jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.obj : jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.obj : jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.obj : jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.obj : jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.obj : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.obj : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.obj : jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.obj : jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.obj : jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.obj : jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdinput.obj : jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.obj : jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.obj : jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.obj : jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.obj : jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdphuff.obj : jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdpostct.obj : jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.obj : jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.obj : jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.obj : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.obj : jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.obj : jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.obj : jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.obj : jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.obj : jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.obj : jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctred.obj : jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.obj : jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.obj : jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.obj : jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.obj : jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.obj : jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.obj : jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.obj : jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.obj : jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.obj : jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.obj : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.obj : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.obj : jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.obj : rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.obj : wrjpgcom.c jinclude.h jconfig.h +cdjpeg.obj : cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.obj : rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.obj : rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.obj : transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.obj : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.obj : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.obj : rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.obj : wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.obj : rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.obj : wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.obj : rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.obj : wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.obj : rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.obj : wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/Build/source/extra/jpeg/makefile.sas b/Build/source/extra/jpeg/makefile.sas new file mode 100644 index 00000000000..f296faf069d --- /dev/null +++ b/Build/source/extra/jpeg/makefile.sas @@ -0,0 +1,252 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is for Amiga systems using SAS C 6.0 and up. +# Thanks to Ed Hanway, Mark Rinfret, and Jim Zepeda. + +# Read installation instructions before saying "make" !! + +# The name of your C compiler: +CC= sc + +# You may need to adjust these cc options: +# Uncomment the following lines for generic 680x0 version +ARCHFLAGS= cpu=any +SUFFIX= + +# Uncomment the following lines for 68030-only version +#ARCHFLAGS= cpu=68030 +#SUFFIX=.030 + +CFLAGS= nostackcheck data=near parms=register optimize $(ARCHFLAGS) \ + ignore=104 ignore=304 ignore=306 +# ignore=104 disables warnings for mismatched const qualifiers +# ignore=304 disables warnings for variables being optimized out +# ignore=306 disables warnings for the inlining of functions +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via define switches here. + +# Link-time cc options: +LDFLAGS= SC SD ND BATCH + +# To link any special libraries, add the necessary commands here. +LDLIBS= LIB:scm.lib LIB:sc.lib + +# Put here the object file name for the correct system-dependent memory +# manager file. For Amiga we recommend jmemname.o. +SYSDEPMEM= jmemname.o + +# miscellaneous OS-dependent stuff +# linker +LN= slink +# file deletion command +RM= delete quiet +# library (.lib) file creation command +AR= oml + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ + jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ + jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ + jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ + jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ + jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ + jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ + jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ + coderules.doc filelist.doc change.log +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ + makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ + maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ + makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh +OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.o jcapistd.o jctrans.o jcparam.o jdatadst.o jcinit.o \ + jcmaster.o jcmarker.o jcmainct.o jcprepct.o jccoefct.o jccolor.o \ + jcsample.o jchuff.o jcphuff.o jcdctmgr.o jfdctfst.o jfdctflt.o \ + jfdctint.o +# decompression library object files +DLIBOBJECTS= jdapimin.o jdapistd.o jdtrans.o jdatasrc.o jdmaster.o \ + jdinput.o jdmarker.o jdhuff.o jdphuff.o jdmainct.o jdcoefct.o \ + jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ + jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o +# These objectfiles are included in libjpeg.lib +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ + cdjpeg.o +DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ + cdjpeg.o +TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o + + +all: libjpeg.lib cjpeg$(SUFFIX) djpeg$(SUFFIX) jpegtran$(SUFFIX) rdjpgcom$(SUFFIX) wrjpgcom$(SUFFIX) + +# note: do several AR steps to avoid command line length limitations + +libjpeg.lib: $(LIBOBJECTS) + -$(RM) libjpeg.lib + $(AR) libjpeg.lib r $(CLIBOBJECTS) + $(AR) libjpeg.lib r $(DLIBOBJECTS) + $(AR) libjpeg.lib r $(COMOBJECTS) + +cjpeg$(SUFFIX): $(COBJECTS) libjpeg.lib + $(LN) + +# You may want to adjust these compiler options: +CFLAGS= $(cflags) $(cdebug) $(cvars) -I. +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Link-time options: +LDFLAGS= $(ldebug) $(conlflags) + +# To link any special libraries, add the necessary commands here. +LDLIBS= $(conlibs) + +# Put here the object file name for the correct system-dependent memory +# manager file. For NT we suggest jmemnobs.obj, which expects the OS to +# provide adequate virtual memory. +SYSDEPMEM= jmemnobs.obj + +# miscellaneous OS-dependent stuff +# file deletion command +RM= del + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ + jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ + jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ + jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ + jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ + jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ + jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ + jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ + wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ + coderules.doc filelist.doc change.log +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ + makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ + makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ + maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ + makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh +OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.obj jcapistd.obj jctrans.obj jcparam.obj jdatadst.obj \ + jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj jcprepct.obj \ + jccoefct.obj jccolor.obj jcsample.obj jchuff.obj jcphuff.obj \ + jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj +# decompression library object files +DLIBOBJECTS= jdapimin.obj jdapistd.obj jdtrans.obj jdatasrc.obj \ + jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdphuff.obj \ + jdmainct.obj jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj \ + jidctflt.obj jidctint.obj jidctred.obj jdsample.obj jdcolor.obj \ + jquant1.obj jquant2.obj jdmerge.obj +# These objectfiles are included in libjpeg.lib +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj \ + rdswitch.obj cdjpeg.obj +DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ + rdcolmap.obj cdjpeg.obj +TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj + +# Template command for compiling .c to .obj +.c.obj: + $(cc) $(CFLAGS) $*.c + + +all: libjpeg.lib cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe + +libjpeg.lib: $(LIBOBJECTS) + $(RM) libjpeg.lib + lib -out:libjpeg.lib $(LIBOBJECTS) + +cjpeg.exe: $(COBJECTS) libjpeg.lib + $(link) $(LDFLAGS) -out:cjpeg.exe $(COBJECTS) libjpeg.lib $(LDLIBS) + +djpeg.exe: $(DOBJECTS) libjpeg.lib + $(link) $(LDFLAGS) -out:djpeg.exe $(DOBJECTS) libjpeg.lib $(LDLIBS) + +jpegtran.exe: $(TROBJECTS) libjpeg.lib + $(link) $(LDFLAGS) -out:jpegtran.exe $(TROBJECTS) libjpeg.lib $(LDLIBS) + +rdjpgcom.exe: rdjpgcom.obj + $(link) $(LDFLAGS) -out:rdjpgcom.exe rdjpgcom.obj $(LDLIBS) + +wrjpgcom.exe: wrjpgcom.obj + $(link) $(LDFLAGS) -out:wrjpgcom.exe wrjpgcom.obj $(LDLIBS) + + +clean: + $(RM) *.obj *.exe libjpeg.lib + $(RM) testout* + +test: cjpeg.exe djpeg.exe jpegtran.exe + $(RM) testout* + .\djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + .\djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + .\cjpeg -dct int -outfile testout.jpg testimg.ppm + .\djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + .\cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + .\jpegtran -outfile testoutt.jpg testprog.jpg + fc /b testimg.ppm testout.ppm + fc /b testimg.bmp testout.bmp + fc /b testimg.jpg testout.jpg + fc /b testimg.ppm testoutp.ppm + fc /b testimgp.jpg testoutp.jpg + fc /b testorig.jpg testoutt.jpg + + +jcapimin.obj: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.obj: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.obj: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.obj: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.obj: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.obj: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcinit.obj: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.obj: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.obj: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.obj: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.obj: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.obj: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcphuff.obj: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcprepct.obj: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.obj: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.obj: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.obj: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.obj: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.obj: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.obj: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.obj: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.obj: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.obj: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.obj: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdinput.obj: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.obj: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.obj: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.obj: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.obj: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdphuff.obj: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdpostct.obj: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.obj: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.obj: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.obj: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.obj: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.obj: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.obj: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.obj: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.obj: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.obj: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctred.obj: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.obj: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.obj: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.obj: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.obj: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.obj: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.obj: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.obj: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.obj: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.obj: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.obj: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.obj: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.obj: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.obj: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.obj: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.obj: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.obj: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.obj: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.obj: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.obj: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.obj: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.obj: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.obj: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.obj: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.obj: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.obj: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.obj: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.obj: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.obj: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/Build/source/extra/jpeg/makefile.vms b/Build/source/extra/jpeg/makefile.vms new file mode 100644 index 00000000000..a42358d05ca --- /dev/null +++ b/Build/source/extra/jpeg/makefile.vms @@ -0,0 +1,142 @@ +$! Makefile for Independent JPEG Group's software +$! +$! This is a command procedure for Digital VMS systems that do not have MMS. +$! It builds the JPEG software by brute force, recompiling everything whether +$! or not it is necessary. It then runs the basic self-test. +$! Thanks to Rick Dyson (dyson@iowasp.physics.uiowa.edu) +$! and Tim Bell (tbell@netcom.com) for their help. +$! +$! Read installation instructions before running this!! +$! +$ If F$Mode () .eqs. "INTERACTIVE" +$ Then +$ VERIFY = F$Verify (0) +$ Else +$ VERIFY = F$Verify (1) +$ EndIf +$ On Control_Y Then GoTo End +$ On Error Then GoTo End +$ +$ If F$GetSyi ("HW_MODEL") .gt. 1023 +$ Then +$ OPT = "" +$ Else +$ OPT = ",Sys$Disk:[]makvms.opt/Option" +$ EndIf +$ +$ DoCompile := CC /NoDebug /Optimize /NoList +$! +$ DoCompile jcapimin.c +$ DoCompile jcapistd.c +$ DoCompile jctrans.c +$ DoCompile jcparam.c +$ DoCompile jdatadst.c +$ DoCompile jcinit.c +$ DoCompile jcmaster.c +$ DoCompile jcmarker.c +$ DoCompile jcmainct.c +$ DoCompile jcprepct.c +$ DoCompile jccoefct.c +$ DoCompile jccolor.c +$ DoCompile jcsample.c +$ DoCompile jchuff.c +$ DoCompile jcphuff.c +$ DoCompile jcdctmgr.c +$ DoCompile jfdctfst.c +$ DoCompile jfdctflt.c +$ DoCompile jfdctint.c +$ DoCompile jdapimin.c +$ DoCompile jdapistd.c +$ DoCompile jdtrans.c +$ DoCompile jdatasrc.c +$ DoCompile jdmaster.c +$ DoCompile jdinput.c +$ DoCompile jdmarker.c +$ DoCompile jdhuff.c +$ DoCompile jdphuff.c +$ DoCompile jdmainct.c +$ DoCompile jdcoefct.c +$ DoCompile jdpostct.c +$ DoCompile jddctmgr.c +$ DoCompile jidctfst.c +$ DoCompile jidctflt.c +$ DoCompile jidctint.c +$ DoCompile jidctred.c +$ DoCompile jdsample.c +$ DoCompile jdcolor.c +$ DoCompile jquant1.c +$ DoCompile jquant2.c +$ DoCompile jdmerge.c +$ DoCompile jcomapi.c +$ DoCompile jutils.c +$ DoCompile jerror.c +$ DoCompile jmemmgr.c +$ DoCompile jmemnobs.c +$! +$ Library /Create libjpeg.olb jcapimin.obj,jcapistd.obj,jctrans.obj, - + jcparam.obj,jdatadst.obj,jcinit.obj,jcmaster.obj,jcmarker.obj, - + jcmainct.obj,jcprepct.obj,jccoefct.obj,jccolor.obj,jcsample.obj, - + jchuff.obj,jcphuff.obj,jcdctmgr.obj,jfdctfst.obj,jfdctflt.obj, - + jfdctint.obj,jdapimin.obj,jdapistd.obj,jdtrans.obj,jdatasrc.obj, - + jdmaster.obj,jdinput.obj,jdmarker.obj,jdhuff.obj,jdphuff.obj, - + jdmainct.obj,jdcoefct.obj,jdpostct.obj,jddctmgr.obj,jidctfst.obj, - + jidctflt.obj,jidctint.obj,jidctred.obj,jdsample.obj,jdcolor.obj, - + jquant1.obj,jquant2.obj,jdmerge.obj,jcomapi.obj,jutils.obj, - + jerror.obj,jmemmgr.obj,jmemnobs.obj +$! +$ DoCompile cjpeg.c +$ DoCompile rdppm.c +$ DoCompile rdgif.c +$ DoCompile rdtarga.c +$ DoCompile rdrle.c +$ DoCompile rdbmp.c +$ DoCompile rdswitch.c +$ DoCompile cdjpeg.c +$! +$ Link /NoMap /Executable = cjpeg.exe cjpeg.obj,rdppm.obj,rdgif.obj, - + rdtarga.obj,rdrle.obj,rdbmp.obj,rdswitch.obj,cdjpeg.obj,libjpeg.olb/Library'OPT' +$! +$ DoCompile djpeg.c +$ DoCompile wrppm.c +$ DoCompile wrgif.c +$ DoCompile wrtarga.c +$ DoCompile wrrle.c +$ DoCompile wrbmp.c +$ DoCompile rdcolmap.c +$ DoCompile cdjpeg.c +$! +$ Link /NoMap /Executable = djpeg.exe djpeg.obj,wrppm.obj,wrgif.obj, - + wrtarga.obj,wrrle.obj,wrbmp.obj,rdcolmap.obj,cdjpeg.obj,libjpeg.olb/Library'OPT' +$! +$ DoCompile jpegtran.c +$ DoCompile rdswitch.c +$ DoCompile cdjpeg.c +$ DoCompile transupp.c +$! +$ Link /NoMap /Executable = jpegtran.exe jpegtran.obj,rdswitch.obj, - + cdjpeg.obj,transupp.obj,libjpeg.olb/Library'OPT' +$! +$ DoCompile rdjpgcom.c +$ Link /NoMap /Executable = rdjpgcom.exe rdjpgcom.obj'OPT' +$! +$ DoCompile wrjpgcom.c +$ Link /NoMap /Executable = wrjpgcom.exe wrjpgcom.obj'OPT' +$! +$! Run the self-test +$! +$ mcr sys$disk:[]djpeg -dct int -ppm -outfile testout.ppm testorig.jpg +$ mcr sys$disk:[]djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg +$ mcr sys$disk:[]cjpeg -dct int -outfile testout.jpg testimg.ppm +$ mcr sys$disk:[]djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg +$ mcr sys$disk:[]cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm +$ mcr sys$disk:[]jpegtran -outfile testoutt.jpg testprog.jpg +$ Backup /Compare/Log testimg.ppm testout.ppm +$ Backup /Compare/Log testimg.bmp testout.bmp +$ Backup /Compare/Log testimg.jpg testout.jpg +$ Backup /Compare/Log testimg.ppm testoutp.ppm +$ Backup /Compare/Log testimgp.jpg testoutp.jpg +$ Backup /Compare/Log testorig.jpg testoutt.jpg +$! +$End: +$ If Verify Then Set Verify +$ Exit diff --git a/Build/source/extra/jpeg/makefile.wat b/Build/source/extra/jpeg/makefile.wat new file mode 100644 index 00000000000..d953e466f8c --- /dev/null +++ b/Build/source/extra/jpeg/makefile.wat @@ -0,0 +1,233 @@ +# Makefile for Independent JPEG Group's software + +# This makefile is suitable for Watcom C/C++ 10.0 on MS-DOS (using +# dos4g extender), OS/2, and Windows NT console mode. +# Thanks to Janos Haide, jhaide@btrvtech.com. + +# Read installation instructions before saying "wmake" !! + +# Uncomment line for desired system +SYSTEM=DOS +#SYSTEM=OS2 +#SYSTEM=NT + +# The name of your C compiler: +CC= wcl386 + +# You may need to adjust these cc options: +CFLAGS= -4r -ort -wx -zq -bt=$(SYSTEM) +# Caution: avoid -ol or -ox; these generate bad code with 10.0 or 10.0a. +# Generally, we recommend defining any configuration symbols in jconfig.h, +# NOT via -D switches here. + +# Link-time cc options: +!ifeq SYSTEM DOS +LDFLAGS= -zq -l=dos4g +!else ifeq SYSTEM OS2 +LDFLAGS= -zq -l=os2v2 +!else ifeq SYSTEM NT +LDFLAGS= -zq -l=nt +!endif + +# Put here the object file name for the correct system-dependent memory +# manager file. jmemnobs should work fine for dos4g or OS/2 environment. +SYSDEPMEM= jmemnobs.obj + +# End of configurable options. + + +# source files: JPEG library proper +LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c & + jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c & + jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c & + jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c & + jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c & + jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c & + jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c & + jquant2.c jutils.c jmemmgr.c +# memmgr back ends: compile only one of these into a working library +SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c +# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom +APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c & + rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c & + rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c +SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) +# files included by source files +INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h & + jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h +# documentation, test, and support files +DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 & + wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc & + coderules.doc filelist.doc change.log +MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc & + makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds & + makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st & + maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms & + makvms.opt +CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat & + jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas & + jconfig.vms +CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh +OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm +TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg & + testimgp.jpg +DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) & + $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) +# library object files common to compression and decompression +COMOBJECTS= jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) +# compression library object files +CLIBOBJECTS= jcapimin.obj jcapistd.obj jctrans.obj jcparam.obj jdatadst.obj & + jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj jcprepct.obj & + jccoefct.obj jccolor.obj jcsample.obj jchuff.obj jcphuff.obj & + jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj +# decompression library object files +DLIBOBJECTS= jdapimin.obj jdapistd.obj jdtrans.obj jdatasrc.obj & + jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdphuff.obj & + jdmainct.obj jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj & + jidctflt.obj jidctint.obj jidctred.obj jdsample.obj jdcolor.obj & + jquant1.obj jquant2.obj jdmerge.obj +# These objectfiles are included in libjpeg.lib +LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) +# object files for sample applications (excluding library files) +COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj & + rdswitch.obj cdjpeg.obj +DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj & + rdcolmap.obj cdjpeg.obj +TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj + + +all: libjpeg.lib cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe + +libjpeg.lib: $(LIBOBJECTS) + - del libjpeg.lib + * wlib -n libjpeg.lib $(LIBOBJECTS) + +cjpeg.exe: $(COBJECTS) libjpeg.lib + $(CC) $(LDFLAGS) $(COBJECTS) libjpeg.lib + +djpeg.exe: $(DOBJECTS) libjpeg.lib + $(CC) $(LDFLAGS) $(DOBJECTS) libjpeg.lib + +jpegtran.exe: $(TROBJECTS) libjpeg.lib + $(CC) $(LDFLAGS) $(TROBJECTS) libjpeg.lib + +rdjpgcom.exe: rdjpgcom.c + $(CC) $(CFLAGS) $(LDFLAGS) rdjpgcom.c + +wrjpgcom.exe: wrjpgcom.c + $(CC) $(CFLAGS) $(LDFLAGS) wrjpgcom.c + +.c.obj: + $(CC) $(CFLAGS) -c $< + +jconfig.h: jconfig.doc + echo You must prepare a system-dependent jconfig.h file. + echo Please read the installation directions in install.doc. + exit 1 + +clean: .SYMBOLIC + - del *.obj + - del libjpeg.lib + - del cjpeg.exe + - del djpeg.exe + - del jpegtran.exe + - del rdjpgcom.exe + - del wrjpgcom.exe + - del testout*.* + +test: cjpeg.exe djpeg.exe jpegtran.exe .SYMBOLIC + - del testout*.* + djpeg -dct int -ppm -outfile testout.ppm testorig.jpg + djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg + cjpeg -dct int -outfile testout.jpg testimg.ppm + djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg + cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm + jpegtran -outfile testoutt.jpg testprog.jpg +!ifeq SYSTEM DOS + fc /b testimg.ppm testout.ppm + fc /b testimg.bmp testout.bmp + fc /b testimg.jpg testout.jpg + fc /b testimg.ppm testoutp.ppm + fc /b testimgp.jpg testoutp.jpg + fc /b testorig.jpg testoutt.jpg +!else + echo n > n.tmp + comp testimg.ppm testout.ppm < n.tmp + comp testimg.bmp testout.bmp < n.tmp + comp testimg.jpg testout.jpg < n.tmp + comp testimg.ppm testoutp.ppm < n.tmp + comp testimgp.jpg testoutp.jpg < n.tmp + comp testorig.jpg testoutt.jpg < n.tmp + del n.tmp +!endif + + +jcapimin.obj: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcapistd.obj: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccoefct.obj: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jccolor.obj: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcdctmgr.obj: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jchuff.obj: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcinit.obj: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmainct.obj: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmarker.obj: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcmaster.obj: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcomapi.obj: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcparam.obj: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcphuff.obj: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h +jcprepct.obj: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jcsample.obj: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jctrans.obj: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapimin.obj: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdapistd.obj: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdatadst.obj: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdatasrc.obj: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h +jdcoefct.obj: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdcolor.obj: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jddctmgr.obj: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jdhuff.obj: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdinput.obj: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmainct.obj: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmarker.obj: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmaster.obj: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdmerge.obj: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdphuff.obj: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h +jdpostct.obj: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdsample.obj: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jdtrans.obj: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jerror.obj: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h +jfdctflt.obj: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctfst.obj: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jfdctint.obj: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctflt.obj: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctfst.obj: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctint.obj: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jidctred.obj: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h +jquant1.obj: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jquant2.obj: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jutils.obj: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h +jmemmgr.obj: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemansi.obj: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemname.obj: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemnobs.obj: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemdos.obj: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +jmemmac.obj: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h +cjpeg.obj: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +djpeg.obj: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h +jpegtran.obj: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h +rdjpgcom.obj: rdjpgcom.c jinclude.h jconfig.h +wrjpgcom.obj: wrjpgcom.c jinclude.h jconfig.h +cdjpeg.obj: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdcolmap.obj: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdswitch.obj: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +transupp.obj: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h +rdppm.obj: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrppm.obj: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdgif.obj: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrgif.obj: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdtarga.obj: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrtarga.obj: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdbmp.obj: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrbmp.obj: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +rdrle.obj: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h +wrrle.obj: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/Build/source/extra/jpeg/makelib.ds b/Build/source/extra/jpeg/makelib.ds new file mode 100644 index 00000000000..c7ad36d09e4 --- /dev/null +++ b/Build/source/extra/jpeg/makelib.ds @@ -0,0 +1,1046 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=jpeg - Win32 +!MESSAGE No configuration specified. Defaulting to jpeg - Win32. +!ENDIF + +!IF "$(CFG)" != "jpeg - Win32" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "jpeg.mak" CFG="jpeg - Win32" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "jpeg - Win32" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "jpeg - Win32" +CPP=cl.exe + +!IF "$(CFG)" == "jpeg - Win32" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\jpeg.lib" + +CLEAN : + -@erase "$(INTDIR)\jcapimin.obj" + -@erase "$(INTDIR)\jcapistd.obj" + -@erase "$(INTDIR)\jctrans.obj" + -@erase "$(INTDIR)\jcparam.obj" + -@erase "$(INTDIR)\jdatadst.obj" + -@erase "$(INTDIR)\jcinit.obj" + -@erase "$(INTDIR)\jcmaster.obj" + -@erase "$(INTDIR)\jcmarker.obj" + -@erase "$(INTDIR)\jcmainct.obj" + -@erase "$(INTDIR)\jcprepct.obj" + -@erase "$(INTDIR)\jccoefct.obj" + -@erase "$(INTDIR)\jccolor.obj" + -@erase "$(INTDIR)\jcsample.obj" + -@erase "$(INTDIR)\jchuff.obj" + -@erase "$(INTDIR)\jcphuff.obj" + -@erase "$(INTDIR)\jcdctmgr.obj" + -@erase "$(INTDIR)\jfdctfst.obj" + -@erase "$(INTDIR)\jfdctflt.obj" + -@erase "$(INTDIR)\jfdctint.obj" + -@erase "$(INTDIR)\jdapimin.obj" + -@erase "$(INTDIR)\jdapistd.obj" + -@erase "$(INTDIR)\jdtrans.obj" + -@erase "$(INTDIR)\jdatasrc.obj" + -@erase "$(INTDIR)\jdmaster.obj" + -@erase "$(INTDIR)\jdinput.obj" + -@erase "$(INTDIR)\jdmarker.obj" + -@erase "$(INTDIR)\jdhuff.obj" + -@erase "$(INTDIR)\jdphuff.obj" + -@erase "$(INTDIR)\jdmainct.obj" + -@erase "$(INTDIR)\jdcoefct.obj" + -@erase "$(INTDIR)\jdpostct.obj" + -@erase "$(INTDIR)\jddctmgr.obj" + -@erase "$(INTDIR)\jidctfst.obj" + -@erase "$(INTDIR)\jidctflt.obj" + -@erase "$(INTDIR)\jidctint.obj" + -@erase "$(INTDIR)\jidctred.obj" + -@erase "$(INTDIR)\jdsample.obj" + -@erase "$(INTDIR)\jdcolor.obj" + -@erase "$(INTDIR)\jquant1.obj" + -@erase "$(INTDIR)\jquant2.obj" + -@erase "$(INTDIR)\jdmerge.obj" + -@erase "$(INTDIR)\jcomapi.obj" + -@erase "$(INTDIR)\jutils.obj" + -@erase "$(INTDIR)\jerror.obj" + -@erase "$(INTDIR)\jmemmgr.obj" + -@erase "$(INTDIR)\jmemnobs.obj" + -@erase "$(OUTDIR)\jpeg.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/jpeg.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/jpeg.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/jpeg.lib" +LIB32_OBJS= \ + "$(INTDIR)\jcapimin.obj" \ + "$(INTDIR)\jcapistd.obj" \ + "$(INTDIR)\jctrans.obj" \ + "$(INTDIR)\jcparam.obj" \ + "$(INTDIR)\jdatadst.obj" \ + "$(INTDIR)\jcinit.obj" \ + "$(INTDIR)\jcmaster.obj" \ + "$(INTDIR)\jcmarker.obj" \ + "$(INTDIR)\jcmainct.obj" \ + "$(INTDIR)\jcprepct.obj" \ + "$(INTDIR)\jccoefct.obj" \ + "$(INTDIR)\jccolor.obj" \ + "$(INTDIR)\jcsample.obj" \ + "$(INTDIR)\jchuff.obj" \ + "$(INTDIR)\jcphuff.obj" \ + "$(INTDIR)\jcdctmgr.obj" \ + "$(INTDIR)\jfdctfst.obj" \ + "$(INTDIR)\jfdctflt.obj" \ + "$(INTDIR)\jfdctint.obj" \ + "$(INTDIR)\jdapimin.obj" \ + "$(INTDIR)\jdapistd.obj" \ + "$(INTDIR)\jdtrans.obj" \ + "$(INTDIR)\jdatasrc.obj" \ + "$(INTDIR)\jdmaster.obj" \ + "$(INTDIR)\jdinput.obj" \ + "$(INTDIR)\jdmarker.obj" \ + "$(INTDIR)\jdhuff.obj" \ + "$(INTDIR)\jdphuff.obj" \ + "$(INTDIR)\jdmainct.obj" \ + "$(INTDIR)\jdcoefct.obj" \ + "$(INTDIR)\jdpostct.obj" \ + "$(INTDIR)\jddctmgr.obj" \ + "$(INTDIR)\jidctfst.obj" \ + "$(INTDIR)\jidctflt.obj" \ + "$(INTDIR)\jidctint.obj" \ + "$(INTDIR)\jidctred.obj" \ + "$(INTDIR)\jdsample.obj" \ + "$(INTDIR)\jdcolor.obj" \ + "$(INTDIR)\jquant1.obj" \ + "$(INTDIR)\jquant2.obj" \ + "$(INTDIR)\jdmerge.obj" \ + "$(INTDIR)\jcomapi.obj" \ + "$(INTDIR)\jutils.obj" \ + "$(INTDIR)\jerror.obj" \ + "$(INTDIR)\jmemmgr.obj" \ + "$(INTDIR)\jmemnobs.obj" + +"$(OUTDIR)\jpeg.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "jpeg - Win32" + +!IF "$(CFG)" == "jpeg - Win32" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE="jcapimin.c" +DEP_CPP_JCAPI=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jcapimin.obj" : $(SOURCE) $(DEP_CPP_JCAPI) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jcapistd.c" +DEP_CPP_JCAPIS=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jcapistd.obj" : $(SOURCE) $(DEP_CPP_JCAPIS) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jccoefct.c" +DEP_CPP_JCCOE=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jccoefct.obj" : $(SOURCE) $(DEP_CPP_JCCOE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jccolor.c" +DEP_CPP_JCCOL=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jccolor.obj" : $(SOURCE) $(DEP_CPP_JCCOL) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jcdctmgr.c" +DEP_CPP_JCDCT=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jdct.h"\ + + +"$(INTDIR)\jcdctmgr.obj" : $(SOURCE) $(DEP_CPP_JCDCT) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jchuff.c" +DEP_CPP_JCHUF=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jchuff.h"\ + + +"$(INTDIR)\jchuff.obj" : $(SOURCE) $(DEP_CPP_JCHUF) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jcinit.c" +DEP_CPP_JCINI=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jcinit.obj" : $(SOURCE) $(DEP_CPP_JCINI) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jcmainct.c" +DEP_CPP_JCMAI=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jcmainct.obj" : $(SOURCE) $(DEP_CPP_JCMAI) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jcmarker.c" +DEP_CPP_JCMAR=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jcmarker.obj" : $(SOURCE) $(DEP_CPP_JCMAR) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jcmaster.c" +DEP_CPP_JCMAS=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jcmaster.obj" : $(SOURCE) $(DEP_CPP_JCMAS) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jcomapi.c" +DEP_CPP_JCOMA=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jcomapi.obj" : $(SOURCE) $(DEP_CPP_JCOMA) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jcparam.c" +DEP_CPP_JCPAR=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jcparam.obj" : $(SOURCE) $(DEP_CPP_JCPAR) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jcphuff.c" +DEP_CPP_JCPHU=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jchuff.h"\ + + +"$(INTDIR)\jcphuff.obj" : $(SOURCE) $(DEP_CPP_JCPHU) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jcprepct.c" +DEP_CPP_JCPRE=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jcprepct.obj" : $(SOURCE) $(DEP_CPP_JCPRE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jcsample.c" +DEP_CPP_JCSAM=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jcsample.obj" : $(SOURCE) $(DEP_CPP_JCSAM) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jctrans.c" +DEP_CPP_JCTRA=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jctrans.obj" : $(SOURCE) $(DEP_CPP_JCTRA) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdapimin.c" +DEP_CPP_JDAPI=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jdapimin.obj" : $(SOURCE) $(DEP_CPP_JDAPI) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdapistd.c" +DEP_CPP_JDAPIS=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jdapistd.obj" : $(SOURCE) $(DEP_CPP_JDAPIS) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdatadst.c" +DEP_CPP_JDATA=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + + +"$(INTDIR)\jdatadst.obj" : $(SOURCE) $(DEP_CPP_JDATA) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdatasrc.c" +DEP_CPP_JDATAS=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jerror.h"\ + + +"$(INTDIR)\jdatasrc.obj" : $(SOURCE) $(DEP_CPP_JDATAS) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdcoefct.c" +DEP_CPP_JDCOE=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jdcoefct.obj" : $(SOURCE) $(DEP_CPP_JDCOE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdcolor.c" +DEP_CPP_JDCOL=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jdcolor.obj" : $(SOURCE) $(DEP_CPP_JDCOL) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jddctmgr.c" +DEP_CPP_JDDCT=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jdct.h"\ + + +"$(INTDIR)\jddctmgr.obj" : $(SOURCE) $(DEP_CPP_JDDCT) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdhuff.c" +DEP_CPP_JDHUF=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jdhuff.h"\ + + +"$(INTDIR)\jdhuff.obj" : $(SOURCE) $(DEP_CPP_JDHUF) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdinput.c" +DEP_CPP_JDINP=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jdinput.obj" : $(SOURCE) $(DEP_CPP_JDINP) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdmainct.c" +DEP_CPP_JDMAI=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jdmainct.obj" : $(SOURCE) $(DEP_CPP_JDMAI) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdmarker.c" +DEP_CPP_JDMAR=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jdmarker.obj" : $(SOURCE) $(DEP_CPP_JDMAR) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdmaster.c" +DEP_CPP_JDMAS=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jdmaster.obj" : $(SOURCE) $(DEP_CPP_JDMAS) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdmerge.c" +DEP_CPP_JDMER=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jdmerge.obj" : $(SOURCE) $(DEP_CPP_JDMER) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdphuff.c" +DEP_CPP_JDPHU=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jdhuff.h"\ + + +"$(INTDIR)\jdphuff.obj" : $(SOURCE) $(DEP_CPP_JDPHU) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdpostct.c" +DEP_CPP_JDPOS=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jdpostct.obj" : $(SOURCE) $(DEP_CPP_JDPOS) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdsample.c" +DEP_CPP_JDSAM=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jdsample.obj" : $(SOURCE) $(DEP_CPP_JDSAM) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jdtrans.c" +DEP_CPP_JDTRA=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jdtrans.obj" : $(SOURCE) $(DEP_CPP_JDTRA) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jerror.c" +DEP_CPP_JERRO=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jversion.h"\ + "jerror.h"\ + + +"$(INTDIR)\jerror.obj" : $(SOURCE) $(DEP_CPP_JERRO) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jfdctflt.c" +DEP_CPP_JFDCT=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jdct.h"\ + + +"$(INTDIR)\jfdctflt.obj" : $(SOURCE) $(DEP_CPP_JFDCT) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jfdctfst.c" +DEP_CPP_JFDCTF=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jdct.h"\ + + +"$(INTDIR)\jfdctfst.obj" : $(SOURCE) $(DEP_CPP_JFDCTF) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jfdctint.c" +DEP_CPP_JFDCTI=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jdct.h"\ + + +"$(INTDIR)\jfdctint.obj" : $(SOURCE) $(DEP_CPP_JFDCTI) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jidctflt.c" +DEP_CPP_JIDCT=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jdct.h"\ + + +"$(INTDIR)\jidctflt.obj" : $(SOURCE) $(DEP_CPP_JIDCT) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jidctfst.c" +DEP_CPP_JIDCTF=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jdct.h"\ + + +"$(INTDIR)\jidctfst.obj" : $(SOURCE) $(DEP_CPP_JIDCTF) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jidctint.c" +DEP_CPP_JIDCTI=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jdct.h"\ + + +"$(INTDIR)\jidctint.obj" : $(SOURCE) $(DEP_CPP_JIDCTI) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jidctred.c" +DEP_CPP_JIDCTR=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jdct.h"\ + + +"$(INTDIR)\jidctred.obj" : $(SOURCE) $(DEP_CPP_JIDCTR) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jquant1.c" +DEP_CPP_JQUAN=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jquant1.obj" : $(SOURCE) $(DEP_CPP_JQUAN) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jquant2.c" +DEP_CPP_JQUANT=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jquant2.obj" : $(SOURCE) $(DEP_CPP_JQUANT) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jutils.c" +DEP_CPP_JUTIL=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + + +"$(INTDIR)\jutils.obj" : $(SOURCE) $(DEP_CPP_JUTIL) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jmemmgr.c" +DEP_CPP_JMEMM=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jmemsys.h"\ + + +"$(INTDIR)\jmemmgr.obj" : $(SOURCE) $(DEP_CPP_JMEMM) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="jmemnobs.c" +DEP_CPP_JMEMN=\ + "jinclude.h"\ + "jconfig.h"\ + "jpeglib.h"\ + "jmorecfg.h"\ + "jpegint.h"\ + "jerror.h"\ + "jmemsys.h"\ + + +"$(INTDIR)\jmemnobs.obj" : $(SOURCE) $(DEP_CPP_JMEMN) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +# End Target +# End Project +################################################################################ + diff --git a/Build/source/extra/jpeg/makeproj.mac b/Build/source/extra/jpeg/makeproj.mac new file mode 100644 index 00000000000..ed277c83da8 --- /dev/null +++ b/Build/source/extra/jpeg/makeproj.mac @@ -0,0 +1,213 @@ +-- +-- makeproj.mac +-- +-- This AppleScript builds Code Warrior PRO Release 2 project files for the +-- libjpeg library as well as the test programs 'cjpeg', 'djpeg', 'jpegtran'. +-- (We'd distribute real project files, except they're not text +-- and would create maintenance headaches.) +-- +-- The script then compiles and links the library and the test programs. +-- NOTE: if you haven't already created a 'jconfig.h' file, the script +-- automatically copies 'jconfig.mac' to 'jconfig.h'. +-- +-- To use this script, you must have AppleScript 1.1 or later installed +-- and a suitable AppleScript editor like Script Editor or Script Debugger +-- (http://www.latenightsw.com). Open this file with your AppleScript +-- editor and execute the "run" command to build the projects. +-- +-- Thanks to Dan Sears and Don Agro for this script. +-- Questions about this script can be addressed to dogpark@interlog.com +-- + +on run + + choose folder with prompt ">>> Select IJG source folder <<<" + set ijg_folder to result + + choose folder with prompt ">>> Select MetroWerks folder <<<" + set cw_folder to result + + -- if jconfig.h doesn't already exist, copy jconfig.mac + + tell application "Finder" + if not (exists file "jconfig.h" of ijg_folder) then + duplicate {file "jconfig.mac" of folder ijg_folder} + select file "jconfig.mac copy" of folder ijg_folder + set name of selection to "jconfig.h" + end if + end tell + + tell application "CodeWarrior IDE 2.1" + with timeout of 10000 seconds + + -- create libjpeg project + + activate + Create Project (ijg_folder as string) & "libjpeg.proj" + Set Preferences of panel "Target Settings" to {Target Name:"libjpeg"} + Set Preferences of panel "PPC Project" to {File Name:"libjpeg"} + Set Preferences of panel "Target Settings" to {Linker:"MacOS PPC Linker"} + Set Preferences of panel "PPC Project" to {Project Type:library} + Set Preferences of panel "C/C++ Compiler" to {ANSI Strict:true} + Set Preferences of panel "C/C++ Compiler" to {Enums Always Ints:true} + Set Preferences of panel "PPC Codegen" to {Struct Alignment:PowerPC} + Set Preferences of panel "PPC Linker" to {Generate SYM File:false} + + Add Files (ijg_folder as string) & "jcapimin.c" To Segment 1 + Add Files (ijg_folder as string) & "jcapistd.c" To Segment 1 + Add Files (ijg_folder as string) & "jctrans.c" To Segment 1 + Add Files (ijg_folder as string) & "jcparam.c" To Segment 1 + Add Files (ijg_folder as string) & "jdatadst.c" To Segment 1 + Add Files (ijg_folder as string) & "jcinit.c" To Segment 1 + Add Files (ijg_folder as string) & "jcmaster.c" To Segment 1 + Add Files (ijg_folder as string) & "jcmarker.c" To Segment 1 + Add Files (ijg_folder as string) & "jcmainct.c" To Segment 1 + Add Files (ijg_folder as string) & "jcprepct.c" To Segment 1 + Add Files (ijg_folder as string) & "jccoefct.c" To Segment 1 + Add Files (ijg_folder as string) & "jccolor.c" To Segment 1 + Add Files (ijg_folder as string) & "jcsample.c" To Segment 1 + Add Files (ijg_folder as string) & "jchuff.c" To Segment 1 + Add Files (ijg_folder as string) & "jcphuff.c" To Segment 1 + Add Files (ijg_folder as string) & "jcdctmgr.c" To Segment 1 + Add Files (ijg_folder as string) & "jfdctfst.c" To Segment 1 + Add Files (ijg_folder as string) & "jfdctflt.c" To Segment 1 + Add Files (ijg_folder as string) & "jfdctint.c" To Segment 1 + Add Files (ijg_folder as string) & "jdapimin.c" To Segment 1 + Add Files (ijg_folder as string) & "jdapistd.c" To Segment 1 + Add Files (ijg_folder as string) & "jdtrans.c" To Segment 1 + Add Files (ijg_folder as string) & "jdatasrc.c" To Segment 1 + Add Files (ijg_folder as string) & "jdmaster.c" To Segment 1 + Add Files (ijg_folder as string) & "jdinput.c" To Segment 1 + Add Files (ijg_folder as string) & "jdmarker.c" To Segment 1 + Add Files (ijg_folder as string) & "jdhuff.c" To Segment 1 + Add Files (ijg_folder as string) & "jdphuff.c" To Segment 1 + Add Files (ijg_folder as string) & "jdmainct.c" To Segment 1 + Add Files (ijg_folder as string) & "jdcoefct.c" To Segment 1 + Add Files (ijg_folder as string) & "jdpostct.c" To Segment 1 + Add Files (ijg_folder as string) & "jddctmgr.c" To Segment 1 + Add Files (ijg_folder as string) & "jidctfst.c" To Segment 1 + Add Files (ijg_folder as string) & "jidctflt.c" To Segment 1 + Add Files (ijg_folder as string) & "jidctint.c" To Segment 1 + Add Files (ijg_folder as string) & "jidctred.c" To Segment 1 + Add Files (ijg_folder as string) & "jdsample.c" To Segment 1 + Add Files (ijg_folder as string) & "jdcolor.c" To Segment 1 + Add Files (ijg_folder as string) & "jquant1.c" To Segment 1 + Add Files (ijg_folder as string) & "jquant2.c" To Segment 1 + Add Files (ijg_folder as string) & "jdmerge.c" To Segment 1 + Add Files (ijg_folder as string) & "jcomapi.c" To Segment 1 + Add Files (ijg_folder as string) & "jutils.c" To Segment 1 + Add Files (ijg_folder as string) & "jerror.c" To Segment 1 + Add Files (ijg_folder as string) & "jmemmgr.c" To Segment 1 + Add Files (ijg_folder as string) & "jmemmac.c" To Segment 1 + + -- compile and link the library + + Make Project + Close Project + + -- create cjpeg project + + activate + Create Project (ijg_folder as string) & "cjpeg.proj" + Set Preferences of panel "Target Settings" to {Target Name:"cjpeg"} + Set Preferences of panel "PPC Project" to {File Name:"cjpeg"} + Set Preferences of panel "Target Settings" to {Linker:"MacOS PPC Linker"} + Set Preferences of panel "C/C++ Compiler" to {ANSI Strict:true} + Set Preferences of panel "C/C++ Compiler" to {Enums Always Ints:true} + Set Preferences of panel "PPC Codegen" to {Struct Alignment:PowerPC} + Set Preferences of panel "PPC Linker" to {Generate SYM File:false} + + Add Files (ijg_folder as string) & "cjpeg.c" To Segment 1 + Add Files (ijg_folder as string) & "rdppm.c" To Segment 1 + Add Files (ijg_folder as string) & "rdgif.c" To Segment 1 + Add Files (ijg_folder as string) & "rdtarga.c" To Segment 1 + Add Files (ijg_folder as string) & "rdrle.c" To Segment 1 + Add Files (ijg_folder as string) & "rdbmp.c" To Segment 1 + Add Files (ijg_folder as string) & "rdswitch.c" To Segment 1 + Add Files (ijg_folder as string) & "cdjpeg.c" To Segment 1 + + Add Files (ijg_folder as string) & "libjpeg" To Segment 2 + + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL C.PPC.Lib" To Segment 3 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL SIOUX.PPC.Lib" To Segment 3 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:Runtime:Runtime PPC:MSL RuntimePPC.Lib" To Segment 3 + + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:InterfaceLib" To Segment 4 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:MathLib" To Segment 4 + + -- compile and link cjpeg + + Make Project + Close Project + + -- create djpeg project + + activate + Create Project (ijg_folder as string) & "djpeg.proj" + Set Preferences of panel "Target Settings" to {Target Name:"djpeg"} + Set Preferences of panel "PPC Project" to {File Name:"djpeg"} + Set Preferences of panel "Target Settings" to {Linker:"MacOS PPC Linker"} + Set Preferences of panel "C/C++ Compiler" to {ANSI Strict:true} + Set Preferences of panel "C/C++ Compiler" to {Enums Always Ints:true} + Set Preferences of panel "PPC Codegen" to {Struct Alignment:PowerPC} + Set Preferences of panel "PPC Linker" to {Generate SYM File:false} + + Add Files (ijg_folder as string) & "djpeg.c" To Segment 1 + Add Files (ijg_folder as string) & "wrppm.c" To Segment 1 + Add Files (ijg_folder as string) & "wrgif.c" To Segment 1 + Add Files (ijg_folder as string) & "wrtarga.c" To Segment 1 + Add Files (ijg_folder as string) & "wrrle.c" To Segment 1 + Add Files (ijg_folder as string) & "wrbmp.c" To Segment 1 + Add Files (ijg_folder as string) & "rdcolmap.c" To Segment 1 + Add Files (ijg_folder as string) & "cdjpeg.c" To Segment 1 + + Add Files (ijg_folder as string) & "libjpeg" To Segment 2 + + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL C.PPC.Lib" To Segment 3 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL SIOUX.PPC.Lib" To Segment 3 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:Runtime:Runtime PPC:MSL RuntimePPC.Lib" To Segment 3 + + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:InterfaceLib" To Segment 4 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:MathLib" To Segment 4 + + -- compile and link djpeg + + Make Project + Close Project + + -- create jpegtran project + + activate + Create Project (ijg_folder as string) & "jpegtran.proj" + Set Preferences of panel "Target Settings" to {Target Name:"jpegtran"} + Set Preferences of panel "PPC Project" to {File Name:"jpegtran"} + Set Preferences of panel "Target Settings" to {Linker:"MacOS PPC Linker"} + Set Preferences of panel "C/C++ Compiler" to {ANSI Strict:true} + Set Preferences of panel "C/C++ Compiler" to {Enums Always Ints:true} + Set Preferences of panel "PPC Codegen" to {Struct Alignment:PowerPC} + Set Preferences of panel "PPC Linker" to {Generate SYM File:false} + + Add Files (ijg_folder as string) & "jpegtran.c" To Segment 1 + Add Files (ijg_folder as string) & "rdswitch.c" To Segment 1 + Add Files (ijg_folder as string) & "cdjpeg.c" To Segment 1 + Add Files (ijg_folder as string) & "transupp.c" To Segment 1 + + Add Files (ijg_folder as string) & "libjpeg" To Segment 2 + + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL C.PPC.Lib" To Segment 3 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL SIOUX.PPC.Lib" To Segment 3 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:Runtime:Runtime PPC:MSL RuntimePPC.Lib" To Segment 3 + + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:InterfaceLib" To Segment 4 + Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:MathLib" To Segment 4 + + -- compile and link jpegtran + + Make Project + Close Project + + quit + + end timeout + end tell +end run diff --git a/Build/source/extra/jpeg/makljpeg.st b/Build/source/extra/jpeg/makljpeg.st new file mode 100644 index 00000000000..813493ea878 --- /dev/null +++ b/Build/source/extra/jpeg/makljpeg.st @@ -0,0 +1,70 @@ +; Project file for Independent JPEG Group's software +; +; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. +; Thanks to Frank Moehle (Frank.Moehle@arbi.informatik.uni-oldenburg.de), +; Dr. B. Setzepfandt (bernd@gina.uni-muenster.de), +; and Guido Vollbeding (guivol@esc.de). +; +; To use this file, rename it to libjpeg.prj. +; Read installation instructions before trying to make the program! +; +; +; * * * Output file * * * +libjpeg.lib +; +; * * * COMPILER OPTIONS * * * +.C[-P] ; absolute calls +.C[-M] ; and no string merging, folks +.C[-w-cln] ; no "constant is long" warnings +.C[-w-par] ; no "parameter xxxx unused" +.C[-w-rch] ; no "unreachable code" +.C[-wsig] ; warn if significant digits may be lost +.L[-J] ; link new Obj-format (so we get a library) += +; * * * * List of modules * * * * +jcapimin.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcapistd.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jccoefct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jccolor.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcdctmgr.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jchuff.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jchuff.h) +jcinit.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcmainct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcmarker.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcmaster.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcomapi.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcparam.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcphuff.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jchuff.h) +jcprepct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jcsample.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jctrans.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdapimin.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdapistd.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdatadst.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h) +jdatasrc.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h) +jdcoefct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdcolor.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jddctmgr.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jdhuff.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdhuff.h) +jdinput.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdmainct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdmarker.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdmaster.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdmerge.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdphuff.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdhuff.h) +jdpostct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdsample.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jdtrans.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jerror.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jversion.h,jerror.h) +jfdctflt.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jfdctfst.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jfdctint.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jidctflt.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jidctfst.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jidctint.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jidctred.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) +jquant1.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jquant2.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jutils.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) +jmemmgr.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jmemsys.h) +jmemansi.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jmemsys.h) diff --git a/Build/source/extra/jpeg/maktjpeg.st b/Build/source/extra/jpeg/maktjpeg.st new file mode 100644 index 00000000000..31f4d169cdb --- /dev/null +++ b/Build/source/extra/jpeg/maktjpeg.st @@ -0,0 +1,32 @@ +; Project file for Independent JPEG Group's software +; +; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. +; Thanks to Frank Moehle (Frank.Moehle@arbi.informatik.uni-oldenburg.de), +; Dr. B. Setzepfandt (bernd@gina.uni-muenster.de), +; and Guido Vollbeding (guivol@esc.de). +; +; To use this file, rename it to jpegtran.prj. +; If you are using Turbo C, change filenames beginning with "pc..." to "tc..." +; Read installation instructions before trying to make the program! +; +; +; * * * Output file * * * +jpegtran.ttp +; +; * * * COMPILER OPTIONS * * * +.C[-P] ; absolute calls +.C[-M] ; and no string merging, folks +.C[-w-cln] ; no "constant is long" warnings +.C[-w-par] ; no "parameter xxxx unused" +.C[-w-rch] ; no "unreachable code" +.C[-wsig] ; warn if significant digits may be lost += +; * * * * List of modules * * * * +pcstart.o +jpegtran.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h,transupp.h,jversion.h) +cdjpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +rdswitch.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) +transupp.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,transupp.h) +libjpeg.lib ; built by libjpeg.prj +pcstdlib.lib ; standard library +pcextlib.lib ; extended library diff --git a/Build/source/extra/jpeg/makvms.opt b/Build/source/extra/jpeg/makvms.opt new file mode 100644 index 00000000000..675e8fe98a4 --- /dev/null +++ b/Build/source/extra/jpeg/makvms.opt @@ -0,0 +1,4 @@ +! A pointer to the VAX/VMS C Run-Time Shareable Library. +! This file is needed by makefile.mms and makefile.vms, +! but only for the older VAX C compiler. DEC C does not need it. +Sys$Library:VAXCRTL.EXE /Share diff --git a/Build/source/extra/jpeg/rdbmp.c b/Build/source/extra/jpeg/rdbmp.c new file mode 100644 index 00000000000..b05fe2ac47c --- /dev/null +++ b/Build/source/extra/jpeg/rdbmp.c @@ -0,0 +1,439 @@ +/* + * rdbmp.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to read input images in Microsoft "BMP" + * format (MS Windows 3.x, OS/2 1.x, and OS/2 2.x flavors). + * Currently, only 8-bit and 24-bit images are supported, not 1-bit or + * 4-bit (feeding such low-depth images into JPEG would be silly anyway). + * Also, we don't support RLE-compressed files. + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume input from + * an ordinary stdio stream. They further assume that reading begins + * at the start of the file; start_input may need work if the + * user interface has already read some data (e.g., to determine that + * the file is indeed BMP format). + * + * This code contributed by James Arthur Boucher. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef BMP_SUPPORTED + + +/* Macros to deal with unsigned chars as efficiently as compiler allows */ + +#ifdef HAVE_UNSIGNED_CHAR +typedef unsigned char U_CHAR; +#define UCH(x) ((int) (x)) +#else /* !HAVE_UNSIGNED_CHAR */ +#ifdef CHAR_IS_UNSIGNED +typedef char U_CHAR; +#define UCH(x) ((int) (x)) +#else +typedef char U_CHAR; +#define UCH(x) ((int) (x) & 0xFF) +#endif +#endif /* HAVE_UNSIGNED_CHAR */ + + +#define ReadOK(file,buffer,len) (JFREAD(file,buffer,len) == ((size_t) (len))) + + +/* Private version of data source object */ + +typedef struct _bmp_source_struct * bmp_source_ptr; + +typedef struct _bmp_source_struct { + struct cjpeg_source_struct pub; /* public fields */ + + j_compress_ptr cinfo; /* back link saves passing separate parm */ + + JSAMPARRAY colormap; /* BMP colormap (converted to my format) */ + + jvirt_sarray_ptr whole_image; /* Needed to reverse row order */ + JDIMENSION source_row; /* Current source row number */ + JDIMENSION row_width; /* Physical width of scanlines in file */ + + int bits_per_pixel; /* remembers 8- or 24-bit format */ +} bmp_source_struct; + + +LOCAL(int) +read_byte (bmp_source_ptr sinfo) +/* Read next byte from BMP file */ +{ + register FILE *infile = sinfo->pub.input_file; + register int c; + + if ((c = getc(infile)) == EOF) + ERREXIT(sinfo->cinfo, JERR_INPUT_EOF); + return c; +} + + +LOCAL(void) +read_colormap (bmp_source_ptr sinfo, int cmaplen, int mapentrysize) +/* Read the colormap from a BMP file */ +{ + int i; + + switch (mapentrysize) { + case 3: + /* BGR format (occurs in OS/2 files) */ + for (i = 0; i < cmaplen; i++) { + sinfo->colormap[2][i] = (JSAMPLE) read_byte(sinfo); + sinfo->colormap[1][i] = (JSAMPLE) read_byte(sinfo); + sinfo->colormap[0][i] = (JSAMPLE) read_byte(sinfo); + } + break; + case 4: + /* BGR0 format (occurs in MS Windows files) */ + for (i = 0; i < cmaplen; i++) { + sinfo->colormap[2][i] = (JSAMPLE) read_byte(sinfo); + sinfo->colormap[1][i] = (JSAMPLE) read_byte(sinfo); + sinfo->colormap[0][i] = (JSAMPLE) read_byte(sinfo); + (void) read_byte(sinfo); + } + break; + default: + ERREXIT(sinfo->cinfo, JERR_BMP_BADCMAP); + break; + } +} + + +/* + * Read one row of pixels. + * The image has been read into the whole_image array, but is otherwise + * unprocessed. We must read it out in top-to-bottom row order, and if + * it is an 8-bit image, we must expand colormapped pixels to 24bit format. + */ + +METHODDEF(JDIMENSION) +get_8bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading 8-bit colormap indexes */ +{ + bmp_source_ptr source = (bmp_source_ptr) sinfo; + register JSAMPARRAY colormap = source->colormap; + JSAMPARRAY image_ptr; + register int t; + register JSAMPROW inptr, outptr; + register JDIMENSION col; + + /* Fetch next row from virtual array */ + source->source_row--; + image_ptr = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->whole_image, + source->source_row, (JDIMENSION) 1, FALSE); + + /* Expand the colormap indexes to real data */ + inptr = image_ptr[0]; + outptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + t = GETJSAMPLE(*inptr++); + *outptr++ = colormap[0][t]; /* can omit GETJSAMPLE() safely */ + *outptr++ = colormap[1][t]; + *outptr++ = colormap[2][t]; + } + + return 1; +} + + +METHODDEF(JDIMENSION) +get_24bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading 24-bit pixels */ +{ + bmp_source_ptr source = (bmp_source_ptr) sinfo; + JSAMPARRAY image_ptr; + register JSAMPROW inptr, outptr; + register JDIMENSION col; + + /* Fetch next row from virtual array */ + source->source_row--; + image_ptr = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->whole_image, + source->source_row, (JDIMENSION) 1, FALSE); + + /* Transfer data. Note source values are in BGR order + * (even though Microsoft's own documents say the opposite). + */ + inptr = image_ptr[0]; + outptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + outptr[2] = *inptr++; /* can omit GETJSAMPLE() safely */ + outptr[1] = *inptr++; + outptr[0] = *inptr++; + outptr += 3; + } + + return 1; +} + + +/* + * This method loads the image into whole_image during the first call on + * get_pixel_rows. The get_pixel_rows pointer is then adjusted to call + * get_8bit_row or get_24bit_row on subsequent calls. + */ + +METHODDEF(JDIMENSION) +preload_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + bmp_source_ptr source = (bmp_source_ptr) sinfo; + register FILE *infile = source->pub.input_file; + register int c; + register JSAMPROW out_ptr; + JSAMPARRAY image_ptr; + JDIMENSION row, col; + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; + + /* Read the data into a virtual array in input-file row order. */ + for (row = 0; row < cinfo->image_height; row++) { + if (progress != NULL) { + progress->pub.pass_counter = (long) row; + progress->pub.pass_limit = (long) cinfo->image_height; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } + image_ptr = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->whole_image, + row, (JDIMENSION) 1, TRUE); + out_ptr = image_ptr[0]; + for (col = source->row_width; col > 0; col--) { + /* inline copy of read_byte() for speed */ + if ((c = getc(infile)) == EOF) + ERREXIT(cinfo, JERR_INPUT_EOF); + *out_ptr++ = (JSAMPLE) c; + } + } + if (progress != NULL) + progress->completed_extra_passes++; + + /* Set up to read from the virtual array in top-to-bottom order */ + switch (source->bits_per_pixel) { + case 8: + source->pub.get_pixel_rows = get_8bit_row; + break; + case 24: + source->pub.get_pixel_rows = get_24bit_row; + break; + default: + ERREXIT(cinfo, JERR_BMP_BADDEPTH); + } + source->source_row = cinfo->image_height; + + /* And read the first row */ + return (*source->pub.get_pixel_rows) (cinfo, sinfo); +} + + +/* + * Read the file header; return image size and component count. + */ + +METHODDEF(void) +start_input_bmp (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + bmp_source_ptr source = (bmp_source_ptr) sinfo; + U_CHAR bmpfileheader[14]; + U_CHAR bmpinfoheader[64]; +#define GET_2B(array,offset) ((unsigned int) UCH(array[offset]) + \ + (((unsigned int) UCH(array[offset+1])) << 8)) +#define GET_4B(array,offset) ((INT32) UCH(array[offset]) + \ + (((INT32) UCH(array[offset+1])) << 8) + \ + (((INT32) UCH(array[offset+2])) << 16) + \ + (((INT32) UCH(array[offset+3])) << 24)) + INT32 bfOffBits; + INT32 headerSize; + INT32 biWidth = 0; /* initialize to avoid compiler warning */ + INT32 biHeight = 0; + unsigned int biPlanes; + INT32 biCompression; + INT32 biXPelsPerMeter,biYPelsPerMeter; + INT32 biClrUsed = 0; + int mapentrysize = 0; /* 0 indicates no colormap */ + INT32 bPad; + JDIMENSION row_width; + + /* Read and verify the bitmap file header */ + if (! ReadOK(source->pub.input_file, bmpfileheader, 14)) + ERREXIT(cinfo, JERR_INPUT_EOF); + if (GET_2B(bmpfileheader,0) != 0x4D42) /* 'BM' */ + ERREXIT(cinfo, JERR_BMP_NOT); + bfOffBits = (INT32) GET_4B(bmpfileheader,10); + /* We ignore the remaining fileheader fields */ + + /* The infoheader might be 12 bytes (OS/2 1.x), 40 bytes (Windows), + * or 64 bytes (OS/2 2.x). Check the first 4 bytes to find out which. + */ + if (! ReadOK(source->pub.input_file, bmpinfoheader, 4)) + ERREXIT(cinfo, JERR_INPUT_EOF); + headerSize = (INT32) GET_4B(bmpinfoheader,0); + if (headerSize < 12 || headerSize > 64) + ERREXIT(cinfo, JERR_BMP_BADHEADER); + if (! ReadOK(source->pub.input_file, bmpinfoheader+4, headerSize-4)) + ERREXIT(cinfo, JERR_INPUT_EOF); + + switch ((int) headerSize) { + case 12: + /* Decode OS/2 1.x header (Microsoft calls this a BITMAPCOREHEADER) */ + biWidth = (INT32) GET_2B(bmpinfoheader,4); + biHeight = (INT32) GET_2B(bmpinfoheader,6); + biPlanes = GET_2B(bmpinfoheader,8); + source->bits_per_pixel = (int) GET_2B(bmpinfoheader,10); + + switch (source->bits_per_pixel) { + case 8: /* colormapped image */ + mapentrysize = 3; /* OS/2 uses RGBTRIPLE colormap */ + TRACEMS2(cinfo, 1, JTRC_BMP_OS2_MAPPED, (int) biWidth, (int) biHeight); + break; + case 24: /* RGB image */ + TRACEMS2(cinfo, 1, JTRC_BMP_OS2, (int) biWidth, (int) biHeight); + break; + default: + ERREXIT(cinfo, JERR_BMP_BADDEPTH); + break; + } + if (biPlanes != 1) + ERREXIT(cinfo, JERR_BMP_BADPLANES); + break; + case 40: + case 64: + /* Decode Windows 3.x header (Microsoft calls this a BITMAPINFOHEADER) */ + /* or OS/2 2.x header, which has additional fields that we ignore */ + biWidth = GET_4B(bmpinfoheader,4); + biHeight = GET_4B(bmpinfoheader,8); + biPlanes = GET_2B(bmpinfoheader,12); + source->bits_per_pixel = (int) GET_2B(bmpinfoheader,14); + biCompression = GET_4B(bmpinfoheader,16); + biXPelsPerMeter = GET_4B(bmpinfoheader,24); + biYPelsPerMeter = GET_4B(bmpinfoheader,28); + biClrUsed = GET_4B(bmpinfoheader,32); + /* biSizeImage, biClrImportant fields are ignored */ + + switch (source->bits_per_pixel) { + case 8: /* colormapped image */ + mapentrysize = 4; /* Windows uses RGBQUAD colormap */ + TRACEMS2(cinfo, 1, JTRC_BMP_MAPPED, (int) biWidth, (int) biHeight); + break; + case 24: /* RGB image */ + TRACEMS2(cinfo, 1, JTRC_BMP, (int) biWidth, (int) biHeight); + break; + default: + ERREXIT(cinfo, JERR_BMP_BADDEPTH); + break; + } + if (biPlanes != 1) + ERREXIT(cinfo, JERR_BMP_BADPLANES); + if (biCompression != 0) + ERREXIT(cinfo, JERR_BMP_COMPRESSED); + + if (biXPelsPerMeter > 0 && biYPelsPerMeter > 0) { + /* Set JFIF density parameters from the BMP data */ + cinfo->X_density = (UINT16) (biXPelsPerMeter/100); /* 100 cm per meter */ + cinfo->Y_density = (UINT16) (biYPelsPerMeter/100); + cinfo->density_unit = 2; /* dots/cm */ + } + break; + default: + ERREXIT(cinfo, JERR_BMP_BADHEADER); + break; + } + + /* Compute distance to bitmap data --- will adjust for colormap below */ + bPad = bfOffBits - (headerSize + 14); + + /* Read the colormap, if any */ + if (mapentrysize > 0) { + if (biClrUsed <= 0) + biClrUsed = 256; /* assume it's 256 */ + else if (biClrUsed > 256) + ERREXIT(cinfo, JERR_BMP_BADCMAP); + /* Allocate space to store the colormap */ + source->colormap = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) biClrUsed, (JDIMENSION) 3); + /* and read it from the file */ + read_colormap(source, (int) biClrUsed, mapentrysize); + /* account for size of colormap */ + bPad -= biClrUsed * mapentrysize; + } + + /* Skip any remaining pad bytes */ + if (bPad < 0) /* incorrect bfOffBits value? */ + ERREXIT(cinfo, JERR_BMP_BADHEADER); + while (--bPad >= 0) { + (void) read_byte(source); + } + + /* Compute row width in file, including padding to 4-byte boundary */ + if (source->bits_per_pixel == 24) + row_width = (JDIMENSION) (biWidth * 3); + else + row_width = (JDIMENSION) biWidth; + while ((row_width & 3) != 0) row_width++; + source->row_width = row_width; + + /* Allocate space for inversion array, prepare for preload pass */ + source->whole_image = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + row_width, (JDIMENSION) biHeight, (JDIMENSION) 1); + source->pub.get_pixel_rows = preload_image; + if (cinfo->progress != NULL) { + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; + progress->total_extra_passes++; /* count file input as separate pass */ + } + + /* Allocate one-row buffer for returned data */ + source->pub.buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) (biWidth * 3), (JDIMENSION) 1); + source->pub.buffer_height = 1; + + cinfo->in_color_space = JCS_RGB; + cinfo->input_components = 3; + cinfo->data_precision = 8; + cinfo->image_width = (JDIMENSION) biWidth; + cinfo->image_height = (JDIMENSION) biHeight; +} + + +/* + * Finish up at the end of the file. + */ + +METHODDEF(void) +finish_input_bmp (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + /* no work */ +} + + +/* + * The module selection routine for BMP format input. + */ + +GLOBAL(cjpeg_source_ptr) +jinit_read_bmp (j_compress_ptr cinfo) +{ + bmp_source_ptr source; + + /* Create module interface object */ + source = (bmp_source_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(bmp_source_struct)); + source->cinfo = cinfo; /* make back link for subroutines */ + /* Fill in method ptrs, except get_pixel_rows which start_input sets */ + source->pub.start_input = start_input_bmp; + source->pub.finish_input = finish_input_bmp; + + return (cjpeg_source_ptr) source; +} + +#endif /* BMP_SUPPORTED */ diff --git a/Build/source/extra/jpeg/rdcolmap.c b/Build/source/extra/jpeg/rdcolmap.c new file mode 100644 index 00000000000..42b343763b5 --- /dev/null +++ b/Build/source/extra/jpeg/rdcolmap.c @@ -0,0 +1,253 @@ +/* + * rdcolmap.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file implements djpeg's "-map file" switch. It reads a source image + * and constructs a colormap to be supplied to the JPEG decompressor. + * + * Currently, these file formats are supported for the map file: + * GIF: the contents of the GIF's global colormap are used. + * PPM (either text or raw flavor): the entire file is read and + * each unique pixel value is entered in the map. + * Note that reading a large PPM file will be horrendously slow. + * Typically, a PPM-format map file should contain just one pixel + * of each desired color. Such a file can be extracted from an + * ordinary image PPM file with ppmtomap(1). + * + * Rescaling a PPM that has a maxval unequal to MAXJSAMPLE is not + * currently implemented. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef QUANT_2PASS_SUPPORTED /* otherwise can't quantize to supplied map */ + +/* Portions of this code are based on the PBMPLUS library, which is: +** +** Copyright (C) 1988 by Jef Poskanzer. +** +** Permission to use, copy, modify, and distribute this software and its +** documentation for any purpose and without fee is hereby granted, provided +** that the above copyright notice appear in all copies and that both that +** copyright notice and this permission notice appear in supporting +** documentation. This software is provided "as is" without express or +** implied warranty. +*/ + + +/* + * Add a (potentially) new color to the color map. + */ + +LOCAL(void) +add_map_entry (j_decompress_ptr cinfo, int R, int G, int B) +{ + JSAMPROW colormap0 = cinfo->colormap[0]; + JSAMPROW colormap1 = cinfo->colormap[1]; + JSAMPROW colormap2 = cinfo->colormap[2]; + int ncolors = cinfo->actual_number_of_colors; + int index; + + /* Check for duplicate color. */ + for (index = 0; index < ncolors; index++) { + if (GETJSAMPLE(colormap0[index]) == R && + GETJSAMPLE(colormap1[index]) == G && + GETJSAMPLE(colormap2[index]) == B) + return; /* color is already in map */ + } + + /* Check for map overflow. */ + if (ncolors >= (MAXJSAMPLE+1)) + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, (MAXJSAMPLE+1)); + + /* OK, add color to map. */ + colormap0[ncolors] = (JSAMPLE) R; + colormap1[ncolors] = (JSAMPLE) G; + colormap2[ncolors] = (JSAMPLE) B; + cinfo->actual_number_of_colors++; +} + + +/* + * Extract color map from a GIF file. + */ + +LOCAL(void) +read_gif_map (j_decompress_ptr cinfo, FILE * infile) +{ + int header[13]; + int i, colormaplen; + int R, G, B; + + /* Initial 'G' has already been read by read_color_map */ + /* Read the rest of the GIF header and logical screen descriptor */ + for (i = 1; i < 13; i++) { + if ((header[i] = getc(infile)) == EOF) + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + } + + /* Verify GIF Header */ + if (header[1] != 'I' || header[2] != 'F') + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + + /* There must be a global color map. */ + if ((header[10] & 0x80) == 0) + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + + /* OK, fetch it. */ + colormaplen = 2 << (header[10] & 0x07); + + for (i = 0; i < colormaplen; i++) { + R = getc(infile); + G = getc(infile); + B = getc(infile); + if (R == EOF || G == EOF || B == EOF) + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + add_map_entry(cinfo, + R << (BITS_IN_JSAMPLE-8), + G << (BITS_IN_JSAMPLE-8), + B << (BITS_IN_JSAMPLE-8)); + } +} + + +/* Support routines for reading PPM */ + + +LOCAL(int) +pbm_getc (FILE * infile) +/* Read next char, skipping over any comments */ +/* A comment/newline sequence is returned as a newline */ +{ + register int ch; + + ch = getc(infile); + if (ch == '#') { + do { + ch = getc(infile); + } while (ch != '\n' && ch != EOF); + } + return ch; +} + + +LOCAL(unsigned int) +read_pbm_integer (j_decompress_ptr cinfo, FILE * infile) +/* Read an unsigned decimal integer from the PPM file */ +/* Swallows one trailing character after the integer */ +/* Note that on a 16-bit-int machine, only values up to 64k can be read. */ +/* This should not be a problem in practice. */ +{ + register int ch; + register unsigned int val; + + /* Skip any leading whitespace */ + do { + ch = pbm_getc(infile); + if (ch == EOF) + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + } while (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r'); + + if (ch < '0' || ch > '9') + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + + val = ch - '0'; + while ((ch = pbm_getc(infile)) >= '0' && ch <= '9') { + val *= 10; + val += ch - '0'; + } + return val; +} + + +/* + * Extract color map from a PPM file. + */ + +LOCAL(void) +read_ppm_map (j_decompress_ptr cinfo, FILE * infile) +{ + int c; + unsigned int w, h, maxval, row, col; + int R, G, B; + + /* Initial 'P' has already been read by read_color_map */ + c = getc(infile); /* save format discriminator for a sec */ + + /* while we fetch the remaining header info */ + w = read_pbm_integer(cinfo, infile); + h = read_pbm_integer(cinfo, infile); + maxval = read_pbm_integer(cinfo, infile); + + if (w <= 0 || h <= 0 || maxval <= 0) /* error check */ + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + + /* For now, we don't support rescaling from an unusual maxval. */ + if (maxval != (unsigned int) MAXJSAMPLE) + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + + switch (c) { + case '3': /* it's a text-format PPM file */ + for (row = 0; row < h; row++) { + for (col = 0; col < w; col++) { + R = read_pbm_integer(cinfo, infile); + G = read_pbm_integer(cinfo, infile); + B = read_pbm_integer(cinfo, infile); + add_map_entry(cinfo, R, G, B); + } + } + break; + + case '6': /* it's a raw-format PPM file */ + for (row = 0; row < h; row++) { + for (col = 0; col < w; col++) { + R = getc(infile); + G = getc(infile); + B = getc(infile); + if (R == EOF || G == EOF || B == EOF) + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + add_map_entry(cinfo, R, G, B); + } + } + break; + + default: + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + break; + } +} + + +/* + * Main entry point from djpeg.c. + * Input: opened input file (from file name argument on command line). + * Output: colormap and actual_number_of_colors fields are set in cinfo. + */ + +GLOBAL(void) +read_color_map (j_decompress_ptr cinfo, FILE * infile) +{ + /* Allocate space for a color map of maximum supported size. */ + cinfo->colormap = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) (MAXJSAMPLE+1), (JDIMENSION) 3); + cinfo->actual_number_of_colors = 0; /* initialize map to empty */ + + /* Read first byte to determine file format */ + switch (getc(infile)) { + case 'G': + read_gif_map(cinfo, infile); + break; + case 'P': + read_ppm_map(cinfo, infile); + break; + default: + ERREXIT(cinfo, JERR_BAD_CMAP_FILE); + break; + } +} + +#endif /* QUANT_2PASS_SUPPORTED */ diff --git a/Build/source/extra/jpeg/rdgif.c b/Build/source/extra/jpeg/rdgif.c new file mode 100644 index 00000000000..b27c1675d76 --- /dev/null +++ b/Build/source/extra/jpeg/rdgif.c @@ -0,0 +1,38 @@ +/* + * rdgif.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to read input images in GIF format. + * + ***************************************************************************** + * NOTE: to avoid entanglements with Unisys' patent on LZW compression, * + * the ability to read GIF files has been removed from the IJG distribution. * + * Sorry about that. * + ***************************************************************************** + * + * We are required to state that + * "The Graphics Interchange Format(c) is the Copyright property of + * CompuServe Incorporated. GIF(sm) is a Service Mark property of + * CompuServe Incorporated." + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef GIF_SUPPORTED + +/* + * The module selection routine for GIF format input. + */ + +GLOBAL(cjpeg_source_ptr) +jinit_read_gif (j_compress_ptr cinfo) +{ + fprintf(stderr, "GIF input is unsupported for legal reasons. Sorry.\n"); + exit(EXIT_FAILURE); + return NULL; /* keep compiler happy */ +} + +#endif /* GIF_SUPPORTED */ diff --git a/Build/source/extra/jpeg/rdjpgcom.1 b/Build/source/extra/jpeg/rdjpgcom.1 new file mode 100644 index 00000000000..2bba04e1a24 --- /dev/null +++ b/Build/source/extra/jpeg/rdjpgcom.1 @@ -0,0 +1,54 @@ +.TH RDJPGCOM 1 "11 October 1997" +.SH NAME +rdjpgcom \- display text comments from a JPEG file +.SH SYNOPSIS +.B rdjpgcom +[ +.B \-verbose +] +[ +.I filename +] +.LP +.SH DESCRIPTION +.LP +.B rdjpgcom +reads the named JPEG/JFIF file, or the standard input if no file is named, +and prints any text comments found in the file on the standard output. +.PP +The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file. +Although the standard doesn't actually define what COM blocks are for, they +are widely used to hold user-supplied text strings. This lets you add +annotations, titles, index terms, etc to your JPEG files, and later retrieve +them as text. COM blocks do not interfere with the image stored in the JPEG +file. The maximum size of a COM block is 64K, but you can have as many of +them as you like in one JPEG file. +.SH OPTIONS +.TP +.B \-verbose +Causes +.B rdjpgcom +to also display the JPEG image dimensions. +.PP +Switch names may be abbreviated, and are not case sensitive. +.SH HINTS +.B rdjpgcom +does not depend on the IJG JPEG library. Its source code is intended as an +illustration of the minimum amount of code required to parse a JPEG file +header correctly. +.PP +In +.B \-verbose +mode, +.B rdjpgcom +will also attempt to print the contents of any "APP12" markers as text. +Some digital cameras produce APP12 markers containing useful textual +information. If you like, you can modify the source code to print +other APPn marker types as well. +.SH SEE ALSO +.BR cjpeg (1), +.BR djpeg (1), +.BR jpegtran (1), +.BR wrjpgcom (1) +.SH AUTHOR +Independent JPEG Group diff --git a/Build/source/extra/jpeg/rdjpgcom.c b/Build/source/extra/jpeg/rdjpgcom.c new file mode 100644 index 00000000000..ffe6fc6218d --- /dev/null +++ b/Build/source/extra/jpeg/rdjpgcom.c @@ -0,0 +1,496 @@ +/* + * rdjpgcom.c + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a very simple stand-alone application that displays + * the text in COM (comment) markers in a JFIF file. + * This may be useful as an example of the minimum logic needed to parse + * JPEG markers. + */ + +#define JPEG_CJPEG_DJPEG /* to get the command-line config symbols */ +#include "jinclude.h" /* get auto-config symbols, */ + +#include /* to declare isupper(), tolower() */ +#ifdef USE_SETMODE +#include /* to declare setmode()'s parameter macros */ +/* If you have setmode() but not , just delete this line: */ +#include /* to declare setmode() */ +#endif + +#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ +#ifdef __MWERKS__ +#include /* Metrowerks needs this */ +#include /* ... and this */ +#endif +#ifdef THINK_C +#include /* Think declares it here */ +#endif +#endif + +#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ +#define READ_BINARY "r" +#else +#ifdef VMS /* VMS is very nonstandard */ +#define READ_BINARY "rb", "ctx=stm" +#else /* standard ANSI-compliant case */ +#define READ_BINARY "rb" +#endif +#endif + +#ifndef EXIT_FAILURE /* define exit() codes if not provided */ +#define EXIT_FAILURE 1 +#endif +#ifndef EXIT_SUCCESS +#ifdef VMS +#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ +#else +#define EXIT_SUCCESS 0 +#endif +#endif + + +/* + * These macros are used to read the input file. + * To reuse this code in another application, you might need to change these. + */ + +static FILE * infile; /* input JPEG file */ + +/* Return next input byte, or EOF if no more */ +#define NEXTBYTE() getc(infile) + + +/* Error exit handler */ +#define ERREXIT(msg) (fprintf(stderr, "%s\n", msg), exit(EXIT_FAILURE)) + + +/* Read one byte, testing for EOF */ +static int +read_1_byte (void) +{ + int c; + + c = NEXTBYTE(); + if (c == EOF) + ERREXIT("Premature EOF in JPEG file"); + return c; +} + +/* Read 2 bytes, convert to unsigned int */ +/* All 2-byte quantities in JPEG markers are MSB first */ +static unsigned int +read_2_bytes (void) +{ + int c1, c2; + + c1 = NEXTBYTE(); + if (c1 == EOF) + ERREXIT("Premature EOF in JPEG file"); + c2 = NEXTBYTE(); + if (c2 == EOF) + ERREXIT("Premature EOF in JPEG file"); + return (((unsigned int) c1) << 8) + ((unsigned int) c2); +} + + +/* + * JPEG markers consist of one or more 0xFF bytes, followed by a marker + * code byte (which is not an FF). Here are the marker codes of interest + * in this program. (See jdmarker.c for a more complete list.) + */ + +#define M_SOF0 0xC0 /* Start Of Frame N */ +#define M_SOF1 0xC1 /* N indicates which compression process */ +#define M_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use */ +#define M_SOF3 0xC3 +#define M_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers */ +#define M_SOF6 0xC6 +#define M_SOF7 0xC7 +#define M_SOF9 0xC9 +#define M_SOF10 0xCA +#define M_SOF11 0xCB +#define M_SOF13 0xCD +#define M_SOF14 0xCE +#define M_SOF15 0xCF +#define M_SOI 0xD8 /* Start Of Image (beginning of datastream) */ +#define M_EOI 0xD9 /* End Of Image (end of datastream) */ +#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */ +#define M_APP0 0xE0 /* Application-specific marker, type N */ +#define M_APP12 0xEC /* (we don't bother to list all 16 APPn's) */ +#define M_COM 0xFE /* COMment */ + + +/* + * Find the next JPEG marker and return its marker code. + * We expect at least one FF byte, possibly more if the compressor used FFs + * to pad the file. + * There could also be non-FF garbage between markers. The treatment of such + * garbage is unspecified; we choose to skip over it but emit a warning msg. + * NB: this routine must not be used after seeing SOS marker, since it will + * not deal correctly with FF/00 sequences in the compressed image data... + */ + +static int +next_marker (void) +{ + int c; + int discarded_bytes = 0; + + /* Find 0xFF byte; count and skip any non-FFs. */ + c = read_1_byte(); + while (c != 0xFF) { + discarded_bytes++; + c = read_1_byte(); + } + /* Get marker code byte, swallowing any duplicate FF bytes. Extra FFs + * are legal as pad bytes, so don't count them in discarded_bytes. + */ + do { + c = read_1_byte(); + } while (c == 0xFF); + + if (discarded_bytes != 0) { + fprintf(stderr, "Warning: garbage data found in JPEG file\n"); + } + + return c; +} + + +/* + * Read the initial marker, which should be SOI. + * For a JFIF file, the first two bytes of the file should be literally + * 0xFF M_SOI. To be more general, we could use next_marker, but if the + * input file weren't actually JPEG at all, next_marker might read the whole + * file and then return a misleading error message... + */ + +static int +first_marker (void) +{ + int c1, c2; + + c1 = NEXTBYTE(); + c2 = NEXTBYTE(); + if (c1 != 0xFF || c2 != M_SOI) + ERREXIT("Not a JPEG file"); + return c2; +} + + +/* + * Most types of marker are followed by a variable-length parameter segment. + * This routine skips over the parameters for any marker we don't otherwise + * want to process. + * Note that we MUST skip the parameter segment explicitly in order not to + * be fooled by 0xFF bytes that might appear within the parameter segment; + * such bytes do NOT introduce new markers. + */ + +static void +skip_variable (void) +/* Skip over an unknown or uninteresting variable-length marker */ +{ + unsigned int length; + + /* Get the marker parameter length count */ + length = read_2_bytes(); + /* Length includes itself, so must be at least 2 */ + if (length < 2) + ERREXIT("Erroneous JPEG marker length"); + length -= 2; + /* Skip over the remaining bytes */ + while (length > 0) { + (void) read_1_byte(); + length--; + } +} + + +/* + * Process a COM marker. + * We want to print out the marker contents as legible text; + * we must guard against non-text junk and varying newline representations. + */ + +static void +process_COM (void) +{ + unsigned int length; + int ch; + int lastch = 0; + + /* Get the marker parameter length count */ + length = read_2_bytes(); + /* Length includes itself, so must be at least 2 */ + if (length < 2) + ERREXIT("Erroneous JPEG marker length"); + length -= 2; + + while (length > 0) { + ch = read_1_byte(); + /* Emit the character in a readable form. + * Nonprintables are converted to \nnn form, + * while \ is converted to \\. + * Newlines in CR, CR/LF, or LF form will be printed as one newline. + */ + if (ch == '\r') { + printf("\n"); + } else if (ch == '\n') { + if (lastch != '\r') + printf("\n"); + } else if (ch == '\\') { + printf("\\\\"); + } else if (isprint(ch)) { + putc(ch, stdout); + } else { + printf("\\%03o", ch); + } + lastch = ch; + length--; + } + printf("\n"); +} + + +/* + * Process a SOFn marker. + * This code is only needed if you want to know the image dimensions... + */ + +static void +process_SOFn (int marker) +{ + unsigned int length; + unsigned int image_height, image_width; + int data_precision, num_components; + const char * process; + int ci; + + length = read_2_bytes(); /* usual parameter length count */ + + data_precision = read_1_byte(); + image_height = read_2_bytes(); + image_width = read_2_bytes(); + num_components = read_1_byte(); + + switch (marker) { + case M_SOF0: process = "Baseline"; break; + case M_SOF1: process = "Extended sequential"; break; + case M_SOF2: process = "Progressive"; break; + case M_SOF3: process = "Lossless"; break; + case M_SOF5: process = "Differential sequential"; break; + case M_SOF6: process = "Differential progressive"; break; + case M_SOF7: process = "Differential lossless"; break; + case M_SOF9: process = "Extended sequential, arithmetic coding"; break; + case M_SOF10: process = "Progressive, arithmetic coding"; break; + case M_SOF11: process = "Lossless, arithmetic coding"; break; + case M_SOF13: process = "Differential sequential, arithmetic coding"; break; + case M_SOF14: process = "Differential progressive, arithmetic coding"; break; + case M_SOF15: process = "Differential lossless, arithmetic coding"; break; + default: process = "Unknown"; break; + } + + printf("JPEG image is %uw * %uh, %d color components, %d bits per sample\n", + image_width, image_height, num_components, data_precision); + printf("JPEG process: %s\n", process); + + if (length != (unsigned int) (8 + num_components * 3)) + ERREXIT("Bogus SOF marker length"); + + for (ci = 0; ci < num_components; ci++) { + (void) read_1_byte(); /* Component ID code */ + (void) read_1_byte(); /* H, V sampling factors */ + (void) read_1_byte(); /* Quantization table number */ + } +} + + +/* + * Parse the marker stream until SOS or EOI is seen; + * display any COM markers. + * While the companion program wrjpgcom will always insert COM markers before + * SOFn, other implementations might not, so we scan to SOS before stopping. + * If we were only interested in the image dimensions, we would stop at SOFn. + * (Conversely, if we only cared about COM markers, there would be no need + * for special code to handle SOFn; we could treat it like other markers.) + */ + +static int +scan_JPEG_header (int verbose) +{ + int marker; + + /* Expect SOI at start of file */ + if (first_marker() != M_SOI) + ERREXIT("Expected SOI marker first"); + + /* Scan miscellaneous markers until we reach SOS. */ + for (;;) { + marker = next_marker(); + switch (marker) { + /* Note that marker codes 0xC4, 0xC8, 0xCC are not, and must not be, + * treated as SOFn. C4 in particular is actually DHT. + */ + case M_SOF0: /* Baseline */ + case M_SOF1: /* Extended sequential, Huffman */ + case M_SOF2: /* Progressive, Huffman */ + case M_SOF3: /* Lossless, Huffman */ + case M_SOF5: /* Differential sequential, Huffman */ + case M_SOF6: /* Differential progressive, Huffman */ + case M_SOF7: /* Differential lossless, Huffman */ + case M_SOF9: /* Extended sequential, arithmetic */ + case M_SOF10: /* Progressive, arithmetic */ + case M_SOF11: /* Lossless, arithmetic */ + case M_SOF13: /* Differential sequential, arithmetic */ + case M_SOF14: /* Differential progressive, arithmetic */ + case M_SOF15: /* Differential lossless, arithmetic */ + if (verbose) + process_SOFn(marker); + else + skip_variable(); + break; + + case M_SOS: /* stop before hitting compressed data */ + return marker; + + case M_EOI: /* in case it's a tables-only JPEG stream */ + return marker; + + case M_COM: + process_COM(); + break; + + case M_APP12: + /* Some digital camera makers put useful textual information into + * APP12 markers, so we print those out too when in -verbose mode. + */ + if (verbose) { + printf("APP12 contains:\n"); + process_COM(); + } else + skip_variable(); + break; + + default: /* Anything else just gets skipped */ + skip_variable(); /* we assume it has a parameter count... */ + break; + } + } /* end loop */ +} + + +/* Command line parsing code */ + +static const char * progname; /* program name for error messages */ + + +static void +usage (void) +/* complain about bad command line */ +{ + fprintf(stderr, "rdjpgcom displays any textual comments in a JPEG file.\n"); + + fprintf(stderr, "Usage: %s [switches] [inputfile]\n", progname); + + fprintf(stderr, "Switches (names may be abbreviated):\n"); + fprintf(stderr, " -verbose Also display dimensions of JPEG image\n"); + + exit(EXIT_FAILURE); +} + + +static int +keymatch (char * arg, const char * keyword, int minchars) +/* Case-insensitive matching of (possibly abbreviated) keyword switches. */ +/* keyword is the constant keyword (must be lower case already), */ +/* minchars is length of minimum legal abbreviation. */ +{ + register int ca, ck; + register int nmatched = 0; + + while ((ca = *arg++) != '\0') { + if ((ck = *keyword++) == '\0') + return 0; /* arg longer than keyword, no good */ + if (isupper(ca)) /* force arg to lcase (assume ck is already) */ + ca = tolower(ca); + if (ca != ck) + return 0; /* no good */ + nmatched++; /* count matched characters */ + } + /* reached end of argument; fail if it's too short for unique abbrev */ + if (nmatched < minchars) + return 0; + return 1; /* A-OK */ +} + + +/* + * The main program. + */ + +int +main (int argc, char **argv) +{ + int argn; + char * arg; + int verbose = 0; + + /* On Mac, fetch a command line. */ +#ifdef USE_CCOMMAND + argc = ccommand(&argv); +#endif + + progname = argv[0]; + if (progname == NULL || progname[0] == 0) + progname = "rdjpgcom"; /* in case C library doesn't provide it */ + + /* Parse switches, if any */ + for (argn = 1; argn < argc; argn++) { + arg = argv[argn]; + if (arg[0] != '-') + break; /* not switch, must be file name */ + arg++; /* advance over '-' */ + if (keymatch(arg, "verbose", 1)) { + verbose++; + } else + usage(); + } + + /* Open the input file. */ + /* Unix style: expect zero or one file name */ + if (argn < argc-1) { + fprintf(stderr, "%s: only one input file\n", progname); + usage(); + } + if (argn < argc) { + if ((infile = fopen(argv[argn], READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); + exit(EXIT_FAILURE); + } + } else { + /* default input file is stdin */ +#ifdef USE_SETMODE /* need to hack file mode? */ + setmode(fileno(stdin), O_BINARY); +#endif +#ifdef USE_FDOPEN /* need to re-open in binary mode? */ + if ((infile = fdopen(fileno(stdin), READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open stdin\n", progname); + exit(EXIT_FAILURE); + } +#else + infile = stdin; +#endif + } + + /* Scan the JPEG headers. */ + (void) scan_JPEG_header(verbose); + + /* All done. */ + exit(EXIT_SUCCESS); + return 0; /* suppress no-return-value warnings */ +} diff --git a/Build/source/extra/jpeg/rdppm.c b/Build/source/extra/jpeg/rdppm.c new file mode 100644 index 00000000000..1df35c1b3a4 --- /dev/null +++ b/Build/source/extra/jpeg/rdppm.c @@ -0,0 +1,458 @@ +/* + * rdppm.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to read input images in PPM/PGM format. + * The extended 2-byte-per-sample raw PPM/PGM formats are supported. + * The PBMPLUS library is NOT required to compile this software + * (but it is highly useful as a set of PPM image manipulation programs). + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume input from + * an ordinary stdio stream. They further assume that reading begins + * at the start of the file; start_input may need work if the + * user interface has already read some data (e.g., to determine that + * the file is indeed PPM format). + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef PPM_SUPPORTED + + +/* Portions of this code are based on the PBMPLUS library, which is: +** +** Copyright (C) 1988 by Jef Poskanzer. +** +** Permission to use, copy, modify, and distribute this software and its +** documentation for any purpose and without fee is hereby granted, provided +** that the above copyright notice appear in all copies and that both that +** copyright notice and this permission notice appear in supporting +** documentation. This software is provided "as is" without express or +** implied warranty. +*/ + + +/* Macros to deal with unsigned chars as efficiently as compiler allows */ + +#ifdef HAVE_UNSIGNED_CHAR +typedef unsigned char U_CHAR; +#define UCH(x) ((int) (x)) +#else /* !HAVE_UNSIGNED_CHAR */ +#ifdef CHAR_IS_UNSIGNED +typedef char U_CHAR; +#define UCH(x) ((int) (x)) +#else +typedef char U_CHAR; +#define UCH(x) ((int) (x) & 0xFF) +#endif +#endif /* HAVE_UNSIGNED_CHAR */ + + +#define ReadOK(file,buffer,len) (JFREAD(file,buffer,len) == ((size_t) (len))) + + +/* + * On most systems, reading individual bytes with getc() is drastically less + * efficient than buffering a row at a time with fread(). On PCs, we must + * allocate the buffer in near data space, because we are assuming small-data + * memory model, wherein fread() can't reach far memory. If you need to + * process very wide images on a PC, you might have to compile in large-memory + * model, or else replace fread() with a getc() loop --- which will be much + * slower. + */ + + +/* Private version of data source object */ + +typedef struct { + struct cjpeg_source_struct pub; /* public fields */ + + U_CHAR *iobuffer; /* non-FAR pointer to I/O buffer */ + JSAMPROW pixrow; /* FAR pointer to same */ + size_t buffer_width; /* width of I/O buffer */ + JSAMPLE *rescale; /* => maxval-remapping array, or NULL */ +} ppm_source_struct; + +typedef ppm_source_struct * ppm_source_ptr; + + +LOCAL(int) +pbm_getc (FILE * infile) +/* Read next char, skipping over any comments */ +/* A comment/newline sequence is returned as a newline */ +{ + register int ch; + + ch = getc(infile); + if (ch == '#') { + do { + ch = getc(infile); + } while (ch != '\n' && ch != EOF); + } + return ch; +} + + +LOCAL(unsigned int) +read_pbm_integer (j_compress_ptr cinfo, FILE * infile) +/* Read an unsigned decimal integer from the PPM file */ +/* Swallows one trailing character after the integer */ +/* Note that on a 16-bit-int machine, only values up to 64k can be read. */ +/* This should not be a problem in practice. */ +{ + register int ch; + register unsigned int val; + + /* Skip any leading whitespace */ + do { + ch = pbm_getc(infile); + if (ch == EOF) + ERREXIT(cinfo, JERR_INPUT_EOF); + } while (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r'); + + if (ch < '0' || ch > '9') + ERREXIT(cinfo, JERR_PPM_NONNUMERIC); + + val = ch - '0'; + while ((ch = pbm_getc(infile)) >= '0' && ch <= '9') { + val *= 10; + val += ch - '0'; + } + return val; +} + + +/* + * Read one row of pixels. + * + * We provide several different versions depending on input file format. + * In all cases, input is scaled to the size of JSAMPLE. + * + * A really fast path is provided for reading byte/sample raw files with + * maxval = MAXJSAMPLE, which is the normal case for 8-bit data. + */ + + +METHODDEF(JDIMENSION) +get_text_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading text-format PGM files with any maxval */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + FILE * infile = source->pub.input_file; + register JSAMPROW ptr; + register JSAMPLE *rescale = source->rescale; + JDIMENSION col; + + ptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; + } + return 1; +} + + +METHODDEF(JDIMENSION) +get_text_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading text-format PPM files with any maxval */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + FILE * infile = source->pub.input_file; + register JSAMPROW ptr; + register JSAMPLE *rescale = source->rescale; + JDIMENSION col; + + ptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; + *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; + *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; + } + return 1; +} + + +METHODDEF(JDIMENSION) +get_scaled_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading raw-byte-format PGM files with any maxval */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + register JSAMPROW ptr; + register U_CHAR * bufferptr; + register JSAMPLE *rescale = source->rescale; + JDIMENSION col; + + if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) + ERREXIT(cinfo, JERR_INPUT_EOF); + ptr = source->pub.buffer[0]; + bufferptr = source->iobuffer; + for (col = cinfo->image_width; col > 0; col--) { + *ptr++ = rescale[UCH(*bufferptr++)]; + } + return 1; +} + + +METHODDEF(JDIMENSION) +get_scaled_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading raw-byte-format PPM files with any maxval */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + register JSAMPROW ptr; + register U_CHAR * bufferptr; + register JSAMPLE *rescale = source->rescale; + JDIMENSION col; + + if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) + ERREXIT(cinfo, JERR_INPUT_EOF); + ptr = source->pub.buffer[0]; + bufferptr = source->iobuffer; + for (col = cinfo->image_width; col > 0; col--) { + *ptr++ = rescale[UCH(*bufferptr++)]; + *ptr++ = rescale[UCH(*bufferptr++)]; + *ptr++ = rescale[UCH(*bufferptr++)]; + } + return 1; +} + + +METHODDEF(JDIMENSION) +get_raw_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading raw-byte-format files with maxval = MAXJSAMPLE. + * In this case we just read right into the JSAMPLE buffer! + * Note that same code works for PPM and PGM files. + */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + + if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) + ERREXIT(cinfo, JERR_INPUT_EOF); + return 1; +} + + +METHODDEF(JDIMENSION) +get_word_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading raw-word-format PGM files with any maxval */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + register JSAMPROW ptr; + register U_CHAR * bufferptr; + register JSAMPLE *rescale = source->rescale; + JDIMENSION col; + + if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) + ERREXIT(cinfo, JERR_INPUT_EOF); + ptr = source->pub.buffer[0]; + bufferptr = source->iobuffer; + for (col = cinfo->image_width; col > 0; col--) { + register int temp; + temp = UCH(*bufferptr++); + temp |= UCH(*bufferptr++) << 8; + *ptr++ = rescale[temp]; + } + return 1; +} + + +METHODDEF(JDIMENSION) +get_word_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading raw-word-format PPM files with any maxval */ +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + register JSAMPROW ptr; + register U_CHAR * bufferptr; + register JSAMPLE *rescale = source->rescale; + JDIMENSION col; + + if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) + ERREXIT(cinfo, JERR_INPUT_EOF); + ptr = source->pub.buffer[0]; + bufferptr = source->iobuffer; + for (col = cinfo->image_width; col > 0; col--) { + register int temp; + temp = UCH(*bufferptr++); + temp |= UCH(*bufferptr++) << 8; + *ptr++ = rescale[temp]; + temp = UCH(*bufferptr++); + temp |= UCH(*bufferptr++) << 8; + *ptr++ = rescale[temp]; + temp = UCH(*bufferptr++); + temp |= UCH(*bufferptr++) << 8; + *ptr++ = rescale[temp]; + } + return 1; +} + + +/* + * Read the file header; return image size and component count. + */ + +METHODDEF(void) +start_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + ppm_source_ptr source = (ppm_source_ptr) sinfo; + int c; + unsigned int w, h, maxval; + boolean need_iobuffer, use_raw_buffer, need_rescale; + + if (getc(source->pub.input_file) != 'P') + ERREXIT(cinfo, JERR_PPM_NOT); + + c = getc(source->pub.input_file); /* subformat discriminator character */ + + /* detect unsupported variants (ie, PBM) before trying to read header */ + switch (c) { + case '2': /* it's a text-format PGM file */ + case '3': /* it's a text-format PPM file */ + case '5': /* it's a raw-format PGM file */ + case '6': /* it's a raw-format PPM file */ + break; + default: + ERREXIT(cinfo, JERR_PPM_NOT); + break; + } + + /* fetch the remaining header info */ + w = read_pbm_integer(cinfo, source->pub.input_file); + h = read_pbm_integer(cinfo, source->pub.input_file); + maxval = read_pbm_integer(cinfo, source->pub.input_file); + + if (w <= 0 || h <= 0 || maxval <= 0) /* error check */ + ERREXIT(cinfo, JERR_PPM_NOT); + + cinfo->data_precision = BITS_IN_JSAMPLE; /* we always rescale data to this */ + cinfo->image_width = (JDIMENSION) w; + cinfo->image_height = (JDIMENSION) h; + + /* initialize flags to most common settings */ + need_iobuffer = TRUE; /* do we need an I/O buffer? */ + use_raw_buffer = FALSE; /* do we map input buffer onto I/O buffer? */ + need_rescale = TRUE; /* do we need a rescale array? */ + + switch (c) { + case '2': /* it's a text-format PGM file */ + cinfo->input_components = 1; + cinfo->in_color_space = JCS_GRAYSCALE; + TRACEMS2(cinfo, 1, JTRC_PGM_TEXT, w, h); + source->pub.get_pixel_rows = get_text_gray_row; + need_iobuffer = FALSE; + break; + + case '3': /* it's a text-format PPM file */ + cinfo->input_components = 3; + cinfo->in_color_space = JCS_RGB; + TRACEMS2(cinfo, 1, JTRC_PPM_TEXT, w, h); + source->pub.get_pixel_rows = get_text_rgb_row; + need_iobuffer = FALSE; + break; + + case '5': /* it's a raw-format PGM file */ + cinfo->input_components = 1; + cinfo->in_color_space = JCS_GRAYSCALE; + TRACEMS2(cinfo, 1, JTRC_PGM, w, h); + if (maxval > 255) { + source->pub.get_pixel_rows = get_word_gray_row; + } else if (maxval == MAXJSAMPLE && SIZEOF(JSAMPLE) == SIZEOF(U_CHAR)) { + source->pub.get_pixel_rows = get_raw_row; + use_raw_buffer = TRUE; + need_rescale = FALSE; + } else { + source->pub.get_pixel_rows = get_scaled_gray_row; + } + break; + + case '6': /* it's a raw-format PPM file */ + cinfo->input_components = 3; + cinfo->in_color_space = JCS_RGB; + TRACEMS2(cinfo, 1, JTRC_PPM, w, h); + if (maxval > 255) { + source->pub.get_pixel_rows = get_word_rgb_row; + } else if (maxval == MAXJSAMPLE && SIZEOF(JSAMPLE) == SIZEOF(U_CHAR)) { + source->pub.get_pixel_rows = get_raw_row; + use_raw_buffer = TRUE; + need_rescale = FALSE; + } else { + source->pub.get_pixel_rows = get_scaled_rgb_row; + } + break; + } + + /* Allocate space for I/O buffer: 1 or 3 bytes or words/pixel. */ + if (need_iobuffer) { + source->buffer_width = (size_t) w * cinfo->input_components * + ((maxval<=255) ? SIZEOF(U_CHAR) : (2*SIZEOF(U_CHAR))); + source->iobuffer = (U_CHAR *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + source->buffer_width); + } + + /* Create compressor input buffer. */ + if (use_raw_buffer) { + /* For unscaled raw-input case, we can just map it onto the I/O buffer. */ + /* Synthesize a JSAMPARRAY pointer structure */ + /* Cast here implies near->far pointer conversion on PCs */ + source->pixrow = (JSAMPROW) source->iobuffer; + source->pub.buffer = & source->pixrow; + source->pub.buffer_height = 1; + } else { + /* Need to translate anyway, so make a separate sample buffer. */ + source->pub.buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) w * cinfo->input_components, (JDIMENSION) 1); + source->pub.buffer_height = 1; + } + + /* Compute the rescaling array if required. */ + if (need_rescale) { + INT32 val, half_maxval; + + /* On 16-bit-int machines we have to be careful of maxval = 65535 */ + source->rescale = (JSAMPLE *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (size_t) (((long) maxval + 1L) * SIZEOF(JSAMPLE))); + half_maxval = maxval / 2; + for (val = 0; val <= (INT32) maxval; val++) { + /* The multiplication here must be done in 32 bits to avoid overflow */ + source->rescale[val] = (JSAMPLE) ((val*MAXJSAMPLE + half_maxval)/maxval); + } + } +} + + +/* + * Finish up at the end of the file. + */ + +METHODDEF(void) +finish_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + /* no work */ +} + + +/* + * The module selection routine for PPM format input. + */ + +GLOBAL(cjpeg_source_ptr) +jinit_read_ppm (j_compress_ptr cinfo) +{ + ppm_source_ptr source; + + /* Create module interface object */ + source = (ppm_source_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(ppm_source_struct)); + /* Fill in method ptrs, except get_pixel_rows which start_input sets */ + source->pub.start_input = start_input_ppm; + source->pub.finish_input = finish_input_ppm; + + return (cjpeg_source_ptr) source; +} + +#endif /* PPM_SUPPORTED */ diff --git a/Build/source/extra/jpeg/rdrle.c b/Build/source/extra/jpeg/rdrle.c new file mode 100644 index 00000000000..542bc37490c --- /dev/null +++ b/Build/source/extra/jpeg/rdrle.c @@ -0,0 +1,387 @@ +/* + * rdrle.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to read input images in Utah RLE format. + * The Utah Raster Toolkit library is required (version 3.1 or later). + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume input from + * an ordinary stdio stream. They further assume that reading begins + * at the start of the file; start_input may need work if the + * user interface has already read some data (e.g., to determine that + * the file is indeed RLE format). + * + * Based on code contributed by Mike Lijewski, + * with updates from Robert Hutchinson. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef RLE_SUPPORTED + +/* rle.h is provided by the Utah Raster Toolkit. */ + +#include + +/* + * We assume that JSAMPLE has the same representation as rle_pixel, + * to wit, "unsigned char". Hence we can't cope with 12- or 16-bit samples. + */ + +#if BITS_IN_JSAMPLE != 8 + Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ +#endif + +/* + * We support the following types of RLE files: + * + * GRAYSCALE - 8 bits, no colormap + * MAPPEDGRAY - 8 bits, 1 channel colomap + * PSEUDOCOLOR - 8 bits, 3 channel colormap + * TRUECOLOR - 24 bits, 3 channel colormap + * DIRECTCOLOR - 24 bits, no colormap + * + * For now, we ignore any alpha channel in the image. + */ + +typedef enum + { GRAYSCALE, MAPPEDGRAY, PSEUDOCOLOR, TRUECOLOR, DIRECTCOLOR } rle_kind; + + +/* + * Since RLE stores scanlines bottom-to-top, we have to invert the image + * to conform to JPEG's top-to-bottom order. To do this, we read the + * incoming image into a virtual array on the first get_pixel_rows call, + * then fetch the required row from the virtual array on subsequent calls. + */ + +typedef struct _rle_source_struct * rle_source_ptr; + +typedef struct _rle_source_struct { + struct cjpeg_source_struct pub; /* public fields */ + + rle_kind visual; /* actual type of input file */ + jvirt_sarray_ptr image; /* virtual array to hold the image */ + JDIMENSION row; /* current row # in the virtual array */ + rle_hdr header; /* Input file information */ + rle_pixel** rle_row; /* holds a row returned by rle_getrow() */ + +} rle_source_struct; + + +/* + * Read the file header; return image size and component count. + */ + +METHODDEF(void) +start_input_rle (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + rle_source_ptr source = (rle_source_ptr) sinfo; + JDIMENSION width, height; +#ifdef PROGRESS_REPORT + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; +#endif + + /* Use RLE library routine to get the header info */ + source->header = *rle_hdr_init(NULL); + source->header.rle_file = source->pub.input_file; + switch (rle_get_setup(&(source->header))) { + case RLE_SUCCESS: + /* A-OK */ + break; + case RLE_NOT_RLE: + ERREXIT(cinfo, JERR_RLE_NOT); + break; + case RLE_NO_SPACE: + ERREXIT(cinfo, JERR_RLE_MEM); + break; + case RLE_EMPTY: + ERREXIT(cinfo, JERR_RLE_EMPTY); + break; + case RLE_EOF: + ERREXIT(cinfo, JERR_RLE_EOF); + break; + default: + ERREXIT(cinfo, JERR_RLE_BADERROR); + break; + } + + /* Figure out what we have, set private vars and return values accordingly */ + + width = source->header.xmax - source->header.xmin + 1; + height = source->header.ymax - source->header.ymin + 1; + source->header.xmin = 0; /* realign horizontally */ + source->header.xmax = width-1; + + cinfo->image_width = width; + cinfo->image_height = height; + cinfo->data_precision = 8; /* we can only handle 8 bit data */ + + if (source->header.ncolors == 1 && source->header.ncmap == 0) { + source->visual = GRAYSCALE; + TRACEMS2(cinfo, 1, JTRC_RLE_GRAY, width, height); + } else if (source->header.ncolors == 1 && source->header.ncmap == 1) { + source->visual = MAPPEDGRAY; + TRACEMS3(cinfo, 1, JTRC_RLE_MAPGRAY, width, height, + 1 << source->header.cmaplen); + } else if (source->header.ncolors == 1 && source->header.ncmap == 3) { + source->visual = PSEUDOCOLOR; + TRACEMS3(cinfo, 1, JTRC_RLE_MAPPED, width, height, + 1 << source->header.cmaplen); + } else if (source->header.ncolors == 3 && source->header.ncmap == 3) { + source->visual = TRUECOLOR; + TRACEMS3(cinfo, 1, JTRC_RLE_FULLMAP, width, height, + 1 << source->header.cmaplen); + } else if (source->header.ncolors == 3 && source->header.ncmap == 0) { + source->visual = DIRECTCOLOR; + TRACEMS2(cinfo, 1, JTRC_RLE, width, height); + } else + ERREXIT(cinfo, JERR_RLE_UNSUPPORTED); + + if (source->visual == GRAYSCALE || source->visual == MAPPEDGRAY) { + cinfo->in_color_space = JCS_GRAYSCALE; + cinfo->input_components = 1; + } else { + cinfo->in_color_space = JCS_RGB; + cinfo->input_components = 3; + } + + /* + * A place to hold each scanline while it's converted. + * (GRAYSCALE scanlines don't need converting) + */ + if (source->visual != GRAYSCALE) { + source->rle_row = (rle_pixel**) (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) width, (JDIMENSION) cinfo->input_components); + } + + /* request a virtual array to hold the image */ + source->image = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + (JDIMENSION) (width * source->header.ncolors), + (JDIMENSION) height, (JDIMENSION) 1); + +#ifdef PROGRESS_REPORT + if (progress != NULL) { + /* count file input as separate pass */ + progress->total_extra_passes++; + } +#endif + + source->pub.buffer_height = 1; +} + + +/* + * Read one row of pixels. + * Called only after load_image has read the image into the virtual array. + * Used for GRAYSCALE, MAPPEDGRAY, TRUECOLOR, and DIRECTCOLOR images. + */ + +METHODDEF(JDIMENSION) +get_rle_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + rle_source_ptr source = (rle_source_ptr) sinfo; + + source->row--; + source->pub.buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->image, source->row, (JDIMENSION) 1, FALSE); + + return 1; +} + +/* + * Read one row of pixels. + * Called only after load_image has read the image into the virtual array. + * Used for PSEUDOCOLOR images. + */ + +METHODDEF(JDIMENSION) +get_pseudocolor_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + rle_source_ptr source = (rle_source_ptr) sinfo; + JSAMPROW src_row, dest_row; + JDIMENSION col; + rle_map *colormap; + int val; + + colormap = source->header.cmap; + dest_row = source->pub.buffer[0]; + source->row--; + src_row = * (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->image, source->row, (JDIMENSION) 1, FALSE); + + for (col = cinfo->image_width; col > 0; col--) { + val = GETJSAMPLE(*src_row++); + *dest_row++ = (JSAMPLE) (colormap[val ] >> 8); + *dest_row++ = (JSAMPLE) (colormap[val + 256] >> 8); + *dest_row++ = (JSAMPLE) (colormap[val + 512] >> 8); + } + + return 1; +} + + +/* + * Load the image into a virtual array. We have to do this because RLE + * files start at the lower left while the JPEG standard has them starting + * in the upper left. This is called the first time we want to get a row + * of input. What we do is load the RLE data into the array and then call + * the appropriate routine to read one row from the array. Before returning, + * we set source->pub.get_pixel_rows so that subsequent calls go straight to + * the appropriate row-reading routine. + */ + +METHODDEF(JDIMENSION) +load_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + rle_source_ptr source = (rle_source_ptr) sinfo; + JDIMENSION row, col; + JSAMPROW scanline, red_ptr, green_ptr, blue_ptr; + rle_pixel **rle_row; + rle_map *colormap; + char channel; +#ifdef PROGRESS_REPORT + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; +#endif + + colormap = source->header.cmap; + rle_row = source->rle_row; + + /* Read the RLE data into our virtual array. + * We assume here that (a) rle_pixel is represented the same as JSAMPLE, + * and (b) we are not on a machine where FAR pointers differ from regular. + */ + RLE_CLR_BIT(source->header, RLE_ALPHA); /* don't read the alpha channel */ + +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->pub.pass_limit = cinfo->image_height; + progress->pub.pass_counter = 0; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } +#endif + + switch (source->visual) { + + case GRAYSCALE: + case PSEUDOCOLOR: + for (row = 0; row < cinfo->image_height; row++) { + rle_row = (rle_pixel **) (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->image, row, (JDIMENSION) 1, TRUE); + rle_getrow(&source->header, rle_row); +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->pub.pass_counter++; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } +#endif + } + break; + + case MAPPEDGRAY: + case TRUECOLOR: + for (row = 0; row < cinfo->image_height; row++) { + scanline = * (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->image, row, (JDIMENSION) 1, TRUE); + rle_row = source->rle_row; + rle_getrow(&source->header, rle_row); + + for (col = 0; col < cinfo->image_width; col++) { + for (channel = 0; channel < source->header.ncolors; channel++) { + *scanline++ = (JSAMPLE) + (colormap[GETJSAMPLE(rle_row[channel][col]) + 256 * channel] >> 8); + } + } + +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->pub.pass_counter++; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } +#endif + } + break; + + case DIRECTCOLOR: + for (row = 0; row < cinfo->image_height; row++) { + scanline = * (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->image, row, (JDIMENSION) 1, TRUE); + rle_getrow(&source->header, rle_row); + + red_ptr = rle_row[0]; + green_ptr = rle_row[1]; + blue_ptr = rle_row[2]; + + for (col = cinfo->image_width; col > 0; col--) { + *scanline++ = *red_ptr++; + *scanline++ = *green_ptr++; + *scanline++ = *blue_ptr++; + } + +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->pub.pass_counter++; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } +#endif + } + } + +#ifdef PROGRESS_REPORT + if (progress != NULL) + progress->completed_extra_passes++; +#endif + + /* Set up to call proper row-extraction routine in future */ + if (source->visual == PSEUDOCOLOR) { + source->pub.buffer = source->rle_row; + source->pub.get_pixel_rows = get_pseudocolor_row; + } else { + source->pub.get_pixel_rows = get_rle_row; + } + source->row = cinfo->image_height; + + /* And fetch the topmost (bottommost) row */ + return (*source->pub.get_pixel_rows) (cinfo, sinfo); +} + + +/* + * Finish up at the end of the file. + */ + +METHODDEF(void) +finish_input_rle (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + /* no work */ +} + + +/* + * The module selection routine for RLE format input. + */ + +GLOBAL(cjpeg_source_ptr) +jinit_read_rle (j_compress_ptr cinfo) +{ + rle_source_ptr source; + + /* Create module interface object */ + source = (rle_source_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(rle_source_struct)); + /* Fill in method ptrs */ + source->pub.start_input = start_input_rle; + source->pub.finish_input = finish_input_rle; + source->pub.get_pixel_rows = load_image; + + return (cjpeg_source_ptr) source; +} + +#endif /* RLE_SUPPORTED */ diff --git a/Build/source/extra/jpeg/rdswitch.c b/Build/source/extra/jpeg/rdswitch.c new file mode 100644 index 00000000000..4f4bb4f5899 --- /dev/null +++ b/Build/source/extra/jpeg/rdswitch.c @@ -0,0 +1,332 @@ +/* + * rdswitch.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to process some of cjpeg's more complicated + * command-line switches. Switches processed here are: + * -qtables file Read quantization tables from text file + * -scans file Read scan script from text file + * -qslots N[,N,...] Set component quantization table selectors + * -sample HxV[,HxV,...] Set component sampling factors + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ +#include /* to declare isdigit(), isspace() */ + + +LOCAL(int) +text_getc (FILE * file) +/* Read next char, skipping over any comments (# to end of line) */ +/* A comment/newline sequence is returned as a newline */ +{ + register int ch; + + ch = getc(file); + if (ch == '#') { + do { + ch = getc(file); + } while (ch != '\n' && ch != EOF); + } + return ch; +} + + +LOCAL(boolean) +read_text_integer (FILE * file, long * result, int * termchar) +/* Read an unsigned decimal integer from a file, store it in result */ +/* Reads one trailing character after the integer; returns it in termchar */ +{ + register int ch; + register long val; + + /* Skip any leading whitespace, detect EOF */ + do { + ch = text_getc(file); + if (ch == EOF) { + *termchar = ch; + return FALSE; + } + } while (isspace(ch)); + + if (! isdigit(ch)) { + *termchar = ch; + return FALSE; + } + + val = ch - '0'; + while ((ch = text_getc(file)) != EOF) { + if (! isdigit(ch)) + break; + val *= 10; + val += ch - '0'; + } + *result = val; + *termchar = ch; + return TRUE; +} + + +GLOBAL(boolean) +read_quant_tables (j_compress_ptr cinfo, char * filename, + int scale_factor, boolean force_baseline) +/* Read a set of quantization tables from the specified file. + * The file is plain ASCII text: decimal numbers with whitespace between. + * Comments preceded by '#' may be included in the file. + * There may be one to NUM_QUANT_TBLS tables in the file, each of 64 values. + * The tables are implicitly numbered 0,1,etc. + * NOTE: does not affect the qslots mapping, which will default to selecting + * table 0 for luminance (or primary) components, 1 for chrominance components. + * You must use -qslots if you want a different component->table mapping. + */ +{ + FILE * fp; + int tblno, i, termchar; + long val; + unsigned int table[DCTSIZE2]; + + if ((fp = fopen(filename, "r")) == NULL) { + fprintf(stderr, "Can't open table file %s\n", filename); + return FALSE; + } + tblno = 0; + + while (read_text_integer(fp, &val, &termchar)) { /* read 1st element of table */ + if (tblno >= NUM_QUANT_TBLS) { + fprintf(stderr, "Too many tables in file %s\n", filename); + fclose(fp); + return FALSE; + } + table[0] = (unsigned int) val; + for (i = 1; i < DCTSIZE2; i++) { + if (! read_text_integer(fp, &val, &termchar)) { + fprintf(stderr, "Invalid table data in file %s\n", filename); + fclose(fp); + return FALSE; + } + table[i] = (unsigned int) val; + } + jpeg_add_quant_table(cinfo, tblno, table, scale_factor, force_baseline); + tblno++; + } + + if (termchar != EOF) { + fprintf(stderr, "Non-numeric data in file %s\n", filename); + fclose(fp); + return FALSE; + } + + fclose(fp); + return TRUE; +} + + +#ifdef C_MULTISCAN_FILES_SUPPORTED + +LOCAL(boolean) +read_scan_integer (FILE * file, long * result, int * termchar) +/* Variant of read_text_integer that always looks for a non-space termchar; + * this simplifies parsing of punctuation in scan scripts. + */ +{ + register int ch; + + if (! read_text_integer(file, result, termchar)) + return FALSE; + ch = *termchar; + while (ch != EOF && isspace(ch)) + ch = text_getc(file); + if (isdigit(ch)) { /* oops, put it back */ + if (ungetc(ch, file) == EOF) + return FALSE; + ch = ' '; + } else { + /* Any separators other than ';' and ':' are ignored; + * this allows user to insert commas, etc, if desired. + */ + if (ch != EOF && ch != ';' && ch != ':') + ch = ' '; + } + *termchar = ch; + return TRUE; +} + + +GLOBAL(boolean) +read_scan_script (j_compress_ptr cinfo, char * filename) +/* Read a scan script from the specified text file. + * Each entry in the file defines one scan to be emitted. + * Entries are separated by semicolons ';'. + * An entry contains one to four component indexes, + * optionally followed by a colon ':' and four progressive-JPEG parameters. + * The component indexes denote which component(s) are to be transmitted + * in the current scan. The first component has index 0. + * Sequential JPEG is used if the progressive-JPEG parameters are omitted. + * The file is free format text: any whitespace may appear between numbers + * and the ':' and ';' punctuation marks. Also, other punctuation (such + * as commas or dashes) can be placed between numbers if desired. + * Comments preceded by '#' may be included in the file. + * Note: we do very little validity checking here; + * jcmaster.c will validate the script parameters. + */ +{ + FILE * fp; + int scanno, ncomps, termchar; + long val; + jpeg_scan_info * scanptr; +#define MAX_SCANS 100 /* quite arbitrary limit */ + jpeg_scan_info scans[MAX_SCANS]; + + if ((fp = fopen(filename, "r")) == NULL) { + fprintf(stderr, "Can't open scan definition file %s\n", filename); + return FALSE; + } + scanptr = scans; + scanno = 0; + + while (read_scan_integer(fp, &val, &termchar)) { + if (scanno >= MAX_SCANS) { + fprintf(stderr, "Too many scans defined in file %s\n", filename); + fclose(fp); + return FALSE; + } + scanptr->component_index[0] = (int) val; + ncomps = 1; + while (termchar == ' ') { + if (ncomps >= MAX_COMPS_IN_SCAN) { + fprintf(stderr, "Too many components in one scan in file %s\n", + filename); + fclose(fp); + return FALSE; + } + if (! read_scan_integer(fp, &val, &termchar)) + goto bogus; + scanptr->component_index[ncomps] = (int) val; + ncomps++; + } + scanptr->comps_in_scan = ncomps; + if (termchar == ':') { + if (! read_scan_integer(fp, &val, &termchar) || termchar != ' ') + goto bogus; + scanptr->Ss = (int) val; + if (! read_scan_integer(fp, &val, &termchar) || termchar != ' ') + goto bogus; + scanptr->Se = (int) val; + if (! read_scan_integer(fp, &val, &termchar) || termchar != ' ') + goto bogus; + scanptr->Ah = (int) val; + if (! read_scan_integer(fp, &val, &termchar)) + goto bogus; + scanptr->Al = (int) val; + } else { + /* set non-progressive parameters */ + scanptr->Ss = 0; + scanptr->Se = DCTSIZE2-1; + scanptr->Ah = 0; + scanptr->Al = 0; + } + if (termchar != ';' && termchar != EOF) { +bogus: + fprintf(stderr, "Invalid scan entry format in file %s\n", filename); + fclose(fp); + return FALSE; + } + scanptr++, scanno++; + } + + if (termchar != EOF) { + fprintf(stderr, "Non-numeric data in file %s\n", filename); + fclose(fp); + return FALSE; + } + + if (scanno > 0) { + /* Stash completed scan list in cinfo structure. + * NOTE: for cjpeg's use, JPOOL_IMAGE is the right lifetime for this data, + * but if you want to compress multiple images you'd want JPOOL_PERMANENT. + */ + scanptr = (jpeg_scan_info *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + scanno * SIZEOF(jpeg_scan_info)); + MEMCOPY(scanptr, scans, scanno * SIZEOF(jpeg_scan_info)); + cinfo->scan_info = scanptr; + cinfo->num_scans = scanno; + } + + fclose(fp); + return TRUE; +} + +#endif /* C_MULTISCAN_FILES_SUPPORTED */ + + +GLOBAL(boolean) +set_quant_slots (j_compress_ptr cinfo, char *arg) +/* Process a quantization-table-selectors parameter string, of the form + * N[,N,...] + * If there are more components than parameters, the last value is replicated. + */ +{ + int val = 0; /* default table # */ + int ci; + char ch; + + for (ci = 0; ci < MAX_COMPONENTS; ci++) { + if (*arg) { + ch = ','; /* if not set by sscanf, will be ',' */ + if (sscanf(arg, "%d%c", &val, &ch) < 1) + return FALSE; + if (ch != ',') /* syntax check */ + return FALSE; + if (val < 0 || val >= NUM_QUANT_TBLS) { + fprintf(stderr, "JPEG quantization tables are numbered 0..%d\n", + NUM_QUANT_TBLS-1); + return FALSE; + } + cinfo->comp_info[ci].quant_tbl_no = val; + while (*arg && *arg++ != ',') /* advance to next segment of arg string */ + ; + } else { + /* reached end of parameter, set remaining components to last table */ + cinfo->comp_info[ci].quant_tbl_no = val; + } + } + return TRUE; +} + + +GLOBAL(boolean) +set_sample_factors (j_compress_ptr cinfo, char *arg) +/* Process a sample-factors parameter string, of the form + * HxV[,HxV,...] + * If there are more components than parameters, "1x1" is assumed for the rest. + */ +{ + int ci, val1, val2; + char ch1, ch2; + + for (ci = 0; ci < MAX_COMPONENTS; ci++) { + if (*arg) { + ch2 = ','; /* if not set by sscanf, will be ',' */ + if (sscanf(arg, "%d%c%d%c", &val1, &ch1, &val2, &ch2) < 3) + return FALSE; + if ((ch1 != 'x' && ch1 != 'X') || ch2 != ',') /* syntax check */ + return FALSE; + if (val1 <= 0 || val1 > 4 || val2 <= 0 || val2 > 4) { + fprintf(stderr, "JPEG sampling factors must be 1..4\n"); + return FALSE; + } + cinfo->comp_info[ci].h_samp_factor = val1; + cinfo->comp_info[ci].v_samp_factor = val2; + while (*arg && *arg++ != ',') /* advance to next segment of arg string */ + ; + } else { + /* reached end of parameter, set remaining components to 1x1 sampling */ + cinfo->comp_info[ci].h_samp_factor = 1; + cinfo->comp_info[ci].v_samp_factor = 1; + } + } + return TRUE; +} diff --git a/Build/source/extra/jpeg/rdtarga.c b/Build/source/extra/jpeg/rdtarga.c new file mode 100644 index 00000000000..4c2cd26730a --- /dev/null +++ b/Build/source/extra/jpeg/rdtarga.c @@ -0,0 +1,500 @@ +/* + * rdtarga.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to read input images in Targa format. + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume input from + * an ordinary stdio stream. They further assume that reading begins + * at the start of the file; start_input may need work if the + * user interface has already read some data (e.g., to determine that + * the file is indeed Targa format). + * + * Based on code contributed by Lee Daniel Crocker. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef TARGA_SUPPORTED + + +/* Macros to deal with unsigned chars as efficiently as compiler allows */ + +#ifdef HAVE_UNSIGNED_CHAR +typedef unsigned char U_CHAR; +#define UCH(x) ((int) (x)) +#else /* !HAVE_UNSIGNED_CHAR */ +#ifdef CHAR_IS_UNSIGNED +typedef char U_CHAR; +#define UCH(x) ((int) (x)) +#else +typedef char U_CHAR; +#define UCH(x) ((int) (x) & 0xFF) +#endif +#endif /* HAVE_UNSIGNED_CHAR */ + + +#define ReadOK(file,buffer,len) (JFREAD(file,buffer,len) == ((size_t) (len))) + + +/* Private version of data source object */ + +typedef struct _tga_source_struct * tga_source_ptr; + +typedef struct _tga_source_struct { + struct cjpeg_source_struct pub; /* public fields */ + + j_compress_ptr cinfo; /* back link saves passing separate parm */ + + JSAMPARRAY colormap; /* Targa colormap (converted to my format) */ + + jvirt_sarray_ptr whole_image; /* Needed if funny input row order */ + JDIMENSION current_row; /* Current logical row number to read */ + + /* Pointer to routine to extract next Targa pixel from input file */ + JMETHOD(void, read_pixel, (tga_source_ptr sinfo)); + + /* Result of read_pixel is delivered here: */ + U_CHAR tga_pixel[4]; + + int pixel_size; /* Bytes per Targa pixel (1 to 4) */ + + /* State info for reading RLE-coded pixels; both counts must be init to 0 */ + int block_count; /* # of pixels remaining in RLE block */ + int dup_pixel_count; /* # of times to duplicate previous pixel */ + + /* This saves the correct pixel-row-expansion method for preload_image */ + JMETHOD(JDIMENSION, get_pixel_rows, (j_compress_ptr cinfo, + cjpeg_source_ptr sinfo)); +} tga_source_struct; + + +/* For expanding 5-bit pixel values to 8-bit with best rounding */ + +static const UINT8 c5to8bits[32] = { + 0, 8, 16, 25, 33, 41, 49, 58, + 66, 74, 82, 90, 99, 107, 115, 123, + 132, 140, 148, 156, 165, 173, 181, 189, + 197, 206, 214, 222, 230, 239, 247, 255 +}; + + + +LOCAL(int) +read_byte (tga_source_ptr sinfo) +/* Read next byte from Targa file */ +{ + register FILE *infile = sinfo->pub.input_file; + register int c; + + if ((c = getc(infile)) == EOF) + ERREXIT(sinfo->cinfo, JERR_INPUT_EOF); + return c; +} + + +LOCAL(void) +read_colormap (tga_source_ptr sinfo, int cmaplen, int mapentrysize) +/* Read the colormap from a Targa file */ +{ + int i; + + /* Presently only handles 24-bit BGR format */ + if (mapentrysize != 24) + ERREXIT(sinfo->cinfo, JERR_TGA_BADCMAP); + + for (i = 0; i < cmaplen; i++) { + sinfo->colormap[2][i] = (JSAMPLE) read_byte(sinfo); + sinfo->colormap[1][i] = (JSAMPLE) read_byte(sinfo); + sinfo->colormap[0][i] = (JSAMPLE) read_byte(sinfo); + } +} + + +/* + * read_pixel methods: get a single pixel from Targa file into tga_pixel[] + */ + +METHODDEF(void) +read_non_rle_pixel (tga_source_ptr sinfo) +/* Read one Targa pixel from the input file; no RLE expansion */ +{ + register FILE *infile = sinfo->pub.input_file; + register int i; + + for (i = 0; i < sinfo->pixel_size; i++) { + sinfo->tga_pixel[i] = (U_CHAR) getc(infile); + } +} + + +METHODDEF(void) +read_rle_pixel (tga_source_ptr sinfo) +/* Read one Targa pixel from the input file, expanding RLE data as needed */ +{ + register FILE *infile = sinfo->pub.input_file; + register int i; + + /* Duplicate previously read pixel? */ + if (sinfo->dup_pixel_count > 0) { + sinfo->dup_pixel_count--; + return; + } + + /* Time to read RLE block header? */ + if (--sinfo->block_count < 0) { /* decrement pixels remaining in block */ + i = read_byte(sinfo); + if (i & 0x80) { /* Start of duplicate-pixel block? */ + sinfo->dup_pixel_count = i & 0x7F; /* number of dups after this one */ + sinfo->block_count = 0; /* then read new block header */ + } else { + sinfo->block_count = i & 0x7F; /* number of pixels after this one */ + } + } + + /* Read next pixel */ + for (i = 0; i < sinfo->pixel_size; i++) { + sinfo->tga_pixel[i] = (U_CHAR) getc(infile); + } +} + + +/* + * Read one row of pixels. + * + * We provide several different versions depending on input file format. + */ + + +METHODDEF(JDIMENSION) +get_8bit_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading 8-bit grayscale pixels */ +{ + tga_source_ptr source = (tga_source_ptr) sinfo; + register JSAMPROW ptr; + register JDIMENSION col; + + ptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ + *ptr++ = (JSAMPLE) UCH(source->tga_pixel[0]); + } + return 1; +} + +METHODDEF(JDIMENSION) +get_8bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading 8-bit colormap indexes */ +{ + tga_source_ptr source = (tga_source_ptr) sinfo; + register int t; + register JSAMPROW ptr; + register JDIMENSION col; + register JSAMPARRAY colormap = source->colormap; + + ptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ + t = UCH(source->tga_pixel[0]); + *ptr++ = colormap[0][t]; + *ptr++ = colormap[1][t]; + *ptr++ = colormap[2][t]; + } + return 1; +} + +METHODDEF(JDIMENSION) +get_16bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading 16-bit pixels */ +{ + tga_source_ptr source = (tga_source_ptr) sinfo; + register int t; + register JSAMPROW ptr; + register JDIMENSION col; + + ptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ + t = UCH(source->tga_pixel[0]); + t += UCH(source->tga_pixel[1]) << 8; + /* We expand 5 bit data to 8 bit sample width. + * The format of the 16-bit (LSB first) input word is + * xRRRRRGGGGGBBBBB + */ + ptr[2] = (JSAMPLE) c5to8bits[t & 0x1F]; + t >>= 5; + ptr[1] = (JSAMPLE) c5to8bits[t & 0x1F]; + t >>= 5; + ptr[0] = (JSAMPLE) c5to8bits[t & 0x1F]; + ptr += 3; + } + return 1; +} + +METHODDEF(JDIMENSION) +get_24bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +/* This version is for reading 24-bit pixels */ +{ + tga_source_ptr source = (tga_source_ptr) sinfo; + register JSAMPROW ptr; + register JDIMENSION col; + + ptr = source->pub.buffer[0]; + for (col = cinfo->image_width; col > 0; col--) { + (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ + *ptr++ = (JSAMPLE) UCH(source->tga_pixel[2]); /* change BGR to RGB order */ + *ptr++ = (JSAMPLE) UCH(source->tga_pixel[1]); + *ptr++ = (JSAMPLE) UCH(source->tga_pixel[0]); + } + return 1; +} + +/* + * Targa also defines a 32-bit pixel format with order B,G,R,A. + * We presently ignore the attribute byte, so the code for reading + * these pixels is identical to the 24-bit routine above. + * This works because the actual pixel length is only known to read_pixel. + */ + +#define get_32bit_row get_24bit_row + + +/* + * This method is for re-reading the input data in standard top-down + * row order. The entire image has already been read into whole_image + * with proper conversion of pixel format, but it's in a funny row order. + */ + +METHODDEF(JDIMENSION) +get_memory_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + tga_source_ptr source = (tga_source_ptr) sinfo; + JDIMENSION source_row; + + /* Compute row of source that maps to current_row of normal order */ + /* For now, assume image is bottom-up and not interlaced. */ + /* NEEDS WORK to support interlaced images! */ + source_row = cinfo->image_height - source->current_row - 1; + + /* Fetch that row from virtual array */ + source->pub.buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->whole_image, + source_row, (JDIMENSION) 1, FALSE); + + source->current_row++; + return 1; +} + + +/* + * This method loads the image into whole_image during the first call on + * get_pixel_rows. The get_pixel_rows pointer is then adjusted to call + * get_memory_row on subsequent calls. + */ + +METHODDEF(JDIMENSION) +preload_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + tga_source_ptr source = (tga_source_ptr) sinfo; + JDIMENSION row; + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; + + /* Read the data into a virtual array in input-file row order. */ + for (row = 0; row < cinfo->image_height; row++) { + if (progress != NULL) { + progress->pub.pass_counter = (long) row; + progress->pub.pass_limit = (long) cinfo->image_height; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } + source->pub.buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, source->whole_image, row, (JDIMENSION) 1, TRUE); + (*source->get_pixel_rows) (cinfo, sinfo); + } + if (progress != NULL) + progress->completed_extra_passes++; + + /* Set up to read from the virtual array in unscrambled order */ + source->pub.get_pixel_rows = get_memory_row; + source->current_row = 0; + /* And read the first row */ + return get_memory_row(cinfo, sinfo); +} + + +/* + * Read the file header; return image size and component count. + */ + +METHODDEF(void) +start_input_tga (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + tga_source_ptr source = (tga_source_ptr) sinfo; + U_CHAR targaheader[18]; + int idlen, cmaptype, subtype, flags, interlace_type, components; + unsigned int width, height, maplen; + boolean is_bottom_up; + +#define GET_2B(offset) ((unsigned int) UCH(targaheader[offset]) + \ + (((unsigned int) UCH(targaheader[offset+1])) << 8)) + + if (! ReadOK(source->pub.input_file, targaheader, 18)) + ERREXIT(cinfo, JERR_INPUT_EOF); + + /* Pretend "15-bit" pixels are 16-bit --- we ignore attribute bit anyway */ + if (targaheader[16] == 15) + targaheader[16] = 16; + + idlen = UCH(targaheader[0]); + cmaptype = UCH(targaheader[1]); + subtype = UCH(targaheader[2]); + maplen = GET_2B(5); + width = GET_2B(12); + height = GET_2B(14); + source->pixel_size = UCH(targaheader[16]) >> 3; + flags = UCH(targaheader[17]); /* Image Descriptor byte */ + + is_bottom_up = ((flags & 0x20) == 0); /* bit 5 set => top-down */ + interlace_type = flags >> 6; /* bits 6/7 are interlace code */ + + if (cmaptype > 1 || /* cmaptype must be 0 or 1 */ + source->pixel_size < 1 || source->pixel_size > 4 || + (UCH(targaheader[16]) & 7) != 0 || /* bits/pixel must be multiple of 8 */ + interlace_type != 0) /* currently don't allow interlaced image */ + ERREXIT(cinfo, JERR_TGA_BADPARMS); + + if (subtype > 8) { + /* It's an RLE-coded file */ + source->read_pixel = read_rle_pixel; + source->block_count = source->dup_pixel_count = 0; + subtype -= 8; + } else { + /* Non-RLE file */ + source->read_pixel = read_non_rle_pixel; + } + + /* Now should have subtype 1, 2, or 3 */ + components = 3; /* until proven different */ + cinfo->in_color_space = JCS_RGB; + + switch (subtype) { + case 1: /* Colormapped image */ + if (source->pixel_size == 1 && cmaptype == 1) + source->get_pixel_rows = get_8bit_row; + else + ERREXIT(cinfo, JERR_TGA_BADPARMS); + TRACEMS2(cinfo, 1, JTRC_TGA_MAPPED, width, height); + break; + case 2: /* RGB image */ + switch (source->pixel_size) { + case 2: + source->get_pixel_rows = get_16bit_row; + break; + case 3: + source->get_pixel_rows = get_24bit_row; + break; + case 4: + source->get_pixel_rows = get_32bit_row; + break; + default: + ERREXIT(cinfo, JERR_TGA_BADPARMS); + break; + } + TRACEMS2(cinfo, 1, JTRC_TGA, width, height); + break; + case 3: /* Grayscale image */ + components = 1; + cinfo->in_color_space = JCS_GRAYSCALE; + if (source->pixel_size == 1) + source->get_pixel_rows = get_8bit_gray_row; + else + ERREXIT(cinfo, JERR_TGA_BADPARMS); + TRACEMS2(cinfo, 1, JTRC_TGA_GRAY, width, height); + break; + default: + ERREXIT(cinfo, JERR_TGA_BADPARMS); + break; + } + + if (is_bottom_up) { + /* Create a virtual array to buffer the upside-down image. */ + source->whole_image = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + (JDIMENSION) width * components, (JDIMENSION) height, (JDIMENSION) 1); + if (cinfo->progress != NULL) { + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; + progress->total_extra_passes++; /* count file input as separate pass */ + } + /* source->pub.buffer will point to the virtual array. */ + source->pub.buffer_height = 1; /* in case anyone looks at it */ + source->pub.get_pixel_rows = preload_image; + } else { + /* Don't need a virtual array, but do need a one-row input buffer. */ + source->whole_image = NULL; + source->pub.buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) width * components, (JDIMENSION) 1); + source->pub.buffer_height = 1; + source->pub.get_pixel_rows = source->get_pixel_rows; + } + + while (idlen--) /* Throw away ID field */ + (void) read_byte(source); + + if (maplen > 0) { + if (maplen > 256 || GET_2B(3) != 0) + ERREXIT(cinfo, JERR_TGA_BADCMAP); + /* Allocate space to store the colormap */ + source->colormap = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, (JDIMENSION) maplen, (JDIMENSION) 3); + /* and read it from the file */ + read_colormap(source, (int) maplen, UCH(targaheader[7])); + } else { + if (cmaptype) /* but you promised a cmap! */ + ERREXIT(cinfo, JERR_TGA_BADPARMS); + source->colormap = NULL; + } + + cinfo->input_components = components; + cinfo->data_precision = 8; + cinfo->image_width = width; + cinfo->image_height = height; +} + + +/* + * Finish up at the end of the file. + */ + +METHODDEF(void) +finish_input_tga (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) +{ + /* no work */ +} + + +/* + * The module selection routine for Targa format input. + */ + +GLOBAL(cjpeg_source_ptr) +jinit_read_targa (j_compress_ptr cinfo) +{ + tga_source_ptr source; + + /* Create module interface object */ + source = (tga_source_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(tga_source_struct)); + source->cinfo = cinfo; /* make back link for subroutines */ + /* Fill in method ptrs, except get_pixel_rows which start_input sets */ + source->pub.start_input = start_input_tga; + source->pub.finish_input = finish_input_tga; + + return (cjpeg_source_ptr) source; +} + +#endif /* TARGA_SUPPORTED */ diff --git a/Build/source/extra/jpeg/structure.doc b/Build/source/extra/jpeg/structure.doc new file mode 100644 index 00000000000..51c9def7e5d --- /dev/null +++ b/Build/source/extra/jpeg/structure.doc @@ -0,0 +1,948 @@ +IJG JPEG LIBRARY: SYSTEM ARCHITECTURE + +Copyright (C) 1991-1995, Thomas G. Lane. +This file is part of the Independent JPEG Group's software. +For conditions of distribution and use, see the accompanying README file. + + +This file provides an overview of the architecture of the IJG JPEG software; +that is, the functions of the various modules in the system and the interfaces +between modules. For more precise details about any data structure or calling +convention, see the include files and comments in the source code. + +We assume that the reader is already somewhat familiar with the JPEG standard. +The README file includes references for learning about JPEG. The file +libjpeg.doc describes the library from the viewpoint of an application +programmer using the library; it's best to read that file before this one. +Also, the file coderules.doc describes the coding style conventions we use. + +In this document, JPEG-specific terminology follows the JPEG standard: + A "component" means a color channel, e.g., Red or Luminance. + A "sample" is a single component value (i.e., one number in the image data). + A "coefficient" is a frequency coefficient (a DCT transform output number). + A "block" is an 8x8 group of samples or coefficients. + An "MCU" (minimum coded unit) is an interleaved set of blocks of size + determined by the sampling factors, or a single block in a + noninterleaved scan. +We do not use the terms "pixel" and "sample" interchangeably. When we say +pixel, we mean an element of the full-size image, while a sample is an element +of the downsampled image. Thus the number of samples may vary across +components while the number of pixels does not. (This terminology is not used +rigorously throughout the code, but it is used in places where confusion would +otherwise result.) + + +*** System features *** + +The IJG distribution contains two parts: + * A subroutine library for JPEG compression and decompression. + * cjpeg/djpeg, two sample applications that use the library to transform + JFIF JPEG files to and from several other image formats. +cjpeg/djpeg are of no great intellectual complexity: they merely add a simple +command-line user interface and I/O routines for several uncompressed image +formats. This document concentrates on the library itself. + +We desire the library to be capable of supporting all JPEG baseline, extended +sequential, and progressive DCT processes. Hierarchical processes are not +supported. + +The library does not support the lossless (spatial) JPEG process. Lossless +JPEG shares little or no code with lossy JPEG, and would normally be used +without the extensive pre- and post-processing provided by this library. +We feel that lossless JPEG is better handled by a separate library. + +Within these limits, any set of compression parameters allowed by the JPEG +spec should be readable for decompression. (We can be more restrictive about +what formats we can generate.) Although the system design allows for all +parameter values, some uncommon settings are not yet implemented and may +never be; nonintegral sampling ratios are the prime example. Furthermore, +we treat 8-bit vs. 12-bit data precision as a compile-time switch, not a +run-time option, because most machines can store 8-bit pixels much more +compactly than 12-bit. + +For legal reasons, JPEG arithmetic coding is not currently supported, but +extending the library to include it would be straightforward. + +By itself, the library handles only interchange JPEG datastreams --- in +particular the widely used JFIF file format. The library can be used by +surrounding code to process interchange or abbreviated JPEG datastreams that +are embedded in more complex file formats. (For example, libtiff uses this +library to implement JPEG compression within the TIFF file format.) + +The library includes a substantial amount of code that is not covered by the +JPEG standard but is necessary for typical applications of JPEG. These +functions preprocess the image before JPEG compression or postprocess it after +decompression. They include colorspace conversion, downsampling/upsampling, +and color quantization. This code can be omitted if not needed. + +A wide range of quality vs. speed tradeoffs are possible in JPEG processing, +and even more so in decompression postprocessing. The decompression library +provides multiple implementations that cover most of the useful tradeoffs, +ranging from very-high-quality down to fast-preview operation. On the +compression side we have generally not provided low-quality choices, since +compression is normally less time-critical. It should be understood that the +low-quality modes may not meet the JPEG standard's accuracy requirements; +nonetheless, they are useful for viewers. + + +*** Portability issues *** + +Portability is an essential requirement for the library. The key portability +issues that show up at the level of system architecture are: + +1. Memory usage. We want the code to be able to run on PC-class machines +with limited memory. Images should therefore be processed sequentially (in +strips), to avoid holding the whole image in memory at once. Where a +full-image buffer is necessary, we should be able to use either virtual memory +or temporary files. + +2. Near/far pointer distinction. To run efficiently on 80x86 machines, the +code should distinguish "small" objects (kept in near data space) from +"large" ones (kept in far data space). This is an annoying restriction, but +fortunately it does not impact code quality for less brain-damaged machines, +and the source code clutter turns out to be minimal with sufficient use of +pointer typedefs. + +3. Data precision. We assume that "char" is at least 8 bits, "short" and +"int" at least 16, "long" at least 32. The code will work fine with larger +data sizes, although memory may be used inefficiently in some cases. However, +the JPEG compressed datastream must ultimately appear on external storage as a +sequence of 8-bit bytes if it is to conform to the standard. This may pose a +problem on machines where char is wider than 8 bits. The library represents +compressed data as an array of values of typedef JOCTET. If no data type +exactly 8 bits wide is available, custom data source and data destination +modules must be written to unpack and pack the chosen JOCTET datatype into +8-bit external representation. + + +*** System overview *** + +The compressor and decompressor are each divided into two main sections: +the JPEG compressor or decompressor proper, and the preprocessing or +postprocessing functions. The interface between these two sections is the +image data that the official JPEG spec regards as its input or output: this +data is in the colorspace to be used for compression, and it is downsampled +to the sampling factors to be used. The preprocessing and postprocessing +steps are responsible for converting a normal image representation to or from +this form. (Those few applications that want to deal with YCbCr downsampled +data can skip the preprocessing or postprocessing step.) + +Looking more closely, the compressor library contains the following main +elements: + + Preprocessing: + * Color space conversion (e.g., RGB to YCbCr). + * Edge expansion and downsampling. Optionally, this step can do simple + smoothing --- this is often helpful for low-quality source data. + JPEG proper: + * MCU assembly, DCT, quantization. + * Entropy coding (sequential or progressive, Huffman or arithmetic). + +In addition to these modules we need overall control, marker generation, +and support code (memory management & error handling). There is also a +module responsible for physically writing the output data --- typically +this is just an interface to fwrite(), but some applications may need to +do something else with the data. + +The decompressor library contains the following main elements: + + JPEG proper: + * Entropy decoding (sequential or progressive, Huffman or arithmetic). + * Dequantization, inverse DCT, MCU disassembly. + Postprocessing: + * Upsampling. Optionally, this step may be able to do more general + rescaling of the image. + * Color space conversion (e.g., YCbCr to RGB). This step may also + provide gamma adjustment [ currently it does not ]. + * Optional color quantization (e.g., reduction to 256 colors). + * Optional color precision reduction (e.g., 24-bit to 15-bit color). + [This feature is not currently implemented.] + +We also need overall control, marker parsing, and a data source module. +The support code (memory management & error handling) can be shared with +the compression half of the library. + +There may be several implementations of each of these elements, particularly +in the decompressor, where a wide range of speed/quality tradeoffs is very +useful. It must be understood that some of the best speedups involve +merging adjacent steps in the pipeline. For example, upsampling, color space +conversion, and color quantization might all be done at once when using a +low-quality ordered-dither technique. The system architecture is designed to +allow such merging where appropriate. + + +Note: it is convenient to regard edge expansion (padding to block boundaries) +as a preprocessing/postprocessing function, even though the JPEG spec includes +it in compression/decompression. We do this because downsampling/upsampling +can be simplified a little if they work on padded data: it's not necessary to +have special cases at the right and bottom edges. Therefore the interface +buffer is always an integral number of blocks wide and high, and we expect +compression preprocessing to pad the source data properly. Padding will occur +only to the next block (8-sample) boundary. In an interleaved-scan situation, +additional dummy blocks may be used to fill out MCUs, but the MCU assembly and +disassembly logic will create or discard these blocks internally. (This is +advantageous for speed reasons, since we avoid DCTing the dummy blocks. +It also permits a small reduction in file size, because the compressor can +choose dummy block contents so as to minimize their size in compressed form. +Finally, it makes the interface buffer specification independent of whether +the file is actually interleaved or not.) Applications that wish to deal +directly with the downsampled data must provide similar buffering and padding +for odd-sized images. + + +*** Poor man's object-oriented programming *** + +It should be clear by now that we have a lot of quasi-independent processing +steps, many of which have several possible behaviors. To avoid cluttering the +code with lots of switch statements, we use a simple form of object-style +programming to separate out the different possibilities. + +For example, two different color quantization algorithms could be implemented +as two separate modules that present the same external interface; at runtime, +the calling code will access the proper module indirectly through an "object". + +We can get the limited features we need while staying within portable C. +The basic tool is a function pointer. An "object" is just a struct +containing one or more function pointer fields, each of which corresponds to +a method name in real object-oriented languages. During initialization we +fill in the function pointers with references to whichever module we have +determined we need to use in this run. Then invocation of the module is done +by indirecting through a function pointer; on most machines this is no more +expensive than a switch statement, which would be the only other way of +making the required run-time choice. The really significant benefit, of +course, is keeping the source code clean and well structured. + +We can also arrange to have private storage that varies between different +implementations of the same kind of object. We do this by making all the +module-specific object structs be separately allocated entities, which will +be accessed via pointers in the master compression or decompression struct. +The "public" fields or methods for a given kind of object are specified by +a commonly known struct. But a module's initialization code can allocate +a larger struct that contains the common struct as its first member, plus +additional private fields. With appropriate pointer casting, the module's +internal functions can access these private fields. (For a simple example, +see jdatadst.c, which implements the external interface specified by struct +jpeg_destination_mgr, but adds extra fields.) + +(Of course this would all be a lot easier if we were using C++, but we are +not yet prepared to assume that everyone has a C++ compiler.) + +An important benefit of this scheme is that it is easy to provide multiple +versions of any method, each tuned to a particular case. While a lot of +precalculation might be done to select an optimal implementation of a method, +the cost per invocation is constant. For example, the upsampling step might +have a "generic" method, plus one or more "hardwired" methods for the most +popular sampling factors; the hardwired methods would be faster because they'd +use straight-line code instead of for-loops. The cost to determine which +method to use is paid only once, at startup, and the selection criteria are +hidden from the callers of the method. + +This plan differs a little bit from usual object-oriented structures, in that +only one instance of each object class will exist during execution. The +reason for having the class structure is that on different runs we may create +different instances (choose to execute different modules). You can think of +the term "method" as denoting the common interface presented by a particular +set of interchangeable functions, and "object" as denoting a group of related +methods, or the total shared interface behavior of a group of modules. + + +*** Overall control structure *** + +We previously mentioned the need for overall control logic in the compression +and decompression libraries. In IJG implementations prior to v5, overall +control was mostly provided by "pipeline control" modules, which proved to be +large, unwieldy, and hard to understand. To improve the situation, the +control logic has been subdivided into multiple modules. The control modules +consist of: + +1. Master control for module selection and initialization. This has two +responsibilities: + + 1A. Startup initialization at the beginning of image processing. + The individual processing modules to be used in this run are selected + and given initialization calls. + + 1B. Per-pass control. This determines how many passes will be performed + and calls each active processing module to configure itself + appropriately at the beginning of each pass. End-of-pass processing, + where necessary, is also invoked from the master control module. + + Method selection is partially distributed, in that a particular processing + module may contain several possible implementations of a particular method, + which it will select among when given its initialization call. The master + control code need only be concerned with decisions that affect more than + one module. + +2. Data buffering control. A separate control module exists for each + inter-processing-step data buffer. This module is responsible for + invoking the processing steps that write or read that data buffer. + +Each buffer controller sees the world as follows: + +input data => processing step A => buffer => processing step B => output data + | | | + ------------------ controller ------------------ + +The controller knows the dataflow requirements of steps A and B: how much data +they want to accept in one chunk and how much they output in one chunk. Its +function is to manage its buffer and call A and B at the proper times. + +A data buffer control module may itself be viewed as a processing step by a +higher-level control module; thus the control modules form a binary tree with +elementary processing steps at the leaves of the tree. + +The control modules are objects. A considerable amount of flexibility can +be had by replacing implementations of a control module. For example: +* Merging of adjacent steps in the pipeline is done by replacing a control + module and its pair of processing-step modules with a single processing- + step module. (Hence the possible merges are determined by the tree of + control modules.) +* In some processing modes, a given interstep buffer need only be a "strip" + buffer large enough to accommodate the desired data chunk sizes. In other + modes, a full-image buffer is needed and several passes are required. + The control module determines which kind of buffer is used and manipulates + virtual array buffers as needed. One or both processing steps may be + unaware of the multi-pass behavior. + +In theory, we might be able to make all of the data buffer controllers +interchangeable and provide just one set of implementations for all. In +practice, each one contains considerable special-case processing for its +particular job. The buffer controller concept should be regarded as an +overall system structuring principle, not as a complete description of the +task performed by any one controller. + + +*** Compression object structure *** + +Here is a sketch of the logical structure of the JPEG compression library: + + |-- Colorspace conversion + |-- Preprocessing controller --| + | |-- Downsampling +Main controller --| + | |-- Forward DCT, quantize + |-- Coefficient controller --| + |-- Entropy encoding + +This sketch also describes the flow of control (subroutine calls) during +typical image data processing. Each of the components shown in the diagram is +an "object" which may have several different implementations available. One +or more source code files contain the actual implementation(s) of each object. + +The objects shown above are: + +* Main controller: buffer controller for the subsampled-data buffer, which + holds the preprocessed input data. This controller invokes preprocessing to + fill the subsampled-data buffer, and JPEG compression to empty it. There is + usually no need for a full-image buffer here; a strip buffer is adequate. + +* Preprocessing controller: buffer controller for the downsampling input data + buffer, which lies between colorspace conversion and downsampling. Note + that a unified conversion/downsampling module would probably replace this + controller entirely. + +* Colorspace conversion: converts application image data into the desired + JPEG color space; also changes the data from pixel-interleaved layout to + separate component planes. Processes one pixel row at a time. + +* Downsampling: performs reduction of chroma components as required. + Optionally may perform pixel-level smoothing as well. Processes a "row + group" at a time, where a row group is defined as Vmax pixel rows of each + component before downsampling, and Vk sample rows afterwards (remember Vk + differs across components). Some downsampling or smoothing algorithms may + require context rows above and below the current row group; the + preprocessing controller is responsible for supplying these rows via proper + buffering. The downsampler is responsible for edge expansion at the right + edge (i.e., extending each sample row to a multiple of 8 samples); but the + preprocessing controller is responsible for vertical edge expansion (i.e., + duplicating the bottom sample row as needed to make a multiple of 8 rows). + +* Coefficient controller: buffer controller for the DCT-coefficient data. + This controller handles MCU assembly, including insertion of dummy DCT + blocks when needed at the right or bottom edge. When performing + Huffman-code optimization or emitting a multiscan JPEG file, this + controller is responsible for buffering the full image. The equivalent of + one fully interleaved MCU row of subsampled data is processed per call, + even when the JPEG file is noninterleaved. + +* Forward DCT and quantization: Perform DCT, quantize, and emit coefficients. + Works on one or more DCT blocks at a time. (Note: the coefficients are now + emitted in normal array order, which the entropy encoder is expected to + convert to zigzag order as necessary. Prior versions of the IJG code did + the conversion to zigzag order within the quantization step.) + +* Entropy encoding: Perform Huffman or arithmetic entropy coding and emit the + coded data to the data destination module. Works on one MCU per call. + For progressive JPEG, the same DCT blocks are fed to the entropy coder + during each pass, and the coder must emit the appropriate subset of + coefficients. + +In addition to the above objects, the compression library includes these +objects: + +* Master control: determines the number of passes required, controls overall + and per-pass initialization of the other modules. + +* Marker writing: generates JPEG markers (except for RSTn, which is emitted + by the entropy encoder when needed). + +* Data destination manager: writes the output JPEG datastream to its final + destination (e.g., a file). The destination manager supplied with the + library knows how to write to a stdio stream; for other behaviors, the + surrounding application may provide its own destination manager. + +* Memory manager: allocates and releases memory, controls virtual arrays + (with backing store management, where required). + +* Error handler: performs formatting and output of error and trace messages; + determines handling of nonfatal errors. The surrounding application may + override some or all of this object's methods to change error handling. + +* Progress monitor: supports output of "percent-done" progress reports. + This object represents an optional callback to the surrounding application: + if wanted, it must be supplied by the application. + +The error handler, destination manager, and progress monitor objects are +defined as separate objects in order to simplify application-specific +customization of the JPEG library. A surrounding application may override +individual methods or supply its own all-new implementation of one of these +objects. The object interfaces for these objects are therefore treated as +part of the application interface of the library, whereas the other objects +are internal to the library. + +The error handler and memory manager are shared by JPEG compression and +decompression; the progress monitor, if used, may be shared as well. + + +*** Decompression object structure *** + +Here is a sketch of the logical structure of the JPEG decompression library: + + |-- Entropy decoding + |-- Coefficient controller --| + | |-- Dequantize, Inverse DCT +Main controller --| + | |-- Upsampling + |-- Postprocessing controller --| |-- Colorspace conversion + |-- Color quantization + |-- Color precision reduction + +As before, this diagram also represents typical control flow. The objects +shown are: + +* Main controller: buffer controller for the subsampled-data buffer, which + holds the output of JPEG decompression proper. This controller's primary + task is to feed the postprocessing procedure. Some upsampling algorithms + may require context rows above and below the current row group; when this + is true, the main controller is responsible for managing its buffer so as + to make context rows available. In the current design, the main buffer is + always a strip buffer; a full-image buffer is never required. + +* Coefficient controller: buffer controller for the DCT-coefficient data. + This controller handles MCU disassembly, including deletion of any dummy + DCT blocks at the right or bottom edge. When reading a multiscan JPEG + file, this controller is responsible for buffering the full image. + (Buffering DCT coefficients, rather than samples, is necessary to support + progressive JPEG.) The equivalent of one fully interleaved MCU row of + subsampled data is processed per call, even when the source JPEG file is + noninterleaved. + +* Entropy decoding: Read coded data from the data source module and perform + Huffman or arithmetic entropy decoding. Works on one MCU per call. + For progressive JPEG decoding, the coefficient controller supplies the prior + coefficients of each MCU (initially all zeroes), which the entropy decoder + modifies in each scan. + +* Dequantization and inverse DCT: like it says. Note that the coefficients + buffered by the coefficient controller have NOT been dequantized; we + merge dequantization and inverse DCT into a single step for speed reasons. + When scaled-down output is asked for, simplified DCT algorithms may be used + that emit only 1x1, 2x2, or 4x4 samples per DCT block, not the full 8x8. + Works on one DCT block at a time. + +* Postprocessing controller: buffer controller for the color quantization + input buffer, when quantization is in use. (Without quantization, this + controller just calls the upsampler.) For two-pass quantization, this + controller is responsible for buffering the full-image data. + +* Upsampling: restores chroma components to full size. (May support more + general output rescaling, too. Note that if undersized DCT outputs have + been emitted by the DCT module, this module must adjust so that properly + sized outputs are created.) Works on one row group at a time. This module + also calls the color conversion module, so its top level is effectively a + buffer controller for the upsampling->color conversion buffer. However, in + all but the highest-quality operating modes, upsampling and color + conversion are likely to be merged into a single step. + +* Colorspace conversion: convert from JPEG color space to output color space, + and change data layout from separate component planes to pixel-interleaved. + Works on one pixel row at a time. + +* Color quantization: reduce the data to colormapped form, using either an + externally specified colormap or an internally generated one. This module + is not used for full-color output. Works on one pixel row at a time; may + require two passes to generate a color map. Note that the output will + always be a single component representing colormap indexes. In the current + design, the output values are JSAMPLEs, so an 8-bit compilation cannot + quantize to more than 256 colors. This is unlikely to be a problem in + practice. + +* Color reduction: this module handles color precision reduction, e.g., + generating 15-bit color (5 bits/primary) from JPEG's 24-bit output. + Not quite clear yet how this should be handled... should we merge it with + colorspace conversion??? + +Note that some high-speed operating modes might condense the entire +postprocessing sequence to a single module (upsample, color convert, and +quantize in one step). + +In addition to the above objects, the decompression library includes these +objects: + +* Master control: determines the number of passes required, controls overall + and per-pass initialization of the other modules. This is subdivided into + input and output control: jdinput.c controls only input-side processing, + while jdmaster.c handles overall initialization and output-side control. + +* Marker reading: decodes JPEG markers (except for RSTn). + +* Data source manager: supplies the input JPEG datastream. The source + manager supplied with the library knows how to read from a stdio stream; + for other behaviors, the surrounding application may provide its own source + manager. + +* Memory manager: same as for compression library. + +* Error handler: same as for compression library. + +* Progress monitor: same as for compression library. + +As with compression, the data source manager, error handler, and progress +monitor are candidates for replacement by a surrounding application. + + +*** Decompression input and output separation *** + +To support efficient incremental display of progressive JPEG files, the +decompressor is divided into two sections that can run independently: + +1. Data input includes marker parsing, entropy decoding, and input into the + coefficient controller's DCT coefficient buffer. Note that this + processing is relatively cheap and fast. + +2. Data output reads from the DCT coefficient buffer and performs the IDCT + and all postprocessing steps. + +For a progressive JPEG file, the data input processing is allowed to get +arbitrarily far ahead of the data output processing. (This occurs only +if the application calls jpeg_consume_input(); otherwise input and output +run in lockstep, since the input section is called only when the output +section needs more data.) In this way the application can avoid making +extra display passes when data is arriving faster than the display pass +can run. Furthermore, it is possible to abort an output pass without +losing anything, since the coefficient buffer is read-only as far as the +output section is concerned. See libjpeg.doc for more detail. + +A full-image coefficient array is only created if the JPEG file has multiple +scans (or if the application specifies buffered-image mode anyway). When +reading a single-scan file, the coefficient controller normally creates only +a one-MCU buffer, so input and output processing must run in lockstep in this +case. jpeg_consume_input() is effectively a no-op in this situation. + +The main impact of dividing the decompressor in this fashion is that we must +be very careful with shared variables in the cinfo data structure. Each +variable that can change during the course of decompression must be +classified as belonging to data input or data output, and each section must +look only at its own variables. For example, the data output section may not +depend on any of the variables that describe the current scan in the JPEG +file, because these may change as the data input section advances into a new +scan. + +The progress monitor is (somewhat arbitrarily) defined to treat input of the +file as one pass when buffered-image mode is not used, and to ignore data +input work completely when buffered-image mode is used. Note that the +library has no reliable way to predict the number of passes when dealing +with a progressive JPEG file, nor can it predict the number of output passes +in buffered-image mode. So the work estimate is inherently bogus anyway. + +No comparable division is currently made in the compression library, because +there isn't any real need for it. + + +*** Data formats *** + +Arrays of pixel sample values use the following data structure: + + typedef something JSAMPLE; a pixel component value, 0..MAXJSAMPLE + typedef JSAMPLE *JSAMPROW; ptr to a row of samples + typedef JSAMPROW *JSAMPARRAY; ptr to a list of rows + typedef JSAMPARRAY *JSAMPIMAGE; ptr to a list of color-component arrays + +The basic element type JSAMPLE will typically be one of unsigned char, +(signed) char, or short. Short will be used if samples wider than 8 bits are +to be supported (this is a compile-time option). Otherwise, unsigned char is +used if possible. If the compiler only supports signed chars, then it is +necessary to mask off the value when reading. Thus, all reads of JSAMPLE +values must be coded as "GETJSAMPLE(value)", where the macro will be defined +as "((value) & 0xFF)" on signed-char machines and "((int) (value))" elsewhere. + +With these conventions, JSAMPLE values can be assumed to be >= 0. This helps +simplify correct rounding during downsampling, etc. The JPEG standard's +specification that sample values run from -128..127 is accommodated by +subtracting 128 just as the sample value is copied into the source array for +the DCT step (this will be an array of signed ints). Similarly, during +decompression the output of the IDCT step will be immediately shifted back to +0..255. (NB: different values are required when 12-bit samples are in use. +The code is written in terms of MAXJSAMPLE and CENTERJSAMPLE, which will be +defined as 255 and 128 respectively in an 8-bit implementation, and as 4095 +and 2048 in a 12-bit implementation.) + +We use a pointer per row, rather than a two-dimensional JSAMPLE array. This +choice costs only a small amount of memory and has several benefits: +* Code using the data structure doesn't need to know the allocated width of + the rows. This simplifies edge expansion/compression, since we can work + in an array that's wider than the logical picture width. +* Indexing doesn't require multiplication; this is a performance win on many + machines. +* Arrays with more than 64K total elements can be supported even on machines + where malloc() cannot allocate chunks larger than 64K. +* The rows forming a component array may be allocated at different times + without extra copying. This trick allows some speedups in smoothing steps + that need access to the previous and next rows. + +Note that each color component is stored in a separate array; we don't use the +traditional layout in which the components of a pixel are stored together. +This simplifies coding of modules that work on each component independently, +because they don't need to know how many components there are. Furthermore, +we can read or write each component to a temporary file independently, which +is helpful when dealing with noninterleaved JPEG files. + +In general, a specific sample value is accessed by code such as + GETJSAMPLE(image[colorcomponent][row][col]) +where col is measured from the image left edge, but row is measured from the +first sample row currently in memory. Either of the first two indexings can +be precomputed by copying the relevant pointer. + + +Since most image-processing applications prefer to work on images in which +the components of a pixel are stored together, the data passed to or from the +surrounding application uses the traditional convention: a single pixel is +represented by N consecutive JSAMPLE values, and an image row is an array of +(# of color components)*(image width) JSAMPLEs. One or more rows of data can +be represented by a pointer of type JSAMPARRAY in this scheme. This scheme is +converted to component-wise storage inside the JPEG library. (Applications +that want to skip JPEG preprocessing or postprocessing will have to contend +with component-wise storage.) + + +Arrays of DCT-coefficient values use the following data structure: + + typedef short JCOEF; a 16-bit signed integer + typedef JCOEF JBLOCK[DCTSIZE2]; an 8x8 block of coefficients + typedef JBLOCK *JBLOCKROW; ptr to one horizontal row of 8x8 blocks + typedef JBLOCKROW *JBLOCKARRAY; ptr to a list of such rows + typedef JBLOCKARRAY *JBLOCKIMAGE; ptr to a list of color component arrays + +The underlying type is at least a 16-bit signed integer; while "short" is big +enough on all machines of interest, on some machines it is preferable to use +"int" for speed reasons, despite the storage cost. Coefficients are grouped +into 8x8 blocks (but we always use #defines DCTSIZE and DCTSIZE2 rather than +"8" and "64"). + +The contents of a coefficient block may be in either "natural" or zigzagged +order, and may be true values or divided by the quantization coefficients, +depending on where the block is in the processing pipeline. In the current +library, coefficient blocks are kept in natural order everywhere; the entropy +codecs zigzag or dezigzag the data as it is written or read. The blocks +contain quantized coefficients everywhere outside the DCT/IDCT subsystems. +(This latter decision may need to be revisited to support variable +quantization a la JPEG Part 3.) + +Notice that the allocation unit is now a row of 8x8 blocks, corresponding to +eight rows of samples. Otherwise the structure is much the same as for +samples, and for the same reasons. + +On machines where malloc() can't handle a request bigger than 64Kb, this data +structure limits us to rows of less than 512 JBLOCKs, or a picture width of +4000+ pixels. This seems an acceptable restriction. + + +On 80x86 machines, the bottom-level pointer types (JSAMPROW and JBLOCKROW) +must be declared as "far" pointers, but the upper levels can be "near" +(implying that the pointer lists are allocated in the DS segment). +We use a #define symbol FAR, which expands to the "far" keyword when +compiling on 80x86 machines and to nothing elsewhere. + + +*** Suspendable processing *** + +In some applications it is desirable to use the JPEG library as an +incremental, memory-to-memory filter. In this situation the data source or +destination may be a limited-size buffer, and we can't rely on being able to +empty or refill the buffer at arbitrary times. Instead the application would +like to have control return from the library at buffer overflow/underrun, and +then resume compression or decompression at a later time. + +This scenario is supported for simple cases. (For anything more complex, we +recommend that the application "bite the bullet" and develop real multitasking +capability.) The libjpeg.doc file goes into more detail about the usage and +limitations of this capability; here we address the implications for library +structure. + +The essence of the problem is that the entropy codec (coder or decoder) must +be prepared to stop at arbitrary times. In turn, the controllers that call +the entropy codec must be able to stop before having produced or consumed all +the data that they normally would handle in one call. That part is reasonably +straightforward: we make the controller call interfaces include "progress +counters" which indicate the number of data chunks successfully processed, and +we require callers to test the counter rather than just assume all of the data +was processed. + +Rather than trying to restart at an arbitrary point, the current Huffman +codecs are designed to restart at the beginning of the current MCU after a +suspension due to buffer overflow/underrun. At the start of each call, the +codec's internal state is loaded from permanent storage (in the JPEG object +structures) into local variables. On successful completion of the MCU, the +permanent state is updated. (This copying is not very expensive, and may even +lead to *improved* performance if the local variables can be registerized.) +If a suspension occurs, the codec simply returns without updating the state, +thus effectively reverting to the start of the MCU. Note that this implies +leaving some data unprocessed in the source/destination buffer (ie, the +compressed partial MCU). The data source/destination module interfaces are +specified so as to make this possible. This also implies that the data buffer +must be large enough to hold a worst-case compressed MCU; a couple thousand +bytes should be enough. + +In a successive-approximation AC refinement scan, the progressive Huffman +decoder has to be able to undo assignments of newly nonzero coefficients if it +suspends before the MCU is complete, since decoding requires distinguishing +previously-zero and previously-nonzero coefficients. This is a bit tedious +but probably won't have much effect on performance. Other variants of Huffman +decoding need not worry about this, since they will just store the same values +again if forced to repeat the MCU. + +This approach would probably not work for an arithmetic codec, since its +modifiable state is quite large and couldn't be copied cheaply. Instead it +would have to suspend and resume exactly at the point of the buffer end. + +The JPEG marker reader is designed to cope with suspension at an arbitrary +point. It does so by backing up to the start of the marker parameter segment, +so the data buffer must be big enough to hold the largest marker of interest. +Again, a couple KB should be adequate. (A special "skip" convention is used +to bypass COM and APPn markers, so these can be larger than the buffer size +without causing problems; otherwise a 64K buffer would be needed in the worst +case.) + +The JPEG marker writer currently does *not* cope with suspension. I feel that +this is not necessary; it is much easier simply to require the application to +ensure there is enough buffer space before starting. (An empty 2K buffer is +more than sufficient for the header markers; and ensuring there are a dozen or +two bytes available before calling jpeg_finish_compress() will suffice for the +trailer.) This would not work for writing multi-scan JPEG files, but +we simply do not intend to support that capability with suspension. + + +*** Memory manager services *** + +The JPEG library's memory manager controls allocation and deallocation of +memory, and it manages large "virtual" data arrays on machines where the +operating system does not provide virtual memory. Note that the same +memory manager serves both compression and decompression operations. + +In all cases, allocated objects are tied to a particular compression or +decompression master record, and they will be released when that master +record is destroyed. + +The memory manager does not provide explicit deallocation of objects. +Instead, objects are created in "pools" of free storage, and a whole pool +can be freed at once. This approach helps prevent storage-leak bugs, and +it speeds up operations whenever malloc/free are slow (as they often are). +The pools can be regarded as lifetime identifiers for objects. Two +pools/lifetimes are defined: + * JPOOL_PERMANENT lasts until master record is destroyed + * JPOOL_IMAGE lasts until done with image (JPEG datastream) +Permanent lifetime is used for parameters and tables that should be carried +across from one datastream to another; this includes all application-visible +parameters. Image lifetime is used for everything else. (A third lifetime, +JPOOL_PASS = one processing pass, was originally planned. However it was +dropped as not being worthwhile. The actual usage patterns are such that the +peak memory usage would be about the same anyway; and having per-pass storage +substantially complicates the virtual memory allocation rules --- see below.) + +The memory manager deals with three kinds of object: +1. "Small" objects. Typically these require no more than 10K-20K total. +2. "Large" objects. These may require tens to hundreds of K depending on + image size. Semantically they behave the same as small objects, but we + distinguish them for two reasons: + * On MS-DOS machines, large objects are referenced by FAR pointers, + small objects by NEAR pointers. + * Pool allocation heuristics may differ for large and small objects. + Note that individual "large" objects cannot exceed the size allowed by + type size_t, which may be 64K or less on some machines. +3. "Virtual" objects. These are large 2-D arrays of JSAMPLEs or JBLOCKs + (typically large enough for the entire image being processed). The + memory manager provides stripwise access to these arrays. On machines + without virtual memory, the rest of the array may be swapped out to a + temporary file. + +(Note: JSAMPARRAY and JBLOCKARRAY data structures are a combination of large +objects for the data proper and small objects for the row pointers. For +convenience and speed, the memory manager provides single routines to create +these structures. Similarly, virtual arrays include a small control block +and a JSAMPARRAY or JBLOCKARRAY working buffer, all created with one call.) + +In the present implementation, virtual arrays are only permitted to have image +lifespan. (Permanent lifespan would not be reasonable, and pass lifespan is +not very useful since a virtual array's raison d'etre is to store data for +multiple passes through the image.) We also expect that only "small" objects +will be given permanent lifespan, though this restriction is not required by +the memory manager. + +In a non-virtual-memory machine, some performance benefit can be gained by +making the in-memory buffers for virtual arrays be as large as possible. +(For small images, the buffers might fit entirely in memory, so blind +swapping would be very wasteful.) The memory manager will adjust the height +of the buffers to fit within a prespecified maximum memory usage. In order +to do this in a reasonably optimal fashion, the manager needs to allocate all +of the virtual arrays at once. Therefore, there isn't a one-step allocation +routine for virtual arrays; instead, there is a "request" routine that simply +allocates the control block, and a "realize" routine (called just once) that +determines space allocation and creates all of the actual buffers. The +realize routine must allow for space occupied by non-virtual large objects. +(We don't bother to factor in the space needed for small objects, on the +grounds that it isn't worth the trouble.) + +To support all this, we establish the following protocol for doing business +with the memory manager: + 1. Modules must request virtual arrays (which may have only image lifespan) + during the initial setup phase, i.e., in their jinit_xxx routines. + 2. All "large" objects (including JSAMPARRAYs and JBLOCKARRAYs) must also be + allocated during initial setup. + 3. realize_virt_arrays will be called at the completion of initial setup. + The above conventions ensure that sufficient information is available + for it to choose a good size for virtual array buffers. +Small objects of any lifespan may be allocated at any time. We expect that +the total space used for small objects will be small enough to be negligible +in the realize_virt_arrays computation. + +In a virtual-memory machine, we simply pretend that the available space is +infinite, thus causing realize_virt_arrays to decide that it can allocate all +the virtual arrays as full-size in-memory buffers. The overhead of the +virtual-array access protocol is very small when no swapping occurs. + +A virtual array can be specified to be "pre-zeroed"; when this flag is set, +never-yet-written sections of the array are set to zero before being made +available to the caller. If this flag is not set, never-written sections +of the array contain garbage. (This feature exists primarily because the +equivalent logic would otherwise be needed in jdcoefct.c for progressive +JPEG mode; we may as well make it available for possible other uses.) + +The first write pass on a virtual array is required to occur in top-to-bottom +order; read passes, as well as any write passes after the first one, may +access the array in any order. This restriction exists partly to simplify +the virtual array control logic, and partly because some file systems may not +support seeking beyond the current end-of-file in a temporary file. The main +implication of this restriction is that rearrangement of rows (such as +converting top-to-bottom data order to bottom-to-top) must be handled while +reading data out of the virtual array, not while putting it in. + + +*** Memory manager internal structure *** + +To isolate system dependencies as much as possible, we have broken the +memory manager into two parts. There is a reasonably system-independent +"front end" (jmemmgr.c) and a "back end" that contains only the code +likely to change across systems. All of the memory management methods +outlined above are implemented by the front end. The back end provides +the following routines for use by the front end (none of these routines +are known to the rest of the JPEG code): + +jpeg_mem_init, jpeg_mem_term system-dependent initialization/shutdown + +jpeg_get_small, jpeg_free_small interface to malloc and free library routines + (or their equivalents) + +jpeg_get_large, jpeg_free_large interface to FAR malloc/free in MSDOS machines; + else usually the same as + jpeg_get_small/jpeg_free_small + +jpeg_mem_available estimate available memory + +jpeg_open_backing_store create a backing-store object + +read_backing_store, manipulate a backing-store object +write_backing_store, +close_backing_store + +On some systems there will be more than one type of backing-store object +(specifically, in MS-DOS a backing store file might be an area of extended +memory as well as a disk file). jpeg_open_backing_store is responsible for +choosing how to implement a given object. The read/write/close routines +are method pointers in the structure that describes a given object; this +lets them be different for different object types. + +It may be necessary to ensure that backing store objects are explicitly +released upon abnormal program termination. For example, MS-DOS won't free +extended memory by itself. To support this, we will expect the main program +or surrounding application to arrange to call self_destruct (typically via +jpeg_destroy) upon abnormal termination. This may require a SIGINT signal +handler or equivalent. We don't want to have the back end module install its +own signal handler, because that would pre-empt the surrounding application's +ability to control signal handling. + +The IJG distribution includes several memory manager back end implementations. +Usually the same back end should be suitable for all applications on a given +system, but it is possible for an application to supply its own back end at +need. + + +*** Implications of DNL marker *** + +Some JPEG files may use a DNL marker to postpone definition of the image +height (this would be useful for a fax-like scanner's output, for instance). +In these files the SOF marker claims the image height is 0, and you only +find out the true image height at the end of the first scan. + +We could read these files as follows: +1. Upon seeing zero image height, replace it by 65535 (the maximum allowed). +2. When the DNL is found, update the image height in the global image + descriptor. +This implies that control modules must avoid making copies of the image +height, and must re-test for termination after each MCU row. This would +be easy enough to do. + +In cases where image-size data structures are allocated, this approach will +result in very inefficient use of virtual memory or much-larger-than-necessary +temporary files. This seems acceptable for something that probably won't be a +mainstream usage. People might have to forgo use of memory-hogging options +(such as two-pass color quantization or noninterleaved JPEG files) if they +want efficient conversion of such files. (One could improve efficiency by +demanding a user-supplied upper bound for the height, less than 65536; in most +cases it could be much less.) + +The standard also permits the SOF marker to overestimate the image height, +with a DNL to give the true, smaller height at the end of the first scan. +This would solve the space problems if the overestimate wasn't too great. +However, it implies that you don't even know whether DNL will be used. + +This leads to a couple of very serious objections: +1. Testing for a DNL marker must occur in the inner loop of the decompressor's + Huffman decoder; this implies a speed penalty whether the feature is used + or not. +2. There is no way to hide the last-minute change in image height from an + application using the decoder. Thus *every* application using the IJG + library would suffer a complexity penalty whether it cared about DNL or + not. +We currently do not support DNL because of these problems. + +A different approach is to insist that DNL-using files be preprocessed by a +separate program that reads ahead to the DNL, then goes back and fixes the SOF +marker. This is a much simpler solution and is probably far more efficient. +Even if one wants piped input, buffering the first scan of the JPEG file needs +a lot smaller temp file than is implied by the maximum-height method. For +this approach we'd simply treat DNL as a no-op in the decompressor (at most, +check that it matches the SOF image height). + +We will not worry about making the compressor capable of outputting DNL. +Something similar to the first scheme above could be applied if anyone ever +wants to make that work. diff --git a/Build/source/extra/jpeg/testimg.bmp b/Build/source/extra/jpeg/testimg.bmp new file mode 100644 index 00000000000..8603d15484d Binary files /dev/null and b/Build/source/extra/jpeg/testimg.bmp differ diff --git a/Build/source/extra/jpeg/testimg.jpg b/Build/source/extra/jpeg/testimg.jpg new file mode 100644 index 00000000000..b34ca5d3151 Binary files /dev/null and b/Build/source/extra/jpeg/testimg.jpg differ diff --git a/Build/source/extra/jpeg/testimg.ppm b/Build/source/extra/jpeg/testimg.ppm new file mode 100644 index 00000000000..9d81ce24a3b --- /dev/null +++ b/Build/source/extra/jpeg/testimg.ppm @@ -0,0 +1,4 @@ +P6 +227 149 +255 +0/-0/-10.21/51.51.62/62/83/83/:3-:3-:3-:3-:3-:3-:2/91.91.80-80-91.91.:2/80-80-80-80-80-80-80-80-6.+6.+6.+5-*5-*4,)4,)4,)4,)4,)4,)4,)4,)4,)4,)2-)/*$/,%/,%0-&1.'2/(30)30)63,63,74-85.85.96/:70:7.A:0B<0D>2F@4IA4JB5KC6KC6MD5MD5OC3NB2OC3OC3PD4RE5R?1Y?2b@4nB5}E6‹H8™G9£F7¯G:¸G9¾E:ÅG;ÇG>ÊG?ËH@ÐE@çFLíCLëDKëEIîCIïBDñ>Bô=Aø;A÷:@ô:?ð×?<ËA7»=/µ@.µ@.´?-´?-³@-²?-¯@-­@,ªA,¦A-¢B,Ÿ@*›A)˜@*–A,”>-’?/’?/‘>.‘>,=+’<+’<+”?+”?+”=*”=*”=*•>+–?,–@/–?6•>5—=2Ÿ?1©B3³D3¼D4¿D4¹?0µA2¬F8žH;‡H9oA2T8*C3&=5295495473271160050-50-72/72/72/61.61-50,50,41,//-.0-//-//-0/-0/-2.-2.-5,-4+,4*+3)*7(+=.1E69P:0U?1^A3jC4xD6„E4’E5œC3§C4¯A4µA4¼B7ÀD:ÄE<ÅF=ÍC@áEIçBIèCIêDHíDGïBDó@Cö?Cø;A÷:@ô:?ðÕ@<Ê@6¹>/µ@.´?-´?-´?-²?,°?-¯@-­@,©@+¦A-¡A+Ÿ@*›A)˜@*–A,”>-’?/‘>.‘>.‘>,=+’<+’<+”?+“>*”=*”=*”=*•>+–?,–@/”@5•>5˜>3 >1«A3µD4½C4¿D5»A2·C6¬F8œI;…G:l@3S9*B4)>63:6595484382271161.61.72/72/72/61.61-50,50,41,//-.0-//-//-0/-0/-2.-2.-3--5,-4*+3)*5)+<-0C47N8:d>=vEA†JINLšTV¤aj¥l}rŽ‘{¢†€®…¹{„»ou©[[QHuOCiOFeOG_PH_RN_[Yfnotƒ‡ˆ”™•™ž—š ”™‘ƒ~ojkY][LVSJXSZVRaXQa/.,/.,0/-10.40-40-51.51.72.72.72.72.92,92,92,92,91.80.7/-7/-7/-7/-80.91/80.80.80.80.80.80.80.80.6.,5-+5-+5-+4,*4,*4,*4,*5-+5-+5-+5-+5-+5-+5-+3.*2-'1.'2/(30)30)41*41*52+63,63,63,74-85.96/96/:7.?8.@:.B<0D>2G?4H@5H@3H@3I@1I@1K?1K?1K?/L@0MA1NB2MA1QA1YB2dC2qC3|C2‡B2’A0˜<- :+§;.¯=2µ@6ºD:¿F=ÅD>ÙCEá@FãBGçBFêDFðCEôADø?Dú;@ù:?õ;@ð=@è@@ÜA=Ñ@;Æ@5·=.³@-³@-²?,²?-°?-¯>,­@,ª?-§@-¥@,¡A+A,š?*˜@*•@+”>-‘>.‘>.‘>.=+=+=+=+‘>,‘>,’<+’<+“=,“=,”?+•?.•A6–?5š>3£>2¯A4¹C5¿D5ÁC5ÀD8¸F;®I=™J=G;h@4Q:,B5,?74=77<66:4494183072/72/62/62/62/51.52-41,41,21,.0-,1-.0-.0-//-//-0/-2.-5//4..5,-4*+4*+9-/>24I56[97l?9|E@†IDOM˜[`›fv”mˆŒwžƒ}­}‚¹u~·fm¤TV‰MEvLAkMAeOFcQHcMH^NK\[[eqty…‰ˆ‡Œ†Šˆ…†Š|xzlfiXZ[MVSLZU[ZT`[S`.-+/.,/.,0/-3/,40-40-40-61-61-61-61-81+81+81+81+7/-7/-6.,6.,6.,6.,7/-7/-80.80.80.80.80.80.80.80.5-+5-+5-+4,*4,*4,*3+)3+)6.,6.,6.,6.,6.,6.,6.,4/,30+30)30)41*41*52+52+52+52+52+63,74-85.85.96/96->7-?9-@:.B<0E=2E=2F>1F>1G=1G>/H<.I=/I=/J>.L@0JA0KD2NE4UD4^D3iD2sB1~A/†?-Œ9)”9'9*£<-¬@3³E8¸H<ÁF>ÒDCÚACÞBCâDCçCDìBCó@C÷?Aú;@ù:?õ;@î>@åA@ÚB=Í@9Â@3µ=-°@,°@,°@,¯>,®?,®?,¬?+©@-¦?,£@+ @*œ@+˜@*–@)”?*‘>,‘>.‘>.=-=+=+<*<*=+=+<*<*’<+‘>,”>-’?-•A6–?5œ>2¦@4²B6¼C8ÁC7ÂB7ÂF<ºJ?¬L@—K>|F:b@4L:.A7-@85>96=77<74:5294183083062/62/62/32.52-21,21,12--2.-2./1./1.00.00.10.10.5106005//5,-4+,6,-:01D22T71c;3qA7{E;‚HD‰RU_l‹i‚ƒs˜}y«x}µowµ`f¢QR‹LEyL@pL@hPEgQFfLC^GBVMLZ^^fjnquyxx}wz€vwzokoa`bTWYLTTL]WY]V]]V^------.-+/.,0/-10.3/,40-3/,3/,4/+4/+4/+4/+6/)6/)4/,4/,3.+3.+3.+3.+4/,4/,50-50-50-50-50-50-50-50-3.+3.+2-*2-*2-*1,)1,)1,)4/,4/,4/,4/,4/,4/,4/,4/,41,41,41,41,41,52-52-52-52-52-63.63.74/85096196/<5-=6,?8.@9/B:/C;0C;0C;.D:.D:.F:.G;-H<.I=/J>0I@1JG6MH5RG5YF5bE3jD1uB/}>,‚;)‹:)“:*š=,£B2¬F8²J=»I?ÌGBÔDCØDBÝEBâBBéAAð=@ô<>ù:?ø:<ô<>í?>áB>ÓC:ÅA5¹?0²?-®?,®?,®?,­>-¬>-¬>-ª?-¨>.¤?- ?,ž?+š?,—?+•>*“>*‘>,?.>->->-Ž=,Ž=,Ž=,Ž=,Ž=,Ž=,Ž=,<,>-‘>.?.”B4—A4@1¨@3¶A7¿C9ÅB8ÄA7¾C;·H?¦LCJ@tE;Z>2E9-<5+@93@85?75>63=52<4194083/62/43/43/23.32.12-12-02--2.,2.-2.-2./1./1.00.10.3205105104..2,,4+,7./=/.N5.Y9.e=1n@3sB;yKK€Zeƒg€p—zxªu{·ks´_d¦TT”OGƒLBwNAmNBhMAeJA`GBYGFXKKWMPU]cc`fbbia`f\Z`TW[MUXMXXP^YV`WX`WZ,,,,,,.-+.-+/.,0/-3/,3/,2.+2.+3.*3.*3.*3.*5.(5-*3.+3.+2-*1,)1,)2-*3.+3.+3.+3.+3.+3.+3.+3.+3.+3.+2-*2-*2-*2-*1,)1,)1,)0+(3.+3.+3.+3.+3.+3.+3.+3.+41,41,41,41,41,41,41,41,41,52-52-63.74/85085085.;4,<5+=6,>7-@7.A9.A9.A9.C9/C9-E9-F:.G;/H<.J>0HA1JG6IH6NG5VF6\E3dC2n@0v>-{<+‚;)Œ;*”=,œ@1£F5ªJ:´J=ÄH@ÌEAÑFAÖE@ÞCAä@>ì>?ñ:<÷;<ô:;ð<=é@=ÜC=ÍC8¾@2±>,®?,«@,ª?+ª?+ª?-©>,©>,¨?,¥>-¢?, ?,›>,—?+•>*“>)‘?*>+>->->-Ž=,Ž=,Ž=,<+Ž=,‹<+<+‹<+‹<-Œ=,>/Ž?.”B4—A2 @2¬B5¹C9ÂC:ÅB:ÂA;ºA9±I@£NGNEoG=S?4A;/96-@93A75?74>63<4194083/74/43/43/34/23.23.02-02-.3--3/-3/.3/.3/02/02/11/11/21/32032040/2.-1-,4..8.,G4-O4)X8+`<0e?6mGFyYd‚k…€uŸ||²w|¼nu»dh¯[[¡RMLB~OArL@hI=cH>`HB^ECX@BO;@FBGJDMJJQJJQIIQFKQEOUIVWO^YS`YS`XU++++++,,,---/.,/.,0/-0/-1-*1-*1-*1-*2-)2-)2-)2-)2-*2,,1++1++1++1++2,,2,,1++1++1++1++1++1++1++1++2,,2,,2,,1++1++1++0**0**3--3--3--3--3--3--3--3.+41,41,41,30+30+30+30+30+41,41,52-63.74/74/85085.:3+;4,<5-=6.?6/?6-?6-?7,B8.B8.E8/E9-G;/H<0J>2H@3HE6GF4KE5QD4XC2_B2f?.n=,v=,|:*…9)Œ;*“=.›B2¢F7¬F8»F<ÂF>ÉF>ÐE>ÙD@âC?ê@@ð>>ò::ñ;:ì<<äA<ÖC;ÆD6µ@/ª=)ª?-©@-©@-¨?,¨>.¨>.§=-¥>-£=. ?.ž?-š?-–?,“>*‘?*>)>+>->-Œ=,Œ=.Œ=.‹<-‹<-‹<-Š=-Š;,‰<,Š.‹=0Œ?/’C2˜B1¡A1®B6¼C:ÂC<ÄC=ÀC=¹FA²QJ¥XRXQsRIWI>CC793@72>71=60:5/94.83/63.43.43.34/13.13..3-.3-.3--3/-3/-3/-3/.3/.3/02/02/00.11/22021/0/-/.,2.-4/,?0+D0)K3)T8-Z<4dFFu]jƒs‰€«…„¾~ƒÇtzÆmp½ce¯VSšLC‚K?qI_FB]DBW?AN;?H:BE>HGDMHGQIGQHJRGNVKUXM^ZOaYNaXO++++++,,,,,,.,-/.,0/-0/-1-*1-*1-*1-*2-)2-)2-)2-*2,,1++1++0**0**1++1++2,,0**0**0**0**0**0**0**0**2,,2,,2,,1++1++0**0**0**2,,2,,2,,2,,2,,2,,2,,2,,3/,30+30+30+30+30+30+30+41,41,52-63.63.74/85085092,:3+;4,<5->5.>5.>5.>5,B8/B8.E8/E8/G:1I=1J>2I?3FC4FC4JB5OA4TA2\@2b>0j<-q<.w9*}8)…8(Œ:,•=/›B4¤B5²F:ºE;ÁF>ÊG?ÔG@ÞFAçCAîB@í;;ë;;ç>;ßB;ÑD:¿D4¯@-¤>(¦A-¦A-¥@,¥@.¥@.¤?-¤?-¤>/¢>.Ÿ@.œ?.˜?-•>+‘?*>)>+>->->-Œ=,Œ=.‹<-‹<-Š=-Š=-ˆ<.ˆ<.ˆ<.ˆ/ˆ>1‹?1‘D2–C1¢B4­C6ºC;ÁD>ÁD>»EA¹PL²[T¥e\‘f]u_T[UIGMACI?<92?82>71;6094.74-63.43.43.34.24/13./4..3-.3-.3--3/-3/-3/-3/.3/.3/02/02///-00.22022010.0/-0/-3/,8,,;,)C0*K70S<6^IHtbn‡z”Š¶ŒÆ„ˆÏz€ÌrxÆik¶WWŸID„E=nG^CAY@CV@DP>EKGQRKWUQ^WU`XS_UR^TT^SY_S^[LaZJaZJ,-/,-/,-/,.-------.-+.-+/.,/.,1-*0,)0,)0,)/+(/+(/+*/+*/+*/+*/+*/+*/+*0,+/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+1-,1-,2.-1-,1-,1-,1-,1-,1-,1-,1-,0,)1-*2.+3/,3/,3/,3/,3/,3/,3/,3/,3/,40-51.62/74/80-92,:3-;4.=4/>5.>5.>5.?4.?5,B5-C6.D7/F90G:1F<2G?4H@5J@6P?5T>3X<1^90b6+m9.t8-|8+ƒ9,;/“=0˜?1ž>0§A3­A4µC8¾E:ÊG=ÔG>ÞE?åC@è@?êBAæDAÚE>ÈD8·B1ªA.¢B,¢A.¡@-¢?,¢>.¡=-¡=-¢>. ?/œ<,š=,˜<-•>-“=,=+Ž=*Œ>*‹<+‹<+Š=-‰<,‰<,‰<,ˆ:-‡;-‰=/†3ˆ@2‰A5‹A4‘E5—D4£E9±I>ºG@»D>»EA¸MG´ZR¯f_£qf‘sh~rdjj^V^SIQFLLBJF=B>5<8/95,74+63,33+43.34.14-14-02-/1,,1+,1+-2.-2.-2.-2./1./1./1./1.02/02/11/11/11/11/11/40/4+0;/3A32C4/J;6]OOymy‹…Ÿ“»”–Ï•Ùƒ‰ÓtzÆjn·_b§Z[”LItHBdA>]>>X?BUAIVLU\U`bbqnn}xv†|rulyoguh_k_W_P]\Hb\Fc]G,-/,-/,-/,-/------.,-.-+/.,.-+0,)0,)/+(/+(/+(/+(.*).*).*).*)/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+0,+1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,0,+0,)1-*2.+3/,3/,2.+2.+2.+2.+2.+2.+3/,40-51.62/80.91.:2/;4.=4/>50>50=4-?4.?4.A4.B5-C6.E80G:2H;3H>5H>5L=6O>6Q=4V;2Z90_7/h70p7.w7-9-‰9.<1–<1›=1¢@3§A3¬B5´D8¾E:ÉF<ÔE=ÛD=ßD@àE@ÞFAÔG>ÄF8²C2¥B-žB-ŸC.žB-Ÿ@.ž?-ž?-ž?-ž>.ž>.š=,™>,–=-”=,=+>+Œ>*Œ=,‹<+Š=+‰<,‰<,‰<,‡;+‡;-…<-†2†@6‡A7ˆB6“G9—E7£G<¯J@¸IB¸GA·LF³TN±d\ªqfŸ~oo|mmseZfZNXMLNAKI=EC7@=4=:188.44,11)23-23-03,/2+/1,.0+.0+.0+/1.-2./1./1./1./1./1./1.02/02/11/11/11/11/11/2015+49-7<23?53H?:^VTxr|Šˆž““¹”—Ê–Ô„‹ÏyÂqy¸kt­hnž\_€XZqSUjRWjT^hZgmfvvr‚tˆ~’‡ƒ•‰~Žv†yr€qfteZeT[ZE`Z@b\D,-/,-/,-/,-/,-/,.-------.-+.-+.-+-,*/+(.*'.*'.*',+),*+,*+,*++)*+)*+)*+)*-+,-+,-+,-+,-+,-+,-+,-+,,*+,*+-+,-+,-+,.,-.,-.,-.,-.,-.,-/-./-./-./-./.,0,+0,+1-,2.-2.-2.-2.-1-,1-,1-,1-,1-,2.-3/.40/51.80.91.:2/;30=31=4/=4/=4/?40?4.A4.A4.C60D71F93G:4H;5J;6K<7N=6P;6S:5V72[6.c60k6.t5,}7/‡9/;0”<0–<1?3 @4¢@3¨@3±C6ºD8ÅE:ÍD:ÕF@×H@ÔIBÌI?¾E:®C3¡B.œA.B/œA.œ?.›>-›>-›>-›>/›?0˜<-–=-”<.“=.>-Œ=,‹<+Š=+‰<*‰<*‰<,‡;+‡;-…<-„:-ƒ;-„<0‚<0‚<2‚>3ƒ?4…A8‡C:ˆD9”J=—H; H>¬KD²KF³LG²SM®`V­sg¦qŒz‘Ž{‚‰ws€ocqbXcUNRDMN@HI;DD8@@49;.46+/1&01)01)/0*/0*./*./*//-//-//-.0-//-//-//-//-//-//-00.00.00.00.00.00.00.1/26+97+98/4;63HE>_^Yzz|‹š”±’—¿•Ç„ŽÃ}‰»{‰¶|‹²}Œ«}ˆšwƒq~‡n}‚n~~o‚~yŽ…ƒ™‹¡”‘¨˜¥”ˆŠƒ–ƒ|{j{i\hTXX@]Y<_[@-.0-.0-.0-.0-.0-.0.......-+.-+-,*-,*.*'.*'.*'.*),*++)*+)*+)*+)**()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+-+,-+,-+,-+,.,-.,-.,-.,-/-./-./-./+*0,+1-,1-,1-,1-,0,+0,+0,+0,+0,+0,+1-,2.-3/.40/91/:20;31<41=31=31=31=4/>3/>3/@2/@3-A4.C60D71E82F93H94I:5J;6L:6N94Q83T50^72e60o6/x8/‚90Š:/<1”>1™?4›?4›?2Ÿ?1¥A2®B5¸D7¿E:ÇG>ËH@ÊJAÃI>¶F:ªB5žA0™@.™A-™A-˜?-—>,—>,™>,™=.—>.•<,”=,“=.=-Ž=,Š=+Š=-‰<,ˆ;)ˆ;)‡;+‡;+„;,„;,ƒ;-€;,;/€<1€<1>5ƒ@7ƒC:‡D<ˆE<”L@–H<žG>§JC®LI®QL­]Vªj^§€o¡yšš‚›ƒ†•€z‹xm{jbm]SZJQUFKO@EI:@D6;=057,13(01)/0(./).-(.-).-)/.,0/-/.,/.,/.,/.,/.,..,/.,..,0/-//-0/-//-//-//-//-2-17,:6*83-1961HJ?bfX{€z‹““£–°Œ•¶ƒ²¯…™²¤¶’¨³“¨«¤£Œ ž‡ž˜‚™}˜‰œ‹ˆ£”°š˜±›”­—‹£…›„’|k|iXfOSV;ZV9^Z=+/2+/2+/2+/2-.0-.0......------.-+-,*-,*,+),+),+),*+,*+,*++)*+)**()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*++)*+)*+)*,*+-+,-+,.,-.,-/-./-./-./+*0,+0,+0,+0,+0,+/+*.*)/+*/+*/+*/+*0,+1-,3/.40/901:20;31<42=32=31<20<20=20=2.?1.?1.@2/A30B5/C60D63C84D95E:6G96H94K84N50X72_60i70r7/}:1†<1Œ>2>2—@6—?5—?5—?3œ@3£C5«C6³E8ºE;½G=¾H>¹G=°D8¦A5›?0—@/—@-—@-–?.•>-”=,•<,–=/–=/•<.“;-’0->0-?1.@2/A4.?4.@51@72@93A:4B94C84F74H5/Q51X5/a6/l8-u9.€0‹=1“?5•>5“?5“?4•B4šB4 C4¥D4¬B5°D8´E:±E;ªB7¡?4š>1–>0•?.”?+“=,“=,“<+“<+”<.”<.“;-’<-<.;-Š;,‰<,‡;+‡;+†:*†:*…9)ƒ:)ƒ:+9*9-9-€<1<3?6€A8‚C<…F?ˆIBŠICŽJAG>—HCŸNJ§VR§`Z©pe¤ƒrœ”}–¡ƒ¨Šˆ§ˆƒ „~–~yˆup{jdp\]iSR^JJS@BK:>E5:@29<134,22*1.)/,'/))0**1++2,,1++1++1++1++1++0,+0,+0,+1-,1-,1-,1-,/.,/.,/.,2,.8*75(13+(56&EK1\gGu‚d†“yŽ›Š‘ž”Ÿš‹ž˜¥——´ž¢Å¥©Î­¥É­¦Ê°§Ë±¤È¬—¾Ÿ‹³‘ˆ°²Ž²Ž²¬Š„¡‚€™{wŽrdx]Q_ENR7QQ5SR6,03,03,03,03./1./1./1./1/////////////.,/.,.-+.-+/-..,-.,--+,,*++)*+)**()+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)**()*()*())'()'(+)*+)*,*+-+,.,-.,-/-./-./+*/+*/+*/+*/+*.*)-)(,('0,+0,+0,+0,+1-,2.-40/40/:12;23;23<34=32<21<21;10<1/<1/>0/=/.>0->0-?1.>3/=60;60;83<94=:5>93@72C60G4.O4+Y4+d5+n8,x:-;.…;.<4‘<5>3@3A2“B1—A2™@0 >1¦@4ªB7ªB9¥@6Ÿ>5—=2•?2’?-’?-‘>,=+‘;*‘;*’<-’<-‘;.‘;.Ž;-;-Š;.ˆ:-†:,„;,…9)…9)ƒ:)‚9(‚9*9*~8,~8,€<1€=4€@7B9„E>…IAˆKFŒMFŒIAŽH@˜JF¡SO¨]X©hb©{n¤Žy™œ’§†‰¬‹‚ªˆ€¡„™€~‹wxnjxadr[ZhQQ]IITCCL;>D60-?1.=2.=4-=6.;819919:29:2;81?6/C2+J1,T2)^3*g7+o9-u=.z2¢B6¡C7žB7™?4–>2”>1”>/“=.=-<,Ž=,Œ=,Œ=.>/Ž<.Ž<.‹2>5€@6‚C:ƒG=…JB‡NE‹OGŒICŽID“PJ˜\Tžg`uiž‡už˜€”¡…ª‰‰¬‹ƒ¨‡€¡„~›zytˆoi}bby]\pUUgOO\HGRAAH8=A388.85.7/,3+)2()2()3)*4*+0*,/+*0*,0**0*,0*,2),2),3*-1+-1+-1+-0,-0,-0,-1+/4)/4*+4-%46!?F%T`8m|Qg‰™tžz¡~ˆ¡zŠ§{‘¶‚›ÄˆŸËŸÉ™žÇÆš˜Á•Œ·Š‚­€…®‚Œµ‰„«‰®…‰©‚~œxvolƒfZnSJZ?GM3FJ1DF./0+.0+/0+01,01,01,12-21-32.43/43/62/51.41,3/,4/,50-50-4/,3.+2,,1-,0,+0,+.,-.,---/--/,,.++-*).))+.)/.)-/(/.)-/)-.)-.*+.*+/+*/+*-,*.-)--+-.)./*./*------.,-/-./.,0/-2.+2.+2-*4,)5-*6.+8/*:1,:1*;2+=4-=4->50>50>50=4/<3.;2-=2.<1-<1/;0.=/.>0/>0/@1.A0)@2);4*77-39-28.56.:3-?-)F*'L)'S*&Z/(`5,d<0k@0yA0@/†A1‹B3@3“=0“;/’8-“;/“=.”A1•B2”C2’A0‘>.‘;,—;0—:2’;1Œ=0ˆ?0„?/‚?.ƒ>.ˆ@1ˆ?0Š>1Š<0‰;/ˆ:.†:-ƒ;-{9+~@3w<.q7)w>-w>-v;-}?2{;/‚@4‡E9‰I?ˆLA†MB„PC‡NE‘KI—SP”bY‘paŒ}j‰‰q‰–|Šž‚¤‡¦‰Ž§Š§Œ‡¤ˆ~Ÿ‚uš{o—uiib„_[zXZsUZnSWeNPWEJK=C?6@93;0.6**3')3'+3'+1&*,*-)+***,*(),'+.(,1(-2'-3(.3(.3(02(00)10)1/*1/*0/)-1++0-(//#5,>5,>5.>5.>5.=4-<3.<3.=2.<1-;0.;0.=/.=/.>0/@1.C0*C0)A2+>4+:6-95,:3-<1-?-+D*)I*(N+'T/)Z5-_:1e>/pA/xA-€A0ˆ@2?4‘=3“:2“;19.‹.Œ@0A1A1ŽA/‘?1•;2•;2<2‹=0†>0ƒ@/?/‚?.…@1†>/‰=0ˆ<.‡;.„;,‚:,€;,x8,x<1s9-n9+s>.s>.r8*u:,}=1ƒA5‰E:‹I=‰K@†NA„PC‡NE‘JH—SR’f]Œwf„†p€“wž„¥†ˆ§ˆ§Š§§Š¤‰Ÿƒwœ}o˜ve’i`‹`Y‚ZY{X\wXZnSSaJNUCFH;C@7<737/-3*+2)*1(+.(*,*+**,+),+),-(,/)-2(02(02(02(02(10)1/*1-*3-*3-*12-12.-0,)--%8:,SXBox]€‹i‡–o†™l†žnˆ£p†¤p„¥pŠ­w“¶€™¹‡–¶„“³Œ®{†«x‚¨w‚¨yƒ¨|ƒ¦|‚¤{x’uqˆnh{eYjWMZHEL<@D5;=/12,12,12,12,23-23-43.43.54/54/85085085074/72.61-80-80-7/,6.+4/,3.+2,,1-,1-./-.0.1/-0--/,,.+*/+)./(/1'//)-/)-/)-/)-.*+.*+0,+0,+/.*/.*/.)0/*0/*0/+//-///0./0./0/-/.,1-*2-*6.+70*90+:1*<1+=3*>4+?5,?6-?6-@7.@7.?6/>5.=4-=4-=2.<1-;0.;0.;0.;0.<1/?1.C2+E0+H/+K--L,/K+.I*/E+.A-,@.*A.(E.(M.)X1*b3-g5,j:,o;-w;0=4‡<6Œ<5:4:4Š<2‡=2†>2…?3†A2‰A3ŒB5C5Ž?2=/Œ>1Š>.‡>/…>,†=.ˆ<,‰;.‰<,ˆ:-†:*ƒ;,<)~=+{<+}=1z<1v:/u;/x@1x@1v<.v;-?5‚B8‰F=‹H?‰JA‡KA‡NCŠNF‘JH˜TQ–f\ve‡…n‚‘t{¤ƒ…¨‡ˆª‰ªŒ©ŒŽ¥‰ˆŸƒš}y˜xi–ma’e\‹a\†`]‚`[|]UrVPhPFYEBP?:D93:2.3,*/)*,)**(0'(1&*1&*1&*0'*1(+0*.0+//*.-+.,+0+,0)-0(-1(-1)-01/23/..*'**"57*PUAmv[|Ši€k~“j™jƒŸn€ n~ m€¥q‡¬x¯|‹­zˆªx„©v§v§u¦w¦y¤y€¢}}›yw‘tp‡mh|cYkUMZHDH9=?299-23-23-34.34.34.45/54/54/650761961:72:72961940940:2/91.91.80-50-4/,4..4..3/03/01/01/20.1..0--/-+.0)02).0*.0*.0*.0*,/+,/+*1-,1-,0/+0/+10+10+10+10,11/1111/010.10.2.+3.+3.*92,92,;2+<3,>4+@6-@6-A7.B8/A8/B90A8/A81@70>5.>5.=2.=2.<1/;0.;0.<1/=20=2.B3.E2.L..R+0V'/U&.P'/I).C/.<1+;2)?2)G0(R/)_.*d/)i9/k;/u<3}<6…;8‰;9Š;7ˆ:6‰>8†@8†B9…B9…C7†B7‡A7‰A5ˆ@1ˆA/‡@.‡@.‡>-ˆ<,ˆ;+‰:+Š8*ˆ9*‡:*ƒ:)<){=(x>(x>*‚>1{7.z7.z<1v;-w=/|A3{@2€B7ƒE:†H=ˆJ?†J@‡MBˆODŠQHŒSJŽ\QŽh[‹tb…g€‹m~–vž|ƒ§ƒ„©‡‡ª‰‹ªŠ‹¦‡‡ ‚ƒš~}˜yq•oi”ifgfŒeg‹gd†e_~_Zw[PhPK^JBP?8D62:/.4*,/(+*%2&&5%(4%(2&(1'(/)+/+,.,-+++*+-*+-(,-(,/',/',/*+-.*+1++0+'.+"88,PUAiqYv„c{Œhyh|–iœl}Ÿmyžkz m¥r‚§t€¥q}£p}£p}¥s~¥v~¥x}¤x|¡x}Ÿzz™wuqn‡je|bWkRN[GDF9?=1:8,45/45/45/560560560761761872872;83<94<94<94<73<73<41<41;30;3083072/61.61.5106216213122011/00./1-.2,04+.4+.4+.2,.2,,2,,2,,3/.3/,3/,3/,21,21,32-32.32032032032051051.61.61-;4.<5/=4-?6-A7.B8/E8/C9/D:1D:1E;2D:1C90B8/@5/@5/>3/>3/=2.=2.=20=20>31>31@51E31M02T,4X)3W(2R)1K,1B30:6-77+:6*B4)M2)X/)^/)f:1j;3s<7z=:‚<:†<;‡;;†::‚;7>8A8B9ƒC:ƒC:…@9„@7‚C2‚C1ƒB0„?/†=.ˆ<.‰:-‹9-‰7+‡8+…9+‚:+~=+x>*v?*x>*9-|/'‚8/„>4w4+s5*}A6}C7E:€G<‚I>ƒJ?„KB†MD‡QG…WJ|aNzjQ€pYu]‚|bƒ†i†“uˆ|ƒ£~§‚‚ª…‚¬†©„¥€{ž}z™wz’pzlxlwŒkumr‰lm„gkd`rX[iRR[HHL=@@4;7,70&5*$6('5''3''1'&.)&+*(++)+-*',('+*)+*)+***,+),+),-)*,#$2*'50*86*BC5UZFfpWn}^tˆeqŠbuex˜iw›ks™htšiwŸkz¢nx lwŸmx ny£s{¥u{¥w|£wyžuzœww–tsŽom†hd{_WkPN[GCC7>:195,560560671671782782872872983:94=:5>;6>;6>;6>95>95?74?74>63=52;63:5294194184184395484373243151240/6-06-.6-06-.4..4..4..4/,40-40-40-51.32-32-43.43.43/431542540841850940:5/=60>7/@7.A8/C90D:0G:1H;2F<3F<3F<3F<3E;2C90B71A60@51@51?40>3/>31?42@53?53@72C52I35P16T/6S.5P05J22C52=90<:-=:+C7)I6(Q3)W2)]2+d3,l50v64}77‚87ƒ77‚66~75}:4}<6}>5€?9ƒ@8†?9…A8€B3€C1B1ƒ@0…=/‡;.ˆ:.‡9-…9,ƒ9,‚:,<,|=,y>,x?,|=,‡5*‹2,¡LE§XQ‹A8|90‚F;€K=yH:zJ<{M>|N?}OBQE‡UJ‚_LrkOosR|uX‡w]yb˜iŸ‹s ”z––z|‹£ˆ¨…§‚€¤~{Ÿy~™vƒ‘p…ŽoƒŽp€pp{ŽpwŒms‡kj~bfv\_hSV[GOM>GA3@6*=0';,'9+(6+'3+(/,',-'+.').().(+-(-,*/+*3)*4(*7'*7'(3($<3,E>4IG8QR@]bKgqVjyZn‚]k„\l‰]p‘bq•eo•do—eršfuŸmrœjq›itžnx¢rz¤vy¢vyŸvvštw™vu”rokj…fc|^UlON\ECC7@91;4,671782782782893893983:94:94;:5>;6?<7?<7?<7@;7@;7B:7B:7A96@85=84=84<73<73<73<74<74<74;639529338308/09/.8/080.80.80.61.61-61-61-52-52-63.63.74/74/540540841952:63<94=84@93@70A8/C90D:0G:1H<0I=1I=1J=4J=4J=4I<3F<3D:1B8/A7.A81@70@72?61?61@72@72A83?74@85B86D97G96H96H96H94E80E8/E9-E9+G9,I9*K9+Q7*Z/&d/'n3-z63ƒ98‰;9‹;:‹=;‹A>‡@:‚=6<3:3‚<4ˆ=7‰@7ƒA5B3‚@2ƒ?2ƒ=1„<0;/€/|>/}>/=/†9/1+¢<8ÍlfÙ~y­ZTŒC<ˆLAN@tJ(+C&+E$+C&(F5-LC4VQ>[YD`bJgmQiwVj{Wl‚[g‚Wf†WlŽ\o”an”an–bršfsko›jo™irœnw ty¢xxžwu›vs—su—vs’rn‹li„cb{[TmMM]CGH:E<5@707827828938938939:4:94:94;:5<;6?<7@=8@=8@=8A<8A<8C;8C;8C;8B:7?:6>95>95=84>95>95>95>95=85<73:51;30:0.:0.91.91.91/91.91.72.61-61-63.63.63.74/74/74/540651952;83<94?:4B;5B;3A8/B:/C9/E;/H<0I=1J>2J>2K>5K>5J=4J=4F<3E;2C90B8/B92B92A83@72@72A83B94A:4?82@93B;5D=7F=6G<6K<5N;4M6.N6,Q6+Q6+Q7*P9+P9)V6'f6*r6,~;3‰@9•D@›HDŸJGŸLF QJ™LDŽD;…;0„7-…7-Œ91=4ˆ>5‡>7†=6…<5…<5=4}=3z>3x@3vA3x@3z>3<3ƒ:3ˆ73‘31˜(&³=;ì|zý•’Åhc–G@‰K@xH:nMhV>lX@t[E`L€hPysQ„wUžt\´l^É__ÓV\ÙQ[×T\äouÙzx̆|À~µ•€«•}£’xŸvœŠrœŠt™u•u‘‘u‹’s†‘s‚‘r|‹ny†ju{amoWgbN_TBUE5R/(9/&7.'6/'81):/)=.+A,+F)+H(+K'+H)'TB4YQ9B?:D?;D?;E@8E>8D=7B;5B;5B;5B;5B:7B;5A:4A:4A83A83A83@72@64>71>71>71<71<71;60:5/85.85.74/74/961961961:70<71=82A:2B;1C:1D<1F<2J>2K?3L@2N@3N@5N@7N@7L?6K>5I<3H;2E;2E;2B90A8/@91?80?80?80@93@93<5/MD=M@:K:3T@9R62O0+a<6\3-`5.`4+^/'^/%f6,m=1q=0‰I=G;—I?ŸKAŸF>›>7š=6žD;¦ND¤PE¨VJ«YK¥OB™A5—;0›>6“98‘98Œ65†52†84„?8|@6r>1rB4oA2q=0v:0‚72Œ43’-1š',ÈHIèbaÅEDÍWUáyv«VO†F<„VFmR=i[AibFjeHj`En^D|dLjT’bL²m]ÑnhÛX]à;Lç-Eò+Hõ0Lö@YìI\ä[eånrâ{|Û€}Ûƒ؉‚Ãv½wº„x¶†x²ˆx­Šw¨‹y¥Œxš€o™~m˜xi“oabY„UM{IBxA>u:9:49:49:49:4:;5;<6>=8?>9>=8>=8A>9A>9B?:C@;D?;D?;FA=E@8E>8E>8E>8E>8D=5C<6C<4D;4C:1B92B92B92B92A83A83@93@93>71<71;60;6096/85.74/74/96196/96/:70<71>:1A:0B<0C;0E;/I=1J>0L@2L@2N@3N@3N@5N@7M?6J=4I<3H;2E;2E;2C:1B90@91@91@91@91A:4B92D93I81L/+V.,j76u99{;;…ECƒD?„H@…IA†G>ŽIB™NH¡PL¢OG“D7”B4šB6ŸC8 >3œ7-œ7-Ÿ=0£C5›?0™@0 E3¤G6§F6®H:¶NE´LM¯HL¥@D™9;‘98>:ƒ@8x>3o>0zI;…LA„?8„,+’).³9DÒLWÜKNßMMÊ>=À@?Ð`\³YQ„@5‚TDyaIe[@^]?ihIslOvgJ~dK–cN¼dXÖ_[æUZëANò,Eþ%Dÿ&Hÿ'Iÿ.Nù3Nò6UE8[O5cZ9gaAifEnrOz‚]z‰bt†^r‰_p‰_p‹`qŽ`u’dw”dw”dw”fs’ix–rz—xy–x~˜}ƒ„…‡ƒ›…™ƒz’zr‰om„hhd`y[TmMNaERSAVPBUOC8938938939:4;<6<=7?>9@?:@?:@?:C@;C@;C@;C@;D?;D?;FA;FA;FA;E@:E@:E@:G@8F?7JA:I@9H?8G>5F=6E<3F<3E;1D:1D:1D:1D:1D;4D;4D;4C<4?80?80<71;60:5/:5/94.94.96/96/:5/;7.>7/@9/B90C;0E;1F<0I=1K?1M?2M@0NA1M@0P?5M?4L>3K=2I<3H;2E;1D:0C:1C:1A:0A:0?;2@<3@<3D;4UD—I?–LAœNB¬RJ¾URÌOSÄLK¥@4B0 @0¥?1¥;.£7+¤8+§=/«E6¡>+˜7$:'¥>-¬A/²C2¶D:§02¯:B¹DL½LRºMR­KL–A>‚71{8/v6,x2*„1-œ37¹=GÕGWèM[âFIÏ53Ð:9½31ÈNKÆc]”J?Œ[J}cLj_CgdEtoOpQhJhN°hYäbbõQZôDQö7Iý1Jÿ2Nÿ/Mÿ*Hÿ2Oü0K÷1Jõ5Lò4Mð2Kó3Ló7Pò@XïC[îF]íIaëNcêQeèUhèVkåSjäRiãOiäNiçNlëPoòSsóVuþh…ña|å[tÕUlÍYlÉdr¨R]r-2^&'Y0,W:4Q?5B:-:8)>B1LN9VO3aV6e_?heDquT†e~ŒiwˆdxŒiu‹er‹dr‹cvŒeyhzizj€•v„›~Šž… Š’£—¨–˜©™–¦™‘¢’‡˜†zypƒmg~b^wYTmMPcGSXDXUDYVG7827828939:4;<6=>8@?:A@;BA5G=3F<2E;1D:0D:0E;1E;2D;2E<3E<5E<5@91?80=82<71;60:5/:5/:5/96/96-;7.;7,?8.@:.C;0D0K?/M@0M@0M@/M@0O?2O>4L>3K=2J<3G:1E;1D:0D;2D;2B;1@<1@<3A=4B>5F<3S81[*&‰:?¾T`ÙTeæUfãUcËJOŸ30–:/‘>0™A3®F=ÅIGÕBHÍ>@±B7§F5©B3¬@3¯?3°>3³B4´D6²G5©B/£<)¤;(©<(«:(®6&­3(¶97º9=½7>¼7<¿^õ@aøCfö@fõ?eõ?gø?hüCmÿErÿIsÿOuÿQuþUvòSqçTnåaxÖfv·Wb}15j0/X1*P8,G>/>A.;D/?G/PK._T8g`CokN||`ˆŽr‡‘v}‹qzq|s|szozŠm}Œoƒ’uˆ—z•£Šœ©•£®¦±¡¬´§±¹®°·°«µ­¡«¢” ”ƒ‘‚s„qh|c]tXSlNPdHRZCWYDYZH671671782893:;5<=7?>9@?:BA/K?1M@0M@0NA0O?/O?0O?2N=3N=3J<1I;0G;/D:0D:0D<1D<1B;1@<1A=2A?3B?6K=4\5.w32­LSÛ]iæM_å@Q×6E·&+¨1)7(’:&—<)¬@3ÃD=Ô>?Í;;±?5¨B4ª@2­?2²@5¸C9¼H;»J<¬>/ª?/¨=+¦;)ª9)°:,·;/¼<1ÊFAÎDAÐ>?Ð79Ö7<ÞBEâLNÝROÄC>ÆKCÍTLÔSMÙKJÛ?Bà5>á27Û4.Ú7.Ð1+Ï:4¿84³@9µ[P–UC{N9‚bI†kP„`F’[F­fTËrdçmhêEKò:Dê9Cç=8@?:@?:C@;DAGB>GD=GD=HC=ID>IE2I=1G=1G=1F<0F<0E;1E;1D;2C:1A:0A:0@91@91=82<71;60;60;7.;7.;7,<8-?9-A;/D0L?/M@0NA0NA0O?/O?/O?2N=3M<2L;1I;0G;/F90C9/C;0B<0B;1@<1@>2A?3B?6N;4m84—FEÄY_ÛWbßCQÞ8FÔ3;½++­1'¡8%˜:!—9 ¤;&¶>.Ã:2¾71§7,¢:-¥9-§7,¯:1¸B8ºE;·E:®>2­?0§<,¤6'ª6)¶>0ÃD;ÊG=¾8-Î@6áD?ìBBô=Aó9>ë27Þ.0Û75âGBèSLåNGÜ=9Ù10ã/2ê67Ù1(ÞÒA>ÒGBÝOMëWWíNRïDMð:Gö5F÷2Fø.Dû1Gþ7Nþ8Sý8Tý8Vþ9Wÿ;\ÿ>aÿAeÿCkþ;eýjý?mú>nø>oô=mö:jÿHrÿ;aÿ?dÿKnÿKn÷NmïUoãZnèr‚Âaj˜ILt:8\6-P9+PC2UM:^QAreUˆ|n•‚Ÿ‘¦§Ÿ¡¦Ÿ–œ˜•ž›ž§¤¦¯¬¦¬¨¢§£¦¨£µ´°ÂÁ¼ÌÉÀÑÎÅÕÐÌÕÐÍÔÎÎÕÏÑÑËÏËÆÊ¿½À°²¯˜Ÿ˜€Œ~m~k`t[WnRVjNS`FV`EX`H560560560560671893:94;:5=<7>=8A>9C@;DAHC?HC?GD=HE>ID>ID>JF=JF=MF2@@4P91r1/¨JKÁSV»>D½06Â03Á//º1)©1!£9#œ=!™;›< ¡=#¥;%¤6%ž6) 8-¢6,¥4,­81·@:¸C<²@6±B7­A4¨-Ï>-Ù5+á*&í"%ú%+ÿ*1ÿ.4í)*ç.+á3,ß4,à3,ã2,é0-ç2+Ú2%Ö6&Ð2&Ï7,Å6.½>7È`UÒq¦eSVBŠM:£WIÈf[ßd_çRTèCIõFMí@Dß??Ô@<É@8Æ@7ÑFAãMLïJNô@Kù9Hý7Hü5Hø3E÷6Gú;Mú8Pü7Rû6Rý6Uÿ6Xÿ9]ÿ;aÿkÿ?mÿ@qÿBtÿBuþBuüBtùBpÿFmúAaþEeÿKjþKkÿVtÿ_zõ]tòj~æp~Óow®^aƒCAg6/hB7sUJye\Œ}v£–­£¡²®«¶¶¶²¶¹ª¯³°·½¶½Å½ÁÊÀÃÊÃÂÊÉÆÍÕÎÖÝ×ÛâÚØçÝÛéÝÝæÚÜåØßä×ààÔÞÙÏØÊÅ˺ºº¢§£ˆ’‡t‚qexb\sW[oS[jM\iK]gL561561561560561671872983<;6=<7@=8B?:DAHE>HE>HE2G=1E=2D;2C:1C:3A:2A:4@93?74<73<71>7/>7/<8/=90>:1A:2C<2D=3H@5I?3L@2MA1NA0P@0O@-O@-L?/L>1M=0L;1J91I81E80C90@9/>:/;;/<<0=>0>?1A?0S8-‡<7Ä\[ÊZY®86«.*²1+®.%­2#¬9&¬B*ªF,¦D'£A&£A&¢<#Ÿ9# 9*£;0¦:0¦7.­<4¶C<·E;°@5«=0¨Dá;=Ö<<Í@9Á>4¶8,¹6.Ä94âHHé@Eð;Dö:Hú:Iø8G÷;Iû?NþAUÿ?Vþiÿ>lÿ>oÿ>pý>qú@rø@t÷Aq÷CjÿMmÿSs÷Jhë@`ýTsÿg…ÿe‚÷]wï_xçh{Üp}Æqx§gg^X{ZQ—~wª™’¾°­Ä¼ºÆÂÃÈÇÌÇÇÏÃÃÏËÊØÌÊØÑÊÚ×ÎßßÔäæÛéêàëíãëïåæòèæôèèðäæîáèíàéêÝçäØâÑÊÑÁ¿Â««©‘–z†xl{hbu_`rXbpVboScmT21/320431651875984984984;:5<;6==5??7AA9CC9EE;EE;HH@HH>HHLC4J@4KA5MC9LB8F=4B90E<5C:5@93?74@85?75<74<42C:5B94A96>95?:7>:7?;8@<9B?:D@7G@6J@4L@0O@-O@+L?,G@.F?/I;0K81M53K65J88F;9B?:6904,«=,­<,³=/½C4ÄF8À>1º2&Ç9+Ì8*Ð8+Ö8-Û7-â5.é3/î1-ñ.,ô.-ó0,ñ1,ê5*ã7)Ý:)Û:(Ü9&Ô3Ð3 Ï8'Æ7'¾6(ÂB5ÏSIÈNCÏSKá\Wî]ZðPRí>Cò9?÷?GêAFßCDÕAAÈ?9»<3±;/°HH>HH9H?:F=8B;5D:8A96?74?74@85@85=85;62=4/=4/=52<74=96>:9=<:>=9B?:D?9G@6J@4M@0O@-P?+L@*B?,B?.F<0H:1J65I56F35@65@<9:=6;>5@@4E<-J9)^B4€L>®QB«;- 2#¡6&£:'ž7$ž9%£>*¡;%§<(®?+³@-¶=,·9*¸6(µ7)ª9)¥:*¤9)¥;+¨>.«A1«B/«@.®?,«:(±<+¿E6ÆH9Á?1¼8+À6)Ë7+Ï7,Ð9.Ñ;-Ô8·;1®:-ª<-«=.¶E5ÆL?ÔNEÜGCã?>ï?Bú?Fþ@JøCJ÷CLúDPÿFTýBSù>Sü>XÿBaÿFhÿCiü?iù@jùBpüFvþJzÿK{ÿJzÿHtõKpñQsõ\zù_{ûXwüNqýEkúDlïEiÚKgÈ_p±nukLI~t°–‰Ì²¥äÓÉìãÜëçæêéîêçòíâóöãùûáúÿâýÿçÿÿìÿÿòþÿöþÿùûþú÷ýúõü÷ôúõòøïðôëîñèíïæëæÝàÜÖØÊÆų²®ž¡šŽ“Œ‰…ˆƒ•‡‰€†Œ~/.,0/-10.21/43/540762761:94::2<<4>>6@@6BB8CC9DD:IF=IG;JH;LI8MJ7NL7NL7OL9KI:NKBTRS_^fihxmm…lkŠkhƒ`YiYQ\OGRH@KH>GG=EE93>:1=9083-94.;60<92=:3>;4?<5@<3E>4G?4I?3L@0O?0P?/P?-L?,<;&:=(?<+A;-B71A62>42;30=84B;5H94N2.Y,)l/.‡;= FE£;0¢2$Ÿ1 ¤9'¥<)ž7$ž8"¢<&¤;&ª=)±A-¶A/¹>.»<-¾:-¾-­>-­<,²?-°8(¹>.ËL=ËG:¼6*º2&É9.Ð6,Ô6+Ô8,Ö:.Ø:/Ü8.ã6/è3,ð0-ô.+ô.+ð1)ç2'Ý6&Ô8"Ò7!Ý8$Ü5#Ú9'Ú>/Ó=.È6)Å9,ËA7É<5Í>8ÙEAåKIêJJéCCì?AëCCÞCAÕD?ÍB=Â=4¶:.®8*«:*¬;+¬8)ÀD8ÔNEÝIEà@@è>A÷BIÿHPôAGô@IùCOýGTþEUú@Uû?XþA_ÿDfÿCiÿCkÿFpÿIwÿK{ÿL|ÿJzÿFxÿHwÿKtúNtÿZ|ÿa€ýUvñCdûIkÿTvÜ?\ÍI`Ø{…¸||aC;|n®ŽÕ³§óÛÑûìåúòðù÷ú÷ôýôìûúëÿÿêÿÿìÿÿîÿÿóÿÿ÷ÿÿûÿÿýüÿþûÿýùÿúøÿøöÿõöýóôûðôùðóðçêåßáÓÏξ½¹­®¨¢¥ž£™£—£«žž¦—›£–/.,/.,0/-10,21-32.54/650880991;;3==5??5AA7BB8CC9HEQPL^]bmlzzz’‚¡€‚¨€€¦{u—rkŠe_{YSmTLdMEZG@PB;2?=1@<1?;/A;-F?/H?.K?/M@/O?0O?/P>0L?/@=*?>,@=.?;/?;2>93=:5:94<94D95M51V-+j)-„28ž8C«>C¦7.¥7(¥:(ª?-¨?, 9&¡8#¤;&¥:&«<)³>,¹@/½>/Á=0Å=1Ä>2½?3¶=2²9.®8*¯9+°:,²:,³9*¶;,¹;-ÄB4ËE9È>3¾1'À2(Í9/Ö5+Ø4*Ú6-Û7-Þ7.á6,æ3,ì1*ó0,ô.+ô/)ï0(ä2&Û4$Ò6 Ð5×2Ú0Ú4$Ü<.Ö=/Ð9.Í=2ÒD:Ä5-Å60Ê;5ØD@âMIåKIÞC?Ö=8Ó@9ÎA8Ç>4¾VádtþŸ§ÓŽd92lJ>¥ynÐ¥œõÔËÿéãÿôòÿýÿÿüÿùóÿüïÿÿïÿÿðÿÿòÿÿôÿÿ÷ÿÿûýÿüûÿýúÿüøÿúøÿù÷ÿö÷ÿõöÿôøþó÷öëïìãäÚÕÒÉÆÁº¹´³´¬±´©°¶ª¶¾³°¸­¬´©10,10,0/+0/+10,21,43.54/77/880991;;3==3??5AA7DA8IE:LF:NH:PJ:RK9RM:SL:QK=OJDVTUfdqwx††¨¹“ÃÆŽ‹À‡ƒ¶{w©pmšid_[~UPnNJaKGXEBM?=B;7895296/85,85,671783891;;1>5L?6K>5F<3B92=82:946;47<59<5>:1H4-Y2-w78”?D¦>E§9<ª;0ª<+«@.¬A/©@-¥<)¦;'«>*§8$­:'µ<+¼=.Á<-Å;.Ê<0Ê=3Å?6¾>3º:/·7,·7,¸8+º8+º8+»7+ÇA5ÍC8Å8.Á1&Æ3)Ë7-Ï5+Û4+ß3)á4-â6,ã5,ç5+ì1*ð/*õ/,ö/*ò/)ì0'â2#Ù4!Ð5Ï4Ö1Ù/Ø2"Ø6)×9-Ô:0Ö?6ØE=ÖF>Í@7É<5Ë@9ÖKDÙNGÒE>Å;1Å=1Â<0ÀCòBLûIUÿJYýFXúCYûC]û@_ûBdÿElÿJsÿNzÿO|ÿLyþIvÿJwÿTÿT}ýJqùImÿStÿVtøNiëD^äF]êXkÿ–¢ÿµ¼óžŽHFk.)¦kcÍ–óÈÁÿãÞÿñðÿüýÿýÿü÷þþöÿÿöÿÿ÷ÿÿøÿÿúÿÿüÿÿýýÿýúÿüøÿûøÿùøÿø÷ÿöøÿõ÷ÿôøÿôøýñóóéêäÜÚÖÑÍÍÊÃÉÉ¿ÊÊÀÊÍÂÉÐȾȿ·Á¸65143.32.10+10+21,32-43.66.77/880::2<<2>>4@@6B@4JD8ME8OH8RK;TK:TM;SL*F@*G?*H@+IA,IB0IA4HB6HA9G@:K=?ž51§;/ª<+ª?-ª?-©>,©>*¬?+°?-«8%²9(¹:+¿9-Ã9,È:.Í:0Ï<4Ë>5Æ;4Â91Á8.Á8.Â9/Â8.Ã6,Å7-ÑC9Ð@7Ã0&Ã,#Ð7/Ö<4Ó2*à3,ä2(ç2+è3*ê3+í2+ð/*ó-*ö/*õ.)ñ0)ì1(á4$Ú5"Ñ6 Ð5Ø7#Ù3#Ö3$Õ3&Õ5)Ô8,Ô<1Ö?6ìYQáRJÓHAÌC;ÊE<ÌI?ÈE;À>1¼:*¼;(¼:*¹:)·:(¸:+¼>0¿A3ÁA6Á<3Å<6ÏA=×EEÝGHäIMëLPèBFê@CðCIùKTþNYüJZüF\üF_øA_ùBaýEiÿJpÿNwÿOzÿNxÿLvÿQ{ÿRyþOvýOtÿVyÿ]{ÿSoîD^úTlîQd÷dtÿ’žÿ‹•ôƒ‰Ç`d§MMµjgΊXÿÞÙÿïîÿúùÿüþýûÿýúÿþûÿÿûÿÿûÿÿüÿÿûýÿûûÿûøÿûøÿüùÿûúÿûúÿøúÿöøÿó÷ýñóùíïòææçÝÛßØÒÛ×ÎÝÛÏàÞÒßáÖÜãÛÏØÓÅÎÉ<94;8185052+41*41*52+63,74-85.96/;81=:1?<3A>5C?4JB7MC7PG8SJ;WK;UL=UK?SJCSJK]Wcnl‚‚‚¦‘•Åš ÚŸ¦ê¢©ñ¡¥ïž ë™›å•˜Ý”•Ö‘ʉ‰½‚ƒ±zy¡rq‘fc~XVkPN\IGRFCLCBJ??K==G;:@;9:<94?;/C=-E@,F@*FA+EB/EC4CC7BC;AC>@ACBLCANEEOCHNAIL>HI>GDCHAA=2L:.gF7ƒOAI<Ž?2”8)¥>/©>,«>*¬?+­@,¯@-°?-±<*±8'¶8)½9*Ã9,È8-Ì8.Ò91Ô;5Ï:4Í:3Ë81Ë81Ì92Í:2Ì70Ë6/Ó<5Õ>5Ò91Ì2(Î4*Ø;2Ú<3×3*ä1*é1'ì1*î2)ð1)ò/)ô-(ö,(÷-)ô/)ð1)é3(â5'Ù6%Ò7!Ï7 Ô9%Õ8%Ó6%Ñ4%Ò4(Ó7+Ò8.Ð7/ãNGèXPçZSÚQIÌG>ÄD9¿@7¹>/¹<*¹<&¹<(¹:'¸9(º;*À>0ÃA4ÉD;Æ@7É@:ÑFCÕIHÖHGØGJßIKæFHèBDíDIõLSüQZûO]ûL]ûK`öD^÷DaùFfýIlÿNuÿOxÿOxÿPw÷VxóUvôTvüYxÿ]{ÿZwûQkòI`ýWköUgêM^ö^mâKZæTaåTa×XaÁefȃ~嫧ÿÔÑÿëèÿóòÿøùÿþÿûüÿûüÿûüÿüüþüúýýùúý÷÷ü÷ôÿú÷ÿûøÿüûÿûúÿøøÿóóýîñúëîðáäéÝÝäÙÕâÙÒæßÕëçÛñíáññåìóìÛæâÎÙÕ@=6=:3:7074-52+52+52+63,74-74-96/;81=:1?<3@=4B>3JB7MC7RF8VJ:WK;XL?:6@<1A>/C@/CB0BC3BD7?D=>D@CVCIaLRhU\o\br`dobbjd`afXWaJDlG>ƒSE•XF“J7‘@+™>+¨A.®@/®A-¯@-°A.´A/²=+°7&µ7(¼8+Â8+È8-Í6-Ñ7/Õ81Ø;4Ò72Ð72Ð72Ñ82Ô94Ô94Ó83Ó6/ÞA:Õ8/Ñ3*Ö8/Þ=5Þ=5Ú91Ü5,ç2)ë0'ï0(ñ0)ô/)÷-)÷,(÷,(÷-)ô/)î2)é4)á5'Ú7&Ô7$Ï8#Î7"Ï8%Î7$Ï6&Ð7)Ò9+Ñ7+Î4*Ë4+ãNGód\ë`YÕOFÄA7º;2µ9-¸>)¸>'¹<&¹;%º9&½9*À2ÊD9ÊA9ÎE?ÕKHÓLIÎGDÍEEÖHGãIIæCDèEHòMSøSZùR\÷O^úOaôH^õG`øGdûIiÿNrÿQxÿRyÿTzðUuïZwù^}ý^|ùUpõMgùOiÿYnÿ[mÿctðM^÷TeôO`üUgõL_äR_À^_»vqל˜úÉÅÿåãÿíëÿôôÿÿýüÿÿûÿÿûÿÿûÿþýýýýüúþùöýøõÿøõÿùöÿúùÿúùÿööüððøéìôææëÝÝèÚÙäÙÓèÞÕðèÝùóåÿúìþþòôúöáëêÓÝÜB>5A=4@<3>:1<8/:6-84+73*62)62)73*84+;60>93A<6E>6I@7MC7RF8UI9WJ:XK;ZLA[NHTIMXR`gd|~§’Ê— ãžªö¥°ÿª³ÿ«²ÿ¬´ÿ¬²üª±ùª¯ó¨¬ì©«èŸ¡Ú™šÒÁ±tr¡he’]Z‡XR~XQzYQvVOnMH_C?M?:@?;:B?8>>4@B5BE:?D=:CB>FH?LUDVnQfƒarŽisŽtvx„o€€^lŠ[c’WYžWU¦VM¦M?Ÿ@.œ9$ :$§<(¬=*®?,±@.³@-´?-¶=,¹;,º6'¾6(Ä6*Ë7-Ñ7-Ö8/Ú91Ú83×84Ø95Ù:6Ø93Ø61Ø61Ú83Ý:3æC<à=6Ú70ã@7þ[Rÿlcÿ]Tç?6å3)í2)ñ2*ô/)ô*&õ(%ø(&ø+(÷-+ó0,í2+ã1'Ú0#Ô1"Ô4$Ó:(Ì;&Ê<(Í<)Ï<*Ò:,Ò9+Ò8,Ñ7-Ú@8Ï81ÜGAôc^åXQËB<Å@;·4*·:&¶<$¹<&º<&½:(¿:+Ä<0Æ>2Ç>4ÌC;ÙPJßXRÔOJÃ?:À?:ÏHDÞHGâGEæJKïPTñRWïNVíKXñL\ùRføOf÷Ke÷JfüMlÿQsÿRvýRvôWvîXuõXuû[wÿ\xÿZsÿWnÿVkÿbuýVgÿ\mÿ[lñFXôDXÿQeîVeÆfgªieʋ網øÒÏÿëçýïîüø÷ùýüùÿÿùÿÿúÿþüþýÿþüÿûøþöôþùõÿû÷ÿùöÿöôÿööÿõõöèèæØØãÕÔÞÐÍáÖÐñçÞüôçþøèÿüéÿÿóúÿùèñðØáàC?6B>3A=4?;2=90;7.:6-95,73*73*73*84+:5/=82@;5D=5H?6LB6QE7TH8VI8WJ9YK>ZMEUJNWQ_eby{¤ŠÉ”⛦õ£®þ«´ÿ¬µÿ®¶ÿ¯·ÿ°·ÿ¯¶ü¯´ø¯²õ©ªë¢£ã˜˜ØŒŠÉ€»uq®ie c^˜`WŽ`Vˆ]TVPtMIbFCTBAIAAC<<:AB=FEACD?A?@DBEOMRWVdch†quš}¢‡}Ÿ’}œ {š¥pŠ¤`u¬Yi¶VaºQU¸HF°@4¬;)¬<&­='¨8$¨7%«8&®9(°8'²9(µ7(¸6(»3%Â4(Ê7-Ó:2Ù<3Þ=5ß<5ß<5á>9ß<7ß<7á>9åB=èC=çB<æA;å@:æB9ä@7Ü8/Õ1(Ø6+ëI>ÿ[Oñ@6î6,ê+#î)#ø-)ÿ/-þ,+ö((ú0.õ4/ï61ç6.Þ3)Ö2&Ô2%Ï6&Ë:'È;'Ê<(Í:(Ï9*Ð7)Ñ5)Ð4(Ó9/Ï5-Ô=6åPJåTQÛLHÍB?·1(¼;(»=&½<'¾;'¾9(À8(Â:,Ä:/È>4ËB8ÕOFÜWPÒRIÃD=¿C;ÌHCÛLHßJFåMLëSRíTWëPVéNVìOZ÷VføUhùSiúRküRmÿSqÿStÿRuòMmøUtÿ\zÿ_{ÿ\vÿUoûRiûReüUf÷RbÿZhÿZhóN^øScþYißS^¶`_—^W¶}Ù©¥îÈÅýáÞùééýøõúüùùÿÿøÿÿ÷ÿýúþýÿÿýÿûûÿ÷õýøôþùõþùõþöóÿ÷öÿõõöêêêÜÛäÖÓÝÐÊßÕÌïåÛüõåÿùçÿýéÿÿïúÿøèñîÛáßEA6EA5C?4A=2?;0=9.<8-;7,84+84+73*84+:5/=82?:4C<4G>5JB7ND8RF6TG6WG7YIBZEJpW]‚cs˜r—¥z§®«²{£¸vœÀp“ÂcƒÀTnÂG\ÐK\ÑHPÄ<<º5.¸9*µ<'°<%°;'°;)²:)´;*·<,»<-À<-Ä<.Ä6*Ë8.Ó<1Ù?5ßA8á>7à<3ß:4Ü71Ù4.Ø3-Þ93æA;ìE?éB<ä=5ã<4Û4,Ø4+Û7-Ô2'Ì, Ö6*éG:õK>ò@6ï4-ð-)ö,*ú,,ü,,ø*,ð*)ì/+è2.ã5.Ü4+Ø1(Õ1'Ñ3'Í7(Ë:)Í:(Ð:)Ò;*Ó:*Ô8+Ô8,Ñ4+Ö<4Õ:5Õ<7åONíYWÙEEÂ3/À;,¿<(À;*¿:)Á9)À8(À8*À8,Æ=3ÇA6ÏJAØUKÒRGÆG>ÀD:ÇG>ÖKDØICÝLIäSPåSTâPSâMSåNWòXdöZhý[pþZrüVnúRlûQlÿQpýGmÿPvÿZ}ÿ[{ÿVrýTkþWkÿ\mûYhøZhûamö`kí]gïfnìfmÉ\_ ]W{OF˜mfÁ˜”ݺ¶ðÔÑôàßÿõôùù÷ùÿýùÿÿ÷ÿýúþýÿÿÿÿýÿÿøùüùôüùòüùôýøôÿùöÿøöùîìïäâåÚÖÛÐÊÜÒÈîäØýöäÿûèÿýçÿÿíúýôêðìÞãßIE9HD8FB6D@4B>3@<1?;0>:/:6-95,95,95,:5/<71>93@;5E>6I@7LD7OF5RE4UE5WG8WI>XMKXNW^Zqpp–€†ºŒ–Ô•¡é©õ¨°ù©±ù­³ý°·ÿ±·ÿ²¹ÿ´¸ÿ´¸ÿ¯±ü«­ø¥§òŸžê—–⌋ׂÍ}yÅum¶pgªf`ž_ZYX„QQuGGcA>Q=5DH8BT=C`@EnCJ€OU–]d«fx¿kÉnšËo˜ÉiÈ`ƒÉWxÆIgÄ;UÆ2HÙAPàEMÑ;<Æ71Ä?0½@,±:$­6"­5$®5$³5&¶7(¼8+Ã;-È/Û?0Ü@3Ü@3Ò6*æLBåJEÎ50ßGFóZ\ßIKÕA?È2ÈF9ÏOBÎPDÆH<¿C7ÁC7ÎH?ÑF?ÕJEÛPKÝROÙMLÚKMÜKPëX`ó[güaqÿauúXmõOgõMgÿNkÿOuÿRyÿUwÿTqüTmý[pÿcuÿjxÿguúboõamídlãflÙhjÎghµfa^TeG<^U©ˆÍ«©åÇÅïÚÙÿóóùøöùýüøÿÿ÷ÿÿûÿÿÿþÿÿüÿÿùúþûöûûóûúõþûöÿýùÿûøþôòøíéêßÙÞÔËÝÓÉíæÖÿøåÿþèÿÿæÿÿëøúïêïèãæßNH:MG9LF8JD6HB6F@4D=3C<2?80>7/=6.=6.=60>71@93?:4C>8EA8KC8NE6QD3RE2VF6VH;ZMGVMR[Whlk‹~‚±Š“Î’Ÿãš¦î¦®÷©¯ù­°ý¯³ý°³ÿ°´þ°³ÿ¯³ý«®û¨«ø¤§ô ¢ïšœé“•âŠŒÙ†…уÉ{u»mk¬dež_a’Y[„RQsNHbWFY_CQmBLEM˜MT¬U]¼[bÊZhÙRpâRußTuÙPlÒJbÍBWÇ8JÅ.?Ô8EãCKæGKØ>>Í>6ÌF:ÃH6¶?+·>-¸=-º<-½>/Ã?0ÊB4ÐD7ÕE:ÙE9ÚB7Û>5Ù;2Ù6-Ù5,Ú3+×3*Ô1*×4-Ú7.Ý90ß80Þ7/Ý6.Ü5,Ö/&Ù5+×7+Ï2#Í1"Ò9)Õ>-Ô;)Ø<-æD7øJAýD?ù64õ*-ö*-÷/2÷67í55â30Ú1,×0*×/,Ù0-Ù0+ã81ä91â:1â;2à<0ß=0Ü?0Ú>1Ñ7+ïWLøaZÓ;6Ñ;:æPQÜFHæPQÏ<4Ê:/Æ8,Å9,Ä:-Ä<.Ã;-À;,¾:-¾<.ÃA3ÇH9ÇI;ÂD6¾@2¼>0ÉF<ÊE<ÎIBÕPI×RMÕNKÓKK×LOéZ`ð^hüfrÿhxü]qòPeóMeýNkÿVzÿTxÿRrøTmö]qûhxûjw÷erüetó_mì`kêkrßruÃjfªd\žla}fVXH9kXJ”|r½ œÞÂÁîÖÖþîïûõõûûûûÿÿùÿÿýþÿÿþÿÿûÿÿúýÿþùûþõûüöÿþùÿÿúÿþúÿûõÿ÷òñèáäÜÑáÙÌðé×ÿúäÿÿæÿþåÿÿê÷ùëíðçèéáQK=PJ1ÃE6ÃE6ÅF7ÉE8ÎF8ÑG:×G<ÚG=Ö>3Õ;1Ö8/Õ4,Ö3*Ø4+Û4,Ú6-Û81Ý<4à=4ß<3Ý90Ü5-Ü5,Û7-Ò.$Ý;0Ú=.Í1"Æ-Î7&Ò=)Í:&Ì9'Ô8)â:/ó=9ÿ@@ÿ<>þ37ó,/ê,.á+*Ø*)Ô+(×/,Þ44ä88é99ï75ð74î73è71ã7-Ü6*×5(Ñ5&Í5(çPEÿmcÛHAÈ42×CCÓ>BêVVÙA<Ò>4Ë8.Æ6+Æ:-Æ/Á=.»9+»<-¾?0ÀA2¿A2½@.¼=.»<-ÃC6ÄD9ÈH?ÐPGÓRLÐOIÒNLÕONé^cîagûitÿnzÿduõVjõQiÿUoÿWvÿVtúXpñ^pônyöw€íksÞXañ`mñ`mìboïs}숊Ì|ªth™yjskXON:_VGƒqg¯–’ÜÀ¿ïÕØüéëþôõýûüýþÿúþÿþýÿÿýÿÿûÿÿùþÿÿûùÿõúýöÿÿúÿÿúÿÿøÿý÷ÿþöùðçíåÚéáÔôïÜÿûåÿþåÿÿãÿÿèùúêòôçîðåSM=RL4D=3B;3A:2@93A:4A96@;7A@;CC;IE9MG7OG2RF0UF1UH5WK?RHFXR^jg‚}§‰“Ä’žÚ˜¢ç¤§ö¦§ú«©ü«¬þ¬­ÿ­®þ¬®û¬®û¨¬ö¦ªô¤¨ñ£§ð¡¨î §í¤è›¢æ™žâ’šÛ‹“҆ʃ„ˆ·ƒ¨ˆyšmˆšcz©Xi»Q_ÏMYàIRèAIê=Aé=;ã>8ÝC9ÖH:ÎI8ÅF3ÂC0Å@1äTIàG?Ú;7Ø64Ø88Ø:;Ñ98È74À:/¾<.¿;.À:.Â8+Ã7*Æ4'Æ2&Î4*Ð3*Ñ3(Ô3)Ö3*Ù5,Ý6.Ü8/Þ=3Û=2Ü;1Û8/Û7-Ú6,Ø4*×3)Õ3&Ó3%Ð4%Ï6&Ò=)Ñ>*Ê9$À2È:&Ê4%Õ1'ç51ú<<ÿ=@ÿ7=÷37ê-1á-.Ù--×/.Ü43ã9:é;=ð9=ö26ø03ô01í1/ä1*Þ2(Õ1%Ï3$É1$Ñ=1új_äTLÈ95Ð@?Ë:=äRSäJHÜC=Ñ:3É6.Æ8.Å;0Â<0¿=/º;*¼?-½@.¼?-º;*º;(½;+¾<,¼>0¼>2ÀD8ÈLBÌPHÊNFÌLIÐNLèaeìaføhrÿo{ÿhx÷Zk÷UjþZrÿYsû]tîaræjtë}€ñ‡‰èwyÚ_dñgtþm|óeuëlwö‘•ì¢ŸÄ”Š¢|hjUHQSK>PJ>êDFå@DÙ8=Î65ÍB;ÈD8ÉC8ÇA5Æ>2Ã9,Â6)Â2'Æ2(Ë3(Î4*Ó5,Ø5.Ù4.Û4.Û4,äB7Ý=1Ù7,Ú6,ß9-ß9-Û5)Õ1%Ø8(Í2 Ê1!Ï9(Î8'Ç4"Ê7%ÔC0È7&Î8*×6,Þ5.æ3/î53ö:9û?>ÿLKúHFòBBì>=ê<=ç7:å26æ,1ô+1ø)/ô,.ï/.è1+à4*Ù5)Ó7(Æ0!À.ôdYë]SÏ@:ÔDCË;;ßMMêRQàHEÓ;6É6/Æ8.Æ9/Ã;-¾:+¾<,Á@-ÀA.»<)·8%¸9&½<)¾?.µ7)³7+¸>1ÁG:ÅK@ÅIAÈIBËJEåa_æ^`ñdjþnwþkuó]iðXeø]mú^sõbtèdoãlrì~ù‹ö†…éqsøryÿy†õaqàXföˆ‘ÿ´´Ð®¢ ›‡]jPDR9QT?jbU›ˆÚÀ¿òØÙöàãÿô÷ÿúýÿþÿýüÿþüÿÿýÿÿûÿþùýûÿúôÿòòþòùÿôüÿöûýòÿýôÿÿôÿÿóûõç÷ñáþùåÿýçþüãþýáÿÿêÿÿñýýóüüòXO@WP@WN?UN>TK2G?2H>2F@4GC:GE9JG8NI6RJ5UJ4UJ4VK9XNDULMZTbkhƒ{~§‰Ã‘™×˜Ÿç£¤ö¥¢ù¢¢ü¡¢ü ¤ÿ¢¨ÿ£«ÿ¤­ü¡ªõ¡©ñ¡¨ì¥¨íª©ï­©ó±©ö¬©ø ©ø—§ò’¡â–ŸÖ¦£Î¶ž¾¹…œ¸gz¿L]ÑERß>Mç;Gç?ß<=ÝEBÉ:4ÊD9ÊF:º1)ÛJEèJIéCEë>Bè;?æÚ<=Ô<;ÏB;È?7ÊD;ÑMAÍK>¿=0¸6)½9,¿7+Ã6,È5-Ë2*Ñ/*Ô/+Û2/Þ5.çA5ß9+Ù1$Ý3&å9+ç;-ß8&Õ2Ï2Ì4Ê5!Ç4"Ç4"Ê4%Í5'Ï5)Ê0&Ï2)Ñ5)Ò6*Ò4(Õ3&×3'Ü4)à2)æ3.ë52ë33é/2ç-2è-4í.5ö-3ö+/ï+,ì/-ê5.ã9,Ù7(Ð4%Ã-Ä3"çXHéYNË;3ßNIÅ41ÚHHáOPÜJJÔC@Ì;6È80Æ8,Ç9+È<+Å<*Â;(¾9&¼;(»<)º=)º=+·<,´8,µ;0¹=1»?3»?3¾@4À@5ÄA7ïjaõpiêc_ômjûqqìadôgmÿpyÿlzûhxðdoébiëdjîlnîqoîqoûy{ÿ}…ùZlücwßbpû¬¯¶ªš}‘u]rQJY:LR8snZ¥•ˆË·°íÕÓÿîðÿö÷ÿ÷ûýøüüüþþÿÿþÿÿÿþÿûÿþðÿôåþéæûêïÿîøÿöüÿôþÿóÿþñÿýñÿûîÿúêÿùæÿùãÿùáÿùáüúåÿÿõÿÿûÿÿûYPAXO@XO@VM>UL=TKÌLAÁC5¸:,·9+¹7*¿7+Æ6-Ë4-Ñ2.Ø3/á53ä84ä>2á;-Þ6)ß5&á5'á5'Ú5"Ó4Ñ9$Ë9"Ç9%Ç:&É<+Ë<,Ì8,Î4*Õ3.Ö5-Ó7+Ï7)É6&Ç4"Ë4!Ï4"Ø2$Þ2&ã0+æ.,æ,-æ,/æ-2è.3ì+.í,-ì0.è2.à4*Û5'Õ8'Ò9'Õ?.»*ÖD5Ð>1ÙF>ëVPÚB?ØBAçUVâRRÜKHÔC>Í=5É9.È9+Ç8(È;*Ä;(¿:'½<)½>+º?-¹@/¶>.²:,´;0·=0¸>1º?0½?1ÁB3ÅC5ëi\òmdçb[ðkfõolèbañklütxÿq~ÿo|öirí]fêY`ñbf÷qpþzxûvwÿx~ùRdþ[pä]nö¦©©¦“jŒkZtON_;SZ;us\©ÖĸöáÜÿõñÿúúÿúûÿûüüüüúþýûÿþúþÿõÿúíÿóáÿéáýæéÿëóÿñøÿòýÿòÿÿñÿýïÿýíÿúéÿöåûóàúòÝüôßü÷äýúóüüúÿÿý\PB[OA[OAYM?XL>WK=VJDã=?å==åAá>CàBè;?ã9<Ü68Ö66Ñ96Ì;6ÕHAÄ;1¾5+ÅA5ÍK>ÆH:»=/·8)º6)¿7)Ç7,Ï6.×50Þ71æ95é=9×3*×5*Ú6*Ü6*Ý5*Ý7)Ú:*×>,Å4!¿4¹4!¹6"¼8)½8)½3(À-%ã@;å>8Þ=3Õ<.Ì9)È7$È7"Ì7#Ò7%Õ3$×/&Ù.'Û.*Ü.-Û//Ü./Û,)ß0+à5-Ü5,Õ3&Ð4%Ð9&Ñ>*ÔA/Â1 çSEÒ;0ÚA;ÞC?èJIðTUíUTçSQãOMÝJCÖC;Ï<2Ê8+Å6&Ä7&À7%¼7&¹:'¹<*·>-µ=,²=,°:,±;/´<.µ=/·=.¹?0¾C4ÃE7Ü\Qêg]äaYðlgöpmça`ìfgójqàR^ï^kõhqòemñ`gôeiùqqþxwútuÿnuóJ]øRhä[mñœ¡£œŠa€`UoHOd=W`Aww]­¥’áÑÂÿîæÿøñÿüøÿþúþÿúûÿüûÿýûÿýùÿûóÿöèÿîÜþãÚøÞáùáèûåïüèöýëýþìýúéÿúêÿ÷æúñàôèØòçÕöëÙøñáþúñýüøÿþû\PB\PB[OAZN@YM?YM?XL>XL>UI;TH:SG9RF8RF8RF8RF8PF:LE;KGEç=Fã?FÖ:>Ñ?@ÑEDÆA<º61Å>:êZYÝABã@Cæ=@ã:=Û89Ó97Ð<8ÎA8ÏE;Â:.»2(À/¸9(½8)Â9)Ë8.Ò:/Ù80à91è;7ë>8Ø1+Ù2*Ü3,Ý5,à5-ß7.Û9.Ö=/É7(Æ:)Á<+¾<,¿;.Á;0Å<6Î95ëC@í@<ä@7Ù=1Ï9*Ç9%È:&É;%Ï<(Ð7'Ï1%Ñ1%Ô1(Ö3,Ô1,Ñ/*Ó2*Ó5,Ó7+Ð7)Í5'Ê7%Ì;(Ì>*Ì;(Ï<,ô^PàF<Ò3/Ò.,æ@@ûWXÿusÿroÿjgö^YçPGÕA7Ç5(½. Ä8'À8(»8&¸;)·<,µ=-²=,°<-¯;.­<.°.¼B3ÀF7ËMAß`Wâa[ôpløtræ`aä]aæ]dÖHTçYeógrôgoöelükpþsvþvvûpsûenñDXôKbåXkë’– •ƒ_zYQlCSh?\gEy|_°ª”çÜÊÿõèÿùðÿûñþþôýÿ÷ûÿúùÿúöÿøòüóêûëÚøÞÎóÒÊëÌÏìÎ×îÒàðÖéóÛò÷áöõáûöãüõãõìÛíáÑéÝÍíáÑñèÙüõíü÷ñþùó\PB\PB[OA[OAZN@YM?YM?YM?WK=VJ@Ð@?ÐIE¿>8³2,ÈC<àUPÜDCáACã?@á>?Ú?=Ô@<ÑD;ÏF<Ç=2À8*½5)½9*¿=-¿=-½;+½<)Â:*Ç;*Ï;/Õ;/Û8/à8/ç83é:5æ95ä52ä20æ21ç32æ40Ý2+Ô0'Ë1'Ë7-È:0Ä7.Á4-Ã40Ì:;Ý?@ë8;í76ä71Ø5,Ì4&Æ5"Ä7#Å:%Ë=)Ë8&Ì4&Î5'Ô8,Ô:0Ó9/Ð8-Ð>1Ê;-Å8'Ä7%Æ9'Ç<)Ç<)Ç:(Í>-Í:*Ø>2áC:Ô/-ä::à24ß56×53Ö;6ÞC>åKCêQIêSHèTHäUGË?0Ä?.¾<,¸=-·>-´?.°?/®>0¬<.¬<.¬<.¬=,­<,±=.·A3ºD6ÆLAÞbXâc]ðnlôrrå`cå`eç`g÷kvûoz÷kví`hð_fýlqÿx{ÿy|úmsø^jóAWôC]èUh懣“ƒg]YtI^uIhwPˆf³²–èâÌÿúéÿýíÿþïýÿòûÿôøÿôôÿñíûêäòáØî×Åèǻ伺޺¿Þ¼ÇàÀÍâÃØæÌãëÓìîØôñÞ÷òßóêÙìàÒèÚÍêÜÏïáÖòèßñèáòéâ[OA[OA[OAZN@ZN@YM?YM?YM?XL>XL>WK=VJQI>QI>SK>UL;XM9XM7YL9XM;WK?ULGYSWe^nnjƒut–~}¥„…±†‰´‡‰¹Š‹Á‹ÈŽÏŽŽÔÕӔӋʃˆÀ|¸u|²ov­io«ljœ€lˆ“cy®YvËPoãBdð7Vö4L÷8Hï@EåFBÝJCÛJEáGGèCJò=Nð>LäCI×CCÌA>ÎIDº;4°4,ÉI@ÕLFØBAÚ?=Û;;Ú<;Ø@=ÔE?ÍG<ËG:À8*Á8(À8*¾9(¼9'»8&½:(À;(Ä;)Ê=,Ò<.×;.Ü8.á6.ä6/è50é32è./é,0î02õ47õ77î45æ21Ú.*×4/Õ62Ñ32Ï/1Ò/4Û6=ê:Dí06î02æ3/Ü3,Ñ5)Ê7'È9(É<(Æ8$É6$Î6(Ó:,Ú>2ÝA5ÝA5ØA6ÓG8ÉA1Â;(À9&Ã<)Æ=*Å<*Å8&Ì:+Í7)Í0'æC<Û2/ï?Aã/2Ú*,Õ1/Ò5.Õ81Ö90Ò8.Ì5*Æ2&À1#ÎE5ÆA2¼=.µ:*±9)¯9+«:,ª:,«;/«=0¬>/¬<.«<+­<,²>/µA2ÉSGàg^àc_êjiînoæchðjqõoxúq{ýt~ömuîbködnÿrzÿx~ÿquúipøWfùAYô@[êQfá~ƒ¬—†ykmˆ]o‰ZyŠ`—r¶·˜ßÞÂùôÞüúåÿÿïûÿïõÿïïÿëçúäÜïÙÐãÍÅÞÁ°Ö­¨Ó¦ªÐ§°Ó«¶Ô®¼Ö±ÇÚºÒßÁàæÌèêÔòíÚòéØîâÔìÛÑêÙÏìÛÓéÚÓæÙÑåØÐ[N>[N>[N>[N>ZM=ZM=ZM=ZM=YLUL=XLNÝAEÔFDÈA=ÉHB´:/±7,ÎOFÉB<Î=8Ð64Ï10Ð51Ó>8ÏE;ÈF9ÃD5¾9(Ã:(Â:*¿:'½8%¾9&¿:'Á:&Ä9&Ë:)Ó:,Ù9+Ý7+á5+ä3+ê3-ë*+ñ*-ø-3ü/4ÿ17ÿ37ÿ38ý58ù8;õ8<ò9>ò9Aô9D÷7Fû6Hþ5Eô+5ô-2í12ã4/Ù6-Ð8*Î;+Î=,Ë5&Ñ8*Ù;/ß=2â>4ä=4å>5ßA6ÙJ<ÏG7ÉA1Ä<,Â9)Â9'Æ8*È9)É2'Ó9/á@8ëD>Þ0/à..ë46è66Ø3-Õ7.×90×:1Õ;1Ò;0Í:0É;/ÖL?ÌF:¿@1´9*°6)¬6(«7*©8*¬;-­=/®>0­=/«<+«<+­<.±=0ÀKAÚdZÞc^èkiðosêinõrzüvîfp÷oyùryöjsþlvÿwÿv}ùhoùcn÷RbþB[÷ZM=ZM=ZM=ZM=ZM=YLVJ>XL>YN5É83Ç/,Å*&È/*Í:3ÌC9ÃC6¼>/À;*Ä;)Ã<)Á:'Â;(Ã<)Â;'Ã8%Ä5$Ê7%Ô8)Ù7*Ý5*á3*å3)ê2*õ33ÿ58ÿ8<ÿ4:ÿ-2ÿ(-ÿ(-þ+1ü-3ö)0ò&1÷)6ÿ,?ÿ*Aü 9ó/ö"0ó(.í,1æ0/Ú1,Ô3+Ñ5)Ð6*Ô6+Ý90æ=6ë>7ë:4è71è50â92ßH=×K<ÓE7Ë=/Ä6(Â3%È6)Ï8-Î4*Ô6-æC<ß82à21Ò ì89å63Õ1(Ò4)Ò4)Ï5)Î6+Ê6*È5+Å7+ãYNØRFÊH;¾@2·;/µ;.µ<1µ<1¯9-±;/±=0±=.¯;,­9*­9,®:-±<2ÐYQÜb]ìppôvyîmrõq|ör}ÿzƒÿ‰ÿy€ôhq÷epÿq|ÿuÿktø^jöOaÿA^÷8WéG^Ûntº‹™©„‚žn~šg—hœq¡©‚´º–ÈÍ­ÕܽÌÙ»ÁÔ´²Ì©§ÂŸž¼˜š¶–²Œ±†‰³†µ~¹„•À‹œÂŸÄ‘¨Å™²È¡¾ÎªÉÒµÚÙÄæßÍêÞÒéÖÏáÌÉÛÆÃÔÁ»Î½µÈ·°ZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=XK;XK;XK;YLYM=WMCWLHXNOZPX]Ub`Yia\rjfokŽsp›vq§{u³ƒ~ÁŠƒÉŠƒÇˆÀŠ~¼ˆy²ƒr¨†r§t«‡l£†\„HL¤B9¶A:ÍC@Þ@?è:;ô<>ÿDE÷><ó=<ì>=ê@AëBIêCMëANãALÐ>>Å@9¾?6·>3°,º7%Á:'Ã<)Â;(À9%Â9&Å:'Ç:(Ë:'Ð9(Ö6(Ø2$Ú."à/%ì7.õ=5õ82÷40÷0-ø**û&(û%'û%'û%'û&*÷!)ø".ÿ'7ÿ(>ÿ!;ÿ6ý1ÿ'8ï#,æ#+ã+-Ý--Ô+(Ò-)Ü41â62è64î66ò65ò12ï./î,,å/,Ü92Ñ:1Ò91ìSK»"Ä+#ßF>È.&Í.(Þ<7èE@â:7Ø/*Ú.*â51å<7ß>4Õ<.Ï5)Ë3&Ì5*Í;.Ë;0Å8.ìbXàZOÈC:¹6,º:/¸8-±3'´6*°0%°2&®2&¯4%°6'²:*´<.³=1°:0ºC;Ö\Wìppñsvöx|ûyƒõq|ÿ|„ýw€út}üs{ÿr~ÿr}ÿmxÿgsü`nôI\ÿ>\ÿ>[äAVÔek´•€’¡zƒm}™f~”c‡—j”Ÿwž¦ ¨ƒœ¨„’£Š£|€Ÿvzšqyšo|r vƒ¤u‚­wƒ³y‹¸‘¼„“¾†—¾‡œ¾Œ¢½§¼“¯½š¾Â§Ï̹ßÓÇãÒÊÜÇÄÔ¿¼Ìº¶Á²«¹ª¥ZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=XK;XK;XK;YL]P@[OC[NFYNJZPQ\SX_U^_Wfd\tibƒng‘qjxp¬€y¼‡€ÄŠÄ€Á~ºt«Œn¢—q¤¡u¨šjž™W{=Aª5+±5+Â<3Ó@8Ý>8è?:óA=õ=;õ;<ô;@ñ>Bî@IèAIâ@KÚAFÇ<9½=4¶<1±;/«:,®:+½A5ÐJAÚG@ÜA=Ô63Ð51Õ@9ÍC8»9+²5#½8'Â;(Ä=*Ä=*Ä;(Æ;(Ç:(Ê9(Ï9(Ï6&Ô2%Ú2%ã5*ê8.ï80ð91ç1&ç/%ê.%ï,&ö+'û+)þ,+ÿ-.ü*-ú%+ú$.ÿ'7ÿ$;ÿ7ÿ3ü0õ0ö.9õ3<å*1Û(,Ü.0Þ02Û+.ñ:>ô7=÷4:ö26ö/4ø03ù25ô87Û2-Ú;5×82äE?äE?Î/+Ñ2.Á"Ô51á?:èE@à=8Ø3-Ù2,Ý60Ý:1Ô:.Ï9*É5'Ç5(È9+Ê<0Ê<2Æ9/ícYáXNÉ@8º4+Â91Ã:0¿6,Â9/¿5+¾4*½4*»5)¸6)µ5(´6(°6)´;0»B9ÓYTèljïqtöx|þ|„øv€þ|„üyùv~þuÿsÿp}ÿkwüdqý_nöI]ÿ>\ÿ>\éCYÓeh®Žw‰˜oz•bu’\xŽ]cŠ•k˜p‹•p…”mp‡]l‰]h‰\g^k_q•ey›izŸk¬t„±vŠ·|»}¼“¼‚–½†›»‰›µ†¡³‹­¶—¾½¨ÏÆ·ØÇ¿ÖÁ¼Ï¼¸Æ·´º¬©²¤£\L<\L<\L<\L<\L<\L<\L<\Lù:Aö=Eï@GæAHÙ@EÏ@BÀ;6¸90±9+­9*©8(­9*»?3ÏF<ÙD>×96Ù74Ú;7ÜC=ÝOEÎH<µ3#¾9(Á:'Ä;)Æ=+É=,È<+É:)Ì9)Ï7)Ï2#Ó/#ß4*î=3ô?6ñ91é4+à4&ß5&â2%å/$ë,$î+%ñ+(ò+(ó+-ð(+ò&/ø(6þ%:ý7ü3ø3ô%7ò0;ó5Aò8Cð;Dðä,6ð2<ó/;ö.9ö-7õ.3õ.1ó/1í42Ü0,â=9Ú64ß;9ÿmjåCAÑ/-Î/,Ù:7ß@<àA;Û<6Õ7.Ö5-Ö5+Ò6*È6'Ã6%Â6'Ä8)Å;.Æ<1Æ<1Å;1ë`YáTMÉ<3¿0(Ë;3Ñ>6Î;3Ò=6Ø=8×<7Ô=6Ï<2É;1Ã9.¼6*¶6)¹;/¼@6ÏTMãgeíorøz~ÿˆû|ƒû|ƒûyûx€ÿwÿsÿn}ÿgvû`pü[mõG^ÿ\ìFZÎ`až~ev…Zi„Qh…OmƒRt…X{ˆ]}ˆ^x„\q‚X`zM_Pa…UeYn•`uœg} j~£mƒ¬r„²tˆ¶x‹¹y‹¹y¹z‘º~”º“±•¬€›©†©­’ºµ¢Ç¹®Ë¸²È¶´¸¬¬ª¡¢ —š[K;[K;[K;[K;[K;[K;[K;[K;ZJ:ZJ:ZJ:[K;[K;\L<\L<\L<]K=]K=]L<^M=^M;^O<^O<^O<^Q@^Q@]OB[OC\NE[NF\OI]OO^P_bTmdY{i^‰pgœ|t­…{·ˆ{³™…º¥…´¯€ª¸z¡ÆxŸÑuœÌcŒÈMlÜFRßA@ÕA=ÏE;ÌH;ÍG;ÓE9ÞA:î@Aõ0ÎD:Õ<7Õ31à;9åA?áD?èSLßUJ¿:+Á9)¾7$À7%Ä;)É=,Ê=,Ë9*Î8)Í4&Ò2&Ù2)å9/ñ>7õ>6ð5.ä/&à6)Þ6)à4*ã1'ç.)ê-)ì*(ì**ê),è',ë'1ò)9ö&<÷!;û=û%Aû6Hä(6ç.<ÿP\ÿ`lÿP\ò;åGDÛ=:Ú<9Õ:5Ò80Ñ7-Ð6*Í4&Æ3#¾5#¹6$»8&¿;,À9é=9æ?9á@8Ù?5Ð<2È:.Á9-»9,»=1ËNHàc_ìnoú|ÿ„ˆý~…øy€øy€üyÿx‚ÿt‚ÿn}ýetù^n÷VhóE\ý8Vÿ^N>\O?^NA]OB^PE^OJbNYbQdcTqdZ}le‘xr¢w¨ƒv¤”}§¬†«Â‰©Î‚žÚw”ál‰ÛXwÚD_óBTúDPïJPáIHÐE>ËE<ÐF<ÙD>èBBð@Cõ@GõBHíDGßCDÏA=Â?7¿@7µ=/®:+«:*ª9)®8*»;.Ì?6áFAâ=;îBBëAAÞ;6ãJBæXLÕK>È@2À8(¼3#Á8(È<-É:*Ë7)Ð8+Î0%×3)à8/é;4í:5í60ë0+å,'ã0,ã1-ç10ì31ó25ö37÷48÷6;ì-5ê,6í.=ñ0Có-Fö)Gý+Nÿ3Rô9Lå3?ð@Mÿ_lÿlzÿWfõCSõ>Pî3Dí3Aí3>é6<ã99Û83Î4*Ç/$Ë2*Ç.(Ð72òYTö\ZòXVÛA?âHFÜB@Ô<7Î70Í6-Ï8-Ï9+Ê7'Â5#¹8#³9$µ:(¸=-¹;,¶6)¼7.Æ=5ÛNGÙEAÎ50Ð1-á>9ç@:ã81ç51ë20î21ë52ç83á:2Ø:/Ð9.È:.¾6*º8+ÈIBÜ_Yënlû}€ÿ…‰ýƒõv}öw~üyÿx‚ÿsƒÿk}ýdvù^pôSeôF]ý8Vþ=ZïL]ÀTRz_BWhÑC?ÖEBãEFèBDîAEíCFçDEÚEAËB:¿?4»?3±;-©8(¨9(ª9)°8*¼:-Ê;3èIEé??ë=>å78Ú2/ÞA:îZPôh[ÚPCÉA3¾5%Â6'Ç9+È9+Ë7+Ò8,Ñ0&Ú6-æ;4é;4ê40è/,ê-+ë--ó49õ3;ø3=ü3=ÿ1>þ0=ý1=ù1>õ0Aò1Bô4Kõ5Nõ0Nö-Oÿ1Xÿ>_æ3HùO\ÿanÿ_nÿWfûP`ôDXé8JóAQê:GÝ2:Ò/2Ê2-Â8-½;+¼:*Ä:/À2(ÙJBúkcÝLGáPKÏ;9Ï;9àLJÔ@<Ê70Ê7-Î-±9)¯3'º:/ÊD;ÖGAØC=Ô72×2.ç;7ì:6è2.í2-ò,-ô,,ò./ï31è71â:1Ú<1Ò>2Â6)º4)ÅB:×XRçjhú|}ÿ†‰þ€„õv}÷xýz‚ÿx‚ÿqÿi{ûbtø]oòQc÷I`ÿ:Xý?[ðO_ºQNqX:Sf8]uEa|InSv†Y{ˆ]~‹`g‚—l€œl}Ÿm|¤o}¨p€©o‚ªnƒ©l…©lˆ«qˆ®qˆ°r†³r„³oƒµp…·r‰¸t‹µv‰¬tŽ¥wš¨„°´™ÈïØ̾ÚÑÌÂÂÌ«±Á›¡±ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8[L9[L9\M:\M:]L:^K<`J<^K<_L=^M;_N<^O<^O<^O:_P;`O;aP>aP>aP>aPÉ@8¾>3¸>1¯9+¨7'©:)­<*´<,Á=1Ï?7ß=:å99ã03â/2à42Û94æMEülaòh[ÙQCÆÍD>Á63É;7äUQÕF@É91È8-É:,È9(È9(Ä=)±?'¦<&¨;&¬=*«7(¬3(¼=4ÓLFÖGAÝE@Û96Ü30é73ì51ë0+ô1-ý,/ÿ+-ú./ô1/í4/æ81ß;1Ø>2É9.½3(À;2ÏNHáa^÷yzÿˆŠÿƒ‡ùzû|ƒÿ{†ÿx„ÿn~þew÷^põZlëL`õIaü9Wû=YîM]²JGhQ1Qd6\tDf~Nuˆ[Žc„h†’jˆ—n‰žsˆ¤t„¦t§r}¨p¨n©mƒ©l…©l…¨n‡«n…­o…¯o°l€²k‚¶n…·r‡³t‡­t§wœ¬…²¹šÈƯ×νÙÒÌ»¿Ê¤¬¿’š­[J8ZK8[J8ZK8[J8ZK8[J8ZK8[J8ZK8[J8[L9\K9\M:]L:]L:^K<^K<^K<^M=^M=^O<^O<\O<`Q>aR=aR?bQ?bQ?aP>aO;bL>hOKgNRbP\cWkjfuv”}|œx—‘z–«•Æ„’Ú}…ðuzþlmÿY[ýDLþ/Iÿ5Rÿ4½=0µ?1¬;+©8(­<,´?.»@1ÊA7ØC=Ù74á85Þ..â30æ:6Ó0'Ï5)ëUGÿwjë[PÑC7Ê<0Ë;0É7*Í6+Ô:0Ú70ß82å63ç32ê01í12ô36ý4<þ%6ÿ#9ÿ"9ÿ"9ÿ!8ÿ6ý5ø6ï2î9ð%Bï(Gî&Jñ'Mÿ3\ÿEhÿbuÿ`l÷WcñQ]òP]ïMZâ@MÔ2=Ú=FÌ7;»/.®/(¦5'¢;(›?&œ>%ª9'²8+ÒVJ»;2Ä?8¾41½2/ÎC@åWSÕHAÈ91Ä6*Å6(Ä5%Æ5$Ã:(±<(§:&¨7%­9*¬4&¯1%Â?5ÛRJÙIAáHBÞ;6Þ2.ê41í1/ï-+ü22þ,/ý+.ù+-ó++í-*æ1*ß4,Ö8,Ñ=1¿2(¼7.ÈIBÙ\Xówwÿ‰‹ÿ‡Šû€…þ†ÿ}ˆÿv„ÿj|þ_s÷XlöTiêD\õD^õ6Uñ:VàLZ¥HC^K-Mc5Uo?b}JtŒ\€–g‡˜lˆ›nŠ r‹¥vŒ¬z†«wªr~§m|¥i}¥g¥g‚¦i‚¥k‚¨mƒ«m‚¬l®h~°i³j„¶o‰¶s‰¯rŽ¬x™°„­»˜¿Å©ËʵËͶ½Åžªº‹—§]K7\K7]K7\K7]K7\K7]K7\K7^L8]L8^L8]L8^L8]L8^L8]L:]J<]K=^L>\L<\L<[N=]P?^SA`SB_R?`P@bQAcRBdQBdNAdLBjMIhKMdPYf[lnk†w{ž€…­‰ˆ²ƒ©¥‡©¾ˆ Ð‚’ây~ðsqújbÿa^ùJWñ>Që:Lî?NïCQê@Kæ9Ê=4Á;0¸:,§6&¯A0­<,¬6(¿A5ÌF=Ì=5Ð72Ú85Ü71Þ5.Þ6-Þ8*Ý<*×:'Ó6%Ù;0ðSLòZOÙE9Ç8*Í>.ÔB3Ò:-Ô3+ðGBá//î5:ó6=î,7ÿBMñ'3ú&2ÿ)2ÿ(2ù'ý"*ÿ'/þ'/ð&ð)ù+7ê .ì&7ñ-Aç#;ÿXrç-Dÿ]lÿ_iþZcùU\õPWëHMÝ?@Í84Ë>7ÄA7·?1¦7&™2!™6#š;'Ÿ<)§8-®7/ÂE?¿;7½31Ä64Å54ÔDCÛLHÚKEÑD;È:0Ä4)Ç5(Ë4)Å5*¼1¹=3Ö_Yésqÿû„†û‡Šÿ„Œÿxˆÿh}ÿ_wÿ[uÿUoøLføEcñ:Yô;[æ?YÛ]i‹@;VF-L^6YuBg†Mw–]}œcg€¡jƒ¦n‚¨o€§n¦m~¥l}¥i|¤h}£f£e£f¥l¦m«l¬k~­g®f±gƒ³i‡µm‹´r°vŽ®|™´‰§½™±Á¤²Á®¦²°˜žz…‹]K7]K7]K7]K7]K7]K7]K7]K7^L8^L8^L8^L8^L8^L8^L8^K:\K;^L>_M?^N>[N=[N=\Q?^RB_SC]QA]OB_OB`NDbPFcOHeNHiMJgNQeS_g_tnny~¨€‡»‡ŠÁž•Ê£‹»«£¹xÓyƒê|{ôvjöi`ø]aóOZìFRòHSøIVõEPï?Jë;Eä9?à:<Ú::Õ=8Î?7Ç>4À/Ç8(Ê8)Ó;.Þ;4öJFä01ð6;ö6Añ.<ÿ@Nï'4ó$,÷%(û),ý+,ü*+ø((ö((÷+,ï$'í%(ê%,ý;DÙ'ð4CüARØ&6ÿjuÿbjþZaüW]ôOSåBC×<8Ñ>6¾8,¿D5¹H6©>,™/)(’(ž-%°:6ÑTPÎHGÃ54Æ45Ñ==ëWUØGBÖG?ÐA9Ç9/Æ3)Ê6,Ð7/Î70Ç=3Â91Â5.Ã2-É4.Ñ83Ø?9ÞE=äJ@ÞA8Ú6-Ý0*ç0,ò21û03û03ô02ó12ô01ó/0ó0.î1-ç4-ß9-×=1¿3$¾aP@`P@]P?\O>[O?[RC[QE[QG\OG\OI_PMcQOfTTgUUgUUgV\h]nli†sv£|ƒº‚ŠËŠÔ˜‘× ŠÊª‚´¹}ŸÏ€“䄆îvósjûeg÷S\íGQðFOöHR÷EQòAKî=Eä7=à7:Ù99Ô<7Í@7ÅA4¾?0¶>-­>-ª<+«:,¸B6ÇH?À;2»0)Ê:2Í6/Ð6.Õ7,Ø8,Ù7(Ù8&Ü9&à:*Ý4-Û4.âA9éOCÞH:È5%È2#Ù@2â>5õHDè13ò5;ù7@ø4@ÿESø2?ð)0ë#&ì$'ù13õ-/ï''ì&%õ12ë)*ö8:è+1â)1ë3=ÿR^ï=Kÿ[gþ^fñV\îOTðMRêEIÝ:;Õ74Ô?9À6,Á?2¼B5³=1¬7-¥3)¡,#œ' š%©/*ÇECÂ::¼,,È35×ABô^]Ð?:ÒC;ÐA9Ë=3Ì9/Ô=4Ú@8Û@;Û@<Ø=;Ý>;ãA?ä>>à::ã?=ëIDàB9Ý<4Ù5,Ý2+ç1-ð31õ12ø02ô02ô02ô01ó/0ó0.î1-ç4-ß9-Ø>2À4%º8+µ;0Ð[Tízwÿ“’û‡Šúƒ‰ý~‰ÿr‚ÿdyÿ[tÿTqÿNmÿFgû=_ô=\îEbßTg¢AHp;3SH2Qa<]xEf‡Nr“Zu˜^tš_xžc{£g{£gy¢fy¢fy¡cx byŸby a| bz cz¢f{¤h{§h{¨e{©a{©`}«`®`‡²jŠµn‹²s‰¬t†¦w‚žuy“no†lSeYAPM2A>^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^L8`N:aP<`Q>]P?ZN>YOCXPEXOH[QO_UTbXYeX_iYcl\fk^glaildqok‚rtšy~µ†Ê…ŒÚŒŽáŽ‡×Ÿ‹Ó­ŠÄ³€©½yŽÌ{Þzò‚wÿsrÿcgùU\ôMTõGPôCMò>Gï-±=0¼F:ÌRGÇH?º5.º1)È91Í81Ó;0Ù=1Û;-Ù6'Ü6&à8+à5-Û2+à=4ìNBãK=Ò:,Ñ8*àB6ß7.ð>:é/0ð16÷4<ü8BÿNZÿLUý>Eò38â$&í/1ê,,ð22è**ë/.ò::Ñæ37Ý,2è9@ðEMÿXcóMWØ=CÚADáBFá>AÞ9=Ü89Ø88Ó97É83Â91½:2ÀA:ÍNHÖVSÐNNÃC@²72¶95ÏKIÙMLãQRïYZêRQñYVÉ51Î>6ÒB9Ð@7Ó?5ÙB9àC<â@;é?@ç8=ì9=ò?Cï:?è58ì>=öMJÞ93Û60Ú3+Þ3,å4.ì30ò21ô01ô02ö/2ö01õ/0õ/.ð0-é4-à8-Ù?3Â6'·5(³9.ËVOï|yÿ“’üˆ‹ý‰þz‡ýoücwÿXqÿOlÿFhÿ@cû9\ô?^éKdØZh…35g;0WO8WgCa{Kj‰Ps’Yt•\u˜^wby¡ez¢fw dv awŸavž`xŸ`xŸ`{Ÿaz cz¢fz£gz§fz§bz¨`z¨]|«]~­_†²g‹´nŒ³tŠ­s†¦u€qtŽii€dQcUDSL8G@^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M9]K5_M5`P9_P;\O>ZN@XOFXQKYPQ`W\g`hnfsshysg{sg}qh}ol}pq†rw—v}«z‚Á‡Ò„ŠàŠ‹å“ãŒÚ „¿žuŸ l‚¬nq¼vlÒviòsmÿllÿgiþ^`ûRWõFMï3Û=1Ú6*Ü4'â6*à3,â70ä=5åE9âF9ÞB3ÞA2â>2Û0&ê72ì0/ï.1ñ.4ú7?ÿPXÿ]dÿZ_ÿOSá.1ã03à,-÷EEè66Ü,,Û-.ë>@Ü25Ù37ÿbhà=BË*2Ê-4Á&*Õ;=á@EÛ6:Ù37ß9=Ü7;Í/0Ì43Í;;ÕGFÞRSì`cõilôekê^aÄ@>ÆE@å^[øhgÿopÿjjåKK×=;É40Ñ>7×D<ÖC;Õ>5Õ<4Ø:1Ü41î5;ñ-7ð,6ò.8ï,4ë,3ó9<þJKß3/Ü3.Ú3+Ü3,ã5.ê40ï4/ò21ô02ö/2÷/1ö.0õ/.ð0-ê3-â7-Ù?3Æ8*´2%²8-ÃNGï|yÿ’‘ÿˆŒÿ‰ÿw…úl|øatûTnýHgÿ>bÿ:_ú6\óAaàNeÂWap/+_?0[W>^lIe}Mk‰St’\u–_v™_xžcy¡cx buŸ`uŸ`u_vž_wž_xŸ`{Ÿaz¡bz¢d{¥e|¦d|§`y§^y¨Z{ª\}¬^€¬a…¯g‡®m‡ªp…¥sƒ r{•nrŠjexe[k^RbU_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N:^L4_N4`N8^O:[N>YOEZSMZTT_ZahbprmzuŒ{u‘{q“zp“vp’qt“rxšt}¨w¶zƒÄ~†Ï„‰Ú‹ŒÞ–Ü™ŠÍ›…¶¢ƒ£ª„‘«~yŸl[šQ>¼MBÔQIâWRëWUñSRñKMí>Cå4:é9<æ9;à;9Ø=8Ó@8ÊB6ÀA0º?/³9,ºA6«5+£.$¾I?Ùg\ÙdZËUI¸<2¸6)À3)Î:0Ù;0Ú6,Þ3)ä6-ß1*ä71ã;2Ý9/Þ>0ãF5äB3ß9+ß1(é4-ð31ï-.í*.ô17ÿEJÿV[ÿ]bÿ\aâ9<ã9<Õ+,ôJKâ89×//Û57Ì()Ì'+øXZÝ>BÕ9=Ñ6:º#Ä(+Ü<>æAEÝ49Ù,2Þ17Ù05Í(.Ò37äKNöaeûhnùcl÷`iú`løbkÖLLÕNJê\ZêVTçMMãHFÏ42Î3/ÙA<àKDäOHßJCÙ@8×:3×6.Ü.-õ2:û-:ø*7õ'4õ)4ø0:ÿ>CÿJJà1.Þ3,Ü3,Ý5,á4-ç4/í4/ð3/ô02÷/2ù.1ø-0ö..ñ/-ë2-â7-Ù=1É;-³1$±7,ºC=ìyvÿÿˆÿ|ˆÿqöhxö_rùRlûDcÿ9^ÿ6]ú6\ðFcÑN`¢IMe5+VD0[Y@^lIe|NkˆRt‘[w•_x™`{ždz cvž`s›]rœ\s›\tœ]v^wž_{Ÿaz¡by¡bz¤b|§b{¦_x¦[x§Yz©Y{ªZ~ª_ƒ­e…¬k‡©m‰§s‰¥u„s|”ru‰pnlfwe_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<_N:aP6aP6aO9^O<[OA[RK\VV_Zakgvso†}z—‚~¡|¥}w£{u¥xv§sy©s}°x¸{„¿~†Ä„‰ÉŽÎ”“Íš“Ç •½«›µ¼¦²É­©Å¦”ªˆmœfJœE2¯A4¶@4ÂB9ÖHDèNNîJKì?Cë=?é;=ä<;ß=:Ù@8Ð@5È>1Á=0½:0¾?6¯4,§1'»I?ÑcVÖh[ÕeWÃOBº>2º4)Ç7,Ö90Ù5,ß2+ç60â0,ã4/â7/Þ7.à>1åC4ä>0Þ4%æ4*é0+ð3/ð..ï-.ò14ó78öBEöMRüY^éFKöQWØ37ëFJÝ8<æAEÚ7:Î.0Ñ05äHKÒ7;Ð7:¹#%Õ;=Û8;å;>ëÿ0=ú*7ü.:ÿ;EÿCHûABã1/ß4-Ý4-Ý5,â4-æ3,í4/ñ40ô02÷/2ù.1ø-0ö..ñ/-ë2-ã7-Ø:/Í>0µ1%±7,²;5ésqÿŠŠÿ‡ÿv†þi}óató[p÷PjúCbÿ7`ÿ7aù;_ìLf¿O[~86]=0NF1VX@ZeEcxMj…RrŽ[v”^yša{ždxžas›]p˜Yp™WqšXqšXt›\uœ]y_xŸ`x¡_y¢^z¥^y¤\x¤Yx¤Wy¥V{§X©_‚¬d„«h†¨l‡¥o†¢q€šmx‘jq…ij~cbv]_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<_N:cQ9cQ9aP<]P@ZPG\TR_Zaa_mtrŠyx˜€¨ƒ°~~°yy¯yu°wwµw|¾x€Á}…Ä‚ˆÄ…ŠÁ¿—–¾ ¼¬§»¶¬µ¾³±È¸«Ð¾¦ÖÁ¢Ñ»–Ьˆ¯oT®\G¤G5¨>0ÂG?àWQïWVñNOé@Cê=?æ<=â=;ß=:×=5Ñ:1É90Á80Á<5¹:3¸=5ÁOEÇXMÇ]OÑeXÓcUÂL>¼:-Å8.Ò91×4-ß2,ç60æ40á2-à5.ã<3çC7æC4â:-ß3%ê5,æ.&ð0-ï/,ð31ñ54ç-.â24çBF÷X]öW\ÿouåDJëHMà@Æ02Ö:=òHKî9>ð7?ø=Fò7Bè-8ô>Jÿ]gÿmwÿjrÿcn÷]gú^kÿaoÿ]nùYeò\]ãPIâJGÕ74Ò/0Ù54Ò0.Ø95ßD?ãJDâIAÙ@8Ó6/Ö4/Ü71è66ê'/ü0<þ2=÷+6ù0:ÿ>Eý?Aì44â3.à5.Þ6-ß4,á3*è3,ï4/ô41ö01÷/2ù.1ø-0ø..ò/-ë2-ã7-×9.Ñ?2¶0%²6,°61èpoÿ‡ˆÿ†Žÿp‚ücxñ\pôXn÷OiûBbÿ9aÿ`P@`P@_O?_O?_O?aQAbRB_O?]M=]M=aQAcSCbRB`Q>dS?aP>]P@^QI[QPZSZeapsq‰yxšz|¥~€±€¹}ºxz·rs´lo¶twÈv{Ì€ƒÊ‹Æ–—䤾²°»¼¹´ËƳÓÌ°ÙϬÛϧÜÏ£ÝУÙ˜٘Ѩˆ¸€g ^FËzgÖue½H?×QN÷ccéKLå?Aâ89ä::â:9Ü75Ù61Ö;6Ë81À5.ÇB;»<3¿I?ÆXK¹OAÎdVÑcTÌXIÅG9Ä:/Í6-Ø7/á6/ã4/ß0-ß2,à70ä=4à<0Ý7)ß5(å7,ä/$ê/&ì/)î1-î20ë40è51â64×79æJNõY]íNS×8=×6<ùX`ÿ~„ÿ~†ÿouÿgoÿipÿflõ\añX[ûZ_ÿUZÿDKü8Bû7Aö2>î+9ì0>ñ=HÿS_ÿ`iÿgrÿepþbmÿcnÿ`oý]gíSSßF@Ö85Ö41×11×/.Ø31Û94áD=ÜB:Ù?7Ö<4×90Û81à93æ66ð7<ó4;ó4;ö4<õ6;ò59ë33ã1/Þ3,Þ5.ß7.à5+ä3+é2,ï2,õ20÷12ø03ú/2ù.1ù//ó0.ì3.å7.à?5Ì8,¿6,¯/&¸;7ÒXWÿ˜šþ{ƒÿm€ÿe|ø\rðPhôGeüCeÿ;dù9`õNlÓRd‰=?P, C;&CG.KM5Y_CZjEcxMqˆZx’bx–`t•\r–Yq˜Yl•Sm–Rn—So˜Tr™Xt›Zuœ]uœ[t›XtWv Xw¡Wv¢Wv¢Uu¡Tt S{¥[{£]zž^u—[m‹Ub~MXrCSj>AW0?U/`P@`P@`P@_O?`P@aQAbRB`P@_O?`P@bRBcSCbRB`P@fVG_QF\OG^TSaZad`omkƒvw–wy¢{}®}¸x|¹quµkp´lo¶nq¾uvÐ|~Õ‰‰Ó˜˜Î¨§Ç¸¶ÁÉźÓαÛתâÛ¥çÞ¥æÝ¢äÛ¤âØ£ÛÑ ÔǛӼš»œ€©}dÅ‹wÊ}m´VJÒa[örpìZ[çKLã?@ç=>ë>@ç;;â66Û64Ö=8É83Ê?8¹6.¸>3½K@¶H;È]MÝo`Ô`QÆH:½5)Ä0&Ô6-Ü5-Û0)â51å95ä=7à<3Ü8.Û5)ß4*ã5*ì7.í5+í2+ë0+ç0,ã2,á4.Ý52Ö87Ø>@äJLóW[ú^bü\dþ]eÿaiôS[ïNVñQYÿ_gÿjqÿflõZ`óNTí4:ñ,5ô*6÷-9ñ'5å!-æ'6í7CþPZÿZdÿblÿdmÿenÿcmý[hõQZåEEÞ<7Û64Þ63ß55Ü30Ú2/Û62à>9Û>7Ø;4×:3Û81ß82å95ç:6é9;ê7:ë7:î79î79ì65å31ß2,Ü3,Ý6-ß7,â6,å2+ê1,ò1,õ20÷12÷03ú/2ù.1÷//ó0.ì3.å7.ß<3Ô=2Â8.¶1*·74ØZ[ÿ“ûs}ÿfzÿ^vùWo÷OiùFfû?bü^QA^QA^QA^QA_RB`SCaTD`SC_RB`SCaTDaTD`SC^PCbUM\QM[QRcYbkdtqm„vu•y{¤y{¬y~¶x|»nsµei°`g¯jn¸ruÆ}}ׇ„Ý—”Û©§Ø»¹ÏËÊÈÜØ¿åá´éäªíè¦ðé¥íå¤çá§âÛ§×Ï¡ËÃœ¸¯©››ƒk¨ƒp§o`œRGº]UÝmi÷uuï__äJLå@DëADì>@è8:â66ß=:Ô;6ÔA:Â70·7,·>3®=/¶F8Ûj\ßi[Ù[MÊB6Å2(Ñ4+Ù6-Ù2,Þ52éA>ìGCà=6Õ2)Õ1'Ú2'Þ0%æ4*è1)ç.)æ/)ã2,â7/á=4àB9Æ-(Ê43ÜDCðVXú^b÷ZaóS[ñQ[èFQêHSïOYü\fÿmvÿntôY_ã>Dé.5ô-4û2<ü2>õ+9í'4ö6EÿKW÷ISõPWøW_þ^fÿckÿ`i÷RYéBIÞ97Þ71ã75é<8ë;;æ95á51Ý60Ý:3Ù;2×90×90Ü71á83ç:6é<8ã99ã99å97ç98è88æ74á40Û2+Ú6-Û7-Þ8,â6,ç2)ë0)ó0,÷10õ12õ13ø02÷/1÷//ò0.î3.ç6.Ý90ÜD9Ç80»4.µ/.ä_bÿƒˆølwþbxþWsúPmþLlÿCfö:]ó;_ìIfÔSgDJl;4O>,=<':?(ED/FH0Q\U'B\/E_2Ic6WJ:ZM=\O?^QA]P@^QA_RBaTD`SC`SC`SCaTDaTD`SC_RB\PDZOMZQVbXcjcsqm†vu•xz£z|­w|´sy·mr´bi¯]d¬ag±lr¾x{ʉ‰ß•‘夡䶵áÇÄÙÕÑÎáÝÄçä¹ëæ¯îê­îè¬éâ«ãÛªÚÓ©Ë¡»¶™¥¥›™„“ˆv˜q™rc›bW³i`Ïrmû‹‰õutê[]æLNèCGí@Dìô@?ï=;æ95à72Ý82Ú91Ù80Ù80Ü71ã73è96é:7â:7à;9ã:7æ:8ç:6å84à5.Ú3+Ú6,Û7-Þ8,â6,ç2)ë0)ò/+ö0/ô22ô23÷12ö01ö0/ò0.î3.ç6.Ü8/àF<É91¾3.¶,,îfjÿy€øgtÿbyýTqþKkÿGjÿ>cò6Yë=^ãQhÄXeˆBBgC7[N;GF1AC-JH3EE-LU6Sc>btLlƒUp‹XnRkPiŽKgIhJh‘Kj“Mk”Pm–To–Wp—Vt›Xs›Uq™So—Pj“MgJeŽHdG`‡D]AWy=Rq8Mi6Lf6Ne7Of8Lf7Oi9Sm>UH8WJ:[N>\O?]P@]P@_RBaTD_RB`SCaTDaTD`SC_RB_RB^QIVMR_Xhnf{tp‰xt—xw¡xz«y{´sy·jr³`g­[c«_g°jr»v|Æ€„Γ•àžžä­®ç»½æËÉßÔÓØÝÛÎáßÆåá¾æâ¼äß¹à׶ÚеÎƱ¾µ¦­§›˜šŒŒŽ€‰…yŠ|q‘vk›si¨meºoi扄î~ósrñedñWYðMNîDEì@@ã:7à;7äB=ÞE?Ì<3Æ=3ÄB5¯1#®0"ÇI;ÜXKÖN@Ì=/Î8*Ð6*Ñ3*Ö42õUUÿkhú]XãD>Ü;3ß;2ã80â4-ã2,â1+Ý0)Ô0'Í/$Æ/$Â0#Å9,À4'Á3)Ë:5×CAÛEGÛBGÚ@HàDOëOZòVaòVaú^iÿgoóYaáBGê:<í57í38ï28ñ3=÷9CÿHSÿV_ä6?Ý4;ß6;ëADùJOüIMô;Aé13è51ë95ï<8ò<9ó;9ð:7é73â70ß;2Ü;1Û:0Ü90ß82ä73è64é75æ:8ä;8æ:8è:9è;7æ95á6/Ü3,Û7-Ü8.ß9-á7*å3)é1)ñ0)ô1-ó32ñ33ô22ô01ô1/ò0.î3.ç6.Þ7/àC:Ê70À1-À13÷jpÿqzúftû]túPmÿCfÿ=dÿ9cõ8^æEdÙZm«V[wE>dJ=aYFTO;KI4PI6GE.GP3L\8ZlFf|Nm…SmŠRlŒMhJfŽHgHg‘Ii’Lj“Ol•Sn•Vo–Ut™Vs˜Un•Rj’LfKcŒHaŠF_ˆFZBX|?St;Pn8Ok:Rl=Wn@ZqCUo?Vq>WqARE5UH8XK;ZM=[N>\O?^QA`SC`SCaTDaTDaTD`SC`SCbUEaVP^Vcje|yu}yšzy¡xy©vy°sw´jr³cj°[c«]e®hp¹v~LJшŒÓ™Ý£¥à¯³ã»¿åÆÇãÏÎÞÔÓØ×ÖÑÙ×ËÙÖÇ×ÑÅÒÉÀÌþŹ¹´¨¬£šŠ‹†x{tyvquleleogŽa[`[ÀsmØyuð{ü|yÿrpýccöSTðHGïC?ê>:á<6àA;Ñ:1ÓC:ÝTJÂ>2¸6)½9,Â=.È?/ÏB1×C5Ö@1Ñ7-Ð2/êLMú_]òWSßD?Ù:4Û81à70æ93ç92ç92â:1Ú9/Ñ9,Ê8+Ä8)°(¸3"È@2ÓI>ÒD@Ë;:Ì7;Ï:@Ñ7AâHRíV_ðYbõ^g÷`iêU[ÜAEå@>ì?;ñACúGJÿLTÿQYÿT]ÿV^á4:Ú/5Ü/3ç7:ô=Aø;?÷48ó12í42ï95ð86í42ë20ê20ç40á4.ã<4à=4ß<3Þ;2á83ä73è43è43è88ç98è88ë99ë97é75â5/Þ3,Û7-Ü8,Ý:+ß7*ã2(ç0(ï0(ò1,ñ42ð43ó32ó11ó1/ñ1.ì3.ç6.à91Ù<3Ì71Á0-Ñ@CÿnuýkuùbqðRiõHfÿ;aÿ4^ÿ6bû>däNiÊ\i‹GFjF:]L<]VCXQ>RJ7OG4ID.DJ.GU2Sc>^sHgMj‡OjŠKgŒGgŒFfŽGfHgJi’Nk”Rm”Um”Uq•Uo”Qj‘NgŽKcŒH`‰E_ˆF^†G\‚E[~DWxAVr?Uo@YpB]rG^uG[sCYtAXs@NB2QE5UI9WK;XL\P@^RBaUEbVFbVFaUE_SCaUEfZJh]YngwupŽ|x™{y wx¦vw­pu¯jo¯ah¬^f®_g°em¶pxÀ}…ؙ͉ؗ Ö¡¨Öª±Û´¹ßº¿ßÀÁÝÃÃÛÇÆØÆÃÔÅÁÐÁ»É¼³Ä»°Áµ¨¼¦˜¯–‹œˆ…Œqqqtpopfewhe†nj„_Y•d_›ZT¹f`Ùsnðzvÿ{wÿwsÿhfüZWþRNõHBæ=6çD=Ø;4ÛG=ê\RÅ;0Ä<0½7+¾6(Ç>.ÑD3ÔB3ÔA1×A3Ò86Ø>>ÝCCÜB@Ö=7Õ81Ø7/Þ7/å:3æ93å:3â;3Û>5ÕA5ÑE8ÌG6®-¼;%ÍJ8ÑL=Æ=5»0+À00Ê9>×AJáKTëU`ðZeð]eìYaßLRÔ>@Ï4/Ø7/à;9ê@@òCHõDJñBIî?Fâ5;ß26ã36ï8<õ79ø14û/2ü14ï20ð95ð74ì0.è,*ç0,æ3.à3,ä=5à=4à=4à<3ã:5æ95ê65ì65ì57ì57í57î68î66ë54ä2.Þ1+Þ7.Ý9-Ý:+ß7*á4&æ1&í1(ñ1,ð42î53ñ42ò21ó1/ñ1.ì3.ç6.â;3Ò4+Ò:5Æ20çUXÿpxùcnòZiçI`óEfÿ8bÿ/]ÿ5bÿBhÜLe±PYj5/^G7XK:UN;[P>VI8M@0JC0@F,AO.K[6Xj@bxGfJhˆIf‹FeŠDc‹BcEeŽHgLh‘Oi‘Rk’Sn’RlPhNd‹JaŠH_ˆF_‡H_‡H_…H_‚H]~G]yF]wH`wKcxOczN]uC[vAZu@JC3MF6QH9TK.ÑE6Ë>-Á2"Ê7'ÛE7ÞE?Ó97Ì3.Í50Ô;5×=5Ý<4á=4ä;4ä92Þ5.×4+Ï5)Ê8+Å<,Â?-ÔS>ÈG2½<)¾:-Ã=2Ä;5Â74Â43ÜKNÞMRáPUåTYèY]åVXÜMOÓD@É5+Ñ7+Ø7/Ý52â24å26æ18æ.6ì4>ì3;ó5?û9Bý4>ú+5ÿ(3ÿ/9ø-3ù57ù59ð./ë*+é0.è51â5/ã<4à=4à=4á=4ä;6ç:6ë76î66ì46ë35ì25í34í55ê41ã1-Û0(Þ8,Ý:+Ý:+Þ8(à4&ã3$é3&ì4*î50î52ð42ð3/ò2/ï2,ì4,ç6.ä=4Í/&×>9Ì35ùbgÿoy÷[iðNcêC]ùEhÿ:eÿ0]ÿ6aöGhÉJ]“CFR,#VI8SL:OH6[O?UI9F?-HF1>B'@J(IU1Sd:_rEe}Ig„JeˆHcˆCa‰BbŠCcEeŽHfMhPiQlPkMfJcŠIaˆG`‡F`‡H`†I^G^F_}G`|Ia{Kd{Mf|Nf~N]xC]z@^{CDB6FD8JF;PG>RH>WI>]M>_O?`Q>aR?`SB_VGbYRgb_ojnso~wq“zt |y¨yw©pp¦gg£`a¢\_¤`b­fhµopÀyzÌ„‚Ö‹ß–’眙栞ݡ¡×££Ù¤¤Ú¦£Ø¥¢×¥¡Ô¤ Ó¥žÑ£Í¢šÉ¢™ÈŸ–Ù»Ž‚°ƒ|žrn}igld^`fZZkYUrWP}WNŒWO•RI¨ZPµXPÁZSØkdìyrù‚|ÿ‹†ùuqÿusí_]ßPLÙEAïZTÌ71Å2*Ä6*Ã7(À7'Ã7&Æ9(Ê;+Ð<.Õ?1Ò8.Ö<2×?4Ó;0Í5(Í3'Ø:/â@5à90á90Þ7.×7+Ï7)É:*Æ?,ÄA/Â=.Æ@4ËE:ÍG<ÌC;Å<4»2,¶+&Ç<7ÐEBÙOLàVSãYVáXRØOIÐC:Ì;*Ó:(Ü8,â5.è./ì*2ð(3ô'6ú->ú+?û*?ý)?ÿ(?ÿ&?ÿ$<ÿ$<ÿ$8ÿ'9ÿ+<þ,9ó+5í.5è45ç;9Ý84Ý:3Þ;4à;5ã:5æ95é73ë54ë35ì46ë54é54ç53â5/Ý5,Û5)Ü8,Û9*Ü9(Þ9&ß8&â7%ã6%æ4&ì5-í4/ð50ñ4.ñ5,í5+ê5*å7,à90Ø7/Õ:6Û?BÿmwÿbsûSjõIcÿKjö6[ÿ6_ÿcçNj¯IV^$"D, ?:'HE4PMC/?G/BH&EK%KS.S]8[kDavKd~NdƒJb†F`ˆBa‰@c‹BeFhJlPm‘Ql‘LiŽHgŒGf‹HfŠJe‰Ic…HaƒGdƒJdIbGc~GdJdHe~Ga}C[{<\=_‚B=?4?A6FC[K>]M=`O;`Q<^SA^VIc[Xhcinlyso†tp•vpžtp¢pm¢gfŸaaŸ]^¡\\¤ed°kjºtrÅ}{φ‚Ù‰à”Žæ˜“å›–Ùœ˜Õ™Öžš×ž˜Ö—Õœ–Ô›•Ñž–Ñœ”Íœ“Ê›’ǚē‰»ˆ®‚xtk|mdif]^f[YiZSoWM{UJŠVKšVK°\RºYRÁXRÓfaàqjãvoí~wý‡…ÿ‡…÷usîgdãUSëZUÇ2,Â/%Å7)Ã7&À7%Á8&Ä8'È;*Ï;-Ó=/Õ9,Õ9,Ó:,Ò:,Ñ9+Ñ9+Ô8+Ø8,ß;1à90Ü8.Ö8,Ï9*È9(Á:&¾9&¾6*Á80Æ=5É@8ÊA9È?7Å<4Â91¿4-Ç>6ÑH@ØOGÚQI×NFÌC;Ã7*Ê7%Ó8$Ý7)å4,í//ô+3ù)7ý(:ÿ+@ÿ*Aÿ)Aÿ&Aÿ#@ÿ!<ÿ=ÿ:ÿ:ÿ 9ÿ%;ÿ);÷-9ð19ê7:å;;Ü94Ü:5Þ;4à;5ã:5æ95é73ë52ë35ì46ë54è64ä71ß6/Ü5,Ù5)Û9*Û9*Ü9(Ü9&Þ9&ß8%á8%ã6%ç5+ê3+ë4,ë5*ë5*ê6(ä7)á7*ß;1Õ4,Ó54óTYÿesÿ[põGbÿIhÿAdÿ;`ý3[ù;aòMmÍLb‰8?S*$A5'69(;<,B@1DA0@?-=B.>G,=CKP'\b_„?b‡B69.:<1??7DA:KB;OE/Ô>/Î6(Ë/"Ú:.Ú8-Ù7,Ö8,Ð:+É:)Â9&¾7$½5)À6,Â8.Ä:0Ç=3Ê@6ËA7ÌB8Ç:1Ê@6ÏE;ÐF<ÒH>ÑG=Ê@6Å7+Ì6%Ö6&ß7,ç4/ñ03ö-5û+9ÿ*<ü';ü'=û%=ù#;û!:ú7ü7þ6ÿ8ÿ6ÿ$8ý*;÷2<ñ6=ë8;ä::Ü94Ü:5Þ;4à;5å95ç85é73ë52í36î47í55ê65å61á6/Ü5,Ø4(Ú8)Ù9)Ú9'Û8%Ý8%Þ7$à7$á6%á5'â4)ã5*ã6(ã6(á7(Þ6)Û7+Ý<2Ð1+Ø88ÿkrÿ]nþPiñ<[ÿHlÿ7]ÿ>eù5[î>bæVqª?Qa#(L/);7+07'37&9<)@=*A<(@>)BB&?FXa4s~T€Œdw‡`hSa}La€G`ƒC`…?a‰@cŒ@hŽEjJkMl‘Nn“Mk‘HhHgŒGh‹Kh‹KfˆLd†Je„KdƒJc€FdGf‚Hf‚GeFb€Bc†DeŠEhH25*58-;<4A>7G@:KB;RE.Ñ>.Ë8(Ç/!Ò6)Ó5)Ò4(Ò6)Ñ9+Í<+È=*Ä;)Ä:-Ä:/Æ90Æ9/Ç:1È;1É<3Ë=3ÓD<ÓE;ÐA9Ë=3Ë<4ÏA7Ï@8Î;1Î5'Ù5)â5.ë31ò/5÷+6ù)7ü):ù&9÷&;÷&;ø'<û&<ý%:ÿ$:ÿ#:ÿ"7þ#7ú%7ù,;÷5>ò9?è8:à87Ü94Ü:5Þ;4à;5å95ç85é73ë54î47î47î66ê65æ72á6/Ü5,×5*Ø8*Ø8(Ø8(Ù8&Ú7&Ü7$Ý6$Ý6$Û5%Ü6(Ý7'Ü9(Ü9(Û:(Ù9)×:+×:1Ð3.ëHKÿoyÿVjøD_ø<_ÿAgÿ3\ÿ8bø>cèMlÅOe€0=J C1-11'.6'4=,=B.B@+B<$E>$HE$U\0p~MŸr—¨|ƒ˜mj„W_{J]~E_ƒCa†@bŠAfCkJl‘Lm’Om’Oo”Nl’IiŽIhHiŒLiŒLhŠNg‰Mf…LdƒJdGe‚HgƒHh„If‚Gd‚DgŠHiŽIl‘L-3'36+891<;6B=9G@:MD=QG=SI=SK>UNDZUQa^eigumklkŠjhb`XVˆPP†QQXYš`cªfj´orÁuxÉ|Ђ…Ö†‡Ù‡ˆØŠ‰Ù‹ŠÖ‹ŒÏ‹ŠÌŠ‰Í‰‡Ð‰…ш„ÑŠƒÑ‰‚ÐŒ„Ï‹„È…Á†º†°‡¥~w–m…„Yj€SZnVTc\RZaOZ_HeZDxUB’LD¸TRÐSWÛRYå^dèejãklæuqäunâoh÷~vÿ‚{ÿ‡~ôl`É?2Á8(À;(¿='¿='À<'Â;'Å:'Ç8(Í7)Ø:/Ù8.Ò8,Ï9+Ì:+É:*È9)É7(Ï9+Ñ7+Ò8,Ñ7+Ï7*Ì8*Ë<,Ë>-Ê<0É=0Ê<2É;/È:0Æ8,Å7-Å5*Ð@7Ð@5Í=4É9.Ë80Î;1Í:2Ì5,Ð/%Ù0)ä20ì25ô/8ù-9û+;ü,<ü-?û.?ü/@ü/@þ/Aÿ/?ÿ-?ÿ.@ÿ)9ü)8÷+7õ0:ñ6=í8=ã77Ü43Ü94Ü:5Þ;6â:7å95ç85ê65ì44ñ48ñ48ï56í76æ72á6/Ú6,×5*Ø8*Ö9(Ö9(Ø9&Ø9&Ù8&Ú7&Ù8&Õ8%Õ:&Ö;'Õ=(Ô=(Ô=*Ô=,Ô<.Ñ7/Ú;8ÿ^eÿaqÿPi÷<[ÿAiÿ4_ÿ4`û1YôKlÛYq•>NZ%-C),:2/-0)08+7@/:B+<<"A<UH(`[5{…S£lª¾‹¨¾Ž¥wo‹[aK^F`„DcˆBeDj“Go”Np•Po“So“So”Nl’IiŽIgŒGiŒLiŒLi‹OhŠNf…Je„IdƒHe„Ig…Ih†Hg…Ge…DiŽIi‘Kl”N+1%.4*470893>:7B=:HA;KD1Î8*È4&Ê8)Ë<,É:,È:,É;/É;-Ê:/È9+È5+Ç5(Ê6,Ï;/Ò>4Ó?3Ö?6Õ>3Î7.É,#Ò+%Ü-*ç02ð39ö1;ú0<ý0?ý0?ù0@÷1@÷1@ö0=÷/<÷-9ú,9ú*7ý/<ù/;õ0:ð3:í6;æ69ß55Ù42Ü94Ý:5ß:6â:7å95ç85ê65ì44ò59ò59ð67í76æ74ß6/Ú6-Ö6*Õ7+Ô8)Ô8)Ô9'Õ8'Õ8%×7'Ô9%Ð9$Î<%Ï=&Ï?'Î@(Î@*Ð?.Ò;0Ñ61ëHIÿfrÿOdÿHfû7[ÿAmý/]ÿ7aò4XãPj¼Ufm19E(*E697325406906=-3;#38CCja:…TŸ®w©Á‡µÎ—¯Ç“’®}v”be†Q`‚F`…BcˆBgFm–Jr˜Or—Rq•Up”To”Nl‘KhHf‹Fh‹KiŒLi‹Ni‹Og†Kf…Je„If…IhˆIi‰Hi‡Gf†CjJk“Mn–P(0#+1'/4-350764<85@=8C>8IEù4>ù1>ú0@ø/?ò.<ï/<í/9í07ï-5ï,2ò+2ñ*1õ2:õ3;ò5;ì59å57á55Þ65Ü75Ü86Ý97ß:6ã:7æ87é77ê67ì46ô5:ô5:ñ7:î87æ74à70Ú6-Ô6*Ó7*Ñ8*Ð8*Ð9(Ð9(Ð9&Ñ8(Ð9&Ë9"È:"È>$Ç?%È@(È@*Ì=-Ï;1×96üU\ÿ^qÿGcÿ?aÿ:aÿ7gþ3bû8`íFdÅNa‰@IS12A64@:<:46?56<7179+4="9CSZ.‚‚P¢§q±ÅŠ¯ËŽ°Ì’¦Ã’®}{™egˆQ_E^ƒ@c‰@iDo•Js™Ps˜Sq•Uo“Sn“NkJgŒGeŠEgŠJh‹Ki‹Ni‹NfˆKd†Id†IeˆHgŠJh‹Ii‰Hf‰Ej’Ll–No™Q&.!(0%-2+13.331764:95<;6GD=DD*¾;'¼7$À4#ÑB2ãOAäN@ØB4Ë7)Ë7)Ð>/Ê;+É:*Ç8(Æ7'È6'Ê6(Î8*Ð8+Ó;.Õ;/Õ9-Ò6*Õ7,Ú<1Ý<2Ü71è88ñ8=÷:Aû9Bú4Aõ/<ò,;ï,:í/;ê19ê38ë48í57ñ56ô36ó57ð37ï6;í9<é69â45Ý33ß76à;9Ý86Þ97á96ã:7æ87é77ê67ì46ô5:ô5:ñ7:ì89æ95ß82Ø7/Ó7+Ð8+Í:*Í9+Ì;*Í:*Í:(Í:*Ì;(Å9"Â:"Ã=$Â>%Ã?(Æ?+Ê<.Ï81ß<89?48E26C41=:)>E&FU*bs?›a­½±ËŒ«É‹¦Ã‹º„Ž¬z{™ef‡PZ|@^?a‡>hŽCo•Jr˜Or—Rp”Tn’Rn“NjIf‹Fd‰Df‰Ih‹Ki‹Ni‹NfˆKe‡Jd‡GeˆFgŠHh‹Gh‹GeŠDk“Lm—OpšR(0!'/"(-&).(.0-3317839:4==5?@8DE@JLKORYVXeZ\s]^}YX‚[Y‹^]–ee£nn¶wxÈØ„…⌌ðŠŠì†‡ä‚‚Ü€€Ö‚€Óƒ‚΀ƒÈ„ǃƒË„„ΆƒÐˆƒÓ‹„ÒŒ„ÏŠ€ÅŠ€¼‰€¯‡}Ÿ€xwozkegf]Xm[Qm[Mi\Lf^Kd_IeaHhaGo_FoP;…UA¥]O¿aYÑYXÝQTîS[ø\`ùheæYPÔD<Î70Ñ7/×:1Ö=/Ô;+Ï9(Í:&Ï9(Ñ:)Ô8)Ø8*Ü5,Ü5,Ð/%Í3)Ì8,Ê>/Å@/Á@-¾=*¼9'Â9)¾0"éWJßK?Ã/#Ñ=1Î2Ü<0Ù7,Ú8-â>4ìC<õBEò9?ð2<ö4?ö2@ñ-;í-:í2=ì7>æ5;ä68å78ë99ð:9ñ78ï77ò;=î<<ê::æ87á85ß74Ü75Ü75Þ97á98ã99æ::é9;ì9<í9<ï8<ô7;ó6:ð8:í9:ç;9à;5×90Ï7,Ê8+È9)Ç9+Æ:)Ç:)Ç:(È;*Ç<)Á9#Ä='¾:#¶4¼9%ÉD3Ï?6Ê1,ÿ^eÿVgÿIbÿ<\ø1X÷0Yû6cõBiçYo¬FQo33N3,B?6>C<@78@-1L/3K2.A9&DJ(Zn=~š_ž¸w¨Å‚¬ÊŒŸ¾‚˜¶€”²~‚ nf„RXvBY{?]€>c‡AiDn”Im•Ll”Nk’Ol‘NiŽIfŠDc†Bc†Bf‰Ih‹KfŠLdˆJg‹MhŒNg‹Kf‹HeŠEf‹EjIk“Jq›QržSt U*0")/#).').(-/,130561782;<4>?7AD=HJGOPTSUaXYkZ\u\Z^]‰db”kj¤utº~·‡ß‹Œéð‰‰ë…„ ؀~Ҁς‚Ì…†É†‡È‡ˆË‰ˆÎ‹ˆÏŒ†Î†ÌŽ…ÈŠ€¼‰±†|¡‚x‘{s€tknlb`e]Re`Me^Kf^Kh]Ki\Ij^Hk_Gn^Ew_G[C’YF­ZLÇVPÞRSõQXÿX_ðUSãLEÙ>9Õ60Ù6/Ü90Û9,Ö9(Ó8&Ñ8&Ñ8(Ô8)×7)Ü6*ß4,Ý5,Î0'É5)È9+Æ=-ÄA/Á@-¿<*¾9(Ä8)Ë<.äREÜH<È4(Ì:-È:,Â4&Ê=,Ë<+Ê;*Ê;*Ë:)Ì9)Î8)Ï6(Ó7*Ö8,Ù7,×3)Õ1'Ø1(Þ7.ç<5øDGñ8>í/9ï/:ð0=î.;ë1<ë6?ä5:Ü36Ø22ß:8îEBøIFøDCó?>é:7ç98å97â96á85à85á98á98à87â88å99ç9:é9;ì9<í9<î7;ó6:ò59î68ê88ä;8Ü:5Ó9/Ë7+Æ8*Ã:*Â:*À;*À;*Á<)Á<+Á<)½9$Á?)»:%³5¹:'Á;/Ê:2Ø<=ÿ^gÿPdÿA[ù8Wö6[õ;`ô>dãIe«?Lƒ?>_:2G;/:>08>2F<:R>=N0.S8/VK5ciEx[°pÂ}¡Æš¹}š¹€š¶ƒ©xrŽ^YuETp=\{B_@b†@iCm“Hl”Kk“LiMiMgŒGe‰Cc†Bc†DgŠJiŒLhŒNg‹MiOiMiŽKgŒGgŒFfŽEl’Im•LpœQoRt U-1"-1#,/&,.)//-11/34/45-9;0<>1@B7EHAKMLQRWUUaVWi\Yt^]fdŒpn zx·…ƒÎ‹ßêŽïŽŒíŠ‰ç‡„ßÓ|Ë}ȀƅLjˆÆŠŠÊŒŠÉŒŠÉŒˆÅŒ„¿‹‚·‰€­†|¡€v{p€ujpndbi_Vc]M_aL_aKc^Jg\Jl[In\Ho]Gq]EwaIxX?‡S=£VDÇXOãUSøOTþMSâ><Þ<7Ý84Þ71á6/á6.Ý7+Ú7(Ô7&Ó8$Ó8&Õ8'Ø6)Ý5*à3,Ý5,Ë3(Ä6(Â9)Á<+Â?-Â?-Á<+À8(Ã5'ÜJ=ÚF:ÕA5Îå84â62à72à72à72á85â96ä;8ä;8á77ä88æ8:è8;ë8<ë8<ë8<ì8;ï58î47ì57ç77â:7Ù:4Ï8/Ç7,Â8+¿:+½;+»<+»<+»<)»<+»<)¸9&½@*³9$±6$¶;+µ0'Ã40ìPTÿ[iÿJ`õ:Uð7Vñ@]ïHfçHdÍNa‚89e?6R@2DA09=,57)>6+K9/E-#R=,g]Bˆ_’«t—»{–Áz–¿{”³xœ¸…š´…€šm\uKHb5Nh8[xB_}?cƒ@hŒDl’Gj’Ih’JgLfKd‰Dd‡Cc†DeˆFh‹KkŽNkOjŽNiOiOiMhJgHh’Hl”Ko™Ms¡Vs£Wv¤Y24&04&01)01+12-23.34.46+9;-;>-?A3DF9IJDMONRQWSS]XVd\Zoda~nl”zw¬„‚ÃŒ‰Ö‘㔑ê“뎋≅قÌ|Ã|¿€~½„‚Á†…Á‰ˆÂŠÃ‹ˆ¿‰…¸‡®…}¤…{€vŽyn~rgmmaak^Vi[Pc\J]`K]aJc^Jh[JmZKqZJtZIv[FsWAxR;ŠQ=ªYFÍ[PãTPðFIñ>AÛ2/Ü5/á51ã60ã5.á5+à6)Û8)Ö7$Ó8$Ñ8&Ô9'Ø6)Ü6*à3,Ú6-È6)½8'¼7&½:(¿>+Â?-Ã;+Ä8)Æ4'éUIÓ<1Ì8,ÑB4¾5%À=+À=+À8(Ä8'Å9(Ç:)È9)Ë7)Ì6(Í3'Ò6*Ô3)Õ2)Û4,ã:3é>7ì?9ì=:è45ì59ï6;î5;ê2:æ39ä7=â<@óUVübbÿmjÿidóVQäA<ß63Ý4/ß61Þ71Þ71ß82á85â96å97æ:8å78æ89è8;é9<ë8<ë8<ë8<ì7<î5:î68ê67å97ß<7Ö<4Ì9/Å9,¾9*º;*¶;)µ<)µ<+´=)³;*³<(³:'·@,­8&­8'³;-«+"Ã54ý`gÿTdúG\ð-=@-@C.DG4IK>MNFQPNRRRVUSYX]a_lkius›€}²ˆ†ÇŒŠÓ•’ᔑâÜ‹‡Ó„Ä}º|µ|³~·„º‡„¹‰…·Š„²†¨z›€xs‡znzrfjm_^j[Ti[PjZKfZJb_Lb_Le^Li\Kn[Lr[Kw\K{ZG~UA†R=›RA¶VFÎRHÚG@â88å33Ý1-ß3/â5/ã5.á3,ß3)Ý5(Ü9(Ó8$Ð9$Ï:&Ñ:'Ô8)Ù7*Ý5,Ø7-Ä;+¹:)µ6%·8'½;+Â=.Ç;.Ç7,Ð90õ\TÖ=5É5+ÏA5¸3$·:(¼?+¿:)Ã:*Æ:+È:,Ê;-Ì:-Ï8-Ñ7-Ð3*Ò1)Ö1+Þ71å<7ê>:è;7æ74é75ï;<ðë8>è7=ê7;î7;î79ê7:ä::ß=:Ö=7Ë;2Ã;/º8*µ:*³;*¯<)¯<*¬<(¬;)¬;)ª;(¬=*¦8'§9*ª8-¬/)Ë@CÿhrôM^óH[íDYåH[ÙO^ÉT]·TWœXUdM?OL9LG4JE1FD-?B'=D#>H#KV.\g.==1==3==5;<4;=2;=/?B/@D-CG.FJ3KL:NOAQQIRRHYWJZZN_^\gerqn‰{y¡ƒ€·‡…Čьӊϊ…ǃº~y¯zw¦yv¥{v¬|y®€|®ƒ}©ƒ}£x—|t‹zrvksrffm_\j\Sk[NlZLl[Kk[Ki]Mg^Mi]Mj]Mn]Ms^Mz]MZI“`O›VG§N@¸J=Å@7Ï6.Ø1+Þ1+á51á6/â5.â4-à2)Þ4'Ü6&Ú;(Ñ9$Í;$Ì;&Î;'Ñ:)Õ9*Ù7,Ó9-Á>,´;(°5#²5#»9)Ä<.É;/Ë7-Ù?7ø[TãIAÎ:0Ì@3¸6&¬3 µ<)¼9'¿7'À7'Ã7(Å7)É7*Î7,Ñ7-Ù<3Û:2Þ93å<7ê>:ê=9ç85ã41è96ë<9ì::è8:ì>@øPPÿbcÿppùheâTPÊ=6À1+É40Ö;7ß=:à;7â;5á:2â94á83ã73ä73å55æ66é69é69ê7;ë8<ë8>ê7=è7=é6:ï8<ì89è8:ã;:Ý>:Ó>7É<2À8ÛTXûepîK\ïI]éJ\ÛM[ÉQZ´VV ZRŠ`RPI7HM9NI5H@+;567>O%Lf6lŠTw”\„›e‰šd›f£k”­t˜°|ƒ•mn}\Q`Cg{HiƒFl‹Gm‘Gj“Gf’GbGcŽGhJlMo’Pn“PlMiŽKjJj’Ls›TsUsSržQržOs¢Rw¦Uz«Zv¦Zu¥[s£YRK;RK;RJ=RJ=RJ=RJ=RJ=RK;UNXQ?YR@[TD\UE\UEb[HaZHaYLbYRe][kaiqftuj{zn„|pˆs‹s‰|p„uj{mbre]jc`k`_g_\c_Z^^ZY^YUaZRbZOe[Og[Ki\Kk\Ik\Gm]Fm]Fj^HicMqfTqZJuOB‹WJœ\P£YL¬ZL¥N=¦E4§<,±7(Â8-Ñ80Ü41Ý1-ß6/Þ7.Þ7.Þ7.Þ7.Û7+Ø6)×7)Õ8)Ô8)Ò9)Ò9)Ò9+Ò9+Ô8+Í;,½;+¶>-®9(©1 «2!·9*ÀÔH9Â=,·2#ÝPFØJ@ÔF<ÔD;ÚG?ÞG@àC>à<:à74æ87ì::ì::ç77â64à93Ü=7ÙF>ÏB9Ä:/¼4(·1&¹5)¿;/Ã?3Ã:0É<3Ò?7Ú?:â=;ç;9ì89í9:ç7:å8:å8:å99å97å97å95å95à40á51ä65å76æ89ç9:ç9:ç9;ë;>æ9;ß99Ü=:ÖA=ÍB;ÁA6·?1©:)£<+ =*›<(™:&–:%—8&‘8&A0‹<-‡/#‘/&¼LJämoçloÍVZ½LNµNOªQM¢UO›XO—]R•aTŠjSWZ/:M7FTa)~ŽP›°oŸ¼yœ½x’µs~ah€L\mCYdBT]BHP9?D0:=,@C2<@1:>0]sBgƒHpKo“Kl’Gj’Ii“KgJlPm‘So“Sl“Pm’Mk“Jm–Jm˜IqœLqžMrŸNr¡Pt£Rv§UyªYzª^y¦cm™ZbŽOWN?WN?WN?WN?WN?WN?WN?WN?XO@YPAYPA[RC\SD]TE^UF_VGd[JcZIcYMcYOf[Uj_]nbdpdhreltgpvirvirsfmm`gg[_bXY^[VZZRYVOWTKXTIXTH\VH^WGcZKcZIf[Ig\Hi]Gj^Fk_Gh`IcbMngTv\MSFšVM«VO°RJ·QE¯H9¬C0¬=,±9)¾8,Ë80Õ62Ù40Ý6.Ü8.Ü8.Ü8.Û7-Ú8-Ù7,×7+×7+Õ7+Õ7+Õ7+Ô8+Ô8+Ô8+Î:,¾<.¶>.®9(¦1 §2 ²:)¹>.¾<.Æ:-Ç4*Ë4)Ò;0ÜE:áOBßQCÝOCÛF?Ø@;Ó<5Ò;4Ö=7Ú=8Ü86Ý33ç77ë78î79ë78ç77å97â=9ÛB:ÊA7¿?4¸:,±6'¯5&²8)¸=-¿@1ÅA4Í@6×@7ß=8ã:7é77ï56ñ7:é6:ç6<ç7:æ89æ87å95å95ã:5â92ã:3ã:5ä;6ä;8ä;8å99å99ä:;ã;;ß<=Ù?=ÐA;Ä?6·=2¬;-¥;+ =*œ=+—<)–;(’:&“8%Œ:%€9'€8)‰5*<5¿QP×eeÑ^a·MM¬NL¤TMYP˜\Q—^S—^S˜_VŒfQ`_/Sg*^r3zO™¯n¥¾|™²pˆ bj‚HauBTe;JX7FP7?H59?158-:^tEgƒHqMp”Ln’Hk”Hk“Lh‘Km‘Qn’Tm”Sm”Qk“Lk”Hl—Hm˜HpJpJp Ls¢Qu¦Tx©Xx©Xx¨^m—Xb‹QY‚H]TE]TE]TE]TE]TE]TE]TE]TE[RC\SD]TE^UF_VG`WHaXIaXGe]Je]Hd[Jd[Le[Qf[Uh]Yh][i]]j^^k__k__i^\f[YbWS_VQZVMWTKUQHRNCQMBSOCWQCXRB^WG^WEaYFc[Fg\Hi^Hk`JhbLbaMngUy_PˆXN¢[U±VQ²IE¸E@¹@7¸>1·;/¸8+¼8+Ã9,É;/Ñ:/Ù8.Û7-Û7-Û9.Ú8-Ù7,Ù7,×7+×7+Õ7+Õ7+Ô8+Ô8+Ô8+Ò9+Í;,À>0¶>.­:(£2 £3ª:&³>,¹>.Ä?0Ä8+Å2(È4*Ð<0ØF9ÜM?âNDÙ:6Ø43Ô20Ö42Û97á=<æ<<é;<í9<î5:ë27é26è58å99á<:Ù@:¾8-µ:+±6'®4%­5%°8(µ<+»=.ÈD5ÏC6ÖB8Ü=7â94è64í55ï79ê69é69é69ç77ç77æ95å95å:3ã:3ä;4ä;6ã<6ã;8â:9á99Þ88Ý9:Ü<<Ú@>ÓB=È?9¹:1­7+¥7(¡;,<+™<+”;)“:(9&7%Š9&z6#y6%ˆ9, F=¹SOÀWT¸PO«IF¢MHœSL™YP—^S—aW—aW˜_V‹ePsrFzV“¦n¤¹€«À‡ž³{|[[oaXIaXIaXIaXIaXIaXIaXIaXI_VG`WH`WHaXIbYJcZKd[Ld[Je]Hf^Gf^Ig_Lg^Of\Pf\Rf\Sh]Wh]Wh]Wh^Ug]Te[QdZPc[N]YMZVJVRFRNBPL@PM>TN@UO?WQAYTA[VC]XDaZGd]Jf_LfaMdcQleUv\OŠ[Q©b\¸ZX¶FD¹<:Ã<8Æ;6Ä:0Â8-½8)¼:*¾?.Ç?/Ó9-Ù7,Ú8-Ù9-Ú8-Ø8,Ø8,Õ7+Õ7+Ô8+Ô8+Ô8+Ô8+Ô8+Ò9+Í;,Á?1¶>.¬9'¢3 3¢8"¬=)µ@.¼?-¿:+Ã7*Å5*Ë7+Î:.Îî7<ì38é06æ25å58á77Ú65Î61·5(¯7'®6&¬7&¬7&®9(²:)µ:*ÃA1ÊB4ÔA7Ü?8â;5æ95ë76î87í68ë78ë78ê86ê86è94ç:4æ;4â92á:2ß:4à;7Þ:8Ü:8Û97Ù99Ö<:Õ@<ÒC=ÊA;»;2¯6+¤6'ž7(œ;*˜;)”;)’;(:&8$Œ7#‡9%€=*v5#5'™E:ªPH¬MG©LG¦QLPJ˜UL”ZO”^R•aV•aV—aWgT‰…_™©x­½Ž¦¸ˆ¡ts†YN`8/A->3B%:F.=F3;A3:=2:=4<=599-?@2<>39<1<@29B/?L2PbNK:NK:NK:PMTQ@VS@XWC[ZF]\H^]Kb`Qf^QmWJ†[R¬ic¾c`ÁMMÈBCÐ;=Ô89Ó84Ì70Á9+º=)µC+¼B+Î;+×7)Ø8*×:+Ù9+Ö9*Ö9*Ô8)Ô8)Ô8)Ô8)Ò9)Ò9)Ò9)Ò9)Í;,Á?1¶>0«:(¡6"š4›7 £=&¯B-³;*º;,Â:,Ç9-Ë8.Î:0Ð<0Ù:4é9<ì4<æ39ã28â38á48â38â25é6<é49ç4:ç7:ã9<Û76Ð21À0(´6(­:(­:(«:(«:(«:(¬9&¯7&¸:+Á;/Î>3Ø?7à=8ä;8è96ì87î66î66î66í74ê84è:3ç:3ä<3á:2ß;2ß<5Ü=7Û=:Ù><×=;Ô>=Ï@<ËB<ÅB:¹=5­7-£5(ž7(š:*–;)“<)‘;*:(Š9&‰8%ˆ7$ƒ8%ƒ@-u4"{3%“G:¤QI¡NFžNG¡WN˜UL’XLZN\N]R”`U—aWhW‰f˜¥z©€Žj]kHDS42@&$2-:&0;*5=.9?3?1;=28;0;?18A.>K1PbÜ87Ô70Ç;.¼?+±C*µA(Ê;*Ô7(Õ8)Õ9*Ö9*Õ9*Õ9*Ô8)Ô8)Ò9)Ò9)Ò9)Ò9)Ò9)Ò9)Í;,Á?1µ=/«<)¢9$™6•5›;"§A*²B.¹@/¿;,Ã7*Å2(Ë4+Ò;0ß=8ê5:î3<ë6=é8>ç:>ä;>ã:=â9<ß58á7:â9>á=>Û=>Ñ96Ã2/¶0'¯9+«>*«>*©>*ª=)©<(©:'«8%¯6%¹7)Å;0Ð=3Ù<5ß<7ä;8è;7î87ï75ï75î85ë:4é;4ç<4ä=4â>5à?7ÞA:ÚA;ÙA>ÕA?Ñ@=ÍB?Ã?:»@8³=3ª8-¡5(›5'˜8(•<*‘<(<)Š<(ˆ:&†9'„7%ƒ6$6%}:)t3!~9*—OA£YNœRG•OE˜VJ•YN[MŽZMŒ[MŽ\Q“_T™`W‘gW~xXyƒ^r|ZU`B;E,/;%0;*0<.3=24<16<2?1:<17:/:>07@-=J0Oa;bxIk‡Lu”Qu™Qt˜NqšNršSpšRršQsœPr›Op™Kn™Jp›LsžOv¡Ry¥X{§Zz¨]x¦]qŸWg”O]ŠEX‚B`‡NY€ISzCg^Og^Og^Og^Og^Og^Og^Og^Og^Og^Og^Oh_Ph_Ph_Ph_Pi`OjaPjbOjbOjbOi`Oi`OiaNiaNiaNh`Kh`Kh`Ih`IhaGhaGhaGf_Le^Kb[I\WDWR?PM:LI8IH6IH6GH6GJ9GK:HL;IMì;Aê@CæAEàBCÜ@AÙ??Í12Ð66Ó:<Ñ=;É;9¾71µ4.­4)ª<-¥>+¥>+¥@,¥>+¤>(¦;'©:'ª7%²7'¼8+Å8.Ì70Ô94Ü=9æ>;é:7ì95ì95ë:4é;4è;4å=4â>4àB7ÝC9ÚC<ÕB;ÏA=Ê?<Ç=;¿>9±<3©:/¢8+œ6(˜7'”8)‘:):(‹=)‰<*‡<)ƒ:'‚9(€7&6%}6$x3#x5%…B2˜UEWK”PCPD•ZL“YMZN\Q\Q’[T•\U˜[VŽbUkbEV`=JS4=G,6?*2=,4>35?66=68?8=B;CF=EG/;9*78*=>0:<17:/:>06?,=J0N`:awHk‡Lu”Qu™Qt˜Nr›OršSpšPq›OrNqœMp›LošKrNu¡Ty¥X«`~©az¥]qœUf‘L_‰G]‡E^ˆIb‰PY€ISzCh_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Pg^Oh_Ph_Ph_Ph_Ph_Pi`Qi`QmdUlcTjaRi`Qh_Pg^Og^Mh`MiaNiaLiaLiaLh`Ih`IhaGh`IgaKf_Le^Kb[H\WDUR?PMSQDSPAXLÂYSÙROàDEà::Ü75Õ;3Ê>/º=)µ8"É:)Ï8'Ð9(Ò;*Ò;*Ò;*Ò;*Ò;*Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)Í;,Á;0¶:.­<,§>+™9#3“7Ÿ?'£9#°;)À>0Æ<1Ì8.Ð7/Ù<5ã?=ì=Bî?DéCEâDCØ@?Ê;7À50»1.¹/,¼51¾:6»<6³:2ª8.¤8,¡:+¡=-Ÿ>+ ?,¡@-¡@-¡A+£>*¦=*©;*­:(²7(¹5)¿5+É90Ô?9àC>ä=7è;5è;5ç<4å<5ä=4á>5Þ@5ÜD9ØD:ÒC;ÊA9Ä?:¼;6¸85°93¢7-™8(•5'“6'‘:)<*‹:)…8&ˆ=*…<+ƒ<*€<)~:'|8%{6&{6&y1#€8*ŒG8–SC’PB‹L=RE™_S‘WL’YN”[R–]T–]V—\V–YTŒ^QaX;EM(6@8A&>G26BE*;:&78(=>09;069.:>06?,F7GK=IK=AE4KJ6\Q;aE/ƒJ9Àj]Üg`ãUSäFEåA@àA=Õ>5É=0Æ=-Æ4%Ë5&Ì6'Í7(Í7(Î8)Ñ;,Ó=.Ò<-Ò<-Ò<-Ò<-Ñ;,Ñ;,Ñ;,Î<-»2(¶7.±;/¨:)š7"”5•7œ9"®A-³;+º6)Á4*Í6/×<7âC?êHEèDEèEHÝCCÉ:6»61´80®8.©4+«9/©9.¤8. 8-›9,–:+“<+’<+–=+˜=*™>+š?,›@-A, A-£@-¢;*¥:(«7(°6)¶6+¾8-Ä;3Ì<4Ú=6à=6â?8âA7âA9ÞB6Ú@6×@5ØH=ÒE;ÇA8»;2²5/ª3-¦1*Ÿ2+™9-’;*‘9+:*‹:)ˆ;)‡;+…<+€9'}8(|9(|9(|9({8'y6&x3$w- ‹A4—OC“MAŽL@‘QE“UJŽRG˜\R˜\R‘UMTL—ZU•XS”WT“gZ]T5IQ*AK(BK,>H/7@+2=-4?14<1HPCZ^PW[JMO:DF.AA'==%:;)>?1;=2:=2;?14=*;H.PbF7>F7=E6@F8>E5>F1HL5MI0U?'Q:¼sbËcXà_ZëUTçGGâ@>àA=Ø?9Î:0Í9+Î=,Ï=.Ï>-Ï;-Î;+Í9+Í:*Î:,Ð:+Ð:,Ð:+Ð:,Ð:+Ð:,Í;.É?5ÅB:¼B7®=/Ÿ6#–1–1›2¨5#´6(Ã;/ÑA8ÞE?æIDéJFêKHÞCAÛEDÐB>¼<3¯9/©=0¥?1Ÿ=0Ÿ?1œ>2—>0”>/=/Š>.‡@.ˆ?,Ž=*‘;*’<+“=,”?+•>+—>,™>,Ÿ@.¡=-¤:,¨8,¬8+±8-¶:0¼9/Ê<2Ð<2Ó?5ÕA7×C9ÖC9ÔD9ÑE8ÊB6ÃA4¹=3°:0©6/¤5.Ÿ4,™7,’:.Œ=,Š;,ˆ;+†:*„;*ƒ<*<,~;*|;){9)y:)x9(w8'u6'w4$€4'D7˜NC‘K?ŒJ>QD’TIRG“SJ˜XO˜UO—VPœ]X”WRŽSOŠcT]W5Xc9_jBZfBIT66C)4@*0:<19<1<@25>+;H.PbMKD63Å?3ÅA4ÃA3ÁA4¶;,²:,ª8-£7+ž6+›6,˜7.”:/;/ˆ<,‡;-„;,‚:+€;+€;+<,};+z;*z;,w9*v8)u7(t6)v4&ˆ;1”F<–NBŽJ=ˆHEI0?C(=@#:<$89';<.8:/9<1=A36?,MK4Ñ>4Ò>4Ò>4Ó?5Ó?5Ó?5Ó>7Ó?;ÑB>ËD>ÆF=ÂF<ÃI>ÇM@ÎPDÙSHÝPGâMGäIEäGBâC?àA=ÛB=ÕFBÉD?º?7«=0Ÿ>.šC0•G3”I6F4ŒE3ˆC3…B1€A0}@.zA.|?-‚:,†8,…9+†:,†:,‡;-‡;+ˆ;+‰:+‹:)Ž8)8*•9,™;/=/¢<0ª:/­8.¯9/°:.°:.°:,¯9+®8*¨7)¥7(ž6)›6*•7+’8-‘9/Ž<0ˆ<.…<-ƒ;,9*:*~9*}:*};+|:,z;,y;,w9*s8*q6(r7)u5)ŒD8’H=‘K?ŠH:‡I<‹OD“TK—TL–QL›TP˜QO”SO–\X_Xh^—~j””p…’fu‚WYh?CR+?O*P`B)=A(;='78(:;-79.9<1=A37@-NKB1=I1?G/LG1S>+g=-•ZL­_Sœ>4ž3+¶?9ØXUóigödeëRUæJNèNPÙIAÓF<Í@6Ë>4Î@6ÒD:ÕG=×G>ÚJAÚJAÝJBÝJBÞKCÞKCàKDàKEëSRèTTãSRÜROØSLØSLÛULàUNàLHáIFãEBâC@äB@âC@äEBàFDÙJFÊE@¹>7¬=2¡?2˜B1’E3G4ŒE3ˆC3‡B3ƒ@0?1~?0z?/|>/€:.ƒ9.ƒ9.ƒ9.ƒ;-ƒ;-ƒ;-ƒ;-9*‚9*…9+‡:*‰:+;-<.“;/›;/ž9-Ÿ9- :,¡9,¢8+¢8*¢8*Ÿ8)œ8)˜8(”8)9*Œ:,‰:-‡;-„:-‚:,9+€8*}8)}7+|8+{9+z8,y9-x:-v8+q5*o5)q7+t9+ŒH;I<‰I=„I;…K?ŒRF“WM˜XO˜QMœUQ˜RP“VQ’`YˆbWƒg[†zdnrQZi@JY0AR(IZ0Wi?dvNj|VXiEL[:?L.:D)C-B47@-;H.L^8_uFi…Jt“Pt˜Pt˜Nr›Os›TpœQnMmžLp¡Pw¨Y|ªaz¨`rXi“QZƒA\„EaˆIeŒMgŽMgŽKhJfŠLc†PY{IRtBi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkaUlbYlbYlbYlbVlbVlcRlcRldQldQldQlcRlcTlbVlbXlbXlbXocUnbRkbQlcRlcRkbQg`Pd]M^WGYSCSM?MJ;KH9GE6EB3?B/;H.?H-OC-a=-ƒE:«XR´NJž,+²:9¹=;ÓSRòpnþvvñehëX^ð^_ãUQÚPFÔG@ÐC:ÑD=ÔG>ÖGAÖG?ÙHCÚJBÜHDÝJCÞJFÞKDàKGàKGâHHáGIÜHHÙGGÖHD×HDØGBÛFBàBAäABæBAèBBçCBäB@ßA>ÛA?ÛJGÊC?¹<6®>3¢@3˜A0A0C3ŠA2ˆ@1‡?1…=1‚<0€<1=1=1;1;1ƒ:3;1;1€.™9)–9(“:*:+Š;,‡;+„;,‚:+‚:,9+7)~6({5){5){5)z6)x6*x8,w9,s8*p4)o5)r:-v<0‹M@‰K<„J<‚M=…QC‹VH’XM—WN“NI™TO—VR•\Ue\{^PfVF`^GEO->N)?O(J\2_rEk~QexKXj@M_7@Q-6E&7D*=F1=D4:>07;-8:,:;-68-8;0>B47@-9F,I[5[qBeFr‘Ns—Os—Mr›Os›TpœQmœLo Os¤Ux¨\z¨`s [i“Q`ŠHYB^†GeŒMgŽMfJeGgŒGhŒLa„NXzHQsAi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkbSlbXlbVlbVlcRlcRldOldOldMldMldMldOldQlcRlcTlbVlbVocUmaSkbSlcTmdUlcTi`Qf_Ob[K^WGXQARLÐB>Í@9ÒC?ÒC=ÔC@ÕD?×CAØD@ÙECÚDCÝADÝADÞDFÝGHßIHàJIãIIåGHçACêADìBEìBEçAAâ@>Û=:Õ=:ÚFFÉ=<¹83°;2¦@4˜?1‘>0@1ŠG]/AV-7H$1@!6B*=F5PK8MH5ID1DC.@F*DD([B,ˆTG¯\X«>A¬/3ÎINÆ?EÀ;>»;<ÄFGØZ[ãefÛY[ÌGHÑJGÐEBÍB?ÐB>ÔFBÔFBÐB>É>7ÏD=ÏD=ÒD@ÔEAÖEBÙECÚDEÝDFÞ?Cß@DÞBEßEEáGGàFFàBCá>?èBDé@Cè>Aç=>ä>>ãA?áC@ßECÖBBÅ98¶50°;4¦?6š>3=/?2ˆ)=C5ã?>â@=â@=ÞC?ÓB?Å>:¶93ª70Ÿ:0—=2Ž>3†>2ƒ?2?3=2;3„93†93ˆ81ˆ92…;0„<.„<.ƒ;-;/€:.€:.€:.~:-~:-~:-~:-};/};/};/};/}90}90~80~8.€7.€7.€7.~8,€8,~8,}9,|8-{9-z8,x8,x8,x8.x8.w7-v8-v6,t6+s5*q5+m1'r6,n4)m3(o6+m4)q8-I=…SH…SJ†RGˆRH‹PHQJ”QK•RL“TMTK‰[N‚cQo_HYU:MV7O_;j~YbxQYoHUjCRg@Mb;IY5CR17D&4>#2:#6;'<>0@B5@@6<>358-39-4:.7:/9=/;?.=B,%Q?)kP=XG„NBˆE=“D?±WV¸TT»QQÀPOÀNMÁMMÂLJÃKJÐTTÈHGÂ=>Ä=:ÐB@ÓEAÏB;Ç>4ÊD9ÉE9ËF=ÍG>ÔFBØDDÜAEÝAEáBFáCDáCDâDEâDCáFDáFDáFDàEAßD@àB?ßA>àA=àA=àA=ÞC?ÔE?ÈC<º>6¬:0 90”:/Š<0‚<0€A2~@3~>4<3ƒ:3†91ˆ81‰90‡;.…<-„;,„;,ƒ;-‚:,‚:,‚:,9-9-9-9-~:/~:/~:/~:/}90}90}90}90}90}90|90|90|90z:0z:0y9/y9/y9/w9.w9.w8/w8/t8.s7-r6,r6,p6+p6+k1&q7,m4)l3(o6+l3(p7,~H>„RI…SLˆQJ‹PJQL”PM•QN”SOŠOG…SH€[K{ePsiPhkLfqQgxT^tMXnGPf?La:K_:K\:GV7CP4>2;=04:03;05;16<0:A,>D*Q[9^mDkRpŒRp“Sq™RsSsžVxŸ^|¢exžak‘T`†I]ƒF]ƒF\‚E`†Ia‡Jc‰Le‹NdŠMbˆK`†I^„I]LRtBIk9i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTqdTo_Pm]Pm_RqeYog\ldYhbVfbWpl`{xi~{jyizubpiVe`JTT(MB.S@/U8(]7*l=3n70u91~;5‡@:’IB›PJ¥XP­ZR»^YºSN·GE¼B?ÈDBÑFCÓD@Ï@:ÐA;ÐC<ÒE>ÔG@ÖGCÚFFÛEFÞDFßCDßCDßCDßCDàDEßEEßECßECÞDBÞDBÜD?ÛC>ÜC=ÜC=ÜC=ÛC>ÖE@ÎE?ÃB<³>5¢:1”8-ˆ9,ƒ;-‚@2@1~>2=1ƒ:1†91‡81ˆ:0‡;.„;,„;,„;,‚:,‚:,€:.€:.9-9-~:/~:/~:/~:/~:/~:/}90}90}90}90|90{8/{8/{8/{;1{;1z:0y;0x:/x:/x:/x:/t8.t8.s7-s7-r6,q5+o5*o5*j1&o6+m4)k2'l6*i3'm7+}G=‡PI‡PI‹PJŽQL‘RM’SN”UP‘VPŒWO‡[P~^OtbNoiQorUlwYfwUQeBK_:EY6DU3EV6GV9GT8ER8?I0*7;*:<.<>0;=/9;.6<25=26<26<0:0=@-=C)MW5Zi@f|MlˆNn‘Qq™RuŸUtŸWz¡`w`n”Wc‰L\‚E\‚E\‚EZ€C_…Ha‡JbˆKdŠMc‰La‡J_…H]ƒH[}JPr@Gi7i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTrdWoaTm_Rk_SkaWlcZle[jf]jf]xtiˆ„x‘•’Œ~‰‚r}zg`cNOT>DG2FE1HC0F=,L<,VC4P9+R6*V4*Y5)\6+a9/e=1m=1ŠKBSJ®UO¶NK¼FDÆABÒDCØFFÔ@>ÕA?ÖB>ÖE@ÙECÚFDÛEDÝEDÞDDßCDßCDÞDDÞDDÝEDÝEBÞFCÛFBÚEAÙD>ØE>×D<×D<ÙD=ØE>ÔD<ÓF?ÉF>ºA8§;1˜8,Œ9+…<-ƒ@0@1~?0=/ƒ:1„:/‡9/ˆ:.„:-„;,„;,ƒ:+‚:,‚:,9-9-9-9-~:/~:/~:/~:/~:/~:/}90|90}90{8/{8/{8/{8/x8.{;1y;0y;0y;0x:/x:/x:/v:/s7-s7-s7-r6,q5+o5*o5*m4)j1&o6+l3(h2&k5)h2&l6*|F<ŠOGŒOJPKRMSN‘VPWPŒZQ‰]R…aUy_PiZGd_IdhO\fKN]@EU8AQ4=M0G2:A/9=,9=.9=.8<-7;-7=36=56;46<2:<1;=/bxIj†Ln‘Qs›Tw¡Wx¢Z{¢ar˜[e‹N\‚EZ€C\‚E\‚EZ€C_…H`†Ia‡JbˆKa‡J`†I^„G]ƒHY{HNp>Eg5haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTrfXth\sg[mcYjaXle]snhzwp~w† ”¨¥œ«§œ¨¤™£‘™–‡z{kcfSOR?GJ7EH5BE2BE2EH5KL0A9,A7+@6*F4(S5*qB8ŒPHŸPK¯IG¿GIÌEIÓBEÖ@BÙ@BÚBAÛCBÚEAÚEAÜDAÜDAÞDDÞDFÞDFÞDFÞDDÝEDÝEDÚDCÚFB×FAÖF>ÔE=ÔE=ÓF=ÔE=ÕF>ÔA:ÓC;ÎE=ÁB9®>3ž9-‘;.Š.€=-;/„:-†:-‡;.„:-ƒ;-‚:,‚:,‚:,9+9-9-~:/~:/~:/~:/}:1}:1}:1}:1|91z:1|91y90y90x8/x8/v7.y:1y:1x90v:0v:0u9/u9/t:/r7/q6.q6.p5-o4,n3+n3+m4+j1(m7-j4*h2(j4*f2'j6+}D;NGNHQJTLUOŽWPŠYRƒ[Q{YMv\OkZJ]UBYXDY^HOYA?K3:H/7E.4B+5A+8D.=I3CL7EN9BK6?H5.5<,4:,5<45<56;56;49;0:-;@)GP1Ra:`vGi…Ko’RuVy£Yy£[xŸ`n‘W`ƒIZ}C[~D^G^G]€F`ƒIa„Jb…Kb…Ka„J`ƒI_‚H^IW|ILp@Bf6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTkaUndZpf\lcZkd\rmg„|‘Œ§£ µ±®ÄÁ¼ÉÆÁÉľÅÀºÀ¹±¹²¨¤œˆ‚rfcTPQ?FI8>E3;D1:F28E38E38C2:B34(P:/e?6€EA¡PO¿X[ÊQVÊCIÕFJ×EFÚFFÛEDÝEBÞDBÝD?ÞCAÞDDÞDFÞDFÞDFÜDCÜDCÜDCÚDCÙEA×FAÕF@ÓF=ÒE<ÐF<ÑG=ÔE=Ô?8Õ@9ÐC:ÆC9¶A7¥=0–=/Œ=.†>/‚?/>.€=-<-ƒ;-„:-…;.‚:,‚:,‚:,‚:,9+:+9-~8,~:/~:/~:/~:/}:1}:1}:1}:1z:1z:1y90y90x8/v7.v7.t8.w8/u9/u9/s9.t8.s9.r8-r8-q6.q6.p5-o4,n3+m4+l3*j4*h2(l6,i3)f2'h4)e1&i5*{B9ŽMG’MH‘PJTLVO‡XNYO|\Qs\Nk[L`WFVSBPSBJQ?@I64@,3<+2;*09(09(2;*5>-9B1G4:F2:C25@/3>-1<,3:33954954928919;.;>-;@*CL/O^7]sDi„Mp“SwŸYy£Yw¡Yq˜Yf‰OZ}CX{A\E]€F]€F^G`ƒI`ƒI`ƒI`ƒI`ƒI_‚H^G]€JV{HJn@Ae7haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlbVj`VjaXkdZkg^upjˆ…€Ÿžš°°®ÃÂÀÓÒÐâáßçæäçãàãÞÚÞÖÓÙÎÈμ²¸¥——‡zym]_YIKL:@E1;D/>J6=H7=F5;C4;>5:;3983880==3C<2N71a84ˆHH¯]_Å`dÊWZÍQSÓNO×MKÛKJÞHGáFDãDAâBBßCDÞDFÞDFÝCEÝCEÜBDÜBBÛCBÚDCØD@ÕD?ÓF?ÒE<ÐF<ÐG=ÔE=Ù@:Ù@:ÑB:ÈC:¼C:¬@4™;/Œ9+‰=/ƒ>.>-€=,<,ƒ;,ƒ;,„<-‚:,‚:,‚:,9+9-9-~8.}9.~:/~:/}:1}:1}:1}:1}:1}:1z:1y:1x90x90w8/t8.s7-r8-t8.s9.r8-q8-r8-p7,p7,p7,o6-o6-n5,n5,m4+l3*k2)i3)g1'k7,h4)e1&h4)b0%f4)zA8MG’MH‘PJŽULˆXNYOxZOr\Nk^N^WGRPAKN=CJ:9B12:+08)17+17-06,/5+/5)08+2:+4<-9D4;F5=H7-.800621622717829;0:<.:?)?H+KY5[qChƒLq“Vwž[w¡YsœVgP^IUx@WzB[~F[~F[~F]€H_‚J_‚J_‚J_‚J^I^I]€H]€JUvIJk@@a6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlbVpg^ng_lgatqj‡„¡ œ¼¼ºÎÐÏÏÏÏàààòòòúøùû÷ö÷óðñìéðâßèÐÆÝÁµÁ«¢‘}ub^\GKM7CH2AI2AI4@G5BD7AA7B=9C97?:69<5>?7B71J.+d66QR³giÆnmÀ\\ÇZWÐVS×QNÜLKâHHæCDåBCßCFÝDFÝDFÝCEÝCEÜBDÜBBÜBBÜDCÙCB×C?ÓD>ÒE>ÐF<ÐF<ÔE=ÜC=ÛA9ÒB:ÊD;¿E:°A6œ:-‹5&ŠD69A208+/7*6<247058157247025.06,08-19,6A3:E5=J9>K9-,6..400511606718:/:<.:?+WzB[~FY|DY|D\G_‚J_‚J^I^I^I]€H]€H]LStIHhA?]7icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSjcSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUldWibZgd]vsn“’Ž¯¯­ÄÆÅÚÜÛêîïóôöö÷ùüüþÿÿÿÿÿýÿûúü÷ôýòì÷áÔòØÇàʵƶŸª ‡ˆ„ibbFEH-DH/CG0FE1GD5F<3C60F42H:9>=9>?:B:7I75cGF’jjÅ“’è­©Ò‹‡ÇtnÀ]XÆSPÕONßJLçFKéFKßEGßIKÚDFÔ;>Ø>@áGIàDGÖ:=Ú@@Ú@@ÙA@ÖB>ÔC>ÑB<ÐA;ÑA9ÞC>ÛA9Ó@9ÊA9¾B8°@5Ÿ:.8*Œ=0‡>/ƒ>.>-€=,<+=*<,:+9-9-~8,~8.|8-|8-|8-|90|90|90|90z:1z:1z:1z:1y=5w<4w;3u:2t91q8/p7.p7.o6-m7-m7-l8-m7-l8-m7-m7-i2+m6/p92o81k4-g2*g2*h3+e0(i7.d2)]-#`0&_/%b2(s>6ŒOJPKˆQJRJ}YMv_QfYITN>DE5>E5:C25@04&DR1WlCh‚Rs”]wž_r›Wk”R[~DXyDTu@Tu@WxCZ{F[|GZ{F^JbƒNbƒN^J\}H_€K`L^~MTsJFd@2I:3L95K<9?:7BA?MHE]RPyjg£Ž‹Î²®èÅ¿ÿ×Ñ쳪͂|Àc^ÊVVØRSßHMÚADÖDEÕEEØHHÜJKÛEFÕ<>Ö<>ÛACÙ??Ù??ÙA@×A@ÖB>ÓB=ÒA<Ó@9ÜA<Û@;Ó@9ËB:¿C;±A6 ;1’8-Œ=0‡>/ƒ>.>-€=,<+<,<,:+9-9-~8,}9.|8-|8-|8-|90|90|90|90z:1{;2{;2z;2w<4u<3u:2s:1r90n8.o6-m7-m7-l8-l8-l8-l8-j8-l8-l8-k6.n70o81n91l7/i4,g2*e3*c1(d4*_/%^.$b2(^.$`0&p>5JE‡RL‡XR~XOrVKdRDQJ:>?/:A16A05@03>04<14<15;17:379477577557246116//6./7,.9+1<.4A08E49H58G44E24B1.8/.5..3--2+23+46+8:-9=,7?(DQ3WlEh‚Ut•`wbp˜YgPY|DWxCTu@Tu@VwBYzEYzEYzE[|G_€K_€K\}H[|G^J^J^{MSnKF_A9R4icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUneVneVlfZed_y{x—™˜²¶·ÍÑÒäéìôùüúÿÿûÿÿüÿÿýþÿþþþÿþüÿÿûÿÿúÿÿôþüçúùÝïðÑáåÄÒØ´¼ÄŸ ¨ƒ‡‘l`gEQX7DG,DC.JD4LD7KA8I>:C;9SJKia_wvœ’¾³¯ÙÎÈêÜÓþèÝÿóéÿäÛð©£ÃecµBEÇDIÚRVÛUTÑMKÊDAÍCAÔFE×EFØDDÙCDÖ=?×>@Ø@?Ö@?ÖB@ÓB?ÓB=ÔA:Ù@:Ù@:ÒB:ËE<ÀD<²B7¡<2“9.Ž<0‰=0ƒ>/>.=-~<,€=-€=-9-9-~:/}9.}9.|8-{8/{8/}:1}:1{;2{;2{;2{;2z;4x<4t;2q;1r90o9/n8.l8-l6,k7,l8-j8-j8-j8-j8-i9-j8-j8-n91m80m80m80m80i7.f4+c1(d2)a1']-#_0&c4*\-#_0&sD<}PJVP~YQpTI^J?OC7?<-46(2;*0;+1<.2=/4<14<15;17:379479668357257227007/08-.9+0;-2?.6C27E48G48G49F54>33:2/4-,2(/0(13(57*6:)6>'DQ5YmJk„Zw—fwœfl“Z_‡KWxCWuCTr@Tr@VtBXvDYwEYwEZxF]{I_}K]{I]{I_}K^|JZwKPgJAW@3I2icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUneVneVneVneVmg[jkfƒ‡ˆ£§¨¹¾ÁÐÕØåíïóûýõýÿûÿÿûÿÿüÿÿüþûýþùþýøÿþ÷ÿÿóøýæôýÞî÷ØæòÎÝéÃÎÚ´¶Á™¡«†€‡efmLMQ6FH0HJ5KI:HD9D@7OGDj`_‹€¤š™·¯¬ËÆÂÞÛÔêæÝúñèÿûñÿ÷íÿÝÕû¶±åŽÊcd°@?ÃPKÉTMÉPHÃF@ÈGBÔMJÖKHÐ@?Ò>>Ó??Õ?>ÕA?ÕA?ÓB?ÓB=ÓB=Ö>9Õ@:ÒC=ÌE?ÀE>²A9¢=5•;2Ž<1‰=0ƒ>/>.=/~<,€=-€=-9-9-~:/}9.}9.|8-{8/{8/~;2~;2|<3{;2{;2{;2z;4x<4r90o9/o9/m9.l8-k7,j6+h6+i7,i7,i7,h8,h8,h8,h8,h8,m;2l7/j5-i7.j8/j8/f4+a1'e5+a2(].$a2(b3)Y* a2(yNE\VvWRiNGWC:I<3@:.:;-8<.08)/:*3;.4Ð@?ÑA@ÒC?ÑC?ÑC?ÒC=Ó?;ÒA<ÐE@ÉE@½C>¯@9 >5•=3Ž<1‰<2ƒ=1=0=1~<.=/=/~:/~:/~:/}9.|90{8/{8/{8/|<3|<3|<3{;2z;4y:3y:3w;3n70m80l7/l7/k6.h6-h6-h6-i7.h8.h8.g8.g8.g8.g8.h8.k92h6/f4-g5.i70h70e4-b1*c2+b3+_0(]1(]1(V*!b6-{ULtYRaNHN?8A7.=6,;9-9;.9<139-3;.5;/6<06<07:/58-47.69049238139/39/2:/19.19,.9+.9+/:,0;-3>.6C2:E5Qn>Qn>Qn>Qn>Qn>Sp@Sp@WtD[xH]zJ]zJ_|L_|LZwGRlECU?6D7(6)gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUneVneVofWpgXpgXng]lnmz‚…“š «µ·ÄÎÐÜæèí÷ùôþÿõþýöÿüúÿúûÿùûþóøúíõöèñôãôýêôýèôüåóùßòöÛéìÍØ×¹ÅÄ¥±°’ŽregOMP;GK:FM=GOBKQG{{sŸš”ž¸ØÎÌßÓÓçÛÛóëéü÷ôðïêüüôÿÿöÿýóÿùïÿóêÿçÞÿ×ËØ“ƒ¸eS£J:´TF½WIµF;·@8ÈKEÇC>ÊC?ÌB?ÎC@ÎC>ÎC>ÍD>ÍB=ÑB<ÒC?ÎDAÅD?¸A=ª=8ž;5•<4Ž;3‰<2ƒ=3=2=1~<0=1=/~:/~:/~:/}9.|90{8/{8/{8/|<3{;2{;2z:1y:3x92w81u91n70l7/l7/j8/i7.i7.h6-g7-g7-g7-f7-f7-f7-f7-f7-f7-h70h6/g5.g5.g6/h70g6/f5.a2*e6.^2)\0'`4+a5,i=4uSJXG@E>6<5/95,;8/8:/57,36+69.5;/7:/69.69.58-57,36+28,19,28.19,19.19,19,19,.9+.9+.9+/:,0;+3>.6A17B2ex\umt’lf‰_RwKBh9KkVsCZwG]zJ^{K_|L_|LVsCNg@ÉD=ÈC<ÉB<ÑC?ÐE@ÌEAÂC=³=9¦;5œ;5•<6Œ<3‡=4…<5=4<3~<0=1=1~:/~:/~:/}9.|90{8/{8/{8/{;2{;2y:3x92w81v70v70s7/n70j8/j8/j8/j8/h8.h8.h8.g7-f7-f7-f7-d8-d8-d8-f7-g6/h70i81i81h70i81j;3l=5g80k<4b6-a5,oC:xLCtI@nMDC9056.45/8918;247.14+25,58-58-57,46+46+46+46)37)/7(.9)08+.9).9+.9)08)08)19*08)08+/7*08+19,3;.4<-9B1:C0;B0:A1:<.68*24&/3$29'IU?cu[m„gf„bWyTInE?d8Hg;Li;Nk=Nk=Li;Li;Mj
    UrDYvH[xJ]zL^{M\yKQn@G_;6B4+4/#)%gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSjcSjbUlbVlbVmcWmdUmdUmdUleUmfVngWogZnh\oh^mjekormtzƒŠ¥®³ÃÌÑÕßáæîñôüþôýú÷ýùùþ÷úÿôüÿòüÿñüÿîýþðûøïþúñÿùïÿúíÿùéÿòßïàËÝηÁ²›¢—|ubb_NXZL]cWmwn|†}¦¬¢¾ÀµÚÕÏîäâüîîÿôôÿô÷þôõÿùùûúøûýøüÿúøÿõôüñ÷ýñÿÿñÿùèÿôãÿÌ»½p›QD©SFµSH²C:ÀJ@ÄH@ÇG>ÉF>ÈE=ÇD<ÆC;ÆC;ÍG>ÌG>ÇG>¼C;­>5Ÿ:2—:3‘>6Š=5†=4ƒ=5=4€<3;0;1;1~:/~:/~:1}90|90{8/{8/{8/z:1z:1x92w81v70u6/u6/q6.m80k90j8/j8/i9/i9/i9/h8.g7-f7-g7-f7-f7-f7-f7-f7-f5.j81m;4k:3j92j:0m>4oC8l@5oD;d<2c=2zVJ†dZyWMbLA>:13814927<54:0/5+25,9<336+25*24)03(13(25*46+47,.6),7)/7*-8*/7*/7*/7*/7*19,08+08-/7,/7,/7,08-08+7?09B14*00!''heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjdXldYlcZmeZmeXmfVg`NjeRnkXol]he\feasqr‚†Š“–ž¡«³¶ÃÈËØÝàêîïö÷ùùûúüþýþþüÿÿúýþöúýòùüñúýòûþóùúòúúòùùíüúëþüçù÷ÞéåÊÕÔ¶º¹›˜˜|qtY_dMbkXr}l„‚‘›´¹²ËÌÇãâÞòîë÷óòû÷öýùøüø÷ÿþüþþüþþüýÿúýÿúýÿúýÿúýÿúúü÷ÿÿúÿûöÿêåا £`X›D=µNE¿MCÂF<ÄD9ÊE<ÎI@ÎKAËH@ÇG<ÆG8ÃH8½J8³H8¦E5šB4‘B5‹C5†B5„B6‚@4‚>3‚<2„:1†91†9191~:1|91{80z7/z7/w7.v6-w7.w7.w8/w8/v7.u6-q5+n3+l7/i81i81h70h70g6/g6/g6/f5.g6/i70i81h70g6/e4-e3,h3-j5/m80k90j:0i;.i=0kA3gB2jI:dH:v_O~k\ŠxjŒoRJ=79.4:04:039/39/39/28.28.17-17-36-06,25,/5+14+/5+/4-.5-/4-.5-/4-/4-/4-/4-05./4-/4-.3,.3,/4-/4-/6.1;23=26@58B79D67B45@03>-4?.DQ=WeN[kQPbHEX<@T8BW6Ic>Ke>Kf=Kf=JeOj?UpGYtK\vO]wP]wRWqNHb?;O6&1+&+.$),heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVidQjhSmjWjk[gg_lll~„“š¨¯µ¸ÂÄÑÖÙâçêòóõûüþÿþÿÿþÿþýûÿþúÿÿúþÿùûüôøûòöüò÷ýó÷úñøúïøúí÷úéùûåòõÚßâÃÌЯ´¸—‘–vkqUYaI_kUtoŒ˜Š§œ¿Á¼ÓÓÑççåóóñ÷÷õûûùüüúûûùþþüþþüþþüþþüþþüþþüþþüûÿþõÿÿõÿÿþÿÿÿûúÿíêð¿ºÂ~uŸKA¯M@¹K>ÂL@ÅK>ÃE9¼=4¾?6ÃE9ÄF7ÃJ7½L:³J7¦F6™C2‘C6E7…C7‚B8A7>5‚<4ƒ:3†91„93~92}:2z:1z:1y90x8/v7.v7.u6-v7.t8.t8.t8.r6,o5*m4+l7/i81j81h70i70h70g6/g6/e3,e3,g5.h6/j81j81j81k92k60l71k90k;1k;/j>1j@0iD2gH6kP=gRAufSueŒ…s†ƒrKL<69.39/39/39/28.28.28.17-17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4.05//4..3-.3-.3-.3-/4./6/.80/:21=34@66B66B66B45B16C1CP>P]IR`IIW@AO6BP7EU:Jb@Jd?Ke@Ke>Ic6I5&1-',0$)-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVmhUkiTmjWjk[kkcwww‘’—§¬²¿ÆÌÒÜÞìñô÷üÿþÿÿþÿÿÿþÿÿþÿþýûÿþúÿÿúýþøúûóõøïñ÷ëñ÷ëô÷ìõùëöøêõøåõ÷áîîÔÛÛ¿ÉÊ«°±’“–yuy`kpZt{iˆŸ§œ®µ­ÍÏÊÞÞÜïïíøøöûûùþþüþþüýýûþþüþþüþþüþþüþþüþþüþþüýÿþûÿÿûÿÿÿÿÿÿûùÿúôÿ÷íýÑÆØž”L=¥RB©L;§@1·G;ÏYMÏUJ¼@4ÄD7ÆH:ÃK=¹I;ªB7?3—@7“E;‰@9„A9A8?6~>5}=4<4}=4z;4x<4w;3w;3u:2t91t91t91r90r90r90r90o9/n8.l6,k5+l7/j81l71j81k60i70i70h6/g5.g5.f5.g6/h70i81k:3k:3l;4j;3i:0h<1k?2jC4iD2fE2fI7lVAjYGujV†m‘Ž{€mEF658-28.28.28.17-17-17-06,17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4./4./4..3--2,-2,.3-/4..5.+5-+6.-9//;12>24@46B47D38E3?L:ER>CQ:;I28F->L3DT9J_@Jb@LdBKc?Ia=G`9F_8G`9RkDXpL]uS^vVZqTPgK=T8.A.&1-',0%*.heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVniVljUlkWlm]pqi€‚ž¡¦¹¾ÄÄËÑÛåçõúýûÿÿüýÿüýÿþüýüûùÿþüÿÿûÿþùûüôõöîîñæéïãçíßíñâðôåñôãñôßòñÜêêÐØؼÇÇ«²±•¡¡‰‘“}“€œž‘ª­¢¶»´ÀÅ¿ÜÜÚééçööôûûùýýûÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþþûûýÿþÿÿþÿ÷òïüóìÿüóÿûíÿôäìñ¹p•P@¢O?¸XJ·M?µE9ÀG<ÁA6ÈE;ÅI?½G=¯@9¡<4š=6–A4e=1f>2hC3iE5fG3cG2cJ6hV@i\IskV…‚oŽzpq_9=,47,28.17-17-17-06,06,06,17-17-17-06,06,/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3-.3-.3--2,-2,-2,-2,.3--4-*4,)4,*6,+7-.:.1=14@25A36C2:G5N4DX¿@7ÆC;ÅF?¿D=±>;¦:7ž:8™>;‘=;Š?<„@=}@=xA6s>6r=5r=5r=5p>5o=4n>4m=3l<2k;1j;1i:0i:0j:0n72p62p62m61m61l71i70i70l;4k:3h91e90e90e90e:1d<2fB6cA5cC4dD5dG5dI6bI3_I2^L6eV?jbMrmW„ƒo„‡r[`L3:(28,28.17-17-17-06,06,06,17-17-17-06,06,/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3--2,-2,,1+,1+,1+,1+-2,,3,,6.+5-*4+*4++5,.8-0;-2=/2=-5@/6A05A-1=)1=)5A-8F/=O5@T8FY=H\@J]?I^=K^>K`?TgG[pQcvZauZYkSJ]G6G4&4%$-*$),"'*heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZlfVjgTkjUlnYorasvm…„Ÿ¤¨¸¿ÇÖßäí÷ùûÿÿûÿÿûüÿþÿÿÿþÿþýûÿÿûÿÿúüüôóõêëíâãçÙÝãÕÜãÑäéÓçìÕéíÖêìÔëëÓèæÏßÚÄÓθÓκÌƶËøÐÉÁ×ÒÎàÛØêæåðïíóòðùù÷ýýûýýûýýûÿÿýþþüüüúþþüþþüþþüþþüþþüþþüþþüÿýüÿûüÿøùÿþýþÿýùÿýôÿøïÿõ÷ÿöð÷çÿÿíÿîÛͧ”¤kX¢[GªWE­L;¹D:ÀD<ÀE>¼E?´A>ª=:¢:9š;9•=5o?5o?5o@6n?5m>4k<2h<1h<1h<1l<2o83q62p62p62m61l71j81i81h70g80e90e:1d<2e?4f@5dB6^B4aG8cL:dM;cM8`K6]K3]M4]Q9bX?mhRss[€ƒnv{eFO:4=*39-28.28.28.17-17-17-06,17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,-2,,1++0*+0*+0*+0*,1+,3,.5.,6.*4+*4+*4++5,-7,.9+-8*0;+4?/5@/4?.3?+3>-3@,7F/9K3@O8BT:GW¸J=¹I>¸I@´G@¯D>¥=:œ:7–=9>:ˆ?9€A:xA:tD:pF:pE5j>5n=6o83r73p62p62n72l71j81i81d8/d90c;1d>3d@4cA5cA5_C5ZE4_NnlUtv^|kcmU2>(6B.3;.39/39/39/28.28.28.17-17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,,1+,1++0**/)*/)+0*,1++2+-4-+5-*4,*4,+5,+5,,6+-7,,6+/:,2=/6A17B27B15@04?.2?-4C.:G3=L5AO8DT:JX?L\BTbI\kTcqZ^mXUbPDRA2>0#/%&/,&,,$**heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjcYkdZlc\md[lfZlfVolYmlWjlWgkZflbr{xŽ˜š¨±¸ÊÓØãìñøýÿ÷üÿúûÿþÿÿÿþÿúùõÿÿúýýõøøîðòåéëÝåéØãêØåíÖæìÒéíÒêíÒèèÎèæÏèãÏáÚÈØÐÃØÎÄÝÒÌêßÛøíëÿôöÿõùÿõûÿùüþüýÿÿýÿÿýþþüþþüÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüÿþúÿýûÿýûýüúùýüøÿÿõÿÿóÿÿíýúóÿûûÿúÿÿôÿöæÿóßÿãÍ×­•©oY¨WD®Q@¬O>¯OA±OB­K@¤C<™<5•>7?6ˆ?8A7{B7uD6qE8qE8p?8q?8s>8q?8q?8q?8q?8p?8sB;qB:o@8m>6l=5j>5m>6o>7o83q73o83m82m82i81h91f:1f;2d>3d@4bB5`C5]A3\@2WB1TG4[S>f^Gi^HbX?ZS9ZS7\W:ZV;XW;kmUsw^u}fUaI&28D03;.4:04:039/39/39/28.28.17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,,1++0*+0**/)*/)+0*+0*,1++2+)3+*4,+5-+5,,6--7.-7,,6+.8-2<16A39D69D47B46A10;+2?-5B09F22=/x=/t?/sB3tD6r=5r=7t=8s>8u@:u@:t?9q?8sA:q@9q@9q@9p?8n?7o>7o>7k92m82l:3l;4l;4h<3g<3c=2c?3^>1dG9cG9T=-N9(M8'@1WQ;PN7KI0OK2]Y>ieJeaDVU7XX<]`CosZz€fdlU=I1-9#2>*4-1=)2>*9E/BN8IU?O[GVbN]hWYdTLWI/u@8s>8u>9u@:t?9o=6p>7sA:q?8p?8p?8n?7o>7m>6n=6m>6k<4l=5m>6k?6j?6gA6eA5bB5dG9[A2^G7^I8N=+F7$G8%>6!LL4GK2DG,DD*MM1\[?baC`aBYY=dgJsw^sy_X`I:D,/;%7C/6>16<26<26<25;15;15;15;15;15;15;14:04:039/39/39/27127127116016016005/05/.3-.3--2,-2,,1+,1++0*+0**1**1*)0))0))0)*1*+2*,3+.5--4,.5-07/4;39A6?F>BJ?;F8:E57B14?.3?+6B.)r>)s@+tD0vE4q?4n<3q<4tB9sA8o?5qA7xH>n>4m>4m>4k?4l=3j>3l=3j>3g?5gA6gA6gC7eC7cC6`C5^D5bK;UB1ZI7`S@RG3C;&E=(FA+AE,BH.AE*<@%?B%NN2_`AijKaaEnqTvzagmSJO94<%4=(=F38>28>48>48>47=37=37=36<28>48>47=37=37=36<26<26<25:449349349338238238227105/05//4..3--2,,1++0*+0*).().().().().(*/)+0*,1+160/4.,1+,1+/4.6;4=BK:4.8/-4--4-,3,gdUgdUheVheVheVheVifWifWifWifWifWifWifWifWifWifWkeWkeWlcZmd[md]mf\mg[jiWkmXimVjoYjs`hthm|wˆ˜˜¦³¹¿ÊÐÓÜãëðööûÿüýÿýÿþÿÿýÿþùþþöýýñúûí÷úçô÷âîóÜåíÕâèÎÛàÀ×Ú»ÖÖ¼Ù×ÂÝ×ÇÞ×ÍåÛÙìààøìðûðöÿõûÿùþÿúýÿûûÿûûÿýüÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüøÿþøÿþûÿþþþþÿüþÿúÿÿùÿÿøþÿúýÿùüÿùùÿýúÿÿøÿÿøûÿõüþðÿÿíÿüéÿñßÿðÝÿïÚñÒ½´z{R>tJ4uH3vI4zM8}P;yL7nA.e7'{M@sD:qB8sD:oC8g;0d8-g=1i?3i?3i?3g?3f>2f>2f>2e?2b@4bB5`C5_C5_C5[D4ZE4WD3XI6OB/\T?oiSc^HMK4IG0IK3>D*?H-@F*48>47=37=37=39?58>48>48>48>48>48>48>47<67<67<66;56;56;55:45:438238216005//4.-2,,1+,1++0*+0**/)*/)+0*,1+-2,-2,05/.3-+0*+0*-2.2718=9;B:@K=@M;@M;=J68E13@,1?(0>'4.:0,6..5.-4-gdUgdUgdUheVheVifWifWifWifWifWifWifWifWifWifWifWkeWldWlcZmd[md]mf\mg[jiWkmXinWiqZgs_drejyt…••£²·½ÈÎÒÛâêïõôùýûüÿýÿþÿÿýÿÿúÿÿøÿÿóþÿñûþë÷úåðõÞæîÖâèÌÙÜ¿ÕÕ¹ÒйÔѾÚÔÈàÙÑêàßôéíþóùÿ÷üÿûÿÿýÿÿþÿÿþüÿþúÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþúÿÿúÿÿûÿÿþþþÿýþÿüüÿûüÿûúÿúøÿù÷ÿú÷ÿýøÿÿûÿÿûýÿúýþùùôîÿþöÿýôÿüóÿûîÿ÷çûæÕéÒÀÏ´¡¶š…”uawVCjI6lI6rM;uP>mF7iB3gB2jE5nI9nJ:oK;oK;eA1cB1cB1cB1cB1cB1bC1`C3]F6\G6\G6ZG6ZG6WH5TG4RG3PH3NH2fdM~~frrZVX@JL4GM3A.:>-;>39?59?58>48>47=37=37=38>48>48>48>48>48>48>48>49>89>89>88=78=78=77<67<66;55:449338227105//4./4.-2.-2.,1-+0,+0,,1--2.-2.,1-,1-,1-,1-.210513764;4;G9=L9@O<@O:8F71?2-9-,6--4,,3+fcTfcTgdUheVheVifWjgXjgXifWifWifWifWifWifWifWifWldWldWlcZmd[md]mf\mg[jiWkmXinWiqZgs_bpcgxr‚””£²·ÀËÑÔÝäëðöõúþûüÿýÿþÿÿýÿÿúÿÿøÿÿôÿÿóÿÿïúýèò÷àçðÕâèÌ×Ú½ÑѵÍË´Î˺ÖÏÅÞ×Ñìâã÷îóÿöþÿúÿÿýÿÿþÿÿÿýþÿúþÿùþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýþÿýþÿýÿþýÿüþÿúþÿùÿÿ÷ýýóýýõþýøþýùÿþüþþþÿýÿÿþÿþùÿÿüÿÿûüûöóÿøòÿýôÿþñÿýíÿúéÿòà÷äÓçÒ¿Ò»©¹ŸŽŸ„srb|]K}^LtUCaD2W:(Y<*[>,X=*`E2`E2`E2_F2`G3`G3`G3]H3\K7\M:\M:YL9XM9UM8RL6QL6NL5QQ9ikS|€gmqXSY?FL2>G,48>48>48>47=37=38>48>48>48>49?59?5:?9:?9:?9:?99>89>89>88=78=78=77<66;55:4493382382/40.3/-2.,1-+0,+0,+0,+0,+0,,1--10.21/32/32/32-4-3?17F3=L7@O:?N7M:MJ9BC3=@5;A7;A7;A7:@6:@6:@69?58>48>48>49?59?5:@6:@6:@6;@:;@:;@::?9:?99>89>89>8:?9:?99>89>88=78=77<67<6495273162/40-2.,1-+/.+/.,0/,0/-10.21.23.23-12+1-+9*/@-6H2;M7=O7A6>A6>A6=@7=@79?59?59?5:@6:@6:B7:B7:B7;@9;@9;@::?8:?99>79>89>7;@:;@9;@:;@9:?9:?8:?9:?98?87=94;4382160/4..3/.3/.21.21,2.,2.+2++2*,4))6%$6)=!2F+8L1;O6;M5;M5;M58J29K3;M5H&DK*FM+EL*PV4PT3KN/HK,TT8bbFccIZZ@[Y@\ZA][B][B[Y@XV=US:SQ8HF1GD1DA0A?0@>1>>2??5>@5;>59?59?59A69A48C58C58C5:B79A69@88@58?79A69@8:B7:A9:B79@8:B7;B:E=8B:8B:7A88@56>14O<>P::L6@R8EW=FY=DX=@T;5H2+<),6+,3++2*ZgM[hN\hP]iQbjSckTglXhkXghVghVifWifWkeWlfXmeZmgYmgYkhYkg[kg\jf]jf[hfZefVhiWglVfo\erajwnzŠ‰œ«²ºÈÑÐÙàáéìò÷ûøþþùþúúÿøûþóùýïøùë÷øæõôâíìØéæÓåâÏÜ×ÄÒ˹ʿ­Á´¤¹­¡¼¯¦Á¶²ËÁÀÛÐÖæßæûóþý÷ÿþûÿÿþÿþýÿüýÿüýÿüýÿþþþþþþþþþþþþþþþþþþÿþüÿþüÿþüÿþüÿýúÿüùÿüùÿýúÿýùÿþúÿþýÿýüÿüýÿýþÿþÿÿþÿÿýþýûüÿþýÿþûÿüúÿøóøíçòåÝöèßûðêÿúýÿüÿÿýþÿÿýÿÿûýÿüýÿþüýÿýþÿýþÿÿýÿÿþüÿþõÿÿîÿþèÿÿäúöÝýûâäàÇ‹‡lRM0SN0QK+QK+UO/UO/TO1TO1SO2SO2QP4QP4QM2PO3PN5NQ6MO7JP6HM6EM5HQ6EN1BK.?I'BI(FM+JP,KQ-NR/PT1VZ7^bA_bCY\?TWWU>XV=YW>XV=XW;WV:XT9QK3OI3LG4ID1DA2B@3A?3>@5<=59?59?59A67B48C57D37D3:B79A69A68@58@59A69A6:B7:B7:B7:B7:B7;C874>63=40>-3C)9M*BY/Ga1Op;Ln;Li=Fa>BY?F;J@?I>>I9?G8>F7>D8=B;>E>9C;6@74B19I/BV3Pg=XrB^J[}JXuIMhECZ@9O:6G54E2XR6:@6:@69A67B47B46C26C2;C8:B79A69A69A69A6:B7;C8;C8:B7:B7;C8;C8=E:>F;=G<=G?>H=>I9?G8>F7>D8=B;=D=9C;6@74B19I/DX5Ri?[uEZ{FWyFTqEIdA=T:2H3/@.->+6H2@R8L_CReGSgKOcG@W=6I30:/07/-4,YgMZhN\hP^jRblTemVinZjo[mn\lm[mk\mj[nhZnhZoi]oi[liZkhYjfZieZie\ieZig[ghXghVchRajWerao|s{‹ŠŸ¦¢°¹ÁËÔÔÝäéñôòúüôúøñöðíðçèìÞâãÕÚÛÉÒÑ¿ÌɶÉıþ«¿¸¦¼³¢Ê¾®ÓŸÜÐÄæÙÑíâàöìíÿôúÿùÿÿ÷ÿÿúÿÿüÿþýÿýüÿûüþüþýþÿÿþþþþþþþþþþþþþþþþþþÿþüÿþüþýûþýûÿýúÿýúÿýúÿûøÿúöþùõÿýüÿûúýùúþúûþüýÿýþÿþÿÿýþÿüûÿýúÿüúÿøó÷ìæòåÝøêáÿôîÿúýÿüÿÿýþÿÿýÿÿûýÿúýÿþüýÿüýÿýþÿÿþÿÿÿýÿþõÿýìÿûãþúßÿüæÿÿéçâÌŒˆoRL2TO2TM0UN1TN.UO/VQ3VQ3UQ4SO2ON2NM1PL1NM1NL3KN3LN6KQ7KP9JR:LU:IR5JS6OY7SZ9T[9]c?fnG‚’c’¦sŸ±›ª’¡zˆ”pr{\\bFLP7KM5LK6KI4LJ5PK5TN8VP:WQ;VP:SN;QL9LI:IG:GE9CE:=>6:@6:@69A67B47B46C26C2;C8;C8:B79A69A6:B7;C8;C8;C8;C8;C8;C8F;=G<=G?=G<=H8>F7=E6=C7=B;:A:7A95?64B19I/BV3Ne;Uo?Tu@RtAPmAE`=9P6-C.+<*+<)1C-image_width / (dstinfo->max_h_samp_factor * DCTSIZE); + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_width = MCU_cols * compptr->h_samp_factor; + for (blk_y = 0; blk_y < compptr->height_in_blocks; + blk_y += compptr->v_samp_factor) { + buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + for (blk_x = 0; blk_x * 2 < comp_width; blk_x++) { + ptr1 = buffer[offset_y][blk_x]; + ptr2 = buffer[offset_y][comp_width - blk_x - 1]; + /* this unrolled loop doesn't need to know which row it's on... */ + for (k = 0; k < DCTSIZE2; k += 2) { + temp1 = *ptr1; /* swap even column */ + temp2 = *ptr2; + *ptr1++ = temp2; + *ptr2++ = temp1; + temp1 = *ptr1; /* swap odd column with sign change */ + temp2 = *ptr2; + *ptr1++ = -temp2; + *ptr2++ = -temp1; + } + } + } + } + } +} + + +LOCAL(void) +do_flip_v (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* Vertical flip */ +{ + JDIMENSION MCU_rows, comp_height, dst_blk_x, dst_blk_y; + int ci, i, j, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + JBLOCKROW src_row_ptr, dst_row_ptr; + JCOEFPTR src_ptr, dst_ptr; + jpeg_component_info *compptr; + + /* We output into a separate array because we can't touch different + * rows of the source virtual array simultaneously. Otherwise, this + * is a pretty straightforward analog of horizontal flip. + * Within a DCT block, vertical mirroring is done by changing the signs + * of odd-numbered rows. + * Partial iMCUs at the bottom edge are copied verbatim. + */ + MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE); + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_height = MCU_rows * compptr->v_samp_factor; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + if (dst_blk_y < comp_height) { + /* Row is within the mirrorable area. */ + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + comp_height - dst_blk_y - (JDIMENSION) compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, FALSE); + } else { + /* Bottom-edge blocks will be copied verbatim. */ + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, FALSE); + } + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + if (dst_blk_y < comp_height) { + /* Row is within the mirrorable area. */ + dst_row_ptr = dst_buffer[offset_y]; + src_row_ptr = src_buffer[compptr->v_samp_factor - offset_y - 1]; + for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; + dst_blk_x++) { + dst_ptr = dst_row_ptr[dst_blk_x]; + src_ptr = src_row_ptr[dst_blk_x]; + for (i = 0; i < DCTSIZE; i += 2) { + /* copy even row */ + for (j = 0; j < DCTSIZE; j++) + *dst_ptr++ = *src_ptr++; + /* copy odd row with sign change */ + for (j = 0; j < DCTSIZE; j++) + *dst_ptr++ = - *src_ptr++; + } + } + } else { + /* Just copy row verbatim. */ + jcopy_block_row(src_buffer[offset_y], dst_buffer[offset_y], + compptr->width_in_blocks); + } + } + } + } +} + + +LOCAL(void) +do_transpose (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* Transpose source into destination */ +{ + JDIMENSION dst_blk_x, dst_blk_y; + int ci, i, j, offset_x, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + JCOEFPTR src_ptr, dst_ptr; + jpeg_component_info *compptr; + + /* Transposing pixels within a block just requires transposing the + * DCT coefficients. + * Partial iMCUs at the edges require no special treatment; we simply + * process all the available DCT blocks for every component. + */ + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; + dst_blk_x += compptr->h_samp_factor) { + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x, + (JDIMENSION) compptr->h_samp_factor, FALSE); + for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) { + src_ptr = src_buffer[offset_x][dst_blk_y + offset_y]; + dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x]; + for (i = 0; i < DCTSIZE; i++) + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + } + } + } + } + } +} + + +LOCAL(void) +do_rot_90 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* 90 degree rotation is equivalent to + * 1. Transposing the image; + * 2. Horizontal mirroring. + * These two steps are merged into a single processing routine. + */ +{ + JDIMENSION MCU_cols, comp_width, dst_blk_x, dst_blk_y; + int ci, i, j, offset_x, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + JCOEFPTR src_ptr, dst_ptr; + jpeg_component_info *compptr; + + /* Because of the horizontal mirror step, we can't process partial iMCUs + * at the (output) right edge properly. They just get transposed and + * not mirrored. + */ + MCU_cols = dstinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE); + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_width = MCU_cols * compptr->h_samp_factor; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; + dst_blk_x += compptr->h_samp_factor) { + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x, + (JDIMENSION) compptr->h_samp_factor, FALSE); + for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) { + src_ptr = src_buffer[offset_x][dst_blk_y + offset_y]; + if (dst_blk_x < comp_width) { + /* Block is within the mirrorable area. */ + dst_ptr = dst_buffer[offset_y] + [comp_width - dst_blk_x - offset_x - 1]; + for (i = 0; i < DCTSIZE; i++) { + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + i++; + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; + } + } else { + /* Edge blocks are transposed but not mirrored. */ + dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x]; + for (i = 0; i < DCTSIZE; i++) + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + } + } + } + } + } + } +} + + +LOCAL(void) +do_rot_270 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* 270 degree rotation is equivalent to + * 1. Horizontal mirroring; + * 2. Transposing the image. + * These two steps are merged into a single processing routine. + */ +{ + JDIMENSION MCU_rows, comp_height, dst_blk_x, dst_blk_y; + int ci, i, j, offset_x, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + JCOEFPTR src_ptr, dst_ptr; + jpeg_component_info *compptr; + + /* Because of the horizontal mirror step, we can't process partial iMCUs + * at the (output) bottom edge properly. They just get transposed and + * not mirrored. + */ + MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE); + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_height = MCU_rows * compptr->v_samp_factor; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; + dst_blk_x += compptr->h_samp_factor) { + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x, + (JDIMENSION) compptr->h_samp_factor, FALSE); + for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) { + dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x]; + if (dst_blk_y < comp_height) { + /* Block is within the mirrorable area. */ + src_ptr = src_buffer[offset_x] + [comp_height - dst_blk_y - offset_y - 1]; + for (i = 0; i < DCTSIZE; i++) { + for (j = 0; j < DCTSIZE; j++) { + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + j++; + dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; + } + } + } else { + /* Edge blocks are transposed but not mirrored. */ + src_ptr = src_buffer[offset_x][dst_blk_y + offset_y]; + for (i = 0; i < DCTSIZE; i++) + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + } + } + } + } + } + } +} + + +LOCAL(void) +do_rot_180 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* 180 degree rotation is equivalent to + * 1. Vertical mirroring; + * 2. Horizontal mirroring. + * These two steps are merged into a single processing routine. + */ +{ + JDIMENSION MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x, dst_blk_y; + int ci, i, j, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + JBLOCKROW src_row_ptr, dst_row_ptr; + JCOEFPTR src_ptr, dst_ptr; + jpeg_component_info *compptr; + + MCU_cols = dstinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE); + MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE); + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_width = MCU_cols * compptr->h_samp_factor; + comp_height = MCU_rows * compptr->v_samp_factor; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + if (dst_blk_y < comp_height) { + /* Row is within the vertically mirrorable area. */ + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], + comp_height - dst_blk_y - (JDIMENSION) compptr->v_samp_factor, + (JDIMENSION) compptr->v_samp_factor, FALSE); + } else { + /* Bottom-edge rows are only mirrored horizontally. */ + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, FALSE); + } + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + if (dst_blk_y < comp_height) { + /* Row is within the mirrorable area. */ + dst_row_ptr = dst_buffer[offset_y]; + src_row_ptr = src_buffer[compptr->v_samp_factor - offset_y - 1]; + /* Process the blocks that can be mirrored both ways. */ + for (dst_blk_x = 0; dst_blk_x < comp_width; dst_blk_x++) { + dst_ptr = dst_row_ptr[dst_blk_x]; + src_ptr = src_row_ptr[comp_width - dst_blk_x - 1]; + for (i = 0; i < DCTSIZE; i += 2) { + /* For even row, negate every odd column. */ + for (j = 0; j < DCTSIZE; j += 2) { + *dst_ptr++ = *src_ptr++; + *dst_ptr++ = - *src_ptr++; + } + /* For odd row, negate every even column. */ + for (j = 0; j < DCTSIZE; j += 2) { + *dst_ptr++ = - *src_ptr++; + *dst_ptr++ = *src_ptr++; + } + } + } + /* Any remaining right-edge blocks are only mirrored vertically. */ + for (; dst_blk_x < compptr->width_in_blocks; dst_blk_x++) { + dst_ptr = dst_row_ptr[dst_blk_x]; + src_ptr = src_row_ptr[dst_blk_x]; + for (i = 0; i < DCTSIZE; i += 2) { + for (j = 0; j < DCTSIZE; j++) + *dst_ptr++ = *src_ptr++; + for (j = 0; j < DCTSIZE; j++) + *dst_ptr++ = - *src_ptr++; + } + } + } else { + /* Remaining rows are just mirrored horizontally. */ + dst_row_ptr = dst_buffer[offset_y]; + src_row_ptr = src_buffer[offset_y]; + /* Process the blocks that can be mirrored. */ + for (dst_blk_x = 0; dst_blk_x < comp_width; dst_blk_x++) { + dst_ptr = dst_row_ptr[dst_blk_x]; + src_ptr = src_row_ptr[comp_width - dst_blk_x - 1]; + for (i = 0; i < DCTSIZE2; i += 2) { + *dst_ptr++ = *src_ptr++; + *dst_ptr++ = - *src_ptr++; + } + } + /* Any remaining right-edge blocks are only copied. */ + for (; dst_blk_x < compptr->width_in_blocks; dst_blk_x++) { + dst_ptr = dst_row_ptr[dst_blk_x]; + src_ptr = src_row_ptr[dst_blk_x]; + for (i = 0; i < DCTSIZE2; i++) + *dst_ptr++ = *src_ptr++; + } + } + } + } + } +} + + +LOCAL(void) +do_transverse (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, + jvirt_barray_ptr *dst_coef_arrays) +/* Transverse transpose is equivalent to + * 1. 180 degree rotation; + * 2. Transposition; + * or + * 1. Horizontal mirroring; + * 2. Transposition; + * 3. Horizontal mirroring. + * These steps are merged into a single processing routine. + */ +{ + JDIMENSION MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x, dst_blk_y; + int ci, i, j, offset_x, offset_y; + JBLOCKARRAY src_buffer, dst_buffer; + JCOEFPTR src_ptr, dst_ptr; + jpeg_component_info *compptr; + + MCU_cols = dstinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE); + MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE); + + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + comp_width = MCU_cols * compptr->h_samp_factor; + comp_height = MCU_rows * compptr->v_samp_factor; + for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; + dst_blk_y += compptr->v_samp_factor) { + dst_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, + (JDIMENSION) compptr->v_samp_factor, TRUE); + for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { + for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; + dst_blk_x += compptr->h_samp_factor) { + src_buffer = (*srcinfo->mem->access_virt_barray) + ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x, + (JDIMENSION) compptr->h_samp_factor, FALSE); + for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) { + if (dst_blk_y < comp_height) { + src_ptr = src_buffer[offset_x] + [comp_height - dst_blk_y - offset_y - 1]; + if (dst_blk_x < comp_width) { + /* Block is within the mirrorable area. */ + dst_ptr = dst_buffer[offset_y] + [comp_width - dst_blk_x - offset_x - 1]; + for (i = 0; i < DCTSIZE; i++) { + for (j = 0; j < DCTSIZE; j++) { + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + j++; + dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; + } + i++; + for (j = 0; j < DCTSIZE; j++) { + dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; + j++; + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + } + } + } else { + /* Right-edge blocks are mirrored in y only */ + dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x]; + for (i = 0; i < DCTSIZE; i++) { + for (j = 0; j < DCTSIZE; j++) { + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + j++; + dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; + } + } + } + } else { + src_ptr = src_buffer[offset_x][dst_blk_y + offset_y]; + if (dst_blk_x < comp_width) { + /* Bottom-edge blocks are mirrored in x only */ + dst_ptr = dst_buffer[offset_y] + [comp_width - dst_blk_x - offset_x - 1]; + for (i = 0; i < DCTSIZE; i++) { + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + i++; + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; + } + } else { + /* At lower right corner, just transpose, no mirroring */ + dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x]; + for (i = 0; i < DCTSIZE; i++) + for (j = 0; j < DCTSIZE; j++) + dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; + } + } + } + } + } + } + } +} + + +/* Request any required workspace. + * + * We allocate the workspace virtual arrays from the source decompression + * object, so that all the arrays (both the original data and the workspace) + * will be taken into account while making memory management decisions. + * Hence, this routine must be called after jpeg_read_header (which reads + * the image dimensions) and before jpeg_read_coefficients (which realizes + * the source's virtual arrays). + */ + +GLOBAL(void) +jtransform_request_workspace (j_decompress_ptr srcinfo, + jpeg_transform_info *info) +{ + jvirt_barray_ptr *coef_arrays = NULL; + jpeg_component_info *compptr; + int ci; + + if (info->force_grayscale && + srcinfo->jpeg_color_space == JCS_YCbCr && + srcinfo->num_components == 3) { + /* We'll only process the first component */ + info->num_components = 1; + } else { + /* Process all the components */ + info->num_components = srcinfo->num_components; + } + + switch (info->transform) { + case JXFORM_NONE: + case JXFORM_FLIP_H: + /* Don't need a workspace array */ + break; + case JXFORM_FLIP_V: + case JXFORM_ROT_180: + /* Need workspace arrays having same dimensions as source image. + * Note that we allocate arrays padded out to the next iMCU boundary, + * so that transform routines need not worry about missing edge blocks. + */ + coef_arrays = (jvirt_barray_ptr *) + (*srcinfo->mem->alloc_small) ((j_common_ptr) srcinfo, JPOOL_IMAGE, + SIZEOF(jvirt_barray_ptr) * info->num_components); + for (ci = 0; ci < info->num_components; ci++) { + compptr = srcinfo->comp_info + ci; + coef_arrays[ci] = (*srcinfo->mem->request_virt_barray) + ((j_common_ptr) srcinfo, JPOOL_IMAGE, FALSE, + (JDIMENSION) jround_up((long) compptr->width_in_blocks, + (long) compptr->h_samp_factor), + (JDIMENSION) jround_up((long) compptr->height_in_blocks, + (long) compptr->v_samp_factor), + (JDIMENSION) compptr->v_samp_factor); + } + break; + case JXFORM_TRANSPOSE: + case JXFORM_TRANSVERSE: + case JXFORM_ROT_90: + case JXFORM_ROT_270: + /* Need workspace arrays having transposed dimensions. + * Note that we allocate arrays padded out to the next iMCU boundary, + * so that transform routines need not worry about missing edge blocks. + */ + coef_arrays = (jvirt_barray_ptr *) + (*srcinfo->mem->alloc_small) ((j_common_ptr) srcinfo, JPOOL_IMAGE, + SIZEOF(jvirt_barray_ptr) * info->num_components); + for (ci = 0; ci < info->num_components; ci++) { + compptr = srcinfo->comp_info + ci; + coef_arrays[ci] = (*srcinfo->mem->request_virt_barray) + ((j_common_ptr) srcinfo, JPOOL_IMAGE, FALSE, + (JDIMENSION) jround_up((long) compptr->height_in_blocks, + (long) compptr->v_samp_factor), + (JDIMENSION) jround_up((long) compptr->width_in_blocks, + (long) compptr->h_samp_factor), + (JDIMENSION) compptr->h_samp_factor); + } + break; + } + info->workspace_coef_arrays = coef_arrays; +} + + +/* Transpose destination image parameters */ + +LOCAL(void) +transpose_critical_parameters (j_compress_ptr dstinfo) +{ + int tblno, i, j, ci, itemp; + jpeg_component_info *compptr; + JQUANT_TBL *qtblptr; + JDIMENSION dtemp; + UINT16 qtemp; + + /* Transpose basic image dimensions */ + dtemp = dstinfo->image_width; + dstinfo->image_width = dstinfo->image_height; + dstinfo->image_height = dtemp; + + /* Transpose sampling factors */ + for (ci = 0; ci < dstinfo->num_components; ci++) { + compptr = dstinfo->comp_info + ci; + itemp = compptr->h_samp_factor; + compptr->h_samp_factor = compptr->v_samp_factor; + compptr->v_samp_factor = itemp; + } + + /* Transpose quantization tables */ + for (tblno = 0; tblno < NUM_QUANT_TBLS; tblno++) { + qtblptr = dstinfo->quant_tbl_ptrs[tblno]; + if (qtblptr != NULL) { + for (i = 0; i < DCTSIZE; i++) { + for (j = 0; j < i; j++) { + qtemp = qtblptr->quantval[i*DCTSIZE+j]; + qtblptr->quantval[i*DCTSIZE+j] = qtblptr->quantval[j*DCTSIZE+i]; + qtblptr->quantval[j*DCTSIZE+i] = qtemp; + } + } + } + } +} + + +/* Trim off any partial iMCUs on the indicated destination edge */ + +LOCAL(void) +trim_right_edge (j_compress_ptr dstinfo) +{ + int ci, max_h_samp_factor; + JDIMENSION MCU_cols; + + /* We have to compute max_h_samp_factor ourselves, + * because it hasn't been set yet in the destination + * (and we don't want to use the source's value). + */ + max_h_samp_factor = 1; + for (ci = 0; ci < dstinfo->num_components; ci++) { + int h_samp_factor = dstinfo->comp_info[ci].h_samp_factor; + max_h_samp_factor = MAX(max_h_samp_factor, h_samp_factor); + } + MCU_cols = dstinfo->image_width / (max_h_samp_factor * DCTSIZE); + if (MCU_cols > 0) /* can't trim to 0 pixels */ + dstinfo->image_width = MCU_cols * (max_h_samp_factor * DCTSIZE); +} + +LOCAL(void) +trim_bottom_edge (j_compress_ptr dstinfo) +{ + int ci, max_v_samp_factor; + JDIMENSION MCU_rows; + + /* We have to compute max_v_samp_factor ourselves, + * because it hasn't been set yet in the destination + * (and we don't want to use the source's value). + */ + max_v_samp_factor = 1; + for (ci = 0; ci < dstinfo->num_components; ci++) { + int v_samp_factor = dstinfo->comp_info[ci].v_samp_factor; + max_v_samp_factor = MAX(max_v_samp_factor, v_samp_factor); + } + MCU_rows = dstinfo->image_height / (max_v_samp_factor * DCTSIZE); + if (MCU_rows > 0) /* can't trim to 0 pixels */ + dstinfo->image_height = MCU_rows * (max_v_samp_factor * DCTSIZE); +} + + +/* Adjust output image parameters as needed. + * + * This must be called after jpeg_copy_critical_parameters() + * and before jpeg_write_coefficients(). + * + * The return value is the set of virtual coefficient arrays to be written + * (either the ones allocated by jtransform_request_workspace, or the + * original source data arrays). The caller will need to pass this value + * to jpeg_write_coefficients(). + */ + +GLOBAL(jvirt_barray_ptr *) +jtransform_adjust_parameters (j_decompress_ptr srcinfo, + j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, + jpeg_transform_info *info) +{ + /* If force-to-grayscale is requested, adjust destination parameters */ + if (info->force_grayscale) { + /* We use jpeg_set_colorspace to make sure subsidiary settings get fixed + * properly. Among other things, the target h_samp_factor & v_samp_factor + * will get set to 1, which typically won't match the source. + * In fact we do this even if the source is already grayscale; that + * provides an easy way of coercing a grayscale JPEG with funny sampling + * factors to the customary 1,1. (Some decoders fail on other factors.) + */ + if ((dstinfo->jpeg_color_space == JCS_YCbCr && + dstinfo->num_components == 3) || + (dstinfo->jpeg_color_space == JCS_GRAYSCALE && + dstinfo->num_components == 1)) { + /* We have to preserve the source's quantization table number. */ + int sv_quant_tbl_no = dstinfo->comp_info[0].quant_tbl_no; + jpeg_set_colorspace(dstinfo, JCS_GRAYSCALE); + dstinfo->comp_info[0].quant_tbl_no = sv_quant_tbl_no; + } else { + /* Sorry, can't do it */ + ERREXIT(dstinfo, JERR_CONVERSION_NOTIMPL); + } + } + + /* Correct the destination's image dimensions etc if necessary */ + switch (info->transform) { + case JXFORM_NONE: + /* Nothing to do */ + break; + case JXFORM_FLIP_H: + if (info->trim) + trim_right_edge(dstinfo); + break; + case JXFORM_FLIP_V: + if (info->trim) + trim_bottom_edge(dstinfo); + break; + case JXFORM_TRANSPOSE: + transpose_critical_parameters(dstinfo); + /* transpose does NOT have to trim anything */ + break; + case JXFORM_TRANSVERSE: + transpose_critical_parameters(dstinfo); + if (info->trim) { + trim_right_edge(dstinfo); + trim_bottom_edge(dstinfo); + } + break; + case JXFORM_ROT_90: + transpose_critical_parameters(dstinfo); + if (info->trim) + trim_right_edge(dstinfo); + break; + case JXFORM_ROT_180: + if (info->trim) { + trim_right_edge(dstinfo); + trim_bottom_edge(dstinfo); + } + break; + case JXFORM_ROT_270: + transpose_critical_parameters(dstinfo); + if (info->trim) + trim_bottom_edge(dstinfo); + break; + } + + /* Return the appropriate output data set */ + if (info->workspace_coef_arrays != NULL) + return info->workspace_coef_arrays; + return src_coef_arrays; +} + + +/* Execute the actual transformation, if any. + * + * This must be called *after* jpeg_write_coefficients, because it depends + * on jpeg_write_coefficients to have computed subsidiary values such as + * the per-component width and height fields in the destination object. + * + * Note that some transformations will modify the source data arrays! + */ + +GLOBAL(void) +jtransform_execute_transformation (j_decompress_ptr srcinfo, + j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, + jpeg_transform_info *info) +{ + jvirt_barray_ptr *dst_coef_arrays = info->workspace_coef_arrays; + + switch (info->transform) { + case JXFORM_NONE: + break; + case JXFORM_FLIP_H: + do_flip_h(srcinfo, dstinfo, src_coef_arrays); + break; + case JXFORM_FLIP_V: + do_flip_v(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays); + break; + case JXFORM_TRANSPOSE: + do_transpose(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays); + break; + case JXFORM_TRANSVERSE: + do_transverse(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays); + break; + case JXFORM_ROT_90: + do_rot_90(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays); + break; + case JXFORM_ROT_180: + do_rot_180(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays); + break; + case JXFORM_ROT_270: + do_rot_270(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays); + break; + } +} + +#endif /* TRANSFORMS_SUPPORTED */ + + +/* Setup decompression object to save desired markers in memory. + * This must be called before jpeg_read_header() to have the desired effect. + */ + +GLOBAL(void) +jcopy_markers_setup (j_decompress_ptr srcinfo, JCOPY_OPTION option) +{ +#ifdef SAVE_MARKERS_SUPPORTED + int m; + + /* Save comments except under NONE option */ + if (option != JCOPYOPT_NONE) { + jpeg_save_markers(srcinfo, JPEG_COM, 0xFFFF); + } + /* Save all types of APPn markers iff ALL option */ + if (option == JCOPYOPT_ALL) { + for (m = 0; m < 16; m++) + jpeg_save_markers(srcinfo, JPEG_APP0 + m, 0xFFFF); + } +#endif /* SAVE_MARKERS_SUPPORTED */ +} + +/* Copy markers saved in the given source object to the destination object. + * This should be called just after jpeg_start_compress() or + * jpeg_write_coefficients(). + * Note that those routines will have written the SOI, and also the + * JFIF APP0 or Adobe APP14 markers if selected. + */ + +GLOBAL(void) +jcopy_markers_execute (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JCOPY_OPTION option) +{ + jpeg_saved_marker_ptr marker; + + /* In the current implementation, we don't actually need to examine the + * option flag here; we just copy everything that got saved. + * But to avoid confusion, we do not output JFIF and Adobe APP14 markers + * if the encoder library already wrote one. + */ + for (marker = srcinfo->marker_list; marker != NULL; marker = marker->next) { + if (dstinfo->write_JFIF_header && + marker->marker == JPEG_APP0 && + marker->data_length >= 5 && + GETJOCTET(marker->data[0]) == 0x4A && + GETJOCTET(marker->data[1]) == 0x46 && + GETJOCTET(marker->data[2]) == 0x49 && + GETJOCTET(marker->data[3]) == 0x46 && + GETJOCTET(marker->data[4]) == 0) + continue; /* reject duplicate JFIF */ + if (dstinfo->write_Adobe_marker && + marker->marker == JPEG_APP0+14 && + marker->data_length >= 5 && + GETJOCTET(marker->data[0]) == 0x41 && + GETJOCTET(marker->data[1]) == 0x64 && + GETJOCTET(marker->data[2]) == 0x6F && + GETJOCTET(marker->data[3]) == 0x62 && + GETJOCTET(marker->data[4]) == 0x65) + continue; /* reject duplicate Adobe */ +#ifdef NEED_FAR_POINTERS + /* We could use jpeg_write_marker if the data weren't FAR... */ + { + unsigned int i; + jpeg_write_m_header(dstinfo, marker->marker, marker->data_length); + for (i = 0; i < marker->data_length; i++) + jpeg_write_m_byte(dstinfo, marker->data[i]); + } +#else + jpeg_write_marker(dstinfo, marker->marker, + marker->data, marker->data_length); +#endif + } +} diff --git a/Build/source/extra/jpeg/transupp.h b/Build/source/extra/jpeg/transupp.h new file mode 100644 index 00000000000..5c2d32aff50 --- /dev/null +++ b/Build/source/extra/jpeg/transupp.h @@ -0,0 +1,135 @@ +/* + * transupp.h + * + * Copyright (C) 1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains declarations for image transformation routines and + * other utility code used by the jpegtran sample application. These are + * NOT part of the core JPEG library. But we keep these routines separate + * from jpegtran.c to ease the task of maintaining jpegtran-like programs + * that have other user interfaces. + * + * NOTE: all the routines declared here have very specific requirements + * about when they are to be executed during the reading and writing of the + * source and destination files. See the comments in transupp.c, or see + * jpegtran.c for an example of correct usage. + */ + +/* If you happen not to want the image transform support, disable it here */ +#ifndef TRANSFORMS_SUPPORTED +#define TRANSFORMS_SUPPORTED 1 /* 0 disables transform code */ +#endif + +/* Short forms of external names for systems with brain-damaged linkers. */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jtransform_request_workspace jTrRequest +#define jtransform_adjust_parameters jTrAdjust +#define jtransform_execute_transformation jTrExec +#define jcopy_markers_setup jCMrkSetup +#define jcopy_markers_execute jCMrkExec +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* + * Codes for supported types of image transformations. + */ + +typedef enum { + JXFORM_NONE, /* no transformation */ + JXFORM_FLIP_H, /* horizontal flip */ + JXFORM_FLIP_V, /* vertical flip */ + JXFORM_TRANSPOSE, /* transpose across UL-to-LR axis */ + JXFORM_TRANSVERSE, /* transpose across UR-to-LL axis */ + JXFORM_ROT_90, /* 90-degree clockwise rotation */ + JXFORM_ROT_180, /* 180-degree rotation */ + JXFORM_ROT_270 /* 270-degree clockwise (or 90 ccw) */ +} JXFORM_CODE; + +/* + * Although rotating and flipping data expressed as DCT coefficients is not + * hard, there is an asymmetry in the JPEG format specification for images + * whose dimensions aren't multiples of the iMCU size. The right and bottom + * image edges are padded out to the next iMCU boundary with junk data; but + * no padding is possible at the top and left edges. If we were to flip + * the whole image including the pad data, then pad garbage would become + * visible at the top and/or left, and real pixels would disappear into the + * pad margins --- perhaps permanently, since encoders & decoders may not + * bother to preserve DCT blocks that appear to be completely outside the + * nominal image area. So, we have to exclude any partial iMCUs from the + * basic transformation. + * + * Transpose is the only transformation that can handle partial iMCUs at the + * right and bottom edges completely cleanly. flip_h can flip partial iMCUs + * at the bottom, but leaves any partial iMCUs at the right edge untouched. + * Similarly flip_v leaves any partial iMCUs at the bottom edge untouched. + * The other transforms are defined as combinations of these basic transforms + * and process edge blocks in a way that preserves the equivalence. + * + * The "trim" option causes untransformable partial iMCUs to be dropped; + * this is not strictly lossless, but it usually gives the best-looking + * result for odd-size images. Note that when this option is active, + * the expected mathematical equivalences between the transforms may not hold. + * (For example, -rot 270 -trim trims only the bottom edge, but -rot 90 -trim + * followed by -rot 180 -trim trims both edges.) + * + * We also offer a "force to grayscale" option, which simply discards the + * chrominance channels of a YCbCr image. This is lossless in the sense that + * the luminance channel is preserved exactly. It's not the same kind of + * thing as the rotate/flip transformations, but it's convenient to handle it + * as part of this package, mainly because the transformation routines have to + * be aware of the option to know how many components to work on. + */ + +typedef struct { + /* Options: set by caller */ + JXFORM_CODE transform; /* image transform operator */ + boolean trim; /* if TRUE, trim partial MCUs as needed */ + boolean force_grayscale; /* if TRUE, convert color image to grayscale */ + + /* Internal workspace: caller should not touch these */ + int num_components; /* # of components in workspace */ + jvirt_barray_ptr * workspace_coef_arrays; /* workspace for transformations */ +} jpeg_transform_info; + + +#if TRANSFORMS_SUPPORTED + +/* Request any required workspace */ +EXTERN(void) jtransform_request_workspace + JPP((j_decompress_ptr srcinfo, jpeg_transform_info *info)); +/* Adjust output image parameters */ +EXTERN(jvirt_barray_ptr *) jtransform_adjust_parameters + JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, + jpeg_transform_info *info)); +/* Execute the actual transformation, if any */ +EXTERN(void) jtransform_execute_transformation + JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, + jpeg_transform_info *info)); + +#endif /* TRANSFORMS_SUPPORTED */ + + +/* + * Support for copying optional markers from source to destination file. + */ + +typedef enum { + JCOPYOPT_NONE, /* copy no optional markers */ + JCOPYOPT_COMMENTS, /* copy only comment (COM) markers */ + JCOPYOPT_ALL /* copy all optional markers */ +} JCOPY_OPTION; + +#define JCOPYOPT_DEFAULT JCOPYOPT_COMMENTS /* recommended default */ + +/* Setup decompression object to save desired markers in memory */ +EXTERN(void) jcopy_markers_setup + JPP((j_decompress_ptr srcinfo, JCOPY_OPTION option)); +/* Copy markers saved in the given source object to the destination object */ +EXTERN(void) jcopy_markers_execute + JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + JCOPY_OPTION option)); diff --git a/Build/source/extra/jpeg/usage.doc b/Build/source/extra/jpeg/usage.doc new file mode 100644 index 00000000000..8c4970af051 --- /dev/null +++ b/Build/source/extra/jpeg/usage.doc @@ -0,0 +1,562 @@ +USAGE instructions for the Independent JPEG Group's JPEG software +================================================================= + +This file describes usage of the JPEG conversion programs cjpeg and djpeg, +as well as the utility programs jpegtran, rdjpgcom and wrjpgcom. (See +the other documentation files if you wish to use the JPEG library within +your own programs.) + +If you are on a Unix machine you may prefer to read the Unix-style manual +pages in files cjpeg.1, djpeg.1, jpegtran.1, rdjpgcom.1, wrjpgcom.1. + + +INTRODUCTION + +These programs implement JPEG image compression and decompression. JPEG +(pronounced "jay-peg") is a standardized compression method for full-color +and gray-scale images. JPEG is designed to handle "real-world" scenes, +for example scanned photographs. Cartoons, line drawings, and other +non-realistic images are not JPEG's strong suit; on that sort of material +you may get poor image quality and/or little compression. + +JPEG is lossy, meaning that the output image is not necessarily identical to +the input image. Hence you should not use JPEG if you have to have identical +output bits. However, on typical real-world images, very good compression +levels can be obtained with no visible change, and amazingly high compression +is possible if you can tolerate a low-quality image. You can trade off image +quality against file size by adjusting the compressor's "quality" setting. + + +GENERAL USAGE + +We provide two programs, cjpeg to compress an image file into JPEG format, +and djpeg to decompress a JPEG file back into a conventional image format. + +On Unix-like systems, you say: + cjpeg [switches] [imagefile] >jpegfile +or + djpeg [switches] [jpegfile] >imagefile +The programs read the specified input file, or standard input if none is +named. They always write to standard output (with trace/error messages to +standard error). These conventions are handy for piping images between +programs. + +On most non-Unix systems, you say: + cjpeg [switches] imagefile jpegfile +or + djpeg [switches] jpegfile imagefile +i.e., both the input and output files are named on the command line. This +style is a little more foolproof, and it loses no functionality if you don't +have pipes. (You can get this style on Unix too, if you prefer, by defining +TWO_FILE_COMMANDLINE when you compile the programs; see install.doc.) + +You can also say: + cjpeg [switches] -outfile jpegfile imagefile +or + djpeg [switches] -outfile imagefile jpegfile +This syntax works on all systems, so it is useful for scripts. + +The currently supported image file formats are: PPM (PBMPLUS color format), +PGM (PBMPLUS gray-scale format), BMP, Targa, and RLE (Utah Raster Toolkit +format). (RLE is supported only if the URT library is available.) +cjpeg recognizes the input image format automatically, with the exception +of some Targa-format files. You have to tell djpeg which format to generate. + +JPEG files are in the defacto standard JFIF file format. There are other, +less widely used JPEG-based file formats, but we don't support them. + +All switch names may be abbreviated; for example, -grayscale may be written +-gray or -gr. Most of the "basic" switches can be abbreviated to as little as +one letter. Upper and lower case are equivalent (-BMP is the same as -bmp). +British spellings are also accepted (e.g., -greyscale), though for brevity +these are not mentioned below. + + +CJPEG DETAILS + +The basic command line switches for cjpeg are: + + -quality N Scale quantization tables to adjust image quality. + Quality is 0 (worst) to 100 (best); default is 75. + (See below for more info.) + + -grayscale Create monochrome JPEG file from color input. + Be sure to use this switch when compressing a grayscale + BMP file, because cjpeg isn't bright enough to notice + whether a BMP file uses only shades of gray. By + saying -grayscale, you'll get a smaller JPEG file that + takes less time to process. + + -optimize Perform optimization of entropy encoding parameters. + Without this, default encoding parameters are used. + -optimize usually makes the JPEG file a little smaller, + but cjpeg runs somewhat slower and needs much more + memory. Image quality and speed of decompression are + unaffected by -optimize. + + -progressive Create progressive JPEG file (see below). + + -targa Input file is Targa format. Targa files that contain + an "identification" field will not be automatically + recognized by cjpeg; for such files you must specify + -targa to make cjpeg treat the input as Targa format. + For most Targa files, you won't need this switch. + +The -quality switch lets you trade off compressed file size against quality of +the reconstructed image: the higher the quality setting, the larger the JPEG +file, and the closer the output image will be to the original input. Normally +you want to use the lowest quality setting (smallest file) that decompresses +into something visually indistinguishable from the original image. For this +purpose the quality setting should be between 50 and 95; the default of 75 is +often about right. If you see defects at -quality 75, then go up 5 or 10 +counts at a time until you are happy with the output image. (The optimal +setting will vary from one image to another.) + +-quality 100 will generate a quantization table of all 1's, minimizing loss +in the quantization step (but there is still information loss in subsampling, +as well as roundoff error). This setting is mainly of interest for +experimental purposes. Quality values above about 95 are NOT recommended for +normal use; the compressed file size goes up dramatically for hardly any gain +in output image quality. + +In the other direction, quality values below 50 will produce very small files +of low image quality. Settings around 5 to 10 might be useful in preparing an +index of a large image library, for example. Try -quality 2 (or so) for some +amusing Cubist effects. (Note: quality values below about 25 generate 2-byte +quantization tables, which are considered optional in the JPEG standard. +cjpeg emits a warning message when you give such a quality value, because some +other JPEG programs may be unable to decode the resulting file. Use -baseline +if you need to ensure compatibility at low quality values.) + +The -progressive switch creates a "progressive JPEG" file. In this type of +JPEG file, the data is stored in multiple scans of increasing quality. If the +file is being transmitted over a slow communications link, the decoder can use +the first scan to display a low-quality image very quickly, and can then +improve the display with each subsequent scan. The final image is exactly +equivalent to a standard JPEG file of the same quality setting, and the total +file size is about the same --- often a little smaller. CAUTION: progressive +JPEG is not yet widely implemented, so many decoders will be unable to view a +progressive JPEG file at all. + +Switches for advanced users: + + -dct int Use integer DCT method (default). + -dct fast Use fast integer DCT (less accurate). + -dct float Use floating-point DCT method. + The float method is very slightly more accurate than + the int method, but is much slower unless your machine + has very fast floating-point hardware. Also note that + results of the floating-point method may vary slightly + across machines, while the integer methods should give + the same results everywhere. The fast integer method + is much less accurate than the other two. + + -restart N Emit a JPEG restart marker every N MCU rows, or every + N MCU blocks if "B" is attached to the number. + -restart 0 (the default) means no restart markers. + + -smooth N Smooth the input image to eliminate dithering noise. + N, ranging from 1 to 100, indicates the strength of + smoothing. 0 (the default) means no smoothing. + + -maxmemory N Set limit for amount of memory to use in processing + large images. Value is in thousands of bytes, or + millions of bytes if "M" is attached to the number. + For example, -max 4m selects 4000000 bytes. If more + space is needed, temporary files will be used. + + -verbose Enable debug printout. More -v's give more printout. + or -debug Also, version information is printed at startup. + +The -restart option inserts extra markers that allow a JPEG decoder to +resynchronize after a transmission error. Without restart markers, any damage +to a compressed file will usually ruin the image from the point of the error +to the end of the image; with restart markers, the damage is usually confined +to the portion of the image up to the next restart marker. Of course, the +restart markers occupy extra space. We recommend -restart 1 for images that +will be transmitted across unreliable networks such as Usenet. + +The -smooth option filters the input to eliminate fine-scale noise. This is +often useful when converting dithered images to JPEG: a moderate smoothing +factor of 10 to 50 gets rid of dithering patterns in the input file, resulting +in a smaller JPEG file and a better-looking image. Too large a smoothing +factor will visibly blur the image, however. + +Switches for wizards: + + -baseline Force baseline-compatible quantization tables to be + generated. This clamps quantization values to 8 bits + even at low quality settings. (This switch is poorly + named, since it does not ensure that the output is + actually baseline JPEG. For example, you can use + -baseline and -progressive together.) + + -qtables file Use the quantization tables given in the specified + text file. + + -qslots N[,...] Select which quantization table to use for each color + component. + + -sample HxV[,...] Set JPEG sampling factors for each color component. + + -scans file Use the scan script given in the specified text file. + +The "wizard" switches are intended for experimentation with JPEG. If you +don't know what you are doing, DON'T USE THEM. These switches are documented +further in the file wizard.doc. + + +DJPEG DETAILS + +The basic command line switches for djpeg are: + + -colors N Reduce image to at most N colors. This reduces the + or -quantize N number of colors used in the output image, so that it + can be displayed on a colormapped display or stored in + a colormapped file format. For example, if you have + an 8-bit display, you'd need to reduce to 256 or fewer + colors. (-colors is the recommended name, -quantize + is provided only for backwards compatibility.) + + -fast Select recommended processing options for fast, low + quality output. (The default options are chosen for + highest quality output.) Currently, this is equivalent + to "-dct fast -nosmooth -onepass -dither ordered". + + -grayscale Force gray-scale output even if JPEG file is color. + Useful for viewing on monochrome displays; also, + djpeg runs noticeably faster in this mode. + + -scale M/N Scale the output image by a factor M/N. Currently + the scale factor must be 1/1, 1/2, 1/4, or 1/8. + Scaling is handy if the image is larger than your + screen; also, djpeg runs much faster when scaling + down the output. + + -bmp Select BMP output format (Windows flavor). 8-bit + colormapped format is emitted if -colors or -grayscale + is specified, or if the JPEG file is gray-scale; + otherwise, 24-bit full-color format is emitted. + + -gif Select GIF output format. Since GIF does not support + more than 256 colors, -colors 256 is assumed (unless + you specify a smaller number of colors). If you + specify -fast, the default number of colors is 216. + + -os2 Select BMP output format (OS/2 1.x flavor). 8-bit + colormapped format is emitted if -colors or -grayscale + is specified, or if the JPEG file is gray-scale; + otherwise, 24-bit full-color format is emitted. + + -pnm Select PBMPLUS (PPM/PGM) output format (this is the + default format). PGM is emitted if the JPEG file is + gray-scale or if -grayscale is specified; otherwise + PPM is emitted. + + -rle Select RLE output format. (Requires URT library.) + + -targa Select Targa output format. Gray-scale format is + emitted if the JPEG file is gray-scale or if + -grayscale is specified; otherwise, colormapped format + is emitted if -colors is specified; otherwise, 24-bit + full-color format is emitted. + +Switches for advanced users: + + -dct int Use integer DCT method (default). + -dct fast Use fast integer DCT (less accurate). + -dct float Use floating-point DCT method. + The float method is very slightly more accurate than + the int method, but is much slower unless your machine + has very fast floating-point hardware. Also note that + results of the floating-point method may vary slightly + across machines, while the integer methods should give + the same results everywhere. The fast integer method + is much less accurate than the other two. + + -dither fs Use Floyd-Steinberg dithering in color quantization. + -dither ordered Use ordered dithering in color quantization. + -dither none Do not use dithering in color quantization. + By default, Floyd-Steinberg dithering is applied when + quantizing colors; this is slow but usually produces + the best results. Ordered dither is a compromise + between speed and quality; no dithering is fast but + usually looks awful. Note that these switches have + no effect unless color quantization is being done. + Ordered dither is only available in -onepass mode. + + -map FILE Quantize to the colors used in the specified image + file. This is useful for producing multiple files + with identical color maps, or for forcing a predefined + set of colors to be used. The FILE must be a GIF + or PPM file. This option overrides -colors and + -onepass. + + -nosmooth Use a faster, lower-quality upsampling routine. + + -onepass Use one-pass instead of two-pass color quantization. + The one-pass method is faster and needs less memory, + but it produces a lower-quality image. -onepass is + ignored unless you also say -colors N. Also, + the one-pass method is always used for gray-scale + output (the two-pass method is no improvement then). + + -maxmemory N Set limit for amount of memory to use in processing + large images. Value is in thousands of bytes, or + millions of bytes if "M" is attached to the number. + For example, -max 4m selects 4000000 bytes. If more + space is needed, temporary files will be used. + + -verbose Enable debug printout. More -v's give more printout. + or -debug Also, version information is printed at startup. + + +HINTS FOR CJPEG + +Color GIF files are not the ideal input for JPEG; JPEG is really intended for +compressing full-color (24-bit) images. In particular, don't try to convert +cartoons, line drawings, and other images that have only a few distinct +colors. GIF works great on these, JPEG does not. If you want to convert a +GIF to JPEG, you should experiment with cjpeg's -quality and -smooth options +to get a satisfactory conversion. -smooth 10 or so is often helpful. + +Avoid running an image through a series of JPEG compression/decompression +cycles. Image quality loss will accumulate; after ten or so cycles the image +may be noticeably worse than it was after one cycle. It's best to use a +lossless format while manipulating an image, then convert to JPEG format when +you are ready to file the image away. + +The -optimize option to cjpeg is worth using when you are making a "final" +version for posting or archiving. It's also a win when you are using low +quality settings to make very small JPEG files; the percentage improvement +is often a lot more than it is on larger files. (At present, -optimize +mode is always selected when generating progressive JPEG files.) + +GIF input files are no longer supported, to avoid the Unisys LZW patent. +Use a Unisys-licensed program if you need to read a GIF file. (Conversion +of GIF files to JPEG is usually a bad idea anyway.) + + +HINTS FOR DJPEG + +To get a quick preview of an image, use the -grayscale and/or -scale switches. +"-grayscale -scale 1/8" is the fastest case. + +Several options are available that trade off image quality to gain speed. +"-fast" turns on the recommended settings. + +"-dct fast" and/or "-nosmooth" gain speed at a small sacrifice in quality. +When producing a color-quantized image, "-onepass -dither ordered" is fast but +much lower quality than the default behavior. "-dither none" may give +acceptable results in two-pass mode, but is seldom tolerable in one-pass mode. + +If you are fortunate enough to have very fast floating point hardware, +"-dct float" may be even faster than "-dct fast". But on most machines +"-dct float" is slower than "-dct int"; in this case it is not worth using, +because its theoretical accuracy advantage is too small to be significant +in practice. + +Two-pass color quantization requires a good deal of memory; on MS-DOS machines +it may run out of memory even with -maxmemory 0. In that case you can still +decompress, with some loss of image quality, by specifying -onepass for +one-pass quantization. + +To avoid the Unisys LZW patent, djpeg produces uncompressed GIF files. These +are larger than they should be, but are readable by standard GIF decoders. + + +HINTS FOR BOTH PROGRAMS + +If more space is needed than will fit in the available main memory (as +determined by -maxmemory), temporary files will be used. (MS-DOS versions +will try to get extended or expanded memory first.) The temporary files are +often rather large: in typical cases they occupy three bytes per pixel, for +example 3*800*600 = 1.44Mb for an 800x600 image. If you don't have enough +free disk space, leave out -progressive and -optimize (for cjpeg) or specify +-onepass (for djpeg). + +On MS-DOS, the temporary files are created in the directory named by the TMP +or TEMP environment variable, or in the current directory if neither of those +exist. Amiga implementations put the temp files in the directory named by +JPEGTMP:, so be sure to assign JPEGTMP: to a disk partition with adequate free +space. + +The default memory usage limit (-maxmemory) is set when the software is +compiled. If you get an "insufficient memory" error, try specifying a smaller +-maxmemory value, even -maxmemory 0 to use the absolute minimum space. You +may want to recompile with a smaller default value if this happens often. + +On machines that have "environment" variables, you can define the environment +variable JPEGMEM to set the default memory limit. The value is specified as +described for the -maxmemory switch. JPEGMEM overrides the default value +specified when the program was compiled, and itself is overridden by an +explicit -maxmemory switch. + +On MS-DOS machines, -maxmemory is the amount of main (conventional) memory to +use. (Extended or expanded memory is also used if available.) Most +DOS-specific versions of this software do their own memory space estimation +and do not need you to specify -maxmemory. + + +JPEGTRAN + +jpegtran performs various useful transformations of JPEG files. +It can translate the coded representation from one variant of JPEG to another, +for example from baseline JPEG to progressive JPEG or vice versa. It can also +perform some rearrangements of the image data, for example turning an image +from landscape to portrait format by rotation. + +jpegtran works by rearranging the compressed data (DCT coefficients), without +ever fully decoding the image. Therefore, its transformations are lossless: +there is no image degradation at all, which would not be true if you used +djpeg followed by cjpeg to accomplish the same conversion. But by the same +token, jpegtran cannot perform lossy operations such as changing the image +quality. + +jpegtran uses a command line syntax similar to cjpeg or djpeg. +On Unix-like systems, you say: + jpegtran [switches] [inputfile] >outputfile +On most non-Unix systems, you say: + jpegtran [switches] inputfile outputfile +where both the input and output files are JPEG files. + +To specify the coded JPEG representation used in the output file, +jpegtran accepts a subset of the switches recognized by cjpeg: + -optimize Perform optimization of entropy encoding parameters. + -progressive Create progressive JPEG file. + -restart N Emit a JPEG restart marker every N MCU rows, or every + N MCU blocks if "B" is attached to the number. + -scans file Use the scan script given in the specified text file. +See the previous discussion of cjpeg for more details about these switches. +If you specify none of these switches, you get a plain baseline-JPEG output +file. The quality setting and so forth are determined by the input file. + +The image can be losslessly transformed by giving one of these switches: + -flip horizontal Mirror image horizontally (left-right). + -flip vertical Mirror image vertically (top-bottom). + -rotate 90 Rotate image 90 degrees clockwise. + -rotate 180 Rotate image 180 degrees. + -rotate 270 Rotate image 270 degrees clockwise (or 90 ccw). + -transpose Transpose image (across UL-to-LR axis). + -transverse Transverse transpose (across UR-to-LL axis). + +The transpose transformation has no restrictions regarding image dimensions. +The other transformations operate rather oddly if the image dimensions are not +a multiple of the iMCU size (usually 8 or 16 pixels), because they can only +transform complete blocks of DCT coefficient data in the desired way. + +jpegtran's default behavior when transforming an odd-size image is designed +to preserve exact reversibility and mathematical consistency of the +transformation set. As stated, transpose is able to flip the entire image +area. Horizontal mirroring leaves any partial iMCU column at the right edge +untouched, but is able to flip all rows of the image. Similarly, vertical +mirroring leaves any partial iMCU row at the bottom edge untouched, but is +able to flip all columns. The other transforms can be built up as sequences +of transpose and flip operations; for consistency, their actions on edge +pixels are defined to be the same as the end result of the corresponding +transpose-and-flip sequence. + +For practical use, you may prefer to discard any untransformable edge pixels +rather than having a strange-looking strip along the right and/or bottom edges +of a transformed image. To do this, add the -trim switch: + -trim Drop non-transformable edge blocks. +Obviously, a transformation with -trim is not reversible, so strictly speaking +jpegtran with this switch is not lossless. Also, the expected mathematical +equivalences between the transformations no longer hold. For example, +"-rot 270 -trim" trims only the bottom edge, but "-rot 90 -trim" followed by +"-rot 180 -trim" trims both edges. + +Another not-strictly-lossless transformation switch is: + -grayscale Force grayscale output. +This option discards the chrominance channels if the input image is YCbCr +(ie, a standard color JPEG), resulting in a grayscale JPEG file. The +luminance channel is preserved exactly, so this is a better method of reducing +to grayscale than decompression, conversion, and recompression. This switch +is particularly handy for fixing a monochrome picture that was mistakenly +encoded as a color JPEG. (In such a case, the space savings from getting rid +of the near-empty chroma channels won't be large; but the decoding time for +a grayscale JPEG is substantially less than that for a color JPEG.) + +jpegtran also recognizes these switches that control what to do with "extra" +markers, such as comment blocks: + -copy none Copy no extra markers from source file. This setting + suppresses all comments and other excess baggage + present in the source file. + -copy comments Copy only comment markers. This setting copies + comments from the source file, but discards + any other inessential data. + -copy all Copy all extra markers. This setting preserves + miscellaneous markers found in the source file, such + as JFIF thumbnails and Photoshop settings. In some + files these extra markers can be sizable. +The default behavior is -copy comments. (Note: in IJG releases v6 and v6a, +jpegtran always did the equivalent of -copy none.) + +Additional switches recognized by jpegtran are: + -outfile filename + -maxmemory N + -verbose + -debug +These work the same as in cjpeg or djpeg. + + +THE COMMENT UTILITIES + +The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file. +Although the standard doesn't actually define what COM blocks are for, they +are widely used to hold user-supplied text strings. This lets you add +annotations, titles, index terms, etc to your JPEG files, and later retrieve +them as text. COM blocks do not interfere with the image stored in the JPEG +file. The maximum size of a COM block is 64K, but you can have as many of +them as you like in one JPEG file. + +We provide two utility programs to display COM block contents and add COM +blocks to a JPEG file. + +rdjpgcom searches a JPEG file and prints the contents of any COM blocks on +standard output. The command line syntax is + rdjpgcom [-verbose] [inputfilename] +The switch "-verbose" (or just "-v") causes rdjpgcom to also display the JPEG +image dimensions. If you omit the input file name from the command line, +the JPEG file is read from standard input. (This may not work on some +operating systems, if binary data can't be read from stdin.) + +wrjpgcom adds a COM block, containing text you provide, to a JPEG file. +Ordinarily, the COM block is added after any existing COM blocks, but you +can delete the old COM blocks if you wish. wrjpgcom produces a new JPEG +file; it does not modify the input file. DO NOT try to overwrite the input +file by directing wrjpgcom's output back into it; on most systems this will +just destroy your file. + +The command line syntax for wrjpgcom is similar to cjpeg's. On Unix-like +systems, it is + wrjpgcom [switches] [inputfilename] +The output file is written to standard output. The input file comes from +the named file, or from standard input if no input file is named. + +On most non-Unix systems, the syntax is + wrjpgcom [switches] inputfilename outputfilename +where both input and output file names must be given explicitly. + +wrjpgcom understands three switches: + -replace Delete any existing COM blocks from the file. + -comment "Comment text" Supply new COM text on command line. + -cfile name Read text for new COM block from named file. +(Switch names can be abbreviated.) If you have only one line of comment text +to add, you can provide it on the command line with -comment. The comment +text must be surrounded with quotes so that it is treated as a single +argument. Longer comments can be read from a text file. + +If you give neither -comment nor -cfile, then wrjpgcom will read the comment +text from standard input. (In this case an input image file name MUST be +supplied, so that the source JPEG file comes from somewhere else.) You can +enter multiple lines, up to 64KB worth. Type an end-of-file indicator +(usually control-D or control-Z) to terminate the comment text entry. + +wrjpgcom will not add a COM block if the provided comment string is empty. +Therefore -replace -comment "" can be used to delete all COM blocks from a +file. + +These utility programs do not depend on the IJG JPEG library. In +particular, the source code for rdjpgcom is intended as an illustration of +the minimum amount of code required to parse a JPEG file header correctly. diff --git a/Build/source/extra/jpeg/wizard.doc b/Build/source/extra/jpeg/wizard.doc new file mode 100644 index 00000000000..54170b227df --- /dev/null +++ b/Build/source/extra/jpeg/wizard.doc @@ -0,0 +1,211 @@ +Advanced usage instructions for the Independent JPEG Group's JPEG software +========================================================================== + +This file describes cjpeg's "switches for wizards". + +The "wizard" switches are intended for experimentation with JPEG by persons +who are reasonably knowledgeable about the JPEG standard. If you don't know +what you are doing, DON'T USE THESE SWITCHES. You'll likely produce files +with worse image quality and/or poorer compression than you'd get from the +default settings. Furthermore, these switches must be used with caution +when making files intended for general use, because not all JPEG decoders +will support unusual JPEG parameter settings. + + +Quantization Table Adjustment +----------------------------- + +Ordinarily, cjpeg starts with a default set of tables (the same ones given +as examples in the JPEG standard) and scales them up or down according to +the -quality setting. The details of the scaling algorithm can be found in +jcparam.c. At very low quality settings, some quantization table entries +can get scaled up to values exceeding 255. Although 2-byte quantization +values are supported by the IJG software, this feature is not in baseline +JPEG and is not supported by all implementations. If you need to ensure +wide compatibility of low-quality files, you can constrain the scaled +quantization values to no more than 255 by giving the -baseline switch. +Note that use of -baseline will result in poorer quality for the same file +size, since more bits than necessary are expended on higher AC coefficients. + +You can substitute a different set of quantization values by using the +-qtables switch: + + -qtables file Use the quantization tables given in the named file. + +The specified file should be a text file containing decimal quantization +values. The file should contain one to four tables, each of 64 elements. +The tables are implicitly numbered 0,1,etc. in order of appearance. Table +entries appear in normal array order (NOT in the zigzag order in which they +will be stored in the JPEG file). + +Quantization table files are free format, in that arbitrary whitespace can +appear between numbers. Also, comments can be included: a comment starts +with '#' and extends to the end of the line. Here is an example file that +duplicates the default quantization tables: + + # Quantization tables given in JPEG spec, section K.1 + + # This is table 0 (the luminance table): + 16 11 10 16 24 40 51 61 + 12 12 14 19 26 58 60 55 + 14 13 16 24 40 57 69 56 + 14 17 22 29 51 87 80 62 + 18 22 37 56 68 109 103 77 + 24 35 55 64 81 104 113 92 + 49 64 78 87 103 121 120 101 + 72 92 95 98 112 100 103 99 + + # This is table 1 (the chrominance table): + 17 18 24 47 99 99 99 99 + 18 21 26 66 99 99 99 99 + 24 26 56 99 99 99 99 99 + 47 66 99 99 99 99 99 99 + 99 99 99 99 99 99 99 99 + 99 99 99 99 99 99 99 99 + 99 99 99 99 99 99 99 99 + 99 99 99 99 99 99 99 99 + +If the -qtables switch is used without -quality, then the specified tables +are used exactly as-is. If both -qtables and -quality are used, then the +tables taken from the file are scaled in the same fashion that the default +tables would be scaled for that quality setting. If -baseline appears, then +the quantization values are constrained to the range 1-255. + +By default, cjpeg will use quantization table 0 for luminance components and +table 1 for chrominance components. To override this choice, use the -qslots +switch: + + -qslots N[,...] Select which quantization table to use for + each color component. + +The -qslots switch specifies a quantization table number for each color +component, in the order in which the components appear in the JPEG SOF marker. +For example, to create a separate table for each of Y,Cb,Cr, you could +provide a -qtables file that defines three quantization tables and say +"-qslots 0,1,2". If -qslots gives fewer table numbers than there are color +components, then the last table number is repeated as necessary. + + +Sampling Factor Adjustment +-------------------------- + +By default, cjpeg uses 2:1 horizontal and vertical downsampling when +compressing YCbCr data, and no downsampling for all other color spaces. +You can override this default with the -sample switch: + + -sample HxV[,...] Set JPEG sampling factors for each color + component. + +The -sample switch specifies the JPEG sampling factors for each color +component, in the order in which they appear in the JPEG SOF marker. +If you specify fewer HxV pairs than there are components, the remaining +components are set to 1x1 sampling. For example, the default YCbCr setting +is equivalent to "-sample 2x2,1x1,1x1", which can be abbreviated to +"-sample 2x2". + +There are still some JPEG decoders in existence that support only 2x1 +sampling (also called 4:2:2 sampling). Compatibility with such decoders can +be achieved by specifying "-sample 2x1". This is not recommended unless +really necessary, since it increases file size and encoding/decoding time +with very little quality gain. + + +Multiple Scan / Progression Control +----------------------------------- + +By default, cjpeg emits a single-scan sequential JPEG file. The +-progressive switch generates a progressive JPEG file using a default series +of progression parameters. You can create multiple-scan sequential JPEG +files or progressive JPEG files with custom progression parameters by using +the -scans switch: + + -scans file Use the scan sequence given in the named file. + +The specified file should be a text file containing a "scan script". +The script specifies the contents and ordering of the scans to be emitted. +Each entry in the script defines one scan. A scan definition specifies +the components to be included in the scan, and for progressive JPEG it also +specifies the progression parameters Ss,Se,Ah,Al for the scan. Scan +definitions are separated by semicolons (';'). A semicolon after the last +scan definition is optional. + +Each scan definition contains one to four component indexes, optionally +followed by a colon (':') and the four progressive-JPEG parameters. The +component indexes denote which color component(s) are to be transmitted in +the scan. Components are numbered in the order in which they appear in the +JPEG SOF marker, with the first component being numbered 0. (Note that these +indexes are not the "component ID" codes assigned to the components, just +positional indexes.) + +The progression parameters for each scan are: + Ss Zigzag index of first coefficient included in scan + Se Zigzag index of last coefficient included in scan + Ah Zero for first scan of a coefficient, else Al of prior scan + Al Successive approximation low bit position for scan +If the progression parameters are omitted, the values 0,63,0,0 are used, +producing a sequential JPEG file. cjpeg automatically determines whether +the script represents a progressive or sequential file, by observing whether +Ss and Se values other than 0 and 63 appear. (The -progressive switch is +not needed to specify this; in fact, it is ignored when -scans appears.) +The scan script must meet the JPEG restrictions on progression sequences. +(cjpeg checks that the spec's requirements are obeyed.) + +Scan script files are free format, in that arbitrary whitespace can appear +between numbers and around punctuation. Also, comments can be included: a +comment starts with '#' and extends to the end of the line. For additional +legibility, commas or dashes can be placed between values. (Actually, any +single punctuation character other than ':' or ';' can be inserted.) For +example, the following two scan definitions are equivalent: + 0 1 2: 0 63 0 0; + 0,1,2 : 0-63, 0,0 ; + +Here is an example of a scan script that generates a partially interleaved +sequential JPEG file: + + 0; # Y only in first scan + 1 2; # Cb and Cr in second scan + +Here is an example of a progressive scan script using only spectral selection +(no successive approximation): + + # Interleaved DC scan for Y,Cb,Cr: + 0,1,2: 0-0, 0, 0 ; + # AC scans: + 0: 1-2, 0, 0 ; # First two Y AC coefficients + 0: 3-5, 0, 0 ; # Three more + 1: 1-63, 0, 0 ; # All AC coefficients for Cb + 2: 1-63, 0, 0 ; # All AC coefficients for Cr + 0: 6-9, 0, 0 ; # More Y coefficients + 0: 10-63, 0, 0 ; # Remaining Y coefficients + +Here is an example of a successive-approximation script. This is equivalent +to the default script used by "cjpeg -progressive" for YCbCr images: + + # Initial DC scan for Y,Cb,Cr (lowest bit not sent) + 0,1,2: 0-0, 0, 1 ; + # First AC scan: send first 5 Y AC coefficients, minus 2 lowest bits: + 0: 1-5, 0, 2 ; + # Send all Cr,Cb AC coefficients, minus lowest bit: + # (chroma data is usually too small to be worth subdividing further; + # but note we send Cr first since eye is least sensitive to Cb) + 2: 1-63, 0, 1 ; + 1: 1-63, 0, 1 ; + # Send remaining Y AC coefficients, minus 2 lowest bits: + 0: 6-63, 0, 2 ; + # Send next-to-lowest bit of all Y AC coefficients: + 0: 1-63, 2, 1 ; + # At this point we've sent all but the lowest bit of all coefficients. + # Send lowest bit of DC coefficients + 0,1,2: 0-0, 1, 0 ; + # Send lowest bit of AC coefficients + 2: 1-63, 1, 0 ; + 1: 1-63, 1, 0 ; + # Y AC lowest bit scan is last; it's usually the largest scan + 0: 1-63, 1, 0 ; + +It may be worth pointing out that this script is tuned for quality settings +of around 50 to 75. For lower quality settings, you'd probably want to use +a script with fewer stages of successive approximation (otherwise the +initial scans will be really bad). For higher quality settings, you might +want to use more stages of successive approximation (so that the initial +scans are not too large). diff --git a/Build/source/extra/jpeg/wrbmp.c b/Build/source/extra/jpeg/wrbmp.c new file mode 100644 index 00000000000..3283b0f15c2 --- /dev/null +++ b/Build/source/extra/jpeg/wrbmp.c @@ -0,0 +1,442 @@ +/* + * wrbmp.c + * + * Copyright (C) 1994-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to write output images in Microsoft "BMP" + * format (MS Windows 3.x and OS/2 1.x flavors). + * Either 8-bit colormapped or 24-bit full-color format can be written. + * No compression is supported. + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume output to + * an ordinary stdio stream. + * + * This code contributed by James Arthur Boucher. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef BMP_SUPPORTED + + +/* + * To support 12-bit JPEG data, we'd have to scale output down to 8 bits. + * This is not yet implemented. + */ + +#if BITS_IN_JSAMPLE != 8 + Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ +#endif + +/* + * Since BMP stores scanlines bottom-to-top, we have to invert the image + * from JPEG's top-to-bottom order. To do this, we save the outgoing data + * in a virtual array during put_pixel_row calls, then actually emit the + * BMP file during finish_output. The virtual array contains one JSAMPLE per + * pixel if the output is grayscale or colormapped, three if it is full color. + */ + +/* Private version of data destination object */ + +typedef struct { + struct djpeg_dest_struct pub; /* public fields */ + + boolean is_os2; /* saves the OS2 format request flag */ + + jvirt_sarray_ptr whole_image; /* needed to reverse row order */ + JDIMENSION data_width; /* JSAMPLEs per row */ + JDIMENSION row_width; /* physical width of one row in the BMP file */ + int pad_bytes; /* number of padding bytes needed per row */ + JDIMENSION cur_output_row; /* next row# to write to virtual array */ +} bmp_dest_struct; + +typedef bmp_dest_struct * bmp_dest_ptr; + + +/* Forward declarations */ +LOCAL(void) write_colormap + JPP((j_decompress_ptr cinfo, bmp_dest_ptr dest, + int map_colors, int map_entry_size)); + + +/* + * Write some pixel data. + * In this module rows_supplied will always be 1. + */ + +METHODDEF(void) +put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +/* This version is for writing 24-bit pixels */ +{ + bmp_dest_ptr dest = (bmp_dest_ptr) dinfo; + JSAMPARRAY image_ptr; + register JSAMPROW inptr, outptr; + register JDIMENSION col; + int pad; + + /* Access next row in virtual array */ + image_ptr = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, dest->whole_image, + dest->cur_output_row, (JDIMENSION) 1, TRUE); + dest->cur_output_row++; + + /* Transfer data. Note destination values must be in BGR order + * (even though Microsoft's own documents say the opposite). + */ + inptr = dest->pub.buffer[0]; + outptr = image_ptr[0]; + for (col = cinfo->output_width; col > 0; col--) { + outptr[2] = *inptr++; /* can omit GETJSAMPLE() safely */ + outptr[1] = *inptr++; + outptr[0] = *inptr++; + outptr += 3; + } + + /* Zero out the pad bytes. */ + pad = dest->pad_bytes; + while (--pad >= 0) + *outptr++ = 0; +} + +METHODDEF(void) +put_gray_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +/* This version is for grayscale OR quantized color output */ +{ + bmp_dest_ptr dest = (bmp_dest_ptr) dinfo; + JSAMPARRAY image_ptr; + register JSAMPROW inptr, outptr; + register JDIMENSION col; + int pad; + + /* Access next row in virtual array */ + image_ptr = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, dest->whole_image, + dest->cur_output_row, (JDIMENSION) 1, TRUE); + dest->cur_output_row++; + + /* Transfer data. */ + inptr = dest->pub.buffer[0]; + outptr = image_ptr[0]; + for (col = cinfo->output_width; col > 0; col--) { + *outptr++ = *inptr++; /* can omit GETJSAMPLE() safely */ + } + + /* Zero out the pad bytes. */ + pad = dest->pad_bytes; + while (--pad >= 0) + *outptr++ = 0; +} + + +/* + * Startup: normally writes the file header. + * In this module we may as well postpone everything until finish_output. + */ + +METHODDEF(void) +start_output_bmp (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + /* no work here */ +} + + +/* + * Finish up at the end of the file. + * + * Here is where we really output the BMP file. + * + * First, routines to write the Windows and OS/2 variants of the file header. + */ + +LOCAL(void) +write_bmp_header (j_decompress_ptr cinfo, bmp_dest_ptr dest) +/* Write a Windows-style BMP file header, including colormap if needed */ +{ + char bmpfileheader[14]; + char bmpinfoheader[40]; +#define PUT_2B(array,offset,value) \ + (array[offset] = (char) ((value) & 0xFF), \ + array[offset+1] = (char) (((value) >> 8) & 0xFF)) +#define PUT_4B(array,offset,value) \ + (array[offset] = (char) ((value) & 0xFF), \ + array[offset+1] = (char) (((value) >> 8) & 0xFF), \ + array[offset+2] = (char) (((value) >> 16) & 0xFF), \ + array[offset+3] = (char) (((value) >> 24) & 0xFF)) + INT32 headersize, bfSize; + int bits_per_pixel, cmap_entries; + + /* Compute colormap size and total file size */ + if (cinfo->out_color_space == JCS_RGB) { + if (cinfo->quantize_colors) { + /* Colormapped RGB */ + bits_per_pixel = 8; + cmap_entries = 256; + } else { + /* Unquantized, full color RGB */ + bits_per_pixel = 24; + cmap_entries = 0; + } + } else { + /* Grayscale output. We need to fake a 256-entry colormap. */ + bits_per_pixel = 8; + cmap_entries = 256; + } + /* File size */ + headersize = 14 + 40 + cmap_entries * 4; /* Header and colormap */ + bfSize = headersize + (INT32) dest->row_width * (INT32) cinfo->output_height; + + /* Set unused fields of header to 0 */ + MEMZERO(bmpfileheader, SIZEOF(bmpfileheader)); + MEMZERO(bmpinfoheader, SIZEOF(bmpinfoheader)); + + /* Fill the file header */ + bmpfileheader[0] = 0x42; /* first 2 bytes are ASCII 'B', 'M' */ + bmpfileheader[1] = 0x4D; + PUT_4B(bmpfileheader, 2, bfSize); /* bfSize */ + /* we leave bfReserved1 & bfReserved2 = 0 */ + PUT_4B(bmpfileheader, 10, headersize); /* bfOffBits */ + + /* Fill the info header (Microsoft calls this a BITMAPINFOHEADER) */ + PUT_2B(bmpinfoheader, 0, 40); /* biSize */ + PUT_4B(bmpinfoheader, 4, cinfo->output_width); /* biWidth */ + PUT_4B(bmpinfoheader, 8, cinfo->output_height); /* biHeight */ + PUT_2B(bmpinfoheader, 12, 1); /* biPlanes - must be 1 */ + PUT_2B(bmpinfoheader, 14, bits_per_pixel); /* biBitCount */ + /* we leave biCompression = 0, for none */ + /* we leave biSizeImage = 0; this is correct for uncompressed data */ + if (cinfo->density_unit == 2) { /* if have density in dots/cm, then */ + PUT_4B(bmpinfoheader, 24, (INT32) (cinfo->X_density*100)); /* XPels/M */ + PUT_4B(bmpinfoheader, 28, (INT32) (cinfo->Y_density*100)); /* XPels/M */ + } + PUT_2B(bmpinfoheader, 32, cmap_entries); /* biClrUsed */ + /* we leave biClrImportant = 0 */ + + if (JFWRITE(dest->pub.output_file, bmpfileheader, 14) != (size_t) 14) + ERREXIT(cinfo, JERR_FILE_WRITE); + if (JFWRITE(dest->pub.output_file, bmpinfoheader, 40) != (size_t) 40) + ERREXIT(cinfo, JERR_FILE_WRITE); + + if (cmap_entries > 0) + write_colormap(cinfo, dest, cmap_entries, 4); +} + + +LOCAL(void) +write_os2_header (j_decompress_ptr cinfo, bmp_dest_ptr dest) +/* Write an OS2-style BMP file header, including colormap if needed */ +{ + char bmpfileheader[14]; + char bmpcoreheader[12]; + INT32 headersize, bfSize; + int bits_per_pixel, cmap_entries; + + /* Compute colormap size and total file size */ + if (cinfo->out_color_space == JCS_RGB) { + if (cinfo->quantize_colors) { + /* Colormapped RGB */ + bits_per_pixel = 8; + cmap_entries = 256; + } else { + /* Unquantized, full color RGB */ + bits_per_pixel = 24; + cmap_entries = 0; + } + } else { + /* Grayscale output. We need to fake a 256-entry colormap. */ + bits_per_pixel = 8; + cmap_entries = 256; + } + /* File size */ + headersize = 14 + 12 + cmap_entries * 3; /* Header and colormap */ + bfSize = headersize + (INT32) dest->row_width * (INT32) cinfo->output_height; + + /* Set unused fields of header to 0 */ + MEMZERO(bmpfileheader, SIZEOF(bmpfileheader)); + MEMZERO(bmpcoreheader, SIZEOF(bmpcoreheader)); + + /* Fill the file header */ + bmpfileheader[0] = 0x42; /* first 2 bytes are ASCII 'B', 'M' */ + bmpfileheader[1] = 0x4D; + PUT_4B(bmpfileheader, 2, bfSize); /* bfSize */ + /* we leave bfReserved1 & bfReserved2 = 0 */ + PUT_4B(bmpfileheader, 10, headersize); /* bfOffBits */ + + /* Fill the info header (Microsoft calls this a BITMAPCOREHEADER) */ + PUT_2B(bmpcoreheader, 0, 12); /* bcSize */ + PUT_2B(bmpcoreheader, 4, cinfo->output_width); /* bcWidth */ + PUT_2B(bmpcoreheader, 6, cinfo->output_height); /* bcHeight */ + PUT_2B(bmpcoreheader, 8, 1); /* bcPlanes - must be 1 */ + PUT_2B(bmpcoreheader, 10, bits_per_pixel); /* bcBitCount */ + + if (JFWRITE(dest->pub.output_file, bmpfileheader, 14) != (size_t) 14) + ERREXIT(cinfo, JERR_FILE_WRITE); + if (JFWRITE(dest->pub.output_file, bmpcoreheader, 12) != (size_t) 12) + ERREXIT(cinfo, JERR_FILE_WRITE); + + if (cmap_entries > 0) + write_colormap(cinfo, dest, cmap_entries, 3); +} + + +/* + * Write the colormap. + * Windows uses BGR0 map entries; OS/2 uses BGR entries. + */ + +LOCAL(void) +write_colormap (j_decompress_ptr cinfo, bmp_dest_ptr dest, + int map_colors, int map_entry_size) +{ + JSAMPARRAY colormap = cinfo->colormap; + int num_colors = cinfo->actual_number_of_colors; + FILE * outfile = dest->pub.output_file; + int i; + + if (colormap != NULL) { + if (cinfo->out_color_components == 3) { + /* Normal case with RGB colormap */ + for (i = 0; i < num_colors; i++) { + putc(GETJSAMPLE(colormap[2][i]), outfile); + putc(GETJSAMPLE(colormap[1][i]), outfile); + putc(GETJSAMPLE(colormap[0][i]), outfile); + if (map_entry_size == 4) + putc(0, outfile); + } + } else { + /* Grayscale colormap (only happens with grayscale quantization) */ + for (i = 0; i < num_colors; i++) { + putc(GETJSAMPLE(colormap[0][i]), outfile); + putc(GETJSAMPLE(colormap[0][i]), outfile); + putc(GETJSAMPLE(colormap[0][i]), outfile); + if (map_entry_size == 4) + putc(0, outfile); + } + } + } else { + /* If no colormap, must be grayscale data. Generate a linear "map". */ + for (i = 0; i < 256; i++) { + putc(i, outfile); + putc(i, outfile); + putc(i, outfile); + if (map_entry_size == 4) + putc(0, outfile); + } + } + /* Pad colormap with zeros to ensure specified number of colormap entries */ + if (i > map_colors) + ERREXIT1(cinfo, JERR_TOO_MANY_COLORS, i); + for (; i < map_colors; i++) { + putc(0, outfile); + putc(0, outfile); + putc(0, outfile); + if (map_entry_size == 4) + putc(0, outfile); + } +} + + +METHODDEF(void) +finish_output_bmp (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + bmp_dest_ptr dest = (bmp_dest_ptr) dinfo; + register FILE * outfile = dest->pub.output_file; + JSAMPARRAY image_ptr; + register JSAMPROW data_ptr; + JDIMENSION row; + register JDIMENSION col; + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; + + /* Write the header and colormap */ + if (dest->is_os2) + write_os2_header(cinfo, dest); + else + write_bmp_header(cinfo, dest); + + /* Write the file body from our virtual array */ + for (row = cinfo->output_height; row > 0; row--) { + if (progress != NULL) { + progress->pub.pass_counter = (long) (cinfo->output_height - row); + progress->pub.pass_limit = (long) cinfo->output_height; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } + image_ptr = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, dest->whole_image, row-1, (JDIMENSION) 1, FALSE); + data_ptr = image_ptr[0]; + for (col = dest->row_width; col > 0; col--) { + putc(GETJSAMPLE(*data_ptr), outfile); + data_ptr++; + } + } + if (progress != NULL) + progress->completed_extra_passes++; + + /* Make sure we wrote the output file OK */ + fflush(outfile); + if (ferror(outfile)) + ERREXIT(cinfo, JERR_FILE_WRITE); +} + + +/* + * The module selection routine for BMP format output. + */ + +GLOBAL(djpeg_dest_ptr) +jinit_write_bmp (j_decompress_ptr cinfo, boolean is_os2) +{ + bmp_dest_ptr dest; + JDIMENSION row_width; + + /* Create module interface object, fill in method pointers */ + dest = (bmp_dest_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(bmp_dest_struct)); + dest->pub.start_output = start_output_bmp; + dest->pub.finish_output = finish_output_bmp; + dest->is_os2 = is_os2; + + if (cinfo->out_color_space == JCS_GRAYSCALE) { + dest->pub.put_pixel_rows = put_gray_rows; + } else if (cinfo->out_color_space == JCS_RGB) { + if (cinfo->quantize_colors) + dest->pub.put_pixel_rows = put_gray_rows; + else + dest->pub.put_pixel_rows = put_pixel_rows; + } else { + ERREXIT(cinfo, JERR_BMP_COLORSPACE); + } + + /* Calculate output image dimensions so we can allocate space */ + jpeg_calc_output_dimensions(cinfo); + + /* Determine width of rows in the BMP file (padded to 4-byte boundary). */ + row_width = cinfo->output_width * cinfo->output_components; + dest->data_width = row_width; + while ((row_width & 3) != 0) row_width++; + dest->row_width = row_width; + dest->pad_bytes = (int) (row_width - dest->data_width); + + /* Allocate space for inversion array, prepare for write pass */ + dest->whole_image = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + row_width, cinfo->output_height, (JDIMENSION) 1); + dest->cur_output_row = 0; + if (cinfo->progress != NULL) { + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; + progress->total_extra_passes++; /* count file input as separate pass */ + } + + /* Create decompressor output buffer. */ + dest->pub.buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, row_width, (JDIMENSION) 1); + dest->pub.buffer_height = 1; + + return (djpeg_dest_ptr) dest; +} + +#endif /* BMP_SUPPORTED */ diff --git a/Build/source/extra/jpeg/wrgif.c b/Build/source/extra/jpeg/wrgif.c new file mode 100644 index 00000000000..5fe83283919 --- /dev/null +++ b/Build/source/extra/jpeg/wrgif.c @@ -0,0 +1,399 @@ +/* + * wrgif.c + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to write output images in GIF format. + * + ************************************************************************** + * NOTE: to avoid entanglements with Unisys' patent on LZW compression, * + * this code has been modified to output "uncompressed GIF" files. * + * There is no trace of the LZW algorithm in this file. * + ************************************************************************** + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume output to + * an ordinary stdio stream. + */ + +/* + * This code is loosely based on ppmtogif from the PBMPLUS distribution + * of Feb. 1991. That file contains the following copyright notice: + * Based on GIFENCODE by David Rowley . + * Lempel-Ziv compression based on "compress" by Spencer W. Thomas et al. + * Copyright (C) 1989 by Jef Poskanzer. + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation. This software is provided "as is" without express or + * implied warranty. + * + * We are also required to state that + * "The Graphics Interchange Format(c) is the Copyright property of + * CompuServe Incorporated. GIF(sm) is a Service Mark property of + * CompuServe Incorporated." + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef GIF_SUPPORTED + + +/* Private version of data destination object */ + +typedef struct { + struct djpeg_dest_struct pub; /* public fields */ + + j_decompress_ptr cinfo; /* back link saves passing separate parm */ + + /* State for packing variable-width codes into a bitstream */ + int n_bits; /* current number of bits/code */ + int maxcode; /* maximum code, given n_bits */ + INT32 cur_accum; /* holds bits not yet output */ + int cur_bits; /* # of bits in cur_accum */ + + /* State for GIF code assignment */ + int ClearCode; /* clear code (doesn't change) */ + int EOFCode; /* EOF code (ditto) */ + int code_counter; /* counts output symbols */ + + /* GIF data packet construction buffer */ + int bytesinpkt; /* # of bytes in current packet */ + char packetbuf[256]; /* workspace for accumulating packet */ + +} gif_dest_struct; + +typedef gif_dest_struct * gif_dest_ptr; + +/* Largest value that will fit in N bits */ +#define MAXCODE(n_bits) ((1 << (n_bits)) - 1) + + +/* + * Routines to package finished data bytes into GIF data blocks. + * A data block consists of a count byte (1..255) and that many data bytes. + */ + +LOCAL(void) +flush_packet (gif_dest_ptr dinfo) +/* flush any accumulated data */ +{ + if (dinfo->bytesinpkt > 0) { /* never write zero-length packet */ + dinfo->packetbuf[0] = (char) dinfo->bytesinpkt++; + if (JFWRITE(dinfo->pub.output_file, dinfo->packetbuf, dinfo->bytesinpkt) + != (size_t) dinfo->bytesinpkt) + ERREXIT(dinfo->cinfo, JERR_FILE_WRITE); + dinfo->bytesinpkt = 0; + } +} + + +/* Add a character to current packet; flush to disk if necessary */ +#define CHAR_OUT(dinfo,c) \ + { (dinfo)->packetbuf[++(dinfo)->bytesinpkt] = (char) (c); \ + if ((dinfo)->bytesinpkt >= 255) \ + flush_packet(dinfo); \ + } + + +/* Routine to convert variable-width codes into a byte stream */ + +LOCAL(void) +output (gif_dest_ptr dinfo, int code) +/* Emit a code of n_bits bits */ +/* Uses cur_accum and cur_bits to reblock into 8-bit bytes */ +{ + dinfo->cur_accum |= ((INT32) code) << dinfo->cur_bits; + dinfo->cur_bits += dinfo->n_bits; + + while (dinfo->cur_bits >= 8) { + CHAR_OUT(dinfo, dinfo->cur_accum & 0xFF); + dinfo->cur_accum >>= 8; + dinfo->cur_bits -= 8; + } +} + + +/* The pseudo-compression algorithm. + * + * In this module we simply output each pixel value as a separate symbol; + * thus, no compression occurs. In fact, there is expansion of one bit per + * pixel, because we use a symbol width one bit wider than the pixel width. + * + * GIF ordinarily uses variable-width symbols, and the decoder will expect + * to ratchet up the symbol width after a fixed number of symbols. + * To simplify the logic and keep the expansion penalty down, we emit a + * GIF Clear code to reset the decoder just before the width would ratchet up. + * Thus, all the symbols in the output file will have the same bit width. + * Note that emitting the Clear codes at the right times is a mere matter of + * counting output symbols and is in no way dependent on the LZW patent. + * + * With a small basic pixel width (low color count), Clear codes will be + * needed very frequently, causing the file to expand even more. So this + * simplistic approach wouldn't work too well on bilevel images, for example. + * But for output of JPEG conversions the pixel width will usually be 8 bits + * (129 to 256 colors), so the overhead added by Clear symbols is only about + * one symbol in every 256. + */ + +LOCAL(void) +compress_init (gif_dest_ptr dinfo, int i_bits) +/* Initialize pseudo-compressor */ +{ + /* init all the state variables */ + dinfo->n_bits = i_bits; + dinfo->maxcode = MAXCODE(dinfo->n_bits); + dinfo->ClearCode = (1 << (i_bits - 1)); + dinfo->EOFCode = dinfo->ClearCode + 1; + dinfo->code_counter = dinfo->ClearCode + 2; + /* init output buffering vars */ + dinfo->bytesinpkt = 0; + dinfo->cur_accum = 0; + dinfo->cur_bits = 0; + /* GIF specifies an initial Clear code */ + output(dinfo, dinfo->ClearCode); +} + + +LOCAL(void) +compress_pixel (gif_dest_ptr dinfo, int c) +/* Accept and "compress" one pixel value. + * The given value must be less than n_bits wide. + */ +{ + /* Output the given pixel value as a symbol. */ + output(dinfo, c); + /* Issue Clear codes often enough to keep the reader from ratcheting up + * its symbol size. + */ + if (dinfo->code_counter < dinfo->maxcode) { + dinfo->code_counter++; + } else { + output(dinfo, dinfo->ClearCode); + dinfo->code_counter = dinfo->ClearCode + 2; /* reset the counter */ + } +} + + +LOCAL(void) +compress_term (gif_dest_ptr dinfo) +/* Clean up at end */ +{ + /* Send an EOF code */ + output(dinfo, dinfo->EOFCode); + /* Flush the bit-packing buffer */ + if (dinfo->cur_bits > 0) { + CHAR_OUT(dinfo, dinfo->cur_accum & 0xFF); + } + /* Flush the packet buffer */ + flush_packet(dinfo); +} + + +/* GIF header construction */ + + +LOCAL(void) +put_word (gif_dest_ptr dinfo, unsigned int w) +/* Emit a 16-bit word, LSB first */ +{ + putc(w & 0xFF, dinfo->pub.output_file); + putc((w >> 8) & 0xFF, dinfo->pub.output_file); +} + + +LOCAL(void) +put_3bytes (gif_dest_ptr dinfo, int val) +/* Emit 3 copies of same byte value --- handy subr for colormap construction */ +{ + putc(val, dinfo->pub.output_file); + putc(val, dinfo->pub.output_file); + putc(val, dinfo->pub.output_file); +} + + +LOCAL(void) +emit_header (gif_dest_ptr dinfo, int num_colors, JSAMPARRAY colormap) +/* Output the GIF file header, including color map */ +/* If colormap==NULL, synthesize a gray-scale colormap */ +{ + int BitsPerPixel, ColorMapSize, InitCodeSize, FlagByte; + int cshift = dinfo->cinfo->data_precision - 8; + int i; + + if (num_colors > 256) + ERREXIT1(dinfo->cinfo, JERR_TOO_MANY_COLORS, num_colors); + /* Compute bits/pixel and related values */ + BitsPerPixel = 1; + while (num_colors > (1 << BitsPerPixel)) + BitsPerPixel++; + ColorMapSize = 1 << BitsPerPixel; + if (BitsPerPixel <= 1) + InitCodeSize = 2; + else + InitCodeSize = BitsPerPixel; + /* + * Write the GIF header. + * Note that we generate a plain GIF87 header for maximum compatibility. + */ + putc('G', dinfo->pub.output_file); + putc('I', dinfo->pub.output_file); + putc('F', dinfo->pub.output_file); + putc('8', dinfo->pub.output_file); + putc('7', dinfo->pub.output_file); + putc('a', dinfo->pub.output_file); + /* Write the Logical Screen Descriptor */ + put_word(dinfo, (unsigned int) dinfo->cinfo->output_width); + put_word(dinfo, (unsigned int) dinfo->cinfo->output_height); + FlagByte = 0x80; /* Yes, there is a global color table */ + FlagByte |= (BitsPerPixel-1) << 4; /* color resolution */ + FlagByte |= (BitsPerPixel-1); /* size of global color table */ + putc(FlagByte, dinfo->pub.output_file); + putc(0, dinfo->pub.output_file); /* Background color index */ + putc(0, dinfo->pub.output_file); /* Reserved (aspect ratio in GIF89) */ + /* Write the Global Color Map */ + /* If the color map is more than 8 bits precision, */ + /* we reduce it to 8 bits by shifting */ + for (i=0; i < ColorMapSize; i++) { + if (i < num_colors) { + if (colormap != NULL) { + if (dinfo->cinfo->out_color_space == JCS_RGB) { + /* Normal case: RGB color map */ + putc(GETJSAMPLE(colormap[0][i]) >> cshift, dinfo->pub.output_file); + putc(GETJSAMPLE(colormap[1][i]) >> cshift, dinfo->pub.output_file); + putc(GETJSAMPLE(colormap[2][i]) >> cshift, dinfo->pub.output_file); + } else { + /* Grayscale "color map": possible if quantizing grayscale image */ + put_3bytes(dinfo, GETJSAMPLE(colormap[0][i]) >> cshift); + } + } else { + /* Create a gray-scale map of num_colors values, range 0..255 */ + put_3bytes(dinfo, (i * 255 + (num_colors-1)/2) / (num_colors-1)); + } + } else { + /* fill out the map to a power of 2 */ + put_3bytes(dinfo, 0); + } + } + /* Write image separator and Image Descriptor */ + putc(',', dinfo->pub.output_file); /* separator */ + put_word(dinfo, 0); /* left/top offset */ + put_word(dinfo, 0); + put_word(dinfo, (unsigned int) dinfo->cinfo->output_width); /* image size */ + put_word(dinfo, (unsigned int) dinfo->cinfo->output_height); + /* flag byte: not interlaced, no local color map */ + putc(0x00, dinfo->pub.output_file); + /* Write Initial Code Size byte */ + putc(InitCodeSize, dinfo->pub.output_file); + + /* Initialize for "compression" of image data */ + compress_init(dinfo, InitCodeSize+1); +} + + +/* + * Startup: write the file header. + */ + +METHODDEF(void) +start_output_gif (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + gif_dest_ptr dest = (gif_dest_ptr) dinfo; + + if (cinfo->quantize_colors) + emit_header(dest, cinfo->actual_number_of_colors, cinfo->colormap); + else + emit_header(dest, 256, (JSAMPARRAY) NULL); +} + + +/* + * Write some pixel data. + * In this module rows_supplied will always be 1. + */ + +METHODDEF(void) +put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +{ + gif_dest_ptr dest = (gif_dest_ptr) dinfo; + register JSAMPROW ptr; + register JDIMENSION col; + + ptr = dest->pub.buffer[0]; + for (col = cinfo->output_width; col > 0; col--) { + compress_pixel(dest, GETJSAMPLE(*ptr++)); + } +} + + +/* + * Finish up at the end of the file. + */ + +METHODDEF(void) +finish_output_gif (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + gif_dest_ptr dest = (gif_dest_ptr) dinfo; + + /* Flush "compression" mechanism */ + compress_term(dest); + /* Write a zero-length data block to end the series */ + putc(0, dest->pub.output_file); + /* Write the GIF terminator mark */ + putc(';', dest->pub.output_file); + /* Make sure we wrote the output file OK */ + fflush(dest->pub.output_file); + if (ferror(dest->pub.output_file)) + ERREXIT(cinfo, JERR_FILE_WRITE); +} + + +/* + * The module selection routine for GIF format output. + */ + +GLOBAL(djpeg_dest_ptr) +jinit_write_gif (j_decompress_ptr cinfo) +{ + gif_dest_ptr dest; + + /* Create module interface object, fill in method pointers */ + dest = (gif_dest_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(gif_dest_struct)); + dest->cinfo = cinfo; /* make back link for subroutines */ + dest->pub.start_output = start_output_gif; + dest->pub.put_pixel_rows = put_pixel_rows; + dest->pub.finish_output = finish_output_gif; + + if (cinfo->out_color_space != JCS_GRAYSCALE && + cinfo->out_color_space != JCS_RGB) + ERREXIT(cinfo, JERR_GIF_COLORSPACE); + + /* Force quantization if color or if > 8 bits input */ + if (cinfo->out_color_space != JCS_GRAYSCALE || cinfo->data_precision > 8) { + /* Force quantization to at most 256 colors */ + cinfo->quantize_colors = TRUE; + if (cinfo->desired_number_of_colors > 256) + cinfo->desired_number_of_colors = 256; + } + + /* Calculate output image dimensions so we can allocate space */ + jpeg_calc_output_dimensions(cinfo); + + if (cinfo->output_components != 1) /* safety check: just one component? */ + ERREXIT(cinfo, JERR_GIF_BUG); + + /* Create decompressor output buffer. */ + dest->pub.buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, cinfo->output_width, (JDIMENSION) 1); + dest->pub.buffer_height = 1; + + return (djpeg_dest_ptr) dest; +} + +#endif /* GIF_SUPPORTED */ diff --git a/Build/source/extra/jpeg/wrjpgcom.1 b/Build/source/extra/jpeg/wrjpgcom.1 new file mode 100644 index 00000000000..d419a999936 --- /dev/null +++ b/Build/source/extra/jpeg/wrjpgcom.1 @@ -0,0 +1,103 @@ +.TH WRJPGCOM 1 "15 June 1995" +.SH NAME +wrjpgcom \- insert text comments into a JPEG file +.SH SYNOPSIS +.B wrjpgcom +[ +.B \-replace +] +[ +.BI \-comment " text" +] +[ +.BI \-cfile " name" +] +[ +.I filename +] +.LP +.SH DESCRIPTION +.LP +.B wrjpgcom +reads the named JPEG/JFIF file, or the standard input if no file is named, +and generates a new JPEG/JFIF file on standard output. A comment block is +added to the file. +.PP +The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file. +Although the standard doesn't actually define what COM blocks are for, they +are widely used to hold user-supplied text strings. This lets you add +annotations, titles, index terms, etc to your JPEG files, and later retrieve +them as text. COM blocks do not interfere with the image stored in the JPEG +file. The maximum size of a COM block is 64K, but you can have as many of +them as you like in one JPEG file. +.PP +.B wrjpgcom +adds a COM block, containing text you provide, to a JPEG file. +Ordinarily, the COM block is added after any existing COM blocks; but you +can delete the old COM blocks if you wish. +.SH OPTIONS +Switch names may be abbreviated, and are not case sensitive. +.TP +.B \-replace +Delete any existing COM blocks from the file. +.TP +.BI \-comment " text" +Supply text for new COM block on command line. +.TP +.BI \-cfile " name" +Read text for new COM block from named file. +.PP +If you have only one line of comment text to add, you can provide it on the +command line with +.BR \-comment . +The comment text must be surrounded with quotes so that it is treated as a +single argument. Longer comments can be read from a text file. +.PP +If you give neither +.B \-comment +nor +.BR \-cfile , +then +.B wrjpgcom +will read the comment text from standard input. (In this case an input image +file name MUST be supplied, so that the source JPEG file comes from somewhere +else.) You can enter multiple lines, up to 64KB worth. Type an end-of-file +indicator (usually control-D) to terminate the comment text entry. +.PP +.B wrjpgcom +will not add a COM block if the provided comment string is empty. Therefore +\fB\-replace \-comment ""\fR can be used to delete all COM blocks from a file. +.SH EXAMPLES +.LP +Add a short comment to in.jpg, producing out.jpg: +.IP +.B wrjpgcom \-c +\fI"View of my back yard" in.jpg +.B > +.I out.jpg +.PP +Attach a long comment previously stored in comment.txt: +.IP +.B wrjpgcom +.I in.jpg +.B < +.I comment.txt +.B > +.I out.jpg +.PP +or equivalently +.IP +.B wrjpgcom +.B -cfile +.I comment.txt +.B < +.I in.jpg +.B > +.I out.jpg +.SH SEE ALSO +.BR cjpeg (1), +.BR djpeg (1), +.BR jpegtran (1), +.BR rdjpgcom (1) +.SH AUTHOR +Independent JPEG Group diff --git a/Build/source/extra/jpeg/wrjpgcom.c b/Build/source/extra/jpeg/wrjpgcom.c new file mode 100644 index 00000000000..8c04b055120 --- /dev/null +++ b/Build/source/extra/jpeg/wrjpgcom.c @@ -0,0 +1,583 @@ +/* + * wrjpgcom.c + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains a very simple stand-alone application that inserts + * user-supplied text as a COM (comment) marker in a JFIF file. + * This may be useful as an example of the minimum logic needed to parse + * JPEG markers. + */ + +#define JPEG_CJPEG_DJPEG /* to get the command-line config symbols */ +#include "jinclude.h" /* get auto-config symbols, */ + +#ifndef HAVE_STDLIB_H /* should declare malloc() */ +extern void * malloc (); +#endif +#include /* to declare isupper(), tolower() */ +#ifdef USE_SETMODE +#include /* to declare setmode()'s parameter macros */ +/* If you have setmode() but not , just delete this line: */ +#include /* to declare setmode() */ +#endif + +#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ +#ifdef __MWERKS__ +#include /* Metrowerks needs this */ +#include /* ... and this */ +#endif +#ifdef THINK_C +#include /* Think declares it here */ +#endif +#endif + +#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ +#define READ_BINARY "r" +#define WRITE_BINARY "w" +#else +#ifdef VMS /* VMS is very nonstandard */ +#define READ_BINARY "rb", "ctx=stm" +#define WRITE_BINARY "wb", "ctx=stm" +#else /* standard ANSI-compliant case */ +#define READ_BINARY "rb" +#define WRITE_BINARY "wb" +#endif +#endif + +#ifndef EXIT_FAILURE /* define exit() codes if not provided */ +#define EXIT_FAILURE 1 +#endif +#ifndef EXIT_SUCCESS +#ifdef VMS +#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ +#else +#define EXIT_SUCCESS 0 +#endif +#endif + +/* Reduce this value if your malloc() can't allocate blocks up to 64K. + * On DOS, compiling in large model is usually a better solution. + */ + +#ifndef MAX_COM_LENGTH +#define MAX_COM_LENGTH 65000L /* must be <= 65533 in any case */ +#endif + + +/* + * These macros are used to read the input file and write the output file. + * To reuse this code in another application, you might need to change these. + */ + +static FILE * infile; /* input JPEG file */ + +/* Return next input byte, or EOF if no more */ +#define NEXTBYTE() getc(infile) + +static FILE * outfile; /* output JPEG file */ + +/* Emit an output byte */ +#define PUTBYTE(x) putc((x), outfile) + + +/* Error exit handler */ +#define ERREXIT(msg) (fprintf(stderr, "%s\n", msg), exit(EXIT_FAILURE)) + + +/* Read one byte, testing for EOF */ +static int +read_1_byte (void) +{ + int c; + + c = NEXTBYTE(); + if (c == EOF) + ERREXIT("Premature EOF in JPEG file"); + return c; +} + +/* Read 2 bytes, convert to unsigned int */ +/* All 2-byte quantities in JPEG markers are MSB first */ +static unsigned int +read_2_bytes (void) +{ + int c1, c2; + + c1 = NEXTBYTE(); + if (c1 == EOF) + ERREXIT("Premature EOF in JPEG file"); + c2 = NEXTBYTE(); + if (c2 == EOF) + ERREXIT("Premature EOF in JPEG file"); + return (((unsigned int) c1) << 8) + ((unsigned int) c2); +} + + +/* Routines to write data to output file */ + +static void +write_1_byte (int c) +{ + PUTBYTE(c); +} + +static void +write_2_bytes (unsigned int val) +{ + PUTBYTE((val >> 8) & 0xFF); + PUTBYTE(val & 0xFF); +} + +static void +write_marker (int marker) +{ + PUTBYTE(0xFF); + PUTBYTE(marker); +} + +static void +copy_rest_of_file (void) +{ + int c; + + while ((c = NEXTBYTE()) != EOF) + PUTBYTE(c); +} + + +/* + * JPEG markers consist of one or more 0xFF bytes, followed by a marker + * code byte (which is not an FF). Here are the marker codes of interest + * in this program. (See jdmarker.c for a more complete list.) + */ + +#define M_SOF0 0xC0 /* Start Of Frame N */ +#define M_SOF1 0xC1 /* N indicates which compression process */ +#define M_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use */ +#define M_SOF3 0xC3 +#define M_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers */ +#define M_SOF6 0xC6 +#define M_SOF7 0xC7 +#define M_SOF9 0xC9 +#define M_SOF10 0xCA +#define M_SOF11 0xCB +#define M_SOF13 0xCD +#define M_SOF14 0xCE +#define M_SOF15 0xCF +#define M_SOI 0xD8 /* Start Of Image (beginning of datastream) */ +#define M_EOI 0xD9 /* End Of Image (end of datastream) */ +#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */ +#define M_COM 0xFE /* COMment */ + + +/* + * Find the next JPEG marker and return its marker code. + * We expect at least one FF byte, possibly more if the compressor used FFs + * to pad the file. (Padding FFs will NOT be replicated in the output file.) + * There could also be non-FF garbage between markers. The treatment of such + * garbage is unspecified; we choose to skip over it but emit a warning msg. + * NB: this routine must not be used after seeing SOS marker, since it will + * not deal correctly with FF/00 sequences in the compressed image data... + */ + +static int +next_marker (void) +{ + int c; + int discarded_bytes = 0; + + /* Find 0xFF byte; count and skip any non-FFs. */ + c = read_1_byte(); + while (c != 0xFF) { + discarded_bytes++; + c = read_1_byte(); + } + /* Get marker code byte, swallowing any duplicate FF bytes. Extra FFs + * are legal as pad bytes, so don't count them in discarded_bytes. + */ + do { + c = read_1_byte(); + } while (c == 0xFF); + + if (discarded_bytes != 0) { + fprintf(stderr, "Warning: garbage data found in JPEG file\n"); + } + + return c; +} + + +/* + * Read the initial marker, which should be SOI. + * For a JFIF file, the first two bytes of the file should be literally + * 0xFF M_SOI. To be more general, we could use next_marker, but if the + * input file weren't actually JPEG at all, next_marker might read the whole + * file and then return a misleading error message... + */ + +static int +first_marker (void) +{ + int c1, c2; + + c1 = NEXTBYTE(); + c2 = NEXTBYTE(); + if (c1 != 0xFF || c2 != M_SOI) + ERREXIT("Not a JPEG file"); + return c2; +} + + +/* + * Most types of marker are followed by a variable-length parameter segment. + * This routine skips over the parameters for any marker we don't otherwise + * want to process. + * Note that we MUST skip the parameter segment explicitly in order not to + * be fooled by 0xFF bytes that might appear within the parameter segment; + * such bytes do NOT introduce new markers. + */ + +static void +copy_variable (void) +/* Copy an unknown or uninteresting variable-length marker */ +{ + unsigned int length; + + /* Get the marker parameter length count */ + length = read_2_bytes(); + write_2_bytes(length); + /* Length includes itself, so must be at least 2 */ + if (length < 2) + ERREXIT("Erroneous JPEG marker length"); + length -= 2; + /* Skip over the remaining bytes */ + while (length > 0) { + write_1_byte(read_1_byte()); + length--; + } +} + +static void +skip_variable (void) +/* Skip over an unknown or uninteresting variable-length marker */ +{ + unsigned int length; + + /* Get the marker parameter length count */ + length = read_2_bytes(); + /* Length includes itself, so must be at least 2 */ + if (length < 2) + ERREXIT("Erroneous JPEG marker length"); + length -= 2; + /* Skip over the remaining bytes */ + while (length > 0) { + (void) read_1_byte(); + length--; + } +} + + +/* + * Parse the marker stream until SOFn or EOI is seen; + * copy data to output, but discard COM markers unless keep_COM is true. + */ + +static int +scan_JPEG_header (int keep_COM) +{ + int marker; + + /* Expect SOI at start of file */ + if (first_marker() != M_SOI) + ERREXIT("Expected SOI marker first"); + write_marker(M_SOI); + + /* Scan miscellaneous markers until we reach SOFn. */ + for (;;) { + marker = next_marker(); + switch (marker) { + /* Note that marker codes 0xC4, 0xC8, 0xCC are not, and must not be, + * treated as SOFn. C4 in particular is actually DHT. + */ + case M_SOF0: /* Baseline */ + case M_SOF1: /* Extended sequential, Huffman */ + case M_SOF2: /* Progressive, Huffman */ + case M_SOF3: /* Lossless, Huffman */ + case M_SOF5: /* Differential sequential, Huffman */ + case M_SOF6: /* Differential progressive, Huffman */ + case M_SOF7: /* Differential lossless, Huffman */ + case M_SOF9: /* Extended sequential, arithmetic */ + case M_SOF10: /* Progressive, arithmetic */ + case M_SOF11: /* Lossless, arithmetic */ + case M_SOF13: /* Differential sequential, arithmetic */ + case M_SOF14: /* Differential progressive, arithmetic */ + case M_SOF15: /* Differential lossless, arithmetic */ + return marker; + + case M_SOS: /* should not see compressed data before SOF */ + ERREXIT("SOS without prior SOFn"); + break; + + case M_EOI: /* in case it's a tables-only JPEG stream */ + return marker; + + case M_COM: /* Existing COM: conditionally discard */ + if (keep_COM) { + write_marker(marker); + copy_variable(); + } else { + skip_variable(); + } + break; + + default: /* Anything else just gets copied */ + write_marker(marker); + copy_variable(); /* we assume it has a parameter count... */ + break; + } + } /* end loop */ +} + + +/* Command line parsing code */ + +static const char * progname; /* program name for error messages */ + + +static void +usage (void) +/* complain about bad command line */ +{ + fprintf(stderr, "wrjpgcom inserts a textual comment in a JPEG file.\n"); + fprintf(stderr, "You can add to or replace any existing comment(s).\n"); + + fprintf(stderr, "Usage: %s [switches] ", progname); +#ifdef TWO_FILE_COMMANDLINE + fprintf(stderr, "inputfile outputfile\n"); +#else + fprintf(stderr, "[inputfile]\n"); +#endif + + fprintf(stderr, "Switches (names may be abbreviated):\n"); + fprintf(stderr, " -replace Delete any existing comments\n"); + fprintf(stderr, " -comment \"text\" Insert comment with given text\n"); + fprintf(stderr, " -cfile name Read comment from named file\n"); + fprintf(stderr, "Notice that you must put quotes around the comment text\n"); + fprintf(stderr, "when you use -comment.\n"); + fprintf(stderr, "If you do not give either -comment or -cfile on the command line,\n"); + fprintf(stderr, "then the comment text is read from standard input.\n"); + fprintf(stderr, "It can be multiple lines, up to %u characters total.\n", + (unsigned int) MAX_COM_LENGTH); +#ifndef TWO_FILE_COMMANDLINE + fprintf(stderr, "You must specify an input JPEG file name when supplying\n"); + fprintf(stderr, "comment text from standard input.\n"); +#endif + + exit(EXIT_FAILURE); +} + + +static int +keymatch (char * arg, const char * keyword, int minchars) +/* Case-insensitive matching of (possibly abbreviated) keyword switches. */ +/* keyword is the constant keyword (must be lower case already), */ +/* minchars is length of minimum legal abbreviation. */ +{ + register int ca, ck; + register int nmatched = 0; + + while ((ca = *arg++) != '\0') { + if ((ck = *keyword++) == '\0') + return 0; /* arg longer than keyword, no good */ + if (isupper(ca)) /* force arg to lcase (assume ck is already) */ + ca = tolower(ca); + if (ca != ck) + return 0; /* no good */ + nmatched++; /* count matched characters */ + } + /* reached end of argument; fail if it's too short for unique abbrev */ + if (nmatched < minchars) + return 0; + return 1; /* A-OK */ +} + + +/* + * The main program. + */ + +int +main (int argc, char **argv) +{ + int argn; + char * arg; + int keep_COM = 1; + char * comment_arg = NULL; + FILE * comment_file = NULL; + unsigned int comment_length = 0; + int marker; + + /* On Mac, fetch a command line. */ +#ifdef USE_CCOMMAND + argc = ccommand(&argv); +#endif + + progname = argv[0]; + if (progname == NULL || progname[0] == 0) + progname = "wrjpgcom"; /* in case C library doesn't provide it */ + + /* Parse switches, if any */ + for (argn = 1; argn < argc; argn++) { + arg = argv[argn]; + if (arg[0] != '-') + break; /* not switch, must be file name */ + arg++; /* advance over '-' */ + if (keymatch(arg, "replace", 1)) { + keep_COM = 0; + } else if (keymatch(arg, "cfile", 2)) { + if (++argn >= argc) usage(); + if ((comment_file = fopen(argv[argn], "r")) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); + exit(EXIT_FAILURE); + } + } else if (keymatch(arg, "comment", 1)) { + if (++argn >= argc) usage(); + comment_arg = argv[argn]; + /* If the comment text starts with '"', then we are probably running + * under MS-DOG and must parse out the quoted string ourselves. Sigh. + */ + if (comment_arg[0] == '"') { + comment_arg = (char *) malloc((size_t) MAX_COM_LENGTH); + if (comment_arg == NULL) + ERREXIT("Insufficient memory"); + strcpy(comment_arg, argv[argn]+1); + for (;;) { + comment_length = (unsigned int) strlen(comment_arg); + if (comment_length > 0 && comment_arg[comment_length-1] == '"') { + comment_arg[comment_length-1] = '\0'; /* zap terminating quote */ + break; + } + if (++argn >= argc) + ERREXIT("Missing ending quote mark"); + strcat(comment_arg, " "); + strcat(comment_arg, argv[argn]); + } + } + comment_length = (unsigned int) strlen(comment_arg); + } else + usage(); + } + + /* Cannot use both -comment and -cfile. */ + if (comment_arg != NULL && comment_file != NULL) + usage(); + /* If there is neither -comment nor -cfile, we will read the comment text + * from stdin; in this case there MUST be an input JPEG file name. + */ + if (comment_arg == NULL && comment_file == NULL && argn >= argc) + usage(); + + /* Open the input file. */ + if (argn < argc) { + if ((infile = fopen(argv[argn], READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); + exit(EXIT_FAILURE); + } + } else { + /* default input file is stdin */ +#ifdef USE_SETMODE /* need to hack file mode? */ + setmode(fileno(stdin), O_BINARY); +#endif +#ifdef USE_FDOPEN /* need to re-open in binary mode? */ + if ((infile = fdopen(fileno(stdin), READ_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open stdin\n", progname); + exit(EXIT_FAILURE); + } +#else + infile = stdin; +#endif + } + + /* Open the output file. */ +#ifdef TWO_FILE_COMMANDLINE + /* Must have explicit output file name */ + if (argn != argc-2) { + fprintf(stderr, "%s: must name one input and one output file\n", + progname); + usage(); + } + if ((outfile = fopen(argv[argn+1], WRITE_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open %s\n", progname, argv[argn+1]); + exit(EXIT_FAILURE); + } +#else + /* Unix style: expect zero or one file name */ + if (argn < argc-1) { + fprintf(stderr, "%s: only one input file\n", progname); + usage(); + } + /* default output file is stdout */ +#ifdef USE_SETMODE /* need to hack file mode? */ + setmode(fileno(stdout), O_BINARY); +#endif +#ifdef USE_FDOPEN /* need to re-open in binary mode? */ + if ((outfile = fdopen(fileno(stdout), WRITE_BINARY)) == NULL) { + fprintf(stderr, "%s: can't open stdout\n", progname); + exit(EXIT_FAILURE); + } +#else + outfile = stdout; +#endif +#endif /* TWO_FILE_COMMANDLINE */ + + /* Collect comment text from comment_file or stdin, if necessary */ + if (comment_arg == NULL) { + FILE * src_file; + int c; + + comment_arg = (char *) malloc((size_t) MAX_COM_LENGTH); + if (comment_arg == NULL) + ERREXIT("Insufficient memory"); + comment_length = 0; + src_file = (comment_file != NULL ? comment_file : stdin); + while ((c = getc(src_file)) != EOF) { + if (comment_length >= (unsigned int) MAX_COM_LENGTH) { + fprintf(stderr, "Comment text may not exceed %u bytes\n", + (unsigned int) MAX_COM_LENGTH); + exit(EXIT_FAILURE); + } + comment_arg[comment_length++] = (char) c; + } + if (comment_file != NULL) + fclose(comment_file); + } + + /* Copy JPEG headers until SOFn marker; + * we will insert the new comment marker just before SOFn. + * This (a) causes the new comment to appear after, rather than before, + * existing comments; and (b) ensures that comments come after any JFIF + * or JFXX markers, as required by the JFIF specification. + */ + marker = scan_JPEG_header(keep_COM); + /* Insert the new COM marker, but only if nonempty text has been supplied */ + if (comment_length > 0) { + write_marker(M_COM); + write_2_bytes(comment_length + 2); + while (comment_length > 0) { + write_1_byte(*comment_arg++); + comment_length--; + } + } + /* Duplicate the remainder of the source file. + * Note that any COM markers occuring after SOF will not be touched. + */ + write_marker(marker); + copy_rest_of_file(); + + /* All done. */ + exit(EXIT_SUCCESS); + return 0; /* suppress no-return-value warnings */ +} diff --git a/Build/source/extra/jpeg/wrppm.c b/Build/source/extra/jpeg/wrppm.c new file mode 100644 index 00000000000..6c6d908817c --- /dev/null +++ b/Build/source/extra/jpeg/wrppm.c @@ -0,0 +1,268 @@ +/* + * wrppm.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to write output images in PPM/PGM format. + * The extended 2-byte-per-sample raw PPM/PGM formats are supported. + * The PBMPLUS library is NOT required to compile this software + * (but it is highly useful as a set of PPM image manipulation programs). + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume output to + * an ordinary stdio stream. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef PPM_SUPPORTED + + +/* + * For 12-bit JPEG data, we either downscale the values to 8 bits + * (to write standard byte-per-sample PPM/PGM files), or output + * nonstandard word-per-sample PPM/PGM files. Downscaling is done + * if PPM_NORAWWORD is defined (this can be done in the Makefile + * or in jconfig.h). + * (When the core library supports data precision reduction, a cleaner + * implementation will be to ask for that instead.) + */ + +#if BITS_IN_JSAMPLE == 8 +#define PUTPPMSAMPLE(ptr,v) *ptr++ = (char) (v) +#define BYTESPERSAMPLE 1 +#define PPM_MAXVAL 255 +#else +#ifdef PPM_NORAWWORD +#define PUTPPMSAMPLE(ptr,v) *ptr++ = (char) ((v) >> (BITS_IN_JSAMPLE-8)) +#define BYTESPERSAMPLE 1 +#define PPM_MAXVAL 255 +#else +/* The word-per-sample format always puts the LSB first. */ +#define PUTPPMSAMPLE(ptr,v) \ + { register int val_ = v; \ + *ptr++ = (char) (val_ & 0xFF); \ + *ptr++ = (char) ((val_ >> 8) & 0xFF); \ + } +#define BYTESPERSAMPLE 2 +#define PPM_MAXVAL ((1<pub.output_file, dest->iobuffer, dest->buffer_width); +} + + +/* + * This code is used when we have to copy the data and apply a pixel + * format translation. Typically this only happens in 12-bit mode. + */ + +METHODDEF(void) +copy_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +{ + ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; + register char * bufferptr; + register JSAMPROW ptr; + register JDIMENSION col; + + ptr = dest->pub.buffer[0]; + bufferptr = dest->iobuffer; + for (col = dest->samples_per_row; col > 0; col--) { + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(*ptr++)); + } + (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); +} + + +/* + * Write some pixel data when color quantization is in effect. + * We have to demap the color index values to straight data. + */ + +METHODDEF(void) +put_demapped_rgb (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +{ + ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; + register char * bufferptr; + register int pixval; + register JSAMPROW ptr; + register JSAMPROW color_map0 = cinfo->colormap[0]; + register JSAMPROW color_map1 = cinfo->colormap[1]; + register JSAMPROW color_map2 = cinfo->colormap[2]; + register JDIMENSION col; + + ptr = dest->pub.buffer[0]; + bufferptr = dest->iobuffer; + for (col = cinfo->output_width; col > 0; col--) { + pixval = GETJSAMPLE(*ptr++); + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map0[pixval])); + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map1[pixval])); + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map2[pixval])); + } + (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); +} + + +METHODDEF(void) +put_demapped_gray (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +{ + ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; + register char * bufferptr; + register JSAMPROW ptr; + register JSAMPROW color_map = cinfo->colormap[0]; + register JDIMENSION col; + + ptr = dest->pub.buffer[0]; + bufferptr = dest->iobuffer; + for (col = cinfo->output_width; col > 0; col--) { + PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map[GETJSAMPLE(*ptr++)])); + } + (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); +} + + +/* + * Startup: write the file header. + */ + +METHODDEF(void) +start_output_ppm (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; + + /* Emit file header */ + switch (cinfo->out_color_space) { + case JCS_GRAYSCALE: + /* emit header for raw PGM format */ + fprintf(dest->pub.output_file, "P5\n%ld %ld\n%d\n", + (long) cinfo->output_width, (long) cinfo->output_height, + PPM_MAXVAL); + break; + case JCS_RGB: + /* emit header for raw PPM format */ + fprintf(dest->pub.output_file, "P6\n%ld %ld\n%d\n", + (long) cinfo->output_width, (long) cinfo->output_height, + PPM_MAXVAL); + break; + default: + ERREXIT(cinfo, JERR_PPM_COLORSPACE); + } +} + + +/* + * Finish up at the end of the file. + */ + +METHODDEF(void) +finish_output_ppm (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + /* Make sure we wrote the output file OK */ + fflush(dinfo->output_file); + if (ferror(dinfo->output_file)) + ERREXIT(cinfo, JERR_FILE_WRITE); +} + + +/* + * The module selection routine for PPM format output. + */ + +GLOBAL(djpeg_dest_ptr) +jinit_write_ppm (j_decompress_ptr cinfo) +{ + ppm_dest_ptr dest; + + /* Create module interface object, fill in method pointers */ + dest = (ppm_dest_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(ppm_dest_struct)); + dest->pub.start_output = start_output_ppm; + dest->pub.finish_output = finish_output_ppm; + + /* Calculate output image dimensions so we can allocate space */ + jpeg_calc_output_dimensions(cinfo); + + /* Create physical I/O buffer. Note we make this near on a PC. */ + dest->samples_per_row = cinfo->output_width * cinfo->out_color_components; + dest->buffer_width = dest->samples_per_row * (BYTESPERSAMPLE * SIZEOF(char)); + dest->iobuffer = (char *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, dest->buffer_width); + + if (cinfo->quantize_colors || BITS_IN_JSAMPLE != 8 || + SIZEOF(JSAMPLE) != SIZEOF(char)) { + /* When quantizing, we need an output buffer for colormap indexes + * that's separate from the physical I/O buffer. We also need a + * separate buffer if pixel format translation must take place. + */ + dest->pub.buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->output_width * cinfo->output_components, (JDIMENSION) 1); + dest->pub.buffer_height = 1; + if (! cinfo->quantize_colors) + dest->pub.put_pixel_rows = copy_pixel_rows; + else if (cinfo->out_color_space == JCS_GRAYSCALE) + dest->pub.put_pixel_rows = put_demapped_gray; + else + dest->pub.put_pixel_rows = put_demapped_rgb; + } else { + /* We will fwrite() directly from decompressor output buffer. */ + /* Synthesize a JSAMPARRAY pointer structure */ + /* Cast here implies near->far pointer conversion on PCs */ + dest->pixrow = (JSAMPROW) dest->iobuffer; + dest->pub.buffer = & dest->pixrow; + dest->pub.buffer_height = 1; + dest->pub.put_pixel_rows = put_pixel_rows; + } + + return (djpeg_dest_ptr) dest; +} + +#endif /* PPM_SUPPORTED */ diff --git a/Build/source/extra/jpeg/wrrle.c b/Build/source/extra/jpeg/wrrle.c new file mode 100644 index 00000000000..a4e73372de6 --- /dev/null +++ b/Build/source/extra/jpeg/wrrle.c @@ -0,0 +1,305 @@ +/* + * wrrle.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to write output images in RLE format. + * The Utah Raster Toolkit library is required (version 3.1 or later). + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume output to + * an ordinary stdio stream. + * + * Based on code contributed by Mike Lijewski, + * with updates from Robert Hutchinson. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef RLE_SUPPORTED + +/* rle.h is provided by the Utah Raster Toolkit. */ + +#include + +/* + * We assume that JSAMPLE has the same representation as rle_pixel, + * to wit, "unsigned char". Hence we can't cope with 12- or 16-bit samples. + */ + +#if BITS_IN_JSAMPLE != 8 + Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ +#endif + + +/* + * Since RLE stores scanlines bottom-to-top, we have to invert the image + * from JPEG's top-to-bottom order. To do this, we save the outgoing data + * in a virtual array during put_pixel_row calls, then actually emit the + * RLE file during finish_output. + */ + + +/* + * For now, if we emit an RLE color map then it is always 256 entries long, + * though not all of the entries need be used. + */ + +#define CMAPBITS 8 +#define CMAPLENGTH (1<<(CMAPBITS)) + +typedef struct { + struct djpeg_dest_struct pub; /* public fields */ + + jvirt_sarray_ptr image; /* virtual array to store the output image */ + rle_map *colormap; /* RLE-style color map, or NULL if none */ + rle_pixel **rle_row; /* To pass rows to rle_putrow() */ + +} rle_dest_struct; + +typedef rle_dest_struct * rle_dest_ptr; + +/* Forward declarations */ +METHODDEF(void) rle_put_pixel_rows + JPP((j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied)); + + +/* + * Write the file header. + * + * In this module it's easier to wait till finish_output to write anything. + */ + +METHODDEF(void) +start_output_rle (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + rle_dest_ptr dest = (rle_dest_ptr) dinfo; + size_t cmapsize; + int i, ci; +#ifdef PROGRESS_REPORT + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; +#endif + + /* + * Make sure the image can be stored in RLE format. + * + * - RLE stores image dimensions as *signed* 16 bit integers. JPEG + * uses unsigned, so we have to check the width. + * + * - Colorspace is expected to be grayscale or RGB. + * + * - The number of channels (components) is expected to be 1 (grayscale/ + * pseudocolor) or 3 (truecolor/directcolor). + * (could be 2 or 4 if using an alpha channel, but we aren't) + */ + + if (cinfo->output_width > 32767 || cinfo->output_height > 32767) + ERREXIT2(cinfo, JERR_RLE_DIMENSIONS, cinfo->output_width, + cinfo->output_height); + + if (cinfo->out_color_space != JCS_GRAYSCALE && + cinfo->out_color_space != JCS_RGB) + ERREXIT(cinfo, JERR_RLE_COLORSPACE); + + if (cinfo->output_components != 1 && cinfo->output_components != 3) + ERREXIT1(cinfo, JERR_RLE_TOOMANYCHANNELS, cinfo->num_components); + + /* Convert colormap, if any, to RLE format. */ + + dest->colormap = NULL; + + if (cinfo->quantize_colors) { + /* Allocate storage for RLE-style cmap, zero any extra entries */ + cmapsize = cinfo->out_color_components * CMAPLENGTH * SIZEOF(rle_map); + dest->colormap = (rle_map *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, cmapsize); + MEMZERO(dest->colormap, cmapsize); + + /* Save away data in RLE format --- note 8-bit left shift! */ + /* Shifting would need adjustment for JSAMPLEs wider than 8 bits. */ + for (ci = 0; ci < cinfo->out_color_components; ci++) { + for (i = 0; i < cinfo->actual_number_of_colors; i++) { + dest->colormap[ci * CMAPLENGTH + i] = + GETJSAMPLE(cinfo->colormap[ci][i]) << 8; + } + } + } + + /* Set the output buffer to the first row */ + dest->pub.buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, dest->image, (JDIMENSION) 0, (JDIMENSION) 1, TRUE); + dest->pub.buffer_height = 1; + + dest->pub.put_pixel_rows = rle_put_pixel_rows; + +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->total_extra_passes++; /* count file writing as separate pass */ + } +#endif +} + + +/* + * Write some pixel data. + * + * This routine just saves the data away in a virtual array. + */ + +METHODDEF(void) +rle_put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +{ + rle_dest_ptr dest = (rle_dest_ptr) dinfo; + + if (cinfo->output_scanline < cinfo->output_height) { + dest->pub.buffer = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, dest->image, + cinfo->output_scanline, (JDIMENSION) 1, TRUE); + } +} + +/* + * Finish up at the end of the file. + * + * Here is where we really output the RLE file. + */ + +METHODDEF(void) +finish_output_rle (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + rle_dest_ptr dest = (rle_dest_ptr) dinfo; + rle_hdr header; /* Output file information */ + rle_pixel **rle_row, *red, *green, *blue; + JSAMPROW output_row; + char cmapcomment[80]; + int row, col; + int ci; +#ifdef PROGRESS_REPORT + cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; +#endif + + /* Initialize the header info */ + header = *rle_hdr_init(NULL); + header.rle_file = dest->pub.output_file; + header.xmin = 0; + header.xmax = cinfo->output_width - 1; + header.ymin = 0; + header.ymax = cinfo->output_height - 1; + header.alpha = 0; + header.ncolors = cinfo->output_components; + for (ci = 0; ci < cinfo->output_components; ci++) { + RLE_SET_BIT(header, ci); + } + if (cinfo->quantize_colors) { + header.ncmap = cinfo->out_color_components; + header.cmaplen = CMAPBITS; + header.cmap = dest->colormap; + /* Add a comment to the output image with the true colormap length. */ + sprintf(cmapcomment, "color_map_length=%d", cinfo->actual_number_of_colors); + rle_putcom(cmapcomment, &header); + } + + /* Emit the RLE header and color map (if any) */ + rle_put_setup(&header); + + /* Now output the RLE data from our virtual array. + * We assume here that (a) rle_pixel is represented the same as JSAMPLE, + * and (b) we are not on a machine where FAR pointers differ from regular. + */ + +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->pub.pass_limit = cinfo->output_height; + progress->pub.pass_counter = 0; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } +#endif + + if (cinfo->output_components == 1) { + for (row = cinfo->output_height-1; row >= 0; row--) { + rle_row = (rle_pixel **) (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, dest->image, + (JDIMENSION) row, (JDIMENSION) 1, FALSE); + rle_putrow(rle_row, (int) cinfo->output_width, &header); +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->pub.pass_counter++; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } +#endif + } + } else { + for (row = cinfo->output_height-1; row >= 0; row--) { + rle_row = (rle_pixel **) dest->rle_row; + output_row = * (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, dest->image, + (JDIMENSION) row, (JDIMENSION) 1, FALSE); + red = rle_row[0]; + green = rle_row[1]; + blue = rle_row[2]; + for (col = cinfo->output_width; col > 0; col--) { + *red++ = GETJSAMPLE(*output_row++); + *green++ = GETJSAMPLE(*output_row++); + *blue++ = GETJSAMPLE(*output_row++); + } + rle_putrow(rle_row, (int) cinfo->output_width, &header); +#ifdef PROGRESS_REPORT + if (progress != NULL) { + progress->pub.pass_counter++; + (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); + } +#endif + } + } + +#ifdef PROGRESS_REPORT + if (progress != NULL) + progress->completed_extra_passes++; +#endif + + /* Emit file trailer */ + rle_puteof(&header); + fflush(dest->pub.output_file); + if (ferror(dest->pub.output_file)) + ERREXIT(cinfo, JERR_FILE_WRITE); +} + + +/* + * The module selection routine for RLE format output. + */ + +GLOBAL(djpeg_dest_ptr) +jinit_write_rle (j_decompress_ptr cinfo) +{ + rle_dest_ptr dest; + + /* Create module interface object, fill in method pointers */ + dest = (rle_dest_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(rle_dest_struct)); + dest->pub.start_output = start_output_rle; + dest->pub.finish_output = finish_output_rle; + + /* Calculate output image dimensions so we can allocate space */ + jpeg_calc_output_dimensions(cinfo); + + /* Allocate a work array for output to the RLE library. */ + dest->rle_row = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->output_width, (JDIMENSION) cinfo->output_components); + + /* Allocate a virtual array to hold the image. */ + dest->image = (*cinfo->mem->request_virt_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + (JDIMENSION) (cinfo->output_width * cinfo->output_components), + cinfo->output_height, (JDIMENSION) 1); + + return (djpeg_dest_ptr) dest; +} + +#endif /* RLE_SUPPORTED */ diff --git a/Build/source/extra/jpeg/wrtarga.c b/Build/source/extra/jpeg/wrtarga.c new file mode 100644 index 00000000000..cf104d2debd --- /dev/null +++ b/Build/source/extra/jpeg/wrtarga.c @@ -0,0 +1,253 @@ +/* + * wrtarga.c + * + * Copyright (C) 1991-1996, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains routines to write output images in Targa format. + * + * These routines may need modification for non-Unix environments or + * specialized applications. As they stand, they assume output to + * an ordinary stdio stream. + * + * Based on code contributed by Lee Daniel Crocker. + */ + +#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ + +#ifdef TARGA_SUPPORTED + + +/* + * To support 12-bit JPEG data, we'd have to scale output down to 8 bits. + * This is not yet implemented. + */ + +#if BITS_IN_JSAMPLE != 8 + Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ +#endif + +/* + * The output buffer needs to be writable by fwrite(). On PCs, we must + * allocate the buffer in near data space, because we are assuming small-data + * memory model, wherein fwrite() can't reach far memory. If you need to + * process very wide images on a PC, you might have to compile in large-memory + * model, or else replace fwrite() with a putc() loop --- which will be much + * slower. + */ + + +/* Private version of data destination object */ + +typedef struct { + struct djpeg_dest_struct pub; /* public fields */ + + char *iobuffer; /* physical I/O buffer */ + JDIMENSION buffer_width; /* width of one row */ +} tga_dest_struct; + +typedef tga_dest_struct * tga_dest_ptr; + + +LOCAL(void) +write_header (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, int num_colors) +/* Create and write a Targa header */ +{ + char targaheader[18]; + + /* Set unused fields of header to 0 */ + MEMZERO(targaheader, SIZEOF(targaheader)); + + if (num_colors > 0) { + targaheader[1] = 1; /* color map type 1 */ + targaheader[5] = (char) (num_colors & 0xFF); + targaheader[6] = (char) (num_colors >> 8); + targaheader[7] = 24; /* 24 bits per cmap entry */ + } + + targaheader[12] = (char) (cinfo->output_width & 0xFF); + targaheader[13] = (char) (cinfo->output_width >> 8); + targaheader[14] = (char) (cinfo->output_height & 0xFF); + targaheader[15] = (char) (cinfo->output_height >> 8); + targaheader[17] = 0x20; /* Top-down, non-interlaced */ + + if (cinfo->out_color_space == JCS_GRAYSCALE) { + targaheader[2] = 3; /* image type = uncompressed gray-scale */ + targaheader[16] = 8; /* bits per pixel */ + } else { /* must be RGB */ + if (num_colors > 0) { + targaheader[2] = 1; /* image type = colormapped RGB */ + targaheader[16] = 8; + } else { + targaheader[2] = 2; /* image type = uncompressed RGB */ + targaheader[16] = 24; + } + } + + if (JFWRITE(dinfo->output_file, targaheader, 18) != (size_t) 18) + ERREXIT(cinfo, JERR_FILE_WRITE); +} + + +/* + * Write some pixel data. + * In this module rows_supplied will always be 1. + */ + +METHODDEF(void) +put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +/* used for unquantized full-color output */ +{ + tga_dest_ptr dest = (tga_dest_ptr) dinfo; + register JSAMPROW inptr; + register char * outptr; + register JDIMENSION col; + + inptr = dest->pub.buffer[0]; + outptr = dest->iobuffer; + for (col = cinfo->output_width; col > 0; col--) { + outptr[0] = (char) GETJSAMPLE(inptr[2]); /* RGB to BGR order */ + outptr[1] = (char) GETJSAMPLE(inptr[1]); + outptr[2] = (char) GETJSAMPLE(inptr[0]); + inptr += 3, outptr += 3; + } + (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); +} + +METHODDEF(void) +put_gray_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +/* used for grayscale OR quantized color output */ +{ + tga_dest_ptr dest = (tga_dest_ptr) dinfo; + register JSAMPROW inptr; + register char * outptr; + register JDIMENSION col; + + inptr = dest->pub.buffer[0]; + outptr = dest->iobuffer; + for (col = cinfo->output_width; col > 0; col--) { + *outptr++ = (char) GETJSAMPLE(*inptr++); + } + (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); +} + + +/* + * Write some demapped pixel data when color quantization is in effect. + * For Targa, this is only applied to grayscale data. + */ + +METHODDEF(void) +put_demapped_gray (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, + JDIMENSION rows_supplied) +{ + tga_dest_ptr dest = (tga_dest_ptr) dinfo; + register JSAMPROW inptr; + register char * outptr; + register JSAMPROW color_map0 = cinfo->colormap[0]; + register JDIMENSION col; + + inptr = dest->pub.buffer[0]; + outptr = dest->iobuffer; + for (col = cinfo->output_width; col > 0; col--) { + *outptr++ = (char) GETJSAMPLE(color_map0[GETJSAMPLE(*inptr++)]); + } + (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); +} + + +/* + * Startup: write the file header. + */ + +METHODDEF(void) +start_output_tga (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + tga_dest_ptr dest = (tga_dest_ptr) dinfo; + int num_colors, i; + FILE *outfile; + + if (cinfo->out_color_space == JCS_GRAYSCALE) { + /* Targa doesn't have a mapped grayscale format, so we will */ + /* demap quantized gray output. Never emit a colormap. */ + write_header(cinfo, dinfo, 0); + if (cinfo->quantize_colors) + dest->pub.put_pixel_rows = put_demapped_gray; + else + dest->pub.put_pixel_rows = put_gray_rows; + } else if (cinfo->out_color_space == JCS_RGB) { + if (cinfo->quantize_colors) { + /* We only support 8-bit colormap indexes, so only 256 colors */ + num_colors = cinfo->actual_number_of_colors; + if (num_colors > 256) + ERREXIT1(cinfo, JERR_TOO_MANY_COLORS, num_colors); + write_header(cinfo, dinfo, num_colors); + /* Write the colormap. Note Targa uses BGR byte order */ + outfile = dest->pub.output_file; + for (i = 0; i < num_colors; i++) { + putc(GETJSAMPLE(cinfo->colormap[2][i]), outfile); + putc(GETJSAMPLE(cinfo->colormap[1][i]), outfile); + putc(GETJSAMPLE(cinfo->colormap[0][i]), outfile); + } + dest->pub.put_pixel_rows = put_gray_rows; + } else { + write_header(cinfo, dinfo, 0); + dest->pub.put_pixel_rows = put_pixel_rows; + } + } else { + ERREXIT(cinfo, JERR_TGA_COLORSPACE); + } +} + + +/* + * Finish up at the end of the file. + */ + +METHODDEF(void) +finish_output_tga (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) +{ + /* Make sure we wrote the output file OK */ + fflush(dinfo->output_file); + if (ferror(dinfo->output_file)) + ERREXIT(cinfo, JERR_FILE_WRITE); +} + + +/* + * The module selection routine for Targa format output. + */ + +GLOBAL(djpeg_dest_ptr) +jinit_write_targa (j_decompress_ptr cinfo) +{ + tga_dest_ptr dest; + + /* Create module interface object, fill in method pointers */ + dest = (tga_dest_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + SIZEOF(tga_dest_struct)); + dest->pub.start_output = start_output_tga; + dest->pub.finish_output = finish_output_tga; + + /* Calculate output image dimensions so we can allocate space */ + jpeg_calc_output_dimensions(cinfo); + + /* Create I/O buffer. Note we make this near on a PC. */ + dest->buffer_width = cinfo->output_width * cinfo->output_components; + dest->iobuffer = (char *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (size_t) (dest->buffer_width * SIZEOF(char))); + + /* Create decompressor output buffer. */ + dest->pub.buffer = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, dest->buffer_width, (JDIMENSION) 1); + dest->pub.buffer_height = 1; + + return (djpeg_dest_ptr) dest; +} + +#endif /* TARGA_SUPPORTED */ diff --git a/Build/source/extra/unzip/api.c b/Build/source/extra/unzip/api.c new file mode 100644 index 00000000000..5a4e73abf8b --- /dev/null +++ b/Build/source/extra/unzip/api.c @@ -0,0 +1,601 @@ +/*--------------------------------------------------------------------------- + + api.c + + This module supplies an UnZip engine for use directly from C/C++ + programs. The functions are: + + UzpVer *UzpVersion(void); + void UzpVersion2(UzpVer2 *version) + int UzpMain(int argc, char *argv[]); + int UzpAltMain(int argc, char *argv[], UzpInit *init); + int UzpValidate(char *archive, int AllCodes); + void UzpFreeMemBuffer(UzpBuffer *retstr); + int UzpUnzipToMemory(char *zip, char *file, UzpOpts *optflgs, + UzpCB *UsrFuncts, UzpBuffer *retstr); + + non-WINDLL only (a special WINDLL variant is defined in windll/windll.c): + int UzpGrep(char *archive, char *file, char *pattern, int cmd, int SkipBin, + UzpCB *UsrFuncts); + + OS/2 only (for now): + int UzpFileTree(char *name, cbList(callBack), char *cpInclude[], + char *cpExclude[]); + + You must define `DLL' in order to include the API extensions. + + ---------------------------------------------------------------------------*/ + + +#ifdef OS2 +# define INCL_DOSMEMMGR +# include +#endif +#include + +#define UNZIP_INTERNAL +#include "unzip.h" +#include "version.h" +#ifdef WINDLL +# include "windll/windll.h" +#endif + +#ifdef DLL /* This source file supplies DLL-only interface code. */ + +jmp_buf dll_error_return; + +/*--------------------------------------------------------------------------- + Documented API entry points + ---------------------------------------------------------------------------*/ + + +UzpVer * UZ_EXP UzpVersion() /* should be pointer to const struct */ +{ + static UzpVer version; /* doesn't change between calls */ + + + version.structlen = UZPVER_LEN; + +#ifdef BETA + version.flag = 1; +#else + version.flag = 0; +#endif + version.betalevel = BETALEVEL; + version.date = VERSION_DATE; + +#ifdef ZLIB_VERSION + version.zlib_version = ZLIB_VERSION; + version.flag |= 2; +#else + version.zlib_version = NULL; +#endif + + /* someday each of these may have a separate patchlevel: */ + version.unzip.major = UZ_MAJORVER; + version.unzip.minor = UZ_MINORVER; + version.unzip.patchlevel = PATCHLEVEL; + + version.zipinfo.major = ZI_MAJORVER; + version.zipinfo.minor = ZI_MINORVER; + version.zipinfo.patchlevel = PATCHLEVEL; + + /* these are retained for backward compatibility only: */ + version.os2dll.major = UZ_MAJORVER; + version.os2dll.minor = UZ_MINORVER; + version.os2dll.patchlevel = PATCHLEVEL; + + version.windll.major = UZ_MAJORVER; + version.windll.minor = UZ_MINORVER; + version.windll.patchlevel = PATCHLEVEL; + + return &version; +} + +void UZ_EXP UzpVersion2(UzpVer2 *version) +{ + + version->structlen = UZPVER_LEN; + +#ifdef BETA + version->flag = 1; +#else + version->flag = 0; +#endif + strcpy(version->betalevel, BETALEVEL); + strcpy(version->date, VERSION_DATE); + +#ifdef ZLIB_VERSION + strcpy(version->zlib_version, ZLIB_VERSION); + version->flag |= 2; +#else + version->zlib_version[0] = '\0'; +#endif + + /* someday each of these may have a separate patchlevel: */ + version->unzip.major = UZ_MAJORVER; + version->unzip.minor = UZ_MINORVER; + version->unzip.patchlevel = PATCHLEVEL; + + version->zipinfo.major = ZI_MAJORVER; + version->zipinfo.minor = ZI_MINORVER; + version->zipinfo.patchlevel = PATCHLEVEL; + + /* these are retained for backward compatibility only: */ + version->os2dll.major = UZ_MAJORVER; + version->os2dll.minor = UZ_MINORVER; + version->os2dll.patchlevel = PATCHLEVEL; + + version->windll.major = UZ_MAJORVER; + version->windll.minor = UZ_MINORVER; + version->windll.patchlevel = PATCHLEVEL; +} + + + + + +#ifndef WINDLL + +int UZ_EXP UzpAltMain(int argc, char *argv[], UzpInit *init) +{ + int r, (*dummyfn)(); + + + CONSTRUCTGLOBALS(); + + if (init->structlen >= (sizeof(ulg) + sizeof(dummyfn)) && init->msgfn) + G.message = init->msgfn; + + if (init->structlen >= (sizeof(ulg) + 2*sizeof(dummyfn)) && init->inputfn) + G.input = init->inputfn; + + if (init->structlen >= (sizeof(ulg) + 3*sizeof(dummyfn)) && init->pausefn) + G.mpause = init->pausefn; + + if (init->structlen >= (sizeof(ulg) + 4*sizeof(dummyfn)) && init->userfn) + (*init->userfn)(); /* allow void* arg? */ + + r = unzip(__G__ argc, argv); + DESTROYGLOBALS() + RETURN(r); +} + +#endif /* !WINDLL */ + + + + +#ifndef __16BIT__ + +void UZ_EXP UzpFreeMemBuffer(UzpBuffer *retstr) +{ + if (retstr->strptr != NULL) { + free(retstr->strptr); + retstr->strptr = NULL; + } +} + + + + +#ifndef WINDLL + +static int UzpDLL_Init OF((zvoid *pG, UzpCB *UsrFuncts)); + +static int UzpDLL_Init(pG, UsrFuncts) +zvoid *pG; +UzpCB *UsrFuncts; +{ + int (*dummyfn)(); + + if (UsrFuncts->structlen >= (sizeof(ulg) + sizeof(dummyfn)) && + UsrFuncts->msgfn) + ((Uz_Globs *)pG)->message = UsrFuncts->msgfn; + else + return FALSE; + + if (UsrFuncts->structlen >= (sizeof(ulg) + 2*sizeof(dummyfn)) && + UsrFuncts->inputfn) + ((Uz_Globs *)pG)->input = UsrFuncts->inputfn; + + if (UsrFuncts->structlen >= (sizeof(ulg) + 3*sizeof(dummyfn)) && + UsrFuncts->pausefn) + ((Uz_Globs *)pG)->mpause = UsrFuncts->pausefn; + + if (UsrFuncts->structlen >= (sizeof(ulg) + 4*sizeof(dummyfn)) && + UsrFuncts->passwdfn) + ((Uz_Globs *)pG)->decr_passwd = UsrFuncts->passwdfn; + + if (UsrFuncts->structlen >= (sizeof(ulg) + 5*sizeof(dummyfn)) && + UsrFuncts->statrepfn) + ((Uz_Globs *)pG)->statreportcb = UsrFuncts->statrepfn; + + return TRUE; +} + + +int UZ_EXP UzpUnzipToMemory(char *zip, char *file, UzpOpts *optflgs, + UzpCB *UsrFuncts, UzpBuffer *retstr) +{ + int r; +#if (defined(WINDLL) && !defined(CRTL_CP_IS_ISO)) + char *intern_zip, *intern_file; +#endif + + CONSTRUCTGLOBALS(); +#if (defined(WINDLL) && !defined(CRTL_CP_IS_ISO)) + intern_zip = (char *)malloc(strlen(zip)+1); + if (intern_zip == NULL) { + DESTROYGLOBALS() + return PK_MEM; + } + intern_file = (char *)malloc(strlen(file)+1); + if (intern_file == NULL) { + DESTROYGLOBALS() + free(intern_zip); + return PK_MEM; + } + ISO_TO_INTERN(zip, intern_zip); + ISO_TO_INTERN(file, intern_file); +# define zip intern_zip +# define file intern_file +#endif + /* Copy those options that are meaningful for UzpUnzipToMemory, instead of + * a simple "memcpy(G.UzO, optflgs, sizeof(UzpOpts));" + */ + uO.pwdarg = optflgs->pwdarg; + uO.aflag = optflgs->aflag; + uO.C_flag = optflgs->C_flag; + uO.qflag = optflgs->qflag; /* currently, overridden in unzipToMemory */ + + if (!UzpDLL_Init((zvoid *)&G, UsrFuncts)) { + DESTROYGLOBALS(); + return PK_BADERR; + } + G.redirect_data = 1; + + r = (unzipToMemory(__G__ zip, file, retstr) <= PK_WARN); + + DESTROYGLOBALS() +#if (defined(WINDLL) && !defined(CRTL_CP_IS_ISO)) +# undef file +# undef zip + free(intern_file); + free(intern_zip); +#endif + if (!r && retstr->strlength) { + free(retstr->strptr); + retstr->strptr = NULL; + } + return r; +} +#endif /* !WINDLL */ +#endif /* !__16BIT__ */ + + + + + +#ifdef OS2DLL + +int UZ_EXP UzpFileTree(char *name, cbList(callBack), char *cpInclude[], + char *cpExclude[]) +{ + int r; + + CONSTRUCTGLOBALS(); + uO.qflag = 2; + uO.vflag = 1; + uO.C_flag = 1; + G.wildzipfn = name; + G.process_all_files = TRUE; + if (cpInclude) { + char **ptr = cpInclude; + + while (*ptr != NULL) ptr++; + G.filespecs = ptr - cpInclude; + G.pfnames = cpInclude, G.process_all_files = FALSE; + } + if (cpExclude) { + char **ptr = cpExclude; + + while (*ptr != NULL) ptr++; + G.xfilespecs = ptr - cpExclude; + G.pxnames = cpExclude, G.process_all_files = FALSE; + } + + G.processExternally = callBack; + r = process_zipfiles(__G)==0; + DESTROYGLOBALS() + return r; +} + +#endif /* OS2DLL */ + + + + +/*--------------------------------------------------------------------------- + Helper functions + ---------------------------------------------------------------------------*/ + + +void setFileNotFound(__G) + __GDEF +{ + G.filenotfound++; +} + + + +int unzipToMemory(__GPRO__ char *zip, char *file, UzpBuffer *retstr) +{ + int r; + char *incname[2]; + + G.process_all_files = FALSE; + G.extract_flag = TRUE; + uO.qflag = 2; + G.wildzipfn = zip; + + G.pfnames = incname; + incname[0] = file; + incname[1] = NULL; + G.filespecs = 1; + + r = process_zipfiles(__G); + if (retstr) { + retstr->strptr = (char *)G.redirect_buffer; + retstr->strlength = G.redirect_size; + } + return r; /* returns `PK_???' error values */ +} + + + +int redirect_outfile(__G) + __GDEF +{ + if (G.redirect_size != 0 || G.redirect_buffer != NULL) + return FALSE; + +#ifndef NO_SLIDE_REDIR + G.redirect_slide = !G.pInfo->textmode; +#endif + G.redirect_size = (G.pInfo->textmode ? + G.lrec.ucsize * lenEOL : G.lrec.ucsize); +#ifdef OS2 + DosAllocMem((void **)&G.redirect_buffer, G.redirect_size+1, + PAG_READ|PAG_WRITE|PAG_COMMIT); + G.redirect_pointer = G.redirect_buffer; +#else +#ifdef __16BIT__ + if ((ulg)((extent)G.redirect_size) != G.redirect_size) + return FALSE; +#endif + G.redirect_pointer = G.redirect_buffer = malloc(G.redirect_size+1); +#endif + if (!G.redirect_buffer) + return FALSE; + G.redirect_pointer[G.redirect_size] = '\0'; + return TRUE; +} + + + +int writeToMemory(__GPRO__ uch *rawbuf, ulg size) +{ + if (rawbuf != G.redirect_pointer) + memcpy(G.redirect_pointer,rawbuf,size); + G.redirect_pointer += size; + return 0; +} + + + + +int close_redirect(__G) + __GDEF +{ + if (G.pInfo->textmode) { + *G.redirect_pointer = '\0'; + G.redirect_size = G.redirect_pointer - G.redirect_buffer; + if ((G.redirect_buffer = + realloc(G.redirect_buffer, G.redirect_size + 1)) == NULL) { + G.redirect_size = 0; + return EOF; + } + } + return 0; +} + + + + +#ifndef __16BIT__ +#ifndef WINDLL + +/* Purpose: Determine if file in archive contains the string szSearch + + Parameters: archive = archive name + file = file contained in the archive. This cannot be + a wild card to be meaningful + pattern = string to search for + cmd = 0 - case-insensitive search + 1 - case-sensitve search + 2 - case-insensitive, whole words only + 3 - case-sensitive, whole words only + SkipBin = if true, skip any files that have control + characters other than CR, LF, or tab in the first + 100 characters. + + Returns: TRUE if a match is found + FALSE if no match is found + -1 on error + + Comments: This does not pretend to be as useful as the standard + Unix grep, which returns the strings associated with a + particular pattern, nor does it search past the first + matching occurrence of the pattern. + */ + +int UZ_EXP UzpGrep(char *archive, char *file, char *pattern, int cmd, + int SkipBin, UzpCB *UsrFuncts) +{ + int retcode = FALSE, compare; + ulg i, j, patternLen, buflen; + char * sz, *p; + UzpOpts flgopts; + UzpBuffer retstr; + + memzero(&flgopts, sizeof(UzpOpts)); /* no special options */ + + if (!UzpUnzipToMemory(archive, file, &flgopts, UsrFuncts, &retstr)) { + return -1; /* not enough memory, file not found, or other error */ + } + + if (SkipBin) { + if (retstr.strlength < 100) + buflen = retstr.strlength; + else + buflen = 100; + for (i = 0; i < buflen; i++) { + if (iscntrl(retstr.strptr[i])) { + if ((retstr.strptr[i] != 0x0A) && + (retstr.strptr[i] != 0x0D) && + (retstr.strptr[i] != 0x09)) + { + /* OK, we now think we have a binary file of some sort */ + free(retstr.strptr); + return FALSE; + } + } + } + } + + patternLen = strlen(pattern); + + if (retstr.strlength < patternLen) { + free(retstr.strptr); + return FALSE; + } + + sz = malloc(patternLen + 3); /* add two in case doing whole words only */ + if (cmd > 1) { + strcpy(sz, " "); + strcat(sz, pattern); + strcat(sz, " "); + } else + strcpy(sz, pattern); + + if ((cmd == 0) || (cmd == 2)) { + for (i = 0; i < strlen(sz); i++) + sz[i] = toupper(sz[i]); + for (i = 0; i < retstr.strlength; i++) + retstr.strptr[i] = toupper(retstr.strptr[i]); + } + + for (i = 0; i < (retstr.strlength - patternLen); i++) { + p = &retstr.strptr[i]; + compare = TRUE; + for (j = 0; j < patternLen; j++) { + /* We cannot do strncmp here, as we may be dealing with a + * "binary" file, such as a word processing file, or perhaps + * even a true executable of some sort. */ + if (p[j] != sz[j]) { + compare = FALSE; + break; + } + } + if (compare == TRUE) { + retcode = TRUE; + break; + } + } + + free(sz); + free(retstr.strptr); + + return retcode; +} +#endif /* !WINDLL */ +#endif /* !__16BIT__ */ + + + + +int UZ_EXP UzpValidate(char *archive, int AllCodes) +{ + int retcode; + CONSTRUCTGLOBALS(); + + uO.jflag = 1; + uO.tflag = 1; + uO.overwrite_none = 0; + G.extract_flag = (!uO.zipinfo_mode && + !uO.cflag && !uO.tflag && !uO.vflag && !uO.zflag +#ifdef TIMESTAMP + && !uO.T_flag +#endif + ); + + uO.qflag = 2; /* turn off all messages */ + G.fValidate = TRUE; + G.pfnames = (char **)&fnames[0]; /* assign default filename vector */ +#ifdef WINDLL + Wiz_NoPrinting(TRUE); +#endif + + if (archive == NULL) { /* something is screwed up: no filename */ + DESTROYGLOBALS(); + return PK_NOZIP; + } + + G.wildzipfn = (char *)malloc(FILNAMSIZ + 1); + strcpy(G.wildzipfn, archive); +#if (defined(WINDLL) && !defined(CRTL_CP_IS_ISO)) + _ISO_INTERN(G.wildzipfn); +#endif + + G.process_all_files = TRUE; /* for speed */ + + retcode = setjmp(dll_error_return); + + if (retcode) { +#ifdef WINDLL + Wiz_NoPrinting(FALSE); +#endif + free(G.wildzipfn); + DESTROYGLOBALS(); + return PK_BADERR; + } + + retcode = process_zipfiles(__G); + + free(G.wildzipfn); +#ifdef WINDLL + Wiz_NoPrinting(FALSE); +#endif + DESTROYGLOBALS(); + + /* PK_WARN == 1 and PK_FIND == 11. When we are just looking at an + archive, we should still be able to see the files inside it, + even if we can't decode them for some reason. + + We also still want to be able to get at files even if there is + something odd about the zip archive, hence allow PK_WARN, + PK_FIND, IZ_UNSUP as well as PK_ERR + */ + + if (AllCodes) + return retcode; + + if ((retcode == PK_OK) || (retcode == PK_WARN) || (retcode == PK_ERR) || + (retcode == IZ_UNSUP) || (retcode == PK_FIND)) + return TRUE; + else + return FALSE; +} + +#endif /* DLL */ diff --git a/Build/source/extra/unzip/consts.h b/Build/source/extra/unzip/consts.h new file mode 100644 index 00000000000..f418a6c8fe1 --- /dev/null +++ b/Build/source/extra/unzip/consts.h @@ -0,0 +1,46 @@ +/*--------------------------------------------------------------------------- + + consts.h + + This file contains global, initialized variables that never change. It is + included by unzip.c and windll/windll.c. + + ---------------------------------------------------------------------------*/ + + +/* And'ing with mask_bits[n] masks the lower n bits */ +ZCONST ush near mask_bits[] = { + 0x0000, + 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, + 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff +}; + +ZCONST char Far VersionDate[] = VERSION_DATE; /* now defined in version.h */ + +#ifndef SFX + ZCONST char Far EndSigMsg[] = + "\nnote: didn't find end-of-central-dir signature at end of central dir.\n"; +#endif + +ZCONST char Far CentSigMsg[] = + "error: expected central file header signature not found (file #%u).\n"; +ZCONST char Far SeekMsg[] = + "error [%s]: attempt to seek before beginning of zipfile\n%s"; +ZCONST char Far FilenameNotMatched[] = "caution: filename not matched: %s\n"; +ZCONST char Far ExclFilenameNotMatched[] = + "caution: excluded filename not matched: %s\n"; + +#ifdef VMS + ZCONST char Far ReportMsg[] = "\ + (please check that you have transferred or created the zipfile in the\n\ + appropriate BINARY mode--this includes ftp, Kermit, AND unzip'd zipfiles)\n"; +#else + ZCONST char Far ReportMsg[] = "\ + (please check that you have transferred or created the zipfile in the\n\ + appropriate BINARY mode and that you have compiled UnZip properly)\n"; +#endif + +#ifndef SFX + ZCONST char Far Zipnfo[] = "zipinfo"; + ZCONST char Far CompiledWith[] = "Compiled with %s%s for %s%s%s%s.\n\n"; +#endif diff --git a/Build/source/extra/unzip/crc32.c b/Build/source/extra/unzip/crc32.c new file mode 100644 index 00000000000..ff2daa0c088 --- /dev/null +++ b/Build/source/extra/unzip/crc32.c @@ -0,0 +1,56 @@ +/* crc32.c -- compute the CRC-32 of a data stream + * Copyright (C) 1995 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* $Id: crc32.c,v 1.1 1999/02/01 04:22:50 mik Exp $ */ + +#define __CRC32_C /* identifies this source module */ + +#include "zip.h" + +#ifndef USE_ZLIB +#ifndef ASM_CRC + +#ifndef ZCONST +# define ZCONST const +#endif + +#ifdef CRC32 +# undef CRC32 +#endif +#define CRC32(c, b) (crc_table[((int)(c) ^ (b)) & 0xff] ^ ((c) >> 8)) +#define DO1(buf) crc = CRC32(crc, *buf++) +#define DO2(buf) DO1(buf); DO1(buf) +#define DO4(buf) DO2(buf); DO2(buf) +#define DO8(buf) DO4(buf); DO4(buf) + +/* ========================================================================= */ +ulg crc32(crc, buf, len) + register ulg crc; /* crc shift register */ + register ZCONST uch *buf; /* pointer to bytes to pump through */ + extent len; /* number of bytes in buf[] */ +/* Run a set of bytes through the crc shift register. If buf is a NULL + pointer, then initialize the crc shift register contents instead. + Return the current crc in either case. */ +{ + register ZCONST ulg near *crc_table; + + if (buf == NULL) return 0L; + + crc_table = get_crc_table(); + + crc = crc ^ 0xffffffffL; +#ifndef NO_UNROLLED_LOOPS + while (len >= 8) { + DO8(buf); + len -= 8; + } +#endif + if (len) do { + DO1(buf); + } while (--len); + return crc ^ 0xffffffffL; /* (instead of ~c for 64-bit machines) */ +} +#endif /* !ASM_CRC */ +#endif /* !USE_ZLIB */ diff --git a/Build/source/extra/unzip/crctab.c b/Build/source/extra/unzip/crctab.c new file mode 100644 index 00000000000..4eb6461c23b --- /dev/null +++ b/Build/source/extra/unzip/crctab.c @@ -0,0 +1,219 @@ +/* crctab.c -- supply the CRC table needed for CRC-32 calculations. + * Copyright (C) 1995 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* $Id: crctab.c,v 1.1 1999/02/01 04:22:50 mik Exp $ */ + +/* + Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + x (which is shifting right by one and adding x^32 mod p if the bit shifted + out is a one). We start with the highest power (least significant bit) of + q and repeat for all eight bits of q. + + The table is simply the CRC of all possible eight bit values. This is all + the information needed to generate CRC's on data a byte at a time for all + combinations of CRC register values and incoming bytes. +*/ + +#define __CRCTAB_C /* identifies this source module */ + +#include "zip.h" + +#if (!defined(USE_ZLIB) || defined(USE_OWN_CRCTAB)) + +#ifndef ZCONST +# define ZCONST const +#endif + +#ifdef DYNAMIC_CRC_TABLE + +/* ========================================================================= + * Make the crc table. This function is needed only if you want to compute + * the table dynamically. + */ + +local void make_crc_table OF((void)); + +#if (defined(DYNALLOC_CRCTAB) && defined(REENTRANT)) + error: Dynamic allocation of CRC table not safe with reentrant code. +#endif /* DYNALLOC_CRCTAB && REENTRANT */ + +#ifdef DYNALLOC_CRCTAB + local ulg near *crc_table = NULL; +# if 0 /* not used, since sizeof("near *") <= sizeof(int) */ + /* Use this section when access to a "local int" is faster than access to + a "local pointer" (e.g.: i86 16bit code with far pointers). */ + local int crc_table_empty = 1; +# define CRC_TABLE_IS_EMPTY (crc_table_empty != 0) +# define MARK_CRCTAB_FILLED crc_table_empty = 0 +# define MARK_CRCTAB_EMPTY crc_table_empty = 1 +# else + /* Use this section on systems where the size of pointers and ints is + equal (e.g.: all 32bit systems). */ +# define CRC_TABLE_IS_EMPTY (crc_table == NULL) +# define MARK_CRCTAB_FILLED crc_table = crctab_p +# define MARK_CRCTAB_EMPTY crc_table = NULL +# endif +#else /* !DYNALLOC_CRCTAB */ + local ulg near crc_table[256]; + local int crc_table_empty = 1; +# define CRC_TABLE_IS_EMPTY (crc_table_empty != 0) +# define MARK_CRCTAB_FILLED crc_table_empty = 0 +#endif /* ?DYNALLOC_CRCTAB */ + + +local void make_crc_table() +{ + ulg c; /* crc shift register */ + int n; /* counter for all possible eight bit values */ + int k; /* byte being shifted into crc apparatus */ +#ifdef DYNALLOC_CRCTAB + ulg near *crctab_p; /* temporary pointer to allocated crc_table area */ +#else /* !DYNALLOC_CRCTAB */ +# define crctab_p crc_table +#endif /* DYNALLOC_CRCTAB */ + +#ifdef COMPUTE_XOR_PATTERN + /* This piece of code has been left here to explain how the XOR pattern + * used in the creation of the crc_table values can be recomputed. + * For production versions of this function, it is more efficient to + * supply the resultant pattern at compile time. + */ + ulg xor; /* polynomial exclusive-or pattern */ + /* terms of polynomial defining this crc (except x^32): */ + static uch p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; + + /* make exclusive-or pattern from polynomial (0xedb88320L) */ + xor = 0L; + for (i = 0; i < sizeof(p)/sizeof(uch); i++) + xor |= 1L << (31 - p[i]); +#else +# define xor 0xedb88320L +#endif + +#ifdef DYNALLOC_CRCTAB + crctab_p = (ulg near *) nearmalloc (256*sizeof(ulg)); + if (crctab_p == NULL) { + ziperr(ZE_MEM, "crc_table allocation"); + } +#endif /* DYNALLOC_CRCTAB */ + + for (n = 0; n < 256; n++) { + c = (ulg)n; + for (k = 8; k; k--) + c = c & 1 ? xor ^ (c >> 1) : c >> 1; + crctab_p[n] = c; + } + MARK_CRCTAB_FILLED; +} + +#else /* !DYNAMIC_CRC_TABLE */ + +#ifdef DYNALLOC_CRCTAB + error: Inconsistent flags, DYNALLOC_CRCTAB without DYNAMIC_CRC_TABLE. +#endif + +/* ======================================================================== + * Table of CRC-32's of all single-byte values (made by make_crc_table) + */ +local ZCONST ulg near crc_table[256] = { + 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, + 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, + 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, + 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, + 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, + 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, + 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, + 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, + 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, + 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, + 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, + 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, + 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, + 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, + 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, + 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, + 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, + 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, + 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, + 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, + 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, + 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, + 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, + 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, + 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, + 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, + 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, + 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, + 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, + 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, + 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, + 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, + 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, + 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, + 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, + 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, + 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, + 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, + 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, + 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, + 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, + 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, + 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, + 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, + 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, + 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, + 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, + 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, + 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, + 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, + 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, + 0x2d02ef8dL +}; +#endif /* ?DYNAMIC_CRC_TABLE */ + +/* use "OF((void))" here to work around a Borland TC++ 1.0 problem */ +#ifdef USE_ZLIB +ZCONST uLongf *get_crc_table OF((void)) +#else +ZCONST ulg near *get_crc_table OF((void)) +#endif +{ +#ifdef DYNAMIC_CRC_TABLE + if (CRC_TABLE_IS_EMPTY) + make_crc_table(); +#endif +#ifdef USE_ZLIB + return (ZCONST uLongf *)crc_table; +#else + return (ZCONST ulg near *)crc_table; +#endif +} + +#ifdef DYNALLOC_CRCTAB +void free_crc_table() +{ + if (!CRC_TABLE_IS_EMPTY) + { + nearfree((ulg near *)crc_table); + MARK_CRCTAB_EMPTY; + } +} +#endif + +#endif /* !USE_ZLIB || USE_OWN_CRCTAB */ diff --git a/Build/source/extra/unzip/crypt.c b/Build/source/extra/unzip/crypt.c new file mode 100644 index 00000000000..0dbe227f810 --- /dev/null +++ b/Build/source/extra/unzip/crypt.c @@ -0,0 +1,12 @@ +/* + crypt.c (dummy version) by Info-ZIP. Last revised: 15 Aug 98 + + This is a non-functional version of Info-ZIP's crypt.c encryption/ + decryption code for Zip, ZipCloak, UnZip and fUnZip. This file is + not copyrighted and may be distributed freely. :-) See the "WHERE" + file for sites from which to obtain the full encryption/decryption + sources (zcrypt28.zip or later). + */ + +/* something "externally visible" to shut up compiler/linker warnings */ +int zcr_dummy; diff --git a/Build/source/extra/unzip/crypt.h b/Build/source/extra/unzip/crypt.h new file mode 100644 index 00000000000..d462f2d7ba5 --- /dev/null +++ b/Build/source/extra/unzip/crypt.h @@ -0,0 +1,24 @@ +/* + crypt.h (dummy version) by Info-ZIP. Last revised: 15 Aug 98 + + This is a non-functional version of Info-ZIP's crypt.h encryption/ + decryption header file for Zip, ZipCloak, UnZip and fUnZip. This + file is not copyrighted and may be distributed without restriction. + See the "WHERE" file for sites from which to obtain the full crypt + sources (zcrypt28.zip or later). + */ + +#ifndef __crypt_h /* don't include more than once */ +#define __crypt_h + +#ifdef CRYPT +# undef CRYPT +#endif +#define CRYPT 0 /* dummy version */ + +#define zencode +#define zdecode + +#define zfwrite fwrite + +#endif /* !__crypt_h */ diff --git a/Build/source/extra/unzip/ebcdic.h b/Build/source/extra/unzip/ebcdic.h new file mode 100644 index 00000000000..db2e976b7fa --- /dev/null +++ b/Build/source/extra/unzip/ebcdic.h @@ -0,0 +1,272 @@ +/*--------------------------------------------------------------------------- + + ebcdic.h + + The CECP 1047 (Extended de-facto EBCDIC) <-> ISO 8859-1 conversion tables, + from ftp://aix1.segi.ulg.ac.be/pub/docs/iso8859/iso8859.networking + + NOTES: + (OS/390 port 12/97) + These table no longer represent the standard mappings (for example in the + OS/390 iconv utility). In order to follow current standards I remapped + ebcdic x0a to ascii x15 and + ebcdic x85 to ascii x25 (and vice-versa) + Without these changes, newlines in auto-convert text files appeared + as literal \045. + I'm not sure what effect this remap would have on the MVS and CMS ports, so + I ifdef'd these changes. Hopefully these ifdef's can be removed when the + MVS/CMS folks test the new mappings. + + Christian Spieler , 27-Apr-1998 + The problem mentioned by Paul von Behren was already observed previously + on VM/CMS, during the preparation of the CMS&MVS port of UnZip 5.20 in + 1996. At that point, the ebcdic tables were not changed since they seemed + to be an adopted standard (to my knowledge, these tables are still used + as presented in mainfraime KERMIT). Instead, the "end-of-line" conversion + feature of Zip's and UnZip's "text-translation" mode was used to force + correct mappings between ASCII and EBCDIC newline markers. + Before interchanging the ASCII mappings of the EBCDIC control characters + "NL" 0x25 and "LF" 0x15 according to the OS/390 setting, we have to + make sure that EBCDIC 0x15 is never used as line termination. + + ---------------------------------------------------------------------------*/ + +#ifndef __ebcdic_h /* prevent multiple inclusions */ +#define __ebcdic_h + + +#ifndef ZCONST +# define ZCONST const +#endif + +#ifdef EBCDIC +#ifndef MTS /* MTS uses a slightly "special" EBCDIC code page */ + +ZCONST uch ebcdic[] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F, /* 00 - 07 */ +#ifdef OS390 + 0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ +#else + 0x16, 0x05, 0x25, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ +#endif + 0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26, /* 10 - 17 */ + 0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ + 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, /* 20 - 27 */ + 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61, /* 28 - 2F */ + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 30 - 37 */ + 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F, /* 38 - 3F */ + 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 40 - 47 */ + 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, /* 48 - 4F */ + 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, /* 50 - 57 */ + 0xE7, 0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D, /* 58 - 5F */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60 - 67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 68 - 6F */ + 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, /* 70 - 77 */ + 0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07, /* 78 - 7F */ +#ifdef OS390 + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x06, 0x17, /* 80 - 87 */ +#else + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 80 - 87 */ +#endif + 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x09, 0x0A, 0x1B, /* 88 - 8F */ + 0x30, 0x31, 0x1A, 0x33, 0x34, 0x35, 0x36, 0x08, /* 90 - 97 */ + 0x38, 0x39, 0x3A, 0x3B, 0x04, 0x14, 0x3E, 0xFF, /* 98 - 9F */ + 0x41, 0xAA, 0x4A, 0xB1, 0x9F, 0xB2, 0x6A, 0xB5, /* A0 - A7 */ + 0xBB, 0xB4, 0x9A, 0x8A, 0xB0, 0xCA, 0xAF, 0xBC, /* A8 - AF */ + 0x90, 0x8F, 0xEA, 0xFA, 0xBE, 0xA0, 0xB6, 0xB3, /* B0 - B7 */ + 0x9D, 0xDA, 0x9B, 0x8B, 0xB7, 0xB8, 0xB9, 0xAB, /* B8 - BF */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9E, 0x68, /* C0 - C7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* C8 - CF */ + 0xAC, 0x69, 0xED, 0xEE, 0xEB, 0xEF, 0xEC, 0xBF, /* D0 - D7 */ + 0x80, 0xFD, 0xFE, 0xFB, 0xFC, 0xBA, 0xAE, 0x59, /* D8 - DF */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9C, 0x48, /* E0 - E7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* E8 - EF */ + 0x8C, 0x49, 0xCD, 0xCE, 0xCB, 0xCF, 0xCC, 0xE1, /* F0 - F7 */ + 0x70, 0xDD, 0xDE, 0xDB, 0xDC, 0x8D, 0x8E, 0xDF /* F8 - FF */ +}; + +#if (defined(ZIP) || CRYPT) +ZCONST uch ascii[] = { + 0x00, 0x01, 0x02, 0x03, 0x9C, 0x09, 0x86, 0x7F, /* 00 - 07 */ + 0x97, 0x8D, 0x8E, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ +#ifdef OS390 + 0x10, 0x11, 0x12, 0x13, 0x9D, 0x0A, 0x08, 0x87, /* 10 - 17 */ +#else + 0x10, 0x11, 0x12, 0x13, 0x9D, 0x85, 0x08, 0x87, /* 10 - 17 */ +#endif + 0x18, 0x19, 0x92, 0x8F, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ +#ifdef OS390 + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x17, 0x1B, /* 20 - 27 */ +#else + 0x80, 0x81, 0x82, 0x83, 0x84, 0x0A, 0x17, 0x1B, /* 20 - 27 */ +#endif + 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x05, 0x06, 0x07, /* 28 - 2F */ + 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30 - 37 */ + 0x98, 0x99, 0x9A, 0x9B, 0x14, 0x15, 0x9E, 0x1A, /* 38 - 3F */ + 0x20, 0xA0, 0xE2, 0xE4, 0xE0, 0xE1, 0xE3, 0xE5, /* 40 - 47 */ + 0xE7, 0xF1, 0xA2, 0x2E, 0x3C, 0x28, 0x2B, 0x7C, /* 48 - 4F */ + 0x26, 0xE9, 0xEA, 0xEB, 0xE8, 0xED, 0xEE, 0xEF, /* 50 - 57 */ + 0xEC, 0xDF, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0x5E, /* 58 - 5F */ + 0x2D, 0x2F, 0xC2, 0xC4, 0xC0, 0xC1, 0xC3, 0xC5, /* 60 - 67 */ + 0xC7, 0xD1, 0xA6, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, /* 68 - 6F */ + 0xF8, 0xC9, 0xCA, 0xCB, 0xC8, 0xCD, 0xCE, 0xCF, /* 70 - 77 */ + 0xCC, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, /* 78 - 7F */ + 0xD8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80 - 87 */ + 0x68, 0x69, 0xAB, 0xBB, 0xF0, 0xFD, 0xFE, 0xB1, /* 88 - 8F */ + 0xB0, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, /* 90 - 97 */ + 0x71, 0x72, 0xAA, 0xBA, 0xE6, 0xB8, 0xC6, 0xA4, /* 98 - 9F */ + 0xB5, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* A0 - A7 */ + 0x79, 0x7A, 0xA1, 0xBF, 0xD0, 0x5B, 0xDE, 0xAE, /* A8 - AF */ + 0xAC, 0xA3, 0xA5, 0xB7, 0xA9, 0xA7, 0xB6, 0xBC, /* B0 - B7 */ + 0xBD, 0xBE, 0xDD, 0xA8, 0xAF, 0x5D, 0xB4, 0xD7, /* B8 - BF */ + 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* C0 - C7 */ + 0x48, 0x49, 0xAD, 0xF4, 0xF6, 0xF2, 0xF3, 0xF5, /* C8 - CF */ + 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, /* D0 - D7 */ + 0x51, 0x52, 0xB9, 0xFB, 0xFC, 0xF9, 0xFA, 0xFF, /* D8 - DF */ + 0x5C, 0xF7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* E0 - E7 */ + 0x59, 0x5A, 0xB2, 0xD4, 0xD6, 0xD2, 0xD3, 0xD5, /* E8 - EF */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* F0 - F7 */ + 0x38, 0x39, 0xB3, 0xDB, 0xDC, 0xD9, 0xDA, 0x9F /* F8 - FF */ +}; +#endif /* ZIP || CRYPT */ + +#else /* MTS */ + +/* + * This is the MTS ASCII->EBCDIC translation table. It provides a 1-1 + * translation from ISO 8859/1 8-bit ASCII to IBM Code Page 37 EBCDIC. + */ + +ZCONST uch ebcdic[] = { + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F, /* 00 - 07 */ + 0x16, 0x05, 0x25, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ + 0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26, /* 10 - 17 */ + 0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ + 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, /* 20 - 27 */ + 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61, /* 28 - 2F */ + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 30 - 37 */ + 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F, /* 38 - 3F */ + 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 40 - 47 */ + 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, /* 48 - 4F */ + 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, /* 50 - 57 */ + 0xE7, 0xE8, 0xE9, 0xBA, 0xE0, 0xBB, 0xB0, 0x6D, /* 58 - 5F */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60 - 67 */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 68 - 6F */ + 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, /* 70 - 77 */ + 0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07, /* 78 - 7F */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 80 - 87 */ + 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x09, 0x0A, 0x1B, /* 88 - 8F */ + 0x30, 0x31, 0x1A, 0x33, 0x34, 0x35, 0x36, 0x08, /* 90 - 97 */ + 0x38, 0x39, 0x3A, 0x3B, 0x04, 0x14, 0x3E, 0xFF, /* 98 - 9F */ + 0x41, 0xAA, 0x4A, 0xB1, 0x9F, 0xB2, 0x6A, 0xB5, /* A0 - A7 */ + 0xBD, 0xB4, 0x9A, 0x8A, 0x5F, 0xCA, 0xAF, 0xBC, /* A8 - AF */ + 0x90, 0x8F, 0xEA, 0xFA, 0xBE, 0xA0, 0xB6, 0xB3, /* B0 - B7 */ + 0x9D, 0xDA, 0x9B, 0x8B, 0xB7, 0xB8, 0xB9, 0xAB, /* B8 - BF */ + 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9E, 0x68, /* C0 - C7 */ + 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* C8 - CF */ + 0xAC, 0x69, 0xED, 0xEE, 0xEB, 0xEF, 0xEC, 0xBF, /* D0 - D7 */ + 0x80, 0xFD, 0xFE, 0xFB, 0xFC, 0xAD, 0xAE, 0x59, /* D8 - DF */ + 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9C, 0x48, /* E0 - E7 */ + 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* E8 - EF */ + 0x8C, 0x49, 0xCD, 0xCE, 0xCB, 0xCF, 0xCC, 0xE1, /* F0 - F7 */ + 0x70, 0xDD, 0xDE, 0xDB, 0xDC, 0x8D, 0x8E, 0xDF /* F8 - FF */ +}; + +#if (defined(ZIP) || CRYPT) +ZCONST uch ascii[] = { + 0x00, 0x01, 0x02, 0x03, 0x9C, 0x09, 0x86, 0x7F, /* 00 - 07 */ + 0x97, 0x8D, 0x8E, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ + 0x10, 0x11, 0x12, 0x13, 0x9D, 0x85, 0x08, 0x87, /* 10 - 17 */ + 0x18, 0x19, 0x92, 0x8F, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x0A, 0x17, 0x1B, /* 20 - 27 */ + 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x05, 0x06, 0x07, /* 28 - 2F */ + 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30 - 37 */ + 0x98, 0x99, 0x9A, 0x9B, 0x14, 0x15, 0x9E, 0x1A, /* 38 - 3F */ + 0x20, 0xA0, 0xE2, 0xE4, 0xE0, 0xE1, 0xE3, 0xE5, /* 40 - 47 */ + 0xE7, 0xF1, 0xA2, 0x2E, 0x3C, 0x28, 0x2B, 0x7C, /* 48 - 4F */ + 0x26, 0xE9, 0xEA, 0xEB, 0xE8, 0xED, 0xEE, 0xEF, /* 50 - 57 */ + 0xEC, 0xDF, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0xAC, /* 58 - 5F */ + 0x2D, 0x2F, 0xC2, 0xC4, 0xC0, 0xC1, 0xC3, 0xC5, /* 60 - 67 */ + 0xC7, 0xD1, 0xA6, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, /* 68 - 6F */ + 0xF8, 0xC9, 0xCA, 0xCB, 0xC8, 0xCD, 0xCE, 0xCF, /* 70 - 77 */ + 0xCC, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, /* 78 - 7F */ + 0xD8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80 - 87 */ + 0x68, 0x69, 0xAB, 0xBB, 0xF0, 0xFD, 0xFE, 0xB1, /* 88 - 8F */ + 0xB0, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, /* 90 - 97 */ + 0x71, 0x72, 0xAA, 0xBA, 0xE6, 0xB8, 0xC6, 0xA4, /* 98 - 9F */ + 0xB5, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* A0 - A7 */ + 0x79, 0x7A, 0xA1, 0xBF, 0xD0, 0xDD, 0xDE, 0xAE, /* A8 - AF */ + 0x5E, 0xA3, 0xA5, 0xB7, 0xA9, 0xA7, 0xB6, 0xBC, /* B0 - B7 */ + 0xBD, 0xBE, 0x5B, 0x5D, 0xAF, 0xA8, 0xB4, 0xD7, /* B8 - BF */ + 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* C0 - C7 */ + 0x48, 0x49, 0xAD, 0xF4, 0xF6, 0xF2, 0xF3, 0xF5, /* C8 - CF */ + 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, /* D0 - D7 */ + 0x51, 0x52, 0xB9, 0xFB, 0xFC, 0xF9, 0xFA, 0xFF, /* D8 - DF */ + 0x5C, 0xF7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* E0 - E7 */ + 0x59, 0x5A, 0xB2, 0xD4, 0xD6, 0xD2, 0xD3, 0xD5, /* E8 - EF */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* F0 - F7 */ + 0x38, 0x39, 0xB3, 0xDB, 0xDC, 0xD9, 0xDA, 0x9F /* F8 - FF */ +}; +#endif /* ZIP || CRYPT */ + +#endif /* ?MTS */ +#endif /* EBCDIC */ + +/*--------------------------------------------------------------------------- + + The following conversion tables translate between IBM PC CP 850 + (OEM codepage) and the "Western Europe & America" Windows codepage 1252. + The Windows codepage 1252 contains the ISO 8859-1 "Latin 1" codepage, + with some additional printable characters in the range (0x80 - 0x9F), + that is reserved to control codes in the ISO 8859-1 character table. + + The ISO <--> OEM conversion tables were constructed with the help + of the WIN32 (Win16?) API's OemToAnsi() and AnsiToOem() conversion + functions and have been checked against the CP850 and LATIN1 tables + provided in the MS-Kermit 3.14 distribution. + + ---------------------------------------------------------------------------*/ + +#ifdef IZ_ISO2OEM_ARRAY +ZCONST uch Far iso2oem[] = { + 0x3F, 0x3F, 0x27, 0x9F, 0x22, 0x2E, 0xC5, 0xCE, /* 80 - 87 */ + 0x5E, 0x25, 0x53, 0x3C, 0x4F, 0x3F, 0x3F, 0x3F, /* 88 - 8F */ + 0x3F, 0x27, 0x27, 0x22, 0x22, 0x07, 0x2D, 0x2D, /* 90 - 97 */ + 0x7E, 0x54, 0x73, 0x3E, 0x6F, 0x3F, 0x3F, 0x59, /* 98 - 9F */ + 0xFF, 0xAD, 0xBD, 0x9C, 0xCF, 0xBE, 0xDD, 0xF5, /* A0 - A7 */ + 0xF9, 0xB8, 0xA6, 0xAE, 0xAA, 0xF0, 0xA9, 0xEE, /* A8 - AF */ + 0xF8, 0xF1, 0xFD, 0xFC, 0xEF, 0xE6, 0xF4, 0xFA, /* B0 - B7 */ + 0xF7, 0xFB, 0xA7, 0xAF, 0xAC, 0xAB, 0xF3, 0xA8, /* B8 - BF */ + 0xB7, 0xB5, 0xB6, 0xC7, 0x8E, 0x8F, 0x92, 0x80, /* C0 - C7 */ + 0xD4, 0x90, 0xD2, 0xD3, 0xDE, 0xD6, 0xD7, 0xD8, /* C8 - CF */ + 0xD1, 0xA5, 0xE3, 0xE0, 0xE2, 0xE5, 0x99, 0x9E, /* D0 - D7 */ + 0x9D, 0xEB, 0xE9, 0xEA, 0x9A, 0xED, 0xE8, 0xE1, /* D8 - DF */ + 0x85, 0xA0, 0x83, 0xC6, 0x84, 0x86, 0x91, 0x87, /* E0 - E7 */ + 0x8A, 0x82, 0x88, 0x89, 0x8D, 0xA1, 0x8C, 0x8B, /* E8 - EF */ + 0xD0, 0xA4, 0x95, 0xA2, 0x93, 0xE4, 0x94, 0xF6, /* F0 - F7 */ + 0x9B, 0x97, 0xA3, 0x96, 0x81, 0xEC, 0xE7, 0x98 /* F8 - FF */ +}; +#endif /* IZ_ISO2OEM_ARRAY */ + +#ifdef IZ_OEM2ISO_ARRAY +ZCONST uch Far oem2iso[] = { + 0xC7, 0xFC, 0xE9, 0xE2, 0xE4, 0xE0, 0xE5, 0xE7, /* 80 - 87 */ + 0xEA, 0xEB, 0xE8, 0xEF, 0xEE, 0xEC, 0xC4, 0xC5, /* 88 - 8F */ + 0xC9, 0xE6, 0xC6, 0xF4, 0xF6, 0xF2, 0xFB, 0xF9, /* 90 - 97 */ + 0xFF, 0xD6, 0xDC, 0xF8, 0xA3, 0xD8, 0xD7, 0x83, /* 98 - 9F */ + 0xE1, 0xED, 0xF3, 0xFA, 0xF1, 0xD1, 0xAA, 0xBA, /* A0 - A7 */ + 0xBF, 0xAE, 0xAC, 0xBD, 0xBC, 0xA1, 0xAB, 0xBB, /* A8 - AF */ + 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xC1, 0xC2, 0xC0, /* B0 - B7 */ + 0xA9, 0xA6, 0xA6, 0x2B, 0x2B, 0xA2, 0xA5, 0x2B, /* B8 - BF */ + 0x2B, 0x2D, 0x2D, 0x2B, 0x2D, 0x2B, 0xE3, 0xC3, /* C0 - C7 */ + 0x2B, 0x2B, 0x2D, 0x2D, 0xA6, 0x2D, 0x2B, 0xA4, /* C8 - CF */ + 0xF0, 0xD0, 0xCA, 0xCB, 0xC8, 0x69, 0xCD, 0xCE, /* D0 - D7 */ + 0xCF, 0x2B, 0x2B, 0xA6, 0x5F, 0xA6, 0xCC, 0xAF, /* D8 - DF */ + 0xD3, 0xDF, 0xD4, 0xD2, 0xF5, 0xD5, 0xB5, 0xFE, /* E0 - E7 */ + 0xDE, 0xDA, 0xDB, 0xD9, 0xFD, 0xDD, 0xAF, 0xB4, /* E8 - EF */ + 0xAD, 0xB1, 0x3D, 0xBE, 0xB6, 0xA7, 0xF7, 0xB8, /* F0 - F7 */ + 0xB0, 0xA8, 0xB7, 0xB9, 0xB3, 0xB2, 0xA6, 0xA0 /* F8 - FF */ +}; +#endif /* IZ_OEM2ISO_ARRAY */ + +#endif /* __ebcdic_h */ diff --git a/Build/source/extra/unzip/explode.c b/Build/source/extra/unzip/explode.c new file mode 100644 index 00000000000..c1a8f80032a --- /dev/null +++ b/Build/source/extra/unzip/explode.c @@ -0,0 +1,871 @@ +/* explode.c -- put in the public domain by Mark Adler + version c15, 6 July 1996 */ + + +/* You can do whatever you like with this source file, though I would + prefer that if you modify it and redistribute it that you include + comments to that effect with your name and the date. Thank you. + + History: + vers date who what + ---- --------- -------------- ------------------------------------ + c1 30 Mar 92 M. Adler explode that uses huft_build from inflate + (this gives over a 70% speed improvement + over the original unimplode.c, which + decoded a bit at a time) + c2 4 Apr 92 M. Adler fixed bug for file sizes a multiple of 32k. + c3 10 Apr 92 M. Adler added a little memory tracking if DEBUG + c4 11 Apr 92 M. Adler added NOMEMCPY do kill use of memcpy() + c5 21 Apr 92 M. Adler added the WSIZE #define to allow reducing + the 32K window size for specialized + applications. + c6 31 May 92 M. Adler added typecasts to eliminate some warnings + c7 27 Jun 92 G. Roelofs added more typecasts. + c8 17 Oct 92 G. Roelofs changed ULONG/UWORD/byte to ulg/ush/uch. + c9 19 Jul 93 J. Bush added more typecasts (to return values); + made l[256] array static for Amiga. + c10 8 Oct 93 G. Roelofs added used_csize for diagnostics; added + buf and unshrink arguments to flush(); + undef'd various macros at end for Turbo C; + removed NEXTBYTE macro (now in unzip.h) + and bytebuf variable (not used); changed + memset() to memzero(). + c11 9 Jan 94 M. Adler fixed incorrect used_csize calculation. + c12 9 Apr 94 G. Roelofs fixed split comments on preprocessor lines + to avoid bug in Encore compiler. + c13 25 Aug 94 M. Adler fixed distance-length comment (orig c9 fix) + c14 22 Nov 95 S. Maxwell removed unnecessary "static" on auto array + c15 6 Jul 96 W. Haidinger added ulg typecasts to flush() calls. + c16 8 Feb 98 C. Spieler added ZCONST modifiers to const tables + and #ifdef DEBUG around debugging code. + c16b 25 Mar 98 C. Spieler modified DLL code for slide redirection. + */ + + +/* + Explode imploded (PKZIP method 6 compressed) data. This compression + method searches for as much of the current string of bytes (up to a length + of ~320) in the previous 4K or 8K bytes. If it doesn't find any matches + (of at least length 2 or 3), it codes the next byte. Otherwise, it codes + the length of the matched string and its distance backwards from the + current position. Single bytes ("literals") are preceded by a one (a + single bit) and are either uncoded (the eight bits go directly into the + compressed stream for a total of nine bits) or Huffman coded with a + supplied literal code tree. If literals are coded, then the minimum match + length is three, otherwise it is two. + + There are therefore four kinds of imploded streams: 8K search with coded + literals (min match = 3), 4K search with coded literals (min match = 3), + 8K with uncoded literals (min match = 2), and 4K with uncoded literals + (min match = 2). The kind of stream is identified in two bits of a + general purpose bit flag that is outside of the compressed stream. + + Distance-length pairs for matched strings are preceded by a zero bit (to + distinguish them from literals) and are always coded. The distance comes + first and is either the low six (4K) or low seven (8K) bits of the + distance (uncoded), followed by the high six bits of the distance coded. + Then the length is six bits coded (0..63 + min match length), and if the + maximum such length is coded, then it's followed by another eight bits + (uncoded) to be added to the coded length. This gives a match length + range of 2..320 or 3..321 bytes. + + The literal, length, and distance codes are all represented in a slightly + compressed form themselves. What is sent are the lengths of the codes for + each value, which is sufficient to construct the codes. Each byte of the + code representation is the code length (the low four bits representing + 1..16), and the number of values sequentially with that length (the high + four bits also representing 1..16). There are 256 literal code values (if + literals are coded), 64 length code values, and 64 distance code values, + in that order at the beginning of the compressed stream. Each set of code + values is preceded (redundantly) with a byte indicating how many bytes are + in the code description that follows, in the range 1..256. + + The codes themselves are decoded using tables made by huft_build() from + the bit lengths. That routine and its comments are in the inflate.c + module. + */ + +#define UNZIP_INTERNAL +#include "unzip.h" /* must supply slide[] (uch) array and NEXTBYTE macro */ + +#ifndef WSIZE +# define WSIZE 0x8000 /* window size--must be a power of two, and */ +#endif /* at least 8K for zip's implode method */ + +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) +# define wsize G._wsize +#else +# define wsize WSIZE +#endif + +/* routines here */ +static int get_tree OF((__GPRO__ unsigned *l, unsigned n)); +static int explode_lit8 OF((__GPRO__ struct huft *tb, struct huft *tl, + struct huft *td, int bb, int bl, int bd)); +static int explode_lit4 OF((__GPRO__ struct huft *tb, struct huft *tl, + struct huft *td, int bb, int bl, int bd)); +static int explode_nolit8 OF((__GPRO__ struct huft *tl, struct huft *td, + int bl, int bd)); +static int explode_nolit4 OF((__GPRO__ struct huft *tl, struct huft *td, + int bl, int bd)); +int explode OF((__GPRO)); + + +/* The implode algorithm uses a sliding 4K or 8K byte window on the + uncompressed stream to find repeated byte strings. This is implemented + here as a circular buffer. The index is updated simply by incrementing + and then and'ing with 0x0fff (4K-1) or 0x1fff (8K-1). Here, the 32K + buffer of inflate is used, and it works just as well to always have + a 32K circular buffer, so the index is anded with 0x7fff. This is + done to allow the window to also be used as the output buffer. */ +/* This must be supplied in an external module useable like "uch slide[8192];" + or "uch *slide;", where the latter would be malloc'ed. In unzip, slide[] + is actually a 32K area for use by inflate, which uses a 32K sliding window. + */ + + +/* Tables for length and distance */ +static ZCONST ush cplen2[] = + {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65}; +static ZCONST ush cplen3[] = + {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66}; +static ZCONST ush extra[] = + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8}; +static ZCONST ush cpdist4[] = + {1, 65, 129, 193, 257, 321, 385, 449, 513, 577, 641, 705, + 769, 833, 897, 961, 1025, 1089, 1153, 1217, 1281, 1345, 1409, 1473, + 1537, 1601, 1665, 1729, 1793, 1857, 1921, 1985, 2049, 2113, 2177, + 2241, 2305, 2369, 2433, 2497, 2561, 2625, 2689, 2753, 2817, 2881, + 2945, 3009, 3073, 3137, 3201, 3265, 3329, 3393, 3457, 3521, 3585, + 3649, 3713, 3777, 3841, 3905, 3969, 4033}; +static ZCONST ush cpdist8[] = + {1, 129, 257, 385, 513, 641, 769, 897, 1025, 1153, 1281, + 1409, 1537, 1665, 1793, 1921, 2049, 2177, 2305, 2433, 2561, 2689, + 2817, 2945, 3073, 3201, 3329, 3457, 3585, 3713, 3841, 3969, 4097, + 4225, 4353, 4481, 4609, 4737, 4865, 4993, 5121, 5249, 5377, 5505, + 5633, 5761, 5889, 6017, 6145, 6273, 6401, 6529, 6657, 6785, 6913, + 7041, 7169, 7297, 7425, 7553, 7681, 7809, 7937, 8065}; + + +/* Macros for inflate() bit peeking and grabbing. + The usage is: + + NEEDBITS(j) + x = b & mask_bits[j]; + DUMPBITS(j) + + where NEEDBITS makes sure that b has at least j bits in it, and + DUMPBITS removes the bits from b. The macros use the variable k + for the number of bits in b. Normally, b and k are register + variables for speed. + */ + +#define NEEDBITS(n) {while(k<(n)){b|=((ulg)NEXTBYTE)<>=(n);k-=(n);} + + + +static int get_tree(__G__ l, n) + __GDEF +unsigned *l; /* bit lengths */ +unsigned n; /* number expected */ +/* Get the bit lengths for a code representation from the compressed + stream. If get_tree() returns 4, then there is an error in the data. + Otherwise zero is returned. */ +{ + unsigned i; /* bytes remaining in list */ + unsigned k; /* lengths entered */ + unsigned j; /* number of codes */ + unsigned b; /* bit length for those codes */ + + + /* get bit lengths */ + i = NEXTBYTE + 1; /* length/count pairs to read */ + k = 0; /* next code */ + do { + b = ((j = NEXTBYTE) & 0xf) + 1; /* bits in code (1..16) */ + j = ((j & 0xf0) >> 4) + 1; /* codes with those bits (1..16) */ + if (k + j > n) + return 4; /* don't overflow l[] */ + do { + l[k++] = b; + } while (--j); + } while (--i); + return k != n ? 4 : 0; /* should have read n of them */ +} + + + +static int explode_lit8(__G__ tb, tl, td, bb, bl, bd) + __GDEF +struct huft *tb, *tl, *td; /* literal, length, and distance tables */ +int bb, bl, bd; /* number of bits decoded by those */ +/* Decompress the imploded data using coded literals and an 8K sliding + window. */ +{ + long s; /* bytes to decompress */ + register unsigned e; /* table entry flag/number of extra bits */ + unsigned n, d; /* length and index for copy */ + unsigned w; /* current window position */ + struct huft *t; /* pointer to table entry */ + unsigned mb, ml, md; /* masks for bb, bl, and bd bits */ + register ulg b; /* bit buffer */ + register unsigned k; /* number of bits in bit buffer */ + unsigned u; /* true if unflushed */ + + + /* explode the coded data */ + b = k = w = 0; /* initialize bit buffer, window */ + u = 1; /* buffer unflushed */ + mb = mask_bits[bb]; /* precompute masks for speed */ + ml = mask_bits[bl]; + md = mask_bits[bd]; + s = G.ucsize; + while (s > 0) /* do until ucsize bytes uncompressed */ + { + NEEDBITS(1) + if (b & 1) /* then literal--decode it */ + { + DUMPBITS(1) + s--; + NEEDBITS((unsigned)bb) /* get coded literal */ + if ((e = (t = tb + ((~(unsigned)b) & mb))->e) > 16) + do { + if (e == 99) + return 1; + DUMPBITS(t->b) + e -= 16; + NEEDBITS(e) + } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); + DUMPBITS(t->b) + redirSlide[w++] = (uch)t->v.n; + if (w == wsize) + { + flush(__G__ redirSlide, (ulg)w, 0); + w = u = 0; + } + } + else /* else distance/length */ + { + DUMPBITS(1) + NEEDBITS(7) /* get distance low bits */ + d = (unsigned)b & 0x7f; + DUMPBITS(7) + NEEDBITS((unsigned)bd) /* get coded distance high bits */ + if ((e = (t = td + ((~(unsigned)b) & md))->e) > 16) + do { + if (e == 99) + return 1; + DUMPBITS(t->b) + e -= 16; + NEEDBITS(e) + } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); + DUMPBITS(t->b) + d = w - d - t->v.n; /* construct offset */ + NEEDBITS((unsigned)bl) /* get coded length */ + if ((e = (t = tl + ((~(unsigned)b) & ml))->e) > 16) + do { + if (e == 99) + return 1; + DUMPBITS(t->b) + e -= 16; + NEEDBITS(e) + } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); + DUMPBITS(t->b) + n = t->v.n; + if (e) /* get length extra bits */ + { + NEEDBITS(8) + n += (unsigned)b & 0xff; + DUMPBITS(8) + } + + /* do the copy */ + s -= n; + do { +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) + if (G.redirect_slide) { + /* &= w/ wsize not needed and wrong if redirect */ + if (d >= wsize) + return 1; + n -= (e = (e = wsize - (d > w ? d : w)) > n ? n : e); + } else +#endif + n -= (e = (e = wsize - ((d &= wsize-1) > w ? d : w)) > n ? n : e); + if (u && w <= d) + { + memzero(redirSlide + w, e); + w += e; + d += e; + } + else +#ifndef NOMEMCPY + if (w - d >= e) /* (this test assumes unsigned comparison) */ + { + memcpy(redirSlide + w, redirSlide + d, e); + w += e; + d += e; + } + else /* do it slow to avoid memcpy() overlap */ +#endif /* !NOMEMCPY */ + do { + redirSlide[w++] = redirSlide[d++]; + } while (--e); + if (w == wsize) + { + flush(__G__ redirSlide, (ulg)w, 0); + w = u = 0; + } + } while (n); + } + } + + /* flush out redirSlide */ + flush(__G__ redirSlide, (ulg)w, 0); + if (G.csize + G.incnt + (k >> 3)) /* should have read csize bytes, but */ + { /* sometimes read one too many: k>>3 compensates */ + G.used_csize = G.lrec.csize - G.csize - G.incnt - (k >> 3); + return 5; + } + return 0; +} + + + +static int explode_lit4(__G__ tb, tl, td, bb, bl, bd) + __GDEF +struct huft *tb, *tl, *td; /* literal, length, and distance tables */ +int bb, bl, bd; /* number of bits decoded by those */ +/* Decompress the imploded data using coded literals and a 4K sliding + window. */ +{ + long s; /* bytes to decompress */ + register unsigned e; /* table entry flag/number of extra bits */ + unsigned n, d; /* length and index for copy */ + unsigned w; /* current window position */ + struct huft *t; /* pointer to table entry */ + unsigned mb, ml, md; /* masks for bb, bl, and bd bits */ + register ulg b; /* bit buffer */ + register unsigned k; /* number of bits in bit buffer */ + unsigned u; /* true if unflushed */ + + + /* explode the coded data */ + b = k = w = 0; /* initialize bit buffer, window */ + u = 1; /* buffer unflushed */ + mb = mask_bits[bb]; /* precompute masks for speed */ + ml = mask_bits[bl]; + md = mask_bits[bd]; + s = G.ucsize; + while (s > 0) /* do until ucsize bytes uncompressed */ + { + NEEDBITS(1) + if (b & 1) /* then literal--decode it */ + { + DUMPBITS(1) + s--; + NEEDBITS((unsigned)bb) /* get coded literal */ + if ((e = (t = tb + ((~(unsigned)b) & mb))->e) > 16) + do { + if (e == 99) + return 1; + DUMPBITS(t->b) + e -= 16; + NEEDBITS(e) + } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); + DUMPBITS(t->b) + redirSlide[w++] = (uch)t->v.n; + if (w == wsize) + { + flush(__G__ redirSlide, (ulg)w, 0); + w = u = 0; + } + } + else /* else distance/length */ + { + DUMPBITS(1) + NEEDBITS(6) /* get distance low bits */ + d = (unsigned)b & 0x3f; + DUMPBITS(6) + NEEDBITS((unsigned)bd) /* get coded distance high bits */ + if ((e = (t = td + ((~(unsigned)b) & md))->e) > 16) + do { + if (e == 99) + return 1; + DUMPBITS(t->b) + e -= 16; + NEEDBITS(e) + } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); + DUMPBITS(t->b) + d = w - d - t->v.n; /* construct offset */ + NEEDBITS((unsigned)bl) /* get coded length */ + if ((e = (t = tl + ((~(unsigned)b) & ml))->e) > 16) + do { + if (e == 99) + return 1; + DUMPBITS(t->b) + e -= 16; + NEEDBITS(e) + } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); + DUMPBITS(t->b) + n = t->v.n; + if (e) /* get length extra bits */ + { + NEEDBITS(8) + n += (unsigned)b & 0xff; + DUMPBITS(8) + } + + /* do the copy */ + s -= n; + do { +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) + if (G.redirect_slide) { + /* &= w/ wsize not needed and wrong if redirect */ + if (d >= wsize) + return 1; + n -= (e = (e = wsize - (d > w ? d : w)) > n ? n : e); + } else +#endif + n -= (e = (e = wsize - ((d &= wsize-1) > w ? d : w)) > n ? n : e); + if (u && w <= d) + { + memzero(redirSlide + w, e); + w += e; + d += e; + } + else +#ifndef NOMEMCPY + if (w - d >= e) /* (this test assumes unsigned comparison) */ + { + memcpy(redirSlide + w, redirSlide + d, e); + w += e; + d += e; + } + else /* do it slow to avoid memcpy() overlap */ +#endif /* !NOMEMCPY */ + do { + redirSlide[w++] = redirSlide[d++]; + } while (--e); + if (w == wsize) + { + flush(__G__ redirSlide, (ulg)w, 0); + w = u = 0; + } + } while (n); + } + } + + /* flush out redirSlide */ + flush(__G__ redirSlide, (ulg)w, 0); + if (G.csize + G.incnt + (k >> 3)) /* should have read csize bytes, but */ + { /* sometimes read one too many: k>>3 compensates */ + G.used_csize = G.lrec.csize - G.csize - G.incnt - (k >> 3); + return 5; + } + return 0; +} + + + +static int explode_nolit8(__G__ tl, td, bl, bd) + __GDEF +struct huft *tl, *td; /* length and distance decoder tables */ +int bl, bd; /* number of bits decoded by tl[] and td[] */ +/* Decompress the imploded data using uncoded literals and an 8K sliding + window. */ +{ + long s; /* bytes to decompress */ + register unsigned e; /* table entry flag/number of extra bits */ + unsigned n, d; /* length and index for copy */ + unsigned w; /* current window position */ + struct huft *t; /* pointer to table entry */ + unsigned ml, md; /* masks for bl and bd bits */ + register ulg b; /* bit buffer */ + register unsigned k; /* number of bits in bit buffer */ + unsigned u; /* true if unflushed */ + + + /* explode the coded data */ + b = k = w = 0; /* initialize bit buffer, window */ + u = 1; /* buffer unflushed */ + ml = mask_bits[bl]; /* precompute masks for speed */ + md = mask_bits[bd]; + s = G.ucsize; + while (s > 0) /* do until ucsize bytes uncompressed */ + { + NEEDBITS(1) + if (b & 1) /* then literal--get eight bits */ + { + DUMPBITS(1) + s--; + NEEDBITS(8) + redirSlide[w++] = (uch)b; + if (w == wsize) + { + flush(__G__ redirSlide, (ulg)w, 0); + w = u = 0; + } + DUMPBITS(8) + } + else /* else distance/length */ + { + DUMPBITS(1) + NEEDBITS(7) /* get distance low bits */ + d = (unsigned)b & 0x7f; + DUMPBITS(7) + NEEDBITS((unsigned)bd) /* get coded distance high bits */ + if ((e = (t = td + ((~(unsigned)b) & md))->e) > 16) + do { + if (e == 99) + return 1; + DUMPBITS(t->b) + e -= 16; + NEEDBITS(e) + } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); + DUMPBITS(t->b) + d = w - d - t->v.n; /* construct offset */ + NEEDBITS((unsigned)bl) /* get coded length */ + if ((e = (t = tl + ((~(unsigned)b) & ml))->e) > 16) + do { + if (e == 99) + return 1; + DUMPBITS(t->b) + e -= 16; + NEEDBITS(e) + } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); + DUMPBITS(t->b) + n = t->v.n; + if (e) /* get length extra bits */ + { + NEEDBITS(8) + n += (unsigned)b & 0xff; + DUMPBITS(8) + } + + /* do the copy */ + s -= n; + do { +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) + if (G.redirect_slide) { + /* &= w/ wsize not needed and wrong if redirect */ + if (d >= wsize) + return 1; + n -= (e = (e = wsize - (d > w ? d : w)) > n ? n : e); + } else +#endif + n -= (e = (e = wsize - ((d &= wsize-1) > w ? d : w)) > n ? n : e); + if (u && w <= d) + { + memzero(redirSlide + w, e); + w += e; + d += e; + } + else +#ifndef NOMEMCPY + if (w - d >= e) /* (this test assumes unsigned comparison) */ + { + memcpy(redirSlide + w, redirSlide + d, e); + w += e; + d += e; + } + else /* do it slow to avoid memcpy() overlap */ +#endif /* !NOMEMCPY */ + do { + redirSlide[w++] = redirSlide[d++]; + } while (--e); + if (w == wsize) + { + flush(__G__ redirSlide, (ulg)w, 0); + w = u = 0; + } + } while (n); + } + } + + /* flush out redirSlide */ + flush(__G__ redirSlide, (ulg)w, 0); + if (G.csize + G.incnt + (k >> 3)) /* should have read csize bytes, but */ + { /* sometimes read one too many: k>>3 compensates */ + G.used_csize = G.lrec.csize - G.csize - G.incnt - (k >> 3); + return 5; + } + return 0; +} + + + +static int explode_nolit4(__G__ tl, td, bl, bd) + __GDEF +struct huft *tl, *td; /* length and distance decoder tables */ +int bl, bd; /* number of bits decoded by tl[] and td[] */ +/* Decompress the imploded data using uncoded literals and a 4K sliding + window. */ +{ + long s; /* bytes to decompress */ + register unsigned e; /* table entry flag/number of extra bits */ + unsigned n, d; /* length and index for copy */ + unsigned w; /* current window position */ + struct huft *t; /* pointer to table entry */ + unsigned ml, md; /* masks for bl and bd bits */ + register ulg b; /* bit buffer */ + register unsigned k; /* number of bits in bit buffer */ + unsigned u; /* true if unflushed */ + + + /* explode the coded data */ + b = k = w = 0; /* initialize bit buffer, window */ + u = 1; /* buffer unflushed */ + ml = mask_bits[bl]; /* precompute masks for speed */ + md = mask_bits[bd]; + s = G.ucsize; + while (s > 0) /* do until ucsize bytes uncompressed */ + { + NEEDBITS(1) + if (b & 1) /* then literal--get eight bits */ + { + DUMPBITS(1) + s--; + NEEDBITS(8) + redirSlide[w++] = (uch)b; + if (w == wsize) + { + flush(__G__ redirSlide, (ulg)w, 0); + w = u = 0; + } + DUMPBITS(8) + } + else /* else distance/length */ + { + DUMPBITS(1) + NEEDBITS(6) /* get distance low bits */ + d = (unsigned)b & 0x3f; + DUMPBITS(6) + NEEDBITS((unsigned)bd) /* get coded distance high bits */ + if ((e = (t = td + ((~(unsigned)b) & md))->e) > 16) + do { + if (e == 99) + return 1; + DUMPBITS(t->b) + e -= 16; + NEEDBITS(e) + } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); + DUMPBITS(t->b) + d = w - d - t->v.n; /* construct offset */ + NEEDBITS((unsigned)bl) /* get coded length */ + if ((e = (t = tl + ((~(unsigned)b) & ml))->e) > 16) + do { + if (e == 99) + return 1; + DUMPBITS(t->b) + e -= 16; + NEEDBITS(e) + } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); + DUMPBITS(t->b) + n = t->v.n; + if (e) /* get length extra bits */ + { + NEEDBITS(8) + n += (unsigned)b & 0xff; + DUMPBITS(8) + } + + /* do the copy */ + s -= n; + do { +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) + if (G.redirect_slide) { + /* &= w/ wsize not needed and wrong if redirect */ + if (d >= wsize) + return 1; + n -= (e = (e = wsize - (d > w ? d : w)) > n ? n : e); + } else +#endif + n -= (e = (e = wsize - ((d &= wsize-1) > w ? d : w)) > n ? n : e); + if (u && w <= d) + { + memzero(redirSlide + w, e); + w += e; + d += e; + } + else +#ifndef NOMEMCPY + if (w - d >= e) /* (this test assumes unsigned comparison) */ + { + memcpy(redirSlide + w, redirSlide + d, e); + w += e; + d += e; + } + else /* do it slow to avoid memcpy() overlap */ +#endif /* !NOMEMCPY */ + do { + redirSlide[w++] = redirSlide[d++]; + } while (--e); + if (w == wsize) + { + flush(__G__ redirSlide, (ulg)w, 0); + w = u = 0; + } + } while (n); + } + } + + /* flush out redirSlide */ + flush(__G__ redirSlide, (ulg)w, 0); + if (G.csize + G.incnt + (k >> 3)) /* should have read csize bytes, but */ + { /* sometimes read one too many: k>>3 compensates */ + G.used_csize = G.lrec.csize - G.csize - G.incnt - (k >> 3); + return 5; + } + return 0; +} + + + +int explode(__G) + __GDEF +/* Explode an imploded compressed stream. Based on the general purpose + bit flag, decide on coded or uncoded literals, and an 8K or 4K sliding + window. Construct the literal (if any), length, and distance codes and + the tables needed to decode them (using huft_build() from inflate.c), + and call the appropriate routine for the type of data in the remainder + of the stream. The four routines are nearly identical, differing only + in whether the literal is decoded or simply read in, and in how many + bits are read in, uncoded, for the low distance bits. */ +{ + unsigned r; /* return codes */ + struct huft *tb; /* literal code table */ + struct huft *tl; /* length code table */ + struct huft *td; /* distance code table */ + int bb; /* bits for tb */ + int bl; /* bits for tl */ + int bd; /* bits for td */ + unsigned l[256]; /* bit lengths for codes */ + +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) + if (G.redirect_slide) + wsize = G.redirect_size, redirSlide = G.redirect_buffer; + else + wsize = WSIZE, redirSlide = slide; +#endif + + /* Tune base table sizes. Note: I thought that to truly optimize speed, + I would have to select different bl, bd, and bb values for different + compressed file sizes. I was surprised to find out that the values of + 7, 7, and 9 worked best over a very wide range of sizes, except that + bd = 8 worked marginally better for large compressed sizes. */ + bl = 7; + bd = (G.csize + G.incnt) > 200000L ? 8 : 7; + + + /* With literal tree--minimum match length is 3 */ +#ifdef DEBUG + G.hufts = 0; /* initialize huft's malloc'ed */ +#endif + if (G.lrec.general_purpose_bit_flag & 4) + { + bb = 9; /* base table size for literals */ + if ((r = get_tree(__G__ l, 256)) != 0) + return (int)r; + if ((r = huft_build(__G__ l, 256, 256, NULL, NULL, &tb, &bb)) != 0) + { + if (r == 1) + huft_free(tb); + return (int)r; + } + if ((r = get_tree(__G__ l, 64)) != 0) + return (int)r; + if ((r = huft_build(__G__ l, 64, 0, cplen3, extra, &tl, &bl)) != 0) + { + if (r == 1) + huft_free(tl); + huft_free(tb); + return (int)r; + } + if ((r = get_tree(__G__ l, 64)) != 0) + return (int)r; + if (G.lrec.general_purpose_bit_flag & 2) /* true if 8K */ + { + if ((r = huft_build(__G__ l, 64, 0, cpdist8, extra, &td, &bd)) != 0) + { + if (r == 1) + huft_free(td); + huft_free(tl); + huft_free(tb); + return (int)r; + } + r = explode_lit8(__G__ tb, tl, td, bb, bl, bd); + } + else /* else 4K */ + { + if ((r = huft_build(__G__ l, 64, 0, cpdist4, extra, &td, &bd)) != 0) + { + if (r == 1) + huft_free(td); + huft_free(tl); + huft_free(tb); + return (int)r; + } + r = explode_lit4(__G__ tb, tl, td, bb, bl, bd); + } + huft_free(td); + huft_free(tl); + huft_free(tb); + } + else + + + /* No literal tree--minimum match length is 2 */ + { + if ((r = get_tree(__G__ l, 64)) != 0) + return (int)r; + if ((r = huft_build(__G__ l, 64, 0, cplen2, extra, &tl, &bl)) != 0) + { + if (r == 1) + huft_free(tl); + return (int)r; + } + if ((r = get_tree(__G__ l, 64)) != 0) + return (int)r; + if (G.lrec.general_purpose_bit_flag & 2) /* true if 8K */ + { + if ((r = huft_build(__G__ l, 64, 0, cpdist8, extra, &td, &bd)) != 0) + { + if (r == 1) + huft_free(td); + huft_free(tl); + return (int)r; + } + r = explode_nolit8(__G__ tl, td, bl, bd); + } + else /* else 4K */ + { + if ((r = huft_build(__G__ l, 64, 0, cpdist4, extra, &td, &bd)) != 0) + { + if (r == 1) + huft_free(td); + huft_free(tl); + return (int)r; + } + r = explode_nolit4(__G__ tl, td, bl, bd); + } + huft_free(td); + huft_free(tl); + } + Trace((stderr, "<%u > ", G.hufts)); + return (int)r; +} + +/* so explode.c and inflate.c can be compiled together into one object: */ +#undef NEXTBYTE +#undef NEEDBITS +#undef DUMPBITS diff --git a/Build/source/extra/unzip/extract.c b/Build/source/extra/unzip/extract.c new file mode 100644 index 00000000000..75ed7e0fd0e --- /dev/null +++ b/Build/source/extra/unzip/extract.c @@ -0,0 +1,1985 @@ +/*--------------------------------------------------------------------------- + + extract.c + + This file contains the high-level routines ("driver routines") for extrac- + ting and testing zipfile members. It calls the low-level routines in files + explode.c, inflate.c, unreduce.c and unshrink.c. + + Contains: extract_or_test_files() + store_info() + extract_or_test_member() + TestExtraField() + test_compr_eb() + memextract() + memflush() + fnfilter() + + ---------------------------------------------------------------------------*/ + + +#define EXTRACT_C +#define UNZIP_INTERNAL +#include "unzip.h" +#include "crypt.h" +#ifdef WINDLL +# ifdef POCKET_UNZIP +# include "wince/intrface.h" +# else +# include "windll/windll.h" +# endif +#endif + +#define GRRDUMP(buf,len) { \ + int i, j; \ + \ + for (j = 0; j < (len)/16; ++j) { \ + printf(" "); \ + for (i = 0; i < 16; ++i) \ + printf("%02x ", (uch)(buf)[i+(j<<4)]); \ + printf("\n "); \ + for (i = 0; i < 16; ++i) { \ + char c = (char)(buf)[i+(j<<4)]; \ + \ + if (c == '\n') \ + printf("\\n "); \ + else if (c == '\r') \ + printf("\\r "); \ + else \ + printf(" %c ", c); \ + } \ + printf("\n"); \ + } \ + if ((len) % 16) { \ + printf(" "); \ + for (i = j<<4; i < (len); ++i) \ + printf("%02x ", (uch)(buf)[i]); \ + printf("\n "); \ + for (i = j<<4; i < (len); ++i) { \ + char c = (char)(buf)[i]; \ + \ + if (c == '\n') \ + printf("\\n "); \ + else if (c == '\r') \ + printf("\\r "); \ + else \ + printf(" %c ", c); \ + } \ + printf("\n"); \ + } \ +} + +static int store_info OF((__GPRO)); +static int extract_or_test_member OF((__GPRO)); +#ifndef SFX + static int TestExtraField OF((__GPRO__ uch *ef, unsigned ef_len)); + static int test_compr_eb OF((__GPRO__ uch *eb, unsigned eb_size, + unsigned compr_offset, + int (*test_uc_ebdata)(__GPRO__ uch *eb, unsigned eb_size, + uch *eb_ucptr, ulg eb_ucsize))); +#endif +#ifdef SET_DIR_ATTRIB + static int dircomp OF((ZCONST zvoid *a, ZCONST zvoid *b)); +#endif + + + +/*******************************/ +/* Strings used in extract.c */ +/*******************************/ + +static ZCONST char Far VersionMsg[] = + " skipping: %-22s need %s compat. v%u.%u (can do v%u.%u)\n"; +static ZCONST char Far ComprMsgNum[] = + " skipping: %-22s unsupported compression method %u\n"; +#ifndef SFX + static ZCONST char Far ComprMsgName[] = + " skipping: %-22s `%s' method not supported\n"; + static ZCONST char Far CmprNone[] = "store"; + static ZCONST char Far CmprShrink[] = "shrink"; + static ZCONST char Far CmprReduce[] = "reduce"; + static ZCONST char Far CmprImplode[] = "implode"; + static ZCONST char Far CmprTokenize[] = "tokenize"; + static ZCONST char Far CmprDeflate[] = "deflate"; + static ZCONST char Far CmprEnDeflate[] = "enhanced deflate"; + static ZCONST char Far CmprDCLImplode[] = "DCL implode"; + static ZCONST char Far *ComprNames[NUM_METHODS] = { + CmprNone, CmprShrink, CmprReduce, CmprReduce, CmprReduce, CmprReduce, + CmprImplode, CmprTokenize, CmprDeflate, CmprEnDeflate, CmprDCLImplode + }; +#endif /* !SFX */ +static ZCONST char Far FilNamMsg[] = + "%s: bad filename length (%s)\n"; +static ZCONST char Far ExtFieldMsg[] = + "%s: bad extra field length (%s)\n"; +static ZCONST char Far OffsetMsg[] = + "file #%u: bad zipfile offset (%s): %ld\n"; +static ZCONST char Far ExtractMsg[] = + "%8sing: %-22s %s%s"; +#ifndef SFX + static ZCONST char Far LengthMsg[] = + "%s %s: %ld bytes required to uncompress to %lu bytes;\n %s\ + supposed to require %lu bytes%s%s%s\n"; +#endif + +static ZCONST char Far BadFileCommLength[] = "%s: bad file comment length\n"; +static ZCONST char Far LocalHdrSig[] = "local header sig"; +static ZCONST char Far BadLocalHdr[] = "file #%u: bad local header\n"; +static ZCONST char Far AttemptRecompensate[] = + " (attempting to re-compensate)\n"; +#ifndef SFX + static ZCONST char Far BackslashPathSep[] = + "warning: %s appears to use backslashes as path separators\n"; +#endif +static ZCONST char Far SkipVolumeLabel[] = + " skipping: %-22s %svolume label\n"; + +#ifdef SET_DIR_ATTRIB /* messages of code for setting directory attributes */ + static ZCONST char Far DirlistEntryNoMem[] = + "warning: cannot alloc memory for dir times/permissions/UID/GID\n"; + static ZCONST char Far DirlistSortNoMem[] = + "warning: cannot alloc memory to sort dir times/perms/etc.\n"; + static ZCONST char Far DirlistSetAttrFailed[] = + "warning: set times/attribs failed for %s\n"; +#endif + +#ifndef WINDLL + static ZCONST char Far ReplaceQuery[] = + "replace %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: "; + static ZCONST char Far AssumeNone[] = " NULL\n(assuming [N]one)\n"; + static ZCONST char Far NewNameQuery[] = "new name: "; + static ZCONST char Far InvalidResponse[] = "error: invalid response [%c]\n"; +#endif /* !WINDLL */ + +static ZCONST char Far ErrorInArchive[] = + "At least one %serror was detected in %s.\n"; +static ZCONST char Far ZeroFilesTested[] = + "Caution: zero files tested in %s.\n"; + +#ifndef VMS + static ZCONST char Far VMSFormatQuery[] = + "\n%s: stored in VMS format. Extract anyway? (y/n) "; +#endif + +#if CRYPT + static ZCONST char Far SkipCannotGetPasswd[] = + " skipping: %-22s unable to get password\n"; + static ZCONST char Far SkipIncorrectPasswd[] = + " skipping: %-22s incorrect password\n"; + static ZCONST char Far FilesSkipBadPasswd[] = + "%u file%s skipped because of incorrect password.\n"; + static ZCONST char Far MaybeBadPasswd[] = + " (may instead be incorrect password)\n"; +#else + static ZCONST char Far SkipEncrypted[] = + " skipping: %-22s encrypted (not supported)\n"; +#endif + +static ZCONST char Far NoErrInCompData[] = + "No errors detected in compressed data of %s.\n"; +static ZCONST char Far NoErrInTestedFiles[] = + "No errors detected in %s for the %u file%s tested.\n"; +static ZCONST char Far FilesSkipped[] = + "%u file%s skipped because of unsupported compression or encoding.\n"; + +static ZCONST char Far ErrUnzipFile[] = " error: %s%s %s\n"; +static ZCONST char Far ErrUnzipNoFile[] = "\n error: %s%s\n"; +static ZCONST char Far NotEnoughMem[] = "not enough memory to "; +static ZCONST char Far InvalidComprData[] = "invalid compressed data to "; +static ZCONST char Far Inflate[] = "inflate"; + +#ifndef SFX + static ZCONST char Far Explode[] = "explode"; +#ifndef LZW_CLEAN + static ZCONST char Far Unshrink[] = "unshrink"; +#endif +#endif + +#if (!defined(DELETE_IF_FULL) || !defined(HAVE_UNLINK)) + static ZCONST char Far FileTruncated[] = + "warning: %s is probably truncated\n"; +#endif + +static ZCONST char Far FileUnknownCompMethod[] = + "%s: unknown compression method\n"; +static ZCONST char Far BadCRC[] = " bad CRC %08lx (should be %08lx)\n"; + + /* TruncEAs[] also used in OS/2 mapname(), close_outfile() */ +char ZCONST Far TruncEAs[] = " compressed EA data missing (%d bytes)%s"; +char ZCONST Far TruncNTSD[] = + " compressed WinNT security data missing (%d bytes)%s"; + +#ifndef SFX + static ZCONST char Far InconsistEFlength[] = "bad extra-field entry:\n \ + EF block length (%u bytes) exceeds remaining EF data (%u bytes)\n"; + static ZCONST char Far InvalidComprDataEAs[] = + " invalid compressed data for EAs\n"; +# if (defined(WIN32) && defined(NTSD_EAS)) + static ZCONST char Far InvalidSecurityEAs[] = + " EAs fail security check\n"; +# endif + static ZCONST char Far UnsuppNTSDVersEAs[] = + " unsupported NTSD EAs version %d\n"; + static ZCONST char Far BadCRC_EAs[] = " bad CRC for extended attributes\n"; + static ZCONST char Far UnknComprMethodEAs[] = + " unknown compression method for EAs (%u)\n"; + static ZCONST char Far NotEnoughMemEAs[] = + " out of memory while inflating EAs\n"; + static ZCONST char Far UnknErrorEAs[] = + " unknown error on extended attributes\n"; +#endif /* !SFX */ + +static ZCONST char Far UnsupportedExtraField[] = + "\nerror: unsupported extra-field compression type (%u)--skipping\n"; +static ZCONST char Far BadExtraFieldCRC[] = + "error [%s]: bad extra-field CRC %08lx (should be %08lx)\n"; + + + + + +/**************************************/ +/* Function extract_or_test_files() */ +/**************************************/ + +int extract_or_test_files(__G) /* return PK-type error code */ + __GDEF +{ + uch *cd_inptr; + unsigned i, j, filnum=0, blknum=0; + int cd_incnt, renamed, query; + int error, error_in_archive=PK_COOL, *fn_matched=NULL, *xn_matched=NULL; +#ifdef WINDLL + int done_once = 0; +#else + extent len; +#endif + unsigned members_remaining, num_skipped=0, num_bad_pwd=0; + long cd_bufstart, bufstart, inbuf_offset, request; + LONGINT old_extra_bytes = 0L; +#ifdef SET_DIR_ATTRIB + unsigned num_dirs=0; + dirtime *dirlist=(dirtime *)NULL, **sorted_dirlist=(dirtime **)NULL; +#endif + + +/*--------------------------------------------------------------------------- + The basic idea of this function is as follows. Since the central di- + rectory lies at the end of the zipfile and the member files lie at the + beginning or middle or wherever, it is not very desirable to simply + read a central directory entry, jump to the member and extract it, and + then jump back to the central directory. In the case of a large zipfile + this would lead to a whole lot of disk-grinding, especially if each mem- + ber file is small. Instead, we read from the central directory the per- + tinent information for a block of files, then go extract/test the whole + block. Thus this routine contains two small(er) loops within a very + large outer loop: the first of the small ones reads a block of files + from the central directory; the second extracts or tests each file; and + the outer one loops over blocks. There's some file-pointer positioning + stuff in between, but that's about it. Btw, it's because of this jump- + ing around that we can afford to be lenient if an error occurs in one of + the member files: we should still be able to go find the other members, + since we know the offset of each from the beginning of the zipfile. + ---------------------------------------------------------------------------*/ + + G.pInfo = G.info; + members_remaining = (unsigned)G.ecrec.total_entries_central_dir; + +#if CRYPT + G.newzip = TRUE; +#endif +#ifndef SFX + G.reported_backslash = FALSE; +#endif + + /* malloc space for check on unmatched filespecs (OK if one or both NULL) */ + if (G.filespecs > 0 && + (fn_matched=(int *)malloc(G.filespecs*sizeof(int))) != (int *)NULL) + for (i = 0; i < G.filespecs; ++i) + fn_matched[i] = FALSE; + if (G.xfilespecs > 0 && + (xn_matched=(int *)malloc(G.xfilespecs*sizeof(int))) != (int *)NULL) + for (i = 0; i < G.xfilespecs; ++i) + xn_matched[i] = FALSE; + +/*--------------------------------------------------------------------------- + Begin main loop over blocks of member files. We know the entire central + directory is on this disk: we would not have any of this information un- + less the end-of-central-directory record was on this disk, and we would + not have gotten to this routine unless this is also the disk on which + the central directory starts. In practice, this had better be the ONLY + disk in the archive, but we'll add multi-disk support soon. + ---------------------------------------------------------------------------*/ + + while (members_remaining) { + j = 0; +#ifdef AMIGA + memzero(G.filenotes, DIR_BLKSIZ * sizeof(char *)); +#endif + + /* + * Loop through files in central directory, storing offsets, file + * attributes, case-conversion and text-conversion flags until block + * size is reached. + */ + + while (members_remaining && (j < DIR_BLKSIZ)) { + --members_remaining; + G.pInfo = &G.info[j]; + + if (readbuf(__G__ G.sig, 4) == 0) { + error_in_archive = PK_EOF; + members_remaining = 0; /* ...so no more left to do */ + break; + } + if (strncmp(G.sig, central_hdr_sig, 4)) { /* just to make sure */ + Info(slide, 0x401, ((char *)slide, LoadFarString(CentSigMsg), + j + blknum*DIR_BLKSIZ + 1)); + Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg))); + error_in_archive = PK_BADERR; + members_remaining = 0; /* ...so no more left to do */ + break; + } + /* process_cdir_file_hdr() sets pInfo->hostnum, pInfo->lcflag */ + if ((error = process_cdir_file_hdr(__G)) != PK_COOL) { + error_in_archive = error; /* only PK_EOF defined */ + members_remaining = 0; /* ...so no more left to do */ + break; + } + if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) != + PK_COOL) + { + if (error > error_in_archive) + error_in_archive = error; + if (error > PK_WARN) { /* fatal: no more left to do */ + Info(slide, 0x401, ((char *)slide, LoadFarString(FilNamMsg), + FnFilter1(G.filename), "central")); + members_remaining = 0; + break; + } + } + if ((error = do_string(__G__ G.crec.extra_field_length, + EXTRA_FIELD)) != 0) + { + if (error > error_in_archive) + error_in_archive = error; + if (error > PK_WARN) { /* fatal */ + Info(slide, 0x401, ((char *)slide, + LoadFarString(ExtFieldMsg), + FnFilter1(G.filename), "central")); + members_remaining = 0; + break; + } + } +#ifdef AMIGA + G.filenote_slot = j; + if ((error = do_string(__G__ G.crec.file_comment_length, + uO.N_flag ? FILENOTE : SKIP)) != PK_COOL) +#else + if ((error = do_string(__G__ G.crec.file_comment_length, SKIP)) + != PK_COOL) +#endif + { + if (error > error_in_archive) + error_in_archive = error; + if (error > PK_WARN) { /* fatal */ + Info(slide, 0x421, ((char *)slide, + LoadFarString(BadFileCommLength), + FnFilter1(G.filename))); + members_remaining = 0; + break; + } + } + if (G.process_all_files) { + if (store_info(__G)) + ++j; /* file is OK; info[] stored; continue with next */ + else + ++num_skipped; + } else { + int do_this_file; + + if (G.filespecs == 0) + do_this_file = TRUE; + else { /* check if this entry matches an `include' argument */ + do_this_file = FALSE; + for (i = 0; i < G.filespecs; i++) + if (match(G.filename, G.pfnames[i], uO.C_flag)) { + do_this_file = TRUE; /* ^-- ignore case or not? */ + if (fn_matched) + fn_matched[i] = TRUE; + break; /* found match, so stop looping */ + } + } + if (do_this_file) { /* check if this is an excluded file */ + for (i = 0; i < G.xfilespecs; i++) + if (match(G.filename, G.pxnames[i], uO.C_flag)) { + do_this_file = FALSE; /* ^-- ignore case or not? */ + if (xn_matched) + xn_matched[i] = TRUE; + break; + } + } + if (do_this_file) { + if (store_info(__G)) + ++j; /* file is OK */ + else + ++num_skipped; /* unsupp. compression or encryption */ + } + } /* end if (process_all_files) */ + + + } /* end while-loop (adding files to current block) */ + + /* save position in central directory so can come back later */ + cd_bufstart = G.cur_zipfile_bufstart; + cd_inptr = G.inptr; + cd_incnt = G.incnt; + + /*----------------------------------------------------------------------- + Second loop: process files in current block, extracting or testing + each one. + -----------------------------------------------------------------------*/ + + for (i = 0; i < j; ++i) { + filnum++; /* filnum = i + blknum*DIR_BLKSIZ + 1; */ + G.pInfo = &G.info[i]; +#ifdef NOVELL_BUG_FAILSAFE + G.dne = FALSE; /* assume file exists until stat() says otherwise */ +#endif + + /* if the target position is not within the current input buffer + * (either haven't yet read far enough, or (maybe) skipping back- + * ward), skip to the target position and reset readbuf(). */ + + /* ZLSEEK(pInfo->offset): */ + request = G.pInfo->offset + G.extra_bytes; + inbuf_offset = request % INBUFSIZ; + bufstart = request - inbuf_offset; + + Trace((stderr, "\ndebug: request = %ld, inbuf_offset = %ld\n", + request, inbuf_offset)); + Trace((stderr, + "debug: bufstart = %ld, cur_zipfile_bufstart = %ld\n", + bufstart, G.cur_zipfile_bufstart)); + if (request < 0) { + Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(SeekMsg), + G.zipfn, LoadFarString(ReportMsg))); + error_in_archive = PK_ERR; + if (filnum == 1 && G.extra_bytes != 0L) { + Info(slide, 0x401, ((char *)slide, + LoadFarString(AttemptRecompensate))); + old_extra_bytes = G.extra_bytes; + G.extra_bytes = 0L; + request = G.pInfo->offset; /* could also check if != 0 */ + inbuf_offset = request % INBUFSIZ; + bufstart = request - inbuf_offset; + Trace((stderr, "debug: request = %ld, inbuf_offset = %ld\n", + request, inbuf_offset)); + Trace((stderr, + "debug: bufstart = %ld, cur_zipfile_bufstart = %ld\n", + bufstart, G.cur_zipfile_bufstart)); + } else { + error_in_archive = PK_BADERR; + continue; /* this one hosed; try next */ + } + } + /* try again */ + if (request < 0) { + Trace((stderr, "debug: recompensated request still < 0\n")); + Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(SeekMsg), + G.zipfn, LoadFarString(ReportMsg))); + error_in_archive = PK_BADERR; + continue; + } else if (bufstart != G.cur_zipfile_bufstart) { + Trace((stderr, "debug: bufstart != cur_zipfile_bufstart\n")); +#ifdef USE_STRM_INPUT + fseek((FILE *)G.zipfd,(LONGINT)bufstart,SEEK_SET); + G.cur_zipfile_bufstart = ftell((FILE *)G.zipfd); +#else /* !USE_STRM_INPUT */ + G.cur_zipfile_bufstart = + lseek(G.zipfd,(LONGINT)bufstart,SEEK_SET); +#endif /* ?USE_STRM_INPUT */ + if ((G.incnt = read(G.zipfd,(char *)G.inbuf,INBUFSIZ)) <= 0) + { + Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), + filnum, "lseek", bufstart)); + error_in_archive = PK_BADERR; + continue; /* can still do next file */ + } + G.inptr = G.inbuf + (int)inbuf_offset; + G.incnt -= (int)inbuf_offset; + } else { + G.incnt += (int)(G.inptr-G.inbuf) - (int)inbuf_offset; + G.inptr = G.inbuf + (int)inbuf_offset; + } + + /* should be in proper position now, so check for sig */ + if (readbuf(__G__ G.sig, 4) == 0) { /* bad offset */ + Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), + filnum, "EOF", request)); + error_in_archive = PK_BADERR; + continue; /* but can still try next one */ + } + if (strncmp(G.sig, local_hdr_sig, 4)) { + Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), + filnum, LoadFarStringSmall(LocalHdrSig), request)); + /* + GRRDUMP(G.sig, 4) + GRRDUMP(local_hdr_sig, 4) + */ + error_in_archive = PK_ERR; + if ((filnum == 1 && G.extra_bytes != 0L) || + (G.extra_bytes == 0L && old_extra_bytes != 0L)) { + Info(slide, 0x401, ((char *)slide, + LoadFarString(AttemptRecompensate))); + if (G.extra_bytes) { + old_extra_bytes = G.extra_bytes; + G.extra_bytes = 0L; + } else + G.extra_bytes = old_extra_bytes; /* third attempt */ + ZLSEEK(G.pInfo->offset) + if (readbuf(__G__ G.sig, 4) == 0) { /* bad offset */ + Info(slide, 0x401, ((char *)slide, + LoadFarString(OffsetMsg), filnum, "EOF", request)); + error_in_archive = PK_BADERR; + continue; /* but can still try next one */ + } + if (strncmp(G.sig, local_hdr_sig, 4)) { + Info(slide, 0x401, ((char *)slide, + LoadFarString(OffsetMsg), filnum, + LoadFarStringSmall(LocalHdrSig), request)); + error_in_archive = PK_BADERR; + continue; + } + } else + continue; /* this one hosed; try next */ + } + if ((error = process_local_file_hdr(__G)) != PK_COOL) { + Info(slide, 0x421, ((char *)slide, LoadFarString(BadLocalHdr), + filnum)); + error_in_archive = error; /* only PK_EOF defined */ + continue; /* can still try next one */ + } + if ((error = do_string(__G__ G.lrec.filename_length, DS_FN)) != + PK_COOL) + { + if (error > error_in_archive) + error_in_archive = error; + if (error > PK_WARN) { + Info(slide, 0x401, ((char *)slide, LoadFarString(FilNamMsg), + FnFilter1(G.filename), "local")); + continue; /* go on to next one */ + } + } + if (G.extra_field != (uch *)NULL) { + free(G.extra_field); + G.extra_field = (uch *)NULL; + } + if ((error = + do_string(__G__ G.lrec.extra_field_length, EXTRA_FIELD)) != 0) + { + if (error > error_in_archive) + error_in_archive = error; + if (error > PK_WARN) { + Info(slide, 0x401, ((char *)slide, + LoadFarString(ExtFieldMsg), + FnFilter1(G.filename), "local")); + continue; /* go on */ + } + } + +#if CRYPT + if (G.pInfo->encrypted && + (error = decrypt(__G__ uO.pwdarg)) != PK_COOL) { + if (error == PK_WARN) { + if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) + Info(slide, 0x401, ((char *)slide, + LoadFarString(SkipIncorrectPasswd), + FnFilter1(G.filename))); + ++num_bad_pwd; + } else { /* (error > PK_WARN) */ + if (error > error_in_archive) + error_in_archive = error; + Info(slide, 0x401, ((char *)slide, + LoadFarString(SkipCannotGetPasswd), + FnFilter1(G.filename))); + } + continue; /* go on to next file */ + } +#endif /* CRYPT */ + + /* + * just about to extract file: if extracting to disk, check if + * already exists, and if so, take appropriate action according to + * fflag/uflag/overwrite_all/etc. (we couldn't do this in upper + * loop because we don't store the possibly renamed filename[] in + * info[]) + */ +#ifdef DLL + if (!uO.tflag && !uO.cflag && !G.redirect_data) +#else + if (!uO.tflag && !uO.cflag) +#endif + { + renamed = FALSE; /* user hasn't renamed output file yet */ + +startover: + query = FALSE; + /* for files from DOS FAT, check for use of backslash instead + * of slash as directory separator (bug in some zipper(s); so + * far, not a problem in HPFS, NTFS or VFAT systems) + */ +#ifndef SFX + if (G.pInfo->hostnum == FS_FAT_ && !strchr(G.filename, '/')) { + char *p=G.filename-1; + + while (*++p) { + if (*p == '\\') { + if (!G.reported_backslash) { + Info(slide, 0x21, ((char *)slide, + LoadFarString(BackslashPathSep), G.zipfn)); + G.reported_backslash = TRUE; + if (!error_in_archive) + error_in_archive = PK_WARN; + } + *p = '/'; + } + } + } +#endif /* !SFX */ + + /* mapname can create dirs if not freshening or if renamed */ + if ((error = mapname(__G__ renamed)) > PK_WARN) { + if (error == IZ_CREATED_DIR) { +#ifdef SET_DIR_ATTRIB + dirtime *d_entry; + + d_entry = (dirtime *)malloc(sizeof(dirtime)); + if (d_entry == (dirtime *)NULL) { + Info(slide, 0x401, ((char *)slide, + LoadFarString(DirlistEntryNoMem))); + } else { + unsigned eb_izux_flg; + + d_entry->next = dirlist; + dirlist = d_entry; + dirlist->fn = + (char *)malloc(strlen(G.filename) + 1); + if (dirlist->fn == (char *)NULL) { + Info(slide, 0x401, ((char *)slide, + LoadFarString(DirlistEntryNoMem))); + dirlist = d_entry->next; + free(d_entry); + if (!error_in_archive) + error_in_archive = PK_WARN; + continue; + } + strcpy(dirlist->fn, G.filename); + dirlist->perms = G.pInfo->file_attr; +#ifdef USE_EF_UT_TIME + eb_izux_flg = G.extra_field? ef_scan_for_izux( + G.extra_field, G.lrec.extra_field_length, 0, + G.lrec.last_mod_dos_datetime, +#ifdef IZ_CHECK_TZ + (G.tz_is_valid ? &(dirlist->u.t3) : NULL), +#else + &(dirlist->u.t3), +#endif + dirlist->uidgid) + : 0; +#else /* !USE_EF_UT_TIME */ + eb_izux_flg = 0; +#endif /* ?USE_EF_UT_TIME */ + if (eb_izux_flg & EB_UT_FL_MTIME) { + TTrace((stderr, + "\nextract: Unix dir e.f. modtime = %ld\n", + dirlist->u.t3.mtime)); + } else { + dirlist->u.t3.mtime = dos_to_unix_time( + G.lrec.last_mod_dos_datetime); + } + if (eb_izux_flg & EB_UT_FL_ATIME) { + TTrace((stderr, + "\nextract: Unix dir e.f. actime = %ld\n", + dirlist->u.t3.atime)); + } else { + dirlist->u.t3.atime = + dirlist->u.t3.mtime; + } + dirlist->have_uidgid = + (uO.X_flag && (eb_izux_flg & EB_UX2_VALID)); + ++num_dirs; + } +#endif /* SET_DIR_ATTRIB */ + } else if (error == IZ_VOL_LABEL) { +#ifdef DOS_OS2_W32 + Info(slide, 0x401, ((char *)slide, + LoadFarString(SkipVolumeLabel), + FnFilter1(G.filename), + uO.volflag? "hard disk " : "")); +#else + Info(slide, 1, ((char *)slide, + LoadFarString(SkipVolumeLabel), + FnFilter1(G.filename), "")); +#endif + /* if (!error_in_archive) + error_in_archive = PK_WARN; */ + } else if (error > PK_ERR && error_in_archive < PK_ERR) + error_in_archive = PK_ERR; + Trace((stderr, "mapname(%s) returns error = %d\n", + FnFilter1(G.filename), error)); + continue; /* go on to next file */ + } + +#ifdef QDOS + QFilename(__G__ G.filename); +#endif + switch (check_for_newer(__G__ G.filename)) { + case DOES_NOT_EXIST: +#ifdef NOVELL_BUG_FAILSAFE + G.dne = TRUE; /* stat() says file DOES NOT EXIST */ +#endif + /* if freshening, don't skip if just renamed */ + if (uO.fflag && !renamed) + continue; /* freshen (no new files): skip */ + break; + case EXISTS_AND_OLDER: + if (uO.overwrite_none) { +#ifdef WINDLL + char szStr[FILNAMSIZ+40]; /* add. space for text */ + + if ((!G.prompt_always) || (done_once)) { + sprintf(szStr, + "Target file exists.\nSkipping %s\n", + FnFilter1(G.filename)); + win_fprintf((zvoid *)&G, stdout, + strlen(szStr), szStr); + } else { + query = TRUE; + break; + } +#endif /* WINDLL */ + continue; /* never overwrite: skip file */ + } +#ifdef UNIXBACKUP + if (!uO.overwrite_all && !uO.B_flag) +#else + if (!uO.overwrite_all) +#endif + query = TRUE; + break; + case EXISTS_AND_NEWER: /* (or equal) */ + if (uO.overwrite_none || (uO.uflag && !renamed)) { +#ifdef WINDLL + char szStr[FILNAMSIZ+40]; /* add. space for text */ + + if ((!G.prompt_always) || (done_once)) { + sprintf(szStr, + "Target file newer.\nSkipping %s\n", + FnFilter1(G.filename)); + win_fprintf((zvoid *)&G, stdout, + strlen(szStr), szStr); + } else { + query = TRUE; + break; + } +#endif /* WINDLL */ + continue; /* skip if update/freshen & orig name */ + } +#ifdef UNIXBACKUP + if (!uO.overwrite_all && !uO.B_flag) +#else + if (!uO.overwrite_all) +#endif + query = TRUE; + break; + } + if (query) { +#ifdef WINDLL + switch (G.lpUserFunctions->replace != NULL ? + (*G.lpUserFunctions->replace)(G.filename) : + IDM_REPLACE_NONE) { + case IDM_REPLACE_RENAME: + _ISO_INTERN(G.filename); + renamed = TRUE; + goto startover; + case IDM_REPLACE_YES: + break; + case IDM_REPLACE_ALL: + uO.overwrite_all = TRUE; + uO.overwrite_none = FALSE; /* just to make sure */ + break; + case IDM_REPLACE_NONE: + uO.overwrite_none = TRUE; + uO.overwrite_all = FALSE; /* make sure */ + done_once = TRUE; + /* FALL THROUGH, skip */ + case IDM_REPLACE_NO: + { + char szStr[FILNAMSIZ+40]; + + sprintf(szStr, + "Target file newer.\nSkipping %s\n", + FnFilter1(G.filename)); + win_fprintf((zvoid *)&G, stdout, + strlen(szStr), szStr); + } + continue; + } +#else /* !WINDLL */ +reprompt: + Info(slide, 0x81, ((char *)slide, + LoadFarString(ReplaceQuery), + FnFilter1(G.filename))); + if (fgets(G.answerbuf, 9, stdin) == (char *)NULL) { + Info(slide, 1, ((char *)slide, + LoadFarString(AssumeNone))); + *G.answerbuf = 'N'; + if (!error_in_archive) + error_in_archive = 1; /* not extracted: warning */ + } + switch (*G.answerbuf) { + case 'A': /* dangerous option: force caps */ + uO.overwrite_all = TRUE; + uO.overwrite_none = FALSE; /* just to make sure */ + break; + case 'r': + case 'R': + do { + Info(slide, 0x81, ((char *)slide, + LoadFarString(NewNameQuery))); + fgets(G.filename, FILNAMSIZ, stdin); + /* usually get \n here: better check for it */ + len = strlen(G.filename); + if (G.filename[len-1] == '\n') + G.filename[--len] = '\0'; + } while (len == 0); +#ifdef WIN32 /* WIN32 fgets( ... , stdin) returns OEM coded strings */ + _OEM_INTERN(G.filename); +#endif + renamed = TRUE; + goto startover; /* sorry for a goto */ + case 'y': + case 'Y': + break; + case 'N': + uO.overwrite_none = TRUE; + uO.overwrite_all = FALSE; /* make sure */ + /* FALL THROUGH, skip */ + case 'n': + continue; /* skip file */ + default: + Info(slide, 1, ((char *)slide, + LoadFarString(InvalidResponse), *G.answerbuf)); + goto reprompt; /* yet another goto? */ + } /* end switch (*answerbuf) */ +#endif /* ?WINDLL */ + } /* end if (query) */ + } /* end if (extracting to disk) */ + +#ifdef DLL + if ((G.statreportcb != NULL) && + (*G.statreportcb)(__G__ UZ_ST_START_EXTRACT, G.zipfn, + G.filename, NULL)) { + if (fn_matched) + free((zvoid *)fn_matched); + if (xn_matched) + free((zvoid *)xn_matched); + return IZ_CTRLC; /* cancel operation by user request */ + } +#endif +#ifdef MACOS /* MacOS is no preemptive OS, thus call event-handling by hand */ + UserStop(); +#endif +#ifdef AMIGA + G.filenote_slot = i; +#endif + G.disk_full = 0; + if ((error = extract_or_test_member(__G)) != PK_COOL) { + if (error > error_in_archive) + error_in_archive = error; /* ...and keep going */ +#ifdef DLL + if (G.disk_full > 1 || error_in_archive == IZ_CTRLC) { +#else + if (G.disk_full > 1) { +#endif + if (fn_matched) + free((zvoid *)fn_matched); + if (xn_matched) + free((zvoid *)xn_matched); + return error_in_archive; /* (unless disk full) */ + } + } +#ifdef DLL + if ((G.statreportcb != NULL) && + (*G.statreportcb)(__G__ UZ_ST_FINISH_MEMBER, G.zipfn, + G.filename, (zvoid *)&G.lrec.ucsize)) { + if (fn_matched) + free((zvoid *)fn_matched); + if (xn_matched) + free((zvoid *)xn_matched); + return IZ_CTRLC; /* cancel operation by user request */ + } +#endif +#ifdef MACOS /* MacOS is no preemptive OS, thus call event-handling by hand */ + UserStop(); +#endif + } /* end for-loop (i: files in current block) */ + + + /* + * Jump back to where we were in the central directory, then go and do + * the next batch of files. + */ + +#ifdef USE_STRM_INPUT + fseek((FILE *)G.zipfd, (LONGINT)cd_bufstart, SEEK_SET); + G.cur_zipfile_bufstart = ftell((FILE *)G.zipfd); +#else /* !USE_STRM_INPUT */ + G.cur_zipfile_bufstart = lseek(G.zipfd,(LONGINT)cd_bufstart,SEEK_SET); +#endif /* ?USE_STRM_INPUT */ + read(G.zipfd, (char *)G.inbuf, INBUFSIZ); /* been here before... */ + G.inptr = cd_inptr; + G.incnt = cd_incnt; + ++blknum; + +#ifdef TEST + printf("\ncd_bufstart = %ld (%.8lXh)\n", cd_bufstart, cd_bufstart); + printf("cur_zipfile_bufstart = %ld (%.8lXh)\n", cur_zipfile_bufstart, + cur_zipfile_bufstart); + printf("inptr-inbuf = %d\n", G.inptr-G.inbuf); + printf("incnt = %d\n\n", G.incnt); +#endif + + } /* end while-loop (blocks of files in central directory) */ + +/*--------------------------------------------------------------------------- + Go back through saved list of directories, sort and set times/perms/UIDs + and GIDs from the deepest level on up. + ---------------------------------------------------------------------------*/ + +#ifdef SET_DIR_ATTRIB + if (num_dirs > 0) { + sorted_dirlist = (dirtime **)malloc(num_dirs*sizeof(dirtime *)); + if (sorted_dirlist == (dirtime **)NULL) { + Info(slide, 0x401, ((char *)slide, + LoadFarString(DirlistSortNoMem))); + while (dirlist != (dirtime *)NULL) { + dirtime *d = dirlist; + + dirlist = dirlist->next; + free(d); + } + } else { + if (num_dirs == 1) + sorted_dirlist[0] = dirlist; + else { + for (i = 0; i < num_dirs; ++i) { + sorted_dirlist[i] = dirlist; + dirlist = dirlist->next; + } + qsort((char *)sorted_dirlist, num_dirs, sizeof(dirtime *), + dircomp); + } + + Trace((stderr, "setting directory times/perms/attributes\n")); + for (i = 0; i < num_dirs; ++i) { + dirtime *d = sorted_dirlist[i]; + + Trace((stderr, "dir = %s\n", d->fn)); + if ((error = set_direc_attribs(__G__ d)) != PK_OK) { + Info(slide, 0x201, ((char *)slide, + LoadFarString(DirlistSetAttrFailed), d->fn)); + if (!error_in_archive) + error_in_archive = error; + } + free(d->fn); + free(d); + } + free(sorted_dirlist); + } + } +#endif /* SET_DIR_ATTRIB */ + +#if (defined(WIN32) && defined(NTSD_EAS)) + process_defer_NT(__G); /* process any deferred items for this .zip file */ +#endif + +/*--------------------------------------------------------------------------- + Check for unmatched filespecs on command line and print warning if any + found. Free allocated memory. + ---------------------------------------------------------------------------*/ + + if (fn_matched) { + for (i = 0; i < G.filespecs; ++i) + if (!fn_matched[i]) { +#ifdef DLL + if (!G.redirect_data && !G.redirect_text) + Info(slide, 0x401, ((char *)slide, + LoadFarString(FilenameNotMatched), G.pfnames[i])); + else + setFileNotFound(__G); +#else + Info(slide, 1, ((char *)slide, + LoadFarString(FilenameNotMatched), G.pfnames[i])); +#endif + if (error_in_archive <= PK_WARN) + error_in_archive = PK_FIND; /* some files not found */ + } + free((zvoid *)fn_matched); + } + if (xn_matched) { + for (i = 0; i < G.xfilespecs; ++i) + if (!xn_matched[i]) + Info(slide, 0x401, ((char *)slide, + LoadFarString(ExclFilenameNotMatched), G.pxnames[i])); + free((zvoid *)xn_matched); + } + +/*--------------------------------------------------------------------------- + Double-check that we're back at the end-of-central-directory record, and + print quick summary of results, if we were just testing the archive. We + send the summary to stdout so that people doing the testing in the back- + ground and redirecting to a file can just do a "tail" on the output file. + ---------------------------------------------------------------------------*/ + +#ifndef SFX + if (readbuf(__G__ G.sig, 4) == 0) + error_in_archive = PK_EOF; + if (strncmp(G.sig, end_central_sig, 4)) { /* just to make sure */ + Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg))); + Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg))); + if (!error_in_archive) /* don't overwrite stronger error */ + error_in_archive = PK_WARN; + } +#endif /* !SFX */ + if (uO.tflag) { + unsigned num = filnum - num_bad_pwd; + + if (uO.qflag < 2) { /* GRR 930710: was (uO.qflag == 1) */ + if (error_in_archive) + Info(slide, 0, ((char *)slide, LoadFarString(ErrorInArchive), + (error_in_archive == 1)? "warning-" : "", G.zipfn)); + else if (num == 0) + Info(slide, 0, ((char *)slide, LoadFarString(ZeroFilesTested), + G.zipfn)); + else if (G.process_all_files && (num_skipped+num_bad_pwd == 0)) + Info(slide, 0, ((char *)slide, LoadFarString(NoErrInCompData), + G.zipfn)); + else + Info(slide, 0, ((char *)slide, LoadFarString(NoErrInTestedFiles) + , G.zipfn, num, (num==1)? "":"s")); + if (num_skipped > 0) + Info(slide, 0, ((char *)slide, LoadFarString(FilesSkipped), + num_skipped, (num_skipped==1)? "":"s")); +#if CRYPT + if (num_bad_pwd > 0) + Info(slide, 0, ((char *)slide, LoadFarString(FilesSkipBadPasswd) + , num_bad_pwd, (num_bad_pwd==1)? "":"s")); +#endif /* CRYPT */ + } else if ((uO.qflag == 0) && !error_in_archive && (num == 0)) + Info(slide, 0, ((char *)slide, LoadFarString(ZeroFilesTested), + G.zipfn)); + } + + /* give warning if files not tested or extracted (first condition can still + * happen if zipfile is empty and no files specified on command line) */ + + if ((filnum == 0) && error_in_archive <= PK_WARN) { + if (num_skipped > 0) + error_in_archive = IZ_UNSUP; /* unsupport. compression/encryption */ + else + error_in_archive = PK_FIND; /* no files found at all */ + } +#if CRYPT + else if ((filnum == num_bad_pwd) && error_in_archive <= PK_WARN) + error_in_archive = IZ_BADPWD; /* bad passwd => all files skipped */ +#endif + else if ((num_skipped > 0) && error_in_archive <= PK_WARN) + error_in_archive = IZ_UNSUP; /* was PK_WARN; Jean-loup complained */ +#if CRYPT + else if ((num_bad_pwd > 0) && !error_in_archive) + error_in_archive = PK_WARN; +#endif + + return error_in_archive; + +} /* end function extract_or_test_files() */ + + + + + +/***************************/ +/* Function store_info() */ +/***************************/ + +static int store_info(__G) /* return 0 if skipping, 1 if OK */ + __GDEF +{ +#ifdef SFX +# define UNKN_COMPR \ + (G.crec.compression_method!=STORED && G.crec.compression_method!=DEFLATED) +#else +# ifdef COPYRIGHT_CLEAN /* no reduced files */ +# define UNKN_RED (G.crec.compression_method >= REDUCED1 && \ + G.crec.compression_method <= REDUCED4) +# else +# define UNKN_RED FALSE /* reducing not unknown */ +# endif +# ifdef LZW_CLEAN /* no shrunk files */ +# define UNKN_SHR (G.crec.compression_method == SHRUNK) +# else +# define UNKN_SHR FALSE /* unshrinking not unknown */ +# endif +# define UNKN_COMPR (UNKN_RED || UNKN_SHR || \ + G.crec.compression_method==TOKENIZED || G.crec.compression_method>DEFLATED) +#endif + +/*--------------------------------------------------------------------------- + Check central directory info for version/compatibility requirements. + ---------------------------------------------------------------------------*/ + + G.pInfo->encrypted = G.crec.general_purpose_bit_flag & 1; /* bit field */ + G.pInfo->ExtLocHdr = (G.crec.general_purpose_bit_flag & 8) == 8; /* bit */ + G.pInfo->textfile = G.crec.internal_file_attributes & 1; /* bit field */ + G.pInfo->crc = G.crec.crc32; + G.pInfo->compr_size = G.crec.csize; + G.pInfo->uncompr_size = G.crec.ucsize; + + switch (uO.aflag) { + case 0: + G.pInfo->textmode = FALSE; /* bit field */ + break; + case 1: + G.pInfo->textmode = G.pInfo->textfile; /* auto-convert mode */ + break; + default: /* case 2: */ + G.pInfo->textmode = TRUE; + break; + } + + if (G.crec.version_needed_to_extract[1] == VMS_) { + if (G.crec.version_needed_to_extract[0] > VMS_UNZIP_VERSION) { + if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) + Info(slide, 0x401, ((char *)slide, LoadFarString(VersionMsg), + FnFilter1(G.filename), "VMS", + G.crec.version_needed_to_extract[0] / 10, + G.crec.version_needed_to_extract[0] % 10, + VMS_UNZIP_VERSION / 10, VMS_UNZIP_VERSION % 10)); + return 0; + } +#ifndef VMS /* won't be able to use extra field, but still have data */ + else if (!uO.tflag && !uO.overwrite_all) { /* if -o, extract anyway */ + Info(slide, 0x481, ((char *)slide, LoadFarString(VMSFormatQuery), + FnFilter1(G.filename))); + fgets(G.answerbuf, 9, stdin); + if ((*G.answerbuf != 'y') && (*G.answerbuf != 'Y')) + return 0; + } +#endif /* !VMS */ + /* usual file type: don't need VMS to extract */ + } else if (G.crec.version_needed_to_extract[0] > UNZIP_VERSION) { + if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) + Info(slide, 0x401, ((char *)slide, LoadFarString(VersionMsg), + FnFilter1(G.filename), "PK", + G.crec.version_needed_to_extract[0] / 10, + G.crec.version_needed_to_extract[0] % 10, + UNZIP_VERSION / 10, UNZIP_VERSION % 10)); + return 0; + } + + if UNKN_COMPR { + if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) { +#ifndef SFX + if (G.crec.compression_method < NUM_METHODS) + Info(slide, 0x401, ((char *)slide, LoadFarString(ComprMsgName), + FnFilter1(G.filename), + LoadFarStringSmall(ComprNames[G.crec.compression_method]))); + else +#endif + Info(slide, 0x401, ((char *)slide, LoadFarString(ComprMsgNum), + FnFilter1(G.filename), + G.crec.compression_method)); + } + return 0; + } +#if (!CRYPT) + if (G.pInfo->encrypted) { + if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) + Info(slide, 0x401, ((char *)slide, LoadFarString(SkipEncrypted), + FnFilter1(G.filename))); + return 0; + } +#endif /* !CRYPT */ + + /* map whatever file attributes we have into the local format */ + mapattr(__G); /* GRR: worry about return value later */ + + G.pInfo->offset = (long)G.crec.relative_offset_local_header; + return 1; + +} /* end function store_info() */ + + + + + +/***************************************/ +/* Function extract_or_test_member() */ +/***************************************/ + +static int extract_or_test_member(__G) /* return PK-type error code */ + __GDEF +{ + char *nul="[empty] ", *txt="[text] ", *bin="[binary]"; +#ifdef CMS_MVS + char *ebc="[ebcdic]"; +#endif + register int b; + int r, error=PK_COOL; +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) + ulg wsize; +#else +# define wsize WSIZE +#endif + + +/*--------------------------------------------------------------------------- + Initialize variables, buffers, etc. + ---------------------------------------------------------------------------*/ + + G.bits_left = 0; + G.bitbuf = 0L; /* unreduce and unshrink only */ + G.zipeof = 0; + G.newfile = TRUE; + G.crc32val = CRCVAL_INITIAL; + +#ifdef SYMLINKS + /* if file came from Unix and is a symbolic link and we are extracting + * to disk, prepare to restore the link */ + if (S_ISLNK(G.pInfo->file_attr) && + (G.pInfo->hostnum == UNIX_ || G.pInfo->hostnum == ATARI_ || + G.pInfo->hostnum == BEOS_) && + !uO.tflag && !uO.cflag && (G.lrec.ucsize > 0)) + G.symlnk = TRUE; + else + G.symlnk = FALSE; +#endif /* SYMLINKS */ + + if (uO.tflag) { + if (!uO.qflag) + Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "test", + FnFilter1(G.filename), "", "")); + } else { +#ifdef DLL + if (uO.cflag && !G.redirect_data) +#else + if (uO.cflag) +#endif + { +#if (defined(OS2) && defined(__IBMC__) && (__IBMC__ >= 200)) + G.outfile = freopen("", "wb", stdout); /* VAC++ ignores setmode */ +#else + G.outfile = stdout; +#endif +#ifdef DOS_FLX_H68_OS2_W32 +#if (defined(__HIGHC__) && !defined(FLEXOS)) + setmode(G.outfile, _BINARY); +#else /* !(defined(__HIGHC__) && !defined(FLEXOS)) */ + setmode(fileno(G.outfile), O_BINARY); +#endif /* ?(defined(__HIGHC__) && !defined(FLEXOS)) */ +# define NEWLINE "\r\n" +#else /* !DOS_FLX_H68_OS2_W32 */ +# define NEWLINE "\n" +#endif /* ?DOS_FLX_H68_OS2_W32 */ +#ifdef VMS + if (open_outfile(__G)) /* VMS: required even for stdout! */ + return PK_DISK; +#endif + } else if (open_outfile(__G)) + return PK_DISK; + } + +/*--------------------------------------------------------------------------- + Unpack the file. + ---------------------------------------------------------------------------*/ + + defer_leftover_input(__G); /* so NEXTBYTE bounds check will work */ + switch (G.lrec.compression_method) { + case STORED: + if (!uO.tflag && QCOND2) { +#ifdef SYMLINKS + if (G.symlnk) /* can also be deflated, but rarer... */ + Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), + "link", FnFilter1(G.filename), "", "")); + else +#endif /* SYMLINKS */ + Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), + "extract", FnFilter1(G.filename), + (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? + "" : (G.lrec.ucsize == 0L? nul : (G.pInfo->textfile? txt : + bin)), uO.cflag? NEWLINE : "")); + } +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) + if (G.redirect_slide) { + wsize = G.redirect_size; redirSlide = G.redirect_buffer; + } else { + wsize = WSIZE; redirSlide = slide; + } +#endif + G.outptr = redirSlide; + G.outcnt = 0L; + while ((b = NEXTBYTE) != EOF && !G.disk_full) { + *G.outptr++ = (uch)b; + if (++G.outcnt == wsize) { + flush(__G__ redirSlide, G.outcnt, 0); + G.outptr = redirSlide; + G.outcnt = 0L; + } + } + if (G.outcnt) /* flush final (partial) buffer */ + flush(__G__ redirSlide, G.outcnt, 0); + break; + +#ifndef SFX +#ifndef LZW_CLEAN + case SHRUNK: + if (!uO.tflag && QCOND2) { + Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), + LoadFarStringSmall(Unshrink), FnFilter1(G.filename), + (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? + "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); + } + if ((r = unshrink(__G)) != PK_COOL) { + if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) + Info(slide, 0x401, ((char *)slide, + LoadFarStringSmall(ErrUnzipFile), + LoadFarString(NotEnoughMem), + LoadFarStringSmall2(Unshrink), + FnFilter1(G.filename))); + else + Info(slide, 0x401, ((char *)slide, + LoadFarStringSmall(ErrUnzipNoFile), + LoadFarString(NotEnoughMem), + LoadFarStringSmall2(Unshrink))); + error = r; + } + break; +#endif /* !LZW_CLEAN */ + +#ifndef COPYRIGHT_CLEAN + case REDUCED1: + case REDUCED2: + case REDUCED3: + case REDUCED4: + if (!uO.tflag && QCOND2) { + Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), + "unreduc", FnFilter1(G.filename), + (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? + "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); + } + unreduce(__G); + break; +#endif /* !COPYRIGHT_CLEAN */ + + case IMPLODED: + if (!uO.tflag && QCOND2) { + Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), + "explod", FnFilter1(G.filename), + (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? + "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); + } + if (((r = explode(__G)) != 0) && (r != 5)) { /* treat 5 specially */ + if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) + Info(slide, 0x401, ((char *)slide, + LoadFarStringSmall(ErrUnzipFile), r == 3? + LoadFarString(NotEnoughMem) : + LoadFarString(InvalidComprData), + LoadFarStringSmall2(Explode), + FnFilter1(G.filename))); + else + Info(slide, 0x401, ((char *)slide, + LoadFarStringSmall(ErrUnzipNoFile), r == 3? + LoadFarString(NotEnoughMem) : + LoadFarString(InvalidComprData), + LoadFarStringSmall2(Explode))); + error = (r == 3)? PK_MEM3 : PK_ERR; + } + if (r == 5) { + int warning = ((ulg)G.used_csize <= G.lrec.csize); + + if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) + Info(slide, 0x401, ((char *)slide, LoadFarString(LengthMsg), + "", warning? "warning" : "error", G.used_csize, + G.lrec.ucsize, warning? " " : "", G.lrec.csize, + " [", FnFilter1(G.filename), "]")); + else + Info(slide, 0x401, ((char *)slide, LoadFarString(LengthMsg), + "\n", warning? "warning" : "error", G.used_csize, + G.lrec.ucsize, warning? " ":"", G.lrec.csize, + "", "", ".")); + error = warning? PK_WARN : PK_ERR; + } + break; +#endif /* !SFX */ + + case DEFLATED: + if (!uO.tflag && QCOND2) { + Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), + "inflat", FnFilter1(G.filename), + (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? + "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); + } +#ifndef USE_ZLIB /* zlib's function is called inflate(), too */ +# define UZinflate inflate +#endif + if ((r = UZinflate(__G)) != 0) { + if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) + Info(slide, 0x401, ((char *)slide, + LoadFarStringSmall(ErrUnzipFile), r == 3? + LoadFarString(NotEnoughMem) : + LoadFarString(InvalidComprData), + LoadFarStringSmall2(Inflate), + FnFilter1(G.filename))); + else + Info(slide, 0x401, ((char *)slide, + LoadFarStringSmall(ErrUnzipNoFile), r == 3? + LoadFarString(NotEnoughMem) : + LoadFarString(InvalidComprData), + LoadFarStringSmall2(Inflate))); + error = (r == 3)? PK_MEM3 : PK_ERR; + } + break; + + default: /* should never get to this point */ + Info(slide, 0x401, ((char *)slide, + LoadFarString(FileUnknownCompMethod), FnFilter1(G.filename))); + /* close and delete file before return? */ + undefer_input(__G); + return PK_WARN; + + } /* end switch (compression method) */ + +/*--------------------------------------------------------------------------- + Close the file and set its date and time (not necessarily in that order), + and make sure the CRC checked out OK. Logical-AND the CRC for 64-bit + machines (redundant on 32-bit machines). + ---------------------------------------------------------------------------*/ + +#ifdef VMS /* VMS: required even for stdout! (final flush) */ + if (!uO.tflag) /* don't close NULL file */ + close_outfile(__G); +#else +#ifdef DLL + if (!uO.tflag && (!uO.cflag || G.redirect_data)) { + if (G.redirect_data) + FINISH_REDIRECT(); + else + close_outfile(__G); + } +#else + if (!uO.tflag && !uO.cflag) /* don't close NULL file or stdout */ + close_outfile(__G); +#endif +#endif /* VMS */ + + /* GRR: CONVERT close_outfile() TO NON-VOID: CHECK FOR ERRORS! */ + + + if (G.disk_full) { /* set by flush() */ + if (G.disk_full > 1) { +#if (defined(DELETE_IF_FULL) && defined(HAVE_UNLINK)) + /* delete the incomplete file if we can */ + if (unlink(G.filename) != 0) + Trace((stderr, "extract.c: could not delete %s\n", + FnFilter1(G.filename))); +#else + /* warn user about the incomplete file */ + Info(slide, 0x421, ((char *)slide, LoadFarString(FileTruncated), + FnFilter1(G.filename))); +#endif + error = PK_DISK; + } else { + error = PK_WARN; + } + } + + if (error > PK_WARN) {/* don't print redundant CRC error if error already */ + undefer_input(__G); + return error; + } + if (G.crc32val != G.lrec.crc32) { + /* if quiet enough, we haven't output the filename yet: do it */ + if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) + Info(slide, 0x401, ((char *)slide, "%-22s ", + FnFilter1(G.filename))); + Info(slide, 0x401, ((char *)slide, LoadFarString(BadCRC), G.crc32val, + G.lrec.crc32)); +#if CRYPT + if (G.pInfo->encrypted) + Info(slide, 0x401, ((char *)slide, LoadFarString(MaybeBadPasswd))); +#endif + error = PK_ERR; + } else if (uO.tflag) { +#ifndef SFX + if (G.extra_field) { + if ((r = TestExtraField(__G__ G.extra_field, + G.lrec.extra_field_length)) > error) + error = r; + } else +#endif /* !SFX */ + if (!uO.qflag) + Info(slide, 0, ((char *)slide, " OK\n")); + } else { + if (QCOND2 && !error) /* GRR: is stdout reset to text mode yet? */ + Info(slide, 0, ((char *)slide, "\n")); + } + + undefer_input(__G); + return error; + +} /* end function extract_or_test_member() */ + + + + + +#ifndef SFX + +/*******************************/ +/* Function TestExtraField() */ +/*******************************/ + +static int TestExtraField(__G__ ef, ef_len) + __GDEF + uch *ef; + unsigned ef_len; +{ + ush ebID; + unsigned ebLen; + unsigned eb_cmpr_offs = 0; + int r; + + /* we know the regular compressed file data tested out OK, or else we + * wouldn't be here ==> print filename if any extra-field errors found + */ + while (ef_len >= EB_HEADSIZE) { + ebID = makeword(ef); + ebLen = (unsigned)makeword(ef+EB_LEN); + + if (ebLen > (ef_len - EB_HEADSIZE)) { + /* Discovered some extra field inconsistency! */ + if (uO.qflag) + Info(slide, 1, ((char *)slide, "%-22s ", + FnFilter1(G.filename))); + Info(slide, 1, ((char *)slide, LoadFarString(InconsistEFlength), + ebLen, (ef_len - EB_HEADSIZE))); + return PK_ERR; + } + + switch (ebID) { + case EF_OS2: + case EF_ACL: + case EF_MAC3: + case EF_BEOS: + switch (ebID) { + case EF_OS2: + case EF_ACL: + eb_cmpr_offs = EB_OS2_HLEN; + break; + case EF_MAC3: + if (ebLen >= EB_MAC3_HLEN && + (makeword(ef+(EB_HEADSIZE+EB_FLGS_OFFS)) + & EB_M3_FL_UNCMPR) && + (makelong(ef+EB_HEADSIZE) == ebLen - EB_MAC3_HLEN)) + eb_cmpr_offs = 0; + else + eb_cmpr_offs = EB_MAC3_HLEN; + break; + case EF_BEOS: + if (ebLen >= EB_BEOS_HLEN && + (*(ef+(EB_HEADSIZE+EB_FLGS_OFFS)) & EB_BE_FL_UNCMPR) && + (makelong(ef+EB_HEADSIZE) == ebLen - EB_BEOS_HLEN)) + eb_cmpr_offs = 0; + else + eb_cmpr_offs = EB_BEOS_HLEN; + break; + } + if ((r = test_compr_eb(__G__ ef, ebLen, eb_cmpr_offs, NULL)) + != PK_OK) { + if (uO.qflag) + Info(slide, 1, ((char *)slide, "%-22s ", + FnFilter1(G.filename))); + switch (r) { + case IZ_EF_TRUNC: + Info(slide, 1, ((char *)slide, + LoadFarString(TruncEAs), + ebLen-(eb_cmpr_offs+EB_CMPRHEADLEN), "\n")); + break; + case PK_ERR: + Info(slide, 1, ((char *)slide, + LoadFarString(InvalidComprDataEAs))); + break; + case PK_MEM3: + case PK_MEM4: + Info(slide, 1, ((char *)slide, + LoadFarString(NotEnoughMemEAs))); + break; + default: + if ((r & 0xff) != PK_ERR) + Info(slide, 1, ((char *)slide, + LoadFarString(UnknErrorEAs))); + else { + ush m = (ush)(r >> 8); + if (m == DEFLATED) /* GRR KLUDGE! */ + Info(slide, 1, ((char *)slide, + LoadFarString(BadCRC_EAs))); + else + Info(slide, 1, ((char *)slide, + LoadFarString(UnknComprMethodEAs), m)); + } + break; + } + return r; + } + break; + + case EF_NTSD: + Trace((stderr, "ebID: %i / ebLen: %u\n", ebID, ebLen)); + r = ebLen < EB_NTSD_L_LEN ? IZ_EF_TRUNC : + ((ef[EB_HEADSIZE+EB_NTSD_VERSION] > EB_NTSD_MAX_VER) ? + (PK_WARN | 0x4000) : + test_compr_eb(__G__ ef, ebLen, EB_NTSD_L_LEN, TEST_NTSD)); + if (r != PK_OK) { + if (uO.qflag) + Info(slide, 1, ((char *)slide, "%-22s ", + FnFilter1(G.filename))); + switch (r) { + case IZ_EF_TRUNC: + Info(slide, 1, ((char *)slide, + LoadFarString(TruncNTSD), + ebLen-(EB_NTSD_L_LEN+EB_CMPRHEADLEN), "\n")); + break; +#if (defined(WIN32) && defined(NTSD_EAS)) + case PK_WARN: + Info(slide, 1, ((char *)slide, + LoadFarString(InvalidSecurityEAs))); + break; +#endif + case PK_ERR: + Info(slide, 1, ((char *)slide, + LoadFarString(InvalidComprDataEAs))); + break; + case PK_MEM3: + case PK_MEM4: + Info(slide, 1, ((char *)slide, + LoadFarString(NotEnoughMemEAs))); + break; + case (PK_WARN | 0x4000): + Info(slide, 1, ((char *)slide, + LoadFarString(UnsuppNTSDVersEAs), + (int)ef[EB_HEADSIZE+EB_NTSD_VERSION])); + r = PK_WARN; + break; + default: + if ((r & 0xff) != PK_ERR) + Info(slide, 1, ((char *)slide, + LoadFarString(UnknErrorEAs))); + else { + ush m = (ush)(r >> 8); + if (m == DEFLATED) /* GRR KLUDGE! */ + Info(slide, 1, ((char *)slide, + LoadFarString(BadCRC_EAs))); + else + Info(slide, 1, ((char *)slide, + LoadFarString(UnknComprMethodEAs), m)); + } + break; + } + return r; + } + break; + case EF_PKVMS: + case EF_PKW32: + case EF_PKUNIX: + case EF_ASIUNIX: + case EF_IZVMS: + case EF_IZUNIX: + case EF_VMCMS: + case EF_MVS: + case EF_SPARK: + case EF_AV: + default: + break; + } + ef_len -= (ebLen + EB_HEADSIZE); + ef += (ebLen + EB_HEADSIZE); + } + + if (!uO.qflag) + Info(slide, 0, ((char *)slide, " OK\n")); + + return PK_COOL; + +} /* end function TestExtraField() */ + + + + + +/******************************/ +/* Function test_compr_eb() */ +/******************************/ + +#ifdef PROTO +static int test_compr_eb( + __GPRO__ + uch *eb, + unsigned eb_size, + unsigned compr_offset, + int (*test_uc_ebdata)(__GPRO__ uch *eb, unsigned eb_size, + uch *eb_ucptr, ulg eb_ucsize)) +#else /* !PROTO */ +static int test_compr_eb(__G__ eb, eb_size, compr_offset, test_uc_ebdata) + __GDEF + uch *eb; + unsigned eb_size; + unsigned compr_offset; + int (*test_uc_ebdata)(); +#endif /* ?PROTO */ +{ + ulg eb_ucsize; + uch *eb_ucptr; + int r; + + if (compr_offset < 4) /* field is not compressed: */ + return PK_OK; /* do nothing and signal OK */ + + if ((eb_size < (EB_UCSIZE_P + 4)) || + ((eb_ucsize = makelong(eb+(EB_HEADSIZE+EB_UCSIZE_P))) > 0L && + eb_size <= (compr_offset + EB_CMPRHEADLEN))) + return IZ_EF_TRUNC; /* no compressed data! */ + + if ((eb_ucptr = (uch *)malloc((extent)eb_ucsize)) == (uch *)NULL) + return PK_MEM4; + + r = memextract(__G__ eb_ucptr, eb_ucsize, + eb + (EB_HEADSIZE + compr_offset), + (ulg)(eb_size - compr_offset)); + + if (r == PK_OK && test_uc_ebdata != NULL) + r = (*test_uc_ebdata)(__G__ eb, eb_size, eb_ucptr, eb_ucsize); + + free(eb_ucptr); + return r; + +} /* end function test_compr_eb() */ + +#endif /* !SFX */ + + + + + +/***************************/ +/* Function memextract() */ +/***************************/ + +int memextract(__G__ tgt, tgtsize, src, srcsize) /* extract compressed */ + __GDEF /* extra field block; */ + uch *tgt, *src; /* return PK-type error */ + ulg tgtsize, srcsize; /* level */ +{ + long old_csize=G.csize; + uch *old_inptr=G.inptr; + int old_incnt=G.incnt; + int r, error=PK_OK; + ush method; + ulg extra_field_crc; + + + method = makeword(src); + extra_field_crc = makelong(src+2); + + /* compressed extra field exists completely in memory at this location: */ + G.inptr = src + 2 + 4; /* method and extra_field_crc */ + G.incnt = (int)(G.csize = (long)(srcsize - (2 + 4))); + G.mem_mode = TRUE; + G.outbufptr = tgt; + G.outsize = tgtsize; + + switch (method) { + case STORED: + memcpy((char *)tgt, (char *)G.inptr, (extent)G.incnt); + G.outcnt = G.csize; /* for CRC calculation */ + break; + case DEFLATED: + G.outcnt = 0L; + if ((r = UZinflate(__G)) != 0) { + if (!uO.tflag) + Info(slide, 0x401, ((char *)slide, + LoadFarStringSmall(ErrUnzipNoFile), r == 3? + LoadFarString(NotEnoughMem) : + LoadFarString(InvalidComprData), + LoadFarStringSmall2(Inflate))); + error = (r == 3)? PK_MEM3 : PK_ERR; + } + if (G.outcnt == 0L) /* inflate's final FLUSH sets outcnt */ + break; + break; + default: + if (uO.tflag) + error = PK_ERR | ((int)method << 8); + else { + Info(slide, 0x401, ((char *)slide, + LoadFarString(UnsupportedExtraField), method)); + error = PK_ERR; /* GRR: should be passed on up via SetEAs() */ + } + break; + } + + G.inptr = old_inptr; + G.incnt = old_incnt; + G.csize = old_csize; + G.mem_mode = FALSE; + + if (!error) { + register ulg crcval = crc32(CRCVAL_INITIAL, tgt, (extent)G.outcnt); + + if (crcval != extra_field_crc) { + if (uO.tflag) + error = PK_ERR | (DEFLATED << 8); /* kludge for now */ + else { + Info(slide, 0x401, ((char *)slide, + LoadFarString(BadExtraFieldCRC), G.zipfn, crcval, + extra_field_crc)); + error = PK_ERR; + } + } + } + return error; + +} /* end function memextract() */ + + + + + +/*************************/ +/* Function memflush() */ +/*************************/ + +int memflush(__G__ rawbuf, size) + __GDEF + uch *rawbuf; + ulg size; +{ + if (size > G.outsize) + return 50; /* more data than output buffer can hold */ + + memcpy((char *)G.outbufptr, (char *)rawbuf, (extent)size); + G.outbufptr += (unsigned int)size; + G.outsize -= size; + G.outcnt += size; + + return 0; + +} /* end function memflush() */ + + + + + +/*************************/ +/* Function fnfilter() */ /* here instead of in list.c for SFX */ +/*************************/ + +char *fnfilter(raw, space) /* convert name to safely printable form */ + ZCONST char *raw; + uch *space; +{ +#ifndef NATIVE /* ASCII: filter ANSI escape codes, etc. */ + uch *r=(uch *)raw, *s=space; + + while (*r) { +#ifdef QDOS + if (qlflag & 2) { + if (*r == '/' || *r == '.') { + ++r; + *s++ = '_'; + continue; + } + } else +#endif + if (*r < 32) + *s++ = '^', *s++ = (uch)(64 + *r++); + else + *s++ = *r++; + } + *s = 0; + +#ifdef WINDLL + INTERN_TO_ISO((char *)space, (char *)space); /* translate to ANSI */ +#else +#ifdef WIN32 + /* Win9x console always uses OEM character coding, and + WinNT console is set to OEM charset by default, too */ + INTERN_TO_OEM((char *)space, (char *)space); +#endif /* WIN32 */ +#endif /* ?WINDLL */ + + return (char *)space; + +#else /* NATIVE: EBCDIC or whatever */ + return (char *)raw; +#endif + +} /* end function fnfilter() */ + + + + + +#ifdef SET_DIR_ATTRIB +/* must sort saved directories so can set perms from bottom up */ + +/************************/ +/* Function dircomp() */ +/************************/ + +static int dircomp(a, b) /* used by qsort(); swiped from Zip */ + ZCONST zvoid *a, *b; +{ + /* order is significant: this sorts in reverse order (deepest first) */ + return strcmp((*(dirtime **)b)->fn, (*(dirtime **)a)->fn); + /* return namecmp((*(dirtime **)b)->fn, (*(dirtime **)a)->fn); */ +} + + + +#if 0 /* not used in Unix, but maybe for future OSes? */ + +/************************/ +/* Function namecmp() */ +/************************/ + +static int namecmp(s1, s2) /* [not] used by dircomp(); swiped from Zip */ + ZCONST char *s1, *s2; +{ + int d; + + for (;;) { + d = (int)(uch)case_map(*s1) + - (int)(uch)case_map(*s2); + + if (d || *s1 == 0 || *s2 == 0) + return d; + + s1++; + s2++; + } +} + +#endif /* 0 */ +#endif /* SET_DIR_ATTRIB */ diff --git a/Build/source/extra/unzip/fileio.c b/Build/source/extra/unzip/fileio.c new file mode 100644 index 00000000000..97001b579df --- /dev/null +++ b/Build/source/extra/unzip/fileio.c @@ -0,0 +1,2151 @@ +/*--------------------------------------------------------------------------- + + fileio.c + + This file contains routines for doing direct but relatively generic input/ + output, file-related sorts of things, plus some miscellaneous stuff. Most + of the stuff has to do with opening, closing, reading and/or writing files. + + Contains: open_input_file() + open_outfile() (non-VMS, non-AOS/VS, non-CMS_MVS) + undefer_input() + defer_leftover_input() + readbuf() + readbyte() + fillinbuf() + flush() (non-VMS) + disk_error() (non-VMS) + UzpMessagePrnt() + UzpMessageNull() (DLL only) + UzpInput() + UzpMorePause() + UzpPassword() (non-WINDLL) + handler() + dos_to_unix_time() (non-VMS, non-VM/CMS, non-MVS) + check_for_newer() (non-VMS, non-OS/2, non-VM/CMS, non-MVS) + do_string() + makeword() + makelong() + str2iso() (CRYPT && NEED_STR2ISO, only) + str2oem() (CRYPT && NEED_STR2OEM, only) + memset() (ZMEM only) + memcpy() (ZMEM only) + zstrnicmp() + zstat() (REGULUS only) + fLoadFarString() (SMALL_MEM only) + fLoadFarStringSmall() (SMALL_MEM only) + fLoadFarStringSmall2() (SMALL_MEM only) + zfstrcpy() (SMALL_MEM only) + + ---------------------------------------------------------------------------*/ + + +#define FILEIO_C +#define UNZIP_INTERNAL +#include "unzip.h" +#ifdef WINDLL +# include "windll/windll.h" +# include +#endif +#include "crypt.h" +#include "ttyio.h" + +/* setup of codepage conversion for decryption passwords */ +#if CRYPT +# if (defined(CRYP_USES_ISO2OEM) && !defined(IZ_ISO2OEM_ARRAY)) +# define IZ_ISO2OEM_ARRAY /* pull in iso2oem[] table */ +# endif +# if (defined(CRYP_USES_OEM2ISO) && !defined(IZ_OEM2ISO_ARRAY)) +# define IZ_OEM2ISO_ARRAY /* pull in oem2iso[] table */ +# endif +#endif +#include "ebcdic.h" /* definition/initialization of ebcdic[] */ + + +/* + Note: Under Windows, the maximum size of the buffer that can be used + with any of the *printf calls is 16,384, so win_fprintf was used to + feed the fprintf clone no more than 16K chunks at a time. This should + be valid for anything up to 64K (and probably beyond, assuming your + buffers are that big). +*/ +#ifdef WINDLL +# define WriteError(buf,len,strm) \ + (win_fprintf(pG, strm, (extent)len, (char far *)buf) != (int)(len)) +#else /* !WINDLL */ +# ifdef USE_FWRITE +# define WriteError(buf,len,strm) \ + ((extent)fwrite((char *)(buf),1,(extent)(len),strm) != (extent)(len)) +# else +# define WriteError(buf,len,strm) \ + ((extent)write(fileno(strm),(char *)(buf),(extent)(len)) != (extent)(len)) +# endif +#endif /* ?WINDLL */ + +static int disk_error OF((__GPRO)); + + +/****************************/ +/* Strings used in fileio.c */ +/****************************/ + +#if (defined(UNIX) || defined(DOS_FLX_OS2_W32) || defined(__BEOS__)) + static ZCONST char Far CannotDeleteOldFile[] = + "error: cannot delete old %s\n"; +#ifdef UNIXBACKUP + static ZCONST char Far CannotRenameOldFile[] = + "error: cannot rename old %s\n"; + static ZCONST char Far BackupSuffix[] = "~"; +#endif +#endif /* UNIX || DOS_FLX_OS2_W32 || __BEOS__ */ + +static ZCONST char Far CannotOpenZipfile[] = + "error: cannot open zipfile [ %s ]\n"; +#if (!defined(VMS) && !defined(AOS_VS) && !defined(CMS_MVS) && !defined(MACOS)) + static ZCONST char Far CannotCreateFile[] = "error: cannot create %s\n"; +#endif +#ifdef NOVELL_BUG_FAILSAFE + static ZCONST char Far NovellBug[] = + "error: %s: stat() says does not exist, but fopen() found anyway\n"; +#endif +static ZCONST char Far ReadError[] = "error: zipfile read error\n"; +static ZCONST char Far FilenameTooLongTrunc[] = + "warning: filename too long--truncating.\n"; +static ZCONST char Far ExtraFieldTooLong[] = + "warning: extra field too long (%d). Ignoring...\n"; + +#ifdef WINDLL + static ZCONST char Far DiskFullQuery[] = + "%s: write error (disk full?).\n"; +#else + static ZCONST char Far DiskFullQuery[] = + "%s: write error (disk full?). Continue? (y/n/^C) "; + static ZCONST char Far ZipfileCorrupt[] = + "error: zipfile probably corrupt (%s)\n"; +# ifdef SYMLINKS + static ZCONST char Far FileIsSymLink[] = + "%s exists and is a symbolic link%s.\n"; +# endif +# ifdef MORE + static ZCONST char Far MorePrompt[] = "--More--(%lu)"; +# endif + static ZCONST char Far QuitPrompt[] = + "--- Press `Q' to quit, or any other key to continue ---"; + static ZCONST char Far HidePrompt[] = /* "\r \r"; */ + "\r \r"; +# if CRYPT +# ifdef MACOS + /* SPC: are names on MacOS REALLY so much longer than elsewhere ??? */ + static ZCONST char Far PasswPrompt[] = "[%s]\n %s password: "; +# else + static ZCONST char Far PasswPrompt[] = "[%s] %s password: "; +# endif + static ZCONST char Far PasswPrompt2[] = "Enter password: "; + static ZCONST char Far PasswRetry[] = "password incorrect--reenter: "; +# endif /* CRYPT */ +#endif /* !WINDLL */ + + + + + +/******************************/ +/* Function open_input_file() */ +/******************************/ + +int open_input_file(__G) /* return 1 if open failed */ + __GDEF +{ + /* + * open the zipfile for reading and in BINARY mode to prevent cr/lf + * translation, which would corrupt the bitstreams + */ + +#if (defined(UNIX) || defined(TOPS20) || defined(AOS_VS) || defined(__BEOS__)) + G.zipfd = open(G.zipfn, O_RDONLY); +#else /* !(UNIX || TOPS20 || AOS_VS || __BEOS__) */ +#ifdef VMS + G.zipfd = open(G.zipfn, O_RDONLY, 0, "ctx=stm"); +#else /* !VMS */ +#ifdef MACOS + G.zipfd = open(G.zipfn, 0); +#else /* !MACOS */ +#ifdef RISCOS + G.zipfd = fopen(G.zipfn, "rb"); +#else /* !RISCOS */ +#ifdef CMS_MVS + G.zipfd = vmmvs_open_infile(__G); +#else /* !CMS_MVS */ + G.zipfd = open(G.zipfn, O_RDONLY | O_BINARY); +#endif /* ?CMS_MVS */ +#endif /* ?RISCOS */ +#endif /* ?MACOS */ +#endif /* ?VMS */ +#endif /* ?(UNIX || TOPS20 || AOS_VS || __BEOS__) */ + +#ifdef USE_STRM_INPUT + if (G.zipfd == NULL) +#else + /* if (G.zipfd < 0) */ /* no good for Windows CE port */ + if (G.zipfd == -1) +#endif + { + Info(slide, 0x401, ((char *)slide, LoadFarString(CannotOpenZipfile), + G.zipfn)); + return 1; + } + return 0; + +} /* end function open_input_file() */ + + + + +#if (!defined(VMS) && !defined(AOS_VS) && !defined(CMS_MVS) && !defined(MACOS)) + +/***************************/ +/* Function open_outfile() */ +/***************************/ + +int open_outfile(__G) /* return 1 if fail */ + __GDEF +{ +#ifdef DLL + if (G.redirect_data) + return (redirect_outfile(__G) == FALSE); +#endif +#ifdef QDOS + QFilename(__G__ G.filename); +#endif +#if (defined(DOS_FLX_OS2_W32) || defined(UNIX) || defined(__BEOS__)) +#ifdef BORLAND_STAT_BUG + /* Borland 5.0's stat() barfs if the filename has no extension and the + * file doesn't exist. */ + if (access(G.filename, 0) == -1) { + FILE *tmp = fopen(G.filename, "wb+"); + + /* file doesn't exist, so create a dummy file to keep stat() from + * failing (will be over-written anyway) */ + fputc('0', tmp); /* just to have something in the file */ + fclose(tmp); + } +#endif /* BORLAND_STAT_BUG */ +#ifdef SYMLINKS + if (SSTAT(G.filename, &G.statbuf) == 0 || lstat(G.filename,&G.statbuf) == 0) +#else + if (SSTAT(G.filename, &G.statbuf) == 0) +#endif /* ?SYMLINKS */ + { + Trace((stderr, "open_outfile: stat(%s) returns 0: file exists\n", + FnFilter1(G.filename))); +#ifdef UNIXBACKUP + if (uO.B_flag) { /* do backup */ + char *tname; + int blen, flen, tlen; + + blen = strlen(BackupSuffix); + flen = strlen(G.filename); + tlen = flen + blen + 1; + if (tlen >= FILNAMSIZ) { /* in case name is too long, truncate */ + tname = (char *)malloc(FILNAMSIZ); + if (tname == NULL) + return 1; /* in case we run out of space */ + tlen = FILNAMSIZ - 1 - blen; + strcpy(tname, G.filename); /* make backup name */ + tname[tlen] = '\0'; + } else { + tname = (char *)malloc(tlen); + if (tname == NULL) + return 1; /* in case we run out of space */ + strcpy(tname, G.filename); /* make backup name */ + } + strcpy(tname+flen, BackupSuffix); + + /* GRR: should check if backup file exists, apply -n/-o to that */ + if (rename(G.filename, tname) < 0) { /* move file */ + Info(slide, 0x401, ((char *)slide, + LoadFarString(CannotRenameOldFile), FnFilter1(G.filename))); + free(tname); + return 1; + } + free(tname); + } else +#endif /* UNIXBACKUP */ +#ifdef DOS_FLX_OS2_W32 + if (!(G.statbuf.st_mode & S_IWRITE)) { + Trace((stderr, "open_outfile: existing file %s is read-only\n", + FnFilter1(G.filename))); + chmod(G.filename, S_IREAD | S_IWRITE); + Trace((stderr, "open_outfile: %s now writable\n", + FnFilter1(G.filename))); + } +#endif /* DOS_FLX_OS2_W32 */ + if (unlink(G.filename) != 0) { + Info(slide, 0x401, ((char *)slide, + LoadFarString(CannotDeleteOldFile), FnFilter1(G.filename))); + return 1; + } + Trace((stderr, "open_outfile: %s now deleted\n", + FnFilter1(G.filename))); + } +#endif /* DOS_FLX_OS2_W32 || UNIX || __BEOS__ */ +#ifdef RISCOS + if (SWI_OS_File_7(G.filename,0xDEADDEAD,0xDEADDEAD,G.lrec.ucsize)!=NULL) { + Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile), + FnFilter1(G.filename))); + return 1; + } +#endif /* RISCOS */ +#ifdef TOPS20 + char *tfilnam; + + if ((tfilnam = (char *)malloc(2*strlen(G.filename)+1)) == (char *)NULL) + return 1; + strcpy(tfilnam, G.filename); + upper(tfilnam); + enquote(tfilnam); + if ((G.outfile = fopen(tfilnam, FOPW)) == (FILE *)NULL) { + Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile), + tfilnam)); + free(tfilnam); + return 1; + } + free(tfilnam); +#else /* !TOPS20 */ +#ifdef MTS + if (uO.aflag) + G.outfile = fopen(G.filename, FOPWT); + else + G.outfile = fopen(G.filename, FOPW); + if (G.outfile == (FILE *)NULL) { + Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile), + FnFilter1(G.filename))); + return 1; + } +#else /* !MTS */ +#ifdef TANDEM + if (SSTAT(G.filename, &G.statbuf) == 0) { + Trace((stderr, "open_outfile: stat(%s) returns 0 (file exists)\n", + FnFilter1(G.filename))); + if (unlink(G.filename) != 0) { + Trace((stderr, "open_outfile: existing file %s is read-only\n", + FnFilter1(G.filename))); + chmod(G.filename, S_IRUSR | S_IWUSR); + Trace((stderr, "open_outfile: %s now writable\n", + FnFilter1(G.filename))); + if (unlink(G.filename) != 0) + return 1; + } + Trace((stderr, "open_outfile: %s now deleted\n", + FnFilter1(G.filename))); + } + if (G.pInfo->textmode) + G.outfile = fopen(G.filename, FOPWT); + else + G.outfile = fopen(G.filename, FOPW); + if (G.outfile == (FILE *)NULL) { + Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile), + FnFilter1(G.filename))); + return 1; + } +#else /* !TANDEM */ +#ifdef DEBUG + Info(slide, 1, ((char *)slide, + "open_outfile: doing fopen(%s) for reading\n", FnFilter1(G.filename))); + if ((G.outfile = fopen(G.filename, FOPR)) == (FILE *)NULL) + Info(slide, 1, ((char *)slide, + "open_outfile: fopen(%s) for reading failed: does not exist\n", + FnFilter1(G.filename))); + else { + Info(slide, 1, ((char *)slide, + "open_outfile: fopen(%s) for reading succeeded: file exists\n", + FnFilter1(G.filename))); + fclose(G.outfile); + } +#endif /* DEBUG */ +#ifdef NOVELL_BUG_FAILSAFE + if (G.dne && ((G.outfile = fopen(G.filename, FOPR)) != (FILE *)NULL)) { + Info(slide, 0x401, ((char *)slide, LoadFarString(NovellBug), + FnFilter1(G.filename))); + fclose(G.outfile); + return 1; /* with "./" fix in checkdir(), should never reach here */ + } +#endif /* NOVELL_BUG_FAILSAFE */ + Trace((stderr, "open_outfile: doing fopen(%s) for writing\n", + FnFilter1(G.filename))); + if ((G.outfile = fopen(G.filename, FOPW)) == (FILE *)NULL) { + Info(slide, 0x401, ((char *)slide, LoadFarString(CannotCreateFile), + FnFilter1(G.filename))); + return 1; + } + Trace((stderr, "open_outfile: fopen(%s) for writing succeeded\n", + FnFilter1(G.filename))); +#endif /* !TANDEM */ +#endif /* !MTS */ +#endif /* !TOPS20 */ + +#ifdef USE_FWRITE +#ifdef DOS_OS2_W32 + /* 16-bit MSC: buffer size must be strictly LESS than 32K (WSIZE): bogus */ + setbuf(G.outfile, (char *)NULL); /* make output unbuffered */ +#else /* !DOS_OS2_W32 */ +#ifndef RISCOS +#ifdef _IOFBF /* make output fully buffered (works just about like write()) */ + setvbuf(G.outfile, (char *)slide, _IOFBF, WSIZE); +#else + setbuf(G.outfile, (char *)slide); +#endif +#endif /* !RISCOS */ +#endif /* ?DOS_OS2_W32 */ +#endif /* USE_FWRITE */ + return 0; + +} /* end function open_outfile() */ + +#endif /* !VMS && !AOS_VS && !CMS_MVS && !MACOS */ + + + + + +/* + * These functions allow NEXTBYTE to function without needing two bounds + * checks. Call defer_leftover_input() if you ever have filled G.inbuf + * by some means other than readbyte(), and you then want to start using + * NEXTBYTE. When going back to processing bytes without NEXTBYTE, call + * undefer_input(). For example, extract_or_test_member brackets its + * central section that does the decompression with these two functions. + * If you need to check the number of bytes remaining in the current + * file while using NEXTBYTE, check (G.csize + G.incnt), not G.csize. + */ + +/****************************/ +/* function undefer_input() */ +/****************************/ + +void undefer_input(__G) + __GDEF +{ + if (G.incnt > 0) + G.csize += G.incnt; + if (G.incnt_leftover > 0) { + /* We know that "(G.csize < MAXINT)" so we can cast G.csize to int: + * This condition was checked when G.incnt_leftover was set > 0 in + * defer_leftover_input(), and it is NOT allowed to touch G.csize + * before calling undefer_input() when (G.incnt_leftover > 0) + * (single exception: see read_byte()'s "G.csize <= 0" handling) !! + */ + G.incnt = G.incnt_leftover + (int)G.csize; + G.inptr = G.inptr_leftover - (int)G.csize; + G.incnt_leftover = 0; + } else if (G.incnt < 0) + G.incnt = 0; +} /* end function undefer_input() */ + + + + + +/***********************************/ +/* function defer_leftover_input() */ +/***********************************/ + +void defer_leftover_input(__G) + __GDEF +{ + if ((long)G.incnt > G.csize) { + /* (G.csize < MAXINT), we can safely cast it to int !! */ + if (G.csize < 0L) + G.csize = 0L; + G.inptr_leftover = G.inptr + (int)G.csize; + G.incnt_leftover = G.incnt - (int)G.csize; + G.incnt = (int)G.csize; + } else + G.incnt_leftover = 0; + G.csize -= G.incnt; +} /* end function defer_leftover_input() */ + + + + + +/**********************/ +/* Function readbuf() */ +/**********************/ + +unsigned readbuf(__G__ buf, size) /* return number of bytes read into buf */ + __GDEF + char *buf; + register unsigned size; +{ + register unsigned count; + unsigned n; + + n = size; + while (size) { + if (G.incnt <= 0) { + if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) == 0) + return (n-size); + else if (G.incnt < 0) { + /* another hack, but no real harm copying same thing twice */ + (*G.message)((zvoid *)&G, + (uch *)LoadFarString(ReadError), /* CANNOT use slide */ + (ulg)strlen(LoadFarString(ReadError)), 0x401); + return 0; /* discarding some data; better than lock-up */ + } + /* buffer ALWAYS starts on a block boundary: */ + G.cur_zipfile_bufstart += INBUFSIZ; + G.inptr = G.inbuf; + } + count = MIN(size, (unsigned)G.incnt); + memcpy(buf, G.inptr, count); + buf += count; + G.inptr += count; + G.incnt -= count; + size -= count; + } + return n; + +} /* end function readbuf() */ + + + + + +/***********************/ +/* Function readbyte() */ +/***********************/ + +int readbyte(__G) /* refill inbuf and return a byte if available, else EOF */ + __GDEF +{ + if (G.mem_mode) + return EOF; + if (G.csize <= 0) { + G.csize--; /* for tests done after exploding */ + G.incnt = 0; + return EOF; + } + if (G.incnt <= 0) { + if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) == 0) { + G.incnt = 0; /* do not allow negative value to affect stuff */ + return EOF; + } else if (G.incnt < 0) { /* "fail" (abort, retry, ...) returns this */ + /* another hack, but no real harm copying same thing twice */ + (*G.message)((zvoid *)&G, + (uch *)LoadFarString(ReadError), + (ulg)strlen(LoadFarString(ReadError)), 0x401); + echon(); +#ifdef WINDLL + longjmp(dll_error_return, 1); +#else + DESTROYGLOBALS() + EXIT(PK_BADERR); /* totally bailing; better than lock-up */ +#endif + } + G.cur_zipfile_bufstart += INBUFSIZ; /* always starts on block bndry */ + G.inptr = G.inbuf; + defer_leftover_input(__G); /* decrements G.csize */ + } + +#if CRYPT + if (G.pInfo->encrypted) { + uch *p; + int n; + + /* This was previously set to decrypt one byte beyond G.csize, when + * incnt reached that far. GRR said, "but it's required: why?" This + * was a bug in fillinbuf() -- was it also a bug here? + */ + for (n = G.incnt, p = G.inptr; n--; p++) + zdecode(*p); + } +#endif /* CRYPT */ + + --G.incnt; + return *G.inptr++; + +} /* end function readbyte() */ + + + + + +#ifdef USE_ZLIB + +/************************/ +/* Function fillinbuf() */ +/************************/ + +int fillinbuf(__G) /* like readbyte() except returns number of bytes in inbuf */ + __GDEF +{ + if (G.mem_mode || + (G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) <= 0) + return 0; + G.cur_zipfile_bufstart += INBUFSIZ; /* always starts on a block boundary */ + G.inptr = G.inbuf; + defer_leftover_input(__G); /* decrements G.csize */ + +#if CRYPT + if (G.pInfo->encrypted) { + uch *p; + int n; + + for (n = G.incnt, p = G.inptr; n--; p++) + zdecode(*p); + } +#endif /* CRYPT */ + + return G.incnt; + +} /* end function fillinbuf() */ + +#endif /* USE_ZLIB */ + + + + + +#ifndef VMS /* for VMS use code in vms.c */ + +/********************/ +/* Function flush() */ /* returns PK error codes: */ +/********************/ /* if cflag => always 0; PK_DISK if write error */ + +int flush(__G__ rawbuf, size, unshrink) + __GDEF + uch *rawbuf; + ulg size; + int unshrink; +{ + register uch *p, *q; + uch *transbuf; +#if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV)) + ulg transbufsiz; +#endif + /* static int didCRlast = FALSE; moved to globals.h */ + + +/*--------------------------------------------------------------------------- + Compute the CRC first; if testing or if disk is full, that's it. + ---------------------------------------------------------------------------*/ + + G.crc32val = crc32(G.crc32val, rawbuf, (extent)size); + +#ifdef DLL + if ((G.statreportcb != NULL) && + (*G.statreportcb)(__G__ UZ_ST_IN_PROGRESS, G.zipfn, G.filename, NULL)) + return IZ_CTRLC; /* cancel operation by user request */ +#endif + + if (uO.tflag || size == 0L) /* testing or nothing to write: all done */ + return PK_OK; + + if (G.disk_full) + return PK_DISK; /* disk already full: ignore rest of file */ + +/*--------------------------------------------------------------------------- + Write the bytes rawbuf[0..size-1] to the output device, first converting + end-of-lines and ASCII/EBCDIC as needed. If SMALL_MEM or MED_MEM are NOT + defined, outbuf is assumed to be at least as large as rawbuf and is not + necessarily checked for overflow. + ---------------------------------------------------------------------------*/ + + if (!G.pInfo->textmode) { /* write raw binary data */ + /* GRR: note that for standard MS-DOS compilers, size argument to + * fwrite() can never be more than 65534, so WriteError macro will + * have to be rewritten if size can ever be that large. For now, + * never more than 32K. Also note that write() returns an int, which + * doesn't necessarily limit size to 32767 bytes if write() is used + * on 16-bit systems but does make it more of a pain; however, because + * at least MSC 5.1 has a lousy implementation of fwrite() (as does + * DEC Ultrix cc), write() is used anyway. + */ +#ifdef DLL + if (G.redirect_data) + writeToMemory(__G__ rawbuf, size); + else +#endif + if (!uO.cflag && WriteError(rawbuf, size, G.outfile)) + return disk_error(__G); + else if (uO.cflag && (*G.message)((zvoid *)&G, rawbuf, size, 0)) + return 0; + } else { /* textmode: aflag is true */ + if (unshrink) { + /* rawbuf = outbuf */ + transbuf = G.outbuf2; +#if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV)) + transbufsiz = TRANSBUFSIZ; +#endif + } else { + /* rawbuf = slide */ + transbuf = G.outbuf; +#if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV)) + transbufsiz = OUTBUFSIZ; + Trace((stderr, "\ntransbufsiz = OUTBUFSIZ = %u\n", OUTBUFSIZ)); +#endif + } + if (G.newfile) { +#ifdef VMS_TEXT_CONV + /* GRR: really want to check if -aa (or -aaa?) was given... */ + if (rawbuf[1]) { /* first line is more than 255 chars long */ + Trace((stderr, + "\nfirst line of VMS `text' too long; switching to normal extraction\n")); + G.VMS_line_state = -1; /* -1: don't treat as VMS text */ + } else + G.VMS_line_state = 0; /* 0: ready to read line length */ +#endif + G.didCRlast = FALSE; /* no previous buffers written */ + G.newfile = FALSE; + } + +#ifdef VMS_TEXT_CONV + if (G.pInfo->hostnum == VMS_ && G.extra_field && G.VMS_line_state >= 0) + { + /* GRR: really want to check for actual VMS extra field, and + * ideally for variable-length record format */ +/* + printf("\n>>>>>> GRR: file is VMS text and has an extra field\n"); + */ + + p = rawbuf; + q = transbuf; + while(p < rawbuf+(unsigned)size) { + switch (G.VMS_line_state) { + + /* 0: ready to read line length */ + case 0: + G.VMS_line_length = 0; + G.VMS_line_pad = 0; + if (p == rawbuf+(unsigned)size-1) { /* last char */ + G.VMS_line_length = (int)((uch)(*p++)); + G.VMS_line_state = 1; + } else { + G.VMS_line_length = makeword(p); + p += 2; + G.VMS_line_state = 2; + } + if (G.VMS_line_length & 1) /* odd */ + G.VMS_line_pad = 1; + break; + + /* 1: read one byte of length, need second */ + case 1: + G.VMS_line_length += ((int)((uch)(*p++)) << 8); + G.VMS_line_state = 2; + break; + + /* 2: ready to read VMS_line_length chars */ + case 2: + if (G.VMS_line_length < rawbuf+(unsigned)size-p) { + if (G.VMS_line_length >= + transbuf+(unsigned)transbufsiz-q) + { + int outroom = transbuf+(unsigned)transbufsiz-q; + +/* GRR: need to change this to *q++ = native(*p++); loop or something */ + memcpy(q, p, outroom); +#ifdef DLL + if (G.redirect_data) + writeToMemory(__G__ transbuf, + (unsigned)outroom); + else +#endif + if (!uO.cflag && WriteError(transbuf, + (unsigned)outroom, G.outfile)) + return disk_error(__G); + else if (uO.cflag && (*G.message)((zvoid *)&G, + transbuf, (ulg)outroom, 0)) + return 0; + q = transbuf; + p += outroom; + G.VMS_line_length -= outroom; + /* fall through to normal case */ + } +/* GRR: need to change this to *q++ = native(*p++); loop or something */ + memcpy(q, p, G.VMS_line_length); + q += G.VMS_line_length; + p += G.VMS_line_length; + G.VMS_line_length = 0; /* necessary?? */ + G.VMS_line_state = 3; + + } else { /* remaining input is less than full line */ + int remaining = rawbuf+(unsigned)size-p; + + if (remaining < + transbuf+(unsigned)transbufsiz-q) + { + int outroom = transbuf+(unsigned)transbufsiz-q; + +/* GRR: need to change this to *q++ = native(*p++); loop or something */ + memcpy(q, p, outroom); +#ifdef DLL + if (G.redirect_data) + writeToMemory(__G__ transbuf, + (unsigned)(outroom)); + else +#endif + if (!uO.cflag && WriteError(transbuf, + (unsigned)outroom, G.outfile)) + return disk_error(__G); + else if (uO.cflag && (*G.message)((zvoid *)&G, + transbuf, (ulg)outroom, 0)) + return 0; + q = transbuf; + p += outroom; + remaining -= outroom; + } +/* GRR: need to change this to *q++ = native(*p++); loop or something */ + memcpy(q, p, remaining); + q += remaining; + p += remaining; + G.VMS_line_length -= remaining; + /* no change in G.VMS_line_state */ + } + break; + + /* 3: ready to PutNativeEOL */ + case 3: + if (q > transbuf+(unsigned)transbufsiz-lenEOL) { +#ifdef DLL + if (G.redirect_data) + writeToMemory(__G__ transbuf, + (unsigned)(q-transbuf)); + else +#endif + if (!uO.cflag && + WriteError(transbuf, (unsigned)(q-transbuf), + G.outfile)) + return disk_error(__G); + else if (uO.cflag && (*G.message)((zvoid *)&G, + transbuf, (ulg)(q-transbuf), 0)) + return 0; + q = transbuf; + } + PutNativeEOL + if (G.VMS_line_pad) + if (p < rawbuf+(unsigned)size) { + ++p; + G.VMS_line_state = 0; + } else + G.VMS_line_state = 4; + else + G.VMS_line_state = 0; + break; + + /* 4: ready to read pad byte */ + case 4: + ++p; + G.VMS_line_state = 0; + break; + } + } /* end while */ + + } else +#endif /* VMS_TEXT_CONV */ + + /*----------------------------------------------------------------------- + Algorithm: CR/LF => native; lone CR => native; lone LF => native. + This routine is only for non-raw-VMS, non-raw-VM/CMS files (i.e., + stream-oriented files, not record-oriented). + -----------------------------------------------------------------------*/ + + /* else not VMS text */ { + p = rawbuf; + if (*p == LF && G.didCRlast) + ++p; + G.didCRlast = FALSE; + for (q = transbuf; p < rawbuf+(unsigned)size; ++p) { + if (*p == CR) { /* lone CR or CR/LF: EOL either way */ + PutNativeEOL + if (p == rawbuf+(unsigned)size-1) /* last char in buffer */ + G.didCRlast = TRUE; + else if (p[1] == LF) /* get rid of accompanying LF */ + ++p; + } else if (*p == LF) /* lone LF */ + PutNativeEOL + else +#ifndef DOS_FLX_OS2_W32 + if (*p != CTRLZ) /* lose all ^Z's */ +#endif + *q++ = native(*p); + +#if (defined(SMALL_MEM) || defined(MED_MEM)) +# if (lenEOL == 1) /* don't check unshrink: both buffers small but equal */ + if (!unshrink) +# endif + /* check for danger of buffer overflow and flush */ + if (q > transbuf+(unsigned)transbufsiz-lenEOL) { + Trace((stderr, + "p - rawbuf = %u q-transbuf = %u size = %lu\n", + (unsigned)(p-rawbuf), (unsigned)(q-transbuf), size)); + if (!uO.cflag && WriteError(transbuf, + (unsigned)(q-transbuf), G.outfile)) + return disk_error(__G); + else if (uO.cflag && (*G.message)((zvoid *)&G, + transbuf, (ulg)(q-transbuf), 0)) + return 0; + q = transbuf; + continue; + } +#endif /* SMALL_MEM || MED_MEM */ + } + } + + /*----------------------------------------------------------------------- + Done translating: write whatever we've got to file (or screen). + -----------------------------------------------------------------------*/ + + Trace((stderr, "p - rawbuf = %u q-transbuf = %u size = %lu\n", + (unsigned)(p-rawbuf), (unsigned)(q-transbuf), size)); + if (q > transbuf) { +#ifdef DLL + if (G.redirect_data) + writeToMemory(__G__ transbuf, (unsigned)(q-transbuf)); + else +#endif + if (!uO.cflag && WriteError(transbuf, (unsigned)(q-transbuf), + G.outfile)) + return disk_error(__G); + else if (uO.cflag && (*G.message)((zvoid *)&G, transbuf, + (ulg)(q-transbuf), 0)) + return 0; + } + } + + return 0; + +} /* end function flush() */ + + + + + +/*************************/ +/* Function disk_error() */ +/*************************/ + +static int disk_error(__G) + __GDEF +{ + /* OK to use slide[] here because this file is finished regardless */ + Info(slide, 0x4a1, ((char *)slide, LoadFarString(DiskFullQuery), + FnFilter1(G.filename))); + +#ifndef WINDLL + fgets(G.answerbuf, 9, stdin); + if (*G.answerbuf == 'y') /* stop writing to this file */ + G.disk_full = 1; /* (outfile bad?), but new OK */ + else +#endif + G.disk_full = 2; /* no: exit program */ + + return PK_DISK; + +} /* end function disk_error() */ + +#endif /* !VMS */ + + + + + +/*****************************/ +/* Function UzpMessagePrnt() */ +/*****************************/ + +int UZ_EXP UzpMessagePrnt(pG, buf, size, flag) + zvoid *pG; /* globals struct: always passed */ + uch *buf; /* preformatted string to be printed */ + ulg size; /* length of string (may include nulls) */ + int flag; /* flag bits */ +{ + /* IMPORTANT NOTE: + * The name of the first parameter of UzpMessagePrnt(), which passes + * the "Uz_Globs" address, >>> MUST <<< be identical to the string + * expansion of the __G__ macro in the REENTRANT case (see globals.h). + * This name identity is mandatory for the LoadFarString() macro + * (in the SMALL_MEM case) !!! + */ + int error; + uch *q=buf, *endbuf=buf+(unsigned)size; +#ifdef MORE + uch *p=buf-1; +#endif + FILE *outfp; + + +/*--------------------------------------------------------------------------- + These tests are here to allow fine-tuning of UnZip's output messages, + but none of them will do anything without setting the appropriate bit + in the flag argument of every Info() statement which is to be turned + *off*. That is, all messages are currently turned on for all ports. + To turn off *all* messages, use the UzpMessageNull() function instead + of this one. + ---------------------------------------------------------------------------*/ + +#if (defined(OS2) && defined(DLL)) + if (MSG_NO_DLL2(flag)) /* if OS/2 DLL bit is set, do NOT print this msg */ + return 0; +#endif +#ifdef WINDLL + if (MSG_NO_WDLL(flag)) + return 0; +#endif +#ifdef WINDLL + if (MSG_NO_WGUI(flag)) + return 0; +#endif +/* +#ifdef ACORN_GUI + if (MSG_NO_AGUI(flag)) + return 0; +#endif + */ +#ifdef DLL /* don't display message if data is redirected */ + if (((Uz_Globs *)pG)->redirect_data && + !((Uz_Globs *)pG)->redirect_text) + return 0; +#endif + + if (MSG_STDERR(flag) && !((Uz_Globs *)pG)->UzO.tflag) + outfp = (FILE *)stderr; + else + outfp = (FILE *)stdout; + +#ifdef QUERY_TRNEWLN + /* some systems require termination of query prompts with '\n' to force + * immediate display */ + if (MSG_MNEWLN(flag)) { /* assumes writable buffer (e.g., slide[]) */ + *endbuf++ = '\n'; /* with room for one more char at end of buf */ + ++size; /* (safe assumption: only used for four */ + } /* short queries in extract.c and fileio.c) */ +#endif + + if (MSG_TNEWLN(flag)) { /* again assumes writable buffer: fragile... */ + if ((!size && !((Uz_Globs *)pG)->sol) || + (size && (endbuf[-1] != '\n'))) + { + *endbuf++ = '\n'; + ++size; + } + } + +#ifdef MORE + /* room for --More-- and one line of overlap: */ + ((Uz_Globs *)pG)->height = SCREENLINES - 2; +#endif + + if (MSG_LNEWLN(flag) && !((Uz_Globs *)pG)->sol) { + /* not at start of line: want newline */ +#ifdef OS2DLL + if (!((Uz_Globs *)pG)->redirect_text) { +#endif + putc('\n', outfp); + fflush(outfp); +#ifdef MORE + if (((Uz_Globs *)pG)->M_flag) + { + ++((Uz_Globs *)pG)->numlines; + if (((Uz_Globs *)pG)->numlines % + ((Uz_Globs *)pG)->height == 0L) /* GRR: fix */ + (*((Uz_Globs *)pG)->mpause)((zvoid *)pG, + LoadFarString(MorePrompt), 1); + } +#endif /* MORE */ + if (MSG_STDERR(flag) && ((Uz_Globs *)pG)->UzO.tflag && + !isatty(1) && isatty(2)) + { + /* error output from testing redirected: also send to stderr */ + putc('\n', stderr); + fflush(stderr); + } +#ifdef OS2DLL + } else + REDIRECTC('\n'); +#endif + ((Uz_Globs *)pG)->sol = TRUE; + } + + /* put zipfile name, filename and/or error/warning keywords here */ + +#ifdef MORE + if (((Uz_Globs *)pG)->M_flag +#ifdef OS2DLL + && !((Uz_Globs *)pG)->redirect_text +#endif + ) + { + while (++p < endbuf) { + if (*p == '\n') { + ++((Uz_Globs *)pG)->numlines; + if (((Uz_Globs *)pG)->numlines % + ((Uz_Globs *)pG)->height == 0L) /* GRR: fix */ + { + if ((error = WriteError(q, p-q+1, outfp)) != 0) + return error; + fflush(outfp); + ((Uz_Globs *)pG)->sol = TRUE; + q = p + 1; + (*((Uz_Globs *)pG)->mpause)((zvoid *)pG, + LoadFarString(MorePrompt), 1); + } + } + } /* end while */ + size = (ulg)(p - q); /* remaining text */ + } +#endif /* MORE */ + + if (size) { +#ifdef OS2DLL + if (!((Uz_Globs *)pG)->redirect_text) { +#endif + if ((error = WriteError(q, size, outfp)) != 0) + return error; + fflush(outfp); + if (MSG_STDERR(flag) && ((Uz_Globs *)pG)->UzO.tflag && + !isatty(1) && isatty(2)) + { + /* error output from testing redirected: also send to stderr */ + if ((error = WriteError(q, size, stderr)) != 0) + return error; + fflush(stderr); + } +#ifdef OS2DLL + } else { /* GRR: this is ugly: hide with macro */ + if ((error = REDIRECTPRINT(q, size)) != 0) + return error; + } +#endif + ((Uz_Globs *)pG)->sol = (endbuf[-1] == '\n'); + } + return 0; + +} /* end function UzpMessagePrnt() */ + + + + + +#ifdef DLL + +/*****************************/ +/* Function UzpMessageNull() */ /* convenience routine for no output at all */ +/*****************************/ + +int UZ_EXP UzpMessageNull(pG, buf, size, flag) + zvoid *pG; /* globals struct: always passed */ + uch *buf; /* preformatted string to be printed */ + ulg size; /* length of string (may include nulls) */ + int flag; /* flag bits */ +{ + return 0; + +} /* end function UzpMessageNull() */ + +#endif /* DLL */ + + + + + +/***********************/ +/* Function UzpInput() */ /* GRR: this is a placeholder for now */ +/***********************/ + +int UZ_EXP UzpInput(pG, buf, size, flag) + zvoid *pG; /* globals struct: always passed */ + uch *buf; /* preformatted string to be printed */ + int *size; /* (address of) size of buf and of returned string */ + int flag; /* flag bits (bit 0: no echo) */ +{ + /* tell picky compilers to shut up about "unused variable" warnings */ + pG = pG; buf = buf; flag = flag; + + *size = 0; + return 0; + +} /* end function UzpInput() */ + + + + + +#if (!defined(WINDLL) && !defined(MACOS)) + +/***************************/ +/* Function UzpMorePause() */ +/***************************/ + +void UZ_EXP UzpMorePause(pG, prompt, flag) + zvoid *pG; /* globals struct: always passed */ + ZCONST char *prompt; /* "--More--" prompt */ + int flag; /* 0 = any char OK; 1 = accept only '\n', ' ', q */ +{ + uch c; + +/*--------------------------------------------------------------------------- + Print a prompt and wait for the user to press a key, then erase prompt + if possible. + ---------------------------------------------------------------------------*/ + + if (!((Uz_Globs *)pG)->sol) + fprintf(stderr, "\n"); + /* numlines may or may not be used: */ + fprintf(stderr, prompt, ((Uz_Globs *)pG)->numlines); + fflush(stderr); + if (flag & 1) { + do { + c = (uch)FGETCH(0); + } while (c != '\r' && c != '\n' && c != ' ' && c != 'q' && c != 'Q'); + } else + c = (uch)FGETCH(0); + + /* newline was not echoed, so cover up prompt line */ + fprintf(stderr, LoadFarString(HidePrompt)); + fflush(stderr); + + if (ToLower(c) == 'q') { + DESTROYGLOBALS() + EXIT(PK_COOL); + } + + ((Uz_Globs *)pG)->sol = TRUE; + +} /* end function UzpMorePause() */ + +#endif /* !WINDLL && !MACOS */ + + + + +#ifndef WINDLL + +/**************************/ +/* Function UzpPassword() */ +/**************************/ + +int UZ_EXP UzpPassword (pG, rcnt, pwbuf, size, zfn, efn) + zvoid *pG; /* pointer to UnZip's internal global vars */ + int *rcnt; /* retry counter */ + char *pwbuf; /* buffer for password */ + int size; /* size of password buffer */ + ZCONST char *zfn; /* name of zip archive */ + ZCONST char *efn; /* name of archive entry being processed */ +{ +#if CRYPT + int r = IZ_PW_ENTERED; + char *m; + char *prompt; + +#ifndef REENTRANT + /* tell picky compilers to shut up about "unused variable" warnings */ + pG = pG; +#endif + + if (*rcnt == 0) { /* First call for current entry */ + *rcnt = 2; + if ((prompt = (char *)malloc(2*FILNAMSIZ + 15)) != (char *)NULL) { + sprintf(prompt, LoadFarString(PasswPrompt), + FnFilter1(zfn), FnFilter2(efn)); + m = prompt; + } else + m = (char *)LoadFarString(PasswPrompt2); + } else { /* Retry call, previous password was wrong */ + (*rcnt)--; + prompt = NULL; + m = (char *)LoadFarString(PasswRetry); + } + + m = getp(__G__ m, pwbuf, size); + if (prompt != (char *)NULL) { + free(prompt); + } + if (m == (char *)NULL) { + r = IZ_PW_ERROR; + } + else if (*pwbuf == '\0') { + r = IZ_PW_CANCELALL; + } + return r; + +#else /* !CRYPT */ + /* tell picky compilers to shut up about "unused variable" warnings */ + pG = pG; rcnt = rcnt; pwbuf = pwbuf; size = size; zfn = zfn; efn = efn; + + return IZ_PW_ERROR; /* internal error; function should never get called */ +#endif /* ?CRYPT */ + +} /* end function UzpPassword() */ + + + + + +/**********************/ +/* Function handler() */ +/**********************/ + +void handler(signal) /* upon interrupt, turn on echo and exit cleanly */ + int signal; +{ + GETGLOBALS(); + +#if !(defined(SIGBUS) || defined(SIGSEGV)) /* add a newline if not at */ + (*G.message)((zvoid *)&G, slide, 0L, 0x41); /* start of line (to stderr; */ +#endif /* slide[] should be safe) */ + + echon(); + +#ifdef SIGBUS + if (signal == SIGBUS) { + Info(slide, 0x421, ((char *)slide, LoadFarString(ZipfileCorrupt), + "bus error")); + DESTROYGLOBALS() + EXIT(PK_BADERR); + } +#endif /* SIGBUS */ + +#ifdef SIGSEGV + if (signal == SIGSEGV) { + Info(slide, 0x421, ((char *)slide, LoadFarString(ZipfileCorrupt), + "segmentation violation")); + DESTROYGLOBALS() + EXIT(PK_BADERR); + } +#endif /* SIGSEGV */ + + /* probably ctrl-C */ + DESTROYGLOBALS() +#if defined(AMIGA) && defined(__SASC) + _abort(); +#endif + EXIT(IZ_CTRLC); /* was EXIT(0), then EXIT(PK_ERR) */ +} + +#endif /* !WINDLL */ + + + + +#if (!defined(VMS) && !defined(CMS_MVS)) +#if (!defined(OS2) || defined(TIMESTAMP)) + +#if (!defined(HAVE_MKTIME) || defined(AMIGA) || defined(WIN32)) +/* also used in amiga/filedate.c and win32/win32.c */ +ZCONST ush ydays[] = + { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; +#endif + +/*******************************/ +/* Function dos_to_unix_time() */ /* used for freshening/updating/timestamps */ +/*******************************/ + +time_t dos_to_unix_time(dosdatetime) + ulg dosdatetime; +{ + time_t m_time; + +#ifdef HAVE_MKTIME + + ZCONST time_t now = time(NULL); + struct tm *tm; +# define YRBASE 1900 + + tm = localtime(&now); + tm->tm_isdst = -1; /* let mktime determine if DST is in effect */ + + /* dissect date */ + tm->tm_year = ((int)(dosdatetime >> 25) & 0x7f) + (1980 - YRBASE); + tm->tm_mon = ((int)(dosdatetime >> 21) & 0x0f) - 1; + tm->tm_mday = ((int)(dosdatetime >> 16) & 0x1f); + + /* dissect time */ + tm->tm_hour = (int)((unsigned)dosdatetime >> 11) & 0x1f; + tm->tm_min = (int)((unsigned)dosdatetime >> 5) & 0x3f; + tm->tm_sec = (int)((unsigned)dosdatetime << 1) & 0x3e; + + m_time = mktime(tm); + NATIVE_TO_TIMET(m_time) /* NOP unless MSC 7.0 or Macintosh */ + TTrace((stderr, " final m_time = %lu\n", (ulg)m_time)); + +#else /* !HAVE_MKTIME */ + + int yr, mo, dy, hh, mm, ss; +#ifdef TOPS20 +# define YRBASE 1900 + struct tmx *tmx; + char temp[20]; +#else /* !TOPS20 */ +# define YRBASE 1970 + int leap; + unsigned days; + struct tm *tm; +#if (!defined(MACOS) && !defined(RISCOS) && !defined(QDOS) && !defined(TANDEM)) +#ifdef WIN32 + TIME_ZONE_INFORMATION tzinfo; + DWORD res; +#else /* ! WIN32 */ +#ifndef BSD4_4 /* GRR: change to !defined(MODERN) ? */ +#if (defined(BSD) || defined(MTS) || defined(__GO32__)) + struct timeb tbp; +#else /* !(BSD || MTS || __GO32__) */ +#ifdef DECLARE_TIMEZONE + extern time_t timezone; +#endif +#endif /* ?(BSD || MTS || __GO32__) */ +#endif /* !BSD4_4 */ +#endif /* ?WIN32 */ +#endif /* !MACOS && !RISCOS && !QDOS && !TANDEM */ +#endif /* ?TOPS20 */ + + + /* dissect date */ + yr = ((int)(dosdatetime >> 25) & 0x7f) + (1980 - YRBASE); + mo = ((int)(dosdatetime >> 21) & 0x0f) - 1; + dy = ((int)(dosdatetime >> 16) & 0x1f) - 1; + + /* dissect time */ + hh = (int)((unsigned)dosdatetime >> 11) & 0x1f; + mm = (int)((unsigned)dosdatetime >> 5) & 0x3f; + ss = (int)((unsigned)dosdatetime & 0x1f) * 2; + +#ifdef TOPS20 + tmx = (struct tmx *)malloc(sizeof(struct tmx)); + sprintf (temp, "%02d/%02d/%02d %02d:%02d:%02d", mo+1, dy+1, yr, hh, mm, ss); + time_parse(temp, tmx, (char *)0); + m_time = time_make(tmx); + free(tmx); + +#else /* !TOPS20 */ + +/*--------------------------------------------------------------------------- + Calculate the number of seconds since the epoch, usually 1 January 1970. + ---------------------------------------------------------------------------*/ + + /* leap = # of leap yrs from YRBASE up to but not including current year */ + leap = ((yr + YRBASE - 1) / 4); /* leap year base factor */ + + /* calculate days from BASE to this year and add expired days this year */ + days = (yr * 365) + (leap - 492) + ydays[mo]; + + /* if year is a leap year and month is after February, add another day */ + if ((mo > 1) && ((yr+YRBASE)%4 == 0) && ((yr+YRBASE) != 2100)) + ++days; /* OK through 2199 */ + + /* convert date & time to seconds relative to 00:00:00, 01/01/YRBASE */ + m_time = (time_t)((unsigned long)(days + dy) * 86400L + + (unsigned long)hh * 3600L + + (unsigned long)(mm * 60 + ss)); + /* - 1; MS-DOS times always rounded up to nearest even second */ + TTrace((stderr, "dos_to_unix_time:\n")); + TTrace((stderr, " m_time before timezone = %lu\n", (ulg)m_time)); + +/*--------------------------------------------------------------------------- + Adjust for local standard timezone offset. + ---------------------------------------------------------------------------*/ + +#if (!defined(MACOS) && !defined(RISCOS) && !defined(QDOS) && !defined(TANDEM)) +#ifdef WIN32 + /* account for timezone differences */ + res = GetTimeZoneInformation(&tzinfo); + if (res != TIME_ZONE_ID_UNKNOWN) + { + m_time += 60*(tzinfo.Bias); +#else /* !WIN32 */ +#if (defined(BSD) || defined(MTS) || defined(__GO32__)) +#ifdef BSD4_4 + if ( (dosdatetime >= DOSTIME_2038_01_18) && + (m_time < (time_t)0x70000000L) ) + m_time = U_TIME_T_MAX; /* saturate in case of (unsigned) overflow */ + if (m_time < (time_t)0L) /* a converted DOS time cannot be negative */ + m_time = S_TIME_T_MAX; /* -> saturate at max signed time_t value */ + if ((tm = localtime(&m_time)) != (struct tm *)NULL) + m_time -= tm->tm_gmtoff; /* sec. EAST of GMT: subtr. */ +#else /* !(BSD4_4 */ + ftime(&tbp); /* get `timezone' */ + m_time += tbp.timezone * 60L; /* seconds WEST of GMT: add */ +#endif /* ?(BSD4_4 || __EMX__) */ +#else /* !(BSD || MTS || __GO32__) */ + /* tzset was already called at start of process_zipfiles() */ + /* tzset(); */ /* set `timezone' variable */ +#ifndef __BEOS__ /* BeOS DR8 has no timezones... */ + m_time += timezone; /* seconds WEST of GMT: add */ +#endif +#endif /* ?(BSD || MTS || __GO32__) */ +#endif /* ?WIN32 */ + TTrace((stderr, " m_time after timezone = %lu\n", (ulg)m_time)); + +/*--------------------------------------------------------------------------- + Adjust for local daylight savings (summer) time. + ---------------------------------------------------------------------------*/ + +#ifndef BSD4_4 /* (DST already added to tm_gmtoff, so skip tm_isdst) */ + if ( (dosdatetime >= DOSTIME_2038_01_18) && + (m_time < (time_t)0x70000000L) ) + m_time = U_TIME_T_MAX; /* saturate in case of (unsigned) overflow */ + if (m_time < (time_t)0L) /* a converted DOS time cannot be negative */ + m_time = S_TIME_T_MAX; /* -> saturate at max signed time_t value */ + TIMET_TO_NATIVE(m_time) /* NOP unless MSC 7.0 or Macintosh */ + if (((tm = localtime((time_t *)&m_time)) != NULL) && tm->tm_isdst) +#ifdef WIN32 + m_time += 60L * tzinfo.DaylightBias; /* adjust with DST bias */ + else + m_time += 60L * tzinfo.StandardBias; /* add StdBias (normally 0) */ +#else + m_time -= 60L * 60L; /* adjust for daylight savings time */ +#endif + NATIVE_TO_TIMET(m_time) /* NOP unless MSC 7.0 or Macintosh */ + TTrace((stderr, " m_time after DST = %lu\n", (ulg)m_time)); +#endif /* !BSD4_4 */ +#ifdef WIN32 + } +#endif +#endif /* !MACOS && !RISCOS && !QDOS && !TANDEM */ +#endif /* ?TOPS20 */ + +#endif /* ?HAVE_MKTIME */ + + if ( (dosdatetime >= DOSTIME_2038_01_18) && + (m_time < (time_t)0x70000000L) ) + m_time = U_TIME_T_MAX; /* saturate in case of (unsigned) overflow */ + if (m_time < (time_t)0L) /* a converted DOS time cannot be negative */ + m_time = S_TIME_T_MAX; /* -> saturate at max signed time_t value */ + + return m_time; + +} /* end function dos_to_unix_time() */ + +#endif /* !OS2 || TIMESTAMP */ +#endif /* !VMS && !CMS_MVS */ + + + +#if (!defined(VMS) && !defined(OS2) && !defined(CMS_MVS)) + +/******************************/ +/* Function check_for_newer() */ /* used for overwriting/freshening/updating */ +/******************************/ + +int check_for_newer(__G__ filename) /* return 1 if existing file is newer */ + __GDEF /* or equal; 0 if older; -1 if doesn't */ + char *filename; /* exist yet */ +{ + time_t existing, archive; +#ifdef USE_EF_UT_TIME + iztimes z_utime; +#endif +#ifdef AOS_VS + long dyy, dmm, ddd, dhh, dmin, dss; + + + dyy = (lrec.last_mod_dos_datetime >> 25) + 1980; + dmm = (lrec.last_mod_dos_datetime >> 21) & 0x0f; + ddd = (lrec.last_mod_dos_datetime >> 16) & 0x1f; + dhh = (lrec.last_mod_dos_datetime >> 11) & 0x1f; + dmin = (lrec.last_mod_dos_datetime >> 5) & 0x3f; + dss = (lrec.last_mod_dos_datetime & 0x1f) * 2; + + /* under AOS/VS, file times can only be set at creation time, + * with the info in a special DG format. Make sure we can create + * it here - we delete it later & re-create it, whether or not + * it exists now. + */ + if (!zvs_create(filename, (((ulg)dgdate(dmm, ddd, dyy)) << 16) | + (dhh*1800L + dmin*30L + dss/2L), -1L, -1L, (char *) -1, -1, -1, -1)) + return DOES_NOT_EXIST; +#endif /* AOS_VS */ + + Trace((stderr, "check_for_newer: doing stat(%s)\n", FnFilter1(filename))); + if (SSTAT(filename, &G.statbuf)) { + Trace((stderr, + "check_for_newer: stat(%s) returns %d: file does not exist\n", + FnFilter1(filename), SSTAT(filename, &G.statbuf))); +#ifdef SYMLINKS + Trace((stderr, "check_for_newer: doing lstat(%s)\n", + FnFilter1(filename))); + /* GRR OPTION: could instead do this test ONLY if G.symlnk is true */ + if (lstat(filename, &G.statbuf) == 0) { + Trace((stderr, + "check_for_newer: lstat(%s) returns 0: symlink does exist\n", + FnFilter1(filename))); + if (QCOND2 && !uO.overwrite_all) + Info(slide, 0, ((char *)slide, LoadFarString(FileIsSymLink), + FnFilter1(filename), " with no real file")); + return EXISTS_AND_OLDER; /* symlink dates are meaningless */ + } +#endif /* SYMLINKS */ + return DOES_NOT_EXIST; + } + Trace((stderr, "check_for_newer: stat(%s) returns 0: file exists\n", + FnFilter1(filename))); + +#ifdef SYMLINKS + /* GRR OPTION: could instead do this test ONLY if G.symlnk is true */ + if (lstat(filename, &G.statbuf) == 0 && S_ISLNK(G.statbuf.st_mode)) { + Trace((stderr, "check_for_newer: %s is a symbolic link\n", + FnFilter1(filename))); + if (QCOND2 && !uO.overwrite_all) + Info(slide, 0, ((char *)slide, LoadFarString(FileIsSymLink), + FnFilter1(filename), "")); + return EXISTS_AND_OLDER; /* symlink dates are meaningless */ + } +#endif /* SYMLINKS */ + + NATIVE_TO_TIMET(G.statbuf.st_mtime) /* NOP unless MSC 7.0 or Macintosh */ + +#ifdef USE_EF_UT_TIME + /* The `Unix extra field mtime' should be used for comparison with the + * time stamp of the existing file >>>ONLY<<< when the EF info is also + * used to set the modification time of the extracted file. + */ + if (G.extra_field && +#ifdef IZ_CHECK_TZ + G.tz_is_valid && +#endif + (ef_scan_for_izux(G.extra_field, G.lrec.extra_field_length, 0, + G.lrec.last_mod_dos_datetime, &z_utime, NULL) + & EB_UT_FL_MTIME)) + { + TTrace((stderr, "check_for_newer: using Unix extra field mtime\n")); + existing = G.statbuf.st_mtime; + archive = z_utime.mtime; + } else { + /* round up existing filetime to nearest 2 seconds for comparison, + * but saturate in case of arithmetic overflow + */ + existing = ((G.statbuf.st_mtime & 1) && + (G.statbuf.st_mtime + 1 > G.statbuf.st_mtime)) ? + G.statbuf.st_mtime + 1 : G.statbuf.st_mtime; + archive = dos_to_unix_time(G.lrec.last_mod_dos_datetime); + } +#else /* !USE_EF_UT_TIME */ + /* round up existing filetime to nearest 2 seconds for comparison, + * but saturate in case of arithmetic overflow + */ + existing = ((G.statbuf.st_mtime & 1) && + (G.statbuf.st_mtime + 1 > G.statbuf.st_mtime)) ? + G.statbuf.st_mtime + 1 : G.statbuf.st_mtime; + archive = dos_to_unix_time(G.lrec.last_mod_dos_datetime); +#endif /* ?USE_EF_UT_TIME */ + + TTrace((stderr, "check_for_newer: existing %lu, archive %lu, e-a %ld\n", + (ulg)existing, (ulg)archive, (long)(existing-archive))); + + return (existing >= archive); + +} /* end function check_for_newer() */ + +#endif /* !VMS && !OS2 && !CMS_MVS */ + + + + + +/************************/ +/* Function do_string() */ +/************************/ + +int do_string(__G__ len, option) /* return PK-type error code */ + __GDEF + unsigned int len; /* without prototype, ush converted to this */ + int option; +{ + long comment_bytes_left, block_length; + int error=PK_OK; + ush extra_len; +#ifdef AMIGA + char tmp_fnote[2 * AMIGA_FILENOTELEN]; /* extra room for squozen chars */ +#endif + + +/*--------------------------------------------------------------------------- + This function processes arbitrary-length (well, usually) strings. Four + options are allowed: SKIP, wherein the string is skipped (pretty logical, + eh?); DISPLAY, wherein the string is printed to standard output after un- + dergoing any necessary or unnecessary character conversions; DS_FN, + wherein the string is put into the filename[] array after undergoing ap- + propriate conversions (including case-conversion, if that is indicated: + see the global variable pInfo->lcflag); and EXTRA_FIELD, wherein the + `string' is assumed to be an extra field and is copied to the (freshly + malloced) buffer G.extra_field. The third option should be OK since + filename is dimensioned at 1025, but we check anyway. + + The string, by the way, is assumed to start at the current file-pointer + position; its length is given by len. So start off by checking length + of string: if zero, we're already done. + ---------------------------------------------------------------------------*/ + + if (!len) + return PK_COOL; + + switch (option) { + + /* + * First case: print string on standard output. First set loop vari- + * ables, then loop through the comment in chunks of OUTBUFSIZ bytes, + * converting formats and printing as we go. The second half of the + * loop conditional was added because the file might be truncated, in + * which case comment_bytes_left will remain at some non-zero value for + * all time. outbuf and slide are used as scratch buffers because they + * are available (we should be either before or in between any file pro- + * cessing). + */ + + case DISPLAY: + case DISPL_8: + comment_bytes_left = len; + block_length = OUTBUFSIZ; /* for the while statement, first time */ + while (comment_bytes_left > 0 && block_length > 0) { + register uch *p = G.outbuf; + register uch *q = G.outbuf; + + if ((block_length = readbuf(__G__ (char *)G.outbuf, + (unsigned) MIN((long)OUTBUFSIZ, comment_bytes_left))) == 0) + return PK_EOF; + comment_bytes_left -= block_length; + + /* this is why we allocated an extra byte for outbuf: terminate + * with zero (ASCIIZ) */ + G.outbuf[(unsigned)block_length] = '\0'; + + /* remove all ASCII carriage returns from comment before printing + * (since used before A_TO_N(), check for CR instead of '\r') + */ + while (*p) { + while (*p == CR) + ++p; + *q++ = *p++; + } + /* could check whether (p - outbuf) == block_length here */ + *q = '\0'; + + if (option == DISPL_8) { + /* translate the text coded in the entry's host-dependent + "extended ASCII" charset into the compiler's (system's) + internal text code page */ + Ext_ASCII_TO_Native((char *)G.outbuf, G.pInfo->hostnum, + G.crec.version_made_by[0]); +#ifdef WINDLL + /* translate to ANSI (RTL internal codepage may be OEM) */ + INTERN_TO_ISO((char *)G.outbuf, (char *)G.outbuf); +#else /* !WINDLL */ +#ifdef WIN32 + /* Win9x console always uses OEM character coding, and + WinNT console is set to OEM charset by default, too */ + INTERN_TO_OEM((char *)G.outbuf, (char *)G.outbuf); +#endif /* WIN32 */ +#endif /* ?WINDLL */ + } else { + A_TO_N(G.outbuf); /* translate string to native */ + } + +#ifdef WINDLL + /* ran out of local mem -- had to cheat */ + win_fprintf((zvoid *)&G, stdout, len, (char *)G.outbuf); + win_fprintf((zvoid *)&G, stdout, 2, (char *)"\n\n"); +#else /* !WINDLL */ +#ifdef NOANSIFILT /* GRR: can ANSI be used with EBCDIC? */ + (*G.message)((zvoid *)&G, G.outbuf, (ulg)(q-G.outbuf), 0); +#else /* ASCII, filter out ANSI escape sequences and handle ^S (pause) */ + p = G.outbuf - 1; + q = slide; + while (*++p) { + int pause = FALSE; + + if (*p == 0x1B) { /* ASCII escape char */ + *q++ = '^'; + *q++ = '['; + } else if (*p == 0x13) { /* ASCII ^S (pause) */ + pause = TRUE; + if (p[1] == LF) /* ASCII LF */ + *q++ = *++p; + else if (p[1] == CR && p[2] == LF) { /* ASCII CR LF */ + *q++ = *++p; + *q++ = *++p; + } + } else + *q++ = *p; + if ((unsigned)(q-slide) > WSIZE-3 || pause) { /* flush */ + (*G.message)((zvoid *)&G, slide, (ulg)(q-slide), 0); + q = slide; + if (pause && G.extract_flag) /* don't pause for list/test */ + (*G.mpause)((zvoid *)&G, LoadFarString(QuitPrompt), 0); + } + } + (*G.message)((zvoid *)&G, slide, (ulg)(q-slide), 0); +#endif /* ?NOANSIFILT */ +#endif /* ?WINDLL */ + } + /* add '\n' if not at start of line */ + (*G.message)((zvoid *)&G, slide, 0L, 0x40); + break; + + /* + * Second case: read string into filename[] array. The filename should + * never ever be longer than FILNAMSIZ-1 (1024), but for now we'll check, + * just to be sure. + */ + + case DS_FN: + extra_len = 0; + if (len >= FILNAMSIZ) { + Info(slide, 0x401, ((char *)slide, + LoadFarString(FilenameTooLongTrunc))); + error = PK_WARN; + extra_len = (ush)(len - FILNAMSIZ + 1); + len = FILNAMSIZ - 1; + } + if (readbuf(__G__ G.filename, len) == 0) + return PK_EOF; + G.filename[len] = '\0'; /* terminate w/zero: ASCIIZ */ + + /* translate the Zip entry filename coded in host-dependent "extended + ASCII" into the compiler's (system's) internal text code page */ + Ext_ASCII_TO_Native(G.filename, G.pInfo->hostnum, + G.crec.version_made_by[0]); + + if (G.pInfo->lcflag) /* replace with lowercase filename */ + TOLOWER(G.filename, G.filename); + + if (G.pInfo->vollabel && len > 8 && G.filename[8] == '.') { + char *p = G.filename+8; + while (*p++) + p[-1] = *p; /* disk label, and 8th char is dot: remove dot */ + } + + if (!extra_len) /* we're done here */ + break; + + /* + * We truncated the filename, so print what's left and then fall + * through to the SKIP routine. + */ + Info(slide, 0x401, ((char *)slide, "[ %s ]\n", FnFilter1(G.filename))); + len = extra_len; + /* FALL THROUGH... */ + + /* + * Third case: skip string, adjusting readbuf's internal variables + * as necessary (and possibly skipping to and reading a new block of + * data). + */ + + case SKIP: + /* cur_zipfile_bufstart already takes account of extra_bytes, so don't + * correct for it twice: */ + ZLSEEK(G.cur_zipfile_bufstart - G.extra_bytes + + (G.inptr-G.inbuf) + len) + break; + + /* + * Fourth case: assume we're at the start of an "extra field"; malloc + * storage for it and read data into the allocated space. + */ + + case EXTRA_FIELD: + if (G.extra_field != (uch *)NULL) + free(G.extra_field); + if ((G.extra_field = (uch *)malloc(len)) == (uch *)NULL) { + Info(slide, 0x401, ((char *)slide, LoadFarString(ExtraFieldTooLong), + len)); + /* cur_zipfile_bufstart already takes account of extra_bytes, + * so don't correct for it twice: */ + ZLSEEK(G.cur_zipfile_bufstart - G.extra_bytes + + (G.inptr-G.inbuf) + len) + } else + if (readbuf(__G__ (char *)G.extra_field, len) == 0) + return PK_EOF; + break; + +#ifdef AMIGA + /* + * Fifth case, for the Amiga only: take the comment that would ordinarily + * be skipped over, and turn it into a 79 character string that will be + * attached to the file as a "filenote" after it is extracted. + */ + + case FILENOTE: + if ((extra_len = readbuf(__G__ tmp_fnote, (unsigned) + MIN(len, 2 * AMIGA_FILENOTELEN - 1))) == 0) + return PK_EOF; + if ((len -= extra_len) > 0) /* treat remainder as in case SKIP: */ + ZLSEEK(G.cur_zipfile_bufstart - G.extra_bytes + + (G.inptr - G.inbuf) + len) + /* convert multi-line text into single line with no ctl-chars: */ + tmp_fnote[extra_len] = '\0'; + while ((short int) --extra_len >= 0) + if ((unsigned) tmp_fnote[extra_len] < ' ') + if (tmp_fnote[extra_len+1] == ' ') /* no excess */ + strcpy(tmp_fnote+extra_len, tmp_fnote+extra_len+1); + else + tmp_fnote[extra_len] = ' '; + tmp_fnote[AMIGA_FILENOTELEN - 1] = '\0'; + if (G.filenotes[G.filenote_slot]) + free(G.filenotes[G.filenote_slot]); /* should not happen */ + G.filenotes[G.filenote_slot] = NULL; + if (tmp_fnote[0]) { + if (!(G.filenotes[G.filenote_slot] = malloc(strlen(tmp_fnote)+1))) + return PK_MEM; + strcpy(G.filenotes[G.filenote_slot], tmp_fnote); + } + break; +#endif /* AMIGA */ + + } /* end switch (option) */ + + return error; + +} /* end function do_string() */ + + + + + +/***********************/ +/* Function makeword() */ +/***********************/ + +ush makeword(b) + ZCONST uch *b; +{ + /* + * Convert Intel style 'short' integer to non-Intel non-16-bit + * host format. This routine also takes care of byte-ordering. + */ + return (ush)((b[1] << 8) | b[0]); +} + + + + + +/***********************/ +/* Function makelong() */ +/***********************/ + +ulg makelong(sig) + ZCONST uch *sig; +{ + /* + * Convert intel style 'long' variable to non-Intel non-16-bit + * host format. This routine also takes care of byte-ordering. + */ + return (((ulg)sig[3]) << 24) + + (((ulg)sig[2]) << 16) + + (((ulg)sig[1]) << 8) + + ((ulg)sig[0]); +} + + + +#if CRYPT + +#ifdef NEED_STR2ISO +/**********************/ +/* Function str2iso() */ +/**********************/ + +char *str2iso(dst, src) + char *dst; /* destination buffer */ + register ZCONST char *src; /* source string */ +{ +#ifdef INTERN_TO_ISO + INTERN_TO_ISO(src, dst); +#else + register uch c; + register char *dstp = dst; + + do { + c = (uch)foreign(*src++); + *dstp++ = (char)ASCII2ISO(c); + } while (c != '\0'); +#endif + + return dst; +} +#endif /* NEED_STR2ISO */ + + +#ifdef NEED_STR2OEM +/**********************/ +/* Function str2oem() */ +/**********************/ + +char *str2oem(dst, src) + char *dst; /* destination buffer */ + register ZCONST char *src; /* source string */ +{ +#ifdef INTERN_TO_OEM + INTERN_TO_OEM(src, dst); +#else + register uch c; + register char *dstp = dst; + + do { + c = (uch)foreign(*src++); + *dstp++ = (char)ASCII2OEM(c); + } while (c != '\0'); +#endif + + return dst; +} +#endif /* NEED_STR2OEM */ + +#endif /* CRYPT */ + + +#ifdef ZMEM /* memset/memcmp/memcpy for systems without either them or */ + /* bzero/bcmp/bcopy */ + /* (no known systems as of 960211) */ + +/*********************/ +/* Function memset() */ +/*********************/ + +zvoid *memset(buf, init, len) + register zvoid *buf; /* buffer location */ + register int init; /* initializer character */ + register unsigned int len; /* length of the buffer */ +{ + zvoid *start; + + start = buf; + while (len--) + *((char *)buf++) = (char)init; + return start; +} + + + +/*********************/ +/* Function memcmp() */ +/*********************/ + +int memcmp(b1, b2, len) + register ZCONST zvoid *b1; + register ZCONST zvoid *b2; + register unsigned int len; +{ + register int c; + + if (len > 0) do { + if ((c = (int)(*((ZCONST unsigned char *)b1)++) - + (int)(*((ZCONST unsigned char *)b2)++)) != 0) + return c; + } while (--len > 0) + return 0; +} + + + +/*********************/ +/* Function memcpy() */ +/*********************/ + +zvoid *memcpy(dst, src, len) + register zvoid *dst; + register ZCONST zvoid *src; + register unsigned int len; +{ + zvoid *start; + + start = dst; + while (len-- > 0) + *((char *)dst)++ = *((ZCONST char *)src)++; + return start; +} + +#endif /* ZMEM */ + + + + + +/************************/ +/* Function zstrnicmp() */ +/************************/ + +int zstrnicmp(s1, s2, n) + register ZCONST char *s1, *s2; + register unsigned n; +{ + for (; n > 0; --n, ++s1, ++s2) { + + if (ToLower(*s1) != ToLower(*s2)) + /* test includes early termination of one string */ + return (ToLower(*s1) < ToLower(*s2))? -1 : 1; + + if (*s1 == '\0') /* both strings terminate early */ + return 0; + } + return 0; +} + + + + + +#ifdef REGULUS /* returns the inode number on success(!)...argh argh argh */ +# undef stat + +/********************/ +/* Function zstat() */ +/********************/ + +int zstat(p, s) + char *p; + struct stat *s; +{ + return (stat(p,s) >= 0? 0 : (-1)); +} + +#endif /* REGULUS */ + + + + + +#ifdef SMALL_MEM + +/*******************************/ +/* Function fLoadFarString() */ /* (and friends...) */ +/*******************************/ + +char *fLoadFarString(__GPRO__ const char Far *sz) +{ + (void)zfstrcpy(G.rgchBigBuffer, sz); + return G.rgchBigBuffer; +} + +char *fLoadFarStringSmall(__GPRO__ const char Far *sz) +{ + (void)zfstrcpy(G.rgchSmallBuffer, sz); + return G.rgchSmallBuffer; +} + +char *fLoadFarStringSmall2(__GPRO__ const char Far *sz) +{ + (void)zfstrcpy(G.rgchSmallBuffer2, sz); + return G.rgchSmallBuffer2; +} + + + + +#if (!defined(_MSC_VER) || (_MSC_VER < 600)) +/*************************/ +/* Function zfstrcpy() */ /* portable clone of _fstrcpy() */ +/*************************/ + +char Far * Far zfstrcpy(char Far *s1, const char Far *s2) +{ + char Far *p = s1; + + while ((*s1++ = *s2++) != '\0'); + return p; +} +#endif /* !_MSC_VER || (_MSC_VER < 600) */ + +#endif /* SMALL_MEM */ diff --git a/Build/source/extra/unzip/globals.c b/Build/source/extra/unzip/globals.c new file mode 100644 index 00000000000..d795090b983 --- /dev/null +++ b/Build/source/extra/unzip/globals.c @@ -0,0 +1,204 @@ +/*--------------------------------------------------------------------------- + + globals.c + + Routines to allocate and initialize globals, with or without threads. + + Contents: registerGlobalPointer() + deregisterGlobalPointer() + getGlobalPointer() + globalsCtor() + + ---------------------------------------------------------------------------*/ + + +#define UNZIP_INTERNAL +#include "unzip.h" + +#ifndef FUNZIP +/* initialization of sigs is completed at runtime so unzip(sfx) executable + * won't look like a zipfile + */ +char central_hdr_sig[4] = {0, 0, 0x01, 0x02}; +char local_hdr_sig[4] = {0, 0, 0x03, 0x04}; +char end_central_sig[4] = {0, 0, 0x05, 0x06}; +/* extern char extd_local_sig[4] = {0, 0, 0x07, 0x08}; NOT USED YET */ + +ZCONST char *fnames[2] = {"*", NULL}; /* default filenames vector */ +#endif + + +#ifndef REENTRANT + Uz_Globs G; +#else /* REENTRANT */ + +# ifndef USETHREADID + Uz_Globs *GG; +# else /* USETHREADID */ +# define THREADID_ENTRIES 0x40 + + int lastScan; + Uz_Globs *threadPtrTable[THREADID_ENTRIES]; + ulg threadIdTable [THREADID_ENTRIES] = { + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* Make sure there are */ + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* THREADID_ENTRIES 0s */ + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 + }; + + static ZCONST char Far TooManyThreads[] = + "error: more than %d simultaneous threads.\n\ + Some threads are probably not calling DESTROYTHREAD()\n"; + static ZCONST char Far EntryNotFound[] = + "error: couldn't find global pointer in table.\n\ + Maybe somebody accidentally called DESTROYTHREAD() twice.\n"; + static ZCONST char Far GlobalPointerMismatch[] = + "error: global pointer in table does not match pointer passed as\ + parameter\n"; + +static void registerGlobalPointer OF((__GPRO)); + + + +static void registerGlobalPointer(__G) + __GDEF +{ + int scan=0; + ulg tid = GetThreadId(); + + while (threadIdTable[scan] && scan < THREADID_ENTRIES) + scan++; + + if (scan == THREADID_ENTRIES) { + ZCONST char *tooMany = LoadFarString(TooManyThreads); + Info(slide, 0x421, ((char *)slide, tooMany, THREADID_ENTRIES)); + free(pG); + EXIT(PK_MEM); /* essentially memory error before we've started */ + } + + threadIdTable [scan] = tid; + threadPtrTable[scan] = pG; + lastScan = scan; +} + + + +void deregisterGlobalPointer(__G) + __GDEF +{ + int scan=0; + ulg tid = GetThreadId(); + + + while (threadIdTable[scan] != tid && scan < THREADID_ENTRIES) + scan++; + +/*--------------------------------------------------------------------------- + There are two things we can do if we can't find the entry: ignore it or + scream. The most likely reason for it not to be here is the user calling + this routine twice. Since this could cause BIG problems if any globals + are accessed after the first call, we'd better scream. + ---------------------------------------------------------------------------*/ + + if (scan == THREADID_ENTRIES || threadPtrTable[scan] != pG) { + ZCONST char *noEntry; + if (scan == THREADID_ENTRIES) + noEntry = LoadFarString(EntryNotFound); + else + noEntry = LoadFarString(GlobalPointerMismatch); + Info(slide, 0x421, ((char *)slide, noEntry)); + EXIT(PK_WARN); /* programming error, but after we're all done */ + } + + threadIdTable [scan] = 0; + lastScan = scan; + free(threadPtrTable[scan]); +} + + + +Uz_Globs *getGlobalPointer() +{ + int scan=0; + ulg tid = GetThreadId(); + + while (threadIdTable[scan] != tid && scan < THREADID_ENTRIES) + scan++; + +/*--------------------------------------------------------------------------- + There are two things we can do if we can't find the entry: ignore it or + scream. The most likely reason for it not to be here is the user calling + this routine twice. Since this could cause BIG problems if any globals + are accessed after the first call, we'd better scream. + ---------------------------------------------------------------------------*/ + + if (scan == THREADID_ENTRIES) { + ZCONST char *noEntry = LoadFarString(EntryNotFound); + fprintf(stderr, noEntry); /* can't use Info w/o a global pointer */ + EXIT(PK_ERR); /* programming error while still working */ + } + + return threadPtrTable[scan]; +} + +# endif /* ?USETHREADID */ +#endif /* ?REENTRANT */ + + + +Uz_Globs *globalsCtor() +{ +#ifdef REENTRANT + Uz_Globs *pG = (Uz_Globs *)malloc(sizeof(Uz_Globs)); + + if (!pG) + return (Uz_Globs *)NULL; +#endif /* REENTRANT */ + + /* for REENTRANT version, G is defined as (*pG) */ + + memzero(&G, sizeof(Uz_Globs)); + +#ifndef FUNZIP +#ifdef CMS_MVS + uO.aflag=1; + uO.C_flag=1; +#endif + + uO.lflag=(-1); + G.wildzipfn = ""; + G.pfnames = (char **)fnames; + G.pxnames = (char **)&fnames[1]; + G.pInfo = G.info; + G.sol = TRUE; /* at start of line */ + + G.message = UzpMessagePrnt; + G.input = UzpInput; /* not used by anyone at the moment... */ +#if defined(WINDLL) || defined(MACOS) + G.mpause = NULL; /* has scrollbars: no need for pausing */ +#else + G.mpause = UzpMorePause; +#endif + G.decr_passwd = UzpPassword; +#endif /* !FUNZIP */ + +#if (!defined(DOS_FLX_H68_OS2_W32) && !defined(AMIGA) && !defined(RISCOS)) +#if (!defined(MACOS) && !defined(ATARI) && !defined(VMS)) + G.echofd = -1; +#endif /* !(MACOS || ATARI || VMS) */ +#endif /* !(DOS_FLX_H68_OS2_W32 || AMIGA || RISCOS) */ + +#ifdef SYSTEM_SPECIFIC_CTOR + SYSTEM_SPECIFIC_CTOR(__G); +#endif + +#ifdef REENTRANT +#ifdef USETHREADID + registerGlobalPointer(__G); +#else + GG = &G; +#endif /* ?USETHREADID */ +#endif /* REENTRANT */ + + return &G; +} diff --git a/Build/source/extra/unzip/globals.h b/Build/source/extra/unzip/globals.h new file mode 100644 index 00000000000..49439cffe7f --- /dev/null +++ b/Build/source/extra/unzip/globals.h @@ -0,0 +1,395 @@ +/*--------------------------------------------------------------------------- + + globals.h + + There is usually no need to include this file since unzip.h includes it. + + This header file is used by all of the UnZip source files. It contains + a struct definition that is used to "house" all of the global variables. + This is done to allow for multithreaded environments (OS/2, NT, Win95, + Unix) to call UnZip through an API without a semaphore. REENTRANT should + be defined for all platforms that require this. + + GLOBAL CONSTRUCTOR AND DESTRUCTOR (API WRITERS READ THIS!!!) + ------------------------------------------------------------ + + No, it's not C++, but it's as close as we can get with K&R. + + The main() of each process that uses these globals must include the + CONSTRUCTGLOBALS; statement. This will malloc enough memory for the + structure and initialize any variables that require it. This must + also be done by any API function that jumps into the middle of the + code. + + The DESTROYGLOBALS; statement should be inserted before EVERY "EXIT(n)". + Naturally, it also needs to be put before any API returns as well. + In fact, it's much more important in API functions since the process + will NOT end, and therefore the memory WON'T automatically be freed + by the operating system. + + USING VARIABLES FROM THE STRUCTURE + ---------------------------------- + + All global variables must now be prefixed with `G.' which is either a + global struct (in which case it should be the only global variable) or + a macro for the value of a local pointer variable that is passed from + function to function. Yes, this is a pain. But it's the only way to + allow full reentrancy. + + ADDING VARIABLES TO THE STRUCTURE + --------------------------------- + + If you make the inclusion of any variables conditional, be sure to only + check macros that are GUARANTEED to be included in every module. + For instance, newzip and pwdarg are needed only if CRYPT is TRUE, + but this is defined after unzip.h has been read. If you are not careful, + some modules will expect your variable to be part of this struct while + others won't. This will cause BIG problems. (Inexplicable crashes at + strange times, car fires, etc.) When in doubt, always include it! + + Note also that UnZipSFX needs a few variables that UnZip doesn't. However, + it also includes some object files from UnZip. If we were to conditionally + include the extra variables that UnZipSFX needs, the object files from + UnZip would not mesh with the UnZipSFX object files. Result: we just + include the UnZipSFX variables every time. (It's only an extra 4 bytes + so who cares!) + + ADDING FUNCTIONS + ---------------- + + To support this new global struct, all functions must now conditionally + pass the globals pointer (pG) to each other. This is supported by 5 macros: + __GPRO, __GPRO__, __G, __G__ and __GDEF. A function that needs no other + parameters would look like this: + + int extract_or_test_files(__G) + __GDEF + { + ... stuff ... + } + + A function with other parameters would look like: + + int memextract(__G__ tgt, tgtsize, src, srcsize) + __GDEF + uch *tgt, *src; + ulg tgtsize, srcsize; + { + ... stuff ... + } + + In the Function Prototypes section of unzpriv.h, you should use __GPRO and + __GPRO__ instead: + + int uz_opts OF((__GPRO__ int *pargc, char ***pargv)); + int process_zipfiles OF((__GPRO)); + + Note that there is NO comma after __G__ or __GPRO__ and no semi-colon after + __GDEF. I wish there was another way but I don't think there is. + + + TESTING THE CODE + ----------------- + + Whether your platform requires reentrancy or not, you should always try + building with REENTRANT defined if any functions have been added. It is + pretty easy to forget a __G__ or a __GDEF and this mistake will only show + up if REENTRANT is defined. All platforms should run with REENTRANT + defined. Platforms that can't take advantage of it will just be paying + a performance penalty needlessly. + + SIGNAL MADNESS + -------------- + + This whole pointer passing scheme falls apart when it comes to SIGNALs. + I handle this situation 2 ways right now. If you define USETHREADID, + UnZip will include a 64-entry table. Each entry can hold a global + pointer and thread ID for one thread. This should allow up to 64 + threads to access UnZip simultaneously. Calling DESTROYGLOBALS() + will free the global struct and zero the table entry. If somebody + forgets to call DESTROYGLOBALS(), this table will eventually fill up + and UnZip will exit with an error message. A good way to test your + code to make sure you didn't forget a DESTROYGLOBALS() is to change + THREADID_ENTRIES to 3 or 4 in globals.c, making the table real small. + Then make a small test program that calls your API a dozen times. + + Those platforms that don't have threads still need to be able to compile + with REENTRANT defined to test and see if new code is correctly written + to work either way. For these platforms, I simply keep a global pointer + called GG that points to the Globals structure. Good enough for testing. + + I believe that NT has thread level storage. This could probably be used + to store a global pointer for the sake of the signal handler more cleanly + than my table approach. + + ---------------------------------------------------------------------------*/ + +#ifndef __globals_h +#define __globals_h + +#ifdef USE_ZLIB +# include "zlib.h" +#endif + + +/*************/ +/* Globals */ +/*************/ + +typedef struct Globals { +#ifdef DLL + zvoid *callerglobs; /* pointer to structure of pass-through global vars */ +#endif + + /* command options of general use */ + UzpOpts UzO; /* command options of general use */ + +#ifndef FUNZIP + /* command options specific to the high level command line interface */ +#ifdef MORE + int M_flag; /* -M: built-in "more" function */ +#endif + + /* internal flags and general globals */ +#ifdef MORE + int height; /* check for SIGWINCH, etc., eventually... */ +#endif /* (take line-wrapping into account?) */ +#if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME)) + int tz_is_valid; /* indicates that timezone info can be used */ +#endif +#ifdef WINDLL + int prompt_always; /* prompt to overwrite if TRUE */ +#endif + int noargs; /* did true command line have *any* arguments? */ + unsigned filespecs; /* number of real file specifications to be matched */ + unsigned xfilespecs; /* number of excluded filespecs to be matched */ + int process_all_files; + int create_dirs; /* used by main(), mapname(), checkdir() */ + int extract_flag; + int newzip; /* reset in extract.c; used in crypt.c */ + LONGINT real_ecrec_offset; + LONGINT expect_ecrec_offset; + long csize; /* used by decompr. (NEXTBYTE): must be signed */ + long ucsize; /* used by unReduce(), explode() */ + long used_csize; /* used by extract_or_test_member(), explode() */ + +#ifdef DLL + int fValidate; /* true if only validating an archive */ + int filenotfound; + int redirect_data; /* redirect data to memory buffer */ + int redirect_text; /* redirect text output to buffer */ +# ifndef NO_SLIDE_REDIR + int redirect_slide; /* redirect decompression area to mem buffer */ + unsigned _wsize; +# endif + unsigned redirect_size; /* size of redirected output buffer */ + uch *redirect_buffer; /* pointer to head of allocated buffer */ + uch *redirect_pointer; /* pointer past end of written data */ +# ifndef NO_SLIDE_REDIR + uch *redirect_sldptr; /* head of decompression slide buffer */ +# endif +# ifdef OS2DLL + cbList(processExternally); /* call-back list */ +# endif +#endif /* DLL */ + + char **pfnames; + char **pxnames; + char sig[4]; + char answerbuf[10]; + min_info info[DIR_BLKSIZ]; + min_info *pInfo; +#endif /* !FUNZIP */ + union work area; /* see unzpriv.h for definition of work */ + +#ifndef FUNZIP +# if (!defined(USE_ZLIB) || defined(USE_OWN_CRCTAB)) + ZCONST ulg near *crc_32_tab; +# else + ZCONST ulg Far *crc_32_tab; +# endif +#endif + ulg crc32val; /* CRC shift reg. (was static in funzip) */ + +#ifdef FUNZIP + FILE *in; /* file descriptor of compressed stream */ +#endif + uch *inbuf; /* input buffer (any size is OK) */ + uch *inptr; /* pointer into input buffer */ + int incnt; + +#ifndef FUNZIP + ulg bitbuf; + int bits_left; /* unreduce and unshrink only */ + int zipeof; + char *argv0; /* used for NT and EXE_EXTENSION */ + char *wildzipfn; + char *zipfn; /* GRR: WINDLL: must nuke any malloc'd zipfn... */ +#ifdef USE_STRM_INPUT + FILE *zipfd; /* zipfile file descriptor */ +#else + int zipfd; /* zipfile file handle */ +#endif + LONGINT ziplen; + LONGINT cur_zipfile_bufstart; /* extract_or_test, readbuf, ReadByte */ + LONGINT extra_bytes; /* used in unzip.c, misc.c */ + uch *extra_field; /* Unix, VMS, Mac, OS/2, Acorn, ... */ + uch *hold; + + local_file_hdr lrec; /* used in unzip.c, extract.c */ + cdir_file_hdr crec; /* used in unzip.c, extract.c, misc.c */ + ecdir_rec ecrec; /* used in unzip.c, extract.c */ + struct stat statbuf; /* used by main, mapname, check_for_newer */ + + int mem_mode; + uch *outbufptr; /* extract.c static */ + ulg outsize; /* extract.c static */ + int reported_backslash; /* extract.c static */ + int disk_full; + int newfile; + + int didCRlast; /* fileio static */ + ulg numlines; /* fileio static: number of lines printed */ + int sol; /* fileio static: at start of line */ + int no_ecrec; /* process static */ +#ifdef SYMLINKS + int symlnk; +#endif +#ifdef NOVELL_BUG_FAILSAFE + int dne; /* true if stat() says file doesn't exist */ +#endif + + FILE *outfile; + uch *outbuf; + uch *realbuf; + +#ifndef VMS /* if SMALL_MEM, outbuf2 is initialized in */ + uch *outbuf2; /* process_zipfiles() (never changes); */ +#endif /* else malloc'd ONLY if unshrink and -a */ +#endif /* !FUNZIP */ + uch *outptr; + ulg outcnt; /* number of chars stored in outbuf */ +#ifndef FUNZIP + char filename[FILNAMSIZ]; /* also used by NT for temporary SFX path */ + +#ifdef CMS_MVS + char *tempfn; /* temp file used; erase on close */ +#endif + + char *key; /* crypt static: decryption password or NULL */ + int nopwd; /* crypt static */ +#endif /* !FUNZIP */ + ulg keys[3]; /* crypt static: keys defining pseudo-random sequence */ + +#if (!defined(DOS_FLX_H68_OS2_W32) && !defined(AMIGA) && !defined(RISCOS)) +#if (!defined(MACOS) && !defined(ATARI) && !defined(VMS)) + int echofd; /* ttyio static: file descriptor whose echo is off */ +#endif /* !(MACOS || ATARI || VMS) */ +#endif /* !(DOS_FLX_H68_OS2_W32 || AMIGA || RISCOS) */ + + unsigned hufts; /* track memory usage */ + +#ifdef USE_ZLIB + int inflInit; /* inflate static: zlib inflate() initialized */ + z_stream dstrm; /* inflate global: decompression stream */ +#else + struct huft *fixed_tl; /* inflate static */ + struct huft *fixed_td; /* inflate static */ + int fixed_bl, fixed_bd; /* inflate static */ + unsigned wp; /* inflate static: current position in slide */ + ulg bb; /* inflate static: bit buffer */ + unsigned bk; /* inflate static: bits in bit buffer */ +#endif /* ?USE_ZLIB */ + +#ifndef FUNZIP +#ifdef SMALL_MEM + char rgchBigBuffer[512]; + char rgchSmallBuffer[96]; + char rgchSmallBuffer2[160]; /* boosted to 160 for local3[] in unzip.c */ +#endif + + MsgFn *message; + InputFn *input; + PauseFn *mpause; + PasswdFn *decr_passwd; + StatCBFn *statreportcb; +#ifdef WINDLL + LPUSERFUNCTIONS lpUserFunctions; +#endif + + int incnt_leftover; /* so improved NEXTBYTE does not waste input */ + uch *inptr_leftover; + +#ifdef VMS_TEXT_CONV + int VMS_line_state; /* so native VMS variable-length text files are */ + int VMS_line_length; /* readable on other platforms */ + int VMS_line_pad; +#endif +#endif /* !FUNZIP */ + +#ifdef SYSTEM_SPECIFIC_GLOBALS + SYSTEM_SPECIFIC_GLOBALS +#endif + +} Uz_Globs; /* end of struct Globals */ + + +/***************************************************************************/ + + +#ifdef FUNZIP +# if (!defined(USE_ZLIB) || defined(USE_OWN_CRCTAB)) + extern ZCONST ulg near crc_32_tab[256]; +# else + extern ZCONST ulg Far *crc_32_tab; +# endif +# define CRC_32_TAB crc_32_tab +#else +# define CRC_32_TAB G.crc_32_tab +#endif + + +Uz_Globs *globalsCtor OF((void)); + +/* pseudo constant sigs; they are initialized at runtime so unzip executable + * won't look like a zipfile + */ +extern char local_hdr_sig[4]; +extern char central_hdr_sig[4]; +extern char end_central_sig[4]; +/* extern char extd_local_sig[4]; NOT USED YET */ + +#ifdef REENTRANT +# define G (*(Uz_Globs *)pG) +# define __G pG +# define __G__ pG, +# define __GPRO Uz_Globs *pG +# define __GPRO__ Uz_Globs *pG, +# define __GDEF Uz_Globs *pG; +# ifdef USETHREADID + extern int lastScan; + void deregisterGlobalPointer OF((__GPRO)); + Uz_Globs *getGlobalPointer OF((void)); +# define GETGLOBALS() Uz_Globs *pG = getGlobalPointer(); +# define DESTROYGLOBALS() {free_G_buffers(pG); deregisterGlobalPointer(pG);} +# else + extern Uz_Globs *GG; +# define GETGLOBALS() Uz_Globs *pG = GG; +# define DESTROYGLOBALS() {free_G_buffers(pG); free(pG);} +# endif /* ?USETHREADID */ +# define CONSTRUCTGLOBALS() Uz_Globs *pG = globalsCtor() +#else /* !REENTRANT */ + extern Uz_Globs G; +# define __G +# define __G__ +# define __GPRO void +# define __GPRO__ +# define __GDEF +# define GETGLOBALS() +# define CONSTRUCTGLOBALS() globalsCtor() +# define DESTROYGLOBALS() +#endif /* ?REENTRANT */ + +#define uO G.UzO + +#endif /* __globals_h */ diff --git a/Build/source/extra/unzip/inflate.c b/Build/source/extra/unzip/inflate.c new file mode 100644 index 00000000000..93913f15e05 --- /dev/null +++ b/Build/source/extra/unzip/inflate.c @@ -0,0 +1,1305 @@ +/* inflate.c -- put in the public domain by Mark Adler + version c16b, 29 March 1998 */ + + +/* You can do whatever you like with this source file, though I would + prefer that if you modify it and redistribute it that you include + comments to that effect with your name and the date. Thank you. + + History: + vers date who what + ---- --------- -------------- ------------------------------------ + a ~~ Feb 92 M. Adler used full (large, one-step) lookup table + b1 21 Mar 92 M. Adler first version with partial lookup tables + b2 21 Mar 92 M. Adler fixed bug in fixed-code blocks + b3 22 Mar 92 M. Adler sped up match copies, cleaned up some + b4 25 Mar 92 M. Adler added prototypes; removed window[] (now + is the responsibility of unzip.h--also + changed name to slide[]), so needs diffs + for unzip.c and unzip.h (this allows + compiling in the small model on MSDOS); + fixed cast of q in huft_build(); + b5 26 Mar 92 M. Adler got rid of unintended macro recursion. + b6 27 Mar 92 M. Adler got rid of nextbyte() routine. fixed + bug in inflate_fixed(). + c1 30 Mar 92 M. Adler removed lbits, dbits environment variables. + changed BMAX to 16 for explode. Removed + OUTB usage, and replaced it with flush()-- + this was a 20% speed improvement! Added + an explode.c (to replace unimplod.c) that + uses the huft routines here. Removed + register union. + c2 4 Apr 92 M. Adler fixed bug for file sizes a multiple of 32k. + c3 10 Apr 92 M. Adler reduced memory of code tables made by + huft_build significantly (factor of two to + three). + c4 15 Apr 92 M. Adler added NOMEMCPY do kill use of memcpy(). + worked around a Turbo C optimization bug. + c5 21 Apr 92 M. Adler added the WSIZE #define to allow reducing + the 32K window size for specialized + applications. + c6 31 May 92 M. Adler added some typecasts to eliminate warnings + c7 27 Jun 92 G. Roelofs added some more typecasts (444: MSC bug). + c8 5 Oct 92 J-l. Gailly added ifdef'd code to deal with PKZIP bug. + c9 9 Oct 92 M. Adler removed a memory error message (~line 416). + c10 17 Oct 92 G. Roelofs changed ULONG/UWORD/byte to ulg/ush/uch, + removed old inflate, renamed inflate_entry + to inflate, added Mark's fix to a comment. + c10.5 14 Dec 92 M. Adler fix up error messages for incomplete trees. + c11 2 Jan 93 M. Adler fixed bug in detection of incomplete + tables, and removed assumption that EOB is + the longest code (bad assumption). + c12 3 Jan 93 M. Adler make tables for fixed blocks only once. + c13 5 Jan 93 M. Adler allow all zero length codes (pkzip 2.04c + outputs one zero length code for an empty + distance tree). + c14 12 Mar 93 M. Adler made inflate.c standalone with the + introduction of inflate.h. + c14b 16 Jul 93 G. Roelofs added (unsigned) typecast to w at 470. + c14c 19 Jul 93 J. Bush changed v[N_MAX], l[288], ll[28x+3x] arrays + to static for Amiga. + c14d 13 Aug 93 J-l. Gailly de-complicatified Mark's c[*p++]++ thing. + c14e 8 Oct 93 G. Roelofs changed memset() to memzero(). + c14f 22 Oct 93 G. Roelofs renamed quietflg to qflag; made Trace() + conditional; added inflate_free(). + c14g 28 Oct 93 G. Roelofs changed l/(lx+1) macro to pointer (Cray bug) + c14h 7 Dec 93 C. Ghisler huft_build() optimizations. + c14i 9 Jan 94 A. Verheijen set fixed_t{d,l} to NULL after freeing; + G. Roelofs check NEXTBYTE macro for EOF. + c14j 23 Jan 94 G. Roelofs removed Ghisler "optimizations"; ifdef'd + EOF check. + c14k 27 Feb 94 G. Roelofs added some typecasts to avoid warnings. + c14l 9 Apr 94 G. Roelofs fixed split comments on preprocessor lines + to avoid bug in Encore compiler. + c14m 7 Jul 94 P. Kienitz modified to allow assembler version of + inflate_codes() (define ASM_INFLATECODES) + c14n 22 Jul 94 G. Roelofs changed fprintf to macro for DLL versions + c14o 23 Aug 94 C. Spieler added a newline to a debug statement; + G. Roelofs added another typecast to avoid MSC warning + c14p 4 Oct 94 G. Roelofs added (voidp *) cast to free() argument + c14q 30 Oct 94 G. Roelofs changed fprintf macro to MESSAGE() + c14r 1 Nov 94 G. Roelofs fixed possible redefinition of CHECK_EOF + c14s 7 May 95 S. Maxwell OS/2 DLL globals stuff incorporated; + P. Kienitz "fixed" ASM_INFLATECODES macro/prototype + c14t 18 Aug 95 G. Roelofs added UZinflate() to use zlib functions; + changed voidp to zvoid; moved huft_build() + and huft_free() to end of file + c14u 1 Oct 95 G. Roelofs moved G into definition of MESSAGE macro + c14v 8 Nov 95 P. Kienitz changed ASM_INFLATECODES to use a regular + call with __G__ instead of a macro + c15 3 Aug 96 M. Adler fixed bomb-bug on random input data (Adobe) + c15b 24 Aug 96 M. Adler more fixes for random input data + c15c 28 Mar 97 G. Roelofs changed USE_ZLIB fatal exit code from + PK_MEM2 to PK_MEM3 + c16 20 Apr 97 J. Altman added memzero(v[]) in huft_build() + c16b 29 Mar 98 C. Spieler modified DLL code for slide redirection + */ + + +/* + Inflate deflated (PKZIP's method 8 compressed) data. The compression + method searches for as much of the current string of bytes (up to a + length of 258) in the previous 32K bytes. If it doesn't find any + matches (of at least length 3), it codes the next byte. Otherwise, it + codes the length of the matched string and its distance backwards from + the current position. There is a single Huffman code that codes both + single bytes (called "literals") and match lengths. A second Huffman + code codes the distance information, which follows a length code. Each + length or distance code actually represents a base value and a number + of "extra" (sometimes zero) bits to get to add to the base value. At + the end of each deflated block is a special end-of-block (EOB) literal/ + length code. The decoding process is basically: get a literal/length + code; if EOB then done; if a literal, emit the decoded byte; if a + length then get the distance and emit the referred-to bytes from the + sliding window of previously emitted data. + + There are (currently) three kinds of inflate blocks: stored, fixed, and + dynamic. The compressor outputs a chunk of data at a time and decides + which method to use on a chunk-by-chunk basis. A chunk might typically + be 32K to 64K, uncompressed. If the chunk is uncompressible, then the + "stored" method is used. In this case, the bytes are simply stored as + is, eight bits per byte, with none of the above coding. The bytes are + preceded by a count, since there is no longer an EOB code. + + If the data are compressible, then either the fixed or dynamic methods + are used. In the dynamic method, the compressed data are preceded by + an encoding of the literal/length and distance Huffman codes that are + to be used to decode this block. The representation is itself Huffman + coded, and so is preceded by a description of that code. These code + descriptions take up a little space, and so for small blocks, there is + a predefined set of codes, called the fixed codes. The fixed method is + used if the block ends up smaller that way (usually for quite small + chunks); otherwise the dynamic method is used. In the latter case, the + codes are customized to the probabilities in the current block and so + can code it much better than the pre-determined fixed codes can. + + The Huffman codes themselves are decoded using a multi-level table + lookup, in order to maximize the speed of decoding plus the speed of + building the decoding tables. See the comments below that precede the + lbits and dbits tuning parameters. + + GRR: return values(?) + 0 OK + 1 incomplete table + 2 bad input + 3 not enough memory + */ + + +/* + Notes beyond the 1.93a appnote.txt: + + 1. Distance pointers never point before the beginning of the output + stream. + 2. Distance pointers can point back across blocks, up to 32k away. + 3. There is an implied maximum of 7 bits for the bit length table and + 15 bits for the actual data. + 4. If only one code exists, then it is encoded using one bit. (Zero + would be more efficient, but perhaps a little confusing.) If two + codes exist, they are coded using one bit each (0 and 1). + 5. There is no way of sending zero distance codes--a dummy must be + sent if there are none. (History: a pre 2.0 version of PKZIP would + store blocks with no distance codes, but this was discovered to be + too harsh a criterion.) Valid only for 1.93a. 2.04c does allow + zero distance codes, which is sent as one code of zero bits in + length. + 6. There are up to 286 literal/length codes. Code 256 represents the + end-of-block. Note however that the static length tree defines + 288 codes just to fill out the Huffman codes. Codes 286 and 287 + cannot be used though, since there is no length base or extra bits + defined for them. Similarily, there are up to 30 distance codes. + However, static trees define 32 codes (all 5 bits) to fill out the + Huffman codes, but the last two had better not show up in the data. + 7. Unzip can check dynamic Huffman blocks for complete code sets. + The exception is that a single code would not be complete (see #4). + 8. The five bits following the block type is really the number of + literal codes sent minus 257. + 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits + (1+6+6). Therefore, to output three times the length, you output + three codes (1+1+1), whereas to output four times the same length, + you only need two codes (1+3). Hmm. + 10. In the tree reconstruction algorithm, Code = Code + Increment + only if BitLength(i) is not zero. (Pretty obvious.) + 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19) + 12. Note: length code 284 can represent 227-258, but length code 285 + really is 258. The last length deserves its own, short code + since it gets used a lot in very redundant files. The length + 258 is special since 258 - 3 (the min match length) is 255. + 13. The literal/length and distance code bit lengths are read as a + single stream of lengths. It is possible (and advantageous) for + a repeat code (16, 17, or 18) to go across the boundary between + the two sets of lengths. + */ + + +#define PKZIP_BUG_WORKAROUND /* PKZIP 1.93a problem--live with it */ + +/* + inflate.h must supply the uch slide[WSIZE] array, the zvoid typedef + (void if (void *) is accepted, else char) and the NEXTBYTE, + FLUSH() and memzero macros. If the window size is not 32K, it + should also define WSIZE. If INFMOD is defined, it can include + compiled functions to support the NEXTBYTE and/or FLUSH() macros. + There are defaults for NEXTBYTE and FLUSH() below for use as + examples of what those functions need to do. Normally, you would + also want FLUSH() to compute a crc on the data. inflate.h also + needs to provide these typedefs: + + typedef unsigned char uch; + typedef unsigned short ush; + typedef unsigned long ulg; + + This module uses the external functions malloc() and free() (and + probably memset() or bzero() in the memzero() macro). Their + prototypes are normally found in and . + */ + +/* #define DEBUG */ +#define INFMOD /* tell inflate.h to include code to be compiled */ +#include "inflate.h" + + +#ifndef WSIZE /* default is 32K */ +# define WSIZE 0x8000 /* window size--must be a power of two, and at least */ +#endif /* 32K for zip's deflate method */ + +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) +# define wsize G._wsize /* wsize is a variable */ +#else +# define wsize WSIZE /* wsize is a constant */ +#endif + + +#ifndef NEXTBYTE /* default is to simply get a byte from stdin */ +# define NEXTBYTE getchar() +#endif + +#ifndef MESSAGE /* only used twice, for fixed strings--NOT general-purpose */ +# define MESSAGE(str,len,flag) fprintf(stderr,(char *)(str)) +#endif + +#ifndef FLUSH /* default is to simply write the buffer to stdout */ +# define FLUSH(n) fwrite(redirSlide, 1, n, stdout) /* return value not used */ +#endif +/* Warning: the fwrite above might not work on 16-bit compilers, since + 0x8000 might be interpreted as -32,768 by the library function. */ + +#ifndef Trace +# ifdef DEBUG +# define Trace(x) fprintf x +# else +# define Trace(x) +# endif +#endif + + +/*---------------------------------------------------------------------------*/ +#ifdef USE_ZLIB + + +/* + GRR: return values for both original inflate() and UZinflate() + 0 OK + 1 incomplete table(?) + 2 bad input + 3 not enough memory + */ + +/**************************/ +/* Function UZinflate() */ +/**************************/ + +int UZinflate(__G) /* decompress an inflated entry using the zlib routines */ + __GDEF +{ + int err=Z_OK; + +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) + if (G.redirect_slide) + wsize = G.redirect_size, redirSlide = G.redirect_buffer; + else + wsize = WSIZE, redirSlide = slide; +#endif + + G.dstrm.next_out = redirSlide; + G.dstrm.avail_out = wsize; + + G.dstrm.next_in = G.inptr; + G.dstrm.avail_in = G.incnt; + + if (!G.inflInit) { + unsigned i; + int windowBits; + + /* only need to test this stuff once */ + if (zlib_version[0] != ZLIB_VERSION[0]) { + Info(slide, 0x21, ((char *)slide, + "error: incompatible zlib version (expected %s, found %s)\n", + ZLIB_VERSION, zlib_version)); + return 3; + } else if (strcmp(zlib_version, ZLIB_VERSION) != 0) + Info(slide, 0x21, ((char *)slide, + "warning: different zlib version (expected %s, using %s)\n", + ZLIB_VERSION, zlib_version)); + + /* windowBits = log2(wsize) */ + for (i = ((unsigned)wsize * 2 - 1), windowBits = 0; + !(i & 1); i >>= 1, ++windowBits); + if ((unsigned)windowBits > (unsigned)15) + windowBits = 15; + else if (windowBits < 8) + windowBits = 8; + + G.dstrm.zalloc = (alloc_func)Z_NULL; + G.dstrm.zfree = (free_func)Z_NULL; + + Trace((stderr, "initializing inflate()\n")); + err = inflateInit2(&G.dstrm, -windowBits); + + if (err == Z_MEM_ERROR) + return 3; + else if (err != Z_OK) + Trace((stderr, "oops! (inflateInit2() err = %d)\n", err)); + G.inflInit = 1; + } + +#ifdef FUNZIP + while (err != Z_STREAM_END) { +#else /* !FUNZIP */ + while (G.csize > 0) { + Trace((stderr, "first loop: G.csize = %ld\n", G.csize)); +#endif /* ?FUNZIP */ + while (G.dstrm.avail_out > 0) { + err = inflate(&G.dstrm, Z_PARTIAL_FLUSH); + + if (err == Z_DATA_ERROR) + return 2; + else if (err == Z_MEM_ERROR) + return 3; + else if (err != Z_OK && err != Z_STREAM_END) + Trace((stderr, "oops! (inflate(first loop) err = %d)\n", err)); + +#ifdef FUNZIP + if (err == Z_STREAM_END) /* "END-of-entry-condition" ? */ +#else /* !FUNZIP */ + if (G.csize <= 0L) /* "END-of-entry-condition" ? */ +#endif /* ?FUNZIP */ + break; + + if (G.dstrm.avail_in <= 0) { + if (fillinbuf(__G) == 0) + return 2; /* no "END-condition" yet, but no more data */ + + G.dstrm.next_in = G.inptr; + G.dstrm.avail_in = G.incnt; + } + Trace((stderr, " avail_in = %d\n", G.dstrm.avail_in)); + } + FLUSH(wsize - G.dstrm.avail_out); /* flush slide[] */ + Trace((stderr, "inside loop: flushing %ld bytes (ptr diff = %ld)\n", + (long)(wsize - G.dstrm.avail_out), + (long)(G.dstrm.next_out-(Bytef *)redirSlide))); + G.dstrm.next_out = redirSlide; + G.dstrm.avail_out = wsize; + } + + /* no more input, so loop until we have all output */ + Trace((stderr, "beginning final loop: err = %d\n", err)); + while (err != Z_STREAM_END) { + err = inflate(&G.dstrm, Z_PARTIAL_FLUSH); + if (err == Z_DATA_ERROR) + return 2; + else if (err == Z_MEM_ERROR) + return 3; + else if (err == Z_BUF_ERROR) { /* DEBUG */ + Trace((stderr, "zlib inflate() did not detect stream end (%s, %s)\n" + , G.zipfn, G.filename)); + break; + } else if (err != Z_OK && err != Z_STREAM_END) { + Trace((stderr, "oops! (inflate(final loop) err = %d)\n", err)); + DESTROYGLOBALS() + EXIT(PK_MEM3); + } + FLUSH(wsize - G.dstrm.avail_out); /* final flush of slide[] */ + Trace((stderr, "final loop: flushing %ld bytes (ptr diff = %ld)\n", + (long)(wsize - G.dstrm.avail_out), + (long)(G.dstrm.next_out-(Bytef *)redirSlide))); + G.dstrm.next_out = redirSlide; + G.dstrm.avail_out = wsize; + } + Trace((stderr, "total in = %ld, total out = %ld\n", G.dstrm.total_in, + G.dstrm.total_out)); + + G.inptr = (uch *)G.dstrm.next_in; + G.incnt = (G.inbuf + INBUFSIZ) - G.inptr; /* reset for other routines */ + + err = inflateReset(&G.dstrm); + if (err != Z_OK) + Trace((stderr, "oops! (inflateReset() err = %d)\n", err)); + + return 0; +} + + +/*---------------------------------------------------------------------------*/ +#else /* !USE_ZLIB */ + + +/* Function prototypes */ +#ifndef OF +# ifdef __STDC__ +# define OF(a) a +# else +# define OF(a) () +# endif +#endif /* !OF */ +int inflate_codes OF((__GPRO__ struct huft *tl, struct huft *td, + int bl, int bd)); +static int inflate_stored OF((__GPRO)); +static int inflate_fixed OF((__GPRO)); +static int inflate_dynamic OF((__GPRO)); +static int inflate_block OF((__GPRO__ int *e)); + + +/* The inflate algorithm uses a sliding 32K byte window on the uncompressed + stream to find repeated byte strings. This is implemented here as a + circular buffer. The index is updated simply by incrementing and then + and'ing with 0x7fff (32K-1). */ +/* It is left to other modules to supply the 32K area. It is assumed + to be usable as if it were declared "uch slide[32768];" or as just + "uch *slide;" and then malloc'ed in the latter case. The definition + must be in unzip.h, included above. */ + + +/* unsigned wp; moved to globals.h */ /* current position in slide */ + + +/* Tables for deflate from PKZIP's appnote.txt. */ +static ZCONST unsigned border[] = { /* Order of the bit length code lengths */ + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; +static ZCONST ush cplens[] = { /* Copy lengths for literal codes 257..285 */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + /* note: see note #13 above about the 258 in this list. */ +static ZCONST ush cplext[] = { /* Extra bits for literal codes 257..285 */ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, + 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */ +static ZCONST ush cpdist[] = { /* Copy offsets for distance codes 0..29 */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577}; +static ZCONST ush cpdext[] = { /* Extra bits for distance codes */ + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, + 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, + 12, 12, 13, 13}; + + +/* moved to consts.h (included in unzip.c), resp. funzip.c */ +#if 0 +/* And'ing with mask_bits[n] masks the lower n bits */ +ZCONST ush near mask_bits[] = { + 0x0000, + 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, + 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff +}; +#endif /* 0 */ + + +/* Macros for inflate() bit peeking and grabbing. + The usage is: + + NEEDBITS(j) + x = b & mask_bits[j]; + DUMPBITS(j) + + where NEEDBITS makes sure that b has at least j bits in it, and + DUMPBITS removes the bits from b. The macros use the variable k + for the number of bits in b. Normally, b and k are register + variables for speed and are initialized at the begining of a + routine that uses these macros from a global bit buffer and count. + + In order to not ask for more bits than there are in the compressed + stream, the Huffman tables are constructed to only ask for just + enough bits to make up the end-of-block code (value 256). Then no + bytes need to be "returned" to the buffer at the end of the last + block. See the huft_build() routine. + */ + +/* These have been moved to globals.h */ +#if 0 +ulg bb; /* bit buffer */ +unsigned bk; /* bits in bit buffer */ +#endif + +#ifndef CHECK_EOF +# define CHECK_EOF /* default as of 5.13/5.2 */ +#endif + +#ifndef CHECK_EOF +# define NEEDBITS(n) {while(k<(n)){b|=((ulg)NEXTBYTE)<>=(n);k-=(n);} + + +/* + Huffman code decoding is performed using a multi-level table lookup. + The fastest way to decode is to simply build a lookup table whose + size is determined by the longest code. However, the time it takes + to build this table can also be a factor if the data being decoded + are not very long. The most common codes are necessarily the + shortest codes, so those codes dominate the decoding time, and hence + the speed. The idea is you can have a shorter table that decodes the + shorter, more probable codes, and then point to subsidiary tables for + the longer codes. The time it costs to decode the longer codes is + then traded against the time it takes to make longer tables. + + This results of this trade are in the variables lbits and dbits + below. lbits is the number of bits the first level table for literal/ + length codes can decode in one step, and dbits is the same thing for + the distance codes. Subsequent tables are also less than or equal to + those sizes. These values may be adjusted either when all of the + codes are shorter than that, in which case the longest code length in + bits is used, or when the shortest code is *longer* than the requested + table size, in which case the length of the shortest code in bits is + used. + + There are two different values for the two tables, since they code a + different number of possibilities each. The literal/length table + codes 286 possible values, or in a flat code, a little over eight + bits. The distance table codes 30 possible values, or a little less + than five bits, flat. The optimum values for speed end up being + about one bit more than those, so lbits is 8+1 and dbits is 5+1. + The optimum values may differ though from machine to machine, and + possibly even between compilers. Your mileage may vary. + */ + + +static ZCONST int lbits = 9; /* bits in base literal/length lookup table */ +static ZCONST int dbits = 6; /* bits in base distance lookup table */ + + +#ifndef ASM_INFLATECODES + +int inflate_codes(__G__ tl, td, bl, bd) + __GDEF +struct huft *tl, *td; /* literal/length and distance decoder tables */ +int bl, bd; /* number of bits decoded by tl[] and td[] */ +/* inflate (decompress) the codes in a deflated (compressed) block. + Return an error code or zero if it all goes ok. */ +{ + register unsigned e; /* table entry flag/number of extra bits */ + unsigned n, d; /* length and index for copy */ + unsigned w; /* current window position */ + struct huft *t; /* pointer to table entry */ + unsigned ml, md; /* masks for bl and bd bits */ + register ulg b; /* bit buffer */ + register unsigned k; /* number of bits in bit buffer */ + + + /* make local copies of globals */ + b = G.bb; /* initialize bit buffer */ + k = G.bk; + w = G.wp; /* initialize window position */ + + + /* inflate the coded data */ + ml = mask_bits[bl]; /* precompute masks for speed */ + md = mask_bits[bd]; + while (1) /* do until end of block */ + { + NEEDBITS((unsigned)bl) + if ((e = (t = tl + ((unsigned)b & ml))->e) > 16) + do { + if (e == 99) + return 1; + DUMPBITS(t->b) + e -= 16; + NEEDBITS(e) + } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16); + DUMPBITS(t->b) + if (e == 16) /* then it's a literal */ + { + redirSlide[w++] = (uch)t->v.n; + if (w == wsize) + { + FLUSH(w); + w = 0; + } + } + else /* it's an EOB or a length */ + { + /* exit if end of block */ + if (e == 15) + break; + + /* get length of block to copy */ + NEEDBITS(e) + n = t->v.n + ((unsigned)b & mask_bits[e]); + DUMPBITS(e); + + /* decode distance of block to copy */ + NEEDBITS((unsigned)bd) + if ((e = (t = td + ((unsigned)b & md))->e) > 16) + do { + if (e == 99) + return 1; + DUMPBITS(t->b) + e -= 16; + NEEDBITS(e) + } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16); + DUMPBITS(t->b) + NEEDBITS(e) + d = w - t->v.n - ((unsigned)b & mask_bits[e]); + DUMPBITS(e) + + /* do the copy */ + do { +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) + if (G.redirect_slide) {/* &= w/ wsize unnecessary & wrong if redirect */ + if (d >= wsize) + return 1; /* invalid compressed data */ + n -= (e = (e = wsize - (d > w ? d : w)) > n ? n : e); + } + else +#endif + n -= (e = (e = wsize - ((d &= wsize-1) > w ? d : w)) > n ? n : e); +#ifndef NOMEMCPY + if (w - d >= e) /* (this test assumes unsigned comparison) */ + { + memcpy(redirSlide + w, redirSlide + d, e); + w += e; + d += e; + } + else /* do it slowly to avoid memcpy() overlap */ +#endif /* !NOMEMCPY */ + do { + redirSlide[w++] = redirSlide[d++]; + } while (--e); + if (w == wsize) + { + FLUSH(w); + w = 0; + } + } while (n); + } + } + + + /* restore the globals from the locals */ + G.wp = w; /* restore global window pointer */ + G.bb = b; /* restore global bit buffer */ + G.bk = k; + + + /* done */ + return 0; +} + +#endif /* ASM_INFLATECODES */ + + + +static int inflate_stored(__G) + __GDEF +/* "decompress" an inflated type 0 (stored) block. */ +{ + unsigned n; /* number of bytes in block */ + unsigned w; /* current window position */ + register ulg b; /* bit buffer */ + register unsigned k; /* number of bits in bit buffer */ + + + /* make local copies of globals */ + Trace((stderr, "\nstored block")); + b = G.bb; /* initialize bit buffer */ + k = G.bk; + w = G.wp; /* initialize window position */ + + + /* go to byte boundary */ + n = k & 7; + DUMPBITS(n); + + + /* get the length and its complement */ + NEEDBITS(16) + n = ((unsigned)b & 0xffff); + DUMPBITS(16) + NEEDBITS(16) + if (n != (unsigned)((~b) & 0xffff)) + return 1; /* error in compressed data */ + DUMPBITS(16) + + + /* read and output the compressed data */ + while (n--) + { + NEEDBITS(8) + redirSlide[w++] = (uch)b; + if (w == wsize) + { + FLUSH(w); + w = 0; + } + DUMPBITS(8) + } + + + /* restore the globals from the locals */ + G.wp = w; /* restore global window pointer */ + G.bb = b; /* restore global bit buffer */ + G.bk = k; + return 0; +} + + +/* Globals for literal tables (built once) */ +/* Moved to globals.h */ +#if 0 +struct huft *fixed_tl = (struct huft *)NULL; +struct huft *fixed_td; +int fixed_bl, fixed_bd; +#endif + +static int inflate_fixed(__G) + __GDEF +/* decompress an inflated type 1 (fixed Huffman codes) block. We should + either replace this with a custom decoder, or at least precompute the + Huffman tables. */ +{ + /* if first time, set up tables for fixed blocks */ + Trace((stderr, "\nliteral block")); + if (G.fixed_tl == (struct huft *)NULL) + { + int i; /* temporary variable */ + unsigned l[288]; /* length list for huft_build */ + + /* literal table */ + for (i = 0; i < 144; i++) + l[i] = 8; + for (; i < 256; i++) + l[i] = 9; + for (; i < 280; i++) + l[i] = 7; + for (; i < 288; i++) /* make a complete, but wrong code set */ + l[i] = 8; + G.fixed_bl = 7; + if ((i = huft_build(__G__ l, 288, 257, cplens, cplext, + &G.fixed_tl, &G.fixed_bl)) != 0) + { + G.fixed_tl = (struct huft *)NULL; + return i; + } + + /* distance table */ + for (i = 0; i < 30; i++) /* make an incomplete code set */ + l[i] = 5; + G.fixed_bd = 5; + if ((i = huft_build(__G__ l, 30, 0, cpdist, cpdext, + &G.fixed_td, &G.fixed_bd)) > 1) + { + huft_free(G.fixed_tl); + G.fixed_tl = (struct huft *)NULL; + return i; + } + } + + /* decompress until an end-of-block code */ + return inflate_codes(__G__ G.fixed_tl, G.fixed_td, + G.fixed_bl, G.fixed_bd) != 0; +} + + + +static int inflate_dynamic(__G) + __GDEF +/* decompress an inflated type 2 (dynamic Huffman codes) block. */ +{ + int i; /* temporary variables */ + unsigned j; + unsigned l; /* last length */ + unsigned m; /* mask for bit lengths table */ + unsigned n; /* number of lengths to get */ + struct huft *tl; /* literal/length code table */ + struct huft *td; /* distance code table */ + int bl; /* lookup bits for tl */ + int bd; /* lookup bits for td */ + unsigned nb; /* number of bit length codes */ + unsigned nl; /* number of literal/length codes */ + unsigned nd; /* number of distance codes */ +#ifdef PKZIP_BUG_WORKAROUND + unsigned ll[288+32]; /* literal/length and distance code lengths */ +#else + unsigned ll[286+30]; /* literal/length and distance code lengths */ +#endif + register ulg b; /* bit buffer */ + register unsigned k; /* number of bits in bit buffer */ + + + /* make local bit buffer */ + Trace((stderr, "\ndynamic block")); + b = G.bb; + k = G.bk; + + + /* read in table lengths */ + NEEDBITS(5) + nl = 257 + ((unsigned)b & 0x1f); /* number of literal/length codes */ + DUMPBITS(5) + NEEDBITS(5) + nd = 1 + ((unsigned)b & 0x1f); /* number of distance codes */ + DUMPBITS(5) + NEEDBITS(4) + nb = 4 + ((unsigned)b & 0xf); /* number of bit length codes */ + DUMPBITS(4) +#ifdef PKZIP_BUG_WORKAROUND + if (nl > 288 || nd > 32) +#else + if (nl > 286 || nd > 30) +#endif + return 1; /* bad lengths */ + + + /* read in bit-length-code lengths */ + for (j = 0; j < nb; j++) + { + NEEDBITS(3) + ll[border[j]] = (unsigned)b & 7; + DUMPBITS(3) + } + for (; j < 19; j++) + ll[border[j]] = 0; + + + /* build decoding table for trees--single level, 7 bit lookup */ + bl = 7; + i = huft_build(__G__ ll, 19, 19, NULL, NULL, &tl, &bl); + if (bl == 0) /* no bit lengths */ + i = 1; + if (i) + { + if (i == 1) + huft_free(tl); + return i; /* incomplete code set */ + } + + + /* read in literal and distance code lengths */ + n = nl + nd; + m = mask_bits[bl]; + i = l = 0; + while ((unsigned)i < n) + { + NEEDBITS((unsigned)bl) + j = (td = tl + ((unsigned)b & m))->b; + DUMPBITS(j) + j = td->v.n; + if (j < 16) /* length of code in bits (0..15) */ + ll[i++] = l = j; /* save last length in l */ + else if (j == 16) /* repeat last length 3 to 6 times */ + { + NEEDBITS(2) + j = 3 + ((unsigned)b & 3); + DUMPBITS(2) + if ((unsigned)i + j > n) + return 1; + while (j--) + ll[i++] = l; + } + else if (j == 17) /* 3 to 10 zero length codes */ + { + NEEDBITS(3) + j = 3 + ((unsigned)b & 7); + DUMPBITS(3) + if ((unsigned)i + j > n) + return 1; + while (j--) + ll[i++] = 0; + l = 0; + } + else /* j == 18: 11 to 138 zero length codes */ + { + NEEDBITS(7) + j = 11 + ((unsigned)b & 0x7f); + DUMPBITS(7) + if ((unsigned)i + j > n) + return 1; + while (j--) + ll[i++] = 0; + l = 0; + } + } + + + /* free decoding table for trees */ + huft_free(tl); + + + /* restore the global bit buffer */ + G.bb = b; + G.bk = k; + + + /* build the decoding tables for literal/length and distance codes */ + bl = lbits; + i = huft_build(__G__ ll, nl, 257, cplens, cplext, &tl, &bl); + if (bl == 0) /* no literals or lengths */ + i = 1; + if (i) + { + if (i == 1) { + if (!uO.qflag) + MESSAGE((uch *)"(incomplete l-tree) ", 21L, 1); + huft_free(tl); + } + return i; /* incomplete code set */ + } + bd = dbits; + i = huft_build(__G__ ll + nl, nd, 0, cpdist, cpdext, &td, &bd); + if (bd == 0 && nl > 257) /* lengths but no distances */ + { + if (!uO.qflag) + MESSAGE((uch *)"(incomplete d-tree) ", 21L, 1); + huft_free(tl); + return 1; + } + if (i == 1) { +#ifdef PKZIP_BUG_WORKAROUND + i = 0; +#else + if (!uO.qflag) + MESSAGE((uch *)"(incomplete d-tree) ", 21L, 1); + huft_free(td); +#endif + } + if (i) + { + huft_free(tl); + return i; + } + + + /* decompress until an end-of-block code */ + if (inflate_codes(__G__ tl, td, bl, bd)) + return 1; + + + /* free the decoding tables, return */ + huft_free(tl); + huft_free(td); + return 0; +} + + + +static int inflate_block(__G__ e) + __GDEF + int *e; /* last block flag */ +/* decompress an inflated block */ +{ + unsigned t; /* block type */ + register ulg b; /* bit buffer */ + register unsigned k; /* number of bits in bit buffer */ + + + /* make local bit buffer */ + b = G.bb; + k = G.bk; + + + /* read in last block bit */ + NEEDBITS(1) + *e = (int)b & 1; + DUMPBITS(1) + + + /* read in block type */ + NEEDBITS(2) + t = (unsigned)b & 3; + DUMPBITS(2) + + + /* restore the global bit buffer */ + G.bb = b; + G.bk = k; + + + /* inflate that block type */ + if (t == 2) + return inflate_dynamic(__G); + if (t == 0) + return inflate_stored(__G); + if (t == 1) + return inflate_fixed(__G); + + + /* bad block type */ + return 2; +} + + + +int inflate(__G) + __GDEF +/* decompress an inflated entry */ +{ + int e; /* last block flag */ + int r; /* result code */ +#ifdef DEBUG + unsigned h = 0; /* maximum struct huft's malloc'ed */ +#endif + +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) + if (G.redirect_slide) + wsize = G.redirect_size, redirSlide = G.redirect_buffer; + else + wsize = WSIZE, redirSlide = slide; /* how they're #defined if !DLL */ +#endif + + /* initialize window, bit buffer */ + G.wp = 0; + G.bk = 0; + G.bb = 0; + + + /* decompress until the last block */ + do { +#ifdef DEBUG + G.hufts = 0; +#endif + if ((r = inflate_block(__G__ &e)) != 0) + return r; +#ifdef DEBUG + if (G.hufts > h) + h = G.hufts; +#endif + } while (!e); + + + /* flush out redirSlide */ + FLUSH(G.wp); + + + /* return success */ + Trace((stderr, "\n%u bytes in Huffman tables (%d/entry)\n", + h * sizeof(struct huft), sizeof(struct huft))); + return 0; +} + + + +int inflate_free(__G) + __GDEF +{ + if (G.fixed_tl != (struct huft *)NULL) + { + huft_free(G.fixed_td); + huft_free(G.fixed_tl); + G.fixed_td = G.fixed_tl = (struct huft *)NULL; + } + return 0; +} + +#endif /* ?USE_ZLIB */ + + +/* + * GRR: moved huft_build() and huft_free() down here; used by explode() + * and fUnZip regardless of whether USE_ZLIB defined or not + */ + + +/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */ +#define BMAX 16 /* maximum bit length of any code (16 for explode) */ +#define N_MAX 288 /* maximum number of codes in any set */ + + +int huft_build(__G__ b, n, s, d, e, t, m) + __GDEF + ZCONST unsigned *b; /* code lengths in bits (all assumed <= BMAX) */ + unsigned n; /* number of codes (assumed <= N_MAX) */ + unsigned s; /* number of simple-valued codes (0..s-1) */ + ZCONST ush *d; /* list of base values for non-simple codes */ + ZCONST ush *e; /* list of extra bits for non-simple codes */ + struct huft **t; /* result: starting table */ + int *m; /* maximum lookup bits, returns actual */ +/* Given a list of code lengths and a maximum table size, make a set of + tables to decode that set of codes. Return zero on success, one if + the given code set is incomplete (the tables are still built in this + case), two if the input is invalid (all zero length codes or an + oversubscribed set of lengths), and three if not enough memory. + The code with value 256 is special, and the tables are constructed + so that no bits beyond that code are fetched when that code is + decoded. */ +{ + unsigned a; /* counter for codes of length k */ + unsigned c[BMAX+1]; /* bit length count table */ + unsigned el; /* length of EOB code (value 256) */ + unsigned f; /* i repeats in table every f entries */ + int g; /* maximum code length */ + int h; /* table level */ + register unsigned i; /* counter, current code */ + register unsigned j; /* counter */ + register int k; /* number of bits in current code */ + int lx[BMAX+1]; /* memory for l[-1..BMAX-1] */ + int *l = lx+1; /* stack of bits per table */ + register unsigned *p; /* pointer into c[], b[], or v[] */ + register struct huft *q; /* points to current table */ + struct huft r; /* table entry for structure assignment */ + struct huft *u[BMAX]; /* table stack */ + unsigned v[N_MAX]; /* values in order of bit length */ + register int w; /* bits before this table == (l * h) */ + unsigned x[BMAX+1]; /* bit offsets, then code stack */ + unsigned *xp; /* pointer into x */ + int y; /* number of dummy codes added */ + unsigned z; /* number of entries in current table */ + + + /* Generate counts for each bit length */ + el = n > 256 ? b[256] : BMAX; /* set length of EOB code, if any */ + memzero((char *)c, sizeof(c)); + p = (unsigned *)b; i = n; + do { + c[*p]++; p++; /* assume all entries <= BMAX */ + } while (--i); + if (c[0] == n) /* null input--all zero length codes */ + { + *t = (struct huft *)NULL; + *m = 0; + return 0; + } + + + /* Find minimum and maximum length, bound *m by those */ + for (j = 1; j <= BMAX; j++) + if (c[j]) + break; + k = j; /* minimum code length */ + if ((unsigned)*m < j) + *m = j; + for (i = BMAX; i; i--) + if (c[i]) + break; + g = i; /* maximum code length */ + if ((unsigned)*m > i) + *m = i; + + + /* Adjust last length count to fill out codes, if needed */ + for (y = 1 << j; j < i; j++, y <<= 1) + if ((y -= c[j]) < 0) + return 2; /* bad input: more codes than bits */ + if ((y -= c[i]) < 0) + return 2; + c[i] += y; + + + /* Generate starting offsets into the value table for each length */ + x[1] = j = 0; + p = c + 1; xp = x + 2; + while (--i) { /* note that i == g from above */ + *xp++ = (j += *p++); + } + + + /* Make a table of values in order of bit lengths */ + memzero((char *)v, sizeof(v)); + p = (unsigned *)b; i = 0; + do { + if ((j = *p++) != 0) + v[x[j]++] = i; + } while (++i < n); + n = x[g]; /* set n to length of v */ + + + /* Generate the Huffman codes and for each, make the table entries */ + x[0] = i = 0; /* first Huffman code is zero */ + p = v; /* grab values in bit order */ + h = -1; /* no tables yet--level -1 */ + w = l[-1] = 0; /* no bits decoded yet */ + u[0] = (struct huft *)NULL; /* just to keep compilers happy */ + q = (struct huft *)NULL; /* ditto */ + z = 0; /* ditto */ + + /* go through the bit lengths (k already is bits in shortest code) */ + for (; k <= g; k++) + { + a = c[k]; + while (a--) + { + /* here i is the Huffman code of length k bits for value *p */ + /* make tables up to required level */ + while (k > w + l[h]) + { + w += l[h++]; /* add bits already decoded */ + + /* compute minimum size table less than or equal to *m bits */ + z = (z = g - w) > (unsigned)*m ? *m : z; /* upper limit */ + if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */ + { /* too few codes for k-w bit table */ + f -= a + 1; /* deduct codes from patterns left */ + xp = c + k; + while (++j < z) /* try smaller tables up to z bits */ + { + if ((f <<= 1) <= *++xp) + break; /* enough codes to use up j bits */ + f -= *xp; /* else deduct codes from patterns */ + } + } + if ((unsigned)w + j > el && (unsigned)w < el) + j = el - w; /* make EOB code end at table */ + z = 1 << j; /* table entries for j-bit table */ + l[h] = j; /* set table size in stack */ + + /* allocate and link in new table */ + if ((q = (struct huft *)malloc((z + 1)*sizeof(struct huft))) == + (struct huft *)NULL) + { + if (h) + huft_free(u[0]); + return 3; /* not enough memory */ + } +#ifdef DEBUG + G.hufts += z + 1; /* track memory usage */ +#endif + *t = q + 1; /* link to list for huft_free() */ + *(t = &(q->v.t)) = (struct huft *)NULL; + u[h] = ++q; /* table starts after link */ + + /* connect to last table, if there is one */ + if (h) + { + x[h] = i; /* save pattern for backing up */ + r.b = (uch)l[h-1]; /* bits to dump before this table */ + r.e = (uch)(16 + j); /* bits in this table */ + r.v.t = q; /* pointer to this table */ + j = (i & ((1 << w) - 1)) >> (w - l[h-1]); + u[h-1][j] = r; /* connect to last table */ + } + } + + /* set up table entry in r */ + r.b = (uch)(k - w); + if (p >= v + n) + r.e = 99; /* out of values--invalid code */ + else if (*p < s) + { + r.e = (uch)(*p < 256 ? 16 : 15); /* 256 is end-of-block code */ + r.v.n = (ush)*p++; /* simple code is just the value */ + } + else + { + r.e = (uch)e[*p - s]; /* non-simple--look up in lists */ + r.v.n = d[*p++ - s]; + } + + /* fill code-like entries with r */ + f = 1 << (k - w); + for (j = i >> w; j < z; j += f) + q[j] = r; + + /* backwards increment the k-bit code i */ + for (j = 1 << (k - 1); i & j; j >>= 1) + i ^= j; + i ^= j; + + /* backup over finished tables */ + while ((i & ((1 << w) - 1)) != x[h]) + w -= l[--h]; /* don't need to update q */ + } + } + + + /* return actual size of base table */ + *m = l[0]; + + + /* Return true (1) if we were given an incomplete table */ + return y != 0 && g != 1; +} + + + +int huft_free(t) +struct huft *t; /* table to free */ +/* Free the malloc'ed tables built by huft_build(), which makes a linked + list of the tables it made, with the links in a dummy first entry of + each table. */ +{ + register struct huft *p, *q; + + + /* Go through linked list, freeing from the malloced (t[-1]) address. */ + p = t; + while (p != (struct huft *)NULL) + { + q = (--p)->v.t; + free((zvoid *)p); + p = q; + } + return 0; +} diff --git a/Build/source/extra/unzip/inflate.h b/Build/source/extra/unzip/inflate.h new file mode 100644 index 00000000000..f1d774b7935 --- /dev/null +++ b/Build/source/extra/unzip/inflate.h @@ -0,0 +1,24 @@ +/* inflate.h for UnZip -- put in the public domain by Mark Adler + version c14f, 23 November 1995 */ + + +/* You can do whatever you like with this source file, though I would + prefer that if you modify it and redistribute it that you include + comments to that effect with your name and the date. Thank you. + + History: + vers date who what + ---- --------- -------------- ------------------------------------ + c14 12 Mar 93 M. Adler made inflate.c standalone with the + introduction of inflate.h. + c14d 28 Aug 93 G. Roelofs replaced flush/FlushOutput with new version + c14e 29 Sep 93 G. Roelofs moved everything into unzip.h; added crypt.h + c14f 23 Nov 95 G. Roelofs added UNZIP_INTERNAL to accommodate newly + split unzip.h + */ + +#define UNZIP_INTERNAL +#include "unzip.h" /* provides slide[], typedefs and macros */ +#ifdef FUNZIP +# include "crypt.h" /* provides NEXTBYTE macro for crypt version of funzip */ +#endif diff --git a/Build/source/extra/unzip/list.c b/Build/source/extra/unzip/list.c new file mode 100644 index 00000000000..0dc1e8a1286 --- /dev/null +++ b/Build/source/extra/unzip/list.c @@ -0,0 +1,644 @@ +/*--------------------------------------------------------------------------- + + list.c + + This file contains the non-ZipInfo-specific listing routines for UnZip. + + Contains: list_files() + get_time_stamp() [optional feature] + ratio() + fnprint() + + ---------------------------------------------------------------------------*/ + + +#define UNZIP_INTERNAL +#include "unzip.h" +#ifdef WINDLL +# ifdef POCKET_UNZIP +# include "wince/intrface.h" +# else +# include "windll/windll.h" +# endif +#endif + + +#ifdef TIMESTAMP + static int fn_is_dir OF((__GPRO)); +#endif + +#ifndef WINDLL + static ZCONST char Far CompFactorStr[] = "%c%d%%"; + static ZCONST char Far CompFactor100[] = "100%%"; + +#ifdef OS2_EAS + static ZCONST char Far HeadersS[] = + " Length EAs ACLs Date Time Name"; + static ZCONST char Far HeadersS1[] = + " -------- --- ---- ---- ---- ----"; +#else + static ZCONST char Far HeadersS[] = " Length Date Time Name"; + static ZCONST char Far HeadersS1[] = " -------- ---- ---- ----"; +#endif + + static ZCONST char Far HeadersL[] = + " Length Method Size Ratio Date Time CRC-32 Name"; + static ZCONST char Far HeadersL1[] = + "-------- ------ ------- ----- ---- ---- ------ ----"; + static ZCONST char Far *Headers[][2] = + { {HeadersS, HeadersS1}, {HeadersL, HeadersL1} }; + + static ZCONST char Far CaseConversion[] = + "%s (\"^\" ==> case\n%s conversion)\n"; + static ZCONST char Far LongHdrStats[] = + "%8lu %-7s%8lu %4s %02u-%02u-%02u %02u:%02u %08lx %c"; + static ZCONST char Far LongFileTrailer[] = + "-------- ------- --- \ + -------\n%8lu %8lu %4s %u file%s\n"; +#ifdef OS2_EAS + static ZCONST char Far ShortHdrStats[] = + "%9lu %6lu %6lu %02u-%02u-%02u %02u:%02u %c"; + static ZCONST char Far ShortFileTrailer[] = " -------- ----- ----- \ + -------\n%9lu %6lu %6lu %u file%s\n"; + static ZCONST char Far OS2ExtAttrTrailer[] = + "%ld file%s %ld bytes of OS/2 extended attributes attached.\n"; + static ZCONST char Far OS2ACLTrailer[] = + "%ld file%s %ld bytes of access control lists attached.\n"; +#else + static ZCONST char Far ShortHdrStats[] = + "%9lu %02u-%02u-%02u %02u:%02u %c"; + static ZCONST char Far ShortFileTrailer[] = + " -------- -------\n%9lu %u file%s\n"; +#endif /* ?OS2_EAS */ +#endif /* !WINDLL */ + + + + + +/*************************/ +/* Function list_files() */ +/*************************/ + +int list_files(__G) /* return PK-type error code */ + __GDEF +{ + int do_this_file=FALSE, cfactor, error, error_in_archive=PK_COOL; +#ifndef WINDLL + char sgn, cfactorstr[10]; + int longhdr=(uO.vflag>1); +#endif + int date_format; + unsigned j, methnum, members=0; +#ifdef USE_EF_UT_TIME + iztimes z_utime; + struct tm *t; +#endif + unsigned yr, mo, dy, hh, mm; + ulg csiz, tot_csize=0L, tot_ucsize=0L; +#ifdef OS2_EAS + ulg ea_size, tot_easize=0L, tot_eafiles=0L; + ulg acl_size, tot_aclsize=0L, tot_aclfiles=0L; +#endif + min_info info; + char methbuf[8]; + static ZCONST char dtype[]="NXFS"; /* see zi_short() */ + static ZCONST char Far method[NUM_METHODS+1][8] = + {"Stored", "Shrunk", "Reduce1", "Reduce2", "Reduce3", "Reduce4", + "Implode", "Token", "Defl:#", "EnhDefl", "ImplDCL", "Unk:###"}; + + + +/*--------------------------------------------------------------------------- + Unlike extract_or_test_files(), this routine confines itself to the cen- + tral directory. Thus its structure is somewhat simpler, since we can do + just a single loop through the entire directory, listing files as we go. + + So to start off, print the heading line and then begin main loop through + the central directory. The results will look vaguely like the following: + + Length Method Size Ratio Date Time CRC-32 Name ("^" ==> case +-------- ------ ------- ----- ---- ---- ------ ---- conversion) + 44004 Implode 13041 71% 11-02-89 19:34 8b4207f7 Makefile.UNIX + 3438 Shrunk 2209 36% 09-15-90 14:07 a2394fd8 ^dos-file.ext + 16717 Defl:X 5252 69% 11-03-97 06:40 1ce0f189 WHERE +-------- ------- --- ------- + 64159 20502 68% 3 files + ---------------------------------------------------------------------------*/ + + G.pInfo = &info; + date_format = DATE_FORMAT; + +#ifndef WINDLL + if (uO.qflag < 2) { + if (uO.L_flag) + Info(slide, 0, ((char *)slide, LoadFarString(CaseConversion), + LoadFarStringSmall(Headers[longhdr][0]), + LoadFarStringSmall2(Headers[longhdr][1]))); + else + Info(slide, 0, ((char *)slide, "%s\n%s\n", + LoadFarString(Headers[longhdr][0]), + LoadFarStringSmall(Headers[longhdr][1]))); + } +#endif /* !WINDLL */ + + for (j = 0; j++ < (unsigned)G.ecrec.total_entries_central_dir;) { + + if (readbuf(__G__ G.sig, 4) == 0) + return PK_EOF; + if (strncmp(G.sig, central_hdr_sig, 4)) { /* just to make sure */ + Info(slide, 0x401, ((char *)slide, LoadFarString(CentSigMsg), j)); + Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg))); + return PK_BADERR; /* sig not found */ + } + /* process_cdir_file_hdr() sets pInfo->hostnum, pInfo->lcflag, ...: */ + if ((error = process_cdir_file_hdr(__G)) != PK_COOL) + return error; /* only PK_EOF defined */ + + /* + * We could DISPLAY the filename instead of storing (and possibly trun- + * cating, in the case of a very long name) and printing it, but that + * has the disadvantage of not allowing case conversion--and it's nice + * to be able to see in the listing precisely how you have to type each + * filename in order for unzip to consider it a match. Speaking of + * which, if member names were specified on the command line, check in + * with match() to see if the current file is one of them, and make a + * note of it if it is. + */ + + if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) != + PK_COOL) /* ^--(uses pInfo->lcflag) */ + { + error_in_archive = error; + if (error > PK_WARN) /* fatal: can't continue */ + return error; + } + if (G.extra_field != (uch *)NULL) { + free(G.extra_field); + G.extra_field = (uch *)NULL; + } + if ((error = do_string(__G__ G.crec.extra_field_length, EXTRA_FIELD)) + != 0) + { + error_in_archive = error; + if (error > PK_WARN) /* fatal */ + return error; + } + if (!G.process_all_files) { /* check if specified on command line */ + unsigned i; + + do_this_file = FALSE; + for (i = 0; i < G.filespecs; i++) + if (match(G.filename, G.pfnames[i], uO.C_flag)) { + do_this_file = TRUE; + break; /* found match, so stop looping */ + } + if (do_this_file) { /* check if this is an excluded file */ + for (i = 0; i < G.xfilespecs; i++) + if (match(G.filename, G.pxnames[i], uO.C_flag)) { + do_this_file = FALSE; /* ^-- ignore case in match */ + break; + } + } + } + /* + * If current file was specified on command line, or if no names were + * specified, do the listing for this file. Otherwise, get rid of the + * file comment and go back for the next file. + */ + + if (G.process_all_files || do_this_file) { + +#ifdef OS2DLL + /* this is used by UzpFileTree() to allow easy processing of lists + * of zip directory contents */ + if (G.processExternally) { + if ((G.processExternally)(G.filename, &G.crec)) + break; + ++members; + } else { +#endif +#ifdef OS2_EAS + { + uch *ef_ptr = G.extra_field; + int ef_size, ef_len = G.crec.extra_field_length; + ea_size = acl_size = 0; + + while (ef_len >= EB_HEADSIZE) { + ef_size = makeword(&ef_ptr[EB_LEN]); + switch (makeword(&ef_ptr[EB_ID])) { + case EF_OS2: + ea_size = makelong(&ef_ptr[EB_HEADSIZE]); + break; + case EF_ACL: + acl_size = makelong(&ef_ptr[EB_HEADSIZE]); + break; + } + ef_ptr += (ef_size + EB_HEADSIZE); + ef_len -= (ef_size + EB_HEADSIZE); + } + } +#endif +#ifdef USE_EF_UT_TIME + if (G.extra_field && +#ifdef IZ_CHECK_TZ + G.tz_is_valid && +#endif + (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1, + G.crec.last_mod_dos_datetime, &z_utime, NULL) + & EB_UT_FL_MTIME)) + { + TIMET_TO_NATIVE(z_utime.mtime) /* NOP unless MSC 7.0, Mac */ + t = localtime(&(z_utime.mtime)); + } else + t = (struct tm *)NULL; + if (t != (struct tm *)NULL) { + mo = (unsigned)(t->tm_mon + 1); + dy = (unsigned)(t->tm_mday); + yr = (unsigned)(t->tm_year % 100); + hh = (unsigned)(t->tm_hour); + mm = (unsigned)(t->tm_min); + } else +#endif /* USE_EF_UT_TIME */ + { + yr = ((((unsigned)(G.crec.last_mod_dos_datetime >> 25) & 0x7f) + + 80) % (unsigned)100); + mo = ((unsigned)(G.crec.last_mod_dos_datetime >> 21) & 0x0f); + dy = ((unsigned)(G.crec.last_mod_dos_datetime >> 16) & 0x1f); + hh = (((unsigned)G.crec.last_mod_dos_datetime >> 11) & 0x1f); + mm = (((unsigned)G.crec.last_mod_dos_datetime >> 5) & 0x3f); + } + /* permute date so it displays according to nat'l convention + * ('methnum' is not yet set, it is used as temporary buffer) */ + switch (date_format) { + case DF_YMD: + methnum = (unsigned)mo; + mo = yr; yr = dy; dy = (ush)methnum; + break; + case DF_DMY: + methnum = (unsigned)mo; + mo = dy; dy = (ush)methnum; + } + + csiz = G.crec.csize; + if (G.crec.general_purpose_bit_flag & 1) + csiz -= 12; /* if encrypted, don't count encryption header */ + if ((cfactor = ratio(G.crec.ucsize, csiz)) < 0) { +#ifndef WINDLL + sgn = '-'; +#endif + cfactor = (-cfactor + 5) / 10; + } else { +#ifndef WINDLL + sgn = ' '; +#endif + cfactor = (cfactor + 5) / 10; + } + + methnum = MIN(G.crec.compression_method, NUM_METHODS); + zfstrcpy(methbuf, method[methnum]); + if (methnum == DEFLATED) { + methbuf[5] = dtype[(G.crec.general_purpose_bit_flag>>1) & 3]; + } else if (methnum >= NUM_METHODS) { + sprintf(&methbuf[4], "%03u", G.crec.compression_method); + } + +#if 0 /* GRR/Euro: add this? */ +#if defined(DOS_FLX_OS2_W32) || defined(UNIX) + for (p = G.filename; *p; ++p) + if (!isprint(*p)) + *p = '?'; /* change non-printable chars to '?' */ +#endif /* DOS_FLX_OS2_W32 || UNIX */ +#endif /* 0 */ + +#ifdef WINDLL + /* send data to application for formatting and printing */ + (*G.lpUserFunctions->SendApplicationMessage)(G.crec.ucsize, csiz, + (ush)cfactor, mo, dy, yr, hh, mm, + (char)(G.pInfo->lcflag ? '^' : ' '), + (LPSTR)fnfilter(G.filename, slide), (LPSTR)methbuf, G.crec.crc32, + (char)((G.crec.general_purpose_bit_flag & 1) ? 'E' : ' ')); +#else /* !WINDLL */ + if (cfactor == 100) + sprintf(cfactorstr, LoadFarString(CompFactor100)); + else + sprintf(cfactorstr, LoadFarString(CompFactorStr), sgn, cfactor); + if (longhdr) + Info(slide, 0, ((char *)slide, LoadFarString(LongHdrStats), + G.crec.ucsize, methbuf, csiz, cfactorstr, mo, dy, + yr, hh, mm, G.crec.crc32, (G.pInfo->lcflag? '^':' '))); + else +#ifdef OS2_EAS + Info(slide, 0, ((char *)slide, LoadFarString(ShortHdrStats), + G.crec.ucsize, ea_size, acl_size, + mo, dy, yr, hh, mm, (G.pInfo->lcflag? '^':' '))); +#else + Info(slide, 0, ((char *)slide, LoadFarString(ShortHdrStats), + G.crec.ucsize, + mo, dy, yr, hh, mm, (G.pInfo->lcflag? '^':' '))); +#endif + fnprint(__G); +#endif /* ?WINDLL */ + + if ((error = do_string(__G__ G.crec.file_comment_length, + QCOND? DISPL_8 : SKIP)) != 0) + { + error_in_archive = error; /* might be just warning */ + if (error > PK_WARN) /* fatal */ + return error; + } + tot_ucsize += G.crec.ucsize; + tot_csize += csiz; + ++members; +#ifdef OS2_EAS + if (ea_size) { + tot_easize += ea_size; + ++tot_eafiles; + } + if (acl_size) { + tot_aclsize += acl_size; + ++tot_aclfiles; + } +#endif +#ifdef OS2DLL + } /* end of "if (G.processExternally) {...} else {..." */ +#endif + } else { /* not listing this file */ + SKIP_(G.crec.file_comment_length) + } + } /* end for-loop (j: files in central directory) */ + +/*--------------------------------------------------------------------------- + Print footer line and totals (compressed size, uncompressed size, number + of members in zipfile). + ---------------------------------------------------------------------------*/ + + if (uO.qflag < 2 +#ifdef OS2DLL + && !G.processExternally +#endif + ) { + if ((cfactor = ratio(tot_ucsize, tot_csize)) < 0) { +#ifndef WINDLL + sgn = '-'; +#endif + cfactor = (-cfactor + 5) / 10; + } else { +#ifndef WINDLL + sgn = ' '; +#endif + cfactor = (cfactor + 5) / 10; + } +#ifdef WINDLL + /* pass the totals back to the calling application */ + G.lpUserFunctions->TotalSizeComp = tot_csize; + G.lpUserFunctions->TotalSize = tot_ucsize; + G.lpUserFunctions->CompFactor = cfactor; + G.lpUserFunctions->NumMembers = members; + +#else /* !WINDLL */ + if (cfactor == 100) + sprintf(cfactorstr, LoadFarString(CompFactor100)); + else + sprintf(cfactorstr, LoadFarString(CompFactorStr), sgn, cfactor); + if (longhdr) { + Info(slide, 0, ((char *)slide, LoadFarString(LongFileTrailer), + tot_ucsize, tot_csize, cfactorstr, members, members==1? "":"s")); +#ifdef OS2_EAS + if (tot_easize || tot_aclsize) + Info(slide, 0, ((char *)slide, "\n")); + if (tot_eafiles && tot_easize) + Info(slide, 0, ((char *)slide, LoadFarString(OS2ExtAttrTrailer), + tot_eafiles, tot_eafiles == 1? " has" : "s have a total of", + tot_easize)); + if (tot_aclfiles && tot_aclsize) + Info(slide, 0, ((char *)slide, LoadFarString(OS2ACLTrailer), + tot_aclfiles, tot_aclfiles == 1? " has" : "s have a total of", + tot_aclsize)); +#endif /* OS2_EAS */ + } else +#ifdef OS2_EAS + Info(slide, 0, ((char *)slide, LoadFarString(ShortFileTrailer), + tot_ucsize, tot_easize, tot_aclsize, members, members == 1? + "" : "s")); +#else + Info(slide, 0, ((char *)slide, LoadFarString(ShortFileTrailer), + tot_ucsize, members, members == 1? "" : "s")); +#endif /* OS2_EAS */ +#endif /* ?WINDLL */ + } + +/*--------------------------------------------------------------------------- + Double check that we're back at the end-of-central-directory record. + ---------------------------------------------------------------------------*/ + + if (readbuf(__G__ G.sig, 4) == 0) /* disk error? */ + return PK_EOF; + if (strncmp(G.sig, end_central_sig, 4)) { /* just to make sure again */ + Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg))); + error_in_archive = PK_WARN; /* didn't find sig */ + } + if (members == 0 && error_in_archive <= PK_WARN) + error_in_archive = PK_FIND; + + return error_in_archive; + +} /* end function list_files() */ + + + + + +#ifdef TIMESTAMP + +/************************/ +/* Function fn_is_dir() */ +/************************/ + +static int fn_is_dir(__G) /* returns TRUE if G.filename is directory */ + __GDEF +{ + extent fn_len = strlen(G.filename); + register char endc; + + return fn_len > 0 && + ((endc = G.filename[fn_len-1]) == '/' || + (G.pInfo->hostnum == FS_FAT_ && !strchr(G.filename, '/') && + endc == '\\')); +} + + + + + +/*****************************/ +/* Function get_time_stamp() */ +/*****************************/ + +int get_time_stamp(__G__ last_modtime, nmember) /* return PK-type error code */ + __GDEF + time_t *last_modtime; + unsigned *nmember; +{ + int do_this_file=FALSE, error, error_in_archive=PK_COOL; + unsigned j; +#ifdef USE_EF_UT_TIME + iztimes z_utime; +#endif + min_info info; + + +/*--------------------------------------------------------------------------- + Unlike extract_or_test_files() but like list_files(), this function works + on information in the central directory alone. Thus we have a single, + large loop through the entire directory, searching for the latest time + stamp. + ---------------------------------------------------------------------------*/ + + *last_modtime = 0L; /* assuming no zipfile data older than 1970 */ + *nmember = 0; + G.pInfo = &info; + + for (j = 0; j++ < (unsigned)G.ecrec.total_entries_central_dir;) { + + if (readbuf(__G__ G.sig, 4) == 0) + return PK_EOF; + if (strncmp(G.sig, central_hdr_sig, 4)) { /* just to make sure */ + Info(slide, 0x401, ((char *)slide, LoadFarString(CentSigMsg), j)); + Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg))); + return PK_BADERR; + } + /* process_cdir_file_hdr() sets pInfo->lcflag: */ + if ((error = process_cdir_file_hdr(__G)) != PK_COOL) + return error; /* only PK_EOF defined */ + if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) != PK_OK) + { /* ^-- (uses pInfo->lcflag) */ + error_in_archive = error; + if (error > PK_WARN) /* fatal: can't continue */ + return error; + } + if (G.extra_field != (uch *)NULL) { + free(G.extra_field); + G.extra_field = (uch *)NULL; + } + if ((error = do_string(__G__ G.crec.extra_field_length, EXTRA_FIELD)) + != 0) + { + error_in_archive = error; + if (error > PK_WARN) /* fatal */ + return error; + } + if (!G.process_all_files) { /* check if specified on command line */ + unsigned i; + + do_this_file = FALSE; + for (i = 0; i < G.filespecs; i++) + if (match(G.filename, G.pfnames[i], uO.C_flag)) { + do_this_file = TRUE; + break; /* found match, so stop looping */ + } + if (do_this_file) { /* check if this is an excluded file */ + for (i = 0; i < G.xfilespecs; i++) + if (match(G.filename, G.pxnames[i], uO.C_flag)) { + do_this_file = FALSE; /* ^-- ignore case in match */ + break; + } + } + } + + /* If current file was specified on command line, or if no names were + * specified, check the time for this file. Either way, get rid of the + * file comment and go back for the next file. + * Directory entries are always ignored, to stay compatible with both + * Zip and PKZIP. + */ + if ((G.process_all_files || do_this_file) && !fn_is_dir(__G)) { +#ifdef USE_EF_UT_TIME + if (G.extra_field && +#ifdef IZ_CHECK_TZ + G.tz_is_valid && +#endif + (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1, + G.crec.last_mod_dos_datetime, &z_utime, NULL) + & EB_UT_FL_MTIME)) + { + if (*last_modtime < z_utime.mtime) + *last_modtime = z_utime.mtime; + } else +#endif /* USE_EF_UT_TIME */ + { + time_t modtime = dos_to_unix_time(G.crec.last_mod_dos_datetime); + + if (*last_modtime < modtime) + *last_modtime = modtime; + } + ++*nmember; + } + SKIP_(G.crec.file_comment_length) + + } /* end for-loop (j: files in central directory) */ + +/*--------------------------------------------------------------------------- + Double check that we're back at the end-of-central-directory record. + ---------------------------------------------------------------------------*/ + + if (readbuf(__G__ G.sig, 4) == 0) + return PK_EOF; + if (strncmp(G.sig, end_central_sig, 4)) { /* just to make sure again */ + Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg))); + error_in_archive = PK_WARN; + } + if (*nmember == 0 && error_in_archive <= PK_WARN) + error_in_archive = PK_FIND; + + return error_in_archive; + +} /* end function get_time_stamp() */ + +#endif /* TIMESTAMP */ + + + + + +/********************/ +/* Function ratio() */ /* also used by ZipInfo routines */ +/********************/ + +int ratio(uc, c) + ulg uc, c; +{ + ulg denom; + + if (uc == 0) + return 0; + if (uc > 2000000L) { /* risk signed overflow if multiply numerator */ + denom = uc / 1000L; + return ((uc >= c) ? + (int) ((uc-c + (denom>>1)) / denom) : + -((int) ((c-uc + (denom>>1)) / denom))); + } else { /* ^^^^^^^^ rounding */ + denom = uc; + return ((uc >= c) ? + (int) ((1000L*(uc-c) + (denom>>1)) / denom) : + -((int) ((1000L*(c-uc) + (denom>>1)) / denom))); + } /* ^^^^^^^^ rounding */ +} + + + + + +/************************/ +/* Function fnprint() */ /* also used by ZipInfo routines */ +/************************/ + +void fnprint(__G) /* print filename (after filtering) and newline */ + __GDEF +{ + char *name = fnfilter(G.filename, slide); + + (*G.message)((zvoid *)&G, (uch *)name, (ulg)strlen(name), 0); + (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0); + +} /* end function fnprint() */ diff --git a/Build/source/extra/unzip/match.c b/Build/source/extra/unzip/match.c new file mode 100644 index 00000000000..34954742ee0 --- /dev/null +++ b/Build/source/extra/unzip/match.c @@ -0,0 +1,294 @@ +/*--------------------------------------------------------------------------- + + match.c + + The match() routine recursively compares a string to a "pattern" (regular + expression), returning TRUE if a match is found or FALSE if not. This + version is specifically for use with unzip.c: as did the previous match() + routines from SEA and J. Kercheval, it leaves the case (upper, lower, or + mixed) of the string alone, but converts any uppercase characters in the + pattern to lowercase if indicated by the global var pInfo->lcflag (which + is to say, string is assumed to have been converted to lowercase already, + if such was necessary). + + GRR: reversed order of text, pattern in matche() (now same as match()); + added ignore_case/ic flags, Case() macro. + + PaulK: replaced matche() with recmatch() from Zip, modified to have an + ignore_case argument; replaced test frame with simpler one. + + --------------------------------------------------------------------------- + + Copyright on recmatch() from Zip's util.c (although recmatch() was almost + certainly written by Mark Adler...ask me how I can tell :-) ): + + Copyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly, + Kai Uwe Rommel and Igor Mandrichenko. + + Permission is granted to any individual or institution to use, copy, + or redistribute this software so long as all of the original files are + included unmodified, that it is not sold for profit, and that this copy- + right notice is retained. + + --------------------------------------------------------------------------- + + Match the pattern (wildcard) against the string (fixed): + + match(string, pattern, ignore_case); + + returns TRUE if string matches pattern, FALSE otherwise. In the pattern: + + `*' matches any sequence of characters (zero or more) + `?' matches any single character + [SET] matches any character in the specified set, + [!SET] or [^SET] matches any character not in the specified set. + + A set is composed of characters or ranges; a range looks like ``character + hyphen character'' (as in 0-9 or A-Z). [0-9a-zA-Z_] is the minimal set of + characters allowed in the [..] pattern construct. Other characters are + allowed (i.e., 8-bit characters) if your system will support them. + + To suppress the special syntactic significance of any of ``[]*?!^-\'', in- + side or outside a [..] construct, and match the character exactly, precede + it with a ``\'' (backslash). + + Note that "*.*" and "*." are treated specially under MS-DOS if DOSWILD is + defined. See the DOSWILD section below for an explanation. Note also + that with VMSWILD defined, '%' is used instead of '?', and sets (ranges) + are delimited by () instead of []. + + ---------------------------------------------------------------------------*/ + + + +/* define ToLower() in here (for Unix, define ToLower to be macro (using + * isupper()); otherwise just use tolower() */ +#define UNZIP_INTERNAL +#include "unzip.h" + +#if 0 /* this is not useful until it matches Amiga names insensitively */ +#ifdef AMIGA /* some other platforms might also want to use this */ +# define ANSI_CHARSET /* MOVE INTO UNZIP.H EVENTUALLY */ +#endif +#endif /* 0 */ + +#ifdef ANSI_CHARSET +# ifdef ToLower +# undef ToLower +# endif + /* uppercase letters are values 41 thru 5A, C0 thru D6, and D8 thru DE */ +# define IsUpper(c) (c>=0xC0 ? c<=0xDE && c!=0xD7 : c>=0x41 && c<=0x5A) +# define ToLower(c) (IsUpper((uch) c) ? (unsigned) c | 0x20 : (unsigned) c) +#endif +#define Case(x) (ic? ToLower(x) : (x)) + +#ifdef VMSWILD +# define WILDCHAR '%' +# define BEG_RANGE '(' +# define END_RANGE ')' +#else +# define WILDCHAR '?' +# define BEG_RANGE '[' +# define END_RANGE ']' +#endif + +#if 0 /* GRR: add this to unzip.h someday... */ +#if !(defined(MSDOS) && defined(DOSWILD)) +#define match(s,p,ic) (recmatch((ZCONST uch *)p,(ZCONST uch *)s,ic) == 1) +int recmatch OF((ZCONST uch *pattern, ZCONST uch *string, int ignore_case)); +#endif +#endif /* 0 */ +static int recmatch OF((ZCONST uch *pattern, ZCONST uch *string, + int ignore_case)); + + + +/* match() is a shell to recmatch() to return only Boolean values. */ + +int match(string, pattern, ignore_case) + ZCONST char *string, *pattern; + int ignore_case; +{ +#if (defined(MSDOS) && defined(DOSWILD)) + char *dospattern; + int j = strlen(pattern); + +/*--------------------------------------------------------------------------- + Optional MS-DOS preprocessing section: compare last three chars of the + wildcard to "*.*" and translate to "*" if found; else compare the last + two characters to "*." and, if found, scan the non-wild string for dots. + If in the latter case a dot is found, return failure; else translate the + "*." to "*". In either case, continue with the normal (Unix-like) match + procedure after translation. (If not enough memory, default to normal + match.) This causes "a*.*" and "a*." to behave as MS-DOS users expect. + ---------------------------------------------------------------------------*/ + + if ((dospattern = (char *)malloc(j+1)) != NULL) { + strcpy(dospattern, pattern); + if (!strcmp(dospattern+j-3, "*.*")) { + dospattern[j-2] = '\0'; /* nuke the ".*" */ + } else if (!strcmp(dospattern+j-2, "*.")) { + char *p = strchr(string, '.'); + + if (p) { /* found a dot: match fails */ + free(dospattern); + return 0; + } + dospattern[j-1] = '\0'; /* nuke the end "." */ + } + j = recmatch((uch *)dospattern, (uch *)string, ignore_case); + free(dospattern); + return j == 1; + } else +#endif /* MSDOS && DOSWILD */ + return recmatch((uch *)pattern, (uch *)string, ignore_case) == 1; +} + + + +static int recmatch(p, s, ic) + ZCONST uch *p; /* sh pattern to match */ + ZCONST uch *s; /* string to which to match it */ + int ic; /* true for case insensitivity */ +/* Recursively compare the sh pattern p with the string s and return 1 if + * they match, and 0 or 2 if they don't or if there is a syntax error in the + * pattern. This routine recurses on itself no more deeply than the number + * of characters in the pattern. */ +{ + unsigned int c; /* pattern char or start of range in [-] loop */ + + /* Get first character, the pattern for new recmatch calls follows */ + c = *p++; + + /* If that was the end of the pattern, match if string empty too */ + if (c == 0) + return *s == 0; + + /* '?' (or '%') matches any character (but not an empty string) */ + if (c == WILDCHAR) + return *s ? recmatch(p, s + 1, ic) : 0; + + /* '*' matches any number of characters, including zero */ +#ifdef AMIGA + if (c == '#' && *p == '?') /* "#?" is Amiga-ese for "*" */ + c = '*', p++; +#endif /* AMIGA */ + if (c == '*') { + if (*p == 0) + return 1; + for (; *s; s++) + if ((c = recmatch(p, s, ic)) != 0) + return (int)c; + return 2; /* 2 means give up--match will return false */ + } + + /* Parse and process the list of characters and ranges in brackets */ + if (c == BEG_RANGE) { + int e; /* flag true if next char to be taken literally */ + ZCONST uch *q; /* pointer to end of [-] group */ + int r; /* flag true to match anything but the range */ + + if (*s == 0) /* need a character to match */ + return 0; + p += (r = (*p == '!' || *p == '^')); /* see if reverse */ + for (q = p, e = 0; *q; q++) /* find closing bracket */ + if (e) + e = 0; + else + if (*q == '\\') /* GRR: change to ^ for MS-DOS, OS/2? */ + e = 1; + else if (*q == END_RANGE) + break; + if (*q != END_RANGE) /* nothing matches if bad syntax */ + return 0; + for (c = 0, e = *p == '-'; p < q; p++) { /* go through the list */ + if (e == 0 && *p == '\\') /* set escape flag if \ */ + e = 1; + else if (e == 0 && *p == '-') /* set start of range if - */ + c = *(p-1); + else { + unsigned int cc = Case(*s); + + if (*(p+1) != '-') + for (c = c ? c : *p; c <= *p; c++) /* compare range */ + if ((unsigned)Case(c) == cc) /* typecast for MSC bug */ + return r ? 0 : recmatch(q + 1, s + 1, ic); + c = e = 0; /* clear range, escape flags */ + } + } + return r ? recmatch(q + 1, s + 1, ic) : 0; /* bracket match failed */ + } + + /* if escape ('\'), just compare next character */ + if (c == '\\' && (c = *p++) == 0) /* if \ at end, then syntax error */ + return 0; + + /* just a character--compare it */ +#ifdef QDOS + return QMatch(Case((uch)c), Case(*s)) ? recmatch(p, ++s, ic) : 0; +#else + return Case((uch)c) == Case(*s) ? recmatch(p, ++s, ic) : 0; +#endif + +} /* end function recmatch() */ + + + + + +int iswild(p) /* originally only used for stat()-bug workaround in */ + ZCONST char *p; /* VAX C, Turbo/Borland C, Watcom C, Atari MiNT libs; */ +{ /* now used in process_zipfiles() as well */ + for (; *p; ++p) + if (*p == '\\' && *(p+1)) + ++p; +#ifdef VMS + else if (*p == '%' || *p == '*') +#else /* !VMS */ +#ifdef AMIGA + else if (*p == '?' || *p == '*' || (*p=='#' && p[1]=='?') || *p == '[') +#else /* !AMIGA */ + else if (*p == '?' || *p == '*' || *p == '[') +#endif /* ?AMIGA */ +#endif /* ?VMS */ +#ifdef QDOS + return (int)p; +#else + return TRUE; +#endif + + return FALSE; + +} /* end function iswild() */ + + + + + +#ifdef TEST_MATCH + +#define put(s) {fputs(s,stdout); fflush(stdout);} + +void main() +{ + char pat[256], str[256]; + + for (;;) { + put("Pattern (return to exit): "); + gets(pat); + if (!pat[0]) + break; + for (;;) { + put("String (return for new pattern): "); + gets(str); + if (!str[0]) + break; + printf("Case sensitive: %s insensitive: %s\n", + match(str, pat, 0) ? "YES" : "NO", + match(str, pat, 1) ? "YES" : "NO"); + } + } + EXIT(0); +} + +#endif /* TEST_MATCH */ diff --git a/Build/source/extra/unzip/process.c b/Build/source/extra/unzip/process.c new file mode 100644 index 00000000000..2d8f179e843 --- /dev/null +++ b/Build/source/extra/unzip/process.c @@ -0,0 +1,1378 @@ +/*--------------------------------------------------------------------------- + + process.c + + This file contains the top-level routines for processing multiple zipfiles. + + Contains: process_zipfiles() + free_G_buffers() + do_seekable() + find_ecrec() + uz_end_central() + process_cdir_file_hdr() + get_cdir_ent() + process_local_file_hdr() + ef_scan_for_izux() + + ---------------------------------------------------------------------------*/ + + +#define UNZIP_INTERNAL +#include "unzip.h" +#ifdef WINDLL +# ifdef POCKET_UNZIP +# include "wince/intrface.h" +# else +# include "windll/windll.h" +# endif +#endif + +static int do_seekable OF((__GPRO__ int lastchance)); +static int find_ecrec OF((__GPRO__ long searchlen)); + +static ZCONST char Far CannotAllocateBuffers[] = + "error: cannot allocate unzip buffers\n"; + +#ifdef SFX + static ZCONST char Far CannotFindMyself[] = + "unzipsfx: cannot find myself! [%s]\n"; + +#else /* !SFX */ + /* process_zipfiles() strings */ +# if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME)) + static ZCONST char Far WarnInvalidTZ[] = + "Warning: TZ environment variable not found, cannot use UTC times!!\n"; +# endif + static ZCONST char Far FilesProcessOK[] = + "%d archive%s successfully processed.\n"; + static ZCONST char Far ArchiveWarning[] = + "%d archive%s had warnings but no fatal errors.\n"; + static ZCONST char Far ArchiveFatalError[] = + "%d archive%s had fatal errors.\n"; + static ZCONST char Far FileHadNoZipfileDir[] = + "%d file%s had no zipfile directory.\n"; + static ZCONST char Far ZipfileWasDir[] = "1 \"zipfile\" was a directory.\n"; + static ZCONST char Far ManyZipfilesWereDir[] = + "%d \"zipfiles\" were directories.\n"; + static ZCONST char Far NoZipfileFound[] = "No zipfiles found.\n"; + + /* do_seekable() strings */ +# ifdef UNIX + static ZCONST char Far CannotFindZipfileDirMsg[] = + "%s: cannot find zipfile directory in one of %s or\n\ + %s%s.zip, and cannot find %s, period.\n"; + static ZCONST char Far CannotFindEitherZipfile[] = + "%s: cannot find %s, %s.zip or %s.\n"; /* ", so there" removed 970918 */ +# else /* !UNIX */ +# ifndef AMIGA + static ZCONST char Far CannotFindWildcardMatch[] = + "%s: cannot find any matches for wildcard specification \"%s\".\n"; +# endif /* !AMIGA */ + static ZCONST char Far CannotFindZipfileDirMsg[] = + "%s: cannot find zipfile directory in %s,\n\ + %sand cannot find %s, period.\n"; + static ZCONST char Far CannotFindEitherZipfile[] = + "%s: cannot find either %s or %s.\n"; /* ", so there" removed 970918 */ +# endif /* ?UNIX */ + extern ZCONST char Far Zipnfo[]; /* in unzip.c */ +#ifndef WINDLL + static ZCONST char Far Unzip[] = "unzip"; +#else + static ZCONST char Far Unzip[] = "UnZip DLL"; +#endif + static ZCONST char Far MaybeExe[] = + "note: %s may be a plain executable, not an archive\n"; + static ZCONST char Far CentDirNotInZipMsg[] = "\n\ + [%s]:\n\ + Zipfile is disk %u of a multi-disk archive, and this is not the disk on\n\ + which the central zipfile directory begins (disk %u).\n"; + static ZCONST char Far EndCentDirBogus[] = + "\nwarning [%s]: end-of-central-directory record claims this\n\ + is disk %u but that the central directory starts on disk %u; this is a\n\ + contradiction. Attempting to process anyway.\n"; +# ifdef NO_MULTIPART + static ZCONST char Far NoMultiDiskArcSupport[] = + "\nerror [%s]: zipfile is part of multi-disk archive\n\ + (sorry, not yet supported).\n"; + static ZCONST char Far MaybePakBug[] = "warning [%s]:\ + zipfile claims to be 2nd disk of a 2-part archive;\n\ + attempting to process anyway. If no further errors occur, this archive\n\ + was probably created by PAK v2.51 or earlier. This bug was reported to\n\ + NoGate in March 1991 and was supposed to have been fixed by mid-1991; as\n\ + of mid-1992 it still hadn't been. (If further errors do occur, archive\n\ + was probably created by PKZIP 2.04c or later; UnZip does not yet support\n\ + multi-part archives.)\n"; +# else + static ZCONST char Far MaybePakBug[] = "warning [%s]:\ + zipfile claims to be last disk of a multi-part archive;\n\ + attempting to process anyway, assuming all parts have been concatenated\n\ + together in order. Expect \"errors\" and warnings...true multi-part support\ +\n doesn't exist yet (coming soon).\n"; +# endif + static ZCONST char Far ExtraBytesAtStart[] = + "warning [%s]: %ld extra byte%s at beginning or within zipfile\n\ + (attempting to process anyway)\n"; +#endif /* ?SFX */ + +static ZCONST char Far MissingBytes[] = + "error [%s]: missing %ld bytes in zipfile\n\ + (attempting to process anyway)\n"; +static ZCONST char Far NullCentDirOffset[] = + "error [%s]: NULL central directory offset\n\ + (attempting to process anyway)\n"; +static ZCONST char Far ZipfileEmpty[] = "warning [%s]: zipfile is empty\n"; +static ZCONST char Far CentDirStartNotFound[] = + "error [%s]: start of central directory not found;\n\ + zipfile corrupt.\n%s"; +#ifndef SFX + static ZCONST char Far CentDirTooLong[] = + "error [%s]: reported length of central directory is\n\ + %ld bytes too long (Atari STZip zipfile? J.H.Holm ZIPSPLIT 1.1\n\ + zipfile?). Compensating...\n"; + static ZCONST char Far CentDirEndSigNotFound[] = "\ + End-of-central-directory signature not found. Either this file is not\n\ + a zipfile, or it constitutes one disk of a multi-part archive. In the\n\ + latter case the central directory and zipfile comment will be found on\n\ + the last disk(s) of this archive.\n"; +#else /* SFX */ + static ZCONST char Far CentDirEndSigNotFound[] = + " End-of-central-directory signature not found.\n"; +#endif /* ?SFX */ +static ZCONST char Far ZipfileCommTrunc1[] = + "\ncaution: zipfile comment truncated\n"; + + + + +/*******************************/ +/* Function process_zipfiles() */ +/*******************************/ + +int process_zipfiles(__G) /* return PK-type error code */ + __GDEF +{ +#ifndef SFX + char *lastzipfn = (char *)NULL; + int NumWinFiles, NumLoseFiles, NumWarnFiles; + int NumMissDirs, NumMissFiles; +#endif + int error=0, error_in_archive=0; + + +/*--------------------------------------------------------------------------- + Start by allocating buffers and (re)constructing the various PK signature + strings. + ---------------------------------------------------------------------------*/ + + G.inbuf = (uch *)malloc(INBUFSIZ + 4); /* 4 extra for hold[] (below) */ + G.outbuf = (uch *)malloc(OUTBUFSIZ + 1); /* 1 extra for string term. */ + + if ((G.inbuf == (uch *)NULL) || (G.outbuf == (uch *)NULL)) { + Info(slide, 0x401, ((char *)slide, + LoadFarString(CannotAllocateBuffers))); + return(PK_MEM); + } + G.hold = G.inbuf + INBUFSIZ; /* to check for boundary-spanning sigs */ +#ifndef VMS /* VMS uses its own buffer scheme for textmode flush(). */ +#ifdef SMALL_MEM + G.outbuf2 = G.outbuf+RAWBUFSIZ; /* never changes */ +#endif +#endif /* !VMS */ + +#if 0 /* CRC_32_TAB has been NULLified by CONSTRUCTGLOBALS !!!! */ + /* allocate the CRC table only later when we know we have a zipfile */ + CRC_32_TAB = NULL; +#endif /* 0 */ + + /* finish up initialization of magic signature strings */ + local_hdr_sig[0] /* = extd_local_sig[0] */ = 0x50; /* ASCII 'P', */ + central_hdr_sig[0] = end_central_sig[0] = 0x50; /* not EBCDIC */ + + local_hdr_sig[1] /* = extd_local_sig[1] */ = 0x4B; /* ASCII 'K', */ + central_hdr_sig[1] = end_central_sig[1] = 0x4B; /* not EBCDIC */ + +/*--------------------------------------------------------------------------- + Make sure timezone info is set correctly; localtime() returns GMT on + some OSes (e.g., Solaris 2.x) if this isn't done first. The ifdefs were + initially copied from dos_to_unix_time() in fileio.c. probably, they are + still too strict; any listed OS that supplies tzset(), regardless of + whether the function does anything, should be removed from the ifdefs. + ---------------------------------------------------------------------------*/ + +#if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME)) +# ifndef VALID_TIMEZONE +# define VALID_TIMEZONE(tmp) \ + (((tmp = getenv("TZ")) != NULL) && (*tmp != '\0')) +# endif + { + char *p; + G.tz_is_valid = VALID_TIMEZONE(p); +# ifndef SFX + if (!G.tz_is_valid) { + Info(slide, 0x401, ((char *)slide, LoadFarString(WarnInvalidTZ))); + error_in_archive = error = PK_WARN; + } +# endif /* !SFX */ + } +#endif /* IZ_CHECK_TZ && USE_EF_UT_TIME */ + +/* For systems that do not have tzset() but supply this function using another + name (_tzset() or something similar), an appropiate "#define tzset ..." + should be added to the system specifc configuration section. */ +#if (!defined(T20_VMS) && !defined(MACOS) && !defined(RISCOS) && !defined(QDOS)) +#if (!defined(BSD) && !defined(MTS) && !defined(CMS_MVS) && !defined(TANDEM)) + tzset(); +#endif +#endif + +/*--------------------------------------------------------------------------- + Match (possible) wildcard zipfile specification with existing files and + attempt to process each. If no hits, try again after appending ".zip" + suffix. If still no luck, give up. + ---------------------------------------------------------------------------*/ + +#ifdef SFX + if ((error = do_seekable(__G__ 0)) == PK_NOZIP) { +#ifdef EXE_EXTENSION + int len=strlen(G.argv0); + + /* append .exe if appropriate; also .sfx? */ + if ( (G.zipfn = (char *)malloc(len+sizeof(EXE_EXTENSION))) != + (char *)NULL ) { + strcpy(G.zipfn, G.argv0); + strcpy(G.zipfn+len, EXE_EXTENSION); + error = do_seekable(__G__ 0); + free(G.zipfn); + G.zipfn = G.argv0; /* for "cannot find myself" message only */ + } +#endif /* EXE_EXTENSION */ +#ifdef WIN32 + G.zipfn = G.argv0; /* for "cannot find myself" message only */ +#endif + } + if (error) { + if (error == IZ_DIR) + error_in_archive = PK_NOZIP; + else + error_in_archive = error; + if (error == PK_NOZIP) + Info(slide, 1, ((char *)slide, LoadFarString(CannotFindMyself), + G.zipfn)); + } + +#else /* !SFX */ + NumWinFiles = NumLoseFiles = NumWarnFiles = 0; + NumMissDirs = NumMissFiles = 0; + + while ((G.zipfn = do_wild(__G__ G.wildzipfn)) != (char *)NULL) { + Trace((stderr, "do_wild( %s ) returns %s\n", G.wildzipfn, G.zipfn)); + + lastzipfn = G.zipfn; + + /* print a blank line between the output of different zipfiles */ + if (!uO.qflag && error != PK_NOZIP && error != IZ_DIR +#ifdef TIMESTAMP + && (!uO.T_flag || uO.zipinfo_mode) +#endif + && (NumWinFiles+NumLoseFiles+NumWarnFiles+NumMissFiles) > 0) + (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0); + + if ((error = do_seekable(__G__ 0)) == PK_WARN) + ++NumWarnFiles; + else if (error == IZ_DIR) + ++NumMissDirs; + else if (error == PK_NOZIP) + ++NumMissFiles; + else if (error) + ++NumLoseFiles; + else + ++NumWinFiles; + + if (error != IZ_DIR && error > error_in_archive) + error_in_archive = error; + Trace((stderr, "do_seekable(0) returns %d\n", error)); +#ifdef WINDLL + if (error == IZ_CTRLC) { + free_G_buffers(__G); + return error; + } +#endif + + } /* end while-loop (wildcard zipfiles) */ + + if ((NumWinFiles + NumWarnFiles + NumLoseFiles) == 0 && + (NumMissDirs + NumMissFiles) == 1 && lastzipfn != (char *)NULL) + { + NumMissDirs = NumMissFiles = 0; + if (error_in_archive == PK_NOZIP) + error_in_archive = PK_COOL; + +#if (!defined(UNIX) && !defined(AMIGA)) /* filenames with wildcard characters */ + if (iswild(G.wildzipfn)) + Info(slide, 0x401, ((char *)slide, + LoadFarString(CannotFindWildcardMatch), uO.zipinfo_mode? + LoadFarStringSmall(Zipnfo) : LoadFarStringSmall(Unzip), + G.wildzipfn)); + else +#endif + { + char *p = lastzipfn + strlen(lastzipfn); + + G.zipfn = lastzipfn; + strcpy(p, ZSUFX); + +#if defined(UNIX) || defined(QDOS) + /* only Unix has case-sensitive filesystems */ + /* Well FlexOS (sometimes) also has them, but support is per media */ + /* and a pig to code for, so treat as case insensitive for now */ + /* we do this under QDOS to check for .zip as well as _zip */ + if ((error = do_seekable(__G__ 0)) == PK_NOZIP || error == IZ_DIR) { + if (error == IZ_DIR) + ++NumMissDirs; + strcpy(p, ALT_ZSUFX); + error = do_seekable(__G__ 1); + } +#else + error = do_seekable(__G__ 1); +#endif + if (error == PK_WARN) /* GRR: make this a switch/case stmt ... */ + ++NumWarnFiles; + else if (error == IZ_DIR) + ++NumMissDirs; + else if (error == PK_NOZIP) + /* increment again => bug: "1 file had no zipfile directory." */ + /* ++NumMissFiles */ ; + else if (error) + ++NumLoseFiles; + else + ++NumWinFiles; + + if (error > error_in_archive) + error_in_archive = error; + Trace((stderr, "do_seekable(1) returns %d\n", error)); +#ifdef WINDLL + if (error == IZ_CTRLC) { + free_G_buffers(__G); + return error; + } +#endif + } + } +#endif /* ?SFX */ + +/*--------------------------------------------------------------------------- + Print summary of all zipfiles, assuming zipfile spec was a wildcard (no + need for a summary if just one zipfile). + ---------------------------------------------------------------------------*/ + +#ifndef SFX + if (iswild(G.wildzipfn) && uO.qflag < 3 +#ifdef TIMESTAMP + && !(uO.T_flag && uO.qflag && !uO.zipinfo_mode) +#endif + ) + { + if ((NumMissFiles + NumLoseFiles + NumWarnFiles > 0 || NumWinFiles != 1) +#ifdef TIMESTAMP + && !(uO.T_flag && !uO.zipinfo_mode) +#endif + && !(uO.tflag && uO.qflag > 1)) + (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0x401); + if ((NumWinFiles > 1) || (NumWinFiles == 1 && + NumMissDirs + NumMissFiles + NumLoseFiles + NumWarnFiles > 0)) + Info(slide, 0x401, ((char *)slide, LoadFarString(FilesProcessOK), + NumWinFiles, (NumWinFiles == 1)? " was" : "s were")); + if (NumWarnFiles > 0) + Info(slide, 0x401, ((char *)slide, LoadFarString(ArchiveWarning), + NumWarnFiles, (NumWarnFiles == 1)? "" : "s")); + if (NumLoseFiles > 0) + Info(slide, 0x401, ((char *)slide, LoadFarString(ArchiveFatalError), + NumLoseFiles, (NumLoseFiles == 1)? "" : "s")); + if (NumMissFiles > 0) + Info(slide, 0x401, ((char *)slide, + LoadFarString(FileHadNoZipfileDir), NumMissFiles, + (NumMissFiles == 1)? "" : "s")); + if (NumMissDirs == 1) + Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileWasDir))); + else if (NumMissDirs > 0) + Info(slide, 0x401, ((char *)slide, + LoadFarString(ManyZipfilesWereDir), NumMissDirs)); + if (NumWinFiles + NumLoseFiles + NumWarnFiles == 0) + Info(slide, 0x401, ((char *)slide, LoadFarString(NoZipfileFound))); + } +#endif /* !SFX */ + + /* free allocated memory */ + free_G_buffers(__G); + + return error_in_archive; + +} /* end function process_zipfiles() */ + + + + + +/*****************************/ +/* Function free_G_buffers() */ +/*****************************/ + +void free_G_buffers(__G) /* releases all memory allocated in global vars */ + __GDEF +{ + inflate_free(__G); + checkdir(__G__ (char *)NULL, END); + +#ifdef DYNALLOC_CRCTAB + if (CRC_32_TAB) { + free_crc_table(); + CRC_32_TAB = NULL; + } +#endif + + if (G.key != (char *)NULL) { + free(G.key); + G.key = (char *)NULL; + } + +#if (!defined(VMS) && !defined(SMALL_MEM)) + /* VMS uses its own buffer scheme for textmode flush() */ + if (G.outbuf2) { + free(G.outbuf2); /* malloc'd ONLY if unshrink and -a */ + G.outbuf2 = (uch *)NULL; + } +#endif + + if (G.outbuf) + free(G.outbuf); + if (G.inbuf) + free(G.inbuf); + G.inbuf = G.outbuf = (uch *)NULL; + +#ifdef MALLOC_WORK + if (G.area.Slide) { + free(G.area.Slide); + G.area.Slide = (uch *)NULL; + } +#endif + +} /* end function free_G_buffers() */ + + + + + +/**************************/ +/* Function do_seekable() */ +/**************************/ + +static int do_seekable(__G__ lastchance) /* return PK-type error code */ + __GDEF + int lastchance; +{ +#ifndef SFX + /* static int no_ecrec = FALSE; SKM: moved to globals.h */ + int maybe_exe=FALSE; + int too_weird_to_continue=FALSE; +#ifdef TIMESTAMP + time_t uxstamp; + unsigned nmember = 0; +#endif +#endif + int error=0, error_in_archive; + + +/*--------------------------------------------------------------------------- + Open the zipfile for reading in BINARY mode to prevent CR/LF translation, + which would corrupt the bit streams. + ---------------------------------------------------------------------------*/ + + if (SSTAT(G.zipfn, &G.statbuf) || + (error = S_ISDIR(G.statbuf.st_mode)) != 0) + { +#ifndef SFX + if (lastchance) { +#if defined(UNIX) || defined(QDOS) + if (G.no_ecrec) + Info(slide, 1, ((char *)slide, + LoadFarString(CannotFindZipfileDirMsg), uO.zipinfo_mode? + LoadFarStringSmall(Zipnfo) : LoadFarStringSmall(Unzip), + G.wildzipfn, uO.zipinfo_mode? " " : "", G.wildzipfn, + G.zipfn)); + else + Info(slide, 1, ((char *)slide, + LoadFarString(CannotFindEitherZipfile), uO.zipinfo_mode? + LoadFarStringSmall(Zipnfo) : LoadFarStringSmall(Unzip), + G.wildzipfn, G.wildzipfn, G.zipfn)); +#else /* !UNIX */ + if (G.no_ecrec) + Info(slide, 0x401, ((char *)slide, + LoadFarString(CannotFindZipfileDirMsg), uO.zipinfo_mode? + LoadFarStringSmall(Zipnfo) : LoadFarStringSmall(Unzip), + G.wildzipfn, uO.zipinfo_mode? " " : "", G.zipfn)); + else + Info(slide, 0x401, ((char *)slide, + LoadFarString(CannotFindEitherZipfile), uO.zipinfo_mode? + LoadFarStringSmall(Zipnfo) : LoadFarStringSmall(Unzip), + G.wildzipfn, G.zipfn)); +#endif /* ?UNIX */ + } +#endif /* !SFX */ + return error? IZ_DIR : PK_NOZIP; + } + G.ziplen = G.statbuf.st_size; + +#ifndef SFX +#if defined(UNIX) || defined(DOS_OS2_W32) + if (G.statbuf.st_mode & S_IEXEC) /* no extension on Unix exes: might */ + maybe_exe = TRUE; /* find unzip, not unzip.zip; etc. */ +#endif +#endif /* !SFX */ + +#ifdef VMS + if (check_format(__G)) /* check for variable-length format */ + return PK_ERR; +#endif + + if (open_input_file(__G)) /* this should never happen, given */ + return PK_NOZIP; /* the stat() test above, but... */ + +/*--------------------------------------------------------------------------- + Find and process the end-of-central-directory header. UnZip need only + check last 65557 bytes of zipfile: comment may be up to 65535, end-of- + central-directory record is 18 bytes, and signature itself is 4 bytes; + add some to allow for appended garbage. Since ZipInfo is often used as + a debugging tool, search the whole zipfile if zipinfo_mode is true. + ---------------------------------------------------------------------------*/ + + /* initialize the CRC table pointer (once) */ + if (CRC_32_TAB == NULL) { + if ((CRC_32_TAB = get_crc_table()) == NULL) + return PK_MEM; + } + +#if (!defined(SFX) || defined(SFX_EXDIR)) + /* check out if specified extraction root directory exists */ + if (uO.exdir != (char *)NULL && G.extract_flag) { + G.create_dirs = !uO.fflag; + if ((error = checkdir(__G__ uO.exdir, ROOT)) > 2) + return error; /* out of memory, or file in way */ + } +#endif /* !SFX || SFX_EXDIR */ + + G.cur_zipfile_bufstart = 0; + G.inptr = G.inbuf; + +#if (!defined(WINDLL) && !defined(SFX)) +#ifdef TIMESTAMP + if (!uO.zipinfo_mode && !uO.qflag && !uO.T_flag) +#else + if (!uO.zipinfo_mode && !uO.qflag) +#endif +#ifdef WIN32 /* Win32 console may require codepage conversion for G.zipfn */ + Info(slide, 0, ((char *)slide, "Archive: %s\n", FnFilter1(G.zipfn))); +#else + Info(slide, 0, ((char *)slide, "Archive: %s\n", G.zipfn)); +#endif +#endif /* !WINDLL && !SFX */ + + if (( +#ifndef NO_ZIPINFO + uO.zipinfo_mode && + ((error_in_archive = find_ecrec(__G__ G.ziplen)) != 0 || + (error_in_archive = zi_end_central(__G)) > PK_WARN)) + || (!uO.zipinfo_mode && +#endif + ((error_in_archive = find_ecrec(__G__ MIN(G.ziplen,66000L))) != 0 || + (error_in_archive = uz_end_central(__G)) > PK_WARN))) + { + CLOSE_INFILE(); + +#ifdef SFX + ++lastchance; /* avoid picky compiler warnings */ + return error_in_archive; +#else + if (maybe_exe) + Info(slide, 0x401, ((char *)slide, LoadFarString(MaybeExe), + G.zipfn)); + if (lastchance) + return error_in_archive; + else { + G.no_ecrec = TRUE; /* assume we found wrong file: e.g., */ + return PK_NOZIP; /* unzip instead of unzip.zip */ + } +#endif /* ?SFX */ + } + + if ((uO.zflag > 0) && !uO.zipinfo_mode) { /* unzip: zflag = comment ONLY */ + CLOSE_INFILE(); + return error_in_archive; + } + +/*--------------------------------------------------------------------------- + Test the end-of-central-directory info for incompatibilities (multi-disk + archives) or inconsistencies (missing or extra bytes in zipfile). + ---------------------------------------------------------------------------*/ + +#ifdef NO_MULTIPART + error = !uO.zipinfo_mode && (G.ecrec.number_this_disk == 1) && + (G.ecrec.num_disk_start_cdir == 1); +#else + error = !uO.zipinfo_mode && (G.ecrec.number_this_disk != 0); +#endif + +#ifndef SFX + if (uO.zipinfo_mode && + G.ecrec.number_this_disk != G.ecrec.num_disk_start_cdir) + { + if (G.ecrec.number_this_disk > G.ecrec.num_disk_start_cdir) { + Info(slide, 0x401, ((char *)slide, + LoadFarString(CentDirNotInZipMsg), G.zipfn, + G.ecrec.number_this_disk, G.ecrec.num_disk_start_cdir)); + error_in_archive = PK_FIND; + too_weird_to_continue = TRUE; + } else { + Info(slide, 0x401, ((char *)slide, + LoadFarString(EndCentDirBogus), G.zipfn, + G.ecrec.number_this_disk, G.ecrec.num_disk_start_cdir)); + error_in_archive = PK_WARN; + } +#ifdef NO_MULTIPART /* concatenation of multiple parts works in some cases */ + } else if (!uO.zipinfo_mode && !error && G.ecrec.number_this_disk != 0) { + Info(slide, 0x401, ((char *)slide, LoadFarString(NoMultiDiskArcSupport), + G.zipfn)); + error_in_archive = PK_FIND; + too_weird_to_continue = TRUE; +#endif + } + + if (!too_weird_to_continue) { /* (relatively) normal zipfile: go for it */ + if (error) { + Info(slide, 0x401, ((char *)slide, LoadFarString(MaybePakBug), + G.zipfn)); + error_in_archive = PK_WARN; + } +#endif /* !SFX */ + if ((G.extra_bytes = G.real_ecrec_offset-G.expect_ecrec_offset) < + (LONGINT)0) + { + Info(slide, 0x401, ((char *)slide, LoadFarString(MissingBytes), + G.zipfn, (long)(-G.extra_bytes))); + error_in_archive = PK_ERR; + } else if (G.extra_bytes > 0) { + if ((G.ecrec.offset_start_central_directory == 0) && + (G.ecrec.size_central_directory != 0)) /* zip 1.5 -go bug */ + { + Info(slide, 0x401, ((char *)slide, + LoadFarString(NullCentDirOffset), G.zipfn)); + G.ecrec.offset_start_central_directory = G.extra_bytes; + G.extra_bytes = 0; + error_in_archive = PK_ERR; + } +#ifndef SFX + else { + Info(slide, 0x401, ((char *)slide, + LoadFarString(ExtraBytesAtStart), G.zipfn, + (long)G.extra_bytes, (G.extra_bytes == 1)? "":"s")); + error_in_archive = PK_WARN; + } +#endif /* !SFX */ + } + + /*----------------------------------------------------------------------- + Check for empty zipfile and exit now if so. + -----------------------------------------------------------------------*/ + + if (G.expect_ecrec_offset==0L && G.ecrec.size_central_directory==0) { + if (uO.zipinfo_mode) + Info(slide, 0, ((char *)slide, "%sEmpty zipfile.\n", + uO.lflag>9? "\n " : "")); + else + Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileEmpty), + G.zipfn)); + CLOSE_INFILE(); + return (error_in_archive > PK_WARN)? error_in_archive : PK_WARN; + } + + /*----------------------------------------------------------------------- + Compensate for missing or extra bytes, and seek to where the start + of central directory should be. If header not found, uncompensate + and try again (necessary for at least some Atari archives created + with STZip, as well as archives created by J.H. Holm's ZIPSPLIT 1.1). + -----------------------------------------------------------------------*/ + + ZLSEEK( G.ecrec.offset_start_central_directory ) +#ifdef OLD_SEEK_TEST + if (readbuf(G.sig, 4) == 0) { + CLOSE_INFILE(); + return PK_ERR; /* file may be locked, or possibly disk error(?) */ + } + if (strncmp(G.sig, central_hdr_sig, 4)) +#else + if ((readbuf(__G__ G.sig, 4) == 0) || + strncmp(G.sig, central_hdr_sig, 4)) +#endif + { +#ifndef SFX + long tmp = G.extra_bytes; +#endif + + G.extra_bytes = 0; + ZLSEEK( G.ecrec.offset_start_central_directory ) + if ((readbuf(__G__ G.sig, 4) == 0) || + strncmp(G.sig, central_hdr_sig, 4)) + { + Info(slide, 0x401, ((char *)slide, + LoadFarString(CentDirStartNotFound), G.zipfn, + LoadFarStringSmall(ReportMsg))); + CLOSE_INFILE(); + return PK_BADERR; + } +#ifndef SFX + Info(slide, 0x401, ((char *)slide, LoadFarString(CentDirTooLong), + G.zipfn, -tmp)); +#endif + error_in_archive = PK_ERR; + } + + /*----------------------------------------------------------------------- + Seek to the start of the central directory one last time, since we + have just read the first entry's signature bytes; then list, extract + or test member files as instructed, and close the zipfile. + -----------------------------------------------------------------------*/ + + Trace((stderr, "about to extract/list files (error = %d)\n", + error_in_archive)); + + ZLSEEK( G.ecrec.offset_start_central_directory ) + +#ifdef DLL + /* G.fValidate is used only to look at an archive to see if + it appears to be a valid archive. There is no interest + in what the archive contains, nor in validating that the + entries in the archive are in good condition. This is + currently used only in the Windows DLLs for purposes of + checking archives within an archive to determine whether + or not to display the inner archives. + */ + if (!G.fValidate) +#endif + { +#ifndef NO_ZIPINFO + if (uO.zipinfo_mode) + error = zipinfo(__G); /* ZIPINFO 'EM */ + else +#endif +#ifndef SFX +#ifdef TIMESTAMP + if (uO.T_flag) + error = get_time_stamp(__G__ &uxstamp, &nmember); + else +#endif + if (uO.vflag && !uO.tflag && !uO.cflag) + error = list_files(__G); /* LIST 'EM */ + else +#endif /* !SFX */ + error = extract_or_test_files(__G); /* EXTRACT OR TEST 'EM */ + + Trace((stderr, "done with extract/list files (error = %d)\n", + error)); + } + + if (error > error_in_archive) /* don't overwrite stronger error */ + error_in_archive = error; /* with (for example) a warning */ +#ifndef SFX + } /* end if (!too_weird_to_continue) */ +#endif + + CLOSE_INFILE(); + +#ifdef TIMESTAMP + if (uO.T_flag && !uO.zipinfo_mode && (nmember > 0)) { +# ifdef WIN32 + if (stamp_file(__G__ G.zipfn, uxstamp)) { /* TIME-STAMP 'EM */ +# else + if (stamp_file(G.zipfn, uxstamp)) { /* TIME-STAMP 'EM */ +# endif + Info(slide, 0x201, ((char *)slide, + "warning: cannot set time for %s\n", G.zipfn)); + if (error_in_archive < PK_WARN) + error_in_archive = PK_WARN; + } + } +#endif + return error_in_archive; + +} /* end function do_seekable() */ + + + + + +/*************************/ +/* Function find_ecrec() */ +/*************************/ + +static int find_ecrec(__G__ searchlen) /* return PK-class error */ + __GDEF + long searchlen; +{ + int i, numblks, found=FALSE; + LONGINT tail_len; + ec_byte_rec byterec; + + +/*--------------------------------------------------------------------------- + Treat case of short zipfile separately. + ---------------------------------------------------------------------------*/ + + if (G.ziplen <= INBUFSIZ) { + lseek(G.zipfd, 0L, SEEK_SET); + if ((G.incnt = read(G.zipfd,(char *)G.inbuf,(unsigned int)G.ziplen)) + == (int)G.ziplen) + + /* 'P' must be at least 22 bytes from end of zipfile */ + for (G.inptr = G.inbuf+(int)G.ziplen-22; G.inptr >= G.inbuf; + --G.inptr) + if ((native(*G.inptr) == 'P') && + !strncmp((char *)G.inptr, end_central_sig, 4)) { + G.incnt -= (int)(G.inptr - G.inbuf); + found = TRUE; + break; + } + +/*--------------------------------------------------------------------------- + Zipfile is longer than INBUFSIZ: may need to loop. Start with short + block at end of zipfile (if not TOO short). + ---------------------------------------------------------------------------*/ + + } else { + if ((tail_len = G.ziplen % INBUFSIZ) > ECREC_SIZE) { +#ifdef USE_STRM_INPUT + fseek((FILE *)G.zipfd, G.ziplen-tail_len, SEEK_SET); + G.cur_zipfile_bufstart = ftell((FILE *)G.zipfd); +#else /* !USE_STRM_INPUT */ + G.cur_zipfile_bufstart = lseek(G.zipfd, G.ziplen-tail_len, + SEEK_SET); +#endif /* ?USE_STRM_INPUT */ + if ((G.incnt = read(G.zipfd, (char *)G.inbuf, + (unsigned int)tail_len)) != (int)tail_len) + goto fail; /* it's expedient... */ + + /* 'P' must be at least 22 bytes from end of zipfile */ + for (G.inptr = G.inbuf+(int)tail_len-22; G.inptr >= G.inbuf; + --G.inptr) + if ((native(*G.inptr) == 'P') && + !strncmp((char *)G.inptr, end_central_sig, 4)) { + G.incnt -= (int)(G.inptr - G.inbuf); + found = TRUE; + break; + } + /* sig may span block boundary: */ + strncpy((char *)G.hold, (char *)G.inbuf, 3); + } else + G.cur_zipfile_bufstart = G.ziplen - tail_len; + + /*----------------------------------------------------------------------- + Loop through blocks of zipfile data, starting at the end and going + toward the beginning. In general, need not check whole zipfile for + signature, but may want to do so if testing. + -----------------------------------------------------------------------*/ + + numblks = (int)((searchlen - tail_len + (INBUFSIZ-1)) / INBUFSIZ); + /* ==amount= ==done== ==rounding== =blksiz= */ + + for (i = 1; !found && (i <= numblks); ++i) { + G.cur_zipfile_bufstart -= INBUFSIZ; + lseek(G.zipfd, G.cur_zipfile_bufstart, SEEK_SET); + if ((G.incnt = read(G.zipfd,(char *)G.inbuf,INBUFSIZ)) + != INBUFSIZ) + break; /* fall through and fail */ + + for (G.inptr = G.inbuf+INBUFSIZ-1; G.inptr >= G.inbuf; + --G.inptr) + if ((native(*G.inptr) == 'P') && + !strncmp((char *)G.inptr, end_central_sig, 4)) { + G.incnt -= (int)(G.inptr - G.inbuf); + found = TRUE; + break; + } + /* sig may span block boundary: */ + strncpy((char *)G.hold, (char *)G.inbuf, 3); + } + } /* end if (ziplen > INBUFSIZ) */ + +/*--------------------------------------------------------------------------- + Searched through whole region where signature should be without finding + it. Print informational message and die a horrible death. + ---------------------------------------------------------------------------*/ + +fail: + if (!found) { + if (uO.qflag || uO.zipinfo_mode) + Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); + Info(slide, 0x401, ((char *)slide, + LoadFarString(CentDirEndSigNotFound))); + return PK_ERR; /* failed */ + } + +/*--------------------------------------------------------------------------- + Found the signature, so get the end-central data before returning. Do + any necessary machine-type conversions (byte ordering, structure padding + compensation) by reading data into character array and copying to struct. + ---------------------------------------------------------------------------*/ + + G.real_ecrec_offset = G.cur_zipfile_bufstart + (G.inptr-G.inbuf); +#ifdef TEST + printf("\n found end-of-central-dir signature at offset %ld (%.8lXh)\n", + G.real_ecrec_offset, G.real_ecrec_offset); + printf(" from beginning of file; offset %d (%.4Xh) within block\n", + G.inptr-G.inbuf, G.inptr-G.inbuf); +#endif + + if (readbuf(__G__ (char *)byterec, ECREC_SIZE+4) == 0) + return PK_EOF; + + G.ecrec.number_this_disk = + makeword(&byterec[NUMBER_THIS_DISK]); + G.ecrec.num_disk_start_cdir = + makeword(&byterec[NUM_DISK_WITH_START_CENTRAL_DIR]); + G.ecrec.num_entries_centrl_dir_ths_disk = + makeword(&byterec[NUM_ENTRIES_CENTRL_DIR_THS_DISK]); + G.ecrec.total_entries_central_dir = + makeword(&byterec[TOTAL_ENTRIES_CENTRAL_DIR]); + G.ecrec.size_central_directory = + makelong(&byterec[SIZE_CENTRAL_DIRECTORY]); + G.ecrec.offset_start_central_directory = + makelong(&byterec[OFFSET_START_CENTRAL_DIRECTORY]); + G.ecrec.zipfile_comment_length = + makeword(&byterec[ZIPFILE_COMMENT_LENGTH]); + + G.expect_ecrec_offset = G.ecrec.offset_start_central_directory + + G.ecrec.size_central_directory; + return PK_COOL; + +} /* end function find_ecrec() */ + + + + + +/*****************************/ +/* Function uz_end_central() */ +/*****************************/ + +int uz_end_central(__G) /* return PK-type error code */ + __GDEF +{ + int error = PK_COOL; + + +/*--------------------------------------------------------------------------- + Get the zipfile comment (up to 64KB long), if any, and print it out. + Then position the file pointer to the beginning of the central directory + and fill buffer. + ---------------------------------------------------------------------------*/ + +#ifdef WINDLL + /* for comment button: */ + if ((!G.fValidate) && (G.lpUserFunctions != NULL)) + G.lpUserFunctions->cchComment = G.ecrec.zipfile_comment_length; + if (G.ecrec.zipfile_comment_length && (uO.zflag > 0)) +#else /* !WINDLL */ + if (G.ecrec.zipfile_comment_length && (uO.zflag > 0 || + (uO.zflag == 0 && +#ifdef TIMESTAMP + !uO.T_flag && +#endif + !uO.qflag))) +#endif /* ?WINDLL */ + { + if (do_string(__G__ G.ecrec.zipfile_comment_length, DISPLAY)) { + Info(slide, 0x401, ((char *)slide, + LoadFarString(ZipfileCommTrunc1))); + error = PK_WARN; + } + } + return error; + +} /* end function uz_end_central() */ + + + + + +/************************************/ +/* Function process_cdir_file_hdr() */ +/************************************/ + +int process_cdir_file_hdr(__G) /* return PK-type error code */ + __GDEF +{ + int error; + + +/*--------------------------------------------------------------------------- + Get central directory info, save host and method numbers, and set flag + for lowercase conversion of filename, depending on the OS from which the + file is coming. + ---------------------------------------------------------------------------*/ + + if ((error = get_cdir_ent(__G)) != 0) + return error; + + G.pInfo->hostnum = MIN(G.crec.version_made_by[1], NUM_HOSTS); +/* extnum = MIN(crec.version_needed_to_extract[1], NUM_HOSTS); */ + + G.pInfo->lcflag = 0; + if (uO.L_flag) /* user specified case-conversion */ + switch (G.pInfo->hostnum) { + case FS_FAT_: /* PKZIP and zip -k store in uppercase */ + case CPM_: /* like MS-DOS, right? */ + case VM_CMS_: /* all caps? */ + case MVS_: /* all caps? */ + case TANDEM_: + case TOPS20_: + case VMS_: /* our Zip uses lowercase, but ASi's doesn't */ + /* case Z_SYSTEM_: ? */ + /* case QDOS_: ? */ + G.pInfo->lcflag = 1; /* convert filename to lowercase */ + break; + + default: /* AMIGA_, FS_HPFS_, FS_NTFS_, MAC_, UNIX_, ATARI_, */ + break; /* FS_VFAT_, BEOS_ (Z_SYSTEM_): no conversion */ + } + + /* do Amigas (AMIGA_) also have volume labels? */ + if (IS_VOLID(G.crec.external_file_attributes) && + (G.pInfo->hostnum == FS_FAT_ || G.pInfo->hostnum == FS_HPFS_ || + G.pInfo->hostnum == FS_NTFS_ || G.pInfo->hostnum == ATARI_)) + { + G.pInfo->vollabel = TRUE; + G.pInfo->lcflag = 0; /* preserve case of volume labels */ + } else + G.pInfo->vollabel = FALSE; + + return PK_COOL; + +} /* end function process_cdir_file_hdr() */ + + + + + +/***************************/ +/* Function get_cdir_ent() */ +/***************************/ + +int get_cdir_ent(__G) /* return PK-type error code */ + __GDEF +{ + cdir_byte_hdr byterec; + + +/*--------------------------------------------------------------------------- + Read the next central directory entry and do any necessary machine-type + conversions (byte ordering, structure padding compensation--do so by + copying the data from the array into which it was read (byterec) to the + usable struct (crec)). + ---------------------------------------------------------------------------*/ + + if (readbuf(__G__ (char *)byterec, CREC_SIZE) == 0) + return PK_EOF; + + G.crec.version_made_by[0] = byterec[C_VERSION_MADE_BY_0]; + G.crec.version_made_by[1] = byterec[C_VERSION_MADE_BY_1]; + G.crec.version_needed_to_extract[0] = + byterec[C_VERSION_NEEDED_TO_EXTRACT_0]; + G.crec.version_needed_to_extract[1] = + byterec[C_VERSION_NEEDED_TO_EXTRACT_1]; + + G.crec.general_purpose_bit_flag = + makeword(&byterec[C_GENERAL_PURPOSE_BIT_FLAG]); + G.crec.compression_method = + makeword(&byterec[C_COMPRESSION_METHOD]); + G.crec.last_mod_dos_datetime = + makelong(&byterec[C_LAST_MOD_DOS_DATETIME]); + G.crec.crc32 = + makelong(&byterec[C_CRC32]); + G.crec.csize = + makelong(&byterec[C_COMPRESSED_SIZE]); + G.crec.ucsize = + makelong(&byterec[C_UNCOMPRESSED_SIZE]); + G.crec.filename_length = + makeword(&byterec[C_FILENAME_LENGTH]); + G.crec.extra_field_length = + makeword(&byterec[C_EXTRA_FIELD_LENGTH]); + G.crec.file_comment_length = + makeword(&byterec[C_FILE_COMMENT_LENGTH]); + G.crec.disk_number_start = + makeword(&byterec[C_DISK_NUMBER_START]); + G.crec.internal_file_attributes = + makeword(&byterec[C_INTERNAL_FILE_ATTRIBUTES]); + G.crec.external_file_attributes = + makelong(&byterec[C_EXTERNAL_FILE_ATTRIBUTES]); /* LONG, not word! */ + G.crec.relative_offset_local_header = + makelong(&byterec[C_RELATIVE_OFFSET_LOCAL_HEADER]); + + return PK_COOL; + +} /* end function get_cdir_ent() */ + + + + + +/*************************************/ +/* Function process_local_file_hdr() */ +/*************************************/ + +int process_local_file_hdr(__G) /* return PK-type error code */ + __GDEF +{ + local_byte_hdr byterec; + + +/*--------------------------------------------------------------------------- + Read the next local file header and do any necessary machine-type con- + versions (byte ordering, structure padding compensation--do so by copy- + ing the data from the array into which it was read (byterec) to the + usable struct (lrec)). + ---------------------------------------------------------------------------*/ + + if (readbuf(__G__ (char *)byterec, LREC_SIZE) == 0) + return PK_EOF; + + G.lrec.version_needed_to_extract[0] = + byterec[L_VERSION_NEEDED_TO_EXTRACT_0]; + G.lrec.version_needed_to_extract[1] = + byterec[L_VERSION_NEEDED_TO_EXTRACT_1]; + + G.lrec.general_purpose_bit_flag = + makeword(&byterec[L_GENERAL_PURPOSE_BIT_FLAG]); + G.lrec.compression_method = makeword(&byterec[L_COMPRESSION_METHOD]); + G.lrec.last_mod_dos_datetime = makelong(&byterec[L_LAST_MOD_DOS_DATETIME]); + G.lrec.crc32 = makelong(&byterec[L_CRC32]); + G.lrec.csize = makelong(&byterec[L_COMPRESSED_SIZE]); + G.lrec.ucsize = makelong(&byterec[L_UNCOMPRESSED_SIZE]); + G.lrec.filename_length = makeword(&byterec[L_FILENAME_LENGTH]); + G.lrec.extra_field_length = makeword(&byterec[L_EXTRA_FIELD_LENGTH]); + + G.csize = (long) G.lrec.csize; + G.ucsize = (long) G.lrec.ucsize; + + if ((G.lrec.general_purpose_bit_flag & 8) != 0) { + /* can't trust local header, use central directory: */ + G.lrec.crc32 = G.pInfo->crc; + G.csize = (long)(G.lrec.csize = G.pInfo->compr_size); + G.ucsize = (long)(G.lrec.ucsize = G.pInfo->uncompr_size); + } + + return PK_COOL; + +} /* end function process_local_file_hdr() */ + + +#ifdef USE_EF_UT_TIME + +/*******************************/ +/* Function ef_scan_for_izux() */ +/*******************************/ + +unsigned ef_scan_for_izux(ef_buf, ef_len, ef_is_c, dos_mdatetime, + z_utim, z_uidgid) + uch *ef_buf; /* buffer containing extra field */ + unsigned ef_len; /* total length of extra field */ + int ef_is_c; /* flag indicating "is central extra field" */ + ulg dos_mdatetime; /* last_mod_file_date_time in DOS format */ + iztimes *z_utim; /* return storage: atime, mtime, ctime */ + ush *z_uidgid; /* return storage: uid and gid */ +{ + unsigned flags = 0; + unsigned eb_id; + unsigned eb_len; + int have_new_type_eb = FALSE; + int ut_zip_unzip_compatible = FALSE; + +/*--------------------------------------------------------------------------- + This function scans the extra field for EF_TIME, EF_IZUNIX2, EF_IZUNIX, or + EF_PKUNIX blocks containing Unix-style time_t (GMT) values for the entry's + access, creation, and modification time. + If a valid block is found, the time stamps are copied to the iztimes + structure (provided the z_utim pointer is not NULL). + If a IZUNIX2 block is found or the IZUNIX block contains UID/GID fields, + and the z_uidgid array pointer is valid (!= NULL), the owner info is + transfered as well. + The presence of an EF_TIME or EF_IZUNIX2 block results in ignoring all + data from probably present obsolete EF_IZUNIX blocks. + If multiple blocks of the same type are found, only the information from + the last block is used. + The return value is a combination of the EF_TIME Flags field with an + additional flag bit indicating the presence of valid UID/GID info, + or 0 in case of failure. + ---------------------------------------------------------------------------*/ + + if (ef_len == 0 || ef_buf == NULL || (z_utim == 0 && z_uidgid == NULL)) + return 0; + + TTrace((stderr,"\nef_scan_for_izux: scanning extra field of length %u\n", + ef_len)); + + while (ef_len >= EB_HEADSIZE) { + eb_id = makeword(EB_ID + ef_buf); + eb_len = makeword(EB_LEN + ef_buf); + + if (eb_len > (ef_len - EB_HEADSIZE)) { + /* discovered some extra field inconsistency! */ + TTrace((stderr, + "ef_scan_for_izux: block length %u > rest ef_size %u\n", eb_len, + ef_len - EB_HEADSIZE)); + break; + } + + switch (eb_id) { + case EF_TIME: + flags &= ~0x0ff; /* ignore previous IZUNIX or EF_TIME fields */ + have_new_type_eb = TRUE; + if ( eb_len >= EB_UT_MINLEN && z_utim != NULL) { + unsigned eb_idx = EB_UT_TIME1; + TTrace((stderr,"ef_scan_for_izux: found TIME extra field\n")); + flags |= (ef_buf[EB_HEADSIZE+EB_UT_FLAGS] & 0x0ff); + if ((flags & EB_UT_FL_MTIME)) { + if ((eb_idx+4) <= eb_len) { + z_utim->mtime = makelong((EB_HEADSIZE+eb_idx) + ef_buf); + eb_idx += 4; + TTrace((stderr," UT e.f. modification time = %ld\n", + z_utim->mtime)); + + if ((ulg)(z_utim->mtime) & (ulg)(0x80000000L)) { + ut_zip_unzip_compatible = + ((time_t)0x80000000L < (time_t)0L) + ? (dos_mdatetime == DOSTIME_MINIMUM) + : (dos_mdatetime >= DOSTIME_2038_01_18); + if (!ut_zip_unzip_compatible) { + /* UnZip interpretes mtime differently than Zip; + without modtime: ignore complete UT field */ + flags &= ~0x0ff; /* no time_t times available */ + TTrace((stderr, + " UT modtime range error; ignore e.f.!\n")); + break; /* stop scanning this field */ + } + } else { + /* cannot determine, safe assumption is FALSE */ + ut_zip_unzip_compatible = FALSE; + } + } else { + flags &= ~EB_UT_FL_MTIME; + TTrace((stderr," UT e.f. truncated; no modtime\n")); + } + } + if (ef_is_c) { + break; /* central version of TIME field ends here */ + } + + if (flags & EB_UT_FL_ATIME) { + if ((eb_idx+4) <= eb_len) { + z_utim->atime = makelong((EB_HEADSIZE+eb_idx) + ef_buf); + eb_idx += 4; + TTrace((stderr," UT e.f. access time = %ld\n", + z_utim->atime)); + if (((ulg)(z_utim->atime) & (ulg)(0x80000000L)) && + !ut_zip_unzip_compatible) { + flags &= ~EB_UT_FL_ATIME; + TTrace((stderr, + " UT access time range error: skip time!\n")); + } + } else { + flags &= ~EB_UT_FL_ATIME; + } + } + if (flags & EB_UT_FL_CTIME) { + if ((eb_idx+4) <= eb_len) { + z_utim->ctime = makelong((EB_HEADSIZE+eb_idx) + ef_buf); + TTrace((stderr," UT e.f. creation time = %ld\n", + z_utim->ctime)); + if (((ulg)(z_utim->ctime) & (ulg)(0x80000000L)) && + !ut_zip_unzip_compatible) { + flags &= ~EB_UT_FL_CTIME; + TTrace((stderr, + " UT creation time range error: skip time!\n")); + } + } else { + flags &= ~EB_UT_FL_CTIME; + } + } + } + break; + + case EF_IZUNIX2: + if (!have_new_type_eb) { + flags &= ~0x0ff; /* ignore any previous IZUNIX field */ + have_new_type_eb = TRUE; + } + if (eb_len >= EB_UX2_MINLEN && z_uidgid != NULL) { + z_uidgid[0] = makeword((EB_HEADSIZE+EB_UX2_UID) + ef_buf); + z_uidgid[1] = makeword((EB_HEADSIZE+EB_UX2_GID) + ef_buf); + flags |= EB_UX2_VALID; /* signal success */ + } + break; + + case EF_IZUNIX: + case EF_PKUNIX: /* PKUNIX e.f. layout is identical to IZUNIX */ + if (eb_len >= EB_UX_MINLEN) { + TTrace((stderr,"ef_scan_for_izux: found %s extra field\n", + (eb_id == EF_IZUNIX ? "IZUNIX" : "PKUNIX"))); + if (have_new_type_eb) { + break; /* Ignore IZUNIX extra field block ! */ + } + if (z_utim != NULL) { + z_utim->atime = makelong((EB_HEADSIZE+EB_UX_ATIME)+ef_buf); + z_utim->mtime = makelong((EB_HEADSIZE+EB_UX_MTIME)+ef_buf); + TTrace((stderr," Unix EF actime = %ld\n", z_utim->atime)); + TTrace((stderr," Unix EF modtime = %ld\n", z_utim->mtime)); + flags |= (EB_UT_FL_MTIME | EB_UT_FL_ATIME); + if ((ulg)(z_utim->mtime) & (ulg)(0x80000000L)) { + ut_zip_unzip_compatible = + ((time_t)0x80000000L < (time_t)0L) + ? (dos_mdatetime == DOSTIME_MINIMUM) + : (dos_mdatetime >= DOSTIME_2038_01_18); + if (!ut_zip_unzip_compatible) { + /* UnZip interpretes mtime differently than Zip; + without modtime: ignore complete UT field */ + flags &= ~0x0ff; /* no time_t times available */ + TTrace((stderr, + " UX modtime range error: ignore e.f.!\n")); + } + } else { + /* cannot determine, safe assumption is FALSE */ + ut_zip_unzip_compatible = FALSE; + } + if ((ulg)(z_utim->atime) & (ulg)(0x80000000L) && + !ut_zip_unzip_compatible && (flags & 0x0ff)) { + /* atime not in range of UnZip's time_t */ + flags &= ~EB_UT_FL_ATIME; + TTrace((stderr, + " UX access time range error: skip time!\n")); + } + } + if (eb_len >= EB_UX_FULLSIZE && z_uidgid != NULL) { + z_uidgid[0] = makeword((EB_HEADSIZE+EB_UX_UID) + ef_buf); + z_uidgid[1] = makeword((EB_HEADSIZE+EB_UX_GID) + ef_buf); + flags |= EB_UX2_VALID; + } + } + break; + + default: + break; + } + + /* Skip this extra field block */ + ef_buf += (eb_len + EB_HEADSIZE); + ef_len -= (eb_len + EB_HEADSIZE); + } + + return flags; +} + +#endif /* USE_EF_UT_TIME */ diff --git a/Build/source/extra/unzip/ttyio.c b/Build/source/extra/unzip/ttyio.c new file mode 100644 index 00000000000..c755d1c5a37 --- /dev/null +++ b/Build/source/extra/unzip/ttyio.c @@ -0,0 +1,625 @@ +/*--------------------------------------------------------------------------- + + ttyio.c + + This file contains routines for doing console input/output, including code + for non-echoing input. It is used by the encryption/decryption code but + does not contain any restricted code itself. This file is shared between + Info-ZIP's Zip and UnZip. + + Contains: echo() (VMS only) + Echon() (Unix only) + Echoff() (Unix only) + screenlines() (Unix only) + zgetch() (Unix and non-Unix versions) + getp() ("PC," Unix/Atari/Be, VMS/VMCMS/MVS) + + ---------------------------------------------------------------------------*/ + +#define __TTYIO_C /* identifies this source module */ + +#include "zip.h" +#include "crypt.h" + +#if (CRYPT || (defined(UNZIP) && !defined(FUNZIP))) +/* Non-echo console/keyboard input is needed for (en/de)cryption's password + * entry, and for UnZip(SFX)'s MORE and Pause features. + * (The corresponding #endif is found at the end of this module.) + */ + +#include "ttyio.h" + +#ifndef PUTC +# define PUTC putc +#endif + +#ifdef ZIP +# ifdef GLOBAL /* used in Amiga system headers, maybe others too */ +# undef GLOBAL +# endif +# define GLOBAL(g) g +#else +# define GLOBAL(g) G.g +#endif + +#ifdef __BEOS__ /* why yes, we do */ +# define HAVE_TERMIOS_H +#endif + +#ifdef _POSIX_VERSION +# ifndef USE_POSIX_TERMIOS +# define USE_POSIX_TERMIOS /* use POSIX style termio (termios) */ +# endif +# ifndef HAVE_TERMIOS_H +# define HAVE_TERMIOS_H /* POSIX termios.h */ +# endif +#endif /* _POSIX_VERSION */ + +#ifdef UNZIP /* Zip handles this with the unix/configure script */ +# ifndef _POSIX_VERSION +# if (defined(SYSV) || defined(CRAY)) && !defined(__MINT__) +# ifndef USE_SYSV_TERMIO +# define USE_SYSV_TERMIO +# endif +# ifdef COHERENT +# ifndef HAVE_TERMIO_H +# define HAVE_TERMIO_H +# endif +# ifdef HAVE_SYS_TERMIO_H +# undef HAVE_SYS_TERMIO_H +# endif +# else /* !COHERENT */ +# ifdef HAVE_TERMIO_H +# undef HAVE_TERMIO_H +# endif +# ifndef HAVE_SYS_TERMIO_H +# define HAVE_SYS_TERMIO_H +# endif +# endif /* ?COHERENT */ +# endif /* (SYSV || CRAY) && !__MINT__ */ +# endif /* !_POSIX_VERSION */ +# if !(defined(BSD4_4) || defined(SYSV) || defined(__convexc__)) +# ifndef NO_FCNTL_H +# define NO_FCNTL_H +# endif +# endif /* !(BSD4_4 || SYSV || __convexc__) */ +#endif /* UNZIP */ + +#ifdef HAVE_TERMIOS_H +# ifndef USE_POSIX_TERMIOS +# define USE_POSIX_TERMIOS +# endif +#endif + +#if (defined(HAVE_TERMIO_H) || defined(HAVE_SYS_TERMIO_H)) +# ifndef USE_SYSV_TERMIO +# define USE_SYSV_TERMIO +# endif +#endif + +#if (defined(UNZIP) && !defined(FUNZIP) && defined(UNIX) && defined(MORE)) +# include +# define GOT_IOCTL_H + /* int ioctl OF((int, int, zvoid *)); GRR: may need for some systems */ +#endif + +#ifndef HAVE_WORKING_GETCH + /* include system support for switching of console echo */ +# ifdef VMS +# include +# include +# include +# include +# include +# else /* !VMS */ +# ifdef HAVE_TERMIOS_H +# include +# define sgttyb termios +# define sg_flags c_lflag +# define GTTY(f, s) tcgetattr(f, (zvoid *) s) +# define STTY(f, s) tcsetattr(f, TCSAFLUSH, (zvoid *) s) +# else /* !HAVE_TERMIOS_H */ +# ifdef USE_SYSV_TERMIO /* Amdahl, Cray, all SysV? */ +# ifdef HAVE_TERMIO_H +# include +# endif +# ifdef HAVE_SYS_TERMIO_H +# include +# endif +# ifdef NEED_PTEM +# include +# include +# endif +# define sgttyb termio +# define sg_flags c_lflag +# define GTTY(f,s) ioctl(f,TCGETA,(zvoid *)s) +# define STTY(f,s) ioctl(f,TCSETAW,(zvoid *)s) +# else /* !USE_SYSV_TERMIO */ +# ifndef CMS_MVS +# if (!defined(MINIX) && !defined(GOT_IOCTL_H)) +# include +# endif +# include +# define GTTY gtty +# define STTY stty +# ifdef UNZIP + /* + * XXX : Are these declarations needed at all ???? + */ + /* + * GRR: let's find out... Hmmm, appears not... + int gtty OF((int, struct sgttyb *)); + int stty OF((int, struct sgttyb *)); + */ +# endif +# endif /* !CMS_MVS */ +# endif /* ?USE_SYSV_TERMIO */ +# endif /* ?HAVE_TERMIOS_H */ +# ifndef NO_FCNTL_H +# ifndef UNZIP +# include +# endif +# else + char *ttyname OF((int)); +# endif +# endif /* ?VMS */ +#endif /* !HAVE_WORKING_GETCH */ + + + +#ifndef HAVE_WORKING_GETCH +#ifdef VMS + +/* + * Turn keyboard echoing on or off (VMS). Loosely based on VMSmunch.c + * and hence on Joe Meadows' file.c code. + */ +int echo(opt) + int opt; +{ + /* + * For VMS v5.x: + * IO$_SENSEMODE/SETMODE info: Programming, Vol. 7A, System Programming, + * I/O User's: Part I, sec. 8.4.1.1, 8.4.3, 8.4.5, 8.6 + * sys$assign(), sys$qio() info: Programming, Vol. 4B, System Services, + * System Services Reference Manual, pp. sys-23, sys-379 + * fixed-length descriptor info: Programming, Vol. 3, System Services, + * Intro to System Routines, sec. 2.9.2 + * Greg Roelofs, 15 Aug 91 + */ + + /* SKM: make global? */ + static struct dsc$descriptor_s DevDesc = + {11, DSC$K_DTYPE_T, DSC$K_CLASS_S, "SYS$COMMAND"}; + /* {dsc$w_length, dsc$b_dtype, dsc$b_class, dsc$a_pointer}; */ + static short DevChan, iosb[4]; + static long status; + static unsigned long oldmode[2], newmode[2]; /* each = 8 bytes */ + + + /* assign a channel to standard input */ + status = sys$assign(&DevDesc, &DevChan, 0, 0); + if (!(status & 1)) + return status; + + /* use sys$qio and the IO$_SENSEMODE function to determine the current + * tty status (for password reading, could use IO$_READVBLK function + * instead, but echo on/off will be more general) + */ + status = sys$qiow(0, DevChan, IO$_SENSEMODE, &iosb, 0, 0, + oldmode, 8, 0, 0, 0, 0); + if (!(status & 1)) + return status; + status = iosb[0]; + if (!(status & 1)) + return status; + + /* copy old mode into new-mode buffer, then modify to be either NOECHO or + * ECHO (depending on function argument opt) + */ + newmode[0] = oldmode[0]; + newmode[1] = oldmode[1]; + if (opt == 0) /* off */ + newmode[1] |= TT$M_NOECHO; /* set NOECHO bit */ + else + newmode[1] &= ~((unsigned long) TT$M_NOECHO); /* clear NOECHO bit */ + + /* use the IO$_SETMODE function to change the tty status */ + status = sys$qiow(0, DevChan, IO$_SETMODE, &iosb, 0, 0, + newmode, 8, 0, 0, 0, 0); + if (!(status & 1)) + return status; + status = iosb[0]; + if (!(status & 1)) + return status; + + /* deassign the sys$input channel by way of clean-up */ + status = sys$dassgn(DevChan); + if (!(status & 1)) + return status; + + return SS$_NORMAL; /* we be happy */ + +} /* end function echo() */ + + +#else /* !VMS: basically Unix */ + + +/* For VM/CMS and MVS, non-echo terminal input is not (yet?) supported. */ +#ifndef CMS_MVS + +#ifdef ZIP /* moved to globals.h for UnZip */ + static int echofd=(-1); /* file descriptor whose echo is off */ +#endif + +/* + * Turn echo off for file descriptor f. Assumes that f is a tty device. + */ +void Echoff(__G__ f) + __GDEF + int f; /* file descriptor for which to turn echo off */ +{ + struct sgttyb sg; /* tty device structure */ + + GLOBAL(echofd) = f; + GTTY(f, &sg); /* get settings */ + sg.sg_flags &= ~ECHO; /* turn echo off */ + STTY(f, &sg); +} + +/* + * Turn echo back on for file descriptor echofd. + */ +void Echon(__G) + __GDEF +{ + struct sgttyb sg; /* tty device structure */ + + if (GLOBAL(echofd) != -1) { + GTTY(GLOBAL(echofd), &sg); /* get settings */ + sg.sg_flags |= ECHO; /* turn echo on */ + STTY(GLOBAL(echofd), &sg); + GLOBAL(echofd) = -1; + } +} + +#endif /* !CMS_MVS */ +#endif /* ?VMS */ + + +#if (defined(UNZIP) && !defined(FUNZIP)) + +#if (defined(UNIX) || defined(__BEOS__)) +#ifdef MORE + +/* + * Get the number of lines on the output terminal. SCO Unix apparently + * defines TIOCGWINSZ but doesn't support it (!M_UNIX). + * + * GRR: will need to know width of terminal someday, too, to account for + * line-wrapping. + */ + +#if (defined(TIOCGWINSZ) && !defined(M_UNIX)) + +int screenlines() +{ + struct winsize wsz; +#ifdef DEBUG_WINSZ + static int firsttime = TRUE; +#endif + + /* see termio(4) under, e.g., SunOS */ + if (ioctl(1, TIOCGWINSZ, &wsz) == 0) { +#ifdef DEBUG_WINSZ + if (firsttime) { + firsttime = FALSE; + fprintf(stderr, "ttyio.c screenlines(): ws_row = %d\n", + wsz.ws_row); + } +#endif + /* number of columns = ws_col */ + return (wsz.ws_row > 0)? wsz.ws_row : 24; /* number of rows */ + + } else { /* this happens when piping to more(1), for example */ +#ifdef DEBUG_WINSZ + if (firsttime) { + firsttime = FALSE; + fprintf(stderr, + "ttyio.c screenlines(): ioctl(TIOCGWINSZ) failed\n")); + } +#endif + return 24; /* VT-100 assumed to be minimal hardware */ + } +} + +#else /* !TIOCGWINSZ: service not available, fall back to semi-bogus method */ + +int screenlines() +{ + char *envptr, *getenv(); + int n; + + /* GRR: this is overly simplistic, but don't have access to stty/gtty + * system anymore + */ + envptr = getenv("LINES"); + if (envptr == (char *)NULL || (n = atoi(envptr)) < 5) + return 24; /* VT-100 assumed to be minimal hardware */ + else + return n; +} + +#endif /* ?(TIOCGWINSZ && !M_UNIX) */ +#endif /* MORE */ + + +/* + * Get a character from the given file descriptor without echo or newline. + */ +int zgetch(__G__ f) + __GDEF + int f; /* file descriptor from which to read */ +{ +#if (defined(USE_SYSV_TERMIO) || defined(USE_POSIX_TERMIOS)) + char oldmin, oldtim; +#endif + char c; + struct sgttyb sg; /* tty device structure */ + + GTTY(f, &sg); /* get settings */ +#if (defined(USE_SYSV_TERMIO) || defined(USE_POSIX_TERMIOS)) + oldmin = sg.c_cc[VMIN]; /* save old values */ + oldtim = sg.c_cc[VTIME]; + sg.c_cc[VMIN] = 1; /* need only one char to return read() */ + sg.c_cc[VTIME] = 0; /* no timeout */ + sg.sg_flags &= ~ICANON; /* canonical mode off */ +#else + sg.sg_flags |= CBREAK; /* cbreak mode on */ +#endif + sg.sg_flags &= ~ECHO; /* turn echo off, too */ + STTY(f, &sg); /* set cbreak mode */ + GLOBAL(echofd) = f; /* in case ^C hit (not perfect: still CBREAK) */ + + read(f, &c, 1); /* read our character */ + +#if (defined(USE_SYSV_TERMIO) || defined(USE_POSIX_TERMIOS)) + sg.c_cc[VMIN] = oldmin; /* restore old values */ + sg.c_cc[VTIME] = oldtim; + sg.sg_flags |= ICANON; /* canonical mode on */ +#else + sg.sg_flags &= ~CBREAK; /* cbreak mode off */ +#endif + sg.sg_flags |= ECHO; /* turn echo on */ + STTY(f, &sg); /* restore canonical mode */ + GLOBAL(echofd) = -1; + + return (int)c; +} + + +#else /* !UNIX && !__BEOS__ */ + + +int zgetch(__G__ f) + __GDEF + int f; /* file descriptor from which to read (must be open already) */ +{ + char c, c2; + +/*--------------------------------------------------------------------------- + Get a character from the given file descriptor without echo; can't fake + CBREAK mode (i.e., newline required), but can get rid of all chars up to + and including newline. + ---------------------------------------------------------------------------*/ + + echoff(f); + read(f, &c, 1); + if (c != '\n') + do { + read(f, &c2, 1); /* throw away all other chars up thru newline */ + } while (c2 != '\n'); + echon(); + return (int)c; +} + +#endif /* ?(UNIX || __BEOS__) */ + +#endif /* UNZIP && !FUNZIP */ +#endif /* !HAVE_WORKING_GETCH */ + + +#if CRYPT /* getp() is only used with full encryption */ + +/* + * Simple compile-time check for source compatibility between + * zcrypt and ttyio: + */ +#if (!defined(CR_MAJORVER) || (CR_MAJORVER < 2) || (CR_MINORVER < 7)) + error: This Info-ZIP tool requires zcrypt 2.7 or later. +#endif + +/* + * Get a password of length n-1 or less into *p using the prompt *m. + * The entered password is not echoed. + */ + +#ifdef HAVE_WORKING_GETCH +/* + * For the AMIGA, getch() is defined as Agetch(), which is in + * amiga/filedate.c; SAS/C 6.x provides a getch(), but since Agetch() + * uses the infrastructure that is already in place in filedate.c, it is + * smaller. With this function, echoff() and echon() are not needed. + * + * For the MAC, a non-echo macgetch() function is defined in the MacOS + * specific sources which uses the event handling mechanism of the + * desktop window manager to get a character from the keyboard. + * + * For the other systems in this section, a non-echo getch() function + * is either contained the C runtime library (conio package), or getch() + * is defined as an alias for a similar system specific RTL function. + */ + +#ifndef WINDLL /* WINDLL does not support a console interface */ +#ifndef QDOS /* QDOS supplies a variant of this function */ + +/* This is the getp() function for all systems (with TTY type user interface) + * that supply a working `non-echo' getch() function for "raw" console input. + */ +char *getp(__G__ m, p, n) + __GDEF + ZCONST char *m; /* prompt for password */ + char *p; /* return value: line input */ + int n; /* bytes available in p[] */ +{ + char c; /* one-byte buffer for read() to use */ + int i; /* number of characters input */ + char *w; /* warning on retry */ + + /* get password */ + w = ""; + do { + fputs(w, stderr); /* warning if back again */ + fputs(m, stderr); /* display prompt and flush */ + fflush(stderr); + i = 0; + do { /* read line, keeping first n characters */ + if ((c = (char)getch()) == '\r') + c = '\n'; /* until user hits CR */ + if (c == 8 || c == 127) { + if (i > 0) i--; /* the `backspace' and `del' keys works */ + } + else if (i < n) + p[i++] = c; /* truncate past n */ + } while (c != '\n'); + PUTC('\n', stderr); fflush(stderr); + w = "(line too long--try again)\n"; + } while (p[i-1] != '\n'); + p[i-1] = 0; /* terminate at newline */ + + return p; /* return pointer to password */ + +} /* end function getp() */ + +#endif /* !QDOS */ +#endif /* !WINDLL */ + + +#else /* !HAVE_WORKING_GETCH */ + + +#if (defined(UNIX) || defined(__MINT__) || defined(__BEOS__)) + +#ifndef _PATH_TTY +# ifdef __MINT__ +# define _PATH_TTY ttyname(2) +# else +# define _PATH_TTY "/dev/tty" +# endif +#endif + +char *getp(__G__ m, p, n) + __GDEF + ZCONST char *m; /* prompt for password */ + char *p; /* return value: line input */ + int n; /* bytes available in p[] */ +{ + char c; /* one-byte buffer for read() to use */ + int i; /* number of characters input */ + char *w; /* warning on retry */ + int f; /* file descriptor for tty device */ + +#ifdef PASSWD_FROM_STDIN + /* Read from stdin. This is unsafe if the password is stored on disk. */ + f = 0; +#else + /* turn off echo on tty */ + + if ((f = open(_PATH_TTY, 0)) == -1) + return NULL; +#endif + /* get password */ + w = ""; + do { + fputs(w, stderr); /* warning if back again */ + fputs(m, stderr); /* prompt */ + fflush(stderr); + i = 0; + echoff(f); + do { /* read line, keeping n */ + read(f, &c, 1); + if (i < n) + p[i++] = c; + } while (c != '\n'); + echon(); + PUTC('\n', stderr); fflush(stderr); + w = "(line too long--try again)\n"; + } while (p[i-1] != '\n'); + p[i-1] = 0; /* terminate at newline */ + +#ifndef PASSWD_FROM_STDIN + close(f); +#endif + + return p; /* return pointer to password */ + +} /* end function getp() */ + +#endif /* UNIX || __MINT__ || __BEOS__ */ + + + +#if (defined(VMS) || defined(CMS_MVS)) + +char *getp(__G__ m, p, n) + __GDEF + ZCONST char *m; /* prompt for password */ + char *p; /* return value: line input */ + int n; /* bytes available in p[] */ +{ + char c; /* one-byte buffer for read() to use */ + int i; /* number of characters input */ + char *w; /* warning on retry */ + FILE *f; /* file structure for SYS$COMMAND device */ + +#ifdef PASSWD_FROM_STDIN + f = stdin; +#else + if ((f = fopen(ctermid(NULL), "r")) == NULL) + return NULL; +#endif + + /* get password */ + fflush(stdout); + w = ""; + do { + if (*w) /* bug: VMS apparently adds \n to NULL fputs */ + fputs(w, stderr); /* warning if back again */ + fputs(m, stderr); /* prompt */ + fflush(stderr); + i = 0; + echoff(f); + do { /* read line, keeping n */ + if ((c = (char)getc(f)) == '\r') + c = '\n'; + if (i < n) + p[i++] = c; + } while (c != '\n'); + echon(); + PUTC('\n', stderr); fflush(stderr); + w = "(line too long--try again)\n"; + } while (p[i-1] != '\n'); + p[i-1] = 0; /* terminate at newline */ +#ifndef PASSWD_FROM_STDIN + fclose(f); +#endif + + return p; /* return pointer to password */ + +} /* end function getp() */ + +#endif /* VMS || CMS_MVS */ +#endif /* ?HAVE_WORKING_GETCH */ +#endif /* CRYPT */ +#endif /* CRYPT || (UNZIP && !FUNZIP) */ diff --git a/Build/source/extra/unzip/ttyio.h b/Build/source/extra/unzip/ttyio.h new file mode 100644 index 00000000000..685e7ace66b --- /dev/null +++ b/Build/source/extra/unzip/ttyio.h @@ -0,0 +1,186 @@ +/* + ttyio.h + */ + +#ifndef __ttyio_h /* don't include more than once */ +#define __ttyio_h + +#ifndef __crypt_h +# include "crypt.h" /* ensure that encryption header file has been seen */ +#endif + +#if (CRYPT || (defined(UNZIP) && !defined(FUNZIP))) +/* + * Non-echo keyboard/console input support is needed and enabled. + */ + +#ifndef __G /* UnZip only, for now (DLL stuff) */ +# define __G +# define __G__ +# define __GDEF +# define __GPRO void +# define __GPRO__ +#endif + +#ifndef ZCONST /* UnZip only (until have configure script like Zip) */ +# define ZCONST const +#endif + +#if (defined(MSDOS) || defined(OS2) || defined(WIN32)) +# ifndef DOS_OS2_W32 +# define DOS_OS2_W32 +# endif +#endif + +#if (defined(DOS_OS2_W32) || defined(__human68k__)) +# ifndef DOS_H68_OS2_W32 +# define DOS_H68_OS2_W32 +# endif +#endif + +#if (defined(DOS_OS2_W32) || defined(FLEXOS)) +# ifndef DOS_FLX_OS2_W32 +# define DOS_FLX_OS2_W32 +# endif +#endif + +#if (defined(DOS_H68_OS2_W32) || defined(FLEXOS)) +# ifndef DOS_FLX_H68_OS2_W32 +# define DOS_FLX_H68_OS2_W32 +# endif +#endif + +#if (defined(VM_CMS) || defined(MVS)) +# ifndef CMS_MVS +# define CMS_MVS +# endif +#endif + + +/* Function prototypes */ + +/* The following systems supply a `non-echo' character input function "getch()" + * (or an alias) and do not need the echoff() / echon() function pair. + */ +#ifdef AMIGA +# define echoff(f) +# define echon() +# define getch() Agetch() +# define HAVE_WORKING_GETCH +#endif /* AMIGA */ + +#ifdef ATARI +# define echoff(f) +# define echon() +# include +# define getch() (Cnecin() & 0x000000ff) +# define HAVE_WORKING_GETCH +#endif + +#ifdef MACOS +# define echoff(f) +# define echon() +# define getch() macgetch() +# define HAVE_WORKING_GETCH +#endif + +#ifdef QDOS +# define echoff(f) +# define echon() +# define HAVE_WORKING_GETCH +#endif + +#ifdef RISCOS +# define echoff(f) +# define echon() +# define getch() SWI_OS_ReadC() +# define HAVE_WORKING_GETCH +#endif + +#ifdef DOS_H68_OS2_W32 +# define echoff(f) +# define echon() +# ifdef WIN32 +# ifndef getch +# define getch() getch_win32() +# endif +# else /* !WIN32 */ +# ifdef __EMX__ +# ifndef getch +# define getch() _read_kbd(0, 1, 0) +# endif +# else /* !__EMX__ */ +# ifdef __GO32__ +# include +# define getch() getkey() +# else /* !__GO32__ */ +# include +# endif /* ?__GO32__ */ +# endif /* ?__EMX__ */ +# endif /* ?WIN32 */ +# define HAVE_WORKING_GETCH +#endif /* DOS_H68_OS2_W32 */ + +#ifdef FLEXOS +# define echoff(f) +# define echon() +# define getch() getchar() /* not correct, but may not be on a console */ +# define HAVE_WORKING_GETCH +#endif + +/* For VM/CMS and MVS, we do not (yet) have any support to switch terminal + * input echo on and off. The following "fake" definitions allow inclusion + * of crypt support and UnZip's "pause prompting" features, but without + * any echo suppression. + */ +#ifdef CMS_MVS +# define echoff(f) +# define echon() +#endif + +/* VMS has a single echo() function in ttyio.c to toggle terminal + * input echo on and off. + */ +#ifdef VMS +# define echoff(f) echo(0) +# define echon() echo(1) + int echo OF((int)); +#endif + +/* For all other systems, ttyio.c supplies the two functions Echoff() and + * Echon() for suppressing and (re)enabling console input echo. + */ +#ifndef echoff +# define echoff(f) Echoff(__G__ f) +# define echon() Echon(__G) + void Echoff OF((__GPRO__ int f)); + void Echon OF((__GPRO)); +#endif + +/* this stuff is used by MORE and also now by the ctrl-S code; fileio.c only */ +#if (defined(UNZIP) && !defined(FUNZIP)) +# ifdef HAVE_WORKING_GETCH +# define FGETCH(f) getch() +# endif +# ifndef FGETCH + /* default for all systems where no getch()-like function is available */ + int zgetch OF((__GPRO__ int f)); +# define FGETCH(f) zgetch(__G__ f) +# endif +#endif /* UNZIP && !FUNZIP */ + +#if (CRYPT && !defined(WINDLL)) + char *getp OF((__GPRO__ ZCONST char *m, char *p, int n)); +#endif + +#else /* !(CRYPT || (UNZIP && !FUNZIP)) */ + +/* + * No need for non-echo keyboard/console input; provide dummy definitions. + */ +#define echoff(f) +#define echon() + +#endif /* ?(CRYPT || (UNZIP && !FUNZIP)) */ + +#endif /* !__ttyio_h */ diff --git a/Build/source/extra/unzip/unreduce.c b/Build/source/extra/unzip/unreduce.c new file mode 100644 index 00000000000..4cfb3fec6f5 --- /dev/null +++ b/Build/source/extra/unzip/unreduce.c @@ -0,0 +1,230 @@ +/*--------------------------------------------------------------------------- + + unreduce.c + + The Reducing algorithm is actually a combination of two distinct algorithms. + The first algorithm compresses repeated byte sequences, and the second al- + gorithm takes the compressed stream from the first algorithm and applies a + probabilistic compression method. + + * Copyright 1989 Samuel H. Smith; All rights reserved + * + * Do not distribute modified versions without my permission. + * Do not remove or alter this notice or any other copyright notice. + * If you use this in your own program you must distribute source code. + * Do not use any of this in a commercial product. + + See the accompanying file "COPYING" in UnZip source and binary distributions + for further information. This code is NOT used unless USE_SMITH_CODE is + explicitly defined (==> COPYRIGHT_CLEAN is not defined). + + ---------------------------------------------------------------------------*/ + + +#define UNZIP_INTERNAL +#include "unzip.h" /* defines COPYRIGHT_CLEAN by default */ + + +#ifndef COPYRIGHT_CLEAN + +/**************************************/ +/* UnReduce Defines, Typedefs, etc. */ +/**************************************/ + +#define DLE 144 + +typedef uch f_array[64]; /* for followers[256][64] */ + + + +/******************************/ +/* UnReduce Local Functions */ +/******************************/ + +static void LoadFollowers OF((__GPRO__ f_array *followers, uch *Slen)); + + + +/*******************************/ +/* UnReduce Global Constants */ +/*******************************/ + +static ZCONST shrint L_table[] = +{0, 0x7f, 0x3f, 0x1f, 0x0f}; + +static ZCONST shrint D_shift[] = +{0, 0x07, 0x06, 0x05, 0x04}; +static ZCONST shrint D_mask[] = +{0, 0x01, 0x03, 0x07, 0x0f}; + +static ZCONST shrint B_table[] = +{8, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8}; + + + + + +/*************************/ +/* Function unreduce() */ +/*************************/ + +void unreduce(__G) /* expand probabilistically reduced data */ + __GDEF +{ + register int lchar = 0; + shrint nchar; + shrint ExState = 0; + shrint V = 0; + shrint Len = 0; + long s = G.ucsize; /* number of bytes left to decompress */ + unsigned w = 0; /* position in output window slide[] */ + unsigned u = 1; /* true if slide[] unflushed */ + uch Slen[256]; + + f_array *followers = (f_array *)(slide + 0x4000); + int factor = G.lrec.compression_method - 1; + + LoadFollowers(__G__ followers, Slen); + + while (s > 0 /* && (!zipeof) */) { + if (Slen[lchar] == 0) + READBITS(8, nchar) /* ; */ + else { + READBITS(1, nchar) /* ; */ + if (nchar != 0) + READBITS(8, nchar) /* ; */ + else { + shrint follower; + int bitsneeded = B_table[Slen[lchar]]; + + READBITS(bitsneeded, follower) /* ; */ + nchar = followers[lchar][follower]; + } + } + /* expand the resulting byte */ + switch (ExState) { + + case 0: + if (nchar != DLE) { + s--; + slide[w++] = (uch)nchar; + if (w == 0x4000) { + flush(__G__ slide, (ulg)w, 0); + w = u = 0; + } + } + else + ExState = 1; + break; + + case 1: + if (nchar != 0) { + V = nchar; + Len = V & L_table[factor]; + if (Len == L_table[factor]) + ExState = 2; + else + ExState = 3; + } else { + s--; + slide[w++] = DLE; + if (w == 0x4000) + { + flush(__G__ slide, (ulg)w, 0); + w = u = 0; + } + ExState = 0; + } + break; + + case 2:{ + Len += nchar; + ExState = 3; + } + break; + + case 3:{ + register unsigned e; + register unsigned n = Len + 3; + register unsigned d = w - ((((V >> D_shift[factor]) & + D_mask[factor]) << 8) + nchar + 1); + + s -= n; + do { + n -= (e = (e = 0x4000 - ((d &= 0x3fff) > w ? d : w)) > n ? + n : e); + if (u && w <= d) + { + memzero(slide + w, e); + w += e; + d += e; + } + else + if (w - d < e) /* (assume unsigned comparison) */ + do { /* slow to avoid memcpy() overlap */ + slide[w++] = slide[d++]; + } while (--e); + else + { + memcpy(slide + w, slide + d, e); + w += e; + d += e; + } + if (w == 0x4000) + { + flush(__G__ slide, (ulg)w, 0); + w = u = 0; + } + } while (n); + + ExState = 0; + } + break; + } + + /* store character for next iteration */ + lchar = nchar; + } + + /* flush out slide */ + flush(__G__ slide, (ulg)w, 0); +} + + + + + +/******************************/ +/* Function LoadFollowers() */ +/******************************/ + +static void LoadFollowers(__G__ followers, Slen) + __GDEF + f_array *followers; + uch *Slen; +{ + register int x; + register int i; + + for (x = 255; x >= 0; x--) { + READBITS(6, Slen[x]) /* ; */ + for (i = 0; (uch)i < Slen[x]; i++) + READBITS(8, followers[x][i]) /* ; */ + } +} + +#endif /* !COPYRIGHT_CLEAN */ diff --git a/Build/source/extra/unzip/unshrink.c b/Build/source/extra/unzip/unshrink.c new file mode 100644 index 00000000000..2b7e6f027f0 --- /dev/null +++ b/Build/source/extra/unzip/unshrink.c @@ -0,0 +1,301 @@ +/*--------------------------------------------------------------------------- + + unshrink.c version 1.21 23 Nov 95 + + + NOTE: This code may or may not infringe on the so-called "Welch + patent" owned by Unisys. (From reading the patent, it appears + that a pure LZW decompressor is *not* covered, but this claim has + not been tested in court, and Unisys is reported to believe other- + wise.) It is therefore the responsibility of the user to acquire + whatever license(s) may be required for legal use of this code. + + THE INFO-ZIP GROUP DISCLAIMS ALL LIABILITY FOR USE OF THIS CODE + IN VIOLATION OF APPLICABLE PATENT LAW. + + + Shrinking is basically a dynamic LZW algorithm with allowed code sizes of + up to 13 bits; in addition, there is provision for partial clearing of + leaf nodes. PKWARE uses the special code 256 (decimal) to indicate a + change in code size or a partial clear of the code tree: 256,1 for the + former and 256,2 for the latter. [Note that partial clearing can "orphan" + nodes: the parent-to-be can be cleared before its new child is added, + but the child is added anyway (as an orphan, as though the parent still + existed). When the tree fills up to the point where the parent node is + reused, the orphan is effectively "adopted." Versions prior to 1.05 were + affected more due to greater use of pointers (to children and siblings + as well as parents).] + + This replacement version of unshrink.c was written from scratch. It is + based only on the algorithms described in Mark Nelson's _The Data Compres- + sion Book_ and in Terry Welch's original paper in the June 1984 issue of + IEEE _Computer_; no existing source code, including any in Nelson's book, + was used. + + Memory requirements have been reduced in this version and are now no more + than the original Sam Smith code. This is still larger than any of the + other algorithms: at a minimum, 8K+8K+16K (stack+values+parents) assuming + 16-bit short ints, and this does not even include the output buffer (the + other algorithms leave the uncompressed data in the work area, typically + called slide[]). For machines with a 64KB data space this is a problem, + particularly when text conversion is required and line endings have more + than one character. UnZip's solution is to use two roughly equal halves + of outbuf for the ASCII conversion in such a case; the "unshrink" argument + to flush() signals that this is the case. + + For large-memory machines, a second outbuf is allocated for translations, + but only if unshrinking and only if translations are required. + + | binary mode | text mode + --------------------------------------------------- + big mem | big outbuf | big outbuf + big outbuf2 <- malloc'd here + small mem | small outbuf | half + half small outbuf + + Copyright 1994, 1995 Greg Roelofs. See the accompanying file "COPYING" + in UnZip 5.20 (or later) source or binary distributions. + + ---------------------------------------------------------------------------*/ + + +#define UNZIP_INTERNAL +#include "unzip.h" /* defines LZW_CLEAN by default */ + + +#ifndef LZW_CLEAN + +static void partial_clear OF((__GPRO)); + +#ifdef DEBUG +# define OUTDBG(c) \ + if ((c)<32 || (c)>=127) fprintf(stderr,"\\x%02x",(c)); else putc((c),stderr); +#else +# define OUTDBG(c) +#endif + +/* HSIZE is defined as 2^13 (8192) in unzip.h */ +#define BOGUSCODE 256 +#define FLAG_BITS parent /* upper bits of parent[] used as flag bits */ +#define CODE_MASK (HSIZE - 1) /* 0x1fff (lower bits are parent's index) */ +#define FREE_CODE HSIZE /* 0x2000 (code is unused or was cleared) */ +#define HAS_CHILD (HSIZE << 1) /* 0x4000 (code has a child--do not clear) */ + +#define parent G.area.shrink.Parent +#define Value G.area.shrink.value /* "value" conflicts with Pyramid ioctl.h */ +#define stack G.area.shrink.Stack + + +/***********************/ +/* Function unshrink() */ +/***********************/ + +int unshrink(__G) + __GDEF +{ + int offset = (HSIZE - 1); + uch *stacktop = stack + offset; + register uch *newstr; + int codesize=9, len, KwKwK, error; + shrint code, oldcode, freecode, curcode; + shrint lastfreecode; + unsigned int outbufsiz; +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) + /* Normally realbuf and outbuf will be the same. However, if the data + * are redirected to a large memory buffer, realbuf will point to the + * new location while outbuf will remain pointing to the malloc'd + * memory buffer. */ + uch *realbuf = G.outbuf; +#else +# define realbuf G.outbuf +#endif + + +/*--------------------------------------------------------------------------- + Initialize various variables. + ---------------------------------------------------------------------------*/ + + lastfreecode = BOGUSCODE; + +#ifndef VMS /* VMS uses its own buffer scheme for textmode flush(). */ +#ifndef SMALL_MEM + /* non-memory-limited machines: allocate second (large) buffer for + * textmode conversion in flush(), but only if needed */ + if (G.pInfo->textmode && !G.outbuf2 && + (G.outbuf2 = (uch *)malloc(TRANSBUFSIZ)) == (uch *)NULL) + return PK_MEM3; +#endif +#endif /* !VMS */ + + for (code = 0; code < BOGUSCODE; ++code) { + Value[code] = (uch)code; + parent[code] = BOGUSCODE; + } + for (code = BOGUSCODE+1; code < HSIZE; ++code) + parent[code] = FREE_CODE; + +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) + if (G.redirect_slide) { /* use normal outbuf unless we're a DLL routine */ + realbuf = G.redirect_buffer; + outbufsiz = G.redirect_size; + } else +#endif +#ifdef DLL + if (G.pInfo->textmode && !G.redirect_data) +#else + if (G.pInfo->textmode) +#endif + outbufsiz = RAWBUFSIZ; + else + outbufsiz = OUTBUFSIZ; + G.outptr = realbuf; + G.outcnt = 0L; + +/*--------------------------------------------------------------------------- + Get and output first code, then loop over remaining ones. + ---------------------------------------------------------------------------*/ + + READBITS(codesize, oldcode) + if (!G.zipeof) { + *G.outptr++ = (uch)oldcode; + OUTDBG((uch)oldcode) + ++G.outcnt; + } + + do { + READBITS(codesize, code) + if (G.zipeof) + break; + if (code == BOGUSCODE) { /* possible to have consecutive escapes? */ + READBITS(codesize, code) + if (code == 1) { + ++codesize; + Trace((stderr, " (codesize now %d bits)\n", codesize)); + } else if (code == 2) { + Trace((stderr, " (partial clear code)\n")); + partial_clear(__G); /* clear leafs (nodes with no children) */ + Trace((stderr, " (done with partial clear)\n")); + lastfreecode = BOGUSCODE; /* reset start of free-node search */ + } + continue; + } + + /*----------------------------------------------------------------------- + Translate code: traverse tree from leaf back to root. + -----------------------------------------------------------------------*/ + + newstr = stacktop; + curcode = code; + + if (parent[curcode] == FREE_CODE) { + /* or (FLAG_BITS[curcode] & FREE_CODE)? */ + KwKwK = TRUE; + Trace((stderr, " (found a KwKwK code %d; oldcode = %d)\n", code, + oldcode)); + --newstr; /* last character will be same as first character */ + curcode = oldcode; + } else + KwKwK = FALSE; + + do { + *newstr-- = Value[curcode]; + curcode = (shrint)(parent[curcode] & CODE_MASK); + } while (curcode != BOGUSCODE); + + len = (int)(stacktop - newstr++); + if (KwKwK) + *stacktop = *newstr; + + /*----------------------------------------------------------------------- + Write expanded string in reverse order to output buffer. + -----------------------------------------------------------------------*/ + + Trace((stderr, "code %4d; oldcode %4d; char %3d (%c); string [", code, + oldcode, (int)(*newstr), (*newstr<32 || *newstr>=127)? ' ':*newstr)); + + { + register uch *p; + + for (p = newstr; p < newstr+len; ++p) { + *G.outptr++ = *p; + OUTDBG(*p) + if (++G.outcnt == outbufsiz) { + Trace((stderr, "doing flush(), outcnt = %lu\n", G.outcnt)); + if ((error = flush(__G__ realbuf, G.outcnt, TRUE)) != 0) + fprintf(stderr, "unshrink: flush() error (%d)\n", + error); + Trace((stderr, "done with flush()\n")); + G.outptr = realbuf; + G.outcnt = 0L; + } + } + } + + /*----------------------------------------------------------------------- + Add new leaf (first character of newstr) to tree as child of oldcode. + -----------------------------------------------------------------------*/ + + /* search for freecode */ + freecode = (shrint)(lastfreecode + 1); + /* add if-test before loop for speed? */ + while (parent[freecode] != FREE_CODE) + ++freecode; + lastfreecode = freecode; + Trace((stderr, "]; newcode %d\n", freecode)); + + Value[freecode] = *newstr; + parent[freecode] = oldcode; + oldcode = code; + + } while (!G.zipeof); + +/*--------------------------------------------------------------------------- + Flush any remaining data and return to sender... + ---------------------------------------------------------------------------*/ + + if (G.outcnt > 0L) { + Trace((stderr, "doing final flush(), outcnt = %lu\n", G.outcnt)); + if ((error = flush(__G__ realbuf, G.outcnt, TRUE)) != 0) + fprintf(stderr, "unshrink: flush() error (%d)\n", error); + Trace((stderr, "done with flush()\n")); + } + + return PK_OK; + +} /* end function unshrink() */ + + + + + +/****************************/ +/* Function partial_clear() */ /* no longer recursive... */ +/****************************/ + +static void partial_clear(__G) + __GDEF +{ + register shrint code; + + /* clear all nodes which have no children (i.e., leaf nodes only) */ + + /* first loop: mark each parent as such */ + for (code = BOGUSCODE+1; code < HSIZE; ++code) { + register shrint cparent = (shrint)(parent[code] & CODE_MASK); + + if (cparent > BOGUSCODE && cparent != FREE_CODE) + FLAG_BITS[cparent] |= HAS_CHILD; /* set parent's child-bit */ + } + + /* second loop: clear all nodes *not* marked as parents; reset flag bits */ + for (code = BOGUSCODE+1; code < HSIZE; ++code) { + if (FLAG_BITS[code] & HAS_CHILD) /* just clear child-bit */ + FLAG_BITS[code] &= ~HAS_CHILD; + else { /* leaf: lose it */ + Trace((stderr, "%d\n", code)); + parent[code] = FREE_CODE; + } + } + + return; +} + +#endif /* !LZW_CLEAN */ diff --git a/Build/source/extra/unzip/unzip.dep b/Build/source/extra/unzip/unzip.dep new file mode 100644 index 00000000000..bd73bc2bbbd --- /dev/null +++ b/Build/source/extra/unzip/unzip.dep @@ -0,0 +1,191 @@ +# Microsoft Developer Studio Generated Dependency File, included by unzip.mak + +.\api.c : \ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\version.h"\ + ".\win32\w32cfg.h"\ + ".\windll\decs.h"\ + ".\windll\structs.h"\ + ".\windll\windll.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\crc32.c : \ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\w32cfg.h"\ + ".\windll\structs.h"\ + ".\zip.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\crctab.c : \ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\w32cfg.h"\ + ".\windll\structs.h"\ + ".\zip.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\explode.c : \ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\w32cfg.h"\ + ".\windll\structs.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\extract.c : \ + ".\crypt.h"\ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\w32cfg.h"\ + ".\windll\decs.h"\ + ".\windll\structs.h"\ + ".\windll\windll.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\fileio.c : \ + ".\crypt.h"\ + ".\ebcdic.h"\ + ".\globals.h"\ + ".\ttyio.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\w32cfg.h"\ + ".\windll\decs.h"\ + ".\windll\structs.h"\ + ".\windll\windll.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\globals.c : \ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\w32cfg.h"\ + ".\windll\structs.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\inflate.c : \ + ".\globals.h"\ + ".\inflate.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\w32cfg.h"\ + ".\windll\structs.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\list.c : \ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\w32cfg.h"\ + ".\windll\decs.h"\ + ".\windll\structs.h"\ + ".\windll\windll.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\match.c : \ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\w32cfg.h"\ + ".\windll\structs.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\win32\nt.c : \ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\nt.h"\ + ".\win32\w32cfg.h"\ + ".\windll\structs.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\process.c : \ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\w32cfg.h"\ + ".\windll\decs.h"\ + ".\windll\structs.h"\ + ".\windll\windll.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\ttyio.c : \ + ".\crypt.h"\ + ".\globals.h"\ + ".\ttyio.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\w32cfg.h"\ + ".\windll\structs.h"\ + ".\zip.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\unreduce.c : \ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\w32cfg.h"\ + ".\windll\structs.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\unshrink.c : \ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\w32cfg.h"\ + ".\windll\structs.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\win32\win32.c : \ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\nt.h"\ + ".\win32\w32cfg.h"\ + ".\windll\structs.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\windll\windll.c : \ + ".\consts.h"\ + ".\crypt.h"\ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\version.h"\ + ".\win32\w32cfg.h"\ + ".\windll\decs.h"\ + ".\windll\structs.h"\ + ".\windll\windll.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + + +.\zipinfo.c : \ + ".\globals.h"\ + ".\unzip.h"\ + ".\unzpriv.h"\ + ".\win32\w32cfg.h"\ + ".\windll\structs.h"\ + "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ + diff --git a/Build/source/extra/unzip/unzip.dsp b/Build/source/extra/unzip/unzip.dsp new file mode 100644 index 00000000000..51a1f2edbe1 --- /dev/null +++ b/Build/source/extra/unzip/unzip.dsp @@ -0,0 +1,258 @@ +# Microsoft Developer Studio Project File - Name="unzip" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=unzip - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "unzip.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "unzip.mak" CFG="unzip - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "unzip - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "unzip - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "unzip - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "./" /I "../" /I "../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /FD /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x40c /d "NDEBUG" +# ADD RSC /l 0x40c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "unzip - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /MTd /W3 /Gm- /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "NDEBUG" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /FD /GZ /c +# SUBTRACT CPP /nologo /YX +# ADD BASE RSC /l 0x40c /d "_DEBUG" +# ADD RSC /l 0x40c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ENDIF + +# Begin Target + +# Name "unzip - Win32 Release" +# Name "unzip - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\api.c +# End Source File +# Begin Source File + +SOURCE=.\crc32.c +# End Source File +# Begin Source File + +SOURCE=.\crctab.c +# End Source File +# Begin Source File + +SOURCE=.\crypt.c +# End Source File +# Begin Source File + +SOURCE=.\explode.c +# End Source File +# Begin Source File + +SOURCE=.\extract.c +# End Source File +# Begin Source File + +SOURCE=.\fileio.c +# End Source File +# Begin Source File + +SOURCE=.\globals.c +# End Source File +# Begin Source File + +SOURCE=.\inflate.c +# End Source File +# Begin Source File + +SOURCE=.\list.c +# End Source File +# Begin Source File + +SOURCE=.\match.c +# End Source File +# Begin Source File + +SOURCE=.\win32\nt.c + +!IF "$(CFG)" == "unzip - Win32 Release" + +!ELSEIF "$(CFG)" == "unzip - Win32 Debug" + +# ADD CPP /I "../" /I "./" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\process.c +# End Source File +# Begin Source File + +SOURCE=.\ttyio.c +# End Source File +# Begin Source File + +SOURCE=.\unreduce.c +# End Source File +# Begin Source File + +SOURCE=.\unshrink.c +# End Source File +# Begin Source File + +SOURCE=.\win32\win32.c + +!IF "$(CFG)" == "unzip - Win32 Release" + +!ELSEIF "$(CFG)" == "unzip - Win32 Debug" + +# ADD CPP /I "../" /I "./" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\windll\windll.c + +!IF "$(CFG)" == "unzip - Win32 Release" + +!ELSEIF "$(CFG)" == "unzip - Win32 Debug" + +# ADD CPP /I "../" /I "./" +# SUBTRACT CPP /nologo /YX /Yc /Yu + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\zipinfo.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\consts.h +# End Source File +# Begin Source File + +SOURCE=.\crypt.h +# End Source File +# Begin Source File + +SOURCE=.\windll\decs.h +# End Source File +# Begin Source File + +SOURCE=.\ebcdic.h +# End Source File +# Begin Source File + +SOURCE=.\globals.h +# End Source File +# Begin Source File + +SOURCE=.\inflate.h +# End Source File +# Begin Source File + +SOURCE=.\win32\nt.h +# End Source File +# Begin Source File + +SOURCE=.\windll\structs.h +# End Source File +# Begin Source File + +SOURCE=.\ttyio.h +# End Source File +# Begin Source File + +SOURCE=.\unzip.h +# End Source File +# Begin Source File + +SOURCE=.\unzpriv.h +# End Source File +# Begin Source File + +SOURCE=.\version.h +# End Source File +# Begin Source File + +SOURCE=.\win32\w32cfg.h +# End Source File +# Begin Source File + +SOURCE=.\windll\windll.h +# End Source File +# Begin Source File + +SOURCE=.\zip.h +# End Source File +# End Group +# End Target +# End Project diff --git a/Build/source/extra/unzip/unzip.dsw b/Build/source/extra/unzip/unzip.dsw new file mode 100644 index 00000000000..43f75699e1b --- /dev/null +++ b/Build/source/extra/unzip/unzip.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "unzip"=".\unzip.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/Build/source/extra/unzip/unzip.h b/Build/source/extra/unzip/unzip.h new file mode 100644 index 00000000000..be12eda7d75 --- /dev/null +++ b/Build/source/extra/unzip/unzip.h @@ -0,0 +1,545 @@ +/*--------------------------------------------------------------------------- + + unzip.h (new) + + This header file contains the public macros and typedefs required by + both the UnZip sources and by any application using the UnZip API. If + UNZIP_INTERNAL is defined, it includes unzpriv.h (containing includes, + prototypes and extern variables used by the actual UnZip sources). + + ---------------------------------------------------------------------------*/ + + +#ifndef __unzip_h /* prevent multiple inclusions */ +#define __unzip_h + +/*--------------------------------------------------------------------------- + Predefined, machine-specific macros. + ---------------------------------------------------------------------------*/ + +#ifdef __GO32__ /* MS-DOS extender: NOT Unix */ +# ifdef unix +# undef unix +# endif +# ifdef __unix +# undef __unix +# endif +# ifdef __unix__ +# undef __unix__ +# endif +#endif + +#if ((defined(__convex__) || defined(__convexc__)) && !defined(CONVEX)) +# define CONVEX +#endif + +#if (defined(unix) || defined(__unix) || defined(__unix__)) +# ifndef UNIX +# define UNIX +# endif +#endif /* unix || __unix || __unix__ */ +#if (defined(M_XENIX) || defined(COHERENT) || defined(__hpux)) +# ifndef UNIX +# define UNIX +# endif +#endif /* M_XENIX || COHERENT || __hpux */ +#if (defined(CONVEX) || defined(MINIX) || defined(_AIX) || defined(__QNX__)) +# ifndef UNIX +# define UNIX +# endif +#endif /* CONVEX || MINIX || _AIX || __QNX__ */ + +#if (defined(VM_CMS) || defined(MVS)) +# define CMS_MVS +#endif + +#if (defined(__OS2__) && !defined(OS2)) +# define OS2 +#endif + +#if (defined(__TANDEM) && !defined(TANDEM)) +# define TANDEM +#endif + +#if (defined(__VMS) && !defined(VMS)) +# define VMS +#endif + +#if ((defined(__WIN32__) || defined(_WIN32)) && !defined(WIN32)) +# define WIN32 +#endif +#if ((defined(__WINNT__) || defined(__WINNT)) && !defined(WIN32)) +# define WIN32 +#endif + +#ifdef __COMPILER_KCC__ +# include +# ifdef SYS_T20 +# define TOPS20 +# endif +#endif /* __COMPILER_KCC__ */ + +/* Borland C does not define __TURBOC__ if compiling for a 32-bit platform */ +#ifdef __BORLANDC__ +# ifndef __TURBOC__ +# define __TURBOC__ +# endif +# if (!defined(__MSDOS__) && !defined(OS2) && !defined(WIN32)) +# define __MSDOS__ +# endif +#endif + +/* define MSDOS for Turbo C (unless OS/2) and Power C as well as Microsoft C */ +#ifdef __POWERC +# define __TURBOC__ +# define MSDOS +#endif /* __POWERC */ + +#if (defined(__MSDOS__) && !defined(MSDOS)) /* just to make sure */ +# define MSDOS +#endif + +/* RSXNTDJ (at least up to v1.3) compiles for WIN32 (RSXNT) using a derivate + of the EMX environment, but defines MSDOS and __GO32__. ARG !!! */ +#if (defined(MSDOS) && defined(WIN32)) +# undef MSDOS /* WIN32 is >>>not<<< MSDOS */ +#endif +#if (defined(__GO32__) && defined(__EMX__) && defined(__RSXNT__)) +# undef __GO32__ +#endif + +#if (defined(linux) && !defined(LINUX)) +# define LINUX +#endif + +#ifdef __riscos +# define RISCOS +#endif + +#if (defined(THINK_C) || defined(MPW)) +# define MACOS +#endif +#if (defined(__MWERKS__) && defined(macintosh)) +# define MACOS +#endif + +/* use prototypes and ANSI libraries if __STDC__, or Microsoft or Borland C, or + * Silicon Graphics, or Convex?, or IBM C Set/2, or GNU gcc/emx, or Watcom C, + * or Macintosh, or Windows NT, or Sequent, or Atari or IBM RS/6000. + */ +#if (defined(__STDC__) || defined(MSDOS) || defined(WIN32) || defined(__EMX__)) +# ifndef PROTO +# define PROTO +# endif +# ifndef MODERN +# define MODERN +# endif +#endif +#if (defined(__IBMC__) || defined(__BORLANDC__) || defined(__WATCOMC__)) +# ifndef PROTO +# define PROTO +# endif +# ifndef MODERN +# define MODERN +# endif +#endif +#if (defined(MACOS) || defined(ATARI_ST) || defined(RISCOS)) +# ifndef PROTO +# define PROTO +# endif +# ifndef MODERN +# define MODERN +# endif +#endif +/* Sequent running Dynix/ptx: non-modern compiler */ +#if (defined(_AIX) || defined(sgi) || (defined(_SEQUENT_) && !defined(PTX))) +# ifndef PROTO +# define PROTO +# endif +# ifndef MODERN +# define MODERN +# endif +#endif +#if (defined(CMS_MVS) || defined(__BEOS__)) /* || defined(CONVEX) */ +# ifndef PROTO +# define PROTO +# endif +# ifndef MODERN +# define MODERN +# endif +#endif + +/* turn off prototypes if requested */ +#if (defined(NOPROTO) && defined(PROTO)) +# undef PROTO +#endif + +/* used to remove arguments in function prototypes for non-ANSI C */ +#ifdef PROTO +# define OF(a) a +#else +# define OF(a) () +#endif + +/* enable the "const" keyword only if MODERN and if not otherwise instructed */ +#ifdef MODERN +# if (!defined(ZCONST) && (defined(USE_CONST) || !defined(NO_CONST))) +# define ZCONST const +# endif +#endif + +#ifndef ZCONST +# define ZCONST +#endif + + +/*--------------------------------------------------------------------------- + Grab system-specific public include headers. + ---------------------------------------------------------------------------*/ + +#ifdef POCKET_UNZIP /* WinCE port */ +# include "wince/punzip.h" /* must appear before windows.h */ +#endif + +#ifdef WINDLL +# include +# include "windll/structs.h" +#endif + +/*--------------------------------------------------------------------------- + Grab system-dependent definition of EXPENTRY for prototypes below. + ---------------------------------------------------------------------------*/ + +#if 0 +#if (defined(OS2) && !defined(FUNZIP)) +# ifdef UNZIP_INTERNAL +# define INCL_NOPM +# define INCL_DOSNLS +# define INCL_DOSPROCESS +# define INCL_DOSDEVICES +# define INCL_DOSDEVIOCTL +# define INCL_DOSERRORS +# define INCL_DOSMISC +# ifdef OS2DLL +# define INCL_REXXSAA +# include +# endif +# endif /* UNZIP_INTERNAL */ +# include +# define UZ_EXP EXPENTRY +#endif /* OS2 && !FUNZIP */ +#endif /* 0 */ + +#if (defined(OS2) && !defined(FUNZIP)) +# if (defined(__IBMC__) || defined(__WATCOMC__)) +# define UZ_EXP _System /* compiler keyword */ +# else +# define UZ_EXP +# endif +#endif /* OS2 && !FUNZIP */ + +#if (defined(WINDLL) || defined(USE_UNZIP_LIB)) +# ifndef EXPENTRY +# define UZ_EXP WINAPI +# else +# define UZ_EXP EXPENTRY +# endif +#endif + +#ifndef UZ_EXP +# define UZ_EXP +#endif + + +/*--------------------------------------------------------------------------- + Public typedefs. + ---------------------------------------------------------------------------*/ + +#ifndef _IZ_TYPES_DEFINED +#ifdef MODERN + typedef void zvoid; +#else /* !MODERN */ +# ifndef AOS_VS /* mostly modern? */ +# ifndef VAXC /* not fully modern, but has knows 'void' */ +# define void int +# endif /* !VAXC */ +# endif /* !AOS_VS */ + typedef char zvoid; +#endif /* ?MODERN */ +typedef unsigned char uch; /* code assumes unsigned bytes; these type- */ +typedef unsigned short ush; /* defs replace byte/UWORD/ULONG (which are */ +typedef unsigned long ulg; /* predefined on some systems) & match zip */ +#define _IZ_TYPES_DEFINED +#endif /* !_IZ_TYPES_DEFINED */ + +/* InputFn is not yet used and is likely to change: */ +#ifdef PROTO + typedef int (UZ_EXP MsgFn) (zvoid *pG, uch *buf, ulg size, int flag); + typedef int (UZ_EXP InputFn) (zvoid *pG, uch *buf, int *size, int flag); + typedef void (UZ_EXP PauseFn) (zvoid *pG, ZCONST char *prompt, int flag); + typedef int (UZ_EXP PasswdFn) (zvoid *pG, int *rcnt, char *pwbuf, + int size, ZCONST char *zfn, + ZCONST char *efn); + typedef int (UZ_EXP StatCBFn) (zvoid *pG, int fnflag, ZCONST char *zfn, + ZCONST char *efn, ZCONST zvoid *details); + typedef void (UZ_EXP UsrIniFn) (void); +#else /* !PROTO */ + typedef int (UZ_EXP MsgFn) (); + typedef int (UZ_EXP InputFn) (); + typedef void (UZ_EXP PauseFn) (); + typedef int (UZ_EXP PasswdFn) (); + typedef int (UZ_EXP StatCBFn) (); + typedef void (UZ_EXP UsrIniFn) (); +#endif /* ?PROTO */ + +typedef struct _UzpBuffer { /* rxstr */ + ulg strlength; /* length of string */ + char *strptr; /* pointer to string */ +} UzpBuffer; + +typedef struct _UzpInit { + ulg structlen; /* length of the struct being passed */ + + /* GRR: can we assume that each of these is a 32-bit pointer? if not, + * does it matter? add "far" keyword to make sure? */ + MsgFn *msgfn; + InputFn *inputfn; + PauseFn *pausefn; + UsrIniFn *userfn; /* user init function to be called after */ + /* globals constructed and initialized */ + + /* pointer to program's environment area or something? */ + /* hooks for performance testing? */ + /* hooks for extra unzip -v output? (detect CPU or other hardware?) */ + /* anything else? let me (Greg) know... */ +} UzpInit; + +typedef struct _UzpCB { + ulg structlen; /* length of the struct being passed */ + /* GRR: can we assume that each of these is a 32-bit pointer? if not, + * does it matter? add "far" keyword to make sure? */ + MsgFn *msgfn; + InputFn *inputfn; + PauseFn *pausefn; + PasswdFn *passwdfn; + StatCBFn *statrepfn; +} UzpCB; + +/* the collection of general UnZip option flags and option arguments */ +typedef struct _UzpOpts { +#ifndef FUNZIP + char *exdir; /* pointer to extraction root directory (-d option) */ + char *pwdarg; /* pointer to command-line password (-P option) */ + int zipinfo_mode; /* behave like ZipInfo or like normal UnZip? */ + int aflag; /* -a: do ASCII-EBCDIC and/or end-of-line translation */ +#ifdef VMS + int bflag; /* -b: force fixed record format for binary files */ +#endif +#ifdef UNIXBACKUP + int B_flag; /* -B: back up existing files by renaming to *~ first */ +#endif + int cflag; /* -c: output to stdout */ + int C_flag; /* -C: match filenames case-insensitively */ +#ifdef MACOS + int E_flag; /* -E: [MacOS] show Mac extra field during restoring */ +#endif + int fflag; /* -f: "freshen" (extract only newer files) */ +#if (defined(RISCOS) || defined(ACORN_FTYPE_NFS)) + int acorn_nfs_ext; /* -F: RISC OS types & NFS filetype extensions */ +#endif + int hflag; /* -h: header line (zipinfo) */ +#ifdef MACOS + int i_flag; /* -i: [MacOS] ignore filenames stored in Mac e.f. */ +#endif +#ifdef RISCOS + int scanimage; /* -I: scan image files */ +#endif + int jflag; /* -j: junk pathnames (unzip) */ +#if (defined(__BEOS__) || defined(MACOS)) + int J_flag; /* -J: ignore BeOS/MacOS extra field info (unzip) */ +#endif + int lflag; /* -12slmv: listing format (zipinfo) */ + int L_flag; /* -L: convert filenames from some OSes to lowercase */ + int overwrite_none; /* -n: never overwrite files (no prompting) */ +#ifdef AMIGA + int N_flag; /* -N: restore comments as AmigaDOS filenotes */ +#endif + int overwrite_all; /* -o: OK to overwrite files without prompting */ +#endif /* !FUNZIP */ + int qflag; /* -q: produce a lot less output */ +#ifndef FUNZIP +#if (defined(MSDOS) || defined(FLEXOS) || defined(OS2) || defined(WIN32)) + int sflag; /* -s: convert spaces in filenames to underscores */ +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WIN32)) + int volflag; /* -$: extract volume labels */ +#endif + int tflag; /* -t: test (unzip) or totals line (zipinfo) */ + int T_flag; /* -T: timestamps (unzip) or dec. time fmt (zipinfo) */ + int uflag; /* -u: "update" (extract only newer/brand-new files) */ + int vflag; /* -v: (verbosely) list directory */ + int V_flag; /* -V: don't strip VMS version numbers */ +#if (defined(TANDEM) || defined(UNIX) || defined(VMS) || defined(__BEOS__)) + int X_flag; /* -X: restore owner/protection or UID/GID or ACLs */ +#endif +#if (defined(OS2) || defined(WIN32)) + int X_flag; /* -X: restore owner/protection or UID/GID or ACLs */ +#endif + int zflag; /* -z: display the zipfile comment (only, for unzip) */ +#endif /* !FUNZIP */ +} UzpOpts; + +/* intended to be a private struct: */ +typedef struct _ver { + uch major; /* e.g., integer 5 */ + uch minor; /* e.g., 2 */ + uch patchlevel; /* e.g., 0 */ + uch not_used; +} _version_type; + +typedef struct _UzpVer { + ulg structlen; /* length of the struct being passed */ + ulg flag; /* bit 0: is_beta bit 1: uses_zlib */ + char *betalevel; /* e.g., "g BETA" or "" */ + char *date; /* e.g., "4 Sep 95" (beta) or "4 September 1995" */ + char *zlib_version; /* e.g., "0.95" or NULL */ + _version_type unzip; + _version_type zipinfo; + _version_type os2dll; + _version_type windll; +} UzpVer; + +/* for Visual BASIC access to Windows DLLs: */ +typedef struct _UzpVer2 { + ulg structlen; /* length of the struct being passed */ + ulg flag; /* bit 0: is_beta bit 1: uses_zlib */ + char betalevel[10]; /* e.g., "g BETA" or "" */ + char date[20]; /* e.g., "4 Sep 95" (beta) or "4 September 1995" */ + char zlib_version[10]; /* e.g., "0.95" or NULL */ + _version_type unzip; + _version_type zipinfo; + _version_type os2dll; + _version_type windll; +} UzpVer2; + +typedef struct central_directory_file_header { /* CENTRAL */ + uch version_made_by[2]; + uch version_needed_to_extract[2]; + ush general_purpose_bit_flag; + ush compression_method; + ulg last_mod_dos_datetime; + ulg crc32; + ulg csize; + ulg ucsize; + ush filename_length; + ush extra_field_length; + ush file_comment_length; + ush disk_number_start; + ush internal_file_attributes; + ulg external_file_attributes; + ulg relative_offset_local_header; +} cdir_file_hdr; + + +#define UZPINIT_LEN sizeof(UzpInit) +#define UZPVER_LEN sizeof(UzpVer) +#define cbList(func) int (* UZ_EXP func)(char *filename, cdir_file_hdr *crec) + + +/*--------------------------------------------------------------------------- + Return (and exit) values of the public UnZip API functions. + ---------------------------------------------------------------------------*/ + +/* external return codes */ +#define PK_OK 0 /* no error */ +#define PK_COOL 0 /* no error */ +#define PK_GNARLY 0 /* no error */ +#define PK_WARN 1 /* warning error */ +#define PK_ERR 2 /* error in zipfile */ +#define PK_BADERR 3 /* severe error in zipfile */ +#define PK_MEM 4 /* insufficient memory (during initialization) */ +#define PK_MEM2 5 /* insufficient memory (password failure) */ +#define PK_MEM3 6 /* insufficient memory (file decompression) */ +#define PK_MEM4 7 /* insufficient memory (memory decompression) */ +#define PK_MEM5 8 /* insufficient memory (not yet used) */ +#define PK_NOZIP 9 /* zipfile not found */ +#define PK_PARAM 10 /* bad or illegal parameters specified */ +#define PK_FIND 11 /* no files found */ +#define PK_DISK 50 /* disk full */ +#define PK_EOF 51 /* unexpected EOF */ + +#define IZ_CTRLC 80 /* user hit ^C to terminate */ +#define IZ_UNSUP 81 /* no files found: all unsup. compr/encrypt. */ +#define IZ_BADPWD 82 /* no files found: all had bad password */ + +/* internal and DLL-only return codes */ +#define IZ_DIR 76 /* potential zipfile is a directory */ +#define IZ_CREATED_DIR 77 /* directory created: set time and permissions */ +#define IZ_VOL_LABEL 78 /* volume label, but can't set on hard disk */ +#define IZ_EF_TRUNC 79 /* local extra field truncated (PKZIP'd) */ + +/* return codes of password fetches (negative = user abort; positive = error) */ +#define IZ_PW_ENTERED 0 /* got some password string; use/try it */ +#define IZ_PW_CANCEL -1 /* no password available (for this entry) */ +#define IZ_PW_CANCELALL -2 /* no password, skip any further pwd. request */ +#define IZ_PW_ERROR 5 /* = PK_MEM2 : failure (no mem, no tty, ...) */ + +/* flag values for status callback function */ +#define UZ_ST_START_EXTRACT 1 +#define UZ_ST_IN_PROGRESS 2 +#define UZ_ST_FINISH_MEMBER 3 + +/* return values of status callback function */ +#define UZ_ST_CONTINUE 0 +#define UZ_ST_BREAK 1 + + +/*--------------------------------------------------------------------------- + Prototypes for public UnZip API (DLL) functions. + ---------------------------------------------------------------------------*/ + +#define UzpMatch match + +int UZ_EXP UzpMain OF((int argc, char **argv)); +int UZ_EXP UzpAltMain OF((int argc, char **argv, UzpInit *init)); +UzpVer * UZ_EXP UzpVersion OF((void)); +void UZ_EXP UzpFreeMemBuffer OF((UzpBuffer *retstr)); +#ifndef WINDLL +int UZ_EXP UzpUnzipToMemory OF((char *zip, char *file, UzpOpts *optflgs, + UzpCB *UsrFunc, UzpBuffer *retstr)); +#endif +#ifndef WINDLL + int UZ_EXP UzpGrep OF((char *archive, char *file, + char *pattern, int cmd, int SkipBin, + UzpCB *UsrFunc)); +#endif +#ifdef OS2 +int UZ_EXP UzpFileTree OF((char *name, cbList(callBack), + char *cpInclude[], char *cpExclude[])); +#endif + +void UZ_EXP UzpVersion2 OF((UzpVer2 *version)); +int UZ_EXP UzpValidate OF((char *archive, int AllCodes)); + + +/* default I/O functions (can be swapped out via UzpAltMain() entry point): */ + +int UZ_EXP UzpMessagePrnt OF((zvoid *pG, uch *buf, ulg size, int flag)); +int UZ_EXP UzpMessageNull OF((zvoid *pG, uch *buf, ulg size, int flag)); +int UZ_EXP UzpInput OF((zvoid *pG, uch *buf, int *size, int flag)); +void UZ_EXP UzpMorePause OF((zvoid *pG, ZCONST char *prompt, int flag)); +int UZ_EXP UzpPassword OF((zvoid *pG, int *rcnt, char *pwbuf, + int size, ZCONST char *zfn, + ZCONST char *efn)); + + +/*--------------------------------------------------------------------------- + Remaining private stuff for UnZip compilation. + ---------------------------------------------------------------------------*/ + +#ifdef UNZIP_INTERNAL +# include "unzpriv.h" +#endif + + +#endif /* !__unzip_h */ diff --git a/Build/source/extra/unzip/unzip.mak b/Build/source/extra/unzip/unzip.mak new file mode 100644 index 00000000000..9095da86f09 --- /dev/null +++ b/Build/source/extra/unzip/unzip.mak @@ -0,0 +1,369 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on unzip.dsp +!IF "$(CFG)" == "" +CFG=unzip - Win32 Debug +!MESSAGE No configuration specified. Defaulting to unzip - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "unzip - Win32 Release" && "$(CFG)" != "unzip - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "unzip.mak" CFG="unzip - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "unzip - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "unzip - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "unzip - Win32 Release" + +OUTDIR=.\Release +INTDIR=.\Release +# Begin Custom Macros +OutDir=.\Release +# End Custom Macros + +ALL : "$(OUTDIR)\unzip.lib" + + +CLEAN : + -@erase "$(INTDIR)\api.obj" + -@erase "$(INTDIR)\crc32.obj" + -@erase "$(INTDIR)\crctab.obj" + -@erase "$(INTDIR)\crypt.obj" + -@erase "$(INTDIR)\explode.obj" + -@erase "$(INTDIR)\extract.obj" + -@erase "$(INTDIR)\fileio.obj" + -@erase "$(INTDIR)\globals.obj" + -@erase "$(INTDIR)\inflate.obj" + -@erase "$(INTDIR)\list.obj" + -@erase "$(INTDIR)\match.obj" + -@erase "$(INTDIR)\nt.obj" + -@erase "$(INTDIR)\process.obj" + -@erase "$(INTDIR)\ttyio.obj" + -@erase "$(INTDIR)\unreduce.obj" + -@erase "$(INTDIR)\unshrink.obj" + -@erase "$(INTDIR)\vc60.idb" + -@erase "$(INTDIR)\win32.obj" + -@erase "$(INTDIR)\windll.obj" + -@erase "$(INTDIR)\zipinfo.obj" + -@erase "$(OUTDIR)\unzip.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /MT /W3 /GX /O2 /I "./" /I "../" /I "../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\unzip.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"$(OUTDIR)\unzip.lib" +LIB32_OBJS= \ + "$(INTDIR)\api.obj" \ + "$(INTDIR)\crc32.obj" \ + "$(INTDIR)\crctab.obj" \ + "$(INTDIR)\crypt.obj" \ + "$(INTDIR)\explode.obj" \ + "$(INTDIR)\extract.obj" \ + "$(INTDIR)\fileio.obj" \ + "$(INTDIR)\globals.obj" \ + "$(INTDIR)\inflate.obj" \ + "$(INTDIR)\list.obj" \ + "$(INTDIR)\match.obj" \ + "$(INTDIR)\nt.obj" \ + "$(INTDIR)\process.obj" \ + "$(INTDIR)\ttyio.obj" \ + "$(INTDIR)\unreduce.obj" \ + "$(INTDIR)\unshrink.obj" \ + "$(INTDIR)\win32.obj" \ + "$(INTDIR)\windll.obj" \ + "$(INTDIR)\zipinfo.obj" + +"$(OUTDIR)\unzip.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "unzip - Win32 Debug" + +OUTDIR=.\Debug +INTDIR=.\Debug +# Begin Custom Macros +OutDir=.\Debug +# End Custom Macros + +ALL : "$(OUTDIR)\unzip.lib" + + +CLEAN : + -@erase "$(INTDIR)\api.obj" + -@erase "$(INTDIR)\crc32.obj" + -@erase "$(INTDIR)\crctab.obj" + -@erase "$(INTDIR)\crypt.obj" + -@erase "$(INTDIR)\explode.obj" + -@erase "$(INTDIR)\extract.obj" + -@erase "$(INTDIR)\fileio.obj" + -@erase "$(INTDIR)\globals.obj" + -@erase "$(INTDIR)\inflate.obj" + -@erase "$(INTDIR)\list.obj" + -@erase "$(INTDIR)\match.obj" + -@erase "$(INTDIR)\nt.obj" + -@erase "$(INTDIR)\process.obj" + -@erase "$(INTDIR)\ttyio.obj" + -@erase "$(INTDIR)\unreduce.obj" + -@erase "$(INTDIR)\unshrink.obj" + -@erase "$(INTDIR)\vc60.idb" + -@erase "$(INTDIR)\vc60.pdb" + -@erase "$(INTDIR)\win32.obj" + -@erase "$(INTDIR)\windll.obj" + -@erase "$(INTDIR)\zipinfo.obj" + -@erase "$(OUTDIR)\unzip.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "NDEBUG" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\unzip.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"$(OUTDIR)\unzip.lib" +LIB32_OBJS= \ + "$(INTDIR)\api.obj" \ + "$(INTDIR)\crc32.obj" \ + "$(INTDIR)\crctab.obj" \ + "$(INTDIR)\crypt.obj" \ + "$(INTDIR)\explode.obj" \ + "$(INTDIR)\extract.obj" \ + "$(INTDIR)\fileio.obj" \ + "$(INTDIR)\globals.obj" \ + "$(INTDIR)\inflate.obj" \ + "$(INTDIR)\list.obj" \ + "$(INTDIR)\match.obj" \ + "$(INTDIR)\nt.obj" \ + "$(INTDIR)\process.obj" \ + "$(INTDIR)\ttyio.obj" \ + "$(INTDIR)\unreduce.obj" \ + "$(INTDIR)\unshrink.obj" \ + "$(INTDIR)\win32.obj" \ + "$(INTDIR)\windll.obj" \ + "$(INTDIR)\zipinfo.obj" + +"$(OUTDIR)\unzip.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(INTDIR)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(NO_EXTERNAL_DEPS)" != "1" +!IF EXISTS("unzip.dep") +!INCLUDE "unzip.dep" +!ELSE +!MESSAGE Warning: cannot find "unzip.dep" +!ENDIF +!ENDIF + + +!IF "$(CFG)" == "unzip - Win32 Release" || "$(CFG)" == "unzip - Win32 Debug" +SOURCE=.\api.c + +"$(INTDIR)\api.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\crc32.c + +"$(INTDIR)\crc32.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\crctab.c + +"$(INTDIR)\crctab.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\crypt.c + +"$(INTDIR)\crypt.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\explode.c + +"$(INTDIR)\explode.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\extract.c + +"$(INTDIR)\extract.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\fileio.c + +"$(INTDIR)\fileio.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\globals.c + +"$(INTDIR)\globals.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\inflate.c + +"$(INTDIR)\inflate.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\list.c + +"$(INTDIR)\list.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\match.c + +"$(INTDIR)\match.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\win32\nt.c + +!IF "$(CFG)" == "unzip - Win32 Release" + +CPP_SWITCHES=/nologo /MT /W3 /GX /O2 /I "./" /I "../" /I "../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c + +"$(INTDIR)\nt.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) @<< + $(CPP_SWITCHES) $(SOURCE) +<< + + +!ELSEIF "$(CFG)" == "unzip - Win32 Debug" + +CPP_SWITCHES=/MTd /W3 /GX /ZI /Od /I "../" /I "./" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "NDEBUG" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c + +"$(INTDIR)\nt.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) @<< + $(CPP_SWITCHES) $(SOURCE) +<< + + +!ENDIF + +SOURCE=.\process.c + +"$(INTDIR)\process.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\ttyio.c + +"$(INTDIR)\ttyio.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\unreduce.c + +"$(INTDIR)\unreduce.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\unshrink.c + +"$(INTDIR)\unshrink.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\win32\win32.c + +!IF "$(CFG)" == "unzip - Win32 Release" + +CPP_SWITCHES=/nologo /MT /W3 /GX /O2 /I "./" /I "../" /I "../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c + +"$(INTDIR)\win32.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) @<< + $(CPP_SWITCHES) $(SOURCE) +<< + + +!ELSEIF "$(CFG)" == "unzip - Win32 Debug" + +CPP_SWITCHES=/MTd /W3 /GX /ZI /Od /I "../" /I "./" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "NDEBUG" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c + +"$(INTDIR)\win32.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) @<< + $(CPP_SWITCHES) $(SOURCE) +<< + + +!ENDIF + +SOURCE=.\windll\windll.c + +!IF "$(CFG)" == "unzip - Win32 Release" + +CPP_SWITCHES=/nologo /MT /W3 /GX /O2 /I "./" /I "../" /I "../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c + +"$(INTDIR)\windll.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) @<< + $(CPP_SWITCHES) $(SOURCE) +<< + + +!ELSEIF "$(CFG)" == "unzip - Win32 Debug" + +CPP_SWITCHES=/MTd /W3 /GX /ZI /Od /I "../" /I "./" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "NDEBUG" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c + +"$(INTDIR)\windll.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) @<< + $(CPP_SWITCHES) $(SOURCE) +<< + + +!ENDIF + +SOURCE=.\zipinfo.c + +"$(INTDIR)\zipinfo.obj" : $(SOURCE) "$(INTDIR)" + + + +!ENDIF + diff --git a/Build/source/extra/unzip/unzip.plg b/Build/source/extra/unzip/unzip.plg new file mode 100644 index 00000000000..e35c65cb610 --- /dev/null +++ b/Build/source/extra/unzip/unzip.plg @@ -0,0 +1,30 @@ + + +
    +

    Build Log

    +

    +--------------------Configuration: unzip - Win32 Release-------------------- +

    +

    Command Lines

    +Creating temporary file "C:\DOCUME~1\FABRIC~1\LOCALS~1\Temp\RSP54BC.tmp" with contents +[ +/MT /W3 /GX /O2 /I "./" /I "../" /I "../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"Release/" /Fd"Release/" /FD /c +"D:\Source\fptex\texk\win32\unzip\win32\nt.c" +] +Creating command line "cl.exe @C:\DOCUME~1\FABRIC~1\LOCALS~1\Temp\RSP54BC.tmp" +

    Output Window

    +Compiling... +Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86 +Copyright (C) Microsoft Corp 1984-1998. All rights reserved. + +cl "/MT" "/W3" "/GX" "/O2" "/I" "./" "/I" "../" "/I" "../.." "/D" "WIN32" "/D" "NDEBUG" "/D" "_MBCS" "/D" "_LIB" "/D" "_WINDOWS" "/D" "WINDLL" "/D" "USE_EF_UT_TIME" "/D" "DLL" "/D" "UNZIPLIB" "/FoRelease/" "/FdRelease/" "/FD" "/c" "D:\Source\fptex\texk\win32\unzip\win32\nt.c" + +nt.c + + + +

    Results

    +nt.obj - 0 error(s), 0 warning(s) +
    + + diff --git a/Build/source/extra/unzip/unzip.vcproj b/Build/source/extra/unzip/unzip.vcproj new file mode 100644 index 00000000000..151816c4ad8 --- /dev/null +++ b/Build/source/extra/unzip/unzip.vcproj @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Build/source/extra/unzip/unzpriv.h b/Build/source/extra/unzip/unzpriv.h new file mode 100644 index 00000000000..dfac1528b2a --- /dev/null +++ b/Build/source/extra/unzip/unzpriv.h @@ -0,0 +1,2387 @@ +/*--------------------------------------------------------------------------- + + unzpriv.h + + This header file contains private (internal) macros, typedefs, prototypes + and global-variable declarations used by all of the UnZip source files. + In a prior life it was part of the main unzip.h header, but now it is only + included by that header if UNZIP_INTERNAL is defined. + + ---------------------------------------------------------------------------*/ + + + +#ifndef __unzpriv_h /* prevent multiple inclusions */ +#define __unzpriv_h + +/* First thing: Signal all following code that we compile UnZip utilities! */ +#ifndef UNZIP +# define UNZIP +#endif + +/* GRR 960204: MORE defined here in preparation for removal altogether */ +#ifndef MORE +# define MORE +#endif + +/* fUnZip should never need to be reentrant */ +#ifdef FUNZIP +# ifdef REENTRANT +# undef REENTRANT +# endif +# ifdef DLL +# undef DLL +# endif +#endif + +#if (defined(DLL) && !defined(REENTRANT)) +# define REENTRANT +#endif + +#if (!defined(DYNAMIC_CRC_TABLE) && !defined(FUNZIP)) +# define DYNAMIC_CRC_TABLE +#endif + +#if (defined(DYNAMIC_CRC_TABLE) && !defined(REENTRANT)) +# ifndef DYNALLOC_CRCTAB +# define DYNALLOC_CRCTAB +# endif +#endif + +/*--------------------------------------------------------------------------- + OS-dependent configuration for UnZip internals + ---------------------------------------------------------------------------*/ + +/* bad or (occasionally?) missing stddef.h: */ +#if (defined(M_XENIX) || defined(DNIX)) +# define NO_STDDEF_H +#endif + +#if (defined(M_XENIX) && !defined(M_UNIX)) /* SCO Xenix only, not SCO Unix */ +# define SCO_XENIX +# define NO_LIMITS_H /* no limits.h, but MODERN defined */ +# define NO_UID_GID /* no uid_t/gid_t */ +# define size_t int +#endif + +#ifdef realix /* Modcomp Real/IX, real-time SysV.3 variant */ +# define SYSV +# define NO_UID_GID /* no uid_t/gid_t */ +#endif + +#if (defined(_AIX) && !defined(_ALL_SOURCE)) +# define _ALL_SOURCE +#endif + +#if defined(apollo) /* defines __STDC__ */ +# define NO_STDLIB_H +#endif + +#ifdef DNIX +# define SYSV +# define SHORT_NAMES /* 14-char limitation on path components */ +/* # define FILENAME_MAX 14 */ +# define FILENAME_MAX NAME_MAX /* GRR: experiment */ +#endif + +#if (defined(SYSTEM_FIVE) || defined(__SYSTEM_FIVE)) +# ifndef SYSV +# define SYSV +# endif +#endif /* SYSTEM_FIVE || __SYSTEM_FIVE */ +#if (defined(M_SYSV) || defined(M_SYS5)) +# ifndef SYSV +# define SYSV +# endif +#endif /* M_SYSV || M_SYS5 */ +/* __SVR4 and __svr4__ catch Solaris on at least some combos of compiler+OS */ +#if (defined(__SVR4) || defined(__svr4__) || defined(sgi) || defined(__hpux)) +# ifndef SYSV +# define SYSV +# endif +#endif /* __SVR4 || __svr4__ || sgi || __hpux */ +#if (defined(LINUX) || defined(__QNX__)) +# ifndef SYSV +# define SYSV +# endif +#endif /* LINUX || __QNX__ */ + +#if (defined(ultrix) || defined(__ultrix) || defined(bsd4_2)) +# if (!defined(BSD) && !defined(SYSV)) +# define BSD +# endif +#endif /* ultrix || __ultrix || bsd4_2 */ +#if (defined(sun) || defined(pyr) || defined(CONVEX)) +# if (!defined(BSD) && !defined(SYSV)) +# define BSD +# endif +#endif /* sun || pyr || CONVEX */ + +#ifdef pyr /* Pyramid: has BSD and AT&T "universes" */ +# ifdef BSD +# define pyr_bsd +# define USE_STRINGS_H /* instead of more common string.h */ +# define ZMEM /* ZMEM now uses bcopy/bzero: not in AT&T universe */ +# endif /* (AT&T memcpy claimed to be very slow, though) */ +# define DECLARE_ERRNO +#endif /* pyr */ + +/* stat() bug for Borland, VAX C (also GNU?), and Atari ST MiNT on TOS + * filesystems: returns 0 for wildcards! (returns 0xffffffff on Minix + * filesystem or `U:' drive under Atari MiNT.) Watcom C was previously + * included on this list; it would be good to know what version the problem + * was fixed at, if it did exist. Watcom 10.6 has a separate stat() problem: + * it fails on "." when the current directory is a root. This is covered by + * giving it a separate definition of SSTAT in OS-specific header files. */ +#if (defined(__TURBOC__) || defined(VMS) || defined(__MINT__)) +# define WILD_STAT_BUG +#endif + +#ifdef WILD_STAT_BUG +# define SSTAT(path,pbuf) (iswild(path) || stat(path,pbuf)) +#else +# define SSTAT stat +#endif + +#ifdef REGULUS /* returns the inode number on success(!)...argh argh argh */ +# define stat(p,s) zstat((p),(s)) +#endif + +#define STRNICMP zstrnicmp + +/*--------------------------------------------------------------------------- + OS-dependent includes + ---------------------------------------------------------------------------*/ + +#ifdef EFT +# define LONGINT off_t /* Amdahl UTS nonsense ("extended file types") */ +#else +# define LONGINT long +#endif + +#ifdef MODERN +# ifndef NO_STDDEF_H +# include +# endif +# ifndef NO_STDLIB_H +# include /* standard library prototypes, malloc(), etc. */ +# endif + typedef size_t extent; +#else /* !MODERN */ +# ifndef AOS_VS /* mostly modern? */ + LONGINT lseek(); +# ifdef VAXC /* not fully modern, but does have stdlib.h and void */ +# include +# else + char *malloc(); +# endif /* ?VAXC */ +# endif /* !AOS_VS */ + typedef unsigned int extent; +#endif /* ?MODERN */ + + +#ifndef MINIX /* Minix needs it after all the other includes (?) */ +# include +#endif +#include /* skip for VMS, to use tolower() function? */ +#include /* used in mapname() */ +#ifdef USE_STRINGS_H +# include /* strcpy, strcmp, memcpy, index/rindex, etc. */ +#else +# include /* strcpy, strcmp, memcpy, strchr/strrchr, etc. */ +#endif +#if (defined(MODERN) && !defined(NO_LIMITS_H)) +# include /* GRR: EXPERIMENTAL! (can be deleted) */ +#endif + +/* this include must be down here for SysV.4, for some reason... */ +#include /* used in unzip.c, fileio.c */ + + +/*--------------------------------------------------------------------------- + API (DLL) section: + ---------------------------------------------------------------------------*/ + +#ifdef DLL +# define MAIN UZ_EXP UzpMain /* was UzpUnzip */ +# ifdef OS2DLL +# undef Info +# define REDIRECTC(c) varputchar(__G__ c) +# define REDIRECTPRINT(buf,size) varmessage(__G__ buf, size) +# define FINISH_REDIRECT() finish_REXX_redirect(__G) +# else +# define REDIRECTC(c) +# define REDIRECTPRINT(buf,size) 0 +# define FINISH_REDIRECT() close_redirect(__G) +# endif +#endif + +/*--------------------------------------------------------------------------- + Acorn RISCOS section: + ---------------------------------------------------------------------------*/ + +#ifdef RISCOS +# include "acorn/riscos.h" +#endif + +/*--------------------------------------------------------------------------- + Amiga section: + ---------------------------------------------------------------------------*/ + +#ifdef AMIGA +# include "amiga/amiga.h" +#endif + +/*--------------------------------------------------------------------------- + AOS/VS section (somewhat similar to Unix, apparently): + ---------------------------------------------------------------------------*/ + +#ifdef AOS_VS +# ifdef FILEIO_C +# include "aosvs/aosvs.h" +# endif +#endif + +/*--------------------------------------------------------------------------- + Atari ST section: + ---------------------------------------------------------------------------*/ + +#ifdef ATARI +# include +# include +# include +# include +# define SYMLINKS +# define EXE_EXTENSION ".tos" +# ifndef DATE_FORMAT +# define DATE_FORMAT DF_DMY +# endif +# define DIR_END '/' +# define INT_SPRINTF +# define timezone _timezone +# define lenEOL 2 +# define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} +# undef SHORT_NAMES +# if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) +# define TIMESTAMP +# endif +#endif + +/*--------------------------------------------------------------------------- + BeOS section: + ---------------------------------------------------------------------------*/ + +#ifdef __BEOS__ +# include /* [cjh]: This is pretty much a generic */ +# include /* POSIX 1003.1 system; see beos/ for */ +# include /* extra code to deal with our extra file */ +# include /* attributes. */ +# include +# include +# define DIRENT +# include +# ifndef DATE_FORMAT +# define DATE_FORMAT DF_MDY /* GRR: customize with locale.h somehow? */ +# endif +# define lenEOL 1 +# define PutNativeEOL *q++ = native(LF); +# define SCREENLINES screenlines() +# define USE_EF_UT_TIME +# define SET_DIR_ATTRIB +# if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) +# define TIMESTAMP +# endif +# define RESTORE_UIDGID +# define NO_GMTIME /* maybe DR10 will have timezones... */ +# define INT_SPRINTF +# define SYMLINKS +# define MAIN main_stub /* now that we're using a wrapper... */ +#endif + +/*--------------------------------------------------------------------------- + Human68k/X68000 section: + ---------------------------------------------------------------------------*/ + +#ifdef __human68k__ /* DO NOT DEFINE DOS_OS2 HERE! If Human68k is so much */ +# include /* like MS-DOS and/or OS/2, create DOS_H68_OS2 macro. */ +# include +# include +# include +# include +# include +# ifndef DATE_FORMAT +# define DATE_FORMAT DF_YMD /* Japanese standard */ +# endif + /* GRR: these EOL macros are guesses */ +# define lenEOL 2 +# define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} +# define EXE_EXTENSION ".exe" /* just a guess... */ +#endif + +/*--------------------------------------------------------------------------- + Mac section: + ---------------------------------------------------------------------------*/ + +#ifdef MACOS +# include "maccfg.h" +#endif /* MACOS */ + +/*--------------------------------------------------------------------------- + MS-DOS, OS/2, FLEXOS section: + ---------------------------------------------------------------------------*/ + +#ifdef WINDLL +# define MSWIN +# ifdef MORE +# undef MORE +# endif +# ifdef OS2_EAS +# undef OS2_EAS +# endif +#endif + +#if (defined(_MSC_VER) || (defined(M_I86) && !defined(__WATCOMC__))) +# ifndef MSC +# define MSC /* This should work for older MSC, too! */ +# endif +#endif + +#if (defined(MSDOS) || defined(OS2) || defined(FLEXOS)) +# include /* off_t, time_t, dev_t, ... */ +# include +# include /* lseek(), open(), setftime(), dup(), creat() */ +# include /* localtime() */ +# include /* O_BINARY for open() w/o CR/LF translation */ + +# ifdef OS2 /* defined for all OS/2 compilers */ +# include "os2/os2cfg.h" +# else +# ifdef FLEXOS +# include "flexos/flxcfg.h" +# else +# include "msdos/doscfg.h" +# endif +# endif + +# if (defined(_MSC_VER) && (_MSC_VER == 700) && !defined(GRR)) + /* + * ARGH. MSC 7.0 libraries think times are based on 1899 Dec 31 00:00, not + * 1970 Jan 1 00:00. So we have to diddle time_t's appropriately: add or + * subtract 70 years' worth of seconds; i.e., number of days times 86400; + * i.e., (70*365 regular days + 17 leap days + 1 1899 day) * 86400 == + * (25550 + 17 + 1) * 86400 == 2209075200 seconds. We know time_t is an + * unsigned long (ulg) on the only system with this bug. + */ +# define TIMET_TO_NATIVE(x) (x) += (ulg)2209075200L; +# define NATIVE_TO_TIMET(x) (x) -= (ulg)2209075200L; +# endif +# if (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0450)) +# define timezone _timezone +# endif +# if (defined(__GO32__) || defined(FLEXOS)) +# define DIR_END '/' +# else +# define DIR_END '\\' /* OS uses '\\' as directory separator */ +# define DIR_END2 '/' /* also check for '/' (RTL may convert) */ +# endif +# ifndef WIN32 +# ifdef DATE_FORMAT +# undef DATE_FORMAT +# endif +# define DATE_FORMAT dateformat() +# endif +# define lenEOL 2 +# define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} +# define USE_EF_UT_TIME +#endif /* MSDOS || OS2 || FLEXOS */ + +/*--------------------------------------------------------------------------- + MTS section (piggybacks UNIX, I think): + ---------------------------------------------------------------------------*/ + +#ifdef MTS +# include /* off_t, time_t, dev_t, ... */ +# include +# include /* MTS uses this instead of fcntl.h */ +# include +# include +# include /* some important non-ANSI routines */ +# define mkdir(s,n) (-1) /* no "make directory" capability */ +# define EBCDIC /* set EBCDIC conversion on */ +# define NO_STRNICMP /* unzip's is as good the one in MTS */ +# define USE_FWRITE +# define close_outfile() fclose(G.outfile) /* can't set time on files */ +# define umask(n) /* don't have umask() on MTS */ +# define FOPWT "w" /* open file for writing in TEXT mode */ +# ifndef DATE_FORMAT +# define DATE_FORMAT DF_MDY +# endif +# define lenEOL 1 +# define PutNativeEOL *q++ = native(LF); +#endif /* MTS */ + + /*--------------------------------------------------------------------------- + QDOS section + ---------------------------------------------------------------------------*/ + +#ifdef QDOS +# define DIRENT +# include +# include +# include +# include +# include "qdos/izqdos.h" +# ifndef DATE_FORMAT +# define DATE_FORMAT DF_MDY +# endif +# define lenEOL 1 +# define PutNativeEOL *q++ = native(LF); +# define DIR_END '_' +# define RETURN QReturn +# undef PATH_MAX +# define PATH_MAX 36 +# if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) +# define TIMESTAMP +# endif +#endif + +/*--------------------------------------------------------------------------- + Tandem NSK section: + ---------------------------------------------------------------------------*/ + +#ifdef TANDEM +# include "tandem.h" +# include + /* use a single LF delimiter so that writes to 101 text files work */ +# define PutNativeEOL *q++ = native(LF); +# define lenEOL 1 +# ifndef DATE_FORMAT +# define DATE_FORMAT DF_DMY +# endif +# define USE_EF_UT_TIME +# define RESTORE_UIDGID +#endif + +/*--------------------------------------------------------------------------- + TOPS-20 section: + ---------------------------------------------------------------------------*/ + +#ifdef TOPS20 +# include /* off_t, time_t, dev_t, ... */ +# include +# include +# include +# include +# include +# include +# include /* get amazing monsym() macro */ + extern int open(), close(), read(); + extern int stat(), unlink(), jsys(), fcntl(); + extern long lseek(), dup(), creat(); +# define strchr index /* GRR: necessary? */ +# define strrchr rindex +# define REALLY_SHORT_SYMS +# define NO_MKDIR +# define DIR_BEG '<' +# define DIR_END '>' +# define DIR_EXT ".directory" +# ifndef DATE_FORMAT +# define DATE_FORMAT DF_MDY +# endif +# define EXE_EXTENSION ".exe" /* just a guess... */ +#endif /* TOPS20 */ + +/*--------------------------------------------------------------------------- + Unix section: + ---------------------------------------------------------------------------*/ + +#ifdef UNIX +# include /* off_t, time_t, dev_t, ... */ +# include + +# ifndef COHERENT +# include /* O_BINARY for open() w/o CR/LF translation */ +# else /* COHERENT */ +# ifdef _I386 +# include /* Coherent 4.0.x, Mark Williams C */ +# else +# include /* Coherent 3.10, Mark Williams C */ +# endif +# define SHORT_SYMS +# ifndef __COHERENT__ /* Coherent 4.2 has tzset() */ +# define tzset settz +# endif +# endif /* ?COHERENT */ + +# ifndef NO_PARAM_H +# ifdef NGROUPS_MAX +# undef NGROUPS_MAX /* SCO bug: defined again in */ +# endif +# ifdef BSD +# define TEMP_BSD /* may be defined again in */ +# undef BSD +# endif +# include /* conflict with , some systems? */ +# ifdef TEMP_BSD +# undef TEMP_BSD +# ifndef BSD +# define BSD +# endif +# endif +# endif /* !NO_PARAM_H */ + +# ifdef __osf__ +# define DIRENT +# ifdef BSD +# undef BSD +# endif +# endif /* __osf__ */ + +# ifdef BSD +# include +# include +# ifdef _AIX +# include +# endif +# else +# include + struct tm *gmtime(), *localtime(); +# endif + +# if (defined(BSD4_4) || (defined(SYSV) && defined(MODERN))) +# include /* this includes utime.h on SGIs */ +# if (defined(BSD4_4) || defined(linux)) +# include +# define GOT_UTIMBUF +# endif +# endif + +# if (defined(V7) || defined(pyr_bsd)) +# define strchr index +# define strrchr rindex +# endif +# ifdef V7 +# define O_RDONLY 0 +# define O_WRONLY 1 +# define O_RDWR 2 +# endif + +# ifdef MINIX +# include +# endif +# ifndef DATE_FORMAT +# define DATE_FORMAT DF_MDY /* GRR: customize with locale.h somehow? */ +# endif +# define lenEOL 1 +# ifdef EBCDIC +# define PutNativeEOL *q++ = '\n'; +# else +# define PutNativeEOL *q++ = native(LF); +# endif +# define SCREENLINES screenlines() +# define USE_EF_UT_TIME +# define SET_DIR_ATTRIB +# if (!defined(TIMESTAMP) && !defined(NOTIMESTAMP)) /* GRR 970513 */ +# define TIMESTAMP +# endif +# define RESTORE_UIDGID +#endif /* UNIX */ + +/*--------------------------------------------------------------------------- + VM/CMS and MVS section: + ---------------------------------------------------------------------------*/ + +#ifdef CMS_MVS +# include "vmmvs.h" +# define CLOSE_INFILE() close_infile(__G) +#endif + +/*--------------------------------------------------------------------------- + VMS section: + ---------------------------------------------------------------------------*/ + +#ifdef VMS +# include /* GRR: experimenting... */ +# include +# include /* the usual non-BSD time functions */ +# include /* same things as fcntl.h has */ +# include +# include +# define _MAX_PATH (NAM$C_MAXRSS+1) /* to define FILNAMSIZ below */ +# ifdef RETURN_CODES /* VMS interprets standard PK return codes incorrectly */ +# define RETURN(ret) return_VMS(__G__ (ret)) /* verbose version */ +# define EXIT(ret) return_VMS(__G__ (ret)) +# else +# define RETURN return_VMS /* quiet version */ +# define EXIT return_VMS +# endif +# ifdef VMSCLI +# define USAGE(ret) VMSCLI_usage(__G__ (ret)) +# endif +# define DIR_BEG '[' +# define DIR_END ']' +# define DIR_EXT ".dir" +# ifndef DATE_FORMAT +# define DATE_FORMAT DF_MDY +# endif +# define lenEOL 1 +# define PutNativeEOL *q++ = native(LF); +# define SCREENLINES screenlines() +# if (defined(__VMS_VERSION) && !defined(VMS_VERSION)) +# define VMS_VERSION __VMS_VERSION +# endif +# if (defined(__VMS_VER) && !defined(__CRTL_VER)) +# define __CRTL_VER __VMS_VER +# endif +# if ((!defined(__CRTL_VER)) || (__CRTL_VER < 70000000)) +# define NO_GMTIME /* gmtime() of earlier VMS C RTLs is broken */ +# else +# if (!defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME)) +# define USE_EF_UT_TIME +# endif +# endif +# if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) +# define TIMESTAMP +# endif +# define RESTORE_UIDGID +#endif /* VMS */ + +/*--------------------------------------------------------------------------- + Win32 (Windows 95/NT) section: + ---------------------------------------------------------------------------*/ +#if defined(FPTEX) +#include +/* We don't want to use fpTeX's stat() version */ +#undef stat +#define stat _stat +#endif + +#if (defined(WIN32) && !defined(POCKET_UNZIP)) +# include "win32/w32cfg.h" +#endif + + + + + +/*************/ +/* Defines */ +/*************/ + +#define UNZIP_VERSION 20 /* compatible with PKUNZIP 2.0 */ +#define VMS_UNZIP_VERSION 42 /* if OS-needed-to-extract is VMS: can do */ + +#if (defined(MSDOS) || defined(OS2)) +# define DOS_OS2 +#endif + +#if (defined(OS2) || defined(WIN32)) +# define OS2_W32 +#endif + +#if (defined(DOS_OS2) || defined(WIN32)) +# define DOS_OS2_W32 +# define DOS_W32_OS2 /* historical: don't use */ +#endif + +#if (defined(DOS_OS2_W32) || defined(__human68k__)) +# define DOS_H68_OS2_W32 +#endif + +#if (defined(DOS_OS2) || defined(FLEXOS)) +# define DOS_FLX_OS2 +#endif + +#if (defined(DOS_OS2_W32) || defined(FLEXOS)) +# define DOS_FLX_OS2_W32 +#endif + +#if (defined(DOS_H68_OS2_W32) || defined(FLEXOS)) +# define DOS_FLX_H68_OS2_W32 +#endif + +#if (defined(TOPS20) || defined(VMS)) +# define T20_VMS +#endif + +#if (defined(MSDOS) || defined(T20_VMS)) +# define DOS_T20_VMS +#endif + +/* clean up with a few defaults */ +#ifndef DIR_END +# define DIR_END '/' /* last char before program name or filename */ +#endif +#ifndef DATE_FORMAT +# define DATE_FORMAT DF_MDY /* defaults to US convention */ +#endif +#ifndef CLOSE_INFILE +# define CLOSE_INFILE() close(G.zipfd) +#endif +#ifndef RETURN +# define RETURN return /* only used in main() */ +#endif +#ifndef EXIT +# define EXIT exit +#endif +#ifndef USAGE +# define USAGE(ret) usage(__G__ (ret)) /* used in unzip.c, zipinfo.c */ +#endif +#ifndef TIMET_TO_NATIVE /* everybody but MSC 7.0 and Macintosh */ +# define TIMET_TO_NATIVE(x) +# define NATIVE_TO_TIMET(x) +#endif + +#if (defined(DOS_FLX_OS2_W32) || defined(UNIX) || defined(RISCOS)) +# ifndef HAVE_UNLINK +# define HAVE_UNLINK +# endif +#endif +#if (defined(AOS_VS) || defined(ATARI) || defined(__BEOS__)) /* GRR: others? */ +# ifndef HAVE_UNLINK +# define HAVE_UNLINK +# endif +#endif + +/* OS-specific exceptions to the "ANSI <--> INT_SPRINTF" rule */ + +#if (!defined(PCHAR_SPRINTF) && !defined(INT_SPRINTF)) +# if (defined(SYSV) || defined(CONVEX) || defined(NeXT) || defined(BSD4_4)) +# define INT_SPRINTF /* sprintf() returns int: SysVish/Posix */ +# endif +# if (defined(DOS_FLX_OS2_W32) || defined(VMS) || defined(AMIGA)) +# define INT_SPRINTF /* sprintf() returns int: ANSI */ +# endif +# if (defined(ultrix) || defined(__ultrix)) /* Ultrix 4.3 and newer */ +# if (defined(POSIX) || defined(__POSIX)) +# define INT_SPRINTF /* sprintf() returns int: ANSI/Posix */ +# endif +# ifdef __GNUC__ +# define PCHAR_SPRINTF /* undetermined actual return value */ +# endif +# endif +# if (defined(__osf__) || defined(_AIX) || defined(CMS_MVS)) +# define INT_SPRINTF /* sprintf() returns int: ANSI/Posix */ +# endif +# if defined(sun) +# define PCHAR_SPRINTF /* sprintf() returns char *: SunOS cc *and* gcc */ +# endif +#endif + +/* defaults that we hope will take care of most machines in the future */ + +#if (!defined(PCHAR_SPRINTF) && !defined(INT_SPRINTF)) +# ifdef __STDC__ +# define INT_SPRINTF /* sprintf() returns int: ANSI */ +# endif +# ifndef INT_SPRINTF +# define PCHAR_SPRINTF /* sprintf() returns char *: BSDish */ +# endif +#endif + +#define MSG_STDERR(f) (f & 1) /* bit 0: 0 = stdout, 1 = stderr */ +#define MSG_INFO(f) ((f & 6) == 0) /* bits 1 and 2: 0 = info */ +#define MSG_WARN(f) ((f & 6) == 2) /* bits 1 and 2: 1 = warning */ +#define MSG_ERROR(f) ((f & 6) == 4) /* bits 1 and 2: 2 = error */ +#define MSG_FATAL(f) ((f & 6) == 6) /* bits 1 and 2: (3 = fatal error) */ +#define MSG_ZFN(f) (f & 0x0008) /* bit 3: 1 = print zipfile name */ +#define MSG_FN(f) (f & 0x0010) /* bit 4: 1 = print filename */ +#define MSG_LNEWLN(f) (f & 0x0020) /* bit 5: 1 = leading newline if !SOL */ +#define MSG_TNEWLN(f) (f & 0x0040) /* bit 6: 1 = trailing newline if !SOL */ +#define MSG_MNEWLN(f) (f & 0x0080) /* bit 7: 1 = trailing NL for prompts */ +/* the following are subject to change */ +#define MSG_NO_WGUI(f) (f & 0x0100) /* bit 8: 1 = skip if Windows GUI */ +#define MSG_NO_AGUI(f) (f & 0x0200) /* bit 9: 1 = skip if Acorn GUI */ +#define MSG_NO_DLL2(f) (f & 0x0400) /* bit 10: 1 = skip if OS/2 DLL */ +#define MSG_NO_NDLL(f) (f & 0x0800) /* bit 11: 1 = skip if WIN32 DLL */ +#define MSG_NO_WDLL(f) (f & 0x1000) /* bit 12: 1 = skip if Windows DLL */ + +#if (defined(MORE) && !defined(SCREENLINES)) +# ifdef DOS_FLX_OS2_W32 +# define SCREENLINES 25 /* can be (should be) a function instead */ +# else +# define SCREENLINES 24 /* VT-100s are assumed to be minimal hardware */ +# endif +#endif + +#define DIR_BLKSIZ 64 /* number of directory entries per block + * (should fit in 4096 bytes, usually) */ +#ifndef WSIZE +# define WSIZE 0x8000 /* window size--must be a power of two, and */ +#endif /* at least 32K for zip's deflate method */ + +#ifndef INBUFSIZ +# if (defined(MED_MEM) || defined(SMALL_MEM)) +# define INBUFSIZ 2048 /* works for MS-DOS small model */ +# else +# define INBUFSIZ 8192 /* larger buffers for real OSes */ +# endif +#endif + +#ifndef __16BIT__ +# define nearmalloc malloc +# define nearfree free +# if (!defined(__IBMC__) || !defined(OS2)) +# ifndef near +# define near +# endif +# ifndef far +# define far +# endif +# endif +#endif + +#if (defined(DYNALLOC_CRCTAB) && !defined(DYNAMIC_CRC_TABLE)) +# undef DYNALLOC_CRCTAB +#endif + +#if (defined(DYNALLOC_CRCTAB) && defined(REENTRANT)) +# undef DYNALLOC_CRCTAB /* not safe with reentrant code */ +#endif + +#if (defined(USE_ZLIB) && !defined(USE_OWN_CRCTAB)) +# ifdef DYNALLOC_CRCTAB +# undef DYNALLOC_CRCTAB +# endif +#endif + +#if (defined(USE_ZLIB) && defined(ASM_CRC)) +# undef ASM_CRC +#endif + +/* Logic for case of small memory, length of EOL > 1: if OUTBUFSIZ == 2048, + * OUTBUFSIZ>>1 == 1024 and OUTBUFSIZ>>7 == 16; therefore rawbuf is 1008 bytes + * and transbuf 1040 bytes. Have room for 32 extra EOL chars; 1008/32 == 31.5 + * chars/line, smaller than estimated 35-70 characters per line for C source + * and normal text. Hence difference is sufficient for most "average" files. + * (Argument scales for larger OUTBUFSIZ.) + */ +#ifdef SMALL_MEM /* i.e., 16-bit OSes: MS-DOS, OS/2 1.x, etc. */ +# define LoadFarString(x) fLoadFarString(__G__ (x)) +# define LoadFarStringSmall(x) fLoadFarStringSmall(__G__ (x)) +# define LoadFarStringSmall2(x) fLoadFarStringSmall2(__G__ (x)) +# if (defined(_MSC_VER) && (_MSC_VER >= 600)) +# define zfstrcpy(dest, src) _fstrcpy((dest), (src)) +# endif +# ifndef Far +# define Far far /* __far only works for MSC 6.00, not 6.0a or Borland */ +# endif +# define OUTBUFSIZ INBUFSIZ +# if (lenEOL == 1) +# define RAWBUFSIZ (OUTBUFSIZ>>1) +# else +# define RAWBUFSIZ ((OUTBUFSIZ>>1) - (OUTBUFSIZ>>7)) +# endif +# define TRANSBUFSIZ (OUTBUFSIZ-RAWBUFSIZ) + typedef short shrint; /* short/int or "shrink int" (unshrink) */ +#else +# define zfstrcpy(dest, src) strcpy((dest), (src)) +# ifdef QDOS +# define LoadFarString(x) Qstrfix(x) /* fix up _ for '.' */ +# define LoadFarStringSmall(x) Qstrfix(x) +# define LoadFarStringSmall2(x) Qstrfix(x) +# else +# define LoadFarString(x) x +# define LoadFarStringSmall(x) x +# define LoadFarStringSmall2(x) x +# endif +# ifdef MED_MEM +# define OUTBUFSIZ 0xFF80 /* can't malloc arrays of 0xFFE8 or more */ +# define TRANSBUFSIZ 0xFF80 + typedef short shrint; +# else +# define OUTBUFSIZ (lenEOL*WSIZE) /* more efficient text conversion */ +# define TRANSBUFSIZ (lenEOL*OUTBUFSIZ) +# ifdef AMIGA + typedef short shrint; +# else + typedef int shrint; /* for efficiency/speed, we hope... */ +# endif +# endif /* ?MED_MEM */ +# define RAWBUFSIZ OUTBUFSIZ +#endif /* ?SMALL_MEM */ + +#ifndef Far +# define Far +#endif + +#ifndef MAIN +# define MAIN main +#endif + +#ifdef SFX /* disable some unused features for SFX executables */ +# ifndef NO_ZIPINFO +# define NO_ZIPINFO +# endif +# ifdef TIMESTAMP +# undef TIMESTAMP +# endif +#endif + +/* user may have defined both by accident... NOTIMESTAMP takes precedence */ +#if (defined(TIMESTAMP) && defined(NOTIMESTAMP)) +# undef TIMESTAMP +#endif + +#if (!defined(COPYRIGHT_CLEAN) && !defined(USE_SMITH_CODE)) +# define COPYRIGHT_CLEAN +#endif + +#if (!defined(LZW_CLEAN) && !defined(USE_UNSHRINK)) +# define LZW_CLEAN +#endif + +#ifndef O_BINARY +# define O_BINARY 0 +#endif + +#ifndef PIPE_ERROR +# define PIPE_ERROR (errno == EPIPE) +#endif + +/* File operations--use "b" for binary if allowed or fixed length 512 on VMS */ +#ifdef VMS +# define FOPR "r","ctx=stm" +# define FOPM "r+","ctx=stm","rfm=fix","mrs=512" +# define FOPW "w","ctx=stm","rfm=fix","mrs=512" +#endif /* VMS */ + +#ifdef CMS_MVS +/* Binary files must be RECFM=F,LRECL=1 for ftell() to get correct pos */ +/* ...unless byteseek is used. Let's try that for a while. */ +# define FOPR "rb,byteseek" +# define FOPM "r+b,byteseek" +# define FOPW "wb,recfm=v,lrecl=32760" +# ifdef MVS +# define FOPWT "w,lrecl=133" +# else +# define FOPWT "w" +# endif +#endif /* CMS_MVS */ + +#ifdef TOPS20 /* TOPS-20 MODERN? You kidding? */ +# define FOPW "w8" +#endif /* TOPS20 */ + +/* Defaults when nothing special has been defined previously. */ +#ifdef MODERN +# ifndef FOPR +# define FOPR "rb" +# endif +# ifndef FOPM +# define FOPM "r+b" +# endif +# ifndef FOPW +# define FOPW "wb" +# endif +# ifndef FOPWT +# define FOPWT "wt" +# endif +#else /* !MODERN */ +# ifndef FOPR +# define FOPR "r" +# endif +# ifndef FOPM +# define FOPM "r+" +# endif +# ifndef FOPW +# define FOPW "w" +# endif +# ifndef FOPWT +# define FOPWT "w" +# endif +#endif /* ?MODERN */ + +/* + * If exists on most systems, should include that, since it may + * define some or all of the following: NAME_MAX, PATH_MAX, _POSIX_NAME_MAX, + * _POSIX_PATH_MAX. + */ +#ifdef DOS_FLX_OS2 +# include +#endif + +#ifndef PATH_MAX +# ifdef MAXPATHLEN +# define PATH_MAX MAXPATHLEN /* in on some systems */ +# else +# ifdef _MAX_PATH +# define PATH_MAX _MAX_PATH +# else +# if FILENAME_MAX > 255 +# define PATH_MAX FILENAME_MAX /* used like PATH_MAX on some systems */ +# else +# define PATH_MAX 1024 +# endif +# endif /* ?_MAX_PATH */ +# endif /* ?MAXPATHLEN */ +#endif /* !PATH_MAX */ + +#define FILNAMSIZ PATH_MAX + +#ifdef SHORT_SYMS /* Mark Williams C, ...? */ +# define extract_or_test_files xtr_or_tst_files +# define extract_or_test_member xtr_or_tst_member +#endif + +#ifdef REALLY_SHORT_SYMS /* TOPS-20 linker: first 6 chars */ +# define process_cdir_file_hdr XXpcdfh +# define process_local_file_hdr XXplfh +# define extract_or_test_files XXxotf /* necessary? */ +# define extract_or_test_member XXxotm /* necessary? */ +# define check_for_newer XXcfn +# define overwrite_all XXoa +# define process_all_files XXpaf +# define extra_field XXef +# define explode_lit8 XXel8 +# define explode_lit4 XXel4 +# define explode_nolit8 XXnl8 +# define explode_nolit4 XXnl4 +# define cpdist8 XXcpdist8 +# define inflate_codes XXic +# define inflate_stored XXis +# define inflate_fixed XXif +# define inflate_dynamic XXid +# define inflate_block XXib +# define maxcodemax XXmax +#endif + +#ifndef S_TIME_T_MAX /* max value of signed (>= 32-bit) time_t */ +# define S_TIME_T_MAX ((time_t)(ulg)0x7fffffffL) +#endif +#ifndef U_TIME_T_MAX /* max value of unsigned (>= 32-bit) time_t */ +# define U_TIME_T_MAX ((time_t)(ulg)0xffffffffL) +#endif +#ifdef DOSTIME_MINIMUM /* min DOSTIME value (1980-01-01) */ +# undef DOSTIME_MINIMUM +#endif +#define DOSTIME_MINIMUM ((ulg)0x00210000L) +#ifdef DOSTIME_2038_01_18 /* approximate DOSTIME equivalent of */ +# undef DOSTIME_2038_01_18 /* the signed-32-bit time_t limit */ +#endif +#define DOSTIME_2038_01_18 ((ulg)0x74320000L) + +#ifdef QDOS +# define ZSUFX "_zip" +# define ALT_ZSUFX ".zip" +#else +# ifdef RISCOS +# define ZSUFX "/zip" +# else +# define ZSUFX ".zip" +# endif +# define ALT_ZSUFX ".ZIP" /* Unix-only so far (only case-sensitive fs) */ +#endif + +#define CENTRAL_HDR_SIG "\001\002" /* the infamous "PK" signature bytes, */ +#define LOCAL_HDR_SIG "\003\004" /* sans "PK" (so unzip executable not */ +#define END_CENTRAL_SIG "\005\006" /* mistaken for zipfile itself) */ +#define EXTD_LOCAL_SIG "\007\010" /* [ASCII "\113" == EBCDIC "\080" ??] */ + +/* choice of activities for do_string() */ +#define SKIP 0 /* skip header block */ +#define DISPLAY 1 /* display archive comment (ASCII) */ +#define DISPL_8 5 /* display file comment (ext. ASCII) */ +#define DS_FN 2 /* read filename (ext. ASCII) */ +#define EXTRA_FIELD 3 /* copy extra field into buffer */ +#define DS_EF 3 +#ifdef AMIGA +# define FILENOTE 4 +#endif + +#define DOES_NOT_EXIST -1 /* return values for check_for_newer() */ +#define EXISTS_AND_OLDER 0 +#define EXISTS_AND_NEWER 1 + +#define ROOT 0 /* checkdir() extract-to path: called once */ +#define INIT 1 /* allocate buildpath: called once per member */ +#define APPEND_DIR 2 /* append a dir comp.: many times per member */ +#define APPEND_NAME 3 /* append actual filename: once per member */ +#define GETPATH 4 /* retrieve the complete path and free it */ +#define END 5 /* free root path prior to exiting program */ + +/* version_made_by codes (central dir): make sure these */ +/* are not defined on their respective systems!! */ +#define FS_FAT_ 0 /* filesystem used by MS-DOS, OS/2, Win32 */ +#define AMIGA_ 1 +#define VMS_ 2 +#define UNIX_ 3 +#define VM_CMS_ 4 +#define ATARI_ 5 /* what if it's a minix filesystem? [cjh] */ +#define FS_HPFS_ 6 /* filesystem used by OS/2 (and NT 3.x) */ +#define MAC_ 7 /* HFS filesystem used by MacOS */ +#define Z_SYSTEM_ 8 +#define CPM_ 9 +#define TOPS20_ 10 +#define FS_NTFS_ 11 /* filesystem used by Windows NT */ +#define QDOS_ 12 +#define ACORN_ 13 /* Archimedes Acorn RISC OS */ +#define FS_VFAT_ 14 /* filesystem used by Windows 95, NT */ +#define MVS_ 15 +#define BEOS_ 16 /* hybrid POSIX/database filesystem */ +#define TANDEM_ 17 /* Tandem/NSK */ +#define NUM_HOSTS 18 /* index of last system + 1 */ + +#define STORED 0 /* compression methods */ +#define SHRUNK 1 +#define REDUCED1 2 +#define REDUCED2 3 +#define REDUCED3 4 +#define REDUCED4 5 +#define IMPLODED 6 +#define TOKENIZED 7 +#define DEFLATED 8 +#define ENHDEFLATED 9 +#define DCLIMPLODED 10 +#define NUM_METHODS 11 /* index of last method + 1 */ +/* don't forget to update list_files(), extract.c and zipinfo.c appropriately + * if NUM_METHODS changes */ + +/* (the PK-class error codes are public and have been moved into unzip.h) */ + +#define DF_MDY 0 /* date format 10/26/91 (USA only) */ +#define DF_DMY 1 /* date format 26/10/91 (most of the world) */ +#define DF_YMD 2 /* date format 91/10/26 (a few countries) */ + +/*--------------------------------------------------------------------------- + Extra-field block ID values and offset info. + ---------------------------------------------------------------------------*/ +/* extra-field ID values, all little-endian: */ +#define EF_AV 0x0007 /* PKWARE's authenticity verification */ +#define EF_OS2 0x0009 /* OS/2 extended attributes */ +#define EF_PKW32 0x000a /* PKWARE's Win95/98/WinNT filetimes */ +#define EF_PKVMS 0x000c /* PKWARE's VMS */ +#define EF_PKUNIX 0x000d /* PKWARE's Unix */ +#define EF_IZVMS 0x4d49 /* Info-ZIP's VMS ("IM") */ +#define EF_IZUNIX 0x5855 /* Info-ZIP's old Unix[1] ("UX") */ +#define EF_IZUNIX2 0x7855 /* Info-ZIP's new Unix[2] ("Ux") */ +#define EF_TIME 0x5455 /* universal timestamp ("UT") */ +#define EF_MAC3 0x334d /* Info-ZIP's new Macintosh (= "M3") */ +#define EF_JLMAC 0x07c8 /* Johnny Lee's old Macintosh (= 1992) */ +#define EF_ZIPIT 0x2605 /* Thomas Brown's Macintosh (ZipIt) */ +#define EF_ZIPIT2 0x2705 /* T. Brown's Mac (ZipIt) v 1.3.8 and newer ? */ +#define EF_VMCMS 0x4704 /* Info-ZIP's VM/CMS ("\004G") */ +#define EF_MVS 0x470f /* Info-ZIP's MVS ("\017G") */ +#define EF_ACL 0x4c41 /* (OS/2) access control list ("AL") */ +#define EF_NTSD 0x4453 /* NT security descriptor ("SD") */ +#define EF_BEOS 0x6542 /* BeOS ("Be") */ +#define EF_QDOS 0xfb4a /* SMS/QDOS ("J\373") */ +#define EF_AOSVS 0x5356 /* AOS/VS ("VS") */ +#define EF_SPARK 0x4341 /* David Pilling's Acorn/SparkFS ("AC") */ +#define EF_MD5 0x4b46 /* Fred Kantor's MD5 ("FK") */ +#define EF_ASIUNIX 0x756e /* ASi's Unix ("nu") */ + +#define EB_HEADSIZE 4 /* length of extra field block header */ +#define EB_ID 0 /* offset of block ID in header */ +#define EB_LEN 2 /* offset of data length field in header */ +#define EB_UCSIZE_P 0 /* offset of ucsize field in compr. data */ +#define EB_CMPRHEADLEN 6 /* lenght of compression header */ + +#define EB_UX_MINLEN 8 /* minimal "UX" field contains atime, mtime */ +#define EB_UX_FULLSIZE 12 /* full "UX" field (atime, mtime, uid, gid) */ +#define EB_UX_ATIME 0 /* offset of atime in "UX" extra field data */ +#define EB_UX_MTIME 4 /* offset of mtime in "UX" extra field data */ +#define EB_UX_UID 8 /* byte offset of UID in "UX" field data */ +#define EB_UX_GID 10 /* byte offset of GID in "UX" field data */ + +#define EB_UX2_MINLEN 4 /* minimal "Ux" field contains UID/GID */ +#define EB_UX2_UID 0 /* byte offset of UID in "Ux" field data */ +#define EB_UX2_GID 2 /* byte offset of GID in "Ux" field data */ +#define EB_UX2_VALID (1 << 8) /* UID/GID present */ + +#define EB_UT_MINLEN 1 /* minimal UT field contains Flags byte */ +#define EB_UT_FLAGS 0 /* byte offset of Flags field */ +#define EB_UT_TIME1 1 /* byte offset of 1st time value */ +#define EB_UT_FL_MTIME (1 << 0) /* mtime present */ +#define EB_UT_FL_ATIME (1 << 1) /* atime present */ +#define EB_UT_FL_CTIME (1 << 2) /* ctime present */ + +#define EB_FLGS_OFFS 4 /* offset of flags area in generic compressed + extra field blocks (OS2, NT, and others) */ +#define EB_OS2_HLEN 4 /* size of OS2/ACL compressed data header */ +#define EB_BEOS_HLEN 5 /* length of BeOS e.f attribute header */ +#define EB_BE_FL_UNCMPR 0x01 /* "BeOS attributes uncompressed" bit flag */ +#define EB_MAC3_HLEN 14 /* length of Mac3 attribute block header */ +#define EB_M3_FL_DATFRK 0x01 /* "this entry is data fork" flag */ +#define EB_M3_FL_UNCMPR 0x04 /* "Mac3 attributes uncompressed" bit flag */ +#define EB_M3_FL_TIME64 0x08 /* "Mac3 time fields are 64 bit wide" flag */ +#define EB_M3_FL_NOUTC 0x10 /* "Mac3 timezone offset fields missing" flag */ + +#define EB_NTSD_C_LEN 4 /* length of central NT security data */ +#define EB_NTSD_L_LEN 5 /* length of minimal local NT security data */ +#define EB_NTSD_VERSION 4 /* offset of NTSD version byte */ +#define EB_NTSD_MAX_VER (0) /* maximum version # we know how to handle */ + +#define EB_ASI_CRC32 0 /* offset of ASI Unix field's crc32 checksum */ +#define EB_ASI_MODE 4 /* offset of ASI Unix permission mode field */ + +/*--------------------------------------------------------------------------- + True sizes of the various headers, as defined by PKWARE--so it is not + likely that these will ever change. But if they do, make sure both these + defines AND the typedefs below get updated accordingly. + ---------------------------------------------------------------------------*/ +#define LREC_SIZE 26 /* lengths of local file headers, central */ +#define CREC_SIZE 42 /* directory headers, and the end-of- */ +#define ECREC_SIZE 18 /* central-dir record, respectively */ + +#define MAX_BITS 13 /* used in unshrink() */ +#define HSIZE (1 << MAX_BITS) /* size of global work area */ + +#define LF 10 /* '\n' on ASCII machines; must be 10 due to EBCDIC */ +#define CR 13 /* '\r' on ASCII machines; must be 13 due to EBCDIC */ +#define CTRLZ 26 /* DOS & OS/2 EOF marker (used in fileio.c, vms.c) */ + +#ifdef EBCDIC +# define foreign(c) ascii[(uch)(c)] +# define native(c) ebcdic[(uch)(c)] +# define NATIVE "EBCDIC" +# define NOANSIFILT +#endif + +#if (defined(CRAY) && defined(ZMEM)) +# undef ZMEM +#endif + +#ifdef ZMEM +# undef ZMEM +# define memcmp(b1,b2,len) bcmp(b2,b1,len) +# define memcpy(dest,src,len) bcopy(src,dest,len) +# define memzero bzero +#else +# define memzero(dest,len) memset(dest,0,len) +#endif + +#ifdef VMS +# define ENV_UNZIP "UNZIP_OPTS" /* names of environment variables */ +# define ENV_ZIPINFO "ZIPINFO_OPTS" +#endif /* VMS */ +#ifdef RISCOS +# define ENV_UNZIP "Unzip$Options" +# define ENV_ZIPINFO "Zipinfo$Options" +# define ENV_UNZIPEXTS "Unzip$Exts" +#endif /* RISCOS */ +#ifndef ENV_UNZIP +# define ENV_UNZIP "UNZIP" /* the standard names */ +# define ENV_ZIPINFO "ZIPINFO" +#endif +#define ENV_UNZIP2 "UNZIPOPT" /* alternate names, for zip compat. */ +#define ENV_ZIPINFO2 "ZIPINFOOPT" + +#if (!defined(QQ) && !defined(NOQQ)) +# define QQ +#endif + +#ifdef QQ /* Newtware version: no file */ +# define QCOND (!uO.qflag) /* comments with -vq or -vqq */ +#else /* Bill Davidsen version: no way to */ +# define QCOND (longhdr) /* kill file comments when listing */ +#endif + +#ifdef OLD_QQ +# define QCOND2 (uO.qflag < 2) +#else +# define QCOND2 (!uO.qflag) +#endif + +#ifndef TRUE +# define TRUE 1 /* sort of obvious */ +#endif +#ifndef FALSE +# define FALSE 0 +#endif + +#ifndef SEEK_SET +# define SEEK_SET 0 +# define SEEK_CUR 1 +# define SEEK_END 2 +#endif + +#if (defined(UNIX) && defined(S_IFLNK) && !defined(MTS)) +# define SYMLINKS +# ifndef S_ISLNK +# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +# endif +#endif /* UNIX && S_IFLNK && !MTS */ + +#ifndef S_ISDIR +# ifdef CMS_MVS +# define S_ISDIR(m) (FALSE) +# else +# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +# endif +#endif + +#ifndef IS_VOLID +# define IS_VOLID(m) ((m) & 0x08) +#endif + + + + + +/**************/ +/* Typedefs */ +/**************/ + +#ifdef NO_UID_GID +# ifdef UID_USHORT + typedef unsigned short uid_t; /* TI SysV.3 */ + typedef unsigned short gid_t; +# else + typedef unsigned int uid_t; /* SCO Xenix */ + typedef unsigned int gid_t; +# endif +#endif + +#if (defined(WIN32) || defined(sgi) || defined(GOT_UTIMBUF) || defined(ATARI)) + typedef struct utimbuf ztimbuf; +#else + typedef struct ztimbuf { + time_t actime; /* new access time */ + time_t modtime; /* new modification time */ + } ztimbuf; +#endif + +typedef struct iztimes { + time_t atime; /* new access time */ + time_t mtime; /* new modification time */ + time_t ctime; /* used for creation time; NOT same as st_ctime */ +} iztimes; + +#ifdef SET_DIR_ATTRIB + typedef struct dirtime { /* temporary struct for holding directory info */ + struct dirtime *next; /* until can be sorted and set at end */ + char *fn; /* filename of directory */ + union { + iztimes t3; /* mtime, atime, ctime */ + ztimbuf t2; /* modtime, actime */ + } u; + unsigned perms; /* same as min_info.file_attr */ + int have_uidgid; /* flag */ + ush uidgid[2]; + } dirtime; +#endif /* SET_DIR_ATTRIB */ + +typedef struct min_info { + long offset; + ulg crc; /* crc (needed if extended header) */ + ulg compr_size; /* compressed size (needed if extended header) */ + ulg uncompr_size; /* uncompressed size (needed if extended header) */ + int hostnum; + unsigned file_attr; /* local flavor, as used by creat(), chmod()... */ + unsigned encrypted : 1; /* file encrypted: decrypt before uncompressing */ + unsigned ExtLocHdr : 1; /* use time instead of CRC for decrypt check */ + unsigned textfile : 1; /* file is text (according to zip) */ + unsigned textmode : 1; /* file is to be extracted as text */ + unsigned lcflag : 1; /* convert filename to lowercase */ + unsigned vollabel : 1; /* "file" is an MS-DOS volume (disk) label */ +} min_info; + +typedef struct VMStimbuf { + char *revdate; /* (both roughly correspond to Unix modtime/st_mtime) */ + char *credate; +} VMStimbuf; + +/*--------------------------------------------------------------------------- + Zipfile work area declarations. + ---------------------------------------------------------------------------*/ + +#ifdef MALLOC_WORK + union work { + struct { /* unshrink(): */ + shrint *Parent; /* (8193 * sizeof(shrint)) */ + uch *value; + uch *Stack; + } shrink; + uch *Slide; /* explode(), inflate(), unreduce() */ + }; +#else /* !MALLOC_WORK */ + union work { + struct { /* unshrink(): */ + shrint Parent[HSIZE]; /* (8192 * sizeof(shrint)) == 16KB minimum */ + uch value[HSIZE]; /* 8KB */ + uch Stack[HSIZE]; /* 8KB */ + } shrink; /* total = 32KB minimum; 80KB on Cray/Alpha */ + uch Slide[WSIZE]; /* explode(), inflate(), unreduce() */ + }; +#endif /* ?MALLOC_WORK */ + +#define slide G.area.Slide + +#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) +# define redirSlide G.redirect_sldptr +#else +# define redirSlide G.area.Slide +#endif + +/*--------------------------------------------------------------------------- + Zipfile layout declarations. If these headers ever change, make sure the + xxREC_SIZE defines (above) change with them! + ---------------------------------------------------------------------------*/ + + typedef uch local_byte_hdr[ LREC_SIZE ]; +# define L_VERSION_NEEDED_TO_EXTRACT_0 0 +# define L_VERSION_NEEDED_TO_EXTRACT_1 1 +# define L_GENERAL_PURPOSE_BIT_FLAG 2 +# define L_COMPRESSION_METHOD 4 +# define L_LAST_MOD_DOS_DATETIME 6 +# define L_CRC32 10 +# define L_COMPRESSED_SIZE 14 +# define L_UNCOMPRESSED_SIZE 18 +# define L_FILENAME_LENGTH 22 +# define L_EXTRA_FIELD_LENGTH 24 + + typedef uch cdir_byte_hdr[ CREC_SIZE ]; +# define C_VERSION_MADE_BY_0 0 +# define C_VERSION_MADE_BY_1 1 +# define C_VERSION_NEEDED_TO_EXTRACT_0 2 +# define C_VERSION_NEEDED_TO_EXTRACT_1 3 +# define C_GENERAL_PURPOSE_BIT_FLAG 4 +# define C_COMPRESSION_METHOD 6 +# define C_LAST_MOD_DOS_DATETIME 8 +# define C_CRC32 12 +# define C_COMPRESSED_SIZE 16 +# define C_UNCOMPRESSED_SIZE 20 +# define C_FILENAME_LENGTH 24 +# define C_EXTRA_FIELD_LENGTH 26 +# define C_FILE_COMMENT_LENGTH 28 +# define C_DISK_NUMBER_START 30 +# define C_INTERNAL_FILE_ATTRIBUTES 32 +# define C_EXTERNAL_FILE_ATTRIBUTES 34 +# define C_RELATIVE_OFFSET_LOCAL_HEADER 38 + + typedef uch ec_byte_rec[ ECREC_SIZE+4 ]; +/* define SIGNATURE 0 space-holder only */ +# define NUMBER_THIS_DISK 4 +# define NUM_DISK_WITH_START_CENTRAL_DIR 6 +# define NUM_ENTRIES_CENTRL_DIR_THS_DISK 8 +# define TOTAL_ENTRIES_CENTRAL_DIR 10 +# define SIZE_CENTRAL_DIRECTORY 12 +# define OFFSET_START_CENTRAL_DIRECTORY 16 +# define ZIPFILE_COMMENT_LENGTH 20 + + + typedef struct local_file_header { /* LOCAL */ + uch version_needed_to_extract[2]; + ush general_purpose_bit_flag; + ush compression_method; + ulg last_mod_dos_datetime; + ulg crc32; + ulg csize; + ulg ucsize; + ush filename_length; + ush extra_field_length; + } local_file_hdr; + +#if 0 + typedef struct central_directory_file_header { /* CENTRAL */ + uch version_made_by[2]; + uch version_needed_to_extract[2]; + ush general_purpose_bit_flag; + ush compression_method; + ulg last_mod_dos_datetime; + ulg crc32; + ulg csize; + ulg ucsize; + ush filename_length; + ush extra_field_length; + ush file_comment_length; + ush disk_number_start; + ush internal_file_attributes; + ulg external_file_attributes; + ulg relative_offset_local_header; + } cdir_file_hdr; +#endif /* 0 */ + + typedef struct end_central_dir_record { /* END CENTRAL */ + ush number_this_disk; + ush num_disk_start_cdir; + ush num_entries_centrl_dir_ths_disk; + ush total_entries_central_dir; + ulg size_central_directory; + ulg offset_start_central_directory; + ush zipfile_comment_length; + } ecdir_rec; + + +/* Huffman code lookup table entry--this entry is four bytes for machines + that have 16-bit pointers (e.g. PC's in the small or medium model). + Valid extra bits are 0..13. e == 15 is EOB (end of block), e == 16 + means that v is a literal, 16 < e < 32 means that v is a pointer to + the next table, which codes e - 16 bits, and lastly e == 99 indicates + an unused code. If a code with e == 99 is looked up, this implies an + error in the data. */ + +struct huft { + uch e; /* number of extra bits or operation */ + uch b; /* number of bits in this code or subcode */ + union { + ush n; /* literal, length base, or distance base */ + struct huft *t; /* pointer to next level of table */ + } v; +}; + + +typedef struct _APIDocStruct { + char *compare; + char *function; + char *syntax; + char *purpose; +} APIDocStruct; + + + + +/*************/ +/* Globals */ +/*************/ + +#if (defined(OS2) && !defined(FUNZIP)) +# include "os2/os2data.h" +#endif + +#include "globals.h" + + + +/*************************/ +/* Function Prototypes */ +/*************************/ + +/*--------------------------------------------------------------------------- + Functions in unzip.c (initialization routines): + ---------------------------------------------------------------------------*/ + +#ifndef WINDLL + int MAIN OF((int argc, char **argv)); + int unzip OF((__GPRO__ int argc, char **argv)); + int uz_opts OF((__GPRO__ int *pargc, char ***pargv)); + int usage OF((__GPRO__ int error)); +#endif /* !WINDLL */ + +/*--------------------------------------------------------------------------- + Functions in process.c (main driver routines): + ---------------------------------------------------------------------------*/ + +int process_zipfiles OF((__GPRO)); +void free_G_buffers OF((__GPRO)); +/* static int do_seekable OF((__GPRO__ int lastchance)); */ +/* static int find_ecrec OF((__GPRO__ long searchlen)); */ +int uz_end_central OF((__GPRO)); +int process_cdir_file_hdr OF((__GPRO)); +int get_cdir_ent OF((__GPRO)); +int process_local_file_hdr OF((__GPRO)); +unsigned ef_scan_for_izux OF((uch *ef_buf, unsigned ef_len, int ef_is_c, + ulg dos_mdatetime, + iztimes *z_utim, ush *z_uidgid)); + +#ifndef SFX + +/*--------------------------------------------------------------------------- + Functions in zipinfo.c (`zipinfo-style' listing routines): + ---------------------------------------------------------------------------*/ + +#ifndef NO_ZIPINFO +#ifndef WINDLL + int zi_opts OF((__GPRO__ int *pargc, char ***pargv)); +#endif +int zi_end_central OF((__GPRO)); +int zipinfo OF((__GPRO)); +/* static int zi_long OF((__GPRO__ ulg *pEndprev)); */ +/* static int zi_short OF((__GPRO)); */ +/* static char *zi_time OF((__GPRO__ ZCONST ulg *datetimez, + ZCONST time_t *modtimez, char *d_t_str));*/ +#endif /* !NO_ZIPINFO */ + +/*--------------------------------------------------------------------------- + Functions in list.c (generic zipfile-listing routines): + ---------------------------------------------------------------------------*/ + +int list_files OF((__GPRO)); +#ifdef TIMESTAMP + int get_time_stamp OF((__GPRO__ time_t *last_modtime, + unsigned *nmember)); +#endif +int ratio OF((ulg uc, ulg c)); +void fnprint OF((__GPRO)); + +#endif /* !SFX */ + +/*--------------------------------------------------------------------------- + Functions in fileio.c: + ---------------------------------------------------------------------------*/ + +int open_input_file OF((__GPRO)); +int open_outfile OF((__GPRO)); /* also vms.c */ +void undefer_input OF((__GPRO)); +void defer_leftover_input OF((__GPRO)); +unsigned readbuf OF((__GPRO__ char *buf, register unsigned len)); +int readbyte OF((__GPRO)); +int fillinbuf OF((__GPRO)); +#ifdef FUNZIP + int flush OF((__GPRO__ ulg size)); /* actually funzip.c */ +#else + int flush OF((__GPRO__ uch *buf, ulg size, int unshrink)); +#endif +/* static int disk_error OF((__GPRO)); */ +void handler OF((int signal)); +time_t dos_to_unix_time OF((ulg dos_datetime)); +int check_for_newer OF((__GPRO__ char *filename)); /* os2,vmcms,vms */ +int do_string OF((__GPRO__ unsigned int len, int option)); +ush makeword OF((ZCONST uch *b)); +ulg makelong OF((ZCONST uch *sig)); +#if (!defined(STR_TO_ISO) || defined(NEED_STR2ISO)) + char *str2iso OF((char *dst, ZCONST char *src)); +#endif +#if (!defined(STR_TO_OEM) || defined(NEED_STR2OEM)) + char *str2oem OF((char *dst, ZCONST char *src)); +#endif +int zstrnicmp OF((register ZCONST char *s1, + register ZCONST char *s2, + register unsigned n)); +#ifdef REGULUS + int zstat OF((char *p, struct stat *s)); +#endif +#ifdef ZMEM /* MUST be ifdef'd because of conflicts with the standard def. */ + zvoid *memset OF((register zvoid *, register int, register unsigned int)); + int memcmp OF((register ZCONST zvoid*, register ZCONST zvoid *, + register unsigned int)); + zvoid *memcpy OF((register zvoid *, register ZCONST zvoid *, + register unsigned int)); +#endif +#ifdef SMALL_MEM + char *fLoadFarString OF((__GPRO__ const char Far *sz)); + char *fLoadFarStringSmall OF((__GPRO__ const char Far *sz)); + char *fLoadFarStringSmall2 OF((__GPRO__ const char Far *sz)); + #ifndef zfstrcpy + char Far * Far zfstrcpy OF((char Far *s1, const char Far *s2)); + #endif +#endif + + +/*--------------------------------------------------------------------------- + Functions in extract.c: + ---------------------------------------------------------------------------*/ + +int extract_or_test_files OF((__GPRO)); +/* static int store_info OF((void)); */ +/* static int extract_or_test_member OF((__GPRO)); */ +/* static int TestExtraField OF((__GPRO__ uch *ef, unsigned ef_len)); */ +/* static int test_OS2 OF((__GPRO__ uch *eb, unsigned eb_size)); */ +/* static int test_NT OF((__GPRO__ uch *eb, unsigned eb_size)); */ +int memextract OF((__GPRO__ uch *tgt, ulg tgtsize, + uch *src, ulg srcsize)); +int memflush OF((__GPRO__ uch *rawbuf, ulg size)); +char *fnfilter OF((ZCONST char *raw, uch *space)); + +/*--------------------------------------------------------------------------- + Decompression functions: + ---------------------------------------------------------------------------*/ + +#if (!defined(SFX) && !defined(FUNZIP)) +int explode OF((__GPRO)); /* explode.c */ +#endif +int huft_free OF((struct huft *t)); /* inflate.c */ +int huft_build OF((__GPRO__ ZCONST unsigned *b, unsigned n, + unsigned s, ZCONST ush *d, ZCONST ush *e, + struct huft **t, int *m)); +#ifdef USE_ZLIB + int UZinflate OF((__GPRO)); /* inflate.c */ +# define inflate_free(x) inflateEnd(&((Uz_Globs *)(&G))->dstrm) +#else + int inflate OF((__GPRO)); /* inflate.c */ + int inflate_free OF((__GPRO)); /* inflate.c */ +#endif /* ?USE_ZLIB */ +#if (!defined(SFX) && !defined(FUNZIP)) +void unreduce OF((__GPRO)); /* unreduce.c */ +/* static void LoadFollowers OF((__GPRO__ f_array *follower, uch *Slen)); + * unreduce.c */ +int unshrink OF((__GPRO)); /* unshrink.c */ +/* static void partial_clear OF((__GPRO)); * unshrink.c */ +#endif /* !SFX && !FUNZIP */ + +/*--------------------------------------------------------------------------- + Internal API functions (only included in DLL versions): + ---------------------------------------------------------------------------*/ + +#ifdef DLL + void setFileNotFound OF((__GPRO)); /* api.c */ + int unzipToMemory OF((__GPRO__ char *zip, char *file, + UzpBuffer *retstr)); /* api.c */ + int redirect_outfile OF((__GPRO)); /* api.c */ + int writeToMemory OF((__GPRO__ uch *rawbuf, ulg size)); + int close_redirect OF((__GPRO)); /* api.c */ + /* this obsolescent entry point kept for compatibility: */ + int UzpUnzip OF((int argc, char **argv));/* use UzpMain */ +#ifdef OS2DLL + int varmessage OF((__GPRO__ uch *buf, ulg size)); + int varputchar OF((__GPRO__ int c)); /* rexxapi.c */ + int finish_REXX_redirect OF((__GPRO)); /* rexxapi.c */ +#endif +#ifdef API_DOC + void APIhelp OF((__GPRO__ int argc, char **argv)); +#endif /* apihelp.c */ +#endif /* DLL */ + +/*--------------------------------------------------------------------------- + Acorn RISC OS-only functions: + ---------------------------------------------------------------------------*/ + +#ifdef RISCOS + int isRISCOSexfield OF((void *extra_field)); /* acorn.c */ + void setRISCOSexfield OF((char *path, void *extra_field)); /* acorn.c */ + void printRISCOSexfield OF((int isdir, void *extra_field)); /* acorn.c */ +#endif + +/*--------------------------------------------------------------------------- + Human68K-only functions: + ---------------------------------------------------------------------------*/ + +#ifdef __human68k__ + void InitTwentyOne OF((void)); +#endif + +/*--------------------------------------------------------------------------- + Macintosh-only functions: + ---------------------------------------------------------------------------*/ + +#ifdef MACOS + void screenOpen OF((char *)); /* macscreen.c */ + void screenControl OF((char *, int)); /* macscreen.c */ + void screenDump OF((char *, long)); /* macscreen.c */ + void screenUpdate OF((WindowPtr)); /* macscreen.c */ + void screenClose OF((void)); /* macscreen.c */ + int macgetch OF((void)); /* macscreen.c */ + + int macmkdir OF((char *)); /* mac.c */ + short macopen OF((char *, short)); /* mac.c */ + short maccreat OF((char *)); /* mac.c */ + short macread OF((short, char *, unsigned)); /* mac.c */ + long macwrite OF((short, char *, unsigned)); /* mac.c */ + short macclose OF((short)); /* mac.c */ + long maclseek OF((short, long, short)); /* mac.c */ + char *macfgets OF((char *, int, FILE *)); /* mac.c */ + int macfprintf OF((FILE *, char *, ...)); /* mac.c */ + int macprintf OF((char *, ...)); /* mac.c */ +#endif + +/*--------------------------------------------------------------------------- + MSDOS-only functions: + ---------------------------------------------------------------------------*/ + +#if (defined(MSDOS) && (defined(__GO32__) || defined(__EMX__))) + unsigned _dos_getcountryinfo(void *); /* msdos.c */ +#if (!defined(__DJGPP__) || (__DJGPP__ < 2)) + unsigned _dos_setftime(int, unsigned short, unsigned short); /* msdos.c */ + unsigned _dos_setfileattr(char *, unsigned); /* msdos.c */ + unsigned _dos_creat(char *, unsigned, int *); /* msdos.c */ + void _dos_getdrive(unsigned *); /* msdos.c */ + unsigned _dos_close(int); /* msdos.c */ +#endif /* !__DJGPP__ || (__DJGPP__ < 2) */ +#endif + +/*--------------------------------------------------------------------------- + OS/2-only functions: + ---------------------------------------------------------------------------*/ + +#ifdef OS2 /* GetFileTime conflicts with something in Win32 header files */ +#if (defined(REENTRANT) && defined(USETHREADID)) + ulg GetThreadId OF((void)); +#endif + int GetCountryInfo OF((void)); /* os2.c */ + long GetFileTime OF((ZCONST char *name)); /* os2.c */ +/* static void SetPathAttrTimes OF((__GPRO__ int flags, int dir)); os2.c */ +/* static int SetEAs OF((__GPRO__ const char *path, + void *eablock)); os2.c */ +/* static int SetACL OF((__GPRO__ const char *path, + void *eablock)); os2.c */ +/* static int IsFileNameValid OF((const char *name)); os2.c */ +/* static void map2fat OF((char *pathcomp, char **pEndFAT)); os2.c */ +/* static int SetLongNameEA OF((char *name, char *longname)); os2.c */ +/* static void InitNLS OF((void)); os2.c */ + int IsUpperNLS OF((int nChr)); /* os2.c */ + int ToLowerNLS OF((int nChr)); /* os2.c */ + void DebugMalloc OF((void)); /* os2.c */ +#endif + +/*--------------------------------------------------------------------------- + QDOS-only functions: + ---------------------------------------------------------------------------*/ + +#ifdef QDOS + int QMatch (uch, uch); + void QFilename (__GPRO__ char *); + char *Qstrfix (char *); + int QReturn (int zip_error); +#endif + +/*--------------------------------------------------------------------------- + TOPS20-only functions: + ---------------------------------------------------------------------------*/ + +#ifdef TOPS20 + int upper OF((char *s)); /* tops20.c */ + int enquote OF((char *s)); /* tops20.c */ + int dequote OF((char *s)); /* tops20.c */ + int fnlegal OF(()); /* error if prototyped? */ /* tops20.c */ +#endif + +/*--------------------------------------------------------------------------- + VM/CMS- and MVS-only functions: + ---------------------------------------------------------------------------*/ + +#ifdef CMS_MVS + extent getVMMVSexfield OF((char *type, uch *ef_block, unsigned datalen)); + FILE *vmmvs_open_infile OF((__GPRO)); /* vmmvs.c */ + void close_infile OF((__GPRO)); /* vmmvs.c */ +#endif + +/*--------------------------------------------------------------------------- + VMS-only functions: + ---------------------------------------------------------------------------*/ + +#ifdef VMS + int check_format OF((__GPRO)); /* vms.c */ +/* int open_outfile OF((__GPRO)); * (see fileio.c) vms.c */ +/* int flush OF((__GPRO__ uch *rawbuf, unsigned size, + int final_flag)); * (see fileio.c) vms.c */ +#ifdef RETURN_CODES + void return_VMS OF((__GPRO__ int zip_error)); /* vms.c */ +#else + void return_VMS OF((int zip_error)); /* vms.c */ +#endif +#ifdef VMSCLI + ulg vms_unzip_cmdline OF((int *, char ***)); /* cmdline.c */ + int VMSCLI_usage OF((__GPRO__ int error)); /* cmdline.c */ +#endif +#endif + +/*--------------------------------------------------------------------------- + WIN32-only functions: + ---------------------------------------------------------------------------*/ + +#ifdef WIN32 + int IsWinNT OF((void)); /* win32.c */ +#ifdef NTSD_EAS + void process_defer_NT OF((__GPRO)); /* win32.c */ + int test_NTSD OF((__GPRO__ uch *eb, unsigned eb_size, + uch *eb_ucptr, ulg eb_ucsize)); /* win32.c */ +# define TEST_NTSD test_NTSD +#endif +#ifdef W32_STAT_BANDAID + int zstat_win32 OF((__W32STAT_GLOBALS__ + const char *path, struct stat *buf)); /* win32.c */ +#endif +#endif + +/*--------------------------------------------------------------------------- + Miscellaneous/shared functions: + ---------------------------------------------------------------------------*/ + +Uz_Globs *globalsCtor OF((void)); /* globals.c */ + +void envargs OF((__GPRO__ int *Pargc, char ***Pargv, + ZCONST char *envstr, ZCONST char *envstr2)); + /* envargs.c */ +void mksargs OF((int *argcp, char ***argvp)); /* envargs.c */ + +int match OF((ZCONST char *s, ZCONST char *p, + int ic)); /* match.c */ +int iswild OF((ZCONST char *p)); /* match.c */ + +#ifdef DYNALLOC_CRCTAB + void free_crc_table OF((void)); /* crctab.c */ +#endif +#ifndef USE_ZLIB + ZCONST ulg near *get_crc_table OF((void)); /* funzip.c, crctab.c */ + ulg crc32 OF((ulg crc, ZCONST uch *buf, extent len)); +#endif /* !USE_ZLIB */ /* assembler source or crc32.c */ + +int dateformat OF((void)); /* currently, only msdos.c */ +#ifndef WINDLL + void version OF((__GPRO)); /* local */ +#endif +int mapattr OF((__GPRO)); /* local */ +int mapname OF((__GPRO__ int renamed)); /* local */ +int checkdir OF((__GPRO__ char *pathcomp, int flag)); /* local */ +char *do_wild OF((__GPRO__ char *wildzipfn)); /* local */ +char *GetLoadPath OF((__GPRO)); /* local */ +#if (defined(MORE) && (defined(UNIX) || defined(VMS) || defined(__BEOS__))) + int screenlines OF((void)); /* local */ +#endif +#ifndef MTS /* macro in MTS */ + void close_outfile OF((__GPRO)); /* local */ +#endif +#ifdef SET_DIR_ATTRIB + int set_direc_attribs OF((__GPRO__ dirtime *d)); /* local */ +#endif +#ifdef TIMESTAMP +# ifdef WIN32 + int stamp_file OF((__GPRO__ + ZCONST char *fname, time_t modtime)); /* local */ +# else + int stamp_file OF((ZCONST char *fname, time_t modtime)); /* local */ +# endif +#endif +#ifdef SYSTEM_SPECIFIC_CTOR + void SYSTEM_SPECIFIC_CTOR OF((__GPRO)); /* local */ +#endif + + + + + +/************/ +/* Macros */ +/************/ + +#ifndef MAX +# define MAX(a,b) ((a) > (b) ? (a) : (b)) +#endif +#ifndef MIN +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#ifdef DEBUG +# define Trace(x) fprintf x +#else +# define Trace(x) +#endif + +#ifdef DEBUG_TIME +# define TTrace(x) fprintf x +#else +# define TTrace(x) +#endif + +#ifdef NO_DEBUG_IN_MACROS +# define MTrace(x) +#else +# define MTrace(x) Trace(x) +#endif + +#if (defined(UNIX) || defined(T20_VMS)) /* generally old systems */ +# define ToLower(x) ((char)(isupper((int)x)? tolower((int)x) : x)) +#else +# define ToLower tolower /* assumed "smart"; used in match() */ +#endif + +#ifdef USE_STRM_INPUT + /* ``Replace'' the unbuffered UNIX style I/O function with similar + * standard C functions from . + */ +# define read(fd,buf,n) fread((buf),1,(n),(FILE *)(fd)) +# define lseek(fd,o,w) fseek((FILE *)(fd),(o),(w)) +# define close(fd) fclose((FILE *)(fd)) +#endif /* USE_STRM_INPUT */ + +/* The return value of the Info() "macro function" is never checked in + * UnZip. Otherwise, to get the same behaviour as for (*G.message)(), the + * Info() definition for "FUNZIP" would have to be corrected: + * #define Info(buf,flag,sprf_arg) \ + * (fprintf((flag)&1? stderr : stdout, \ + * (char *)(sprintf sprf_arg, (buf))) == EOF) + */ +#ifndef Info /* may already have been defined for redirection */ +# ifdef FUNZIP +# define Info(buf,flag,sprf_arg) \ + fprintf((flag)&1? stderr : stdout, (char *)(sprintf sprf_arg, (buf))) +# else +# ifdef INT_SPRINTF /* optimized version for "int sprintf()" flavour */ +# define Info(buf,flag,sprf_arg) \ + (*G.message)((zvoid *)&G, (uch *)(buf), (ulg)sprintf sprf_arg, (flag)) +# else /* generic version, does not use sprintf() return value */ +# define Info(buf,flag,sprf_arg) \ + (*G.message)((zvoid *)&G, (uch *)(buf), \ + (ulg)(sprintf sprf_arg, strlen((char *)(buf))), (flag)) +# endif +# endif +#endif /* !Info */ + +/* The following macros wrappers around the fnfilter function are used many + * times to prepare archive entry names or name components for displaying + * listings and (warning/error) messages. They use sections in the upper half + * of 'slide' as buffer, since their output is normally fed through the + * Info() macro with 'slide' (the start of this area) as message buffer. + */ +#define FnFilter1(fname) fnfilter((fname), slide + (WSIZE>>1)) +#define FnFilter2(fname) fnfilter((fname), slide + ((WSIZE>>1) + (WSIZE>>2))) + +#ifndef FUNZIP /* used only in inflate.c */ +# define MESSAGE(str,len,flag) (*G.message)((zvoid *)&G,(str),(len),(flag)) +#endif + +#if 0 /* Optimization: use the (const) result of crc32(0L,NULL,0) */ +# define CRCVAL_INITIAL crc32(0L, NULL, 0) +#else +# define CRCVAL_INITIAL 0L +#endif + +#ifndef TEST_NTSD /* "NTSD valid?" checking function */ +# define TEST_NTSD NULL /* ... is not available */ +#endif + +/* + * Seek to the block boundary of the block which includes abs_offset, + * then read block into input buffer and set pointers appropriately. + * If block is already in the buffer, just set the pointers. This macro + * is used by uz_end_central (process.c), zi_end_central (zipinfo.c) and + * do_string (fileio.c). A slightly modified version is embedded within + * extract_or_test_files (extract.c). readbyte() and readbuf() (fileio.c) + * are compatible. NOTE THAT abs_offset is intended to be the "proper off- + * set" (i.e., if there were no extra bytes prepended); cur_zipfile_bufstart + * contains the corrected offset. + * + * Since ZLSEEK is never used during decompression, it is safe to use the + * slide[] buffer for the error message. + * + * The awkward "%cbs_offset" construct is provided for the obnoxious Solaris + * compiler, which wants to do macro substitution inside strings. + */ + +#ifndef ZLSEEK +# ifdef USE_STRM_INPUT +# define _ZLS_RELOAD(abs_offset) {\ + MTrace((stderr, "ZLSEEK: %cbs_offset = %ld, G.extra_bytes = %ld\n",\ + 'a', (abs_offset), G.extra_bytes));\ + fseek(G.zipfd,(LONGINT)bufstart,SEEK_SET);\ + G.cur_zipfile_bufstart = ftell(G.zipfd);\ + MTrace((stderr,\ + " request = %ld, (abs+extra) = %ld, inbuf_offset = %ld\n",\ + request, ((abs_offset)+G.extra_bytes), inbuf_offset));\ + MTrace((stderr, " bufstart = %ld, cur_zipfile_bufstart = %ld\n",\ + bufstart, G.cur_zipfile_bufstart));\ + if ((G.incnt = fread((char *)G.inbuf,1,INBUFSIZ,G.zipfd)) <= 0)\ + return(PK_EOF);\ + G.inptr = G.inbuf + (int)inbuf_offset;\ + G.incnt -= (int)inbuf_offset;\ + } +# else /* !USE_STRM_INPUT */ +# define _ZLS_RELOAD(abs_offset) {\ + MTrace((stderr, "ZLSEEK: %cbs_offset = %ld, G.extra_bytes = %ld\n",\ + 'a', (abs_offset), G.extra_bytes));\ + G.cur_zipfile_bufstart = lseek(G.zipfd,(LONGINT)bufstart,SEEK_SET);\ + MTrace((stderr,\ + " request = %ld, (abs+extra) = %ld, inbuf_offset = %ld\n",\ + request, ((abs_offset)+G.extra_bytes), inbuf_offset));\ + MTrace((stderr, " bufstart = %ld, cur_zipfile_bufstart = %ld\n",\ + bufstart, G.cur_zipfile_bufstart));\ + if ((G.incnt = read(G.zipfd,(char *)G.inbuf,INBUFSIZ)) <= 0)\ + return(PK_EOF);\ + G.inptr = G.inbuf + (int)inbuf_offset;\ + G.incnt -= (int)inbuf_offset;\ + } +# endif /* ?USE_STRM_INPUT */ + +# define ZLSEEK(abs_offset) {\ + LONGINT request = (abs_offset) + G.extra_bytes;\ + LONGINT inbuf_offset = request % INBUFSIZ;\ + LONGINT bufstart = request - inbuf_offset;\ +\ + if (request < 0) {\ + Info(slide, 1, ((char *)slide, LoadFarStringSmall(SeekMsg),\ + G.zipfn, LoadFarString(ReportMsg)));\ + return(PK_BADERR);\ + } else if (bufstart != G.cur_zipfile_bufstart)\ + _ZLS_RELOAD(abs_offset)\ + else {\ + G.incnt += (G.inptr-G.inbuf) - (int)inbuf_offset;\ + G.inptr = G.inbuf + (int)inbuf_offset;\ + }\ + } +#endif /* !ZLSEEK */ + +#define SKIP_(length) if(length&&((error=do_string(__G__ length,SKIP))!=0))\ + {error_in_archive=error; if(error>1) return error;} + +/* + * Skip a variable-length field, and report any errors. Used in zipinfo.c + * and unzip.c in several functions. + * + * macro SKIP_(length) + * ush length; + * { + * if (length && ((error = do_string(length, SKIP)) != 0)) { + * error_in_archive = error; /-* might be warning *-/ + * if (error > 1) /-* fatal *-/ + * return (error); + * } + * } + * + */ + + +#ifdef FUNZIP +# define FLUSH(w) flush(__G__ (ulg)(w)) +# define NEXTBYTE getc(G.in) /* redefined in crypt.h if full version */ +#else +# define FLUSH(w) if (G.mem_mode) memflush(__G__ redirSlide,(ulg)(w)); \ + else flush(__G__ redirSlide,(ulg)(w),0) +# define NEXTBYTE (--G.incnt >= 0 ? (int)(*G.inptr++) : readbyte(__G)) +#endif + + +#define READBITS(nbits,zdest) {if(nbits>G.bits_left) {int temp; G.zipeof=1;\ + while (G.bits_left<=8*(int)(sizeof(G.bitbuf)-1) && (temp=NEXTBYTE)!=EOF) {\ + G.bitbuf|=(ulg)temp<>=nbits;\ + G.bits_left-=nbits;} + +/* + * macro READBITS(nbits,zdest) * only used by unreduce and unshrink * + * { + * if (nbits > G.bits_left) { * fill G.bitbuf, 8*sizeof(ulg) bits * + * int temp; + * + * G.zipeof = 1; + * while (G.bits_left <= 8*(int)(sizeof(G.bitbuf)-1) && + * (temp = NEXTBYTE) != EOF) { + * G.bitbuf |= (ulg)temp << G.bits_left; + * G.bits_left += 8; + * G.zipeof = 0; + * } + * } + * zdest = (shrint)((ush)G.bitbuf & mask_bits[nbits]); + * G.bitbuf >>= nbits; + * G.bits_left -= nbits; + * } + * + */ + + +/* GRR: should change name to STRLOWER and use StringLower if possible */ + +/* + * Copy the zero-terminated string in str1 into str2, converting any + * uppercase letters to lowercase as we go. str2 gets zero-terminated + * as well, of course. str1 and str2 may be the same character array. + */ +#ifdef __human68k__ +# define TOLOWER(str1, str2) \ + { \ + char *p=(str1), *q=(str2); \ + uch c; \ + while ((c = *p++) != '\0') { \ + if (iskanji(c)) { \ + if (*p == '\0') \ + break; \ + *q++ = c; \ + *q++ = *p++; \ + } else \ + *q++ = isupper(c) ? tolower(c) : c; \ + } \ + *q = '\0'; \ + } +#else +# define TOLOWER(str1, str2) \ + { \ + char *p, *q; \ + p = (str1) - 1; \ + q = (str2); \ + while (*++p) \ + *q++ = (char)(isupper((int)(*p))? tolower((int)(*p)) : *p); \ + *q = '\0'; \ + } +#endif +/* + * NOTES: This macro makes no assumptions about the characteristics of + * the tolower() function or macro (beyond its existence), nor does it + * make assumptions about the structure of the character set (i.e., it + * should work on EBCDIC machines, too). The fact that either or both + * of isupper() and tolower() may be macros has been taken into account; + * watch out for "side effects" (in the C sense) when modifying this + * macro. + */ + +#ifndef foreign +# define foreign(c) (c) +#endif + +#ifndef native +# define native(c) (c) +# define A_TO_N(str1) +#else +# ifndef NATIVE +# define NATIVE "native chars" +# endif +# define A_TO_N(str1) {register uch *p;\ + for (p=(uch *)(str1); *p; p++) *p=native(*p);} +#endif +/* + * Translate the zero-terminated string in str1 from ASCII to the native + * character set. The translation is performed in-place and uses the + * "native" macro to translate each character. + * + * NOTE: Using the "native" macro means that is it the only part of unzip + * which knows which translation table (if any) is actually in use to + * produce the native character set. This makes adding new character set + * translation tables easy, insofar as all that is needed is an appropriate + * "native" macro definition and the translation table itself. Currently, + * the only non-ASCII native character set implemented is EBCDIC, but this + * may not always be so. + */ + + +/* default setup for internal codepage: assume ISO 8859-1 compatibility!! */ +#if (!defined(NATIVE) && !defined(CRTL_CP_IS_ISO) && !defined(CRTL_CP_IS_OEM)) +# define CRTL_CP_IS_ISO +#endif + + +/* Translate "extended ASCII" chars (OEM coding for DOS and OS/2; else + * ISO-8859-1 [ISO Latin 1, Win Ansi,...]) into the internal "native" + * code page. As with A_TO_N(), conversion is done in place. + */ +#ifndef _ISO_INTERN +# ifdef CRTL_CP_IS_OEM +# ifndef IZ_ISO2OEM_ARRAY +# define IZ_ISO2OEM_ARRAY +# endif +# define _ISO_INTERN(str1) {register uch *p;\ + for (p=(uch *)(str1); *p; p++)\ + *p = native((*p & 0x80) ? iso2oem[*p & 0x7f] : *p);} +# else +# define _ISO_INTERN(str1) A_TO_N(str1) +# endif +#endif + +#ifndef _OEM_INTERN +# ifdef CRTL_CP_IS_OEM +# define _OEM_INTERN(str1) A_TO_N(str1) +# else +# ifndef IZ_OEM2ISO_ARRAY +# define IZ_OEM2ISO_ARRAY +# endif +# define _OEM_INTERN(str1) {register uch *p;\ + for (p=(uch *)(str1); *p; p++)\ + *p = native((*p & 0x80) ? oem2iso[*p & 0x7f] : *p);} +# endif +#endif + +#ifndef STR_TO_ISO +# ifdef CRTL_CP_IS_ISO +# define STR_TO_ISO strcpy +# else +# define STR_TO_ISO str2iso +# define NEED_STR2ISO +# endif +#endif + +#ifndef STR_TO_OEM +# ifdef CRTL_CP_IS_OEM +# define STR_TO_OEM strcpy +# else +# define STR_TO_OEM str2oem +# define NEED_STR2OEM +# endif +#endif + +#if (!defined(INTERN_TO_ISO) && !defined(ASCII2ISO)) +# ifdef CRTL_CP_IS_OEM + /* know: "ASCII" is "OEM" */ +# define ASCII2ISO(c) (((c) & 0x80) ? oem2iso[(c) & 0x7f] : (c)) +# if (defined(NEED_STR2ISO) && !defined(CRYP_USES_OEM2ISO)) +# define CRYP_USES_OEM2ISO +# endif +# else + /* assume: "ASCII" is "ISO-ANSI" */ +# define ASCII2ISO(c) (c) +# endif +#endif + +#if (!defined(INTERN_TO_OEM) && !defined(ASCII2OEM)) +# ifdef CRTL_CP_IS_OEM + /* know: "ASCII" is "OEM" */ +# define ASCII2OEM(c) (c) +# else + /* assume: "ASCII" is "ISO-ANSI" */ +# define ASCII2OEM(c) (((c) & 0x80) ? iso2oem[(c) & 0x7f] : (c)) +# if (defined(NEED_STR2OEM) && !defined(CRYP_USES_ISO2OEM)) +# define CRYP_USES_ISO2OEM +# endif +# endif +#endif + +/* codepage conversion setup for testp() in crypt.c */ +#ifdef CRTL_CP_IS_ISO +# ifndef STR_TO_CP2 +# define STR_TO_CP2 STR_TO_OEM +# endif +#else +# ifdef CRTL_CP_IS_OEM +# ifndef STR_TO_CP2 +# define STR_TO_CP2 STR_TO_ISO +# endif +# else /* native internal CP is neither ISO nor OEM */ +# ifndef STR_TO_CP1 +# define STR_TO_CP1 STR_TO_ISO +# endif +# ifndef STR_TO_CP2 +# define STR_TO_CP2 STR_TO_OEM +# endif +# endif +#endif + + +/* Convert filename (and file comment string) into "internal" charset. + * This macro assumes that Zip entry filenames are coded in OEM (IBM DOS) + * codepage when made on + * -> DOS (this includes 16-bit Windows 3.1) (FS_FAT_) + * -> OS/2 (FS_HPFS_) + * -> Win95/WinNT with Nico Mak's WinZip (FS_NTFS_ && hostver == "5.0") + * + * All other ports are assumed to code zip entry filenames in ISO 8859-1. + */ +#ifndef Ext_ASCII_TO_Native +# define Ext_ASCII_TO_Native(string, hostnum, hostver) \ + if ((hostnum) == FS_FAT_ || (hostnum) == FS_HPFS_ || \ + ((hostnum) == FS_NTFS_ && (hostver) == 50)) { \ + _OEM_INTERN((string)); \ + } else { \ + _ISO_INTERN((string)); \ + } +#endif + + + +/**********************/ +/* Global constants */ +/**********************/ + + extern ZCONST ush near mask_bits[]; + extern ZCONST char *fnames[2]; + +#ifdef EBCDIC + extern ZCONST uch ebcdic[]; +#endif +#ifdef IZ_ISO2OEM_ARRAY + extern ZCONST uch Far iso2oem[]; +#endif +#ifdef IZ_OEM2ISO_ARRAY + extern ZCONST uch Far oem2iso[]; +#endif + + extern ZCONST char Far VersionDate[]; + extern ZCONST char Far CentSigMsg[]; + extern ZCONST char Far EndSigMsg[]; + extern ZCONST char Far SeekMsg[]; + extern ZCONST char Far FilenameNotMatched[]; + extern ZCONST char Far ExclFilenameNotMatched[]; + extern ZCONST char Far ReportMsg[]; + +#ifndef SFX + extern ZCONST char Far CompiledWith[]; +#endif /* !SFX */ + + + +/***********************************/ +/* Global (shared?) RTL variables */ +/***********************************/ + +#ifdef DECLARE_ERRNO + extern int errno; +#endif + + +#endif /* !__unzpriv_h */ diff --git a/Build/source/extra/unzip/version.h b/Build/source/extra/unzip/version.h new file mode 100644 index 00000000000..763cc13078c --- /dev/null +++ b/Build/source/extra/unzip/version.h @@ -0,0 +1,44 @@ +/* + version.h (for UnZip) by Info-ZIP. + + This header file is not copyrighted and may be distributed without + restriction. (That's a little geek humor, heh heh.) + */ + +#ifndef __version_h /* don't include more than once */ +#define __version_h + +#ifdef BETA +# undef BETA /* define BETA for internal beta releases */ +#endif + +#ifdef BETA +# define BETALEVEL "d BETA" +# define VERSION_DATE "27 November 98" /* internal beta version */ +#else +# define BETALEVEL "" +# define VERSION_DATE "28 November 1998" /* official release version */ +# define RELEASE +#endif + +#define UZ_MAJORVER 5 /* UnZip */ +#define UZ_MINORVER 4 + +#define ZI_MAJORVER 2 /* ZipInfo */ +#define ZI_MINORVER 3 + +#define PATCHLEVEL 0 + + +/* these are obsolete but remain for backward compatibility: */ +#define D2_MAJORVER UZ_MAJORVER /* DLL for OS/2 */ +#define D2_MINORVER UZ_MINORVER +#define D2_PATCHLEVEL PATCHLEVEL + +#define DW_MAJORVER UZ_MAJORVER /* DLL for MS Windows */ +#define DW_MINORVER UZ_MINORVER +#define DW_PATCHLEVEL PATCHLEVEL + +#define WIN_VERSION_DATE VERSION_DATE + +#endif /* !__version_h */ diff --git a/Build/source/extra/unzip/win32/nt.c b/Build/source/extra/unzip/win32/nt.c new file mode 100644 index 00000000000..5f5572381f1 --- /dev/null +++ b/Build/source/extra/unzip/win32/nt.c @@ -0,0 +1,659 @@ +/* + + Copyright (c) 1996 Scott Field + + Module Name: + + nt.c + + Abstract: + + This module implements WinNT security descriptor operations for the + Win32 Info-ZIP project. Operation such as setting file security, + using/querying local and remote privileges, and queuing of operations + is performed here. The contents of this module are only relevant + when the code is running on Windows NT, and the target volume supports + persistent Acl storage. + + User privileges that allow accessing certain privileged aspects of the + security descriptor (such as the Sacl) are only used if the user specified + to do so. + + Author: + + Scott Field (sfield@microsoft.com) + + Last revised: 18 Jan 97 + + */ + +#define WIN32_LEAN_AND_MEAN +#define UNZIP_INTERNAL +#include "unzip.h" +#include +#ifdef __RSXNT__ +# include "win32/rsxntwin.h" +#endif +#include "win32/nt.h" + + +#ifdef NTSD_EAS /* This file is only needed for NTSD handling */ + +/* Borland C++ does not define FILE_SHARE_DELETE. Others also? */ +#ifndef FILE_SHARE_DELETE +# define FILE_SHARE_DELETE 0x00000004 +#endif + + +/* private prototypes */ + +static BOOL Initialize(VOID); +#if 0 /* currently unused */ +static BOOL Shutdown(VOID); +#endif +static BOOL DeferSet(char *resource, PVOLUMECAPS VolumeCaps, uch *buffer); +static VOID GetRemotePrivilegesSet(CHAR *FileName, PDWORD dwRemotePrivileges); +static VOID InitLocalPrivileges(VOID); + + +BOOL bInitialized = FALSE; /* module level stuff initialized? */ +HANDLE hInitMutex = NULL; /* prevent multiple initialization */ + +BOOL g_bRestorePrivilege = FALSE; /* for local set file security override */ +BOOL g_bSaclPrivilege = FALSE; /* for local set sacl operations, only when + restore privilege not present */ + +/* our single cached volume capabilities structure that describes the last + volume root we encountered. A single entry like this works well in the + zip/unzip scenario for a number of reasons: + 1. typically one extraction path during unzip. + 2. typically process one volume at a time during zip, and then move + on to the next. + 3. no cleanup code required and no memory leaks. + 4. simple code. + + This approach should be reworked to a linked list approach if we expect to + be called by many threads which are processing a variety of input/output + volumes, since lock contention and stale data may become a bottleneck. */ + +VOLUMECAPS g_VolumeCaps; +CRITICAL_SECTION VolumeCapsLock; + + +/* our deferred set structure linked list element, used for making a copy + of input data which is used at a later time to process the original input + at a time when it makes more sense. eg, applying security to newly created + directories, after all files have been placed in such directories. */ + +CRITICAL_SECTION SetDeferLock; + +typedef struct _DEFERRED_SET { + struct _DEFERRED_SET *Next; + uch *buffer; /* must point to DWORD aligned block */ + PVOLUMECAPS VolumeCaps; + char *resource; +} DEFERRED_SET, *PDEFERRED_SET, *LPDEFERRED_SET; + +PDEFERRED_SET pSetHead = NULL; +PDEFERRED_SET pSetTail; + +static BOOL Initialize(VOID) +{ + HANDLE hMutex; + HANDLE hOldMutex; + + if(bInitialized) return TRUE; + + hMutex = CreateMutex(NULL, TRUE, NULL); + if(hMutex == NULL) return FALSE; + + hOldMutex = (HANDLE)InterlockedExchange((LPLONG)&hInitMutex, (LONG)hMutex); + + if(hOldMutex != NULL) { + /* somebody setup the mutex already */ + InterlockedExchange((LPLONG)&hInitMutex, (LONG)hOldMutex); + + CloseHandle(hMutex); /* close new, un-needed mutex */ + + /* wait for initialization to complete and return status */ + WaitForSingleObject(hOldMutex, INFINITE); + ReleaseMutex(hOldMutex); + + return bInitialized; + } + + /* initialize module level resources */ + + InitializeCriticalSection( &SetDeferLock ); + + InitializeCriticalSection( &VolumeCapsLock ); + memset(&g_VolumeCaps, 0, sizeof(VOLUMECAPS)); + + InitLocalPrivileges(); + + bInitialized = TRUE; + + ReleaseMutex(hMutex); /* release correct mutex */ + + return TRUE; +} + +#if 0 /* currently not used ! */ +static BOOL Shutdown(VOID) +{ + /* really need to free critical sections, disable enabled privilges, etc, + but doing so brings up possibility of race conditions if those resources + are about to be used. The easiest way to handle this is let these + resources be freed when the process terminates... */ + + return TRUE; +} +#endif /* never */ + + +static BOOL DeferSet(char *resource, PVOLUMECAPS VolumeCaps, uch *buffer) +{ + PDEFERRED_SET psd; + DWORD cbDeferSet; + DWORD cbResource; + DWORD cbBuffer; + + if(!bInitialized) if(!Initialize()) return FALSE; + + cbResource = lstrlenA(resource) + 1; + cbBuffer = GetSecurityDescriptorLength((PSECURITY_DESCRIPTOR)buffer); + cbDeferSet = sizeof(DEFERRED_SET) + cbBuffer + sizeof(VOLUMECAPS) + + cbResource; + + psd = (PDEFERRED_SET)HeapAlloc(GetProcessHeap(), 0, cbDeferSet); + if(psd == NULL) return FALSE; + + psd->Next = NULL; + psd->buffer = (uch *)(psd+1); + psd->VolumeCaps = (PVOLUMECAPS)((char *)psd->buffer + cbBuffer); + psd->resource = (char *)((char *)psd->VolumeCaps + sizeof(VOLUMECAPS)); + + memcpy(psd->buffer, buffer, cbBuffer); + memcpy(psd->VolumeCaps, VolumeCaps, sizeof(VOLUMECAPS)); + psd->VolumeCaps->bProcessDefer = TRUE; + memcpy(psd->resource, resource, cbResource); + + /* take defer lock */ + EnterCriticalSection( &SetDeferLock ); + + /* add element at tail of list */ + + if(pSetHead == NULL) { + pSetHead = psd; + } else { + pSetTail->Next = psd; + } + + pSetTail = psd; + + /* release defer lock */ + LeaveCriticalSection( &SetDeferLock ); + + return TRUE; +} + +BOOL ProcessDefer(PDWORD dwDirectoryCount, PDWORD dwBytesProcessed, + PDWORD dwDirectoryFail, PDWORD dwBytesFail) +{ + PDEFERRED_SET This; + PDEFERRED_SET Next; + + *dwDirectoryCount = 0; + *dwBytesProcessed = 0; + + *dwDirectoryFail = 0; + *dwBytesFail = 0; + + if(!bInitialized) return TRUE; /* nothing to do */ + + EnterCriticalSection( &SetDeferLock ); + + This = pSetHead; + + while(This) { + + if(SecuritySet(This->resource, This->VolumeCaps, This->buffer)) { + (*dwDirectoryCount)++; + *dwBytesProcessed += + GetSecurityDescriptorLength((PSECURITY_DESCRIPTOR)This->buffer); + } else { + (*dwDirectoryFail)++; + *dwBytesFail += + GetSecurityDescriptorLength((PSECURITY_DESCRIPTOR)This->buffer); + } + + Next = This->Next; + HeapFree(GetProcessHeap(), 0, This); + This = Next; + } + + pSetHead = NULL; + + LeaveCriticalSection( &SetDeferLock ); + + return TRUE; +} + +BOOL ValidateSecurity(uch *securitydata) +{ + PSECURITY_DESCRIPTOR sd = (PSECURITY_DESCRIPTOR)securitydata; + PACL pAcl; + PSID pSid; + BOOL bAclPresent; + BOOL bDefaulted; + + if(!IsWinNT()) return TRUE; /* don't do anything if not on WinNT */ + + if(!IsValidSecurityDescriptor(sd)) return FALSE; + + /* verify Dacl integrity */ + + if(!GetSecurityDescriptorDacl(sd, &bAclPresent, &pAcl, &bDefaulted)) + return FALSE; + + if(bAclPresent) { + if(!IsValidAcl(pAcl)) return FALSE; + } + + /* verify Sacl integrity */ + + if(!GetSecurityDescriptorSacl(sd, &bAclPresent, &pAcl, &bDefaulted)) + return FALSE; + + if(bAclPresent) { + if(!IsValidAcl(pAcl)) return FALSE; + } + + /* verify owner integrity */ + + if(!GetSecurityDescriptorOwner(sd, &pSid, &bDefaulted)) + return FALSE; + + if(pSid != NULL) { + if(!IsValidSid(pSid)) return FALSE; + } + + /* verify group integrity */ + + if(!GetSecurityDescriptorGroup(sd, &pSid, &bDefaulted)) + return FALSE; + + if(pSid != NULL) { + if(!IsValidSid(pSid)) return FALSE; + } + + return TRUE; +} + +static VOID GetRemotePrivilegesSet(char *FileName, PDWORD dwRemotePrivileges) +{ + HANDLE hFile; + + *dwRemotePrivileges = 0; + + /* see if we have the SeRestorePrivilege */ + + hFile = CreateFileA( + FileName, + ACCESS_SYSTEM_SECURITY | WRITE_DAC | WRITE_OWNER | READ_CONTROL, + FILE_SHARE_READ | FILE_SHARE_DELETE, /* no sd updating allowed here */ + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + NULL + ); + + if(hFile != INVALID_HANDLE_VALUE) { + /* no remote way to determine SeRestorePrivilege -- just try a + read/write to simulate it */ + SECURITY_INFORMATION si = DACL_SECURITY_INFORMATION | + SACL_SECURITY_INFORMATION | OWNER_SECURITY_INFORMATION | + GROUP_SECURITY_INFORMATION; + PSECURITY_DESCRIPTOR sd; + DWORD cbBuf = 0; + + GetKernelObjectSecurity(hFile, si, NULL, cbBuf, &cbBuf); + + if(ERROR_INSUFFICIENT_BUFFER == GetLastError()) { + if((sd = HeapAlloc(GetProcessHeap(), 0, cbBuf)) != NULL) { + if(GetKernelObjectSecurity(hFile, si, sd, cbBuf, &cbBuf)) { + if(SetKernelObjectSecurity(hFile, si, sd)) + *dwRemotePrivileges |= OVERRIDE_RESTORE; + } + HeapFree(GetProcessHeap(), 0, sd); + } + } + + CloseHandle(hFile); + } else { + + /* see if we have the SeSecurityPrivilege */ + /* note we don't need this if we have SeRestorePrivilege */ + + hFile = CreateFileA( + FileName, + ACCESS_SYSTEM_SECURITY, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, /* max */ + NULL, + OPEN_EXISTING, + 0, + NULL + ); + + if(hFile != INVALID_HANDLE_VALUE) { + CloseHandle(hFile); + *dwRemotePrivileges |= OVERRIDE_SACL; + } + } +} + + +BOOL GetVolumeCaps( + char *rootpath, /* filepath, or NULL */ + char *name, /* filename associated with rootpath */ + PVOLUMECAPS VolumeCaps /* result structure describing capabilities */ + ) +{ + char TempRootPath[MAX_PATH + 1]; + DWORD cchTempRootPath = 0; + BOOL bSuccess = TRUE; /* assume success until told otherwise */ + + if(!bInitialized) if(!Initialize()) return FALSE; + + /* process the input path to produce a consistent path suitable for + compare operations and also suitable for certain picky Win32 API + that don't like forward slashes */ + + if(rootpath != NULL && rootpath[0] != '\0') { + DWORD i; + + cchTempRootPath = lstrlen(rootpath); + if(cchTempRootPath > MAX_PATH) return FALSE; + + /* copy input, converting forward slashes to back slashes as we go */ + + for(i = 0 ; i <= cchTempRootPath ; i++) { + if(rootpath[i] == '/') TempRootPath[i] = '\\'; + else TempRootPath[i] = rootpath[i]; + } + + /* check for UNC and Null terminate or append trailing \ as + appropriate */ + + /* possible valid UNCs we are passed follow: + \\machine\foo\bar (path is \\machine\foo\) + \\machine\foo (path is \\machine\foo\) + \\machine\foo\ + \\.\c$\ (FIXFIX: Win32API doesn't like this - GetComputerName()) + LATERLATER: handling mounted DFS drives in the future will require + slightly different logic which isn't available today. + This is required because directories can point at + different servers which have differing capabilities. + */ + + if(TempRootPath[0] == '\\' && TempRootPath[1] == '\\') { + DWORD slash = 0; + + for(i = 2 ; i < cchTempRootPath ; i++) { + if(TempRootPath[i] == '\\') { + slash++; + + if(slash == 2) { + i++; + TempRootPath[i] = '\0'; + cchTempRootPath = i; + break; + } + } + } + + /* if there was only one slash found, just tack another onto the + end */ + + if(slash == 1 && TempRootPath[cchTempRootPath] != '\\') { + TempRootPath[cchTempRootPath] = TempRootPath[0]; /* '\' */ + TempRootPath[cchTempRootPath+1] = '\0'; + cchTempRootPath++; + } + + } else { + + if(TempRootPath[1] == ':') { + + /* drive letter specified, truncate to root */ + TempRootPath[2] = '\\'; + TempRootPath[3] = '\0'; + cchTempRootPath = 3; + } else { + + /* must be file on current drive */ + TempRootPath[0] = '\0'; + cchTempRootPath = 0; + } + + } + + } /* if path != NULL */ + + /* grab lock protecting cached entry */ + EnterCriticalSection( &VolumeCapsLock ); + + if(!g_VolumeCaps.bValid || + lstrcmpi(g_VolumeCaps.RootPath, TempRootPath) != 0) + { + + /* no match found, build up new entry */ + + DWORD dwFileSystemFlags; + DWORD dwRemotePrivileges = 0; + BOOL bRemote = FALSE; + + /* release lock during expensive operations */ + LeaveCriticalSection( &VolumeCapsLock ); + + bSuccess = GetVolumeInformation( + (TempRootPath[0] == '\0') ? NULL : TempRootPath, + NULL, 0, + NULL, NULL, + &dwFileSystemFlags, + NULL, 0); + + + /* only if target volume supports Acls, and we were told to use + privileges do we need to go out and test for the remote case */ + + if(bSuccess && (dwFileSystemFlags & FS_PERSISTENT_ACLS) && + VolumeCaps->bUsePrivileges) + { + if(GetDriveType( (TempRootPath[0] == '\0') ? NULL : TempRootPath ) + == DRIVE_REMOTE) + { + bRemote = TRUE; + + /* make a determination about our remote capabilities */ + + GetRemotePrivilegesSet(name, &dwRemotePrivileges); + } + } + + /* always take the lock again, since we release it below */ + EnterCriticalSection( &VolumeCapsLock ); + + /* replace the existing data if successful */ + if(bSuccess) { + + lstrcpynA(g_VolumeCaps.RootPath, TempRootPath, cchTempRootPath+1); + g_VolumeCaps.bProcessDefer = FALSE; + g_VolumeCaps.dwFileSystemFlags = dwFileSystemFlags; + g_VolumeCaps.bRemote = bRemote; + g_VolumeCaps.dwRemotePrivileges = dwRemotePrivileges; + g_VolumeCaps.bValid = TRUE; + } + } + + if(bSuccess) { + /* copy input elements */ + g_VolumeCaps.bUsePrivileges = VolumeCaps->bUsePrivileges; + g_VolumeCaps.dwFileAttributes = VolumeCaps->dwFileAttributes; + + /* give caller results */ + memcpy(VolumeCaps, &g_VolumeCaps, sizeof(VOLUMECAPS)); + } else { + g_VolumeCaps.bValid = FALSE; + } + + LeaveCriticalSection( &VolumeCapsLock ); /* release lock */ + + return bSuccess; +} + + +BOOL SecuritySet(char *resource, PVOLUMECAPS VolumeCaps, uch *securitydata) +{ + HANDLE hFile; + DWORD dwDesiredAccess = 0; + DWORD dwFlags = 0; + PSECURITY_DESCRIPTOR sd = (PSECURITY_DESCRIPTOR)securitydata; + SECURITY_DESCRIPTOR_CONTROL sdc; + SECURITY_INFORMATION RequestedInfo = 0; + DWORD dwRev; + BOOL bRestorePrivilege = FALSE; + BOOL bSaclPrivilege = FALSE; + BOOL bSuccess; + + if(!bInitialized) if(!Initialize()) return FALSE; + + /* defer directory processing */ + + if(VolumeCaps->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + if(!VolumeCaps->bProcessDefer) { + return DeferSet(resource, VolumeCaps, securitydata); + } else { + /* opening a directory requires FILE_FLAG_BACKUP_SEMANTICS */ + dwFlags |= FILE_FLAG_BACKUP_SEMANTICS; + } + } + + /* evaluate the input security desriptor and act accordingly */ + + if(!IsValidSecurityDescriptor(sd)) + return FALSE; + + if(!GetSecurityDescriptorControl(sd, &sdc, &dwRev)) + return FALSE; + + /* setup privilege usage based on if told we can use privileges, and if so, + what privileges we have */ + + if(VolumeCaps->bUsePrivileges) { + if(VolumeCaps->bRemote) { + /* use remotely determined privileges */ + if(VolumeCaps->dwRemotePrivileges & OVERRIDE_RESTORE) + bRestorePrivilege = TRUE; + + if(VolumeCaps->dwRemotePrivileges & OVERRIDE_SACL) + bSaclPrivilege = TRUE; + + } else { + /* use local privileges */ + bRestorePrivilege = g_bRestorePrivilege; + bSaclPrivilege = g_bSaclPrivilege; + } + } + + + /* if a Dacl is present write Dacl out */ + /* if we have SeRestorePrivilege, write owner and group info out */ + + if(sdc & SE_DACL_PRESENT) { + dwDesiredAccess |= WRITE_DAC; + RequestedInfo |= DACL_SECURITY_INFORMATION; + + if(bRestorePrivilege) { + dwDesiredAccess |= WRITE_OWNER; + RequestedInfo |= (OWNER_SECURITY_INFORMATION | + GROUP_SECURITY_INFORMATION); + } + } + + /* if a Sacl is present and we have either SeRestorePrivilege or + SeSystemSecurityPrivilege try to write Sacl out */ + + if((sdc & SE_SACL_PRESENT) && (bRestorePrivilege || bSaclPrivilege)) { + dwDesiredAccess |= ACCESS_SYSTEM_SECURITY; + RequestedInfo |= SACL_SECURITY_INFORMATION; + } + + if(RequestedInfo == 0) /* nothing to do */ + return FALSE; + + if(bRestorePrivilege) + dwFlags |= FILE_FLAG_BACKUP_SEMANTICS; + + hFile = CreateFileA( + resource, + dwDesiredAccess, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,/* max sharing */ + NULL, + OPEN_EXISTING, + dwFlags, + NULL + ); + + if(hFile == INVALID_HANDLE_VALUE) + return FALSE; + + bSuccess = SetKernelObjectSecurity(hFile, RequestedInfo, sd); + + CloseHandle(hFile); + + return bSuccess; +} + +static VOID InitLocalPrivileges(VOID) +{ + HANDLE hToken; + TOKEN_PRIVILEGES tp; + + /* try to enable some interesting privileges that give us the ability + to get some security information that we normally cannot. + + note that enabling privileges is only relevant on the local machine; + when accessing files that are on a remote machine, any privileges + that are present on the remote machine get enabled by default. */ + + if(!OpenProcessToken(GetCurrentProcess(), + TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken)) + return; + + tp.PrivilegeCount = 1; + tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + + if(LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &tp.Privileges[0].Luid)) { + + /* try to enable SeRestorePrivilege; if this succeeds, we can write + all aspects of the security descriptor */ + + if(AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL) && + GetLastError() == ERROR_SUCCESS) g_bRestorePrivilege = TRUE; + + } + + /* try to enable SeSystemSecurityPrivilege, if SeRestorePrivilege not + present; if this succeeds, we can write the Sacl */ + + if(!g_bRestorePrivilege && + LookupPrivilegeValue(NULL, SE_SECURITY_NAME, &tp.Privileges[0].Luid)) { + + if(AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL) && + GetLastError() == ERROR_SUCCESS) g_bSaclPrivilege = TRUE; + } + + CloseHandle(hToken); +} +#endif /* NTSD_EAS */ diff --git a/Build/source/extra/unzip/win32/nt.h b/Build/source/extra/unzip/win32/nt.h new file mode 100644 index 00000000000..0109c2b678a --- /dev/null +++ b/Build/source/extra/unzip/win32/nt.h @@ -0,0 +1,28 @@ +/* nt.h: central header for EF_NTSD "SD" extra field */ + +#ifndef _NT_H +#define _NT_H + +#define NTSD_BUFFERSIZE (1024) /* threshold to cause malloc() */ +#define OVERRIDE_BACKUP 1 /* we have SeBackupPrivilege on remote */ +#define OVERRIDE_RESTORE 2 /* we have SeRestorePrivilege on remote */ +#define OVERRIDE_SACL 4 /* we have SeSystemSecurityPrivilege on remote */ + +typedef struct { + BOOL bValid; /* are our contents valid? */ + BOOL bProcessDefer; /* process deferred entry yet? */ + BOOL bUsePrivileges; /* use privilege overrides? */ + DWORD dwFileSystemFlags; /* describes target file system */ + BOOL bRemote; /* is volume remote? */ + DWORD dwRemotePrivileges; /* relevant only on remote volumes */ + DWORD dwFileAttributes; + char RootPath[MAX_PATH+1]; /* path to network / filesystem */ +} VOLUMECAPS, *PVOLUMECAPS, *LPVOLUMECAPS; + +BOOL SecuritySet(char *resource, PVOLUMECAPS VolumeCaps, uch *securitydata); +BOOL GetVolumeCaps(char *rootpath, char *name, PVOLUMECAPS VolumeCaps); +BOOL ValidateSecurity(uch *securitydata); +BOOL ProcessDefer(PDWORD dwDirectoryCount, PDWORD dwBytesProcessed, + PDWORD dwDirectoryFail, PDWORD dwBytesFail); + +#endif /* _NT_H */ diff --git a/Build/source/extra/unzip/win32/w32cfg.h b/Build/source/extra/unzip/win32/w32cfg.h new file mode 100644 index 00000000000..18a8e3f85c3 --- /dev/null +++ b/Build/source/extra/unzip/win32/w32cfg.h @@ -0,0 +1,222 @@ +/*--------------------------------------------------------------------------- + Win32 specific configuration section: + ---------------------------------------------------------------------------*/ + +#ifndef __w32cfg_h +#define __w32cfg_h + +#if (defined(__CYGWIN__) && !defined(__CYGWIN32__)) +# define __CYGWIN32__ /* new versions of CygWin may not define this */ +#endif + +#include /* off_t, time_t, dev_t, ... */ +#include +#include /* read(), open(), etc. */ +#include +#if (defined(__RSXNT__) || defined(__EMX__)) && !defined(tzset) +# define tzset _tzset +#endif +#ifdef __MINGW32__ + extern void _tzset(void); /* this is missing in */ +# ifndef tzset +# define tzset _tzset +# endif +#endif +#include +#if (!defined(__RSXNT__) && !defined(__CYGWIN32__)) +# include /* mkdir() */ +#endif +#include +#ifdef __CYGWIN32__ +# include + extern int setmode(int, int); /* this is missing in */ +#endif +#if (defined(MSC) || defined(__WATCOMC__) || defined(__MINGW32__)) +# include +#else +# include +#endif + +#if defined(FILEIO_C) +# ifndef __CYGWIN32__ +# include +# endif +# include +# ifdef __RSXNT__ +# include "win32/rsxntwin.h" +# endif +#endif +#if (defined(ENVARGS_C) || defined(EXTRACT_C) || defined(UNZIP_C) || \ + defined(ZCRYPT_INTERNAL)) +# include +# ifdef __RSXNT__ +# include "win32/rsxntwin.h" +# endif +#endif +#if (defined(__CYGWIN32__) || defined(__MINGW32__)) + /* the following definitions are missing in their */ +# ifndef AnsiToOem +# define AnsiToOem CharToOemA +# endif +# ifndef OemToAnsi +# define OemToAnsi OemToCharA +# endif +#endif + +#define DIR_END '\\' /* OS uses '\\' as directory separator */ +#define DIR_END2 '/' /* also check for '/' (RTL may convert) */ +#ifndef DATE_FORMAT +# define DATE_FORMAT DF_MDY +#endif +#define lenEOL 2 +#define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} + +#if (defined(__RSXNT__) && !defined(HAVE_MKTIME)) +# define HAVE_MKTIME /* use mktime() in time conversion routines */ +#endif +#if (defined(__CYGWIN32__) && defined(HAVE_MKTIME)) +# undef HAVE_MKTIME /* Cygnus' mktime() implementation is buggy */ +#endif +#if (!defined(NT_TZBUG_WORKAROUND) && !defined(NO_NT_TZBUG_WORKAROUND)) +# define NT_TZBUG_WORKAROUND +#endif +#if (!defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME)) +# define USE_EF_UT_TIME +#endif +#if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) +# define TIMESTAMP +#endif +#if (!defined(NO_NTSD_EAS) && !defined(NTSD_EAS)) +# define NTSD_EAS /* enable NTSD support unless explicitly suppressed */ +#endif + +/* handlers for OEM <--> ANSI string conversions */ +#ifdef __RSXNT__ + /* RSXNT uses OEM coded strings in functions supplied by C RTL */ +# ifdef CRTL_CP_IS_ISO +# undef CRTL_CP_IS_ISO +# endif +# ifndef CRTL_CP_IS_OEM +# define CRTL_CP_IS_OEM +# endif +#else + /* "real" native WIN32 compilers use ANSI coded strings in C RTL calls */ +# ifndef CRTL_CP_IS_ISO +# define CRTL_CP_IS_ISO +# endif +# ifdef CRTL_CP_IS_OEM +# undef CRTL_CP_IS_OEM +# endif +#endif + +#ifdef CRTL_CP_IS_ISO + /* C RTL's file system support assumes ANSI coded strings */ +# define ISO_TO_INTERN(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} +# define OEM_TO_INTERN(src, dst) OemToAnsi(src, dst) +# define INTERN_TO_ISO(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} +# define INTERN_TO_OEM(src, dst) AnsiToOem(src, dst) +#endif /* CRTL_CP_IS_ISO */ +#ifdef CRTL_CP_IS_OEM + /* C RTL's file system support assumes OEM coded strings */ +# define ISO_TO_INTERN(src, dst) AnsiToOem(src, dst) +# define OEM_TO_INTERN(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} +# define INTERN_TO_ISO(src, dst) OemToAnsi(src, dst) +# define INTERN_TO_OEM(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} +#endif /* CRTL_CP_IS_OEM */ +#define _OEM_INTERN(str1) OEM_TO_INTERN(str1, str1) +#define _ISO_INTERN(str1) ISO_TO_INTERN(str1, str1) +#ifndef WINDLL + /* Despite best intentions, for the command-line version UzpPassword() + * could return either character set, depending on whether running under + * Win95 (DOS-session) or WinNT (native WinNT command interpreter)! */ +# define STR_TO_CP2(dst, src) (AnsiToOem(src, dst), dst) +# define STR_TO_CP3(dst, src) (OemToAnsi(src, dst), dst) +#else + /* The WINDLL front end is known to supply ISO/ANSI-coded passwords! */ +# define STR_TO_CP2(dst, src) (AnsiToOem(src, dst), dst) +#endif +/* dummy defines to disable these functions, they are not needed */ +#define STR_TO_OEM +#define STR_TO_ISO + +/* Static variables that we have to add to Uz_Globs: */ +#define SYSTEM_SPECIFIC_GLOBALS \ + int created_dir, renamed_fullpath, fnlen;\ + unsigned nLabelDrive;\ + char lastRootPath[4];\ + int lastVolOldFAT, lastVolLocTim;\ + char *rootpath, *buildpathHPFS, *buildpathFAT, *endHPFS, *endFAT;\ + char *dirname, *wildname, matchname[FILNAMSIZ];\ + int rootlen, have_dirname, dirnamelen, notfirstcall;\ + zvoid *wild_dir; + +/* created_dir, renamed_fullpath, fnlen, and nLabelDrive are used by */ +/* both mapname() and checkdir(). */ +/* lastRootPath and lastVolOldFAT are used by IsVolumeOldFAT(). */ +/* rootlen, rootpath, buildpathHPFS, buildpathFAT, endHPFS, and endFAT */ +/* are used by checkdir(). */ +/* wild_dir, dirname, wildname, matchname[], dirnamelen, have_dirname, */ +/* and notfirstcall are used by do_wild(). */ + +#if (defined(_MSC_VER) && !defined(MSC)) +# define MSC +#endif + +/* This replacement for C-RTL-supplied getch() (or similar) functionality + * avoids leaving unabsorbed LFs in the keyboard buffer under Windows95, + * and supports the +[0] feature. + */ +int getch_win32 OF((void)); + +/* This patch of stat() is useful for at least two compilers. It is */ +/* difficult to take a stat() of a root directory under Windows95, so */ +/* zstat_win32() detects that case and fills in suitable values. */ +#ifndef __RSXNT__ +# ifndef W32_STATROOT_FIX +# define W32_STATROOT_FIX +# endif +#endif /* !__RSXNT__ */ + +#if (defined(NT_TZBUG_WORKAROUND) || defined(W32_STATROOT_FIX)) +# define W32_STAT_BANDAID +# if (defined(NT_TZBUG_WORKAROUND) && defined(REENTRANT)) +# define __W32STAT_GLOBALS__ Uz_Globs *pG, +# define __W32STAT_G__ pG, +# else +# define __W32STAT_GLOBALS__ +# define __W32STAT_G__ +# endif +# undef SSTAT +# ifdef WILD_STAT_BUG +# define SSTAT(path, pbuf) (iswild(path) || zstat_win32(__W32STAT_G__ path, pbuf)) +# else +# define SSTAT(path, pbuf) zstat_win32(__W32STAT_G__ path, pbuf) +# endif +#endif + +#ifdef __WATCOMC__ +# ifdef __386__ +# ifndef WATCOMC_386 +# define WATCOMC_386 +# endif +# define __32BIT__ +# undef far +# define far +# undef near +# define near + +/* Get asm routines to link properly without using "__cdecl": */ +# ifndef USE_ZLIB +# pragma aux crc32 "_*" parm caller [] value [eax] modify [eax] +# pragma aux get_crc_table "_*" parm caller [] value [eax] \ + modify [eax ecx edx] +# endif /* !USE_ZLIB */ +# endif /* __386__ */ + +# ifndef EPIPE +# define EPIPE -1 +# endif +# define PIPE_ERROR (errno == EPIPE) +#endif /* __WATCOMC__ */ + +#endif /* !__w32cfg_h */ diff --git a/Build/source/extra/unzip/win32/win32.c b/Build/source/extra/unzip/win32/win32.c new file mode 100644 index 00000000000..c1d9a68f0b9 --- /dev/null +++ b/Build/source/extra/unzip/win32/win32.c @@ -0,0 +1,2390 @@ +/*--------------------------------------------------------------------------- + + win32.c + + 32-bit Windows-specific (NT/95) routines for use with Info-ZIP's UnZip 5.3 + and later. + + Contains: GetLoadPath() + Opendir() + Readdir() + Closedir() + process_defer_NT() process any deferred items + SetSD() set security descriptor on file + EvalExtraFields() evaluate and process and extra field NOW + IsWinNT() indicate type of WIN32 platform + test_NTSD() test integrity of NT security data + utime2FileTime() + FStampIsLocTime() + FileTime2utime() + VFatFileTime2utime() + UTCtime2Localtime() + NTtzbugWorkaround() + getNTfiletime() + close_outfile() + stamp_file() + isfloppy() + NTQueryVolInfo() + IsVolumeOldFAT() + do_wild() + mapattr() + mapname() + map2fat() + checkdir() + version() + zstat_win32() + getch_win32() + + ---------------------------------------------------------------------------*/ + + +#define UNZIP_INTERNAL +#include "unzip.h" +#include /* must be AFTER unzip.h to avoid struct G problems */ +#ifdef __RSXNT__ +# include "win32/rsxntwin.h" +#endif +#include "win32/nt.h" + +#ifndef FUNZIP /* most of this file is not used with fUnZip */ + +#if (defined(__GO32__) || defined(__EMX__) || defined(__CYGWIN32__)) +# define MKDIR(path,mode) mkdir(path,mode) +#else +# define MKDIR(path,mode) mkdir(path) +#endif + +#ifdef HAVE_WORKING_DIRENT_H +# undef HAVE_WORKING_DIRENT_H +#endif +/* The emxrtl dirent support of (__GO32__ || __EMX__) converts to lowercase! */ +#if defined(__CYGWIN32__) +# define HAVE_WORKING_DIRENT_H +#endif + +#ifndef SFX +# ifdef HAVE_WORKING_DIRENT_H +# include /* use readdir() */ +# define zdirent dirent +# define zDIR DIR +# define Opendir opendir +# define Readdir readdir +# define Closedir closedir +# else /* !HAVE_WORKING_DIRENT_H */ + typedef struct zdirent { + char reserved [21]; + char ff_attrib; + short ff_ftime; + short ff_fdate; + long size; + char d_name[MAX_PATH]; + int d_first; + HANDLE d_hFindFile; + } zDIR; + + static zDIR *Opendir (const char *n); + static struct zdirent *Readdir (zDIR *d); + static void Closedir (zDIR *d); +# endif /* ?HAVE_WORKING_DIRENT_H */ +#endif /* !SFX */ + + +/* Function prototypes */ +#ifdef NTSD_EAS + static int SetSD(__GPRO__ char *path, PVOLUMECAPS VolumeCaps, + uch *eb_ptr, unsigned eb_len); + static int EvalExtraFields(__GPRO__ char *path, uch *ef_ptr, + unsigned ef_len); +#endif + +#if (defined(USE_EF_UT_TIME) || defined(NT_TZBUG_WORKAROUND) || \ + defined(TIMESTAMP)) + static void utime2FileTime(time_t ut, FILETIME *pft); + static int FStampIsLocTime(__GPRO__ const char *path); +#endif /* USE_EF_UT_TIME || NT_TZBUG_WORKAROUND || TIMESTAMP */ +#ifdef NT_TZBUG_WORKAROUND + static int FileTime2utime(const FILETIME *pft, time_t *ut); +#ifdef W32_STAT_BANDAID + static int VFatFileTime2utime(const FILETIME *pft, time_t *ut); +#endif + static time_t UTCtime2Localtime(time_t utctime); + static void NTtzbugWorkaround(time_t ut, FILETIME *pft); +#endif /* NT_TZBUG_WORKAROUND */ + +static int getNTfiletime (__GPRO__ FILETIME *pModFT, FILETIME *pAccFT, + FILETIME *pCreFT); +static int isfloppy (int nDrive); +static int NTQueryVolInfo (__GPRO__ const char *name); +static int IsVolumeOldFAT (__GPRO__ const char *name); +static void map2fat (char *pathcomp, char **pEndFAT); + + +#ifdef __MINGW32__ + int _CRT_glob = 0; /* suppress command line globbing by C RTL */ +#endif + +/* static int created_dir; */ /* used by mapname(), checkdir() */ +/* static int renamed_fullpath; */ /* ditto */ +/* static int fnlen; */ /* ditto */ +/* static unsigned nLabelDrive; */ /* ditto */ + +extern char Far TruncNTSD[]; /* in extract.c */ + + + +#ifdef SFX + +/**************************/ +/* Function GetLoadPath() */ +/**************************/ + +char *GetLoadPath(__GPRO) +{ +#ifdef MSC + extern char *_pgmptr; + return _pgmptr; + +#else /* use generic API call */ + + GetModuleFileName(NULL, G.filename, FILNAMSIZ-1); + _ISO_INTERN(G.filename); /* translate to codepage of C rtl's stdio */ + return G.filename; +#endif + +} /* end function GetLoadPath() */ + + + + + +#else /* !SFX */ + +#ifndef HAVE_WORKING_DIRENT_H + +/**********************/ /* Borrowed from ZIP 2.0 sources */ +/* Function Opendir() */ /* Difference: no special handling for */ +/**********************/ /* hidden or system files. */ + +static zDIR *Opendir(n) + const char *n; /* directory to open */ +{ + zDIR *d; /* malloc'd return value */ + char *p; /* malloc'd temporary string */ + WIN32_FIND_DATA fd; + extent len = strlen(n); + + /* Start searching for files in directory n */ + + if ((d = (zDIR *)malloc(sizeof(zDIR))) == NULL || + (p = malloc(strlen(n) + 5)) == NULL) + { + if (d != (zDIR *)NULL) + free((void *)d); + return (zDIR *)NULL; + } + INTERN_TO_ISO(n, p); + if (len > 0) { + if (p[len-1] == ':') + p[len++] = '.'; /* x: => x:. */ + else if (p[len-1] == '/' || p[len-1] == '\\') + --len; /* foo/ => foo */ + } + strcpy(p+len, "/*"); + + if (INVALID_HANDLE_VALUE == (d->d_hFindFile = FindFirstFile(p, &fd))) { + free((zvoid *)d); + free((zvoid *)p); + return NULL; + } + strcpy(d->d_name, fd.cFileName); + + free((zvoid *)p); + d->d_first = 1; + return d; + +} /* end of function Opendir() */ + + + + +/**********************/ /* Borrowed from ZIP 2.0 sources */ +/* Function Readdir() */ /* Difference: no special handling for */ +/**********************/ /* hidden or system files. */ + +static struct zdirent *Readdir(d) + zDIR *d; /* directory stream from which to read */ +{ + /* Return pointer to first or next directory entry, or NULL if end. */ + + if ( d->d_first ) + d->d_first = 0; + else + { + WIN32_FIND_DATA fd; + + if ( !FindNextFile(d->d_hFindFile, &fd) ) + return NULL; + + ISO_TO_INTERN(fd.cFileName, d->d_name); + } + return (struct zdirent *)d; + +} /* end of function Readdir() */ + + + + +/***********************/ +/* Function Closedir() */ /* Borrowed from ZIP 2.0 sources */ +/***********************/ + +static void Closedir(d) + zDIR *d; /* directory stream to close */ +{ + FindClose(d->d_hFindFile); + free(d); +} + +#endif /* !HAVE_WORKING_DIRENT_H */ +#endif /* ?SFX */ + + + + +#ifdef NTSD_EAS + +/*********************************/ +/* Function process_defer_NT() */ +/*********************************/ + +void process_defer_NT(__G) + __GDEF +{ + /* process deferred items */ + + DWORD dir, bytes; + DWORD dirfail, bytesfail; + + ProcessDefer(&dir, &bytes, &dirfail, &bytesfail); + + if (!uO.tflag && (uO.qflag < 2)) { + if (dir) + Info(slide, 0, ((char *)slide, + " updated: %lu directory entries with %lu bytes security", + (ulg)dir, (ulg)bytes)); + if (dirfail) + Info(slide, 0, ((char *)slide, + " failed: %lu directory entries with %lu bytes security", + (ulg)dirfail, (ulg)bytesfail)); + } +} + + + +/**********************/ +/* Function SetSD() */ /* return almost-PK errors */ +/**********************/ + +static int SetSD(__G__ path, VolumeCaps, eb_ptr, eb_len) + __GDEF + char *path; + PVOLUMECAPS VolumeCaps; + uch *eb_ptr; + unsigned eb_len; +{ + ulg ntsd_ucSize; + uch *security_data; + int error; + + if (eb_ptr == NULL || eb_len < EB_NTSD_L_LEN) + return PK_OK; /* not a valid NTSD extra field: assume OK */ + + /* check if we know how to handle this version */ + if (*(eb_ptr + (EB_HEADSIZE+EB_NTSD_VERSION)) > (uch)EB_NTSD_MAX_VER) + return PK_OK; + + ntsd_ucSize = makelong(eb_ptr + (EB_HEADSIZE+EB_UCSIZE_P)); + if (ntsd_ucSize > 0L && eb_len <= (EB_NTSD_L_LEN + EB_CMPRHEADLEN)) + return IZ_EF_TRUNC; /* no compressed data! */ + + /* allocate storage for uncompressed data */ + security_data = (uch *)malloc((extent)ntsd_ucSize); + if (security_data == (uch *)NULL) + return PK_MEM4; + + error = memextract(__G__ security_data, ntsd_ucSize, + (eb_ptr + (EB_HEADSIZE+EB_NTSD_L_LEN)), (ulg)(eb_len - EB_NTSD_L_LEN)); + + if (error == PK_OK) { + if (SecuritySet(path, VolumeCaps, security_data)) { + error = PK_COOL; + if (!uO.tflag && (uO.qflag < 2) && + (!(VolumeCaps->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))) + Info(slide, 0, ((char *)slide, " (%ld bytes security)", + ntsd_ucSize)); + } + } + + free(security_data); + return error; +} + + + + +/********************************/ /* scan extra fields for something */ +/* Function EvalExtraFields() */ /* we happen to know */ +/********************************/ + +static int EvalExtraFields(__G__ path, ef_ptr, ef_len) + __GDEF + char *path; + uch *ef_ptr; + unsigned ef_len; +{ + int rc = PK_OK; + + if (!uO.X_flag) + return PK_OK; /* user said don't process ACLs; for now, no other + extra block types are handled here */ + + while (ef_len >= EB_HEADSIZE) + { + unsigned eb_id = makeword(EB_ID + ef_ptr); + unsigned eb_len = makeword(EB_LEN + ef_ptr); + + if (eb_len > (ef_len - EB_HEADSIZE)) { + /* discovered some extra field inconsistency! */ + Trace((stderr, + "EvalExtraFields: block length %u > rest ef_size %u\n", eb_len, + ef_len - EB_HEADSIZE)); + break; + } + + switch (eb_id) + { + /* process security descriptor extra data if: + Caller is WinNT AND + Target local/remote drive supports acls AND + Target file is not a directory (else we defer processing + until later) + */ + case EF_NTSD: + if (IsWinNT()) { + VOLUMECAPS VolumeCaps; + + /* provide useful input */ + VolumeCaps.dwFileAttributes = G.pInfo->file_attr; + VolumeCaps.bUsePrivileges = (uO.X_flag > 1); + + /* check target volume capabilities - just fall through + * and try if fail */ + if (GetVolumeCaps(G.rootpath, path, &VolumeCaps) && + !(VolumeCaps.dwFileSystemFlags & FS_PERSISTENT_ACLS)) + { + rc = PK_OK; + break; + } + rc = SetSD(__G__ path, &VolumeCaps, ef_ptr, eb_len); + } else + rc = PK_OK; + break; + +#if 0 + /* perhaps later we can add support for unzipping OS/2 EAs to NT */ + case EF_OS2: + rc = SetEAs(__G__ path, ef_ptr); + break; + + case EF_PKUNIX: + case EF_IZUNIX: + case EF_IZUNIX2: + case EF_TIME: + break; /* handled elsewhere */ +#else /* ! 0 */ +#ifdef DEBUG + case EF_AV: + case EF_OS2: + case EF_PKVMS: + case EF_PKW32: + case EF_PKUNIX: + case EF_IZVMS: + case EF_IZUNIX: + case EF_IZUNIX2: + case EF_TIME: + case EF_MAC3: + case EF_JLMAC: + case EF_ZIPIT: + case EF_VMCMS: + case EF_MVS: + case EF_ACL: + case EF_BEOS: + case EF_QDOS: + case EF_AOSVS: + case EF_SPARK: + case EF_MD5: + case EF_ASIUNIX: + break; /* shut up for other known e.f. blocks */ +#endif /* DEBUG */ +#endif /* ? 0 */ + + default: + Trace((stderr, + "EvalExtraFields: unknown extra field block, ID=%u\n", + eb_id)); + break; + } + + ef_ptr += (eb_len + EB_HEADSIZE); + ef_len -= (eb_len + EB_HEADSIZE); + + if (rc != PK_OK) + break; + } + + return rc; +} + + + + +#ifndef SFX + +/**************************/ +/* Function test_NTSD() */ /* returns PK_WARN when NTSD data is invalid */ +/**************************/ + +#ifdef __BORLANDC__ +/* Turn off warning about not using all parameters for this function only */ +#pragma argsused +#endif +int test_NTSD(__G__ eb, eb_size, eb_ucptr, eb_ucsize) + __GDEF + uch *eb; + unsigned eb_size; + uch *eb_ucptr; + ulg eb_ucsize; +{ + int r = PK_OK; + + if (!ValidateSecurity(eb_ucptr)) + r = PK_WARN; + return r; + +} /* end function test_NTSD() */ + +#endif /* !SFX */ +#endif /* NTSD_EAS */ + + + + +/**********************/ +/* Function IsWinNT() */ +/**********************/ + +int IsWinNT(void) /* returns TRUE if real NT, FALSE if Win95 or Win32s */ +{ + static DWORD g_PlatformId = 0xFFFFFFFF; /* saved platform indicator */ + + if (g_PlatformId == 0xFFFFFFFF) { + /* note: GetVersionEx() doesn't exist on WinNT 3.1 */ + if (GetVersion() < 0x80000000) + g_PlatformId = TRUE; + else + g_PlatformId = FALSE; + } + return (int)g_PlatformId; +} + + +/* DEBUG_TIME insertion: */ +#ifdef DEBUG_TIME +static int show_NTFileTime(FILE *hdo, char *TTmsg, int isloc, FILETIME *pft); + +static int show_NTFileTime(FILE *hdo, char *TTmsg, int isloc, FILETIME *pft) +{ + SYSTEMTIME w32tm; + int rval; + + rval = FileTimeToSystemTime(pft, &w32tm); + if (!rval) { + fprintf(hdo, "%s\n %08lX,%08lX (%s) -> Conversion failed !!!\n", + TTmsg, (ulg)(pft->dwHighDateTime), (ulg)(pft->dwLowDateTime), + (isloc ? "local" : "UTC")); + } else { + fprintf(hdo, "%s\n %08lx,%08lx -> %04u-%02u-%02u, %02u:%02u:%02u %s\n", + TTmsg, (ulg)(pft->dwHighDateTime), (ulg)(pft->dwLowDateTime), + w32tm.wYear, w32tm.wMonth, w32tm.wDay, w32tm.wHour, + w32tm.wMinute, w32tm.wSecond, (isloc ? "local" : "UTC")); + } + return rval; +} +#define FTTrace(x) show_NTFileTime x +#else +#define FTTrace(x) +#endif /* DEBUG_TIME */ +/* end of TIME_DEBUG insertion */ + +#if (defined(USE_EF_UT_TIME) || defined(NT_TZBUG_WORKAROUND) || \ + defined(TIMESTAMP)) + +#if ((defined(__GNUC__) || defined(ULONG_LONG_MAX)) && !defined(HAVE_INT64)) + typedef long long LLONG64; + typedef unsigned long long ULLNG64; +# define HAVE_INT64 +#endif +#if (defined(__WATCOMC__) && (__WATCOMC__ >= 1100) && !defined(HAVE_INT64)) + typedef __int64 LLONG64; + typedef unsigned __int64 ULLNG64; +# define HAVE_INT64 +#endif +#if (defined(_MSC_VER) && (_MSC_VER >= 1100) && !defined(HAVE_INT64)) + typedef __int64 LLONG64; + typedef unsigned __int64 ULLNG64; +# define HAVE_INT64 +#endif + +/*****************************/ +/* Function utime2FileTime() */ /* convert Unix time_t format into the */ +/*****************************/ /* form used by SetFileTime() in NT/95 */ + +#define UNIX_TIME_ZERO_HI 0x019DB1DEUL +#define UNIX_TIME_ZERO_LO 0xD53E8000UL +#define NT_QUANTA_PER_UNIX 10000000L + +static void utime2FileTime(time_t ut, FILETIME *pft) +{ +#ifdef HAVE_INT64 + ULLNG64 NTtime; + + /* NT_QUANTA_PER_UNIX is small enough so that "ut * NT_QUANTA_PER_UNIX" + * cannot overflow in 64-bit signed calculation, regardless wether "ut" + * is signed or unsigned. */ + NTtime = ((LLONG64)ut * NT_QUANTA_PER_UNIX) + + ((ULLNG64)UNIX_TIME_ZERO_LO + ((ULLNG64)UNIX_TIME_ZERO_HI << 32)); + pft->dwLowDateTime = (DWORD)NTtime; + pft->dwHighDateTime = (DWORD)(NTtime >> 32); + +#else /* !HAVE_INT64 (64-bit integer arithmetics may not be supported) */ + unsigned int b1, b2, carry = 0; + unsigned long r0, r1, r2, r3; + long r4; /* signed, to catch environments with signed time_t */ + + b1 = ut & 0xFFFF; + b2 = (ut >> 16) & 0xFFFF; /* if ut is over 32 bits, too bad */ + r1 = b1 * (NT_QUANTA_PER_UNIX & 0xFFFF); + r2 = b1 * (NT_QUANTA_PER_UNIX >> 16); + r3 = b2 * (NT_QUANTA_PER_UNIX & 0xFFFF); + r4 = b2 * (NT_QUANTA_PER_UNIX >> 16); + r0 = (r1 + (r2 << 16)) & 0xFFFFFFFFL; + if (r0 < r1) + carry++; + r1 = r0; + r0 = (r0 + (r3 << 16)) & 0xFFFFFFFFL; + if (r0 < r1) + carry++; + pft->dwLowDateTime = r0 + UNIX_TIME_ZERO_LO; + if (pft->dwLowDateTime < r0) + carry++; + pft->dwHighDateTime = r4 + (r2 >> 16) + (r3 >> 16) + + UNIX_TIME_ZERO_HI + carry; +#endif /* ?HAVE_INT64 */ + +} /* end function utime2FileTime() */ + + + +/******************************/ +/* Function FStampIsLocTime() */ +/******************************/ + +static int FStampIsLocTime(__GPRO__ const char *path) +{ + return (NTQueryVolInfo(__G__ path) ? G.lastVolLocTim : FALSE); +} + +#endif /* USE_EF_UT_TIME || NT_TZBUG_WORKAROUND || TIMESTAMP */ + + + +#ifndef NT_TZBUG_WORKAROUND +# define UTIME_BOUNDCHECK_1(utimval) \ + if (fs_uses_loctime) { \ + utime_dosmin = dos_to_unix_time(DOSTIME_MINIMUM); \ + if ((ulg)utimval < (ulg)utime_dosmin) \ + utimval = utime_dosmin; \ + } +# define UTIME_BOUNDCHECK_N(utimval) \ + if (fs_uses_loctime && ((ulg)utimval < (ulg)utime_dosmin)) \ + utimval = utime_dosmin; +# define NT_TZBUG_PRECOMPENSATE(ut, pft) + +#else /* NT_TZBUG_WORKAROUND */ +# define UNIX_TIME_UMAX_HI 0x0236485EUL +# define UNIX_TIME_UMAX_LO 0xD4A5E980UL +# define UNIX_TIME_SMIN_HI 0x0151669EUL +# define UNIX_TIME_SMIN_LO 0xD53E8000UL +# define UNIX_TIME_SMAX_HI 0x01E9FD1EUL +# define UNIX_TIME_SMAX_LO 0xD4A5E980UL +# define UTIME_1980_JAN_01_00_00 315532800L +# define UTIME_BOUNDCHECK_1(utimval) +# define UTIME_BOUNDCHECK_N(utimval) +# define NT_TZBUG_PRECOMPENSATE(ut, pft) \ + if (fs_uses_loctime) NTtzbugWorkaround(ut, pft); + + /* nonzero if `y' is a leap year, else zero */ +# define leap(y) (((y)%4 == 0 && (y)%100 != 0) || (y)%400 == 0) + /* number of leap years from 1970 to `y' (not including `y' itself) */ +# define nleap(y) (((y)-1969)/4 - ((y)-1901)/100 + ((y)-1601)/400) + +extern ZCONST ush ydays[]; /* defined in fileio.c */ + +/*****************************/ +/* Function FileTime2utime() */ +/*****************************/ + +static int FileTime2utime(const FILETIME *pft, time_t *ut) +{ +#ifdef HAVE_INT64 + ULLNG64 NTtime; + + NTtime = ((ULLNG64)pft->dwLowDateTime + + ((ULLNG64)pft->dwHighDateTime << 32)); + + /* underflow and overflow handling */ +#ifdef CHECK_UTIME_SIGNED_UNSIGNED + if ((time_t)0x80000000L < (time_t)0L) + { + if (NTtime < ((ULLNG64)UNIX_TIME_SMIN_LO + + ((ULLNG64)UNIX_TIME_SMIN_HI << 32))) { + *ut = (time_t)LONG_MIN; + return FALSE; + } + if (NTtime > ((ULLNG64)UNIX_TIME_SMAX_LO + + ((ULLNG64)UNIX_TIME_SMAX_HI << 32))) { + *ut = (time_t)LONG_MAX; + return FALSE; + } + } + else +#endif /* CHECK_UTIME_SIGNED_UNSIGNED */ + { + if (NTtime < ((ULLNG64)UNIX_TIME_ZERO_LO + + ((ULLNG64)UNIX_TIME_ZERO_HI << 32))) { + *ut = (time_t)0; + return FALSE; + } + if (NTtime > ((ULLNG64)UNIX_TIME_UMAX_LO + + ((ULLNG64)UNIX_TIME_UMAX_HI << 32))) { + *ut = (time_t)ULONG_MAX; + return FALSE; + } + } + + NTtime -= ((ULLNG64)UNIX_TIME_ZERO_LO + + ((ULLNG64)UNIX_TIME_ZERO_HI << 32)); + *ut = (time_t)(NTtime / (unsigned long)NT_QUANTA_PER_UNIX); + return TRUE; +#else /* !HAVE_INT64 (64-bit integer arithmetics may not be supported) */ + time_t days; + SYSTEMTIME w32tm; + + /* underflow and overflow handling */ +#ifdef CHECK_UTIME_SIGNED_UNSIGNED + if ((time_t)0x80000000L < (time_t)0L) + { + if ((pft->dwHighDateTime < UNIX_TIME_SMIN_HI) || + ((pft->dwHighDateTime == UNIX_TIME_SMIN_HI) && + (pft->dwLowDateTime < UNIX_TIME_SMIN_LO))) { + *ut = (time_t)LONG_MIN; + return FALSE; + if ((pft->dwHighDateTime > UNIX_TIME_SMAX_HI) || + ((pft->dwHighDateTime == UNIX_TIME_SMAX_HI) && + (pft->dwLowDateTime > UNIX_TIME_SMAX_LO))) { + *ut = (time_t)LONG_MAX; + return FALSE; + } + } + else +#endif /* CHECK_UTIME_SIGNED_UNSIGNED */ + { + if ((pft->dwHighDateTime < UNIX_TIME_ZERO_HI) || + ((pft->dwHighDateTime == UNIX_TIME_ZERO_HI) && + (pft->dwLowDateTime < UNIX_TIME_ZERO_LO))) { + *ut = (time_t)0; + return FALSE; + } + if ((pft->dwHighDateTime > UNIX_TIME_UMAX_HI) || + ((pft->dwHighDateTime == UNIX_TIME_UMAX_HI) && + (pft->dwLowDateTime > UNIX_TIME_UMAX_LO))) { + *ut = (time_t)ULONG_MAX; + return FALSE; + } + } + + FileTimeToSystemTime(pft, &w32tm); + + /* set `days' to the number of days into the year */ + days = w32tm.wDay - 1 + ydays[w32tm.wMonth-1] + + (w32tm.wMonth > 2 && leap (w32tm.wYear)); + + /* now set `days' to the number of days since 1 Jan 1970 */ + days += 365 * (time_t)(w32tm.wYear - 1970) + + (time_t)(nleap(w32tm.wYear)); + + *ut = (time_t)(86400L * days + 3600L * (time_t)w32tm.wHour + + (time_t)(60 * w32tm.wMinute + w32tm.wSecond)); + return TRUE; +#endif /* ?HAVE_INT64 */ +} /* end function FileTime2utime() */ + + + +#ifdef W32_STAT_BANDAID +/*********************************/ +/* Function VFatFileTime2utime() */ +/*********************************/ + +static int VFatFileTime2utime(const FILETIME *pft, time_t *ut) +{ + FILETIME lft; +#ifndef HAVE_MKTIME + WORD wDOSDate, wDOSTime; +#else + SYSTEMTIME w32tm; + struct tm ltm; +#endif + + FileTimeToLocalFileTime(pft, &lft); + FTTrace((stdout, "VFatFT2utime, feed for mktime()", 1, &lft)); +#ifndef HAVE_MKTIME + /* This version of the FILETIME-to-UNIXTIME conversion function + * uses DOS-DATE-TIME format as intermediate stage. For modification + * and access times, this is no problem. But, the extra fine resolution + * of the VFAT-stored creation time gets lost. + */ + FileTimeToDosDateTime(&lft, &wDOSDate, &wDOSTime); + TTrace((stdout,"DosDateTime is %04u-%02u-%02u %02u:%02u:%02u\n", + (unsigned)((wDOSDate>>9)&0x7f)+1980,(unsigned)((wDOSDate>>5)&0x0f), + (unsigned)(wDOSDate&0x1f),(unsigned)((wDOSTime>>11)&0x1f), + (unsigned)((wDOSTime>>5)&0x3f),(unsigned)((wDOSTime<<1)&0x3e))); + *ut = dos_to_unix_time(((ulg)wDOSDate << 16) | (ulg)wDOSTime); + + /* a cheap error check: dos_to_unix_time() only returns an odd time + * when clipping at maximum time_t value. DOS_DATE_TIME values have + * a resolution of 2 seconds and are therefore even numbers. + */ + return (((*ut)&1) == (time_t)0); +#else /* HAVE_MKTIME */ + FileTimeToSystemTime(&lft, &w32tm); + /* underflow and overflow handling */ + /* TODO: The range checks are not accurate, the actual limits may + * be off by one daylight-saving-time shift (typically 1 hour), + * depending on the current state of "is_dst". + */ +#ifdef CHECK_UTIME_SIGNED_UNSIGNED + if ((time_t)0x80000000L < (time_t)0L) + { + if ((pft->dwHighDateTime < UNIX_TIME_SMIN_HI) || + ((pft->dwHighDateTime == UNIX_TIME_SMIN_HI) && + (pft->dwLowDateTime < UNIX_TIME_SMIN_LO))) { + *ut = (time_t)LONG_MIN; + return FALSE; + if ((pft->dwHighDateTime > UNIX_TIME_SMAX_HI) || + ((pft->dwHighDateTime == UNIX_TIME_SMAX_HI) && + (pft->dwLowDateTime > UNIX_TIME_SMAX_LO))) { + *ut = (time_t)LONG_MAX; + return FALSE; + } + } + else +#endif /* CHECK_UTIME_SIGNED_UNSIGNED */ + { + if ((pft->dwHighDateTime < UNIX_TIME_ZERO_HI) || + ((pft->dwHighDateTime == UNIX_TIME_ZERO_HI) && + (pft->dwLowDateTime < UNIX_TIME_ZERO_LO))) { + *ut = (time_t)0; + return FALSE; + } + if ((pft->dwHighDateTime > UNIX_TIME_UMAX_HI) || + ((pft->dwHighDateTime == UNIX_TIME_UMAX_HI) && + (pft->dwLowDateTime > UNIX_TIME_UMAX_LO))) { + *ut = (time_t)ULONG_MAX; + return FALSE; + } + } + ltm.tm_year = w32tm.wYear - 1900; + ltm.tm_mon = w32tm.wMonth - 1; + ltm.tm_mday = w32tm.wDay; + ltm.tm_hour = w32tm.wHour; + ltm.tm_min = w32tm.wMinute; + ltm.tm_sec = w32tm.wSecond; + ltm.tm_isdst = -1; /* let mktime determine if DST is in effect */ + *ut = mktime(<m); + + /* a cheap error check: mktime returns "(time_t)-1L" on conversion errors. + * Normally, we would have to apply a consistency check because "-1" + * could also be a valid time. But, it is quite unlikely to read back odd + * time numbers from file systems that store time stamps in DOS format. + * (The only known exception is creation time on VFAT partitions.) + */ + return (*ut != (time_t)-1L); +#endif /* ?HAVE_MKTIME */ + +} /* end function VFatFileTime2utime() */ +#endif /* W32_STAT_BANDAID */ + + + +/********************************/ +/* Function UTCtime2Localtime() */ /* borrowed from Zip's mkgmtime() */ +/********************************/ + +static time_t UTCtime2Localtime(time_t utctime) +{ + time_t utc = utctime; + struct tm *tm; + unsigned years, months, days, hours, minutes, seconds; + + +#ifdef __BORLANDC__ /* Borland C++ 5.x crashes when trying to reference tm */ + if (utc < UTIME_1980_JAN_01_00_00) + utc = UTIME_1980_JAN_01_00_00; +#endif + tm = localtime(&utc); + if (tm == (struct tm *)NULL) + /* localtime() did not accept given utc time value; as an emergency + exit, the unconverted utctime value is returned */ + return utctime; + + years = tm->tm_year + 1900; /* year - 1900 -> year */ + months = tm->tm_mon; /* 0..11 */ + days = tm->tm_mday - 1; /* 1..31 -> 0..30 */ + hours = tm->tm_hour; /* 0..23 */ + minutes = tm->tm_min; /* 0..59 */ + seconds = tm->tm_sec; /* 0..61 in ANSI C */ + + /* set `days' to the number of days into the year */ + days += ydays[months] + (months > 1 && leap(years)); + + /* now set `days' to the number of days since 1 Jan 1970 */ + days += 365 * (years - 1970) + nleap(years); + + return (time_t)(86400L * (ulg)days + 3600L * (ulg)hours + + (ulg)(60 * minutes + seconds)); + +} /* end function UTCtime2Localtime() */ + + + +/********************************/ +/* Function NTtzbugWorkaround() */ +/********************************/ + +static void NTtzbugWorkaround(time_t ut, FILETIME *pft) +{ + FILETIME C_RTL_locft, NTAPI_locft; + time_t ux_loctime = UTCtime2Localtime(ut); + + /* This routine is only used when the target file system stores time- + * stamps as local time in MSDOS format. Thus we make sure that the + * resulting timestamp is within the range of MSDOS date-time values. */ + if (ux_loctime < UTIME_1980_JAN_01_00_00) + ux_loctime = UTIME_1980_JAN_01_00_00; + + utime2FileTime(ux_loctime, &C_RTL_locft); + if (!FileTimeToLocalFileTime(pft, &NTAPI_locft)) + return; + else { + long time_shift_l, time_shift_h; + int carry = 0; + + time_shift_l = C_RTL_locft.dwLowDateTime - NTAPI_locft.dwLowDateTime; + if (C_RTL_locft.dwLowDateTime < NTAPI_locft.dwLowDateTime) + carry--; + time_shift_h = C_RTL_locft.dwHighDateTime - NTAPI_locft.dwHighDateTime; + pft->dwLowDateTime += time_shift_l; + if (pft->dwLowDateTime < (ulg)time_shift_l) + carry++; + pft->dwHighDateTime += time_shift_h + carry; + TTrace((stdout, "FileTime shift: %08lx:%08lx\n", + time_shift_h+carry,time_shift_l)); + } +} /* end function NTtzbugWorkaround() */ + +#endif /* ?NT_TZBUG_WORKAROUND */ + + + +/****************************/ /* Get the file time in a format that */ +/* Function getNTfiletime() */ /* can be used by SetFileTime() in NT */ +/****************************/ + +static int getNTfiletime(__G__ pModFT, pAccFT, pCreFT) + __GDEF + FILETIME *pModFT; + FILETIME *pAccFT; + FILETIME *pCreFT; +{ +#ifdef NT_TZBUG_WORKAROUND + time_t ux_modtime; +#else /* !NT_TZBUG_WORKAROUND */ + FILETIME locft; /* 64-bit value made up of two 32-bit [low & high] */ + WORD wDOSDate; /* for converting from DOS date to Windows NT */ + WORD wDOSTime; +#endif /* ?NT_TZBUG_WORKAROUND */ +#ifdef USE_EF_UT_TIME + unsigned eb_izux_flg; + iztimes z_utime; /* struct for Unix-style actime & modtime, + creatime */ +#endif +#if (defined(USE_EF_UT_TIME) && !defined(NT_TZBUG_WORKAROUND)) + time_t utime_dosmin; +# endif +#if (defined(USE_EF_UT_TIME) || defined(NT_TZBUG_WORKAROUND)) + int fs_uses_loctime = FStampIsLocTime(__G__ G.filename); +#endif + + /* Copy and/or convert time and date variables, if necessary; + * return a flag indicating which time stamps are available. */ +#ifdef USE_EF_UT_TIME + if (G.extra_field && +#ifdef IZ_CHECK_TZ + G.tz_is_valid && +#endif + ((eb_izux_flg = ef_scan_for_izux(G.extra_field, + G.lrec.extra_field_length, 0, G.lrec.last_mod_dos_datetime, + &z_utime, NULL)) & EB_UT_FL_MTIME)) + { + TTrace((stderr, "getNTfiletime: Unix e.f. modif. time = %lu\n", + z_utime.mtime)); + UTIME_BOUNDCHECK_1(z_utime.mtime) + utime2FileTime(z_utime.mtime, pModFT); + NT_TZBUG_PRECOMPENSATE(z_utime.mtime, pModFT) + if (eb_izux_flg & EB_UT_FL_ATIME) { + UTIME_BOUNDCHECK_N(z_utime.atime) + utime2FileTime(z_utime.atime, pAccFT); + NT_TZBUG_PRECOMPENSATE(z_utime.atime, pAccFT) + } + if (eb_izux_flg & EB_UT_FL_CTIME) { + UTIME_BOUNDCHECK_N(z_utime.ctime) + utime2FileTime(z_utime.ctime, pCreFT); + NT_TZBUG_PRECOMPENSATE(z_utime.ctime, pCreFT) + } + return (int)eb_izux_flg; + } +#endif /* USE_EF_UT_TIME */ +#ifdef NT_TZBUG_WORKAROUND + ux_modtime = dos_to_unix_time(G.lrec.last_mod_dos_datetime); + utime2FileTime(ux_modtime, pModFT); + NT_TZBUG_PRECOMPENSATE(ux_modtime, pModFT) +#else /* !NT_TZBUG_WORKAROUND */ + + wDOSTime = (WORD)(G.lrec.last_mod_dos_datetime); + wDOSDate = (WORD)(G.lrec.last_mod_dos_datetime >> 16); + + /* The DosDateTimeToFileTime() function converts a DOS date/time + * into a 64-bit Windows NT file time */ + if (!DosDateTimeToFileTime(wDOSDate, wDOSTime, &locft)) + { + Info(slide, 0, ((char *)slide, "DosDateTime failed: %d\n", + (int)GetLastError())); + return 0; + } + if (!LocalFileTimeToFileTime(&locft, pModFT)) + { + Info(slide, 0, ((char *)slide, "LocalFileTime failed: %d\n", + (int)GetLastError())); + *pModFT = locft; + } +#endif /* ?NT_TZBUG_WORKAROUND */ + *pAccFT = *pModFT; + return (EB_UT_FL_MTIME | EB_UT_FL_ATIME); + +} /* end function getNTfiletime() */ + + + + +/****************************/ +/* Function close_outfile() */ +/****************************/ + +void close_outfile(__G) + __GDEF +{ + FILETIME Modft; /* File time type defined in NT, `last modified' time */ + FILETIME Accft; /* NT file time type, `last access' time */ + FILETIME Creft; /* NT file time type, `file creation' time */ + HANDLE hFile; /* File handle defined in NT */ + int gotTime; +#ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ + char *ansi_name = (char *)alloca(strlen(G.filename) + 1); + + INTERN_TO_ISO(G.filename, ansi_name); +# define Ansi_Fname ansi_name +#else +# define Ansi_Fname G.filename +#endif + + /* Close the file and then re-open it using the Win32 + * CreateFile call, so that the file can be created + * with GENERIC_WRITE access, otherwise the SetFileTime + * call will fail. */ + fclose(G.outfile); + + /* don't set the time stamp and attributes on standard output */ + if (uO.cflag) + return; + + gotTime = getNTfiletime(__G__ &Modft, &Accft, &Creft); + + /* open a handle to the file before processing extra fields; + we do this in case new security on file prevents us from updating + time stamps */ + hFile = CreateFile(Ansi_Fname, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + + /* sfield@microsoft.com: set attributes before time in case we decide to + support other filetime members later. This also allows us to apply + attributes before the security is changed, which may prevent this + from succeeding otherwise. Also, since most files don't have + any interesting attributes, only change them if something other than + FILE_ATTRIBUTE_ARCHIVE appears in the attributes. This works well + as an optimization because FILE_ATTRIBUTE_ARCHIVE gets applied to the + file anyway, when it's created new. */ + if((G.pInfo->file_attr & 0x7F) & ~FILE_ATTRIBUTE_ARCHIVE) { + if (!SetFileAttributes(Ansi_Fname, G.pInfo->file_attr & 0x7F)) + Info(slide, 1, ((char *)slide, + "\nwarning (%d): could not set file attributes\n", + (int)GetLastError())); + } + +#ifdef NTSD_EAS + /* set extra fields, both stored-in-zipfile and .LONGNAME flavors */ + if (G.extra_field) { /* zipfile extra field may have extended attribs */ + int err = EvalExtraFields(__G__ G.filename, G.extra_field, + G.lrec.extra_field_length); + + if (err == IZ_EF_TRUNC) { + if (uO.qflag) + Info(slide, 1, ((char *)slide, "%-22s ", + FnFilter1(G.filename))); + Info(slide, 1, ((char *)slide, LoadFarString(TruncNTSD), + makeword(G.extra_field+2)-10, uO.qflag? "\n":"")); + } + } +#endif /* NTSD_EAS */ + + if ( hFile == INVALID_HANDLE_VALUE ) + Info(slide, 1, ((char *)slide, + "\nCreateFile error %d when trying set file time\n", + (int)GetLastError())); + else { + if (gotTime) { + FILETIME *pModft = (gotTime & EB_UT_FL_MTIME) ? &Modft : NULL; + FILETIME *pAccft = (gotTime & EB_UT_FL_ATIME) ? &Accft : NULL; + FILETIME *pCreft = (gotTime & EB_UT_FL_CTIME) ? &Creft : NULL; + + if (!SetFileTime(hFile, pCreft, pAccft, pModft)) + Info(slide, 0, ((char *)slide, "\nSetFileTime failed: %d\n", + (int)GetLastError())); + } + CloseHandle(hFile); + } + + return; + +#undef Ansi_Fname + +} /* end function close_outfile() */ + + + + +#ifdef TIMESTAMP + +/*************************/ +/* Function stamp_file() */ +/*************************/ + +int stamp_file(__GPRO__ ZCONST char *fname, time_t modtime) +{ + FILETIME Modft; /* File time type defined in NT, `last modified' time */ + HANDLE hFile; /* File handle defined in NT */ + int errstat = 0; /* return status: 0 == "OK", -1 == "Failure" */ +#ifndef NT_TZBUG_WORKAROUND + time_t utime_dosmin; /* internal variable for UTIME_BOUNDCHECK_1 */ +#endif + int fs_uses_loctime = FStampIsLocTime(__G__ fname); +#ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ + char *ansi_name = (char *)alloca(strlen(fname) + 1); + + INTERN_TO_ISO(fname, ansi_name); +# define Ansi_Fname ansi_name +#else +# define Ansi_Fname fname +#endif + + /* open a handle to the file to prepare setting the mod-time stamp */ + hFile = CreateFile(Ansi_Fname, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if ( hFile == INVALID_HANDLE_VALUE ) { + errstat = -1; + } else { + /* convert time_t modtime into WIN32 native 64bit format */ + UTIME_BOUNDCHECK_1(modtime) + utime2FileTime(modtime, &Modft); + NT_TZBUG_PRECOMPENSATE(modtime, &Modft) + /* set Access and Modification times of the file to modtime */ + if (!SetFileTime(hFile, NULL, &Modft, &Modft)) { + errstat = -1; + } + CloseHandle(hFile); + } + + return errstat; + +#undef Ansi_Fname +} /* end function stamp_file() */ + +#endif /* TIMESTAMP */ + + + + +/***********************/ +/* Function isfloppy() */ /* more precisely, is it removable? */ +/***********************/ + +static int isfloppy(int nDrive) /* 1 == A:, 2 == B:, etc. */ +{ + char rootPathName[4]; + + rootPathName[0] = (char)('A' + nDrive - 1); /* build the root path */ + rootPathName[1] = ':'; /* name, e.g. "A:/" */ + rootPathName[2] = '/'; + rootPathName[3] = '\0'; + + return (GetDriveType(rootPathName) == DRIVE_REMOVABLE); + +} /* end function isfloppy() */ + + + + +/*****************************/ +/* Function NTQueryVolInfo() */ +/*****************************/ + +/* + * Note: 8.3 limits on filenames apply only to old-style FAT filesystems. + * More recent versions of Windows (Windows NT 3.5 / Windows 4.0) + * can support long filenames (LFN) on FAT filesystems. Check the + * filesystem maximum component length field to detect LFN support. + */ + +static int NTQueryVolInfo(__GPRO__ const char *name) +{ + /* static char lastRootPath[4] = ""; */ + /* static int lastVolOldFAT; */ + /* static int lastVolLocTim; */ + char *tmp0; + char tmp1[MAX_PATH], tmp2[MAX_PATH]; + unsigned volSerNo, maxCompLen, fileSysFlags; +#ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ + char *ansi_name = (char *)alloca(strlen(name) + 1); + + INTERN_TO_ISO(name, ansi_name); + name = ansi_name; +#endif + + if ((!strncmp(name, "//", 2) || !strncmp(name,"\\\\", 2)) && + (name[2] != '\0' && name[2] != '/' && name[2] != '\\')) { + /* GetFullPathname() and GetVolumeInformation() do not work + * on UNC names. For now, we return "error". + * **FIXME**: check if UNC name is mapped to a drive letter + * and use mapped drive for volume info query. + */ + return FALSE; + } + if (isalpha((uch)name[0]) && (name[1] == ':')) + tmp0 = (char *)name; + else + { + if (!GetFullPathName(name, MAX_PATH, tmp1, &tmp0)) + return FALSE; + tmp0 = &tmp1[0]; + } + if (strncmp(G.lastRootPath, tmp0, 2) != 0) { + /* For speed, we skip repeated queries for the same device */ + strncpy(G.lastRootPath, tmp0, 2); /* Build the root path name, */ + G.lastRootPath[2] = '/'; /* e.g. "A:/" */ + G.lastRootPath[3] = '\0'; + + if (!GetVolumeInformation((LPCTSTR)G.lastRootPath, + (LPTSTR)tmp1, (DWORD)MAX_PATH, + (LPDWORD)&volSerNo, (LPDWORD)&maxCompLen, + (LPDWORD)&fileSysFlags, (LPTSTR)tmp2, (DWORD)MAX_PATH)) { + G.lastRootPath[0] = '\0'; + return FALSE; + } + + /* LFNs are available if the component length is > 12 */ + G.lastVolOldFAT = (maxCompLen <= 12); +/* G.lastVolOldFAT = !strncmp(strupr(tmp2), "FAT", 3); old version */ + + /* Volumes in (V)FAT and (OS/2) HPFS format store file timestamps in + * local time! + */ + G.lastVolLocTim = !strncmp(strupr(tmp2), "VFAT", 4) || + !strncmp(tmp2, "HPFS", 4) || + !strncmp(tmp2, "FAT", 3); + } + + return TRUE; + +} /* end function NTQueryVolInfo() */ + + + + +/*****************************/ +/* Function IsVolumeOldFAT() */ +/*****************************/ + +static int IsVolumeOldFAT(__GPRO__ const char *name) +{ + return (NTQueryVolInfo(__G__ name) ? G.lastVolOldFAT : FALSE); +} + + + + +#ifndef SFX + +/************************/ +/* Function do_wild() */ /* identical to OS/2 version */ +/************************/ + +char *do_wild(__G__ wildspec) + __GDEF + char *wildspec; /* only used first time on a given dir */ +{ + /* static zDIR *wild_dir = NULL; */ + /* static char *dirname, *wildname, matchname[FILNAMSIZ]; */ + /* static int firstcall=TRUE, have_dirname, dirnamelen; */ + char *fnamestart; + struct zdirent *file; + + /* Even when we're just returning wildspec, we *always* do so in + * matchname[]--calling routine is allowed to append four characters + * to the returned string, and wildspec may be a pointer to argv[]. + */ + if (!G.notfirstcall) { /* first call: must initialize everything */ + G.notfirstcall = TRUE; + + if (!iswild(wildspec)) { + strcpy(G.matchname, wildspec); + G.have_dirname = FALSE; + G.wild_dir = NULL; + return G.matchname; + } + + /* break the wildspec into a directory part and a wildcard filename */ + if ((G.wildname = strrchr(wildspec, '/')) == NULL && + (G.wildname = strrchr(wildspec, ':')) == NULL) { + G.dirname = "."; + G.dirnamelen = 1; + G.have_dirname = FALSE; + G.wildname = wildspec; + } else { + ++G.wildname; /* point at character after '/' or ':' */ + G.dirnamelen = G.wildname - wildspec; + if ((G.dirname = (char *)malloc(G.dirnamelen+1)) == NULL) { + Info(slide, 1, ((char *)slide, + "warning: cannot allocate wildcard buffers\n")); + strcpy(G.matchname, wildspec); + return G.matchname; /* but maybe filespec was not a wildcard */ + } + strncpy(G.dirname, wildspec, G.dirnamelen); + G.dirname[G.dirnamelen] = '\0'; /* terminate for strcpy below */ + G.have_dirname = TRUE; + } + Trace((stderr, "do_wild: dirname = [%s]\n", G.dirname)); + + if ((G.wild_dir = (zvoid *)Opendir(G.dirname)) != NULL) { + if (G.have_dirname) { + strcpy(G.matchname, G.dirname); + fnamestart = G.matchname + G.dirnamelen; + } else + fnamestart = G.matchname; + while ((file = Readdir((zDIR *)G.wild_dir)) != NULL) { + Trace((stderr, "do_wild: Readdir returns %s\n", file->d_name)); + strcpy(fnamestart, file->d_name); + if (strrchr(fnamestart, '.') == (char *)NULL) + strcat(fnamestart, "."); + if (match(fnamestart, G.wildname, 1) && /* 1 == ignore case */ + /* skip "." and ".." directory entries */ + strcmp(fnamestart, ".") && strcmp(fnamestart, "..")) { + Trace((stderr, "do_wild: match() succeeds\n")); + /* remove trailing dot */ + fnamestart += strlen(fnamestart) - 1; + if (*fnamestart == '.') + *fnamestart = '\0'; + return G.matchname; + } + } + /* if we get to here directory is exhausted, so close it */ + Closedir((zDIR *)G.wild_dir); + G.wild_dir = NULL; + } + Trace((stderr, "do_wild: Opendir(%s) returns NULL\n", G.dirname)); + + /* return the raw wildspec in case that works (e.g., directory not + * searchable, but filespec was not wild and file is readable) */ + strcpy(G.matchname, wildspec); + return G.matchname; + } + + /* last time through, might have failed opendir but returned raw wildspec */ + if (G.wild_dir == NULL) { + G.notfirstcall = FALSE; /* reset for new wildspec */ + if (G.have_dirname) + free(G.dirname); + return (char *)NULL; + } + + /* If we've gotten this far, we've read and matched at least one entry + * successfully (in a previous call), so dirname has been copied into + * matchname already. + */ + if (G.have_dirname) { + /* strcpy(G.matchname, G.dirname); */ + fnamestart = G.matchname + G.dirnamelen; + } else + fnamestart = G.matchname; + while ((file = Readdir((zDIR *)G.wild_dir)) != NULL) { + Trace((stderr, "do_wild: readdir returns %s\n", file->d_name)); + strcpy(fnamestart, file->d_name); + if (strrchr(fnamestart, '.') == (char *)NULL) + strcat(fnamestart, "."); + if (match(fnamestart, G.wildname, 1)) { /* 1 == ignore case */ + Trace((stderr, "do_wild: match() succeeds\n")); + /* remove trailing dot */ + fnamestart += strlen(fnamestart) - 1; + if (*fnamestart == '.') + *fnamestart = '\0'; + return G.matchname; + } + } + + Closedir((zDIR *)G.wild_dir); /* at least one entry read; nothing left */ + G.wild_dir = NULL; + G.notfirstcall = FALSE; /* reset for new wildspec */ + if (G.have_dirname) + free(G.dirname); + return (char *)NULL; + +} /* end function do_wild() */ + +#endif /* !SFX */ + + + +/**********************/ +/* Function mapattr() */ +/**********************/ + +/* Identical to MS-DOS, OS/2 versions. However, NT has a lot of extra + * permission stuff, so this function should probably be extended in the + * future. */ + +int mapattr(__G) + __GDEF +{ + /* set archive bit for file entries (file is not backed up): */ + G.pInfo->file_attr = ((unsigned)G.crec.external_file_attributes | + (G.crec.external_file_attributes & FILE_ATTRIBUTE_DIRECTORY ? + 0 : FILE_ATTRIBUTE_ARCHIVE)) & 0xff; + return 0; + +} /* end function mapattr() */ + + + + +/************************/ +/* Function mapname() */ +/************************/ + /* return 0 if no error, 1 if caution (filename */ +int mapname(__G__ renamed) /* truncated), 2 if warning (skip file because */ + __GDEF /* dir doesn't exist), 3 if error (skip file), */ + int renamed; /* or 10 if out of memory (skip file) */ +{ /* [also IZ_VOL_LABEL, IZ_CREATED_DIR] */ + char pathcomp[FILNAMSIZ]; /* path-component buffer */ + char *pp, *cp=NULL; /* character pointers */ + char *lastsemi = NULL; /* pointer to last semi-colon in pathcomp */ + int error; + register unsigned workch; /* hold the character being tested */ + + +/*--------------------------------------------------------------------------- + Initialize various pointers and counters and stuff. + ---------------------------------------------------------------------------*/ + + /* can create path as long as not just freshening, or if user told us */ + G.create_dirs = (!uO.fflag || renamed); + + G.created_dir = FALSE; /* not yet */ + G.renamed_fullpath = FALSE; + G.fnlen = strlen(G.filename); + + if (renamed) { + cp = G.filename - 1; /* point to beginning of renamed name... */ + while (*++cp) + if (*cp == '\\') /* convert backslashes to forward */ + *cp = '/'; + cp = G.filename; + /* use temporary rootpath if user gave full pathname */ + if (G.filename[0] == '/') { + G.renamed_fullpath = TRUE; + pathcomp[0] = '/'; /* copy the '/' and terminate */ + pathcomp[1] = '\0'; + ++cp; + } else if (isalpha((uch)G.filename[0]) && G.filename[1] == ':') { + G.renamed_fullpath = TRUE; + pp = pathcomp; + *pp++ = *cp++; /* copy the "d:" (+ '/', possibly) */ + *pp++ = *cp++; + if (*cp == '/') + *pp++ = *cp++; /* otherwise add "./"? */ + *pp = '\0'; + } + } + + /* pathcomp is ignored unless renamed_fullpath is TRUE: */ + if ((error = checkdir(__G__ pathcomp, INIT)) != 0) /* init path buffer */ + return error; /* ...unless no mem or vol label on hard disk */ + + *pathcomp = '\0'; /* initialize translation buffer */ + pp = pathcomp; /* point to translation buffer */ + if (!renamed) { /* cp already set if renamed */ + if (uO.jflag) /* junking directories */ + cp = (char *)strrchr(G.filename, '/'); + if (cp == NULL) /* no '/' or not junking dirs */ + cp = G.filename; /* point to internal zipfile-member pathname */ + else + ++cp; /* point to start of last component of path */ + } + +/*--------------------------------------------------------------------------- + Begin main loop through characters in filename. + ---------------------------------------------------------------------------*/ + + while ((workch = (uch)*cp++) != 0) { + + switch (workch) { + case '/': /* can assume -j flag not given */ + *pp = '\0'; + if ((error = checkdir(__G__ pathcomp, APPEND_DIR)) > 1) + return error; + pp = pathcomp; /* reset conversion buffer for next piece */ + lastsemi = NULL; /* leave directory semi-colons alone */ + break; + + case ':': /* drive names not stored in zipfile, */ + case '<': /* so no colons allowed */ + case '>': /* no redirection symbols allowed either */ + case '|': /* no pipe signs allowed */ + case '"': /* no double quotes allowed */ + case '?': /* no wildcards allowed */ + case '*': + *pp++ = '_'; /* these rules apply equally to FAT and NTFS */ + break; + case ';': /* start of VMS version? */ + lastsemi = pp; /* remove VMS version later... */ + *pp++ = ';'; /* but keep semicolon for now */ + break; + + case ' ': /* keep spaces unless specifically */ + /* NT cannot create filenames with spaces on FAT volumes */ + if (uO.sflag || IsVolumeOldFAT(__G__ G.filename)) + *pp++ = '_'; + else + *pp++ = ' '; + break; + + default: + /* allow European characters in filenames: */ + if (isprint(workch) || workch >= 127) + *pp++ = (char)workch; + } /* end switch */ + } /* end while loop */ + + *pp = '\0'; /* done with pathcomp: terminate it */ + + /* if not saving them, remove VMS version numbers (appended "###") */ + if (!uO.V_flag && lastsemi) { + pp = lastsemi + 1; /* semi-colon was kept: expect #'s after */ + while (isdigit((uch)(*pp))) + ++pp; + if (*pp == '\0') /* only digits between ';' and end: nuke */ + *lastsemi = '\0'; + } + +/*--------------------------------------------------------------------------- + Report if directory was created (and no file to create: filename ended + in '/'), check name to be sure it exists, and combine path and name be- + fore exiting. + ---------------------------------------------------------------------------*/ + + if (G.filename[G.fnlen-1] == '/') { + checkdir(__G__ G.filename, GETPATH); + if (G.created_dir) { +#ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ + char *ansi_name = (char *)alloca(strlen(G.filename) + 1); + + INTERN_TO_ISO(G.filename, ansi_name); +# define Ansi_Fname ansi_name +#else +# define Ansi_Fname G.filename +#endif + if (QCOND2) { + Info(slide, 0, ((char *)slide, " creating: %-22s\n", + FnFilter1(G.filename))); + } + + /* set file attributes: + The default for newly created directories is "DIR attribute + flags set", so there is no need to change attributes unless + one of the DOS style attribute flags is set. The readonly + attribute need not be masked, since it does not prevent + modifications in the new directory. */ + if(G.pInfo->file_attr & (0x7F & ~FILE_ATTRIBUTE_DIRECTORY)) { + if (!SetFileAttributes(Ansi_Fname, G.pInfo->file_attr & 0x7F)) + Info(slide, 1, ((char *)slide, + "\nwarning (%d): could not set file attributes for %s\n", + (int)GetLastError(), G.filename)); + } + +#ifdef NTSD_EAS + /* set extra fields, both stored-in-zipfile and .LONGNAME flavors */ + if (G.extra_field) { /* zipfile e.f. may have extended attribs */ + int err = EvalExtraFields(__G__ G.filename, G.extra_field, + G.lrec.extra_field_length); + + if (err == IZ_EF_TRUNC) { + if (uO.qflag) + Info(slide, 1, ((char *)slide, "%-22s ", + FnFilter1(G.filename))); + Info(slide, 1, ((char *)slide, LoadFarString(TruncNTSD), + makeword(G.extra_field+2)-10, uO.qflag? "\n":"")); + } + } +#endif /* NTSD_EAS */ + return IZ_CREATED_DIR; /* set dir time (note trailing '/') */ + } + return 2; /* dir existed already; don't look for data to extract */ + } + + if (*pathcomp == '\0') { + Info(slide, 1, ((char *)slide, "mapname: conversion of %s failed\n", + FnFilter1(G.filename))); + return 3; + } + + checkdir(__G__ pathcomp, APPEND_NAME); /* returns 1 if truncated: care? */ + checkdir(__G__ G.filename, GETPATH); + Trace((stderr, "mapname returns with filename = [%s] (error = %d)\n\n", + FnFilter1(G.filename), error)); + + if (G.pInfo->vollabel) { /* set the volume label now */ + char drive[4]; +#ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ + char *ansi_name = (char *)alloca(strlen(G.filename) + 1); + INTERN_TO_ISO(G.filename, ansi_name); +# define Ansi_Fname ansi_name +#else +# define Ansi_Fname G.filename +#endif + + /* Build a drive string, e.g. "b:" */ + drive[0] = (char)('a' + G.nLabelDrive - 1); + strcpy(drive + 1, ":\\"); + if (QCOND2) + Info(slide, 0, ((char *)slide, "labelling %s %-22s\n", drive, + FnFilter1(G.filename))); + if (!SetVolumeLabel(drive, Ansi_Fname)) { + Info(slide, 1, ((char *)slide, + "mapname: error setting volume label\n")); + return 3; + } + return 2; /* success: skip the "extraction" quietly */ +#undef Ansi_Fname + } + + return error; + +} /* end function mapname() */ + + + + +/**********************/ +/* Function map2fat() */ /* Not quite identical to OS/2 version */ +/**********************/ + +static void map2fat(pathcomp, pEndFAT) + char *pathcomp, **pEndFAT; +{ + char *ppc = pathcomp; /* variable pointer to pathcomp */ + char *pEnd = *pEndFAT; /* variable pointer to buildpathFAT */ + char *pBegin = *pEndFAT; /* constant pointer to start of this comp. */ + char *last_dot = NULL; /* last dot not converted to underscore */ + int dotname = FALSE; /* flag: path component begins with dot */ + /* ("." and ".." don't count) */ + register unsigned workch; /* hold the character being tested */ + + + /* Only need check those characters which are legal in NTFS but not + * in FAT: to get here, must already have passed through mapname. + * Also must truncate path component to ensure 8.3 compliance. + */ + while ((workch = (uch)*ppc++) != 0) { + switch (workch) { + case '[': + case ']': + case '+': + case ',': + case ';': + case '=': + *pEnd++ = '_'; /* convert brackets to underscores */ + break; + + case '.': + if (pEnd == *pEndFAT) { /* nothing appended yet... */ + if (*ppc == '\0') /* don't bother appending a */ + break; /* "./" component to the path */ + else if (*ppc == '.' && ppc[1] == '\0') { /* "../" */ + *pEnd++ = '.'; /* add first dot, unchanged... */ + ++ppc; /* skip second dot, since it will */ + } else { /* be "added" at end of if-block */ + *pEnd++ = '_'; /* FAT doesn't allow null filename */ + dotname = TRUE; /* bodies, so map .exrc -> _.exrc */ + } /* (extra '_' now, "dot" below) */ + } else if (dotname) { /* found a second dot, but still */ + dotname = FALSE; /* have extra leading underscore: */ + *pEnd = '\0'; /* remove it by shifting chars */ + pEnd = *pEndFAT + 1; /* left one space (e.g., .p1.p2: */ + while (pEnd[1]) { /* __p1 -> _p1_p2 -> _p1.p2 when */ + *pEnd = pEnd[1]; /* finished) [opt.: since first */ + ++pEnd; /* two chars are same, can start */ + } /* shifting at second position] */ + } + last_dot = pEnd; /* point at last dot so far... */ + *pEnd++ = '_'; /* convert dot to underscore for now */ + break; + + default: + *pEnd++ = (char)workch; + + } /* end switch */ + } /* end while loop */ + + *pEnd = '\0'; /* terminate buildpathFAT */ + + /* NOTE: keep in mind that pEnd points to the end of the path + * component, and *pEndFAT still points to the *beginning* of it... + * Also note that the algorithm does not try to get too fancy: + * if there are no dots already, the name either gets truncated + * at 8 characters or the last underscore is converted to a dot + * (only if more characters are saved that way). In no case is + * a dot inserted between existing characters. + */ + if (last_dot == NULL) { /* no dots: check for underscores... */ + char *plu = strrchr(pBegin, '_'); /* pointer to last underscore */ + + if (plu == NULL) { /* no dots, no underscores: truncate at 8 chars */ + *pEndFAT += 8; /* (or could insert '.' and keep 11...?) */ + if (*pEndFAT > pEnd) + *pEndFAT = pEnd; /* oops...didn't have 8 chars to truncate */ + else + **pEndFAT = '\0'; + } else if (MIN(plu - pBegin, 8) + MIN(pEnd - plu - 1, 3) > 8) { + last_dot = plu; /* be lazy: drop through to next if-blk */ + } else if ((pEnd - *pEndFAT) > 8) { + *pEndFAT += 8; /* more fits into just basename than if */ + **pEndFAT = '\0'; /* convert last underscore to dot */ + } else + *pEndFAT = pEnd; /* whole thing fits into 8 chars or less */ + } + + if (last_dot != NULL) { /* one dot (or two, in the case of */ + *last_dot = '.'; /* "..") is OK: put it back in */ + + if ((last_dot - pBegin) > 8) { + char *p, *q; + int i; + + p = last_dot; + q = last_dot = pBegin + 8; + for (i = 0; (i < 4) && *p; ++i) /* too many chars in basename: */ + *q++ = *p++; /* shift .ext left and trun- */ + *q = '\0'; /* cate/terminate it */ + *pEndFAT = q; + } else if ((pEnd - last_dot) > 4) { /* too many chars in extension */ + *pEndFAT = last_dot + 4; + **pEndFAT = '\0'; + } else + *pEndFAT = pEnd; /* filename is fine; point at terminating zero */ + + if ((last_dot - pBegin) > 0 && last_dot[-1] == ' ') + last_dot[-1] = '_'; /* NO blank in front of '.'! */ + } +} /* end function map2fat() */ + + + + +/***********************/ /* Borrowed from os2.c for UnZip 5.1. */ +/* Function checkdir() */ /* Difference: no EA stuff */ +/***********************/ /* HPFS stuff works on NTFS too */ + +int checkdir(__G__ pathcomp, flag) + __GDEF + char *pathcomp; + int flag; +/* + * returns: 1 - (on APPEND_NAME) truncated filename + * 2 - path doesn't exist, not allowed to create + * 3 - path doesn't exist, tried to create and failed; or + * path exists and is not a directory, but is supposed to be + * 4 - path is too long + * 10 - can't allocate memory for filename buffers + */ +{ + /* static int rootlen = 0; */ /* length of rootpath */ + /* static char *rootpath; */ /* user's "extract-to" directory */ + /* static char *buildpathHPFS; */ /* full path (so far) to extracted file, */ + /* static char *buildpathFAT; */ /* both HPFS/EA (main) and FAT versions */ + /* static char *endHPFS; */ /* corresponding pointers to end of */ + /* static char *endFAT; */ /* buildpath ('\0') */ + +# define FN_MASK 7 +# define FUNCTION (flag & FN_MASK) + + + +/*--------------------------------------------------------------------------- + APPEND_DIR: append the path component to the path being built and check + for its existence. If doesn't exist and we are creating directories, do + so for this one; else signal success or error as appropriate. + ---------------------------------------------------------------------------*/ + + if (FUNCTION == APPEND_DIR) { + char *p = pathcomp; + int too_long=FALSE; + + Trace((stderr, "appending dir segment [%s]\n", pathcomp)); + while ((*G.endHPFS = *p++) != '\0') /* copy to HPFS filename */ + ++G.endHPFS; + if (!IsVolumeOldFAT(__G__ G.buildpathHPFS)) { + p = pathcomp; + while ((*G.endFAT = *p++) != '\0') /* copy to FAT filename, too */ + ++G.endFAT; + } else + map2fat(pathcomp, &G.endFAT); /* map into FAT fn, update endFAT */ + + /* GRR: could do better check, see if overrunning buffer as we go: + * check endHPFS-buildpathHPFS after each append, set warning variable + * if within 20 of FILNAMSIZ; then if var set, do careful check when + * appending. Clear variable when begin new path. */ + + /* next check: need to append '/', at least one-char name, '\0' */ + if ((G.endHPFS-G.buildpathHPFS) > FILNAMSIZ-3) + too_long = TRUE; /* check if extracting dir? */ +#ifdef FIX_STAT_BUG + /* Borland C++ 5.0 does not handle a call to stat() well if the + * directory does not exist (it tends to crash in strange places.) + * This is apparently a problem only when compiling for GUI rather + * than console. The code below attempts to work around this problem. + */ + if (access(G.buildpathFAT, 0) != 0) { + if (!G.create_dirs) { /* told not to create (freshening) */ + free(G.buildpathHPFS); + free(G.buildpathFAT); + return 2; /* path doesn't exist: nothing to do */ + } + if (too_long) { /* GRR: should allow FAT extraction w/o EAs */ + Info(slide, 1, ((char *)slide, + "checkdir error: path too long: %s\n", + FnFilter1(G.buildpathHPFS))); + free(G.buildpathHPFS); + free(G.buildpathFAT); + return 4; /* no room for filenames: fatal */ + } + if (MKDIR(G.buildpathFAT, 0777) == -1) { /* create the directory */ + Info(slide, 1, ((char *)slide, + "checkdir error: cannot create %s\n\ + unable to process %s.\n", + FnFilter2(G.buildpathFAT), FnFilter1(G.filename))); + free(G.buildpathHPFS); + free(G.buildpathFAT); + return 3; /* path didn't exist, tried to create, failed */ + } + G.created_dir = TRUE; + } +#endif /* FIX_STAT_BUG */ + if (SSTAT(G.buildpathFAT, &G.statbuf)) /* path doesn't exist */ + { + if (!G.create_dirs) { /* told not to create (freshening) */ + free(G.buildpathHPFS); + free(G.buildpathFAT); + return 2; /* path doesn't exist: nothing to do */ + } + if (too_long) { /* GRR: should allow FAT extraction w/o EAs */ + Info(slide, 1, ((char *)slide, + "checkdir error: path too long: %s\n", + FnFilter1(G.buildpathHPFS))); + free(G.buildpathHPFS); + free(G.buildpathFAT); + return 4; /* no room for filenames: fatal */ + } + if (MKDIR(G.buildpathFAT, 0777) == -1) { /* create the directory */ + Info(slide, 1, ((char *)slide, + "checkdir error: cannot create %s\n\ + unable to process %s.\n", + FnFilter2(G.buildpathFAT), FnFilter1(G.filename))); + free(G.buildpathHPFS); + free(G.buildpathFAT); + return 3; /* path didn't exist, tried to create, failed */ + } + G.created_dir = TRUE; + } else if (!S_ISDIR(G.statbuf.st_mode)) { + Info(slide, 1, ((char *)slide, + "checkdir error: %s exists but is not directory\n \ + unable to process %s.\n", + FnFilter2(G.buildpathFAT), FnFilter1(G.filename))); + free(G.buildpathHPFS); + free(G.buildpathFAT); + return 3; /* path existed but wasn't dir */ + } + if (too_long) { + Info(slide, 1, ((char *)slide, + "checkdir error: path too long: %s\n", + FnFilter1(G.buildpathHPFS))); + free(G.buildpathHPFS); + free(G.buildpathFAT); + return 4; /* no room for filenames: fatal */ + } + *G.endHPFS++ = '/'; + *G.endFAT++ = '/'; + *G.endHPFS = *G.endFAT = '\0'; + Trace((stderr, "buildpathHPFS now = [%s]\nbuildpathFAT now = [%s]\n", + FnFilter1(G.buildpathHPFS), FnFilter2(G.buildpathFAT))); + return 0; + + } /* end if (FUNCTION == APPEND_DIR) */ + +/*--------------------------------------------------------------------------- + GETPATH: copy full FAT path to the string pointed at by pathcomp (want + filename to reflect name used on disk, not EAs; if full path is HPFS, + buildpathFAT and buildpathHPFS will be identical). Also free both paths. + ---------------------------------------------------------------------------*/ + + if (FUNCTION == GETPATH) { + Trace((stderr, "getting and freeing FAT path [%s]\n", + FnFilter1(G.buildpathFAT))); + Trace((stderr, "freeing HPFS path [%s]\n", + FnFilter1(G.buildpathHPFS))); + strcpy(pathcomp, G.buildpathFAT); + free(G.buildpathFAT); + free(G.buildpathHPFS); + G.buildpathHPFS = G.buildpathFAT = G.endHPFS = G.endFAT = NULL; + return 0; + } + +/*--------------------------------------------------------------------------- + APPEND_NAME: assume the path component is the filename; append it and + return without checking for existence. + ---------------------------------------------------------------------------*/ + + if (FUNCTION == APPEND_NAME) { + char *p = pathcomp; + int error = 0; + + Trace((stderr, "appending filename [%s]\n", FnFilter1(pathcomp))); + while ((*G.endHPFS = *p++) != '\0') { /* copy to HPFS filename */ + ++G.endHPFS; + if ((G.endHPFS-G.buildpathHPFS) >= FILNAMSIZ) { + *--G.endHPFS = '\0'; + Info(slide, 1, ((char *)slide, + "checkdir warning: path too long; truncating\n \ + %s\n -> %s\n", + FnFilter1(G.filename), FnFilter2(G.buildpathHPFS))); + error = 1; /* filename truncated */ + } + } + + if ( G.pInfo->vollabel || !IsVolumeOldFAT(__G__ G.buildpathHPFS)) { + p = pathcomp; + while ((*G.endFAT = *p++) != '\0') /* copy to FAT filename, too */ + ++G.endFAT; + } else + map2fat(pathcomp, &G.endFAT); /* map into FAT fn, update endFAT */ + Trace((stderr, "buildpathHPFS: %s\nbuildpathFAT: %s\n", + FnFilter1(G.buildpathHPFS), FnFilter2(G.buildpathFAT))); + + return error; /* could check for existence, prompt for new name... */ + + } /* end if (FUNCTION == APPEND_NAME) */ + +/*--------------------------------------------------------------------------- + INIT: allocate and initialize buffer space for the file currently being + extracted. If file was renamed with an absolute path, don't prepend the + extract-to path. + ---------------------------------------------------------------------------*/ + + if (FUNCTION == INIT) { + Trace((stderr, "initializing buildpathHPFS and buildpathFAT to ")); + if ((G.buildpathHPFS = (char *)malloc(G.fnlen+G.rootlen+1)) == NULL) + return 10; + if ((G.buildpathFAT = (char *)malloc(G.fnlen+G.rootlen+1)) == NULL) { + free(G.buildpathHPFS); + return 10; + } + if (G.pInfo->vollabel) { /* use root or renamed path, but don't store */ +/* GRR: for network drives, do strchr() and return IZ_VOL_LABEL if not [1] */ + if (G.renamed_fullpath && pathcomp[1] == ':') + *G.buildpathHPFS = (char)ToLower(*pathcomp); + else if (!G.renamed_fullpath && G.rootlen > 1 && + G.rootpath[1] == ':') + *G.buildpathHPFS = (char)ToLower(*G.rootpath); + else { + char tmpN[MAX_PATH], *tmpP; + if (GetFullPathName(".", MAX_PATH, tmpN, &tmpP) > MAX_PATH) + { /* by definition of MAX_PATH we should never get here */ + Info(slide, 1, ((char *)slide, + "checkdir warning: current dir path too long\n")); + return 1; /* can't get drive letter */ + } + G.nLabelDrive = *tmpN - 'a' + 1; + *G.buildpathHPFS = (char)(G.nLabelDrive - 1 + 'a'); + } + G.nLabelDrive = *G.buildpathHPFS - 'a' + 1; /* save for mapname() */ + if (uO.volflag == 0 || *G.buildpathHPFS < 'a' /* no labels/bogus? */ + || (uO.volflag == 1 && !isfloppy(G.nLabelDrive))) { /* !fixed */ + free(G.buildpathHPFS); + free(G.buildpathFAT); + return IZ_VOL_LABEL; /* skipping with message */ + } + *G.buildpathHPFS = '\0'; + } else if (G.renamed_fullpath) /* pathcomp = valid data */ + strcpy(G.buildpathHPFS, pathcomp); + else if (G.rootlen > 0) + strcpy(G.buildpathHPFS, G.rootpath); + else + *G.buildpathHPFS = '\0'; + G.endHPFS = G.buildpathHPFS; + G.endFAT = G.buildpathFAT; + while ((*G.endFAT = *G.endHPFS) != '\0') { + ++G.endFAT; + ++G.endHPFS; + } + Trace((stderr, "[%s]\n", FnFilter1(G.buildpathHPFS))); + return 0; + } + +/*--------------------------------------------------------------------------- + ROOT: if appropriate, store the path in rootpath and create it if neces- + sary; else assume it's a zipfile member and return. This path segment + gets used in extracting all members from every zipfile specified on the + command line. Note that under OS/2 and MS-DOS, if a candidate extract-to + directory specification includes a drive letter (leading "x:"), it is + treated just as if it had a trailing '/'--that is, one directory level + will be created if the path doesn't exist, unless this is otherwise pro- + hibited (e.g., freshening). + ---------------------------------------------------------------------------*/ + +#if (!defined(SFX) || defined(SFX_EXDIR)) + if (FUNCTION == ROOT) { + Trace((stderr, "initializing root path to [%s]\n", + FnFilter1(pathcomp))); + if (pathcomp == NULL) { + G.rootlen = 0; + return 0; + } + if ((G.rootlen = strlen(pathcomp)) > 0) { + int had_trailing_pathsep=FALSE, has_drive=FALSE, xtra=2; + + if (isalpha((uch)pathcomp[0]) && pathcomp[1] == ':') + has_drive = TRUE; /* drive designator */ + if (pathcomp[G.rootlen-1] == '/' || pathcomp[G.rootlen-1] == '\\') { + pathcomp[--G.rootlen] = '\0'; + had_trailing_pathsep = TRUE; + } + if (has_drive && (G.rootlen == 2)) { + if (!had_trailing_pathsep) /* i.e., original wasn't "x:/" */ + xtra = 3; /* room for '.' + '/' + 0 at end of "x:" */ + } else if (G.rootlen > 0) { /* need not check "x:." and "x:/" */ + if (SSTAT(pathcomp, &G.statbuf) || !S_ISDIR(G.statbuf.st_mode)) + { + /* path does not exist */ + if (!G.create_dirs /* || iswild(pathcomp) */ ) { + G.rootlen = 0; + return 2; /* treat as stored file */ + } + /* create directory (could add loop here to scan pathcomp + * and create more than one level, but really necessary?) */ + if (MKDIR(pathcomp, 0777) == -1) { + Info(slide, 1, ((char *)slide, + "checkdir: cannot create extraction directory: %s\n", + FnFilter1(pathcomp))); + G.rootlen = 0; /* path didn't exist, tried to create, */ + return 3; /* failed: file exists, or need 2+ levels */ + } + } + } + if ((G.rootpath = (char *)malloc(G.rootlen+xtra)) == NULL) { + G.rootlen = 0; + return 10; + } + strcpy(G.rootpath, pathcomp); + if (xtra == 3) /* had just "x:", make "x:." */ + G.rootpath[G.rootlen++] = '.'; + G.rootpath[G.rootlen++] = '/'; + G.rootpath[G.rootlen] = '\0'; + Trace((stderr, "rootpath now = [%s]\n", FnFilter1(G.rootpath))); + } + return 0; + } +#endif /* !SFX || SFX_EXDIR */ + +/*--------------------------------------------------------------------------- + END: free rootpath, immediately prior to program exit. + ---------------------------------------------------------------------------*/ + + if (FUNCTION == END) { + Trace((stderr, "freeing rootpath\n")); + if (G.rootlen > 0) { + free(G.rootpath); + G.rootlen = 0; + } + return 0; + } + + return 99; /* should never reach */ + +} /* end function checkdir() */ + + + + + +#ifndef SFX +#ifndef WINDLL + +/************************/ +/* Function version() */ +/************************/ + +void version(__G) + __GDEF +{ + int len; +#if (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__DJGPP__)) + char buf[80]; +#if (defined(_MSC_VER) && (_MSC_VER > 900)) + char buf2[80]; +#endif +#endif + + len = sprintf((char *)slide, CompiledWith, + +#if defined(_MSC_VER) /* MSC == VC++, but what about SDK compiler? */ + (sprintf(buf, "Microsoft C %d.%02d ", _MSC_VER/100, _MSC_VER%100), buf), +# if (_MSC_VER == 800) + "(Visual C++ v1.1)", +# elif (_MSC_VER == 850) + "(Windows NT v3.5 SDK)", +# elif (_MSC_VER == 900) + "(Visual C++ v2.x)", +# elif (_MSC_VER > 900) + (sprintf(buf2, "(Visual C++ %d.%d)", _MSC_VER/100 - 6, _MSC_VER%100/10), + buf2), +# else + "(bad version)", +# endif +#elif defined(__WATCOMC__) +# if (__WATCOMC__ % 10 > 0) + (sprintf(buf, "Watcom C/C++ %d.%02d", __WATCOMC__ / 100, + __WATCOMC__ % 100), buf), "", +# else + (sprintf(buf, "Watcom C/C++ %d.%d", __WATCOMC__ / 100, + (__WATCOMC__ % 100) / 10), buf), "", +# endif +#elif defined(__BORLANDC__) + "Borland C++", +# if (__BORLANDC__ < 0x0200) + " 1.0", +# elif (__BORLANDC__ == 0x0200) + " 2.0", +# elif (__BORLANDC__ == 0x0400) + " 3.0", +# elif (__BORLANDC__ == 0x0410) /* __BCPLUSPLUS__ = 0x0310 */ + " 3.1", +# elif (__BORLANDC__ == 0x0452) /* __BCPLUSPLUS__ = 0x0320 */ + " 4.0 or 4.02", +# elif (__BORLANDC__ == 0x0460) /* __BCPLUSPLUS__ = 0x0340 */ + " 4.5", +# elif (__BORLANDC__ == 0x0500) /* __BCPLUSPLUS__ = 0x0340 */ + " 5.0", +# elif (__BORLANDC__ == 0x0520) /* __BCPLUSPLUS__ = 0x0520 */ + " 5.2 (C++ Builder)", /* GRR: assume this will stay sync'd? */ +# else + " later than 5.2", +# endif +#elif defined(__LCC__) + "LCC-Win32", "", +#elif defined(__GNUC__) +# if defined(__RSXNT__) +# if (defined(__DJGPP__) && !defined(__EMX__)) + (sprintf(buf, "rsxnt(djgpp v%d.%02d) / gcc ", + __DJGPP__, __DJGPP_MINOR__), buf), +# elif defined(__DJGPP__) + (sprintf(buf, "rsxnt(emx+djgpp v%d.%02d) / gcc ", + __DJGPP__, __DJGPP_MINOR__), buf), +# elif (defined(__GO32__) && !defined(__EMX__)) + "rsxnt(djgpp v1.x) / gcc ", +# elif defined(__GO32__) + "rsxnt(emx + djgpp v1.x) / gcc ", +# elif defined(__EMX__) + "rsxnt(emx)+gcc ", +# else + "rsxnt(unknown) / gcc ", +# endif +# elif defined(__CYGWIN32__) + "cygnus win32 / gcc ", +# elif defined(__MINGW32__) + "mingw32 / gcc ", +# else + "gcc ", +# endif + __VERSION__, +#else /* !_MSC_VER, !__WATCOMC__, !__BORLANDC__, !__LCC__, !__GNUC__ */ + "unknown compiler (SDK?)", "", +#endif /* ?compilers */ + + "Windows 95 / Windows NT", "\n(32-bit)", + +#ifdef __DATE__ + " on ", __DATE__ +#else + "", "" +#endif + ); + + (*G.message)((zvoid *)&G, slide, (ulg)len, 0); + + return; + +} /* end function version() */ + +#endif /* !WINDLL */ +#endif /* !SFX */ + + + +#ifdef W32_STAT_BANDAID + +/* All currently known variants of WIN32 operating systems (Windows 95/98, + * WinNT 3.x, 4.0, 5.0) have a nasty bug in the OS kernel concerning + * conversions between UTC and local time: In the time conversion functions + * of the Win32 API, the timezone offset (including seasonal daylight saving + * shift) between UTC and local time evaluation is erratically based on the + * current system time. The correct evaluation must determine the offset + * value as it {was/is/will be} for the actual time to be converted. + * + * Some versions of MS C runtime lib's stat() returns utc time-stamps so + * that localtime(timestamp) corresponds to the (potentially false) local + * time shown by the OS' system programs (Explorer, command shell dir, etc.) + * The RSXNT port follows the same strategy, but fails to recognize the + * access-time attribute. + * + * For the NTFS file system (and other filesystems that store time-stamps + * as UTC values), this results in st_mtime (, st_{c|a}time) fields which + * are not stable but vary according to the seasonal change of "daylight + * saving time in effect / not in effect". + * + * Other C runtime libs (CygWin, or the CRT DLLs supplied with Win95/NT + * return the unix-time equivalent of the UTC FILETIME values as got back + * from the Win32 API call. This time, return values from NTFS are correct + * whereas utimes from files on (V)FAT volumes vary according to the DST + * switches. + * + * To achieve timestamp consistency of UTC (UT extra field) values in + * Zip archives, the Info-ZIP programs require work-around code for + * proper time handling in stat() (and other time handling routines). + */ +/* stat() functions under Windows95 tend to fail for root directories. * + * Watcom and Borland, at least, are affected by this bug. Watcom made * + * a partial fix for 11.0 but still missed some cases. This substitute * + * detects the case and fills in reasonable values. Otherwise we get * + * effects like failure to extract to a root dir because it's not found. */ + +int zstat_win32(__W32STAT_GLOBALS__ const char *path, struct stat *buf) +{ + if (!stat(path, buf)) + { +#ifdef NT_TZBUG_WORKAROUND + /* stat was successful, now redo the time-stamp fetches */ + int fs_uses_loctime = FStampIsLocTime(__G__ path); + HANDLE h; + FILETIME Modft, Accft, Creft; +#ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ + char *ansi_path = (char *)alloca(strlen(path) + 1); + + INTERN_TO_ISO(path, ansi_path); +# define Ansi_Path ansi_path +#else +# define Ansi_Path path +#endif + + TTrace((stdout, "stat(%s) finds modtime %08lx\n", path, buf->st_mtime)); + h = CreateFile(Ansi_Path, GENERIC_READ, + FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (h != INVALID_HANDLE_VALUE) { + BOOL ftOK = GetFileTime(h, &Creft, &Accft, &Modft); + CloseHandle(h); + + if (ftOK) { + FTTrace((stdout, "GetFileTime returned Modft", 0, &Modft)); + FTTrace((stdout, "GetFileTime returned Creft", 0, &Creft)); + if (!fs_uses_loctime) { + /* On a filesystem that stores UTC timestamps, we refill + * the time fields of the struct stat buffer by directly + * using the UTC values as returned by the Win32 + * GetFileTime() API call. + */ + FileTime2utime(&Modft, &(buf->st_mtime)); + if (Accft.dwLowDateTime != 0 || Accft.dwHighDateTime != 0) + FileTime2utime(&Accft, &(buf->st_atime)); + else + buf->st_atime = buf->st_mtime; + if (Creft.dwLowDateTime != 0 || Creft.dwHighDateTime != 0) + FileTime2utime(&Creft, &(buf->st_ctime)); + else + buf->st_ctime = buf->st_mtime; + TTrace((stdout,"NTFS, recalculated modtime %08lx\n", + buf->st_mtime)); + } else { + /* On VFAT and FAT-like filesystems, the FILETIME values + * are converted back to the stable local time before + * converting them to UTC unix time-stamps. + */ + VFatFileTime2utime(&Modft, &(buf->st_mtime)); + if (Accft.dwLowDateTime != 0 || Accft.dwHighDateTime != 0) + VFatFileTime2utime(&Accft, &(buf->st_atime)); + else + buf->st_atime = buf->st_mtime; + if (Creft.dwLowDateTime != 0 || Creft.dwHighDateTime != 0) + VFatFileTime2utime(&Creft, &(buf->st_ctime)); + else + buf->st_ctime = buf->st_mtime; + TTrace((stdout, "VFAT, recalculated modtime %08lx\n", + buf->st_mtime)); + } + } + } +# undef Ansi_Path +#endif /* NT_TZBUG_WORKAROUND */ + return 0; + } +#ifdef W32_STATROOT_FIX + else + { + DWORD flags; +#ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ + char *ansi_path = (char *)alloca(strlen(path) + 1); + + INTERN_TO_ISO(path, ansi_path); +# define Ansi_Path ansi_path +#else +# define Ansi_Path path +#endif + + flags = GetFileAttributes(Ansi_Path); + if (flags != 0xFFFFFFFF && flags & FILE_ATTRIBUTE_DIRECTORY) { + Trace((stderr, "\nstat(\"%s\",...) failed on existing directory\n", + path)); + memset(buf, 0, sizeof(struct stat)); + buf->st_atime = buf->st_ctime = buf->st_mtime = + dos_to_unix_time(DOSTIME_MINIMUM); /* 1-1-80 */ + buf->st_mode = S_IFDIR | S_IREAD | + ((flags & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE); + return 0; + } /* assumes: stat() won't fail on non-dirs without good reason */ +# undef Ansi_Path + } +#endif /* W32_STATROOT_FIX */ + return -1; +} + +#endif /* W32_STAT_BANDAID */ + +#endif /* !FUNZIP */ + + + +#ifndef WINDLL +/* This replacement getch() function was originally created for Watcom C + * and then additionally used with CYGWIN. Since UnZip 5.4, all other Win32 + * ports apply this replacement rather that their supplied getch() (or + * alike) function. There are problems with unabsorbed LF characters left + * over in the keyboard buffer under Win95 (and 98) when ENTER was pressed. + * (Under Win95, ENTER returns two(!!) characters: CR-LF.) This problem + * does not appear when run on a WinNT console prompt! + */ + +/* Watcom 10.6's getch() does not handle Alt+. */ +/* Note that if PASSWD_FROM_STDIN is defined, the file containing */ +/* the password must have a carriage return after the word, not a */ +/* Unix-style newline (linefeed only). This discards linefeeds. */ + +int getch_win32(void) +{ + HANDLE stin; + DWORD rc; + unsigned char buf[2]; + int ret = -1; + DWORD odemode = ~(DWORD)0; + +# ifdef PASSWD_FROM_STDIN + stin = GetStdHandle(STD_INPUT_HANDLE); +# else + stin = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); + if (stin == INVALID_HANDLE_VALUE) + return -1; +# endif + if (GetConsoleMode(stin, &odemode)) + SetConsoleMode(stin, ENABLE_PROCESSED_INPUT); /* raw except ^C noticed */ + if (ReadFile(stin, &buf, 1, &rc, NULL) && rc == 1) + ret = buf[0]; + /* when the user hits return we get CR LF. We discard the LF, not the CR, + * because when we call this for the first time after a previous input + * such as the one for "replace foo? [y]es, ..." the LF may still be in + * the input stream before whatever the user types at our prompt. */ + if (ret == '\n') + if (ReadFile(stin, &buf, 1, &rc, NULL) && rc == 1) + ret = buf[0]; + if (odemode != ~(DWORD)0) + SetConsoleMode(stin, odemode); +# ifndef PASSWD_FROM_STDIN + CloseHandle(stin); +# endif + return ret; +} +#endif /* !WINDLL */ diff --git a/Build/source/extra/unzip/windll/decs.h b/Build/source/extra/unzip/windll/decs.h new file mode 100644 index 00000000000..fc11410771f --- /dev/null +++ b/Build/source/extra/unzip/windll/decs.h @@ -0,0 +1,29 @@ +#ifndef __decs_h /* prevent multiple inclusions */ +#define __decs_h + +#include +#ifndef __unzip_h +# include "unzip.h" +#endif +#ifndef __structs_h +# include "structs.h" +#endif + +#define WizMatch match + +void WINAPI Wiz_NoPrinting(int f); +int WINAPI Wiz_Validate(LPSTR archive, int AllCodes); +BOOL WINAPI Wiz_Init(zvoid *, LPUSERFUNCTIONS); +BOOL WINAPI Wiz_SetOpts(zvoid *, LPDCL); +int WINAPI Wiz_Unzip(zvoid *, int, char **, int, char **); +int WINAPI Wiz_SingleEntryUnzip(int, char **, int, char **, + LPDCL, LPUSERFUNCTIONS); + +int WINAPI Wiz_UnzipToMemory(LPSTR zip, LPSTR file, + LPUSERFUNCTIONS lpUserFunctions, + UzpBuffer *retstr); +int WINAPI Wiz_Grep(LPSTR archive, LPSTR file, LPSTR pattern, + int cmd, int SkipBin, + LPUSERFUNCTIONS lpUserFunctions); + +#endif /* __decs_h */ diff --git a/Build/source/extra/unzip/windll/structs.h b/Build/source/extra/unzip/windll/structs.h new file mode 100644 index 00000000000..39a908d3e16 --- /dev/null +++ b/Build/source/extra/unzip/windll/structs.h @@ -0,0 +1,72 @@ +#ifndef __structs_h +#define __structs_h + +#ifndef Far +# define Far far +#endif + +/* Porting definitions between Win 3.1x and Win32 */ +#ifdef WIN32 +# define far +# define _far +# define __far +# define near +# define _near +# define __near +# ifndef FAR +# define FAR +# endif +#endif + +#ifndef PATH_MAX +# define PATH_MAX 260 /* max total file or directory name path */ +#endif + +#ifndef DEFINED_ONCE +#define DEFINED_ONCE + +typedef int (WINAPI DLLPRNT) (LPSTR, unsigned long); +typedef int (WINAPI DLLPASSWORD) (LPSTR, int, LPCSTR, LPCSTR); +typedef int (WINAPI DLLSERVICE) (LPCSTR, unsigned long); +#endif +typedef void (WINAPI DLLSND) (void); +typedef int (WINAPI DLLREPLACE)(LPSTR); +typedef void (WINAPI DLLMESSAGE)(unsigned long, unsigned long, unsigned, + unsigned, unsigned, unsigned, unsigned, unsigned, + char, LPSTR, LPSTR, unsigned long, char); + +typedef struct { +DLLPRNT *print; +DLLSND *sound; +DLLREPLACE *replace; +DLLPASSWORD *password; +DLLMESSAGE *SendApplicationMessage; +DLLSERVICE *ServCallBk; +unsigned long TotalSizeComp; +unsigned long TotalSize; +int CompFactor; +unsigned int NumMembers; +WORD cchComment; +} USERFUNCTIONS, far * LPUSERFUNCTIONS; + +typedef struct { +int ExtractOnlyNewer; +int SpaceToUnderscore; +int PromptToOverwrite; +int fQuiet; +int ncflag; +int ntflag; +int nvflag; +int nUflag; +int nzflag; +int ndflag; +int noflag; +int naflag; +int nZIflag; +int C_flag; +int fPrivilege; +LPSTR lpszZipFN; +LPSTR lpszExtractDir; +} DCL, far * LPDCL; + +#endif /* __structs_h */ diff --git a/Build/source/extra/unzip/windll/unzver.h b/Build/source/extra/unzip/windll/unzver.h new file mode 100644 index 00000000000..d216ec225fa --- /dev/null +++ b/Build/source/extra/unzip/windll/unzver.h @@ -0,0 +1,15 @@ +/* + Copyright (c) 1990-2000 Info-ZIP. All rights reserved. + + See the accompanying file LICENSE, version 2000-Apr-09 or later + (the contents of which are also included in unzip.h) for terms of use. + If, for some reason, these files are missing, the Info-ZIP license + also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html +*/ +#ifndef __unzver_h /* prevent multiple inclusions */ +#define __unzver_h + +#define UNZ_DLL_VERSION "5.41\0" +#define COMPANY_NAME "Info-ZIP\0" + +#endif /* __unzver_h */ diff --git a/Build/source/extra/unzip/windll/windll.c b/Build/source/extra/unzip/windll/windll.c new file mode 100644 index 00000000000..ced6d5d6b4b --- /dev/null +++ b/Build/source/extra/unzip/windll/windll.c @@ -0,0 +1,744 @@ +/* + Copyright (C) 1996 Mike White + Permission is granted to any individual or institution to use, copy, or + redistribute this software so long as all of the original files are included, + that it is not sold for profit, and that this copyright notice is retained. + +*/ +/* Windows Info-ZIP Unzip DLL module + * + * Author: Mike White + * + * Original: 1996 + * + * This module has the entry points for "unzipping" a zip file. + */ + +/*--------------------------------------------------------------------------- + + This file is the WINDLL replacement for the generic ``main program source + file'' unzip.c. + + See the general comments in the header part of unzip.c. + + Copyrights: see accompanying file "COPYING" in UnZip source distribution. + (This software is free but NOT IN THE PUBLIC DOMAIN. There + are some restrictions on commercial use.) + + ---------------------------------------------------------------------------*/ + +#include +#ifdef __RSXNT__ +# include "win32/rsxntwin.h" +#endif +#ifdef __BORLANDC__ +#include +#endif +#define UNZIP_INTERNAL +#include "unzip.h" +#include "crypt.h" +#include "version.h" +#include "windll.h" +#include "structs.h" +#include "consts.h" + +/* Added type casts to prevent potential "type mismatch" error messages. */ +#ifdef REENTRANT +# undef __G +# undef __G__ +# define __G (Uz_Globs *)pG +# define __G__ (Uz_Globs *)pG, +#endif + +HANDLE hwildZipFN; +HANDLE hInst; /* current instance */ +HANDLE hDCL; +int fNoPrinting = 0; +extern jmp_buf dll_error_return; + +/* For displaying status messages and error messages */ +static int UZ_EXP DllMessagePrint(zvoid *pG, uch *buf, ulg size, int flag); + +#if 0 /* currently unused */ +/* For displaying files extracted to the display window */ +int DllDisplayPrint(zvoid *pG, uch *buf, ulg size, int flag); +#endif /* never */ + +/* Callback function for status report and/or user interception */ +static int UZ_EXP Wiz_StatReportCB(zvoid *pG, int fnflag, ZCONST char *zfn, + ZCONST char *efn, ZCONST zvoid *details); + +/* Dummy sound function for those applications that don't use sound */ +static void WINAPI DummySound(void); + +#ifndef UNZIPLIB +/* DLL Entry Point */ + +#ifdef __BORLANDC__ +#pragma argsused +/* Borland seems to want DllEntryPoint instead of DllMain like MSVC */ +#define DllMain DllEntryPoint +#endif +#ifdef WIN32 +BOOL WINAPI DllMain( HINSTANCE hInstance, + DWORD dwReason, + LPVOID plvReserved) +#else +int FAR PASCAL LibMain( HINSTANCE hInstance, + WORD wDataSegment, + WORD wHeapSize, + LPSTR lpszCmdLine ) +#endif +{ +#ifndef WIN32 +/* The startup code for the DLL initializes the local heap(if there is one) + * with a call to LocalInit which locks the data segment. + */ + +if ( wHeapSize != 0 ) + { + UnlockData( 0 ); + } +hInst = hInstance; +return 1; /* Indicate that the DLL was initialized successfully. */ +#else +BOOL rc = TRUE; +switch( dwReason ) + { + case DLL_PROCESS_ATTACH: + // DLL is loaded. Do your initialization here. + // If cannot init, set rc to FALSE. + hInst = hInstance; + break; + + case DLL_PROCESS_DETACH: + // DLL is unloaded. Do your cleanup here. + break; + default: + break; + } +return rc; +#endif +} + +#ifdef __BORLANDC__ +#pragma argsused +#endif +int FAR PASCAL WEP ( int bSystemExit ) +{ +return 1; +} +#endif /* !UNZIPLIB */ + +/* DLL calls */ + +/* + ExtractOnlyNewer = true if you are to extract only newer + SpaceToUnderscore = true if convert space to underscore + PromptToOverwrite = true if prompt to overwrite is wanted + fQuiet = quiet flag. 1 = few messages, 2 = no messages, 0 = all messages + ncflag = write to stdout if true + ntflag = test zip file + nvflag = verbose listing + nUflag = "update" (extract only newer/new files) + nzflag = display zip file comment + ndflag = all args are files/dir to be extracted + noflag = overwrite all files + naflag = do end-of-line translation + nZIflag = get Zip Info if TRUE + C_flag = be case insensitive if TRUE + fPrivilege = restore ACL's if 1, use privileges if 2 + lpszZipFN = zip file name + lpszExtractDir = directory to extract to; NULL means: current directory +*/ + +BOOL WINAPI Wiz_SetOpts(pG, C) +zvoid *pG; +LPDCL C; +{ + uO.qflag = C->fQuiet; /* Quiet flag */ + G.pfnames = (char **)&fnames[0]; /* assign default file name vector */ + G.pxnames = (char **)&fnames[1]; + + uO.jflag = !C->ndflag; + uO.cflag = C->ncflag; + uO.overwrite_all = C->noflag; + uO.tflag = C->ntflag ; + uO.vflag = C->nvflag; + uO.zflag = C->nzflag; + uO.uflag = C->nUflag; + uO.aflag = C->naflag; + uO.C_flag = C->C_flag; + uO.uflag = C->ExtractOnlyNewer; + G.prompt_always = C->PromptToOverwrite; +#ifdef WIN32 + uO.X_flag = C->fPrivilege; +#endif + uO.overwrite_none = !uO.overwrite_all; + uO.sflag = C->SpaceToUnderscore; /* Translate spaces to underscores? */ + if (C->nZIflag) + { + uO.zipinfo_mode = TRUE; + uO.hflag = TRUE; + uO.lflag = 10; + uO.qflag = 2; + } + else + { + uO.zipinfo_mode = FALSE; + } + + G.extract_flag = (!uO.zipinfo_mode && + !uO.cflag && !uO.tflag && !uO.vflag && !uO.zflag +#ifdef TIMESTAMP + && !uO.T_flag +#endif + ); + + if (C->lpszExtractDir != NULL && G.extract_flag) + { +#ifndef CRTL_CP_IS_ISO + char *pExDirRoot = (char *)malloc(strlen(C->lpszExtractDir)+1); + + if (pExDirRoot == NULL) + return FALSE; + ISO_TO_INTERN(C->lpszExtractDir, pExDirRoot); +#else +# define pExDirRoot C->lpszExtractDir +#endif + uO.exdir = pExDirRoot; + } + else + { + uO.exdir = (char *)NULL; + } + +/* G.wildzipfn needs to be initialized so that do_wild does not wind + up clearing out the zip file name when it returns in process.c +*/ + hwildZipFN = GlobalAlloc(GPTR, FILNAMSIZ); + if (hwildZipFN == (HGLOBAL) NULL) + return FALSE; + + G.wildzipfn = GlobalLock(hwildZipFN); + lstrcpy(G.wildzipfn, C->lpszZipFN); + _ISO_INTERN(G.wildzipfn); + + return TRUE; /* set up was OK */ +} + +void FreeDllMem(__GPRO) +{ + if (G.wildzipfn) { + GlobalUnlock(hwildZipFN); + G.wildzipfn = NULL; + } + if (hwildZipFN) + hwildZipFN = GlobalFree(hwildZipFN); + + uO.zipinfo_mode = FALSE; +} + +int WINAPI Wiz_SingleEntryUnzip(int ifnc, char **ifnv, int xfnc, char **xfnv, + LPDCL C, LPUSERFUNCTIONS lpUserFunc) +{ +int retcode; +CONSTRUCTGLOBALS(); + +if (!Wiz_Init((zvoid *)&G, lpUserFunc)) + { + DESTROYGLOBALS(); + return PK_BADERR; + } + +if (C->lpszZipFN == NULL) /* Something has screwed up, we don't have a filename */ + { + DESTROYGLOBALS(); + return PK_NOZIP; + } + +Wiz_SetOpts((zvoid *)&G, C); + +#ifdef SFX +G.zipfn = C->lpszZipFN; +G.argv0 = C->lpszZipFN; +#endif + +/* Here is the actual call to "unzip" the files (or whatever else you + * are doing.) + */ +retcode = Wiz_Unzip((zvoid *)&G, ifnc, ifnv, xfnc, xfnv); + +DESTROYGLOBALS(); +return retcode; +} + + +BOOL WINAPI Wiz_Init(pG, lpUserFunc) +zvoid *pG; +LPUSERFUNCTIONS lpUserFunc; +{ +G.message = DllMessagePrint; +G.statreportcb = Wiz_StatReportCB; +if (lpUserFunc->sound == NULL) + lpUserFunc->sound = DummySound; +G.lpUserFunctions = lpUserFunc; + +if (!G.lpUserFunctions->print || + !G.lpUserFunctions->sound || + !G.lpUserFunctions->replace) + return FALSE; + +return TRUE; +} + +int WINAPI Wiz_Unzip(pG, ifnc, ifnv, xfnc, xfnv) +zvoid *pG; +int ifnc; +char **ifnv; +int xfnc; +char **xfnv; +{ +int retcode, f_cnt; +#ifndef CRTL_CP_IS_ISO +char **intern_ifv = NULL, **intern_xfv = NULL; +#endif + +if (ifnv == (char **)NULL && ifnc != 0) + ifnc = 0; +else + for (f_cnt = 0; f_cnt < ifnc; f_cnt++) + if (ifnv[f_cnt] == (char *)NULL) { + ifnc = f_cnt; + break; + } +if (xfnv == (char **)NULL && xfnc != 0) + xfnc = 0; +else + for (f_cnt = 0; f_cnt < xfnc; f_cnt++) + if (xfnv[f_cnt] == (char *)NULL) { + xfnc = f_cnt; + break; + } + +G.process_all_files = (ifnc == 0 && xfnc == 0); /* for speed */ +G.filespecs = ifnc; +G.xfilespecs = xfnc; + +if (ifnc > 0) { +#ifdef CRTL_CP_IS_ISO + G.pfnames = ifnv; +#else /* !CRTL_CP_IS_ISO */ + unsigned bufsize = 0; + + intern_ifv = (char **)malloc((ifnc+1)*sizeof(char **)); + if (intern_ifv == (char **)NULL) + { + FreeDllMem(__G); + return PK_BADERR; + } + + for (f_cnt = ifnc; --f_cnt >= 0;) + bufsize += strlen(ifnv[f_cnt]) + 1; + intern_ifv[0] = (char *)malloc(bufsize); + if (intern_ifv[0] == (char *)NULL) + { + free(intern_ifv); + FreeDllMem(__G); + return PK_BADERR; + } + + for (f_cnt = 0; ; f_cnt++) + { + ISO_TO_INTERN(ifnv[f_cnt], intern_ifv[f_cnt]); + if ((f_cnt+1) >= ifnc) + break; + intern_ifv[f_cnt+1] = intern_ifv[f_cnt] + + (strlen(intern_ifv[f_cnt]) + 1); + } + intern_ifv[ifnc] = (char *)NULL; + G.pfnames = intern_ifv; +#endif /* ?CRTL_CP_IS_ISO */ + } + +if (xfnc > 0) { +#ifdef CRTL_CP_IS_ISO + G.pxnames = xfnv; +#else /* !CRTL_CP_IS_ISO */ + unsigned bufsize = 0; + + intern_xfv = (char **)malloc((xfnc+1)*sizeof(char **)); + if (intern_xfv == (char **)NULL) + { + if (ifnc > 0) + { + free(intern_ifv[0]); + free(intern_ifv); + } + FreeDllMem(__G); + return PK_BADERR; + } + + for (f_cnt = xfnc; --f_cnt >= 0;) + bufsize += strlen(xfnv[f_cnt]) + 1; + intern_xfv[0] = (char *)malloc(bufsize); + if (intern_xfv[0] == (char *)NULL) + { + free(intern_xfv); + if (ifnc > 0) + { + free(intern_ifv[0]); + free(intern_ifv); + } + FreeDllMem(__G); + return PK_BADERR; + } + + for (f_cnt = 0; ; f_cnt++) + { + ISO_TO_INTERN(xfnv[f_cnt], intern_xfv[f_cnt]); + if ((f_cnt+1) >= xfnc) + break; + intern_xfv[f_cnt+1] = intern_xfv[f_cnt] + + (strlen(intern_xfv[f_cnt]) + 1); + } + intern_xfv[xfnc] = (char *)NULL; + G.pxnames = intern_xfv; +#endif /* ?CRTL_CP_IS_ISO */ + } + +/*--------------------------------------------------------------------------- + Okey dokey, we have everything we need to get started. Let's roll. + ---------------------------------------------------------------------------*/ + +retcode = setjmp(dll_error_return); +if (retcode) + { +#ifndef CRTL_CP_IS_ISO + if (xfnc > 0) + { + free(intern_xfv[0]); + free(intern_xfv); + } + if (ifnc > 0) + { + free(intern_ifv[0]); + free(intern_ifv); + } +#endif + FreeDllMem(__G); + return PK_BADERR; + } + +retcode = process_zipfiles(__G); +#ifndef CRTL_CP_IS_ISO +if (xfnc > 0) + { + free(intern_xfv[0]); + free(intern_xfv); + } +if (ifnc > 0) + { + free(intern_ifv[0]); + free(intern_ifv); + } +#endif +FreeDllMem(__G); +return retcode; +} + + +int win_fprintf(zvoid *pG, FILE *file, unsigned int size, char far *buffer) +{ +if ((file != stderr) && (file != stdout)) + { + return write(fileno(file),(char far *)(buffer),size); + } +if (!fNoPrinting) + return G.lpUserFunctions->print((LPSTR)buffer, size); +return (int)size; +} + +/********************************** + * Function DllMessagePrint() * + * * + * Send messages to status window * + **********************************/ +#ifdef __BORLANDC__ +#pragma argsused +#endif +static int UZ_EXP DllMessagePrint(pG, buf, size, flag) + zvoid *pG; /* globals struct: always passed */ + uch *buf; /* preformatted string to be printed */ + ulg size; /* length of string (may include nulls) */ + int flag; /* flag bits */ +{ +if (!fNoPrinting) + return G.lpUserFunctions->print((LPSTR)buf, size); +else + return (int)size; +} + +#if 0 /* currently unused */ +/******************************** + * Function DllDisplayPrint() * + * * + * Send files to display window * + ********************************/ +#ifdef __BORLANDC__ +#pragma argsused +#endif +int DllDisplayPrint(pG, buf, size, flag) + zvoid *pG; /* globals struct: always passed */ + uch *buf; /* preformatted string to be printed */ + ulg size; /* length of string (may include nulls) */ + int flag; /* flag bits */ +{ +return (!fNoPrinting ? G.lpUserFunctions->print((LPSTR)buf, size) : (int)size); +} +#endif /* never */ + + +/********************************** + * Function UzpPassword() * + * * + * Prompt for decryption password * + **********************************/ +#ifdef __BORLANDC__ +#pragma argsused +#endif +int UZ_EXP UzpPassword(pG, rcnt, pwbuf, size, zfn, efn) + zvoid *pG; /* globals struct: always passed */ + int *rcnt; /* retry counter */ + char *pwbuf; /* buffer for password */ + int size; /* size of password buffer */ + ZCONST char *zfn; /* name of zip archiv */ + ZCONST char *efn; /* name of archiv entry being processed */ +{ +#if CRYPT + LPSTR m; + + if (*rcnt == 0) { + *rcnt = 2; + m = "Enter password for: "; + } else { + (*rcnt)--; + m = "Password incorrect--reenter: "; + } + + return (*G.lpUserFunctions->password)((LPSTR)pwbuf, size, m, (LPSTR)efn); +#else /* !CRYPT */ + return IZ_PW_ERROR; /* internal error, function should never get called */ +#endif /* ?CRYPT */ +} /* end function UzpPassword() */ + +/* Turn off all messages to the calling application */ +void WINAPI Wiz_NoPrinting(int f) +{ +fNoPrinting = f; +} + +/* Dummy sound function for those applications that don't use sound */ +static void WINAPI DummySound(void) +{ +} + +/* Interface between WINDLL specific service callback functions and the + generic DLL's "status report & user interception" callback */ +#ifdef __BORLANDC__ +#pragma argsused +#endif +static int WINAPI Wiz_StatReportCB(zvoid *pG, int fnflag, ZCONST char *zfn, + ZCONST char *efn, ZCONST zvoid *details) +{ + int rval = UZ_ST_CONTINUE; + + switch (fnflag) { + case UZ_ST_START_EXTRACT: + if (G.lpUserFunctions->sound != NULL) + (*G.lpUserFunctions->sound)(); + break; + case UZ_ST_FINISH_MEMBER: + if ((G.lpUserFunctions->ServCallBk != NULL) && + (*G.lpUserFunctions->ServCallBk)(efn, *((unsigned long *)details))) + rval = UZ_ST_BREAK; + break; + case UZ_ST_IN_PROGRESS: + break; + default: + break; + } + return rval; +} + + +#ifndef SFX +#ifndef __16BIT__ + +int WINAPI Wiz_UnzipToMemory(LPSTR zip, LPSTR file, + LPUSERFUNCTIONS lpUserFunctions, UzpBuffer *retstr) +{ + int r; +#ifndef CRTL_CP_IS_ISO + char *intern_zip, *intern_file; +#endif + + CONSTRUCTGLOBALS(); +#ifndef CRTL_CP_IS_ISO + intern_zip = (char *)malloc(strlen(zip)+1); + if (intern_zip == NULL) { + DESTROYGLOBALS() + return PK_MEM; + } + intern_file = (char *)malloc(strlen(file)+1); + if (intern_file == NULL) { + DESTROYGLOBALS() + free(intern_zip); + return PK_MEM; + } + ISO_TO_INTERN(zip, intern_zip); + ISO_TO_INTERN(file, intern_file); +# define zip intern_zip +# define file intern_file +#endif + if (!Wiz_Init((zvoid *)&G, lpUserFunctions)) { + DESTROYGLOBALS(); + return PK_BADERR; + } + G.redirect_data = 1; + + r = (unzipToMemory(__G__ zip, file, retstr) == PK_COOL); + + DESTROYGLOBALS() +#ifndef CRTL_CP_IS_ISO +# undef file +# undef zip + free(intern_file); + free(intern_zip); +#endif + if (!r && retstr->strlength) { + free(retstr->strptr); + retstr->strptr = NULL; + } + return r; +} + + + + +/* Purpose: Determine if file in archive contains the string szSearch + + Parameters: archive = archive name + file = file contained in the archive. This cannot be + a wild card to be meaningful + pattern = string to search for + cmd = 0 - case-insensitive search + 1 - case-sensitve search + 2 - case-insensitive, whole words only + 3 - case-sensitive, whole words only + SkipBin = if true, skip any files that have control + characters other than CR, LF, or tab in the first + 100 characters. + + Returns: TRUE if a match is found + FALSE if no match is found + -1 on error + + Comments: This does not pretend to be as useful as the standard + Unix grep, which returns the strings associated with a + particular pattern, nor does it search past the first + matching occurrence of the pattern. + */ + +int WINAPI Wiz_Grep(LPSTR archive, LPSTR file, LPSTR pattern, int cmd, + int SkipBin, LPUSERFUNCTIONS lpUserFunctions) +{ + int retcode = FALSE, compare; + ulg i, j, patternLen, buflen; + char * sz, *p; + UzpBuffer retstr; + + /* Turn off any windows printing functions, as they may not have been + * identified yet. There is no requirement that we initialize the + * dll with printing stuff for this. */ + Wiz_NoPrinting(TRUE); + + if (!Wiz_UnzipToMemory(archive, file, lpUserFunctions, &retstr)) { + Wiz_NoPrinting(FALSE); + return -1; /* not enough memory, file not found, or other error */ + } + + if (SkipBin) { + if (retstr.strlength < 100) + buflen = retstr.strlength; + else + buflen = 100; + for (i = 0; i < buflen; i++) { + if (iscntrl(retstr.strptr[i])) { + if ((retstr.strptr[i] != 0x0A) && + (retstr.strptr[i] != 0x0D) && + (retstr.strptr[i] != 0x09)) + { + /* OK, we now think we have a binary file of some sort */ + free(retstr.strptr); + Wiz_NoPrinting(FALSE); + return FALSE; + } + } + } + } + + patternLen = strlen(pattern); + + if (retstr.strlength < patternLen) { + free(retstr.strptr); + Wiz_NoPrinting(FALSE); + return FALSE; + } + + sz = malloc(patternLen + 3); /* add two in case doing whole words only */ + if (cmd > 1) { + strcpy(sz, " "); + strcat(sz, pattern); + strcat(sz, " "); + } else + strcpy(sz, pattern); + + if ((cmd == 0) || (cmd == 2)) { + for (i = 0; i < strlen(sz); i++) + sz[i] = toupper(sz[i]); + for (i = 0; i < retstr.strlength; i++) + retstr.strptr[i] = toupper(retstr.strptr[i]); + } + + for (i = 0; i < (retstr.strlength - patternLen); i++) { + p = &retstr.strptr[i]; + compare = TRUE; + for (j = 0; j < patternLen; j++) { + /* We cannot do strncmp here, as we may be dealing with a + * "binary" file, such as a word processing file, or perhaps + * even a true executable of some sort. */ + if (p[j] != sz[j]) { + compare = FALSE; + break; + } + } + if (compare == TRUE) { + retcode = TRUE; + break; + } + } + + free(sz); + free(retstr.strptr); + Wiz_NoPrinting(FALSE); /* Turn printing back on */ + return retcode; +} +#endif /* !__16BIT__ */ + +int WINAPI Wiz_Validate(LPSTR archive, int AllCodes) +{ + return UzpValidate((char *)archive, AllCodes); +} + +#endif /* !SFX */ diff --git a/Build/source/extra/unzip/windll/windll.h b/Build/source/extra/unzip/windll/windll.h new file mode 100644 index 00000000000..a32623b5960 --- /dev/null +++ b/Build/source/extra/unzip/windll/windll.h @@ -0,0 +1,46 @@ +#ifndef __windll_h /* prevent multiple inclusions */ +#define __windll_h + +#include +#include /* required for all Windows applications */ +#include +#include +#if (!defined(__RSXNT__) && !defined(__MINGW32__)) +# include +#endif +#define UNZIP_INTERNAL +#include "unzip.h" +#include "structs.h" +#include "decs.h" + +#ifndef MSWIN +# define MSWIN +#endif + +/* Allow compilation under Borland C++ also */ +#ifndef __based +# define __based(A) +#endif + +#ifndef PATH_MAX +# define PATH_MAX 260 /* max total file or directory name path */ +#endif + +#define IDM_REPLACE_NO 100 +#define IDM_REPLACE_TEXT 101 +#define IDM_REPLACE_YES 102 +#define IDM_REPLACE_ALL 103 +#define IDM_REPLACE_NONE 104 +#define IDM_REPLACE_RENAME 105 +#define IDM_REPLACE_HELP 106 + +extern jmp_buf dll_error_return; + +extern HANDLE hInst; /* current instance */ + +#ifdef UNZIP_INTERNAL +void FreeDllMem(__GPRO); +int win_fprintf(zvoid *pG, FILE *file, unsigned int, char far *); +#endif + +#endif /* __windll_h */ diff --git a/Build/source/extra/unzip/zip.h b/Build/source/extra/unzip/zip.h new file mode 100644 index 00000000000..5c079467f7a --- /dev/null +++ b/Build/source/extra/unzip/zip.h @@ -0,0 +1,15 @@ +/* This is a dummy zip.h to allow the source files shared with Zip (crypt.c, + crc32.c, crctab.c, ttyio.c) to compile for UnZip. */ + +#ifndef __zip_h /* don't include more than once */ +#define __zip_h + +#define UNZIP_INTERNAL +#include "unzip.h" + +#define local static + +#define ZE_MEM PK_MEM +#define ziperr(c, h) return + +#endif /* !__zip_h */ diff --git a/Build/source/extra/unzip/zipinfo.c b/Build/source/extra/unzip/zipinfo.c new file mode 100644 index 00000000000..c244c1e92f5 --- /dev/null +++ b/Build/source/extra/unzip/zipinfo.c @@ -0,0 +1,1912 @@ +/*--------------------------------------------------------------------------- + + zipinfo.c Greg Roelofs et al. + + This file contains all of the ZipInfo-specific listing routines for UnZip. + + Contains: zi_opts() + zi_end_central() + zipinfo() + zi_long() + zi_short() + zi_time() + + ---------------------------------------------------------------------------*/ + + +#define UNZIP_INTERNAL +#include "unzip.h" + + +#ifndef NO_ZIPINFO /* strings use up too much space in small-memory systems */ + +/* Define OS-specific attributes for use on ALL platforms--the S_xxxx + * versions of these are defined differently (or not defined) by different + * compilers and operating systems. */ + +#define UNX_IFMT 0170000 /* Unix file type mask */ +#define UNX_IFDIR 0040000 /* Unix directory */ +#define UNX_IFREG 0100000 /* Unix regular file */ +#define UNX_IFSOCK 0140000 /* Unix socket (BSD, not SysV or Amiga) */ +#define UNX_IFLNK 0120000 /* Unix symbolic link (not SysV, Amiga) */ +#define UNX_IFBLK 0060000 /* Unix block special (not Amiga) */ +#define UNX_IFCHR 0020000 /* Unix character special (not Amiga) */ +#define UNX_IFIFO 0010000 /* Unix fifo (BCC, not MSC or Amiga) */ +#define UNX_ISUID 04000 /* Unix set user id on execution */ +#define UNX_ISGID 02000 /* Unix set group id on execution */ +#define UNX_ISVTX 01000 /* Unix directory permissions control */ +#define UNX_ENFMT UNX_ISGID /* Unix record locking enforcement flag */ +#define UNX_IRWXU 00700 /* Unix read, write, execute: owner */ +#define UNX_IRUSR 00400 /* Unix read permission: owner */ +#define UNX_IWUSR 00200 /* Unix write permission: owner */ +#define UNX_IXUSR 00100 /* Unix execute permission: owner */ +#define UNX_IRWXG 00070 /* Unix read, write, execute: group */ +#define UNX_IRGRP 00040 /* Unix read permission: group */ +#define UNX_IWGRP 00020 /* Unix write permission: group */ +#define UNX_IXGRP 00010 /* Unix execute permission: group */ +#define UNX_IRWXO 00007 /* Unix read, write, execute: other */ +#define UNX_IROTH 00004 /* Unix read permission: other */ +#define UNX_IWOTH 00002 /* Unix write permission: other */ +#define UNX_IXOTH 00001 /* Unix execute permission: other */ + +#define VMS_IRUSR UNX_IRUSR /* VMS read/owner */ +#define VMS_IWUSR UNX_IWUSR /* VMS write/owner */ +#define VMS_IXUSR UNX_IXUSR /* VMS execute/owner */ +#define VMS_IRGRP UNX_IRGRP /* VMS read/group */ +#define VMS_IWGRP UNX_IWGRP /* VMS write/group */ +#define VMS_IXGRP UNX_IXGRP /* VMS execute/group */ +#define VMS_IROTH UNX_IROTH /* VMS read/other */ +#define VMS_IWOTH UNX_IWOTH /* VMS write/other */ +#define VMS_IXOTH UNX_IXOTH /* VMS execute/other */ + +#define AMI_IFMT 06000 /* Amiga file type mask */ +#define AMI_IFDIR 04000 /* Amiga directory */ +#define AMI_IFREG 02000 /* Amiga regular file */ +#define AMI_IHIDDEN 00200 /* to be supported in AmigaDOS 3.x */ +#define AMI_ISCRIPT 00100 /* executable script (text command file) */ +#define AMI_IPURE 00040 /* allow loading into resident memory */ +#define AMI_IARCHIVE 00020 /* not modified since bit was last set */ +#define AMI_IREAD 00010 /* can be opened for reading */ +#define AMI_IWRITE 00004 /* can be opened for writing */ +#define AMI_IEXECUTE 00002 /* executable image, a loadable runfile */ +#define AMI_IDELETE 00001 /* can be deleted */ + +#define LFLAG 3 /* short "ls -l" type listing */ + +static int zi_long OF((__GPRO__ ulg *pEndprev)); +static int zi_short OF((__GPRO)); +static void zi_showMacTypeCreator + OF((__GPRO__ uch *ebfield)); +static char *zi_time OF((__GPRO__ ZCONST ulg *datetimez, + ZCONST time_t *modtimez, char *d_t_str)); + + +/**********************************************/ +/* Strings used in zipinfo.c (ZipInfo half) */ +/**********************************************/ + +static char nullStr[] = ""; + +static ZCONST char Far LongHeader[] = "Archive: %s %ld bytes %d file%s\n"; +static ZCONST char Far ShortHeader[] = "Archive: %s %ld %d\n"; +static ZCONST char Far EndCentDirRec[] = "\nEnd-of-central-directory record:\n"; +static ZCONST char Far LineSeparators[] = "-------------------------------\n\n"; +static ZCONST char Far ActOffsetCentDir[] = "\ + Actual offset of end-of-central-dir record: %9ld (%.8lXh)\n\ + Expected offset of end-of-central-dir record: %9ld (%.8lXh)\n\ + (based on the length of the central directory and its expected offset)\n\n"; +static ZCONST char Far SinglePartArchive1[] = "\ + This zipfile constitutes the sole disk of a single-part archive; its\n\ + central directory contains %u %s. The central directory is %lu\n\ + (%.8lXh) bytes long, and its (expected) offset in bytes from the\n"; +static ZCONST char Far SinglePartArchive2[] = "\ + beginning of the zipfile is %lu (%.8lXh).\n\n"; +static ZCONST char Far MultiPartArchive1[] = "\ + This zipfile constitutes disk %u of a multi-part archive. The central\n\ + directory starts on disk %u; %u of its entries %s contained within\n"; +static ZCONST char Far MultiPartArchive2[] = "\ + this zipfile, out of a total of %u %s. The entire central\n\ + directory is %lu (%.8lXh) bytes long, and its offset in bytes from\n"; +static ZCONST char Far MultiPartArchive3[] = "\ + the beginning of the zipfile in which it begins is %lu (%.8lXh).\n\n"; +static ZCONST char Far NoZipfileComment[] = " There is no zipfile comment.\n"; +static ZCONST char Far ZipfileCommentDesc[] = + " The zipfile comment is %u bytes long and contains the following text:\n\n"; +static ZCONST char Far ZipfileCommBegin[] = + "======================== zipfile comment begins ==========================\n"; +static ZCONST char Far ZipfileCommEnd[] = + "========================= zipfile comment ends ===========================\n"; +static ZCONST char Far ZipfileCommTrunc2[] = "\n The zipfile comment is truncated.\n"; +static ZCONST char Far ZipfileCommTruncMsg[] = + "\ncaution: zipfile comment truncated\n"; + +static ZCONST char Far CentralDirEntry[] = + "\nCentral directory entry #%d:\n---------------------------\n\n"; +static ZCONST char Far ZipfileStats[] = + "%d file%s, %lu bytes uncompressed, %lu bytes compressed: %s%d.%d%%\n"; + +/* zi_long() strings */ +static ZCONST char Far OS_FAT[] = "MS-DOS, OS/2 or NT FAT"; +static ZCONST char Far OS_Amiga[] = "Amiga"; +static ZCONST char Far OS_VMS[] = "VMS"; +static ZCONST char Far OS_Unix[] = "Unix"; +static ZCONST char Far OS_VMCMS[] = "VM/CMS"; +static ZCONST char Far OS_AtariST[] = "Atari ST"; +static ZCONST char Far OS_HPFS[] = "OS/2 or NT HPFS"; +static ZCONST char Far OS_Macintosh[] = "Macintosh HFS"; +static ZCONST char Far OS_ZSystem[] = "Z-System"; +static ZCONST char Far OS_CPM[] = "CP/M"; +static ZCONST char Far OS_TOPS20[] = "TOPS-20"; +static ZCONST char Far OS_NTFS[] = "NTFS"; +static ZCONST char Far OS_QDOS[] = "SMS/QDOS"; +static ZCONST char Far OS_Acorn[] = "Acorn RISC OS"; +static ZCONST char Far OS_MVS[] = "MVS"; +static ZCONST char Far OS_VFAT[] = "Win32 VFAT"; +static ZCONST char Far OS_BeOS[] = "BeOS"; +static ZCONST char Far OS_Tandem[] = "Tandem NSK"; + +static ZCONST char Far MthdNone[] = "none (stored)"; +static ZCONST char Far MthdShrunk[] = "shrunk"; +static ZCONST char Far MthdRedF1[] = "reduced (factor 1)"; +static ZCONST char Far MthdRedF2[] = "reduced (factor 2)"; +static ZCONST char Far MthdRedF3[] = "reduced (factor 3)"; +static ZCONST char Far MthdRedF4[] = "reduced (factor 4)"; +static ZCONST char Far MthdImplode[] = "imploded"; +static ZCONST char Far MthdToken[] = "tokenized"; +static ZCONST char Far MthdDeflate[] = "deflated"; +static ZCONST char Far MthdEnDeflate[] = "deflated (enhanced)"; +static ZCONST char Far MthdDCLImplode[] = "imploded (PK DCL)"; + +static ZCONST char Far DeflNorm[] = "normal"; +static ZCONST char Far DeflMax[] = "maximum"; +static ZCONST char Far DeflFast[] = "fast"; +static ZCONST char Far DeflSFast[] = "superfast"; + +static ZCONST char Far ExtraBytesPreceding[] = + " There are an extra %ld bytes preceding this file.\n\n"; + +static ZCONST char Far UnknownNo[] = "unknown (%d)"; + +static ZCONST char Far LocalHeaderOffset[] = + "\n offset of local header from start of archive: %lu (%.8lXh) bytes\n"; +static ZCONST char Far HostOS[] = + " file system or operating system of origin: %s\n"; +static ZCONST char Far EncodeSWVer[] = + " version of encoding software: %d.%d\n"; +static ZCONST char Far MinOSCompReq[] = + " minimum file system compatibility required: %s\n"; +static ZCONST char Far MinSWVerReq[] = + " minimum software version required to extract: %d.%d\n"; +static ZCONST char Far CompressMethod[] = + " compression method: %s\n"; +static ZCONST char Far SlideWindowSizeImplode[] = + " size of sliding dictionary (implosion): %cK\n"; +static ZCONST char Far ShannonFanoTrees[] = + " number of Shannon-Fano trees (implosion): %c\n"; +static ZCONST char Far CompressSubtype[] = + " compression sub-type (deflation): %s\n"; +static ZCONST char Far FileSecurity[] = + " file security status: %sencrypted\n"; +static ZCONST char Far ExtendedLocalHdr[] = + " extended local header: %s\n"; +static ZCONST char Far FileModDate[] = + " file last modified on (DOS date/time): %s\n"; +#ifdef USE_EF_UT_TIME + static ZCONST char Far UT_FileModDate[] = + " file last modified on (UT extra field modtime): %s %s\n"; + static ZCONST char Far LocalTime[] = "local"; +#ifndef NO_GMTIME + static ZCONST char Far GMTime[] = "UTC"; +#endif +#endif /* USE_EF_UT_TIME */ +static ZCONST char Far CRC32Value[] = + " 32-bit CRC value (hex): %.8lx\n"; +static ZCONST char Far CompressedFileSize[] = + " compressed size: %lu bytes\n"; +static ZCONST char Far UncompressedFileSize[] = + " uncompressed size: %lu bytes\n"; +static ZCONST char Far FilenameLength[] = + " length of filename: %u characters\n"; +static ZCONST char Far ExtraFieldLength[] = + " length of extra field: %u bytes\n"; +static ZCONST char Far FileCommentLength[] = + " length of file comment: %u characters\n"; +static ZCONST char Far FileDiskNum[] = + " disk number on which file begins: disk %u\n"; +static ZCONST char Far ApparentFileType[] = + " apparent file type: %s\n"; +static ZCONST char Far VMSFileAttributes[] = + " VMS file attributes (%06o octal): %s\n"; +static ZCONST char Far AmigaFileAttributes[] = + " Amiga file attributes (%06o octal): %s\n"; +static ZCONST char Far UnixFileAttributes[] = + " Unix file attributes (%06o octal): %s\n"; +static ZCONST char Far NonMSDOSFileAttributes[] = + " non-MSDOS external file attributes: %06lX hex\n"; +static ZCONST char Far MSDOSFileAttributes[] = + " MS-DOS file attributes (%02X hex): none\n"; +static ZCONST char Far MSDOSFileAttributesRO[] = + " MS-DOS file attributes (%02X hex): read-only\n"; +static ZCONST char Far MSDOSFileAttributesAlpha[] = + " MS-DOS file attributes (%02X hex): %s%s%s%s%s%s\n"; + + +static ZCONST char Far ExtraFieldTrunc[] = "\n\ + error: EF data block (type 0x%04x) size %u exceeds remaining extra field\n\ + space %u; block length has been truncated.\n"; +static ZCONST char Far ExtraFields[] = "\n\ + The central-directory extra field contains:"; +static ZCONST char Far ExtraFieldType[] = "\n\ + - A subfield with ID 0x%04x (%s) and %u data bytes"; +static ZCONST char Far efAV[] = "PKWARE AV"; +static ZCONST char Far efOS2[] = "OS/2"; +static ZCONST char Far efPKVMS[] = "PKWARE VMS"; +static ZCONST char Far efPKWin32[] = "PKWARE Win32"; +static ZCONST char Far efPKUnix[] = "PKWARE Unix"; +static ZCONST char Far efIZVMS[] = "Info-ZIP VMS"; +static ZCONST char Far efIZUnix[] = "old Info-ZIP Unix/OS2/NT"; +static ZCONST char Far efIZUnix2[] = "Unix UID/GID"; +static ZCONST char Far efTime[] = "universal time"; +static ZCONST char Far efJLMac[] = "old Info-ZIP Macintosh"; +static ZCONST char Far efMac3[] = "new Info-ZIP Macintosh"; +static ZCONST char Far efZipIt[] = "ZipIt Macintosh"; +static ZCONST char Far efZipIt2[] = "ZipIt Macintosh (short)"; +static ZCONST char Far efVMCMS[] = "VM/CMS"; +static ZCONST char Far efMVS[] = "MVS"; +static ZCONST char Far efACL[] = "OS/2 ACL"; +static ZCONST char Far efNTSD[] = "Security Descriptor"; +static ZCONST char Far efBeOS[] = "BeOS"; +static ZCONST char Far efQDOS[] = "SMS/QDOS"; +static ZCONST char Far efAOSVS[] = "AOS/VS"; +static ZCONST char Far efSpark[] = "Acorn SparkFS"; +static ZCONST char Far efMD5[] = "Fred Kantor MD5"; +static ZCONST char Far efASiUnix[] = "ASi Unix"; +static ZCONST char Far efUnknown[] = "unknown"; + +static ZCONST char Far OS2EAs[] = ".\n\ + The local extra field has %lu bytes of OS/2 extended attributes.\n\ + (May not match OS/2 \"dir\" amount due to storage method)"; +static ZCONST char Far izVMSdata[] = ". The extra\n\ + field is %s and has %lu bytes of VMS %s information%s"; +static ZCONST char Far izVMSstored[] = "stored"; +static ZCONST char Far izVMSrleenc[] = "run-length encoded"; +static ZCONST char Far izVMSdeflat[] = "deflated"; +static ZCONST char Far izVMScunknw[] = "compressed(?)"; +static ZCONST char Far *izVMScomp[4] = + {izVMSstored, izVMSrleenc, izVMSdeflat, izVMScunknw}; +static ZCONST char Far ACLdata[] = ".\n\ + The local extra field has %lu bytes of access control list information"; +static ZCONST char Far NTSDData[] = ".\n\ + The local extra field has %lu bytes of NT security descriptor data"; +static ZCONST char Far UTdata[] = ".\n\ + The local extra field has UTC/GMT %s time%s"; +static ZCONST char Far UTmodification[] = "modification"; +static ZCONST char Far UTaccess[] = "access"; +static ZCONST char Far UTcreation[] = "creation"; +static ZCONST char Far ZipItFname[] = ".\n\ + The Mac long filename is %s.\n"; +static ZCONST char Far Mac3data[] = ".\n\ + The local extra field has %lu bytes of %scompressed Macintosh\n\ + finder attributes"; + /* MacOSdata[] is used by EF_MAC3, EF_ZIPIT, EF_ZIPIT2 and EF_JLEE e. f. */ +static ZCONST char Far MacOSdata[] = ".\n\ + The associated file has type code `%c%c%c%c' and creator code `%c%c%c%c'"; +static ZCONST char Far MacOSdata1[] = ".\n\ + The associated file has type code `0x%lx' and creator code `0x%lx'"; +static ZCONST char Far MacOSJLEEflags[] = "\n File is marked as %s"; +static ZCONST char Far MacOS_RF[] = "Resource-fork"; +static ZCONST char Far MacOS_DF[] = "Data-fork"; +static ZCONST char Far MacOSMAC3flags[] = ".\n\ + File is marked as %s, File Dates are in %d Bit"; +static ZCONST char Far BeOSdata[] = ".\n\ + The local extra field has %lu bytes of %scompressed BeOS file attributes"; + /* The associated file has type code `%c%c%c%c' and creator code `%c%c%c%c'" */ +static ZCONST char Far QDOSdata[] = ".\n\ + The QDOS extra field subtype is `%c%c%c%c'"; +static ZCONST char Far AOSVSdata[] = ".\n\ + The AOS/VS extra field revision is %d.%d"; +static ZCONST char Far MD5data[] = ".\n\ + The 128-bit MD5 signature is %s"; +#ifdef CMS_MVS + static ZCONST char Far VmMvsExtraField[] = ".\n\ + The stored file open mode (FLDATA TYPE) is \"%s\""; + static ZCONST char Far VmMvsInvalid[] = "[invalid]"; +#endif /* CMS_MVS */ + +static ZCONST char Far First20[] = ". The first\n 20 are: "; +static ZCONST char Far ColonIndent[] = ":\n "; +static ZCONST char Far efFormat[] = " %02x"; + +static ZCONST char Far lExtraFieldType[] = "\n\ + There %s a local extra field with ID 0x%04x (%s) and\n\ + %u data bytes (%s).\n"; +static ZCONST char Far efIZuid[] = + "GMT modification/access times and Unix UID/GID"; +static ZCONST char Far efIZnouid[] = "GMT modification/access times only"; + + +static ZCONST char Far NoFileComment[] = "\n There is no file comment.\n"; +static ZCONST char Far FileCommBegin[] = "\n\ +------------------------- file comment begins ----------------------------\n"; +static ZCONST char Far FileCommEnd[] = "\ +-------------------------- file comment ends -----------------------------\n"; + +/* zi_time() strings */ +static ZCONST char Far BogusFmt[] = "%03d"; +static ZCONST char Far DMYHMTime[] = "%2u-%s-%02u %02u:%02u"; +static ZCONST char Far YMDHMSTime[] = "%u %s %u %02u:%02u:%02u"; +static ZCONST char Far DecimalTime[] = "%04u%02u%02u.%02u%02u%02u"; +static ZCONST char Far YMDHMSTimeError[] = "???? ??? ?? ??:??:??"; + + + + + +#ifndef WINDLL + +/************************/ +/* Function zi_opts() */ +/************************/ + +int zi_opts(__G__ pargc, pargv) + int *pargc; + char ***pargv; + __GDEF +{ + char **argv, *s; + int argc, c, error=FALSE, negative=0; + int hflag_slmv=TRUE, hflag_2=FALSE; /* diff options => diff defaults */ + int tflag_slm=TRUE, tflag_2v=FALSE; + int explicit_h=FALSE, explicit_t=FALSE; + + +#ifdef MACOS + uO.lflag = LFLAG; /* reset default on each call */ +#endif + G.extract_flag = FALSE; /* zipinfo does not extract to disk */ + argc = *pargc; + argv = *pargv; + + while (--argc > 0 && (*++argv)[0] == '-') { + s = argv[0] + 1; + while ((c = *s++) != 0) { /* "!= 0": prevent Turbo C warning */ + switch (c) { + case '-': + ++negative; + break; + case '1': /* shortest listing: JUST filenames */ + if (negative) + uO.lflag = -2, negative = 0; + else + uO.lflag = 1; + break; + case '2': /* just filenames, plus headers if specified */ + if (negative) + uO.lflag = -2, negative = 0; + else + uO.lflag = 2; + break; +#ifndef CMS_MVS + case ('C'): /* -C: match filenames case-insensitively */ + if (negative) + uO.C_flag = FALSE, negative = 0; + else + uO.C_flag = TRUE; + break; +#endif /* !CMS_MVS */ + case 'h': /* header line */ + if (negative) + hflag_2 = hflag_slmv = FALSE, negative = 0; + else { + hflag_2 = hflag_slmv = explicit_h = TRUE; + if (uO.lflag == -1) + uO.lflag = 0; + } + break; + case 'l': /* longer form of "ls -l" type listing */ + if (negative) + uO.lflag = -2, negative = 0; + else + uO.lflag = 5; + break; + case 'm': /* medium form of "ls -l" type listing */ + if (negative) + uO.lflag = -2, negative = 0; + else + uO.lflag = 4; + break; +#ifdef MORE + case 'M': /* send output through built-in "more" */ + if (negative) + G.M_flag = FALSE, negative = 0; + else + G.M_flag = TRUE; + break; +#endif + case 's': /* default: shorter "ls -l" type listing */ + if (negative) + uO.lflag = -2, negative = 0; + else + uO.lflag = 3; + break; + case 't': /* totals line */ + if (negative) + tflag_2v = tflag_slm = FALSE, negative = 0; + else { + tflag_2v = tflag_slm = explicit_t = TRUE; + if (uO.lflag == -1) + uO.lflag = 0; + } + break; + case ('T'): /* use (sortable) decimal time format */ + if (negative) + uO.T_flag = FALSE, negative = 0; + else + uO.T_flag = TRUE; + break; + case 'v': /* turbo-verbose listing */ + if (negative) + uO.lflag = -2, negative = 0; + else + uO.lflag = 10; + break; + case 'z': /* print zipfile comment */ + if (negative) + uO.zflag = negative = 0; + else + uO.zflag = 1; + break; + case 'Z': /* ZipInfo mode: ignore */ + break; + default: + error = TRUE; + break; + } + } + } + if ((argc-- == 0) || error) { + *pargc = argc; + *pargv = argv; + return USAGE(error); + } + +#ifdef MORE + if (G.M_flag && !isatty(1)) /* stdout redirected: "more" func useless */ + G.M_flag = 0; +#endif + + /* if no listing options given (or all negated), or if only -h/-t given + * with individual files specified, use default listing format */ + if ((uO.lflag < 0) || ((argc > 0) && (uO.lflag == 0))) + uO.lflag = LFLAG; + + /* set header and totals flags to default or specified values */ + switch (uO.lflag) { + case 0: /* 0: can only occur if either -t or -h explicitly given; */ + case 2: /* therefore set both flags equal to normally false value */ + uO.hflag = hflag_2; + uO.tflag = tflag_2v; + break; + case 1: /* only filenames, *always* */ + uO.hflag = FALSE; + uO.tflag = FALSE; + uO.zflag = FALSE; + break; + case 3: + case 4: + case 5: + uO.hflag = ((argc > 0) && !explicit_h)? FALSE : hflag_slmv; + uO.tflag = ((argc > 0) && !explicit_t)? FALSE : tflag_slm; + break; + case 10: + uO.hflag = hflag_slmv; + uO.tflag = tflag_2v; + break; + } + + *pargc = argc; + *pargv = argv; + return 0; + +} /* end function zi_opts() */ + +#endif /* !WINDLL */ + + + + + +/*******************************/ +/* Function zi_end_central() */ +/*******************************/ + +int zi_end_central(__G) /* return PK-type error code */ + __GDEF +{ + int error = PK_COOL; + + +/*--------------------------------------------------------------------------- + Print out various interesting things about the zipfile. + ---------------------------------------------------------------------------*/ + + /* header fits on one line, for anything up to 10GB and 10000 files: */ + if (uO.hflag) + Info(slide, 0, ((char *)slide, ((int)strlen(G.zipfn) < 39)? + LoadFarString(LongHeader) : LoadFarString(ShortHeader), G.zipfn, + (long)G.ziplen, G.ecrec.total_entries_central_dir, + (G.ecrec.total_entries_central_dir==1)? + nullStr : "s")); + + /* verbose format */ + if (uO.lflag > 9) { + Info(slide, 0, ((char *)slide, LoadFarString(EndCentDirRec))); + Info(slide, 0, ((char *)slide, LoadFarString(LineSeparators))); + + Info(slide, 0, ((char *)slide, LoadFarString(ActOffsetCentDir), + (long)G.real_ecrec_offset, (long)G.real_ecrec_offset, + (long)G.expect_ecrec_offset, (long)G.expect_ecrec_offset)); + + if (G.ecrec.number_this_disk == 0) { + Info(slide, 0, ((char *)slide, LoadFarString(SinglePartArchive1), + G.ecrec.total_entries_central_dir, + (G.ecrec.total_entries_central_dir == 1)? "entry" : "entries", + G.ecrec.size_central_directory, + G.ecrec.size_central_directory)); + Info(slide, 0, ((char *)slide, LoadFarString(SinglePartArchive2), + G.ecrec.offset_start_central_directory, + G.ecrec.offset_start_central_directory)); + } else { + Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive1), + G.ecrec.number_this_disk + 1, + G.ecrec.num_disk_start_cdir + 1, + G.ecrec.num_entries_centrl_dir_ths_disk, + (G.ecrec.num_entries_centrl_dir_ths_disk == 1)? "is" : "are")); + Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive2), + G.ecrec.total_entries_central_dir, + (G.ecrec.total_entries_central_dir == 1) ? "entry" : "entries", + G.ecrec.size_central_directory, + G.ecrec.size_central_directory)); + Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive3), + G.ecrec.offset_start_central_directory, + G.ecrec.offset_start_central_directory)); + } + + /*----------------------------------------------------------------------- + Get the zipfile comment, if any, and print it out. (Comment may be + up to 64KB long. May the fleas of a thousand camels infest the arm- + pits of anyone who actually takes advantage of this fact.) + -----------------------------------------------------------------------*/ + + if (!G.ecrec.zipfile_comment_length) + Info(slide, 0, ((char *)slide, LoadFarString(NoZipfileComment))); + else { + Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommentDesc), + G.ecrec.zipfile_comment_length)); + Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommBegin))); + if (do_string(__G__ G.ecrec.zipfile_comment_length, DISPLAY)) + error = PK_WARN; + Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommEnd))); + if (error) + Info(slide, 0, ((char *)slide, + LoadFarString(ZipfileCommTrunc2))); + } /* endif (comment exists) */ + + /* non-verbose mode: print zipfile comment only if requested */ + } else if (uO.zflag && G.ecrec.zipfile_comment_length) { + if (do_string(__G__ G.ecrec.zipfile_comment_length, DISPLAY)) { + Info(slide, 0x401, ((char *)slide, + LoadFarString(ZipfileCommTruncMsg))); + error = PK_WARN; + } + } /* endif (verbose) */ + + return error; + +} /* end function zi_end_central() */ + + + + + +/************************/ +/* Function zipinfo() */ +/************************/ + +int zipinfo(__G) /* return PK-type error code */ + __GDEF +{ + int do_this_file=FALSE, error, error_in_archive=PK_COOL; + int *fn_matched=NULL, *xn_matched=NULL; + unsigned j, members=0; + ulg tot_csize=0L, tot_ucsize=0L; + ulg endprev; /* buffers end of previous entry for zi_long()'s check + * of extra bytes */ + + +/*--------------------------------------------------------------------------- + Malloc space for check on unmatched filespecs (no big deal if one or both + are NULL). + ---------------------------------------------------------------------------*/ + + if (G.filespecs > 0 && + (fn_matched=(int *)malloc(G.filespecs*sizeof(int))) != NULL) + for (j = 0; j < G.filespecs; ++j) + fn_matched[j] = FALSE; + + if (G.xfilespecs > 0 && + (xn_matched=(int *)malloc(G.xfilespecs*sizeof(int))) != NULL) + for (j = 0; j < G.xfilespecs; ++j) + xn_matched[j] = FALSE; + +/*--------------------------------------------------------------------------- + Set file pointer to start of central directory, then loop through cen- + tral directory entries. Check that directory-entry signature bytes are + actually there (just a precaution), then process the entry. We know + the entire central directory is on this disk: we wouldn't have any of + this information unless the end-of-central-directory record was on this + disk, and we wouldn't have gotten to this routine unless this is also + the disk on which the central directory starts. In practice, this had + better be the *only* disk in the archive, but maybe someday we'll add + multi-disk support. + ---------------------------------------------------------------------------*/ + + uO.L_flag = FALSE; /* zipinfo mode: never convert name to lowercase */ + G.pInfo = G.info; /* (re-)initialize, (just to make sure) */ + G.pInfo->textmode = 0; /* so one can read on screen (is this ever used?) */ + + /* reset endprev for new zipfile; account for multi-part archives (?) */ + endprev = (G.crec.relative_offset_local_header == 4L)? 4L : 0L; + + + for (j = 0; j++ < (unsigned)G.ecrec.total_entries_central_dir;) { + if (readbuf(__G__ G.sig, 4) == 0) + return PK_EOF; + if (strncmp(G.sig, central_hdr_sig, 4)) { /* just to make sure */ + Info(slide, 0x401, ((char *)slide, LoadFarString(CentSigMsg), j)); + return PK_BADERR; /* sig not found */ + } + /* process_cdir_file_hdr() sets pInfo->hostnum, pInfo->lcflag, ...: */ + if ((error = process_cdir_file_hdr(__G)) != PK_COOL) + return error; /* only PK_EOF defined */ + + if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) != + PK_COOL) + { + error_in_archive = error; /* might be warning */ + if (error > PK_WARN) /* fatal */ + return error; + } + + if (!G.process_all_files) { /* check if specified on command line */ + unsigned i; + + do_this_file = FALSE; + for (i = 0; i < G.filespecs; i++) + if (match(G.filename, G.pfnames[i], uO.C_flag)) { + do_this_file = TRUE; + if (fn_matched) + fn_matched[i] = TRUE; + break; /* found match, so stop looping */ + } + if (do_this_file) { /* check if this is an excluded file */ + for (i = 0; i < G.xfilespecs; i++) + if (match(G.filename, G.pxnames[i], uO.C_flag)) { + do_this_file = FALSE; /* ^-- ignore case in match */ + if (xn_matched) + xn_matched[i] = TRUE; + break; + } + } + } + + /*----------------------------------------------------------------------- + If current file was specified on command line, or if no names were + specified, do the listing for this file. Otherwise, get rid of the + file comment and go back for the next file. + -----------------------------------------------------------------------*/ + + if (G.process_all_files || do_this_file) { + + switch (uO.lflag) { + case 1: + case 2: + fnprint(__G); + SKIP_(G.crec.extra_field_length) + SKIP_(G.crec.file_comment_length) + break; + + case 3: + case 4: + case 5: + if ((error = zi_short(__G)) != PK_COOL) { + error_in_archive = error; /* might be warning */ + if (error > PK_WARN) /* fatal */ + return error; + } + break; + + case 10: + Info(slide, 0, ((char *)slide, + LoadFarString(CentralDirEntry), j)); + if ((error = zi_long(__G__ &endprev)) != PK_COOL) { + error_in_archive = error; /* might be warning */ + if (error > PK_WARN) /* fatal */ + return error; + } + break; + + default: + SKIP_(G.crec.extra_field_length) + SKIP_(G.crec.file_comment_length) + break; + + } /* end switch (lflag) */ + + tot_csize += G.crec.csize; + tot_ucsize += G.crec.ucsize; + if (G.crec.general_purpose_bit_flag & 1) + tot_csize -= 12; /* don't count encryption header */ + ++members; + +#ifdef DLL + if ((G.statreportcb != NULL) && + (*G.statreportcb)(__G__ UZ_ST_FINISH_MEMBER, G.zipfn, + G.filename, NULL)) { + if (fn_matched) + free((zvoid *)fn_matched); + if (xn_matched) + free((zvoid *)xn_matched); + return IZ_CTRLC; /* cancel operation by user request */ + } +#endif +#ifdef MACOS /* MacOS is no preemptive OS, thus call event-handling by hand */ + UserStop(); +#endif + + } else { /* not listing this file */ + SKIP_(G.crec.extra_field_length) + SKIP_(G.crec.file_comment_length) + + } /* end if (list member?) */ + + } /* end for-loop (j: member files) */ + +/*--------------------------------------------------------------------------- + Check that we actually found requested files; if so, print totals. + ---------------------------------------------------------------------------*/ + + if (uO.tflag) { + char *sgn = ""; + int cfactor = ratio(tot_ucsize, tot_csize); + + if (cfactor < 0) { + sgn = "-"; + cfactor = -cfactor; + } + Info(slide, 0, ((char *)slide, LoadFarString(ZipfileStats), + members, (members==1)? nullStr:"s", tot_ucsize, + tot_csize, sgn, cfactor/10, cfactor%10)); + } + +/*--------------------------------------------------------------------------- + Check for unmatched filespecs on command line and print warning if any + found. + ---------------------------------------------------------------------------*/ + + if (fn_matched) { + for (j = 0; j < G.filespecs; ++j) + if (!fn_matched[j]) + Info(slide, 0x401, ((char *)slide, + LoadFarString(FilenameNotMatched), G.pfnames[j])); + free((zvoid *)fn_matched); + } + if (xn_matched) { + for (j = 0; j < G.xfilespecs; ++j) + if (!xn_matched[j]) + Info(slide, 0x401, ((char *)slide, + LoadFarString(ExclFilenameNotMatched), G.pxnames[j])); + free((zvoid *)xn_matched); + } + +/*--------------------------------------------------------------------------- + Double check that we're back at the end-of-central-directory record. + ---------------------------------------------------------------------------*/ + + if (readbuf(__G__ G.sig, 4) == 0) /* disk error? */ + return PK_EOF; + if (strncmp(G.sig, end_central_sig, 4)) { /* just to make sure again */ + Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg))); + error_in_archive = PK_WARN; /* didn't find sig */ + } + if (members == 0 && error_in_archive <= PK_WARN) + error_in_archive = PK_FIND; + + if (uO.lflag >= 10) + (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0); + + return error_in_archive; + +} /* end function zipinfo() */ + + + + + +/************************/ +/* Function zi_long() */ +/************************/ + +static int zi_long(__G__ pEndprev) /* return PK-type error code */ + __GDEF + ulg *pEndprev; /* for zi_long() check of extra bytes */ +{ +#ifdef USE_EF_UT_TIME + iztimes z_utime; +#endif + int error, error_in_archive=PK_COOL; + ush hostnum, hostver, extnum, extver, methnum, xattr; + char workspace[12], attribs[22]; + ZCONST char *varmsg_str; + char unkn[16]; + static ZCONST char Far *os[NUM_HOSTS] = { + OS_FAT, OS_Amiga, OS_VMS, OS_Unix, OS_VMCMS, OS_AtariST, OS_HPFS, + OS_Macintosh, OS_ZSystem, OS_CPM, OS_TOPS20, OS_NTFS, OS_QDOS, + OS_Acorn, OS_VFAT, OS_MVS, OS_BeOS, OS_Tandem + }; + static ZCONST char Far *method[NUM_METHODS] = { + MthdNone, MthdShrunk, MthdRedF1, MthdRedF2, MthdRedF3, MthdRedF4, + MthdImplode, MthdToken, MthdDeflate, MthdEnDeflate, MthdDCLImplode + }; + static ZCONST char Far *dtypelng[4] = { + DeflNorm, DeflMax, DeflFast, DeflSFast + }; + + +/*--------------------------------------------------------------------------- + Check whether there's any extra space inside the zipfile. If *pEndprev is + zero, it's probably a signal that OS/2 extra fields are involved (with + unknown compressed size). We won't worry about prepended junk here... + ---------------------------------------------------------------------------*/ + + if (G.crec.relative_offset_local_header != *pEndprev && *pEndprev > 0L) { + /* GRR DEBUG + Info(slide, 0, ((char *)slide, + " [crec.relative_offset_local_header = %lu, endprev = %lu]\n", + G.crec.relative_offset_local_header, *pEndprev)); + */ + Info(slide, 0, ((char *)slide, LoadFarString(ExtraBytesPreceding), + (long)G.crec.relative_offset_local_header - (long)(*pEndprev))); + } + + /* calculate endprev for next time around (problem: extra fields may + * differ in length between local and central-directory records) */ + *pEndprev = G.crec.relative_offset_local_header + 4L + LREC_SIZE + + G.crec.filename_length + G.crec.extra_field_length + + G.crec.file_comment_length + G.crec.csize; + +/*--------------------------------------------------------------------------- + Read the extra field, if any. It may be used to get UNIX style modtime. + ---------------------------------------------------------------------------*/ + + if ((error = do_string(__G__ G.crec.extra_field_length, EXTRA_FIELD)) != 0) + { + if (G.extra_field != NULL) { + free(G.extra_field); + G.extra_field = NULL; + } + error_in_archive = error; + /* The premature return in case of a "fatal" error (PK_EOF) is + * delayed until we analyze the extra field contents. + * This allows us to display all the other info that has been + * successfully read in. + */ + } + +/*--------------------------------------------------------------------------- + Print out various interesting things about the compressed file. + ---------------------------------------------------------------------------*/ + + hostnum = (ush)(G.pInfo->hostnum); + hostver = G.crec.version_made_by[0]; + extnum = (ush)MIN(G.crec.version_needed_to_extract[1], NUM_HOSTS); + extver = G.crec.version_needed_to_extract[0]; + methnum = (ush)MIN(G.crec.compression_method, NUM_METHODS); + + (*G.message)((zvoid *)&G, (uch *)" ", 2L, 0); fnprint(__G); + + Info(slide, 0, ((char *)slide, LoadFarString(LocalHeaderOffset), + G.crec.relative_offset_local_header, + G.crec.relative_offset_local_header)); + + if (hostnum >= NUM_HOSTS) { + sprintf(unkn, LoadFarString(UnknownNo), + (int)G.crec.version_made_by[1]); + varmsg_str = unkn; + } else { + varmsg_str = LoadFarStringSmall(os[hostnum]); + } + Info(slide, 0, ((char *)slide, LoadFarString(HostOS), varmsg_str)); + Info(slide, 0, ((char *)slide, LoadFarString(EncodeSWVer), hostver/10, + hostver%10)); + + if (extnum >= NUM_HOSTS) { + sprintf(unkn, LoadFarString(UnknownNo), + (int)G.crec.version_needed_to_extract[1]); + varmsg_str = unkn; + } else { + varmsg_str = LoadFarStringSmall(os[extnum]); + } + Info(slide, 0, ((char *)slide, LoadFarString(MinOSCompReq), varmsg_str)); + Info(slide, 0, ((char *)slide, LoadFarString(MinSWVerReq), extver/10, + extver%10)); + + if (methnum >= NUM_METHODS) { + sprintf(unkn, LoadFarString(UnknownNo), G.crec.compression_method); + varmsg_str = unkn; + } else { + varmsg_str = LoadFarStringSmall(method[methnum]); + } + Info(slide, 0, ((char *)slide, LoadFarString(CompressMethod), varmsg_str)); + if (methnum == IMPLODED) { + Info(slide, 0, ((char *)slide, LoadFarString(SlideWindowSizeImplode), + (G.crec.general_purpose_bit_flag & 2)? '8' : '4')); + Info(slide, 0, ((char *)slide, LoadFarString(ShannonFanoTrees), + (G.crec.general_purpose_bit_flag & 4)? '3' : '2')); + } else if (methnum == DEFLATED) { + ush dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3); + + Info(slide, 0, ((char *)slide, LoadFarString(CompressSubtype), + LoadFarStringSmall(dtypelng[dnum]))); + } + + Info(slide, 0, ((char *)slide, LoadFarString(FileSecurity), + (G.crec.general_purpose_bit_flag & 1) ? nullStr : "not ")); + Info(slide, 0, ((char *)slide, LoadFarString(ExtendedLocalHdr), + (G.crec.general_purpose_bit_flag & 8) ? "yes" : "no")); + /* print upper 3 bits for amusement? */ + + /* For printing of date & time, a "char d_t_buf[21]" is required. + * To save stack space, we reuse the "char attribs[22]" buffer which + * is not used yet. + */ +# define d_t_buf attribs + + zi_time(__G__ &G.crec.last_mod_dos_datetime, NULL, d_t_buf); + Info(slide, 0, ((char *)slide, LoadFarString(FileModDate), d_t_buf)); +#ifdef USE_EF_UT_TIME + if (G.extra_field && +#ifdef IZ_CHECK_TZ + G.tz_is_valid && +#endif + (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1, + G.crec.last_mod_dos_datetime, &z_utime, NULL) + & EB_UT_FL_MTIME)) + { + TIMET_TO_NATIVE(z_utime.mtime) /* NOP unless MSC 7.0 or Macintosh */ + d_t_buf[0] = (char)0; /* signal "show local time" */ + zi_time(__G__ &G.crec.last_mod_dos_datetime, &(z_utime.mtime), d_t_buf); + Info(slide, 0, ((char *)slide, LoadFarString(UT_FileModDate), + d_t_buf, LoadFarStringSmall(LocalTime))); +#ifndef NO_GMTIME + d_t_buf[0] = (char)1; /* signal "show UTC (GMT) time" */ + zi_time(__G__ &G.crec.last_mod_dos_datetime, &(z_utime.mtime), d_t_buf); + Info(slide, 0, ((char *)slide, LoadFarString(UT_FileModDate), + d_t_buf, LoadFarStringSmall(GMTime))); +#endif /* !NO_GMTIME */ + } +#endif /* USE_EF_UT_TIME */ + + Info(slide, 0, ((char *)slide, LoadFarString(CRC32Value), G.crec.crc32)); + Info(slide, 0, ((char *)slide, LoadFarString(CompressedFileSize), + G.crec.csize)); + Info(slide, 0, ((char *)slide, LoadFarString(UncompressedFileSize), + G.crec.ucsize)); + Info(slide, 0, ((char *)slide, LoadFarString(FilenameLength), + G.crec.filename_length)); + Info(slide, 0, ((char *)slide, LoadFarString(ExtraFieldLength), + G.crec.extra_field_length)); + Info(slide, 0, ((char *)slide, LoadFarString(FileCommentLength), + G.crec.file_comment_length)); + Info(slide, 0, ((char *)slide, LoadFarString(FileDiskNum), + G.crec.disk_number_start + 1)); + Info(slide, 0, ((char *)slide, LoadFarString(ApparentFileType), + (G.crec.internal_file_attributes & 1)? "text" + : (G.crec.internal_file_attributes & 2)? "ebcdic" + : "binary")); /* changed to accept EBCDIC */ +#ifdef ATARI + printf(" external file attributes (hex): %.8lx\n", + G.crec.external_file_attributes); +#endif + xattr = (ush)((G.crec.external_file_attributes >> 16) & 0xFFFF); + if (hostnum == VMS_) { + char *p=attribs, *q=attribs+1; + int i, j, k; + + for (k = 0; k < 12; ++k) + workspace[k] = 0; + if (xattr & VMS_IRUSR) + workspace[0] = 'R'; + if (xattr & VMS_IWUSR) { + workspace[1] = 'W'; + workspace[3] = 'D'; + } + if (xattr & VMS_IXUSR) + workspace[2] = 'E'; + if (xattr & VMS_IRGRP) + workspace[4] = 'R'; + if (xattr & VMS_IWGRP) { + workspace[5] = 'W'; + workspace[7] = 'D'; + } + if (xattr & VMS_IXGRP) + workspace[6] = 'E'; + if (xattr & VMS_IROTH) + workspace[8] = 'R'; + if (xattr & VMS_IWOTH) { + workspace[9] = 'W'; + workspace[11] = 'D'; + } + if (xattr & VMS_IXOTH) + workspace[10] = 'E'; + + *p++ = '('; + for (k = j = 0; j < 3; ++j) { /* loop over groups of permissions */ + for (i = 0; i < 4; ++i, ++k) /* loop over perms within a group */ + if (workspace[k]) + *p++ = workspace[k]; + *p++ = ','; /* group separator */ + if (j == 0) + while ((*p++ = *q++) != ',') + ; /* system, owner perms are same */ + } + *p-- = 0; + *p = ')'; /* overwrite last comma */ + Info(slide, 0, ((char *)slide, LoadFarString(VMSFileAttributes), xattr, + attribs)); + + } else if (hostnum == AMIGA_) { + switch (xattr & AMI_IFMT) { + case AMI_IFDIR: attribs[0] = 'd'; break; + case AMI_IFREG: attribs[0] = '-'; break; + default: attribs[0] = '?'; break; + } + attribs[1] = (xattr & AMI_IHIDDEN)? 'h' : '-'; + attribs[2] = (xattr & AMI_ISCRIPT)? 's' : '-'; + attribs[3] = (xattr & AMI_IPURE)? 'p' : '-'; + attribs[4] = (xattr & AMI_IARCHIVE)? 'a' : '-'; + attribs[5] = (xattr & AMI_IREAD)? 'r' : '-'; + attribs[6] = (xattr & AMI_IWRITE)? 'w' : '-'; + attribs[7] = (xattr & AMI_IEXECUTE)? 'e' : '-'; + attribs[8] = (xattr & AMI_IDELETE)? 'd' : '-'; + attribs[9] = 0; /* better dlm the string */ + Info(slide, 0, ((char *)slide, LoadFarString(AmigaFileAttributes), + xattr, attribs)); + + } else if ((hostnum != FS_FAT_) && (hostnum != FS_HPFS_) && + (hostnum != FS_NTFS_) && (hostnum != FS_VFAT_) && + (hostnum != ACORN_) && + (hostnum != VM_CMS_) && (hostnum != MVS_)) + { /* assume Unix-like */ + switch ((unsigned)(xattr & UNX_IFMT)) { + case (unsigned)UNX_IFDIR: attribs[0] = 'd'; break; + case (unsigned)UNX_IFREG: attribs[0] = '-'; break; + case (unsigned)UNX_IFLNK: attribs[0] = 'l'; break; + case (unsigned)UNX_IFBLK: attribs[0] = 'b'; break; + case (unsigned)UNX_IFCHR: attribs[0] = 'c'; break; + case (unsigned)UNX_IFIFO: attribs[0] = 'p'; break; + case (unsigned)UNX_IFSOCK: attribs[0] = 's'; break; + default: attribs[0] = '?'; break; + } + attribs[1] = (xattr & UNX_IRUSR)? 'r' : '-'; + attribs[4] = (xattr & UNX_IRGRP)? 'r' : '-'; + attribs[7] = (xattr & UNX_IROTH)? 'r' : '-'; + + attribs[2] = (xattr & UNX_IWUSR)? 'w' : '-'; + attribs[5] = (xattr & UNX_IWGRP)? 'w' : '-'; + attribs[8] = (xattr & UNX_IWOTH)? 'w' : '-'; + + if (xattr & UNX_IXUSR) + attribs[3] = (xattr & UNX_ISUID)? 's' : 'x'; + else + attribs[3] = (xattr & UNX_ISUID)? 'S' : '-'; /* S = undefined */ + if (xattr & UNX_IXGRP) + attribs[6] = (xattr & UNX_ISGID)? 's' : 'x'; /* == UNX_ENFMT */ + else + attribs[6] = (xattr & UNX_ISGID)? 'l' : '-'; + if (xattr & UNX_IXOTH) + attribs[9] = (xattr & UNX_ISVTX)? 't' : 'x'; /* "sticky bit" */ + else + attribs[9] = (xattr & UNX_ISVTX)? 'T' : '-'; /* T = undefined */ + attribs[10] = 0; + + Info(slide, 0, ((char *)slide, LoadFarString(UnixFileAttributes), xattr, + attribs)); + + } else { + Info(slide, 0, ((char *)slide, LoadFarString(NonMSDOSFileAttributes), + G.crec.external_file_attributes >> 8)); + + } /* endif (hostnum: external attributes format) */ + + if ((xattr=(ush)(G.crec.external_file_attributes & 0xFF)) == 0) + Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributes), + xattr)); + else if (xattr == 1) + Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributesRO), + xattr)); + else + Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributesAlpha), + xattr, (xattr&1)? "rdo " : nullStr, + (xattr&2)? "hid " : nullStr, + (xattr&4)? "sys " : nullStr, + (xattr&8)? "lab " : nullStr, + (xattr&16)? "dir " : nullStr, + (xattr&32)? "arc" : nullStr)); + +/*--------------------------------------------------------------------------- + Analyze the extra field, if any, and print the file comment, if any (the + filename has already been printed, above). That finishes up this file + entry... + ---------------------------------------------------------------------------*/ + + if (G.crec.extra_field_length > 0) { + uch *ef_ptr = G.extra_field; + ush ef_len = G.crec.extra_field_length; + ush eb_id, eb_datalen; + ZCONST char Far *ef_fieldname; + + if (error_in_archive > PK_WARN) /* fatal: can't continue */ + /* delayed "fatal error" return from extra field reading */ + return error; + if (G.extra_field == (uch *)NULL) + return PK_ERR; /* not consistent with crec length */ + + Info(slide, 0, ((char *)slide, LoadFarString(ExtraFields))); + + while (ef_len >= EB_HEADSIZE) { + eb_id = makeword(&ef_ptr[EB_ID]); + eb_datalen = makeword(&ef_ptr[EB_LEN]); + ef_ptr += EB_HEADSIZE; + ef_len -= EB_HEADSIZE; + + if (eb_datalen > (ush)ef_len) { + Info(slide, 0x421, ((char *)slide, + LoadFarString(ExtraFieldTrunc), eb_id, eb_datalen, ef_len)); + eb_datalen = ef_len; + } + + switch (eb_id) { + case EF_AV: + ef_fieldname = efAV; + break; + case EF_OS2: + ef_fieldname = efOS2; + break; + case EF_ACL: + ef_fieldname = efACL; + break; + case EF_NTSD: + ef_fieldname = efNTSD; + break; + case EF_PKVMS: + ef_fieldname = efPKVMS; + break; + case EF_IZVMS: + ef_fieldname = efIZVMS; + break; + case EF_PKW32: + ef_fieldname = efPKWin32; + break; + case EF_PKUNIX: + ef_fieldname = efPKUnix; + break; + case EF_IZUNIX: + ef_fieldname = efIZUnix; + if (G.crec.version_made_by[1] == UNIX_ && *pEndprev > 0L) + *pEndprev += 4L; /* also have UID/GID in local copy */ + break; + case EF_IZUNIX2: + ef_fieldname = efIZUnix2; + if (*pEndprev > 0L) + *pEndprev += 4L; /* 4 byte UID/GID in local copy */ + break; + case EF_TIME: + ef_fieldname = efTime; + break; + case EF_MAC3: + ef_fieldname = efMac3; + break; + case EF_JLMAC: + ef_fieldname = efJLMac; + break; + case EF_ZIPIT: + ef_fieldname = efZipIt; + break; + case EF_ZIPIT2: + ef_fieldname = efZipIt2; + break; + case EF_VMCMS: + ef_fieldname = efVMCMS; + break; + case EF_MVS: + ef_fieldname = efMVS; + break; + case EF_BEOS: + ef_fieldname = efBeOS; + break; + case EF_QDOS: + ef_fieldname = efQDOS; + break; + case EF_AOSVS: + ef_fieldname = efAOSVS; + break; + case EF_SPARK: /* from RISC OS */ + ef_fieldname = efSpark; + break; + case EF_MD5: + ef_fieldname = efMD5; + break; + case EF_ASIUNIX: + ef_fieldname = efASiUnix; + break; + default: + ef_fieldname = efUnknown; + break; + } + Info(slide, 0, ((char *)slide, LoadFarString(ExtraFieldType), + eb_id, LoadFarStringSmall(ef_fieldname), eb_datalen)); + + /* additional, field-specific information: */ + switch (eb_id) { + case EF_OS2: + case EF_ACL: + if (eb_datalen >= EB_OS2_HLEN) { + if (eb_id == EF_OS2) + ef_fieldname = OS2EAs; + else + ef_fieldname = ACLdata; + Info(slide, 0, ((char *)slide, + LoadFarString(ef_fieldname), makelong(ef_ptr))); + *pEndprev = 0L; /* no clue about csize of local */ + } + break; + case EF_NTSD: + if (eb_datalen >= EB_NTSD_C_LEN) { + Info(slide, 0, ((char *)slide, LoadFarString(NTSDData), + makelong(ef_ptr))); + *pEndprev = 0L; /* no clue about csize of local */ + } + break; + case EF_IZVMS: + if (eb_datalen >= 8) { + char *p, q[8]; + int compr = makeword(ef_ptr+4) & 7; + + *q = '\0'; + if (compr > 3) + compr = 3; + if (strncmp((char *)ef_ptr, "VFAB", 4) == 0) + p = "FAB"; + else if (strncmp((char *)ef_ptr, "VALL", 4) == 0) + p = "XABALL"; + else if (strncmp((char *)ef_ptr, "VFHC", 4) == 0) + p = "XABFHC"; + else if (strncmp((char *)ef_ptr, "VDAT", 4) == 0) + p = "XABDAT"; + else if (strncmp((char *)ef_ptr, "VRDT", 4) == 0) + p = "XABRDT"; + else if (strncmp((char *)ef_ptr, "VPRO", 4) == 0) + p = "XABPRO"; + else if (strncmp((char *)ef_ptr, "VKEY", 4) == 0) + p = "XABKEY"; + else if (strncmp((char *)ef_ptr, "VMSV", 4) == 0) { + p = "version"; + if (eb_datalen >= 16) { + q[0] = ' '; + q[1] = '('; + strncpy(q+2, (char *)ef_ptr+12, 4); + q[6] = ')'; + q[7] = '\0'; + } + } else + p = "version"; + Info(slide, 0, ((char *)slide, LoadFarString(izVMSdata), + LoadFarStringSmall(izVMScomp[compr]), + makeword(ef_ptr+6), p, q)); + } + break; + case EF_TIME: + if (eb_datalen >= 1) { + char types[80]; + int num = 0, len; + + *types = '\0'; + if (*ef_ptr & 1) { + strcpy(types, LoadFarString(UTmodification)); + ++num; + } + if (*ef_ptr & 2) { + len = strlen(types); + if (num) + types[len++] = '/'; + strcpy(types+len, LoadFarString(UTaccess)); + ++num; + if (*pEndprev > 0L) + *pEndprev += 4L; + } + if (*ef_ptr & 4) { + len = strlen(types); + if (num) + types[len++] = '/'; + strcpy(types+len, LoadFarString(UTcreation)); + ++num; + if (*pEndprev > 0L) + *pEndprev += 4L; + } + if (num > 0) + Info(slide, 0, ((char *)slide, + LoadFarString(UTdata), types, + num == 1? nullStr : "s")); + } + break; + case EF_MAC3: + if (eb_datalen >= EB_MAC3_HLEN) { + ulg eb_uc = makelong(ef_ptr); + unsigned mac3_flgs = makeword(ef_ptr+EB_FLGS_OFFS); + unsigned eb_is_uc = mac3_flgs & EB_M3_FL_UNCMPR; + + Info(slide, 0, ((char *)slide, LoadFarString(Mac3data), + eb_uc, eb_is_uc ? "un" : nullStr)); + if (eb_is_uc) { + if (*pEndprev > 0L) + *pEndprev += makelong(ef_ptr); + } else { + *pEndprev = 0L; /* no clue about csize of local */ + } + + Info(slide, 0, ((char *)slide, + LoadFarString(MacOSMAC3flags), + LoadFarStringSmall(mac3_flgs & EB_M3_FL_DATFRK ? + MacOS_DF : MacOS_RF), + (mac3_flgs & EB_M3_FL_TIME64 ? 64 : 32))); + zi_showMacTypeCreator(__G__ &ef_ptr[6]); + } + break; + case EF_ZIPIT2: + if (eb_datalen >= 5 && + strncmp((char *)ef_ptr, "ZPIT", 4) == 0) { + + if (eb_datalen >= 12) { + zi_showMacTypeCreator(__G__ &ef_ptr[4]); + } + } + + case EF_ZIPIT: + if (eb_datalen >= 5 && + strncmp((char *)ef_ptr, "ZPIT", 4) == 0) { + unsigned fnlen = ef_ptr[4]; + + if (eb_datalen >= fnlen + (5 + 8)) { + uch nullchar = ef_ptr[fnlen+5]; + + ef_ptr[fnlen+5] = '\0'; /* terminate filename */ + Info(slide, 0, ((char *)slide, + LoadFarString(ZipItFname), (char *)ef_ptr+5)); + ef_ptr[fnlen+5] = nullchar; + zi_showMacTypeCreator(__G__ &ef_ptr[fnlen+5]); + } + } + break; + case EF_JLMAC: + if (eb_datalen >= 40 && + strncmp((char *)ef_ptr, "JLEE", 4) == 0) + { + zi_showMacTypeCreator(__G__ &ef_ptr[4]); + + Info(slide, 0, ((char *)slide, + LoadFarString(MacOSJLEEflags), + LoadFarStringSmall(ef_ptr[31] & 1 ? + MacOS_DF : MacOS_RF))); + } + break; +#ifdef CMS_MVS + case EF_VMCMS: + case EF_MVS: + { + char type[100]; + + Info(slide, 0, ((char *)slide, + LoadFarString(VmMvsExtraField), + (getVMMVSexfield(type, ef_ptr-EB_HEADSIZE, + (unsigned)eb_datalen) > 0)? + type : LoadFarStringSmall(VmMvsInvalid))); + } + break; +#endif /* CMS_MVS */ + case EF_BEOS: + if (eb_datalen >= EB_BEOS_HLEN) { + ulg eb_uc = makelong(ef_ptr); + unsigned eb_is_uc = + *(ef_ptr+EB_FLGS_OFFS) & EB_BE_FL_UNCMPR; + + Info(slide, 0, ((char *)slide, LoadFarString(BeOSdata), + eb_uc, eb_is_uc ? "un" : nullStr)); + if (eb_is_uc) { + if (*pEndprev > 0L) + *pEndprev += makelong(ef_ptr); + } else { + *pEndprev = 0L; /* no clue about csize of local */ + } + } + break; + case EF_QDOS: + if (eb_datalen >= 4) { + Info(slide, 0, ((char *)slide, LoadFarString(QDOSdata), + ef_ptr[0], ef_ptr[1], ef_ptr[2], ef_ptr[3])); + } + break; + case EF_AOSVS: + if (eb_datalen >= 5) { + Info(slide, 0, ((char *)slide, LoadFarString(AOSVSdata), + ((int)(uch)ef_ptr[4])/10, ((int)(uch)ef_ptr[4])%10)); + } + break; + case EF_MD5: + if (eb_datalen >= 19) { + char md5[33]; + int i; + + for (i = 0; i < 16; ++i) + sprintf(&md5[i<<1], "%02x", ef_ptr[15-i]); + md5[32] = '\0'; + Info(slide, 0, ((char *)slide, LoadFarString(MD5data), + md5)); + break; + } /* else: fall through !! */ + default: + if (eb_datalen > 0) { + ush i, n; + + if (eb_datalen <= 24) { + Info(slide, 0, ((char *)slide, + LoadFarString(ColonIndent))); + n = eb_datalen; + } else { + Info(slide, 0, ((char *)slide, + LoadFarString(First20))); + n = 20; + } + for (i = 0; i < n; ++i) + Info(slide, 0, ((char *)slide, + LoadFarString(efFormat), ef_ptr[i])); + } + break; + } + (*G.message)((zvoid *)&G, (uch *)".", 1L, 0); + + ef_ptr += eb_datalen; + ef_len -= eb_datalen; + } + (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0); + } + + /* high bit == Unix/OS2/NT GMT times (mtime, atime); next bit == UID/GID */ + if ((xattr = (ush)((G.crec.external_file_attributes & 0xC000) >> 12)) & 8) + { + if (hostnum == UNIX_ || hostnum == FS_HPFS_ || hostnum == FS_NTFS_) + { + Info(slide, 0, ((char *)slide, LoadFarString(lExtraFieldType), + "is", EF_IZUNIX, LoadFarStringSmall(efIZUnix), + (unsigned)(xattr&12), (xattr&4)? efIZuid : efIZnouid)); + if (*pEndprev > 0L) + *pEndprev += (ulg)(xattr&12); + } + else if (hostnum == FS_FAT_ && !(xattr&4)) + Info(slide, 0, ((char *)slide, LoadFarString(lExtraFieldType), + "may be", EF_IZUNIX, LoadFarStringSmall(efIZUnix), 8, + efIZnouid)); + } + + if (!G.crec.file_comment_length) + Info(slide, 0, ((char *)slide, LoadFarString(NoFileComment))); + else { + Info(slide, 0, ((char *)slide, LoadFarString(FileCommBegin))); + if ((error = do_string(__G__ G.crec.file_comment_length, DISPL_8)) != + PK_COOL) + { + error_in_archive = error; /* might be warning */ + if (error > PK_WARN) /* fatal */ + return error; + } + Info(slide, 0, ((char *)slide, LoadFarString(FileCommEnd))); + } + + return error_in_archive; + +} /* end function zi_long() */ + + + + + +/*************************/ +/* Function zi_short() */ +/*************************/ + +static int zi_short(__G) /* return PK-type error code */ + __GDEF +{ +#ifdef USE_EF_UT_TIME + iztimes z_utime; + time_t *z_modtim; +#endif + int k, error, error_in_archive=PK_COOL; + ush methnum, hostnum, hostver, xattr; + char *p, workspace[12], attribs[16]; + char methbuf[5]; + static ZCONST char dtype[5]="NXFS"; /* normal, maximum, fast, superfast */ + static ZCONST char Far os[NUM_HOSTS+1][4] = { + "fat", "ami", "vms", "unx", "cms", "atr", "hpf", "mac", "zzz", + "cpm", "t20", "ntf", "qds", "aco", "vft", "mvs", "be ", "nsk", + "???" + }; + static ZCONST char Far method[NUM_METHODS+1][5] = { + "stor", "shrk", "re:1", "re:2", "re:3", "re:4", "i#:#", "tokn", + "def#", "edef", "dcli", "u###" + }; + + +/*--------------------------------------------------------------------------- + Print out various interesting things about the compressed file. + ---------------------------------------------------------------------------*/ + + methnum = (ush)MIN(G.crec.compression_method, NUM_METHODS); + hostnum = (ush)(G.pInfo->hostnum); + hostver = G.crec.version_made_by[0]; +/* + extnum = MIN(G.crec.version_needed_to_extract[1], NUM_HOSTS); + extver = G.crec.version_needed_to_extract[0]; + */ + + zfstrcpy(methbuf, method[methnum]); + if (methnum == IMPLODED) { + methbuf[1] = (char)((G.crec.general_purpose_bit_flag & 2)? '8' : '4'); + methbuf[3] = (char)((G.crec.general_purpose_bit_flag & 4)? '3' : '2'); + } else if (methnum == DEFLATED) { + ush dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3); + methbuf[3] = dtype[dnum]; + } else if (methnum >= NUM_METHODS) { /* unknown */ + sprintf(&methbuf[1], "%03u", G.crec.compression_method); + } + + for (k = 0; k < 15; ++k) + attribs[k] = ' '; + attribs[15] = 0; + + xattr = (ush)((G.crec.external_file_attributes >> 16) & 0xFFFF); + switch (hostnum) { + case VMS_: + { int i, j; + + for (k = 0; k < 12; ++k) + workspace[k] = 0; + if (xattr & VMS_IRUSR) + workspace[0] = 'R'; + if (xattr & VMS_IWUSR) { + workspace[1] = 'W'; + workspace[3] = 'D'; + } + if (xattr & VMS_IXUSR) + workspace[2] = 'E'; + if (xattr & VMS_IRGRP) + workspace[4] = 'R'; + if (xattr & VMS_IWGRP) { + workspace[5] = 'W'; + workspace[7] = 'D'; + } + if (xattr & VMS_IXGRP) + workspace[6] = 'E'; + if (xattr & VMS_IROTH) + workspace[8] = 'R'; + if (xattr & VMS_IWOTH) { + workspace[9] = 'W'; + workspace[11] = 'D'; + } + if (xattr & VMS_IXOTH) + workspace[10] = 'E'; + + p = attribs; + for (k = j = 0; j < 3; ++j) { /* groups of permissions */ + for (i = 0; i < 4; ++i, ++k) /* perms within a group */ + if (workspace[k]) + *p++ = workspace[k]; + *p++ = ','; /* group separator */ + } + *--p = ' '; /* overwrite last comma */ + if ((p - attribs) < 12) + sprintf(&attribs[12], "%d.%d", hostver/10, hostver%10); + } + break; + + case FS_FAT_: + case FS_HPFS_: + case FS_NTFS_: + case VM_CMS_: + case FS_VFAT_: + case MVS_: + case ACORN_: + xattr = (ush)(G.crec.external_file_attributes & 0xFF); + sprintf(attribs, ".r.-... %d.%d", hostver/10, hostver%10); + attribs[2] = (xattr & 0x01)? '-' : 'w'; + attribs[5] = (xattr & 0x02)? 'h' : '-'; + attribs[6] = (xattr & 0x04)? 's' : '-'; + attribs[4] = (xattr & 0x20)? 'a' : '-'; + if (xattr & 0x10) { + attribs[0] = 'd'; + attribs[3] = 'x'; + } else + attribs[0] = '-'; + if (IS_VOLID(xattr)) + attribs[0] = 'V'; + else if ((p = strrchr(G.filename, '.')) != (char *)NULL) { + ++p; + if (STRNICMP(p, "com", 3) == 0 || STRNICMP(p, "exe", 3) == 0 || + STRNICMP(p, "btm", 3) == 0 || STRNICMP(p, "cmd", 3) == 0 || + STRNICMP(p, "bat", 3) == 0) + attribs[3] = 'x'; + } + break; + + case AMIGA_: + switch (xattr & AMI_IFMT) { + case AMI_IFDIR: attribs[0] = 'd'; break; + case AMI_IFREG: attribs[0] = '-'; break; + default: attribs[0] = '?'; break; + } + attribs[1] = (xattr & AMI_IHIDDEN)? 'h' : '-'; + attribs[2] = (xattr & AMI_ISCRIPT)? 's' : '-'; + attribs[3] = (xattr & AMI_IPURE)? 'p' : '-'; + attribs[4] = (xattr & AMI_IARCHIVE)? 'a' : '-'; + attribs[5] = (xattr & AMI_IREAD)? 'r' : '-'; + attribs[6] = (xattr & AMI_IWRITE)? 'w' : '-'; + attribs[7] = (xattr & AMI_IEXECUTE)? 'e' : '-'; + attribs[8] = (xattr & AMI_IDELETE)? 'd' : '-'; + sprintf(&attribs[12], "%d.%d", hostver/10, hostver%10); + break; + + default: /* assume Unix-like */ + switch ((unsigned)(xattr & UNX_IFMT)) { + case (unsigned)UNX_IFDIR: attribs[0] = 'd'; break; + case (unsigned)UNX_IFREG: attribs[0] = '-'; break; + case (unsigned)UNX_IFLNK: attribs[0] = 'l'; break; + case (unsigned)UNX_IFBLK: attribs[0] = 'b'; break; + case (unsigned)UNX_IFCHR: attribs[0] = 'c'; break; + case (unsigned)UNX_IFIFO: attribs[0] = 'p'; break; + case (unsigned)UNX_IFSOCK: attribs[0] = 's'; break; + default: attribs[0] = '?'; break; + } + attribs[1] = (xattr & UNX_IRUSR)? 'r' : '-'; + attribs[4] = (xattr & UNX_IRGRP)? 'r' : '-'; + attribs[7] = (xattr & UNX_IROTH)? 'r' : '-'; + attribs[2] = (xattr & UNX_IWUSR)? 'w' : '-'; + attribs[5] = (xattr & UNX_IWGRP)? 'w' : '-'; + attribs[8] = (xattr & UNX_IWOTH)? 'w' : '-'; + + if (xattr & UNX_IXUSR) + attribs[3] = (xattr & UNX_ISUID)? 's' : 'x'; + else + attribs[3] = (xattr & UNX_ISUID)? 'S' : '-'; /* S==undefined */ + if (xattr & UNX_IXGRP) + attribs[6] = (xattr & UNX_ISGID)? 's' : 'x'; /* == UNX_ENFMT */ + else + /* attribs[6] = (xattr & UNX_ISGID)? 'l' : '-'; real 4.3BSD */ + attribs[6] = (xattr & UNX_ISGID)? 'S' : '-'; /* SunOS 4.1.x */ + if (xattr & UNX_IXOTH) + attribs[9] = (xattr & UNX_ISVTX)? 't' : 'x'; /* "sticky bit" */ + else + attribs[9] = (xattr & UNX_ISVTX)? 'T' : '-'; /* T==undefined */ + + sprintf(&attribs[12], "%d.%d", hostver/10, hostver%10); + break; + + } /* end switch (hostnum: external attributes format) */ + + Info(slide, 0, ((char *)slide, "%s %s %8lu ", attribs, + LoadFarStringSmall(os[hostnum]), G.crec.ucsize)); + Info(slide, 0, ((char *)slide, "%c", + (G.crec.general_purpose_bit_flag & 1)? + ((G.crec.internal_file_attributes & 1)? 'T' : 'B') : /* encrypted */ + ((G.crec.internal_file_attributes & 1)? 't' : 'b'))); /* plaintext */ + k = (G.crec.extra_field_length || + /* a local-only "UX" (old Unix/OS2/NT GMT times "IZUNIX") e.f.? */ + ((G.crec.external_file_attributes & 0x8000) && + (hostnum == UNIX_ || hostnum == FS_HPFS_ || hostnum == FS_NTFS_))); + Info(slide, 0, ((char *)slide, "%c", k? + ((G.crec.general_purpose_bit_flag & 8)? 'X' : 'x') : /* extra field */ + ((G.crec.general_purpose_bit_flag & 8)? 'l' : '-'))); /* no extra field */ + /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ extended local header or not */ + + if (uO.lflag == 4) { + ulg csiz = G.crec.csize; + + if (G.crec.general_purpose_bit_flag & 1) + csiz -= 12; /* if encrypted, don't count encryption header */ + Info(slide, 0, ((char *)slide, "%3d%%", + (ratio(G.crec.ucsize,csiz)+5)/10)); + } else if (uO.lflag == 5) + Info(slide, 0, ((char *)slide, " %8lu", G.crec.csize)); + + /* Read the extra field, if any. The extra field info may be used + * in the file modification time section, below. + */ + if ((error = do_string(__G__ G.crec.extra_field_length, EXTRA_FIELD)) != 0) + { + if (G.extra_field != NULL) { + free(G.extra_field); + G.extra_field = NULL; + } + error_in_archive = error; + /* We do not return prematurely in case of a "fatal" error (PK_EOF). + * This does not hurt here, because we do not need to read from the + * zipfile again before the end of this function. + */ + } + + /* For printing of date & time, a "char d_t_buf[16]" is required. + * To save stack space, we reuse the "char attribs[16]" buffer whose + * content is no longer needed. + */ +# define d_t_buf attribs +#ifdef USE_EF_UT_TIME + z_modtim = G.extra_field && +#ifdef IZ_CHECK_TZ + G.tz_is_valid && +#endif + (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1, + G.crec.last_mod_dos_datetime, &z_utime, NULL) + & EB_UT_FL_MTIME) + ? &z_utime.mtime : NULL; + TIMET_TO_NATIVE(z_utime.mtime) /* NOP unless MSC 7.0 or Macintosh */ + d_t_buf[0] = (char)0; /* signal "show local time" */ +#else +# define z_modtim NULL +#endif + Info(slide, 0, ((char *)slide, " %s %s ", methbuf, + zi_time(__G__ &G.crec.last_mod_dos_datetime, z_modtim, d_t_buf))); + fnprint(__G); + +/*--------------------------------------------------------------------------- + Skip the file comment, if any (the filename has already been printed, + above). That finishes up this file entry... + ---------------------------------------------------------------------------*/ + + SKIP_(G.crec.file_comment_length) + + return error_in_archive; + +} /* end function zi_short() */ + + + + + +/**************************************/ +/* Function zi_showMacTypeCreator() */ +/**************************************/ + +static void zi_showMacTypeCreator(__G__ ebfield) + __GDEF + uch *ebfield; +{ + /* not every Type / Creator character is printable */ + if (isprint(ebfield[0]) && isprint(ebfield[1]) && + isprint(ebfield[2]) && isprint(ebfield[3]) && + isprint(ebfield[4]) && isprint(ebfield[5]) && + isprint(ebfield[6]) && isprint(ebfield[7])) { + Info(slide, 0, ((char *)slide, LoadFarString(MacOSdata), + ebfield[0], ebfield[1], ebfield[2], ebfield[3], + ebfield[4], ebfield[5], ebfield[6], ebfield[7])); + } else { + Info(slide, 0, ((char *)slide, LoadFarString(MacOSdata1), + (((ulg)ebfield[0]) << 24) + + (((ulg)ebfield[1]) << 16) + + (((ulg)ebfield[2]) << 8) + + ((ulg)ebfield[3]), + (((ulg)ebfield[4]) << 24) + + (((ulg)ebfield[5]) << 16) + + (((ulg)ebfield[6]) << 8) + + ((ulg)ebfield[7]))); + } +} /* end function zi_showMacTypeCreator() */ + + + + + +/************************/ +/* Function zi_time() */ +/************************/ + +static char *zi_time(__G__ datetimez, modtimez, d_t_str) + __GDEF + ZCONST ulg *datetimez; + ZCONST time_t *modtimez; + char *d_t_str; +{ + unsigned yr, mo, dy, hh, mm, ss; + char monthbuf[4]; + ZCONST char *monthstr; + static ZCONST char Far month[12][4] = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" + }; +#ifdef USE_EF_UT_TIME + struct tm *t; +#endif + + + +/*--------------------------------------------------------------------------- + Convert the file-modification date and time info to a string of the form + "1991 Feb 23 17:15:00", "23-Feb-91 17:15" or "19910223.171500", depending + on values of lflag and T_flag. If using Unix-time extra fields, convert + to local time or not, depending on value of first character in d_t_str[]. + ---------------------------------------------------------------------------*/ + +#ifdef USE_EF_UT_TIME + if (modtimez != NULL) { +#ifndef NO_GMTIME + /* check for our secret message from above... */ + t = (d_t_str[0] == (char)1)? gmtime(modtimez) : localtime(modtimez); +#else + t = localtime(modtimez); +#endif + if (uO.lflag > 9 && t == (struct tm *)NULL) + /* time conversion error in verbose listing format, + * return string with '?' instead of data + */ + return (strcpy(d_t_str, LoadFarString(YMDHMSTimeError))); + } else + t = (struct tm *)NULL; + if (t != (struct tm *)NULL) { + mo = (unsigned)(t->tm_mon + 1); + dy = (unsigned)(t->tm_mday); + yr = (unsigned)(t->tm_year); + + hh = (unsigned)(t->tm_hour); + mm = (unsigned)(t->tm_min); + ss = (unsigned)(t->tm_sec); + } else +#endif /* USE_EF_UT_TIME */ + { + yr = ((unsigned)(*datetimez >> 25) & 0x7f) + 80; + mo = ((unsigned)(*datetimez >> 21) & 0x0f); + dy = ((unsigned)(*datetimez >> 16) & 0x1f); + + hh = (((unsigned)*datetimez >> 11) & 0x1f); + mm = (((unsigned)*datetimez >> 5) & 0x3f); + ss = (((unsigned)*datetimez << 1) & 0x3e); + } + + if (mo == 0 || mo > 12) { + sprintf(monthbuf, LoadFarString(BogusFmt), mo); + monthstr = monthbuf; + } else + monthstr = LoadFarStringSmall(month[mo-1]); + + if (uO.lflag > 9) /* verbose listing format */ + sprintf(d_t_str, LoadFarString(YMDHMSTime), yr+1900, monthstr, dy, hh, + mm, ss); + else if (uO.T_flag) + sprintf(d_t_str, LoadFarString(DecimalTime), yr+1900, mo, dy, hh, mm, + ss); + else /* was: if ((uO.lflag >= 3) && (uO.lflag <= 5)) */ + sprintf(d_t_str, LoadFarString(DMYHMTime), dy, monthstr, yr%100, hh, + mm); + + return d_t_str; + +} /* end function zi_time() */ + +#endif /* !NO_ZIPINFO */ diff --git a/Build/source/extra/xz-4.999.9beta/ABOUT-NLS b/Build/source/extra/xz-4.999.9beta/ABOUT-NLS new file mode 100644 index 00000000000..ec20977e060 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/ABOUT-NLS @@ -0,0 +1,1101 @@ +1 Notes on the Free Translation Project +*************************************** + +Free software is going international! The Free Translation Project is +a way to get maintainers of free software, translators, and users all +together, so that free software will gradually become able to speak many +languages. A few packages already provide translations for their +messages. + + If you found this `ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU `gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU `gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work on translations can contact the appropriate team. + + When reporting bugs in the `intl/' directory or bugs which may be +related to internationalization, you should tell about the version of +`gettext' which is used. The information can be found in the +`intl/VERSION' file, in internationalized packages. + +1.1 Quick configuration advice +============================== + +If you want to exploit the full power of internationalization, you +should configure it using + + ./configure --with-included-gettext + +to force usage of internationalizing routines provided within this +package, despite the existence of internationalizing capabilities in the +operating system where this package is being installed. So far, only +the `gettext' implementation in the GNU C library version 2 provides as +many features (such as locale alias, message inheritance, automatic +charset conversion or plural form handling) as the implementation here. +It is also not possible to offer this additional functionality on top +of a `catgets' implementation. Future versions of GNU `gettext' will +very likely convey even more functionality. So it might be a good idea +to change to GNU `gettext' as soon as possible. + + So you need _not_ provide this option if you are using GNU libc 2 or +you have installed a recent copy of the GNU gettext package with the +included `libintl'. + +1.2 INSTALL Matters +=================== + +Some packages are "localizable" when properly installed; the programs +they contain can be made to speak your own native language. Most such +packages use GNU `gettext'. Other packages have their own ways to +internationalization, predating GNU `gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU `gettext' functions. If not, the included GNU +`gettext' library will be used. This library is wholly contained +within this package, usually in the `intl/' subdirectory, so prior +installation of the GNU `gettext' package is _not_ required. +Installers may use special options at configuration time for changing +the default behaviour. The commands: + + ./configure --with-included-gettext + ./configure --disable-nls + +will, respectively, bypass any pre-existing `gettext' to use the +internationalizing routines provided within this package, or else, +_totally_ disable translation of messages. + + When you already have GNU `gettext' installed on your system and run +configure without an option for your new package, `configure' will +probably detect the previously built and installed `libintl.a' file and +will decide to use this. This might not be desirable. You should use +the more recent version of the GNU `gettext' library. I.e. if the file +`intl/VERSION' shows that the library which comes with this package is +more recent, you should use + + ./configure --with-included-gettext + +to prevent auto-detection. + + The configuration process will not test for the `catgets' function +and therefore it will not be used. The reason is that even an +emulation of `gettext' on top of `catgets' could not provide all the +extensions of the GNU `gettext' library. + + Internationalized packages usually have many `po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at `configure' time by using the +`--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable `LINGUAS' +may be set, prior to configuration, to limit the installed set. +`LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +1.3 Using This Package +====================== + +As a user, if your language has been installed for this package, you +only have to set the `LANG' environment variable to the appropriate +`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, +and `CC' is an ISO 3166 two-letter country code. For example, let's +suppose that you speak German and live in Germany. At the shell +prompt, merely execute `setenv LANG de_DE' (in `csh'), +`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). +This can be done from your `.login' or `.profile' file, once and for +all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + The locale naming convention of `LL_CC', with `LL' denoting the +language and `CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are +used, such as `LL' or `LL_CC.ENCODING'. You can get the list of +locales supported by your system for your language by running the +command `locale -a | grep '^LL''. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' +for the purpose of message handling, but you still need to have `LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather +read translations in German than English for when Swedish is not +available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. + + Special advice for Norwegian users: The language code for Norwegian +bokma*l changed from `no' to `nb' recently (in 2003). During the +transition period, while some message catalogs for this language are +installed under `nb' and some older ones under `no', it's recommended +for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and +older translations are used. + + In the `LANGUAGE' environment variable, but not in the `LANG' +environment variable, `LL_CC' combinations can be abbreviated as `LL' +to denote the language's main dialect. For example, `de' is equivalent +to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' +(Portuguese as spoken in Portugal) in this context. + +1.4 Translating Teams +===================== + +For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" +area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +`-request' appended. For example, speakers of Swedish can send a +message to `sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate +_actively_ in translations, or at solving translational difficulties, +rather than merely lurking around. If your team does not exist yet and +you want to start one, or if you are unsure about what to do or how to +get started, please write to `translation@iro.umontreal.ca' to reach the +coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skills are praised more than +programming skills, here. + +1.5 Available Packages +====================== + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of October +2006. The matrix shows, in regard of each package, for which languages +PO files have been submitted to translation coordination, with a +translation percentage of at least 50%. + + Ready PO files af am ar az be bg bs ca cs cy da de el en en_GB eo + +----------------------------------------------------+ + GNUnet | [] | + a2ps | [] [] [] [] [] | + aegis | () | + ant-phone | () | + anubis | [] | + ap-utils | | + aspell | [] [] [] [] [] | + bash | [] [] [] | + batchelor | [] | + bfd | | + bibshelf | [] | + binutils | [] | + bison | [] [] | + bison-runtime | | + bluez-pin | [] [] [] [] [] | + cflow | [] | + clisp | [] [] | + console-tools | [] [] | + coreutils | [] [] [] | + cpio | | + cpplib | [] [] [] | + cryptonit | [] | + darkstat | [] () [] | + dialog | [] [] [] [] [] [] | + diffutils | [] [] [] [] [] [] | + doodle | [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] | + error | [] [] [] [] | + fetchmail | [] [] () [] | + fileutils | [] [] | + findutils | [] [] [] | + flex | [] [] [] | + fslint | [] | + gas | | + gawk | [] [] [] | + gbiff | [] | + gcal | [] | + gcc | [] | + gettext-examples | [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] | + gettext-tools | [] [] | + gimp-print | [] [] [] [] | + gip | [] | + gliv | [] | + glunarclock | [] | + gmult | [] [] | + gnubiff | () | + gnucash | () () [] | + gnucash-glossary | [] () | + gnuedu | | + gnulib | [] [] [] [] [] [] | + gnunet-gtk | | + gnutls | | + gpe-aerial | [] [] | + gpe-beam | [] [] | + gpe-calendar | | + gpe-clock | [] [] | + gpe-conf | [] [] | + gpe-contacts | | + gpe-edit | [] | + gpe-filemanager | | + gpe-go | [] | + gpe-login | [] [] | + gpe-ownerinfo | [] [] | + gpe-package | | + gpe-sketchbook | [] [] | + gpe-su | [] [] | + gpe-taskmanager | [] [] | + gpe-timesheet | [] | + gpe-today | [] [] | + gpe-todo | | + gphoto2 | [] [] [] [] | + gprof | [] [] | + gpsdrive | () () | + gramadoir | [] [] | + grep | [] [] [] [] [] [] | + gretl | | + gsasl | | + gss | | + gst-plugins | [] [] [] [] | + gst-plugins-base | [] [] [] | + gst-plugins-good | [] [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] [] [] | + gtick | () | + gtkam | [] [] [] | + gtkorphan | [] [] | + gtkspell | [] [] [] [] | + gutenprint | [] | + hello | [] [] [] [] [] | + id-utils | [] [] | + impost | | + indent | [] [] [] | + iso_3166 | [] [] | + iso_3166_2 | | + iso_4217 | [] | + iso_639 | [] [] | + jpilot | [] | + jtag | | + jwhois | | + kbd | [] [] [] [] | + keytouch | | + keytouch-editor | | + keytouch-keyboa... | | + latrine | () | + ld | [] | + leafpad | [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | [] | + libgpewidget | [] [] [] | + libgpg-error | [] | + libgphoto2 | [] [] | + libgphoto2_port | [] [] | + libgsasl | | + libiconv | [] [] | + libidn | [] [] | + lifelines | [] () | + lilypond | [] | + lingoteach | | + lynx | [] [] [] [] | + m4 | [] [] [] [] | + mailutils | [] | + make | [] [] | + man-db | [] () [] [] | + minicom | [] [] [] | + mysecretdiary | [] [] | + nano | [] [] [] | + nano_1_0 | [] () [] [] | + opcodes | [] | + parted | | + pilot-qof | [] | + psmisc | [] | + pwdutils | | + python | | + qof | | + radius | [] | + recode | [] [] [] [] [] [] | + rpm | [] [] | + screem | | + scrollkeeper | [] [] [] [] [] [] [] [] | + sed | [] [] [] | + sh-utils | [] [] | + shared-mime-info | [] [] [] [] | + sharutils | [] [] [] [] [] [] | + shishi | | + silky | | + skencil | [] () | + sketch | [] () | + solfege | | + soundtracker | [] [] | + sp | [] | + stardict | [] | + system-tools-ba... | [] [] [] [] [] [] [] [] [] | + tar | [] | + texinfo | [] [] [] | + textutils | [] [] [] | + tin | () () | + tp-robot | [] | + tuxpaint | [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] [] | + vorbis-tools | [] [] [] [] | + wastesedge | () | + wdiff | [] [] [] [] | + wget | [] [] | + xchat | [] [] [] [] [] [] | + xkeyboard-config | | + xpad | [] [] | + +----------------------------------------------------+ + af am ar az be bg bs ca cs cy da de el en en_GB eo + 10 0 1 2 9 22 1 42 41 2 60 95 16 1 17 16 + + es et eu fa fi fr ga gl gu he hi hr hu id is it + +--------------------------------------------------+ + GNUnet | | + a2ps | [] [] [] () | + aegis | | + ant-phone | [] | + anubis | [] | + ap-utils | [] [] | + aspell | [] [] [] | + bash | [] [] [] | + batchelor | [] [] | + bfd | [] | + bibshelf | [] [] [] | + binutils | [] [] [] | + bison | [] [] [] [] [] [] | + bison-runtime | [] [] [] [] [] | + bluez-pin | [] [] [] [] [] | + cflow | [] | + clisp | [] [] | + console-tools | | + coreutils | [] [] [] [] [] [] | + cpio | [] [] [] | + cpplib | [] [] | + cryptonit | [] | + darkstat | [] () [] [] [] | + dialog | [] [] [] [] [] [] [] [] | + diffutils | [] [] [] [] [] [] [] [] [] | + doodle | [] [] | + e2fsprogs | [] [] [] | + enscript | [] [] [] | + error | [] [] [] [] [] | + fetchmail | [] | + fileutils | [] [] [] [] [] [] | + findutils | [] [] [] [] | + flex | [] [] [] | + fslint | [] | + gas | [] [] | + gawk | [] [] [] [] | + gbiff | [] | + gcal | [] [] | + gcc | [] | + gettext-examples | [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] | + gettext-tools | [] [] [] | + gimp-print | [] [] | + gip | [] [] [] | + gliv | () | + glunarclock | [] [] [] | + gmult | [] [] [] | + gnubiff | () () | + gnucash | () () () | + gnucash-glossary | [] [] | + gnuedu | [] | + gnulib | [] [] [] [] [] [] [] [] | + gnunet-gtk | | + gnutls | | + gpe-aerial | [] [] | + gpe-beam | [] [] | + gpe-calendar | | + gpe-clock | [] [] [] [] | + gpe-conf | [] | + gpe-contacts | [] [] | + gpe-edit | [] [] [] [] | + gpe-filemanager | [] | + gpe-go | [] [] [] | + gpe-login | [] [] [] | + gpe-ownerinfo | [] [] [] [] [] | + gpe-package | [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] [] [] | + gpe-taskmanager | [] [] [] | + gpe-timesheet | [] [] [] [] | + gpe-today | [] [] [] [] | + gpe-todo | [] | + gphoto2 | [] [] [] [] [] | + gprof | [] [] [] [] | + gpsdrive | () () [] () | + gramadoir | [] [] | + grep | [] [] [] [] [] [] [] [] [] [] [] [] | + gretl | [] [] [] | + gsasl | [] [] | + gss | [] | + gst-plugins | [] [] [] | + gst-plugins-base | [] [] | + gst-plugins-good | [] [] [] | + gstreamer | [] [] [] | + gtick | [] | + gtkam | [] [] [] [] | + gtkorphan | [] [] | + gtkspell | [] [] [] [] [] [] | + gutenprint | [] | + hello | [] [] [] [] [] [] [] [] [] [] [] [] [] | + id-utils | [] [] [] [] [] | + impost | [] [] | + indent | [] [] [] [] [] [] [] [] [] [] | + iso_3166 | [] [] [] | + iso_3166_2 | [] | + iso_4217 | [] [] [] [] | + iso_639 | [] [] [] [] [] | + jpilot | [] [] | + jtag | [] | + jwhois | [] [] [] [] [] | + kbd | [] [] | + keytouch | [] | + keytouch-editor | [] | + keytouch-keyboa... | [] | + latrine | [] [] [] | + ld | [] [] | + leafpad | [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | [] | + libgpewidget | [] [] [] [] [] | + libgpg-error | | + libgphoto2 | [] [] [] | + libgphoto2_port | [] [] | + libgsasl | [] [] | + libiconv | [] [] | + libidn | [] [] | + lifelines | () | + lilypond | [] | + lingoteach | [] [] [] | + lynx | [] [] [] | + m4 | [] [] [] [] | + mailutils | [] [] | + make | [] [] [] [] [] [] [] [] | + man-db | () | + minicom | [] [] [] [] | + mysecretdiary | [] [] [] | + nano | [] [] [] [] [] [] | + nano_1_0 | [] [] [] [] [] | + opcodes | [] [] [] [] | + parted | [] [] [] [] | + pilot-qof | | + psmisc | [] [] [] | + pwdutils | | + python | | + qof | [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] [] | + rpm | [] [] | + screem | | + scrollkeeper | [] [] [] | + sed | [] [] [] [] [] | + sh-utils | [] [] [] [] [] [] [] | + shared-mime-info | [] [] [] [] [] [] | + sharutils | [] [] [] [] [] [] [] [] | + shishi | | + silky | [] | + skencil | [] [] | + sketch | [] [] | + solfege | [] | + soundtracker | [] [] [] | + sp | [] | + stardict | [] | + system-tools-ba... | [] [] [] [] [] [] [] [] | + tar | [] [] [] [] [] [] [] | + texinfo | [] [] | + textutils | [] [] [] [] [] | + tin | [] () | + tp-robot | [] [] [] [] | + tuxpaint | [] [] | + unicode-han-tra... | | + unicode-transla... | [] [] | + util-linux | [] [] [] [] [] [] [] | + vorbis-tools | [] [] | + wastesedge | () | + wdiff | [] [] [] [] [] [] [] [] | + wget | [] [] [] [] [] [] [] [] | + xchat | [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] | + xpad | [] [] [] | + +--------------------------------------------------+ + es et eu fa fi fr ga gl gu he hi hr hu id is it + 88 22 14 2 40 115 61 14 1 8 1 6 59 31 0 52 + + ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no + +-------------------------------------------------+ + GNUnet | | + a2ps | () [] [] () | + aegis | () | + ant-phone | [] | + anubis | [] [] [] | + ap-utils | [] | + aspell | [] [] | + bash | [] | + batchelor | [] [] | + bfd | | + bibshelf | [] | + binutils | | + bison | [] [] [] | + bison-runtime | [] [] [] | + bluez-pin | [] [] [] | + cflow | | + clisp | [] | + console-tools | | + coreutils | [] | + cpio | | + cpplib | [] | + cryptonit | [] | + darkstat | [] [] | + dialog | [] [] | + diffutils | [] [] [] | + doodle | | + e2fsprogs | [] | + enscript | [] | + error | [] | + fetchmail | [] [] | + fileutils | [] [] | + findutils | [] | + flex | [] [] | + fslint | [] [] | + gas | | + gawk | [] [] | + gbiff | [] | + gcal | | + gcc | | + gettext-examples | [] [] | + gettext-runtime | [] [] [] | + gettext-tools | [] [] | + gimp-print | [] [] | + gip | [] [] | + gliv | [] | + glunarclock | [] [] | + gmult | [] [] | + gnubiff | | + gnucash | () () | + gnucash-glossary | [] | + gnuedu | | + gnulib | [] [] [] [] | + gnunet-gtk | | + gnutls | | + gpe-aerial | [] | + gpe-beam | [] | + gpe-calendar | [] | + gpe-clock | [] [] [] | + gpe-conf | [] [] | + gpe-contacts | [] | + gpe-edit | [] [] [] | + gpe-filemanager | [] [] | + gpe-go | [] [] [] | + gpe-login | [] [] [] | + gpe-ownerinfo | [] [] | + gpe-package | [] [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] [] | + gpe-taskmanager | [] [] [] [] | + gpe-timesheet | [] | + gpe-today | [] [] | + gpe-todo | [] | + gphoto2 | [] [] | + gprof | | + gpsdrive | () () () | + gramadoir | () | + grep | [] [] [] [] | + gretl | | + gsasl | [] | + gss | | + gst-plugins | [] | + gst-plugins-base | | + gst-plugins-good | [] | + gstreamer | [] | + gtick | | + gtkam | [] | + gtkorphan | [] | + gtkspell | [] [] | + gutenprint | | + hello | [] [] [] [] [] [] | + id-utils | [] | + impost | | + indent | [] [] | + iso_3166 | [] | + iso_3166_2 | [] | + iso_4217 | [] [] [] | + iso_639 | [] [] | + jpilot | () () () | + jtag | | + jwhois | [] | + kbd | [] | + keytouch | [] | + keytouch-editor | | + keytouch-keyboa... | | + latrine | [] | + ld | | + leafpad | [] [] | + libc | [] [] [] [] [] | + libexif | | + libextractor | | + libgpewidget | [] | + libgpg-error | | + libgphoto2 | [] | + libgphoto2_port | [] | + libgsasl | [] | + libiconv | | + libidn | [] [] | + lifelines | [] | + lilypond | | + lingoteach | [] | + lynx | [] [] | + m4 | [] [] | + mailutils | | + make | [] [] [] | + man-db | () | + minicom | [] | + mysecretdiary | [] | + nano | [] [] [] | + nano_1_0 | [] [] [] | + opcodes | [] | + parted | [] [] | + pilot-qof | | + psmisc | [] [] [] | + pwdutils | | + python | | + qof | | + radius | | + recode | [] | + rpm | [] [] | + screem | [] | + scrollkeeper | [] [] [] [] | + sed | [] [] | + sh-utils | [] [] | + shared-mime-info | [] [] [] [] [] | + sharutils | [] [] | + shishi | | + silky | [] | + skencil | | + sketch | | + solfege | | + soundtracker | | + sp | () | + stardict | [] [] | + system-tools-ba... | [] [] [] [] | + tar | [] [] [] | + texinfo | [] [] [] | + textutils | [] [] [] | + tin | | + tp-robot | [] | + tuxpaint | [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] | + vorbis-tools | [] | + wastesedge | [] | + wdiff | [] [] | + wget | [] [] | + xchat | [] [] [] [] | + xkeyboard-config | [] | + xpad | [] [] [] | + +-------------------------------------------------+ + ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no + 52 24 2 2 1 3 0 2 3 21 0 15 1 97 5 1 + + nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta + +------------------------------------------------------+ + GNUnet | | + a2ps | () [] [] [] [] [] [] | + aegis | () () | + ant-phone | [] [] | + anubis | [] [] [] | + ap-utils | () | + aspell | [] [] | + bash | [] [] [] | + batchelor | [] [] | + bfd | | + bibshelf | [] | + binutils | [] [] | + bison | [] [] [] [] [] | + bison-runtime | [] [] [] [] | + bluez-pin | [] [] [] [] [] [] [] [] [] | + cflow | [] | + clisp | [] | + console-tools | [] | + coreutils | [] [] [] [] | + cpio | [] [] [] | + cpplib | [] | + cryptonit | [] [] | + darkstat | [] [] [] [] [] [] | + dialog | [] [] [] [] [] [] [] [] [] | + diffutils | [] [] [] [] [] [] | + doodle | [] [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] [] | + error | [] [] [] [] | + fetchmail | [] [] [] | + fileutils | [] [] [] [] [] | + findutils | [] [] [] [] [] [] | + flex | [] [] [] [] [] | + fslint | [] [] [] [] | + gas | | + gawk | [] [] [] [] | + gbiff | [] | + gcal | [] | + gcc | [] | + gettext-examples | [] [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] [] [] | + gimp-print | [] [] | + gip | [] [] [] [] | + gliv | [] [] [] [] | + glunarclock | [] [] [] [] [] [] | + gmult | [] [] [] [] | + gnubiff | () | + gnucash | () [] | + gnucash-glossary | [] [] [] | + gnuedu | | + gnulib | [] [] [] [] [] | + gnunet-gtk | [] | + gnutls | [] [] | + gpe-aerial | [] [] [] [] [] [] [] | + gpe-beam | [] [] [] [] [] [] [] | + gpe-calendar | [] | + gpe-clock | [] [] [] [] [] [] [] [] | + gpe-conf | [] [] [] [] [] [] [] | + gpe-contacts | [] [] [] [] [] | + gpe-edit | [] [] [] [] [] [] [] [] | + gpe-filemanager | [] [] | + gpe-go | [] [] [] [] [] [] | + gpe-login | [] [] [] [] [] [] [] [] | + gpe-ownerinfo | [] [] [] [] [] [] [] [] | + gpe-package | [] [] | + gpe-sketchbook | [] [] [] [] [] [] [] [] | + gpe-su | [] [] [] [] [] [] [] [] | + gpe-taskmanager | [] [] [] [] [] [] [] [] | + gpe-timesheet | [] [] [] [] [] [] [] [] | + gpe-today | [] [] [] [] [] [] [] [] | + gpe-todo | [] [] [] [] | + gphoto2 | [] [] [] [] [] | + gprof | [] [] [] | + gpsdrive | [] [] [] | + gramadoir | [] [] | + grep | [] [] [] [] [] [] [] [] | + gretl | [] | + gsasl | [] [] [] | + gss | [] [] [] | + gst-plugins | [] [] [] [] | + gst-plugins-base | [] | + gst-plugins-good | [] [] [] [] | + gstreamer | [] [] [] | + gtick | [] | + gtkam | [] [] [] [] | + gtkorphan | [] | + gtkspell | [] [] [] [] [] [] [] [] | + gutenprint | [] | + hello | [] [] [] [] [] [] [] [] | + id-utils | [] [] [] [] | + impost | [] | + indent | [] [] [] [] [] [] | + iso_3166 | [] [] [] [] [] [] | + iso_3166_2 | | + iso_4217 | [] [] [] [] | + iso_639 | [] [] [] [] | + jpilot | | + jtag | [] | + jwhois | [] [] [] [] | + kbd | [] [] [] | + keytouch | [] | + keytouch-editor | [] | + keytouch-keyboa... | [] | + latrine | [] [] | + ld | [] | + leafpad | [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | [] [] | + libgpewidget | [] [] [] [] [] [] [] | + libgpg-error | [] [] | + libgphoto2 | [] | + libgphoto2_port | [] [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] | + libidn | [] [] () | + lifelines | [] [] | + lilypond | | + lingoteach | [] | + lynx | [] [] [] | + m4 | [] [] [] [] [] | + mailutils | [] [] [] [] | + make | [] [] [] [] | + man-db | [] [] | + minicom | [] [] [] [] [] | + mysecretdiary | [] [] [] [] | + nano | [] [] [] | + nano_1_0 | [] [] [] [] | + opcodes | [] [] | + parted | [] | + pilot-qof | [] | + psmisc | [] [] | + pwdutils | [] [] | + python | | + qof | [] [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] | + rpm | [] [] [] [] | + screem | | + scrollkeeper | [] [] [] [] [] [] [] | + sed | [] [] [] [] [] [] [] [] [] | + sh-utils | [] [] [] | + shared-mime-info | [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | [] | + silky | [] | + skencil | [] [] [] | + sketch | [] [] [] | + solfege | [] | + soundtracker | [] [] | + sp | | + stardict | [] [] [] | + system-tools-ba... | [] [] [] [] [] [] [] [] [] | + tar | [] [] [] [] [] | + texinfo | [] [] [] [] | + textutils | [] [] [] | + tin | () | + tp-robot | [] | + tuxpaint | [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] [] | + vorbis-tools | [] [] | + wastesedge | | + wdiff | [] [] [] [] [] [] | + wget | [] [] [] [] | + xchat | [] [] [] [] [] [] [] | + xkeyboard-config | [] [] | + xpad | [] [] [] | + +------------------------------------------------------+ + nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta + 0 2 3 58 30 54 5 73 72 4 40 46 11 50 128 2 + + tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu + +---------------------------------------------------+ + GNUnet | [] | 2 + a2ps | [] [] [] | 19 + aegis | | 0 + ant-phone | [] [] | 6 + anubis | [] [] [] | 11 + ap-utils | () [] | 4 + aspell | [] [] [] | 15 + bash | [] | 11 + batchelor | [] [] | 9 + bfd | | 1 + bibshelf | [] | 7 + binutils | [] [] [] | 9 + bison | [] [] [] | 19 + bison-runtime | [] [] [] | 15 + bluez-pin | [] [] [] [] [] [] | 28 + cflow | [] [] | 5 + clisp | | 6 + console-tools | [] [] | 5 + coreutils | [] [] | 16 + cpio | [] [] [] | 9 + cpplib | [] [] [] [] | 11 + cryptonit | | 5 + darkstat | [] () () | 15 + dialog | [] [] [] [] [] | 30 + diffutils | [] [] [] [] | 28 + doodle | [] | 6 + e2fsprogs | [] [] | 10 + enscript | [] [] [] | 16 + error | [] [] [] [] | 18 + fetchmail | [] [] | 12 + fileutils | [] [] [] | 18 + findutils | [] [] [] | 17 + flex | [] [] | 15 + fslint | [] | 9 + gas | [] | 3 + gawk | [] [] | 15 + gbiff | [] | 5 + gcal | [] | 5 + gcc | [] [] [] | 6 + gettext-examples | [] [] [] [] [] [] | 27 + gettext-runtime | [] [] [] [] [] [] | 28 + gettext-tools | [] [] [] [] [] | 19 + gimp-print | [] [] | 12 + gip | [] [] | 12 + gliv | [] [] | 8 + glunarclock | [] [] [] | 15 + gmult | [] [] [] [] | 15 + gnubiff | [] | 1 + gnucash | () | 2 + gnucash-glossary | [] [] | 9 + gnuedu | [] | 2 + gnulib | [] [] [] [] [] | 28 + gnunet-gtk | | 1 + gnutls | | 2 + gpe-aerial | [] [] | 14 + gpe-beam | [] [] | 14 + gpe-calendar | [] | 3 + gpe-clock | [] [] [] [] | 21 + gpe-conf | [] [] | 14 + gpe-contacts | [] [] | 10 + gpe-edit | [] [] [] [] | 20 + gpe-filemanager | [] | 6 + gpe-go | [] [] | 15 + gpe-login | [] [] [] [] [] | 21 + gpe-ownerinfo | [] [] [] [] | 21 + gpe-package | [] | 6 + gpe-sketchbook | [] [] | 16 + gpe-su | [] [] [] | 20 + gpe-taskmanager | [] [] [] | 20 + gpe-timesheet | [] [] [] [] | 18 + gpe-today | [] [] [] [] [] | 21 + gpe-todo | [] | 7 + gphoto2 | [] [] [] [] | 20 + gprof | [] [] | 11 + gpsdrive | | 4 + gramadoir | [] | 7 + grep | [] [] [] [] | 34 + gretl | | 4 + gsasl | [] [] | 8 + gss | [] | 5 + gst-plugins | [] [] [] | 15 + gst-plugins-base | [] [] [] | 9 + gst-plugins-good | [] [] [] [] [] | 20 + gstreamer | [] [] [] | 17 + gtick | [] | 3 + gtkam | [] | 13 + gtkorphan | [] | 7 + gtkspell | [] [] [] [] [] [] | 26 + gutenprint | | 3 + hello | [] [] [] [] [] | 37 + id-utils | [] [] | 14 + impost | [] | 4 + indent | [] [] [] [] | 25 + iso_3166 | [] [] [] [] | 16 + iso_3166_2 | | 2 + iso_4217 | [] [] | 14 + iso_639 | [] | 14 + jpilot | [] [] [] [] | 7 + jtag | [] | 3 + jwhois | [] [] [] | 13 + kbd | [] [] | 12 + keytouch | [] | 4 + keytouch-editor | | 2 + keytouch-keyboa... | [] | 3 + latrine | [] [] | 8 + ld | [] [] [] [] | 8 + leafpad | [] [] [] [] | 23 + libc | [] [] [] | 23 + libexif | [] | 4 + libextractor | [] | 5 + libgpewidget | [] [] [] | 19 + libgpg-error | [] | 4 + libgphoto2 | [] | 8 + libgphoto2_port | [] [] [] | 11 + libgsasl | [] | 8 + libiconv | [] | 7 + libidn | [] [] | 10 + lifelines | | 4 + lilypond | | 2 + lingoteach | [] | 6 + lynx | [] [] [] | 15 + m4 | [] [] [] | 18 + mailutils | [] | 8 + make | [] [] [] | 20 + man-db | [] | 6 + minicom | [] | 14 + mysecretdiary | [] [] | 12 + nano | [] [] | 17 + nano_1_0 | [] [] [] | 18 + opcodes | [] [] | 10 + parted | [] [] [] | 10 + pilot-qof | [] | 3 + psmisc | [] | 10 + pwdutils | [] | 3 + python | | 0 + qof | [] | 4 + radius | [] | 6 + recode | [] [] [] | 25 + rpm | [] [] [] [] | 14 + screem | [] | 2 + scrollkeeper | [] [] [] [] | 26 + sed | [] [] [] | 22 + sh-utils | [] | 15 + shared-mime-info | [] [] [] [] | 24 + sharutils | [] [] [] | 23 + shishi | | 1 + silky | [] | 4 + skencil | [] | 7 + sketch | | 6 + solfege | | 2 + soundtracker | [] [] | 9 + sp | [] | 3 + stardict | [] [] [] [] | 11 + system-tools-ba... | [] [] [] [] [] [] [] | 37 + tar | [] [] [] [] | 20 + texinfo | [] [] [] | 15 + textutils | [] [] [] | 17 + tin | | 1 + tp-robot | [] [] [] | 10 + tuxpaint | [] [] [] | 16 + unicode-han-tra... | | 0 + unicode-transla... | | 2 + util-linux | [] [] [] | 20 + vorbis-tools | [] [] | 11 + wastesedge | | 1 + wdiff | [] [] | 22 + wget | [] [] [] | 19 + xchat | [] [] [] [] | 29 + xkeyboard-config | [] [] [] [] | 11 + xpad | [] [] [] | 14 + +---------------------------------------------------+ + 77 teams tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu + 170 domains 0 1 1 77 39 0 136 10 1 48 5 54 0 2028 + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and +distributed as such by its maintainer. There might be an observable +lag between the mere existence a PO file and its wide availability in a +distribution. + + If October 2006 seems to be old, you may fetch a more recent copy of +this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date +matrix with full percentage details can be found at +`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. + +1.6 Using `gettext' in new packages +=================================== + +If you are writing a freely available program and want to +internationalize it you are welcome to use GNU `gettext' in your +package. Of course you have to respect the GNU Library General Public +License which covers the use of the GNU `gettext' library. This means +in particular that even non-free programs can use `libintl' as a shared +library, whereas only free software can use `libintl' as a static +library or use modified versions of `libintl'. + + Once the sources are changed appropriately and the setup can handle +the use of `gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact +`translation@iro.umontreal.ca' to make the `.pot' files available to +the translation teams. + diff --git a/Build/source/extra/xz-4.999.9beta/AUTHORS b/Build/source/extra/xz-4.999.9beta/AUTHORS new file mode 100644 index 00000000000..63a9815bc03 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/AUTHORS @@ -0,0 +1,27 @@ + +Authors of XZ Utils +=================== + + XZ Utils is developed and maintained by Lasse Collin + . + + Major parts of liblzma are based on code written by Igor Pavlov, + specifically the LZMA SDK . Without + this code, XZ Utils wouldn't exist. + + The SHA-256 implementation in liblzma is based on the code found from + 7-Zip , which has a modified version of the SHA-256 + code found from Crypto++ . The SHA-256 code + in Crypto++ was written by Kevin Springle and Wei Dai. + + Some scripts have been adapted from gzip. The original versions + were written by Jean-loup Gailly, Charles Levert, and Paul Eggert. + Andrew Dudman helped adapting the script and their man pages for + XZ Utils. + + The GNU Autotools based build system contains files from many authors, + which I'm not trying list here. + + Several people have contributed fixes or reported bugs. Most of them + are mentioned in the file THANKS. + diff --git a/Build/source/extra/xz-4.999.9beta/COPYING b/Build/source/extra/xz-4.999.9beta/COPYING new file mode 100644 index 00000000000..43c90d0598c --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/COPYING @@ -0,0 +1,65 @@ + +XZ Utils Licensing +================== + + Different licenses apply to different files in this package. Here + is a rough summary of which licenses apply to which parts of this + package (but check the individual files to be sure!): + + - liblzma is in the public domain. + + - xz, xzdec, and lzmadec command line tools are in the public + domain unless GNU getopt_long had to be compiled and linked + in from the lib directory. The getopt_long code is under + GNU LGPLv2.1+. + + - The scripts to grep, diff, and view compressed files have been + adapted from gzip. These scripts and their documentation are + under GNU GPLv2+. + + - All the documentation in the doc directory and most of the + XZ Utils specific documentation files in other directories + are in the public domain. + + - Translated messages are in the public domain. + + - The build system contains public domain files, and files that + are under GNU GPLv2+ or GNU GPLv3+. None of these files end up + in the binaries being built. + + - Test files and test code in the tests directory, and debugging + utilities in the debug directory are in the public domain. + + - The extra directory may contain public domain files, and files + that are under various free software licenses. + + You can do whatever you want with the files that have been put into + the public domain. If you find public domain legally problematic, + take the previous sentence as a license grant. If you still find + the lack of copyright legally problematic, you have too many + lawyers. + + As usual, this software is provided "as is", without any warranty. + + If you copy significant amounts of public domain code from XZ Utils + into your project, acknowledging this somewhere in your software is + polite (especially if it is proprietary, non-free software), but + naturally it is not legally required. Here is an example of a good + notice to put into "about box" or into documentation: + + This software includes code from XZ Utils . + + The following license texts are included in the following files: + - COPYING.LGPLv2.1: GNU Lesser General Public License version 2.1 + - COPYING.GPLv2: GNU General Public License version 2 + - COPYING.GPLv3: GNU General Public License version 3 + + Note that the toolchain (compiler, linker etc.) may add some code + pieces that are copyrighted. Thus, it is possible that e.g. liblzma + binary wouldn't actually be in the public domain in its entirety + even though it contains no copyrighted code from the XZ Utils source + package. + + If you have questions, don't hesitate to ask the author(s) for more + information. + diff --git a/Build/source/extra/xz-4.999.9beta/COPYING.GPLv2 b/Build/source/extra/xz-4.999.9beta/COPYING.GPLv2 new file mode 100644 index 00000000000..d511905c164 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/COPYING.GPLv2 @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/Build/source/extra/xz-4.999.9beta/COPYING.GPLv3 b/Build/source/extra/xz-4.999.9beta/COPYING.GPLv3 new file mode 100644 index 00000000000..94a9ed024d3 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/COPYING.GPLv3 @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 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. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Build/source/extra/xz-4.999.9beta/COPYING.LGPLv2.1 b/Build/source/extra/xz-4.999.9beta/COPYING.LGPLv2.1 new file mode 100644 index 00000000000..5ab7695ab8c --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/COPYING.LGPLv2.1 @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/Build/source/extra/xz-4.999.9beta/ChangeLog b/Build/source/extra/xz-4.999.9beta/ChangeLog new file mode 100644 index 00000000000..15102ef62eb --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/ChangeLog @@ -0,0 +1,7041 @@ +commit 682efdc1f9492fdd76c9ce82e7c00ca0768067e8 +Author: Lasse Collin +Date: 2009-08-27 18:36:59 +0300 + + "make dist" fixes + + Makefile.am | 13 ++++++------- + 1 files changed, 6 insertions(+), 7 deletions(-) + +commit c8c184db1c95bf70f78256ec6237845a57f342af +Author: Lasse Collin +Date: 2009-08-27 17:08:33 +0300 + + Update xz man page date. + + src/xz/xz.1 | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 9756fce565e98b8fa5fe6ead296d84e7601ec254 +Author: Lasse Collin +Date: 2009-08-27 17:00:22 +0300 + + Fix the debug directory. + + 6a2eb54092fc625d59921a607ff68cd1a90aa898 and + 71f18e8a066a01dda0c8e5508b135ef104e43e4c required + some changes that weren't applied in debug. + + debug/Makefile.am | 5 +++-- + debug/full_flush.c | 1 + + debug/known_sizes.c | 1 + + debug/memusage.c | 1 + + debug/sync_flush.c | 1 + + 5 files changed, 7 insertions(+), 2 deletions(-) + +commit 77007a7fb20187fcf3d1dd9839c79ace2d63f2ea +Author: Lasse Collin +Date: 2009-08-27 16:36:40 +0300 + + Add missing files to EXTRA_DIST. + + Makefile.am | 11 +++++++---- + 1 files changed, 7 insertions(+), 4 deletions(-) + +commit 04dcbfdeb921e5f361a4487134e91e23fffbe09d +Author: Lasse Collin +Date: 2009-08-27 16:21:22 +0300 + + Bumped version to 4.999.9beta. + + src/liblzma/api/lzma/version.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit fd7618611a22f42a6913bc8d518c9bbc9252d6b4 +Author: Lasse Collin +Date: 2009-08-27 16:17:47 +0300 + + Updated THANKS. + + THANKS | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit c29e76c0f910fca0a90a50b78d337f6c32623e9d +Author: Lasse Collin +Date: 2009-08-27 16:12:52 +0300 + + .xz file format specification 1.0.4 (probably). + + Thanks to Christian von Roques, Peter Lawler, + and Jim Meyering for the fixes. + + doc/xz-file-format.txt | 26 +++++++++++++++----------- + 1 files changed, 15 insertions(+), 11 deletions(-) + +commit 696d7ee3953beaf4f0ed18e78917ccf300431966 +Author: Lasse Collin +Date: 2009-08-27 15:43:54 +0300 + + Require GNU libtool 2.2. + + configure.ac | 13 +++---------- + 1 files changed, 3 insertions(+), 10 deletions(-) + +commit 4c3558aa8305a8f8b6c43b8569eb539717ca9e8d +Author: Lasse Collin +Date: 2009-08-27 15:34:45 +0300 + + Add "dos" to EXTRA_DIST. + + Makefile.am | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 35b29e4424ced5a3ababf132283e519080c7b298 +Author: Lasse Collin +Date: 2009-08-27 15:23:27 +0300 + + Updated TODO. + + TODO | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit 23414377192c21f3f34c84cdfe0ef0fbd06a1dea +Author: Lasse Collin +Date: 2009-08-27 15:17:00 +0300 + + Some xz man page improvements. + + src/xz/xz.1 | 78 ++++++++++++++++++++++++++++++++++++++++++++++------------ + 1 files changed, 62 insertions(+), 16 deletions(-) + +commit 371b04e19fc9051dbaeec51ec0badec6a1f0699d +Author: Lasse Collin +Date: 2009-08-27 10:41:01 +0300 + + Removed doc/bugs.txt. + + doc/bugs.txt | 46 ---------------------------------------------- + 1 files changed, 0 insertions(+), 46 deletions(-) + +commit d88c4072b36d3a76f839185799fb1d91037a1b81 +Author: Lasse Collin +Date: 2009-08-27 10:40:25 +0300 + + Updated README. + + It now includes bug reporting instructions/tips. + + README | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- + 1 files changed, 55 insertions(+), 10 deletions(-) + +commit 92e536d8b8d33a6b12d0802bcd7be4437046f13e +Author: Lasse Collin +Date: 2009-08-27 10:21:18 +0300 + + Fix a typo in FAQ. + + Thanks to Jim Meyering. + + (From now on, I try to always remember to put + the relevant thanks to commit messages.) + + doc/faq.txt | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3e2ba8b58585743e59251e69ad2783eb08357079 +Author: Lasse Collin +Date: 2009-08-27 10:13:46 +0300 + + Updates to liblzma API headers. + + Added lzma_nothrow for every function. It adds + throw() when the header is used in C++ code. + + Some lzma_attrs were added or removed. + + Lots of comments were improved. + + src/liblzma/api/lzma.h | 20 +++++++ + src/liblzma/api/lzma/base.h | 48 +++++++++-------- + src/liblzma/api/lzma/block.h | 38 +++++++------- + src/liblzma/api/lzma/check.h | 22 ++++---- + src/liblzma/api/lzma/container.h | 36 +++++++------ + src/liblzma/api/lzma/filter.h | 81 ++++++++++++++++++----------- + src/liblzma/api/lzma/index.h | 97 +++++++++++++++++++++-------------- + src/liblzma/api/lzma/index_hash.h | 14 +++-- + src/liblzma/api/lzma/lzma.h | 87 ++++++++++++++++--------------- + src/liblzma/api/lzma/stream_flags.h | 12 ++-- + src/liblzma/api/lzma/version.h | 10 ++-- + src/liblzma/api/lzma/vli.h | 7 ++- + 12 files changed, 275 insertions(+), 197 deletions(-) + +commit 8e8ebc17c535a1f8846718059b48417409c37050 +Author: Lasse Collin +Date: 2009-08-18 00:30:09 +0300 + + Install faq.txt. + + Makefile.am | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit b198e770a146e4a41f91a93f0b233713f2515848 +Author: Lasse Collin +Date: 2009-08-18 00:26:48 +0300 + + Updated faq.txt. + + Some questions worth answering were removed, because I + currently don't have good up to date answers to them. + + doc/faq.txt | 239 ++++++++++++++++++----------------------------------------- + 1 files changed, 73 insertions(+), 166 deletions(-) + +commit fe111a25cd788d31b581996e4533910388a7f0a9 +Author: Lasse Collin +Date: 2009-08-17 22:45:50 +0300 + + Some xz man changes. + + src/xz/xz.1 | 88 +++++++++++++++++++++++++++++------------------------------ + 1 files changed, 43 insertions(+), 45 deletions(-) + +commit 10242a21e9abda0c5c6a03501703cc40b8a699a5 +Author: Lasse Collin +Date: 2009-08-16 22:15:42 +0300 + + Updated THANKS. + + THANKS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 3ce1916c83041113b9cad9ead5c97a527cf8aa1d +Author: Lasse Collin +Date: 2009-08-16 22:15:13 +0300 + + Fix data corruption in LZ/LZMA2 encoder. + + Thanks to Jonathan Stott for the bug report. + + src/liblzma/lz/lz_encoder.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 66da129c8ec33dd66acc92f113f7c1ca740ca81a +Author: Lasse Collin +Date: 2009-08-13 15:15:37 +0300 + + Updated INSTALL and PACKAGERS to match the changes + made in --enable-dynamic. + + INSTALL | 20 ++++++++++++++++---- + PACKAGERS | 11 ++++++----- + 2 files changed, 22 insertions(+), 9 deletions(-) + +commit 8238c4b2402f952c4e492e5b778aa272e57b6705 +Author: Lasse Collin +Date: 2009-08-13 15:03:46 +0300 + + Link lzmainfo against shared liblzma by default. + + src/lzmainfo/Makefile.am | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 71f18e8a066a01dda0c8e5508b135ef104e43e4c +Author: Lasse Collin +Date: 2009-08-13 15:00:21 +0300 + + Make --enable-dynamic a tristate option. + + Some programs will by default be linked against static + liblzma and some against shared liblzma. --enable-dynamic + now allows overriding the default to both directions + (all dynamic or all static) even when building both + shared and static liblzma. + + This is quite messy compared to how simple thing it is supposed + to be. The complexity is mostly due to Windows support. + + configure.ac | 77 +++++++++++++++++++++++++++++++++++++++++++--------------- + 1 files changed, 57 insertions(+), 20 deletions(-) + +commit 5aa4678b2342dcfc1d2b31aa9fa4f39c539e4b61 +Author: Lasse Collin +Date: 2009-08-13 12:56:47 +0300 + + Fix xz Makefile.am for the man page. + + install-exec-hook -> install-data-hook + + src/xz/Makefile.am | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit e51b4e49e800bd84e6d589dca2964d3985e88139 +Author: Lasse Collin +Date: 2009-08-13 12:55:45 +0300 + + Add lzmainfo for backward compatibility with LZMA Utils. + + lzmainfo now links against static liblzma. In contrast + to other command line tools in XZ Utils, linking lzmainfo + against static liblzma by default is dumb. This will be + fixed once I have fixed some related issues in configure.ac. + + configure.ac | 1 + + src/Makefile.am | 2 +- + src/lzmainfo/Makefile.am | 29 ++++++ + src/lzmainfo/lzmainfo.1 | 55 +++++++++++ + src/lzmainfo/lzmainfo.c | 242 ++++++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 328 insertions(+), 1 deletions(-) + +commit a4165d0584376d948c213ec93c6065d24ff6a5e7 +Author: Lasse Collin +Date: 2009-08-13 12:42:36 +0300 + + Sync some error messages from xz to xzdec. + + Make xz error message translation usable outside + xz (at least in upcoming lzmainfo). + + src/xz/main.c | 4 ++-- + src/xzdec/xzdec.c | 6 +++--- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit df636eb4e066b4e154ce8e66e82c87ba1db652a6 +Author: Lasse Collin +Date: 2009-08-13 09:37:21 +0300 + + Add xz man page to manfiles in toplevel Makefile.am. + + Makefile.am | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 180bdf58ea5bb07941e0a99b304d9aa832198748 +Author: Lasse Collin +Date: 2009-08-13 09:37:01 +0300 + + Fix first line of xz man page. + + src/xz/xz.1 | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit e1ce2291e759b50ebfcf7cbbcc04cd098f1705a4 +Author: Lasse Collin +Date: 2009-08-10 11:22:31 +0300 + + Added a rough version of the xz man page. + + src/xz/Makefile.am | 15 + + src/xz/xz.1 | 1206 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 1221 insertions(+), 0 deletions(-) + +commit e71903fc6101f1c039d702e335b08aad1e1b4100 +Author: Jonathan Nieder +Date: 2009-08-09 13:41:20 -0500 + + “xzdiff a.xz b.xz†always fails + + Attempts to compare two compressed files result in no output and + exit status 2. + + Instead of going to standard output, ‘diff’ output is being + captured in the xz_status variable along with the exit status from + the decompression commands. Later, when this variable is examined + for nonzero status codes, numerals from dates in the ‘diff’ output + make it appear as though decompression failed. + + So let the ‘diff’ output leak to standard output with another file + descriptor. (This trick is used in all similar contexts elsewhere + in xzdiff and in the analogous context in gzip’s zdiff script.) + + src/scripts/xzdiff.in | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1d314b81aa5b0c4530638ffabd4e0edb52e5362c +Author: Jonathan Nieder +Date: 2009-08-09 13:22:12 -0500 + + xzless: Support compressed standard input + + It can be somewhat confusing that + + less < some_file.txt + + works fine, whereas + + xzless < some_file.txt.xz + + does not. Since version 429, ‘less’ allows a filter specified in + the LESSOPEN environment variable to preprocess its input even if + it comes from standard input, if $LESSOPEN begins with ‘|-’. So + set $LESSOPEN to take advantage of this feature. + + Check less’s version at runtime so xzless can continue to work + with older versions. + + src/scripts/xzless.in | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +commit a7f5d2fe4826ac68839d00059f05004fb81d5c69 +Author: Lasse Collin +Date: 2009-08-09 20:57:46 +0300 + + GPLv2+ not GPLv2 for Doxyfile.in is probably OK. + + Doxyfile.in | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b735cde20cc14857136ae65a0e5d336ed7ddc862 +Author: Lasse Collin +Date: 2009-08-02 00:27:29 +0300 + + Added a copyright notice to Doxyfile.in since it contains + lots of comments from Doxygen. + + It seems that the Doxygen authors' intent is to not apply + their copyright on generated files, but since it doesn't + matter for XZ Utils at all, better safe than sorry. + + Doxyfile.in | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 0fd157cc008446adfc8f91394f5503868025a642 +Author: Lasse Collin +Date: 2009-08-02 00:11:37 +0300 + + Updated THANKS. + + THANKS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit b198da96ff9ac8c89b466b4d196c5f3fe1c7904f +Author: Lasse Collin +Date: 2009-08-02 00:10:22 +0300 + + Updated TODO. + + TODO | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 669413bb2db954bbfde3c4542fddbbab53891eb4 +Author: Lasse Collin +Date: 2009-07-30 12:25:55 +0300 + + Updated THANKS. + + THANKS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit dbbd8fb870ae789d96497911006c869d37148c15 +Author: Jonathan Nieder +Date: 2009-07-28 17:37:24 -0500 + + xzdiff: add missing ;; to case statement + + src/scripts/xzdiff.in | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit adbad2d16cb5909f85d4a429011005613ea62ffe +Author: Lasse Collin +Date: 2009-07-24 13:15:06 +0300 + + Added history.txt to doc_DATA. + + Makefile.am | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit e0236f12569eb36f9b81ce7a1e52e0f73698ac27 +Author: Lasse Collin +Date: 2009-07-24 12:00:40 +0300 + + Updated .gitignore files. + + .gitignore | 36 +++++++++++++++++++----------------- + po/.gitignore | 3 +++ + 2 files changed, 22 insertions(+), 17 deletions(-) + +commit 2f34fb269265e3aba43a2a9c734020a45268826d +Author: Lasse Collin +Date: 2009-07-24 11:34:02 +0300 + + Minor improvements to COPYING. + + COPYING | 11 ++++++++--- + 1 files changed, 8 insertions(+), 3 deletions(-) + +commit 0db1befcfbc120377df4b89923762f16d25f548a +Author: Lasse Collin +Date: 2009-07-23 19:10:55 +0300 + + Fix incorrect usage of getopt_long(), which caused + invalid memory access if XZ_OPT was defined. + + src/xz/args.c | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 8f8ec942d6d21ada2096eaf063411bc8bc7e2d48 +Author: Lasse Collin +Date: 2009-07-20 15:43:32 +0300 + + Avoid internal error with --format=xz --lzma1. + + src/xz/coder.c | 16 ++++++++++++---- + 1 files changed, 12 insertions(+), 4 deletions(-) + +commit 99f9e879a6a8bb54a65da99c12e0f390216c152a +Author: Lasse Collin +Date: 2009-07-19 13:14:20 +0300 + + Major documentation update. + + Installation and packaging instructions were added. + README and other generic docs were revised. + + Some of the documentation files are now installed to $docdir. + + AUTHORS | 35 ++++-- + ChangeLog | 7 +- + INSTALL | 327 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + INSTALL.generic | 302 ++++++++++++++++++++++++++++++++++++++++++++++++++ + Makefile.am | 11 ++ + PACKAGERS | 278 ++++++++++++++++++++++++++++++++++++++++++++++ + README | 263 +++++++++++++++++++------------------------- + THANKS | 17 ++-- + 8 files changed, 1070 insertions(+), 170 deletions(-) + +commit ef4cf1851de89022cba5674784f1a8f6343c15b0 +Author: Lasse Collin +Date: 2009-07-19 11:09:31 +0300 + + Added missing author notice to xzless.in. + + src/scripts/xzless.in | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 4c9c989d45b188667799a7a1d6c728ed43f7bf77 +Author: Lasse Collin +Date: 2009-07-18 18:54:55 +0300 + + Use AC_CONFIG_AUX_DIR to clean up the toplevel directory + a little. + + Fixed a related bug in the toplevel Makefile.am. + + Added the build-aux directory to .gitignore. + + .gitignore | 1 + + Makefile.am | 1 - + configure.ac | 3 ++- + 3 files changed, 3 insertions(+), 2 deletions(-) + +commit 366e436090a7a87215e9bf0e3ddcd55f05b50587 +Author: Lasse Collin +Date: 2009-07-18 14:34:08 +0300 + + Updated the totally outdated TODO file. + + TODO | 117 +++++++++++++++-------------------------------------------------- + 1 files changed, 27 insertions(+), 90 deletions(-) + +commit 64e498c89d8b9966e8663f43bf64d47c26c55c62 +Author: Lasse Collin +Date: 2009-07-18 11:26:39 +0300 + + Added public domain notice into a few files. + + src/common/common_w32res.rc | 9 ++++++++- + src/liblzma/liblzma.pc.in | 7 +++++++ + src/liblzma/liblzma_w32res.rc | 7 +++++++ + src/xz/xz_w32res.rc | 7 +++++++ + src/xzdec/xzdec_w32res.rc | 7 +++++++ + 5 files changed, 36 insertions(+), 1 deletions(-) + +commit a35755c5de808df027675688855d1b621a4fb428 +Author: Lasse Collin +Date: 2009-07-14 21:10:36 +0300 + + Allow extra commas in filter-specific options on xz command line. + + This may slightly ease writing scripts that construct + filter-specific option strings dynamically. + + src/xz/options.c | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +commit 98f3cac1ad31191c5160a7e48398bf85141e941c +Author: Lasse Collin +Date: 2009-07-14 18:04:31 +0300 + + Accept --lzma2=preset=6e where "e" is equivalent to --extreme + when no custom chain is in use. + + src/xz/options.c | 80 +++++++++++++++++++++++++++++++++++++++-------------- + 1 files changed, 59 insertions(+), 21 deletions(-) + +commit d873a09e956363e54bf58c577c8f7e487b6fb464 +Author: Lasse Collin +Date: 2009-07-12 19:08:30 +0300 + + Add dist-hook to create ChangeLog from the commit log, + and to conver the man pages to PDF and plain text, which + may be convenient to those who cannot render man pages. + + Makefile.am | 31 +++++++++++++++++++++++++++++++ + 1 files changed, 31 insertions(+), 0 deletions(-) + +commit cd69a5a6c16c289f6f8e2823b03c72289472270f +Author: Lasse Collin +Date: 2009-07-10 11:39:38 +0300 + + BCJ filters: Reject invalid start offsets with LZMA_OPTIONS_ERROR. + + This is a quick and slightly dirty fix to make the code + conform to the latest file format specification. Without + this patch, it's possible to make corrupt files by + specifying start offset that is not a multiple of the + filter's alignment. Custom start offset is almost never + used, so this was only a minor bug. + + The xz command line tool doesn't validate the start offset, + so one will get a bit unclear error message if trying to use + an invalid start offset. + + src/liblzma/simple/arm.c | 2 +- + src/liblzma/simple/armthumb.c | 2 +- + src/liblzma/simple/ia64.c | 2 +- + src/liblzma/simple/powerpc.c | 2 +- + src/liblzma/simple/simple_coder.c | 5 ++++- + src/liblzma/simple/simple_private.h | 3 ++- + src/liblzma/simple/sparc.c | 2 +- + src/liblzma/simple/x86.c | 2 +- + 8 files changed, 12 insertions(+), 8 deletions(-) + +commit eed9953732b801f6c97317fb3160445a8754180b +Author: Lasse Collin +Date: 2009-07-10 11:33:21 +0300 + + Look for full command names instead of substrings + like "un", "cat", and "lz" when determining if + xz is run as unxz, xzcat, lzma, unlzma, or lzcat. + + This is to ensure that if xz is renamed (e.g. via + --program-transform-name), it doesn't so easily + work in wrong mode. + + src/xz/args.c | 22 +++++++++++++--------- + 1 files changed, 13 insertions(+), 9 deletions(-) + +commit 6f62fa88f4ff7ba78565c314c0e6e71c498fa658 +Author: Lasse Collin +Date: 2009-07-08 23:06:46 +0300 + + Updated THANKS. + + THANKS | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 1754b7e03e2aa7e2e0196807fe8b0f3f5a637b0e +Author: Lasse Collin +Date: 2009-07-08 23:05:29 +0300 + + Portability improvement to version.sh. + + version.sh | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 3bdb53792c0e3e3febe9370e56eda5b08f89410f +Author: Lasse Collin +Date: 2009-07-08 22:50:16 +0300 + + Remove --force from xzdec. + + It was ignored for compatibility with xz, but now that + --decompress --stdout --force copies unrecognized files + as is to stdout, simply ignoring --force in xzdec would + be wrong. xzdec will not support copying unrecognized + data as is to stdout, so it cannot support --force. + + src/xzdec/xzdec.1 | 5 ----- + src/xzdec/xzdec.c | 5 +---- + 2 files changed, 1 insertions(+), 9 deletions(-) + +commit 5f16ef4abf220028a9ddbcb138217597a9455f62 +Author: Lasse Collin +Date: 2009-07-06 10:36:04 +0300 + + Use sed instead of $(SED) so that we don't need to + use AC_PROG_SED. We don't do anything fancy with sed, + so this should work OK. libtool 2.2 sets SED but 1.5 + doesn't, so $(SED) happened to work when using libtool 2.2. + + src/liblzma/Makefile.am | 2 +- + src/scripts/Makefile.am | 28 ++++++++++++++-------------- + src/xz/Makefile.am | 6 +++--- + src/xzdec/Makefile.am | 6 +++--- + 4 files changed, 21 insertions(+), 21 deletions(-) + +commit 96e4b257e101d72072d43e144897d92920270669 +Author: Lasse Collin +Date: 2009-07-05 22:25:17 +0300 + + Major update to the xzgrep and other scripts based on + the latest versions found from gzip CVS repository. + + configure will try to find a POSIX shell to be used by + the scripts. This should ease portability on systems + which have pre-POSIX /bin/sh. + + xzgrep and xzdiff support .xz, .lzma, .gz, and .bz2 files. + xzmore and xzless support only .xz and .lzma files. + + The name of the xz executable used in these scripts is + now correct even if --program-transform-name has been used. + + configure.ac | 14 ++++ + m4/posix-shell.m4 | 63 +++++++++++++++ + src/scripts/Makefile.am | 24 +++--- + src/scripts/xzdiff | 67 ---------------- + src/scripts/xzdiff.1 | 58 +++++++++----- + src/scripts/xzdiff.in | 172 +++++++++++++++++++++++++++++++++++++++++ + src/scripts/xzgrep | 123 ----------------------------- + src/scripts/xzgrep.1 | 85 ++++++++++++-------- + src/scripts/xzgrep.in | 196 +++++++++++++++++++++++++++++++++++++++++++++++ + src/scripts/xzless.1 | 66 ++++++++++++++++ + src/scripts/xzless.in | 51 ++++++++++++ + src/scripts/xzmore | 74 ------------------ + src/scripts/xzmore.1 | 64 ++++++--------- + src/scripts/xzmore.in | 78 +++++++++++++++++++ + 14 files changed, 766 insertions(+), 369 deletions(-) + +commit 25cc7a6e8c2506a0d80084a4c1c67d33e7439100 +Author: Lasse Collin +Date: 2009-07-05 19:26:53 +0300 + + Use @PACKAGE_HOMEPAGE@ in liblzma.pc.in. + + src/liblzma/liblzma.pc.in | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 18c10c30d2833f394cd7bce0e6a821044b15832f +Author: Lasse Collin +Date: 2009-07-04 00:40:44 +0300 + + Make "xz --decompress --stdout --force" copy unrecognized + files as is to standard output. + + This feature is needed to be more compatible with gzip's + behavior. This was more complicated to implement than it + sounds, because the way liblzma is able to return errors with + files of only a few bytes in size. xz now has its own file + type detection code and no longer uses lzma_auto_decoder(). + + src/xz/coder.c | 213 ++++++++++++++++++++++++++++++++++++++++++++++--------- + 1 files changed, 178 insertions(+), 35 deletions(-) + +commit 0a289c01ac821ea9c4250aa906b0ae3cfa953633 +Author: Lasse Collin +Date: 2009-07-02 14:30:38 +0300 + + Define PACKAGE_HOMEPAGE in configure.ac and use it in + xz and xzdec. + + Use also PACKAGE_NAME instead of hardcoding "XZ Utils". + + configure.ac | 5 +++++ + src/xz/message.c | 4 ++-- + src/xzdec/xzdec.c | 4 ++-- + 3 files changed, 9 insertions(+), 4 deletions(-) + +commit 5cc99db5bae8633f85559e5cdaef4cd905a4ee9c +Author: Lasse Collin +Date: 2009-07-01 12:21:24 +0300 + + Avoid visibility related compiler warnings on Windows. + + configure.ac | 20 +++++++++----------- + 1 files changed, 9 insertions(+), 11 deletions(-) + +commit 7653d1cf48080e63b189ed9d58dea0e82b6b1c5e +Author: Lasse Collin +Date: 2009-06-30 17:14:39 +0300 + + Use static liblzma by default also for tests. + + tests/Makefile.am | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit f42ee981668b545ab6d06c6072e262c29605273c +Author: Lasse Collin +Date: 2009-06-30 17:09:57 +0300 + + Build system fixes + + Don't use libtool convenience libraries to avoid recently + discovered long-standing subtle but somewhat severe bugs + in libtool (at least 1.5.22 and 2.2.6 are affected). It + was found when porting XZ Utils to Windows + + but the problem is significant also e.g. on GNU/Linux. + + Unless --disable-shared is passed to configure, static + library built from a set of convenience libraries will + contain PIC objects. That is, while libtool builds non-PIC + objects too, only PIC objects will be used from the + convenience libraries. On 32-bit x86 (tested on mobile XP2400+), + using PIC instead of non-PIC makes the decompressor 10 % slower + with the default CFLAGS. + + So while xz was linked against static liblzma by default, + it got the slower PIC objects unless --disable-shared was + used. I tend develop and benchmark with --disable-shared + due to faster build time, so I hadn't noticed the problem + in benchmarks earlier. + + This commit also adds support for building Windows resources + into liblzma and executables. + + configure.ac | 34 ++++++++++----- + src/liblzma/Makefile.am | 79 +++++++++++++++++++++++++++------- + src/liblzma/check/Makefile.am | 47 --------------------- + src/liblzma/check/Makefile.inc | 51 ++++++++++++++++++++++ + src/liblzma/common/Makefile.am | 78 ---------------------------------- + src/liblzma/common/Makefile.inc | 67 +++++++++++++++++++++++++++++ + src/liblzma/common/common.h | 16 ++++--- + src/liblzma/delta/Makefile.am | 28 ------------ + src/liblzma/delta/Makefile.inc | 23 ++++++++++ + src/liblzma/lz/Makefile.am | 29 ------------- + src/liblzma/lz/Makefile.inc | 21 +++++++++ + src/liblzma/lzma/Makefile.am | 51 ---------------------- + src/liblzma/lzma/Makefile.inc | 43 +++++++++++++++++++ + src/liblzma/rangecoder/Makefile.am | 26 ----------- + src/liblzma/rangecoder/Makefile.inc | 21 +++++++++ + src/liblzma/simple/Makefile.am | 51 ---------------------- + src/liblzma/simple/Makefile.inc | 47 +++++++++++++++++++++ + src/liblzma/subblock/Makefile.am | 26 ----------- + src/liblzma/subblock/Makefile.inc | 20 +++++++++ + src/xz/Makefile.am | 11 ++++- + src/xzdec/Makefile.am | 20 ++++++++- + 21 files changed, 417 insertions(+), 372 deletions(-) + +commit 89dac1db6f168d7469cfbc4432651d4724c5c0de +Author: Lasse Collin +Date: 2009-06-29 22:19:51 +0300 + + Added a comment about "autoconf -fi" to autogen.sh. + + autogen.sh | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 6e685aae4594bc0af1b5032e01bb37d0edaa3ebd +Author: Lasse Collin +Date: 2009-06-28 10:04:24 +0300 + + Add -no-undefined to get shared liblzma on Windows. + + src/liblzma/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 73f560ee5fa064992b76688d9472baf139432540 +Author: Lasse Collin +Date: 2009-06-27 22:57:15 +0300 + + Make physmem() work on Cygwin 1.5 and older. + + src/common/physmem.h | 77 ++++++++++++++++++++++++++------------------------ + 1 files changed, 40 insertions(+), 37 deletions(-) + +commit 7ff0004fbce24ae72eddfe392828ffd7d4639ed1 +Author: Lasse Collin +Date: 2009-06-27 17:28:01 +0300 + + Moved the Windows resource files outside the windows directory + to prepare for building them with Autotools. + + src/common/common_w32res.rc | 46 +++++++++++++++++++++++++++++++++++++++++ + src/liblzma/liblzma_w32res.rc | 5 ++++ + src/xz/xz_w32res.rc | 5 ++++ + src/xzdec/lzmadec_w32res.rc | 5 ++++ + src/xzdec/xzdec_w32res.rc | 5 ++++ + windows/Makefile | 35 +++++++++++++++++-------------- + windows/common.rc | 46 ----------------------------------------- + windows/liblzma.rc | 5 ---- + windows/lzmadec.rc | 5 ---- + windows/xz.rc | 5 ---- + windows/xzdec.rc | 5 ---- + 11 files changed, 85 insertions(+), 82 deletions(-) + +commit 449c634674f35336a4815d398172e447659a135e +Author: Lasse Collin +Date: 2009-06-27 13:05:03 +0300 + + Added missing $(EXEEXT). + + src/xz/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 792db79f27ad9ab1fb977e23be65c7761f545752 +Author: Lasse Collin +Date: 2009-06-27 12:32:40 +0300 + + Create correct symlinks even when + --program-{prefix,suffix,transform} is passed to configure. + + src/scripts/Makefile.am | 80 +++++++++++++++++++++++++++-------------------- + src/xz/Makefile.am | 21 +++++++----- + src/xzdec/Makefile.am | 9 +++-- + 3 files changed, 65 insertions(+), 45 deletions(-) + +commit 0adc72feb84f5b903f6ad9d3f759b1c326fafc6b +Author: Lasse Collin +Date: 2009-06-27 10:02:24 +0300 + + Silence a compiler warning on DOS-like systems. + + src/xz/file_io.c | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit ad12edc95254ede3f0cb8dec8645e8789e984c4f +Author: Lasse Collin +Date: 2009-06-27 09:35:15 +0300 + + Updated the filenames in POTFILES.in too. + + po/POTFILES.in | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit b2b1f867532732fe9969131f8713bdd6b0731763 +Author: Lasse Collin +Date: 2009-06-27 00:43:06 +0300 + + Hopefully improved portability of the assembler code in + Autotools based builds on Windows. + + src/liblzma/check/crc32_x86.S | 8 +++++++- + src/liblzma/check/crc64_x86.S | 8 +++++++- + 2 files changed, 14 insertions(+), 2 deletions(-) + +commit c393055947247627a09b6a6b8f20aa0c32f9be16 +Author: Lasse Collin +Date: 2009-06-26 21:17:29 +0300 + + Updated THANKS (most of today's commits are based on + Charles Wilson's patches). + + THANKS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit da0af22e4b4139b8a10710945f8b245b3a77c97d +Author: Lasse Collin +Date: 2009-06-26 21:00:35 +0300 + + Updated comments to match renamed files. + + src/xz/coder.c | 2 +- + src/xz/coder.h | 2 +- + src/xz/file_io.c | 2 +- + src/xz/file_io.h | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +commit 65014fd211dfbd4be48685998cb5a12aaa29c8d2 +Author: Lasse Collin +Date: 2009-06-26 20:49:54 +0300 + + Rename process.[hc] to coder.[hc] and io.[hc] to file_io.[hc] + to avoid problems on systems with system headers with those + names. + + dos/Makefile | 4 +- + src/xz/Makefile.am | 8 +- + src/xz/coder.c | 488 +++++++++++++++++++++++++++++++++++ + src/xz/coder.h | 57 ++++ + src/xz/file_io.c | 716 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/xz/file_io.h | 86 +++++++ + src/xz/io.c | 716 ---------------------------------------------------- + src/xz/io.h | 86 ------- + src/xz/private.h | 4 +- + src/xz/process.c | 488 ----------------------------------- + src/xz/process.h | 57 ---- + windows/Makefile | 4 +- + 12 files changed, 1357 insertions(+), 1357 deletions(-) + +commit 5e1257466dcb66f1d7a3f71814a5ad885cba43e8 +Author: Lasse Collin +Date: 2009-06-26 20:43:36 +0300 + + Rename process_file() to coder_run(). + + src/xz/main.c | 6 +++--- + src/xz/process.c | 6 +++--- + src/xz/process.h | 5 ++--- + 3 files changed, 8 insertions(+), 9 deletions(-) + +commit cad62551c5fa9865dbe0841a0b3bc729c4fbe8fc +Author: Lasse Collin +Date: 2009-06-26 20:36:45 +0300 + + Ugly hack to make it possible to use the thousand separator + format character with snprintf() on POSIX systems but not + on non-POSIX systems and still keep xgettext working. + + dos/Makefile | 16 +++------------- + src/xz/message.c | 17 +++++++++-------- + src/xz/process.c | 30 +++++++++++++++--------------- + src/xz/util.c | 34 ++++++++++++++++++++++++++++++++++ + src/xz/util.h | 20 ++++++++++++++++++++ + windows/Makefile | 13 +++---------- + 6 files changed, 84 insertions(+), 46 deletions(-) + +commit fe378d47074b16c52b00fe184d119287c68ce2e7 +Author: Lasse Collin +Date: 2009-06-26 15:40:40 +0300 + + Added missing source files to windows/Makefile. + + windows/Makefile | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 390a6408563067613b29de895cb40e4d0386d62c +Author: Lasse Collin +Date: 2009-06-26 15:37:53 +0300 + + Basic support for building with Cygwin and MinGW using + the Autotools based build system. It's not good yet, more + fixes will follow. + + configure.ac | 7 +++++++ + src/liblzma/api/lzma.h | 7 +++++-- + src/liblzma/check/crc32_x86.S | 7 ++++--- + src/liblzma/check/crc64_x86.S | 7 ++++--- + src/liblzma/common/common.h | 2 +- + windows/Makefile | 16 +++++++--------- + 6 files changed, 28 insertions(+), 18 deletions(-) + +commit 1c9360b7d1197457aaad2f8888b99f1149861579 +Author: Lasse Collin +Date: 2009-06-26 14:47:31 +0300 + + Fix @variables@ to $(variables) in Makefile.am files. + Fix the ordering of libgnu.a and LTLIBINTL on the linker + command line and added missing LTLIBINTL to tests/Makefile.am. + + debug/Makefile.am | 12 ++++++------ + src/liblzma/check/Makefile.am | 4 ++-- + src/liblzma/common/Makefile.am | 16 ++++++++-------- + src/liblzma/delta/Makefile.am | 4 ++-- + src/liblzma/lz/Makefile.am | 6 +++--- + src/liblzma/lzma/Makefile.am | 8 ++++---- + src/liblzma/rangecoder/Makefile.am | 4 ++-- + src/liblzma/simple/Makefile.am | 4 ++-- + src/liblzma/subblock/Makefile.am | 4 ++-- + src/xz/Makefile.am | 21 +++++++++++---------- + src/xzdec/Makefile.am | 19 ++++++++++--------- + tests/Makefile.am | 12 +++++++----- + 12 files changed, 59 insertions(+), 55 deletions(-) + +commit d45615c555e250209ebb55aa3649abe790f1eeac +Author: Lasse Collin +Date: 2009-06-26 14:20:02 +0300 + + Allow to explicitly specify autotool versions in autogen.sh. + + autogen.sh | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +commit eaf8367368a329afa48785380f9dca6b681f3397 +Author: Lasse Collin +Date: 2009-06-26 14:18:32 +0300 + + Add version.sh to EXTRA_DIST. + + Makefile.am | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit b317b218e2d383dd27a700094c0de4510540ea18 +Author: Lasse Collin +Date: 2009-06-24 20:14:10 +0300 + + Support HW_PHYSMEM64 + + src/common/physmem.h | 30 +++++++++++++++++++----------- + 1 files changed, 19 insertions(+), 11 deletions(-) + +commit ae82dde5d9cc60c80cc89601b6c51cc1611d48e7 +Author: Lasse Collin +Date: 2009-06-24 13:01:59 +0300 + + Cast a char argument to isspace() to unsigned char. + + src/xz/args.c | 11 +++++++++-- + 1 files changed, 9 insertions(+), 2 deletions(-) + +commit 1735d31ea347210e914df038eeea4b2626e76e42 +Author: Lasse Collin +Date: 2009-06-05 13:46:26 +0300 + + A few more spelling fixes. Released the .xz spec 1.0.3. + + doc/xz-file-format.txt | 12 +++++++----- + 1 files changed, 7 insertions(+), 5 deletions(-) + +commit 8ed156ce894966103e895aa08f2a9fb912f6fad5 +Author: Lasse Collin +Date: 2009-06-04 23:42:12 +0300 + + Added xzdec man page. + + src/xzdec/Makefile.am | 11 +++ + src/xzdec/xzdec.1 | 173 +++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 184 insertions(+), 0 deletions(-) + +commit f6df39afaa84f71439507178a49b2a5dda6e824c +Author: Lasse Collin +Date: 2009-06-04 23:26:47 +0300 + + Harmonized xzdec --memory with xz --memory and made + minor cleanups. + + src/xzdec/xzdec.c | 74 ++++++++++++++++++++++++++++++++++++++--------------- + 1 files changed, 53 insertions(+), 21 deletions(-) + +commit 1774f27c61ce294a56712ca2f4785f90a62441bc +Author: Lasse Collin +Date: 2009-06-04 22:59:55 +0300 + + Fix purporse -> purpose. Thanks to Andrew Dudman. + Released .xz spec 1.0.2 due to this fix too. + + THANKS | 1 + + doc/xz-file-format.txt | 8 +++++--- + src/liblzma/liblzma.pc.in | 2 +- + windows/Makefile | 2 +- + 4 files changed, 8 insertions(+), 5 deletions(-) + +commit cb613455642f48fb51059e22018615f64c59b70f +Author: Lasse Collin +Date: 2009-06-01 14:53:57 +0300 + + The .xz file format version 1.0.1 + + doc/xz-file-format.txt | 29 ++++++++++++++++++++++------- + 1 files changed, 22 insertions(+), 7 deletions(-) + +commit 083c23c680ff844846d177cfc58bb7a874e7e6b9 +Author: Lasse Collin +Date: 2009-05-26 14:48:48 +0300 + + Make the raw value of the Check field available to applications + via lzma_block structure. + + This changes ABI but not doesn't break API. + + src/liblzma/api/lzma/block.h | 17 ++++++++++++++ + src/liblzma/common/block_buffer_encoder.c | 1 + + src/liblzma/common/block_decoder.c | 34 ++++++++++++---------------- + src/liblzma/common/block_encoder.c | 21 +++++++---------- + 4 files changed, 42 insertions(+), 31 deletions(-) + +commit b4f5c814090dc07d4350453576305e41eb9c998d +Author: Lasse Collin +Date: 2009-05-23 16:57:21 +0300 + + Remove undocumented alternative option names --bcj, --ppc, + and --itanium. + + src/xz/args.c | 3 --- + 1 files changed, 0 insertions(+), 3 deletions(-) + +commit b1edee2cdc7ef4411b1a21c07094ec763f071281 +Author: Lasse Collin +Date: 2009-05-23 15:12:23 +0300 + + Add support for specifying the BCJ filter start offset + in the xz command line tool. + + src/xz/args.c | 36 +++++++++++++++++++++--------------- + src/xz/message.c | 14 ++++++++------ + src/xz/options.c | 40 ++++++++++++++++++++++++++++++++++++++++ + src/xz/options.h | 7 +++++++ + 4 files changed, 76 insertions(+), 21 deletions(-) + +commit 72aa0e9c5f4289f10ef5bf240a9448d3017f1ceb +Author: Lasse Collin +Date: 2009-05-23 14:51:09 +0300 + + Updated THANKS. + + THANKS | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit dcedb6998cefeca6597dd1219328a3abf5acf66d +Author: Lasse Collin +Date: 2009-05-22 16:40:50 +0300 + + Added support for --quiet and --no-warn to xzdec. + Cleaned up the --help message a little. + + src/xzdec/xzdec.c | 76 ++++++++++++++++++++++++++++++++++------------------- + 1 files changed, 49 insertions(+), 27 deletions(-) + +commit 5f735dae80aa629853f4831d7b84ec1c614979eb +Author: Lasse Collin +Date: 2009-05-22 15:11:52 +0300 + + Use the 40 % of RAM memory usage limit in xzdec too. + + Update the memory usage info text in --help to match + the text in xz --long-help. + + src/xzdec/xzdec.c | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +commit b60376249e0c586910c4121fab4f791820cc1289 +Author: Lasse Collin +Date: 2009-05-22 14:43:00 +0300 + + Add --no-warn. + + src/xz/args.c | 8 +++++++- + src/xz/main.c | 17 +++++++++++++++++ + src/xz/main.h | 6 ++++++ + src/xz/message.c | 4 ++++ + 4 files changed, 34 insertions(+), 1 deletions(-) + +commit b4f92f522d4b854c0adb7c38be7531e1a6a7b008 +Author: Lasse Collin +Date: 2009-05-22 14:27:40 +0300 + + Fix a comment. + + src/xz/main.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 4dd21d23f22569285ae706b58b0e5904b8db1839 +Author: Lasse Collin +Date: 2009-05-22 14:21:20 +0300 + + Remove the --info option, which was an alias for --list. + + src/xz/args.c | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 8836139b63ce774bdd62abf17ab69b290e08229e +Author: Lasse Collin +Date: 2009-05-22 12:27:43 +0300 + + If xz is run as lzma, unlzma, or lzcat, simply imply + --format=lzma. This means that xz emulating lzma + doesn't decompress .xz files, while before this + commit it did. The new way is slightly simpler in + code and especially in upcoming documentation. + + src/xz/args.c | 17 ++++++----------- + 1 files changed, 6 insertions(+), 11 deletions(-) + +commit b0063023f8adb06ea735ec4af5c6f5b7bdb8e84d +Author: Lasse Collin +Date: 2009-05-22 11:29:50 +0300 + + Make the default memory usage limit 40 % of RAM for both + compressing and decompressing. This should be OK now that + xz automatically scales down the compression settings if + they would exceed the memory usage limit (earlier, the limit + for compression was increased to 90 % because low limit broke + scripts that used "xz -9" on systems with low RAM). + + Support spcifying the memory usage limit as a percentage + of RAM (e.g. --memory=50%). + + Support --threads=0 to reset the thread limit to the default + value (number of available CPU cores). Use UINT32_MAX instead + of SIZE_MAX as the maximum in args.c. hardware.c was already + expecting uint32_t value. + + Cleaned up the output of --help and --long-help. + + src/xz/args.c | 28 +++++++++++++---- + src/xz/hardware.c | 86 ++++++++++++++++++++++------------------------------ + src/xz/hardware.h | 10 +++--- + src/xz/message.c | 28 ++++++++--------- + src/xz/process.c | 18 ++++------- + 5 files changed, 82 insertions(+), 88 deletions(-) + +commit 071b825b23911a69dd1cd2f8cda004ef8a781fae +Author: Lasse Collin +Date: 2009-05-21 17:22:01 +0300 + + Support special value "max" where xz and xzdec accept an integer. + Don't round the memory usage limit in xzdec --help to avoid + an integer overflow and to not give wrong impression that + the limit is high enough when it may not actually be. + + src/xz/util.c | 4 ++++ + src/xzdec/xzdec.c | 6 +++++- + 2 files changed, 9 insertions(+), 1 deletions(-) + +commit 03ca67fd37dd43fa7f590de340899cd497c10802 +Author: ABCD +Date: 2009-05-20 17:31:18 -0400 + + Install lzdiff, lzgrep, and lzmore as symlinks + + This adds lzdiff, lzgrep, and lzmore to the list of symlinks to install. + It also installs symlinks for the manual pages and removes the new + symlinks on uninstall. + + src/scripts/Makefile.am | 16 ++++++++++++++-- + 1 files changed, 14 insertions(+), 2 deletions(-) + +commit a6f43e64128a6da5cd641de1e1e527433b3e5638 +Author: Lasse Collin +Date: 2009-05-02 16:10:14 +0300 + + Use a GCC-specific #pragma instead of GCC-specific + -Wno-uninitialized to silence a bogus warning. + + configure.ac | 13 ------------- + src/liblzma/check/Makefile.am | 5 ----- + src/liblzma/check/sha256.c | 5 +++++ + 3 files changed, 5 insertions(+), 18 deletions(-) + +commit f6ce63ebdb45a857c8949960c83c9580ae888951 +Author: Lasse Collin +Date: 2009-05-02 14:46:50 +0300 + + Removed --disable-encoder and --disable-decoder. Use the values + given to --enable-encoders and --enable-decoders to determine + if any encoder or decoder support is wanted. + + configure.ac | 48 ++++++++---------------------------------------- + 1 files changed, 8 insertions(+), 40 deletions(-) + +commit be06858d5cf8ba46557395035d821dc332f3f830 +Author: Lasse Collin +Date: 2009-05-01 11:28:52 +0300 + + Remove docs that are too outdated to be updated + (rewrite will be better). + + doc/liblzma-advanced.txt | 324 ---------------------------------------------- + doc/liblzma-hacking.txt | 112 ---------------- + doc/liblzma-intro.txt | 194 --------------------------- + doc/liblzma-security.txt | 219 ------------------------------- + doc/lzma-intro.txt | 107 --------------- + 5 files changed, 0 insertions(+), 956 deletions(-) + +commit 0255401e57c96af87c6b159eca28974e79430a82 +Author: Lasse Collin +Date: 2009-05-01 11:21:46 +0300 + + Added documentation about the legacy .lzma file format. + + doc/lzma-file-format.txt | 166 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 166 insertions(+), 0 deletions(-) + +commit 1496ff437c46f38303e0e94c511ca604b3a11f85 +Author: Lasse Collin +Date: 2009-05-01 11:20:23 +0300 + + Renamed the file format specification to xz-file-format.txt + which is the filename used on the WWW. + + doc/file-format.txt | 1127 ------------------------------------------------ + doc/xz-file-format.txt | 1127 ++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 1127 insertions(+), 1127 deletions(-) + +commit 21c6b94373d239d7e86bd480fcd558e30391712f +Author: Lasse Collin +Date: 2009-04-28 23:08:32 +0300 + + Fixed a crash in liblzma. + + liblzma tries to avoid useless free()/malloc() pairs in + initialization when multiple files are handled using the + same lzma_stream. This didn't work with filter chains + due to comparison of wrong pointers in lzma_next_coder_init(), + making liblzma think that no memory reallocation is needed + even when it actually is. + + Easy way to trigger this bug is to decompress two files with + a single xz command. The first file should have e.g. x86+LZMA2 + as the filter chain, and the second file just LZMA2. + + src/liblzma/common/alone_decoder.c | 2 +- + src/liblzma/common/alone_encoder.c | 4 ++-- + src/liblzma/common/auto_decoder.c | 2 +- + src/liblzma/common/block_decoder.c | 2 +- + src/liblzma/common/block_encoder.c | 2 +- + src/liblzma/common/common.h | 4 ++-- + src/liblzma/common/easy_encoder.c | 2 +- + src/liblzma/common/index_decoder.c | 2 +- + src/liblzma/common/index_encoder.c | 2 +- + src/liblzma/common/stream_decoder.c | 2 +- + src/liblzma/common/stream_encoder.c | 2 +- + 11 files changed, 13 insertions(+), 13 deletions(-) + +commit e518d167aa5958e469982f4fb3a24b9b6a2b5d1c +Author: Lasse Collin +Date: 2009-04-15 14:13:38 +0300 + + Fix uint32_t -> size_t in ARM and ARM-Thumb filters. + + On 64-bit system it would have gone into infinite + loop if a single input buffer was over 4 GiB (unlikely). + + src/liblzma/simple/arm.c | 2 +- + src/liblzma/simple/armthumb.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 31decdce041581e57c0d8a407d4795b114ef27ca +Author: Lasse Collin +Date: 2009-04-14 11:48:46 +0300 + + Minor fixes to test files' README. + + tests/files/README | 17 +++++++++-------- + 1 files changed, 9 insertions(+), 8 deletions(-) + +commit 4787d654434891c7df5b43959b0d2873718f06e0 +Author: Lasse Collin +Date: 2009-04-13 16:36:41 +0300 + + Updated history.txt. + + doc/history.txt | 123 +++++++++++++++++++++++++++++------------------------- + 1 files changed, 66 insertions(+), 57 deletions(-) + +commit 2f0bc9cd40f709152a0177c8e585c0757e9af9c9 +Author: Lasse Collin +Date: 2009-04-13 14:49:48 +0300 + + Quick & dirty update to support xz in diff/grep/more scripts. + + src/scripts/Makefile.am | 38 +++++++++----- + src/scripts/lzdiff | 67 ------------------------- + src/scripts/lzdiff.1 | 51 ------------------- + src/scripts/lzgrep | 123 ----------------------------------------------- + src/scripts/lzgrep.1 | 61 ----------------------- + src/scripts/lzmore | 74 ---------------------------- + src/scripts/lzmore.1 | 55 --------------------- + src/scripts/xzdiff | 67 +++++++++++++++++++++++++ + src/scripts/xzdiff.1 | 58 ++++++++++++++++++++++ + src/scripts/xzgrep | 123 +++++++++++++++++++++++++++++++++++++++++++++++ + src/scripts/xzgrep.1 | 77 +++++++++++++++++++++++++++++ + src/scripts/xzmore | 74 ++++++++++++++++++++++++++++ + src/scripts/xzmore.1 | 66 +++++++++++++++++++++++++ + 13 files changed, 489 insertions(+), 445 deletions(-) + +commit 02ddf09bc3079b3e17297729b9e43f14d407b8fc +Author: Lasse Collin +Date: 2009-04-13 11:27:40 +0300 + + Put the interesting parts of XZ Utils into the public domain. + Some minor documentation cleanups were made at the same time. + + COPYING | 67 ++++++++++++++++++------ + ChangeLog | 2 +- + Doxyfile.in | 8 ++- + Makefile.am | 13 +---- + autogen.sh | 9 +++ + configure.ac | 13 +---- + debug/Makefile.am | 13 +---- + debug/crc32.c | 13 +---- + debug/full_flush.c | 13 +---- + debug/hex2bin.c | 7 +-- + debug/known_sizes.c | 13 +---- + debug/memusage.c | 13 +---- + debug/repeat.c | 13 +---- + debug/sync_flush.c | 13 +---- + doc/faq.txt | 38 +------------ + lib/Makefile.am | 18 +++--- + src/Makefile.am | 13 +---- + src/common/bswap.h | 7 +-- + src/common/cpucores.h | 7 +-- + src/common/integer.h | 7 +-- + src/common/mythread.h | 4 +- + src/common/open_stdxxx.h | 7 +-- + src/common/physmem.h | 7 +-- + src/common/sysdefs.h | 13 +---- + src/liblzma/Makefile.am | 13 +---- + src/liblzma/api/Makefile.am | 13 +---- + src/liblzma/api/lzma.h | 38 ++++++++----- + src/liblzma/api/lzma/base.h | 20 +++---- + src/liblzma/api/lzma/bcj.h | 18 +++---- + src/liblzma/api/lzma/block.h | 18 +++---- + src/liblzma/api/lzma/check.h | 18 +++---- + src/liblzma/api/lzma/container.h | 18 +++---- + src/liblzma/api/lzma/delta.h | 18 +++---- + src/liblzma/api/lzma/filter.h | 18 +++---- + src/liblzma/api/lzma/index.h | 18 +++---- + src/liblzma/api/lzma/index_hash.h | 22 +++----- + src/liblzma/api/lzma/lzma.h | 18 +++---- + src/liblzma/api/lzma/stream_flags.h | 18 +++---- + src/liblzma/api/lzma/subblock.h | 18 +++---- + src/liblzma/api/lzma/version.h | 18 +++---- + src/liblzma/api/lzma/vli.h | 42 +++++++-------- + src/liblzma/check/Makefile.am | 8 +-- + src/liblzma/check/check.c | 7 +-- + src/liblzma/check/check.h | 7 +-- + src/liblzma/check/crc32_fast.c | 30 ++++------ + src/liblzma/check/crc32_small.c | 7 +-- + src/liblzma/check/crc32_table.c | 7 +-- + src/liblzma/check/crc32_tablegen.c | 7 +-- + src/liblzma/check/crc32_x86.S | 21 +++++--- + src/liblzma/check/crc64_fast.c | 20 +++---- + src/liblzma/check/crc64_small.c | 7 +-- + src/liblzma/check/crc64_table.c | 7 +-- + src/liblzma/check/crc64_tablegen.c | 7 +-- + src/liblzma/check/crc64_x86.S | 14 +++-- + src/liblzma/check/crc_macros.h | 9 ++-- + src/liblzma/check/sha256.c | 23 +++++--- + src/liblzma/common/Makefile.am | 13 +---- + src/liblzma/common/alone_decoder.c | 13 +---- + src/liblzma/common/alone_decoder.h | 13 +---- + src/liblzma/common/alone_encoder.c | 13 +---- + src/liblzma/common/auto_decoder.c | 13 +---- + src/liblzma/common/block_buffer_decoder.c | 13 +---- + src/liblzma/common/block_buffer_encoder.c | 13 +---- + src/liblzma/common/block_decoder.c | 13 +---- + src/liblzma/common/block_decoder.h | 13 +---- + src/liblzma/common/block_encoder.c | 13 +---- + src/liblzma/common/block_encoder.h | 13 +---- + src/liblzma/common/block_header_decoder.c | 13 +---- + src/liblzma/common/block_header_encoder.c | 13 +---- + src/liblzma/common/block_util.c | 13 +---- + src/liblzma/common/bsr.h | 7 +-- + src/liblzma/common/chunk_size.c | 13 +---- + src/liblzma/common/common.c | 13 +---- + src/liblzma/common/common.h | 13 +---- + src/liblzma/common/easy_buffer_encoder.c | 13 +---- + src/liblzma/common/easy_decoder_memusage.c | 13 +---- + src/liblzma/common/easy_encoder.c | 13 +---- + src/liblzma/common/easy_encoder_memusage.c | 13 +---- + src/liblzma/common/easy_preset.c | 13 +---- + src/liblzma/common/easy_preset.h | 13 +---- + src/liblzma/common/filter_buffer_decoder.c | 13 +---- + src/liblzma/common/filter_buffer_encoder.c | 13 +---- + src/liblzma/common/filter_common.c | 13 +---- + src/liblzma/common/filter_common.h | 13 +---- + src/liblzma/common/filter_decoder.c | 13 +---- + src/liblzma/common/filter_decoder.h | 13 +---- + src/liblzma/common/filter_encoder.c | 13 +---- + src/liblzma/common/filter_encoder.h | 13 +---- + src/liblzma/common/filter_flags_decoder.c | 13 +---- + src/liblzma/common/filter_flags_encoder.c | 13 +---- + src/liblzma/common/index.c | 13 +---- + src/liblzma/common/index.h | 13 +---- + src/liblzma/common/index_decoder.c | 13 +---- + src/liblzma/common/index_encoder.c | 13 +---- + src/liblzma/common/index_encoder.h | 13 +---- + src/liblzma/common/index_hash.c | 13 +---- + src/liblzma/common/stream_buffer_decoder.c | 13 +---- + src/liblzma/common/stream_buffer_encoder.c | 13 +---- + src/liblzma/common/stream_decoder.c | 13 +---- + src/liblzma/common/stream_decoder.h | 13 +---- + src/liblzma/common/stream_encoder.c | 13 +---- + src/liblzma/common/stream_encoder.h | 13 +---- + src/liblzma/common/stream_flags_common.c | 13 +---- + src/liblzma/common/stream_flags_common.h | 13 +---- + src/liblzma/common/stream_flags_decoder.c | 13 +---- + src/liblzma/common/stream_flags_encoder.c | 13 +---- + src/liblzma/common/vli_decoder.c | 13 +---- + src/liblzma/common/vli_encoder.c | 13 +---- + src/liblzma/common/vli_size.c | 13 +---- + src/liblzma/delta/Makefile.am | 13 +---- + src/liblzma/delta/delta_common.c | 13 +---- + src/liblzma/delta/delta_common.h | 13 +---- + src/liblzma/delta/delta_decoder.c | 13 +---- + src/liblzma/delta/delta_decoder.h | 13 +---- + src/liblzma/delta/delta_encoder.c | 13 +---- + src/liblzma/delta/delta_encoder.h | 13 +---- + src/liblzma/delta/delta_private.h | 13 +---- + src/liblzma/lz/Makefile.am | 13 +---- + src/liblzma/lz/lz_decoder.c | 17 ++---- + src/liblzma/lz/lz_decoder.h | 17 ++---- + src/liblzma/lz/lz_encoder.c | 17 ++---- + src/liblzma/lz/lz_encoder.h | 17 ++---- + src/liblzma/lz/lz_encoder_hash.h | 13 +---- + src/liblzma/lz/lz_encoder_mf.c | 17 ++---- + src/liblzma/lzma/Makefile.am | 13 +---- + src/liblzma/lzma/fastpos.h | 17 ++---- + src/liblzma/lzma/fastpos_tablegen.c | 17 ++---- + src/liblzma/lzma/lzma2_decoder.c | 17 ++---- + src/liblzma/lzma/lzma2_decoder.h | 17 ++---- + src/liblzma/lzma/lzma2_encoder.c | 17 ++---- + src/liblzma/lzma/lzma2_encoder.h | 17 ++---- + src/liblzma/lzma/lzma_common.h | 17 ++---- + src/liblzma/lzma/lzma_decoder.c | 17 ++---- + src/liblzma/lzma/lzma_decoder.h | 17 ++---- + src/liblzma/lzma/lzma_encoder.c | 17 ++---- + src/liblzma/lzma/lzma_encoder.h | 17 ++---- + src/liblzma/lzma/lzma_encoder_optimum_fast.c | 13 +---- + src/liblzma/lzma/lzma_encoder_optimum_normal.c | 13 +---- + src/liblzma/lzma/lzma_encoder_presets.c | 13 +---- + src/liblzma/lzma/lzma_encoder_private.h | 17 ++---- + src/liblzma/rangecoder/Makefile.am | 13 +---- + src/liblzma/rangecoder/price.h | 13 +---- + src/liblzma/rangecoder/price_tablegen.c | 16 ++---- + src/liblzma/rangecoder/range_common.h | 17 ++---- + src/liblzma/rangecoder/range_decoder.h | 17 ++---- + src/liblzma/rangecoder/range_encoder.h | 17 ++---- + src/liblzma/simple/Makefile.am | 13 +---- + src/liblzma/simple/arm.c | 17 ++---- + src/liblzma/simple/armthumb.c | 17 ++---- + src/liblzma/simple/ia64.c | 17 ++---- + src/liblzma/simple/powerpc.c | 17 ++---- + src/liblzma/simple/simple_coder.c | 13 +---- + src/liblzma/simple/simple_coder.h | 14 +---- + src/liblzma/simple/simple_decoder.c | 13 +---- + src/liblzma/simple/simple_decoder.h | 13 +---- + src/liblzma/simple/simple_encoder.c | 13 +---- + src/liblzma/simple/simple_encoder.h | 13 +---- + src/liblzma/simple/simple_private.h | 13 +---- + src/liblzma/simple/sparc.c | 17 ++---- + src/liblzma/simple/x86.c | 17 ++---- + src/liblzma/subblock/Makefile.am | 13 +---- + src/liblzma/subblock/subblock_decoder.c | 13 +---- + src/liblzma/subblock/subblock_decoder.h | 13 +---- + src/liblzma/subblock/subblock_decoder_helper.c | 13 +---- + src/liblzma/subblock/subblock_decoder_helper.h | 13 +---- + src/liblzma/subblock/subblock_encoder.c | 13 +---- + src/liblzma/subblock/subblock_encoder.h | 13 +---- + src/scripts/Makefile.am | 7 +++ + src/xz/Makefile.am | 13 +---- + src/xz/args.c | 13 +---- + src/xz/args.h | 13 +---- + src/xz/hardware.c | 13 +---- + src/xz/hardware.h | 13 +---- + src/xz/io.c | 13 +---- + src/xz/io.h | 13 +---- + src/xz/list.c | 13 +---- + src/xz/main.c | 13 +---- + src/xz/main.h | 13 +---- + src/xz/message.c | 13 +---- + src/xz/message.h | 13 +---- + src/xz/options.c | 13 +---- + src/xz/options.h | 13 +---- + src/xz/private.h | 13 +---- + src/xz/process.c | 13 +---- + src/xz/process.h | 13 +---- + src/xz/signals.c | 13 +---- + src/xz/signals.h | 13 +---- + src/xz/suffix.c | 13 +---- + src/xz/suffix.h | 13 +---- + src/xz/util.c | 13 +---- + src/xz/util.h | 13 +---- + src/xzdec/Makefile.am | 13 +---- + src/xzdec/xzdec.c | 13 +---- + tests/Makefile.am | 13 +---- + tests/bcj_test.c | 7 +-- + tests/create_compress_files.c | 13 +---- + tests/test_block.c | 13 +---- + tests/test_block_header.c | 13 +---- + tests/test_check.c | 13 +---- + tests/test_compress.sh | 13 +---- + tests/test_files.sh | 13 +---- + tests/test_filter_flags.c | 13 +---- + tests/test_index.c | 13 +---- + tests/test_stream_flags.c | 13 +---- + tests/tests.h | 13 +---- + windows/common.rc | 2 +- + 206 files changed, 866 insertions(+), 2021 deletions(-) + +commit e79c42d854657ae7f75613bd80c1a35ff7c525cb +Author: Lasse Collin +Date: 2009-04-10 11:17:02 +0300 + + Fix off-by-one in LZ decoder. + + Fortunately, this bug had no security risk other than accepting + some corrupt files as valid. + + src/liblzma/lz/lz_decoder.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 94eb9ad46f1fded6d8369cf3d38bb9754c1375af +Author: Pavel Roskin +Date: 2009-03-31 12:15:01 -0400 + + Fix minor typos in README + + README | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 9bab5336ebd765ec4e12252f416eefdf04eba750 +Author: Lasse Collin +Date: 2009-03-31 21:52:51 +0300 + + Add a note and work-around instructions to README about + problems detecting a C99 compiler when some standard + headers are missing. + + README | 11 +++++++++++ + 1 files changed, 11 insertions(+), 0 deletions(-) + +commit a0497ff7a06f9350349264fe9b52dfefc6d53ead +Author: Lasse Collin +Date: 2009-03-18 16:54:38 +0200 + + Updated THANKS. + + THANKS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 390e69887fc5e0a108eb41203bed9acd100a3d76 +Author: Lasse Collin +Date: 2009-03-18 16:51:41 +0200 + + Fix wrong macro names in lc_cpucores.m4 and cpucores.h. + Thanks to Bert Wesarg. + + m4/lc_cpucores.m4 | 4 ++-- + src/common/cpucores.h | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 0df9299e2478c2a0c62c05b1ae14a85a353e20d6 +Author: Lasse Collin +Date: 2009-03-01 09:03:08 +0200 + + Test for Linux-specific sysinfo() only on Linux systems. + Some other systems have sysinfo() with different semantics. + + m4/lc_physmem.m4 | 28 +++++++++++++++++++--------- + 1 files changed, 19 insertions(+), 9 deletions(-) + +commit cf751edfde3ad6e088dc18e0522d31ae38405933 +Author: Lasse Collin +Date: 2009-03-01 09:00:06 +0200 + + Added AC_CONFIG_MACRO_DIR to configure.ac. + + configure.ac | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 63df14c57dee7c461717784287056688482a7eb9 +Author: Lasse Collin +Date: 2009-03-01 08:58:41 +0200 + + Fix the Autoconf test for getopt_long replacement. + It was broken by e114502b2bc371e4a45449832cb69be036360722. + + m4/getopt.m4 | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit fd6a380f4eda4f00be5f2aa8d222992cd74a714f +Author: Lasse Collin +Date: 2009-02-22 19:07:54 +0200 + + Add a rough explanation of --extreme to output of --help. + + src/xz/message.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 68bf7ac2984d3627369a240ef0491934d53f7899 +Author: Lasse Collin +Date: 2009-02-22 18:52:49 +0200 + + Fixes to progress message handling in xz: + + - Don't use Windows-specific code on Windows. The old code + required at least Windows 2000. Now it should work on + Windows 98 and later, and maybe on Windows 95 too. + + - Use less precision when showing estimated remaining time. + + - Fix some small design issues. + + src/xz/message.c | 483 ++++++++++++++++++++++++++++++++++-------------------- + src/xz/message.h | 28 ++- + src/xz/process.c | 53 +++--- + 3 files changed, 351 insertions(+), 213 deletions(-) + +commit 47c2e21f82242f50f18713a27d644c2c94ab3fea +Author: Lasse Collin +Date: 2009-02-18 13:00:10 +0200 + + Added files missing from the previous commit. + + src/liblzma/api/lzma/container.h | 33 +++++++++++++++++++++++++++++++++ + src/liblzma/common/Makefile.am | 7 ++++++- + 2 files changed, 39 insertions(+), 1 deletions(-) + +commit 489a3dbaa0465f04400804e956a1cfbbee3654a2 +Author: Lasse Collin +Date: 2009-02-17 10:43:00 +0200 + + Added lzma_easy_buffer_encode(). Splitted easy.c into small + pieces to avoid unneeded dependencies making statically + linked applications bigger than needed. + + dos/Makefile | 6 +- + src/liblzma/common/easy.c | 128 ---------------------------- + src/liblzma/common/easy_buffer_encoder.c | 34 ++++++++ + src/liblzma/common/easy_decoder_memusage.c | 31 +++++++ + src/liblzma/common/easy_encoder.c | 87 +++++++++++++++++++ + src/liblzma/common/easy_encoder_memusage.c | 31 +++++++ + src/liblzma/common/easy_preset.c | 34 ++++++++ + src/liblzma/common/easy_preset.h | 39 +++++++++ + windows/Makefile | 6 +- + 9 files changed, 266 insertions(+), 130 deletions(-) + +commit 7494816ab08d82f4d6409788825930c4e43cfd0d +Author: Lasse Collin +Date: 2009-02-15 15:48:45 +0200 + + Make physmem.h work on old Windows versions. + Thanks to Hongbo Ni for the original patch. + + src/common/physmem.h | 31 +++++++++++++++++++++++++++---- + 1 files changed, 27 insertions(+), 4 deletions(-) + +commit 11ae4ae35fd70182c713f2d914b7cb1143bc76f0 +Author: Lasse Collin +Date: 2009-02-14 20:44:52 +0200 + + Fix microsecond vs. nanosecond confusion in my_time(). + + src/xz/message.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3084d662d2646ab7eb58daf0dc32cf3f9a74eec7 +Author: Lasse Collin +Date: 2009-02-14 00:45:29 +0200 + + Cleanups to the code that detects the amount of RAM and + the number of CPU cores. Added support for using sysinfo() + on Linux systems whose libc lacks appropriate sysconf() + support (at least dietlibc). The Autoconf macros were + split into separate files, and CPU core count detection + was moved from hardware.c to cpucores.h. The core count + isn't used for anything real for now, so a problematic + part in process.c was commented out. + + configure.ac | 89 +----------------------------------------------- + m4/lc_cpucores.m4 | 57 +++++++++++++++++++++++++++++++ + m4/lc_physmem.m4 | 74 ++++++++++++++++++++++++++++++++++++++++ + src/common/cpucores.h | 52 ++++++++++++++++++++++++++++ + src/common/physmem.h | 21 +++++++---- + src/xz/args.c | 4 +- + src/xz/hardware.c | 50 ++++++++++++--------------- + src/xz/hardware.h | 11 ++++-- + src/xz/message.c | 5 ++- + src/xz/process.c | 2 + + 10 files changed, 235 insertions(+), 130 deletions(-) + +commit 9c62371eab2706c46b1072f5935e28cb4cd9dca8 +Author: Lasse Collin +Date: 2009-02-13 18:23:50 +0200 + + Initial port to DOS using DJGPP. + + dos/Makefile | 261 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + dos/README | 113 +++++++++++++++++++++++++ + dos/config.h | 150 +++++++++++++++++++++++++++++++++ + 3 files changed, 524 insertions(+), 0 deletions(-) + +commit 0dae8b7751d09e9c5a482d5519daaee4800ce203 +Author: Lasse Collin +Date: 2009-02-13 18:02:05 +0200 + + Windows port: Take advantage of the version number macros. + Now the version number is not duplicated in the + Windows-specific files anymore. + + windows/Makefile | 2 +- + windows/common.rc | 16 ++++++++-------- + windows/config.h | 15 --------------- + 3 files changed, 9 insertions(+), 24 deletions(-) + +commit fdbc0cfa71f7d660855098a609175ba384259529 +Author: Lasse Collin +Date: 2009-02-13 18:00:03 +0200 + + Changed how the version number is specified in various places. + Now configure.ac will get the version number directly from + src/liblzma/api/lzma/version.h. The intent is to reduce the + number of places where the version number is duplicated. In + future, support for displaying Git commit ID may be added too. + + configure.ac | 3 +- + src/liblzma/api/lzma/version.h | 70 ++++++++++++++++++++++++++++++++++++++-- + src/liblzma/common/common.c | 2 +- + src/xz/message.c | 2 +- + src/xzdec/xzdec.c | 2 +- + version.sh | 23 +++++++++++++ + 6 files changed, 95 insertions(+), 7 deletions(-) + +commit 1d924e584b146136989f48c13fff2632896efb3d +Author: Lasse Collin +Date: 2009-02-13 17:30:30 +0200 + + Fix handling of integrity check type in the xz command line tool. + + src/xz/args.c | 9 ++++++++- + src/xz/process.c | 4 ++++ + 2 files changed, 12 insertions(+), 1 deletions(-) + +commit 96c46df7deb231ea68a03d8d1da9de4c774e36d8 +Author: Lasse Collin +Date: 2009-02-13 17:29:02 +0200 + + Improve support for DOS-like systems. + Here DOS-like means DOS, Windows, and OS/2. + + src/common/physmem.h | 12 ++++++++++++ + src/common/sysdefs.h | 4 ++++ + src/liblzma/check/crc32_x86.S | 6 +++--- + src/liblzma/check/crc64_x86.S | 6 +++--- + src/xz/args.c | 13 +++++-------- + src/xz/io.c | 39 +++++++++++++++++++++++++-------------- + src/xz/main.c | 23 +++++++++++++++++++++++ + src/xz/message.c | 3 +++ + src/xz/suffix.c | 5 +++++ + src/xzdec/xzdec.c | 5 +++-- + 10 files changed, 86 insertions(+), 30 deletions(-) + +commit b6a30ee8c2de60ecd722cd05223e4ba72f822e33 +Author: Lasse Collin +Date: 2009-02-11 20:02:32 +0200 + + Remove dead directories from .gitignore. + + .gitignore | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +commit 1ec5b0027911d94cb6f98892cbc690f818d8a861 +Author: Jim Meyering +Date: 2009-02-11 14:45:14 +0100 + + .gitignore vs. Makefiles + + How about this for those of us who do srcdir builds? + + .gitignore | 22 ++++++++++++++++++++++ + 1 files changed, 22 insertions(+), 0 deletions(-) + +commit 154f5aec2de201c674841de4fcc9804c2a87af07 +Author: Lasse Collin +Date: 2009-02-10 21:48:35 +0200 + + Removed Makefile from .gitignore since not all Makefiles + in the repository are generated by Autotools. People + should do test builds in a separate build directory anyway. + + .gitignore | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit e605c2663691b0a4c307786aa368d124ea081daa +Author: Lasse Collin +Date: 2009-02-10 21:48:05 +0200 + + Added resource files for the Windows build. + + windows/Makefile | 37 ++++++++++++++++++++++--------------- + windows/common.rc | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + windows/liblzma.rc | 5 +++++ + windows/lzmadec.rc | 5 +++++ + windows/xz.rc | 5 +++++ + windows/xzdec.rc | 5 +++++ + 6 files changed, 88 insertions(+), 15 deletions(-) + +commit a3bbbe05d32b1f7ea9eb98805df4dda2e811b476 +Author: Lasse Collin +Date: 2009-02-09 14:54:31 +0200 + + Let the user specify custom CFLAGS on the make command + line. Previously custom CFLAGS worked only when they were + passed to configure. + + configure.ac | 58 +++++++++++++++++++++------------------- + src/liblzma/check/Makefile.am | 2 +- + 2 files changed, 31 insertions(+), 29 deletions(-) + +commit 53f7598998b1860a69c51243b5d2e34623c6bf60 +Author: Lasse Collin +Date: 2009-02-08 21:35:11 +0200 + + Fix aliasing issue in physmem.h. + + src/common/physmem.h | 19 ++++++++++--------- + 1 files changed, 10 insertions(+), 9 deletions(-) + +commit 0e27028d74c5c7a8e036ae2a9b8cecb0ac79d3a6 +Author: Lasse Collin +Date: 2009-02-08 18:24:50 +0200 + + Add a separate internal function to initialize the CRC32 + table, which is used also by LZ encoder. This was needed + because calling lzma_crc32() and ignoring the result is + a no-op due to lzma_attr_pure. + + src/liblzma/check/check.h | 1 + + src/liblzma/check/crc32_small.c | 10 +++++++++- + src/liblzma/lz/lz_encoder.c | 4 ++-- + 3 files changed, 12 insertions(+), 3 deletions(-) + +commit ae1ad9af54210c9a2be336b1316532da5071516c +Author: Lasse Collin +Date: 2009-02-08 18:17:05 +0200 + + Make "xz --force" to write to terminal as the error + message suggests. + + src/xz/main.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 79e25eded48d2fe33f31441ab7a034f902e335f8 +Author: Lasse Collin +Date: 2009-02-08 10:37:50 +0200 + + Support both slash and backslash as path component + separator on Windows when parsing argv[0]. + + src/xz/args.c | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit bc7c7109cc4410055a888c1c70cbd1c9445c4361 +Author: Lasse Collin +Date: 2009-02-07 23:18:13 +0200 + + Omit the wrong and (even if corrected) nowadays useless rm + from autogen.sh. + + autogen.sh | 28 ---------------------------- + 1 files changed, 0 insertions(+), 28 deletions(-) + +commit edfc2031e56f8a2ccda063f02936b3a848d88723 +Author: Lasse Collin +Date: 2009-02-07 21:41:52 +0200 + + Updated THANKS. + + THANKS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 880c3309386aac58fc4f3d7ca99bd31bcb1526a3 +Author: Lasse Collin +Date: 2009-02-07 21:17:07 +0200 + + Make it easy to choose if command line tools should be + linked statically or dynamically against liblzma. The + default is still to use static liblzma, but it can now + be changed by passing --enable-dynamic to configure. + Thanks to Mike Frysinger for the original patch. + + Fixed a few minor bugs in configure.ac. + + configure.ac | 39 +++++++++++++++++++++++++++++++++++++++ + src/xz/Makefile.am | 8 +++----- + src/xzdec/Makefile.am | 5 +++-- + 3 files changed, 45 insertions(+), 7 deletions(-) + +commit 3f86532407e4ace3debb62be16035e009b56ca36 +Author: Mike Frysinger +Date: 2009-02-06 23:38:39 -0500 + + add gitignore files + + Signed-off-by: Mike Frysinger + + .gitignore | 32 ++++++++++++++++++++++++++++++++ + m4/.gitignore | 35 +++++++++++++++++++++++++++++++++++ + po/.gitignore | 12 ++++++++++++ + 3 files changed, 79 insertions(+), 0 deletions(-) + +commit bd7ca1dad5c146b6217799ffaa230c32d207a3e5 +Author: Lasse Collin +Date: 2009-02-07 17:07:52 +0200 + + Assume 32 MiB of RAM on unsupported operating systems like + the comment in hardware.c already said. + + src/xz/hardware.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit d0ab8c1c73ae712adb0d26fbb9da762d99a63618 +Author: Lasse Collin +Date: 2009-02-07 16:26:58 +0200 + + MinGW support: Don't build fastpos_tablegen.c as part of + liblzma. Build both static and dynamic liblzma, and also + static and dynamic versions of the command line tools. + + windows/Makefile | 92 ++++++++++++++++++++++++++++++++++++++++------------- + windows/README | 10 ------ + 2 files changed, 69 insertions(+), 33 deletions(-) + +commit bfd91198e44a52bd9bfe3cd6dcae5edab7c6eb45 +Author: Lasse Collin +Date: 2009-02-07 15:55:47 +0200 + + Support LZMA_API_STATIC in assembler files to + avoid __declspec(dllexport) equivalent. + + src/liblzma/check/crc32_x86.S | 4 ++++ + src/liblzma/check/crc64_x86.S | 2 ++ + 2 files changed, 6 insertions(+), 0 deletions(-) + +commit 3306cf3883492720b3c34baa02f4eb4227d91c73 +Author: Lasse Collin +Date: 2009-02-07 11:11:50 +0200 + + Introduced LZMA_API_STATIC macro, which the applications + need to #define when linking against static liblzma on + platforms like Windows. Most developers don't need to + care about LZMA_API_STATIC at all. + + src/liblzma/api/lzma.h | 31 ++++++++++++++++++++++++------- + src/liblzma/common/common.h | 2 +- + 2 files changed, 25 insertions(+), 8 deletions(-) + +commit b719e63c5f4c91d2d5e2ea585d4c055ec3767d0b +Author: Lasse Collin +Date: 2009-02-06 16:55:45 +0200 + + Another grammar fix + + README | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit fe5434f940f75fec3611cf9d9edf78c4da8ac760 +Author: Lasse Collin +Date: 2009-02-06 12:30:23 +0200 + + Grammar fix in README. + + README | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3dfa58a9eedf5a0e566452b078801c9cbcf7a245 +Author: Lasse Collin +Date: 2009-02-06 10:06:32 +0200 + + Some MSYS installations (e.g. MsysGit) don't include + install.exe, so don't rely on it. + + windows/Makefile | 12 +++++++----- + windows/README | 11 ++++++----- + 2 files changed, 13 insertions(+), 10 deletions(-) + +commit 975d8fd72a5148d46b2e1745f7a211cf1dfd9d31 +Author: Lasse Collin +Date: 2009-02-06 09:13:15 +0200 + + Recreated the BCJ test files for x86 and SPARC. The old files + were linked with crt*.o, which are copyrighted, and thus the + old test files were not in the public domain as a whole. They + are freely distributable though, but it is better to be careful + and avoid including any copyrighted pieces in the test files. + The new files are just compiled and assembled object files, + and thus don't contain any copyrighted code. + + tests/bcj_test.c | 2 +- + tests/compress_prepared_bcj_sparc | Bin 6804 -> 1240 bytes + tests/compress_prepared_bcj_x86 | Bin 4649 -> 1388 bytes + tests/files/good-1-sparc-lzma2.xz | Bin 2296 -> 612 bytes + tests/files/good-1-x86-lzma2.xz | Bin 1936 -> 716 bytes + 5 files changed, 1 insertions(+), 1 deletions(-) + +commit 094b1b09a531f0d201ec81f2b07346a995fd80b9 +Author: Lasse Collin +Date: 2009-02-05 21:21:27 +0200 + + Add the "windows" directory to EXTRA_DIST. + + Makefile.am | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit e1c3412eec7acec7ca3b32c9c828f3147dc65b49 +Author: Lasse Collin +Date: 2009-02-05 09:17:51 +0200 + + Added initial experimental makefile for use with MinGW. + + windows/Makefile | 253 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + windows/README | 164 +++++++++++++++++++++++++++++++++++ + windows/config.h | 180 ++++++++++++++++++++++++++++++++++++++ + 3 files changed, 597 insertions(+), 0 deletions(-) + +commit 75905a9afc0ee89954ede7d08af70d1148bf0fd9 +Author: Lasse Collin +Date: 2009-02-05 09:12:57 +0200 + + Various code cleanups the the xz command line tool. + It now builds with MinGW. + + src/common/physmem.h | 13 ++++ + src/xz/Makefile.am | 2 + + src/xz/args.h | 8 -- + src/xz/hardware.h | 10 +--- + src/xz/io.c | 93 +++++++++++++++++++------- + src/xz/io.h | 12 +-- + src/xz/main.c | 132 ++----------------------------------- + src/xz/main.h | 22 ------ + src/xz/message.c | 65 ++++++++++++++++-- + src/xz/message.h | 6 -- + src/xz/options.h | 8 -- + src/xz/private.h | 18 ++++-- + src/xz/process.h | 10 +--- + src/xz/signals.c | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++ + src/xz/signals.h | 51 ++++++++++++++ + src/xz/suffix.h | 5 -- + src/xz/util.c | 5 +- + src/xz/util.h | 5 -- + 18 files changed, 399 insertions(+), 246 deletions(-) + +commit d0c0b9e94e0af59d1d8f7f4829695d6efe19ccfe +Author: Lasse Collin +Date: 2009-02-03 12:15:17 +0200 + + Another utime() fix. + + src/xz/io.c | 9 +++++---- + 1 files changed, 5 insertions(+), 4 deletions(-) + +commit ccf92a29e8c7234284f1568c1ec0fd7cb98356ca +Author: Lasse Collin +Date: 2009-02-03 10:41:11 +0200 + + Fix wrong filename argument for utime() and utimes(). + This doesn't affect most systems, since most systems + have better functions available. + + src/xz/io.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 99c1c2abfae2e87f3c17e929783e6d1bb7a3f302 +Author: Lasse Collin +Date: 2009-02-02 21:19:01 +0200 + + Updated the x86 assembler code: + - Use call/ret pair to get instruction pointer for PIC. + - Use PIC only if PIC or __PIC__ is #defined. + - The code should work on MinGW and Darwin in addition + to GNU/Linux and Solaris. + + configure.ac | 6 --- + src/liblzma/check/crc32_x86.S | 84 +++++++++++++++++++++++++++++++++++------ + src/liblzma/check/crc64_x86.S | 82 +++++++++++++++++++++++++++++++++++----- + 3 files changed, 144 insertions(+), 28 deletions(-) + +commit 22a0c6dd940b78cdac2f4a4b4b0e7cc0ac15021f +Author: Lasse Collin +Date: 2009-02-02 20:14:03 +0200 + + Modify LZMA_API macro so that it works on Windows with + other compilers than MinGW. This may hurt readability + of the API headers slightly, but I don't know any + better way to do this. + + src/liblzma/api/lzma.h | 6 ++-- + src/liblzma/api/lzma/base.h | 11 ++++--- + src/liblzma/api/lzma/block.h | 22 +++++++------- + src/liblzma/api/lzma/check.h | 10 +++--- + src/liblzma/api/lzma/container.h | 22 +++++++------- + src/liblzma/api/lzma/filter.h | 28 ++++++++++---------- + src/liblzma/api/lzma/index.h | 40 ++++++++++++++-------------- + src/liblzma/api/lzma/index_hash.h | 10 +++--- + src/liblzma/api/lzma/lzma.h | 6 ++-- + src/liblzma/api/lzma/stream_flags.h | 10 +++--- + src/liblzma/api/lzma/version.h | 4 +- + src/liblzma/api/lzma/vli.h | 6 ++-- + src/liblzma/check/check.c | 4 +- + src/liblzma/check/crc32_fast.c | 2 +- + src/liblzma/check/crc32_small.c | 2 +- + src/liblzma/check/crc64_fast.c | 2 +- + src/liblzma/check/crc64_small.c | 2 +- + src/liblzma/common/alone_decoder.c | 2 +- + src/liblzma/common/alone_encoder.c | 2 +- + src/liblzma/common/auto_decoder.c | 2 +- + src/liblzma/common/block_buffer_decoder.c | 2 +- + src/liblzma/common/block_buffer_encoder.c | 4 +- + src/liblzma/common/block_decoder.c | 2 +- + src/liblzma/common/block_encoder.c | 2 +- + src/liblzma/common/block_header_decoder.c | 2 +- + src/liblzma/common/block_header_encoder.c | 4 +- + src/liblzma/common/block_util.c | 6 ++-- + src/liblzma/common/chunk_size.c | 2 +- + src/liblzma/common/common.c | 16 +++++----- + src/liblzma/common/common.h | 2 +- + src/liblzma/common/easy.c | 6 ++-- + src/liblzma/common/filter_buffer_decoder.c | 2 +- + src/liblzma/common/filter_buffer_encoder.c | 2 +- + src/liblzma/common/filter_decoder.c | 8 +++--- + src/liblzma/common/filter_encoder.c | 12 ++++---- + src/liblzma/common/filter_flags_decoder.c | 2 +- + src/liblzma/common/filter_flags_encoder.c | 4 +- + src/liblzma/common/index.c | 32 +++++++++++----------- + src/liblzma/common/index_decoder.c | 4 +- + src/liblzma/common/index_encoder.c | 4 +- + src/liblzma/common/index_hash.c | 10 +++--- + src/liblzma/common/stream_buffer_decoder.c | 2 +- + src/liblzma/common/stream_buffer_encoder.c | 4 +- + src/liblzma/common/stream_decoder.c | 2 +- + src/liblzma/common/stream_encoder.c | 2 +- + src/liblzma/common/stream_flags_common.c | 2 +- + src/liblzma/common/stream_flags_decoder.c | 4 +- + src/liblzma/common/stream_flags_encoder.c | 4 +- + src/liblzma/common/vli_decoder.c | 2 +- + src/liblzma/common/vli_encoder.c | 2 +- + src/liblzma/common/vli_size.c | 2 +- + src/liblzma/lz/lz_encoder.c | 2 +- + src/liblzma/lzma/lzma_encoder.c | 2 +- + src/liblzma/lzma/lzma_encoder_presets.c | 2 +- + 54 files changed, 177 insertions(+), 176 deletions(-) + +commit 8dd7b6052e18621e2e6c62f40f762ee88bd3eb65 +Author: Lasse Collin +Date: 2009-02-01 22:40:35 +0200 + + Fix a bug in lzma_block_buffer_decode(), although this + function should be rewritten anyway. + + src/liblzma/common/block_buffer_decoder.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit 55fd41431e61fb8178858283d636b6781e33e847 +Author: Lasse Collin +Date: 2009-02-01 22:39:07 +0200 + + Added initial version of raw buffer-to-buffer coding + functions, and cleaned up filter.h API header a little. + May be very buggy, not tested yet. + + src/liblzma/api/lzma/filter.h | 84 +++++++++++++++++++------ + src/liblzma/common/Makefile.am | 2 + + src/liblzma/common/filter_buffer_decoder.c | 94 ++++++++++++++++++++++++++++ + src/liblzma/common/filter_buffer_encoder.c | 61 ++++++++++++++++++ + 4 files changed, 221 insertions(+), 20 deletions(-) + +commit 3e54ecee5cad30a5ca361a88a99230407abc0699 +Author: Lasse Collin +Date: 2009-02-01 00:11:20 +0200 + + Fix missing newlines in xzdec.c. + + src/xzdec/xzdec.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit d64ca34f1b6f34e86adefc7f735b4eff8e6d4a35 +Author: Lasse Collin +Date: 2009-02-01 00:10:07 +0200 + + Use __cdecl also for function pointers in liblzma API when + on Windows. + + src/liblzma/api/lzma.h | 18 +++++++++++------- + src/liblzma/api/lzma/base.h | 4 ++-- + src/liblzma/common/common.h | 18 +++++++----------- + 3 files changed, 20 insertions(+), 20 deletions(-) + +commit 6a2eb54092fc625d59921a607ff68cd1a90aa898 +Author: Lasse Collin +Date: 2009-01-31 11:01:48 +0200 + + Add LZMA_API to liblzma API headers. It's useful at least + on Windows. sysdefs.h no longer #includes lzma.h, so lzma.h + has to be #included separately where needed. + + src/common/sysdefs.h | 2 - + src/liblzma/api/lzma.h | 17 ++++++++++++ + src/liblzma/api/lzma/base.h | 10 +++--- + src/liblzma/api/lzma/block.h | 25 ++++++++++-------- + src/liblzma/api/lzma/check.h | 12 +++++--- + src/liblzma/api/lzma/container.h | 23 +++++++++-------- + src/liblzma/api/lzma/filter.h | 24 +++++++++--------- + src/liblzma/api/lzma/index.h | 47 ++++++++++++++++++++--------------- + src/liblzma/api/lzma/index_hash.h | 11 ++++--- + src/liblzma/api/lzma/lzma.h | 8 +++-- + src/liblzma/api/lzma/stream_flags.h | 10 +++--- + src/liblzma/api/lzma/version.h | 4 +- + src/liblzma/api/lzma/vli.h | 10 +++--- + src/liblzma/common/common.h | 13 ++++++++- + src/xz/private.h | 1 + + src/xzdec/xzdec.c | 1 + + tests/tests.h | 1 + + 17 files changed, 131 insertions(+), 88 deletions(-) + +commit d9993fcb4dfc1f93abaf31ae23b3ef1f3123892b +Author: Lasse Collin +Date: 2009-01-31 10:13:09 +0200 + + Use _WIN32 instead of WIN32 in xzdec.c to test if compiling on Windows. + + src/xzdec/xzdec.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 2dbdc5befb33c3703e4609809101047c67caf343 +Author: Lasse Collin +Date: 2009-01-31 10:02:52 +0200 + + Fix two lines in lzma.h on which the # wasn't at the + beginning of the line. + + src/liblzma/api/lzma.h | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 4ab760109106dc04f39dd81c97d50f528d1b51c1 +Author: Lasse Collin +Date: 2009-01-31 09:55:05 +0200 + + Add support for using liblzma headers in MSVC, which has no + stdint.h or inttypes.h. + + src/liblzma/api/lzma.h | 70 +++++++++++++++++++++++++++++++---------------- + 1 files changed, 46 insertions(+), 24 deletions(-) + +commit b2172cf823d3be34cb0246cb4cb32d105e2a34c9 +Author: Lasse Collin +Date: 2009-01-31 08:49:54 +0200 + + Fix # -> ## in a macro in lzma.h. + + src/liblzma/api/lzma.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1aae8698746d3c87a93f8398cdde2de9ba1f7208 +Author: Lasse Collin +Date: 2009-01-30 18:50:16 +0200 + + Updated README. + + README | 30 ++++++++++++++++++++---------- + 1 files changed, 20 insertions(+), 10 deletions(-) + +commit f54bcf6f80d585236bc03ce49f7c73e1abaa17eb +Author: Lasse Collin +Date: 2009-01-30 00:29:58 +0200 + + Remove dangling crc64_init.c. + + src/liblzma/check/crc64_init.c | 55 ---------------------------------------- + 1 files changed, 0 insertions(+), 55 deletions(-) + +commit 982da7ed314398420c38bf154a8f759d5f18b480 +Author: Lasse Collin +Date: 2009-01-28 17:16:38 +0200 + + The .xz file format specification version 1.0.0 is now + officially released. The format has been technically the same + since 2008-11-19, but now that it is frozen, people can start + using it without a fear that the format will break. + + doc/file-format.txt | 84 +++++++++++++++++++++++++++++--------------------- + 1 files changed, 49 insertions(+), 35 deletions(-) + +commit c4683a660b4372156bdaf92f0cdc54a58f95ee6f +Author: Lasse Collin +Date: 2009-01-28 08:45:59 +0200 + + Updated THANKS. + + THANKS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 3241317093595db9f79104faafe93cb989c9f858 +Author: Lasse Collin +Date: 2009-01-28 08:43:26 +0200 + + Fix uninitialized variables in alone_decoder.c. This bug was + triggered by the previous commit, since these variables were + not used by anything before support for a preset dictionary. + + src/liblzma/common/alone_decoder.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit f76e39cf930f888d460b443d18f977ebedea8b2a +Author: Lasse Collin +Date: 2009-01-27 18:36:05 +0200 + + Added initial support for preset dictionary for raw LZMA1 + and LZMA2. It is not supported by the .xz format or the xz + command line tool yet. + + src/liblzma/lz/lz_decoder.c | 35 +++++++++++++++++++++++++---------- + src/liblzma/lz/lz_decoder.h | 9 ++++++++- + src/liblzma/lz/lz_encoder.c | 18 ++++++++++++++++-- + src/liblzma/lzma/lzma2_decoder.c | 9 ++++++--- + src/liblzma/lzma/lzma2_encoder.c | 12 +++++++----- + src/liblzma/lzma/lzma_decoder.c | 10 ++++++---- + src/liblzma/lzma/lzma_decoder.h | 2 +- + src/liblzma/lzma/lzma_encoder.c | 9 ++++++++- + 8 files changed, 77 insertions(+), 27 deletions(-) + +commit 449b8c832b26c3633f3bec60095e57d2d3ada1f3 +Author: Lasse Collin +Date: 2009-01-26 20:09:17 +0200 + + Regenerate the CRC tables without trailing blanks. + + src/liblzma/check/crc32_table_be.h | 1008 ++++++++++++++++++------------------ + src/liblzma/check/crc32_table_le.h | 1008 ++++++++++++++++++------------------ + src/liblzma/check/crc64_table_be.h | 1016 ++++++++++++++++++------------------ + src/liblzma/check/crc64_table_le.h | 1016 ++++++++++++++++++------------------ + 4 files changed, 2024 insertions(+), 2024 deletions(-) + +commit 850f7400428dc9c5fd08a2f35a5bd2c9e45aede2 +Author: Jim Meyering +Date: 2009-01-19 21:37:16 +0100 + + remove trailing blanks from all but .xz files + + debug/known_sizes.c | 2 +- + extra/scanlzma/scanlzma.c | 5 ++--- + src/liblzma/check/crc32_tablegen.c | 2 +- + src/liblzma/check/crc64_tablegen.c | 2 +- + src/scripts/lzdiff.1 | 4 ++-- + src/scripts/lzmore.1 | 6 +++--- + tests/test_compress.sh | 4 ++-- + 7 files changed, 12 insertions(+), 13 deletions(-) + +commit 667481f1aad34e1ed15738e7913a9c7e256b4cf5 +Author: Lasse Collin +Date: 2009-01-26 14:34:10 +0200 + + Add lzma_block_buffer_decode(). + + src/liblzma/api/lzma/block.h | 41 ++++++++++++++ + src/liblzma/common/Makefile.am | 1 + + src/liblzma/common/block_buffer_decoder.c | 87 +++++++++++++++++++++++++++++ + 3 files changed, 129 insertions(+), 0 deletions(-) + +commit 5fb34d8324d3e7e0061df25d0086b64c8726b19d +Author: Lasse Collin +Date: 2009-01-26 14:33:28 +0200 + + Add more sanity checks to lzma_stream_buffer_decode(). + + src/liblzma/common/stream_buffer_decoder.c | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +commit c129748675a5daa8838df92bde32cc04f6ce61ba +Author: Lasse Collin +Date: 2009-01-26 14:33:13 +0200 + + Avoid hardcoded constant in easy.c. + + src/liblzma/common/easy.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1859d22d75e072463db74c25bc3f5a7992e5fdf6 +Author: Lasse Collin +Date: 2009-01-26 13:06:49 +0200 + + Tiny bit better sanity check in block_util.c + + src/liblzma/common/block_util.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 2c5fe958e4bbe9b147b10c255955dfe2827fb8e7 +Author: Lasse Collin +Date: 2009-01-25 01:35:56 +0200 + + Fix a dumb bug in Block decoder, which made it return + LZMA_DATA_ERROR with valid data. The bug was added in + e114502b2bc371e4a45449832cb69be036360722. + + src/liblzma/common/block_decoder.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit c81f13ff29271de7293f8af3d81848b1dcae3d19 +Author: Lasse Collin +Date: 2009-01-23 22:27:50 +0200 + + Added lzma_stream_buffer_decode() and made minor cleanups. + + src/liblzma/api/lzma/block.h | 3 +- + src/liblzma/api/lzma/container.h | 51 +++++++++++++++- + src/liblzma/common/Makefile.am | 1 + + src/liblzma/common/stream_buffer_decoder.c | 91 ++++++++++++++++++++++++++++ + 4 files changed, 144 insertions(+), 2 deletions(-) + +commit 0b3318661ce749550b8531dfd469639a08930391 +Author: Lasse Collin +Date: 2009-01-22 12:53:33 +0200 + + Fix a comment. + + src/liblzma/common/common.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 9ec80355a7212a0a2f8c89d98e51b1d8b4e34eec +Author: Lasse Collin +Date: 2009-01-20 16:37:27 +0200 + + Add some single-call buffer-to-buffer coding functions. + + src/liblzma/api/lzma/block.h | 57 +++++ + src/liblzma/api/lzma/container.h | 56 +++++ + src/liblzma/api/lzma/index.h | 70 ++++++- + src/liblzma/common/Makefile.am | 2 + + src/liblzma/common/block_buffer_encoder.c | 305 ++++++++++++++++++++++++++++ + src/liblzma/common/index_decoder.c | 83 +++++++-- + src/liblzma/common/index_encoder.c | 59 +++++- + src/liblzma/common/stream_buffer_encoder.c | 138 +++++++++++++ + tests/test_index.c | 24 +++ + 9 files changed, 768 insertions(+), 26 deletions(-) + +commit d8b58d099340f8f4007b24b211ee41a7210c061c +Author: Lasse Collin +Date: 2009-01-20 13:45:41 +0200 + + Block encoder cleanups + + src/liblzma/common/block_encoder.c | 28 +++++++--------------------- + src/liblzma/common/block_encoder.h | 25 +++++++++++++++++++++++++ + 2 files changed, 32 insertions(+), 21 deletions(-) + +commit 0c09810cb3635cb575cb54e694d41523e7d0a335 +Author: Lasse Collin +Date: 2009-01-20 10:35:15 +0200 + + Use LZMA_PROG_ERROR in lzma_code() as documented in base.h. + + src/liblzma/common/common.c | 24 ++++++++---------------- + 1 files changed, 8 insertions(+), 16 deletions(-) + +commit 2f1a8e8eb898f6c036cde55d153ad348bfab3c00 +Author: Lasse Collin +Date: 2009-01-19 22:53:18 +0200 + + Fix handling of non-fatal errors in lzma_code(). + + src/liblzma/common/common.c | 9 ++++++++- + 1 files changed, 8 insertions(+), 1 deletions(-) + +commit 4810b6bc25087be872960b9dd1d11ff07735dc88 +Author: Lasse Collin +Date: 2009-01-19 14:00:33 +0200 + + Move some LZMA2 constants to lzma2_encoder.h so that they + can be used outside lzma2_encoder.c. + + src/liblzma/lzma/lzma2_encoder.c | 13 ------------- + src/liblzma/lzma/lzma2_encoder.h | 14 ++++++++++++++ + src/liblzma/lzma/lzma_encoder.c | 3 ++- + 3 files changed, 16 insertions(+), 14 deletions(-) + +commit 00be5d2e09f9c7a6a8563465ad8b8042866817a4 +Author: Lasse Collin +Date: 2009-01-19 13:52:36 +0200 + + Remove dead code. + + src/liblzma/lzma/lzma_encoder.h | 8 -------- + 1 files changed, 0 insertions(+), 8 deletions(-) + +commit 128586213f77c9bd82b7e9a62927f6d0c3769d85 +Author: Lasse Collin +Date: 2009-01-17 14:24:25 +0200 + + Beta was supposed to be API stable but I had forgot to rename + lzma_memlimit_encoder and lzma_memlimit_decoder to + lzma_raw_encoder_memlimit and lzma_raw_decoder_memlimit. :-( + Now it is fixed. Hopefully it doesn't cause too much trouble + to those who already thought API is stable. + + src/liblzma/api/lzma/filter.h | 4 ++-- + src/liblzma/common/easy.c | 4 ++-- + src/liblzma/common/filter_common.c | 2 +- + src/liblzma/common/filter_common.h | 2 +- + src/liblzma/common/filter_decoder.c | 4 ++-- + src/liblzma/common/filter_encoder.c | 4 ++-- + src/liblzma/common/stream_decoder.c | 2 +- + src/xz/process.c | 6 +++--- + 8 files changed, 14 insertions(+), 14 deletions(-) + +commit b056379490be5c584c264a967f0540041a163a1e +Author: Lasse Collin +Date: 2009-01-15 14:29:22 +0200 + + Updated THANKS. + + THANKS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit dc8f3be06d54ef6e6cfb5134dd3d25edd08cef89 +Author: Lasse Collin +Date: 2009-01-15 14:27:32 +0200 + + Fixed a bug in 7z2lzma.bash to make it work with .7z files + that use something else than 2^n as the dictionary size. + Thanks to Dan Shechter for the bug report. + + extra/7z2lzma/7z2lzma.bash | 47 ++++++++++++++++++++++--------------------- + 1 files changed, 24 insertions(+), 23 deletions(-) + +commit 8286a60b8f4bd5accfbc9d229d2204bac31994f2 +Author: Lasse Collin +Date: 2009-01-07 18:41:15 +0200 + + Use pthread_sigmask() instead of sigprocmask() when pthreads + are enabled. + + src/common/mythread.h | 6 ++++++ + src/xz/main.c | 4 ++-- + src/xz/private.h | 1 + + 3 files changed, 9 insertions(+), 2 deletions(-) + +commit 4fd43cb3a906f6da2943f69239ee984c4787c9a9 +Author: Lasse Collin +Date: 2008-12-31 20:01:00 +0200 + + Bumped version to 4.999.8beta right after the release + of 4.999.7beta. + + configure.ac | 2 +- + src/liblzma/api/lzma/version.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 061748f5932719643cda73383db715167d543c22 +Author: Lasse Collin +Date: 2008-12-31 18:59:02 +0200 + + Disable Subblock filter from test_compress.sh since it is + disabled by default in configure.ac. + + tests/test_compress.sh | 22 +++++++++++++--------- + 1 files changed, 13 insertions(+), 9 deletions(-) + +commit 9c45658ddc8bd4a7819ef8547d3e7ccf73203e78 +Author: Lasse Collin +Date: 2008-12-31 17:44:20 +0200 + + Disable both Subblock encoder and decoder my default, + since they are not finished and may have security issues too. + + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit b59f1e98f50694cf6a8f1b342fd878feebdb2f88 +Author: Lasse Collin +Date: 2008-12-31 17:42:50 +0200 + + Update some files in debug directory. + + debug/full_flush.c | 2 -- + debug/memusage.c | 2 -- + debug/sync_flush.c | 2 -- + 3 files changed, 0 insertions(+), 6 deletions(-) + +commit d1d17a40d33a9682424ca37282813492f2cba6d0 +Author: Lasse Collin +Date: 2008-12-31 17:41:46 +0200 + + Prepare for 4.999.7beta release. + + AUTHORS | 4 ++-- + README | 34 +++++++++++++++++----------------- + configure.ac | 4 ++-- + src/liblzma/api/lzma/version.h | 2 +- + 4 files changed, 22 insertions(+), 22 deletions(-) + +commit 88d3e6b0b18e24142b6d3b41dc1b84b00c49fef3 +Author: Lasse Collin +Date: 2008-12-31 17:15:03 +0200 + + Cleaned up some comments in the API headers. + + src/liblzma/api/lzma/check.h | 23 +++++++++++------------ + src/liblzma/api/lzma/container.h | 2 +- + src/liblzma/api/lzma/version.h | 4 +++- + 3 files changed, 15 insertions(+), 14 deletions(-) + +commit 322ecf93c961e45a1da8c4a794a7fdacefcd7f40 +Author: Lasse Collin +Date: 2008-12-31 16:29:39 +0200 + + Renamed lzma_options_simple to lzma_options_bcj in the API. + The internal implementation is still using the name "simple". + It may need some cleanups, so I look at it later. + + src/liblzma/api/Makefile.am | 2 +- + src/liblzma/api/lzma.h | 2 +- + src/liblzma/api/lzma/bcj.h | 94 +++++++++++++++++++++++++++++++++++ + src/liblzma/api/lzma/simple.h | 94 ----------------------------------- + src/liblzma/simple/simple_coder.c | 2 +- + src/liblzma/simple/simple_decoder.c | 4 +- + src/liblzma/simple/simple_encoder.c | 4 +- + tests/test_filter_flags.c | 8 ++-- + 8 files changed, 105 insertions(+), 105 deletions(-) + +commit 7eea8bec3abfed883efba66264a1452a1c04f6b0 +Author: Lasse Collin +Date: 2008-12-31 00:57:27 +0200 + + Fixed missing quoting in configure.ac. + + configure.ac | 38 +++++++++++++++++++------------------- + 1 files changed, 19 insertions(+), 19 deletions(-) + +commit 28e75f7086dbe9501d926c370375c69dfb1236ce +Author: Lasse Collin +Date: 2008-12-31 00:48:23 +0200 + + Updated src/liblzma/Makefile.am to use liblzma.pc.in, which + should have been in the previous commit. + + src/liblzma/Makefile.am | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 7ed9d943b31d3ee9c5fb2387e84a241ba33afe90 +Author: Lasse Collin +Date: 2008-12-31 00:30:49 +0200 + + Remove lzma_init() and other init functions from liblzma API. + Half of developers were already forgetting to use these + functions, which could have caused total breakage in some future + liblzma version or even now if --enable-small was used. Now + liblzma uses pthread_once() to do the initializations unless + it has been built with --disable-threads which make these + initializations thread-unsafe. + + When --enable-small isn't used, liblzma currently gets needlessly + linked against libpthread (on systems that have it). While it is + stupid for now, liblzma will need threads in future anyway, so + this stupidity will be temporary only. + + When --enable-small is used, different code CRC32 and CRC64 is + now used than without --enable-small. This made the resulting + binary slightly smaller, but the main reason was to clean it up + and to handle the lack of lzma_init_check(). + + The pkg-config file lzma.pc was renamed to liblzma.pc. I'm not + sure if it works correctly and portably for static linking + (Libs.private includes -pthread or other operating system + specific flags). Hopefully someone complains if it is bad. + + lzma_rc_prices[] is now included as a precomputed array even + with --enable-small. It's just 128 bytes now that it uses uint8_t + instead of uint32_t. Smaller array seemed to be at least as fast + as the more bloated uint32_t array on x86; hopefully it's not bad + on other architectures. + + configure.ac | 29 ++++++++-- + src/common/mythread.h | 34 +++++++++++ + src/liblzma/api/Makefile.am | 1 - + src/liblzma/api/lzma.h | 1 - + src/liblzma/api/lzma/init.h | 85 ---------------------------- + src/liblzma/check/Makefile.am | 29 +++------ + src/liblzma/check/check.c | 10 ++-- + src/liblzma/check/check.h | 25 +++----- + src/liblzma/check/check_init.c | 37 ------------ + src/liblzma/check/crc32.c | 88 ----------------------------- + src/liblzma/check/crc32_fast.c | 88 +++++++++++++++++++++++++++++ + src/liblzma/check/crc32_init.c | 55 ------------------ + src/liblzma/check/crc32_small.c | 54 ++++++++++++++++++ + src/liblzma/check/crc32_tablegen.c | 55 ++++++++++++++++-- + src/liblzma/check/crc64.c | 75 ------------------------ + src/liblzma/check/crc64_fast.c | 75 ++++++++++++++++++++++++ + src/liblzma/check/crc64_small.c | 54 ++++++++++++++++++ + src/liblzma/check/crc64_tablegen.c | 55 ++++++++++++++++-- + src/liblzma/common/Makefile.am | 3 - + src/liblzma/common/common.h | 1 + + src/liblzma/common/init.c | 39 ------------- + src/liblzma/common/init_decoder.c | 31 ---------- + src/liblzma/common/init_encoder.c | 40 ------------- + src/liblzma/liblzma.pc.in | 12 ++++ + src/liblzma/lz/lz_encoder.c | 6 ++ + src/liblzma/lzma.pc.in | 11 ---- + src/liblzma/rangecoder/Makefile.am | 8 +-- + src/liblzma/rangecoder/price.h | 16 +----- + src/liblzma/rangecoder/price_table.c | 2 +- + src/liblzma/rangecoder/price_table_init.c | 55 ------------------ + src/liblzma/rangecoder/price_tablegen.c | 51 ++++++++++++++-- + src/xz/Makefile.am | 5 +- + src/xz/main.c | 3 - + src/xzdec/xzdec.c | 3 - + tests/test_block_header.c | 1 - + tests/test_check.c | 2 - + tests/test_filter_flags.c | 2 - + tests/test_index.c | 2 - + tests/test_stream_flags.c | 2 - + tests/tests.h | 2 +- + 40 files changed, 519 insertions(+), 628 deletions(-) + +commit 5cda29b5665004fc0f21d0c41d78022a6a559ab2 +Author: Lasse Collin +Date: 2008-12-27 19:40:31 +0200 + + Use 28 MiB as memory usage limit for encoding in test_compress.sh. + + tests/test_compress.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 050eb14d29e2537c014662e83599fd8a77f13c45 +Author: Lasse Collin +Date: 2008-12-27 19:32:20 +0200 + + Revert a change made in 3b34851de1eaf358cf9268922fa0eeed8278d680 + that was related to LZMA_MODE_FAST. The original code is slightly + faster although it compresses slightly worse. But since it is fast + mode, it is better to select the faster version. + + src/liblzma/lzma/lzma_encoder_optimum_fast.c | 23 ++++++++--------------- + 1 files changed, 8 insertions(+), 15 deletions(-) + +commit 4820f10d0f173864f6a2ea7479663b509ac53358 +Author: Lasse Collin +Date: 2008-12-27 19:30:19 +0200 + + Some xz command line tool improvements. + + src/xz/args.c | 23 ++++----- + src/xz/message.c | 4 +- + src/xz/options.c | 2 +- + src/xz/process.c | 133 ++++++++++++++++++++++++++++++++++++++++++----------- + src/xz/process.h | 3 + + 5 files changed, 121 insertions(+), 44 deletions(-) + +commit e33194e79d8f5ce07cb4aca909b324ae75098f7e +Author: Lasse Collin +Date: 2008-12-27 19:27:49 +0200 + + Bunch of liblzma tweaks, including some API changes. + The API and ABI should now be very close to stable, + although the code behind it isn't yet. + + src/liblzma/api/lzma.h | 8 ++-- + src/liblzma/api/lzma/block.h | 63 +++++++++++++++++++++++- + src/liblzma/api/lzma/container.h | 76 ++++++++++++++-------------- + src/liblzma/api/lzma/lzma.h | 41 +++++++++------- + src/liblzma/common/alone_decoder.c | 36 +++++++------- + src/liblzma/common/alone_encoder.c | 22 +++----- + src/liblzma/common/auto_decoder.c | 2 +- + src/liblzma/common/block_decoder.c | 54 ++++++++++---------- + src/liblzma/common/block_decoder.h | 4 +- + src/liblzma/common/block_encoder.c | 37 ++++++++------ + src/liblzma/common/block_encoder.h | 4 +- + src/liblzma/common/block_header_decoder.c | 41 ++++++++------- + src/liblzma/common/block_header_encoder.c | 51 +++++++++---------- + src/liblzma/common/block_util.c | 3 +- + src/liblzma/common/easy.c | 45 ++++++----------- + src/liblzma/common/stream_decoder.c | 3 +- + src/liblzma/common/stream_decoder.h | 2 +- + src/liblzma/common/stream_encoder.c | 3 +- + src/liblzma/common/stream_encoder.h | 2 +- + src/liblzma/common/stream_flags_decoder.c | 2 +- + src/liblzma/common/stream_flags_encoder.c | 2 +- + src/liblzma/lzma/lzma_encoder.c | 2 +- + src/liblzma/lzma/lzma_encoder_presets.c | 53 ++++++-------------- + 23 files changed, 294 insertions(+), 262 deletions(-) + +commit 4d00652e75dd2736aedc3a3a8baff3dd0ea38074 +Author: Lasse Collin +Date: 2008-12-18 13:42:52 +0200 + + Updated Makefile.am that was missing from the previous commit. + + src/liblzma/common/Makefile.am | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 634636fa56ccee6e744f78b0abed76c8940f2f8f +Author: Lasse Collin +Date: 2008-12-17 21:49:53 +0200 + + Remove the alignment functions for now. Maybe they will + be added back in some form later, but the current version + wasn't modular, so it would need fixing anyway. + + src/liblzma/api/Makefile.am | 1 - + src/liblzma/api/lzma.h | 1 - + src/liblzma/api/lzma/alignment.h | 60 -------------------- + src/liblzma/common/alignment.c | 114 -------------------------------------- + 4 files changed, 0 insertions(+), 176 deletions(-) + +commit 4fed98417d1687f5eccccb42a133fde3ec81216a +Author: Lasse Collin +Date: 2008-12-17 20:11:23 +0200 + + xz message handling improvements + + src/xz/message.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++----- + src/xz/message.h | 7 +++- + src/xz/process.c | 28 +++++++++++- + 3 files changed, 146 insertions(+), 14 deletions(-) + +commit 653e457e3756ef35e5d1b2be3523b3e4b1e9ee4d +Author: Lasse Collin +Date: 2008-12-15 23:26:43 +0200 + + Fix a dumb bug in .lzma decoder which was introduced in + the previous commit. (Probably the previous commit has + other bugs too, it wasn't tested.) + + src/liblzma/common/alone_decoder.c | 29 ++++++++++++++--------------- + 1 files changed, 14 insertions(+), 15 deletions(-) + +commit 671a5adf1e844bfdd6fd327016c3c28694493158 +Author: Lasse Collin +Date: 2008-12-15 19:39:13 +0200 + + Bunch of liblzma API cleanups and fixes. + + src/liblzma/api/lzma.h | 122 +++++++++++--------- + src/liblzma/api/lzma/base.h | 174 +++++++++++++++++++---------- + src/liblzma/api/lzma/block.h | 211 +++++++++++++++++++++++------------ + src/liblzma/api/lzma/check.h | 28 +++-- + src/liblzma/api/lzma/container.h | 155 +++++++++++++------------- + src/liblzma/api/lzma/delta.h | 12 +- + src/liblzma/api/lzma/filter.h | 27 +++-- + src/liblzma/api/lzma/index.h | 97 ++++++++++++++--- + src/liblzma/api/lzma/index_hash.h | 26 +++- + src/liblzma/api/lzma/init.h | 2 +- + src/liblzma/api/lzma/lzma.h | 12 +- + src/liblzma/api/lzma/simple.h | 4 +- + src/liblzma/api/lzma/stream_flags.h | 46 +++++--- + src/liblzma/api/lzma/version.h | 6 +- + src/liblzma/api/lzma/vli.h | 17 +-- + src/liblzma/common/alone_decoder.c | 47 ++++++--- + src/liblzma/common/auto_decoder.c | 29 +++++ + src/liblzma/common/block_util.c | 52 +++++---- + src/liblzma/common/common.c | 58 ++++++++++ + src/liblzma/common/common.h | 9 ++- + src/liblzma/common/easy.c | 33 ++++-- + src/liblzma/common/filter_common.c | 2 +- + src/liblzma/common/index.c | 11 ++ + src/liblzma/common/index_decoder.c | 46 +++++++- + src/liblzma/common/stream_decoder.c | 47 +++++++- + src/liblzma/lzma/lzma2_encoder.c | 6 +- + tests/test_index.c | 10 +- + 27 files changed, 863 insertions(+), 426 deletions(-) + +commit 17781c2c20fd77029cb32e77792889f2f211d69d +Author: Lasse Collin +Date: 2008-12-15 14:26:52 +0200 + + The LZMA2 decoder fix introduced a bug to LZ decoder, + which made LZ decoder return too early after dictionary + reset. This fixes it. + + src/liblzma/lz/lz_decoder.c | 33 +++++++++++++++++++++++---------- + 1 files changed, 23 insertions(+), 10 deletions(-) + +commit f9f2d1e74398500724041f7fb3c38db35ad8c8d8 +Author: Lasse Collin +Date: 2008-12-15 11:20:22 +0200 + + Added two new test files. + + tests/files/README | 7 +++++++ + tests/files/bad-1-lzma2-8.xz | Bin 0 -> 464 bytes + tests/files/good-1-lzma2-4.xz | Bin 0 -> 464 bytes + 3 files changed, 7 insertions(+), 0 deletions(-) + +commit ff7fb2c605bccc411069e07b9f11fb957aea2ddf +Author: Lasse Collin +Date: 2008-12-15 10:01:59 +0200 + + Fix data corruption in LZMA2 decoder. + + src/liblzma/lz/lz_decoder.c | 17 ++++++++++++++++- + src/liblzma/lz/lz_decoder.h | 8 +++++--- + src/liblzma/lzma/lzma2_decoder.c | 15 +++++++++++---- + 3 files changed, 32 insertions(+), 8 deletions(-) + +commit 1ceebcf7e1bd30b95125f0ad67a09fdb6215d613 +Author: Lasse Collin +Date: 2008-12-13 00:54:11 +0200 + + Name the package "xz" in configure.ac. + + configure.ac | 11 ++++------- + 1 files changed, 4 insertions(+), 7 deletions(-) + +commit a94bf00d0af9b423851905b031be5a645a657820 +Author: Lasse Collin +Date: 2008-12-12 22:43:21 +0200 + + Some adjustments to GCC warning flags. The important change + is the removal of -pedantic. It messes up -Werror (which I + really want to keep so that I don't miss any warnings) with + printf format strings that are in POSIX but not in C99. + + configure.ac | 8 +++++--- + 1 files changed, 5 insertions(+), 3 deletions(-) + +commit 8582d392baacd2cdac07ca60041f8c661323676d +Author: Lasse Collin +Date: 2008-12-10 01:31:00 +0200 + + Remove obsolete comment. + + src/xz/message.c | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit b1ae6dd731ea3636c3c2bfc7aefa71457d3328f1 +Author: Lasse Collin +Date: 2008-12-10 01:27:15 +0200 + + Use "decompression" consistently in --long-help. + + src/xz/message.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1ea9e7f15afd5d3981e2432710e932320597bca9 +Author: Lasse Collin +Date: 2008-12-10 01:23:58 +0200 + + Added preset=NUM to --lzma1 and --lzma2. This makes it easy + to take a preset as a template and modify it a little. + + src/xz/message.c | 1 + + src/xz/options.c | 8 ++++++++ + 2 files changed, 9 insertions(+), 0 deletions(-) + +commit bceb3918dbb21f34976bfdd4c171a81319de71f7 +Author: Lasse Collin +Date: 2008-12-09 17:43:31 +0200 + + Put the file format specification into the public domain. + Same will be done to the actual code later. + + doc/file-format.txt | 24 +++++++++--------------- + 1 files changed, 9 insertions(+), 15 deletions(-) + +commit 6efa2d80d46a38861016f41f0eb6fa2ec9260fe6 +Author: Lasse Collin +Date: 2008-12-09 17:41:49 +0200 + + Make the memusage functions of LZMA1 and LZMA2 encoders + to validate the filter options. Add missing validation + to LZMA2 encoder when options are changed in the middle + of encoding. + + src/liblzma/lzma/lzma2_encoder.c | 5 +++- + src/liblzma/lzma/lzma_encoder.c | 44 +++++++++++++++++++++++++------------ + src/liblzma/lzma/lzma_encoder.h | 2 +- + 3 files changed, 35 insertions(+), 16 deletions(-) + +commit f20a03206b71ff01b827bb7a932411d6a6a4e06a +Author: Lasse Collin +Date: 2008-12-09 10:36:24 +0200 + + Updated THANKS. + + THANKS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit ef7890d56453dca1aeb2e12db29b7e418d93dde4 +Author: Lasse Collin +Date: 2008-12-01 23:04:12 +0200 + + In command line tool, take advantage of memusage calculation's + ability to also validate the filter chain and options (not + implemented yet for all filters). + + src/xz/process.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +commit ccd57afa09e332d664d6d6a7498702791ea5f659 +Author: Lasse Collin +Date: 2008-12-01 22:59:28 +0200 + + Validate the filter chain before checking filter-specific + memory usage. + + src/liblzma/common/filter_common.c | 14 ++++++++++---- + 1 files changed, 10 insertions(+), 4 deletions(-) + +commit c596fda40b62fe1683d0ac34d0c673dcaae2aa15 +Author: Lasse Collin +Date: 2008-12-01 22:58:22 +0200 + + Make the memusage functions of LZMA1 and LZMA2 decoders + to validate the filter options. + + src/liblzma/lzma/lzma2_decoder.c | 7 ++----- + src/liblzma/lzma/lzma_decoder.c | 14 ++++++++++---- + src/liblzma/lzma/lzma_decoder.h | 5 +++++ + 3 files changed, 17 insertions(+), 9 deletions(-) + +commit c58f469be5bb9b0bdab825c6687445fd553f4f3a +Author: Lasse Collin +Date: 2008-12-01 22:55:18 +0200 + + Added the changes for Delta filter that should have been + part of 656ec87882ee74b192c4ea4a233a235eca7b04d4. + + src/liblzma/common/filter_decoder.c | 2 +- + src/liblzma/common/filter_encoder.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit cd708015202dbf7585b84a8781462a20c42a324b +Author: Lasse Collin +Date: 2008-12-01 22:50:28 +0200 + + LZMA2 decoder cleanups. Make it require new LZMA properties + also in the first LZMA chunk after a dictionary reset in + uncompressed chunk. + + src/liblzma/lzma/lzma2_decoder.c | 95 ++++++++++++++++--------------------- + 1 files changed, 41 insertions(+), 54 deletions(-) + +commit 656ec87882ee74b192c4ea4a233a235eca7b04d4 +Author: Lasse Collin +Date: 2008-12-01 16:30:11 +0200 + + Added lzma_delta_coder_memusage() which also validates + the options. + + src/liblzma/delta/Makefile.am | 3 +- + src/liblzma/delta/delta_common.c | 28 +++++++++++++++++------ + src/liblzma/delta/delta_common.h | 19 +--------------- + src/liblzma/delta/delta_decoder.c | 2 +- + src/liblzma/delta/delta_decoder.h | 2 +- + src/liblzma/delta/delta_encoder.c | 14 +++-------- + src/liblzma/delta/delta_encoder.h | 2 +- + src/liblzma/delta/delta_private.h | 44 +++++++++++++++++++++++++++++++++++++ + 8 files changed, 75 insertions(+), 39 deletions(-) + +commit 691a9155b7a28882baf37e9d1e969e32e91dbc7a +Author: Lasse Collin +Date: 2008-11-29 10:03:49 +0200 + + Automake includes the m4 directory, so don't add it in + Makefile.am separately. + + Updated THANKS. + + Makefile.am | 1 - + THANKS | 1 + + 2 files changed, 1 insertions(+), 1 deletions(-) + +commit c7007ddf06ac2b0e018d71d281c21b99f16e7ae0 +Author: Lasse Collin +Date: 2008-11-28 12:00:48 +0200 + + Tested using COLUMNS environment variable to avoid broken + progress indicator but since COLUMNS isn't usually available, + the code was left commented out. + + src/xz/message.c | 14 +++++++++----- + 1 files changed, 9 insertions(+), 5 deletions(-) + +commit ae65dcfde27014e4d811e1a1308aa5d0fe8debbd +Author: Lasse Collin +Date: 2008-11-27 19:28:59 +0200 + + Cleanups to message.c. + + src/xz/message.c | 47 ++++++++++++++++++----------------------------- + 1 files changed, 18 insertions(+), 29 deletions(-) + +commit a8368b75cdcd5427299001cc42839287f27b244d +Author: Lasse Collin +Date: 2008-11-25 02:37:47 +0200 + + Remove the nowadays unneeded memory limitting malloc() wrapper. + + src/liblzma/api/Makefile.am | 1 - + src/liblzma/api/lzma.h | 1 - + src/liblzma/api/lzma/memlimit.h | 207 ------------------------- + src/liblzma/common/Makefile.am | 1 - + src/liblzma/common/memory_limiter.c | 288 ----------------------------------- + tests/Makefile.am | 2 - + tests/test_memlimit.c | 114 -------------- + 7 files changed, 0 insertions(+), 614 deletions(-) + +commit 69472ee5f055a2bb6f28106f0923e1461fd1d080 +Author: Lasse Collin +Date: 2008-11-23 15:09:03 +0200 + + VLI encoder and decoder cleanups. Made encoder return + LZMA_PROG_ERROR in single-call mode if there's no output + space. + + src/liblzma/common/vli_decoder.c | 15 +++++++++------ + src/liblzma/common/vli_encoder.c | 31 ++++++++++++++++++++++++------- + 2 files changed, 33 insertions(+), 13 deletions(-) + +commit 4249c8c15a08f55b51b7012e6aaafce3aa9eb650 +Author: Lasse Collin +Date: 2008-11-22 17:44:33 +0200 + + Typo fix + + src/xz/process.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 6d1d6f4598d121253dbe1084c6866b66e95c361b +Author: Lasse Collin +Date: 2008-11-20 22:59:10 +0200 + + Support NetBSD's errno for O_NOFOLLOW. + + src/xz/io.c | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +commit f901a290eef67b8ea4720ccdf5f46edf775ed9d7 +Author: Lasse Collin +Date: 2008-11-20 18:05:52 +0200 + + Build xzdec and lzmadec from xzdec.c. xzdec supports only .xz + files and lzmadec only .lzma files. + + src/xzdec/Makefile.am | 7 +- + src/xzdec/xzdec.c | 311 +++++++++++++++++++++---------------------------- + 2 files changed, 140 insertions(+), 178 deletions(-) + +commit 86a0ed8f01c8ed44721223f885e679c71b7bb94c +Author: Lasse Collin +Date: 2008-11-20 11:01:29 +0200 + + Minor cleanups to xzdec. + + src/xzdec/xzdec.c | 20 ++++++++++---------- + 1 files changed, 10 insertions(+), 10 deletions(-) + +commit 54f716ba8905d09752dcd1519455a40bd21d5317 +Author: Lasse Collin +Date: 2008-11-19 23:55:22 +0200 + + Added missing check for uint16_t. + + configure.ac | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 1880a3927b23f265f63b2adb86fbdb81ea09eb06 +Author: Lasse Collin +Date: 2008-11-19 23:52:24 +0200 + + Renamed lzma to xz and lzmadec to xzdec. We create symlinks + lzma, unlzma, and lzcat in "make install" for backwards + compatibility with LZMA Utils 4.32.x; I'm not sure if this + should be the default though. + + configure.ac | 4 +- + po/POTFILES.in | 21 +- + src/Makefile.am | 2 +- + src/lzma/Makefile.am | 72 ---- + src/lzma/args.c | 500 -------------------------- + src/lzma/args.h | 56 --- + src/lzma/hardware.c | 122 ------- + src/lzma/hardware.h | 45 --- + src/lzma/io.c | 658 ---------------------------------- + src/lzma/io.h | 97 ----- + src/lzma/list.c | 477 ------------------------- + src/lzma/main.c | 402 --------------------- + src/lzma/main.h | 60 ---- + src/lzma/message.c | 892 ----------------------------------------------- + src/lzma/message.h | 132 ------- + src/lzma/options.c | 352 ------------------- + src/lzma/options.h | 46 --- + src/lzma/private.h | 52 --- + src/lzma/process.c | 391 --------------------- + src/lzma/process.h | 70 ---- + src/lzma/suffix.c | 213 ----------- + src/lzma/suffix.h | 40 --- + src/lzma/util.c | 199 ----------- + src/lzma/util.h | 71 ---- + src/lzmadec/Makefile.am | 29 -- + src/lzmadec/lzmadec.c | 492 -------------------------- + src/xz/Makefile.am | 74 ++++ + src/xz/args.c | 500 ++++++++++++++++++++++++++ + src/xz/args.h | 56 +++ + src/xz/hardware.c | 122 +++++++ + src/xz/hardware.h | 45 +++ + src/xz/io.c | 658 ++++++++++++++++++++++++++++++++++ + src/xz/io.h | 97 +++++ + src/xz/list.c | 477 +++++++++++++++++++++++++ + src/xz/main.c | 402 +++++++++++++++++++++ + src/xz/main.h | 60 ++++ + src/xz/message.c | 892 +++++++++++++++++++++++++++++++++++++++++++++++ + src/xz/message.h | 132 +++++++ + src/xz/options.c | 352 +++++++++++++++++++ + src/xz/options.h | 46 +++ + src/xz/private.h | 52 +++ + src/xz/process.c | 391 +++++++++++++++++++++ + src/xz/process.h | 70 ++++ + src/xz/suffix.c | 213 +++++++++++ + src/xz/suffix.h | 40 +++ + src/xz/util.c | 199 +++++++++++ + src/xz/util.h | 71 ++++ + src/xzdec/Makefile.am | 29 ++ + src/xzdec/xzdec.c | 492 ++++++++++++++++++++++++++ + tests/test_compress.sh | 29 +- + tests/test_files.sh | 4 +- + 51 files changed, 5498 insertions(+), 5500 deletions(-) + +commit e114502b2bc371e4a45449832cb69be036360722 +Author: Lasse Collin +Date: 2008-11-19 20:46:52 +0200 + + Oh well, big messy commit again. Some highlights: + - Updated to the latest, probably final file format version. + - Command line tool reworked to not use threads anymore. + Threading will probably go into liblzma anyway. + - Memory usage limit is now about 30 % for uncompression + and about 90 % for compression. + - Progress indicator with --verbose + - Simplified --help and full --long-help + - Upgraded to the last LGPLv2.1+ getopt_long from gnulib. + - Some bug fixes + + THANKS | 1 + + configure.ac | 48 +- + debug/full_flush.c | 6 +- + debug/known_sizes.c | 2 +- + debug/memusage.c | 2 +- + debug/sync_flush.c | 10 +- + doc/file-format.txt | 260 +++++---- + lib/Makefile.am | 10 +- + lib/getopt.c | 14 +- + lib/getopt.in.h | 226 +++++++ + lib/getopt1.c | 8 +- + lib/getopt_.h | 226 ------- + lib/gettext.h | 240 ------- + m4/getopt.m4 | 64 +-- + src/common/bswap.h | 15 +- + src/common/physmem.h | 4 + + src/common/sysdefs.h | 12 +- + src/liblzma/api/lzma/block.h | 47 +- + src/liblzma/api/lzma/filter.h | 8 + + src/liblzma/api/lzma/index.h | 20 +- + src/liblzma/api/lzma/index_hash.h | 4 +- + src/liblzma/common/block_decoder.c | 59 +- + src/liblzma/common/block_encoder.c | 41 +- + src/liblzma/common/block_header_decoder.c | 31 +- + src/liblzma/common/block_header_encoder.c | 69 +-- + src/liblzma/common/block_util.c | 45 +- + src/liblzma/common/common.h | 8 - + src/liblzma/common/filter_common.c | 4 +- + src/liblzma/common/index.c | 259 ++++---- + src/liblzma/common/index.h | 33 +- + src/liblzma/common/index_decoder.c | 31 +- + src/liblzma/common/index_encoder.c | 16 +- + src/liblzma/common/index_hash.c | 68 +- + src/liblzma/common/stream_decoder.c | 9 +- + src/liblzma/common/stream_encoder.c | 6 +- + src/liblzma/lz/lz_decoder.h | 4 +- + src/liblzma/subblock/subblock_decoder.c | 3 +- + src/lzma/Makefile.am | 9 +- + src/lzma/alloc.c | 106 --- + src/lzma/alloc.h | 42 -- + src/lzma/args.c | 531 +++++++--------- + src/lzma/args.h | 42 +- + src/lzma/error.c | 162 ----- + src/lzma/error.h | 67 -- + src/lzma/hardware.c | 75 ++- + src/lzma/hardware.h | 16 +- + src/lzma/help.c | 170 ----- + src/lzma/help.h | 32 - + src/lzma/io.c | 757 +++++++++++----------- + src/lzma/io.h | 51 ++- + src/lzma/main.c | 392 ++++++++---- + src/lzma/main.h | 60 ++ + src/lzma/message.c | 892 ++++++++++++++++++++++++++ + src/lzma/message.h | 132 ++++ + src/lzma/options.c | 42 +- + src/lzma/options.h | 6 +- + src/lzma/private.h | 28 +- + src/lzma/process.c | 525 +++++++-------- + src/lzma/process.h | 40 ++ + src/lzma/suffix.c | 52 +- + src/lzma/suffix.h | 17 +- + src/lzma/util.c | 100 ++-- + src/lzma/util.h | 43 ++- + src/lzmadec/lzmadec.c | 36 +- + tests/files/README | 12 +- + tests/files/bad-1-block_header-1.xz | Bin 64 -> 64 bytes + tests/files/bad-1-block_header-2.xz | Bin 64 -> 64 bytes + tests/files/bad-1-block_header-3.xz | Bin 68 -> 68 bytes + tests/files/bad-1-block_header-4.xz | Bin 72 -> 76 bytes + tests/files/bad-1-block_header-5.xz | Bin 0 -> 72 bytes + tests/files/bad-1-check-crc32.xz | Bin 68 -> 68 bytes + tests/files/bad-1-check-crc64.xz | Bin 72 -> 72 bytes + tests/files/bad-1-check-sha256.xz | Bin 96 -> 96 bytes + tests/files/bad-1-lzma2-1.xz | Bin 64 -> 64 bytes + tests/files/bad-1-lzma2-2.xz | Bin 424 -> 424 bytes + tests/files/bad-1-lzma2-3.xz | Bin 424 -> 424 bytes + tests/files/bad-1-lzma2-4.xz | Bin 408 -> 408 bytes + tests/files/bad-1-lzma2-5.xz | Bin 408 -> 408 bytes + tests/files/bad-1-lzma2-6.xz | Bin 68 -> 68 bytes + tests/files/bad-1-lzma2-7.xz | Bin 408 -> 408 bytes + tests/files/bad-1-stream_flags-1.xz | Bin 68 -> 68 bytes + tests/files/bad-1-stream_flags-2.xz | Bin 68 -> 68 bytes + tests/files/bad-1-stream_flags-3.xz | Bin 68 -> 68 bytes + tests/files/bad-1-vli-1.xz | Bin 72 -> 72 bytes + tests/files/bad-1-vli-2.xz | Bin 72 -> 76 bytes + tests/files/bad-2-compressed_data_padding.xz | Bin 92 -> 92 bytes + tests/files/bad-2-index-1.xz | Bin 92 -> 92 bytes + tests/files/bad-2-index-2.xz | Bin 92 -> 92 bytes + tests/files/bad-2-index-3.xz | Bin 92 -> 92 bytes + tests/files/bad-2-index-4.xz | Bin 92 -> 92 bytes + tests/files/bad-2-index-5.xz | Bin 0 -> 92 bytes + tests/files/good-1-3delta-lzma2.xz | Bin 528 -> 528 bytes + tests/files/good-1-block_header-1.xz | Bin 72 -> 72 bytes + tests/files/good-1-block_header-2.xz | Bin 68 -> 68 bytes + tests/files/good-1-block_header-3.xz | Bin 68 -> 68 bytes + tests/files/good-1-check-crc32.xz | Bin 68 -> 68 bytes + tests/files/good-1-check-crc64.xz | Bin 72 -> 72 bytes + tests/files/good-1-check-none.xz | Bin 64 -> 64 bytes + tests/files/good-1-check-sha256.xz | Bin 96 -> 96 bytes + tests/files/good-1-delta-lzma2.tiff.xz | Bin 51312 -> 51316 bytes + tests/files/good-1-lzma2-1.xz | Bin 424 -> 424 bytes + tests/files/good-1-lzma2-2.xz | Bin 424 -> 424 bytes + tests/files/good-1-lzma2-3.xz | Bin 408 -> 408 bytes + tests/files/good-1-sparc-lzma2.xz | Bin 2292 -> 2296 bytes + tests/files/good-1-x86-lzma2.xz | Bin 1936 -> 1936 bytes + tests/files/good-2-lzma2.xz | Bin 92 -> 92 bytes + tests/files/unsupported-block_header.xz | Bin 68 -> 68 bytes + tests/files/unsupported-check.xz | Bin 68 -> 68 bytes + tests/files/unsupported-filter_flags-1.xz | Bin 68 -> 68 bytes + tests/files/unsupported-filter_flags-2.xz | Bin 68 -> 68 bytes + tests/files/unsupported-filter_flags-3.xz | Bin 68 -> 68 bytes + tests/test_block_header.c | 16 +- + tests/test_index.c | 42 +- + 113 files changed, 3462 insertions(+), 2946 deletions(-) + +commit 3c3905b53462ae235c9438d86a4dc51086410932 +Author: Lasse Collin +Date: 2008-10-09 11:12:29 +0300 + + Fixed the test that should have been fixed as part + of 1e8e4fd1f3e50129b4541406ad765d2aa1233943. + + tests/test_block_header.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0f295bf7a3ece01f667caae318cc3e3424085886 +Author: Lasse Collin +Date: 2008-10-07 16:42:18 +0300 + + Fixed some help messages. + + src/lzma/help.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 1e8e4fd1f3e50129b4541406ad765d2aa1233943 +Author: Lasse Collin +Date: 2008-10-07 09:40:31 +0300 + + Made the preset numbering more logical in liblzma API. + + src/liblzma/api/lzma/container.h | 20 ++++++++++---------- + src/liblzma/api/lzma/lzma.h | 2 +- + src/liblzma/lzma/lzma_encoder_presets.c | 3 ++- + src/lzma/args.c | 8 ++++---- + src/lzma/args.h | 2 +- + 5 files changed, 18 insertions(+), 17 deletions(-) + +commit 5e4df4c3c09c82bbbb1a916784e3dc717ca4ff81 +Author: Lasse Collin +Date: 2008-10-03 19:36:09 +0300 + + Removed fi from po/LINGUAS. + + po/LINGUAS | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit fcfb86c7770328cfffa2e83b176af9a1ba2d9128 +Author: Lasse Collin +Date: 2008-10-03 07:06:48 +0300 + + Fixed suffix handling with --format=raw. + + src/lzma/suffix.c | 28 +++++++++++++++++++--------- + 1 files changed, 19 insertions(+), 9 deletions(-) + +commit bd137524f2f50e30ba054f42f1f6536cd3cee920 +Author: Lasse Collin +Date: 2008-10-02 22:51:46 +0300 + + Initial changes to change the suffix of the new format to .xz. + This also fixes a bug related to --suffix option. Some issues + with suffixes with --format=raw were not fixed. + + src/lzma/args.c | 67 ++++++++++++++++++++++++++++++------------- + src/lzma/args.h | 13 ++++---- + src/lzma/help.c | 4 +- + src/lzma/process.c | 24 +++++++++------ + src/lzma/suffix.c | 74 +++++++++++++++++++++++++++++++++++++++-------- + tests/test_compress.sh | 3 +- + 6 files changed, 133 insertions(+), 52 deletions(-) + +commit 4c321a41c482821aa3c4d64cdf886a6ed904d844 +Author: Lasse Collin +Date: 2008-09-30 17:43:55 +0300 + + Renamed the test files from .lzma suffix to .xz suffix. + + tests/files/README | 128 ++++++++++++------------ + tests/files/bad-0-backward_size.lzma | Bin 32 -> 0 bytes + tests/files/bad-0-backward_size.xz | Bin 0 -> 32 bytes + tests/files/bad-0-empty-truncated.lzma | Bin 31 -> 0 bytes + tests/files/bad-0-empty-truncated.xz | Bin 0 -> 31 bytes + tests/files/bad-0-footer_magic.lzma | Bin 32 -> 0 bytes + tests/files/bad-0-footer_magic.xz | Bin 0 -> 32 bytes + tests/files/bad-0-header_magic.lzma | Bin 32 -> 0 bytes + tests/files/bad-0-header_magic.xz | Bin 0 -> 32 bytes + tests/files/bad-0-nonempty_index.lzma | Bin 32 -> 0 bytes + tests/files/bad-0-nonempty_index.xz | Bin 0 -> 32 bytes + tests/files/bad-0cat-alone.lzma | Bin 55 -> 0 bytes + tests/files/bad-0cat-alone.xz | Bin 0 -> 55 bytes + tests/files/bad-0cat-header_magic.lzma | Bin 64 -> 0 bytes + tests/files/bad-0cat-header_magic.xz | Bin 0 -> 64 bytes + tests/files/bad-0catpad-empty.lzma | Bin 69 -> 0 bytes + tests/files/bad-0catpad-empty.xz | Bin 0 -> 69 bytes + tests/files/bad-0pad-empty.lzma | Bin 37 -> 0 bytes + tests/files/bad-0pad-empty.xz | Bin 0 -> 37 bytes + tests/files/bad-1-block_header-1.lzma | Bin 64 -> 0 bytes + tests/files/bad-1-block_header-1.xz | Bin 0 -> 64 bytes + tests/files/bad-1-block_header-2.lzma | Bin 64 -> 0 bytes + tests/files/bad-1-block_header-2.xz | Bin 0 -> 64 bytes + tests/files/bad-1-block_header-3.lzma | Bin 68 -> 0 bytes + tests/files/bad-1-block_header-3.xz | Bin 0 -> 68 bytes + tests/files/bad-1-block_header-4.lzma | Bin 72 -> 0 bytes + tests/files/bad-1-block_header-4.xz | Bin 0 -> 72 bytes + tests/files/bad-1-check-crc32.lzma | Bin 68 -> 0 bytes + tests/files/bad-1-check-crc32.xz | Bin 0 -> 68 bytes + tests/files/bad-1-check-crc64.lzma | Bin 72 -> 0 bytes + tests/files/bad-1-check-crc64.xz | Bin 0 -> 72 bytes + tests/files/bad-1-check-sha256.lzma | Bin 96 -> 0 bytes + tests/files/bad-1-check-sha256.xz | Bin 0 -> 96 bytes + tests/files/bad-1-lzma2-1.lzma | Bin 64 -> 0 bytes + tests/files/bad-1-lzma2-1.xz | Bin 0 -> 64 bytes + tests/files/bad-1-lzma2-2.lzma | Bin 424 -> 0 bytes + tests/files/bad-1-lzma2-2.xz | Bin 0 -> 424 bytes + tests/files/bad-1-lzma2-3.lzma | Bin 424 -> 0 bytes + tests/files/bad-1-lzma2-3.xz | Bin 0 -> 424 bytes + tests/files/bad-1-lzma2-4.lzma | Bin 408 -> 0 bytes + tests/files/bad-1-lzma2-4.xz | Bin 0 -> 408 bytes + tests/files/bad-1-lzma2-5.lzma | Bin 408 -> 0 bytes + tests/files/bad-1-lzma2-5.xz | Bin 0 -> 408 bytes + tests/files/bad-1-lzma2-6.lzma | Bin 68 -> 0 bytes + tests/files/bad-1-lzma2-6.xz | Bin 0 -> 68 bytes + tests/files/bad-1-lzma2-7.lzma | Bin 408 -> 0 bytes + tests/files/bad-1-lzma2-7.xz | Bin 0 -> 408 bytes + tests/files/bad-1-stream_flags-1.lzma | Bin 68 -> 0 bytes + tests/files/bad-1-stream_flags-1.xz | Bin 0 -> 68 bytes + tests/files/bad-1-stream_flags-2.lzma | Bin 68 -> 0 bytes + tests/files/bad-1-stream_flags-2.xz | Bin 0 -> 68 bytes + tests/files/bad-1-stream_flags-3.lzma | Bin 68 -> 0 bytes + tests/files/bad-1-stream_flags-3.xz | Bin 0 -> 68 bytes + tests/files/bad-1-vli-1.lzma | Bin 72 -> 0 bytes + tests/files/bad-1-vli-1.xz | Bin 0 -> 72 bytes + tests/files/bad-1-vli-2.lzma | Bin 72 -> 0 bytes + tests/files/bad-1-vli-2.xz | Bin 0 -> 72 bytes + tests/files/bad-2-compressed_data_padding.lzma | Bin 92 -> 0 bytes + tests/files/bad-2-compressed_data_padding.xz | Bin 0 -> 92 bytes + tests/files/bad-2-index-1.lzma | Bin 92 -> 0 bytes + tests/files/bad-2-index-1.xz | Bin 0 -> 92 bytes + tests/files/bad-2-index-2.lzma | Bin 92 -> 0 bytes + tests/files/bad-2-index-2.xz | Bin 0 -> 92 bytes + tests/files/bad-2-index-3.lzma | Bin 92 -> 0 bytes + tests/files/bad-2-index-3.xz | Bin 0 -> 92 bytes + tests/files/bad-2-index-4.lzma | Bin 92 -> 0 bytes + tests/files/bad-2-index-4.xz | Bin 0 -> 92 bytes + tests/files/good-0-empty.lzma | Bin 32 -> 0 bytes + tests/files/good-0-empty.xz | Bin 0 -> 32 bytes + tests/files/good-0cat-empty.lzma | Bin 64 -> 0 bytes + tests/files/good-0cat-empty.xz | Bin 0 -> 64 bytes + tests/files/good-0catpad-empty.lzma | Bin 68 -> 0 bytes + tests/files/good-0catpad-empty.xz | Bin 0 -> 68 bytes + tests/files/good-0pad-empty.lzma | Bin 36 -> 0 bytes + tests/files/good-0pad-empty.xz | Bin 0 -> 36 bytes + tests/files/good-1-3delta-lzma2.lzma | Bin 528 -> 0 bytes + tests/files/good-1-3delta-lzma2.xz | Bin 0 -> 528 bytes + tests/files/good-1-block_header-1.lzma | Bin 72 -> 0 bytes + tests/files/good-1-block_header-1.xz | Bin 0 -> 72 bytes + tests/files/good-1-block_header-2.lzma | Bin 68 -> 0 bytes + tests/files/good-1-block_header-2.xz | Bin 0 -> 68 bytes + tests/files/good-1-block_header-3.lzma | Bin 68 -> 0 bytes + tests/files/good-1-block_header-3.xz | Bin 0 -> 68 bytes + tests/files/good-1-check-crc32.lzma | Bin 68 -> 0 bytes + tests/files/good-1-check-crc32.xz | Bin 0 -> 68 bytes + tests/files/good-1-check-crc64.lzma | Bin 72 -> 0 bytes + tests/files/good-1-check-crc64.xz | Bin 0 -> 72 bytes + tests/files/good-1-check-none.lzma | Bin 64 -> 0 bytes + tests/files/good-1-check-none.xz | Bin 0 -> 64 bytes + tests/files/good-1-check-sha256.lzma | Bin 96 -> 0 bytes + tests/files/good-1-check-sha256.xz | Bin 0 -> 96 bytes + tests/files/good-1-delta-lzma2.tiff.lzma | Bin 51312 -> 0 bytes + tests/files/good-1-delta-lzma2.tiff.xz | Bin 0 -> 51312 bytes + tests/files/good-1-lzma2-1.lzma | Bin 424 -> 0 bytes + tests/files/good-1-lzma2-1.xz | Bin 0 -> 424 bytes + tests/files/good-1-lzma2-2.lzma | Bin 424 -> 0 bytes + tests/files/good-1-lzma2-2.xz | Bin 0 -> 424 bytes + tests/files/good-1-lzma2-3.lzma | Bin 408 -> 0 bytes + tests/files/good-1-lzma2-3.xz | Bin 0 -> 408 bytes + tests/files/good-1-sparc-lzma2.lzma | Bin 2292 -> 0 bytes + tests/files/good-1-sparc-lzma2.xz | Bin 0 -> 2292 bytes + tests/files/good-1-x86-lzma2.lzma | Bin 1936 -> 0 bytes + tests/files/good-1-x86-lzma2.xz | Bin 0 -> 1936 bytes + tests/files/good-2-lzma2.lzma | Bin 92 -> 0 bytes + tests/files/good-2-lzma2.xz | Bin 0 -> 92 bytes + tests/files/unsupported-block_header.lzma | Bin 68 -> 0 bytes + tests/files/unsupported-block_header.xz | Bin 0 -> 68 bytes + tests/files/unsupported-check.lzma | Bin 68 -> 0 bytes + tests/files/unsupported-check.xz | Bin 0 -> 68 bytes + tests/files/unsupported-filter_flags-1.lzma | Bin 68 -> 0 bytes + tests/files/unsupported-filter_flags-1.xz | Bin 0 -> 68 bytes + tests/files/unsupported-filter_flags-2.lzma | Bin 68 -> 0 bytes + tests/files/unsupported-filter_flags-2.xz | Bin 0 -> 68 bytes + tests/files/unsupported-filter_flags-3.lzma | Bin 68 -> 0 bytes + tests/files/unsupported-filter_flags-3.xz | Bin 0 -> 68 bytes + tests/test_files.sh | 6 +- + 116 files changed, 66 insertions(+), 68 deletions(-) + +commit 8e60c889a2816a63013a35c99ce26bf28f5b78eb +Author: Lasse Collin +Date: 2008-09-30 13:57:44 +0300 + + Fixed Stream decoder to actually use the first_stream variable. + + src/liblzma/common/stream_decoder.c | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +commit 3bdbc12c054d1961133ee19802af7dd3c3494543 +Author: Lasse Collin +Date: 2008-09-30 13:56:57 +0300 + + Added one more test file. + + tests/files/README | 15 +++++++++++---- + tests/files/bad-0cat-header_magic.lzma | Bin 0 -> 64 bytes + 2 files changed, 11 insertions(+), 4 deletions(-) + +commit a6639022fdc536e5659b070a465221b4cf7c51fa +Author: Lasse Collin +Date: 2008-09-30 13:34:07 +0300 + + Fixed uninitialized variable in Stream decoder. + + src/liblzma/common/stream_decoder.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit ed3709000a3f17ecefab29b2235d7e2221b00003 +Author: Lasse Collin +Date: 2008-09-30 13:27:28 +0300 + + Added two test files. + + tests/files/README | 6 ++++++ + tests/files/bad-0-footer_magic.lzma | Bin 0 -> 32 bytes + tests/files/bad-0-header_magic.lzma | Bin 0 -> 32 bytes + 3 files changed, 6 insertions(+), 0 deletions(-) + +commit ea560b0ea80525752bdcd0074d24f8dc170bbe29 +Author: Lasse Collin +Date: 2008-09-27 23:49:24 +0300 + + Fix conflicting Subblock helper filter's ID. + + src/liblzma/common/common.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ad97483b6e55142fd8d5c041db057017a891cd95 +Author: Lasse Collin +Date: 2008-09-27 23:37:13 +0300 + + Changed magic bytes to match the updated spec. Filename + suffix wasn't changed yet. + + src/liblzma/common/auto_decoder.c | 4 ++-- + src/liblzma/common/stream_flags_common.c | 2 +- + tests/files/bad-0-backward_size.lzma | Bin 32 -> 32 bytes + tests/files/bad-0-empty-truncated.lzma | Bin 31 -> 31 bytes + tests/files/bad-0-nonempty_index.lzma | Bin 32 -> 32 bytes + tests/files/bad-0cat-alone.lzma | Bin 55 -> 55 bytes + tests/files/bad-0catpad-empty.lzma | Bin 69 -> 69 bytes + tests/files/bad-0pad-empty.lzma | Bin 37 -> 37 bytes + tests/files/bad-1-block_header-1.lzma | Bin 64 -> 64 bytes + tests/files/bad-1-block_header-2.lzma | Bin 64 -> 64 bytes + tests/files/bad-1-block_header-3.lzma | Bin 68 -> 68 bytes + tests/files/bad-1-block_header-4.lzma | Bin 72 -> 72 bytes + tests/files/bad-1-check-crc32.lzma | Bin 68 -> 68 bytes + tests/files/bad-1-check-crc64.lzma | Bin 72 -> 72 bytes + tests/files/bad-1-check-sha256.lzma | Bin 96 -> 96 bytes + tests/files/bad-1-lzma2-1.lzma | Bin 64 -> 64 bytes + tests/files/bad-1-lzma2-2.lzma | Bin 424 -> 424 bytes + tests/files/bad-1-lzma2-3.lzma | Bin 424 -> 424 bytes + tests/files/bad-1-lzma2-4.lzma | Bin 408 -> 408 bytes + tests/files/bad-1-lzma2-5.lzma | Bin 408 -> 408 bytes + tests/files/bad-1-lzma2-6.lzma | Bin 68 -> 68 bytes + tests/files/bad-1-lzma2-7.lzma | Bin 408 -> 408 bytes + tests/files/bad-1-stream_flags-1.lzma | Bin 68 -> 68 bytes + tests/files/bad-1-stream_flags-2.lzma | Bin 68 -> 68 bytes + tests/files/bad-1-stream_flags-3.lzma | Bin 68 -> 68 bytes + tests/files/bad-1-vli-1.lzma | Bin 72 -> 72 bytes + tests/files/bad-1-vli-2.lzma | Bin 72 -> 72 bytes + tests/files/bad-2-compressed_data_padding.lzma | Bin 92 -> 92 bytes + tests/files/bad-2-index-1.lzma | Bin 92 -> 92 bytes + tests/files/bad-2-index-2.lzma | Bin 92 -> 92 bytes + tests/files/bad-2-index-3.lzma | Bin 92 -> 92 bytes + tests/files/bad-2-index-4.lzma | Bin 92 -> 92 bytes + tests/files/good-0-empty.lzma | Bin 32 -> 32 bytes + tests/files/good-0cat-empty.lzma | Bin 64 -> 64 bytes + tests/files/good-0catpad-empty.lzma | Bin 68 -> 68 bytes + tests/files/good-0pad-empty.lzma | Bin 36 -> 36 bytes + tests/files/good-1-3delta-lzma2.lzma | Bin 528 -> 528 bytes + tests/files/good-1-block_header-1.lzma | Bin 72 -> 72 bytes + tests/files/good-1-block_header-2.lzma | Bin 68 -> 68 bytes + tests/files/good-1-block_header-3.lzma | Bin 68 -> 68 bytes + tests/files/good-1-check-crc32.lzma | Bin 68 -> 68 bytes + tests/files/good-1-check-crc64.lzma | Bin 72 -> 72 bytes + tests/files/good-1-check-none.lzma | Bin 64 -> 64 bytes + tests/files/good-1-check-sha256.lzma | Bin 96 -> 96 bytes + tests/files/good-1-delta-lzma2.tiff.lzma | Bin 51312 -> 51312 bytes + tests/files/good-1-lzma2-1.lzma | Bin 424 -> 424 bytes + tests/files/good-1-lzma2-2.lzma | Bin 424 -> 424 bytes + tests/files/good-1-lzma2-3.lzma | Bin 408 -> 408 bytes + tests/files/good-1-sparc-lzma2.lzma | Bin 2292 -> 2292 bytes + tests/files/good-1-x86-lzma2.lzma | Bin 1936 -> 1936 bytes + tests/files/good-2-lzma2.lzma | Bin 92 -> 92 bytes + tests/files/unsupported-block_header.lzma | Bin 68 -> 68 bytes + tests/files/unsupported-check.lzma | Bin 68 -> 68 bytes + tests/files/unsupported-filter_flags-1.lzma | Bin 68 -> 68 bytes + tests/files/unsupported-filter_flags-2.lzma | Bin 68 -> 68 bytes + tests/files/unsupported-filter_flags-3.lzma | Bin 68 -> 68 bytes + 56 files changed, 3 insertions(+), 3 deletions(-) + +commit 7a57069167e9e63394e2b095ee3a63253fcb51c7 +Author: Lasse Collin +Date: 2008-09-27 23:16:09 +0300 + + Remove po/fi.po since I'm not keeping it updated for now. + + po/fi.po | 446 -------------------------------------------------------------- + 1 files changed, 0 insertions(+), 446 deletions(-) + +commit 018ae09df8f2fee5a7374f307df4cb42fad0b81e +Author: Lasse Collin +Date: 2008-09-27 23:13:54 +0300 + + Fix also test_compress.sh. + + tests/test_compress.sh | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 3a62a5fb85d2eebd8666e64ed5d364d095062858 +Author: Lasse Collin +Date: 2008-09-27 23:01:15 +0300 + + Fixed compilation of test_filter_flags.c, which was broken by + 1dcecfb09b55157b8653d747963069c8bed74f04. + + tests/test_filter_flags.c | 16 ++++++++-------- + 1 files changed, 8 insertions(+), 8 deletions(-) + +commit c6ca26eef7cd07eba449035514e2b8f9ac3111c0 +Author: Lasse Collin +Date: 2008-09-27 19:11:02 +0300 + + Updated file format specification. It changes the suffix + of the new format to .xz and removes the recently added + LZMA filter. + + doc/file-format.txt | 125 +++++++++++++-------------------------------------- + 1 files changed, 32 insertions(+), 93 deletions(-) + +commit 1dcecfb09b55157b8653d747963069c8bed74f04 +Author: Lasse Collin +Date: 2008-09-27 19:09:21 +0300 + + Some API changes, bug fixes, cleanups etc. + + configure.ac | 18 +- + debug/full_flush.c | 7 +- + debug/known_sizes.c | 6 +- + debug/memusage.c | 22 ++-- + debug/sync_flush.c | 18 +- + src/liblzma/Makefile.am | 2 +- + src/liblzma/api/lzma/delta.h | 8 +- + src/liblzma/api/lzma/lzma.h | 230 +++++++++++++++--------- + src/liblzma/common/alignment.c | 7 +- + src/liblzma/common/alone_decoder.c | 11 +- + src/liblzma/common/alone_encoder.c | 9 +- + src/liblzma/common/chunk_size.c | 2 +- + src/liblzma/common/easy.c | 20 ++- + src/liblzma/common/filter_common.c | 4 +- + src/liblzma/common/filter_decoder.c | 4 +- + src/liblzma/common/filter_encoder.c | 4 +- + src/liblzma/common/init_encoder.c | 2 +- + src/liblzma/delta/delta_common.c | 12 +- + src/liblzma/delta/delta_common.h | 2 +- + src/liblzma/delta/delta_decoder.c | 2 +- + src/liblzma/delta/delta_encoder.c | 6 +- + src/liblzma/lz/lz_encoder.c | 30 ++-- + src/liblzma/lz/lz_encoder.h | 26 ++-- + src/liblzma/lz/lz_encoder_mf.c | 30 ++-- + src/liblzma/lzma/Makefile.am | 4 +- + src/liblzma/lzma/lzma2_decoder.c | 10 +- + src/liblzma/lzma/lzma2_encoder.c | 27 +-- + src/liblzma/lzma/lzma_common.h | 26 +-- + src/liblzma/lzma/lzma_decoder.c | 37 ++-- + src/liblzma/lzma/lzma_encoder.c | 51 +++--- + src/liblzma/lzma/lzma_encoder_optimum_fast.c | 10 +- + src/liblzma/lzma/lzma_encoder_optimum_normal.c | 20 +- + src/liblzma/lzma/lzma_encoder_presets.c | 50 ++++-- + src/liblzma/rangecoder/Makefile.am | 4 +- + src/liblzma/subblock/subblock_decoder.c | 2 +- + src/lzma/args.c | 33 +++-- + src/lzma/help.c | 17 +- + src/lzma/options.c | 92 ++++++---- + tests/test_block_header.c | 9 +- + tests/test_compress.sh | 4 +- + tests/test_filter_flags.c | 2 +- + 41 files changed, 482 insertions(+), 398 deletions(-) + +commit 5cc5064cae603b649c64c40125c7dd365de54c9d +Author: Lasse Collin +Date: 2008-09-27 11:28:49 +0300 + + Added 7z2lzma.bash. + + extra/7z2lzma/7z2lzma.bash | 114 ++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 114 insertions(+), 0 deletions(-) + +commit f147666a5cd15542d4e427da58629f4a71cc38e1 +Author: Lasse Collin +Date: 2008-09-17 22:11:39 +0300 + + Miscellaneous LZ and LZMA encoder cleanups + + src/liblzma/api/lzma/lzma.h | 14 ------ + src/liblzma/lz/lz_encoder.c | 8 +++- + src/liblzma/lzma/Makefile.am | 1 - + src/liblzma/lzma/lzma_encoder.c | 64 +++++++++++------------------- + src/liblzma/lzma/lzma_encoder_features.c | 59 --------------------------- + 5 files changed, 29 insertions(+), 117 deletions(-) + +commit 13d68b069849e19c33822cd8996cd6447890abb1 +Author: Lasse Collin +Date: 2008-09-13 13:54:00 +0300 + + LZ decoder cleanup + + src/liblzma/lz/lz_decoder.c | 5 ++--- + 1 files changed, 2 insertions(+), 3 deletions(-) + +commit 13a74b78e37f16c9096ba5fe1859cc04eaa2f9f7 +Author: Lasse Collin +Date: 2008-09-13 12:10:43 +0300 + + Renamed constants: + - LZMA_VLI_VALUE_MAX -> LZMA_VLI_MAX + - LZMA_VLI_VALUE_UNKNOWN -> LZMA_VLI_UNKNOWN + - LZMA_HEADER_ERRRO -> LZMA_OPTIONS_ERROR + + debug/full_flush.c | 2 +- + debug/known_sizes.c | 2 +- + debug/sync_flush.c | 2 +- + src/liblzma/api/lzma/alignment.h | 2 +- + src/liblzma/api/lzma/base.h | 4 +- + src/liblzma/api/lzma/block.h | 28 +++++++++++++------------- + src/liblzma/api/lzma/container.h | 12 +++++----- + src/liblzma/api/lzma/filter.h | 28 +++++++++++++------------- + src/liblzma/api/lzma/index.h | 2 +- + src/liblzma/api/lzma/lzma.h | 4 +- + src/liblzma/api/lzma/simple.h | 2 +- + src/liblzma/api/lzma/stream_flags.h | 20 +++++++++--------- + src/liblzma/api/lzma/vli.h | 16 +++++++------- + src/liblzma/common/alignment.c | 6 ++-- + src/liblzma/common/alone_decoder.c | 2 +- + src/liblzma/common/auto_decoder.c | 2 +- + src/liblzma/common/block_decoder.c | 12 +++++----- + src/liblzma/common/block_encoder.c | 6 ++-- + src/liblzma/common/block_header_decoder.c | 16 +++++++------- + src/liblzma/common/block_header_encoder.c | 24 +++++++++++----------- + src/liblzma/common/block_util.c | 8 +++--- + src/liblzma/common/chunk_size.c | 2 +- + src/liblzma/common/easy.c | 4 +- + src/liblzma/common/filter_common.c | 22 ++++++++++---------- + src/liblzma/common/filter_decoder.c | 6 ++-- + src/liblzma/common/filter_encoder.c | 14 ++++++------ + src/liblzma/common/index.c | 24 ++++++++++------------ + src/liblzma/common/index.h | 2 +- + src/liblzma/common/index_hash.c | 13 +++++------ + src/liblzma/common/stream_decoder.c | 4 +- + src/liblzma/common/stream_encoder.c | 4 +- + src/liblzma/common/stream_flags_common.c | 6 ++-- + src/liblzma/common/stream_flags_decoder.c | 6 ++-- + src/liblzma/common/stream_flags_encoder.c | 4 +- + src/liblzma/common/vli_encoder.c | 2 +- + src/liblzma/common/vli_size.c | 2 +- + src/liblzma/delta/delta_common.c | 2 +- + src/liblzma/delta/delta_decoder.c | 2 +- + src/liblzma/delta/delta_encoder.c | 2 +- + src/liblzma/lz/lz_decoder.c | 2 +- + src/liblzma/lz/lz_encoder.c | 2 +- + src/liblzma/lzma/lzma2_decoder.c | 6 ++-- + src/liblzma/lzma/lzma_decoder.c | 14 ++++++------ + src/liblzma/lzma/lzma_encoder.c | 8 +++--- + src/liblzma/simple/simple_coder.c | 2 +- + src/liblzma/simple/simple_decoder.c | 2 +- + src/liblzma/subblock/subblock_decoder.c | 6 ++-- + src/liblzma/subblock/subblock_encoder.c | 17 +++++++-------- + src/lzma/args.c | 2 +- + src/lzma/error.c | 2 +- + src/lzma/list.c | 6 ++-- + src/lzmadec/lzmadec.c | 2 +- + tests/test_block.c | 8 +++--- + tests/test_block_header.c | 30 ++++++++++++++-------------- + tests/test_filter_flags.c | 2 +- + tests/test_index.c | 2 +- + tests/test_stream_flags.c | 8 +++--- + tests/tests.h | 2 +- + 58 files changed, 220 insertions(+), 224 deletions(-) + +commit 320601b2c7b08fc7da9da18d5bf7c3c1a189b080 +Author: Lasse Collin +Date: 2008-09-12 22:41:40 +0300 + + Improved the Stream Flags handling API. + + src/liblzma/api/lzma/stream_flags.h | 84 +++++++++++++++++++++++++++-- + src/liblzma/common/stream_decoder.c | 5 +- + src/liblzma/common/stream_encoder.c | 2 + + src/liblzma/common/stream_flags_common.c | 28 +++++++--- + src/liblzma/common/stream_flags_common.h | 9 +++ + src/liblzma/common/stream_flags_decoder.c | 3 +- + src/liblzma/common/stream_flags_encoder.c | 10 +++- + tests/test_stream_flags.c | 8 ++- + 8 files changed, 129 insertions(+), 20 deletions(-) + +commit ec490da5228263b25bf786bb23d1008468f55b30 +Author: Lasse Collin +Date: 2008-09-11 23:10:44 +0300 + + Simplified debug/known_sizes.c to match the relaxed + requirements of Block encoder. + + debug/known_sizes.c | 14 +++++--------- + 1 files changed, 5 insertions(+), 9 deletions(-) + +commit 16e8b98f2659347edfa74afdbbb9e73311153cb9 +Author: Lasse Collin +Date: 2008-09-11 23:09:24 +0300 + + Remove a check from Block encoder that should have already + been removed in 2ba01bfa755e47ff6af84a978e3c8d63d7d2775e. + + src/liblzma/common/block_encoder.c | 5 ----- + 1 files changed, 0 insertions(+), 5 deletions(-) + +commit 5a710c3805bdf6d7e3c92e954e4e4565b27bcb13 +Author: Lasse Collin +Date: 2008-09-11 20:02:38 +0300 + + Remove bogus #includes. + + src/liblzma/common/Makefile.am | 1 - + src/liblzma/common/stream_decoder.c | 3 -- + src/liblzma/common/stream_encoder.c | 1 - + src/liblzma/common/stream_flags_decoder.h | 31 ----------------------------- + 4 files changed, 0 insertions(+), 36 deletions(-) + +commit 01892b2ca5f69bed0ea746e04b604030d57806bb +Author: Lasse Collin +Date: 2008-09-11 10:49:14 +0300 + + Updated THANKS. + + THANKS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 962f2231d49409fe6852e44ffe8c5dbabb04bc7d +Author: Lasse Collin +Date: 2008-09-11 10:48:12 +0300 + + Fix a compiler error on big endian systems that don't + support unaligned memory access. + + src/common/integer.h | 32 ++++++++++++++++++-------------- + 1 files changed, 18 insertions(+), 14 deletions(-) + +commit fa3ab0df8ae7a8a1ad55b52266dc0fd387458671 +Author: Lasse Collin +Date: 2008-09-11 10:46:14 +0300 + + Silence a compiler warning. + + src/lzma/process.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 9373e81e18822db4972819442ea4c2cb9955470b +Author: Lasse Collin +Date: 2008-09-10 19:16:32 +0300 + + Bumped version to 4.999.6alpha. + + configure.ac | 2 +- + src/liblzma/api/lzma/version.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit cb072b7c8442ba68bb0c62c0abbbe939794887a3 +Author: Lasse Collin +Date: 2008-09-10 17:02:00 +0300 + + Check for LZMA_FILTER_RESERVED_START in filter_flags_encoder.c. + Use LZMA_PROG_ERROR instead of LZMA_HEADER_ERROR if the Filter ID + is in the reserved range. This allows Block Header encoder to + detect unallowed Filter IDs, which is good for Stream encoder. + + src/liblzma/common/filter_flags_encoder.c | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +commit 123ab0acec435c9e9866a99e30482116cfbd9ba5 +Author: Lasse Collin +Date: 2008-09-10 16:44:32 +0300 + + Filter handling cleanups + + src/liblzma/api/lzma/filter.h | 133 +++++++++++++++++++++++++++-------- + src/liblzma/common/filter_common.h | 3 + + src/liblzma/common/filter_decoder.c | 80 +++++++-------------- + src/liblzma/common/filter_decoder.h | 5 -- + src/liblzma/common/filter_encoder.c | 82 +++++++--------------- + src/liblzma/common/filter_encoder.h | 4 - + 6 files changed, 156 insertions(+), 151 deletions(-) + +commit 9cfcd0c4f2f865d8fbbb46ea28344a9be0dd8ad1 +Author: Lasse Collin +Date: 2008-09-10 00:33:00 +0300 + + Comments + + src/liblzma/common/stream_encoder.c | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +commit 2ba01bfa755e47ff6af84a978e3c8d63d7d2775e +Author: Lasse Collin +Date: 2008-09-10 00:27:02 +0300 + + Cleaned up Block encoder and moved the no longer shared + code from block_private.h to block_decoder.c. Now the Block + encoder doesn't need compressed_size and uncompressed_size + from lzma_block structure to be initialized. + + src/liblzma/api/lzma/block.h | 3 - + src/liblzma/common/Makefile.am | 1 - + src/liblzma/common/block_decoder.c | 23 +++++++++- + src/liblzma/common/block_encoder.c | 92 +++++++++++++++++------------------- + src/liblzma/common/block_private.h | 47 ------------------ + 5 files changed, 66 insertions(+), 100 deletions(-) + +commit 07efcb5a6bc5d7018798ebd728586f84183e7d64 +Author: Lasse Collin +Date: 2008-09-07 10:23:13 +0300 + + Changed Filter ID of LZMA to 0x20. + + doc/file-format.txt | 4 ++-- + src/liblzma/api/lzma/lzma.h | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit 32fe5fa541e82c08e054086279079ae5016bd8d8 +Author: Lasse Collin +Date: 2008-09-06 23:42:50 +0300 + + Comments + + src/liblzma/api/lzma/base.h | 81 +++++++++++++++++++++++++------------- + src/liblzma/api/lzma/container.h | 6 ++- + src/liblzma/lz/lz_encoder.c | 3 +- + src/liblzma/lz/lz_encoder.h | 12 +++--- + src/liblzma/lz/lz_encoder_mf.c | 2 +- + 5 files changed, 65 insertions(+), 39 deletions(-) + +commit 0a31ed9d5e3cde4feb094b66f3a8b2c074605d84 +Author: Lasse Collin +Date: 2008-09-06 15:14:30 +0300 + + Some API cleanups + + src/liblzma/api/lzma/base.h | 314 ++++++++++++++++++++++------------- + src/liblzma/api/lzma/check.h | 10 + + src/liblzma/api/lzma/container.h | 40 +++-- + src/liblzma/common/auto_decoder.c | 18 +- + src/liblzma/common/common.c | 7 + + src/liblzma/common/common.h | 18 +- + src/liblzma/common/easy.c | 2 +- + src/liblzma/common/stream_decoder.c | 31 ++-- + src/lzma/process.c | 2 +- + src/lzmadec/lzmadec.c | 6 +- + tests/tests.h | 72 ++------ + 11 files changed, 301 insertions(+), 219 deletions(-) + +commit da98df54400998be2a6c3876f9655a3c51b93c10 +Author: Lasse Collin +Date: 2008-09-04 11:53:06 +0300 + + Added support for raw encoding and decoding to the command + line tool, and made various cleanups. --lzma was renamed to + --lzma1 to prevent people from accidentally using LZMA when + they want LZMA2. + + src/lzma/args.c | 17 +++++++++-------- + src/lzma/args.h | 1 + + src/lzma/help.c | 24 ++++++------------------ + src/lzma/process.c | 42 ++++++++++++++++++++++++++++++++++-------- + 4 files changed, 50 insertions(+), 34 deletions(-) + +commit 2496aee8a7741a8a0d42987db41ff2cf1a4bdabd +Author: Lasse Collin +Date: 2008-09-04 10:39:15 +0300 + + Don't allow LZMA_SYNC_FLUSH with decoders anymore. There's + simply nothing that would use it. Allow LZMA_FINISH to the + decoders, which will usually ignore it (auto decoder and + Stream decoder being exceptions). + + src/liblzma/common/alone_decoder.c | 1 - + src/liblzma/common/block_decoder.c | 2 +- + src/liblzma/common/filter_decoder.c | 2 +- + 3 files changed, 2 insertions(+), 3 deletions(-) + +commit bea301c26d5d52675e11e0236faec0492af98f60 +Author: Lasse Collin +Date: 2008-09-03 17:06:25 +0300 + + Minor updates to the file format specification. + + doc/file-format.txt | 105 +++++++++++++++++++++++++++++++++++++++++---------- + 1 files changed, 85 insertions(+), 20 deletions(-) + +commit 9c75b089b4a9e0edcf4cf7970a4383768707d6c8 +Author: Lasse Collin +Date: 2008-09-02 19:33:32 +0300 + + Command line tool fixes + + src/lzma/process.c | 21 +++++++++++++-------- + 1 files changed, 13 insertions(+), 8 deletions(-) + +commit bab0590504b5aeff460ab4ca8c964dd7c1bad9e4 +Author: Lasse Collin +Date: 2008-09-02 19:31:42 +0300 + + Auto decoder cleanup + + src/liblzma/common/auto_decoder.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 689602336d126a46b60d791a67decab65e1e81f5 +Author: Lasse Collin +Date: 2008-09-02 19:12:12 +0300 + + Updated auto decoder to handle LZMA_CONCATENATED when decoding + LZMA_Alone files. Decoding of concatenated LZMA_Alone files is + intentionally not supported, so it is better to put this in + auto decoder than LZMA_Alone decoder. + + src/liblzma/common/auto_decoder.c | 87 ++++++++++++++++++++++++++++++------- + 1 files changed, 71 insertions(+), 16 deletions(-) + +commit 80c4158f19904026433eb6f5d5ca98a0ecd4f66c +Author: Lasse Collin +Date: 2008-09-02 14:56:52 +0300 + + Stream decoder cleanups + + src/liblzma/common/stream_decoder.c | 57 +++++++++++++++++++--------------- + 1 files changed, 32 insertions(+), 25 deletions(-) + +commit fc681657450ce57be1fe08f7a15d31dcc705e514 +Author: Lasse Collin +Date: 2008-09-02 11:45:39 +0300 + + Some fixes to LZ encoder. + + src/liblzma/lz/lz_encoder.c | 56 +++++++++++++++++++---- + src/liblzma/lz/lz_encoder.h | 18 ++++--- + src/liblzma/lz/lz_encoder_mf.c | 95 ++++++++++++++++------------------------ + 3 files changed, 94 insertions(+), 75 deletions(-) + +commit ede675f9ac1ca82a7d7c290324adba672118bc8d +Author: Lasse Collin +Date: 2008-08-31 11:47:01 +0300 + + Fix wrong pointer calculation in LZMA encoder. + + src/liblzma/lzma/lzma_encoder.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit 3b34851de1eaf358cf9268922fa0eeed8278d680 +Author: Lasse Collin +Date: 2008-08-28 22:53:15 +0300 + + Sort of garbage collection commit. :-| Many things are still + broken. API has changed a lot and it will still change a + little more here and there. The command line tool doesn't + have all the required changes to reflect the API changes, so + it's easy to get "internal error" or trigger assertions. + + configure.ac | 356 +++--- + debug/Makefile.am | 5 +- + debug/crc32.c | 45 + + debug/full_flush.c | 14 +- + debug/hex2bin.c | 54 + + debug/known_sizes.c | 135 ++ + debug/memusage.c | 8 +- + debug/sync_flush.c | 20 +- + src/common/integer.h | 26 +- + src/common/sysdefs.h | 42 +- + src/liblzma/Makefile.am | 17 +- + src/liblzma/api/Makefile.am | 6 +- + src/liblzma/api/lzma.h | 161 ++- + src/liblzma/api/lzma/alignment.h | 6 +- + src/liblzma/api/lzma/alone.h | 52 - + src/liblzma/api/lzma/auto.h | 36 - + src/liblzma/api/lzma/base.h | 61 +- + src/liblzma/api/lzma/block.h | 38 +- + src/liblzma/api/lzma/check.h | 41 +- + src/liblzma/api/lzma/container.h | 252 ++++ + src/liblzma/api/lzma/delta.h | 36 +- + src/liblzma/api/lzma/easy.h | 121 -- + src/liblzma/api/lzma/filter.h | 74 +- + src/liblzma/api/lzma/index.h | 40 +- + src/liblzma/api/lzma/index_hash.h | 12 +- + src/liblzma/api/lzma/lzma.h | 222 ++-- + src/liblzma/api/lzma/memlimit.h | 15 +- + src/liblzma/api/lzma/raw.h | 60 - + src/liblzma/api/lzma/simple.h | 2 +- + src/liblzma/api/lzma/stream.h | 53 - + src/liblzma/api/lzma/stream_flags.h | 17 +- + src/liblzma/api/lzma/subblock.h | 4 +- + src/liblzma/api/lzma/version.h | 10 +- + src/liblzma/api/lzma/vli.h | 131 +-- + src/liblzma/check/check.c | 128 +-- + src/liblzma/check/check.h | 67 +- + src/liblzma/check/sha256.c | 29 +- + src/liblzma/common/Makefile.am | 51 +- + src/liblzma/common/alignment.c | 4 +- + src/liblzma/common/allocator.c | 58 - + src/liblzma/common/alone_decoder.c | 49 +- + src/liblzma/common/alone_decoder.h | 9 +- + src/liblzma/common/alone_encoder.c | 13 +- + src/liblzma/common/auto_decoder.c | 38 +- + src/liblzma/common/block_decoder.c | 67 +- + src/liblzma/common/block_decoder.h | 2 +- + src/liblzma/common/block_encoder.c | 42 +- + src/liblzma/common/block_encoder.h | 2 +- + src/liblzma/common/block_header_decoder.c | 6 +- + src/liblzma/common/block_header_encoder.c | 9 +- + src/liblzma/common/block_util.c | 10 +- + src/liblzma/common/code.c | 203 --- + src/liblzma/common/common.c | 298 +++++ + src/liblzma/common/common.h | 237 ++-- + src/liblzma/common/delta_common.c | 66 - + src/liblzma/common/delta_common.h | 44 - + src/liblzma/common/delta_decoder.c | 61 - + src/liblzma/common/delta_decoder.h | 28 - + src/liblzma/common/delta_encoder.c | 98 -- + src/liblzma/common/delta_encoder.h | 28 - + src/liblzma/common/easy.c | 18 +- + src/liblzma/common/features.c | 66 - + src/liblzma/common/filter_common.c | 262 ++++ + src/liblzma/common/filter_common.h | 52 + + src/liblzma/common/filter_decoder.c | 236 ++++ + src/liblzma/common/filter_decoder.h | 35 + + src/liblzma/common/filter_encoder.c | 308 +++++ + src/liblzma/common/filter_encoder.h | 38 + + src/liblzma/common/filter_flags_decoder.c | 185 +--- + src/liblzma/common/filter_flags_encoder.c | 261 +---- + src/liblzma/common/index_decoder.c | 14 +- + src/liblzma/common/index_encoder.c | 16 +- + src/liblzma/common/index_hash.c | 8 +- + src/liblzma/common/init_encoder.c | 2 +- + src/liblzma/common/memory_usage.c | 112 -- + src/liblzma/common/next_coder.c | 65 - + src/liblzma/common/raw_common.c | 127 -- + src/liblzma/common/raw_common.h | 30 - + src/liblzma/common/raw_decoder.c | 116 -- + src/liblzma/common/raw_decoder.h | 29 - + src/liblzma/common/raw_encoder.c | 111 -- + src/liblzma/common/raw_encoder.h | 29 - + src/liblzma/common/stream_common.c | 23 - + src/liblzma/common/stream_common.h | 31 - + src/liblzma/common/stream_decoder.c | 238 +++- + src/liblzma/common/stream_decoder.h | 4 +- + src/liblzma/common/stream_encoder.c | 35 +- + src/liblzma/common/stream_encoder.h | 2 +- + src/liblzma/common/stream_flags_common.c | 40 + + src/liblzma/common/stream_flags_common.h | 31 + + src/liblzma/common/stream_flags_decoder.c | 2 +- + src/liblzma/common/stream_flags_encoder.c | 2 +- + src/liblzma/common/stream_flags_equal.c | 36 - + src/liblzma/common/version.c | 25 - + src/liblzma/common/vli_decoder.c | 29 +- + src/liblzma/common/vli_encoder.c | 23 +- + src/liblzma/common/vli_size.c | 37 + + src/liblzma/delta/Makefile.am | 34 + + src/liblzma/delta/delta_common.c | 66 + + src/liblzma/delta/delta_common.h | 44 + + src/liblzma/delta/delta_decoder.c | 82 ++ + src/liblzma/delta/delta_decoder.h | 32 + + src/liblzma/delta/delta_encoder.c | 119 ++ + src/liblzma/delta/delta_encoder.h | 30 + + src/liblzma/lz/Makefile.am | 35 +- + src/liblzma/lz/bt2.c | 27 - + src/liblzma/lz/bt2.h | 31 - + src/liblzma/lz/bt3.c | 29 - + src/liblzma/lz/bt3.h | 31 - + src/liblzma/lz/bt4.c | 30 - + src/liblzma/lz/bt4.h | 31 - + src/liblzma/lz/hc3.c | 30 - + src/liblzma/lz/hc3.h | 31 - + src/liblzma/lz/hc4.c | 31 - + src/liblzma/lz/hc4.h | 31 - + src/liblzma/lz/lz_decoder.c | 547 +++------ + src/liblzma/lz/lz_decoder.h | 308 +++--- + src/liblzma/lz/lz_encoder.c | 780 ++++++------ + src/liblzma/lz/lz_encoder.h | 334 ++++-- + src/liblzma/lz/lz_encoder_hash.h | 104 ++ + src/liblzma/lz/lz_encoder_mf.c | 780 ++++++++++++ + src/liblzma/lz/lz_encoder_private.h | 40 - + src/liblzma/lz/match_c.h | 412 ------ + src/liblzma/lz/match_h.h | 69 - + src/liblzma/lzma/Makefile.am | 37 +- + src/liblzma/lzma/fastpos.h | 8 +- + src/liblzma/lzma/lzma2_decoder.c | 318 +++++ + src/liblzma/lzma/lzma2_decoder.h | 35 + + src/liblzma/lzma/lzma2_encoder.c | 406 ++++++ + src/liblzma/lzma/lzma2_encoder.h | 34 + + src/liblzma/lzma/lzma_common.h | 208 +++- + src/liblzma/lzma/lzma_decoder.c | 1306 ++++++++++++-------- + src/liblzma/lzma/lzma_decoder.h | 21 +- + src/liblzma/lzma/lzma_encoder.c | 576 +++++++-- + src/liblzma/lzma/lzma_encoder.h | 38 +- + src/liblzma/lzma/lzma_encoder_features.c | 2 +- + src/liblzma/lzma/lzma_encoder_getoptimum.c | 925 -------------- + src/liblzma/lzma/lzma_encoder_getoptimumfast.c | 201 --- + src/liblzma/lzma/lzma_encoder_init.c | 228 ---- + src/liblzma/lzma/lzma_encoder_optimum_fast.c | 193 +++ + src/liblzma/lzma/lzma_encoder_optimum_normal.c | 875 +++++++++++++ + src/liblzma/lzma/lzma_encoder_presets.c | 52 +- + src/liblzma/lzma/lzma_encoder_private.h | 174 +-- + src/liblzma/lzma/lzma_literal.c | 51 - + src/liblzma/lzma/lzma_literal.h | 71 -- + src/liblzma/rangecoder/Makefile.am | 10 +- + src/liblzma/rangecoder/price.h | 111 ++ + src/liblzma/rangecoder/price_table.c | 84 +- + src/liblzma/rangecoder/price_table_gen.c | 55 - + src/liblzma/rangecoder/price_table_init.c | 33 +- + src/liblzma/rangecoder/price_tablegen.c | 56 + + src/liblzma/rangecoder/range_common.h | 17 +- + src/liblzma/rangecoder/range_decoder.h | 209 ++-- + src/liblzma/rangecoder/range_encoder.h | 92 +-- + src/liblzma/simple/Makefile.am | 12 + + src/liblzma/simple/simple_coder.c | 8 +- + src/liblzma/simple/simple_decoder.c | 47 + + src/liblzma/simple/simple_decoder.h | 29 + + src/liblzma/simple/simple_encoder.c | 45 + + src/liblzma/simple/simple_encoder.h | 30 + + src/liblzma/subblock/Makefile.am | 4 +- + src/liblzma/subblock/subblock_decoder.c | 20 +- + src/liblzma/subblock/subblock_decoder_helper.c | 2 +- + src/liblzma/subblock/subblock_encoder.c | 28 +- + src/lzma/args.c | 35 +- + src/lzma/args.h | 4 +- + src/lzma/options.c | 14 +- + src/lzma/process.c | 88 +- + src/lzmadec/lzmadec.c | 157 +-- + tests/Makefile.am | 1 + + tests/files/README | 303 ++--- + tests/files/bad-0-backward_size.lzma | Bin 0 -> 32 bytes + tests/files/bad-0-empty-truncated.lzma | Bin 0 -> 31 bytes + tests/files/bad-0-nonempty_index.lzma | Bin 0 -> 32 bytes + tests/files/bad-0cat-alone.lzma | Bin 0 -> 55 bytes + tests/files/bad-0catpad-empty.lzma | Bin 0 -> 69 bytes + tests/files/bad-0pad-empty.lzma | Bin 0 -> 37 bytes + tests/files/bad-1-block_header-1.lzma | Bin 0 -> 64 bytes + tests/files/bad-1-block_header-2.lzma | Bin 0 -> 64 bytes + tests/files/bad-1-block_header-3.lzma | Bin 0 -> 68 bytes + tests/files/bad-1-block_header-4.lzma | Bin 0 -> 72 bytes + tests/files/bad-1-check-crc32.lzma | Bin 0 -> 68 bytes + tests/files/bad-1-check-crc64.lzma | Bin 0 -> 72 bytes + tests/files/bad-1-check-sha256.lzma | Bin 0 -> 96 bytes + tests/files/bad-1-lzma2-1.lzma | Bin 0 -> 64 bytes + tests/files/bad-1-lzma2-2.lzma | Bin 0 -> 424 bytes + tests/files/bad-1-lzma2-3.lzma | Bin 0 -> 424 bytes + tests/files/bad-1-lzma2-4.lzma | Bin 0 -> 408 bytes + tests/files/bad-1-lzma2-5.lzma | Bin 0 -> 408 bytes + tests/files/bad-1-lzma2-6.lzma | Bin 0 -> 68 bytes + tests/files/bad-1-lzma2-7.lzma | Bin 0 -> 408 bytes + tests/files/bad-1-stream_flags-1.lzma | Bin 0 -> 68 bytes + tests/files/bad-1-stream_flags-2.lzma | Bin 0 -> 68 bytes + tests/files/bad-1-stream_flags-3.lzma | Bin 0 -> 68 bytes + tests/files/bad-1-vli-1.lzma | Bin 0 -> 72 bytes + tests/files/bad-1-vli-2.lzma | Bin 0 -> 72 bytes + tests/files/bad-2-compressed_data_padding.lzma | Bin 0 -> 92 bytes + tests/files/bad-2-index-1.lzma | Bin 0 -> 92 bytes + tests/files/bad-2-index-2.lzma | Bin 0 -> 92 bytes + tests/files/bad-2-index-3.lzma | Bin 0 -> 92 bytes + tests/files/bad-2-index-4.lzma | Bin 0 -> 92 bytes + tests/files/bad-cat-single-none-pad_garbage_1.lzma | Bin 65 -> 0 bytes + tests/files/bad-cat-single-none-pad_garbage_2.lzma | Bin 65 -> 0 bytes + tests/files/bad-cat-single-none-pad_garbage_3.lzma | Bin 65 -> 0 bytes + tests/files/bad-multi-none-1.lzma | Bin 54 -> 0 bytes + tests/files/bad-multi-none-2.lzma | Bin 53 -> 0 bytes + tests/files/bad-multi-none-3.lzma | Bin 53 -> 0 bytes + tests/files/bad-multi-none-block_1.lzma | Bin 66 -> 0 bytes + tests/files/bad-multi-none-block_2.lzma | Bin 66 -> 0 bytes + tests/files/bad-multi-none-block_3.lzma | Bin 58 -> 0 bytes + tests/files/bad-multi-none-extra_1.lzma | Bin 54 -> 0 bytes + tests/files/bad-multi-none-extra_2.lzma | Bin 54 -> 0 bytes + tests/files/bad-multi-none-extra_3.lzma | Bin 55 -> 0 bytes + tests/files/bad-multi-none-header_1.lzma | Bin 57 -> 0 bytes + tests/files/bad-multi-none-header_2.lzma | Bin 61 -> 0 bytes + tests/files/bad-multi-none-header_3.lzma | Bin 59 -> 0 bytes + tests/files/bad-multi-none-header_4.lzma | Bin 59 -> 0 bytes + tests/files/bad-multi-none-header_5.lzma | Bin 58 -> 0 bytes + tests/files/bad-multi-none-header_6.lzma | Bin 59 -> 0 bytes + tests/files/bad-multi-none-header_7.lzma | Bin 59 -> 0 bytes + tests/files/bad-multi-none-index_1.lzma | Bin 51 -> 0 bytes + tests/files/bad-multi-none-index_2.lzma | Bin 49 -> 0 bytes + tests/files/bad-multi-none-index_3.lzma | Bin 51 -> 0 bytes + tests/files/bad-multi-none-index_4.lzma | Bin 51 -> 0 bytes + tests/files/bad-single-data_after_eopm_1.lzma | Bin 55 -> 0 bytes + tests/files/bad-single-data_after_eopm_2.lzma | Bin 56 -> 0 bytes + tests/files/bad-single-lzma-flush_beginning.lzma | Bin 53 -> 0 bytes + tests/files/bad-single-lzma-flush_twice.lzma | Bin 63 -> 0 bytes + tests/files/bad-single-none-empty.lzma | Bin 19 -> 0 bytes + .../files/bad-single-none-footer_filter_flags.lzma | Bin 30 -> 0 bytes + tests/files/bad-single-none-too_long_vli.lzma | Bin 39 -> 0 bytes + tests/files/bad-single-none-truncated.lzma | Bin 29 -> 0 bytes + tests/files/bad-single-subblock-padding_loop.lzma | Bin 43 -> 0 bytes + tests/files/bad-single-subblock1023-slow.lzma | Bin 7886 -> 0 bytes + tests/files/bad-single-subblock_subblock.lzma | Bin 26 -> 0 bytes + tests/files/good-0-empty.lzma | Bin 0 -> 32 bytes + tests/files/good-0cat-empty.lzma | Bin 0 -> 64 bytes + tests/files/good-0catpad-empty.lzma | Bin 0 -> 68 bytes + tests/files/good-0pad-empty.lzma | Bin 0 -> 36 bytes + tests/files/good-1-3delta-lzma2.lzma | Bin 0 -> 528 bytes + tests/files/good-1-block_header-1.lzma | Bin 0 -> 72 bytes + tests/files/good-1-block_header-2.lzma | Bin 0 -> 68 bytes + tests/files/good-1-block_header-3.lzma | Bin 0 -> 68 bytes + tests/files/good-1-check-crc32.lzma | Bin 0 -> 68 bytes + tests/files/good-1-check-crc64.lzma | Bin 0 -> 72 bytes + tests/files/good-1-check-none.lzma | Bin 0 -> 64 bytes + tests/files/good-1-check-sha256.lzma | Bin 0 -> 96 bytes + tests/files/good-1-delta-lzma2.tiff.lzma | Bin 0 -> 51312 bytes + tests/files/good-1-lzma2-1.lzma | Bin 0 -> 424 bytes + tests/files/good-1-lzma2-2.lzma | Bin 0 -> 424 bytes + tests/files/good-1-lzma2-3.lzma | Bin 0 -> 408 bytes + tests/files/good-1-sparc-lzma2.lzma | Bin 0 -> 2292 bytes + tests/files/good-1-x86-lzma2.lzma | Bin 0 -> 1936 bytes + tests/files/good-2-lzma2.lzma | Bin 0 -> 92 bytes + tests/files/good-cat-single-none-pad.lzma | Bin 64 -> 0 bytes + tests/files/good-multi-none-1.lzma | Bin 75 -> 0 bytes + tests/files/good-multi-none-2.lzma | Bin 53 -> 0 bytes + tests/files/good-multi-none-block_1.lzma | Bin 66 -> 0 bytes + tests/files/good-multi-none-block_2.lzma | Bin 58 -> 0 bytes + tests/files/good-multi-none-extra_1.lzma | Bin 51 -> 0 bytes + tests/files/good-multi-none-extra_2.lzma | Bin 79 -> 0 bytes + tests/files/good-multi-none-extra_3.lzma | Bin 55 -> 0 bytes + tests/files/good-multi-none-header_1.lzma | Bin 58 -> 0 bytes + tests/files/good-multi-none-header_2.lzma | Bin 66 -> 0 bytes + tests/files/good-multi-none-header_3.lzma | Bin 59 -> 0 bytes + tests/files/good-single-delta-lzma.tiff.lzma | Bin 51409 -> 0 bytes + tests/files/good-single-lzma-empty.lzma | Bin 21 -> 0 bytes + tests/files/good-single-lzma-flush_1.lzma | Bin 48 -> 0 bytes + tests/files/good-single-lzma-flush_2.lzma | Bin 63 -> 0 bytes + tests/files/good-single-lzma.lzma | Bin 44 -> 0 bytes + tests/files/good-single-none-empty_1.lzma | Bin 18 -> 0 bytes + tests/files/good-single-none-empty_2.lzma | Bin 26 -> 0 bytes + tests/files/good-single-none-empty_3.lzma | Bin 19 -> 0 bytes + tests/files/good-single-none-pad.lzma | Bin 32 -> 0 bytes + tests/files/good-single-none.lzma | Bin 30 -> 0 bytes + tests/files/good-single-sparc-lzma.lzma | Bin 2263 -> 0 bytes + tests/files/good-single-subblock-lzma.lzma | Bin 50 -> 0 bytes + tests/files/good-single-subblock_implicit.lzma | Bin 35 -> 0 bytes + tests/files/good-single-subblock_rle.lzma | Bin 118 -> 0 bytes + tests/files/good-single-x86-lzma.lzma | Bin 1909 -> 0 bytes + tests/files/malicious-multi-metadata-64PiB.lzma | Bin 51 -> 0 bytes + tests/files/malicious-single-subblock-256MiB.lzma | Bin 30 -> 0 bytes + tests/files/malicious-single-subblock-64PiB.lzma | Bin 45 -> 0 bytes + tests/files/malicious-single-subblock31-slow.lzma | Bin 1233 -> 0 bytes + tests/files/unsupported-block_header.lzma | Bin 0 -> 68 bytes + tests/files/unsupported-check.lzma | Bin 0 -> 68 bytes + tests/files/unsupported-filter_flags-1.lzma | Bin 0 -> 68 bytes + tests/files/unsupported-filter_flags-2.lzma | Bin 0 -> 68 bytes + tests/files/unsupported-filter_flags-3.lzma | Bin 0 -> 68 bytes + tests/test_block_header.c | 28 +- + tests/test_compress.sh | 4 +- + tests/test_filter_flags.c | 51 +- + tests/test_stream_flags.c | 4 +- + tests/tests.h | 8 + + 294 files changed, 9768 insertions(+), 8195 deletions(-) + +commit 57b9a145a527f0716822615e5ed536d33aebd3fc +Author: Lasse Collin +Date: 2008-06-20 17:16:32 +0300 + + Fix test_filter_flags to match the new restriction of lc+lp. + + tests/test_filter_flags.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit eaafc4367c77ec1d910e16d11b4da293969d97a3 +Author: Lasse Collin +Date: 2008-06-20 16:19:54 +0300 + + Remove some redundant code from LZMA encoder. + + src/liblzma/lzma/lzma_encoder.c | 15 +-------------- + 1 files changed, 1 insertions(+), 14 deletions(-) + +commit 0809c46534fa5664fe35d9e98d95e87312ed130e +Author: Lasse Collin +Date: 2008-06-19 16:35:08 +0300 + + Add limit of lc + lp <= 4. Now we can allocate the + literal coder as part of the main LZMA encoder or + decoder structure. + + Make the LZMA decoder to rely on the current internal API + to free the allocated memory in case an error occurs. + + src/liblzma/api/lzma/lzma.h | 10 +++++- + src/liblzma/lzma/lzma_decoder.c | 57 +++++++----------------------- + src/liblzma/lzma/lzma_encoder_init.c | 13 +++---- + src/liblzma/lzma/lzma_encoder_private.h | 2 +- + src/liblzma/lzma/lzma_literal.c | 39 ++++----------------- + src/liblzma/lzma/lzma_literal.h | 13 +++---- + 6 files changed, 43 insertions(+), 91 deletions(-) + +commit d25ab1b96178f06a0e724f58e3cd68300b2b1275 +Author: Lasse Collin +Date: 2008-06-18 21:45:19 +0300 + + Comments + + src/liblzma/lzma/lzma_encoder.c | 7 ++----- + 1 files changed, 2 insertions(+), 5 deletions(-) + +commit 6368a2fa5901c75864be5171dd57a50af7adbb41 +Author: Lasse Collin +Date: 2008-06-18 19:19:02 +0300 + + Delete old code that was supposed to be already deleted + from test_block_header.c. + + tests/test_block_header.c | 30 ------------------------------ + 1 files changed, 0 insertions(+), 30 deletions(-) + +commit 7d17818cec8597f847b0a2537fde991bbc3d9e96 +Author: Lasse Collin +Date: 2008-06-18 18:02:10 +0300 + + Update the code to mostly match the new simpler file format + specification. Simplify things by removing most of the + support for known uncompressed size in most places. + There are some miscellaneous changes here and there too. + + The API of liblzma has got many changes and still some + more will be done soon. While most of the code has been + updated, some things are not fixed (the command line tool + will choke with invalid filter chain, if nothing else). + + Subblock filter is somewhat broken for now. It will be + updated once the encoded format of the Subblock filter + has been decided. + + configure.ac | 41 +- + debug/full_flush.c | 16 +- + debug/sync_flush.c | 15 +- + src/common/bswap.h | 44 ++ + src/common/integer.h | 167 +++++ + src/liblzma/api/Makefile.am | 5 +- + src/liblzma/api/lzma.h | 9 +- + src/liblzma/api/lzma/alone.h | 32 +- + src/liblzma/api/lzma/auto.h | 7 +- + src/liblzma/api/lzma/base.h | 15 + + src/liblzma/api/lzma/block.h | 304 +++------- + src/liblzma/api/lzma/check.h | 18 +- + src/liblzma/api/lzma/copy.h | 29 - + src/liblzma/api/lzma/easy.h | 61 +-- + src/liblzma/api/lzma/extra.h | 114 ---- + src/liblzma/api/lzma/filter.h | 5 +- + src/liblzma/api/lzma/index.h | 204 +++++- + src/liblzma/api/lzma/index_hash.h | 94 +++ + src/liblzma/api/lzma/info.h | 315 --------- + src/liblzma/api/lzma/lzma.h | 2 +- + src/liblzma/api/lzma/metadata.h | 100 --- + src/liblzma/api/lzma/raw.h | 20 +- + src/liblzma/api/lzma/stream.h | 157 +---- + src/liblzma/api/lzma/stream_flags.h | 146 ++--- + src/liblzma/api/lzma/version.h | 2 +- + src/liblzma/api/lzma/vli.h | 83 ++-- + src/liblzma/check/Makefile.am | 1 - + src/liblzma/check/check.c | 55 ++- + src/liblzma/check/check.h | 47 +- + src/liblzma/check/check_byteswap.h | 43 -- + src/liblzma/check/crc32_init.c | 2 +- + src/liblzma/check/crc64_init.c | 2 +- + src/liblzma/check/crc_macros.h | 2 +- + src/liblzma/check/sha256.c | 53 +- + src/liblzma/common/Makefile.am | 31 +- + src/liblzma/common/alignment.c | 5 +- + src/liblzma/common/alone_decoder.c | 77 ++- + src/liblzma/common/alone_encoder.c | 99 ++-- + src/liblzma/common/auto_decoder.c | 18 +- + src/liblzma/common/block_decoder.c | 298 +++------- + src/liblzma/common/block_encoder.c | 228 ++----- + src/liblzma/common/block_header_decoder.c | 400 +++---------- + src/liblzma/common/block_header_encoder.c | 207 +++---- + src/liblzma/common/block_private.h | 51 +-- + src/liblzma/common/block_util.c | 73 +++ + src/liblzma/common/common.h | 44 +- + src/liblzma/common/copy_coder.c | 144 ----- + src/liblzma/common/copy_coder.h | 31 - + src/liblzma/common/delta_common.c | 4 - + src/liblzma/common/delta_common.h | 4 - + src/liblzma/common/delta_decoder.c | 55 +-- + src/liblzma/common/delta_encoder.c | 7 +- + src/liblzma/common/easy.c | 122 ++++ + src/liblzma/common/easy_common.c | 54 -- + src/liblzma/common/easy_common.h | 28 - + src/liblzma/common/easy_multi.c | 103 --- + src/liblzma/common/easy_single.c | 37 -- + src/liblzma/common/extra.c | 34 - + src/liblzma/common/features.c | 4 - + src/liblzma/common/filter_flags_decoder.c | 384 +++-------- + src/liblzma/common/filter_flags_encoder.c | 120 +--- + src/liblzma/common/index.c | 773 ++++++++++++++++++++--- + src/liblzma/common/index.h | 67 ++ + src/liblzma/common/index_decoder.c | 252 ++++++++ + src/liblzma/common/index_encoder.c | 222 +++++++ + src/liblzma/common/index_encoder.h | 30 + + src/liblzma/common/index_hash.c | 340 ++++++++++ + src/liblzma/common/info.c | 814 ------------------------ + src/liblzma/common/memory_usage.c | 1 - + src/liblzma/common/metadata_decoder.c | 578 ----------------- + src/liblzma/common/metadata_decoder.h | 31 - + src/liblzma/common/metadata_encoder.c | 435 ------------- + src/liblzma/common/metadata_encoder.h | 30 - + src/liblzma/common/raw_common.c | 178 ++---- + src/liblzma/common/raw_common.h | 5 +- + src/liblzma/common/raw_decoder.c | 19 +- + src/liblzma/common/raw_decoder.h | 3 +- + src/liblzma/common/raw_encoder.c | 101 +--- + src/liblzma/common/raw_encoder.h | 3 +- + src/liblzma/common/stream_common.h | 3 + + src/liblzma/common/stream_decoder.c | 458 ++++---------- + src/liblzma/common/stream_decoder.h | 28 + + src/liblzma/common/stream_encoder.c | 282 ++++++++ + src/liblzma/common/stream_encoder.h | 30 + + src/liblzma/common/stream_encoder_multi.c | 445 ------------- + src/liblzma/common/stream_encoder_multi.h | 26 - + src/liblzma/common/stream_encoder_single.c | 219 ------- + src/liblzma/common/stream_flags_decoder.c | 260 ++------- + src/liblzma/common/stream_flags_encoder.c | 56 +- + src/liblzma/common/stream_flags_equal.c | 36 + + src/liblzma/common/vli_decoder.c | 68 ++- + src/liblzma/common/vli_encoder.c | 59 +- + src/liblzma/common/vli_reverse_decoder.c | 55 -- + src/liblzma/lz/lz_decoder.c | 6 +- + src/liblzma/lz/lz_decoder.h | 10 +- + src/liblzma/lzma/lzma_decoder.c | 13 +- + src/liblzma/lzma/lzma_decoder.h | 10 +- + src/liblzma/simple/simple_coder.c | 29 +- + src/liblzma/simple/simple_private.h | 4 - + src/liblzma/subblock/subblock_decoder.c | 106 +--- + src/liblzma/subblock/subblock_decoder_helper.c | 5 +- + src/liblzma/subblock/subblock_encoder.c | 8 +- + src/lzma/args.c | 22 +- + src/lzma/args.h | 2 - + src/lzma/error.c | 6 + + src/lzma/process.c | 26 +- + src/lzmadec/lzmadec.c | 8 +- + tests/Makefile.am | 5 +- + tests/test_block_header.c | 411 +++++-------- + tests/test_compress.sh | 65 +-- + tests/test_filter_flags.c | 116 ++--- + tests/test_index.c | 504 ++++++++++++++- + tests/test_info.c | 717 --------------------- + tests/test_stream_flags.c | 134 ++-- + tests/tests.h | 14 +- + 115 files changed, 4845 insertions(+), 8155 deletions(-) + +commit bf6348d1a3ff09fdc06940468f318f75ffa6af11 +Author: Lasse Collin +Date: 2008-06-17 15:03:46 +0300 + + Update the file format specification draft. The new one is + a lot simpler than the previous versions, but it also means + that the existing code will change a lot. + + doc/file-format.txt | 1794 +++++++++++++++------------------------------------ + 1 files changed, 508 insertions(+), 1286 deletions(-) + +commit 803194ddd26f01ff60ba4e9924c6087a56b29827 +Author: Lasse Collin +Date: 2008-06-11 21:42:47 +0300 + + Fix uninitialized variable in LZMA encoder. This was + introduced in 369f72fd656f537a9a8e06f13e6d0d4c242be22f. + + src/liblzma/lzma/lzma_encoder_init.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 0ea98e52ba87453497b1355c51f13bad55c8924a +Author: Lasse Collin +Date: 2008-06-11 15:08:44 +0300 + + Improve command line integer parsing a little in lzma and + lzmadec to make them accept also KiB in addition Ki etc. + Fix also memory usage information in lzmadec --help. + + src/lzma/util.c | 23 ++++++++++++++--------- + src/lzmadec/lzmadec.c | 31 ++++++++++++++++++------------- + 2 files changed, 32 insertions(+), 22 deletions(-) + +commit 436fa5fae96d4e35759aed33066060f09ee8c6ef +Author: Lasse Collin +Date: 2008-06-10 20:36:12 +0300 + + s/decompressed/compressed/ in the command line tool's + error message. + + src/lzma/main.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 369f72fd656f537a9a8e06f13e6d0d4c242be22f +Author: Lasse Collin +Date: 2008-06-01 12:48:17 +0300 + + Fix a buffer overflow in the LZMA encoder. It was due to my + misunderstanding of the code. There's no tiny fix for this + problem, so I also cleaned up the code in general. + + This reduces the speed of the encoder 2-5 % in the fastest + compression mode ("lzma -1"). High compression modes should + have no noticeable performance difference. + + This commit breaks things (especially LZMA_SYNC_FLUSH) but I + will fix them once the new format and LZMA2 has been roughly + implemented. Plain LZMA won't support LZMA_SYNC_FLUSH at all + and won't be supported in the new .lzma format. This may + change still but this is what it looks like now. + + Support for known uncompressed size (that is, LZMA or LZMA2 + without EOPM) is likely to go away. This means there will + be API changes. + + src/liblzma/lz/lz_encoder.c | 113 +----- + src/liblzma/lz/lz_encoder.h | 18 +- + src/liblzma/lzma/lzma_encoder.c | 551 +++++++++++------------- + src/liblzma/lzma/lzma_encoder_getoptimum.c | 59 ++- + src/liblzma/lzma/lzma_encoder_getoptimumfast.c | 4 +- + src/liblzma/lzma/lzma_encoder_init.c | 9 +- + src/liblzma/lzma/lzma_encoder_private.h | 15 +- + src/liblzma/rangecoder/range_encoder.h | 383 +++++++++-------- + 8 files changed, 532 insertions(+), 620 deletions(-) + +commit e55e0e873ce2511325749d415ae547d62ab5f00d +Author: Lasse Collin +Date: 2008-05-30 11:53:41 +0300 + + Typo fixes from meyering. + + doc/faq.txt | 4 ++-- + doc/liblzma-advanced.txt | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit ed6664146fcbe9cc4a3b23b31632182ed812ea93 +Author: Lasse Collin +Date: 2008-05-11 14:24:42 +0300 + + Remove support for pre-C89 libc versions that lack memcpy, + memmove, and memset. + + configure.ac | 2 +- + src/common/sysdefs.h | 15 ++------------- + src/liblzma/common/allocator.c | 2 +- + 3 files changed, 4 insertions(+), 15 deletions(-) + +commit b09464bf9ae694afc2d1dc26188ac4e2e8af0a63 +Author: Lasse Collin +Date: 2008-05-11 14:17:21 +0300 + + Improved C99 compiler detection in configure.ac. It will + pass -std=gnu99 instead of -std=c99 to GCC now, but -pedantic + should still give warnings about GNU extensions like before + except with some special keywords like asm(). + + configure.ac | 24 ++++++++++++------------ + 1 files changed, 12 insertions(+), 12 deletions(-) + +commit 11de5d5267f7a0a7f0a4d34eec147e65eaf9f9cf +Author: Lasse Collin +Date: 2008-05-06 15:15:07 +0300 + + Bunch of grammar fixes from meyering. + + doc/liblzma-security.txt | 8 ++++---- + src/liblzma/api/lzma/memlimit.h | 6 +++--- + src/lzma/help.c | 2 +- + tests/files/README | 2 +- + 4 files changed, 9 insertions(+), 9 deletions(-) + +commit dc192b6343ae36276c85fcf7ef6006147816eadc +Author: Lasse Collin +Date: 2008-05-06 13:41:05 +0300 + + Typo fix + + src/liblzma/api/lzma/init.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 944b62b93239b27b338d117f2668c0e95849659b +Author: Lasse Collin +Date: 2008-05-04 22:29:27 +0300 + + Don't print an error message on broken pipe unless --verbose + is used. + + src/lzma/io.c | 15 ++++++++++++++- + 1 files changed, 14 insertions(+), 1 deletions(-) + +commit 8e074349e47ea6832b8fdf9244e581d453733433 +Author: Lasse Collin +Date: 2008-04-30 22:16:17 +0300 + + Fix a crash with --format=alone if other filters than LZMA + are specified on the command line. + + src/lzma/args.c | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit 2f361ac19b7fd3abcd362de4d470e6a9eb495b73 +Author: Lasse Collin +Date: 2008-04-28 17:08:27 +0300 + + Updated THANKS. + + THANKS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 3be21fb12f4cec2cf07799e8960382f4cb375369 +Author: Lasse Collin +Date: 2008-04-28 17:06:34 +0300 + + Fixed wrong spelling "limitter" to "limiter". This affects + liblzma's API. + + doc/liblzma-security.txt | 14 +- + src/liblzma/api/lzma/base.h | 4 +- + src/liblzma/api/lzma/memlimit.h | 10 +- + src/liblzma/api/lzma/stream.h | 4 +- + src/liblzma/common/Makefile.am | 2 +- + src/liblzma/common/memory_limiter.c | 288 ++++++++++++++++++++++++++++++++++ + src/liblzma/common/memory_limitter.c | 288 ---------------------------------- + src/lzma/list.c | 6 +- + src/lzmadec/lzmadec.c | 12 +- + tests/test_memlimit.c | 4 +- + 10 files changed, 316 insertions(+), 316 deletions(-) + +commit beeb81060821dfec4e7898e0d44b7900dcb2215e +Author: Lasse Collin +Date: 2008-04-25 15:39:50 +0300 + + Prevent LZ encoder from hanging with known uncompressed + size. The "fix" breaks LZMA_SYNC_FLUSH at end of stream + with known uncompressed size, but since it currently seems + likely that support for encoding with known uncompressed + size will go away anyway, I'm not fixing this problem now. + + src/liblzma/lz/lz_encoder.c | 9 +++++++-- + 1 files changed, 7 insertions(+), 2 deletions(-) + +commit c324325f9f13cdeb92153c5d00962341ba070ca2 +Author: Lasse Collin +Date: 2008-04-25 13:58:56 +0300 + + Removed src/liblzma/common/sysdefs.h symlink, which was + annoying, because "make dist" put two copies of sysdefs.h + into the tarball instead of the symlink. + + src/liblzma/check/crc32_table.c | 2 +- + src/liblzma/check/crc64_table.c | 2 +- + src/liblzma/common/Makefile.am | 1 - + src/liblzma/common/common.h | 2 +- + src/liblzma/common/sysdefs.h | 1 - + 5 files changed, 3 insertions(+), 5 deletions(-) + +commit d3ba30243c75c13d094de1793f9c58acdbacc692 +Author: Lasse Collin +Date: 2008-04-25 13:41:29 +0300 + + Added memusage.c to debug directory. + + debug/Makefile.am | 3 +- + debug/memusage.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 57 insertions(+), 1 deletions(-) + +commit 8f804c29aa8471ccd6438ddca254092b8869ca52 +Author: Lasse Collin +Date: 2008-04-25 13:32:35 +0300 + + Bumped version number to 4.999.3alpha. It will become 5.0.0 + once we have a stable release (won't be very soon). The + version number is no longer related to version of LZMA SDK. + + Made some small Automake-related changes to toplevel + Makefile.am and configure.ac. + + Makefile.am | 7 +++++-- + README | 29 +++++++++++++++++++++++++++++ + configure.ac | 4 ++-- + src/liblzma/api/lzma/version.h | 22 ++++++++++------------ + 4 files changed, 46 insertions(+), 16 deletions(-) + +commit c99037ea10f121cbacf60c37a36c29768ae53447 +Author: Lasse Collin +Date: 2008-04-24 20:25:39 +0300 + + Fix a memory leak by calling free(extra->data) in + lzma_extra_free(). + + src/liblzma/common/extra.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 22ba3b0b5043fa481903482ce85015fe775939e5 +Author: Lasse Collin +Date: 2008-04-24 20:23:05 +0300 + + Make unlzma and lzcat symlinks. + + src/lzma/Makefile.am | 12 ++++++++++++ + 1 files changed, 12 insertions(+), 0 deletions(-) + +commit 17c36422d4cbc2c70d5c83ec389406f92cd9e85e +Author: Lasse Collin +Date: 2008-04-24 20:20:27 +0300 + + Fixed a bug in command line option parsing. + + src/lzma/options.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 283f939974c32c47f05d495e8dea455ec646ed64 +Author: Lasse Collin +Date: 2008-04-24 20:19:20 +0300 + + Added two assert()s. + + src/liblzma/lzma/lzma_encoder.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit eb348a60b6e19a7c093f892434f23c4756973ffd +Author: Lasse Collin +Date: 2008-04-24 19:22:53 +0300 + + Switch to uint16_t as the type of range coder probabilities. + + src/liblzma/rangecoder/range_common.h | 25 +++++++++++++++++++------ + 1 files changed, 19 insertions(+), 6 deletions(-) + +commit 6c5306e312bcfd254cf654f88c04e34ba786df3d +Author: Lasse Collin +Date: 2008-04-24 18:39:57 +0300 + + Fix wrong return type (uint32_t -> bool). + + src/liblzma/lz/lz_encoder.c | 2 +- + src/liblzma/lz/lz_encoder.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 712cfe3ebfd24df24d8896b1315c53c3bc4369c8 +Author: Lasse Collin +Date: 2008-04-24 18:38:00 +0300 + + Fix data corruption in LZ encoder with LZMA_SYNC_FLUSH. + + src/liblzma/lz/lz_encoder.c | 16 ++++++++++++++++ + src/liblzma/lz/lz_encoder.h | 4 ++++ + src/liblzma/lz/match_c.h | 23 ++++++++++++++++++----- + 3 files changed, 38 insertions(+), 5 deletions(-) + +commit bc04486e368d20b3027cde625267762aae063965 +Author: Lasse Collin +Date: 2008-04-24 17:33:01 +0300 + + Fix fastpos problem in Makefile.am when built with --enable-small. + + src/liblzma/lzma/Makefile.am | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit 7ab493924e0ed590a5121a15ee54038d238880d3 +Author: Lasse Collin +Date: 2008-04-24 17:30:51 +0300 + + Use 64-bit integer as range encoder's cache size. This fixes a + theoretical data corruption, which should be very hard to trigger + even intentionally. + + src/liblzma/rangecoder/range_encoder.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 641998c3e1ecc8b598fe0eb051fab8b9535c291b +Author: Lasse Collin +Date: 2008-03-24 16:38:40 +0200 + + Replaced the range decoder optimization that used arithmetic + right shift with as fast version that doesn't need + arithmetic right shift. Removed the related check from + configure.ac. + + configure.ac | 1 - + m4/ax_c_arithmetic_rshift.m4 | 36 --------------------- + src/liblzma/rangecoder/range_decoder.h | 53 +++++++++---------------------- + 3 files changed, 16 insertions(+), 74 deletions(-) + +commit ad999efd279d95f1e7ac555b14170e8e9020488c +Author: Lasse Collin +Date: 2008-03-22 14:39:34 +0200 + + Take advantage of arithmetic right shift in range decoder. + + src/liblzma/rangecoder/range_decoder.h | 52 ++++++++++++++++++++++--------- + 1 files changed, 37 insertions(+), 15 deletions(-) + +commit 03e0e8a0d7228b6ff1f0af39e2c040a4e425973d +Author: Lasse Collin +Date: 2008-03-22 14:18:29 +0200 + + Added autoconf check to detect if we can use arithmetic + right shift for optimizations. + + configure.ac | 1 + + m4/ax_c_arithmetic_rshift.m4 | 36 ++++++++++++++++++++++++++++++++++++ + 2 files changed, 37 insertions(+), 0 deletions(-) + +commit 7521bbdc83acab834594a22bec50c8e1bd836298 +Author: Lasse Collin +Date: 2008-03-22 01:26:36 +0200 + + Update a comment to use the variable name rep_len_decoder. + + (And BTW, the previous commit actually did change the + program logic slightly.) + + src/liblzma/lzma/lzma_decoder.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 63b74d000eedaebb8485f623e56864ff5ab71064 +Author: Lasse Collin +Date: 2008-03-22 00:57:33 +0200 + + Demystified the "state" variable in LZMA code. Use the + word literal instead of char for better consistency. + There are still some names with _char instead of _literal + in lzma_optimum, these may be changed later. + + Renamed length coder variables. + + This commit doesn't change the program logic. + + src/liblzma/lzma/lzma_common.h | 69 +++++++++++++++++++++------- + src/liblzma/lzma/lzma_decoder.c | 47 ++++++++++--------- + src/liblzma/lzma/lzma_encoder.c | 14 +++--- + src/liblzma/lzma/lzma_encoder_getoptimum.c | 34 +++++++------- + src/liblzma/lzma/lzma_encoder_init.c | 5 +- + src/liblzma/lzma/lzma_encoder_private.h | 8 ++-- + 6 files changed, 107 insertions(+), 70 deletions(-) + +commit e6eb0a26757e851cef62b9440319a8e73b015cb9 +Author: Lasse Collin +Date: 2008-03-14 23:16:11 +0200 + + Fix data corruption in LZMA encoder. Note that this bug was + specific to liblzma and was *not* present in LZMA SDK. + + src/liblzma/lzma/lzma_encoder.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 7d516f5129e4373a6d57249d7f608c634c66bf12 +Author: Lasse Collin +Date: 2008-03-14 21:32:37 +0200 + + Fix a comment API header. + + src/liblzma/api/lzma/lzma.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 748d6e4274921a350bd0a317380309717441ef9c +Author: Lasse Collin +Date: 2008-03-12 23:14:50 +0200 + + Make lzma_stream.next_in const. Let's see if anyone complains. + + src/liblzma/api/lzma/base.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit bfde3b24a5ae25ce53c854762b6148952386b025 +Author: Lasse Collin +Date: 2008-03-11 15:35:34 +0200 + + Apply a minor speed optimization to LZMA decoder. + + src/liblzma/lzma/lzma_decoder.c | 85 ++++++++++++++++++++------------------- + 1 files changed, 43 insertions(+), 42 deletions(-) + +commit f310c50286d9e4e9c6170bb65348c9bb430a65b4 +Author: Lasse Collin +Date: 2008-03-11 15:17:16 +0200 + + Initialize the last byte of the dictionary to zero so that + lz_get_byte(lz, 0) returns zero. This was broken by + 1a3b21859818e4d8e89a1da99699233c1bfd197d. + + src/liblzma/lz/lz_decoder.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 5ead36cf7f823093672a4e43c3180b38c9abbaff +Author: Lasse Collin +Date: 2008-03-10 15:57:55 +0200 + + Really fix the price count initialization. + + src/liblzma/lzma/lzma_encoder_init.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit d4d7feb83d1a1ded8f662a82e21e053841ca726c +Author: Lasse Collin +Date: 2008-03-10 13:47:17 +0200 + + Updated THANKS. + + THANKS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 0541c5ea63ef3c0ff85eeddb0a420e56b0c65258 +Author: Lasse Collin +Date: 2008-03-10 13:46:48 +0200 + + Initialize align_price_count and match_price_count in + lzma_encoder_init.c. While we don't call + fill_distances_prices() and fill_align_prices() in + lzma_lzma_encoder_init(), we still need to initialize + these two variables so that the fill functions get + called in lzma_encoder_getoptimum.c in the beginning + of a stream. + + src/liblzma/lzma/lzma_encoder_init.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +commit 596fa1fac72823e4ef5bc26bb53f9090445bf748 +Author: Lasse Collin +Date: 2008-03-10 13:44:29 +0200 + + Always initialize lz->temp_size in lz_decoder.c. temp_size did + get initialized as a side-effect after allocating a new decoder, + but not when the decoder was reused. + + src/liblzma/lz/lz_decoder.c | 11 ++++++----- + 1 files changed, 6 insertions(+), 5 deletions(-) + +commit 45e43e169527e7a98a8c8a821d37bf25822b764d +Author: Lasse Collin +Date: 2008-03-10 13:41:25 +0200 + + Don't fill allocated memory with 0xFD when debugging is + enabled. It hides errors from Valgrind. + + src/liblzma/common/allocator.c | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +commit c0e19e0662205f81a86da8903cdc325d50635870 +Author: Lasse Collin +Date: 2008-02-28 10:24:31 +0200 + + Remove two redundant validity checks from the LZMA decoder. + These are already checked elsewhere, so omitting these + gives (very) tiny speed up. + + src/liblzma/lzma/lzma_decoder.c | 23 ++++------------------- + 1 files changed, 4 insertions(+), 19 deletions(-) + +commit de7485806284d1614095ae8cb2ebbb5d74c9ac45 +Author: Lasse Collin +Date: 2008-02-06 13:25:32 +0200 + + Tiny clean up to file-format.txt. + + doc/file-format.txt | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 1a3b21859818e4d8e89a1da99699233c1bfd197d +Author: Lasse Collin +Date: 2008-02-02 14:51:06 +0200 + + Don't memzero() the history buffer when initializing LZ + decoder. There's no danger of information leak here, so + it isn't required. Doing memzero() takes a lot of time + with large dictionaries, which could make it easier to + construct DoS attack to consume too much CPU time. + + src/liblzma/lz/lz_decoder.c | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +commit 7e796e312bf644ea95aea0ff85480f47cfa30fc0 +Author: Lasse Collin +Date: 2008-02-01 08:39:26 +0200 + + Do uncompressed size validation in raw encoder. This way + it gets done for not only raw encoder, but also Block + and LZMA_Alone encoders. + + src/liblzma/common/raw_encoder.c | 90 ++++++++++++++++++++++++++++++------- + 1 files changed, 73 insertions(+), 17 deletions(-) + +commit 7dd48578a3853e0cfab9f1830bc30927173ec4bc +Author: Lasse Collin +Date: 2008-02-01 08:32:05 +0200 + + Avoid unneeded function call in raw_common.c. + + src/liblzma/common/raw_common.c | 20 +++++++++++--------- + 1 files changed, 11 insertions(+), 9 deletions(-) + +commit b596fac963c3ff96f615d4d9b427a213ec341211 +Author: Lasse Collin +Date: 2008-01-26 21:42:38 +0200 + + Updated THANKS. + + THANKS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit e9f6e9c075ad93141a568d94f7d4eb0f2edbd6c2 +Author: Lasse Collin +Date: 2008-01-26 21:40:23 +0200 + + Added note.GNU-stack to x86 assembler files. It is needed + when using non-executable stack. + + src/liblzma/check/crc32_x86.S | 9 +++++++++ + src/liblzma/check/crc64_x86.S | 9 +++++++++ + 2 files changed, 18 insertions(+), 0 deletions(-) + +commit 4c7ad179c78f97f68ad548cb40a9dfa6871655ae +Author: Lasse Collin +Date: 2008-01-26 19:12:50 +0200 + + Added api/lzma/easy.h. I had forgot to add this to the + git repo. Thanks to Stephan Kulow. + + src/liblzma/api/lzma/easy.h | 174 +++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 174 insertions(+), 0 deletions(-) + +commit 288b232f54c3692cd36f471d4042f51daf3ea79f +Author: Lasse Collin +Date: 2008-01-26 11:09:17 +0200 + + Added more test files. + + tests/files/README | 11 +++++++++++ + tests/files/bad-multi-none-header_7.lzma | Bin 0 -> 59 bytes + tests/files/good-single-sparc-lzma.lzma | Bin 0 -> 2263 bytes + tests/files/good-single-x86-lzma.lzma | Bin 0 -> 1909 bytes + 4 files changed, 11 insertions(+), 0 deletions(-) + +commit c467b0defccf233d0c79234407bc38d7d09574d3 +Author: Lasse Collin +Date: 2008-01-26 10:47:55 +0200 + + Added more test files. + + tests/files/README | 6 ++++++ + tests/files/bad-multi-none-block_3.lzma | Bin 0 -> 58 bytes + tests/files/good-multi-none-block_2.lzma | Bin 0 -> 58 bytes + 3 files changed, 6 insertions(+), 0 deletions(-) + +commit f9842f712732c482f2def9f24437851e57dd83f8 +Author: Lasse Collin +Date: 2008-01-26 00:25:34 +0200 + + Return LZMA_HEADER_ERROR if LZMA_SYNC_FLUSH is used with any + of the so called simple filters. If there is demand, limited + support for LZMA_SYNC_FLUSH may be added in future. + + After this commit, using LZMA_SYNC_FLUSH shouldn't cause + undefined behavior in any situation. + + src/liblzma/api/lzma/simple.h | 9 +++++++++ + src/liblzma/simple/simple_coder.c | 8 ++++++++ + 2 files changed, 17 insertions(+), 0 deletions(-) + +commit e988ea1d1a286dd0f27af0657f9665d5cd8573aa +Author: Lasse Collin +Date: 2008-01-25 23:50:35 +0200 + + Added more Multi-Block test files. Improved some + descriptions in the test files' README. + + tests/files/README | 34 ++++++++++++++++++++++++----- + tests/files/bad-multi-none-block_1.lzma | Bin 0 -> 66 bytes + tests/files/bad-multi-none-block_2.lzma | Bin 0 -> 66 bytes + tests/files/good-multi-none-block_1.lzma | Bin 0 -> 66 bytes + 4 files changed, 28 insertions(+), 6 deletions(-) + +commit 4441e004185cd4c61bda184010eca5924c9dec87 +Author: Lasse Collin +Date: 2008-01-25 23:12:36 +0200 + + Combine lzma_options_block validation needed by both Block + encoder and decoder, and put the shared things to + block_private.h. Improved the checks a little so that + they may detect too big Compressed Size at initialization + time if lzma_options_block.total_size or .total_limit is + known. + + Allow encoding and decoding Blocks with combinations of + fields that are not allowed by the file format specification. + Doing this requires that the application passes such a + combination in lzma_options_lzma; liblzma doesn't do that, + but it's not impossible that someone could find them useful + in some custom file format. + + src/liblzma/common/block_decoder.c | 37 +++++++++++---------------- + src/liblzma/common/block_encoder.c | 32 ++++------------------ + src/liblzma/common/block_private.h | 50 ++++++++++++++++++++++++++++++++++++ + 3 files changed, 71 insertions(+), 48 deletions(-) + +commit bf4200c818fcf9102e56328d39cde91bfa13cfb6 +Author: Lasse Collin +Date: 2008-01-25 19:21:22 +0200 + + Added test_memlimit.c. + + tests/Makefile.am | 2 + + tests/test_memlimit.c | 114 +++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 116 insertions(+), 0 deletions(-) + +commit 7b8fc7e6b501a32a36636dac79ecb57099269005 +Author: Lasse Collin +Date: 2008-01-25 19:20:28 +0200 + + Improved the memory limitter: + - Added lzma_memlimit_max() and lzma_memlimit_reached() + API functions. + - Added simple estimation of malloc()'s memory usage + overhead. + - Fixed integer overflow detection in lzma_memlimit_alloc(). + - Made some white space cleanups and added more comments. + + The description of lzma_memlimit_max() in memlimit.h is bad + and should be improved. + + src/liblzma/api/lzma/memlimit.h | 35 ++++++++++++ + src/liblzma/common/memory_limitter.c | 97 +++++++++++++++++++++++++++++----- + 2 files changed, 118 insertions(+), 14 deletions(-) + +commit e0c3d0043da2f670cfdb1abbb3223d5a594ad8db +Author: Lasse Collin +Date: 2008-01-25 13:55:52 +0200 + + Use more parenthesis in succeed() macro in tests/tests.h. + + tests/tests.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 1fd76d488179580d37f31ee11948f4932aed31fd +Author: Lasse Collin +Date: 2008-01-24 14:49:34 +0200 + + Added more Multi-Block Stream test files. + + tests/files/README | 23 +++++++++++++++++++++++ + tests/files/bad-multi-none-header_2.lzma | Bin 0 -> 61 bytes + tests/files/bad-multi-none-header_3.lzma | Bin 0 -> 59 bytes + tests/files/bad-multi-none-header_4.lzma | Bin 0 -> 59 bytes + tests/files/bad-multi-none-header_5.lzma | Bin 0 -> 58 bytes + tests/files/bad-multi-none-header_6.lzma | Bin 0 -> 59 bytes + tests/files/good-multi-none-header_3.lzma | Bin 0 -> 59 bytes + 7 files changed, 23 insertions(+), 0 deletions(-) + +commit 6e27b1098a28f4ce09bfa6df68ad94182dfc2936 +Author: Lasse Collin +Date: 2008-01-24 00:46:05 +0200 + + Added bunch of test files containing Multi-Block Streams. + + tests/files/README | 53 +++++++++++++++++++++++++++++ + tests/files/bad-multi-none-1.lzma | Bin 0 -> 54 bytes + tests/files/bad-multi-none-2.lzma | Bin 0 -> 53 bytes + tests/files/bad-multi-none-3.lzma | Bin 0 -> 53 bytes + tests/files/bad-multi-none-extra_1.lzma | Bin 0 -> 54 bytes + tests/files/bad-multi-none-extra_2.lzma | Bin 0 -> 54 bytes + tests/files/bad-multi-none-extra_3.lzma | Bin 0 -> 55 bytes + tests/files/bad-multi-none-header_1.lzma | Bin 0 -> 57 bytes + tests/files/bad-multi-none-index_1.lzma | Bin 0 -> 51 bytes + tests/files/bad-multi-none-index_2.lzma | Bin 0 -> 49 bytes + tests/files/bad-multi-none-index_3.lzma | Bin 0 -> 51 bytes + tests/files/bad-multi-none-index_4.lzma | Bin 0 -> 51 bytes + tests/files/good-multi-none-1.lzma | Bin 0 -> 75 bytes + tests/files/good-multi-none-2.lzma | Bin 0 -> 53 bytes + tests/files/good-multi-none-extra_1.lzma | Bin 0 -> 51 bytes + tests/files/good-multi-none-extra_2.lzma | Bin 0 -> 79 bytes + tests/files/good-multi-none-extra_3.lzma | Bin 0 -> 55 bytes + tests/files/good-multi-none-header_1.lzma | Bin 0 -> 58 bytes + tests/files/good-multi-none-header_2.lzma | Bin 0 -> 66 bytes + 19 files changed, 53 insertions(+), 0 deletions(-) + +commit db9df0a9609c01a00a227329fb96e983971040f5 +Author: Lasse Collin +Date: 2008-01-23 23:43:00 +0200 + + Fix decoding of empty Metadata Blocks, that don't have + even the Metadata Flags field. Earlier the code allowed + such files; now they are prohibited as the file format + specification requires. + + src/liblzma/common/metadata_decoder.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit 765f0b05f6e95ed9194fb90819cee189ebbac36b +Author: Lasse Collin +Date: 2008-01-23 23:38:18 +0200 + + Fix a bug related to 99e12af4e2b866c011fe0106cd1e0bfdcc8fe9c6. + lzma_metadata.header_metadata_size was not properly set to + zero if the Metadata had only the Metadata Flags field. + + src/liblzma/common/metadata_decoder.c | 13 +++++++------ + 1 files changed, 7 insertions(+), 6 deletions(-) + +commit 3a7cc5c3dec7b078941f961b0393b86c418883b6 +Author: Lasse Collin +Date: 2008-01-23 23:35:49 +0200 + + Fix decoding of Extra Records that have empty Data. + + src/liblzma/common/metadata_decoder.c | 13 ++++++++++++- + 1 files changed, 12 insertions(+), 1 deletions(-) + +commit e5fdec93e273855c1bcc2579b83cfb481a9a1492 +Author: Lasse Collin +Date: 2008-01-23 22:02:38 +0200 + + Add the trailing '\0' to lzma_extra.data as the API header + already documents. + + src/liblzma/common/metadata_decoder.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit ed40dc5a2c28a8dfccab8c165b3780738eeef93e +Author: Lasse Collin +Date: 2008-01-23 21:21:21 +0200 + + Added debug/full_flush.c. + + debug/Makefile.am | 3 +- + debug/full_flush.c | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 107 insertions(+), 1 deletions(-) + +commit ae0cd09a666a1682da8fc09487322227679e218d +Author: Lasse Collin +Date: 2008-01-23 21:05:33 +0200 + + Return LZMA_STREAM_END instead of LZMA_OK if + LZMA_SYNC_FLUSH or LZMA_FULL_FLUSH is used when + there's no unfinished Block open. + + src/liblzma/common/stream_encoder_multi.c | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +commit 0e80ded13dfceb98f9494cbb5381a95eb44d03db +Author: Lasse Collin +Date: 2008-01-23 20:05:01 +0200 + + Added bad-single-none-footer_filter_flags.lzma and + bad-single-none-too_long_vli.lzma. + + tests/files/README | 5 +++++ + .../files/bad-single-none-footer_filter_flags.lzma | Bin 0 -> 30 bytes + tests/files/bad-single-none-too_long_vli.lzma | Bin 0 -> 39 bytes + 3 files changed, 5 insertions(+), 0 deletions(-) + +commit 8c8eb14055d8dd536b1b1c58fb284d34bb8ed1dd +Author: Lasse Collin +Date: 2008-01-23 13:42:35 +0200 + + Fixed a typo. + + src/liblzma/subblock/subblock_decoder_helper.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 980f65a9a10160c4d105767871e3002b9aaba3e0 +Author: Lasse Collin +Date: 2008-01-23 13:40:45 +0200 + + Fix a memory leak in the Subblock encoder. + + src/liblzma/subblock/subblock_encoder.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 99e12af4e2b866c011fe0106cd1e0bfdcc8fe9c6 +Author: Lasse Collin +Date: 2008-01-23 13:36:07 +0200 + + Fix Size of Header Metadata Block handling. Now + lzma_metadata.header_metadata_size == LZMA_VLI_VALUE_UNKNOWN + is not allowed at all. To indicate missing Header Metadata + Block, header_metadata_size must be set to zero. This is + what Metadata decoder does after this patch too. + + Note that other missing fields in lzma_metadata are still + indicated with LZMA_VLI_VALUE_UNKNOWN. This isn't as + illogical as it sounds at first, because missing Size of + Header Metadata Block means that Header Metadata Block is + not present in the Stream. With other Metadata fields, + a missing field means only that the value is unknown. + + src/liblzma/common/info.c | 13 ++++--------- + src/liblzma/common/metadata_decoder.c | 6 ++++++ + src/liblzma/common/metadata_encoder.c | 11 +++++------ + tests/test_info.c | 4 ++-- + 4 files changed, 17 insertions(+), 17 deletions(-) + +commit 58b78ab20c1bcced45cf71ae6684868fc90b4b81 +Author: Lasse Collin +Date: 2008-01-23 13:15:55 +0200 + + Fix a memory leak in metadata_decoder.c. + + src/liblzma/common/metadata_decoder.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 4d8cdbdab44400fd98f0f18a0f701e27cd1acdae +Author: Lasse Collin +Date: 2008-01-23 13:13:58 +0200 + + Fix the fix 863028cb7ad6d8d0455fa69348f56b376d7b908f which + just moved to problem. Now it's really fixed. + + src/liblzma/common/info.c | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit 67321de963ccf69410b3868b8e31534fe18a90de +Author: Lasse Collin +Date: 2008-01-23 00:21:04 +0200 + + Take advantage of return_if_error() macro in + lzma_info_metadata_set() in info.c. + + src/liblzma/common/info.c | 24 ++++++++---------------- + 1 files changed, 8 insertions(+), 16 deletions(-) + +commit 863028cb7ad6d8d0455fa69348f56b376d7b908f +Author: Lasse Collin +Date: 2008-01-23 00:18:32 +0200 + + Fixed a dangling pointer that caused invalid free(). + + src/liblzma/common/info.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit cf49f42a6bd40143f54a6b10d6e605599e958c0b +Author: Lasse Collin +Date: 2008-01-22 22:49:24 +0200 + + Added lzma_easy_* functions. These should make using + liblzma as easy as using zlib, because the easy API + don't require developers to know any fancy LZMA options. + + Note that Multi-Block Stream encoding is currently broken. + The easy API should be OK, the bug(s) are elsewhere. + + src/liblzma/api/Makefile.am | 1 + + src/liblzma/api/lzma.h | 1 + + src/liblzma/common/Makefile.am | 5 ++ + src/liblzma/common/easy_common.c | 54 +++++++++++++++ + src/liblzma/common/easy_common.h | 28 ++++++++ + src/liblzma/common/easy_multi.c | 103 +++++++++++++++++++++++++++++ + src/liblzma/common/easy_single.c | 37 ++++++++++ + src/liblzma/common/stream_encoder_multi.c | 3 +- + src/liblzma/common/stream_encoder_multi.h | 26 +++++++ + 9 files changed, 256 insertions(+), 2 deletions(-) + +commit 1747b85a43abc1c3f152dbd349be2ef4089ecf6a +Author: Lasse Collin +Date: 2008-01-22 21:16:22 +0200 + + Fix Multi-Block Stream encoder's EOPM usage. + + src/liblzma/common/stream_encoder_multi.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0ed6f1adcea540fb9593ca115d36de537f7f0dc6 +Author: Lasse Collin +Date: 2008-01-22 00:15:11 +0200 + + Made lzma_extra pointers const in lzma_options_stream. + + src/liblzma/api/lzma/stream.h | 4 ++-- + src/liblzma/common/stream_encoder_multi.c | 8 ++++++-- + 2 files changed, 8 insertions(+), 4 deletions(-) + +commit 305afa38f64c75af8e81c4167e2d8fa8d85b53a4 +Author: Lasse Collin +Date: 2008-01-20 20:15:21 +0200 + + Updated debug/sync_flush.c. + + debug/sync_flush.c | 26 ++++++++++++++++++++++++-- + 1 files changed, 24 insertions(+), 2 deletions(-) + +commit d53e9b77054cfade6a643e77d085273a348b189c +Author: Lasse Collin +Date: 2008-01-20 20:14:26 +0200 + + Added debug/repeat.c. + + debug/Makefile.am | 1 + + debug/repeat.c | 43 +++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 44 insertions(+), 0 deletions(-) + +commit 107259e306bcfc2336a0fb870fb58034c28faa52 +Author: Lasse Collin +Date: 2008-01-20 20:12:58 +0200 + + Fix alignment handling bugs in Subblock encoder. + + This leaves one known alignment bug unfixed: If repeat count + doesn't fit into 28-bit integer, the encoder has to split + this to multiple Subblocks with Subblock Type `Repeating Data'. + The extra Subblocks may have wrong alignment. Correct alignment + is restored after the split Repeating Data has been completely + written out. + + Since the encoder doesn't even try to fix the alignment unless + the size of Data is at least 4 bytes, to trigger this bug you + need at least 4 GiB of repeating data with sequence length of + 4 or more bytes. Since the worst thing done by this bug is + misaligned data (no data corruption), this bug simply isn't + worth fixing, because a proper fix isn't simple. + + src/liblzma/subblock/subblock_encoder.c | 170 +++++++++++++++++++++--------- + 1 files changed, 119 insertions(+), 51 deletions(-) + +commit e141fe18950400faaa3503ff88ac20eacd73e88c +Author: Lasse Collin +Date: 2008-01-19 21:16:33 +0200 + + Implemented LZMA_SYNC_FLUSH support to the Subblock encoder. + The API for handing Subfilters was changed to make it + consistent with LZMA_SYNC_FLUSH. + + A few sanity checks were added for Subfilter handling. Some + small bugs were fixed. More comments were added. + + src/liblzma/api/lzma/subblock.h | 29 ++-- + src/liblzma/subblock/subblock_encoder.c | 263 +++++++++++++++++++++++-------- + 2 files changed, 214 insertions(+), 78 deletions(-) + +commit 23c227a864a3b69f38c6a74306161d4e6918d1cc +Author: Lasse Collin +Date: 2008-01-19 15:19:21 +0200 + + Revised the Delta filter implementation. The initialization + function is still shared between encoder and decoder, but the + actual coding is in separate files for encoder and decoder. + + There are now separate functions for the actual delta + calculation depending on if Delta is the last filter in the + chain or not. If it is the last, the new code copies the + data from input to output buffer and does the delta + calculation at the same time. The old code first copied the + data, then did the delta in the target buffer, which required + reading through the data twice. + + Support for LZMA_SYNC_FLUSH was added to the Delta encoder. + This doesn't change anything in the file format. + + src/liblzma/common/Makefile.am | 14 +++- + src/liblzma/common/delta_coder.c | 189 ------------------------------------ + src/liblzma/common/delta_coder.h | 31 ------ + src/liblzma/common/delta_common.c | 70 +++++++++++++ + src/liblzma/common/delta_common.h | 48 +++++++++ + src/liblzma/common/delta_decoder.c | 102 +++++++++++++++++++ + src/liblzma/common/delta_decoder.h | 28 ++++++ + src/liblzma/common/delta_encoder.c | 97 ++++++++++++++++++ + src/liblzma/common/delta_encoder.h | 28 ++++++ + src/liblzma/common/raw_decoder.c | 2 +- + src/liblzma/common/raw_encoder.c | 2 +- + 11 files changed, 387 insertions(+), 224 deletions(-) + +commit 61dc82f3e306b25ce3cd3d529df9ec7a0ec04b73 +Author: Lasse Collin +Date: 2008-01-18 20:18:08 +0200 + + Added the debug directory and the first debug tool + (sync_flush). These tools are not built unless the + user runs "make" in the debug directory. + + Makefile.am | 1 + + configure.ac | 1 + + debug/Makefile.am | 30 +++++++++++++ + debug/README | 17 ++++++++ + debug/sync_flush.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 165 insertions(+), 0 deletions(-) + +commit 0ae3208db94585eb8294b97ded387de0a3a07646 +Author: Lasse Collin +Date: 2008-01-18 20:13:00 +0200 + + Added test files to test usage of flush marker in LZMA. + + tests/files/README | 12 ++++++++++++ + tests/files/bad-single-lzma-flush_beginning.lzma | Bin 0 -> 53 bytes + tests/files/bad-single-lzma-flush_twice.lzma | Bin 0 -> 63 bytes + tests/files/good-single-lzma-flush_1.lzma | Bin 0 -> 48 bytes + tests/files/good-single-lzma-flush_2.lzma | Bin 0 -> 63 bytes + 5 files changed, 12 insertions(+), 0 deletions(-) + +commit ab5feaf1fcc146ef9fd39360c53c290bec39524e +Author: Lasse Collin +Date: 2008-01-18 20:02:52 +0200 + + Fix LZMA_SYNC_FLUSH handling in LZ and LZMA encoders. + That code is now almost completely in LZ coder, where + it can be shared with other LZ77-based algorithms in + future. + + src/liblzma/lz/lz_encoder.c | 34 ++++++++++++++++++++++++++-------- + src/liblzma/lz/lz_encoder.h | 1 + + src/liblzma/lzma/lzma_encoder.c | 27 ++------------------------- + 3 files changed, 29 insertions(+), 33 deletions(-) + +commit 079c4f7fc26b3d0b33d9ae7536697b45f3b73585 +Author: Lasse Collin +Date: 2008-01-18 17:21:24 +0200 + + Don't add -g to CFLAGS when --enable-debug is specified. + It's the job of the user to put that in CFLAGS. + + configure.ac | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +commit 61d1784d8f1761d979a6da6e223e279ca33815e6 +Author: Lasse Collin +Date: 2008-01-18 14:17:37 +0200 + + Set stdin and stdout to binary mode on Windows. This patch is + a forward port of b7b22fcb979a16d3a47c8001f058c9f7d4416068 + from lzma-utils-legacy.git. I don't know if the new code base + builds on Windows, but this is a start. + + src/lzmadec/lzmadec.c | 9 +++++++++ + 1 files changed, 9 insertions(+), 0 deletions(-) + +commit c9cba976913e55ff9aac8a8133cc94416c7c1c9c +Author: Lasse Collin +Date: 2008-01-18 00:50:29 +0200 + + Added test_compress.sh and bunch of files needed by it. + This new set of tests compress and decompress several + test files with many different compression options. + This set of tests will be extended later. + + tests/Makefile.am | 30 ++++-- + tests/bcj_test.c | 66 +++++++++++++ + tests/compress_prepared_bcj_sparc | Bin 0 -> 6804 bytes + tests/compress_prepared_bcj_x86 | Bin 0 -> 4649 bytes + tests/create_compress_files.c | 164 +++++++++++++++++++++++++++++++++ + tests/test_compress.sh | 183 +++++++++++++++++++++++++++++++++++++ + 6 files changed, 433 insertions(+), 10 deletions(-) + +commit 33be3c0e24d8f43376ccf71cc77d53671e792f07 +Author: Lasse Collin +Date: 2008-01-17 18:56:53 +0200 + + Subblock decoder: Don't exit the main loop in decode_buffer() + too early if we hit End of Input while decoding a Subblock of + type Repeating Data. To keep the loop termination condition + elegant, the order of enumerations in coder->sequence were + changed. + + To keep the case-labels in roughly the same order as the + enumerations in coder->sequence, large chunks of code was + moved around. This made the diff big and ugly compared to + the amount of the actual changes made. + + src/liblzma/subblock/subblock_decoder.c | 272 ++++++++++++++++--------------- + 1 files changed, 139 insertions(+), 133 deletions(-) + +commit b254bd97b1cdb68d127523d91ca9e054ed89c4fd +Author: Lasse Collin +Date: 2008-01-17 17:39:42 +0200 + + Fix wrong too small size of argument unfiltered_max + in ia64_coder_init(). It triggered assert() in + simple_coder.c, and could have caused a buffer overflow. + + This error was probably a copypaste mistake, since most + of the simple filters use unfiltered_max = 4. + + src/liblzma/simple/ia64.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 8f5794c8f1a30e8e3b524b415bbe81af2e04c64a +Author: Lasse Collin +Date: 2008-01-17 17:27:45 +0200 + + Added --delta to the output of "lzma --help". + + src/lzma/help.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit f88590e0014b38d40465937c19f25f05f16c79ae +Author: Lasse Collin +Date: 2008-01-17 13:14:20 +0200 + + Fix Subblock docoder: If Subblock filter was used with known + Uncompressed Size, and the last output byte was from RLE, + the code didn't stop decoding as it should have done. + + src/liblzma/subblock/subblock_decoder.c | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +commit bc0b945ca376e333077644d2f7fd54c2848aab8a +Author: Lasse Collin +Date: 2008-01-16 16:33:37 +0200 + + Tiny non-technical edits to file-format.txt. + + doc/file-format.txt | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 7599bb7064ccf007f054595dedda7927af868252 +Author: Lasse Collin +Date: 2008-01-16 14:48:04 +0200 + + Plugged a memory leak in stream_decoder.c. + + src/liblzma/common/stream_decoder.c | 20 ++++++++++++++++++++ + 1 files changed, 20 insertions(+), 0 deletions(-) + +commit 0b581539311f3712946e81e747839f8fb5f441a7 +Author: Lasse Collin +Date: 2008-01-16 14:47:27 +0200 + + Added memory leak detection to lzmadec.c. + + src/lzmadec/lzmadec.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +commit 5b5b13c7bb8fde6331064d21f3ebde41072480c4 +Author: Lasse Collin +Date: 2008-01-16 14:46:50 +0200 + + Added lzma_memlimit_count(). + + src/liblzma/api/lzma/memlimit.h | 10 ++++++++++ + src/liblzma/common/memory_limitter.c | 19 +++++++++++++++++++ + 2 files changed, 29 insertions(+), 0 deletions(-) + +commit 19389f2b82ec54fd4c847a18f16482e7be4c9887 +Author: Lasse Collin +Date: 2008-01-16 14:31:44 +0200 + + Added ARRAY_SIZE(array) macro. + + src/common/sysdefs.h | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 9bc33a54cbf83952130adbcb1be32c6882485416 +Author: Lasse Collin +Date: 2008-01-16 13:27:03 +0200 + + Make Uncompresed Size validation more strict + in alone_decoder.c. + + src/liblzma/common/alone_decoder.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 01d71d60b79027e1ce3eb9c79ae5191e1407c883 +Author: Lasse Collin +Date: 2008-01-15 17:46:59 +0200 + + Free the allocated memory in lzmadec if debugging is + enabled. This should make it possible to detect possible + memory leaks with Valgrind. + + src/lzmadec/lzmadec.c | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +commit 8235e6e5b2878f76633afcda9a334640db503ef5 +Author: Lasse Collin +Date: 2008-01-15 16:25:38 +0200 + + Fix memory leaks from test_block_header.c. + + tests/test_block_header.c | 19 +++++++++++++++++-- + 1 files changed, 17 insertions(+), 2 deletions(-) + +commit f10fc6a69d40b6d5c9cfbf8d3746f49869c2e2f6 +Author: Lasse Collin +Date: 2008-01-15 14:23:35 +0200 + + Use fastpos.h when encoding LZMA dictionary size in + Filter Flags encoder. + + src/liblzma/common/filter_flags_encoder.c | 40 +++++++++++++--------------- + 1 files changed, 19 insertions(+), 21 deletions(-) + +commit e5728142a2048979f5c0c2149ce71ae952a092e1 +Author: Lasse Collin +Date: 2008-01-15 14:02:22 +0200 + + Revised the fastpos code. It now uses the slightly faster + table-based version from LZMA SDK 4.57. This should be + fast on most systems. + + A simpler and smaller alternative version is also provided. + On some CPUs this can be even a little faster than the + default table-based version (see comments in fastpos.h), + but on most systems the table-based code is faster. + + src/liblzma/common/init_encoder.c | 3 - + src/liblzma/lzma/Makefile.am | 4 + + src/liblzma/lzma/fastpos.h | 156 +++++++++ + src/liblzma/lzma/fastpos_table.c | 519 ++++++++++++++++++++++++++++ + src/liblzma/lzma/fastpos_tablegen.c | 63 ++++ + src/liblzma/lzma/lzma_common.h | 3 +- + src/liblzma/lzma/lzma_encoder.c | 1 + + src/liblzma/lzma/lzma_encoder_getoptimum.c | 1 + + src/liblzma/lzma/lzma_encoder_init.c | 22 -- + src/liblzma/lzma/lzma_encoder_private.h | 21 -- + 10 files changed, 746 insertions(+), 47 deletions(-) + +commit 10437b5b567f6a025ff16c45a572e417a0a9cc26 +Author: Lasse Collin +Date: 2008-01-15 13:32:13 +0200 + + Added bsr.h. + + src/liblzma/common/Makefile.am | 1 + + src/liblzma/common/bsr.h | 61 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 62 insertions(+), 0 deletions(-) + +commit f3c88e8b8d8dd57f4bba5f0921eebf276437c244 +Author: Lasse Collin +Date: 2008-01-15 13:29:14 +0200 + + Fixed assembler detection in configure.ac, and added + detection for x86_64. + + configure.ac | 32 ++++++++++++++++---------------- + 1 files changed, 16 insertions(+), 16 deletions(-) + +commit 54ec204f58287f50d3976288295da4188a19192b +Author: Lasse Collin +Date: 2008-01-15 12:20:41 +0200 + + Omit invalid space from printf() format string + in price_table_gen.c. + + src/liblzma/rangecoder/price_table_gen.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 01b4b19f49f00e17a0f9cb8754c672ac0847b6e1 +Author: Lasse Collin +Date: 2008-01-15 09:54:34 +0200 + + Removed a few unused macros from lzma_common.h. + + src/liblzma/lzma/lzma_common.h | 8 ++------ + 1 files changed, 2 insertions(+), 6 deletions(-) + +commit 19bd7f3cf25e4ff8487ef7098ca4a7b58681961d +Author: Lasse Collin +Date: 2008-01-15 08:37:42 +0200 + + Fix a typo in lzma_encoder.c. + + src/liblzma/lzma/lzma_encoder.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 9f9b1983013048f2142e8bc7e240149d2687bedc +Author: Lasse Collin +Date: 2008-01-15 08:36:25 +0200 + + Convert bittree_get_price() and bittree_reverse_get_price() + from macros to inline functions. + + src/liblzma/lzma/lzma_encoder.c | 19 +++---- + src/liblzma/lzma/lzma_encoder_getoptimum.c | 16 ++---- + src/liblzma/rangecoder/range_encoder.h | 76 ++++++++++++++++------------ + 3 files changed, 56 insertions(+), 55 deletions(-) + +commit 78e85cb1a7667c54853670d2eb09d754bcbda87d +Author: Lasse Collin +Date: 2008-01-15 07:44:59 +0200 + + Fix CRC code in case --enable-small is used. + + src/liblzma/check/crc32_init.c | 2 +- + src/liblzma/check/crc64_init.c | 2 +- + src/liblzma/common/init_decoder.c | 2 -- + src/liblzma/common/init_encoder.c | 2 -- + tests/test_check.c | 2 ++ + 5 files changed, 4 insertions(+), 6 deletions(-) + +commit 949d4346e2d75bcd9dcb66c394d8d851d8db3aa0 +Author: Lasse Collin +Date: 2008-01-15 07:41:39 +0200 + + Fix typo in test_index.c. + + tests/test_index.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit d13d693155c176fc9e9ad5c50d48ccba27c2d9c6 +Author: Lasse Collin +Date: 2008-01-15 07:40:21 +0200 + + Added precomputed range coder probability price table. + + src/liblzma/common/init_encoder.c | 5 +- + src/liblzma/rangecoder/Makefile.am | 9 +++- + src/liblzma/rangecoder/price_table.c | 70 +++++++++++++++++++++++++++++ + src/liblzma/rangecoder/price_table_gen.c | 55 ++++++++++++++++++++++ + src/liblzma/rangecoder/price_table_init.c | 48 ++++++++++++++++++++ + src/liblzma/rangecoder/range_common.h | 4 +- + src/liblzma/rangecoder/range_encoder.c | 46 ------------------- + src/liblzma/rangecoder/range_encoder.h | 21 ++++----- + 8 files changed, 197 insertions(+), 61 deletions(-) + +commit 362dc3843b373c1007a50a4719f378981f18ae03 +Author: Lasse Collin +Date: 2008-01-14 13:42:43 +0200 + + Remove RC_BUFFER_SIZE from lzma_encoder_private.h + and replace it with a sanity check. + + src/liblzma/lzma/lzma_encoder_private.h | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +commit e22b37968d153683fec61ad37b6b160cb7ca4ddc +Author: Lasse Collin +Date: 2008-01-14 13:39:54 +0200 + + Major changes to LZ encoder, LZMA encoder, and range encoder. + These changes implement support for LZMA_SYNC_FLUSH in LZMA + encoder, and move the temporary buffer needed by range encoder + from lzma_range_encoder structure to lzma_lz_encoder. + + src/liblzma/lz/lz_encoder.c | 138 +++++++++++++++++++++++++++----- + src/liblzma/lz/lz_encoder.h | 17 +++- + src/liblzma/lzma/lzma_encoder.c | 74 ++++++++++------- + src/liblzma/rangecoder/range_encoder.h | 117 ++++++++------------------- + 4 files changed, 206 insertions(+), 140 deletions(-) + +commit b59ef3973781f892c0a72b5e5934194567100be5 +Author: Lasse Collin +Date: 2008-01-14 13:34:29 +0200 + + Added one assert() to process.c of the command line tool. + + src/lzma/process.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 9547e734a00ddb64c851fa3f116e4f9e7d763ea7 +Author: Lasse Collin +Date: 2008-01-14 12:09:52 +0200 + + Don't use coder->lz.stream_end_was_reached in assertions + in match_c.h. + + src/liblzma/lz/match_c.h | 2 -- + 1 files changed, 0 insertions(+), 2 deletions(-) + +commit 3e09e1c05871f3757f759b801890ccccc9286608 +Author: Lasse Collin +Date: 2008-01-14 12:08:02 +0200 + + In lzma_read_match_distances(), don't use + coder->lz.stream_end_was_reached. That variable + will be removed, and the check isn't required anyway. + Rearrange the check so that it doesn't make one to + think that there could be an integer overflow. + + src/liblzma/lzma/lzma_encoder_private.h | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit a670fec8021e5962429689c194148a04c3418872 +Author: Lasse Collin +Date: 2008-01-14 11:56:41 +0200 + + Small LZMA_SYNC_FLUSH fixes to Block and Single-Stream encoders. + + src/liblzma/common/block_encoder.c | 4 ++-- + src/liblzma/common/stream_encoder_single.c | 1 + + 2 files changed, 3 insertions(+), 2 deletions(-) + +commit 3599dba9570a6972a16b6398d6c838e9b420e985 +Author: Lasse Collin +Date: 2008-01-14 11:54:56 +0200 + + More fixes to LZMA decoder's flush marker handling. + + src/liblzma/lzma/lzma_decoder.c | 52 ++++++++++++++++++++++---------------- + 1 files changed, 30 insertions(+), 22 deletions(-) + +commit f73c2ab6079ed5675a42b39d584a567befbd4624 +Author: Lasse Collin +Date: 2008-01-10 17:13:42 +0200 + + Eliminate lzma_lz_encoder.must_move_pos. It's needed + only in one place which isn't performance criticial. + + src/liblzma/lz/lz_encoder.c | 6 ++---- + src/liblzma/lz/lz_encoder.h | 4 ---- + 2 files changed, 2 insertions(+), 8 deletions(-) + +commit 382808514a42b2f4b4a64515e2dfb3fc1bc48ecd +Author: Lasse Collin +Date: 2008-01-09 20:05:57 +0200 + + Define HAVE_ASM_X86 when x86 assembler optimizations are + used. This #define will be useful for inline assembly. + + configure.ac | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +commit 0e70fbe4032351aab13a1cd8e5deced105c0b276 +Author: Lasse Collin +Date: 2008-01-09 12:06:46 +0200 + + Added good-single-none-empty_3.lzma and + bad-single-none-empty.lzma. + + tests/files/README | 6 ++++++ + tests/files/bad-single-none-empty.lzma | Bin 0 -> 19 bytes + tests/files/good-single-none-empty_3.lzma | Bin 0 -> 19 bytes + 3 files changed, 6 insertions(+), 0 deletions(-) + +commit 379fbbe84d922c7cc00afa65c6f0c095da596b19 +Author: Lasse Collin +Date: 2008-01-08 23:11:59 +0200 + + Take advantage of return_if_error() in block_decoder.c. + + src/liblzma/common/block_decoder.c | 23 +++++++---------------- + 1 files changed, 7 insertions(+), 16 deletions(-) + +commit 97d5fa82077e57815dfad995dc393c2809a78539 +Author: Lasse Collin +Date: 2008-01-08 23:10:57 +0200 + + Updated tests/files/README. + + tests/files/README | 15 +++++++++------ + 1 files changed, 9 insertions(+), 6 deletions(-) + +commit 3bb9bb310936cba6a743b4f06739a397dec7c28f +Author: Lasse Collin +Date: 2008-01-08 23:05:40 +0200 + + Added test files with empty Compressed Data. + + tests/files/README | 6 ++++++ + tests/files/good-single-lzma-empty.lzma | Bin 0 -> 21 bytes + tests/files/good-single-none-empty_1.lzma | Bin 0 -> 18 bytes + tests/files/good-single-none-empty_2.lzma | Bin 0 -> 26 bytes + 4 files changed, 6 insertions(+), 0 deletions(-) + +commit 7054c5f5888ac6a7178cd43dc9583ce6c7e78c9f +Author: Lasse Collin +Date: 2008-01-08 22:58:42 +0200 + + Fix decoding of Blocks that have only Block Header. + + src/liblzma/common/block_decoder.c | 37 +++++++++++++---------------------- + 1 files changed, 14 insertions(+), 23 deletions(-) + +commit 753e4d95cd1cf29c632dfe1a670af7c67aeffbf4 +Author: Lasse Collin +Date: 2008-01-08 22:27:46 +0200 + + Added good-single-subblock_implicit.lzma. + + tests/files/README | 2 ++ + tests/files/good-single-subblock_implicit.lzma | Bin 0 -> 35 bytes + 2 files changed, 2 insertions(+), 0 deletions(-) + +commit faeac7b7aca75f86afed1e7cc06279d9d497c627 +Author: Lasse Collin +Date: 2008-01-08 18:50:30 +0200 + + Disable CRC32 from Block Headers when --check=none + has been specified. + + src/lzma/process.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit a751126dbb656767ed4666cf0e5d3e17349d93d1 +Author: Lasse Collin +Date: 2008-01-08 13:36:29 +0200 + + Fixed encoding of empty files. Arguments to is_size_valid() + were in wrong order in block_encoder.c. + + src/liblzma/common/block_encoder.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 9080267603b1006c4867c823307dca9df8be0d20 +Author: Lasse Collin +Date: 2008-01-08 13:35:36 +0200 + + Added a few test files. + + tests/files/README | 21 +++++++++++++++++-- + tests/files/bad-cat-single-none-pad_garbage_1.lzma | Bin 0 -> 65 bytes + tests/files/bad-cat-single-none-pad_garbage_2.lzma | Bin 0 -> 65 bytes + tests/files/bad-cat-single-none-pad_garbage_3.lzma | Bin 0 -> 65 bytes + tests/files/bad-single-data_after_eopm.lzma | Bin 55 -> 0 bytes + tests/files/bad-single-data_after_eopm_1.lzma | Bin 0 -> 55 bytes + tests/files/bad-single-none-truncated.lzma | Bin 0 -> 29 bytes + 7 files changed, 18 insertions(+), 3 deletions(-) + +commit b4943ccf73b64fc93a90a23474509c316f55eb2b +Author: Lasse Collin +Date: 2008-01-08 12:29:58 +0200 + + Avoid using ! in test_files.sh, because that doesn't work + with some ancient /bin/sh versions. + + tests/test_files.sh | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +commit e2417b2b9134f3f65e14b61e23cd3644d8954353 +Author: Lasse Collin +Date: 2008-01-08 00:48:30 +0200 + + More pre-C99 inttypes.h compatibility fixes. Now the code + should work even if the system has no inttypes.h. + + src/common/physmem.h | 11 ----------- + src/liblzma/check/crc32_init.c | 5 +---- + src/liblzma/check/crc32_tablegen.c | 7 ++----- + src/liblzma/check/crc64_init.c | 5 +---- + src/liblzma/check/crc64_tablegen.c | 7 ++----- + 5 files changed, 6 insertions(+), 29 deletions(-) + +commit 5d227e51c23639423f4ade06aabb54e131f8505e +Author: Lasse Collin +Date: 2008-01-07 23:25:32 +0200 + + Updated fi.po although it's currently pretty much crap. + + po/fi.po | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +commit c7189d981a1b27c63da0c1ee80d9b5cd8ce1733d +Author: Lasse Collin +Date: 2008-01-07 23:14:25 +0200 + + Test for $GCC = yes instead of if it is non-empty. This + way it is possible to use ac_cv_c_compiler_gnu=no to + force configure to think it is using non-GNU C compiler. + + configure.ac | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 3dbbea82b74bb841c995ad332a3aeca613015e10 +Author: Lasse Collin +Date: 2008-01-07 21:49:41 +0200 + + Added test_files.sh to tests/Makefile.am so it gets + included in the tarball with "make dist". + + tests/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 2fd2d181543feab1b4003f3ac6e85625fbee04f0 +Author: Lasse Collin +Date: 2008-01-07 18:22:24 +0200 + + Cosmetic edit to test_files.sh. + + tests/test_files.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 9a71d573100a990ceb30ce0bec6a9a15d795605f +Author: Lasse Collin +Date: 2008-01-07 18:09:44 +0200 + + Added tests/files/README. + + tests/files/README | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 108 insertions(+), 0 deletions(-) + +commit 47f48fe9936ed72617a60fbd015df7e0e47a1e43 +Author: Lasse Collin +Date: 2008-01-07 14:20:57 +0200 + + Tell in COPYING that everything in tests/files is + public domain. + + COPYING | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +commit 3502b3e1d00251d3c8dda96079440705c28d8225 +Author: Lasse Collin +Date: 2008-01-07 14:19:05 +0200 + + Cleaned up the tests/files directory. + + tests/files/bad-single-subblock-padding_loop.lzma | Bin 0 -> 43 bytes + tests/files/bad-single-subblock1023-slow.lzma | Bin 0 -> 7886 bytes + tests/files/malicious-single-subblock-loop.lzma | Bin 43 -> 0 bytes + tests/files/malicious-single-subblock-lzma.lzma | Bin 505 -> 0 bytes + .../files/malicious-single-subblock1023-slow.lzma | Bin 7886 -> 0 bytes + 5 files changed, 0 insertions(+), 0 deletions(-) + +commit 908b2ac604b9940369d7fe8a45e9eb6da5d2a24c +Author: Lasse Collin +Date: 2008-01-07 13:49:19 +0200 + + Added test_files.sh to test decoding of the files in + the tests/files directory. It doesn't test the malicious + files yet. + + tests/Makefile.am | 4 +++- + tests/test_files.sh | 40 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 43 insertions(+), 1 deletions(-) + +commit ecb2a6548f5978022a8fa931719dc575f5fd3bf6 +Author: Lasse Collin +Date: 2008-01-07 11:23:13 +0200 + + Updated README regarding the assembler optimizations. + + README | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +commit eacb8050438d3e6146c86eb9732d3fb1ef1825cb +Author: Lasse Collin +Date: 2008-01-07 10:58:00 +0200 + + Updated THANKS. + + THANKS | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +commit 1239649f96132b18e3b7e2dd152ecf53a195caa8 +Author: Lasse Collin +Date: 2008-01-06 21:47:17 +0200 + + Cosmetic changes to configure.ac. + + configure.ac | 14 ++++++-------- + 1 files changed, 6 insertions(+), 8 deletions(-) + +commit 88ee301ec2e4506a30ec7ac9aaa2288e2dcadd0e +Author: Lasse Collin +Date: 2008-01-06 19:46:38 +0200 + + Automatically disable assembler code on Darwin x86. + Darwin has different ABI than GNU+Linux and Solaris, + thus the assembler code doesn't assemble on Darwin. + + configure.ac | 17 +++++++++++++++-- + 1 files changed, 15 insertions(+), 2 deletions(-) + +commit c15a7abf66e3a70792f7444115e484c7981c8284 +Author: Lasse Collin +Date: 2008-01-06 19:45:27 +0200 + + With printf(), use PRIu64 with a cast to uint64_t instead + of %zu, because some pre-C99 libc versions don't support %zu. + + src/lzma/help.c | 13 +++++++------ + src/lzmadec/lzmadec.c | 6 ++++-- + 2 files changed, 11 insertions(+), 8 deletions(-) + +commit 4e7e54c4c522ab2f6a7abb92cefc4f707e9568fb +Author: Lasse Collin +Date: 2008-01-06 16:27:41 +0200 + + Introduced compatibility with systems that have pre-C99 + or no inttypes.h. This is useful when the compiler has + good enough support for C99, but libc headers don't. + + Changed liblzma API so that sys/types.h and inttypes.h + have to be #included before #including lzma.h. On systems + that don't have C99 inttypes.h, it's the problem of the + applications to provide the required types and macros + before #including lzma.h. + + If lzma.h defined the missing types and macros, it could + conflict with third-party applications whose configure + has detected that the types are missing and defined them + in config.h already. An alternative would have been + introducing lzma_uint32 and similar types, but that would + just be an extra pain on modern systems. + + configure.ac | 13 +++++++- + doc/liblzma-intro.txt | 10 +++++- + src/common/sysdefs.h | 59 +++++++++++++++++++++++++++++++++++- + src/liblzma/api/lzma.h | 40 ++++++++++++++++-------- + src/liblzma/check/crc32_table.c | 4 +-- + src/liblzma/check/crc32_table_be.h | 2 - + src/liblzma/check/crc32_table_le.h | 2 - + src/liblzma/check/crc32_tablegen.c | 1 - + src/liblzma/check/crc64_table.c | 4 +-- + src/liblzma/check/crc64_table_be.h | 2 - + src/liblzma/check/crc64_table_le.h | 2 - + src/liblzma/check/crc64_tablegen.c | 1 - + src/lzma/private.h | 1 - + 13 files changed, 106 insertions(+), 35 deletions(-) + +commit a71864f77dfb76b5d78a270641539947c312583a +Author: Lasse Collin +Date: 2008-01-05 19:57:00 +0200 + + Fix typo in comment (INT64_MAX -> UINT64_MAX). + + src/liblzma/api/lzma/vli.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 072927905a3b66281c6311b4b351caa501d8b73a +Author: Lasse Collin +Date: 2008-01-05 19:42:04 +0200 + + Rearranged testing of GCC-specific flags. + + configure.ac | 33 +++++++++++++++++++++++---------- + 1 files changed, 23 insertions(+), 10 deletions(-) + +commit d160ee32598c6d1cd9054ef019e8c9331208b188 +Author: Lasse Collin +Date: 2008-01-05 01:20:24 +0200 + + Another bug fix for flush marker detection. + + src/liblzma/lzma/lzma_decoder.c | 10 +++++++++- + 1 files changed, 9 insertions(+), 1 deletions(-) + +commit fc67f79f607cbfa78c6f47a69dec098d8659b162 +Author: Lasse Collin +Date: 2008-01-04 21:37:01 +0200 + + Fix stupid bugs in flush marker detection. + + src/liblzma/lzma/lzma_decoder.c | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +commit 0029cbbabe87d491fc046a55a629a6d556010baa +Author: Lasse Collin +Date: 2008-01-04 21:30:33 +0200 + + Added support for flush marker, which will be in files + that use LZMA_SYNC_FLUSH with encoder (not implemented + yet). This is a new feature in the raw LZMA format, + which isn't supported by old decoders. This shouldn't + be a problem in practice, since lzma_alone_encoder() + will not allow LZMA_SYNC_FLUSH, and thus not allow + creating files on decodable with old decoders. + + Made lzma_decoder.c to require tab width of 4 characters + if one wants to fit the code in 80 columns. This makes + the code easier to read. + + src/liblzma/lzma/lzma_common.h | 4 + + src/liblzma/lzma/lzma_decoder.c | 217 ++++++++++++++++++--------------------- + 2 files changed, 104 insertions(+), 117 deletions(-) + +commit bbfd1f6ab058a7e661545205befcb7f70c5685ab +Author: Lasse Collin +Date: 2008-01-04 20:45:05 +0200 + + Moved range decoder initialization (reading the first + five input bytes) from LZMA decoder to range decoder + header. Did the same for decoding of direct bits. + + src/liblzma/lzma/lzma_decoder.c | 42 ++------------- + src/liblzma/rangecoder/range_decoder.h | 87 ++++++++++++++++++++++---------- + 2 files changed, 66 insertions(+), 63 deletions(-) + +commit 5db745cd2a74f6ed2e52f5c716c08ed0daf17ebc +Author: Lasse Collin +Date: 2007-12-14 11:15:21 +0200 + + Added a note to README that --disable-assembler + must be used on Darwin. + + README | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +commit 44b333d4615b5aabc557a0e1b6bb0096da3fae24 +Author: Lasse Collin +Date: 2007-12-14 10:07:10 +0200 + + Use the filename suffix .S instead of .s for assembler files + so that the preprocessor removes the /* */ style comments, + which are not supported by some non-GNU assemblers (Solaris) + that otherwise work with this code. + + src/liblzma/check/Makefile.am | 4 +- + src/liblzma/check/crc32_x86.S | 217 +++++++++++++++++++++++++++++++++++++++++ + src/liblzma/check/crc32_x86.s | 217 ----------------------------------------- + src/liblzma/check/crc64_x86.S | 203 ++++++++++++++++++++++++++++++++++++++ + src/liblzma/check/crc64_x86.s | 203 -------------------------------------- + 5 files changed, 422 insertions(+), 422 deletions(-) + +commit ec1c82b2e82f395f6e8e19ac212a639644330cd7 +Author: Lasse Collin +Date: 2007-12-14 09:59:05 +0200 + + Fixed wrong symbol name in crc64_x86.s. + + src/liblzma/check/crc64_x86.s | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 2881570df6803eed2fe550af34574e8e61794804 +Author: Lasse Collin +Date: 2007-12-14 09:53:24 +0200 + + Use .globl instead of .global in x86 assembler code for + better portability. Still needs fixing the commenting. + + src/liblzma/check/crc32_x86.s | 2 +- + src/liblzma/check/crc64_x86.s | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 698470b8f33fc0e5f27dafa93b39b6dd5dde5a66 +Author: Lasse Collin +Date: 2007-12-13 20:14:37 +0200 + + Fixed a few short options that take an argument. + short_opts[] was missing colons to indicate + required argument. Thanks to Fabio Pedretti for + the bug report. + + src/lzma/args.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 918bcb0e0728d2d976621e9f35b56f224f11d989 +Author: Lasse Collin +Date: 2007-12-11 17:08:04 +0200 + + Removed uncompressed size tracking from Delta encoder too. + + src/liblzma/common/delta_coder.c | 21 +++------------------ + 1 files changed, 3 insertions(+), 18 deletions(-) + +commit 3e16d51dd645667b05ff826665b1fc353aa41cd9 +Author: Lasse Collin +Date: 2007-12-11 16:49:19 +0200 + + Remove uncompressed size tracking from the filter encoders. + It's not strictly needed there, and just complicates the + code. LZ encoder never even had this feature. + + The primary reason to have uncompressed size tracking in + filter encoders was validating that the application + doesn't give different amount of input that it had + promised. A side effect was to validate internal workings + of liblzma. + + Uncompressed size tracking is still present in the Block + encoder. Maybe it should be added to LZMA_Alone and raw + encoders too. It's simpler to have one coder just to + validate the uncompressed size instead of having it + in every filter. + + src/liblzma/common/copy_coder.c | 25 +------------------ + src/liblzma/simple/simple_coder.c | 29 +++-------------------- + src/liblzma/subblock/subblock_encoder.c | 38 +++++-------------------------- + 3 files changed, 12 insertions(+), 80 deletions(-) + +commit 5286723e0d1ac386d5b07f08d78e61becf895a5a +Author: Lasse Collin +Date: 2007-12-11 14:10:53 +0200 + + Get rid of no-NLS gnulib. I don't know how to get it + working with Automake. People who want smaller lzmadec + should use --disable-nls on non-GNU systems. + + lib/Makefile.am | 10 +--------- + src/lzma/Makefile.am | 2 +- + src/lzmadec/Makefile.am | 4 +++- + 3 files changed, 5 insertions(+), 11 deletions(-) + +commit ce8b036a6c7a43b290356b673d953f6d76b2be64 +Author: Lasse Collin +Date: 2007-12-11 14:09:35 +0200 + + Fixed a typo in tests/Makefile.am which prevented + building the tests if gnulib was needed. + + tests/Makefile.am | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 7c1ad41eb611ed89e5bb8792a3beb533b7aa59f4 +Author: Lasse Collin +Date: 2007-12-11 11:18:58 +0200 + + Fixed wrong type of flags_size in Subblock encoder. + + src/liblzma/subblock/subblock_encoder.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit ce64df716243fdc40359090d1f6541f3a4f5f21a +Author: Lasse Collin +Date: 2007-12-10 20:44:16 +0200 + + Bumped version number to 4.42.3alpha. + + configure.ac | 2 +- + src/liblzma/api/lzma/version.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit b499a0403ea5c41d6a25b40275eb6c57643052ce +Author: Lasse Collin +Date: 2007-12-10 15:02:50 +0200 + + Disabled some unneeded warnings and made "make dist" work. + + Makefile.am | 9 +++------ + configure.ac | 9 ++++++--- + po/fi.po | 47 ++++++++++++++++++++++++----------------------- + 3 files changed, 33 insertions(+), 32 deletions(-) + +commit 2ab8adb5165a0b77114a7eb21f9ff1e6a266f172 +Author: Lasse Collin +Date: 2007-12-09 21:43:15 +0200 + + Added LZMA_SYNC_FLUSH support to the Copy filter. + + src/liblzma/common/copy_coder.c | 92 ++++++++++++++++++++++++--------------- + 1 files changed, 57 insertions(+), 35 deletions(-) + +commit 329c272d501e88793dda5540358d55c12428d194 +Author: Lasse Collin +Date: 2007-12-09 17:14:07 +0200 + + Added missing LZMA_API to the C versions of the CRC functions. + The x86 assembler versions were already OK. + + src/liblzma/check/crc32.c | 2 +- + src/liblzma/check/crc64.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit c90daf86ce683fa8cf80491d624ffb158dfbd9d7 +Author: Jim Meyering +Date: 2007-12-09 15:34:25 +0100 + + * tests/test_block_header.c (test3): Remove duplicate initializer. + + autogen.sh | 2 +- + tests/test_block_header.c | 1 - + 2 files changed, 1 insertions(+), 2 deletions(-) + +commit 07ac881779a8477f2c1ab112b91a129e24aa743c +Author: Lasse Collin +Date: 2007-12-09 17:06:45 +0200 + + Take advantage of return_if_error() macro in more places. + Cleaned Subblock filter's initialization code too. + + src/liblzma/common/block_decoder.c | 22 +++------- + src/liblzma/common/delta_coder.c | 8 +--- + src/liblzma/common/stream_decoder.c | 17 +++----- + src/liblzma/common/stream_encoder_multi.c | 68 +++++++++------------------ + src/liblzma/common/stream_encoder_single.c | 8 +-- + src/liblzma/subblock/subblock_decoder.c | 33 +++++--------- + src/liblzma/subblock/subblock_encoder.c | 45 +++++------------- + 7 files changed, 63 insertions(+), 138 deletions(-) + +commit 41338717964f510ee61d70b25bd4c502ec9f77cf +Author: Lasse Collin +Date: 2007-12-09 12:13:01 +0200 + + Added a bunch of .lzma test files. + + tests/files/bad-single-data_after_eopm.lzma | Bin 0 -> 55 bytes + tests/files/bad-single-data_after_eopm_2.lzma | Bin 0 -> 56 bytes + tests/files/bad-single-subblock_subblock.lzma | Bin 0 -> 26 bytes + tests/files/good-cat-single-none-pad.lzma | Bin 0 -> 64 bytes + tests/files/good-single-delta-lzma.tiff.lzma | Bin 0 -> 51409 bytes + tests/files/good-single-lzma.lzma | Bin 0 -> 44 bytes + tests/files/good-single-none-pad.lzma | Bin 0 -> 32 bytes + tests/files/good-single-none.lzma | Bin 0 -> 30 bytes + tests/files/good-single-subblock-lzma.lzma | Bin 0 -> 50 bytes + tests/files/good-single-subblock_rle.lzma | Bin 0 -> 118 bytes + tests/files/malicious-multi-metadata-64PiB.lzma | Bin 0 -> 51 bytes + tests/files/malicious-single-subblock-256MiB.lzma | Bin 0 -> 30 bytes + tests/files/malicious-single-subblock-64PiB.lzma | Bin 0 -> 45 bytes + tests/files/malicious-single-subblock-loop.lzma | Bin 0 -> 43 bytes + tests/files/malicious-single-subblock-lzma.lzma | Bin 0 -> 505 bytes + .../files/malicious-single-subblock1023-slow.lzma | Bin 0 -> 7886 bytes + tests/files/malicious-single-subblock31-slow.lzma | Bin 0 -> 1233 bytes + 17 files changed, 0 insertions(+), 0 deletions(-) + +commit ff946ceb7975d4f11950afd33f6315b4d20d1a03 +Author: Lasse Collin +Date: 2007-12-09 11:24:48 +0200 + + Re-enabled the security checks in Subblock decoder + that were disabled for debugging reasons. + + src/liblzma/subblock/subblock_decoder.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 2bf36d22d2c24ac3f488e63b35564fa2f6dab8d1 +Author: Lasse Collin +Date: 2007-12-09 11:03:28 +0200 + + Fixed the tests to build with -Werror. + + tests/test_block_header.c | 2 +- + tests/test_check.c | 2 +- + tests/test_filter_flags.c | 2 +- + tests/test_index.c | 14 +++++++------- + tests/test_info.c | 2 +- + tests/test_stream_flags.c | 2 +- + 6 files changed, 12 insertions(+), 12 deletions(-) + +commit 5d018dc03549c1ee4958364712fb0c94e1bf2741 +Author: Lasse Collin +Date: 2007-12-09 00:42:33 +0200 + + Imported to git. + + AUTHORS | 18 + + COPYING | 24 + + COPYING.GPLv2 | 339 +++++ + COPYING.GPLv3 | 674 +++++++++ + COPYING.LGPLv2.1 | 504 +++++++ + ChangeLog | 2 + + Doxyfile.in | 1229 ++++++++++++++++ + Makefile.am | 38 + + README | 151 ++ + THANKS | 23 + + TODO | 109 ++ + autogen.sh | 38 + + configure.ac | 611 ++++++++ + doc/bugs.txt | 46 + + doc/faq.txt | 247 ++++ + doc/file-format.txt | 1861 ++++++++++++++++++++++++ + doc/history.txt | 140 ++ + doc/liblzma-advanced.txt | 324 ++++ + doc/liblzma-hacking.txt | 112 ++ + doc/liblzma-intro.txt | 188 +++ + doc/liblzma-security.txt | 219 +++ + doc/lzma-intro.txt | 107 ++ + extra/scanlzma/scanlzma.c | 85 ++ + lib/Makefile.am | 40 + + lib/getopt.c | 1191 +++++++++++++++ + lib/getopt1.c | 171 +++ + lib/getopt_.h | 226 +++ + lib/getopt_int.h | 131 ++ + lib/gettext.h | 240 +++ + m4/acx_pthread.m4 | 279 ++++ + m4/getopt.m4 | 83 ++ + po/LINGUAS | 1 + + po/Makevars | 46 + + po/POTFILES.in | 13 + + po/fi.po | 445 ++++++ + src/Makefile.am | 16 + + src/common/open_stdxxx.h | 50 + + src/common/physmem.h | 77 + + src/common/sysdefs.h | 100 ++ + src/liblzma/Makefile.am | 47 + + src/liblzma/api/Makefile.am | 39 + + src/liblzma/api/lzma.h | 122 ++ + src/liblzma/api/lzma/alignment.h | 60 + + src/liblzma/api/lzma/alone.h | 82 ++ + src/liblzma/api/lzma/auto.h | 41 + + src/liblzma/api/lzma/base.h | 410 ++++++ + src/liblzma/api/lzma/block.h | 409 ++++++ + src/liblzma/api/lzma/check.h | 128 ++ + src/liblzma/api/lzma/copy.h | 29 + + src/liblzma/api/lzma/delta.h | 49 + + src/liblzma/api/lzma/extra.h | 114 ++ + src/liblzma/api/lzma/filter.h | 166 +++ + src/liblzma/api/lzma/index.h | 84 ++ + src/liblzma/api/lzma/info.h | 315 ++++ + src/liblzma/api/lzma/init.h | 85 ++ + src/liblzma/api/lzma/lzma.h | 312 ++++ + src/liblzma/api/lzma/memlimit.h | 157 ++ + src/liblzma/api/lzma/metadata.h | 100 ++ + src/liblzma/api/lzma/raw.h | 72 + + src/liblzma/api/lzma/simple.h | 85 ++ + src/liblzma/api/lzma/stream.h | 178 +++ + src/liblzma/api/lzma/stream_flags.h | 142 ++ + src/liblzma/api/lzma/subblock.h | 197 +++ + src/liblzma/api/lzma/version.h | 59 + + src/liblzma/api/lzma/vli.h | 244 ++++ + src/liblzma/check/Makefile.am | 64 + + src/liblzma/check/check.c | 160 ++ + src/liblzma/check/check.h | 102 ++ + src/liblzma/check/check_byteswap.h | 43 + + src/liblzma/check/check_init.c | 37 + + src/liblzma/check/crc32.c | 88 ++ + src/liblzma/check/crc32_init.c | 58 + + src/liblzma/check/crc32_table.c | 22 + + src/liblzma/check/crc32_table_be.h | 527 +++++++ + src/liblzma/check/crc32_table_le.h | 527 +++++++ + src/liblzma/check/crc32_tablegen.c | 55 + + src/liblzma/check/crc32_x86.s | 217 +++ + src/liblzma/check/crc64.c | 75 + + src/liblzma/check/crc64_init.c | 58 + + src/liblzma/check/crc64_table.c | 22 + + src/liblzma/check/crc64_table_be.h | 523 +++++++ + src/liblzma/check/crc64_table_le.h | 523 +++++++ + src/liblzma/check/crc64_tablegen.c | 56 + + src/liblzma/check/crc64_x86.s | 203 +++ + src/liblzma/check/crc_macros.h | 33 + + src/liblzma/check/sha256.c | 203 +++ + src/liblzma/common/Makefile.am | 94 ++ + src/liblzma/common/alignment.c | 118 ++ + src/liblzma/common/allocator.c | 57 + + src/liblzma/common/alone_decoder.c | 197 +++ + src/liblzma/common/alone_decoder.h | 24 + + src/liblzma/common/alone_encoder.c | 167 +++ + src/liblzma/common/auto_decoder.c | 113 ++ + src/liblzma/common/block_decoder.c | 405 +++++ + src/liblzma/common/block_decoder.h | 29 + + src/liblzma/common/block_encoder.c | 375 +++++ + src/liblzma/common/block_encoder.h | 29 + + src/liblzma/common/block_header_decoder.c | 373 +++++ + src/liblzma/common/block_header_encoder.c | 211 +++ + src/liblzma/common/block_private.h | 46 + + src/liblzma/common/chunk_size.c | 74 + + src/liblzma/common/code.c | 203 +++ + src/liblzma/common/common.h | 271 ++++ + src/liblzma/common/copy_coder.c | 143 ++ + src/liblzma/common/copy_coder.h | 31 + + src/liblzma/common/delta_coder.c | 210 +++ + src/liblzma/common/delta_coder.h | 31 + + src/liblzma/common/extra.c | 33 + + src/liblzma/common/features.c | 70 + + src/liblzma/common/filter_flags_decoder.c | 382 +++++ + src/liblzma/common/filter_flags_encoder.c | 359 +++++ + src/liblzma/common/index.c | 140 ++ + src/liblzma/common/info.c | 823 +++++++++++ + src/liblzma/common/init.c | 39 + + src/liblzma/common/init_decoder.c | 33 + + src/liblzma/common/init_encoder.c | 44 + + src/liblzma/common/memory_limitter.c | 200 +++ + src/liblzma/common/memory_usage.c | 113 ++ + src/liblzma/common/metadata_decoder.c | 555 +++++++ + src/liblzma/common/metadata_decoder.h | 31 + + src/liblzma/common/metadata_encoder.c | 436 ++++++ + src/liblzma/common/metadata_encoder.h | 30 + + src/liblzma/common/next_coder.c | 65 + + src/liblzma/common/raw_common.c | 175 +++ + src/liblzma/common/raw_common.h | 31 + + src/liblzma/common/raw_decoder.c | 127 ++ + src/liblzma/common/raw_decoder.h | 30 + + src/liblzma/common/raw_encoder.c | 124 ++ + src/liblzma/common/raw_encoder.h | 30 + + src/liblzma/common/stream_common.c | 23 + + src/liblzma/common/stream_common.h | 28 + + src/liblzma/common/stream_decoder.c | 454 ++++++ + src/liblzma/common/stream_encoder_multi.c | 460 ++++++ + src/liblzma/common/stream_encoder_single.c | 220 +++ + src/liblzma/common/stream_flags_decoder.c | 258 ++++ + src/liblzma/common/stream_flags_decoder.h | 31 + + src/liblzma/common/stream_flags_encoder.c | 75 + + src/liblzma/common/sysdefs.h | 1 + + src/liblzma/common/version.c | 25 + + src/liblzma/common/vli_decoder.c | 69 + + src/liblzma/common/vli_encoder.c | 81 + + src/liblzma/common/vli_reverse_decoder.c | 55 + + src/liblzma/lz/Makefile.am | 63 + + src/liblzma/lz/bt2.c | 27 + + src/liblzma/lz/bt2.h | 31 + + src/liblzma/lz/bt3.c | 29 + + src/liblzma/lz/bt3.h | 31 + + src/liblzma/lz/bt4.c | 30 + + src/liblzma/lz/bt4.h | 31 + + src/liblzma/lz/hc3.c | 30 + + src/liblzma/lz/hc3.h | 31 + + src/liblzma/lz/hc4.c | 31 + + src/liblzma/lz/hc4.h | 31 + + src/liblzma/lz/lz_decoder.c | 462 ++++++ + src/liblzma/lz/lz_decoder.h | 214 +++ + src/liblzma/lz/lz_encoder.c | 481 ++++++ + src/liblzma/lz/lz_encoder.h | 161 ++ + src/liblzma/lz/lz_encoder_private.h | 40 + + src/liblzma/lz/match_c.h | 401 +++++ + src/liblzma/lz/match_h.h | 69 + + src/liblzma/lzma.pc.in | 11 + + src/liblzma/lzma/Makefile.am | 43 + + src/liblzma/lzma/lzma_common.h | 128 ++ + src/liblzma/lzma/lzma_decoder.c | 844 +++++++++++ + src/liblzma/lzma/lzma_decoder.h | 41 + + src/liblzma/lzma/lzma_encoder.c | 413 ++++++ + src/liblzma/lzma/lzma_encoder.h | 35 + + src/liblzma/lzma/lzma_encoder_features.c | 59 + + src/liblzma/lzma/lzma_encoder_getoptimum.c | 893 ++++++++++++ + src/liblzma/lzma/lzma_encoder_getoptimumfast.c | 201 +++ + src/liblzma/lzma/lzma_encoder_init.c | 245 ++++ + src/liblzma/lzma/lzma_encoder_presets.c | 34 + + src/liblzma/lzma/lzma_encoder_private.h | 225 +++ + src/liblzma/lzma/lzma_literal.c | 74 + + src/liblzma/lzma/lzma_literal.h | 74 + + src/liblzma/rangecoder/Makefile.am | 28 + + src/liblzma/rangecoder/range_common.h | 68 + + src/liblzma/rangecoder/range_decoder.h | 189 +++ + src/liblzma/rangecoder/range_encoder.c | 46 + + src/liblzma/rangecoder/range_encoder.h | 317 ++++ + src/liblzma/simple/Makefile.am | 46 + + src/liblzma/simple/arm.c | 76 + + src/liblzma/simple/armthumb.c | 81 + + src/liblzma/simple/ia64.c | 117 ++ + src/liblzma/simple/powerpc.c | 80 + + src/liblzma/simple/simple_coder.c | 306 ++++ + src/liblzma/simple/simple_coder.h | 68 + + src/liblzma/simple/simple_private.h | 86 ++ + src/liblzma/simple/sparc.c | 88 ++ + src/liblzma/simple/x86.c | 161 ++ + src/liblzma/subblock/Makefile.am | 33 + + src/liblzma/subblock/subblock_decoder.c | 681 +++++++++ + src/liblzma/subblock/subblock_decoder.h | 29 + + src/liblzma/subblock/subblock_decoder_helper.c | 80 + + src/liblzma/subblock/subblock_decoder_helper.h | 36 + + src/liblzma/subblock/subblock_encoder.c | 841 +++++++++++ + src/liblzma/subblock/subblock_encoder.h | 28 + + src/lzma/Makefile.am | 63 + + src/lzma/alloc.c | 106 ++ + src/lzma/alloc.h | 42 + + src/lzma/args.c | 566 +++++++ + src/lzma/args.h | 64 + + src/lzma/error.c | 156 ++ + src/lzma/error.h | 67 + + src/lzma/hardware.c | 99 ++ + src/lzma/hardware.h | 31 + + src/lzma/help.c | 178 +++ + src/lzma/help.h | 32 + + src/lzma/io.c | 664 +++++++++ + src/lzma/io.h | 60 + + src/lzma/list.c | 477 ++++++ + src/lzma/main.c | 254 ++++ + src/lzma/options.c | 346 +++++ + src/lzma/options.h | 46 + + src/lzma/private.h | 55 + + src/lzma/process.c | 458 ++++++ + src/lzma/process.h | 30 + + src/lzma/suffix.c | 145 ++ + src/lzma/suffix.h | 25 + + src/lzma/util.c | 182 +++ + src/lzma/util.h | 32 + + src/lzmadec/Makefile.am | 27 + + src/lzmadec/lzmadec.c | 515 +++++++ + src/scripts/Makefile.am | 24 + + src/scripts/lzdiff | 67 + + src/scripts/lzdiff.1 | 51 + + src/scripts/lzgrep | 123 ++ + src/scripts/lzgrep.1 | 61 + + src/scripts/lzmore | 74 + + src/scripts/lzmore.1 | 55 + + tests/Makefile.am | 43 + + tests/test_block.c | 59 + + tests/test_block_header.c | 352 +++++ + tests/test_check.c | 90 ++ + tests/test_filter_flags.c | 326 +++++ + tests/test_index.c | 43 + + tests/test_info.c | 717 +++++++++ + tests/test_stream_flags.c | 191 +++ + tests/tests.h | 148 ++ + 239 files changed, 42513 insertions(+), 0 deletions(-) diff --git a/Build/source/extra/xz-4.999.9beta/Doxyfile.in b/Build/source/extra/xz-4.999.9beta/Doxyfile.in new file mode 100644 index 00000000000..fa3c1e1ddc6 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/Doxyfile.in @@ -0,0 +1,1234 @@ +# Doxyfile 1.4.7 + +# Copyright (C) 1997-2007 by Dimitri van Heesch +# License: GNU GPLv2+ + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "@PACKAGE_NAME@" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = "@PACKAGE_VERSION@" + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, +# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, +# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, +# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, +# Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = YES + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @top_srcdir@/src + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = *.h *.c + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = YES + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = YES + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = LZMA_API(type)=type \ + LZMA_API_IMPORT \ + LZMA_API_CALL= + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that a graph may be further truncated if the graph's +# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH +# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), +# the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/Build/source/extra/xz-4.999.9beta/INSTALL b/Build/source/extra/xz-4.999.9beta/INSTALL new file mode 100644 index 00000000000..ec757202c98 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/INSTALL @@ -0,0 +1,339 @@ + +XZ Utils Installation +===================== + + 0. Preface + 1. Supported platforms + 1.1. Compilers + 1.2. Platform-specific notes + 1.2.1. Darwin (Mac OS X) + 1.2.2. Tru64 + 1.2.3. Windows + 1.2.4. DOS + 1.2.5. OS/2 + 1.3. Adding support for new platforms + 2. configure options + 3. xzgrep and other scripts + 3.1. Dependencies + 3.2. PATH + 4. Troubleshooting + 4.1. "No C99 compiler was found." + 4.1. "No POSIX conforming shell (sh) was found." + 4.2. configure works but build fails at crc32_x86.S + + +0. Preface +---------- + + If you aren't familiar with building packages that use GNU Autotools, + see the file INSTALL.generic for generic instructions before reading + further. + + If you are going to build a package for distribution, see also the + file PACKAGERS. It contains information that should help making the + binary packages as good as possible, but the information isn't very + interesting to those making local builds for private use or for use + in special situations like embedded systems. + + +1. Supported platforms +---------------------- + + XZ Utils are developed on GNU/Linux, but they should work on many + POSIX-like operating systems like *BSDs and Solaris, and even on + a few non-POSIX operating systems. + + +1.1. Compilers + + A C99 compiler is required to compile XZ Utils. If you use GCC, you + need at least version 3.x.x. GCC version 2.xx.x doesn't support some + C99 features used in XZ Utils source code, thus GCC 2 won't compile + XZ Utils. + + XZ Utils takes advantage of some GNU C extensions when building + with GCC. Because these extensions are used only when building + with GCC, it should be possible to use any C99 compiler. + + +1.2. Platform-specific notes + +1.2.1. Darwin (Mac OS X) + + You may need --disable-assembler if building universal binaries on + Darwin. This is because different files are built when assembler is + enabled, and there's no way to make it work with universal build. + If you want to keep the assembler code, consider building one + architecture at a time, and then combining the results to create + universal binaries (see lipo(1)). + + +1.2.2. Tru64 + + If you try to use the native C compiler on Tru64 (passing CC=cc to + configure), it is possible that the configure script will complain + that no C99 compiler was found even when the native compiler supports + C99. You can safely override the test for C99 compiler by passing + ac_cv_prog_cc_c99= as the argument to the configure script. + + +1.2.3. Windows + + Building XZ Utils on Windows is supported under MinGW and Cygwin. + If the Autotools based build gives you trouble with MinGW, you may + want try the alternative method found from the "windows" directory. + + MSVC doesn't support C99, thus it is not possible to use MSVC to + compile XZ Utils. However, it is possible to use liblzma.dll from + MSVC once liblzma.dll has been built with MinGW. The required + import library for MSVC can be created from liblzma.def using the + "lib" command shipped in MSVC: + + lib /def:liblzma.def /out:liblzma.lib /machine:ix86 + + On x86-64, the /machine argument has to naturally be changed: + + lib /def:liblzma.def /out:liblzma.lib /machine:x64 + + +1.2.4. DOS + + There is an experimental Makefile in the "dos" directory to build + XZ Utils on DOS using DJGPP. Support for long file names (LFN) is + needed. + + GNU Autotools based build hasn't been tried on DOS. + + +1.2.5. OS/2 + + You will need to pass --disable-assembler to configure when building + on OS/2. + + +1.3. Adding support for new platforms + + If you have written patches to make XZ Utils to work on previously + unsupported platform, please send the patches to me! I will consider + including them to the official version. It's nice to minimize the + need of third-party patching. + + One exception: Don't request or send patches to change the whole + source package to C89. I find C99 substantially nicer to write and + maintain. However, the public library headers must be in C89 to + avoid frustrating those who maintain programs, which are strictly + in C89 or C++. + + +2. configure options +-------------------- + + In most cases, the defaults are what you want. Most of the options + below are useful only when building a size-optimized version of + liblzma or command line tools. + + --enable-encoders=LIST + --disable-encoders + Specify a comma-separated LIST of filter encoders to + build. See "./configure --help" for exact list of + available filter encoders. The default is to build all + supported encoders. + + If LIST is empty or --disable-encoders is used, no filter + encoders will be built and also the code shared between + encoders will be omitted. + + Disabling encoders will remove some symbols from the + liblzma ABI, so this option should be used only when it + is known to not cause problems. + + --enable-decoders=LIST + --disable-decoders + This is like --enable-encoders but for decoders. The + default is to build all supported decoders. + + --enable-match-finders=LIST + liblzma includes two categories of match finders: + hash chains and binary trees. Hash chains (hc3 and hc4) + are quite fast but they don't provide the best compression + ratio. Binary trees (bt2, bt3 and bt4) give excellent + compression ratio, but they are slower and need more + memory than hash chains. + + You need to enable at least one match finder to build the + LZMA1 or LZMA2 filter encoders. Usually hash chains are + used only in the fast mode, while binary trees are used to + when the best compression ratio is wanted. + + The default is to build all the match finders if LZMA1 + or LZMA2 filter encoders are being built. + + --enable-checks=LIST + liblzma support multiple integrity checks. CRC32 is + mandatory, and cannot be omitted. See "./configure --help" + for exact list of available integrity check types. + + liblzma and the command line tools can decompress files + which use unsupported integrity check type, but naturally + the file integrity cannot be verified in that case. + + Disabling integrity checks may remove some symbols from + the liblzma ABI, so this option should be used only when + it is known to not cause problems. + + --disable-assembler + liblzma includes some assembler optimizations. Currently + there is only assembler code for CRC32 and CRC64 for + 32-bit x86. + + All the assembler code in liblzma is position-independent + code, which is suitable for use in shared libraries and + position-independent executables. So far only i386 + instructions are used, but the code is optimized for i686 + class CPUs. If you are compiling liblzma exclusively for + pre-i686 systems, you may want to disable the assembler + code. + + --enable-unaligned-access + Allow liblzma to use unaligned memory access for 16-bit + and 32-bit loads and stores. This should be enabled only + when the hardware supports this, i.e. when unaligned + access is fast. Some operating system kernels emulate + unaligned access, which is extremely slow. This option + shouldn't be used on systems that rely on such emulation. + + Unaligned access is enabled by default on x86, x86-64, + and big endian PowerPC. + + --enable-small + Reduce the size of liblzma by selecting smaller but + semantically equivalent version of some functions, and + omit precomputed lookup tables. This option tends to + make liblzma slightly slower. + + Note that while omitting the precomputed tables makes + liblzma smaller on disk, the tables are still needed at + run time, and need to be computed at startup. This also + means that the RAM holding the tables won't be shared + between applications linked against shared liblzma. + + --disable-threads + Disable threading support. This makes some things + thread-unsafe, meaning that if multithreaded application + calls liblzma functions from more than one thread, + something bad may happen. + + Use this option if threading support causes you trouble, + or if you know that you will use liblzma only from + single-threaded applications and want to avoid dependency + on libpthread. + + --enable-dynamic=TYPE + Specify how command line tools should be linked against + liblzma. Possible TYPES: + + yes All command line tools are linked against + shared liblzma (if shared liblzma was built). + This is equivalent to --enable-dynamic (i.e. + no =TYPE). + + mixed Some tools are linked against static liblzma + and some against shared liblzma. This is the + default and recommended way. + + no All command line tools are linked against + static liblzma (if static liblzma was built). + This is equivalent to --disable-dynamic. + + This option is mostly useful for packagers, if distro + policy requires linking against shared libaries. See the + file PACKAGERS for more information about pros and cons + of this option. + + --enable-debug + This enables the assert() macro and possibly some other + run-time consistency checks. It makes the code slower, so + you normally don't want to have this enabled. + + --enable-werror + If building with GCC, make all compiler warnings an error, + that abort the compilation. This may help catching bugs, + and should work on most systems. This has no effect on the + resulting binaries. + + +3. xzgrep and other scripts +--------------------------- + +3.1. Dependencies + + POSIX shell (sh) and bunch of other standard POSIX tools are required + to run the scripts. The configure script tries to find a POSIX + compliant sh, but if it fails, you can force the shell by passing + gl_cv_posix_shell=/path/to/posix-sh as an argument to the configure + script. + + Some of the scripts require also mktemp. The original mktemp can be + found from . On GNU, most will use the mktemp + program from GNU coreutils instead of the original implementation. + Both mktemp versions are fine for XZ Utils (and practically for + everything else too). + + +3.2. PATH + + The scripts assume that the required tools (standard POSIX utilities, + mktemp, and xz) are in PATH; the scripts don't set the PATH themselves. + Some people like this while some think this is a bug. Those in the + latter group can easily patch the scripts before running the configure + script by taking advantage of a placeholder line in the scripts. + + For example, to make the scripts prefix /usr/bin:/bin to PATH: + + perl -pi -e 's|^#SET_PATH.*$|PATH=/usr/bin:/bin:\$PATH|' \ + src/scripts/xz*.in + + +4. Troubleshooting +------------------ + +4.1. "No C99 compiler was found." + + You need a C99 compiler to build XZ Utils. If the configure script + cannot find a C99 compiler and you think you have such a compiler + installed, set the compiler command by passing CC=/path/to/c99 as + an argument to the configure script. + + If you get this error even when you think your compiler supports C99, + you can override the test by passing ac_cv_prog_cc_c99= as an argument + to the configure script. The test for C99 compiler is not perfect (and + it is not as easy to make it perfect as it sounds), so sometimes this + may be needed. You will get a compile error if your compiler doesn't + support enough C99. + + +4.1. "No POSIX conforming shell (sh) was found." + + xzgrep and other scripts need a shell that (roughly) conforms + to POSIX. The configure script tries to find such a shell. If + it fails, you can force the shell to be used by passing + gl_cv_posix_shell=/path/to/posix-sh as an argument to the configure + script. + + +4.2. configure works but build fails at crc32_x86.S + + The easy fix is to pass --disable-assembler to the configure script. + + The configure script determines if assembler code can be used by + looking at the configure triplet; there is currently no check if + the assembler code can actually actually be built. The x86 assembler + code should work on x86 GNU/Linux, *BSDs, Solaris, Darwin, MinGW, + Cygwin, and DJGPP. On other x86 systems, there may be problems and + the assembler code may need to be disabled with the configure option. + + If you get this error when building for x86-64, you have specified or + the configure script has misguessed your architecture. Pass the + correct configure triplet using the --build=CPU-COMPANY-SYSTEM option + (see INSTALL.generic). + diff --git a/Build/source/extra/xz-4.999.9beta/INSTALL.generic b/Build/source/extra/xz-4.999.9beta/INSTALL.generic new file mode 100644 index 00000000000..2550dab7526 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/INSTALL.generic @@ -0,0 +1,302 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007, 2008, 2009 Free Software Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + Briefly, the shell commands `./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. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 6. Often, you can also type `make uninstall' to remove the installed + files again. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + +Installation Names +================== + + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS + KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +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: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--prefix=DIR' + Use DIR as the installation prefix. *Note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/Build/source/extra/xz-4.999.9beta/Makefile.am b/Build/source/extra/xz-4.999.9beta/Makefile.am new file mode 100644 index 00000000000..79cf1954f28 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/Makefile.am @@ -0,0 +1,80 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +DIST_SUBDIRS = lib src po tests debug +SUBDIRS = + +if COND_GNULIB +SUBDIRS += lib +endif + +SUBDIRS += src po tests + +dist_doc_DATA = \ + AUTHORS \ + COPYING \ + COPYING.GPLv2 \ + NEWS \ + README \ + THANKS \ + TODO \ + doc/faq.txt \ + doc/history.txt \ + doc/xz-file-format.txt \ + doc/lzma-file-format.txt + +EXTRA_DIST = \ + extra \ + dos \ + windows \ + autogen.sh \ + version.sh \ + Doxyfile.in \ + COPYING.GPLv2 \ + COPYING.GPLv3 \ + COPYING.LGPLv2.1 \ + INSTALL.generic \ + PACKAGERS + +ACLOCAL_AMFLAGS = -I m4 + +# List of man pages to conver to PDF and plain text in the dist-hook target. +manfiles = \ + src/xz/xz.1 \ + src/xzdec/xzdec.1 \ + src/scripts/xzdiff.1 \ + src/scripts/xzgrep.1 \ + src/scripts/xzless.1 \ + src/scripts/xzmore.1 + +# Create ChangeLog from output of "git log --date=iso --stat". +# Convert the man pages to PDF and plain text (ASCII only) formats. +dist-hook: + if test -d "$(srcdir)/.git" && type git > /dev/null 2>&1; then \ + ( cd "$(srcdir)" && git log --date=iso --stat ) \ + > "$(distdir)/ChangeLog"; \ + fi + if type groff > /dev/null 2>&1 && type ps2pdf > /dev/null 2>&1; then \ + dest="$(distdir)/doc/man" && \ + $(MKDIR_P) "$$dest/pdf-a4" "$$dest/pdf-letter" "$$dest/txt" && \ + for FILE in $(manfiles); do \ + BASE=`basename $$FILE .1` && \ + groff -man -t -Tps -P-pa4 < "$(srcdir)/$$FILE" \ + | ps2pdf - - \ + > "$$dest/pdf-a4/$$BASE-a4.pdf" && \ + groff -man -t -Tps -P-pletter < "$(srcdir)/$$FILE" \ + | ps2pdf - - \ + > "$$dest/pdf-letter/$$BASE-letter.pdf" && \ + groff -man -t -Tascii < "$(srcdir)/$$FILE" \ + | col -bx > "$$dest/txt/$$BASE.txt"; \ + done; \ + fi + +# This works with GNU tar and gives cleaner package than normal 'make dist'. +mydist: + TAR_OPTIONS='--owner=0 --group=0 --numeric-owner --mode=u+rw,go+r-w' \ + $(MAKE) dist-gzip diff --git a/Build/source/extra/xz-4.999.9beta/Makefile.in b/Build/source/extra/xz-4.999.9beta/Makefile.in new file mode 100644 index 00000000000..eef55e610bf --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/Makefile.in @@ -0,0 +1,887 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ +@COND_GNULIB_TRUE@am__append_1 = lib +subdir = . +DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \ + $(srcdir)/Doxyfile.in $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(top_srcdir)/configure ABOUT-NLS AUTHORS COPYING ChangeLog \ + INSTALL NEWS THANKS TODO build-aux/compile \ + build-aux/config.guess build-aux/config.rpath \ + build-aux/config.sub build-aux/depcomp build-aux/install-sh \ + build-aux/ltmain.sh build-aux/missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ + $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.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 = Doxyfile +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +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__installdirs = "$(DESTDIR)$(docdir)" +DATA = $(dist_doc_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ +DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETOPT_H = @GETOPT_H@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSIX_SHELL = @POSIX_SHELL@ +POSUB = @POSUB@ +PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ +STATIC_LDFLAGS = @STATIC_LDFLAGS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +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@ +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@ +lt_ECHO = @lt_ECHO@ +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@ +xz = @xz@ +DIST_SUBDIRS = lib src po tests debug +SUBDIRS = $(am__append_1) src po tests +dist_doc_DATA = \ + AUTHORS \ + COPYING \ + COPYING.GPLv2 \ + NEWS \ + README \ + THANKS \ + TODO \ + doc/faq.txt \ + doc/history.txt \ + doc/xz-file-format.txt \ + doc/lzma-file-format.txt + +EXTRA_DIST = \ + extra \ + dos \ + windows \ + autogen.sh \ + version.sh \ + Doxyfile.in \ + COPYING.GPLv2 \ + COPYING.GPLv3 \ + COPYING.LGPLv2.1 \ + INSTALL.generic \ + PACKAGERS + +ACLOCAL_AMFLAGS = -I m4 + +# List of man pages to conver to PDF and plain text in the dist-hook target. +manfiles = \ + src/xz/xz.1 \ + src/xzdec/xzdec.1 \ + src/scripts/xzdiff.1 \ + src/scripts/xzgrep.1 \ + src/scripts/xzless.1 \ + src/scripts/xzmore.1 + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign 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; \ + $(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 +Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +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|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(docdir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +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: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + 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: ctags-recursive $(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 + +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 + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -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)" + @if test -z "$(am__skip_length_check)" && find "$(distdir)" -type f -print | \ + grep '^...................................................................................................' 1>&2; then \ + echo 'error: the above filenames are too long' 1>&2; \ + exit 1; \ + else :; fi +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 -9 -c >$(distdir).tar.bz2 + $(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 -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) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(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) gunzip -c $(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" \ + $(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: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { 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 +check: check-recursive +all-am: Makefile $(DATA) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(docdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-dist_docDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-dist_docDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-xz \ + dist-zip distcheck distclean 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-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-dist_docDATA + + +# Create ChangeLog from output of "git log --date=iso --stat". +# Convert the man pages to PDF and plain text (ASCII only) formats. +dist-hook: + if test -d "$(srcdir)/.git" && type git > /dev/null 2>&1; then \ + ( cd "$(srcdir)" && git log --date=iso --stat ) \ + > "$(distdir)/ChangeLog"; \ + fi + if type groff > /dev/null 2>&1 && type ps2pdf > /dev/null 2>&1; then \ + dest="$(distdir)/doc/man" && \ + $(MKDIR_P) "$$dest/pdf-a4" "$$dest/pdf-letter" "$$dest/txt" && \ + for FILE in $(manfiles); do \ + BASE=`basename $$FILE .1` && \ + groff -man -t -Tps -P-pa4 < "$(srcdir)/$$FILE" \ + | ps2pdf - - \ + > "$$dest/pdf-a4/$$BASE-a4.pdf" && \ + groff -man -t -Tps -P-pletter < "$(srcdir)/$$FILE" \ + | ps2pdf - - \ + > "$$dest/pdf-letter/$$BASE-letter.pdf" && \ + groff -man -t -Tascii < "$(srcdir)/$$FILE" \ + | col -bx > "$$dest/txt/$$BASE.txt"; \ + done; \ + fi + +# This works with GNU tar and gives cleaner package than normal 'make dist'. +mydist: + TAR_OPTIONS='--owner=0 --group=0 --numeric-owner --mode=u+rw,go+r-w' \ + $(MAKE) dist-gzip + +# 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/Build/source/extra/xz-4.999.9beta/NEWS b/Build/source/extra/xz-4.999.9beta/NEWS new file mode 100644 index 00000000000..e69de29bb2d diff --git a/Build/source/extra/xz-4.999.9beta/PACKAGERS b/Build/source/extra/xz-4.999.9beta/PACKAGERS new file mode 100644 index 00000000000..c5d375ab270 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/PACKAGERS @@ -0,0 +1,279 @@ + +Information to packagers of XZ Utils +==================================== + + 0. Preface + 1. Package naming + 2. Package description + 3. License + 4. configure options + 4.1. Static vs. dynamic linking of liblzma + 4.2. Optimizing xzdec and lzmadec + 5. Additional documentation + 6. Extra files + 7. Installing XZ Utils and LZMA Utils in parallel + 8. Example + + +0. Preface +---------- + + This document is meant for people who create and maintain XZ Utils + packages for operating system distributions. The focus is on GNU/Linux + systems, but most things apply to other systems too. + + While the standard "configure && make DESTDIR=$PKG install" should + give a pretty good package, there are some details which packagers + may want to tweak. + + Packagers should also read the INSTALL file. + + +1. Package naming +----------------- + + The preferred name for the XZ Utils package is "xz", because that's + the name of the upstream tarball. Naturally you may have good reasons + to use some other name; I won't get angry about it. ;-) It's just nice + to be able to point people to the correct package name without asking + what distro they have. + + If your distro policy is to split things into small pieces, here is + one suggestion: + + xz xz, xzdec, scripts (xzdiff, xzgrep, etc.), docs + xz-lzma lzma, unlzma, lzcat, lzgrep etc. symlinks and + lzmadec binary for compatibility with LZMA Utils + liblzma liblzma.so.* + liblzma-devel liblzma.so, liblzma.a, API headers + + +2. Package description +---------------------- + + Here is a suggestion which you may use as the package description. + If you can use only one-line description, pick only the first line. + Naturally, feel free to use some other description if you find it + better, and maybe send it to me too. + + Library and command line tools for XZ and LZMA compressed files + + XZ Utils provide a general purpose data compression library + and command line tools. The native file format is the .xz + format, but also the legacy .lzma format is supported. The .xz + format supports multiple compression algorithms, of which LZMA2 + is currently the primary algorithm. With typical files, XZ Utils + create about 30 % smaller files than gzip. + + If you are splitting XZ Utils into multiple packages, here are some + suggestions for package descriptions: + + xz: + + Command line tools for XZ and LZMA compressed files + + This package includes the xz compression tool and other command + line tools from XZ Utils. xz has command line syntax similar to + that of gzip. The native file format is the .xz format, but also + the legacy .lzma format is supported. The .xz format supports + multiple compression algorithms, of which LZMA2 is currently the + primary algorithm. With typical files, XZ Utils create about 30 % + smaller files than gzip. + + Note that this package doesn't include the files needed for + LZMA Utils 4.32.x compatibility. Install also the xz-lzma + package to make XZ Utils emulate LZMA Utils 4.32.x. + + xz-lzma: + + LZMA Utils emulation with XZ Utils + + This package includes executables and symlinks to make + XZ Utils emulate lzma, unlzma, lzcat, and other command + line tools found from the legacy LZMA Utils 4.32.x package. + + liblzma: + + Library for XZ and LZMA compressed files + + liblzma is a general purpose data compression library with + an API similar to that of zlib. liblzma supports multiple + algorithms, of which LZMA2 is currently the primary algorithm. + The native file format is .xz, but also the legacy .lzma + format and raw streams (no headers at all) are supported. + + This package includes the shared library. + + liblzma-devel: + + Library for XZ and LZMA compressed files + + This package includes the API headers, static library, and + other development files related to liblzma. + + +3. License +---------- + + If the package manager supports a license field, you probably should + put GPLv2+ there (GNU GPL v2 or later). The interesting parts of + XZ Utils are in the public domain, but some less important files + ending up into the binary package are under GPLv2+. So it is simplest + to just say GPLv2+ if you cannot specify "public domain and GPLv2+". + + If you split XZ Utils into multiple packages as described earlier + in this file, liblzma and liblzma-dev packages will contain only + public domain code (from XZ Utils at least; compiler or linker may + add some third-party code, which may be copyrighted). + + +4. configure options +-------------------- + + Unless you are building a package for a distribution that is meant + only for embedded systems, don't use the following configure options: + + --enable-debug + --enable-encoders (*) + --enable-decoders + --enable-match-finders + --enable-checks + --enable-small (*) + --disable-threads (*) + + (*) These are OK when building xzdec and lzmadec as explained later. + + You may use --enable-werror but be careful with it since it may break + the build due to some useless warning when the build environment + changes (like CPU architecture or compiler version). + + +4.1. Static vs. dynamic linking of liblzma + + The default is to link the most important command line tools against + static liblzma, and the less important tools against shared liblzma. + This can be changed by passing --enable-dynamic to configure, or by + not building static libraries at all by passing --disable-static + to configure. It is mildly recommended that you use the default, but + the configure options make it easy to do otherwise if the distro policy + so requires. + + On 32-bit x86, linking against static liblzma can give a minor + speed improvement. Static libraries on x86 are usually compiled as + position-dependent code (non-PIC) and shared libraries are built as + position-independent code (PIC). PIC wastes one register, which can + make the code slightly slower compared to a non-PIC version. (Note + that this doesn't apply to x86-64.) + + Linking against static liblzma avoids a dependency on liblzma shared + library, and makes it slightly easier to copy the command line tools + between systems (e.g. quick 'n' dirty emergency recovery of some + files). It also allows putting the command line tools to /bin while + leaving liblzma to /usr/lib (assuming that your distribution uses + such a file system hierarchy), if no other file in /bin would require + liblzma. + + If you don't want to distribute static libraries but you still + want to link the command line tools against static liblzma, it is + probably easiest to build both static and shared liblzma, but after + "make DESTDIR=$PKG install" remove liblzma.a and modify liblzma.la + to not contain a reference to liblzma.a. + + +4.2. Optimizing xzdec and lzmadec + + xzdec and lzmadec are intended to be relatively small instead of + optimizing for the best speed. Thus, it is a good idea to build + xzdec and lzmadec separately: + + - Only decoder code is needed, so you can speed up the build + slightly by passing --disable-encoders to configure. This + shouldn't affect the final size of the executables though, + because the linker is able to omit the encoder code anyway. + + - xzdec and lzmadec will never use multithreading capabilities of + liblzma. You can avoid dependency on libpthread by passing + --disable-threads to configure. + + - There are and will be no translated messages for xzdec and + lzmadec, so it is fine to pass also --disable-nls to configure. + + - To select somewhat size-optimized variant of some things in + liblzma, pass --enable-small to configure. + + - Tell the compiler to optimize for size instead of speed. + E.g. with GCC, put -Os into CFLAGS. + + +5. Additional documentation +--------------------------- + + "make install" copies some additional documentation to $docdir + (--docdir in configure). These a copy of the GNU GPL v2, which can + be replaced with a symlink if your distro ships with shared copies + of the common license texts. + + +6. Extra files +-------------- + + The "extra" directory contains some small extra tools or other files. + The exact set of extra files can vary between XZ Utils releases. The + extra files have only limited use or they are too dangerous to be + put directly to $bindir (7z2lzma.sh is a good example, since it can + silently create corrupt output if certain conditions are not met). + + If you feel like it, you may copy the extra directory under the doc + directory (e.g. /usr/share/doc/xz/extra). Maybe some people will find + them useful. However, most people needing these tools probably are + able to find them from the source package too. + + The "debug" directory contains some tools that are useful only when + hacking on XZ Utils. Don't package these tools. + + +7. Installing XZ Utils and LZMA Utils in parallel +------------------------------------------------- + + XZ Utils and LZMA Utils 4.32.x can be installed in parallel by + omitting the compatibility symlinks (lzma, unlzma, lzcat, lzgrep etc.) + from the XZ Utils package. It's probably a good idea to still package + the symlinks into a separate package so that users may choose if they + want to use XZ Utils or LZMA Utils for handling .lzma files. + + +8. Example +---------- + + Here is an example for i686 GNU/Linux that + - links xz against static liblzma; + - includes only shared liblzma in the final package; + - links xzdec and lzmadec against static liblzma while + avoiding libpthread dependency. + + PKG=/tmp/xz-pkg + tar xf xz-x.y.z.tar.gz + cd xz-x.y.z + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + CFLAGS='-march=i686 -O2' + make + make DESTDIR=$PKG install-strip + rm -f $PKG/usr/lib/lib*.a + sed -i "s/^old_library=.*$/old_library=''/" $PKG/usr/lib/lib*.la + make clean + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --disable-shared \ + --disable-nls \ + --disable-encoders \ + --enable-small \ + --disable-threads \ + CFLAGS='-march=i686 -Os' + make -C src/liblzma + make -C src/xzdec + make -C src/xzdec DESTDIR=$PKG install-strip + cp -a extra $PKG/usr/share/doc/xz + diff --git a/Build/source/extra/xz-4.999.9beta/README b/Build/source/extra/xz-4.999.9beta/README new file mode 100644 index 00000000000..3544938e8e4 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/README @@ -0,0 +1,217 @@ + +XZ Utils +======== + + 0. Overview + 1. Documentation + 1.1. Overall documentation + 1.2. Documentation for command line tools + 1.3. Documentation for liblzma + 2. Version numbering + 3. Reporting bugs + 4. Other implementations of the .xz format + 5. Contact information + + +0. Overview +----------- + + XZ Utils provide a general purporse data compression library and + command line tools. The native file format is the .xz format, but + also the legacy .lzma format is supported. The .xz format supports + multiple compression algorithms, which are called "filters" in + context of XZ Utils. The primary filter is currently LZMA2. With + typical files, XZ Utils create about 30 % smaller files than gzip. + + To ease adapting support for the .xz format into existing applications + and scripts, the API of liblzma is somewhat similar to the API of the + popular zlib library. For the same reason, the command line tool xz + has similar command line syntax than that of gzip. + + When aiming for the highest compression ratio, LZMA2 encoder uses + a lot of CPU time and may use, depending on the settings, even + hundreds of megabytes of RAM. However, in fast modes, LZMA2 encoder + competes with bzip2 in compression speed, RAM usage, and compression + ratio. + + LZMA2 is reasonably fast to decompress. It is a little slower than + gzip, but a lot faster than bzip2. Being fast to decompress means + that the .xz format is especially nice when the same file will be + decompressed very many times (usually on different computers), which + is the case e.g. when distributing software packages. In such + situations, it's not too bad if the compression takes some time, + since that needs to be done only once to benefit many people. + + With some file types, combining (or "chaining") LZMA2 with an + additional filter can improve compression ratio. A filter chain may + contain up to four filters, although usually only one two is used. + For example, putting a BCJ (Branch/Call/Jump) filter before LZMA2 + in the filter chain can improve compression ratio of executable files. + + Since the .xz format allows adding new filter IDs, it is possible that + some day there will be a filter that is, for example, much faster to + compress than LZMA2 (but probably with worse compression ratio). + Similarly, it is possible that some day there is a filter that will + compress better than LZMA2. + + XZ Utils doesn't support multithreaded compression or decompression + yet. It has been planned though and taken into account when designing + the .xz file format. + + +1. Documentation +---------------- + +1.1. Overall documentation + + README This file + + INSTALL.generic Generic install instructions for those not familiar + with packages using GNU Autotools + INSTALL Installation instructions specific to XZ Utils + PACKAGERS Information to packagers of XZ Utils + + COPYING XZ Utils copyright and license information + COPYING.GPLv2 GNU General Public License version 2 + COPYING.GPLv3 GNU General Public License version 3 + COPYING.LGPLv2.1 GNU Lesser General Public License version 2.1 + + AUTHORS The main authors of XZ Utils + THANKS Incomplete list of people who have helped making + this software + NEWS User-visible changes between XZ Utils releases + ChangeLog Detailed list of changes (commit log) + + Note that only some of the above files are included in binary + packages. + + +1.2. Documentation for command line tools + + The command line tools are documented as man pages. In source code + releases (and possibly also in some binary packages), the man pages + are also provided in plain text (ASCII only) and PDF formats in the + directory "doc/man" to make the man pages more accessible to those + whose operating system doesn't provide an easy way to view man pages. + + +1.3. Documentation for liblzma + + The liblzma API headers include short docs about each function + and data type as Doxygen tags. These docs should be quite OK as + a quick reference. + + I have planned to write a bunch of very well documented example + programs, which (due to comments) should work as a tutorial to + various features of liblzma. No such example programs have been + written yet. + + For now, if you have never used liblzma, libbzip2, or zlib, I + recommend learning *basics* of zlib API. Once you know that, it + should be easier to learn liblzma. + + http://zlib.net/manual.html + http://zlib.net/zlib_how.html + + +2. Version numbering +-------------------- + + The version number format of XZ Utils is X.Y.ZS: + + - X is the major version. When this is incremented, the library + API and ABI break. + + - Y is the minor version. It is incremented when new features are + added without breaking existing API or ABI. Even Y indicates + stable release and odd Y indicates unstable (alpha or beta + version). + + - Z is the revision. This has different meaning for stable and + unstable releases: + * Stable: Z is incremented when bugs get fixed without adding + any new features. + * Unstable: Z is just a counter. API or ABI of features added + in earlier unstable releases having the same X.Y may break. + + - S indicates stability of the release. It is missing from the + stable releases where Y is an even number. When Y is odd, S + is either "alpha" or "beta" to make it very clear that such + versions are not stable releases. The same X.Y.Z combination is + not used for more than one stability level i.e. after X.Y.Zalpha, + the next version can be X.Y.(Z+1)beta but not X.Y.Zbeta. + + +3. Reporting bugs +----------------- + + Naturally it is easiest for me if you already know what causes the + unexpected behavior. Even better if you have a patch to propose. + However, quite often the reason for unexpected behavior is unknown, + so here are a few things to do before sending a bug report: + + 1. Try to create a small example how to reprocude the issue. + + 2. Compile XZ Utils with debugging code using configure switches + --enable-debug and, if possible, --disable-shared. If you are + using GCC, use CFLAGS='-O0 -ggdb3'. Don't strip the resulting + binaries. + + 3. Turn on core dumps. The exact command depends on your shell; + for example in GNU bash it is done with "ulimit -c unlimited", + and in tcsh with "limit coredumpsize unlimited". + + 4. Try to reproduce the suspected bug. If you get "assertion failed" + message, be sure to include the complete message in your bug + report. If the application leaves a coredump, get a backtrace + using gdb: + $ gdb /path/to/app-binary # Load the app to the debugger. + (gdb) core core # Open the coredump. + (gdb) bt # Print the backtrace. Copy & paste to bug report. + (gdb) quit # Quit gdb. + + Report your bug via email or IRC (see Contact information below). + Don't send core dump files or any executables. If you have a small + example file(s) (total size less than 256 KiB), please include + it/them as an attachment. If you have bigger test files, put them + online somewhere and include an URL to the file(s) in the bug report. + + Always include the exact version number of XZ Utils in the bug report. + If you are using a snapshot from the git repository, use "git describe" + to get the exact snapshot version. If you are using XZ Utils shipped + in an operating system distribution, mention the distribution name, + distribution version, and exact xz package version; if you cannot + repeat the bug with the code compiled from unpatched source code, + you probably need to report a bug to your distribution's bug tracking + system. + + +4. Other implementations of the .xz format +------------------------------------------ + + 7-Zip and the p7zip port of 7-Zip support the .xz format starting + from the version 9.00alpha. + + http://7-zip.org/ + http://p7zip.sourceforge.net/ + + XZ Embedded is a limited implementation written for use in the Linux + kernel, but it is also suitable for other embedded use. + + http://tukaani.org/xz/embedded.html + + +5. Contact information +---------------------- + + If you have questions, bug reports, patches etc. related to XZ Utils, + contact Lasse Collin (in Finnish or English). + tukaani.org uses greylisting to reduce spam, thus when you send your + first email, it may get delayed by a few hours. In addition to that, + I'm sometimes slow at replying. If you haven't got a reply within two + weeks, assume that your email has got lost and resend it or use IRC. + + You can find me also from #tukaani on Freenode; my nick is Larhzu. + The channel tends to be pretty quiet, so just ask your question and + someone may wake up. + diff --git a/Build/source/extra/xz-4.999.9beta/THANKS b/Build/source/extra/xz-4.999.9beta/THANKS new file mode 100644 index 00000000000..426a2ed089f --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/THANKS @@ -0,0 +1,47 @@ + +Thanks +====== + +Some people have helped more, some less, but nevertheless everyone's help +has been important. :-) In alphabetical order: + - Mark Adler + - H. Peter Anvin + - Nelson H. F. Beebe + - Anders F. Björklund + - Emmanuel Blot + - David Burklund + - Andrew Dudman + - İsmail Dönmez + - Mike Frysinger + - Per Øyvind Karlsen + - Ville Koskinen + - Stephan Kulow + - Peter Lawler + - Hin-Tak Leung + - Andraž 'ruskie' Levstik + - Jim Meyering + - Hongbo Ni + - Jonathan Nieder + - Igor Pavlov + - Mikko Pouru + - Bernhard Reutner-Fischer + - Christian von Roques + - Alexandre Sauvé + - Andreas Schwab + - Dan Shechter + - Jonathan Stott + - Paul Townsend + - Mohammed Adnène Trojette + - Patrick J. Volkerding + - Bert Wesarg + - Ralf Wildenhues + - Charles Wilson + - Lars Wirzenius + - Pilorz Wojciech + - Andreas Zieringer + +Also thanks to all the people who have participated in the Tukaani project. + +I have probably forgot to add some names to the above list. Sorry about +that and thanks for your help. + diff --git a/Build/source/extra/xz-4.999.9beta/TODO b/Build/source/extra/xz-4.999.9beta/TODO new file mode 100644 index 00000000000..6912943b5d9 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/TODO @@ -0,0 +1,56 @@ + +XZ Utils To-Do List +=================== + +Known bugs +---------- + + The test suite is too incomplete. + + If the memor usage limit is less than about 13 MiB, xz is unable to + automatically scale down the compression settings enough even though + it would be possible by switching from BT2/BT3/BT4 match finder to + HC3/HC4. + + The code to detect number of CPU cores doesn't count hyperthreading + as multiple cores. In context of xz, it probably should. + Hyperthreading is good at least with p7zip. + + XZ Utils compress some files significantly worse than LZMA Utils. + This is due to faster compression presets used by XZ Utils, and + can be worked around by using "xz --extreme". However, the presets + need some tweaking and maybe this issue can be minimized without + making the typical case too much slower. + + +Missing features +---------------- + + "xz --list" + + xz could create sparse files when decompressing. (Some prototyping + has been done.) + + xz doesn't support copying extended attributes, access control + lists etc. from source to target file. + + Multithreaded compression + + Multithreaded decompression + + Buffer-to-buffer coding could use less RAM (especially when + decompressing LZMA1 or LZMA2). + + I/O library is not implemented. It will possibly be named libzzf. + + +Documentation +------------- + + Some tutorial is needed for liblzma. I have planned to write some + extremely well commented example programs, which would work as + a tutorial. I suppose the Doxygen tags are quite OK as a quick + reference once one is familiar with the liblzma API. + + Document the LZMA1 and LZMA2 algorithms. + diff --git a/Build/source/extra/xz-4.999.9beta/aclocal.m4 b/Build/source/extra/xz-4.999.9beta/aclocal.m4 new file mode 100644 index 00000000000..09162f8a4cf --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/aclocal.m4 @@ -0,0 +1,1027 @@ +# generated automatically by aclocal 1.11 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 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. + +# 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. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],, +[m4_warning([this file was generated for autoconf 2.64. +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'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 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_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' +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], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_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])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# Figure out how to run the assembler. -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2004, 2005, 2006 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_PROG_AS +# ---------- +AC_DEFUN([AM_PROG_AS], +[# By default we simply use the C compiler to build assembly code. +AC_REQUIRE([AC_PROG_CC]) +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS +AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) +AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) +_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl +]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 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. + +# 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/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# 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 +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +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. +# +# 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_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# 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 10 + +# 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 +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# 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 +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +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=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # 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'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > 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 + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # 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 + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # 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 + break + fi + ;; + msvisualcpp | msvcmsys) + # 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} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# 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 +]) + + +# 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]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# 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 + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # 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 + # 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. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # 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 + 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 + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# 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 +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# 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. +# +# 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. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# 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 +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +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_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_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 + +# 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) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_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 +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + 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_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_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 +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. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 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_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 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], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 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. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# 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 + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# 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_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != 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 +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# 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], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$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. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 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_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 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_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# 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)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +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) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# 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_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=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# 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 + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 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 +# 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 +# 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 +# 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'. +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 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_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 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'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# 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. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} 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. +_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 + + # 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 + +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 + +m4_include([m4/acx_pthread.m4]) +m4_include([m4/getopt.m4]) +m4_include([m4/gettext.m4]) +m4_include([m4/iconv.m4]) +m4_include([m4/lc_cpucores.m4]) +m4_include([m4/lc_physmem.m4]) +m4_include([m4/lib-ld.m4]) +m4_include([m4/lib-link.m4]) +m4_include([m4/lib-prefix.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) +m4_include([m4/nls.m4]) +m4_include([m4/po.m4]) +m4_include([m4/posix-shell.m4]) +m4_include([m4/progtest.m4]) +m4_include([m4/visibility.m4]) diff --git a/Build/source/extra/xz-4.999.9beta/autogen.sh b/Build/source/extra/xz-4.999.9beta/autogen.sh new file mode 100755 index 00000000000..f0195ecadd3 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/autogen.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +############################################################################### +# +# Author: Lasse Collin +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# +############################################################################### + +# The result of using "autoreconf -fi" should be identical to using this +# script. I'm leaving this script here just in case someone finds it useful. + +set -e -x + +${AUTOPOINT:-autopoint} -f +${LIBTOOLIZE:-libtoolize} -c -f || glibtoolize -c -f +${ACLOCAL:-aclocal} -I m4 +${AUTOCONF:-autoconf} +${AUTOHEADER:-autoheader} +${AUTOMAKE:-automake} -acf --foreign diff --git a/Build/source/extra/xz-4.999.9beta/build-aux/compile b/Build/source/extra/xz-4.999.9beta/build-aux/compile new file mode 100755 index 00000000000..ec64c622026 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/build-aux/compile @@ -0,0 +1,143 @@ +#! /bin/sh +# Wrapper for compilers which do not understand `-c -o'. + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 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 +# . + +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 $? + ;; +esac + +ofile= +cfile= +eat= + +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 + mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + 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/Build/source/extra/xz-4.999.9beta/build-aux/config.guess b/Build/source/extra/xz-4.999.9beta/build-aux/config.guess new file mode 100755 index 00000000000..e792aac6080 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/build-aux/config.guess @@ -0,0 +1,1494 @@ +#! /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 +# Free Software Foundation, Inc. + +timestamp='2009-09-18' + +# 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 +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# 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. +# +# 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. +# +# 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 + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +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 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." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +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 + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd | genuineintel) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`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 + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + 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} + 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 + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + 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 ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + 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 + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + 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 < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/Build/source/extra/xz-4.999.9beta/build-aux/config.rpath b/Build/source/extra/xz-4.999.9beta/build-aux/config.rpath new file mode 100755 index 00000000000..c492a93b663 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/build-aux/config.rpath @@ -0,0 +1,614 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2006 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit , 1996 +# +# 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. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# Known limitations: +# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer +# than 256 bytes, otherwise the compiler driver will dump core. The only +# known workaround is to choose shorter directory names for the build +# directory and/or the installation directory. + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +shrext=.so + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# Code taken from libtool.m4's _LT_CC_BASENAME. + +for cc_temp in $CC""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` + +# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + darwin*) + case $cc_basename in + xlc*) + wl='-Wl,' + ;; + esac + ;; + mingw* | pw32* | os2*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + newsos6) + ;; + linux*) + case $cc_basename in + icc* | ecc*) + wl='-Wl,' + ;; + pgcc | pgf77 | pgf90) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; + esac + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + sco3.2v5*) + ;; + solaris*) + wl='-Wl,' + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + unicos*) + wl='-Wl,' + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + case "$host_os" in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we cannot use + # them. + ld_shlibs=no + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + interix3*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + netbsd*) + ;; + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + else + ld_shlibs=no + fi + ;; + esac + ;; + sunos4*) + hardcode_direct=yes + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = no; then + hardcode_libdir_flag_spec= + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + fi + # Begin _LT_AC_SYS_LIBPATH_AIX. + echo 'int main () { return 0; }' > conftest.c + ${CC} ${LDFLAGS} conftest.c -o conftest + aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + fi + if test -z "$aix_libpath"; then + aix_libpath="/usr/lib:/lib" + fi + rm -f conftest.c conftest + # End _LT_AC_SYS_LIBPATH_AIX. + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + fi + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + hardcode_direct=no + if test "$GCC" = yes ; then + : + else + case $cc_basename in + xlc*) + ;; + *) + ld_shlibs=no + ;; + esac + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd1*) + ld_shlibs=no + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd* | kfreebsd*-gnu | dragonfly*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + hpux10*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + hpux11*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + ;; + *) + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + openbsd*) + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + case $host_vendor in + sni) + hardcode_direct=yes # is this really true??? + ;; + siemens) + hardcode_direct=no + ;; + motorola) + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + ;; + sysv4.3*) + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) + ;; + sysv5* | sco3.2v5* | sco5v6*) + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. +libname_spec='lib$name' +case "$host_os" in + aix3*) + ;; + aix4* | aix5*) + ;; + amigaos*) + ;; + beos*) + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32*) + shrext=.dll + ;; + darwin* | rhapsody*) + shrext=.dylib + ;; + dgux*) + ;; + freebsd1*) + ;; + kfreebsd*-gnu) + ;; + freebsd* | dragonfly*) + ;; + gnu*) + ;; + hpux9* | hpux10* | hpux11*) + case $host_cpu in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + ;; + interix3*) + ;; + irix5* | irix6* | nonstopux*) + case "$host_os" in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + ;; + linux*oldld* | linux*aout* | linux*coff*) + ;; + linux*) + ;; + knetbsd*-gnu) + ;; + netbsd*) + ;; + newsos6) + ;; + nto-qnx*) + ;; + openbsd*) + ;; + os2*) + libname_spec='$name' + shrext=.dll + ;; + osf3* | osf4* | osf5*) + ;; + solaris*) + ;; + sunos4*) + ;; + sysv4 | sysv4.3*) + ;; + sysv4*MP*) + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + ;; + uts4*) + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +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 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." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -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) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | 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 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -kopensolaris* \ + | -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* \ + | -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* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/Build/source/extra/xz-4.999.9beta/build-aux/depcomp b/Build/source/extra/xz-4.999.9beta/build-aux/depcomp new file mode 100755 index 00000000000..df8eea7e4ce --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/build-aux/depcomp @@ -0,0 +1,630 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 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. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + 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 outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +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 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# 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 +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # 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 +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## 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). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + 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. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## 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 +## that the space means something, we add a space to the output as +## well. +## 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" + rm -f "$tmpdepfile" + ;; + +hp) + # 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 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + 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 + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> "$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" + 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" + fi + rm -f "$tmpdepfile" + ;; + +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 + # 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$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + 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" + fi + 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 + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + 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" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # '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$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#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" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # 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. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$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" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$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" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + 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" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + 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::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # 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 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# 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/Build/source/extra/xz-4.999.9beta/build-aux/install-sh b/Build/source/extra/xz-4.999.9beta/build-aux/install-sh new file mode 100755 index 00000000000..6781b987bdb --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/build-aux/install-sh @@ -0,0 +1,520 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2009-04-28.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# 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 +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + 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. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# 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/Build/source/extra/xz-4.999.9beta/build-aux/ltmain.sh b/Build/source/extra/xz-4.999.9beta/build-aux/ltmain.sh new file mode 100755 index 00000000000..b36c4ad366c --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/build-aux/ltmain.sh @@ -0,0 +1,8406 @@ +# Generated from ltmain.m4sh. + +# ltmain.sh (GNU libtool) 2.2.6 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 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. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print informational messages (default) +# --version print version information +# -h, --help print short or long help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.2.6 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=2.2.6 +TIMESTAMP="" +package_revision=1.3012 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# NLS nuisances: We save the old values to restore during execute mode. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done + +$lt_unset CDPATH + + + + + +: ${CP="cp -f"} +: ${ECHO="echo"} +: ${EGREP="/usr/bin/grep -E"} +: ${FGREP="/usr/bin/grep -F"} +: ${GREP="/usr/bin/grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="/opt/local/bin/gsed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +# Generated shell functions inserted here. + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# The name of this program: +# In the unlikely event $progname began with a '-', it would play havoc with +# func_echo (imagine progname=-n), so we prepend ./ in that case: +func_dirname_and_basename "$progpath" +progname=$func_basename_result +case $progname in + -*) progname=./$progname ;; +esac + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname${mode+: }$mode: $*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` + done + my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "X$my_tmpdir" | $Xsed +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "X$1" | $Xsed \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + + + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $SED -n '/^# Usage:/,/# -h/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + $ECHO + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help +# Echo long help message to standard output and exit. +func_help () +{ + $SED -n '/^# Usage:/,/# Report bugs to/ { + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + }' < "$progpath" + exit $? +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1" + exit_cmd=exit +} + +exit_cmd=: + + + + + +# Check that we have a working $ECHO. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell, and then maybe $ECHO will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# Parse options once, thoroughly. This comes as soon as possible in +# the script to make things like `libtool --version' happen quickly. +{ + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Parse non-mode specific arguments: + while test "$#" -gt 0; do + opt="$1" + shift + + case $opt in + --config) func_config ;; + + --debug) preserve_args="$preserve_args $opt" + func_echo "enabling shell trace mode" + opt_debug='set -x' + $opt_debug + ;; + + -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break + execute_dlfiles="$execute_dlfiles $1" + shift + ;; + + --dry-run | -n) opt_dry_run=: ;; + --features) func_features ;; + --finish) mode="finish" ;; + + --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break + case $1 in + # Valid mode arguments: + clean) ;; + compile) ;; + execute) ;; + finish) ;; + install) ;; + link) ;; + relink) ;; + uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; + esac + + mode="$1" + shift + ;; + + --preserve-dup-deps) + opt_duplicate_deps=: ;; + + --quiet|--silent) preserve_args="$preserve_args $opt" + opt_silent=: + ;; + + --verbose| -v) preserve_args="$preserve_args $opt" + opt_silent=false + ;; + + --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break + preserve_args="$preserve_args $opt $1" + func_enable_tag "$1" # tagname is set here + shift + ;; + + # Separate optargs to long options: + -dlopen=*|--mode=*|--tag=*) + func_opt_split "$opt" + set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} + shift + ;; + + -\?|-h) func_usage ;; + --help) opt_help=: ;; + --version) func_version ;; + + -*) func_fatal_help "unrecognized option \`$opt'" ;; + + *) nonopt="$opt" + break + ;; + esac + done + + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_duplicate_deps + ;; + esac + + # Having warned about all mis-specified options, bail out if + # anything was wrong. + $exit_cmd $EXIT_FAILURE +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +## ----------- ## +## Main. ## +## ----------- ## + +$opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + test -z "$mode" && func_fatal_error "error: you must specify a MODE." + + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$mode' for more information." +} + + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_ltwrapper_scriptname_result="" + if func_ltwrapper_executable_p "$1"; then + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + fi +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case "$@ " in + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + removelist="$removelist $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + removelist="$removelist $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + command="$command -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { +test "$mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$mode'" + ;; + esac + + $ECHO + $ECHO "Try \`$progname --help' for more information about other modes." + + exit $? +} + + # Now that we've collected a possible --mode arg, show help if necessary + $opt_help && func_mode_help + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_quote_for_eval "$file" + args="$args $func_quote_for_eval_result" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + $ECHO "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + $ECHO "X----------------------------------------------------------------------" | $Xsed + $ECHO "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + $ECHO + $ECHO "If you ever happen to want to link against installed libraries" + $ECHO "in a given directory, LIBDIR, you must either use libtool, and" + $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" + $ECHO "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" + $ECHO " during execution" + fi + if test -n "$runpath_var"; then + $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" + $ECHO " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $ECHO + + $ECHO "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" + $ECHO "pages." + ;; + *) + $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + $ECHO "X----------------------------------------------------------------------" | $Xsed + exit $EXIT_SUCCESS +} + +test "$mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $ECHO "X$nonopt" | $GREP shtool >/dev/null; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + install_prog="$install_prog$func_quote_for_eval_result" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + case " $install_prog " in + *[\\\ /]cp\ *) ;; + *) prev=$arg ;; + esac + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + install_prog="$install_prog $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_verbose "extracting global C symbols from \`$progfile'" + $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + $ECHO >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +" + case $host in + *cygwin* | *mingw* | *cegcc* ) + $ECHO >> "$output_objdir/$my_dlsyms" "\ +/* DATA imports from DLLs on WIN32 con't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs. */" + lt_dlsym_const= ;; + *osf5*) + echo >> "$output_objdir/$my_dlsyms" "\ +/* This system does not cope well with relocations in const data */" + lt_dlsym_const= ;; + *) + lt_dlsym_const=const ;; + esac + + $ECHO >> "$output_objdir/$my_dlsyms" "\ +extern $lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +$lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + $ECHO >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) symtab_cflags="$symtab_cflags $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + + +# func_emit_wrapper_part1 [arg=no] +# +# Emit the first part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part1 () +{ + func_emit_wrapper_part1_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part1_arg1=$1 + fi + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + ECHO=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$ECHO works! + : + else + # Restart under the correct shell, and then maybe \$ECHO will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $ECHO "\ + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done +" +} +# end: func_emit_wrapper_part1 + +# func_emit_wrapper_part2 [arg=no] +# +# Emit the second part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part2 () +{ + func_emit_wrapper_part2_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part2_arg1=$1 + fi + + $ECHO "\ + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} +# end: func_emit_wrapper_part2 + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=no + if test -n "$1" ; then + func_emit_wrapper_arg1=$1 + fi + + # split this up so that func_emit_cwrapperexe_src + # can call each part independently. + func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" + func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" +} + + +# func_to_host_path arg +# +# Convert paths to host format when used with build tools. +# Intended for use with "native" mingw (where libtool itself +# is running under the msys shell), or in the following cross- +# build environments: +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# where wine is equipped with the `winepath' executable. +# In the native mingw case, the (msys) shell automatically +# converts paths for any non-msys applications it launches, +# but that facility isn't available from inside the cwrapper. +# Similar accommodations are necessary for $host mingw and +# $build cygwin. Calling this function does no harm for other +# $host/$build combinations not listed above. +# +# ARG is the path (on $build) that should be converted to +# the proper representation for $host. The result is stored +# in $func_to_host_path_result. +func_to_host_path () +{ + func_to_host_path_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + case $build in + *mingw* ) # actually, msys + # awkward: cmd appends spaces to result + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_path_tmp1=`( cmd //c echo "$1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_path_tmp1=`cygpath -w "$1"` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # Unfortunately, winepath does not exit with a non-zero + # error code, so we are forced to check the contents of + # stdout. On the other hand, if the command is not + # found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both + # error code of zero AND non-empty stdout, which explains + # the odd construction: + func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + else + # Allow warning below. + func_to_host_path_result="" + fi + ;; + esac + if test -z "$func_to_host_path_result" ; then + func_error "Could not determine host path corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_path_result="$1" + fi + ;; + esac + fi +} +# end: func_to_host_path + +# func_to_host_pathlist arg +# +# Convert pathlists to host format when used with build tools. +# See func_to_host_path(), above. This function supports the +# following $build/$host combinations (but does no harm for +# combinations not listed here): +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# +# Path separators are also converted from $build format to +# $host format. If ARG begins or ends with a path separator +# character, it is preserved (but converted to $host format) +# on output. +# +# ARG is a pathlist (on $build) that should be converted to +# the proper representation on $host. The result is stored +# in $func_to_host_pathlist_result. +func_to_host_pathlist () +{ + func_to_host_pathlist_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_to_host_pathlist_tmp2="$1" + # Once set for this call, this variable should not be + # reassigned. It is used in tha fallback case. + func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e 's|^:*||' -e 's|:*$||'` + case $build in + *mingw* ) # Actually, msys. + # Awkward: cmd appends spaces to result. + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # unfortunately, winepath doesn't convert pathlists + func_to_host_pathlist_result="" + func_to_host_pathlist_oldIFS=$IFS + IFS=: + for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do + IFS=$func_to_host_pathlist_oldIFS + if test -n "$func_to_host_pathlist_f" ; then + func_to_host_path "$func_to_host_pathlist_f" + if test -n "$func_to_host_path_result" ; then + if test -z "$func_to_host_pathlist_result" ; then + func_to_host_pathlist_result="$func_to_host_path_result" + else + func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" + fi + fi + fi + IFS=: + done + IFS=$func_to_host_pathlist_oldIFS + ;; + esac + if test -z "$func_to_host_pathlist_result" ; then + func_error "Could not determine the host path(s) corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This may break if $1 contains DOS-style drive + # specifications. The fix is not to complicate the expression + # below, but for the user to provide a working wine installation + # with winepath so that path translation in the cross-to-mingw + # case works properly. + lt_replace_pathsep_nix_to_dos="s|:|;|g" + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_replace_pathsep_nix_to_dos"` + fi + # Now, add the leading and trailing path separators back + case "$1" in + :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" + ;; + esac + case "$1" in + *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" + ;; + esac + ;; + esac + fi +} +# end: func_to_host_pathlist + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +# define setmode _setmode +#else +# include +# include +# ifdef __CYGWIN__ +# include +# define HAVE_SETENV +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +#ifdef _MSC_VER +# define S_IXUSR _S_IEXEC +# define stat _stat +# ifndef _INTPTR_T_DEFINED +# define intptr_t int +# endif +#endif + +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifdef __CYGWIN__ +# define FOPEN_WB "wb" +#endif + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#undef LTWRAPPER_DEBUGPRINTF +#if defined DEBUGWRAPPER +# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args +static void +ltwrapper_debugprintf (const char *fmt, ...) +{ + va_list args; + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); +} +#else +# define LTWRAPPER_DEBUGPRINTF(args) +#endif + +const char *program_name = NULL; + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_fatal (const char *message, ...); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_opt_process_env_set (const char *arg); +void lt_opt_process_env_prepend (const char *arg); +void lt_opt_process_env_append (const char *arg); +int lt_split_name_value (const char *arg, char** name, char** value); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); + +static const char *script_text_part1 = +EOF + + func_emit_wrapper_part1 yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ "/' -e 's/$/\\n"/' + echo ";" + cat <"))); + for (i = 0; i < newargc; i++) + { + LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); + } + +EOF + + case $host_os in + mingw*) + cat <<"EOF" + /* execv doesn't actually work on mingw as expected on unix */ + rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); + if (rval == -1) + { + /* failed to start process */ + LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); + return 127; + } + return rval; +EOF + ;; + *) + cat <<"EOF" + execv (lt_argv_zero, newargz); + return rval; /* =127, but avoids unused variable warning */ +EOF + ;; + esac + + cat <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void *p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), + string) : NULL; +} + +const char * +base_name (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char) name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} + +int +check_executable (const char *path) +{ + struct stat st; + + LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", + wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", + tmp_pathspec)); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + char *errstr = strerror (errno); + lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal ("Could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} + +void +lt_setenv (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", + (name ? name : ""), + (value ? value : ""))); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +int +lt_split_name_value (const char *arg, char** name, char** value) +{ + const char *p; + int len; + if (!arg || !*arg) + return 1; + + p = strchr (arg, (int)'='); + + if (!p) + return 1; + + *value = xstrdup (++p); + + len = strlen (arg) - strlen (*value); + *name = XMALLOC (char, len); + strncpy (*name, arg, len-1); + (*name)[len - 1] = '\0'; + + return 0; +} + +void +lt_opt_process_env_set (const char *arg) +{ + char *name = NULL; + char *value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); + } + + lt_setenv (name, value); + XFREE (name); + XFREE (value); +} + +void +lt_opt_process_env_prepend (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); + } + + new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} + +void +lt_opt_process_env_append (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); + } + + new_value = lt_extend_str (getenv (name), value, 1); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + + +EOF +} +# end: func_emit_cwrapperexe_src + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) deplibs="$deplibs $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + weak_libs="$weak_libs $arg" + prev= + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname '-L' '' "$arg" + dir=$func_stripname_result + if test -z "$dir"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" + linker_flags="$linker_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # -64, -mips[0-9] enable 64-bit mode on the SGI compiler + # -r[0-9][0-9]* specifies the processor on the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler + # +DA*, +DD* enable 64-bit mode on the HP compiler + # -q* pass through compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* pass through architecture-specific + # compiler args for GCC + # -F/path gives path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC + # @file GCC response files + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_duplicate_deps ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + case $lib in + *.la) func_source "$lib" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` + case " $weak_libs " in + *" $deplib_base "*) ;; + *) deplibs="$deplibs $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + dir=$func_stripname_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + $ECHO + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because the file extensions .$libext of this argument makes me believe" + $ECHO "*** that it is just a static archive that I should not use here." + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) temp_rpath="$temp_rpath$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + notinst_deplibs="$notinst_deplibs $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + $ECHO + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $ECHO + $ECHO "*** And there doesn't seem to be a static archive available" + $ECHO "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $ECHO + $ECHO "*** Warning: This system can not link to static lib archive $lib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $ECHO "*** But as you try to build a module library, libtool will still create " + $ECHO "*** a static module, that should work as long as the dlopening application" + $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_dirname "$deplib" "" "." + dir="$func_dirname_result" + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + libobjs="$libobjs $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` + # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` + # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ + -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` + done + fi + if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | + $GREP . >/dev/null; then + $ECHO + if test "X$deplibs_check_method" = "Xnone"; then + $ECHO "*** Warning: inter-library dependencies are not supported in this platform." + else + $ECHO "*** Warning: inter-library dependencies are not known to be supported." + fi + $ECHO "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $ECHO + $ECHO "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + $ECHO "*** a static module, that should work as long as the dlopening" + $ECHO "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $ECHO "*** The inter-library dependencies that have been dropped here will be" + $ECHO "*** automatically added whenever a program is linked with this library" + $ECHO "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $ECHO + $ECHO "*** Since this library must not contain undefined symbols," + $ECHO "*** because either the platform does not support them or" + $ECHO "*** it was explicitly requested with -no-undefined," + $ECHO "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + delfiles="$delfiles $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + func_len " $cmd" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + output_la=`$ECHO "X$output" | $Xsed -e "$basename"` + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + $ECHO 'INPUT (' > $output + for obj in $save_libobjs + do + $ECHO "$obj" >> $output + done + $ECHO ')' >> $output + delfiles="$delfiles $output" + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + $ECHO "$obj" >> $output + done + delfiles="$delfiles $output" + output=$firstobj\"$file_list_spec$output\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=$obj + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + delfiles="$delfiles $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *cegcc) + # Disable wrappers for cegcc, we are cross compiling anyway. + wrappers_required=no + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $ECHO for shipping. + if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + oldobjs="$oldobjs $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $ECHO "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlfiles="$newdlfiles $libdir/$name" + ;; + *) newdlfiles="$newdlfiles $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlprefiles="$newdlprefiles $libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$mode" = link || test "$mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) RM="$RM $arg"; rmforce=yes ;; + -*) RM="$RM $arg" ;; + *) files="$files $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$mode" = uninstall || test "$mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/Build/source/extra/xz-4.999.9beta/build-aux/missing b/Build/source/extra/xz-4.999.9beta/build-aux/missing new file mode 100755 index 00000000000..28055d2ae6f --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/build-aux/missing @@ -0,0 +1,376 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 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 + tar try tar, gnutar, gtar, then tar without non-portable flags + 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. + ;; + + tar*) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + 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 + ;; + + tar*) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + 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/Build/source/extra/xz-4.999.9beta/config.h.in b/Build/source/extra/xz-4.999.9beta/config.h.in new file mode 100644 index 00000000000..0e31e37e4c3 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/config.h.in @@ -0,0 +1,404 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#undef ENABLE_NLS + +/* Define to 1 if using x86 assembler optimizations. */ +#undef HAVE_ASM_X86 + +/* Define to 1 if using x86_64 assembler optimizations. */ +#undef HAVE_ASM_X86_64 + +/* Define to 1 if bswap_16 is available. */ +#undef HAVE_BSWAP_16 + +/* Define to 1 if bswap_32 is available. */ +#undef HAVE_BSWAP_32 + +/* Define to 1 if bswap_64 is available. */ +#undef HAVE_BSWAP_64 + +/* Define to 1 if you have the header file. */ +#undef HAVE_BYTESWAP_H + +/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +#undef HAVE_CFLOCALECOPYCURRENT + +/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +#undef HAVE_CFPREFERENCESCOPYAPPVALUE + +/* Define to 1 if crc32 integrity check is enabled. */ +#undef HAVE_CHECK_CRC32 + +/* Define to 1 if crc64 integrity check is enabled. */ +#undef HAVE_CHECK_CRC64 + +/* Define to 1 if sha256 integrity check is enabled. */ +#undef HAVE_CHECK_SHA256 + +/* Define to 1 if the number of available CPU cores can be detected with + sysconf(_SC_NPROCESSORS_ONLN). */ +#undef HAVE_CPUCORES_SYSCONF + +/* Define to 1 if the number of available CPU cores can be detected with + sysctl(). */ +#undef HAVE_CPUCORES_SYSCTL + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#undef HAVE_DCGETTEXT + +/* Define to 1 if decoder components are enabled. */ +#undef HAVE_DECODER + +/* Define to 1 if arm decoder is enabled. */ +#undef HAVE_DECODER_ARM + +/* Define to 1 if armthumb decoder is enabled. */ +#undef HAVE_DECODER_ARMTHUMB + +/* Define to 1 if delta decoder is enabled. */ +#undef HAVE_DECODER_DELTA + +/* Define to 1 if ia64 decoder is enabled. */ +#undef HAVE_DECODER_IA64 + +/* Define to 1 if lzma1 decoder is enabled. */ +#undef HAVE_DECODER_LZMA1 + +/* Define to 1 if lzma2 decoder is enabled. */ +#undef HAVE_DECODER_LZMA2 + +/* Define to 1 if powerpc decoder is enabled. */ +#undef HAVE_DECODER_POWERPC + +/* Define to 1 if sparc decoder is enabled. */ +#undef HAVE_DECODER_SPARC + +/* Define to 1 if subblock decoder is enabled. */ +#undef HAVE_DECODER_SUBBLOCK + +/* Define to 1 if x86 decoder is enabled. */ +#undef HAVE_DECODER_X86 + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if encoder components are enabled. */ +#undef HAVE_ENCODER + +/* Define to 1 if arm encoder is enabled. */ +#undef HAVE_ENCODER_ARM + +/* Define to 1 if armthumb encoder is enabled. */ +#undef HAVE_ENCODER_ARMTHUMB + +/* Define to 1 if delta encoder is enabled. */ +#undef HAVE_ENCODER_DELTA + +/* Define to 1 if ia64 encoder is enabled. */ +#undef HAVE_ENCODER_IA64 + +/* Define to 1 if lzma1 encoder is enabled. */ +#undef HAVE_ENCODER_LZMA1 + +/* Define to 1 if lzma2 encoder is enabled. */ +#undef HAVE_ENCODER_LZMA2 + +/* Define to 1 if powerpc encoder is enabled. */ +#undef HAVE_ENCODER_POWERPC + +/* Define to 1 if sparc encoder is enabled. */ +#undef HAVE_ENCODER_SPARC + +/* Define to 1 if subblock encoder is enabled. */ +#undef HAVE_ENCODER_SUBBLOCK + +/* Define to 1 if x86 encoder is enabled. */ +#undef HAVE_ENCODER_X86 + +/* Define to 1 if the system supports fast unaligned memory access. */ +#undef HAVE_FAST_UNALIGNED_ACCESS + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the `futimens' function. */ +#undef HAVE_FUTIMENS + +/* Define to 1 if you have the `futimes' function. */ +#undef HAVE_FUTIMES + +/* Define to 1 if you have the `futimesat' function. */ +#undef HAVE_FUTIMESAT + +/* Define to 1 if you have the header file. */ +#undef HAVE_GETOPT_H + +/* Define to 1 if you have the `getopt_long' function. */ +#undef HAVE_GETOPT_LONG + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#undef HAVE_GETTEXT + +/* Define if you have the iconv() function. */ +#undef HAVE_ICONV + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIMITS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 to enable bt2 match finder. */ +#undef HAVE_MF_BT2 + +/* Define to 1 to enable bt3 match finder. */ +#undef HAVE_MF_BT3 + +/* Define to 1 to enable bt4 match finder. */ +#undef HAVE_MF_BT4 + +/* Define to 1 to enable hc3 match finder. */ +#undef HAVE_MF_HC3 + +/* Define to 1 to enable hc4 match finder. */ +#undef HAVE_MF_HC4 + +/* Define to 1 if getopt.h declares extern int optreset. */ +#undef HAVE_OPTRESET + +/* Define to 1 if the amount of physical memory can be detected with + sysconf(_SC_PAGESIZE) and sysconf(_SC_PHYS_PAGES). */ +#undef HAVE_PHYSMEM_SYSCONF + +/* Define to 1 if the amount of physical memory can be detected with sysctl(). + */ +#undef HAVE_PHYSMEM_SYSCTL + +/* Define to 1 if the amount of physical memory can be detected with Linux + sysinfo(). */ +#undef HAVE_PHYSMEM_SYSINFO + +/* Define if you have POSIX threads libraries and header files. */ +#undef HAVE_PTHREAD + +/* Define to 1 if optimizing for size. */ +#undef HAVE_SMALL + +/* Define to 1 if stdbool.h conforms to C99. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if `struct stat' is a member of `st_atimensec'. */ +#undef HAVE_STRUCT_STAT_ST_ATIMENSEC + +/* Define to 1 if `struct stat' is a member of `st_atimespec.tv_nsec'. */ +#undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC + +/* Define to 1 if `struct stat' is a member of `st_atim.st__tim.tv_nsec'. */ +#undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC + +/* Define to 1 if `struct stat' is a member of `st_atim.tv_nsec'. */ +#undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC + +/* Define to 1 if `struct stat' is a member of `st_uatime'. */ +#undef HAVE_STRUCT_STAT_ST_UATIME + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SYSCTL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if the system has the type `uintptr_t'. */ +#undef HAVE_UINTPTR_T + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `utime' function. */ +#undef HAVE_UTIME + +/* Define to 1 if you have the `utimes' function. */ +#undef HAVE_UTIMES + +/* Define to 1 or 0, depending whether the compiler supports simple visibility + declarations. */ +#undef HAVE_VISIBILITY + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to 1 to disable debugging code. */ +#undef NDEBUG + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the URL of the home page of this package. */ +#undef PACKAGE_HOMEPAGE + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +#undef PTHREAD_CREATE_JOINABLE + +/* The size of `size_t', as computed by sizeof. */ +#undef SIZEOF_SIZE_T + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Version number of package */ +#undef VERSION + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE + +/* Define for Solaris 2.5.1 so the uint32_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +#undef _UINT32_T + +/* Define for Solaris 2.5.1 so the uint64_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +#undef _UINT64_T + +/* Define for Solaris 2.5.1 so the uint8_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +#undef _UINT8_T + +/* Define to rpl_ if the getopt replacement functions and variables should be + used. */ +#undef __GETOPT_PREFIX + +/* Define to the type of a signed integer type of width exactly 32 bits if + such a type exists and the standard includes do not define it. */ +#undef int32_t + +/* Define to the type of a signed integer type of width exactly 64 bits if + such a type exists and the standard includes do not define it. */ +#undef int64_t + +/* Define to the type of an unsigned integer type of width exactly 16 bits if + such a type exists and the standard includes do not define it. */ +#undef uint16_t + +/* Define to the type of an unsigned integer type of width exactly 32 bits if + such a type exists and the standard includes do not define it. */ +#undef uint32_t + +/* Define to the type of an unsigned integer type of width exactly 64 bits if + such a type exists and the standard includes do not define it. */ +#undef uint64_t + +/* Define to the type of an unsigned integer type of width exactly 8 bits if + such a type exists and the standard includes do not define it. */ +#undef uint8_t + +/* Define to the type of an unsigned integer type wide enough to hold a + pointer, if such a type exists, and if the system does not define it. */ +#undef uintptr_t diff --git a/Build/source/extra/xz-4.999.9beta/configure b/Build/source/extra/xz-4.999.9beta/configure new file mode 100755 index 00000000000..317cb88a26d --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/configure @@ -0,0 +1,19363 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.64 for XZ Utils 4.999.9beta. +# +# Report bugs to . +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software +# Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +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 + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +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" + 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'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +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. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: lasse.collin@tukaani.org about your system, including +$0: any error possibly output before this message. Then +$0: install a modern shell, or manually run the script +$0: under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + 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; } + + # 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). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... 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'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + 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 + +# 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'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='XZ Utils' +PACKAGE_TARNAME='xz' +PACKAGE_VERSION='4.999.9beta' +PACKAGE_STRING='XZ Utils 4.999.9beta' +PACKAGE_BUGREPORT='lasse.collin@tukaani.org' +PACKAGE_URL='' + +ac_unique_file="src/liblzma/common/common.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +gt_needs= +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +xz +DYNAMIC_LDFLAGS +DYNAMIC_CPPFLAGS +STATIC_LDFLAGS +STATIC_CPPFLAGS +AM_CFLAGS +COND_GNULIB_FALSE +COND_GNULIB_TRUE +HAVE_VISIBILITY +CFLAG_VISIBILITY +GETOPT_H +LIBOBJS +POSUB +LTLIBINTL +LIBINTL +INTLLIBS +LTLIBICONV +LIBICONV +INTL_MACOSX_LIBS +MSGMERGE +XGETTEXT_015 +XGETTEXT +GMSGFMT_015 +MSGFMT_015 +GMSGFMT +MSGFMT +USE_NLS +COND_SHARED_FALSE +COND_SHARED_TRUE +RC +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +SED +LIBTOOL +OBJDUMP +DLLTOOL +AS +PTHREAD_CFLAGS +PTHREAD_LIBS +PTHREAD_CC +acx_pthread_config +EGREP +GREP +CPP +am__fastdepCCAS_FALSE +am__fastdepCCAS_TRUE +CCASDEPMODE +CCASFLAGS +CCAS +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +LN_S +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +PREFERABLY_POSIX_SHELL +POSIX_SHELL +COND_SMALL_FALSE +COND_SMALL_TRUE +COND_ASM_X86_64_FALSE +COND_ASM_X86_64_TRUE +COND_ASM_X86_FALSE +COND_ASM_X86_TRUE +COND_CHECK_SHA256_FALSE +COND_CHECK_SHA256_TRUE +COND_CHECK_CRC64_FALSE +COND_CHECK_CRC64_TRUE +COND_CHECK_CRC32_FALSE +COND_CHECK_CRC32_TRUE +COND_DECODER_LZ_FALSE +COND_DECODER_LZ_TRUE +COND_ENCODER_LZ_FALSE +COND_ENCODER_LZ_TRUE +COND_FILTER_LZ_FALSE +COND_FILTER_LZ_TRUE +COND_DECODER_SIMPLE_FALSE +COND_DECODER_SIMPLE_TRUE +COND_ENCODER_SIMPLE_FALSE +COND_ENCODER_SIMPLE_TRUE +COND_FILTER_SIMPLE_FALSE +COND_FILTER_SIMPLE_TRUE +COND_DECODER_SPARC_FALSE +COND_DECODER_SPARC_TRUE +COND_ENCODER_SPARC_FALSE +COND_ENCODER_SPARC_TRUE +COND_FILTER_SPARC_FALSE +COND_FILTER_SPARC_TRUE +COND_DECODER_ARMTHUMB_FALSE +COND_DECODER_ARMTHUMB_TRUE +COND_ENCODER_ARMTHUMB_FALSE +COND_ENCODER_ARMTHUMB_TRUE +COND_FILTER_ARMTHUMB_FALSE +COND_FILTER_ARMTHUMB_TRUE +COND_DECODER_ARM_FALSE +COND_DECODER_ARM_TRUE +COND_ENCODER_ARM_FALSE +COND_ENCODER_ARM_TRUE +COND_FILTER_ARM_FALSE +COND_FILTER_ARM_TRUE +COND_DECODER_IA64_FALSE +COND_DECODER_IA64_TRUE +COND_ENCODER_IA64_FALSE +COND_ENCODER_IA64_TRUE +COND_FILTER_IA64_FALSE +COND_FILTER_IA64_TRUE +COND_DECODER_POWERPC_FALSE +COND_DECODER_POWERPC_TRUE +COND_ENCODER_POWERPC_FALSE +COND_ENCODER_POWERPC_TRUE +COND_FILTER_POWERPC_FALSE +COND_FILTER_POWERPC_TRUE +COND_DECODER_X86_FALSE +COND_DECODER_X86_TRUE +COND_ENCODER_X86_FALSE +COND_ENCODER_X86_TRUE +COND_FILTER_X86_FALSE +COND_FILTER_X86_TRUE +COND_DECODER_DELTA_FALSE +COND_DECODER_DELTA_TRUE +COND_ENCODER_DELTA_FALSE +COND_ENCODER_DELTA_TRUE +COND_FILTER_DELTA_FALSE +COND_FILTER_DELTA_TRUE +COND_DECODER_SUBBLOCK_FALSE +COND_DECODER_SUBBLOCK_TRUE +COND_ENCODER_SUBBLOCK_FALSE +COND_ENCODER_SUBBLOCK_TRUE +COND_FILTER_SUBBLOCK_FALSE +COND_FILTER_SUBBLOCK_TRUE +COND_DECODER_LZMA2_FALSE +COND_DECODER_LZMA2_TRUE +COND_ENCODER_LZMA2_FALSE +COND_ENCODER_LZMA2_TRUE +COND_FILTER_LZMA2_FALSE +COND_FILTER_LZMA2_TRUE +COND_DECODER_LZMA1_FALSE +COND_DECODER_LZMA1_TRUE +COND_ENCODER_LZMA1_FALSE +COND_ENCODER_LZMA1_TRUE +COND_FILTER_LZMA1_FALSE +COND_FILTER_LZMA1_TRUE +COND_MAIN_DECODER_FALSE +COND_MAIN_DECODER_TRUE +COND_MAIN_ENCODER_FALSE +COND_MAIN_ENCODER_TRUE +COND_W32_FALSE +COND_W32_TRUE +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +PACKAGE_HOMEPAGE +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_debug +enable_encoders +enable_decoders +enable_match_finders +enable_checks +enable_assembler +enable_unaligned_access +enable_small +enable_threads +enable_dynamic +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +enable_nls +enable_rpath +with_libiconv_prefix +with_libintl_prefix +enable_largefile +enable_werror +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CCAS +CCASFLAGS +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +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 +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +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 XZ Utils 4.999.9beta to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/xz] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of XZ Utils 4.999.9beta:";; + esac + cat <<\_ACEOF + +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-debug Enable debugging code. + --enable-encoders=LIST Comma-separated list of encoders to build. + Default=all. Available encoders: lzma1 lzma2 + subblock delta x86 powerpc ia64 arm armthumb sparc + --enable-decoders=LIST Comma-separated list of decoders to build. + Default=all. Available decoders are the same as + available encoders. + --enable-match-finders=LIST + Comma-separated list of match finders to build. + Default=all. At least one match finder is required + for encoding with the LZMA1 and LZMA2 filters. + Available match finders: hc3 hc4 bt2 bt3 bt4 + --enable-checks=LIST Comma-separated list of integrity checks to build. + Default=all. Available integrity checks: crc32 crc64 + sha256 + --disable-assembler Do not use assembler optimizations even if such + exist for the architecture. + --enable-unaligned-access + Enable if the system supports *fast* unaligned + memory access with 16-bit and 32-bit integers. By + default, this is enabled only on x86, x86_64, and + big endian PowerPC. + --enable-small Make liblzma smaller and a little slower. This is + disabled by default to optimize for speed. + --disable-threads Disable threading support. This makes some things + thread-unsafe. + --enable-dynamic=TYPE Set how command line tools are linked against + liblzma. TYPE can be mixed, yes, or no. The default + is mixed. + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --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-libtool-lock avoid locking (might break parallel builds) + --disable-nls do not use Native Language Support + --disable-rpath do not hardcode runtime library paths + --disable-largefile omit support for large files + --enable-werror Enable -Werror to abort compilation on all compiler + warnings. + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-gnu-ld assume the C compiler uses GNU ld default=no + --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib + --without-libiconv-prefix don't search for libiconv in includedir and libdir + --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib + --without-libintl-prefix don't search for libintl in includedir and libdir + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CCAS assembler compiler command (defaults to CC) + CCASFLAGS assembler compiler flags (defaults to CFLAGS) + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +XZ Utils configure 4.999.9beta +generated by GNU Autoconf 2.64 + +Copyright (C) 2009 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( cat <<\_ASBOX +## --------------------------------------- ## +## Report this to lasse.collin@tukaani.org ## +## --------------------------------------- ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_type + +# ac_fn_c_find_uintX_t LINENO BITS VAR +# ------------------------------------ +# Finds an unsigned integer type with width BITS, setting cache variable VAR +# accordingly. +ac_fn_c_find_uintX_t () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +$as_echo_n "checking for uint$2_t... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ + 'unsigned long long int' 'unsigned short int' 'unsigned char'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(($ac_type) -1 >> ($2 - 1) == 1)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + case $ac_type in #( + uint$2_t) : + eval "$3=yes" ;; #( + *) : + eval "$3=\$ac_type" ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval as_val=\$$3 + if test "x$as_val" = x""no; then : + +else + break +fi + done +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_find_uintX_t + +# ac_fn_c_find_intX_t LINENO BITS VAR +# ----------------------------------- +# Finds a signed integer type with width BITS, setting cache variable VAR +# accordingly. +ac_fn_c_find_intX_t () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 +$as_echo_n "checking for int$2_t... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + for ac_type in int$2_t 'int' 'long int' \ + 'long long int' 'short int' 'signed char'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(0 < ($ac_type) (((($ac_type) 1 << ($2 - 2)) - 1) * 2 + 1))]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(($ac_type) (((($ac_type) 1 << ($2 - 2)) - 1) * 2 + 1) + < ($ac_type) (((($ac_type) 1 << ($2 - 2)) - 1) * 2 + 2))]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + case $ac_type in #( + int$2_t) : + eval "$3=yes" ;; #( + *) : + eval "$3=\$ac_type" ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval as_val=\$$3 + if test "x$as_val" = x""no; then : + +else + break +fi + done +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_find_intX_t + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 &5 +$as_echo_n "checking for $2.$3... " >&6; } +if { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + eval "$4=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_member + +# ac_fn_c_check_decl LINENO SYMBOL VAR +# ------------------------------------ +# Tests whether SYMBOL is declared, setting cache variable VAR accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 +$as_echo_n "checking whether $2 is declared... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $2 + (void) $2; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_decl +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 XZ Utils $as_me 4.999.9beta, which was +generated by GNU Autoconf 2.64. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +gt_needs="$gt_needs " +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +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 + + + +ac_aux_dir= +for ac_dir in build-aux "$srcdir"/build-aux; do + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done +done +if test -z "$ac_aux_dir"; then + as_fn_error "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +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. + + + +ac_config_headers="$ac_config_headers config.h" + + +PACKAGE_HOMEPAGE=http://tukaani.org/xz/ + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_HOMEPAGE "$PACKAGE_HOMEPAGE" +_ACEOF + + + +echo +echo "$PACKAGE_STRING" + +echo +echo "System type:" +# This is needed to know if assembler optimizations can be used. +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + +# We do some special things on Windows (32-bit or 64-bit) builds. +case $host_os in + mingw* | cygwin*) is_w32=yes ;; + *) is_w32=no ;; +esac + if test "$is_w32" = yes; then + COND_W32_TRUE= + COND_W32_FALSE='#' +else + COND_W32_TRUE='#' + COND_W32_FALSE= +fi + + + +echo +echo "Configure options:" +AM_CFLAGS= + + +############# +# Debugging # +############# + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if debugging code should be compiled" >&5 +$as_echo_n "checking if debugging code should be compiled... " >&6; } +# Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; +else + enable_debug=no +fi + +if test "x$enable_debug" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + +$as_echo "#define NDEBUG 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +########### +# Filters # +########### + + + + +enable_filter_lzma1=no +enable_encoder_lzma1=no +enable_decoder_lzma1=no +enable_filter_lzma2=no +enable_encoder_lzma2=no +enable_decoder_lzma2=no +enable_filter_subblock=no +enable_encoder_subblock=no +enable_decoder_subblock=no +enable_filter_delta=no +enable_encoder_delta=no +enable_decoder_delta=no +enable_filter_x86=no +enable_encoder_x86=no +enable_decoder_x86=no +enable_filter_powerpc=no +enable_encoder_powerpc=no +enable_decoder_powerpc=no +enable_filter_ia64=no +enable_encoder_ia64=no +enable_decoder_ia64=no +enable_filter_arm=no +enable_encoder_arm=no +enable_decoder_arm=no +enable_filter_armthumb=no +enable_encoder_armthumb=no +enable_decoder_armthumb=no +enable_filter_sparc=no +enable_encoder_sparc=no +enable_decoder_sparc=no + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which encoders to build" >&5 +$as_echo_n "checking which encoders to build... " >&6; } +# Check whether --enable-encoders was given. +if test "${enable_encoders+set}" = set; then : + enableval=$enable_encoders; +else + enable_encoders=lzma1,lzma2,subblock,delta,x86,powerpc,ia64,arm,armthumb,sparc +fi + +enable_encoders=`echo "$enable_encoders" | sed 's/,subblock//; s/,/ /g'` +if test "x$enable_encoders" = xno || test "x$enable_encoders" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none)" >&5 +$as_echo "(none)" >&6; } +else + +$as_echo "#define HAVE_ENCODER 1" >>confdefs.h + + for arg in $enable_encoders + do + case $arg in + lzma1) + enable_filter_lzma1=yes + enable_encoder_lzma1=yes + +$as_echo "#define HAVE_ENCODER_LZMA1 1" >>confdefs.h + + ;; + lzma2) + enable_filter_lzma2=yes + enable_encoder_lzma2=yes + +$as_echo "#define HAVE_ENCODER_LZMA2 1" >>confdefs.h + + ;; + subblock) + enable_filter_subblock=yes + enable_encoder_subblock=yes + +$as_echo "#define HAVE_ENCODER_SUBBLOCK 1" >>confdefs.h + + ;; + delta) + enable_filter_delta=yes + enable_encoder_delta=yes + +$as_echo "#define HAVE_ENCODER_DELTA 1" >>confdefs.h + + ;; + x86) + enable_filter_x86=yes + enable_encoder_x86=yes + +$as_echo "#define HAVE_ENCODER_X86 1" >>confdefs.h + + ;; + powerpc) + enable_filter_powerpc=yes + enable_encoder_powerpc=yes + +$as_echo "#define HAVE_ENCODER_POWERPC 1" >>confdefs.h + + ;; + ia64) + enable_filter_ia64=yes + enable_encoder_ia64=yes + +$as_echo "#define HAVE_ENCODER_IA64 1" >>confdefs.h + + ;; + arm) + enable_filter_arm=yes + enable_encoder_arm=yes + +$as_echo "#define HAVE_ENCODER_ARM 1" >>confdefs.h + + ;; + armthumb) + enable_filter_armthumb=yes + enable_encoder_armthumb=yes + +$as_echo "#define HAVE_ENCODER_ARMTHUMB 1" >>confdefs.h + + ;; + sparc) + enable_filter_sparc=yes + enable_encoder_sparc=yes + +$as_echo "#define HAVE_ENCODER_SPARC 1" >>confdefs.h + + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + as_fn_error "unknown filter: $arg" "$LINENO" 5 + ;; + esac + done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_encoders" >&5 +$as_echo "$enable_encoders" >&6; } +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which decoders to build" >&5 +$as_echo_n "checking which decoders to build... " >&6; } +# Check whether --enable-decoders was given. +if test "${enable_decoders+set}" = set; then : + enableval=$enable_decoders; +else + enable_decoders=lzma1,lzma2,subblock,delta,x86,powerpc,ia64,arm,armthumb,sparc +fi + +enable_decoders=`echo "$enable_decoders" | sed 's/,subblock//; s/,/ /g'` +if test "x$enable_decoders" = xno || test "x$enable_decoders" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none)" >&5 +$as_echo "(none)" >&6; } +else + +$as_echo "#define HAVE_DECODER 1" >>confdefs.h + + for arg in $enable_decoders + do + case $arg in + lzma1) + enable_filter_lzma1=yes + enable_decoder_lzma1=yes + +$as_echo "#define HAVE_DECODER_LZMA1 1" >>confdefs.h + + ;; + lzma2) + enable_filter_lzma2=yes + enable_decoder_lzma2=yes + +$as_echo "#define HAVE_DECODER_LZMA2 1" >>confdefs.h + + ;; + subblock) + enable_filter_subblock=yes + enable_decoder_subblock=yes + +$as_echo "#define HAVE_DECODER_SUBBLOCK 1" >>confdefs.h + + ;; + delta) + enable_filter_delta=yes + enable_decoder_delta=yes + +$as_echo "#define HAVE_DECODER_DELTA 1" >>confdefs.h + + ;; + x86) + enable_filter_x86=yes + enable_decoder_x86=yes + +$as_echo "#define HAVE_DECODER_X86 1" >>confdefs.h + + ;; + powerpc) + enable_filter_powerpc=yes + enable_decoder_powerpc=yes + +$as_echo "#define HAVE_DECODER_POWERPC 1" >>confdefs.h + + ;; + ia64) + enable_filter_ia64=yes + enable_decoder_ia64=yes + +$as_echo "#define HAVE_DECODER_IA64 1" >>confdefs.h + + ;; + arm) + enable_filter_arm=yes + enable_decoder_arm=yes + +$as_echo "#define HAVE_DECODER_ARM 1" >>confdefs.h + + ;; + armthumb) + enable_filter_armthumb=yes + enable_decoder_armthumb=yes + +$as_echo "#define HAVE_DECODER_ARMTHUMB 1" >>confdefs.h + + ;; + sparc) + enable_filter_sparc=yes + enable_decoder_sparc=yes + +$as_echo "#define HAVE_DECODER_SPARC 1" >>confdefs.h + + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + as_fn_error "unknown filter: $arg" "$LINENO" 5 + ;; + esac + done + + # LZMA2 requires that LZMA1 is enabled. + test "x$enable_encoder_lzma2" = xyes && enable_encoder_lzma1=yes + test "x$enable_decoder_lzma2" = xyes && enable_decoder_lzma1=yes + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_decoders" >&5 +$as_echo "$enable_decoders" >&6; } +fi + +if test "x$enable_encoder_lzma2$enable_encoder_lzma1" = xyesno \ + || test "x$enable_decoder_lzma2$enable_decoder_lzma1" = xyesno; then + as_fn_error "LZMA2 requires that LZMA1 is also enabled." "$LINENO" 5 +fi + + if test "x$enable_encoders" != xno && test "x$enable_encoders" != x; then + COND_MAIN_ENCODER_TRUE= + COND_MAIN_ENCODER_FALSE='#' +else + COND_MAIN_ENCODER_TRUE='#' + COND_MAIN_ENCODER_FALSE= +fi + + if test "x$enable_decoders" != xno && test "x$enable_decoders" != x; then + COND_MAIN_DECODER_TRUE= + COND_MAIN_DECODER_FALSE='#' +else + COND_MAIN_DECODER_TRUE='#' + COND_MAIN_DECODER_FALSE= +fi + + + if test "x$enable_filter_lzma1" = xyes; then + COND_FILTER_LZMA1_TRUE= + COND_FILTER_LZMA1_FALSE='#' +else + COND_FILTER_LZMA1_TRUE='#' + COND_FILTER_LZMA1_FALSE= +fi + + if test "x$enable_encoder_lzma1" = xyes; then + COND_ENCODER_LZMA1_TRUE= + COND_ENCODER_LZMA1_FALSE='#' +else + COND_ENCODER_LZMA1_TRUE='#' + COND_ENCODER_LZMA1_FALSE= +fi + + if test "x$enable_decoder_lzma1" = xyes; then + COND_DECODER_LZMA1_TRUE= + COND_DECODER_LZMA1_FALSE='#' +else + COND_DECODER_LZMA1_TRUE='#' + COND_DECODER_LZMA1_FALSE= +fi + + if test "x$enable_filter_lzma2" = xyes; then + COND_FILTER_LZMA2_TRUE= + COND_FILTER_LZMA2_FALSE='#' +else + COND_FILTER_LZMA2_TRUE='#' + COND_FILTER_LZMA2_FALSE= +fi + + if test "x$enable_encoder_lzma2" = xyes; then + COND_ENCODER_LZMA2_TRUE= + COND_ENCODER_LZMA2_FALSE='#' +else + COND_ENCODER_LZMA2_TRUE='#' + COND_ENCODER_LZMA2_FALSE= +fi + + if test "x$enable_decoder_lzma2" = xyes; then + COND_DECODER_LZMA2_TRUE= + COND_DECODER_LZMA2_FALSE='#' +else + COND_DECODER_LZMA2_TRUE='#' + COND_DECODER_LZMA2_FALSE= +fi + + if test "x$enable_filter_subblock" = xyes; then + COND_FILTER_SUBBLOCK_TRUE= + COND_FILTER_SUBBLOCK_FALSE='#' +else + COND_FILTER_SUBBLOCK_TRUE='#' + COND_FILTER_SUBBLOCK_FALSE= +fi + + if test "x$enable_encoder_subblock" = xyes; then + COND_ENCODER_SUBBLOCK_TRUE= + COND_ENCODER_SUBBLOCK_FALSE='#' +else + COND_ENCODER_SUBBLOCK_TRUE='#' + COND_ENCODER_SUBBLOCK_FALSE= +fi + + if test "x$enable_decoder_subblock" = xyes; then + COND_DECODER_SUBBLOCK_TRUE= + COND_DECODER_SUBBLOCK_FALSE='#' +else + COND_DECODER_SUBBLOCK_TRUE='#' + COND_DECODER_SUBBLOCK_FALSE= +fi + + if test "x$enable_filter_delta" = xyes; then + COND_FILTER_DELTA_TRUE= + COND_FILTER_DELTA_FALSE='#' +else + COND_FILTER_DELTA_TRUE='#' + COND_FILTER_DELTA_FALSE= +fi + + if test "x$enable_encoder_delta" = xyes; then + COND_ENCODER_DELTA_TRUE= + COND_ENCODER_DELTA_FALSE='#' +else + COND_ENCODER_DELTA_TRUE='#' + COND_ENCODER_DELTA_FALSE= +fi + + if test "x$enable_decoder_delta" = xyes; then + COND_DECODER_DELTA_TRUE= + COND_DECODER_DELTA_FALSE='#' +else + COND_DECODER_DELTA_TRUE='#' + COND_DECODER_DELTA_FALSE= +fi + + if test "x$enable_filter_x86" = xyes; then + COND_FILTER_X86_TRUE= + COND_FILTER_X86_FALSE='#' +else + COND_FILTER_X86_TRUE='#' + COND_FILTER_X86_FALSE= +fi + + if test "x$enable_encoder_x86" = xyes; then + COND_ENCODER_X86_TRUE= + COND_ENCODER_X86_FALSE='#' +else + COND_ENCODER_X86_TRUE='#' + COND_ENCODER_X86_FALSE= +fi + + if test "x$enable_decoder_x86" = xyes; then + COND_DECODER_X86_TRUE= + COND_DECODER_X86_FALSE='#' +else + COND_DECODER_X86_TRUE='#' + COND_DECODER_X86_FALSE= +fi + + if test "x$enable_filter_powerpc" = xyes; then + COND_FILTER_POWERPC_TRUE= + COND_FILTER_POWERPC_FALSE='#' +else + COND_FILTER_POWERPC_TRUE='#' + COND_FILTER_POWERPC_FALSE= +fi + + if test "x$enable_encoder_powerpc" = xyes; then + COND_ENCODER_POWERPC_TRUE= + COND_ENCODER_POWERPC_FALSE='#' +else + COND_ENCODER_POWERPC_TRUE='#' + COND_ENCODER_POWERPC_FALSE= +fi + + if test "x$enable_decoder_powerpc" = xyes; then + COND_DECODER_POWERPC_TRUE= + COND_DECODER_POWERPC_FALSE='#' +else + COND_DECODER_POWERPC_TRUE='#' + COND_DECODER_POWERPC_FALSE= +fi + + if test "x$enable_filter_ia64" = xyes; then + COND_FILTER_IA64_TRUE= + COND_FILTER_IA64_FALSE='#' +else + COND_FILTER_IA64_TRUE='#' + COND_FILTER_IA64_FALSE= +fi + + if test "x$enable_encoder_ia64" = xyes; then + COND_ENCODER_IA64_TRUE= + COND_ENCODER_IA64_FALSE='#' +else + COND_ENCODER_IA64_TRUE='#' + COND_ENCODER_IA64_FALSE= +fi + + if test "x$enable_decoder_ia64" = xyes; then + COND_DECODER_IA64_TRUE= + COND_DECODER_IA64_FALSE='#' +else + COND_DECODER_IA64_TRUE='#' + COND_DECODER_IA64_FALSE= +fi + + if test "x$enable_filter_arm" = xyes; then + COND_FILTER_ARM_TRUE= + COND_FILTER_ARM_FALSE='#' +else + COND_FILTER_ARM_TRUE='#' + COND_FILTER_ARM_FALSE= +fi + + if test "x$enable_encoder_arm" = xyes; then + COND_ENCODER_ARM_TRUE= + COND_ENCODER_ARM_FALSE='#' +else + COND_ENCODER_ARM_TRUE='#' + COND_ENCODER_ARM_FALSE= +fi + + if test "x$enable_decoder_arm" = xyes; then + COND_DECODER_ARM_TRUE= + COND_DECODER_ARM_FALSE='#' +else + COND_DECODER_ARM_TRUE='#' + COND_DECODER_ARM_FALSE= +fi + + if test "x$enable_filter_armthumb" = xyes; then + COND_FILTER_ARMTHUMB_TRUE= + COND_FILTER_ARMTHUMB_FALSE='#' +else + COND_FILTER_ARMTHUMB_TRUE='#' + COND_FILTER_ARMTHUMB_FALSE= +fi + + if test "x$enable_encoder_armthumb" = xyes; then + COND_ENCODER_ARMTHUMB_TRUE= + COND_ENCODER_ARMTHUMB_FALSE='#' +else + COND_ENCODER_ARMTHUMB_TRUE='#' + COND_ENCODER_ARMTHUMB_FALSE= +fi + + if test "x$enable_decoder_armthumb" = xyes; then + COND_DECODER_ARMTHUMB_TRUE= + COND_DECODER_ARMTHUMB_FALSE='#' +else + COND_DECODER_ARMTHUMB_TRUE='#' + COND_DECODER_ARMTHUMB_FALSE= +fi + + if test "x$enable_filter_sparc" = xyes; then + COND_FILTER_SPARC_TRUE= + COND_FILTER_SPARC_FALSE='#' +else + COND_FILTER_SPARC_TRUE='#' + COND_FILTER_SPARC_FALSE= +fi + + if test "x$enable_encoder_sparc" = xyes; then + COND_ENCODER_SPARC_TRUE= + COND_ENCODER_SPARC_FALSE='#' +else + COND_ENCODER_SPARC_TRUE='#' + COND_ENCODER_SPARC_FALSE= +fi + + if test "x$enable_decoder_sparc" = xyes; then + COND_DECODER_SPARC_TRUE= + COND_DECODER_SPARC_FALSE='#' +else + COND_DECODER_SPARC_TRUE='#' + COND_DECODER_SPARC_FALSE= +fi + + +# The so called "simple filters" share common code. +enable_filter_simple=no +enable_encoder_simple=no +enable_decoder_simple=no +test "x$enable_filter_x86" = xyes && enable_filter_simple=yes +test "x$enable_encoder_x86" = xyes && enable_encoder_simple=yes +test "x$enable_decoder_x86" = xyes && enable_decoder_simple=yes +test "x$enable_filter_powerpc" = xyes && enable_filter_simple=yes +test "x$enable_encoder_powerpc" = xyes && enable_encoder_simple=yes +test "x$enable_decoder_powerpc" = xyes && enable_decoder_simple=yes +test "x$enable_filter_ia64" = xyes && enable_filter_simple=yes +test "x$enable_encoder_ia64" = xyes && enable_encoder_simple=yes +test "x$enable_decoder_ia64" = xyes && enable_decoder_simple=yes +test "x$enable_filter_arm" = xyes && enable_filter_simple=yes +test "x$enable_encoder_arm" = xyes && enable_encoder_simple=yes +test "x$enable_decoder_arm" = xyes && enable_decoder_simple=yes +test "x$enable_filter_armthumb" = xyes && enable_filter_simple=yes +test "x$enable_encoder_armthumb" = xyes && enable_encoder_simple=yes +test "x$enable_decoder_armthumb" = xyes && enable_decoder_simple=yes +test "x$enable_filter_sparc" = xyes && enable_filter_simple=yes +test "x$enable_encoder_sparc" = xyes && enable_encoder_simple=yes +test "x$enable_decoder_sparc" = xyes && enable_decoder_simple=yes + if test "x$enable_filter_simple" = xyes; then + COND_FILTER_SIMPLE_TRUE= + COND_FILTER_SIMPLE_FALSE='#' +else + COND_FILTER_SIMPLE_TRUE='#' + COND_FILTER_SIMPLE_FALSE= +fi + + if test "x$enable_encoder_simple" = xyes; then + COND_ENCODER_SIMPLE_TRUE= + COND_ENCODER_SIMPLE_FALSE='#' +else + COND_ENCODER_SIMPLE_TRUE='#' + COND_ENCODER_SIMPLE_FALSE= +fi + + if test "x$enable_decoder_simple" = xyes; then + COND_DECODER_SIMPLE_TRUE= + COND_DECODER_SIMPLE_FALSE='#' +else + COND_DECODER_SIMPLE_TRUE='#' + COND_DECODER_SIMPLE_FALSE= +fi + + +# LZ-based filters share common code. +enable_filter_lz=no +enable_encoder_lz=no +enable_decoder_lz=no +test "x$enable_filter_lzma1" = xyes && enable_filter_lz=yes +test "x$enable_encoder_lzma1" = xyes && enable_encoder_lz=yes +test "x$enable_decoder_lzma1" = xyes && enable_decoder_lz=yes +test "x$enable_filter_lzma2" = xyes && enable_filter_lz=yes +test "x$enable_encoder_lzma2" = xyes && enable_encoder_lz=yes +test "x$enable_decoder_lzma2" = xyes && enable_decoder_lz=yes + if test "x$enable_filter_lz" = xyes; then + COND_FILTER_LZ_TRUE= + COND_FILTER_LZ_FALSE='#' +else + COND_FILTER_LZ_TRUE='#' + COND_FILTER_LZ_FALSE= +fi + + if test "x$enable_encoder_lz" = xyes; then + COND_ENCODER_LZ_TRUE= + COND_ENCODER_LZ_FALSE='#' +else + COND_ENCODER_LZ_TRUE='#' + COND_ENCODER_LZ_FALSE= +fi + + if test "x$enable_decoder_lz" = xyes; then + COND_DECODER_LZ_TRUE= + COND_DECODER_LZ_FALSE='#' +else + COND_DECODER_LZ_TRUE='#' + COND_DECODER_LZ_FALSE= +fi + + + +################# +# Match finders # +################# + + + +enable_match_finder_hc3=no +enable_match_finder_hc4=no +enable_match_finder_bt2=no +enable_match_finder_bt3=no +enable_match_finder_bt4=no + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which match finders to build" >&5 +$as_echo_n "checking which match finders to build... " >&6; } +# Check whether --enable-match-finders was given. +if test "${enable_match_finders+set}" = set; then : + enableval=$enable_match_finders; +else + enable_match_finders=hc3,hc4,bt2,bt3,bt4 +fi + +enable_match_finders=`echo "$enable_match_finders" | sed 's/,/ /g'` +if test "x$enable_encoder_lz" = xyes ; then + for arg in $enable_match_finders + do + case $arg in + hc3) + enable_match_finder_hc3=yes + +$as_echo "#define HAVE_MF_HC3 1" >>confdefs.h + + ;; + hc4) + enable_match_finder_hc4=yes + +$as_echo "#define HAVE_MF_HC4 1" >>confdefs.h + + ;; + bt2) + enable_match_finder_bt2=yes + +$as_echo "#define HAVE_MF_BT2 1" >>confdefs.h + + ;; + bt3) + enable_match_finder_bt3=yes + +$as_echo "#define HAVE_MF_BT3 1" >>confdefs.h + + ;; + bt4) + enable_match_finder_bt4=yes + +$as_echo "#define HAVE_MF_BT4 1" >>confdefs.h + + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + as_fn_error "unknown match finder: $arg" "$LINENO" 5 + ;; + esac + done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_match_finders" >&5 +$as_echo "$enable_match_finders" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none because not building any LZ-based encoder)" >&5 +$as_echo "(none because not building any LZ-based encoder)" >&6; } +fi + + +#################### +# Integrity checks # +#################### + + + +enable_check_lzma1=no +enable_check_lzma2=no +enable_check_subblock=no +enable_check_delta=no +enable_check_x86=no +enable_check_powerpc=no +enable_check_ia64=no +enable_check_arm=no +enable_check_armthumb=no +enable_check_sparc=no + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which integrity checks to build" >&5 +$as_echo_n "checking which integrity checks to build... " >&6; } +# Check whether --enable-checks was given. +if test "${enable_checks+set}" = set; then : + enableval=$enable_checks; +else + enable_checks=crc32,crc64,sha256 +fi + +enable_checks=`echo "$enable_checks" | sed 's/,/ /g'` +if test "x$enable_checks" = xno || test "x$enable_checks" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none)" >&5 +$as_echo "(none)" >&6; } +else + for arg in $enable_checks + do + case $arg in + crc32) + enable_check_crc32=yes + +$as_echo "#define HAVE_CHECK_CRC32 1" >>confdefs.h + + ;; + crc64) + enable_check_crc64=yes + +$as_echo "#define HAVE_CHECK_CRC64 1" >>confdefs.h + + ;; + sha256) + enable_check_sha256=yes + +$as_echo "#define HAVE_CHECK_SHA256 1" >>confdefs.h + + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + as_fn_error "unknown integrity check: $arg" "$LINENO" 5 + ;; + esac + done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_checks" >&5 +$as_echo "$enable_checks" >&6; } +fi +if test "x$enable_checks_crc32" = xno ; then + as_fn_error "For now, the CRC32 check must always be enabled." "$LINENO" 5 +fi + + if test "x$enable_check_crc32" = xyes; then + COND_CHECK_CRC32_TRUE= + COND_CHECK_CRC32_FALSE='#' +else + COND_CHECK_CRC32_TRUE='#' + COND_CHECK_CRC32_FALSE= +fi + + if test "x$enable_check_crc64" = xyes; then + COND_CHECK_CRC64_TRUE= + COND_CHECK_CRC64_FALSE='#' +else + COND_CHECK_CRC64_TRUE='#' + COND_CHECK_CRC64_FALSE= +fi + + if test "x$enable_check_sha256" = xyes; then + COND_CHECK_SHA256_TRUE= + COND_CHECK_SHA256_FALSE='#' +else + COND_CHECK_SHA256_TRUE='#' + COND_CHECK_SHA256_FALSE= +fi + + + +########################### +# Assembler optimizations # +########################### + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if assembler optimizations should be used" >&5 +$as_echo_n "checking if assembler optimizations should be used... " >&6; } +# Check whether --enable-assembler was given. +if test "${enable_assembler+set}" = set; then : + enableval=$enable_assembler; +else + enable_assembler=yes +fi + +if test "x$enable_assembler" = xyes; then + case $host_cpu in + i?86) enable_assembler=x86 ;; + x86_64) enable_assembler=x86_64 ;; + *) enable_assembler=no ;; + esac +fi +case $enable_assembler in + x86) + +$as_echo "#define HAVE_ASM_X86 1" >>confdefs.h + + ;; + x86_64) + +$as_echo "#define HAVE_ASM_X86_64 1" >>confdefs.h + + ;; + no) + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + as_fn_error "--enable-assembler accepts only \`yes', \`no', \`x86', or \`x86_64'." "$LINENO" 5 + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_assembler" >&5 +$as_echo "$enable_assembler" >&6; } + if test "x$enable_assembler" = xx86; then + COND_ASM_X86_TRUE= + COND_ASM_X86_FALSE='#' +else + COND_ASM_X86_TRUE='#' + COND_ASM_X86_FALSE= +fi + + if test "x$enable_assembler" = xx86_64; then + COND_ASM_X86_64_TRUE= + COND_ASM_X86_64_FALSE='#' +else + COND_ASM_X86_64_TRUE='#' + COND_ASM_X86_64_FALSE= +fi + + + +################################ +# Fast unaligned memory access # +################################ + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if unaligned memory access should be used" >&5 +$as_echo_n "checking if unaligned memory access should be used... " >&6; } +# Check whether --enable-unaligned-access was given. +if test "${enable_unaligned_access+set}" = set; then : + enableval=$enable_unaligned_access; +else + enable_unaligned_access=auto +fi + +if test "x$enable_unaligned_access" = xauto ; then + case $host_cpu in + i?86|x86_64|powerpc|powerpc64) + enable_unaligned_access=yes + ;; + *) + enable_unaligned_access=no + ;; + esac +fi +if test "x$enable_unaligned_access" = xyes ; then + +$as_echo "#define HAVE_FAST_UNALIGNED_ACCESS 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +##################### +# Size optimization # +##################### + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if small size is preferred over speed" >&5 +$as_echo_n "checking if small size is preferred over speed... " >&6; } +# Check whether --enable-small was given. +if test "${enable_small+set}" = set; then : + enableval=$enable_small; +else + enable_small=no +fi + +if test "x$enable_small" = xyes; then + +$as_echo "#define HAVE_SMALL 1" >>confdefs.h + +elif test "x$enable_small" != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + as_fn_error "--enable-small accepts only \`yes' or \`no'" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_small" >&5 +$as_echo "$enable_small" >&6; } + if test "x$enable_small" = xyes; then + COND_SMALL_TRUE= + COND_SMALL_FALSE='#' +else + COND_SMALL_TRUE='#' + COND_SMALL_FALSE= +fi + + + +############# +# Threading # +############# + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if threading support is wanted" >&5 +$as_echo_n "checking if threading support is wanted... " >&6; } +# Check whether --enable-threads was given. +if test "${enable_threads+set}" = set; then : + enableval=$enable_threads; +else + enable_threads=yes +fi + +if test "x$enable_threads" != xyes && test "x$enable_threads" != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + as_fn_error "--enable-threads accepts only \`yes' or \`no'" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_threads" >&5 +$as_echo "$enable_threads" >&6; } +# We use the actual result a little later. + + +############################################ +# xz/xzdec/lzmadec linkage against liblzma # +############################################ + +# Link the xz, xzdec, and lzmadec command line tools against static liblzma +# unless using --enable-dynamic. Using static liblzma gives a little bit +# faster executable on x86, because no register is wasted for PIC. We also +# have one dependency less, which allows users to more freely copy the xz +# binary to other boxes. However, I wouldn't be surprised if distro +# maintainers still prefer dynamic linking, so let's make it easy for them. + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how programs should be linked against liblzma" >&5 +$as_echo_n "checking how programs should be linked against liblzma... " >&6; } +# Check whether --enable-dynamic was given. +if test "${enable_dynamic+set}" = set; then : + enableval=$enable_dynamic; +else + enable_dynamic=mixed +fi + +case $enable_dynamic in + mixed) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: mixed (some dynamically, some statically)" >&5 +$as_echo "mixed (some dynamically, some statically)" >&6; } + ;; + yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: dynamically" >&5 +$as_echo "dynamically" >&6; } + ;; + no) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: statically" >&5 +$as_echo "statically" >&6; } + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + as_fn_error "--enable-dynamic accepts only \`mixed', \`yes', or \`no'" "$LINENO" 5 + ;; +esac +# We use the actual results later, because we don't know yet +# if --disable-shared or --disable-static was used. + + +############################################################################### +# Checks for programs. +############################################################################### + +echo + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a shell that conforms to POSIX" >&5 +$as_echo_n "checking for a shell that conforms to POSIX... " >&6; } +if test "${gl_cv_posix_shell+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + gl_test_posix_shell_script=' + func_return () { + (exit $1) + } + func_success () { + func_return 0 + } + func_failure () { + func_return 1 + } + func_ret_success () { + return 0 + } + func_ret_failure () { + return 1 + } + subshell_umask_sanity () { + (umask 22; (umask 0); test $(umask) -eq 22) + } + test "$(echo foo)" = foo && + func_success && + ! func_failure && + func_ret_success && + ! func_ret_failure && + (set x && func_ret_success y && test x = "$1") && + subshell_umask_sanity + ' + for gl_cv_posix_shell in \ + "$CONFIG_SHELL" "$SHELL" /bin/sh /bin/bash /bin/ksh /bin/sh5 no; do + case $gl_cv_posix_shell in + /*) + "$gl_cv_posix_shell" -c "$gl_test_posix_shell_script" 2>/dev/null \ + && break;; + esac + done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_posix_shell" >&5 +$as_echo "$gl_cv_posix_shell" >&6; } + + if test "$gl_cv_posix_shell" != no; then + POSIX_SHELL=$gl_cv_posix_shell + PREFERABLY_POSIX_SHELL=$POSIX_SHELL + else + POSIX_SHELL= + PREFERABLY_POSIX_SHELL=/bin/sh + fi + + + +if test -z "$POSIX_SHELL" ; then + as_fn_error "No POSIX conforming shell (sh) was found." "$LINENO" 5 +fi + +echo +echo "Initializing Automake:" + +am__api_version='1.11' + +# 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: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # 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 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. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +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=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# 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 + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +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;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# 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. +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. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + 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 + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" + fi +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. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='xz' + VERSION='4.999.9beta' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# 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 + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +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 +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + rm -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +if test -z "$ac_file"; then : + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } +fi +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* 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); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +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 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # 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'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > 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 + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # 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 + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # 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 + break + fi + ;; + msvisualcpp | msvcmsys) + # 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} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if test "${ac_cv_prog_cc_c99+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +#include + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + +fi + + +if test x$ac_cv_prog_cc_c99 = xno ; then + as_fn_error "No C99 compiler was found." "$LINENO" 5 +fi + +if test "x$CC" != xcc; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } +else + { $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; } +fi +set dummy $CC; ac_cc=`$as_echo "$2" | + sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; 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. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' +rm -f conftest2.* +if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; +then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.$ac_ext >&5' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' + rm -f conftest2.* + if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; + then + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f core conftest* + +fi +if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h + +fi + +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != 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 + + +# By default we simply use the C compiler to build assembly code. + +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS + + + +depcc="$CCAS" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # 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'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CCAS_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > 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 + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # 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 + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # 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 + break + fi + ;; + msvisualcpp | msvcmsys) + # 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} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CCAS_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CCAS_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } +CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then + am__fastdepCCAS_TRUE= + am__fastdepCCAS_FALSE='#' +else + am__fastdepCCAS_TRUE='#' + am__fastdepCCAS_FALSE= +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } +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 + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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 +# 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 +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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 +# 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 +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = x""yes; then : + MINIX=yes +else + MINIX= +fi + + + if test "$MINIX" = yes; then + +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + + +$as_echo "#define _MINIX 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if test "${ac_cv_safe_to_define___extensions__+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h + + + +if test "x$enable_threads" = xyes; then + echo + echo "Threading support:" + + + +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 + +acx_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 +$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_join (); +int +main () +{ +return pthread_join (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + acx_pthread_ok=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 +$as_echo "$acx_pthread_ok" >&6; } + if test x"$acx_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case "${host_cpu}-${host_os}" in + *solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" + ;; +esac + +if test x"$acx_pthread_ok" = xno; then +for flag in $acx_pthread_flags; do + + case $flag in + none) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 +$as_echo_n "checking whether pthreads work without any flags... " >&6; } + ;; + + -*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 +$as_echo_n "checking whether pthreads work with $flag... " >&6; } + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + # Extract the first word of "pthread-config", so it can be a program name with args. +set dummy pthread-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_acx_pthread_config+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$acx_pthread_config"; then + ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_acx_pthread_config="yes" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" +fi +fi +acx_pthread_config=$ac_cv_prog_acx_pthread_config +if test -n "$acx_pthread_config"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5 +$as_echo "$acx_pthread_config" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test x"$acx_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 +$as_echo_n "checking for the pthreads library -l$flag... " >&6; } + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + acx_pthread_ok=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 +$as_echo "$acx_pthread_ok" >&6; } + if test "x$acx_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$acx_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 +$as_echo_n "checking for joinable pthread attribute... " >&6; } + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +int attr=$attr; return attr; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + attr_name=$attr; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 +$as_echo "$attr_name" >&6; } + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + +cat >>confdefs.h <<_ACEOF +#define PTHREAD_CREATE_JOINABLE $attr_name +_ACEOF + + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 +$as_echo_n "checking if more special flags are required for pthreads... " >&6; } + flag=no + case "${host_cpu}-${host_os}" in + *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; + *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 +$as_echo "${flag}" >&6; } + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + # More AIX lossage: must compile with xlc_r or cc_r + if test x"$GCC" != xyes; then + for ac_prog in xlc_r cc_r +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PTHREAD_CC"; then + ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_PTHREAD_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PTHREAD_CC=$ac_cv_prog_PTHREAD_CC +if test -n "$PTHREAD_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 +$as_echo "$PTHREAD_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PTHREAD_CC" && break +done +test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" + + else + PTHREAD_CC=$CC + fi +else + PTHREAD_CC="$CC" +fi + + + + + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$acx_pthread_ok" = xyes; then + +$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h + + : +else + acx_pthread_ok=no + +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 + + + LIBS="$LIBS $PTHREAD_LIBS" + AM_CFLAGS="$AM_CFLAGS $PTHREAD_CFLAGS" + CC="$PTHREAD_CC" +fi + +echo +echo "Initializing Libtool:" + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.6' +macro_revision='1.3012' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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 +# 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 +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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 +# 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 +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$ac_tool_prefix"; then + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:7302: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:7305: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:7308: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + 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` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$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 + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +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. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 8499 "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + 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 + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + 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 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +# Set options +enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DLLTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + 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 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; +esac + +test -z "$AS" && AS=as + + + + + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + enable_dlopen=no + + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +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 + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:10059: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:10063: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:10398: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:10402: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:10503: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:10507: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:10558: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:10562: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo(void) {} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + 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' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + 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 + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + 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 + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + 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' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + 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' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + 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 + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + 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=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + 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 + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + 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 + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 12925 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 13021 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +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 + +CC="$lt_save_CC" + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. +set dummy ${ac_tool_prefix}windres; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RC"; then + ac_cv_prog_RC="$RC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_RC="${ac_tool_prefix}windres" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RC=$ac_cv_prog_RC +if test -n "$RC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 +$as_echo "$RC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RC"; then + ac_ct_RC=$RC + # Extract the first word of "windres", so it can be a program name with args. +set dummy windres; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RC"; then + ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_prog_ac_ct_RC="windres" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RC=$ac_cv_prog_ac_ct_RC +if test -n "$ac_ct_RC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 +$as_echo "$ac_ct_RC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RC" = x; then + RC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RC=$ac_ct_RC + fi +else + RC="$ac_cv_prog_RC" +fi + + + + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +objext_RC=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +compiler=$CC +compiler_RC=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + +lt_cv_prog_compiler_c_o_RC=yes + +if test -n "$compiler"; then + : + + + +fi + +GCC=$lt_save_GCC +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 + +CC="$lt_save_CC" + + +# This is a bit wrong since it is possible to request that only some libs +# are built as shared. Using that feature isn't so common though, and this +# breaks only on Windows (at least for now) if the user enables only some +# libs as shared. + if test "x$enable_shared" != xno; then + COND_SHARED_TRUE= + COND_SHARED_FALSE='#' +else + COND_SHARED_TRUE='#' + COND_SHARED_FALSE= +fi + + + +############################################################################### +# Checks for libraries. +############################################################################### + +echo +echo "Initializing gettext:" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } + # Check whether --enable-nls was given. +if test "${enable_nls+set}" = set; then : + enableval=$enable_nls; USE_NLS=$enableval +else + USE_NLS=yes +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + + + + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MSGFMT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGFMT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_GMSGFMT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +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 + ac_cv_path_GMSGFMT="$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 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT +if test -n "$GMSGFMT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac + + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_XGETTEXT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case "$XGETTEXT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + rm -f messages.po + + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MSGMERGE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGMERGE" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then + ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" + ;; +esac +fi +MSGMERGE="$ac_cv_path_MSGMERGE" +if test "$MSGMERGE" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$localedir" || localedir='${datadir}/locale' + + + ac_config_commands="$ac_config_commands po-directories" + + + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 +$as_echo_n "checking for ld used by GCC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${acl_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$acl_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${acl_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$acl_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if test "${acl_cv_rpath+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then : + enableval=$enable_rpath; : +else + enable_rpath=yes +fi + + + + acl_libdirstem=lib + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then : + withval=$with_libiconv_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi + +fi + + LIBICONV= + LTLIBICONV= + INCICONV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='iconv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" \ + && { test -f "$additional_libdir/lib$name.$shlibext" \ + || { test "$shlibext" = dll \ + && test -f "$additional_libdir/lib$name.dll.a"; }; }; then + found_dir="$additional_libdir" + if test -f "$additional_libdir/lib$name.$shlibext"; then + found_so="$additional_libdir/lib$name.$shlibext" + else + found_so="$additional_libdir/lib$name.dll.a" + fi + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" \ + && { test -f "$dir/lib$name.$shlibext" \ + || { test "$shlibext" = dll \ + && test -f "$dir/lib$name.dll.a"; }; }; then + found_dir="$dir" + if test -f "$dir/lib$name.$shlibext"; then + found_so="$dir/lib$name.$shlibext" + else + found_so="$dir/lib$name.dll.a" + fi + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$hardcode_direct" = yes; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" + ;; + esac + done + fi + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" + done + fi + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } +if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +CFPreferencesCopyAppValue(NULL, NULL) + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFPreferencesCopyAppValue=yes +else + gt_cv_func_CFPreferencesCopyAppValue=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + +$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 +$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } +if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +CFLocaleCopyCurrent(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFLocaleCopyCurrent=yes +else + gt_cv_func_CFLocaleCopyCurrent=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 +$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + +$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h + + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + + + + + + + LIBINTL= + LTLIBINTL= + POSUB= + + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + + + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 +$as_echo_n "checking for GNU gettext in libc... " >&6; } +if { as_var=$gt_func_gnugettext_libc; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libc=yes" +else + eval "$gt_func_gnugettext_libc=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$gt_func_gnugettext_libc + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 +$as_echo_n "checking for iconv... " >&6; } +if test "${am_cv_func_iconv+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$am_save_LIBS" + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 +$as_echo "$am_cv_func_iconv" >&6; } + if test "$am_cv_func_iconv" = yes; then + +$as_echo "#define HAVE_ICONV 1" >>confdefs.h + + fi + if test "$am_cv_lib_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 +$as_echo_n "checking how to link with libiconv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 +$as_echo "$LIBICONV" >&6; } + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libintl-prefix was given. +if test "${with_libintl_prefix+set}" = set; then : + withval=$with_libintl_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi + +fi + + LIBINTL= + LTLIBINTL= + INCINTL= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='intl ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" \ + && { test -f "$additional_libdir/lib$name.$shlibext" \ + || { test "$shlibext" = dll \ + && test -f "$additional_libdir/lib$name.dll.a"; }; }; then + found_dir="$additional_libdir" + if test -f "$additional_libdir/lib$name.$shlibext"; then + found_so="$additional_libdir/lib$name.$shlibext" + else + found_so="$additional_libdir/lib$name.dll.a" + fi + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" \ + && { test -f "$dir/lib$name.$shlibext" \ + || { test "$shlibext" = dll \ + && test -f "$dir/lib$name.dll.a"; }; }; then + found_dir="$dir" + if test -f "$dir/lib$name.$shlibext"; then + found_so="$dir/lib$name.$shlibext" + else + found_so="$dir/lib$name.dll.a" + fi + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$hardcode_direct" = yes; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" + ;; + esac + done + fi + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" + done + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 +$as_echo_n "checking for GNU gettext in libintl... " >&6; } +if { as_var=$gt_func_gnugettext_libintl; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libintl=yes" +else + eval "$gt_func_gnugettext_libintl=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS" +fi +eval ac_res=\$$gt_func_gnugettext_libintl + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + fi + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + +$as_echo "#define ENABLE_NLS 1" >>confdefs.h + + else + USE_NLS=no + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 +$as_echo_n "checking whether to use NLS... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + if test "$USE_NLS" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 +$as_echo_n "checking where the gettext function comes from... " >&6; } + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 +$as_echo "$gt_source" >&6; } + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 +$as_echo_n "checking how to link with libintl... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 +$as_echo "$LIBINTL" >&6; } + + for element in $INCINTL; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + fi + + +$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h + + +$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h + + fi + + POSUB=po + fi + + + + INTLLIBS="$LIBINTL" + + + + + + + +############################################################################### +# Checks for header files. +############################################################################### + +echo +echo "System headers and functions:" + +# There is currently no workarounds in this package if some of +# these headers are missing. +for ac_header in fcntl.h limits.h sys/time.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else + as_fn_error "Required header file(s) are missing." "$LINENO" 5 +fi + +done + + +# If any of these headers are missing, things should still work correctly: +for ac_header in sys/param.h sys/sysctl.h byteswap.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " +#ifdef HAVE_SYS_PARAM_H +# include +#endif + +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +# Even if we have byteswap.h, we may lack the specific macros/functions. +if test x$ac_cv_header_byteswap_h = xyes ; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if bswap_16 is available" >&5 +$as_echo_n "checking if bswap_16 is available... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +int +main(void) +{ + bswap_16(42); + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + +$as_echo "#define HAVE_BSWAP_16 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if bswap_32 is available" >&5 +$as_echo_n "checking if bswap_32 is available... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +int +main(void) +{ + bswap_32(42); + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + +$as_echo "#define HAVE_BSWAP_32 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if bswap_64 is available" >&5 +$as_echo_n "checking if bswap_64 is available... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +int +main(void) +{ + bswap_64(42); + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + +$as_echo "#define HAVE_BSWAP_64 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + fi + + +############################################################################### +# Checks for typedefs, structures, and compiler characteristics. +############################################################################### + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if test "${ac_cv_header_stdbool_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifndef bool + "error: bool is not defined" +#endif +#ifndef false + "error: false is not defined" +#endif +#if false + "error: false is not 0" +#endif +#ifndef true + "error: true is not defined" +#endif +#if true != 1 + "error: true is not 1" +#endif +#ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" +#endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + bool e = &s; + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; +# if defined __xlc__ || defined __GNUC__ + /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 + reported by James Lemley on 2005-10-05; see + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + This test is not quite right, since xlc is allowed to + reject this program, as the initializer for xlcbug is + not one of the forms that C requires support for. + However, doing the test right would require a runtime + test, and that would make cross-compilation harder. + Let us hope that IBM fixes the xlc bug, and also adds + support for this kind of constant expression. In the + meantime, this test will reject xlc, which is OK, since + our stdbool.h substitute should suffice. We also test + this with GCC, where it should work, to detect more + quickly whether someone messes up the test in the + future. */ + char digs[] = "0123456789"; + int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); +# endif + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + +int +main () +{ + + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdbool_h=yes +else + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } +ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = x""yes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF + + +fi + +if test $ac_cv_header_stdbool_h = yes; then + +$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h + +fi + + +ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" +case $ac_cv_c_uint8_t in #( + no|yes) ;; #( + *) + +$as_echo "#define _UINT8_T 1" >>confdefs.h + + +cat >>confdefs.h <<_ACEOF +#define uint8_t $ac_cv_c_uint8_t +_ACEOF +;; + esac + +ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" +case $ac_cv_c_uint16_t in #( + no|yes) ;; #( + *) + + +cat >>confdefs.h <<_ACEOF +#define uint16_t $ac_cv_c_uint16_t +_ACEOF +;; + esac + +ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" +case $ac_cv_c_int32_t in #( + no|yes) ;; #( + *) + +cat >>confdefs.h <<_ACEOF +#define int32_t $ac_cv_c_int32_t +_ACEOF +;; +esac + +ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" +case $ac_cv_c_uint32_t in #( + no|yes) ;; #( + *) + +$as_echo "#define _UINT32_T 1" >>confdefs.h + + +cat >>confdefs.h <<_ACEOF +#define uint32_t $ac_cv_c_uint32_t +_ACEOF +;; + esac + +ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" +case $ac_cv_c_int64_t in #( + no|yes) ;; #( + *) + +cat >>confdefs.h <<_ACEOF +#define int64_t $ac_cv_c_int64_t +_ACEOF +;; +esac + +ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" +case $ac_cv_c_uint64_t in #( + no|yes) ;; #( + *) + +$as_echo "#define _UINT64_T 1" >>confdefs.h + + +cat >>confdefs.h <<_ACEOF +#define uint64_t $ac_cv_c_uint64_t +_ACEOF +;; + esac + + + ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default" +if test "x$ac_cv_type_uintptr_t" = x""yes; then : + +$as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h + +else + for ac_type in 'unsigned int' 'unsigned long int' \ + 'unsigned long long int'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +cat >>confdefs.h <<_ACEOF +#define uintptr_t $ac_type +_ACEOF + + ac_type= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test -z "$ac_type" && break + done +fi + + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 +$as_echo_n "checking size of size_t... " >&6; } +if test "${ac_cv_sizeof_size_t+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_size_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (size_t) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_size_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 +$as_echo "$ac_cv_sizeof_size_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t +_ACEOF + + + +# The command line tool can copy high resolution timestamps if such +# information is availabe in struct stat. Otherwise one second accuracy +# is used. +ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_struct_stat_st_atim_tv_nsec" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = x""yes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = x""yes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_atimensec" = x""yes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_uatime" "ac_cv_member_struct_stat_st_uatime" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_uatime" = x""yes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_UATIME 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = x""yes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1 +_ACEOF + + +fi + + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if test "${ac_cv_sys_largefile_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if test "${ac_cv_sys_file_offset_bits+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if test "${ac_cv_sys_large_files+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + as_fn_error "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + + + +############################################################################### +# Checks for library functions. +############################################################################### + +# Gnulib replacements as needed + + if test -z "$GETOPT_H"; then + for ac_header in getopt.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" +if test "x$ac_cv_header_getopt_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETOPT_H 1 +_ACEOF + +else + GETOPT_H=getopt.h +fi + +done + + fi + + if test -z "$GETOPT_H"; then + for ac_func in getopt_long +do : + ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long" +if test "x$ac_cv_func_getopt_long" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETOPT_LONG 1 +_ACEOF + +else + GETOPT_H=getopt.h +fi +done + + fi + + if test -z "$GETOPT_H"; then + ac_fn_c_check_decl "$LINENO" "optreset" "ac_cv_have_decl_optreset" "#include +" +if test "x$ac_cv_have_decl_optreset" = x""yes; then : + +$as_echo "#define HAVE_OPTRESET 1" >>confdefs.h + +fi + + fi + + + + + if test -n "$GETOPT_H"; then : + + case " $LIBOBJS " in + *" getopt.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS getopt.$ac_objext" + ;; +esac + + case " $LIBOBJS " in + *" getopt1.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS getopt1.$ac_objext" + ;; +esac + + + GETOPT_H=getopt.h + +$as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h + + + + +fi + + +# Find the best function to set timestamps. +for ac_func in futimens futimes futimesat utimes utime +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + break +fi +done + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to detect the amount of physical memory" >&5 +$as_echo_n "checking how to detect the amount of physical memory... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +int +main(void) +{ + long i; + i = sysconf(_SC_PAGESIZE); + i = sysconf(_SC_PHYS_PAGES); + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + +$as_echo "#define HAVE_PHYSMEM_SYSCONF 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: sysconf" >&5 +$as_echo "sysconf" >&6; } + +else + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef HAVE_SYS_PARAM_H +# include +#endif +#include +int +main(void) +{ + int name[2] = { CTL_HW, HW_PHYSMEM }; + unsigned long mem; + size_t mem_ptr_size = sizeof(mem); + sysctl(name, 2, &mem, &mem_ptr_size, NULL, NULL); + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + +$as_echo "#define HAVE_PHYSMEM_SYSCTL 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: sysctl" >&5 +$as_echo "sysctl" >&6; } + +else + +case $host_os in + linux*) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +int +main(void) +{ + struct sysinfo si; + sysinfo(&si); + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + +$as_echo "#define HAVE_PHYSMEM_SYSINFO 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: sysinfo" >&5 +$as_echo "sysinfo" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 +$as_echo "unknown" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 +$as_echo "unknown" >&6; } + ;; +esac + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to detect the number of available CPU cores" >&5 +$as_echo_n "checking how to detect the number of available CPU cores... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +int +main(void) +{ + long i; + i = sysconf(_SC_NPROCESSORS_ONLN); + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + +$as_echo "#define HAVE_CPUCORES_SYSCONF 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: sysconf" >&5 +$as_echo "sysconf" >&6; } + +else + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef HAVE_SYS_PARAM_H +# include +#endif +#include +int +main(void) +{ + int name[2] = { CTL_HW, HW_NCPU }; + int cpus; + size_t cpus_size = sizeof(cpus); + sysctl(name, 2, &cpus, &cpus_size, NULL, NULL); + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + +$as_echo "#define HAVE_CPUCORES_SYSCTL 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: sysctl" >&5 +$as_echo "sysctl" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 +$as_echo "unknown" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + + +############################################################################### +# If using GCC, set some additional AM_CFLAGS: +############################################################################### + +if test "$GCC" = yes ; then + echo + echo "GCC extensions:" +fi + +# Always do the visibility check but don't set AM_CFLAGS on Windows. +# This way things get set properly even on Windows. + + + CFLAG_VISIBILITY= + HAVE_VISIBILITY=0 + if test -n "$GCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 +$as_echo_n "checking for simple visibility declarations... " >&6; } + if test "${gl_cv_cc_visibility+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +extern __attribute__((__visibility__("hidden"))) int hiddenvar; + extern __attribute__((__visibility__("default"))) int exportedvar; + extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); + extern __attribute__((__visibility__("default"))) int exportedfunc (void); +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_cc_visibility=yes +else + gl_cv_cc_visibility=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_CFLAGS" +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 +$as_echo "$gl_cv_cc_visibility" >&6; } + if test $gl_cv_cc_visibility = yes; then + CFLAG_VISIBILITY="-fvisibility=hidden" + HAVE_VISIBILITY=1 + fi + fi + + + +cat >>confdefs.h <<_ACEOF +#define HAVE_VISIBILITY $HAVE_VISIBILITY +_ACEOF + + +if test -n "$CFLAG_VISIBILITY" && test "$is_w32" = no; then + AM_CFLAGS="$AM_CFLAGS $CFLAG_VISIBILITY" +fi + +if test "$GCC" = yes ; then + # Enable as much warnings as possible. These commented warnings won't + # work for this package though: + # * -Wunreachable-code breaks several assert(0) cases, which are + # backed up with "return LZMA_PROG_ERROR". + # * -Wcast-qual would break various things where we need a non-const + # pointer although we don't modify anything through it. + # * -Wcast-align breaks optimized CRC32 and CRC64 implementation + # on some architectures (not on x86), where this warning is bogus, + # because we take care of correct alignment. + # * -Winline, -Wdisabled-optimization, -Wunsafe-loop-optimizations + # don't seem so useful here; at least the last one gives some + # warnings which are not bugs. + for NEW_FLAG in \ + -Wall \ + -Wextra \ + -Wformat=2 \ + -Winit-self \ + -Wmissing-include-dirs \ + -Wstrict-aliasing \ + -Wfloat-equal \ + -Wundef \ + -Wshadow \ + -Wpointer-arith \ + -Wbad-function-cast \ + -Wwrite-strings \ + -Wlogical-op \ + -Waggregate-return \ + -Wstrict-prototypes \ + -Wold-style-definition \ + -Wmissing-prototypes \ + -Wmissing-declarations \ + -Wmissing-noreturn \ + -Wredundant-decls + do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC accepts $NEW_FLAG" >&5 +$as_echo_n "checking if $CC accepts $NEW_FLAG... " >&6; } + OLD_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $NEW_FLAG" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +void foo(void) { } +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + AM_CFLAGS="$AM_CFLAGS $NEW_FLAG" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$OLD_CFLAGS" + done + + # Check whether --enable-werror was given. +if test "${enable_werror+set}" = set; then : + enableval=$enable_werror; +else + enable_werror=no +fi + + if test "x$enable_werror" = "xyes"; then + AM_CFLAGS="$AM_CFLAGS -Werror" + fi +fi + + +############################################################################### +# Create the makefiles and config.h +############################################################################### + +echo + +# Don't build the lib directory at all if we don't need any replacement +# functions. + if test -n "$LIBOBJS"; then + COND_GNULIB_TRUE= + COND_GNULIB_FALSE='#' +else + COND_GNULIB_TRUE='#' + COND_GNULIB_FALSE= +fi + + +# Add default AM_CFLAGS. + + +# Set additional flags for static/dynamic linking. The idea is that every +# program (not library) being built will use either STATIC_{CPPFLAGS,LDFLAGS} +# or DYNAMIC_{CPPFLAGS,LDFLAGS} depending on which type of linkage is +# preferred. These preferences get overriden by use of --disable-static, +# --disable-shared, or --enable-dynamic. +# +# This is quite messy, because we want to use LZMA_API_STATIC when linking +# against static liblzma. It's needed on Windows. +if test "x$enable_static" = xno; then + enable_dynamic=yes +fi +if test "x$enable_shared" = xno; then + enable_dynamic=no +fi +case $enable_dynamic in + yes) + STATIC_CPPFLAGS= + STATIC_LDFLAGS= + DYNAMIC_CPPFLAGS= + DYNAMIC_LDFLAGS= + ;; + mixed) + STATIC_CPPFLAGS="-DLZMA_API_STATIC" + STATIC_LDFLAGS="-static" + DYNAMIC_CPPFLAGS= + DYNAMIC_LDFLAGS= + ;; + no) + STATIC_CPPFLAGS="-DLZMA_API_STATIC" + STATIC_LDFLAGS="-static" + DYNAMIC_CPPFLAGS="-DLZMA_API_STATIC" + DYNAMIC_LDFLAGS="-static" + ;; +esac + + + + + +# This is needed for src/scripts. +xz=`echo xz | sed "$program_transform_name"` + + +ac_config_files="$ac_config_files Doxyfile Makefile po/Makefile.in lib/Makefile src/Makefile src/liblzma/liblzma.pc src/liblzma/Makefile src/liblzma/api/Makefile src/xz/Makefile src/xzdec/Makefile src/lzmainfo/Makefile src/scripts/Makefile src/scripts/xzdiff src/scripts/xzgrep src/scripts/xzmore src/scripts/xzless tests/Makefile debug/Makefile" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${COND_W32_TRUE}" && test -z "${COND_W32_FALSE}"; then + as_fn_error "conditional \"COND_W32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_MAIN_ENCODER_TRUE}" && test -z "${COND_MAIN_ENCODER_FALSE}"; then + as_fn_error "conditional \"COND_MAIN_ENCODER\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_MAIN_DECODER_TRUE}" && test -z "${COND_MAIN_DECODER_FALSE}"; then + as_fn_error "conditional \"COND_MAIN_DECODER\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_FILTER_LZMA1_TRUE}" && test -z "${COND_FILTER_LZMA1_FALSE}"; then + as_fn_error "conditional \"COND_FILTER_LZMA1\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENCODER_LZMA1_TRUE}" && test -z "${COND_ENCODER_LZMA1_FALSE}"; then + as_fn_error "conditional \"COND_ENCODER_LZMA1\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_DECODER_LZMA1_TRUE}" && test -z "${COND_DECODER_LZMA1_FALSE}"; then + as_fn_error "conditional \"COND_DECODER_LZMA1\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_FILTER_LZMA2_TRUE}" && test -z "${COND_FILTER_LZMA2_FALSE}"; then + as_fn_error "conditional \"COND_FILTER_LZMA2\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENCODER_LZMA2_TRUE}" && test -z "${COND_ENCODER_LZMA2_FALSE}"; then + as_fn_error "conditional \"COND_ENCODER_LZMA2\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_DECODER_LZMA2_TRUE}" && test -z "${COND_DECODER_LZMA2_FALSE}"; then + as_fn_error "conditional \"COND_DECODER_LZMA2\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_FILTER_SUBBLOCK_TRUE}" && test -z "${COND_FILTER_SUBBLOCK_FALSE}"; then + as_fn_error "conditional \"COND_FILTER_SUBBLOCK\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENCODER_SUBBLOCK_TRUE}" && test -z "${COND_ENCODER_SUBBLOCK_FALSE}"; then + as_fn_error "conditional \"COND_ENCODER_SUBBLOCK\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_DECODER_SUBBLOCK_TRUE}" && test -z "${COND_DECODER_SUBBLOCK_FALSE}"; then + as_fn_error "conditional \"COND_DECODER_SUBBLOCK\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_FILTER_DELTA_TRUE}" && test -z "${COND_FILTER_DELTA_FALSE}"; then + as_fn_error "conditional \"COND_FILTER_DELTA\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENCODER_DELTA_TRUE}" && test -z "${COND_ENCODER_DELTA_FALSE}"; then + as_fn_error "conditional \"COND_ENCODER_DELTA\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_DECODER_DELTA_TRUE}" && test -z "${COND_DECODER_DELTA_FALSE}"; then + as_fn_error "conditional \"COND_DECODER_DELTA\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_FILTER_X86_TRUE}" && test -z "${COND_FILTER_X86_FALSE}"; then + as_fn_error "conditional \"COND_FILTER_X86\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENCODER_X86_TRUE}" && test -z "${COND_ENCODER_X86_FALSE}"; then + as_fn_error "conditional \"COND_ENCODER_X86\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_DECODER_X86_TRUE}" && test -z "${COND_DECODER_X86_FALSE}"; then + as_fn_error "conditional \"COND_DECODER_X86\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_FILTER_POWERPC_TRUE}" && test -z "${COND_FILTER_POWERPC_FALSE}"; then + as_fn_error "conditional \"COND_FILTER_POWERPC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENCODER_POWERPC_TRUE}" && test -z "${COND_ENCODER_POWERPC_FALSE}"; then + as_fn_error "conditional \"COND_ENCODER_POWERPC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_DECODER_POWERPC_TRUE}" && test -z "${COND_DECODER_POWERPC_FALSE}"; then + as_fn_error "conditional \"COND_DECODER_POWERPC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_FILTER_IA64_TRUE}" && test -z "${COND_FILTER_IA64_FALSE}"; then + as_fn_error "conditional \"COND_FILTER_IA64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENCODER_IA64_TRUE}" && test -z "${COND_ENCODER_IA64_FALSE}"; then + as_fn_error "conditional \"COND_ENCODER_IA64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_DECODER_IA64_TRUE}" && test -z "${COND_DECODER_IA64_FALSE}"; then + as_fn_error "conditional \"COND_DECODER_IA64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_FILTER_ARM_TRUE}" && test -z "${COND_FILTER_ARM_FALSE}"; then + as_fn_error "conditional \"COND_FILTER_ARM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENCODER_ARM_TRUE}" && test -z "${COND_ENCODER_ARM_FALSE}"; then + as_fn_error "conditional \"COND_ENCODER_ARM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_DECODER_ARM_TRUE}" && test -z "${COND_DECODER_ARM_FALSE}"; then + as_fn_error "conditional \"COND_DECODER_ARM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_FILTER_ARMTHUMB_TRUE}" && test -z "${COND_FILTER_ARMTHUMB_FALSE}"; then + as_fn_error "conditional \"COND_FILTER_ARMTHUMB\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENCODER_ARMTHUMB_TRUE}" && test -z "${COND_ENCODER_ARMTHUMB_FALSE}"; then + as_fn_error "conditional \"COND_ENCODER_ARMTHUMB\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_DECODER_ARMTHUMB_TRUE}" && test -z "${COND_DECODER_ARMTHUMB_FALSE}"; then + as_fn_error "conditional \"COND_DECODER_ARMTHUMB\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_FILTER_SPARC_TRUE}" && test -z "${COND_FILTER_SPARC_FALSE}"; then + as_fn_error "conditional \"COND_FILTER_SPARC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENCODER_SPARC_TRUE}" && test -z "${COND_ENCODER_SPARC_FALSE}"; then + as_fn_error "conditional \"COND_ENCODER_SPARC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_DECODER_SPARC_TRUE}" && test -z "${COND_DECODER_SPARC_FALSE}"; then + as_fn_error "conditional \"COND_DECODER_SPARC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_FILTER_SIMPLE_TRUE}" && test -z "${COND_FILTER_SIMPLE_FALSE}"; then + as_fn_error "conditional \"COND_FILTER_SIMPLE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENCODER_SIMPLE_TRUE}" && test -z "${COND_ENCODER_SIMPLE_FALSE}"; then + as_fn_error "conditional \"COND_ENCODER_SIMPLE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_DECODER_SIMPLE_TRUE}" && test -z "${COND_DECODER_SIMPLE_FALSE}"; then + as_fn_error "conditional \"COND_DECODER_SIMPLE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_FILTER_LZ_TRUE}" && test -z "${COND_FILTER_LZ_FALSE}"; then + as_fn_error "conditional \"COND_FILTER_LZ\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENCODER_LZ_TRUE}" && test -z "${COND_ENCODER_LZ_FALSE}"; then + as_fn_error "conditional \"COND_ENCODER_LZ\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_DECODER_LZ_TRUE}" && test -z "${COND_DECODER_LZ_FALSE}"; then + as_fn_error "conditional \"COND_DECODER_LZ\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_CHECK_CRC32_TRUE}" && test -z "${COND_CHECK_CRC32_FALSE}"; then + as_fn_error "conditional \"COND_CHECK_CRC32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_CHECK_CRC64_TRUE}" && test -z "${COND_CHECK_CRC64_FALSE}"; then + as_fn_error "conditional \"COND_CHECK_CRC64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_CHECK_SHA256_TRUE}" && test -z "${COND_CHECK_SHA256_FALSE}"; then + as_fn_error "conditional \"COND_CHECK_SHA256\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ASM_X86_TRUE}" && test -z "${COND_ASM_X86_FALSE}"; then + as_fn_error "conditional \"COND_ASM_X86\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ASM_X86_64_TRUE}" && test -z "${COND_ASM_X86_64_FALSE}"; then + as_fn_error "conditional \"COND_ASM_X86_64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_SMALL_TRUE}" && test -z "${COND_SMALL_FALSE}"; then + as_fn_error "conditional \"COND_SMALL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then + as_fn_error "conditional \"am__fastdepCCAS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_SHARED_TRUE}" && test -z "${COND_SHARED_FALSE}"; then + as_fn_error "conditional \"COND_SHARED\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +if test -z "${COND_GNULIB_TRUE}" && test -z "${COND_GNULIB_FALSE}"; then + as_fn_error "conditional \"COND_GNULIB\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... 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'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + 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 + +# 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'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by XZ Utils $as_me 4.999.9beta, which was +generated by GNU Autoconf 2.64. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_version="\\ +XZ Utils config.status 4.999.9beta +configured by $0, generated by GNU Autoconf 2.64, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2009 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +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 + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' +LD_RC='`$ECHO "X$LD_RC" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds_RC='`$ECHO "X$old_archive_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +compiler_RC='`$ECHO "X$compiler_RC" | $Xsed -e "$delay_single_quote_subst"`' +GCC_RC='`$ECHO "X$GCC_RC" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_RC='`$ECHO "X$lt_prog_compiler_no_builtin_flag_RC" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl_RC='`$ECHO "X$lt_prog_compiler_wl_RC" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic_RC='`$ECHO "X$lt_prog_compiler_pic_RC" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static_RC='`$ECHO "X$lt_prog_compiler_static_RC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_RC='`$ECHO "X$lt_cv_prog_compiler_c_o_RC" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc_RC='`$ECHO "X$archive_cmds_need_lc_RC" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_RC='`$ECHO "X$enable_shared_with_static_runtimes_RC" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec_RC='`$ECHO "X$export_dynamic_flag_spec_RC" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec_RC='`$ECHO "X$whole_archive_flag_spec_RC" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object_RC='`$ECHO "X$compiler_needs_object_RC" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds_RC='`$ECHO "X$old_archive_from_new_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_RC='`$ECHO "X$old_archive_from_expsyms_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_RC='`$ECHO "X$archive_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds_RC='`$ECHO "X$archive_expsym_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds_RC='`$ECHO "X$module_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds_RC='`$ECHO "X$module_expsym_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld_RC='`$ECHO "X$with_gnu_ld_RC" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag_RC='`$ECHO "X$allow_undefined_flag_RC" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag_RC='`$ECHO "X$no_undefined_flag_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_RC='`$ECHO "X$hardcode_libdir_flag_spec_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_RC='`$ECHO "X$hardcode_libdir_flag_spec_ld_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator_RC='`$ECHO "X$hardcode_libdir_separator_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_RC='`$ECHO "X$hardcode_direct_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute_RC='`$ECHO "X$hardcode_direct_absolute_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L_RC='`$ECHO "X$hardcode_minus_L_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var_RC='`$ECHO "X$hardcode_shlibpath_var_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic_RC='`$ECHO "X$hardcode_automatic_RC" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath_RC='`$ECHO "X$inherit_rpath_RC" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs_RC='`$ECHO "X$link_all_deplibs_RC" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path_RC='`$ECHO "X$fix_srcfile_path_RC" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols_RC='`$ECHO "X$always_export_symbols_RC" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds_RC='`$ECHO "X$export_symbols_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms_RC='`$ECHO "X$exclude_expsyms_RC" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms_RC='`$ECHO "X$include_expsyms_RC" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds_RC='`$ECHO "X$prelink_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec_RC='`$ECHO "X$file_list_spec_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action_RC='`$ECHO "X$hardcode_action_RC" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib \ +LD_RC \ +compiler_RC \ +lt_prog_compiler_no_builtin_flag_RC \ +lt_prog_compiler_wl_RC \ +lt_prog_compiler_pic_RC \ +lt_prog_compiler_static_RC \ +lt_cv_prog_compiler_c_o_RC \ +export_dynamic_flag_spec_RC \ +whole_archive_flag_spec_RC \ +compiler_needs_object_RC \ +with_gnu_ld_RC \ +allow_undefined_flag_RC \ +no_undefined_flag_RC \ +hardcode_libdir_flag_spec_RC \ +hardcode_libdir_flag_spec_ld_RC \ +hardcode_libdir_separator_RC \ +fix_srcfile_path_RC \ +exclude_expsyms_RC \ +include_expsyms_RC \ +file_list_spec_RC; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +old_archive_cmds_RC \ +old_archive_from_new_cmds_RC \ +old_archive_from_expsyms_cmds_RC \ +archive_cmds_RC \ +archive_expsym_cmds_RC \ +module_cmds_RC \ +module_expsym_cmds_RC \ +export_symbols_cmds_RC \ +prelink_cmds_RC; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + +# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; + "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "src/liblzma/liblzma.pc") CONFIG_FILES="$CONFIG_FILES src/liblzma/liblzma.pc" ;; + "src/liblzma/Makefile") CONFIG_FILES="$CONFIG_FILES src/liblzma/Makefile" ;; + "src/liblzma/api/Makefile") CONFIG_FILES="$CONFIG_FILES src/liblzma/api/Makefile" ;; + "src/xz/Makefile") CONFIG_FILES="$CONFIG_FILES src/xz/Makefile" ;; + "src/xzdec/Makefile") CONFIG_FILES="$CONFIG_FILES src/xzdec/Makefile" ;; + "src/lzmainfo/Makefile") CONFIG_FILES="$CONFIG_FILES src/lzmainfo/Makefile" ;; + "src/scripts/Makefile") CONFIG_FILES="$CONFIG_FILES src/scripts/Makefile" ;; + "src/scripts/xzdiff") CONFIG_FILES="$CONFIG_FILES src/scripts/xzdiff" ;; + "src/scripts/xzgrep") CONFIG_FILES="$CONFIG_FILES src/scripts/xzgrep" ;; + "src/scripts/xzmore") CONFIG_FILES="$CONFIG_FILES src/scripts/xzmore" ;; + "src/scripts/xzless") CONFIG_FILES="$CONFIG_FILES src/scripts/xzless" ;; + "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + "debug/Makefile") CONFIG_FILES="$CONFIG_FILES debug/Makefile" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\).*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\).*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + 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 + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # 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 + # 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. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # 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 + 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 + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="RC " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Assembler program. +AS=$AS + +# DLL creation program. +DLLTOOL=$DLLTOOL + +# Object dumper program. +OBJDUMP=$OBJDUMP + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: RC + +# The linker used to build libraries. +LD=$lt_LD_RC + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_RC + +# A language specific compiler. +CC=$lt_compiler_RC + +# Is the compiler the GNU compiler? +with_gcc=$GCC_RC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_RC + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_RC + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_RC + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_RC + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_RC + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_RC +archive_expsym_cmds=$lt_archive_expsym_cmds_RC + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_RC +module_expsym_cmds=$lt_module_expsym_cmds_RC + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_RC + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_RC + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_RC + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_RC + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_RC + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_RC + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_RC + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_RC + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_RC + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_RC + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_RC + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_RC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_RC + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_RC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_RC + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_RC + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_RC + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_RC + +# ### END LIBTOOL TAG CONFIG: RC +_LT_EOF + + ;; + "po-directories":C) + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/Build/source/extra/xz-4.999.9beta/configure.ac b/Build/source/extra/xz-4.999.9beta/configure.ac new file mode 100644 index 00000000000..d125a6936da --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/configure.ac @@ -0,0 +1,706 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +############################################################################### +# +# Author: Lasse Collin +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# +############################################################################### + +# NOTE: Don't add useless checks. autoscan detects this and that, but don't +# let it confuse you. For example, we don't care about checking for behavior +# of malloc(), stat(), or lstat(), since we don't use those functions in +# a way that would cause the problems the autoconf macros check. + +AC_PREREQ([2.61]) + +AC_INIT([XZ Utils], m4_esyscmd([/bin/sh version.sh]), + [lasse.collin@tukaani.org], [xz]) +AC_CONFIG_SRCDIR([src/liblzma/common/common.h]) +AC_CONFIG_AUX_DIR([build-aux]) +AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_HEADER([config.h]) + +PACKAGE_HOMEPAGE=http://tukaani.org/xz/ +AC_DEFINE_UNQUOTED([PACKAGE_HOMEPAGE], ["$PACKAGE_HOMEPAGE"], + [Define to the URL of the home page of this package.]) +AC_SUBST([PACKAGE_HOMEPAGE]) + +echo +echo "$PACKAGE_STRING" + +echo +echo "System type:" +# This is needed to know if assembler optimizations can be used. +AC_CANONICAL_HOST + +# We do some special things on Windows (32-bit or 64-bit) builds. +case $host_os in + mingw* | cygwin*) is_w32=yes ;; + *) is_w32=no ;; +esac +AM_CONDITIONAL([COND_W32], [test "$is_w32" = yes]) + + +echo +echo "Configure options:" +AM_CFLAGS= + + +############# +# Debugging # +############# + +AC_MSG_CHECKING([if debugging code should be compiled]) +AC_ARG_ENABLE([debug], AC_HELP_STRING([--enable-debug], [Enable debugging code.]), + [], enable_debug=no) +if test "x$enable_debug" = xyes; then + AC_MSG_RESULT([yes]) +else + AC_DEFINE([NDEBUG], [1], [Define to 1 to disable debugging code.]) + AC_MSG_RESULT([no]) +fi + + +########### +# Filters # +########### + +m4_define([SUPPORTED_FILTERS], [lzma1,lzma2,subblock,delta,x86,powerpc,ia64,arm,armthumb,sparc])dnl +m4_define([SIMPLE_FILTERS], [x86,powerpc,ia64,arm,armthumb,sparc]) +m4_define([LZ_FILTERS], [lzma1,lzma2]) + +m4_foreach([NAME], [SUPPORTED_FILTERS], +[enable_filter_[]NAME=no +enable_encoder_[]NAME=no +enable_decoder_[]NAME=no +])dnl + +AC_MSG_CHECKING([which encoders to build]) +AC_ARG_ENABLE([encoders], AC_HELP_STRING([--enable-encoders=LIST], + [Comma-separated list of encoders to build. Default=all. + Available encoders:] + m4_translit(m4_defn([SUPPORTED_FILTERS]), [,], [ ])), + [], [enable_encoders=SUPPORTED_FILTERS]) +enable_encoders=`echo "$enable_encoders" | sed 's/,subblock//; s/,/ /g'` +if test "x$enable_encoders" = xno || test "x$enable_encoders" = x; then + AC_MSG_RESULT([(none)]) +else + AC_DEFINE([HAVE_ENCODER], [1], + [Define to 1 if encoder components are enabled.]) + for arg in $enable_encoders + do + case $arg in m4_foreach([NAME], [SUPPORTED_FILTERS], [ + NAME) + enable_filter_[]NAME=yes + enable_encoder_[]NAME=yes + AC_DEFINE(HAVE_ENCODER_[]m4_toupper(NAME), [1], + [Define to 1 if] NAME [encoder is enabled.]) + ;;]) + *) + AC_MSG_RESULT([]) + AC_MSG_ERROR([unknown filter: $arg]) + ;; + esac + done + AC_MSG_RESULT([$enable_encoders]) +fi + +AC_MSG_CHECKING([which decoders to build]) +AC_ARG_ENABLE([decoders], AC_HELP_STRING([--enable-decoders=LIST], + [Comma-separated list of decoders to build. Default=all. + Available decoders are the same as available encoders.]), + [], [enable_decoders=SUPPORTED_FILTERS]) +enable_decoders=`echo "$enable_decoders" | sed 's/,subblock//; s/,/ /g'` +if test "x$enable_decoders" = xno || test "x$enable_decoders" = x; then + AC_MSG_RESULT([(none)]) +else + AC_DEFINE([HAVE_DECODER], [1], + [Define to 1 if decoder components are enabled.]) + for arg in $enable_decoders + do + case $arg in m4_foreach([NAME], [SUPPORTED_FILTERS], [ + NAME) + enable_filter_[]NAME=yes + enable_decoder_[]NAME=yes + AC_DEFINE(HAVE_DECODER_[]m4_toupper(NAME), [1], + [Define to 1 if] NAME [decoder is enabled.]) + ;;]) + *) + AC_MSG_RESULT([]) + AC_MSG_ERROR([unknown filter: $arg]) + ;; + esac + done + + # LZMA2 requires that LZMA1 is enabled. + test "x$enable_encoder_lzma2" = xyes && enable_encoder_lzma1=yes + test "x$enable_decoder_lzma2" = xyes && enable_decoder_lzma1=yes + + AC_MSG_RESULT([$enable_decoders]) +fi + +if test "x$enable_encoder_lzma2$enable_encoder_lzma1" = xyesno \ + || test "x$enable_decoder_lzma2$enable_decoder_lzma1" = xyesno; then + AC_MSG_ERROR([LZMA2 requires that LZMA1 is also enabled.]) +fi + +AM_CONDITIONAL(COND_MAIN_ENCODER, test "x$enable_encoders" != xno && test "x$enable_encoders" != x) +AM_CONDITIONAL(COND_MAIN_DECODER, test "x$enable_decoders" != xno && test "x$enable_decoders" != x) + +m4_foreach([NAME], [SUPPORTED_FILTERS], +[AM_CONDITIONAL(COND_FILTER_[]m4_toupper(NAME), test "x$enable_filter_[]NAME" = xyes) +AM_CONDITIONAL(COND_ENCODER_[]m4_toupper(NAME), test "x$enable_encoder_[]NAME" = xyes) +AM_CONDITIONAL(COND_DECODER_[]m4_toupper(NAME), test "x$enable_decoder_[]NAME" = xyes) +])dnl + +# The so called "simple filters" share common code. +enable_filter_simple=no +enable_encoder_simple=no +enable_decoder_simple=no +m4_foreach([NAME], [SIMPLE_FILTERS], +[test "x$enable_filter_[]NAME" = xyes && enable_filter_simple=yes +test "x$enable_encoder_[]NAME" = xyes && enable_encoder_simple=yes +test "x$enable_decoder_[]NAME" = xyes && enable_decoder_simple=yes +])dnl +AM_CONDITIONAL(COND_FILTER_SIMPLE, test "x$enable_filter_simple" = xyes) +AM_CONDITIONAL(COND_ENCODER_SIMPLE, test "x$enable_encoder_simple" = xyes) +AM_CONDITIONAL(COND_DECODER_SIMPLE, test "x$enable_decoder_simple" = xyes) + +# LZ-based filters share common code. +enable_filter_lz=no +enable_encoder_lz=no +enable_decoder_lz=no +m4_foreach([NAME], [LZ_FILTERS], +[test "x$enable_filter_[]NAME" = xyes && enable_filter_lz=yes +test "x$enable_encoder_[]NAME" = xyes && enable_encoder_lz=yes +test "x$enable_decoder_[]NAME" = xyes && enable_decoder_lz=yes +])dnl +AM_CONDITIONAL(COND_FILTER_LZ, test "x$enable_filter_lz" = xyes) +AM_CONDITIONAL(COND_ENCODER_LZ, test "x$enable_encoder_lz" = xyes) +AM_CONDITIONAL(COND_DECODER_LZ, test "x$enable_decoder_lz" = xyes) + + +################# +# Match finders # +################# + +m4_define([SUPPORTED_MATCH_FINDERS], [hc3,hc4,bt2,bt3,bt4]) + +m4_foreach([NAME], [SUPPORTED_MATCH_FINDERS], +[enable_match_finder_[]NAME=no +]) + +AC_MSG_CHECKING([which match finders to build]) +AC_ARG_ENABLE([match-finders], AC_HELP_STRING([--enable-match-finders=LIST], + [Comma-separated list of match finders to build. Default=all. + At least one match finder is required for encoding with + the LZMA1 and LZMA2 filters. Available match finders:] + m4_translit(m4_defn([SUPPORTED_MATCH_FINDERS]), [,], [ ])), [], + [enable_match_finders=SUPPORTED_MATCH_FINDERS]) +enable_match_finders=`echo "$enable_match_finders" | sed 's/,/ /g'` +if test "x$enable_encoder_lz" = xyes ; then + for arg in $enable_match_finders + do + case $arg in m4_foreach([NAME], [SUPPORTED_MATCH_FINDERS], [ + NAME) + enable_match_finder_[]NAME=yes + AC_DEFINE(HAVE_MF_[]m4_toupper(NAME), [1], + [Define to 1 to enable] NAME [match finder.]) + ;;]) + *) + AC_MSG_RESULT([]) + AC_MSG_ERROR([unknown match finder: $arg]) + ;; + esac + done + AC_MSG_RESULT([$enable_match_finders]) +else + AC_MSG_RESULT([(none because not building any LZ-based encoder)]) +fi + + +#################### +# Integrity checks # +#################### + +m4_define([SUPPORTED_CHECKS], [crc32,crc64,sha256]) + +m4_foreach([NAME], [SUPPORTED_FILTERS], +[enable_check_[]NAME=no +])dnl + +AC_MSG_CHECKING([which integrity checks to build]) +AC_ARG_ENABLE([checks], AC_HELP_STRING([--enable-checks=LIST], + [Comma-separated list of integrity checks to build. + Default=all. Available integrity checks:] + m4_translit(m4_defn([SUPPORTED_CHECKS]), [,], [ ])), + [], [enable_checks=SUPPORTED_CHECKS]) +enable_checks=`echo "$enable_checks" | sed 's/,/ /g'` +if test "x$enable_checks" = xno || test "x$enable_checks" = x; then + AC_MSG_RESULT([(none)]) +else + for arg in $enable_checks + do + case $arg in m4_foreach([NAME], [SUPPORTED_CHECKS], [ + NAME) + enable_check_[]NAME=yes + AC_DEFINE(HAVE_CHECK_[]m4_toupper(NAME), [1], + [Define to 1 if] NAME + [integrity check is enabled.]) + ;;]) + *) + AC_MSG_RESULT([]) + AC_MSG_ERROR([unknown integrity check: $arg]) + ;; + esac + done + AC_MSG_RESULT([$enable_checks]) +fi +if test "x$enable_checks_crc32" = xno ; then + AC_MSG_ERROR([For now, the CRC32 check must always be enabled.]) +fi + +m4_foreach([NAME], [SUPPORTED_CHECKS], +[AM_CONDITIONAL(COND_CHECK_[]m4_toupper(NAME), test "x$enable_check_[]NAME" = xyes) +])dnl + + +########################### +# Assembler optimizations # +########################### + +AC_MSG_CHECKING([if assembler optimizations should be used]) +AC_ARG_ENABLE([assembler], AC_HELP_STRING([--disable-assembler], + [Do not use assembler optimizations even if such exist + for the architecture.]), + [], [enable_assembler=yes]) +if test "x$enable_assembler" = xyes; then + case $host_cpu in + i?86) enable_assembler=x86 ;; + x86_64) enable_assembler=x86_64 ;; + *) enable_assembler=no ;; + esac +fi +case $enable_assembler in + x86) + AC_DEFINE([HAVE_ASM_X86], [1], + [Define to 1 if using x86 assembler optimizations.]) + ;; + x86_64) + AC_DEFINE([HAVE_ASM_X86_64], [1], + [Define to 1 if using x86_64 assembler optimizations.]) + ;; + no) + ;; + *) + AC_MSG_RESULT([]) + AC_MSG_ERROR([--enable-assembler accepts only \`yes', \`no', \`x86', or \`x86_64'.]) + ;; +esac +AC_MSG_RESULT([$enable_assembler]) +AM_CONDITIONAL(COND_ASM_X86, test "x$enable_assembler" = xx86) +AM_CONDITIONAL(COND_ASM_X86_64, test "x$enable_assembler" = xx86_64) + + +################################ +# Fast unaligned memory access # +################################ + +AC_MSG_CHECKING([if unaligned memory access should be used]) +AC_ARG_ENABLE([unaligned-access], AC_HELP_STRING([--enable-unaligned-access], + [Enable if the system supports *fast* unaligned memory access + with 16-bit and 32-bit integers. By default, this is enabled + only on x86, x86_64, and big endian PowerPC.]), + [], [enable_unaligned_access=auto]) +if test "x$enable_unaligned_access" = xauto ; then + case $host_cpu in + i?86|x86_64|powerpc|powerpc64) + enable_unaligned_access=yes + ;; + *) + enable_unaligned_access=no + ;; + esac +fi +if test "x$enable_unaligned_access" = xyes ; then + AC_DEFINE([HAVE_FAST_UNALIGNED_ACCESS], [1], [Define to 1 if + the system supports fast unaligned memory access.]) + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi + + +##################### +# Size optimization # +##################### + +AC_MSG_CHECKING([if small size is preferred over speed]) +AC_ARG_ENABLE([small], AC_HELP_STRING([--enable-small], + [Make liblzma smaller and a little slower. + This is disabled by default to optimize for speed.]), + [], [enable_small=no]) +if test "x$enable_small" = xyes; then + AC_DEFINE([HAVE_SMALL], [1], [Define to 1 if optimizing for size.]) +elif test "x$enable_small" != xno; then + AC_MSG_RESULT([]) + AC_MSG_ERROR([--enable-small accepts only \`yes' or \`no']) +fi +AC_MSG_RESULT([$enable_small]) +AM_CONDITIONAL(COND_SMALL, test "x$enable_small" = xyes) + + +############# +# Threading # +############# + +AC_MSG_CHECKING([if threading support is wanted]) +AC_ARG_ENABLE([threads], AC_HELP_STRING([--disable-threads], + [Disable threading support. + This makes some things thread-unsafe.]), + [], [enable_threads=yes]) +if test "x$enable_threads" != xyes && test "x$enable_threads" != xno; then + AC_MSG_RESULT([]) + AC_MSG_ERROR([--enable-threads accepts only \`yes' or \`no']) +fi +AC_MSG_RESULT([$enable_threads]) +# We use the actual result a little later. + + +############################################ +# xz/xzdec/lzmadec linkage against liblzma # +############################################ + +# Link the xz, xzdec, and lzmadec command line tools against static liblzma +# unless using --enable-dynamic. Using static liblzma gives a little bit +# faster executable on x86, because no register is wasted for PIC. We also +# have one dependency less, which allows users to more freely copy the xz +# binary to other boxes. However, I wouldn't be surprised if distro +# maintainers still prefer dynamic linking, so let's make it easy for them. + +AC_MSG_CHECKING([how programs should be linked against liblzma]) +AC_ARG_ENABLE([dynamic], [AC_HELP_STRING([--enable-dynamic=TYPE], + [Set how command line tools are linked against liblzma. + TYPE can be mixed, yes, or no. The default is mixed.])], + [], [enable_dynamic=mixed]) +case $enable_dynamic in + mixed) + AC_MSG_RESULT([mixed (some dynamically, some statically)]) + ;; + yes) + AC_MSG_RESULT([dynamically]) + ;; + no) + AC_MSG_RESULT([statically]) + ;; + *) + AC_MSG_RESULT([]) + AC_MSG_ERROR([--enable-dynamic accepts only \`mixed', \`yes', or \`no']) + ;; +esac +# We use the actual results later, because we don't know yet +# if --disable-shared or --disable-static was used. + + +############################################################################### +# Checks for programs. +############################################################################### + +echo +gl_POSIX_SHELL +if test -z "$POSIX_SHELL" ; then + AC_MSG_ERROR([No POSIX conforming shell (sh) was found.]) +fi + +echo +echo "Initializing Automake:" + +AM_INIT_AUTOMAKE([1.10 foreign tar-v7 filename-length-max=99]) +AC_PROG_LN_S + +AC_PROG_CC_C99 +if test x$ac_cv_prog_cc_c99 = xno ; then + AC_MSG_ERROR([No C99 compiler was found.]) +fi + +AM_PROG_CC_C_O +AM_PROG_AS +AC_USE_SYSTEM_EXTENSIONS + +if test "x$enable_threads" = xyes; then + echo + echo "Threading support:" + ACX_PTHREAD + LIBS="$LIBS $PTHREAD_LIBS" + AM_CFLAGS="$AM_CFLAGS $PTHREAD_CFLAGS" + CC="$PTHREAD_CC" +fi + +echo +echo "Initializing Libtool:" +LT_PREREQ([2.2]) +LT_INIT([win32-dll]) +LT_LANG([Windows Resource]) + +# This is a bit wrong since it is possible to request that only some libs +# are built as shared. Using that feature isn't so common though, and this +# breaks only on Windows (at least for now) if the user enables only some +# libs as shared. +AM_CONDITIONAL([COND_SHARED], [test "x$enable_shared" != xno]) + + +############################################################################### +# Checks for libraries. +############################################################################### + +echo +echo "Initializing gettext:" +AM_GNU_GETTEXT_VERSION([0.16.1]) +AM_GNU_GETTEXT([external]) + +############################################################################### +# Checks for header files. +############################################################################### + +echo +echo "System headers and functions:" + +# There is currently no workarounds in this package if some of +# these headers are missing. +AC_CHECK_HEADERS([fcntl.h limits.h sys/time.h], + [], + [AC_MSG_ERROR([Required header file(s) are missing.])]) + +# If any of these headers are missing, things should still work correctly: +AC_CHECK_HEADERS([sys/param.h sys/sysctl.h byteswap.h], + [], [], [ +#ifdef HAVE_SYS_PARAM_H +# include +#endif +]) + +# Even if we have byteswap.h, we may lack the specific macros/functions. +if test x$ac_cv_header_byteswap_h = xyes ; then + m4_foreach([FUNC], [bswap_16,bswap_32,bswap_64], [ + AC_MSG_CHECKING([if FUNC is available]) + AC_LINK_IFELSE([AC_LANG_SOURCE([ +#include +int +main(void) +{ + FUNC[](42); + return 0; +} + ])], [ + AC_DEFINE(HAVE_[]m4_toupper(FUNC), [1], + [Define to 1 if] FUNC [is available.]) + AC_MSG_RESULT([yes]) + ], [AC_MSG_RESULT([no])]) + + ])dnl +fi + + +############################################################################### +# Checks for typedefs, structures, and compiler characteristics. +############################################################################### + +dnl We don't need these as long as we need a C99 compiler anyway. +dnl AC_C_INLINE +dnl AC_C_RESTRICT + +AC_HEADER_STDBOOL + +AC_TYPE_UINT8_T +AC_TYPE_UINT16_T +AC_TYPE_INT32_T +AC_TYPE_UINT32_T +AC_TYPE_INT64_T +AC_TYPE_UINT64_T +AC_TYPE_UINTPTR_T + +AC_CHECK_SIZEOF([size_t]) + +# The command line tool can copy high resolution timestamps if such +# information is availabe in struct stat. Otherwise one second accuracy +# is used. +AC_CHECK_MEMBERS([ + struct stat.st_atim.tv_nsec, + struct stat.st_atimespec.tv_nsec, + struct stat.st_atimensec, + struct stat.st_uatime, + struct stat.st_atim.st__tim.tv_nsec]) + +AC_SYS_LARGEFILE +AC_C_BIGENDIAN + + +############################################################################### +# Checks for library functions. +############################################################################### + +# Gnulib replacements as needed +gl_GETOPT + +# Find the best function to set timestamps. +AC_CHECK_FUNCS([futimens futimes futimesat utimes utime], [break]) + +lc_PHYSMEM +lc_CPUCORES + + +############################################################################### +# If using GCC, set some additional AM_CFLAGS: +############################################################################### + +if test "$GCC" = yes ; then + echo + echo "GCC extensions:" +fi + +# Always do the visibility check but don't set AM_CFLAGS on Windows. +# This way things get set properly even on Windows. +gl_VISIBILITY +if test -n "$CFLAG_VISIBILITY" && test "$is_w32" = no; then + AM_CFLAGS="$AM_CFLAGS $CFLAG_VISIBILITY" +fi + +if test "$GCC" = yes ; then + # Enable as much warnings as possible. These commented warnings won't + # work for this package though: + # * -Wunreachable-code breaks several assert(0) cases, which are + # backed up with "return LZMA_PROG_ERROR". + # * -Wcast-qual would break various things where we need a non-const + # pointer although we don't modify anything through it. + # * -Wcast-align breaks optimized CRC32 and CRC64 implementation + # on some architectures (not on x86), where this warning is bogus, + # because we take care of correct alignment. + # * -Winline, -Wdisabled-optimization, -Wunsafe-loop-optimizations + # don't seem so useful here; at least the last one gives some + # warnings which are not bugs. + for NEW_FLAG in \ + -Wall \ + -Wextra \ + -Wformat=2 \ + -Winit-self \ + -Wmissing-include-dirs \ + -Wstrict-aliasing \ + -Wfloat-equal \ + -Wundef \ + -Wshadow \ + -Wpointer-arith \ + -Wbad-function-cast \ + -Wwrite-strings \ + -Wlogical-op \ + -Waggregate-return \ + -Wstrict-prototypes \ + -Wold-style-definition \ + -Wmissing-prototypes \ + -Wmissing-declarations \ + -Wmissing-noreturn \ + -Wredundant-decls + do + AC_MSG_CHECKING([if $CC accepts $NEW_FLAG]) + OLD_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $NEW_FLAG" + AC_COMPILE_IFELSE([void foo(void) { }], [ + AM_CFLAGS="$AM_CFLAGS $NEW_FLAG" + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ]) + CFLAGS="$OLD_CFLAGS" + done + + AC_ARG_ENABLE([werror], + AC_HELP_STRING([--enable-werror], [Enable -Werror to abort + compilation on all compiler warnings.]), + [], [enable_werror=no]) + if test "x$enable_werror" = "xyes"; then + AM_CFLAGS="$AM_CFLAGS -Werror" + fi +fi + + +############################################################################### +# Create the makefiles and config.h +############################################################################### + +echo + +# Don't build the lib directory at all if we don't need any replacement +# functions. +AM_CONDITIONAL([COND_GNULIB], test -n "$LIBOBJS") + +# Add default AM_CFLAGS. +AC_SUBST([AM_CFLAGS]) + +# Set additional flags for static/dynamic linking. The idea is that every +# program (not library) being built will use either STATIC_{CPPFLAGS,LDFLAGS} +# or DYNAMIC_{CPPFLAGS,LDFLAGS} depending on which type of linkage is +# preferred. These preferences get overriden by use of --disable-static, +# --disable-shared, or --enable-dynamic. +# +# This is quite messy, because we want to use LZMA_API_STATIC when linking +# against static liblzma. It's needed on Windows. +if test "x$enable_static" = xno; then + enable_dynamic=yes +fi +if test "x$enable_shared" = xno; then + enable_dynamic=no +fi +case $enable_dynamic in + yes) + STATIC_CPPFLAGS= + STATIC_LDFLAGS= + DYNAMIC_CPPFLAGS= + DYNAMIC_LDFLAGS= + ;; + mixed) + STATIC_CPPFLAGS="-DLZMA_API_STATIC" + STATIC_LDFLAGS="-static" + DYNAMIC_CPPFLAGS= + DYNAMIC_LDFLAGS= + ;; + no) + STATIC_CPPFLAGS="-DLZMA_API_STATIC" + STATIC_LDFLAGS="-static" + DYNAMIC_CPPFLAGS="-DLZMA_API_STATIC" + DYNAMIC_LDFLAGS="-static" + ;; +esac +AC_SUBST([STATIC_CPPFLAGS]) +AC_SUBST([STATIC_LDFLAGS]) +AC_SUBST([DYNAMIC_CPPFLAGS]) +AC_SUBST([DYNAMIC_LDFLAGS]) + +# This is needed for src/scripts. +xz=`echo xz | sed "$program_transform_name"` +AC_SUBST([xz]) + +AC_CONFIG_FILES([ + Doxyfile + Makefile + po/Makefile.in + lib/Makefile + src/Makefile + src/liblzma/liblzma.pc + src/liblzma/Makefile + src/liblzma/api/Makefile + src/xz/Makefile + src/xzdec/Makefile + src/lzmainfo/Makefile + src/scripts/Makefile + src/scripts/xzdiff + src/scripts/xzgrep + src/scripts/xzmore + src/scripts/xzless + tests/Makefile + debug/Makefile +]) + +AC_OUTPUT diff --git a/Build/source/extra/xz-4.999.9beta/debug/Makefile.am b/Build/source/extra/xz-4.999.9beta/debug/Makefile.am new file mode 100644 index 00000000000..23834f4fcac --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/debug/Makefile.am @@ -0,0 +1,30 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +noinst_PROGRAMS = \ + repeat \ + sync_flush \ + full_flush \ + memusage \ + crc32 \ + known_sizes \ + hex2bin + +AM_CPPFLAGS = \ + -I$(top_srcdir)/src/common \ + -I$(top_srcdir)/src/liblzma/api \ + $(STATIC_CPPFLAGS) + +AM_LDFLAGS = $(STATIC_LDFLAGS) + +LDADD = $(top_builddir)/src/liblzma/liblzma.la + +if COND_GNULIB +LDADD += $(top_builddir)/lib/libgnu.a +endif + +LDADD += $(LTLIBINTL) diff --git a/Build/source/extra/xz-4.999.9beta/debug/Makefile.in b/Build/source/extra/xz-4.999.9beta/debug/Makefile.in new file mode 100644 index 00000000000..e8d6418c238 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/debug/Makefile.in @@ -0,0 +1,580 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ +noinst_PROGRAMS = repeat$(EXEEXT) sync_flush$(EXEEXT) \ + full_flush$(EXEEXT) memusage$(EXEEXT) crc32$(EXEEXT) \ + known_sizes$(EXEEXT) hex2bin$(EXEEXT) +@COND_GNULIB_TRUE@am__append_1 = $(top_builddir)/lib/libgnu.a +subdir = debug +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ + $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +PROGRAMS = $(noinst_PROGRAMS) +crc32_SOURCES = crc32.c +crc32_OBJECTS = crc32.$(OBJEXT) +crc32_LDADD = $(LDADD) +am__DEPENDENCIES_1 = +crc32_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) +full_flush_SOURCES = full_flush.c +full_flush_OBJECTS = full_flush.$(OBJEXT) +full_flush_LDADD = $(LDADD) +full_flush_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) +hex2bin_SOURCES = hex2bin.c +hex2bin_OBJECTS = hex2bin.$(OBJEXT) +hex2bin_LDADD = $(LDADD) +hex2bin_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) +known_sizes_SOURCES = known_sizes.c +known_sizes_OBJECTS = known_sizes.$(OBJEXT) +known_sizes_LDADD = $(LDADD) +known_sizes_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) +memusage_SOURCES = memusage.c +memusage_OBJECTS = memusage.$(OBJEXT) +memusage_LDADD = $(LDADD) +memusage_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) +repeat_SOURCES = repeat.c +repeat_OBJECTS = repeat.$(OBJEXT) +repeat_LDADD = $(LDADD) +repeat_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) +sync_flush_SOURCES = sync_flush.c +sync_flush_OBJECTS = sync_flush.$(OBJEXT) +sync_flush_LDADD = $(LDADD) +sync_flush_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = crc32.c full_flush.c hex2bin.c known_sizes.c memusage.c \ + repeat.c sync_flush.c +DIST_SOURCES = crc32.c full_flush.c hex2bin.c known_sizes.c memusage.c \ + repeat.c sync_flush.c +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ +DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETOPT_H = @GETOPT_H@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSIX_SHELL = @POSIX_SHELL@ +POSUB = @POSUB@ +PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ +STATIC_LDFLAGS = @STATIC_LDFLAGS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +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@ +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@ +lt_ECHO = @lt_ECHO@ +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@ +xz = @xz@ +AM_CPPFLAGS = \ + -I$(top_srcdir)/src/common \ + -I$(top_srcdir)/src/liblzma/api \ + $(STATIC_CPPFLAGS) + +AM_LDFLAGS = $(STATIC_LDFLAGS) +LDADD = $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ + $(LTLIBINTL) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign debug/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign debug/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +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 +crc32$(EXEEXT): $(crc32_OBJECTS) $(crc32_DEPENDENCIES) + @rm -f crc32$(EXEEXT) + $(LINK) $(crc32_OBJECTS) $(crc32_LDADD) $(LIBS) +full_flush$(EXEEXT): $(full_flush_OBJECTS) $(full_flush_DEPENDENCIES) + @rm -f full_flush$(EXEEXT) + $(LINK) $(full_flush_OBJECTS) $(full_flush_LDADD) $(LIBS) +hex2bin$(EXEEXT): $(hex2bin_OBJECTS) $(hex2bin_DEPENDENCIES) + @rm -f hex2bin$(EXEEXT) + $(LINK) $(hex2bin_OBJECTS) $(hex2bin_LDADD) $(LIBS) +known_sizes$(EXEEXT): $(known_sizes_OBJECTS) $(known_sizes_DEPENDENCIES) + @rm -f known_sizes$(EXEEXT) + $(LINK) $(known_sizes_OBJECTS) $(known_sizes_LDADD) $(LIBS) +memusage$(EXEEXT): $(memusage_OBJECTS) $(memusage_DEPENDENCIES) + @rm -f memusage$(EXEEXT) + $(LINK) $(memusage_OBJECTS) $(memusage_LDADD) $(LIBS) +repeat$(EXEEXT): $(repeat_OBJECTS) $(repeat_DEPENDENCIES) + @rm -f repeat$(EXEEXT) + $(LINK) $(repeat_OBJECTS) $(repeat_LDADD) $(LIBS) +sync_flush$(EXEEXT): $(sync_flush_OBJECTS) $(sync_flush_DEPENDENCIES) + @rm -f sync_flush$(EXEEXT) + $(LINK) $(sync_flush_OBJECTS) $(sync_flush_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/full_flush.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hex2bin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/known_sizes.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memusage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repeat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sync_flush.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +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) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + 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; }; }'`; \ + 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) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + 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; }; }'`; \ + 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 + +distdir: $(DISTFILES) + @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 +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: +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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +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 -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: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstPROGRAMS ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am 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 + + +# 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/Build/source/extra/xz-4.999.9beta/debug/README b/Build/source/extra/xz-4.999.9beta/debug/README new file mode 100644 index 00000000000..749610d77c0 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/debug/README @@ -0,0 +1,17 @@ + +Debug tools +----------- + + This directory contains a few tiny programs that may be helpful when + debugging LZMA Utils. + + These tools are not meant to be installed. Often one needs to edit + the source code a little to make the programs do the wanted things. + If you don't know how these programs could help you, it is likely + that they really are useless to you. + + These aren't intended to be used as example programs. They take some + shortcuts here and there, which correct programs should not do. Many + possible errors (especially I/O errors) are ignored. Don't report + bugs or send patches to fix this kind of bugs. + diff --git a/Build/source/extra/xz-4.999.9beta/debug/crc32.c b/Build/source/extra/xz-4.999.9beta/debug/crc32.c new file mode 100644 index 00000000000..0fe46511f03 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/debug/crc32.c @@ -0,0 +1,38 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file crc32.c +/// \brief Primitive CRC32 calculation tool +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "sysdefs.h" +#include + + +int +main(void) +{ + uint32_t crc = 0; + + do { + uint8_t buf[BUFSIZ]; + const size_t size = fread(buf, 1, sizeof(buf), stdin); + crc = lzma_crc32(buf, size, crc); + } while (!ferror(stdin) && !feof(stdin)); + + //printf("%08" PRIX32 "\n", crc); + + // I want it little endian so it's easy to work with hex editor. + printf("%02" PRIX32 " ", crc & 0xFF); + printf("%02" PRIX32 " ", (crc >> 8) & 0xFF); + printf("%02" PRIX32 " ", (crc >> 16) & 0xFF); + printf("%02" PRIX32 " ", crc >> 24); + printf("\n"); + + return 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/debug/full_flush.c b/Build/source/extra/xz-4.999.9beta/debug/full_flush.c new file mode 100644 index 00000000000..ce0d2e8940e --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/debug/full_flush.c @@ -0,0 +1,102 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file full_flush.c +/// \brief Encode files using LZMA_FULL_FLUSH +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "sysdefs.h" +#include "lzma.h" +#include + + +static lzma_stream strm = LZMA_STREAM_INIT; +static FILE *file_in; + + +static void +encode(size_t size, lzma_action action) +{ + static const size_t CHUNK = 64; + uint8_t in[CHUNK]; + uint8_t out[CHUNK]; + lzma_ret ret; + + do { + if (strm.avail_in == 0 && size > 0) { + const size_t amount = MIN(size, CHUNK); + strm.avail_in = fread(in, 1, amount, file_in); + strm.next_in = in; + size -= amount; // Intentionally not using avail_in. + } + + strm.next_out = out; + strm.avail_out = CHUNK; + + ret = lzma_code(&strm, size == 0 ? action : LZMA_RUN); + + if (ret != LZMA_OK && ret != LZMA_STREAM_END) { + fprintf(stderr, "%s:%u: %s: ret == %d\n", + __FILE__, __LINE__, __func__, ret); + exit(1); + } + + fwrite(out, 1, CHUNK - strm.avail_out, stdout); + + } while (size > 0 || strm.avail_out == 0); + + if ((action == LZMA_RUN && ret != LZMA_OK) + || (action != LZMA_RUN && ret != LZMA_STREAM_END)) { + fprintf(stderr, "%s:%u: %s: ret == %d\n", + __FILE__, __LINE__, __func__, ret); + exit(1); + } +} + + +int +main(int argc, char **argv) +{ + file_in = argc > 1 ? fopen(argv[1], "rb") : stdin; + + + // Config + lzma_options_lzma opt_lzma; + if (lzma_lzma_preset(&opt_lzma, 1)) { + fprintf(stderr, "preset failed\n"); + exit(1); + } + lzma_filter filters[LZMA_FILTERS_MAX + 1]; + filters[0].id = LZMA_FILTER_LZMA2; + filters[0].options = &opt_lzma; + filters[1].id = LZMA_VLI_UNKNOWN; + + // Init + if (lzma_stream_encoder(&strm, filters, LZMA_CHECK_CRC32) != LZMA_OK) { + fprintf(stderr, "init failed\n"); + exit(1); + } + +// if (lzma_easy_encoder(&strm, 1)) { +// fprintf(stderr, "init failed\n"); +// exit(1); +// } + + // Encoding + encode(0, LZMA_FULL_FLUSH); + encode(6, LZMA_FULL_FLUSH); + encode(0, LZMA_FULL_FLUSH); + encode(7, LZMA_FULL_FLUSH); + encode(0, LZMA_FULL_FLUSH); + encode(0, LZMA_FINISH); + + // Clean up + lzma_end(&strm); + + return 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/debug/hex2bin.c b/Build/source/extra/xz-4.999.9beta/debug/hex2bin.c new file mode 100644 index 00000000000..73246244746 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/debug/hex2bin.c @@ -0,0 +1,53 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file hex2bin.c +/// \brief Converts hexadecimal input strings to binary +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "sysdefs.h" +#include +#include + + +static int +getbin(int x) +{ + if (x >= '0' && x <= '9') + return x - '0'; + + if (x >= 'A' && x <= 'F') + return x - 'A' + 10; + + return x - 'a' + 10; +} + + +int +main(void) +{ + while (true) { + int byte = getchar(); + if (byte == EOF) + return 0; + if (!isxdigit(byte)) + continue; + + const int digit = getchar(); + if (digit == EOF || !isxdigit(digit)) { + fprintf(stderr, "Invalid input\n"); + return 1; + } + + byte = (getbin(byte) << 4) | getbin(digit); + if (putchar(byte) == EOF) { + perror(NULL); + return 1; + } + } +} diff --git a/Build/source/extra/xz-4.999.9beta/debug/known_sizes.c b/Build/source/extra/xz-4.999.9beta/debug/known_sizes.c new file mode 100644 index 00000000000..cdee26dfd8e --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/debug/known_sizes.c @@ -0,0 +1,129 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file known_sizes.c +/// \brief Encodes .lzma Stream with sizes known in Block Header +/// +/// The input file is encoded in RAM, and the known Compressed Size +/// and/or Uncompressed Size values are stored in the Block Header. +/// As of writing there's no such Stream encoder in liblzma. +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "sysdefs.h" +#include "lzma.h" +#include +#include +#include +#include + + +// Support file sizes up to 1 MiB. We use this for output space too, so files +// close to 1 MiB had better compress at least a little or we have a buffer +// overflow. +#define BUFFER_SIZE (1U << 20) + + +int +main(void) +{ + // Allocate the buffers. + uint8_t *in = malloc(BUFFER_SIZE); + uint8_t *out = malloc(BUFFER_SIZE); + if (in == NULL || out == NULL) + return 1; + + // Fill the input buffer. + const size_t in_size = fread(in, 1, BUFFER_SIZE, stdin); + + // Filter setup + lzma_options_lzma opt_lzma; + if (lzma_lzma_preset(&opt_lzma, 1)) + return 1; + + lzma_filter filters[] = { + { + .id = LZMA_FILTER_LZMA2, + .options = &opt_lzma + }, + { + .id = LZMA_VLI_UNKNOWN + } + }; + + lzma_block block = { + .check = LZMA_CHECK_CRC32, + .compressed_size = BUFFER_SIZE, // Worst case reserve + .uncompressed_size = in_size, + .filters = filters, + }; + + lzma_stream strm = LZMA_STREAM_INIT; + if (lzma_block_encoder(&strm, &block) != LZMA_OK) + return 1; + + // Reserve space for Stream Header and Block Header. We need to + // calculate the size of the Block Header first. + if (lzma_block_header_size(&block) != LZMA_OK) + return 1; + + size_t out_size = LZMA_STREAM_HEADER_SIZE + block.header_size; + + strm.next_in = in; + strm.avail_in = in_size; + strm.next_out = out + out_size; + strm.avail_out = BUFFER_SIZE - out_size; + + if (lzma_code(&strm, LZMA_FINISH) != LZMA_STREAM_END) + return 1; + + out_size += strm.total_out; + + if (lzma_block_header_encode(&block, out + LZMA_STREAM_HEADER_SIZE) + != LZMA_OK) + return 1; + + lzma_index *idx = lzma_index_init(NULL, NULL); + if (idx == NULL) + return 1; + + if (lzma_index_append(idx, NULL, block.header_size + strm.total_out, + strm.total_in) != LZMA_OK) + return 1; + + if (lzma_index_encoder(&strm, idx) != LZMA_OK) + return 1; + + if (lzma_code(&strm, LZMA_RUN) != LZMA_STREAM_END) + return 1; + + out_size += strm.total_out; + + lzma_end(&strm); + + lzma_index_end(idx, NULL); + + // Encode the Stream Header and Stream Footer. backwards_size is + // needed only for the Stream Footer. + lzma_stream_flags sf = { + .backward_size = strm.total_out, + .check = block.check, + }; + + if (lzma_stream_header_encode(&sf, out) != LZMA_OK) + return 1; + + if (lzma_stream_footer_encode(&sf, out + out_size) != LZMA_OK) + return 1; + + out_size += LZMA_STREAM_HEADER_SIZE; + + // Write out the file. + fwrite(out, 1, out_size, stdout); + + return 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/debug/memusage.c b/Build/source/extra/xz-4.999.9beta/debug/memusage.c new file mode 100644 index 00000000000..93fe0b2ca79 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/debug/memusage.c @@ -0,0 +1,49 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file memusage.c +/// \brief Calculates memory usage using lzma_memory_usage() +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "sysdefs.h" +#include "lzma.h" +#include + +int +main(void) +{ + lzma_options_lzma lzma = { + .dict_size = (1U << 30) + (1U << 29), + .lc = 3, + .lp = 0, + .pb = 2, + .preset_dict = NULL, + .preset_dict_size = 0, + .mode = LZMA_MODE_NORMAL, + .nice_len = 48, + .mf = LZMA_MF_BT4, + .depth = 0, + }; + +/* + lzma_options_filter filters[] = { + { LZMA_FILTER_LZMA1, + (lzma_options_lzma *)&lzma_preset_lzma[6 - 1] }, + { UINT64_MAX, NULL } + }; +*/ + lzma_filter filters[] = { + { LZMA_FILTER_LZMA1, &lzma }, + { UINT64_MAX, NULL } + }; + + printf("Encoder: %10" PRIu64 " B\n", lzma_memusage_encoder(filters)); + printf("Decoder: %10" PRIu64 " B\n", lzma_memusage_decoder(filters)); + + return 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/debug/repeat.c b/Build/source/extra/xz-4.999.9beta/debug/repeat.c new file mode 100644 index 00000000000..a00bde2cd38 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/debug/repeat.c @@ -0,0 +1,36 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file repeat.c +/// \brief Repeats given string given times +/// +/// This program can be useful when debugging run-length encoder in +/// the Subblock filter, especially the condition when repeat count +/// doesn't fit into 28-bit integer. +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "sysdefs.h" +#include + + +int +main(int argc, char **argv) +{ + if (argc != 3) { + fprintf(stderr, "Usage: %s COUNT STRING\n", argv[0]); + exit(1); + } + + unsigned long long count = strtoull(argv[1], NULL, 10); + const size_t size = strlen(argv[2]); + + while (count-- != 0) + fwrite(argv[2], 1, size, stdout); + + return !!(ferror(stdout) || fclose(stdout)); +} diff --git a/Build/source/extra/xz-4.999.9beta/debug/sync_flush.c b/Build/source/extra/xz-4.999.9beta/debug/sync_flush.c new file mode 100644 index 00000000000..1dccbdaacbd --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/debug/sync_flush.c @@ -0,0 +1,133 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file sync_flush.c +/// \brief Encode files using LZMA_SYNC_FLUSH +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "sysdefs.h" +#include "lzma.h" +#include + + +static lzma_stream strm = LZMA_STREAM_INIT; +static FILE *file_in; + + +static void +encode(size_t size, lzma_action action) +{ + static const size_t CHUNK = 64; + uint8_t in[CHUNK]; + uint8_t out[CHUNK]; + lzma_ret ret; + + do { + if (strm.avail_in == 0 && size > 0) { + const size_t amount = MIN(size, CHUNK); + strm.avail_in = fread(in, 1, amount, file_in); + strm.next_in = in; + size -= amount; // Intentionally not using avail_in. + } + + strm.next_out = out; + strm.avail_out = CHUNK; + + ret = lzma_code(&strm, size == 0 ? action : LZMA_RUN); + + if (ret != LZMA_OK && ret != LZMA_STREAM_END) { + fprintf(stderr, "%s:%u: %s: ret == %d\n", + __FILE__, __LINE__, __func__, ret); + exit(1); + } + + fwrite(out, 1, CHUNK - strm.avail_out, stdout); + + } while (size > 0 || strm.avail_out == 0); + + if ((action == LZMA_RUN && ret != LZMA_OK) + || (action != LZMA_RUN && ret != LZMA_STREAM_END)) { + fprintf(stderr, "%s:%u: %s: ret == %d\n", + __FILE__, __LINE__, __func__, ret); + exit(1); + } +} + + +int +main(int argc, char **argv) +{ + file_in = argc > 1 ? fopen(argv[1], "rb") : stdin; + + // Config + lzma_options_lzma opt_lzma = { + .dict_size = 1U << 16, + .lc = LZMA_LC_DEFAULT, + .lp = LZMA_LP_DEFAULT, + .pb = LZMA_PB_DEFAULT, + .preset_dict = NULL, + .persistent = true, + .mode = LZMA_MODE_NORMAL, + .nice_len = 32, + .mf = LZMA_MF_HC3, + .depth = 0, + }; + + lzma_options_delta opt_delta = { + .dist = 16 + }; + + lzma_options_subblock opt_subblock = { + .allow_subfilters = true, + .alignment = 8, // LZMA_SUBBLOCK_ALIGNMENT_DEFAULT, + .subblock_data_size = LZMA_SUBBLOCK_DATA_SIZE_DEFAULT, + .rle = 1, // LZMA_SUBBLOCK_RLE_OFF, + .subfilter_mode = LZMA_SUBFILTER_SET, + }; + opt_subblock.subfilter_options.id = LZMA_FILTER_LZMA1; + opt_subblock.subfilter_options.options = &opt_lzma; + opt_subblock.subfilter_options.id = LZMA_FILTER_DELTA; + opt_subblock.subfilter_options.options = &opt_delta; + + lzma_filter filters[LZMA_FILTERS_MAX + 1]; + filters[0].id = LZMA_FILTER_LZMA2; + filters[0].options = &opt_lzma; + filters[1].id = LZMA_VLI_UNKNOWN; + + // Init + if (lzma_stream_encoder(&strm, filters, LZMA_CHECK_CRC32) != LZMA_OK) { + fprintf(stderr, "init failed\n"); + exit(1); + } + + // Encoding + + encode(0, LZMA_SYNC_FLUSH); + encode(6, LZMA_SYNC_FLUSH); + encode(0, LZMA_SYNC_FLUSH); + encode(7, LZMA_SYNC_FLUSH); + encode(0, LZMA_SYNC_FLUSH); + encode(0, LZMA_FINISH); +/* + encode(53, LZMA_SYNC_FLUSH); +// opt_lzma.literal_context_bits = 2; +// opt_lzma.literal_pos_bits = 1; +// opt_lzma.pos_bits = 0; + encode(404, LZMA_FINISH); +*/ + // Clean up + lzma_end(&strm); + + return 0; + + // Prevent useless warnings so we don't need to have special CFLAGS + // to disable -Werror. + (void)opt_lzma; + (void)opt_subblock; + (void)opt_delta; +} diff --git a/Build/source/extra/xz-4.999.9beta/doc/faq.txt b/Build/source/extra/xz-4.999.9beta/doc/faq.txt new file mode 100644 index 00000000000..48c4ec711b8 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/doc/faq.txt @@ -0,0 +1,122 @@ + +XZ Utils FAQ +============ + +Q: What do the letters XZ mean? + +A: Nothing. They are just two letters, which come from the file format + suffix .xz. The .xz suffix was selected, because it seemed to be + pretty much unused. It is no deeper meaning. + + +Q: What are LZMA and LZMA2? + +A: LZMA stands for Lempel-Ziv-Markov chain-Algorithm. It is the name + of the compression algorithm designed by Igor Pavlov for 7-Zip. + LZMA is based on LZ77 and range encoding. + + LZMA2 is an updated version of the original LZMA to fix a couple of + practical issues. In context of XZ Utils, LZMA is called LZMA1 to + emphasize that LZMA is not the same thing as LZMA2. LZMA2 is the + primary compression algorithm in the .xz file format. + + +Q: There are many LZMA related projects. How does XZ Utils relate to them? + +A: 7-Zip and LZMA SDK are the original projects. LZMA SDK is roughly + a subset of the 7-Zip source tree. + + p7zip is 7-Zip's command line tools ported to POSIX-like systems. + + LZMA Utils provide a gzip-like lzma tool for POSIX-like systems. + LZMA Utils are based on LZMA SDK. XZ Utils are the successor to + LZMA Utils. + + There are several other projects using LZMA. Most are more or less + based on LZMA SDK. + + +Q: Do XZ Utils support the .7z format? + +A: No. Use 7-Zip (Windows) or p7zip (POSIX-like systems) to handle .7z + files. + + +Q: I have many .tar.7z files. Can I convert them to .tar.xz without + spending hours recompressing the data? + +A: In the "extra" directory, there is a script named 7z2lzma.bash which + is able to convert some .7z files to the .lzma format (not .xz). It + needs the 7za (or 7z) command from p7zip. The script may silently + produce corrupt output if certain assumptions are not met, so + decompress the resulting .lzma file and compare it against the + original before deleting the original file! + + +Q: I have many .lzma files. Can I quickly convert them to the .xz format? + +A: For now, no. Since XZ Utils supports the .lzma format, it's usually + not too bad to keep the old files in the old format. If you want to + do the conversion anyway, you need to decompress the .lzma files and + then recompress to the .xz format. + + Technically, there is a way to make the conversion relatively fast + (roughly twice the time that normal decompression takes). Writing + such a tool would take quite a bit time though, and would probably + be useful to only a few people. If you really want such a conversion + tool, contact Lasse Collin and offer some money. + + +Q: Can I recover parts of a broken .xz file (e.g. corrupted CD-R)? + +A: It may be possible if the file consists of multiple blocks, which + typically is not the case if the file was created in single-threaded + mode. There is no recovery program yet. + + +Q: Is (some part of) XZ Utils patented? + +A: Lasse Collin is not aware of any patents that could affect XZ Utils. + However, due to nature of software patents, it's not possible to + guarantee that XZ Utils isn't affected by any third party patent(s). + + +Q: Where can I find documentation about the file format and algorithms? + +A: The .xz format is documented in xz-file-format.txt. It is a container + format only, and doesn't include descriptions of any non-trivial + filters. + + Documenting LZMA and LZMA2 is planned, but for now, there is no other + documentation that the source code. Before you begin, you should know + the basics of LZ77 and range coding algorithms. LZMA is based on LZ77, + but LZMA is *a lot* more complex. Range coding is used to compress + the final bitstream like Huffman coding is used in Deflate. + + +Q: I cannot find BCJ and BCJ2 filters. Don't they exist in liblzma? + +A: BCJ filter is called "x86" in liblzma. BCJ2 is not included, + because it requires using more than one encoded output stream. + + +Q: How do I build a program that needs liblzmadec (lzmadec.h)? + +A: liblzmadec is part of LZMA Utils. XZ Utils has liblzma, but no + liblzmadec. The code using liblzmadec should be ported to use + liblzma instead. If you cannot or don't want to do that, download + LZMA Utils from . + + +Q: The default build of liblzma is too big. How can I make it smaller? + +A: Give --enable-small to the configure script. Use also appropriate + --enable or --disable options to include only those filter encoders + and decoders and integrity checks that you actually need. Use + CFLAGS=-Os (with GCC) or equivalent to tell your compiler to optimize + for size. See INSTALL for information about configure options. + + If the result is still too big, take a look at XZ Embedded. It is + a separate project, which provides a limited but signinificantly + smaller XZ decoder implementation than XZ Utils. + diff --git a/Build/source/extra/xz-4.999.9beta/doc/history.txt b/Build/source/extra/xz-4.999.9beta/doc/history.txt new file mode 100644 index 00000000000..c97492e81a0 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/doc/history.txt @@ -0,0 +1,149 @@ + +History of LZMA Utils and XZ Utils +================================== + +Tukaani distribution + + In 2005, there was a small group working on Tukaani distribution, which + was a Slackware fork. One of the project goals was to fit the distro on + a single 700 MiB ISO-9660 image. Using LZMA instead of gzip helped a + lot. Roughly speaking, one could fit data that took 1000 MiB in gzipped + form into 700 MiB with LZMA. Naturally compression ratio varied across + packages, but this was what we got on average. + + Slackware packages have traditionally had .tgz as the filename suffix, + which is an abbreviation of .tar.gz. A logical naming for LZMA + compressed packages was .tlz, being an abbreviation of .tar.lzma. + + At the end of the year 2007, there was no distribution under the + Tukaani project anymore, but development of LZMA Utils was kept going. + Still, there were .tlz packages around, because at least Vector Linux + (a Slackware based distribution) used LZMA for its packages. + + First versions of the modified pkgtools used the LZMA_Alone tool from + Igor Pavlov's LZMA SDK as is. It was fine, because users wouldn't need + to interact with LZMA_Alone directly. But people soon wanted to use + LZMA for other files too, and the interface of LZMA_Alone wasn't + comfortable for those used to gzip and bzip2. + + +First steps of LZMA Utils + + The first version of LZMA Utils (4.22.0) included a shell script called + lzmash. It was wrapper that had gzip-like command line interface. It + used the LZMA_Alone tool from LZMA SDK to do all the real work. zgrep, + zdiff, and related scripts from gzip were adapted work with LZMA and + were part of the first LZMA Utils release too. + + LZMA Utils 4.22.0 included also lzmadec, which was a small (less than + 10 KiB) decoder-only command line tool. It was written on top of the + decoder-only C code found from the LZMA SDK. lzmadec was convenient in + situations where LZMA_Alone (a few hundred KiB) would be too big. + + lzmash and lzmadec were written by Lasse Collin. + + +Second generation + + The lzmash script was an ugly and not very secure hack. The last + version of LZMA Utils to use lzmash was 4.27.1. + + LZMA Utils 4.32.0beta1 introduced a new lzma command line tool written + by Ville Koskinen. It was written in C++, and used the encoder and + decoder from C++ LZMA SDK with little modifications. This tool replaced + both the lzmash script and the LZMA_Alone command line tool in LZMA + Utils. + + Introducing this new tool caused some temporary incompatibilities, + because LZMA_Alone executable was simply named lzma like the new + command line tool, but they had completely different command line + interface. The file format was still the same. + + Lasse wrote liblzmadec, which was a small decoder-only library based + on the C code found from LZMA SDK. liblzmadec had API similar to zlib, + although there were some significant differences, which made it + non-trivial to use it in some applications designed for zlib and + libbzip2. + + The lzmadec command line tool was converted to use liblzmadec. + + Alexandre Sauvé helped converting build system to use GNU Autotools. + This made is easier to test for certain less portable features needed + by the new command line tool. + + Since the new command line tool never got completely finished (for + example, it didn't support LZMA_OPT environment variable), the intent + was to not call 4.32.x stable. Similarly, liblzmadec wasn't polished, + but appeared to work well enough, so some people started using it too. + + Because the development of the third generation of LZMA Utils was + delayed considerably (3-4 years), the 4.32.x branch had to be kept + maintained. It got some bug fixes now and then, and finally it was + decided to call it stable, although most of the missing features were + never added. + + +File format problems + + The file format used by LZMA_Alone was primitive. It was designed for + embedded systems in mind, and thus provided only minimal set of + features. The two biggest problems for non-embedded use were lack of + magic bytes and integrity check. + + Igor and Lasse started developing a new file format with some help + from Ville Koskinen. Also Mark Adler, Mikko Pouru, H. Peter Anvin, + and Lars Wirzenius helped with some minor things at some point of the + development. Designing the new format took quite a long time (actually, + too long time would be more appropriate expression). It was mostly + because Lasse was quite slow at getting things done due to personal + reasons. + + Originally the new format was supposed to use the same .lzma suffix + that was already used by the old file format. Switching to the new + format wouldn't have caused much trouble when the old format wasn't + used by many people. But since the development of the new format took + so long time, the old format got quite popular, and it was decided + that the new file format must use a different suffix. + + It was decided to use .xz as the suffix of the new file format. The + first stable .xz file format specification was finally released in + December 2008. In addition to fixing the most obvious problems of + the old .lzma format, the .xz format added some new features like + support for multiple filters (compression algorithms), filter chaining + (like piping on the command line), and limited random-access reading. + + Currently the primary compression algorithm used in .xz is LZMA2. + It is an extension on top of the original LZMA to fix some practical + problems: LZMA2 adds support for flushing the encoder, uncompressed + chunks, eases stateful decoder implementations, and improves support + for multithreading. Since LZMA2 is better than the original LZMA, the + original LZMA is not supported in .xz. + + +Transition to XZ Utils + + The early versions of XZ Utils were called LZMA Utils. The first + releases were 4.42.0alphas. They dropped the rest of the C++ LZMA SDK. + The code was still directly based on LZMA SDK but ported to C and + converted from callback API to stateful API. Later, Igor Pavlov made + C version of the LZMA encoder too; these ports from C++ to C were + independent in LZMA SDK and LZMA Utils. + + The core of the new LZMA Utils was liblzma, a compression library with + zlib-like API. liblzma supported both the old and new file format. The + gzip-like lzma command line tool was rewritten to use liblzma. + + The new LZMA Utils code base was renamed to XZ Utils when the name + of the new file format had been decided. The liblzma compression + library retained its name though, because changing it would have + caused unnecessary breakage in applications already using the early + liblzma snapshots. + + The xz command line tool can emulate the gzip-like lzma tool by + creating appropriate symlinks (e.g. lzma -> xz). Thus, practically + all scripts using the lzma tool from LZMA Utils will work as is with + XZ Utils (and will keep using the old .lzma format). Still, the .lzma + format is more or less deprecated. XZ Utils will keep supporting it, + but new applications should use the .xz format, and migrating old + applications to .xz is often a good idea too. + diff --git a/Build/source/extra/xz-4.999.9beta/doc/lzma-file-format.txt b/Build/source/extra/xz-4.999.9beta/doc/lzma-file-format.txt new file mode 100644 index 00000000000..21fcb19fdcd --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/doc/lzma-file-format.txt @@ -0,0 +1,166 @@ + +The .lzma File Format +===================== + + 0. Preface + 0.1. Notices and Acknowledgements + 0.2. Changes + 1. File Format + 1.1. Header + 1.1.1. Properties + 1.1.2. Dictionary Size + 1.1.3. Uncompressed Size + 1.2. LZMA Compressed Data + 2. References + + +0. Preface + + This document describes the .lzma file format, which is + sometimes also called LZMA_Alone format. It is a legacy file + format, which is being or has been replaced by the .xz format. + The MIME type of the .lzma format is `application/x-lzma'. + + The most commonly used software to handle .lzma files are + LZMA SDK, LZMA Utils, 7-Zip, and XZ Utils. This document + describes some of the differences between these implementations + and gives hints what subset of the .lzma format is the most + portable. + + +0.1. Notices and Acknowledgements + + This file format was designed by Igor Pavlov for use in + LZMA SDK. This document was written by Lasse Collin + using the documentation found + from the LZMA SDK. + + This document has been put into the public domain. + + +0.2. Changes + + Last modified: 2009-05-01 11:15+0300 + + +1. File Format + + +-+-+-+-+-+-+-+-+-+-+-+-+-+==========================+ + | Header | LZMA Compressed Data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+==========================+ + + The .lzma format file consist of 13-byte Header followed by + the LZMA Compressed Data. + + Unlike the .gz, .bz2, and .xz formats, it is not possible to + concatenate multiple .lzma files as is and expect the + decompression tool to decode the resulting file as if it were + a single .lzma file. + + For example, the command line tools from LZMA Utils and + LZMA SDK silently ignore all the data after the first .lzma + stream. In contrast, the command line tool from XZ Utils + considers the .lzma file to be corrupt if there is data after + the first .lzma stream. + + +1.1. Header + + +------------+----+----+----+----+--+--+--+--+--+--+--+--+ + | Properties | Dictionary Size | Uncompressed Size | + +------------+----+----+----+----+--+--+--+--+--+--+--+--+ + + +1.1.1. Properties + + The Properties field contains three properties. An abbreviation + is given in parentheses, followed by the value range of the + property. The field consists of + + 1) the number of literal context bits (lc, [0, 8]); + 2) the number of literal position bits (lp, [0, 4]); and + 3) the number of position bits (pb, [0, 4]). + + The properties are encoded using the following formula: + + Properties = (pb * 5 + lp) * 9 + lc + + The following C code illustrates a straightforward way to + decode the Properties field: + + uint8_t lc, lp, pb; + uint8_t prop = get_lzma_properties(); + if (prop > (4 * 5 + 4) * 9 + 8) + return LZMA_PROPERTIES_ERROR; + + pb = prop / (9 * 5); + prop -= pb * 9 * 5; + lp = prop / 9; + lc = prop - lp * 9; + + XZ Utils has an additional requirement: lc + lp <= 4. Files + which don't follow this requirement cannot be decompressed + with XZ Utils. Usually this isn't a problem since the most + common lc/lp/pb values are 3/0/2. It is the only lc/lp/pb + combination that the files created by LZMA Utils can have, + but LZMA Utils can decompress files with any lc/lp/pb. + + +1.1.2. Dictionary Size + + Dictionary Size is stored as an unsigned 32-bit little endian + integer. Any 32-bit value is possible, but for maximum + portability, only sizes of 2^n and 2^n + 2^(n-1) should be + used. + + LZMA Utils creates only files with dictionary size 2^n, + 16 <= n <= 25. LZMA Utils can decompress files with any + dictionary size. + + XZ Utils creates and decompresses .lzma files only with + dictionary sizes 2^n and 2^n + 2^(n-1). If some other + dictionary size is specified when compressing, the value + stored in the Dictionary Size field is a rounded up, but the + specified value is still used in the actual compression code. + + +1.1.3. Uncompressed Size + + Uncompressed Size is stored as unsigned 64-bit little endian + integer. A special value of 0xFFFF_FFFF_FFFF_FFFF indicates + that Uncompressed Size is unknown. End of Payload Marker (*) + is used if and only if Uncompressed Size is unknown. + + XZ Utils rejects files whose Uncompressed Size field specifies + a known size that is 256 GiB or more. This is to reject false + positives when trying to guess if the input file is in the + .lzma format. When Uncompressed Size is unknown, there is no + limit for the uncompressed size of the file. + + (*) Some tools use the term End of Stream (EOS) marker + instead of End of Payload Marker. + + +1.2. LZMA Compressed Data + + Detailed description of the format of this field is out of + scope of this document. + + +2. References + + LZMA SDK - The original LZMA implementation + http://7-zip.org/sdk.html + + 7-Zip + http://7-zip.org/ + + LZMA Utils - LZMA adapted to POSIX-like systems + http://tukaani.org/lzma/ + + XZ Utils - The next generation of LZMA Utils + http://tukaani.org/xz/ + + The .xz file format - The successor of the the .lzma format + http://tukaani.org/xz/xz-file-format.txt + diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xz-a4.pdf b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xz-a4.pdf new file mode 100644 index 00000000000..0b6805432e5 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xz-a4.pdf differ diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzdec-a4.pdf b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzdec-a4.pdf new file mode 100644 index 00000000000..92e52eec78e Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzdec-a4.pdf differ diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzdiff-a4.pdf b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzdiff-a4.pdf new file mode 100644 index 00000000000..80aad7a9df2 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzdiff-a4.pdf differ diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzgrep-a4.pdf b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzgrep-a4.pdf new file mode 100644 index 00000000000..2c928946d92 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzgrep-a4.pdf differ diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzless-a4.pdf b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzless-a4.pdf new file mode 100644 index 00000000000..a6374692f4d Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzless-a4.pdf differ diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzmore-a4.pdf b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzmore-a4.pdf new file mode 100644 index 00000000000..b36a5fdfe6d Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-a4/xzmore-a4.pdf differ diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xz-letter.pdf b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xz-letter.pdf new file mode 100644 index 00000000000..6df9ab66aff Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xz-letter.pdf differ diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzdec-letter.pdf b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzdec-letter.pdf new file mode 100644 index 00000000000..f056c2ee348 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzdec-letter.pdf differ diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzdiff-letter.pdf b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzdiff-letter.pdf new file mode 100644 index 00000000000..39bc0f0a287 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzdiff-letter.pdf differ diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzgrep-letter.pdf b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzgrep-letter.pdf new file mode 100644 index 00000000000..677186a1b44 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzgrep-letter.pdf differ diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzless-letter.pdf b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzless-letter.pdf new file mode 100644 index 00000000000..dcbd4871228 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzless-letter.pdf differ diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzmore-letter.pdf b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzmore-letter.pdf new file mode 100644 index 00000000000..e22857d6894 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/doc/man/pdf-letter/xzmore-letter.pdf differ diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/txt/xz.txt b/Build/source/extra/xz-4.999.9beta/doc/man/txt/xz.txt new file mode 100644 index 00000000000..e3dacde4a11 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/doc/man/txt/xz.txt @@ -0,0 +1,786 @@ +XZ(1) XZ Utils XZ(1) + + + +NAME + xz, unxz, xzcat, lzma, unlzma, lzcat - Compress or decompress .xz and + .lzma files + +SYNOPSIS + xz [option]... [file]... + + unxz is equivalent to xz --decompress. + xzcat is equivalent to xz --decompress --stdout. + lzma is equivalent to xz --format=lzma. + unlzma is equivalent to xz --format=lzma --decompress. + lzcat is equivalent to xz --format=lzma --decompress --stdout. + + When writing scripts that need to decompress files, it is recommended + to always use the name xz with appropriate arguments (xz -d or xz -dc) + instead of the names unxz and xzcat. + +DESCRIPTION + xz is a general-purpose data compression tool with command line syntax + similar to gzip(1) and bzip2(1). The native file format is the .xz + format, but also the legacy .lzma format and raw compressed streams + with no container format headers are supported. + + xz compresses or decompresses each file according to the selected oper- + ation mode. If no files are given or file is -, xz reads from standard + input and writes the processed data to standard output. xz will refuse + (display an error and skip the file) to write compressed data to stan- + dard output if it is a terminal. Similarly, xz will refuse to read com- + pressed data from standard input if it is a terminal. + + Unless --stdout is specified, files other than - are written to a new + file whose name is derived from the source file name: + + o When compressing, the suffix of the target file format (.xz or + .lzma) is appended to the source filename to get the target file- + name. + + o When decompressing, the .xz or .lzma suffix is removed from the + filename to get the target filename. xz also recognizes the suf- + fixes .txz and .tlz, and replaces them with the .tar suffix. + + If the target file already exists, an error is displayed and the file + is skipped. + + Unless writing to standard output, xz will display a warning and skip + the file if any of the following applies: + + o File is not a regular file. Symbolic links are not followed, thus + they are never considered to be regular files. + + o File has more than one hardlink. + + o File has setuid, setgid, or sticky bit set. + + o The operation mode is set to compress, and the file already has a + suffix of the target file format (.xz or .txz when compressing to + the .xz format, and .lzma or .tlz when compressing to the .lzma for- + mat). + + o The operation mode is set to decompress, and the file doesn't have a + suffix of any of the supported file formats (.xz, .txz, .lzma, or + .tlz). + + After successfully compressing or decompressing the file, xz copies the + owner, group, permissions, access time, and modification time from the + source file to the target file. If copying the group fails, the permis- + sions are modified so that the target file doesn't become accessible to + users who didn't have permission to access the source file. xz doesn't + support copying other metadata like access control lists or extended + attributes yet. + + Once the target file has been successfully closed, the source file is + removed unless --keep was specified. The source file is never removed + if the output is written to standard output. + + Sending SIGINFO or SIGUSR1 to the xz process makes it print progress + information to standard error. This has only limited use since when + standard error is a terminal, using --verbose will display an automati- + cally updating progress indicator. + + Memory usage + The memory usage of xz varies from a few hundred kilobytes to several + gigabytes depending on the compression settings. The settings used when + compressing a file affect also the memory usage of the decompressor. + Typically the decompressor needs only 5 % to 20 % of the amount of RAM + that the compressor needed when creating the file. Still, the worst- + case memory usage of the decompressor is several gigabytes. + + To prevent uncomfortable surprises caused by huge memory usage, xz has + a built-in memory usage limiter. The default limit is 40 % of total + physical RAM. While operating systems provide ways to limit the memory + usage of processes, relying on it wasn't deemed to be flexible enough. + + When compressing, if the selected compression settings exceed the mem- + ory usage limit, the settings are automatically adjusted downwards and + a notice about this is displayed. As an exception, if the memory usage + limit is exceeded when compressing with --format=raw, an error is dis- + played and xz will exit with exit status 1. + + If source file cannot be decompressed without exceeding the memory + usage limit, an error message is displayed and the file is skipped. + Note that compressed files may contain many blocks, which may have been + compressed with different settings. Typically all blocks will have + roughly the same memory requirements, but it is possible that a block + later in the file will exceed the memory usage limit, and an error + about too low memory usage limit gets displayed after some data has + already been decompressed. + + The absolute value of the active memory usage limit can be seen near + the bottom of the output of --long-help. The default limit can be + overriden with --memory=limit. + +OPTIONS + Integer suffixes and special values + In most places where an integer argument is expected, an optional suf- + fix is supported to easily indicate large integers. There must be no + space between the integer and the suffix. + + k or kB + The integer is multiplied by 1,000 (10^3). For example, 5k or + 5kB equals 5000. + + Ki or KiB + The integer is multiplied by 1,024 (2^10). + + M or MB + The integer is multiplied by 1,000,000 (10^6). + + Mi or MiB + The integer is multiplied by 1,048,576 (2^20). + + G or GB + The integer is multiplied by 1,000,000,000 (10^9). + + Gi or GiB + The integer is multiplied by 1,073,741,824 (2^30). + + A special value max can be used to indicate the maximum integer value + supported by the option. + + Operation mode + If multiple operation mode options are given, the last one takes + effect. + + -z, --compress + Compress. This is the default operation mode when no operation + mode option is specified, and no other operation mode is implied + from the command name (for example, unxz implies --decompress). + + -d, --decompress, --uncompress + Decompress. + + -t, --test + Test the integrity of compressed files. No files are created or + removed. This option is equivalent to --decompress --stdout + except that the decompressed data is discarded instead of being + written to standard output. + + -l, --list + View information about the compressed files. No uncompressed + output is produced, and no files are created or removed. In list + mode, the program cannot read the compressed data from standard + input or from other unseekable sources. + + This feature has not been implemented yet. + + Operation modifiers + -k, --keep + Keep (don't delete) the input files. + + -f, --force + This option has several effects: + + o If the target file already exists, delete it before compress- + ing or decompressing. + + o Compress or decompress even if the input is not a regular + file, has more than one hardlink, or has setuid, setgid, or + sticky bit set. The setuid, setgid, and sticky bits are not + copied to the target file. + + o If combined with --decompress --stdout and xz doesn't recog- + nize the type of the source file, xz will copy the source + file as is to standard output. This allows using xzcat + --force like cat(1) for files that have not been compressed + with xz. Note that in future, xz might support new com- + pressed file formats, which may make xz decompress more types + of files instead of copying them as is to standard output. + --format=format can be used to restrict xz to decompress only + a single file format. + + o Allow writing compressed data to a terminal, and reading com- + pressed data from a terminal. + + -c, --stdout, --to-stdout + Write the compressed or decompressed data to standard output + instead of a file. This implies --keep. + + -S .suf, --suffix=.suf + When compressing, use .suf as the suffix for the target file + instead of .xz or .lzma. If not writing to standard output and + the source file already has the suffix .suf, a warning is dis- + played and the file is skipped. + + When decompressing, recognize also files with the suffix .suf in + addition to files with the .xz, .txz, .lzma, or .tlz suffix. If + the source file has the suffix .suf, the suffix is removed to + get the target filename. + + When compressing or decompressing raw streams (--format=raw), + the suffix must always be specified unless writing to standard + output, because there is no default suffix for raw streams. + + --files[=file] + Read the filenames to process from file; if file is omitted, + filenames are read from standard input. Filenames must be termi- + nated with the newline character. If filenames are given also as + command line arguments, they are processed before the filenames + read from file. + + --files0[=file] + This is identical to --files[=file] except that the filenames + must be terminated with the null character. + + Basic file format and compression options + -F format, --format=format + Specify the file format to compress or decompress: + + o auto: This is the default. When compressing, auto is equiva- + lent to xz. When decompressing, the format of the input file + is autodetected. Note that raw streams (created with --for- + mat=raw) cannot be autodetected. + + o xz: Compress to the .xz file format, or accept only .xz files + when decompressing. + + o lzma or alone: Compress to the legacy .lzma file format, or + accept only .lzma files when decompressing. The alternative + name alone is provided for backwards compatibility with LZMA + Utils. + + o raw: Compress or uncompress a raw stream (no headers). This + is meant for advanced users only. To decode raw streams, you + need to set not only --format=raw but also specify the filter + chain, which would normally be stored in the container format + headers. + + -C check, --check=check + Specify the type of the integrity check, which is calculated + from the uncompressed data. This option has an effect only when + compressing into the .xz format; the .lzma format doesn't sup- + port integrity checks. The integrity check (if any) is verified + when the .xz file is decompressed. + + Supported check types: + + o none: Don't calculate an integrity check at all. This is usu- + ally a bad idea. This can be useful when integrity of the + data is verified by other means anyway. + + o crc32: Calculate CRC32 using the polynomial from IEEE-802.3 + (Ethernet). + + o crc64: Calculate CRC64 using the polynomial from ECMA-182. + This is the default, since it is slightly better than CRC32 + at detecting damaged files and the speed difference is negli- + gible. + + o sha256: Calculate SHA-256. This is somewhat slower than CRC32 + and CRC64. + + Integrity of the .xz headers is always verified with CRC32. It + is not possible to change or disable it. + + -0 ... -9 + Select compression preset. If a preset level is specified multi- + ple times, the last one takes effect. + + The compression preset levels can be categorised roughly into + three categories: + + -0 ... -2 + Fast presets with relatively low memory usage. -1 and -2 + should give compression speed and ratios comparable to + bzip2 -1 and bzip2 -9, respectively. Currently -0 is not + very good (not much faster than -1 but much worse com- + pression). In future, -0 may be indicate some fast algo- + rithm instead of LZMA2. + + -3 ... -5 + Good compression ratio with low to medium memory usage. + These are significantly slower than levels 0-2. + + -6 ... -9 + Excellent compression with medium to high memory usage. + These are also slower than the lower preset levels. The + default is -6. Unless you want to maximize the compres- + sion ratio, you probably don't want a higher preset level + than -7 due to speed and memory usage. + + The exact compression settings (filter chain) used by each pre- + set may vary between xz versions. The settings may also vary + between files being compressed, if xz determines that modified + settings will probably give better compression ratio without + significantly affecting compression time or memory usage. + + Because the settings may vary, the memory usage may vary too. + The following table lists the maximum memory usage of each pre- + set level, which won't be exceeded even in future versions of + xz. + + FIXME: The table below is just a rough idea. + + Preset Compression Decompression + -0 6 MiB 1 MiB + -1 6 MiB 1 MiB + -2 10 MiB 1 MiB + -3 20 MiB 2 MiB + -4 30 MiB 3 MiB + -5 60 MiB 6 MiB + -6 100 MiB 10 MiB + -7 200 MiB 20 MiB + -8 400 MiB 40 MiB + -9 800 MiB 80 MiB + + When compressing, xz automatically adjusts the compression set- + tings downwards if the memory usage limit would be exceeded, so + it is safe to specify a high preset level even on systems that + don't have lots of RAM. + + --fast and --best + These are somewhat misleading aliases for -0 and -9, respec- + tively. These are provided only for backwards compatibility + with LZMA Utils. Avoid using these options. + + Especially the name of --best is misleading, because the defini- + tion of best depends on the input data, and that usually people + don't want the very best compression ratio anyway, because it + would be very slow. + + -e, --extreme + Modify the compression preset (-0 ... -9) so that a little bit + better compression ratio can be achieved without increasing mem- + ory usage of the compressor or decompressor (exception: compres- + sor memory usage may increase a little with presets -0 ... -2). + The downside is that the compression time will increase dramati- + cally (it can easily double). + + -M limit, --memory=limit + Set the memory usage limit. If this option is specied multiple + times, the last one takes effect. The limit can be specified in + multiple ways: + + o The limit can be an absolute value in bytes. Using an integer + suffix like MiB can be useful. Example: --memory=80MiB + + o The limit can be specified as a percentage of physical RAM. + Example: --memory=70% + + o The limit can be reset back to its default value (currently + 40 % of physical RAM) by setting it to 0. + + o The memory usage limiting can be effectively disabled by set- + ting limit to max. This isn't recommended. It's usually bet- + ter to use, for example, --memory=90%. + + The current limit can be seen near the bottom of the output of + the --long-help option. + + -T threads, --threads=threads + Specify the maximum number of worker threads to use. The default + is the number of available CPU cores. You can see the current + value of threads near the end of the output of the --long-help + option. + + The actual number of worker threads can be less than threads if + using more threads would exceed the memory usage limit. In + addition to CPU-intensive worker threads, xz may use a few aux- + iliary threads, which don't use a lot of CPU time. + + Multithreaded compression and decompression are not implemented + yet, so this option has no effect for now. + + Custom compressor filter chains + A custom filter chain allows specifying the compression settings in + detail instead of relying on the settings associated to the preset lev- + els. When a custom filter chain is specified, the compression preset + level options (-0 ... -9 and --extreme) are silently ignored. + + A filter chain is comparable to piping on the UN*X command line. When + compressing, the uncompressed input goes to the first filter, whose + output goes to the next filter (if any). The output of the last filter + gets written to the compressed file. The maximum number of filters in + the chain is four, but typically a filter chain has only one or two + filters. + + Many filters have limitations where they can be in the filter chain: + some filters can work only as the last filter in the chain, some only + as a non-last filter, and some work in any position in the chain. + Depending on the filter, this limitation is either inherent to the fil- + ter design or exists to prevent security issues. + + A custom filter chain is specified by using one or more filter options + in the order they are wanted in the filter chain. That is, the order of + filter options is significant! When decoding raw streams (--for- + mat=raw), the filter chain is specified in the same order as it was + specified when compressing. + + Filters take filter-specific options as a comma-separated list. Extra + commas in options are ignored. Every option has a default value, so you + need to specify only those you want to change. + + --lzma1[=options], --lzma2[=options] + Add LZMA1 or LZMA2 filter to the filter chain. These filter can + be used only as the last filter in the chain. + + LZMA1 is a legacy filter, which is supported almost solely due + to the legacy .lzma file format, which supports only LZMA1. + LZMA2 is an updated version of LZMA1 to fix some practical + issues of LZMA1. The .xz format uses LZMA2, and doesn't support + LZMA1 at all. Compression speed and ratios of LZMA1 and LZMA2 + are practically the same. + + LZMA1 and LZMA2 share the same set of options: + + preset=preset + Reset all LZMA1 or LZMA2 options to preset. Preset con- + sist of an integer, which may be followed by single-let- + ter preset modifiers. The integer can be from 0 to 9, + matching the command line options -0 ... -9. The only + supported modifier is currently e, which matches + --extreme. + + The default preset is 6, from which the default values + for the rest of the LZMA1 or LZMA2 options are taken. + + dict=size + Dictionary (history buffer) size indicates how many bytes + of the recently processed uncompressed data is kept in + memory. One method to reduce size of the uncompressed + data is to store distance-length pairs, which indicate + what data to repeat from the dictionary buffer. The big- + ger the dictionary, the better the compression ratio usu- + ally is, but dictionaries bigger than the uncompressed + data are waste of RAM. + + Typical dictionary size is from 64 KiB to 64 MiB. The + minimum is 4 KiB. The maximum for compression is cur- + rently 1.5 GiB. The decompressor already supports dictio- + naries up to one byte less than 4 GiB, which is the maxi- + mum for LZMA1 and LZMA2 stream formats. + + Dictionary size has the biggest effect on compression + ratio. Dictionary size and match finder together deter- + mine the memory usage of the LZMA1 or LZMA2 encoder. The + same dictionary size is required for decompressing that + was used when compressing, thus the memory usage of the + decoder is determined by the dictionary size used when + compressing. + + lc=lc Specify the number of literal context bits. The minimum + is 0 and the maximum is 4; the default is 3. In addi- + tion, the sum of lc and lp must not exceed 4. + + lp=lp Specify the number of literal position bits. The minimum + is 0 and the maximum is 4; the default is 0. + + pb=pb Specify the number of position bits. The minimum is 0 and + the maximum is 4; the default is 2. + + mode=mode + Compression mode specifies the function used to analyze + the data produced by the match finder. Supported modes + are fast and normal. The default is fast for presets 0-2 + and normal for presets 3-9. + + mf=mf Match finder has a major effect on encoder speed, memory + usage, and compression ratio. Usually Hash Chain match + finders are faster than Binary Tree match finders. Hash + Chains are usually used together with mode=fast and + Binary Trees with mode=normal. The memory usage formulas + are only rough estimates, which are closest to reality + when dict is a power of two. + + hc3 Hash Chain with 2- and 3-byte hashing + Minimum value for nice: 3 + Memory usage: dict * 7.5 (if dict <= 16 MiB); + dict * 5.5 + 64 MiB (if dict > 16 MiB) + + hc4 Hash Chain with 2-, 3-, and 4-byte hashing + Minimum value for nice: 4 + Memory usage: dict * 7.5 + + bt2 Binary Tree with 2-byte hashing + Minimum value for nice: 2 + Memory usage: dict * 9.5 + + bt3 Binary Tree with 2- and 3-byte hashing + Minimum value for nice: 3 + Memory usage: dict * 11.5 (if dict <= 16 MiB); + dict * 9.5 + 64 MiB (if dict > 16 MiB) + + bt4 Binary Tree with 2-, 3-, and 4-byte hashing + Minimum value for nice: 4 + Memory usage: dict * 11.5 + + nice=nice + Specify what is considered to be a nice length for a + match. Once a match of at least nice bytes is found, the + algorithm stops looking for possibly better matches. + + nice can be 2-273 bytes. Higher values tend to give bet- + ter compression ratio at expense of speed. The default + depends on the preset level. + + depth=depth + Specify the maximum search depth in the match finder. The + default is the special value 0, which makes the compres- + sor determine a reasonable depth from mf and nice. + + Using very high values for depth can make the encoder + extremely slow with carefully crafted files. Avoid set- + ting the depth over 1000 unless you are prepared to + interrupt the compression in case it is taking too long. + + When decoding raw streams (--format=raw), LZMA2 needs only the + value of dict. LZMA1 needs also lc, lp, and pb. + + --x86[=options] + + --powerpc[=options] + + --ia64[=options] + + --arm[=options] + + --armthumb[=options] + + --sparc[=options] + Add a branch/call/jump (BCJ) filter to the filter chain. These + filters can be used only as non-last filter in the filter chain. + + A BCJ filter converts relative addresses in the machine code to + their absolute counterparts. This doesn't change the size of the + data, but it increases redundancy, which allows e.g. LZMA2 to + get better compression ratio. + + The BCJ filters are always reversible, so using a BCJ filter for + wrong type of data doesn't cause any data loss. However, apply- + ing a BCJ filter for wrong type of data is a bad idea, because + it tends to make the compression ratio worse. + + Different instruction sets have have different alignment: + + Filter Alignment Notes + x86 1 32-bit and 64-bit x86 + PowerPC 4 Big endian only + ARM 4 Little endian only + ARM-Thumb 2 Little endian only + IA-64 16 Big or little endian + SPARC 4 Big or little endian + + Since the BCJ-filtered data is usually compressed with LZMA2, + the compression ratio may be improved slightly if the LZMA2 + options are set to match the alignment of the selected BCJ fil- + ter. For example, with the IA-64 filter, it's good to set pb=4 + with LZMA2 (2^4=16). The x86 filter is an exception; it's usu- + ally good to stick to LZMA2's default four-byte alignment when + compressing x86 executables. + + All BCJ filters support the same options: + + start=offset + Specify the start offset that is used when converting + between relative and absolute addresses. The offset must + be a multiple of the alignment of the filter (see the ta- + ble above). The default is zero. In practice, the + default is good; specifying a custom offset is almost + never useful. + + Specifying a non-zero start offset is probably useful + only if the executable has multiple sections, and there + are many cross-section jumps or calls. Applying a BCJ + filter separately for each section with proper start off- + set and then compressing the result as a single chunk may + give some improvement in compression ratio compared to + applying the BCJ filter with the default offset for the + whole executable. + + --delta[=options] + Add Delta filter to the filter chain. The Delta filter can be + used only as non-last filter in the filter chain. + + Currently only simple byte-wise delta calculation is supported. + It can be useful when compressing e.g. uncompressed bitmap + images or uncompressed PCM audio. However, special purpose algo- + rithms may give significantly better results than Delta + LZMA2. + This is true especially with audio, which compresses faster and + better e.g. with FLAC. + + Supported options: + + dist=distance + Specify the distance of the delta calculation as bytes. + distance must be 1-256. The default is 1. + + For example, with dist=2 and eight-byte input A1 B1 A2 B3 + A3 B5 A4 B7, the output will be A1 B1 01 02 01 02 01 02. + + Other options + -q, --quiet + Suppress warnings and notices. Specify this twice to suppress + errors too. This option has no effect on the exit status. That + is, even if a warning was suppressed, the exit status to indi- + cate a warning is still used. + + -v, --verbose + Be verbose. If standard error is connected to a terminal, xz + will display a progress indicator. Specifying --verbose twice + will give even more verbose output (useful mostly for debug- + ging). + + -Q, --no-warn + Don't set the exit status to 2 even if a condition worth a warn- + ing was detected. This option doesn't affect the verbosity + level, thus both --quiet and --no-warn have to be used to not + display warnings and to not alter the exit status. + + -h, --help + Display a help message describing the most commonly used + options, and exit successfully. + + -H, --long-help + Display a help message describing all features of xz, and exit + successfully + + -V, --version + Display the version number of xz and liblzma. + +EXIT STATUS + 0 All is good. + + 1 An error occurred. + + 2 Something worth a warning occurred, but no actual errors + occurred. + + Notices (not warnings or errors) printed on standard error don't affect + the exit status. + +ENVIRONMENT + XZ_OPT A space-separated list of options is parsed from XZ_OPT before + parsing the options given on the command line. Note that only + options are parsed from XZ_OPT; all non-options are silently + ignored. Parsing is done with getopt_long(3) which is used also + for the command line arguments. + +LZMA UTILS COMPATIBILITY + The command line syntax of xz is practically a superset of lzma, + unlzma, and lzcat as found from LZMA Utils 4.32.x. In most cases, it is + possible to replace LZMA Utils with XZ Utils without breaking existing + scripts. There are some incompatibilities though, which may sometimes + cause problems. + + Compression preset levels + The numbering of the compression level presets is not identical in xz + and LZMA Utils. The most important difference is how dictionary sizes + are mapped to different presets. Dictionary size is roughly equal to + the decompressor memory usage. + + Level xz LZMA Utils + -1 64 KiB 64 KiB + -2 512 KiB 1 MiB + -3 1 MiB 512 KiB + -4 2 MiB 1 MiB + -5 4 MiB 2 MiB + -6 8 MiB 4 MiB + -7 16 MiB 8 MiB + -8 32 MiB 16 MiB + -9 64 MiB 32 MiB + + The dictionary size differences affect the compressor memory usage too, + but there are some other differences between LZMA Utils and XZ Utils, + which make the difference even bigger: + + Level xz LZMA Utils 4.32.x + -1 2 MiB 2 MiB + -2 5 MiB 12 MiB + -3 13 MiB 12 MiB + -4 25 MiB 16 MiB + -5 48 MiB 26 MiB + -6 94 MiB 45 MiB + -7 186 MiB 83 MiB + -8 370 MiB 159 MiB + -9 674 MiB 311 MiB + + The default preset level in LZMA Utils is -7 while in XZ Utils it is + -6, so both use 8 MiB dictionary by default. + + Streamed vs. non-streamed .lzma files + Uncompressed size of the file can be stored in the .lzma header. LZMA + Utils does that when compressing regular files. The alternative is to + mark that uncompressed size is unknown and use end of payload marker to + indicate where the decompressor should stop. LZMA Utils uses this + method when uncompressed size isn't known, which is the case for exam- + ple in pipes. + + xz supports decompressing .lzma files with or without end of payload + marker, but all .lzma files created by xz will use end of payload + marker and have uncompressed size marked as unknown in the .lzma + header. This may be a problem in some (uncommon) situations. For exam- + ple, a .lzma decompressor in an embedded device might work only with + files that have known uncompressed size. If you hit this problem, you + need to use LZMA Utils or LZMA SDK to create .lzma files with known + uncompressed size. + + Unsupported .lzma files + The .lzma format allows lc values up to 8, and lp values up to 4. LZMA + Utils can decompress files with any lc and lp, but always creates files + with lc=3 and lp=0. Creating files with other lc and lp is possible + with xz and with LZMA SDK. + + The implementation of the LZMA1 filter in liblzma requires that the sum + of lc and lp must not exceed 4. Thus, .lzma files which exceed this + limitation, cannot be decompressed with xz. + + LZMA Utils creates only .lzma files which have dictionary size of 2^n + (a power of 2), but accepts files with any dictionary size. liblzma + accepts only .lzma files which have dictionary size of 2^n or 2^n + + 2^(n-1). This is to decrease false positives when autodetecting .lzma + files. + + These limitations shouldn't be a problem in practice, since practically + all .lzma files have been compressed with settings that liblzma will + accept. + + Trailing garbage + When decompressing, LZMA Utils silently ignore everything after the + first .lzma stream. In most situations, this is a bug. This also means + that LZMA Utils don't support decompressing concatenated .lzma files. + + If there is data left after the first .lzma stream, xz considers the + file to be corrupt. This may break obscure scripts which have assumed + that trailing garbage is ignored. + +NOTES + Compressed output may vary + The exact compressed output produced from the same uncompressed input + file may vary between XZ Utils versions even if compression options are + identical. This is because the encoder can be improved (faster or bet- + ter compression) without affecting the file format. The output can vary + even between different builds of the same XZ Utils version, if differ- + ent build options are used or if the endianness of the hardware is dif- + ferent for different builds. + + The above means that implementing --rsyncable to create rsyncable .xz + files is not going to happen without freezing a part of the encoder + implementation, which can then be used with --rsyncable. + + Embedded .xz decompressors + Embedded .xz decompressor implementations like XZ Embedded don't neces- + sarily support files created with check types other than none and + crc32. Since the default is --check=crc64, you must use --check=none + or --check=crc32 when creating files for embedded systems. + + Outside embedded systems, all .xz format decompressors support all the + check types, or at least are able to decompress the file without veri- + fying the integrity check if the particular check is not supported. + + XZ Embedded supports BCJ filters, but only with the default start off- + set. + +SEE ALSO + xzdec(1), gzip(1), bzip2(1) + + XZ Utils: + XZ Embedded: + LZMA SDK: + + + +Tukaani 2009-08-27 XZ(1) diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzdec.txt b/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzdec.txt new file mode 100644 index 00000000000..ee2b820adad --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzdec.txt @@ -0,0 +1,95 @@ +XZDEC(1) XZ Utils XZDEC(1) + + + +NAME + xzdec, lzmadec - Small .xz and .lzma decompressors + +SYNOPSIS + xzdec [option]... [file]... + lzmadec [option]... [file]... + +DESCRIPTION + xzdec is a liblzma-based decompression-only tool for .xz (and only .xz) + files. xzdec is intended to work as a drop-in replacement for xz(1) in + the most common situations where a script has been written to use xz + --decompress --stdout (and possibly a few other commonly used options) + to decompress .xz files. lzmadec is identical to xzdec except that + lzmadec supports .lzma files instead of .xz files. + + To reduce the size of the executable, xzdec doesn't support multi- + threading or localization, and doesn't read options from XZ_OPT envi- + ronment variable. xzdec doesn't support displaying intermediate + progress information: sending SIGINFO to xzdec does nothing, but send- + ing SIGUSR1 terminates the process instead of displaying progress + information. + +OPTIONS + -d, --decompress, --uncompress + Ignored for xz(1) compatibility. xzdec supports only decompres- + sion. + + -k, --keep + Ignored for xz(1) compatibility. xzdec never creates or removes + any files. + + -c, --stdout, --to-stdout + Ignored for xz(1) compatibility. xzdec always writes the decom- + pressed data to standard output. + + -M limit, --memory=limit + Set the memory usage limit. If this option is specified multi- + ple times, the last one takes effect. The limit can be specified + in multiple ways: + + o The limit can be an absolute value in bytes. Using an integer + suffix like MiB can be useful. Example: --memory=80MiB + + o The limit can be specified as a percentage of physical RAM. + Example: --memory=70% + + o The limit can be reset back to its default value (currently + 40 % of physical RAM) by setting it to 0. + + o The memory usage limiting can be effectively disabled by set- + ting limit to max. This isn't recommended. It's usually bet- + ter to use, for example, --memory=90%. + + The current limit can be seen near the bottom of the output of + the --help option. + + -q, --quiet + Specifying this once does nothing since xzdec never displays any + warnings or notices. Specify this twice to suppress errors. + + -Q, --no-warn + Ignored for xz(1) compatibility. xzdec never uses the exit sta- + tus 2. + + -h, --help + Display a help message and exit successfully. + + -V, --version + Display the version number of xzdec and liblzma. + +EXIT STATUS + 0 All was good. + + 1 An error occurred. + + xzdec doesn't have any warning messages like xz(1) has, thus the exit + status 2 is not used by xzdec. + +NOTES + xzdec and lzmadec are not really that small. The size can be reduced + further by dropping features from liblzma at compile time, but that + shouldn't usually be done for executables distributed in typical non- + embedded operating system distributions. If you need a truly small .xz + decompressor, consider using XZ Embedded. + +SEE ALSO + xz(1) + + + +Tukaani 2009-06-04 XZDEC(1) diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzdiff.txt b/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzdiff.txt new file mode 100644 index 00000000000..f64568f2ae3 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzdiff.txt @@ -0,0 +1,36 @@ +XZDIFF(1) XZ Utils XZDIFF(1) + + + +NAME + xzcmp, xzdiff, lzcmp, lzdiff - compare compressed files + +SYNOPSIS + xzcmp [cmp_options] file1 [file2] + xzdiff [diff_options] file1 [file2] + lzcmp [cmp_options] file1 [file2] + lzdiff [diff_options] file1 [file2] + +DESCRIPTION + xzcmp and xdiff invoke cmp(1) or diff(1) on files compressed with + xz(1), lzma(1), gzip(1), or bzip2(1). All options specified are passed + directly to cmp or diff. If only one file is specified, then the files + compared are file1 (which must have a suffix of a supported compression + format) and file1 from which the compression format suffix has been + stripped. If two files are specified, then they are uncompressed if + necessary and fed to cmp(1) or diff(1). The exit status from cmp or + diff is preserved. + + The names lzcmp and lzdiff are provided for backward compatibility with + LZMA Utils. + +SEE ALSO + cmp(1), diff(1), xz(1), gzip(1), bzip2(1), zdiff(1) + +BUGS + Messages from the cmp(1) or diff(1) programs refer to temporary file- + names instead of those specified. + + + +Tukaani 2009-07-05 XZDIFF(1) diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzgrep.txt b/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzgrep.txt new file mode 100644 index 00000000000..7f665bce295 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzgrep.txt @@ -0,0 +1,39 @@ +XZGREP(1) XZ Utils XZGREP(1) + + + +NAME + xzgrep - search compressed files for a regular expression + +SYNOPSIS + xzgrep [grep_options] [-e] pattern file... + xzegrep ... + xzfgrep ... + lzgrep ... + lzegrep ... + lzfgrep ... + +DESCRIPTION + xzgrep invokes grep(1) on files which may be either uncompressed or + compressed with xz(1), lzma(1), gzip(1), or bzip2(1). All options + specified are passed directly to grep(1). + + If no file is specified, then the standard input is decompressed if + necessary and fed to grep(1). When reading from standard input, + gzip(1) and bzip2(1) compressed files are not supported. + + If xzgrep is invoked as xzegrep or xzfgrep then egrep(1) or fgrep(1) is + used instead of grep(1). The same applies to names lzgrep, lzegrep, + and lzfgrep, which are provided for backward compatibility with LZMA + Utils. + +ENVIRONMENT + GREP If the GREP environment variable is set, xzgrep uses it instead + of grep(1), egrep(1), or fgrep(1). + +SEE ALSO + grep(1), xz(1), gzip(1), bzip2(1), zgrep(1) + + + +Tukaani 2009-07-05 XZGREP(1) diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzless.txt b/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzless.txt new file mode 100644 index 00000000000..2f3dc9fe2c4 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzless.txt @@ -0,0 +1,40 @@ +XZLESS(1) XZ Utils XZLESS(1) + + + +NAME + xzless, lzless - view xz or lzma compressed (text) files + +SYNOPSIS + xzless [file...] + lzless [file...] + +DESCRIPTION + xzless is a filter that displays pagefulls of uncompressed text from + compressed file(s) to a terminal. It works on files compressed with + xz(1) or lzma(1). If no files are given, xzless reads from standard + input. + + xzless uses less(1) as its only pager. Unlike xzmore, the choice of + pagers is not alterable by an environment variable. Commands are based + on both more(1) and vi(1), and allow back and forth movement and + searching. See the less(1) manual for more information. + + The command named lzless is provided for backward compatibility with + LZMA Utils. + +ENVIRONMENT + LESSMETACHARS + A list of characters special to the shell. Set by xzless unless + it is already set in the environment. + + LESSOPEN + Set to a command line to invoke the xz(1) decompressor for pre- + processing the input files to less(1). + +SEE ALSO + less(1), xz(1), xzmore(1), zless(1) + + + +Tukaani 2009-07-05 XZLESS(1) diff --git a/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzmore.txt b/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzmore.txt new file mode 100644 index 00000000000..6f6cfe93eea --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/doc/man/txt/xzmore.txt @@ -0,0 +1,34 @@ +XZMORE(1) XZ Utils XZMORE(1) + + + +NAME + xzmore, lzmore - view xz or lzma compressed (text) files + +SYNOPSIS + xzmore [filename ...] + lzmore [filename ...] + +DESCRIPTION + xzmore is a filter which allows examination of xz(1) or lzma(1) com- + pressed text files one screenful at a time on a soft-copy terminal. + + To use a pager other than the default more, set environment variable + PAGER to the name of the desired program. The name lzmore is provided + for backward compatibility with LZMA Utils. + + e or q When the prompt --More--(Next file: file) is printed, this com- + mand causes xzmore to exit. + + s When the prompt --More--(Next file: file) is printed, this com- + mand causes xzmore to skip the next file and continue. + + For list of keyboard commands supported while actually viewing the con- + tent of a file, refer to manual of the pager you use, usually more(1). + +SEE ALSO + more(1), xz(1), xzless(1), zmore(1) + + + +Tukaani 2009-07-05 XZMORE(1) diff --git a/Build/source/extra/xz-4.999.9beta/doc/xz-file-format.txt b/Build/source/extra/xz-4.999.9beta/doc/xz-file-format.txt new file mode 100644 index 00000000000..4ed66506018 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/doc/xz-file-format.txt @@ -0,0 +1,1150 @@ + +The .xz File Format +=================== + +Version 1.0.4 (2009-08-27) + + + 0. Preface + 0.1. Notices and Acknowledgements + 0.2. Getting the Latest Version + 0.3. Version History + 1. Conventions + 1.1. Byte and Its Representation + 1.2. Multibyte Integers + 2. Overall Structure of .xz File + 2.1. Stream + 2.1.1. Stream Header + 2.1.1.1. Header Magic Bytes + 2.1.1.2. Stream Flags + 2.1.1.3. CRC32 + 2.1.2. Stream Footer + 2.1.2.1. CRC32 + 2.1.2.2. Backward Size + 2.1.2.3. Stream Flags + 2.1.2.4. Footer Magic Bytes + 2.2. Stream Padding + 3. Block + 3.1. Block Header + 3.1.1. Block Header Size + 3.1.2. Block Flags + 3.1.3. Compressed Size + 3.1.4. Uncompressed Size + 3.1.5. List of Filter Flags + 3.1.6. Header Padding + 3.1.7. CRC32 + 3.2. Compressed Data + 3.3. Block Padding + 3.4. Check + 4. Index + 4.1. Index Indicator + 4.2. Number of Records + 4.3. List of Records + 4.3.1. Unpadded Size + 4.3.2. Uncompressed Size + 4.4. Index Padding + 4.5. CRC32 + 5. Filter Chains + 5.1. Alignment + 5.2. Security + 5.3. Filters + 5.3.1. LZMA2 + 5.3.2. Branch/Call/Jump Filters for Executables + 5.3.3. Delta + 5.3.3.1. Format of the Encoded Output + 5.4. Custom Filter IDs + 5.4.1. Reserved Custom Filter ID Ranges + 6. Cyclic Redundancy Checks + 7. References + + +0. Preface + + This document describes the .xz file format (filename suffix + ".xz", MIME type "application/x-xz"). It is intended that this + this format replace the old .lzma format used by LZMA SDK and + LZMA Utils. + + +0.1. Notices and Acknowledgements + + This file format was designed by Lasse Collin + and Igor Pavlov. + + Special thanks for helping with this document goes to + Ville Koskinen. Thanks for helping with this document goes to + Mark Adler, H. Peter Anvin, Mikko Pouru, and Lars Wirzenius. + + This document has been put into the public domain. + + +0.2. Getting the Latest Version + + The latest official version of this document can be downloaded + from . + + Specific versions of this document have a filename + xz-file-format-X.Y.Z.txt where X.Y.Z is the version number. + For example, the version 1.0.0 of this document is available + at . + + +0.3. Version History + + Version Date Description + + 1.0.4 2009-08-27 Language improvements in Sections 1.2, + 2.1.1.2, 3.1.1, 3.1.2, and 5.3.1 + + 1.0.3 2009-06-05 Spelling fixes in Sections 5.1 and 5.4 + + 1.0.2 2009-06-04 Typo fixes in Sections 4 and 5.3.1 + + 1.0.1 2009-06-01 Typo fix in Section 0.3 and minor + clarifications to Sections 2, 2.2, + 3.3, 4.4, and 5.3.2 + + 1.0.0 2009-01-14 The first official version + + +1. Conventions + + The key words "MUST", "MUST NOT", "REQUIRED", "SHOULD", + "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this + document are to be interpreted as described in [RFC-2119]. + + Indicating a warning means displaying a message, returning + appropriate exit status, or doing something else to let the + user know that something worth warning occurred. The operation + SHOULD still finish if a warning is indicated. + + Indicating an error means displaying a message, returning + appropriate exit status, or doing something else to let the + user know that something prevented successfully finishing the + operation. The operation MUST be aborted once an error has + been indicated. + + +1.1. Byte and Its Representation + + In this document, byte is always 8 bits. + + A "null byte" has all bits unset. That is, the value of a null + byte is 0x00. + + To represent byte blocks, this document uses notation that + is similar to the notation used in [RFC-1952]: + + +-------+ + | Foo | One byte. + +-------+ + + +---+---+ + | Foo | Two bytes; that is, some of the vertical bars + +---+---+ can be missing. + + +=======+ + | Foo | Zero or more bytes. + +=======+ + + In this document, a boxed byte or a byte sequence declared + using this notation is called "a field". The example field + above would be called "the Foo field" or plain "Foo". + + If there are many fields, they may be split to multiple lines. + This is indicated with an arrow ("--->"): + + +=====+ + | Foo | + +=====+ + + +=====+ + ---> | Bar | + +=====+ + + The above is equivalent to this: + + +=====+=====+ + | Foo | Bar | + +=====+=====+ + + +1.2. Multibyte Integers + + Multibyte integers of static length, such as CRC values, + are stored in little endian byte order (least significant + byte first). + + When smaller values are more likely than bigger values (for + example file sizes), multibyte integers are encoded in a + variable-length representation: + - Numbers in the range [0, 127] are copied as is, and take + one byte of space. + - Bigger numbers will occupy two or more bytes. All but the + last byte of the multibyte representation have the highest + (eighth) bit set. + + For now, the value of the variable-length integers is limited + to 63 bits, which limits the encoded size of the integer to + nine bytes. These limits may be increased in the future if + needed. + + The following C code illustrates encoding and decoding of + variable-length integers. The functions return the number of + bytes occupied by the integer (1-9), or zero on error. + + #include + #include + + size_t + encode(uint8_t buf[static 9], uint64_t num) + { + if (num > UINT64_MAX / 2) + return 0; + + size_t i = 0; + + while (num >= 0x80) { + buf[i++] = (uint8_t)(num) | 0x80; + num >>= 7; + } + + buf[i++] = (uint8_t)(num); + + return i; + } + + size_t + decode(const uint8_t buf[], size_t size_max, uint64_t *num) + { + if (size_max == 0) + return 0; + + if (size_max > 9) + size_max = 9; + + *num = buf[0] & 0x7F; + size_t i = 0; + + while (buf[i++] & 0x80) { + if (i >= size_max || buf[i] == 0x00) + return 0; + + *num |= (uint64_t)(buf[i] & 0x7F) << (i * 7); + } + + return i; + } + + +2. Overall Structure of .xz File + + A standalone .xz files consist of one or more Streams which may + have Stream Padding between or after them: + + +========+================+========+================+ + | Stream | Stream Padding | Stream | Stream Padding | ... + +========+================+========+================+ + + The sizes of Stream and Stream Padding are always multiples + of four bytes, thus the size of every valid .xz file MUST be + a multiple of four bytes. + + While a typical file contains only one Stream and no Stream + Padding, a decoder handling standalone .xz files SHOULD support + files that have more than one Stream or Stream Padding. + + In contrast to standalone .xz files, when the .xz file format + is used as an internal part of some other file format or + communication protocol, it usually is expected that the decoder + stops after the first Stream, and doesn't look for Stream + Padding or possibly other Streams. + + +2.1. Stream + + +-+-+-+-+-+-+-+-+-+-+-+-+=======+=======+ +=======+ + | Stream Header | Block | Block | ... | Block | + +-+-+-+-+-+-+-+-+-+-+-+-+=======+=======+ +=======+ + + +=======+-+-+-+-+-+-+-+-+-+-+-+-+ + ---> | Index | Stream Footer | + +=======+-+-+-+-+-+-+-+-+-+-+-+-+ + + All the above fields have a size that is a multiple of four. If + Stream is used as an internal part of another file format, it + is RECOMMENDED to make the Stream start at an offset that is + a multiple of four bytes. + + Stream Header, Index, and Stream Footer are always present in + a Stream. The maximum size of the Index field is 16 GiB (2^34). + + There are zero or more Blocks. The maximum number of Blocks is + limited only by the maximum size of the Index field. + + Total size of a Stream MUST be less than 8 EiB (2^63 bytes). + The same limit applies to the total amount of uncompressed + data stored in a Stream. + + If an implementation supports handling .xz files with multiple + concatenated Streams, it MAY apply the above limits to the file + as a whole instead of limiting per Stream basis. + + +2.1.1. Stream Header + + +---+---+---+---+---+---+-------+------+--+--+--+--+ + | Header Magic Bytes | Stream Flags | CRC32 | + +---+---+---+---+---+---+-------+------+--+--+--+--+ + + +2.1.1.1. Header Magic Bytes + + The first six (6) bytes of the Stream are so called Header + Magic Bytes. They can be used to identify the file type. + + Using a C array and ASCII: + const uint8_t HEADER_MAGIC[6] + = { 0xFD, '7', 'z', 'X', 'Z', 0x00 }; + + In plain hexadecimal: + FD 37 7A 58 5A 00 + + Notes: + - The first byte (0xFD) was chosen so that the files cannot + be erroneously detected as being in .lzma format, in which + the first byte is in the range [0x00, 0xE0]. + - The sixth byte (0x00) was chosen to prevent applications + from misdetecting the file as a text file. + + If the Header Magic Bytes don't match, the decoder MUST + indicate an error. + + +2.1.1.2. Stream Flags + + The first byte of Stream Flags is always a null byte. In the + future, this byte may be used to indicate a new Stream version + or other Stream properties. + + The second byte of Stream Flags is a bit field: + + Bit(s) Mask Description + 0-3 0x0F Type of Check (see Section 3.4): + ID Size Check name + 0x00 0 bytes None + 0x01 4 bytes CRC32 + 0x02 4 bytes (Reserved) + 0x03 4 bytes (Reserved) + 0x04 8 bytes CRC64 + 0x05 8 bytes (Reserved) + 0x06 8 bytes (Reserved) + 0x07 16 bytes (Reserved) + 0x08 16 bytes (Reserved) + 0x09 16 bytes (Reserved) + 0x0A 32 bytes SHA-256 + 0x0B 32 bytes (Reserved) + 0x0C 32 bytes (Reserved) + 0x0D 64 bytes (Reserved) + 0x0E 64 bytes (Reserved) + 0x0F 64 bytes (Reserved) + 4-7 0xF0 Reserved for future use; MUST be zero for now. + + Implementations SHOULD support at least the Check IDs 0x00 + (None) and 0x01 (CRC32). Supporting other Check IDs is + OPTIONAL. If an unsupported Check is used, the decoder SHOULD + indicate a warning or error. + + If any reserved bit is set, the decoder MUST indicate an error. + It is possible that there is a new field present which the + decoder is not aware of, and can thus parse the Stream Header + incorrectly. + + +2.1.1.3. CRC32 + + The CRC32 is calculated from the Stream Flags field. It is + stored as an unsigned 32-bit little endian integer. If the + calculated value does not match the stored one, the decoder + MUST indicate an error. + + The idea is that Stream Flags would always be two bytes, even + if new features are needed. This way old decoders will be able + to verify the CRC32 calculated from Stream Flags, and thus + distinguish between corrupt files (CRC32 doesn't match) and + files that the decoder doesn't support (CRC32 matches but + Stream Flags has reserved bits set). + + +2.1.2. Stream Footer + + +-+-+-+-+---+---+---+---+-------+------+----------+---------+ + | CRC32 | Backward Size | Stream Flags | Footer Magic Bytes | + +-+-+-+-+---+---+---+---+-------+------+----------+---------+ + + +2.1.2.1. CRC32 + + The CRC32 is calculated from the Backward Size and Stream Flags + fields. It is stored as an unsigned 32-bit little endian + integer. If the calculated value does not match the stored one, + the decoder MUST indicate an error. + + The reason to have the CRC32 field before the Backward Size and + Stream Flags fields is to keep the four-byte fields aligned to + a multiple of four bytes. + + +2.1.2.2. Backward Size + + Backward Size is stored as a 32-bit little endian integer, + which indicates the size of the Index field as multiple of + four bytes, minimum value being four bytes: + + real_backward_size = (stored_backward_size + 1) * 4; + + If the stored value does not match the real size of the Index + field, the decoder MUST indicate an error. + + Using a fixed-size integer to store Backward Size makes + it slightly simpler to parse the Stream Footer when the + application needs to parse the Stream backwards. + + +2.1.2.3. Stream Flags + + This is a copy of the Stream Flags field from the Stream + Header. The information stored to Stream Flags is needed + when parsing the Stream backwards. The decoder MUST compare + the Stream Flags fields in both Stream Header and Stream + Footer, and indicate an error if they are not identical. + + +2.1.2.4. Footer Magic Bytes + + As the last step of the decoding process, the decoder MUST + verify the existence of Footer Magic Bytes. If they don't + match, an error MUST be indicated. + + Using a C array and ASCII: + const uint8_t FOOTER_MAGIC[2] = { 'Y', 'Z' }; + + In hexadecimal: + 59 5A + + The primary reason to have Footer Magic Bytes is to make + it easier to detect incomplete files quickly, without + uncompressing. If the file does not end with Footer Magic Bytes + (excluding Stream Padding described in Section 2.2), it cannot + be undamaged, unless someone has intentionally appended garbage + after the end of the Stream. + + +2.2. Stream Padding + + Only the decoders that support decoding of concatenated Streams + MUST support Stream Padding. + + Stream Padding MUST contain only null bytes. To preserve the + four-byte alignment of consecutive Streams, the size of Stream + Padding MUST be a multiple of four bytes. Empty Stream Padding + is allowed. If these requirements are not met, the decoder MUST + indicate an error. + + Note that non-empty Stream Padding is allowed at the end of the + file; there doesn't need to be a new Stream after non-empty + Stream Padding. This can be convenient in certain situations + [GNU-tar]. + + The possibility of Stream Padding MUST be taken into account + when designing an application that parses Streams backwards, + and the application supports concatenated Streams. + + +3. Block + + +==============+=================+===============+=======+ + | Block Header | Compressed Data | Block Padding | Check | + +==============+=================+===============+=======+ + + +3.1. Block Header + + +-------------------+-------------+=================+ + | Block Header Size | Block Flags | Compressed Size | + +-------------------+-------------+=================+ + + +===================+======================+ + ---> | Uncompressed Size | List of Filter Flags | + +===================+======================+ + + +================+--+--+--+--+ + ---> | Header Padding | CRC32 | + +================+--+--+--+--+ + + +3.1.1. Block Header Size + + This field overlaps with the Index Indicator field (see + Section 4.1). + + This field contains the size of the Block Header field, + including the Block Header Size field itself. Valid values are + in the range [0x01, 0xFF], which indicate the size of the Block + Header as multiples of four bytes, minimum size being eight + bytes: + + real_header_size = (encoded_header_size + 1) * 4; + + If a Block Header bigger than 1024 bytes is needed in the + future, a new field can be added between the Block Header and + Compressed Data fields. The presence of this new field would + be indicated in the Block Header field. + + +3.1.2. Block Flags + + The Block Flags field is a bit field: + + Bit(s) Mask Description + 0-1 0x03 Number of filters (1-4) + 2-5 0x3C Reserved for future use; MUST be zero for now. + 6 0x40 The Compressed Size field is present. + 7 0x80 The Uncompressed Size field is present. + + If any reserved bit is set, the decoder MUST indicate an error. + It is possible that there is a new field present which the + decoder is not aware of, and can thus parse the Block Header + incorrectly. + + +3.1.3. Compressed Size + + This field is present only if the appropriate bit is set in + the Block Flags field (see Section 3.1.2). + + The Compressed Size field contains the size of the Compressed + Data field, which MUST be non-zero. Compressed Size is stored + using the encoding described in Section 1.2. If the Compressed + Size doesn't match the size of the Compressed Data field, the + decoder MUST indicate an error. + + +3.1.4. Uncompressed Size + + This field is present only if the appropriate bit is set in + the Block Flags field (see Section 3.1.2). + + The Uncompressed Size field contains the size of the Block + after uncompressing. Uncompressed Size is stored using the + encoding described in Section 1.2. If the Uncompressed Size + does not match the real uncompressed size, the decoder MUST + indicate an error. + + Storing the Compressed Size and Uncompressed Size fields serves + several purposes: + - The decoder knows how much memory it needs to allocate + for a temporary buffer in multithreaded mode. + - Simple error detection: wrong size indicates a broken file. + - Seeking forwards to a specific location in streamed mode. + + It should be noted that the only reliable way to determine + the real uncompressed size is to uncompress the Block, + because the Block Header and Index fields may contain + (intentionally or unintentionally) invalid information. + + +3.1.5. List of Filter Flags + + +================+================+ +================+ + | Filter 0 Flags | Filter 1 Flags | ... | Filter n Flags | + +================+================+ +================+ + + The number of Filter Flags fields is stored in the Block Flags + field (see Section 3.1.2). + + The format of each Filter Flags field is as follows: + + +===========+====================+===================+ + | Filter ID | Size of Properties | Filter Properties | + +===========+====================+===================+ + + Both Filter ID and Size of Properties are stored using the + encoding described in Section 1.2. Size of Properties indicates + the size of the Filter Properties field as bytes. The list of + officially defined Filter IDs and the formats of their Filter + Properties are described in Section 5.3. + + Filter IDs greater than or equal to 0x4000_0000_0000_0000 + (2^62) are reserved for implementation-specific internal use. + These Filter IDs MUST never be used in List of Filter Flags. + + +3.1.6. Header Padding + + This field contains as many null byte as it is needed to make + the Block Header have the size specified in Block Header Size. + If any of the bytes are not null bytes, the decoder MUST + indicate an error. It is possible that there is a new field + present which the decoder is not aware of, and can thus parse + the Block Header incorrectly. + + +3.1.7. CRC32 + + The CRC32 is calculated over everything in the Block Header + field except the CRC32 field itself. It is stored as an + unsigned 32-bit little endian integer. If the calculated + value does not match the stored one, the decoder MUST indicate + an error. + + By verifying the CRC32 of the Block Header before parsing the + actual contents allows the decoder to distinguish between + corrupt and unsupported files. + + +3.2. Compressed Data + + The format of Compressed Data depends on Block Flags and List + of Filter Flags. Excluding the descriptions of the simplest + filters in Section 5.3, the format of the filter-specific + encoded data is out of scope of this document. + + +3.3. Block Padding + + Block Padding MUST contain 0-3 null bytes to make the size of + the Block a multiple of four bytes. This can be needed when + the size of Compressed Data is not a multiple of four. If any + of the bytes in Block Padding are not null bytes, the decoder + MUST indicate an error. + + +3.4. Check + + The type and size of the Check field depends on which bits + are set in the Stream Flags field (see Section 2.1.1.2). + + The Check, when used, is calculated from the original + uncompressed data. If the calculated Check does not match the + stored one, the decoder MUST indicate an error. If the selected + type of Check is not supported by the decoder, it SHOULD + indicate a warning or error. + + +4. Index + + +-----------------+===================+ + | Index Indicator | Number of Records | + +-----------------+===================+ + + +=================+===============+-+-+-+-+ + ---> | List of Records | Index Padding | CRC32 | + +=================+===============+-+-+-+-+ + + Index serves several purposes. Using it, one can + - verify that all Blocks in a Stream have been processed; + - find out the uncompressed size of a Stream; and + - quickly access the beginning of any Block (random access). + + +4.1. Index Indicator + + This field overlaps with the Block Header Size field (see + Section 3.1.1). The value of Index Indicator is always 0x00. + + +4.2. Number of Records + + This field indicates how many Records there are in the List + of Records field, and thus how many Blocks there are in the + Stream. The value is stored using the encoding described in + Section 1.2. If the decoder has decoded all the Blocks of the + Stream, and then notices that the Number of Records doesn't + match the real number of Blocks, the decoder MUST indicate an + error. + + +4.3. List of Records + + List of Records consists of as many Records as indicated by the + Number of Records field: + + +========+========+ + | Record | Record | ... + +========+========+ + + Each Record contains information about one Block: + + +===============+===================+ + | Unpadded Size | Uncompressed Size | + +===============+===================+ + + If the decoder has decoded all the Blocks of the Stream, it + MUST verify that the contents of the Records match the real + Unpadded Size and Uncompressed Size of the respective Blocks. + + Implementation hint: It is possible to verify the Index with + constant memory usage by calculating for example SHA-256 of + both the real size values and the List of Records, then + comparing the hash values. Implementing this using + non-cryptographic hash like CRC32 SHOULD be avoided unless + small code size is important. + + If the decoder supports random-access reading, it MUST verify + that Unpadded Size and Uncompressed Size of every completely + decoded Block match the sizes stored in the Index. If only + partial Block is decoded, the decoder MUST verify that the + processed sizes don't exceed the sizes stored in the Index. + + +4.3.1. Unpadded Size + + This field indicates the size of the Block excluding the Block + Padding field. That is, Unpadded Size is the size of the Block + Header, Compressed Data, and Check fields. Unpadded Size is + stored using the encoding described in Section 1.2. The value + MUST never be zero; with the current structure of Blocks, the + actual minimum value for Unpadded Size is five. + + Implementation note: Because the size of the Block Padding + field is not included in Unpadded Size, calculating the total + size of a Stream or doing random-access reading requires + calculating the actual size of the Blocks by rounding Unpadded + Sizes up to the next multiple of four. + + The reason to exclude Block Padding from Unpadded Size is to + ease making a raw copy of Compressed Data without Block + Padding. This can be useful, for example, if someone wants + to convert Streams to some other file format quickly. + + +4.3.2. Uncompressed Size + + This field indicates the Uncompressed Size of the respective + Block as bytes. The value is stored using the encoding + described in Section 1.2. + + +4.4. Index Padding + + This field MUST contain 0-3 null bytes to pad the Index to + a multiple of four bytes. If any of the bytes are not null + bytes, the decoder MUST indicate an error. + + +4.5. CRC32 + + The CRC32 is calculated over everything in the Index field + except the CRC32 field itself. The CRC32 is stored as an + unsigned 32-bit little endian integer. If the calculated + value does not match the stored one, the decoder MUST indicate + an error. + + +5. Filter Chains + + The Block Flags field defines how many filters are used. When + more than one filter is used, the filters are chained; that is, + the output of one filter is the input of another filter. The + following figure illustrates the direction of data flow. + + v Uncompressed Data ^ + | Filter 0 | + Encoder | Filter 1 | Decoder + | Filter n | + v Compressed Data ^ + + +5.1. Alignment + + Alignment of uncompressed input data is usually the job of + the application producing the data. For example, to get the + best results, an archiver tool should make sure that all + PowerPC executable files in the archive stream start at + offsets that are multiples of four bytes. + + Some filters, for example LZMA2, can be configured to take + advantage of specified alignment of input data. Note that + taking advantage of aligned input can be beneficial also when + a filter is not the first filter in the chain. For example, + if you compress PowerPC executables, you may want to use the + PowerPC filter and chain that with the LZMA2 filter. Because + not only the input but also the output alignment of the PowerPC + filter is four bytes, it is now beneficial to set LZMA2 + settings so that the LZMA2 encoder can take advantage of its + four-byte-aligned input data. + + The output of the last filter in the chain is stored to the + Compressed Data field, which is is guaranteed to be aligned + to a multiple of four bytes relative to the beginning of the + Stream. This can increase + - speed, if the filtered data is handled multiple bytes at + a time by the filter-specific encoder and decoder, + because accessing aligned data in computer memory is + usually faster; and + - compression ratio, if the output data is later compressed + with an external compression tool. + + +5.2. Security + + If filters would be allowed to be chained freely, it would be + possible to create malicious files, that would be very slow to + decode. Such files could be used to create denial of service + attacks. + + Slow files could occur when multiple filters are chained: + + v Compressed input data + | Filter 1 decoder (last filter) + | Filter 0 decoder (non-last filter) + v Uncompressed output data + + The decoder of the last filter in the chain produces a lot of + output from little input. Another filter in the chain takes the + output of the last filter, and produces very little output + while consuming a lot of input. As a result, a lot of data is + moved inside the filter chain, but the filter chain as a whole + gets very little work done. + + To prevent this kind of slow files, there are restrictions on + how the filters can be chained. These restrictions MUST be + taken into account when designing new filters. + + The maximum number of filters in the chain has been limited to + four, thus there can be at maximum of three non-last filters. + Of these three non-last filters, only two are allowed to change + the size of the data. + + The non-last filters, that change the size of the data, MUST + have a limit how much the decoder can compress the data: the + decoder SHOULD produce at least n bytes of output when the + filter is given 2n bytes of input. This limit is not + absolute, but significant deviations MUST be avoided. + + The above limitations guarantee that if the last filter in the + chain produces 4n bytes of output, the chain as a whole will + produce at least n bytes of output. + + +5.3. Filters + +5.3.1. LZMA2 + + LZMA (Lempel-Ziv-Markov chain-Algorithm) is a general-purpose + compression algorithm with high compression ratio and fast + decompression. LZMA is based on LZ77 and range coding + algorithms. + + LZMA2 is an extension on top of the original LZMA. LZMA2 uses + LZMA internally, but adds support for flushing the encoder, + uncompressed chunks, eases stateful decoder implementations, + and improves support for multithreading. Thus, the plain LZMA + will not be supported in this file format. + + Filter ID: 0x21 + Size of Filter Properties: 1 byte + Changes size of data: Yes + Allow as a non-last filter: No + Allow as the last filter: Yes + + Preferred alignment: + Input data: Adjustable to 1/2/4/8/16 byte(s) + Output data: 1 byte + + The format of the one-byte Filter Properties field is as + follows: + + Bits Mask Description + 0-5 0x3F Dictionary Size + 6-7 0xC0 Reserved for future use; MUST be zero for now. + + Dictionary Size is encoded with one-bit mantissa and five-bit + exponent. The smallest dictionary size is 4 KiB and the biggest + is 4 GiB. + + Raw value Mantissa Exponent Dictionary size + 0 2 11 4 KiB + 1 3 11 6 KiB + 2 2 12 8 KiB + 3 3 12 12 KiB + 4 2 13 16 KiB + 5 3 13 24 KiB + 6 2 14 32 KiB + ... ... ... ... + 35 3 27 768 MiB + 36 2 28 1024 MiB + 37 3 29 1536 MiB + 38 2 30 2048 MiB + 39 3 30 3072 MiB + 40 2 31 4096 MiB - 1 B + + Instead of having a table in the decoder, the dictionary size + can be decoded using the following C code: + + const uint8_t bits = get_dictionary_flags() & 0x3F; + if (bits > 40) + return DICTIONARY_TOO_BIG; // Bigger than 4 GiB + + uint32_t dictionary_size; + if (bits == 40) { + dictionary_size = UINT32_MAX; + } else { + dictionary_size = 2 | (bits & 1); + dictionary_size <<= bits / 2 + 11; + } + + +5.3.2. Branch/Call/Jump Filters for Executables + + These filters convert relative branch, call, and jump + instructions to their absolute counterparts in executable + files. This conversion increases redundancy and thus + compression ratio. + + Size of Filter Properties: 0 or 4 bytes + Changes size of data: No + Allow as a non-last filter: Yes + Allow as the last filter: No + + Below is the list of filters in this category. The alignment + is the same for both input and output data. + + Filter ID Alignment Description + 0x04 1 byte x86 filter (BCJ) + 0x05 4 bytes PowerPC (big endian) filter + 0x06 16 bytes IA64 filter + 0x07 4 bytes ARM (little endian) filter + 0x08 2 bytes ARM Thumb (little endian) filter + 0x09 4 bytes SPARC filter + + If the size of Filter Properties is four bytes, the Filter + Properties field contains the start offset used for address + conversions. It is stored as an unsigned 32-bit little endian + integer. The start offset MUST be a multiple of the alignment + of the filter as listed in the table above; if it isn't, the + decoder MUST indicate an error. If the size of Filter + Properties is zero, the start offset is zero. + + Setting the start offset may be useful if an executable has + multiple sections, and there are many cross-section calls. + Taking advantage of this feature usually requires usage of + the Subblock filter, whose design is not complete yet. + + +5.3.3. Delta + + The Delta filter may increase compression ratio when the value + of the next byte correlates with the value of an earlier byte + at specified distance. + + Filter ID: 0x03 + Size of Filter Properties: 1 byte + Changes size of data: No + Allow as a non-last filter: Yes + Allow as the last filter: No + + Preferred alignment: + Input data: 1 byte + Output data: Same as the original input data + + The Properties byte indicates the delta distance, which can be + 1-256 bytes backwards from the current byte: 0x00 indicates + distance of 1 byte and 0xFF distance of 256 bytes. + + +5.3.3.1. Format of the Encoded Output + + The code below illustrates both encoding and decoding with + the Delta filter. + + // Distance is in the range [1, 256]. + const unsigned int distance = get_properties_byte() + 1; + uint8_t pos = 0; + uint8_t delta[256]; + + memset(delta, 0, sizeof(delta)); + + while (1) { + const int byte = read_byte(); + if (byte == EOF) + break; + + uint8_t tmp = delta[(uint8_t)(distance + pos)]; + if (is_encoder) { + tmp = (uint8_t)(byte) - tmp; + delta[pos] = (uint8_t)(byte); + } else { + tmp = (uint8_t)(byte) + tmp; + delta[pos] = tmp; + } + + write_byte(tmp); + --pos; + } + + +5.4. Custom Filter IDs + + If a developer wants to use custom Filter IDs, he has two + choices. The first choice is to contact Lasse Collin and ask + him to allocate a range of IDs for the developer. + + The second choice is to generate a 40-bit random integer, + which the developer can use as his personal Developer ID. + To minimize the risk of collisions, Developer ID has to be + a randomly generated integer, not manually selected "hex word". + The following command, which works on many free operating + systems, can be used to generate Developer ID: + + dd if=/dev/urandom bs=5 count=1 | hexdump + + The developer can then use his Developer ID to create unique + (well, hopefully unique) Filter IDs. + + Bits Mask Description + 0-15 0x0000_0000_0000_FFFF Filter ID + 16-55 0x00FF_FFFF_FFFF_0000 Developer ID + 56-62 0x3F00_0000_0000_0000 Static prefix: 0x3F + + The resulting 63-bit integer will use 9 bytes of space when + stored using the encoding described in Section 1.2. To get + a shorter ID, see the beginning of this Section how to + request a custom ID range. + + +5.4.1. Reserved Custom Filter ID Ranges + + Range Description + 0x0000_0300 - 0x0000_04FF Reserved to ease .7z compatibility + 0x0002_0000 - 0x0007_FFFF Reserved to ease .7z compatibility + 0x0200_0000 - 0x07FF_FFFF Reserved to ease .7z compatibility + + +6. Cyclic Redundancy Checks + + There are several incompatible variations to calculate CRC32 + and CRC64. For simplicity and clarity, complete examples are + provided to calculate the checks as they are used in this file + format. Implementations MAY use different code as long as it + gives identical results. + + The program below reads data from standard input, calculates + the CRC32 and CRC64 values, and prints the calculated values + as big endian hexadecimal strings to standard output. + + #include + #include + #include + + uint32_t crc32_table[256]; + uint64_t crc64_table[256]; + + void + init(void) + { + static const uint32_t poly32 = UINT32_C(0xEDB88320); + static const uint64_t poly64 + = UINT64_C(0xC96C5795D7870F42); + + for (size_t i = 0; i < 256; ++i) { + uint32_t crc32 = i; + uint64_t crc64 = i; + + for (size_t j = 0; j < 8; ++j) { + if (crc32 & 1) + crc32 = (crc32 >> 1) ^ poly32; + else + crc32 >>= 1; + + if (crc64 & 1) + crc64 = (crc64 >> 1) ^ poly64; + else + crc64 >>= 1; + } + + crc32_table[i] = crc32; + crc64_table[i] = crc64; + } + } + + uint32_t + crc32(const uint8_t *buf, size_t size, uint32_t crc) + { + crc = ~crc; + for (size_t i = 0; i < size; ++i) + crc = crc32_table[buf[i] ^ (crc & 0xFF)] + ^ (crc >> 8); + return ~crc; + } + + uint64_t + crc64(const uint8_t *buf, size_t size, uint64_t crc) + { + crc = ~crc; + for (size_t i = 0; i < size; ++i) + crc = crc64_table[buf[i] ^ (crc & 0xFF)] + ^ (crc >> 8); + return ~crc; + } + + int + main() + { + init(); + + uint32_t value32 = 0; + uint64_t value64 = 0; + uint64_t total_size = 0; + uint8_t buf[8192]; + + while (1) { + const size_t buf_size + = fread(buf, 1, sizeof(buf), stdin); + if (buf_size == 0) + break; + + total_size += buf_size; + value32 = crc32(buf, buf_size, value32); + value64 = crc64(buf, buf_size, value64); + } + + printf("Bytes: %" PRIu64 "\n", total_size); + printf("CRC-32: 0x%08" PRIX32 "\n", value32); + printf("CRC-64: 0x%016" PRIX64 "\n", value64); + + return 0; + } + + +7. References + + LZMA SDK - The original LZMA implementation + http://7-zip.org/sdk.html + + LZMA Utils - LZMA adapted to POSIX-like systems + http://tukaani.org/lzma/ + + XZ Utils - The next generation of LZMA Utils + http://tukaani.org/xz/ + + [RFC-1952] + GZIP file format specification version 4.3 + http://www.ietf.org/rfc/rfc1952.txt + - Notation of byte boxes in section "2.1. Overall conventions" + + [RFC-2119] + Key words for use in RFCs to Indicate Requirement Levels + http://www.ietf.org/rfc/rfc2119.txt + + [GNU-tar] + GNU tar 1.21 manual + http://www.gnu.org/software/tar/manual/html_node/Blocking-Factor.html + - Node 9.4.2 "Blocking Factor", paragraph that begins + "gzip will complain about trailing garbage" + - Note that this URL points to the latest version of the + manual, and may some day not contain the note which is in + 1.21. For the exact version of the manual, download GNU + tar 1.21: ftp://ftp.gnu.org/pub/gnu/tar/tar-1.21.tar.gz + diff --git a/Build/source/extra/xz-4.999.9beta/dos/Makefile b/Build/source/extra/xz-4.999.9beta/dos/Makefile new file mode 100644 index 00000000000..0b8a088c183 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/dos/Makefile @@ -0,0 +1,255 @@ +############################################################################### +# +# Makefile to build XZ Utils using DJGPP +# +# Make flags to alter compilation: +# +# DEBUG=1 Enable assertions. Don't use this for production builds! +# You may also want to set CFLAGS="-g -O0" to disable +# optimizations. +# +# The usual CPPFLAGS and CFLAGS are supported too. +# +############################################################################### +# +# Author: Lasse Collin +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# +############################################################################### + +CC = gcc +AR = ar +STRIP = strip +SED = sed +RM = rm -f + +CFLAGS = -g -Wextra -Wfatal-errors -Wall -march=i386 -mtune=i686 -O2 + +# NOTE: -fgnu89-inline is needed on DJGPP 2.04 beta and GCC 4.3.2 +# because time.h uses GNU-style "extern inline". +ALL_CFLAGS = -std=gnu99 -fgnu89-inline + +ALL_CPPFLAGS = \ + -I. \ + -I../lib \ + -I../src/common \ + -I../src/liblzma/api \ + -I../src/liblzma/common \ + -I../src/liblzma/check \ + -I../src/liblzma/rangecoder \ + -I../src/liblzma/lz \ + -I../src/liblzma/lzma \ + -I../src/liblzma/delta \ + -I../src/liblzma/simple \ + -I../src/liblzma/subblock + +ALL_CPPFLAGS += -DHAVE_CONFIG_H + +ifdef DEBUG +STRIP := rem Skipping strip +else +ALL_CPPFLAGS += -DNDEBUG +endif + +ALL_CPPFLAGS += $(CPPFLAGS) +ALL_CFLAGS += $(CFLAGS) + + +################ +# Common rules # +################ + +.PHONY: all clean +all: liblzma.a getopt.a xzdec.exe lzmadec.exe xz.exe +clean: liblzma-clean getopt-clean xzdec-clean xz-clean + + +############# +# liblzma.a # +############# + +LIBLZMA_SRCS_C = \ + ../src/liblzma/common/alone_decoder.c \ + ../src/liblzma/common/alone_encoder.c \ + ../src/liblzma/common/auto_decoder.c \ + ../src/liblzma/common/block_buffer_decoder.c \ + ../src/liblzma/common/block_buffer_encoder.c \ + ../src/liblzma/common/block_decoder.c \ + ../src/liblzma/common/block_encoder.c \ + ../src/liblzma/common/block_header_decoder.c \ + ../src/liblzma/common/block_header_encoder.c \ + ../src/liblzma/common/block_util.c \ + ../src/liblzma/common/common.c \ + ../src/liblzma/common/easy_buffer_encoder.c \ + ../src/liblzma/common/easy_decoder_memusage.c \ + ../src/liblzma/common/easy_encoder.c \ + ../src/liblzma/common/easy_encoder_memusage.c \ + ../src/liblzma/common/easy_preset.c \ + ../src/liblzma/common/filter_common.c \ + ../src/liblzma/common/filter_decoder.c \ + ../src/liblzma/common/filter_encoder.c \ + ../src/liblzma/common/filter_flags_decoder.c \ + ../src/liblzma/common/filter_flags_encoder.c \ + ../src/liblzma/common/index.c \ + ../src/liblzma/common/index_decoder.c \ + ../src/liblzma/common/index_encoder.c \ + ../src/liblzma/common/index_hash.c \ + ../src/liblzma/common/stream_buffer_decoder.c \ + ../src/liblzma/common/stream_buffer_encoder.c \ + ../src/liblzma/common/stream_decoder.c \ + ../src/liblzma/common/stream_encoder.c \ + ../src/liblzma/common/stream_flags_common.c \ + ../src/liblzma/common/stream_flags_decoder.c \ + ../src/liblzma/common/stream_flags_encoder.c \ + ../src/liblzma/common/vli_decoder.c \ + ../src/liblzma/common/vli_encoder.c \ + ../src/liblzma/common/vli_size.c \ + ../src/liblzma/check/check.c \ + ../src/liblzma/check/crc32_table.c \ + ../src/liblzma/check/crc64_table.c \ + ../src/liblzma/check/sha256.c \ + ../src/liblzma/rangecoder/price_table.c \ + ../src/liblzma/lz/lz_decoder.c \ + ../src/liblzma/lz/lz_encoder.c \ + ../src/liblzma/lz/lz_encoder_mf.c \ + ../src/liblzma/lzma/fastpos_table.c \ + ../src/liblzma/lzma/lzma2_decoder.c \ + ../src/liblzma/lzma/lzma2_encoder.c \ + ../src/liblzma/lzma/lzma_decoder.c \ + ../src/liblzma/lzma/lzma_encoder.c \ + ../src/liblzma/lzma/lzma_encoder_optimum_fast.c \ + ../src/liblzma/lzma/lzma_encoder_optimum_normal.c \ + ../src/liblzma/lzma/lzma_encoder_presets.c \ + ../src/liblzma/delta/delta_common.c \ + ../src/liblzma/delta/delta_decoder.c \ + ../src/liblzma/delta/delta_encoder.c \ + ../src/liblzma/simple/arm.c \ + ../src/liblzma/simple/armthumb.c \ + ../src/liblzma/simple/ia64.c \ + ../src/liblzma/simple/powerpc.c \ + ../src/liblzma/simple/simple_coder.c \ + ../src/liblzma/simple/simple_decoder.c \ + ../src/liblzma/simple/simple_encoder.c \ + ../src/liblzma/simple/sparc.c \ + ../src/liblzma/simple/x86.c + +LIBLZMA_SRCS_ASM = \ + ../src/liblzma/check/crc32_x86.S \ + ../src/liblzma/check/crc64_x86.S + +LIBLZMA_OBJS_C = $(LIBLZMA_SRCS_C:.c=.o) +LIBLZMA_OBJS_ASM = $(LIBLZMA_SRCS_ASM:.S=.o) +LIBLZMA_OBJS = $(LIBLZMA_OBJS_C) $(LIBLZMA_OBJS_ASM) + +$(LIBLZMA_OBJS_C): %.o: %.c + $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< + +$(LIBLZMA_OBJS_ASM): %.o: %.S + $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< + +liblzma.a: $(LIBLZMA_OBJS) + $(RM) $@ + $(AR) rcs $@ $(LIBLZMA_OBJS) + $(STRIP) --strip-unneeded $@ + +# Avoid too long command lines. +.PHONY: liblzma-clean $(LIBLZMA_OBJS:.o=-clean) +liblzma-clean: $(LIBLZMA_OBJS:.o=-clean) + -$(RM) liblzma.a + +$(LIBLZMA_OBJS:.o=-clean): + -$(RM) $(@:-clean=.o) + + +############### +# getopt_long # +############### + +GETOPT_SRCS = \ + ../lib/getopt.c \ + ../lib/getopt1.c + +GETOPT_OBJS = $(GETOPT_SRCS:.c=.o) + +GETOPT_H = ../lib/getopt.h + +$(GETOPT_H): %.h: %.in.h + $(SED) "" $< > $@ + +$(GETOPT_OBJS): %.o: %.c $(GETOPT_H) + $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< + +getopt.a: $(GETOPT_OBJS) + $(RM) $@ + $(AR) rcs $@ $(GETOPT_OBJS) + $(STRIP) --strip-unneeded $@ + +getopt-clean: + $(RM) $(GETOPT_H) $(GETOPT_OBJS) getopt.a + + +########################### +# xzdec.exe & lzmadec.exe # +########################### + +XZDEC_SRCS = ../src/xzdec/xzdec.c + +xzdec.exe: getopt.a liblzma.a $(XZDEC_SRCS) + $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) $(XZDEC_SRCS) -o $@ getopt.a liblzma.a + $(STRIP) --strip-all $@ + exe2coff $@ + $(RM) $@ + copy /b $(DJGPP:DJGPP.ENV=BIN\CWSDSTUB.EXE) + $(@:.exe=) $@ + $(RM) $(@:.exe=) + +lzmadec.exe: getopt.a liblzma.a $(XZDEC_SRCS) + $(CC) $(ALL_CPPFLAGS) -DLZMADEC $(ALL_CFLAGS) $(XZDEC_SRCS) -o $@ getopt.a liblzma.a + $(STRIP) --strip-all $@ + exe2coff $@ + $(RM) $@ + copy /b $(DJGPP:DJGPP.ENV=BIN\CWSDSTUB.EXE) + $(@:.exe=) $@ + $(RM) $(@:.exe=) + +.PHONY: xzdec-clean +xzdec-clean: + -$(RM) xzdec.exe lzmadec.exe xzdec lzmadec + + +########## +# xz.exe # +########## + +XZ_SRCS = \ + ../src/xz/args.c \ + ../src/xz/coder.c \ + ../src/xz/file_io.c \ + ../src/xz/hardware.c \ + ../src/xz/main.c \ + ../src/xz/message.c \ + ../src/xz/options.c \ + ../src/xz/signals.c \ + ../src/xz/suffix.c \ + ../src/xz/util.c + +XZ_OBJS = $(XZ_SRCS:.c=.o) + +$(XZ_OBJS): %.o: %.c + $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< + +xz.exe: getopt.a liblzma.a $(XZ_OBJS) + $(CC) $(ALL_CFLAGS) $(XZ_OBJS) -o $@ getopt.a liblzma.a + $(STRIP) --strip-all $@ + exe2coff $@ + $(RM) $@ + copy /b $(DJGPP:DJGPP.ENV=BIN\CWSDSTUB.EXE) + $(@:.exe=) $@ + $(RM) $(@:.exe=) + +# Avoid too long command lines. +.PHONY: xz-clean $(XZ_OBJS:.o=-clean) +xz-clean: $(XZ_OBJS:.o=-clean) + -$(RM) xz.exe xz + +$(XZ_OBJS:.o=-clean): + -$(RM) $(@:-clean=.o) diff --git a/Build/source/extra/xz-4.999.9beta/dos/README b/Build/source/extra/xz-4.999.9beta/dos/README new file mode 100644 index 00000000000..649c58c438d --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/dos/README @@ -0,0 +1,113 @@ + +XZ Utils on DOS +=============== + +Introduction + + This document explains how to build XZ Utils for DOS using DJGPP. + The resulting binaries should run at least on various DOS versions + and under Windows 95/98/98SE/ME, which cannot run the Windows version + of XZ Utils. + + This is currently experimental and has got very little testing. + + +Getting and Installing DJGPP + + You may use to help + deciding what to download, but as of writing (2009-02-13) that may + not be the most convenient way taking into account what components + are actually required to build XZ Utils. However, using the + zip-picker can still be worth doing to get nice short summary of + installation instructions (they can be found from readme.1st too). + + For more manual method, first select a mirror from + . You need + the following files: + + unzip32.exe + beta/v2/djdev204.zip + v2gnu/bnu219b.zip + v2gnu/gcc432b.zip + v2gnu/mak3791b.zip + v2gnu/sed415b.zip + v2misc/csdpmi5b.zip + + If newer versions are available, probably you should try them first. + Note that djdev203.zip is too old to build XZ Utils; you need at + least djdev204.zip. Also note that you want csdpmi5b.zip even if you + run under Windows or DOSEMU, because the XZ Utils Makefile will embed + cwsdstub.exe to the resulting binaries. + + See the instructions in readme.1st found from djdev204.zip. Here's + a short summary, but you should still read readme.1st. + + C:\> mkdir DJGPP + C:\> cd DJGPP + C:\DJGPP> c:\download\unzip32 c:\download\djdev204.zip + C:\DJGPP> c:\download\unzip32 c:\download\bnu219b.zip + C:\DJGPP> c:\download\unzip32 c:\download\gcc432b.zip + C:\DJGPP> c:\download\unzip32 c:\download\mak3791b.zip + C:\DJGPP> c:\download\unzip32 c:\download\sed415b.zip + C:\DJGPP> c:\download\unzip32 c:\download\csdpmi5b.zip + + C:\DJGPP> set PATH=C:\DJGPP\BIN;%PATH% + C:\DJGPP> set DJGPP=C:\DJGPP\DJGPP.ENV + + You may want to add the last two lines into AUTOEXEC.BAT or have, + for example, DJGPP.BAT which you can run before using DJGPP. + + Make sure you use completely upper case path in the DJGPP environment + variable. This is not required by DJGPP, but the XZ Utils Makefile is + a bit stupid and expects that everything in DJGPP environment variable + is uppercase. + + +Building + + Just run "make" in this directory (the directory containing this + README). You should get liblzma.a, xz.exe, xzdec.exe, and + lzmadec.exe. Of these, probably xz.exe is the only interesting one. + + Note: You need to have an environment that supports long filenames. + Once you have built XZ Utils, the resulting binaries can be run + without long filename support. + + +Additional Make Flags and Targets + + You may want to try some additional optimizations, which may or + may not make the code faster (and may or may not hit possible + compiler bugs more easily): + + make CFLAGS="-O3 -fomit-frame-pointer -funroll-loops" + + If you want to enable assertions (the assert() macro), use DEBUG=1. + You may want to disable optimizations too if you plan to actually + debug the code. Never use DEBUG=1 for production builds! + + make DEBUG=1 CFLAGS="-g -O0" + + +Bugs + + "make clean" may remove src/xz/hardware.c when it tries to remove + src/xz/hardware-fixed.c. This is probably a bug somewhere in the + DOS environment I use. Maybe it tries truncated 8.3 name first and + since that gives a name of an existing file, it doesn't look for + long filename. + + "xz -fc /dev/tty" hangs at least in DOSEMU and cannot be interrupted + by pressing C-c. Maybe xz should never accept non-regular files on + DOS even when --force is used. + + Using different memory usage limit for encoding and decoding doesn't + make sense under pure DOS. Maybe it is still OK when running under + Windows. + + The progress indicator of "xz -v" doesn't get updated when running + under Dosbox, but it works in DOSEMU. I currently (2009-02-13) don't + know if it works in other environments. + + Report bugs to (in English or Finnish). + diff --git a/Build/source/extra/xz-4.999.9beta/dos/config.h b/Build/source/extra/xz-4.999.9beta/dos/config.h new file mode 100644 index 00000000000..9c9fff022f8 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/dos/config.h @@ -0,0 +1,150 @@ +/* Define to 1 if using x86 assembler optimizations. */ +#define HAVE_ASM_X86 1 + +/* Define to 1 if crc32 integrity check is enabled. */ +#define HAVE_CHECK_CRC32 1 + +/* Define to 1 if crc64 integrity check is enabled. */ +#define HAVE_CHECK_CRC64 1 + +/* Define to 1 if sha256 integrity check is enabled. */ +#define HAVE_CHECK_SHA256 1 + +/* Define to 1 if decoder components are enabled. */ +#define HAVE_DECODER 1 + +/* Define to 1 if arm decoder is enabled. */ +#define HAVE_DECODER_ARM 1 + +/* Define to 1 if armthumb decoder is enabled. */ +#define HAVE_DECODER_ARMTHUMB 1 + +/* Define to 1 if delta decoder is enabled. */ +#define HAVE_DECODER_DELTA 1 + +/* Define to 1 if ia64 decoder is enabled. */ +#define HAVE_DECODER_IA64 1 + +/* Define to 1 if lzma1 decoder is enabled. */ +#define HAVE_DECODER_LZMA1 1 + +/* Define to 1 if lzma2 decoder is enabled. */ +#define HAVE_DECODER_LZMA2 1 + +/* Define to 1 if powerpc decoder is enabled. */ +#define HAVE_DECODER_POWERPC 1 + +/* Define to 1 if sparc decoder is enabled. */ +#define HAVE_DECODER_SPARC 1 + +/* Define to 1 if subblock decoder is enabled. */ +/* #undef HAVE_DECODER_SUBBLOCK */ + +/* Define to 1 if x86 decoder is enabled. */ +#define HAVE_DECODER_X86 1 + +/* Define to 1 if encoder components are enabled. */ +#define HAVE_ENCODER 1 + +/* Define to 1 if arm encoder is enabled. */ +#define HAVE_ENCODER_ARM 1 + +/* Define to 1 if armthumb encoder is enabled. */ +#define HAVE_ENCODER_ARMTHUMB 1 + +/* Define to 1 if delta encoder is enabled. */ +#define HAVE_ENCODER_DELTA 1 + +/* Define to 1 if ia64 encoder is enabled. */ +#define HAVE_ENCODER_IA64 1 + +/* Define to 1 if lzma1 encoder is enabled. */ +#define HAVE_ENCODER_LZMA1 1 + +/* Define to 1 if lzma2 encoder is enabled. */ +#define HAVE_ENCODER_LZMA2 1 + +/* Define to 1 if powerpc encoder is enabled. */ +#define HAVE_ENCODER_POWERPC 1 + +/* Define to 1 if sparc encoder is enabled. */ +#define HAVE_ENCODER_SPARC 1 + +/* Define to 1 if subblock encoder is enabled. */ +/* #undef HAVE_ENCODER_SUBBLOCK */ + +/* Define to 1 if x86 encoder is enabled. */ +#define HAVE_ENCODER_X86 1 + +/* Define to 1 if the system supports fast unaligned memory access. */ +#define HAVE_FAST_UNALIGNED_ACCESS 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 to enable bt2 match finder. */ +#define HAVE_MF_BT2 1 + +/* Define to 1 to enable bt3 match finder. */ +#define HAVE_MF_BT3 1 + +/* Define to 1 to enable bt4 match finder. */ +#define HAVE_MF_BT4 1 + +/* Define to 1 to enable hc3 match finder. */ +#define HAVE_MF_HC3 1 + +/* Define to 1 to enable hc4 match finder. */ +#define HAVE_MF_HC4 1 + +/* Define to 1 if optimizing for size. */ +/* #undef HAVE_SMALL */ + +/* Define to 1 if stdbool.h conforms to C99. */ +#define HAVE_STDBOOL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if the system has the type `uintptr_t'. */ +#define HAVE_UINTPTR_T 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the `utimes' function. */ +#define HAVE_UTIMES 1 + +/* Define to 1 or 0, depending whether the compiler supports simple visibility + declarations. */ +#define HAVE_VISIBILITY 0 + +/* Define to 1 if the system has the type `_Bool'. */ +#define HAVE__BOOL 1 + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "XZ Utils" + +/* The size of `size_t', as computed by sizeof. */ +#define SIZEOF_SIZE_T 4 + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 diff --git a/Build/source/extra/xz-4.999.9beta/extra/7z2lzma/7z2lzma.bash b/Build/source/extra/xz-4.999.9beta/extra/7z2lzma/7z2lzma.bash new file mode 100755 index 00000000000..35ea4dae973 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/extra/7z2lzma/7z2lzma.bash @@ -0,0 +1,115 @@ +#!/bin/bash +# +############################################################################# +# +# 7z2lzma.bash is very primitive .7z to .lzma converter. The input file must +# have exactly one LZMA compressed stream, which has been created with the +# default lc, lp, and pb values. The CRC32 in the .7z archive is not checked, +# and the script may seem to succeed while it actually created a corrupt .lzma +# file. You should always try uncompressing both the original .7z and the +# created .lzma and compare that the output is identical. +# +# This script requires basic GNU tools and 7z or 7za tool from p7zip. +# +# Last modified: 2009-01-15 14:25+0200 +# +############################################################################# +# +# Author: Lasse Collin +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# +############################################################################# + +# You can use 7z or 7za, both will work. +SEVENZIP=7za + +if [ $# != 2 -o -z "$1" -o -z "$2" ]; then + echo "Usage: $0 input.7z output.lzma" + exit 1 +fi + +# Converts an integer variable to little endian binary integer. +int2bin() +{ + local LEN=$1 + local NUM=$2 + local HEX=(0 1 2 3 4 5 6 7 8 9 A B C D E F) + local I + for ((I=0; I < "$LEN"; ++I)); do + printf "\\x${HEX[(NUM >> 4) & 0x0F]}${HEX[NUM & 0x0F]}" + NUM=$((NUM >> 8)) + done +} + +# Make sure we get possible errors from pipes. +set -o pipefail + +# Get information about the input file. At least older 7z and 7za versions +# may return with zero exit status even when an error occurred, so check +# if the output has any lines beginning with "Error". +INFO=$("$SEVENZIP" l -slt "$1") +if [ $? != 0 ] || printf '%s\n' "$INFO" | grep -q ^Error; then + printf '%s\n' "$INFO" + exit 1 +fi + +# Check if the input file has more than one compressed block. +if printf '%s\n' "$INFO" | grep -q '^Block = 1'; then + echo "Cannot convert, because the input file has more than" + echo "one compressed block." + exit 1 +fi + +# Get copmressed, uncompressed, and dictionary size. +CSIZE=$(printf '%s\n' "$INFO" | sed -rn 's|^Packed Size = ([0-9]+$)|\1|p') +USIZE=$(printf '%s\n' "$INFO" | sed -rn 's|^Size = ([0-9]+$)|\1|p') +DICT=$(printf '%s\n' "$INFO" | sed -rn 's|^Method = LZMA:([0-9]+[bkm]?)$|\1|p') + +if [ -z "$CSIZE" -o -z "$USIZE" -o -z "$DICT" ]; then + echo "Parsing output of $SEVENZIP failed. Maybe the file uses some" + echo "other compression method than plain LZMA." + exit 1 +fi + +# The following assumes that the default lc, lp, and pb settings were used. +# Otherwise the output will be corrupt. +printf '\x5D' > "$2" + +# Dictionary size can be either was power of two, bytes, kibibytes, or +# mebibytes. We need to convert it to bytes. +case $DICT in + *b) + DICT=${DICT%b} + ;; + *k) + DICT=${DICT%k} + DICT=$((DICT << 10)) + ;; + *m) + DICT=${DICT%m} + DICT=$((DICT << 20)) + ;; + *) + DICT=$((1 << DICT)) + ;; +esac +int2bin 4 "$DICT" >> "$2" + +# Uncompressed size +int2bin 8 "$USIZE" >> "$2" + +# Copy the actual compressed data. Using multiple dd commands to avoid +# copying large amount of data with one-byte block size, which would be +# annoyingly slow. +BS=8192 +BIGSIZE=$((CSIZE / BS)) +CSIZE=$((CSIZE % BS)) +{ + dd of=/dev/null bs=32 count=1 \ + && dd bs="$BS" count="$BIGSIZE" \ + && dd bs=1 count="$CSIZE" +} < "$1" >> "$2" + +exit $? diff --git a/Build/source/extra/xz-4.999.9beta/extra/scanlzma/scanlzma.c b/Build/source/extra/xz-4.999.9beta/extra/scanlzma/scanlzma.c new file mode 100644 index 00000000000..5c3b25be32a --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/extra/scanlzma/scanlzma.c @@ -0,0 +1,84 @@ +/* + scanlzma, scan for lzma compressed data in stdin and echo it to stdout. + Copyright (C) 2006 Timo Lindfors + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +*/ + +/* Usage example: + + $ wget http://www.wifi-shop.cz/Files/produkty/wa2204/wa2204av1.4.1.zip + $ unzip wa2204av1.4.1.zip + $ gcc scanlzma.c -o scanlzma -Wall + $ ./scanlzma 0 < WA2204-FW1.4.1/linux-1.4.bin | lzma -c -d | strings | grep -i "copyright" + UpdateDD version 2.5, Copyright (C) 2005 Philipp Benner. + Copyright (C) 2005 Philipp Benner. + Copyright (C) 2005 Philipp Benner. + mawk 1.3%s%s %s, Copyright (C) Michael D. Brennan + # Copyright (C) 1998, 1999, 2001 Henry Spencer. + ... + +*/ + + +/* LZMA compressed file format */ +/* --------------------------- */ +/* Offset Size Description */ +/* 0 1 Special LZMA properties for compressed data */ +/* 1 4 Dictionary size (little endian) */ +/* 5 8 Uncompressed size (little endian). -1 means unknown size */ +/* 13 Compressed data */ + +#define BUFSIZE 4096 + +int find_lzma_header(unsigned char *buf) { + return (buf[0] < 0xE1 + && buf[0] == 0x5d + && buf[4] < 0x20 + && (memcmp (buf + 10 , "\x00\x00\x00", 3) == 0 + || (memcmp (buf + 5, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", 8) == 0))); +} + +int main(int argc, char *argv[]) { + char buf[BUFSIZE]; + int ret, i, numlzma, blocks=0; + + if (argc != 2) { + printf("usage: %s numlzma < infile | lzma -c -d > outfile\n" + "where numlzma is index of lzma file to extract, starting from zero.\n", + argv[0]); + exit(1); + } + numlzma = atoi(argv[1]); + + for (;;) { + /* Read data. */ + ret = fread(buf, BUFSIZE, 1, stdin); + if (ret != 1) + break; + + /* Scan for signature. */ + for (i = 0; i $@-t + mv -f $@-t $@ diff --git a/Build/source/extra/xz-4.999.9beta/lib/Makefile.in b/Build/source/extra/xz-4.999.9beta/lib/Makefile.in new file mode 100644 index 00000000000..6434e2868eb --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/lib/Makefile.in @@ -0,0 +1,525 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ +subdir = lib +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in getopt.c \ + getopt1.c +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ + $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +libgnu_a_AR = $(AR) $(ARFLAGS) +am_libgnu_a_OBJECTS = +libgnu_a_OBJECTS = $(am_libgnu_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libgnu_a_SOURCES) +DIST_SOURCES = $(libgnu_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ +DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETOPT_H = @GETOPT_H@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSIX_SHELL = @POSIX_SHELL@ +POSUB = @POSUB@ +PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ +STATIC_LDFLAGS = @STATIC_LDFLAGS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +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@ +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@ +lt_ECHO = @lt_ECHO@ +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@ +xz = @xz@ +noinst_LIBRARIES = libgnu.a +libgnu_a_SOURCES = +libgnu_a_DEPENDENCIES = $(LIBOBJS) +libgnu_a_LIBADD = $(LIBOBJS) +EXTRA_DIST = getopt.in.h getopt.c getopt1.c getopt_int.h +BUILT_SOURCES = $(GETOPT_H) +MOSTLYCLEANFILES = getopt.h getopt.h-t +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libgnu.a: $(libgnu_a_OBJECTS) $(libgnu_a_DEPENDENCIES) + -rm -f libgnu.a + $(libgnu_a_AR) libgnu.a $(libgnu_a_OBJECTS) $(libgnu_a_LIBADD) + $(RANLIB) libgnu.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt1.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +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) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + 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; }; }'`; \ + 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) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + 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; }; }'`; \ + 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 + +distdir: $(DISTFILES) + @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 +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) 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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +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." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf $(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +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 -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: + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am 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 + + +getopt.h: getopt.in.h + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/getopt.in.h; \ + } > $@-t + mv -f $@-t $@ + +# 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/Build/source/extra/xz-4.999.9beta/lib/getopt.c b/Build/source/extra/xz-4.999.9beta/lib/getopt.c new file mode 100644 index 00000000000..1d14b245b2b --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/lib/getopt.c @@ -0,0 +1,1197 @@ +/* Getopt for GNU. + NOTE: getopt is now part of the C library, so if you don't know what + "Keep this file name-space clean" means, talk to drepper@gnu.org + before changing it! + Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001,2002,2003,2004,2006 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _LIBC +# include +#endif + +#include "getopt.h" + +#include +#include +#include +#include + +#ifdef __VMS +# include +#endif + +/* Completely disable NLS for getopt. We won't include translations for it + anyway. If the system lacks getopt_long, missing translations probably + aren't a problem. */ +/* +#ifdef _LIBC +# include +#else +# include "gettext.h" +# define _(msgid) gettext (msgid) +#endif +*/ +#define _(msgid) (msgid) + +#if defined _LIBC && defined USE_IN_LIBIO +# include +#endif + +#ifndef attribute_hidden +# define attribute_hidden +#endif + +/* Unlike standard Unix `getopt', functions like `getopt_long' + let the user intersperse the options with the other arguments. + + As `getopt_long' works, it permutes the elements of ARGV so that, + when it is done, all the options precede everything else. Thus + all application programs are extended to handle flexible argument order. + + Using `getopt' or setting the environment variable POSIXLY_CORRECT + disables permutation. + Then the application's behavior is completely standard. + + GNU application programs can use a third alternative mode in which + they can distinguish the relative order of options and other arguments. */ + +#include "getopt_int.h" + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +/* 1003.2 says this must be 1 before any call. */ +int optind = 1; + +/* Callers store zero here to inhibit the error message + for unrecognized options. */ + +int opterr = 1; + +/* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + +int optopt = '?'; + +/* Keep a global copy of all internal members of getopt_data. */ + +static struct _getopt_data getopt_data; + + +#if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV +extern char *getenv (); +#endif + +#ifdef _LIBC +/* Stored original parameters. + XXX This is no good solution. We should rather copy the args so + that we can compare them later. But we must not use malloc(3). */ +extern int __libc_argc; +extern char **__libc_argv; + +/* Bash 2.0 gives us an environment variable containing flags + indicating ARGV elements that should not be considered arguments. */ + +# ifdef USE_NONOPTION_FLAGS +/* Defined in getopt_init.c */ +extern char *__getopt_nonoption_flags; +# endif + +# ifdef USE_NONOPTION_FLAGS +# define SWAP_FLAGS(ch1, ch2) \ + if (d->__nonoption_flags_len > 0) \ + { \ + char __tmp = __getopt_nonoption_flags[ch1]; \ + __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ + __getopt_nonoption_flags[ch2] = __tmp; \ + } +# else +# define SWAP_FLAGS(ch1, ch2) +# endif +#else /* !_LIBC */ +# define SWAP_FLAGS(ch1, ch2) +#endif /* _LIBC */ + +/* Exchange two adjacent subsequences of ARGV. + One subsequence is elements [first_nonopt,last_nonopt) + which contains all the non-options that have been skipped so far. + The other is elements [last_nonopt,optind), which contains all + the options processed since those non-options were skipped. + + `first_nonopt' and `last_nonopt' are relocated so that they describe + the new indices of the non-options in ARGV after they are moved. */ + +static void +exchange (char **argv, struct _getopt_data *d) +{ + int bottom = d->__first_nonopt; + int middle = d->__last_nonopt; + int top = d->optind; + char *tem; + + /* Exchange the shorter segment with the far end of the longer segment. + That puts the shorter segment into the right place. + It leaves the longer segment in the right place overall, + but it consists of two parts that need to be swapped next. */ + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + /* First make sure the handling of the `__getopt_nonoption_flags' + string can work normally. Our top argument must be in the range + of the string. */ + if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len) + { + /* We must extend the array. The user plays games with us and + presents new arguments. */ + char *new_str = malloc (top + 1); + if (new_str == NULL) + d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0; + else + { + memset (__mempcpy (new_str, __getopt_nonoption_flags, + d->__nonoption_flags_max_len), + '\0', top + 1 - d->__nonoption_flags_max_len); + d->__nonoption_flags_max_len = top + 1; + __getopt_nonoption_flags = new_str; + } + } +#endif + + while (top > middle && middle > bottom) + { + if (top - middle > middle - bottom) + { + /* Bottom segment is the short one. */ + int len = middle - bottom; + register int i; + + /* Swap it with the top part of the top segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[top - (middle - bottom) + i]; + argv[top - (middle - bottom) + i] = tem; + SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); + } + /* Exclude the moved bottom segment from further swapping. */ + top -= len; + } + else + { + /* Top segment is the short one. */ + int len = top - middle; + register int i; + + /* Swap it with the bottom part of the bottom segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[middle + i]; + argv[middle + i] = tem; + SWAP_FLAGS (bottom + i, middle + i); + } + /* Exclude the moved top segment from further swapping. */ + bottom += len; + } + } + + /* Update records for the slots the non-options now occupy. */ + + d->__first_nonopt += (d->optind - d->__last_nonopt); + d->__last_nonopt = d->optind; +} + +/* Initialize the internal data when the first call is made. */ + +static const char * +_getopt_initialize (int argc, char **argv, const char *optstring, + int posixly_correct, struct _getopt_data *d) +{ + /* Start processing options with ARGV-element 1 (since ARGV-element 0 + is the program name); the sequence of previously skipped + non-option ARGV-elements is empty. */ + + d->__first_nonopt = d->__last_nonopt = d->optind; + + d->__nextchar = NULL; + + d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT"); + + /* Determine how to handle the ordering of options and nonoptions. */ + + if (optstring[0] == '-') + { + d->__ordering = RETURN_IN_ORDER; + ++optstring; + } + else if (optstring[0] == '+') + { + d->__ordering = REQUIRE_ORDER; + ++optstring; + } + else if (d->__posixly_correct) + d->__ordering = REQUIRE_ORDER; + else + d->__ordering = PERMUTE; + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + if (!d->__posixly_correct + && argc == __libc_argc && argv == __libc_argv) + { + if (d->__nonoption_flags_max_len == 0) + { + if (__getopt_nonoption_flags == NULL + || __getopt_nonoption_flags[0] == '\0') + d->__nonoption_flags_max_len = -1; + else + { + const char *orig_str = __getopt_nonoption_flags; + int len = d->__nonoption_flags_max_len = strlen (orig_str); + if (d->__nonoption_flags_max_len < argc) + d->__nonoption_flags_max_len = argc; + __getopt_nonoption_flags = + (char *) malloc (d->__nonoption_flags_max_len); + if (__getopt_nonoption_flags == NULL) + d->__nonoption_flags_max_len = -1; + else + memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), + '\0', d->__nonoption_flags_max_len - len); + } + } + d->__nonoption_flags_len = d->__nonoption_flags_max_len; + } + else + d->__nonoption_flags_len = 0; +#endif + + return optstring; +} + +/* Scan elements of ARGV (whose length is ARGC) for option characters + given in OPTSTRING. + + If an element of ARGV starts with '-', and is not exactly "-" or "--", + then it is an option element. The characters of this element + (aside from the initial '-') are option characters. If `getopt' + is called repeatedly, it returns successively each of the option characters + from each of the option elements. + + If `getopt' finds another option character, it returns that character, + updating `optind' and `nextchar' so that the next call to `getopt' can + resume the scan with the following option character or ARGV-element. + + If there are no more option characters, `getopt' returns -1. + Then `optind' is the index in ARGV of the first ARGV-element + that is not an option. (The ARGV-elements have been permuted + so that those that are not options now come last.) + + OPTSTRING is a string containing the legitimate option characters. + If an option character is seen that is not listed in OPTSTRING, + return '?' after printing an error message. If you set `opterr' to + zero, the error message is suppressed but we still return '?'. + + If a char in OPTSTRING is followed by a colon, that means it wants an arg, + so the following text in the same ARGV-element, or the text of the following + ARGV-element, is returned in `optarg'. Two colons mean an option that + wants an optional arg; if there is text in the current ARGV-element, + it is returned in `optarg', otherwise `optarg' is set to zero. + + If OPTSTRING starts with `-' or `+', it requests different methods of + handling the non-option ARGV-elements. + See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. + + Long-named options begin with `--' instead of `-'. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the same ARGV-element, separated + from the option name by a `=', or else the in next ARGV-element. + When `getopt' finds a long-named option, it returns 0 if that option's + `flag' field is nonzero, the value of the option's `val' field + if the `flag' field is zero. + + LONGOPTS is a vector of `struct option' terminated by an + element containing a name which is zero. + + LONGIND returns the index in LONGOPT of the long-named option found. + It is only valid when a long-named option has been found by the most + recent call. + + If LONG_ONLY is nonzero, '-' as well as '--' can introduce + long-named options. + + If POSIXLY_CORRECT is nonzero, behave as if the POSIXLY_CORRECT + environment variable were set. */ + +int +_getopt_internal_r (int argc, char **argv, const char *optstring, + const struct option *longopts, int *longind, + int long_only, int posixly_correct, struct _getopt_data *d) +{ + int print_errors = d->opterr; + if (optstring[0] == ':') + print_errors = 0; + + if (argc < 1) + return -1; + + d->optarg = NULL; + + if (d->optind == 0 || !d->__initialized) + { + if (d->optind == 0) + d->optind = 1; /* Don't scan ARGV[0], the program name. */ + optstring = _getopt_initialize (argc, argv, optstring, + posixly_correct, d); + d->__initialized = 1; + } + + /* Test whether ARGV[optind] points to a non-option argument. + Either it does not have option syntax, or there is an environment flag + from the shell indicating it is not an option. The later information + is only used when the used in the GNU libc. */ +#if defined _LIBC && defined USE_NONOPTION_FLAGS +# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \ + || (d->optind < d->__nonoption_flags_len \ + && __getopt_nonoption_flags[d->optind] == '1')) +#else +# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') +#endif + + if (d->__nextchar == NULL || *d->__nextchar == '\0') + { + /* Advance to the next ARGV-element. */ + + /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been + moved back by the user (who may also have changed the arguments). */ + if (d->__last_nonopt > d->optind) + d->__last_nonopt = d->optind; + if (d->__first_nonopt > d->optind) + d->__first_nonopt = d->optind; + + if (d->__ordering == PERMUTE) + { + /* If we have just processed some options following some non-options, + exchange them so that the options come first. */ + + if (d->__first_nonopt != d->__last_nonopt + && d->__last_nonopt != d->optind) + exchange ((char **) argv, d); + else if (d->__last_nonopt != d->optind) + d->__first_nonopt = d->optind; + + /* Skip any additional non-options + and extend the range of non-options previously skipped. */ + + while (d->optind < argc && NONOPTION_P) + d->optind++; + d->__last_nonopt = d->optind; + } + + /* The special ARGV-element `--' means premature end of options. + Skip it like a null option, + then exchange with previous non-options as if it were an option, + then skip everything else like a non-option. */ + + if (d->optind != argc && !strcmp (argv[d->optind], "--")) + { + d->optind++; + + if (d->__first_nonopt != d->__last_nonopt + && d->__last_nonopt != d->optind) + exchange ((char **) argv, d); + else if (d->__first_nonopt == d->__last_nonopt) + d->__first_nonopt = d->optind; + d->__last_nonopt = argc; + + d->optind = argc; + } + + /* If we have done all the ARGV-elements, stop the scan + and back over any non-options that we skipped and permuted. */ + + if (d->optind == argc) + { + /* Set the next-arg-index to point at the non-options + that we previously skipped, so the caller will digest them. */ + if (d->__first_nonopt != d->__last_nonopt) + d->optind = d->__first_nonopt; + return -1; + } + + /* If we have come to a non-option and did not permute it, + either stop the scan or describe it to the caller and pass it by. */ + + if (NONOPTION_P) + { + if (d->__ordering == REQUIRE_ORDER) + return -1; + d->optarg = argv[d->optind++]; + return 1; + } + + /* We have found another option-ARGV-element. + Skip the initial punctuation. */ + + d->__nextchar = (argv[d->optind] + 1 + + (longopts != NULL && argv[d->optind][1] == '-')); + } + + /* Decode the current option-ARGV-element. */ + + /* Check whether the ARGV-element is a long option. + + If long_only and the ARGV-element has the form "-f", where f is + a valid short option, don't consider it an abbreviated form of + a long option that starts with f. Otherwise there would be no + way to give the -f short option. + + On the other hand, if there's a long option "fubar" and + the ARGV-element is "-fu", do consider that an abbreviation of + the long option, just like "--fu", and not "-f" with arg "u". + + This distinction seems to be the most useful approach. */ + + if (longopts != NULL + && (argv[d->optind][1] == '-' + || (long_only && (argv[d->optind][2] + || !strchr (optstring, argv[d->optind][1]))))) + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = -1; + int option_index; + + for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar)) + { + if ((unsigned int) (nameend - d->__nextchar) + == (unsigned int) strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else if (long_only + || pfound->has_arg != p->has_arg + || pfound->flag != p->flag + || pfound->val != p->val) + /* Second or later nonexact match found. */ + ambig = 1; + } + + if (ambig && !exact) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"), + argv[0], argv[d->optind]) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("%s: option `%s' is ambiguous\n"), + argv[0], argv[d->optind]); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optind++; + d->optopt = 0; + return '?'; + } + + if (pfound != NULL) + { + option_index = indfound; + d->optind++; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + d->optarg = nameend + 1; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + + if (argv[d->optind - 1][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("\ +%s: option `--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#else + fprintf (stderr, _("\ +%s: option `--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("\ +%s: option `%c%s' doesn't allow an argument\n"), + argv[0], argv[d->optind - 1][0], + pfound->name); +#else + fprintf (stderr, _("\ +%s: option `%c%s' doesn't allow an argument\n"), + argv[0], argv[d->optind - 1][0], + pfound->name); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + + d->__nextchar += strlen (d->__nextchar); + + d->optopt = pfound->val; + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (d->optind < argc) + d->optarg = argv[d->optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option `%s' requires an argument\n"), + argv[0], argv[d->optind - 1]) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[d->optind - 1]); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optopt = pfound->val; + return optstring[0] == ':' ? ':' : '?'; + } + } + d->__nextchar += strlen (d->__nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + /* Can't find it as a long option. If this is not getopt_long_only, + or the option starts with '--' or is not a valid short + option, then it's an error. + Otherwise interpret it as a short option. */ + if (!long_only || argv[d->optind][1] == '-' + || strchr (optstring, *d->__nextchar) == NULL) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + + if (argv[d->optind][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"), + argv[0], d->__nextchar); +#else + fprintf (stderr, _("%s: unrecognized option `--%s'\n"), + argv[0], d->__nextchar); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"), + argv[0], argv[d->optind][0], d->__nextchar); +#else + fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), + argv[0], argv[d->optind][0], d->__nextchar); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + d->__nextchar = (char *) ""; + d->optind++; + d->optopt = 0; + return '?'; + } + } + + /* Look at and handle the next short option-character. */ + + { + char c = *d->__nextchar++; + char *temp = strchr (optstring, c); + + /* Increment `optind' when we start to process its last character. */ + if (*d->__nextchar == '\0') + ++d->optind; + + if (temp == NULL || c == ':') + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + + if (d->__posixly_correct) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: illegal option -- %c\n"), + argv[0], c); +#else + fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); +#endif + } + else + { +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: invalid option -- %c\n"), + argv[0], c); +#else + fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + d->optopt = c; + return '?'; + } + /* Convenience. Treat POSIX -W foo same as long option --foo */ + if (temp[0] == 'W' && temp[1] == ';') + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = 0; + int option_index; + + /* This is an option that requires an argument. */ + if (*d->__nextchar != '\0') + { + d->optarg = d->__nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + d->optind++; + } + else if (d->optind == argc) + { + if (print_errors) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, + _("%s: option requires an argument -- %c\n"), + argv[0], c) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("%s: option requires an argument -- %c\n"), + argv[0], c); +#endif + } + d->optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + return c; + } + else + /* We already incremented `d->optind' once; + increment it again when taking next ARGV-elt as argument. */ + d->optarg = argv[d->optind++]; + + /* optarg is now the argument, see if it's in the + table of longopts. */ + + for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '='; + nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar)) + { + if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else + /* Second or later nonexact match found. */ + ambig = 1; + } + if (ambig && !exact) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"), + argv[0], argv[d->optind]) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), + argv[0], argv[d->optind]); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optind++; + return '?'; + } + if (pfound != NULL) + { + option_index = indfound; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + d->optarg = nameend + 1; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option `-W %s' doesn't allow an argument\n"), + argv[0], pfound->name) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("\ +%s: option `-W %s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + + d->__nextchar += strlen (d->__nextchar); + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (d->optind < argc) + d->optarg = argv[d->optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option `%s' requires an argument\n"), + argv[0], argv[d->optind - 1]) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[d->optind - 1]); +#endif + } + d->__nextchar += strlen (d->__nextchar); + return optstring[0] == ':' ? ':' : '?'; + } + } + d->__nextchar += strlen (d->__nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + d->__nextchar = NULL; + return 'W'; /* Let the application handle it. */ + } + if (temp[1] == ':') + { + if (temp[2] == ':') + { + /* This is an option that accepts an argument optionally. */ + if (*d->__nextchar != '\0') + { + d->optarg = d->__nextchar; + d->optind++; + } + else + d->optarg = NULL; + d->__nextchar = NULL; + } + else + { + /* This is an option that requires an argument. */ + if (*d->__nextchar != '\0') + { + d->optarg = d->__nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + d->optind++; + } + else if (d->optind == argc) + { + if (print_errors) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option requires an argument -- %c\n"), + argv[0], c) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option requires an argument -- %c\n"), + argv[0], c); +#endif + } + d->optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + d->optarg = argv[d->optind++]; + d->__nextchar = NULL; + } + } + return c; + } +} + +int +_getopt_internal (int argc, char **argv, const char *optstring, + const struct option *longopts, int *longind, + int long_only, int posixly_correct) +{ + int result; + + getopt_data.optind = optind; + getopt_data.opterr = opterr; + + result = _getopt_internal_r (argc, argv, optstring, longopts, longind, + long_only, posixly_correct, &getopt_data); + + optind = getopt_data.optind; + optarg = getopt_data.optarg; + optopt = getopt_data.optopt; + + return result; +} + +/* glibc gets a LSB-compliant getopt. + Standalone applications get a POSIX-compliant getopt. */ +#if _LIBC +enum { POSIXLY_CORRECT = 0 }; +#else +enum { POSIXLY_CORRECT = 1 }; +#endif + +int +getopt (int argc, char *const *argv, const char *optstring) +{ + return _getopt_internal (argc, (char **) argv, optstring, NULL, NULL, 0, + POSIXLY_CORRECT); +} + + +#ifdef TEST + +/* Compile with -DTEST to make an executable for use in testing + the above definition of `getopt'. */ + +int +main (int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == -1) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/Build/source/extra/xz-4.999.9beta/lib/getopt.in.h b/Build/source/extra/xz-4.999.9beta/lib/getopt.in.h new file mode 100644 index 00000000000..ea77e3d749d --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/lib/getopt.in.h @@ -0,0 +1,226 @@ +/* Declarations for getopt. + Copyright (C) 1989-1994,1996-1999,2001,2003,2004,2005,2006,2007 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GETOPT_H + +#ifndef __need_getopt +# define _GETOPT_H 1 +#endif + +/* Standalone applications should #define __GETOPT_PREFIX to an + identifier that prefixes the external functions and variables + defined in this header. When this happens, include the + headers that might declare getopt so that they will not cause + confusion if included after this file. Then systematically rename + identifiers so that they do not collide with the system functions + and variables. Renaming avoids problems with some compilers and + linkers. */ +#if defined __GETOPT_PREFIX && !defined __need_getopt +# include +# include +# include +# undef __need_getopt +# undef getopt +# undef getopt_long +# undef getopt_long_only +# undef optarg +# undef opterr +# undef optind +# undef optopt +# define __GETOPT_CONCAT(x, y) x ## y +# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) +# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) +# define getopt __GETOPT_ID (getopt) +# define getopt_long __GETOPT_ID (getopt_long) +# define getopt_long_only __GETOPT_ID (getopt_long_only) +# define optarg __GETOPT_ID (optarg) +# define opterr __GETOPT_ID (opterr) +# define optind __GETOPT_ID (optind) +# define optopt __GETOPT_ID (optopt) +#endif + +/* Standalone applications get correct prototypes for getopt_long and + getopt_long_only; they declare "char **argv". libc uses prototypes + with "char *const *argv" that are incorrect because getopt_long and + getopt_long_only can permute argv; this is required for backward + compatibility (e.g., for LSB 2.0.1). + + This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt', + but it caused redefinition warnings if both unistd.h and getopt.h were + included, since unistd.h includes getopt.h having previously defined + __need_getopt. + + The only place where __getopt_argv_const is used is in definitions + of getopt_long and getopt_long_only below, but these are visible + only if __need_getopt is not defined, so it is quite safe to rewrite + the conditional as follows: +*/ +#if !defined __need_getopt +# if defined __GETOPT_PREFIX +# define __getopt_argv_const /* empty */ +# else +# define __getopt_argv_const const +# endif +#endif + +/* If __GNU_LIBRARY__ is not already defined, either we are being used + standalone, or this is the first header included in the source file. + If we are being used with glibc, we need to include , but + that does not exist if we are standalone. So: if __GNU_LIBRARY__ is + not defined, include , which will pull in for us + if it's from glibc. (Why ctype.h? It's guaranteed to exist and it + doesn't flood the namespace with stuff the way some other headers do.) */ +#if !defined __GNU_LIBRARY__ +# include +#endif + +#ifndef __THROW +# ifndef __GNUC_PREREQ +# define __GNUC_PREREQ(maj, min) (0) +# endif +# if defined __cplusplus && __GNUC_PREREQ (2,8) +# define __THROW throw () +# else +# define __THROW +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message `getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +#ifndef __need_getopt +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of `struct option' terminated by an element containing a name which is + zero. + + The field `has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field `flag' is not NULL, it points to a variable that is set + to the value given in the field `val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an `int' to + a compiled-in constant, such as set a value from `optarg', set the + option's `flag' field to zero and its `val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero `flag' field, `getopt' + returns the contents of the `val' field. */ + +struct option +{ + const char *name; + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; + +/* Names for the values of the `has_arg' field of `struct option'. */ + +# define no_argument 0 +# define required_argument 1 +# define optional_argument 2 +#endif /* need getopt */ + + +/* Get definitions and prototypes for functions to process the + arguments in ARGV (ARGC of them, minus the program name) for + options given in OPTS. + + Return the option character from OPTS just read. Return -1 when + there are no more options. For unrecognized options, or options + missing arguments, `optopt' is set to the option letter, and '?' is + returned. + + The OPTS string is a list of characters which are recognized option + letters, optionally followed by colons, specifying that that letter + takes an argument, to be placed in `optarg'. + + If a letter in OPTS is followed by two colons, its argument is + optional. This behavior is specific to the GNU `getopt'. + + The argument `--' causes premature termination of argument + scanning, explicitly telling `getopt' that there are no more + options. + + If OPTS begins with `-', then non-option arguments are treated as + arguments to the option '\1'. This behavior is specific to the GNU + `getopt'. If OPTS begins with `+', or POSIXLY_CORRECT is set in + the environment, then do not permute arguments. */ + +extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) + __THROW; + +#ifndef __need_getopt +extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW; +extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW; + +#endif + +#ifdef __cplusplus +} +#endif + +/* Make sure we later can get all the definitions and declarations. */ +#undef __need_getopt + +#endif /* getopt.h */ diff --git a/Build/source/extra/xz-4.999.9beta/lib/getopt1.c b/Build/source/extra/xz-4.999.9beta/lib/getopt1.c new file mode 100644 index 00000000000..da5d53300b1 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/lib/getopt1.c @@ -0,0 +1,171 @@ +/* getopt_long and getopt_long_only entry points for GNU getopt. + Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2004,2006 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifdef _LIBC +# include +#else +# include +# include "getopt.h" +#endif +#include "getopt_int.h" + +#include + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +#include +#endif + +#ifndef NULL +#define NULL 0 +#endif + +int +getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, + const struct option *long_options, int *opt_index) +{ + return _getopt_internal (argc, (char **) argv, options, long_options, + opt_index, 0, 0); +} + +int +_getopt_long_r (int argc, char **argv, const char *options, + const struct option *long_options, int *opt_index, + struct _getopt_data *d) +{ + return _getopt_internal_r (argc, argv, options, long_options, opt_index, + 0, 0, d); +} + +/* Like getopt_long, but '-' as well as '--' can indicate a long option. + If an option that starts with '-' (not '--') doesn't match a long option, + but does match a short option, it is parsed as a short option + instead. */ + +int +getopt_long_only (int argc, char *__getopt_argv_const *argv, + const char *options, + const struct option *long_options, int *opt_index) +{ + return _getopt_internal (argc, (char **) argv, options, long_options, + opt_index, 1, 0); +} + +int +_getopt_long_only_r (int argc, char **argv, const char *options, + const struct option *long_options, int *opt_index, + struct _getopt_data *d) +{ + return _getopt_internal_r (argc, argv, options, long_options, opt_index, + 1, 0, d); +} + + +#ifdef TEST + +#include + +int +main (int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static struct option long_options[] = + { + {"add", 1, 0, 0}, + {"append", 0, 0, 0}, + {"delete", 1, 0, 0}, + {"verbose", 0, 0, 0}, + {"create", 0, 0, 0}, + {"file", 1, 0, 0}, + {0, 0, 0, 0} + }; + + c = getopt_long (argc, argv, "abc:d:0123456789", + long_options, &option_index); + if (c == -1) + break; + + switch (c) + { + case 0: + printf ("option %s", long_options[option_index].name); + if (optarg) + printf (" with arg %s", optarg); + printf ("\n"); + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case 'd': + printf ("option d with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/Build/source/extra/xz-4.999.9beta/lib/getopt_int.h b/Build/source/extra/xz-4.999.9beta/lib/getopt_int.h new file mode 100644 index 00000000000..401579fd289 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/lib/getopt_int.h @@ -0,0 +1,131 @@ +/* Internal declarations for getopt. + Copyright (C) 1989-1994,1996-1999,2001,2003,2004 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + 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, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GETOPT_INT_H +#define _GETOPT_INT_H 1 + +extern int _getopt_internal (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only, int __posixly_correct); + + +/* Reentrant versions which can handle parsing multiple argument + vectors at the same time. */ + +/* Data type for reentrant functions. */ +struct _getopt_data +{ + /* These have exactly the same meaning as the corresponding global + variables, except that they are used for the reentrant + versions of getopt. */ + int optind; + int opterr; + int optopt; + char *optarg; + + /* Internal members. */ + + /* True if the internal members have been initialized. */ + int __initialized; + + /* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + char *__nextchar; + + /* Describe how to deal with options that follow non-option ARGV-elements. + + If the caller did not specify anything, + the default is REQUIRE_ORDER if the environment variable + POSIXLY_CORRECT is defined, PERMUTE otherwise. + + REQUIRE_ORDER means don't recognize them as options; + stop option processing when the first non-option is seen. + This is what Unix does. + This mode of operation is selected by either setting the environment + variable POSIXLY_CORRECT, or using `+' as the first character + of the list of option characters, or by calling getopt. + + PERMUTE is the default. We permute the contents of ARGV as we + scan, so that eventually all the non-options are at the end. + This allows options to be given in any order, even with programs + that were not written to expect this. + + RETURN_IN_ORDER is an option available to programs that were + written to expect options and other ARGV-elements in any order + and that care about the ordering of the two. We describe each + non-option ARGV-element as if it were the argument of an option + with character code 1. Using `-' as the first character of the + list of option characters selects this mode of operation. + + The special argument `--' forces an end of option-scanning regardless + of the value of `ordering'. In the case of RETURN_IN_ORDER, only + `--' can cause `getopt' to return -1 with `optind' != ARGC. */ + + enum + { + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER + } __ordering; + + /* If the POSIXLY_CORRECT environment variable is set + or getopt was called. */ + int __posixly_correct; + + + /* Handle permutation of arguments. */ + + /* Describe the part of ARGV that contains non-options that have + been skipped. `first_nonopt' is the index in ARGV of the first + of them; `last_nonopt' is the index after the last of them. */ + + int __first_nonopt; + int __last_nonopt; + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + int __nonoption_flags_max_len; + int __nonoption_flags_len; +# endif +}; + +/* The initializer is necessary to set OPTIND and OPTERR to their + default values and to clear the initialization flag. */ +#define _GETOPT_DATA_INITIALIZER { 1, 1 } + +extern int _getopt_internal_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only, int __posixly_correct, + struct _getopt_data *__data); + +extern int _getopt_long_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + struct _getopt_data *__data); + +extern int _getopt_long_only_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, + int *__longind, + struct _getopt_data *__data); + +#endif /* getopt_int.h */ diff --git a/Build/source/extra/xz-4.999.9beta/m4/acx_pthread.m4 b/Build/source/extra/xz-4.999.9beta/m4/acx_pthread.m4 new file mode 100644 index 00000000000..d2b116945f9 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/acx_pthread.m4 @@ -0,0 +1,279 @@ +##### http://autoconf-archive.cryp.to/acx_pthread.html +# +# SYNOPSIS +# +# ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro figures out how to build C programs using POSIX threads. +# It sets the PTHREAD_LIBS output variable to the threads library and +# linker flags, and the PTHREAD_CFLAGS output variable to any special +# C compiler flags that are needed. (The user can also force certain +# compiler flags/libs to be tested by setting these environment +# variables.) +# +# Also sets PTHREAD_CC to any special C compiler that is needed for +# multi-threaded programs (defaults to the value of CC otherwise). +# (This is necessary on AIX to use the special cc_r compiler alias.) +# +# NOTE: You are assumed to not only compile your program with these +# flags, but also link it with them as well. e.g. you should link +# with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS +# $LIBS +# +# If you are only building threads programs, you may wish to use +# these variables in your default LIBS, CFLAGS, and CC: +# +# LIBS="$PTHREAD_LIBS $LIBS" +# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +# CC="$PTHREAD_CC" +# +# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute +# constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to +# that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). +# +# ACTION-IF-FOUND is a list of shell commands to run if a threads +# library is found, and ACTION-IF-NOT-FOUND is a list of commands to +# run it if it is not found. If ACTION-IF-FOUND is not specified, the +# default action will define HAVE_PTHREAD. +# +# Please let the authors know if this macro fails on any platform, or +# if you have any other suggestions or comments. This macro was based +# on work by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) +# (with help from M. Frigo), as well as ac_pthread and hb_pthread +# macros posted by Alejandro Forero Cuervo to the autoconf macro +# repository. We are also grateful for the helpful feedback of +# numerous users. +# +# LAST MODIFICATION +# +# 2007-07-29 +# +# COPYLEFT +# +# Copyright (c) 2007 Steven G. Johnson +# +# 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 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. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# . +# +# As a special exception, the respective Autoconf Macro's copyright +# owner gives unlimited permission to copy, distribute and modify the +# configure scripts that are the output of Autoconf when processing +# the Macro. You need not follow the terms of the GNU General Public +# License when using or distributing such scripts, even though +# portions of the text of the Macro appear in them. The GNU General +# Public License (GPL) does govern all other use of the material that +# constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the +# Autoconf Macro released by the Autoconf Macro Archive. When you +# make and distribute a modified version of the Autoconf Macro, you +# may extend this special exception to the GPL to apply to your +# modified version as well. + +AC_DEFUN([ACX_PTHREAD], [ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_LANG_SAVE +AC_LANG_C +acx_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) + AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) + AC_MSG_RESULT($acx_pthread_ok) + if test x"$acx_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case "${host_cpu}-${host_os}" in + *solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" + ;; +esac + +if test x"$acx_pthread_ok" = xno; then +for flag in $acx_pthread_flags; do + + case $flag in + none) + AC_MSG_CHECKING([whether pthreads work without any flags]) + ;; + + -*) + AC_MSG_CHECKING([whether pthreads work with $flag]) + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) + if test x"$acx_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + AC_MSG_CHECKING([for the pthreads library -l$flag]) + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + AC_TRY_LINK([#include ], + [pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], + [acx_pthread_ok=yes]) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + AC_MSG_RESULT($acx_pthread_ok) + if test "x$acx_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$acx_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + AC_MSG_CHECKING([for joinable pthread attribute]) + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + AC_TRY_LINK([#include ], [int attr=$attr; return attr;], + [attr_name=$attr; break]) + done + AC_MSG_RESULT($attr_name) + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, + [Define to necessary symbol if this constant + uses a non-standard name on your system.]) + fi + + AC_MSG_CHECKING([if more special flags are required for pthreads]) + flag=no + case "${host_cpu}-${host_os}" in + *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; + *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; + esac + AC_MSG_RESULT(${flag}) + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + # More AIX lossage: must compile with xlc_r or cc_r + if test x"$GCC" != xyes; then + AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) + else + PTHREAD_CC=$CC + fi +else + PTHREAD_CC="$CC" +fi + +AC_SUBST(PTHREAD_LIBS) +AC_SUBST(PTHREAD_CFLAGS) +AC_SUBST(PTHREAD_CC) + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$acx_pthread_ok" = xyes; then + ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) + : +else + acx_pthread_ok=no + $2 +fi +AC_LANG_RESTORE +])dnl ACX_PTHREAD diff --git a/Build/source/extra/xz-4.999.9beta/m4/getopt.m4 b/Build/source/extra/xz-4.999.9beta/m4/getopt.m4 new file mode 100644 index 00000000000..cfbe40f254e --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/getopt.m4 @@ -0,0 +1,71 @@ +# getopt.m4 serial 14 (modified version) +dnl Copyright (C) 2002-2006, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# The getopt module assume you want GNU getopt, with getopt_long etc, +# rather than vanilla POSIX getopt. This means your code should +# always include for the getopt prototypes. + +AC_DEFUN([gl_GETOPT_SUBSTITUTE], +[ + AC_LIBOBJ([getopt]) + AC_LIBOBJ([getopt1]) + gl_GETOPT_SUBSTITUTE_HEADER +]) + +AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], +[ + GETOPT_H=getopt.h + AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], + [Define to rpl_ if the getopt replacement functions and variables + should be used.]) + AC_SUBST([GETOPT_H]) +]) + +AC_DEFUN([gl_GETOPT_CHECK_HEADERS], +[ + if test -z "$GETOPT_H"; then + AC_CHECK_HEADERS([getopt.h], [], [GETOPT_H=getopt.h]) + fi + + if test -z "$GETOPT_H"; then + AC_CHECK_FUNCS([getopt_long], [], [GETOPT_H=getopt.h]) + fi + + dnl BSD getopt_long uses a way to reset option processing, that is different + dnl from GNU and Solaris (which copied the GNU behavior). We support both + dnl GNU and BSD style resetting of getopt_long(), so there's no need to use + dnl GNU getopt_long() on BSD due to different resetting style. + dnl + dnl With getopt_long(), some BSD versions have a bug in handling optional + dnl arguments. This bug appears only if the environment variable + dnl POSIXLY_CORRECT has been set, so it shouldn't be too bad in most + dnl cases; probably most don't have that variable set. But if we actually + dnl hit this bug, it is a real problem due to our heavy use of optional + dnl arguments. + dnl + dnl According to CVS logs, the bug was introduced in OpenBSD in 2003-09-22 + dnl and copied to FreeBSD in 2004-02-24. It was fixed in both in 2006-09-22, + dnl so the affected versions shouldn't be popular anymore anyway. NetBSD + dnl never had this bug. TODO: What about Darwin and others? + if test -z "$GETOPT_H"; then + AC_CHECK_DECL([optreset], + [AC_DEFINE([HAVE_OPTRESET], 1, + [Define to 1 if getopt.h declares extern int optreset.])], + [], [#include ]) + fi + + dnl Solaris 10 getopt doesn't handle `+' as a leading character in an + dnl option string (as of 2005-05-05). We don't use that feature, so this + dnl is not a problem for us. Thus, the respective test was removed here. +]) + +AC_DEFUN([gl_GETOPT_IFELSE], +[ + AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) + AS_IF([test -n "$GETOPT_H"], [$1], [$2]) +]) + +AC_DEFUN([gl_GETOPT], [gl_GETOPT_IFELSE([gl_GETOPT_SUBSTITUTE])]) diff --git a/Build/source/extra/xz-4.999.9beta/m4/gettext.m4 b/Build/source/extra/xz-4.999.9beta/m4/gettext.m4 new file mode 100644 index 00000000000..91c345e992f --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/gettext.m4 @@ -0,0 +1,419 @@ +# gettext.m4 serial 59 (gettext-0.16.1) +dnl Copyright (C) 1995-2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2006. + +dnl Macro to add for using GNU gettext. + +dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). +dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The +dnl default (if it is not specified or empty) is 'no-libtool'. +dnl INTLSYMBOL should be 'external' for packages with no intl directory, +dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. +dnl If INTLSYMBOL is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. If NEEDSYMBOL is specified and is +dnl 'need-formatstring-macros', then GNU gettext implementations that don't +dnl support the ISO C 99 formatstring macros will be ignored. +dnl INTLDIR is used to find the intl libraries. If empty, +dnl the value `$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([AM_GNU_GETTEXT], +[ + dnl Argument checking. + ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , + [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT +])])])])]) + ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , + [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT +])])])]) + define([gt_included_intl], + ifelse([$1], [external], + ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), + [yes])) + define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) + gt_NEEDS_INIT + AM_GNU_GETTEXT_NEED([$2]) + + AC_REQUIRE([AM_PO_SUBDIRS])dnl + ifelse(gt_included_intl, yes, [ + AC_REQUIRE([AM_INTL_SUBDIR])dnl + ]) + + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Sometimes libintl requires libiconv, so first search for libiconv. + dnl Ideally we would do this search only after the + dnl if test "$USE_NLS" = "yes"; then + dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT + dnl the configure script would need to contain the same shell code + dnl again, outside any 'if'. There are two solutions: + dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. + dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. + dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not + dnl documented, we avoid it. + ifelse(gt_included_intl, yes, , [ + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + ]) + + dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. + gt_INTL_MACOSX + + dnl Set USE_NLS. + AC_REQUIRE([AM_NLS]) + + ifelse(gt_included_intl, yes, [ + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + ]) + LIBINTL= + LTLIBINTL= + POSUB= + + dnl Add a version number to the cache macros. + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + ifelse(gt_included_intl, yes, [ + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH(included-gettext, + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + ]) + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. + + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi + + AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], + [AC_TRY_LINK([#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings;], + [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], + [eval "$gt_func_gnugettext_libc=yes"], + [eval "$gt_func_gnugettext_libc=no"])]) + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl Sometimes libintl requires libiconv, so first search for libiconv. + ifelse(gt_included_intl, yes, , [ + AM_ICONV_LINK + ]) + dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL + dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) + dnl because that would add "-liconv" to LIBINTL and LTLIBINTL + dnl even if libiconv doesn't exist. + AC_LIB_LINKFLAGS_BODY([intl]) + AC_CACHE_CHECK([for GNU gettext in libintl], + [$gt_func_gnugettext_libintl], + [gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + dnl Now see whether libintl exists and does not depend on libiconv. + AC_TRY_LINK([#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *);], + [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], + [eval "$gt_func_gnugettext_libintl=yes"], + [eval "$gt_func_gnugettext_libintl=no"]) + dnl Now see whether libintl exists and depends on libiconv. + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + AC_TRY_LINK([#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *);], + [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], + [LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + ]) + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS"]) + fi + + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + dnl Reset the values set by searching for libintl. + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + ifelse(gt_included_intl, yes, [ + if test "$gt_use_preinstalled_gnugettext" != "yes"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on included GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" + LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + CATOBJEXT= + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions to use GNU gettext tools. + CATOBJEXT=.gmo + fi + ]) + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Some extra flags are needed during linking. + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + AC_DEFINE(ENABLE_NLS, 1, + [Define to 1 if translation of program messages to the user's native language + is requested.]) + else + USE_NLS=no + fi + fi + + AC_MSG_CHECKING([whether to use NLS]) + AC_MSG_RESULT([$USE_NLS]) + if test "$USE_NLS" = "yes"; then + AC_MSG_CHECKING([where the gettext function comes from]) + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + AC_MSG_RESULT([$gt_source]) + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + AC_MSG_CHECKING([how to link with libintl]) + AC_MSG_RESULT([$LIBINTL]) + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) + fi + + dnl For backward compatibility. Some packages may be using this. + AC_DEFINE(HAVE_GETTEXT, 1, + [Define if the GNU gettext() function is already present or preinstalled.]) + AC_DEFINE(HAVE_DCGETTEXT, 1, + [Define if the GNU dcgettext() function is already present or preinstalled.]) + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + + ifelse(gt_included_intl, yes, [ + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl Make all variables we use known to autoconf. + AC_SUBST(BUILD_INCLUDED_LIBINTL) + AC_SUBST(USE_INCLUDED_LIBINTL) + AC_SUBST(CATOBJEXT) + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST(DATADIRNAME) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST(INSTOBJEXT) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST(GENCAT) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLOBJS= + if test "$USE_INCLUDED_LIBINTL" = yes; then + INTLOBJS="\$(GETTOBJS)" + fi + AC_SUBST(INTLOBJS) + + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix + AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) + ]) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLLIBS="$LIBINTL" + AC_SUBST(INTLLIBS) + + dnl Make all documented variables known to autoconf. + AC_SUBST(LIBINTL) + AC_SUBST(LTLIBINTL) + AC_SUBST(POSUB) +]) + + +dnl Checks for special options needed on MacOS X. +dnl Defines INTL_MACOSX_LIBS. +AC_DEFUN([gt_INTL_MACOSX], +[ + dnl Check for API introduced in MacOS X 10.2. + AC_CACHE_CHECK([for CFPreferencesCopyAppValue], + gt_cv_func_CFPreferencesCopyAppValue, + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_TRY_LINK([#include ], + [CFPreferencesCopyAppValue(NULL, NULL)], + [gt_cv_func_CFPreferencesCopyAppValue=yes], + [gt_cv_func_CFPreferencesCopyAppValue=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1, + [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) + fi + dnl Check for API introduced in MacOS X 10.3. + AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent, + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_TRY_LINK([#include ], [CFLocaleCopyCurrent();], + [gt_cv_func_CFLocaleCopyCurrent=yes], + [gt_cv_func_CFLocaleCopyCurrent=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1, + [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + AC_SUBST([INTL_MACOSX_LIBS]) +]) + + +dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. +m4_define([gt_NEEDS_INIT], +[ + m4_divert_text([DEFAULTS], [gt_needs=]) + m4_define([gt_NEEDS_INIT], []) +]) + + +dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) +AC_DEFUN([AM_GNU_GETTEXT_NEED], +[ + m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) +]) + + +dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) diff --git a/Build/source/extra/xz-4.999.9beta/m4/iconv.m4 b/Build/source/extra/xz-4.999.9beta/m4/iconv.m4 new file mode 100644 index 00000000000..654c4158943 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/iconv.m4 @@ -0,0 +1,101 @@ +# iconv.m4 serial AM4 (gettext-0.11.3) +dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], +[ + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([iconv]) +]) + +AC_DEFUN([AM_ICONV_LINK], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + + dnl Add $INCICONV to CPPFLAGS before performing the following checks, + dnl because if the user has installed libiconv and not disabled its use + dnl via --without-libiconv-prefix, he wants to use it. The first + dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. + am_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) + + AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_func_iconv=yes) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_lib_iconv=yes + am_cv_func_iconv=yes) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) + fi + if test "$am_cv_lib_iconv" = yes; then + AC_MSG_CHECKING([how to link with libiconv]) + AC_MSG_RESULT([$LIBICONV]) + else + dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV + dnl either. + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + AC_SUBST(LIBICONV) + AC_SUBST(LTLIBICONV) +]) + +AC_DEFUN([AM_ICONV], +[ + AM_ICONV_LINK + if test "$am_cv_func_iconv" = yes; then + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL(am_cv_proto_iconv, [ + AC_TRY_COMPILE([ +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif +], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([$]{ac_t:- + }[$]am_cv_proto_iconv) + AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, + [Define as const if the declaration of iconv() needs const.]) + fi +]) diff --git a/Build/source/extra/xz-4.999.9beta/m4/lc_cpucores.m4 b/Build/source/extra/xz-4.999.9beta/m4/lc_cpucores.m4 new file mode 100644 index 00000000000..2fae953ad47 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/lc_cpucores.m4 @@ -0,0 +1,57 @@ +dnl ########################################################################### +dnl +dnl lc_CPUCORES - Check how to find out the number of online CPU cores +dnl +dnl Check how to find out the number of available CPU cores in the system. +dnl sysconf(_SC_NPROCESSORS_ONLN) works on most systems, except that BSDs +dnl use sysctl(). +dnl +dnl ########################################################################### +dnl +dnl Author: Lasse Collin +dnl +dnl This file has been put into the public domain. +dnl You can do whatever you want with this file. +dnl +dnl ########################################################################### +AC_DEFUN([lc_CPUCORES], [ +AC_MSG_CHECKING([how to detect the number of available CPU cores]) +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ +#include +int +main(void) +{ + long i; + i = sysconf(_SC_NPROCESSORS_ONLN); + return 0; +} +]])], [ + AC_DEFINE([HAVE_CPUCORES_SYSCONF], [1], + [Define to 1 if the number of available CPU cores can be + detected with sysconf(_SC_NPROCESSORS_ONLN).]) + AC_MSG_RESULT([sysconf]) +], [ +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ +#include +#ifdef HAVE_SYS_PARAM_H +# include +#endif +#include +int +main(void) +{ + int name[2] = { CTL_HW, HW_NCPU }; + int cpus; + size_t cpus_size = sizeof(cpus); + sysctl(name, 2, &cpus, &cpus_size, NULL, NULL); + return 0; +} +]])], [ + AC_DEFINE([HAVE_CPUCORES_SYSCTL], [1], + [Define to 1 if the number of available CPU cores can be + detected with sysctl().]) + AC_MSG_RESULT([sysctl]) +], [ + AC_MSG_RESULT([unknown]) +])]) +])dnl lc_CPUCORES diff --git a/Build/source/extra/xz-4.999.9beta/m4/lc_physmem.m4 b/Build/source/extra/xz-4.999.9beta/m4/lc_physmem.m4 new file mode 100644 index 00000000000..78be1362db2 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/lc_physmem.m4 @@ -0,0 +1,84 @@ +dnl ########################################################################### +dnl +dnl lc_PHYSMEM - Check how to find out the amount of physical memory +dnl +dnl - sysconf() gives all the needed info on GNU+Linux and Solaris. +dnl - BSDs use sysctl(). +dnl - sysinfo() works on Linux/dietlibc and probably on other Linux systems +dnl whose libc may lack sysconf(). +dnl +dnl ########################################################################### +dnl +dnl Author: Lasse Collin +dnl +dnl This file has been put into the public domain. +dnl You can do whatever you want with this file. +dnl +dnl ########################################################################### +AC_DEFUN([lc_PHYSMEM], [ +AC_MSG_CHECKING([how to detect the amount of physical memory]) +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ +#include +int +main(void) +{ + long i; + i = sysconf(_SC_PAGESIZE); + i = sysconf(_SC_PHYS_PAGES); + return 0; +} +]])], [ + AC_DEFINE([HAVE_PHYSMEM_SYSCONF], [1], + [Define to 1 if the amount of physical memory can be detected + with sysconf(_SC_PAGESIZE) and sysconf(_SC_PHYS_PAGES).]) + AC_MSG_RESULT([sysconf]) +], [ +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ +#include +#ifdef HAVE_SYS_PARAM_H +# include +#endif +#include +int +main(void) +{ + int name[2] = { CTL_HW, HW_PHYSMEM }; + unsigned long mem; + size_t mem_ptr_size = sizeof(mem); + sysctl(name, 2, &mem, &mem_ptr_size, NULL, NULL); + return 0; +} +]])], [ + AC_DEFINE([HAVE_PHYSMEM_SYSCTL], [1], + [Define to 1 if the amount of physical memory can be detected + with sysctl().]) + AC_MSG_RESULT([sysctl]) +], [ +dnl sysinfo() is Linux-specific. Some non-Linux systems have +dnl incompatible sysinfo() so we must check $host_os. +case $host_os in + linux*) + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ +#include +int +main(void) +{ + struct sysinfo si; + sysinfo(&si); + return 0; +} + ]])], [ + AC_DEFINE([HAVE_PHYSMEM_SYSINFO], [1], + [Define to 1 if the amount of physical memory + can be detected with Linux sysinfo().]) + AC_MSG_RESULT([sysinfo]) + ], [ + AC_MSG_RESULT([unknown]) + ]) + ;; + *) + AC_MSG_RESULT([unknown]) + ;; +esac +])]) +])dnl lc_PHYSMEM diff --git a/Build/source/extra/xz-4.999.9beta/m4/lib-ld.m4 b/Build/source/extra/xz-4.999.9beta/m4/lib-ld.m4 new file mode 100644 index 00000000000..96c4e2c3396 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/lib-ld.m4 @@ -0,0 +1,110 @@ +# lib-ld.m4 serial 3 (gettext-0.13) +dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Subroutines of libtool.m4, +dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision +dnl with libtool.m4. + +dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]* | [A-Za-z]:[\\/]*)] + [re_direlt='/[^/][^/]*/\.\./'] + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(acl_cv_path_LD, +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$acl_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_LIB_PROG_LD_GNU +]) diff --git a/Build/source/extra/xz-4.999.9beta/m4/lib-link.m4 b/Build/source/extra/xz-4.999.9beta/m4/lib-link.m4 new file mode 100644 index 00000000000..f95b7ba88d5 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/lib-link.m4 @@ -0,0 +1,644 @@ +# lib-link.m4 serial 9 (gettext-0.16) +dnl Copyright (C) 2001-2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_PREREQ(2.50) + +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +AC_DEFUN([AC_LIB_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" + ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes + undefine([Name]) + undefine([NAME]) +]) + +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. If found, it +dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and +dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, + dnl because if the user has installed lib[]Name and not disabled its use + dnl via --without-lib[]Name-prefix, he wants to use it. + ac_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ + ac_save_LIBS="$LIBS" + LIBS="$LIBS $LIB[]NAME" + AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) + LIBS="$ac_save_LIBS" + ]) + if test "$ac_cv_lib[]Name" = yes; then + HAVE_LIB[]NAME=yes + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) + AC_MSG_CHECKING([how to link with lib[]$1]) + AC_MSG_RESULT([$LIB[]NAME]) + else + HAVE_LIB[]NAME=no + dnl If $LIB[]NAME didn't lead to a usable library, we don't need + dnl $INC[]NAME either. + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + undefine([Name]) + undefine([NAME]) +]) + +dnl Determine the platform dependent parameters needed to use rpath: +dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, +dnl hardcode_direct, hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ + dnl Tell automake >= 1.10 to complain if config.rpath is missing. + m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE(rpath, + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib$1-prefix], +[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib + --without-lib$1-prefix don't search for lib$1 in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" \ + && { test -f "$additional_libdir/lib$name.$shlibext" \ + || { test "$shlibext" = dll \ + && test -f "$additional_libdir/lib$name.dll.a"; }; }; then + found_dir="$additional_libdir" + if test -f "$additional_libdir/lib$name.$shlibext"; then + found_so="$additional_libdir/lib$name.$shlibext" + else + found_so="$additional_libdir/lib$name.dll.a" + fi + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" \ + && { test -f "$dir/lib$name.$shlibext" \ + || { test "$shlibext" = dll \ + && test -f "$dir/lib$name.dll.a"; }; }; then + found_dir="$dir" + if test -f "$dir/lib$name.$shlibext"; then + found_so="$dir/lib$name.$shlibext" + else + found_so="$dir/lib$name.dll.a" + fi + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +dnl For those cases where a variable contains several -L and -l options +dnl referring to unknown libraries and directories, this macro determines the +dnl necessary additional linker options for the runtime path. +dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) +dnl sets LDADDVAR to linker options needed together with LIBSVALUE. +dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, +dnl otherwise linking without libtool is assumed. +AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], +[ + AC_REQUIRE([AC_LIB_RPATH]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + $1= + if test "$enable_rpath" != no; then + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode directories into the resulting + dnl binary. + rpathdirs= + next= + for opt in $2; do + if test -n "$next"; then + dir="$next" + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem"; then + rpathdirs="$rpathdirs $dir" + fi + next= + else + case $opt in + -L) next=yes ;; + -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem"; then + rpathdirs="$rpathdirs $dir" + fi + next= ;; + *) next= ;; + esac + fi + done + if test "X$rpathdirs" != "X"; then + if test -n ""$3""; then + dnl libtool is used for linking. Use -R options. + for dir in $rpathdirs; do + $1="${$1}${$1:+ }-R$dir" + done + else + dnl The linker is used for linking directly. + if test -n "$hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user + dnl must pass all path elements in one option. + alldirs= + for dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="$flag" + else + dnl The -rpath options are cumulative. + for dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="${$1}${$1:+ }$flag" + done + fi + fi + fi + fi + fi + AC_SUBST([$1]) +]) diff --git a/Build/source/extra/xz-4.999.9beta/m4/lib-prefix.m4 b/Build/source/extra/xz-4.999.9beta/m4/lib-prefix.m4 new file mode 100644 index 00000000000..a8684e17e3a --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/lib-prefix.m4 @@ -0,0 +1,185 @@ +# lib-prefix.m4 serial 5 (gettext-0.15) +dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing +dnl the basename of the libdir, either "lib" or "lib64". +AC_DEFUN([AC_LIB_PREPARE_MULTILIB], +[ + dnl There is no formal standard regarding lib and lib64. The current + dnl practice is that on a system supporting 32-bit and 64-bit instruction + dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit + dnl libraries go under $prefix/lib. We determine the compiler's default + dnl mode by looking at the compiler's library search path. If at least + dnl of its elements ends in /lib64 or points to a directory whose absolute + dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the + dnl default, namely "lib". + acl_libdirstem=lib + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi +]) diff --git a/Build/source/extra/xz-4.999.9beta/m4/libtool.m4 b/Build/source/extra/xz-4.999.9beta/m4/libtool.m4 new file mode 100644 index 00000000000..39ba996cb96 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/libtool.m4 @@ -0,0 +1,7357 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# 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. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 56 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl +_LT_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\[$]0 --fallback-echo"')dnl " + lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` + ;; +esac + +_LT_OUTPUT_LIBTOOL_INIT +]) + + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +cat >"$CONFIG_LT" <<_LTEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate a libtool stub with the current configuration. + +lt_cl_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AS_SHELL_SANITIZE +_AS_PREPARE + +exec AS_MESSAGE_FD>&1 +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +if test "$no_create" != yes; then + lt_cl_success=: + test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" + exec AS_MESSAGE_LOG_FD>/dev/null + $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false + exec AS_MESSAGE_LOG_FD>>config.log + $lt_cl_success || AS_EXIT(1) +fi +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_XSI_SHELLFNS + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX +# ----------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_SHELL_INIT + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[_LT_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +[$]* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(lt_ECHO) +]) +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], + [An echo program that does not interpret backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[AC_CHECK_TOOL(AR, ar, false) +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1]) + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + 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` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$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 + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + 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' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + 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 + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + 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 + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[[3-9]]*) + version_type=linux + 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' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + 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' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + 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 + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + 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=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + 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 + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + 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 + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method == "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac +AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE(int foo(void) {}, + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + ) + LDFLAGS="$save_LDFLAGS" + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [fix_srcfile_path], [1], + [Fix the shell variable $srcfile for the compiler]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_PROG_CXX +# ------------ +# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ +# compiler, we have our own version here. +m4_defun([_LT_PROG_CXX], +[ +pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) +AC_PROG_CXX +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_CXX + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_CXX], []) + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[AC_REQUIRE([_LT_PROG_CXX])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_PROG_F77 +# ------------ +# Since AC_PROG_F77 is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_F77], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) +AC_PROG_F77 +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_F77 + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_F77], []) + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_REQUIRE([_LT_PROG_F77])dnl +AC_LANG_PUSH(Fortran 77) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${F77-"f77"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_PROG_FC +# ----------- +# Since AC_PROG_FC is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_FC], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) +AC_PROG_FC +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_FC + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_FC], []) + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_REQUIRE([_LT_PROG_FC])dnl +AC_LANG_PUSH(Fortran) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${FC-"f95"} + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC="$lt_save_CC" +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC="$lt_save_CC" +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_XSI_SHELLFNS +# --------------------- +# Bourne and XSI compatible variants of some useful shell functions. +m4_defun([_LT_PROG_XSI_SHELLFNS], +[case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $[*] )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +dnl func_dirname_and_basename +dnl A portable version of this function is already defined in general.m4sh +dnl so there is no need for it here. + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[[^=]]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$[@]"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]+=\$[2]" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]=\$$[1]\$[2]" +} + +_LT_EOF + ;; + esac +]) diff --git a/Build/source/extra/xz-4.999.9beta/m4/ltoptions.m4 b/Build/source/extra/xz-4.999.9beta/m4/ltoptions.m4 new file mode 100644 index 00000000000..34151a3ba62 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/ltoptions.m4 @@ -0,0 +1,368 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# 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 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [0], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/Build/source/extra/xz-4.999.9beta/m4/ltsugar.m4 b/Build/source/extra/xz-4.999.9beta/m4/ltsugar.m4 new file mode 100644 index 00000000000..9000a057d31 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/ltsugar.m4 @@ -0,0 +1,123 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# 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 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/Build/source/extra/xz-4.999.9beta/m4/ltversion.m4 b/Build/source/extra/xz-4.999.9beta/m4/ltversion.m4 new file mode 100644 index 00000000000..b8e154fe6e1 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# 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. + +# Generated from ltversion.in. + +# serial 3012 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.2.6]) +m4_define([LT_PACKAGE_REVISION], [1.3012]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.2.6' +macro_revision='1.3012' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/Build/source/extra/xz-4.999.9beta/m4/lt~obsolete.m4 b/Build/source/extra/xz-4.999.9beta/m4/lt~obsolete.m4 new file mode 100644 index 00000000000..637bb2066c4 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/lt~obsolete.m4 @@ -0,0 +1,92 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# 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 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) diff --git a/Build/source/extra/xz-4.999.9beta/m4/nls.m4 b/Build/source/extra/xz-4.999.9beta/m4/nls.m4 new file mode 100644 index 00000000000..7967cc2f9ac --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/nls.m4 @@ -0,0 +1,31 @@ +# nls.m4 serial 3 (gettext-0.15) +dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ(2.50) + +AC_DEFUN([AM_NLS], +[ + AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE(nls, + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT($USE_NLS) + AC_SUBST(USE_NLS) +]) diff --git a/Build/source/extra/xz-4.999.9beta/m4/po.m4 b/Build/source/extra/xz-4.999.9beta/m4/po.m4 new file mode 100644 index 00000000000..00133ef36f8 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/po.m4 @@ -0,0 +1,428 @@ +# po.m4 serial 13 (gettext-0.15) +dnl Copyright (C) 1995-2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ(2.50) + +dnl Checks for all prerequisites of the po subdirectory. +AC_DEFUN([AM_PO_SUBDIRS], +[ + AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake + AC_REQUIRE([AM_NLS])dnl + + dnl Perform the following tests also if --disable-nls has been given, + dnl because they are needed for "make dist" to work. + + dnl Search for GNU msgfmt in the PATH. + dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. + dnl The second test excludes FreeBSD msgfmt. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + + dnl Test whether it is GNU msgfmt >= 0.15. +changequote(,)dnl + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([MSGFMT_015]) +changequote(,)dnl + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([GMSGFMT_015]) + + dnl Search for GNU xgettext 0.12 or newer in the PATH. + dnl The first test excludes Solaris xgettext and early GNU xgettext versions. + dnl The second test excludes FreeBSD xgettext. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + + dnl Test whether it is GNU xgettext >= 0.15. +changequote(,)dnl + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac +changequote([,])dnl + AC_SUBST([XGETTEXT_015]) + + dnl Search for GNU msgmerge 0.11 or newer in the PATH. + AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, + [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) + + dnl Installation directories. + dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we + dnl have to define it here, so that it can be used in po/Makefile. + test -n "$localedir" || localedir='${datadir}/locale' + AC_SUBST([localedir]) + + AC_CONFIG_COMMANDS([po-directories], [[ + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done]], + [# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + ]) +]) + +dnl Postprocesses a Makefile in a directory containing PO files. +AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], +[ + # When this code is run, in config.status, two variables have already been + # set: + # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, + # - LINGUAS is the value of the environment variable LINGUAS at configure + # time. + +changequote(,)dnl + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + # Find a way to echo strings without interpreting backslash. + if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='echo' + else + if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='printf %s\n' + else + echo_func () { + cat < "$ac_file.tmp" + if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + cat >> "$ac_file.tmp" < /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + cat >> "$ac_file.tmp" <> "$ac_file.tmp" </dev/null \ + && break;; + esac + done]) + + if test "$gl_cv_posix_shell" != no; then + POSIX_SHELL=$gl_cv_posix_shell + PREFERABLY_POSIX_SHELL=$POSIX_SHELL + else + POSIX_SHELL= + PREFERABLY_POSIX_SHELL=/bin/sh + fi + AC_SUBST([POSIX_SHELL]) + AC_SUBST([PREFERABLY_POSIX_SHELL]) +]) diff --git a/Build/source/extra/xz-4.999.9beta/m4/progtest.m4 b/Build/source/extra/xz-4.999.9beta/m4/progtest.m4 new file mode 100644 index 00000000000..a56365cd37f --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/progtest.m4 @@ -0,0 +1,92 @@ +# progtest.m4 serial 4 (gettext-0.14.2) +dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1996. + +AC_PREREQ(2.50) + +# Search path for a program which passes the given test. + +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([AM_PATH_PROG_WITH_TEST], +[ +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + [[\\/]]* | ?:[[\\/]]*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in ifelse([$5], , $PATH, [$5]); do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) diff --git a/Build/source/extra/xz-4.999.9beta/m4/visibility.m4 b/Build/source/extra/xz-4.999.9beta/m4/visibility.m4 new file mode 100644 index 00000000000..2ff6330aa42 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/m4/visibility.m4 @@ -0,0 +1,52 @@ +# visibility.m4 serial 1 (gettext-0.15) +dnl Copyright (C) 2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Tests whether the compiler supports the command-line option +dnl -fvisibility=hidden and the function and variable attributes +dnl __attribute__((__visibility__("hidden"))) and +dnl __attribute__((__visibility__("default"))). +dnl Does *not* test for __visibility__("protected") - which has tricky +dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on +dnl MacOS X. +dnl Does *not* test for __visibility__("internal") - which has processor +dnl dependent semantics. +dnl Does *not* test for #pragma GCC visibility push(hidden) - which is +dnl "really only recommended for legacy code". +dnl Set the variable CFLAG_VISIBILITY. +dnl Defines and sets the variable HAVE_VISIBILITY. + +AC_DEFUN([gl_VISIBILITY], +[ + AC_REQUIRE([AC_PROG_CC]) + CFLAG_VISIBILITY= + HAVE_VISIBILITY=0 + if test -n "$GCC"; then + AC_MSG_CHECKING([for simple visibility declarations]) + AC_CACHE_VAL(gl_cv_cc_visibility, [ + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + AC_TRY_COMPILE( + [extern __attribute__((__visibility__("hidden"))) int hiddenvar; + extern __attribute__((__visibility__("default"))) int exportedvar; + extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); + extern __attribute__((__visibility__("default"))) int exportedfunc (void);], + [], + gl_cv_cc_visibility=yes, + gl_cv_cc_visibility=no) + CFLAGS="$gl_save_CFLAGS"]) + AC_MSG_RESULT([$gl_cv_cc_visibility]) + if test $gl_cv_cc_visibility = yes; then + CFLAG_VISIBILITY="-fvisibility=hidden" + HAVE_VISIBILITY=1 + fi + fi + AC_SUBST([CFLAG_VISIBILITY]) + AC_SUBST([HAVE_VISIBILITY]) + AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], + [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) +]) diff --git a/Build/source/extra/xz-4.999.9beta/po/LINGUAS b/Build/source/extra/xz-4.999.9beta/po/LINGUAS new file mode 100644 index 00000000000..e69de29bb2d diff --git a/Build/source/extra/xz-4.999.9beta/po/Makefile.in.in b/Build/source/extra/xz-4.999.9beta/po/Makefile.in.in new file mode 100644 index 00000000000..5022b8b187f --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/po/Makefile.in.in @@ -0,0 +1,403 @@ +# Makefile for PO directory in any package using GNU gettext. +# Copyright (C) 1995-1997, 2000-2006 by Ulrich Drepper +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License but which still want to provide support for the GNU gettext +# functionality. +# Please note that the actual code of GNU gettext is covered by the GNU +# General Public License and is *not* in the public domain. +# +# Origin: gettext-0.16 + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ + +SHELL = /bin/sh +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datarootdir = @datarootdir@ +datadir = @datadir@ +localedir = @localedir@ +gettextsrcdir = $(datadir)/gettext/po + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ + +# We use $(mkdir_p). +# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as +# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, +# @install_sh@ does not start with $(SHELL), so we add it. +# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined +# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake +# versions, $(mkinstalldirs) and $(install_sh) are unused. +mkinstalldirs = $(SHELL) @install_sh@ -d +install_sh = $(SHELL) @install_sh@ +MKDIR_P = @MKDIR_P@ +mkdir_p = @mkdir_p@ + +GMSGFMT_ = @GMSGFMT@ +GMSGFMT_no = @GMSGFMT@ +GMSGFMT_yes = @GMSGFMT_015@ +GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) +MSGFMT_ = @MSGFMT@ +MSGFMT_no = @MSGFMT@ +MSGFMT_yes = @MSGFMT_015@ +MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) +XGETTEXT_ = @XGETTEXT@ +XGETTEXT_no = @XGETTEXT@ +XGETTEXT_yes = @XGETTEXT_015@ +XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) +MSGMERGE = msgmerge +MSGMERGE_UPDATE = @MSGMERGE@ --update +MSGINIT = msginit +MSGCONV = msgconv +MSGFILTER = msgfilter + +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +UPDATEPOFILES = @UPDATEPOFILES@ +DUMMYPOFILES = @DUMMYPOFILES@ +DISTFILES.common = Makefile.in.in remove-potcdate.sin \ +$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) +DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ +$(POFILES) $(GMOFILES) \ +$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) + +POTFILES = \ + +CATALOGS = @CATALOGS@ + +# Makevars gets inserted here. (Don't remove this line!) + +.SUFFIXES: +.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update + +.po.mo: + @echo "$(MSGFMT) -c -o $@ $<"; \ + $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + +.po.gmo: + @lang=`echo $* | sed -e 's,.*/,,'`; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + +.sin.sed: + sed -e '/^#/d' $< > t-$@ + mv t-$@ $@ + + +all: all-@USE_NLS@ + +all-yes: stamp-po +all-no: + +# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no +# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because +# we don't want to bother translators with empty POT files). We assume that +# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. +# In this case, stamp-po is a nop (i.e. a phony target). + +# stamp-po is a timestamp denoting the last time at which the CATALOGS have +# been loosely updated. Its purpose is that when a developer or translator +# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, +# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent +# invocations of "make" will do nothing. This timestamp would not be necessary +# if updating the $(CATALOGS) would always touch them; however, the rule for +# $(POFILES) has been designed to not touch files that don't need to be +# changed. +stamp-po: $(srcdir)/$(DOMAIN).pot + test ! -f $(srcdir)/$(DOMAIN).pot || \ + test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) + @test ! -f $(srcdir)/$(DOMAIN).pot || { \ + echo "touch stamp-po" && \ + echo timestamp > stamp-poT && \ + mv stamp-poT stamp-po; \ + } + +# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', +# otherwise packages like GCC can not be built if only parts of the source +# have been downloaded. + +# This target rebuilds $(DOMAIN).pot; it is an expensive operation. +# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. +$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ + msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ + else \ + msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ + fi; \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --msgid-bugs-address="$$msgid_bugs_address" + test ! -f $(DOMAIN).po || { \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ + sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ + if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ + else \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + else \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + } + +# This rule has no dependencies: we don't need to update $(DOMAIN).pot at +# every "make" invocation, only create it when it is missing. +# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. +$(srcdir)/$(DOMAIN).pot: + $(MAKE) $(DOMAIN).pot-update + +# This target rebuilds a PO file if $(DOMAIN).pot has changed. +# Note that a PO file is not touched if it doesn't need to be changed. +$(POFILES): $(srcdir)/$(DOMAIN).pot + @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ + if test -f "$(srcdir)/$${lang}.po"; then \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ + else \ + $(MAKE) $${lang}.po-create; \ + fi + + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + for file in $(DISTFILES.common) Makevars.template; do \ + $(INSTALL_DATA) $(srcdir)/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + for file in Makevars; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +install-data-no: all +install-data-yes: all + $(mkdir_p) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ + $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ + echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ + fi; \ + done; \ + done + +install-strip: install + +installdirs: installdirs-exec installdirs-data +installdirs-exec: +installdirs-data: installdirs-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + else \ + : ; \ + fi +installdirs-data-no: +installdirs-data-yes: + $(mkdir_p) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + fi; \ + done; \ + done + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: uninstall-exec uninstall-data +uninstall-exec: +uninstall-data: uninstall-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + for file in $(DISTFILES.common) Makevars.template; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +uninstall-data-no: +uninstall-data-yes: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + done; \ + done + +check: all + +info dvi ps pdf html tags TAGS ctags CTAGS ID: + +mostlyclean: + rm -f remove-potcdate.sed + rm -f stamp-poT + rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f stamp-po $(GMOFILES) + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: + $(MAKE) update-po + @$(MAKE) dist2 +# This is a separate target because 'update-po' must be executed before. +dist2: stamp-po $(DISTFILES) + dists="$(DISTFILES)"; \ + if test "$(PACKAGE)" = "gettext-tools"; then \ + dists="$$dists Makevars.template"; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + dists="$$dists $(DOMAIN).pot stamp-po"; \ + fi; \ + if test -f $(srcdir)/ChangeLog; then \ + dists="$$dists ChangeLog"; \ + fi; \ + for i in 0 1 2 3 4 5 6 7 8 9; do \ + if test -f $(srcdir)/ChangeLog.$$i; then \ + dists="$$dists ChangeLog.$$i"; \ + fi; \ + done; \ + if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ + for file in $$dists; do \ + if test -f $$file; then \ + cp -p $$file $(distdir) || exit 1; \ + else \ + cp -p $(srcdir)/$$file $(distdir) || exit 1; \ + fi; \ + done + +update-po: Makefile + $(MAKE) $(DOMAIN).pot-update + test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) + $(MAKE) update-gmo + +# General rule for creating PO files. + +.nop.po-create: + @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ + echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ + exit 1 + +# General rule for updating PO files. + +.nop.po-update: + @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ + if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +$(DUMMYPOFILES): + +update-gmo: Makefile $(GMOFILES) + @: + +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ + cd $(top_builddir) \ + && $(SHELL) ./config.status $(subdir)/$@.in po-directories + +force: + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Build/source/extra/xz-4.999.9beta/po/Makevars b/Build/source/extra/xz-4.999.9beta/po/Makevars new file mode 100644 index 00000000000..dc19bc96313 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/po/Makevars @@ -0,0 +1,46 @@ +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = + +# Although you may need slightly wider terminal than 80 chars, it is +# much nicer to edit the output of --help when this is set. +XGETTEXT_OPTIONS += --no-wrap +MSGMERGE += --no-wrap diff --git a/Build/source/extra/xz-4.999.9beta/po/POTFILES.in b/Build/source/extra/xz-4.999.9beta/po/POTFILES.in new file mode 100644 index 00000000000..ee430c5c3ab --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/po/POTFILES.in @@ -0,0 +1,10 @@ +# List of source files which contain translatable strings. +src/xz/args.c +src/xz/coder.c +src/xz/file_io.c +src/xz/hardware.c +src/xz/main.c +src/xz/message.c +src/xz/options.c +src/xz/suffix.c +src/xz/util.c diff --git a/Build/source/extra/xz-4.999.9beta/po/Rules-quot b/Build/source/extra/xz-4.999.9beta/po/Rules-quot new file mode 100644 index 00000000000..9c2a995e300 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/po/Rules-quot @@ -0,0 +1,47 @@ +# Special Makefile rules for English message catalogs with quotation marks. + +DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot + +.SUFFIXES: .insert-header .po-update-en + +en@quot.po-create: + $(MAKE) en@quot.po-update +en@boldquot.po-create: + $(MAKE) en@boldquot.po-update + +en@quot.po-update: en@quot.po-update-en +en@boldquot.po-update: en@boldquot.po-update-en + +.insert-header.po-update-en: + @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ + if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + ll=`echo $$lang | sed -e 's/@.*//'`; \ + LC_ALL=C; export LC_ALL; \ + cd $(srcdir); \ + if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "creation of $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +en@quot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header + +en@boldquot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header + +mostlyclean: mostlyclean-quot +mostlyclean-quot: + rm -f *.insert-header diff --git a/Build/source/extra/xz-4.999.9beta/po/boldquot.sed b/Build/source/extra/xz-4.999.9beta/po/boldquot.sed new file mode 100644 index 00000000000..4b937aa517b --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/po/boldquot.sed @@ -0,0 +1,10 @@ +s/"\([^"]*\)"/“\1â€/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“â€/""/g +s/“/“/g +s/â€/â€/g +s/‘/‘/g +s/’/’/g diff --git a/Build/source/extra/xz-4.999.9beta/po/en@boldquot.header b/Build/source/extra/xz-4.999.9beta/po/en@boldquot.header new file mode 100644 index 00000000000..fedb6a06d12 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/po/en@boldquot.header @@ -0,0 +1,25 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# +# This catalog furthermore displays the text between the quotation marks in +# bold face, assuming the VT100/XTerm escape sequences. +# diff --git a/Build/source/extra/xz-4.999.9beta/po/en@quot.header b/Build/source/extra/xz-4.999.9beta/po/en@quot.header new file mode 100644 index 00000000000..a9647fc35c3 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/po/en@quot.header @@ -0,0 +1,22 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# diff --git a/Build/source/extra/xz-4.999.9beta/po/insert-header.sin b/Build/source/extra/xz-4.999.9beta/po/insert-header.sin new file mode 100644 index 00000000000..b26de01f6c8 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/po/insert-header.sin @@ -0,0 +1,23 @@ +# Sed script that inserts the file called HEADER before the header entry. +# +# At each occurrence of a line starting with "msgid ", we execute the following +# commands. At the first occurrence, insert the file. At the following +# occurrences, do nothing. The distinction between the first and the following +# occurrences is achieved by looking at the hold space. +/^msgid /{ +x +# Test if the hold space is empty. +s/m/m/ +ta +# Yes it was empty. First occurrence. Read the file. +r HEADER +# Output the file's contents by reading the next line. But don't lose the +# current line while doing this. +g +N +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/Build/source/extra/xz-4.999.9beta/po/quot.sed b/Build/source/extra/xz-4.999.9beta/po/quot.sed new file mode 100644 index 00000000000..0122c46318d --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/po/quot.sed @@ -0,0 +1,6 @@ +s/"\([^"]*\)"/“\1â€/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“â€/""/g diff --git a/Build/source/extra/xz-4.999.9beta/po/remove-potcdate.sin b/Build/source/extra/xz-4.999.9beta/po/remove-potcdate.sin new file mode 100644 index 00000000000..2436c49e786 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/po/remove-potcdate.sin @@ -0,0 +1,19 @@ +# Sed script that remove the POT-Creation-Date line in the header entry +# from a POT file. +# +# The distinction between the first and the following occurrences of the +# pattern is achieved by looking at the hold space. +/^"POT-Creation-Date: .*"$/{ +x +# Test if the hold space is empty. +s/P/P/ +ta +# Yes it was empty. First occurrence. Remove the line. +g +d +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/Build/source/extra/xz-4.999.9beta/po/stamp-po b/Build/source/extra/xz-4.999.9beta/po/stamp-po new file mode 100644 index 00000000000..9788f70238c --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/po/stamp-po @@ -0,0 +1 @@ +timestamp diff --git a/Build/source/extra/xz-4.999.9beta/po/xz.pot b/Build/source/extra/xz-4.999.9beta/po/xz.pot new file mode 100644 index 00000000000..dc6e320178d --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/po/xz.pot @@ -0,0 +1,481 @@ +# SOME DESCRIPTIVE TITLE. +# This file is put in the public domain. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" +"POT-Creation-Date: 2009-08-27 18:37+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/xz/args.c:289 +#, c-format +msgid "%s: Unknown file format type" +msgstr "" + +#: src/xz/args.c:312 src/xz/args.c:320 +#, c-format +msgid "%s: Unsupported integrity check type" +msgstr "" + +#: src/xz/args.c:334 +msgid "Only one file can be specified with `--files'or `--files0'." +msgstr "" + +#: src/xz/args.c:392 +msgid "The environment variable XZ_OPT contains too many arguments" +msgstr "" + +#: src/xz/coder.c:95 +msgid "Maximum number of filters is four" +msgstr "" + +#: src/xz/coder.c:108 +#, c-format +msgid "Memory usage limit (% MiB) is too small for the given filter setup (% MiB)" +msgstr "" + +#: src/xz/coder.c:128 +msgid "Using a preset in raw mode is discouraged." +msgstr "" + +#: src/xz/coder.c:130 +msgid "The exact options of the presets may vary between software versions." +msgstr "" + +#: src/xz/coder.c:158 +msgid "The .lzma format supports only the LZMA1 filter" +msgstr "" + +#: src/xz/coder.c:166 +msgid "LZMA1 cannot be used with the .xz format" +msgstr "" + +#: src/xz/coder.c:186 +#, c-format +msgid "%s MiB (%s B) of memory is required per thread, limit is %s MiB (%s B)" +msgstr "" + +#: src/xz/coder.c:553 +#, c-format +msgid "Limit was %s MiB, but %s MiB would have been needed" +msgstr "" + +#: src/xz/file_io.c:86 +#, c-format +msgid "%s: File seems to be moved, not removing" +msgstr "" + +#: src/xz/file_io.c:93 +#, c-format +msgid "%s: Cannot remove: %s" +msgstr "" + +#: src/xz/file_io.c:118 +#, c-format +msgid "%s: Cannot set the file owner: %s" +msgstr "" + +#: src/xz/file_io.c:124 +#, c-format +msgid "%s: Cannot set the file group: %s" +msgstr "" + +#: src/xz/file_io.c:143 +#, c-format +msgid "%s: Cannot set the file permissions: %s" +msgstr "" + +#: src/xz/file_io.c:281 src/xz/file_io.c:360 +#, c-format +msgid "%s: Is a symbolic link, skipping" +msgstr "" + +#: src/xz/file_io.c:395 +#, c-format +msgid "%s: Is a directory, skipping" +msgstr "" + +#: src/xz/file_io.c:402 +#, c-format +msgid "%s: Not a regular file, skipping" +msgstr "" + +#: src/xz/file_io.c:419 +#, c-format +msgid "%s: File has setuid or setgid bit set, skipping" +msgstr "" + +#: src/xz/file_io.c:426 +#, c-format +msgid "%s: File has sticky bit set, skipping" +msgstr "" + +#: src/xz/file_io.c:433 +#, c-format +msgid "%s: Input file has more than one hard link, skipping" +msgstr "" + +#: src/xz/file_io.c:555 +#, c-format +msgid "%s: Closing the file failed: %s" +msgstr "" + +#: src/xz/file_io.c:663 +#, c-format +msgid "%s: Read error: %s" +msgstr "" + +#: src/xz/file_io.c:708 +#, c-format +msgid "%s: Write error: %s" +msgstr "" + +#: src/xz/main.c:57 +msgid "Writing to standard output failed" +msgstr "" + +#: src/xz/main.c:60 +msgid "Unknown error" +msgstr "" + +#: src/xz/main.c:117 +#, c-format +msgid "%s: Error reading filenames: %s" +msgstr "" + +#: src/xz/main.c:124 +#, c-format +msgid "%s: Unexpected end of input when reading filenames" +msgstr "" + +#: src/xz/main.c:148 +#, c-format +msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" +msgstr "" + +#: src/xz/main.c:272 +msgid "Cannot read data from standard input when reading filenames from standard input" +msgstr "" + +#: src/xz/message.c:840 src/xz/message.c:884 +msgid "Internal error (bug)" +msgstr "" + +#: src/xz/message.c:847 +msgid "Cannot establish signal handlers" +msgstr "" + +#: src/xz/message.c:856 +msgid "No integrity check; not verifying file integrity" +msgstr "" + +#: src/xz/message.c:859 +msgid "Unsupported type of integrity check; not verifying file integrity" +msgstr "" + +#: src/xz/message.c:866 +msgid "Memory usage limit reached" +msgstr "" + +#: src/xz/message.c:869 +msgid "File format not recognized" +msgstr "" + +#: src/xz/message.c:872 +msgid "Unsupported options" +msgstr "" + +#: src/xz/message.c:875 +msgid "Compressed data is corrupt" +msgstr "" + +#: src/xz/message.c:878 +msgid "Unexpected end of input" +msgstr "" + +#: src/xz/message.c:897 +#, c-format +msgid "%s: Filter chain:" +msgstr "" + +#: src/xz/message.c:1008 +#, c-format +msgid "Try `%s --help' for more information." +msgstr "" + +#: src/xz/message.c:1027 +#, c-format +msgid "" +"Usage: %s [OPTION]... [FILE]...\n" +"Compress or decompress FILEs in the .xz format.\n" +"\n" +msgstr "" + +#: src/xz/message.c:1031 +msgid "Mandatory arguments to long options are mandatory for short options too.\n" +msgstr "" + +#: src/xz/message.c:1035 +msgid " Operation mode:\n" +msgstr "" + +#: src/xz/message.c:1038 +msgid "" +" -z, --compress force compression\n" +" -d, --decompress force decompression\n" +" -t, --test test compressed file integrity\n" +" -l, --list list information about files" +msgstr "" + +#: src/xz/message.c:1044 +msgid "" +"\n" +" Operation modifiers:\n" +msgstr "" + +#: src/xz/message.c:1047 +msgid "" +" -k, --keep keep (don't delete) input files\n" +" -f, --force force overwrite of output file and (de)compress links\n" +" -c, --stdout write to standard output and don't delete input files" +msgstr "" + +#: src/xz/message.c:1053 +msgid "" +" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" +" --files=[FILE] read filenames to process from FILE; if FILE is\n" +" omitted, filenames are read from the standard input;\n" +" filenames must be terminated with the newline character\n" +" --files0=[FILE] like --files but use the null character as terminator" +msgstr "" + +#: src/xz/message.c:1060 +msgid "" +"\n" +" Basic file format and compression options:\n" +msgstr "" + +#: src/xz/message.c:1062 +msgid "" +" -F, --format=FMT file format to encode or decode; possible values are\n" +" `auto' (default), `xz', `lzma', and `raw'\n" +" -C, --check=CHECK integrity check type: `crc32', `crc64' (default),\n" +" or `sha256'" +msgstr "" + +#: src/xz/message.c:1069 +msgid "" +" -0 .. -9 compression preset; 0-2 fast compression, 3-5 good\n" +" compression, 6-9 excellent compression; default is 6" +msgstr "" + +#: src/xz/message.c:1073 +msgid "" +" -e, --extreme use more CPU time when encoding to increase compression\n" +" ratio without increasing memory usage of the decoder" +msgstr "" + +#: src/xz/message.c:1078 +msgid "" +" -M, --memory=NUM use roughly NUM bytes of memory at maximum; 0 indicates\n" +" the default setting, which depends on the operation mode\n" +" and the amount of physical memory (RAM)" +msgstr "" + +#: src/xz/message.c:1084 +msgid "" +"\n" +" Custom filter chain for compression (alternative for using presets):" +msgstr "" + +#: src/xz/message.c:1089 +msgid "" +"\n" +" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" +" --lzma2[=OPTS] more of the following options (valid values; default):\n" +" preset=NUM reset options to preset number NUM (0-9)\n" +" dict=NUM dictionary size (4KiB - 1536MiB; 8MiB)\n" +" lc=NUM number of literal context bits (0-4; 3)\n" +" lp=NUM number of literal position bits (0-4; 0)\n" +" pb=NUM number of position bits (0-4; 2)\n" +" mode=MODE compression mode (fast, normal; normal)\n" +" nice=NUM nice length of a match (2-273; 64)\n" +" mf=NAME match finder (hc3, hc4, bt2, bt3, bt4; bt4)\n" +" depth=NUM maximum search depth; 0=automatic (default)" +msgstr "" + +#: src/xz/message.c:1104 +msgid "" +"\n" +" --x86[=OPTS] x86 BCJ filter\n" +" --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" +" --ia64[=OPTS] IA64 (Itanium) BCJ filter\n" +" --arm[=OPTS] ARM BCJ filter (little endian only)\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" +" --sparc[=OPTS] SPARC BCJ filter\n" +" Valid OPTS for all BCJ filters:\n" +" start=NUM start offset for conversions (default=0)" +msgstr "" + +#: src/xz/message.c:1116 +msgid "" +"\n" +" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" +" dist=NUM distance between bytes being subtracted\n" +" from each other (1-256; 1)" +msgstr "" + +#: src/xz/message.c:1124 +msgid "" +"\n" +" --subblock[=OPTS] Subblock filter; valid OPTS (valid values; default):\n" +" size=NUM number of bytes of data per subblock\n" +" (1 - 256Mi; 4Ki)\n" +" rle=NUM run-length encoder chunk size (0-256; 0)" +msgstr "" + +#: src/xz/message.c:1133 +msgid "" +"\n" +" Other options:\n" +msgstr "" + +#: src/xz/message.c:1136 +msgid "" +" -q, --quiet suppress warnings; specify twice to suppress errors too\n" +" -v, --verbose be verbose; specify twice for even more verbose" +msgstr "" + +#: src/xz/message.c:1141 +msgid " -Q, --no-warn make warnings not affect the exit status" +msgstr "" + +#: src/xz/message.c:1145 +msgid "" +"\n" +" -h, --help display the short help (lists only the basic options)\n" +" -H, --long-help display this long help" +msgstr "" + +#: src/xz/message.c:1150 +msgid "" +" -h, --help display this short help\n" +" -H, --long-help display the long help (lists also the advanced options)" +msgstr "" + +#: src/xz/message.c:1154 +msgid " -V, --version display the version number" +msgstr "" + +#: src/xz/message.c:1156 +msgid "" +"\n" +"With no FILE, or when FILE is -, read standard input.\n" +msgstr "" + +#: src/xz/message.c:1160 +#, c-format +msgid "" +"On this system and configuration, this program will use at maximum of roughly\n" +"%s MiB RAM and " +msgstr "" + +#: src/xz/message.c:1162 +msgid "" +"one thread.\n" +"\n" +msgstr "" + +#: src/xz/message.c:1167 +#, c-format +msgid "Report bugs to <%s> (in English or Finnish).\n" +msgstr "" + +#: src/xz/message.c:1169 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: src/xz/options.c:88 +#, c-format +msgid "%s: Options must be `name=value' pairs separated with commas" +msgstr "" + +#: src/xz/options.c:108 +#, c-format +msgid "%s: Invalid option value" +msgstr "" + +#: src/xz/options.c:131 +#, c-format +msgid "%s: Invalid option name" +msgstr "" + +#: src/xz/options.c:310 +#, c-format +msgid "Unsupported LZMA1/LZMA2 preset: %s" +msgstr "" + +#: src/xz/options.c:429 +msgid "The sum of lc and lp must be at maximum of 4" +msgstr "" + +#: src/xz/options.c:434 +#, c-format +msgid "The selected match finder requires at least nice=%" +msgstr "" + +#: src/xz/suffix.c:79 src/xz/suffix.c:164 +#, c-format +msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" +msgstr "" + +#: src/xz/suffix.c:99 +#, c-format +msgid "%s: Filename has an unknown suffix, skipping" +msgstr "" + +#: src/xz/suffix.c:154 +#, c-format +msgid "%s: File already has `%s' suffix, skipping" +msgstr "" + +#: src/xz/suffix.c:205 +#, c-format +msgid "%s: Invalid filename suffix" +msgstr "" + +#: src/xz/util.c:62 +#, c-format +msgid "%s: Value is not a non-negative decimal integer" +msgstr "" + +#: src/xz/util.c:104 +#, c-format +msgid "%s: Invalid multiplier suffix. Valid suffixes:" +msgstr "" + +#: src/xz/util.c:124 +#, c-format +msgid "Value of the option `%s' must be in the range [%, %]" +msgstr "" + +#: src/xz/util.c:198 +msgid "Empty filename, skipping" +msgstr "" + +#: src/xz/util.c:212 +msgid "Compressed data not read from a terminal unless `--force' is used." +msgstr "" + +#: src/xz/util.c:225 +msgid "Compressed data not written to a terminal unless `--force' is used." +msgstr "" diff --git a/Build/source/extra/xz-4.999.9beta/src/Makefile.am b/Build/source/extra/xz-4.999.9beta/src/Makefile.am new file mode 100644 index 00000000000..f03f5a3da30 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/Makefile.am @@ -0,0 +1,9 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +SUBDIRS = liblzma xz xzdec lzmainfo scripts +EXTRA_DIST = common diff --git a/Build/source/extra/xz-4.999.9beta/src/Makefile.in b/Build/source/extra/xz-4.999.9beta/src/Makefile.in new file mode 100644 index 00000000000..6d7c827ed7b --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/Makefile.in @@ -0,0 +1,598 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ + $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ +DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETOPT_H = @GETOPT_H@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSIX_SHELL = @POSIX_SHELL@ +POSUB = @POSUB@ +PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ +STATIC_LDFLAGS = @STATIC_LDFLAGS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +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@ +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@ +lt_ECHO = @lt_ECHO@ +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@ +xz = @xz@ +SUBDIRS = liblzma xz xzdec lzmainfo scripts +EXTRA_DIST = common +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + 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; }; }'`; \ + 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: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + 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; }; }'`; \ + 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 + +distdir: $(DISTFILES) + @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 + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# 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/Build/source/extra/xz-4.999.9beta/src/common/bswap.h b/Build/source/extra/xz-4.999.9beta/src/common/bswap.h new file mode 100644 index 00000000000..c8cf125aeb8 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/common/bswap.h @@ -0,0 +1,52 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file bswap.h +/// \brief Byte swapping +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_BSWAP_H +#define LZMA_BSWAP_H + +// NOTE: We assume that config.h is already #included. + +// At least glibc has byteswap.h which contains inline assembly code for +// byteswapping. Some systems have byteswap.h but lack one or more of the +// bswap_xx macros/functions, which is why we check them separately even +// if byteswap.h is available. + +#ifdef HAVE_BYTESWAP_H +# include +#endif + +#ifndef HAVE_BSWAP_16 +# define bswap_16(num) \ + (((num) << 8) | ((num) >> 8)) +#endif + +#ifndef HAVE_BSWAP_32 +# define bswap_32(num) \ + ( (((num) << 24) ) \ + | (((num) << 8) & UINT32_C(0x00FF0000)) \ + | (((num) >> 8) & UINT32_C(0x0000FF00)) \ + | (((num) >> 24) ) ) +#endif + +#ifndef HAVE_BSWAP_64 +# define bswap_64(num) \ + ( (((num) << 56) ) \ + | (((num) << 40) & UINT64_C(0x00FF000000000000)) \ + | (((num) << 24) & UINT64_C(0x0000FF0000000000)) \ + | (((num) << 8) & UINT64_C(0x000000FF00000000)) \ + | (((num) >> 8) & UINT64_C(0x00000000FF000000)) \ + | (((num) >> 24) & UINT64_C(0x0000000000FF0000)) \ + | (((num) >> 40) & UINT64_C(0x000000000000FF00)) \ + | (((num) >> 56) ) ) +#endif + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/common/common_w32res.rc b/Build/source/extra/xz-4.999.9beta/src/common/common_w32res.rc new file mode 100644 index 00000000000..ad9e165394a --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/common/common_w32res.rc @@ -0,0 +1,53 @@ +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + */ + +#include +#include "config.h" +#define LZMA_H_INTERNAL +#define LZMA_H_INTERNAL_RC +#include "lzma/version.h" + +#ifndef MY_BUILD +# define MY_BUILD 0 +#endif +#define MY_VERSION LZMA_VERSION_MAJOR,LZMA_VERSION_MINOR,LZMA_VERSION_PATCH,MY_BUILD + +#define MY_FILENAME MY_NAME MY_SUFFIX +#define MY_COMPANY "Lasse Collin and Igor Pavlov" +#define MY_COPYRIGHT "Public Domain by " MY_COMPANY +#define MY_COMMENTS "http://tukaani.org/xz/" + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +VS_VERSION_INFO VERSIONINFO + FILEVERSION MY_VERSION + PRODUCTVERSION MY_VERSION + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS 0 + FILEOS VOS_NT_WINDOWS32 + FILETYPE MY_TYPE + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", MY_COMMENTS + VALUE "CompanyName", MY_COMPANY + VALUE "FileDescription", MY_DESC + VALUE "FileVersion", LZMA_VERSION_STRING + VALUE "InternalName", MY_NAME + VALUE "LegalCopyright", MY_COPYRIGHT + VALUE "OriginalFilename", MY_FILENAME + VALUE "ProductName", PACKAGE_NAME + VALUE "ProductVersion", LZMA_VERSION_STRING + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/Build/source/extra/xz-4.999.9beta/src/common/cpucores.h b/Build/source/extra/xz-4.999.9beta/src/common/cpucores.h new file mode 100644 index 00000000000..704d8a26e54 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/common/cpucores.h @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file cpucores.h +/// \brief Get the number of online CPU cores +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef CPUCORES_H +#define CPUCORES_H + +#if defined(HAVE_CPUCORES_SYSCONF) +# include + +#elif defined(HAVE_CPUCORES_SYSCTL) +# ifdef HAVE_SYS_PARAM_H +# include +# endif +# ifdef HAVE_SYS_SYSCTL_H +# include +# endif +#endif + + +static inline uint32_t +cpucores(void) +{ + uint32_t ret = 0; + +#if defined(HAVE_CPUCORES_SYSCONF) + const long cpus = sysconf(_SC_NPROCESSORS_ONLN); + if (cpus > 0) + ret = (uint32_t)(cpus); + +#elif defined(HAVE_CPUCORES_SYSCTL) + int name[2] = { CTL_HW, HW_NCPU }; + int cpus; + size_t cpus_size = sizeof(cpus); + if (!sysctl(name, &cpus, &cpus_size, NULL, NULL) + && cpus_size == sizeof(cpus) && cpus > 0) + ret = (uint32_t)(cpus); +#endif + + return ret; +} + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/common/integer.h b/Build/source/extra/xz-4.999.9beta/src/common/integer.h new file mode 100644 index 00000000000..518c2a4e91d --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/common/integer.h @@ -0,0 +1,170 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file integer.h +/// \brief Reading and writing integers from and to buffers +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_INTEGER_H +#define LZMA_INTEGER_H + +// On big endian, we need byte swapping. These macros may be used outside +// this file, so don't put these inside HAVE_FAST_UNALIGNED_ACCESS. +#ifdef WORDS_BIGENDIAN +# include "bswap.h" +# define integer_le_16(n) bswap_16(n) +# define integer_le_32(n) bswap_32(n) +# define integer_le_64(n) bswap_64(n) +#else +# define integer_le_16(n) (n) +# define integer_le_32(n) (n) +# define integer_le_64(n) (n) +#endif + + +// I'm aware of AC_CHECK_ALIGNED_ACCESS_REQUIRED from Autoconf archive, but +// it's not useful here. We don't care if unaligned access is supported, +// we care if it is fast. Some systems can emulate unaligned access in +// software, which is horribly slow; we want to use byte-by-byte access on +// such systems but the Autoconf test would detect such a system as +// supporting unaligned access. +// +// NOTE: HAVE_FAST_UNALIGNED_ACCESS indicates only support for 16-bit and +// 32-bit integer loads and stores. 64-bit integers may or may not work. +// That's why 64-bit functions are commented out. +// +// TODO: Big endian PowerPC supports byte swapping load and store instructions +// that also allow unaligned access. Inline assembler could be OK for that. +// +// Performance of these functions isn't that important until LZMA3, but it +// doesn't hurt to have these ready already. +#ifdef HAVE_FAST_UNALIGNED_ACCESS + +static inline uint16_t +integer_read_16(const uint8_t buf[static 2]) +{ + uint16_t ret = *(const uint16_t *)(buf); + return integer_le_16(ret); +} + + +static inline uint32_t +integer_read_32(const uint8_t buf[static 4]) +{ + uint32_t ret = *(const uint32_t *)(buf); + return integer_le_32(ret); +} + + +/* +static inline uint64_t +integer_read_64(const uint8_t buf[static 8]) +{ + uint64_t ret = *(const uint64_t *)(buf); + return integer_le_64(ret); +} +*/ + + +static inline void +integer_write_16(uint8_t buf[static 2], uint16_t num) +{ + *(uint16_t *)(buf) = integer_le_16(num); +} + + +static inline void +integer_write_32(uint8_t buf[static 4], uint32_t num) +{ + *(uint32_t *)(buf) = integer_le_32(num); +} + + +/* +static inline void +integer_write_64(uint8_t buf[static 8], uint64_t num) +{ + *(uint64_t *)(buf) = integer_le_64(num); +} +*/ + + +#else + +static inline uint16_t +integer_read_16(const uint8_t buf[static 2]) +{ + uint16_t ret = buf[0] | (buf[1] << 8); + return ret; +} + + +static inline uint32_t +integer_read_32(const uint8_t buf[static 4]) +{ + uint32_t ret = buf[0]; + ret |= (uint32_t)(buf[1]) << 8; + ret |= (uint32_t)(buf[2]) << 16; + ret |= (uint32_t)(buf[3]) << 24; + return ret; +} + + +/* +static inline uint64_t +integer_read_64(const uint8_t buf[static 8]) +{ + uint64_t ret = buf[0]; + ret |= (uint64_t)(buf[1]) << 8; + ret |= (uint64_t)(buf[2]) << 16; + ret |= (uint64_t)(buf[3]) << 24; + ret |= (uint64_t)(buf[4]) << 32; + ret |= (uint64_t)(buf[5]) << 40; + ret |= (uint64_t)(buf[6]) << 48; + ret |= (uint64_t)(buf[7]) << 56; + return ret; +} +*/ + + +static inline void +integer_write_16(uint8_t buf[static 2], uint16_t num) +{ + buf[0] = (uint8_t)(num); + buf[1] = (uint8_t)(num >> 8); +} + + +static inline void +integer_write_32(uint8_t buf[static 4], uint32_t num) +{ + buf[0] = (uint8_t)(num); + buf[1] = (uint8_t)(num >> 8); + buf[2] = (uint8_t)(num >> 16); + buf[3] = (uint8_t)(num >> 24); +} + + +/* +static inline void +integer_write_64(uint8_t buf[static 8], uint64_t num) +{ + buf[0] = (uint8_t)(num); + buf[1] = (uint8_t)(num >> 8); + buf[2] = (uint8_t)(num >> 16); + buf[3] = (uint8_t)(num >> 24); + buf[4] = (uint8_t)(num >> 32); + buf[5] = (uint8_t)(num >> 40); + buf[6] = (uint8_t)(num >> 48); + buf[7] = (uint8_t)(num >> 56); +} +*/ + +#endif + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/common/mythread.h b/Build/source/extra/xz-4.999.9beta/src/common/mythread.h new file mode 100644 index 00000000000..476c2fc9e10 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/common/mythread.h @@ -0,0 +1,42 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file mythread.h +/// \brief Wrappers for threads +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "sysdefs.h" + + +#ifdef HAVE_PTHREAD +# include + +# define mythread_once(func) \ + do { \ + static pthread_once_t once_ = PTHREAD_ONCE_INIT; \ + pthread_once(&once_, &func); \ + } while (0) + +# define mythread_sigmask(how, set, oset) \ + pthread_sigmask(how, set, oset) + +#else + +# define mythread_once(func) \ + do { \ + static bool once_ = false; \ + if (!once_) { \ + func(); \ + once_ = true; \ + } \ + } while (0) + +# define mythread_sigmask(how, set, oset) \ + sigprocmask(how, set, oset) + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/common/open_stdxxx.h b/Build/source/extra/xz-4.999.9beta/src/common/open_stdxxx.h new file mode 100644 index 00000000000..22300851a2a --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/common/open_stdxxx.h @@ -0,0 +1,49 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file open_stdxxx.h +/// \brief Make sure that file descriptors 0, 1, and 2 are open +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef OPEN_STDXXX_H +#define OPEN_STDXXX_H + +#include +#include +#include + + +static void +open_stdxxx(int status) +{ + for (int i = 0; i <= 2; ++i) { + // We use fcntl() to check if the file descriptor is open. + if (fcntl(i, F_GETFD) == -1 && errno == EBADF) { + // With stdin, we could use /dev/full so that + // writing to stdin would fail. However, /dev/full + // is Linux specific, and if the program tries to + // write to stdin, there's already a problem anyway. + const int fd = open("/dev/null", O_NOCTTY + | (i == 0 ? O_WRONLY : O_RDONLY)); + + if (fd != i) { + // Something went wrong. Exit with the + // exit status we were given. Don't try + // to print an error message, since stderr + // may very well be non-existent. This + // error should be extremely rare. + (void)close(fd); + exit(status); + } + } + } + + return; +} + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/common/physmem.h b/Build/source/extra/xz-4.999.9beta/src/common/physmem.h new file mode 100644 index 00000000000..63482c6c868 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/common/physmem.h @@ -0,0 +1,134 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file physmem.h +/// \brief Get the amount of physical memory +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef PHYSMEM_H +#define PHYSMEM_H + +// Test for Windows first, because we want to use Windows-specific code +// on Cygwin, which also has memory information available via sysconf(), but +// on Cygwin 1.5 and older it gives wrong results (from our point of view). +#if defined(_WIN32) || defined(__CYGWIN__) +# ifndef _WIN32_WINNT +# define _WIN32_WINNT 0x0500 +# endif +# include + +#elif defined(HAVE_PHYSMEM_SYSCONF) +# include + +#elif defined(HAVE_PHYSMEM_SYSCTL) +# ifdef HAVE_SYS_PARAM_H +# include +# endif +# ifdef HAVE_SYS_SYSCTL_H +# include +# endif + +#elif defined(HAVE_PHYSMEM_SYSINFO) +# include + +#elif defined(__DJGPP__) +# include +#endif + + +/// \brief Get the amount of physical memory in bytes +/// +/// \return Amount of physical memory in bytes. On error, zero is +/// returned. +static inline uint64_t +physmem(void) +{ + uint64_t ret = 0; + +#if defined(_WIN32) || defined(__CYGWIN__) + if ((GetVersion() & 0xFF) >= 5) { + // Windows 2000 and later have GlobalMemoryStatusEx() which + // supports reporting values greater than 4 GiB. To keep the + // code working also on older Windows versions, use + // GlobalMemoryStatusEx() conditionally. + HMODULE kernel32 = GetModuleHandle("kernel32.dll"); + if (kernel32 != NULL) { + BOOL (WINAPI *gmse)(LPMEMORYSTATUSEX) = GetProcAddress( + kernel32, "GlobalMemoryStatusEx"); + if (gmse != NULL) { + MEMORYSTATUSEX meminfo; + meminfo.dwLength = sizeof(meminfo); + if (gmse(&meminfo)) + ret = meminfo.ullTotalPhys; + } + } + } + + if (ret == 0) { + // GlobalMemoryStatus() is supported by Windows 95 and later, + // so it is fine to link against it unconditionally. Note that + // GlobalMemoryStatus() has no return value. + MEMORYSTATUS meminfo; + meminfo.dwLength = sizeof(meminfo); + GlobalMemoryStatus(&meminfo); + ret = meminfo.dwTotalPhys; + } + +#elif defined(HAVE_PHYSMEM_SYSCONF) + const long pagesize = sysconf(_SC_PAGESIZE); + const long pages = sysconf(_SC_PHYS_PAGES); + if (pagesize != -1 || pages != -1) + // According to docs, pagesize * pages can overflow. + // Simple case is 32-bit box with 4 GiB or more RAM, + // which may report exactly 4 GiB of RAM, and "long" + // being 32-bit will overflow. Casting to uint64_t + // hopefully avoids overflows in the near future. + ret = (uint64_t)(pagesize) * (uint64_t)(pages); + +#elif defined(HAVE_PHYSMEM_SYSCTL) + int name[2] = { + CTL_HW, +#ifdef HW_PHYSMEM64 + HW_PHYSMEM64 +#else + HW_PHYSMEM +#endif + }; + union { + uint32_t u32; + uint64_t u64; + } mem; + size_t mem_ptr_size = sizeof(mem.u64); + if (!sysctl(name, 2, &mem.u64, &mem_ptr_size, NULL, NULL)) { + // IIRC, 64-bit "return value" is possible on some 64-bit + // BSD systems even with HW_PHYSMEM (instead of HW_PHYSMEM64), + // so support both. + if (mem_ptr_size == sizeof(mem.u64)) + ret = mem.u64; + else if (mem_ptr_size == sizeof(mem.u32)) + ret = mem.u32; + } + +#elif defined(HAVE_PHYSMEM_SYSINFO) + struct sysinfo si; + if (sysinfo(&si) == 0) + ret = (uint64_t)(si.totalram) * si.mem_unit; + +#elif defined(__DJGPP__) + __dpmi_free_mem_info meminfo; + if (__dpmi_get_free_memory_information(&meminfo) == 0 + && meminfo.total_number_of_physical_pages + != (unsigned long)(-1)) + ret = (uint64_t)(meminfo.total_number_of_physical_pages) + * 4096; +#endif + + return ret; +} + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/common/sysdefs.h b/Build/source/extra/xz-4.999.9beta/src/common/sysdefs.h new file mode 100644 index 00000000000..fbc9176a8a1 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/common/sysdefs.h @@ -0,0 +1,169 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file sysdefs.h +/// \brief Common includes, definitions, system-specific things etc. +/// +/// This file is used also by the lzma command line tool, that's why this +/// file is separate from common.h. +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_SYSDEFS_H +#define LZMA_SYSDEFS_H + +////////////// +// Includes // +////////////// + +#ifdef HAVE_CONFIG_H +# include +#endif + +// size_t and NULL +#include + +#ifdef HAVE_INTTYPES_H +# include +#endif + +// C99 says that inttypes.h always includes stdint.h, but some systems +// don't do that, and require including stdint.h separately. +#ifdef HAVE_STDINT_H +# include +#endif + +// Some pre-C99 systems have SIZE_MAX in limits.h instead of stdint.h. The +// limits are also used to figure out some macros missing from pre-C99 systems. +#ifdef HAVE_LIMITS_H +# include +#endif + +// Be more compatible with systems that have non-conforming inttypes.h. +// We assume that int is 32-bit and that long is either 32-bit or 64-bit. +// Full Autoconf test could be more correct, but this should work well enough. +// Note that this duplicates some code from lzma.h, but this is better since +// we can work without inttypes.h thanks to Autoconf tests. +#ifndef UINT32_C +# if UINT_MAX != 4294967295U +# error UINT32_C is not defined and unsiged int is not 32-bit. +# endif +# define UINT32_C(n) n ## U +#endif +#ifndef UINT32_MAX +# define UINT32_MAX UINT32_C(4294967295) +#endif +#ifndef PRIu32 +# define PRIu32 "u" +#endif +#ifndef PRIX32 +# define PRIX32 "X" +#endif + +#if ULONG_MAX == 4294967295UL +# ifndef UINT64_C +# define UINT64_C(n) n ## ULL +# endif +# ifndef PRIu64 +# define PRIu64 "llu" +# endif +# ifndef PRIX64 +# define PRIX64 "llX" +# endif +#else +# ifndef UINT64_C +# define UINT64_C(n) n ## UL +# endif +# ifndef PRIu64 +# define PRIu64 "lu" +# endif +# ifndef PRIX64 +# define PRIX64 "lX" +# endif +#endif +#ifndef UINT64_MAX +# define UINT64_MAX UINT64_C(18446744073709551615) +#endif + +// The code currently assumes that size_t is either 32-bit or 64-bit. +#ifndef SIZE_MAX +# if SIZEOF_SIZE_T == 4 +# define SIZE_MAX UINT32_MAX +# elif SIZEOF_SIZE_T == 8 +# define SIZE_MAX UINT64_MAX +# else +# error sizeof(size_t) is not 32-bit or 64-bit +# endif +#endif +#if SIZE_MAX != UINT32_MAX && SIZE_MAX != UINT64_MAX +# error sizeof(size_t) is not 32-bit or 64-bit +#endif + +#include +#include + +// Pre-C99 systems lack stdbool.h. All the code in LZMA Utils must be written +// so that it works with fake bool type, for example: +// +// bool foo = (flags & 0x100) != 0; +// bool bar = !!(flags & 0x100); +// +// This works with the real C99 bool but breaks with fake bool: +// +// bool baz = (flags & 0x100); +// +#ifdef HAVE_STDBOOL_H +# include +#else +# if ! HAVE__BOOL +typedef unsigned char _Bool; +# endif +# define bool _Bool +# define false 0 +# define true 1 +# define __bool_true_false_are_defined 1 +#endif + +// string.h should be enough but let's include strings.h and memory.h too if +// they exists, since that shouldn't do any harm, but may improve portability. +#ifdef HAVE_STRING_H +# include +#endif + +#ifdef HAVE_STRINGS_H +# include +#endif + +#ifdef HAVE_MEMORY_H +# include +#endif + + +//////////// +// Macros // +//////////// + +#if defined(_WIN32) || defined(__MSDOS__) || defined(__OS2__) +# define DOSLIKE 1 +#endif + +#undef memzero +#define memzero(s, n) memset(s, 0, n) + +#ifndef MIN +# define MIN(x, y) ((x) < (y) ? (x) : (y)) +#endif + +#ifndef MAX +# define MAX(x, y) ((x) > (y) ? (x) : (y)) +#endif + +#ifndef ARRAY_SIZE +# define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) +#endif + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/Makefile.am b/Build/source/extra/xz-4.999.9beta/src/liblzma/Makefile.am new file mode 100644 index 00000000000..6d5753b14fc --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/Makefile.am @@ -0,0 +1,94 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +SUBDIRS = api + +EXTRA_DIST = +CLEANFILES = +doc_DATA = + +lib_LTLIBRARIES = liblzma.la +liblzma_la_SOURCES = +liblzma_la_CPPFLAGS = \ + -I$(top_srcdir)/src/liblzma/api \ + -I$(top_srcdir)/src/liblzma/common \ + -I$(top_srcdir)/src/liblzma/check \ + -I$(top_srcdir)/src/liblzma/lz \ + -I$(top_srcdir)/src/liblzma/rangecoder \ + -I$(top_srcdir)/src/liblzma/lzma \ + -I$(top_srcdir)/src/liblzma/subblock \ + -I$(top_srcdir)/src/liblzma/delta \ + -I$(top_srcdir)/src/liblzma/simple \ + -I$(top_srcdir)/src/common +liblzma_la_LDFLAGS = -no-undefined -version-info 0:0:0 + +include $(srcdir)/common/Makefile.inc +include $(srcdir)/check/Makefile.inc + +if COND_FILTER_LZ +include $(srcdir)/lz/Makefile.inc +endif + +if COND_FILTER_LZMA1 +include $(srcdir)/lzma/Makefile.inc +include $(srcdir)/rangecoder/Makefile.inc +endif + +if COND_FILTER_SUBBLOCK +include $(srcdir)/subblock/Makefile.inc +endif + +if COND_FILTER_DELTA +include $(srcdir)/delta/Makefile.inc +endif + +if COND_FILTER_SIMPLE +include $(srcdir)/simple/Makefile.inc +endif + + +## Windows-specific stuff + +# Windows resource compiler support. libtool knows what to do with .rc +# files, but Automake (<= 1.11 at least) doesn't know. +# +# We want the resource file only in shared liblzma. To avoid linking it into +# static liblzma, we overwrite the static object file with an object file +# compiled from empty input. Note that GNU-specific features are OK here, +# because on Windows we are compiled with the GNU toolchain. +.rc.lo: + $(LIBTOOL) --mode=compile $(RC) $(DEFS) $(DEFAULT_INCLUDES) \ + $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) \ + -i $< -o $@ + echo > empty.c + $(COMPILE) -c empty.c -o $(*D)/$(*F).o + +# Remove ordinals from the generated .def file. People must link by name, +# not by ordinal, because no one is going to track the ordinal numbers. +liblzma.def: liblzma.la liblzma.def.in + sed 's/ \+@ *[0-9]\+//' liblzma.def.in > liblzma.def + +# Creating liblzma.def.in is a side effect of linking the library. +liblzma.def.in: liblzma.la + +if COND_W32 +CLEANFILES += liblzma.def liblzma.def.in empty.c +liblzma_la_SOURCES += liblzma_w32res.rc +liblzma_la_LDFLAGS += -Xlinker --output-def -Xlinker liblzma.def.in + +## liblzma.def.in is created only when building shared liblzma, so don't +## try to create liblzma.def when not building shared liblzma. +if COND_SHARED +doc_DATA += liblzma.def +endif +endif + + +## pkg-config +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = liblzma.pc +EXTRA_DIST += liblzma.pc.in diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/Makefile.in b/Build/source/extra/xz-4.999.9beta/src/liblzma/Makefile.in new file mode 100644 index 00000000000..7d401e58b45 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/Makefile.in @@ -0,0 +1,1728 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/check/Makefile.inc $(srcdir)/common/Makefile.inc \ + $(srcdir)/delta/Makefile.inc $(srcdir)/liblzma.pc.in \ + $(srcdir)/lz/Makefile.inc $(srcdir)/lzma/Makefile.inc \ + $(srcdir)/rangecoder/Makefile.inc \ + $(srcdir)/simple/Makefile.inc $(srcdir)/subblock/Makefile.inc +@COND_MAIN_ENCODER_TRUE@am__append_1 = \ +@COND_MAIN_ENCODER_TRUE@ common/alone_encoder.c \ +@COND_MAIN_ENCODER_TRUE@ common/block_buffer_encoder.c \ +@COND_MAIN_ENCODER_TRUE@ common/block_encoder.c \ +@COND_MAIN_ENCODER_TRUE@ common/block_encoder.h \ +@COND_MAIN_ENCODER_TRUE@ common/block_header_encoder.c \ +@COND_MAIN_ENCODER_TRUE@ common/easy_buffer_encoder.c \ +@COND_MAIN_ENCODER_TRUE@ common/easy_encoder.c \ +@COND_MAIN_ENCODER_TRUE@ common/easy_encoder_memusage.c \ +@COND_MAIN_ENCODER_TRUE@ common/filter_buffer_encoder.c \ +@COND_MAIN_ENCODER_TRUE@ common/filter_encoder.c \ +@COND_MAIN_ENCODER_TRUE@ common/filter_encoder.h \ +@COND_MAIN_ENCODER_TRUE@ common/filter_flags_encoder.c \ +@COND_MAIN_ENCODER_TRUE@ common/index_encoder.c \ +@COND_MAIN_ENCODER_TRUE@ common/index_encoder.h \ +@COND_MAIN_ENCODER_TRUE@ common/stream_buffer_encoder.c \ +@COND_MAIN_ENCODER_TRUE@ common/stream_encoder.c \ +@COND_MAIN_ENCODER_TRUE@ common/stream_encoder.h \ +@COND_MAIN_ENCODER_TRUE@ common/stream_flags_encoder.c \ +@COND_MAIN_ENCODER_TRUE@ common/vli_encoder.c + +@COND_MAIN_DECODER_TRUE@am__append_2 = \ +@COND_MAIN_DECODER_TRUE@ common/alone_decoder.c \ +@COND_MAIN_DECODER_TRUE@ common/alone_decoder.h \ +@COND_MAIN_DECODER_TRUE@ common/auto_decoder.c \ +@COND_MAIN_DECODER_TRUE@ common/block_buffer_decoder.c \ +@COND_MAIN_DECODER_TRUE@ common/block_decoder.c \ +@COND_MAIN_DECODER_TRUE@ common/block_decoder.h \ +@COND_MAIN_DECODER_TRUE@ common/block_header_decoder.c \ +@COND_MAIN_DECODER_TRUE@ common/easy_decoder_memusage.c \ +@COND_MAIN_DECODER_TRUE@ common/filter_buffer_decoder.c \ +@COND_MAIN_DECODER_TRUE@ common/filter_decoder.c \ +@COND_MAIN_DECODER_TRUE@ common/filter_decoder.h \ +@COND_MAIN_DECODER_TRUE@ common/filter_flags_decoder.c \ +@COND_MAIN_DECODER_TRUE@ common/index_decoder.c \ +@COND_MAIN_DECODER_TRUE@ common/index_hash.c \ +@COND_MAIN_DECODER_TRUE@ common/stream_buffer_decoder.c \ +@COND_MAIN_DECODER_TRUE@ common/stream_decoder.c \ +@COND_MAIN_DECODER_TRUE@ common/stream_decoder.h \ +@COND_MAIN_DECODER_TRUE@ common/stream_flags_decoder.c \ +@COND_MAIN_DECODER_TRUE@ common/vli_decoder.c + +@COND_CHECK_CRC32_TRUE@@COND_SMALL_TRUE@am__append_3 = check/crc32_small.c +@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__append_4 = \ +@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@ check/crc32_table.c \ +@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@ check/crc32_table_le.h \ +@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@ check/crc32_table_be.h + +@COND_ASM_X86_TRUE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__append_5 = check/crc32_x86.S +@COND_ASM_X86_FALSE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__append_6 = check/crc32_fast.c +@COND_CHECK_CRC64_TRUE@@COND_SMALL_TRUE@am__append_7 = check/crc64_small.c +@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__append_8 = \ +@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@ check/crc64_table.c \ +@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@ check/crc64_table_le.h \ +@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@ check/crc64_table_be.h + +@COND_ASM_X86_TRUE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__append_9 = check/crc64_x86.S +@COND_ASM_X86_FALSE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__append_10 = check/crc64_fast.c +@COND_CHECK_SHA256_TRUE@am__append_11 = check/sha256.c +@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__append_12 = \ +@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_encoder.c \ +@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_encoder.h \ +@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_encoder_hash.h \ +@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_encoder_mf.c + +@COND_DECODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__append_13 = \ +@COND_DECODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_decoder.c \ +@COND_DECODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_decoder.h + +@COND_FILTER_LZMA1_TRUE@am__append_14 = lzma/fastpos_tablegen.c \ +@COND_FILTER_LZMA1_TRUE@ rangecoder/price_tablegen.c +@COND_FILTER_LZMA1_TRUE@am__append_15 = lzma/lzma_common.h +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_16 = \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/fastpos.h \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder.h \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder.c \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder_presets.c \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder_private.h \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder_optimum_fast.c \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder_optimum_normal.c + +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@@COND_SMALL_FALSE@am__append_17 = lzma/fastpos_table.c +@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_18 = \ +@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_decoder.c \ +@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_decoder.h + +@COND_ENCODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_19 = \ +@COND_ENCODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma2_encoder.c \ +@COND_ENCODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma2_encoder.h + +@COND_DECODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_20 = \ +@COND_DECODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma2_decoder.c \ +@COND_DECODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma2_decoder.h + +@COND_FILTER_LZMA1_TRUE@am__append_21 = rangecoder/range_common.h +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_22 = \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ rangecoder/range_encoder.h \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ rangecoder/price.h \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ rangecoder/price_table.c + +@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_23 = rangecoder/range_decoder.h +@COND_ENCODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@am__append_24 = \ +@COND_ENCODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@ subblock/subblock_encoder.c \ +@COND_ENCODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@ subblock/subblock_encoder.h + +@COND_DECODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@am__append_25 = \ +@COND_DECODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@ subblock/subblock_decoder.c \ +@COND_DECODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@ subblock/subblock_decoder.h \ +@COND_DECODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@ subblock/subblock_decoder_helper.c \ +@COND_DECODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@ subblock/subblock_decoder_helper.h + +@COND_FILTER_DELTA_TRUE@am__append_26 = \ +@COND_FILTER_DELTA_TRUE@ delta/delta_common.c \ +@COND_FILTER_DELTA_TRUE@ delta/delta_common.h \ +@COND_FILTER_DELTA_TRUE@ delta/delta_private.h + +@COND_ENCODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__append_27 = \ +@COND_ENCODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@ delta/delta_encoder.c \ +@COND_ENCODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@ delta/delta_encoder.h + +@COND_DECODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__append_28 = \ +@COND_DECODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@ delta/delta_decoder.c \ +@COND_DECODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@ delta/delta_decoder.h + +@COND_FILTER_SIMPLE_TRUE@am__append_29 = \ +@COND_FILTER_SIMPLE_TRUE@ simple/simple_coder.c \ +@COND_FILTER_SIMPLE_TRUE@ simple/simple_coder.h \ +@COND_FILTER_SIMPLE_TRUE@ simple/simple_private.h + +@COND_ENCODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_30 = \ +@COND_ENCODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@ simple/simple_encoder.c \ +@COND_ENCODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@ simple/simple_encoder.h + +@COND_DECODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_31 = \ +@COND_DECODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@ simple/simple_decoder.c \ +@COND_DECODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@ simple/simple_decoder.h + +@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_X86_TRUE@am__append_32 = simple/x86.c +@COND_FILTER_POWERPC_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_33 = simple/powerpc.c +@COND_FILTER_IA64_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_34 = simple/ia64.c +@COND_FILTER_ARM_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_35 = simple/arm.c +@COND_FILTER_ARMTHUMB_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_36 = simple/armthumb.c +@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_SPARC_TRUE@am__append_37 = simple/sparc.c +@COND_W32_TRUE@am__append_38 = liblzma.def liblzma.def.in empty.c +@COND_W32_TRUE@am__append_39 = liblzma_w32res.rc +@COND_W32_TRUE@am__append_40 = -Xlinker --output-def -Xlinker liblzma.def.in +@COND_SHARED_TRUE@@COND_W32_TRUE@am__append_41 = liblzma.def +subdir = src/liblzma +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ + $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = liblzma.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__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ + "$(DESTDIR)$(pkgconfigdir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +liblzma_la_LIBADD = +am__liblzma_la_SOURCES_DIST = common/common.c common/common.h \ + common/bsr.h common/block_util.c common/easy_preset.c \ + common/easy_preset.h common/filter_common.c \ + common/filter_common.h common/index.c common/index.h \ + common/stream_flags_common.c common/stream_flags_common.h \ + common/vli_size.c common/alone_encoder.c \ + common/block_buffer_encoder.c common/block_encoder.c \ + common/block_encoder.h common/block_header_encoder.c \ + common/easy_buffer_encoder.c common/easy_encoder.c \ + common/easy_encoder_memusage.c common/filter_buffer_encoder.c \ + common/filter_encoder.c common/filter_encoder.h \ + common/filter_flags_encoder.c common/index_encoder.c \ + common/index_encoder.h common/stream_buffer_encoder.c \ + common/stream_encoder.c common/stream_encoder.h \ + common/stream_flags_encoder.c common/vli_encoder.c \ + common/alone_decoder.c common/alone_decoder.h \ + common/auto_decoder.c common/block_buffer_decoder.c \ + common/block_decoder.c common/block_decoder.h \ + common/block_header_decoder.c common/easy_decoder_memusage.c \ + common/filter_buffer_decoder.c common/filter_decoder.c \ + common/filter_decoder.h common/filter_flags_decoder.c \ + common/index_decoder.c common/index_hash.c \ + common/stream_buffer_decoder.c common/stream_decoder.c \ + common/stream_decoder.h common/stream_flags_decoder.c \ + common/vli_decoder.c check/check.c check/check.h \ + check/crc_macros.h check/crc32_small.c check/crc32_table.c \ + check/crc32_table_le.h check/crc32_table_be.h \ + check/crc32_x86.S check/crc32_fast.c check/crc64_small.c \ + check/crc64_table.c check/crc64_table_le.h \ + check/crc64_table_be.h check/crc64_x86.S check/crc64_fast.c \ + check/sha256.c lz/lz_encoder.c lz/lz_encoder.h \ + lz/lz_encoder_hash.h lz/lz_encoder_mf.c lz/lz_decoder.c \ + lz/lz_decoder.h lzma/lzma_common.h lzma/fastpos.h \ + lzma/lzma_encoder.h lzma/lzma_encoder.c \ + lzma/lzma_encoder_presets.c lzma/lzma_encoder_private.h \ + lzma/lzma_encoder_optimum_fast.c \ + lzma/lzma_encoder_optimum_normal.c lzma/fastpos_table.c \ + lzma/lzma_decoder.c lzma/lzma_decoder.h lzma/lzma2_encoder.c \ + lzma/lzma2_encoder.h lzma/lzma2_decoder.c lzma/lzma2_decoder.h \ + rangecoder/range_common.h rangecoder/range_encoder.h \ + rangecoder/price.h rangecoder/price_table.c \ + rangecoder/range_decoder.h subblock/subblock_encoder.c \ + subblock/subblock_encoder.h subblock/subblock_decoder.c \ + subblock/subblock_decoder.h subblock/subblock_decoder_helper.c \ + subblock/subblock_decoder_helper.h delta/delta_common.c \ + delta/delta_common.h delta/delta_private.h \ + delta/delta_encoder.c delta/delta_encoder.h \ + delta/delta_decoder.c delta/delta_decoder.h \ + simple/simple_coder.c simple/simple_coder.h \ + simple/simple_private.h simple/simple_encoder.c \ + simple/simple_encoder.h simple/simple_decoder.c \ + simple/simple_decoder.h simple/x86.c simple/powerpc.c \ + simple/ia64.c simple/arm.c simple/armthumb.c simple/sparc.c \ + liblzma_w32res.rc +@COND_MAIN_ENCODER_TRUE@am__objects_1 = liblzma_la-alone_encoder.lo \ +@COND_MAIN_ENCODER_TRUE@ liblzma_la-block_buffer_encoder.lo \ +@COND_MAIN_ENCODER_TRUE@ liblzma_la-block_encoder.lo \ +@COND_MAIN_ENCODER_TRUE@ liblzma_la-block_header_encoder.lo \ +@COND_MAIN_ENCODER_TRUE@ liblzma_la-easy_buffer_encoder.lo \ +@COND_MAIN_ENCODER_TRUE@ liblzma_la-easy_encoder.lo \ +@COND_MAIN_ENCODER_TRUE@ liblzma_la-easy_encoder_memusage.lo \ +@COND_MAIN_ENCODER_TRUE@ liblzma_la-filter_buffer_encoder.lo \ +@COND_MAIN_ENCODER_TRUE@ liblzma_la-filter_encoder.lo \ +@COND_MAIN_ENCODER_TRUE@ liblzma_la-filter_flags_encoder.lo \ +@COND_MAIN_ENCODER_TRUE@ liblzma_la-index_encoder.lo \ +@COND_MAIN_ENCODER_TRUE@ liblzma_la-stream_buffer_encoder.lo \ +@COND_MAIN_ENCODER_TRUE@ liblzma_la-stream_encoder.lo \ +@COND_MAIN_ENCODER_TRUE@ liblzma_la-stream_flags_encoder.lo \ +@COND_MAIN_ENCODER_TRUE@ liblzma_la-vli_encoder.lo +@COND_MAIN_DECODER_TRUE@am__objects_2 = liblzma_la-alone_decoder.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-auto_decoder.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-block_buffer_decoder.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-block_decoder.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-block_header_decoder.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-easy_decoder_memusage.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-filter_buffer_decoder.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-filter_decoder.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-filter_flags_decoder.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-index_decoder.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-index_hash.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-stream_buffer_decoder.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-stream_decoder.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-stream_flags_decoder.lo \ +@COND_MAIN_DECODER_TRUE@ liblzma_la-vli_decoder.lo +@COND_CHECK_CRC32_TRUE@@COND_SMALL_TRUE@am__objects_3 = liblzma_la-crc32_small.lo +@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__objects_4 = liblzma_la-crc32_table.lo +@COND_ASM_X86_TRUE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__objects_5 = liblzma_la-crc32_x86.lo +@COND_ASM_X86_FALSE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__objects_6 = liblzma_la-crc32_fast.lo +@COND_CHECK_CRC64_TRUE@@COND_SMALL_TRUE@am__objects_7 = liblzma_la-crc64_small.lo +@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__objects_8 = liblzma_la-crc64_table.lo +@COND_ASM_X86_TRUE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__objects_9 = liblzma_la-crc64_x86.lo +@COND_ASM_X86_FALSE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__objects_10 = liblzma_la-crc64_fast.lo +@COND_CHECK_SHA256_TRUE@am__objects_11 = liblzma_la-sha256.lo +@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__objects_12 = liblzma_la-lz_encoder.lo \ +@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ liblzma_la-lz_encoder_mf.lo +@COND_DECODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__objects_13 = liblzma_la-lz_decoder.lo +am__objects_14 = +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_15 = liblzma_la-lzma_encoder.lo \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ liblzma_la-lzma_encoder_presets.lo \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ liblzma_la-lzma_encoder_optimum_fast.lo \ +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ liblzma_la-lzma_encoder_optimum_normal.lo +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@@COND_SMALL_FALSE@am__objects_16 = liblzma_la-fastpos_table.lo +@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_17 = liblzma_la-lzma_decoder.lo +@COND_ENCODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_18 = liblzma_la-lzma2_encoder.lo +@COND_DECODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_19 = liblzma_la-lzma2_decoder.lo +@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_20 = liblzma_la-price_table.lo +@COND_ENCODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@am__objects_21 = liblzma_la-subblock_encoder.lo +@COND_DECODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@am__objects_22 = liblzma_la-subblock_decoder.lo \ +@COND_DECODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@ liblzma_la-subblock_decoder_helper.lo +@COND_FILTER_DELTA_TRUE@am__objects_23 = liblzma_la-delta_common.lo +@COND_ENCODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__objects_24 = liblzma_la-delta_encoder.lo +@COND_DECODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__objects_25 = liblzma_la-delta_decoder.lo +@COND_FILTER_SIMPLE_TRUE@am__objects_26 = liblzma_la-simple_coder.lo +@COND_ENCODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_27 = liblzma_la-simple_encoder.lo +@COND_DECODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_28 = liblzma_la-simple_decoder.lo +@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_X86_TRUE@am__objects_29 = liblzma_la-x86.lo +@COND_FILTER_POWERPC_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_30 = liblzma_la-powerpc.lo +@COND_FILTER_IA64_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_31 = liblzma_la-ia64.lo +@COND_FILTER_ARM_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_32 = liblzma_la-arm.lo +@COND_FILTER_ARMTHUMB_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_33 = liblzma_la-armthumb.lo +@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_SPARC_TRUE@am__objects_34 = liblzma_la-sparc.lo +@COND_W32_TRUE@am__objects_35 = liblzma_w32res.lo +am_liblzma_la_OBJECTS = liblzma_la-common.lo liblzma_la-block_util.lo \ + liblzma_la-easy_preset.lo liblzma_la-filter_common.lo \ + liblzma_la-index.lo liblzma_la-stream_flags_common.lo \ + liblzma_la-vli_size.lo $(am__objects_1) $(am__objects_2) \ + liblzma_la-check.lo $(am__objects_3) $(am__objects_4) \ + $(am__objects_5) $(am__objects_6) $(am__objects_7) \ + $(am__objects_8) $(am__objects_9) $(am__objects_10) \ + $(am__objects_11) $(am__objects_12) $(am__objects_13) \ + $(am__objects_14) $(am__objects_15) $(am__objects_16) \ + $(am__objects_17) $(am__objects_18) $(am__objects_19) \ + $(am__objects_14) $(am__objects_20) $(am__objects_14) \ + $(am__objects_21) $(am__objects_22) $(am__objects_23) \ + $(am__objects_24) $(am__objects_25) $(am__objects_26) \ + $(am__objects_27) $(am__objects_28) $(am__objects_29) \ + $(am__objects_30) $(am__objects_31) $(am__objects_32) \ + $(am__objects_33) $(am__objects_34) $(am__objects_35) +liblzma_la_OBJECTS = $(am_liblzma_la_OBJECTS) +liblzma_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(liblzma_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) +LTCPPASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(liblzma_la_SOURCES) +DIST_SOURCES = $(am__liblzma_la_SOURCES_DIST) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +DATA = $(doc_DATA) $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ +DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETOPT_H = @GETOPT_H@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSIX_SHELL = @POSIX_SHELL@ +POSUB = @POSUB@ +PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ +STATIC_LDFLAGS = @STATIC_LDFLAGS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +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@ +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@ +lt_ECHO = @lt_ECHO@ +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@ +xz = @xz@ +SUBDIRS = api +EXTRA_DIST = check/crc32_tablegen.c check/crc64_tablegen.c \ + $(am__append_14) liblzma.pc.in +CLEANFILES = $(am__append_38) +doc_DATA = $(am__append_41) +lib_LTLIBRARIES = liblzma.la +liblzma_la_SOURCES = common/common.c common/common.h common/bsr.h \ + common/block_util.c common/easy_preset.c common/easy_preset.h \ + common/filter_common.c common/filter_common.h common/index.c \ + common/index.h common/stream_flags_common.c \ + common/stream_flags_common.h common/vli_size.c $(am__append_1) \ + $(am__append_2) check/check.c check/check.h check/crc_macros.h \ + $(am__append_3) $(am__append_4) $(am__append_5) \ + $(am__append_6) $(am__append_7) $(am__append_8) \ + $(am__append_9) $(am__append_10) $(am__append_11) \ + $(am__append_12) $(am__append_13) $(am__append_15) \ + $(am__append_16) $(am__append_17) $(am__append_18) \ + $(am__append_19) $(am__append_20) $(am__append_21) \ + $(am__append_22) $(am__append_23) $(am__append_24) \ + $(am__append_25) $(am__append_26) $(am__append_27) \ + $(am__append_28) $(am__append_29) $(am__append_30) \ + $(am__append_31) $(am__append_32) $(am__append_33) \ + $(am__append_34) $(am__append_35) $(am__append_36) \ + $(am__append_37) $(am__append_39) +liblzma_la_CPPFLAGS = \ + -I$(top_srcdir)/src/liblzma/api \ + -I$(top_srcdir)/src/liblzma/common \ + -I$(top_srcdir)/src/liblzma/check \ + -I$(top_srcdir)/src/liblzma/lz \ + -I$(top_srcdir)/src/liblzma/rangecoder \ + -I$(top_srcdir)/src/liblzma/lzma \ + -I$(top_srcdir)/src/liblzma/subblock \ + -I$(top_srcdir)/src/liblzma/delta \ + -I$(top_srcdir)/src/liblzma/simple \ + -I$(top_srcdir)/src/common + +liblzma_la_LDFLAGS = -no-undefined -version-info 0:0:0 \ + $(am__append_40) +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = liblzma.pc +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .obj .rc +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/common/Makefile.inc $(srcdir)/check/Makefile.inc $(srcdir)/lz/Makefile.inc $(srcdir)/lzma/Makefile.inc $(srcdir)/rangecoder/Makefile.inc $(srcdir)/subblock/Makefile.inc $(srcdir)/delta/Makefile.inc $(srcdir)/simple/Makefile.inc $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/liblzma/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/liblzma/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +liblzma.pc: $(top_builddir)/config.status $(srcdir)/liblzma.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +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 +liblzma.la: $(liblzma_la_OBJECTS) $(liblzma_la_DEPENDENCIES) + $(liblzma_la_LINK) -rpath $(libdir) $(liblzma_la_OBJECTS) $(liblzma_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-alone_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-alone_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-arm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-armthumb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-auto_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_buffer_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_buffer_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_header_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_header_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-check.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-common.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc32_fast.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc32_small.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc32_table.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc32_x86.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc64_fast.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc64_small.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc64_table.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc64_x86.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-delta_common.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-delta_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-delta_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-easy_buffer_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-easy_decoder_memusage.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-easy_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-easy_encoder_memusage.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-easy_preset.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-fastpos_table.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_buffer_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_buffer_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_common.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_flags_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_flags_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-ia64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-index.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-index_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-index_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-index_hash.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lz_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lz_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lz_encoder_mf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma2_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma2_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma_encoder_optimum_fast.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma_encoder_optimum_normal.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma_encoder_presets.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-powerpc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-price_table.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-sha256.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-simple_coder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-simple_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-simple_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-sparc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_buffer_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_buffer_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_flags_common.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_flags_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_flags_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-subblock_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-subblock_decoder_helper.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-subblock_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-vli_decoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-vli_encoder.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-vli_size.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-x86.Plo@am__quote@ + +.S.o: +@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ $< + +.S.obj: +@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.S.lo: +@am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(LTCPPASCOMPILE) -c -o $@ $< + +liblzma_la-crc32_x86.lo: check/crc32_x86.S +@am__fastdepCCAS_TRUE@ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT liblzma_la-crc32_x86.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc32_x86.Tpo -c -o liblzma_la-crc32_x86.lo `test -f 'check/crc32_x86.S' || echo '$(srcdir)/'`check/crc32_x86.S +@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc32_x86.Tpo $(DEPDIR)/liblzma_la-crc32_x86.Plo +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='check/crc32_x86.S' object='liblzma_la-crc32_x86.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o liblzma_la-crc32_x86.lo `test -f 'check/crc32_x86.S' || echo '$(srcdir)/'`check/crc32_x86.S + +liblzma_la-crc64_x86.lo: check/crc64_x86.S +@am__fastdepCCAS_TRUE@ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT liblzma_la-crc64_x86.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc64_x86.Tpo -c -o liblzma_la-crc64_x86.lo `test -f 'check/crc64_x86.S' || echo '$(srcdir)/'`check/crc64_x86.S +@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc64_x86.Tpo $(DEPDIR)/liblzma_la-crc64_x86.Plo +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='check/crc64_x86.S' object='liblzma_la-crc64_x86.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o liblzma_la-crc64_x86.lo `test -f 'check/crc64_x86.S' || echo '$(srcdir)/'`check/crc64_x86.S + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +liblzma_la-common.lo: common/common.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-common.lo -MD -MP -MF $(DEPDIR)/liblzma_la-common.Tpo -c -o liblzma_la-common.lo `test -f 'common/common.c' || echo '$(srcdir)/'`common/common.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-common.Tpo $(DEPDIR)/liblzma_la-common.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/common.c' object='liblzma_la-common.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-common.lo `test -f 'common/common.c' || echo '$(srcdir)/'`common/common.c + +liblzma_la-block_util.lo: common/block_util.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-block_util.lo -MD -MP -MF $(DEPDIR)/liblzma_la-block_util.Tpo -c -o liblzma_la-block_util.lo `test -f 'common/block_util.c' || echo '$(srcdir)/'`common/block_util.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-block_util.Tpo $(DEPDIR)/liblzma_la-block_util.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/block_util.c' object='liblzma_la-block_util.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-block_util.lo `test -f 'common/block_util.c' || echo '$(srcdir)/'`common/block_util.c + +liblzma_la-easy_preset.lo: common/easy_preset.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-easy_preset.lo -MD -MP -MF $(DEPDIR)/liblzma_la-easy_preset.Tpo -c -o liblzma_la-easy_preset.lo `test -f 'common/easy_preset.c' || echo '$(srcdir)/'`common/easy_preset.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-easy_preset.Tpo $(DEPDIR)/liblzma_la-easy_preset.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/easy_preset.c' object='liblzma_la-easy_preset.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-easy_preset.lo `test -f 'common/easy_preset.c' || echo '$(srcdir)/'`common/easy_preset.c + +liblzma_la-filter_common.lo: common/filter_common.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_common.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_common.Tpo -c -o liblzma_la-filter_common.lo `test -f 'common/filter_common.c' || echo '$(srcdir)/'`common/filter_common.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-filter_common.Tpo $(DEPDIR)/liblzma_la-filter_common.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/filter_common.c' object='liblzma_la-filter_common.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-filter_common.lo `test -f 'common/filter_common.c' || echo '$(srcdir)/'`common/filter_common.c + +liblzma_la-index.lo: common/index.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-index.lo -MD -MP -MF $(DEPDIR)/liblzma_la-index.Tpo -c -o liblzma_la-index.lo `test -f 'common/index.c' || echo '$(srcdir)/'`common/index.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-index.Tpo $(DEPDIR)/liblzma_la-index.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/index.c' object='liblzma_la-index.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-index.lo `test -f 'common/index.c' || echo '$(srcdir)/'`common/index.c + +liblzma_la-stream_flags_common.lo: common/stream_flags_common.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_flags_common.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_flags_common.Tpo -c -o liblzma_la-stream_flags_common.lo `test -f 'common/stream_flags_common.c' || echo '$(srcdir)/'`common/stream_flags_common.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-stream_flags_common.Tpo $(DEPDIR)/liblzma_la-stream_flags_common.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/stream_flags_common.c' object='liblzma_la-stream_flags_common.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_flags_common.lo `test -f 'common/stream_flags_common.c' || echo '$(srcdir)/'`common/stream_flags_common.c + +liblzma_la-vli_size.lo: common/vli_size.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-vli_size.lo -MD -MP -MF $(DEPDIR)/liblzma_la-vli_size.Tpo -c -o liblzma_la-vli_size.lo `test -f 'common/vli_size.c' || echo '$(srcdir)/'`common/vli_size.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-vli_size.Tpo $(DEPDIR)/liblzma_la-vli_size.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/vli_size.c' object='liblzma_la-vli_size.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-vli_size.lo `test -f 'common/vli_size.c' || echo '$(srcdir)/'`common/vli_size.c + +liblzma_la-alone_encoder.lo: common/alone_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-alone_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-alone_encoder.Tpo -c -o liblzma_la-alone_encoder.lo `test -f 'common/alone_encoder.c' || echo '$(srcdir)/'`common/alone_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-alone_encoder.Tpo $(DEPDIR)/liblzma_la-alone_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/alone_encoder.c' object='liblzma_la-alone_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-alone_encoder.lo `test -f 'common/alone_encoder.c' || echo '$(srcdir)/'`common/alone_encoder.c + +liblzma_la-block_buffer_encoder.lo: common/block_buffer_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-block_buffer_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-block_buffer_encoder.Tpo -c -o liblzma_la-block_buffer_encoder.lo `test -f 'common/block_buffer_encoder.c' || echo '$(srcdir)/'`common/block_buffer_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-block_buffer_encoder.Tpo $(DEPDIR)/liblzma_la-block_buffer_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/block_buffer_encoder.c' object='liblzma_la-block_buffer_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-block_buffer_encoder.lo `test -f 'common/block_buffer_encoder.c' || echo '$(srcdir)/'`common/block_buffer_encoder.c + +liblzma_la-block_encoder.lo: common/block_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-block_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-block_encoder.Tpo -c -o liblzma_la-block_encoder.lo `test -f 'common/block_encoder.c' || echo '$(srcdir)/'`common/block_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-block_encoder.Tpo $(DEPDIR)/liblzma_la-block_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/block_encoder.c' object='liblzma_la-block_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-block_encoder.lo `test -f 'common/block_encoder.c' || echo '$(srcdir)/'`common/block_encoder.c + +liblzma_la-block_header_encoder.lo: common/block_header_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-block_header_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-block_header_encoder.Tpo -c -o liblzma_la-block_header_encoder.lo `test -f 'common/block_header_encoder.c' || echo '$(srcdir)/'`common/block_header_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-block_header_encoder.Tpo $(DEPDIR)/liblzma_la-block_header_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/block_header_encoder.c' object='liblzma_la-block_header_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-block_header_encoder.lo `test -f 'common/block_header_encoder.c' || echo '$(srcdir)/'`common/block_header_encoder.c + +liblzma_la-easy_buffer_encoder.lo: common/easy_buffer_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-easy_buffer_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-easy_buffer_encoder.Tpo -c -o liblzma_la-easy_buffer_encoder.lo `test -f 'common/easy_buffer_encoder.c' || echo '$(srcdir)/'`common/easy_buffer_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-easy_buffer_encoder.Tpo $(DEPDIR)/liblzma_la-easy_buffer_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/easy_buffer_encoder.c' object='liblzma_la-easy_buffer_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-easy_buffer_encoder.lo `test -f 'common/easy_buffer_encoder.c' || echo '$(srcdir)/'`common/easy_buffer_encoder.c + +liblzma_la-easy_encoder.lo: common/easy_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-easy_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-easy_encoder.Tpo -c -o liblzma_la-easy_encoder.lo `test -f 'common/easy_encoder.c' || echo '$(srcdir)/'`common/easy_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-easy_encoder.Tpo $(DEPDIR)/liblzma_la-easy_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/easy_encoder.c' object='liblzma_la-easy_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-easy_encoder.lo `test -f 'common/easy_encoder.c' || echo '$(srcdir)/'`common/easy_encoder.c + +liblzma_la-easy_encoder_memusage.lo: common/easy_encoder_memusage.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-easy_encoder_memusage.lo -MD -MP -MF $(DEPDIR)/liblzma_la-easy_encoder_memusage.Tpo -c -o liblzma_la-easy_encoder_memusage.lo `test -f 'common/easy_encoder_memusage.c' || echo '$(srcdir)/'`common/easy_encoder_memusage.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-easy_encoder_memusage.Tpo $(DEPDIR)/liblzma_la-easy_encoder_memusage.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/easy_encoder_memusage.c' object='liblzma_la-easy_encoder_memusage.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-easy_encoder_memusage.lo `test -f 'common/easy_encoder_memusage.c' || echo '$(srcdir)/'`common/easy_encoder_memusage.c + +liblzma_la-filter_buffer_encoder.lo: common/filter_buffer_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_buffer_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_buffer_encoder.Tpo -c -o liblzma_la-filter_buffer_encoder.lo `test -f 'common/filter_buffer_encoder.c' || echo '$(srcdir)/'`common/filter_buffer_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-filter_buffer_encoder.Tpo $(DEPDIR)/liblzma_la-filter_buffer_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/filter_buffer_encoder.c' object='liblzma_la-filter_buffer_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-filter_buffer_encoder.lo `test -f 'common/filter_buffer_encoder.c' || echo '$(srcdir)/'`common/filter_buffer_encoder.c + +liblzma_la-filter_encoder.lo: common/filter_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_encoder.Tpo -c -o liblzma_la-filter_encoder.lo `test -f 'common/filter_encoder.c' || echo '$(srcdir)/'`common/filter_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-filter_encoder.Tpo $(DEPDIR)/liblzma_la-filter_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/filter_encoder.c' object='liblzma_la-filter_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-filter_encoder.lo `test -f 'common/filter_encoder.c' || echo '$(srcdir)/'`common/filter_encoder.c + +liblzma_la-filter_flags_encoder.lo: common/filter_flags_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_flags_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_flags_encoder.Tpo -c -o liblzma_la-filter_flags_encoder.lo `test -f 'common/filter_flags_encoder.c' || echo '$(srcdir)/'`common/filter_flags_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-filter_flags_encoder.Tpo $(DEPDIR)/liblzma_la-filter_flags_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/filter_flags_encoder.c' object='liblzma_la-filter_flags_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-filter_flags_encoder.lo `test -f 'common/filter_flags_encoder.c' || echo '$(srcdir)/'`common/filter_flags_encoder.c + +liblzma_la-index_encoder.lo: common/index_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-index_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-index_encoder.Tpo -c -o liblzma_la-index_encoder.lo `test -f 'common/index_encoder.c' || echo '$(srcdir)/'`common/index_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-index_encoder.Tpo $(DEPDIR)/liblzma_la-index_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/index_encoder.c' object='liblzma_la-index_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-index_encoder.lo `test -f 'common/index_encoder.c' || echo '$(srcdir)/'`common/index_encoder.c + +liblzma_la-stream_buffer_encoder.lo: common/stream_buffer_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_buffer_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_buffer_encoder.Tpo -c -o liblzma_la-stream_buffer_encoder.lo `test -f 'common/stream_buffer_encoder.c' || echo '$(srcdir)/'`common/stream_buffer_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-stream_buffer_encoder.Tpo $(DEPDIR)/liblzma_la-stream_buffer_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/stream_buffer_encoder.c' object='liblzma_la-stream_buffer_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_buffer_encoder.lo `test -f 'common/stream_buffer_encoder.c' || echo '$(srcdir)/'`common/stream_buffer_encoder.c + +liblzma_la-stream_encoder.lo: common/stream_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_encoder.Tpo -c -o liblzma_la-stream_encoder.lo `test -f 'common/stream_encoder.c' || echo '$(srcdir)/'`common/stream_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-stream_encoder.Tpo $(DEPDIR)/liblzma_la-stream_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/stream_encoder.c' object='liblzma_la-stream_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_encoder.lo `test -f 'common/stream_encoder.c' || echo '$(srcdir)/'`common/stream_encoder.c + +liblzma_la-stream_flags_encoder.lo: common/stream_flags_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_flags_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_flags_encoder.Tpo -c -o liblzma_la-stream_flags_encoder.lo `test -f 'common/stream_flags_encoder.c' || echo '$(srcdir)/'`common/stream_flags_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-stream_flags_encoder.Tpo $(DEPDIR)/liblzma_la-stream_flags_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/stream_flags_encoder.c' object='liblzma_la-stream_flags_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_flags_encoder.lo `test -f 'common/stream_flags_encoder.c' || echo '$(srcdir)/'`common/stream_flags_encoder.c + +liblzma_la-vli_encoder.lo: common/vli_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-vli_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-vli_encoder.Tpo -c -o liblzma_la-vli_encoder.lo `test -f 'common/vli_encoder.c' || echo '$(srcdir)/'`common/vli_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-vli_encoder.Tpo $(DEPDIR)/liblzma_la-vli_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/vli_encoder.c' object='liblzma_la-vli_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-vli_encoder.lo `test -f 'common/vli_encoder.c' || echo '$(srcdir)/'`common/vli_encoder.c + +liblzma_la-alone_decoder.lo: common/alone_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-alone_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-alone_decoder.Tpo -c -o liblzma_la-alone_decoder.lo `test -f 'common/alone_decoder.c' || echo '$(srcdir)/'`common/alone_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-alone_decoder.Tpo $(DEPDIR)/liblzma_la-alone_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/alone_decoder.c' object='liblzma_la-alone_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-alone_decoder.lo `test -f 'common/alone_decoder.c' || echo '$(srcdir)/'`common/alone_decoder.c + +liblzma_la-auto_decoder.lo: common/auto_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-auto_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-auto_decoder.Tpo -c -o liblzma_la-auto_decoder.lo `test -f 'common/auto_decoder.c' || echo '$(srcdir)/'`common/auto_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-auto_decoder.Tpo $(DEPDIR)/liblzma_la-auto_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/auto_decoder.c' object='liblzma_la-auto_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-auto_decoder.lo `test -f 'common/auto_decoder.c' || echo '$(srcdir)/'`common/auto_decoder.c + +liblzma_la-block_buffer_decoder.lo: common/block_buffer_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-block_buffer_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-block_buffer_decoder.Tpo -c -o liblzma_la-block_buffer_decoder.lo `test -f 'common/block_buffer_decoder.c' || echo '$(srcdir)/'`common/block_buffer_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-block_buffer_decoder.Tpo $(DEPDIR)/liblzma_la-block_buffer_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/block_buffer_decoder.c' object='liblzma_la-block_buffer_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-block_buffer_decoder.lo `test -f 'common/block_buffer_decoder.c' || echo '$(srcdir)/'`common/block_buffer_decoder.c + +liblzma_la-block_decoder.lo: common/block_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-block_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-block_decoder.Tpo -c -o liblzma_la-block_decoder.lo `test -f 'common/block_decoder.c' || echo '$(srcdir)/'`common/block_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-block_decoder.Tpo $(DEPDIR)/liblzma_la-block_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/block_decoder.c' object='liblzma_la-block_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-block_decoder.lo `test -f 'common/block_decoder.c' || echo '$(srcdir)/'`common/block_decoder.c + +liblzma_la-block_header_decoder.lo: common/block_header_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-block_header_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-block_header_decoder.Tpo -c -o liblzma_la-block_header_decoder.lo `test -f 'common/block_header_decoder.c' || echo '$(srcdir)/'`common/block_header_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-block_header_decoder.Tpo $(DEPDIR)/liblzma_la-block_header_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/block_header_decoder.c' object='liblzma_la-block_header_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-block_header_decoder.lo `test -f 'common/block_header_decoder.c' || echo '$(srcdir)/'`common/block_header_decoder.c + +liblzma_la-easy_decoder_memusage.lo: common/easy_decoder_memusage.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-easy_decoder_memusage.lo -MD -MP -MF $(DEPDIR)/liblzma_la-easy_decoder_memusage.Tpo -c -o liblzma_la-easy_decoder_memusage.lo `test -f 'common/easy_decoder_memusage.c' || echo '$(srcdir)/'`common/easy_decoder_memusage.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-easy_decoder_memusage.Tpo $(DEPDIR)/liblzma_la-easy_decoder_memusage.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/easy_decoder_memusage.c' object='liblzma_la-easy_decoder_memusage.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-easy_decoder_memusage.lo `test -f 'common/easy_decoder_memusage.c' || echo '$(srcdir)/'`common/easy_decoder_memusage.c + +liblzma_la-filter_buffer_decoder.lo: common/filter_buffer_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_buffer_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_buffer_decoder.Tpo -c -o liblzma_la-filter_buffer_decoder.lo `test -f 'common/filter_buffer_decoder.c' || echo '$(srcdir)/'`common/filter_buffer_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-filter_buffer_decoder.Tpo $(DEPDIR)/liblzma_la-filter_buffer_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/filter_buffer_decoder.c' object='liblzma_la-filter_buffer_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-filter_buffer_decoder.lo `test -f 'common/filter_buffer_decoder.c' || echo '$(srcdir)/'`common/filter_buffer_decoder.c + +liblzma_la-filter_decoder.lo: common/filter_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_decoder.Tpo -c -o liblzma_la-filter_decoder.lo `test -f 'common/filter_decoder.c' || echo '$(srcdir)/'`common/filter_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-filter_decoder.Tpo $(DEPDIR)/liblzma_la-filter_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/filter_decoder.c' object='liblzma_la-filter_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-filter_decoder.lo `test -f 'common/filter_decoder.c' || echo '$(srcdir)/'`common/filter_decoder.c + +liblzma_la-filter_flags_decoder.lo: common/filter_flags_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_flags_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_flags_decoder.Tpo -c -o liblzma_la-filter_flags_decoder.lo `test -f 'common/filter_flags_decoder.c' || echo '$(srcdir)/'`common/filter_flags_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-filter_flags_decoder.Tpo $(DEPDIR)/liblzma_la-filter_flags_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/filter_flags_decoder.c' object='liblzma_la-filter_flags_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-filter_flags_decoder.lo `test -f 'common/filter_flags_decoder.c' || echo '$(srcdir)/'`common/filter_flags_decoder.c + +liblzma_la-index_decoder.lo: common/index_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-index_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-index_decoder.Tpo -c -o liblzma_la-index_decoder.lo `test -f 'common/index_decoder.c' || echo '$(srcdir)/'`common/index_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-index_decoder.Tpo $(DEPDIR)/liblzma_la-index_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/index_decoder.c' object='liblzma_la-index_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-index_decoder.lo `test -f 'common/index_decoder.c' || echo '$(srcdir)/'`common/index_decoder.c + +liblzma_la-index_hash.lo: common/index_hash.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-index_hash.lo -MD -MP -MF $(DEPDIR)/liblzma_la-index_hash.Tpo -c -o liblzma_la-index_hash.lo `test -f 'common/index_hash.c' || echo '$(srcdir)/'`common/index_hash.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-index_hash.Tpo $(DEPDIR)/liblzma_la-index_hash.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/index_hash.c' object='liblzma_la-index_hash.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-index_hash.lo `test -f 'common/index_hash.c' || echo '$(srcdir)/'`common/index_hash.c + +liblzma_la-stream_buffer_decoder.lo: common/stream_buffer_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_buffer_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_buffer_decoder.Tpo -c -o liblzma_la-stream_buffer_decoder.lo `test -f 'common/stream_buffer_decoder.c' || echo '$(srcdir)/'`common/stream_buffer_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-stream_buffer_decoder.Tpo $(DEPDIR)/liblzma_la-stream_buffer_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/stream_buffer_decoder.c' object='liblzma_la-stream_buffer_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_buffer_decoder.lo `test -f 'common/stream_buffer_decoder.c' || echo '$(srcdir)/'`common/stream_buffer_decoder.c + +liblzma_la-stream_decoder.lo: common/stream_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_decoder.Tpo -c -o liblzma_la-stream_decoder.lo `test -f 'common/stream_decoder.c' || echo '$(srcdir)/'`common/stream_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-stream_decoder.Tpo $(DEPDIR)/liblzma_la-stream_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/stream_decoder.c' object='liblzma_la-stream_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_decoder.lo `test -f 'common/stream_decoder.c' || echo '$(srcdir)/'`common/stream_decoder.c + +liblzma_la-stream_flags_decoder.lo: common/stream_flags_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_flags_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_flags_decoder.Tpo -c -o liblzma_la-stream_flags_decoder.lo `test -f 'common/stream_flags_decoder.c' || echo '$(srcdir)/'`common/stream_flags_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-stream_flags_decoder.Tpo $(DEPDIR)/liblzma_la-stream_flags_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/stream_flags_decoder.c' object='liblzma_la-stream_flags_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_flags_decoder.lo `test -f 'common/stream_flags_decoder.c' || echo '$(srcdir)/'`common/stream_flags_decoder.c + +liblzma_la-vli_decoder.lo: common/vli_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-vli_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-vli_decoder.Tpo -c -o liblzma_la-vli_decoder.lo `test -f 'common/vli_decoder.c' || echo '$(srcdir)/'`common/vli_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-vli_decoder.Tpo $(DEPDIR)/liblzma_la-vli_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/vli_decoder.c' object='liblzma_la-vli_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-vli_decoder.lo `test -f 'common/vli_decoder.c' || echo '$(srcdir)/'`common/vli_decoder.c + +liblzma_la-check.lo: check/check.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-check.lo -MD -MP -MF $(DEPDIR)/liblzma_la-check.Tpo -c -o liblzma_la-check.lo `test -f 'check/check.c' || echo '$(srcdir)/'`check/check.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-check.Tpo $(DEPDIR)/liblzma_la-check.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/check.c' object='liblzma_la-check.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-check.lo `test -f 'check/check.c' || echo '$(srcdir)/'`check/check.c + +liblzma_la-crc32_small.lo: check/crc32_small.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-crc32_small.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc32_small.Tpo -c -o liblzma_la-crc32_small.lo `test -f 'check/crc32_small.c' || echo '$(srcdir)/'`check/crc32_small.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc32_small.Tpo $(DEPDIR)/liblzma_la-crc32_small.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/crc32_small.c' object='liblzma_la-crc32_small.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-crc32_small.lo `test -f 'check/crc32_small.c' || echo '$(srcdir)/'`check/crc32_small.c + +liblzma_la-crc32_table.lo: check/crc32_table.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-crc32_table.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc32_table.Tpo -c -o liblzma_la-crc32_table.lo `test -f 'check/crc32_table.c' || echo '$(srcdir)/'`check/crc32_table.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc32_table.Tpo $(DEPDIR)/liblzma_la-crc32_table.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/crc32_table.c' object='liblzma_la-crc32_table.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-crc32_table.lo `test -f 'check/crc32_table.c' || echo '$(srcdir)/'`check/crc32_table.c + +liblzma_la-crc32_fast.lo: check/crc32_fast.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-crc32_fast.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc32_fast.Tpo -c -o liblzma_la-crc32_fast.lo `test -f 'check/crc32_fast.c' || echo '$(srcdir)/'`check/crc32_fast.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc32_fast.Tpo $(DEPDIR)/liblzma_la-crc32_fast.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/crc32_fast.c' object='liblzma_la-crc32_fast.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-crc32_fast.lo `test -f 'check/crc32_fast.c' || echo '$(srcdir)/'`check/crc32_fast.c + +liblzma_la-crc64_small.lo: check/crc64_small.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-crc64_small.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc64_small.Tpo -c -o liblzma_la-crc64_small.lo `test -f 'check/crc64_small.c' || echo '$(srcdir)/'`check/crc64_small.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc64_small.Tpo $(DEPDIR)/liblzma_la-crc64_small.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/crc64_small.c' object='liblzma_la-crc64_small.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-crc64_small.lo `test -f 'check/crc64_small.c' || echo '$(srcdir)/'`check/crc64_small.c + +liblzma_la-crc64_table.lo: check/crc64_table.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-crc64_table.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc64_table.Tpo -c -o liblzma_la-crc64_table.lo `test -f 'check/crc64_table.c' || echo '$(srcdir)/'`check/crc64_table.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc64_table.Tpo $(DEPDIR)/liblzma_la-crc64_table.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/crc64_table.c' object='liblzma_la-crc64_table.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-crc64_table.lo `test -f 'check/crc64_table.c' || echo '$(srcdir)/'`check/crc64_table.c + +liblzma_la-crc64_fast.lo: check/crc64_fast.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-crc64_fast.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc64_fast.Tpo -c -o liblzma_la-crc64_fast.lo `test -f 'check/crc64_fast.c' || echo '$(srcdir)/'`check/crc64_fast.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc64_fast.Tpo $(DEPDIR)/liblzma_la-crc64_fast.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/crc64_fast.c' object='liblzma_la-crc64_fast.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-crc64_fast.lo `test -f 'check/crc64_fast.c' || echo '$(srcdir)/'`check/crc64_fast.c + +liblzma_la-sha256.lo: check/sha256.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-sha256.lo -MD -MP -MF $(DEPDIR)/liblzma_la-sha256.Tpo -c -o liblzma_la-sha256.lo `test -f 'check/sha256.c' || echo '$(srcdir)/'`check/sha256.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-sha256.Tpo $(DEPDIR)/liblzma_la-sha256.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/sha256.c' object='liblzma_la-sha256.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-sha256.lo `test -f 'check/sha256.c' || echo '$(srcdir)/'`check/sha256.c + +liblzma_la-lz_encoder.lo: lz/lz_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lz_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lz_encoder.Tpo -c -o liblzma_la-lz_encoder.lo `test -f 'lz/lz_encoder.c' || echo '$(srcdir)/'`lz/lz_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lz_encoder.Tpo $(DEPDIR)/liblzma_la-lz_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lz/lz_encoder.c' object='liblzma_la-lz_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lz_encoder.lo `test -f 'lz/lz_encoder.c' || echo '$(srcdir)/'`lz/lz_encoder.c + +liblzma_la-lz_encoder_mf.lo: lz/lz_encoder_mf.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lz_encoder_mf.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lz_encoder_mf.Tpo -c -o liblzma_la-lz_encoder_mf.lo `test -f 'lz/lz_encoder_mf.c' || echo '$(srcdir)/'`lz/lz_encoder_mf.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lz_encoder_mf.Tpo $(DEPDIR)/liblzma_la-lz_encoder_mf.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lz/lz_encoder_mf.c' object='liblzma_la-lz_encoder_mf.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lz_encoder_mf.lo `test -f 'lz/lz_encoder_mf.c' || echo '$(srcdir)/'`lz/lz_encoder_mf.c + +liblzma_la-lz_decoder.lo: lz/lz_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lz_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lz_decoder.Tpo -c -o liblzma_la-lz_decoder.lo `test -f 'lz/lz_decoder.c' || echo '$(srcdir)/'`lz/lz_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lz_decoder.Tpo $(DEPDIR)/liblzma_la-lz_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lz/lz_decoder.c' object='liblzma_la-lz_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lz_decoder.lo `test -f 'lz/lz_decoder.c' || echo '$(srcdir)/'`lz/lz_decoder.c + +liblzma_la-lzma_encoder.lo: lzma/lzma_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzma_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzma_encoder.Tpo -c -o liblzma_la-lzma_encoder.lo `test -f 'lzma/lzma_encoder.c' || echo '$(srcdir)/'`lzma/lzma_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lzma_encoder.Tpo $(DEPDIR)/liblzma_la-lzma_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/lzma_encoder.c' object='liblzma_la-lzma_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzma_encoder.lo `test -f 'lzma/lzma_encoder.c' || echo '$(srcdir)/'`lzma/lzma_encoder.c + +liblzma_la-lzma_encoder_presets.lo: lzma/lzma_encoder_presets.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzma_encoder_presets.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzma_encoder_presets.Tpo -c -o liblzma_la-lzma_encoder_presets.lo `test -f 'lzma/lzma_encoder_presets.c' || echo '$(srcdir)/'`lzma/lzma_encoder_presets.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lzma_encoder_presets.Tpo $(DEPDIR)/liblzma_la-lzma_encoder_presets.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/lzma_encoder_presets.c' object='liblzma_la-lzma_encoder_presets.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzma_encoder_presets.lo `test -f 'lzma/lzma_encoder_presets.c' || echo '$(srcdir)/'`lzma/lzma_encoder_presets.c + +liblzma_la-lzma_encoder_optimum_fast.lo: lzma/lzma_encoder_optimum_fast.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzma_encoder_optimum_fast.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzma_encoder_optimum_fast.Tpo -c -o liblzma_la-lzma_encoder_optimum_fast.lo `test -f 'lzma/lzma_encoder_optimum_fast.c' || echo '$(srcdir)/'`lzma/lzma_encoder_optimum_fast.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lzma_encoder_optimum_fast.Tpo $(DEPDIR)/liblzma_la-lzma_encoder_optimum_fast.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/lzma_encoder_optimum_fast.c' object='liblzma_la-lzma_encoder_optimum_fast.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzma_encoder_optimum_fast.lo `test -f 'lzma/lzma_encoder_optimum_fast.c' || echo '$(srcdir)/'`lzma/lzma_encoder_optimum_fast.c + +liblzma_la-lzma_encoder_optimum_normal.lo: lzma/lzma_encoder_optimum_normal.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzma_encoder_optimum_normal.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzma_encoder_optimum_normal.Tpo -c -o liblzma_la-lzma_encoder_optimum_normal.lo `test -f 'lzma/lzma_encoder_optimum_normal.c' || echo '$(srcdir)/'`lzma/lzma_encoder_optimum_normal.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lzma_encoder_optimum_normal.Tpo $(DEPDIR)/liblzma_la-lzma_encoder_optimum_normal.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/lzma_encoder_optimum_normal.c' object='liblzma_la-lzma_encoder_optimum_normal.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzma_encoder_optimum_normal.lo `test -f 'lzma/lzma_encoder_optimum_normal.c' || echo '$(srcdir)/'`lzma/lzma_encoder_optimum_normal.c + +liblzma_la-fastpos_table.lo: lzma/fastpos_table.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-fastpos_table.lo -MD -MP -MF $(DEPDIR)/liblzma_la-fastpos_table.Tpo -c -o liblzma_la-fastpos_table.lo `test -f 'lzma/fastpos_table.c' || echo '$(srcdir)/'`lzma/fastpos_table.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-fastpos_table.Tpo $(DEPDIR)/liblzma_la-fastpos_table.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/fastpos_table.c' object='liblzma_la-fastpos_table.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-fastpos_table.lo `test -f 'lzma/fastpos_table.c' || echo '$(srcdir)/'`lzma/fastpos_table.c + +liblzma_la-lzma_decoder.lo: lzma/lzma_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzma_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzma_decoder.Tpo -c -o liblzma_la-lzma_decoder.lo `test -f 'lzma/lzma_decoder.c' || echo '$(srcdir)/'`lzma/lzma_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lzma_decoder.Tpo $(DEPDIR)/liblzma_la-lzma_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/lzma_decoder.c' object='liblzma_la-lzma_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzma_decoder.lo `test -f 'lzma/lzma_decoder.c' || echo '$(srcdir)/'`lzma/lzma_decoder.c + +liblzma_la-lzma2_encoder.lo: lzma/lzma2_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzma2_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzma2_encoder.Tpo -c -o liblzma_la-lzma2_encoder.lo `test -f 'lzma/lzma2_encoder.c' || echo '$(srcdir)/'`lzma/lzma2_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lzma2_encoder.Tpo $(DEPDIR)/liblzma_la-lzma2_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/lzma2_encoder.c' object='liblzma_la-lzma2_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzma2_encoder.lo `test -f 'lzma/lzma2_encoder.c' || echo '$(srcdir)/'`lzma/lzma2_encoder.c + +liblzma_la-lzma2_decoder.lo: lzma/lzma2_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzma2_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzma2_decoder.Tpo -c -o liblzma_la-lzma2_decoder.lo `test -f 'lzma/lzma2_decoder.c' || echo '$(srcdir)/'`lzma/lzma2_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lzma2_decoder.Tpo $(DEPDIR)/liblzma_la-lzma2_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/lzma2_decoder.c' object='liblzma_la-lzma2_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzma2_decoder.lo `test -f 'lzma/lzma2_decoder.c' || echo '$(srcdir)/'`lzma/lzma2_decoder.c + +liblzma_la-price_table.lo: rangecoder/price_table.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-price_table.lo -MD -MP -MF $(DEPDIR)/liblzma_la-price_table.Tpo -c -o liblzma_la-price_table.lo `test -f 'rangecoder/price_table.c' || echo '$(srcdir)/'`rangecoder/price_table.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-price_table.Tpo $(DEPDIR)/liblzma_la-price_table.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rangecoder/price_table.c' object='liblzma_la-price_table.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-price_table.lo `test -f 'rangecoder/price_table.c' || echo '$(srcdir)/'`rangecoder/price_table.c + +liblzma_la-subblock_encoder.lo: subblock/subblock_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-subblock_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-subblock_encoder.Tpo -c -o liblzma_la-subblock_encoder.lo `test -f 'subblock/subblock_encoder.c' || echo '$(srcdir)/'`subblock/subblock_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-subblock_encoder.Tpo $(DEPDIR)/liblzma_la-subblock_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='subblock/subblock_encoder.c' object='liblzma_la-subblock_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-subblock_encoder.lo `test -f 'subblock/subblock_encoder.c' || echo '$(srcdir)/'`subblock/subblock_encoder.c + +liblzma_la-subblock_decoder.lo: subblock/subblock_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-subblock_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-subblock_decoder.Tpo -c -o liblzma_la-subblock_decoder.lo `test -f 'subblock/subblock_decoder.c' || echo '$(srcdir)/'`subblock/subblock_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-subblock_decoder.Tpo $(DEPDIR)/liblzma_la-subblock_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='subblock/subblock_decoder.c' object='liblzma_la-subblock_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-subblock_decoder.lo `test -f 'subblock/subblock_decoder.c' || echo '$(srcdir)/'`subblock/subblock_decoder.c + +liblzma_la-subblock_decoder_helper.lo: subblock/subblock_decoder_helper.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-subblock_decoder_helper.lo -MD -MP -MF $(DEPDIR)/liblzma_la-subblock_decoder_helper.Tpo -c -o liblzma_la-subblock_decoder_helper.lo `test -f 'subblock/subblock_decoder_helper.c' || echo '$(srcdir)/'`subblock/subblock_decoder_helper.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-subblock_decoder_helper.Tpo $(DEPDIR)/liblzma_la-subblock_decoder_helper.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='subblock/subblock_decoder_helper.c' object='liblzma_la-subblock_decoder_helper.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-subblock_decoder_helper.lo `test -f 'subblock/subblock_decoder_helper.c' || echo '$(srcdir)/'`subblock/subblock_decoder_helper.c + +liblzma_la-delta_common.lo: delta/delta_common.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-delta_common.lo -MD -MP -MF $(DEPDIR)/liblzma_la-delta_common.Tpo -c -o liblzma_la-delta_common.lo `test -f 'delta/delta_common.c' || echo '$(srcdir)/'`delta/delta_common.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-delta_common.Tpo $(DEPDIR)/liblzma_la-delta_common.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='delta/delta_common.c' object='liblzma_la-delta_common.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-delta_common.lo `test -f 'delta/delta_common.c' || echo '$(srcdir)/'`delta/delta_common.c + +liblzma_la-delta_encoder.lo: delta/delta_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-delta_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-delta_encoder.Tpo -c -o liblzma_la-delta_encoder.lo `test -f 'delta/delta_encoder.c' || echo '$(srcdir)/'`delta/delta_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-delta_encoder.Tpo $(DEPDIR)/liblzma_la-delta_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='delta/delta_encoder.c' object='liblzma_la-delta_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-delta_encoder.lo `test -f 'delta/delta_encoder.c' || echo '$(srcdir)/'`delta/delta_encoder.c + +liblzma_la-delta_decoder.lo: delta/delta_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-delta_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-delta_decoder.Tpo -c -o liblzma_la-delta_decoder.lo `test -f 'delta/delta_decoder.c' || echo '$(srcdir)/'`delta/delta_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-delta_decoder.Tpo $(DEPDIR)/liblzma_la-delta_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='delta/delta_decoder.c' object='liblzma_la-delta_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-delta_decoder.lo `test -f 'delta/delta_decoder.c' || echo '$(srcdir)/'`delta/delta_decoder.c + +liblzma_la-simple_coder.lo: simple/simple_coder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-simple_coder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-simple_coder.Tpo -c -o liblzma_la-simple_coder.lo `test -f 'simple/simple_coder.c' || echo '$(srcdir)/'`simple/simple_coder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-simple_coder.Tpo $(DEPDIR)/liblzma_la-simple_coder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/simple_coder.c' object='liblzma_la-simple_coder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-simple_coder.lo `test -f 'simple/simple_coder.c' || echo '$(srcdir)/'`simple/simple_coder.c + +liblzma_la-simple_encoder.lo: simple/simple_encoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-simple_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-simple_encoder.Tpo -c -o liblzma_la-simple_encoder.lo `test -f 'simple/simple_encoder.c' || echo '$(srcdir)/'`simple/simple_encoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-simple_encoder.Tpo $(DEPDIR)/liblzma_la-simple_encoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/simple_encoder.c' object='liblzma_la-simple_encoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-simple_encoder.lo `test -f 'simple/simple_encoder.c' || echo '$(srcdir)/'`simple/simple_encoder.c + +liblzma_la-simple_decoder.lo: simple/simple_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-simple_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-simple_decoder.Tpo -c -o liblzma_la-simple_decoder.lo `test -f 'simple/simple_decoder.c' || echo '$(srcdir)/'`simple/simple_decoder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-simple_decoder.Tpo $(DEPDIR)/liblzma_la-simple_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/simple_decoder.c' object='liblzma_la-simple_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-simple_decoder.lo `test -f 'simple/simple_decoder.c' || echo '$(srcdir)/'`simple/simple_decoder.c + +liblzma_la-x86.lo: simple/x86.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-x86.lo -MD -MP -MF $(DEPDIR)/liblzma_la-x86.Tpo -c -o liblzma_la-x86.lo `test -f 'simple/x86.c' || echo '$(srcdir)/'`simple/x86.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-x86.Tpo $(DEPDIR)/liblzma_la-x86.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/x86.c' object='liblzma_la-x86.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-x86.lo `test -f 'simple/x86.c' || echo '$(srcdir)/'`simple/x86.c + +liblzma_la-powerpc.lo: simple/powerpc.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-powerpc.lo -MD -MP -MF $(DEPDIR)/liblzma_la-powerpc.Tpo -c -o liblzma_la-powerpc.lo `test -f 'simple/powerpc.c' || echo '$(srcdir)/'`simple/powerpc.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-powerpc.Tpo $(DEPDIR)/liblzma_la-powerpc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/powerpc.c' object='liblzma_la-powerpc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-powerpc.lo `test -f 'simple/powerpc.c' || echo '$(srcdir)/'`simple/powerpc.c + +liblzma_la-ia64.lo: simple/ia64.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-ia64.lo -MD -MP -MF $(DEPDIR)/liblzma_la-ia64.Tpo -c -o liblzma_la-ia64.lo `test -f 'simple/ia64.c' || echo '$(srcdir)/'`simple/ia64.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-ia64.Tpo $(DEPDIR)/liblzma_la-ia64.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/ia64.c' object='liblzma_la-ia64.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-ia64.lo `test -f 'simple/ia64.c' || echo '$(srcdir)/'`simple/ia64.c + +liblzma_la-arm.lo: simple/arm.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-arm.lo -MD -MP -MF $(DEPDIR)/liblzma_la-arm.Tpo -c -o liblzma_la-arm.lo `test -f 'simple/arm.c' || echo '$(srcdir)/'`simple/arm.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-arm.Tpo $(DEPDIR)/liblzma_la-arm.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/arm.c' object='liblzma_la-arm.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-arm.lo `test -f 'simple/arm.c' || echo '$(srcdir)/'`simple/arm.c + +liblzma_la-armthumb.lo: simple/armthumb.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-armthumb.lo -MD -MP -MF $(DEPDIR)/liblzma_la-armthumb.Tpo -c -o liblzma_la-armthumb.lo `test -f 'simple/armthumb.c' || echo '$(srcdir)/'`simple/armthumb.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-armthumb.Tpo $(DEPDIR)/liblzma_la-armthumb.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/armthumb.c' object='liblzma_la-armthumb.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-armthumb.lo `test -f 'simple/armthumb.c' || echo '$(srcdir)/'`simple/armthumb.c + +liblzma_la-sparc.lo: simple/sparc.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-sparc.lo -MD -MP -MF $(DEPDIR)/liblzma_la-sparc.Tpo -c -o liblzma_la-sparc.lo `test -f 'simple/sparc.c' || echo '$(srcdir)/'`simple/sparc.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-sparc.Tpo $(DEPDIR)/liblzma_la-sparc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/sparc.c' object='liblzma_la-sparc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-sparc.lo `test -f 'simple/sparc.c' || echo '$(srcdir)/'`simple/sparc.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-docDATA: $(doc_DATA) + @$(NORMAL_INSTALL) + test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)" + @list='$(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-docDATA: + @$(NORMAL_UNINSTALL) + @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(docdir)" && rm -f $$files +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || 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)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + 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; }; }'`; \ + 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: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + 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; }; }'`; \ + 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 + +distdir: $(DISTFILES) + @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 + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +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-recursive + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-docDATA install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-docDATA uninstall-libLTLIBRARIES \ + uninstall-pkgconfigDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-docDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am install-pkgconfigDATA \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am uninstall-docDATA \ + uninstall-libLTLIBRARIES uninstall-pkgconfigDATA + + +# Windows resource compiler support. libtool knows what to do with .rc +# files, but Automake (<= 1.11 at least) doesn't know. +# +# We want the resource file only in shared liblzma. To avoid linking it into +# static liblzma, we overwrite the static object file with an object file +# compiled from empty input. Note that GNU-specific features are OK here, +# because on Windows we are compiled with the GNU toolchain. +.rc.lo: + $(LIBTOOL) --mode=compile $(RC) $(DEFS) $(DEFAULT_INCLUDES) \ + $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) \ + -i $< -o $@ + echo > empty.c + $(COMPILE) -c empty.c -o $(*D)/$(*F).o + +# Remove ordinals from the generated .def file. People must link by name, +# not by ordinal, because no one is going to track the ordinal numbers. +liblzma.def: liblzma.la liblzma.def.in + sed 's/ \+@ *[0-9]\+//' liblzma.def.in > liblzma.def + +# Creating liblzma.def.in is a side effect of linking the library. +liblzma.def.in: liblzma.la + +# 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/Build/source/extra/xz-4.999.9beta/src/liblzma/api/Makefile.am b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/Makefile.am new file mode 100644 index 00000000000..0992d221044 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/Makefile.am @@ -0,0 +1,23 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +nobase_include_HEADERS = \ + lzma.h \ + lzma/base.h \ + lzma/bcj.h \ + lzma/block.h \ + lzma/check.h \ + lzma/container.h \ + lzma/delta.h \ + lzma/filter.h \ + lzma/index.h \ + lzma/index_hash.h \ + lzma/lzma.h \ + lzma/stream_flags.h \ + lzma/subblock.h \ + lzma/version.h \ + lzma/vli.h diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/Makefile.in b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/Makefile.in new file mode 100644 index 00000000000..f4f9a3e7302 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/Makefile.in @@ -0,0 +1,512 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ +subdir = src/liblzma/api +DIST_COMMON = $(nobase_include_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ + $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +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__installdirs = "$(DESTDIR)$(includedir)" +HEADERS = $(nobase_include_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ +DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETOPT_H = @GETOPT_H@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSIX_SHELL = @POSIX_SHELL@ +POSUB = @POSUB@ +PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ +STATIC_LDFLAGS = @STATIC_LDFLAGS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +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@ +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@ +lt_ECHO = @lt_ECHO@ +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@ +xz = @xz@ +nobase_include_HEADERS = \ + lzma.h \ + lzma/base.h \ + lzma/bcj.h \ + lzma/block.h \ + lzma/check.h \ + lzma/container.h \ + lzma/delta.h \ + lzma/filter.h \ + lzma/index.h \ + lzma/index_hash.h \ + lzma/lzma.h \ + lzma/stream_flags.h \ + lzma/subblock.h \ + lzma/version.h \ + lzma/vli.h + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/liblzma/api/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/liblzma/api/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-nobase_includeHEADERS: $(nobase_include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" + @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \ + $(am__nobase_list) | while read dir files; do \ + xfiles=; for file in $$files; do \ + if test -f "$$file"; then xfiles="$$xfiles $$file"; \ + else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ + test -z "$$xfiles" || { \ + test "x$$dir" = x. || { \ + echo "$(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)/$$dir"; }; \ + echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'"; \ + $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(includedir)/$$dir" || exit $$?; }; \ + done + +uninstall-nobase_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \ + $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(includedir)" && rm -f $$files + +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) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + 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; }; }'`; \ + 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) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + 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; }; }'`; \ + 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 + +distdir: $(DISTFILES) + @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 +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-nobase_includeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +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 Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-nobase_includeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool ctags distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-nobase_includeHEADERS \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-nobase_includeHEADERS + + +# 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/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma.h new file mode 100644 index 00000000000..44de60a16f5 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma.h @@ -0,0 +1,321 @@ +/** + * \file api/lzma.h + * \brief The public API of liblzma data compression library + * + * liblzma is a public domain general-purpose data compression library with + * a zlib-like API. The native file format is .xz, but also the old .lzma + * format and raw (no headers) streams are supported. Multiple compression + * algorithms (filters) are supported. Currently LZMA2 is the primary filter. + * + * liblzma is part of XZ Utils . XZ Utils includes + * a gzip-like command line tool named xz and some other tools. XZ Utils + * is developed and maintained by Lasse Collin. + * + * Major parts of liblzma are based on Igor Pavlov's public domain LZMA SDK + * . + * + * The SHA-256 implementation is based on the public domain code found from + * 7-Zip , which has a modified version of the public + * domain SHA-256 code found from Crypto++ . + * The SHA-256 code in Crypto++ was written by Kevin Springle and Wei Dai. + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + */ + +#ifndef LZMA_H +#define LZMA_H + +/***************************** + * Required standard headers * + *****************************/ + +/* + * liblzma API headers need some standard types and macros. To allow + * including lzma.h without requiring the application to include other + * headers first, lzma.h includes the required standard headers unless + * they already seem to be included already or if LZMA_MANUAL_HEADERS + * has been defined. + * + * Here's what types and macros are needed and from which headers: + * - stddef.h: size_t, NULL + * - stdint.h: uint8_t, uint32_t, uint64_t, UINT32_C(n), uint64_C(n), + * UINT32_MAX, UINT64_MAX + * + * However, inttypes.h is a little more portable than stdint.h, although + * inttypes.h declares some unneeded things compared to plain stdint.h. + * + * The hacks below aren't perfect, specifically they assume that inttypes.h + * exists and that it typedefs at least uint8_t, uint32_t, and uint64_t, + * and that, in case of incomplete inttypes.h, unsigned int is 32-bit. + * If the application already takes care of setting up all the types and + * macros properly (for example by using gnulib's stdint.h or inttypes.h), + * we try to detect that the macros are already defined and don't include + * inttypes.h here again. However, you may define LZMA_MANUAL_HEADERS to + * force this file to never include any system headers. + * + * Some could argue that liblzma API should provide all the required types, + * for example lzma_uint64, LZMA_UINT64_C(n), and LZMA_UINT64_MAX. This was + * seen unnecessary mess, since most systems already provide all the necessary + * types and macros in the standard headers. + * + * Note that liblzma API still has lzma_bool, because using stdbool.h would + * break C89 and C++ programs on many systems. sizeof(bool) in C99 isn't + * necessarily the same as sizeof(bool) in C++. + */ + +#ifndef LZMA_MANUAL_HEADERS + /* + * I suppose this works portably also in C++. Note that in C++, + * we need to get size_t into the global namespace. + */ +# include + + /* + * Skip inttypes.h if we already have all the required macros. If we + * have the macros, we assume that we have the matching typedefs too. + */ +# if !defined(UINT32_C) || !defined(UINT64_C) \ + || !defined(UINT32_MAX) || !defined(UINT64_MAX) + /* + * MSVC has no C99 support, and thus it cannot be used to + * compile liblzma. The liblzma API has to still be usable + * from MSVC, so we need to define the required standard + * integer types here. + */ +# if defined(_WIN32) && defined(_MSC_VER) + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + typedef unsigned __int64 uint64_t; +# else + /* Use the standard inttypes.h. */ +# ifdef __cplusplus + /* + * C99 sections 7.18.2 and 7.18.4 specify that + * in C++ implementations define the limit + * and constant macros only if specifically + * requested. Note that if you want the + * format macros (PRIu64 etc.) too, you need + * to define __STDC_FORMAT_MACROS before + * including lzma.h, since re-including + * inttypes.h with __STDC_FORMAT_MACROS + * defined doesn't necessarily work. + */ +# ifndef __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS 1 +# endif +# ifndef __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS 1 +# endif +# endif + +# include +# endif + + /* + * Some old systems have only the typedefs in inttypes.h, and + * lack all the macros. For those systems, we need a few more + * hacks. We assume that unsigned int is 32-bit and unsigned + * long is either 32-bit or 64-bit. If these hacks aren't + * enough, the application has to setup the types manually + * before including lzma.h. + */ +# ifndef UINT32_C +# if defined(_WIN32) && defined(_MSC_VER) +# define UINT32_C(n) n ## UI32 +# else +# define UINT32_C(n) n ## U +# endif +# endif + +# ifndef UINT64_C +# if defined(_WIN32) && defined(_MSC_VER) +# define UINT64_C(n) n ## UI64 +# else + /* Get ULONG_MAX. */ +# include +# if ULONG_MAX == 4294967295UL +# define UINT64_C(n) n ## ULL +# else +# define UINT64_C(n) n ## UL +# endif +# endif +# endif + +# ifndef UINT32_MAX +# define UINT32_MAX (UINT32_C(4294967295)) +# endif + +# ifndef UINT64_MAX +# define UINT64_MAX (UINT64_C(18446744073709551615)) +# endif +# endif +#endif /* ifdef LZMA_MANUAL_HEADERS */ + + +/****************** + * LZMA_API macro * + ******************/ + +/* + * Some systems require (or at least recommend) that the functions and + * function pointers are declared specially in the headers. LZMA_API_IMPORT + * is for importing symbols and LZMA_API_CALL is to specify calling + * convention. + * + * By default it is assumed that the application will link dynamically + * against liblzma. #define LZMA_API_STATIC in your application if you + * want to link against static liblzma. If you don't care about portability + * to operating systems like Windows, or at least don't care about linking + * against static liblzma on them, don't worry about LZMA_API_STATIC. That + * is, most developers will never need to use LZMA_API_STATIC. + * + * Cygwin is a special case on Windows. We rely on GCC doing the right thing + * and thus don't use dllimport and don't specify the calling convention. + */ +#ifndef LZMA_API_IMPORT +# if !defined(LZMA_API_STATIC) && defined(_WIN32) && !defined(__CYGWIN__) +# define LZMA_API_IMPORT __declspec(dllimport) +# else +# define LZMA_API_IMPORT +# endif +#endif + +#ifndef LZMA_API_CALL +# if defined(_WIN32) && !defined(__CYGWIN__) +# define LZMA_API_CALL __cdecl +# else +# define LZMA_API_CALL +# endif +#endif + +#ifndef LZMA_API +# define LZMA_API(type) LZMA_API_IMPORT type LZMA_API_CALL +#endif + + +/*********** + * nothrow * + ***********/ + +/* + * None of the functions in liblzma may throw an exception. Even + * the functions that use callback functions won't throw exceptions, + * because liblzma would break if a callback function threw an exception. + */ +#ifndef lzma_nothrow +# if defined(__cplusplus) +# define lzma_nothrow throw() +# elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# define lzma_nothrow __attribute__((__nothrow__)) +# else +# define lzma_nothrow +# endif +#endif + + +/******************** + * GNU C extensions * + ********************/ + +/* + * GNU C extensions are used conditionally in the public API. It doesn't + * break anything if these are sometimes enabled and sometimes not, only + * affects warnings and optimizations. + */ +#if __GNUC__ >= 3 +# ifndef lzma_attribute +# define lzma_attribute(attr) __attribute__(attr) +# endif + +# ifndef lzma_restrict +# define lzma_restrict __restrict__ +# endif + + /* warn_unused_result was added in GCC 3.4. */ +# ifndef lzma_attr_warn_unused_result +# if __GNUC__ == 3 && __GNUC_MINOR__ < 4 +# define lzma_attr_warn_unused_result +# endif +# endif + +#else +# ifndef lzma_attribute +# define lzma_attribute(attr) +# endif + +# ifndef lzma_restrict +# if __STDC_VERSION__ >= 199901L +# define lzma_restrict restrict +# else +# define lzma_restrict +# endif +# endif +#endif + + +#ifndef lzma_attr_pure +# define lzma_attr_pure lzma_attribute((__pure__)) +#endif + +#ifndef lzma_attr_const +# define lzma_attr_const lzma_attribute((__const__)) +#endif + +#ifndef lzma_attr_warn_unused_result +# define lzma_attr_warn_unused_result \ + lzma_attribute((__warn_unused_result__)) +#endif + + +/************** + * Subheaders * + **************/ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Subheaders check that this is defined. It is to prevent including + * them directly from applications. + */ +#define LZMA_H_INTERNAL 1 + +/* Basic features */ +#include "lzma/version.h" +#include "lzma/base.h" +#include "lzma/vli.h" +#include "lzma/check.h" + +/* Filters */ +#include "lzma/filter.h" +#include "lzma/subblock.h" +#include "lzma/bcj.h" +#include "lzma/delta.h" +#include "lzma/lzma.h" + +/* Container formats */ +#include "lzma/container.h" + +/* Advanced features */ +#include "lzma/stream_flags.h" +#include "lzma/block.h" +#include "lzma/index.h" +#include "lzma/index_hash.h" + +/* + * All subheaders included. Undefine LZMA_H_INTERNAL to prevent applications + * re-including the subheaders. + */ +#undef LZMA_H_INTERNAL + +#ifdef __cplusplus +} +#endif + +#endif /* ifndef LZMA_H */ diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/base.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/base.h new file mode 100644 index 00000000000..01555068659 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/base.h @@ -0,0 +1,596 @@ +/** + * \file lzma/base.h + * \brief Data types and functions used in many places in liblzma API + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + + +/** + * \brief Boolean + * + * This is here because C89 doesn't have stdbool.h. To set a value for + * variables having type lzma_bool, you can use + * - C99's `true' and `false' from stdbool.h; + * - C++'s internal `true' and `false'; or + * - integers one (true) and zero (false). + */ +typedef unsigned char lzma_bool; + + +/** + * \brief Type of reserved enumeration variable in structures + * + * To avoid breaking library ABI when new features are added, several + * structures contain extra variables that may be used in future. Since + * sizeof(enum) can be different than sizeof(int), and sizeof(enum) may + * even vary depending on the range of enumeration constants, we specify + * a separate type to be used for reserved enumeration variables. All + * enumeration constants in liblzma API will be non-negative and less + * than 128, which should guarantee that the ABI won't break even when + * new constants are added to existing enumerations. + */ +typedef enum { + LZMA_RESERVED_ENUM = 0 +} lzma_reserved_enum; + + +/** + * \brief Return values used by several functions in liblzma + * + * Check the descriptions of specific functions to find out which return + * values they can return. With some functions the return values may have + * more specific meanings than described here; those differences are + * described per-function basis. + */ +typedef enum { + LZMA_OK = 0, + /**< + * \brief Operation completed successfully + */ + + LZMA_STREAM_END = 1, + /**< + * \brief End of stream was reached + * + * In encoder, LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, or + * LZMA_FINISH was finished. In decoder, this indicates + * that all the data was successfully decoded. + * + * In all cases, when LZMA_STREAM_END is returned, the last + * output bytes should be picked from strm->next_out. + */ + + LZMA_NO_CHECK = 2, + /**< + * \brief Input stream has no integrity check + * + * This return value can be returned only if the + * LZMA_TELL_NO_CHECK flag was used when initializing + * the decoder. LZMA_NO_CHECK is just a warning, and + * the decoding can be continued normally. + * + * It is possible to call lzma_get_check() immediatelly after + * lzma_code has returned LZMA_NO_CHECK. The result will + * naturally be LZMA_CHECK_NONE, but the possibility to call + * lzma_get_check() may be convenient in some applications. + */ + + LZMA_UNSUPPORTED_CHECK = 3, + /**< + * \brief Cannot calculate the integrity check + * + * The usage of this return value is different in encoders + * and decoders. + * + * Encoders can return this value only from the initialization + * function. If initialization fails with this value, the + * encoding cannot be done, because there's no way to produce + * output with the correct integrity check. + * + * Decoders can return this value only from lzma_code() and + * only if the LZMA_TELL_UNSUPPORTED_CHECK flag was used when + * initializing the decoder. The decoding can still be + * continued normally even if the check type is unsupported, + * but naturally the check will not be validated, and possible + * errors may go undetected. + * + * With decoder, it is possible to call lzma_get_check() + * immediatelly after lzma_code() has returned + * LZMA_UNSUPPORTED_CHECK. This way it is possible to find + * out what the unsupported Check ID was. + */ + + LZMA_GET_CHECK = 4, + /**< + * \brief Integrity check type is now available + * + * This value can be returned only by the lzma_code() function + * and only if the decoder was initialized with the + * LZMA_TELL_ANY_CHECK flag. LZMA_GET_CHECK tells the + * application that it may now call lzma_get_check() to find + * out the Check ID. This can be used, for example, to + * implement a decoder that accepts only files that have + * strong enough integrity check. + */ + + LZMA_MEM_ERROR = 5, + /**< + * \brief Cannot allocate memory + * + * Memory allocation failed, or the size of the allocation + * would be greater than SIZE_MAX. + * + * Due to internal implementation reasons, the coding cannot + * be continued even if more memory were made available after + * LZMA_MEM_ERROR. + */ + + LZMA_MEMLIMIT_ERROR = 6, + /** + * \brief Memory usage limit was reached + * + * Decoder would need more memory than allowed by the + * specified memory usage limit. To continue decoding, + * the memory usage limit has to be increased with + * lzma_memlimit_set(). + */ + + LZMA_FORMAT_ERROR = 7, + /**< + * \brief File format not recognized + * + * The decoder did not recognize the input as supported file + * format. This error can occur, for example, when trying to + * decode .lzma format file with lzma_stream_decoder, + * because lzma_stream_decoder accepts only the .xz format. + */ + + LZMA_OPTIONS_ERROR = 8, + /**< + * \brief Invalid or unsupported options + * + * Invalid or unsupported options, for example + * - unsupported filter(s) or filter options; or + * - reserved bits set in headers (decoder only). + * + * Rebuilding liblzma with more features enabled, or + * upgrading to a newer version of liblzma may help. + */ + + LZMA_DATA_ERROR = 9, + /**< + * \brief Data is corrupt + * + * The usage of this return value is different in encoders + * and decoders. In both encoder and decoder, the coding + * cannot continue after this error. + * + * Encoders return this if size limits of the target file + * format would be exceeded. These limits are huge, thus + * getting this error from an encoder is mostly theoretical. + * For example, the maximum compressed and uncompressed + * size of a .xz Stream is roughly 8 EiB (2^63 bytes). + * + * Decoders return this error if the input data is corrupt. + * This can mean, for example, invalid CRC32 in headers + * or invalid check of uncompressed data. + */ + + LZMA_BUF_ERROR = 10, + /**< + * \brief No progress is possible + * + * This error code is returned when the coder cannot consume + * any new input and produce any new output. The most common + * reason for this error is that the input stream being + * decoded is truncated or corrupt. + * + * This error is not fatal. Coding can be continued normally + * by providing more input and/or more output space, if + * possible. + * + * Typically the first call to lzma_code() that can do no + * progress returns LZMA_OK instead of LZMA_BUF_ERROR. Only + * the second consecutive call doing no progress will return + * LZMA_BUF_ERROR. This is intentional. + * + * With zlib, Z_BUF_ERROR may be returned even if the + * application is doing nothing wrong, so apps will need + * to handle Z_BUF_ERROR specially. The above hack + * guarantees that liblzma never returns LZMA_BUF_ERROR + * to properly written applications unless the input file + * is truncated or corrupt. This should simplify the + * applications a little. + */ + + LZMA_PROG_ERROR = 11, + /**< + * \brief Programming error + * + * This indicates that the arguments given to the function are + * invalid or the internal state of the decoder is corrupt. + * - Function arguments are invalid or the structures + * pointed by the argument pointers are invalid + * e.g. if strm->next_out has been set to NULL and + * strm->avail_out > 0 when calling lzma_code(). + * - lzma_* functions have been called in wrong order + * e.g. lzma_code() was called right after lzma_end(). + * - If errors occur randomly, the reason might be flaky + * hardware. + * + * If you think that your code is correct, this error code + * can be a sign of a bug in liblzma. See the documentation + * how to report bugs. + */ +} lzma_ret; + + +/** + * \brief The `action' argument for lzma_code() + * + * After the first use of LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, or LZMA_FINISH, + * the same `action' must is used until lzma_code() returns LZMA_STREAM_END. + * Also, the amount of input (that is, strm->avail_in) must not be modified + * by the application until lzma_code() returns LZMA_STREAM_END. Changing the + * `action' or modifying the amount of input will make lzma_code() return + * LZMA_PROG_ERROR. + */ +typedef enum { + LZMA_RUN = 0, + /**< + * \brief Continue coding + * + * Encoder: Encode as much input as possible. Some internal + * buffering will probably be done (depends on the filter + * chain in use), which causes latency: the input used won't + * usually be decodeable from the output of the same + * lzma_code() call. + * + * Decoder: Decode as much input as possible and produce as + * much output as possible. + */ + + LZMA_SYNC_FLUSH = 1, + /**< + * \brief Make all the input available at output + * + * Normally the encoder introduces some latency. + * LZMA_SYNC_FLUSH forces all the buffered data to be + * available at output without resetting the internal + * state of the encoder. This way it is possible to use + * compressed stream for example for communication over + * network. + * + * Only some filters support LZMA_SYNC_FLUSH. Trying to use + * LZMA_SYNC_FLUSH with filters that don't support it will + * make lzma_code() return LZMA_OPTIONS_ERROR. For example, + * LZMA1 doesn't support LZMA_SYNC_FLUSH but LZMA2 does. + * + * Using LZMA_SYNC_FLUSH very often can dramatically reduce + * the compression ratio. With some filters (for example, + * LZMA2), finetuning the compression options may help + * mitigate this problem significantly. + * + * Decoders don't support LZMA_SYNC_FLUSH. + */ + + LZMA_FULL_FLUSH = 2, + /**< + * \brief Make all the input available at output + * + * Finish encoding of the current Block. All the input + * data going to the current Block must have been given + * to the encoder (the last bytes can still be pending in + * next_in). Call lzma_code() with LZMA_FULL_FLUSH until + * it returns LZMA_STREAM_END. Then continue normally with + * LZMA_RUN or finish the Stream with LZMA_FINISH. + * + * This action is currently supported only by Stream encoder + * and easy encoder (which uses Stream encoder). If there is + * no unfinished Block, no empty Block is created. + */ + + LZMA_FINISH = 3 + /**< + * \brief Finish the coding operation + * + * Finishes the coding operation. All the input data must + * have been given to the encoder (the last bytes can still + * be pending in next_in). Call lzma_code() with LZMA_FINISH + * until it returns LZMA_STREAM_END. Once LZMA_FINISH has + * been used, the amount of input must no longer be changed + * by the application. + * + * When decoding, using LZMA_FINISH is optional unless the + * LZMA_CONCATENATED flag was used when the decoder was + * initialized. When LZMA_CONCATENATED was not used, the only + * effect of LZMA_FINISH is that the amount of input must not + * be changed just like in the encoder. + */ +} lzma_action; + + +/** + * \brief Custom functions for memory handling + * + * A pointer to lzma_allocator may be passed via lzma_stream structure + * to liblzma, and some advanced functions take a pointer to lzma_allocator + * as a separate function argument. The library will use the functions + * specified in lzma_allocator for memory handling instead of the default + * malloc() and free(). C++ users should note that the custom memory + * handling functions must not throw exceptions. + * + * liblzma doesn't make an internal copy of lzma_allocator. Thus, it is + * OK to change these function pointers in the middle of the coding + * process, but obviously it must be done carefully to make sure that the + * replacement `free' can deallocate memory allocated by the earlier + * `alloc' function(s). + */ +typedef struct { + /** + * \brief Pointer to a custom memory allocation function + * + * If you don't want a custom allocator, but still want + * custom free(), set this to NULL and liblzma will use + * the standard malloc(). + * + * \param opaque lzma_allocator.opaque (see below) + * \param nmemb Number of elements like in calloc(). liblzma + * will always set nmemb to 1, so it is safe to + * ignore nmemb in a custom allocator if you like. + * The nmemb argument exists only for + * compatibility with zlib and libbzip2. + * \param size Size of an element in bytes. + * liblzma never sets this to zero. + * + * \return Pointer to the beginning of a memory block of + * `size' bytes, or NULL if allocation fails + * for some reason. When allocation fails, functions + * of liblzma return LZMA_MEM_ERROR. + * + * The allocator should not waste time zeroing the allocated buffers. + * This is not only about speed, but also memory usage, since the + * operating system kernel doesn't necessarily allocate the requested + * memory in physical memory until it is actually used. With small + * input files, liblzma may actually need only a fraction of the + * memory that it requested for allocation. + * + * \note LZMA_MEM_ERROR is also used when the size of the + * allocation would be greater than SIZE_MAX. Thus, + * don't assume that the custom allocator must have + * returned NULL if some function from liblzma + * returns LZMA_MEM_ERROR. + */ + void *(LZMA_API_CALL *alloc)(void *opaque, size_t nmemb, size_t size); + + /** + * \brief Pointer to a custom memory freeing function + * + * If you don't want a custom freeing function, but still + * want a custom allocator, set this to NULL and liblzma + * will use the standard free(). + * + * \param opaque lzma_allocator.opaque (see below) + * \param ptr Pointer returned by lzma_allocator.alloc(), + * or when it is set to NULL, a pointer returned + * by the standard malloc(). + */ + void (LZMA_API_CALL *free)(void *opaque, void *ptr); + + /** + * \brief Pointer passed to .alloc() and .free() + * + * opaque is passed as the first argument to lzma_allocator.alloc() + * and lzma_allocator.free(). This intended to ease implementing + * custom memory allocation functions for use with liblzma. + * + * If you don't need this, you should set this to NULL. + */ + void *opaque; + +} lzma_allocator; + + +/** + * \brief Internal data structure + * + * The contents of this structure is not visible outside the library. + */ +typedef struct lzma_internal_s lzma_internal; + + +/** + * \brief Passing data to and from liblzma + * + * The lzma_stream structure is used for + * - passing pointers to input and output buffers to liblzma; + * - defining custom memory hander functions; and + * - holding a pointer to coder-specific internal data structures. + * + * Typical usage: + * + * - After allocating lzma_stream (on stack or with malloc()), it must be + * initialized to LZMA_STREAM_INIT (see LZMA_STREAM_INIT for details). + * + * - Initialize a coder to the lzma_stream, for example by using + * lzma_easy_encoder() or lzma_auto_decoder(). Some notes: + * - In contrast to zlib, strm->next_in and strm->next_out are + * ignored by all initialization functions, thus it is safe + * to not initialize them yet. + * - The initialization functions always set strm->total_in and + * strm->total_out to zero. + * - If the initialization function fails, no memory is left allocated + * that would require freeing with lzma_end() even if some memory was + * associated with the lzma_stream structure when the initialization + * function was called. + * + * - Use lzma_code() to do the actual work. + * + * - Once the coding has been finished, the existing lzma_stream can be + * reused. It is OK to reuse lzma_stream with different initialization + * function without calling lzma_end() first. Old allocations are + * automatically freed. + * + * - Finally, use lzma_end() to free the allocated memory. lzma_end() never + * frees the lzma_stream structure itself. + * + * Application may modify the values of total_in and total_out as it wants. + * They are updated by liblzma to match the amount of data read and + * written, but aren't used for anything else. + */ +typedef struct { + const uint8_t *next_in; /**< Pointer to the next input byte. */ + size_t avail_in; /**< Number of available input bytes in next_in. */ + uint64_t total_in; /**< Total number of bytes read by liblzma. */ + + uint8_t *next_out; /**< Pointer to the next output position. */ + size_t avail_out; /**< Amount of free space in next_out. */ + uint64_t total_out; /**< Total number of bytes written by liblzma. */ + + /** + * \brief Custom memory allocation functions + * + * In most cases this is NULL which makes liblzma use + * the standard malloc() and free(). + */ + lzma_allocator *allocator; + + /** Internal state is not visible to applications. */ + lzma_internal *internal; + + /* + * Reserved space to allow possible future extensions without + * breaking the ABI. Excluding the initialization of this structure, + * you should not touch these, because the names of these variables + * may change. + */ + void *reserved_ptr1; + void *reserved_ptr2; + uint64_t reserved_int1; + uint64_t reserved_int2; + lzma_reserved_enum reserved_enum1; + lzma_reserved_enum reserved_enum2; + +} lzma_stream; + + +/** + * \brief Initialization for lzma_stream + * + * When you declare an instance of lzma_stream, you can immediatelly + * initialize it so that initialization functions know that no memory + * has been allocated yet: + * + * lzma_stream strm = LZMA_STREAM_INIT; + * + * If you need to initialize a dynamically allocated lzma_stream, you can use + * memset(strm_pointer, 0, sizeof(lzma_stream)). Strictly speaking, this + * violates the C standard since NULL may have different internal + * representation than zero, but it should be portable enough in practice. + * Anyway, for maximum portability, you can use something like this: + * + * lzma_stream tmp = LZMA_STREAM_INIT; + * *strm = tmp; + */ +#define LZMA_STREAM_INIT \ + { NULL, 0, 0, NULL, 0, 0, NULL, NULL, \ + NULL, NULL, 0, 0, LZMA_RESERVED_ENUM, LZMA_RESERVED_ENUM } + + +/** + * \brief Encode or decode data + * + * Once the lzma_stream has been successfully initialized (e.g. with + * lzma_stream_encoder()), the actual encoding or decoding is done + * using this function. The application has to update strm->next_in, + * strm->avail_in, strm->next_out, and strm->avail_out to pass input + * to and get output from liblzma. + * + * See the description of the coder-specific initialization function to find + * out what `action' values are supported by the coder. + */ +extern LZMA_API(lzma_ret) lzma_code(lzma_stream *strm, lzma_action action) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Free memory allocated for the coder data structures + * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * + * After lzma_end(strm), strm->internal is guaranteed to be NULL. No other + * members of the lzma_stream structure are touched. + * + * \note zlib indicates an error if application end()s unfinished + * stream structure. liblzma doesn't do this, and assumes that + * application knows what it is doing. + */ +extern LZMA_API(void) lzma_end(lzma_stream *strm) lzma_nothrow; + + +/** + * \brief Get the memory usage of decoder filter chain + * + * This function is currently supported only when *strm has been initialized + * with a function that takes a memlimit argument. With other functions, you + * should use e.g. lzma_raw_encoder_memusage() or lzma_raw_decoder_memusage() + * to estimate the memory requirements. + * + * This function is useful e.g. after LZMA_MEMLIMIT_ERROR to find out how big + * the memory usage limit should have been to decode the input. Note that + * this may give misleading information if decoding .xz Streams that have + * multiple Blocks, because each Block can have different memory requirements. + * + * \return Rough estimate of how much memory is currently allocated + * for the filter decoders. If no filter chain is currently + * allocated, some non-zero value is still returned, which is + * less than or equal to what any filter chain would indicate + * as its memory requirement. + * + * If this function isn't supported by *strm or some other error + * occurs, zero is returned. + */ +extern LZMA_API(uint64_t) lzma_memusage(const lzma_stream *strm) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Get the current memory usage limit + * + * This function is supported only when *strm has been initialized with + * a function that takes a memlimit argument. + * + * \return On success, the current memory usage limit is returned + * (always non-zero). On error, zero is returned. + */ +extern LZMA_API(uint64_t) lzma_memlimit_get(const lzma_stream *strm) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Set the memory usage limit + * + * This function is supported only when *strm has been initialized with + * a function that takes a memlimit argument. + * + * \return - LZMA_OK: New memory usage limit successfully set. + * - LZMA_MEMLIMIT_ERROR: The new limit is too small. + * The limit was not changed. + * - LZMA_PROG_ERROR: Invalid arguments, e.g. *strm doesn't + * support memory usage limit or memlimit was zero. + */ +extern LZMA_API(lzma_ret) lzma_memlimit_set( + lzma_stream *strm, uint64_t memlimit) lzma_nothrow; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/bcj.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/bcj.h new file mode 100644 index 00000000000..274bf6c735c --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/bcj.h @@ -0,0 +1,90 @@ +/** + * \file lzma/bcj.h + * \brief Branch/Call/Jump conversion filters + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + + +/* Filter IDs for lzma_filter.id */ + +#define LZMA_FILTER_X86 LZMA_VLI_C(0x04) + /**< + * Filter for x86 binaries + */ + +#define LZMA_FILTER_POWERPC LZMA_VLI_C(0x05) + /**< + * Filter for Big endian PowerPC binaries + */ + +#define LZMA_FILTER_IA64 LZMA_VLI_C(0x06) + /**< + * Filter for IA64 (Itanium) binaries. + */ + +#define LZMA_FILTER_ARM LZMA_VLI_C(0x07) + /**< + * Filter for ARM binaries. + */ + +#define LZMA_FILTER_ARMTHUMB LZMA_VLI_C(0x08) + /**< + * Filter for ARMThumb binaries. + */ + +#define LZMA_FILTER_SPARC LZMA_VLI_C(0x09) + /**< + * Filter for SPARC binaries. + */ + + +/** + * \brief Options for BCJ filters + * + * The BCJ filters never change the size of the data. Specifying options + * for them is optional: if pointer to options is NULL, default value is + * used. You probably never need to specify options to BCJ filters, so just + * set the options pointer to NULL and be happy. + * + * If options with non-default values have been specified when encoding, + * the same options must also be specified when decoding. + * + * \note At the moment, none of the BCJ filters support + * LZMA_SYNC_FLUSH. If LZMA_SYNC_FLUSH is specified, + * LZMA_OPTIONS_ERROR will be returned. If there is need, + * partial support for LZMA_SYNC_FLUSH can be added in future. + * Partial means that flushing would be possible only at + * offsets that are multiple of 2, 4, or 16 depending on + * the filter, except x86 which cannot be made to support + * LZMA_SYNC_FLUSH predictably. + */ +typedef struct { + /** + * \brief Start offset for conversions + * + * This setting is useful only when the same filter is used + * _separately_ for multiple sections of the same executable file, + * and the sections contain cross-section branch/call/jump + * instructions. In that case it is benefical to set the start + * offset of the non-first sections so that the relative addresses + * of the cross-section branch/call/jump instructions will use the + * same absolute addresses as in the first section. + * + * When the pointer to options is NULL, the default value (zero) + * is used. + */ + uint32_t start_offset; + +} lzma_options_bcj; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/block.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/block.h new file mode 100644 index 00000000000..10e97446640 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/block.h @@ -0,0 +1,534 @@ +/** + * \file lzma/block.h + * \brief .xz Block handling + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + + +/** + * \brief Options for the Block and Block Header encoders and decoders + * + * Different Block handling functions use different parts of this structure. + * Some read some members, other functions write, and some do both. Only the + * members listed for reading need to be initialized when the specified + * functions are called. The members marked for writing will be assigned + * new values at some point either by calling the given function or by + * later calls to lzma_code(). + */ +typedef struct { + /** + * \brief Block format version + * + * To prevent API and ABI breakages if new features are needed in + * Block, a version number is used to indicate which fields in this + * structure are in use. For now, version must always be zero. + * With non-zero version, most Block related functions will return + * LZMA_OPTIONS_ERROR. + * + * The decoding functions will always set this to the lowest value + * that supports all the features indicated by the Block Header field. + * The application must check that the version number set by the + * decoding functions is supported by the application. Otherwise it + * is possible that the application will decode the Block incorrectly. + * + * Read by: + * - lzma_block_header_size() + * - lzma_block_header_encode() + * - lzma_block_compressed_size() + * - lzma_block_unpadded_size() + * - lzma_block_total_size() + * - lzma_block_encoder() + * - lzma_block_decoder() + * - lzma_block_buffer_encode() + * - lzma_block_buffer_decode() + * + * Written by: + * - lzma_block_header_decode() + */ + uint32_t version; + + /** + * \brief Size of the Block Header field + * + * This is always a multiple of four. + * + * Read by: + * - lzma_block_header_encode() + * - lzma_block_header_decode() + * - lzma_block_compressed_size() + * - lzma_block_unpadded_size() + * - lzma_block_total_size() + * - lzma_block_decoder() + * - lzma_block_buffer_decode() + * + * Written by: + * - lzma_block_header_size() + * - lzma_block_buffer_encode() + */ + uint32_t header_size; +# define LZMA_BLOCK_HEADER_SIZE_MIN 8 +# define LZMA_BLOCK_HEADER_SIZE_MAX 1024 + + /** + * \brief Type of integrity Check + * + * The Check ID is not stored into the Block Header, thus its value + * must be provided also when decoding. + * + * Read by: + * - lzma_block_header_encode() + * - lzma_block_header_decode() + * - lzma_block_compressed_size() + * - lzma_block_unpadded_size() + * - lzma_block_total_size() + * - lzma_block_encoder() + * - lzma_block_decoder() + * - lzma_block_buffer_encode() + * - lzma_block_buffer_decode() + */ + lzma_check check; + + /** + * \brief Size of the Compressed Data in bytes + * + * Encoding: If this is not LZMA_VLI_UNKNOWN, Block Header encoder + * will store this value to the Block Header. Block encoder doesn't + * care about this value, but will set it once the encoding has been + * finished. + * + * Decoding: If this is not LZMA_VLI_UNKNOWN, Block decoder will + * verify that the size of the Compressed Data field matches + * compressed_size. + * + * Usually you don't know this value when encoding in streamed mode, + * and thus cannot write this field into the Block Header. + * + * In non-streamed mode you can reserve space for this field before + * encoding the actual Block. After encoding the data, finish the + * Block by encoding the Block Header. Steps in detail: + * + * - Set compressed_size to some big enough value. If you don't know + * better, use LZMA_VLI_MAX, but remember that bigger values take + * more space in Block Header. + * + * - Call lzma_block_header_size() to see how much space you need to + * reserve for the Block Header. + * + * - Encode the Block using lzma_block_encoder() and lzma_code(). + * It sets compressed_size to the correct value. + * + * - Use lzma_block_header_encode() to encode the Block Header. + * Because space was reserved in the first step, you don't need + * to call lzma_block_header_size() anymore, because due to + * reserving, header_size has to be big enough. If it is "too big", + * lzma_block_header_encode() will add enough Header Padding to + * make Block Header to match the size specified by header_size. + * + * Read by: + * - lzma_block_header_size() + * - lzma_block_header_encode() + * - lzma_block_compressed_size() + * - lzma_block_unpadded_size() + * - lzma_block_total_size() + * - lzma_block_decoder() + * - lzma_block_buffer_decode() + * + * Written by: + * - lzma_block_header_decode() + * - lzma_block_compressed_size() + * - lzma_block_encoder() + * - lzma_block_decoder() + * - lzma_block_buffer_encode() + * - lzma_block_buffer_decode() + */ + lzma_vli compressed_size; + + /** + * \brief Uncompressed Size in bytes + * + * This is handled very similarly to compressed_size above. + * + * uncompressed_size is needed by fewer functions than + * compressed_size. This is because uncompressed_size isn't + * needed to validate that Block stays within proper limits. + * + * Read by: + * - lzma_block_header_size() + * - lzma_block_header_encode() + * - lzma_block_decoder() + * - lzma_block_buffer_decode() + * + * Written by: + * - lzma_block_header_decode() + * - lzma_block_encoder() + * - lzma_block_decoder() + * - lzma_block_buffer_encode() + * - lzma_block_buffer_decode() + */ + lzma_vli uncompressed_size; + + /** + * \brief Array of filters + * + * There can be 1-4 filters. The end of the array is marked with + * .id = LZMA_VLI_UNKNOWN. + * + * Read by: + * - lzma_block_header_size() + * - lzma_block_header_encode() + * - lzma_block_encoder() + * - lzma_block_decoder() + * - lzma_block_buffer_encode() + * - lzma_block_buffer_decode() + * + * Written by: + * - lzma_block_header_decode(): Note that this does NOT free() + * the old filter options structures. All unused filters[] will + * have .id == LZMA_VLI_UNKNOWN and .options == NULL. If + * decoding fails, all filters[] are guaranteed to be + * LZMA_VLI_UNKNOWN and NULL. + * + * \note Because of the array is terminated with + * .id = LZMA_VLI_UNKNOWN, the actual array must + * have LZMA_FILTERS_MAX + 1 members or the Block + * Header decoder will overflow the buffer. + */ + lzma_filter *filters; + + /** + * \brief Raw value stored in the Check field + * + * After successful coding, the first lzma_check_size(check) bytes + * of this array contain the raw value stored in the Check field. + * + * Note that CRC32 and CRC64 are stored in little endian byte order. + * Take it into account if you display the Check values to the user. + * + * Written by: + * - lzma_block_encoder() + * - lzma_block_decoder() + * - lzma_block_buffer_encode() + * - lzma_block_buffer_decode() + */ + uint8_t raw_check[LZMA_CHECK_SIZE_MAX]; + + /* + * Reserved space to allow possible future extensions without + * breaking the ABI. You should not touch these, because the names + * of these variables may change. These are and will never be used + * with the currently supported options, so it is safe to leave these + * uninitialized. + */ + void *reserved_ptr1; + void *reserved_ptr2; + void *reserved_ptr3; + uint32_t reserved_int1; + uint32_t reserved_int2; + lzma_vli reserved_int3; + lzma_vli reserved_int4; + lzma_vli reserved_int5; + lzma_vli reserved_int6; + lzma_vli reserved_int7; + lzma_vli reserved_int8; + lzma_reserved_enum reserved_enum1; + lzma_reserved_enum reserved_enum2; + lzma_reserved_enum reserved_enum3; + lzma_reserved_enum reserved_enum4; + lzma_bool reserved_bool1; + lzma_bool reserved_bool2; + lzma_bool reserved_bool3; + lzma_bool reserved_bool4; + lzma_bool reserved_bool5; + lzma_bool reserved_bool6; + lzma_bool reserved_bool7; + lzma_bool reserved_bool8; + +} lzma_block; + + +/** + * \brief Decode the Block Header Size field + * + * To decode Block Header using lzma_block_header_decode(), the size of the + * Block Header has to be known and stored into lzma_block.header_size. + * The size can be calculated from the first byte of a Block using this macro. + * Note that if the first byte is 0x00, it indicates beginning of Index; use + * this macro only when the byte is not 0x00. + * + * There is no encoding macro, because Block Header encoder is enough for that. + */ +#define lzma_block_header_size_decode(b) (((uint32_t)(b) + 1) * 4) + + +/** + * \brief Calculate Block Header Size + * + * Calculate the minimum size needed for the Block Header field using the + * settings specified in the lzma_block structure. Note that it is OK to + * increase the calculated header_size value as long as it is a multiple of + * four and doesn't exceed LZMA_BLOCK_HEADER_SIZE_MAX. Increasing header_size + * just means that lzma_block_header_encode() will add Header Padding. + * + * \return - LZMA_OK: Size calculated successfully and stored to + * block->header_size. + * - LZMA_OPTIONS_ERROR: Unsupported version, filters or + * filter options. + * - LZMA_PROG_ERROR: Invalid values like compressed_size == 0. + * + * \note This doesn't check that all the options are valid i.e. this + * may return LZMA_OK even if lzma_block_header_encode() or + * lzma_block_encoder() would fail. If you want to validate the + * filter chain, consider using lzma_memlimit_encoder() which as + * a side-effect validates the filter chain. + */ +extern LZMA_API(lzma_ret) lzma_block_header_size(lzma_block *block) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Encode Block Header + * + * The caller must have calculated the size of the Block Header already with + * lzma_block_header_size(). If a value larger than the one calculated by + * lzma_block_header_size() is used, the Block Header will be padded to the + * specified size. + * + * \param out Beginning of the output buffer. This must be + * at least block->header_size bytes. + * \param block Block options to be encoded. + * + * \return - LZMA_OK: Encoding was successful. block->header_size + * bytes were written to output buffer. + * - LZMA_OPTIONS_ERROR: Invalid or unsupported options. + * - LZMA_PROG_ERROR: Invalid arguments, for example + * block->header_size is invalid or block->filters is NULL. + */ +extern LZMA_API(lzma_ret) lzma_block_header_encode( + const lzma_block *block, uint8_t *out) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Decode Block Header + * + * The size of the Block Header must have already been decoded with + * lzma_block_header_size_decode() macro and stored to block->header_size. + * block->filters must have been allocated, but not necessarily initialized. + * Possible existing filter options are _not_ freed. + * + * \param block Destination for block options with header_size + * properly initialized. + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() (and also free() + * if an error occurs). + * \param in Beginning of the input buffer. This must be + * at least block->header_size bytes. + * + * \return - LZMA_OK: Decoding was successful. block->header_size + * bytes were read from the input buffer. + * - LZMA_OPTIONS_ERROR: The Block Header specifies some + * unsupported options such as unsupported filters. + * - LZMA_DATA_ERROR: Block Header is corrupt, for example, + * the CRC32 doesn't match. + * - LZMA_PROG_ERROR: Invalid arguments, for example + * block->header_size is invalid or block->filters is NULL. + */ +extern LZMA_API(lzma_ret) lzma_block_header_decode(lzma_block *block, + lzma_allocator *allocator, const uint8_t *in) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Validate and set Compressed Size according to Unpadded Size + * + * Block Header stores Compressed Size, but Index has Unpadded Size. If the + * application has already parsed the Index and is now decoding Blocks, + * it can calculate Compressed Size from Unpadded Size. This function does + * exactly that with error checking: + * + * - Compressed Size calculated from Unpadded Size must be positive integer, + * that is, Unpadded Size must be big enough that after Block Header and + * Check fields there's still at least one byte for Compressed Size. + * + * - If Compressed Size was present in Block Header, the new value + * calculated from Unpadded Size is compared against the value + * from Block Header. + * + * \note This function must be called _after_ decoding the Block Header + * field so that it can properly validate Compressed Size if it + * was present in Block Header. + * + * \return - LZMA_OK: block->compressed_size was set successfully. + * - LZMA_DATA_ERROR: unpadded_size is too small compared to + * block->header_size and lzma_check_size(block->check). + * - LZMA_PROG_ERROR: Some values are invalid. For example, + * block->header_size must be a multiple of four and + * between 8 and 1024 inclusive. + */ +extern LZMA_API(lzma_ret) lzma_block_compressed_size( + lzma_block *block, lzma_vli unpadded_size) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Calculate Unpadded Size + * + * The Index field stores Unpadded Size and Uncompressed Size. The latter + * can be taken directly from the lzma_block structure after coding a Block, + * but Unpadded Size needs to be calculated from Block Header Size, + * Compressed Size, and size of the Check field. This is where this function + * is needed. + * + * \return Unpadded Size on success, or zero on error. + */ +extern LZMA_API(lzma_vli) lzma_block_unpadded_size(const lzma_block *block) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Calculate the total encoded size of a Block + * + * This is equivalent to lzma_block_unpadded_size() except that the returned + * value includes the size of the Block Padding field. + * + * \return On success, total encoded size of the Block. On error, + * zero is returned. + */ +extern LZMA_API(lzma_vli) lzma_block_total_size(const lzma_block *block) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Initialize .xz Block encoder + * + * Valid actions for lzma_code() are LZMA_RUN, LZMA_SYNC_FLUSH (only if the + * filter chain supports it), and LZMA_FINISH. + * + * \return - LZMA_OK: All good, continue with lzma_code(). + * - LZMA_MEM_ERROR + * - LZMA_OPTIONS_ERROR + * - LZMA_UNSUPPORTED_CHECK: block->check specfies a Check ID + * that is not supported by this buid of liblzma. Initializing + * the encoder failed. + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_block_encoder( + lzma_stream *strm, lzma_block *block) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Initialize .xz Block decoder + * + * Valid actions for lzma_code() are LZMA_RUN and LZMA_FINISH. Using + * LZMA_FINISH is not required. It is supported only for convenience. + * + * \return - LZMA_OK: All good, continue with lzma_code(). + * - LZMA_UNSUPPORTED_CHECK: Initialization was successful, but + * the given Check ID is not supported, thus Check will be + * ignored. + * - LZMA_PROG_ERROR + * - LZMA_MEM_ERROR + */ +extern LZMA_API(lzma_ret) lzma_block_decoder( + lzma_stream *strm, lzma_block *block) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Calculate maximum output size for single-call Block encoding + * + * This is equivalent to lzma_stream_buffer_bound() but for .xz Blocks. + * See the documentation of lzma_stream_buffer_bound(). + */ +extern LZMA_API(size_t) lzma_block_buffer_bound(size_t uncompressed_size) + lzma_nothrow; + + +/** + * \brief Single-call .xz Block encoder + * + * In contrast to the multi-call encoder initialized with + * lzma_block_encoder(), this function encodes also the Block Header. This + * is required to make it possible to write appropriate Block Header also + * in case the data isn't compressible, and different filter chain has to be + * used to encode the data in uncompressed form using uncompressed chunks + * of the LZMA2 filter. + * + * When the data isn't compressible, header_size, compressed_size, and + * uncompressed_size are set just like when the data was compressible, but + * it is possible that header_size is too small to hold the filter chain + * specified in block->filters, because that isn't necessarily the filter + * chain that was actually used to encode the data. lzma_block_unpadded_size() + * still works normally, because it doesn't read the filters array. + * + * \param block Block options: block->version, block->check, + * and block->filters must have been initialized. + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * \param in Beginning of the input buffer + * \param in_size Size of the input buffer + * \param out Beginning of the output buffer + * \param out_pos The next byte will be written to out[*out_pos]. + * *out_pos is updated only if encoding succeeds. + * \param out_size Size of the out buffer; the first byte into + * which no data is written to is out[out_size]. + * + * \return - LZMA_OK: Encoding was successful. + * - LZMA_BUF_ERROR: Not enough output buffer space. + * - LZMA_OPTIONS_ERROR + * - LZMA_MEM_ERROR + * - LZMA_DATA_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_block_buffer_encode( + lzma_block *block, lzma_allocator *allocator, + const uint8_t *in, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Single-call .xz Block decoder + * + * This is single-call equivalent of lzma_block_decoder(), and requires that + * the caller has already decoded Block Header and checked its memory usage. + * + * \param block Block options just like with lzma_block_decoder(). + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * \param in Beginning of the input buffer + * \param in_pos The next byte will be read from in[*in_pos]. + * *in_pos is updated only if decoding succeeds. + * \param in_size Size of the input buffer; the first byte that + * won't be read is in[in_size]. + * \param out Beginning of the output buffer + * \param out_pos The next byte will be written to out[*out_pos]. + * *out_pos is updated only if encoding succeeds. + * \param out_size Size of the out buffer; the first byte into + * which no data is written to is out[out_size]. + * + * \return - LZMA_OK: Decoding was successful. + * - LZMA_OPTIONS_ERROR + * - LZMA_DATA_ERROR + * - LZMA_MEM_ERROR + * - LZMA_BUF_ERROR: Output buffer was too small. + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_block_buffer_decode( + lzma_block *block, lzma_allocator *allocator, + const uint8_t *in, size_t *in_pos, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) + lzma_nothrow; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/check.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/check.h new file mode 100644 index 00000000000..5661bbe5d40 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/check.h @@ -0,0 +1,150 @@ +/** + * \file lzma/check.h + * \brief Integrity checks + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + + +/** + * \brief Type of the integrity check (Check ID) + * + * The .xz format supports multiple types of checks that are calculated + * from the uncompressed data. They vary in both speed and ability to + * detect errors. + */ +typedef enum { + LZMA_CHECK_NONE = 0, + /**< + * No Check is calculated. + * + * Size of the Check field: 0 bytes + */ + + LZMA_CHECK_CRC32 = 1, + /**< + * CRC32 using the polynomial from the IEEE 802.3 standard + * + * Size of the Check field: 4 bytes + */ + + LZMA_CHECK_CRC64 = 4, + /**< + * CRC64 using the polynomial from the ECMA-182 standard + * + * Size of the Check field: 8 bytes + */ + + LZMA_CHECK_SHA256 = 10 + /**< + * SHA-256 + * + * Size of the Check field: 32 bytes + */ +} lzma_check; + + +/** + * \brief Maximum valid Check ID + * + * The .xz file format specification specifies 16 Check IDs (0-15). Some + * of them are only reserved, that is, no actual Check algorithm has been + * assigned. When decoding, liblzma still accepts unknown Check IDs for + * future compatibility. If a valid but unsupported Check ID is detected, + * liblzma can indicate a warning; see the flags LZMA_TELL_NO_CHECK, + * LZMA_TELL_UNSUPPORTED_CHECK, and LZMA_TELL_ANY_CHECK in container.h. + */ +#define LZMA_CHECK_ID_MAX 15 + + +/** + * \brief Test if the given Check ID is supported + * + * Return true if the given Check ID is supported by this liblzma build. + * Otherwise false is returned. It is safe to call this with a value that + * is not in the range [0, 15]; in that case the return value is always false. + * + * You can assume that LZMA_CHECK_NONE and LZMA_CHECK_CRC32 are always + * supported (even if liblzma is built with limited features). + */ +extern LZMA_API(lzma_bool) lzma_check_is_supported(lzma_check check) + lzma_nothrow lzma_attr_const; + + +/** + * \brief Get the size of the Check field with the given Check ID + * + * Although not all Check IDs have a check algorithm associated, the size of + * every Check is already frozen. This function returns the size (in bytes) of + * the Check field with the specified Check ID. The values are: + * { 0, 4, 4, 4, 8, 8, 8, 16, 16, 16, 32, 32, 32, 64, 64, 64 } + * + * If the argument is not in the range [0, 15], UINT32_MAX is returned. + */ +extern LZMA_API(uint32_t) lzma_check_size(lzma_check check) + lzma_nothrow lzma_attr_const; + + +/** + * \brief Maximum size of a Check field + */ +#define LZMA_CHECK_SIZE_MAX 64 + + +/** + * \brief Calculate CRC32 + * + * Calculate CRC32 using the polynomial from the IEEE 802.3 standard. + * + * \param buf Pointer to the input buffer + * \param size Size of the input buffer + * \param crc Previously returned CRC value. This is used to + * calculate the CRC of a big buffer in smaller chunks. + * Set to zero when starting a new calculation. + * + * \return Updated CRC value, which can be passed to this function + * again to continue CRC calculation. + */ +extern LZMA_API(uint32_t) lzma_crc32( + const uint8_t *buf, size_t size, uint32_t crc) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Calculate CRC64 + * + * Calculate CRC64 using the polynomial from the ECMA-182 standard. + * + * This function is used similarly to lzma_crc32(). See its documentation. + */ +extern LZMA_API(uint64_t) lzma_crc64( + const uint8_t *buf, size_t size, uint64_t crc) + lzma_nothrow lzma_attr_pure; + + +/* + * SHA-256 functions are currently not exported to public API. + * Contact Lasse Collin if you think it should be. + */ + + +/** + * \brief Get the type of the integrity check + * + * This function can be called only immediatelly after lzma_code() has + * returned LZMA_NO_CHECK, LZMA_UNSUPPORTED_CHECK, or LZMA_GET_CHECK. + * Calling this function in any other situation has undefined behavior. + */ +extern LZMA_API(lzma_check) lzma_get_check(const lzma_stream *strm) + lzma_nothrow; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/container.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/container.h new file mode 100644 index 00000000000..0d907650fc4 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/container.h @@ -0,0 +1,404 @@ +/** + * \file lzma/container.h + * \brief File formats + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + + +/************ + * Encoding * + ************/ + +/** + * \brief Default compression preset + * + * It's not straightforward to recommend a default preset, because in some + * cases keeping the resource usage relatively low is more important that + * getting the maximum compression ratio. + */ +#define LZMA_PRESET_DEFAULT UINT32_C(6) + + +/** + * \brief Mask for preset level + * + * This is useful only if you need to extract the level from the preset + * variable. That should be rare. + */ +#define LZMA_PRESET_LEVEL_MASK UINT32_C(0x1F) + + +/* + * Preset flags + * + * Currently only one flag is defined. + */ + +/** + * \brief Extreme compression preset + * + * This flag modifies the preset to make the encoding significantly slower + * while improving the compression ratio only marginally. This is useful + * when you don't mind wasting time to get as small result as possible. + * + * This flag doesn't affect the memory usage requirements of the decoder (at + * least not significantly). The memory usage of the encoder may be increased + * a little but only at the lowest preset levels (0-2). + */ +#define LZMA_PRESET_EXTREME (UINT32_C(1) << 31) + + +/** + * \brief Calculate rough memory usage of easy encoder + * + * This function is a wrapper for lzma_raw_encoder_memusage(). + * + * \param preset Compression preset (level and possible flags) + */ +extern LZMA_API(uint64_t) lzma_easy_encoder_memusage(uint32_t preset) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Calculate rough decoder memory usage of a preset + * + * This function is a wrapper for lzma_raw_decoder_memusage(). + * + * \param preset Compression preset (level and possible flags) + */ +extern LZMA_API(uint64_t) lzma_easy_decoder_memusage(uint32_t preset) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Initialize .xz Stream encoder using a preset number + * + * This function is intended for those who just want to use the basic features + * if liblzma (that is, most developers out there). + * + * \param strm Pointer to lzma_stream that is at least initialized + * with LZMA_STREAM_INIT. + * \param preset Compression preset to use. A preset consist of level + * number and zero or more flags. Usually flags aren't + * used, so preset is simply a number [0, 9] which match + * the options -0 .. -9 of the xz command line tool. + * Additional flags can be be set using bitwise-or with + * the preset level number, e.g. 6 | LZMA_PRESET_EXTREME. + * \param check Integrity check type to use. See check.h for available + * checks. If you are unsure, use LZMA_CHECK_CRC32. + * + * \return - LZMA_OK: Initialization succeeded. Use lzma_code() to + * encode your data. + * - LZMA_MEM_ERROR: Memory allocation failed. + * - LZMA_OPTIONS_ERROR: The given compression level is not + * supported by this build of liblzma. + * - LZMA_UNSUPPORTED_CHECK: The given check type is not + * supported by this liblzma build. + * - LZMA_PROG_ERROR: One or more of the parameters have values + * that will never be valid. For example, strm == NULL. + * + * If initialization fails (return value is not LZMA_OK), all the memory + * allocated for *strm by liblzma is always freed. Thus, there is no need + * to call lzma_end() after failed initialization. + * + * If initialization succeeds, use lzma_code() to do the actual encoding. + * Valid values for `action' (the second argument of lzma_code()) are + * LZMA_RUN, LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, and LZMA_FINISH. In future, + * there may be compression levels or flags that don't support LZMA_SYNC_FLUSH. + */ +extern LZMA_API(lzma_ret) lzma_easy_encoder( + lzma_stream *strm, uint32_t preset, lzma_check check) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Single-call .xz Stream encoding using a preset number + * + * The maximum required output buffer size can be calculated with + * lzma_stream_buffer_bound(). + * + * \param preset Compression preset to use. See the description + * in lzma_easy_encoder(). + * \param check Type of the integrity check to calculate from + * uncompressed data. + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * \param in Beginning of the input buffer + * \param in_size Size of the input buffer + * \param out Beginning of the output buffer + * \param out_pos The next byte will be written to out[*out_pos]. + * *out_pos is updated only if encoding succeeds. + * \param out_size Size of the out buffer; the first byte into + * which no data is written to is out[out_size]. + * + * \return - LZMA_OK: Encoding was successful. + * - LZMA_BUF_ERROR: Not enough output buffer space. + * - LZMA_OPTIONS_ERROR + * - LZMA_MEM_ERROR + * - LZMA_DATA_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_easy_buffer_encode( + uint32_t preset, lzma_check check, + lzma_allocator *allocator, const uint8_t *in, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow; + + +/** + * \brief Initialize .xz Stream encoder using a custom filter chain + * + * \param strm Pointer to properly prepared lzma_stream + * \param filters Array of filters. This must be terminated with + * filters[n].id = LZMA_VLI_UNKNOWN. See filter.h for + * more information. + * \param check Type of the integrity check to calculate from + * uncompressed data. + * + * \return - LZMA_OK: Initialization was successful. + * - LZMA_MEM_ERROR + * - LZMA_OPTIONS_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_stream_encoder(lzma_stream *strm, + const lzma_filter *filters, lzma_check check) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Initialize .lzma encoder (legacy file format) + * + * The .lzma format is sometimes called the LZMA_Alone format, which is the + * reason for the name of this function. The .lzma format supports only the + * LZMA1 filter. There is no support for integrity checks like CRC32. + * + * Use this function if and only if you need to create files readable by + * legacy LZMA tools such as LZMA Utils 4.32.x. Moving to the .xz format + * is strongly recommended. + * + * The valid action values for lzma_code() are LZMA_RUN and LZMA_FINISH. + * No kind of flushing is supported, because the file format doesn't make + * it possible. + * + * \return - LZMA_OK + * - LZMA_MEM_ERROR + * - LZMA_OPTIONS_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_alone_encoder( + lzma_stream *strm, const lzma_options_lzma *options) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Calculate output buffer size for single-call Stream encoder + * + * When trying to compress uncompressible data, the encoded size will be + * slightly bigger than the input data. This function calculates how much + * output buffer space is required to be sure that lzma_stream_buffer_encode() + * doesn't return LZMA_BUF_ERROR. + * + * The calculated value is not exact, but it is guaranteed to be big enough. + * The actual maximum output space required may be slightly smaller (up to + * about 100 bytes). This should not be a problem in practice. + * + * If the calculated maximum size doesn't fit into size_t or would make the + * Stream grow past LZMA_VLI_MAX (which should never happen in practice), + * zero is returned to indicate the error. + * + * \note The limit calculated by this function applies only to + * single-call encoding. Multi-call encoding may (and probably + * will) have larger maximum expansion when encoding + * uncompressible data. Currently there is no function to + * calculate the maximum expansion of multi-call encoding. + */ +extern LZMA_API(size_t) lzma_stream_buffer_bound(size_t uncompressed_size) + lzma_nothrow; + + +/** + * \brief Single-call .xz Stream encoder + * + * \param filters Array of filters. This must be terminated with + * filters[n].id = LZMA_VLI_UNKNOWN. See filter.h + * for more information. + * \param check Type of the integrity check to calculate from + * uncompressed data. + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * \param in Beginning of the input buffer + * \param in_size Size of the input buffer + * \param out Beginning of the output buffer + * \param out_pos The next byte will be written to out[*out_pos]. + * *out_pos is updated only if encoding succeeds. + * \param out_size Size of the out buffer; the first byte into + * which no data is written to is out[out_size]. + * + * \return - LZMA_OK: Encoding was successful. + * - LZMA_BUF_ERROR: Not enough output buffer space. + * - LZMA_OPTIONS_ERROR + * - LZMA_MEM_ERROR + * - LZMA_DATA_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_stream_buffer_encode( + lzma_filter *filters, lzma_check check, + lzma_allocator *allocator, const uint8_t *in, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) + lzma_nothrow lzma_attr_warn_unused_result; + + +/************ + * Decoding * + ************/ + +/** + * This flag makes lzma_code() return LZMA_NO_CHECK if the input stream + * being decoded has no integrity check. Note that when used with + * lzma_auto_decoder(), all .lzma files will trigger LZMA_NO_CHECK + * if LZMA_TELL_NO_CHECK is used. + */ +#define LZMA_TELL_NO_CHECK UINT32_C(0x01) + + +/** + * This flag makes lzma_code() return LZMA_UNSUPPORTED_CHECK if the input + * stream has an integrity check, but the type of the integrity check is not + * supported by this liblzma version or build. Such files can still be + * decoded, but the integrity check cannot be verified. + */ +#define LZMA_TELL_UNSUPPORTED_CHECK UINT32_C(0x02) + + +/** + * This flag makes lzma_code() return LZMA_GET_CHECK as soon as the type + * of the integrity check is known. The type can then be got with + * lzma_get_check(). + */ +#define LZMA_TELL_ANY_CHECK UINT32_C(0x04) + + +/** + * This flag enables decoding of concatenated files with file formats that + * allow concatenating compressed files as is. From the formats currently + * supported by liblzma, only the .xz format allows concatenated files. + * Concatenated files are not allowed with the legacy .lzma format. + * + * This flag also affects the usage of the `action' argument for lzma_code(). + * When LZMA_CONCATENATED is used, lzma_code() won't return LZMA_STREAM_END + * unless LZMA_FINISH is used as `action'. Thus, the application has to set + * LZMA_FINISH in the same way as it does when encoding. + * + * If LZMA_CONCATENATED is not used, the decoders still accept LZMA_FINISH + * as `action' for lzma_code(), but the usage of LZMA_FINISH isn't required. + */ +#define LZMA_CONCATENATED UINT32_C(0x08) + + +/** + * \brief Initialize .xz Stream decoder + * + * \param strm Pointer to properly prepared lzma_stream + * \param memlimit Rough memory usage limit as bytes + * \param flags Bitwise-or of zero or more of the decoder flags: + * LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, + * LZMA_TELL_ANY_CHECK, LZMA_CONCATENATED + * + * \return - LZMA_OK: Initialization was successful. + * - LZMA_MEM_ERROR: Cannot allocate memory. + * - LZMA_OPTIONS_ERROR: Unsupported flags + */ +extern LZMA_API(lzma_ret) lzma_stream_decoder( + lzma_stream *strm, uint64_t memlimit, uint32_t flags) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Decode .xz Streams and .lzma files with autodetection + * + * This decoder autodetects between the .xz and .lzma file formats, and + * calls lzma_stream_decoder() or lzma_alone_decoder() once the type + * of the input file has been detected. + * + * \param strm Pointer to properly prepared lzma_stream + * \param memlimit Rough memory usage limit as bytes + * \param flags Bitwise-or of flags, or zero for no flags. + * + * \return - LZMA_OK: Initialization was successful. + * - LZMA_MEM_ERROR: Cannot allocate memory. + * - LZMA_OPTIONS_ERROR: Unsupported flags + */ +extern LZMA_API(lzma_ret) lzma_auto_decoder( + lzma_stream *strm, uint64_t memlimit, uint32_t flags) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Initialize .lzma decoder (legacy file format) + * + * Valid `action' arguments to lzma_code() are LZMA_RUN and LZMA_FINISH. + * There is no need to use LZMA_FINISH, but allowing it may simplify + * certain types of applications. + * + * \return - LZMA_OK + * - LZMA_MEM_ERROR + */ +extern LZMA_API(lzma_ret) lzma_alone_decoder( + lzma_stream *strm, uint64_t memlimit) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Single-call .xz Stream decoder + * + * \param memlimit Pointer to how much memory the decoder is allowed + * to allocate. The value pointed by this pointer is + * modified if and only if LZMA_MEMLIMIT_ERROR is + * returned. + * \param flags Bitwise-or of zero or more of the decoder flags: + * LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, + * LZMA_CONCATENATED. Note that LZMA_TELL_ANY_CHECK + * is not allowed and will return LZMA_PROG_ERROR. + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * \param in Beginning of the input buffer + * \param in_pos The next byte will be read from in[*in_pos]. + * *in_pos is updated only if decoding succeeds. + * \param in_size Size of the input buffer; the first byte that + * won't be read is in[in_size]. + * \param out Beginning of the output buffer + * \param out_pos The next byte will be written to out[*out_pos]. + * *out_pos is updated only if encoding succeeds. + * \param out_size Size of the out buffer; the first byte into + * which no data is written to is out[out_size]. + * + * \return - LZMA_OK: Decoding was successful. + * - LZMA_FORMAT_ERROR + * - LZMA_OPTIONS_ERROR + * - LZMA_DATA_ERROR + * - LZMA_NO_CHECK: This can be returned only if using + * the LZMA_TELL_NO_CHECK flag. + * - LZMA_UNSUPPORTED_CHECK: This can be returned only if using + * the LZMA_TELL_UNSUPPORTED_CHECK flag. + * - LZMA_MEM_ERROR + * - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached. + * The minimum required memlimit value was stored to *memlimit. + * - LZMA_BUF_ERROR: Output buffer was too small. + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_stream_buffer_decode( + uint64_t *memlimit, uint32_t flags, lzma_allocator *allocator, + const uint8_t *in, size_t *in_pos, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) + lzma_nothrow lzma_attr_warn_unused_result; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/delta.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/delta.h new file mode 100644 index 00000000000..592fc4f8496 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/delta.h @@ -0,0 +1,77 @@ +/** + * \file lzma/delta.h + * \brief Delta filter + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + + +/** + * \brief Filter ID + * + * Filter ID of the Delta filter. This is used as lzma_filter.id. + */ +#define LZMA_FILTER_DELTA LZMA_VLI_C(0x03) + + +/** + * \brief Type of the delta calculation + * + * Currently only byte-wise delta is supported. Other possible types could + * be, for example, delta of 16/32/64-bit little/big endian integers, but + * these are not currently planned since byte-wise delta is almost as good. + */ +typedef enum { + LZMA_DELTA_TYPE_BYTE +} lzma_delta_type; + + +/** + * \brief Options for the Delta filter + * + * These options are needed by both encoder and decoder. + */ +typedef struct { + /** For now, this must always be LZMA_DELTA_TYPE_BYTE. */ + lzma_delta_type type; + + /** + * \brief Delta distance + * + * With the only currently supported type, LZMA_DELTA_TYPE_BYTE, + * the distance is as bytes. + * + * Examples: + * - 16-bit stereo audio: distance = 4 bytes + * - 24-bit RGB image data: distance = 3 bytes + */ + uint32_t dist; +# define LZMA_DELTA_DIST_MIN 1 +# define LZMA_DELTA_DIST_MAX 256 + + /* + * Reserved space to allow possible future extensions without + * breaking the ABI. You should not touch these, because the names + * of these variables may change. These are and will never be used + * when type is LZMA_DELTA_TYPE_BYTE, so it is safe to leave these + * uninitialized. + */ + uint32_t reserved_int1; + uint32_t reserved_int2; + uint32_t reserved_int3; + uint32_t reserved_int4; + void *reserved_ptr1; + void *reserved_ptr2; + +} lzma_options_delta; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/filter.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/filter.h new file mode 100644 index 00000000000..8d0db96bcc1 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/filter.h @@ -0,0 +1,360 @@ +/** + * \file lzma/filter.h + * \brief Common filter related types + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + + +/** + * \brief Maximum number of filters in a chain + * + * A filter chain can have 1-4 filters, of which three are allowed to change + * the size of the data. Usually only one or two filters are needed. + */ +#define LZMA_FILTERS_MAX 4 + + +/** + * \brief Filter options + * + * This structure is used to pass Filter ID and a pointer filter's + * options to liblzma. A few functions work with a single lzma_filter + * structure, while most functions expect a filter chain. + * + * A filter chain is indicated with an array of lzma_filter structures. + * The array is terminated with .id = LZMA_VLI_UNKNOWN. Thus, the filter + * array must have LZMA_FILTERS_MAX + 1 elements (that is, five) to + * be able to hold any arbitrary filter chain. This is important when + * using lzma_block_header_decode() from block.h, because too small + * array would make liblzma write past the end of the filters array. + */ +typedef struct { + /** + * \brief Filter ID + * + * Use constants whose name begin with `LZMA_FILTER_' to specify + * different filters. In an array of lzma_filter structures, use + * LZMA_VLI_UNKNOWN to indicate end of filters. + * + * \note This is not an enum, because on some systems enums + * cannot be 64-bit. + */ + lzma_vli id; + + /** + * \brief Pointer to filter-specific options structure + * + * If the filter doesn't need options, set this to NULL. If id is + * set to LZMA_VLI_UNKNOWN, options is ignored, and thus + * doesn't need be initialized. + * + * Some filters support changing the options in the middle of + * the encoding process. These filters store the pointer of the + * options structure and communicate with the application via + * modifications of the options structure. + */ + void *options; + +} lzma_filter; + + +/** + * \brief Test if the given Filter ID is supported for encoding + * + * Return true if the give Filter ID is supported for encoding by this + * liblzma build. Otherwise false is returned. + * + * There is no way to list which filters are available in this particular + * liblzma version and build. It would be useless, because the application + * couldn't know what kind of options the filter would need. + */ +extern LZMA_API(lzma_bool) lzma_filter_encoder_is_supported(lzma_vli id) + lzma_nothrow lzma_attr_const; + + +/** + * \brief Test if the given Filter ID is supported for decoding + * + * Return true if the give Filter ID is supported for decoding by this + * liblzma build. Otherwise false is returned. + */ +extern LZMA_API(lzma_bool) lzma_filter_decoder_is_supported(lzma_vli id) + lzma_nothrow lzma_attr_const; + + +/** + * \brief Calculate rough memory requirements for raw encoder + * + * Because the calculation is rough, this function can be used to calculate + * the memory requirements for Block and Stream encoders too. + * + * \param filters Array of filters terminated with + * .id == LZMA_VLI_UNKNOWN. + * + * \return Rough number of bytes of memory required for the given + * filter chain when encoding. + */ +extern LZMA_API(uint64_t) lzma_raw_encoder_memusage(const lzma_filter *filters) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Calculate rough memory requirements for raw decoder + * + * Because the calculation is rough, this function can be used to calculate + * the memory requirements for Block and Stream decoders too. + * + * \param filters Array of filters terminated with + * .id == LZMA_VLI_UNKNOWN. + * + * \return Rough number of bytes of memory required for the given + * filter chain when decoding. + */ +extern LZMA_API(uint64_t) lzma_raw_decoder_memusage(const lzma_filter *filters) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Initialize raw encoder + * + * This function may be useful when implementing custom file formats. + * + * \param strm Pointer to properly prepared lzma_stream + * \param filters Array of lzma_filter structures. The end of the + * array must be marked with .id = LZMA_VLI_UNKNOWN. + * + * The `action' with lzma_code() can be LZMA_RUN, LZMA_SYNC_FLUSH (if the + * filter chain supports it), or LZMA_FINISH. + * + * \return - LZMA_OK + * - LZMA_MEM_ERROR + * - LZMA_OPTIONS_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_raw_encoder( + lzma_stream *strm, const lzma_filter *filters) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Initialize raw decoder + * + * The initialization of raw decoder goes similarly to raw encoder. + * + * The `action' with lzma_code() can be LZMA_RUN or LZMA_FINISH. Using + * LZMA_FINISH is not required, it is supported just for convenience. + * + * \return - LZMA_OK + * - LZMA_MEM_ERROR + * - LZMA_OPTIONS_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_raw_decoder( + lzma_stream *strm, const lzma_filter *filters) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Single-call raw encoder + * + * \param filters Array of lzma_filter structures. The end of the + * array must be marked with .id = LZMA_VLI_UNKNOWN. + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * \param in Beginning of the input buffer + * \param in_size Size of the input buffer + * \param out Beginning of the output buffer + * \param out_pos The next byte will be written to out[*out_pos]. + * *out_pos is updated only if encoding succeeds. + * \param out_size Size of the out buffer; the first byte into + * which no data is written to is out[out_size]. + * + * \return - LZMA_OK: Encoding was successful. + * - LZMA_BUF_ERROR: Not enough output buffer space. + * - LZMA_OPTIONS_ERROR + * - LZMA_MEM_ERROR + * - LZMA_DATA_ERROR + * - LZMA_PROG_ERROR + * + * \note There is no function to calculate how big output buffer + * would surely be big enough. (lzma_stream_buffer_bound() + * works only for lzma_stream_buffer_encode().) + */ +extern LZMA_API(lzma_ret) lzma_raw_buffer_encode( + const lzma_filter *filters, lzma_allocator *allocator, + const uint8_t *in, size_t in_size, uint8_t *out, + size_t *out_pos, size_t out_size) lzma_nothrow; + + +/** + * \brief Single-call raw decoder + * + * \param filters Array of lzma_filter structures. The end of the + * array must be marked with .id = LZMA_VLI_UNKNOWN. + * \param allocator lzma_allocator for custom allocator functions. + * Set to NULL to use malloc() and free(). + * \param in Beginning of the input buffer + * \param in_pos The next byte will be read from in[*in_pos]. + * *in_pos is updated only if decoding succeeds. + * \param in_size Size of the input buffer; the first byte that + * won't be read is in[in_size]. + * \param out Beginning of the output buffer + * \param out_pos The next byte will be written to out[*out_pos]. + * *out_pos is updated only if encoding succeeds. + * \param out_size Size of the out buffer; the first byte into + * which no data is written to is out[out_size]. + */ +extern LZMA_API(lzma_ret) lzma_raw_buffer_decode( + const lzma_filter *filters, lzma_allocator *allocator, + const uint8_t *in, size_t *in_pos, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow; + + +/** + * \brief Get the size of the Filter Properties field + * + * This function may be useful when implementing custom file formats + * using the raw encoder and decoder. + * + * \param size Pointer to uint32_t to hold the size of the properties + * \param filter Filter ID and options (the size of the propeties may + * vary depending on the options) + * + * \return - LZMA_OK + * - LZMA_OPTIONS_ERROR + * - LZMA_PROG_ERROR + * + * \note This function validates the Filter ID, but does not + * necessarily validate the options. Thus, it is possible + * that this returns LZMA_OK while the following call to + * lzma_properties_encode() returns LZMA_OPTIONS_ERROR. + */ +extern LZMA_API(lzma_ret) lzma_properties_size( + uint32_t *size, const lzma_filter *filter) lzma_nothrow; + + +/** + * \brief Encode the Filter Properties field + * + * \param filter Filter ID and options + * \param props Buffer to hold the encoded options. The size of + * buffer must have been already determined with + * lzma_properties_size(). + * + * \return - LZMA_OK + * - LZMA_OPTIONS_ERROR + * - LZMA_PROG_ERROR + * + * \note Even this function won't validate more options than actually + * necessary. Thus, it is possible that encoding the properties + * succeeds but using the same options to initialize the encoder + * will fail. + * + * \note It is OK to skip calling this function if + * lzma_properties_size() indicated that the size + * of the Filter Properties field is zero. + */ +extern LZMA_API(lzma_ret) lzma_properties_encode( + const lzma_filter *filter, uint8_t *props) lzma_nothrow; + + +/** + * \brief Decode the Filter Properties field + * + * \param filter filter->id must have been set to the correct + * Filter ID. filter->options doesn't need to be + * initialized (it's not freed by this function). The + * decoded options will be stored to filter->options. + * filter->options is set to NULL if there are no + * properties or if an error occurs. + * \param allocator Custom memory allocator used to allocate the + * options. Set to NULL to use the default malloc(), + * and in case of an error, also free(). + * \param props Input buffer containing the properties. + * \param props_size Size of the properties. This must be the exact + * size; giving too much or too little input will + * return LZMA_OPTIONS_ERROR. + * + * \return - LZMA_OK + * - LZMA_OPTIONS_ERROR + * - LZMA_MEM_ERROR + */ +extern LZMA_API(lzma_ret) lzma_properties_decode( + lzma_filter *filter, lzma_allocator *allocator, + const uint8_t *props, size_t props_size) lzma_nothrow; + + +/** + * \brief Calculate encoded size of a Filter Flags field + * + * Knowing the size of Filter Flags is useful to know when allocating + * memory to hold the encoded Filter Flags. + * + * \param size Pointer to integer to hold the calculated size + * \param filters Filter ID and associated options whose encoded + * size is to be calculted + * + * \return - LZMA_OK: *size set successfully. Note that this doesn't + * guarantee that filters->options is valid, thus + * lzma_filter_flags_encode() may still fail. + * - LZMA_OPTIONS_ERROR: Unknown Filter ID or unsupported options. + * - LZMA_PROG_ERROR: Invalid options + * + * \note If you need to calculate size of List of Filter Flags, + * you need to loop over every lzma_filter entry. + */ +extern LZMA_API(lzma_ret) lzma_filter_flags_size( + uint32_t *size, const lzma_filter *filters) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Encode Filter Flags into given buffer + * + * In contrast to some functions, this doesn't allocate the needed buffer. + * This is due to how this function is used internally by liblzma. + * + * \param filters Filter ID and options to be encoded + * \param out Beginning of the output buffer + * \param out_pos out[*out_pos] is the next write position. This + * is updated by the encoder. + * \param out_size out[out_size] is the first byte to not write. + * + * \return - LZMA_OK: Encoding was successful. + * - LZMA_OPTIONS_ERROR: Invalid or unsupported options. + * - LZMA_PROG_ERROR: Invalid options or not enough output + * buffer space (you should have checked it with + * lzma_filter_flags_size()). + */ +extern LZMA_API(lzma_ret) lzma_filter_flags_encode(const lzma_filter *filters, + uint8_t *out, size_t *out_pos, size_t out_size) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Decode Filter Flags from given buffer + * + * The decoded result is stored into *filters. filters->options is + * initialized but the old value is NOT free()d. + * + * \return - LZMA_OK + * - LZMA_OPTIONS_ERROR + * - LZMA_MEM_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_filter_flags_decode( + lzma_filter *filters, lzma_allocator *allocator, + const uint8_t *in, size_t *in_pos, size_t in_size) + lzma_nothrow lzma_attr_warn_unused_result; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/index.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/index.h new file mode 100644 index 00000000000..da9a622aa80 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/index.h @@ -0,0 +1,403 @@ +/** + * \file lzma/index.h + * \brief Handling of .xz Index lists + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + + +/** + * \brief Opaque data type to hold the Index + */ +typedef struct lzma_index_s lzma_index; + + +/** + * \brief Index Record and its location + */ +typedef struct { + /** + * \brief Total encoded size of a Block including Block Padding + * + * This value is useful if you need to know the actual size of the + * Block that the Block decoder will read. + */ + lzma_vli total_size; + + /** + * \brief Encoded size of a Block excluding Block Padding + * + * This value is stored in the Index. When doing random-access + * reading, you should give this value to the Block decoder along + * with uncompressed_size. + */ + lzma_vli unpadded_size; + + /** + * \brief Uncompressed Size of a Block + */ + lzma_vli uncompressed_size; + + /** + * \brief Compressed offset in the Stream(s) + * + * This is the offset of the first byte of the Block, that is, + * where you need to seek to decode the Block. The offset + * is relative to the beginning of the Stream, or if there are + * multiple Indexes combined, relative to the beginning of the + * first Stream. + */ + lzma_vli stream_offset; + + /** + * \brief Uncompressed offset + * + * When doing random-access reading, it is possible that the target + * offset is not exactly at Block boundary. One will need to compare + * the target offset against uncompressed_offset, and possibly decode + * and throw away some amount of data before reaching the target + * offset. + */ + lzma_vli uncompressed_offset; + +} lzma_index_record; + + +/** + * \brief Calculate memory usage for Index with given number of Records + * + * On disk, the size of the Index field depends on both the number of Records + * stored and how big values the Records store (due to variable-length integer + * encoding). When the Index is kept in lzma_index structure, the memory usage + * depends only on the number of Records stored in the Index. The size in RAM + * is almost always a lot bigger than in encoded form on disk. + * + * This function calculates an approximate amount of memory needed hold the + * given number of Records in lzma_index structure. This value may vary + * between liblzma versions if the internal implementation is modified. + * + * If you want to know how much memory an existing lzma_index structure is + * using, use lzma_index_memusage(lzma_index_count(i)). + */ +extern LZMA_API(uint64_t) lzma_index_memusage(lzma_vli record_count) + lzma_nothrow; + + +/** + * \brief Allocate and initialize a new lzma_index structure + * + * If i is NULL, a new lzma_index structure is allocated, initialized, + * and a pointer to it returned. If allocation fails, NULL is returned. + * + * If i is non-NULL, it is reinitialized and the same pointer returned. + * In this case, return value cannot be NULL or a different pointer than + * the i that was given as an argument. + */ +extern LZMA_API(lzma_index *) lzma_index_init( + lzma_index *i, lzma_allocator *allocator) lzma_nothrow; + + +/** + * \brief Deallocate the Index + * + * If i is NULL, this does nothing. + */ +extern LZMA_API(void) lzma_index_end(lzma_index *i, lzma_allocator *allocator) + lzma_nothrow; + + +/** + * \brief Add a new Record to an Index + * + * \param i Pointer to a lzma_index structure + * \param allocator Pointer to lzma_allocator, or NULL to + * use malloc() + * \param unpadded_size Unpadded Size of a Block. This can be + * calculated with lzma_block_unpadded_size() + * after encoding or decoding the Block. + * \param uncompressed_size Uncompressed Size of a Block. This can be + * taken directly from lzma_block structure + * after encoding or decoding the Block. + * + * Appending a new Record does not affect the read position. + * + * \return - LZMA_OK + * - LZMA_MEM_ERROR + * - LZMA_DATA_ERROR: Compressed or uncompressed size of the + * Stream or size of the Index field would grow too big. + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_index_append( + lzma_index *i, lzma_allocator *allocator, + lzma_vli unpadded_size, lzma_vli uncompressed_size) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Get the number of Records + */ +extern LZMA_API(lzma_vli) lzma_index_count(const lzma_index *i) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Get the size of the Index field as bytes + * + * This is needed to verify the Backward Size field in the Stream Footer. + */ +extern LZMA_API(lzma_vli) lzma_index_size(const lzma_index *i) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Get the total size of the Blocks + * + * This doesn't include the Stream Header, Stream Footer, Stream Padding, + * or Index fields. + */ +extern LZMA_API(lzma_vli) lzma_index_total_size(const lzma_index *i) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Get the total size of the Stream + * + * If multiple Indexes have been combined, this works as if the Blocks + * were in a single Stream. + */ +extern LZMA_API(lzma_vli) lzma_index_stream_size(const lzma_index *i) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Get the total size of the file + * + * When no Indexes have been combined with lzma_index_cat(), this function is + * identical to lzma_index_stream_size(). If multiple Indexes have been + * combined, this includes also the headers of each separate Stream and the + * possible Stream Padding fields. + */ +extern LZMA_API(lzma_vli) lzma_index_file_size(const lzma_index *i) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Get the uncompressed size of the Stream + */ +extern LZMA_API(lzma_vli) lzma_index_uncompressed_size(const lzma_index *i) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Get the next Record from the Index + */ +extern LZMA_API(lzma_bool) lzma_index_read( + lzma_index *i, lzma_index_record *record) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Rewind the Index + * + * Rewind the Index so that next call to lzma_index_read() will return the + * first Record. + */ +extern LZMA_API(void) lzma_index_rewind(lzma_index *i) lzma_nothrow; + + +/** + * \brief Locate a Record + * + * When the Index is available, it is possible to do random-access reading + * with granularity of Block size. + * + * \param i Pointer to lzma_index structure + * \param record Pointer to a structure to hold the search results + * \param target Uncompressed target offset which the caller would + * like to locate from the Stream + * + * If the target is smaller than the uncompressed size of the Stream (can be + * checked with lzma_index_uncompressed_size()): + * - Information about the Record containing the requested uncompressed + * offset is stored into *record. + * - Read offset will be adjusted so that calling lzma_index_read() can be + * used to read subsequent Records. + * - This function returns false. + * + * If target is greater than the uncompressed size of the Stream, *record + * and the read position are not modified, and this function returns true. + */ +extern LZMA_API(lzma_bool) lzma_index_locate( + lzma_index *i, lzma_index_record *record, lzma_vli target) + lzma_nothrow; + + +/** + * \brief Concatenate Indexes of two Streams + * + * Concatenating Indexes is useful when doing random-access reading in + * multi-Stream .xz file, or when combining multiple Streams into single + * Stream. + * + * \param dest Destination Index after which src is appended + * \param src Source Index. If this function succeeds, the + * memory allocated for src is freed or moved to + * be part of dest. + * \param allocator Custom memory allocator; can be NULL to use + * malloc() and free(). + * \param padding Size of the Stream Padding field between Streams. + * This must be a multiple of four. + * + * \return - LZMA_OK: Indexes concatenated successfully. src is now + * a dangling pointer. + * - LZMA_DATA_ERROR: *dest would grow too big. + * - LZMA_MEM_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_index_cat(lzma_index *lzma_restrict dest, + lzma_index *lzma_restrict src, + lzma_allocator *allocator, lzma_vli padding) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Duplicate an Index list + * + * Makes an identical copy of the Index. Also the read position is copied. + * + * \return A copy of the Index, or NULL if memory allocation failed. + */ +extern LZMA_API(lzma_index *) lzma_index_dup( + const lzma_index *i, lzma_allocator *allocator) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Compare if two Index lists are identical + * + * Read positions are not compared. + * + * \return True if *a and *b are equal, false otherwise. + */ +extern LZMA_API(lzma_bool) lzma_index_equal( + const lzma_index *a, const lzma_index *b) + lzma_nothrow lzma_attr_pure; + + +/** + * \brief Initialize .xz Index encoder + * + * \param strm Pointer to properly prepared lzma_stream + * \param i Pointer to lzma_index which should be encoded. + * The read position will be at the end of the Index + * after lzma_code() has returned LZMA_STREAM_END. + * + * The only valid action value for lzma_code() is LZMA_RUN. + * + * \return - LZMA_OK: Initialization succeeded, continue with lzma_code(). + * - LZMA_MEM_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_index_encoder(lzma_stream *strm, lzma_index *i) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Initialize .xz Index decoder + * + * \param strm Pointer to properly prepared lzma_stream + * \param i Pointer to a pointer that will be made to point + * to the final decoded Index once lzma_code() has + * returned LZMA_STREAM_END. That is, + * lzma_index_decoder() always takes care of + * allocating a new lzma_index structure, and *i + * doesn't need to be initialized by the caller. + * \param memlimit How much memory the resulting Index is allowed + * to require. + * + * The only valid action value for lzma_code() is LZMA_RUN. + * + * \return - LZMA_OK: Initialization succeeded, continue with lzma_code(). + * - LZMA_MEM_ERROR + * - LZMA_MEMLIMIT_ERROR + * - LZMA_PROG_ERROR + * + * \note The memory usage limit is checked early in the decoding + * (within the first dozen input bytes or so). The actual memory + * is allocated later in smaller pieces. If the memory usage + * limit is modified with lzma_memlimit_set() after a part + * of the Index has already been decoded, the new limit may + * get ignored. + */ +extern LZMA_API(lzma_ret) lzma_index_decoder( + lzma_stream *strm, lzma_index **i, uint64_t memlimit) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Single-call .xz Index encoder + * + * \param i Index to be encoded. The read position will be at + * the end of the Index if encoding succeeds, or at + * unspecified position in case an error occurs. + * \param out Beginning of the output buffer + * \param out_pos The next byte will be written to out[*out_pos]. + * *out_pos is updated only if encoding succeeds. + * \param out_size Size of the out buffer; the first byte into + * which no data is written to is out[out_size]. + * + * \return - LZMA_OK: Encoding was successful. + * - LZMA_BUF_ERROR: Output buffer is too small. Use + * lzma_index_size() to find out how much output + * space is needed. + * - LZMA_PROG_ERROR + * + * \note This function doesn't take allocator argument since all + * the internal data is allocated on stack. + */ +extern LZMA_API(lzma_ret) lzma_index_buffer_encode(lzma_index *i, + uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow; + + +/** + * \brief Single-call .xz Index decoder + * + * \param i Pointer to a pointer that will be made to point + * to the final decoded Index if decoding is + * successful. That is, lzma_index_buffer_decode() + * always takes care of allocating a new + * lzma_index structure, and *i doesn't need to be + * initialized by the caller. + * \param memlimit Pointer to how much memory the resulting Index + * is allowed to require. The value pointed by + * this pointer is modified if and only if + * LZMA_MEMLIMIT_ERROR is returned. + * \param allocator Pointer to lzma_allocator, or NULL to use malloc() + * \param in Beginning of the input buffer + * \param in_pos The next byte will be read from in[*in_pos]. + * *in_pos is updated only if decoding succeeds. + * \param in_size Size of the input buffer; the first byte that + * won't be read is in[in_size]. + * + * \return - LZMA_OK: Decoding was successful. + * - LZMA_MEM_ERROR + * - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached. + * The minimum required memlimit value was stored to *memlimit. + * - LZMA_DATA_ERROR + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_index_buffer_decode(lzma_index **i, + uint64_t *memlimit, lzma_allocator *allocator, + const uint8_t *in, size_t *in_pos, size_t in_size) + lzma_nothrow; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/index_hash.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/index_hash.h new file mode 100644 index 00000000000..94726e7beea --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/index_hash.h @@ -0,0 +1,107 @@ +/** + * \file lzma/index_hash.h + * \brief Validates Index by using a hash function + * + * Hashing makes it possible to use constant amount of memory to validate + * Index of arbitrary size. + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + +/** + * \brief Opaque data type to hold the Index hash + */ +typedef struct lzma_index_hash_s lzma_index_hash; + + +/** + * \brief Allocate and initialize a new lzma_index_hash structure + * + * If index_hash is NULL, a new lzma_index_hash structure is allocated, + * initialized, and a pointer to it returned. If allocation fails, NULL + * is returned. + * + * If index_hash is non-NULL, it is reinitialized and the same pointer + * returned. In this case, return value cannot be NULL or a different + * pointer than the index_hash that was given as an argument. + */ +extern LZMA_API(lzma_index_hash *) lzma_index_hash_init( + lzma_index_hash *index_hash, lzma_allocator *allocator) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Deallocate lzma_index_hash structure + */ +extern LZMA_API(void) lzma_index_hash_end( + lzma_index_hash *index_hash, lzma_allocator *allocator) + lzma_nothrow; + + +/** + * \brief Add a new Record to an Index hash + * + * \param index Pointer to a lzma_index_hash structure + * \param unpadded_size Unpadded Size of a Block + * \param uncompressed_size Uncompressed Size of a Block + * + * \return - LZMA_OK + * - LZMA_DATA_ERROR: Compressed or uncompressed size of the + * Stream or size of the Index field would grow too big. + * - LZMA_PROG_ERROR: Invalid arguments or this function is being + * used when lzma_index_hash_decode() has already been used. + */ +extern LZMA_API(lzma_ret) lzma_index_hash_append(lzma_index_hash *index_hash, + lzma_vli unpadded_size, lzma_vli uncompressed_size) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Decode and validate the Index field + * + * After telling the sizes of all Blocks with lzma_index_hash_append(), + * the actual Index field is decoded with this function. Specifically, + * once decoding of the Index field has been started, no more Records + * can be added using lzma_index_hash_append(). + * + * This function doesn't use lzma_stream structure to pass the input data. + * Instead, the input buffer is specified using three arguments. This is + * because it matches better the internal APIs of liblzma. + * + * \param index_hash Pointer to a lzma_index_hash structure + * \param in Pointer to the beginning of the input buffer + * \param in_pos in[*in_pos] is the next byte to process + * \param in_size in[in_size] is the first byte not to process + * + * \return - LZMA_OK: So far good, but more input is needed. + * - LZMA_STREAM_END: Index decoded successfully and it matches + * the Records given with lzma_index_hash_append(). + * - LZMA_DATA_ERROR: Index is corrupt or doesn't match the + * information given with lzma_index_hash_append(). + * - LZMA_BUF_ERROR: Cannot progress because *in_pos >= in_size. + * - LZMA_PROG_ERROR + */ +extern LZMA_API(lzma_ret) lzma_index_hash_decode(lzma_index_hash *index_hash, + const uint8_t *in, size_t *in_pos, size_t in_size) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Get the size of the Index field as bytes + * + * This is needed to verify the Backward Size field in the Stream Footer. + */ +extern LZMA_API(lzma_vli) lzma_index_hash_size( + const lzma_index_hash *index_hash) + lzma_nothrow lzma_attr_pure; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/lzma.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/lzma.h new file mode 100644 index 00000000000..28ebbb14b90 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/lzma.h @@ -0,0 +1,410 @@ +/** + * \file lzma/lzma.h + * \brief LZMA1 and LZMA2 filters + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + + +/** + * \brief LZMA1 Filter ID + * + * LZMA1 is the very same thing as what was called just LZMA in LZMA Utils, + * 7-Zip, and LZMA SDK. It's called LZMA1 here to prevent developers from + * accidentally using LZMA when they actually want LZMA2. + * + * LZMA1 shouldn't be used for new applications unless you _really_ know + * what you are doing. LZMA2 is almost always a better choice. + */ +#define LZMA_FILTER_LZMA1 LZMA_VLI_C(0x4000000000000001) + +/** + * \brief LZMA2 Filter ID + * + * Usually you want this instead of LZMA1. Compared to LZMA1, LZMA2 adds + * support for LZMA_SYNC_FLUSH, uncompressed chunks (smaller expansion + * when trying to compress uncompressible data), possibility to change + * lc/lp/pb in the middle of encoding, and some other internal improvements. + */ +#define LZMA_FILTER_LZMA2 LZMA_VLI_C(0x21) + + +/** + * \brief Match finders + * + * Match finder has major effect on both speed and compression ratio. + * Usually hash chains are faster than binary trees. + * + * The memory usage formulas are only rough estimates, which are closest to + * reality when dict_size is a power of two. The formulas are more complex + * in reality, and can also change a little between liblzma versions. Use + * lzma_memusage_encoder() to get more accurate estimate of memory usage. + */ +typedef enum { + LZMA_MF_HC3 = 0x03, + /**< + * \brief Hash Chain with 2- and 3-byte hashing + * + * Minimum nice_len: 3 + * + * Memory usage: + * - dict_size <= 16 MiB: dict_size * 7.5 + * - dict_size > 16 MiB: dict_size * 5.5 + 64 MiB + */ + + LZMA_MF_HC4 = 0x04, + /**< + * \brief Hash Chain with 2-, 3-, and 4-byte hashing + * + * Minimum nice_len: 4 + * + * Memory usage: dict_size * 7.5 + */ + + LZMA_MF_BT2 = 0x12, + /**< + * \brief Binary Tree with 2-byte hashing + * + * Minimum nice_len: 2 + * + * Memory usage: dict_size * 9.5 + */ + + LZMA_MF_BT3 = 0x13, + /**< + * \brief Binary Tree with 2- and 3-byte hashing + * + * Minimum nice_len: 3 + * + * Memory usage: + * - dict_size <= 16 MiB: dict_size * 11.5 + * - dict_size > 16 MiB: dict_size * 9.5 + 64 MiB + */ + + LZMA_MF_BT4 = 0x14 + /**< + * \brief Binary Tree with 2-, 3-, and 4-byte hashing + * + * Minimum nice_len: 4 + * + * Memory usage: dict_size * 11.5 + */ +} lzma_match_finder; + + +/** + * \brief Test if given match finder is supported + * + * Return true if the given match finder is supported by this liblzma build. + * Otherwise false is returned. It is safe to call this with a value that + * isn't listed in lzma_match_finder enumeration; the return value will be + * false. + * + * There is no way to list which match finders are available in this + * particular liblzma version and build. It would be useless, because + * a new match finder, which the application developer wasn't aware, + * could require giving additional options to the encoder that the older + * match finders don't need. + */ +extern LZMA_API(lzma_bool) lzma_mf_is_supported(lzma_match_finder match_finder) + lzma_nothrow lzma_attr_const; + + +/** + * \brief Compression modes + * + * This selects the function used to analyze the data produced by the match + * finder. + */ +typedef enum { + LZMA_MODE_FAST = 1, + /**< + * \brief Fast compression + * + * Fast mode is usually at its best when combined with + * a hash chain match finder. + */ + + LZMA_MODE_NORMAL = 2 + /**< + * \brief Normal compression + * + * This is usually notably slower than fast mode. Use this + * together with binary tree match finders to expose the + * full potential of the LZMA1 or LZMA2 encoder. + */ +} lzma_mode; + + +/** + * \brief Test if given compression mode is supported + * + * Return true if the given compression mode is supported by this liblzma + * build. Otherwise false is returned. It is safe to call this with a value + * that isn't listed in lzma_mode enumeration; the return value will be false. + * + * There is no way to list which modes are available in this particular + * liblzma version and build. It would be useless, because a new compression + * mode, which the application developer wasn't aware, could require giving + * additional options to the encoder that the older modes don't need. + */ +extern LZMA_API(lzma_bool) lzma_mode_is_supported(lzma_mode mode) + lzma_nothrow lzma_attr_const; + + +/** + * \brief Options specific to the LZMA1 and LZMA2 filters + * + * Since LZMA1 and LZMA2 share most of the code, it's simplest to share + * the options structure too. For encoding, all but the reserved variables + * need to be initialized unless specifically mentioned otherwise. + * + * For raw decoding, both LZMA1 and LZMA2 need dict_size, preset_dict, and + * preset_dict_size (if preset_dict != NULL). LZMA1 needs also lc, lp, and pb. + */ +typedef struct { + /** + * \brief Dictionary size in bytes + * + * Dictionary size indicates how many bytes of the recently processed + * uncompressed data is kept in memory. One method to reduce size of + * the uncompressed data is to store distance-length pairs, which + * indicate what data to repeat from the dictionary buffer. Thus, + * the bigger the dictionary, the better the compression ratio + * usually is. + * + * Maximum size of the dictionary depends on multiple things: + * - Memory usage limit + * - Available address space (not a problem on 64-bit systems) + * - Selected match finder (encoder only) + * + * Currently the maximum dictionary size for encoding is 1.5 GiB + * (i.e. (UINT32_C(1) << 30) + (UINT32_C(1) << 29)) even on 64-bit + * systems for certain match finder implementation reasons. In the + * future, there may be match finders that support bigger + * dictionaries. + * + * Decoder already supports dictionaries up to 4 GiB - 1 B (i.e. + * UINT32_MAX), so increasing the maximum dictionary size of the + * encoder won't cause problems for old decoders. + * + * Because extremely small dictionaries sizes would have unneeded + * overhead in the decoder, the minimum dictionary size is 4096 bytes. + * + * \note When decoding, too big dictionary does no other harm + * than wasting memory. + */ + uint32_t dict_size; +# define LZMA_DICT_SIZE_MIN UINT32_C(4096) +# define LZMA_DICT_SIZE_DEFAULT (UINT32_C(1) << 23) + + /** + * \brief Pointer to an initial dictionary + * + * It is possible to initialize the LZ77 history window using + * a preset dictionary. It is useful when compressing many + * similar, relatively small chunks of data independently from + * each other. The preset dictionary should contain typical + * strings that occur in the files being compressed. The most + * probable strings should be near the end of the preset dictionary. + * + * This feature should be used only in special situations. For + * now, it works correctly only with raw encoding and decoding. + * Currently none of the container formats supported by + * liblzma allow preset dictionary when decoding, thus if + * you create a .xz or .lzma file with preset dictionary, it + * cannot be decoded with the regular decoder functions. In the + * future, the .xz format will likely get support for preset + * dictionary though. + */ + const uint8_t *preset_dict; + + /** + * \brief Size of the preset dictionary + * + * Specifies the size of the preset dictionary. If the size is + * bigger than dict_size, only the last dict_size bytes are + * processed. + * + * This variable is read only when preset_dict is not NULL. + * If preset_dict is not NULL but preset_dict_size is zero, + * no preset dictionary is used (identical to only setting + * preset_dict to NULL). + */ + uint32_t preset_dict_size; + + /** + * \brief Number of literal context bits + * + * How many of the highest bits of the previous uncompressed + * eight-bit byte (also known as `literal') are taken into + * account when predicting the bits of the next literal. + * + * \todo Example + * + * There is a limit that applies to literal context bits and literal + * position bits together: lc + lp <= 4. Without this limit the + * decoding could become very slow, which could have security related + * results in some cases like email servers doing virus scanning. + * This limit also simplifies the internal implementation in liblzma. + * + * There may be LZMA1 streams that have lc + lp > 4 (maximum possible + * lc would be 8). It is not possible to decode such streams with + * liblzma. + */ + uint32_t lc; +# define LZMA_LCLP_MIN 0 +# define LZMA_LCLP_MAX 4 +# define LZMA_LC_DEFAULT 3 + + /** + * \brief Number of literal position bits + * + * How many of the lowest bits of the current position (number + * of bytes from the beginning of the uncompressed data) in the + * uncompressed data is taken into account when predicting the + * bits of the next literal (a single eight-bit byte). + * + * \todo Example + */ + uint32_t lp; +# define LZMA_LP_DEFAULT 0 + + /** + * \brief Number of position bits + * + * How many of the lowest bits of the current position in the + * uncompressed data is taken into account when estimating + * probabilities of matches. A match is a sequence of bytes for + * which a matching sequence is found from the dictionary and + * thus can be stored as distance-length pair. + * + * Example: If most of the matches occur at byte positions of + * 8 * n + 3, that is, 3, 11, 19, ... set pb to 3, because 2**3 == 8. + */ + uint32_t pb; +# define LZMA_PB_MIN 0 +# define LZMA_PB_MAX 4 +# define LZMA_PB_DEFAULT 2 + + /** + * \brief Indicate if the options structure is persistent + * + * If this is true, the application must keep this options structure + * available after the LZMA2 encoder has been initialized. With + * persistent structure it is possible to change some encoder options + * in the middle of the encoding process without resetting the encoder. + * + * This option is used only by LZMA2. LZMA1 ignores this and it is + * safe to not initialize this when encoding with LZMA1. + */ + lzma_bool persistent; + + /** Compression mode */ + lzma_mode mode; + + /** + * \brief Nice length of a match + * + * This determines how many bytes the encoder compares from the match + * candidates when looking for the best match. Once a match of at + * least nice_len bytes long is found, the encoder stops looking for + * better condidates and encodes the match. (Naturally, if the found + * match is actually longer than nice_len, the actual length is + * encoded; it's not truncated to nice_len.) + * + * Bigger values usually increase the compression ratio and + * compression time. For most files, 32 to 128 is a good value, + * which gives very good compression ratio at good speed. + * + * The exact minimum value depends on the match finder. The maximum + * is 273, which is the maximum length of a match that LZMA1 and + * LZMA2 can encode. + */ + uint32_t nice_len; + + /** Match finder ID */ + lzma_match_finder mf; + + /** + * \brief Maximum search depth in the match finder + * + * For every input byte, match finder searches through the hash chain + * or binary tree in a loop, each iteration going one step deeper in + * the chain or tree. The searching stops if + * - a match of at least nice_len bytes long is found; + * - all match candidates from the hash chain or binary tree have + * been checked; or + * - maximum search depth is reached. + * + * Maximum search depth is needed to prevent the match finder from + * wasting too much time in case there are lots of short match + * candidates. On the other hand, stopping the search before all + * candidates have been checked can reduce compression ratio. + * + * Setting depth to zero tells liblzma to use an automatic default + * value, that depends on the selected match finder and nice_len. + * The default is in the range [10, 200] or so (it may vary between + * liblzma versions). + * + * Using a bigger depth value than the default can increase + * compression ratio in some cases. There is no strict maximum value, + * but high values (thousands or millions) should be used with care: + * the encoder could remain fast enough with typical input, but + * malicious input could cause the match finder to slow down + * dramatically, possibly creating a denial of service attack. + */ + uint32_t depth; + + /* + * Reserved space to allow possible future extensions without + * breaking the ABI. You should not touch these, because the names + * of these variables may change. These are and will never be used + * with the currently supported options, so it is safe to leave these + * uninitialized. + */ + void *reserved_ptr1; + void *reserved_ptr2; + uint32_t reserved_int1; + uint32_t reserved_int2; + uint32_t reserved_int3; + uint32_t reserved_int4; + uint32_t reserved_int5; + uint32_t reserved_int6; + uint32_t reserved_int7; + uint32_t reserved_int8; + lzma_reserved_enum reserved_enum1; + lzma_reserved_enum reserved_enum2; + lzma_reserved_enum reserved_enum3; + lzma_reserved_enum reserved_enum4; + +} lzma_options_lzma; + + +/** + * \brief Set a compression preset to lzma_options_lzma structure + * + * 0 is the fastest and 9 is the slowest. These match the switches -0 .. -9 + * of the xz command line tool. In addition, it is possible to bitwise-or + * flags to the preset. Currently only LZMA_PRESET_EXTREME is supported. + * The flags are defined in container.h, because the flags are used also + * with lzma_easy_encoder(). + * + * The preset values are subject to changes between liblzma versions. + * + * This function is available only if LZMA1 or LZMA2 encoder has been enabled + * when building liblzma. + */ +extern LZMA_API(lzma_bool) lzma_lzma_preset( + lzma_options_lzma *options, uint32_t preset) lzma_nothrow; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/stream_flags.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/stream_flags.h new file mode 100644 index 00000000000..d255bdda15f --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/stream_flags.h @@ -0,0 +1,227 @@ +/** + * \file lzma/stream_flags.h + * \brief .xz Stream Header and Stream Footer encoder and decoder + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + + +/** + * \brief Size of Stream Header and Stream Footer + * + * Stream Header and Stream Footer have the same size and they are not + * going to change even if a newer version of the .xz file format is + * developed in future. + */ +#define LZMA_STREAM_HEADER_SIZE 12 + + +/** + * \brief Options for encoding/decoding Stream Header and Stream Footer + */ +typedef struct { + /** + * \brief Stream Flags format version + * + * To prevent API and ABI breakages if new features are needed in + * Stream Header or Stream Footer, a version number is used to + * indicate which fields in this structure are in use. For now, + * version must always be zero. With non-zero version, the + * lzma_stream_header_encode() and lzma_stream_footer_encode() + * will return LZMA_OPTIONS_ERROR. + * + * lzma_stream_header_decode() and lzma_stream_footer_decode() + * will always set this to the lowest value that supports all the + * features indicated by the Stream Flags field. The application + * must check that the version number set by the decoding functions + * is supported by the application. Otherwise it is possible that + * the application will decode the Stream incorrectly. + */ + uint32_t version; + + /** + * \brief Backward Size + * + * Backward Size must be a multiple of four bytes. In this Stream + * format version, Backward Size is the size of the Index field. + * + * Backward Size isn't actually part of the Stream Flags field, but + * it is convenient to include in this structure anyway. Backward + * Size is present only in the Stream Footer. There is no need to + * initialize backward_size when encoding Stream Header. + * + * lzma_stream_header_decode() always sets backward_size to + * LZMA_VLI_UNKNOWN so that it is convenient to use + * lzma_stream_flags_compare() when both Stream Header and Stream + * Footer have been decoded. + */ + lzma_vli backward_size; +# define LZMA_BACKWARD_SIZE_MIN 4 +# define LZMA_BACKWARD_SIZE_MAX (LZMA_VLI_C(1) << 34) + + /** + * \brief Check ID + * + * This indicates the type of the integrity check calculated from + * uncompressed data. + */ + lzma_check check; + + /* + * Reserved space to allow possible future extensions without + * breaking the ABI. You should not touch these, because the + * names of these variables may change. + * + * (We will never be able to use all of these since Stream Flags + * is just two bytes plus Backward Size of four bytes. But it's + * nice to have the proper types when they are needed.) + */ + lzma_reserved_enum reserved_enum1; + lzma_reserved_enum reserved_enum2; + lzma_reserved_enum reserved_enum3; + lzma_reserved_enum reserved_enum4; + lzma_reserved_enum reserved_enum5; + lzma_reserved_enum reserved_enum6; + lzma_bool reserved_bool1; + lzma_bool reserved_bool2; + lzma_bool reserved_bool3; + lzma_bool reserved_bool4; + lzma_bool reserved_bool5; + lzma_bool reserved_bool6; + lzma_bool reserved_bool7; + lzma_bool reserved_bool8; + uint32_t reserved_int1; + uint32_t reserved_int2; + uint32_t reserved_int3; + uint32_t reserved_int4; + +} lzma_stream_flags; + + +/** + * \brief Encode Stream Header + * + * \param options Stream Header options to be encoded. + * options->backward_size is ignored and doesn't + * need to be initialized. + * \param out Beginning of the output buffer of + * LZMA_STREAM_HEADER_SIZE bytes. + * + * \return - LZMA_OK: Encoding was successful. + * - LZMA_OPTIONS_ERROR: options->version is not supported by + * this liblzma version. + * - LZMA_PROG_ERROR: Invalid options. + */ +extern LZMA_API(lzma_ret) lzma_stream_header_encode( + const lzma_stream_flags *options, uint8_t *out) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Encode Stream Footer + * + * \param options Stream Footer options to be encoded. + * \param out Beginning of the output buffer of + * LZMA_STREAM_HEADER_SIZE bytes. + * + * \return - LZMA_OK: Encoding was successful. + * - LZMA_OPTIONS_ERROR: options->version is not supported by + * this liblzma version. + * - LZMA_PROG_ERROR: Invalid options. + */ +extern LZMA_API(lzma_ret) lzma_stream_footer_encode( + const lzma_stream_flags *options, uint8_t *out) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Decode Stream Header + * + * \param options Stream Header options to be encoded. + * \param in Beginning of the input buffer of + * LZMA_STREAM_HEADER_SIZE bytes. + * + * options->backward_size is always set to LZMA_VLI_UNKNOWN. This is to + * help comparing Stream Flags from Stream Header and Stream Footer with + * lzma_stream_flags_compare(). + * + * \return - LZMA_OK: Decoding was successful. + * - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given + * buffer cannot be Stream Header. + * - LZMA_DATA_ERROR: CRC32 doesn't match, thus the header + * is corrupt. + * - LZMA_OPTIONS_ERROR: Unsupported options are present + * in the header. + * + * \note When decoding .xz files that contain multiple Streams, it may + * make sense to print "file format not recognized" only if + * decoding of the Stream Header of the _first_ Stream gives + * LZMA_FORMAT_ERROR. If non-first Stream Header gives + * LZMA_FORMAT_ERROR, the message used for LZMA_DATA_ERROR is + * probably more appropriate. + * + * For example, Stream decoder in liblzma uses LZMA_DATA_ERROR if + * LZMA_FORMAT_ERROR is returned by lzma_stream_header_decode() + * when decoding non-first Stream. + */ +extern LZMA_API(lzma_ret) lzma_stream_header_decode( + lzma_stream_flags *options, const uint8_t *in) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Decode Stream Footer + * + * \param options Stream Header options to be encoded. + * \param in Beginning of the input buffer of + * LZMA_STREAM_HEADER_SIZE bytes. + * + * \return - LZMA_OK: Decoding was successful. + * - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given + * buffer cannot be Stream Footer. + * - LZMA_DATA_ERROR: CRC32 doesn't match, thus the Stream Footer + * is corrupt. + * - LZMA_OPTIONS_ERROR: Unsupported options are present + * in Stream Footer. + * + * \note If Stream Header was already decoded successfully, but + * decoding Stream Footer returns LZMA_FORMAT_ERROR, the + * application should probably report some other error message + * than "file format not recognized", since the file more likely + * is corrupt (possibly truncated). Stream decoder in liblzma + * uses LZMA_DATA_ERROR in this situation. + */ +extern LZMA_API(lzma_ret) lzma_stream_footer_decode( + lzma_stream_flags *options, const uint8_t *in) + lzma_nothrow lzma_attr_warn_unused_result; + + +/** + * \brief Compare two lzma_stream_flags structures + * + * backward_size values are compared only if both are not + * LZMA_VLI_UNKNOWN. + * + * \return - LZMA_OK: Both are equal. If either had backward_size set + * to LZMA_VLI_UNKNOWN, backward_size values were not + * compared or validated. + * - LZMA_DATA_ERROR: The structures differ. + * - LZMA_OPTIONS_ERROR: version in either structure is greater + * than the maximum supported version (currently zero). + * - LZMA_PROG_ERROR: Invalid value, e.g. invalid check or + * backward_size. + */ +extern LZMA_API(lzma_ret) lzma_stream_flags_compare( + const lzma_stream_flags *a, const lzma_stream_flags *b) + lzma_nothrow lzma_attr_pure; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/subblock.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/subblock.h new file mode 100644 index 00000000000..4ffb049824b --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/subblock.h @@ -0,0 +1,200 @@ +/** + * \file lzma/subblock.h + * \brief Subblock filter + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + + +/** + * \brief Filter ID + * + * Filter ID of the Subblock filter. This is used as lzma_filter.id. + */ +#define LZMA_FILTER_SUBBLOCK LZMA_VLI_C(0x01) + + +/** + * \brief Subfilter mode + * + * See lzma_options_subblock.subfilter_mode for details. + */ +typedef enum { + LZMA_SUBFILTER_NONE, + /**< + * No Subfilter is in use. + */ + + LZMA_SUBFILTER_SET, + /**< + * New Subfilter has been requested to be initialized. + */ + + LZMA_SUBFILTER_RUN, + /**< + * Subfilter is active. + */ + + LZMA_SUBFILTER_FINISH + /**< + * Subfilter has been requested to be finished. + */ +} lzma_subfilter_mode; + + +/** + * \brief Options for the Subblock filter + * + * Specifying options for the Subblock filter is optional: if the pointer + * options is NULL, no subfilters are allowed and the default value is used + * for subblock_data_size. + */ +typedef struct { + /* Options for encoder and decoder */ + + /** + * \brief Allowing subfilters + * + * If this true, subfilters are allowed. + * + * In the encoder, if this is set to false, subfilter_mode and + * subfilter_options are completely ignored. + */ + lzma_bool allow_subfilters; + + /* Options for encoder only */ + + /** + * \brief Alignment + * + * The Subblock filter encapsulates the input data into Subblocks. + * Each Subblock has a header which takes a few bytes of space. + * When the output of the Subblock encoder is fed to another filter + * that takes advantage of the alignment of the input data (e.g. LZMA), + * the Subblock filter can add padding to keep the actual data parts + * in the Subblocks aligned correctly. + * + * The alignment should be a positive integer. Subblock filter will + * add enough padding between Subblocks so that this is true for + * every payload byte: + * input_offset % alignment == output_offset % alignment + * + * The Subblock filter assumes that the first output byte will be + * written to a position in the output stream that is properly + * aligned. This requirement is automatically met when the start + * offset of the Stream or Block is correctly told to Block or + * Stream encoder. + */ + uint32_t alignment; +# define LZMA_SUBBLOCK_ALIGNMENT_MIN 1 +# define LZMA_SUBBLOCK_ALIGNMENT_MAX 32 +# define LZMA_SUBBLOCK_ALIGNMENT_DEFAULT 4 + + /** + * \brief Size of the Subblock Data part of each Subblock + * + * This value is re-read every time a new Subblock is started. + * + * Bigger values + * - save a few bytes of space; + * - increase latency in the encoder (but no effect for decoding); + * - decrease memory locality (increased cache pollution) in the + * encoder (no effect in decoding). + */ + uint32_t subblock_data_size; +# define LZMA_SUBBLOCK_DATA_SIZE_MIN 1 +# define LZMA_SUBBLOCK_DATA_SIZE_MAX (UINT32_C(1) << 28) +# define LZMA_SUBBLOCK_DATA_SIZE_DEFAULT 4096 + + /** + * \brief Run-length encoder remote control + * + * The Subblock filter has an internal run-length encoder (RLE). It + * can be useful when the data includes byte sequences that repeat + * very many times. The RLE can be used also when a Subfilter is + * in use; the RLE will be applied to the output of the Subfilter. + * + * Note that in contrast to traditional RLE, this RLE is intended to + * be used only when there's a lot of data to be repeated. If the + * input data has e.g. 500 bytes of NULs now and then, this RLE + * is probably useless, because plain LZMA should provide better + * results. + * + * Due to above reasons, it was decided to keep the implementation + * of the RLE very simple. When the rle variable is non-zero, it + * subblock_data_size must be a multiple of rle. Once the Subblock + * encoder has got subblock_data_size bytes of input, it will check + * if the whole buffer of the last subblock_data_size can be + * represented with repeats of chunks having size of rle bytes. + * + * If there are consecutive identical buffers of subblock_data_size + * bytes, they will be encoded using a single repeat entry if + * possible. + * + * If need arises, more advanced RLE can be implemented later + * without breaking API or ABI. + */ + uint32_t rle; +# define LZMA_SUBBLOCK_RLE_OFF 0 +# define LZMA_SUBBLOCK_RLE_MIN 1 +# define LZMA_SUBBLOCK_RLE_MAX 256 + + /** + * \brief Subfilter remote control + * + * When the Subblock filter is initialized, this variable must be + * LZMA_SUBFILTER_NONE or LZMA_SUBFILTER_SET. + * + * When subfilter_mode is LZMA_SUBFILTER_NONE, the application may + * put Subfilter options to subfilter_options structure, and then + * set subfilter_mode to LZMA_SUBFILTER_SET. No new input data will + * be read until the Subfilter has been enabled. Once the Subfilter + * has been enabled, liblzma will set subfilter_mode to + * LZMA_SUBFILTER_RUN. + * + * When subfilter_mode is LZMA_SUBFILTER_RUN, the application may + * set subfilter_mode to LZMA_SUBFILTER_FINISH. All the input + * currently available will be encoded before unsetting the + * Subfilter. Application must not change the amount of available + * input until the Subfilter has finished. Once the Subfilter has + * finished, liblzma will set subfilter_mode to LZMA_SUBFILTER_NONE. + * + * If the intent is to have Subfilter enabled to the very end of + * the data, it is not needed to separately disable Subfilter with + * LZMA_SUBFILTER_FINISH. Using LZMA_FINISH as the second argument + * of lzma_code() will make the Subblock encoder to disable the + * Subfilter once all the data has been ran through the Subfilter. + * + * After the first call with LZMA_SYNC_FLUSH or LZMA_FINISH, the + * application must not change subfilter_mode until LZMA_STREAM_END. + * Setting LZMA_SUBFILTER_SET/LZMA_SUBFILTER_FINISH and + * LZMA_SYNC_FLUSH/LZMA_FINISH _at the same time_ is fine. + * + * \note This variable is ignored if allow_subfilters is false. + */ + lzma_subfilter_mode subfilter_mode; + + /** + * \brief Subfilter and its options + * + * When no Subfilter is used, the data is copied as is into Subblocks. + * Setting a Subfilter allows encoding some parts of the data with + * an additional filter. It is possible to many different Subfilters + * in the same Block, although only one can be used at once. + * + * \note This variable is ignored if allow_subfilters is false. + */ + lzma_filter subfilter_options; + +} lzma_options_subblock; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/version.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/version.h new file mode 100644 index 00000000000..36b7952dce8 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/version.h @@ -0,0 +1,121 @@ +/** + * \file lzma/version.h + * \brief Version number + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + + +/* + * Version number splitted in components + */ +#define LZMA_VERSION_MAJOR 4 +#define LZMA_VERSION_MINOR 999 +#define LZMA_VERSION_PATCH 9 +#define LZMA_VERSION_STABILITY LZMA_VERSION_STABILITY_BETA + +#ifndef LZMA_VERSION_COMMIT +# define LZMA_VERSION_COMMIT "" +#endif + + +/* + * Map symbolic stability levels to integers. + */ +#define LZMA_VERSION_STABILITY_ALPHA 0 +#define LZMA_VERSION_STABILITY_BETA 1 +#define LZMA_VERSION_STABILITY_STABLE 2 + + +/** + * \brief Compile-time version number + * + * The version number is of format xyyyzzzs where + * - x = major + * - yyy = minor + * - zzz = revision + * - s indicates stability: 0 = alpha, 1 = beta, 2 = stable + * + * The same xyyyzzz triplet is never reused with different stability levels. + * For example, if 5.1.0alpha has been released, there will never be 5.1.0beta + * or 5.1.0 stable. + * + * \note The version number of liblzma has nothing to with + * the version number of Igor Pavlov's LZMA SDK. + */ +#define LZMA_VERSION (LZMA_VERSION_MAJOR * UINT32_C(10000000) \ + + LZMA_VERSION_MINOR * UINT32_C(10000) \ + + LZMA_VERSION_PATCH * UINT32_C(10) \ + + LZMA_VERSION_STABILITY) + + +/* + * Macros to construct the compile-time version string + */ +#if LZMA_VERSION_STABILITY == LZMA_VERSION_STABILITY_ALPHA +# define LZMA_VERSION_STABILITY_STRING "alpha" +#elif LZMA_VERSION_STABILITY == LZMA_VERSION_STABILITY_BETA +# define LZMA_VERSION_STABILITY_STRING "beta" +#elif LZMA_VERSION_STABILITY == LZMA_VERSION_STABILITY_STABLE +# define LZMA_VERSION_STABILITY_STRING "" +#else +# error Incorrect LZMA_VERSION_STABILITY +#endif + +#define LZMA_VERSION_STRING_C_(major, minor, patch, stability, commit) \ + #major "." #minor "." #patch stability commit + +#define LZMA_VERSION_STRING_C(major, minor, patch, stability, commit) \ + LZMA_VERSION_STRING_C_(major, minor, patch, stability, commit) + + +/** + * \brief Compile-time version as a string + * + * This can be for example "4.999.5alpha", "4.999.8beta", or "5.0.0" (stable + * versions don't have any "stable" suffix). In future, a snapshot built + * from source code repository may include an additional suffix, for example + * "4.999.8beta-21-g1d92". The commit ID won't be available in numeric form + * in LZMA_VERSION macro. + */ +#define LZMA_VERSION_STRING LZMA_VERSION_STRING_C( \ + LZMA_VERSION_MAJOR, LZMA_VERSION_MINOR, \ + LZMA_VERSION_PATCH, LZMA_VERSION_STABILITY_STRING, \ + LZMA_VERSION_COMMIT) + + +/* #ifndef is needed for use with windres (MinGW or Cygwin). */ +#ifndef LZMA_H_INTERNAL_RC + +/** + * \brief Run-time version number as an integer + * + * Return the value of LZMA_VERSION macro at the compile time of liblzma. + * This allows the application to compare if it was built against the same, + * older, or newer version of liblzma that is currently running. + */ +extern LZMA_API(uint32_t) lzma_version_number(void) + lzma_nothrow lzma_attr_const; + + +/** + * \brief Run-time version as a string + * + * This function may be useful if you want to display which version of + * liblzma your application is currently using. + */ +extern LZMA_API(const char *) lzma_version_string(void) + lzma_nothrow lzma_attr_const; + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/vli.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/vli.h new file mode 100644 index 00000000000..f002c775165 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/api/lzma/vli.h @@ -0,0 +1,168 @@ +/** + * \file lzma/vli.h + * \brief Variable-length integer handling + * + * In the .xz format, most integers are encoded in a variable-length + * representation, which is sometimes called little endian base-128 encoding. + * This saves space when smaller values are more likely than bigger values. + * + * The encoding scheme encodes seven bits to every byte, using minimum + * number of bytes required to represent the given value. Encodings that use + * non-minimum number of bytes are invalid, thus every integer has exactly + * one encoded representation. The maximum number of bits in a VLI is 63, + * thus the vli argument must be at maximum of UINT64_MAX / 2. You should + * use LZMA_VLI_MAX for clarity. + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use instead. +#endif + + +/** + * \brief Maximum supported value of variable-length integer + */ +#define LZMA_VLI_MAX (UINT64_MAX / 2) + +/** + * \brief VLI value to denote that the value is unknown + */ +#define LZMA_VLI_UNKNOWN UINT64_MAX + +/** + * \brief Maximum supported length of variable length integers + */ +#define LZMA_VLI_BYTES_MAX 9 + + +/** + * \brief VLI constant suffix + */ +#define LZMA_VLI_C(n) UINT64_C(n) + + +/** + * \brief Variable-length integer type + * + * This will always be unsigned integer. Valid VLI values are in the range + * [0, LZMA_VLI_MAX]. Unknown value is indicated with LZMA_VLI_UNKNOWN, + * which is the maximum value of the underlaying integer type. + * + * In future, even if lzma_vli is typdefined to something else than uint64_t, + * it is guaranteed that 2 * LZMA_VLI_MAX will not overflow lzma_vli. + * This simplifies integer overflow detection. + */ +typedef uint64_t lzma_vli; + + +/** + * \brief Simple macro to validate variable-length integer + * + * This is useful to test that application has given acceptable values + * for example in the uncompressed_size and compressed_size variables. + * + * \return True if the integer is representable as VLI or if it + * indicates unknown value. + */ +#define lzma_vli_is_valid(vli) \ + ((vli) <= LZMA_VLI_MAX || (vli) == LZMA_VLI_UNKNOWN) + + +/** + * \brief Encode a variable-length integer + * + * This function has two modes: single-call and multi-call. Single-call mode + * encodes the whole integer at once; it is an error if the output buffer is + * too small. Multi-call mode saves the position in *vli_pos, and thus it is + * possible to continue encoding if the buffer becomes full before the whole + * integer has been encoded. + * + * \param vli Integer to be encoded + * \param vli_pos How many VLI-encoded bytes have already been written + * out. When starting to encode a new integer, *vli_pos + * must be set to zero. To use single-call encoding, + * set vli_pos to NULL. + * \param out Beginning of the output buffer + * \param out_pos The next byte will be written to out[*out_pos]. + * \param out_size Size of the out buffer; the first byte into + * which no data is written to is out[out_size]. + * + * \return Slightly different return values are used in multi-call and + * single-call modes. + * + * Single-call (vli_pos == NULL): + * - LZMA_OK: Integer successfully encoded. + * - LZMA_PROG_ERROR: Arguments are not sane. This can be due + * to too little output space; single-call mode doesn't use + * LZMA_BUF_ERROR, since the application should have checked + * the encoded size with lzma_vli_size(). + * + * Multi-call (vli_pos != NULL): + * - LZMA_OK: So far all OK, but the integer is not + * completely written out yet. + * - LZMA_STREAM_END: Integer successfully encoded. + * - LZMA_BUF_ERROR: No output space was provided. + * - LZMA_PROG_ERROR: Arguments are not sane. + */ +extern LZMA_API(lzma_ret) lzma_vli_encode(lzma_vli vli, + size_t *lzma_restrict vli_pos, uint8_t *lzma_restrict out, + size_t *lzma_restrict out_pos, size_t out_size) lzma_nothrow; + + +/** + * \brief Decode a variable-length integer + * + * Like lzma_vli_encode(), this function has single-call and multi-call modes. + * + * \param vli Pointer to decoded integer. The decoder will + * initialize it to zero when *vli_pos == 0, so + * application isn't required to initialize *vli. + * \param vli_pos How many bytes have already been decoded. When + * starting to decode a new integer, *vli_pos must + * be initialized to zero. To use single-call decoding, + * set this to NULL. + * \param in Beginning of the input buffer + * \param in_pos The next byte will be read from in[*in_pos]. + * \param in_size Size of the input buffer; the first byte that + * won't be read is in[in_size]. + * + * \return Slightly different return values are used in multi-call and + * single-call modes. + * + * Single-call (vli_pos == NULL): + * - LZMA_OK: Integer successfully decoded. + * - LZMA_DATA_ERROR: Integer is corrupt. This includes hitting + * the end of the input buffer before the whole integer was + * decoded; providing no input at all will use LZMA_DATA_ERROR. + * - LZMA_PROG_ERROR: Arguments are not sane. + * + * Multi-call (vli_pos != NULL): + * - LZMA_OK: So far all OK, but the integer is not + * completely decoded yet. + * - LZMA_STREAM_END: Integer successfully decoded. + * - LZMA_DATA_ERROR: Integer is corrupt. + * - LZMA_BUF_ERROR: No input was provided. + * - LZMA_PROG_ERROR: Arguments are not sane. + */ +extern LZMA_API(lzma_ret) lzma_vli_decode(lzma_vli *lzma_restrict vli, + size_t *lzma_restrict vli_pos, const uint8_t *lzma_restrict in, + size_t *lzma_restrict in_pos, size_t in_size) lzma_nothrow; + + +/** + * \brief Get the number of bytes required to encode a VLI + * + * \return Number of bytes on success (1-9). If vli isn't valid, + * zero is returned. + */ +extern LZMA_API(uint32_t) lzma_vli_size(lzma_vli vli) + lzma_nothrow lzma_attr_pure; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/Makefile.inc b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/Makefile.inc new file mode 100644 index 00000000000..e4067a9cbcb --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/Makefile.inc @@ -0,0 +1,51 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +EXTRA_DIST += \ + check/crc32_tablegen.c \ + check/crc64_tablegen.c + +liblzma_la_SOURCES += \ + check/check.c \ + check/check.h \ + check/crc_macros.h + +if COND_CHECK_CRC32 +if COND_SMALL +liblzma_la_SOURCES += check/crc32_small.c +else +liblzma_la_SOURCES += \ + check/crc32_table.c \ + check/crc32_table_le.h \ + check/crc32_table_be.h +if COND_ASM_X86 +liblzma_la_SOURCES += check/crc32_x86.S +else +liblzma_la_SOURCES += check/crc32_fast.c +endif +endif +endif + +if COND_CHECK_CRC64 +if COND_SMALL +liblzma_la_SOURCES += check/crc64_small.c +else +liblzma_la_SOURCES += \ + check/crc64_table.c \ + check/crc64_table_le.h \ + check/crc64_table_be.h +if COND_ASM_X86 +liblzma_la_SOURCES += check/crc64_x86.S +else +liblzma_la_SOURCES += check/crc64_fast.c +endif +endif +endif + +if COND_CHECK_SHA256 +liblzma_la_SOURCES += check/sha256.c +endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/check.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/check.c new file mode 100644 index 00000000000..ba8622e6376 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/check.c @@ -0,0 +1,174 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file check.c +/// \brief Single API to access different integrity checks +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "check.h" + + +extern LZMA_API(lzma_bool) +lzma_check_is_supported(lzma_check type) +{ + if ((unsigned int)(type) > LZMA_CHECK_ID_MAX) + return false; + + static const lzma_bool available_checks[LZMA_CHECK_ID_MAX + 1] = { + true, // LZMA_CHECK_NONE + +#ifdef HAVE_CHECK_CRC32 + true, +#else + false, +#endif + + false, // Reserved + false, // Reserved + +#ifdef HAVE_CHECK_CRC64 + true, +#else + false, +#endif + + false, // Reserved + false, // Reserved + false, // Reserved + false, // Reserved + false, // Reserved + +#ifdef HAVE_CHECK_SHA256 + true, +#else + false, +#endif + + false, // Reserved + false, // Reserved + false, // Reserved + false, // Reserved + false, // Reserved + }; + + return available_checks[(unsigned int)(type)]; +} + + +extern LZMA_API(uint32_t) +lzma_check_size(lzma_check type) +{ + if ((unsigned int)(type) > LZMA_CHECK_ID_MAX) + return UINT32_MAX; + + // See file-format.txt section 2.1.1.2. + static const uint8_t check_sizes[LZMA_CHECK_ID_MAX + 1] = { + 0, + 4, 4, 4, + 8, 8, 8, + 16, 16, 16, + 32, 32, 32, + 64, 64, 64 + }; + + return check_sizes[(unsigned int)(type)]; +} + + +extern void +lzma_check_init(lzma_check_state *check, lzma_check type) +{ + switch (type) { + case LZMA_CHECK_NONE: + break; + +#ifdef HAVE_CHECK_CRC32 + case LZMA_CHECK_CRC32: + check->state.crc32 = 0; + break; +#endif + +#ifdef HAVE_CHECK_CRC64 + case LZMA_CHECK_CRC64: + check->state.crc64 = 0; + break; +#endif + +#ifdef HAVE_CHECK_SHA256 + case LZMA_CHECK_SHA256: + lzma_sha256_init(check); + break; +#endif + + default: + break; + } + + return; +} + + +extern void +lzma_check_update(lzma_check_state *check, lzma_check type, + const uint8_t *buf, size_t size) +{ + switch (type) { +#ifdef HAVE_CHECK_CRC32 + case LZMA_CHECK_CRC32: + check->state.crc32 = lzma_crc32(buf, size, check->state.crc32); + break; +#endif + +#ifdef HAVE_CHECK_CRC64 + case LZMA_CHECK_CRC64: + check->state.crc64 = lzma_crc64(buf, size, check->state.crc64); + break; +#endif + +#ifdef HAVE_CHECK_SHA256 + case LZMA_CHECK_SHA256: + lzma_sha256_update(buf, size, check); + break; +#endif + + default: + break; + } + + return; +} + + +extern void +lzma_check_finish(lzma_check_state *check, lzma_check type) +{ + switch (type) { +#ifdef HAVE_CHECK_CRC32 + case LZMA_CHECK_CRC32: + check->buffer.u32[0] = integer_le_32(check->state.crc32); + break; +#endif + +#ifdef HAVE_CHECK_CRC64 + case LZMA_CHECK_CRC64: + check->buffer.u64[0] = integer_le_64(check->state.crc64); + break; +#endif + +#ifdef HAVE_CHECK_SHA256 + case LZMA_CHECK_SHA256: + lzma_sha256_finish(check); + break; +#endif + + default: + break; + } + + return; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/check.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/check.h new file mode 100644 index 00000000000..e100d2b8530 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/check.h @@ -0,0 +1,95 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file check.h +/// \brief Internal API to different integrity check functions +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_CHECK_H +#define LZMA_CHECK_H + +#include "common.h" + + +// Index hashing needs the best possible hash function (preferably +// a cryptographic hash) for maximum reliability. +#if defined(HAVE_CHECK_SHA256) +# define LZMA_CHECK_BEST LZMA_CHECK_SHA256 +#elif defined(HAVE_CHECK_CRC64) +# define LZMA_CHECK_BEST LZMA_CHECK_CRC64 +#else +# define LZMA_CHECK_BEST LZMA_CHECK_CRC32 +#endif + + +/// \brief Structure to hold internal state of the check being calculated +/// +/// \note This is not in the public API because this structure may +/// change in future if new integrity check algorithms are added. +typedef struct { + /// Buffer to hold the final result and a temporary buffer for SHA256. + union { + uint8_t u8[64]; + uint32_t u32[16]; + uint64_t u64[8]; + } buffer; + + /// Check-specific data + union { + uint32_t crc32; + uint64_t crc64; + + struct { + /// Internal state + uint32_t state[8]; + + /// Size of the message excluding padding + uint64_t size; + } sha256; + } state; + +} lzma_check_state; + + +/// lzma_crc32_table[0] is needed by LZ encoder so we need to keep +/// the array two-dimensional. +#ifdef HAVE_SMALL +extern uint32_t lzma_crc32_table[1][256]; +extern void lzma_crc32_init(void); +#else +extern const uint32_t lzma_crc32_table[8][256]; +extern const uint64_t lzma_crc64_table[4][256]; +#endif + + +/// \brief Initialize *check depending on type +/// +/// \return LZMA_OK on success. LZMA_UNSUPPORTED_CHECK if the type is not +/// supported by the current version or build of liblzma. +/// LZMA_PROG_ERROR if type > LZMA_CHECK_ID_MAX. +extern void lzma_check_init(lzma_check_state *check, lzma_check type); + +/// Update the check state +extern void lzma_check_update(lzma_check_state *check, lzma_check type, + const uint8_t *buf, size_t size); + +/// Finish the check calculation and store the result to check->buffer.u8. +extern void lzma_check_finish(lzma_check_state *check, lzma_check type); + + +/// Prepare SHA-256 state for new input. +extern void lzma_sha256_init(lzma_check_state *check); + +/// Update the SHA-256 hash state +extern void lzma_sha256_update( + const uint8_t *buf, size_t size, lzma_check_state *check); + +/// Finish the SHA-256 calculation and store the result to check->buffer.u8. +extern void lzma_sha256_finish(lzma_check_state *check); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_fast.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_fast.c new file mode 100644 index 00000000000..a308eff5829 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_fast.c @@ -0,0 +1,82 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file crc32.c +/// \brief CRC32 calculation +/// +/// Calculate the CRC32 using the slice-by-eight algorithm. +/// It is explained in this document: +/// http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf +/// The code in this file is not the same as in Intel's paper, but +/// the basic principle is identical. +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "check.h" +#include "crc_macros.h" + + +// If you make any changes, do some bench marking! Seemingly unrelated +// changes can very easily ruin the performance (and very probably is +// very compiler dependent). +extern LZMA_API(uint32_t) +lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc) +{ + crc = ~crc; + +#ifdef WORDS_BIGENDIAN + crc = bswap_32(crc); +#endif + + if (size > 8) { + // Fix the alignment, if needed. The if statement above + // ensures that this won't read past the end of buf[]. + while ((uintptr_t)(buf) & 7) { + crc = lzma_crc32_table[0][*buf++ ^ A(crc)] ^ S8(crc); + --size; + } + + // Calculate the position where to stop. + const uint8_t *const limit = buf + (size & ~(size_t)(7)); + + // Calculate how many bytes must be calculated separately + // before returning the result. + size &= (size_t)(7); + + // Calculate the CRC32 using the slice-by-eight algorithm. + while (buf < limit) { + crc ^= *(uint32_t *)(buf); + buf += 4; + + crc = lzma_crc32_table[7][A(crc)] + ^ lzma_crc32_table[6][B(crc)] + ^ lzma_crc32_table[5][C(crc)] + ^ lzma_crc32_table[4][D(crc)]; + + const uint32_t tmp = *(uint32_t *)(buf); + buf += 4; + + // At least with some compilers, it is critical for + // performance, that the crc variable is XORed + // between the two table-lookup pairs. + crc = lzma_crc32_table[3][A(tmp)] + ^ lzma_crc32_table[2][B(tmp)] + ^ crc + ^ lzma_crc32_table[1][C(tmp)] + ^ lzma_crc32_table[0][D(tmp)]; + } + } + + while (size-- != 0) + crc = lzma_crc32_table[0][*buf++ ^ A(crc)] ^ S8(crc); + +#ifdef WORDS_BIGENDIAN + crc = bswap_32(crc); +#endif + + return ~crc; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_small.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_small.c new file mode 100644 index 00000000000..5f8a3286878 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_small.c @@ -0,0 +1,61 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file crc32_small.c +/// \brief CRC32 calculation (size-optimized) +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "check.h" + + +uint32_t lzma_crc32_table[1][256]; + + +static void +crc32_init(void) +{ + static const uint32_t poly32 = UINT32_C(0xEDB88320); + + for (size_t b = 0; b < 256; ++b) { + uint32_t r = b; + for (size_t i = 0; i < 8; ++i) { + if (r & 1) + r = (r >> 1) ^ poly32; + else + r >>= 1; + } + + lzma_crc32_table[0][b] = r; + } + + return; +} + + +extern void +lzma_crc32_init(void) +{ + mythread_once(crc32_init); + return; +} + + +extern LZMA_API(uint32_t) +lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc) +{ + lzma_crc32_init(); + + crc = ~crc; + + while (size != 0) { + crc = lzma_crc32_table[0][*buf++ ^ (crc & 0xFF)] ^ (crc >> 8); + --size; + } + + return ~crc; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_table.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_table.c new file mode 100644 index 00000000000..368874eb79d --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_table.c @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file crc32_table.c +/// \brief Precalculated CRC32 table with correct endianness +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "common.h" + +#ifdef WORDS_BIGENDIAN +# include "crc32_table_be.h" +#else +# include "crc32_table_le.h" +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_table_be.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_table_be.h new file mode 100644 index 00000000000..c483cb670dc --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_table_be.h @@ -0,0 +1,525 @@ +/* This file has been automatically generated by crc32_tablegen.c. */ + +const uint32_t lzma_crc32_table[8][256] = { + { + 0x00000000, 0x96300777, 0x2C610EEE, 0xBA510999, + 0x19C46D07, 0x8FF46A70, 0x35A563E9, 0xA395649E, + 0x3288DB0E, 0xA4B8DC79, 0x1EE9D5E0, 0x88D9D297, + 0x2B4CB609, 0xBD7CB17E, 0x072DB8E7, 0x911DBF90, + 0x6410B71D, 0xF220B06A, 0x4871B9F3, 0xDE41BE84, + 0x7DD4DA1A, 0xEBE4DD6D, 0x51B5D4F4, 0xC785D383, + 0x56986C13, 0xC0A86B64, 0x7AF962FD, 0xECC9658A, + 0x4F5C0114, 0xD96C0663, 0x633D0FFA, 0xF50D088D, + 0xC8206E3B, 0x5E10694C, 0xE44160D5, 0x727167A2, + 0xD1E4033C, 0x47D4044B, 0xFD850DD2, 0x6BB50AA5, + 0xFAA8B535, 0x6C98B242, 0xD6C9BBDB, 0x40F9BCAC, + 0xE36CD832, 0x755CDF45, 0xCF0DD6DC, 0x593DD1AB, + 0xAC30D926, 0x3A00DE51, 0x8051D7C8, 0x1661D0BF, + 0xB5F4B421, 0x23C4B356, 0x9995BACF, 0x0FA5BDB8, + 0x9EB80228, 0x0888055F, 0xB2D90CC6, 0x24E90BB1, + 0x877C6F2F, 0x114C6858, 0xAB1D61C1, 0x3D2D66B6, + 0x9041DC76, 0x0671DB01, 0xBC20D298, 0x2A10D5EF, + 0x8985B171, 0x1FB5B606, 0xA5E4BF9F, 0x33D4B8E8, + 0xA2C90778, 0x34F9000F, 0x8EA80996, 0x18980EE1, + 0xBB0D6A7F, 0x2D3D6D08, 0x976C6491, 0x015C63E6, + 0xF4516B6B, 0x62616C1C, 0xD8306585, 0x4E0062F2, + 0xED95066C, 0x7BA5011B, 0xC1F40882, 0x57C40FF5, + 0xC6D9B065, 0x50E9B712, 0xEAB8BE8B, 0x7C88B9FC, + 0xDF1DDD62, 0x492DDA15, 0xF37CD38C, 0x654CD4FB, + 0x5861B24D, 0xCE51B53A, 0x7400BCA3, 0xE230BBD4, + 0x41A5DF4A, 0xD795D83D, 0x6DC4D1A4, 0xFBF4D6D3, + 0x6AE96943, 0xFCD96E34, 0x468867AD, 0xD0B860DA, + 0x732D0444, 0xE51D0333, 0x5F4C0AAA, 0xC97C0DDD, + 0x3C710550, 0xAA410227, 0x10100BBE, 0x86200CC9, + 0x25B56857, 0xB3856F20, 0x09D466B9, 0x9FE461CE, + 0x0EF9DE5E, 0x98C9D929, 0x2298D0B0, 0xB4A8D7C7, + 0x173DB359, 0x810DB42E, 0x3B5CBDB7, 0xAD6CBAC0, + 0x2083B8ED, 0xB6B3BF9A, 0x0CE2B603, 0x9AD2B174, + 0x3947D5EA, 0xAF77D29D, 0x1526DB04, 0x8316DC73, + 0x120B63E3, 0x843B6494, 0x3E6A6D0D, 0xA85A6A7A, + 0x0BCF0EE4, 0x9DFF0993, 0x27AE000A, 0xB19E077D, + 0x44930FF0, 0xD2A30887, 0x68F2011E, 0xFEC20669, + 0x5D5762F7, 0xCB676580, 0x71366C19, 0xE7066B6E, + 0x761BD4FE, 0xE02BD389, 0x5A7ADA10, 0xCC4ADD67, + 0x6FDFB9F9, 0xF9EFBE8E, 0x43BEB717, 0xD58EB060, + 0xE8A3D6D6, 0x7E93D1A1, 0xC4C2D838, 0x52F2DF4F, + 0xF167BBD1, 0x6757BCA6, 0xDD06B53F, 0x4B36B248, + 0xDA2B0DD8, 0x4C1B0AAF, 0xF64A0336, 0x607A0441, + 0xC3EF60DF, 0x55DF67A8, 0xEF8E6E31, 0x79BE6946, + 0x8CB361CB, 0x1A8366BC, 0xA0D26F25, 0x36E26852, + 0x95770CCC, 0x03470BBB, 0xB9160222, 0x2F260555, + 0xBE3BBAC5, 0x280BBDB2, 0x925AB42B, 0x046AB35C, + 0xA7FFD7C2, 0x31CFD0B5, 0x8B9ED92C, 0x1DAEDE5B, + 0xB0C2649B, 0x26F263EC, 0x9CA36A75, 0x0A936D02, + 0xA906099C, 0x3F360EEB, 0x85670772, 0x13570005, + 0x824ABF95, 0x147AB8E2, 0xAE2BB17B, 0x381BB60C, + 0x9B8ED292, 0x0DBED5E5, 0xB7EFDC7C, 0x21DFDB0B, + 0xD4D2D386, 0x42E2D4F1, 0xF8B3DD68, 0x6E83DA1F, + 0xCD16BE81, 0x5B26B9F6, 0xE177B06F, 0x7747B718, + 0xE65A0888, 0x706A0FFF, 0xCA3B0666, 0x5C0B0111, + 0xFF9E658F, 0x69AE62F8, 0xD3FF6B61, 0x45CF6C16, + 0x78E20AA0, 0xEED20DD7, 0x5483044E, 0xC2B30339, + 0x612667A7, 0xF71660D0, 0x4D476949, 0xDB776E3E, + 0x4A6AD1AE, 0xDC5AD6D9, 0x660BDF40, 0xF03BD837, + 0x53AEBCA9, 0xC59EBBDE, 0x7FCFB247, 0xE9FFB530, + 0x1CF2BDBD, 0x8AC2BACA, 0x3093B353, 0xA6A3B424, + 0x0536D0BA, 0x9306D7CD, 0x2957DE54, 0xBF67D923, + 0x2E7A66B3, 0xB84A61C4, 0x021B685D, 0x942B6F2A, + 0x37BE0BB4, 0xA18E0CC3, 0x1BDF055A, 0x8DEF022D + }, { + 0x00000000, 0x41311B19, 0x82623632, 0xC3532D2B, + 0x04C56C64, 0x45F4777D, 0x86A75A56, 0xC796414F, + 0x088AD9C8, 0x49BBC2D1, 0x8AE8EFFA, 0xCBD9F4E3, + 0x0C4FB5AC, 0x4D7EAEB5, 0x8E2D839E, 0xCF1C9887, + 0x5112C24A, 0x1023D953, 0xD370F478, 0x9241EF61, + 0x55D7AE2E, 0x14E6B537, 0xD7B5981C, 0x96848305, + 0x59981B82, 0x18A9009B, 0xDBFA2DB0, 0x9ACB36A9, + 0x5D5D77E6, 0x1C6C6CFF, 0xDF3F41D4, 0x9E0E5ACD, + 0xA2248495, 0xE3159F8C, 0x2046B2A7, 0x6177A9BE, + 0xA6E1E8F1, 0xE7D0F3E8, 0x2483DEC3, 0x65B2C5DA, + 0xAAAE5D5D, 0xEB9F4644, 0x28CC6B6F, 0x69FD7076, + 0xAE6B3139, 0xEF5A2A20, 0x2C09070B, 0x6D381C12, + 0xF33646DF, 0xB2075DC6, 0x715470ED, 0x30656BF4, + 0xF7F32ABB, 0xB6C231A2, 0x75911C89, 0x34A00790, + 0xFBBC9F17, 0xBA8D840E, 0x79DEA925, 0x38EFB23C, + 0xFF79F373, 0xBE48E86A, 0x7D1BC541, 0x3C2ADE58, + 0x054F79F0, 0x447E62E9, 0x872D4FC2, 0xC61C54DB, + 0x018A1594, 0x40BB0E8D, 0x83E823A6, 0xC2D938BF, + 0x0DC5A038, 0x4CF4BB21, 0x8FA7960A, 0xCE968D13, + 0x0900CC5C, 0x4831D745, 0x8B62FA6E, 0xCA53E177, + 0x545DBBBA, 0x156CA0A3, 0xD63F8D88, 0x970E9691, + 0x5098D7DE, 0x11A9CCC7, 0xD2FAE1EC, 0x93CBFAF5, + 0x5CD76272, 0x1DE6796B, 0xDEB55440, 0x9F844F59, + 0x58120E16, 0x1923150F, 0xDA703824, 0x9B41233D, + 0xA76BFD65, 0xE65AE67C, 0x2509CB57, 0x6438D04E, + 0xA3AE9101, 0xE29F8A18, 0x21CCA733, 0x60FDBC2A, + 0xAFE124AD, 0xEED03FB4, 0x2D83129F, 0x6CB20986, + 0xAB2448C9, 0xEA1553D0, 0x29467EFB, 0x687765E2, + 0xF6793F2F, 0xB7482436, 0x741B091D, 0x352A1204, + 0xF2BC534B, 0xB38D4852, 0x70DE6579, 0x31EF7E60, + 0xFEF3E6E7, 0xBFC2FDFE, 0x7C91D0D5, 0x3DA0CBCC, + 0xFA368A83, 0xBB07919A, 0x7854BCB1, 0x3965A7A8, + 0x4B98833B, 0x0AA99822, 0xC9FAB509, 0x88CBAE10, + 0x4F5DEF5F, 0x0E6CF446, 0xCD3FD96D, 0x8C0EC274, + 0x43125AF3, 0x022341EA, 0xC1706CC1, 0x804177D8, + 0x47D73697, 0x06E62D8E, 0xC5B500A5, 0x84841BBC, + 0x1A8A4171, 0x5BBB5A68, 0x98E87743, 0xD9D96C5A, + 0x1E4F2D15, 0x5F7E360C, 0x9C2D1B27, 0xDD1C003E, + 0x120098B9, 0x533183A0, 0x9062AE8B, 0xD153B592, + 0x16C5F4DD, 0x57F4EFC4, 0x94A7C2EF, 0xD596D9F6, + 0xE9BC07AE, 0xA88D1CB7, 0x6BDE319C, 0x2AEF2A85, + 0xED796BCA, 0xAC4870D3, 0x6F1B5DF8, 0x2E2A46E1, + 0xE136DE66, 0xA007C57F, 0x6354E854, 0x2265F34D, + 0xE5F3B202, 0xA4C2A91B, 0x67918430, 0x26A09F29, + 0xB8AEC5E4, 0xF99FDEFD, 0x3ACCF3D6, 0x7BFDE8CF, + 0xBC6BA980, 0xFD5AB299, 0x3E099FB2, 0x7F3884AB, + 0xB0241C2C, 0xF1150735, 0x32462A1E, 0x73773107, + 0xB4E17048, 0xF5D06B51, 0x3683467A, 0x77B25D63, + 0x4ED7FACB, 0x0FE6E1D2, 0xCCB5CCF9, 0x8D84D7E0, + 0x4A1296AF, 0x0B238DB6, 0xC870A09D, 0x8941BB84, + 0x465D2303, 0x076C381A, 0xC43F1531, 0x850E0E28, + 0x42984F67, 0x03A9547E, 0xC0FA7955, 0x81CB624C, + 0x1FC53881, 0x5EF42398, 0x9DA70EB3, 0xDC9615AA, + 0x1B0054E5, 0x5A314FFC, 0x996262D7, 0xD85379CE, + 0x174FE149, 0x567EFA50, 0x952DD77B, 0xD41CCC62, + 0x138A8D2D, 0x52BB9634, 0x91E8BB1F, 0xD0D9A006, + 0xECF37E5E, 0xADC26547, 0x6E91486C, 0x2FA05375, + 0xE836123A, 0xA9070923, 0x6A542408, 0x2B653F11, + 0xE479A796, 0xA548BC8F, 0x661B91A4, 0x272A8ABD, + 0xE0BCCBF2, 0xA18DD0EB, 0x62DEFDC0, 0x23EFE6D9, + 0xBDE1BC14, 0xFCD0A70D, 0x3F838A26, 0x7EB2913F, + 0xB924D070, 0xF815CB69, 0x3B46E642, 0x7A77FD5B, + 0xB56B65DC, 0xF45A7EC5, 0x370953EE, 0x763848F7, + 0xB1AE09B8, 0xF09F12A1, 0x33CC3F8A, 0x72FD2493 + }, { + 0x00000000, 0x376AC201, 0x6ED48403, 0x59BE4602, + 0xDCA80907, 0xEBC2CB06, 0xB27C8D04, 0x85164F05, + 0xB851130E, 0x8F3BD10F, 0xD685970D, 0xE1EF550C, + 0x64F91A09, 0x5393D808, 0x0A2D9E0A, 0x3D475C0B, + 0x70A3261C, 0x47C9E41D, 0x1E77A21F, 0x291D601E, + 0xAC0B2F1B, 0x9B61ED1A, 0xC2DFAB18, 0xF5B56919, + 0xC8F23512, 0xFF98F713, 0xA626B111, 0x914C7310, + 0x145A3C15, 0x2330FE14, 0x7A8EB816, 0x4DE47A17, + 0xE0464D38, 0xD72C8F39, 0x8E92C93B, 0xB9F80B3A, + 0x3CEE443F, 0x0B84863E, 0x523AC03C, 0x6550023D, + 0x58175E36, 0x6F7D9C37, 0x36C3DA35, 0x01A91834, + 0x84BF5731, 0xB3D59530, 0xEA6BD332, 0xDD011133, + 0x90E56B24, 0xA78FA925, 0xFE31EF27, 0xC95B2D26, + 0x4C4D6223, 0x7B27A022, 0x2299E620, 0x15F32421, + 0x28B4782A, 0x1FDEBA2B, 0x4660FC29, 0x710A3E28, + 0xF41C712D, 0xC376B32C, 0x9AC8F52E, 0xADA2372F, + 0xC08D9A70, 0xF7E75871, 0xAE591E73, 0x9933DC72, + 0x1C259377, 0x2B4F5176, 0x72F11774, 0x459BD575, + 0x78DC897E, 0x4FB64B7F, 0x16080D7D, 0x2162CF7C, + 0xA4748079, 0x931E4278, 0xCAA0047A, 0xFDCAC67B, + 0xB02EBC6C, 0x87447E6D, 0xDEFA386F, 0xE990FA6E, + 0x6C86B56B, 0x5BEC776A, 0x02523168, 0x3538F369, + 0x087FAF62, 0x3F156D63, 0x66AB2B61, 0x51C1E960, + 0xD4D7A665, 0xE3BD6464, 0xBA032266, 0x8D69E067, + 0x20CBD748, 0x17A11549, 0x4E1F534B, 0x7975914A, + 0xFC63DE4F, 0xCB091C4E, 0x92B75A4C, 0xA5DD984D, + 0x989AC446, 0xAFF00647, 0xF64E4045, 0xC1248244, + 0x4432CD41, 0x73580F40, 0x2AE64942, 0x1D8C8B43, + 0x5068F154, 0x67023355, 0x3EBC7557, 0x09D6B756, + 0x8CC0F853, 0xBBAA3A52, 0xE2147C50, 0xD57EBE51, + 0xE839E25A, 0xDF53205B, 0x86ED6659, 0xB187A458, + 0x3491EB5D, 0x03FB295C, 0x5A456F5E, 0x6D2FAD5F, + 0x801B35E1, 0xB771F7E0, 0xEECFB1E2, 0xD9A573E3, + 0x5CB33CE6, 0x6BD9FEE7, 0x3267B8E5, 0x050D7AE4, + 0x384A26EF, 0x0F20E4EE, 0x569EA2EC, 0x61F460ED, + 0xE4E22FE8, 0xD388EDE9, 0x8A36ABEB, 0xBD5C69EA, + 0xF0B813FD, 0xC7D2D1FC, 0x9E6C97FE, 0xA90655FF, + 0x2C101AFA, 0x1B7AD8FB, 0x42C49EF9, 0x75AE5CF8, + 0x48E900F3, 0x7F83C2F2, 0x263D84F0, 0x115746F1, + 0x944109F4, 0xA32BCBF5, 0xFA958DF7, 0xCDFF4FF6, + 0x605D78D9, 0x5737BAD8, 0x0E89FCDA, 0x39E33EDB, + 0xBCF571DE, 0x8B9FB3DF, 0xD221F5DD, 0xE54B37DC, + 0xD80C6BD7, 0xEF66A9D6, 0xB6D8EFD4, 0x81B22DD5, + 0x04A462D0, 0x33CEA0D1, 0x6A70E6D3, 0x5D1A24D2, + 0x10FE5EC5, 0x27949CC4, 0x7E2ADAC6, 0x494018C7, + 0xCC5657C2, 0xFB3C95C3, 0xA282D3C1, 0x95E811C0, + 0xA8AF4DCB, 0x9FC58FCA, 0xC67BC9C8, 0xF1110BC9, + 0x740744CC, 0x436D86CD, 0x1AD3C0CF, 0x2DB902CE, + 0x4096AF91, 0x77FC6D90, 0x2E422B92, 0x1928E993, + 0x9C3EA696, 0xAB546497, 0xF2EA2295, 0xC580E094, + 0xF8C7BC9F, 0xCFAD7E9E, 0x9613389C, 0xA179FA9D, + 0x246FB598, 0x13057799, 0x4ABB319B, 0x7DD1F39A, + 0x3035898D, 0x075F4B8C, 0x5EE10D8E, 0x698BCF8F, + 0xEC9D808A, 0xDBF7428B, 0x82490489, 0xB523C688, + 0x88649A83, 0xBF0E5882, 0xE6B01E80, 0xD1DADC81, + 0x54CC9384, 0x63A65185, 0x3A181787, 0x0D72D586, + 0xA0D0E2A9, 0x97BA20A8, 0xCE0466AA, 0xF96EA4AB, + 0x7C78EBAE, 0x4B1229AF, 0x12AC6FAD, 0x25C6ADAC, + 0x1881F1A7, 0x2FEB33A6, 0x765575A4, 0x413FB7A5, + 0xC429F8A0, 0xF3433AA1, 0xAAFD7CA3, 0x9D97BEA2, + 0xD073C4B5, 0xE71906B4, 0xBEA740B6, 0x89CD82B7, + 0x0CDBCDB2, 0x3BB10FB3, 0x620F49B1, 0x55658BB0, + 0x6822D7BB, 0x5F4815BA, 0x06F653B8, 0x319C91B9, + 0xB48ADEBC, 0x83E01CBD, 0xDA5E5ABF, 0xED3498BE + }, { + 0x00000000, 0x6567BCB8, 0x8BC809AA, 0xEEAFB512, + 0x5797628F, 0x32F0DE37, 0xDC5F6B25, 0xB938D79D, + 0xEF28B4C5, 0x8A4F087D, 0x64E0BD6F, 0x018701D7, + 0xB8BFD64A, 0xDDD86AF2, 0x3377DFE0, 0x56106358, + 0x9F571950, 0xFA30A5E8, 0x149F10FA, 0x71F8AC42, + 0xC8C07BDF, 0xADA7C767, 0x43087275, 0x266FCECD, + 0x707FAD95, 0x1518112D, 0xFBB7A43F, 0x9ED01887, + 0x27E8CF1A, 0x428F73A2, 0xAC20C6B0, 0xC9477A08, + 0x3EAF32A0, 0x5BC88E18, 0xB5673B0A, 0xD00087B2, + 0x6938502F, 0x0C5FEC97, 0xE2F05985, 0x8797E53D, + 0xD1878665, 0xB4E03ADD, 0x5A4F8FCF, 0x3F283377, + 0x8610E4EA, 0xE3775852, 0x0DD8ED40, 0x68BF51F8, + 0xA1F82BF0, 0xC49F9748, 0x2A30225A, 0x4F579EE2, + 0xF66F497F, 0x9308F5C7, 0x7DA740D5, 0x18C0FC6D, + 0x4ED09F35, 0x2BB7238D, 0xC518969F, 0xA07F2A27, + 0x1947FDBA, 0x7C204102, 0x928FF410, 0xF7E848A8, + 0x3D58149B, 0x583FA823, 0xB6901D31, 0xD3F7A189, + 0x6ACF7614, 0x0FA8CAAC, 0xE1077FBE, 0x8460C306, + 0xD270A05E, 0xB7171CE6, 0x59B8A9F4, 0x3CDF154C, + 0x85E7C2D1, 0xE0807E69, 0x0E2FCB7B, 0x6B4877C3, + 0xA20F0DCB, 0xC768B173, 0x29C70461, 0x4CA0B8D9, + 0xF5986F44, 0x90FFD3FC, 0x7E5066EE, 0x1B37DA56, + 0x4D27B90E, 0x284005B6, 0xC6EFB0A4, 0xA3880C1C, + 0x1AB0DB81, 0x7FD76739, 0x9178D22B, 0xF41F6E93, + 0x03F7263B, 0x66909A83, 0x883F2F91, 0xED589329, + 0x546044B4, 0x3107F80C, 0xDFA84D1E, 0xBACFF1A6, + 0xECDF92FE, 0x89B82E46, 0x67179B54, 0x027027EC, + 0xBB48F071, 0xDE2F4CC9, 0x3080F9DB, 0x55E74563, + 0x9CA03F6B, 0xF9C783D3, 0x176836C1, 0x720F8A79, + 0xCB375DE4, 0xAE50E15C, 0x40FF544E, 0x2598E8F6, + 0x73888BAE, 0x16EF3716, 0xF8408204, 0x9D273EBC, + 0x241FE921, 0x41785599, 0xAFD7E08B, 0xCAB05C33, + 0x3BB659ED, 0x5ED1E555, 0xB07E5047, 0xD519ECFF, + 0x6C213B62, 0x094687DA, 0xE7E932C8, 0x828E8E70, + 0xD49EED28, 0xB1F95190, 0x5F56E482, 0x3A31583A, + 0x83098FA7, 0xE66E331F, 0x08C1860D, 0x6DA63AB5, + 0xA4E140BD, 0xC186FC05, 0x2F294917, 0x4A4EF5AF, + 0xF3762232, 0x96119E8A, 0x78BE2B98, 0x1DD99720, + 0x4BC9F478, 0x2EAE48C0, 0xC001FDD2, 0xA566416A, + 0x1C5E96F7, 0x79392A4F, 0x97969F5D, 0xF2F123E5, + 0x05196B4D, 0x607ED7F5, 0x8ED162E7, 0xEBB6DE5F, + 0x528E09C2, 0x37E9B57A, 0xD9460068, 0xBC21BCD0, + 0xEA31DF88, 0x8F566330, 0x61F9D622, 0x049E6A9A, + 0xBDA6BD07, 0xD8C101BF, 0x366EB4AD, 0x53090815, + 0x9A4E721D, 0xFF29CEA5, 0x11867BB7, 0x74E1C70F, + 0xCDD91092, 0xA8BEAC2A, 0x46111938, 0x2376A580, + 0x7566C6D8, 0x10017A60, 0xFEAECF72, 0x9BC973CA, + 0x22F1A457, 0x479618EF, 0xA939ADFD, 0xCC5E1145, + 0x06EE4D76, 0x6389F1CE, 0x8D2644DC, 0xE841F864, + 0x51792FF9, 0x341E9341, 0xDAB12653, 0xBFD69AEB, + 0xE9C6F9B3, 0x8CA1450B, 0x620EF019, 0x07694CA1, + 0xBE519B3C, 0xDB362784, 0x35999296, 0x50FE2E2E, + 0x99B95426, 0xFCDEE89E, 0x12715D8C, 0x7716E134, + 0xCE2E36A9, 0xAB498A11, 0x45E63F03, 0x208183BB, + 0x7691E0E3, 0x13F65C5B, 0xFD59E949, 0x983E55F1, + 0x2106826C, 0x44613ED4, 0xAACE8BC6, 0xCFA9377E, + 0x38417FD6, 0x5D26C36E, 0xB389767C, 0xD6EECAC4, + 0x6FD61D59, 0x0AB1A1E1, 0xE41E14F3, 0x8179A84B, + 0xD769CB13, 0xB20E77AB, 0x5CA1C2B9, 0x39C67E01, + 0x80FEA99C, 0xE5991524, 0x0B36A036, 0x6E511C8E, + 0xA7166686, 0xC271DA3E, 0x2CDE6F2C, 0x49B9D394, + 0xF0810409, 0x95E6B8B1, 0x7B490DA3, 0x1E2EB11B, + 0x483ED243, 0x2D596EFB, 0xC3F6DBE9, 0xA6916751, + 0x1FA9B0CC, 0x7ACE0C74, 0x9461B966, 0xF10605DE + }, { + 0x00000000, 0xB029603D, 0x6053C07A, 0xD07AA047, + 0xC0A680F5, 0x708FE0C8, 0xA0F5408F, 0x10DC20B2, + 0xC14B7030, 0x7162100D, 0xA118B04A, 0x1131D077, + 0x01EDF0C5, 0xB1C490F8, 0x61BE30BF, 0xD1975082, + 0x8297E060, 0x32BE805D, 0xE2C4201A, 0x52ED4027, + 0x42316095, 0xF21800A8, 0x2262A0EF, 0x924BC0D2, + 0x43DC9050, 0xF3F5F06D, 0x238F502A, 0x93A63017, + 0x837A10A5, 0x33537098, 0xE329D0DF, 0x5300B0E2, + 0x042FC1C1, 0xB406A1FC, 0x647C01BB, 0xD4556186, + 0xC4894134, 0x74A02109, 0xA4DA814E, 0x14F3E173, + 0xC564B1F1, 0x754DD1CC, 0xA537718B, 0x151E11B6, + 0x05C23104, 0xB5EB5139, 0x6591F17E, 0xD5B89143, + 0x86B821A1, 0x3691419C, 0xE6EBE1DB, 0x56C281E6, + 0x461EA154, 0xF637C169, 0x264D612E, 0x96640113, + 0x47F35191, 0xF7DA31AC, 0x27A091EB, 0x9789F1D6, + 0x8755D164, 0x377CB159, 0xE706111E, 0x572F7123, + 0x4958F358, 0xF9719365, 0x290B3322, 0x9922531F, + 0x89FE73AD, 0x39D71390, 0xE9ADB3D7, 0x5984D3EA, + 0x88138368, 0x383AE355, 0xE8404312, 0x5869232F, + 0x48B5039D, 0xF89C63A0, 0x28E6C3E7, 0x98CFA3DA, + 0xCBCF1338, 0x7BE67305, 0xAB9CD342, 0x1BB5B37F, + 0x0B6993CD, 0xBB40F3F0, 0x6B3A53B7, 0xDB13338A, + 0x0A846308, 0xBAAD0335, 0x6AD7A372, 0xDAFEC34F, + 0xCA22E3FD, 0x7A0B83C0, 0xAA712387, 0x1A5843BA, + 0x4D773299, 0xFD5E52A4, 0x2D24F2E3, 0x9D0D92DE, + 0x8DD1B26C, 0x3DF8D251, 0xED827216, 0x5DAB122B, + 0x8C3C42A9, 0x3C152294, 0xEC6F82D3, 0x5C46E2EE, + 0x4C9AC25C, 0xFCB3A261, 0x2CC90226, 0x9CE0621B, + 0xCFE0D2F9, 0x7FC9B2C4, 0xAFB31283, 0x1F9A72BE, + 0x0F46520C, 0xBF6F3231, 0x6F159276, 0xDF3CF24B, + 0x0EABA2C9, 0xBE82C2F4, 0x6EF862B3, 0xDED1028E, + 0xCE0D223C, 0x7E244201, 0xAE5EE246, 0x1E77827B, + 0x92B0E6B1, 0x2299868C, 0xF2E326CB, 0x42CA46F6, + 0x52166644, 0xE23F0679, 0x3245A63E, 0x826CC603, + 0x53FB9681, 0xE3D2F6BC, 0x33A856FB, 0x838136C6, + 0x935D1674, 0x23747649, 0xF30ED60E, 0x4327B633, + 0x102706D1, 0xA00E66EC, 0x7074C6AB, 0xC05DA696, + 0xD0818624, 0x60A8E619, 0xB0D2465E, 0x00FB2663, + 0xD16C76E1, 0x614516DC, 0xB13FB69B, 0x0116D6A6, + 0x11CAF614, 0xA1E39629, 0x7199366E, 0xC1B05653, + 0x969F2770, 0x26B6474D, 0xF6CCE70A, 0x46E58737, + 0x5639A785, 0xE610C7B8, 0x366A67FF, 0x864307C2, + 0x57D45740, 0xE7FD377D, 0x3787973A, 0x87AEF707, + 0x9772D7B5, 0x275BB788, 0xF72117CF, 0x470877F2, + 0x1408C710, 0xA421A72D, 0x745B076A, 0xC4726757, + 0xD4AE47E5, 0x648727D8, 0xB4FD879F, 0x04D4E7A2, + 0xD543B720, 0x656AD71D, 0xB510775A, 0x05391767, + 0x15E537D5, 0xA5CC57E8, 0x75B6F7AF, 0xC59F9792, + 0xDBE815E9, 0x6BC175D4, 0xBBBBD593, 0x0B92B5AE, + 0x1B4E951C, 0xAB67F521, 0x7B1D5566, 0xCB34355B, + 0x1AA365D9, 0xAA8A05E4, 0x7AF0A5A3, 0xCAD9C59E, + 0xDA05E52C, 0x6A2C8511, 0xBA562556, 0x0A7F456B, + 0x597FF589, 0xE95695B4, 0x392C35F3, 0x890555CE, + 0x99D9757C, 0x29F01541, 0xF98AB506, 0x49A3D53B, + 0x983485B9, 0x281DE584, 0xF86745C3, 0x484E25FE, + 0x5892054C, 0xE8BB6571, 0x38C1C536, 0x88E8A50B, + 0xDFC7D428, 0x6FEEB415, 0xBF941452, 0x0FBD746F, + 0x1F6154DD, 0xAF4834E0, 0x7F3294A7, 0xCF1BF49A, + 0x1E8CA418, 0xAEA5C425, 0x7EDF6462, 0xCEF6045F, + 0xDE2A24ED, 0x6E0344D0, 0xBE79E497, 0x0E5084AA, + 0x5D503448, 0xED795475, 0x3D03F432, 0x8D2A940F, + 0x9DF6B4BD, 0x2DDFD480, 0xFDA574C7, 0x4D8C14FA, + 0x9C1B4478, 0x2C322445, 0xFC488402, 0x4C61E43F, + 0x5CBDC48D, 0xEC94A4B0, 0x3CEE04F7, 0x8CC764CA + }, { + 0x00000000, 0xA5D35CCB, 0x0BA1C84D, 0xAE729486, + 0x1642919B, 0xB391CD50, 0x1DE359D6, 0xB830051D, + 0x6D8253EC, 0xC8510F27, 0x66239BA1, 0xC3F0C76A, + 0x7BC0C277, 0xDE139EBC, 0x70610A3A, 0xD5B256F1, + 0x9B02D603, 0x3ED18AC8, 0x90A31E4E, 0x35704285, + 0x8D404798, 0x28931B53, 0x86E18FD5, 0x2332D31E, + 0xF68085EF, 0x5353D924, 0xFD214DA2, 0x58F21169, + 0xE0C21474, 0x451148BF, 0xEB63DC39, 0x4EB080F2, + 0x3605AC07, 0x93D6F0CC, 0x3DA4644A, 0x98773881, + 0x20473D9C, 0x85946157, 0x2BE6F5D1, 0x8E35A91A, + 0x5B87FFEB, 0xFE54A320, 0x502637A6, 0xF5F56B6D, + 0x4DC56E70, 0xE81632BB, 0x4664A63D, 0xE3B7FAF6, + 0xAD077A04, 0x08D426CF, 0xA6A6B249, 0x0375EE82, + 0xBB45EB9F, 0x1E96B754, 0xB0E423D2, 0x15377F19, + 0xC08529E8, 0x65567523, 0xCB24E1A5, 0x6EF7BD6E, + 0xD6C7B873, 0x7314E4B8, 0xDD66703E, 0x78B52CF5, + 0x6C0A580F, 0xC9D904C4, 0x67AB9042, 0xC278CC89, + 0x7A48C994, 0xDF9B955F, 0x71E901D9, 0xD43A5D12, + 0x01880BE3, 0xA45B5728, 0x0A29C3AE, 0xAFFA9F65, + 0x17CA9A78, 0xB219C6B3, 0x1C6B5235, 0xB9B80EFE, + 0xF7088E0C, 0x52DBD2C7, 0xFCA94641, 0x597A1A8A, + 0xE14A1F97, 0x4499435C, 0xEAEBD7DA, 0x4F388B11, + 0x9A8ADDE0, 0x3F59812B, 0x912B15AD, 0x34F84966, + 0x8CC84C7B, 0x291B10B0, 0x87698436, 0x22BAD8FD, + 0x5A0FF408, 0xFFDCA8C3, 0x51AE3C45, 0xF47D608E, + 0x4C4D6593, 0xE99E3958, 0x47ECADDE, 0xE23FF115, + 0x378DA7E4, 0x925EFB2F, 0x3C2C6FA9, 0x99FF3362, + 0x21CF367F, 0x841C6AB4, 0x2A6EFE32, 0x8FBDA2F9, + 0xC10D220B, 0x64DE7EC0, 0xCAACEA46, 0x6F7FB68D, + 0xD74FB390, 0x729CEF5B, 0xDCEE7BDD, 0x793D2716, + 0xAC8F71E7, 0x095C2D2C, 0xA72EB9AA, 0x02FDE561, + 0xBACDE07C, 0x1F1EBCB7, 0xB16C2831, 0x14BF74FA, + 0xD814B01E, 0x7DC7ECD5, 0xD3B57853, 0x76662498, + 0xCE562185, 0x6B857D4E, 0xC5F7E9C8, 0x6024B503, + 0xB596E3F2, 0x1045BF39, 0xBE372BBF, 0x1BE47774, + 0xA3D47269, 0x06072EA2, 0xA875BA24, 0x0DA6E6EF, + 0x4316661D, 0xE6C53AD6, 0x48B7AE50, 0xED64F29B, + 0x5554F786, 0xF087AB4D, 0x5EF53FCB, 0xFB266300, + 0x2E9435F1, 0x8B47693A, 0x2535FDBC, 0x80E6A177, + 0x38D6A46A, 0x9D05F8A1, 0x33776C27, 0x96A430EC, + 0xEE111C19, 0x4BC240D2, 0xE5B0D454, 0x4063889F, + 0xF8538D82, 0x5D80D149, 0xF3F245CF, 0x56211904, + 0x83934FF5, 0x2640133E, 0x883287B8, 0x2DE1DB73, + 0x95D1DE6E, 0x300282A5, 0x9E701623, 0x3BA34AE8, + 0x7513CA1A, 0xD0C096D1, 0x7EB20257, 0xDB615E9C, + 0x63515B81, 0xC682074A, 0x68F093CC, 0xCD23CF07, + 0x189199F6, 0xBD42C53D, 0x133051BB, 0xB6E30D70, + 0x0ED3086D, 0xAB0054A6, 0x0572C020, 0xA0A19CEB, + 0xB41EE811, 0x11CDB4DA, 0xBFBF205C, 0x1A6C7C97, + 0xA25C798A, 0x078F2541, 0xA9FDB1C7, 0x0C2EED0C, + 0xD99CBBFD, 0x7C4FE736, 0xD23D73B0, 0x77EE2F7B, + 0xCFDE2A66, 0x6A0D76AD, 0xC47FE22B, 0x61ACBEE0, + 0x2F1C3E12, 0x8ACF62D9, 0x24BDF65F, 0x816EAA94, + 0x395EAF89, 0x9C8DF342, 0x32FF67C4, 0x972C3B0F, + 0x429E6DFE, 0xE74D3135, 0x493FA5B3, 0xECECF978, + 0x54DCFC65, 0xF10FA0AE, 0x5F7D3428, 0xFAAE68E3, + 0x821B4416, 0x27C818DD, 0x89BA8C5B, 0x2C69D090, + 0x9459D58D, 0x318A8946, 0x9FF81DC0, 0x3A2B410B, + 0xEF9917FA, 0x4A4A4B31, 0xE438DFB7, 0x41EB837C, + 0xF9DB8661, 0x5C08DAAA, 0xF27A4E2C, 0x57A912E7, + 0x19199215, 0xBCCACEDE, 0x12B85A58, 0xB76B0693, + 0x0F5B038E, 0xAA885F45, 0x04FACBC3, 0xA1299708, + 0x749BC1F9, 0xD1489D32, 0x7F3A09B4, 0xDAE9557F, + 0x62D95062, 0xC70A0CA9, 0x6978982F, 0xCCABC4E4 + }, { + 0x00000000, 0xB40B77A6, 0x29119F97, 0x9D1AE831, + 0x13244FF4, 0xA72F3852, 0x3A35D063, 0x8E3EA7C5, + 0x674EEF33, 0xD3459895, 0x4E5F70A4, 0xFA540702, + 0x746AA0C7, 0xC061D761, 0x5D7B3F50, 0xE97048F6, + 0xCE9CDE67, 0x7A97A9C1, 0xE78D41F0, 0x53863656, + 0xDDB89193, 0x69B3E635, 0xF4A90E04, 0x40A279A2, + 0xA9D23154, 0x1DD946F2, 0x80C3AEC3, 0x34C8D965, + 0xBAF67EA0, 0x0EFD0906, 0x93E7E137, 0x27EC9691, + 0x9C39BDCF, 0x2832CA69, 0xB5282258, 0x012355FE, + 0x8F1DF23B, 0x3B16859D, 0xA60C6DAC, 0x12071A0A, + 0xFB7752FC, 0x4F7C255A, 0xD266CD6B, 0x666DBACD, + 0xE8531D08, 0x5C586AAE, 0xC142829F, 0x7549F539, + 0x52A563A8, 0xE6AE140E, 0x7BB4FC3F, 0xCFBF8B99, + 0x41812C5C, 0xF58A5BFA, 0x6890B3CB, 0xDC9BC46D, + 0x35EB8C9B, 0x81E0FB3D, 0x1CFA130C, 0xA8F164AA, + 0x26CFC36F, 0x92C4B4C9, 0x0FDE5CF8, 0xBBD52B5E, + 0x79750B44, 0xCD7E7CE2, 0x506494D3, 0xE46FE375, + 0x6A5144B0, 0xDE5A3316, 0x4340DB27, 0xF74BAC81, + 0x1E3BE477, 0xAA3093D1, 0x372A7BE0, 0x83210C46, + 0x0D1FAB83, 0xB914DC25, 0x240E3414, 0x900543B2, + 0xB7E9D523, 0x03E2A285, 0x9EF84AB4, 0x2AF33D12, + 0xA4CD9AD7, 0x10C6ED71, 0x8DDC0540, 0x39D772E6, + 0xD0A73A10, 0x64AC4DB6, 0xF9B6A587, 0x4DBDD221, + 0xC38375E4, 0x77880242, 0xEA92EA73, 0x5E999DD5, + 0xE54CB68B, 0x5147C12D, 0xCC5D291C, 0x78565EBA, + 0xF668F97F, 0x42638ED9, 0xDF7966E8, 0x6B72114E, + 0x820259B8, 0x36092E1E, 0xAB13C62F, 0x1F18B189, + 0x9126164C, 0x252D61EA, 0xB83789DB, 0x0C3CFE7D, + 0x2BD068EC, 0x9FDB1F4A, 0x02C1F77B, 0xB6CA80DD, + 0x38F42718, 0x8CFF50BE, 0x11E5B88F, 0xA5EECF29, + 0x4C9E87DF, 0xF895F079, 0x658F1848, 0xD1846FEE, + 0x5FBAC82B, 0xEBB1BF8D, 0x76AB57BC, 0xC2A0201A, + 0xF2EA1688, 0x46E1612E, 0xDBFB891F, 0x6FF0FEB9, + 0xE1CE597C, 0x55C52EDA, 0xC8DFC6EB, 0x7CD4B14D, + 0x95A4F9BB, 0x21AF8E1D, 0xBCB5662C, 0x08BE118A, + 0x8680B64F, 0x328BC1E9, 0xAF9129D8, 0x1B9A5E7E, + 0x3C76C8EF, 0x887DBF49, 0x15675778, 0xA16C20DE, + 0x2F52871B, 0x9B59F0BD, 0x0643188C, 0xB2486F2A, + 0x5B3827DC, 0xEF33507A, 0x7229B84B, 0xC622CFED, + 0x481C6828, 0xFC171F8E, 0x610DF7BF, 0xD5068019, + 0x6ED3AB47, 0xDAD8DCE1, 0x47C234D0, 0xF3C94376, + 0x7DF7E4B3, 0xC9FC9315, 0x54E67B24, 0xE0ED0C82, + 0x099D4474, 0xBD9633D2, 0x208CDBE3, 0x9487AC45, + 0x1AB90B80, 0xAEB27C26, 0x33A89417, 0x87A3E3B1, + 0xA04F7520, 0x14440286, 0x895EEAB7, 0x3D559D11, + 0xB36B3AD4, 0x07604D72, 0x9A7AA543, 0x2E71D2E5, + 0xC7019A13, 0x730AEDB5, 0xEE100584, 0x5A1B7222, + 0xD425D5E7, 0x602EA241, 0xFD344A70, 0x493F3DD6, + 0x8B9F1DCC, 0x3F946A6A, 0xA28E825B, 0x1685F5FD, + 0x98BB5238, 0x2CB0259E, 0xB1AACDAF, 0x05A1BA09, + 0xECD1F2FF, 0x58DA8559, 0xC5C06D68, 0x71CB1ACE, + 0xFFF5BD0B, 0x4BFECAAD, 0xD6E4229C, 0x62EF553A, + 0x4503C3AB, 0xF108B40D, 0x6C125C3C, 0xD8192B9A, + 0x56278C5F, 0xE22CFBF9, 0x7F3613C8, 0xCB3D646E, + 0x224D2C98, 0x96465B3E, 0x0B5CB30F, 0xBF57C4A9, + 0x3169636C, 0x856214CA, 0x1878FCFB, 0xAC738B5D, + 0x17A6A003, 0xA3ADD7A5, 0x3EB73F94, 0x8ABC4832, + 0x0482EFF7, 0xB0899851, 0x2D937060, 0x999807C6, + 0x70E84F30, 0xC4E33896, 0x59F9D0A7, 0xEDF2A701, + 0x63CC00C4, 0xD7C77762, 0x4ADD9F53, 0xFED6E8F5, + 0xD93A7E64, 0x6D3109C2, 0xF02BE1F3, 0x44209655, + 0xCA1E3190, 0x7E154636, 0xE30FAE07, 0x5704D9A1, + 0xBE749157, 0x0A7FE6F1, 0x97650EC0, 0x236E7966, + 0xAD50DEA3, 0x195BA905, 0x84414134, 0x304A3692 + }, { + 0x00000000, 0x9E00AACC, 0x7D072542, 0xE3078F8E, + 0xFA0E4A84, 0x640EE048, 0x87096FC6, 0x1909C50A, + 0xB51BE5D3, 0x2B1B4F1F, 0xC81CC091, 0x561C6A5D, + 0x4F15AF57, 0xD115059B, 0x32128A15, 0xAC1220D9, + 0x2B31BB7C, 0xB53111B0, 0x56369E3E, 0xC83634F2, + 0xD13FF1F8, 0x4F3F5B34, 0xAC38D4BA, 0x32387E76, + 0x9E2A5EAF, 0x002AF463, 0xE32D7BED, 0x7D2DD121, + 0x6424142B, 0xFA24BEE7, 0x19233169, 0x87239BA5, + 0x566276F9, 0xC862DC35, 0x2B6553BB, 0xB565F977, + 0xAC6C3C7D, 0x326C96B1, 0xD16B193F, 0x4F6BB3F3, + 0xE379932A, 0x7D7939E6, 0x9E7EB668, 0x007E1CA4, + 0x1977D9AE, 0x87777362, 0x6470FCEC, 0xFA705620, + 0x7D53CD85, 0xE3536749, 0x0054E8C7, 0x9E54420B, + 0x875D8701, 0x195D2DCD, 0xFA5AA243, 0x645A088F, + 0xC8482856, 0x5648829A, 0xB54F0D14, 0x2B4FA7D8, + 0x324662D2, 0xAC46C81E, 0x4F414790, 0xD141ED5C, + 0xEDC29D29, 0x73C237E5, 0x90C5B86B, 0x0EC512A7, + 0x17CCD7AD, 0x89CC7D61, 0x6ACBF2EF, 0xF4CB5823, + 0x58D978FA, 0xC6D9D236, 0x25DE5DB8, 0xBBDEF774, + 0xA2D7327E, 0x3CD798B2, 0xDFD0173C, 0x41D0BDF0, + 0xC6F32655, 0x58F38C99, 0xBBF40317, 0x25F4A9DB, + 0x3CFD6CD1, 0xA2FDC61D, 0x41FA4993, 0xDFFAE35F, + 0x73E8C386, 0xEDE8694A, 0x0EEFE6C4, 0x90EF4C08, + 0x89E68902, 0x17E623CE, 0xF4E1AC40, 0x6AE1068C, + 0xBBA0EBD0, 0x25A0411C, 0xC6A7CE92, 0x58A7645E, + 0x41AEA154, 0xDFAE0B98, 0x3CA98416, 0xA2A92EDA, + 0x0EBB0E03, 0x90BBA4CF, 0x73BC2B41, 0xEDBC818D, + 0xF4B54487, 0x6AB5EE4B, 0x89B261C5, 0x17B2CB09, + 0x909150AC, 0x0E91FA60, 0xED9675EE, 0x7396DF22, + 0x6A9F1A28, 0xF49FB0E4, 0x17983F6A, 0x899895A6, + 0x258AB57F, 0xBB8A1FB3, 0x588D903D, 0xC68D3AF1, + 0xDF84FFFB, 0x41845537, 0xA283DAB9, 0x3C837075, + 0xDA853B53, 0x4485919F, 0xA7821E11, 0x3982B4DD, + 0x208B71D7, 0xBE8BDB1B, 0x5D8C5495, 0xC38CFE59, + 0x6F9EDE80, 0xF19E744C, 0x1299FBC2, 0x8C99510E, + 0x95909404, 0x0B903EC8, 0xE897B146, 0x76971B8A, + 0xF1B4802F, 0x6FB42AE3, 0x8CB3A56D, 0x12B30FA1, + 0x0BBACAAB, 0x95BA6067, 0x76BDEFE9, 0xE8BD4525, + 0x44AF65FC, 0xDAAFCF30, 0x39A840BE, 0xA7A8EA72, + 0xBEA12F78, 0x20A185B4, 0xC3A60A3A, 0x5DA6A0F6, + 0x8CE74DAA, 0x12E7E766, 0xF1E068E8, 0x6FE0C224, + 0x76E9072E, 0xE8E9ADE2, 0x0BEE226C, 0x95EE88A0, + 0x39FCA879, 0xA7FC02B5, 0x44FB8D3B, 0xDAFB27F7, + 0xC3F2E2FD, 0x5DF24831, 0xBEF5C7BF, 0x20F56D73, + 0xA7D6F6D6, 0x39D65C1A, 0xDAD1D394, 0x44D17958, + 0x5DD8BC52, 0xC3D8169E, 0x20DF9910, 0xBEDF33DC, + 0x12CD1305, 0x8CCDB9C9, 0x6FCA3647, 0xF1CA9C8B, + 0xE8C35981, 0x76C3F34D, 0x95C47CC3, 0x0BC4D60F, + 0x3747A67A, 0xA9470CB6, 0x4A408338, 0xD44029F4, + 0xCD49ECFE, 0x53494632, 0xB04EC9BC, 0x2E4E6370, + 0x825C43A9, 0x1C5CE965, 0xFF5B66EB, 0x615BCC27, + 0x7852092D, 0xE652A3E1, 0x05552C6F, 0x9B5586A3, + 0x1C761D06, 0x8276B7CA, 0x61713844, 0xFF719288, + 0xE6785782, 0x7878FD4E, 0x9B7F72C0, 0x057FD80C, + 0xA96DF8D5, 0x376D5219, 0xD46ADD97, 0x4A6A775B, + 0x5363B251, 0xCD63189D, 0x2E649713, 0xB0643DDF, + 0x6125D083, 0xFF257A4F, 0x1C22F5C1, 0x82225F0D, + 0x9B2B9A07, 0x052B30CB, 0xE62CBF45, 0x782C1589, + 0xD43E3550, 0x4A3E9F9C, 0xA9391012, 0x3739BADE, + 0x2E307FD4, 0xB030D518, 0x53375A96, 0xCD37F05A, + 0x4A146BFF, 0xD414C133, 0x37134EBD, 0xA913E471, + 0xB01A217B, 0x2E1A8BB7, 0xCD1D0439, 0x531DAEF5, + 0xFF0F8E2C, 0x610F24E0, 0x8208AB6E, 0x1C0801A2, + 0x0501C4A8, 0x9B016E64, 0x7806E1EA, 0xE6064B26 + } +}; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_table_le.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_table_le.h new file mode 100644 index 00000000000..25f4fc44353 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_table_le.h @@ -0,0 +1,525 @@ +/* This file has been automatically generated by crc32_tablegen.c. */ + +const uint32_t lzma_crc32_table[8][256] = { + { + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, + 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, + 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, + 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, + 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, + 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, + 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, + 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, + 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, + 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, + 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, + 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, + 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, + 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, + 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, + 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, + 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, + 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, + 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, + 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, + 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, + 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, + 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, + 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, + 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, + 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, + 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, + 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, + 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, + 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, + 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, + 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, + 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, + 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, + 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, + 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, + 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, + 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, + 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, + 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D + }, { + 0x00000000, 0x191B3141, 0x32366282, 0x2B2D53C3, + 0x646CC504, 0x7D77F445, 0x565AA786, 0x4F4196C7, + 0xC8D98A08, 0xD1C2BB49, 0xFAEFE88A, 0xE3F4D9CB, + 0xACB54F0C, 0xB5AE7E4D, 0x9E832D8E, 0x87981CCF, + 0x4AC21251, 0x53D92310, 0x78F470D3, 0x61EF4192, + 0x2EAED755, 0x37B5E614, 0x1C98B5D7, 0x05838496, + 0x821B9859, 0x9B00A918, 0xB02DFADB, 0xA936CB9A, + 0xE6775D5D, 0xFF6C6C1C, 0xD4413FDF, 0xCD5A0E9E, + 0x958424A2, 0x8C9F15E3, 0xA7B24620, 0xBEA97761, + 0xF1E8E1A6, 0xE8F3D0E7, 0xC3DE8324, 0xDAC5B265, + 0x5D5DAEAA, 0x44469FEB, 0x6F6BCC28, 0x7670FD69, + 0x39316BAE, 0x202A5AEF, 0x0B07092C, 0x121C386D, + 0xDF4636F3, 0xC65D07B2, 0xED705471, 0xF46B6530, + 0xBB2AF3F7, 0xA231C2B6, 0x891C9175, 0x9007A034, + 0x179FBCFB, 0x0E848DBA, 0x25A9DE79, 0x3CB2EF38, + 0x73F379FF, 0x6AE848BE, 0x41C51B7D, 0x58DE2A3C, + 0xF0794F05, 0xE9627E44, 0xC24F2D87, 0xDB541CC6, + 0x94158A01, 0x8D0EBB40, 0xA623E883, 0xBF38D9C2, + 0x38A0C50D, 0x21BBF44C, 0x0A96A78F, 0x138D96CE, + 0x5CCC0009, 0x45D73148, 0x6EFA628B, 0x77E153CA, + 0xBABB5D54, 0xA3A06C15, 0x888D3FD6, 0x91960E97, + 0xDED79850, 0xC7CCA911, 0xECE1FAD2, 0xF5FACB93, + 0x7262D75C, 0x6B79E61D, 0x4054B5DE, 0x594F849F, + 0x160E1258, 0x0F152319, 0x243870DA, 0x3D23419B, + 0x65FD6BA7, 0x7CE65AE6, 0x57CB0925, 0x4ED03864, + 0x0191AEA3, 0x188A9FE2, 0x33A7CC21, 0x2ABCFD60, + 0xAD24E1AF, 0xB43FD0EE, 0x9F12832D, 0x8609B26C, + 0xC94824AB, 0xD05315EA, 0xFB7E4629, 0xE2657768, + 0x2F3F79F6, 0x362448B7, 0x1D091B74, 0x04122A35, + 0x4B53BCF2, 0x52488DB3, 0x7965DE70, 0x607EEF31, + 0xE7E6F3FE, 0xFEFDC2BF, 0xD5D0917C, 0xCCCBA03D, + 0x838A36FA, 0x9A9107BB, 0xB1BC5478, 0xA8A76539, + 0x3B83984B, 0x2298A90A, 0x09B5FAC9, 0x10AECB88, + 0x5FEF5D4F, 0x46F46C0E, 0x6DD93FCD, 0x74C20E8C, + 0xF35A1243, 0xEA412302, 0xC16C70C1, 0xD8774180, + 0x9736D747, 0x8E2DE606, 0xA500B5C5, 0xBC1B8484, + 0x71418A1A, 0x685ABB5B, 0x4377E898, 0x5A6CD9D9, + 0x152D4F1E, 0x0C367E5F, 0x271B2D9C, 0x3E001CDD, + 0xB9980012, 0xA0833153, 0x8BAE6290, 0x92B553D1, + 0xDDF4C516, 0xC4EFF457, 0xEFC2A794, 0xF6D996D5, + 0xAE07BCE9, 0xB71C8DA8, 0x9C31DE6B, 0x852AEF2A, + 0xCA6B79ED, 0xD37048AC, 0xF85D1B6F, 0xE1462A2E, + 0x66DE36E1, 0x7FC507A0, 0x54E85463, 0x4DF36522, + 0x02B2F3E5, 0x1BA9C2A4, 0x30849167, 0x299FA026, + 0xE4C5AEB8, 0xFDDE9FF9, 0xD6F3CC3A, 0xCFE8FD7B, + 0x80A96BBC, 0x99B25AFD, 0xB29F093E, 0xAB84387F, + 0x2C1C24B0, 0x350715F1, 0x1E2A4632, 0x07317773, + 0x4870E1B4, 0x516BD0F5, 0x7A468336, 0x635DB277, + 0xCBFAD74E, 0xD2E1E60F, 0xF9CCB5CC, 0xE0D7848D, + 0xAF96124A, 0xB68D230B, 0x9DA070C8, 0x84BB4189, + 0x03235D46, 0x1A386C07, 0x31153FC4, 0x280E0E85, + 0x674F9842, 0x7E54A903, 0x5579FAC0, 0x4C62CB81, + 0x8138C51F, 0x9823F45E, 0xB30EA79D, 0xAA1596DC, + 0xE554001B, 0xFC4F315A, 0xD7626299, 0xCE7953D8, + 0x49E14F17, 0x50FA7E56, 0x7BD72D95, 0x62CC1CD4, + 0x2D8D8A13, 0x3496BB52, 0x1FBBE891, 0x06A0D9D0, + 0x5E7EF3EC, 0x4765C2AD, 0x6C48916E, 0x7553A02F, + 0x3A1236E8, 0x230907A9, 0x0824546A, 0x113F652B, + 0x96A779E4, 0x8FBC48A5, 0xA4911B66, 0xBD8A2A27, + 0xF2CBBCE0, 0xEBD08DA1, 0xC0FDDE62, 0xD9E6EF23, + 0x14BCE1BD, 0x0DA7D0FC, 0x268A833F, 0x3F91B27E, + 0x70D024B9, 0x69CB15F8, 0x42E6463B, 0x5BFD777A, + 0xDC656BB5, 0xC57E5AF4, 0xEE530937, 0xF7483876, + 0xB809AEB1, 0xA1129FF0, 0x8A3FCC33, 0x9324FD72 + }, { + 0x00000000, 0x01C26A37, 0x0384D46E, 0x0246BE59, + 0x0709A8DC, 0x06CBC2EB, 0x048D7CB2, 0x054F1685, + 0x0E1351B8, 0x0FD13B8F, 0x0D9785D6, 0x0C55EFE1, + 0x091AF964, 0x08D89353, 0x0A9E2D0A, 0x0B5C473D, + 0x1C26A370, 0x1DE4C947, 0x1FA2771E, 0x1E601D29, + 0x1B2F0BAC, 0x1AED619B, 0x18ABDFC2, 0x1969B5F5, + 0x1235F2C8, 0x13F798FF, 0x11B126A6, 0x10734C91, + 0x153C5A14, 0x14FE3023, 0x16B88E7A, 0x177AE44D, + 0x384D46E0, 0x398F2CD7, 0x3BC9928E, 0x3A0BF8B9, + 0x3F44EE3C, 0x3E86840B, 0x3CC03A52, 0x3D025065, + 0x365E1758, 0x379C7D6F, 0x35DAC336, 0x3418A901, + 0x3157BF84, 0x3095D5B3, 0x32D36BEA, 0x331101DD, + 0x246BE590, 0x25A98FA7, 0x27EF31FE, 0x262D5BC9, + 0x23624D4C, 0x22A0277B, 0x20E69922, 0x2124F315, + 0x2A78B428, 0x2BBADE1F, 0x29FC6046, 0x283E0A71, + 0x2D711CF4, 0x2CB376C3, 0x2EF5C89A, 0x2F37A2AD, + 0x709A8DC0, 0x7158E7F7, 0x731E59AE, 0x72DC3399, + 0x7793251C, 0x76514F2B, 0x7417F172, 0x75D59B45, + 0x7E89DC78, 0x7F4BB64F, 0x7D0D0816, 0x7CCF6221, + 0x798074A4, 0x78421E93, 0x7A04A0CA, 0x7BC6CAFD, + 0x6CBC2EB0, 0x6D7E4487, 0x6F38FADE, 0x6EFA90E9, + 0x6BB5866C, 0x6A77EC5B, 0x68315202, 0x69F33835, + 0x62AF7F08, 0x636D153F, 0x612BAB66, 0x60E9C151, + 0x65A6D7D4, 0x6464BDE3, 0x662203BA, 0x67E0698D, + 0x48D7CB20, 0x4915A117, 0x4B531F4E, 0x4A917579, + 0x4FDE63FC, 0x4E1C09CB, 0x4C5AB792, 0x4D98DDA5, + 0x46C49A98, 0x4706F0AF, 0x45404EF6, 0x448224C1, + 0x41CD3244, 0x400F5873, 0x4249E62A, 0x438B8C1D, + 0x54F16850, 0x55330267, 0x5775BC3E, 0x56B7D609, + 0x53F8C08C, 0x523AAABB, 0x507C14E2, 0x51BE7ED5, + 0x5AE239E8, 0x5B2053DF, 0x5966ED86, 0x58A487B1, + 0x5DEB9134, 0x5C29FB03, 0x5E6F455A, 0x5FAD2F6D, + 0xE1351B80, 0xE0F771B7, 0xE2B1CFEE, 0xE373A5D9, + 0xE63CB35C, 0xE7FED96B, 0xE5B86732, 0xE47A0D05, + 0xEF264A38, 0xEEE4200F, 0xECA29E56, 0xED60F461, + 0xE82FE2E4, 0xE9ED88D3, 0xEBAB368A, 0xEA695CBD, + 0xFD13B8F0, 0xFCD1D2C7, 0xFE976C9E, 0xFF5506A9, + 0xFA1A102C, 0xFBD87A1B, 0xF99EC442, 0xF85CAE75, + 0xF300E948, 0xF2C2837F, 0xF0843D26, 0xF1465711, + 0xF4094194, 0xF5CB2BA3, 0xF78D95FA, 0xF64FFFCD, + 0xD9785D60, 0xD8BA3757, 0xDAFC890E, 0xDB3EE339, + 0xDE71F5BC, 0xDFB39F8B, 0xDDF521D2, 0xDC374BE5, + 0xD76B0CD8, 0xD6A966EF, 0xD4EFD8B6, 0xD52DB281, + 0xD062A404, 0xD1A0CE33, 0xD3E6706A, 0xD2241A5D, + 0xC55EFE10, 0xC49C9427, 0xC6DA2A7E, 0xC7184049, + 0xC25756CC, 0xC3953CFB, 0xC1D382A2, 0xC011E895, + 0xCB4DAFA8, 0xCA8FC59F, 0xC8C97BC6, 0xC90B11F1, + 0xCC440774, 0xCD866D43, 0xCFC0D31A, 0xCE02B92D, + 0x91AF9640, 0x906DFC77, 0x922B422E, 0x93E92819, + 0x96A63E9C, 0x976454AB, 0x9522EAF2, 0x94E080C5, + 0x9FBCC7F8, 0x9E7EADCF, 0x9C381396, 0x9DFA79A1, + 0x98B56F24, 0x99770513, 0x9B31BB4A, 0x9AF3D17D, + 0x8D893530, 0x8C4B5F07, 0x8E0DE15E, 0x8FCF8B69, + 0x8A809DEC, 0x8B42F7DB, 0x89044982, 0x88C623B5, + 0x839A6488, 0x82580EBF, 0x801EB0E6, 0x81DCDAD1, + 0x8493CC54, 0x8551A663, 0x8717183A, 0x86D5720D, + 0xA9E2D0A0, 0xA820BA97, 0xAA6604CE, 0xABA46EF9, + 0xAEEB787C, 0xAF29124B, 0xAD6FAC12, 0xACADC625, + 0xA7F18118, 0xA633EB2F, 0xA4755576, 0xA5B73F41, + 0xA0F829C4, 0xA13A43F3, 0xA37CFDAA, 0xA2BE979D, + 0xB5C473D0, 0xB40619E7, 0xB640A7BE, 0xB782CD89, + 0xB2CDDB0C, 0xB30FB13B, 0xB1490F62, 0xB08B6555, + 0xBBD72268, 0xBA15485F, 0xB853F606, 0xB9919C31, + 0xBCDE8AB4, 0xBD1CE083, 0xBF5A5EDA, 0xBE9834ED + }, { + 0x00000000, 0xB8BC6765, 0xAA09C88B, 0x12B5AFEE, + 0x8F629757, 0x37DEF032, 0x256B5FDC, 0x9DD738B9, + 0xC5B428EF, 0x7D084F8A, 0x6FBDE064, 0xD7018701, + 0x4AD6BFB8, 0xF26AD8DD, 0xE0DF7733, 0x58631056, + 0x5019579F, 0xE8A530FA, 0xFA109F14, 0x42ACF871, + 0xDF7BC0C8, 0x67C7A7AD, 0x75720843, 0xCDCE6F26, + 0x95AD7F70, 0x2D111815, 0x3FA4B7FB, 0x8718D09E, + 0x1ACFE827, 0xA2738F42, 0xB0C620AC, 0x087A47C9, + 0xA032AF3E, 0x188EC85B, 0x0A3B67B5, 0xB28700D0, + 0x2F503869, 0x97EC5F0C, 0x8559F0E2, 0x3DE59787, + 0x658687D1, 0xDD3AE0B4, 0xCF8F4F5A, 0x7733283F, + 0xEAE41086, 0x525877E3, 0x40EDD80D, 0xF851BF68, + 0xF02BF8A1, 0x48979FC4, 0x5A22302A, 0xE29E574F, + 0x7F496FF6, 0xC7F50893, 0xD540A77D, 0x6DFCC018, + 0x359FD04E, 0x8D23B72B, 0x9F9618C5, 0x272A7FA0, + 0xBAFD4719, 0x0241207C, 0x10F48F92, 0xA848E8F7, + 0x9B14583D, 0x23A83F58, 0x311D90B6, 0x89A1F7D3, + 0x1476CF6A, 0xACCAA80F, 0xBE7F07E1, 0x06C36084, + 0x5EA070D2, 0xE61C17B7, 0xF4A9B859, 0x4C15DF3C, + 0xD1C2E785, 0x697E80E0, 0x7BCB2F0E, 0xC377486B, + 0xCB0D0FA2, 0x73B168C7, 0x6104C729, 0xD9B8A04C, + 0x446F98F5, 0xFCD3FF90, 0xEE66507E, 0x56DA371B, + 0x0EB9274D, 0xB6054028, 0xA4B0EFC6, 0x1C0C88A3, + 0x81DBB01A, 0x3967D77F, 0x2BD27891, 0x936E1FF4, + 0x3B26F703, 0x839A9066, 0x912F3F88, 0x299358ED, + 0xB4446054, 0x0CF80731, 0x1E4DA8DF, 0xA6F1CFBA, + 0xFE92DFEC, 0x462EB889, 0x549B1767, 0xEC277002, + 0x71F048BB, 0xC94C2FDE, 0xDBF98030, 0x6345E755, + 0x6B3FA09C, 0xD383C7F9, 0xC1366817, 0x798A0F72, + 0xE45D37CB, 0x5CE150AE, 0x4E54FF40, 0xF6E89825, + 0xAE8B8873, 0x1637EF16, 0x048240F8, 0xBC3E279D, + 0x21E91F24, 0x99557841, 0x8BE0D7AF, 0x335CB0CA, + 0xED59B63B, 0x55E5D15E, 0x47507EB0, 0xFFEC19D5, + 0x623B216C, 0xDA874609, 0xC832E9E7, 0x708E8E82, + 0x28ED9ED4, 0x9051F9B1, 0x82E4565F, 0x3A58313A, + 0xA78F0983, 0x1F336EE6, 0x0D86C108, 0xB53AA66D, + 0xBD40E1A4, 0x05FC86C1, 0x1749292F, 0xAFF54E4A, + 0x322276F3, 0x8A9E1196, 0x982BBE78, 0x2097D91D, + 0x78F4C94B, 0xC048AE2E, 0xD2FD01C0, 0x6A4166A5, + 0xF7965E1C, 0x4F2A3979, 0x5D9F9697, 0xE523F1F2, + 0x4D6B1905, 0xF5D77E60, 0xE762D18E, 0x5FDEB6EB, + 0xC2098E52, 0x7AB5E937, 0x680046D9, 0xD0BC21BC, + 0x88DF31EA, 0x3063568F, 0x22D6F961, 0x9A6A9E04, + 0x07BDA6BD, 0xBF01C1D8, 0xADB46E36, 0x15080953, + 0x1D724E9A, 0xA5CE29FF, 0xB77B8611, 0x0FC7E174, + 0x9210D9CD, 0x2AACBEA8, 0x38191146, 0x80A57623, + 0xD8C66675, 0x607A0110, 0x72CFAEFE, 0xCA73C99B, + 0x57A4F122, 0xEF189647, 0xFDAD39A9, 0x45115ECC, + 0x764DEE06, 0xCEF18963, 0xDC44268D, 0x64F841E8, + 0xF92F7951, 0x41931E34, 0x5326B1DA, 0xEB9AD6BF, + 0xB3F9C6E9, 0x0B45A18C, 0x19F00E62, 0xA14C6907, + 0x3C9B51BE, 0x842736DB, 0x96929935, 0x2E2EFE50, + 0x2654B999, 0x9EE8DEFC, 0x8C5D7112, 0x34E11677, + 0xA9362ECE, 0x118A49AB, 0x033FE645, 0xBB838120, + 0xE3E09176, 0x5B5CF613, 0x49E959FD, 0xF1553E98, + 0x6C820621, 0xD43E6144, 0xC68BCEAA, 0x7E37A9CF, + 0xD67F4138, 0x6EC3265D, 0x7C7689B3, 0xC4CAEED6, + 0x591DD66F, 0xE1A1B10A, 0xF3141EE4, 0x4BA87981, + 0x13CB69D7, 0xAB770EB2, 0xB9C2A15C, 0x017EC639, + 0x9CA9FE80, 0x241599E5, 0x36A0360B, 0x8E1C516E, + 0x866616A7, 0x3EDA71C2, 0x2C6FDE2C, 0x94D3B949, + 0x090481F0, 0xB1B8E695, 0xA30D497B, 0x1BB12E1E, + 0x43D23E48, 0xFB6E592D, 0xE9DBF6C3, 0x516791A6, + 0xCCB0A91F, 0x740CCE7A, 0x66B96194, 0xDE0506F1 + }, { + 0x00000000, 0x3D6029B0, 0x7AC05360, 0x47A07AD0, + 0xF580A6C0, 0xC8E08F70, 0x8F40F5A0, 0xB220DC10, + 0x30704BC1, 0x0D106271, 0x4AB018A1, 0x77D03111, + 0xC5F0ED01, 0xF890C4B1, 0xBF30BE61, 0x825097D1, + 0x60E09782, 0x5D80BE32, 0x1A20C4E2, 0x2740ED52, + 0x95603142, 0xA80018F2, 0xEFA06222, 0xD2C04B92, + 0x5090DC43, 0x6DF0F5F3, 0x2A508F23, 0x1730A693, + 0xA5107A83, 0x98705333, 0xDFD029E3, 0xE2B00053, + 0xC1C12F04, 0xFCA106B4, 0xBB017C64, 0x866155D4, + 0x344189C4, 0x0921A074, 0x4E81DAA4, 0x73E1F314, + 0xF1B164C5, 0xCCD14D75, 0x8B7137A5, 0xB6111E15, + 0x0431C205, 0x3951EBB5, 0x7EF19165, 0x4391B8D5, + 0xA121B886, 0x9C419136, 0xDBE1EBE6, 0xE681C256, + 0x54A11E46, 0x69C137F6, 0x2E614D26, 0x13016496, + 0x9151F347, 0xAC31DAF7, 0xEB91A027, 0xD6F18997, + 0x64D15587, 0x59B17C37, 0x1E1106E7, 0x23712F57, + 0x58F35849, 0x659371F9, 0x22330B29, 0x1F532299, + 0xAD73FE89, 0x9013D739, 0xD7B3ADE9, 0xEAD38459, + 0x68831388, 0x55E33A38, 0x124340E8, 0x2F236958, + 0x9D03B548, 0xA0639CF8, 0xE7C3E628, 0xDAA3CF98, + 0x3813CFCB, 0x0573E67B, 0x42D39CAB, 0x7FB3B51B, + 0xCD93690B, 0xF0F340BB, 0xB7533A6B, 0x8A3313DB, + 0x0863840A, 0x3503ADBA, 0x72A3D76A, 0x4FC3FEDA, + 0xFDE322CA, 0xC0830B7A, 0x872371AA, 0xBA43581A, + 0x9932774D, 0xA4525EFD, 0xE3F2242D, 0xDE920D9D, + 0x6CB2D18D, 0x51D2F83D, 0x167282ED, 0x2B12AB5D, + 0xA9423C8C, 0x9422153C, 0xD3826FEC, 0xEEE2465C, + 0x5CC29A4C, 0x61A2B3FC, 0x2602C92C, 0x1B62E09C, + 0xF9D2E0CF, 0xC4B2C97F, 0x8312B3AF, 0xBE729A1F, + 0x0C52460F, 0x31326FBF, 0x7692156F, 0x4BF23CDF, + 0xC9A2AB0E, 0xF4C282BE, 0xB362F86E, 0x8E02D1DE, + 0x3C220DCE, 0x0142247E, 0x46E25EAE, 0x7B82771E, + 0xB1E6B092, 0x8C869922, 0xCB26E3F2, 0xF646CA42, + 0x44661652, 0x79063FE2, 0x3EA64532, 0x03C66C82, + 0x8196FB53, 0xBCF6D2E3, 0xFB56A833, 0xC6368183, + 0x74165D93, 0x49767423, 0x0ED60EF3, 0x33B62743, + 0xD1062710, 0xEC660EA0, 0xABC67470, 0x96A65DC0, + 0x248681D0, 0x19E6A860, 0x5E46D2B0, 0x6326FB00, + 0xE1766CD1, 0xDC164561, 0x9BB63FB1, 0xA6D61601, + 0x14F6CA11, 0x2996E3A1, 0x6E369971, 0x5356B0C1, + 0x70279F96, 0x4D47B626, 0x0AE7CCF6, 0x3787E546, + 0x85A73956, 0xB8C710E6, 0xFF676A36, 0xC2074386, + 0x4057D457, 0x7D37FDE7, 0x3A978737, 0x07F7AE87, + 0xB5D77297, 0x88B75B27, 0xCF1721F7, 0xF2770847, + 0x10C70814, 0x2DA721A4, 0x6A075B74, 0x576772C4, + 0xE547AED4, 0xD8278764, 0x9F87FDB4, 0xA2E7D404, + 0x20B743D5, 0x1DD76A65, 0x5A7710B5, 0x67173905, + 0xD537E515, 0xE857CCA5, 0xAFF7B675, 0x92979FC5, + 0xE915E8DB, 0xD475C16B, 0x93D5BBBB, 0xAEB5920B, + 0x1C954E1B, 0x21F567AB, 0x66551D7B, 0x5B3534CB, + 0xD965A31A, 0xE4058AAA, 0xA3A5F07A, 0x9EC5D9CA, + 0x2CE505DA, 0x11852C6A, 0x562556BA, 0x6B457F0A, + 0x89F57F59, 0xB49556E9, 0xF3352C39, 0xCE550589, + 0x7C75D999, 0x4115F029, 0x06B58AF9, 0x3BD5A349, + 0xB9853498, 0x84E51D28, 0xC34567F8, 0xFE254E48, + 0x4C059258, 0x7165BBE8, 0x36C5C138, 0x0BA5E888, + 0x28D4C7DF, 0x15B4EE6F, 0x521494BF, 0x6F74BD0F, + 0xDD54611F, 0xE03448AF, 0xA794327F, 0x9AF41BCF, + 0x18A48C1E, 0x25C4A5AE, 0x6264DF7E, 0x5F04F6CE, + 0xED242ADE, 0xD044036E, 0x97E479BE, 0xAA84500E, + 0x4834505D, 0x755479ED, 0x32F4033D, 0x0F942A8D, + 0xBDB4F69D, 0x80D4DF2D, 0xC774A5FD, 0xFA148C4D, + 0x78441B9C, 0x4524322C, 0x028448FC, 0x3FE4614C, + 0x8DC4BD5C, 0xB0A494EC, 0xF704EE3C, 0xCA64C78C + }, { + 0x00000000, 0xCB5CD3A5, 0x4DC8A10B, 0x869472AE, + 0x9B914216, 0x50CD91B3, 0xD659E31D, 0x1D0530B8, + 0xEC53826D, 0x270F51C8, 0xA19B2366, 0x6AC7F0C3, + 0x77C2C07B, 0xBC9E13DE, 0x3A0A6170, 0xF156B2D5, + 0x03D6029B, 0xC88AD13E, 0x4E1EA390, 0x85427035, + 0x9847408D, 0x531B9328, 0xD58FE186, 0x1ED33223, + 0xEF8580F6, 0x24D95353, 0xA24D21FD, 0x6911F258, + 0x7414C2E0, 0xBF481145, 0x39DC63EB, 0xF280B04E, + 0x07AC0536, 0xCCF0D693, 0x4A64A43D, 0x81387798, + 0x9C3D4720, 0x57619485, 0xD1F5E62B, 0x1AA9358E, + 0xEBFF875B, 0x20A354FE, 0xA6372650, 0x6D6BF5F5, + 0x706EC54D, 0xBB3216E8, 0x3DA66446, 0xF6FAB7E3, + 0x047A07AD, 0xCF26D408, 0x49B2A6A6, 0x82EE7503, + 0x9FEB45BB, 0x54B7961E, 0xD223E4B0, 0x197F3715, + 0xE82985C0, 0x23755665, 0xA5E124CB, 0x6EBDF76E, + 0x73B8C7D6, 0xB8E41473, 0x3E7066DD, 0xF52CB578, + 0x0F580A6C, 0xC404D9C9, 0x4290AB67, 0x89CC78C2, + 0x94C9487A, 0x5F959BDF, 0xD901E971, 0x125D3AD4, + 0xE30B8801, 0x28575BA4, 0xAEC3290A, 0x659FFAAF, + 0x789ACA17, 0xB3C619B2, 0x35526B1C, 0xFE0EB8B9, + 0x0C8E08F7, 0xC7D2DB52, 0x4146A9FC, 0x8A1A7A59, + 0x971F4AE1, 0x5C439944, 0xDAD7EBEA, 0x118B384F, + 0xE0DD8A9A, 0x2B81593F, 0xAD152B91, 0x6649F834, + 0x7B4CC88C, 0xB0101B29, 0x36846987, 0xFDD8BA22, + 0x08F40F5A, 0xC3A8DCFF, 0x453CAE51, 0x8E607DF4, + 0x93654D4C, 0x58399EE9, 0xDEADEC47, 0x15F13FE2, + 0xE4A78D37, 0x2FFB5E92, 0xA96F2C3C, 0x6233FF99, + 0x7F36CF21, 0xB46A1C84, 0x32FE6E2A, 0xF9A2BD8F, + 0x0B220DC1, 0xC07EDE64, 0x46EAACCA, 0x8DB67F6F, + 0x90B34FD7, 0x5BEF9C72, 0xDD7BEEDC, 0x16273D79, + 0xE7718FAC, 0x2C2D5C09, 0xAAB92EA7, 0x61E5FD02, + 0x7CE0CDBA, 0xB7BC1E1F, 0x31286CB1, 0xFA74BF14, + 0x1EB014D8, 0xD5ECC77D, 0x5378B5D3, 0x98246676, + 0x852156CE, 0x4E7D856B, 0xC8E9F7C5, 0x03B52460, + 0xF2E396B5, 0x39BF4510, 0xBF2B37BE, 0x7477E41B, + 0x6972D4A3, 0xA22E0706, 0x24BA75A8, 0xEFE6A60D, + 0x1D661643, 0xD63AC5E6, 0x50AEB748, 0x9BF264ED, + 0x86F75455, 0x4DAB87F0, 0xCB3FF55E, 0x006326FB, + 0xF135942E, 0x3A69478B, 0xBCFD3525, 0x77A1E680, + 0x6AA4D638, 0xA1F8059D, 0x276C7733, 0xEC30A496, + 0x191C11EE, 0xD240C24B, 0x54D4B0E5, 0x9F886340, + 0x828D53F8, 0x49D1805D, 0xCF45F2F3, 0x04192156, + 0xF54F9383, 0x3E134026, 0xB8873288, 0x73DBE12D, + 0x6EDED195, 0xA5820230, 0x2316709E, 0xE84AA33B, + 0x1ACA1375, 0xD196C0D0, 0x5702B27E, 0x9C5E61DB, + 0x815B5163, 0x4A0782C6, 0xCC93F068, 0x07CF23CD, + 0xF6999118, 0x3DC542BD, 0xBB513013, 0x700DE3B6, + 0x6D08D30E, 0xA65400AB, 0x20C07205, 0xEB9CA1A0, + 0x11E81EB4, 0xDAB4CD11, 0x5C20BFBF, 0x977C6C1A, + 0x8A795CA2, 0x41258F07, 0xC7B1FDA9, 0x0CED2E0C, + 0xFDBB9CD9, 0x36E74F7C, 0xB0733DD2, 0x7B2FEE77, + 0x662ADECF, 0xAD760D6A, 0x2BE27FC4, 0xE0BEAC61, + 0x123E1C2F, 0xD962CF8A, 0x5FF6BD24, 0x94AA6E81, + 0x89AF5E39, 0x42F38D9C, 0xC467FF32, 0x0F3B2C97, + 0xFE6D9E42, 0x35314DE7, 0xB3A53F49, 0x78F9ECEC, + 0x65FCDC54, 0xAEA00FF1, 0x28347D5F, 0xE368AEFA, + 0x16441B82, 0xDD18C827, 0x5B8CBA89, 0x90D0692C, + 0x8DD55994, 0x46898A31, 0xC01DF89F, 0x0B412B3A, + 0xFA1799EF, 0x314B4A4A, 0xB7DF38E4, 0x7C83EB41, + 0x6186DBF9, 0xAADA085C, 0x2C4E7AF2, 0xE712A957, + 0x15921919, 0xDECECABC, 0x585AB812, 0x93066BB7, + 0x8E035B0F, 0x455F88AA, 0xC3CBFA04, 0x089729A1, + 0xF9C19B74, 0x329D48D1, 0xB4093A7F, 0x7F55E9DA, + 0x6250D962, 0xA90C0AC7, 0x2F987869, 0xE4C4ABCC + }, { + 0x00000000, 0xA6770BB4, 0x979F1129, 0x31E81A9D, + 0xF44F2413, 0x52382FA7, 0x63D0353A, 0xC5A73E8E, + 0x33EF4E67, 0x959845D3, 0xA4705F4E, 0x020754FA, + 0xC7A06A74, 0x61D761C0, 0x503F7B5D, 0xF64870E9, + 0x67DE9CCE, 0xC1A9977A, 0xF0418DE7, 0x56368653, + 0x9391B8DD, 0x35E6B369, 0x040EA9F4, 0xA279A240, + 0x5431D2A9, 0xF246D91D, 0xC3AEC380, 0x65D9C834, + 0xA07EF6BA, 0x0609FD0E, 0x37E1E793, 0x9196EC27, + 0xCFBD399C, 0x69CA3228, 0x582228B5, 0xFE552301, + 0x3BF21D8F, 0x9D85163B, 0xAC6D0CA6, 0x0A1A0712, + 0xFC5277FB, 0x5A257C4F, 0x6BCD66D2, 0xCDBA6D66, + 0x081D53E8, 0xAE6A585C, 0x9F8242C1, 0x39F54975, + 0xA863A552, 0x0E14AEE6, 0x3FFCB47B, 0x998BBFCF, + 0x5C2C8141, 0xFA5B8AF5, 0xCBB39068, 0x6DC49BDC, + 0x9B8CEB35, 0x3DFBE081, 0x0C13FA1C, 0xAA64F1A8, + 0x6FC3CF26, 0xC9B4C492, 0xF85CDE0F, 0x5E2BD5BB, + 0x440B7579, 0xE27C7ECD, 0xD3946450, 0x75E36FE4, + 0xB044516A, 0x16335ADE, 0x27DB4043, 0x81AC4BF7, + 0x77E43B1E, 0xD19330AA, 0xE07B2A37, 0x460C2183, + 0x83AB1F0D, 0x25DC14B9, 0x14340E24, 0xB2430590, + 0x23D5E9B7, 0x85A2E203, 0xB44AF89E, 0x123DF32A, + 0xD79ACDA4, 0x71EDC610, 0x4005DC8D, 0xE672D739, + 0x103AA7D0, 0xB64DAC64, 0x87A5B6F9, 0x21D2BD4D, + 0xE47583C3, 0x42028877, 0x73EA92EA, 0xD59D995E, + 0x8BB64CE5, 0x2DC14751, 0x1C295DCC, 0xBA5E5678, + 0x7FF968F6, 0xD98E6342, 0xE86679DF, 0x4E11726B, + 0xB8590282, 0x1E2E0936, 0x2FC613AB, 0x89B1181F, + 0x4C162691, 0xEA612D25, 0xDB8937B8, 0x7DFE3C0C, + 0xEC68D02B, 0x4A1FDB9F, 0x7BF7C102, 0xDD80CAB6, + 0x1827F438, 0xBE50FF8C, 0x8FB8E511, 0x29CFEEA5, + 0xDF879E4C, 0x79F095F8, 0x48188F65, 0xEE6F84D1, + 0x2BC8BA5F, 0x8DBFB1EB, 0xBC57AB76, 0x1A20A0C2, + 0x8816EAF2, 0x2E61E146, 0x1F89FBDB, 0xB9FEF06F, + 0x7C59CEE1, 0xDA2EC555, 0xEBC6DFC8, 0x4DB1D47C, + 0xBBF9A495, 0x1D8EAF21, 0x2C66B5BC, 0x8A11BE08, + 0x4FB68086, 0xE9C18B32, 0xD82991AF, 0x7E5E9A1B, + 0xEFC8763C, 0x49BF7D88, 0x78576715, 0xDE206CA1, + 0x1B87522F, 0xBDF0599B, 0x8C184306, 0x2A6F48B2, + 0xDC27385B, 0x7A5033EF, 0x4BB82972, 0xEDCF22C6, + 0x28681C48, 0x8E1F17FC, 0xBFF70D61, 0x198006D5, + 0x47ABD36E, 0xE1DCD8DA, 0xD034C247, 0x7643C9F3, + 0xB3E4F77D, 0x1593FCC9, 0x247BE654, 0x820CEDE0, + 0x74449D09, 0xD23396BD, 0xE3DB8C20, 0x45AC8794, + 0x800BB91A, 0x267CB2AE, 0x1794A833, 0xB1E3A387, + 0x20754FA0, 0x86024414, 0xB7EA5E89, 0x119D553D, + 0xD43A6BB3, 0x724D6007, 0x43A57A9A, 0xE5D2712E, + 0x139A01C7, 0xB5ED0A73, 0x840510EE, 0x22721B5A, + 0xE7D525D4, 0x41A22E60, 0x704A34FD, 0xD63D3F49, + 0xCC1D9F8B, 0x6A6A943F, 0x5B828EA2, 0xFDF58516, + 0x3852BB98, 0x9E25B02C, 0xAFCDAAB1, 0x09BAA105, + 0xFFF2D1EC, 0x5985DA58, 0x686DC0C5, 0xCE1ACB71, + 0x0BBDF5FF, 0xADCAFE4B, 0x9C22E4D6, 0x3A55EF62, + 0xABC30345, 0x0DB408F1, 0x3C5C126C, 0x9A2B19D8, + 0x5F8C2756, 0xF9FB2CE2, 0xC813367F, 0x6E643DCB, + 0x982C4D22, 0x3E5B4696, 0x0FB35C0B, 0xA9C457BF, + 0x6C636931, 0xCA146285, 0xFBFC7818, 0x5D8B73AC, + 0x03A0A617, 0xA5D7ADA3, 0x943FB73E, 0x3248BC8A, + 0xF7EF8204, 0x519889B0, 0x6070932D, 0xC6079899, + 0x304FE870, 0x9638E3C4, 0xA7D0F959, 0x01A7F2ED, + 0xC400CC63, 0x6277C7D7, 0x539FDD4A, 0xF5E8D6FE, + 0x647E3AD9, 0xC209316D, 0xF3E12BF0, 0x55962044, + 0x90311ECA, 0x3646157E, 0x07AE0FE3, 0xA1D90457, + 0x579174BE, 0xF1E67F0A, 0xC00E6597, 0x66796E23, + 0xA3DE50AD, 0x05A95B19, 0x34414184, 0x92364A30 + }, { + 0x00000000, 0xCCAA009E, 0x4225077D, 0x8E8F07E3, + 0x844A0EFA, 0x48E00E64, 0xC66F0987, 0x0AC50919, + 0xD3E51BB5, 0x1F4F1B2B, 0x91C01CC8, 0x5D6A1C56, + 0x57AF154F, 0x9B0515D1, 0x158A1232, 0xD92012AC, + 0x7CBB312B, 0xB01131B5, 0x3E9E3656, 0xF23436C8, + 0xF8F13FD1, 0x345B3F4F, 0xBAD438AC, 0x767E3832, + 0xAF5E2A9E, 0x63F42A00, 0xED7B2DE3, 0x21D12D7D, + 0x2B142464, 0xE7BE24FA, 0x69312319, 0xA59B2387, + 0xF9766256, 0x35DC62C8, 0xBB53652B, 0x77F965B5, + 0x7D3C6CAC, 0xB1966C32, 0x3F196BD1, 0xF3B36B4F, + 0x2A9379E3, 0xE639797D, 0x68B67E9E, 0xA41C7E00, + 0xAED97719, 0x62737787, 0xECFC7064, 0x205670FA, + 0x85CD537D, 0x496753E3, 0xC7E85400, 0x0B42549E, + 0x01875D87, 0xCD2D5D19, 0x43A25AFA, 0x8F085A64, + 0x562848C8, 0x9A824856, 0x140D4FB5, 0xD8A74F2B, + 0xD2624632, 0x1EC846AC, 0x9047414F, 0x5CED41D1, + 0x299DC2ED, 0xE537C273, 0x6BB8C590, 0xA712C50E, + 0xADD7CC17, 0x617DCC89, 0xEFF2CB6A, 0x2358CBF4, + 0xFA78D958, 0x36D2D9C6, 0xB85DDE25, 0x74F7DEBB, + 0x7E32D7A2, 0xB298D73C, 0x3C17D0DF, 0xF0BDD041, + 0x5526F3C6, 0x998CF358, 0x1703F4BB, 0xDBA9F425, + 0xD16CFD3C, 0x1DC6FDA2, 0x9349FA41, 0x5FE3FADF, + 0x86C3E873, 0x4A69E8ED, 0xC4E6EF0E, 0x084CEF90, + 0x0289E689, 0xCE23E617, 0x40ACE1F4, 0x8C06E16A, + 0xD0EBA0BB, 0x1C41A025, 0x92CEA7C6, 0x5E64A758, + 0x54A1AE41, 0x980BAEDF, 0x1684A93C, 0xDA2EA9A2, + 0x030EBB0E, 0xCFA4BB90, 0x412BBC73, 0x8D81BCED, + 0x8744B5F4, 0x4BEEB56A, 0xC561B289, 0x09CBB217, + 0xAC509190, 0x60FA910E, 0xEE7596ED, 0x22DF9673, + 0x281A9F6A, 0xE4B09FF4, 0x6A3F9817, 0xA6959889, + 0x7FB58A25, 0xB31F8ABB, 0x3D908D58, 0xF13A8DC6, + 0xFBFF84DF, 0x37558441, 0xB9DA83A2, 0x7570833C, + 0x533B85DA, 0x9F918544, 0x111E82A7, 0xDDB48239, + 0xD7718B20, 0x1BDB8BBE, 0x95548C5D, 0x59FE8CC3, + 0x80DE9E6F, 0x4C749EF1, 0xC2FB9912, 0x0E51998C, + 0x04949095, 0xC83E900B, 0x46B197E8, 0x8A1B9776, + 0x2F80B4F1, 0xE32AB46F, 0x6DA5B38C, 0xA10FB312, + 0xABCABA0B, 0x6760BA95, 0xE9EFBD76, 0x2545BDE8, + 0xFC65AF44, 0x30CFAFDA, 0xBE40A839, 0x72EAA8A7, + 0x782FA1BE, 0xB485A120, 0x3A0AA6C3, 0xF6A0A65D, + 0xAA4DE78C, 0x66E7E712, 0xE868E0F1, 0x24C2E06F, + 0x2E07E976, 0xE2ADE9E8, 0x6C22EE0B, 0xA088EE95, + 0x79A8FC39, 0xB502FCA7, 0x3B8DFB44, 0xF727FBDA, + 0xFDE2F2C3, 0x3148F25D, 0xBFC7F5BE, 0x736DF520, + 0xD6F6D6A7, 0x1A5CD639, 0x94D3D1DA, 0x5879D144, + 0x52BCD85D, 0x9E16D8C3, 0x1099DF20, 0xDC33DFBE, + 0x0513CD12, 0xC9B9CD8C, 0x4736CA6F, 0x8B9CCAF1, + 0x8159C3E8, 0x4DF3C376, 0xC37CC495, 0x0FD6C40B, + 0x7AA64737, 0xB60C47A9, 0x3883404A, 0xF42940D4, + 0xFEEC49CD, 0x32464953, 0xBCC94EB0, 0x70634E2E, + 0xA9435C82, 0x65E95C1C, 0xEB665BFF, 0x27CC5B61, + 0x2D095278, 0xE1A352E6, 0x6F2C5505, 0xA386559B, + 0x061D761C, 0xCAB77682, 0x44387161, 0x889271FF, + 0x825778E6, 0x4EFD7878, 0xC0727F9B, 0x0CD87F05, + 0xD5F86DA9, 0x19526D37, 0x97DD6AD4, 0x5B776A4A, + 0x51B26353, 0x9D1863CD, 0x1397642E, 0xDF3D64B0, + 0x83D02561, 0x4F7A25FF, 0xC1F5221C, 0x0D5F2282, + 0x079A2B9B, 0xCB302B05, 0x45BF2CE6, 0x89152C78, + 0x50353ED4, 0x9C9F3E4A, 0x121039A9, 0xDEBA3937, + 0xD47F302E, 0x18D530B0, 0x965A3753, 0x5AF037CD, + 0xFF6B144A, 0x33C114D4, 0xBD4E1337, 0x71E413A9, + 0x7B211AB0, 0xB78B1A2E, 0x39041DCD, 0xF5AE1D53, + 0x2C8E0FFF, 0xE0240F61, 0x6EAB0882, 0xA201081C, + 0xA8C40105, 0x646E019B, 0xEAE10678, 0x264B06E6 + } +}; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_tablegen.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_tablegen.c new file mode 100644 index 00000000000..0cbfecd89dd --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_tablegen.c @@ -0,0 +1,91 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file crc32_tablegen.c +/// \brief Generate crc32_table_le.h and crc32_table_be.h +/// +/// Compiling: gcc -std=c99 -o crc32_tablegen crc32_tablegen.c +/// Add -DWORDS_BIGENDIAN to generate big endian table. +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include +#include + +#ifdef WORDS_BIGENDIAN +# include "../../common/bswap.h" +#endif + + +static uint32_t crc32_table[8][256]; + + +static void +init_crc32_table(void) +{ + static const uint32_t poly32 = UINT32_C(0xEDB88320); + + for (size_t s = 0; s < 8; ++s) { + for (size_t b = 0; b < 256; ++b) { + uint32_t r = s == 0 ? b : crc32_table[s - 1][b]; + + for (size_t i = 0; i < 8; ++i) { + if (r & 1) + r = (r >> 1) ^ poly32; + else + r >>= 1; + } + + crc32_table[s][b] = r; + } + } + +#ifdef WORDS_BIGENDIAN + for (size_t s = 0; s < 8; ++s) + for (size_t b = 0; b < 256; ++b) + crc32_table[s][b] = bswap_32(crc32_table[s][b]); +#endif + + return; +} + + +static void +print_crc32_table(void) +{ + printf("/* This file has been automatically generated by " + "crc32_tablegen.c. */\n\n" + "const uint32_t lzma_crc32_table[8][256] = {\n\t{"); + + for (size_t s = 0; s < 8; ++s) { + for (size_t b = 0; b < 256; ++b) { + if ((b % 4) == 0) + printf("\n\t\t"); + + printf("0x%08" PRIX32, crc32_table[s][b]); + + if (b != 255) + printf(",%s", (b+1) % 4 == 0 ? "" : " "); + } + + if (s == 7) + printf("\n\t}\n};\n"); + else + printf("\n\t}, {"); + } + + return; +} + + +int +main(void) +{ + init_crc32_table(); + print_crc32_table(); + return 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_x86.S b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_x86.S new file mode 100644 index 00000000000..cca29891f82 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc32_x86.S @@ -0,0 +1,304 @@ +/* + * Speed-optimized CRC32 using slicing-by-eight algorithm + * + * This uses only i386 instructions, but it is optimized for i686 and later + * (including e.g. Pentium II/III/IV, Athlon XP, and Core 2). For i586 + * (e.g. Pentium), slicing-by-four would be better, and even the C version + * of slicing-by-eight built with gcc -march=i586 tends to be a little bit + * better than this. Very few probably run this code on i586 or older x86 + * so this shouldn't be a problem in practice. + * + * Authors: Igor Pavlov (original version) + * Lasse Collin (AT&T syntax, PIC support, better portability) + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * This code needs lzma_crc32_table, which can be created using the + * following C code: + +uint32_t lzma_crc32_table[8][256]; + +void +init_table(void) +{ + // IEEE-802.3 + static const uint32_t poly32 = UINT32_C(0xEDB88320); + + // Castagnoli + // static const uint32_t poly32 = UINT32_C(0x82F63B78); + + // Koopman + // static const uint32_t poly32 = UINT32_C(0xEB31D82E); + + for (size_t s = 0; s < 8; ++s) { + for (size_t b = 0; b < 256; ++b) { + uint32_t r = s == 0 ? b : lzma_crc32_table[s - 1][b]; + + for (size_t i = 0; i < 8; ++i) { + if (r & 1) + r = (r >> 1) ^ poly32; + else + r >>= 1; + } + + lzma_crc32_table[s][b] = r; + } + } +} + + * The prototype of the CRC32 function: + * extern uint32_t lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc); + */ + +/* + * On some systems, the functions need to be prefixed. The prefix is + * usually an underscore. + */ +#ifndef __USER_LABEL_PREFIX__ +# define __USER_LABEL_PREFIX__ +#endif +#define MAKE_SYM_CAT(prefix, sym) prefix ## sym +#define MAKE_SYM(prefix, sym) MAKE_SYM_CAT(prefix, sym) +#define LZMA_CRC32 MAKE_SYM(__USER_LABEL_PREFIX__, lzma_crc32) +#define LZMA_CRC32_TABLE MAKE_SYM(__USER_LABEL_PREFIX__, lzma_crc32_table) + +/* + * Solaris assembler doesn't have .p2align, and Darwin uses .align + * differently than GNU/Linux and Solaris. + */ +#if defined(__MACH__) || defined(__MSDOS__) +# define ALIGN(pow2, abs) .align pow2 +#else +# define ALIGN(pow2, abs) .align abs +#endif + + .text + .globl LZMA_CRC32 + +#if !defined(__MACH__) && !defined(_WIN32) && !defined(__CYGWIN__) \ + && !defined(__MSDOS__) + .type LZMA_CRC32, @function +#endif + + ALIGN(4, 16) +LZMA_CRC32: + /* + * Register usage: + * %eax crc + * %esi buf + * %edi size or buf + size + * %ebx lzma_crc32_table + * %ebp Table index + * %ecx Temporary + * %edx Temporary + */ + pushl %ebx + pushl %esi + pushl %edi + pushl %ebp + movl 0x14(%esp), %esi /* buf */ + movl 0x18(%esp), %edi /* size */ + movl 0x1C(%esp), %eax /* crc */ + + /* + * Store the address of lzma_crc32_table to %ebx. This is needed to + * get position-independent code (PIC). + * + * The PIC macro is defined by libtool, while __PIC__ is defined + * by GCC but only on some systems. Testing for both makes it simpler + * to test this code without libtool, and keeps the code working also + * when built with libtool but using something else than GCC. + * + * I understood that libtool may define PIC on Windows even though + * the code in Windows DLLs is not PIC in sense that it is in ELF + * binaries, so we need a separate check to always use the non-PIC + * code on Windows. + */ +#if (!defined(PIC) && !defined(__PIC__)) \ + || (defined(_WIN32) || defined(__CYGWIN__)) + /* Not PIC */ + movl $LZMA_CRC32_TABLE, %ebx +#elif defined(__MACH__) + /* Mach-O */ + call .L_get_pc +.L_pic: + leal .L_lzma_crc32_table$non_lazy_ptr-.L_pic(%ebx), %ebx + movl (%ebx), %ebx +#else + /* ELF */ + call .L_get_pc + addl $_GLOBAL_OFFSET_TABLE_, %ebx + movl LZMA_CRC32_TABLE@GOT(%ebx), %ebx +#endif + + /* Complement the initial value. */ + notl %eax + + ALIGN(4, 16) +.L_align: + /* + * Check if there is enough input to use slicing-by-eight. + * We need 16 bytes, because the loop pre-reads eight bytes. + */ + cmpl $16, %edi + jl .L_rest + + /* Check if we have reached alignment of eight bytes. */ + testl $7, %esi + jz .L_slice + + /* Calculate CRC of the next input byte. */ + movzbl (%esi), %ebp + incl %esi + movzbl %al, %ecx + xorl %ecx, %ebp + shrl $8, %eax + xorl (%ebx, %ebp, 4), %eax + decl %edi + jmp .L_align + + ALIGN(2, 4) +.L_slice: + /* + * If we get here, there's at least 16 bytes of aligned input + * available. Make %edi multiple of eight bytes. Store the possible + * remainder over the "size" variable in the argument stack. + */ + movl %edi, 0x18(%esp) + andl $-8, %edi + subl %edi, 0x18(%esp) + + /* + * Let %edi be buf + size - 8 while running the main loop. This way + * we can compare for equality to determine when exit the loop. + */ + addl %esi, %edi + subl $8, %edi + + /* Read in the first eight aligned bytes. */ + xorl (%esi), %eax + movl 4(%esi), %ecx + movzbl %cl, %ebp + +.L_loop: + movl 0x0C00(%ebx, %ebp, 4), %edx + movzbl %ch, %ebp + xorl 0x0800(%ebx, %ebp, 4), %edx + shrl $16, %ecx + xorl 8(%esi), %edx + movzbl %cl, %ebp + xorl 0x0400(%ebx, %ebp, 4), %edx + movzbl %ch, %ebp + xorl (%ebx, %ebp, 4), %edx + movzbl %al, %ebp + + /* + * Read the next four bytes, for which the CRC is calculated + * on the next interation of the loop. + */ + movl 12(%esi), %ecx + + xorl 0x1C00(%ebx, %ebp, 4), %edx + movzbl %ah, %ebp + shrl $16, %eax + xorl 0x1800(%ebx, %ebp, 4), %edx + movzbl %ah, %ebp + movzbl %al, %eax + movl 0x1400(%ebx, %eax, 4), %eax + addl $8, %esi + xorl %edx, %eax + xorl 0x1000(%ebx, %ebp, 4), %eax + + /* Check for end of aligned input. */ + cmpl %edi, %esi + movzbl %cl, %ebp + jne .L_loop + + /* + * Process the remaining eight bytes, which we have already + * copied to %ecx and %edx. + */ + movl 0x0C00(%ebx, %ebp, 4), %edx + movzbl %ch, %ebp + xorl 0x0800(%ebx, %ebp, 4), %edx + shrl $16, %ecx + movzbl %cl, %ebp + xorl 0x0400(%ebx, %ebp, 4), %edx + movzbl %ch, %ebp + xorl (%ebx, %ebp, 4), %edx + movzbl %al, %ebp + + xorl 0x1C00(%ebx, %ebp, 4), %edx + movzbl %ah, %ebp + shrl $16, %eax + xorl 0x1800(%ebx, %ebp, 4), %edx + movzbl %ah, %ebp + movzbl %al, %eax + movl 0x1400(%ebx, %eax, 4), %eax + addl $8, %esi + xorl %edx, %eax + xorl 0x1000(%ebx, %ebp, 4), %eax + + /* Copy the number of remaining bytes to %edi. */ + movl 0x18(%esp), %edi + +.L_rest: + /* Check for end of input. */ + testl %edi, %edi + jz .L_return + + /* Calculate CRC of the next input byte. */ + movzbl (%esi), %ebp + incl %esi + movzbl %al, %ecx + xorl %ecx, %ebp + shrl $8, %eax + xorl (%ebx, %ebp, 4), %eax + decl %edi + jmp .L_rest + +.L_return: + /* Complement the final value. */ + notl %eax + + popl %ebp + popl %edi + popl %esi + popl %ebx + ret + +#if defined(PIC) || defined(__PIC__) + ALIGN(4, 16) +.L_get_pc: + movl (%esp), %ebx + ret +#endif + +#if defined(__MACH__) && (defined(PIC) || defined(__PIC__)) + /* Mach-O PIC */ + .section __IMPORT,__pointers,non_lazy_symbol_pointers +.L_lzma_crc32_table$non_lazy_ptr: + .indirect_symbol LZMA_CRC32_TABLE + .long 0 + +#elif defined(_WIN32) || defined(__CYGWIN__) +# ifdef DLL_EXPORT + /* This is equivalent of __declspec(dllexport). */ + .section .drectve + .ascii " -export:lzma_crc32" +# endif + +#elif !defined(__MSDOS__) + /* ELF */ + .size LZMA_CRC32, .-LZMA_CRC32 +#endif + +/* + * This is needed to support non-executable stack. It's ugly to + * use __linux__ here, but I don't know a way to detect when + * we are using GNU assembler. + */ +#if defined(__ELF__) && defined(__linux__) + .section .note.GNU-stack,"",@progbits +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_fast.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_fast.c new file mode 100644 index 00000000000..25557264b8a --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_fast.c @@ -0,0 +1,71 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file crc64.c +/// \brief CRC64 calculation +/// +/// Calculate the CRC64 using the slice-by-four algorithm. This is the same +/// idea that is used in crc32_fast.c, but for CRC64 we use only four tables +/// instead of eight to avoid increasing CPU cache usage. +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "check.h" +#include "crc_macros.h" + + +#ifdef WORDS_BIGENDIAN +# define A1(x) ((x) >> 56) +#else +# define A1 A +#endif + + +// See the comments in crc32_fast.c. They aren't duplicated here. +extern LZMA_API(uint64_t) +lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc) +{ + crc = ~crc; + +#ifdef WORDS_BIGENDIAN + crc = bswap_64(crc); +#endif + + if (size > 4) { + while ((uintptr_t)(buf) & 3) { + crc = lzma_crc64_table[0][*buf++ ^ A1(crc)] ^ S8(crc); + --size; + } + + const uint8_t *const limit = buf + (size & ~(size_t)(3)); + size &= (size_t)(3); + + while (buf < limit) { +#ifdef WORDS_BIGENDIAN + const uint32_t tmp = (crc >> 32) ^ *(uint32_t *)(buf); +#else + const uint32_t tmp = crc ^ *(uint32_t *)(buf); +#endif + buf += 4; + + crc = lzma_crc64_table[3][A(tmp)] + ^ lzma_crc64_table[2][B(tmp)] + ^ S32(crc) + ^ lzma_crc64_table[1][C(tmp)] + ^ lzma_crc64_table[0][D(tmp)]; + } + } + + while (size-- != 0) + crc = lzma_crc64_table[0][*buf++ ^ A1(crc)] ^ S8(crc); + +#ifdef WORDS_BIGENDIAN + crc = bswap_64(crc); +#endif + + return ~crc; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_small.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_small.c new file mode 100644 index 00000000000..55d72316bce --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_small.c @@ -0,0 +1,53 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file crc64_small.c +/// \brief CRC64 calculation (size-optimized) +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "check.h" + + +static uint64_t crc64_table[256]; + + +static void +crc64_init(void) +{ + static const uint64_t poly64 = UINT64_C(0xC96C5795D7870F42); + + for (size_t b = 0; b < 256; ++b) { + uint64_t r = b; + for (size_t i = 0; i < 8; ++i) { + if (r & 1) + r = (r >> 1) ^ poly64; + else + r >>= 1; + } + + crc64_table[b] = r; + } + + return; +} + + +extern LZMA_API(uint64_t) +lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc) +{ + mythread_once(crc64_init); + + crc = ~crc; + + while (size != 0) { + crc = crc64_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8); + --size; + } + + return ~crc; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_table.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_table.c new file mode 100644 index 00000000000..1fbcd94703c --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_table.c @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file crc64_table.c +/// \brief Precalculated CRC64 table with correct endianness +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "common.h" + +#ifdef WORDS_BIGENDIAN +# include "crc64_table_be.h" +#else +# include "crc64_table_le.h" +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_table_be.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_table_be.h new file mode 100644 index 00000000000..ea074f397a7 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_table_be.h @@ -0,0 +1,521 @@ +/* This file has been automatically generated by crc64_tablegen.c. */ + +const uint64_t lzma_crc64_table[4][256] = { + { + UINT64_C(0x0000000000000000), UINT64_C(0x6F5FA703BE4C2EB3), + UINT64_C(0x5BA040A8573684F4), UINT64_C(0x34FFE7ABE97AAA47), + UINT64_C(0x335E8FFF84C3D07B), UINT64_C(0x5C0128FC3A8FFEC8), + UINT64_C(0x68FECF57D3F5548F), UINT64_C(0x07A168546DB97A3C), + UINT64_C(0x66BC1EFF0987A1F7), UINT64_C(0x09E3B9FCB7CB8F44), + UINT64_C(0x3D1C5E575EB12503), UINT64_C(0x5243F954E0FD0BB0), + UINT64_C(0x55E291008D44718C), UINT64_C(0x3ABD360333085F3F), + UINT64_C(0x0E42D1A8DA72F578), UINT64_C(0x611D76AB643EDBCB), + UINT64_C(0x4966335138A19B7D), UINT64_C(0x2639945286EDB5CE), + UINT64_C(0x12C673F96F971F89), UINT64_C(0x7D99D4FAD1DB313A), + UINT64_C(0x7A38BCAEBC624B06), UINT64_C(0x15671BAD022E65B5), + UINT64_C(0x2198FC06EB54CFF2), UINT64_C(0x4EC75B055518E141), + UINT64_C(0x2FDA2DAE31263A8A), UINT64_C(0x40858AAD8F6A1439), + UINT64_C(0x747A6D066610BE7E), UINT64_C(0x1B25CA05D85C90CD), + UINT64_C(0x1C84A251B5E5EAF1), UINT64_C(0x73DB05520BA9C442), + UINT64_C(0x4724E2F9E2D36E05), UINT64_C(0x287B45FA5C9F40B6), + UINT64_C(0x92CC66A2704237FB), UINT64_C(0xFD93C1A1CE0E1948), + UINT64_C(0xC96C260A2774B30F), UINT64_C(0xA633810999389DBC), + UINT64_C(0xA192E95DF481E780), UINT64_C(0xCECD4E5E4ACDC933), + UINT64_C(0xFA32A9F5A3B76374), UINT64_C(0x956D0EF61DFB4DC7), + UINT64_C(0xF470785D79C5960C), UINT64_C(0x9B2FDF5EC789B8BF), + UINT64_C(0xAFD038F52EF312F8), UINT64_C(0xC08F9FF690BF3C4B), + UINT64_C(0xC72EF7A2FD064677), UINT64_C(0xA87150A1434A68C4), + UINT64_C(0x9C8EB70AAA30C283), UINT64_C(0xF3D11009147CEC30), + UINT64_C(0xDBAA55F348E3AC86), UINT64_C(0xB4F5F2F0F6AF8235), + UINT64_C(0x800A155B1FD52872), UINT64_C(0xEF55B258A19906C1), + UINT64_C(0xE8F4DA0CCC207CFD), UINT64_C(0x87AB7D0F726C524E), + UINT64_C(0xB3549AA49B16F809), UINT64_C(0xDC0B3DA7255AD6BA), + UINT64_C(0xBD164B0C41640D71), UINT64_C(0xD249EC0FFF2823C2), + UINT64_C(0xE6B60BA416528985), UINT64_C(0x89E9ACA7A81EA736), + UINT64_C(0x8E48C4F3C5A7DD0A), UINT64_C(0xE11763F07BEBF3B9), + UINT64_C(0xD5E8845B929159FE), UINT64_C(0xBAB723582CDD774D), + UINT64_C(0xA187C3EBCA2BB664), UINT64_C(0xCED864E8746798D7), + UINT64_C(0xFA2783439D1D3290), UINT64_C(0x9578244023511C23), + UINT64_C(0x92D94C144EE8661F), UINT64_C(0xFD86EB17F0A448AC), + UINT64_C(0xC9790CBC19DEE2EB), UINT64_C(0xA626ABBFA792CC58), + UINT64_C(0xC73BDD14C3AC1793), UINT64_C(0xA8647A177DE03920), + UINT64_C(0x9C9B9DBC949A9367), UINT64_C(0xF3C43ABF2AD6BDD4), + UINT64_C(0xF46552EB476FC7E8), UINT64_C(0x9B3AF5E8F923E95B), + UINT64_C(0xAFC512431059431C), UINT64_C(0xC09AB540AE156DAF), + UINT64_C(0xE8E1F0BAF28A2D19), UINT64_C(0x87BE57B94CC603AA), + UINT64_C(0xB341B012A5BCA9ED), UINT64_C(0xDC1E17111BF0875E), + UINT64_C(0xDBBF7F457649FD62), UINT64_C(0xB4E0D846C805D3D1), + UINT64_C(0x801F3FED217F7996), UINT64_C(0xEF4098EE9F335725), + UINT64_C(0x8E5DEE45FB0D8CEE), UINT64_C(0xE10249464541A25D), + UINT64_C(0xD5FDAEEDAC3B081A), UINT64_C(0xBAA209EE127726A9), + UINT64_C(0xBD0361BA7FCE5C95), UINT64_C(0xD25CC6B9C1827226), + UINT64_C(0xE6A3211228F8D861), UINT64_C(0x89FC861196B4F6D2), + UINT64_C(0x334BA549BA69819F), UINT64_C(0x5C14024A0425AF2C), + UINT64_C(0x68EBE5E1ED5F056B), UINT64_C(0x07B442E253132BD8), + UINT64_C(0x00152AB63EAA51E4), UINT64_C(0x6F4A8DB580E67F57), + UINT64_C(0x5BB56A1E699CD510), UINT64_C(0x34EACD1DD7D0FBA3), + UINT64_C(0x55F7BBB6B3EE2068), UINT64_C(0x3AA81CB50DA20EDB), + UINT64_C(0x0E57FB1EE4D8A49C), UINT64_C(0x61085C1D5A948A2F), + UINT64_C(0x66A93449372DF013), UINT64_C(0x09F6934A8961DEA0), + UINT64_C(0x3D0974E1601B74E7), UINT64_C(0x5256D3E2DE575A54), + UINT64_C(0x7A2D961882C81AE2), UINT64_C(0x1572311B3C843451), + UINT64_C(0x218DD6B0D5FE9E16), UINT64_C(0x4ED271B36BB2B0A5), + UINT64_C(0x497319E7060BCA99), UINT64_C(0x262CBEE4B847E42A), + UINT64_C(0x12D3594F513D4E6D), UINT64_C(0x7D8CFE4CEF7160DE), + UINT64_C(0x1C9188E78B4FBB15), UINT64_C(0x73CE2FE4350395A6), + UINT64_C(0x4731C84FDC793FE1), UINT64_C(0x286E6F4C62351152), + UINT64_C(0x2FCF07180F8C6B6E), UINT64_C(0x4090A01BB1C045DD), + UINT64_C(0x746F47B058BAEF9A), UINT64_C(0x1B30E0B3E6F6C129), + UINT64_C(0x420F87D795576CC9), UINT64_C(0x2D5020D42B1B427A), + UINT64_C(0x19AFC77FC261E83D), UINT64_C(0x76F0607C7C2DC68E), + UINT64_C(0x715108281194BCB2), UINT64_C(0x1E0EAF2BAFD89201), + UINT64_C(0x2AF1488046A23846), UINT64_C(0x45AEEF83F8EE16F5), + UINT64_C(0x24B399289CD0CD3E), UINT64_C(0x4BEC3E2B229CE38D), + UINT64_C(0x7F13D980CBE649CA), UINT64_C(0x104C7E8375AA6779), + UINT64_C(0x17ED16D718131D45), UINT64_C(0x78B2B1D4A65F33F6), + UINT64_C(0x4C4D567F4F2599B1), UINT64_C(0x2312F17CF169B702), + UINT64_C(0x0B69B486ADF6F7B4), UINT64_C(0x6436138513BAD907), + UINT64_C(0x50C9F42EFAC07340), UINT64_C(0x3F96532D448C5DF3), + UINT64_C(0x38373B79293527CF), UINT64_C(0x57689C7A9779097C), + UINT64_C(0x63977BD17E03A33B), UINT64_C(0x0CC8DCD2C04F8D88), + UINT64_C(0x6DD5AA79A4715643), UINT64_C(0x028A0D7A1A3D78F0), + UINT64_C(0x3675EAD1F347D2B7), UINT64_C(0x592A4DD24D0BFC04), + UINT64_C(0x5E8B258620B28638), UINT64_C(0x31D482859EFEA88B), + UINT64_C(0x052B652E778402CC), UINT64_C(0x6A74C22DC9C82C7F), + UINT64_C(0xD0C3E175E5155B32), UINT64_C(0xBF9C46765B597581), + UINT64_C(0x8B63A1DDB223DFC6), UINT64_C(0xE43C06DE0C6FF175), + UINT64_C(0xE39D6E8A61D68B49), UINT64_C(0x8CC2C989DF9AA5FA), + UINT64_C(0xB83D2E2236E00FBD), UINT64_C(0xD762892188AC210E), + UINT64_C(0xB67FFF8AEC92FAC5), UINT64_C(0xD920588952DED476), + UINT64_C(0xEDDFBF22BBA47E31), UINT64_C(0x8280182105E85082), + UINT64_C(0x8521707568512ABE), UINT64_C(0xEA7ED776D61D040D), + UINT64_C(0xDE8130DD3F67AE4A), UINT64_C(0xB1DE97DE812B80F9), + UINT64_C(0x99A5D224DDB4C04F), UINT64_C(0xF6FA752763F8EEFC), + UINT64_C(0xC205928C8A8244BB), UINT64_C(0xAD5A358F34CE6A08), + UINT64_C(0xAAFB5DDB59771034), UINT64_C(0xC5A4FAD8E73B3E87), + UINT64_C(0xF15B1D730E4194C0), UINT64_C(0x9E04BA70B00DBA73), + UINT64_C(0xFF19CCDBD43361B8), UINT64_C(0x90466BD86A7F4F0B), + UINT64_C(0xA4B98C738305E54C), UINT64_C(0xCBE62B703D49CBFF), + UINT64_C(0xCC47432450F0B1C3), UINT64_C(0xA318E427EEBC9F70), + UINT64_C(0x97E7038C07C63537), UINT64_C(0xF8B8A48FB98A1B84), + UINT64_C(0xE388443C5F7CDAAD), UINT64_C(0x8CD7E33FE130F41E), + UINT64_C(0xB8280494084A5E59), UINT64_C(0xD777A397B60670EA), + UINT64_C(0xD0D6CBC3DBBF0AD6), UINT64_C(0xBF896CC065F32465), + UINT64_C(0x8B768B6B8C898E22), UINT64_C(0xE4292C6832C5A091), + UINT64_C(0x85345AC356FB7B5A), UINT64_C(0xEA6BFDC0E8B755E9), + UINT64_C(0xDE941A6B01CDFFAE), UINT64_C(0xB1CBBD68BF81D11D), + UINT64_C(0xB66AD53CD238AB21), UINT64_C(0xD935723F6C748592), + UINT64_C(0xEDCA9594850E2FD5), UINT64_C(0x829532973B420166), + UINT64_C(0xAAEE776D67DD41D0), UINT64_C(0xC5B1D06ED9916F63), + UINT64_C(0xF14E37C530EBC524), UINT64_C(0x9E1190C68EA7EB97), + UINT64_C(0x99B0F892E31E91AB), UINT64_C(0xF6EF5F915D52BF18), + UINT64_C(0xC210B83AB428155F), UINT64_C(0xAD4F1F390A643BEC), + UINT64_C(0xCC5269926E5AE027), UINT64_C(0xA30DCE91D016CE94), + UINT64_C(0x97F2293A396C64D3), UINT64_C(0xF8AD8E3987204A60), + UINT64_C(0xFF0CE66DEA99305C), UINT64_C(0x9053416E54D51EEF), + UINT64_C(0xA4ACA6C5BDAFB4A8), UINT64_C(0xCBF301C603E39A1B), + UINT64_C(0x7144229E2F3EED56), UINT64_C(0x1E1B859D9172C3E5), + UINT64_C(0x2AE46236780869A2), UINT64_C(0x45BBC535C6444711), + UINT64_C(0x421AAD61ABFD3D2D), UINT64_C(0x2D450A6215B1139E), + UINT64_C(0x19BAEDC9FCCBB9D9), UINT64_C(0x76E54ACA4287976A), + UINT64_C(0x17F83C6126B94CA1), UINT64_C(0x78A79B6298F56212), + UINT64_C(0x4C587CC9718FC855), UINT64_C(0x2307DBCACFC3E6E6), + UINT64_C(0x24A6B39EA27A9CDA), UINT64_C(0x4BF9149D1C36B269), + UINT64_C(0x7F06F336F54C182E), UINT64_C(0x105954354B00369D), + UINT64_C(0x382211CF179F762B), UINT64_C(0x577DB6CCA9D35898), + UINT64_C(0x6382516740A9F2DF), UINT64_C(0x0CDDF664FEE5DC6C), + UINT64_C(0x0B7C9E30935CA650), UINT64_C(0x642339332D1088E3), + UINT64_C(0x50DCDE98C46A22A4), UINT64_C(0x3F83799B7A260C17), + UINT64_C(0x5E9E0F301E18D7DC), UINT64_C(0x31C1A833A054F96F), + UINT64_C(0x053E4F98492E5328), UINT64_C(0x6A61E89BF7627D9B), + UINT64_C(0x6DC080CF9ADB07A7), UINT64_C(0x029F27CC24972914), + UINT64_C(0x3660C067CDED8353), UINT64_C(0x593F676473A1ADE0) + }, { + UINT64_C(0x0000000000000000), UINT64_C(0x0DF1D05C9279E954), + UINT64_C(0x1AE2A1B924F3D2A9), UINT64_C(0x171371E5B68A3BFD), + UINT64_C(0xB1DA4DDC62497DC1), UINT64_C(0xBC2B9D80F0309495), + UINT64_C(0xAB38EC6546BAAF68), UINT64_C(0xA6C93C39D4C3463C), + UINT64_C(0xE7AB9517EE3D2210), UINT64_C(0xEA5A454B7C44CB44), + UINT64_C(0xFD4934AECACEF0B9), UINT64_C(0xF0B8E4F258B719ED), + UINT64_C(0x5671D8CB8C745FD1), UINT64_C(0x5B8008971E0DB685), + UINT64_C(0x4C937972A8878D78), UINT64_C(0x4162A92E3AFE642C), + UINT64_C(0xCE572B2FDC7B4420), UINT64_C(0xC3A6FB734E02AD74), + UINT64_C(0xD4B58A96F8889689), UINT64_C(0xD9445ACA6AF17FDD), + UINT64_C(0x7F8D66F3BE3239E1), UINT64_C(0x727CB6AF2C4BD0B5), + UINT64_C(0x656FC74A9AC1EB48), UINT64_C(0x689E171608B8021C), + UINT64_C(0x29FCBE3832466630), UINT64_C(0x240D6E64A03F8F64), + UINT64_C(0x331E1F8116B5B499), UINT64_C(0x3EEFCFDD84CC5DCD), + UINT64_C(0x9826F3E4500F1BF1), UINT64_C(0x95D723B8C276F2A5), + UINT64_C(0x82C4525D74FCC958), UINT64_C(0x8F358201E685200C), + UINT64_C(0x9CAF565EB8F78840), UINT64_C(0x915E86022A8E6114), + UINT64_C(0x864DF7E79C045AE9), UINT64_C(0x8BBC27BB0E7DB3BD), + UINT64_C(0x2D751B82DABEF581), UINT64_C(0x2084CBDE48C71CD5), + UINT64_C(0x3797BA3BFE4D2728), UINT64_C(0x3A666A676C34CE7C), + UINT64_C(0x7B04C34956CAAA50), UINT64_C(0x76F51315C4B34304), + UINT64_C(0x61E662F0723978F9), UINT64_C(0x6C17B2ACE04091AD), + UINT64_C(0xCADE8E953483D791), UINT64_C(0xC72F5EC9A6FA3EC5), + UINT64_C(0xD03C2F2C10700538), UINT64_C(0xDDCDFF708209EC6C), + UINT64_C(0x52F87D71648CCC60), UINT64_C(0x5F09AD2DF6F52534), + UINT64_C(0x481ADCC8407F1EC9), UINT64_C(0x45EB0C94D206F79D), + UINT64_C(0xE32230AD06C5B1A1), UINT64_C(0xEED3E0F194BC58F5), + UINT64_C(0xF9C0911422366308), UINT64_C(0xF4314148B04F8A5C), + UINT64_C(0xB553E8668AB1EE70), UINT64_C(0xB8A2383A18C80724), + UINT64_C(0xAFB149DFAE423CD9), UINT64_C(0xA24099833C3BD58D), + UINT64_C(0x0489A5BAE8F893B1), UINT64_C(0x097875E67A817AE5), + UINT64_C(0x1E6B0403CC0B4118), UINT64_C(0x139AD45F5E72A84C), + UINT64_C(0x385FADBC70EF1181), UINT64_C(0x35AE7DE0E296F8D5), + UINT64_C(0x22BD0C05541CC328), UINT64_C(0x2F4CDC59C6652A7C), + UINT64_C(0x8985E06012A66C40), UINT64_C(0x8474303C80DF8514), + UINT64_C(0x936741D93655BEE9), UINT64_C(0x9E969185A42C57BD), + UINT64_C(0xDFF438AB9ED23391), UINT64_C(0xD205E8F70CABDAC5), + UINT64_C(0xC5169912BA21E138), UINT64_C(0xC8E7494E2858086C), + UINT64_C(0x6E2E7577FC9B4E50), UINT64_C(0x63DFA52B6EE2A704), + UINT64_C(0x74CCD4CED8689CF9), UINT64_C(0x793D04924A1175AD), + UINT64_C(0xF6088693AC9455A1), UINT64_C(0xFBF956CF3EEDBCF5), + UINT64_C(0xECEA272A88678708), UINT64_C(0xE11BF7761A1E6E5C), + UINT64_C(0x47D2CB4FCEDD2860), UINT64_C(0x4A231B135CA4C134), + UINT64_C(0x5D306AF6EA2EFAC9), UINT64_C(0x50C1BAAA7857139D), + UINT64_C(0x11A3138442A977B1), UINT64_C(0x1C52C3D8D0D09EE5), + UINT64_C(0x0B41B23D665AA518), UINT64_C(0x06B06261F4234C4C), + UINT64_C(0xA0795E5820E00A70), UINT64_C(0xAD888E04B299E324), + UINT64_C(0xBA9BFFE10413D8D9), UINT64_C(0xB76A2FBD966A318D), + UINT64_C(0xA4F0FBE2C81899C1), UINT64_C(0xA9012BBE5A617095), + UINT64_C(0xBE125A5BECEB4B68), UINT64_C(0xB3E38A077E92A23C), + UINT64_C(0x152AB63EAA51E400), UINT64_C(0x18DB666238280D54), + UINT64_C(0x0FC817878EA236A9), UINT64_C(0x0239C7DB1CDBDFFD), + UINT64_C(0x435B6EF52625BBD1), UINT64_C(0x4EAABEA9B45C5285), + UINT64_C(0x59B9CF4C02D66978), UINT64_C(0x54481F1090AF802C), + UINT64_C(0xF2812329446CC610), UINT64_C(0xFF70F375D6152F44), + UINT64_C(0xE8638290609F14B9), UINT64_C(0xE59252CCF2E6FDED), + UINT64_C(0x6AA7D0CD1463DDE1), UINT64_C(0x67560091861A34B5), + UINT64_C(0x7045717430900F48), UINT64_C(0x7DB4A128A2E9E61C), + UINT64_C(0xDB7D9D11762AA020), UINT64_C(0xD68C4D4DE4534974), + UINT64_C(0xC19F3CA852D97289), UINT64_C(0xCC6EECF4C0A09BDD), + UINT64_C(0x8D0C45DAFA5EFFF1), UINT64_C(0x80FD9586682716A5), + UINT64_C(0x97EEE463DEAD2D58), UINT64_C(0x9A1F343F4CD4C40C), + UINT64_C(0x3CD6080698178230), UINT64_C(0x3127D85A0A6E6B64), + UINT64_C(0x2634A9BFBCE45099), UINT64_C(0x2BC579E32E9DB9CD), + UINT64_C(0xF5A054D6CA71FB90), UINT64_C(0xF851848A580812C4), + UINT64_C(0xEF42F56FEE822939), UINT64_C(0xE2B325337CFBC06D), + UINT64_C(0x447A190AA8388651), UINT64_C(0x498BC9563A416F05), + UINT64_C(0x5E98B8B38CCB54F8), UINT64_C(0x536968EF1EB2BDAC), + UINT64_C(0x120BC1C1244CD980), UINT64_C(0x1FFA119DB63530D4), + UINT64_C(0x08E9607800BF0B29), UINT64_C(0x0518B02492C6E27D), + UINT64_C(0xA3D18C1D4605A441), UINT64_C(0xAE205C41D47C4D15), + UINT64_C(0xB9332DA462F676E8), UINT64_C(0xB4C2FDF8F08F9FBC), + UINT64_C(0x3BF77FF9160ABFB0), UINT64_C(0x3606AFA5847356E4), + UINT64_C(0x2115DE4032F96D19), UINT64_C(0x2CE40E1CA080844D), + UINT64_C(0x8A2D32257443C271), UINT64_C(0x87DCE279E63A2B25), + UINT64_C(0x90CF939C50B010D8), UINT64_C(0x9D3E43C0C2C9F98C), + UINT64_C(0xDC5CEAEEF8379DA0), UINT64_C(0xD1AD3AB26A4E74F4), + UINT64_C(0xC6BE4B57DCC44F09), UINT64_C(0xCB4F9B0B4EBDA65D), + UINT64_C(0x6D86A7329A7EE061), UINT64_C(0x6077776E08070935), + UINT64_C(0x7764068BBE8D32C8), UINT64_C(0x7A95D6D72CF4DB9C), + UINT64_C(0x690F0288728673D0), UINT64_C(0x64FED2D4E0FF9A84), + UINT64_C(0x73EDA3315675A179), UINT64_C(0x7E1C736DC40C482D), + UINT64_C(0xD8D54F5410CF0E11), UINT64_C(0xD5249F0882B6E745), + UINT64_C(0xC237EEED343CDCB8), UINT64_C(0xCFC63EB1A64535EC), + UINT64_C(0x8EA4979F9CBB51C0), UINT64_C(0x835547C30EC2B894), + UINT64_C(0x94463626B8488369), UINT64_C(0x99B7E67A2A316A3D), + UINT64_C(0x3F7EDA43FEF22C01), UINT64_C(0x328F0A1F6C8BC555), + UINT64_C(0x259C7BFADA01FEA8), UINT64_C(0x286DABA6487817FC), + UINT64_C(0xA75829A7AEFD37F0), UINT64_C(0xAAA9F9FB3C84DEA4), + UINT64_C(0xBDBA881E8A0EE559), UINT64_C(0xB04B584218770C0D), + UINT64_C(0x1682647BCCB44A31), UINT64_C(0x1B73B4275ECDA365), + UINT64_C(0x0C60C5C2E8479898), UINT64_C(0x0191159E7A3E71CC), + UINT64_C(0x40F3BCB040C015E0), UINT64_C(0x4D026CECD2B9FCB4), + UINT64_C(0x5A111D096433C749), UINT64_C(0x57E0CD55F64A2E1D), + UINT64_C(0xF129F16C22896821), UINT64_C(0xFCD82130B0F08175), + UINT64_C(0xEBCB50D5067ABA88), UINT64_C(0xE63A8089940353DC), + UINT64_C(0xCDFFF96ABA9EEA11), UINT64_C(0xC00E293628E70345), + UINT64_C(0xD71D58D39E6D38B8), UINT64_C(0xDAEC888F0C14D1EC), + UINT64_C(0x7C25B4B6D8D797D0), UINT64_C(0x71D464EA4AAE7E84), + UINT64_C(0x66C7150FFC244579), UINT64_C(0x6B36C5536E5DAC2D), + UINT64_C(0x2A546C7D54A3C801), UINT64_C(0x27A5BC21C6DA2155), + UINT64_C(0x30B6CDC470501AA8), UINT64_C(0x3D471D98E229F3FC), + UINT64_C(0x9B8E21A136EAB5C0), UINT64_C(0x967FF1FDA4935C94), + UINT64_C(0x816C801812196769), UINT64_C(0x8C9D504480608E3D), + UINT64_C(0x03A8D24566E5AE31), UINT64_C(0x0E590219F49C4765), + UINT64_C(0x194A73FC42167C98), UINT64_C(0x14BBA3A0D06F95CC), + UINT64_C(0xB2729F9904ACD3F0), UINT64_C(0xBF834FC596D53AA4), + UINT64_C(0xA8903E20205F0159), UINT64_C(0xA561EE7CB226E80D), + UINT64_C(0xE403475288D88C21), UINT64_C(0xE9F2970E1AA16575), + UINT64_C(0xFEE1E6EBAC2B5E88), UINT64_C(0xF31036B73E52B7DC), + UINT64_C(0x55D90A8EEA91F1E0), UINT64_C(0x5828DAD278E818B4), + UINT64_C(0x4F3BAB37CE622349), UINT64_C(0x42CA7B6B5C1BCA1D), + UINT64_C(0x5150AF3402696251), UINT64_C(0x5CA17F6890108B05), + UINT64_C(0x4BB20E8D269AB0F8), UINT64_C(0x4643DED1B4E359AC), + UINT64_C(0xE08AE2E860201F90), UINT64_C(0xED7B32B4F259F6C4), + UINT64_C(0xFA68435144D3CD39), UINT64_C(0xF799930DD6AA246D), + UINT64_C(0xB6FB3A23EC544041), UINT64_C(0xBB0AEA7F7E2DA915), + UINT64_C(0xAC199B9AC8A792E8), UINT64_C(0xA1E84BC65ADE7BBC), + UINT64_C(0x072177FF8E1D3D80), UINT64_C(0x0AD0A7A31C64D4D4), + UINT64_C(0x1DC3D646AAEEEF29), UINT64_C(0x1032061A3897067D), + UINT64_C(0x9F07841BDE122671), UINT64_C(0x92F654474C6BCF25), + UINT64_C(0x85E525A2FAE1F4D8), UINT64_C(0x8814F5FE68981D8C), + UINT64_C(0x2EDDC9C7BC5B5BB0), UINT64_C(0x232C199B2E22B2E4), + UINT64_C(0x343F687E98A88919), UINT64_C(0x39CEB8220AD1604D), + UINT64_C(0x78AC110C302F0461), UINT64_C(0x755DC150A256ED35), + UINT64_C(0x624EB0B514DCD6C8), UINT64_C(0x6FBF60E986A53F9C), + UINT64_C(0xC9765CD0526679A0), UINT64_C(0xC4878C8CC01F90F4), + UINT64_C(0xD394FD697695AB09), UINT64_C(0xDE652D35E4EC425D) + }, { + UINT64_C(0x0000000000000000), UINT64_C(0xCB6D6A914AE10B3F), + UINT64_C(0x96DBD42295C2177E), UINT64_C(0x5DB6BEB3DF231C41), + UINT64_C(0x2CB7A9452A852FFC), UINT64_C(0xE7DAC3D4606424C3), + UINT64_C(0xBA6C7D67BF473882), UINT64_C(0x710117F6F5A633BD), + UINT64_C(0xDD705D247FA5876A), UINT64_C(0x161D37B535448C55), + UINT64_C(0x4BAB8906EA679014), UINT64_C(0x80C6E397A0869B2B), + UINT64_C(0xF1C7F4615520A896), UINT64_C(0x3AAA9EF01FC1A3A9), + UINT64_C(0x671C2043C0E2BFE8), UINT64_C(0xAC714AD28A03B4D7), + UINT64_C(0xBAE1BA48FE4A0FD5), UINT64_C(0x718CD0D9B4AB04EA), + UINT64_C(0x2C3A6E6A6B8818AB), UINT64_C(0xE75704FB21691394), + UINT64_C(0x9656130DD4CF2029), UINT64_C(0x5D3B799C9E2E2B16), + UINT64_C(0x008DC72F410D3757), UINT64_C(0xCBE0ADBE0BEC3C68), + UINT64_C(0x6791E76C81EF88BF), UINT64_C(0xACFC8DFDCB0E8380), + UINT64_C(0xF14A334E142D9FC1), UINT64_C(0x3A2759DF5ECC94FE), + UINT64_C(0x4B264E29AB6AA743), UINT64_C(0x804B24B8E18BAC7C), + UINT64_C(0xDDFD9A0B3EA8B03D), UINT64_C(0x1690F09A7449BB02), + UINT64_C(0xF1DD7B3ED73AC638), UINT64_C(0x3AB011AF9DDBCD07), + UINT64_C(0x6706AF1C42F8D146), UINT64_C(0xAC6BC58D0819DA79), + UINT64_C(0xDD6AD27BFDBFE9C4), UINT64_C(0x1607B8EAB75EE2FB), + UINT64_C(0x4BB10659687DFEBA), UINT64_C(0x80DC6CC8229CF585), + UINT64_C(0x2CAD261AA89F4152), UINT64_C(0xE7C04C8BE27E4A6D), + UINT64_C(0xBA76F2383D5D562C), UINT64_C(0x711B98A977BC5D13), + UINT64_C(0x001A8F5F821A6EAE), UINT64_C(0xCB77E5CEC8FB6591), + UINT64_C(0x96C15B7D17D879D0), UINT64_C(0x5DAC31EC5D3972EF), + UINT64_C(0x4B3CC1762970C9ED), UINT64_C(0x8051ABE76391C2D2), + UINT64_C(0xDDE71554BCB2DE93), UINT64_C(0x168A7FC5F653D5AC), + UINT64_C(0x678B683303F5E611), UINT64_C(0xACE602A24914ED2E), + UINT64_C(0xF150BC119637F16F), UINT64_C(0x3A3DD680DCD6FA50), + UINT64_C(0x964C9C5256D54E87), UINT64_C(0x5D21F6C31C3445B8), + UINT64_C(0x00974870C31759F9), UINT64_C(0xCBFA22E189F652C6), + UINT64_C(0xBAFB35177C50617B), UINT64_C(0x71965F8636B16A44), + UINT64_C(0x2C20E135E9927605), UINT64_C(0xE74D8BA4A3737D3A), + UINT64_C(0xE2BBF77CAE758C71), UINT64_C(0x29D69DEDE494874E), + UINT64_C(0x7460235E3BB79B0F), UINT64_C(0xBF0D49CF71569030), + UINT64_C(0xCE0C5E3984F0A38D), UINT64_C(0x056134A8CE11A8B2), + UINT64_C(0x58D78A1B1132B4F3), UINT64_C(0x93BAE08A5BD3BFCC), + UINT64_C(0x3FCBAA58D1D00B1B), UINT64_C(0xF4A6C0C99B310024), + UINT64_C(0xA9107E7A44121C65), UINT64_C(0x627D14EB0EF3175A), + UINT64_C(0x137C031DFB5524E7), UINT64_C(0xD811698CB1B42FD8), + UINT64_C(0x85A7D73F6E973399), UINT64_C(0x4ECABDAE247638A6), + UINT64_C(0x585A4D34503F83A4), UINT64_C(0x933727A51ADE889B), + UINT64_C(0xCE819916C5FD94DA), UINT64_C(0x05ECF3878F1C9FE5), + UINT64_C(0x74EDE4717ABAAC58), UINT64_C(0xBF808EE0305BA767), + UINT64_C(0xE2363053EF78BB26), UINT64_C(0x295B5AC2A599B019), + UINT64_C(0x852A10102F9A04CE), UINT64_C(0x4E477A81657B0FF1), + UINT64_C(0x13F1C432BA5813B0), UINT64_C(0xD89CAEA3F0B9188F), + UINT64_C(0xA99DB955051F2B32), UINT64_C(0x62F0D3C44FFE200D), + UINT64_C(0x3F466D7790DD3C4C), UINT64_C(0xF42B07E6DA3C3773), + UINT64_C(0x13668C42794F4A49), UINT64_C(0xD80BE6D333AE4176), + UINT64_C(0x85BD5860EC8D5D37), UINT64_C(0x4ED032F1A66C5608), + UINT64_C(0x3FD1250753CA65B5), UINT64_C(0xF4BC4F96192B6E8A), + UINT64_C(0xA90AF125C60872CB), UINT64_C(0x62679BB48CE979F4), + UINT64_C(0xCE16D16606EACD23), UINT64_C(0x057BBBF74C0BC61C), + UINT64_C(0x58CD05449328DA5D), UINT64_C(0x93A06FD5D9C9D162), + UINT64_C(0xE2A178232C6FE2DF), UINT64_C(0x29CC12B2668EE9E0), + UINT64_C(0x747AAC01B9ADF5A1), UINT64_C(0xBF17C690F34CFE9E), + UINT64_C(0xA987360A8705459C), UINT64_C(0x62EA5C9BCDE44EA3), + UINT64_C(0x3F5CE22812C752E2), UINT64_C(0xF43188B9582659DD), + UINT64_C(0x85309F4FAD806A60), UINT64_C(0x4E5DF5DEE761615F), + UINT64_C(0x13EB4B6D38427D1E), UINT64_C(0xD88621FC72A37621), + UINT64_C(0x74F76B2EF8A0C2F6), UINT64_C(0xBF9A01BFB241C9C9), + UINT64_C(0xE22CBF0C6D62D588), UINT64_C(0x2941D59D2783DEB7), + UINT64_C(0x5840C26BD225ED0A), UINT64_C(0x932DA8FA98C4E635), + UINT64_C(0xCE9B164947E7FA74), UINT64_C(0x05F67CD80D06F14B), + UINT64_C(0xC477EFF95CEB18E3), UINT64_C(0x0F1A8568160A13DC), + UINT64_C(0x52AC3BDBC9290F9D), UINT64_C(0x99C1514A83C804A2), + UINT64_C(0xE8C046BC766E371F), UINT64_C(0x23AD2C2D3C8F3C20), + UINT64_C(0x7E1B929EE3AC2061), UINT64_C(0xB576F80FA94D2B5E), + UINT64_C(0x1907B2DD234E9F89), UINT64_C(0xD26AD84C69AF94B6), + UINT64_C(0x8FDC66FFB68C88F7), UINT64_C(0x44B10C6EFC6D83C8), + UINT64_C(0x35B01B9809CBB075), UINT64_C(0xFEDD7109432ABB4A), + UINT64_C(0xA36BCFBA9C09A70B), UINT64_C(0x6806A52BD6E8AC34), + UINT64_C(0x7E9655B1A2A11736), UINT64_C(0xB5FB3F20E8401C09), + UINT64_C(0xE84D819337630048), UINT64_C(0x2320EB027D820B77), + UINT64_C(0x5221FCF4882438CA), UINT64_C(0x994C9665C2C533F5), + UINT64_C(0xC4FA28D61DE62FB4), UINT64_C(0x0F9742475707248B), + UINT64_C(0xA3E60895DD04905C), UINT64_C(0x688B620497E59B63), + UINT64_C(0x353DDCB748C68722), UINT64_C(0xFE50B62602278C1D), + UINT64_C(0x8F51A1D0F781BFA0), UINT64_C(0x443CCB41BD60B49F), + UINT64_C(0x198A75F26243A8DE), UINT64_C(0xD2E71F6328A2A3E1), + UINT64_C(0x35AA94C78BD1DEDB), UINT64_C(0xFEC7FE56C130D5E4), + UINT64_C(0xA37140E51E13C9A5), UINT64_C(0x681C2A7454F2C29A), + UINT64_C(0x191D3D82A154F127), UINT64_C(0xD2705713EBB5FA18), + UINT64_C(0x8FC6E9A03496E659), UINT64_C(0x44AB83317E77ED66), + UINT64_C(0xE8DAC9E3F47459B1), UINT64_C(0x23B7A372BE95528E), + UINT64_C(0x7E011DC161B64ECF), UINT64_C(0xB56C77502B5745F0), + UINT64_C(0xC46D60A6DEF1764D), UINT64_C(0x0F000A3794107D72), + UINT64_C(0x52B6B4844B336133), UINT64_C(0x99DBDE1501D26A0C), + UINT64_C(0x8F4B2E8F759BD10E), UINT64_C(0x4426441E3F7ADA31), + UINT64_C(0x1990FAADE059C670), UINT64_C(0xD2FD903CAAB8CD4F), + UINT64_C(0xA3FC87CA5F1EFEF2), UINT64_C(0x6891ED5B15FFF5CD), + UINT64_C(0x352753E8CADCE98C), UINT64_C(0xFE4A3979803DE2B3), + UINT64_C(0x523B73AB0A3E5664), UINT64_C(0x9956193A40DF5D5B), + UINT64_C(0xC4E0A7899FFC411A), UINT64_C(0x0F8DCD18D51D4A25), + UINT64_C(0x7E8CDAEE20BB7998), UINT64_C(0xB5E1B07F6A5A72A7), + UINT64_C(0xE8570ECCB5796EE6), UINT64_C(0x233A645DFF9865D9), + UINT64_C(0x26CC1885F29E9492), UINT64_C(0xEDA17214B87F9FAD), + UINT64_C(0xB017CCA7675C83EC), UINT64_C(0x7B7AA6362DBD88D3), + UINT64_C(0x0A7BB1C0D81BBB6E), UINT64_C(0xC116DB5192FAB051), + UINT64_C(0x9CA065E24DD9AC10), UINT64_C(0x57CD0F730738A72F), + UINT64_C(0xFBBC45A18D3B13F8), UINT64_C(0x30D12F30C7DA18C7), + UINT64_C(0x6D67918318F90486), UINT64_C(0xA60AFB1252180FB9), + UINT64_C(0xD70BECE4A7BE3C04), UINT64_C(0x1C668675ED5F373B), + UINT64_C(0x41D038C6327C2B7A), UINT64_C(0x8ABD5257789D2045), + UINT64_C(0x9C2DA2CD0CD49B47), UINT64_C(0x5740C85C46359078), + UINT64_C(0x0AF676EF99168C39), UINT64_C(0xC19B1C7ED3F78706), + UINT64_C(0xB09A0B882651B4BB), UINT64_C(0x7BF761196CB0BF84), + UINT64_C(0x2641DFAAB393A3C5), UINT64_C(0xED2CB53BF972A8FA), + UINT64_C(0x415DFFE973711C2D), UINT64_C(0x8A30957839901712), + UINT64_C(0xD7862BCBE6B30B53), UINT64_C(0x1CEB415AAC52006C), + UINT64_C(0x6DEA56AC59F433D1), UINT64_C(0xA6873C3D131538EE), + UINT64_C(0xFB31828ECC3624AF), UINT64_C(0x305CE81F86D72F90), + UINT64_C(0xD71163BB25A452AA), UINT64_C(0x1C7C092A6F455995), + UINT64_C(0x41CAB799B06645D4), UINT64_C(0x8AA7DD08FA874EEB), + UINT64_C(0xFBA6CAFE0F217D56), UINT64_C(0x30CBA06F45C07669), + UINT64_C(0x6D7D1EDC9AE36A28), UINT64_C(0xA610744DD0026117), + UINT64_C(0x0A613E9F5A01D5C0), UINT64_C(0xC10C540E10E0DEFF), + UINT64_C(0x9CBAEABDCFC3C2BE), UINT64_C(0x57D7802C8522C981), + UINT64_C(0x26D697DA7084FA3C), UINT64_C(0xEDBBFD4B3A65F103), + UINT64_C(0xB00D43F8E546ED42), UINT64_C(0x7B602969AFA7E67D), + UINT64_C(0x6DF0D9F3DBEE5D7F), UINT64_C(0xA69DB362910F5640), + UINT64_C(0xFB2B0DD14E2C4A01), UINT64_C(0x3046674004CD413E), + UINT64_C(0x414770B6F16B7283), UINT64_C(0x8A2A1A27BB8A79BC), + UINT64_C(0xD79CA49464A965FD), UINT64_C(0x1CF1CE052E486EC2), + UINT64_C(0xB08084D7A44BDA15), UINT64_C(0x7BEDEE46EEAAD12A), + UINT64_C(0x265B50F53189CD6B), UINT64_C(0xED363A647B68C654), + UINT64_C(0x9C372D928ECEF5E9), UINT64_C(0x575A4703C42FFED6), + UINT64_C(0x0AECF9B01B0CE297), UINT64_C(0xC181932151EDE9A8) + }, { + UINT64_C(0x0000000000000000), UINT64_C(0xDCA12C225E8AEE1D), + UINT64_C(0xB8435944BC14DD3B), UINT64_C(0x64E27566E29E3326), + UINT64_C(0x7087B2887829BA77), UINT64_C(0xAC269EAA26A3546A), + UINT64_C(0xC8C4EBCCC43D674C), UINT64_C(0x1465C7EE9AB78951), + UINT64_C(0xE00E6511F15274EF), UINT64_C(0x3CAF4933AFD89AF2), + UINT64_C(0x584D3C554D46A9D4), UINT64_C(0x84EC107713CC47C9), + UINT64_C(0x9089D799897BCE98), UINT64_C(0x4C28FBBBD7F12085), + UINT64_C(0x28CA8EDD356F13A3), UINT64_C(0xF46BA2FF6BE5FDBE), + UINT64_C(0x4503C48DC90A304C), UINT64_C(0x99A2E8AF9780DE51), + UINT64_C(0xFD409DC9751EED77), UINT64_C(0x21E1B1EB2B94036A), + UINT64_C(0x35847605B1238A3B), UINT64_C(0xE9255A27EFA96426), + UINT64_C(0x8DC72F410D375700), UINT64_C(0x5166036353BDB91D), + UINT64_C(0xA50DA19C385844A3), UINT64_C(0x79AC8DBE66D2AABE), + UINT64_C(0x1D4EF8D8844C9998), UINT64_C(0xC1EFD4FADAC67785), + UINT64_C(0xD58A13144071FED4), UINT64_C(0x092B3F361EFB10C9), + UINT64_C(0x6DC94A50FC6523EF), UINT64_C(0xB1686672A2EFCDF2), + UINT64_C(0x8A06881B93156098), UINT64_C(0x56A7A439CD9F8E85), + UINT64_C(0x3245D15F2F01BDA3), UINT64_C(0xEEE4FD7D718B53BE), + UINT64_C(0xFA813A93EB3CDAEF), UINT64_C(0x262016B1B5B634F2), + UINT64_C(0x42C263D7572807D4), UINT64_C(0x9E634FF509A2E9C9), + UINT64_C(0x6A08ED0A62471477), UINT64_C(0xB6A9C1283CCDFA6A), + UINT64_C(0xD24BB44EDE53C94C), UINT64_C(0x0EEA986C80D92751), + UINT64_C(0x1A8F5F821A6EAE00), UINT64_C(0xC62E73A044E4401D), + UINT64_C(0xA2CC06C6A67A733B), UINT64_C(0x7E6D2AE4F8F09D26), + UINT64_C(0xCF054C965A1F50D4), UINT64_C(0x13A460B40495BEC9), + UINT64_C(0x774615D2E60B8DEF), UINT64_C(0xABE739F0B88163F2), + UINT64_C(0xBF82FE1E2236EAA3), UINT64_C(0x6323D23C7CBC04BE), + UINT64_C(0x07C1A75A9E223798), UINT64_C(0xDB608B78C0A8D985), + UINT64_C(0x2F0B2987AB4D243B), UINT64_C(0xF3AA05A5F5C7CA26), + UINT64_C(0x974870C31759F900), UINT64_C(0x4BE95CE149D3171D), + UINT64_C(0x5F8C9B0FD3649E4C), UINT64_C(0x832DB72D8DEE7051), + UINT64_C(0xE7CFC24B6F704377), UINT64_C(0x3B6EEE6931FAAD6A), + UINT64_C(0x91131E980D8418A2), UINT64_C(0x4DB232BA530EF6BF), + UINT64_C(0x295047DCB190C599), UINT64_C(0xF5F16BFEEF1A2B84), + UINT64_C(0xE194AC1075ADA2D5), UINT64_C(0x3D3580322B274CC8), + UINT64_C(0x59D7F554C9B97FEE), UINT64_C(0x8576D976973391F3), + UINT64_C(0x711D7B89FCD66C4D), UINT64_C(0xADBC57ABA25C8250), + UINT64_C(0xC95E22CD40C2B176), UINT64_C(0x15FF0EEF1E485F6B), + UINT64_C(0x019AC90184FFD63A), UINT64_C(0xDD3BE523DA753827), + UINT64_C(0xB9D9904538EB0B01), UINT64_C(0x6578BC676661E51C), + UINT64_C(0xD410DA15C48E28EE), UINT64_C(0x08B1F6379A04C6F3), + UINT64_C(0x6C538351789AF5D5), UINT64_C(0xB0F2AF7326101BC8), + UINT64_C(0xA497689DBCA79299), UINT64_C(0x783644BFE22D7C84), + UINT64_C(0x1CD431D900B34FA2), UINT64_C(0xC0751DFB5E39A1BF), + UINT64_C(0x341EBF0435DC5C01), UINT64_C(0xE8BF93266B56B21C), + UINT64_C(0x8C5DE64089C8813A), UINT64_C(0x50FCCA62D7426F27), + UINT64_C(0x44990D8C4DF5E676), UINT64_C(0x983821AE137F086B), + UINT64_C(0xFCDA54C8F1E13B4D), UINT64_C(0x207B78EAAF6BD550), + UINT64_C(0x1B1596839E91783A), UINT64_C(0xC7B4BAA1C01B9627), + UINT64_C(0xA356CFC72285A501), UINT64_C(0x7FF7E3E57C0F4B1C), + UINT64_C(0x6B92240BE6B8C24D), UINT64_C(0xB7330829B8322C50), + UINT64_C(0xD3D17D4F5AAC1F76), UINT64_C(0x0F70516D0426F16B), + UINT64_C(0xFB1BF3926FC30CD5), UINT64_C(0x27BADFB03149E2C8), + UINT64_C(0x4358AAD6D3D7D1EE), UINT64_C(0x9FF986F48D5D3FF3), + UINT64_C(0x8B9C411A17EAB6A2), UINT64_C(0x573D6D38496058BF), + UINT64_C(0x33DF185EABFE6B99), UINT64_C(0xEF7E347CF5748584), + UINT64_C(0x5E16520E579B4876), UINT64_C(0x82B77E2C0911A66B), + UINT64_C(0xE6550B4AEB8F954D), UINT64_C(0x3AF42768B5057B50), + UINT64_C(0x2E91E0862FB2F201), UINT64_C(0xF230CCA471381C1C), + UINT64_C(0x96D2B9C293A62F3A), UINT64_C(0x4A7395E0CD2CC127), + UINT64_C(0xBE18371FA6C93C99), UINT64_C(0x62B91B3DF843D284), + UINT64_C(0x065B6E5B1ADDE1A2), UINT64_C(0xDAFA427944570FBF), + UINT64_C(0xCE9F8597DEE086EE), UINT64_C(0x123EA9B5806A68F3), + UINT64_C(0x76DCDCD362F45BD5), UINT64_C(0xAA7DF0F13C7EB5C8), + UINT64_C(0xA739329F30A7E9D6), UINT64_C(0x7B981EBD6E2D07CB), + UINT64_C(0x1F7A6BDB8CB334ED), UINT64_C(0xC3DB47F9D239DAF0), + UINT64_C(0xD7BE8017488E53A1), UINT64_C(0x0B1FAC351604BDBC), + UINT64_C(0x6FFDD953F49A8E9A), UINT64_C(0xB35CF571AA106087), + UINT64_C(0x4737578EC1F59D39), UINT64_C(0x9B967BAC9F7F7324), + UINT64_C(0xFF740ECA7DE14002), UINT64_C(0x23D522E8236BAE1F), + UINT64_C(0x37B0E506B9DC274E), UINT64_C(0xEB11C924E756C953), + UINT64_C(0x8FF3BC4205C8FA75), UINT64_C(0x535290605B421468), + UINT64_C(0xE23AF612F9ADD99A), UINT64_C(0x3E9BDA30A7273787), + UINT64_C(0x5A79AF5645B904A1), UINT64_C(0x86D883741B33EABC), + UINT64_C(0x92BD449A818463ED), UINT64_C(0x4E1C68B8DF0E8DF0), + UINT64_C(0x2AFE1DDE3D90BED6), UINT64_C(0xF65F31FC631A50CB), + UINT64_C(0x0234930308FFAD75), UINT64_C(0xDE95BF2156754368), + UINT64_C(0xBA77CA47B4EB704E), UINT64_C(0x66D6E665EA619E53), + UINT64_C(0x72B3218B70D61702), UINT64_C(0xAE120DA92E5CF91F), + UINT64_C(0xCAF078CFCCC2CA39), UINT64_C(0x165154ED92482424), + UINT64_C(0x2D3FBA84A3B2894E), UINT64_C(0xF19E96A6FD386753), + UINT64_C(0x957CE3C01FA65475), UINT64_C(0x49DDCFE2412CBA68), + UINT64_C(0x5DB8080CDB9B3339), UINT64_C(0x8119242E8511DD24), + UINT64_C(0xE5FB5148678FEE02), UINT64_C(0x395A7D6A3905001F), + UINT64_C(0xCD31DF9552E0FDA1), UINT64_C(0x1190F3B70C6A13BC), + UINT64_C(0x757286D1EEF4209A), UINT64_C(0xA9D3AAF3B07ECE87), + UINT64_C(0xBDB66D1D2AC947D6), UINT64_C(0x6117413F7443A9CB), + UINT64_C(0x05F5345996DD9AED), UINT64_C(0xD954187BC85774F0), + UINT64_C(0x683C7E096AB8B902), UINT64_C(0xB49D522B3432571F), + UINT64_C(0xD07F274DD6AC6439), UINT64_C(0x0CDE0B6F88268A24), + UINT64_C(0x18BBCC8112910375), UINT64_C(0xC41AE0A34C1BED68), + UINT64_C(0xA0F895C5AE85DE4E), UINT64_C(0x7C59B9E7F00F3053), + UINT64_C(0x88321B189BEACDED), UINT64_C(0x5493373AC56023F0), + UINT64_C(0x3071425C27FE10D6), UINT64_C(0xECD06E7E7974FECB), + UINT64_C(0xF8B5A990E3C3779A), UINT64_C(0x241485B2BD499987), + UINT64_C(0x40F6F0D45FD7AAA1), UINT64_C(0x9C57DCF6015D44BC), + UINT64_C(0x362A2C073D23F174), UINT64_C(0xEA8B002563A91F69), + UINT64_C(0x8E69754381372C4F), UINT64_C(0x52C85961DFBDC252), + UINT64_C(0x46AD9E8F450A4B03), UINT64_C(0x9A0CB2AD1B80A51E), + UINT64_C(0xFEEEC7CBF91E9638), UINT64_C(0x224FEBE9A7947825), + UINT64_C(0xD6244916CC71859B), UINT64_C(0x0A85653492FB6B86), + UINT64_C(0x6E671052706558A0), UINT64_C(0xB2C63C702EEFB6BD), + UINT64_C(0xA6A3FB9EB4583FEC), UINT64_C(0x7A02D7BCEAD2D1F1), + UINT64_C(0x1EE0A2DA084CE2D7), UINT64_C(0xC2418EF856C60CCA), + UINT64_C(0x7329E88AF429C138), UINT64_C(0xAF88C4A8AAA32F25), + UINT64_C(0xCB6AB1CE483D1C03), UINT64_C(0x17CB9DEC16B7F21E), + UINT64_C(0x03AE5A028C007B4F), UINT64_C(0xDF0F7620D28A9552), + UINT64_C(0xBBED03463014A674), UINT64_C(0x674C2F646E9E4869), + UINT64_C(0x93278D9B057BB5D7), UINT64_C(0x4F86A1B95BF15BCA), + UINT64_C(0x2B64D4DFB96F68EC), UINT64_C(0xF7C5F8FDE7E586F1), + UINT64_C(0xE3A03F137D520FA0), UINT64_C(0x3F01133123D8E1BD), + UINT64_C(0x5BE36657C146D29B), UINT64_C(0x87424A759FCC3C86), + UINT64_C(0xBC2CA41CAE3691EC), UINT64_C(0x608D883EF0BC7FF1), + UINT64_C(0x046FFD5812224CD7), UINT64_C(0xD8CED17A4CA8A2CA), + UINT64_C(0xCCAB1694D61F2B9B), UINT64_C(0x100A3AB68895C586), + UINT64_C(0x74E84FD06A0BF6A0), UINT64_C(0xA84963F2348118BD), + UINT64_C(0x5C22C10D5F64E503), UINT64_C(0x8083ED2F01EE0B1E), + UINT64_C(0xE4619849E3703838), UINT64_C(0x38C0B46BBDFAD625), + UINT64_C(0x2CA57385274D5F74), UINT64_C(0xF0045FA779C7B169), + UINT64_C(0x94E62AC19B59824F), UINT64_C(0x484706E3C5D36C52), + UINT64_C(0xF92F6091673CA1A0), UINT64_C(0x258E4CB339B64FBD), + UINT64_C(0x416C39D5DB287C9B), UINT64_C(0x9DCD15F785A29286), + UINT64_C(0x89A8D2191F151BD7), UINT64_C(0x5509FE3B419FF5CA), + UINT64_C(0x31EB8B5DA301C6EC), UINT64_C(0xED4AA77FFD8B28F1), + UINT64_C(0x19210580966ED54F), UINT64_C(0xC58029A2C8E43B52), + UINT64_C(0xA1625CC42A7A0874), UINT64_C(0x7DC370E674F0E669), + UINT64_C(0x69A6B708EE476F38), UINT64_C(0xB5079B2AB0CD8125), + UINT64_C(0xD1E5EE4C5253B203), UINT64_C(0x0D44C26E0CD95C1E) + } +}; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_table_le.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_table_le.h new file mode 100644 index 00000000000..1196b31e132 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_table_le.h @@ -0,0 +1,521 @@ +/* This file has been automatically generated by crc64_tablegen.c. */ + +const uint64_t lzma_crc64_table[4][256] = { + { + UINT64_C(0x0000000000000000), UINT64_C(0xB32E4CBE03A75F6F), + UINT64_C(0xF4843657A840A05B), UINT64_C(0x47AA7AE9ABE7FF34), + UINT64_C(0x7BD0C384FF8F5E33), UINT64_C(0xC8FE8F3AFC28015C), + UINT64_C(0x8F54F5D357CFFE68), UINT64_C(0x3C7AB96D5468A107), + UINT64_C(0xF7A18709FF1EBC66), UINT64_C(0x448FCBB7FCB9E309), + UINT64_C(0x0325B15E575E1C3D), UINT64_C(0xB00BFDE054F94352), + UINT64_C(0x8C71448D0091E255), UINT64_C(0x3F5F08330336BD3A), + UINT64_C(0x78F572DAA8D1420E), UINT64_C(0xCBDB3E64AB761D61), + UINT64_C(0x7D9BA13851336649), UINT64_C(0xCEB5ED8652943926), + UINT64_C(0x891F976FF973C612), UINT64_C(0x3A31DBD1FAD4997D), + UINT64_C(0x064B62BCAEBC387A), UINT64_C(0xB5652E02AD1B6715), + UINT64_C(0xF2CF54EB06FC9821), UINT64_C(0x41E11855055BC74E), + UINT64_C(0x8A3A2631AE2DDA2F), UINT64_C(0x39146A8FAD8A8540), + UINT64_C(0x7EBE1066066D7A74), UINT64_C(0xCD905CD805CA251B), + UINT64_C(0xF1EAE5B551A2841C), UINT64_C(0x42C4A90B5205DB73), + UINT64_C(0x056ED3E2F9E22447), UINT64_C(0xB6409F5CFA457B28), + UINT64_C(0xFB374270A266CC92), UINT64_C(0x48190ECEA1C193FD), + UINT64_C(0x0FB374270A266CC9), UINT64_C(0xBC9D3899098133A6), + UINT64_C(0x80E781F45DE992A1), UINT64_C(0x33C9CD4A5E4ECDCE), + UINT64_C(0x7463B7A3F5A932FA), UINT64_C(0xC74DFB1DF60E6D95), + UINT64_C(0x0C96C5795D7870F4), UINT64_C(0xBFB889C75EDF2F9B), + UINT64_C(0xF812F32EF538D0AF), UINT64_C(0x4B3CBF90F69F8FC0), + UINT64_C(0x774606FDA2F72EC7), UINT64_C(0xC4684A43A15071A8), + UINT64_C(0x83C230AA0AB78E9C), UINT64_C(0x30EC7C140910D1F3), + UINT64_C(0x86ACE348F355AADB), UINT64_C(0x3582AFF6F0F2F5B4), + UINT64_C(0x7228D51F5B150A80), UINT64_C(0xC10699A158B255EF), + UINT64_C(0xFD7C20CC0CDAF4E8), UINT64_C(0x4E526C720F7DAB87), + UINT64_C(0x09F8169BA49A54B3), UINT64_C(0xBAD65A25A73D0BDC), + UINT64_C(0x710D64410C4B16BD), UINT64_C(0xC22328FF0FEC49D2), + UINT64_C(0x85895216A40BB6E6), UINT64_C(0x36A71EA8A7ACE989), + UINT64_C(0x0ADDA7C5F3C4488E), UINT64_C(0xB9F3EB7BF06317E1), + UINT64_C(0xFE5991925B84E8D5), UINT64_C(0x4D77DD2C5823B7BA), + UINT64_C(0x64B62BCAEBC387A1), UINT64_C(0xD7986774E864D8CE), + UINT64_C(0x90321D9D438327FA), UINT64_C(0x231C512340247895), + UINT64_C(0x1F66E84E144CD992), UINT64_C(0xAC48A4F017EB86FD), + UINT64_C(0xEBE2DE19BC0C79C9), UINT64_C(0x58CC92A7BFAB26A6), + UINT64_C(0x9317ACC314DD3BC7), UINT64_C(0x2039E07D177A64A8), + UINT64_C(0x67939A94BC9D9B9C), UINT64_C(0xD4BDD62ABF3AC4F3), + UINT64_C(0xE8C76F47EB5265F4), UINT64_C(0x5BE923F9E8F53A9B), + UINT64_C(0x1C4359104312C5AF), UINT64_C(0xAF6D15AE40B59AC0), + UINT64_C(0x192D8AF2BAF0E1E8), UINT64_C(0xAA03C64CB957BE87), + UINT64_C(0xEDA9BCA512B041B3), UINT64_C(0x5E87F01B11171EDC), + UINT64_C(0x62FD4976457FBFDB), UINT64_C(0xD1D305C846D8E0B4), + UINT64_C(0x96797F21ED3F1F80), UINT64_C(0x2557339FEE9840EF), + UINT64_C(0xEE8C0DFB45EE5D8E), UINT64_C(0x5DA24145464902E1), + UINT64_C(0x1A083BACEDAEFDD5), UINT64_C(0xA9267712EE09A2BA), + UINT64_C(0x955CCE7FBA6103BD), UINT64_C(0x267282C1B9C65CD2), + UINT64_C(0x61D8F8281221A3E6), UINT64_C(0xD2F6B4961186FC89), + UINT64_C(0x9F8169BA49A54B33), UINT64_C(0x2CAF25044A02145C), + UINT64_C(0x6B055FEDE1E5EB68), UINT64_C(0xD82B1353E242B407), + UINT64_C(0xE451AA3EB62A1500), UINT64_C(0x577FE680B58D4A6F), + UINT64_C(0x10D59C691E6AB55B), UINT64_C(0xA3FBD0D71DCDEA34), + UINT64_C(0x6820EEB3B6BBF755), UINT64_C(0xDB0EA20DB51CA83A), + UINT64_C(0x9CA4D8E41EFB570E), UINT64_C(0x2F8A945A1D5C0861), + UINT64_C(0x13F02D374934A966), UINT64_C(0xA0DE61894A93F609), + UINT64_C(0xE7741B60E174093D), UINT64_C(0x545A57DEE2D35652), + UINT64_C(0xE21AC88218962D7A), UINT64_C(0x5134843C1B317215), + UINT64_C(0x169EFED5B0D68D21), UINT64_C(0xA5B0B26BB371D24E), + UINT64_C(0x99CA0B06E7197349), UINT64_C(0x2AE447B8E4BE2C26), + UINT64_C(0x6D4E3D514F59D312), UINT64_C(0xDE6071EF4CFE8C7D), + UINT64_C(0x15BB4F8BE788911C), UINT64_C(0xA6950335E42FCE73), + UINT64_C(0xE13F79DC4FC83147), UINT64_C(0x521135624C6F6E28), + UINT64_C(0x6E6B8C0F1807CF2F), UINT64_C(0xDD45C0B11BA09040), + UINT64_C(0x9AEFBA58B0476F74), UINT64_C(0x29C1F6E6B3E0301B), + UINT64_C(0xC96C5795D7870F42), UINT64_C(0x7A421B2BD420502D), + UINT64_C(0x3DE861C27FC7AF19), UINT64_C(0x8EC62D7C7C60F076), + UINT64_C(0xB2BC941128085171), UINT64_C(0x0192D8AF2BAF0E1E), + UINT64_C(0x4638A2468048F12A), UINT64_C(0xF516EEF883EFAE45), + UINT64_C(0x3ECDD09C2899B324), UINT64_C(0x8DE39C222B3EEC4B), + UINT64_C(0xCA49E6CB80D9137F), UINT64_C(0x7967AA75837E4C10), + UINT64_C(0x451D1318D716ED17), UINT64_C(0xF6335FA6D4B1B278), + UINT64_C(0xB199254F7F564D4C), UINT64_C(0x02B769F17CF11223), + UINT64_C(0xB4F7F6AD86B4690B), UINT64_C(0x07D9BA1385133664), + UINT64_C(0x4073C0FA2EF4C950), UINT64_C(0xF35D8C442D53963F), + UINT64_C(0xCF273529793B3738), UINT64_C(0x7C0979977A9C6857), + UINT64_C(0x3BA3037ED17B9763), UINT64_C(0x888D4FC0D2DCC80C), + UINT64_C(0x435671A479AAD56D), UINT64_C(0xF0783D1A7A0D8A02), + UINT64_C(0xB7D247F3D1EA7536), UINT64_C(0x04FC0B4DD24D2A59), + UINT64_C(0x3886B22086258B5E), UINT64_C(0x8BA8FE9E8582D431), + UINT64_C(0xCC0284772E652B05), UINT64_C(0x7F2CC8C92DC2746A), + UINT64_C(0x325B15E575E1C3D0), UINT64_C(0x8175595B76469CBF), + UINT64_C(0xC6DF23B2DDA1638B), UINT64_C(0x75F16F0CDE063CE4), + UINT64_C(0x498BD6618A6E9DE3), UINT64_C(0xFAA59ADF89C9C28C), + UINT64_C(0xBD0FE036222E3DB8), UINT64_C(0x0E21AC88218962D7), + UINT64_C(0xC5FA92EC8AFF7FB6), UINT64_C(0x76D4DE52895820D9), + UINT64_C(0x317EA4BB22BFDFED), UINT64_C(0x8250E80521188082), + UINT64_C(0xBE2A516875702185), UINT64_C(0x0D041DD676D77EEA), + UINT64_C(0x4AAE673FDD3081DE), UINT64_C(0xF9802B81DE97DEB1), + UINT64_C(0x4FC0B4DD24D2A599), UINT64_C(0xFCEEF8632775FAF6), + UINT64_C(0xBB44828A8C9205C2), UINT64_C(0x086ACE348F355AAD), + UINT64_C(0x34107759DB5DFBAA), UINT64_C(0x873E3BE7D8FAA4C5), + UINT64_C(0xC094410E731D5BF1), UINT64_C(0x73BA0DB070BA049E), + UINT64_C(0xB86133D4DBCC19FF), UINT64_C(0x0B4F7F6AD86B4690), + UINT64_C(0x4CE50583738CB9A4), UINT64_C(0xFFCB493D702BE6CB), + UINT64_C(0xC3B1F050244347CC), UINT64_C(0x709FBCEE27E418A3), + UINT64_C(0x3735C6078C03E797), UINT64_C(0x841B8AB98FA4B8F8), + UINT64_C(0xADDA7C5F3C4488E3), UINT64_C(0x1EF430E13FE3D78C), + UINT64_C(0x595E4A08940428B8), UINT64_C(0xEA7006B697A377D7), + UINT64_C(0xD60ABFDBC3CBD6D0), UINT64_C(0x6524F365C06C89BF), + UINT64_C(0x228E898C6B8B768B), UINT64_C(0x91A0C532682C29E4), + UINT64_C(0x5A7BFB56C35A3485), UINT64_C(0xE955B7E8C0FD6BEA), + UINT64_C(0xAEFFCD016B1A94DE), UINT64_C(0x1DD181BF68BDCBB1), + UINT64_C(0x21AB38D23CD56AB6), UINT64_C(0x9285746C3F7235D9), + UINT64_C(0xD52F0E859495CAED), UINT64_C(0x6601423B97329582), + UINT64_C(0xD041DD676D77EEAA), UINT64_C(0x636F91D96ED0B1C5), + UINT64_C(0x24C5EB30C5374EF1), UINT64_C(0x97EBA78EC690119E), + UINT64_C(0xAB911EE392F8B099), UINT64_C(0x18BF525D915FEFF6), + UINT64_C(0x5F1528B43AB810C2), UINT64_C(0xEC3B640A391F4FAD), + UINT64_C(0x27E05A6E926952CC), UINT64_C(0x94CE16D091CE0DA3), + UINT64_C(0xD3646C393A29F297), UINT64_C(0x604A2087398EADF8), + UINT64_C(0x5C3099EA6DE60CFF), UINT64_C(0xEF1ED5546E415390), + UINT64_C(0xA8B4AFBDC5A6ACA4), UINT64_C(0x1B9AE303C601F3CB), + UINT64_C(0x56ED3E2F9E224471), UINT64_C(0xE5C372919D851B1E), + UINT64_C(0xA26908783662E42A), UINT64_C(0x114744C635C5BB45), + UINT64_C(0x2D3DFDAB61AD1A42), UINT64_C(0x9E13B115620A452D), + UINT64_C(0xD9B9CBFCC9EDBA19), UINT64_C(0x6A978742CA4AE576), + UINT64_C(0xA14CB926613CF817), UINT64_C(0x1262F598629BA778), + UINT64_C(0x55C88F71C97C584C), UINT64_C(0xE6E6C3CFCADB0723), + UINT64_C(0xDA9C7AA29EB3A624), UINT64_C(0x69B2361C9D14F94B), + UINT64_C(0x2E184CF536F3067F), UINT64_C(0x9D36004B35545910), + UINT64_C(0x2B769F17CF112238), UINT64_C(0x9858D3A9CCB67D57), + UINT64_C(0xDFF2A94067518263), UINT64_C(0x6CDCE5FE64F6DD0C), + UINT64_C(0x50A65C93309E7C0B), UINT64_C(0xE388102D33392364), + UINT64_C(0xA4226AC498DEDC50), UINT64_C(0x170C267A9B79833F), + UINT64_C(0xDCD7181E300F9E5E), UINT64_C(0x6FF954A033A8C131), + UINT64_C(0x28532E49984F3E05), UINT64_C(0x9B7D62F79BE8616A), + UINT64_C(0xA707DB9ACF80C06D), UINT64_C(0x14299724CC279F02), + UINT64_C(0x5383EDCD67C06036), UINT64_C(0xE0ADA17364673F59) + }, { + UINT64_C(0x0000000000000000), UINT64_C(0x54E979925CD0F10D), + UINT64_C(0xA9D2F324B9A1E21A), UINT64_C(0xFD3B8AB6E5711317), + UINT64_C(0xC17D4962DC4DDAB1), UINT64_C(0x959430F0809D2BBC), + UINT64_C(0x68AFBA4665EC38AB), UINT64_C(0x3C46C3D4393CC9A6), + UINT64_C(0x10223DEE1795ABE7), UINT64_C(0x44CB447C4B455AEA), + UINT64_C(0xB9F0CECAAE3449FD), UINT64_C(0xED19B758F2E4B8F0), + UINT64_C(0xD15F748CCBD87156), UINT64_C(0x85B60D1E9708805B), + UINT64_C(0x788D87A87279934C), UINT64_C(0x2C64FE3A2EA96241), + UINT64_C(0x20447BDC2F2B57CE), UINT64_C(0x74AD024E73FBA6C3), + UINT64_C(0x899688F8968AB5D4), UINT64_C(0xDD7FF16ACA5A44D9), + UINT64_C(0xE13932BEF3668D7F), UINT64_C(0xB5D04B2CAFB67C72), + UINT64_C(0x48EBC19A4AC76F65), UINT64_C(0x1C02B80816179E68), + UINT64_C(0x3066463238BEFC29), UINT64_C(0x648F3FA0646E0D24), + UINT64_C(0x99B4B516811F1E33), UINT64_C(0xCD5DCC84DDCFEF3E), + UINT64_C(0xF11B0F50E4F32698), UINT64_C(0xA5F276C2B823D795), + UINT64_C(0x58C9FC745D52C482), UINT64_C(0x0C2085E60182358F), + UINT64_C(0x4088F7B85E56AF9C), UINT64_C(0x14618E2A02865E91), + UINT64_C(0xE95A049CE7F74D86), UINT64_C(0xBDB37D0EBB27BC8B), + UINT64_C(0x81F5BEDA821B752D), UINT64_C(0xD51CC748DECB8420), + UINT64_C(0x28274DFE3BBA9737), UINT64_C(0x7CCE346C676A663A), + UINT64_C(0x50AACA5649C3047B), UINT64_C(0x0443B3C41513F576), + UINT64_C(0xF9783972F062E661), UINT64_C(0xAD9140E0ACB2176C), + UINT64_C(0x91D78334958EDECA), UINT64_C(0xC53EFAA6C95E2FC7), + UINT64_C(0x380570102C2F3CD0), UINT64_C(0x6CEC098270FFCDDD), + UINT64_C(0x60CC8C64717DF852), UINT64_C(0x3425F5F62DAD095F), + UINT64_C(0xC91E7F40C8DC1A48), UINT64_C(0x9DF706D2940CEB45), + UINT64_C(0xA1B1C506AD3022E3), UINT64_C(0xF558BC94F1E0D3EE), + UINT64_C(0x086336221491C0F9), UINT64_C(0x5C8A4FB0484131F4), + UINT64_C(0x70EEB18A66E853B5), UINT64_C(0x2407C8183A38A2B8), + UINT64_C(0xD93C42AEDF49B1AF), UINT64_C(0x8DD53B3C839940A2), + UINT64_C(0xB193F8E8BAA58904), UINT64_C(0xE57A817AE6757809), + UINT64_C(0x18410BCC03046B1E), UINT64_C(0x4CA8725E5FD49A13), + UINT64_C(0x8111EF70BCAD5F38), UINT64_C(0xD5F896E2E07DAE35), + UINT64_C(0x28C31C54050CBD22), UINT64_C(0x7C2A65C659DC4C2F), + UINT64_C(0x406CA61260E08589), UINT64_C(0x1485DF803C307484), + UINT64_C(0xE9BE5536D9416793), UINT64_C(0xBD572CA48591969E), + UINT64_C(0x9133D29EAB38F4DF), UINT64_C(0xC5DAAB0CF7E805D2), + UINT64_C(0x38E121BA129916C5), UINT64_C(0x6C0858284E49E7C8), + UINT64_C(0x504E9BFC77752E6E), UINT64_C(0x04A7E26E2BA5DF63), + UINT64_C(0xF99C68D8CED4CC74), UINT64_C(0xAD75114A92043D79), + UINT64_C(0xA15594AC938608F6), UINT64_C(0xF5BCED3ECF56F9FB), + UINT64_C(0x088767882A27EAEC), UINT64_C(0x5C6E1E1A76F71BE1), + UINT64_C(0x6028DDCE4FCBD247), UINT64_C(0x34C1A45C131B234A), + UINT64_C(0xC9FA2EEAF66A305D), UINT64_C(0x9D135778AABAC150), + UINT64_C(0xB177A9428413A311), UINT64_C(0xE59ED0D0D8C3521C), + UINT64_C(0x18A55A663DB2410B), UINT64_C(0x4C4C23F46162B006), + UINT64_C(0x700AE020585E79A0), UINT64_C(0x24E399B2048E88AD), + UINT64_C(0xD9D81304E1FF9BBA), UINT64_C(0x8D316A96BD2F6AB7), + UINT64_C(0xC19918C8E2FBF0A4), UINT64_C(0x9570615ABE2B01A9), + UINT64_C(0x684BEBEC5B5A12BE), UINT64_C(0x3CA2927E078AE3B3), + UINT64_C(0x00E451AA3EB62A15), UINT64_C(0x540D28386266DB18), + UINT64_C(0xA936A28E8717C80F), UINT64_C(0xFDDFDB1CDBC73902), + UINT64_C(0xD1BB2526F56E5B43), UINT64_C(0x85525CB4A9BEAA4E), + UINT64_C(0x7869D6024CCFB959), UINT64_C(0x2C80AF90101F4854), + UINT64_C(0x10C66C44292381F2), UINT64_C(0x442F15D675F370FF), + UINT64_C(0xB9149F60908263E8), UINT64_C(0xEDFDE6F2CC5292E5), + UINT64_C(0xE1DD6314CDD0A76A), UINT64_C(0xB5341A8691005667), + UINT64_C(0x480F903074714570), UINT64_C(0x1CE6E9A228A1B47D), + UINT64_C(0x20A02A76119D7DDB), UINT64_C(0x744953E44D4D8CD6), + UINT64_C(0x8972D952A83C9FC1), UINT64_C(0xDD9BA0C0F4EC6ECC), + UINT64_C(0xF1FF5EFADA450C8D), UINT64_C(0xA51627688695FD80), + UINT64_C(0x582DADDE63E4EE97), UINT64_C(0x0CC4D44C3F341F9A), + UINT64_C(0x308217980608D63C), UINT64_C(0x646B6E0A5AD82731), + UINT64_C(0x9950E4BCBFA93426), UINT64_C(0xCDB99D2EE379C52B), + UINT64_C(0x90FB71CAD654A0F5), UINT64_C(0xC41208588A8451F8), + UINT64_C(0x392982EE6FF542EF), UINT64_C(0x6DC0FB7C3325B3E2), + UINT64_C(0x518638A80A197A44), UINT64_C(0x056F413A56C98B49), + UINT64_C(0xF854CB8CB3B8985E), UINT64_C(0xACBDB21EEF686953), + UINT64_C(0x80D94C24C1C10B12), UINT64_C(0xD43035B69D11FA1F), + UINT64_C(0x290BBF007860E908), UINT64_C(0x7DE2C69224B01805), + UINT64_C(0x41A405461D8CD1A3), UINT64_C(0x154D7CD4415C20AE), + UINT64_C(0xE876F662A42D33B9), UINT64_C(0xBC9F8FF0F8FDC2B4), + UINT64_C(0xB0BF0A16F97FF73B), UINT64_C(0xE4567384A5AF0636), + UINT64_C(0x196DF93240DE1521), UINT64_C(0x4D8480A01C0EE42C), + UINT64_C(0x71C2437425322D8A), UINT64_C(0x252B3AE679E2DC87), + UINT64_C(0xD810B0509C93CF90), UINT64_C(0x8CF9C9C2C0433E9D), + UINT64_C(0xA09D37F8EEEA5CDC), UINT64_C(0xF4744E6AB23AADD1), + UINT64_C(0x094FC4DC574BBEC6), UINT64_C(0x5DA6BD4E0B9B4FCB), + UINT64_C(0x61E07E9A32A7866D), UINT64_C(0x350907086E777760), + UINT64_C(0xC8328DBE8B066477), UINT64_C(0x9CDBF42CD7D6957A), + UINT64_C(0xD073867288020F69), UINT64_C(0x849AFFE0D4D2FE64), + UINT64_C(0x79A1755631A3ED73), UINT64_C(0x2D480CC46D731C7E), + UINT64_C(0x110ECF10544FD5D8), UINT64_C(0x45E7B682089F24D5), + UINT64_C(0xB8DC3C34EDEE37C2), UINT64_C(0xEC3545A6B13EC6CF), + UINT64_C(0xC051BB9C9F97A48E), UINT64_C(0x94B8C20EC3475583), + UINT64_C(0x698348B826364694), UINT64_C(0x3D6A312A7AE6B799), + UINT64_C(0x012CF2FE43DA7E3F), UINT64_C(0x55C58B6C1F0A8F32), + UINT64_C(0xA8FE01DAFA7B9C25), UINT64_C(0xFC177848A6AB6D28), + UINT64_C(0xF037FDAEA72958A7), UINT64_C(0xA4DE843CFBF9A9AA), + UINT64_C(0x59E50E8A1E88BABD), UINT64_C(0x0D0C771842584BB0), + UINT64_C(0x314AB4CC7B648216), UINT64_C(0x65A3CD5E27B4731B), + UINT64_C(0x989847E8C2C5600C), UINT64_C(0xCC713E7A9E159101), + UINT64_C(0xE015C040B0BCF340), UINT64_C(0xB4FCB9D2EC6C024D), + UINT64_C(0x49C73364091D115A), UINT64_C(0x1D2E4AF655CDE057), + UINT64_C(0x216889226CF129F1), UINT64_C(0x7581F0B03021D8FC), + UINT64_C(0x88BA7A06D550CBEB), UINT64_C(0xDC53039489803AE6), + UINT64_C(0x11EA9EBA6AF9FFCD), UINT64_C(0x4503E72836290EC0), + UINT64_C(0xB8386D9ED3581DD7), UINT64_C(0xECD1140C8F88ECDA), + UINT64_C(0xD097D7D8B6B4257C), UINT64_C(0x847EAE4AEA64D471), + UINT64_C(0x794524FC0F15C766), UINT64_C(0x2DAC5D6E53C5366B), + UINT64_C(0x01C8A3547D6C542A), UINT64_C(0x5521DAC621BCA527), + UINT64_C(0xA81A5070C4CDB630), UINT64_C(0xFCF329E2981D473D), + UINT64_C(0xC0B5EA36A1218E9B), UINT64_C(0x945C93A4FDF17F96), + UINT64_C(0x6967191218806C81), UINT64_C(0x3D8E608044509D8C), + UINT64_C(0x31AEE56645D2A803), UINT64_C(0x65479CF41902590E), + UINT64_C(0x987C1642FC734A19), UINT64_C(0xCC956FD0A0A3BB14), + UINT64_C(0xF0D3AC04999F72B2), UINT64_C(0xA43AD596C54F83BF), + UINT64_C(0x59015F20203E90A8), UINT64_C(0x0DE826B27CEE61A5), + UINT64_C(0x218CD888524703E4), UINT64_C(0x7565A11A0E97F2E9), + UINT64_C(0x885E2BACEBE6E1FE), UINT64_C(0xDCB7523EB73610F3), + UINT64_C(0xE0F191EA8E0AD955), UINT64_C(0xB418E878D2DA2858), + UINT64_C(0x492362CE37AB3B4F), UINT64_C(0x1DCA1B5C6B7BCA42), + UINT64_C(0x5162690234AF5051), UINT64_C(0x058B1090687FA15C), + UINT64_C(0xF8B09A268D0EB24B), UINT64_C(0xAC59E3B4D1DE4346), + UINT64_C(0x901F2060E8E28AE0), UINT64_C(0xC4F659F2B4327BED), + UINT64_C(0x39CDD344514368FA), UINT64_C(0x6D24AAD60D9399F7), + UINT64_C(0x414054EC233AFBB6), UINT64_C(0x15A92D7E7FEA0ABB), + UINT64_C(0xE892A7C89A9B19AC), UINT64_C(0xBC7BDE5AC64BE8A1), + UINT64_C(0x803D1D8EFF772107), UINT64_C(0xD4D4641CA3A7D00A), + UINT64_C(0x29EFEEAA46D6C31D), UINT64_C(0x7D0697381A063210), + UINT64_C(0x712612DE1B84079F), UINT64_C(0x25CF6B4C4754F692), + UINT64_C(0xD8F4E1FAA225E585), UINT64_C(0x8C1D9868FEF51488), + UINT64_C(0xB05B5BBCC7C9DD2E), UINT64_C(0xE4B2222E9B192C23), + UINT64_C(0x1989A8987E683F34), UINT64_C(0x4D60D10A22B8CE39), + UINT64_C(0x61042F300C11AC78), UINT64_C(0x35ED56A250C15D75), + UINT64_C(0xC8D6DC14B5B04E62), UINT64_C(0x9C3FA586E960BF6F), + UINT64_C(0xA0796652D05C76C9), UINT64_C(0xF4901FC08C8C87C4), + UINT64_C(0x09AB957669FD94D3), UINT64_C(0x5D42ECE4352D65DE) + }, { + UINT64_C(0x0000000000000000), UINT64_C(0x3F0BE14A916A6DCB), + UINT64_C(0x7E17C29522D4DB96), UINT64_C(0x411C23DFB3BEB65D), + UINT64_C(0xFC2F852A45A9B72C), UINT64_C(0xC3246460D4C3DAE7), + UINT64_C(0x823847BF677D6CBA), UINT64_C(0xBD33A6F5F6170171), + UINT64_C(0x6A87A57F245D70DD), UINT64_C(0x558C4435B5371D16), + UINT64_C(0x149067EA0689AB4B), UINT64_C(0x2B9B86A097E3C680), + UINT64_C(0x96A8205561F4C7F1), UINT64_C(0xA9A3C11FF09EAA3A), + UINT64_C(0xE8BFE2C043201C67), UINT64_C(0xD7B4038AD24A71AC), + UINT64_C(0xD50F4AFE48BAE1BA), UINT64_C(0xEA04ABB4D9D08C71), + UINT64_C(0xAB18886B6A6E3A2C), UINT64_C(0x94136921FB0457E7), + UINT64_C(0x2920CFD40D135696), UINT64_C(0x162B2E9E9C793B5D), + UINT64_C(0x57370D412FC78D00), UINT64_C(0x683CEC0BBEADE0CB), + UINT64_C(0xBF88EF816CE79167), UINT64_C(0x80830ECBFD8DFCAC), + UINT64_C(0xC19F2D144E334AF1), UINT64_C(0xFE94CC5EDF59273A), + UINT64_C(0x43A76AAB294E264B), UINT64_C(0x7CAC8BE1B8244B80), + UINT64_C(0x3DB0A83E0B9AFDDD), UINT64_C(0x02BB49749AF09016), + UINT64_C(0x38C63AD73E7BDDF1), UINT64_C(0x07CDDB9DAF11B03A), + UINT64_C(0x46D1F8421CAF0667), UINT64_C(0x79DA19088DC56BAC), + UINT64_C(0xC4E9BFFD7BD26ADD), UINT64_C(0xFBE25EB7EAB80716), + UINT64_C(0xBAFE7D685906B14B), UINT64_C(0x85F59C22C86CDC80), + UINT64_C(0x52419FA81A26AD2C), UINT64_C(0x6D4A7EE28B4CC0E7), + UINT64_C(0x2C565D3D38F276BA), UINT64_C(0x135DBC77A9981B71), + UINT64_C(0xAE6E1A825F8F1A00), UINT64_C(0x9165FBC8CEE577CB), + UINT64_C(0xD079D8177D5BC196), UINT64_C(0xEF72395DEC31AC5D), + UINT64_C(0xEDC9702976C13C4B), UINT64_C(0xD2C29163E7AB5180), + UINT64_C(0x93DEB2BC5415E7DD), UINT64_C(0xACD553F6C57F8A16), + UINT64_C(0x11E6F50333688B67), UINT64_C(0x2EED1449A202E6AC), + UINT64_C(0x6FF1379611BC50F1), UINT64_C(0x50FAD6DC80D63D3A), + UINT64_C(0x874ED556529C4C96), UINT64_C(0xB845341CC3F6215D), + UINT64_C(0xF95917C370489700), UINT64_C(0xC652F689E122FACB), + UINT64_C(0x7B61507C1735FBBA), UINT64_C(0x446AB136865F9671), + UINT64_C(0x057692E935E1202C), UINT64_C(0x3A7D73A3A48B4DE7), + UINT64_C(0x718C75AE7CF7BBE2), UINT64_C(0x4E8794E4ED9DD629), + UINT64_C(0x0F9BB73B5E236074), UINT64_C(0x30905671CF490DBF), + UINT64_C(0x8DA3F084395E0CCE), UINT64_C(0xB2A811CEA8346105), + UINT64_C(0xF3B432111B8AD758), UINT64_C(0xCCBFD35B8AE0BA93), + UINT64_C(0x1B0BD0D158AACB3F), UINT64_C(0x2400319BC9C0A6F4), + UINT64_C(0x651C12447A7E10A9), UINT64_C(0x5A17F30EEB147D62), + UINT64_C(0xE72455FB1D037C13), UINT64_C(0xD82FB4B18C6911D8), + UINT64_C(0x9933976E3FD7A785), UINT64_C(0xA6387624AEBDCA4E), + UINT64_C(0xA4833F50344D5A58), UINT64_C(0x9B88DE1AA5273793), + UINT64_C(0xDA94FDC5169981CE), UINT64_C(0xE59F1C8F87F3EC05), + UINT64_C(0x58ACBA7A71E4ED74), UINT64_C(0x67A75B30E08E80BF), + UINT64_C(0x26BB78EF533036E2), UINT64_C(0x19B099A5C25A5B29), + UINT64_C(0xCE049A2F10102A85), UINT64_C(0xF10F7B65817A474E), + UINT64_C(0xB01358BA32C4F113), UINT64_C(0x8F18B9F0A3AE9CD8), + UINT64_C(0x322B1F0555B99DA9), UINT64_C(0x0D20FE4FC4D3F062), + UINT64_C(0x4C3CDD90776D463F), UINT64_C(0x73373CDAE6072BF4), + UINT64_C(0x494A4F79428C6613), UINT64_C(0x7641AE33D3E60BD8), + UINT64_C(0x375D8DEC6058BD85), UINT64_C(0x08566CA6F132D04E), + UINT64_C(0xB565CA530725D13F), UINT64_C(0x8A6E2B19964FBCF4), + UINT64_C(0xCB7208C625F10AA9), UINT64_C(0xF479E98CB49B6762), + UINT64_C(0x23CDEA0666D116CE), UINT64_C(0x1CC60B4CF7BB7B05), + UINT64_C(0x5DDA28934405CD58), UINT64_C(0x62D1C9D9D56FA093), + UINT64_C(0xDFE26F2C2378A1E2), UINT64_C(0xE0E98E66B212CC29), + UINT64_C(0xA1F5ADB901AC7A74), UINT64_C(0x9EFE4CF390C617BF), + UINT64_C(0x9C4505870A3687A9), UINT64_C(0xA34EE4CD9B5CEA62), + UINT64_C(0xE252C71228E25C3F), UINT64_C(0xDD592658B98831F4), + UINT64_C(0x606A80AD4F9F3085), UINT64_C(0x5F6161E7DEF55D4E), + UINT64_C(0x1E7D42386D4BEB13), UINT64_C(0x2176A372FC2186D8), + UINT64_C(0xF6C2A0F82E6BF774), UINT64_C(0xC9C941B2BF019ABF), + UINT64_C(0x88D5626D0CBF2CE2), UINT64_C(0xB7DE83279DD54129), + UINT64_C(0x0AED25D26BC24058), UINT64_C(0x35E6C498FAA82D93), + UINT64_C(0x74FAE74749169BCE), UINT64_C(0x4BF1060DD87CF605), + UINT64_C(0xE318EB5CF9EF77C4), UINT64_C(0xDC130A1668851A0F), + UINT64_C(0x9D0F29C9DB3BAC52), UINT64_C(0xA204C8834A51C199), + UINT64_C(0x1F376E76BC46C0E8), UINT64_C(0x203C8F3C2D2CAD23), + UINT64_C(0x6120ACE39E921B7E), UINT64_C(0x5E2B4DA90FF876B5), + UINT64_C(0x899F4E23DDB20719), UINT64_C(0xB694AF694CD86AD2), + UINT64_C(0xF7888CB6FF66DC8F), UINT64_C(0xC8836DFC6E0CB144), + UINT64_C(0x75B0CB09981BB035), UINT64_C(0x4ABB2A430971DDFE), + UINT64_C(0x0BA7099CBACF6BA3), UINT64_C(0x34ACE8D62BA50668), + UINT64_C(0x3617A1A2B155967E), UINT64_C(0x091C40E8203FFBB5), + UINT64_C(0x4800633793814DE8), UINT64_C(0x770B827D02EB2023), + UINT64_C(0xCA382488F4FC2152), UINT64_C(0xF533C5C265964C99), + UINT64_C(0xB42FE61DD628FAC4), UINT64_C(0x8B2407574742970F), + UINT64_C(0x5C9004DD9508E6A3), UINT64_C(0x639BE59704628B68), + UINT64_C(0x2287C648B7DC3D35), UINT64_C(0x1D8C270226B650FE), + UINT64_C(0xA0BF81F7D0A1518F), UINT64_C(0x9FB460BD41CB3C44), + UINT64_C(0xDEA84362F2758A19), UINT64_C(0xE1A3A228631FE7D2), + UINT64_C(0xDBDED18BC794AA35), UINT64_C(0xE4D530C156FEC7FE), + UINT64_C(0xA5C9131EE54071A3), UINT64_C(0x9AC2F254742A1C68), + UINT64_C(0x27F154A1823D1D19), UINT64_C(0x18FAB5EB135770D2), + UINT64_C(0x59E69634A0E9C68F), UINT64_C(0x66ED777E3183AB44), + UINT64_C(0xB15974F4E3C9DAE8), UINT64_C(0x8E5295BE72A3B723), + UINT64_C(0xCF4EB661C11D017E), UINT64_C(0xF045572B50776CB5), + UINT64_C(0x4D76F1DEA6606DC4), UINT64_C(0x727D1094370A000F), + UINT64_C(0x3361334B84B4B652), UINT64_C(0x0C6AD20115DEDB99), + UINT64_C(0x0ED19B758F2E4B8F), UINT64_C(0x31DA7A3F1E442644), + UINT64_C(0x70C659E0ADFA9019), UINT64_C(0x4FCDB8AA3C90FDD2), + UINT64_C(0xF2FE1E5FCA87FCA3), UINT64_C(0xCDF5FF155BED9168), + UINT64_C(0x8CE9DCCAE8532735), UINT64_C(0xB3E23D8079394AFE), + UINT64_C(0x64563E0AAB733B52), UINT64_C(0x5B5DDF403A195699), + UINT64_C(0x1A41FC9F89A7E0C4), UINT64_C(0x254A1DD518CD8D0F), + UINT64_C(0x9879BB20EEDA8C7E), UINT64_C(0xA7725A6A7FB0E1B5), + UINT64_C(0xE66E79B5CC0E57E8), UINT64_C(0xD96598FF5D643A23), + UINT64_C(0x92949EF28518CC26), UINT64_C(0xAD9F7FB81472A1ED), + UINT64_C(0xEC835C67A7CC17B0), UINT64_C(0xD388BD2D36A67A7B), + UINT64_C(0x6EBB1BD8C0B17B0A), UINT64_C(0x51B0FA9251DB16C1), + UINT64_C(0x10ACD94DE265A09C), UINT64_C(0x2FA73807730FCD57), + UINT64_C(0xF8133B8DA145BCFB), UINT64_C(0xC718DAC7302FD130), + UINT64_C(0x8604F9188391676D), UINT64_C(0xB90F185212FB0AA6), + UINT64_C(0x043CBEA7E4EC0BD7), UINT64_C(0x3B375FED7586661C), + UINT64_C(0x7A2B7C32C638D041), UINT64_C(0x45209D785752BD8A), + UINT64_C(0x479BD40CCDA22D9C), UINT64_C(0x789035465CC84057), + UINT64_C(0x398C1699EF76F60A), UINT64_C(0x0687F7D37E1C9BC1), + UINT64_C(0xBBB45126880B9AB0), UINT64_C(0x84BFB06C1961F77B), + UINT64_C(0xC5A393B3AADF4126), UINT64_C(0xFAA872F93BB52CED), + UINT64_C(0x2D1C7173E9FF5D41), UINT64_C(0x121790397895308A), + UINT64_C(0x530BB3E6CB2B86D7), UINT64_C(0x6C0052AC5A41EB1C), + UINT64_C(0xD133F459AC56EA6D), UINT64_C(0xEE3815133D3C87A6), + UINT64_C(0xAF2436CC8E8231FB), UINT64_C(0x902FD7861FE85C30), + UINT64_C(0xAA52A425BB6311D7), UINT64_C(0x9559456F2A097C1C), + UINT64_C(0xD44566B099B7CA41), UINT64_C(0xEB4E87FA08DDA78A), + UINT64_C(0x567D210FFECAA6FB), UINT64_C(0x6976C0456FA0CB30), + UINT64_C(0x286AE39ADC1E7D6D), UINT64_C(0x176102D04D7410A6), + UINT64_C(0xC0D5015A9F3E610A), UINT64_C(0xFFDEE0100E540CC1), + UINT64_C(0xBEC2C3CFBDEABA9C), UINT64_C(0x81C922852C80D757), + UINT64_C(0x3CFA8470DA97D626), UINT64_C(0x03F1653A4BFDBBED), + UINT64_C(0x42ED46E5F8430DB0), UINT64_C(0x7DE6A7AF6929607B), + UINT64_C(0x7F5DEEDBF3D9F06D), UINT64_C(0x40560F9162B39DA6), + UINT64_C(0x014A2C4ED10D2BFB), UINT64_C(0x3E41CD0440674630), + UINT64_C(0x83726BF1B6704741), UINT64_C(0xBC798ABB271A2A8A), + UINT64_C(0xFD65A96494A49CD7), UINT64_C(0xC26E482E05CEF11C), + UINT64_C(0x15DA4BA4D78480B0), UINT64_C(0x2AD1AAEE46EEED7B), + UINT64_C(0x6BCD8931F5505B26), UINT64_C(0x54C6687B643A36ED), + UINT64_C(0xE9F5CE8E922D379C), UINT64_C(0xD6FE2FC403475A57), + UINT64_C(0x97E20C1BB0F9EC0A), UINT64_C(0xA8E9ED51219381C1) + }, { + UINT64_C(0x0000000000000000), UINT64_C(0x1DEE8A5E222CA1DC), + UINT64_C(0x3BDD14BC445943B8), UINT64_C(0x26339EE26675E264), + UINT64_C(0x77BA297888B28770), UINT64_C(0x6A54A326AA9E26AC), + UINT64_C(0x4C673DC4CCEBC4C8), UINT64_C(0x5189B79AEEC76514), + UINT64_C(0xEF7452F111650EE0), UINT64_C(0xF29AD8AF3349AF3C), + UINT64_C(0xD4A9464D553C4D58), UINT64_C(0xC947CC137710EC84), + UINT64_C(0x98CE7B8999D78990), UINT64_C(0x8520F1D7BBFB284C), + UINT64_C(0xA3136F35DD8ECA28), UINT64_C(0xBEFDE56BFFA26BF4), + UINT64_C(0x4C300AC98DC40345), UINT64_C(0x51DE8097AFE8A299), + UINT64_C(0x77ED1E75C99D40FD), UINT64_C(0x6A03942BEBB1E121), + UINT64_C(0x3B8A23B105768435), UINT64_C(0x2664A9EF275A25E9), + UINT64_C(0x0057370D412FC78D), UINT64_C(0x1DB9BD5363036651), + UINT64_C(0xA34458389CA10DA5), UINT64_C(0xBEAAD266BE8DAC79), + UINT64_C(0x98994C84D8F84E1D), UINT64_C(0x8577C6DAFAD4EFC1), + UINT64_C(0xD4FE714014138AD5), UINT64_C(0xC910FB1E363F2B09), + UINT64_C(0xEF2365FC504AC96D), UINT64_C(0xF2CDEFA2726668B1), + UINT64_C(0x986015931B88068A), UINT64_C(0x858E9FCD39A4A756), + UINT64_C(0xA3BD012F5FD14532), UINT64_C(0xBE538B717DFDE4EE), + UINT64_C(0xEFDA3CEB933A81FA), UINT64_C(0xF234B6B5B1162026), + UINT64_C(0xD4072857D763C242), UINT64_C(0xC9E9A209F54F639E), + UINT64_C(0x771447620AED086A), UINT64_C(0x6AFACD3C28C1A9B6), + UINT64_C(0x4CC953DE4EB44BD2), UINT64_C(0x5127D9806C98EA0E), + UINT64_C(0x00AE6E1A825F8F1A), UINT64_C(0x1D40E444A0732EC6), + UINT64_C(0x3B737AA6C606CCA2), UINT64_C(0x269DF0F8E42A6D7E), + UINT64_C(0xD4501F5A964C05CF), UINT64_C(0xC9BE9504B460A413), + UINT64_C(0xEF8D0BE6D2154677), UINT64_C(0xF26381B8F039E7AB), + UINT64_C(0xA3EA36221EFE82BF), UINT64_C(0xBE04BC7C3CD22363), + UINT64_C(0x9837229E5AA7C107), UINT64_C(0x85D9A8C0788B60DB), + UINT64_C(0x3B244DAB87290B2F), UINT64_C(0x26CAC7F5A505AAF3), + UINT64_C(0x00F95917C3704897), UINT64_C(0x1D17D349E15CE94B), + UINT64_C(0x4C9E64D30F9B8C5F), UINT64_C(0x5170EE8D2DB72D83), + UINT64_C(0x7743706F4BC2CFE7), UINT64_C(0x6AADFA3169EE6E3B), + UINT64_C(0xA218840D981E1391), UINT64_C(0xBFF60E53BA32B24D), + UINT64_C(0x99C590B1DC475029), UINT64_C(0x842B1AEFFE6BF1F5), + UINT64_C(0xD5A2AD7510AC94E1), UINT64_C(0xC84C272B3280353D), + UINT64_C(0xEE7FB9C954F5D759), UINT64_C(0xF391339776D97685), + UINT64_C(0x4D6CD6FC897B1D71), UINT64_C(0x50825CA2AB57BCAD), + UINT64_C(0x76B1C240CD225EC9), UINT64_C(0x6B5F481EEF0EFF15), + UINT64_C(0x3AD6FF8401C99A01), UINT64_C(0x273875DA23E53BDD), + UINT64_C(0x010BEB384590D9B9), UINT64_C(0x1CE5616667BC7865), + UINT64_C(0xEE288EC415DA10D4), UINT64_C(0xF3C6049A37F6B108), + UINT64_C(0xD5F59A785183536C), UINT64_C(0xC81B102673AFF2B0), + UINT64_C(0x9992A7BC9D6897A4), UINT64_C(0x847C2DE2BF443678), + UINT64_C(0xA24FB300D931D41C), UINT64_C(0xBFA1395EFB1D75C0), + UINT64_C(0x015CDC3504BF1E34), UINT64_C(0x1CB2566B2693BFE8), + UINT64_C(0x3A81C88940E65D8C), UINT64_C(0x276F42D762CAFC50), + UINT64_C(0x76E6F54D8C0D9944), UINT64_C(0x6B087F13AE213898), + UINT64_C(0x4D3BE1F1C854DAFC), UINT64_C(0x50D56BAFEA787B20), + UINT64_C(0x3A78919E8396151B), UINT64_C(0x27961BC0A1BAB4C7), + UINT64_C(0x01A58522C7CF56A3), UINT64_C(0x1C4B0F7CE5E3F77F), + UINT64_C(0x4DC2B8E60B24926B), UINT64_C(0x502C32B8290833B7), + UINT64_C(0x761FAC5A4F7DD1D3), UINT64_C(0x6BF126046D51700F), + UINT64_C(0xD50CC36F92F31BFB), UINT64_C(0xC8E24931B0DFBA27), + UINT64_C(0xEED1D7D3D6AA5843), UINT64_C(0xF33F5D8DF486F99F), + UINT64_C(0xA2B6EA171A419C8B), UINT64_C(0xBF586049386D3D57), + UINT64_C(0x996BFEAB5E18DF33), UINT64_C(0x848574F57C347EEF), + UINT64_C(0x76489B570E52165E), UINT64_C(0x6BA611092C7EB782), + UINT64_C(0x4D958FEB4A0B55E6), UINT64_C(0x507B05B56827F43A), + UINT64_C(0x01F2B22F86E0912E), UINT64_C(0x1C1C3871A4CC30F2), + UINT64_C(0x3A2FA693C2B9D296), UINT64_C(0x27C12CCDE095734A), + UINT64_C(0x993CC9A61F3718BE), UINT64_C(0x84D243F83D1BB962), + UINT64_C(0xA2E1DD1A5B6E5B06), UINT64_C(0xBF0F57447942FADA), + UINT64_C(0xEE86E0DE97859FCE), UINT64_C(0xF3686A80B5A93E12), + UINT64_C(0xD55BF462D3DCDC76), UINT64_C(0xC8B57E3CF1F07DAA), + UINT64_C(0xD6E9A7309F3239A7), UINT64_C(0xCB072D6EBD1E987B), + UINT64_C(0xED34B38CDB6B7A1F), UINT64_C(0xF0DA39D2F947DBC3), + UINT64_C(0xA1538E481780BED7), UINT64_C(0xBCBD041635AC1F0B), + UINT64_C(0x9A8E9AF453D9FD6F), UINT64_C(0x876010AA71F55CB3), + UINT64_C(0x399DF5C18E573747), UINT64_C(0x24737F9FAC7B969B), + UINT64_C(0x0240E17DCA0E74FF), UINT64_C(0x1FAE6B23E822D523), + UINT64_C(0x4E27DCB906E5B037), UINT64_C(0x53C956E724C911EB), + UINT64_C(0x75FAC80542BCF38F), UINT64_C(0x6814425B60905253), + UINT64_C(0x9AD9ADF912F63AE2), UINT64_C(0x873727A730DA9B3E), + UINT64_C(0xA104B94556AF795A), UINT64_C(0xBCEA331B7483D886), + UINT64_C(0xED6384819A44BD92), UINT64_C(0xF08D0EDFB8681C4E), + UINT64_C(0xD6BE903DDE1DFE2A), UINT64_C(0xCB501A63FC315FF6), + UINT64_C(0x75ADFF0803933402), UINT64_C(0x6843755621BF95DE), + UINT64_C(0x4E70EBB447CA77BA), UINT64_C(0x539E61EA65E6D666), + UINT64_C(0x0217D6708B21B372), UINT64_C(0x1FF95C2EA90D12AE), + UINT64_C(0x39CAC2CCCF78F0CA), UINT64_C(0x24244892ED545116), + UINT64_C(0x4E89B2A384BA3F2D), UINT64_C(0x536738FDA6969EF1), + UINT64_C(0x7554A61FC0E37C95), UINT64_C(0x68BA2C41E2CFDD49), + UINT64_C(0x39339BDB0C08B85D), UINT64_C(0x24DD11852E241981), + UINT64_C(0x02EE8F674851FBE5), UINT64_C(0x1F0005396A7D5A39), + UINT64_C(0xA1FDE05295DF31CD), UINT64_C(0xBC136A0CB7F39011), + UINT64_C(0x9A20F4EED1867275), UINT64_C(0x87CE7EB0F3AAD3A9), + UINT64_C(0xD647C92A1D6DB6BD), UINT64_C(0xCBA943743F411761), + UINT64_C(0xED9ADD965934F505), UINT64_C(0xF07457C87B1854D9), + UINT64_C(0x02B9B86A097E3C68), UINT64_C(0x1F5732342B529DB4), + UINT64_C(0x3964ACD64D277FD0), UINT64_C(0x248A26886F0BDE0C), + UINT64_C(0x7503911281CCBB18), UINT64_C(0x68ED1B4CA3E01AC4), + UINT64_C(0x4EDE85AEC595F8A0), UINT64_C(0x53300FF0E7B9597C), + UINT64_C(0xEDCDEA9B181B3288), UINT64_C(0xF02360C53A379354), + UINT64_C(0xD610FE275C427130), UINT64_C(0xCBFE74797E6ED0EC), + UINT64_C(0x9A77C3E390A9B5F8), UINT64_C(0x879949BDB2851424), + UINT64_C(0xA1AAD75FD4F0F640), UINT64_C(0xBC445D01F6DC579C), + UINT64_C(0x74F1233D072C2A36), UINT64_C(0x691FA96325008BEA), + UINT64_C(0x4F2C37814375698E), UINT64_C(0x52C2BDDF6159C852), + UINT64_C(0x034B0A458F9EAD46), UINT64_C(0x1EA5801BADB20C9A), + UINT64_C(0x38961EF9CBC7EEFE), UINT64_C(0x257894A7E9EB4F22), + UINT64_C(0x9B8571CC164924D6), UINT64_C(0x866BFB923465850A), + UINT64_C(0xA05865705210676E), UINT64_C(0xBDB6EF2E703CC6B2), + UINT64_C(0xEC3F58B49EFBA3A6), UINT64_C(0xF1D1D2EABCD7027A), + UINT64_C(0xD7E24C08DAA2E01E), UINT64_C(0xCA0CC656F88E41C2), + UINT64_C(0x38C129F48AE82973), UINT64_C(0x252FA3AAA8C488AF), + UINT64_C(0x031C3D48CEB16ACB), UINT64_C(0x1EF2B716EC9DCB17), + UINT64_C(0x4F7B008C025AAE03), UINT64_C(0x52958AD220760FDF), + UINT64_C(0x74A614304603EDBB), UINT64_C(0x69489E6E642F4C67), + UINT64_C(0xD7B57B059B8D2793), UINT64_C(0xCA5BF15BB9A1864F), + UINT64_C(0xEC686FB9DFD4642B), UINT64_C(0xF186E5E7FDF8C5F7), + UINT64_C(0xA00F527D133FA0E3), UINT64_C(0xBDE1D8233113013F), + UINT64_C(0x9BD246C15766E35B), UINT64_C(0x863CCC9F754A4287), + UINT64_C(0xEC9136AE1CA42CBC), UINT64_C(0xF17FBCF03E888D60), + UINT64_C(0xD74C221258FD6F04), UINT64_C(0xCAA2A84C7AD1CED8), + UINT64_C(0x9B2B1FD69416ABCC), UINT64_C(0x86C59588B63A0A10), + UINT64_C(0xA0F60B6AD04FE874), UINT64_C(0xBD188134F26349A8), + UINT64_C(0x03E5645F0DC1225C), UINT64_C(0x1E0BEE012FED8380), + UINT64_C(0x383870E3499861E4), UINT64_C(0x25D6FABD6BB4C038), + UINT64_C(0x745F4D278573A52C), UINT64_C(0x69B1C779A75F04F0), + UINT64_C(0x4F82599BC12AE694), UINT64_C(0x526CD3C5E3064748), + UINT64_C(0xA0A13C6791602FF9), UINT64_C(0xBD4FB639B34C8E25), + UINT64_C(0x9B7C28DBD5396C41), UINT64_C(0x8692A285F715CD9D), + UINT64_C(0xD71B151F19D2A889), UINT64_C(0xCAF59F413BFE0955), + UINT64_C(0xECC601A35D8BEB31), UINT64_C(0xF1288BFD7FA74AED), + UINT64_C(0x4FD56E9680052119), UINT64_C(0x523BE4C8A22980C5), + UINT64_C(0x74087A2AC45C62A1), UINT64_C(0x69E6F074E670C37D), + UINT64_C(0x386F47EE08B7A669), UINT64_C(0x2581CDB02A9B07B5), + UINT64_C(0x03B253524CEEE5D1), UINT64_C(0x1E5CD90C6EC2440D) + } +}; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_tablegen.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_tablegen.c new file mode 100644 index 00000000000..92b9a7da8ca --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_tablegen.c @@ -0,0 +1,92 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file crc64_tablegen.c +/// \brief Generate crc64_table_le.h and crc64_table_be.h +/// +/// Compiling: gcc -std=c99 -o crc64_tablegen crc64_tablegen.c +/// Add -DWORDS_BIGENDIAN to generate big endian table. +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include +#include + +#ifdef WORDS_BIGENDIAN +# include "../../common/bswap.h" +#endif + + +static uint64_t crc64_table[4][256]; + + +extern void +init_crc64_table(void) +{ + static const uint64_t poly64 = UINT64_C(0xC96C5795D7870F42); + + for (size_t s = 0; s < 4; ++s) { + for (size_t b = 0; b < 256; ++b) { + uint64_t r = s == 0 ? b : crc64_table[s - 1][b]; + + for (size_t i = 0; i < 8; ++i) { + if (r & 1) + r = (r >> 1) ^ poly64; + else + r >>= 1; + } + + crc64_table[s][b] = r; + } + } + +#ifdef WORDS_BIGENDIAN + for (size_t s = 0; s < 4; ++s) + for (size_t b = 0; b < 256; ++b) + crc64_table[s][b] = bswap_64(crc64_table[s][b]); +#endif + + return; +} + + +static void +print_crc64_table(void) +{ + printf("/* This file has been automatically generated by " + "crc64_tablegen.c. */\n\n" + "const uint64_t lzma_crc64_table[4][256] = {\n\t{"); + + for (size_t s = 0; s < 4; ++s) { + for (size_t b = 0; b < 256; ++b) { + if ((b % 2) == 0) + printf("\n\t\t"); + + printf("UINT64_C(0x%016" PRIX64 ")", + crc64_table[s][b]); + + if (b != 255) + printf(",%s", (b+1) % 2 == 0 ? "" : " "); + } + + if (s == 3) + printf("\n\t}\n};\n"); + else + printf("\n\t}, {"); + } + + return; +} + + +int +main(void) +{ + init_crc64_table(); + print_crc64_table(); + return 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_x86.S b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_x86.S new file mode 100644 index 00000000000..17de076ac9a --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc64_x86.S @@ -0,0 +1,287 @@ +/* + * Speed-optimized CRC64 using slicing-by-four algorithm + * + * This uses only i386 instructions, but it is optimized for i686 and later + * (including e.g. Pentium II/III/IV, Athlon XP, and Core 2). + * + * Authors: Igor Pavlov (original CRC32 assembly code) + * Lasse Collin (CRC64 adaptation of the modified CRC32 code) + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * This code needs lzma_crc64_table, which can be created using the + * following C code: + +uint64_t lzma_crc64_table[4][256]; + +void +init_table(void) +{ + // ECMA-182 + static const uint64_t poly64 = UINT64_C(0xC96C5795D7870F42); + + for (size_t s = 0; s < 4; ++s) { + for (size_t b = 0; b < 256; ++b) { + uint64_t r = s == 0 ? b : lzma_crc64_table[s - 1][b]; + + for (size_t i = 0; i < 8; ++i) { + if (r & 1) + r = (r >> 1) ^ poly64; + else + r >>= 1; + } + + lzma_crc64_table[s][b] = r; + } + } +} + + * The prototype of the CRC64 function: + * extern uint64_t lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc); + */ + +/* + * On some systems, the functions need to be prefixed. The prefix is + * usually an underscore. + */ +#ifndef __USER_LABEL_PREFIX__ +# define __USER_LABEL_PREFIX__ +#endif +#define MAKE_SYM_CAT(prefix, sym) prefix ## sym +#define MAKE_SYM(prefix, sym) MAKE_SYM_CAT(prefix, sym) +#define LZMA_CRC64 MAKE_SYM(__USER_LABEL_PREFIX__, lzma_crc64) +#define LZMA_CRC64_TABLE MAKE_SYM(__USER_LABEL_PREFIX__, lzma_crc64_table) + +/* + * Solaris assembler doesn't have .p2align, and Darwin uses .align + * differently than GNU/Linux and Solaris. + */ +#if defined(__MACH__) || defined(__MSDOS__) +# define ALIGN(pow2, abs) .align pow2 +#else +# define ALIGN(pow2, abs) .align abs +#endif + + .text + .globl LZMA_CRC64 + +#if !defined(__MACH__) && !defined(_WIN32) && !defined(__CYGWIN__) \ + && !defined(__MSDOS__) + .type LZMA_CRC64, @function +#endif + + ALIGN(4, 16) +LZMA_CRC64: + /* + * Register usage: + * %eax crc LSB + * %edx crc MSB + * %esi buf + * %edi size or buf + size + * %ebx lzma_crc64_table + * %ebp Table index + * %ecx Temporary + */ + pushl %ebx + pushl %esi + pushl %edi + pushl %ebp + movl 0x14(%esp), %esi /* buf */ + movl 0x18(%esp), %edi /* size */ + movl 0x1C(%esp), %eax /* crc LSB */ + movl 0x20(%esp), %edx /* crc MSB */ + + /* + * Store the address of lzma_crc64_table to %ebx. This is needed to + * get position-independent code (PIC). + * + * The PIC macro is defined by libtool, while __PIC__ is defined + * by GCC but only on some systems. Testing for both makes it simpler + * to test this code without libtool, and keeps the code working also + * when built with libtool but using something else than GCC. + * + * I understood that libtool may define PIC on Windows even though + * the code in Windows DLLs is not PIC in sense that it is in ELF + * binaries, so we need a separate check to always use the non-PIC + * code on Windows. + */ +#if (!defined(PIC) && !defined(__PIC__)) \ + || (defined(_WIN32) || defined(__CYGWIN__)) + /* Not PIC */ + movl $LZMA_CRC64_TABLE, %ebx +#elif defined(__MACH__) + /* Mach-O */ + call .L_get_pc +.L_pic: + leal .L_lzma_crc64_table$non_lazy_ptr-.L_pic(%ebx), %ebx + movl (%ebx), %ebx +#else + /* ELF */ + call .L_get_pc + addl $_GLOBAL_OFFSET_TABLE_, %ebx + movl LZMA_CRC64_TABLE@GOT(%ebx), %ebx +#endif + + /* Complement the initial value. */ + notl %eax + notl %edx + +.L_align: + /* + * Check if there is enough input to use slicing-by-four. + * We need eight bytes, because the loop pre-reads four bytes. + */ + cmpl $8, %edi + jl .L_rest + + /* Check if we have reached alignment of four bytes. */ + testl $3, %esi + jz .L_slice + + /* Calculate CRC of the next input byte. */ + movzbl (%esi), %ebp + incl %esi + movzbl %al, %ecx + xorl %ecx, %ebp + shrdl $8, %edx, %eax + xorl (%ebx, %ebp, 8), %eax + shrl $8, %edx + xorl 4(%ebx, %ebp, 8), %edx + decl %edi + jmp .L_align + +.L_slice: + /* + * If we get here, there's at least eight bytes of aligned input + * available. Make %edi multiple of four bytes. Store the possible + * remainder over the "size" variable in the argument stack. + */ + movl %edi, 0x18(%esp) + andl $-4, %edi + subl %edi, 0x18(%esp) + + /* + * Let %edi be buf + size - 4 while running the main loop. This way + * we can compare for equality to determine when exit the loop. + */ + addl %esi, %edi + subl $4, %edi + + /* Read in the first four aligned bytes. */ + movl (%esi), %ecx + +.L_loop: + xorl %eax, %ecx + movzbl %cl, %ebp + movl 0x1800(%ebx, %ebp, 8), %eax + xorl %edx, %eax + movl 0x1804(%ebx, %ebp, 8), %edx + movzbl %ch, %ebp + xorl 0x1000(%ebx, %ebp, 8), %eax + xorl 0x1004(%ebx, %ebp, 8), %edx + shrl $16, %ecx + movzbl %cl, %ebp + xorl 0x0800(%ebx, %ebp, 8), %eax + xorl 0x0804(%ebx, %ebp, 8), %edx + movzbl %ch, %ebp + addl $4, %esi + xorl (%ebx, %ebp, 8), %eax + xorl 4(%ebx, %ebp, 8), %edx + + /* Check for end of aligned input. */ + cmpl %edi, %esi + + /* + * Copy the next input byte to %ecx. It is slightly faster to + * read it here than at the top of the loop. + */ + movl (%esi), %ecx + jl .L_loop + + /* + * Process the remaining four bytes, which we have already + * copied to %ecx. + */ + xorl %eax, %ecx + movzbl %cl, %ebp + movl 0x1800(%ebx, %ebp, 8), %eax + xorl %edx, %eax + movl 0x1804(%ebx, %ebp, 8), %edx + movzbl %ch, %ebp + xorl 0x1000(%ebx, %ebp, 8), %eax + xorl 0x1004(%ebx, %ebp, 8), %edx + shrl $16, %ecx + movzbl %cl, %ebp + xorl 0x0800(%ebx, %ebp, 8), %eax + xorl 0x0804(%ebx, %ebp, 8), %edx + movzbl %ch, %ebp + addl $4, %esi + xorl (%ebx, %ebp, 8), %eax + xorl 4(%ebx, %ebp, 8), %edx + + /* Copy the number of remaining bytes to %edi. */ + movl 0x18(%esp), %edi + +.L_rest: + /* Check for end of input. */ + testl %edi, %edi + jz .L_return + + /* Calculate CRC of the next input byte. */ + movzbl (%esi), %ebp + incl %esi + movzbl %al, %ecx + xorl %ecx, %ebp + shrdl $8, %edx, %eax + xorl (%ebx, %ebp, 8), %eax + shrl $8, %edx + xorl 4(%ebx, %ebp, 8), %edx + decl %edi + jmp .L_rest + +.L_return: + /* Complement the final value. */ + notl %eax + notl %edx + + popl %ebp + popl %edi + popl %esi + popl %ebx + ret + +#if defined(PIC) || defined(__PIC__) + ALIGN(4, 16) +.L_get_pc: + movl (%esp), %ebx + ret +#endif + +#if defined(__MACH__) && (defined(PIC) || defined(__PIC__)) + /* Mach-O PIC */ + .section __IMPORT,__pointers,non_lazy_symbol_pointers +.L_lzma_crc64_table$non_lazy_ptr: + .indirect_symbol LZMA_CRC64_TABLE + .long 0 + +#elif defined(_WIN32) || defined(__CYGWIN__) +# ifdef DLL_EXPORT + /* This is equivalent of __declspec(dllexport). */ + .section .drectve + .ascii " -export:lzma_crc64" +# endif + +#elif !defined(__MSDOS__) + /* ELF */ + .size LZMA_CRC64, .-LZMA_CRC64 +#endif + +/* + * This is needed to support non-executable stack. It's ugly to + * use __linux__ here, but I don't know a way to detect when + * we are using GNU assembler. + */ +#if defined(__ELF__) && defined(__linux__) + .section .note.GNU-stack,"",@progbits +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc_macros.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc_macros.h new file mode 100644 index 00000000000..9e2c030304f --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/crc_macros.h @@ -0,0 +1,32 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file crc_macros.h +/// \brief Some endian-dependent macros for CRC32 and CRC64 +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifdef WORDS_BIGENDIAN +# include "../../common/bswap.h" + +# define A(x) ((x) >> 24) +# define B(x) (((x) >> 16) & 0xFF) +# define C(x) (((x) >> 8) & 0xFF) +# define D(x) ((x) & 0xFF) + +# define S8(x) ((x) << 8) +# define S32(x) ((x) << 32) + +#else +# define A(x) ((x) & 0xFF) +# define B(x) (((x) >> 8) & 0xFF) +# define C(x) (((x) >> 16) & 0xFF) +# define D(x) ((x) >> 24) + +# define S8(x) ((x) >> 8) +# define S32(x) ((x) >> 32) +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/check/sha256.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/sha256.c new file mode 100644 index 00000000000..6053a51bf10 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/check/sha256.c @@ -0,0 +1,213 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file sha256.c +/// \brief SHA-256 +/// +/// \todo Crypto++ has x86 ASM optimizations. They use SSE so if they +/// are imported to liblzma, SSE instructions need to be used +/// conditionally to keep the code working on older boxes. +/// We could also support using some external libary for SHA-256. +// +// This code is based on the code found from 7-Zip, which has a modified +// version of the SHA-256 found from Crypto++ . +// The code was modified a little to fit into liblzma. +// +// Authors: Kevin Springle +// Wei Dai +// Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +// Avoid bogus warnings in transform(). +#if (__GNUC__ == 4 && __GNUC_MINOR__ >= 2) || __GNUC__ > 4 +# pragma GCC diagnostic ignored "-Wuninitialized" +#endif + +#include "check.h" + +#ifndef WORDS_BIGENDIAN +# include "../../common/bswap.h" +#endif + +// At least on x86, GCC is able to optimize this to a rotate instruction. +#define rotr_32(num, amount) ((num) >> (amount) | (num) << (32 - (amount))) + +#define blk0(i) (W[i] = data[i]) +#define blk2(i) (W[i & 15] += s1(W[(i - 2) & 15]) + W[(i - 7) & 15] \ + + s0(W[(i - 15) & 15])) + +#define Ch(x, y, z) (z ^ (x & (y ^ z))) +#define Maj(x, y, z) ((x & y) | (z & (x | y))) + +#define a(i) T[(0 - i) & 7] +#define b(i) T[(1 - i) & 7] +#define c(i) T[(2 - i) & 7] +#define d(i) T[(3 - i) & 7] +#define e(i) T[(4 - i) & 7] +#define f(i) T[(5 - i) & 7] +#define g(i) T[(6 - i) & 7] +#define h(i) T[(7 - i) & 7] + +#define R(i) \ + h(i) += S1(e(i)) + Ch(e(i), f(i), g(i)) + SHA256_K[i + j] \ + + (j ? blk2(i) : blk0(i)); \ + d(i) += h(i); \ + h(i) += S0(a(i)) + Maj(a(i), b(i), c(i)) + +#define S0(x) (rotr_32(x, 2) ^ rotr_32(x, 13) ^ rotr_32(x, 22)) +#define S1(x) (rotr_32(x, 6) ^ rotr_32(x, 11) ^ rotr_32(x, 25)) +#define s0(x) (rotr_32(x, 7) ^ rotr_32(x, 18) ^ (x >> 3)) +#define s1(x) (rotr_32(x, 17) ^ rotr_32(x, 19) ^ (x >> 10)) + + +static const uint32_t SHA256_K[64] = { + 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, + 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, + 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, + 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, + 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, + 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, + 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, + 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, + 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, + 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, + 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2, +}; + + +static void +transform(uint32_t state[static 8], const uint32_t data[static 16]) +{ + uint32_t W[16]; + uint32_t T[8]; + + // Copy state[] to working vars. + memcpy(T, state, sizeof(T)); + + // 64 operations, partially loop unrolled + for (unsigned int j = 0; j < 64; j += 16) { + R( 0); R( 1); R( 2); R( 3); + R( 4); R( 5); R( 6); R( 7); + R( 8); R( 9); R(10); R(11); + R(12); R(13); R(14); R(15); + } + + // Add the working vars back into state[]. + state[0] += a(0); + state[1] += b(0); + state[2] += c(0); + state[3] += d(0); + state[4] += e(0); + state[5] += f(0); + state[6] += g(0); + state[7] += h(0); +} + + +static void +process(lzma_check_state *check) +{ +#ifdef WORDS_BIGENDIAN + transform(check->state.sha256.state, check->buffer.u32); + +#else + uint32_t data[16]; + + for (size_t i = 0; i < 16; ++i) + data[i] = bswap_32(check->buffer.u32[i]); + + transform(check->state.sha256.state, data); +#endif + + return; +} + + +extern void +lzma_sha256_init(lzma_check_state *check) +{ + static const uint32_t s[8] = { + 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, + 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19, + }; + + memcpy(check->state.sha256.state, s, sizeof(s)); + check->state.sha256.size = 0; + + return; +} + + +extern void +lzma_sha256_update(const uint8_t *buf, size_t size, lzma_check_state *check) +{ + // Copy the input data into a properly aligned temporary buffer. + // This way we can be called with arbitrarily sized buffers + // (no need to be multiple of 64 bytes), and the code works also + // on architectures that don't allow unaligned memory access. + while (size > 0) { + const size_t copy_start = check->state.sha256.size & 0x3F; + size_t copy_size = 64 - copy_start; + if (copy_size > size) + copy_size = size; + + memcpy(check->buffer.u8 + copy_start, buf, copy_size); + + buf += copy_size; + size -= copy_size; + check->state.sha256.size += copy_size; + + if ((check->state.sha256.size & 0x3F) == 0) + process(check); + } + + return; +} + + +extern void +lzma_sha256_finish(lzma_check_state *check) +{ + // Add padding as described in RFC 3174 (it describes SHA-1 but + // the same padding style is used for SHA-256 too). + size_t pos = check->state.sha256.size & 0x3F; + check->buffer.u8[pos++] = 0x80; + + while (pos != 64 - 8) { + if (pos == 64) { + process(check); + pos = 0; + } + + check->buffer.u8[pos++] = 0x00; + } + + // Convert the message size from bytes to bits. + check->state.sha256.size *= 8; + +#ifdef WORDS_BIGENDIAN + check->buffer.u64[(64 - 8) / 8] = check->state.sha256.size; +#else + check->buffer.u64[(64 - 8) / 8] = bswap_64(check->state.sha256.size); +#endif + + process(check); + + for (size_t i = 0; i < 8; ++i) +#ifdef WORDS_BIGENDIAN + check->buffer.u32[i] = check->state.sha256.state[i]; +#else + check->buffer.u32[i] = bswap_32(check->state.sha256.state[i]); +#endif + + return; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/Makefile.inc b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/Makefile.inc new file mode 100644 index 00000000000..aaaeee93307 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/Makefile.inc @@ -0,0 +1,67 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +liblzma_la_SOURCES += \ + common/common.c \ + common/common.h \ + common/bsr.h \ + common/block_util.c \ + common/easy_preset.c \ + common/easy_preset.h \ + common/filter_common.c \ + common/filter_common.h \ + common/index.c \ + common/index.h \ + common/stream_flags_common.c \ + common/stream_flags_common.h \ + common/vli_size.c + +if COND_MAIN_ENCODER +liblzma_la_SOURCES += \ + common/alone_encoder.c \ + common/block_buffer_encoder.c \ + common/block_encoder.c \ + common/block_encoder.h \ + common/block_header_encoder.c \ + common/easy_buffer_encoder.c \ + common/easy_encoder.c \ + common/easy_encoder_memusage.c \ + common/filter_buffer_encoder.c \ + common/filter_encoder.c \ + common/filter_encoder.h \ + common/filter_flags_encoder.c \ + common/index_encoder.c \ + common/index_encoder.h \ + common/stream_buffer_encoder.c \ + common/stream_encoder.c \ + common/stream_encoder.h \ + common/stream_flags_encoder.c \ + common/vli_encoder.c +endif + +if COND_MAIN_DECODER +liblzma_la_SOURCES += \ + common/alone_decoder.c \ + common/alone_decoder.h \ + common/auto_decoder.c \ + common/block_buffer_decoder.c \ + common/block_decoder.c \ + common/block_decoder.h \ + common/block_header_decoder.c \ + common/easy_decoder_memusage.c \ + common/filter_buffer_decoder.c \ + common/filter_decoder.c \ + common/filter_decoder.h \ + common/filter_flags_decoder.c \ + common/index_decoder.c \ + common/index_hash.c \ + common/stream_buffer_decoder.c \ + common/stream_decoder.c \ + common/stream_decoder.h \ + common/stream_flags_decoder.c \ + common/vli_decoder.c +endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/alone_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/alone_decoder.c new file mode 100644 index 00000000000..fa7fb8399cf --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/alone_decoder.c @@ -0,0 +1,229 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file alone_decoder.c +/// \brief Decoder for LZMA_Alone files +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "alone_decoder.h" +#include "lzma_decoder.h" +#include "lz_decoder.h" + + +struct lzma_coder_s { + lzma_next_coder next; + + enum { + SEQ_PROPERTIES, + SEQ_DICTIONARY_SIZE, + SEQ_UNCOMPRESSED_SIZE, + SEQ_CODER_INIT, + SEQ_CODE, + } sequence; + + /// Position in the header fields + size_t pos; + + /// Uncompressed size decoded from the header + lzma_vli uncompressed_size; + + /// Memory usage limit + uint64_t memlimit; + + /// Amount of memory actually needed (only an estimate) + uint64_t memusage; + + /// Options decoded from the header needed to initialize + /// the LZMA decoder + lzma_options_lzma options; +}; + + +static lzma_ret +alone_decode(lzma_coder *coder, + lzma_allocator *allocator lzma_attribute((unused)), + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, + lzma_action action) +{ + while (*out_pos < out_size + && (coder->sequence == SEQ_CODE || *in_pos < in_size)) + switch (coder->sequence) { + case SEQ_PROPERTIES: + if (lzma_lzma_lclppb_decode(&coder->options, in[*in_pos])) + return LZMA_FORMAT_ERROR; + + coder->sequence = SEQ_DICTIONARY_SIZE; + ++*in_pos; + break; + + case SEQ_DICTIONARY_SIZE: + coder->options.dict_size + |= (size_t)(in[*in_pos]) << (coder->pos * 8); + + if (++coder->pos == 4) { + if (coder->options.dict_size != UINT32_MAX) { + // A hack to ditch tons of false positives: + // We allow only dictionary sizes that are + // 2^n or 2^n + 2^(n-1). LZMA_Alone created + // only files with 2^n, but accepts any + // dictionary size. If someone complains, this + // will be reconsidered. + uint32_t d = coder->options.dict_size - 1; + d |= d >> 2; + d |= d >> 3; + d |= d >> 4; + d |= d >> 8; + d |= d >> 16; + ++d; + + if (d != coder->options.dict_size) + return LZMA_FORMAT_ERROR; + } + + coder->pos = 0; + coder->sequence = SEQ_UNCOMPRESSED_SIZE; + } + + ++*in_pos; + break; + + case SEQ_UNCOMPRESSED_SIZE: + coder->uncompressed_size + |= (lzma_vli)(in[*in_pos]) << (coder->pos * 8); + ++*in_pos; + if (++coder->pos < 8) + break; + + // Another hack to ditch false positives: Assume that + // if the uncompressed size is known, it must be less + // than 256 GiB. Again, if someone complains, this + // will be reconsidered. + if (coder->uncompressed_size != LZMA_VLI_UNKNOWN + && coder->uncompressed_size + >= (LZMA_VLI_C(1) << 38)) + return LZMA_FORMAT_ERROR; + + // Calculate the memory usage so that it is ready + // for SEQ_CODER_INIT. + coder->memusage = lzma_lzma_decoder_memusage(&coder->options) + + LZMA_MEMUSAGE_BASE; + + coder->pos = 0; + coder->sequence = SEQ_CODER_INIT; + + // Fall through + + case SEQ_CODER_INIT: { + if (coder->memusage > coder->memlimit) + return LZMA_MEMLIMIT_ERROR; + + lzma_filter_info filters[2] = { + { + .init = &lzma_lzma_decoder_init, + .options = &coder->options, + }, { + .init = NULL, + } + }; + + const lzma_ret ret = lzma_next_filter_init(&coder->next, + allocator, filters); + if (ret != LZMA_OK) + return ret; + + // Use a hack to set the uncompressed size. + lzma_lz_decoder_uncompressed(coder->next.coder, + coder->uncompressed_size); + + coder->sequence = SEQ_CODE; + break; + } + + case SEQ_CODE: { + return coder->next.code(coder->next.coder, + allocator, in, in_pos, in_size, + out, out_pos, out_size, action); + } + + default: + return LZMA_PROG_ERROR; + } + + return LZMA_OK; +} + + +static void +alone_decoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_next_end(&coder->next, allocator); + lzma_free(coder, allocator); + return; +} + + +static lzma_ret +alone_decoder_memconfig(lzma_coder *coder, uint64_t *memusage, + uint64_t *old_memlimit, uint64_t new_memlimit) +{ + if (new_memlimit != 0 && new_memlimit < coder->memusage) + return LZMA_MEMLIMIT_ERROR; + + *memusage = coder->memusage; + *old_memlimit = coder->memlimit; + coder->memlimit = new_memlimit; + + return LZMA_OK; +} + + +extern lzma_ret +lzma_alone_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, + uint64_t memlimit) +{ + lzma_next_coder_init(&lzma_alone_decoder_init, next, allocator); + + if (memlimit == 0) + return LZMA_PROG_ERROR; + + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &alone_decode; + next->end = &alone_decoder_end; + next->memconfig = &alone_decoder_memconfig; + next->coder->next = LZMA_NEXT_CODER_INIT; + } + + next->coder->sequence = SEQ_PROPERTIES; + next->coder->pos = 0; + next->coder->options.dict_size = 0; + next->coder->options.preset_dict = NULL; + next->coder->options.preset_dict_size = 0; + next->coder->uncompressed_size = 0; + next->coder->memlimit = memlimit; + next->coder->memusage = LZMA_MEMUSAGE_BASE; + + return LZMA_OK; +} + + +extern LZMA_API(lzma_ret) +lzma_alone_decoder(lzma_stream *strm, uint64_t memlimit) +{ + lzma_next_strm_init(lzma_alone_decoder_init, strm, memlimit); + + strm->internal->supported_actions[LZMA_RUN] = true; + strm->internal->supported_actions[LZMA_FINISH] = true; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/alone_decoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/alone_decoder.h new file mode 100644 index 00000000000..70d0d2a0ffa --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/alone_decoder.h @@ -0,0 +1,22 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file alone_decoder.h +/// \brief Decoder for LZMA_Alone files +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_ALONE_DECODER_H +#define LZMA_ALONE_DECODER_H + +#include "common.h" + + +extern lzma_ret lzma_alone_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, uint64_t memlimit); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/alone_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/alone_encoder.c new file mode 100644 index 00000000000..68c9505db14 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/alone_encoder.c @@ -0,0 +1,157 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file alone_decoder.c +/// \brief Decoder for LZMA_Alone files +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "common.h" +#include "lzma_encoder.h" + + +#define ALONE_HEADER_SIZE (1 + 4 + 8) + + +struct lzma_coder_s { + lzma_next_coder next; + + enum { + SEQ_HEADER, + SEQ_CODE, + } sequence; + + size_t header_pos; + uint8_t header[ALONE_HEADER_SIZE]; +}; + + +static lzma_ret +alone_encode(lzma_coder *coder, + lzma_allocator *allocator lzma_attribute((unused)), + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, + lzma_action action) +{ + while (*out_pos < out_size) + switch (coder->sequence) { + case SEQ_HEADER: + lzma_bufcpy(coder->header, &coder->header_pos, + ALONE_HEADER_SIZE, + out, out_pos, out_size); + if (coder->header_pos < ALONE_HEADER_SIZE) + return LZMA_OK; + + coder->sequence = SEQ_CODE; + break; + + case SEQ_CODE: + return coder->next.code(coder->next.coder, + allocator, in, in_pos, in_size, + out, out_pos, out_size, action); + + default: + assert(0); + return LZMA_PROG_ERROR; + } + + return LZMA_OK; +} + + +static void +alone_encoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_next_end(&coder->next, allocator); + lzma_free(coder, allocator); + return; +} + + +// At least for now, this is not used by any internal function. +static lzma_ret +alone_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_options_lzma *options) +{ + lzma_next_coder_init(&alone_encoder_init, next, allocator); + + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &alone_encode; + next->end = &alone_encoder_end; + next->coder->next = LZMA_NEXT_CODER_INIT; + } + + // Basic initializations + next->coder->sequence = SEQ_HEADER; + next->coder->header_pos = 0; + + // Encode the header: + // - Properties (1 byte) + if (lzma_lzma_lclppb_encode(options, next->coder->header)) + return LZMA_OPTIONS_ERROR; + + // - Dictionary size (4 bytes) + if (options->dict_size < LZMA_DICT_SIZE_MIN) + return LZMA_OPTIONS_ERROR; + + // Round up to to the next 2^n or 2^n + 2^(n - 1) depending on which + // one is the next unless it is UINT32_MAX. While the header would + // allow any 32-bit integer, we do this to keep the decoder of liblzma + // accepting the resulting files. + uint32_t d = options->dict_size - 1; + d |= d >> 2; + d |= d >> 3; + d |= d >> 4; + d |= d >> 8; + d |= d >> 16; + if (d != UINT32_MAX) + ++d; + + integer_write_32(next->coder->header + 1, d); + + // - Uncompressed size (always unknown and using EOPM) + memset(next->coder->header + 1 + 4, 0xFF, 8); + + // Initialize the LZMA encoder. + const lzma_filter_info filters[2] = { + { + .init = &lzma_lzma_encoder_init, + .options = (void *)(options), + }, { + .init = NULL, + } + }; + + return lzma_next_filter_init(&next->coder->next, allocator, filters); +} + + +/* +extern lzma_ret +lzma_alone_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_options_alone *options) +{ + lzma_next_coder_init(&alone_encoder_init, next, allocator, options); +} +*/ + + +extern LZMA_API(lzma_ret) +lzma_alone_encoder(lzma_stream *strm, const lzma_options_lzma *options) +{ + lzma_next_strm_init(alone_encoder_init, strm, options); + + strm->internal->supported_actions[LZMA_RUN] = true; + strm->internal->supported_actions[LZMA_FINISH] = true; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/auto_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/auto_decoder.c new file mode 100644 index 00000000000..ae6c3e78642 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/auto_decoder.c @@ -0,0 +1,186 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file auto_decoder.c +/// \brief Autodetect between .xz Stream and .lzma (LZMA_Alone) formats +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "stream_decoder.h" +#include "alone_decoder.h" + + +struct lzma_coder_s { + /// Stream decoder or LZMA_Alone decoder + lzma_next_coder next; + + uint64_t memlimit; + uint32_t flags; + + enum { + SEQ_INIT, + SEQ_CODE, + SEQ_FINISH, + } sequence; +}; + + +static lzma_ret +auto_decode(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + switch (coder->sequence) { + case SEQ_INIT: + if (*in_pos >= in_size) + return LZMA_OK; + + // Update the sequence now, because we want to continue from + // SEQ_CODE even if we return some LZMA_*_CHECK. + coder->sequence = SEQ_CODE; + + // Detect the file format. For now this is simple, since if + // it doesn't start with 0xFD (the first magic byte of the + // new format), it has to be LZMA_Alone, or something that + // we don't support at all. + if (in[*in_pos] == 0xFD) { + return_if_error(lzma_stream_decoder_init( + &coder->next, allocator, + coder->memlimit, coder->flags)); + } else { + return_if_error(lzma_alone_decoder_init(&coder->next, + allocator, coder->memlimit)); + + // If the application wants to know about missing + // integrity check or about the check in general, we + // need to handle it here, because LZMA_Alone decoder + // doesn't accept any flags. + if (coder->flags & LZMA_TELL_NO_CHECK) + return LZMA_NO_CHECK; + + if (coder->flags & LZMA_TELL_ANY_CHECK) + return LZMA_GET_CHECK; + } + + // Fall through + + case SEQ_CODE: { + const lzma_ret ret = coder->next.code( + coder->next.coder, allocator, + in, in_pos, in_size, + out, out_pos, out_size, action); + if (ret != LZMA_STREAM_END + || (coder->flags & LZMA_CONCATENATED) == 0) + return ret; + + coder->sequence = SEQ_FINISH; + } + + // Fall through + + case SEQ_FINISH: + // When LZMA_DECODE_CONCATENATED was used and we were decoding + // LZMA_Alone file, we need to check check that there is no + // trailing garbage and wait for LZMA_FINISH. + if (*in_pos < in_size) + return LZMA_DATA_ERROR; + + return action == LZMA_FINISH ? LZMA_STREAM_END : LZMA_OK; + + default: + assert(0); + return LZMA_PROG_ERROR; + } +} + + +static void +auto_decoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_next_end(&coder->next, allocator); + lzma_free(coder, allocator); + return; +} + + +static lzma_check +auto_decoder_get_check(const lzma_coder *coder) +{ + // It is LZMA_Alone if get_check is NULL. + return coder->next.get_check == NULL ? LZMA_CHECK_NONE + : coder->next.get_check(coder->next.coder); +} + + +static lzma_ret +auto_decoder_memconfig(lzma_coder *coder, uint64_t *memusage, + uint64_t *old_memlimit, uint64_t new_memlimit) +{ + lzma_ret ret; + + if (coder->next.memconfig != NULL) { + ret = coder->next.memconfig(coder->next.coder, + memusage, old_memlimit, new_memlimit); + assert(*old_memlimit == coder->memlimit); + } else { + // No coder is configured yet. Use the base value as + // the current memory usage. + *memusage = LZMA_MEMUSAGE_BASE; + *old_memlimit = coder->memlimit; + ret = LZMA_OK; + } + + if (ret == LZMA_OK && new_memlimit != 0) + coder->memlimit = new_memlimit; + + return ret; +} + + +static lzma_ret +auto_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, + uint64_t memlimit, uint32_t flags) +{ + lzma_next_coder_init(&auto_decoder_init, next, allocator); + + if (memlimit == 0) + return LZMA_PROG_ERROR; + + if (flags & ~LZMA_SUPPORTED_FLAGS) + return LZMA_OPTIONS_ERROR; + + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &auto_decode; + next->end = &auto_decoder_end; + next->get_check = &auto_decoder_get_check; + next->memconfig = &auto_decoder_memconfig; + next->coder->next = LZMA_NEXT_CODER_INIT; + } + + next->coder->memlimit = memlimit; + next->coder->flags = flags; + next->coder->sequence = SEQ_INIT; + + return LZMA_OK; +} + + +extern LZMA_API(lzma_ret) +lzma_auto_decoder(lzma_stream *strm, uint64_t memlimit, uint32_t flags) +{ + lzma_next_strm_init(auto_decoder_init, strm, memlimit, flags); + + strm->internal->supported_actions[LZMA_RUN] = true; + strm->internal->supported_actions[LZMA_FINISH] = true; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_buffer_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_buffer_decoder.c new file mode 100644 index 00000000000..ff27a11ccfe --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_buffer_decoder.c @@ -0,0 +1,80 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file block_buffer_decoder.c +/// \brief Single-call .xz Block decoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "block_decoder.h" + + +extern LZMA_API(lzma_ret) +lzma_block_buffer_decode(lzma_block *block, lzma_allocator *allocator, + const uint8_t *in, size_t *in_pos, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) +{ + if (in_pos == NULL || (in == NULL && *in_pos != in_size) + || *in_pos > in_size || out_pos == NULL + || (out == NULL && *out_pos != out_size) + || *out_pos > out_size) + return LZMA_PROG_ERROR; + + // Initialize the Block decoder. + lzma_next_coder block_decoder = LZMA_NEXT_CODER_INIT; + lzma_ret ret = lzma_block_decoder_init( + &block_decoder, allocator, block); + + if (ret == LZMA_OK) { + // Save the positions so that we can restore them in case + // an error occurs. + const size_t in_start = *in_pos; + const size_t out_start = *out_pos; + + // Do the actual decoding. + ret = block_decoder.code(block_decoder.coder, allocator, + in, in_pos, in_size, out, out_pos, out_size, + LZMA_FINISH); + + if (ret == LZMA_STREAM_END) { + ret = LZMA_OK; + } else { + if (ret == LZMA_OK) { + // Either the input was truncated or the + // output buffer was too small. + assert(*in_pos == in_size + || *out_pos == out_size); + + // If all the input was consumed, then the + // input is truncated, even if the output + // buffer is also full. This is because + // processing the last byte of the Block + // never produces output. + // + // NOTE: This assumption may break when new + // filters are added, if the end marker of + // the filter doesn't consume at least one + // complete byte. + if (*in_pos == in_size) + ret = LZMA_DATA_ERROR; + else + ret = LZMA_BUF_ERROR; + } + + // Restore the positions. + *in_pos = in_start; + *out_pos = out_start; + } + } + + // Free the decoder memory. This needs to be done even if + // initialization fails, because the internal API doesn't + // require the initialization function to free its memory on error. + lzma_next_end(&block_decoder, allocator); + + return ret; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_buffer_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_buffer_encoder.c new file mode 100644 index 00000000000..4d90feef50b --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_buffer_encoder.c @@ -0,0 +1,299 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file block_buffer_encoder.c +/// \brief Single-call .xz Block encoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "block_encoder.h" +#include "filter_encoder.h" +#include "lzma2_encoder.h" +#include "check.h" + + +/// Estimate the maximum size of the Block Header and Check fields for +/// a Block that uses LZMA2 uncompressed chunks. We could use +/// lzma_block_header_size() but this is simpler. +/// +/// Block Header Size + Block Flags + Compressed Size +/// + Uncompressed Size + Filter Flags for LZMA2 + CRC32 + Check +/// and round up to the next multiple of four to take Header Padding +/// into account. +#define HEADERS_BOUND ((1 + 1 + 2 * LZMA_VLI_BYTES_MAX + 3 + 4 \ + + LZMA_CHECK_SIZE_MAX + 3) & ~3) + + +static lzma_vli +lzma2_bound(lzma_vli uncompressed_size) +{ + // Prevent integer overflow in overhead calculation. + if (uncompressed_size > COMPRESSED_SIZE_MAX) + return 0; + + // Calculate the exact overhead of the LZMA2 headers: Round + // uncompressed_size up to the next multiple of LZMA2_CHUNK_MAX, + // multiply by the size of per-chunk header, and add one byte for + // the end marker. + const lzma_vli overhead = ((uncompressed_size + LZMA2_CHUNK_MAX - 1) + / LZMA2_CHUNK_MAX) + * LZMA2_HEADER_UNCOMPRESSED + 1; + + // Catch the possible integer overflow. + if (COMPRESSED_SIZE_MAX - overhead < uncompressed_size) + return 0; + + return uncompressed_size + overhead; +} + + +extern LZMA_API(size_t) +lzma_block_buffer_bound(size_t uncompressed_size) +{ + // For now, if the data doesn't compress, we always use uncompressed + // chunks of LZMA2. In future we may use Subblock filter too, but + // but for simplicity we probably will still use the same bound + // calculation even though Subblock filter would have slightly less + // overhead. + lzma_vli lzma2_size = lzma2_bound(uncompressed_size); + if (lzma2_size == 0) + return 0; + + // Take Block Padding into account. + lzma2_size = (lzma2_size + 3) & ~LZMA_VLI_C(3); + +#if SIZE_MAX < LZMA_VLI_MAX + // Catch the possible integer overflow on 32-bit systems. There's no + // overflow on 64-bit systems, because lzma2_bound() already takes + // into account the size of the headers in the Block. + if (SIZE_MAX - HEADERS_BOUND < lzma2_size) + return 0; +#endif + + return HEADERS_BOUND + lzma2_size; +} + + +static lzma_ret +block_encode_uncompressed(lzma_block *block, const uint8_t *in, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) +{ + // TODO: Figure out if the last filter is LZMA2 or Subblock and use + // that filter to encode the uncompressed chunks. + + // Use LZMA2 uncompressed chunks. We wouldn't need a dictionary at + // all, but LZMA2 always requires a dictionary, so use the minimum + // value to minimize memory usage of the decoder. + lzma_options_lzma lzma2 = { + .dict_size = LZMA_DICT_SIZE_MIN, + }; + + lzma_filter filters[2]; + filters[0].id = LZMA_FILTER_LZMA2; + filters[0].options = &lzma2; + filters[1].id = LZMA_VLI_UNKNOWN; + + // Set the above filter options to *block temporarily so that we can + // encode the Block Header. + lzma_filter *filters_orig = block->filters; + block->filters = filters; + + if (lzma_block_header_size(block) != LZMA_OK) { + block->filters = filters_orig; + return LZMA_PROG_ERROR; + } + + // Check that there's enough output space. The caller has already + // set block->compressed_size to what lzma2_bound() has returned, + // so we can reuse that value. We know that compressed_size is a + // known valid VLI and header_size is a small value so their sum + // will never overflow. + assert(block->compressed_size == lzma2_bound(in_size)); + if (out_size - *out_pos + < block->header_size + block->compressed_size) { + block->filters = filters_orig; + return LZMA_BUF_ERROR; + } + + if (lzma_block_header_encode(block, out + *out_pos) != LZMA_OK) { + block->filters = filters_orig; + return LZMA_PROG_ERROR; + } + + block->filters = filters_orig; + *out_pos += block->header_size; + + // Encode the data using LZMA2 uncompressed chunks. + size_t in_pos = 0; + uint8_t control = 0x01; // Dictionary reset + + while (in_pos < in_size) { + // Control byte: Indicate uncompressed chunk, of which + // the first resets the dictionary. + out[(*out_pos)++] = control; + control = 0x02; // No dictionary reset + + // Size of the uncompressed chunk + const size_t copy_size + = MIN(in_size - in_pos, LZMA2_CHUNK_MAX); + out[(*out_pos)++] = (copy_size - 1) >> 8; + out[(*out_pos)++] = (copy_size - 1) & 0xFF; + + // The actual data + assert(*out_pos + copy_size <= out_size); + memcpy(out + *out_pos, in + in_pos, copy_size); + + in_pos += copy_size; + *out_pos += copy_size; + } + + // End marker + out[(*out_pos)++] = 0x00; + assert(*out_pos <= out_size); + + return LZMA_OK; +} + + +static lzma_ret +block_encode_normal(lzma_block *block, lzma_allocator *allocator, + const uint8_t *in, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) +{ + // Find out the size of the Block Header. + block->compressed_size = lzma2_bound(in_size); + if (block->compressed_size == 0) + return LZMA_DATA_ERROR; + + block->uncompressed_size = in_size; + return_if_error(lzma_block_header_size(block)); + + // Reserve space for the Block Header and skip it for now. + if (out_size - *out_pos <= block->header_size) + return LZMA_BUF_ERROR; + + const size_t out_start = *out_pos; + *out_pos += block->header_size; + + // Limit out_size so that we stop encoding if the output would grow + // bigger than what uncompressed Block would be. + if (out_size - *out_pos > block->compressed_size) + out_size = *out_pos + block->compressed_size; + + // TODO: In many common cases this could be optimized to use + // significantly less memory. + lzma_next_coder raw_encoder = LZMA_NEXT_CODER_INIT; + lzma_ret ret = lzma_raw_encoder_init( + &raw_encoder, allocator, block->filters); + + if (ret == LZMA_OK) { + size_t in_pos = 0; + ret = raw_encoder.code(raw_encoder.coder, allocator, + in, &in_pos, in_size, out, out_pos, out_size, + LZMA_FINISH); + } + + // NOTE: This needs to be run even if lzma_raw_encoder_init() failed. + lzma_next_end(&raw_encoder, allocator); + + if (ret == LZMA_STREAM_END) { + // Compression was successful. Write the Block Header. + block->compressed_size + = *out_pos - (out_start + block->header_size); + ret = lzma_block_header_encode(block, out + out_start); + if (ret != LZMA_OK) + ret = LZMA_PROG_ERROR; + + } else if (ret == LZMA_OK) { + // Output buffer became full. + ret = LZMA_BUF_ERROR; + } + + // Reset *out_pos if something went wrong. + if (ret != LZMA_OK) + *out_pos = out_start; + + return ret; +} + + +extern LZMA_API(lzma_ret) +lzma_block_buffer_encode(lzma_block *block, lzma_allocator *allocator, + const uint8_t *in, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) +{ + // Sanity checks + if (block == NULL || block->filters == NULL + || (in == NULL && in_size != 0) || out == NULL + || out_pos == NULL || *out_pos > out_size) + return LZMA_PROG_ERROR; + + // Check the version field. + if (block->version != 0) + return LZMA_OPTIONS_ERROR; + + // Size of a Block has to be a multiple of four, so limit the size + // here already. This way we don't need to check it again when adding + // Block Padding. + out_size -= (out_size - *out_pos) & 3; + + // Get the size of the Check field. + const size_t check_size = lzma_check_size(block->check); + if (check_size == UINT32_MAX) + return LZMA_PROG_ERROR; + + // Reserve space for the Check field. + if (out_size - *out_pos <= check_size) + return LZMA_BUF_ERROR; + + out_size -= check_size; + + // Do the actual compression. + const lzma_ret ret = block_encode_normal(block, allocator, + in, in_size, out, out_pos, out_size); + if (ret != LZMA_OK) { + // If the error was something else than output buffer + // becoming full, return the error now. + if (ret != LZMA_BUF_ERROR) + return ret; + + // The data was uncompressible (at least with the options + // given to us) or the output buffer was too small. Use the + // uncompressed chunks of LZMA2 to wrap the data into a valid + // Block. If we haven't been given enough output space, even + // this may fail. + return_if_error(block_encode_uncompressed(block, in, in_size, + out, out_pos, out_size)); + } + + assert(*out_pos <= out_size); + + // Block Padding. No buffer overflow here, because we already adjusted + // out_size so that (out_size - out_start) is a multiple of four. + // Thus, if the buffer is full, the loop body can never run. + for (size_t i = (size_t)(block->compressed_size); i & 3; ++i) { + assert(*out_pos < out_size); + out[(*out_pos)++] = 0x00; + } + + // If there's no Check field, we are done now. + if (check_size > 0) { + // Calculate the integrity check. We reserved space for + // the Check field earlier so we don't need to check for + // available output space here. + lzma_check_state check; + lzma_check_init(&check, block->check); + lzma_check_update(&check, block->check, in, in_size); + lzma_check_finish(&check, block->check); + + memcpy(block->raw_check, check.buffer.u8, check_size); + memcpy(out + *out_pos, check.buffer.u8, check_size); + *out_pos += check_size; + } + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_decoder.c new file mode 100644 index 00000000000..a3ce6f49500 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_decoder.c @@ -0,0 +1,242 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file block_decoder.c +/// \brief Decodes .xz Blocks +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "block_decoder.h" +#include "filter_decoder.h" +#include "check.h" + + +struct lzma_coder_s { + enum { + SEQ_CODE, + SEQ_PADDING, + SEQ_CHECK, + } sequence; + + /// The filters in the chain; initialized with lzma_raw_decoder_init(). + lzma_next_coder next; + + /// Decoding options; we also write Compressed Size and Uncompressed + /// Size back to this structure when the decoding has been finished. + lzma_block *block; + + /// Compressed Size calculated while decoding + lzma_vli compressed_size; + + /// Uncompressed Size calculated while decoding + lzma_vli uncompressed_size; + + /// Maximum allowed Compressed Size; this takes into account the + /// size of the Block Header and Check fields when Compressed Size + /// is unknown. + lzma_vli compressed_limit; + + /// Position when reading the Check field + size_t check_pos; + + /// Check of the uncompressed data + lzma_check_state check; +}; + + +static inline bool +update_size(lzma_vli *size, lzma_vli add, lzma_vli limit) +{ + if (limit > LZMA_VLI_MAX) + limit = LZMA_VLI_MAX; + + if (limit < *size || limit - *size < add) + return true; + + *size += add; + + return false; +} + + +static inline bool +is_size_valid(lzma_vli size, lzma_vli reference) +{ + return reference == LZMA_VLI_UNKNOWN || reference == size; +} + + +static lzma_ret +block_decode(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + switch (coder->sequence) { + case SEQ_CODE: { + const size_t in_start = *in_pos; + const size_t out_start = *out_pos; + + const lzma_ret ret = coder->next.code(coder->next.coder, + allocator, in, in_pos, in_size, + out, out_pos, out_size, action); + + const size_t in_used = *in_pos - in_start; + const size_t out_used = *out_pos - out_start; + + // NOTE: We compare to compressed_limit here, which prevents + // the total size of the Block growing past LZMA_VLI_MAX. + if (update_size(&coder->compressed_size, in_used, + coder->compressed_limit) + || update_size(&coder->uncompressed_size, + out_used, + coder->block->uncompressed_size)) + return LZMA_DATA_ERROR; + + lzma_check_update(&coder->check, coder->block->check, + out + out_start, out_used); + + if (ret != LZMA_STREAM_END) + return ret; + + // Compressed and Uncompressed Sizes are now at their final + // values. Verify that they match the values given to us. + if (!is_size_valid(coder->compressed_size, + coder->block->compressed_size) + || !is_size_valid(coder->uncompressed_size, + coder->block->uncompressed_size)) + return LZMA_DATA_ERROR; + + // Copy the values into coder->block. The caller + // may use this information to construct Index. + coder->block->compressed_size = coder->compressed_size; + coder->block->uncompressed_size = coder->uncompressed_size; + + coder->sequence = SEQ_PADDING; + } + + // Fall through + + case SEQ_PADDING: + // Compressed Data is padded to a multiple of four bytes. + while (coder->compressed_size & 3) { + if (*in_pos >= in_size) + return LZMA_OK; + + // We use compressed_size here just get the Padding + // right. The actual Compressed Size was stored to + // coder->block already, and won't be modified by + // us anymore. + ++coder->compressed_size; + + if (in[(*in_pos)++] != 0x00) + return LZMA_DATA_ERROR; + } + + if (coder->block->check == LZMA_CHECK_NONE) + return LZMA_STREAM_END; + + lzma_check_finish(&coder->check, coder->block->check); + coder->sequence = SEQ_CHECK; + + // Fall through + + case SEQ_CHECK: { + const size_t check_size = lzma_check_size(coder->block->check); + lzma_bufcpy(in, in_pos, in_size, coder->block->raw_check, + &coder->check_pos, check_size); + if (coder->check_pos < check_size) + return LZMA_OK; + + // Validate the Check only if we support it. + // coder->check.buffer may be uninitialized + // when the Check ID is not supported. + if (lzma_check_is_supported(coder->block->check) + && memcmp(coder->block->raw_check, + coder->check.buffer.u8, + check_size) != 0) + return LZMA_DATA_ERROR; + + return LZMA_STREAM_END; + } + } + + return LZMA_PROG_ERROR; +} + + +static void +block_decoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_next_end(&coder->next, allocator); + lzma_free(coder, allocator); + return; +} + + +extern lzma_ret +lzma_block_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, + lzma_block *block) +{ + lzma_next_coder_init(&lzma_block_decoder_init, next, allocator); + + // Validate the options. lzma_block_unpadded_size() does that for us + // except for Uncompressed Size and filters. Filters are validated + // by the raw decoder. + if (lzma_block_unpadded_size(block) == 0 + || !lzma_vli_is_valid(block->uncompressed_size)) + return LZMA_PROG_ERROR; + + // Allocate and initialize *next->coder if needed. + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &block_decode; + next->end = &block_decoder_end; + next->coder->next = LZMA_NEXT_CODER_INIT; + } + + // Basic initializations + next->coder->sequence = SEQ_CODE; + next->coder->block = block; + next->coder->compressed_size = 0; + next->coder->uncompressed_size = 0; + + // If Compressed Size is not known, we calculate the maximum allowed + // value so that encoded size of the Block (including Block Padding) + // is still a valid VLI and a multiple of four. + next->coder->compressed_limit + = block->compressed_size == LZMA_VLI_UNKNOWN + ? (LZMA_VLI_MAX & ~LZMA_VLI_C(3)) + - block->header_size + - lzma_check_size(block->check) + : block->compressed_size; + + // Initialize the check. It's caller's problem if the Check ID is not + // supported, and the Block decoder cannot verify the Check field. + // Caller can test lzma_check_is_supported(block->check). + next->coder->check_pos = 0; + lzma_check_init(&next->coder->check, block->check); + + // Initialize the filter chain. + return lzma_raw_decoder_init(&next->coder->next, allocator, + block->filters); +} + + +extern LZMA_API(lzma_ret) +lzma_block_decoder(lzma_stream *strm, lzma_block *block) +{ + lzma_next_strm_init(lzma_block_decoder_init, strm, block); + + strm->internal->supported_actions[LZMA_RUN] = true; + strm->internal->supported_actions[LZMA_FINISH] = true; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_decoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_decoder.h new file mode 100644 index 00000000000..7da9df63f76 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_decoder.h @@ -0,0 +1,22 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file block_decoder.h +/// \brief Decodes .xz Blocks +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_BLOCK_DECODER_H +#define LZMA_BLOCK_DECODER_H + +#include "common.h" + + +extern lzma_ret lzma_block_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, lzma_block *block); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_encoder.c new file mode 100644 index 00000000000..567889aa2f6 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_encoder.c @@ -0,0 +1,198 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file block_encoder.c +/// \brief Encodes .xz Blocks +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "block_encoder.h" +#include "filter_encoder.h" +#include "check.h" + + +struct lzma_coder_s { + /// The filters in the chain; initialized with lzma_raw_decoder_init(). + lzma_next_coder next; + + /// Encoding options; we also write Unpadded Size, Compressed Size, + /// and Uncompressed Size back to this structure when the encoding + /// has been finished. + lzma_block *block; + + enum { + SEQ_CODE, + SEQ_PADDING, + SEQ_CHECK, + } sequence; + + /// Compressed Size calculated while encoding + lzma_vli compressed_size; + + /// Uncompressed Size calculated while encoding + lzma_vli uncompressed_size; + + /// Position in the Check field + size_t pos; + + /// Check of the uncompressed data + lzma_check_state check; +}; + + +static lzma_ret +block_encode(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + // Check that our amount of input stays in proper limits. + if (LZMA_VLI_MAX - coder->uncompressed_size < in_size - *in_pos) + return LZMA_DATA_ERROR; + + switch (coder->sequence) { + case SEQ_CODE: { + const size_t in_start = *in_pos; + const size_t out_start = *out_pos; + + const lzma_ret ret = coder->next.code(coder->next.coder, + allocator, in, in_pos, in_size, + out, out_pos, out_size, action); + + const size_t in_used = *in_pos - in_start; + const size_t out_used = *out_pos - out_start; + + if (COMPRESSED_SIZE_MAX - coder->compressed_size < out_used) + return LZMA_DATA_ERROR; + + coder->compressed_size += out_used; + + // No need to check for overflow because we have already + // checked it at the beginning of this function. + coder->uncompressed_size += in_used; + + lzma_check_update(&coder->check, coder->block->check, + in + in_start, in_used); + + if (ret != LZMA_STREAM_END || action == LZMA_SYNC_FLUSH) + return ret; + + assert(*in_pos == in_size); + assert(action == LZMA_FINISH); + + // Copy the values into coder->block. The caller + // may use this information to construct Index. + coder->block->compressed_size = coder->compressed_size; + coder->block->uncompressed_size = coder->uncompressed_size; + + coder->sequence = SEQ_PADDING; + } + + // Fall through + + case SEQ_PADDING: + // Pad Compressed Data to a multiple of four bytes. We can + // use coder->compressed_size for this since we don't need + // it for anything else anymore. + while (coder->compressed_size & 3) { + if (*out_pos >= out_size) + return LZMA_OK; + + out[*out_pos] = 0x00; + ++*out_pos; + ++coder->compressed_size; + } + + if (coder->block->check == LZMA_CHECK_NONE) + return LZMA_STREAM_END; + + lzma_check_finish(&coder->check, coder->block->check); + + coder->sequence = SEQ_CHECK; + + // Fall through + + case SEQ_CHECK: { + const size_t check_size = lzma_check_size(coder->block->check); + lzma_bufcpy(coder->check.buffer.u8, &coder->pos, check_size, + out, out_pos, out_size); + if (coder->pos < check_size) + return LZMA_OK; + + memcpy(coder->block->raw_check, coder->check.buffer.u8, + check_size); + return LZMA_STREAM_END; + } + } + + return LZMA_PROG_ERROR; +} + + +static void +block_encoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_next_end(&coder->next, allocator); + lzma_free(coder, allocator); + return; +} + + +extern lzma_ret +lzma_block_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, + lzma_block *block) +{ + lzma_next_coder_init(&lzma_block_encoder_init, next, allocator); + + if (block->version != 0) + return LZMA_OPTIONS_ERROR; + + // If the Check ID is not supported, we cannot calculate the check and + // thus not create a proper Block. + if ((unsigned int)(block->check) > LZMA_CHECK_ID_MAX) + return LZMA_PROG_ERROR; + + if (!lzma_check_is_supported(block->check)) + return LZMA_UNSUPPORTED_CHECK; + + // Allocate and initialize *next->coder if needed. + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &block_encode; + next->end = &block_encoder_end; + next->coder->next = LZMA_NEXT_CODER_INIT; + } + + // Basic initializations + next->coder->sequence = SEQ_CODE; + next->coder->block = block; + next->coder->compressed_size = 0; + next->coder->uncompressed_size = 0; + next->coder->pos = 0; + + // Initialize the check + lzma_check_init(&next->coder->check, block->check); + + // Initialize the requested filters. + return lzma_raw_encoder_init(&next->coder->next, allocator, + block->filters); +} + + +extern LZMA_API(lzma_ret) +lzma_block_encoder(lzma_stream *strm, lzma_block *block) +{ + lzma_next_strm_init(lzma_block_encoder_init, strm, block); + + strm->internal->supported_actions[LZMA_RUN] = true; + strm->internal->supported_actions[LZMA_FINISH] = true; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_encoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_encoder.h new file mode 100644 index 00000000000..b9eff0be273 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_encoder.h @@ -0,0 +1,47 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file block_encoder.h +/// \brief Encodes .xz Blocks +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_BLOCK_ENCODER_H +#define LZMA_BLOCK_ENCODER_H + +#include "common.h" + + +/// \brief Biggest Compressed Size value that the Block encoder supports +/// +/// The maximum size of a single Block is limited by the maximum size of +/// a Stream, which in theory is 2^63 - 3 bytes (i.e. LZMA_VLI_MAX - 3). +/// While the size is really big and no one should hit it in practice, we +/// take it into account in some places anyway to catch some errors e.g. if +/// application passes insanely big value to some function. +/// +/// We could take into account the headers etc. to determine the exact +/// maximum size of the Compressed Data field, but the complexity would give +/// us nothing useful. Instead, limit the size of Compressed Data so that +/// even with biggest possible Block Header and Check fields the total +/// encoded size of the Block stays as a valid VLI. This doesn't guarantee +/// that the size of the Stream doesn't grow too big, but that problem is +/// taken care outside the Block handling code. +/// +/// ~LZMA_VLI_C(3) is to guarantee that if we need padding at the end of +/// the Compressed Data field, it will still stay in the proper limit. +/// +/// This constant is in this file because it is needed in both +/// block_encoder.c and block_buffer_encoder.c. +#define COMPRESSED_SIZE_MAX ((LZMA_VLI_MAX - LZMA_BLOCK_HEADER_SIZE_MAX \ + - LZMA_CHECK_SIZE_MAX) & ~LZMA_VLI_C(3)) + + +extern lzma_ret lzma_block_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, lzma_block *block); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_header_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_header_decoder.c new file mode 100644 index 00000000000..868f71b2ddd --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_header_decoder.c @@ -0,0 +1,116 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file block_header_decoder.c +/// \brief Decodes Block Header from .xz files +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "common.h" +#include "check.h" + + +static void +free_properties(lzma_block *block, lzma_allocator *allocator) +{ + // Free allocated filter options. The last array member is not + // touched after the initialization in the beginning of + // lzma_block_header_decode(), so we don't need to touch that here. + for (size_t i = 0; i < LZMA_FILTERS_MAX; ++i) { + lzma_free(block->filters[i].options, allocator); + block->filters[i].id = LZMA_VLI_UNKNOWN; + block->filters[i].options = NULL; + } + + return; +} + + +extern LZMA_API(lzma_ret) +lzma_block_header_decode(lzma_block *block, + lzma_allocator *allocator, const uint8_t *in) +{ + // NOTE: We consider the header to be corrupt not only when the + // CRC32 doesn't match, but also when variable-length integers + // are invalid or over 63 bits, or if the header is too small + // to contain the claimed information. + + // Initialize the filter options array. This way the caller can + // safely free() the options even if an error occurs in this function. + for (size_t i = 0; i <= LZMA_FILTERS_MAX; ++i) { + block->filters[i].id = LZMA_VLI_UNKNOWN; + block->filters[i].options = NULL; + } + + // Always zero for now. + block->version = 0; + + // Validate Block Header Size and Check type. The caller must have + // already set these, so it is a programming error if this test fails. + if (lzma_block_header_size_decode(in[0]) != block->header_size + || (unsigned int)(block->check) > LZMA_CHECK_ID_MAX) + return LZMA_PROG_ERROR; + + // Exclude the CRC32 field. + const size_t in_size = block->header_size - 4; + + // Verify CRC32 + if (lzma_crc32(in, in_size, 0) != integer_read_32(in + in_size)) + return LZMA_DATA_ERROR; + + // Check for unsupported flags. + if (in[1] & 0x3C) + return LZMA_OPTIONS_ERROR; + + // Start after the Block Header Size and Block Flags fields. + size_t in_pos = 2; + + // Compressed Size + if (in[1] & 0x40) { + return_if_error(lzma_vli_decode(&block->compressed_size, + NULL, in, &in_pos, in_size)); + + // Validate Compressed Size. This checks that it isn't zero + // and that the total size of the Block is a valid VLI. + if (lzma_block_unpadded_size(block) == 0) + return LZMA_DATA_ERROR; + } else { + block->compressed_size = LZMA_VLI_UNKNOWN; + } + + // Uncompressed Size + if (in[1] & 0x80) + return_if_error(lzma_vli_decode(&block->uncompressed_size, + NULL, in, &in_pos, in_size)); + else + block->uncompressed_size = LZMA_VLI_UNKNOWN; + + // Filter Flags + const size_t filter_count = (in[1] & 3) + 1; + for (size_t i = 0; i < filter_count; ++i) { + const lzma_ret ret = lzma_filter_flags_decode( + &block->filters[i], allocator, + in, &in_pos, in_size); + if (ret != LZMA_OK) { + free_properties(block, allocator); + return ret; + } + } + + // Padding + while (in_pos < in_size) { + if (in[in_pos++] != 0x00) { + free_properties(block, allocator); + + // Possibly some new field present so use + // LZMA_OPTIONS_ERROR instead of LZMA_DATA_ERROR. + return LZMA_OPTIONS_ERROR; + } + } + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_header_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_header_encoder.c new file mode 100644 index 00000000000..8bef63b53d2 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_header_encoder.c @@ -0,0 +1,132 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file block_header_encoder.c +/// \brief Encodes Block Header for .xz files +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "common.h" +#include "check.h" + + +extern LZMA_API(lzma_ret) +lzma_block_header_size(lzma_block *block) +{ + if (block->version != 0) + return LZMA_OPTIONS_ERROR; + + // Block Header Size + Block Flags + CRC32. + uint32_t size = 1 + 1 + 4; + + // Compressed Size + if (block->compressed_size != LZMA_VLI_UNKNOWN) { + const uint32_t add = lzma_vli_size(block->compressed_size); + if (add == 0 || block->compressed_size == 0) + return LZMA_PROG_ERROR; + + size += add; + } + + // Uncompressed Size + if (block->uncompressed_size != LZMA_VLI_UNKNOWN) { + const uint32_t add = lzma_vli_size(block->uncompressed_size); + if (add == 0) + return LZMA_PROG_ERROR; + + size += add; + } + + // List of Filter Flags + if (block->filters == NULL || block->filters[0].id == LZMA_VLI_UNKNOWN) + return LZMA_PROG_ERROR; + + for (size_t i = 0; block->filters[i].id != LZMA_VLI_UNKNOWN; ++i) { + // Don't allow too many filters. + if (i == LZMA_FILTERS_MAX) + return LZMA_PROG_ERROR; + + uint32_t add; + return_if_error(lzma_filter_flags_size(&add, + block->filters + i)); + + size += add; + } + + // Pad to a multiple of four bytes. + block->header_size = (size + 3) & ~UINT32_C(3); + + // NOTE: We don't verify that the encoded size of the Block stays + // within limits. This is because it is possible that we are called + // with exaggerated Compressed Size (e.g. LZMA_VLI_MAX) to reserve + // space for Block Header, and later called again with lower, + // real values. + + return LZMA_OK; +} + + +extern LZMA_API(lzma_ret) +lzma_block_header_encode(const lzma_block *block, uint8_t *out) +{ + // Valdidate everything but filters. + if (lzma_block_unpadded_size(block) == 0 + || !lzma_vli_is_valid(block->uncompressed_size)) + return LZMA_PROG_ERROR; + + // Indicate the size of the buffer _excluding_ the CRC32 field. + const size_t out_size = block->header_size - 4; + + // Store the Block Header Size. + out[0] = out_size / 4; + + // We write Block Flags in pieces. + out[1] = 0x00; + size_t out_pos = 2; + + // Compressed Size + if (block->compressed_size != LZMA_VLI_UNKNOWN) { + return_if_error(lzma_vli_encode(block->compressed_size, NULL, + out, &out_pos, out_size)); + + out[1] |= 0x40; + } + + // Uncompressed Size + if (block->uncompressed_size != LZMA_VLI_UNKNOWN) { + return_if_error(lzma_vli_encode(block->uncompressed_size, NULL, + out, &out_pos, out_size)); + + out[1] |= 0x80; + } + + // Filter Flags + if (block->filters == NULL || block->filters[0].id == LZMA_VLI_UNKNOWN) + return LZMA_PROG_ERROR; + + size_t filter_count = 0; + do { + // There can be at maximum of four filters. + if (filter_count == LZMA_FILTERS_MAX) + return LZMA_PROG_ERROR; + + return_if_error(lzma_filter_flags_encode( + block->filters + filter_count, + out, &out_pos, out_size)); + + } while (block->filters[++filter_count].id != LZMA_VLI_UNKNOWN); + + out[1] |= filter_count - 1; + + // Padding + memzero(out + out_pos, out_size - out_pos); + + // CRC32 + integer_write_32(out + out_size, lzma_crc32(out, out_size, 0)); + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_util.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_util.c new file mode 100644 index 00000000000..cb9cde255e6 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/block_util.c @@ -0,0 +1,90 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file block_header.c +/// \brief Utility functions to handle lzma_block +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "common.h" +#include "index.h" + + +extern LZMA_API(lzma_ret) +lzma_block_compressed_size(lzma_block *block, lzma_vli total_size) +{ + // Validate everything but Uncompressed Size and filters. + if (lzma_block_unpadded_size(block) == 0) + return LZMA_PROG_ERROR; + + const uint32_t container_size = block->header_size + + lzma_check_size(block->check); + + // Validate that Compressed Size will be greater than zero. + if (container_size <= total_size) + return LZMA_DATA_ERROR; + + // Calculate what Compressed Size is supposed to be. + // If Compressed Size was present in Block Header, + // compare that the new value matches it. + const lzma_vli compressed_size = total_size - container_size; + if (block->compressed_size != LZMA_VLI_UNKNOWN + && block->compressed_size != compressed_size) + return LZMA_DATA_ERROR; + + block->compressed_size = compressed_size; + + return LZMA_OK; +} + + +extern LZMA_API(lzma_vli) +lzma_block_unpadded_size(const lzma_block *block) +{ + // Validate the values that we are interested in i.e. all but + // Uncompressed Size and the filters. + // + // NOTE: This function is used for validation too, so it is + // essential that these checks are always done even if + // Compressed Size is unknown. + if (block == NULL || block->version != 0 + || block->header_size < LZMA_BLOCK_HEADER_SIZE_MIN + || block->header_size > LZMA_BLOCK_HEADER_SIZE_MAX + || (block->header_size & 3) + || !lzma_vli_is_valid(block->compressed_size) + || block->compressed_size == 0 + || (unsigned int)(block->check) > LZMA_CHECK_ID_MAX) + return 0; + + // If Compressed Size is unknown, return that we cannot know + // size of the Block either. + if (block->compressed_size == LZMA_VLI_UNKNOWN) + return LZMA_VLI_UNKNOWN; + + // Calculate Unpadded Size and validate it. + const lzma_vli unpadded_size = block->compressed_size + + block->header_size + + lzma_check_size(block->check); + + assert(unpadded_size >= UNPADDED_SIZE_MIN); + if (unpadded_size > UNPADDED_SIZE_MAX) + return 0; + + return unpadded_size; +} + + +extern LZMA_API(lzma_vli) +lzma_block_total_size(const lzma_block *block) +{ + lzma_vli unpadded_size = lzma_block_unpadded_size(block); + + if (unpadded_size != LZMA_VLI_UNKNOWN) + unpadded_size = vli_ceil4(unpadded_size); + + return unpadded_size; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/bsr.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/bsr.h new file mode 100644 index 00000000000..bef8641fa73 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/bsr.h @@ -0,0 +1,60 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file bsr.h +/// \brief Bit scan reverse +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_BSR_H +#define LZMA_BSR_H + +// NOTE: Both input and output variables for lzma_bsr must be uint32_t. + +#if defined(__GNUC__) && (defined (HAVE_ASM_X86) || defined(HAVE_ASM_X86_64)) +# define lzma_bsr(dest, n) \ + __asm__("bsrl %1, %0" : "=r" (dest) : "rm" (n)) + +#else +# define lzma_bsr(dest, n) dest = lzma_bsr_helper(n) + +static inline uint32_t +lzma_bsr_helper(uint32_t n) +{ + assert(n != 0); + + uint32_t i = 31; + + if ((n & UINT32_C(0xFFFF0000)) == 0) { + n <<= 16; + i = 15; + } + + if ((n & UINT32_C(0xFF000000)) == 0) { + n <<= 8; + i -= 8; + } + + if ((n & UINT32_C(0xF0000000)) == 0) { + n <<= 4; + i -= 4; + } + + if ((n & UINT32_C(0xC0000000)) == 0) { + n <<= 2; + i -= 2; + } + + if ((n & UINT32_C(0x80000000)) == 0) + --i; + + return i; +} + +#endif + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/common.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/common.c new file mode 100644 index 00000000000..3bdf32522a3 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/common.c @@ -0,0 +1,355 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file common.h +/// \brief Common functions needed in many places in liblzma +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "common.h" + + +///////////// +// Version // +///////////// + +extern LZMA_API(uint32_t) +lzma_version_number(void) +{ + return LZMA_VERSION; +} + + +extern LZMA_API(const char *) +lzma_version_string(void) +{ + return LZMA_VERSION_STRING; +} + + +/////////////////////// +// Memory allocation // +/////////////////////// + +extern void * lzma_attribute((malloc)) +lzma_alloc(size_t size, lzma_allocator *allocator) +{ + // Some malloc() variants return NULL if called with size == 0. + if (size == 0) + size = 1; + + void *ptr; + + if (allocator != NULL && allocator->alloc != NULL) + ptr = allocator->alloc(allocator->opaque, 1, size); + else + ptr = malloc(size); + + return ptr; +} + + +extern void +lzma_free(void *ptr, lzma_allocator *allocator) +{ + if (allocator != NULL && allocator->free != NULL) + allocator->free(allocator->opaque, ptr); + else + free(ptr); + + return; +} + + +////////// +// Misc // +////////// + +extern size_t +lzma_bufcpy(const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size) +{ + const size_t in_avail = in_size - *in_pos; + const size_t out_avail = out_size - *out_pos; + const size_t copy_size = MIN(in_avail, out_avail); + + memcpy(out + *out_pos, in + *in_pos, copy_size); + + *in_pos += copy_size; + *out_pos += copy_size; + + return copy_size; +} + + +extern lzma_ret +lzma_next_filter_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters) +{ + lzma_next_coder_init(filters[0].init, next, allocator); + + return filters[0].init == NULL + ? LZMA_OK : filters[0].init(next, allocator, filters); +} + + +extern void +lzma_next_end(lzma_next_coder *next, lzma_allocator *allocator) +{ + if (next->init != (uintptr_t)(NULL)) { + // To avoid tiny end functions that simply call + // lzma_free(coder, allocator), we allow leaving next->end + // NULL and call lzma_free() here. + if (next->end != NULL) + next->end(next->coder, allocator); + else + lzma_free(next->coder, allocator); + + // Reset the variables so the we don't accidentally think + // that it is an already initialized coder. + *next = LZMA_NEXT_CODER_INIT; + } + + return; +} + + +////////////////////////////////////// +// External to internal API wrapper // +////////////////////////////////////// + +extern lzma_ret +lzma_strm_init(lzma_stream *strm) +{ + if (strm == NULL) + return LZMA_PROG_ERROR; + + if (strm->internal == NULL) { + strm->internal = lzma_alloc(sizeof(lzma_internal), + strm->allocator); + if (strm->internal == NULL) + return LZMA_MEM_ERROR; + + strm->internal->next = LZMA_NEXT_CODER_INIT; + } + + strm->internal->supported_actions[LZMA_RUN] = false; + strm->internal->supported_actions[LZMA_SYNC_FLUSH] = false; + strm->internal->supported_actions[LZMA_FULL_FLUSH] = false; + strm->internal->supported_actions[LZMA_FINISH] = false; + strm->internal->sequence = ISEQ_RUN; + + strm->total_in = 0; + strm->total_out = 0; + + return LZMA_OK; +} + + +extern LZMA_API(lzma_ret) +lzma_code(lzma_stream *strm, lzma_action action) +{ + // Sanity checks + if ((strm->next_in == NULL && strm->avail_in != 0) + || (strm->next_out == NULL && strm->avail_out != 0) + || strm->internal == NULL + || strm->internal->next.code == NULL + || (unsigned int)(action) > LZMA_FINISH + || !strm->internal->supported_actions[action]) + return LZMA_PROG_ERROR; + + switch (strm->internal->sequence) { + case ISEQ_RUN: + switch (action) { + case LZMA_RUN: + break; + + case LZMA_SYNC_FLUSH: + strm->internal->sequence = ISEQ_SYNC_FLUSH; + break; + + case LZMA_FULL_FLUSH: + strm->internal->sequence = ISEQ_FULL_FLUSH; + break; + + case LZMA_FINISH: + strm->internal->sequence = ISEQ_FINISH; + break; + } + + break; + + case ISEQ_SYNC_FLUSH: + // The same action must be used until we return + // LZMA_STREAM_END, and the amount of input must not change. + if (action != LZMA_SYNC_FLUSH + || strm->internal->avail_in != strm->avail_in) + return LZMA_PROG_ERROR; + + break; + + case ISEQ_FULL_FLUSH: + if (action != LZMA_FULL_FLUSH + || strm->internal->avail_in != strm->avail_in) + return LZMA_PROG_ERROR; + + break; + + case ISEQ_FINISH: + if (action != LZMA_FINISH + || strm->internal->avail_in != strm->avail_in) + return LZMA_PROG_ERROR; + + break; + + case ISEQ_END: + return LZMA_STREAM_END; + + case ISEQ_ERROR: + default: + return LZMA_PROG_ERROR; + } + + size_t in_pos = 0; + size_t out_pos = 0; + lzma_ret ret = strm->internal->next.code( + strm->internal->next.coder, strm->allocator, + strm->next_in, &in_pos, strm->avail_in, + strm->next_out, &out_pos, strm->avail_out, action); + + strm->next_in += in_pos; + strm->avail_in -= in_pos; + strm->total_in += in_pos; + + strm->next_out += out_pos; + strm->avail_out -= out_pos; + strm->total_out += out_pos; + + strm->internal->avail_in = strm->avail_in; + + switch (ret) { + case LZMA_OK: + // Don't return LZMA_BUF_ERROR when it happens the first time. + // This is to avoid returning LZMA_BUF_ERROR when avail_out + // was zero but still there was no more data left to written + // to next_out. + if (out_pos == 0 && in_pos == 0) { + if (strm->internal->allow_buf_error) + ret = LZMA_BUF_ERROR; + else + strm->internal->allow_buf_error = true; + } else { + strm->internal->allow_buf_error = false; + } + break; + + case LZMA_STREAM_END: + if (strm->internal->sequence == ISEQ_SYNC_FLUSH + || strm->internal->sequence == ISEQ_FULL_FLUSH) + strm->internal->sequence = ISEQ_RUN; + else + strm->internal->sequence = ISEQ_END; + + // Fall through + + case LZMA_NO_CHECK: + case LZMA_UNSUPPORTED_CHECK: + case LZMA_GET_CHECK: + case LZMA_MEMLIMIT_ERROR: + // Something else than LZMA_OK, but not a fatal error, + // that is, coding may be continued (except if ISEQ_END). + strm->internal->allow_buf_error = false; + break; + + default: + // All the other errors are fatal; coding cannot be continued. + assert(ret != LZMA_BUF_ERROR); + strm->internal->sequence = ISEQ_ERROR; + break; + } + + return ret; +} + + +extern LZMA_API(void) +lzma_end(lzma_stream *strm) +{ + if (strm != NULL && strm->internal != NULL) { + lzma_next_end(&strm->internal->next, strm->allocator); + lzma_free(strm->internal, strm->allocator); + strm->internal = NULL; + } + + return; +} + + +extern LZMA_API(lzma_check) +lzma_get_check(const lzma_stream *strm) +{ + // Return LZMA_CHECK_NONE if we cannot know the check type. + // It's a bug in the application if this happens. + if (strm->internal->next.get_check == NULL) + return LZMA_CHECK_NONE; + + return strm->internal->next.get_check(strm->internal->next.coder); +} + + +extern LZMA_API(uint64_t) +lzma_memusage(const lzma_stream *strm) +{ + uint64_t memusage; + uint64_t old_memlimit; + + if (strm == NULL || strm->internal == NULL + || strm->internal->next.memconfig == NULL + || strm->internal->next.memconfig( + strm->internal->next.coder, + &memusage, &old_memlimit, 0) != LZMA_OK) + return 0; + + return memusage; +} + + +extern LZMA_API(uint64_t) +lzma_memlimit_get(const lzma_stream *strm) +{ + uint64_t old_memlimit; + uint64_t memusage; + + if (strm == NULL || strm->internal == NULL + || strm->internal->next.memconfig == NULL + || strm->internal->next.memconfig( + strm->internal->next.coder, + &memusage, &old_memlimit, 0) != LZMA_OK) + return 0; + + return old_memlimit; +} + + +extern LZMA_API(lzma_ret) +lzma_memlimit_set(lzma_stream *strm, uint64_t new_memlimit) +{ + // Dummy variables to simplify memconfig functions + uint64_t old_memlimit; + uint64_t memusage; + + if (strm == NULL || strm->internal == NULL + || strm->internal->next.memconfig == NULL) + return LZMA_PROG_ERROR; + + if (new_memlimit != 0 && new_memlimit < LZMA_MEMUSAGE_BASE) + return LZMA_MEMLIMIT_ERROR; + + return strm->internal->next.memconfig(strm->internal->next.coder, + &memusage, &old_memlimit, new_memlimit); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/common.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/common.h new file mode 100644 index 00000000000..d794cb30e3b --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/common.h @@ -0,0 +1,268 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file common.h +/// \brief Definitions common to the whole liblzma library +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_COMMON_H +#define LZMA_COMMON_H + +#include "sysdefs.h" +#include "mythread.h" +#include "integer.h" + +#if defined(_WIN32) || defined(__CYGWIN__) +# ifdef DLL_EXPORT +# define LZMA_API_EXPORT __declspec(dllexport) +# else +# define LZMA_API_EXPORT +# endif +// Don't use ifdef or defined() below. +#elif HAVE_VISIBILITY +# define LZMA_API_EXPORT __attribute__((__visibility__("default"))) +#else +# define LZMA_API_EXPORT +#endif + +#define LZMA_API(type) LZMA_API_EXPORT type LZMA_API_CALL + +#include "lzma.h" + +// These allow helping the compiler in some often-executed branches, whose +// result is almost always the same. +#ifdef __GNUC__ +# define likely(expr) __builtin_expect(expr, true) +# define unlikely(expr) __builtin_expect(expr, false) +#else +# define likely(expr) (expr) +# define unlikely(expr) (expr) +#endif + + +/// Size of temporary buffers needed in some filters +#define LZMA_BUFFER_SIZE 4096 + + +/// Starting value for memory usage estimates. Instead of calculating size +/// of _every_ structure and taking into accont malloc() overhead etc. we +/// add a base size to all memory usage estimates. It's not very accurate +/// but should be easily good enough. +#define LZMA_MEMUSAGE_BASE (UINT64_C(1) << 15) + +/// Start of internal Filter ID space. These IDs must never be used +/// in Streams. +#define LZMA_FILTER_RESERVED_START (LZMA_VLI_C(1) << 62) + + +/// Internal helper filter used by Subblock decoder. It is mapped to an +/// otherwise invalid Filter ID, which is impossible to get from any input +/// file (even if malicious file). +#define LZMA_FILTER_SUBBLOCK_HELPER LZMA_VLI_C(0x7000000000000001) + + +/// Supported flags that can be passed to lzma_stream_decoder() +/// or lzma_auto_decoder(). +#define LZMA_SUPPORTED_FLAGS \ + ( LZMA_TELL_NO_CHECK \ + | LZMA_TELL_UNSUPPORTED_CHECK \ + | LZMA_TELL_ANY_CHECK \ + | LZMA_CONCATENATED ) + + +/// Type of encoder/decoder specific data; the actual structure is defined +/// differently in different coders. +typedef struct lzma_coder_s lzma_coder; + +typedef struct lzma_next_coder_s lzma_next_coder; + +typedef struct lzma_filter_info_s lzma_filter_info; + + +/// Type of a function used to initialize a filter encoder or decoder +typedef lzma_ret (*lzma_init_function)( + lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters); + +/// Type of a function to do some kind of coding work (filters, Stream, +/// Block encoders/decoders etc.). Some special coders use don't use both +/// input and output buffers, but for simplicity they still use this same +/// function prototype. +typedef lzma_ret (*lzma_code_function)( + lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, + lzma_action action); + +/// Type of a function to free the memory allocated for the coder +typedef void (*lzma_end_function)( + lzma_coder *coder, lzma_allocator *allocator); + + +/// Raw coder validates and converts an array of lzma_filter structures to +/// an array of lzma_filter_info structures. This array is used with +/// lzma_next_filter_init to initialize the filter chain. +struct lzma_filter_info_s { + /// Pointer to function used to initialize the filter. + /// This is NULL to indicate end of array. + lzma_init_function init; + + /// Pointer to filter's options structure + void *options; +}; + + +/// Hold data and function pointers of the next filter in the chain. +struct lzma_next_coder_s { + /// Pointer to coder-specific data + lzma_coder *coder; + + /// "Pointer" to init function. This is never called here. + /// We need only to detect if we are initializing a coder + /// that was allocated earlier. See lzma_next_coder_init and + /// lzma_next_strm_init macros in this file. + uintptr_t init; + + /// Pointer to function to do the actual coding + lzma_code_function code; + + /// Pointer to function to free lzma_next_coder.coder. This can + /// be NULL; in that case, lzma_free is called to free + /// lzma_next_coder.coder. + lzma_end_function end; + + /// Pointer to function to return the type of the integrity check. + /// Most coders won't support this. + lzma_check (*get_check)(const lzma_coder *coder); + + /// Pointer to function to get and/or change the memory usage limit. + /// If new_memlimit == 0, the limit is not changed. + lzma_ret (*memconfig)(lzma_coder *coder, uint64_t *memusage, + uint64_t *old_memlimit, uint64_t new_memlimit); +}; + + +/// Macro to initialize lzma_next_coder structure +#define LZMA_NEXT_CODER_INIT \ + (lzma_next_coder){ \ + .coder = NULL, \ + .init = (uintptr_t)(NULL), \ + .code = NULL, \ + .end = NULL, \ + .get_check = NULL, \ + .memconfig = NULL, \ + } + + +/// Internal data for lzma_strm_init, lzma_code, and lzma_end. A pointer to +/// this is stored in lzma_stream. +struct lzma_internal_s { + /// The actual coder that should do something useful + lzma_next_coder next; + + /// Track the state of the coder. This is used to validate arguments + /// so that the actual coders can rely on e.g. that LZMA_SYNC_FLUSH + /// is used on every call to lzma_code until next.code has returned + /// LZMA_STREAM_END. + enum { + ISEQ_RUN, + ISEQ_SYNC_FLUSH, + ISEQ_FULL_FLUSH, + ISEQ_FINISH, + ISEQ_END, + ISEQ_ERROR, + } sequence; + + /// A copy of lzma_stream avail_in. This is used to verify that the + /// amount of input doesn't change once e.g. LZMA_FINISH has been + /// used. + size_t avail_in; + + /// Indicates which lzma_action values are allowed by next.code. + bool supported_actions[4]; + + /// If true, lzma_code will return LZMA_BUF_ERROR if no progress was + /// made (no input consumed and no output produced by next.code). + bool allow_buf_error; +}; + + +/// Allocates memory +extern void *lzma_alloc(size_t size, lzma_allocator *allocator) + lzma_attribute((malloc)); + +/// Frees memory +extern void lzma_free(void *ptr, lzma_allocator *allocator); + + +/// Allocates strm->internal if it is NULL, and initializes *strm and +/// strm->internal. This function is only called via lzma_next_strm_init macro. +extern lzma_ret lzma_strm_init(lzma_stream *strm); + +/// Initializes the next filter in the chain, if any. This takes care of +/// freeing the memory of previously initialized filter if it is different +/// than the filter being initialized now. This way the actual filter +/// initialization functions don't need to use lzma_next_coder_init macro. +extern lzma_ret lzma_next_filter_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +/// Frees the memory allocated for next->coder either using next->end or, +/// if next->end is NULL, using lzma_free. +extern void lzma_next_end(lzma_next_coder *next, lzma_allocator *allocator); + + +/// Copy as much data as possible from in[] to out[] and update *in_pos +/// and *out_pos accordingly. Returns the number of bytes copied. +extern size_t lzma_bufcpy(const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size); + + +/// \brief Return if expression doesn't evaluate to LZMA_OK +/// +/// There are several situations where we want to return immediatelly +/// with the value of expr if it isn't LZMA_OK. This macro shortens +/// the code a little. +#define return_if_error(expr) \ +do { \ + const lzma_ret ret_ = (expr); \ + if (ret_ != LZMA_OK) \ + return ret_; \ +} while (0) + + +/// If next isn't already initialized, free the previous coder. Then mark +/// that next is _possibly_ initialized for the coder using this macro. +/// "Possibly" means that if e.g. allocation of next->coder fails, the +/// structure isn't actually initialized for this coder, but leaving +/// next->init to func is still OK. +#define lzma_next_coder_init(func, next, allocator) \ +do { \ + if ((uintptr_t)(func) != (next)->init) \ + lzma_next_end(next, allocator); \ + (next)->init = (uintptr_t)(func); \ +} while (0) + + +/// Initializes lzma_strm and calls func() to initialize strm->internal->next. +/// (The function being called will use lzma_next_coder_init()). If +/// initialization fails, memory that wasn't freed by func() is freed +/// along strm->internal. +#define lzma_next_strm_init(func, strm, ...) \ +do { \ + return_if_error(lzma_strm_init(strm)); \ + const lzma_ret ret_ = func(&(strm)->internal->next, \ + (strm)->allocator, __VA_ARGS__); \ + if (ret_ != LZMA_OK) { \ + lzma_end(strm); \ + return ret_; \ + } \ +} while (0) + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_buffer_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_buffer_encoder.c new file mode 100644 index 00000000000..c4be34ccfa2 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_buffer_encoder.c @@ -0,0 +1,27 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file easy_buffer_encoder.c +/// \brief Easy single-call .xz Stream encoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "easy_preset.h" + + +extern LZMA_API(lzma_ret) +lzma_easy_buffer_encode(uint32_t preset, lzma_check check, + lzma_allocator *allocator, const uint8_t *in, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) +{ + lzma_options_easy opt_easy; + if (lzma_easy_preset(&opt_easy, preset)) + return LZMA_OPTIONS_ERROR; + + return lzma_stream_buffer_encode(opt_easy.filters, check, + allocator, in, in_size, out, out_pos, out_size); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_decoder_memusage.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_decoder_memusage.c new file mode 100644 index 00000000000..20bcd5b7175 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_decoder_memusage.c @@ -0,0 +1,24 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file easy_decoder_memusage.c +/// \brief Decoder memory usage calculation to match easy encoder presets +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "easy_preset.h" + + +extern LZMA_API(uint64_t) +lzma_easy_decoder_memusage(uint32_t preset) +{ + lzma_options_easy opt_easy; + if (lzma_easy_preset(&opt_easy, preset)) + return UINT32_MAX; + + return lzma_raw_decoder_memusage(opt_easy.filters); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_encoder.c new file mode 100644 index 00000000000..5e2641c99f2 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_encoder.c @@ -0,0 +1,80 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file easy_encoder.c +/// \brief Easy .xz Stream encoder initialization +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "easy_preset.h" +#include "stream_encoder.h" + + +struct lzma_coder_s { + lzma_next_coder stream_encoder; + lzma_options_easy opt_easy; +}; + + +static lzma_ret +easy_encode(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + return coder->stream_encoder.code( + coder->stream_encoder.coder, allocator, + in, in_pos, in_size, out, out_pos, out_size, action); +} + + +static void +easy_encoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_next_end(&coder->stream_encoder, allocator); + lzma_free(coder, allocator); + return; +} + + +static lzma_ret +easy_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, + uint32_t preset, lzma_check check) +{ + lzma_next_coder_init(&easy_encoder_init, next, allocator); + + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &easy_encode; + next->end = &easy_encoder_end; + + next->coder->stream_encoder = LZMA_NEXT_CODER_INIT; + } + + if (lzma_easy_preset(&next->coder->opt_easy, preset)) + return LZMA_OPTIONS_ERROR; + + return lzma_stream_encoder_init(&next->coder->stream_encoder, + allocator, next->coder->opt_easy.filters, check); +} + + +extern LZMA_API(lzma_ret) +lzma_easy_encoder(lzma_stream *strm, uint32_t preset, lzma_check check) +{ + lzma_next_strm_init(easy_encoder_init, strm, preset, check); + + strm->internal->supported_actions[LZMA_RUN] = true; + strm->internal->supported_actions[LZMA_SYNC_FLUSH] = true; + strm->internal->supported_actions[LZMA_FULL_FLUSH] = true; + strm->internal->supported_actions[LZMA_FINISH] = true; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_encoder_memusage.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_encoder_memusage.c new file mode 100644 index 00000000000..e9105758423 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_encoder_memusage.c @@ -0,0 +1,24 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file easy_encoder_memusage.c +/// \brief Easy .xz Stream encoder memory usage calculation +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "easy_preset.h" + + +extern LZMA_API(uint64_t) +lzma_easy_encoder_memusage(uint32_t preset) +{ + lzma_options_easy opt_easy; + if (lzma_easy_preset(&opt_easy, preset)) + return UINT32_MAX; + + return lzma_raw_encoder_memusage(opt_easy.filters); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_preset.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_preset.c new file mode 100644 index 00000000000..2f9859860ad --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_preset.c @@ -0,0 +1,27 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file easy_preset.c +/// \brief Preset handling for easy encoder and decoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "easy_preset.h" + + +extern bool +lzma_easy_preset(lzma_options_easy *opt_easy, uint32_t preset) +{ + if (lzma_lzma_preset(&opt_easy->opt_lzma, preset)) + return true; + + opt_easy->filters[0].id = LZMA_FILTER_LZMA2; + opt_easy->filters[0].options = &opt_easy->opt_lzma; + opt_easy->filters[1].id = LZMA_VLI_UNKNOWN; + + return false; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_preset.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_preset.h new file mode 100644 index 00000000000..382ade89406 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/easy_preset.h @@ -0,0 +1,32 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file easy_preset.h +/// \brief Preset handling for easy encoder and decoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "common.h" + + +typedef struct { + /// We need to keep the filters array available in case + /// LZMA_FULL_FLUSH is used. + lzma_filter filters[LZMA_FILTERS_MAX + 1]; + + /// Options for LZMA2 + lzma_options_lzma opt_lzma; + + // Options for more filters can be added later, so this struct + // is not ready to be put into the public API. + +} lzma_options_easy; + + +/// Set *easy to the settings given by the preset. Returns true on error, +/// false on success. +extern bool lzma_easy_preset(lzma_options_easy *easy, uint32_t preset); diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_buffer_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_buffer_decoder.c new file mode 100644 index 00000000000..4fe5d78e173 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_buffer_decoder.c @@ -0,0 +1,87 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file filter_buffer_decoder.c +/// \brief Single-call raw decoding +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "filter_decoder.h" + + +extern LZMA_API(lzma_ret) +lzma_raw_buffer_decode(const lzma_filter *filters, lzma_allocator *allocator, + const uint8_t *in, size_t *in_pos, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) +{ + // Validate what isn't validated later in filter_common.c. + if (in == NULL || in_pos == NULL || *in_pos > in_size || out == NULL + || out_pos == NULL || *out_pos > out_size) + return LZMA_PROG_ERROR; + + // Initialize the decoer. + lzma_next_coder next = LZMA_NEXT_CODER_INIT; + return_if_error(lzma_raw_decoder_init(&next, allocator, filters)); + + // Store the positions so that we can restore them if something + // goes wrong. + const size_t in_start = *in_pos; + const size_t out_start = *out_pos; + + // Do the actual decoding and free decoder's memory. + lzma_ret ret = next.code(next.coder, allocator, in, in_pos, in_size, + out, out_pos, out_size, LZMA_FINISH); + + if (ret == LZMA_STREAM_END) { + ret = LZMA_OK; + } else { + if (ret == LZMA_OK) { + // Either the input was truncated or the + // output buffer was too small. + assert(*in_pos == in_size || *out_pos == out_size); + + if (*in_pos != in_size) { + // Since input wasn't consumed completely, + // the output buffer became full and is + // too small. + ret = LZMA_BUF_ERROR; + + } else if (*out_pos != out_size) { + // Since output didn't became full, the input + // has to be truncated. + ret = LZMA_DATA_ERROR; + + } else { + // All the input was consumed and output + // buffer is full. Now we don't immediatelly + // know the reason for the error. Try + // decoding one more byte. If it succeeds, + // then the output buffer was too small. If + // we cannot get a new output byte, the input + // is truncated. + uint8_t tmp[1]; + size_t tmp_pos = 0; + (void)next.code(next.coder, allocator, + in, in_pos, in_size, + tmp, &tmp_pos, 1, LZMA_FINISH); + + if (tmp_pos == 1) + ret = LZMA_BUF_ERROR; + else + ret = LZMA_DATA_ERROR; + } + } + + // Restore the positions. + *in_pos = in_start; + *out_pos = out_start; + } + + lzma_next_end(&next, allocator); + + return ret; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_buffer_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_buffer_encoder.c new file mode 100644 index 00000000000..646e1b30374 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_buffer_encoder.c @@ -0,0 +1,54 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file filter_buffer_encoder.c +/// \brief Single-call raw encoding +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "filter_encoder.h" + + +extern LZMA_API(lzma_ret) +lzma_raw_buffer_encode(const lzma_filter *filters, lzma_allocator *allocator, + const uint8_t *in, size_t in_size, uint8_t *out, + size_t *out_pos, size_t out_size) +{ + // Validate what isn't validated later in filter_common.c. + if ((in == NULL && in_size != 0) || out == NULL + || out_pos == NULL || *out_pos > out_size) + return LZMA_PROG_ERROR; + + // Initialize the encoder + lzma_next_coder next = LZMA_NEXT_CODER_INIT; + return_if_error(lzma_raw_encoder_init(&next, allocator, filters)); + + // Store the output position so that we can restore it if + // something goes wrong. + const size_t out_start = *out_pos; + + // Do the actual encoding and free coder's memory. + size_t in_pos = 0; + lzma_ret ret = next.code(next.coder, allocator, in, &in_pos, in_size, + out, out_pos, out_size, LZMA_FINISH); + lzma_next_end(&next, allocator); + + if (ret == LZMA_STREAM_END) { + ret = LZMA_OK; + } else { + if (ret == LZMA_OK) { + // Output buffer was too small. + assert(*out_pos == out_size); + ret = LZMA_BUF_ERROR; + } + + // Restore the output position. + *out_pos = out_start; + } + + return ret; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_common.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_common.c new file mode 100644 index 00000000000..ca1196aa3e5 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_common.c @@ -0,0 +1,261 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file filter_common.c +/// \brief Filter-specific stuff common for both encoder and decoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "filter_common.h" + + +static const struct { + /// Filter ID + lzma_vli id; + + /// True if it is OK to use this filter as non-last filter in + /// the chain. + bool non_last_ok; + + /// True if it is OK to use this filter as the last filter in + /// the chain. + bool last_ok; + + /// True if the filter may change the size of the data (that is, the + /// amount of encoded output can be different than the amount of + /// uncompressed input). + bool changes_size; + +} features[] = { +#if defined (HAVE_ENCODER_LZMA1) || defined(HAVE_DECODER_LZMA1) + { + .id = LZMA_FILTER_LZMA1, + .non_last_ok = false, + .last_ok = true, + .changes_size = true, + }, +#endif +#ifdef HAVE_DECODER_LZMA2 + { + .id = LZMA_FILTER_LZMA2, + .non_last_ok = false, + .last_ok = true, + .changes_size = true, + }, +#endif +#if defined(HAVE_ENCODER_SUBBLOCK) || defined(HAVE_DECODER_SUBBLOCK) + { + .id = LZMA_FILTER_SUBBLOCK, + .non_last_ok = true, + .last_ok = true, + .changes_size = true, + }, +#endif +#ifdef HAVE_DECODER_X86 + { + .id = LZMA_FILTER_X86, + .non_last_ok = true, + .last_ok = false, + .changes_size = false, + }, +#endif +#if defined(HAVE_ENCODER_POWERPC) || defined(HAVE_DECODER_POWERPC) + { + .id = LZMA_FILTER_POWERPC, + .non_last_ok = true, + .last_ok = false, + .changes_size = false, + }, +#endif +#ifdef HAVE_DECODER_IA64 + { + .id = LZMA_FILTER_IA64, + .non_last_ok = true, + .last_ok = false, + .changes_size = false, + }, +#endif +#if defined(HAVE_ENCODER_ARM) || defined(HAVE_DECODER_ARM) + { + .id = LZMA_FILTER_ARM, + .non_last_ok = true, + .last_ok = false, + .changes_size = false, + }, +#endif +#if defined(HAVE_ENCODER_ARMTHUMB) || defined(HAVE_DECODER_ARMTHUMB) + { + .id = LZMA_FILTER_ARMTHUMB, + .non_last_ok = true, + .last_ok = false, + .changes_size = false, + }, +#endif +#if defined(HAVE_ENCODER_SPARC) || defined(HAVE_DECODER_SPARC) + { + .id = LZMA_FILTER_SPARC, + .non_last_ok = true, + .last_ok = false, + .changes_size = false, + }, +#endif +#if defined(HAVE_ENCODER_DELTA) || defined(HAVE_DECODER_DELTA) + { + .id = LZMA_FILTER_DELTA, + .non_last_ok = true, + .last_ok = false, + .changes_size = false, + }, +#endif + { + .id = LZMA_VLI_UNKNOWN + } +}; + + +static lzma_ret +validate_chain(const lzma_filter *filters, size_t *count) +{ + // There must be at least one filter. + if (filters == NULL || filters[0].id == LZMA_VLI_UNKNOWN) + return LZMA_PROG_ERROR; + + // Number of non-last filters that may change the size of the data + // significantly (that is, more than 1-2 % or so). + size_t changes_size_count = 0; + + // True if it is OK to add a new filter after the current filter. + bool non_last_ok = true; + + // True if the last filter in the given chain is actually usable as + // the last filter. Only filters that support embedding End of Payload + // Marker can be used as the last filter in the chain. + bool last_ok = false; + + size_t i = 0; + do { + size_t j; + for (j = 0; filters[i].id != features[j].id; ++j) + if (features[j].id == LZMA_VLI_UNKNOWN) + return LZMA_OPTIONS_ERROR; + + // If the previous filter in the chain cannot be a non-last + // filter, the chain is invalid. + if (!non_last_ok) + return LZMA_OPTIONS_ERROR; + + non_last_ok = features[j].non_last_ok; + last_ok = features[j].last_ok; + changes_size_count += features[j].changes_size; + + } while (filters[++i].id != LZMA_VLI_UNKNOWN); + + // There must be 1-4 filters. The last filter must be usable as + // the last filter in the chain. At maximum of three filters are + // allowed to change the size of the data. + if (i > LZMA_FILTERS_MAX || !last_ok || changes_size_count > 3) + return LZMA_OPTIONS_ERROR; + + *count = i; + return LZMA_OK; +} + + +extern lzma_ret +lzma_raw_coder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter *options, + lzma_filter_find coder_find, bool is_encoder) +{ + // Do some basic validation and get the number of filters. + size_t count; + return_if_error(validate_chain(options, &count)); + + // Set the filter functions and copy the options pointer. + lzma_filter_info filters[LZMA_FILTERS_MAX + 1]; + if (is_encoder) { + for (size_t i = 0; i < count; ++i) { + // The order of the filters is reversed in the + // encoder. It allows more efficient handling + // of the uncompressed data. + const size_t j = count - i - 1; + + const lzma_filter_coder *const fc + = coder_find(options[i].id); + if (fc == NULL || fc->init == NULL) + return LZMA_OPTIONS_ERROR; + + filters[j].init = fc->init; + filters[j].options = options[i].options; + } + } else { + for (size_t i = 0; i < count; ++i) { + const lzma_filter_coder *const fc + = coder_find(options[i].id); + if (fc == NULL || fc->init == NULL) + return LZMA_OPTIONS_ERROR; + + filters[i].init = fc->init; + filters[i].options = options[i].options; + } + } + + // Terminate the array. + filters[count].init = NULL; + + // Initialize the filters. + const lzma_ret ret = lzma_next_filter_init(next, allocator, filters); + if (ret != LZMA_OK) + lzma_next_end(next, allocator); + + return ret; +} + + +extern uint64_t +lzma_raw_coder_memusage(lzma_filter_find coder_find, + const lzma_filter *filters) +{ + // The chain has to have at least one filter. + { + size_t tmp; + if (validate_chain(filters, &tmp) != LZMA_OK) + return UINT64_MAX; + } + + uint64_t total = 0; + size_t i = 0; + + do { + const lzma_filter_coder *const fc + = coder_find(filters[i].id); + if (fc == NULL) + return UINT64_MAX; // Unsupported Filter ID + + if (fc->memusage == NULL) { + // This filter doesn't have a function to calculate + // the memory usage and validate the options. Such + // filters need only little memory, so we use 1 KiB + // as a good estimate. They also accept all possible + // options, so there's no need to worry about lack + // of validation. + total += 1024; + } else { + // Call the filter-specific memory usage calculation + // function. + const uint64_t usage + = fc->memusage(filters[i].options); + if (usage == UINT64_MAX) + return UINT64_MAX; // Invalid options + + total += usage; + } + } while (filters[++i].id != LZMA_VLI_UNKNOWN); + + // Add some fixed amount of extra. It's to compensate memory usage + // of Stream, Block etc. coders, malloc() overhead, stack etc. + return total + LZMA_MEMUSAGE_BASE; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_common.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_common.h new file mode 100644 index 00000000000..cd61fc0724f --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_common.h @@ -0,0 +1,48 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file filter_common.c +/// \brief Filter-specific stuff common for both encoder and decoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_FILTER_COMMON_H +#define LZMA_FILTER_COMMON_H + +#include "common.h" + + +/// Both lzma_filter_encoder and lzma_filter_decoder begin with these members. +typedef struct { + /// Filter ID + lzma_vli id; + + /// Initializes the filter encoder and calls lzma_next_filter_init() + /// for filters + 1. + lzma_init_function init; + + /// Calculates memory usage of the encoder. If the options are + /// invalid, UINT64_MAX is returned. + uint64_t (*memusage)(const void *options); + +} lzma_filter_coder; + + +typedef const lzma_filter_coder *(*lzma_filter_find)(lzma_vli id); + + +extern lzma_ret lzma_raw_coder_init( + lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter *filters, + lzma_filter_find coder_find, bool is_encoder); + + +extern uint64_t lzma_raw_coder_memusage(lzma_filter_find coder_find, + const lzma_filter *filters); + + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_decoder.c new file mode 100644 index 00000000000..95f77b76cf7 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_decoder.c @@ -0,0 +1,199 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file filter_decoder.c +/// \brief Filter ID mapping to filter-specific functions +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "filter_decoder.h" +#include "filter_common.h" +#include "lzma_decoder.h" +#include "lzma2_decoder.h" +#include "subblock_decoder.h" +#include "subblock_decoder_helper.h" +#include "simple_decoder.h" +#include "delta_decoder.h" + + +typedef struct { + /// Filter ID + lzma_vli id; + + /// Initializes the filter encoder and calls lzma_next_filter_init() + /// for filters + 1. + lzma_init_function init; + + /// Calculates memory usage of the encoder. If the options are + /// invalid, UINT64_MAX is returned. + uint64_t (*memusage)(const void *options); + + /// Decodes Filter Properties. + /// + /// \return - LZMA_OK: Properties decoded successfully. + /// - LZMA_OPTIONS_ERROR: Unsupported properties + /// - LZMA_MEM_ERROR: Memory allocation failed. + lzma_ret (*props_decode)(void **options, lzma_allocator *allocator, + const uint8_t *props, size_t props_size); + +} lzma_filter_decoder; + + +static const lzma_filter_decoder decoders[] = { +#ifdef HAVE_DECODER_LZMA1 + { + .id = LZMA_FILTER_LZMA1, + .init = &lzma_lzma_decoder_init, + .memusage = &lzma_lzma_decoder_memusage, + .props_decode = &lzma_lzma_props_decode, + }, +#endif +#ifdef HAVE_DECODER_LZMA2 + { + .id = LZMA_FILTER_LZMA2, + .init = &lzma_lzma2_decoder_init, + .memusage = &lzma_lzma2_decoder_memusage, + .props_decode = &lzma_lzma2_props_decode, + }, +#endif +#ifdef HAVE_DECODER_SUBBLOCK + { + .id = LZMA_FILTER_SUBBLOCK, + .init = &lzma_subblock_decoder_init, +// .memusage = &lzma_subblock_decoder_memusage, + .props_decode = NULL, + }, + { + .id = LZMA_FILTER_SUBBLOCK_HELPER, + .init = &lzma_subblock_decoder_helper_init, + .memusage = NULL, + .props_decode = NULL, + }, +#endif +#ifdef HAVE_DECODER_X86 + { + .id = LZMA_FILTER_X86, + .init = &lzma_simple_x86_decoder_init, + .memusage = NULL, + .props_decode = &lzma_simple_props_decode, + }, +#endif +#ifdef HAVE_DECODER_POWERPC + { + .id = LZMA_FILTER_POWERPC, + .init = &lzma_simple_powerpc_decoder_init, + .memusage = NULL, + .props_decode = &lzma_simple_props_decode, + }, +#endif +#ifdef HAVE_DECODER_IA64 + { + .id = LZMA_FILTER_IA64, + .init = &lzma_simple_ia64_decoder_init, + .memusage = NULL, + .props_decode = &lzma_simple_props_decode, + }, +#endif +#ifdef HAVE_DECODER_ARM + { + .id = LZMA_FILTER_ARM, + .init = &lzma_simple_arm_decoder_init, + .memusage = NULL, + .props_decode = &lzma_simple_props_decode, + }, +#endif +#ifdef HAVE_DECODER_ARMTHUMB + { + .id = LZMA_FILTER_ARMTHUMB, + .init = &lzma_simple_armthumb_decoder_init, + .memusage = NULL, + .props_decode = &lzma_simple_props_decode, + }, +#endif +#ifdef HAVE_DECODER_SPARC + { + .id = LZMA_FILTER_SPARC, + .init = &lzma_simple_sparc_decoder_init, + .memusage = NULL, + .props_decode = &lzma_simple_props_decode, + }, +#endif +#ifdef HAVE_DECODER_DELTA + { + .id = LZMA_FILTER_DELTA, + .init = &lzma_delta_decoder_init, + .memusage = &lzma_delta_coder_memusage, + .props_decode = &lzma_delta_props_decode, + }, +#endif +}; + + +static const lzma_filter_decoder * +decoder_find(lzma_vli id) +{ + for (size_t i = 0; i < ARRAY_SIZE(decoders); ++i) + if (decoders[i].id == id) + return decoders + i; + + return NULL; +} + + +extern LZMA_API(lzma_bool) +lzma_filter_decoder_is_supported(lzma_vli id) +{ + return decoder_find(id) != NULL; +} + + +extern lzma_ret +lzma_raw_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter *options) +{ + return lzma_raw_coder_init(next, allocator, + options, (lzma_filter_find)(&decoder_find), false); +} + + +extern LZMA_API(lzma_ret) +lzma_raw_decoder(lzma_stream *strm, const lzma_filter *options) +{ + lzma_next_strm_init(lzma_raw_decoder_init, strm, options); + + strm->internal->supported_actions[LZMA_RUN] = true; + strm->internal->supported_actions[LZMA_FINISH] = true; + + return LZMA_OK; +} + + +extern LZMA_API(uint64_t) +lzma_raw_decoder_memusage(const lzma_filter *filters) +{ + return lzma_raw_coder_memusage( + (lzma_filter_find)(&decoder_find), filters); +} + + +extern LZMA_API(lzma_ret) +lzma_properties_decode(lzma_filter *filter, lzma_allocator *allocator, + const uint8_t *props, size_t props_size) +{ + // Make it always NULL so that the caller can always safely free() it. + filter->options = NULL; + + const lzma_filter_decoder *const fd = decoder_find(filter->id); + if (fd == NULL) + return LZMA_OPTIONS_ERROR; + + if (fd->props_decode == NULL) + return props_size == 0 ? LZMA_OK : LZMA_OPTIONS_ERROR; + + return fd->props_decode( + &filter->options, allocator, props, props_size); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_decoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_decoder.h new file mode 100644 index 00000000000..d5c68bdd4a6 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_decoder.h @@ -0,0 +1,23 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file filter_decoder.c +/// \brief Filter ID mapping to filter-specific functions +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_FILTER_DECODER_H +#define LZMA_FILTER_DECODER_H + +#include "common.h" + + +extern lzma_ret lzma_raw_decoder_init( + lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter *options); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_encoder.c new file mode 100644 index 00000000000..d6fb82e511b --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_encoder.c @@ -0,0 +1,271 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file filter_decoder.c +/// \brief Filter ID mapping to filter-specific functions +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "filter_encoder.h" +#include "filter_common.h" +#include "lzma_encoder.h" +#include "lzma2_encoder.h" +#include "subblock_encoder.h" +#include "simple_encoder.h" +#include "delta_encoder.h" + + +typedef struct { + /// Filter ID + lzma_vli id; + + /// Initializes the filter encoder and calls lzma_next_filter_init() + /// for filters + 1. + lzma_init_function init; + + /// Calculates memory usage of the encoder. If the options are + /// invalid, UINT64_MAX is returned. + uint64_t (*memusage)(const void *options); + + /// Calculates the minimum sane size for Blocks (or other types of + /// chunks) to which the input data can be splitted to make + /// multithreaded encoding possible. If this is NULL, it is assumed + /// that the encoder is fast enough with single thread. + lzma_vli (*chunk_size)(const void *options); + + /// Tells the size of the Filter Properties field. If options are + /// invalid, UINT32_MAX is returned. If this is NULL, props_size_fixed + /// is used. + lzma_ret (*props_size_get)(uint32_t *size, const void *options); + uint32_t props_size_fixed; + + /// Encodes Filter Properties. + /// + /// \return - LZMA_OK: Properties encoded sucessfully. + /// - LZMA_OPTIONS_ERROR: Unsupported options + /// - LZMA_PROG_ERROR: Invalid options or not enough + /// output space + lzma_ret (*props_encode)(const void *options, uint8_t *out); + +} lzma_filter_encoder; + + +static const lzma_filter_encoder encoders[] = { +#ifdef HAVE_ENCODER_LZMA1 + { + .id = LZMA_FILTER_LZMA1, + .init = &lzma_lzma_encoder_init, + .memusage = &lzma_lzma_encoder_memusage, + .chunk_size = NULL, // FIXME + .props_size_get = NULL, + .props_size_fixed = 5, + .props_encode = &lzma_lzma_props_encode, + }, +#endif +#ifdef HAVE_ENCODER_LZMA2 + { + .id = LZMA_FILTER_LZMA2, + .init = &lzma_lzma2_encoder_init, + .memusage = &lzma_lzma2_encoder_memusage, + .chunk_size = NULL, // FIXME + .props_size_get = NULL, + .props_size_fixed = 1, + .props_encode = &lzma_lzma2_props_encode, + }, +#endif +#ifdef HAVE_ENCODER_SUBBLOCK + { + .id = LZMA_FILTER_SUBBLOCK, + .init = &lzma_subblock_encoder_init, +// .memusage = &lzma_subblock_encoder_memusage, + .chunk_size = NULL, + .props_size_get = NULL, + .props_size_fixed = 0, + .props_encode = NULL, + }, +#endif +#ifdef HAVE_ENCODER_X86 + { + .id = LZMA_FILTER_X86, + .init = &lzma_simple_x86_encoder_init, + .memusage = NULL, + .chunk_size = NULL, + .props_size_get = &lzma_simple_props_size, + .props_encode = &lzma_simple_props_encode, + }, +#endif +#ifdef HAVE_ENCODER_POWERPC + { + .id = LZMA_FILTER_POWERPC, + .init = &lzma_simple_powerpc_encoder_init, + .memusage = NULL, + .chunk_size = NULL, + .props_size_get = &lzma_simple_props_size, + .props_encode = &lzma_simple_props_encode, + }, +#endif +#ifdef HAVE_ENCODER_IA64 + { + .id = LZMA_FILTER_IA64, + .init = &lzma_simple_ia64_encoder_init, + .memusage = NULL, + .chunk_size = NULL, + .props_size_get = &lzma_simple_props_size, + .props_encode = &lzma_simple_props_encode, + }, +#endif +#ifdef HAVE_ENCODER_ARM + { + .id = LZMA_FILTER_ARM, + .init = &lzma_simple_arm_encoder_init, + .memusage = NULL, + .chunk_size = NULL, + .props_size_get = &lzma_simple_props_size, + .props_encode = &lzma_simple_props_encode, + }, +#endif +#ifdef HAVE_ENCODER_ARMTHUMB + { + .id = LZMA_FILTER_ARMTHUMB, + .init = &lzma_simple_armthumb_encoder_init, + .memusage = NULL, + .chunk_size = NULL, + .props_size_get = &lzma_simple_props_size, + .props_encode = &lzma_simple_props_encode, + }, +#endif +#ifdef HAVE_ENCODER_SPARC + { + .id = LZMA_FILTER_SPARC, + .init = &lzma_simple_sparc_encoder_init, + .memusage = NULL, + .chunk_size = NULL, + .props_size_get = &lzma_simple_props_size, + .props_encode = &lzma_simple_props_encode, + }, +#endif +#ifdef HAVE_ENCODER_DELTA + { + .id = LZMA_FILTER_DELTA, + .init = &lzma_delta_encoder_init, + .memusage = &lzma_delta_coder_memusage, + .chunk_size = NULL, + .props_size_get = NULL, + .props_size_fixed = 1, + .props_encode = &lzma_delta_props_encode, + }, +#endif +}; + + +static const lzma_filter_encoder * +encoder_find(lzma_vli id) +{ + for (size_t i = 0; i < ARRAY_SIZE(encoders); ++i) + if (encoders[i].id == id) + return encoders + i; + + return NULL; +} + + +extern LZMA_API(lzma_bool) +lzma_filter_encoder_is_supported(lzma_vli id) +{ + return encoder_find(id) != NULL; +} + + +extern lzma_ret +lzma_raw_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter *options) +{ + return lzma_raw_coder_init(next, allocator, + options, (lzma_filter_find)(&encoder_find), true); +} + + +extern LZMA_API(lzma_ret) +lzma_raw_encoder(lzma_stream *strm, const lzma_filter *options) +{ + lzma_next_strm_init(lzma_raw_coder_init, strm, options, + (lzma_filter_find)(&encoder_find), true); + + strm->internal->supported_actions[LZMA_RUN] = true; + strm->internal->supported_actions[LZMA_SYNC_FLUSH] = true; + strm->internal->supported_actions[LZMA_FINISH] = true; + + return LZMA_OK; +} + + +extern LZMA_API(uint64_t) +lzma_raw_encoder_memusage(const lzma_filter *filters) +{ + return lzma_raw_coder_memusage( + (lzma_filter_find)(&encoder_find), filters); +} + + +extern LZMA_API(lzma_vli) +lzma_chunk_size(const lzma_filter *filters) +{ + lzma_vli max = 0; + + for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) { + const lzma_filter_encoder *const fe + = encoder_find(filters[i].id); + if (fe->chunk_size != NULL) { + const lzma_vli size + = fe->chunk_size(filters[i].options); + if (size == LZMA_VLI_UNKNOWN) + return LZMA_VLI_UNKNOWN; + + if (size > max) + max = size; + } + } + + return max; +} + + +extern LZMA_API(lzma_ret) +lzma_properties_size(uint32_t *size, const lzma_filter *filter) +{ + const lzma_filter_encoder *const fe = encoder_find(filter->id); + if (fe == NULL) { + // Unknown filter - if the Filter ID is a proper VLI, + // return LZMA_OPTIONS_ERROR instead of LZMA_PROG_ERROR, + // because it's possible that we just don't have support + // compiled in for the requested filter. + return filter->id <= LZMA_VLI_MAX + ? LZMA_OPTIONS_ERROR : LZMA_PROG_ERROR; + } + + if (fe->props_size_get == NULL) { + // No props_size_get() function, use props_size_fixed. + *size = fe->props_size_fixed; + return LZMA_OK; + } + + return fe->props_size_get(size, filter->options); +} + + +extern LZMA_API(lzma_ret) +lzma_properties_encode(const lzma_filter *filter, uint8_t *props) +{ + const lzma_filter_encoder *const fe = encoder_find(filter->id); + if (fe == NULL) + return LZMA_PROG_ERROR; + + if (fe->props_encode == NULL) + return LZMA_OK; + + return fe->props_encode(filter->options, props); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_encoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_encoder.h new file mode 100644 index 00000000000..5b65cd305a9 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_encoder.h @@ -0,0 +1,27 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file filter_encoder.c +/// \brief Filter ID mapping to filter-specific functions +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_FILTER_ENCODER_H +#define LZMA_FILTER_ENCODER_H + +#include "common.h" + + +// FIXME !!! Public API +extern lzma_vli lzma_chunk_size(const lzma_filter *filters); + + +extern lzma_ret lzma_raw_encoder_init( + lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter *options); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_flags_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_flags_decoder.c new file mode 100644 index 00000000000..caae10ce79a --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_flags_decoder.c @@ -0,0 +1,46 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file filter_flags_decoder.c +/// \brief Decodes a Filter Flags field +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "filter_decoder.h" + + +extern LZMA_API(lzma_ret) +lzma_filter_flags_decode( + lzma_filter *filter, lzma_allocator *allocator, + const uint8_t *in, size_t *in_pos, size_t in_size) +{ + // Set the pointer to NULL so the caller can always safely free it. + filter->options = NULL; + + // Filter ID + return_if_error(lzma_vli_decode(&filter->id, NULL, + in, in_pos, in_size)); + + if (filter->id >= LZMA_FILTER_RESERVED_START) + return LZMA_DATA_ERROR; + + // Size of Properties + lzma_vli props_size; + return_if_error(lzma_vli_decode(&props_size, NULL, + in, in_pos, in_size)); + + // Filter Properties + if (in_size - *in_pos < props_size) + return LZMA_DATA_ERROR; + + const lzma_ret ret = lzma_properties_decode( + filter, allocator, in + *in_pos, props_size); + + *in_pos += props_size; + + return ret; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_flags_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_flags_encoder.c new file mode 100644 index 00000000000..d110566de99 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/filter_flags_encoder.c @@ -0,0 +1,56 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file filter_flags_encoder.c +/// \brief Decodes a Filter Flags field +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "filter_encoder.h" + + +extern LZMA_API(lzma_ret) +lzma_filter_flags_size(uint32_t *size, const lzma_filter *filter) +{ + if (filter->id >= LZMA_FILTER_RESERVED_START) + return LZMA_PROG_ERROR; + + return_if_error(lzma_properties_size(size, filter)); + + *size += lzma_vli_size(filter->id) + lzma_vli_size(*size); + + return LZMA_OK; +} + + +extern LZMA_API(lzma_ret) +lzma_filter_flags_encode(const lzma_filter *filter, + uint8_t *out, size_t *out_pos, size_t out_size) +{ + // Filter ID + if (filter->id >= LZMA_FILTER_RESERVED_START) + return LZMA_PROG_ERROR; + + return_if_error(lzma_vli_encode(filter->id, NULL, + out, out_pos, out_size)); + + // Size of Properties + uint32_t props_size; + return_if_error(lzma_properties_size(&props_size, filter)); + return_if_error(lzma_vli_encode(props_size, NULL, + out, out_pos, out_size)); + + // Filter Properties + if (out_size - *out_pos < props_size) + return LZMA_PROG_ERROR; + + return_if_error(lzma_properties_encode(filter, out + *out_pos)); + + *out_pos += props_size; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index.c new file mode 100644 index 00000000000..46d9ff6eb12 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index.c @@ -0,0 +1,776 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file index.c +/// \brief Handling of Index +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "index.h" + + +/// Number of Records to allocate at once in the unrolled list. +#define INDEX_GROUP_SIZE 256 + + +typedef struct lzma_index_group_s lzma_index_group; +struct lzma_index_group_s { + /// Previous group + lzma_index_group *prev; + + /// Next group + lzma_index_group *next; + + /// Index of the last Record in this group + size_t last; + + /// Unpadded Size fields as special cumulative sum relative to the + /// beginning of the group. It's special in sense that the previous + /// value is rounded up the next multiple of four with before + /// calculating the new value. The total encoded size of the Blocks + /// in the group is unpadded_sums[last] rounded up to the next + /// multiple of four. + /// + /// For example, if the Unpadded Sizes are 39, 57, and 81, the stored + /// values are 39, 97 (40 + 57), and 181 (100 + 181). The total + /// encoded size of these Blocks is 184. + /// + /// This encoding is nice from point of view of lzma_index_locate(). + lzma_vli unpadded_sums[INDEX_GROUP_SIZE]; + + /// Uncompressed Size fields as cumulative sum relative to the + /// beginning of the group. The uncompressed size of the group is + /// uncompressed_sums[last]. + lzma_vli uncompressed_sums[INDEX_GROUP_SIZE]; + + /// True if the Record is padding + bool paddings[INDEX_GROUP_SIZE]; +}; + + +struct lzma_index_s { + /// Total size of the Blocks and padding + lzma_vli total_size; + + /// Uncompressed size of the Stream + lzma_vli uncompressed_size; + + /// Number of non-padding records. This is needed for Index encoder. + lzma_vli count; + + /// Size of the List of Records field; this is updated every time + /// a new non-padding Record is added. + lzma_vli index_list_size; + + /// First group of Records + lzma_index_group *head; + + /// Last group of Records + lzma_index_group *tail; + + /// Tracking the read position + struct { + /// Group where the current read position is. + lzma_index_group *group; + + /// The most recently read Record in *group + size_t record; + + /// Uncompressed offset of the beginning of *group relative + /// to the beginning of the Stream + lzma_vli uncompressed_offset; + + /// Compressed offset of the beginning of *group relative + /// to the beginning of the Stream + lzma_vli stream_offset; + } current; + + /// Information about earlier Indexes when multiple Indexes have + /// been combined. + struct { + /// Sum of the Record counts of the all but the last Stream. + lzma_vli count; + + /// Sum of the List of Records fields of all but the last + /// Stream. This is needed when a new Index is concatenated + /// to this lzma_index structure. + lzma_vli index_list_size; + + /// Total size of all but the last Stream and all Stream + /// Padding fields. + lzma_vli streams_size; + } old; +}; + + +extern LZMA_API(lzma_vli) +lzma_index_memusage(lzma_vli count) +{ + if (count > LZMA_VLI_MAX) + return UINT64_MAX; + + return sizeof(lzma_index) + (count + INDEX_GROUP_SIZE - 1) + / INDEX_GROUP_SIZE * sizeof(lzma_index_group); +} + + +static void +free_index_list(lzma_index *i, lzma_allocator *allocator) +{ + lzma_index_group *g = i->head; + + while (g != NULL) { + lzma_index_group *tmp = g->next; + lzma_free(g, allocator); + g = tmp; + } + + return; +} + + +extern LZMA_API(lzma_index *) +lzma_index_init(lzma_index *i, lzma_allocator *allocator) +{ + if (i == NULL) { + i = lzma_alloc(sizeof(lzma_index), allocator); + if (i == NULL) + return NULL; + } else { + free_index_list(i, allocator); + } + + i->total_size = 0; + i->uncompressed_size = 0; + i->count = 0; + i->index_list_size = 0; + i->head = NULL; + i->tail = NULL; + i->current.group = NULL; + i->old.count = 0; + i->old.index_list_size = 0; + i->old.streams_size = 0; + + return i; +} + + +extern LZMA_API(void) +lzma_index_end(lzma_index *i, lzma_allocator *allocator) +{ + if (i != NULL) { + free_index_list(i, allocator); + lzma_free(i, allocator); + } + + return; +} + + +extern LZMA_API(lzma_vli) +lzma_index_count(const lzma_index *i) +{ + return i->count; +} + + +extern LZMA_API(lzma_vli) +lzma_index_size(const lzma_index *i) +{ + return index_size(i->count, i->index_list_size); +} + + +extern LZMA_API(lzma_vli) +lzma_index_total_size(const lzma_index *i) +{ + return i->total_size; +} + + +extern LZMA_API(lzma_vli) +lzma_index_stream_size(const lzma_index *i) +{ + // Stream Header + Blocks + Index + Stream Footer + return LZMA_STREAM_HEADER_SIZE + i->total_size + + index_size(i->count, i->index_list_size) + + LZMA_STREAM_HEADER_SIZE; +} + + +extern LZMA_API(lzma_vli) +lzma_index_file_size(const lzma_index *i) +{ + // If multiple Streams are concatenated, the Stream Header, Index, + // and Stream Footer fields of all but the last Stream are already + // included in old.streams_size. Thus, we need to calculate only the + // size of the last Index, not all Indexes. + return i->old.streams_size + LZMA_STREAM_HEADER_SIZE + i->total_size + + index_size(i->count - i->old.count, + i->index_list_size - i->old.index_list_size) + + LZMA_STREAM_HEADER_SIZE; +} + + +extern LZMA_API(lzma_vli) +lzma_index_uncompressed_size(const lzma_index *i) +{ + return i->uncompressed_size; +} + + +extern uint32_t +lzma_index_padding_size(const lzma_index *i) +{ + return (LZMA_VLI_C(4) + - index_size_unpadded(i->count, i->index_list_size)) & 3; +} + + +/// Appends a new Record to the Index. If needed, this allocates a new +/// Record group. +static lzma_ret +index_append_real(lzma_index *i, lzma_allocator *allocator, + lzma_vli unpadded_size, lzma_vli uncompressed_size, + bool is_padding) +{ + // Add the new record. + if (i->tail == NULL || i->tail->last == INDEX_GROUP_SIZE - 1) { + // Allocate a new group. + lzma_index_group *g = lzma_alloc(sizeof(lzma_index_group), + allocator); + if (g == NULL) + return LZMA_MEM_ERROR; + + // Initialize the group and set its first record. + g->prev = i->tail; + g->next = NULL; + g->last = 0; + g->unpadded_sums[0] = unpadded_size; + g->uncompressed_sums[0] = uncompressed_size; + g->paddings[0] = is_padding; + + // If this is the first group, make it the head. + if (i->head == NULL) + i->head = g; + else + i->tail->next = g; + + // Make it the new tail. + i->tail = g; + + } else { + // i->tail has space left for at least one record. + i->tail->unpadded_sums[i->tail->last + 1] + = unpadded_size + vli_ceil4( + i->tail->unpadded_sums[i->tail->last]); + i->tail->uncompressed_sums[i->tail->last + 1] + = i->tail->uncompressed_sums[i->tail->last] + + uncompressed_size; + i->tail->paddings[i->tail->last + 1] = is_padding; + ++i->tail->last; + } + + return LZMA_OK; +} + + +extern LZMA_API(lzma_ret) +lzma_index_append(lzma_index *i, lzma_allocator *allocator, + lzma_vli unpadded_size, lzma_vli uncompressed_size) +{ + if (unpadded_size < UNPADDED_SIZE_MIN + || unpadded_size > UNPADDED_SIZE_MAX + || uncompressed_size > LZMA_VLI_MAX) + return LZMA_PROG_ERROR; + + // This looks a bit ugly. We want to first validate that the Index + // and Stream stay in valid limits after adding this Record. After + // validating, we may need to allocate a new lzma_index_group (it's + // slightly more correct to validate before allocating, YMMV). + lzma_ret ret; + + // First update the overall info so we can validate it. + const lzma_vli index_list_size_add = lzma_vli_size(unpadded_size) + + lzma_vli_size(uncompressed_size); + + const lzma_vli total_size = vli_ceil4(unpadded_size); + + i->total_size += total_size; + i->uncompressed_size += uncompressed_size; + ++i->count; + i->index_list_size += index_list_size_add; + + if (i->total_size > LZMA_VLI_MAX + || i->uncompressed_size > LZMA_VLI_MAX + || lzma_index_size(i) > LZMA_BACKWARD_SIZE_MAX + || lzma_index_file_size(i) > LZMA_VLI_MAX) + ret = LZMA_DATA_ERROR; // Would grow past the limits. + else + ret = index_append_real(i, allocator, unpadded_size, + uncompressed_size, false); + + if (ret != LZMA_OK) { + // Something went wrong. Undo the updates. + i->total_size -= total_size; + i->uncompressed_size -= uncompressed_size; + --i->count; + i->index_list_size -= index_list_size_add; + } + + return ret; +} + + +/// Initialize i->current to point to the first Record. +static bool +init_current(lzma_index *i) +{ + if (i->head == NULL) { + assert(i->count == 0); + return true; + } + + assert(i->count > 0); + + i->current.group = i->head; + i->current.record = 0; + i->current.stream_offset = LZMA_STREAM_HEADER_SIZE; + i->current.uncompressed_offset = 0; + + return false; +} + + +/// Go backward to the previous group. +static void +previous_group(lzma_index *i) +{ + assert(i->current.group->prev != NULL); + + // Go to the previous group first. + i->current.group = i->current.group->prev; + i->current.record = i->current.group->last; + + // Then update the offsets. + i->current.stream_offset -= vli_ceil4(i->current.group->unpadded_sums[ + i->current.group->last]); + i->current.uncompressed_offset -= i->current.group->uncompressed_sums[ + i->current.group->last]; + + return; +} + + +/// Go forward to the next group. +static void +next_group(lzma_index *i) +{ + assert(i->current.group->next != NULL); + + // Update the offsets first. + i->current.stream_offset += vli_ceil4(i->current.group->unpadded_sums[ + i->current.group->last]); + i->current.uncompressed_offset += i->current.group + ->uncompressed_sums[i->current.group->last]; + + // Then go to the next group. + i->current.record = 0; + i->current.group = i->current.group->next; + + return; +} + + +/// Set *info from i->current. +static void +set_info(const lzma_index *i, lzma_index_record *info) +{ + // First copy the cumulative sizes from the current Record of the + // current group. + info->unpadded_size + = i->current.group->unpadded_sums[i->current.record]; + info->total_size = vli_ceil4(info->unpadded_size); + info->uncompressed_size = i->current.group->uncompressed_sums[ + i->current.record]; + + // Copy the start offsets of this group. + info->stream_offset = i->current.stream_offset; + info->uncompressed_offset = i->current.uncompressed_offset; + + // If it's not the first Record in this group, we need to do some + // adjustements. + if (i->current.record > 0) { + // Since the _sums[] are cumulative, we substract the sums of + // the previous Record to get the sizes of the current Record, + // and add the sums of the previous Record to the offsets. + // With unpadded_sums[] we need to take into account that it + // uses a bit weird way to do the cumulative summing + const lzma_vli total_sum + = vli_ceil4(i->current.group->unpadded_sums[ + i->current.record - 1]); + + const lzma_vli uncompressed_sum = i->current.group + ->uncompressed_sums[i->current.record - 1]; + + info->total_size -= total_sum; + info->unpadded_size -= total_sum; + info->uncompressed_size -= uncompressed_sum; + + info->stream_offset += total_sum; + info->uncompressed_offset += uncompressed_sum; + } + + return; +} + + +extern LZMA_API(lzma_bool) +lzma_index_read(lzma_index *i, lzma_index_record *info) +{ + if (i->current.group == NULL) { + // We are at the beginning of the Record list. Set up + // i->current point at the first Record. Return if there + // are no Records. + if (init_current(i)) + return true; + } else do { + // Try to go the next Record. + if (i->current.record < i->current.group->last) + ++i->current.record; + else if (i->current.group->next == NULL) + return true; + else + next_group(i); + } while (i->current.group->paddings[i->current.record]); + + // We found a new Record. Set the information to *info. + set_info(i, info); + + return false; +} + + +extern LZMA_API(void) +lzma_index_rewind(lzma_index *i) +{ + i->current.group = NULL; + return; +} + + +extern LZMA_API(lzma_bool) +lzma_index_locate(lzma_index *i, lzma_index_record *info, lzma_vli target) +{ + // Check if it is possible to fullfill the request. + if (target >= i->uncompressed_size) + return true; + + // Now we know that we will have an answer. Initialize the current + // read position if needed. + if (i->current.group == NULL && init_current(i)) + return true; + + // Locate the group where the wanted Block is. First search forward. + while (i->current.uncompressed_offset <= target) { + // If the first uncompressed byte of the next group is past + // the target offset, it has to be this or an earlier group. + if (i->current.uncompressed_offset + i->current.group + ->uncompressed_sums[i->current.group->last] + > target) + break; + + // Go forward to the next group. + next_group(i); + } + + // Then search backward. + while (i->current.uncompressed_offset > target) + previous_group(i); + + // Now the target Block is somewhere in i->current.group. Offsets + // in groups are relative to the beginning of the group, thus + // we must adjust the target before starting the search loop. + assert(target >= i->current.uncompressed_offset); + target -= i->current.uncompressed_offset; + + // Use binary search to locate the exact Record. It is the first + // Record whose uncompressed_sums[] value is greater than target. + // This is because we want the rightmost Record that fullfills the + // search criterion. It is possible that there are empty Blocks or + // padding, we don't want to return them. + size_t left = 0; + size_t right = i->current.group->last; + + while (left < right) { + const size_t pos = left + (right - left) / 2; + if (i->current.group->uncompressed_sums[pos] <= target) + left = pos + 1; + else + right = pos; + } + + i->current.record = left; + +#ifndef NDEBUG + // The found Record must not be padding or have zero uncompressed size. + assert(!i->current.group->paddings[i->current.record]); + + if (i->current.record == 0) + assert(i->current.group->uncompressed_sums[0] > 0); + else + assert(i->current.group->uncompressed_sums[i->current.record] + - i->current.group->uncompressed_sums[ + i->current.record - 1] > 0); +#endif + + set_info(i, info); + + return false; +} + + +extern LZMA_API(lzma_ret) +lzma_index_cat(lzma_index *restrict dest, lzma_index *restrict src, + lzma_allocator *allocator, lzma_vli padding) +{ + if (dest == NULL || src == NULL || dest == src + || padding > LZMA_VLI_MAX) + return LZMA_PROG_ERROR; + + // Check that the combined size of the Indexes stays within limits. + { + const lzma_vli dest_size = index_size_unpadded( + dest->count, dest->index_list_size); + const lzma_vli src_size = index_size_unpadded( + src->count, src->index_list_size); + if (vli_ceil4(dest_size + src_size) > LZMA_BACKWARD_SIZE_MAX) + return LZMA_DATA_ERROR; + } + + // Check that the combined size of the "files" (combined total + // encoded sizes) stays within limits. + { + const lzma_vli dest_size = lzma_index_file_size(dest); + const lzma_vli src_size = lzma_index_file_size(src); + if (dest_size + src_size > LZMA_VLI_MAX + || dest_size + src_size + padding + > LZMA_VLI_MAX) + return LZMA_DATA_ERROR; + } + + // Add a padding Record to take into account the size of + // Index + Stream Footer + Stream Padding + Stream Header. + // + // NOTE: This cannot overflow, because Index Size is always + // far smaller than LZMA_VLI_MAX, and adding two VLIs + // (Index Size and padding) doesn't overflow. + padding += index_size(dest->count - dest->old.count, + dest->index_list_size + - dest->old.index_list_size) + + LZMA_STREAM_HEADER_SIZE * 2; + + // While the above cannot overflow, but it may become an invalid VLI. + if (padding > LZMA_VLI_MAX) + return LZMA_DATA_ERROR; + + // Add the padding Record. + { + lzma_ret ret; + + // First update the info so we can validate it. + dest->old.streams_size += padding; + + if (dest->old.streams_size > LZMA_VLI_MAX + || lzma_index_file_size(dest) > LZMA_VLI_MAX) + ret = LZMA_DATA_ERROR; // Would grow past the limits. + else + ret = index_append_real(dest, allocator, + padding, 0, true); + + // If something went wrong, undo the updated value and return + // the error. + if (ret != LZMA_OK) { + dest->old.streams_size -= padding; + return ret; + } + } + + // Avoid wasting lots of memory if src->head has only a few records + // that fit into dest->tail. That is, combine two groups if possible. + // + // NOTE: We know that dest->tail != NULL since we just appended + // a padding Record. But we don't know about src->head. + if (src->head != NULL && src->head->last + 1 + <= INDEX_GROUP_SIZE - dest->tail->last - 1) { + // Copy the first Record. + dest->tail->unpadded_sums[dest->tail->last + 1] + = vli_ceil4(dest->tail->unpadded_sums[ + dest->tail->last]) + + src->head->unpadded_sums[0]; + + dest->tail->uncompressed_sums[dest->tail->last + 1] + = dest->tail->uncompressed_sums[dest->tail->last] + + src->head->uncompressed_sums[0]; + + dest->tail->paddings[dest->tail->last + 1] + = src->head->paddings[0]; + + ++dest->tail->last; + + // Copy the rest. + for (size_t i = 1; i < src->head->last; ++i) { + dest->tail->unpadded_sums[dest->tail->last + 1] + = vli_ceil4(dest->tail->unpadded_sums[ + dest->tail->last]) + + src->head->unpadded_sums[i + 1] + - src->head->unpadded_sums[i]; + + dest->tail->uncompressed_sums[dest->tail->last + 1] + = dest->tail->uncompressed_sums[ + dest->tail->last] + + src->head->uncompressed_sums[i + 1] + - src->head->uncompressed_sums[i]; + + dest->tail->paddings[dest->tail->last + 1] + = src->head->paddings[i + 1]; + + ++dest->tail->last; + } + + // Free the head group of *src. Don't bother updating prev + // pointers since those won't be used for anything before + // we deallocate the whole *src structure. + lzma_index_group *tmp = src->head; + src->head = src->head->next; + lzma_free(tmp, allocator); + } + + // If there are groups left in *src, join them as is. Note that if we + // are combining already combined Indexes, src->head can be non-NULL + // even if we just combined the old src->head to dest->tail. + if (src->head != NULL) { + src->head->prev = dest->tail; + dest->tail->next = src->head; + dest->tail = src->tail; + } + + // Update information about earlier Indexes. Only the last Index + // from *src won't be counted in dest->old. The last Index is left + // open and can be even appended with lzma_index_append(). + dest->old.count = dest->count + src->old.count; + dest->old.index_list_size + = dest->index_list_size + src->old.index_list_size; + dest->old.streams_size += src->old.streams_size; + + // Update overall information. + dest->total_size += src->total_size; + dest->uncompressed_size += src->uncompressed_size; + dest->count += src->count; + dest->index_list_size += src->index_list_size; + + // *src has nothing left but the base structure. + lzma_free(src, allocator); + + return LZMA_OK; +} + + +extern LZMA_API(lzma_index *) +lzma_index_dup(const lzma_index *src, lzma_allocator *allocator) +{ + lzma_index *dest = lzma_alloc(sizeof(lzma_index), allocator); + if (dest == NULL) + return NULL; + + // Copy the base structure except the pointers. + *dest = *src; + dest->head = NULL; + dest->tail = NULL; + dest->current.group = NULL; + + // Copy the Records. + const lzma_index_group *src_group = src->head; + while (src_group != NULL) { + // Allocate a new group. + lzma_index_group *dest_group = lzma_alloc( + sizeof(lzma_index_group), allocator); + if (dest_group == NULL) { + lzma_index_end(dest, allocator); + return NULL; + } + + // Set the pointers. + dest_group->prev = dest->tail; + dest_group->next = NULL; + + if (dest->head == NULL) + dest->head = dest_group; + else + dest->tail->next = dest_group; + + dest->tail = dest_group; + + dest_group->last = src_group->last; + + // Copy the arrays so that we don't read uninitialized memory. + const size_t count = src_group->last + 1; + memcpy(dest_group->unpadded_sums, src_group->unpadded_sums, + sizeof(lzma_vli) * count); + memcpy(dest_group->uncompressed_sums, + src_group->uncompressed_sums, + sizeof(lzma_vli) * count); + memcpy(dest_group->paddings, src_group->paddings, + sizeof(bool) * count); + + // Copy also the read position. + if (src_group == src->current.group) + dest->current.group = dest->tail; + + src_group = src_group->next; + } + + return dest; +} + + +extern LZMA_API(lzma_bool) +lzma_index_equal(const lzma_index *a, const lzma_index *b) +{ + // No point to compare more if the pointers are the same. + if (a == b) + return true; + + // Compare the basic properties. + if (a->total_size != b->total_size + || a->uncompressed_size != b->uncompressed_size + || a->index_list_size != b->index_list_size + || a->count != b->count) + return false; + + // Compare the Records. + const lzma_index_group *ag = a->head; + const lzma_index_group *bg = b->head; + while (ag != NULL && bg != NULL) { + const size_t count = ag->last + 1; + if (ag->last != bg->last + || memcmp(ag->unpadded_sums, + bg->unpadded_sums, + sizeof(lzma_vli) * count) != 0 + || memcmp(ag->uncompressed_sums, + bg->uncompressed_sums, + sizeof(lzma_vli) * count) != 0 + || memcmp(ag->paddings, bg->paddings, + sizeof(bool) * count) != 0) + return false; + + ag = ag->next; + bg = bg->next; + } + + return ag == NULL && bg == NULL; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index.h new file mode 100644 index 00000000000..9f177b1b3d4 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index.h @@ -0,0 +1,67 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file index.h +/// \brief Handling of Index +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_INDEX_H +#define LZMA_INDEX_H + +#include "common.h" + + +/// Minimum Unpadded Size +#define UNPADDED_SIZE_MIN LZMA_VLI_C(5) + +/// Maximum Unpadded Size +#define UNPADDED_SIZE_MAX (LZMA_VLI_MAX & ~LZMA_VLI_C(3)) + + +/// Get the size of the Index Padding field. This is needed by Index encoder +/// and decoder, but applications should have no use for this. +extern uint32_t lzma_index_padding_size(const lzma_index *i); + + +/// Round the variable-length integer to the next multiple of four. +static inline lzma_vli +vli_ceil4(lzma_vli vli) +{ + assert(vli <= LZMA_VLI_MAX); + return (vli + 3) & ~LZMA_VLI_C(3); +} + + +/// Calculate the size of the Index field excluding Index Padding +static inline lzma_vli +index_size_unpadded(lzma_vli count, lzma_vli index_list_size) +{ + // Index Indicator + Number of Records + List of Records + CRC32 + return 1 + lzma_vli_size(count) + index_list_size + 4; +} + + +/// Calculate the size of the Index field including Index Padding +static inline lzma_vli +index_size(lzma_vli count, lzma_vli index_list_size) +{ + return vli_ceil4(index_size_unpadded(count, index_list_size)); +} + + +/// Calculate the total size of the Stream +static inline lzma_vli +index_stream_size(lzma_vli blocks_size, + lzma_vli count, lzma_vli index_list_size) +{ + return LZMA_STREAM_HEADER_SIZE + blocks_size + + index_size(count, index_list_size) + + LZMA_STREAM_HEADER_SIZE; +} + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_decoder.c new file mode 100644 index 00000000000..51e9de38ed9 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_decoder.c @@ -0,0 +1,323 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file index_decoder.c +/// \brief Decodes the Index field +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "index.h" +#include "check.h" + + +struct lzma_coder_s { + enum { + SEQ_INDICATOR, + SEQ_COUNT, + SEQ_MEMUSAGE, + SEQ_UNPADDED, + SEQ_UNCOMPRESSED, + SEQ_PADDING_INIT, + SEQ_PADDING, + SEQ_CRC32, + } sequence; + + /// Memory usage limit + uint64_t memlimit; + + /// Target Index + lzma_index *index; + + /// Number of Records left to decode. + lzma_vli count; + + /// The most recent Unpadded Size field + lzma_vli unpadded_size; + + /// The most recent Uncompressed Size field + lzma_vli uncompressed_size; + + /// Position in integers + size_t pos; + + /// CRC32 of the List of Records field + uint32_t crc32; +}; + + +static lzma_ret +index_decode(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out lzma_attribute((unused)), + size_t *restrict out_pos lzma_attribute((unused)), + size_t out_size lzma_attribute((unused)), + lzma_action action lzma_attribute((unused))) +{ + // Similar optimization as in index_encoder.c + const size_t in_start = *in_pos; + lzma_ret ret = LZMA_OK; + + while (*in_pos < in_size) + switch (coder->sequence) { + case SEQ_INDICATOR: + // Return LZMA_DATA_ERROR instead of e.g. LZMA_PROG_ERROR or + // LZMA_FORMAT_ERROR, because a typical usage case for Index + // decoder is when parsing the Stream backwards. If seeking + // backward from the Stream Footer gives us something that + // doesn't begin with Index Indicator, the file is considered + // corrupt, not "programming error" or "unrecognized file + // format". One could argue that the application should + // verify the Index Indicator before trying to decode the + // Index, but well, I suppose it is simpler this way. + if (in[(*in_pos)++] != 0x00) + return LZMA_DATA_ERROR; + + coder->sequence = SEQ_COUNT; + break; + + case SEQ_COUNT: + ret = lzma_vli_decode(&coder->count, &coder->pos, + in, in_pos, in_size); + if (ret != LZMA_STREAM_END) + goto out; + + coder->pos = 0; + coder->sequence = SEQ_MEMUSAGE; + + // Fall through + + case SEQ_MEMUSAGE: + if (lzma_index_memusage(coder->count) > coder->memlimit) { + ret = LZMA_MEMLIMIT_ERROR; + goto out; + } + + ret = LZMA_OK; + coder->sequence = coder->count == 0 + ? SEQ_PADDING_INIT : SEQ_UNPADDED; + break; + + case SEQ_UNPADDED: + case SEQ_UNCOMPRESSED: { + lzma_vli *size = coder->sequence == SEQ_UNPADDED + ? &coder->unpadded_size + : &coder->uncompressed_size; + + ret = lzma_vli_decode(size, &coder->pos, + in, in_pos, in_size); + if (ret != LZMA_STREAM_END) + goto out; + + ret = LZMA_OK; + coder->pos = 0; + + if (coder->sequence == SEQ_UNPADDED) { + // Validate that encoded Unpadded Size isn't too small + // or too big. + if (coder->unpadded_size < UNPADDED_SIZE_MIN + || coder->unpadded_size + > UNPADDED_SIZE_MAX) + return LZMA_DATA_ERROR; + + coder->sequence = SEQ_UNCOMPRESSED; + } else { + // Add the decoded Record to the Index. + return_if_error(lzma_index_append( + coder->index, allocator, + coder->unpadded_size, + coder->uncompressed_size)); + + // Check if this was the last Record. + coder->sequence = --coder->count == 0 + ? SEQ_PADDING_INIT + : SEQ_UNPADDED; + } + + break; + } + + case SEQ_PADDING_INIT: + coder->pos = lzma_index_padding_size(coder->index); + coder->sequence = SEQ_PADDING; + + // Fall through + + case SEQ_PADDING: + if (coder->pos > 0) { + --coder->pos; + if (in[(*in_pos)++] != 0x00) + return LZMA_DATA_ERROR; + + break; + } + + // Finish the CRC32 calculation. + coder->crc32 = lzma_crc32(in + in_start, + *in_pos - in_start, coder->crc32); + + coder->sequence = SEQ_CRC32; + + // Fall through + + case SEQ_CRC32: + do { + if (*in_pos == in_size) + return LZMA_OK; + + if (((coder->crc32 >> (coder->pos * 8)) & 0xFF) + != in[(*in_pos)++]) + return LZMA_DATA_ERROR; + + } while (++coder->pos < 4); + + // Make index NULL so we don't free it unintentionally. + coder->index = NULL; + + return LZMA_STREAM_END; + + default: + assert(0); + return LZMA_PROG_ERROR; + } + +out: + // Update the CRC32, + coder->crc32 = lzma_crc32(in + in_start, + *in_pos - in_start, coder->crc32); + + return ret; +} + + +static void +index_decoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_index_end(coder->index, allocator); + lzma_free(coder, allocator); + return; +} + + +static lzma_ret +index_decoder_memconfig(lzma_coder *coder, uint64_t *memusage, + uint64_t *old_memlimit, uint64_t new_memlimit) +{ + *memusage = lzma_index_memusage(coder->count); + + if (new_memlimit != 0 && new_memlimit < *memusage) + return LZMA_MEMLIMIT_ERROR; + + *old_memlimit = coder->memlimit; + coder->memlimit = new_memlimit; + + return LZMA_OK; +} + + +static lzma_ret +index_decoder_reset(lzma_coder *coder, lzma_allocator *allocator, + lzma_index **i, uint64_t memlimit) +{ + // We always allocate a new lzma_index. + *i = lzma_index_init(NULL, allocator); + if (*i == NULL) + return LZMA_MEM_ERROR; + + // Initialize the rest. + coder->sequence = SEQ_INDICATOR; + coder->memlimit = memlimit; + coder->index = *i; + coder->count = 0; // Needs to be initialized due to _memconfig(). + coder->pos = 0; + coder->crc32 = 0; + + return LZMA_OK; +} + + +static lzma_ret +index_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, + lzma_index **i, uint64_t memlimit) +{ + lzma_next_coder_init(&index_decoder_init, next, allocator); + + if (i == NULL || memlimit == 0) + return LZMA_PROG_ERROR; + + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &index_decode; + next->end = &index_decoder_end; + next->memconfig = &index_decoder_memconfig; + next->coder->index = NULL; + } else { + lzma_index_end(next->coder->index, allocator); + } + + return index_decoder_reset(next->coder, allocator, i, memlimit); +} + + +extern LZMA_API(lzma_ret) +lzma_index_decoder(lzma_stream *strm, lzma_index **i, uint64_t memlimit) +{ + lzma_next_strm_init(index_decoder_init, strm, i, memlimit); + + strm->internal->supported_actions[LZMA_RUN] = true; + + return LZMA_OK; +} + + +extern LZMA_API(lzma_ret) +lzma_index_buffer_decode( + lzma_index **i, uint64_t *memlimit, lzma_allocator *allocator, + const uint8_t *in, size_t *in_pos, size_t in_size) +{ + // Sanity checks + if (i == NULL || in == NULL || in_pos == NULL || *in_pos > in_size) + return LZMA_PROG_ERROR; + + // Initialize the decoder. + lzma_coder coder; + return_if_error(index_decoder_reset(&coder, allocator, i, *memlimit)); + + // Store the input start position so that we can restore it in case + // of an error. + const size_t in_start = *in_pos; + + // Do the actual decoding. + lzma_ret ret = index_decode(&coder, allocator, in, in_pos, in_size, + NULL, NULL, 0, LZMA_RUN); + + if (ret == LZMA_STREAM_END) { + ret = LZMA_OK; + } else { + // Something went wrong, free the Index structure and restore + // the input position. + lzma_index_end(*i, allocator); + *i = NULL; + *in_pos = in_start; + + if (ret == LZMA_OK) { + // The input is truncated or otherwise corrupt. + // Use LZMA_DATA_ERROR instead of LZMA_BUF_ERROR + // like lzma_vli_decode() does in single-call mode. + ret = LZMA_DATA_ERROR; + + } else if (ret == LZMA_MEMLIMIT_ERROR) { + // Tell the caller how much memory would have + // been needed. + *memlimit = lzma_index_memusage(coder.count); + } + } + + return ret; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_encoder.c new file mode 100644 index 00000000000..e23963ce42a --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_encoder.c @@ -0,0 +1,258 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file index_encoder.c +/// \brief Encodes the Index field +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "index_encoder.h" +#include "index.h" +#include "check.h" + + +struct lzma_coder_s { + enum { + SEQ_INDICATOR, + SEQ_COUNT, + SEQ_UNPADDED, + SEQ_UNCOMPRESSED, + SEQ_NEXT, + SEQ_PADDING, + SEQ_CRC32, + } sequence; + + /// Index given to us to encode. Note that we modify it in sense that + /// we read it, and read position is tracked in lzma_index structure. + lzma_index *index; + + /// The current Index Record being encoded + lzma_index_record record; + + /// Position in integers + size_t pos; + + /// CRC32 of the List of Records field + uint32_t crc32; +}; + + +static lzma_ret +index_encode(lzma_coder *coder, + lzma_allocator *allocator lzma_attribute((unused)), + const uint8_t *restrict in lzma_attribute((unused)), + size_t *restrict in_pos lzma_attribute((unused)), + size_t in_size lzma_attribute((unused)), + uint8_t *restrict out, size_t *restrict out_pos, + size_t out_size, lzma_action action lzma_attribute((unused))) +{ + // Position where to start calculating CRC32. The idea is that we + // need to call lzma_crc32() only once per call to index_encode(). + const size_t out_start = *out_pos; + + // Return value to use if we return at the end of this function. + // We use "goto out" to jump out of the while-switch construct + // instead of returning directly, because that way we don't need + // to copypaste the lzma_crc32() call to many places. + lzma_ret ret = LZMA_OK; + + while (*out_pos < out_size) + switch (coder->sequence) { + case SEQ_INDICATOR: + out[*out_pos] = 0x00; + ++*out_pos; + coder->sequence = SEQ_COUNT; + break; + + case SEQ_COUNT: { + const lzma_vli index_count = lzma_index_count(coder->index); + ret = lzma_vli_encode(index_count, &coder->pos, + out, out_pos, out_size); + if (ret != LZMA_STREAM_END) + goto out; + + ret = LZMA_OK; + coder->pos = 0; + coder->sequence = SEQ_NEXT; + break; + } + + case SEQ_NEXT: + if (lzma_index_read(coder->index, &coder->record)) { + // Get the size of the Index Padding field. + coder->pos = lzma_index_padding_size(coder->index); + assert(coder->pos <= 3); + coder->sequence = SEQ_PADDING; + break; + } + + // Unpadded Size must be within valid limits. + if (coder->record.unpadded_size < UNPADDED_SIZE_MIN + || coder->record.unpadded_size + > UNPADDED_SIZE_MAX) + return LZMA_PROG_ERROR; + + coder->sequence = SEQ_UNPADDED; + + // Fall through + + case SEQ_UNPADDED: + case SEQ_UNCOMPRESSED: { + const lzma_vli size = coder->sequence == SEQ_UNPADDED + ? coder->record.unpadded_size + : coder->record.uncompressed_size; + + ret = lzma_vli_encode(size, &coder->pos, + out, out_pos, out_size); + if (ret != LZMA_STREAM_END) + goto out; + + ret = LZMA_OK; + coder->pos = 0; + + // Advance to SEQ_UNCOMPRESSED or SEQ_NEXT. + ++coder->sequence; + break; + } + + case SEQ_PADDING: + if (coder->pos > 0) { + --coder->pos; + out[(*out_pos)++] = 0x00; + break; + } + + // Finish the CRC32 calculation. + coder->crc32 = lzma_crc32(out + out_start, + *out_pos - out_start, coder->crc32); + + coder->sequence = SEQ_CRC32; + + // Fall through + + case SEQ_CRC32: + // We don't use the main loop, because we don't want + // coder->crc32 to be touched anymore. + do { + if (*out_pos == out_size) + return LZMA_OK; + + out[*out_pos] = (coder->crc32 >> (coder->pos * 8)) + & 0xFF; + ++*out_pos; + + } while (++coder->pos < 4); + + return LZMA_STREAM_END; + + default: + assert(0); + return LZMA_PROG_ERROR; + } + +out: + // Update the CRC32. + coder->crc32 = lzma_crc32(out + out_start, + *out_pos - out_start, coder->crc32); + + return ret; +} + + +static void +index_encoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_free(coder, allocator); + return; +} + + +static void +index_encoder_reset(lzma_coder *coder, lzma_index *i) +{ + lzma_index_rewind(i); + + coder->sequence = SEQ_INDICATOR; + coder->index = i; + coder->pos = 0; + coder->crc32 = 0; + + return; +} + + +extern lzma_ret +lzma_index_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, + lzma_index *i) +{ + lzma_next_coder_init(&lzma_index_encoder_init, next, allocator); + + if (i == NULL) + return LZMA_PROG_ERROR; + + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &index_encode; + next->end = &index_encoder_end; + } + + index_encoder_reset(next->coder, i); + + return LZMA_OK; +} + + +extern LZMA_API(lzma_ret) +lzma_index_encoder(lzma_stream *strm, lzma_index *i) +{ + lzma_next_strm_init(lzma_index_encoder_init, strm, i); + + strm->internal->supported_actions[LZMA_RUN] = true; + + return LZMA_OK; +} + + +extern LZMA_API(lzma_ret) +lzma_index_buffer_encode(lzma_index *i, + uint8_t *out, size_t *out_pos, size_t out_size) +{ + // Validate the arugments. + if (i == NULL || out == NULL || out_pos == NULL || *out_pos > out_size) + return LZMA_PROG_ERROR; + + // Don't try to encode if there's not enough output space. + if (out_size - *out_pos < lzma_index_size(i)) + return LZMA_BUF_ERROR; + + // The Index encoder needs just one small data structure so we can + // allocate it on stack. + lzma_coder coder; + index_encoder_reset(&coder, i); + + // Do the actual encoding. This should never fail, but store + // the original *out_pos just in case. + const size_t out_start = *out_pos; + lzma_ret ret = index_encode(&coder, NULL, NULL, NULL, 0, + out, out_pos, out_size, LZMA_RUN); + + if (ret == LZMA_STREAM_END) { + ret = LZMA_OK; + } else { + // We should never get here, but just in case, restore the + // output position and set the error accordingly if something + // goes wrong and debugging isn't enabled. + assert(0); + *out_pos = out_start; + ret = LZMA_PROG_ERROR; + } + + return ret; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_encoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_encoder.h new file mode 100644 index 00000000000..c85d1c87ab3 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_encoder.h @@ -0,0 +1,23 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file index_encoder.h +/// \brief Encodes the Index field +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_INDEX_ENCODER_H +#define LZMA_INDEX_ENCODER_H + +#include "common.h" + + +extern lzma_ret lzma_index_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, lzma_index *i); + + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_hash.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_hash.c new file mode 100644 index 00000000000..e3e9386ae8e --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/index_hash.c @@ -0,0 +1,332 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file index_hash.c +/// \brief Validates Index by using a hash function +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "common.h" +#include "index.h" +#include "check.h" + + +typedef struct { + /// Sum of the Block sizes (including Block Padding) + lzma_vli blocks_size; + + /// Sum of the Uncompressed Size fields + lzma_vli uncompressed_size; + + /// Number of Records + lzma_vli count; + + /// Size of the List of Index Records as bytes + lzma_vli index_list_size; + + /// Check calculated from Unpadded Sizes and Uncompressed Sizes. + lzma_check_state check; + +} lzma_index_hash_info; + + +struct lzma_index_hash_s { + enum { + SEQ_BLOCK, + SEQ_COUNT, + SEQ_UNPADDED, + SEQ_UNCOMPRESSED, + SEQ_PADDING_INIT, + SEQ_PADDING, + SEQ_CRC32, + } sequence; + + /// Information collected while decoding the actual Blocks. + lzma_index_hash_info blocks; + + /// Information collected from the Index field. + lzma_index_hash_info records; + + /// Number of Records not fully decoded + lzma_vli remaining; + + /// Unpadded Size currently being read from an Index Record. + lzma_vli unpadded_size; + + /// Uncompressed Size currently being read from an Index Record. + lzma_vli uncompressed_size; + + /// Position in variable-length integers when decoding them from + /// the List of Records. + size_t pos; + + /// CRC32 of the Index + uint32_t crc32; +}; + + +extern LZMA_API(lzma_index_hash *) +lzma_index_hash_init(lzma_index_hash *index_hash, lzma_allocator *allocator) +{ + if (index_hash == NULL) { + index_hash = lzma_alloc(sizeof(lzma_index_hash), allocator); + if (index_hash == NULL) + return NULL; + } + + index_hash->sequence = SEQ_BLOCK; + index_hash->blocks.blocks_size = 0; + index_hash->blocks.uncompressed_size = 0; + index_hash->blocks.count = 0; + index_hash->blocks.index_list_size = 0; + index_hash->records.blocks_size = 0; + index_hash->records.uncompressed_size = 0; + index_hash->records.count = 0; + index_hash->records.index_list_size = 0; + index_hash->unpadded_size = 0; + index_hash->uncompressed_size = 0; + index_hash->pos = 0; + index_hash->crc32 = 0; + + // These cannot fail because LZMA_CHECK_BEST is known to be supported. + (void)lzma_check_init(&index_hash->blocks.check, LZMA_CHECK_BEST); + (void)lzma_check_init(&index_hash->records.check, LZMA_CHECK_BEST); + + return index_hash; +} + + +extern LZMA_API(void) +lzma_index_hash_end(lzma_index_hash *index_hash, lzma_allocator *allocator) +{ + lzma_free(index_hash, allocator); + return; +} + + +extern LZMA_API(lzma_vli) +lzma_index_hash_size(const lzma_index_hash *index_hash) +{ + // Get the size of the Index from ->blocks instead of ->records for + // cases where application wants to know the Index Size before + // decoding the Index. + return index_size(index_hash->blocks.count, + index_hash->blocks.index_list_size); +} + + +/// Updates the sizes and the hash without any validation. +static lzma_ret +hash_append(lzma_index_hash_info *info, lzma_vli unpadded_size, + lzma_vli uncompressed_size) +{ + info->blocks_size += vli_ceil4(unpadded_size); + info->uncompressed_size += uncompressed_size; + info->index_list_size += lzma_vli_size(unpadded_size) + + lzma_vli_size(uncompressed_size); + ++info->count; + + const lzma_vli sizes[2] = { unpadded_size, uncompressed_size }; + lzma_check_update(&info->check, LZMA_CHECK_BEST, + (const uint8_t *)(sizes), sizeof(sizes)); + + return LZMA_OK; +} + + +extern LZMA_API(lzma_ret) +lzma_index_hash_append(lzma_index_hash *index_hash, lzma_vli unpadded_size, + lzma_vli uncompressed_size) +{ + // Validate the arguments. + if (index_hash->sequence != SEQ_BLOCK + || unpadded_size < UNPADDED_SIZE_MIN + || unpadded_size > UNPADDED_SIZE_MAX + || uncompressed_size > LZMA_VLI_MAX) + return LZMA_PROG_ERROR; + + // Update the hash. + return_if_error(hash_append(&index_hash->blocks, + unpadded_size, uncompressed_size)); + + // Validate the properties of *info are still in allowed limits. + if (index_hash->blocks.blocks_size > LZMA_VLI_MAX + || index_hash->blocks.uncompressed_size > LZMA_VLI_MAX + || index_size(index_hash->blocks.count, + index_hash->blocks.index_list_size) + > LZMA_BACKWARD_SIZE_MAX + || index_stream_size(index_hash->blocks.blocks_size, + index_hash->blocks.count, + index_hash->blocks.index_list_size) + > LZMA_VLI_MAX) + return LZMA_DATA_ERROR; + + return LZMA_OK; +} + + +extern LZMA_API(lzma_ret) +lzma_index_hash_decode(lzma_index_hash *index_hash, const uint8_t *in, + size_t *in_pos, size_t in_size) +{ + // Catch zero input buffer here, because in contrast to Index encoder + // and decoder functions, applications call this function directly + // instead of via lzma_code(), which does the buffer checking. + if (*in_pos >= in_size) + return LZMA_BUF_ERROR; + + // NOTE: This function has many similarities to index_encode() and + // index_decode() functions found from index_encoder.c and + // index_decoder.c. See the comments especially in index_encoder.c. + const size_t in_start = *in_pos; + lzma_ret ret = LZMA_OK; + + while (*in_pos < in_size) + switch (index_hash->sequence) { + case SEQ_BLOCK: + // Check the Index Indicator is present. + if (in[(*in_pos)++] != 0x00) + return LZMA_DATA_ERROR; + + index_hash->sequence = SEQ_COUNT; + break; + + case SEQ_COUNT: { + ret = lzma_vli_decode(&index_hash->remaining, + &index_hash->pos, in, in_pos, in_size); + if (ret != LZMA_STREAM_END) + goto out; + + // The count must match the count of the Blocks decoded. + if (index_hash->remaining != index_hash->blocks.count) + return LZMA_DATA_ERROR; + + ret = LZMA_OK; + index_hash->pos = 0; + + // Handle the special case when there are no Blocks. + index_hash->sequence = index_hash->remaining == 0 + ? SEQ_PADDING_INIT : SEQ_UNPADDED; + break; + } + + case SEQ_UNPADDED: + case SEQ_UNCOMPRESSED: { + lzma_vli *size = index_hash->sequence == SEQ_UNPADDED + ? &index_hash->unpadded_size + : &index_hash->uncompressed_size; + + ret = lzma_vli_decode(size, &index_hash->pos, + in, in_pos, in_size); + if (ret != LZMA_STREAM_END) + goto out; + + ret = LZMA_OK; + index_hash->pos = 0; + + if (index_hash->sequence == SEQ_UNPADDED) { + if (index_hash->unpadded_size < UNPADDED_SIZE_MIN + || index_hash->unpadded_size + > UNPADDED_SIZE_MAX) + return LZMA_DATA_ERROR; + + index_hash->sequence = SEQ_UNCOMPRESSED; + } else { + // Update the hash. + return_if_error(hash_append(&index_hash->records, + index_hash->unpadded_size, + index_hash->uncompressed_size)); + + // Verify that we don't go over the known sizes. Note + // that this validation is simpler than the one used + // in lzma_index_hash_append(), because here we know + // that values in index_hash->blocks are already + // validated and we are fine as long as we don't + // exceed them in index_hash->records. + if (index_hash->blocks.blocks_size + < index_hash->records.blocks_size + || index_hash->blocks.uncompressed_size + < index_hash->records.uncompressed_size + || index_hash->blocks.index_list_size + < index_hash->records.index_list_size) + return LZMA_DATA_ERROR; + + // Check if this was the last Record. + index_hash->sequence = --index_hash->remaining == 0 + ? SEQ_PADDING_INIT : SEQ_UNPADDED; + } + + break; + } + + case SEQ_PADDING_INIT: + index_hash->pos = (LZMA_VLI_C(4) - index_size_unpadded( + index_hash->records.count, + index_hash->records.index_list_size)) & 3; + index_hash->sequence = SEQ_PADDING; + + // Fall through + + case SEQ_PADDING: + if (index_hash->pos > 0) { + --index_hash->pos; + if (in[(*in_pos)++] != 0x00) + return LZMA_DATA_ERROR; + + break; + } + + // Compare the sizes. + if (index_hash->blocks.blocks_size + != index_hash->records.blocks_size + || index_hash->blocks.uncompressed_size + != index_hash->records.uncompressed_size + || index_hash->blocks.index_list_size + != index_hash->records.index_list_size) + return LZMA_DATA_ERROR; + + // Finish the hashes and compare them. + lzma_check_finish(&index_hash->blocks.check, LZMA_CHECK_BEST); + lzma_check_finish(&index_hash->records.check, LZMA_CHECK_BEST); + if (memcmp(index_hash->blocks.check.buffer.u8, + index_hash->records.check.buffer.u8, + lzma_check_size(LZMA_CHECK_BEST)) != 0) + return LZMA_DATA_ERROR; + + // Finish the CRC32 calculation. + index_hash->crc32 = lzma_crc32(in + in_start, + *in_pos - in_start, index_hash->crc32); + + index_hash->sequence = SEQ_CRC32; + + // Fall through + + case SEQ_CRC32: + do { + if (*in_pos == in_size) + return LZMA_OK; + + if (((index_hash->crc32 >> (index_hash->pos * 8)) + & 0xFF) != in[(*in_pos)++]) + return LZMA_DATA_ERROR; + + } while (++index_hash->pos < 4); + + return LZMA_STREAM_END; + + default: + assert(0); + return LZMA_PROG_ERROR; + } + +out: + // Update the CRC32, + index_hash->crc32 = lzma_crc32(in + in_start, + *in_pos - in_start, index_hash->crc32); + + return ret; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_buffer_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_buffer_decoder.c new file mode 100644 index 00000000000..ae753155180 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_buffer_decoder.c @@ -0,0 +1,91 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file stream_buffer_decoder.c +/// \brief Single-call .xz Stream decoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "stream_decoder.h" + + +extern LZMA_API(lzma_ret) +lzma_stream_buffer_decode(uint64_t *memlimit, uint32_t flags, + lzma_allocator *allocator, + const uint8_t *in, size_t *in_pos, size_t in_size, + uint8_t *out, size_t *out_pos, size_t out_size) +{ + // Sanity checks + if (in_pos == NULL || (in == NULL && *in_pos != in_size) + || *in_pos > in_size || out_pos == NULL + || (out == NULL && *out_pos != out_size) + || *out_pos > out_size) + return LZMA_PROG_ERROR; + + // Catch flags that are not allowed in buffer-to-buffer decoding. + if (flags & LZMA_TELL_ANY_CHECK) + return LZMA_PROG_ERROR; + + // Initialize the Stream decoder. + // TODO: We need something to tell the decoder that it can use the + // output buffer as workspace, and thus save significant amount of RAM. + lzma_next_coder stream_decoder = LZMA_NEXT_CODER_INIT; + lzma_ret ret = lzma_stream_decoder_init( + &stream_decoder, allocator, *memlimit, flags); + + if (ret == LZMA_OK) { + // Save the positions so that we can restore them in case + // an error occurs. + const size_t in_start = *in_pos; + const size_t out_start = *out_pos; + + // Do the actual decoding. + ret = stream_decoder.code(stream_decoder.coder, allocator, + in, in_pos, in_size, out, out_pos, out_size, + LZMA_FINISH); + + if (ret == LZMA_STREAM_END) { + ret = LZMA_OK; + } else { + // Something went wrong, restore the positions. + *in_pos = in_start; + *out_pos = out_start; + + if (ret == LZMA_OK) { + // Either the input was truncated or the + // output buffer was too small. + assert(*in_pos == in_size + || *out_pos == out_size); + + // If all the input was consumed, then the + // input is truncated, even if the output + // buffer is also full. This is because + // processing the last byte of the Stream + // never produces output. + if (*in_pos == in_size) + ret = LZMA_DATA_ERROR; + else + ret = LZMA_BUF_ERROR; + + } else if (ret == LZMA_MEMLIMIT_ERROR) { + // Let the caller know how much memory would + // have been needed. + uint64_t memusage; + (void)stream_decoder.memconfig( + stream_decoder.coder, + memlimit, &memusage, 0); + } + } + } + + // Free the decoder memory. This needs to be done even if + // initialization fails, because the internal API doesn't + // require the initialization function to free its memory on error. + lzma_next_end(&stream_decoder, allocator); + + return ret; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_buffer_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_buffer_encoder.c new file mode 100644 index 00000000000..dd94c22add3 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_buffer_encoder.c @@ -0,0 +1,131 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file stream_buffer_encoder.c +/// \brief Single-call .xz Stream encoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "index.h" + + +/// Maximum size of Index that has exactly one Record. +/// Index Indicator + Number of Records + Record + CRC32 rounded up to +/// the next multiple of four. +#define INDEX_BOUND ((1 + 1 + 2 * LZMA_VLI_BYTES_MAX + 4 + 3) & ~3) + +/// Stream Header, Stream Footer, and Index +#define HEADERS_BOUND (2 * LZMA_STREAM_HEADER_SIZE + INDEX_BOUND) + + +extern LZMA_API(size_t) +lzma_stream_buffer_bound(size_t uncompressed_size) +{ + // Get the maximum possible size of a Block. + const size_t block_bound = lzma_block_buffer_bound(uncompressed_size); + if (block_bound == 0) + return 0; + + // Catch the possible integer overflow and also prevent the size of + // the Stream exceeding LZMA_VLI_MAX (theoretically possible on + // 64-bit systems). + if (MIN(SIZE_MAX, LZMA_VLI_MAX) - block_bound < HEADERS_BOUND) + return 0; + + return block_bound + HEADERS_BOUND; +} + + +extern LZMA_API(lzma_ret) +lzma_stream_buffer_encode(lzma_filter *filters, lzma_check check, + lzma_allocator *allocator, const uint8_t *in, size_t in_size, + uint8_t *out, size_t *out_pos_ptr, size_t out_size) +{ + // Sanity checks + if (filters == NULL || (unsigned int)(check) > LZMA_CHECK_ID_MAX + || (in == NULL && in_size != 0) || out == NULL + || out_pos_ptr == NULL || *out_pos_ptr > out_size) + return LZMA_PROG_ERROR; + + // Note for the paranoids: Index encoder prevents the Stream from + // getting too big and still being accepted with LZMA_OK, and Block + // encoder catches if the input is too big. So we don't need to + // separately check if the buffers are too big. + + // Use a local copy. We update *out_pos_ptr only if everything + // succeeds. + size_t out_pos = *out_pos_ptr; + + // Check that there's enough space for both Stream Header and + // Stream Footer. + if (out_size - out_pos <= 2 * LZMA_STREAM_HEADER_SIZE) + return LZMA_BUF_ERROR; + + // Reserve space for Stream Footer so we don't need to check for + // available space again before encoding Stream Footer. + out_size -= LZMA_STREAM_HEADER_SIZE; + + // Encode the Stream Header. + lzma_stream_flags stream_flags = { + .version = 0, + .check = check, + }; + + if (lzma_stream_header_encode(&stream_flags, out + out_pos) + != LZMA_OK) + return LZMA_PROG_ERROR; + + out_pos += LZMA_STREAM_HEADER_SIZE; + + // Block + lzma_block block = { + .version = 0, + .check = check, + .filters = filters, + }; + + return_if_error(lzma_block_buffer_encode(&block, allocator, + in, in_size, out, &out_pos, out_size)); + + // Index + { + // Create an Index with one Record. + lzma_index *i = lzma_index_init(NULL, NULL); + if (i == NULL) + return LZMA_MEM_ERROR; + + lzma_ret ret = lzma_index_append(i, NULL, + lzma_block_unpadded_size(&block), + block.uncompressed_size); + + // If adding the Record was successful, encode the Index + // and get its size which will be stored into Stream Footer. + if (ret == LZMA_OK) { + ret = lzma_index_buffer_encode( + i, out, &out_pos, out_size); + + stream_flags.backward_size = lzma_index_size(i); + } + + lzma_index_end(i, NULL); + + if (ret != LZMA_OK) + return ret; + } + + // Stream Footer. We have already reserved space for this. + if (lzma_stream_footer_encode(&stream_flags, out + out_pos) + != LZMA_OK) + return LZMA_PROG_ERROR; + + out_pos += LZMA_STREAM_HEADER_SIZE; + + // Everything went fine, make the new output position available + // to the application. + *out_pos_ptr = out_pos; + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_decoder.c new file mode 100644 index 00000000000..dcc047d9673 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_decoder.c @@ -0,0 +1,445 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file stream_decoder.c +/// \brief Decodes .xz Streams +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "stream_decoder.h" +#include "block_decoder.h" + + +struct lzma_coder_s { + enum { + SEQ_STREAM_HEADER, + SEQ_BLOCK_HEADER, + SEQ_BLOCK, + SEQ_INDEX, + SEQ_STREAM_FOOTER, + SEQ_STREAM_PADDING, + } sequence; + + /// Block or Metadata decoder. This takes little memory and the same + /// data structure can be used to decode every Block Header, so it's + /// a good idea to have a separate lzma_next_coder structure for it. + lzma_next_coder block_decoder; + + /// Block options decoded by the Block Header decoder and used by + /// the Block decoder. + lzma_block block_options; + + /// Stream Flags from Stream Header + lzma_stream_flags stream_flags; + + /// Index is hashed so that it can be compared to the sizes of Blocks + /// with O(1) memory usage. + lzma_index_hash *index_hash; + + /// Memory usage limit + uint64_t memlimit; + + /// Amount of memory actually needed (only an estimate) + uint64_t memusage; + + /// If true, LZMA_NO_CHECK is returned if the Stream has + /// no integrity check. + bool tell_no_check; + + /// If true, LZMA_UNSUPPORTED_CHECK is returned if the Stream has + /// an integrity check that isn't supported by this liblzma build. + bool tell_unsupported_check; + + /// If true, LZMA_GET_CHECK is returned after decoding Stream Header. + bool tell_any_check; + + /// If true, we will decode concatenated Streams that possibly have + /// Stream Padding between or after them. LZMA_STREAM_END is returned + /// once the application isn't giving us any new input, and we aren't + /// in the middle of a Stream, and possible Stream Padding is a + /// multiple of four bytes. + bool concatenated; + + /// When decoding concatenated Streams, this is true as long as we + /// are decoding the first Stream. This is needed to avoid misleading + /// LZMA_FORMAT_ERROR in case the later Streams don't have valid magic + /// bytes. + bool first_stream; + + /// Write position in buffer[] and position in Stream Padding + size_t pos; + + /// Buffer to hold Stream Header, Block Header, and Stream Footer. + /// Block Header has biggest maximum size. + uint8_t buffer[LZMA_BLOCK_HEADER_SIZE_MAX]; +}; + + +static lzma_ret +stream_decoder_reset(lzma_coder *coder, lzma_allocator *allocator) +{ + // Initialize the Index hash used to verify the Index. + coder->index_hash = lzma_index_hash_init(coder->index_hash, allocator); + if (coder->index_hash == NULL) + return LZMA_MEM_ERROR; + + // Reset the rest of the variables. + coder->sequence = SEQ_STREAM_HEADER; + coder->pos = 0; + + return LZMA_OK; +} + + +static lzma_ret +stream_decode(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + // When decoding the actual Block, it may be able to produce more + // output even if we don't give it any new input. + while (true) + switch (coder->sequence) { + case SEQ_STREAM_HEADER: { + // Copy the Stream Header to the internal buffer. + lzma_bufcpy(in, in_pos, in_size, coder->buffer, &coder->pos, + LZMA_STREAM_HEADER_SIZE); + + // Return if we didn't get the whole Stream Header yet. + if (coder->pos < LZMA_STREAM_HEADER_SIZE) + return LZMA_OK; + + coder->pos = 0; + + // Decode the Stream Header. + const lzma_ret ret = lzma_stream_header_decode( + &coder->stream_flags, coder->buffer); + if (ret != LZMA_OK) + return ret == LZMA_FORMAT_ERROR && !coder->first_stream + ? LZMA_DATA_ERROR : ret; + + // If we are decoding concatenated Streams, and the later + // Streams have invalid Header Magic Bytes, we give + // LZMA_DATA_ERROR instead of LZMA_FORMAT_ERROR. + coder->first_stream = false; + + // Copy the type of the Check so that Block Header and Block + // decoders see it. + coder->block_options.check = coder->stream_flags.check; + + // Even if we return LZMA_*_CHECK below, we want + // to continue from Block Header decoding. + coder->sequence = SEQ_BLOCK_HEADER; + + // Detect if there's no integrity check or if it is + // unsupported if those were requested by the application. + if (coder->tell_no_check && coder->stream_flags.check + == LZMA_CHECK_NONE) + return LZMA_NO_CHECK; + + if (coder->tell_unsupported_check + && !lzma_check_is_supported( + coder->stream_flags.check)) + return LZMA_UNSUPPORTED_CHECK; + + if (coder->tell_any_check) + return LZMA_GET_CHECK; + } + + // Fall through + + case SEQ_BLOCK_HEADER: { + if (*in_pos >= in_size) + return LZMA_OK; + + if (coder->pos == 0) { + // Detect if it's Index. + if (in[*in_pos] == 0x00) { + coder->sequence = SEQ_INDEX; + break; + } + + // Calculate the size of the Block Header. Note that + // Block Header decoder wants to see this byte too + // so don't advance *in_pos. + coder->block_options.header_size + = lzma_block_header_size_decode( + in[*in_pos]); + } + + // Copy the Block Header to the internal buffer. + lzma_bufcpy(in, in_pos, in_size, coder->buffer, &coder->pos, + coder->block_options.header_size); + + // Return if we didn't get the whole Block Header yet. + if (coder->pos < coder->block_options.header_size) + return LZMA_OK; + + coder->pos = 0; + + // Set up a buffer to hold the filter chain. Block Header + // decoder will initialize all members of this array so + // we don't need to do it here. + lzma_filter filters[LZMA_FILTERS_MAX + 1]; + coder->block_options.filters = filters; + + // Decode the Block Header. + return_if_error(lzma_block_header_decode(&coder->block_options, + allocator, coder->buffer)); + + // Check the memory usage limit. + const uint64_t memusage = lzma_raw_decoder_memusage(filters); + lzma_ret ret; + + if (memusage == UINT64_MAX) { + // One or more unknown Filter IDs. + ret = LZMA_OPTIONS_ERROR; + } else { + // Now we can set coder->memusage since we know that + // the filter chain is valid. We don't want + // lzma_memusage() to return UINT64_MAX in case of + // invalid filter chain. + coder->memusage = memusage; + + if (memusage > coder->memlimit) { + // The chain would need too much memory. + ret = LZMA_MEMLIMIT_ERROR; + } else { + // Memory usage is OK. + // Initialize the Block decoder. + ret = lzma_block_decoder_init( + &coder->block_decoder, + allocator, + &coder->block_options); + } + } + + // Free the allocated filter options since they are needed + // only to initialize the Block decoder. + for (size_t i = 0; i < LZMA_FILTERS_MAX; ++i) + lzma_free(filters[i].options, allocator); + + coder->block_options.filters = NULL; + + // Check if memory usage calculation and Block enocoder + // initialization succeeded. + if (ret != LZMA_OK) + return ret; + + coder->sequence = SEQ_BLOCK; + } + + // Fall through + + case SEQ_BLOCK: { + const lzma_ret ret = coder->block_decoder.code( + coder->block_decoder.coder, allocator, + in, in_pos, in_size, out, out_pos, out_size, + action); + + if (ret != LZMA_STREAM_END) + return ret; + + // Block decoded successfully. Add the new size pair to + // the Index hash. + return_if_error(lzma_index_hash_append(coder->index_hash, + lzma_block_unpadded_size( + &coder->block_options), + coder->block_options.uncompressed_size)); + + coder->sequence = SEQ_BLOCK_HEADER; + break; + } + + case SEQ_INDEX: { + // If we don't have any input, don't call + // lzma_index_hash_decode() since it would return + // LZMA_BUF_ERROR, which we must not do here. + if (*in_pos >= in_size) + return LZMA_OK; + + // Decode the Index and compare it to the hash calculated + // from the sizes of the Blocks (if any). + const lzma_ret ret = lzma_index_hash_decode(coder->index_hash, + in, in_pos, in_size); + if (ret != LZMA_STREAM_END) + return ret; + + coder->sequence = SEQ_STREAM_FOOTER; + } + + // Fall through + + case SEQ_STREAM_FOOTER: { + // Copy the Stream Footer to the internal buffer. + lzma_bufcpy(in, in_pos, in_size, coder->buffer, &coder->pos, + LZMA_STREAM_HEADER_SIZE); + + // Return if we didn't get the whole Stream Footer yet. + if (coder->pos < LZMA_STREAM_HEADER_SIZE) + return LZMA_OK; + + coder->pos = 0; + + // Decode the Stream Footer. The decoder gives + // LZMA_FORMAT_ERROR if the magic bytes don't match, + // so convert that return code to LZMA_DATA_ERROR. + lzma_stream_flags footer_flags; + const lzma_ret ret = lzma_stream_footer_decode( + &footer_flags, coder->buffer); + if (ret != LZMA_OK) + return ret == LZMA_FORMAT_ERROR + ? LZMA_DATA_ERROR : ret; + + // Check that Index Size stored in the Stream Footer matches + // the real size of the Index field. + if (lzma_index_hash_size(coder->index_hash) + != footer_flags.backward_size) + return LZMA_DATA_ERROR; + + // Compare that the Stream Flags fields are identical in + // both Stream Header and Stream Footer. + return_if_error(lzma_stream_flags_compare( + &coder->stream_flags, &footer_flags)); + + if (!coder->concatenated) + return LZMA_STREAM_END; + + coder->sequence = SEQ_STREAM_PADDING; + } + + // Fall through + + case SEQ_STREAM_PADDING: + assert(coder->concatenated); + + // Skip over possible Stream Padding. + while (true) { + if (*in_pos >= in_size) { + // Unless LZMA_FINISH was used, we cannot + // know if there's more input coming later. + if (action != LZMA_FINISH) + return LZMA_OK; + + // Stream Padding must be a multiple of + // four bytes. + return coder->pos == 0 + ? LZMA_STREAM_END + : LZMA_DATA_ERROR; + } + + // If the byte is not zero, it probably indicates + // beginning of a new Stream (or the file is corrupt). + if (in[*in_pos] != 0x00) + break; + + ++*in_pos; + coder->pos = (coder->pos + 1) & 3; + } + + // Stream Padding must be a multiple of four bytes (empty + // Stream Padding is OK). + if (coder->pos != 0) { + ++*in_pos; + return LZMA_DATA_ERROR; + } + + // Prepare to decode the next Stream. + return_if_error(stream_decoder_reset(coder, allocator)); + break; + + default: + assert(0); + return LZMA_PROG_ERROR; + } + + return LZMA_OK; +} + + +static void +stream_decoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_next_end(&coder->block_decoder, allocator); + lzma_index_hash_end(coder->index_hash, allocator); + lzma_free(coder, allocator); + return; +} + + +static lzma_check +stream_decoder_get_check(const lzma_coder *coder) +{ + return coder->stream_flags.check; +} + + +static lzma_ret +stream_decoder_memconfig(lzma_coder *coder, uint64_t *memusage, + uint64_t *old_memlimit, uint64_t new_memlimit) +{ + if (new_memlimit != 0 && new_memlimit < coder->memusage) + return LZMA_MEMLIMIT_ERROR; + + *memusage = coder->memusage; + *old_memlimit = coder->memlimit; + coder->memlimit = new_memlimit; + + return LZMA_OK; +} + + +extern lzma_ret +lzma_stream_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, + uint64_t memlimit, uint32_t flags) +{ + lzma_next_coder_init(&lzma_stream_decoder_init, next, allocator); + + if (memlimit == 0) + return LZMA_PROG_ERROR; + + if (flags & ~LZMA_SUPPORTED_FLAGS) + return LZMA_OPTIONS_ERROR; + + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &stream_decode; + next->end = &stream_decoder_end; + next->get_check = &stream_decoder_get_check; + next->memconfig = &stream_decoder_memconfig; + + next->coder->block_decoder = LZMA_NEXT_CODER_INIT; + next->coder->index_hash = NULL; + } + + next->coder->memlimit = memlimit; + next->coder->memusage = LZMA_MEMUSAGE_BASE; + next->coder->tell_no_check = (flags & LZMA_TELL_NO_CHECK) != 0; + next->coder->tell_unsupported_check + = (flags & LZMA_TELL_UNSUPPORTED_CHECK) != 0; + next->coder->tell_any_check = (flags & LZMA_TELL_ANY_CHECK) != 0; + next->coder->concatenated = (flags & LZMA_CONCATENATED) != 0; + next->coder->first_stream = true; + + return stream_decoder_reset(next->coder, allocator); +} + + +extern LZMA_API(lzma_ret) +lzma_stream_decoder(lzma_stream *strm, uint64_t memlimit, uint32_t flags) +{ + lzma_next_strm_init(lzma_stream_decoder_init, strm, memlimit, flags); + + strm->internal->supported_actions[LZMA_RUN] = true; + strm->internal->supported_actions[LZMA_FINISH] = true; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_decoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_decoder.h new file mode 100644 index 00000000000..e54ac28f44a --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_decoder.h @@ -0,0 +1,21 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file stream_decoder.h +/// \brief Decodes .xz Streams +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_STREAM_DECODER_H +#define LZMA_STREAM_DECODER_H + +#include "common.h" + +extern lzma_ret lzma_stream_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, uint64_t memlimit, uint32_t flags); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_encoder.c new file mode 100644 index 00000000000..292efc8248b --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_encoder.c @@ -0,0 +1,274 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file stream_encoder.c +/// \brief Encodes .xz Streams +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "stream_encoder.h" +#include "block_encoder.h" +#include "index_encoder.h" + + +struct lzma_coder_s { + enum { + SEQ_STREAM_HEADER, + SEQ_BLOCK_INIT, + SEQ_BLOCK_HEADER, + SEQ_BLOCK_ENCODE, + SEQ_INDEX_ENCODE, + SEQ_STREAM_FOOTER, + } sequence; + + /// Block + lzma_next_coder block_encoder; + + /// Options for the Block encoder + lzma_block block_options; + + /// Index encoder. This is separate from Block encoder, because this + /// doesn't take much memory, and when encoding multiple Streams + /// with the same encoding options we avoid reallocating memory. + lzma_next_coder index_encoder; + + /// Index to hold sizes of the Blocks + lzma_index *index; + + /// Read position in buffer[] + size_t buffer_pos; + + /// Total number of bytes in buffer[] + size_t buffer_size; + + /// Buffer to hold Stream Header, Block Header, and Stream Footer. + /// Block Header has biggest maximum size. + uint8_t buffer[LZMA_BLOCK_HEADER_SIZE_MAX]; +}; + + +static lzma_ret +block_encoder_init(lzma_coder *coder, lzma_allocator *allocator) +{ + // Prepare the Block options. Even though Block encoder doesn't need + // compressed_size, uncompressed_size, and header_size to be + // initialized, it is a good idea to do it here, because this way + // we catch if someone gave us Filter ID that cannot be used in + // Blocks/Streams. + coder->block_options.compressed_size = LZMA_VLI_UNKNOWN; + coder->block_options.uncompressed_size = LZMA_VLI_UNKNOWN; + + return_if_error(lzma_block_header_size(&coder->block_options)); + + // Initialize the actual Block encoder. + return lzma_block_encoder_init(&coder->block_encoder, allocator, + &coder->block_options); +} + + +static lzma_ret +stream_encode(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + // Main loop + while (*out_pos < out_size) + switch (coder->sequence) { + case SEQ_STREAM_HEADER: + case SEQ_BLOCK_HEADER: + case SEQ_STREAM_FOOTER: + lzma_bufcpy(coder->buffer, &coder->buffer_pos, + coder->buffer_size, out, out_pos, out_size); + if (coder->buffer_pos < coder->buffer_size) + return LZMA_OK; + + if (coder->sequence == SEQ_STREAM_FOOTER) + return LZMA_STREAM_END; + + coder->buffer_pos = 0; + ++coder->sequence; + break; + + case SEQ_BLOCK_INIT: { + if (*in_pos == in_size) { + // If we are requested to flush or finish the current + // Block, return LZMA_STREAM_END immediatelly since + // there's nothing to do. + if (action != LZMA_FINISH) + return action == LZMA_RUN + ? LZMA_OK : LZMA_STREAM_END; + + // The application had used LZMA_FULL_FLUSH to finish + // the previous Block, but now wants to finish without + // encoding new data, or it is simply creating an + // empty Stream with no Blocks. + // + // Initialize the Index encoder, and continue to + // actually encoding the Index. + return_if_error(lzma_index_encoder_init( + &coder->index_encoder, allocator, + coder->index)); + coder->sequence = SEQ_INDEX_ENCODE; + break; + } + + // Initialize the Block encoder except if this is the first + // Block, because stream_encoder_init() has already + // initialized it. + if (lzma_index_count(coder->index) != 0) + return_if_error(block_encoder_init(coder, allocator)); + + // Encode the Block Header. This shouldn't fail since we have + // already initialized the Block encoder. + if (lzma_block_header_encode(&coder->block_options, + coder->buffer) != LZMA_OK) + return LZMA_PROG_ERROR; + + coder->buffer_size = coder->block_options.header_size; + coder->sequence = SEQ_BLOCK_HEADER; + break; + } + + case SEQ_BLOCK_ENCODE: { + static const lzma_action convert[4] = { + LZMA_RUN, + LZMA_SYNC_FLUSH, + LZMA_FINISH, + LZMA_FINISH, + }; + + const lzma_ret ret = coder->block_encoder.code( + coder->block_encoder.coder, allocator, + in, in_pos, in_size, + out, out_pos, out_size, convert[action]); + if (ret != LZMA_STREAM_END || action == LZMA_SYNC_FLUSH) + return ret; + + // Add a new Index Record. + const lzma_vli unpadded_size = lzma_block_unpadded_size( + &coder->block_options); + assert(unpadded_size != 0); + return_if_error(lzma_index_append(coder->index, allocator, + unpadded_size, + coder->block_options.uncompressed_size)); + + coder->sequence = SEQ_BLOCK_INIT; + break; + } + + case SEQ_INDEX_ENCODE: { + // Call the Index encoder. It doesn't take any input, so + // those pointers can be NULL. + const lzma_ret ret = coder->index_encoder.code( + coder->index_encoder.coder, allocator, + NULL, NULL, 0, + out, out_pos, out_size, LZMA_RUN); + if (ret != LZMA_STREAM_END) + return ret; + + // Encode the Stream Footer into coder->buffer. + const lzma_stream_flags stream_flags = { + .version = 0, + .backward_size = lzma_index_size(coder->index), + .check = coder->block_options.check, + }; + + if (lzma_stream_footer_encode(&stream_flags, coder->buffer) + != LZMA_OK) + return LZMA_PROG_ERROR; + + coder->buffer_size = LZMA_STREAM_HEADER_SIZE; + coder->sequence = SEQ_STREAM_FOOTER; + break; + } + + default: + assert(0); + return LZMA_PROG_ERROR; + } + + return LZMA_OK; +} + + +static void +stream_encoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_next_end(&coder->block_encoder, allocator); + lzma_next_end(&coder->index_encoder, allocator); + lzma_index_end(coder->index, allocator); + lzma_free(coder, allocator); + return; +} + + +extern lzma_ret +lzma_stream_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter *filters, lzma_check check) +{ + lzma_next_coder_init(&lzma_stream_encoder_init, next, allocator); + + if (filters == NULL) + return LZMA_PROG_ERROR; + + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &stream_encode; + next->end = &stream_encoder_end; + + next->coder->block_encoder = LZMA_NEXT_CODER_INIT; + next->coder->index_encoder = LZMA_NEXT_CODER_INIT; + next->coder->index = NULL; + } + + // Basic initializations + next->coder->sequence = SEQ_STREAM_HEADER; + next->coder->block_options.version = 0; + next->coder->block_options.check = check; + next->coder->block_options.filters = (lzma_filter *)(filters); + + // Initialize the Index + next->coder->index = lzma_index_init(next->coder->index, allocator); + if (next->coder->index == NULL) + return LZMA_MEM_ERROR; + + // Encode the Stream Header + lzma_stream_flags stream_flags = { + .version = 0, + .check = check, + }; + return_if_error(lzma_stream_header_encode( + &stream_flags, next->coder->buffer)); + + next->coder->buffer_pos = 0; + next->coder->buffer_size = LZMA_STREAM_HEADER_SIZE; + + // Initialize the Block encoder. This way we detect if the given + // filters are supported by the current liblzma build, and the + // application doesn't need to keep the filters structure available + // unless it is going to use LZMA_FULL_FLUSH. + return block_encoder_init(next->coder, allocator); +} + + +extern LZMA_API(lzma_ret) +lzma_stream_encoder(lzma_stream *strm, + const lzma_filter *filters, lzma_check check) +{ + lzma_next_strm_init(lzma_stream_encoder_init, strm, filters, check); + + strm->internal->supported_actions[LZMA_RUN] = true; + strm->internal->supported_actions[LZMA_SYNC_FLUSH] = true; + strm->internal->supported_actions[LZMA_FULL_FLUSH] = true; + strm->internal->supported_actions[LZMA_FINISH] = true; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_encoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_encoder.h new file mode 100644 index 00000000000..46a7aed72ea --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_encoder.h @@ -0,0 +1,23 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file stream_encoder.h +/// \brief Encodes .xz Streams +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_STREAM_ENCODER_H +#define LZMA_STREAM_ENCODER_H + +#include "common.h" + + +extern lzma_ret lzma_stream_encoder_init( + lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter *filters, lzma_check check); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_common.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_common.c new file mode 100644 index 00000000000..fbe8eb8abda --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_common.c @@ -0,0 +1,47 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file stream_flags_common.c +/// \brief Common stuff for Stream flags coders +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "stream_flags_common.h" + + +const uint8_t lzma_header_magic[6] = { 0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00 }; +const uint8_t lzma_footer_magic[2] = { 0x59, 0x5A }; + + +extern LZMA_API(lzma_ret) +lzma_stream_flags_compare( + const lzma_stream_flags *a, const lzma_stream_flags *b) +{ + // We can compare only version 0 structures. + if (a->version != 0 || b->version != 0) + return LZMA_OPTIONS_ERROR; + + // Check type + if ((unsigned int)(a->check) > LZMA_CHECK_ID_MAX + || (unsigned int)(b->check) > LZMA_CHECK_ID_MAX) + return LZMA_PROG_ERROR; + + if (a->check != b->check) + return LZMA_DATA_ERROR; + + // Backward Sizes are compared only if they are known in both. + if (a->backward_size != LZMA_VLI_UNKNOWN + && b->backward_size != LZMA_VLI_UNKNOWN) { + if (!is_backward_size_valid(a) || !is_backward_size_valid(b)) + return LZMA_PROG_ERROR; + + if (a->backward_size != b->backward_size) + return LZMA_DATA_ERROR; + } + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_common.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_common.h new file mode 100644 index 00000000000..9f3122a3b1e --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_common.h @@ -0,0 +1,33 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file stream_flags_common.h +/// \brief Common stuff for Stream flags coders +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_STREAM_FLAGS_COMMON_H +#define LZMA_STREAM_FLAGS_COMMON_H + +#include "common.h" + +/// Size of the Stream Flags field +#define LZMA_STREAM_FLAGS_SIZE 2 + +extern const uint8_t lzma_header_magic[6]; +extern const uint8_t lzma_footer_magic[2]; + + +static inline bool +is_backward_size_valid(const lzma_stream_flags *options) +{ + return options->backward_size >= LZMA_BACKWARD_SIZE_MIN + && options->backward_size <= LZMA_BACKWARD_SIZE_MAX + && (options->backward_size & 3) == 0; +} + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_decoder.c new file mode 100644 index 00000000000..3dbbbcf4445 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_decoder.c @@ -0,0 +1,82 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file stream_flags_decoder.c +/// \brief Decodes Stream Header and Stream Footer from .xz files +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "stream_flags_common.h" + + +static bool +stream_flags_decode(lzma_stream_flags *options, const uint8_t *in) +{ + // Reserved bits must be unset. + if (in[0] != 0x00 || (in[1] & 0xF0)) + return true; + + options->version = 0; + options->check = in[1] & 0x0F; + + return false; +} + + +extern LZMA_API(lzma_ret) +lzma_stream_header_decode(lzma_stream_flags *options, const uint8_t *in) +{ + // Magic + if (memcmp(in, lzma_header_magic, sizeof(lzma_header_magic)) != 0) + return LZMA_FORMAT_ERROR; + + // Verify the CRC32 so we can distinguish between corrupt + // and unsupported files. + const uint32_t crc = lzma_crc32(in + sizeof(lzma_header_magic), + LZMA_STREAM_FLAGS_SIZE, 0); + if (crc != integer_read_32(in + sizeof(lzma_header_magic) + + LZMA_STREAM_FLAGS_SIZE)) + return LZMA_DATA_ERROR; + + // Stream Flags + if (stream_flags_decode(options, in + sizeof(lzma_header_magic))) + return LZMA_OPTIONS_ERROR; + + // Set Backward Size to indicate unknown value. That way + // lzma_stream_flags_compare() can be used to compare Stream Header + // and Stream Footer while keeping it useful also for comparing + // two Stream Footers. + options->backward_size = LZMA_VLI_UNKNOWN; + + return LZMA_OK; +} + + +extern LZMA_API(lzma_ret) +lzma_stream_footer_decode(lzma_stream_flags *options, const uint8_t *in) +{ + // Magic + if (memcmp(in + sizeof(uint32_t) * 2 + LZMA_STREAM_FLAGS_SIZE, + lzma_footer_magic, sizeof(lzma_footer_magic)) != 0) + return LZMA_FORMAT_ERROR; + + // CRC32 + const uint32_t crc = lzma_crc32(in + sizeof(uint32_t), + sizeof(uint32_t) + LZMA_STREAM_FLAGS_SIZE, 0); + if (crc != integer_read_32(in)) + return LZMA_DATA_ERROR; + + // Stream Flags + if (stream_flags_decode(options, in + sizeof(uint32_t) * 2)) + return LZMA_OPTIONS_ERROR; + + // Backward Size + options->backward_size = integer_read_32(in + sizeof(uint32_t)); + options->backward_size = (options->backward_size + 1) * 4; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_encoder.c new file mode 100644 index 00000000000..ecbd0f13c31 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/stream_flags_encoder.c @@ -0,0 +1,86 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file stream_flags_encoder.c +/// \brief Encodes Stream Header and Stream Footer for .xz files +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "stream_flags_common.h" + + +static bool +stream_flags_encode(const lzma_stream_flags *options, uint8_t *out) +{ + if ((unsigned int)(options->check) > LZMA_CHECK_ID_MAX) + return true; + + out[0] = 0x00; + out[1] = options->check; + + return false; +} + + +extern LZMA_API(lzma_ret) +lzma_stream_header_encode(const lzma_stream_flags *options, uint8_t *out) +{ + assert(sizeof(lzma_header_magic) + LZMA_STREAM_FLAGS_SIZE + + 4 == LZMA_STREAM_HEADER_SIZE); + + if (options->version != 0) + return LZMA_OPTIONS_ERROR; + + // Magic + memcpy(out, lzma_header_magic, sizeof(lzma_header_magic)); + + // Stream Flags + if (stream_flags_encode(options, out + sizeof(lzma_header_magic))) + return LZMA_PROG_ERROR; + + // CRC32 of the Stream Header + const uint32_t crc = lzma_crc32(out + sizeof(lzma_header_magic), + LZMA_STREAM_FLAGS_SIZE, 0); + + integer_write_32(out + sizeof(lzma_header_magic) + + LZMA_STREAM_FLAGS_SIZE, crc); + + return LZMA_OK; +} + + +extern LZMA_API(lzma_ret) +lzma_stream_footer_encode(const lzma_stream_flags *options, uint8_t *out) +{ + assert(2 * 4 + LZMA_STREAM_FLAGS_SIZE + sizeof(lzma_footer_magic) + == LZMA_STREAM_HEADER_SIZE); + + if (options->version != 0) + return LZMA_OPTIONS_ERROR; + + // Backward Size + if (!is_backward_size_valid(options)) + return LZMA_PROG_ERROR; + + integer_write_32(out + 4, options->backward_size / 4 - 1); + + // Stream Flags + if (stream_flags_encode(options, out + 2 * 4)) + return LZMA_PROG_ERROR; + + // CRC32 + const uint32_t crc = lzma_crc32( + out + 4, 4 + LZMA_STREAM_FLAGS_SIZE, 0); + + integer_write_32(out, crc); + + // Magic + memcpy(out + 2 * 4 + LZMA_STREAM_FLAGS_SIZE, + lzma_footer_magic, sizeof(lzma_footer_magic)); + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/vli_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/vli_decoder.c new file mode 100644 index 00000000000..ffb27cadc53 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/vli_decoder.c @@ -0,0 +1,86 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file vli_decoder.c +/// \brief Decodes variable-length integers +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "common.h" + + +extern LZMA_API(lzma_ret) +lzma_vli_decode(lzma_vli *restrict vli, size_t *restrict vli_pos, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size) +{ + // If we haven't been given vli_pos, work in single-call mode. + size_t vli_pos_internal = 0; + if (vli_pos == NULL) { + vli_pos = &vli_pos_internal; + *vli = 0; + + // If there's no input, use LZMA_DATA_ERROR. This way it is + // easy to decode VLIs from buffers that have known size, + // and get the correct error code in case the buffer is + // too short. + if (*in_pos >= in_size) + return LZMA_DATA_ERROR; + + } else { + // Initialize *vli when starting to decode a new integer. + if (*vli_pos == 0) + *vli = 0; + + // Validate the arguments. + if (*vli_pos >= LZMA_VLI_BYTES_MAX + || (*vli >> (*vli_pos * 7)) != 0) + return LZMA_PROG_ERROR;; + + if (*in_pos >= in_size) + return LZMA_BUF_ERROR; + } + + do { + // Read the next byte. Use a temporary variable so that we + // can update *in_pos immediatelly. + const uint8_t byte = in[*in_pos]; + ++*in_pos; + + // Add the newly read byte to *vli. + *vli += (lzma_vli)(byte & 0x7F) << (*vli_pos * 7); + ++*vli_pos; + + // Check if this is the last byte of a multibyte integer. + if ((byte & 0x80) == 0) { + // We don't allow using variable-length integers as + // padding i.e. the encoding must use the most the + // compact form. + if (byte == 0x00 && *vli_pos > 1) + return LZMA_DATA_ERROR; + + return vli_pos == &vli_pos_internal + ? LZMA_OK : LZMA_STREAM_END; + } + + // There is at least one more byte coming. If we have already + // read maximum number of bytes, the integer is considered + // corrupt. + // + // If we need bigger integers in future, old versions liblzma + // will confusingly indicate the file being corrupt istead of + // unsupported. I suppose it's still better this way, because + // in the foreseeable future (writing this in 2008) the only + // reason why files would appear having over 63-bit integers + // is that the files are simply corrupt. + if (*vli_pos == LZMA_VLI_BYTES_MAX) + return LZMA_DATA_ERROR; + + } while (*in_pos < in_size); + + return vli_pos == &vli_pos_internal ? LZMA_DATA_ERROR : LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/vli_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/vli_encoder.c new file mode 100644 index 00000000000..ebc9f344acf --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/vli_encoder.c @@ -0,0 +1,69 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file vli_encoder.c +/// \brief Encodes variable-length integers +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "common.h" + + +extern LZMA_API(lzma_ret) +lzma_vli_encode(lzma_vli vli, size_t *restrict vli_pos, + uint8_t *restrict out, size_t *restrict out_pos, + size_t out_size) +{ + // If we haven't been given vli_pos, work in single-call mode. + size_t vli_pos_internal = 0; + if (vli_pos == NULL) { + vli_pos = &vli_pos_internal; + + // In single-call mode, we expect that the caller has + // reserved enough output space. + if (*out_pos >= out_size) + return LZMA_PROG_ERROR; + } else { + // This never happens when we are called by liblzma, but + // may happen if called directly from an application. + if (*out_pos >= out_size) + return LZMA_BUF_ERROR; + } + + // Validate the arguments. + if (*vli_pos >= LZMA_VLI_BYTES_MAX || vli > LZMA_VLI_MAX) + return LZMA_PROG_ERROR; + + // Shift vli so that the next bits to encode are the lowest. In + // single-call mode this never changes vli since *vli_pos is zero. + vli >>= *vli_pos * 7; + + // Write the non-last bytes in a loop. + while (vli >= 0x80) { + // We don't need *vli_pos during this function call anymore, + // but update it here so that it is ready if we need to + // return before the whole integer has been decoded. + ++*vli_pos; + assert(*vli_pos < LZMA_VLI_BYTES_MAX); + + // Write the next byte. + out[*out_pos] = (uint8_t)(vli) | 0x80; + vli >>= 7; + + if (++*out_pos == out_size) + return vli_pos == &vli_pos_internal + ? LZMA_PROG_ERROR : LZMA_OK; + } + + // Write the last byte. + out[*out_pos] = (uint8_t)(vli); + ++*out_pos; + ++*vli_pos; + + return vli_pos == &vli_pos_internal ? LZMA_OK : LZMA_STREAM_END; + +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/common/vli_size.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/vli_size.c new file mode 100644 index 00000000000..ec1b4fa488b --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/common/vli_size.c @@ -0,0 +1,30 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file vli_size.c +/// \brief Calculates the encoded size of a variable-length integer +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "common.h" + + +extern LZMA_API(uint32_t) +lzma_vli_size(lzma_vli vli) +{ + if (vli > LZMA_VLI_MAX) + return 0; + + uint32_t i = 0; + do { + vli >>= 7; + ++i; + } while (vli != 0); + + assert(i <= LZMA_VLI_BYTES_MAX); + return i; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/Makefile.inc b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/Makefile.inc new file mode 100644 index 00000000000..c7739b44223 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/Makefile.inc @@ -0,0 +1,23 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +liblzma_la_SOURCES += \ + delta/delta_common.c \ + delta/delta_common.h \ + delta/delta_private.h + +if COND_ENCODER_DELTA +liblzma_la_SOURCES += \ + delta/delta_encoder.c \ + delta/delta_encoder.h +endif + +if COND_DECODER_DELTA +liblzma_la_SOURCES += \ + delta/delta_decoder.c \ + delta/delta_decoder.h +endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_common.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_common.c new file mode 100644 index 00000000000..6d55ff6538e --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_common.c @@ -0,0 +1,73 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file delta_common.c +/// \brief Common stuff for Delta encoder and decoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "delta_common.h" +#include "delta_private.h" + + +static void +delta_coder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_next_end(&coder->next, allocator); + lzma_free(coder, allocator); + return; +} + + +extern lzma_ret +lzma_delta_coder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters, lzma_code_function code) +{ + // Allocate memory for the decoder if needed. + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + // End function is the same for encoder and decoder. + next->end = &delta_coder_end; + next->coder->next = LZMA_NEXT_CODER_INIT; + } + + // Coding function is different for encoder and decoder. + next->code = code; + + // Validate the options. + if (lzma_delta_coder_memusage(filters[0].options) == UINT64_MAX) + return LZMA_OPTIONS_ERROR; + + // Set the delta distance. + const lzma_options_delta *opt = filters[0].options; + next->coder->distance = opt->dist; + + // Initialize the rest of the variables. + next->coder->pos = 0; + memzero(next->coder->history, LZMA_DELTA_DIST_MAX); + + // Initialize the next decoder in the chain, if any. + return lzma_next_filter_init(&next->coder->next, + allocator, filters + 1); +} + + +extern uint64_t +lzma_delta_coder_memusage(const void *options) +{ + const lzma_options_delta *opt = options; + + if (opt == NULL || opt->type != LZMA_DELTA_TYPE_BYTE + || opt->dist < LZMA_DELTA_DIST_MIN + || opt->dist > LZMA_DELTA_DIST_MAX) + return UINT64_MAX; + + return sizeof(lzma_coder); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_common.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_common.h new file mode 100644 index 00000000000..7e7e1baaf68 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_common.h @@ -0,0 +1,20 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file delta_common.h +/// \brief Common stuff for Delta encoder and decoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_DELTA_COMMON_H +#define LZMA_DELTA_COMMON_H + +#include "common.h" + +extern uint64_t lzma_delta_coder_memusage(const void *options); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_decoder.c new file mode 100644 index 00000000000..2ddf163d8d0 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_decoder.c @@ -0,0 +1,75 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file delta_decoder.c +/// \brief Delta filter decoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "delta_decoder.h" +#include "delta_private.h" + + +static void +decode_buffer(lzma_coder *coder, uint8_t *buffer, size_t size) +{ + const size_t distance = coder->distance; + + for (size_t i = 0; i < size; ++i) { + buffer[i] += coder->history[(distance + coder->pos) & 0xFF]; + coder->history[coder->pos-- & 0xFF] = buffer[i]; + } +} + + +static lzma_ret +delta_decode(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + assert(coder->next.code != NULL); + + const size_t out_start = *out_pos; + + const lzma_ret ret = coder->next.code(coder->next.coder, allocator, + in, in_pos, in_size, out, out_pos, out_size, + action); + + decode_buffer(coder, out + out_start, *out_pos - out_start); + + return ret; +} + + +extern lzma_ret +lzma_delta_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters) +{ + return lzma_delta_coder_init(next, allocator, filters, &delta_decode); +} + + +extern lzma_ret +lzma_delta_props_decode(void **options, lzma_allocator *allocator, + const uint8_t *props, size_t props_size) +{ + if (props_size != 1) + return LZMA_OPTIONS_ERROR; + + lzma_options_delta *opt + = lzma_alloc(sizeof(lzma_options_delta), allocator); + if (opt == NULL) + return LZMA_MEM_ERROR; + + opt->type = LZMA_DELTA_TYPE_BYTE; + opt->dist = props[0] + 1; + + *options = opt; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_decoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_decoder.h new file mode 100644 index 00000000000..ae89acc59f8 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_decoder.h @@ -0,0 +1,25 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file delta_decoder.h +/// \brief Delta filter decoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_DELTA_DECODER_H +#define LZMA_DELTA_DECODER_H + +#include "delta_common.h" + +extern lzma_ret lzma_delta_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +extern lzma_ret lzma_delta_props_decode( + void **options, lzma_allocator *allocator, + const uint8_t *props, size_t props_size); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_encoder.c new file mode 100644 index 00000000000..0244673eae3 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_encoder.c @@ -0,0 +1,106 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file delta_encoder.c +/// \brief Delta filter encoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "delta_encoder.h" +#include "delta_private.h" + + +/// Copies and encodes the data at the same time. This is used when Delta +/// is the first filter in the chain (and thus the last filter in the +/// encoder's filter stack). +static void +copy_and_encode(lzma_coder *coder, + const uint8_t *restrict in, uint8_t *restrict out, size_t size) +{ + const size_t distance = coder->distance; + + for (size_t i = 0; i < size; ++i) { + const uint8_t tmp = coder->history[ + (distance + coder->pos) & 0xFF]; + coder->history[coder->pos-- & 0xFF] = in[i]; + out[i] = in[i] - tmp; + } +} + + +/// Encodes the data in place. This is used when we are the last filter +/// in the chain (and thus non-last filter in the encoder's filter stack). +static void +encode_in_place(lzma_coder *coder, uint8_t *buffer, size_t size) +{ + const size_t distance = coder->distance; + + for (size_t i = 0; i < size; ++i) { + const uint8_t tmp = coder->history[ + (distance + coder->pos) & 0xFF]; + coder->history[coder->pos-- & 0xFF] = buffer[i]; + buffer[i] -= tmp; + } +} + + +static lzma_ret +delta_encode(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + lzma_ret ret; + + if (coder->next.code == NULL) { + const size_t in_avail = in_size - *in_pos; + const size_t out_avail = out_size - *out_pos; + const size_t size = MIN(in_avail, out_avail); + + copy_and_encode(coder, in + *in_pos, out + *out_pos, size); + + *in_pos += size; + *out_pos += size; + + ret = action != LZMA_RUN && *in_pos == in_size + ? LZMA_STREAM_END : LZMA_OK; + + } else { + const size_t out_start = *out_pos; + + ret = coder->next.code(coder->next.coder, allocator, + in, in_pos, in_size, out, out_pos, out_size, + action); + + encode_in_place(coder, out + out_start, *out_pos - out_start); + } + + return ret; +} + + +extern lzma_ret +lzma_delta_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters) +{ + return lzma_delta_coder_init(next, allocator, filters, &delta_encode); +} + + +extern lzma_ret +lzma_delta_props_encode(const void *options, uint8_t *out) +{ + // The caller must have already validated the options, so it's + // LZMA_PROG_ERROR if they are invalid. + if (lzma_delta_coder_memusage(options) == UINT64_MAX) + return LZMA_PROG_ERROR; + + const lzma_options_delta *opt = options; + out[0] = opt->dist - LZMA_DELTA_DIST_MIN; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_encoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_encoder.h new file mode 100644 index 00000000000..a447862f205 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_encoder.h @@ -0,0 +1,23 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file delta_encoder.h +/// \brief Delta filter encoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_DELTA_ENCODER_H +#define LZMA_DELTA_ENCODER_H + +#include "delta_common.h" + +extern lzma_ret lzma_delta_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +extern lzma_ret lzma_delta_props_encode(const void *options, uint8_t *out); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_private.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_private.h new file mode 100644 index 00000000000..69be82e2f7d --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/delta/delta_private.h @@ -0,0 +1,37 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file delta_private.h +/// \brief Private common stuff for Delta encoder and decoder +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_DELTA_PRIVATE_H +#define LZMA_DELTA_PRIVATE_H + +#include "delta_common.h" + +struct lzma_coder_s { + /// Next coder in the chain + lzma_next_coder next; + + /// Delta distance + size_t distance; + + /// Position in history[] + uint8_t pos; + + /// Buffer to hold history of the original data + uint8_t history[LZMA_DELTA_DIST_MAX]; +}; + + +extern lzma_ret lzma_delta_coder_init( + lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters, lzma_code_function code); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/liblzma.pc.in b/Build/source/extra/xz-4.999.9beta/src/liblzma/liblzma.pc.in new file mode 100644 index 00000000000..eb3f6c75d38 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/liblzma.pc.in @@ -0,0 +1,19 @@ +# +# Author: Lasse Collin +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: liblzma +Description: General purpose data compression library +URL: @PACKAGE_HOMEPAGE@ +Version: @PACKAGE_VERSION@ +Cflags: -I${includedir} +Libs: -L${libdir} -llzma +Libs.private: @PTHREAD_CFLAGS@ @PTHREAD_LIBS@ diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/liblzma_w32res.rc b/Build/source/extra/xz-4.999.9beta/src/liblzma/liblzma_w32res.rc new file mode 100644 index 00000000000..d4d8159c7b4 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/liblzma_w32res.rc @@ -0,0 +1,12 @@ +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + */ + +#define MY_TYPE VFT_DLL +#define MY_NAME "liblzma" +#define MY_SUFFIX ".dll" +#define MY_DESC "liblzma data compression library" +#include "common_w32res.rc" diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/Makefile.inc b/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/Makefile.inc new file mode 100644 index 00000000000..470d59c09d3 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/Makefile.inc @@ -0,0 +1,21 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +if COND_ENCODER_LZ +liblzma_la_SOURCES += \ + lz/lz_encoder.c \ + lz/lz_encoder.h \ + lz/lz_encoder_hash.h \ + lz/lz_encoder_mf.c +endif + + +if COND_DECODER_LZ +liblzma_la_SOURCES += \ + lz/lz_decoder.c \ + lz/lz_decoder.h +endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_decoder.c new file mode 100644 index 00000000000..e91ad81c32a --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_decoder.c @@ -0,0 +1,299 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lz_decoder.c +/// \brief LZ out window +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +// liblzma supports multiple LZ77-based filters. The LZ part is shared +// between these filters. The LZ code takes care of dictionary handling +// and passing the data between filters in the chain. The filter-specific +// part decodes from the input buffer to the dictionary. + + +#include "lz_decoder.h" + + +struct lzma_coder_s { + /// Dictionary (history buffer) + lzma_dict dict; + + /// The actual LZ-based decoder e.g. LZMA + lzma_lz_decoder lz; + + /// Next filter in the chain, if any. Note that LZMA and LZMA2 are + /// only allowed as the last filter, but the long-range filter in + /// future can be in the middle of the chain. + lzma_next_coder next; + + /// True if the next filter in the chain has returned LZMA_STREAM_END. + bool next_finished; + + /// True if the LZ decoder (e.g. LZMA) has detected end of payload + /// marker. This may become true before next_finished becomes true. + bool this_finished; + + /// Temporary buffer needed when the LZ-based filter is not the last + /// filter in the chain. The output of the next filter is first + /// decoded into buffer[], which is then used as input for the actual + /// LZ-based decoder. + struct { + size_t pos; + size_t size; + uint8_t buffer[LZMA_BUFFER_SIZE]; + } temp; +}; + + +static void +lz_decoder_reset(lzma_coder *coder) +{ + coder->dict.pos = 0; + coder->dict.full = 0; + coder->dict.buf[coder->dict.size - 1] = '\0'; + coder->dict.need_reset = false; + return; +} + + +static lzma_ret +decode_buffer(lzma_coder *coder, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size) +{ + while (true) { + // Wrap the dictionary if needed. + if (coder->dict.pos == coder->dict.size) + coder->dict.pos = 0; + + // Store the current dictionary position. It is needed to know + // where to start copying to the out[] buffer. + const size_t dict_start = coder->dict.pos; + + // Calculate how much we allow coder->lz.code() to decode. + // It must not decode past the end of the dictionary + // buffer, and we don't want it to decode more than is + // actually needed to fill the out[] buffer. + coder->dict.limit = coder->dict.pos + MIN(out_size - *out_pos, + coder->dict.size - coder->dict.pos); + + // Call the coder->lz.code() to do the actual decoding. + const lzma_ret ret = coder->lz.code( + coder->lz.coder, &coder->dict, + in, in_pos, in_size); + + // Copy the decoded data from the dictionary to the out[] + // buffer. + const size_t copy_size = coder->dict.pos - dict_start; + assert(copy_size <= out_size - *out_pos); + memcpy(out + *out_pos, coder->dict.buf + dict_start, + copy_size); + *out_pos += copy_size; + + // Reset the dictionary if so requested by coder->lz.code(). + if (coder->dict.need_reset) { + lz_decoder_reset(coder); + + // Since we reset dictionary, we don't check if + // dictionary became full. + if (ret != LZMA_OK || *out_pos == out_size) + return ret; + } else { + // Return if everything got decoded or an error + // occurred, or if there's no more data to decode. + // + // Note that detecting if there's something to decode + // is done by looking if dictionary become full + // instead of looking if *in_pos == in_size. This + // is because it is possible that all the input was + // consumed already but some data is pending to be + // written to the dictionary. + if (ret != LZMA_OK || *out_pos == out_size + || coder->dict.pos < coder->dict.size) + return ret; + } + } +} + + +static lzma_ret +lz_decode(lzma_coder *coder, + lzma_allocator *allocator lzma_attribute((unused)), + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, + lzma_action action) +{ + if (coder->next.code == NULL) + return decode_buffer(coder, in, in_pos, in_size, + out, out_pos, out_size); + + // We aren't the last coder in the chain, we need to decode + // our input to a temporary buffer. + while (*out_pos < out_size) { + // Fill the temporary buffer if it is empty. + if (!coder->next_finished + && coder->temp.pos == coder->temp.size) { + coder->temp.pos = 0; + coder->temp.size = 0; + + const lzma_ret ret = coder->next.code( + coder->next.coder, + allocator, in, in_pos, in_size, + coder->temp.buffer, &coder->temp.size, + LZMA_BUFFER_SIZE, action); + + if (ret == LZMA_STREAM_END) + coder->next_finished = true; + else if (ret != LZMA_OK || coder->temp.size == 0) + return ret; + } + + if (coder->this_finished) { + if (coder->temp.size != 0) + return LZMA_DATA_ERROR; + + if (coder->next_finished) + return LZMA_STREAM_END; + + return LZMA_OK; + } + + const lzma_ret ret = decode_buffer(coder, coder->temp.buffer, + &coder->temp.pos, coder->temp.size, + out, out_pos, out_size); + + if (ret == LZMA_STREAM_END) + coder->this_finished = true; + else if (ret != LZMA_OK) + return ret; + else if (coder->next_finished && *out_pos < out_size) + return LZMA_DATA_ERROR; + } + + return LZMA_OK; +} + + +static void +lz_decoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_next_end(&coder->next, allocator); + lzma_free(coder->dict.buf, allocator); + + if (coder->lz.end != NULL) + coder->lz.end(coder->lz.coder, allocator); + else + lzma_free(coder->lz.coder, allocator); + + lzma_free(coder, allocator); + return; +} + + +extern lzma_ret +lzma_lz_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters, + lzma_ret (*lz_init)(lzma_lz_decoder *lz, + lzma_allocator *allocator, const void *options, + lzma_lz_options *lz_options)) +{ + // Allocate the base structure if it isn't already allocated. + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &lz_decode; + next->end = &lz_decoder_end; + + next->coder->dict.buf = NULL; + next->coder->dict.size = 0; + next->coder->lz = LZMA_LZ_DECODER_INIT; + next->coder->next = LZMA_NEXT_CODER_INIT; + } + + // Allocate and initialize the LZ-based decoder. It will also give + // us the dictionary size. + lzma_lz_options lz_options; + return_if_error(lz_init(&next->coder->lz, allocator, + filters[0].options, &lz_options)); + + // If the dictionary size is very small, increase it to 4096 bytes. + // This is to prevent constant wrapping of the dictionary, which + // would slow things down. The downside is that since we don't check + // separately for the real dictionary size, we may happily accept + // corrupt files. + if (lz_options.dict_size < 4096) + lz_options.dict_size = 4096; + + // Make dictionary size a multipe of 16. Some LZ-based decoders like + // LZMA use the lowest bits lzma_dict.pos to know the alignment of the + // data. Aligned buffer is also good when memcpying from the + // dictionary to the output buffer, since applications are + // recommended to give aligned buffers to liblzma. + // + // Avoid integer overflow. + if (lz_options.dict_size > SIZE_MAX - 15) + return LZMA_MEM_ERROR; + + lz_options.dict_size = (lz_options.dict_size + 15) & ~((size_t)(15)); + + // Allocate and initialize the dictionary. + if (next->coder->dict.size != lz_options.dict_size) { + lzma_free(next->coder->dict.buf, allocator); + next->coder->dict.buf + = lzma_alloc(lz_options.dict_size, allocator); + if (next->coder->dict.buf == NULL) + return LZMA_MEM_ERROR; + + next->coder->dict.size = lz_options.dict_size; + } + + lz_decoder_reset(next->coder); + + // Use the preset dictionary if it was given to us. + if (lz_options.preset_dict != NULL + && lz_options.preset_dict_size > 0) { + // If the preset dictionary is bigger than the actual + // dictionary, copy only the tail. + const size_t copy_size = MIN(lz_options.preset_dict_size, + lz_options.dict_size); + const size_t offset = lz_options.preset_dict_size - copy_size; + memcpy(next->coder->dict.buf, lz_options.preset_dict + offset, + copy_size); + next->coder->dict.pos = copy_size; + next->coder->dict.full = copy_size; + } + + // Miscellaneous initializations + next->coder->next_finished = false; + next->coder->this_finished = false; + next->coder->temp.pos = 0; + next->coder->temp.size = 0; + + // Initialize the next filter in the chain, if any. + return lzma_next_filter_init(&next->coder->next, allocator, + filters + 1); +} + + +extern uint64_t +lzma_lz_decoder_memusage(size_t dictionary_size) +{ + return sizeof(lzma_coder) + (uint64_t)(dictionary_size); +} + + +extern void +lzma_lz_decoder_uncompressed(lzma_coder *coder, lzma_vli uncompressed_size) +{ + coder->lz.set_uncompressed(coder->lz.coder, uncompressed_size); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_decoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_decoder.h new file mode 100644 index 00000000000..bf1609dbedf --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_decoder.h @@ -0,0 +1,234 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lz_decoder.h +/// \brief LZ out window +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_LZ_DECODER_H +#define LZMA_LZ_DECODER_H + +#include "common.h" + + +typedef struct { + /// Pointer to the dictionary buffer. It can be an allocated buffer + /// internal to liblzma, or it can a be a buffer given by the + /// application when in single-call mode (not implemented yet). + uint8_t *buf; + + /// Write position in dictionary. The next byte will be written to + /// buf[pos]. + size_t pos; + + /// Indicates how full the dictionary is. This is used by + /// dict_is_distance_valid() to detect corrupt files that would + /// read beyond the beginning of the dictionary. + size_t full; + + /// Write limit + size_t limit; + + /// Size of the dictionary + size_t size; + + /// True when dictionary should be reset before decoding more data. + bool need_reset; + +} lzma_dict; + + +typedef struct { + size_t dict_size; + const uint8_t *preset_dict; + size_t preset_dict_size; +} lzma_lz_options; + + +typedef struct { + /// Data specific to the LZ-based decoder + lzma_coder *coder; + + /// Function to decode from in[] to *dict + lzma_ret (*code)(lzma_coder *restrict coder, + lzma_dict *restrict dict, const uint8_t *restrict in, + size_t *restrict in_pos, size_t in_size); + + void (*reset)(lzma_coder *coder, const void *options); + + /// Set the uncompressed size + void (*set_uncompressed)(lzma_coder *coder, + lzma_vli uncompressed_size); + + /// Free allocated resources + void (*end)(lzma_coder *coder, lzma_allocator *allocator); + +} lzma_lz_decoder; + + +#define LZMA_LZ_DECODER_INIT \ + (lzma_lz_decoder){ \ + .coder = NULL, \ + .code = NULL, \ + .reset = NULL, \ + .set_uncompressed = NULL, \ + .end = NULL, \ + } + + +extern lzma_ret lzma_lz_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters, + lzma_ret (*lz_init)(lzma_lz_decoder *lz, + lzma_allocator *allocator, const void *options, + lzma_lz_options *lz_options)); + +extern uint64_t lzma_lz_decoder_memusage(size_t dictionary_size); + +extern void lzma_lz_decoder_uncompressed( + lzma_coder *coder, lzma_vli uncompressed_size); + + +////////////////////// +// Inline functions // +////////////////////// + +/// Get a byte from the history buffer. +static inline uint8_t +dict_get(const lzma_dict *const dict, const uint32_t distance) +{ + return dict->buf[dict->pos - distance - 1 + + (distance < dict->pos ? 0 : dict->size)]; +} + + +/// Test if dictionary is empty. +static inline bool +dict_is_empty(const lzma_dict *const dict) +{ + return dict->full == 0; +} + + +/// Validate the match distance +static inline bool +dict_is_distance_valid(const lzma_dict *const dict, const size_t distance) +{ + return dict->full > distance; +} + + +/// Repeat *len bytes at distance. +static inline bool +dict_repeat(lzma_dict *dict, uint32_t distance, uint32_t *len) +{ + // Don't write past the end of the dictionary. + const size_t dict_avail = dict->limit - dict->pos; + uint32_t left = MIN(dict_avail, *len); + *len -= left; + + // Repeat a block of data from the history. Because memcpy() is faster + // than copying byte by byte in a loop, the copying process gets split + // into three cases. + if (distance < left) { + // Source and target areas overlap, thus we can't use + // memcpy() nor even memmove() safely. + do { + dict->buf[dict->pos] = dict_get(dict, distance); + ++dict->pos; + } while (--left > 0); + + } else if (distance < dict->pos) { + // The easiest and fastest case + memcpy(dict->buf + dict->pos, + dict->buf + dict->pos - distance - 1, + left); + dict->pos += left; + + } else { + // The bigger the dictionary, the more rare this + // case occurs. We need to "wrap" the dict, thus + // we might need two memcpy() to copy all the data. + assert(dict->full == dict->size); + const uint32_t copy_pos + = dict->pos - distance - 1 + dict->size; + uint32_t copy_size = dict->size - copy_pos; + + if (copy_size < left) { + memmove(dict->buf + dict->pos, dict->buf + copy_pos, + copy_size); + dict->pos += copy_size; + copy_size = left - copy_size; + memcpy(dict->buf + dict->pos, dict->buf, copy_size); + dict->pos += copy_size; + } else { + memmove(dict->buf + dict->pos, dict->buf + copy_pos, + left); + dict->pos += left; + } + } + + // Update how full the dictionary is. + if (dict->full < dict->pos) + dict->full = dict->pos; + + return unlikely(*len != 0); +} + + +/// Puts one byte into the dictionary. Returns true if the dictionary was +/// already full and the byte couldn't be added. +static inline bool +dict_put(lzma_dict *dict, uint8_t byte) +{ + if (unlikely(dict->pos == dict->limit)) + return true; + + dict->buf[dict->pos++] = byte; + + if (dict->pos > dict->full) + dict->full = dict->pos; + + return false; +} + + +/// Copies arbitrary amount of data into the dictionary. +static inline void +dict_write(lzma_dict *restrict dict, const uint8_t *restrict in, + size_t *restrict in_pos, size_t in_size, + size_t *restrict left) +{ + // NOTE: If we are being given more data than the size of the + // dictionary, it could be possible to optimize the LZ decoder + // so that not everything needs to go through the dictionary. + // This shouldn't be very common thing in practice though, and + // the slowdown of one extra memcpy() isn't bad compared to how + // much time it would have taken if the data were compressed. + + if (in_size - *in_pos > *left) + in_size = *in_pos + *left; + + *left -= lzma_bufcpy(in, in_pos, in_size, + dict->buf, &dict->pos, dict->limit); + + if (dict->pos > dict->full) + dict->full = dict->pos; + + return; +} + + +static inline void +dict_reset(lzma_dict *dict) +{ + dict->need_reset = true; + return; +} + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder.c new file mode 100644 index 00000000000..5437546dd2b --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder.c @@ -0,0 +1,559 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lz_encoder.c +/// \brief LZ in window +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "lz_encoder.h" +#include "lz_encoder_hash.h" +#include "check.h" + + +struct lzma_coder_s { + /// LZ-based encoder e.g. LZMA + lzma_lz_encoder lz; + + /// History buffer and match finder + lzma_mf mf; + + /// Next coder in the chain + lzma_next_coder next; +}; + + +/// \brief Moves the data in the input window to free space for new data +/// +/// mf->buffer is a sliding input window, which keeps mf->keep_size_before +/// bytes of input history available all the time. Now and then we need to +/// "slide" the buffer to make space for the new data to the end of the +/// buffer. At the same time, data older than keep_size_before is dropped. +/// +static void +move_window(lzma_mf *mf) +{ + // Align the move to a multiple of 16 bytes. Some LZ-based encoders + // like LZMA use the lowest bits of mf->read_pos to know the + // alignment of the uncompressed data. We also get better speed + // for memmove() with aligned buffers. + assert(mf->read_pos > mf->keep_size_before); + const uint32_t move_offset + = (mf->read_pos - mf->keep_size_before) & ~UINT32_C(15); + + assert(mf->write_pos > move_offset); + const size_t move_size = mf->write_pos - move_offset; + + assert(move_offset + move_size <= mf->size); + + memmove(mf->buffer, mf->buffer + move_offset, move_size); + + mf->offset += move_offset; + mf->read_pos -= move_offset; + mf->read_limit -= move_offset; + mf->write_pos -= move_offset; + + return; +} + + +/// \brief Tries to fill the input window (mf->buffer) +/// +/// If we are the last encoder in the chain, our input data is in in[]. +/// Otherwise we call the next filter in the chain to process in[] and +/// write its output to mf->buffer. +/// +/// This function must not be called once it has returned LZMA_STREAM_END. +/// +static lzma_ret +fill_window(lzma_coder *coder, lzma_allocator *allocator, const uint8_t *in, + size_t *in_pos, size_t in_size, lzma_action action) +{ + assert(coder->mf.read_pos <= coder->mf.write_pos); + + // Move the sliding window if needed. + if (coder->mf.read_pos >= coder->mf.size - coder->mf.keep_size_after) + move_window(&coder->mf); + + // Maybe this is ugly, but lzma_mf uses uint32_t for most things + // (which I find cleanest), but we need size_t here when filling + // the history window. + size_t write_pos = coder->mf.write_pos; + size_t in_used; + lzma_ret ret; + if (coder->next.code == NULL) { + // Not using a filter, simply memcpy() as much as possible. + in_used = lzma_bufcpy(in, in_pos, in_size, coder->mf.buffer, + &write_pos, coder->mf.size); + + ret = action != LZMA_RUN && *in_pos == in_size + ? LZMA_STREAM_END : LZMA_OK; + + } else { + const size_t in_start = *in_pos; + ret = coder->next.code(coder->next.coder, allocator, + in, in_pos, in_size, + coder->mf.buffer, &write_pos, + coder->mf.size, action); + in_used = *in_pos - in_start; + } + + coder->mf.write_pos = write_pos; + + // If end of stream has been reached or flushing completed, we allow + // the encoder to process all the input (that is, read_pos is allowed + // to reach write_pos). Otherwise we keep keep_size_after bytes + // available as prebuffer. + if (ret == LZMA_STREAM_END) { + assert(*in_pos == in_size); + ret = LZMA_OK; + coder->mf.action = action; + coder->mf.read_limit = coder->mf.write_pos; + + } else if (coder->mf.write_pos > coder->mf.keep_size_after) { + // This needs to be done conditionally, because if we got + // only little new input, there may be too little input + // to do any encoding yet. + coder->mf.read_limit = coder->mf.write_pos + - coder->mf.keep_size_after; + } + + // Restart the match finder after finished LZMA_SYNC_FLUSH. + if (coder->mf.pending > 0 + && coder->mf.read_pos < coder->mf.read_limit) { + // Match finder may update coder->pending and expects it to + // start from zero, so use a temporary variable. + const size_t pending = coder->mf.pending; + coder->mf.pending = 0; + + // Rewind read_pos so that the match finder can hash + // the pending bytes. + assert(coder->mf.read_pos >= pending); + coder->mf.read_pos -= pending; + + // Call the skip function directly instead of using + // mf_skip(), since we don't want to touch mf->read_ahead. + coder->mf.skip(&coder->mf, pending); + } + + return ret; +} + + +static lzma_ret +lz_encode(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, + uint8_t *restrict out, size_t *restrict out_pos, + size_t out_size, lzma_action action) +{ + while (*out_pos < out_size + && (*in_pos < in_size || action != LZMA_RUN)) { + // Read more data to coder->mf.buffer if needed. + if (coder->mf.action == LZMA_RUN && coder->mf.read_pos + >= coder->mf.read_limit) + return_if_error(fill_window(coder, allocator, + in, in_pos, in_size, action)); + + // Encode + const lzma_ret ret = coder->lz.code(coder->lz.coder, + &coder->mf, out, out_pos, out_size); + if (ret != LZMA_OK) { + // Setting this to LZMA_RUN for cases when we are + // flushing. It doesn't matter when finishing or if + // an error occurred. + coder->mf.action = LZMA_RUN; + return ret; + } + } + + return LZMA_OK; +} + + +static bool +lz_encoder_prepare(lzma_mf *mf, lzma_allocator *allocator, + const lzma_lz_options *lz_options) +{ + // For now, the dictionary size is limited to 1.5 GiB. This may grow + // in the future if needed, but it needs a little more work than just + // changing this check. + if (lz_options->dict_size < LZMA_DICT_SIZE_MIN + || lz_options->dict_size + > (UINT32_C(1) << 30) + (UINT32_C(1) << 29) + || lz_options->nice_len > lz_options->match_len_max) + return true; + + mf->keep_size_before = lz_options->before_size + lz_options->dict_size; + + mf->keep_size_after = lz_options->after_size + + lz_options->match_len_max; + + // To avoid constant memmove()s, allocate some extra space. Since + // memmove()s become more expensive when the size of the buffer + // increases, we reserve more space when a large dictionary is + // used to make the memmove() calls rarer. + // + // This works with dictionaries up to about 3 GiB. If bigger + // dictionary is wanted, some extra work is needed: + // - Several variables in lzma_mf have to be changed from uint32_t + // to size_t. + // - Memory usage calculation needs something too, e.g. use uint64_t + // for mf->size. + uint32_t reserve = lz_options->dict_size / 2; + if (reserve > (UINT32_C(1) << 30)) + reserve /= 2; + + reserve += (lz_options->before_size + lz_options->match_len_max + + lz_options->after_size) / 2 + (UINT32_C(1) << 19); + + const uint32_t old_size = mf->size; + mf->size = mf->keep_size_before + reserve + mf->keep_size_after; + + // Deallocate the old history buffer if it exists but has different + // size than what is needed now. + if (mf->buffer != NULL && old_size != mf->size) { + lzma_free(mf->buffer, allocator); + mf->buffer = NULL; + } + + // Match finder options + mf->match_len_max = lz_options->match_len_max; + mf->nice_len = lz_options->nice_len; + + // cyclic_size has to stay smaller than 2 Gi. Note that this doesn't + // mean limitting dictionary size to less than 2 GiB. With a match + // finder that uses multibyte resolution (hashes start at e.g. every + // fourth byte), cyclic_size would stay below 2 Gi even when + // dictionary size is greater than 2 GiB. + // + // It would be possible to allow cyclic_size >= 2 Gi, but then we + // would need to be careful to use 64-bit types in various places + // (size_t could do since we would need bigger than 32-bit address + // space anyway). It would also require either zeroing a multigigabyte + // buffer at initialization (waste of time and RAM) or allow + // normalization in lz_encoder_mf.c to access uninitialized + // memory to keep the code simpler. The current way is simple and + // still allows pretty big dictionaries, so I don't expect these + // limits to change. + mf->cyclic_size = lz_options->dict_size + 1; + + // Validate the match finder ID and setup the function pointers. + switch (lz_options->match_finder) { +#ifdef HAVE_MF_HC3 + case LZMA_MF_HC3: + mf->find = &lzma_mf_hc3_find; + mf->skip = &lzma_mf_hc3_skip; + break; +#endif +#ifdef HAVE_MF_HC4 + case LZMA_MF_HC4: + mf->find = &lzma_mf_hc4_find; + mf->skip = &lzma_mf_hc4_skip; + break; +#endif +#ifdef HAVE_MF_BT2 + case LZMA_MF_BT2: + mf->find = &lzma_mf_bt2_find; + mf->skip = &lzma_mf_bt2_skip; + break; +#endif +#ifdef HAVE_MF_BT3 + case LZMA_MF_BT3: + mf->find = &lzma_mf_bt3_find; + mf->skip = &lzma_mf_bt3_skip; + break; +#endif +#ifdef HAVE_MF_BT4 + case LZMA_MF_BT4: + mf->find = &lzma_mf_bt4_find; + mf->skip = &lzma_mf_bt4_skip; + break; +#endif + + default: + return true; + } + + // Calculate the sizes of mf->hash and mf->son and check that + // nice_len is big enough for the selected match finder. + const uint32_t hash_bytes = lz_options->match_finder & 0x0F; + if (hash_bytes > mf->nice_len) + return true; + + const bool is_bt = (lz_options->match_finder & 0x10) != 0; + uint32_t hs; + + if (hash_bytes == 2) { + hs = 0xFFFF; + } else { + // Round dictionary size up to the next 2^n - 1 so it can + // be used as a hash mask. + hs = lz_options->dict_size - 1; + hs |= hs >> 1; + hs |= hs >> 2; + hs |= hs >> 4; + hs |= hs >> 8; + hs >>= 1; + hs |= 0xFFFF; + + if (hs > (UINT32_C(1) << 24)) { + if (hash_bytes == 3) + hs = (UINT32_C(1) << 24) - 1; + else + hs >>= 1; + } + } + + mf->hash_mask = hs; + + ++hs; + if (hash_bytes > 2) + hs += HASH_2_SIZE; + if (hash_bytes > 3) + hs += HASH_3_SIZE; +/* + No match finder uses this at the moment. + if (mf->hash_bytes > 4) + hs += HASH_4_SIZE; +*/ + + // If the above code calculating hs is modified, make sure that + // this assertion stays valid (UINT32_MAX / 5 is not strictly the + // exact limit). If it doesn't, you need to calculate that + // hash_size_sum + sons_count cannot overflow. + assert(hs < UINT32_MAX / 5); + + const uint32_t old_count = mf->hash_size_sum + mf->sons_count; + mf->hash_size_sum = hs; + mf->sons_count = mf->cyclic_size; + if (is_bt) + mf->sons_count *= 2; + + const uint32_t new_count = mf->hash_size_sum + mf->sons_count; + + // Deallocate the old hash array if it exists and has different size + // than what is needed now. + if (mf->hash != NULL && old_count != new_count) { + lzma_free(mf->hash, allocator); + mf->hash = NULL; + } + + // Maximum number of match finder cycles + mf->depth = lz_options->depth; + if (mf->depth == 0) { + mf->depth = 16 + (mf->nice_len / 2); + if (!is_bt) + mf->depth /= 2; + } + + return false; +} + + +static bool +lz_encoder_init(lzma_mf *mf, lzma_allocator *allocator, + const lzma_lz_options *lz_options) +{ + // Allocate the history buffer. + if (mf->buffer == NULL) { + mf->buffer = lzma_alloc(mf->size, allocator); + if (mf->buffer == NULL) + return true; + } + + // Use cyclic_size as initial mf->offset. This allows + // avoiding a few branches in the match finders. The downside is + // that match finder needs to be normalized more often, which may + // hurt performance with huge dictionaries. + mf->offset = mf->cyclic_size; + mf->read_pos = 0; + mf->read_ahead = 0; + mf->read_limit = 0; + mf->write_pos = 0; + mf->pending = 0; + + // Allocate match finder's hash array. + const size_t alloc_count = mf->hash_size_sum + mf->sons_count; + +#if UINT32_MAX >= SIZE_MAX / 4 + // Check for integer overflow. (Huge dictionaries are not + // possible on 32-bit CPU.) + if (alloc_count > SIZE_MAX / sizeof(uint32_t)) + return true; +#endif + + if (mf->hash == NULL) { + mf->hash = lzma_alloc(alloc_count * sizeof(uint32_t), + allocator); + if (mf->hash == NULL) + return true; + } + + mf->son = mf->hash + mf->hash_size_sum; + mf->cyclic_pos = 0; + + // Initialize the hash table. Since EMPTY_HASH_VALUE is zero, we + // can use memset(). +/* + for (uint32_t i = 0; i < hash_size_sum; ++i) + mf->hash[i] = EMPTY_HASH_VALUE; +*/ + memzero(mf->hash, (size_t)(mf->hash_size_sum) * sizeof(uint32_t)); + + // We don't need to initialize mf->son, but not doing that will + // make Valgrind complain in normalization (see normalize() in + // lz_encoder_mf.c). + // + // Skipping this initialization is *very* good when big dictionary is + // used but only small amount of data gets actually compressed: most + // of the mf->hash won't get actually allocated by the kernel, so + // we avoid wasting RAM and improve initialization speed a lot. + //memzero(mf->son, (size_t)(mf->sons_count) * sizeof(uint32_t)); + + // Handle preset dictionary. + if (lz_options->preset_dict != NULL + && lz_options->preset_dict_size > 0) { + // If the preset dictionary is bigger than the actual + // dictionary, use only the tail. + mf->write_pos = MIN(lz_options->preset_dict_size, mf->size); + memcpy(mf->buffer, lz_options->preset_dict + + lz_options->preset_dict_size - mf->write_pos, + mf->write_pos); + mf->action = LZMA_SYNC_FLUSH; + mf->skip(mf, mf->write_pos); + } + + mf->action = LZMA_RUN; + + return false; +} + + +extern uint64_t +lzma_lz_encoder_memusage(const lzma_lz_options *lz_options) +{ + // Old buffers must not exist when calling lz_encoder_prepare(). + lzma_mf mf = { + .buffer = NULL, + .hash = NULL, + }; + + // Setup the size information into mf. + if (lz_encoder_prepare(&mf, NULL, lz_options)) + return UINT64_MAX; + + // Calculate the memory usage. + return (uint64_t)(mf.hash_size_sum + mf.sons_count) + * sizeof(uint32_t) + + (uint64_t)(mf.size) + sizeof(lzma_coder); +} + + +static void +lz_encoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_next_end(&coder->next, allocator); + + lzma_free(coder->mf.hash, allocator); + lzma_free(coder->mf.buffer, allocator); + + if (coder->lz.end != NULL) + coder->lz.end(coder->lz.coder, allocator); + else + lzma_free(coder->lz.coder, allocator); + + lzma_free(coder, allocator); + return; +} + + +extern lzma_ret +lzma_lz_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters, + lzma_ret (*lz_init)(lzma_lz_encoder *lz, + lzma_allocator *allocator, const void *options, + lzma_lz_options *lz_options)) +{ +#ifdef HAVE_SMALL + // We need that the CRC32 table has been initialized. + lzma_crc32_init(); +#endif + + // Allocate and initialize the base data structure. + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &lz_encode; + next->end = &lz_encoder_end; + + next->coder->lz.coder = NULL; + next->coder->lz.code = NULL; + next->coder->lz.end = NULL; + + next->coder->mf.buffer = NULL; + next->coder->mf.hash = NULL; + + next->coder->next = LZMA_NEXT_CODER_INIT; + } + + // Initialize the LZ-based encoder. + lzma_lz_options lz_options; + return_if_error(lz_init(&next->coder->lz, allocator, + filters[0].options, &lz_options)); + + // Setup the size information into next->coder->mf and deallocate + // old buffers if they have wrong size. + if (lz_encoder_prepare(&next->coder->mf, allocator, &lz_options)) + return LZMA_OPTIONS_ERROR; + + // Allocate new buffers if needed, and do the rest of + // the initialization. + if (lz_encoder_init(&next->coder->mf, allocator, &lz_options)) + return LZMA_MEM_ERROR; + + // Initialize the next filter in the chain, if any. + return lzma_next_filter_init(&next->coder->next, allocator, + filters + 1); +} + + +extern LZMA_API(lzma_bool) +lzma_mf_is_supported(lzma_match_finder mf) +{ + bool ret = false; + +#ifdef HAVE_MF_HC3 + if (mf == LZMA_MF_HC3) + ret = true; +#endif + +#ifdef HAVE_MF_HC4 + if (mf == LZMA_MF_HC4) + ret = true; +#endif + +#ifdef HAVE_MF_BT2 + if (mf == LZMA_MF_BT2) + ret = true; +#endif + +#ifdef HAVE_MF_BT3 + if (mf == LZMA_MF_BT3) + ret = true; +#endif + +#ifdef HAVE_MF_BT4 + if (mf == LZMA_MF_BT4) + ret = true; +#endif + + return ret; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder.h new file mode 100644 index 00000000000..35e9ebbfc4d --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder.h @@ -0,0 +1,324 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lz_encoder.h +/// \brief LZ in window and match finder API +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_LZ_ENCODER_H +#define LZMA_LZ_ENCODER_H + +#include "common.h" + + +/// A table of these is used by the LZ-based encoder to hold +/// the length-distance pairs found by the match finder. +typedef struct { + uint32_t len; + uint32_t dist; +} lzma_match; + + +typedef struct lzma_mf_s lzma_mf; +struct lzma_mf_s { + /////////////// + // In Window // + /////////////// + + /// Pointer to buffer with data to be compressed + uint8_t *buffer; + + /// Total size of the allocated buffer (that is, including all + /// the extra space) + uint32_t size; + + /// Number of bytes that must be kept available in our input history. + /// That is, once keep_size_before bytes have been processed, + /// buffer[read_pos - keep_size_before] is the oldest byte that + /// must be available for reading. + uint32_t keep_size_before; + + /// Number of bytes that must be kept in buffer after read_pos. + /// That is, read_pos <= write_pos - keep_size_after as long as + /// action is LZMA_RUN; when action != LZMA_RUN, read_pos is allowed + /// to reach write_pos so that the last bytes get encoded too. + uint32_t keep_size_after; + + /// Match finders store locations of matches using 32-bit integers. + /// To avoid adjusting several megabytes of integers every time the + /// input window is moved with move_window, we only adjust the + /// offset of the buffer. Thus, buffer[value_in_hash_table - offset] + /// is the byte pointed by value_in_hash_table. + uint32_t offset; + + /// buffer[read_pos] is the next byte to run through the match + /// finder. This is incremented in the match finder once the byte + /// has been processed. + uint32_t read_pos; + + /// Number of bytes that have been ran through the match finder, but + /// which haven't been encoded by the LZ-based encoder yet. + uint32_t read_ahead; + + /// As long as read_pos is less than read_limit, there is enough + /// input available in buffer for at least one encoding loop. + /// + /// Because of the stateful API, read_limit may and will get greater + /// than read_pos quite often. This is taken into account when + /// calculating the value for keep_size_after. + uint32_t read_limit; + + /// buffer[write_pos] is the first byte that doesn't contain valid + /// uncompressed data; that is, the next input byte will be copied + /// to buffer[write_pos]. + uint32_t write_pos; + + /// Number of bytes not hashed before read_pos. This is needed to + /// restart the match finder after LZMA_SYNC_FLUSH. + uint32_t pending; + + ////////////////// + // Match Finder // + ////////////////// + + /// Find matches. Returns the number of distance-length pairs written + /// to the matches array. This is called only via lzma_mf_find(). + uint32_t (*find)(lzma_mf *mf, lzma_match *matches); + + /// Skips num bytes. This is like find() but doesn't make the + /// distance-length pairs available, thus being a little faster. + /// This is called only via mf_skip(). + void (*skip)(lzma_mf *mf, uint32_t num); + + uint32_t *hash; + uint32_t *son; + uint32_t cyclic_pos; + uint32_t cyclic_size; // Must be dictionary size + 1. + uint32_t hash_mask; + + /// Maximum number of loops in the match finder + uint32_t depth; + + /// Maximum length of a match that the match finder will try to find. + uint32_t nice_len; + + /// Maximum length of a match supported by the LZ-based encoder. + /// If the longest match found by the match finder is nice_len, + /// mf_find() tries to expand it up to match_len_max bytes. + uint32_t match_len_max; + + /// When running out of input, binary tree match finders need to know + /// if it is due to flushing or finishing. The action is used also + /// by the LZ-based encoders themselves. + lzma_action action; + + /// Number of elements in hash[] + uint32_t hash_size_sum; + + /// Number of elements in son[] + uint32_t sons_count; +}; + + +typedef struct { + /// Extra amount of data to keep available before the "actual" + /// dictionary. + size_t before_size; + + /// Size of the history buffer + size_t dict_size; + + /// Extra amount of data to keep available after the "actual" + /// dictionary. + size_t after_size; + + /// Maximum length of a match that the LZ-based encoder can accept. + /// This is used to extend matches of length nice_len to the + /// maximum possible length. + size_t match_len_max; + + /// Match finder will search matches of at maximum of this length. + /// This must be less than or equal to match_len_max. + size_t nice_len; + + /// Type of the match finder to use + lzma_match_finder match_finder; + + /// Maximum search depth + uint32_t depth; + + /// TODO: Comment + const uint8_t *preset_dict; + + uint32_t preset_dict_size; + +} lzma_lz_options; + + +// The total usable buffer space at any moment outside the match finder: +// before_size + dict_size + after_size + match_len_max +// +// In reality, there's some extra space allocated to prevent the number of +// memmove() calls reasonable. The bigger the dict_size is, the bigger +// this extra buffer will be since with bigger dictionaries memmove() would +// also take longer. +// +// A single encoder loop in the LZ-based encoder may call the match finder +// (mf_find() or mf_skip()) at maximum of after_size times. +// In other words, a single encoder loop may advance lzma_mf.read_pos at +// maximum of after_size times. Since matches are looked up to +// lzma_mf.buffer[lzma_mf.read_pos + match_len_max - 1], the total +// amount of extra buffer needed after dict_size becomes +// after_size + match_len_max. +// +// before_size has two uses. The first one is to keep literals available +// in cases when the LZ-based encoder has made some read ahead. +// TODO: Maybe this could be changed by making the LZ-based encoders to +// store the actual literals as they do with length-distance pairs. +// +// Alrogithms such as LZMA2 first try to compress a chunk, and then check +// if the encoded result is smaller than the uncompressed one. If the chunk +// was uncompressible, it is better to store it in uncompressed form in +// the output stream. To do this, the whole uncompressed chunk has to be +// still available in the history buffer. before_size achieves that. + + +typedef struct { + /// Data specific to the LZ-based encoder + lzma_coder *coder; + + /// Function to encode from *dict to out[] + lzma_ret (*code)(lzma_coder *restrict coder, + lzma_mf *restrict mf, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size); + + /// Free allocated resources + void (*end)(lzma_coder *coder, lzma_allocator *allocator); + +} lzma_lz_encoder; + + +// Basic steps: +// 1. Input gets copied into the dictionary. +// 2. Data in dictionary gets run through the match finder byte by byte. +// 3. The literals and matches are encoded using e.g. LZMA. +// +// The bytes that have been ran through the match finder, but not encoded yet, +// are called `read ahead'. + + +/// Get pointer to the first byte not ran through the match finder +static inline const uint8_t * +mf_ptr(const lzma_mf *mf) +{ + return mf->buffer + mf->read_pos; +} + + +/// Get the number of bytes that haven't been ran through the match finder yet. +static inline uint32_t +mf_avail(const lzma_mf *mf) +{ + return mf->write_pos - mf->read_pos; +} + + +/// Get the number of bytes that haven't been encoded yet (some of these +/// bytes may have been ran through the match finder though). +static inline uint32_t +mf_unencoded(const lzma_mf *mf) +{ + return mf->write_pos - mf->read_pos + mf->read_ahead; +} + + +/// Calculate the absolute offset from the beginning of the most recent +/// dictionary reset. Only the lowest four bits are important, so there's no +/// problem that we don't know the 64-bit size of the data encoded so far. +/// +/// NOTE: When moving the input window, we need to do it so that the lowest +/// bits of dict->read_pos are not modified to keep this macro working +/// as intended. +static inline uint32_t +mf_position(const lzma_mf *mf) +{ + return mf->read_pos - mf->read_ahead; +} + + +/// Since everything else begins with mf_, use it also for lzma_mf_find(). +#define mf_find lzma_mf_find + + +/// Skip the given number of bytes. This is used when a good match was found. +/// For example, if mf_find() finds a match of 200 bytes long, the first byte +/// of that match was already consumed by mf_find(), and the rest 199 bytes +/// have to be skipped with mf_skip(mf, 199). +static inline void +mf_skip(lzma_mf *mf, uint32_t amount) +{ + if (amount != 0) { + mf->skip(mf, amount); + mf->read_ahead += amount; + } +} + + +/// Copies at maximum of *left amount of bytes from the history buffer +/// to out[]. This is needed by LZMA2 to encode uncompressed chunks. +static inline void +mf_read(lzma_mf *mf, uint8_t *out, size_t *out_pos, size_t out_size, + size_t *left) +{ + const size_t out_avail = out_size - *out_pos; + const size_t copy_size = MIN(out_avail, *left); + + assert(mf->read_ahead == 0); + assert(mf->read_pos >= *left); + + memcpy(out + *out_pos, mf->buffer + mf->read_pos - *left, + copy_size); + + *out_pos += copy_size; + *left -= copy_size; + return; +} + + +extern lzma_ret lzma_lz_encoder_init( + lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters, + lzma_ret (*lz_init)(lzma_lz_encoder *lz, + lzma_allocator *allocator, const void *options, + lzma_lz_options *lz_options)); + + +extern uint64_t lzma_lz_encoder_memusage(const lzma_lz_options *lz_options); + + +// These are only for LZ encoder's internal use. +extern uint32_t lzma_mf_find( + lzma_mf *mf, uint32_t *count, lzma_match *matches); + +extern uint32_t lzma_mf_hc3_find(lzma_mf *dict, lzma_match *matches); +extern void lzma_mf_hc3_skip(lzma_mf *dict, uint32_t amount); + +extern uint32_t lzma_mf_hc4_find(lzma_mf *dict, lzma_match *matches); +extern void lzma_mf_hc4_skip(lzma_mf *dict, uint32_t amount); + +extern uint32_t lzma_mf_bt2_find(lzma_mf *dict, lzma_match *matches); +extern void lzma_mf_bt2_skip(lzma_mf *dict, uint32_t amount); + +extern uint32_t lzma_mf_bt3_find(lzma_mf *dict, lzma_match *matches); +extern void lzma_mf_bt3_skip(lzma_mf *dict, uint32_t amount); + +extern uint32_t lzma_mf_bt4_find(lzma_mf *dict, lzma_match *matches); +extern void lzma_mf_bt4_skip(lzma_mf *dict, uint32_t amount); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder_hash.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder_hash.h new file mode 100644 index 00000000000..dd4b1f1906b --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder_hash.h @@ -0,0 +1,97 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lz_encoder_hash.h +/// \brief Hash macros for match finders +// +// Author: Igor Pavlov +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_LZ_ENCODER_HASH_H +#define LZMA_LZ_ENCODER_HASH_H + +#define HASH_2_SIZE (UINT32_C(1) << 10) +#define HASH_3_SIZE (UINT32_C(1) << 16) +#define HASH_4_SIZE (UINT32_C(1) << 20) + +#define HASH_2_MASK (HASH_2_SIZE - 1) +#define HASH_3_MASK (HASH_3_SIZE - 1) +#define HASH_4_MASK (HASH_4_SIZE - 1) + +#define FIX_3_HASH_SIZE (HASH_2_SIZE) +#define FIX_4_HASH_SIZE (HASH_2_SIZE + HASH_3_SIZE) +#define FIX_5_HASH_SIZE (HASH_2_SIZE + HASH_3_SIZE + HASH_4_SIZE) + +// TODO Benchmark, and probably doesn't need to be endian dependent. +#if !defined(WORDS_BIGENDIAN) && defined(HAVE_FAST_UNALIGNED_ACCESS) +# define hash_2_calc() \ + const uint32_t hash_value = *(const uint16_t *)(cur); +#else +# define hash_2_calc() \ + const uint32_t hash_value \ + = (uint32_t)(cur[0]) | ((uint32_t)(cur[1]) << 8) +#endif + +#define hash_3_calc() \ + const uint32_t temp = lzma_crc32_table[0][cur[0]] ^ cur[1]; \ + const uint32_t hash_2_value = temp & HASH_2_MASK; \ + const uint32_t hash_value \ + = (temp ^ ((uint32_t)(cur[2]) << 8)) & mf->hash_mask + +#define hash_4_calc() \ + const uint32_t temp = lzma_crc32_table[0][cur[0]] ^ cur[1]; \ + const uint32_t hash_2_value = temp & HASH_2_MASK; \ + const uint32_t hash_3_value \ + = (temp ^ ((uint32_t)(cur[2]) << 8)) & HASH_3_MASK; \ + const uint32_t hash_value = (temp ^ ((uint32_t)(cur[2]) << 8) \ + ^ (lzma_crc32_table[0][cur[3]] << 5)) & mf->hash_mask + + +// The following are not currently used. + +#define hash_5_calc() \ + const uint32_t temp = lzma_crc32_table[0][cur[0]] ^ cur[1]; \ + const uint32_t hash_2_value = temp & HASH_2_MASK; \ + const uint32_t hash_3_value \ + = (temp ^ ((uint32_t)(cur[2]) << 8)) & HASH_3_MASK; \ + uint32_t hash_4_value = (temp ^ ((uint32_t)(cur[2]) << 8) ^ \ + ^ lzma_crc32_table[0][cur[3]] << 5); \ + const uint32_t hash_value \ + = (hash_4_value ^ (lzma_crc32_table[0][cur[4]] << 3)) \ + & mf->hash_mask; \ + hash_4_value &= HASH_4_MASK + +/* +#define hash_zip_calc() \ + const uint32_t hash_value \ + = (((uint32_t)(cur[0]) | ((uint32_t)(cur[1]) << 8)) \ + ^ lzma_crc32_table[0][cur[2]]) & 0xFFFF +*/ + +#define hash_zip_calc() \ + const uint32_t hash_value \ + = (((uint32_t)(cur[2]) | ((uint32_t)(cur[0]) << 8)) \ + ^ lzma_crc32_table[0][cur[1]]) & 0xFFFF + +#define mt_hash_2_calc() \ + const uint32_t hash_2_value \ + = (lzma_crc32_table[0][cur[0]] ^ cur[1]) & HASH_2_MASK + +#define mt_hash_3_calc() \ + const uint32_t temp = lzma_crc32_table[0][cur[0]] ^ cur[1]; \ + const uint32_t hash_2_value = temp & HASH_2_MASK; \ + const uint32_t hash_3_value \ + = (temp ^ ((uint32_t)(cur[2]) << 8)) & HASH_3_MASK + +#define mt_hash_4_calc() \ + const uint32_t temp = lzma_crc32_table[0][cur[0]] ^ cur[1]; \ + const uint32_t hash_2_value = temp & HASH_2_MASK; \ + const uint32_t hash_3_value \ + = (temp ^ ((uint32_t)(cur[2]) << 8)) & HASH_3_MASK; \ + const uint32_t hash_4_value = (temp ^ ((uint32_t)(cur[2]) << 8) ^ \ + (lzma_crc32_table[0][cur[3]] << 5)) & HASH_4_MASK + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder_mf.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder_mf.c new file mode 100644 index 00000000000..e48de4fee93 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lz/lz_encoder_mf.c @@ -0,0 +1,754 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lz_encoder_mf.c +/// \brief Match finders +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "lz_encoder.h" +#include "lz_encoder_hash.h" +#include "check.h" + + +/// \brief Find matches starting from the current byte +/// +/// \return The length of the longest match found +extern uint32_t +lzma_mf_find(lzma_mf *mf, uint32_t *count_ptr, lzma_match *matches) +{ + // Call the match finder. It returns the number of length-distance + // pairs found. + // FIXME: Minimum count is zero, what _exactly_ is the maximum? + const uint32_t count = mf->find(mf, matches); + + // Length of the longest match; assume that no matches were found + // and thus the maximum length is zero. + uint32_t len_best = 0; + + if (count > 0) { +#ifndef NDEBUG + // Validate the matches. + for (uint32_t i = 0; i < count; ++i) { + assert(matches[i].len <= mf->nice_len); + assert(matches[i].dist < mf->read_pos); + assert(memcmp(mf_ptr(mf) - 1, + mf_ptr(mf) - matches[i].dist - 2, + matches[i].len) == 0); + } +#endif + + // The last used element in the array contains + // the longest match. + len_best = matches[count - 1].len; + + // If a match of maximum search length was found, try to + // extend the match to maximum possible length. + if (len_best == mf->nice_len) { + // The limit for the match length is either the + // maximum match length supported by the LZ-based + // encoder or the number of bytes left in the + // dictionary, whichever is smaller. + uint32_t limit = mf_avail(mf) + 1; + if (limit > mf->match_len_max) + limit = mf->match_len_max; + + // Pointer to the byte we just ran through + // the match finder. + const uint8_t *p1 = mf_ptr(mf) - 1; + + // Pointer to the beginning of the match. We need -1 + // here because the match distances are zero based. + const uint8_t *p2 = p1 - matches[count - 1].dist - 1; + + while (len_best < limit + && p1[len_best] == p2[len_best]) + ++len_best; + } + } + + *count_ptr = count; + + // Finally update the read position to indicate that match finder was + // run for this dictionary offset. + ++mf->read_ahead; + + return len_best; +} + + +/// Hash value to indicate unused element in the hash. Since we start the +/// positions from dict_size + 1, zero is always too far to qualify +/// as usable match position. +#define EMPTY_HASH_VALUE 0 + + +/// Normalization must be done when lzma_mf.offset + lzma_mf.read_pos +/// reaches MUST_NORMALIZE_POS. +#define MUST_NORMALIZE_POS UINT32_MAX + + +/// \brief Normalizes hash values +/// +/// The hash arrays store positions of match candidates. The positions are +/// relative to an arbitrary offset that is not the same as the absolute +/// offset in the input stream. The relative position of the current byte +/// is lzma_mf.offset + lzma_mf.read_pos. The distances of the matches are +/// the differences of the current read position and the position found from +/// the hash. +/// +/// To prevent integer overflows of the offsets stored in the hash arrays, +/// we need to "normalize" the stored values now and then. During the +/// normalization, we drop values that indicate distance greater than the +/// dictionary size, thus making space for new values. +static void +normalize(lzma_mf *mf) +{ + assert(mf->read_pos + mf->offset == MUST_NORMALIZE_POS); + + // In future we may not want to touch the lowest bits, because there + // may be match finders that use larger resolution than one byte. + const uint32_t subvalue + = (MUST_NORMALIZE_POS - mf->cyclic_size); + // & (~(UINT32_C(1) << 10) - 1); + + const uint32_t count = mf->hash_size_sum + mf->sons_count; + uint32_t *hash = mf->hash; + + for (uint32_t i = 0; i < count; ++i) { + // If the distance is greater than the dictionary size, + // we can simply mark the hash element as empty. + // + // NOTE: Only the first mf->hash_size_sum elements are + // initialized for sure. There may be uninitialized elements + // in mf->son. Since we go through both mf->hash and + // mf->son here in normalization, Valgrind may complain + // that the "if" below depends on uninitialized value. In + // this case it is safe to ignore the warning. See also the + // comments in lz_encoder_init() in lz_encoder.c. + if (hash[i] <= subvalue) + hash[i] = EMPTY_HASH_VALUE; + else + hash[i] -= subvalue; + } + + // Update offset to match the new locations. + mf->offset -= subvalue; + + return; +} + + +/// Mark the current byte as processed from point of view of the match finder. +static void +move_pos(lzma_mf *mf) +{ + if (++mf->cyclic_pos == mf->cyclic_size) + mf->cyclic_pos = 0; + + ++mf->read_pos; + assert(mf->read_pos <= mf->write_pos); + + if (unlikely(mf->read_pos + mf->offset == UINT32_MAX)) + normalize(mf); +} + + +/// When flushing, we cannot run the match finder unless there is nice_len +/// bytes available in the dictionary. Instead, we skip running the match +/// finder (indicating that no match was found), and count how many bytes we +/// have ignored this way. +/// +/// When new data is given after the flushing was completed, the match finder +/// is restarted by rewinding mf->read_pos backwards by mf->pending. Then +/// the missed bytes are added to the hash using the match finder's skip +/// function (with small amount of input, it may start using mf->pending +/// again if flushing). +/// +/// Due to this rewinding, we don't touch cyclic_pos or test for +/// normalization. It will be done when the match finder's skip function +/// catches up after a flush. +static void +move_pending(lzma_mf *mf) +{ + ++mf->read_pos; + assert(mf->read_pos <= mf->write_pos); + ++mf->pending; +} + + +/// Calculate len_limit and determine if there is enough input to run +/// the actual match finder code. Sets up "cur" and "pos". This macro +/// is used by all find functions and binary tree skip functions. Hash +/// chain skip function doesn't need len_limit so a simpler code is used +/// in them. +#define header(is_bt, len_min, ret_op) \ + uint32_t len_limit = mf_avail(mf); \ + if (mf->nice_len <= len_limit) { \ + len_limit = mf->nice_len; \ + } else if (len_limit < (len_min) \ + || (is_bt && mf->action == LZMA_SYNC_FLUSH)) { \ + assert(mf->action != LZMA_RUN); \ + move_pending(mf); \ + ret_op; \ + } \ + const uint8_t *cur = mf_ptr(mf); \ + const uint32_t pos = mf->read_pos + mf->offset + + +/// Header for find functions. "return 0" indicates that zero matches +/// were found. +#define header_find(is_bt, len_min) \ + header(is_bt, len_min, return 0); \ + uint32_t matches_count = 0 + + +/// Header for a loop in a skip function. "continue" tells to skip the rest +/// of the code in the loop. +#define header_skip(is_bt, len_min) \ + header(is_bt, len_min, continue) + + +/// Calls hc_find_func() or bt_find_func() and calculates the total number +/// of matches found. Updates the dictionary position and returns the number +/// of matches found. +#define call_find(func, len_best) \ +do { \ + matches_count = func(len_limit, pos, cur, cur_match, mf->depth, \ + mf->son, mf->cyclic_pos, mf->cyclic_size, \ + matches + matches_count, len_best) \ + - matches; \ + move_pos(mf); \ + return matches_count; \ +} while (0) + + +//////////////// +// Hash Chain // +//////////////// + +#if defined(HAVE_MF_HC3) || defined(HAVE_MF_HC4) +/// +/// +/// \param len_limit Don't look for matches longer than len_limit. +/// \param pos lzma_mf.read_pos + lzma_mf.offset +/// \param cur Pointer to current byte (mf_ptr(mf)) +/// \param cur_match Start position of the current match candidate +/// \param depth Maximum length of the hash chain +/// \param son lzma_mf.son (contains the hash chain) +/// \param cyclic_pos +/// \param cyclic_size +/// \param matches Array to hold the matches. +/// \param len_best The length of the longest match found so far. +static lzma_match * +hc_find_func( + const uint32_t len_limit, + const uint32_t pos, + const uint8_t *const cur, + uint32_t cur_match, + uint32_t depth, + uint32_t *const son, + const uint32_t cyclic_pos, + const uint32_t cyclic_size, + lzma_match *matches, + uint32_t len_best) +{ + son[cyclic_pos] = cur_match; + + while (true) { + const uint32_t delta = pos - cur_match; + if (depth-- == 0 || delta >= cyclic_size) + return matches; + + const uint8_t *const pb = cur - delta; + cur_match = son[cyclic_pos - delta + + (delta > cyclic_pos ? cyclic_size : 0)]; + + if (pb[len_best] == cur[len_best] && pb[0] == cur[0]) { + uint32_t len = 0; + while (++len != len_limit) + if (pb[len] != cur[len]) + break; + + if (len_best < len) { + len_best = len; + matches->len = len; + matches->dist = delta - 1; + ++matches; + + if (len == len_limit) + return matches; + } + } + } +} + + +#define hc_find(len_best) \ + call_find(hc_find_func, len_best) + + +#define hc_skip() \ +do { \ + mf->son[mf->cyclic_pos] = cur_match; \ + move_pos(mf); \ +} while (0) + +#endif + + +#ifdef HAVE_MF_HC3 +extern uint32_t +lzma_mf_hc3_find(lzma_mf *mf, lzma_match *matches) +{ + header_find(false, 3); + + hash_3_calc(); + + const uint32_t delta2 = pos - mf->hash[hash_2_value]; + const uint32_t cur_match = mf->hash[FIX_3_HASH_SIZE + hash_value]; + + mf->hash[hash_2_value] = pos; + mf->hash[FIX_3_HASH_SIZE + hash_value] = pos; + + uint32_t len_best = 2; + + if (delta2 < mf->cyclic_size && *(cur - delta2) == *cur) { + for ( ; len_best != len_limit; ++len_best) + if (*(cur + len_best - delta2) != cur[len_best]) + break; + + matches[0].len = len_best; + matches[0].dist = delta2 - 1; + matches_count = 1; + + if (len_best == len_limit) { + hc_skip(); + return 1; // matches_count + } + } + + hc_find(len_best); +} + + +extern void +lzma_mf_hc3_skip(lzma_mf *mf, uint32_t amount) +{ + do { + if (mf_avail(mf) < 3) { + move_pending(mf); + continue; + } + + const uint8_t *cur = mf_ptr(mf); + const uint32_t pos = mf->read_pos + mf->offset; + + hash_3_calc(); + + const uint32_t cur_match + = mf->hash[FIX_3_HASH_SIZE + hash_value]; + + mf->hash[hash_2_value] = pos; + mf->hash[FIX_3_HASH_SIZE + hash_value] = pos; + + hc_skip(); + + } while (--amount != 0); +} +#endif + + +#ifdef HAVE_MF_HC4 +extern uint32_t +lzma_mf_hc4_find(lzma_mf *mf, lzma_match *matches) +{ + header_find(false, 4); + + hash_4_calc(); + + uint32_t delta2 = pos - mf->hash[hash_2_value]; + const uint32_t delta3 + = pos - mf->hash[FIX_3_HASH_SIZE + hash_3_value]; + const uint32_t cur_match = mf->hash[FIX_4_HASH_SIZE + hash_value]; + + mf->hash[hash_2_value ] = pos; + mf->hash[FIX_3_HASH_SIZE + hash_3_value] = pos; + mf->hash[FIX_4_HASH_SIZE + hash_value] = pos; + + uint32_t len_best = 1; + + if (delta2 < mf->cyclic_size && *(cur - delta2) == *cur) { + len_best = 2; + matches[0].len = 2; + matches[0].dist = delta2 - 1; + matches_count = 1; + } + + if (delta2 != delta3 && delta3 < mf->cyclic_size + && *(cur - delta3) == *cur) { + len_best = 3; + matches[matches_count++].dist = delta3 - 1; + delta2 = delta3; + } + + if (matches_count != 0) { + for ( ; len_best != len_limit; ++len_best) + if (*(cur + len_best - delta2) != cur[len_best]) + break; + + matches[matches_count - 1].len = len_best; + + if (len_best == len_limit) { + hc_skip(); + return matches_count; + } + } + + if (len_best < 3) + len_best = 3; + + hc_find(len_best); +} + + +extern void +lzma_mf_hc4_skip(lzma_mf *mf, uint32_t amount) +{ + do { + if (mf_avail(mf) < 4) { + move_pending(mf); + continue; + } + + const uint8_t *cur = mf_ptr(mf); + const uint32_t pos = mf->read_pos + mf->offset; + + hash_4_calc(); + + const uint32_t cur_match + = mf->hash[FIX_4_HASH_SIZE + hash_value]; + + mf->hash[hash_2_value] = pos; + mf->hash[FIX_3_HASH_SIZE + hash_3_value] = pos; + mf->hash[FIX_4_HASH_SIZE + hash_value] = pos; + + hc_skip(); + + } while (--amount != 0); +} +#endif + + +///////////////// +// Binary Tree // +///////////////// + +#if defined(HAVE_MF_BT2) || defined(HAVE_MF_BT3) || defined(HAVE_MF_BT4) +static lzma_match * +bt_find_func( + const uint32_t len_limit, + const uint32_t pos, + const uint8_t *const cur, + uint32_t cur_match, + uint32_t depth, + uint32_t *const son, + const uint32_t cyclic_pos, + const uint32_t cyclic_size, + lzma_match *matches, + uint32_t len_best) +{ + uint32_t *ptr0 = son + (cyclic_pos << 1) + 1; + uint32_t *ptr1 = son + (cyclic_pos << 1); + + uint32_t len0 = 0; + uint32_t len1 = 0; + + while (true) { + const uint32_t delta = pos - cur_match; + if (depth-- == 0 || delta >= cyclic_size) { + *ptr0 = EMPTY_HASH_VALUE; + *ptr1 = EMPTY_HASH_VALUE; + return matches; + } + + uint32_t *const pair = son + ((cyclic_pos - delta + + (delta > cyclic_pos ? cyclic_size : 0)) + << 1); + + const uint8_t *const pb = cur - delta; + uint32_t len = MIN(len0, len1); + + if (pb[len] == cur[len]) { + while (++len != len_limit) + if (pb[len] != cur[len]) + break; + + if (len_best < len) { + len_best = len; + matches->len = len; + matches->dist = delta - 1; + ++matches; + + if (len == len_limit) { + *ptr1 = pair[0]; + *ptr0 = pair[1]; + return matches; + } + } + } + + if (pb[len] < cur[len]) { + *ptr1 = cur_match; + ptr1 = pair + 1; + cur_match = *ptr1; + len1 = len; + } else { + *ptr0 = cur_match; + ptr0 = pair; + cur_match = *ptr0; + len0 = len; + } + } +} + + +static void +bt_skip_func( + const uint32_t len_limit, + const uint32_t pos, + const uint8_t *const cur, + uint32_t cur_match, + uint32_t depth, + uint32_t *const son, + const uint32_t cyclic_pos, + const uint32_t cyclic_size) +{ + uint32_t *ptr0 = son + (cyclic_pos << 1) + 1; + uint32_t *ptr1 = son + (cyclic_pos << 1); + + uint32_t len0 = 0; + uint32_t len1 = 0; + + while (true) { + const uint32_t delta = pos - cur_match; + if (depth-- == 0 || delta >= cyclic_size) { + *ptr0 = EMPTY_HASH_VALUE; + *ptr1 = EMPTY_HASH_VALUE; + return; + } + + uint32_t *pair = son + ((cyclic_pos - delta + + (delta > cyclic_pos ? cyclic_size : 0)) + << 1); + const uint8_t *pb = cur - delta; + uint32_t len = MIN(len0, len1); + + if (pb[len] == cur[len]) { + while (++len != len_limit) + if (pb[len] != cur[len]) + break; + + if (len == len_limit) { + *ptr1 = pair[0]; + *ptr0 = pair[1]; + return; + } + } + + if (pb[len] < cur[len]) { + *ptr1 = cur_match; + ptr1 = pair + 1; + cur_match = *ptr1; + len1 = len; + } else { + *ptr0 = cur_match; + ptr0 = pair; + cur_match = *ptr0; + len0 = len; + } + } +} + + +#define bt_find(len_best) \ + call_find(bt_find_func, len_best) + +#define bt_skip() \ +do { \ + bt_skip_func(len_limit, pos, cur, cur_match, mf->depth, \ + mf->son, mf->cyclic_pos, \ + mf->cyclic_size); \ + move_pos(mf); \ +} while (0) + +#endif + + +#ifdef HAVE_MF_BT2 +extern uint32_t +lzma_mf_bt2_find(lzma_mf *mf, lzma_match *matches) +{ + header_find(true, 2); + + hash_2_calc(); + + const uint32_t cur_match = mf->hash[hash_value]; + mf->hash[hash_value] = pos; + + bt_find(1); +} + + +extern void +lzma_mf_bt2_skip(lzma_mf *mf, uint32_t amount) +{ + do { + header_skip(true, 2); + + hash_2_calc(); + + const uint32_t cur_match = mf->hash[hash_value]; + mf->hash[hash_value] = pos; + + bt_skip(); + + } while (--amount != 0); +} +#endif + + +#ifdef HAVE_MF_BT3 +extern uint32_t +lzma_mf_bt3_find(lzma_mf *mf, lzma_match *matches) +{ + header_find(true, 3); + + hash_3_calc(); + + const uint32_t delta2 = pos - mf->hash[hash_2_value]; + const uint32_t cur_match = mf->hash[FIX_3_HASH_SIZE + hash_value]; + + mf->hash[hash_2_value] = pos; + mf->hash[FIX_3_HASH_SIZE + hash_value] = pos; + + uint32_t len_best = 2; + + if (delta2 < mf->cyclic_size && *(cur - delta2) == *cur) { + for ( ; len_best != len_limit; ++len_best) + if (*(cur + len_best - delta2) != cur[len_best]) + break; + + matches[0].len = len_best; + matches[0].dist = delta2 - 1; + matches_count = 1; + + if (len_best == len_limit) { + bt_skip(); + return 1; // matches_count + } + } + + bt_find(len_best); +} + + +extern void +lzma_mf_bt3_skip(lzma_mf *mf, uint32_t amount) +{ + do { + header_skip(true, 3); + + hash_3_calc(); + + const uint32_t cur_match + = mf->hash[FIX_3_HASH_SIZE + hash_value]; + + mf->hash[hash_2_value] = pos; + mf->hash[FIX_3_HASH_SIZE + hash_value] = pos; + + bt_skip(); + + } while (--amount != 0); +} +#endif + + +#ifdef HAVE_MF_BT4 +extern uint32_t +lzma_mf_bt4_find(lzma_mf *mf, lzma_match *matches) +{ + header_find(true, 4); + + hash_4_calc(); + + uint32_t delta2 = pos - mf->hash[hash_2_value]; + const uint32_t delta3 + = pos - mf->hash[FIX_3_HASH_SIZE + hash_3_value]; + const uint32_t cur_match = mf->hash[FIX_4_HASH_SIZE + hash_value]; + + mf->hash[hash_2_value] = pos; + mf->hash[FIX_3_HASH_SIZE + hash_3_value] = pos; + mf->hash[FIX_4_HASH_SIZE + hash_value] = pos; + + uint32_t len_best = 1; + + if (delta2 < mf->cyclic_size && *(cur - delta2) == *cur) { + len_best = 2; + matches[0].len = 2; + matches[0].dist = delta2 - 1; + matches_count = 1; + } + + if (delta2 != delta3 && delta3 < mf->cyclic_size + && *(cur - delta3) == *cur) { + len_best = 3; + matches[matches_count++].dist = delta3 - 1; + delta2 = delta3; + } + + if (matches_count != 0) { + for ( ; len_best != len_limit; ++len_best) + if (*(cur + len_best - delta2) != cur[len_best]) + break; + + matches[matches_count - 1].len = len_best; + + if (len_best == len_limit) { + bt_skip(); + return matches_count; + } + } + + if (len_best < 3) + len_best = 3; + + bt_find(len_best); +} + + +extern void +lzma_mf_bt4_skip(lzma_mf *mf, uint32_t amount) +{ + do { + header_skip(true, 4); + + hash_4_calc(); + + const uint32_t cur_match + = mf->hash[FIX_4_HASH_SIZE + hash_value]; + + mf->hash[hash_2_value] = pos; + mf->hash[FIX_3_HASH_SIZE + hash_3_value] = pos; + mf->hash[FIX_4_HASH_SIZE + hash_value] = pos; + + bt_skip(); + + } while (--amount != 0); +} +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/Makefile.inc b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/Makefile.inc new file mode 100644 index 00000000000..7fc4d172096 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/Makefile.inc @@ -0,0 +1,43 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +EXTRA_DIST += lzma/fastpos_tablegen.c + +liblzma_la_SOURCES += lzma/lzma_common.h + +if COND_ENCODER_LZMA1 +liblzma_la_SOURCES += \ + lzma/fastpos.h \ + lzma/lzma_encoder.h \ + lzma/lzma_encoder.c \ + lzma/lzma_encoder_presets.c \ + lzma/lzma_encoder_private.h \ + lzma/lzma_encoder_optimum_fast.c \ + lzma/lzma_encoder_optimum_normal.c + +if !COND_SMALL +liblzma_la_SOURCES += lzma/fastpos_table.c +endif +endif + +if COND_DECODER_LZMA1 +liblzma_la_SOURCES += \ + lzma/lzma_decoder.c \ + lzma/lzma_decoder.h +endif + +if COND_ENCODER_LZMA2 +liblzma_la_SOURCES += \ + lzma/lzma2_encoder.c \ + lzma/lzma2_encoder.h +endif + +if COND_DECODER_LZMA2 +liblzma_la_SOURCES += \ + lzma/lzma2_decoder.c \ + lzma/lzma2_decoder.h +endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/fastpos.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/fastpos.h new file mode 100644 index 00000000000..a95a00c4792 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/fastpos.h @@ -0,0 +1,143 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file fastpos.h +/// \brief Kind of two-bit version of bit scan reverse +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_FASTPOS_H +#define LZMA_FASTPOS_H + +// LZMA encodes match distances (positions) by storing the highest two +// bits using a six-bit value [0, 63], and then the missing lower bits. +// Dictionary size is also stored using this encoding in the new .lzma +// file format header. +// +// fastpos.h provides a way to quickly find out the correct six-bit +// values. The following table gives some examples of this encoding: +// +// pos return +// 0 0 +// 1 1 +// 2 2 +// 3 3 +// 4 4 +// 5 4 +// 6 5 +// 7 5 +// 8 6 +// 11 6 +// 12 7 +// ... ... +// 15 7 +// 16 8 +// 17 8 +// ... ... +// 23 8 +// 24 9 +// 25 9 +// ... ... +// +// +// Provided functions or macros +// ---------------------------- +// +// get_pos_slot(pos) is the basic version. get_pos_slot_2(pos) +// assumes that pos >= FULL_DISTANCES, thus the result is at least +// FULL_DISTANCES_BITS * 2. Using get_pos_slot(pos) instead of +// get_pos_slot_2(pos) would give the same result, but get_pos_slot_2(pos) +// should be tiny bit faster due to the assumption being made. +// +// +// Size vs. speed +// -------------- +// +// With some CPUs that have fast BSR (bit scan reverse) instruction, the +// size optimized version is slightly faster than the bigger table based +// approach. Such CPUs include Intel Pentium Pro, Pentium II, Pentium III +// and Core 2 (possibly others). AMD K7 seems to have slower BSR, but that +// would still have speed roughly comparable to the table version. Older +// x86 CPUs like the original Pentium have very slow BSR; on those systems +// the table version is a lot faster. +// +// On some CPUs, the table version is a lot faster when using position +// dependent code, but with position independent code the size optimized +// version is slightly faster. This occurs at least on 32-bit SPARC (no +// ASM optimizations). +// +// I'm making the table version the default, because that has good speed +// on all systems I have tried. The size optimized version is sometimes +// slightly faster, but sometimes it is a lot slower. + +#ifdef HAVE_SMALL +# include "bsr.h" + +# define get_pos_slot(pos) ((pos) <= 4 ? (pos) : get_pos_slot_2(pos)) + +static inline uint32_t +get_pos_slot_2(uint32_t pos) +{ + uint32_t i; + lzma_bsr(i, pos); + return (i + i) + ((pos >> (i - 1)) & 1); +} + + +#else + +#define FASTPOS_BITS 13 + +extern const uint8_t lzma_fastpos[1 << FASTPOS_BITS]; + + +#define fastpos_shift(extra, n) \ + ((extra) + (n) * (FASTPOS_BITS - 1)) + +#define fastpos_limit(extra, n) \ + (UINT32_C(1) << (FASTPOS_BITS + fastpos_shift(extra, n))) + +#define fastpos_result(pos, extra, n) \ + lzma_fastpos[(pos) >> fastpos_shift(extra, n)] \ + + 2 * fastpos_shift(extra, n) + + +static inline uint32_t +get_pos_slot(uint32_t pos) +{ + // If it is small enough, we can pick the result directly from + // the precalculated table. + if (pos < fastpos_limit(0, 0)) + return lzma_fastpos[pos]; + + if (pos < fastpos_limit(0, 1)) + return fastpos_result(pos, 0, 1); + + return fastpos_result(pos, 0, 2); +} + + +#ifdef FULL_DISTANCES_BITS +static inline uint32_t +get_pos_slot_2(uint32_t pos) +{ + assert(pos >= FULL_DISTANCES); + + if (pos < fastpos_limit(FULL_DISTANCES_BITS - 1, 0)) + return fastpos_result(pos, FULL_DISTANCES_BITS - 1, 0); + + if (pos < fastpos_limit(FULL_DISTANCES_BITS - 1, 1)) + return fastpos_result(pos, FULL_DISTANCES_BITS - 1, 1); + + return fastpos_result(pos, FULL_DISTANCES_BITS - 1, 2); +} +#endif + +#endif + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/fastpos_table.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/fastpos_table.c new file mode 100644 index 00000000000..6a3ceac0e90 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/fastpos_table.c @@ -0,0 +1,519 @@ +/* This file has been automatically generated by fastpos_tablegen.c. */ + +#include "common.h" +#include "fastpos.h" + +const uint8_t lzma_fastpos[1 << FASTPOS_BITS] = { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, + 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25 +}; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/fastpos_tablegen.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/fastpos_tablegen.c new file mode 100644 index 00000000000..c97e6f411c2 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/fastpos_tablegen.c @@ -0,0 +1,56 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file fastpos_tablegen.c +/// \brief Generates the lzma_fastpos[] lookup table +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include "fastpos.h" + + +int +main(void) +{ + uint8_t fastpos[1 << FASTPOS_BITS]; + + const uint8_t fast_slots = 2 * FASTPOS_BITS; + uint32_t c = 2; + + fastpos[0] = 0; + fastpos[1] = 1; + + for (uint8_t slot_fast = 2; slot_fast < fast_slots; ++slot_fast) { + const uint32_t k = 1 << ((slot_fast >> 1) - 1); + for (uint32_t j = 0; j < k; ++j, ++c) + fastpos[c] = slot_fast; + } + + printf("/* This file has been automatically generated " + "by fastpos_tablegen.c. */\n\n" + "#include \"common.h\"\n" + "#include \"fastpos.h\"\n\n" + "const uint8_t lzma_fastpos[1 << FASTPOS_BITS] = {"); + + for (size_t i = 0; i < (1 << FASTPOS_BITS); ++i) { + if (i % 16 == 0) + printf("\n\t"); + + printf("%3u", (unsigned int)(fastpos[i])); + + if (i != (1 << FASTPOS_BITS) - 1) + printf(","); + } + + printf("\n};\n"); + + return 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.c new file mode 100644 index 00000000000..b4c2f2d5ba7 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.c @@ -0,0 +1,305 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lzma2_decoder.c +/// \brief LZMA2 decoder +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "lzma2_decoder.h" +#include "lz_decoder.h" +#include "lzma_decoder.h" + + +struct lzma_coder_s { + enum sequence { + SEQ_CONTROL, + SEQ_UNCOMPRESSED_1, + SEQ_UNCOMPRESSED_2, + SEQ_COMPRESSED_0, + SEQ_COMPRESSED_1, + SEQ_PROPERTIES, + SEQ_LZMA, + SEQ_COPY, + } sequence; + + /// Sequence after the size fields have been decoded. + enum sequence next_sequence; + + /// LZMA decoder + lzma_lz_decoder lzma; + + /// Uncompressed size of LZMA chunk + size_t uncompressed_size; + + /// Compressed size of the chunk (naturally equals to uncompressed + /// size of uncompressed chunk) + size_t compressed_size; + + /// True if properties are needed. This is false before the + /// first LZMA chunk. + bool need_properties; + + /// True if dictionary reset is needed. This is false before the + /// first chunk (LZMA or uncompressed). + bool need_dictionary_reset; + + lzma_options_lzma options; +}; + + +static lzma_ret +lzma2_decode(lzma_coder *restrict coder, lzma_dict *restrict dict, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size) +{ + // With SEQ_LZMA it is possible that no new input is needed to do + // some progress. The rest of the sequences assume that there is + // at least one byte of input. + while (*in_pos < in_size || coder->sequence == SEQ_LZMA) + switch (coder->sequence) { + case SEQ_CONTROL: { + const uint32_t control = in[*in_pos]; + ++*in_pos; + + if (control >= 0xE0 || control == 1) { + // Dictionary reset implies that next LZMA chunk has + // to set new properties. + coder->need_properties = true; + coder->need_dictionary_reset = true; + } else if (coder->need_dictionary_reset) { + return LZMA_DATA_ERROR; + } + + if (control >= 0x80) { + // LZMA chunk. The highest five bits of the + // uncompressed size are taken from the control byte. + coder->uncompressed_size = (control & 0x1F) << 16; + coder->sequence = SEQ_UNCOMPRESSED_1; + + // See if there are new properties or if we need to + // reset the state. + if (control >= 0xC0) { + // When there are new properties, state reset + // is done at SEQ_PROPERTIES. + coder->need_properties = false; + coder->next_sequence = SEQ_PROPERTIES; + + } else if (coder->need_properties) { + return LZMA_DATA_ERROR; + + } else { + coder->next_sequence = SEQ_LZMA; + + // If only state reset is wanted with old + // properties, do the resetting here for + // simplicity. + if (control >= 0xA0) + coder->lzma.reset(coder->lzma.coder, + &coder->options); + } + } else { + // End marker + if (control == 0x00) + return LZMA_STREAM_END; + + // Invalid control values + if (control > 2) + return LZMA_DATA_ERROR; + + // It's uncompressed chunk + coder->sequence = SEQ_COMPRESSED_0; + coder->next_sequence = SEQ_COPY; + } + + if (coder->need_dictionary_reset) { + // Finish the dictionary reset and let the caller + // flush the dictionary to the actual output buffer. + coder->need_dictionary_reset = false; + dict_reset(dict); + return LZMA_OK; + } + + break; + } + + case SEQ_UNCOMPRESSED_1: + coder->uncompressed_size += (uint32_t)(in[(*in_pos)++]) << 8; + coder->sequence = SEQ_UNCOMPRESSED_2; + break; + + case SEQ_UNCOMPRESSED_2: + coder->uncompressed_size += in[(*in_pos)++] + 1; + coder->sequence = SEQ_COMPRESSED_0; + coder->lzma.set_uncompressed(coder->lzma.coder, + coder->uncompressed_size); + break; + + case SEQ_COMPRESSED_0: + coder->compressed_size = (uint32_t)(in[(*in_pos)++]) << 8; + coder->sequence = SEQ_COMPRESSED_1; + break; + + case SEQ_COMPRESSED_1: + coder->compressed_size += in[(*in_pos)++] + 1; + coder->sequence = coder->next_sequence; + break; + + case SEQ_PROPERTIES: + if (lzma_lzma_lclppb_decode(&coder->options, in[(*in_pos)++])) + return LZMA_DATA_ERROR; + + coder->lzma.reset(coder->lzma.coder, &coder->options); + + coder->sequence = SEQ_LZMA; + break; + + case SEQ_LZMA: { + // Store the start offset so that we can update + // coder->compressed_size later. + const size_t in_start = *in_pos; + + // Decode from in[] to *dict. + const lzma_ret ret = coder->lzma.code(coder->lzma.coder, + dict, in, in_pos, in_size); + + // Validate and update coder->compressed_size. + const size_t in_used = *in_pos - in_start; + if (in_used > coder->compressed_size) + return LZMA_DATA_ERROR; + + coder->compressed_size -= in_used; + + // Return if we didn't finish the chunk, or an error occurred. + if (ret != LZMA_STREAM_END) + return ret; + + // The LZMA decoder must have consumed the whole chunk now. + // We don't need to worry about uncompressed size since it + // is checked by the LZMA decoder. + if (coder->compressed_size != 0) + return LZMA_DATA_ERROR; + + coder->sequence = SEQ_CONTROL; + break; + } + + case SEQ_COPY: { + // Copy from input to the dictionary as is. + // FIXME Can copy too much? + dict_write(dict, in, in_pos, in_size, &coder->compressed_size); + if (coder->compressed_size != 0) + return LZMA_OK; + + coder->sequence = SEQ_CONTROL; + break; + } + + default: + assert(0); + return LZMA_PROG_ERROR; + } + + return LZMA_OK; +} + + +static void +lzma2_decoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + assert(coder->lzma.end == NULL); + lzma_free(coder->lzma.coder, allocator); + + lzma_free(coder, allocator); + + return; +} + + +static lzma_ret +lzma2_decoder_init(lzma_lz_decoder *lz, lzma_allocator *allocator, + const void *opt, lzma_lz_options *lz_options) +{ + if (lz->coder == NULL) { + lz->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (lz->coder == NULL) + return LZMA_MEM_ERROR; + + lz->code = &lzma2_decode; + lz->end = &lzma2_decoder_end; + + lz->coder->lzma = LZMA_LZ_DECODER_INIT; + } + + const lzma_options_lzma *options = opt; + + lz->coder->sequence = SEQ_CONTROL; + lz->coder->need_properties = true; + lz->coder->need_dictionary_reset = options->preset_dict == NULL + || options->preset_dict_size == 0; + + return lzma_lzma_decoder_create(&lz->coder->lzma, + allocator, options, lz_options); +} + + +extern lzma_ret +lzma_lzma2_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters) +{ + // LZMA2 can only be the last filter in the chain. This is enforced + // by the raw_decoder initialization. + assert(filters[1].init == NULL); + + return lzma_lz_decoder_init(next, allocator, filters, + &lzma2_decoder_init); +} + + +extern uint64_t +lzma_lzma2_decoder_memusage(const void *options) +{ + return sizeof(lzma_coder) + + lzma_lzma_decoder_memusage_nocheck(options); +} + + +extern lzma_ret +lzma_lzma2_props_decode(void **options, lzma_allocator *allocator, + const uint8_t *props, size_t props_size) +{ + if (props_size != 1) + return LZMA_OPTIONS_ERROR; + + // Check that reserved bits are unset. + if (props[0] & 0xC0) + return LZMA_OPTIONS_ERROR; + + // Decode the dictionary size. + if (props[0] > 40) + return LZMA_OPTIONS_ERROR; + + lzma_options_lzma *opt = lzma_alloc( + sizeof(lzma_options_lzma), allocator); + if (opt == NULL) + return LZMA_MEM_ERROR; + + if (props[0] == 40) { + opt->dict_size = UINT32_MAX; + } else { + opt->dict_size = 2 | (props[0] & 1); + opt->dict_size <<= props[0] / 2 + 11; + } + + opt->preset_dict = NULL; + opt->preset_dict_size = 0; + + *options = opt; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.h new file mode 100644 index 00000000000..fac4ac487b0 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.h @@ -0,0 +1,28 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lzma2_decoder.h +/// \brief LZMA2 decoder +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_LZMA2_DECODER_H +#define LZMA_LZMA2_DECODER_H + +#include "common.h" + +extern lzma_ret lzma_lzma2_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +extern uint64_t lzma_lzma2_decoder_memusage(const void *options); + +extern lzma_ret lzma_lzma2_props_decode( + void **options, lzma_allocator *allocator, + const uint8_t *props, size_t props_size); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.c new file mode 100644 index 00000000000..8db813685f6 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.c @@ -0,0 +1,384 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lzma2_encoder.c +/// \brief LZMA2 encoder +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "lz_encoder.h" +#include "lzma_encoder.h" +#include "fastpos.h" +#include "lzma2_encoder.h" + + +struct lzma_coder_s { + enum { + SEQ_INIT, + SEQ_LZMA_ENCODE, + SEQ_LZMA_COPY, + SEQ_UNCOMPRESSED_HEADER, + SEQ_UNCOMPRESSED_COPY, + } sequence; + + /// LZMA encoder + lzma_coder *lzma; + + /// If this is not NULL, we will check new options from this + /// structure when starting a new chunk. + const lzma_options_lzma *opt_new; + + /// LZMA options currently in use. + lzma_options_lzma opt_cur; + + bool need_properties; + bool need_state_reset; + bool need_dictionary_reset; + + /// Uncompressed size of a chunk + size_t uncompressed_size; + + /// Compressed size of a chunk (excluding headers); this is also used + /// to indicate the end of buf[] in SEQ_LZMA_COPY. + size_t compressed_size; + + /// Read position in buf[] + size_t buf_pos; + + /// Buffer to hold the chunk header and LZMA compressed data + uint8_t buf[LZMA2_HEADER_MAX + LZMA2_CHUNK_MAX]; +}; + + +static void +lzma2_header_lzma(lzma_coder *coder) +{ + assert(coder->uncompressed_size > 0); + assert(coder->uncompressed_size <= LZMA2_UNCOMPRESSED_MAX); + assert(coder->compressed_size > 0); + assert(coder->compressed_size <= LZMA2_CHUNK_MAX); + + size_t pos; + + if (coder->need_properties) { + pos = 0; + + if (coder->need_dictionary_reset) + coder->buf[pos] = 0x80 + (3 << 5); + else + coder->buf[pos] = 0x80 + (2 << 5); + } else { + pos = 1; + + if (coder->need_state_reset) + coder->buf[pos] = 0x80 + (1 << 5); + else + coder->buf[pos] = 0x80; + } + + // Set the start position for copying. + coder->buf_pos = pos; + + // Uncompressed size + size_t size = coder->uncompressed_size - 1; + coder->buf[pos++] += size >> 16; + coder->buf[pos++] = (size >> 8) & 0xFF; + coder->buf[pos++] = size & 0xFF; + + // Compressed size + size = coder->compressed_size - 1; + coder->buf[pos++] = size >> 8; + coder->buf[pos++] = size & 0xFF; + + // Properties, if needed + if (coder->need_properties) + lzma_lzma_lclppb_encode(&coder->opt_cur, coder->buf + pos); + + coder->need_properties = false; + coder->need_state_reset = false; + coder->need_dictionary_reset = false; + + // The copying code uses coder->compressed_size to indicate the end + // of coder->buf[], so we need add the maximum size of the header here. + coder->compressed_size += LZMA2_HEADER_MAX; + + return; +} + + +static void +lzma2_header_uncompressed(lzma_coder *coder) +{ + assert(coder->uncompressed_size > 0); + assert(coder->uncompressed_size <= LZMA2_CHUNK_MAX); + + // If this is the first chunk, we need to include dictionary + // reset indicator. + if (coder->need_dictionary_reset) + coder->buf[0] = 1; + else + coder->buf[0] = 2; + + coder->need_dictionary_reset = false; + + // "Compressed" size + coder->buf[1] = (coder->uncompressed_size - 1) >> 8; + coder->buf[2] = (coder->uncompressed_size - 1) & 0xFF; + + // Set the start position for copying. + coder->buf_pos = 0; + return; +} + + +static lzma_ret +lzma2_encode(lzma_coder *restrict coder, lzma_mf *restrict mf, + uint8_t *restrict out, size_t *restrict out_pos, + size_t out_size) +{ + while (*out_pos < out_size) + switch (coder->sequence) { + case SEQ_INIT: + // If there's no input left and we are flushing or finishing, + // don't start a new chunk. + if (mf_unencoded(mf) == 0) { + // Write end of payload marker if finishing. + if (mf->action == LZMA_FINISH) + out[(*out_pos)++] = 0; + + return mf->action == LZMA_RUN + ? LZMA_OK : LZMA_STREAM_END; + } + + // Look if there are new options. At least for now, + // only lc/lp/pb can be changed. + if (coder->opt_new != NULL + && (coder->opt_cur.lc != coder->opt_new->lc + || coder->opt_cur.lp != coder->opt_new->lp + || coder->opt_cur.pb != coder->opt_new->pb)) { + // Options have been changed, copy them to opt_cur. + // These get validated as part of + // lzma_lzma_encoder_reset() below. + coder->opt_cur.lc = coder->opt_new->lc; + coder->opt_cur.lp = coder->opt_new->lp; + coder->opt_cur.pb = coder->opt_new->pb; + + // We need to write the new options and reset + // the encoder state. + coder->need_properties = true; + coder->need_state_reset = true; + } + + if (coder->need_state_reset) + return_if_error(lzma_lzma_encoder_reset( + coder->lzma, &coder->opt_cur)); + + coder->uncompressed_size = 0; + coder->compressed_size = 0; + coder->sequence = SEQ_LZMA_ENCODE; + + // Fall through + + case SEQ_LZMA_ENCODE: { + // Calculate how much more uncompressed data this chunk + // could accept. + const uint32_t left = LZMA2_UNCOMPRESSED_MAX + - coder->uncompressed_size; + uint32_t limit; + + if (left < mf->match_len_max) { + // Must flush immediatelly since the next LZMA symbol + // could make the uncompressed size of the chunk too + // big. + limit = 0; + } else { + // Calculate maximum read_limit that is OK from point + // of view of LZMA2 chunk size. + limit = mf->read_pos - mf->read_ahead + + left - mf->match_len_max; + } + + // Save the start position so that we can update + // coder->uncompressed_size. + const uint32_t read_start = mf->read_pos - mf->read_ahead; + + // Call the LZMA encoder until the chunk is finished. + const lzma_ret ret = lzma_lzma_encode(coder->lzma, mf, + coder->buf + LZMA2_HEADER_MAX, + &coder->compressed_size, + LZMA2_CHUNK_MAX, limit); + + coder->uncompressed_size += mf->read_pos - mf->read_ahead + - read_start; + + assert(coder->compressed_size <= LZMA2_CHUNK_MAX); + assert(coder->uncompressed_size <= LZMA2_UNCOMPRESSED_MAX); + + if (ret != LZMA_STREAM_END) + return LZMA_OK; + + // See if the chunk compressed. If it didn't, we encode it + // as uncompressed chunk. This saves a few bytes of space + // and makes decoding faster. + if (coder->compressed_size >= coder->uncompressed_size) { + coder->uncompressed_size += mf->read_ahead; + assert(coder->uncompressed_size + <= LZMA2_UNCOMPRESSED_MAX); + mf->read_ahead = 0; + lzma2_header_uncompressed(coder); + coder->need_state_reset = true; + coder->sequence = SEQ_UNCOMPRESSED_HEADER; + break; + } + + // The chunk did compress at least by one byte, so we store + // the chunk as LZMA. + lzma2_header_lzma(coder); + + coder->sequence = SEQ_LZMA_COPY; + } + + // Fall through + + case SEQ_LZMA_COPY: + // Copy the compressed chunk along its headers to the + // output buffer. + lzma_bufcpy(coder->buf, &coder->buf_pos, + coder->compressed_size, + out, out_pos, out_size); + if (coder->buf_pos != coder->compressed_size) + return LZMA_OK; + + coder->sequence = SEQ_INIT; + break; + + case SEQ_UNCOMPRESSED_HEADER: + // Copy the three-byte header to indicate uncompressed chunk. + lzma_bufcpy(coder->buf, &coder->buf_pos, + LZMA2_HEADER_UNCOMPRESSED, + out, out_pos, out_size); + if (coder->buf_pos != LZMA2_HEADER_UNCOMPRESSED) + return LZMA_OK; + + coder->sequence = SEQ_UNCOMPRESSED_COPY; + + // Fall through + + case SEQ_UNCOMPRESSED_COPY: + // Copy the uncompressed data as is from the dictionary + // to the output buffer. + mf_read(mf, out, out_pos, out_size, &coder->uncompressed_size); + if (coder->uncompressed_size != 0) + return LZMA_OK; + + coder->sequence = SEQ_INIT; + break; + } + + return LZMA_OK; +} + + +static void +lzma2_encoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_free(coder->lzma, allocator); + lzma_free(coder, allocator); + return; +} + + +static lzma_ret +lzma2_encoder_init(lzma_lz_encoder *lz, lzma_allocator *allocator, + const void *options, lzma_lz_options *lz_options) +{ + if (options == NULL) + return LZMA_PROG_ERROR; + + if (lz->coder == NULL) { + lz->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (lz->coder == NULL) + return LZMA_MEM_ERROR; + + lz->code = &lzma2_encode; + lz->end = &lzma2_encoder_end; + + lz->coder->lzma = NULL; + } + + lz->coder->opt_cur = *(const lzma_options_lzma *)(options); + lz->coder->opt_new = lz->coder->opt_cur.persistent + ? options : NULL; + + lz->coder->sequence = SEQ_INIT; + lz->coder->need_properties = true; + lz->coder->need_state_reset = false; + lz->coder->need_dictionary_reset + = lz->coder->opt_cur.preset_dict == NULL + || lz->coder->opt_cur.preset_dict_size == 0; + + // Initialize LZMA encoder + return_if_error(lzma_lzma_encoder_create(&lz->coder->lzma, allocator, + &lz->coder->opt_cur, lz_options)); + + // Make sure that we will always have enough history available in + // case we need to use uncompressed chunks. They are used when the + // compressed size of a chunk is not smaller than the uncompressed + // size, so we need to have at least LZMA2_COMPRESSED_MAX bytes + // history available. + if (lz_options->before_size + lz_options->dict_size < LZMA2_CHUNK_MAX) + lz_options->before_size + = LZMA2_CHUNK_MAX - lz_options->dict_size; + + return LZMA_OK; +} + + +extern lzma_ret +lzma_lzma2_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters) +{ + return lzma_lz_encoder_init( + next, allocator, filters, &lzma2_encoder_init); +} + + +extern uint64_t +lzma_lzma2_encoder_memusage(const void *options) +{ + const uint64_t lzma_mem = lzma_lzma_encoder_memusage(options); + if (lzma_mem == UINT64_MAX) + return UINT64_MAX; + + return sizeof(lzma_coder) + lzma_mem; +} + + +extern lzma_ret +lzma_lzma2_props_encode(const void *options, uint8_t *out) +{ + const lzma_options_lzma *const opt = options; + uint32_t d = MAX(opt->dict_size, LZMA_DICT_SIZE_MIN); + + // Round up to to the next 2^n - 1 or 2^n + 2^(n - 1) - 1 depending + // on which one is the next: + --d; + d |= d >> 2; + d |= d >> 3; + d |= d >> 4; + d |= d >> 8; + d |= d >> 16; + + // Get the highest two bits using the proper encoding: + if (d == UINT32_MAX) + out[0] = 40; + else + out[0] = get_pos_slot(d + 1) - 24; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.h new file mode 100644 index 00000000000..ca19ef4691c --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.h @@ -0,0 +1,41 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lzma2_encoder.h +/// \brief LZMA2 encoder +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_LZMA2_ENCODER_H +#define LZMA_LZMA2_ENCODER_H + +#include "common.h" + + +/// Maximum number of bytes of actual data per chunk (no headers) +#define LZMA2_CHUNK_MAX (UINT32_C(1) << 16) + +/// Maximum uncompressed size of LZMA chunk (no headers) +#define LZMA2_UNCOMPRESSED_MAX (UINT32_C(1) << 21) + +/// Maximum size of LZMA2 headers +#define LZMA2_HEADER_MAX 6 + +/// Size of a header for uncompressed chunk +#define LZMA2_HEADER_UNCOMPRESSED 3 + + +extern lzma_ret lzma_lzma2_encoder_init( + lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters); + +extern uint64_t lzma_lzma2_encoder_memusage(const void *options); + +extern lzma_ret lzma_lzma2_props_encode(const void *options, uint8_t *out); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_common.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_common.h new file mode 100644 index 00000000000..e31e285f9a5 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_common.h @@ -0,0 +1,223 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lzma_common.h +/// \brief Private definitions common to LZMA encoder and decoder +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_LZMA_COMMON_H +#define LZMA_LZMA_COMMON_H + +#include "common.h" +#include "range_common.h" + + +/////////////////// +// Miscellaneous // +/////////////////// + +/// Maximum number of position states. A position state is the lowest pos bits +/// number of bits of the current uncompressed offset. In some places there +/// are different sets of probabilities for different pos states. +#define POS_STATES_MAX (1 << LZMA_PB_MAX) + + +/// Validates lc, lp, and pb. +static inline bool +is_lclppb_valid(const lzma_options_lzma *options) +{ + return options->lc <= LZMA_LCLP_MAX && options->lp <= LZMA_LCLP_MAX + && options->lc + options->lp <= LZMA_LCLP_MAX + && options->pb <= LZMA_PB_MAX; +} + + +/////////// +// State // +/////////// + +/// This enum is used to track which events have occurred most recently and +/// in which order. This information is used to predict the next event. +/// +/// Events: +/// - Literal: One 8-bit byte +/// - Match: Repeat a chunk of data at some distance +/// - Long repeat: Multi-byte match at a recently seen distance +/// - Short repeat: One-byte repeat at a recently seen distance +/// +/// The event names are in from STATE_oldest_older_previous. REP means +/// either short or long repeated match, and NONLIT means any non-literal. +typedef enum { + STATE_LIT_LIT, + STATE_MATCH_LIT_LIT, + STATE_REP_LIT_LIT, + STATE_SHORTREP_LIT_LIT, + STATE_MATCH_LIT, + STATE_REP_LIT, + STATE_SHORTREP_LIT, + STATE_LIT_MATCH, + STATE_LIT_LONGREP, + STATE_LIT_SHORTREP, + STATE_NONLIT_MATCH, + STATE_NONLIT_REP, +} lzma_lzma_state; + + +/// Total number of states +#define STATES 12 + +/// The lowest 7 states indicate that the previous state was a literal. +#define LIT_STATES 7 + + +/// Indicate that the latest state was a literal. +#define update_literal(state) \ + state = ((state) <= STATE_SHORTREP_LIT_LIT \ + ? STATE_LIT_LIT \ + : ((state) <= STATE_LIT_SHORTREP \ + ? (state) - 3 \ + : (state) - 6)) + +/// Indicate that the latest state was a match. +#define update_match(state) \ + state = ((state) < LIT_STATES ? STATE_LIT_MATCH : STATE_NONLIT_MATCH) + +/// Indicate that the latest state was a long repeated match. +#define update_long_rep(state) \ + state = ((state) < LIT_STATES ? STATE_LIT_LONGREP : STATE_NONLIT_REP) + +/// Indicate that the latest state was a short match. +#define update_short_rep(state) \ + state = ((state) < LIT_STATES ? STATE_LIT_SHORTREP : STATE_NONLIT_REP) + +/// Test if the previous state was a literal. +#define is_literal_state(state) \ + ((state) < LIT_STATES) + + +///////////// +// Literal // +///////////// + +/// Each literal coder is divided in three sections: +/// - 0x001-0x0FF: Without match byte +/// - 0x101-0x1FF: With match byte; match bit is 0 +/// - 0x201-0x2FF: With match byte; match bit is 1 +/// +/// Match byte is used when the previous LZMA symbol was something else than +/// a literal (that is, it was some kind of match). +#define LITERAL_CODER_SIZE 0x300 + +/// Maximum number of literal coders +#define LITERAL_CODERS_MAX (1 << LZMA_LCLP_MAX) + +/// Locate the literal coder for the next literal byte. The choice depends on +/// - the lowest literal_pos_bits bits of the position of the current +/// byte; and +/// - the highest literal_context_bits bits of the previous byte. +#define literal_subcoder(probs, lc, lp_mask, pos, prev_byte) \ + ((probs)[(((pos) & lp_mask) << lc) + ((prev_byte) >> (8 - lc))]) + + +static inline void +literal_init(probability (*probs)[LITERAL_CODER_SIZE], + uint32_t lc, uint32_t lp) +{ + assert(lc + lp <= LZMA_LCLP_MAX); + + const uint32_t coders = 1U << (lc + lp); + + for (uint32_t i = 0; i < coders; ++i) + for (uint32_t j = 0; j < LITERAL_CODER_SIZE; ++j) + bit_reset(probs[i][j]); + + return; +} + + +////////////////// +// Match length // +////////////////// + +// Minimum length of a match is two bytes. +#define MATCH_LEN_MIN 2 + +// Match length is encoded with 4, 5, or 10 bits. +// +// Length Bits +// 2-9 4 = Choice=0 + 3 bits +// 10-17 5 = Choice=1 + Choice2=0 + 3 bits +// 18-273 10 = Choice=1 + Choice2=1 + 8 bits +#define LEN_LOW_BITS 3 +#define LEN_LOW_SYMBOLS (1 << LEN_LOW_BITS) +#define LEN_MID_BITS 3 +#define LEN_MID_SYMBOLS (1 << LEN_MID_BITS) +#define LEN_HIGH_BITS 8 +#define LEN_HIGH_SYMBOLS (1 << LEN_HIGH_BITS) +#define LEN_SYMBOLS (LEN_LOW_SYMBOLS + LEN_MID_SYMBOLS + LEN_HIGH_SYMBOLS) + +// Maximum length of a match is 273 which is a result of the encoding +// described above. +#define MATCH_LEN_MAX (MATCH_LEN_MIN + LEN_SYMBOLS - 1) + + +//////////////////// +// Match distance // +//////////////////// + +// Different set of probabilities is used for match distances that have very +// short match length: Lengths of 2, 3, and 4 bytes have a separate set of +// probabilities for each length. The matches with longer length use a shared +// set of probabilities. +#define LEN_TO_POS_STATES 4 + +// Macro to get the index of the appropriate probability array. +#define get_len_to_pos_state(len) \ + ((len) < LEN_TO_POS_STATES + MATCH_LEN_MIN \ + ? (len) - MATCH_LEN_MIN \ + : LEN_TO_POS_STATES - 1) + +// The highest two bits of a match distance (pos slot) are encoded using six +// bits. See fastpos.h for more explanation. +#define POS_SLOT_BITS 6 +#define POS_SLOTS (1 << POS_SLOT_BITS) + +// Match distances up to 127 are fully encoded using probabilities. Since +// the highest two bits (pos slot) are always encoded using six bits, the +// distances 0-3 don't need any additional bits to encode, since the pos +// slot itself is the same as the actual distance. START_POS_MODEL_INDEX +// indicates the first pos slot where at least one additional bit is needed. +#define START_POS_MODEL_INDEX 4 + +// Match distances greater than 127 are encoded in three pieces: +// - pos slot: the highest two bits +// - direct bits: 2-26 bits below the highest two bits +// - alignment bits: four lowest bits +// +// Direct bits don't use any probabilities. +// +// The pos slot value of 14 is for distances 128-191 (see the table in +// fastpos.h to understand why). +#define END_POS_MODEL_INDEX 14 + +// Pos slots that indicate a distance <= 127. +#define FULL_DISTANCES_BITS (END_POS_MODEL_INDEX / 2) +#define FULL_DISTANCES (1 << FULL_DISTANCES_BITS) + +// For match distances greater than 127, only the highest two bits and the +// lowest four bits (alignment) is encoded using probabilities. +#define ALIGN_BITS 4 +#define ALIGN_TABLE_SIZE (1 << ALIGN_BITS) +#define ALIGN_MASK (ALIGN_TABLE_SIZE - 1) + +// LZMA remembers the four most recent match distances. Reusing these distances +// tends to take less space than re-encoding the actual distance value. +#define REP_DISTANCES 4 + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.c new file mode 100644 index 00000000000..a013a62be7f --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.c @@ -0,0 +1,1057 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lzma_decoder.c +/// \brief LZMA decoder +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "lz_decoder.h" +#include "lzma_common.h" +#include "lzma_decoder.h" +#include "range_decoder.h" + + +#ifdef HAVE_SMALL + +// Macros for (somewhat) size-optimized code. +#define seq_4(seq) seq + +#define seq_6(seq) seq + +#define seq_8(seq) seq + +#define seq_len(seq) \ + seq ## _CHOICE, \ + seq ## _CHOICE2, \ + seq ## _BITTREE + +#define len_decode(target, ld, pos_state, seq) \ +do { \ +case seq ## _CHOICE: \ + rc_if_0(ld.choice, seq ## _CHOICE) { \ + rc_update_0(ld.choice); \ + probs = ld.low[pos_state];\ + limit = LEN_LOW_SYMBOLS; \ + target = MATCH_LEN_MIN; \ + } else { \ + rc_update_1(ld.choice); \ +case seq ## _CHOICE2: \ + rc_if_0(ld.choice2, seq ## _CHOICE2) { \ + rc_update_0(ld.choice2); \ + probs = ld.mid[pos_state]; \ + limit = LEN_MID_SYMBOLS; \ + target = MATCH_LEN_MIN + LEN_LOW_SYMBOLS; \ + } else { \ + rc_update_1(ld.choice2); \ + probs = ld.high; \ + limit = LEN_HIGH_SYMBOLS; \ + target = MATCH_LEN_MIN + LEN_LOW_SYMBOLS \ + + LEN_MID_SYMBOLS; \ + } \ + } \ + symbol = 1; \ +case seq ## _BITTREE: \ + do { \ + rc_bit(probs[symbol], , , seq ## _BITTREE); \ + } while (symbol < limit); \ + target += symbol - limit; \ +} while (0) + +#else // HAVE_SMALL + +// Unrolled versions +#define seq_4(seq) \ + seq ## 0, \ + seq ## 1, \ + seq ## 2, \ + seq ## 3 + +#define seq_6(seq) \ + seq ## 0, \ + seq ## 1, \ + seq ## 2, \ + seq ## 3, \ + seq ## 4, \ + seq ## 5 + +#define seq_8(seq) \ + seq ## 0, \ + seq ## 1, \ + seq ## 2, \ + seq ## 3, \ + seq ## 4, \ + seq ## 5, \ + seq ## 6, \ + seq ## 7 + +#define seq_len(seq) \ + seq ## _CHOICE, \ + seq ## _LOW0, \ + seq ## _LOW1, \ + seq ## _LOW2, \ + seq ## _CHOICE2, \ + seq ## _MID0, \ + seq ## _MID1, \ + seq ## _MID2, \ + seq ## _HIGH0, \ + seq ## _HIGH1, \ + seq ## _HIGH2, \ + seq ## _HIGH3, \ + seq ## _HIGH4, \ + seq ## _HIGH5, \ + seq ## _HIGH6, \ + seq ## _HIGH7 + +#define len_decode(target, ld, pos_state, seq) \ +do { \ + symbol = 1; \ +case seq ## _CHOICE: \ + rc_if_0(ld.choice, seq ## _CHOICE) { \ + rc_update_0(ld.choice); \ + rc_bit_case(ld.low[pos_state][symbol], , , seq ## _LOW0); \ + rc_bit_case(ld.low[pos_state][symbol], , , seq ## _LOW1); \ + rc_bit_case(ld.low[pos_state][symbol], , , seq ## _LOW2); \ + target = symbol - LEN_LOW_SYMBOLS + MATCH_LEN_MIN; \ + } else { \ + rc_update_1(ld.choice); \ +case seq ## _CHOICE2: \ + rc_if_0(ld.choice2, seq ## _CHOICE2) { \ + rc_update_0(ld.choice2); \ + rc_bit_case(ld.mid[pos_state][symbol], , , \ + seq ## _MID0); \ + rc_bit_case(ld.mid[pos_state][symbol], , , \ + seq ## _MID1); \ + rc_bit_case(ld.mid[pos_state][symbol], , , \ + seq ## _MID2); \ + target = symbol - LEN_MID_SYMBOLS \ + + MATCH_LEN_MIN + LEN_LOW_SYMBOLS; \ + } else { \ + rc_update_1(ld.choice2); \ + rc_bit_case(ld.high[symbol], , , seq ## _HIGH0); \ + rc_bit_case(ld.high[symbol], , , seq ## _HIGH1); \ + rc_bit_case(ld.high[symbol], , , seq ## _HIGH2); \ + rc_bit_case(ld.high[symbol], , , seq ## _HIGH3); \ + rc_bit_case(ld.high[symbol], , , seq ## _HIGH4); \ + rc_bit_case(ld.high[symbol], , , seq ## _HIGH5); \ + rc_bit_case(ld.high[symbol], , , seq ## _HIGH6); \ + rc_bit_case(ld.high[symbol], , , seq ## _HIGH7); \ + target = symbol - LEN_HIGH_SYMBOLS \ + + MATCH_LEN_MIN \ + + LEN_LOW_SYMBOLS + LEN_MID_SYMBOLS; \ + } \ + } \ +} while (0) + +#endif // HAVE_SMALL + + +/// Length decoder probabilities; see comments in lzma_common.h. +typedef struct { + probability choice; + probability choice2; + probability low[POS_STATES_MAX][LEN_LOW_SYMBOLS]; + probability mid[POS_STATES_MAX][LEN_MID_SYMBOLS]; + probability high[LEN_HIGH_SYMBOLS]; +} lzma_length_decoder; + + +struct lzma_coder_s { + /////////////////// + // Probabilities // + /////////////////// + + /// Literals; see comments in lzma_common.h. + probability literal[LITERAL_CODERS_MAX][LITERAL_CODER_SIZE]; + + /// If 1, it's a match. Otherwise it's a single 8-bit literal. + probability is_match[STATES][POS_STATES_MAX]; + + /// If 1, it's a repeated match. The distance is one of rep0 .. rep3. + probability is_rep[STATES]; + + /// If 0, distance of a repeated match is rep0. + /// Otherwise check is_rep1. + probability is_rep0[STATES]; + + /// If 0, distance of a repeated match is rep1. + /// Otherwise check is_rep2. + probability is_rep1[STATES]; + + /// If 0, distance of a repeated match is rep2. Otherwise it is rep3. + probability is_rep2[STATES]; + + /// If 1, the repeated match has length of one byte. Otherwise + /// the length is decoded from rep_len_decoder. + probability is_rep0_long[STATES][POS_STATES_MAX]; + + /// Probability tree for the highest two bits of the match distance. + /// There is a separate probability tree for match lengths of + /// 2 (i.e. MATCH_LEN_MIN), 3, 4, and [5, 273]. + probability pos_slot[LEN_TO_POS_STATES][POS_SLOTS]; + + /// Probility trees for additional bits for match distance when the + /// distance is in the range [4, 127]. + probability pos_special[FULL_DISTANCES - END_POS_MODEL_INDEX]; + + /// Probability tree for the lowest four bits of a match distance + /// that is equal to or greater than 128. + probability pos_align[ALIGN_TABLE_SIZE]; + + /// Length of a normal match + lzma_length_decoder match_len_decoder; + + /// Length of a repeated match + lzma_length_decoder rep_len_decoder; + + /////////////////// + // Decoder state // + /////////////////// + + // Range coder + lzma_range_decoder rc; + + // Types of the most recently seen LZMA symbols + lzma_lzma_state state; + + uint32_t rep0; ///< Distance of the latest match + uint32_t rep1; ///< Distance of second latest match + uint32_t rep2; ///< Distance of third latest match + uint32_t rep3; ///< Distance of fourth latest match + + uint32_t pos_mask; // (1U << pb) - 1 + uint32_t literal_context_bits; + uint32_t literal_pos_mask; + + /// Uncompressed size as bytes, or LZMA_VLI_UNKNOWN if end of + /// payload marker is expected. + lzma_vli uncompressed_size; + + //////////////////////////////// + // State of incomplete symbol // + //////////////////////////////// + + /// Position where to continue the decoder loop + enum { + SEQ_NORMALIZE, + SEQ_IS_MATCH, + seq_8(SEQ_LITERAL), + seq_8(SEQ_LITERAL_MATCHED), + SEQ_LITERAL_WRITE, + SEQ_IS_REP, + seq_len(SEQ_MATCH_LEN), + seq_6(SEQ_POS_SLOT), + SEQ_POS_MODEL, + SEQ_DIRECT, + seq_4(SEQ_ALIGN), + SEQ_EOPM, + SEQ_IS_REP0, + SEQ_SHORTREP, + SEQ_IS_REP0_LONG, + SEQ_IS_REP1, + SEQ_IS_REP2, + seq_len(SEQ_REP_LEN), + SEQ_COPY, + } sequence; + + /// Base of the current probability tree + probability *probs; + + /// Symbol being decoded. This is also used as an index variable in + /// bittree decoders: probs[symbol] + uint32_t symbol; + + /// Used as a loop termination condition on bittree decoders and + /// direct bits decoder. + uint32_t limit; + + /// Matched literal decoder: 0x100 or 0 to help avoiding branches. + /// Bittree reverse decoders: Offset of the next bit: 1 << offset + uint32_t offset; + + /// If decoding a literal: match byte. + /// If decoding a match: length of the match. + uint32_t len; +}; + + +static lzma_ret +lzma_decode(lzma_coder *restrict coder, lzma_dict *restrict dictptr, + const uint8_t *restrict in, + size_t *restrict in_pos, size_t in_size) +{ + //////////////////// + // Initialization // + //////////////////// + + if (!rc_read_init(&coder->rc, in, in_pos, in_size)) + return LZMA_OK; + + /////////////// + // Variables // + /////////////// + + // Making local copies of often-used variables improves both + // speed and readability. + + lzma_dict dict = *dictptr; + + const size_t dict_start = dict.pos; + + // Range decoder + rc_to_local(coder->rc, *in_pos); + + // State + uint32_t state = coder->state; + uint32_t rep0 = coder->rep0; + uint32_t rep1 = coder->rep1; + uint32_t rep2 = coder->rep2; + uint32_t rep3 = coder->rep3; + + const uint32_t pos_mask = coder->pos_mask; + + // These variables are actually needed only if we last time ran + // out of input in the middle of the decoder loop. + probability *probs = coder->probs; + uint32_t symbol = coder->symbol; + uint32_t limit = coder->limit; + uint32_t offset = coder->offset; + uint32_t len = coder->len; + + const uint32_t literal_pos_mask = coder->literal_pos_mask; + const uint32_t literal_context_bits = coder->literal_context_bits; + + // Temporary variables + uint32_t pos_state = dict.pos & pos_mask; + + lzma_ret ret = LZMA_OK; + + // If uncompressed size is known, there must be no end of payload + // marker. + const bool no_eopm = coder->uncompressed_size + != LZMA_VLI_UNKNOWN; + if (no_eopm && coder->uncompressed_size < dict.limit - dict.pos) + dict.limit = dict.pos + (size_t)(coder->uncompressed_size); + + // The main decoder loop. The "switch" is used to restart the decoder at + // correct location. Once restarted, the "switch" is no longer used. + switch (coder->sequence) + while (true) { + // Calculate new pos_state. This is skipped on the first loop + // since we already calculated it when setting up the local + // variables. + pos_state = dict.pos & pos_mask; + + case SEQ_NORMALIZE: + case SEQ_IS_MATCH: + if (unlikely(no_eopm && dict.pos == dict.limit)) + break; + + rc_if_0(coder->is_match[state][pos_state], SEQ_IS_MATCH) { + rc_update_0(coder->is_match[state][pos_state]); + + // It's a literal i.e. a single 8-bit byte. + + probs = literal_subcoder(coder->literal, + literal_context_bits, literal_pos_mask, + dict.pos, dict_get(&dict, 0)); + symbol = 1; + + if (is_literal_state(state)) { + // Decode literal without match byte. +#ifdef HAVE_SMALL + case SEQ_LITERAL: + do { + rc_bit(probs[symbol], , , SEQ_LITERAL); + } while (symbol < (1 << 8)); +#else + rc_bit_case(probs[symbol], , , SEQ_LITERAL0); + rc_bit_case(probs[symbol], , , SEQ_LITERAL1); + rc_bit_case(probs[symbol], , , SEQ_LITERAL2); + rc_bit_case(probs[symbol], , , SEQ_LITERAL3); + rc_bit_case(probs[symbol], , , SEQ_LITERAL4); + rc_bit_case(probs[symbol], , , SEQ_LITERAL5); + rc_bit_case(probs[symbol], , , SEQ_LITERAL6); + rc_bit_case(probs[symbol], , , SEQ_LITERAL7); +#endif + } else { + // Decode literal with match byte. + // + // We store the byte we compare against + // ("match byte") to "len" to minimize the + // number of variables we need to store + // between decoder calls. + len = dict_get(&dict, rep0) << 1; + + // The usage of "offset" allows omitting some + // branches, which should give tiny speed + // improvement on some CPUs. "offset" gets + // set to zero if match_bit didn't match. + offset = 0x100; + +#ifdef HAVE_SMALL + case SEQ_LITERAL_MATCHED: + do { + const uint32_t match_bit + = len & offset; + const uint32_t subcoder_index + = offset + match_bit + + symbol; + + rc_bit(probs[subcoder_index], + offset &= ~match_bit, + offset &= match_bit, + SEQ_LITERAL_MATCHED); + + // It seems to be faster to do this + // here instead of putting it to the + // beginning of the loop and then + // putting the "case" in the middle + // of the loop. + len <<= 1; + + } while (symbol < (1 << 8)); +#else + // Unroll the loop. + uint32_t match_bit; + uint32_t subcoder_index; + +# define d(seq) \ + case seq: \ + match_bit = len & offset; \ + subcoder_index = offset + match_bit + symbol; \ + rc_bit(probs[subcoder_index], \ + offset &= ~match_bit, \ + offset &= match_bit, \ + seq) + + d(SEQ_LITERAL_MATCHED0); + len <<= 1; + d(SEQ_LITERAL_MATCHED1); + len <<= 1; + d(SEQ_LITERAL_MATCHED2); + len <<= 1; + d(SEQ_LITERAL_MATCHED3); + len <<= 1; + d(SEQ_LITERAL_MATCHED4); + len <<= 1; + d(SEQ_LITERAL_MATCHED5); + len <<= 1; + d(SEQ_LITERAL_MATCHED6); + len <<= 1; + d(SEQ_LITERAL_MATCHED7); +# undef d +#endif + } + + //update_literal(state); + // Use a lookup table to update to literal state, + // since compared to other state updates, this would + // need two branches. + static const lzma_lzma_state next_state[] = { + STATE_LIT_LIT, + STATE_LIT_LIT, + STATE_LIT_LIT, + STATE_LIT_LIT, + STATE_MATCH_LIT_LIT, + STATE_REP_LIT_LIT, + STATE_SHORTREP_LIT_LIT, + STATE_MATCH_LIT, + STATE_REP_LIT, + STATE_SHORTREP_LIT, + STATE_MATCH_LIT, + STATE_REP_LIT + }; + state = next_state[state]; + + case SEQ_LITERAL_WRITE: + if (unlikely(dict_put(&dict, symbol))) { + coder->sequence = SEQ_LITERAL_WRITE; + goto out; + } + + continue; + } + + // Instead of a new byte we are going to get a byte range + // (distance and length) which will be repeated from our + // output history. + + rc_update_1(coder->is_match[state][pos_state]); + + case SEQ_IS_REP: + rc_if_0(coder->is_rep[state], SEQ_IS_REP) { + // Not a repeated match + rc_update_0(coder->is_rep[state]); + update_match(state); + + // The latest three match distances are kept in + // memory in case there are repeated matches. + rep3 = rep2; + rep2 = rep1; + rep1 = rep0; + + // Decode the length of the match. + len_decode(len, coder->match_len_decoder, + pos_state, SEQ_MATCH_LEN); + + // Prepare to decode the highest two bits of the + // match distance. + probs = coder->pos_slot[get_len_to_pos_state(len)]; + symbol = 1; + +#ifdef HAVE_SMALL + case SEQ_POS_SLOT: + do { + rc_bit(probs[symbol], , , SEQ_POS_SLOT); + } while (symbol < POS_SLOTS); +#else + rc_bit_case(probs[symbol], , , SEQ_POS_SLOT0); + rc_bit_case(probs[symbol], , , SEQ_POS_SLOT1); + rc_bit_case(probs[symbol], , , SEQ_POS_SLOT2); + rc_bit_case(probs[symbol], , , SEQ_POS_SLOT3); + rc_bit_case(probs[symbol], , , SEQ_POS_SLOT4); + rc_bit_case(probs[symbol], , , SEQ_POS_SLOT5); +#endif + // Get rid of the highest bit that was needed for + // indexing of the probability array. + symbol -= POS_SLOTS; + assert(symbol <= 63); + + if (symbol < START_POS_MODEL_INDEX) { + // Match distances [0, 3] have only two bits. + rep0 = symbol; + } else { + // Decode the lowest [1, 29] bits of + // the match distance. + limit = (symbol >> 1) - 1; + assert(limit >= 1 && limit <= 30); + rep0 = 2 + (symbol & 1); + + if (symbol < END_POS_MODEL_INDEX) { + // Prepare to decode the low bits for + // a distance of [4, 127]. + assert(limit <= 5); + rep0 <<= limit; + assert(rep0 <= 96); + // -1 is fine, because we start + // decoding at probs[1], not probs[0]. + // NOTE: This violates the C standard, + // since we are doing pointer + // arithmetic past the beginning of + // the array. + assert((int32_t)(rep0 - symbol - 1) + >= -1); + assert((int32_t)(rep0 - symbol - 1) + <= 82); + probs = coder->pos_special + rep0 + - symbol - 1; + symbol = 1; + offset = 0; + case SEQ_POS_MODEL: +#ifdef HAVE_SMALL + do { + rc_bit(probs[symbol], , + rep0 += 1 << offset, + SEQ_POS_MODEL); + } while (++offset < limit); +#else + switch (limit) { + case 5: + assert(offset == 0); + rc_bit(probs[symbol], , + rep0 += 1, + SEQ_POS_MODEL); + ++offset; + --limit; + case 4: + rc_bit(probs[symbol], , + rep0 += 1 << offset, + SEQ_POS_MODEL); + ++offset; + --limit; + case 3: + rc_bit(probs[symbol], , + rep0 += 1 << offset, + SEQ_POS_MODEL); + ++offset; + --limit; + case 2: + rc_bit(probs[symbol], , + rep0 += 1 << offset, + SEQ_POS_MODEL); + ++offset; + --limit; + case 1: + // We need "symbol" only for + // indexing the probability + // array, thus we can use + // rc_bit_last() here to omit + // the unneeded updating of + // "symbol". + rc_bit_last(probs[symbol], , + rep0 += 1 << offset, + SEQ_POS_MODEL); + } +#endif + } else { + // The distace is >= 128. Decode the + // lower bits without probabilities + // except the lowest four bits. + assert(symbol >= 14); + assert(limit >= 6); + limit -= ALIGN_BITS; + assert(limit >= 2); + case SEQ_DIRECT: + // Not worth manual unrolling + do { + rc_direct(rep0, SEQ_DIRECT); + } while (--limit > 0); + + // Decode the lowest four bits using + // probabilities. + rep0 <<= ALIGN_BITS; + symbol = 1; +#ifdef HAVE_SMALL + offset = 0; + case SEQ_ALIGN: + do { + rc_bit(coder->pos_align[ + symbol], , + rep0 += 1 << offset, + SEQ_ALIGN); + } while (++offset < ALIGN_BITS); +#else + case SEQ_ALIGN0: + rc_bit(coder->pos_align[symbol], , + rep0 += 1, SEQ_ALIGN0); + case SEQ_ALIGN1: + rc_bit(coder->pos_align[symbol], , + rep0 += 2, SEQ_ALIGN1); + case SEQ_ALIGN2: + rc_bit(coder->pos_align[symbol], , + rep0 += 4, SEQ_ALIGN2); + case SEQ_ALIGN3: + // Like in SEQ_POS_MODEL, we don't + // need "symbol" for anything else + // than indexing the probability array. + rc_bit_last(coder->pos_align[symbol], , + rep0 += 8, SEQ_ALIGN3); +#endif + + if (rep0 == UINT32_MAX) { + // End of payload marker was + // found. It must not be + // present if uncompressed + // size is known. + if (coder->uncompressed_size + != LZMA_VLI_UNKNOWN) { + ret = LZMA_DATA_ERROR; + goto out; + } + + case SEQ_EOPM: + // TODO Comment + rc_normalize(SEQ_EOPM); + ret = LZMA_STREAM_END; + goto out; + } + } + } + + // Validate the distance we just decoded. + if (unlikely(!dict_is_distance_valid(&dict, rep0))) { + ret = LZMA_DATA_ERROR; + goto out; + } + + } else { + rc_update_1(coder->is_rep[state]); + + // Repeated match + // + // The match distance is a value that we have had + // earlier. The latest four match distances are + // available as rep0, rep1, rep2 and rep3. We will + // now decode which of them is the new distance. + // + // There cannot be a match if we haven't produced + // any output, so check that first. + if (unlikely(!dict_is_distance_valid(&dict, 0))) { + ret = LZMA_DATA_ERROR; + goto out; + } + + case SEQ_IS_REP0: + rc_if_0(coder->is_rep0[state], SEQ_IS_REP0) { + rc_update_0(coder->is_rep0[state]); + // The distance is rep0. + + case SEQ_IS_REP0_LONG: + rc_if_0(coder->is_rep0_long[state][pos_state], + SEQ_IS_REP0_LONG) { + rc_update_0(coder->is_rep0_long[ + state][pos_state]); + + update_short_rep(state); + + case SEQ_SHORTREP: + if (unlikely(dict_put(&dict, dict_get( + &dict, rep0)))) { + coder->sequence = SEQ_SHORTREP; + goto out; + } + + continue; + } + + // Repeating more than one byte at + // distance of rep0. + rc_update_1(coder->is_rep0_long[ + state][pos_state]); + + } else { + rc_update_1(coder->is_rep0[state]); + + case SEQ_IS_REP1: + // The distance is rep1, rep2 or rep3. Once + // we find out which one of these three, it + // is stored to rep0 and rep1, rep2 and rep3 + // are updated accordingly. + rc_if_0(coder->is_rep1[state], SEQ_IS_REP1) { + rc_update_0(coder->is_rep1[state]); + + const uint32_t distance = rep1; + rep1 = rep0; + rep0 = distance; + + } else { + rc_update_1(coder->is_rep1[state]); + case SEQ_IS_REP2: + rc_if_0(coder->is_rep2[state], + SEQ_IS_REP2) { + rc_update_0(coder->is_rep2[ + state]); + + const uint32_t distance = rep2; + rep2 = rep1; + rep1 = rep0; + rep0 = distance; + + } else { + rc_update_1(coder->is_rep2[ + state]); + + const uint32_t distance = rep3; + rep3 = rep2; + rep2 = rep1; + rep1 = rep0; + rep0 = distance; + } + } + } + + update_long_rep(state); + + // Decode the length of the repeated match. + len_decode(len, coder->rep_len_decoder, + pos_state, SEQ_REP_LEN); + } + + ///////////////////////////////// + // Repeat from history buffer. // + ///////////////////////////////// + + // The length is always between these limits. There is no way + // to trigger the algorithm to set len outside this range. + assert(len >= MATCH_LEN_MIN); + assert(len <= MATCH_LEN_MAX); + + case SEQ_COPY: + // Repeat len bytes from distance of rep0. + if (unlikely(dict_repeat(&dict, rep0, &len))) { + coder->sequence = SEQ_COPY; + goto out; + } + } + + rc_normalize(SEQ_NORMALIZE); + coder->sequence = SEQ_IS_MATCH; + +out: + // Save state + + // NOTE: Must not copy dict.limit. + dictptr->pos = dict.pos; + dictptr->full = dict.full; + + rc_from_local(coder->rc, *in_pos); + + coder->state = state; + coder->rep0 = rep0; + coder->rep1 = rep1; + coder->rep2 = rep2; + coder->rep3 = rep3; + + coder->probs = probs; + coder->symbol = symbol; + coder->limit = limit; + coder->offset = offset; + coder->len = len; + + // Update the remaining amount of uncompressed data if uncompressed + // size was known. + if (coder->uncompressed_size != LZMA_VLI_UNKNOWN) { + coder->uncompressed_size -= dict.pos - dict_start; + + // Since there cannot be end of payload marker if the + // uncompressed size was known, we check here if we + // finished decoding. + if (coder->uncompressed_size == 0 && ret == LZMA_OK + && coder->sequence != SEQ_NORMALIZE) + ret = coder->sequence == SEQ_IS_MATCH + ? LZMA_STREAM_END : LZMA_DATA_ERROR; + } + + // We can do an additional check in the range decoder to catch some + // corrupted files. + if (ret == LZMA_STREAM_END) { + if (!rc_is_finished(coder->rc)) + ret = LZMA_DATA_ERROR; + + // Reset the range decoder so that it is ready to reinitialize + // for a new LZMA2 chunk. + rc_reset(coder->rc); + } + + return ret; +} + + + +static void +lzma_decoder_uncompressed(lzma_coder *coder, lzma_vli uncompressed_size) +{ + coder->uncompressed_size = uncompressed_size; +} + +/* +extern void +lzma_lzma_decoder_uncompressed(void *coder_ptr, lzma_vli uncompressed_size) +{ + // This is hack. + (*(lzma_coder **)(coder))->uncompressed_size = uncompressed_size; +} +*/ + +static void +lzma_decoder_reset(lzma_coder *coder, const void *opt) +{ + const lzma_options_lzma *options = opt; + + // NOTE: We assume that lc/lp/pb are valid since they were + // successfully decoded with lzma_lzma_decode_properties(). + // FIXME? + + // Calculate pos_mask. We don't need pos_bits as is for anything. + coder->pos_mask = (1U << options->pb) - 1; + + // Initialize the literal decoder. + literal_init(coder->literal, options->lc, options->lp); + + coder->literal_context_bits = options->lc; + coder->literal_pos_mask = (1U << options->lp) - 1; + + // State + coder->state = STATE_LIT_LIT; + coder->rep0 = 0; + coder->rep1 = 0; + coder->rep2 = 0; + coder->rep3 = 0; + coder->pos_mask = (1U << options->pb) - 1; + + // Range decoder + rc_reset(coder->rc); + + // Bit and bittree decoders + for (uint32_t i = 0; i < STATES; ++i) { + for (uint32_t j = 0; j <= coder->pos_mask; ++j) { + bit_reset(coder->is_match[i][j]); + bit_reset(coder->is_rep0_long[i][j]); + } + + bit_reset(coder->is_rep[i]); + bit_reset(coder->is_rep0[i]); + bit_reset(coder->is_rep1[i]); + bit_reset(coder->is_rep2[i]); + } + + for (uint32_t i = 0; i < LEN_TO_POS_STATES; ++i) + bittree_reset(coder->pos_slot[i], POS_SLOT_BITS); + + for (uint32_t i = 0; i < FULL_DISTANCES - END_POS_MODEL_INDEX; ++i) + bit_reset(coder->pos_special[i]); + + bittree_reset(coder->pos_align, ALIGN_BITS); + + // Len decoders (also bit/bittree) + const uint32_t num_pos_states = 1U << options->pb; + bit_reset(coder->match_len_decoder.choice); + bit_reset(coder->match_len_decoder.choice2); + bit_reset(coder->rep_len_decoder.choice); + bit_reset(coder->rep_len_decoder.choice2); + + for (uint32_t pos_state = 0; pos_state < num_pos_states; ++pos_state) { + bittree_reset(coder->match_len_decoder.low[pos_state], + LEN_LOW_BITS); + bittree_reset(coder->match_len_decoder.mid[pos_state], + LEN_MID_BITS); + + bittree_reset(coder->rep_len_decoder.low[pos_state], + LEN_LOW_BITS); + bittree_reset(coder->rep_len_decoder.mid[pos_state], + LEN_MID_BITS); + } + + bittree_reset(coder->match_len_decoder.high, LEN_HIGH_BITS); + bittree_reset(coder->rep_len_decoder.high, LEN_HIGH_BITS); + + coder->sequence = SEQ_IS_MATCH; + coder->probs = NULL; + coder->symbol = 0; + coder->limit = 0; + coder->offset = 0; + coder->len = 0; + + return; +} + + +extern lzma_ret +lzma_lzma_decoder_create(lzma_lz_decoder *lz, lzma_allocator *allocator, + const void *opt, lzma_lz_options *lz_options) +{ + if (lz->coder == NULL) { + lz->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (lz->coder == NULL) + return LZMA_MEM_ERROR; + + lz->code = &lzma_decode; + lz->reset = &lzma_decoder_reset; + lz->set_uncompressed = &lzma_decoder_uncompressed; + } + + // All dictionary sizes are OK here. LZ decoder will take care of + // the special cases. + const lzma_options_lzma *options = opt; + lz_options->dict_size = options->dict_size; + lz_options->preset_dict = options->preset_dict; + lz_options->preset_dict_size = options->preset_dict_size; + + return LZMA_OK; +} + + +/// Allocate and initialize LZMA decoder. This is used only via LZ +/// initialization (lzma_lzma_decoder_init() passes function pointer to +/// the LZ initialization). +static lzma_ret +lzma_decoder_init(lzma_lz_decoder *lz, lzma_allocator *allocator, + const void *options, lzma_lz_options *lz_options) +{ + if (!is_lclppb_valid(options)) + return LZMA_PROG_ERROR; + + return_if_error(lzma_lzma_decoder_create( + lz, allocator, options, lz_options)); + + lzma_decoder_reset(lz->coder, options); + lzma_decoder_uncompressed(lz->coder, LZMA_VLI_UNKNOWN); + + return LZMA_OK; +} + + +extern lzma_ret +lzma_lzma_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters) +{ + // LZMA can only be the last filter in the chain. This is enforced + // by the raw_decoder initialization. + assert(filters[1].init == NULL); + + return lzma_lz_decoder_init(next, allocator, filters, + &lzma_decoder_init); +} + + +extern bool +lzma_lzma_lclppb_decode(lzma_options_lzma *options, uint8_t byte) +{ + if (byte > (4 * 5 + 4) * 9 + 8) + return true; + + // See the file format specification to understand this. + options->pb = byte / (9 * 5); + byte -= options->pb * 9 * 5; + options->lp = byte / 9; + options->lc = byte - options->lp * 9; + + return options->lc + options->lp > LZMA_LCLP_MAX; +} + + +extern uint64_t +lzma_lzma_decoder_memusage_nocheck(const void *options) +{ + const lzma_options_lzma *const opt = options; + return sizeof(lzma_coder) + lzma_lz_decoder_memusage(opt->dict_size); +} + + +extern uint64_t +lzma_lzma_decoder_memusage(const void *options) +{ + if (!is_lclppb_valid(options)) + return UINT64_MAX; + + return lzma_lzma_decoder_memusage_nocheck(options); +} + + +extern lzma_ret +lzma_lzma_props_decode(void **options, lzma_allocator *allocator, + const uint8_t *props, size_t props_size) +{ + if (props_size != 5) + return LZMA_OPTIONS_ERROR; + + lzma_options_lzma *opt + = lzma_alloc(sizeof(lzma_options_lzma), allocator); + if (opt == NULL) + return LZMA_MEM_ERROR; + + if (lzma_lzma_lclppb_decode(opt, props[0])) + goto error; + + // All dictionary sizes are accepted, including zero. LZ decoder + // will automatically use a dictionary at least a few KiB even if + // a smaller dictionary is requested. + opt->dict_size = integer_read_32(props + 1); + + opt->preset_dict = NULL; + opt->preset_dict_size = 0; + + *options = opt; + + return LZMA_OK; + +error: + lzma_free(opt, allocator); + return LZMA_OPTIONS_ERROR; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.h new file mode 100644 index 00000000000..147208dc804 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.h @@ -0,0 +1,52 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lzma_decoder.h +/// \brief LZMA decoder API +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_LZMA_DECODER_H +#define LZMA_LZMA_DECODER_H + +#include "common.h" + + +/// Allocates and initializes LZMA decoder +extern lzma_ret lzma_lzma_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +extern uint64_t lzma_lzma_decoder_memusage(const void *options); + +extern lzma_ret lzma_lzma_props_decode( + void **options, lzma_allocator *allocator, + const uint8_t *props, size_t props_size); + + +/// \brief Decodes the LZMA Properties byte (lc/lp/pb) +/// +/// \return true if error occorred, false on success +/// +extern bool lzma_lzma_lclppb_decode( + lzma_options_lzma *options, uint8_t byte); + + +#ifdef LZMA_LZ_DECODER_H +/// Allocate and setup function pointers only. This is used by LZMA1 and +/// LZMA2 decoders. +extern lzma_ret lzma_lzma_decoder_create( + lzma_lz_decoder *lz, lzma_allocator *allocator, + const void *opt, lzma_lz_options *lz_options); + +/// Gets memory usage without validating lc/lp/pb. This is used by LZMA2 +/// decoder, because raw LZMA2 decoding doesn't need lc/lp/pb. +extern uint64_t lzma_lzma_decoder_memusage_nocheck(const void *options); + +#endif + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.c new file mode 100644 index 00000000000..bda194cddf2 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.c @@ -0,0 +1,675 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lzma_encoder.c +/// \brief LZMA encoder +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "lzma2_encoder.h" +#include "lzma_encoder_private.h" +#include "fastpos.h" + + +///////////// +// Literal // +///////////// + +static inline void +literal_matched(lzma_range_encoder *rc, probability *subcoder, + uint32_t match_byte, uint32_t symbol) +{ + uint32_t offset = 0x100; + symbol += UINT32_C(1) << 8; + + do { + match_byte <<= 1; + const uint32_t match_bit = match_byte & offset; + const uint32_t subcoder_index + = offset + match_bit + (symbol >> 8); + const uint32_t bit = (symbol >> 7) & 1; + rc_bit(rc, &subcoder[subcoder_index], bit); + + symbol <<= 1; + offset &= ~(match_byte ^ symbol); + + } while (symbol < (UINT32_C(1) << 16)); +} + + +static inline void +literal(lzma_coder *coder, lzma_mf *mf, uint32_t position) +{ + // Locate the literal byte to be encoded and the subcoder. + const uint8_t cur_byte = mf->buffer[ + mf->read_pos - mf->read_ahead]; + probability *subcoder = literal_subcoder(coder->literal, + coder->literal_context_bits, coder->literal_pos_mask, + position, mf->buffer[mf->read_pos - mf->read_ahead - 1]); + + if (is_literal_state(coder->state)) { + // Previous LZMA-symbol was a literal. Encode a normal + // literal without a match byte. + rc_bittree(&coder->rc, subcoder, 8, cur_byte); + } else { + // Previous LZMA-symbol was a match. Use the last byte of + // the match as a "match byte". That is, compare the bits + // of the current literal and the match byte. + const uint8_t match_byte = mf->buffer[ + mf->read_pos - coder->reps[0] - 1 + - mf->read_ahead]; + literal_matched(&coder->rc, subcoder, match_byte, cur_byte); + } + + update_literal(coder->state); +} + + +////////////////// +// Match length // +////////////////// + +static void +length_update_prices(lzma_length_encoder *lc, const uint32_t pos_state) +{ + const uint32_t table_size = lc->table_size; + lc->counters[pos_state] = table_size; + + const uint32_t a0 = rc_bit_0_price(lc->choice); + const uint32_t a1 = rc_bit_1_price(lc->choice); + const uint32_t b0 = a1 + rc_bit_0_price(lc->choice2); + const uint32_t b1 = a1 + rc_bit_1_price(lc->choice2); + uint32_t *const prices = lc->prices[pos_state]; + + uint32_t i; + for (i = 0; i < table_size && i < LEN_LOW_SYMBOLS; ++i) + prices[i] = a0 + rc_bittree_price(lc->low[pos_state], + LEN_LOW_BITS, i); + + for (; i < table_size && i < LEN_LOW_SYMBOLS + LEN_MID_SYMBOLS; ++i) + prices[i] = b0 + rc_bittree_price(lc->mid[pos_state], + LEN_MID_BITS, i - LEN_LOW_SYMBOLS); + + for (; i < table_size; ++i) + prices[i] = b1 + rc_bittree_price(lc->high, LEN_HIGH_BITS, + i - LEN_LOW_SYMBOLS - LEN_MID_SYMBOLS); + + return; +} + + +static inline void +length(lzma_range_encoder *rc, lzma_length_encoder *lc, + const uint32_t pos_state, uint32_t len, const bool fast_mode) +{ + assert(len <= MATCH_LEN_MAX); + len -= MATCH_LEN_MIN; + + if (len < LEN_LOW_SYMBOLS) { + rc_bit(rc, &lc->choice, 0); + rc_bittree(rc, lc->low[pos_state], LEN_LOW_BITS, len); + } else { + rc_bit(rc, &lc->choice, 1); + len -= LEN_LOW_SYMBOLS; + + if (len < LEN_MID_SYMBOLS) { + rc_bit(rc, &lc->choice2, 0); + rc_bittree(rc, lc->mid[pos_state], LEN_MID_BITS, len); + } else { + rc_bit(rc, &lc->choice2, 1); + len -= LEN_MID_SYMBOLS; + rc_bittree(rc, lc->high, LEN_HIGH_BITS, len); + } + } + + // Only getoptimum uses the prices so don't update the table when + // in fast mode. + if (!fast_mode) + if (--lc->counters[pos_state] == 0) + length_update_prices(lc, pos_state); +} + + +/////////// +// Match // +/////////// + +static inline void +match(lzma_coder *coder, const uint32_t pos_state, + const uint32_t distance, const uint32_t len) +{ + update_match(coder->state); + + length(&coder->rc, &coder->match_len_encoder, pos_state, len, + coder->fast_mode); + + const uint32_t pos_slot = get_pos_slot(distance); + const uint32_t len_to_pos_state = get_len_to_pos_state(len); + rc_bittree(&coder->rc, coder->pos_slot[len_to_pos_state], + POS_SLOT_BITS, pos_slot); + + if (pos_slot >= START_POS_MODEL_INDEX) { + const uint32_t footer_bits = (pos_slot >> 1) - 1; + const uint32_t base = (2 | (pos_slot & 1)) << footer_bits; + const uint32_t pos_reduced = distance - base; + + if (pos_slot < END_POS_MODEL_INDEX) { + // Careful here: base - pos_slot - 1 can be -1, but + // rc_bittree_reverse starts at probs[1], not probs[0]. + rc_bittree_reverse(&coder->rc, + coder->pos_special + base - pos_slot - 1, + footer_bits, pos_reduced); + } else { + rc_direct(&coder->rc, pos_reduced >> ALIGN_BITS, + footer_bits - ALIGN_BITS); + rc_bittree_reverse( + &coder->rc, coder->pos_align, + ALIGN_BITS, pos_reduced & ALIGN_MASK); + ++coder->align_price_count; + } + } + + coder->reps[3] = coder->reps[2]; + coder->reps[2] = coder->reps[1]; + coder->reps[1] = coder->reps[0]; + coder->reps[0] = distance; + ++coder->match_price_count; +} + + +//////////////////// +// Repeated match // +//////////////////// + +static inline void +rep_match(lzma_coder *coder, const uint32_t pos_state, + const uint32_t rep, const uint32_t len) +{ + if (rep == 0) { + rc_bit(&coder->rc, &coder->is_rep0[coder->state], 0); + rc_bit(&coder->rc, + &coder->is_rep0_long[coder->state][pos_state], + len != 1); + } else { + const uint32_t distance = coder->reps[rep]; + rc_bit(&coder->rc, &coder->is_rep0[coder->state], 1); + + if (rep == 1) { + rc_bit(&coder->rc, &coder->is_rep1[coder->state], 0); + } else { + rc_bit(&coder->rc, &coder->is_rep1[coder->state], 1); + rc_bit(&coder->rc, &coder->is_rep2[coder->state], + rep - 2); + + if (rep == 3) + coder->reps[3] = coder->reps[2]; + + coder->reps[2] = coder->reps[1]; + } + + coder->reps[1] = coder->reps[0]; + coder->reps[0] = distance; + } + + if (len == 1) { + update_short_rep(coder->state); + } else { + length(&coder->rc, &coder->rep_len_encoder, pos_state, len, + coder->fast_mode); + update_long_rep(coder->state); + } +} + + +////////// +// Main // +////////// + +static void +encode_symbol(lzma_coder *coder, lzma_mf *mf, + uint32_t back, uint32_t len, uint32_t position) +{ + const uint32_t pos_state = position & coder->pos_mask; + + if (back == UINT32_MAX) { + // Literal i.e. eight-bit byte + assert(len == 1); + rc_bit(&coder->rc, + &coder->is_match[coder->state][pos_state], 0); + literal(coder, mf, position); + } else { + // Some type of match + rc_bit(&coder->rc, + &coder->is_match[coder->state][pos_state], 1); + + if (back < REP_DISTANCES) { + // It's a repeated match i.e. the same distance + // has been used earlier. + rc_bit(&coder->rc, &coder->is_rep[coder->state], 1); + rep_match(coder, pos_state, back, len); + } else { + // Normal match + rc_bit(&coder->rc, &coder->is_rep[coder->state], 0); + match(coder, pos_state, back - REP_DISTANCES, len); + } + } + + assert(mf->read_ahead >= len); + mf->read_ahead -= len; +} + + +static bool +encode_init(lzma_coder *coder, lzma_mf *mf) +{ + assert(mf_position(mf) == 0); + + if (mf->read_pos == mf->read_limit) { + if (mf->action == LZMA_RUN) + return false; // We cannot do anything. + + // We are finishing (we cannot get here when flushing). + assert(mf->write_pos == mf->read_pos); + assert(mf->action == LZMA_FINISH); + } else { + // Do the actual initialization. The first LZMA symbol must + // always be a literal. + mf_skip(mf, 1); + mf->read_ahead = 0; + rc_bit(&coder->rc, &coder->is_match[0][0], 0); + rc_bittree(&coder->rc, coder->literal[0], 8, mf->buffer[0]); + } + + // Initialization is done (except if empty file). + coder->is_initialized = true; + + return true; +} + + +static void +encode_eopm(lzma_coder *coder, uint32_t position) +{ + const uint32_t pos_state = position & coder->pos_mask; + rc_bit(&coder->rc, &coder->is_match[coder->state][pos_state], 1); + rc_bit(&coder->rc, &coder->is_rep[coder->state], 0); + match(coder, pos_state, UINT32_MAX, MATCH_LEN_MIN); +} + + +/// Number of bytes that a single encoding loop in lzma_lzma_encode() can +/// consume from the dictionary. This limit comes from lzma_lzma_optimum() +/// and may need to be updated if that function is significantly modified. +#define LOOP_INPUT_MAX (OPTS + 1) + + +extern lzma_ret +lzma_lzma_encode(lzma_coder *restrict coder, lzma_mf *restrict mf, + uint8_t *restrict out, size_t *restrict out_pos, + size_t out_size, uint32_t limit) +{ + // Initialize the stream if no data has been encoded yet. + if (!coder->is_initialized && !encode_init(coder, mf)) + return LZMA_OK; + + // Get the lowest bits of the uncompressed offset from the LZ layer. + uint32_t position = mf_position(mf); + + while (true) { + // Encode pending bits, if any. Calling this before encoding + // the next symbol is needed only with plain LZMA, since + // LZMA2 always provides big enough buffer to flush + // everything out from the range encoder. For the same reason, + // rc_encode() never returns true when this function is used + // as part of LZMA2 encoder. + if (rc_encode(&coder->rc, out, out_pos, out_size)) { + assert(limit == UINT32_MAX); + return LZMA_OK; + } + + // With LZMA2 we need to take care that compressed size of + // a chunk doesn't get too big. + // TODO + if (limit != UINT32_MAX + && (mf->read_pos - mf->read_ahead >= limit + || *out_pos + rc_pending(&coder->rc) + >= LZMA2_CHUNK_MAX + - LOOP_INPUT_MAX)) + break; + + // Check that there is some input to process. + if (mf->read_pos >= mf->read_limit) { + if (mf->action == LZMA_RUN) + return LZMA_OK; + + if (mf->read_ahead == 0) + break; + } + + // Get optimal match (repeat position and length). + // Value ranges for pos: + // - [0, REP_DISTANCES): repeated match + // - [REP_DISTANCES, UINT32_MAX): + // match at (pos - REP_DISTANCES) + // - UINT32_MAX: not a match but a literal + // Value ranges for len: + // - [MATCH_LEN_MIN, MATCH_LEN_MAX] + uint32_t len; + uint32_t back; + + if (coder->fast_mode) + lzma_lzma_optimum_fast(coder, mf, &back, &len); + else + lzma_lzma_optimum_normal( + coder, mf, &back, &len, position); + + encode_symbol(coder, mf, back, len, position); + + position += len; + } + + if (!coder->is_flushed) { + coder->is_flushed = true; + + // We don't support encoding plain LZMA streams without EOPM, + // and LZMA2 doesn't use EOPM at LZMA level. + if (limit == UINT32_MAX) + encode_eopm(coder, position); + + // Flush the remaining bytes from the range encoder. + rc_flush(&coder->rc); + + // Copy the remaining bytes to the output buffer. If there + // isn't enough output space, we will copy out the remaining + // bytes on the next call to this function by using + // the rc_encode() call in the encoding loop above. + if (rc_encode(&coder->rc, out, out_pos, out_size)) { + assert(limit == UINT32_MAX); + return LZMA_OK; + } + } + + // Make it ready for the next LZMA2 chunk. + coder->is_flushed = false; + + return LZMA_STREAM_END; +} + + +static lzma_ret +lzma_encode(lzma_coder *restrict coder, lzma_mf *restrict mf, + uint8_t *restrict out, size_t *restrict out_pos, + size_t out_size) +{ + // Plain LZMA has no support for sync-flushing. + if (unlikely(mf->action == LZMA_SYNC_FLUSH)) + return LZMA_OPTIONS_ERROR; + + return lzma_lzma_encode(coder, mf, out, out_pos, out_size, UINT32_MAX); +} + + +//////////////////// +// Initialization // +//////////////////// + +static bool +is_options_valid(const lzma_options_lzma *options) +{ + // Validate some of the options. LZ encoder validates nice_len too + // but we need a valid value here earlier. + return is_lclppb_valid(options) + && options->nice_len >= MATCH_LEN_MIN + && options->nice_len <= MATCH_LEN_MAX + && (options->mode == LZMA_MODE_FAST + || options->mode == LZMA_MODE_NORMAL); +} + + +static void +set_lz_options(lzma_lz_options *lz_options, const lzma_options_lzma *options) +{ + // LZ encoder initialization does the validation for these so we + // don't need to validate here. + lz_options->before_size = OPTS; + lz_options->dict_size = options->dict_size; + lz_options->after_size = LOOP_INPUT_MAX; + lz_options->match_len_max = MATCH_LEN_MAX; + lz_options->nice_len = options->nice_len; + lz_options->match_finder = options->mf; + lz_options->depth = options->depth; + lz_options->preset_dict = options->preset_dict; + lz_options->preset_dict_size = options->preset_dict_size; + return; +} + + +static void +length_encoder_reset(lzma_length_encoder *lencoder, + const uint32_t num_pos_states, const bool fast_mode) +{ + bit_reset(lencoder->choice); + bit_reset(lencoder->choice2); + + for (size_t pos_state = 0; pos_state < num_pos_states; ++pos_state) { + bittree_reset(lencoder->low[pos_state], LEN_LOW_BITS); + bittree_reset(lencoder->mid[pos_state], LEN_MID_BITS); + } + + bittree_reset(lencoder->high, LEN_HIGH_BITS); + + if (!fast_mode) + for (size_t pos_state = 0; pos_state < num_pos_states; + ++pos_state) + length_update_prices(lencoder, pos_state); + + return; +} + + +extern lzma_ret +lzma_lzma_encoder_reset(lzma_coder *coder, const lzma_options_lzma *options) +{ + if (!is_options_valid(options)) + return LZMA_OPTIONS_ERROR; + + coder->pos_mask = (1U << options->pb) - 1; + coder->literal_context_bits = options->lc; + coder->literal_pos_mask = (1U << options->lp) - 1; + + // Range coder + rc_reset(&coder->rc); + + // State + coder->state = 0; + for (size_t i = 0; i < REP_DISTANCES; ++i) + coder->reps[i] = 0; + + literal_init(coder->literal, options->lc, options->lp); + + // Bit encoders + for (size_t i = 0; i < STATES; ++i) { + for (size_t j = 0; j <= coder->pos_mask; ++j) { + bit_reset(coder->is_match[i][j]); + bit_reset(coder->is_rep0_long[i][j]); + } + + bit_reset(coder->is_rep[i]); + bit_reset(coder->is_rep0[i]); + bit_reset(coder->is_rep1[i]); + bit_reset(coder->is_rep2[i]); + } + + for (size_t i = 0; i < FULL_DISTANCES - END_POS_MODEL_INDEX; ++i) + bit_reset(coder->pos_special[i]); + + // Bit tree encoders + for (size_t i = 0; i < LEN_TO_POS_STATES; ++i) + bittree_reset(coder->pos_slot[i], POS_SLOT_BITS); + + bittree_reset(coder->pos_align, ALIGN_BITS); + + // Length encoders + length_encoder_reset(&coder->match_len_encoder, + 1U << options->pb, coder->fast_mode); + + length_encoder_reset(&coder->rep_len_encoder, + 1U << options->pb, coder->fast_mode); + + // Price counts are incremented every time appropriate probabilities + // are changed. price counts are set to zero when the price tables + // are updated, which is done when the appropriate price counts have + // big enough value, and lzma_mf.read_ahead == 0 which happens at + // least every OPTS (a few thousand) possible price count increments. + // + // By resetting price counts to UINT32_MAX / 2, we make sure that the + // price tables will be initialized before they will be used (since + // the value is definitely big enough), and that it is OK to increment + // price counts without risk of integer overflow (since UINT32_MAX / 2 + // is small enough). The current code doesn't increment price counts + // before initializing price tables, but it maybe done in future if + // we add support for saving the state between LZMA2 chunks. + coder->match_price_count = UINT32_MAX / 2; + coder->align_price_count = UINT32_MAX / 2; + + coder->opts_end_index = 0; + coder->opts_current_index = 0; + + return LZMA_OK; +} + + +extern lzma_ret +lzma_lzma_encoder_create(lzma_coder **coder_ptr, lzma_allocator *allocator, + const lzma_options_lzma *options, lzma_lz_options *lz_options) +{ + // Allocate lzma_coder if it wasn't already allocated. + if (*coder_ptr == NULL) { + *coder_ptr = lzma_alloc(sizeof(lzma_coder), allocator); + if (*coder_ptr == NULL) + return LZMA_MEM_ERROR; + } + + lzma_coder *coder = *coder_ptr; + + // Set compression mode. We haven't validates the options yet, + // but it's OK here, since nothing bad happens with invalid + // options in the code below, and they will get rejected by + // lzma_lzma_encoder_reset() call at the end of this function. + switch (options->mode) { + case LZMA_MODE_FAST: + coder->fast_mode = true; + break; + + case LZMA_MODE_NORMAL: { + coder->fast_mode = false; + + // Set dist_table_size. + // Round the dictionary size up to next 2^n. + uint32_t log_size = 0; + while ((UINT32_C(1) << log_size) < options->dict_size) + ++log_size; + + coder->dist_table_size = log_size * 2; + + // Length encoders' price table size + coder->match_len_encoder.table_size + = options->nice_len + 1 - MATCH_LEN_MIN; + coder->rep_len_encoder.table_size + = options->nice_len + 1 - MATCH_LEN_MIN; + break; + } + + default: + return LZMA_OPTIONS_ERROR; + } + + // We don't need to write the first byte as literal if there is + // a non-empty preset dictionary. encode_init() wouldn't even work + // if there is a non-empty preset dictionary, because encode_init() + // assumes that position is zero and previous byte is also zero. + coder->is_initialized = options->preset_dict != NULL + && options->preset_dict_size > 0; + coder->is_flushed = false; + + set_lz_options(lz_options, options); + + return lzma_lzma_encoder_reset(coder, options); +} + + +static lzma_ret +lzma_encoder_init(lzma_lz_encoder *lz, lzma_allocator *allocator, + const void *options, lzma_lz_options *lz_options) +{ + lz->code = &lzma_encode; + return lzma_lzma_encoder_create( + &lz->coder, allocator, options, lz_options); +} + + +extern lzma_ret +lzma_lzma_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters) +{ + return lzma_lz_encoder_init( + next, allocator, filters, &lzma_encoder_init); +} + + +extern uint64_t +lzma_lzma_encoder_memusage(const void *options) +{ + if (!is_options_valid(options)) + return UINT64_MAX; + + lzma_lz_options lz_options; + set_lz_options(&lz_options, options); + + const uint64_t lz_memusage = lzma_lz_encoder_memusage(&lz_options); + if (lz_memusage == UINT64_MAX) + return UINT64_MAX; + + return (uint64_t)(sizeof(lzma_coder)) + lz_memusage; +} + + +extern bool +lzma_lzma_lclppb_encode(const lzma_options_lzma *options, uint8_t *byte) +{ + if (!is_lclppb_valid(options)) + return true; + + *byte = (options->pb * 5 + options->lp) * 9 + options->lc; + assert(*byte <= (4 * 5 + 4) * 9 + 8); + + return false; +} + + +#ifdef HAVE_ENCODER_LZMA1 +extern lzma_ret +lzma_lzma_props_encode(const void *options, uint8_t *out) +{ + const lzma_options_lzma *const opt = options; + + if (lzma_lzma_lclppb_encode(opt, out)) + return LZMA_PROG_ERROR; + + integer_write_32(out + 1, opt->dict_size); + + return LZMA_OK; +} +#endif + + +extern LZMA_API(lzma_bool) +lzma_mode_is_supported(lzma_mode mode) +{ + return mode == LZMA_MODE_FAST || mode == LZMA_MODE_NORMAL; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.h new file mode 100644 index 00000000000..835e1f58330 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.h @@ -0,0 +1,54 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lzma_encoder.h +/// \brief LZMA encoder API +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_LZMA_ENCODER_H +#define LZMA_LZMA_ENCODER_H + +#include "common.h" + + +extern lzma_ret lzma_lzma_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + + +extern uint64_t lzma_lzma_encoder_memusage(const void *options); + +extern lzma_ret lzma_lzma_props_encode(const void *options, uint8_t *out); + + +/// Encodes lc/lp/pb into one byte. Returns false on success and true on error. +extern bool lzma_lzma_lclppb_encode( + const lzma_options_lzma *options, uint8_t *byte); + + +#ifdef LZMA_LZ_ENCODER_H + +/// Initializes raw LZMA encoder; this is used by LZMA2. +extern lzma_ret lzma_lzma_encoder_create( + lzma_coder **coder_ptr, lzma_allocator *allocator, + const lzma_options_lzma *options, lzma_lz_options *lz_options); + + +/// Resets an already initialized LZMA encoder; this is used by LZMA2. +extern lzma_ret lzma_lzma_encoder_reset( + lzma_coder *coder, const lzma_options_lzma *options); + + +extern lzma_ret lzma_lzma_encode(lzma_coder *restrict coder, + lzma_mf *restrict mf, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, + uint32_t read_limit); + +#endif + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_fast.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_fast.c new file mode 100644 index 00000000000..61aaf3b9b8d --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_fast.c @@ -0,0 +1,179 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lzma_encoder_optimum_fast.c +// +// Author: Igor Pavlov +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "lzma_encoder_private.h" + + +#define change_pair(small_dist, big_dist) \ + (((big_dist) >> 7) > (small_dist)) + + +extern void +lzma_lzma_optimum_fast(lzma_coder *restrict coder, lzma_mf *restrict mf, + uint32_t *restrict back_res, uint32_t *restrict len_res) +{ + const uint32_t nice_len = mf->nice_len; + + uint32_t len_main; + uint32_t matches_count; + if (mf->read_ahead == 0) { + len_main = mf_find(mf, &matches_count, coder->matches); + } else { + assert(mf->read_ahead == 1); + len_main = coder->longest_match_length; + matches_count = coder->matches_count; + } + + const uint8_t *buf = mf_ptr(mf) - 1; + const uint32_t buf_avail = MIN(mf_avail(mf) + 1, MATCH_LEN_MAX); + + if (buf_avail < 2) { + // There's not enough input left to encode a match. + *back_res = UINT32_MAX; + *len_res = 1; + return; + } + + // Look for repeated matches; scan the previous four match distances + uint32_t rep_len = 0; + uint32_t rep_index = 0; + + for (uint32_t i = 0; i < REP_DISTANCES; ++i) { + // Pointer to the beginning of the match candidate + const uint8_t *const buf_back = buf - coder->reps[i] - 1; + + // If the first two bytes (2 == MATCH_LEN_MIN) do not match, + // this rep is not useful. + if (not_equal_16(buf, buf_back)) + continue; + + // The first two bytes matched. + // Calculate the length of the match. + uint32_t len; + for (len = 2; len < buf_avail + && buf[len] == buf_back[len]; ++len) ; + + // If we have found a repeated match that is at least + // nice_len long, return it immediatelly. + if (len >= nice_len) { + *back_res = i; + *len_res = len; + mf_skip(mf, len - 1); + return; + } + + if (len > rep_len) { + rep_index = i; + rep_len = len; + } + } + + // We didn't find a long enough repeated match. Encode it as a normal + // match if the match length is at least nice_len. + if (len_main >= nice_len) { + *back_res = coder->matches[matches_count - 1].dist + + REP_DISTANCES; + *len_res = len_main; + mf_skip(mf, len_main - 1); + return; + } + + uint32_t back_main = 0; + if (len_main >= 2) { + back_main = coder->matches[matches_count - 1].dist; + + while (matches_count > 1 && len_main == + coder->matches[matches_count - 2].len + 1) { + if (!change_pair(coder->matches[ + matches_count - 2].dist, + back_main)) + break; + + --matches_count; + len_main = coder->matches[matches_count - 1].len; + back_main = coder->matches[matches_count - 1].dist; + } + + if (len_main == 2 && back_main >= 0x80) + len_main = 1; + } + + if (rep_len >= 2) { + if (rep_len + 1 >= len_main + || (rep_len + 2 >= len_main + && back_main > (UINT32_C(1) << 9)) + || (rep_len + 3 >= len_main + && back_main > (UINT32_C(1) << 15))) { + *back_res = rep_index; + *len_res = rep_len; + mf_skip(mf, rep_len - 1); + return; + } + } + + if (len_main < 2 || buf_avail <= 2) { + *back_res = UINT32_MAX; + *len_res = 1; + return; + } + + // Get the matches for the next byte. If we find a better match, + // the current byte is encoded as a literal. + coder->longest_match_length = mf_find(mf, + &coder->matches_count, coder->matches); + + if (coder->longest_match_length >= 2) { + const uint32_t new_dist = coder->matches[ + coder->matches_count - 1].dist; + + if ((coder->longest_match_length >= len_main + && new_dist < back_main) + || (coder->longest_match_length == len_main + 1 + && !change_pair(back_main, new_dist)) + || (coder->longest_match_length > len_main + 1) + || (coder->longest_match_length + 1 >= len_main + && len_main >= 3 + && change_pair(new_dist, back_main))) { + *back_res = UINT32_MAX; + *len_res = 1; + return; + } + } + + // In contrast to LZMA SDK, dictionary could not have been moved + // between mf_find() calls, thus it is safe to just increment + // the old buf pointer instead of recalculating it with mf_ptr(). + ++buf; + + const uint32_t limit = len_main - 1; + + for (uint32_t i = 0; i < REP_DISTANCES; ++i) { + const uint8_t *const buf_back = buf - coder->reps[i] - 1; + + if (not_equal_16(buf, buf_back)) + continue; + + uint32_t len; + for (len = 2; len < limit + && buf[len] == buf_back[len]; ++len) ; + + if (len >= limit) { + *back_res = UINT32_MAX; + *len_res = 1; + return; + } + } + + *back_res = back_main + REP_DISTANCES; + *len_res = len_main; + mf_skip(mf, len_main - 2); + return; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_normal.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_normal.c new file mode 100644 index 00000000000..cb9a1b9dbc4 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_normal.c @@ -0,0 +1,868 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lzma_encoder_optimum_normal.c +// +// Author: Igor Pavlov +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "lzma_encoder_private.h" +#include "fastpos.h" + + +//////////// +// Prices // +//////////// + +static uint32_t +get_literal_price(const lzma_coder *const coder, const uint32_t pos, + const uint32_t prev_byte, const bool match_mode, + uint32_t match_byte, uint32_t symbol) +{ + const probability *const subcoder = literal_subcoder(coder->literal, + coder->literal_context_bits, coder->literal_pos_mask, + pos, prev_byte); + + uint32_t price = 0; + + if (!match_mode) { + price = rc_bittree_price(subcoder, 8, symbol); + } else { + uint32_t offset = 0x100; + symbol += UINT32_C(1) << 8; + + do { + match_byte <<= 1; + + const uint32_t match_bit = match_byte & offset; + const uint32_t subcoder_index + = offset + match_bit + (symbol >> 8); + const uint32_t bit = (symbol >> 7) & 1; + price += rc_bit_price(subcoder[subcoder_index], bit); + + symbol <<= 1; + offset &= ~(match_byte ^ symbol); + + } while (symbol < (UINT32_C(1) << 16)); + } + + return price; +} + + +static inline uint32_t +get_len_price(const lzma_length_encoder *const lencoder, + const uint32_t len, const uint32_t pos_state) +{ + // NOTE: Unlike the other price tables, length prices are updated + // in lzma_encoder.c + return lencoder->prices[pos_state][len - MATCH_LEN_MIN]; +} + + +static inline uint32_t +get_short_rep_price(const lzma_coder *const coder, + const lzma_lzma_state state, const uint32_t pos_state) +{ + return rc_bit_0_price(coder->is_rep0[state]) + + rc_bit_0_price(coder->is_rep0_long[state][pos_state]); +} + + +static inline uint32_t +get_pure_rep_price(const lzma_coder *const coder, const uint32_t rep_index, + const lzma_lzma_state state, uint32_t pos_state) +{ + uint32_t price; + + if (rep_index == 0) { + price = rc_bit_0_price(coder->is_rep0[state]); + price += rc_bit_1_price(coder->is_rep0_long[state][pos_state]); + } else { + price = rc_bit_1_price(coder->is_rep0[state]); + + if (rep_index == 1) { + price += rc_bit_0_price(coder->is_rep1[state]); + } else { + price += rc_bit_1_price(coder->is_rep1[state]); + price += rc_bit_price(coder->is_rep2[state], + rep_index - 2); + } + } + + return price; +} + + +static inline uint32_t +get_rep_price(const lzma_coder *const coder, const uint32_t rep_index, + const uint32_t len, const lzma_lzma_state state, + const uint32_t pos_state) +{ + return get_len_price(&coder->rep_len_encoder, len, pos_state) + + get_pure_rep_price(coder, rep_index, state, pos_state); +} + + +static inline uint32_t +get_pos_len_price(const lzma_coder *const coder, const uint32_t pos, + const uint32_t len, const uint32_t pos_state) +{ + const uint32_t len_to_pos_state = get_len_to_pos_state(len); + uint32_t price; + + if (pos < FULL_DISTANCES) { + price = coder->distances_prices[len_to_pos_state][pos]; + } else { + const uint32_t pos_slot = get_pos_slot_2(pos); + price = coder->pos_slot_prices[len_to_pos_state][pos_slot] + + coder->align_prices[pos & ALIGN_MASK]; + } + + price += get_len_price(&coder->match_len_encoder, len, pos_state); + + return price; +} + + +static void +fill_distances_prices(lzma_coder *coder) +{ + for (uint32_t len_to_pos_state = 0; + len_to_pos_state < LEN_TO_POS_STATES; + ++len_to_pos_state) { + + uint32_t *const pos_slot_prices + = coder->pos_slot_prices[len_to_pos_state]; + + // Price to encode the pos_slot. + for (uint32_t pos_slot = 0; + pos_slot < coder->dist_table_size; ++pos_slot) + pos_slot_prices[pos_slot] = rc_bittree_price( + coder->pos_slot[len_to_pos_state], + POS_SLOT_BITS, pos_slot); + + // For matches with distance >= FULL_DISTANCES, add the price + // of the direct bits part of the match distance. (Align bits + // are handled by fill_align_prices()). + for (uint32_t pos_slot = END_POS_MODEL_INDEX; + pos_slot < coder->dist_table_size; ++pos_slot) + pos_slot_prices[pos_slot] += rc_direct_price( + ((pos_slot >> 1) - 1) - ALIGN_BITS); + + // Distances in the range [0, 3] are fully encoded with + // pos_slot, so they are used for coder->distances_prices + // as is. + for (uint32_t i = 0; i < START_POS_MODEL_INDEX; ++i) + coder->distances_prices[len_to_pos_state][i] + = pos_slot_prices[i]; + } + + // Distances in the range [4, 127] depend on pos_slot and pos_special. + // We do this in a loop separate from the above loop to avoid + // redundant calls to get_pos_slot(). + for (uint32_t i = START_POS_MODEL_INDEX; i < FULL_DISTANCES; ++i) { + const uint32_t pos_slot = get_pos_slot(i); + const uint32_t footer_bits = ((pos_slot >> 1) - 1); + const uint32_t base = (2 | (pos_slot & 1)) << footer_bits; + const uint32_t price = rc_bittree_reverse_price( + coder->pos_special + base - pos_slot - 1, + footer_bits, i - base); + + for (uint32_t len_to_pos_state = 0; + len_to_pos_state < LEN_TO_POS_STATES; + ++len_to_pos_state) + coder->distances_prices[len_to_pos_state][i] + = price + coder->pos_slot_prices[ + len_to_pos_state][pos_slot]; + } + + coder->match_price_count = 0; + return; +} + + +static void +fill_align_prices(lzma_coder *coder) +{ + for (uint32_t i = 0; i < ALIGN_TABLE_SIZE; ++i) + coder->align_prices[i] = rc_bittree_reverse_price( + coder->pos_align, ALIGN_BITS, i); + + coder->align_price_count = 0; + return; +} + + +///////////// +// Optimal // +///////////// + +static inline void +make_literal(lzma_optimal *optimal) +{ + optimal->back_prev = UINT32_MAX; + optimal->prev_1_is_literal = false; +} + + +static inline void +make_short_rep(lzma_optimal *optimal) +{ + optimal->back_prev = 0; + optimal->prev_1_is_literal = false; +} + + +#define is_short_rep(optimal) \ + ((optimal).back_prev == 0) + + +static void +backward(lzma_coder *restrict coder, uint32_t *restrict len_res, + uint32_t *restrict back_res, uint32_t cur) +{ + coder->opts_end_index = cur; + + uint32_t pos_mem = coder->opts[cur].pos_prev; + uint32_t back_mem = coder->opts[cur].back_prev; + + do { + if (coder->opts[cur].prev_1_is_literal) { + make_literal(&coder->opts[pos_mem]); + coder->opts[pos_mem].pos_prev = pos_mem - 1; + + if (coder->opts[cur].prev_2) { + coder->opts[pos_mem - 1].prev_1_is_literal + = false; + coder->opts[pos_mem - 1].pos_prev + = coder->opts[cur].pos_prev_2; + coder->opts[pos_mem - 1].back_prev + = coder->opts[cur].back_prev_2; + } + } + + const uint32_t pos_prev = pos_mem; + const uint32_t back_cur = back_mem; + + back_mem = coder->opts[pos_prev].back_prev; + pos_mem = coder->opts[pos_prev].pos_prev; + + coder->opts[pos_prev].back_prev = back_cur; + coder->opts[pos_prev].pos_prev = cur; + cur = pos_prev; + + } while (cur != 0); + + coder->opts_current_index = coder->opts[0].pos_prev; + *len_res = coder->opts[0].pos_prev; + *back_res = coder->opts[0].back_prev; + + return; +} + + +////////// +// Main // +////////// + +static inline uint32_t +helper1(lzma_coder *restrict coder, lzma_mf *restrict mf, + uint32_t *restrict back_res, uint32_t *restrict len_res, + uint32_t position) +{ + const uint32_t nice_len = mf->nice_len; + + uint32_t len_main; + uint32_t matches_count; + + if (mf->read_ahead == 0) { + len_main = mf_find(mf, &matches_count, coder->matches); + } else { + assert(mf->read_ahead == 1); + len_main = coder->longest_match_length; + matches_count = coder->matches_count; + } + + const uint32_t buf_avail = MIN(mf_avail(mf) + 1, MATCH_LEN_MAX); + if (buf_avail < 2) { + *back_res = UINT32_MAX; + *len_res = 1; + return UINT32_MAX; + } + + const uint8_t *const buf = mf_ptr(mf) - 1; + + uint32_t rep_lens[REP_DISTANCES]; + uint32_t rep_max_index = 0; + + for (uint32_t i = 0; i < REP_DISTANCES; ++i) { + const uint8_t *const buf_back = buf - coder->reps[i] - 1; + + if (not_equal_16(buf, buf_back)) { + rep_lens[i] = 0; + continue; + } + + uint32_t len_test; + for (len_test = 2; len_test < buf_avail + && buf[len_test] == buf_back[len_test]; + ++len_test) ; + + rep_lens[i] = len_test; + if (len_test > rep_lens[rep_max_index]) + rep_max_index = i; + } + + if (rep_lens[rep_max_index] >= nice_len) { + *back_res = rep_max_index; + *len_res = rep_lens[rep_max_index]; + mf_skip(mf, *len_res - 1); + return UINT32_MAX; + } + + + if (len_main >= nice_len) { + *back_res = coder->matches[matches_count - 1].dist + + REP_DISTANCES; + *len_res = len_main; + mf_skip(mf, len_main - 1); + return UINT32_MAX; + } + + const uint8_t current_byte = *buf; + const uint8_t match_byte = *(buf - coder->reps[0] - 1); + + if (len_main < 2 && current_byte != match_byte + && rep_lens[rep_max_index] < 2) { + *back_res = UINT32_MAX; + *len_res = 1; + return UINT32_MAX; + } + + coder->opts[0].state = coder->state; + + const uint32_t pos_state = position & coder->pos_mask; + + coder->opts[1].price = rc_bit_0_price( + coder->is_match[coder->state][pos_state]) + + get_literal_price(coder, position, buf[-1], + !is_literal_state(coder->state), + match_byte, current_byte); + + make_literal(&coder->opts[1]); + + const uint32_t match_price = rc_bit_1_price( + coder->is_match[coder->state][pos_state]); + const uint32_t rep_match_price = match_price + + rc_bit_1_price(coder->is_rep[coder->state]); + + if (match_byte == current_byte) { + const uint32_t short_rep_price = rep_match_price + + get_short_rep_price( + coder, coder->state, pos_state); + + if (short_rep_price < coder->opts[1].price) { + coder->opts[1].price = short_rep_price; + make_short_rep(&coder->opts[1]); + } + } + + const uint32_t len_end = MAX(len_main, rep_lens[rep_max_index]); + + if (len_end < 2) { + *back_res = coder->opts[1].back_prev; + *len_res = 1; + return UINT32_MAX; + } + + coder->opts[1].pos_prev = 0; + + for (uint32_t i = 0; i < REP_DISTANCES; ++i) + coder->opts[0].backs[i] = coder->reps[i]; + + uint32_t len = len_end; + do { + coder->opts[len].price = RC_INFINITY_PRICE; + } while (--len >= 2); + + + for (uint32_t i = 0; i < REP_DISTANCES; ++i) { + uint32_t rep_len = rep_lens[i]; + if (rep_len < 2) + continue; + + const uint32_t price = rep_match_price + get_pure_rep_price( + coder, i, coder->state, pos_state); + + do { + const uint32_t cur_and_len_price = price + + get_len_price( + &coder->rep_len_encoder, + rep_len, pos_state); + + if (cur_and_len_price < coder->opts[rep_len].price) { + coder->opts[rep_len].price = cur_and_len_price; + coder->opts[rep_len].pos_prev = 0; + coder->opts[rep_len].back_prev = i; + coder->opts[rep_len].prev_1_is_literal = false; + } + } while (--rep_len >= 2); + } + + + const uint32_t normal_match_price = match_price + + rc_bit_0_price(coder->is_rep[coder->state]); + + len = rep_lens[0] >= 2 ? rep_lens[0] + 1 : 2; + if (len <= len_main) { + uint32_t i = 0; + while (len > coder->matches[i].len) + ++i; + + for(; ; ++len) { + const uint32_t dist = coder->matches[i].dist; + const uint32_t cur_and_len_price = normal_match_price + + get_pos_len_price(coder, + dist, len, pos_state); + + if (cur_and_len_price < coder->opts[len].price) { + coder->opts[len].price = cur_and_len_price; + coder->opts[len].pos_prev = 0; + coder->opts[len].back_prev + = dist + REP_DISTANCES; + coder->opts[len].prev_1_is_literal = false; + } + + if (len == coder->matches[i].len) + if (++i == matches_count) + break; + } + } + + return len_end; +} + + +static inline uint32_t +helper2(lzma_coder *coder, uint32_t *reps, const uint8_t *buf, + uint32_t len_end, uint32_t position, const uint32_t cur, + const uint32_t nice_len, const uint32_t buf_avail_full) +{ + uint32_t matches_count = coder->matches_count; + uint32_t new_len = coder->longest_match_length; + uint32_t pos_prev = coder->opts[cur].pos_prev; + uint32_t state; + + if (coder->opts[cur].prev_1_is_literal) { + --pos_prev; + + if (coder->opts[cur].prev_2) { + state = coder->opts[coder->opts[cur].pos_prev_2].state; + + if (coder->opts[cur].back_prev_2 < REP_DISTANCES) + update_long_rep(state); + else + update_match(state); + + } else { + state = coder->opts[pos_prev].state; + } + + update_literal(state); + + } else { + state = coder->opts[pos_prev].state; + } + + if (pos_prev == cur - 1) { + if (is_short_rep(coder->opts[cur])) + update_short_rep(state); + else + update_literal(state); + } else { + uint32_t pos; + if (coder->opts[cur].prev_1_is_literal + && coder->opts[cur].prev_2) { + pos_prev = coder->opts[cur].pos_prev_2; + pos = coder->opts[cur].back_prev_2; + update_long_rep(state); + } else { + pos = coder->opts[cur].back_prev; + if (pos < REP_DISTANCES) + update_long_rep(state); + else + update_match(state); + } + + if (pos < REP_DISTANCES) { + reps[0] = coder->opts[pos_prev].backs[pos]; + + uint32_t i; + for (i = 1; i <= pos; ++i) + reps[i] = coder->opts[pos_prev].backs[i - 1]; + + for (; i < REP_DISTANCES; ++i) + reps[i] = coder->opts[pos_prev].backs[i]; + + } else { + reps[0] = pos - REP_DISTANCES; + + for (uint32_t i = 1; i < REP_DISTANCES; ++i) + reps[i] = coder->opts[pos_prev].backs[i - 1]; + } + } + + coder->opts[cur].state = state; + + for (uint32_t i = 0; i < REP_DISTANCES; ++i) + coder->opts[cur].backs[i] = reps[i]; + + const uint32_t cur_price = coder->opts[cur].price; + + const uint8_t current_byte = *buf; + const uint8_t match_byte = *(buf - reps[0] - 1); + + const uint32_t pos_state = position & coder->pos_mask; + + const uint32_t cur_and_1_price = cur_price + + rc_bit_0_price(coder->is_match[state][pos_state]) + + get_literal_price(coder, position, buf[-1], + !is_literal_state(state), match_byte, current_byte); + + bool next_is_literal = false; + + if (cur_and_1_price < coder->opts[cur + 1].price) { + coder->opts[cur + 1].price = cur_and_1_price; + coder->opts[cur + 1].pos_prev = cur; + make_literal(&coder->opts[cur + 1]); + next_is_literal = true; + } + + const uint32_t match_price = cur_price + + rc_bit_1_price(coder->is_match[state][pos_state]); + const uint32_t rep_match_price = match_price + + rc_bit_1_price(coder->is_rep[state]); + + if (match_byte == current_byte + && !(coder->opts[cur + 1].pos_prev < cur + && coder->opts[cur + 1].back_prev == 0)) { + + const uint32_t short_rep_price = rep_match_price + + get_short_rep_price(coder, state, pos_state); + + if (short_rep_price <= coder->opts[cur + 1].price) { + coder->opts[cur + 1].price = short_rep_price; + coder->opts[cur + 1].pos_prev = cur; + make_short_rep(&coder->opts[cur + 1]); + next_is_literal = true; + } + } + + if (buf_avail_full < 2) + return len_end; + + const uint32_t buf_avail = MIN(buf_avail_full, nice_len); + + if (!next_is_literal && match_byte != current_byte) { // speed optimization + // try literal + rep0 + const uint8_t *const buf_back = buf - reps[0] - 1; + const uint32_t limit = MIN(buf_avail_full, nice_len + 1); + + uint32_t len_test = 1; + while (len_test < limit && buf[len_test] == buf_back[len_test]) + ++len_test; + + --len_test; + + if (len_test >= 2) { + uint32_t state_2 = state; + update_literal(state_2); + + const uint32_t pos_state_next = (position + 1) & coder->pos_mask; + const uint32_t next_rep_match_price = cur_and_1_price + + rc_bit_1_price(coder->is_match[state_2][pos_state_next]) + + rc_bit_1_price(coder->is_rep[state_2]); + + //for (; len_test >= 2; --len_test) { + const uint32_t offset = cur + 1 + len_test; + + while (len_end < offset) + coder->opts[++len_end].price = RC_INFINITY_PRICE; + + const uint32_t cur_and_len_price = next_rep_match_price + + get_rep_price(coder, 0, len_test, + state_2, pos_state_next); + + if (cur_and_len_price < coder->opts[offset].price) { + coder->opts[offset].price = cur_and_len_price; + coder->opts[offset].pos_prev = cur + 1; + coder->opts[offset].back_prev = 0; + coder->opts[offset].prev_1_is_literal = true; + coder->opts[offset].prev_2 = false; + } + //} + } + } + + + uint32_t start_len = 2; // speed optimization + + for (uint32_t rep_index = 0; rep_index < REP_DISTANCES; ++rep_index) { + const uint8_t *const buf_back = buf - reps[rep_index] - 1; + if (not_equal_16(buf, buf_back)) + continue; + + uint32_t len_test; + for (len_test = 2; len_test < buf_avail + && buf[len_test] == buf_back[len_test]; + ++len_test) ; + + while (len_end < cur + len_test) + coder->opts[++len_end].price = RC_INFINITY_PRICE; + + const uint32_t len_test_temp = len_test; + const uint32_t price = rep_match_price + get_pure_rep_price( + coder, rep_index, state, pos_state); + + do { + const uint32_t cur_and_len_price = price + + get_len_price(&coder->rep_len_encoder, + len_test, pos_state); + + if (cur_and_len_price < coder->opts[cur + len_test].price) { + coder->opts[cur + len_test].price = cur_and_len_price; + coder->opts[cur + len_test].pos_prev = cur; + coder->opts[cur + len_test].back_prev = rep_index; + coder->opts[cur + len_test].prev_1_is_literal = false; + } + } while (--len_test >= 2); + + len_test = len_test_temp; + + if (rep_index == 0) + start_len = len_test + 1; + + + uint32_t len_test_2 = len_test + 1; + const uint32_t limit = MIN(buf_avail_full, + len_test_2 + nice_len); + for (; len_test_2 < limit + && buf[len_test_2] == buf_back[len_test_2]; + ++len_test_2) ; + + len_test_2 -= len_test + 1; + + if (len_test_2 >= 2) { + uint32_t state_2 = state; + update_long_rep(state_2); + + uint32_t pos_state_next = (position + len_test) & coder->pos_mask; + + const uint32_t cur_and_len_literal_price = price + + get_len_price(&coder->rep_len_encoder, + len_test, pos_state) + + rc_bit_0_price(coder->is_match[state_2][pos_state_next]) + + get_literal_price(coder, position + len_test, + buf[len_test - 1], true, + buf_back[len_test], buf[len_test]); + + update_literal(state_2); + + pos_state_next = (position + len_test + 1) & coder->pos_mask; + + const uint32_t next_rep_match_price = cur_and_len_literal_price + + rc_bit_1_price(coder->is_match[state_2][pos_state_next]) + + rc_bit_1_price(coder->is_rep[state_2]); + + //for(; len_test_2 >= 2; len_test_2--) { + const uint32_t offset = cur + len_test + 1 + len_test_2; + + while (len_end < offset) + coder->opts[++len_end].price = RC_INFINITY_PRICE; + + const uint32_t cur_and_len_price = next_rep_match_price + + get_rep_price(coder, 0, len_test_2, + state_2, pos_state_next); + + if (cur_and_len_price < coder->opts[offset].price) { + coder->opts[offset].price = cur_and_len_price; + coder->opts[offset].pos_prev = cur + len_test + 1; + coder->opts[offset].back_prev = 0; + coder->opts[offset].prev_1_is_literal = true; + coder->opts[offset].prev_2 = true; + coder->opts[offset].pos_prev_2 = cur; + coder->opts[offset].back_prev_2 = rep_index; + } + //} + } + } + + + //for (uint32_t len_test = 2; len_test <= new_len; ++len_test) + if (new_len > buf_avail) { + new_len = buf_avail; + + matches_count = 0; + while (new_len > coder->matches[matches_count].len) + ++matches_count; + + coder->matches[matches_count++].len = new_len; + } + + + if (new_len >= start_len) { + const uint32_t normal_match_price = match_price + + rc_bit_0_price(coder->is_rep[state]); + + while (len_end < cur + new_len) + coder->opts[++len_end].price = RC_INFINITY_PRICE; + + uint32_t i = 0; + while (start_len > coder->matches[i].len) + ++i; + + for (uint32_t len_test = start_len; ; ++len_test) { + const uint32_t cur_back = coder->matches[i].dist; + uint32_t cur_and_len_price = normal_match_price + + get_pos_len_price(coder, + cur_back, len_test, pos_state); + + if (cur_and_len_price < coder->opts[cur + len_test].price) { + coder->opts[cur + len_test].price = cur_and_len_price; + coder->opts[cur + len_test].pos_prev = cur; + coder->opts[cur + len_test].back_prev + = cur_back + REP_DISTANCES; + coder->opts[cur + len_test].prev_1_is_literal = false; + } + + if (len_test == coder->matches[i].len) { + // Try Match + Literal + Rep0 + const uint8_t *const buf_back = buf - cur_back - 1; + uint32_t len_test_2 = len_test + 1; + const uint32_t limit = MIN(buf_avail_full, + len_test_2 + nice_len); + + for (; len_test_2 < limit && + buf[len_test_2] == buf_back[len_test_2]; + ++len_test_2) ; + + len_test_2 -= len_test + 1; + + if (len_test_2 >= 2) { + uint32_t state_2 = state; + update_match(state_2); + uint32_t pos_state_next + = (position + len_test) & coder->pos_mask; + + const uint32_t cur_and_len_literal_price = cur_and_len_price + + rc_bit_0_price( + coder->is_match[state_2][pos_state_next]) + + get_literal_price(coder, + position + len_test, + buf[len_test - 1], + true, + buf_back[len_test], + buf[len_test]); + + update_literal(state_2); + pos_state_next = (pos_state_next + 1) & coder->pos_mask; + + const uint32_t next_rep_match_price + = cur_and_len_literal_price + + rc_bit_1_price( + coder->is_match[state_2][pos_state_next]) + + rc_bit_1_price(coder->is_rep[state_2]); + + // for(; len_test_2 >= 2; --len_test_2) { + const uint32_t offset = cur + len_test + 1 + len_test_2; + + while (len_end < offset) + coder->opts[++len_end].price = RC_INFINITY_PRICE; + + cur_and_len_price = next_rep_match_price + + get_rep_price(coder, 0, len_test_2, + state_2, pos_state_next); + + if (cur_and_len_price < coder->opts[offset].price) { + coder->opts[offset].price = cur_and_len_price; + coder->opts[offset].pos_prev = cur + len_test + 1; + coder->opts[offset].back_prev = 0; + coder->opts[offset].prev_1_is_literal = true; + coder->opts[offset].prev_2 = true; + coder->opts[offset].pos_prev_2 = cur; + coder->opts[offset].back_prev_2 + = cur_back + REP_DISTANCES; + } + //} + } + + if (++i == matches_count) + break; + } + } + } + + return len_end; +} + + +extern void +lzma_lzma_optimum_normal(lzma_coder *restrict coder, lzma_mf *restrict mf, + uint32_t *restrict back_res, uint32_t *restrict len_res, + uint32_t position) +{ + // If we have symbols pending, return the next pending symbol. + if (coder->opts_end_index != coder->opts_current_index) { + assert(mf->read_ahead > 0); + *len_res = coder->opts[coder->opts_current_index].pos_prev + - coder->opts_current_index; + *back_res = coder->opts[coder->opts_current_index].back_prev; + coder->opts_current_index = coder->opts[ + coder->opts_current_index].pos_prev; + return; + } + + // Update the price tables. In LZMA SDK <= 4.60 (and possibly later) + // this was done in both initialization function and in the main loop. + // In liblzma they were moved into this single place. + if (mf->read_ahead == 0) { + if (coder->match_price_count >= (1 << 7)) + fill_distances_prices(coder); + + if (coder->align_price_count >= ALIGN_TABLE_SIZE) + fill_align_prices(coder); + } + + // TODO: This needs quite a bit of cleaning still. But splitting + // the oroginal function to two pieces makes it at least a little + // more readable, since those two parts don't share many variables. + + uint32_t len_end = helper1(coder, mf, back_res, len_res, position); + if (len_end == UINT32_MAX) + return; + + uint32_t reps[REP_DISTANCES]; + memcpy(reps, coder->reps, sizeof(reps)); + + uint32_t cur; + for (cur = 1; cur < len_end; ++cur) { + assert(cur < OPTS); + + coder->longest_match_length = mf_find( + mf, &coder->matches_count, coder->matches); + + if (coder->longest_match_length >= mf->nice_len) + break; + + len_end = helper2(coder, reps, mf_ptr(mf) - 1, len_end, + position + cur, cur, mf->nice_len, + MIN(mf_avail(mf) + 1, OPTS - 1 - cur)); + } + + backward(coder, len_res, back_res, cur); + return; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_presets.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_presets.c new file mode 100644 index 00000000000..68900a9bed4 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_presets.c @@ -0,0 +1,53 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lzma_encoder_presets.c +/// \brief Encoder presets +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "common.h" + + +extern LZMA_API(lzma_bool) +lzma_lzma_preset(lzma_options_lzma *options, uint32_t preset) +{ + const uint32_t level = preset & LZMA_PRESET_LEVEL_MASK; + const uint32_t flags = preset & ~LZMA_PRESET_LEVEL_MASK; + const uint32_t supported_flags = LZMA_PRESET_EXTREME; + + if (level > 9 || (flags & ~supported_flags)) + return true; + + const uint32_t dict_shift = level <= 1 ? 16 : level + 17; + options->dict_size = UINT32_C(1) << dict_shift; + + options->preset_dict = NULL; + options->preset_dict_size = 0; + + options->lc = LZMA_LC_DEFAULT; + options->lp = LZMA_LP_DEFAULT; + options->pb = LZMA_PB_DEFAULT; + + options->persistent = false; + options->mode = level <= 2 ? LZMA_MODE_FAST : LZMA_MODE_NORMAL; + + options->nice_len = level == 0 ? 8 : level <= 5 ? 32 : 64; + options->mf = level <= 1 ? LZMA_MF_HC3 : level <= 2 ? LZMA_MF_HC4 + : LZMA_MF_BT4; + options->depth = 0; + + if (flags & LZMA_PRESET_EXTREME) { + options->lc = 4; // FIXME? + options->mode = LZMA_MODE_NORMAL; + options->mf = LZMA_MF_BT4; + options->nice_len = 273; + options->depth = 512; + } + + return false; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_private.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_private.h new file mode 100644 index 00000000000..017f58bd984 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_private.h @@ -0,0 +1,148 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lzma_encoder_private.h +/// \brief Private definitions for LZMA encoder +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_LZMA_ENCODER_PRIVATE_H +#define LZMA_LZMA_ENCODER_PRIVATE_H + +#include "lz_encoder.h" +#include "range_encoder.h" +#include "lzma_common.h" +#include "lzma_encoder.h" + + +// Macro to compare if the first two bytes in two buffers differ. This is +// needed in lzma_lzma_optimum_*() to test if the match is at least +// MATCH_LEN_MIN bytes. Unaligned access gives tiny gain so there's no +// reason to not use it when it is supported. +#ifdef HAVE_FAST_UNALIGNED_ACCESS +# define not_equal_16(a, b) \ + (*(const uint16_t *)(a) != *(const uint16_t *)(b)) +#else +# define not_equal_16(a, b) \ + ((a)[0] != (b)[0] || (a)[1] != (b)[1]) +#endif + + +// Optimal - Number of entries in the optimum array. +#define OPTS (1 << 12) + + +typedef struct { + probability choice; + probability choice2; + probability low[POS_STATES_MAX][LEN_LOW_SYMBOLS]; + probability mid[POS_STATES_MAX][LEN_MID_SYMBOLS]; + probability high[LEN_HIGH_SYMBOLS]; + + uint32_t prices[POS_STATES_MAX][LEN_SYMBOLS]; + uint32_t table_size; + uint32_t counters[POS_STATES_MAX]; + +} lzma_length_encoder; + + +typedef struct { + lzma_lzma_state state; + + bool prev_1_is_literal; + bool prev_2; + + uint32_t pos_prev_2; + uint32_t back_prev_2; + + uint32_t price; + uint32_t pos_prev; // pos_next; + uint32_t back_prev; + + uint32_t backs[REP_DISTANCES]; + +} lzma_optimal; + + +struct lzma_coder_s { + /// Range encoder + lzma_range_encoder rc; + + /// State + lzma_lzma_state state; + + /// The four most recent match distances + uint32_t reps[REP_DISTANCES]; + + /// Array of match candidates + lzma_match matches[MATCH_LEN_MAX + 1]; + + /// Number of match candidates in matches[] + uint32_t matches_count; + + /// Varibale to hold the length of the longest match between calls + /// to lzma_lzma_optimum_*(). + uint32_t longest_match_length; + + /// True if using getoptimumfast + bool fast_mode; + + /// True if the encoder has been initialized by encoding the first + /// byte as a literal. + bool is_initialized; + + /// True if the range encoder has been flushed, but not all bytes + /// have been written to the output buffer yet. + bool is_flushed; + + uint32_t pos_mask; ///< (1 << pos_bits) - 1 + uint32_t literal_context_bits; + uint32_t literal_pos_mask; + + // These are the same as in lzma_decoder.c. See comments there. + probability literal[LITERAL_CODERS_MAX][LITERAL_CODER_SIZE]; + probability is_match[STATES][POS_STATES_MAX]; + probability is_rep[STATES]; + probability is_rep0[STATES]; + probability is_rep1[STATES]; + probability is_rep2[STATES]; + probability is_rep0_long[STATES][POS_STATES_MAX]; + probability pos_slot[LEN_TO_POS_STATES][POS_SLOTS]; + probability pos_special[FULL_DISTANCES - END_POS_MODEL_INDEX]; + probability pos_align[ALIGN_TABLE_SIZE]; + + // These are the same as in lzma_decoder.c except that the encoders + // include also price tables. + lzma_length_encoder match_len_encoder; + lzma_length_encoder rep_len_encoder; + + // Price tables + uint32_t pos_slot_prices[LEN_TO_POS_STATES][POS_SLOTS]; + uint32_t distances_prices[LEN_TO_POS_STATES][FULL_DISTANCES]; + uint32_t dist_table_size; + uint32_t match_price_count; + + uint32_t align_prices[ALIGN_TABLE_SIZE]; + uint32_t align_price_count; + + // Optimal + uint32_t opts_end_index; + uint32_t opts_current_index; + lzma_optimal opts[OPTS]; +}; + + +extern void lzma_lzma_optimum_fast( + lzma_coder *restrict coder, lzma_mf *restrict mf, + uint32_t *restrict back_res, uint32_t *restrict len_res); + +extern void lzma_lzma_optimum_normal(lzma_coder *restrict coder, + lzma_mf *restrict mf, uint32_t *restrict back_res, + uint32_t *restrict len_res, uint32_t position); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/Makefile.inc b/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/Makefile.inc new file mode 100644 index 00000000000..d8a597a2607 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/Makefile.inc @@ -0,0 +1,21 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +EXTRA_DIST += rangecoder/price_tablegen.c + +liblzma_la_SOURCES += rangecoder/range_common.h + +if COND_ENCODER_LZMA1 +liblzma_la_SOURCES += \ + rangecoder/range_encoder.h \ + rangecoder/price.h \ + rangecoder/price_table.c +endif + +if COND_DECODER_LZMA1 +liblzma_la_SOURCES += rangecoder/range_decoder.h +endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/price.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/price.h new file mode 100644 index 00000000000..8ae02ca7474 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/price.h @@ -0,0 +1,92 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file price.h +/// \brief Probability price calculation +// +// Author: Igor Pavlov +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_PRICE_H +#define LZMA_PRICE_H + + +#define RC_MOVE_REDUCING_BITS 4 +#define RC_BIT_PRICE_SHIFT_BITS 4 +#define RC_PRICE_TABLE_SIZE (RC_BIT_MODEL_TOTAL >> RC_MOVE_REDUCING_BITS) + +#define RC_INFINITY_PRICE (UINT32_C(1) << 30) + + +/// Lookup table for the inline functions defined in this file. +extern const uint8_t lzma_rc_prices[RC_PRICE_TABLE_SIZE]; + + +static inline uint32_t +rc_bit_price(const probability prob, const uint32_t bit) +{ + return lzma_rc_prices[(prob ^ ((UINT32_C(0) - bit) + & (RC_BIT_MODEL_TOTAL - 1))) >> RC_MOVE_REDUCING_BITS]; +} + + +static inline uint32_t +rc_bit_0_price(const probability prob) +{ + return lzma_rc_prices[prob >> RC_MOVE_REDUCING_BITS]; +} + + +static inline uint32_t +rc_bit_1_price(const probability prob) +{ + return lzma_rc_prices[(prob ^ (RC_BIT_MODEL_TOTAL - 1)) + >> RC_MOVE_REDUCING_BITS]; +} + + +static inline uint32_t +rc_bittree_price(const probability *const probs, + const uint32_t bit_levels, uint32_t symbol) +{ + uint32_t price = 0; + symbol += UINT32_C(1) << bit_levels; + + do { + const uint32_t bit = symbol & 1; + symbol >>= 1; + price += rc_bit_price(probs[symbol], bit); + } while (symbol != 1); + + return price; +} + + +static inline uint32_t +rc_bittree_reverse_price(const probability *const probs, + uint32_t bit_levels, uint32_t symbol) +{ + uint32_t price = 0; + uint32_t model_index = 1; + + do { + const uint32_t bit = symbol & 1; + symbol >>= 1; + price += rc_bit_price(probs[model_index], bit); + model_index = (model_index << 1) + bit; + } while (--bit_levels != 0); + + return price; +} + + +static inline uint32_t +rc_direct_price(const uint32_t bits) +{ + return bits << RC_BIT_PRICE_SHIFT_BITS; +} + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/price_table.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/price_table.c new file mode 100644 index 00000000000..ac64bf62c76 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/price_table.c @@ -0,0 +1,22 @@ +/* This file has been automatically generated by price_tablegen.c. */ + +#include "range_encoder.h" + +const uint8_t lzma_rc_prices[RC_PRICE_TABLE_SIZE] = { + 128, 103, 91, 84, 78, 73, 69, 66, + 63, 61, 58, 56, 54, 52, 51, 49, + 48, 46, 45, 44, 43, 42, 41, 40, + 39, 38, 37, 36, 35, 34, 34, 33, + 32, 31, 31, 30, 29, 29, 28, 28, + 27, 26, 26, 25, 25, 24, 24, 23, + 23, 22, 22, 22, 21, 21, 20, 20, + 19, 19, 19, 18, 18, 17, 17, 17, + 16, 16, 16, 15, 15, 15, 14, 14, + 14, 13, 13, 13, 12, 12, 12, 11, + 11, 11, 11, 10, 10, 10, 10, 9, + 9, 9, 9, 8, 8, 8, 8, 7, + 7, 7, 7, 6, 6, 6, 6, 5, + 5, 5, 5, 5, 4, 4, 4, 4, + 3, 3, 3, 3, 3, 2, 2, 2, + 2, 2, 2, 1, 1, 1, 1, 1 +}; diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/price_tablegen.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/price_tablegen.c new file mode 100644 index 00000000000..bf08ce39d7e --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/price_tablegen.c @@ -0,0 +1,87 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file price_tablegen.c +/// \brief Probability price table generator +/// +/// Compiling: gcc -std=c99 -o price_tablegen price_tablegen.c +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include "range_common.h" +#include "price.h" + + +static uint32_t rc_prices[RC_PRICE_TABLE_SIZE]; + + +static void +init_price_table(void) +{ + for (uint32_t i = (UINT32_C(1) << RC_MOVE_REDUCING_BITS) / 2; + i < RC_BIT_MODEL_TOTAL; + i += (UINT32_C(1) << RC_MOVE_REDUCING_BITS)) { + const uint32_t cycles_bits = RC_BIT_PRICE_SHIFT_BITS; + uint32_t w = i; + uint32_t bit_count = 0; + + for (uint32_t j = 0; j < cycles_bits; ++j) { + w *= w; + bit_count <<= 1; + + while (w >= (UINT32_C(1) << 16)) { + w >>= 1; + ++bit_count; + } + } + + rc_prices[i >> RC_MOVE_REDUCING_BITS] + = (RC_BIT_MODEL_TOTAL_BITS << cycles_bits) + - 15 - bit_count; + } + + return; +} + + +static void +print_price_table(void) +{ + printf("/* This file has been automatically generated by " + "price_tablegen.c. */\n\n" + "#include \"range_encoder.h\"\n\n" + "const uint8_t lzma_rc_prices[" + "RC_PRICE_TABLE_SIZE] = {"); + + const size_t array_size = sizeof(lzma_rc_prices) + / sizeof(lzma_rc_prices[0]); + for (size_t i = 0; i < array_size; ++i) { + if (i % 8 == 0) + printf("\n\t"); + + printf("%4" PRIu32, rc_prices[i]); + + if (i != array_size - 1) + printf(","); + } + + printf("\n};\n"); + + return; +} + + +int +main(void) +{ + init_price_table(); + print_price_table(); + return 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/range_common.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/range_common.h new file mode 100644 index 00000000000..0e6424198d1 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/range_common.h @@ -0,0 +1,73 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file range_common.h +/// \brief Common things for range encoder and decoder +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_RANGE_COMMON_H +#define LZMA_RANGE_COMMON_H + +#ifdef HAVE_CONFIG_H +# include "common.h" +#endif + + +/////////////// +// Constants // +/////////////// + +#define RC_SHIFT_BITS 8 +#define RC_TOP_BITS 24 +#define RC_TOP_VALUE (UINT32_C(1) << RC_TOP_BITS) +#define RC_BIT_MODEL_TOTAL_BITS 11 +#define RC_BIT_MODEL_TOTAL (UINT32_C(1) << RC_BIT_MODEL_TOTAL_BITS) +#define RC_MOVE_BITS 5 + + +//////////// +// Macros // +//////////// + +// Resets the probability so that both 0 and 1 have probability of 50 % +#define bit_reset(prob) \ + prob = RC_BIT_MODEL_TOTAL >> 1 + +// This does the same for a complete bit tree. +// (A tree represented as an array.) +#define bittree_reset(probs, bit_levels) \ + for (uint32_t bt_i = 0; bt_i < (1 << (bit_levels)); ++bt_i) \ + bit_reset((probs)[bt_i]) + + +////////////////////// +// Type definitions // +////////////////////// + +/// \brief Type of probabilities used with range coder +/// +/// This needs to be at least 12-bit integer, so uint16_t is a logical choice. +/// However, on some architecture and compiler combinations, a bigger type +/// may give better speed, because the probability variables are accessed +/// a lot. On the other hand, bigger probability type increases cache +/// footprint, since there are 2 to 14 thousand probability variables in +/// LZMA (assuming the limit of lc + lp <= 4; with lc + lp <= 12 there +/// would be about 1.5 million variables). +/// +/// With malicious files, the initialization speed of the LZMA decoder can +/// become important. In that case, smaller probability variables mean that +/// there is less bytes to write to RAM, which makes initialization faster. +/// With big probability type, the initialization can become so slow that it +/// can be a problem e.g. for email servers doing virus scanning. +/// +/// I will be sticking to uint16_t unless some specific architectures +/// are *much* faster (20-50 %) with uint32_t. +typedef uint16_t probability; + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/range_decoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/range_decoder.h new file mode 100644 index 00000000000..fb96180fb39 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/range_decoder.h @@ -0,0 +1,179 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file range_decoder.h +/// \brief Range Decoder +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_RANGE_DECODER_H +#define LZMA_RANGE_DECODER_H + +#include "range_common.h" + + +typedef struct { + uint32_t range; + uint32_t code; + uint32_t init_bytes_left; +} lzma_range_decoder; + + +/// Reads the first five bytes to initialize the range decoder. +static inline bool +rc_read_init(lzma_range_decoder *rc, const uint8_t *restrict in, + size_t *restrict in_pos, size_t in_size) +{ + while (rc->init_bytes_left > 0) { + if (*in_pos == in_size) + return false; + + rc->code = (rc->code << 8) | in[*in_pos]; + ++*in_pos; + --rc->init_bytes_left; + } + + return true; +} + + +/// Makes local copies of range decoder and *in_pos variables. Doing this +/// improves speed significantly. The range decoder macros expect also +/// variables `in' and `in_size' to be defined. +#define rc_to_local(range_decoder, in_pos) \ + lzma_range_decoder rc = range_decoder; \ + size_t rc_in_pos = (in_pos); \ + uint32_t rc_bound + + +/// Stores the local copes back to the range decoder structure. +#define rc_from_local(range_decoder, in_pos) \ +do { \ + range_decoder = rc; \ + in_pos = rc_in_pos; \ +} while (0) + + +/// Resets the range decoder structure. +#define rc_reset(range_decoder) \ +do { \ + (range_decoder).range = UINT32_MAX; \ + (range_decoder).code = 0; \ + (range_decoder).init_bytes_left = 5; \ +} while (0) + + +/// When decoding has been properly finished, rc.code is always zero unless +/// the input stream is corrupt. So checking this can catch some corrupt +/// files especially if they don't have any other integrity check. +#define rc_is_finished(range_decoder) \ + ((range_decoder).code == 0) + + +/// Read the next input byte if needed. If more input is needed but there is +/// no more input available, "goto out" is used to jump out of the main +/// decoder loop. +#define rc_normalize(seq) \ +do { \ + if (rc.range < RC_TOP_VALUE) { \ + if (unlikely(rc_in_pos == in_size)) { \ + coder->sequence = seq; \ + goto out; \ + } \ + rc.range <<= RC_SHIFT_BITS; \ + rc.code = (rc.code << RC_SHIFT_BITS) | in[rc_in_pos++]; \ + } \ +} while (0) + + +/// Start decoding a bit. This must be used together with rc_update_0() +/// and rc_update_1(): +/// +/// rc_if_0(prob, seq) { +/// rc_update_0(prob); +/// // Do something +/// } else { +/// rc_update_1(prob); +/// // Do something else +/// } +/// +#define rc_if_0(prob, seq) \ + rc_normalize(seq); \ + rc_bound = (rc.range >> RC_BIT_MODEL_TOTAL_BITS) * (prob); \ + if (rc.code < rc_bound) + + +/// Update the range decoder state and the used probability variable to +/// match a decoded bit of 0. +#define rc_update_0(prob) \ +do { \ + rc.range = rc_bound; \ + prob += (RC_BIT_MODEL_TOTAL - (prob)) >> RC_MOVE_BITS; \ +} while (0) + + +/// Update the range decoder state and the used probability variable to +/// match a decoded bit of 1. +#define rc_update_1(prob) \ +do { \ + rc.range -= rc_bound; \ + rc.code -= rc_bound; \ + prob -= (prob) >> RC_MOVE_BITS; \ +} while (0) + + +/// Decodes one bit and runs action0 or action1 depending on the decoded bit. +/// This macro is used as the last step in bittree reverse decoders since +/// those don't use "symbol" for anything else than indexing the probability +/// arrays. +#define rc_bit_last(prob, action0, action1, seq) \ +do { \ + rc_if_0(prob, seq) { \ + rc_update_0(prob); \ + action0; \ + } else { \ + rc_update_1(prob); \ + action1; \ + } \ +} while (0) + + +/// Decodes one bit, updates "symbol", and runs action0 or action1 depending +/// on the decoded bit. +#define rc_bit(prob, action0, action1, seq) \ + rc_bit_last(prob, \ + symbol <<= 1; action0, \ + symbol = (symbol << 1) + 1; action1, \ + seq); + + +/// Like rc_bit() but add "case seq:" as a prefix. This makes the unrolled +/// loops more readable because the code isn't littered with "case" +/// statements. On the other hand this also makes it less readable, since +/// spotting the places where the decoder loop may be restarted is less +/// obvious. +#define rc_bit_case(prob, action0, action1, seq) \ + case seq: rc_bit(prob, action0, action1, seq) + + +/// Decode a bit without using a probability. +#define rc_direct(dest, seq) \ +do { \ + rc_normalize(seq); \ + rc.range >>= 1; \ + rc.code -= rc.range; \ + rc_bound = UINT32_C(0) - (rc.code >> 31); \ + rc.code += rc.range & rc_bound; \ + dest = (dest << 1) + (rc_bound + 1); \ +} while (0) + + +// NOTE: No macros are provided for bittree decoding. It seems to be simpler +// to just write them open in the code. + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/range_encoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/range_encoder.h new file mode 100644 index 00000000000..1e1c36995b6 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/rangecoder/range_encoder.h @@ -0,0 +1,231 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file range_encoder.h +/// \brief Range Encoder +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_RANGE_ENCODER_H +#define LZMA_RANGE_ENCODER_H + +#include "range_common.h" +#include "price.h" + + +/// Maximum number of symbols that can be put pending into lzma_range_encoder +/// structure between calls to lzma_rc_encode(). For LZMA, 52+5 is enough +/// (match with big distance and length followed by range encoder flush). +#define RC_SYMBOLS_MAX 58 + + +typedef struct { + uint64_t low; + uint64_t cache_size; + uint32_t range; + uint8_t cache; + + /// Number of symbols in the tables + size_t count; + + /// rc_encode()'s position in the tables + size_t pos; + + /// Symbols to encode + enum { + RC_BIT_0, + RC_BIT_1, + RC_DIRECT_0, + RC_DIRECT_1, + RC_FLUSH, + } symbols[RC_SYMBOLS_MAX]; + + /// Probabilities associated with RC_BIT_0 or RC_BIT_1 + probability *probs[RC_SYMBOLS_MAX]; + +} lzma_range_encoder; + + +static inline void +rc_reset(lzma_range_encoder *rc) +{ + rc->low = 0; + rc->cache_size = 1; + rc->range = UINT32_MAX; + rc->cache = 0; + rc->count = 0; + rc->pos = 0; +} + + +static inline void +rc_bit(lzma_range_encoder *rc, probability *prob, uint32_t bit) +{ + rc->symbols[rc->count] = bit; + rc->probs[rc->count] = prob; + ++rc->count; +} + + +static inline void +rc_bittree(lzma_range_encoder *rc, probability *probs, + uint32_t bit_count, uint32_t symbol) +{ + uint32_t model_index = 1; + + do { + const uint32_t bit = (symbol >> --bit_count) & 1; + rc_bit(rc, &probs[model_index], bit); + model_index = (model_index << 1) + bit; + } while (bit_count != 0); +} + + +static inline void +rc_bittree_reverse(lzma_range_encoder *rc, probability *probs, + uint32_t bit_count, uint32_t symbol) +{ + uint32_t model_index = 1; + + do { + const uint32_t bit = symbol & 1; + symbol >>= 1; + rc_bit(rc, &probs[model_index], bit); + model_index = (model_index << 1) + bit; + } while (--bit_count != 0); +} + + +static inline void +rc_direct(lzma_range_encoder *rc, + uint32_t value, uint32_t bit_count) +{ + do { + rc->symbols[rc->count++] + = RC_DIRECT_0 + ((value >> --bit_count) & 1); + } while (bit_count != 0); +} + + +static inline void +rc_flush(lzma_range_encoder *rc) +{ + for (size_t i = 0; i < 5; ++i) + rc->symbols[rc->count++] = RC_FLUSH; +} + + +static inline bool +rc_shift_low(lzma_range_encoder *rc, + uint8_t *out, size_t *out_pos, size_t out_size) +{ + if ((uint32_t)(rc->low) < (uint32_t)(0xFF000000) + || (uint32_t)(rc->low >> 32) != 0) { + do { + if (*out_pos == out_size) + return true; + + out[*out_pos] = rc->cache + (uint8_t)(rc->low >> 32); + ++*out_pos; + rc->cache = 0xFF; + + } while (--rc->cache_size != 0); + + rc->cache = (rc->low >> 24) & 0xFF; + } + + ++rc->cache_size; + rc->low = (rc->low & 0x00FFFFFF) << RC_SHIFT_BITS; + + return false; +} + + +static inline bool +rc_encode(lzma_range_encoder *rc, + uint8_t *out, size_t *out_pos, size_t out_size) +{ + assert(rc->count <= RC_SYMBOLS_MAX); + + while (rc->pos < rc->count) { + // Normalize + if (rc->range < RC_TOP_VALUE) { + if (rc_shift_low(rc, out, out_pos, out_size)) + return true; + + rc->range <<= RC_SHIFT_BITS; + } + + // Encode a bit + switch (rc->symbols[rc->pos]) { + case RC_BIT_0: { + probability prob = *rc->probs[rc->pos]; + rc->range = (rc->range >> RC_BIT_MODEL_TOTAL_BITS) + * prob; + prob += (RC_BIT_MODEL_TOTAL - prob) >> RC_MOVE_BITS; + *rc->probs[rc->pos] = prob; + break; + } + + case RC_BIT_1: { + probability prob = *rc->probs[rc->pos]; + const uint32_t bound = prob * (rc->range + >> RC_BIT_MODEL_TOTAL_BITS); + rc->low += bound; + rc->range -= bound; + prob -= prob >> RC_MOVE_BITS; + *rc->probs[rc->pos] = prob; + break; + } + + case RC_DIRECT_0: + rc->range >>= 1; + break; + + case RC_DIRECT_1: + rc->range >>= 1; + rc->low += rc->range; + break; + + case RC_FLUSH: + // Prevent further normalizations. + rc->range = UINT32_MAX; + + // Flush the last five bytes (see rc_flush()). + do { + if (rc_shift_low(rc, out, out_pos, out_size)) + return true; + } while (++rc->pos < rc->count); + + // Reset the range encoder so we are ready to continue + // encoding if we weren't finishing the stream. + rc_reset(rc); + return false; + + default: + assert(0); + break; + } + + ++rc->pos; + } + + rc->count = 0; + rc->pos = 0; + + return false; +} + + +static inline uint64_t +rc_pending(const lzma_range_encoder *rc) +{ + return rc->cache_size + 5 - 1; +} + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/Makefile.inc b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/Makefile.inc new file mode 100644 index 00000000000..8a5e2d7fa96 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/Makefile.inc @@ -0,0 +1,47 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +liblzma_la_SOURCES += \ + simple/simple_coder.c \ + simple/simple_coder.h \ + simple/simple_private.h + +if COND_ENCODER_SIMPLE +liblzma_la_SOURCES += \ + simple/simple_encoder.c \ + simple/simple_encoder.h +endif + +if COND_DECODER_SIMPLE +liblzma_la_SOURCES += \ + simple/simple_decoder.c \ + simple/simple_decoder.h +endif + +if COND_FILTER_X86 +liblzma_la_SOURCES += simple/x86.c +endif + +if COND_FILTER_POWERPC +liblzma_la_SOURCES += simple/powerpc.c +endif + +if COND_FILTER_IA64 +liblzma_la_SOURCES += simple/ia64.c +endif + +if COND_FILTER_ARM +liblzma_la_SOURCES += simple/arm.c +endif + +if COND_FILTER_ARMTHUMB +liblzma_la_SOURCES += simple/armthumb.c +endif + +if COND_FILTER_SPARC +liblzma_la_SOURCES += simple/sparc.c +endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/arm.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/arm.c new file mode 100644 index 00000000000..8fcf6437491 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/arm.c @@ -0,0 +1,69 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file arm.c +/// \brief Filter for ARM binaries +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "simple_private.h" + + +static size_t +arm_code(lzma_simple *simple lzma_attribute((unused)), + uint32_t now_pos, bool is_encoder, + uint8_t *buffer, size_t size) +{ + size_t i; + for (i = 0; i + 4 <= size; i += 4) { + if (buffer[i + 3] == 0xEB) { + uint32_t src = (buffer[i + 2] << 16) + | (buffer[i + 1] << 8) + | (buffer[i + 0]); + src <<= 2; + + uint32_t dest; + if (is_encoder) + dest = now_pos + (uint32_t)(i) + 8 + src; + else + dest = src - (now_pos + (uint32_t)(i) + 8); + + dest >>= 2; + buffer[i + 2] = (dest >> 16); + buffer[i + 1] = (dest >> 8); + buffer[i + 0] = dest; + } + } + + return i; +} + + +static lzma_ret +arm_coder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters, bool is_encoder) +{ + return lzma_simple_coder_init(next, allocator, filters, + &arm_code, 0, 4, 4, is_encoder); +} + + +extern lzma_ret +lzma_simple_arm_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters) +{ + return arm_coder_init(next, allocator, filters, true); +} + + +extern lzma_ret +lzma_simple_arm_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters) +{ + return arm_coder_init(next, allocator, filters, false); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/armthumb.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/armthumb.c new file mode 100644 index 00000000000..eb6a69d1282 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/armthumb.c @@ -0,0 +1,74 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file armthumb.c +/// \brief Filter for ARM-Thumb binaries +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "simple_private.h" + + +static size_t +armthumb_code(lzma_simple *simple lzma_attribute((unused)), + uint32_t now_pos, bool is_encoder, + uint8_t *buffer, size_t size) +{ + size_t i; + for (i = 0; i + 4 <= size; i += 2) { + if ((buffer[i + 1] & 0xF8) == 0xF0 + && (buffer[i + 3] & 0xF8) == 0xF8) { + uint32_t src = ((buffer[i + 1] & 0x7) << 19) + | (buffer[i + 0] << 11) + | ((buffer[i + 3] & 0x7) << 8) + | (buffer[i + 2]); + + src <<= 1; + + uint32_t dest; + if (is_encoder) + dest = now_pos + (uint32_t)(i) + 4 + src; + else + dest = src - (now_pos + (uint32_t)(i) + 4); + + dest >>= 1; + buffer[i + 1] = 0xF0 | ((dest >> 19) & 0x7); + buffer[i + 0] = (dest >> 11); + buffer[i + 3] = 0xF8 | ((dest >> 8) & 0x7); + buffer[i + 2] = (dest); + i += 2; + } + } + + return i; +} + + +static lzma_ret +armthumb_coder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters, bool is_encoder) +{ + return lzma_simple_coder_init(next, allocator, filters, + &armthumb_code, 0, 4, 2, is_encoder); +} + + +extern lzma_ret +lzma_simple_armthumb_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters) +{ + return armthumb_coder_init(next, allocator, filters, true); +} + + +extern lzma_ret +lzma_simple_armthumb_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters) +{ + return armthumb_coder_init(next, allocator, filters, false); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/ia64.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/ia64.c new file mode 100644 index 00000000000..fd263d4aea0 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/ia64.c @@ -0,0 +1,110 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file ia64.c +/// \brief Filter for IA64 (Itanium) binaries +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "simple_private.h" + + +static size_t +ia64_code(lzma_simple *simple lzma_attribute((unused)), + uint32_t now_pos, bool is_encoder, + uint8_t *buffer, size_t size) +{ + static const uint32_t BRANCH_TABLE[32] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 4, 4, 6, 6, 0, 0, 7, 7, + 4, 4, 0, 0, 4, 4, 0, 0 + }; + + size_t i; + for (i = 0; i + 16 <= size; i += 16) { + const uint32_t instr_template = buffer[i] & 0x1F; + const uint32_t mask = BRANCH_TABLE[instr_template]; + uint32_t bit_pos = 5; + + for (size_t slot = 0; slot < 3; ++slot, bit_pos += 41) { + if (((mask >> slot) & 1) == 0) + continue; + + const size_t byte_pos = (bit_pos >> 3); + const uint32_t bit_res = bit_pos & 0x7; + uint64_t instruction = 0; + + for (size_t j = 0; j < 6; ++j) + instruction += (uint64_t)( + buffer[i + j + byte_pos]) + << (8 * j); + + uint64_t inst_norm = instruction >> bit_res; + + if (((inst_norm >> 37) & 0xF) == 0x5 + && ((inst_norm >> 9) & 0x7) == 0 + /* && (inst_norm & 0x3F)== 0 */ + ) { + uint32_t src = (uint32_t)( + (inst_norm >> 13) & 0xFFFFF); + src |= ((inst_norm >> 36) & 1) << 20; + + src <<= 4; + + uint32_t dest; + if (is_encoder) + dest = now_pos + (uint32_t)(i) + src; + else + dest = src - (now_pos + (uint32_t)(i)); + + dest >>= 4; + + inst_norm &= ~((uint64_t)(0x8FFFFF) << 13); + inst_norm |= (uint64_t)(dest & 0xFFFFF) << 13; + inst_norm |= (uint64_t)(dest & 0x100000) + << (36 - 20); + + instruction &= (1 << bit_res) - 1; + instruction |= (inst_norm << bit_res); + + for (size_t j = 0; j < 6; j++) + buffer[i + j + byte_pos] = (uint8_t)( + instruction + >> (8 * j)); + } + } + } + + return i; +} + + +static lzma_ret +ia64_coder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters, bool is_encoder) +{ + return lzma_simple_coder_init(next, allocator, filters, + &ia64_code, 0, 16, 16, is_encoder); +} + + +extern lzma_ret +lzma_simple_ia64_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters) +{ + return ia64_coder_init(next, allocator, filters, true); +} + + +extern lzma_ret +lzma_simple_ia64_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters) +{ + return ia64_coder_init(next, allocator, filters, false); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/powerpc.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/powerpc.c new file mode 100644 index 00000000000..aaa14f22197 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/powerpc.c @@ -0,0 +1,73 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file powerpc.c +/// \brief Filter for PowerPC (big endian) binaries +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "simple_private.h" + + +static size_t +powerpc_code(lzma_simple *simple lzma_attribute((unused)), + uint32_t now_pos, bool is_encoder, + uint8_t *buffer, size_t size) +{ + size_t i; + for (i = 0; i + 4 <= size; i += 4) { + // PowerPC branch 6(48) 24(Offset) 1(Abs) 1(Link) + if ((buffer[i] >> 2) == 0x12 + && ((buffer[i + 3] & 3) == 1)) { + + const uint32_t src = ((buffer[i + 0] & 3) << 24) + | (buffer[i + 1] << 16) + | (buffer[i + 2] << 8) + | (buffer[i + 3] & (~3)); + + uint32_t dest; + if (is_encoder) + dest = now_pos + (uint32_t)(i) + src; + else + dest = src - (now_pos + (uint32_t)(i)); + + buffer[i + 0] = 0x48 | ((dest >> 24) & 0x03); + buffer[i + 1] = (dest >> 16); + buffer[i + 2] = (dest >> 8); + buffer[i + 3] &= 0x03; + buffer[i + 3] |= dest; + } + } + + return i; +} + + +static lzma_ret +powerpc_coder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters, bool is_encoder) +{ + return lzma_simple_coder_init(next, allocator, filters, + &powerpc_code, 0, 4, 4, is_encoder); +} + + +extern lzma_ret +lzma_simple_powerpc_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters) +{ + return powerpc_coder_init(next, allocator, filters, true); +} + + +extern lzma_ret +lzma_simple_powerpc_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters) +{ + return powerpc_coder_init(next, allocator, filters, false); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_coder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_coder.c new file mode 100644 index 00000000000..497949a3d09 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_coder.c @@ -0,0 +1,268 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file simple_coder.c +/// \brief Wrapper for simple filters +/// +/// Simple filters don't change the size of the data i.e. number of bytes +/// in equals the number of bytes out. +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "simple_private.h" + + +/// Copied or encodes/decodes more data to out[]. +static lzma_ret +copy_or_code(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + assert(!coder->end_was_reached); + + if (coder->next.code == NULL) { + lzma_bufcpy(in, in_pos, in_size, out, out_pos, out_size); + + // Check if end of stream was reached. + if (coder->is_encoder && action == LZMA_FINISH + && *in_pos == in_size) + coder->end_was_reached = true; + + } else { + // Call the next coder in the chain to provide us some data. + // We don't care about uncompressed_size here, because + // the next filter in the chain will do it for us (since + // we don't change the size of the data). + const lzma_ret ret = coder->next.code( + coder->next.coder, allocator, + in, in_pos, in_size, + out, out_pos, out_size, action); + + if (ret == LZMA_STREAM_END) { + assert(!coder->is_encoder + || action == LZMA_FINISH); + coder->end_was_reached = true; + + } else if (ret != LZMA_OK) { + return ret; + } + } + + return LZMA_OK; +} + + +static size_t +call_filter(lzma_coder *coder, uint8_t *buffer, size_t size) +{ + const size_t filtered = coder->filter(coder->simple, + coder->now_pos, coder->is_encoder, + buffer, size); + coder->now_pos += filtered; + return filtered; +} + + +static lzma_ret +simple_code(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + // TODO: Add partial support for LZMA_SYNC_FLUSH. We can support it + // in cases when the filter is able to filter everything. With most + // simple filters it can be done at offset that is a multiple of 2, + // 4, or 16. With x86 filter, it needs good luck, and thus cannot + // be made to work predictably. + if (action == LZMA_SYNC_FLUSH) + return LZMA_OPTIONS_ERROR; + + // Flush already filtered data from coder->buffer[] to out[]. + if (coder->pos < coder->filtered) { + lzma_bufcpy(coder->buffer, &coder->pos, coder->filtered, + out, out_pos, out_size); + + // If we couldn't flush all the filtered data, return to + // application immediatelly. + if (coder->pos < coder->filtered) + return LZMA_OK; + + if (coder->end_was_reached) { + assert(coder->filtered == coder->size); + return LZMA_STREAM_END; + } + } + + // If we get here, there is no filtered data left in the buffer. + coder->filtered = 0; + + assert(!coder->end_was_reached); + + // If there is more output space left than there is unfiltered data + // in coder->buffer[], flush coder->buffer[] to out[], and copy/code + // more data to out[] hopefully filling it completely. Then filter + // the data in out[]. This step is where most of the data gets + // filtered if the buffer sizes used by the application are reasonable. + const size_t out_avail = out_size - *out_pos; + const size_t buf_avail = coder->size - coder->pos; + if (out_avail > buf_avail) { + // Store the old position so that we know from which byte + // to start filtering. + const size_t out_start = *out_pos; + + // Flush data from coder->buffer[] to out[], but don't reset + // coder->pos and coder->size yet. This way the coder can be + // restarted if the next filter in the chain returns e.g. + // LZMA_MEM_ERROR. + memcpy(out + *out_pos, coder->buffer + coder->pos, buf_avail); + *out_pos += buf_avail; + + // Copy/Encode/Decode more data to out[]. + { + const lzma_ret ret = copy_or_code(coder, allocator, + in, in_pos, in_size, + out, out_pos, out_size, action); + assert(ret != LZMA_STREAM_END); + if (ret != LZMA_OK) + return ret; + } + + // Filter out[]. + const size_t size = *out_pos - out_start; + const size_t filtered = call_filter( + coder, out + out_start, size); + + const size_t unfiltered = size - filtered; + assert(unfiltered <= coder->allocated / 2); + + // Now we can update coder->pos and coder->size, because + // the next coder in the chain (if any) was successful. + coder->pos = 0; + coder->size = unfiltered; + + if (coder->end_was_reached) { + // The last byte has been copied to out[] already. + // They are left as is. + coder->size = 0; + + } else if (unfiltered > 0) { + // There is unfiltered data left in out[]. Copy it to + // coder->buffer[] and rewind *out_pos appropriately. + *out_pos -= unfiltered; + memcpy(coder->buffer, out + *out_pos, unfiltered); + } + } else if (coder->pos > 0) { + memmove(coder->buffer, coder->buffer + coder->pos, buf_avail); + coder->size -= coder->pos; + coder->pos = 0; + } + + assert(coder->pos == 0); + + // If coder->buffer[] isn't empty, try to fill it by copying/decoding + // more data. Then filter coder->buffer[] and copy the successfully + // filtered data to out[]. It is probable, that some filtered and + // unfiltered data will be left to coder->buffer[]. + if (coder->size > 0) { + { + const lzma_ret ret = copy_or_code(coder, allocator, + in, in_pos, in_size, + coder->buffer, &coder->size, + coder->allocated, action); + assert(ret != LZMA_STREAM_END); + if (ret != LZMA_OK) + return ret; + } + + coder->filtered = call_filter( + coder, coder->buffer, coder->size); + + // Everything is considered to be filtered if coder->buffer[] + // contains the last bytes of the data. + if (coder->end_was_reached) + coder->filtered = coder->size; + + // Flush as much as possible. + lzma_bufcpy(coder->buffer, &coder->pos, coder->filtered, + out, out_pos, out_size); + } + + // Check if we got everything done. + if (coder->end_was_reached && coder->pos == coder->size) + return LZMA_STREAM_END; + + return LZMA_OK; +} + + +static void +simple_coder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_next_end(&coder->next, allocator); + lzma_free(coder->simple, allocator); + lzma_free(coder, allocator); + return; +} + + +extern lzma_ret +lzma_simple_coder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters, + size_t (*filter)(lzma_simple *simple, uint32_t now_pos, + bool is_encoder, uint8_t *buffer, size_t size), + size_t simple_size, size_t unfiltered_max, + uint32_t alignment, bool is_encoder) +{ + // Allocate memory for the lzma_coder structure if needed. + if (next->coder == NULL) { + // Here we allocate space also for the temporary buffer. We + // need twice the size of unfiltered_max, because then it + // is always possible to filter at least unfiltered_max bytes + // more data in coder->buffer[] if it can be filled completely. + next->coder = lzma_alloc(sizeof(lzma_coder) + + 2 * unfiltered_max, allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &simple_code; + next->end = &simple_coder_end; + + next->coder->next = LZMA_NEXT_CODER_INIT; + next->coder->filter = filter; + next->coder->allocated = 2 * unfiltered_max; + + // Allocate memory for filter-specific data structure. + if (simple_size > 0) { + next->coder->simple = lzma_alloc( + simple_size, allocator); + if (next->coder->simple == NULL) + return LZMA_MEM_ERROR; + } else { + next->coder->simple = NULL; + } + } + + if (filters[0].options != NULL) { + const lzma_options_bcj *simple = filters[0].options; + next->coder->now_pos = simple->start_offset; + if (next->coder->now_pos & (alignment - 1)) + return LZMA_OPTIONS_ERROR; + } else { + next->coder->now_pos = 0; + } + + // Reset variables. + next->coder->is_encoder = is_encoder; + next->coder->end_was_reached = false; + next->coder->pos = 0; + next->coder->filtered = 0; + next->coder->size = 0; + + return lzma_next_filter_init( + &next->coder->next, allocator, filters + 1); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_coder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_coder.h new file mode 100644 index 00000000000..0952fad33b3 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_coder.h @@ -0,0 +1,60 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file simple_coder.h +/// \brief Wrapper for simple filters +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_SIMPLE_CODER_H +#define LZMA_SIMPLE_CODER_H + +#include "common.h" + + +extern lzma_ret lzma_simple_x86_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +extern lzma_ret lzma_simple_x86_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + + +extern lzma_ret lzma_simple_powerpc_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +extern lzma_ret lzma_simple_powerpc_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + + +extern lzma_ret lzma_simple_ia64_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +extern lzma_ret lzma_simple_ia64_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + + +extern lzma_ret lzma_simple_arm_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +extern lzma_ret lzma_simple_arm_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + + +extern lzma_ret lzma_simple_armthumb_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +extern lzma_ret lzma_simple_armthumb_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + + +extern lzma_ret lzma_simple_sparc_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +extern lzma_ret lzma_simple_sparc_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_decoder.c new file mode 100644 index 00000000000..9be1bfef579 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_decoder.c @@ -0,0 +1,40 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file simple_decoder.c +/// \brief Properties decoder for simple filters +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "simple_decoder.h" + + +extern lzma_ret +lzma_simple_props_decode(void **options, lzma_allocator *allocator, + const uint8_t *props, size_t props_size) +{ + if (props_size == 0) + return LZMA_OK; + + if (props_size != 4) + return LZMA_OPTIONS_ERROR; + + lzma_options_bcj *opt = lzma_alloc( + sizeof(lzma_options_bcj), allocator); + if (opt == NULL) + return LZMA_MEM_ERROR; + + opt->start_offset = integer_read_32(props); + + // Don't leave an options structure allocated if start_offset is zero. + if (opt->start_offset == 0) + lzma_free(opt, allocator); + else + *options = opt; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_decoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_decoder.h new file mode 100644 index 00000000000..b8bf590f768 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_decoder.h @@ -0,0 +1,22 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file simple_decoder.h +/// \brief Properties decoder for simple filters +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_SIMPLE_DECODER_H +#define LZMA_SIMPLE_DECODER_H + +#include "simple_coder.h" + +extern lzma_ret lzma_simple_props_decode( + void **options, lzma_allocator *allocator, + const uint8_t *props, size_t props_size); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_encoder.c new file mode 100644 index 00000000000..1ceabd1ff96 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_encoder.c @@ -0,0 +1,38 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file simple_encoder.c +/// \brief Properties encoder for simple filters +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "simple_encoder.h" + + +extern lzma_ret +lzma_simple_props_size(uint32_t *size, const void *options) +{ + const lzma_options_bcj *const opt = options; + *size = (opt == NULL || opt->start_offset == 0) ? 0 : 4; + return LZMA_OK; +} + + +extern lzma_ret +lzma_simple_props_encode(const void *options, uint8_t *out) +{ + const lzma_options_bcj *const opt = options; + + // The default start offset is zero, so we don't need to store any + // options unless the start offset is non-zero. + if (opt == NULL || opt->start_offset == 0) + return LZMA_OK; + + integer_write_32(out, opt->start_offset); + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_encoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_encoder.h new file mode 100644 index 00000000000..1cee4823a4e --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_encoder.h @@ -0,0 +1,23 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file simple_encoder.c +/// \brief Properties encoder for simple filters +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_SIMPLE_ENCODER_H +#define LZMA_SIMPLE_ENCODER_H + +#include "simple_coder.h" + + +extern lzma_ret lzma_simple_props_size(uint32_t *size, const void *options); + +extern lzma_ret lzma_simple_props_encode(const void *options, uint8_t *out); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_private.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_private.h new file mode 100644 index 00000000000..a69f82785fb --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/simple_private.h @@ -0,0 +1,76 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file simple_private.h +/// \brief Private definitions for so called simple filters +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_SIMPLE_PRIVATE_H +#define LZMA_SIMPLE_PRIVATE_H + +#include "simple_coder.h" + + +typedef struct lzma_simple_s lzma_simple; + +struct lzma_coder_s { + /// Next filter in the chain + lzma_next_coder next; + + /// True if the next coder in the chain has returned LZMA_STREAM_END + /// or if we have processed uncompressed_size bytes. + bool end_was_reached; + + /// True if filter() should encode the data; false to decode. + /// Currently all simple filters use the same function for encoding + /// and decoding, because the difference between encoders and decoders + /// is very small. + bool is_encoder; + + /// Pointer to filter-specific function, which does + /// the actual filtering. + size_t (*filter)(lzma_simple *simple, uint32_t now_pos, + bool is_encoder, uint8_t *buffer, size_t size); + + /// Pointer to filter-specific data, or NULL if filter doesn't need + /// any extra data. + lzma_simple *simple; + + /// The lowest 32 bits of the current position in the data. Most + /// filters need this to do conversions between absolute and relative + /// addresses. + uint32_t now_pos; + + /// Size of the memory allocated for the buffer. + size_t allocated; + + /// Flushing position in the temporary buffer. buffer[pos] is the + /// next byte to be copied to out[]. + size_t pos; + + /// buffer[filtered] is the first unfiltered byte. When pos is smaller + /// than filtered, there is unflushed filtered data in the buffer. + size_t filtered; + + /// Total number of bytes (both filtered and unfiltered) currently + /// in the temporary buffer. + size_t size; + + /// Temporary buffer + uint8_t buffer[]; +}; + + +extern lzma_ret lzma_simple_coder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters, + size_t (*filter)(lzma_simple *simple, uint32_t now_pos, + bool is_encoder, uint8_t *buffer, size_t size), + size_t simple_size, size_t unfiltered_max, + uint32_t alignment, bool is_encoder); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/sparc.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/sparc.c new file mode 100644 index 00000000000..808a59aaac7 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/sparc.c @@ -0,0 +1,81 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file sparc.c +/// \brief Filter for SPARC binaries +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "simple_private.h" + + +static size_t +sparc_code(lzma_simple *simple lzma_attribute((unused)), + uint32_t now_pos, bool is_encoder, + uint8_t *buffer, size_t size) +{ + size_t i; + for (i = 0; i + 4 <= size; i += 4) { + + if ((buffer[i] == 0x40 && (buffer[i + 1] & 0xC0) == 0x00) + || (buffer[i] == 0x7F + && (buffer[i + 1] & 0xC0) == 0xC0)) { + + uint32_t src = ((uint32_t)buffer[i + 0] << 24) + | ((uint32_t)buffer[i + 1] << 16) + | ((uint32_t)buffer[i + 2] << 8) + | ((uint32_t)buffer[i + 3]); + + src <<= 2; + + uint32_t dest; + if (is_encoder) + dest = now_pos + (uint32_t)(i) + src; + else + dest = src - (now_pos + (uint32_t)(i)); + + dest >>= 2; + + dest = (((0 - ((dest >> 22) & 1)) << 22) & 0x3FFFFFFF) + | (dest & 0x3FFFFF) + | 0x40000000; + + buffer[i + 0] = (uint8_t)(dest >> 24); + buffer[i + 1] = (uint8_t)(dest >> 16); + buffer[i + 2] = (uint8_t)(dest >> 8); + buffer[i + 3] = (uint8_t)(dest); + } + } + + return i; +} + + +static lzma_ret +sparc_coder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters, bool is_encoder) +{ + return lzma_simple_coder_init(next, allocator, filters, + &sparc_code, 0, 4, 4, is_encoder); +} + + +extern lzma_ret +lzma_simple_sparc_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters) +{ + return sparc_coder_init(next, allocator, filters, true); +} + + +extern lzma_ret +lzma_simple_sparc_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters) +{ + return sparc_coder_init(next, allocator, filters, false); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/x86.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/x86.c new file mode 100644 index 00000000000..5d1509bb227 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/simple/x86.c @@ -0,0 +1,154 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file x86.c +/// \brief Filter for x86 binaries (BCJ filter) +/// +// Authors: Igor Pavlov +// Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "simple_private.h" + + +#define Test86MSByte(b) ((b) == 0 || (b) == 0xFF) + + +struct lzma_simple_s { + uint32_t prev_mask; + uint32_t prev_pos; +}; + + +static size_t +x86_code(lzma_simple *simple, uint32_t now_pos, bool is_encoder, + uint8_t *buffer, size_t size) +{ + static const bool MASK_TO_ALLOWED_STATUS[8] + = { true, true, true, false, true, false, false, false }; + + static const uint32_t MASK_TO_BIT_NUMBER[8] + = { 0, 1, 2, 2, 3, 3, 3, 3 }; + + uint32_t prev_mask = simple->prev_mask; + uint32_t prev_pos = simple->prev_pos; + + if (size < 5) + return 0; + + if (now_pos - prev_pos > 5) + prev_pos = now_pos - 5; + + const size_t limit = size - 5; + size_t buffer_pos = 0; + + while (buffer_pos <= limit) { + uint8_t b = buffer[buffer_pos]; + if (b != 0xE8 && b != 0xE9) { + ++buffer_pos; + continue; + } + + const uint32_t offset = now_pos + (uint32_t)(buffer_pos) + - prev_pos; + prev_pos = now_pos + (uint32_t)(buffer_pos); + + if (offset > 5) { + prev_mask = 0; + } else { + for (uint32_t i = 0; i < offset; ++i) { + prev_mask &= 0x77; + prev_mask <<= 1; + } + } + + b = buffer[buffer_pos + 4]; + + if (Test86MSByte(b) + && MASK_TO_ALLOWED_STATUS[(prev_mask >> 1) & 0x7] + && (prev_mask >> 1) < 0x10) { + + uint32_t src = ((uint32_t)(b) << 24) + | ((uint32_t)(buffer[buffer_pos + 3]) << 16) + | ((uint32_t)(buffer[buffer_pos + 2]) << 8) + | (buffer[buffer_pos + 1]); + + uint32_t dest; + while (true) { + if (is_encoder) + dest = src + (now_pos + (uint32_t)( + buffer_pos) + 5); + else + dest = src - (now_pos + (uint32_t)( + buffer_pos) + 5); + + if (prev_mask == 0) + break; + + const uint32_t i = MASK_TO_BIT_NUMBER[ + prev_mask >> 1]; + + b = (uint8_t)(dest >> (24 - i * 8)); + + if (!Test86MSByte(b)) + break; + + src = dest ^ ((1 << (32 - i * 8)) - 1); + } + + buffer[buffer_pos + 4] + = (uint8_t)(~(((dest >> 24) & 1) - 1)); + buffer[buffer_pos + 3] = (uint8_t)(dest >> 16); + buffer[buffer_pos + 2] = (uint8_t)(dest >> 8); + buffer[buffer_pos + 1] = (uint8_t)(dest); + buffer_pos += 5; + prev_mask = 0; + + } else { + ++buffer_pos; + prev_mask |= 1; + if (Test86MSByte(b)) + prev_mask |= 0x10; + } + } + + simple->prev_mask = prev_mask; + simple->prev_pos = prev_pos; + + return buffer_pos; +} + + +static lzma_ret +x86_coder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters, bool is_encoder) +{ + const lzma_ret ret = lzma_simple_coder_init(next, allocator, filters, + &x86_code, sizeof(lzma_simple), 5, 1, is_encoder); + + if (ret == LZMA_OK) { + next->coder->simple->prev_mask = 0; + next->coder->simple->prev_pos = (uint32_t)(-5); + } + + return ret; +} + + +extern lzma_ret +lzma_simple_x86_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters) +{ + return x86_coder_init(next, allocator, filters, true); +} + + +extern lzma_ret +lzma_simple_x86_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters) +{ + return x86_coder_init(next, allocator, filters, false); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/Makefile.inc b/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/Makefile.inc new file mode 100644 index 00000000000..a4710cc5955 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/Makefile.inc @@ -0,0 +1,20 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +if COND_ENCODER_SUBBLOCK +liblzma_la_SOURCES += \ + subblock/subblock_encoder.c \ + subblock/subblock_encoder.h +endif + +if COND_DECODER_SUBBLOCK +liblzma_la_SOURCES += \ + subblock/subblock_decoder.c \ + subblock/subblock_decoder.h \ + subblock/subblock_decoder_helper.c \ + subblock/subblock_decoder_helper.h +endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.c new file mode 100644 index 00000000000..e055cee3ea7 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.c @@ -0,0 +1,630 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file subblock_decoder.c +/// \brief Decoder of the Subblock filter +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "subblock_decoder.h" +#include "subblock_decoder_helper.h" +#include "filter_decoder.h" + + +/// Maximum number of consecutive Subblocks with Subblock Type Padding +#define PADDING_MAX 31 + + +struct lzma_coder_s { + lzma_next_coder next; + + enum { + // These require that there is at least one input + // byte available. + SEQ_FLAGS, + SEQ_FILTER_FLAGS, + SEQ_FILTER_END, + SEQ_REPEAT_COUNT_1, + SEQ_REPEAT_COUNT_2, + SEQ_REPEAT_COUNT_3, + SEQ_REPEAT_SIZE, + SEQ_REPEAT_READ_DATA, + SEQ_SIZE_1, + SEQ_SIZE_2, + SEQ_SIZE_3, // This must be right before SEQ_DATA. + + // These don't require any input to be available. + SEQ_DATA, + SEQ_REPEAT_FAST, + SEQ_REPEAT_NORMAL, + } sequence; + + /// Number of bytes left in the current Subblock Data field. + size_t size; + + /// Number of consecutive Subblocks with Subblock Type Padding + uint32_t padding; + + /// True when .next.code() has returned LZMA_STREAM_END. + bool next_finished; + + /// True when the Subblock decoder has detected End of Payload Marker. + /// This may become true before next_finished becomes true. + bool this_finished; + + /// True if Subfilters are allowed. + bool allow_subfilters; + + /// Indicates if at least one byte of decoded output has been + /// produced after enabling Subfilter. + bool got_output_with_subfilter; + + /// Possible subfilter + lzma_next_coder subfilter; + + /// Filter Flags decoder is needed to parse the ID and Properties + /// of the subfilter. + lzma_next_coder filter_flags_decoder; + + /// The filter_flags_decoder stores its results here. + lzma_filter filter_flags; + + /// Options for the Subblock decoder helper. This is used to tell + /// the helper when it should return LZMA_STREAM_END to the subfilter. + lzma_options_subblock_helper helper; + + struct { + /// How many times buffer should be repeated + size_t count; + + /// Size of the buffer + size_t size; + + /// Position in the buffer + size_t pos; + + /// Buffer to hold the data to be repeated + uint8_t buffer[LZMA_SUBBLOCK_RLE_MAX]; + } repeat; + + /// Temporary buffer needed when the Subblock filter is not the last + /// filter in the chain. The output of the next filter is first + /// decoded into buffer[], which is then used as input for the actual + /// Subblock decoder. + struct { + size_t pos; + size_t size; + uint8_t buffer[LZMA_BUFFER_SIZE]; + } temp; +}; + + +/// Values of valid Subblock Flags +enum { + FLAG_PADDING, + FLAG_EOPM, + FLAG_DATA, + FLAG_REPEAT, + FLAG_SET_SUBFILTER, + FLAG_END_SUBFILTER, +}; + + +/// Calls the subfilter and updates coder->uncompressed_size. +static lzma_ret +subfilter_decode(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *in, size_t *in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + assert(coder->subfilter.code != NULL); + + // Call the subfilter. + const lzma_ret ret = coder->subfilter.code( + coder->subfilter.coder, allocator, + in, in_pos, in_size, out, out_pos, out_size, action); + + return ret; +} + + +static lzma_ret +decode_buffer(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *in, size_t *in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + while (*out_pos < out_size && (*in_pos < in_size + || coder->sequence >= SEQ_DATA)) + switch (coder->sequence) { + case SEQ_FLAGS: { + // Do the correct action depending on the Subblock Type. + switch (in[*in_pos] >> 4) { + case FLAG_PADDING: + // Only check that reserved bits are zero. + if (++coder->padding > PADDING_MAX + || in[*in_pos] & 0x0F) + return LZMA_DATA_ERROR; + ++*in_pos; + break; + + case FLAG_EOPM: + // There must be no Padding before EOPM. + if (coder->padding != 0) + return LZMA_DATA_ERROR; + + // Check that reserved bits are zero. + if (in[*in_pos] & 0x0F) + return LZMA_DATA_ERROR; + + // There must be no Subfilter enabled. + if (coder->subfilter.code != NULL) + return LZMA_DATA_ERROR; + + ++*in_pos; + return LZMA_STREAM_END; + + case FLAG_DATA: + // First four bits of the Subblock Data size. + coder->size = in[*in_pos] & 0x0F; + ++*in_pos; + coder->got_output_with_subfilter = true; + coder->sequence = SEQ_SIZE_1; + break; + + case FLAG_REPEAT: + // First four bits of the Repeat Count. We use + // coder->size as a temporary place for it. + coder->size = in[*in_pos] & 0x0F; + ++*in_pos; + coder->got_output_with_subfilter = true; + coder->sequence = SEQ_REPEAT_COUNT_1; + break; + + case FLAG_SET_SUBFILTER: { + if (coder->padding != 0 || (in[*in_pos] & 0x0F) + || coder->subfilter.code != NULL + || !coder->allow_subfilters) + return LZMA_DATA_ERROR; + + assert(coder->filter_flags.options == NULL); + abort(); +// return_if_error(lzma_filter_flags_decoder_init( +// &coder->filter_flags_decoder, +// allocator, &coder->filter_flags)); + + coder->got_output_with_subfilter = false; + + ++*in_pos; + coder->sequence = SEQ_FILTER_FLAGS; + break; + } + + case FLAG_END_SUBFILTER: { + if (coder->padding != 0 || (in[*in_pos] & 0x0F) + || coder->subfilter.code == NULL + || !coder->got_output_with_subfilter) + return LZMA_DATA_ERROR; + + // Tell the helper filter to indicate End of Input + // to our subfilter. + coder->helper.end_was_reached = true; + + size_t dummy = 0; + const lzma_ret ret = subfilter_decode(coder, allocator, + NULL, &dummy, 0, out, out_pos,out_size, + action); + + // If we didn't reach the end of the subfilter's output + // yet, return to the application. On the next call we + // will get to this same switch-case again, because we + // haven't updated *in_pos yet. + if (ret != LZMA_STREAM_END) + return ret; + + // Free Subfilter's memory. This is a bit debatable, + // since we could avoid some malloc()/free() calls + // if the same Subfilter gets used soon again. But + // if Subfilter isn't used again, we could leave + // a memory-hogging filter dangling until someone + // frees Subblock filter itself. + lzma_next_end(&coder->subfilter, allocator); + + // Free memory used for subfilter options. This is + // safe, because we don't support any Subfilter that + // would allow pointers in the options structure. + lzma_free(coder->filter_flags.options, allocator); + coder->filter_flags.options = NULL; + + ++*in_pos; + + break; + } + + default: + return LZMA_DATA_ERROR; + } + + break; + } + + case SEQ_FILTER_FLAGS: { + const lzma_ret ret = coder->filter_flags_decoder.code( + coder->filter_flags_decoder.coder, allocator, + in, in_pos, in_size, NULL, NULL, 0, LZMA_RUN); + if (ret != LZMA_STREAM_END) + return ret == LZMA_OPTIONS_ERROR + ? LZMA_DATA_ERROR : ret; + + // Don't free the filter_flags_decoder. It doesn't take much + // memory and we may need it again. + + // Initialize the Subfilter. Subblock and Copy filters are + // not allowed. + if (coder->filter_flags.id == LZMA_FILTER_SUBBLOCK) + return LZMA_DATA_ERROR; + + coder->helper.end_was_reached = false; + + lzma_filter filters[3] = { + { + .id = coder->filter_flags.id, + .options = coder->filter_flags.options, + }, { + .id = LZMA_FILTER_SUBBLOCK_HELPER, + .options = &coder->helper, + }, { + .id = LZMA_VLI_UNKNOWN, + .options = NULL, + } + }; + + // Optimization: We know that LZMA uses End of Payload Marker + // (not End of Input), so we can omit the helper filter. + if (filters[0].id == LZMA_FILTER_LZMA1) + filters[1].id = LZMA_VLI_UNKNOWN; + + return_if_error(lzma_raw_decoder_init( + &coder->subfilter, allocator, filters)); + + coder->sequence = SEQ_FLAGS; + break; + } + + case SEQ_FILTER_END: + // We are in the beginning of a Subblock. The next Subblock + // whose type is not Padding, must indicate end of Subfilter. + if (in[*in_pos] == (FLAG_PADDING << 4)) { + ++*in_pos; + break; + } + + if (in[*in_pos] != (FLAG_END_SUBFILTER << 4)) + return LZMA_DATA_ERROR; + + coder->sequence = SEQ_FLAGS; + break; + + case SEQ_REPEAT_COUNT_1: + case SEQ_SIZE_1: + // We use the same code to parse + // - the Size (28 bits) in Subblocks of type Data; and + // - the Repeat count (28 bits) in Subblocks of type + // Repeating Data. + coder->size |= (size_t)(in[*in_pos]) << 4; + ++*in_pos; + ++coder->sequence; + break; + + case SEQ_REPEAT_COUNT_2: + case SEQ_SIZE_2: + coder->size |= (size_t)(in[*in_pos]) << 12; + ++*in_pos; + ++coder->sequence; + break; + + case SEQ_REPEAT_COUNT_3: + case SEQ_SIZE_3: + coder->size |= (size_t)(in[*in_pos]) << 20; + ++*in_pos; + + // The real value is the stored value plus one. + ++coder->size; + + // This moves to SEQ_REPEAT_SIZE or SEQ_DATA. That's why + // SEQ_DATA must be right after SEQ_SIZE_3 in coder->sequence. + ++coder->sequence; + break; + + case SEQ_REPEAT_SIZE: + // Move the Repeat Count to the correct variable and parse + // the Size of the Data to be repeated. + coder->repeat.count = coder->size; + coder->repeat.size = (size_t)(in[*in_pos]) + 1; + coder->repeat.pos = 0; + + // The size of the Data field must be bigger than the number + // of Padding bytes before this Subblock. + if (coder->repeat.size <= coder->padding) + return LZMA_DATA_ERROR; + + ++*in_pos; + coder->padding = 0; + coder->sequence = SEQ_REPEAT_READ_DATA; + break; + + case SEQ_REPEAT_READ_DATA: { + // Fill coder->repeat.buffer[]. + const size_t in_avail = in_size - *in_pos; + const size_t out_avail + = coder->repeat.size - coder->repeat.pos; + const size_t copy_size = MIN(in_avail, out_avail); + + memcpy(coder->repeat.buffer + coder->repeat.pos, + in + *in_pos, copy_size); + *in_pos += copy_size; + coder->repeat.pos += copy_size; + + if (coder->repeat.pos == coder->repeat.size) { + coder->repeat.pos = 0; + + if (coder->repeat.size == 1 + && coder->subfilter.code == NULL) + coder->sequence = SEQ_REPEAT_FAST; + else + coder->sequence = SEQ_REPEAT_NORMAL; + } + + break; + } + + case SEQ_DATA: { + // The size of the Data field must be bigger than the number + // of Padding bytes before this Subblock. + assert(coder->size > 0); + if (coder->size <= coder->padding) + return LZMA_DATA_ERROR; + + coder->padding = 0; + + // Limit the amount of input to match the available + // Subblock Data size. + size_t in_limit; + if (in_size - *in_pos > coder->size) + in_limit = *in_pos + coder->size; + else + in_limit = in_size; + + if (coder->subfilter.code == NULL) { + const size_t copy_size = lzma_bufcpy( + in, in_pos, in_limit, + out, out_pos, out_size); + + coder->size -= copy_size; + } else { + const size_t in_start = *in_pos; + const lzma_ret ret = subfilter_decode( + coder, allocator, + in, in_pos, in_limit, + out, out_pos, out_size, + action); + + // Update the number of unprocessed bytes left in + // this Subblock. This assert() is true because + // in_limit prevents *in_pos getting too big. + assert(*in_pos - in_start <= coder->size); + coder->size -= *in_pos - in_start; + + if (ret == LZMA_STREAM_END) { + // End of Subfilter can occur only at + // a Subblock boundary. + if (coder->size != 0) + return LZMA_DATA_ERROR; + + // We need a Subblock with Unset + // Subfilter before more data. + coder->sequence = SEQ_FILTER_END; + break; + } + + if (ret != LZMA_OK) + return ret; + } + + // If we couldn't process the whole Subblock Data yet, return. + if (coder->size > 0) + return LZMA_OK; + + coder->sequence = SEQ_FLAGS; + break; + } + + case SEQ_REPEAT_FAST: { + // Optimization for cases when there is only one byte to + // repeat and no Subfilter. + const size_t out_avail = out_size - *out_pos; + const size_t copy_size = MIN(coder->repeat.count, out_avail); + + memset(out + *out_pos, coder->repeat.buffer[0], copy_size); + + *out_pos += copy_size; + coder->repeat.count -= copy_size; + + if (coder->repeat.count != 0) + return LZMA_OK; + + coder->sequence = SEQ_FLAGS; + break; + } + + case SEQ_REPEAT_NORMAL: + do { + // Cycle the repeat buffer if needed. + if (coder->repeat.pos == coder->repeat.size) { + if (--coder->repeat.count == 0) { + coder->sequence = SEQ_FLAGS; + break; + } + + coder->repeat.pos = 0; + } + + if (coder->subfilter.code == NULL) { + lzma_bufcpy(coder->repeat.buffer, + &coder->repeat.pos, + coder->repeat.size, + out, out_pos, out_size); + } else { + const lzma_ret ret = subfilter_decode( + coder, allocator, + coder->repeat.buffer, + &coder->repeat.pos, + coder->repeat.size, + out, out_pos, out_size, + action); + + if (ret == LZMA_STREAM_END) { + // End of Subfilter can occur only at + // a Subblock boundary. + if (coder->repeat.pos + != coder->repeat.size + || --coder->repeat + .count != 0) + return LZMA_DATA_ERROR; + + // We need a Subblock with Unset + // Subfilter before more data. + coder->sequence = SEQ_FILTER_END; + break; + + } else if (ret != LZMA_OK) { + return ret; + } + } + } while (*out_pos < out_size); + + break; + + default: + return LZMA_PROG_ERROR; + } + + return LZMA_OK; +} + + +static lzma_ret +subblock_decode(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + if (coder->next.code == NULL) + return decode_buffer(coder, allocator, in, in_pos, in_size, + out, out_pos, out_size, action); + + while (*out_pos < out_size) { + if (!coder->next_finished + && coder->temp.pos == coder->temp.size) { + coder->temp.pos = 0; + coder->temp.size = 0; + + const lzma_ret ret = coder->next.code( + coder->next.coder, + allocator, in, in_pos, in_size, + coder->temp.buffer, &coder->temp.size, + LZMA_BUFFER_SIZE, action); + + if (ret == LZMA_STREAM_END) + coder->next_finished = true; + else if (coder->temp.size == 0 || ret != LZMA_OK) + return ret; + } + + if (coder->this_finished) { + if (coder->temp.pos != coder->temp.size) + return LZMA_DATA_ERROR; + + if (coder->next_finished) + return LZMA_STREAM_END; + + return LZMA_OK; + } + + const lzma_ret ret = decode_buffer(coder, allocator, + coder->temp.buffer, &coder->temp.pos, + coder->temp.size, + out, out_pos, out_size, action); + + if (ret == LZMA_STREAM_END) + // The next coder in the chain hasn't finished + // yet. If the input data is valid, there + // must be no more output coming, but the + // next coder may still need a litle more + // input to detect End of Payload Marker. + coder->this_finished = true; + else if (ret != LZMA_OK) + return ret; + else if (coder->next_finished && *out_pos < out_size) + return LZMA_DATA_ERROR; + } + + return LZMA_OK; +} + + +static void +subblock_decoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_next_end(&coder->next, allocator); + lzma_next_end(&coder->subfilter, allocator); + lzma_next_end(&coder->filter_flags_decoder, allocator); + lzma_free(coder->filter_flags.options, allocator); + lzma_free(coder, allocator); + return; +} + + +extern lzma_ret +lzma_subblock_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters) +{ + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &subblock_decode; + next->end = &subblock_decoder_end; + + next->coder->next = LZMA_NEXT_CODER_INIT; + next->coder->subfilter = LZMA_NEXT_CODER_INIT; + next->coder->filter_flags_decoder = LZMA_NEXT_CODER_INIT; + + } else { + lzma_next_end(&next->coder->subfilter, allocator); + lzma_free(next->coder->filter_flags.options, allocator); + } + + next->coder->filter_flags.options = NULL; + + next->coder->sequence = SEQ_FLAGS; + next->coder->padding = 0; + next->coder->next_finished = false; + next->coder->this_finished = false; + next->coder->temp.pos = 0; + next->coder->temp.size = 0; + + if (filters[0].options != NULL) + next->coder->allow_subfilters = ((lzma_options_subblock *)( + filters[0].options))->allow_subfilters; + else + next->coder->allow_subfilters = false; + + return lzma_next_filter_init( + &next->coder->next, allocator, filters + 1); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.h new file mode 100644 index 00000000000..d1030b2b94f --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.h @@ -0,0 +1,22 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file subblock_decoder.h +/// \brief Decoder of the Subblock filter +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_SUBBLOCK_DECODER_H +#define LZMA_SUBBLOCK_DECODER_H + +#include "common.h" + + +extern lzma_ret lzma_subblock_decoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.c new file mode 100644 index 00000000000..2a864eddad9 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.c @@ -0,0 +1,70 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file subblock_decoder_helper.c +/// \brief Helper filter for the Subblock decoder +/// +/// This filter is used to indicate End of Input for subfilters needing it. +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "subblock_decoder_helper.h" + + +struct lzma_coder_s { + const lzma_options_subblock_helper *options; +}; + + +static lzma_ret +helper_decode(lzma_coder *coder, + lzma_allocator *allocator lzma_attribute((unused)), + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, + lzma_action action lzma_attribute((unused))) +{ + // If end_was_reached is true, we cannot have any input. + assert(!coder->options->end_was_reached || *in_pos == in_size); + + // We can safely copy as much as possible, because we are never + // given more data than a single Subblock Data field. + lzma_bufcpy(in, in_pos, in_size, out, out_pos, out_size); + + // Return LZMA_STREAM_END when instructed so by the Subblock decoder. + return coder->options->end_was_reached ? LZMA_STREAM_END : LZMA_OK; +} + + +static void +helper_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_free(coder, allocator); + return; +} + + +extern lzma_ret +lzma_subblock_decoder_helper_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters) +{ + // This is always the last filter in the chain. + assert(filters[1].init == NULL); + + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &helper_decode; + next->end = &helper_end; + } + + next->coder->options = filters[0].options; + + return LZMA_OK; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.h new file mode 100644 index 00000000000..18dcbb39a39 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.h @@ -0,0 +1,29 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file subblock_decoder_helper.h +/// \brief Helper filter for the Subblock decoder +/// +/// This filter is used to indicate End of Input for subfilters needing it. +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_SUBBLOCK_DECODER_HELPER_H +#define LZMA_SUBBLOCK_DECODER_HELPER_H + +#include "common.h" + + +typedef struct { + bool end_was_reached; +} lzma_options_subblock_helper; + + +extern lzma_ret lzma_subblock_decoder_helper_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.c b/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.c new file mode 100644 index 00000000000..b46b1c29754 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.c @@ -0,0 +1,984 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file subblock_encoder.c +/// \brief Encoder of the Subblock filter +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "subblock_encoder.h" +#include "filter_encoder.h" + + +/// Maximum number of repeats that a single Repeating Data can indicate. +/// This is directly from the file format specification. +#define REPEAT_COUNT_MAX (1U << 28) + +/// Number of bytes the data chunk (not including the header part) must be +/// before we care about alignment. This is somewhat arbitrary. It just +/// doesn't make sense to waste bytes for alignment when the data chunk +/// is very small. +#define MIN_CHUNK_SIZE_FOR_ALIGN 4 + +/// Number of bytes of the header part of Subblock Type `Data'. This is +/// used as the `skew' argument for subblock_align(). +#define ALIGN_SKEW_DATA 4 + +/// Like above but for Repeating Data. +#define ALIGN_SKEW_REPEATING_DATA 5 + +/// Writes one byte to output buffer and updates the alignment counter. +#define write_byte(b) \ +do { \ + assert(*out_pos < out_size); \ + out[*out_pos] = b; \ + ++*out_pos; \ + ++coder->alignment.out_pos; \ +} while (0) + + +struct lzma_coder_s { + lzma_next_coder next; + bool next_finished; + + enum { + SEQ_FILL, + SEQ_FLUSH, + SEQ_RLE_COUNT_0, + SEQ_RLE_COUNT_1, + SEQ_RLE_COUNT_2, + SEQ_RLE_COUNT_3, + SEQ_RLE_SIZE, + SEQ_RLE_DATA, + SEQ_DATA_SIZE_0, + SEQ_DATA_SIZE_1, + SEQ_DATA_SIZE_2, + SEQ_DATA_SIZE_3, + SEQ_DATA, + SEQ_SUBFILTER_INIT, + SEQ_SUBFILTER_FLAGS, + } sequence; + + /// Pointer to the options given by the application. This is used + /// for two-way communication with the application. + lzma_options_subblock *options; + + /// Position in various arrays. + size_t pos; + + /// Holds subblock.size - 1 or rle.size - 1 when encoding size + /// of Data or Repeat Count. + uint32_t tmp; + + struct { + /// This is a copy of options->alignment, or + /// LZMA_SUBBLOCK_ALIGNMENT_DEFAULT if options is NULL. + uint32_t multiple; + + /// Number of input bytes which we have processed and started + /// writing out. 32-bit integer is enough since we care only + /// about the lowest bits when fixing alignment. + uint32_t in_pos; + + /// Number of bytes written out. + uint32_t out_pos; + } alignment; + + struct { + /// Pointer to allocated buffer holding the Data field + /// of Subblock Type "Data". + uint8_t *data; + + /// Number of bytes in the buffer. + size_t size; + + /// Allocated size of the buffer. + size_t limit; + + /// Number of input bytes that we have already read but + /// not yet started writing out. This can be different + /// to `size' when using Subfilter. That's why we track + /// in_pending separately for RLE (see below). + uint32_t in_pending; + } subblock; + + struct { + /// Buffer to hold the data that may be coded with + /// Subblock Type `Repeating Data'. + uint8_t buffer[LZMA_SUBBLOCK_RLE_MAX]; + + /// Number of bytes in buffer[]. + size_t size; + + /// Number of times the first `size' bytes of buffer[] + /// will be repeated. + uint64_t count; + + /// Like subblock.in_pending above, but for RLE. + uint32_t in_pending; + } rle; + + struct { + enum { + SUB_NONE, + SUB_SET, + SUB_RUN, + SUB_FLUSH, + SUB_FINISH, + SUB_END_MARKER, + } mode; + + /// This is a copy of options->allow_subfilters. We use + /// this to verify that the application doesn't change + /// the value of allow_subfilters. + bool allow; + + /// When this is true, application is not allowed to modify + /// options->subblock_mode. We may still modify it here. + bool mode_locked; + + /// True if we have encoded at least one byte of data with + /// the Subfilter. + bool got_input; + + /// Track the amount of input available once + /// LZMA_SUBFILTER_FINISH has been enabled. + /// This is needed for sanity checking (kind + /// of duplicating what common/code.c does). + size_t in_avail; + + /// Buffer for the Filter Flags field written after + /// the `Set Subfilter' indicator. + uint8_t *flags; + + /// Size of Filter Flags field. + uint32_t flags_size; + + /// Pointers to Subfilter. + lzma_next_coder subcoder; + + } subfilter; + + /// Temporary buffer used when we are not the last filter in the chain. + struct { + size_t pos; + size_t size; + uint8_t buffer[LZMA_BUFFER_SIZE]; + } temp; +}; + + +/// \brief Aligns the output buffer +/// +/// Aligns the output buffer so that after skew bytes the output position is +/// a multiple of coder->alignment.multiple. +static bool +subblock_align(lzma_coder *coder, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, + size_t chunk_size, uint32_t skew) +{ + assert(*out_pos < out_size); + + // Fix the alignment only if it makes sense at least a little. + if (chunk_size >= MIN_CHUNK_SIZE_FOR_ALIGN) { + const uint32_t target = coder->alignment.in_pos + % coder->alignment.multiple; + + while ((coder->alignment.out_pos + skew) + % coder->alignment.multiple != target) { + // Zero indicates padding. + write_byte(0x00); + + // Check if output buffer got full and indicate it to + // the caller. + if (*out_pos == out_size) + return true; + } + } + + // Output buffer is not full. + return false; +} + + +/// \brief Checks if buffer contains repeated data +/// +/// \param needle Buffer containing a single repeat chunk +/// \param needle_size Size of needle in bytes +/// \param buf Buffer to search for repeated needles +/// \param buf_chunks Buffer size is buf_chunks * needle_size. +/// +/// \return True if the whole buf is filled with repeated needles. +/// +static bool +is_repeating(const uint8_t *restrict needle, size_t needle_size, + const uint8_t *restrict buf, size_t buf_chunks) +{ + while (buf_chunks-- != 0) { + if (memcmp(buf, needle, needle_size) != 0) + return false; + + buf += needle_size; + } + + return true; +} + + +/// \brief Optimizes the repeating style and updates coder->sequence +static void +subblock_rle_flush(lzma_coder *coder) +{ + // The Subblock decoder can use memset() when the size of the data + // being repeated is one byte, so we check if the RLE buffer is + // filled with a single repeating byte. + if (coder->rle.size > 1) { + const uint8_t b = coder->rle.buffer[0]; + size_t i = 0; + while (true) { + if (coder->rle.buffer[i] != b) + break; + + if (++i == coder->rle.size) { + // TODO Integer overflow check maybe, + // although this needs at least 2**63 bytes + // of input until it gets triggered... + coder->rle.count *= coder->rle.size; + coder->rle.size = 1; + break; + } + } + } + + if (coder->rle.count == 1) { + // The buffer should be repeated only once. It is + // waste of space to use Repeating Data. Instead, + // write a regular Data Subblock. See SEQ_RLE_COUNT_0 + // in subblock_buffer() for more info. + coder->tmp = coder->rle.size - 1; + } else if (coder->rle.count > REPEAT_COUNT_MAX) { + // There's so much to repeat that it doesn't fit into + // 28-bit integer. We will write two or more Subblocks + // of type Repeating Data. + coder->tmp = REPEAT_COUNT_MAX - 1; + } else { + coder->tmp = coder->rle.count - 1; + } + + coder->sequence = SEQ_RLE_COUNT_0; + + return; +} + + +/// \brief Resizes coder->subblock.data for a new size limit +static lzma_ret +subblock_data_size(lzma_coder *coder, lzma_allocator *allocator, + size_t new_limit) +{ + // Verify that the new limit is valid. + if (new_limit < LZMA_SUBBLOCK_DATA_SIZE_MIN + || new_limit > LZMA_SUBBLOCK_DATA_SIZE_MAX) + return LZMA_OPTIONS_ERROR; + + // Ff the new limit is different than the previous one, we need + // to reallocate the data buffer. + if (new_limit != coder->subblock.limit) { + lzma_free(coder->subblock.data, allocator); + coder->subblock.data = lzma_alloc(new_limit, allocator); + if (coder->subblock.data == NULL) + return LZMA_MEM_ERROR; + } + + coder->subblock.limit = new_limit; + + return LZMA_OK; +} + + +static lzma_ret +subblock_buffer(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + // Changing allow_subfilter is not allowed. + if (coder->options != NULL && coder->subfilter.allow + != coder->options->allow_subfilters) + return LZMA_PROG_ERROR; + + // Check if we need to do something special with the Subfilter. + if (coder->subfilter.allow) { + assert(coder->options != NULL); + + // See if subfilter_mode has been changed. + switch (coder->options->subfilter_mode) { + case LZMA_SUBFILTER_NONE: + if (coder->subfilter.mode != SUB_NONE) + return LZMA_PROG_ERROR; + break; + + case LZMA_SUBFILTER_SET: + if (coder->subfilter.mode_locked + || coder->subfilter.mode != SUB_NONE) + return LZMA_PROG_ERROR; + + coder->subfilter.mode = SUB_SET; + coder->subfilter.got_input = false; + + if (coder->sequence == SEQ_FILL) + coder->sequence = SEQ_FLUSH; + + break; + + case LZMA_SUBFILTER_RUN: + if (coder->subfilter.mode != SUB_RUN) + return LZMA_PROG_ERROR; + + break; + + case LZMA_SUBFILTER_FINISH: { + const size_t in_avail = in_size - *in_pos; + + if (coder->subfilter.mode == SUB_RUN) { + if (coder->subfilter.mode_locked) + return LZMA_PROG_ERROR; + + coder->subfilter.mode = SUB_FINISH; + coder->subfilter.in_avail = in_avail; + + } else if (coder->subfilter.mode != SUB_FINISH + || coder->subfilter.in_avail + != in_avail) { + return LZMA_PROG_ERROR; + } + + break; + } + + default: + return LZMA_OPTIONS_ERROR; + } + + // If we are sync-flushing or finishing, the application may + // no longer change subfilter_mode. Note that this check is + // done after checking the new subfilter_mode above; this + // way the application may e.g. set LZMA_SUBFILTER_SET and + // LZMA_SYNC_FLUSH at the same time, but it cannot modify + // subfilter_mode on the later lzma_code() calls before + // we have returned LZMA_STREAM_END. + if (action != LZMA_RUN) + coder->subfilter.mode_locked = true; + } + + // Main loop + while (*out_pos < out_size) + switch (coder->sequence) { + case SEQ_FILL: + // Grab the new Subblock Data Size and reallocate the buffer. + if (coder->subblock.size == 0 && coder->options != NULL + && coder->options->subblock_data_size + != coder->subblock.limit) + return_if_error(subblock_data_size(coder, + allocator, coder->options + ->subblock_data_size)); + + if (coder->subfilter.mode == SUB_NONE) { + assert(coder->subfilter.subcoder.code == NULL); + + // No Subfilter is enabled, just copy the data as is. + coder->subblock.in_pending += lzma_bufcpy( + in, in_pos, in_size, + coder->subblock.data, + &coder->subblock.size, + coder->subblock.limit); + + // If we ran out of input before the whole buffer + // was filled, return to application. + if (coder->subblock.size < coder->subblock.limit + && action == LZMA_RUN) + return LZMA_OK; + + } else { + assert(coder->options->subfilter_mode + != LZMA_SUBFILTER_SET); + + // Using LZMA_FINISH automatically toggles + // LZMA_SUBFILTER_FINISH. + // + // NOTE: It is possible that application had set + // LZMA_SUBFILTER_SET and LZMA_FINISH at the same + // time. In that case it is possible that we will + // cycle to LZMA_SUBFILTER_RUN, LZMA_SUBFILTER_FINISH, + // and back to LZMA_SUBFILTER_NONE in a single + // Subblock encoder function call. + if (action == LZMA_FINISH) { + coder->options->subfilter_mode + = LZMA_SUBFILTER_FINISH; + coder->subfilter.mode = SUB_FINISH; + } + + const size_t in_start = *in_pos; + + const lzma_ret ret = coder->subfilter.subcoder.code( + coder->subfilter.subcoder.coder, + allocator, in, in_pos, in_size, + coder->subblock.data, + &coder->subblock.size, + coder->subblock.limit, + coder->subfilter.mode == SUB_FINISH + ? LZMA_FINISH : action); + + const size_t in_used = *in_pos - in_start; + coder->subblock.in_pending += in_used; + if (in_used > 0) + coder->subfilter.got_input = true; + + coder->subfilter.in_avail = in_size - *in_pos; + + if (ret == LZMA_STREAM_END) { + // All currently available input must have + // been processed. + assert(*in_pos == in_size); + + // Flush now. Even if coder->subblock.size + // happened to be zero, we still need to go + // to SEQ_FLUSH to possibly finish RLE or + // write the Subfilter Unset indicator. + coder->sequence = SEQ_FLUSH; + + if (coder->subfilter.mode == SUB_RUN) { + // Flushing with Subfilter enabled. + assert(action == LZMA_SYNC_FLUSH); + coder->subfilter.mode = SUB_FLUSH; + break; + } + + // Subfilter finished its job. + assert(coder->subfilter.mode == SUB_FINISH + || action == LZMA_FINISH); + + // At least one byte of input must have been + // encoded with the Subfilter. This is + // required by the file format specification. + if (!coder->subfilter.got_input) + return LZMA_PROG_ERROR; + + // We don't strictly need to do this, but + // doing it sounds like a good idea, because + // otherwise the Subfilter's memory could be + // left allocated for long time, and would + // just waste memory. + lzma_next_end(&coder->subfilter.subcoder, + allocator); + + // We need to flush the currently buffered + // data and write Unset Subfilter marker. + // Note that we cannot set + // coder->options->subfilter_mode to + // LZMA_SUBFILTER_NONE yet, because we + // haven't written the Unset Subfilter + // marker yet. + coder->subfilter.mode = SUB_END_MARKER; + coder->sequence = SEQ_FLUSH; + break; + } + + // Return if we couldn't fill the buffer or + // if an error occurred. + if (coder->subblock.size < coder->subblock.limit + || ret != LZMA_OK) + return ret; + } + + coder->sequence = SEQ_FLUSH; + + // SEQ_FILL doesn't produce any output so falling through + // to SEQ_FLUSH is safe. + assert(*out_pos < out_size); + + // Fall through + + case SEQ_FLUSH: + if (coder->options != NULL) { + // Update the alignment variable. + coder->alignment.multiple = coder->options->alignment; + if (coder->alignment.multiple + < LZMA_SUBBLOCK_ALIGNMENT_MIN + || coder->alignment.multiple + > LZMA_SUBBLOCK_ALIGNMENT_MAX) + return LZMA_OPTIONS_ERROR; + + // Run-length encoder + // + // First check if there is some data pending and we + // have an obvious need to flush it immediatelly. + if (coder->rle.count > 0 + && (coder->rle.size + != coder->options->rle + || coder->subblock.size + % coder->rle.size)) { + subblock_rle_flush(coder); + break; + } + + // Grab the (possibly new) RLE chunk size and + // validate it. + coder->rle.size = coder->options->rle; + if (coder->rle.size > LZMA_SUBBLOCK_RLE_MAX) + return LZMA_OPTIONS_ERROR; + + if (coder->subblock.size != 0 + && coder->rle.size + != LZMA_SUBBLOCK_RLE_OFF + && coder->subblock.size + % coder->rle.size == 0) { + + // Initialize coder->rle.buffer if we don't + // have RLE already running. + if (coder->rle.count == 0) + memcpy(coder->rle.buffer, + coder->subblock.data, + coder->rle.size); + + // Test if coder->subblock.data is repeating. + // If coder->rle.count would overflow, we + // force flushing. Forced flushing shouldn't + // really happen in real-world situations. + const size_t count = coder->subblock.size + / coder->rle.size; + if (UINT64_MAX - count > coder->rle.count + && is_repeating( + coder->rle.buffer, + coder->rle.size, + coder->subblock.data, + count)) { + coder->rle.count += count; + coder->rle.in_pending += coder + ->subblock.in_pending; + coder->subblock.in_pending = 0; + coder->subblock.size = 0; + + } else if (coder->rle.count > 0) { + // It's not repeating or at least not + // with the same byte sequence as the + // earlier Subblock Data buffers. We + // have some data pending in the RLE + // buffer already, so do a flush. + // Once flushed, we will check again + // if the Subblock Data happens to + // contain a different repeating + // sequence. + subblock_rle_flush(coder); + break; + } + } + } + + // If we now have some data left in coder->subblock, the RLE + // buffer is empty and we must write a regular Subblock Data. + if (coder->subblock.size > 0) { + assert(coder->rle.count == 0); + coder->tmp = coder->subblock.size - 1; + coder->sequence = SEQ_DATA_SIZE_0; + break; + } + + // Check if we should enable Subfilter. + if (coder->subfilter.mode == SUB_SET) { + if (coder->rle.count > 0) + subblock_rle_flush(coder); + else + coder->sequence = SEQ_SUBFILTER_INIT; + break; + } + + // Check if we have just finished Subfiltering. + if (coder->subfilter.mode == SUB_END_MARKER) { + if (coder->rle.count > 0) { + subblock_rle_flush(coder); + break; + } + + coder->options->subfilter_mode = LZMA_SUBFILTER_NONE; + coder->subfilter.mode = SUB_NONE; + + write_byte(0x50); + if (*out_pos == out_size) + return LZMA_OK; + } + + // Check if we have already written everything. + if (action != LZMA_RUN && *in_pos == in_size + && (coder->subfilter.mode == SUB_NONE + || coder->subfilter.mode == SUB_FLUSH)) { + if (coder->rle.count > 0) { + subblock_rle_flush(coder); + break; + } + + if (action == LZMA_SYNC_FLUSH) { + if (coder->subfilter.mode == SUB_FLUSH) + coder->subfilter.mode = SUB_RUN; + + coder->subfilter.mode_locked = false; + coder->sequence = SEQ_FILL; + + } else { + assert(action == LZMA_FINISH); + + // Write EOPM. + // NOTE: No need to use write_byte() here + // since we are finishing. + out[*out_pos] = 0x10; + ++*out_pos; + } + + return LZMA_STREAM_END; + } + + // Otherwise we have more work to do. + coder->sequence = SEQ_FILL; + break; + + case SEQ_RLE_COUNT_0: + assert(coder->rle.count > 0); + + if (coder->rle.count == 1) { + // The buffer should be repeated only once. Fix + // the alignment and write the first byte of + // Subblock Type `Data'. + if (subblock_align(coder, out, out_pos, out_size, + coder->rle.size, ALIGN_SKEW_DATA)) + return LZMA_OK; + + write_byte(0x20 | (coder->tmp & 0x0F)); + + } else { + // We have something to actually repeat, which should + // mean that it takes less space with run-length + // encoding. + if (subblock_align(coder, out, out_pos, out_size, + coder->rle.size, + ALIGN_SKEW_REPEATING_DATA)) + return LZMA_OK; + + write_byte(0x30 | (coder->tmp & 0x0F)); + } + + // NOTE: If we have to write more than one Repeating Data + // due to rle.count > REPEAT_COUNT_MAX, the subsequent + // Repeating Data Subblocks may get wrong alignment, because + // we add rle.in_pending to alignment.in_pos at once instead + // of adding only as much as this particular Repeating Data + // consumed input data. Correct alignment is always restored + // after all the required Repeating Data Subblocks have been + // written. This problem occurs in such a weird cases that + // it's not worth fixing. + coder->alignment.out_pos += coder->rle.size; + coder->alignment.in_pos += coder->rle.in_pending; + coder->rle.in_pending = 0; + + coder->sequence = SEQ_RLE_COUNT_1; + break; + + case SEQ_RLE_COUNT_1: + write_byte(coder->tmp >> 4); + coder->sequence = SEQ_RLE_COUNT_2; + break; + + case SEQ_RLE_COUNT_2: + write_byte(coder->tmp >> 12); + coder->sequence = SEQ_RLE_COUNT_3; + break; + + case SEQ_RLE_COUNT_3: + write_byte(coder->tmp >> 20); + + // Again, see if we are writing regular Data or Repeating Data. + // In the former case, we skip SEQ_RLE_SIZE. + if (coder->rle.count == 1) + coder->sequence = SEQ_RLE_DATA; + else + coder->sequence = SEQ_RLE_SIZE; + + if (coder->rle.count > REPEAT_COUNT_MAX) + coder->rle.count -= REPEAT_COUNT_MAX; + else + coder->rle.count = 0; + + break; + + case SEQ_RLE_SIZE: + assert(coder->rle.size >= LZMA_SUBBLOCK_RLE_MIN); + assert(coder->rle.size <= LZMA_SUBBLOCK_RLE_MAX); + write_byte(coder->rle.size - 1); + coder->sequence = SEQ_RLE_DATA; + break; + + case SEQ_RLE_DATA: + lzma_bufcpy(coder->rle.buffer, &coder->pos, coder->rle.size, + out, out_pos, out_size); + if (coder->pos < coder->rle.size) + return LZMA_OK; + + coder->pos = 0; + coder->sequence = SEQ_FLUSH; + break; + + case SEQ_DATA_SIZE_0: + // We need four bytes for the Size field. + if (subblock_align(coder, out, out_pos, out_size, + coder->subblock.size, ALIGN_SKEW_DATA)) + return LZMA_OK; + + coder->alignment.out_pos += coder->subblock.size; + coder->alignment.in_pos += coder->subblock.in_pending; + coder->subblock.in_pending = 0; + + write_byte(0x20 | (coder->tmp & 0x0F)); + coder->sequence = SEQ_DATA_SIZE_1; + break; + + case SEQ_DATA_SIZE_1: + write_byte(coder->tmp >> 4); + coder->sequence = SEQ_DATA_SIZE_2; + break; + + case SEQ_DATA_SIZE_2: + write_byte(coder->tmp >> 12); + coder->sequence = SEQ_DATA_SIZE_3; + break; + + case SEQ_DATA_SIZE_3: + write_byte(coder->tmp >> 20); + coder->sequence = SEQ_DATA; + break; + + case SEQ_DATA: + lzma_bufcpy(coder->subblock.data, &coder->pos, + coder->subblock.size, out, out_pos, out_size); + if (coder->pos < coder->subblock.size) + return LZMA_OK; + + coder->subblock.size = 0; + coder->pos = 0; + coder->sequence = SEQ_FLUSH; + break; + + case SEQ_SUBFILTER_INIT: { + assert(coder->subblock.size == 0); + assert(coder->subblock.in_pending == 0); + assert(coder->rle.count == 0); + assert(coder->rle.in_pending == 0); + assert(coder->subfilter.mode == SUB_SET); + assert(coder->options != NULL); + + // There must be a filter specified. + if (coder->options->subfilter_options.id == LZMA_VLI_UNKNOWN) + return LZMA_OPTIONS_ERROR; + + // Initialize a raw encoder to work as a Subfilter. + lzma_filter options[2]; + options[0] = coder->options->subfilter_options; + options[1].id = LZMA_VLI_UNKNOWN; + + return_if_error(lzma_raw_encoder_init( + &coder->subfilter.subcoder, allocator, + options)); + + // Encode the Filter Flags field into a buffer. This should + // never fail since we have already successfully initialized + // the Subfilter itself. Check it still, and return + // LZMA_PROG_ERROR instead of whatever the ret would say. + lzma_ret ret = lzma_filter_flags_size( + &coder->subfilter.flags_size, options); + assert(ret == LZMA_OK); + if (ret != LZMA_OK) + return LZMA_PROG_ERROR; + + coder->subfilter.flags = lzma_alloc( + coder->subfilter.flags_size, allocator); + if (coder->subfilter.flags == NULL) + return LZMA_MEM_ERROR; + + // Now we have a big-enough buffer. Encode the Filter Flags. + // Like above, this should never fail. + size_t dummy = 0; + ret = lzma_filter_flags_encode(options, coder->subfilter.flags, + &dummy, coder->subfilter.flags_size); + assert(ret == LZMA_OK); + assert(dummy == coder->subfilter.flags_size); + if (ret != LZMA_OK || dummy != coder->subfilter.flags_size) + return LZMA_PROG_ERROR; + + // Write a Subblock indicating a new Subfilter. + write_byte(0x40); + + coder->options->subfilter_mode = LZMA_SUBFILTER_RUN; + coder->subfilter.mode = SUB_RUN; + coder->alignment.out_pos += coder->subfilter.flags_size; + coder->sequence = SEQ_SUBFILTER_FLAGS; + + // It is safe to fall through because SEQ_SUBFILTER_FLAGS + // uses lzma_bufcpy() which doesn't write unless there is + // output space. + } + + // Fall through + + case SEQ_SUBFILTER_FLAGS: + // Copy the Filter Flags to the output stream. + lzma_bufcpy(coder->subfilter.flags, &coder->pos, + coder->subfilter.flags_size, + out, out_pos, out_size); + if (coder->pos < coder->subfilter.flags_size) + return LZMA_OK; + + lzma_free(coder->subfilter.flags, allocator); + coder->subfilter.flags = NULL; + + coder->pos = 0; + coder->sequence = SEQ_FILL; + break; + + default: + return LZMA_PROG_ERROR; + } + + return LZMA_OK; +} + + +static lzma_ret +subblock_encode(lzma_coder *coder, lzma_allocator *allocator, + const uint8_t *restrict in, size_t *restrict in_pos, + size_t in_size, uint8_t *restrict out, + size_t *restrict out_pos, size_t out_size, lzma_action action) +{ + if (coder->next.code == NULL) + return subblock_buffer(coder, allocator, in, in_pos, in_size, + out, out_pos, out_size, action); + + while (*out_pos < out_size + && (*in_pos < in_size || action != LZMA_RUN)) { + if (!coder->next_finished + && coder->temp.pos == coder->temp.size) { + coder->temp.pos = 0; + coder->temp.size = 0; + + const lzma_ret ret = coder->next.code(coder->next.coder, + allocator, in, in_pos, in_size, + coder->temp.buffer, &coder->temp.size, + LZMA_BUFFER_SIZE, action); + if (ret == LZMA_STREAM_END) { + assert(action != LZMA_RUN); + coder->next_finished = true; + } else if (coder->temp.size == 0 || ret != LZMA_OK) { + return ret; + } + } + + const lzma_ret ret = subblock_buffer(coder, allocator, + coder->temp.buffer, &coder->temp.pos, + coder->temp.size, out, out_pos, out_size, + coder->next_finished ? LZMA_FINISH : LZMA_RUN); + if (ret == LZMA_STREAM_END) { + assert(action != LZMA_RUN); + assert(coder->next_finished); + return LZMA_STREAM_END; + } + + if (ret != LZMA_OK) + return ret; + } + + return LZMA_OK; +} + + +static void +subblock_encoder_end(lzma_coder *coder, lzma_allocator *allocator) +{ + lzma_next_end(&coder->next, allocator); + lzma_next_end(&coder->subfilter.subcoder, allocator); + lzma_free(coder->subblock.data, allocator); + lzma_free(coder->subfilter.flags, allocator); + lzma_free(coder, allocator); + return; +} + + +extern lzma_ret +lzma_subblock_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, + const lzma_filter_info *filters) +{ + if (next->coder == NULL) { + next->coder = lzma_alloc(sizeof(lzma_coder), allocator); + if (next->coder == NULL) + return LZMA_MEM_ERROR; + + next->code = &subblock_encode; + next->end = &subblock_encoder_end; + + next->coder->next = LZMA_NEXT_CODER_INIT; + next->coder->subblock.data = NULL; + next->coder->subblock.limit = 0; + next->coder->subfilter.subcoder = LZMA_NEXT_CODER_INIT; + } else { + lzma_next_end(&next->coder->subfilter.subcoder, + allocator); + lzma_free(next->coder->subfilter.flags, allocator); + } + + next->coder->subfilter.flags = NULL; + + next->coder->next_finished = false; + next->coder->sequence = SEQ_FILL; + next->coder->options = filters[0].options; + next->coder->pos = 0; + + next->coder->alignment.in_pos = 0; + next->coder->alignment.out_pos = 0; + next->coder->subblock.size = 0; + next->coder->subblock.in_pending = 0; + next->coder->rle.count = 0; + next->coder->rle.in_pending = 0; + next->coder->subfilter.mode = SUB_NONE; + next->coder->subfilter.mode_locked = false; + + next->coder->temp.pos = 0; + next->coder->temp.size = 0; + + // Grab some values from the options structure if it is available. + size_t subblock_size_limit; + if (next->coder->options != NULL) { + if (next->coder->options->alignment + < LZMA_SUBBLOCK_ALIGNMENT_MIN + || next->coder->options->alignment + > LZMA_SUBBLOCK_ALIGNMENT_MAX) { + subblock_encoder_end(next->coder, allocator); + return LZMA_OPTIONS_ERROR; + } + next->coder->alignment.multiple + = next->coder->options->alignment; + next->coder->subfilter.allow + = next->coder->options->allow_subfilters; + subblock_size_limit = next->coder->options->subblock_data_size; + } else { + next->coder->alignment.multiple + = LZMA_SUBBLOCK_ALIGNMENT_DEFAULT; + next->coder->subfilter.allow = false; + subblock_size_limit = LZMA_SUBBLOCK_DATA_SIZE_DEFAULT; + } + + return_if_error(subblock_data_size(next->coder, allocator, + subblock_size_limit)); + + return lzma_next_filter_init( + &next->coder->next, allocator, filters + 1); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.h b/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.h new file mode 100644 index 00000000000..ddbfe64bce8 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.h @@ -0,0 +1,21 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file subblock_encoder.h +/// \brief Encoder of the Subblock filter +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_SUBBLOCK_ENCODER_H +#define LZMA_SUBBLOCK_ENCODER_H + +#include "common.h" + +extern lzma_ret lzma_subblock_encoder_init(lzma_next_coder *next, + lzma_allocator *allocator, const lzma_filter_info *filters); + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/lzmainfo/Makefile.am b/Build/source/extra/xz-4.999.9beta/src/lzmainfo/Makefile.am new file mode 100644 index 00000000000..22295eea339 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/lzmainfo/Makefile.am @@ -0,0 +1,29 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +bin_PROGRAMS = lzmainfo + +lzmainfo_SOURCES = lzmainfo.c + +lzmainfo_CPPFLAGS = \ + -DLOCALEDIR=\"$(localedir)\" \ + -I$(top_srcdir)/src/common \ + -I$(top_srcdir)/src/liblzma/api \ + -I$(top_builddir)/lib \ + $(DYNAMIC_CPPFLAGS) + +lzmainfo_LDFLAGS = $(DYNAMIC_LDFLAGS) +lzmainfo_LDADD = $(top_builddir)/src/liblzma/liblzma.la + +if COND_GNULIB +lzmainfo_LDADD += $(top_builddir)/lib/libgnu.a +endif + +lzmainfo_LDADD += $(LTLIBINTL) + + +dist_man_MANS = lzmainfo.1 diff --git a/Build/source/extra/xz-4.999.9beta/src/lzmainfo/Makefile.in b/Build/source/extra/xz-4.999.9beta/src/lzmainfo/Makefile.in new file mode 100644 index 00000000000..81c698fd86f --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/lzmainfo/Makefile.in @@ -0,0 +1,659 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ +bin_PROGRAMS = lzmainfo$(EXEEXT) +@COND_GNULIB_TRUE@am__append_1 = $(top_builddir)/lib/libgnu.a +subdir = src/lzmainfo +DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ + $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" +PROGRAMS = $(bin_PROGRAMS) +am_lzmainfo_OBJECTS = lzmainfo-lzmainfo.$(OBJEXT) +lzmainfo_OBJECTS = $(am_lzmainfo_OBJECTS) +am__DEPENDENCIES_1 = +lzmainfo_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) +lzmainfo_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(lzmainfo_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(lzmainfo_SOURCES) +DIST_SOURCES = $(lzmainfo_SOURCES) +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' +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(dist_man_MANS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ +DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETOPT_H = @GETOPT_H@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSIX_SHELL = @POSIX_SHELL@ +POSUB = @POSUB@ +PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ +STATIC_LDFLAGS = @STATIC_LDFLAGS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +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@ +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@ +lt_ECHO = @lt_ECHO@ +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@ +xz = @xz@ +lzmainfo_SOURCES = lzmainfo.c +lzmainfo_CPPFLAGS = \ + -DLOCALEDIR=\"$(localedir)\" \ + -I$(top_srcdir)/src/common \ + -I$(top_srcdir)/src/liblzma/api \ + -I$(top_builddir)/lib \ + $(DYNAMIC_CPPFLAGS) + +lzmainfo_LDFLAGS = $(DYNAMIC_LDFLAGS) +lzmainfo_LDADD = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(LTLIBINTL) +dist_man_MANS = lzmainfo.1 +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/lzmainfo/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/lzmainfo/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_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 +lzmainfo$(EXEEXT): $(lzmainfo_OBJECTS) $(lzmainfo_DEPENDENCIES) + @rm -f lzmainfo$(EXEEXT) + $(lzmainfo_LINK) $(lzmainfo_OBJECTS) $(lzmainfo_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lzmainfo-lzmainfo.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +lzmainfo-lzmainfo.o: lzmainfo.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmainfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lzmainfo-lzmainfo.o -MD -MP -MF $(DEPDIR)/lzmainfo-lzmainfo.Tpo -c -o lzmainfo-lzmainfo.o `test -f 'lzmainfo.c' || echo '$(srcdir)/'`lzmainfo.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lzmainfo-lzmainfo.Tpo $(DEPDIR)/lzmainfo-lzmainfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzmainfo.c' object='lzmainfo-lzmainfo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmainfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lzmainfo-lzmainfo.o `test -f 'lzmainfo.c' || echo '$(srcdir)/'`lzmainfo.c + +lzmainfo-lzmainfo.obj: lzmainfo.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmainfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lzmainfo-lzmainfo.obj -MD -MP -MF $(DEPDIR)/lzmainfo-lzmainfo.Tpo -c -o lzmainfo-lzmainfo.obj `if test -f 'lzmainfo.c'; then $(CYGPATH_W) 'lzmainfo.c'; else $(CYGPATH_W) '$(srcdir)/lzmainfo.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lzmainfo-lzmainfo.Tpo $(DEPDIR)/lzmainfo-lzmainfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzmainfo.c' object='lzmainfo-lzmainfo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmainfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lzmainfo-lzmainfo.obj `if test -f 'lzmainfo.c'; then $(CYGPATH_W) 'lzmainfo.c'; else $(CYGPATH_W) '$(srcdir)/lzmainfo.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(dist_man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } + +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) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + 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; }; }'`; \ + 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) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + 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; }; }'`; \ + 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 + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @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 +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(MANS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; 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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -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-binPROGRAMS uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 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-binPROGRAMS uninstall-man \ + uninstall-man1 + + +# 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/Build/source/extra/xz-4.999.9beta/src/lzmainfo/lzmainfo.1 b/Build/source/extra/xz-4.999.9beta/src/lzmainfo/lzmainfo.1 new file mode 100644 index 00000000000..ef736a6c662 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/lzmainfo/lzmainfo.1 @@ -0,0 +1,55 @@ +.\" +.\" Author: Lasse Collin +.\" +.\" This file has been put into the public domain. +.\" You can do whatever you want with this file. +.\" +.TH LZMAINFO 1 "2009-08-13" "Tukaani" "XZ Utils" +.SH NAME +lzmainfo \- show infomation stored in the .lzma file header +.SH SYNOPSIS +.B lzmainfo +.RB [ \-\-help ] +.RB [ \-\-version ] +.RI [ file ]... +.SH DESCRIPTION +.B lzmainfo +shows information stored in the +.B .lzma +file header. It reads the first 13 bytes from the specified +.IR file , +decodes the header, and prints it to standard output in human +readable format. If no +.I files +are given or +.I file +is +.BR \- , +standard input is read. +.PP +Usually the most interesting information is the uncompressed size and +the dictionary size. Uncompressed size can be shown only if the file is +in the non-streamed +.B .lzma +format variant. The amount of memory required to decompress the file is +a few dozen kilobytes plus the dictionary size. +.PP +.B lzmainfo +is included in XZ Utils primarily for backward compatibility with LZMA Utils. +.SH EXIT STATUS +.TP +.B 0 +All is good. +.TP +.B 1 +An error occurred. +.SH BUGS +.B lzmainfo +uses +.B MB +while the correct suffix would be +.B MiB +(2^20 bytes). +This is to keep the output compatible with LZMA Utils. +.SH SEE ALSO +.BR xz (1) diff --git a/Build/source/extra/xz-4.999.9beta/src/lzmainfo/lzmainfo.c b/Build/source/extra/xz-4.999.9beta/src/lzmainfo/lzmainfo.c new file mode 100644 index 00000000000..d9ae311afec --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/lzmainfo/lzmainfo.c @@ -0,0 +1,242 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file lzmainfo.c +/// \brief lzmainfo tool for compatibility with LZMA Utils +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "sysdefs.h" +#include +#include + +#ifdef ENABLE_NLS +# include +# define _(msgid) gettext(msgid) +#else +# define _(msgid) msgid +#endif + +#include "lzma.h" +#include "getopt.h" + + +/// Name of the program from argv[0] +static const char *argv0; + + +/// Close stdout unless we are already going to exit with EXIT_FAILURE. +/// If closing stdout fails, set exit status to EXIT_FAILURE and print +/// an error message to stderr. We don't care about closing stderr, +/// because we don't print anything to stderr unless we are going to +/// use EXIT_FAILURE anyway. +static void lzma_attribute((noreturn)) +my_exit(int status) +{ + if (status != EXIT_FAILURE) { + const int ferror_err = ferror(stdout); + const int fclose_err = fclose(stdout); + + if (ferror_err || fclose_err) { + // If it was fclose() that failed, we have the reason + // in errno. If only ferror() indicated an error, + // we have no idea what the reason was. + fprintf(stderr, "%s: %s: %s\n", argv0, + _("Writing to standard output " + "failed"), + fclose_err ? strerror(errno) + : _("Unknown error")); + status = EXIT_FAILURE; + } + } + + exit(status); +} + + +static void lzma_attribute((noreturn)) +help(void) +{ + printf( +_("Usage: %s [--help] [--version] [FILE]...\n" +"Show information stored in the .lzma file header"), argv0); + + printf(_( +"\nWith no FILE, or when FILE is -, read standard input.\n")); + printf("\n"); + + printf(_("Report bugs to <%s> (in English or Finnish).\n"), + PACKAGE_BUGREPORT); + printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_HOMEPAGE); + + my_exit(EXIT_SUCCESS); +} + + +static void lzma_attribute((noreturn)) +version(void) +{ + puts("lzmainfo (" PACKAGE_NAME ") " PACKAGE_VERSION); + my_exit(EXIT_SUCCESS); +} + + +/// Parse command line options. +static void +parse_args(int argc, char **argv) +{ + enum { + OPT_HELP, + OPT_VERSION, + }; + + static const struct option long_opts[] = { + { "help", no_argument, NULL, OPT_HELP }, + { "version", no_argument, NULL, OPT_VERSION }, + { NULL, 0, NULL, 0 } + }; + + int c; + while ((c = getopt_long(argc, argv, "", long_opts, NULL)) != -1) { + switch (c) { + case OPT_HELP: + help(); + + case OPT_VERSION: + version(); + + default: + exit(EXIT_FAILURE); + } + } + + return; +} + + +/// Primitive base-2 logarithm for integers +static uint32_t +my_log2(uint32_t n) +{ + uint32_t e; + for (e = 0; n > 1; ++e, n /= 2) ; + return e; +} + + +/// Parse the .lzma header and display information about it. +static bool +lzmainfo(const char *name, FILE *f) +{ + uint8_t buf[13]; + const size_t size = fread(buf, 1, sizeof(buf), f); + if (size != 13) { + fprintf(stderr, "%s: %s: %s\n", argv0, name, + ferror(f) ? strerror(errno) + : _("File is too small to be a .lzma file")); + return true; + } + + lzma_filter filter = { .id = LZMA_FILTER_LZMA1 }; + + // Parse the first five bytes. + switch (lzma_properties_decode(&filter, NULL, buf, 5)) { + case LZMA_OK: + break; + + case LZMA_OPTIONS_ERROR: + fprintf(stderr, "%s: %s: %s\n", argv0, name, + _("Not a .lzma file")); + return true; + + case LZMA_MEM_ERROR: + fprintf(stderr, "%s: %s\n", argv0, strerror(ENOMEM)); + exit(EXIT_FAILURE); + + default: + fprintf(stderr, "%s: %s\n", argv0, _("Internal error (bug)")); + exit(EXIT_FAILURE); + } + + // Uncompressed size + uint64_t uncompressed_size = 0; + for (size_t i = 0; i < 8; ++i) + uncompressed_size |= (uint64_t)(buf[5 + i]) << (i * 8); + + // Display the results. We don't want to translate these and also + // will use MB instead of MiB, because someone could be parsing + // this output and we don't want to break that when people move + // from LZMA Utils to XZ Utils. + if (f != stdin) + printf("%s\n", name); + + printf("Uncompressed size: "); + if (uncompressed_size == UINT64_MAX) + printf("Unknown"); + else + printf("%" PRIu64 " MB (%" PRIu64 " bytes)", + (uncompressed_size + 512 * 1024) + / (1024 * 1024), + uncompressed_size); + + lzma_options_lzma *opt = filter.options; + + printf("\nDictionary size: " + "%u MB (2^%u bytes)\n" + "Literal context bits (lc): %" PRIu32 "\n" + "Literal pos bits (lp): %" PRIu32 "\n" + "Number of pos bits (pb): %" PRIu32 "\n", + (opt->dict_size + 512 * 1024) / (1024 * 1024), + my_log2(opt->dict_size), opt->lc, opt->lp, opt->pb); + + free(opt); + + return false; +} + + +extern int +main(int argc, char **argv) +{ + int ret = EXIT_SUCCESS; + argv0 = argv[0]; + + parse_args(argc, argv); + + // We print empty lines around the output only when reading from + // files specified on the command line. This is due to how + // LZMA Utils did it. + if (optind == argc) { + lzmainfo("(stdin)", stdin); + } else { + printf("\n"); + + do { + if (strcmp(argv[optind], "-") == 0) { + if (lzmainfo("(stdin)", stdin)) + ret = EXIT_FAILURE; + } else { + FILE *f = fopen(argv[optind], "r"); + if (f == NULL) { + ret = EXIT_FAILURE; + fprintf(stderr, "%s: %s: %s\n", + argv0, argv[optind], + strerror(errno)); + continue; + } + + if (lzmainfo(argv[optind], f)) + ret = EXIT_FAILURE; + + printf("\n"); + fclose(f); + } + } while (++optind < argc); + } + + my_exit(ret); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/scripts/Makefile.am b/Build/source/extra/xz-4.999.9beta/src/scripts/Makefile.am new file mode 100644 index 00000000000..86f273884f6 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/scripts/Makefile.am @@ -0,0 +1,65 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +nodist_bin_SCRIPTS = xzdiff xzgrep xzmore xzless +dist_man_MANS = xzdiff.1 xzgrep.1 xzmore.1 xzless.1 + +install-exec-hook: + cd $(DESTDIR)$(bindir) && \ + target=`echo xzdiff | sed '$(transform)'` && \ + for name in xzcmp lzdiff lzcmp; do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link && \ + $(LN_S) $$target $$link; \ + done && \ + target=`echo xzgrep | sed '$(transform)'` && \ + for name in xzegrep xzfgrep lzgrep lzegrep lzfgrep; do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link && \ + $(LN_S) $$target $$link; \ + done && \ + for name in xzmore xzless; do \ + target=`echo $$name | sed '$(transform)'` && \ + link=`echo $$name | sed 's/xz/lz/;$(transform)'` && \ + rm -f $$link && \ + $(LN_S) $$target $$link; \ + done + +install-data-hook: + cd $(DESTDIR)$(mandir)/man1 && \ + target=`echo xzdiff | sed '$(transform)'` && \ + for name in xzcmp lzdiff lzcmp; do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link.1 && \ + $(LN_S) $$target.1 $$link.1; \ + done && \ + target=`echo xzgrep | sed '$(transform)'` && \ + for name in xzegrep xzfgrep lzgrep lzegrep lzfgrep; do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link.1 && \ + $(LN_S) $$target.1 $$link.1; \ + done && \ + for name in xzmore xzless; do \ + target=`echo $$name | sed '$(transform)'` && \ + link=`echo $$name | sed 's/xz/lz/;$(transform)'` && \ + rm -f $$link.1 && \ + $(LN_S) $$target.1 $$link.1; \ + done + +uninstall-hook: + cd $(DESTDIR)$(bindir) && \ + for name in xzcmp lzdiff lzcmp xzegrep xzfgrep \ + lzgrep lzegrep lzfgrep lzmore lzless; do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link; \ + done + cd $(DESTDIR)$(mandir)/man1 && \ + for name in xzcmp lzdiff lzcmp xzegrep xzfgrep \ + lzgrep lzegrep lzfgrep lzmore lzless; do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link.1; \ + done diff --git a/Build/source/extra/xz-4.999.9beta/src/scripts/Makefile.in b/Build/source/extra/xz-4.999.9beta/src/scripts/Makefile.in new file mode 100644 index 00000000000..66e23b3846a --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/scripts/Makefile.in @@ -0,0 +1,586 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ +subdir = src/scripts +DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/xzdiff.in $(srcdir)/xzgrep.in \ + $(srcdir)/xzless.in $(srcdir)/xzmore.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ + $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = xzdiff xzgrep xzmore xzless +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__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" +SCRIPTS = $(nodist_bin_SCRIPTS) +SOURCES = +DIST_SOURCES = +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(dist_man_MANS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ +DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETOPT_H = @GETOPT_H@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSIX_SHELL = @POSIX_SHELL@ +POSUB = @POSUB@ +PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ +STATIC_LDFLAGS = @STATIC_LDFLAGS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +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@ +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@ +lt_ECHO = @lt_ECHO@ +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@ +xz = @xz@ +nodist_bin_SCRIPTS = xzdiff xzgrep xzmore xzless +dist_man_MANS = xzdiff.1 xzgrep.1 xzmore.1 xzless.1 +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/scripts/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/scripts/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +xzdiff: $(top_builddir)/config.status $(srcdir)/xzdiff.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +xzgrep: $(top_builddir)/config.status $(srcdir)/xzgrep.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +xzmore: $(top_builddir)/config.status $(srcdir)/xzmore.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +xzless: $(top_builddir)/config.status $(srcdir)/xzless.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-nodist_binSCRIPTS: $(nodist_bin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(nodist_bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-nodist_binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(nodist_bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(dist_man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @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 +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) $(MANS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; 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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-nodist_binSCRIPTS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-exec-hook +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +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 Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man uninstall-nodist_binSCRIPTS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +uninstall-man: uninstall-man1 + +.MAKE: install-am install-data-am install-exec-am install-strip \ + uninstall-am + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-data-hook install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-hook \ + install-html install-html-am install-info install-info-am \ + install-man install-man1 install-nodist_binSCRIPTS install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-hook uninstall-man uninstall-man1 \ + uninstall-nodist_binSCRIPTS + + +install-exec-hook: + cd $(DESTDIR)$(bindir) && \ + target=`echo xzdiff | sed '$(transform)'` && \ + for name in xzcmp lzdiff lzcmp; do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link && \ + $(LN_S) $$target $$link; \ + done && \ + target=`echo xzgrep | sed '$(transform)'` && \ + for name in xzegrep xzfgrep lzgrep lzegrep lzfgrep; do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link && \ + $(LN_S) $$target $$link; \ + done && \ + for name in xzmore xzless; do \ + target=`echo $$name | sed '$(transform)'` && \ + link=`echo $$name | sed 's/xz/lz/;$(transform)'` && \ + rm -f $$link && \ + $(LN_S) $$target $$link; \ + done + +install-data-hook: + cd $(DESTDIR)$(mandir)/man1 && \ + target=`echo xzdiff | sed '$(transform)'` && \ + for name in xzcmp lzdiff lzcmp; do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link.1 && \ + $(LN_S) $$target.1 $$link.1; \ + done && \ + target=`echo xzgrep | sed '$(transform)'` && \ + for name in xzegrep xzfgrep lzgrep lzegrep lzfgrep; do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link.1 && \ + $(LN_S) $$target.1 $$link.1; \ + done && \ + for name in xzmore xzless; do \ + target=`echo $$name | sed '$(transform)'` && \ + link=`echo $$name | sed 's/xz/lz/;$(transform)'` && \ + rm -f $$link.1 && \ + $(LN_S) $$target.1 $$link.1; \ + done + +uninstall-hook: + cd $(DESTDIR)$(bindir) && \ + for name in xzcmp lzdiff lzcmp xzegrep xzfgrep \ + lzgrep lzegrep lzfgrep lzmore lzless; do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link; \ + done + cd $(DESTDIR)$(mandir)/man1 && \ + for name in xzcmp lzdiff lzcmp xzegrep xzfgrep \ + lzgrep lzegrep lzfgrep lzmore lzless; do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link.1; \ + done + +# 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/Build/source/extra/xz-4.999.9beta/src/scripts/xzdiff.1 b/Build/source/extra/xz-4.999.9beta/src/scripts/xzdiff.1 new file mode 100644 index 00000000000..252d1cd303d --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/scripts/xzdiff.1 @@ -0,0 +1,74 @@ +.\" +.\" Original zdiff.1 for gzip: Jean-loup Gailly +.\" +.\" Modifications for XZ Utils: Lasse Collin +.\" Andrew Dudman +.\" +.\" License: GNU GPLv2+ +.\" +.TH XZDIFF 1 "2009-07-05" "Tukaani" "XZ Utils" +.SH NAME +xzcmp, xzdiff, lzcmp, lzdiff \- compare compressed files +.SH SYNOPSIS +.B xzcmp +.RI [ cmp_options "] " file1 " [" file2 ] +.br +.B xzdiff +.RI [ diff_options "] " file1 " [" file2 ] +.br +.B lzcmp +.RI [ cmp_options "] " file1 " [" file2 ] +.br +.B lzdiff +.RI [ diff_options "] " file1 " [" file2 ] +.SH DESCRIPTION +.B xzcmp +and +.B xdiff +invoke +.BR cmp (1) +or +.BR diff (1) +on files compressed with +.BR xz (1), +.BR lzma (1), +.BR gzip (1), +or +.BR bzip2 (1). +All options specified are passed directly to +.B cmp +or +.BR diff . +If only one file is specified, then the files compared are +.I file1 +(which must have a suffix of a supported compression format) and +.I file1 +from which the compression format suffix has been stripped. +If two files are specified, then they are uncompressed if necessary and fed to +.BR cmp (1) +or +.BR diff (1). +The exit status from +.B cmp +or +.B diff +is preserved. +.PP +The names +.B lzcmp +and +.B lzdiff +are provided for backward compatibility with LZMA Utils. +.SH "SEE ALSO" +.BR cmp (1), +.BR diff (1), +.BR xz (1), +.BR gzip (1), +.BR bzip2 (1), +.BR zdiff (1) +.SH BUGS +Messages from the +.BR cmp (1) +or +.BR diff (1) +programs refer to temporary filenames instead of those specified. diff --git a/Build/source/extra/xz-4.999.9beta/src/scripts/xzdiff.in b/Build/source/extra/xz-4.999.9beta/src/scripts/xzdiff.in new file mode 100644 index 00000000000..2d6e5da4760 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/scripts/xzdiff.in @@ -0,0 +1,172 @@ +#!@POSIX_SHELL@ + +# Copyright (C) 1998, 2002, 2006, 2007 Free Software Foundation +# Copyright (C) 1993 Jean-loup Gailly + +# Modified for XZ Utils by Andrew Dudman and Lasse Collin. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +#SET_PATH - This line is a placeholder to ease patching this script. + +# Instead of unsetting XZ_OPT, just make sure that xz will use file format +# autodetection. This way memory usage limit and thread limit can be +# specified via XZ_OPT. With gzip and bzip2 it's OK to just unset the +# environment variables. +xz='@xz@ --format=auto' +unset GZIP BZIP BZIP2 + +case ${0##*/} in + *cmp*) prog=xzcmp; cmp=${CMP:-cmp};; + *) prog=xzdiff; cmp=${DIFF:-diff};; +esac + +version="$prog (@PACKAGE_NAME@) @VERSION@" + +usage="Usage: ${0##*/} [OPTION]... FILE1 [FILE2] +Compare FILE1 to FILE2, using their uncompressed contents if they are +compressed. If FILE2 is omitted, then the files compared are FILE1 and +FILE1 from which the compression format suffix has been stripped. + +Do comparisons like '$cmp' does. OPTIONs are the same as for '$cmp'. + +Report bugs to <@PACKAGE_BUGREPORT@>." + +# sed script to escape all ' for the shell, and then (to handle trailing +# newlines correctly) turn trailing X on last line into '. +escape=' + s/'\''/'\''\\'\'''\''/g + $s/X$/'\''/ +' + +while :; do + case $1 in + --h*) printf '%s\n' "$usage" || exit 2; exit;; + --v*) echo "$version" || exit 2; exit;; + --) shift; break;; + -*\'*) cmp="$cmp '"`printf '%sX\n' "$1" | sed "$escape"`;; + -?*) cmp="$cmp '$1'";; + *) break;; + esac + shift +done +cmp="$cmp --" + +for file; do + test "X$file" = X- || <"$file" || exit 2 +done + +xz1=$xz +xz2=$xz +xz_status=0 +exec 3>&1 + +if test $# -eq 1; then + case $1 in + *[-.]xz | *[-.]lzma | *.t[lx]z) + ;; + *[-.]bz2 | *.tbz | *.tbz2) + xz1=$bzip2;; + *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) + xz1=$gzip;; + *) + echo >&2 "$0: $1: Unknown compressed file name suffix" + exit 2;; + esac + case $1 in + *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma) + FILE=`expr "X$1" : 'X\(.*\)[-.][abglmxzZ2]*$'`;; + *.t[abglx]z) + FILE=`expr "X$1" : 'X\(.*[-.]t\)[abglx]z$'`ar;; + *.tbz2) + FILE=`expr "X$1" : 'X\(.*[-.]t\)bz2$'`ar;; + esac + xz_status=$( + exec 4>&1 + ($xz1 -cd -- "$1" 4>&-; echo $? >&4) 3>&- | eval "$cmp" - '"$FILE"' >&3 + ) +elif test $# -eq 2; then + case $1 in + *[-.]bz2 | *.tbz | *.tbz2) xz1=$bzip2;; + *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) xz1=$gzip;; + esac + case $2 in + *[-.]bz2 | *.tbz | *.tbz2) xz2=$bzip2;; + *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) xz2=$gzip;; + esac + case $1 in + *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | -) + case "$2" in + *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | -) + if test "$1$2" = --; then + xz_status=$( + exec 4>&1 + ($xz1 -cdfq - 4>&-; echo $? >&4) 3>&- | + eval "$cmp" - - >&3 + ) + elif # Reject Solaris 8's buggy /bin/bash 2.03. + echo X | (echo X | eval "$cmp" /dev/fd/5 - >/dev/null 2>&1) 5<&0; then + xz_status=$( + exec 4>&1 + ($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- | + ( ($xz2 -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- 5<&- &3) 5<&0 + ) + case $xz_status in + *[1-9]*) xz_status=1;; + *) xz_status=0;; + esac + else + F=`expr "/$2" : '.*/\(.*\)[-.][ablmtxz2]*$'` || F=$prog + tmp= + trap ' + test -n "$tmp" && rm -f "$tmp" + (exit 2); exit 2 + ' HUP INT PIPE TERM 0 + tmp=`mktemp -t -- "$F.XXXXXX"` || exit 2 + $xz2 -cdfq -- "$2" > "$tmp" || exit 2 + xz_status=$( + exec 4>&1 + ($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- | + eval "$cmp" - '"$tmp"' >&3 + ) + cmp_status=$? + rm -f "$tmp" || xz_status=$? + trap - HUP INT PIPE TERM 0 + (exit $cmp_status) + fi;; + *) + xz_status=$( + exec 4>&1 + ($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- | + eval "$cmp" - '"$2"' >&3 + );; + esac;; + *) + case "$2" in + *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | -) + xz_status=$( + exec 4>&1 + ($xz2 -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- | + eval "$cmp" '"$1"' - >&3 + );; + *) + eval "$cmp" '"$1"' '"$2"';; + esac;; + esac +else + echo >&2 "$0: Invalid number of operands; try \`${0##*/} --help' for help" + exit 2 +fi + +cmp_status=$? +test "$xz_status" -eq 0 || exit 2 +exit $cmp_status diff --git a/Build/source/extra/xz-4.999.9beta/src/scripts/xzgrep.1 b/Build/source/extra/xz-4.999.9beta/src/scripts/xzgrep.1 new file mode 100644 index 00000000000..996d64aee8b --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/scripts/xzgrep.1 @@ -0,0 +1,94 @@ +.\" +.\" Original zgrep.1 for gzip: Jean-loup Gailly +.\" Charles Levert +.\" +.\" Modifications for XZ Utils: Lasse Collin +.\" +.\" License: GNU GPLv2+ +.\" +.TH XZGREP 1 "2009-07-05" "Tukaani" "XZ Utils" +.SH NAME +xzgrep \- search compressed files for a regular expression +.SH SYNOPSIS +.B xzgrep +.RI [ grep_options ] +.RB [ \-e ] +.I pattern +.IR file ".\|.\|." +.br +.B xzegrep +.RB ... +.br +.B xzfgrep +.RB ... +.br +.B lzgrep +.RB ... +.br +.B lzegrep +.RB ... +.br +.B lzfgrep +.RB ... +.SH DESCRIPTION +.B xzgrep +invokes +.BR grep (1) +on +.I files +which may be either uncompressed or compressed with +.BR xz (1), +.BR lzma (1), +.BR gzip (1), +or +.BR bzip2 (1). +All options specified are passed directly to +.BR grep (1). +.PP +If no +.I file +is specified, then the standard input is decompressed if necessary and fed to +.BR grep (1). +When reading from standard input, +.BR gzip (1) +and +.BR bzip2 (1) +compressed files are not supported. +.PP +If +.B xzgrep +is invoked as +.B xzegrep +or +.B xzfgrep +then +.BR egrep (1) +or +.BR fgrep (1) +is used instead of +.BR grep (1). +The same applies to names +.BR lzgrep , +.BR lzegrep , +and +.BR lzfgrep , +which are provided for backward compatibility with LZMA Utils. +.PP +.SH ENVIRONMENT +.TP +.B GREP +If the +.B GREP +environment variable is set, +.B xzgrep +uses it instead of +.BR grep (1), +.BR egrep (1), +or +.BR fgrep (1). +.SH "SEE ALSO" +.BR grep (1), +.BR xz (1), +.BR gzip (1), +.BR bzip2 (1), +.BR zgrep (1) diff --git a/Build/source/extra/xz-4.999.9beta/src/scripts/xzgrep.in b/Build/source/extra/xz-4.999.9beta/src/scripts/xzgrep.in new file mode 100644 index 00000000000..9a9b393fcec --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/scripts/xzgrep.in @@ -0,0 +1,196 @@ +#!@POSIX_SHELL@ + +# xzgrep -- a wrapper around a grep program that decompresses files as needed +# Adapted from a version sent by Charles Levert + +# Copyright (C) 1998, 2001, 2002, 2006, 2007 Free Software Foundation +# Copyright (C) 1993 Jean-loup Gailly + +# Modified for XZ Utils by Andrew Dudman and Lasse Collin. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +#SET_PATH - This line is a placeholder to ease patching this script. + +# Instead of unsetting XZ_OPT, just make sure that xz will use file format +# autodetection. This way memory usage limit and thread limit can be +# specified via XZ_OPT. With gzip and bzip2 it's OK to just unset the +# environment variables. +xz='@xz@ --format=auto' +unset GZIP BZIP BZIP2 + +case ${0##/*} in + *egrep*) prog=xzegrep; grep=${GREP:-egrep};; + *fgrep*) prog=xzfgrep; grep=${GREP:-fgrep};; + *) prog=xzgrep; grep=${GREP:-grep};; +esac + +version="$prog (@PACKAGE_NAME@) @VERSION@" + +usage="Usage: ${0##/*} [OPTION]... [-e] PATTERN [FILE]... +Look for instances of PATTERN in the input FILEs, using their +uncompressed contents if they are compressed. + +OPTIONs are the same as for '$grep'. + +Report bugs to <@PACKAGE_BUGREPORT@>." + +# sed script to escape all ' for the shell, and then (to handle trailing +# newlines correctly) turn trailing X on last line into '. +escape=' + s/'\''/'\''\\'\'''\''/g + $s/X$/'\''/ +' +operands= +have_pat=0 +files_with_matches=0 +files_without_matches=0 +no_filename=0 +with_filename=0 + +while test $# -ne 0; do + option=$1 + shift + optarg= + + case $option in + (-[0123456789abcdhHiIKLlnoqrRsTuUvVwxyzZ]?*) + arg2=-\'$(expr "X${option}X" : 'X-.[0-9]*\(.*\)' | sed "$escape") + eval "set -- $arg2 "'${1+"$@"}' + option=$(expr "X$option" : 'X\(-.[0-9]*\)');; + (--binary-*=* | --[lm]a*=* | --reg*=*) + ;; + (-[ABCDefm] | --binary-* | --file | --[lm]a* | --reg*) + case ${1?"$option option requires an argument"} in + (*\'*) + optarg=" '"$(printf '%sX\n' "$1" | sed "$escape");; + (*) + optarg=" '$1'";; + esac + shift;; + (--) + break;; + (-?*) + ;; + (*) + case $option in + (*\'*) + operands="$operands '"$(printf '%sX\n' "$option" | sed "$escape");; + (*) + operands="$operands '$option'";; + esac + ${POSIXLY_CORRECT+break} + continue;; + esac + + case $option in + (-[drRzZ] | --di* | --exc* | --inc* | --rec* | --nu*) + printf >&2 '%s: %s: Option not supported\n' "$0" "$option" + exit 2;; + (-[ef]* | --file | --file=* | --reg*) + have_pat=1;; + (--h | --he | --hel | --help) + echo "$usage" || exit 2 + exit;; + (-H | --wi | --wit | --with | --with- | --with-f | --with-fi \ + | --with-fil | --with-file | --with-filen | --with-filena | --with-filenam \ + | --with-filename) + with_filename=1 + continue;; + (-l | --files-with-*) + files_with_matches=1;; + (-L | --files-witho*) + files_without_matches=1;; + (--no-f*) + no_filename=1;; + (-V | --v | --ve | --ver | --vers | --versi | --versio | --version) + echo "$version" || exit 2 + exit;; + esac + + case $option in + (*\'?*) + option=\'$(expr "X${option}X" : 'X\(.*\)' | sed "$escape");; + (*) + option="'$option'";; + esac + + grep="$grep $option$optarg" +done + +eval "set -- $operands "'${1+"$@"}' + +if test $have_pat -eq 0; then + case ${1?"Missing pattern; try \`${0##*/} --help' for help"} in + (*\'*) + grep="$grep -- '"$(printf '%sX\n' "$1" | sed "$escape");; + (*) + grep="$grep -- '$1'";; + esac + shift +fi + +if test $# -eq 0; then + set -- - +fi + +exec 3>&1 +res=0 + +for i; do + case $i in + *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) uncompress="gzip -cdfq";; + *[-.]bz2 | *[-.]tbz | *.tbz2) uncompress="bzip2 -cdfq";; + *) uncompress="$xz -cdfq";; + esac + # Fail if xz or grep (or sed) fails. + xz_status=$( + exec 5>&1 + (eval "$uncompress" -- "$i" 5>&-; echo $? >&5) 3>&- | + if test $files_with_matches -eq 1; then + eval "$grep" -q && { printf '%s\n' "$i" || exit 2; } + elif test $files_without_matches -eq 1; then + eval "$grep" -q || { + r=$? + if test $r -eq 1; then + printf '%s\n' "$i" || r=2 + fi + exit $r + } + elif test $with_filename -eq 0 && + { test $# -eq 1 || test $no_filename -eq 1; }; then + eval "$grep" + else + case $i in + (*' +'* | *'&'* | *'\'* | *'|'*) + i=$(printf '%s\n' "$i" | + sed ' + $!N + $s/[&\|]/\\&/g + $s/\n/\\n/g + ');; + esac + sed_script="s|^|$i:|" + + # Fail if grep or sed fails. + r=$( + exec 4>&1 + (eval "$grep" 4>&-; echo $? >&4) 3>&- | sed "$sed_script" >&3 4>&- + ) || r=2 + exit $r + fi >&3 5>&- + ) + r=$? + test "$xz_status" -eq 0 || test "$xz_status" -eq 2 || r=2 + test $res -lt $r && res=$r +done +exit $res diff --git a/Build/source/extra/xz-4.999.9beta/src/scripts/xzless.1 b/Build/source/extra/xz-4.999.9beta/src/scripts/xzless.1 new file mode 100644 index 00000000000..4fe4bcba970 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/scripts/xzless.1 @@ -0,0 +1,66 @@ +.\" +.\" Authors: Andrew Dudman +.\" Lasse Collin +.\" +.\" This file has been put into the public domain. +.\" You can do whatever you want with this file. +.\" +.\" (Note that this file is not based on gzip's zless.1.) +.\" +.TH XZLESS 1 "2009-07-05" "Tukaani" "XZ Utils" +.SH NAME +xzless, lzless \- view xz or lzma compressed (text) files +.SH SYNOPSIS +.B xzless +.RI [ file ...] +.br +.B lzless +.RI [ file ...] +.SH DESCRIPTION +.B xzless +is a filter that displays pagefulls of uncompressed text from compressed +file(s) to a terminal. It works on files compressed with +.BR xz (1) +or +.BR lzma (1). +If no +.I files +are given, +.B xzless +reads from standard input. +.PP +.B xzless +uses +.BR less (1) +as its only pager. Unlike +.BR xzmore , +the choice of pagers is not alterable by an environment variable. +Commands are based on both +.BR more (1) +and +.BR vi (1), +and allow back and forth movement and searching. +See the +.BR less (1) +manual for more information. +.PP +The command named +.B lzless +is provided for backward compatibility with LZMA Utils. +.SH ENVIRONMENT +.TP +.B LESSMETACHARS +A list of characters special to the shell. Set by +.B xzless +unless it is already set in the environment. +.TP +.B LESSOPEN +Set to a command line to invoke the +.BR xz (1) +decompressor for preprocessing the input files to +.BR less (1). +.SH "SEE ALSO" +.BR less (1), +.BR xz (1), +.BR xzmore (1), +.BR zless (1) diff --git a/Build/source/extra/xz-4.999.9beta/src/scripts/xzless.in b/Build/source/extra/xz-4.999.9beta/src/scripts/xzless.in new file mode 100644 index 00000000000..a3da697c590 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/scripts/xzless.in @@ -0,0 +1,58 @@ +#!@POSIX_SHELL@ + +# Copyright (C) 1998, 2002, 2006, 2007 Free Software Foundation + +# The original version for gzip was written by Paul Eggert. +# Modified for XZ Utils by Andrew Dudman and Lasse Collin. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +#SET_PATH - This line is a placeholder to ease patching this script. + +# Instead of unsetting XZ_OPT, just make sure that xz will use file format +# autodetection. This way memory usage limit and thread limit can be +# specified via XZ_OPT. +xz='@xz@ --format=auto' + +version='xzless (@PACKAGE_NAME@) @VERSION@' + +usage="Usage: ${0##*/} [OPTION]... [FILE]... +Like 'less', but operate on the uncompressed contents of xz compressed FILEs. + +Options are the same as for 'less'. + +Report bugs to <@PACKAGE_BUGREPORT@>." + +case $1 in + --help) echo "$usage" || exit 2; exit;; + --version) echo "$version" || exit 2; exit;; +esac + +if test "${LESSMETACHARS+set}" != set; then + # Work around a bug in less 394 and earlier; + # it mishandles the metacharacters '$%=~'. + space=' ' + tab=' ' + nl=' +' + LESSMETACHARS="$space$tab$nl'"';*?"()<>[|&^`#\$%=~' +fi + +if test "$(less -V | { read ver && echo ${ver#less }; })" -ge 429; then + # less 429 or later: LESSOPEN pipe will be used on + # standard input if $LESSOPEN begins with |-. + LESSOPEN="|-$xz -cdfq -- %s" +else + LESSOPEN="|$xz -cdfq -- %s" +fi +export LESSMETACHARS LESSOPEN + +exec less "$@" diff --git a/Build/source/extra/xz-4.999.9beta/src/scripts/xzmore.1 b/Build/source/extra/xz-4.999.9beta/src/scripts/xzmore.1 new file mode 100644 index 00000000000..a94e83263cf --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/scripts/xzmore.1 @@ -0,0 +1,54 @@ +.\" +.\" Original zdiff.1 for gzip: Jean-loup Gailly +.\" Modifications for XZ Utils: Lasse Collin +.\" +.\" License: GNU GPLv2+ +.\" +.TH XZMORE 1 "2009-07-05" "Tukaani" "XZ Utils" +.SH NAME +xzmore, lzmore \- view xz or lzma compressed (text) files +.SH SYNOPSIS +.B xzmore +.RI [ "filename ..." ] +.br +.B lzmore +.RI [ "filename ..." ] +.SH DESCRIPTION +.B xzmore +is a filter which allows examination of +.BR xz (1) +or +.BR lzma (1) +compressed text files one screenful at a time on a soft-copy terminal. +.PP +To use a pager other than the default +.B more, +set environment variable +.B PAGER +to the name of the desired program. +The name +.B lzmore +is provided for backward compatibility with LZMA Utils. +.TP +.BR e " or " q +When the prompt --More--(Next file: +.IR file ) +is printed, this command causes +.B xzmore +to exit. +.TP +.B s +When the prompt --More--(Next file: +.IR file ) +is printed, this command causes +.B xzmore +to skip the next file and continue. +.PP +For list of keyboard commands supported while actually viewing the +content of a file, refer to manual of the pager you use, usually +.BR more (1). +.SH "SEE ALSO" +.BR more (1), +.BR xz (1), +.BR xzless (1), +.BR zmore (1) diff --git a/Build/source/extra/xz-4.999.9beta/src/scripts/xzmore.in b/Build/source/extra/xz-4.999.9beta/src/scripts/xzmore.in new file mode 100644 index 00000000000..940d6614460 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/scripts/xzmore.in @@ -0,0 +1,78 @@ +#!@POSIX_SHELL@ + +# Copyright (C) 2001, 2002, 2007 Free Software Foundation +# Copyright (C) 1992, 1993 Jean-loup Gailly + +# Modified for XZ Utils by Andrew Dudman and Lasse Collin. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +#SET_PATH - This line is a placeholder to ease patching this script. + +# Instead of unsetting XZ_OPT, just make sure that xz will use file format +# autodetection. This way memory usage limit and thread limit can be +# specified via XZ_OPT. +xz='@xz@ --format=auto' + +version='xzmore (@PACKAGE_NAME@) @VERSION@' + +usage="Usage: ${0##*/} [OPTION]... [FILE]... +Like 'more', but operate on the uncompressed contents of xz compressed FILEs. + +Report bugs to <@PACKAGE_BUGREPORT@>." + +case $1 in + --help) echo "$usage" || exit 2; exit;; + --version) echo "$version" || exit 2; exit;; +esac + +oldtty=`stty -g 2>/dev/null` +if stty -cbreak 2>/dev/null; then + cb='cbreak'; ncb='-cbreak' +else + # 'stty min 1' resets eof to ^a on both SunOS and SysV! + cb='min 1 -icanon'; ncb='icanon eof ^d' +fi +if test $? -eq 0 && test -n "$oldtty"; then + trap 'stty $oldtty 2>/dev/null; exit' 0 2 3 5 10 13 15 +else + trap 'stty $ncb echo 2>/dev/null; exit' 0 2 3 5 10 13 15 +fi + +if test $# = 0; then + if test -t 0; then + echo "$usage"; exit 1 + else + $xz -cdfq | eval "${PAGER:-more}" + fi +else + FIRST=1 + for FILE; do + < "$FILE" || continue + if test $FIRST -eq 0; then + printf "%s--More--(Next file: %s)" "" "$FILE" + stty $cb -echo 2>/dev/null + ANS=`dd bs=1 count=1 2>/dev/null` + stty $ncb echo 2>/dev/null + echo " " + case "$ANS" in + [eq]) exit;; + esac + fi + if test "$ANS" != 's'; then + echo "------> $FILE <------" + $xz -cdfq -- "$FILE" | eval "${PAGER:-more}" + fi + if test -t 1; then + FIRST=0 + fi + done +fi diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/Makefile.am b/Build/source/extra/xz-4.999.9beta/src/xz/Makefile.am new file mode 100644 index 00000000000..ccdc66cab44 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/Makefile.am @@ -0,0 +1,96 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +bin_PROGRAMS = xz + +xz_SOURCES = \ + args.c \ + args.h \ + coder.c \ + coder.h \ + file_io.c \ + file_io.h \ + hardware.c \ + hardware.h \ + main.c \ + main.h \ + message.c \ + message.h \ + options.c \ + options.h \ + private.h \ + signals.c \ + signals.h \ + suffix.c \ + suffix.h \ + util.c \ + util.h + +if COND_W32 +xz_SOURCES += xz_w32res.rc +endif + +xz_CPPFLAGS = \ + -DLOCALEDIR=\"$(localedir)\" \ + -I$(top_srcdir)/src/common \ + -I$(top_srcdir)/src/liblzma/api \ + -I$(top_builddir)/lib \ + $(STATIC_CPPFLAGS) + +xz_LDFLAGS = $(STATIC_LDFLAGS) +xz_LDADD = $(top_builddir)/src/liblzma/liblzma.la + +if COND_GNULIB +xz_LDADD += $(top_builddir)/lib/libgnu.a +endif + +# libgnu.a may need these libs, so this must be after libgnu.a. +xz_LDADD += $(LTLIBINTL) + + +# Windows resource compiler support +.rc.o: + $(RC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(xz_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) -i $< -o $@ + + +dist_man_MANS = xz.1 + + +## Create symlinks for unxz and xzcat for convenience. Create symlinks also +## for lzma, unlzma, and lzcat for compatibility with LZMA Utils 4.32.x. +xzlinks = unxz xzcat lzma unlzma lzcat + +install-exec-hook: + cd $(DESTDIR)$(bindir) && \ + target=`echo xz | sed '$(transform)'`$(EXEEXT) && \ + for name in $(xzlinks); do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link && \ + $(LN_S) $$target $$link; \ + done + +install-data-hook: + cd $(DESTDIR)$(mandir)/man1 && \ + target=`echo xz | sed '$(transform)'` && \ + for name in $(xzlinks); do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link.1 && \ + $(LN_S) $$target.1 $$link.1; \ + done + +uninstall-hook: + cd $(DESTDIR)$(bindir) && \ + for name in $(xzlinks); do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link; \ + done + cd $(DESTDIR)$(mandir)/man1 && \ + for name in $(xzlinks); do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link.1; \ + done diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/Makefile.in b/Build/source/extra/xz-4.999.9beta/src/xz/Makefile.in new file mode 100644 index 00000000000..cb127ade119 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/Makefile.in @@ -0,0 +1,849 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ +bin_PROGRAMS = xz$(EXEEXT) +@COND_W32_TRUE@am__append_1 = xz_w32res.rc +@COND_GNULIB_TRUE@am__append_2 = $(top_builddir)/lib/libgnu.a +subdir = src/xz +DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ + $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" +PROGRAMS = $(bin_PROGRAMS) +am__xz_SOURCES_DIST = args.c args.h coder.c coder.h file_io.c \ + file_io.h hardware.c hardware.h main.c main.h message.c \ + message.h options.c options.h private.h signals.c signals.h \ + suffix.c suffix.h util.c util.h xz_w32res.rc +@COND_W32_TRUE@am__objects_1 = xz_w32res.$(OBJEXT) +am_xz_OBJECTS = xz-args.$(OBJEXT) xz-coder.$(OBJEXT) \ + xz-file_io.$(OBJEXT) xz-hardware.$(OBJEXT) xz-main.$(OBJEXT) \ + xz-message.$(OBJEXT) xz-options.$(OBJEXT) xz-signals.$(OBJEXT) \ + xz-suffix.$(OBJEXT) xz-util.$(OBJEXT) $(am__objects_1) +xz_OBJECTS = $(am_xz_OBJECTS) +am__DEPENDENCIES_1 = +xz_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_2) $(am__DEPENDENCIES_1) +xz_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(xz_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(xz_SOURCES) +DIST_SOURCES = $(am__xz_SOURCES_DIST) +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' +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(dist_man_MANS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ +DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETOPT_H = @GETOPT_H@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSIX_SHELL = @POSIX_SHELL@ +POSUB = @POSUB@ +PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ +STATIC_LDFLAGS = @STATIC_LDFLAGS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +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@ +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@ +lt_ECHO = @lt_ECHO@ +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@ +xz = @xz@ +xz_SOURCES = args.c args.h coder.c coder.h file_io.c file_io.h \ + hardware.c hardware.h main.c main.h message.c message.h \ + options.c options.h private.h signals.c signals.h suffix.c \ + suffix.h util.c util.h $(am__append_1) +xz_CPPFLAGS = \ + -DLOCALEDIR=\"$(localedir)\" \ + -I$(top_srcdir)/src/common \ + -I$(top_srcdir)/src/liblzma/api \ + -I$(top_builddir)/lib \ + $(STATIC_CPPFLAGS) + +xz_LDFLAGS = $(STATIC_LDFLAGS) + +# libgnu.a may need these libs, so this must be after libgnu.a. +xz_LDADD = $(top_builddir)/src/liblzma/liblzma.la $(am__append_2) \ + $(LTLIBINTL) +dist_man_MANS = xz.1 +xzlinks = unxz xzcat lzma unlzma lzcat +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj .rc +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/xz/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/xz/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_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 +xz$(EXEEXT): $(xz_OBJECTS) $(xz_DEPENDENCIES) + @rm -f xz$(EXEEXT) + $(xz_LINK) $(xz_OBJECTS) $(xz_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-args.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-coder.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-file_io.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-hardware.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-message.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-options.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-signals.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-suffix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-util.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +xz-args.o: args.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-args.o -MD -MP -MF $(DEPDIR)/xz-args.Tpo -c -o xz-args.o `test -f 'args.c' || echo '$(srcdir)/'`args.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-args.Tpo $(DEPDIR)/xz-args.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='args.c' object='xz-args.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-args.o `test -f 'args.c' || echo '$(srcdir)/'`args.c + +xz-args.obj: args.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-args.obj -MD -MP -MF $(DEPDIR)/xz-args.Tpo -c -o xz-args.obj `if test -f 'args.c'; then $(CYGPATH_W) 'args.c'; else $(CYGPATH_W) '$(srcdir)/args.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-args.Tpo $(DEPDIR)/xz-args.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='args.c' object='xz-args.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-args.obj `if test -f 'args.c'; then $(CYGPATH_W) 'args.c'; else $(CYGPATH_W) '$(srcdir)/args.c'; fi` + +xz-coder.o: coder.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-coder.o -MD -MP -MF $(DEPDIR)/xz-coder.Tpo -c -o xz-coder.o `test -f 'coder.c' || echo '$(srcdir)/'`coder.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-coder.Tpo $(DEPDIR)/xz-coder.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='coder.c' object='xz-coder.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-coder.o `test -f 'coder.c' || echo '$(srcdir)/'`coder.c + +xz-coder.obj: coder.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-coder.obj -MD -MP -MF $(DEPDIR)/xz-coder.Tpo -c -o xz-coder.obj `if test -f 'coder.c'; then $(CYGPATH_W) 'coder.c'; else $(CYGPATH_W) '$(srcdir)/coder.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-coder.Tpo $(DEPDIR)/xz-coder.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='coder.c' object='xz-coder.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-coder.obj `if test -f 'coder.c'; then $(CYGPATH_W) 'coder.c'; else $(CYGPATH_W) '$(srcdir)/coder.c'; fi` + +xz-file_io.o: file_io.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-file_io.o -MD -MP -MF $(DEPDIR)/xz-file_io.Tpo -c -o xz-file_io.o `test -f 'file_io.c' || echo '$(srcdir)/'`file_io.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-file_io.Tpo $(DEPDIR)/xz-file_io.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='file_io.c' object='xz-file_io.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-file_io.o `test -f 'file_io.c' || echo '$(srcdir)/'`file_io.c + +xz-file_io.obj: file_io.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-file_io.obj -MD -MP -MF $(DEPDIR)/xz-file_io.Tpo -c -o xz-file_io.obj `if test -f 'file_io.c'; then $(CYGPATH_W) 'file_io.c'; else $(CYGPATH_W) '$(srcdir)/file_io.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-file_io.Tpo $(DEPDIR)/xz-file_io.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='file_io.c' object='xz-file_io.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-file_io.obj `if test -f 'file_io.c'; then $(CYGPATH_W) 'file_io.c'; else $(CYGPATH_W) '$(srcdir)/file_io.c'; fi` + +xz-hardware.o: hardware.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-hardware.o -MD -MP -MF $(DEPDIR)/xz-hardware.Tpo -c -o xz-hardware.o `test -f 'hardware.c' || echo '$(srcdir)/'`hardware.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-hardware.Tpo $(DEPDIR)/xz-hardware.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hardware.c' object='xz-hardware.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-hardware.o `test -f 'hardware.c' || echo '$(srcdir)/'`hardware.c + +xz-hardware.obj: hardware.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-hardware.obj -MD -MP -MF $(DEPDIR)/xz-hardware.Tpo -c -o xz-hardware.obj `if test -f 'hardware.c'; then $(CYGPATH_W) 'hardware.c'; else $(CYGPATH_W) '$(srcdir)/hardware.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-hardware.Tpo $(DEPDIR)/xz-hardware.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hardware.c' object='xz-hardware.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-hardware.obj `if test -f 'hardware.c'; then $(CYGPATH_W) 'hardware.c'; else $(CYGPATH_W) '$(srcdir)/hardware.c'; fi` + +xz-main.o: main.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-main.o -MD -MP -MF $(DEPDIR)/xz-main.Tpo -c -o xz-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-main.Tpo $(DEPDIR)/xz-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='xz-main.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c + +xz-main.obj: main.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-main.obj -MD -MP -MF $(DEPDIR)/xz-main.Tpo -c -o xz-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-main.Tpo $(DEPDIR)/xz-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='xz-main.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` + +xz-message.o: message.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-message.o -MD -MP -MF $(DEPDIR)/xz-message.Tpo -c -o xz-message.o `test -f 'message.c' || echo '$(srcdir)/'`message.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-message.Tpo $(DEPDIR)/xz-message.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='message.c' object='xz-message.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-message.o `test -f 'message.c' || echo '$(srcdir)/'`message.c + +xz-message.obj: message.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-message.obj -MD -MP -MF $(DEPDIR)/xz-message.Tpo -c -o xz-message.obj `if test -f 'message.c'; then $(CYGPATH_W) 'message.c'; else $(CYGPATH_W) '$(srcdir)/message.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-message.Tpo $(DEPDIR)/xz-message.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='message.c' object='xz-message.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-message.obj `if test -f 'message.c'; then $(CYGPATH_W) 'message.c'; else $(CYGPATH_W) '$(srcdir)/message.c'; fi` + +xz-options.o: options.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-options.o -MD -MP -MF $(DEPDIR)/xz-options.Tpo -c -o xz-options.o `test -f 'options.c' || echo '$(srcdir)/'`options.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-options.Tpo $(DEPDIR)/xz-options.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='options.c' object='xz-options.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-options.o `test -f 'options.c' || echo '$(srcdir)/'`options.c + +xz-options.obj: options.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-options.obj -MD -MP -MF $(DEPDIR)/xz-options.Tpo -c -o xz-options.obj `if test -f 'options.c'; then $(CYGPATH_W) 'options.c'; else $(CYGPATH_W) '$(srcdir)/options.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-options.Tpo $(DEPDIR)/xz-options.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='options.c' object='xz-options.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-options.obj `if test -f 'options.c'; then $(CYGPATH_W) 'options.c'; else $(CYGPATH_W) '$(srcdir)/options.c'; fi` + +xz-signals.o: signals.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-signals.o -MD -MP -MF $(DEPDIR)/xz-signals.Tpo -c -o xz-signals.o `test -f 'signals.c' || echo '$(srcdir)/'`signals.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-signals.Tpo $(DEPDIR)/xz-signals.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='signals.c' object='xz-signals.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-signals.o `test -f 'signals.c' || echo '$(srcdir)/'`signals.c + +xz-signals.obj: signals.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-signals.obj -MD -MP -MF $(DEPDIR)/xz-signals.Tpo -c -o xz-signals.obj `if test -f 'signals.c'; then $(CYGPATH_W) 'signals.c'; else $(CYGPATH_W) '$(srcdir)/signals.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-signals.Tpo $(DEPDIR)/xz-signals.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='signals.c' object='xz-signals.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-signals.obj `if test -f 'signals.c'; then $(CYGPATH_W) 'signals.c'; else $(CYGPATH_W) '$(srcdir)/signals.c'; fi` + +xz-suffix.o: suffix.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-suffix.o -MD -MP -MF $(DEPDIR)/xz-suffix.Tpo -c -o xz-suffix.o `test -f 'suffix.c' || echo '$(srcdir)/'`suffix.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-suffix.Tpo $(DEPDIR)/xz-suffix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='suffix.c' object='xz-suffix.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-suffix.o `test -f 'suffix.c' || echo '$(srcdir)/'`suffix.c + +xz-suffix.obj: suffix.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-suffix.obj -MD -MP -MF $(DEPDIR)/xz-suffix.Tpo -c -o xz-suffix.obj `if test -f 'suffix.c'; then $(CYGPATH_W) 'suffix.c'; else $(CYGPATH_W) '$(srcdir)/suffix.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-suffix.Tpo $(DEPDIR)/xz-suffix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='suffix.c' object='xz-suffix.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-suffix.obj `if test -f 'suffix.c'; then $(CYGPATH_W) 'suffix.c'; else $(CYGPATH_W) '$(srcdir)/suffix.c'; fi` + +xz-util.o: util.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-util.o -MD -MP -MF $(DEPDIR)/xz-util.Tpo -c -o xz-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-util.Tpo $(DEPDIR)/xz-util.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='xz-util.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c + +xz-util.obj: util.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-util.obj -MD -MP -MF $(DEPDIR)/xz-util.Tpo -c -o xz-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-util.Tpo $(DEPDIR)/xz-util.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='xz-util.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(dist_man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } + +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) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + 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; }; }'`; \ + 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) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + 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; }; }'`; \ + 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 + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @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 +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(MANS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; 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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-exec-hook +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -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-binPROGRAMS uninstall-man + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +uninstall-man: uninstall-man1 + +.MAKE: install-am install-data-am install-exec-am install-strip \ + uninstall-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am \ + install-data-hook install-dvi install-dvi-am install-exec \ + install-exec-am install-exec-hook install-html install-html-am \ + install-info install-info-am install-man install-man1 \ + 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-binPROGRAMS uninstall-hook uninstall-man \ + uninstall-man1 + + +# Windows resource compiler support +.rc.o: + $(RC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(xz_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) -i $< -o $@ + +install-exec-hook: + cd $(DESTDIR)$(bindir) && \ + target=`echo xz | sed '$(transform)'`$(EXEEXT) && \ + for name in $(xzlinks); do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link && \ + $(LN_S) $$target $$link; \ + done + +install-data-hook: + cd $(DESTDIR)$(mandir)/man1 && \ + target=`echo xz | sed '$(transform)'` && \ + for name in $(xzlinks); do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link.1 && \ + $(LN_S) $$target.1 $$link.1; \ + done + +uninstall-hook: + cd $(DESTDIR)$(bindir) && \ + for name in $(xzlinks); do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link; \ + done + cd $(DESTDIR)$(mandir)/man1 && \ + for name in $(xzlinks); do \ + link=`echo $$name | sed '$(transform)'` && \ + rm -f $$link.1; \ + done + +# 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/Build/source/extra/xz-4.999.9beta/src/xz/args.c b/Build/source/extra/xz-4.999.9beta/src/xz/args.c new file mode 100644 index 00000000000..b50e28b7fd9 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/args.c @@ -0,0 +1,530 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file args.c +/// \brief Argument parsing +/// +/// \note Filter-specific options parsing is in options.c. +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "private.h" + +#include "getopt.h" +#include + + +bool opt_stdout = false; +bool opt_force = false; +bool opt_keep_original = false; + +// We don't modify or free() this, but we need to assign it in some +// non-const pointers. +const char *stdin_filename = "(stdin)"; + + +static void +parse_real(args_info *args, int argc, char **argv) +{ + enum { + OPT_SUBBLOCK = INT_MIN, + OPT_X86, + OPT_POWERPC, + OPT_IA64, + OPT_ARM, + OPT_ARMTHUMB, + OPT_SPARC, + OPT_DELTA, + OPT_LZMA1, + OPT_LZMA2, + + OPT_FILES, + OPT_FILES0, + }; + + static const char short_opts[] + = "cC:defF:hHlkM:qQrS:tT:vVz0123456789"; + + static const struct option long_opts[] = { + // Operation mode + { "compress", no_argument, NULL, 'z' }, + { "decompress", no_argument, NULL, 'd' }, + { "uncompress", no_argument, NULL, 'd' }, + { "test", no_argument, NULL, 't' }, + { "list", no_argument, NULL, 'l' }, + + // Operation modifiers + { "keep", no_argument, NULL, 'k' }, + { "force", no_argument, NULL, 'f' }, + { "stdout", no_argument, NULL, 'c' }, + { "to-stdout", no_argument, NULL, 'c' }, + { "suffix", required_argument, NULL, 'S' }, + // { "recursive", no_argument, NULL, 'r' }, // TODO + { "files", optional_argument, NULL, OPT_FILES }, + { "files0", optional_argument, NULL, OPT_FILES0 }, + + // Basic compression settings + { "format", required_argument, NULL, 'F' }, + { "check", required_argument, NULL, 'C' }, + { "memory", required_argument, NULL, 'M' }, + { "threads", required_argument, NULL, 'T' }, + + { "extreme", no_argument, NULL, 'e' }, + { "fast", no_argument, NULL, '0' }, + { "best", no_argument, NULL, '9' }, + + // Filters + { "lzma1", optional_argument, NULL, OPT_LZMA1 }, + { "lzma2", optional_argument, NULL, OPT_LZMA2 }, + { "x86", optional_argument, NULL, OPT_X86 }, + { "powerpc", optional_argument, NULL, OPT_POWERPC }, + { "ia64", optional_argument, NULL, OPT_IA64 }, + { "arm", optional_argument, NULL, OPT_ARM }, + { "armthumb", optional_argument, NULL, OPT_ARMTHUMB }, + { "sparc", optional_argument, NULL, OPT_SPARC }, + { "delta", optional_argument, NULL, OPT_DELTA }, + { "subblock", optional_argument, NULL, OPT_SUBBLOCK }, + + // Other options + { "quiet", no_argument, NULL, 'q' }, + { "verbose", no_argument, NULL, 'v' }, + { "no-warn", no_argument, NULL, 'Q' }, + { "help", no_argument, NULL, 'h' }, + { "long-help", no_argument, NULL, 'H' }, + { "version", no_argument, NULL, 'V' }, + + { NULL, 0, NULL, 0 } + }; + + int c; + + while ((c = getopt_long(argc, argv, short_opts, long_opts, NULL)) + != -1) { + switch (c) { + // Compression preset (also for decompression if --format=raw) + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + coder_set_preset(c - '0'); + break; + + // --memory + case 'M': { + // Support specifying the limit as a percentage of + // installed physical RAM. + size_t len = strlen(optarg); + if (len > 0 && optarg[len - 1] == '%') { + optarg[len - 1] = '\0'; + hardware_memlimit_set_percentage( + str_to_uint64( + "memory%", optarg, 1, 100)); + } else { + // On 32-bit systems, SIZE_MAX would make more + // sense than UINT64_MAX. But use UINT64_MAX + // still so that scripts that assume > 4 GiB + // values don't break. + hardware_memlimit_set(str_to_uint64( + "memory", optarg, + 0, UINT64_MAX)); + } + + break; + } + + // --suffix + case 'S': + suffix_set(optarg); + break; + + case 'T': + hardware_threadlimit_set(str_to_uint64( + "threads", optarg, 0, UINT32_MAX)); + break; + + // --version + case 'V': + // This doesn't return. + message_version(); + + // --stdout + case 'c': + opt_stdout = true; + break; + + // --decompress + case 'd': + opt_mode = MODE_DECOMPRESS; + break; + + // --extreme + case 'e': + coder_set_extreme(); + break; + + // --force + case 'f': + opt_force = true; + break; + + // --help + case 'h': + // This doesn't return. + message_help(false); + + // --long-help + case 'H': + // This doesn't return. + message_help(true); + + // --list + case 'l': + opt_mode = MODE_LIST; + break; + + // --keep + case 'k': + opt_keep_original = true; + break; + + // --quiet + case 'q': + message_verbosity_decrease(); + break; + + case 'Q': + set_exit_no_warn(); + break; + + case 't': + opt_mode = MODE_TEST; + break; + + // --verbose + case 'v': + message_verbosity_increase(); + break; + + case 'z': + opt_mode = MODE_COMPRESS; + break; + + // Filter setup + + case OPT_SUBBLOCK: + coder_add_filter(LZMA_FILTER_SUBBLOCK, + options_subblock(optarg)); + break; + + case OPT_X86: + coder_add_filter(LZMA_FILTER_X86, + options_bcj(optarg)); + break; + + case OPT_POWERPC: + coder_add_filter(LZMA_FILTER_POWERPC, + options_bcj(optarg)); + break; + + case OPT_IA64: + coder_add_filter(LZMA_FILTER_IA64, + options_bcj(optarg)); + break; + + case OPT_ARM: + coder_add_filter(LZMA_FILTER_ARM, + options_bcj(optarg)); + break; + + case OPT_ARMTHUMB: + coder_add_filter(LZMA_FILTER_ARMTHUMB, + options_bcj(optarg)); + break; + + case OPT_SPARC: + coder_add_filter(LZMA_FILTER_SPARC, + options_bcj(optarg)); + break; + + case OPT_DELTA: + coder_add_filter(LZMA_FILTER_DELTA, + options_delta(optarg)); + break; + + case OPT_LZMA1: + coder_add_filter(LZMA_FILTER_LZMA1, + options_lzma(optarg)); + break; + + case OPT_LZMA2: + coder_add_filter(LZMA_FILTER_LZMA2, + options_lzma(optarg)); + break; + + // Other + + // --format + case 'F': { + // Just in case, support both "lzma" and "alone" since + // the latter was used for forward compatibility in + // LZMA Utils 4.32.x. + static const struct { + char str[8]; + enum format_type format; + } types[] = { + { "auto", FORMAT_AUTO }, + { "xz", FORMAT_XZ }, + { "lzma", FORMAT_LZMA }, + { "alone", FORMAT_LZMA }, + // { "gzip", FORMAT_GZIP }, + // { "gz", FORMAT_GZIP }, + { "raw", FORMAT_RAW }, + }; + + size_t i = 0; + while (strcmp(types[i].str, optarg) != 0) + if (++i == ARRAY_SIZE(types)) + message_fatal(_("%s: Unknown file " + "format type"), + optarg); + + opt_format = types[i].format; + break; + } + + // --check + case 'C': { + static const struct { + char str[8]; + lzma_check check; + } types[] = { + { "none", LZMA_CHECK_NONE }, + { "crc32", LZMA_CHECK_CRC32 }, + { "crc64", LZMA_CHECK_CRC64 }, + { "sha256", LZMA_CHECK_SHA256 }, + }; + + size_t i = 0; + while (strcmp(types[i].str, optarg) != 0) { + if (++i == ARRAY_SIZE(types)) + message_fatal(_("%s: Unsupported " + "integrity " + "check type"), optarg); + } + + // Use a separate check in case we are using different + // liblzma than what was used to compile us. + if (!lzma_check_is_supported(types[i].check)) + message_fatal(_("%s: Unsupported integrity " + "check type"), optarg); + + coder_set_check(types[i].check); + break; + } + + case OPT_FILES: + args->files_delim = '\n'; + + // Fall through + + case OPT_FILES0: + if (args->files_name != NULL) + message_fatal(_("Only one file can be " + "specified with `--files'" + "or `--files0'.")); + + if (optarg == NULL) { + args->files_name = (char *)stdin_filename; + args->files_file = stdin; + } else { + args->files_name = optarg; + args->files_file = fopen(optarg, + c == OPT_FILES ? "r" : "rb"); + if (args->files_file == NULL) + message_fatal("%s: %s", optarg, + strerror(errno)); + } + + break; + + default: + message_try_help(); + my_exit(E_ERROR); + } + } + + return; +} + + +static void +parse_environment(args_info *args, char *argv0) +{ + char *env = getenv("XZ_OPT"); + if (env == NULL) + return; + + // We modify the string, so make a copy of it. + env = xstrdup(env); + + // Calculate the number of arguments in env. argc stats at one + // to include space for the program name. + int argc = 1; + bool prev_was_space = true; + for (size_t i = 0; env[i] != '\0'; ++i) { + // NOTE: Cast to unsigned char is needed so that correct + // value gets passed to isspace(), which expects + // unsigned char cast to int. Casting to int is done + // automatically due to integer promotion, but we need to + // force char to unsigned char manually. Otherwise 8-bit + // characters would get promoted to wrong value if + // char is signed. + if (isspace((unsigned char)env[i])) { + prev_was_space = true; + } else if (prev_was_space) { + prev_was_space = false; + + // Keep argc small enough to fit into a singed int + // and to keep it usable for memory allocation. + if (++argc == MIN(INT_MAX, SIZE_MAX / sizeof(char *))) + message_fatal(_("The environment variable " + "XZ_OPT contains too many " + "arguments")); + } + } + + // Allocate memory to hold pointers to the arguments. Add one to get + // space for the terminating NULL (if some systems happen to need it). + char **argv = xmalloc(((size_t)(argc) + 1) * sizeof(char *)); + argv[0] = argv0; + argv[argc] = NULL; + + // Go through the string again. Split the arguments using '\0' + // characters and add pointers to the resulting strings to argv. + argc = 1; + prev_was_space = true; + for (size_t i = 0; env[i] != '\0'; ++i) { + if (isspace((unsigned char)env[i])) { + prev_was_space = true; + env[i] = '\0'; + } else if (prev_was_space) { + prev_was_space = false; + argv[argc++] = env + i; + } + } + + // Parse the argument list we got from the environment. All non-option + // arguments i.e. filenames are ignored. + parse_real(args, argc, argv); + + // Reset the state of the getopt_long() so that we can parse the + // command line options too. There are two incompatible ways to + // do it. +#ifdef HAVE_OPTRESET + // BSD + optind = 1; + optreset = 1; +#else + // GNU, Solaris + optind = 0; +#endif + + // We don't need the argument list from environment anymore. + free(argv); + free(env); + + return; +} + + +extern void +args_parse(args_info *args, int argc, char **argv) +{ + // Initialize those parts of *args that we need later. + args->files_name = NULL; + args->files_file = NULL; + args->files_delim = '\0'; + + // Check how we were called. + { +#ifdef DOSLIKE + // We adjusted argv[0] in the beginning of main() so we don't + // need to do anything here. + const char *name = argv[0]; +#else + // Remove the leading path name, if any. + const char *name = strrchr(argv[0], '/'); + if (name == NULL) + name = argv[0]; + else + ++name; +#endif + + // NOTE: It's possible that name[0] is now '\0' if argv[0] + // is weird, but it doesn't matter here. + + // Look for full command names instead of substrings like + // "un", "cat", and "lz" to reduce possibility of false + // positives when the programs have been renamed. + if (strstr(name, "xzcat") != NULL) { + opt_mode = MODE_DECOMPRESS; + opt_stdout = true; + } else if (strstr(name, "unxz") != NULL) { + opt_mode = MODE_DECOMPRESS; + } else if (strstr(name, "lzcat") != NULL) { + opt_format = FORMAT_LZMA; + opt_mode = MODE_DECOMPRESS; + opt_stdout = true; + } else if (strstr(name, "unlzma") != NULL) { + opt_format = FORMAT_LZMA; + opt_mode = MODE_DECOMPRESS; + } else if (strstr(name, "lzma") != NULL) { + opt_format = FORMAT_LZMA; + } + } + + // First the flags from environment + parse_environment(args, argv[0]); + + // Then from the command line + parse_real(args, argc, argv); + + // Never remove the source file when the destination is not on disk. + // In test mode the data is written nowhere, but setting opt_stdout + // will make the rest of the code behave well. + if (opt_stdout || opt_mode == MODE_TEST) { + opt_keep_original = true; + opt_stdout = true; + } + + // When compressing, if no --format flag was used, or it + // was --format=auto, we compress to the .xz format. + if (opt_mode == MODE_COMPRESS && opt_format == FORMAT_AUTO) + opt_format = FORMAT_XZ; + + // Compression settings need to be validated (options themselves and + // their memory usage) when compressing to any file format. It has to + // be done also when uncompressing raw data, since for raw decoding + // the options given on the command line are used to know what kind + // of raw data we are supposed to decode. + if (opt_mode == MODE_COMPRESS || opt_format == FORMAT_RAW) + coder_set_compression_settings(); + + // If no filenames are given, use stdin. + if (argv[optind] == NULL && args->files_name == NULL) { + // We don't modify or free() the "-" constant. The caller + // modifies this so don't make the struct itself const. + static char *names_stdin[2] = { (char *)"-", NULL }; + args->arg_names = names_stdin; + args->arg_count = 1; + } else { + // We got at least one filename from the command line, or + // --files or --files0 was specified. + args->arg_names = argv + optind; + args->arg_count = argc - optind; + } + + return; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/args.h b/Build/source/extra/xz-4.999.9beta/src/xz/args.h new file mode 100644 index 00000000000..91e43ad65a1 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/args.h @@ -0,0 +1,41 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file args.h +/// \brief Argument parsing +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +typedef struct { + /// Filenames from command line + char **arg_names; + + /// Number of filenames from command line + size_t arg_count; + + /// Name of the file from which to read filenames. This is NULL + /// if --files or --files0 was not used. + char *files_name; + + /// File opened for reading from which filenames are read. This is + /// non-NULL only if files_name is non-NULL. + FILE *files_file; + + /// Delimiter for filenames read from files_file + char files_delim; + +} args_info; + + +extern bool opt_stdout; +extern bool opt_force; +extern bool opt_keep_original; +// extern bool opt_recursive; + +extern const char *stdin_filename; + +extern void args_parse(args_info *args, int argc, char **argv); diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/coder.c b/Build/source/extra/xz-4.999.9beta/src/xz/coder.c new file mode 100644 index 00000000000..7cf6186f806 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/coder.c @@ -0,0 +1,639 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file coder.c +/// \brief Compresses or uncompresses a file +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "private.h" + + +/// Return value type for coder_init(). +enum coder_init_ret { + CODER_INIT_NORMAL, + CODER_INIT_PASSTHRU, + CODER_INIT_ERROR, +}; + + +enum operation_mode opt_mode = MODE_COMPRESS; + +enum format_type opt_format = FORMAT_AUTO; + + +/// Stream used to communicate with liblzma +static lzma_stream strm = LZMA_STREAM_INIT; + +/// Filters needed for all encoding all formats, and also decoding in raw data +static lzma_filter filters[LZMA_FILTERS_MAX + 1]; + +/// Input and output buffers +static uint8_t in_buf[IO_BUFFER_SIZE]; +static uint8_t out_buf[IO_BUFFER_SIZE]; + +/// Number of filters. Zero indicates that we are using a preset. +static size_t filters_count = 0; + +/// Number of the preset (0-9) +static size_t preset_number = 6; + +/// True if we should auto-adjust the compression settings to use less memory +/// if memory usage limit is too low for the original settings. +static bool auto_adjust = true; + +/// Indicate if no preset has been explicitly given. In that case, if we need +/// to auto-adjust for lower memory usage, we won't print a warning. +static bool preset_default = true; + +/// If a preset is used (no custom filter chain) and preset_extreme is true, +/// a significantly slower compression is used to achieve slightly better +/// compression ratio. +static bool preset_extreme = false; + +/// Integrity check type +#ifdef HAVE_CHECK_CRC64 +static lzma_check check = LZMA_CHECK_CRC64; +#else +static lzma_check check = LZMA_CHECK_CRC32; +#endif + + +extern void +coder_set_check(lzma_check new_check) +{ + check = new_check; + return; +} + + +extern void +coder_set_preset(size_t new_preset) +{ + preset_number = new_preset; + preset_default = false; + return; +} + + +extern void +coder_set_extreme(void) +{ + preset_extreme = true; + return; +} + + +extern void +coder_add_filter(lzma_vli id, void *options) +{ + if (filters_count == LZMA_FILTERS_MAX) + message_fatal(_("Maximum number of filters is four")); + + filters[filters_count].id = id; + filters[filters_count].options = options; + ++filters_count; + + return; +} + + +static void lzma_attribute((noreturn)) +memlimit_too_small(uint64_t memory_usage, uint64_t memory_limit) +{ + message_fatal(_("Memory usage limit (%" PRIu64 " MiB) is too small " + "for the given filter setup (%" PRIu64 " MiB)"), + memory_limit >> 20, memory_usage >> 20); +} + + +extern void +coder_set_compression_settings(void) +{ + // Options for LZMA1 or LZMA2 in case we are using a preset. + static lzma_options_lzma opt_lzma; + + if (filters_count == 0) { + // We are using a preset. This is not a good idea in raw mode + // except when playing around with things. Different versions + // of this software may use different options in presets, and + // thus make uncompressing the raw data difficult. + if (opt_format == FORMAT_RAW) { + // The message is shown only if warnings are allowed + // but the exit status isn't changed. + message(V_WARNING, _("Using a preset in raw mode " + "is discouraged.")); + message(V_WARNING, _("The exact options of the " + "presets may vary between software " + "versions.")); + } + + // Get the preset for LZMA1 or LZMA2. + if (preset_extreme) + preset_number |= LZMA_PRESET_EXTREME; + + if (lzma_lzma_preset(&opt_lzma, preset_number)) + message_bug(); + + // Use LZMA2 except with --format=lzma we use LZMA1. + filters[0].id = opt_format == FORMAT_LZMA + ? LZMA_FILTER_LZMA1 : LZMA_FILTER_LZMA2; + filters[0].options = &opt_lzma; + filters_count = 1; + } else { + preset_default = false; + } + + // Terminate the filter options array. + filters[filters_count].id = LZMA_VLI_UNKNOWN; + + // If we are using the .lzma format, allow exactly one filter + // which has to be LZMA1. + if (opt_format == FORMAT_LZMA && (filters_count != 1 + || filters[0].id != LZMA_FILTER_LZMA1)) + message_fatal(_("The .lzma format supports only " + "the LZMA1 filter")); + + // If we are using the .xz format, make sure that there is no LZMA1 + // filter to prevent LZMA_PROG_ERROR. + if (opt_format == FORMAT_XZ) + for (size_t i = 0; i < filters_count; ++i) + if (filters[i].id == LZMA_FILTER_LZMA1) + message_fatal(_("LZMA1 cannot be used " + "with the .xz format")); + + // Print the selected filter chain. + message_filters(V_DEBUG, filters); + + // If using --format=raw, we can be decoding. The memusage function + // also validates the filter chain and the options used for the + // filters. + const uint64_t memory_limit = hardware_memlimit_get(); + uint64_t memory_usage; + if (opt_mode == MODE_COMPRESS) + memory_usage = lzma_raw_encoder_memusage(filters); + else + memory_usage = lzma_raw_decoder_memusage(filters); + + if (memory_usage == UINT64_MAX) + message_fatal("Unsupported filter chain or filter options"); + + // Print memory usage info. + message(V_DEBUG, _("%s MiB (%s B) of memory is required per thread, " + "limit is %s MiB (%s B)"), + uint64_to_str(memory_usage >> 20, 0), + uint64_to_str(memory_usage, 1), + uint64_to_str(memory_limit >> 20, 2), + uint64_to_str(memory_limit, 3)); + + if (memory_usage > memory_limit) { + // If --no-auto-adjust was used or we didn't find LZMA1 or + // LZMA2 as the last filter, give an error immediatelly. + // --format=raw implies --no-auto-adjust. + if (!auto_adjust || opt_format == FORMAT_RAW) + memlimit_too_small(memory_usage, memory_limit); + + assert(opt_mode == MODE_COMPRESS); + + // Look for the last filter if it is LZMA2 or LZMA1, so + // we can make it use less RAM. With other filters we don't + // know what to do. + size_t i = 0; + while (filters[i].id != LZMA_FILTER_LZMA2 + && filters[i].id != LZMA_FILTER_LZMA1) { + if (filters[i].id == LZMA_VLI_UNKNOWN) + memlimit_too_small(memory_usage, memory_limit); + + ++i; + } + + // Decrease the dictionary size until we meet the memory + // usage limit. First round down to full mebibytes. + lzma_options_lzma *opt = filters[i].options; + const uint32_t orig_dict_size = opt->dict_size; + opt->dict_size &= ~((UINT32_C(1) << 20) - 1); + while (true) { + // If it is below 1 MiB, auto-adjusting failed. We + // could be more sophisticated and scale it down even + // more, but let's see if many complain about this + // version. + // + // FIXME: Displays the scaled memory usage instead + // of the original. + if (opt->dict_size < (UINT32_C(1) << 20)) + memlimit_too_small(memory_usage, memory_limit); + + memory_usage = lzma_raw_encoder_memusage(filters); + if (memory_usage == UINT64_MAX) + message_bug(); + + // Accept it if it is low enough. + if (memory_usage <= memory_limit) + break; + + // Otherwise 1 MiB down and try again. I hope this + // isn't too slow method for cases where the original + // dict_size is very big. + opt->dict_size -= UINT32_C(1) << 20; + } + + // Tell the user that we decreased the dictionary size. + // However, omit the message if no preset or custom chain + // was given. FIXME: Always warn? + if (!preset_default) + message(V_WARNING, "Adjusted LZMA%c dictionary size " + "from %s MiB to %s MiB to not exceed " + "the memory usage limit of %s MiB", + filters[i].id == LZMA_FILTER_LZMA2 + ? '2' : '1', + uint64_to_str(orig_dict_size >> 20, 0), + uint64_to_str(opt->dict_size >> 20, 1), + uint64_to_str(memory_limit >> 20, 2)); + } + +/* + // Limit the number of worker threads so that memory usage + // limit isn't exceeded. + assert(memory_usage > 0); + size_t thread_limit = memory_limit / memory_usage; + if (thread_limit == 0) + thread_limit = 1; + + if (opt_threads > thread_limit) + opt_threads = thread_limit; +*/ + + return; +} + + +/// Return true if the data in in_buf seems to be in the .xz format. +static bool +is_format_xz(void) +{ + return strm.avail_in >= 6 && memcmp(in_buf, "\3757zXZ", 6) == 0; +} + + +/// Return true if the data in in_buf seems to be in the .lzma format. +static bool +is_format_lzma(void) +{ + // The .lzma header is 13 bytes. + if (strm.avail_in < 13) + return false; + + // Decode the LZMA1 properties. + lzma_filter filter = { .id = LZMA_FILTER_LZMA1 }; + if (lzma_properties_decode(&filter, NULL, in_buf, 5) != LZMA_OK) + return false; + + // A hack to ditch tons of false positives: We allow only dictionary + // sizes that are 2^n or 2^n + 2^(n-1) or UINT32_MAX. LZMA_Alone + // created only files with 2^n, but accepts any dictionary size. + // If someone complains, this will be reconsidered. + lzma_options_lzma *opt = filter.options; + const uint32_t dict_size = opt->dict_size; + free(opt); + + if (dict_size != UINT32_MAX) { + uint32_t d = dict_size - 1; + d |= d >> 2; + d |= d >> 3; + d |= d >> 4; + d |= d >> 8; + d |= d >> 16; + ++d; + if (d != dict_size || dict_size == 0) + return false; + } + + // Another hack to ditch false positives: Assume that if the + // uncompressed size is known, it must be less than 256 GiB. + // Again, if someone complains, this will be reconsidered. + uint64_t uncompressed_size = 0; + for (size_t i = 0; i < 8; ++i) + uncompressed_size |= (uint64_t)(in_buf[5 + i]) << (i * 8); + + if (uncompressed_size != UINT64_MAX + && uncompressed_size > (UINT64_C(1) << 38)) + return false; + + return true; +} + + +/// Detect the input file type (for now, this done only when decompressing), +/// and initialize an appropriate coder. Return value indicates if a normal +/// liblzma-based coder was initialized (CODER_INIT_NORMAL), if passthru +/// mode should be used (CODER_INIT_PASSTHRU), or if an error occurred +/// (CODER_INIT_ERROR). +static enum coder_init_ret +coder_init(file_pair *pair) +{ + lzma_ret ret = LZMA_PROG_ERROR; + + if (opt_mode == MODE_COMPRESS) { + switch (opt_format) { + case FORMAT_AUTO: + // args.c ensures this. + assert(0); + break; + + case FORMAT_XZ: + ret = lzma_stream_encoder(&strm, filters, check); + break; + + case FORMAT_LZMA: + ret = lzma_alone_encoder(&strm, filters[0].options); + break; + + case FORMAT_RAW: + ret = lzma_raw_encoder(&strm, filters); + break; + } + } else { + const uint32_t flags = LZMA_TELL_UNSUPPORTED_CHECK + | LZMA_CONCATENATED; + + // We abuse FORMAT_AUTO to indicate unknown file format, + // for which we may consider passthru mode. + enum format_type init_format = FORMAT_AUTO; + + switch (opt_format) { + case FORMAT_AUTO: + if (is_format_xz()) + init_format = FORMAT_XZ; + else if (is_format_lzma()) + init_format = FORMAT_LZMA; + break; + + case FORMAT_XZ: + if (is_format_xz()) + init_format = FORMAT_XZ; + break; + + case FORMAT_LZMA: + if (is_format_lzma()) + init_format = FORMAT_LZMA; + break; + + case FORMAT_RAW: + init_format = FORMAT_RAW; + break; + } + + switch (init_format) { + case FORMAT_AUTO: + // Uknown file format. If --decompress --stdout + // --force have been given, then we copy the input + // as is to stdout. Checking for MODE_DECOMPRESS + // is needed, because we don't want to do use + // passthru mode with --test. + if (opt_mode == MODE_DECOMPRESS + && opt_stdout && opt_force) + return CODER_INIT_PASSTHRU; + + ret = LZMA_FORMAT_ERROR; + break; + + case FORMAT_XZ: + ret = lzma_stream_decoder(&strm, + hardware_memlimit_get(), flags); + break; + + case FORMAT_LZMA: + ret = lzma_alone_decoder(&strm, + hardware_memlimit_get()); + break; + + case FORMAT_RAW: + // Memory usage has already been checked in + // coder_set_compression_settings(). + ret = lzma_raw_decoder(&strm, filters); + break; + } + } + + if (ret != LZMA_OK) { + message_error("%s: %s", pair->src_name, message_strm(ret)); + return CODER_INIT_ERROR; + } + + return CODER_INIT_NORMAL; +} + + +/// Compress or decompress using liblzma. +static bool +coder_normal(file_pair *pair) +{ + // Encoder needs to know when we have given all the input to it. + // The decoders need to know it too when we are using + // LZMA_CONCATENATED. We need to check for src_eof here, because + // the first input chunk has been already read, and that may + // have been the only chunk we will read. + lzma_action action = pair->src_eof ? LZMA_FINISH : LZMA_RUN; + + lzma_ret ret; + + // Assume that something goes wrong. + bool success = false; + + strm.next_out = out_buf; + strm.avail_out = IO_BUFFER_SIZE; + + while (!user_abort) { + // Fill the input buffer if it is empty and we haven't reached + // end of file yet. + if (strm.avail_in == 0 && !pair->src_eof) { + strm.next_in = in_buf; + strm.avail_in = io_read(pair, in_buf, IO_BUFFER_SIZE); + + if (strm.avail_in == SIZE_MAX) + break; + + if (pair->src_eof) + action = LZMA_FINISH; + } + + // Let liblzma do the actual work. + ret = lzma_code(&strm, action); + + // Write out if the output buffer became full. + if (strm.avail_out == 0) { + if (opt_mode != MODE_TEST && io_write(pair, out_buf, + IO_BUFFER_SIZE - strm.avail_out)) + break; + + strm.next_out = out_buf; + strm.avail_out = IO_BUFFER_SIZE; + } + + if (ret != LZMA_OK) { + // Determine if the return value indicates that we + // won't continue coding. + const bool stop = ret != LZMA_NO_CHECK + && ret != LZMA_UNSUPPORTED_CHECK; + + if (stop) { + // Write the remaining bytes even if something + // went wrong, because that way the user gets + // as much data as possible, which can be good + // when trying to get at least some useful + // data out of damaged files. + if (opt_mode != MODE_TEST && io_write(pair, + out_buf, IO_BUFFER_SIZE + - strm.avail_out)) + break; + } + + if (ret == LZMA_STREAM_END) { + // Check that there is no trailing garbage. + // This is needed for LZMA_Alone and raw + // streams. + if (strm.avail_in == 0 && !pair->src_eof) { + // Try reading one more byte. + // Hopefully we don't get any more + // input, and thus pair->src_eof + // becomes true. + strm.avail_in = io_read( + pair, in_buf, 1); + if (strm.avail_in == SIZE_MAX) + break; + + assert(strm.avail_in == 0 + || strm.avail_in == 1); + } + + if (strm.avail_in == 0) { + assert(pair->src_eof); + success = true; + break; + } + + // We hadn't reached the end of the file. + ret = LZMA_DATA_ERROR; + assert(stop); + } + + // If we get here and stop is true, something went + // wrong and we print an error. Otherwise it's just + // a warning and coding can continue. + if (stop) { + message_error("%s: %s", pair->src_name, + message_strm(ret)); + } else { + message_warning("%s: %s", pair->src_name, + message_strm(ret)); + + // When compressing, all possible errors set + // stop to true. + assert(opt_mode != MODE_COMPRESS); + } + + if (ret == LZMA_MEMLIMIT_ERROR) { + // Figure out how much memory it would have + // actually needed. + uint64_t memusage = lzma_memusage(&strm); + uint64_t memlimit = hardware_memlimit_get(); + + // Round the memory limit down and usage up. + // This way we don't display a ridiculous + // message like "Limit was 9 MiB, but 9 MiB + // would have been needed". + memusage = (memusage + 1024 * 1024 - 1) + / (1024 * 1024); + memlimit /= 1024 * 1024; + + message_error(_("Limit was %s MiB, " + "but %s MiB would " + "have been needed"), + uint64_to_str(memlimit, 0), + uint64_to_str(memusage, 1)); + } + + if (stop) + break; + } + + // Show progress information under certain conditions. + message_progress_update(); + } + + return success; +} + + +/// Copy from input file to output file without processing the data in any +/// way. This is used only when trying to decompress unrecognized files +/// with --decompress --stdout --force, so the output is always stdout. +static bool +coder_passthru(file_pair *pair) +{ + while (strm.avail_in != 0) { + if (user_abort) + return false; + + if (io_write(pair, in_buf, strm.avail_in)) + return false; + + strm.total_in += strm.avail_in; + strm.total_out = strm.total_in; + message_progress_update(); + + strm.avail_in = io_read(pair, in_buf, IO_BUFFER_SIZE); + if (strm.avail_in == SIZE_MAX) + return false; + } + + return true; +} + + +extern void +coder_run(const char *filename) +{ + // Try to open the input and output files. + file_pair *pair = io_open(filename); + if (pair == NULL) + return; + + // Initialize the progress indicator. + const uint64_t in_size = pair->src_st.st_size <= (off_t)(0) + ? 0 : (uint64_t)(pair->src_st.st_size); + message_progress_start(&strm, pair->src_name, in_size); + + // Assume that something goes wrong. + bool success = false; + + // Read the first chunk of input data. This is needed to detect + // the input file type (for now, only for decompression). + strm.next_in = in_buf; + strm.avail_in = io_read(pair, in_buf, IO_BUFFER_SIZE); + + switch (coder_init(pair)) { + case CODER_INIT_NORMAL: + success = coder_normal(pair); + break; + + case CODER_INIT_PASSTHRU: + success = coder_passthru(pair); + break; + + case CODER_INIT_ERROR: + break; + } + + message_progress_end(success); + + // Close the file pair. It needs to know if coding was successful to + // know if the source or target file should be unlinked. + io_close(pair, success); + + return; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/coder.h b/Build/source/extra/xz-4.999.9beta/src/xz/coder.h new file mode 100644 index 00000000000..0d3af6ad449 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/coder.h @@ -0,0 +1,57 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file coder.h +/// \brief Compresses or uncompresses a file +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +enum operation_mode { + MODE_COMPRESS, + MODE_DECOMPRESS, + MODE_TEST, + MODE_LIST, +}; + + +// NOTE: The order of these is significant in suffix.c. +enum format_type { + FORMAT_AUTO, + FORMAT_XZ, + FORMAT_LZMA, + // HEADER_GZIP, + FORMAT_RAW, +}; + + +/// Operation mode of the command line tool. This is set in args.c and read +/// in several files. +extern enum operation_mode opt_mode; + +/// File format to use when encoding or what format(s) to accept when +/// decoding. This is a global because it's needed also in suffix.c. +/// This is set in args.c. +extern enum format_type opt_format; + + +/// Set the integrity check type used when compressing +extern void coder_set_check(lzma_check check); + +/// Set preset number +extern void coder_set_preset(size_t new_preset); + +/// Enable extreme mode +extern void coder_set_extreme(void); + +/// Add a filter to the custom filter chain +extern void coder_add_filter(lzma_vli id, void *options); + +/// +extern void coder_set_compression_settings(void); + +/// Compress or decompress the given file +extern void coder_run(const char *filename); diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/file_io.c b/Build/source/extra/xz-4.999.9beta/src/xz/file_io.c new file mode 100644 index 00000000000..4c52da56c59 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/file_io.c @@ -0,0 +1,719 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file file_io.c +/// \brief File opening, unlinking, and closing +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "private.h" + +#include + +#ifdef DOSLIKE +# include +#endif + +#if defined(HAVE_FUTIMES) || defined(HAVE_FUTIMESAT) || defined(HAVE_UTIMES) +# include +#elif defined(HAVE_UTIME) +# include +#endif + +#ifndef O_BINARY +# define O_BINARY 0 +#endif + +#ifndef O_NOCTTY +# define O_NOCTTY 0 +#endif + +#ifndef DOSLIKE +# include "open_stdxxx.h" +static bool warn_fchown; +#endif + + +extern void +io_init(void) +{ +#ifndef DOSLIKE + // Make sure that stdin, stdout, and and stderr are connected to + // a valid file descriptor. Exit immediatelly with exit code ERROR + // if we cannot make the file descriptors valid. Maybe we should + // print an error message, but our stderr could be screwed anyway. + open_stdxxx(E_ERROR); + + // If fchown() fails setting the owner, we warn about it only if + // we are root. + warn_fchown = geteuid() == 0; +#endif + +#ifdef __DJGPP__ + // Avoid doing useless things when statting files. + // This isn't important but doesn't hurt. + _djstat_flags = _STAT_INODE | _STAT_EXEC_EXT + | _STAT_EXEC_MAGIC | _STAT_DIRSIZE; +#endif + + return; +} + + +/// \brief Unlinks a file +/// +/// This tries to verify that the file being unlinked really is the file that +/// we want to unlink by verifying device and inode numbers. There's still +/// a small unavoidable race, but this is much better than nothing (the file +/// could have been moved/replaced even hours earlier). +static void +io_unlink(const char *name, const struct stat *known_st) +{ +#ifdef DOSLIKE + // On Windows, st_ino is meaningless, so don't bother testing it. + // Just silence a compiler warning. + (void)known_st; +#else + struct stat new_st; + + if (lstat(name, &new_st) + || new_st.st_dev != known_st->st_dev + || new_st.st_ino != known_st->st_ino) + message_error(_("%s: File seems to be moved, not removing"), + name); + else +#endif + // There's a race condition between lstat() and unlink() + // but at least we have tried to avoid removing wrong file. + if (unlink(name)) + message_error(_("%s: Cannot remove: %s"), + name, strerror(errno)); + + return; +} + + +/// \brief Copies owner/group and permissions +/// +/// \todo ACL and EA support +/// +static void +io_copy_attrs(const file_pair *pair) +{ + // Skip chown and chmod on Windows. +#ifndef DOSLIKE + // This function is more tricky than you may think at first. + // Blindly copying permissions may permit users to access the + // destination file who didn't have permission to access the + // source file. + + // Try changing the owner of the file. If we aren't root or the owner + // isn't already us, fchown() probably doesn't succeed. We warn + // about failing fchown() only if we are root. + if (fchown(pair->dest_fd, pair->src_st.st_uid, -1) && warn_fchown) + message_warning(_("%s: Cannot set the file owner: %s"), + pair->dest_name, strerror(errno)); + + mode_t mode; + + if (fchown(pair->dest_fd, -1, pair->src_st.st_gid)) { + message_warning(_("%s: Cannot set the file group: %s"), + pair->dest_name, strerror(errno)); + // We can still safely copy some additional permissions: + // `group' must be at least as strict as `other' and + // also vice versa. + // + // NOTE: After this, the owner of the source file may + // get additional permissions. This shouldn't be too bad, + // because the owner would have had permission to chmod + // the original file anyway. + mode = ((pair->src_st.st_mode & 0070) >> 3) + & (pair->src_st.st_mode & 0007); + mode = (pair->src_st.st_mode & 0700) | (mode << 3) | mode; + } else { + // Drop the setuid, setgid, and sticky bits. + mode = pair->src_st.st_mode & 0777; + } + + if (fchmod(pair->dest_fd, mode)) + message_warning(_("%s: Cannot set the file permissions: %s"), + pair->dest_name, strerror(errno)); +#endif + + // Copy the timestamps. We have several possible ways to do this, of + // which some are better in both security and precision. + // + // First, get the nanosecond part of the timestamps. As of writing, + // it's not standardized by POSIX, and there are several names for + // the same thing in struct stat. + long atime_nsec; + long mtime_nsec; + +# if defined(HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC) + // GNU and Solaris + atime_nsec = pair->src_st.st_atim.tv_nsec; + mtime_nsec = pair->src_st.st_mtim.tv_nsec; + +# elif defined(HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC) + // BSD + atime_nsec = pair->src_st.st_atimespec.tv_nsec; + mtime_nsec = pair->src_st.st_mtimespec.tv_nsec; + +# elif defined(HAVE_STRUCT_STAT_ST_ATIMENSEC) + // GNU and BSD without extensions + atime_nsec = pair->src_st.st_atimensec; + mtime_nsec = pair->src_st.st_mtimensec; + +# elif defined(HAVE_STRUCT_STAT_ST_UATIME) + // Tru64 + atime_nsec = pair->src_st.st_uatime * 1000; + mtime_nsec = pair->src_st.st_umtime * 1000; + +# elif defined(HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC) + // UnixWare + atime_nsec = pair->src_st.st_atim.st__tim.tv_nsec; + mtime_nsec = pair->src_st.st_mtim.st__tim.tv_nsec; + +# else + // Safe fallback + atime_nsec = 0; + mtime_nsec = 0; +# endif + + // Construct a structure to hold the timestamps and call appropriate + // function to set the timestamps. +#if defined(HAVE_FUTIMENS) + // Use nanosecond precision. + struct timespec tv[2]; + tv[0].tv_sec = pair->src_st.st_atime; + tv[0].tv_nsec = atime_nsec; + tv[1].tv_sec = pair->src_st.st_mtime; + tv[1].tv_nsec = mtime_nsec; + + (void)futimens(pair->dest_fd, tv); + +#elif defined(HAVE_FUTIMES) || defined(HAVE_FUTIMESAT) || defined(HAVE_UTIMES) + // Use microsecond precision. + struct timeval tv[2]; + tv[0].tv_sec = pair->src_st.st_atime; + tv[0].tv_usec = atime_nsec / 1000; + tv[1].tv_sec = pair->src_st.st_mtime; + tv[1].tv_usec = mtime_nsec / 1000; + +# if defined(HAVE_FUTIMES) + (void)futimes(pair->dest_fd, tv); +# elif defined(HAVE_FUTIMESAT) + (void)futimesat(pair->dest_fd, NULL, tv); +# else + // Argh, no function to use a file descriptor to set the timestamp. + (void)utimes(pair->dest_name, tv); +# endif + +#elif defined(HAVE_UTIME) + // Use one-second precision. utime() doesn't support using file + // descriptor either. Some systems have broken utime() prototype + // so don't make this const. + struct utimbuf buf = { + .actime = pair->src_st.st_atime, + .modtime = pair->src_st.st_mtime, + }; + + // Avoid warnings. + (void)atime_nsec; + (void)mtime_nsec; + + (void)utime(pair->dest_name, &buf); +#endif + + return; +} + + +/// Opens the source file. Returns false on success, true on error. +static bool +io_open_src(file_pair *pair) +{ + // There's nothing to open when reading from stdin. + if (pair->src_name == stdin_filename) { + pair->src_fd = STDIN_FILENO; +#ifdef DOSLIKE + setmode(STDIN_FILENO, O_BINARY); +#endif + return false; + } + + // We accept only regular files if we are writing the output + // to disk too, and if --force was not given. + const bool reg_files_only = !opt_stdout && !opt_force; + + // Flags for open() + int flags = O_RDONLY | O_BINARY | O_NOCTTY; + +#ifndef DOSLIKE + // If we accept only regular files, we need to be careful to avoid + // problems with special files like devices and FIFOs. O_NONBLOCK + // prevents blocking when opening such files. When we want to accept + // special files, we must not use O_NONBLOCK, or otherwise we won't + // block waiting e.g. FIFOs to become readable. + if (reg_files_only) + flags |= O_NONBLOCK; +#endif + +#if defined(O_NOFOLLOW) + if (reg_files_only) + flags |= O_NOFOLLOW; +#elif !defined(DOSLIKE) + // Some POSIX-like systems lack O_NOFOLLOW (it's not required + // by POSIX). Check for symlinks with a separate lstat() on + // these systems. + if (reg_files_only) { + struct stat st; + if (lstat(pair->src_name, &st)) { + message_error("%s: %s", pair->src_name, + strerror(errno)); + return true; + + } else if (S_ISLNK(st.st_mode)) { + message_warning(_("%s: Is a symbolic link, " + "skipping"), pair->src_name); + return true; + } + } +#endif + + // Try to open the file. If we are accepting non-regular files, + // unblock the caught signals so that open() can be interrupted + // if it blocks e.g. due to a FIFO file. + if (!reg_files_only) + signals_unblock(); + + // Maybe this wouldn't need a loop, since all the signal handlers for + // which we don't use SA_RESTART set user_abort to true. But it + // doesn't hurt to have it just in case. + do { + pair->src_fd = open(pair->src_name, flags); + } while (pair->src_fd == -1 && errno == EINTR && !user_abort); + + if (!reg_files_only) + signals_block(); + + if (pair->src_fd == -1) { + // If we were interrupted, don't display any error message. + if (errno == EINTR) { + // All the signals that don't have SA_RESTART + // set user_abort. + assert(user_abort); + return true; + } + +#ifdef O_NOFOLLOW + // Give an understandable error message in if reason + // for failing was that the file was a symbolic link. + // + // Note that at least Linux, OpenBSD, Solaris, and Darwin + // use ELOOP to indicate if O_NOFOLLOW was the reason + // that open() failed. Because there may be + // directories in the pathname, ELOOP may occur also + // because of a symlink loop in the directory part. + // So ELOOP doesn't tell us what actually went wrong. + // + // FreeBSD associates EMLINK with O_NOFOLLOW and + // Tru64 uses ENOTSUP. We use these directly here + // and skip the lstat() call and the associated race. + // I want to hear if there are other kernels that + // fail with something else than ELOOP with O_NOFOLLOW. + bool was_symlink = false; + +# if defined(__FreeBSD__) || defined(__DragonFly__) + if (errno == EMLINK) + was_symlink = true; + +# elif defined(__digital__) && defined(__unix__) + if (errno == ENOTSUP) + was_symlink = true; + +# elif defined(__NetBSD__) + // FIXME? As of 2008-11-20, NetBSD doesn't document what + // errno is used with O_NOFOLLOW. It seems to be EFTYPE, + // but since it isn't documented, it may be wrong to rely + // on it here. + if (errno == EFTYPE) + was_symlink = true; + +# else + if (errno == ELOOP && reg_files_only) { + const int saved_errno = errno; + struct stat st; + if (lstat(pair->src_name, &st) == 0 + && S_ISLNK(st.st_mode)) + was_symlink = true; + + errno = saved_errno; + } +# endif + + if (was_symlink) + message_warning(_("%s: Is a symbolic link, " + "skipping"), pair->src_name); + else +#endif + // Something else than O_NOFOLLOW failing + // (assuming that the race conditions didn't + // confuse us). + message_error("%s: %s", pair->src_name, + strerror(errno)); + + return true; + } + +#ifndef DOSLIKE + // Drop O_NONBLOCK, which is used only when we are accepting only + // regular files. After the open() call, we want things to block + // instead of giving EAGAIN. + if (reg_files_only) { + flags = fcntl(pair->src_fd, F_GETFL); + if (flags == -1) + goto error_msg; + + flags &= ~O_NONBLOCK; + + if (fcntl(pair->src_fd, F_SETFL, flags)) + goto error_msg; + } +#endif + + // Stat the source file. We need the result also when we copy + // the permissions, and when unlinking. + if (fstat(pair->src_fd, &pair->src_st)) + goto error_msg; + + if (S_ISDIR(pair->src_st.st_mode)) { + message_warning(_("%s: Is a directory, skipping"), + pair->src_name); + goto error; + } + + if (reg_files_only) { + if (!S_ISREG(pair->src_st.st_mode)) { + message_warning(_("%s: Not a regular file, " + "skipping"), pair->src_name); + goto error; + } + + // These are meaningless on Windows. +#ifndef DOSLIKE + if (pair->src_st.st_mode & (S_ISUID | S_ISGID)) { + // gzip rejects setuid and setgid files even + // when --force was used. bzip2 doesn't check + // for them, but calls fchown() after fchmod(), + // and many systems automatically drop setuid + // and setgid bits there. + // + // We accept setuid and setgid files if + // --force was used. We drop these bits + // explicitly in io_copy_attr(). + message_warning(_("%s: File has setuid or " + "setgid bit set, skipping"), + pair->src_name); + goto error; + } + + if (pair->src_st.st_mode & S_ISVTX) { + message_warning(_("%s: File has sticky bit " + "set, skipping"), + pair->src_name); + goto error; + } + + if (pair->src_st.st_nlink > 1) { + message_warning(_("%s: Input file has more " + "than one hard link, " + "skipping"), pair->src_name); + goto error; + } +#endif + } + + return false; + +error_msg: + message_error("%s: %s", pair->src_name, strerror(errno)); +error: + (void)close(pair->src_fd); + return true; +} + + +/// \brief Closes source file of the file_pair structure +/// +/// \param pair File whose src_fd should be closed +/// \param success If true, the file will be removed from the disk if +/// closing succeeds and --keep hasn't been used. +static void +io_close_src(file_pair *pair, bool success) +{ + if (pair->src_fd != STDIN_FILENO && pair->src_fd != -1) { +#ifdef DOSLIKE + (void)close(pair->src_fd); +#endif + + // If we are going to unlink(), do it before closing the file. + // This way there's no risk that someone replaces the file and + // happens to get same inode number, which would make us + // unlink() wrong file. + // + // NOTE: DOS-like systems are an exception to this, because + // they don't allow unlinking files that are open. *sigh* + if (success && !opt_keep_original) + io_unlink(pair->src_name, &pair->src_st); + +#ifndef DOSLIKE + (void)close(pair->src_fd); +#endif + } + + return; +} + + +static bool +io_open_dest(file_pair *pair) +{ + if (opt_stdout || pair->src_fd == STDIN_FILENO) { + // We don't modify or free() this. + pair->dest_name = (char *)"(stdout)"; + pair->dest_fd = STDOUT_FILENO; +#ifdef DOSLIKE + setmode(STDOUT_FILENO, O_BINARY); +#endif + return false; + } + + pair->dest_name = suffix_get_dest_name(pair->src_name); + if (pair->dest_name == NULL) + return true; + + // If --force was used, unlink the target file first. + if (opt_force && unlink(pair->dest_name) && errno != ENOENT) { + message_error("%s: Cannot unlink: %s", + pair->dest_name, strerror(errno)); + free(pair->dest_name); + return true; + } + + if (opt_force && unlink(pair->dest_name) && errno != ENOENT) { + message_error("%s: Cannot unlink: %s", pair->dest_name, + strerror(errno)); + free(pair->dest_name); + return true; + } + + // Open the file. + const int flags = O_WRONLY | O_BINARY | O_NOCTTY | O_CREAT | O_EXCL; + const mode_t mode = S_IRUSR | S_IWUSR; + pair->dest_fd = open(pair->dest_name, flags, mode); + + if (pair->dest_fd == -1) { + // Don't bother with error message if user requested + // us to exit anyway. + if (!user_abort) + message_error("%s: %s", pair->dest_name, + strerror(errno)); + + free(pair->dest_name); + return true; + } + + // If this really fails... well, we have a safe fallback. + if (fstat(pair->dest_fd, &pair->dest_st)) { + pair->dest_st.st_dev = 0; + pair->dest_st.st_ino = 0; + } + + return false; +} + + +/// \brief Closes destination file of the file_pair structure +/// +/// \param pair File whose dest_fd should be closed +/// \param success If false, the file will be removed from the disk. +/// +/// \return Zero if closing succeeds. On error, -1 is returned and +/// error message printed. +static int +io_close_dest(file_pair *pair, bool success) +{ + if (pair->dest_fd == -1 || pair->dest_fd == STDOUT_FILENO) + return 0; + + if (close(pair->dest_fd)) { + message_error(_("%s: Closing the file failed: %s"), + pair->dest_name, strerror(errno)); + + // Closing destination file failed, so we cannot trust its + // contents. Get rid of junk: + io_unlink(pair->dest_name, &pair->dest_st); + free(pair->dest_name); + return -1; + } + + // If the operation using this file wasn't successful, we git rid + // of the junk file. + if (!success) + io_unlink(pair->dest_name, &pair->dest_st); + + free(pair->dest_name); + + return 0; +} + + +extern file_pair * +io_open(const char *src_name) +{ + if (is_empty_filename(src_name)) + return NULL; + + // Since we have only one file open at a time, we can use + // a statically allocated structure. + static file_pair pair; + + pair = (file_pair){ + .src_name = src_name, + .dest_name = NULL, + .src_fd = -1, + .dest_fd = -1, + .src_eof = false, + }; + + // Block the signals, for which we have a custom signal handler, so + // that we don't need to worry about EINTR. + signals_block(); + + file_pair *ret = NULL; + if (!io_open_src(&pair)) { + // io_open_src() may have unblocked the signals temporarily, + // and thus user_abort may have got set even if open() + // succeeded. + if (user_abort || io_open_dest(&pair)) + io_close_src(&pair, false); + else + ret = &pair; + } + + signals_unblock(); + + return ret; +} + + +extern void +io_close(file_pair *pair, bool success) +{ + signals_block(); + + if (success && pair->dest_fd != STDOUT_FILENO) + io_copy_attrs(pair); + + // Close the destination first. If it fails, we must not remove + // the source file! + if (io_close_dest(pair, success)) + success = false; + + // Close the source file, and unlink it if the operation using this + // file pair was successful and we haven't requested to keep the + // source file. + io_close_src(pair, success); + + signals_unblock(); + + return; +} + + +extern size_t +io_read(file_pair *pair, uint8_t *buf, size_t size) +{ + // We use small buffers here. + assert(size < SSIZE_MAX); + + size_t left = size; + + while (left > 0) { + const ssize_t amount = read(pair->src_fd, buf, left); + + if (amount == 0) { + pair->src_eof = true; + break; + } + + if (amount == -1) { + if (errno == EINTR) { + if (user_abort) + return SIZE_MAX; + + continue; + } + + message_error(_("%s: Read error: %s"), + pair->src_name, strerror(errno)); + + // FIXME Is this needed? + pair->src_eof = true; + + return SIZE_MAX; + } + + buf += (size_t)(amount); + left -= (size_t)(amount); + } + + return size - left; +} + + +extern bool +io_write(const file_pair *pair, const uint8_t *buf, size_t size) +{ + assert(size < SSIZE_MAX); + + while (size > 0) { + const ssize_t amount = write(pair->dest_fd, buf, size); + if (amount == -1) { + if (errno == EINTR) { + if (user_abort) + return -1; + + continue; + } + + // Handle broken pipe specially. gzip and bzip2 + // don't print anything on SIGPIPE. In addition, + // gzip --quiet uses exit status 2 (warning) on + // broken pipe instead of whatever raise(SIGPIPE) + // would make it return. It is there to hide "Broken + // pipe" message on some old shells (probably old + // GNU bash). + // + // We don't do anything special with --quiet, which + // is what bzip2 does too. If we get SIGPIPE, we + // will handle it like other signals by setting + // user_abort, and get EPIPE here. + if (errno != EPIPE) + message_error(_("%s: Write error: %s"), + pair->dest_name, strerror(errno)); + + return true; + } + + buf += (size_t)(amount); + size -= (size_t)(amount); + } + + return false; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/file_io.h b/Build/source/extra/xz-4.999.9beta/src/xz/file_io.h new file mode 100644 index 00000000000..b0bbe11a834 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/file_io.h @@ -0,0 +1,86 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file file_io.h +/// \brief I/O types and functions +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +// Some systems have suboptimal BUFSIZ. Use a bit bigger value on them. +#if BUFSIZ <= 1024 +# define IO_BUFFER_SIZE 8192 +#else +# define IO_BUFFER_SIZE BUFSIZ +#endif + + +typedef struct { + /// Name of the source filename (as given on the command line) or + /// pointer to static "(stdin)" when reading from standard input. + const char *src_name; + + /// Destination filename converted from src_name or pointer to static + /// "(stdout)" when writing to standard output. + char *dest_name; + + /// File descriptor of the source file + int src_fd; + + /// File descriptor of the target file + int dest_fd; + + /// Stat of the source file. + struct stat src_st; + + /// Stat of the destination file. + struct stat dest_st; + + /// True once end of the source file has been detected. + bool src_eof; + +} file_pair; + + +/// \brief Initialize the I/O module +extern void io_init(void); + + +/// \brief Opens a file pair +extern file_pair *io_open(const char *src_name); + + +/// \brief Closes the file descriptors and frees possible allocated memory +/// +/// The success argument determines if source or destination file gets +/// unlinked: +/// - false: The destination file is unlinked. +/// - true: The source file is unlinked unless writing to stdout or --keep +/// was used. +extern void io_close(file_pair *pair, bool success); + + +/// \brief Reads from the source file to a buffer +/// +/// \param pair File pair having the source file open for reading +/// \param buf Destination buffer to hold the read data +/// \param size Size of the buffer; assumed be smaller than SSIZE_MAX +/// +/// \return On success, number of bytes read is returned. On end of +/// file zero is returned and pair->src_eof set to true. +/// On error, SIZE_MAX is returned and error message printed. +extern size_t io_read(file_pair *pair, uint8_t *buf, size_t size); + + +/// \brief Writes a buffer to the destination file +/// +/// \param pair File pair having the destination file open for writing +/// \param buf Buffer containing the data to be written +/// \param size Size of the buffer; assumed be smaller than SSIZE_MAX +/// +/// \return On success, zero is returned. On error, -1 is returned +/// and error message printed. +extern bool io_write(const file_pair *pair, const uint8_t *buf, size_t size); diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/hardware.c b/Build/source/extra/xz-4.999.9beta/src/xz/hardware.c new file mode 100644 index 00000000000..72dc2cb10ca --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/hardware.c @@ -0,0 +1,95 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file hardware.c +/// \brief Detection of available hardware resources +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "private.h" +#include "physmem.h" +#include "cpucores.h" + + +/// Maximum number of free *coder* threads. This can be set with +/// the --threads=NUM command line option. +static uint32_t threadlimit; + +/// Memory usage limit +static uint64_t memlimit; + + +extern void +hardware_threadlimit_set(uint32_t new_threadlimit) +{ + if (new_threadlimit == 0) { + // The default is the number of available CPU cores. + threadlimit = cpucores(); + if (threadlimit == 0) + threadlimit = 1; + } else { + threadlimit = new_threadlimit; + } + + return; +} + + +extern uint32_t +hardware_threadlimit_get(void) +{ + return threadlimit; +} + + +extern void +hardware_memlimit_set(uint64_t new_memlimit) +{ + if (new_memlimit == 0) { + // The default is 40 % of total installed physical RAM. + hardware_memlimit_set_percentage(40); + } else { + memlimit = new_memlimit; + } + + return; +} + + +extern void +hardware_memlimit_set_percentage(uint32_t percentage) +{ + assert(percentage > 0); + assert(percentage <= 100); + + uint64_t mem = physmem(); + + // If we cannot determine the amount of RAM, assume 32 MiB. Maybe + // even that is too much on some systems. But on most systems it's + // far too little, and can be annoying. + if (mem == 0) + mem = UINT64_C(32) * 1024 * 1024; + + memlimit = percentage * mem / 100; + return; +} + + +extern uint64_t +hardware_memlimit_get(void) +{ + return memlimit; +} + + +extern void +hardware_init(void) +{ + hardware_memlimit_set(0); + hardware_threadlimit_set(0); + return; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/hardware.h b/Build/source/extra/xz-4.999.9beta/src/xz/hardware.h new file mode 100644 index 00000000000..b2cf34cbc8c --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/hardware.h @@ -0,0 +1,35 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file hardware.h +/// \brief Detection of available hardware resources +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +/// Initialize some hardware-specific variables, which are needed by other +/// hardware_* functions. +extern void hardware_init(void); + + +/// Set custom value for maximum number of coder threads. +extern void hardware_threadlimit_set(uint32_t threadlimit); + +/// Get the maximum number of coder threads. Some additional helper threads +/// are allowed on top of this). +extern uint32_t hardware_threadlimit_get(void); + + +/// Set custom memory usage limit. This is used for both encoding and +/// decoding. Zero indicates resetting the limit back to defaults. +extern void hardware_memlimit_set(uint64_t memlimit); + +/// Set custom memory usage limit as a percentage of installed RAM. +/// The percentage must be in the range [1, 100]. +extern void hardware_memlimit_set_percentage(uint32_t percentage); + +/// Get the current memory usage limit. +extern uint64_t hardware_memlimit_get(void); diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/main.c b/Build/source/extra/xz-4.999.9beta/src/xz/main.c new file mode 100644 index 00000000000..4121f8d48bc --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/main.c @@ -0,0 +1,312 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file main.c +/// \brief main() +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "private.h" +#include + + +/// Exit status to use. This can be changed with set_exit_status(). +static enum exit_status_type exit_status = E_SUCCESS; + +/// True if --no-warn is specified. When this is true, we don't set +/// the exit status to E_WARNING when something worth a warning happens. +static bool no_warn = false; + + +extern void +set_exit_status(enum exit_status_type new_status) +{ + assert(new_status == E_WARNING || new_status == E_ERROR); + + if (exit_status != E_ERROR) + exit_status = new_status; + + return; +} + + +extern void +set_exit_no_warn(void) +{ + no_warn = true; + return; +} + + +extern void +my_exit(enum exit_status_type status) +{ + // Close stdout. If something goes wrong, print an error message + // to stderr. + { + const int ferror_err = ferror(stdout); + const int fclose_err = fclose(stdout); + if (ferror_err || fclose_err) { + // If it was fclose() that failed, we have the reason + // in errno. If only ferror() indicated an error, + // we have no idea what the reason was. + message(V_ERROR, "%s: %s", _("Writing to standard " + "output failed"), + fclose_err ? strerror(errno) + : _("Unknown error")); + status = E_ERROR; + } + } + + // Close stderr. If something goes wrong, there's nothing where we + // could print an error message. Just set the exit status. + { + const int ferror_err = ferror(stderr); + const int fclose_err = fclose(stderr); + if (fclose_err || ferror_err) + status = E_ERROR; + } + + // Suppress the exit status indicating a warning if --no-warn + // was specified. + if (status == E_WARNING && no_warn) + status = E_SUCCESS; + + // If we have got a signal, raise it to kill the program. + // Otherwise we just call exit(). + signals_exit(); + exit(status); +} + + +static const char * +read_name(const args_info *args) +{ + // FIXME: Maybe we should have some kind of memory usage limit here + // like the tool has for the actual compression and uncompression. + // Giving some huge text file with --files0 makes us to read the + // whole file in RAM. + static char *name = NULL; + static size_t size = 256; + + // Allocate the initial buffer. This is never freed, since after it + // is no longer needed, the program exits very soon. It is safe to + // use xmalloc() and xrealloc() in this function, because while + // executing this function, no files are open for writing, and thus + // there's no need to cleanup anything before exiting. + if (name == NULL) + name = xmalloc(size); + + // Write position in name + size_t pos = 0; + + // Read one character at a time into name. + while (!user_abort) { + const int c = fgetc(args->files_file); + + if (ferror(args->files_file)) { + // Take care of EINTR since we have established + // the signal handlers already. + if (errno == EINTR) + continue; + + message_error(_("%s: Error reading filenames: %s"), + args->files_name, strerror(errno)); + return NULL; + } + + if (feof(args->files_file)) { + if (pos != 0) + message_error(_("%s: Unexpected end of input " + "when reading filenames"), + args->files_name); + + return NULL; + } + + if (c == args->files_delim) { + // We allow consecutive newline (--files) or '\0' + // characters (--files0), and ignore such empty + // filenames. + if (pos == 0) + continue; + + // A non-empty name was read. Terminate it with '\0' + // and return it. + name[pos] = '\0'; + return name; + } + + if (c == '\0') { + // A null character was found when using --files, + // which expects plain text input separated with + // newlines. + message_error(_("%s: Null character found when " + "reading filenames; maybe you meant " + "to use `--files0' instead " + "of `--files'?"), args->files_name); + return NULL; + } + + name[pos++] = c; + + // Allocate more memory if needed. There must always be space + // at least for one character to allow terminating the string + // with '\0'. + if (pos == size) { + size *= 2; + name = xrealloc(name, size); + } + } + + return NULL; +} + + +int +main(int argc, char **argv) +{ + // Initialize the file I/O as the very first step. This makes sure + // that stdin, stdout, and stderr are something valid. + io_init(); + +#ifdef DOSLIKE + // Adjust argv[0] to make it look nicer in messages, and also to + // help the code in args.c. + { + // Strip the leading path. + char *p = argv[0] + strlen(argv[0]); + while (argv[0] < p && p[-1] != '/' && p[-1] != '\\') + --p; + + argv[0] = p; + + // Strip the .exe suffix. + p = strrchr(p, '.'); + if (p != NULL) + *p = '\0'; + + // Make it lowercase. + for (p = argv[0]; *p != '\0'; ++p) + if (*p >= 'A' && *p <= 'Z') + *p = *p - 'A' + 'a'; + } +#endif + + // Set up the locale. + setlocale(LC_ALL, ""); + +#ifdef ENABLE_NLS + // Set up the message translations too. + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + // Set the program invocation name used in various messages, and + // do other message handling related initializations. + message_init(argv[0]); + + // Set hardware-dependent default values. These can be overriden + // on the command line, thus this must be done before parse_args(). + hardware_init(); + + // Parse the command line arguments and get an array of filenames. + // This doesn't return if something is wrong with the command line + // arguments. If there are no arguments, one filename ("-") is still + // returned to indicate stdin. + args_info args; + args_parse(&args, argc, argv); + + // Tell the message handling code how many input files there are if + // we know it. This way the progress indicator can show it. + if (args.files_name != NULL) + message_set_files(0); + else + message_set_files(args.arg_count); + + // Refuse to write compressed data to standard output if it is + // a terminal and --force wasn't used. + if (opt_mode == MODE_COMPRESS && !opt_force) { + if (opt_stdout || (args.arg_count == 1 + && strcmp(args.arg_names[0], "-") == 0)) { + if (is_tty_stdout()) { + message_try_help(); + my_exit(E_ERROR); + } + } + } + + if (opt_mode == MODE_LIST) { + message_fatal("--list is not implemented yet."); + } + + // Hook the signal handlers. We don't need these before we start + // the actual action, so this is done after parsing the command + // line arguments. + signals_init(); + + // Process the files given on the command line. Note that if no names + // were given, parse_args() gave us a fake "-" filename. + for (size_t i = 0; i < args.arg_count && !user_abort; ++i) { + if (strcmp("-", args.arg_names[i]) == 0) { + // Processing from stdin to stdout. Unless --force + // was used, check that we aren't writing compressed + // data to a terminal or reading it from terminal. + if (!opt_force) { + if (opt_mode == MODE_COMPRESS) { + if (is_tty_stdout()) + continue; + } else if (is_tty_stdin()) { + continue; + } + } + + // It doesn't make sense to compress data from stdin + // if we are supposed to read filenames from stdin + // too (enabled with --files or --files0). + if (args.files_name == stdin_filename) { + message_error(_("Cannot read data from " + "standard input when " + "reading filenames " + "from standard input")); + continue; + } + + // Replace the "-" with a special pointer, which is + // recognized by coder_run() and other things. + // This way error messages get a proper filename + // string and the code still knows that it is + // handling the special case of stdin. + args.arg_names[i] = (char *)stdin_filename; + } + + // Do the actual compression or uncompression. + coder_run(args.arg_names[i]); + } + + // If --files or --files0 was used, process the filenames from the + // given file or stdin. Note that here we don't consider "-" to + // indicate stdin like we do with the command line arguments. + if (args.files_name != NULL) { + // read_name() checks for user_abort so we don't need to + // check it as loop termination condition. + while (true) { + const char *name = read_name(&args); + if (name == NULL) + break; + + // read_name() doesn't return empty names. + assert(name[0] != '\0'); + coder_run(name); + } + + if (args.files_name != stdin_filename) + (void)fclose(args.files_file); + } + + my_exit(exit_status); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/main.h b/Build/source/extra/xz-4.999.9beta/src/xz/main.h new file mode 100644 index 00000000000..8fd923930f9 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/main.h @@ -0,0 +1,37 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file main.h +/// \brief Miscellanous declarations +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +/// Possible exit status values. These are the same as used by gzip and bzip2. +enum exit_status_type { + E_SUCCESS = 0, + E_ERROR = 1, + E_WARNING = 2, +}; + + +/// Sets the exit status after a warning or error has occurred. If new_status +/// is E_WARNING and the old exit status was already E_ERROR, the exit +/// status is not changed. +extern void set_exit_status(enum exit_status_type new_status); + + +/// Use E_SUCCESS instead of E_WARNING if something worth a warning occurs +/// but nothing worth an error has occurred. This is called when --no-warn +/// is specified. +extern void set_exit_no_warn(void); + + +/// Exits the program using the given status. This takes care of closing +/// stdin, stdout, and stderr and catches possible errors. If we had got +/// a signal, this function will raise it so that to the parent process it +/// appears that we were killed by the signal sent by the user. +extern void my_exit(enum exit_status_type status) lzma_attribute((noreturn)); diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/message.c b/Build/source/extra/xz-4.999.9beta/src/xz/message.c new file mode 100644 index 00000000000..19aff9bdb41 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/message.c @@ -0,0 +1,1172 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file message.c +/// \brief Printing messages to stderr +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "private.h" + +#ifdef HAVE_SYS_TIME_H +# include +#endif + +#include + + +/// Name of the program which is prefixed to the error messages. +static const char *argv0; + +/// Number of the current file +static unsigned int files_pos = 0; + +/// Total number of input files; zero if unknown. +static unsigned int files_total; + +/// Verbosity level +static enum message_verbosity verbosity = V_WARNING; + +/// Filename which we will print with the verbose messages +static const char *filename; + +/// True once the a filename has been printed to stderr as part of progress +/// message. If automatic progress updating isn't enabled, this becomes true +/// after the first progress message has been printed due to user sending +/// SIGINFO, SIGUSR1, or SIGALRM. Once this variable is true, we will print +/// an empty line before the next filename to make the output more readable. +static bool first_filename_printed = false; + +/// This is set to true when we have printed the current filename to stderr +/// as part of a progress message. This variable is useful only if not +/// updating progress automatically: if user sends many SIGINFO, SIGUSR1, or +/// SIGALRM signals, we won't print the name of the same file multiple times. +static bool current_filename_printed = false; + +/// True if we should print progress indicator and update it automatically +/// if also verbose >= V_VERBOSE. +static bool progress_automatic; + +/// True if message_progress_start() has been called but +/// message_progress_end() hasn't been called yet. +static bool progress_started = false; + +/// This is true when a progress message was printed and the cursor is still +/// on the same line with the progress message. In that case, a newline has +/// to be printed before any error messages. +static bool progress_active = false; + +/// Pointer to lzma_stream used to do the encoding or decoding. +static lzma_stream *progress_strm; + +/// Expected size of the input stream is needed to show completion percentage +/// and estimate remaining time. +static uint64_t expected_in_size; + +/// Time when we started processing the file +static uint64_t start_time; + + +// Use alarm() and SIGALRM when they are supported. This has two minor +// advantages over the alternative of polling gettimeofday(): +// - It is possible for the user to send SIGINFO, SIGUSR1, or SIGALRM to +// get intermediate progress information even when --verbose wasn't used +// or stderr is not a terminal. +// - alarm() + SIGALRM seems to have slightly less overhead than polling +// gettimeofday(). +#ifdef SIGALRM + +/// The signal handler for SIGALRM sets this to true. It is set back to false +/// once the progress message has been updated. +static volatile sig_atomic_t progress_needs_updating = false; + +/// Signal handler for SIGALRM +static void +progress_signal_handler(int sig lzma_attribute((unused))) +{ + progress_needs_updating = true; + return; +} + +#else + +/// This is true when progress message printing is wanted. Using the same +/// variable name as above to avoid some ifdefs. +static bool progress_needs_updating = false; + +/// Elapsed time when the next progress message update should be done. +static uint64_t progress_next_update; + +#endif + + +/// Get the current time as microseconds since epoch +static uint64_t +my_time(void) +{ + struct timeval tv; + gettimeofday(&tv, NULL); + return (uint64_t)(tv.tv_sec) * UINT64_C(1000000) + tv.tv_usec; +} + + +/// Wrapper for snprintf() to help constructing a string in pieces. +static void lzma_attribute((format(printf, 3, 4))) +my_snprintf(char **pos, size_t *left, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + const int len = vsnprintf(*pos, *left, fmt, ap); + va_end(ap); + + // If an error occurred, we want the caller to think that the whole + // buffer was used. This way no more data will be written to the + // buffer. We don't need better error handling here. + if (len < 0 || (size_t)(len) >= *left) { + *left = 0; + } else { + *pos += len; + *left -= len; + } + + return; +} + + +extern void +message_init(const char *given_argv0) +{ + // Name of the program + argv0 = given_argv0; + + // If --verbose is used, we use a progress indicator if and only + // if stderr is a terminal. If stderr is not a terminal, we print + // verbose information only after finishing the file. As a special + // exception, even if --verbose was not used, user can send SIGALRM + // to make us print progress information once without automatic + // updating. + progress_automatic = isatty(STDERR_FILENO); + + // Commented out because COLUMNS is rarely exported to environment. + // Most users have at least 80 columns anyway, let's think something + // fancy here if enough people complain. +/* + if (progress_automatic) { + // stderr is a terminal. Check the COLUMNS environment + // variable to see if the terminal is wide enough. If COLUMNS + // doesn't exist or it has some unparseable value, we assume + // that the terminal is wide enough. + const char *columns_str = getenv("COLUMNS"); + if (columns_str != NULL) { + char *endptr; + const long columns = strtol(columns_str, &endptr, 10); + if (*endptr != '\0' || columns < 80) + progress_automatic = false; + } + } +*/ + +#ifdef SIGALRM + // At least DJGPP lacks SA_RESTART. It's not essential for us (the + // rest of the code can handle interrupted system calls), so just + // define it zero. +# ifndef SA_RESTART +# define SA_RESTART 0 +# endif + // Establish the signal handlers which set a flag to tell us that + // progress info should be updated. Since these signals don't + // require any quick action, we set SA_RESTART. + static const int sigs[] = { +#ifdef SIGALRM + SIGALRM, +#endif +#ifdef SIGINFO + SIGINFO, +#endif +#ifdef SIGUSR1 + SIGUSR1, +#endif + }; + + struct sigaction sa; + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + sa.sa_handler = &progress_signal_handler; + + for (size_t i = 0; i < ARRAY_SIZE(sigs); ++i) + if (sigaction(sigs[i], &sa, NULL)) + message_signal_handler(); +#endif + + return; +} + + +extern void +message_verbosity_increase(void) +{ + if (verbosity < V_DEBUG) + ++verbosity; + + return; +} + + +extern void +message_verbosity_decrease(void) +{ + if (verbosity > V_SILENT) + --verbosity; + + return; +} + + +extern void +message_set_files(unsigned int files) +{ + files_total = files; + return; +} + + +/// Prints the name of the current file if it hasn't been printed already, +/// except if we are processing exactly one stream from stdin to stdout. +/// I think it looks nicer to not print "(stdin)" when --verbose is used +/// in a pipe and no other files are processed. +static void +print_filename(void) +{ + if (!current_filename_printed + && (files_total != 1 || filename != stdin_filename)) { + signals_block(); + + // If a file was already processed, put an empty line + // before the next filename to improve readability. + if (first_filename_printed) + fputc('\n', stderr); + + first_filename_printed = true; + current_filename_printed = true; + + // If we don't know how many files there will be due + // to usage of --files or --files0. + if (files_total == 0) + fprintf(stderr, "%s (%u)\n", filename, + files_pos); + else + fprintf(stderr, "%s (%u/%u)\n", filename, + files_pos, files_total); + + signals_unblock(); + } + + return; +} + + +extern void +message_progress_start( + lzma_stream *strm, const char *src_name, uint64_t in_size) +{ + // Store the pointer to the lzma_stream used to do the coding. + // It is needed to find out the position in the stream. + progress_strm = strm; + + // Store the processing start time of the file and its expected size. + // If we aren't printing any statistics, then these are unused. But + // since it is possible that the user sends us a signal to show + // statistics, we need to have these available anyway. + start_time = my_time(); + filename = src_name; + expected_in_size = in_size; + + // Indicate that progress info may need to be printed before + // printing error messages. + progress_started = true; + + // Indicate the name of this file hasn't been printed to + // stderr yet. + current_filename_printed = false; + + // Start numbering the files starting from one. + ++files_pos; + + // If progress indicator is wanted, print the filename and possibly + // the file count now. + if (verbosity >= V_VERBOSE && progress_automatic) { + // Print the filename to stderr if that is appropriate with + // the current settings. + print_filename(); + + // Start the timer to display the first progress message + // after one second. An alternative would be to show the + // first message almost immediatelly, but delaying by one + // second looks better to me, since extremely early + // progress info is pretty much useless. +#ifdef SIGALRM + // First disable a possibly existing alarm. + alarm(0); + progress_needs_updating = false; + alarm(1); +#else + progress_needs_updating = true; + progress_next_update = 1000000; +#endif + } + + return; +} + + +/// Make the string indicating completion percentage. +static const char * +progress_percentage(uint64_t in_pos, bool final) +{ + static char buf[sizeof("100.0 %")]; + + double percentage; + + if (final) { + // Use floating point conversion of snprintf() also for + // 100.0 % instead of fixed string, because the decimal + // separator isn't a dot in all locales. + percentage = 100.0; + } else { + // If the size of the input file is unknown or the size told us is + // clearly wrong since we have processed more data than the alleged + // size of the file, show a static string indicating that we have + // no idea of the completion percentage. + if (expected_in_size == 0 || in_pos > expected_in_size) + return "--- %"; + + // Never show 100.0 % before we actually are finished. + percentage = (double)(in_pos) / (double)(expected_in_size) + * 99.9; + } + + snprintf(buf, sizeof(buf), "%.1f %%", percentage); + + return buf; +} + + +static void +progress_sizes_helper(char **pos, size_t *left, uint64_t value, bool final) +{ + // Allow high precision only for the final message, since it looks + // stupid for in-progress information. + if (final) { + // At maximum of four digits is allowed for exact byte count. + if (value < 10000) { + my_snprintf(pos, left, "%s B", + uint64_to_str(value, 0)); + return; + } + + // At maximum of five significant digits is allowed for KiB. + if (value < UINT64_C(10239900)) { + my_snprintf(pos, left, "%s KiB", double_to_str( + (double)(value) / 1024.0)); + return; + } + } + + // Otherwise we use MiB. + my_snprintf(pos, left, "%s MiB", + double_to_str((double)(value) / (1024.0 * 1024.0))); + + return; +} + + +/// Make the string containing the amount of input processed, amount of +/// output produced, and the compression ratio. +static const char * +progress_sizes(uint64_t compressed_pos, uint64_t uncompressed_pos, bool final) +{ + // This is enough to hold sizes up to about 99 TiB if thousand + // separator is used, or about 1 PiB without thousand separator. + // After that the progress indicator will look a bit silly, since + // the compression ratio no longer fits with three decimal places. + static char buf[44]; + + char *pos = buf; + size_t left = sizeof(buf); + + // Print the sizes. If this the final message, use more reasonable + // units than MiB if the file was small. + progress_sizes_helper(&pos, &left, compressed_pos, final); + my_snprintf(&pos, &left, " / "); + progress_sizes_helper(&pos, &left, uncompressed_pos, final); + + // Avoid division by zero. If we cannot calculate the ratio, set + // it to some nice number greater than 10.0 so that it gets caught + // in the next if-clause. + const double ratio = uncompressed_pos > 0 + ? (double)(compressed_pos) / (double)(uncompressed_pos) + : 16.0; + + // If the ratio is very bad, just indicate that it is greater than + // 9.999. This way the length of the ratio field stays fixed. + if (ratio > 9.999) + snprintf(pos, left, " > %.3f", 9.999); + else + snprintf(pos, left, " = %.3f", ratio); + + return buf; +} + + +/// Make the string containing the processing speed of uncompressed data. +static const char * +progress_speed(uint64_t uncompressed_pos, uint64_t elapsed) +{ + // Don't print the speed immediatelly, since the early values look + // like somewhat random. + if (elapsed < 3000000) + return ""; + + static const char unit[][8] = { + "KiB/s", + "MiB/s", + "GiB/s", + }; + + size_t unit_index = 0; + + // Calculate the speed as KiB/s. + double speed = (double)(uncompressed_pos) + / ((double)(elapsed) * (1024.0 / 1e6)); + + // Adjust the unit of the speed if needed. + while (speed > 999.0) { + speed /= 1024.0; + if (++unit_index == ARRAY_SIZE(unit)) + return ""; // Way too fast ;-) + } + + // Use decimal point only if the number is small. Examples: + // - 0.1 KiB/s + // - 9.9 KiB/s + // - 99 KiB/s + // - 999 KiB/s + static char buf[sizeof("999 GiB/s")]; + snprintf(buf, sizeof(buf), "%.*f %s", + speed > 9.9 ? 0 : 1, speed, unit[unit_index]); + return buf; +} + + +/// Make a string indicating elapsed or remaining time. The format is either +/// M:SS or H:MM:SS depending on if the time is an hour or more. +static const char * +progress_time(uint64_t useconds) +{ + // 9999 hours = 416 days + static char buf[sizeof("9999:59:59")]; + + uint32_t seconds = useconds / 1000000; + + // Don't show anything if the time is zero or ridiculously big. + if (seconds == 0 || seconds > ((9999 * 60) + 59) * 60 + 59) + return ""; + + uint32_t minutes = seconds / 60; + seconds %= 60; + + if (minutes >= 60) { + const uint32_t hours = minutes / 60; + minutes %= 60; + snprintf(buf, sizeof(buf), + "%" PRIu32 ":%02" PRIu32 ":%02" PRIu32, + hours, minutes, seconds); + } else { + snprintf(buf, sizeof(buf), "%" PRIu32 ":%02" PRIu32, + minutes, seconds); + } + + return buf; +} + + +/// Make the string to contain the estimated remaining time, or if the amount +/// of input isn't known, how much time has elapsed. +static const char * +progress_remaining(uint64_t in_pos, uint64_t elapsed) +{ + // Show the amount of time spent so far when making an estimate of + // remaining time wouldn't be reasonable: + // - Input size is unknown. + // - Input has grown bigger since we started (de)compressing. + // - We haven't processed much data yet, so estimate would be + // too inaccurate. + // - Only a few seconds has passed since we started (de)compressing, + // so estimate would be too inaccurate. + if (expected_in_size == 0 || in_pos > expected_in_size + || in_pos < (UINT64_C(1) << 19) || elapsed < 8000000) + return progress_time(elapsed); + + // Calculate the estimate. Don't give an estimate of zero seconds, + // since it is possible that all the input has been already passed + // to the library, but there is still quite a bit of output pending. + uint32_t remaining = (double)(expected_in_size - in_pos) + * ((double)(elapsed) / 1e6) / (double)(in_pos); + if (remaining < 1) + remaining = 1; + + static char buf[sizeof("9 h 55 min")]; + + // Select appropriate precision for the estimated remaining time. + if (remaining <= 10) { + // At maximum of 10 seconds remaining. + // Show the number of seconds as is. + snprintf(buf, sizeof(buf), "%" PRIu32 " s", remaining); + + } else if (remaining <= 50) { + // At maximum of 50 seconds remaining. + // Round up to the next multiple of five seconds. + remaining = (remaining + 4) / 5 * 5; + snprintf(buf, sizeof(buf), "%" PRIu32 " s", remaining); + + } else if (remaining <= 590) { + // At maximum of 9 minutes and 50 seconds remaining. + // Round up to the next multiple of ten seconds. + remaining = (remaining + 9) / 10 * 10; + snprintf(buf, sizeof(buf), "%" PRIu32 " min %" PRIu32 " s", + remaining / 60, remaining % 60); + + } else if (remaining <= 59 * 60) { + // At maximum of 59 minutes remaining. + // Round up to the next multiple of a minute. + remaining = (remaining + 59) / 60; + snprintf(buf, sizeof(buf), "%" PRIu32 " min", remaining); + + } else if (remaining <= 9 * 3600 + 50 * 60) { + // At maximum of 9 hours and 50 minutes left. + // Round up to the next multiple of ten minutes. + remaining = (remaining + 599) / 600 * 10; + snprintf(buf, sizeof(buf), "%" PRIu32 " h %" PRIu32 " min", + remaining / 60, remaining % 60); + + } else if (remaining <= 23 * 3600) { + // At maximum of 23 hours remaining. + // Round up to the next multiple of an hour. + remaining = (remaining + 3599) / 3600; + snprintf(buf, sizeof(buf), "%" PRIu32 " h", remaining); + + } else if (remaining <= 9 * 24 * 3600 + 23 * 3600) { + // At maximum of 9 days and 23 hours remaining. + // Round up to the next multiple of an hour. + remaining = (remaining + 3599) / 3600; + snprintf(buf, sizeof(buf), "%" PRIu32 " d %" PRIu32 " h", + remaining / 24, remaining % 24); + + } else if (remaining <= 999 * 24 * 3600) { + // At maximum of 999 days remaining. ;-) + // Round up to the next multiple of a day. + remaining = (remaining + 24 * 3600 - 1) / (24 * 3600); + snprintf(buf, sizeof(buf), "%" PRIu32 " d", remaining); + + } else { + // The estimated remaining time is so big that it's better + // that we just show the elapsed time. + return progress_time(elapsed); + } + + return buf; +} + + +/// Calculate the elapsed time as microseconds. +static uint64_t +progress_elapsed(void) +{ + return my_time() - start_time; +} + + +/// Get information about position in the stream. This is currently simple, +/// but it will become more complicated once we have multithreading support. +static void +progress_pos(uint64_t *in_pos, + uint64_t *compressed_pos, uint64_t *uncompressed_pos) +{ + *in_pos = progress_strm->total_in; + + if (opt_mode == MODE_COMPRESS) { + *compressed_pos = progress_strm->total_out; + *uncompressed_pos = progress_strm->total_in; + } else { + *compressed_pos = progress_strm->total_in; + *uncompressed_pos = progress_strm->total_out; + } + + return; +} + + +extern void +message_progress_update(void) +{ + if (!progress_needs_updating) + return; + + // Calculate how long we have been processing this file. + const uint64_t elapsed = progress_elapsed(); + +#ifndef SIGALRM + if (progress_next_update > elapsed) + return; + + progress_next_update = elapsed + 1000000; +#endif + + // Get our current position in the stream. + uint64_t in_pos; + uint64_t compressed_pos; + uint64_t uncompressed_pos; + progress_pos(&in_pos, &compressed_pos, &uncompressed_pos); + + // Block signals so that fprintf() doesn't get interrupted. + signals_block(); + + // Print the filename if it hasn't been printed yet. + print_filename(); + + // Print the actual progress message. The idea is that there is at + // least three spaces between the fields in typical situations, but + // even in rare situations there is at least one space. + fprintf(stderr, " %7s %43s %9s %10s\r", + progress_percentage(in_pos, false), + progress_sizes(compressed_pos, uncompressed_pos, false), + progress_speed(uncompressed_pos, elapsed), + progress_remaining(in_pos, elapsed)); + +#ifdef SIGALRM + // Updating the progress info was finished. Reset + // progress_needs_updating to wait for the next SIGALRM. + // + // NOTE: This has to be done before alarm(1) or with (very) bad + // luck we could be setting this to false after the alarm has already + // been triggered. + progress_needs_updating = false; + + if (verbosity >= V_VERBOSE && progress_automatic) { + // Mark that the progress indicator is active, so if an error + // occurs, the error message gets printed cleanly. + progress_active = true; + + // Restart the timer so that progress_needs_updating gets + // set to true after about one second. + alarm(1); + } else { + // The progress message was printed because user had sent us + // SIGALRM. In this case, each progress message is printed + // on its own line. + fputc('\n', stderr); + } +#else + // When SIGALRM isn't supported and we get here, it's always due to + // automatic progress update. We set progress_active here too like + // described above. + assert(verbosity >= V_VERBOSE); + assert(progress_automatic); + progress_active = true; +#endif + + signals_unblock(); + + return; +} + + +static void +progress_flush(bool finished) +{ + if (!progress_started || verbosity < V_VERBOSE) + return; + + uint64_t in_pos; + uint64_t compressed_pos; + uint64_t uncompressed_pos; + progress_pos(&in_pos, &compressed_pos, &uncompressed_pos); + + // Avoid printing intermediate progress info if some error occurs + // in the beginning of the stream. (If something goes wrong later in + // the stream, it is sometimes useful to tell the user where the + // error approximately occurred, especially if the error occurs + // after a time-consuming operation.) + if (!finished && !progress_active + && (compressed_pos == 0 || uncompressed_pos == 0)) + return; + + progress_active = false; + + const uint64_t elapsed = progress_elapsed(); + const char *elapsed_str = progress_time(elapsed); + + signals_block(); + + // When using the auto-updating progress indicator, the final + // statistics are printed in the same format as the progress + // indicator itself. + if (progress_automatic) { + // Using floating point conversion for the percentage instead + // of static "100.0 %" string, because the decimal separator + // isn't a dot in all locales. + fprintf(stderr, " %7s %43s %9s %10s\n", + progress_percentage(in_pos, finished), + progress_sizes(compressed_pos, uncompressed_pos, true), + progress_speed(uncompressed_pos, elapsed), + elapsed_str); + } else { + // The filename is always printed. + fprintf(stderr, "%s: ", filename); + + // Percentage is printed only if we didn't finish yet. + // FIXME: This may look weird when size of the input + // isn't known. + if (!finished) + fprintf(stderr, "%s, ", + progress_percentage(in_pos, false)); + + // Size information is always printed. + fprintf(stderr, "%s", progress_sizes( + compressed_pos, uncompressed_pos, true)); + + // The speed and elapsed time aren't always shown. + const char *speed = progress_speed(uncompressed_pos, elapsed); + if (speed[0] != '\0') + fprintf(stderr, ", %s", speed); + + if (elapsed_str[0] != '\0') + fprintf(stderr, ", %s", elapsed_str); + + fputc('\n', stderr); + } + + signals_unblock(); + + return; +} + + +extern void +message_progress_end(bool success) +{ + assert(progress_started); + progress_flush(success); + progress_started = false; + return; +} + + +static void +vmessage(enum message_verbosity v, const char *fmt, va_list ap) +{ + if (v <= verbosity) { + signals_block(); + + progress_flush(false); + + fprintf(stderr, "%s: ", argv0); + vfprintf(stderr, fmt, ap); + fputc('\n', stderr); + + signals_unblock(); + } + + return; +} + + +extern void +message(enum message_verbosity v, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vmessage(v, fmt, ap); + va_end(ap); + return; +} + + +extern void +message_warning(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vmessage(V_WARNING, fmt, ap); + va_end(ap); + + set_exit_status(E_WARNING); + return; +} + + +extern void +message_error(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vmessage(V_ERROR, fmt, ap); + va_end(ap); + + set_exit_status(E_ERROR); + return; +} + + +extern void +message_fatal(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vmessage(V_ERROR, fmt, ap); + va_end(ap); + + my_exit(E_ERROR); +} + + +extern void +message_bug(void) +{ + message_fatal(_("Internal error (bug)")); +} + + +extern void +message_signal_handler(void) +{ + message_fatal(_("Cannot establish signal handlers")); +} + + +extern const char * +message_strm(lzma_ret code) +{ + switch (code) { + case LZMA_NO_CHECK: + return _("No integrity check; not verifying file integrity"); + + case LZMA_UNSUPPORTED_CHECK: + return _("Unsupported type of integrity check; " + "not verifying file integrity"); + + case LZMA_MEM_ERROR: + return strerror(ENOMEM); + + case LZMA_MEMLIMIT_ERROR: + return _("Memory usage limit reached"); + + case LZMA_FORMAT_ERROR: + return _("File format not recognized"); + + case LZMA_OPTIONS_ERROR: + return _("Unsupported options"); + + case LZMA_DATA_ERROR: + return _("Compressed data is corrupt"); + + case LZMA_BUF_ERROR: + return _("Unexpected end of input"); + + case LZMA_OK: + case LZMA_STREAM_END: + case LZMA_GET_CHECK: + case LZMA_PROG_ERROR: + return _("Internal error (bug)"); + } + + return NULL; +} + + +extern void +message_filters(enum message_verbosity v, const lzma_filter *filters) +{ + if (v > verbosity) + return; + + fprintf(stderr, _("%s: Filter chain:"), argv0); + + for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) { + fprintf(stderr, " --"); + + switch (filters[i].id) { + case LZMA_FILTER_LZMA1: + case LZMA_FILTER_LZMA2: { + const lzma_options_lzma *opt = filters[i].options; + const char *mode; + const char *mf; + + switch (opt->mode) { + case LZMA_MODE_FAST: + mode = "fast"; + break; + + case LZMA_MODE_NORMAL: + mode = "normal"; + break; + + default: + mode = "UNKNOWN"; + break; + } + + switch (opt->mf) { + case LZMA_MF_HC3: + mf = "hc3"; + break; + + case LZMA_MF_HC4: + mf = "hc4"; + break; + + case LZMA_MF_BT2: + mf = "bt2"; + break; + + case LZMA_MF_BT3: + mf = "bt3"; + break; + + case LZMA_MF_BT4: + mf = "bt4"; + break; + + default: + mf = "UNKNOWN"; + break; + } + + fprintf(stderr, "lzma%c=dict=%" PRIu32 + ",lc=%" PRIu32 ",lp=%" PRIu32 + ",pb=%" PRIu32 + ",mode=%s,nice=%" PRIu32 ",mf=%s" + ",depth=%" PRIu32, + filters[i].id == LZMA_FILTER_LZMA2 + ? '2' : '1', + opt->dict_size, + opt->lc, opt->lp, opt->pb, + mode, opt->nice_len, mf, opt->depth); + break; + } + + case LZMA_FILTER_X86: + fprintf(stderr, "x86"); + break; + + case LZMA_FILTER_POWERPC: + fprintf(stderr, "powerpc"); + break; + + case LZMA_FILTER_IA64: + fprintf(stderr, "ia64"); + break; + + case LZMA_FILTER_ARM: + fprintf(stderr, "arm"); + break; + + case LZMA_FILTER_ARMTHUMB: + fprintf(stderr, "armthumb"); + break; + + case LZMA_FILTER_SPARC: + fprintf(stderr, "sparc"); + break; + + case LZMA_FILTER_DELTA: { + const lzma_options_delta *opt = filters[i].options; + fprintf(stderr, "delta=dist=%" PRIu32, opt->dist); + break; + } + + default: + fprintf(stderr, "UNKNOWN"); + break; + } + } + + fputc('\n', stderr); + return; +} + + +extern void +message_try_help(void) +{ + // Print this with V_WARNING instead of V_ERROR to prevent it from + // showing up when --quiet has been specified. + message(V_WARNING, _("Try `%s --help' for more information."), argv0); + return; +} + + +extern void +message_version(void) +{ + // It is possible that liblzma version is different than the command + // line tool version, so print both. + printf("xz (" PACKAGE_NAME ") " LZMA_VERSION_STRING "\n"); + printf("liblzma %s\n", lzma_version_string()); + my_exit(E_SUCCESS); +} + + +extern void +message_help(bool long_help) +{ + printf(_("Usage: %s [OPTION]... [FILE]...\n" + "Compress or decompress FILEs in the .xz format.\n\n"), + argv0); + + puts(_("Mandatory arguments to long options are mandatory for " + "short options too.\n")); + + if (long_help) + puts(_(" Operation mode:\n")); + + puts(_( +" -z, --compress force compression\n" +" -d, --decompress force decompression\n" +" -t, --test test compressed file integrity\n" +" -l, --list list information about files")); + + if (long_help) + puts(_("\n Operation modifiers:\n")); + + puts(_( +" -k, --keep keep (don't delete) input files\n" +" -f, --force force overwrite of output file and (de)compress links\n" +" -c, --stdout write to standard output and don't delete input files")); + + if (long_help) + puts(_( +" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" +" --files=[FILE] read filenames to process from FILE; if FILE is\n" +" omitted, filenames are read from the standard input;\n" +" filenames must be terminated with the newline character\n" +" --files0=[FILE] like --files but use the null character as terminator")); + + if (long_help) { + puts(_("\n Basic file format and compression options:\n")); + puts(_( +" -F, --format=FMT file format to encode or decode; possible values are\n" +" `auto' (default), `xz', `lzma', and `raw'\n" +" -C, --check=CHECK integrity check type: `crc32', `crc64' (default),\n" +" or `sha256'")); + } + + puts(_( +" -0 .. -9 compression preset; 0-2 fast compression, 3-5 good\n" +" compression, 6-9 excellent compression; default is 6")); + + puts(_( +" -e, --extreme use more CPU time when encoding to increase compression\n" +" ratio without increasing memory usage of the decoder")); + + if (long_help) + puts(_( +" -M, --memory=NUM use roughly NUM bytes of memory at maximum; 0 indicates\n" +" the default setting, which depends on the operation mode\n" +" and the amount of physical memory (RAM)")); + + if (long_help) { + puts(_( +"\n Custom filter chain for compression (alternative for using presets):")); + +#if defined(HAVE_ENCODER_LZMA1) || defined(HAVE_DECODER_LZMA1) \ + || defined(HAVE_ENCODER_LZMA2) || defined(HAVE_DECODER_LZMA2) + puts(_( +"\n" +" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" +" --lzma2[=OPTS] more of the following options (valid values; default):\n" +" preset=NUM reset options to preset number NUM (0-9)\n" +" dict=NUM dictionary size (4KiB - 1536MiB; 8MiB)\n" +" lc=NUM number of literal context bits (0-4; 3)\n" +" lp=NUM number of literal position bits (0-4; 0)\n" +" pb=NUM number of position bits (0-4; 2)\n" +" mode=MODE compression mode (fast, normal; normal)\n" +" nice=NUM nice length of a match (2-273; 64)\n" +" mf=NAME match finder (hc3, hc4, bt2, bt3, bt4; bt4)\n" +" depth=NUM maximum search depth; 0=automatic (default)")); +#endif + + puts(_( +"\n" +" --x86[=OPTS] x86 BCJ filter\n" +" --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" +" --ia64[=OPTS] IA64 (Itanium) BCJ filter\n" +" --arm[=OPTS] ARM BCJ filter (little endian only)\n" +" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" +" --sparc[=OPTS] SPARC BCJ filter\n" +" Valid OPTS for all BCJ filters:\n" +" start=NUM start offset for conversions (default=0)")); + +#if defined(HAVE_ENCODER_DELTA) || defined(HAVE_DECODER_DELTA) + puts(_( +"\n" +" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" +" dist=NUM distance between bytes being subtracted\n" +" from each other (1-256; 1)")); +#endif + +#if defined(HAVE_ENCODER_SUBBLOCK) || defined(HAVE_DECODER_SUBBLOCK) + puts(_( +"\n" +" --subblock[=OPTS] Subblock filter; valid OPTS (valid values; default):\n" +" size=NUM number of bytes of data per subblock\n" +" (1 - 256Mi; 4Ki)\n" +" rle=NUM run-length encoder chunk size (0-256; 0)")); +#endif + } + + if (long_help) + puts(_("\n Other options:\n")); + + puts(_( +" -q, --quiet suppress warnings; specify twice to suppress errors too\n" +" -v, --verbose be verbose; specify twice for even more verbose")); + + if (long_help) + puts(_( +" -Q, --no-warn make warnings not affect the exit status")); + + if (long_help) + puts(_( +"\n" +" -h, --help display the short help (lists only the basic options)\n" +" -H, --long-help display this long help")); + else + puts(_( +" -h, --help display this short help\n" +" -H, --long-help display the long help (lists also the advanced options)")); + + puts(_( +" -V, --version display the version number")); + + puts(_("\nWith no FILE, or when FILE is -, read standard input.\n")); + + if (long_help) { + printf(_( +"On this system and configuration, this program will use at maximum of roughly\n" +"%s MiB RAM and "), uint64_to_str(hardware_memlimit_get() / (1024 * 1024), 0)); + printf(N_("one thread.\n\n", "%s threads.\n\n", + hardware_threadlimit_get()), + uint64_to_str(hardware_threadlimit_get(), 0)); + } + + printf(_("Report bugs to <%s> (in English or Finnish).\n"), + PACKAGE_BUGREPORT); + printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_HOMEPAGE); + + my_exit(E_SUCCESS); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/message.h b/Build/source/extra/xz-4.999.9beta/src/xz/message.h new file mode 100644 index 00000000000..16e38b757cf --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/message.h @@ -0,0 +1,132 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file message.h +/// \brief Printing messages to stderr +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +/// Verbosity levels +enum message_verbosity { + V_SILENT, ///< No messages + V_ERROR, ///< Only error messages + V_WARNING, ///< Errors and warnings + V_VERBOSE, ///< Errors, warnings, and verbose statistics + V_DEBUG, ///< Debugging, FIXME remove? +}; + + +/// \brief Initializes the message functions +/// +/// \param argv0 Name of the program i.e. argv[0] from main() +/// \param verbosity Verbosity level +/// +/// If an error occurs, this function doesn't return. +/// +extern void message_init(const char *argv0); + + +/// Increase verbosity level by one step unless it was at maximum. +extern void message_verbosity_increase(void); + +/// Decrease verbosity level by one step unless it was at minimum. +extern void message_verbosity_decrease(void); + + +/// Set the total number of files to be processed (stdin is counted as a file +/// here). The default is one. +extern void message_set_files(unsigned int files); + + +/// \brief Print a message if verbosity level is at least "verbosity" +/// +/// This doesn't touch the exit status. +extern void message(enum message_verbosity verbosity, const char *fmt, ...) + lzma_attribute((format(printf, 2, 3))); + + +/// \brief Prints a warning and possibly sets exit status +/// +/// The message is printed only if verbosity level is at least V_WARNING. +/// The exit status is set to WARNING unless it was already at ERROR. +extern void message_warning(const char *fmt, ...) + lzma_attribute((format(printf, 1, 2))); + + +/// \brief Prints an error message and sets exit status +/// +/// The message is printed only if verbosity level is at least V_ERROR. +/// The exit status is set to ERROR. +extern void message_error(const char *fmt, ...) + lzma_attribute((format(printf, 1, 2))); + + +/// \brief Prints an error message and exits with EXIT_ERROR +/// +/// The message is printed only if verbosity level is at least V_ERROR. +extern void message_fatal(const char *fmt, ...) + lzma_attribute((format(printf, 1, 2))) + lzma_attribute((noreturn)); + + +/// Print an error message that an internal error occurred and exit with +/// EXIT_ERROR. +extern void message_bug(void) lzma_attribute((noreturn)); + + +/// Print a message that establishing signal handlers failed, and exit with +/// exit status ERROR. +extern void message_signal_handler(void) lzma_attribute((noreturn)); + + +/// Convert lzma_ret to a string. +extern const char *message_strm(lzma_ret code); + + +/// Print the filter chain. +extern void message_filters( + enum message_verbosity v, const lzma_filter *filters); + + +/// Print a message that user should try --help. +extern void message_try_help(void); + + +/// Prints the version number to stdout and exits with exit status SUCCESS. +extern void message_version(void) lzma_attribute((noreturn)); + + +/// Print the help message. +extern void message_help(bool long_help) lzma_attribute((noreturn)); + + +/// \brief Start progress info handling +/// +/// This must be paired with a call to message_progress_end() before the +/// given *strm becomes invalid. +/// +/// \param strm Pointer to lzma_stream used for the coding. +/// \param filename Name of the input file. stdin_filename is +/// handled specially. +/// \param in_size Size of the input file, or zero if unknown. +/// +extern void message_progress_start( + lzma_stream *strm, const char *filename, uint64_t in_size); + + +/// Update the progress info if in verbose mode and enough time has passed +/// since the previous update. This can be called only when +/// message_progress_start() has already been used. +extern void message_progress_update(void); + + +/// \brief Finishes the progress message if we were in verbose mode +/// +/// \param finished True if the whole stream was successfully coded +/// and output written to the output stream. +/// +extern void message_progress_end(bool finished); diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/options.c b/Build/source/extra/xz-4.999.9beta/src/xz/options.c new file mode 100644 index 00000000000..8ac6750403f --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/options.c @@ -0,0 +1,438 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file options.c +/// \brief Parser for filter-specific options +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "private.h" + + +/////////////////// +// Generic stuff // +/////////////////// + +typedef struct { + const char *name; + uint64_t id; +} name_id_map; + + +typedef struct { + const char *name; + const name_id_map *map; + uint64_t min; + uint64_t max; +} option_map; + + +/// Parses option=value pairs that are separated with colons, semicolons, +/// or commas: opt=val:opt=val;opt=val,opt=val +/// +/// Each option is a string, that is converted to an integer using the +/// index where the option string is in the array. +/// +/// Value can be +/// - a string-id map mapping a list of possible string values to integers +/// (opts[i].map != NULL, opts[i].min and opts[i].max are ignored); +/// - a number with minimum and maximum value limit +/// (opts[i].map == NULL && opts[i].min != UINT64_MAX); +/// - a string that will be parsed by the filter-specific code +/// (opts[i].map == NULL && opts[i].min == UINT64_MAX, opts[i].max ignored) +/// +/// When parsing both option and value succeed, a filter-specific function +/// is called, which should update the given value to filter-specific +/// options structure. +/// +/// \param str String containing the options from the command line +/// \param opts Filter-specific option map +/// \param set Filter-specific function to update filter_options +/// \param filter_options Pointer to filter-specific options structure +/// +/// \return Returns only if no errors occur. +/// +static void +parse_options(const char *str, const option_map *opts, + void (*set)(void *filter_options, + uint32_t key, uint64_t value, const char *valuestr), + void *filter_options) +{ + if (str == NULL || str[0] == '\0') + return; + + char *s = xstrdup(str); + char *name = s; + + while (true) { + if (*name == ',') { + if (*++name == '\0') + break; + + continue; + } + + char *split = strchr(name, ','); + if (split != NULL) + *split = '\0'; + + char *value = strchr(name, '='); + if (value != NULL) + *value++ = '\0'; + + if (value == NULL || value[0] == '\0') + message_fatal(_("%s: Options must be `name=value' " + "pairs separated with commas"), str); + + // Look for the option name from the option map. + bool found = false; + for (size_t i = 0; opts[i].name != NULL; ++i) { + if (strcmp(name, opts[i].name) != 0) + continue; + + if (opts[i].map != NULL) { + // value is a string which we should map + // to an integer. + size_t j; + for (j = 0; opts[i].map[j].name != NULL; ++j) { + if (strcmp(opts[i].map[j].name, value) + == 0) + break; + } + + if (opts[i].map[j].name == NULL) + message_fatal(_("%s: Invalid option " + "value"), value); + + set(filter_options, i, opts[i].map[j].id, + value); + + } else if (opts[i].min == UINT64_MAX) { + // value is a special string that will be + // parsed by set(). + set(filter_options, i, 0, value); + + } else { + // value is an integer. + const uint64_t v = str_to_uint64(name, value, + opts[i].min, opts[i].max); + set(filter_options, i, v, value); + } + + found = true; + break; + } + + if (!found) + message_fatal(_("%s: Invalid option name"), name); + + if (split == NULL) + break; + + name = split + 1; + } + + free(s); + return; +} + + +////////////// +// Subblock // +////////////// + +enum { + OPT_SIZE, + OPT_RLE, + OPT_ALIGN, +}; + + +static void +set_subblock(void *options, uint32_t key, uint64_t value, + const char *valuestr lzma_attribute((unused))) +{ + lzma_options_subblock *opt = options; + + switch (key) { + case OPT_SIZE: + opt->subblock_data_size = value; + break; + + case OPT_RLE: + opt->rle = value; + break; + + case OPT_ALIGN: + opt->alignment = value; + break; + } +} + + +extern lzma_options_subblock * +options_subblock(const char *str) +{ + static const option_map opts[] = { + { "size", NULL, LZMA_SUBBLOCK_DATA_SIZE_MIN, + LZMA_SUBBLOCK_DATA_SIZE_MAX }, + { "rle", NULL, LZMA_SUBBLOCK_RLE_OFF, + LZMA_SUBBLOCK_RLE_MAX }, + { "align",NULL, LZMA_SUBBLOCK_ALIGNMENT_MIN, + LZMA_SUBBLOCK_ALIGNMENT_MAX }, + { NULL, NULL, 0, 0 } + }; + + lzma_options_subblock *options + = xmalloc(sizeof(lzma_options_subblock)); + *options = (lzma_options_subblock){ + .allow_subfilters = false, + .alignment = LZMA_SUBBLOCK_ALIGNMENT_DEFAULT, + .subblock_data_size = LZMA_SUBBLOCK_DATA_SIZE_DEFAULT, + .rle = LZMA_SUBBLOCK_RLE_OFF, + }; + + parse_options(str, opts, &set_subblock, options); + + return options; +} + + +/////////// +// Delta // +/////////// + +enum { + OPT_DIST, +}; + + +static void +set_delta(void *options, uint32_t key, uint64_t value, + const char *valuestr lzma_attribute((unused))) +{ + lzma_options_delta *opt = options; + switch (key) { + case OPT_DIST: + opt->dist = value; + break; + } +} + + +extern lzma_options_delta * +options_delta(const char *str) +{ + static const option_map opts[] = { + { "dist", NULL, LZMA_DELTA_DIST_MIN, + LZMA_DELTA_DIST_MAX }, + { NULL, NULL, 0, 0 } + }; + + lzma_options_delta *options = xmalloc(sizeof(lzma_options_delta)); + *options = (lzma_options_delta){ + // It's hard to give a useful default for this. + .type = LZMA_DELTA_TYPE_BYTE, + .dist = LZMA_DELTA_DIST_MIN, + }; + + parse_options(str, opts, &set_delta, options); + + return options; +} + + +///////// +// BCJ // +///////// + +enum { + OPT_START_OFFSET, +}; + + +static void +set_bcj(void *options, uint32_t key, uint64_t value, + const char *valuestr lzma_attribute((unused))) +{ + lzma_options_bcj *opt = options; + switch (key) { + case OPT_START_OFFSET: + opt->start_offset = value; + break; + } +} + + +extern lzma_options_bcj * +options_bcj(const char *str) +{ + static const option_map opts[] = { + { "start", NULL, 0, UINT32_MAX }, + { NULL, NULL, 0, 0 } + }; + + lzma_options_bcj *options = xmalloc(sizeof(lzma_options_bcj)); + *options = (lzma_options_bcj){ + .start_offset = 0, + }; + + parse_options(str, opts, &set_bcj, options); + + return options; +} + + +////////// +// LZMA // +////////// + +enum { + OPT_PRESET, + OPT_DICT, + OPT_LC, + OPT_LP, + OPT_PB, + OPT_MODE, + OPT_NICE, + OPT_MF, + OPT_DEPTH, +}; + + +static void lzma_attribute((noreturn)) +error_lzma_preset(const char *valuestr) +{ + message_fatal(_("Unsupported LZMA1/LZMA2 preset: %s"), valuestr); +} + + +static void +set_lzma(void *options, uint32_t key, uint64_t value, const char *valuestr) +{ + lzma_options_lzma *opt = options; + + switch (key) { + case OPT_PRESET: { + if (valuestr[0] < '0' || valuestr[0] > '9') + error_lzma_preset(valuestr); + + uint32_t preset = valuestr[0] - '0'; + + // Currently only "e" is supported as a modifier, + // so keep this simple for now. + if (valuestr[1] != '\0') { + if (valuestr[1] == 'e') + preset |= LZMA_PRESET_EXTREME; + else + error_lzma_preset(valuestr); + + if (valuestr[2] != '\0') + error_lzma_preset(valuestr); + } + + if (lzma_lzma_preset(options, preset)) + error_lzma_preset(valuestr); + + break; + } + + case OPT_DICT: + opt->dict_size = value; + break; + + case OPT_LC: + opt->lc = value; + break; + + case OPT_LP: + opt->lp = value; + break; + + case OPT_PB: + opt->pb = value; + break; + + case OPT_MODE: + opt->mode = value; + break; + + case OPT_NICE: + opt->nice_len = value; + break; + + case OPT_MF: + opt->mf = value; + break; + + case OPT_DEPTH: + opt->depth = value; + break; + } +} + + +extern lzma_options_lzma * +options_lzma(const char *str) +{ + static const name_id_map modes[] = { + { "fast", LZMA_MODE_FAST }, + { "normal", LZMA_MODE_NORMAL }, + { NULL, 0 } + }; + + static const name_id_map mfs[] = { + { "hc3", LZMA_MF_HC3 }, + { "hc4", LZMA_MF_HC4 }, + { "bt2", LZMA_MF_BT2 }, + { "bt3", LZMA_MF_BT3 }, + { "bt4", LZMA_MF_BT4 }, + { NULL, 0 } + }; + + static const option_map opts[] = { + { "preset", NULL, UINT64_MAX, 0 }, + { "dict", NULL, LZMA_DICT_SIZE_MIN, + (UINT32_C(1) << 30) + (UINT32_C(1) << 29) }, + { "lc", NULL, LZMA_LCLP_MIN, LZMA_LCLP_MAX }, + { "lp", NULL, LZMA_LCLP_MIN, LZMA_LCLP_MAX }, + { "pb", NULL, LZMA_PB_MIN, LZMA_PB_MAX }, + { "mode", modes, 0, 0 }, + { "nice", NULL, 2, 273 }, + { "mf", mfs, 0, 0 }, + { "depth", NULL, 0, UINT32_MAX }, + { NULL, NULL, 0, 0 } + }; + + lzma_options_lzma *options = xmalloc(sizeof(lzma_options_lzma)); + *options = (lzma_options_lzma){ + .dict_size = LZMA_DICT_SIZE_DEFAULT, + .preset_dict = NULL, + .preset_dict_size = 0, + .lc = LZMA_LC_DEFAULT, + .lp = LZMA_LP_DEFAULT, + .pb = LZMA_PB_DEFAULT, + .persistent = false, + .mode = LZMA_MODE_NORMAL, + .nice_len = 64, + .mf = LZMA_MF_BT4, + .depth = 0, + }; + + parse_options(str, opts, &set_lzma, options); + + if (options->lc + options->lp > LZMA_LCLP_MAX) + message_fatal(_("The sum of lc and lp must be at " + "maximum of 4")); + + const uint32_t nice_len_min = options->mf & 0x0F; + if (options->nice_len < nice_len_min) + message_fatal(_("The selected match finder requires at " + "least nice=%" PRIu32), nice_len_min); + + return options; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/options.h b/Build/source/extra/xz-4.999.9beta/src/xz/options.h new file mode 100644 index 00000000000..e7389c8e99c --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/options.h @@ -0,0 +1,38 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file options.h +/// \brief Parser for filter-specific options +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +/// \brief Parser for Subblock options +/// +/// \return Pointer to allocated options structure. +/// Doesn't return on error. +extern lzma_options_subblock *options_subblock(const char *str); + + +/// \brief Parser for Delta options +/// +/// \return Pointer to allocated options structure. +/// Doesn't return on error. +extern lzma_options_delta *options_delta(const char *str); + + +/// \brief Parser for BCJ options +/// +/// \return Pointer to allocated options structure. +/// Doesn't return on error. +extern lzma_options_bcj *options_bcj(const char *str); + + +/// \brief Parser for LZMA options +/// +/// \return Pointer to allocated options structure. +/// Doesn't return on error. +extern lzma_options_lzma *options_lzma(const char *str); diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/private.h b/Build/source/extra/xz-4.999.9beta/src/xz/private.h new file mode 100644 index 00000000000..6141b88c416 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/private.h @@ -0,0 +1,55 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file private.h +/// \brief Common includes, definions, and prototypes +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "sysdefs.h" +#include "mythread.h" +#include "lzma.h" + +#include +#include +#include +#include +#include +#include +#include + +#ifdef ENABLE_NLS +# include +# define _(msgid) gettext(msgid) +# define N_(msgid1, msgid2, n) ngettext(msgid1, msgid2, n) +#else +# define _(msgid) (msgid) +# define N_(msgid1, msgid2, n) ((n) == 1 ? (msgid1) : (msgid2)) +#endif + +#ifndef STDIN_FILENO +# define STDIN_FILENO (fileno(stdin)) +#endif + +#ifndef STDOUT_FILENO +# define STDOUT_FILENO (fileno(stdout)) +#endif + +#ifndef STDERR_FILENO +# define STDERR_FILENO (fileno(stderr)) +#endif + +#include "main.h" +#include "coder.h" +#include "message.h" +#include "args.h" +#include "hardware.h" +#include "file_io.h" +#include "options.h" +#include "signals.h" +#include "suffix.h" +#include "util.h" diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/signals.c b/Build/source/extra/xz-4.999.9beta/src/xz/signals.c new file mode 100644 index 00000000000..c9acab26a00 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/signals.c @@ -0,0 +1,173 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file signals.c +/// \brief Handling signals to abort operation +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "private.h" + + +volatile sig_atomic_t user_abort = false; + + +#ifndef _WIN32 + +/// If we were interrupted by a signal, we store the signal number so that +/// we can raise that signal to kill the program when all cleanups have +/// been done. +static volatile sig_atomic_t exit_signal = 0; + +/// Mask of signals for which have have established a signal handler to set +/// user_abort to true. +static sigset_t hooked_signals; + +/// signals_block() and signals_unblock() can be called recursively. +static size_t signals_block_count = 0; + + +static void +signal_handler(int sig) +{ + exit_signal = sig; + user_abort = true; + return; +} + + +extern void +signals_init(void) +{ + // List of signals for which we establish the signal handler. + static const int sigs[] = { + SIGINT, + SIGTERM, +#ifdef SIGHUP + SIGHUP, +#endif +#ifdef SIGPIPE + SIGPIPE, +#endif +#ifdef SIGXCPU + SIGXCPU, +#endif +#ifdef SIGXFSZ + SIGXFSZ, +#endif + }; + + // Mask of the signals for which we have established a signal handler. + sigemptyset(&hooked_signals); + for (size_t i = 0; i < ARRAY_SIZE(sigs); ++i) + sigaddset(&hooked_signals, sigs[i]); + + struct sigaction sa; + + // All the signals that we handle we also blocked while the signal + // handler runs. + sa.sa_mask = hooked_signals; + + // Don't set SA_RESTART, because we want EINTR so that we can check + // for user_abort and cleanup before exiting. We block the signals + // for which we have established a handler when we don't want EINTR. + sa.sa_flags = 0; + sa.sa_handler = &signal_handler; + + for (size_t i = 0; i < ARRAY_SIZE(sigs); ++i) { + // If the parent process has left some signals ignored, + // we don't unignore them. + struct sigaction old; + if (sigaction(sigs[i], NULL, &old) == 0 + && old.sa_handler == SIG_IGN) + continue; + + // Establish the signal handler. + if (sigaction(sigs[i], &sa, NULL)) + message_signal_handler(); + } + + return; +} + + +extern void +signals_block(void) +{ + if (signals_block_count++ == 0) { + const int saved_errno = errno; + mythread_sigmask(SIG_BLOCK, &hooked_signals, NULL); + errno = saved_errno; + } + + return; +} + + +extern void +signals_unblock(void) +{ + assert(signals_block_count > 0); + + if (--signals_block_count == 0) { + const int saved_errno = errno; + mythread_sigmask(SIG_UNBLOCK, &hooked_signals, NULL); + errno = saved_errno; + } + + return; +} + + +extern void +signals_exit(void) +{ + const int sig = exit_signal; + + if (sig != 0) { + struct sigaction sa; + sa.sa_handler = SIG_DFL; + sigfillset(&sa.sa_mask); + sa.sa_flags = 0; + sigaction(sig, &sa, NULL); + raise(exit_signal); + } + + return; +} + +#else + +// While Windows has some very basic signal handling functions as required +// by C89, they are not really used, or so I understood. Instead, we use +// SetConsoleCtrlHandler() to catch user pressing C-c. + +#include + + +static BOOL WINAPI +signal_handler(DWORD type lzma_attribute((unused))) +{ + // Since we don't get a signal number which we could raise() at + // signals_exit() like on POSIX, just set the exit status to + // indicate an error, so that we cannot return with zero exit status. + set_exit_status(E_ERROR); + user_abort = true; + return TRUE; +} + + +extern void +signals_init(void) +{ + if (!SetConsoleCtrlHandler(&signal_handler, TRUE)) + message_signal_handler(); + + return; +} + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/signals.h b/Build/source/extra/xz-4.999.9beta/src/xz/signals.h new file mode 100644 index 00000000000..48945b22403 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/signals.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file signals.h +/// \brief Handling signals to abort operation +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +/// If this is true, we will clean up the possibly incomplete output file, +/// return to main() as soon as practical. That is, the code needs to poll +/// this variable in various places. +extern volatile sig_atomic_t user_abort; + + +/// Initialize the signal handler, which will set user_abort to true when +/// user e.g. presses C-c. +extern void signals_init(void); + + +#ifndef _WIN32 + +/// Block the signals which don't have SA_RESTART and which would just set +/// user_abort to true. This is handy when we don't want to handle EINTR +/// and don't want SA_RESTART either. +extern void signals_block(void); + +/// Unblock the signals blocked by signals_block(). +extern void signals_unblock(void); + +/// If user has sent us a signal earlier to terminate the process, +/// re-raise that signal to actually terminate the process. +extern void signals_exit(void); + +#else + +#define signals_block() do { } while (0) +#define signals_unblock() do { } while (0) +#define signals_exit() do { } while (0) + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/suffix.c b/Build/source/extra/xz-4.999.9beta/src/xz/suffix.c new file mode 100644 index 00000000000..f9052832634 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/suffix.c @@ -0,0 +1,211 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file suffix.c +/// \brief Checks filename suffix and creates the destination filename +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "private.h" + +// For case-insensitive filename suffix on case-insensitive systems +#ifdef DOSLIKE +# define strcmp strcasecmp +#endif + + +static char *custom_suffix = NULL; + + +struct suffix_pair { + const char *compressed; + const char *uncompressed; +}; + + +/// \brief Checks if src_name has given compressed_suffix +/// +/// \param suffix Filename suffix to look for +/// \param src_name Input filename +/// \param src_len strlen(src_name) +/// +/// \return If src_name has the suffix, src_len - strlen(suffix) is +/// returned. It's always a positive integer. Otherwise zero +/// is returned. +static size_t +test_suffix(const char *suffix, const char *src_name, size_t src_len) +{ + const size_t suffix_len = strlen(suffix); + + // The filename must have at least one character in addition to + // the suffix. src_name may contain path to the filename, so we + // need to check for directory separator too. + if (src_len <= suffix_len || src_name[src_len - suffix_len - 1] == '/') + return 0; + + if (strcmp(suffix, src_name + src_len - suffix_len) == 0) + return src_len - suffix_len; + + return 0; +} + + +/// \brief Removes the filename suffix of the compressed file +/// +/// \return Name of the uncompressed file, or NULL if file has unknown +/// suffix. +static char * +uncompressed_name(const char *src_name, const size_t src_len) +{ + static const struct suffix_pair suffixes[] = { + { ".xz", "" }, + { ".txz", ".tar" }, // .txz abbreviation for .txt.gz is rare. + { ".lzma", "" }, + { ".tlz", ".tar" }, + // { ".gz", "" }, + // { ".tgz", ".tar" }, + }; + + const char *new_suffix = ""; + size_t new_len = 0; + + if (opt_format == FORMAT_RAW) { + // Don't check for known suffixes when --format=raw was used. + if (custom_suffix == NULL) { + message_error(_("%s: With --format=raw, " + "--suffix=.SUF is required unless " + "writing to stdout"), src_name); + return NULL; + } + } else { + for (size_t i = 0; i < ARRAY_SIZE(suffixes); ++i) { + new_len = test_suffix(suffixes[i].compressed, + src_name, src_len); + if (new_len != 0) { + new_suffix = suffixes[i].uncompressed; + break; + } + } + } + + if (new_len == 0 && custom_suffix != NULL) + new_len = test_suffix(custom_suffix, src_name, src_len); + + if (new_len == 0) { + message_warning(_("%s: Filename has an unknown suffix, " + "skipping"), src_name); + return NULL; + } + + const size_t new_suffix_len = strlen(new_suffix); + char *dest_name = xmalloc(new_len + new_suffix_len + 1); + + memcpy(dest_name, src_name, new_len); + memcpy(dest_name + new_len, new_suffix, new_suffix_len); + dest_name[new_len + new_suffix_len] = '\0'; + + return dest_name; +} + + +/// \brief Appends suffix to src_name +/// +/// In contrast to uncompressed_name(), we check only suffixes that are valid +/// for the specified file format. +static char * +compressed_name(const char *src_name, const size_t src_len) +{ + // The order of these must match the order in args.h. + static const struct suffix_pair all_suffixes[][3] = { + { + { ".xz", "" }, + { ".txz", ".tar" }, + { NULL, NULL } + }, { + { ".lzma", "" }, + { ".tlz", ".tar" }, + { NULL, NULL } +/* + }, { + { ".gz", "" }, + { ".tgz", ".tar" }, + { NULL, NULL } +*/ + }, { + // --format=raw requires specifying the suffix + // manually or using stdout. + { NULL, NULL } + } + }; + + // args.c ensures this. + assert(opt_format != FORMAT_AUTO); + + const size_t format = opt_format - 1; + const struct suffix_pair *const suffixes = all_suffixes[format]; + + for (size_t i = 0; suffixes[i].compressed != NULL; ++i) { + if (test_suffix(suffixes[i].compressed, src_name, src_len) + != 0) { + message_warning(_("%s: File already has `%s' " + "suffix, skipping"), src_name, + suffixes[i].compressed); + return NULL; + } + } + + // TODO: Hmm, maybe it would be better to validate this in args.c, + // since the suffix handling when decoding is weird now. + if (opt_format == FORMAT_RAW && custom_suffix == NULL) { + message_error(_("%s: With --format=raw, " + "--suffix=.SUF is required unless " + "writing to stdout"), src_name); + return NULL; + } + + const char *suffix = custom_suffix != NULL + ? custom_suffix : suffixes[0].compressed; + const size_t suffix_len = strlen(suffix); + + char *dest_name = xmalloc(src_len + suffix_len + 1); + + memcpy(dest_name, src_name, src_len); + memcpy(dest_name + src_len, suffix, suffix_len); + dest_name[src_len + suffix_len] = '\0'; + + return dest_name; +} + + +extern char * +suffix_get_dest_name(const char *src_name) +{ + assert(src_name != NULL); + + // Length of the name is needed in all cases to locate the end of + // the string to compare the suffix, so calculate the length here. + const size_t src_len = strlen(src_name); + + return opt_mode == MODE_COMPRESS + ? compressed_name(src_name, src_len) + : uncompressed_name(src_name, src_len); +} + + +extern void +suffix_set(const char *suffix) +{ + // Empty suffix and suffixes having a slash are rejected. Such + // suffixes would break things later. + if (suffix[0] == '\0' || strchr(suffix, '/') != NULL) + message_fatal(_("%s: Invalid filename suffix"), optarg); + + // Replace the old custom_suffix (if any) with the new suffix. + free(custom_suffix); + custom_suffix = xstrdup(suffix); + return; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/suffix.h b/Build/source/extra/xz-4.999.9beta/src/xz/suffix.h new file mode 100644 index 00000000000..5537d7324f4 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/suffix.h @@ -0,0 +1,28 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file suffix.h +/// \brief Checks filename suffix and creates the destination filename +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +/// \brief Get the name of the destination file +/// +/// Depending on the global variable opt_mode, this tries to find a matching +/// counterpart for src_name. If the name can be constructed, it is allocated +/// and returned (caller must free it). On error, a message is printed and +/// NULL is returned. +extern char *suffix_get_dest_name(const char *src_name); + + +/// \brief Set a custom filename suffix +/// +/// This function calls xstrdup() for the given suffix, thus the caller +/// doesn't need to keep the memory allocated. There can be only one custom +/// suffix, thus if this is called multiple times, the old suffixes are freed +/// and forgotten. +extern void suffix_set(const char *suffix); diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/util.c b/Build/source/extra/xz-4.999.9beta/src/xz/util.c new file mode 100644 index 00000000000..d160ea0d600 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/util.c @@ -0,0 +1,229 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file util.c +/// \brief Miscellaneous utility functions +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "private.h" + + +// Thousand separator for format strings is not supported outside POSIX. +// This is used in uint64_to_str() and double_to_str(). +#ifdef DOSLIKE +# define THOUSAND "" +#else +# define THOUSAND "'" +#endif + + +extern void * +xrealloc(void *ptr, size_t size) +{ + assert(size > 0); + + ptr = realloc(ptr, size); + if (ptr == NULL) + message_fatal("%s", strerror(errno)); + + return ptr; +} + + +extern char * +xstrdup(const char *src) +{ + assert(src != NULL); + const size_t size = strlen(src) + 1; + char *dest = xmalloc(size); + return memcpy(dest, src, size); +} + + +extern uint64_t +str_to_uint64(const char *name, const char *value, uint64_t min, uint64_t max) +{ + uint64_t result = 0; + + // Skip blanks. + while (*value == ' ' || *value == '\t') + ++value; + + // Accept special value "max". Supporting "min" doesn't seem useful. + if (strcmp(value, "max") == 0) + return max; + + if (*value < '0' || *value > '9') + message_fatal(_("%s: Value is not a non-negative " + "decimal integer"), value); + + do { + // Don't overflow. + if (result > (UINT64_MAX - 9) / 10) + goto error; + + result *= 10; + result += *value - '0'; + ++value; + } while (*value >= '0' && *value <= '9'); + + if (*value != '\0') { + // Look for suffix. + static const struct { + const char name[4]; + uint64_t multiplier; + } suffixes[] = { + { "k", UINT64_C(1000) }, + { "kB", UINT64_C(1000) }, + { "M", UINT64_C(1000000) }, + { "MB", UINT64_C(1000000) }, + { "G", UINT64_C(1000000000) }, + { "GB", UINT64_C(1000000000) }, + { "Ki", UINT64_C(1024) }, + { "KiB", UINT64_C(1024) }, + { "Mi", UINT64_C(1048576) }, + { "MiB", UINT64_C(1048576) }, + { "Gi", UINT64_C(1073741824) }, + { "GiB", UINT64_C(1073741824) } + }; + + uint64_t multiplier = 0; + for (size_t i = 0; i < ARRAY_SIZE(suffixes); ++i) { + if (strcmp(value, suffixes[i].name) == 0) { + multiplier = suffixes[i].multiplier; + break; + } + } + + if (multiplier == 0) { + message(V_ERROR, _("%s: Invalid multiplier suffix. " + "Valid suffixes:"), value); + message_fatal("`k' (10^3), `M' (10^6), `G' (10^9) " + "`Ki' (2^10), `Mi' (2^20), " + "`Gi' (2^30)"); + } + + // Don't overflow here either. + if (result > UINT64_MAX / multiplier) + goto error; + + result *= multiplier; + } + + if (result < min || result > max) + goto error; + + return result; + +error: + message_fatal(_("Value of the option `%s' must be in the range " + "[%" PRIu64 ", %" PRIu64 "]"), + name, min, max); +} + + +extern const char * +uint64_to_str(uint64_t value, uint32_t slot) +{ + // 2^64 with thousand separators is 26 bytes plus trailing '\0'. + static char bufs[4][32]; + + assert(slot < ARRAY_SIZE(bufs)); + + snprintf(bufs[slot], sizeof(bufs[slot]), "%" THOUSAND PRIu64, value); + return bufs[slot]; +} + + +extern const char * +double_to_str(double value) +{ + // 64 bytes is surely enough, since it won't fit in some other + // fields anyway. + static char buf[64]; + + snprintf(buf, sizeof(buf), "%" THOUSAND ".1f", value); + return buf; +} + + +/* +/// \brief Simple quoting to get rid of ASCII control characters +/// +/// This is not so cool and locale-dependent, but should be good enough +/// At least we don't print any control characters on the terminal. +/// +extern char * +str_quote(const char *str) +{ + size_t dest_len = 0; + bool has_ctrl = false; + + while (str[dest_len] != '\0') + if (*(unsigned char *)(str + dest_len++) < 0x20) + has_ctrl = true; + + char *dest = malloc(dest_len + 1); + if (dest != NULL) { + if (has_ctrl) { + for (size_t i = 0; i < dest_len; ++i) + if (*(unsigned char *)(str + i) < 0x20) + dest[i] = '?'; + else + dest[i] = str[i]; + + dest[dest_len] = '\0'; + + } else { + // Usually there are no control characters, + // so we can optimize. + memcpy(dest, str, dest_len + 1); + } + } + + return dest; +} +*/ + + +extern bool +is_empty_filename(const char *filename) +{ + if (filename[0] == '\0') { + message_error(_("Empty filename, skipping")); + return true; + } + + return false; +} + + +extern bool +is_tty_stdin(void) +{ + const bool ret = isatty(STDIN_FILENO); + + if (ret) + message_error(_("Compressed data not read from a terminal " + "unless `--force' is used.")); + + return ret; +} + + +extern bool +is_tty_stdout(void) +{ + const bool ret = isatty(STDOUT_FILENO); + + if (ret) + message_error(_("Compressed data not written to a terminal " + "unless `--force' is used.")); + + return ret; +} diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/util.h b/Build/source/extra/xz-4.999.9beta/src/xz/util.h new file mode 100644 index 00000000000..3657eb80da4 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/util.h @@ -0,0 +1,79 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file util.h +/// \brief Miscellaneous utility functions +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +/// \brief Safe malloc() that never returns NULL +/// +/// \note xmalloc(), xrealloc(), and xstrdup() must not be used when +/// there are files open for writing, that should be cleaned up +/// before exiting. +#define xmalloc(size) xrealloc(NULL, size) + + +/// \brief Safe realloc() that never returns NULL +extern void *xrealloc(void *ptr, size_t size); + + +/// \brief Safe strdup() that never returns NULL +extern char *xstrdup(const char *src); + + +/// \brief Fancy version of strtoull() +/// +/// \param name Name of the option to show in case of an error +/// \param value String containing the number to be parsed; may +/// contain suffixes "k", "M", "G", "Ki", "Mi", or "Gi" +/// \param min Minimum valid value +/// \param max Maximum valid value +/// +/// \return Parsed value that is in the range [min, max]. Does not return +/// if an error occurs. +/// +extern uint64_t str_to_uint64(const char *name, const char *value, + uint64_t min, uint64_t max); + + +/// \brief Convert uint64_t to a string +/// +/// Convert the given value to a string with locale-specific thousand +/// separators, if supported by the snprintf() implementation. The string +/// is stored into an internal static buffer indicated by the slot argument. +/// A pointer to the selected buffer is returned. +/// +/// This function exists, because non-POSIX systems don't support thousand +/// separator in format strings. Solving the problem in a simple way doesn't +/// work, because it breaks gettext (specifically, the xgettext tool). +extern const char *uint64_to_str(uint64_t value, uint32_t slot); + + +/// \brief Convert double to a string with one decimal place +/// +/// This is like uint64_to_str() except that this converts a double and +/// uses exactly one decimal place. +extern const char *double_to_str(double value); + + +/// \brief Check if filename is empty and print an error message +extern bool is_empty_filename(const char *filename); + + +/// \brief Test if stdin is a terminal +/// +/// If stdin is a terminal, an error message is printed and exit status set +/// to EXIT_ERROR. +extern bool is_tty_stdin(void); + + +/// \brief Test if stdout is a terminal +/// +/// If stdout is a terminal, an error message is printed and exit status set +/// to EXIT_ERROR. +extern bool is_tty_stdout(void); diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/xz.1 b/Build/source/extra/xz-4.999.9beta/src/xz/xz.1 new file mode 100644 index 00000000000..2fef75f43a5 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/xz.1 @@ -0,0 +1,1250 @@ +'\" t +.\" +.\" Author: Lasse Collin +.\" +.\" This file has been put into the public domain. +.\" You can do whatever you want with this file. +.\" +.TH XZ 1 "2009-08-27" "Tukaani" "XZ Utils" +.SH NAME +xz, unxz, xzcat, lzma, unlzma, lzcat \- Compress or decompress .xz and .lzma files +.SH SYNOPSIS +.B xz +.RI [ option ]... +.RI [ file ]... +.PP +.B unxz +is equivalent to +.BR "xz \-\-decompress" . +.br +.B xzcat +is equivalent to +.BR "xz \-\-decompress \-\-stdout" . +.br +.B lzma +is equivalent to +.BR "xz \-\-format=lzma" . +.br +.B unlzma +is equivalent to +.BR "xz \-\-format=lzma \-\-decompress" . +.br +.B lzcat +is equivalent to +.BR "xz \-\-format=lzma \-\-decompress \-\-stdout" . +.PP +When writing scripts that need to decompress files, it is recommended to +always use the name +.B xz +with appropriate arguments +.RB ( "xz \-d" +or +.BR "xz \-dc" ) +instead of the names +.B unxz +and +.BR xzcat. +.SH DESCRIPTION +.B xz +is a general-purpose data compression tool with command line syntax similar to +.BR gzip (1) +and +.BR bzip2 (1). +The native file format is the +.B .xz +format, but also the legacy +.B .lzma +format and raw compressed streams with no container format headers +are supported. +.PP +.B xz +compresses or decompresses each +.I file +according to the selected operation mode. +If no +.I files +are given or +.I file +is +.BR \- , +.B xz +reads from standard input and writes the processed data to standard output. +.B xz +will refuse (display an error and skip the +.IR file ) +to write compressed data to standard output if it is a terminal. Similarly, +.B xz +will refuse to read compressed data from standard input if it is a terminal. +.PP +Unless +.B \-\-stdout +is specified, +.I files +other than +.B \- +are written to a new file whose name is derived from the source +.I file +name: +.IP \(bu 3 +When compressing, the suffix of the target file format +.RB ( .xz +or +.BR .lzma ) +is appended to the source filename to get the target filename. +.IP \(bu 3 +When decompressing, the +.B .xz +or +.B .lzma +suffix is removed from the filename to get the target filename. +.B xz +also recognizes the suffixes +.B .txz +and +.BR .tlz , +and replaces them with the +.B .tar +suffix. +.PP +If the target file already exists, an error is displayed and the +.I file +is skipped. +.PP +Unless writing to standard output, +.B xz +will display a warning and skip the +.I file +if any of the following applies: +.IP \(bu 3 +.I File +is not a regular file. Symbolic links are not followed, thus they +are never considered to be regular files. +.IP \(bu 3 +.I File +has more than one hardlink. +.IP \(bu 3 +.I File +has setuid, setgid, or sticky bit set. +.IP \(bu 3 +The operation mode is set to compress, and the +.I file +already has a suffix of the target file format +.RB ( .xz +or +.B .txz +when compressing to the +.B .xz +format, and +.B .lzma +or +.B .tlz +when compressing to the +.B .lzma +format). +.IP \(bu 3 +The operation mode is set to decompress, and the +.I file +doesn't have a suffix of any of the supported file formats +.RB ( .xz , +.BR .txz , +.BR .lzma , +or +.BR .tlz ). +.PP +After successfully compressing or decompressing the +.IR file , +.B xz +copies the owner, group, permissions, access time, and modification time +from the source +.I file +to the target file. If copying the group fails, the permissions are modified +so that the target file doesn't become accessible to users who didn't have +permission to access the source +.IR file . +.B xz +doesn't support copying other metadata like access control lists +or extended attributes yet. +.PP +Once the target file has been successfully closed, the source +.I file +is removed unless +.B \-\-keep +was specified. The source +.I file +is never removed if the output is written to standard output. +.PP +Sending +.B SIGINFO +or +.B SIGUSR1 +to the +.B xz +process makes it print progress information to standard error. +This has only limited use since when standard error is a terminal, using +.B \-\-verbose +will display an automatically updating progress indicator. +.SS "Memory usage" +The memory usage of +.B xz +varies from a few hundred kilobytes to several gigabytes depending on +the compression settings. The settings used when compressing a file +affect also the memory usage of the decompressor. Typically the decompressor +needs only 5\ % to 20\ % of the amount of RAM that the compressor needed when +creating the file. Still, the worst-case memory usage of the decompressor +is several gigabytes. +.PP +To prevent uncomfortable surprises caused by huge memory usage, +.B xz +has a built-in memory usage limiter. The default limit is 40 % of total +physical RAM. While operating systems provide ways to limit the memory usage +of processes, relying on it wasn't deemed to be flexible enough. +.PP +When compressing, if the selected compression settings exceed the memory +usage limit, the settings are automatically adjusted downwards and a notice +about this is displayed. As an exception, if the memory usage limit is +exceeded when compressing with +.BR \-\-format=raw , +an error is displayed and +.B xz +will exit with exit status +.BR 1 . +.PP +If source +.I file +cannot be decompressed without exceeding the memory usage limit, an error +message is displayed and the file is skipped. Note that compressed files +may contain many blocks, which may have been compressed with different +settings. Typically all blocks will have roughly the same memory requirements, +but it is possible that a block later in the file will exceed the memory usage +limit, and an error about too low memory usage limit gets displayed after some +data has already been decompressed. +.PP +The absolute value of the active memory usage limit can be seen near +the bottom of the output of +.BR \-\-long\-help . +The default limit can be overriden with +\fB\-\-memory=\fIlimit\fR. +.SH OPTIONS +.SS "Integer suffixes and special values" +In most places where an integer argument is expected, an optional suffix +is supported to easily indicate large integers. There must be no space +between the integer and the suffix. +.TP +.BR k " or " kB +The integer is multiplied by 1,000 (10^3). For example, +.B "5k" +or +.B "5kB" +equals +.BR "5000" . +.TP +.BR Ki " or " KiB +The integer is multiplied by 1,024 (2^10). +.TP +.BR M " or " MB +The integer is multiplied by 1,000,000 (10^6). +.TP +.BR Mi " or " MiB +The integer is multiplied by 1,048,576 (2^20). +.TP +.BR G " or " GB +The integer is multiplied by 1,000,000,000 (10^9). +.TP +.BR Gi " or " GiB +The integer is multiplied by 1,073,741,824 (2^30). +.PP +A special value +.B max +can be used to indicate the maximum integer value supported by the option. +.SS "Operation mode" +If multiple operation mode options are given, the last one takes effect. +.TP +.BR \-z ", " \-\-compress +Compress. This is the default operation mode when no operation mode option +is specified, and no other operation mode is implied from the command name +(for example, +.B unxz +implies +.BR \-\-decompress ). +.TP +.BR \-d ", " \-\-decompress ", " \-\-uncompress +Decompress. +.TP +.BR \-t ", " \-\-test +Test the integrity of compressed +.IR files . +No files are created or removed. This option is equivalent to +.B "\-\-decompress \-\-stdout" +except that the decompressed data is discarded instead of being +written to standard output. +.TP +.BR \-l ", " \-\-list +View information about the compressed files. No uncompressed output is +produced, and no files are created or removed. In list mode, the program +cannot read the compressed data from standard input or from other +unseekable sources. +.IP +.B "This feature has not been implemented yet." +.SS "Operation modifiers" +.TP +.BR \-k ", " \-\-keep +Keep (don't delete) the input files. +.TP +.BR \-f ", " \-\-force +This option has several effects: +.RS +.IP \(bu 3 +If the target file already exists, delete it before compressing or +decompressing. +.IP \(bu 3 +Compress or decompress even if the input is not a regular file, +has more than one hardlink, or has setuid, setgid, or sticky bit set. +The setuid, setgid, and sticky bits are not copied to the target file. +.IP \(bu 3 +If combined with +.B \-\-decompress +.BR \-\-stdout +and +.B xz +doesn't recognize the type of the source file, +.B xz +will copy the source file as is to standard output. This allows using +.B xzcat +.B \--force +like +.BR cat (1) +for files that have not been compressed with +.BR xz . +Note that in future, +.B xz +might support new compressed file formats, which may make +.B xz +decompress more types of files instead of copying them as is to +standard output. +.BI \-\-format= format +can be used to restrict +.B xz +to decompress only a single file format. +.IP \(bu 3 +Allow writing compressed data to a terminal, and reading compressed data +from a terminal. +.RE +.TP +.BR \-c ", " \-\-stdout ", " \-\-to-stdout +Write the compressed or decompressed data to standard output instead of +a file. This implies +.BR \-\-keep . +.TP +\fB\-S\fR \fI.suf\fR, \fB\-\-suffix=\fI.suf +When compressing, use +.I .suf +as the suffix for the target file instead of +.B .xz +or +.BR .lzma . +If not writing to standard output and the source file already has the suffix +.IR .suf , +a warning is displayed and the file is skipped. +.IP +When decompressing, recognize also files with the suffix +.I .suf +in addition to files with the +.BR .xz , +.BR .txz , +.BR .lzma , +or +.B .tlz +suffix. If the source file has the suffix +.IR .suf , +the suffix is removed to get the target filename. +.IP +When compressing or decompressing raw streams +.RB ( \-\-format=raw ), +the suffix must always be specified unless writing to standard output, +because there is no default suffix for raw streams. +.TP +\fB\-\-files\fR[\fB=\fIfile\fR] +Read the filenames to process from +.IR file ; +if +.I file +is omitted, filenames are read from standard input. Filenames must be +terminated with the newline character. If filenames are given also as +command line arguments, they are processed before the filenames read from +.IR file . +.TP +\fB\-\-files0\fR[\fB=\fIfile\fR] +This is identical to \fB\-\-files\fR[\fB=\fIfile\fR] except that the +filenames must be terminated with the null character. +.SS "Basic file format and compression options" +.TP +\fB\-F\fR \fIformat\fR, \fB\-\-format=\fIformat +Specify the file format to compress or decompress: +.RS +.IP \(bu 3 +.BR auto : +This is the default. When compressing, +.B auto +is equivalent to +.BR xz . +When decompressing, the format of the input file is autodetected. Note that +raw streams (created with +.BR \-\-format=raw ) +cannot be autodetected. +.IP \(bu 3 +.BR xz : +Compress to the +.B .xz +file format, or accept only +.B .xz +files when decompressing. +.IP \(bu 3 +.B lzma +or +.BR alone : +Compress to the legacy +.B .lzma +file format, or accept only +.B .lzma +files when decompressing. The alternative name +.B alone +is provided for backwards compatibility with LZMA Utils. +.IP \(bu 3 +.BR raw : +Compress or uncompress a raw stream (no headers). This is meant for advanced +users only. To decode raw streams, you need to set not only +.B \-\-format=raw +but also specify the filter chain, which would normally be stored in the +container format headers. +.RE +.TP +\fB\-C\fR \fIcheck\fR, \fB\-\-check=\fIcheck +Specify the type of the integrity check, which is calculated from the +uncompressed data. This option has an effect only when compressing into the +.B .xz +format; the +.B .lzma +format doesn't support integrity checks. +The integrity check (if any) is verified when the +.B .xz +file is decompressed. +.IP +Supported +.I check +types: +.RS +.IP \(bu 3 +.BR none : +Don't calculate an integrity check at all. This is usually a bad idea. This +can be useful when integrity of the data is verified by other means anyway. +.IP \(bu 3 +.BR crc32 : +Calculate CRC32 using the polynomial from IEEE-802.3 (Ethernet). +.IP \(bu 3 +.BR crc64 : +Calculate CRC64 using the polynomial from ECMA-182. This is the default, since +it is slightly better than CRC32 at detecting damaged files and the speed +difference is negligible. +.IP \(bu 3 +.BR sha256 : +Calculate SHA-256. This is somewhat slower than CRC32 and CRC64. +.RE +.IP +Integrity of the +.B .xz +headers is always verified with CRC32. It is not possible to change or +disable it. +.TP +.BR \-0 " ... " \-9 +Select compression preset. If a preset level is specified multiple times, +the last one takes effect. +.IP +The compression preset levels can be categorised roughly into three +categories: +.RS +.IP "\fB\-0\fR ... \fB\-2" +Fast presets with relatively low memory usage. +.B \-1 +and +.B \-2 +should give compression speed and ratios comparable to +.B "bzip2 \-1" +and +.BR "bzip2 \-9" , +respectively. +Currently +.B \-0 +is not very good (not much faster than +.B \-1 +but much worse compression). In future, +.B \-0 +may be indicate some fast algorithm instead of LZMA2. +.IP "\fB\-3\fR ... \fB\-5" +Good compression ratio with low to medium memory usage. +These are significantly slower than levels 0\-2. +.IP "\fB\-6\fR ... \fB\-9" +Excellent compression with medium to high memory usage. These are also +slower than the lower preset levels. The default is +.BR \-6 . +Unless you want to maximize the compression ratio, you probably don't want +a higher preset level than +.B \-7 +due to speed and memory usage. +.RE +.IP +The exact compression settings (filter chain) used by each preset may +vary between +.B xz +versions. The settings may also vary between files being compressed, if +.B xz +determines that modified settings will probably give better compression +ratio without significantly affecting compression time or memory usage. +.IP +Because the settings may vary, the memory usage may vary too. The following +table lists the maximum memory usage of each preset level, which won't be +exceeded even in future versions of +.BR xz . +.IP +.B "FIXME: The table below is just a rough idea." +.RS +.RS +.TS +tab(;); +c c c +n n n. +Preset;Compression;Decompression +\-0;6 MiB;1 MiB +\-1;6 MiB;1 MiB +\-2;10 MiB;1 MiB +\-3;20 MiB;2 MiB +\-4;30 MiB;3 MiB +\-5;60 MiB;6 MiB +\-6;100 MiB;10 MiB +\-7;200 MiB;20 MiB +\-8;400 MiB;40 MiB +\-9;800 MiB;80 MiB +.TE +.RE +.RE +.IP +When compressing, +.B xz +automatically adjusts the compression settings downwards if +the memory usage limit would be exceeded, so it is safe to specify +a high preset level even on systems that don't have lots of RAM. +.TP +.BR \-\-fast " and " \-\-best +These are somewhat misleading aliases for +.B \-0 +and +.BR \-9 , +respectively. +These are provided only for backwards compatibility with LZMA Utils. +Avoid using these options. +.IP +Especially the name of +.B \-\-best +is misleading, because the definition of best depends on the input data, +and that usually people don't want the very best compression ratio anyway, +because it would be very slow. +.TP +.BR \-e ", " \-\-extreme +Modify the compression preset (\fB\-0\fR ... \fB\-9\fR) so that a little bit +better compression ratio can be achieved without increasing memory usage +of the compressor or decompressor (exception: compressor memory usage may +increase a little with presets \fB\-0\fR ... \fB\-2\fR). The downside is that +the compression time will increase dramatically (it can easily double). +.TP +\fB\-M\fR \fIlimit\fR, \fB\-\-memory=\fIlimit +Set the memory usage limit. If this option is specied multiple times, +the last one takes effect. The +.I limit +can be specified in multiple ways: +.RS +.IP \(bu 3 +The +.I limit +can be an absolute value in bytes. Using an integer suffix like +.B MiB +can be useful. Example: +.B "\-\-memory=80MiB" +.IP \(bu 3 +The +.I limit +can be specified as a percentage of physical RAM. Example: +.B "\-\-memory=70%" +.IP \(bu 3 +The +.I limit +can be reset back to its default value (currently 40 % of physical RAM) +by setting it to +.BR 0 . +.IP \(bu 3 +The memory usage limiting can be effectively disabled by setting +.I limit +to +.BR max . +This isn't recommended. It's usually better to use, for example, +.BR \-\-memory=90% . +.RE +.IP +The current +.I limit +can be seen near the bottom of the output of the +.B \-\-long-help +option. +.TP +\fB\-T\fR \fIthreads\fR, \fB\-\-threads=\fIthreads +Specify the maximum number of worker threads to use. The default is +the number of available CPU cores. You can see the current value of +.I threads +near the end of the output of the +.B \-\-long\-help +option. +.IP +The actual number of worker threads can be less than +.I threads +if using more threads would exceed the memory usage limit. +In addition to CPU-intensive worker threads, +.B xz +may use a few auxiliary threads, which don't use a lot of CPU time. +.IP +.B "Multithreaded compression and decompression are not implemented yet," +.B "so this option has no effect for now." +.SS Custom compressor filter chains +A custom filter chain allows specifying the compression settings in detail +instead of relying on the settings associated to the preset levels. +When a custom filter chain is specified, the compression preset level options +(\fB\-0\fR ... \fB\-9\fR and \fB\-\-extreme\fR) are silently ignored. +.PP +A filter chain is comparable to piping on the UN*X command line. +When compressing, the uncompressed input goes to the first filter, whose +output goes to the next filter (if any). The output of the last filter +gets written to the compressed file. The maximum number of filters in +the chain is four, but typically a filter chain has only one or two filters. +.PP +Many filters have limitations where they can be in the filter chain: +some filters can work only as the last filter in the chain, some only +as a non-last filter, and some work in any position in the chain. Depending +on the filter, this limitation is either inherent to the filter design or +exists to prevent security issues. +.PP +A custom filter chain is specified by using one or more filter options in +the order they are wanted in the filter chain. That is, the order of filter +options is significant! When decoding raw streams +.RB ( \-\-format=raw ), +the filter chain is specified in the same order as it was specified when +compressing. +.PP +Filters take filter-specific +.I options +as a comma-separated list. Extra commas in +.I options +are ignored. Every option has a default value, so you need to +specify only those you want to change. +.TP +\fB\-\-lzma1\fR[\fB=\fIoptions\fR], \fB\-\-lzma2\fR[\fB=\fIoptions\fR] +Add LZMA1 or LZMA2 filter to the filter chain. These filter can be used +only as the last filter in the chain. +.IP +LZMA1 is a legacy filter, which is supported almost solely due to the legacy +.B .lzma +file format, which supports only LZMA1. LZMA2 is an updated +version of LZMA1 to fix some practical issues of LZMA1. The +.B .xz +format uses LZMA2, and doesn't support LZMA1 at all. Compression speed and +ratios of LZMA1 and LZMA2 are practically the same. +.IP +LZMA1 and LZMA2 share the same set of +.IR options : +.RS +.TP +.BI preset= preset +Reset all LZMA1 or LZMA2 +.I options +to +.IR preset . +.I Preset +consist of an integer, which may be followed by single-letter preset +modifiers. The integer can be from +.B 0 +to +.BR 9 , +matching the command line options \fB\-0\fR ... \fB\-9\fR. +The only supported modifier is currently +.BR e , +which matches +.BR \-\-extreme . +.IP +The default +.I preset +is +.BR 6 , +from which the default values for the rest of the LZMA1 or LZMA2 +.I options +are taken. +.TP +.BI dict= size +Dictionary (history buffer) size indicates how many bytes of the recently +processed uncompressed data is kept in memory. One method to reduce size of +the uncompressed data is to store distance-length pairs, which +indicate what data to repeat from the dictionary buffer. The bigger +the dictionary, the better the compression ratio usually is, +but dictionaries bigger than the uncompressed data are waste of RAM. +.IP +Typical dictionary size is from 64 KiB to 64 MiB. The minimum is 4 KiB. +The maximum for compression is currently 1.5 GiB. The decompressor already +supports dictionaries up to one byte less than 4 GiB, which is the +maximum for LZMA1 and LZMA2 stream formats. +.IP +Dictionary size has the biggest effect on compression ratio. +Dictionary size and match finder together determine the memory usage of +the LZMA1 or LZMA2 encoder. The same dictionary size is required +for decompressing that was used when compressing, thus the memory usage of +the decoder is determined by the dictionary size used when compressing. +.TP +.BI lc= lc +Specify the number of literal context bits. The minimum is +.B 0 +and the maximum is +.BR 4 ; +the default is +.BR 3 . +In addition, the sum of +.I lc +and +.I lp +must not exceed +.BR 4 . +.TP +.BI lp= lp +Specify the number of literal position bits. The minimum is +.B 0 +and the maximum is +.BR 4 ; +the default is +.BR 0 . +.TP +.BI pb= pb +Specify the number of position bits. The minimum is +.B 0 +and the maximum is +.BR 4 ; +the default is +.BR 2 . +.TP +.BI mode= mode +Compression +.I mode +specifies the function used to analyze the data produced by the match finder. +Supported +.I modes +are +.B fast +and +.BR normal . +The default is +.B fast +for +.I presets +.BR 0 \- 2 +and +.B normal +for +.I presets +.BR 3 \- 9 . +.TP +.BI mf= mf +Match finder has a major effect on encoder speed, memory usage, and +compression ratio. Usually Hash Chain match finders are faster than +Binary Tree match finders. Hash Chains are usually used together with +.B mode=fast +and Binary Trees with +.BR mode=normal . +The memory usage formulas are only rough estimates, +which are closest to reality when +.I dict +is a power of two. +.RS +.TP +.B hc3 +Hash Chain with 2- and 3-byte hashing +.br +Minimum value for +.IR nice : +3 +.br +Memory usage: +.I dict +* 7.5 (if +.I dict +<= 16 MiB); +.br +.I dict +* 5.5 + 64 MiB (if +.I dict +> 16 MiB) +.TP +.B hc4 +Hash Chain with 2-, 3-, and 4-byte hashing +.br +Minimum value for +.IR nice : +4 +.br +Memory usage: +.I dict +* 7.5 +.TP +.B bt2 +Binary Tree with 2-byte hashing +.br +Minimum value for +.IR nice : +2 +.br +Memory usage: +.I dict +* 9.5 +.TP +.B bt3 +Binary Tree with 2- and 3-byte hashing +.br +Minimum value for +.IR nice : +3 +.br +Memory usage: +.I dict +* 11.5 (if +.I dict +<= 16 MiB); +.br +.I dict +* 9.5 + 64 MiB (if +.I dict +> 16 MiB) +.TP +.B bt4 +Binary Tree with 2-, 3-, and 4-byte hashing +.br +Minimum value for +.IR nice : +4 +.br +Memory usage: +.I dict +* 11.5 +.RE +.TP +.BI nice= nice +Specify what is considered to be a nice length for a match. Once a match +of at least +.I nice +bytes is found, the algorithm stops looking for possibly better matches. +.IP +.I nice +can be 2\-273 bytes. Higher values tend to give better compression ratio +at expense of speed. The default depends on the +.I preset +level. +.TP +.BI depth= depth +Specify the maximum search depth in the match finder. The default is the +special value +.BR 0 , +which makes the compressor determine a reasonable +.I depth +from +.I mf +and +.IR nice . +.IP +Using very high values for +.I depth +can make the encoder extremely slow with carefully crafted files. +Avoid setting the +.I depth +over 1000 unless you are prepared to interrupt the compression in case it +is taking too long. +.RE +.IP +When decoding raw streams +.RB ( \-\-format=raw ), +LZMA2 needs only the value of +.BR dict . +LZMA1 needs also +.BR lc , +.BR lp , +and +.BR pb. +.TP +\fB\-\-x86\fR[\fB=\fIoptions\fR] +.TP +\fB\-\-powerpc\fR[\fB=\fIoptions\fR] +.TP +\fB\-\-ia64\fR[\fB=\fIoptions\fR] +.TP +\fB\-\-arm\fR[\fB=\fIoptions\fR] +.TP +\fB\-\-armthumb\fR[\fB=\fIoptions\fR] +.TP +\fB\-\-sparc\fR[\fB=\fIoptions\fR] +Add a branch/call/jump (BCJ) filter to the filter chain. These filters +can be used only as non-last filter in the filter chain. +.IP +A BCJ filter converts relative addresses in the machine code to their +absolute counterparts. This doesn't change the size of the data, but +it increases redundancy, which allows e.g. LZMA2 to get better +compression ratio. +.IP +The BCJ filters are always reversible, so using a BCJ filter for wrong +type of data doesn't cause any data loss. However, applying a BCJ filter +for wrong type of data is a bad idea, because it tends to make the +compression ratio worse. +.IP +Different instruction sets have have different alignment: +.RS +.RS +.TS +tab(;); +l n l +l n l. +Filter;Alignment;Notes +x86;1;32-bit and 64-bit x86 +PowerPC;4;Big endian only +ARM;4;Little endian only +ARM-Thumb;2;Little endian only +IA-64;16;Big or little endian +SPARC;4;Big or little endian +.TE +.RE +.RE +.IP +Since the BCJ-filtered data is usually compressed with LZMA2, the compression +ratio may be improved slightly if the LZMA2 options are set to match the +alignment of the selected BCJ filter. For example, with the IA-64 filter, +it's good to set +.B pb=4 +with LZMA2 (2^4=16). The x86 filter is an exception; it's usually good to +stick to LZMA2's default four-byte alignment when compressing x86 executables. +.IP +All BCJ filters support the same +.IR options : +.RS +.TP +.BI start= offset +Specify the start +.I offset +that is used when converting between relative and absolute addresses. +The +.I offset +must be a multiple of the alignment of the filter (see the table above). +The default is zero. In practice, the default is good; specifying +a custom +.I offset +is almost never useful. +.IP +Specifying a non-zero start +.I offset +is probably useful only if the executable has multiple sections, and there +are many cross-section jumps or calls. Applying a BCJ filter separately for +each section with proper start offset and then compressing the result as +a single chunk may give some improvement in compression ratio compared +to applying the BCJ filter with the default +.I offset +for the whole executable. +.RE +.TP +\fB\-\-delta\fR[\fB=\fIoptions\fR] +Add Delta filter to the filter chain. The Delta filter +can be used only as non-last filter in the filter chain. +.IP +Currently only simple byte-wise delta calculation is supported. It can +be useful when compressing e.g. uncompressed bitmap images or uncompressed +PCM audio. However, special purpose algorithms may give significantly better +results than Delta + LZMA2. This is true especially with audio, which +compresses faster and better e.g. with FLAC. +.IP +Supported +.IR options : +.RS +.TP +.BI dist= distance +Specify the +.I distance +of the delta calculation as bytes. +.I distance +must be 1\-256. The default is 1. +.IP +For example, with +.B dist=2 +and eight-byte input A1 B1 A2 B3 A3 B5 A4 B7, the output will be +A1 B1 01 02 01 02 01 02. +.RE +.SS "Other options" +.TP +.BR \-q ", " \-\-quiet +Suppress warnings and notices. Specify this twice to suppress errors too. +This option has no effect on the exit status. That is, even if a warning +was suppressed, the exit status to indicate a warning is still used. +.TP +.BR \-v ", " \-\-verbose +Be verbose. If standard error is connected to a terminal, +.B xz +will display a progress indicator. +Specifying +.B \-\-verbose +twice will give even more verbose output (useful mostly for debugging). +.TP +.BR \-Q ", " \-\-no\-warn +Don't set the exit status to +.B 2 +even if a condition worth a warning was detected. This option doesn't affect +the verbosity level, thus both +.B \-\-quiet +and +.B \-\-no\-warn +have to be used to not display warnings and to not alter the exit status. +.TP +.BR \-h ", " \-\-help +Display a help message describing the most commonly used options, +and exit successfully. +.TP +.BR \-H ", " \-\-long\-help +Display a help message describing all features of +.BR xz , +and exit successfully +.TP +.BR \-V ", " \-\-version +Display the version number of +.B xz +and liblzma. +.SH "EXIT STATUS" +.TP +.B 0 +All is good. +.TP +.B 1 +An error occurred. +.TP +.B 2 +Something worth a warning occurred, but no actual errors occurred. +.PP +Notices (not warnings or errors) printed on standard error don't affect +the exit status. +.SH ENVIRONMENT +.TP +.B XZ_OPT +A space-separated list of options is parsed from +.B XZ_OPT +before parsing the options given on the command line. Note that only +options are parsed from +.BR XZ_OPT ; +all non-options are silently ignored. Parsing is done with +.BR getopt_long (3) +which is used also for the command line arguments. +.SH "LZMA UTILS COMPATIBILITY" +The command line syntax of +.B xz +is practically a superset of +.BR lzma , +.BR unlzma , +and +.BR lzcat +as found from LZMA Utils 4.32.x. In most cases, it is possible to replace +LZMA Utils with XZ Utils without breaking existing scripts. There are some +incompatibilities though, which may sometimes cause problems. +.SS "Compression preset levels" +The numbering of the compression level presets is not identical in +.B xz +and LZMA Utils. +The most important difference is how dictionary sizes are mapped to different +presets. Dictionary size is roughly equal to the decompressor memory usage. +.RS +.TS +tab(;); +c c c +c n n. +Level;xz;LZMA Utils +\-1;64 KiB;64 KiB +\-2;512 KiB;1 MiB +\-3;1 MiB;512 KiB +\-4;2 MiB;1 MiB +\-5;4 MiB;2 MiB +\-6;8 MiB;4 MiB +\-7;16 MiB;8 MiB +\-8;32 MiB;16 MiB +\-9;64 MiB;32 MiB +.TE +.RE +.PP +The dictionary size differences affect the compressor memory usage too, +but there are some other differences between LZMA Utils and XZ Utils, which +make the difference even bigger: +.RS +.TS +tab(;); +c c c +c n n. +Level;xz;LZMA Utils 4.32.x +\-1;2 MiB;2 MiB +\-2;5 MiB;12 MiB +\-3;13 MiB;12 MiB +\-4;25 MiB;16 MiB +\-5;48 MiB;26 MiB +\-6;94 MiB;45 MiB +\-7;186 MiB;83 MiB +\-8;370 MiB;159 MiB +\-9;674 MiB;311 MiB +.TE +.RE +.PP +The default preset level in LZMA Utils is +.B \-7 +while in XZ Utils it is +.BR \-6 , +so both use 8 MiB dictionary by default. +.SS "Streamed vs. non-streamed .lzma files" +Uncompressed size of the file can be stored in the +.B .lzma +header. LZMA Utils does that when compressing regular files. +The alternative is to mark that uncompressed size is unknown and +use end of payload marker to indicate where the decompressor should stop. +LZMA Utils uses this method when uncompressed size isn't known, which is +the case for example in pipes. +.PP +.B xz +supports decompressing +.B .lzma +files with or without end of payload marker, but all +.B .lzma +files created by +.B xz +will use end of payload marker and have uncompressed size marked as unknown +in the +.B .lzma +header. This may be a problem in some (uncommon) situations. For example, a +.B .lzma +decompressor in an embedded device might work only with files that have known +uncompressed size. If you hit this problem, you need to use LZMA Utils or +LZMA SDK to create +.B .lzma +files with known uncompressed size. +.SS "Unsupported .lzma files" +The +.B .lzma +format allows +.I lc +values up to 8, and +.I lp +values up to 4. LZMA Utils can decompress files with any +.I lc +and +.IR lp , +but always creates files with +.B lc=3 +and +.BR lp=0 . +Creating files with other +.I lc +and +.I lp +is possible with +.B xz +and with LZMA SDK. +.PP +The implementation of the LZMA1 filter in liblzma requires +that the sum of +.I lc +and +.I lp +must not exceed 4. Thus, +.B .lzma +files which exceed this limitation, cannot be decompressed with +.BR xz . +.PP +LZMA Utils creates only +.B .lzma +files which have dictionary size of +.RI "2^" n +(a power of 2), but accepts files with any dictionary size. +liblzma accepts only +.B .lzma +files which have dictionary size of +.RI "2^" n +or +.RI "2^" n " + 2^(" n "\-1)." +This is to decrease false positives when autodetecting +.B .lzma +files. +.PP +These limitations shouldn't be a problem in practice, since practically all +.B .lzma +files have been compressed with settings that liblzma will accept. +.SS "Trailing garbage" +When decompressing, LZMA Utils silently ignore everything after the first +.B .lzma +stream. In most situations, this is a bug. This also means that LZMA Utils +don't support decompressing concatenated +.B .lzma +files. +.PP +If there is data left after the first +.B .lzma +stream, +.B xz +considers the file to be corrupt. This may break obscure scripts which have +assumed that trailing garbage is ignored. +.SH NOTES +.SS Compressed output may vary +The exact compressed output produced from the same uncompressed input file +may vary between XZ Utils versions even if compression options are identical. +This is because the encoder can be improved (faster or better compression) +without affecting the file format. The output can vary even between different +builds of the same XZ Utils version, if different build options are used or +if the endianness of the hardware is different for different builds. +.PP +The above means that implementing +.B \-\-rsyncable +to create rsyncable +.B .xz +files is not going to happen without freezing a part of the encoder +implementation, which can then be used with +.BR \-\-rsyncable . +.SS Embedded .xz decompressors +Embedded +.B .xz +decompressor implementations like XZ Embedded don't necessarily support files +created with +.I check +types other than +.B none +and +.BR crc32 . +Since the default is \fB\-\-check=\fIcrc64\fR, you must use +.B \-\-check=none +or +.B \-\-check=crc32 +when creating files for embedded systems. +.PP +Outside embedded systems, all +.B .xz +format decompressors support all the +.I check +types, or at least are able to decompress the file without verifying the +integrity check if the particular +.I check +is not supported. +.PP +XZ Embedded supports BCJ filters, but only with the default start offset. +.SH "SEE ALSO" +.BR xzdec (1), +.BR gzip (1), +.BR bzip2 (1) +.PP +XZ Utils: +.br +XZ Embedded: +.br +LZMA SDK: diff --git a/Build/source/extra/xz-4.999.9beta/src/xz/xz_w32res.rc b/Build/source/extra/xz-4.999.9beta/src/xz/xz_w32res.rc new file mode 100644 index 00000000000..bad30202991 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xz/xz_w32res.rc @@ -0,0 +1,12 @@ +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + */ + +#define MY_TYPE VFT_APP +#define MY_NAME "xz" +#define MY_SUFFIX ".exe" +#define MY_DESC "xz data compression tool for .xz and .lzma files" +#include "common_w32res.rc" diff --git a/Build/source/extra/xz-4.999.9beta/src/xzdec/Makefile.am b/Build/source/extra/xz-4.999.9beta/src/xzdec/Makefile.am new file mode 100644 index 00000000000..aaa5b5f6490 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xzdec/Makefile.am @@ -0,0 +1,61 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +# Windows resource compiler support. It's fine to use xz_CPPFLAGS +# also for lzmadec. +.rc.o: + $(RC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(xzdec_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) -i $< -o $@ + + +bin_PROGRAMS = xzdec lzmadec + +xzdec_SOURCES = xzdec.c + +if COND_W32 +xzdec_SOURCES += xzdec_w32res.rc +endif + +xzdec_CPPFLAGS = \ + -I$(top_srcdir)/src/common \ + -I$(top_srcdir)/src/liblzma/api \ + -I$(top_builddir)/lib \ + $(STATIC_CPPFLAGS) +xzdec_LDFLAGS = $(STATIC_LDFLAGS) +xzdec_LDADD = $(top_builddir)/src/liblzma/liblzma.la + +if COND_GNULIB +xzdec_LDADD += $(top_builddir)/lib/libgnu.a +endif + +xzdec_LDADD += $(LTLIBINTL) + + +lzmadec_SOURCES = xzdec.c + +if COND_W32 +lzmadec_SOURCES += lzmadec_w32res.rc +endif + +lzmadec_CPPFLAGS = $(xzdec_CPPFLAGS) -DLZMADEC +lzmadec_LDFLAGS = $(xzdec_LDFLAGS) +lzmadec_LDADD = $(xzdec_LDADD) + + +dist_man_MANS = xzdec.1 + +install-data-hook: + cd $(DESTDIR)$(mandir)/man1 && \ + target=`echo xzdec | sed '$(transform)'` && \ + link=`echo lzmadec | sed '$(transform)'` && \ + rm -f $$link.1 && \ + $(LN_S) $$target.1 $$link.1 + +uninstall-hook: + cd $(DESTDIR)$(mandir)/man1 && \ + link=`echo lzmadec | sed '$(transform)'` && \ + rm -f $$link.1 diff --git a/Build/source/extra/xz-4.999.9beta/src/xzdec/Makefile.in b/Build/source/extra/xz-4.999.9beta/src/xzdec/Makefile.in new file mode 100644 index 00000000000..4fda1f5c883 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xzdec/Makefile.in @@ -0,0 +1,714 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ +bin_PROGRAMS = xzdec$(EXEEXT) lzmadec$(EXEEXT) +@COND_W32_TRUE@am__append_1 = xzdec_w32res.rc +@COND_GNULIB_TRUE@am__append_2 = $(top_builddir)/lib/libgnu.a +@COND_W32_TRUE@am__append_3 = lzmadec_w32res.rc +subdir = src/xzdec +DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ + $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" +PROGRAMS = $(bin_PROGRAMS) +am__lzmadec_SOURCES_DIST = xzdec.c lzmadec_w32res.rc +@COND_W32_TRUE@am__objects_1 = lzmadec_w32res.$(OBJEXT) +am_lzmadec_OBJECTS = lzmadec-xzdec.$(OBJEXT) $(am__objects_1) +lzmadec_OBJECTS = $(am_lzmadec_OBJECTS) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_2) $(am__DEPENDENCIES_1) +lzmadec_DEPENDENCIES = $(am__DEPENDENCIES_2) +lzmadec_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(lzmadec_LDFLAGS) \ + $(LDFLAGS) -o $@ +am__xzdec_SOURCES_DIST = xzdec.c xzdec_w32res.rc +@COND_W32_TRUE@am__objects_2 = xzdec_w32res.$(OBJEXT) +am_xzdec_OBJECTS = xzdec-xzdec.$(OBJEXT) $(am__objects_2) +xzdec_OBJECTS = $(am_xzdec_OBJECTS) +xzdec_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_2) $(am__DEPENDENCIES_1) +xzdec_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(xzdec_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(lzmadec_SOURCES) $(xzdec_SOURCES) +DIST_SOURCES = $(am__lzmadec_SOURCES_DIST) $(am__xzdec_SOURCES_DIST) +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' +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(dist_man_MANS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ +DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETOPT_H = @GETOPT_H@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSIX_SHELL = @POSIX_SHELL@ +POSUB = @POSUB@ +PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ +STATIC_LDFLAGS = @STATIC_LDFLAGS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +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@ +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@ +lt_ECHO = @lt_ECHO@ +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@ +xz = @xz@ +xzdec_SOURCES = xzdec.c $(am__append_1) +xzdec_CPPFLAGS = \ + -I$(top_srcdir)/src/common \ + -I$(top_srcdir)/src/liblzma/api \ + -I$(top_builddir)/lib \ + $(STATIC_CPPFLAGS) + +xzdec_LDFLAGS = $(STATIC_LDFLAGS) +xzdec_LDADD = $(top_builddir)/src/liblzma/liblzma.la $(am__append_2) \ + $(LTLIBINTL) +lzmadec_SOURCES = xzdec.c $(am__append_3) +lzmadec_CPPFLAGS = $(xzdec_CPPFLAGS) -DLZMADEC +lzmadec_LDFLAGS = $(xzdec_LDFLAGS) +lzmadec_LDADD = $(xzdec_LDADD) +dist_man_MANS = xzdec.1 +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj .rc +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/xzdec/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/xzdec/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_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 +lzmadec$(EXEEXT): $(lzmadec_OBJECTS) $(lzmadec_DEPENDENCIES) + @rm -f lzmadec$(EXEEXT) + $(lzmadec_LINK) $(lzmadec_OBJECTS) $(lzmadec_LDADD) $(LIBS) +xzdec$(EXEEXT): $(xzdec_OBJECTS) $(xzdec_DEPENDENCIES) + @rm -f xzdec$(EXEEXT) + $(xzdec_LINK) $(xzdec_OBJECTS) $(xzdec_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lzmadec-xzdec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xzdec-xzdec.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +lzmadec-xzdec.o: xzdec.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmadec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lzmadec-xzdec.o -MD -MP -MF $(DEPDIR)/lzmadec-xzdec.Tpo -c -o lzmadec-xzdec.o `test -f 'xzdec.c' || echo '$(srcdir)/'`xzdec.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lzmadec-xzdec.Tpo $(DEPDIR)/lzmadec-xzdec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xzdec.c' object='lzmadec-xzdec.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmadec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lzmadec-xzdec.o `test -f 'xzdec.c' || echo '$(srcdir)/'`xzdec.c + +lzmadec-xzdec.obj: xzdec.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmadec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lzmadec-xzdec.obj -MD -MP -MF $(DEPDIR)/lzmadec-xzdec.Tpo -c -o lzmadec-xzdec.obj `if test -f 'xzdec.c'; then $(CYGPATH_W) 'xzdec.c'; else $(CYGPATH_W) '$(srcdir)/xzdec.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lzmadec-xzdec.Tpo $(DEPDIR)/lzmadec-xzdec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xzdec.c' object='lzmadec-xzdec.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmadec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lzmadec-xzdec.obj `if test -f 'xzdec.c'; then $(CYGPATH_W) 'xzdec.c'; else $(CYGPATH_W) '$(srcdir)/xzdec.c'; fi` + +xzdec-xzdec.o: xzdec.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzdec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xzdec-xzdec.o -MD -MP -MF $(DEPDIR)/xzdec-xzdec.Tpo -c -o xzdec-xzdec.o `test -f 'xzdec.c' || echo '$(srcdir)/'`xzdec.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xzdec-xzdec.Tpo $(DEPDIR)/xzdec-xzdec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xzdec.c' object='xzdec-xzdec.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzdec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xzdec-xzdec.o `test -f 'xzdec.c' || echo '$(srcdir)/'`xzdec.c + +xzdec-xzdec.obj: xzdec.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzdec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xzdec-xzdec.obj -MD -MP -MF $(DEPDIR)/xzdec-xzdec.Tpo -c -o xzdec-xzdec.obj `if test -f 'xzdec.c'; then $(CYGPATH_W) 'xzdec.c'; else $(CYGPATH_W) '$(srcdir)/xzdec.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xzdec-xzdec.Tpo $(DEPDIR)/xzdec-xzdec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xzdec.c' object='xzdec-xzdec.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzdec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xzdec-xzdec.obj `if test -f 'xzdec.c'; then $(CYGPATH_W) 'xzdec.c'; else $(CYGPATH_W) '$(srcdir)/xzdec.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(dist_man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } + +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) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + 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; }; }'`; \ + 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) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + 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; }; }'`; \ + 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 + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @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 +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(MANS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; 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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -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-binPROGRAMS uninstall-man + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +uninstall-man: uninstall-man1 + +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am \ + install-data-hook install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-man1 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-binPROGRAMS \ + uninstall-hook uninstall-man uninstall-man1 + + +# Windows resource compiler support. It's fine to use xz_CPPFLAGS +# also for lzmadec. +.rc.o: + $(RC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(xzdec_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) -i $< -o $@ + +install-data-hook: + cd $(DESTDIR)$(mandir)/man1 && \ + target=`echo xzdec | sed '$(transform)'` && \ + link=`echo lzmadec | sed '$(transform)'` && \ + rm -f $$link.1 && \ + $(LN_S) $$target.1 $$link.1 + +uninstall-hook: + cd $(DESTDIR)$(mandir)/man1 && \ + link=`echo lzmadec | sed '$(transform)'` && \ + rm -f $$link.1 + +# 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/Build/source/extra/xz-4.999.9beta/src/xzdec/lzmadec_w32res.rc b/Build/source/extra/xz-4.999.9beta/src/xzdec/lzmadec_w32res.rc new file mode 100644 index 00000000000..7d90e420541 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xzdec/lzmadec_w32res.rc @@ -0,0 +1,5 @@ +#define MY_TYPE VFT_APP +#define MY_NAME "lzmadec" +#define MY_SUFFIX ".exe" +#define MY_DESC "lzmadec uncompression tool for .lzma files" +#include "common_w32res.rc" diff --git a/Build/source/extra/xz-4.999.9beta/src/xzdec/xzdec.1 b/Build/source/extra/xz-4.999.9beta/src/xzdec/xzdec.1 new file mode 100644 index 00000000000..442a19ece12 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xzdec/xzdec.1 @@ -0,0 +1,168 @@ +.\" +.\" Author: Lasse Collin +.\" +.\" This file has been put into the public domain. +.\" You can do whatever you want with this file. +.\" +.TH XZDEC 1 "2009-06-04" "Tukaani" "XZ Utils" +.SH NAME +xzdec, lzmadec \- Small .xz and .lzma decompressors +.SH SYNOPSIS +.B xzdec +.RI [ option ]... +.RI [ file ]... +.br +.B lzmadec +.RI [ option ]... +.RI [ file ]... +.SH DESCRIPTION +.B xzdec +is a liblzma-based decompression-only tool for +.B .xz +(and only +.BR .xz ) +files. +.B xzdec +is intended to work as a drop-in replacement for +.BR xz (1) +in the most common situations where a script has been written to use +.B "xz \-\-decompress \-\-stdout" +(and possibly a few other commonly used options) to decompress +.B .xz +files. +.B lzmadec +is identical to +.B xzdec +except that +.B lzmadec +supports +.B .lzma +files instead of +.B .xz +files. +.PP +To reduce the size of the executable, +.B xzdec +doesn't support multithreading or localization, and doesn't read options from +.B XZ_OPT +environment variable. +.B xzdec +doesn't support displaying intermediate progress information: sending +.B SIGINFO +to +.B xzdec +does nothing, but sending +.B SIGUSR1 +terminates the process instead of displaying progress information. +.SH OPTIONS +.TP +.BR \-d ", " \-\-decompress ", " \-\-uncompress +Ignored for +.BR xz (1) +compatibility. +.B xzdec +supports only decompression. +.TP +.BR \-k ", " \-\-keep +Ignored for +.BR xz (1) +compatibility. +.B xzdec +never creates or removes any files. +.TP +.BR \-c ", " \-\-stdout ", " \-\-to-stdout +Ignored for +.BR xz (1) +compatibility. +.B xzdec +always writes the decompressed data to standard output. +.TP +\fB\-M\fR \fIlimit\fR, \fB\-\-memory=\fIlimit +Set the memory usage +.IR limit . +If this option is specified multiple times, the last one takes effect. The +.I limit +can be specified in multiple ways: +.RS +.IP \(bu 3 +The +.I limit +can be an absolute value in bytes. Using an integer suffix like +.B MiB +can be useful. Example: +.B "\-\-memory=80MiB" +.IP \(bu 3 +The +.I limit +can be specified as a percentage of physical RAM. Example: +.B "\-\-memory=70%" +.IP \(bu 3 +The +.I limit +can be reset back to its default value (currently 40 % of physical RAM) +by setting it to +.BR 0 . +.IP \(bu 3 +The memory usage limiting can be effectively disabled by setting +.I limit +to +.BR max . +This isn't recommended. It's usually better to use, for example, +.BR \-\-memory=90% . +.RE +.IP +The current +.I limit +can be seen near the bottom of the output of the +.B \-\-help +option. +.TP +.BR \-q ", " \-\-quiet +Specifying this once does nothing since +.B xzdec +never displays any warnings or notices. +Specify this twice to suppress errors. +.TP +.BR \-Q ", " \-\-no-warn +Ignored for +.BR xz (1) +compatibility. +.B xzdec +never uses the exit status +.BR "2" . +.TP +.BR \-h ", " \-\-help +Display a help message and exit successfully. +.TP +.BR \-V ", " \-\-version +Display the version number of +.B xzdec +and liblzma. +.SH "EXIT STATUS" +.TP +.B 0 +All was good. +.TP +.B 1 +An error occurred. +.PP +.B xzdec +doesn't have any warning messages like +.BR xz (1) +has, thus the exit status +.B 2 +is not used by +.BR xzdec . +.SH NOTES +.B xzdec +and +.B lzmadec +are not really that small. The size can be reduced further by dropping +features from liblzma at compile time, but that shouldn't usually be done +for executables distributed in typical non-embedded operating system +distributions. If you need a truly small +.B .xz +decompressor, consider using XZ Embedded. +.\" TODO: Provide URL to XZ Embedded. +.SH "SEE ALSO" +.BR xz (1) diff --git a/Build/source/extra/xz-4.999.9beta/src/xzdec/xzdec.c b/Build/source/extra/xz-4.999.9beta/src/xzdec/xzdec.c new file mode 100644 index 00000000000..e99934f535c --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xzdec/xzdec.c @@ -0,0 +1,496 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file xzdec.c +/// \brief Simple single-threaded tool to uncompress .xz or .lzma files +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "sysdefs.h" +#include "lzma.h" + +#include +#include +#include +#include + +#ifdef DOSLIKE +# include +# include +#endif + +#include "getopt.h" +#include "physmem.h" + + +#ifdef LZMADEC +# define TOOL_FORMAT "lzma" +#else +# define TOOL_FORMAT "xz" +#endif + + +/// Number of bytes to use memory at maximum +static uint64_t memlimit; + +/// Error messages are suppressed if this is zero, which is the case when +/// --quiet has been given at least twice. +static unsigned int display_errors = 2; + +/// Program name to be shown in error messages +static const char *argv0; + + +static void lzma_attribute((format(printf, 1, 2))) +my_errorf(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + + if (display_errors) { + fprintf(stderr, "%s: ", argv0); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + } + + va_end(ap); + return; +} + + +static void lzma_attribute((noreturn)) +my_exit(void) +{ + int status = EXIT_SUCCESS; + + // Close stdout. We don't care about stderr, because we write to it + // only when an error has already occurred. + const int ferror_err = ferror(stdout); + const int fclose_err = fclose(stdout); + + if (ferror_err || fclose_err) { + // If it was fclose() that failed, we have the reason + // in errno. If only ferror() indicated an error, + // we have no idea what the reason was. + my_errorf("Writing to standard output failed: %s", fclose_err + ? strerror(errno) : "Unknown error"); + status = EXIT_FAILURE; + } + + exit(status); +} + + +static void lzma_attribute((noreturn)) +help(void) +{ + printf( +"Usage: %s [OPTION]... [FILE]...\n" +"Uncompress files in the ." TOOL_FORMAT " format to the standard output.\n" +"\n" +" -c, --stdout (ignored)\n" +" -d, --decompress (ignored)\n" +" -k, --keep (ignored)\n" +" -M, --memory=NUM use NUM bytes of memory at maximum (0 means default)\n" +" -q, --quiet specify *twice* to suppress errors\n" +" -Q, --no-warn (ignored)\n" +" -h, --help display this help and exit\n" +" -V, --version display the version number and exit\n" +"\n" +"With no FILE, or when FILE is -, read standard input.\n" +"\n" +"On this system and configuration, this program will use at maximum of roughly\n" +"%" PRIu64 " MiB RAM.\n" +"\n" +"Report bugs to <" PACKAGE_BUGREPORT "> (in English or Finnish).\n" +PACKAGE_NAME " home page: <" PACKAGE_HOMEPAGE ">\n", + argv0, memlimit / (1024 * 1024)); + my_exit(); +} + + +static void lzma_attribute((noreturn)) +version(void) +{ + printf(TOOL_FORMAT "dec (" PACKAGE_NAME ") " LZMA_VERSION_STRING "\n" + "liblzma %s\n", lzma_version_string()); + + my_exit(); +} + + +/// Find out the amount of physical memory (RAM) in the system, and set +/// the memory usage limit to the given percentage of RAM. +static void +memlimit_set_percentage(uint32_t percentage) +{ + uint64_t mem = physmem(); + + // If we cannot determine the amount of RAM, assume 32 MiB. + if (mem == 0) + mem = UINT64_C(32) * 1024 * 1024; + + memlimit = percentage * mem / 100; + return; +} + + +/// Set the memory usage limit to give number of bytes. Zero is a special +/// value to indicate the default limit. +static void +memlimit_set(uint64_t new_memlimit) +{ + if (new_memlimit == 0) + memlimit_set_percentage(40); + else + memlimit = new_memlimit; + + return; +} + + +/// \brief Convert a string to uint64_t +/// +/// This is rudely copied from src/xz/util.c and modified a little. :-( +/// +/// \param max Return value when the string "max" was specified. +/// +static uint64_t +str_to_uint64(const char *value, uint64_t max) +{ + uint64_t result = 0; + + // Accept special value "max". + if (strcmp(value, "max") == 0) + return max; + + if (*value < '0' || *value > '9') { + my_errorf("%s: Value is not a non-negative decimal integer", + value); + exit(EXIT_FAILURE); + } + + do { + // Don't overflow. + if (result > (UINT64_MAX - 9) / 10) + return UINT64_MAX; + + result *= 10; + result += *value - '0'; + ++value; + } while (*value >= '0' && *value <= '9'); + + if (*value != '\0') { + // Look for suffix. + static const struct { + const char name[4]; + uint32_t multiplier; + } suffixes[] = { + { "k", 1000 }, + { "kB", 1000 }, + { "M", 1000000 }, + { "MB", 1000000 }, + { "G", 1000000000 }, + { "GB", 1000000000 }, + { "Ki", 1024 }, + { "KiB", 1024 }, + { "Mi", 1048576 }, + { "MiB", 1048576 }, + { "Gi", 1073741824 }, + { "GiB", 1073741824 } + }; + + uint32_t multiplier = 0; + for (size_t i = 0; i < ARRAY_SIZE(suffixes); ++i) { + if (strcmp(value, suffixes[i].name) == 0) { + multiplier = suffixes[i].multiplier; + break; + } + } + + if (multiplier == 0) { + my_errorf("%s: Invalid suffix", value); + exit(EXIT_FAILURE); + } + + // Don't overflow here either. + if (result > UINT64_MAX / multiplier) + result = UINT64_MAX; + else + result *= multiplier; + } + + return result; +} + + +/// Parses command line options. +static void +parse_options(int argc, char **argv) +{ + static const char short_opts[] = "cdkM:hqQV"; + static const struct option long_opts[] = { + { "stdout", no_argument, NULL, 'c' }, + { "to-stdout", no_argument, NULL, 'c' }, + { "decompress", no_argument, NULL, 'd' }, + { "uncompress", no_argument, NULL, 'd' }, + { "keep", no_argument, NULL, 'k' }, + { "memory", required_argument, NULL, 'M' }, + { "quiet", no_argument, NULL, 'q' }, + { "no-warn", no_argument, NULL, 'Q' }, + { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, 'V' }, + { NULL, 0, NULL, 0 } + }; + + int c; + + while ((c = getopt_long(argc, argv, short_opts, long_opts, NULL)) + != -1) { + switch (c) { + case 'c': + case 'd': + case 'k': + case 'Q': + break; + + case 'M': { + // Support specifying the limit as a percentage of + // installed physical RAM. + const size_t len = strlen(optarg); + if (len > 0 && optarg[len - 1] == '%') { + // Memory limit is a percentage of total + // installed RAM. + optarg[len - 1] = '\0'; + const uint64_t percentage + = str_to_uint64(optarg, 100); + if (percentage < 1 || percentage > 100) { + my_errorf("Percentage must be in " + "the range [1, 100]"); + exit(EXIT_FAILURE); + } + + memlimit_set_percentage(percentage); + } else { + memlimit_set(str_to_uint64( + optarg, UINT64_MAX)); + } + + break; + } + + case 'q': + if (display_errors > 0) + --display_errors; + + break; + + case 'h': + help(); + + case 'V': + version(); + + default: + exit(EXIT_FAILURE); + } + } + + return; +} + + +static void +uncompress(lzma_stream *strm, FILE *file, const char *filename) +{ + lzma_ret ret; + + // Initialize the decoder +#ifdef LZMADEC + ret = lzma_alone_decoder(strm, memlimit); +#else + ret = lzma_stream_decoder(strm, memlimit, LZMA_CONCATENATED); +#endif + + // The only reasonable error here is LZMA_MEM_ERROR. + // FIXME: Maybe also LZMA_MEMLIMIT_ERROR in future? + if (ret != LZMA_OK) { + my_errorf("%s", ret == LZMA_MEM_ERROR ? strerror(ENOMEM) + : "Internal error (bug)"); + exit(EXIT_FAILURE); + } + + // Input and output buffers + uint8_t in_buf[BUFSIZ]; + uint8_t out_buf[BUFSIZ]; + + strm->avail_in = 0; + strm->next_out = out_buf; + strm->avail_out = BUFSIZ; + + lzma_action action = LZMA_RUN; + + while (true) { + if (strm->avail_in == 0) { + strm->next_in = in_buf; + strm->avail_in = fread(in_buf, 1, BUFSIZ, file); + + if (ferror(file)) { + // POSIX says that fread() sets errno if + // an error occurred. ferror() doesn't + // touch errno. + my_errorf("%s: Error reading input file: %s", + filename, strerror(errno)); + exit(EXIT_FAILURE); + } + +#ifndef LZMADEC + // When using LZMA_CONCATENATED, we need to tell + // liblzma when it has got all the input. + if (feof(file)) + action = LZMA_FINISH; +#endif + } + + ret = lzma_code(strm, action); + + // Write and check write error before checking decoder error. + // This way as much data as possible gets written to output + // even if decoder detected an error. + if (strm->avail_out == 0 || ret != LZMA_OK) { + const size_t write_size = BUFSIZ - strm->avail_out; + + if (fwrite(out_buf, 1, write_size, stdout) + != write_size) { + // Wouldn't be a surprise if writing to stderr + // would fail too but at least try to show an + // error message. + my_errorf("Cannot write to standard output: " + "%s", strerror(errno)); + exit(EXIT_FAILURE); + } + + strm->next_out = out_buf; + strm->avail_out = BUFSIZ; + } + + if (ret != LZMA_OK) { + if (ret == LZMA_STREAM_END) { +#ifdef LZMADEC + // Check that there's no trailing garbage. + if (strm->avail_in != 0 + || fread(in_buf, 1, 1, file) + != 0 + || !feof(file)) + ret = LZMA_DATA_ERROR; + else + return; +#else + // lzma_stream_decoder() already guarantees + // that there's no trailing garbage. + assert(strm->avail_in == 0); + assert(action == LZMA_FINISH); + assert(feof(file)); + return; +#endif + } + + const char *msg; + switch (ret) { + case LZMA_MEM_ERROR: + msg = strerror(ENOMEM); + break; + + case LZMA_MEMLIMIT_ERROR: + msg = "Memory usage limit reached"; + break; + + case LZMA_FORMAT_ERROR: + msg = "File format not recognized"; + break; + + case LZMA_OPTIONS_ERROR: + // FIXME: Better message? + msg = "Unsupported compression options"; + break; + + case LZMA_DATA_ERROR: + msg = "File is corrupt"; + break; + + case LZMA_BUF_ERROR: + msg = "Unexpected end of input"; + break; + + default: + msg = "Internal error (bug)"; + break; + } + + my_errorf("%s: %s", filename, msg); + exit(EXIT_FAILURE); + } + } +} + + +int +main(int argc, char **argv) +{ + // Set the argv0 global so that we can print the command name in + // error and help messages. + argv0 = argv[0]; + + // Set the default memory usage limit. This is needed before parsing + // the command line arguments. + memlimit_set(0); + + // Parse the command line options. + parse_options(argc, argv); + + // The same lzma_stream is used for all files that we decode. This way + // we don't need to reallocate memory for every file if they use same + // compression settings. + lzma_stream strm = LZMA_STREAM_INIT; + + // Some systems require setting stdin and stdout to binary mode. +#ifdef DOSLIKE + setmode(fileno(stdin), O_BINARY); + setmode(fileno(stdout), O_BINARY); +#endif + + if (optind == argc) { + // No filenames given, decode from stdin. + uncompress(&strm, stdin, "(stdin)"); + } else { + // Loop through the filenames given on the command line. + do { + // "-" indicates stdin. + if (strcmp(argv[optind], "-") == 0) { + uncompress(&strm, stdin, "(stdin)"); + } else { + FILE *file = fopen(argv[optind], "rb"); + if (file == NULL) { + my_errorf("%s: %s", argv[optind], + strerror(errno)); + exit(EXIT_FAILURE); + } + + uncompress(&strm, file, argv[optind]); + fclose(file); + } + } while (++optind < argc); + } + +#ifndef NDEBUG + // Free the memory only when debugging. Freeing wastes some time, + // but allows detecting possible memory leaks with Valgrind. + lzma_end(&strm); +#endif + + my_exit(); +} diff --git a/Build/source/extra/xz-4.999.9beta/src/xzdec/xzdec_w32res.rc b/Build/source/extra/xz-4.999.9beta/src/xzdec/xzdec_w32res.rc new file mode 100644 index 00000000000..626f26cea87 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/src/xzdec/xzdec_w32res.rc @@ -0,0 +1,12 @@ +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + */ + +#define MY_TYPE VFT_APP +#define MY_NAME "xzdec" +#define MY_SUFFIX ".exe" +#define MY_DESC "xzdec uncompression tool for .xz files" +#include "common_w32res.rc" diff --git a/Build/source/extra/xz-4.999.9beta/tests/Makefile.am b/Build/source/extra/xz-4.999.9beta/tests/Makefile.am new file mode 100644 index 00000000000..d01787a37ad --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/tests/Makefile.am @@ -0,0 +1,51 @@ +## +## Author: Lasse Collin +## +## This file has been put into the public domain. +## You can do whatever you want with this file. +## + +EXTRA_DIST = \ + files \ + tests.h \ + test_files.sh \ + test_compress.sh \ + bcj_test.c \ + compress_prepared_bcj_sparc \ + compress_prepared_bcj_x86 + +AM_CPPFLAGS = \ + -I$(top_srcdir)/src/common \ + -I$(top_srcdir)/src/liblzma/api \ + -I$(top_builddir)/lib \ + $(STATIC_CPPFLAGS) + +AM_LDFLAGS = $(STATIC_LDFLAGS) + +LDADD = $(top_builddir)/src/liblzma/liblzma.la + +if COND_GNULIB +LDADD += $(top_builddir)/lib/libgnu.a +endif + +LDADD += $(LTLIBINTL) + +check_PROGRAMS = \ + create_compress_files \ + test_check \ + test_stream_flags \ + test_filter_flags \ + test_block_header \ + test_index + +TESTS = \ + test_check \ + test_stream_flags \ + test_filter_flags \ + test_block_header \ + test_index \ + test_files.sh \ + test_compress.sh + +clean-local: + -rm -f compress_generated_* diff --git a/Build/source/extra/xz-4.999.9beta/tests/Makefile.in b/Build/source/extra/xz-4.999.9beta/tests/Makefile.in new file mode 100644 index 00000000000..d4a018ecac3 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/tests/Makefile.in @@ -0,0 +1,687 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ +@COND_GNULIB_TRUE@am__append_1 = $(top_builddir)/lib/libgnu.a +check_PROGRAMS = create_compress_files$(EXEEXT) test_check$(EXEEXT) \ + test_stream_flags$(EXEEXT) test_filter_flags$(EXEEXT) \ + test_block_header$(EXEEXT) test_index$(EXEEXT) +TESTS = test_check$(EXEEXT) test_stream_flags$(EXEEXT) \ + test_filter_flags$(EXEEXT) test_block_header$(EXEEXT) \ + test_index$(EXEEXT) test_files.sh test_compress.sh +subdir = tests +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ + $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +create_compress_files_SOURCES = create_compress_files.c +create_compress_files_OBJECTS = create_compress_files.$(OBJEXT) +create_compress_files_LDADD = $(LDADD) +am__DEPENDENCIES_1 = +create_compress_files_DEPENDENCIES = \ + $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ + $(am__DEPENDENCIES_1) +test_block_header_SOURCES = test_block_header.c +test_block_header_OBJECTS = test_block_header.$(OBJEXT) +test_block_header_LDADD = $(LDADD) +test_block_header_DEPENDENCIES = \ + $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ + $(am__DEPENDENCIES_1) +test_check_SOURCES = test_check.c +test_check_OBJECTS = test_check.$(OBJEXT) +test_check_LDADD = $(LDADD) +test_check_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) +test_filter_flags_SOURCES = test_filter_flags.c +test_filter_flags_OBJECTS = test_filter_flags.$(OBJEXT) +test_filter_flags_LDADD = $(LDADD) +test_filter_flags_DEPENDENCIES = \ + $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ + $(am__DEPENDENCIES_1) +test_index_SOURCES = test_index.c +test_index_OBJECTS = test_index.$(OBJEXT) +test_index_LDADD = $(LDADD) +test_index_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ + $(am__append_1) $(am__DEPENDENCIES_1) +test_stream_flags_SOURCES = test_stream_flags.c +test_stream_flags_OBJECTS = test_stream_flags.$(OBJEXT) +test_stream_flags_LDADD = $(LDADD) +test_stream_flags_DEPENDENCIES = \ + $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ + $(am__DEPENDENCIES_1) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = create_compress_files.c test_block_header.c test_check.c \ + test_filter_flags.c test_index.c test_stream_flags.c +DIST_SOURCES = create_compress_files.c test_block_header.c \ + test_check.c test_filter_flags.c test_index.c \ + test_stream_flags.c +ETAGS = etags +CTAGS = ctags +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ +DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETOPT_H = @GETOPT_H@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSIX_SHELL = @POSIX_SHELL@ +POSUB = @POSUB@ +PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ +STATIC_LDFLAGS = @STATIC_LDFLAGS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +acx_pthread_config = @acx_pthread_config@ +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@ +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@ +lt_ECHO = @lt_ECHO@ +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@ +xz = @xz@ +EXTRA_DIST = \ + files \ + tests.h \ + test_files.sh \ + test_compress.sh \ + bcj_test.c \ + compress_prepared_bcj_sparc \ + compress_prepared_bcj_x86 + +AM_CPPFLAGS = \ + -I$(top_srcdir)/src/common \ + -I$(top_srcdir)/src/liblzma/api \ + -I$(top_builddir)/lib \ + $(STATIC_CPPFLAGS) + +AM_LDFLAGS = $(STATIC_LDFLAGS) +LDADD = $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ + $(LTLIBINTL) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign tests/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-checkPROGRAMS: + @list='$(check_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 +create_compress_files$(EXEEXT): $(create_compress_files_OBJECTS) $(create_compress_files_DEPENDENCIES) + @rm -f create_compress_files$(EXEEXT) + $(LINK) $(create_compress_files_OBJECTS) $(create_compress_files_LDADD) $(LIBS) +test_block_header$(EXEEXT): $(test_block_header_OBJECTS) $(test_block_header_DEPENDENCIES) + @rm -f test_block_header$(EXEEXT) + $(LINK) $(test_block_header_OBJECTS) $(test_block_header_LDADD) $(LIBS) +test_check$(EXEEXT): $(test_check_OBJECTS) $(test_check_DEPENDENCIES) + @rm -f test_check$(EXEEXT) + $(LINK) $(test_check_OBJECTS) $(test_check_LDADD) $(LIBS) +test_filter_flags$(EXEEXT): $(test_filter_flags_OBJECTS) $(test_filter_flags_DEPENDENCIES) + @rm -f test_filter_flags$(EXEEXT) + $(LINK) $(test_filter_flags_OBJECTS) $(test_filter_flags_LDADD) $(LIBS) +test_index$(EXEEXT): $(test_index_OBJECTS) $(test_index_DEPENDENCIES) + @rm -f test_index$(EXEEXT) + $(LINK) $(test_index_OBJECTS) $(test_index_LDADD) $(LIBS) +test_stream_flags$(EXEEXT): $(test_stream_flags_OBJECTS) $(test_stream_flags_DEPENDENCIES) + @rm -f test_stream_flags$(EXEEXT) + $(LINK) $(test_stream_flags_OBJECTS) $(test_stream_flags_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/create_compress_files.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_block_header.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_check.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_filter_flags.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_index.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_stream_flags.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +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) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + 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; }; }'`; \ + 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) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + 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; }; }'`; \ + 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 \ + echo "$$grn$$dashes"; \ + else \ + echo "$$red$$dashes"; \ + fi; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes$$std"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @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 +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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-checkPROGRAMS clean-generic clean-libtool clean-local \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +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 -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: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool clean-local \ + ctags distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am 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 + + +clean-local: + -rm -f compress_generated_* + +# 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/Build/source/extra/xz-4.999.9beta/tests/bcj_test.c b/Build/source/extra/xz-4.999.9beta/tests/bcj_test.c new file mode 100644 index 00000000000..05de38a28a3 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/tests/bcj_test.c @@ -0,0 +1,65 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file bcj_test.c +/// \brief Source code of compress_prepared_bcj_* +/// +/// This is a simple program that should make the compiler to generate +/// PC-relative branches, jumps, and calls. The compiled files can then +/// be used to test the branch conversion filters. Note that this program +/// itself does nothing useful. +/// +/// Compiling: gcc -std=c99 -fPIC -c bcj_test.c +/// Don't optimize or strip. +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +extern int jump(int a, int b); + + +extern int +call(int a, int b) +{ + if (a < b) + a = jump(a, b); + + return a; +} + + +extern int +jump(int a, int b) +{ + // The loop generates conditional jump backwards. + while (1) { + if (a < b) { + a *= 2; + a += 3 * b; + break; + } else { + // Put enough code here to prevent JMP SHORT on x86. + a += b; + a /= 2; + b += b % 5; + a -= b / 3; + b = 2 * b + a - 1; + a *= b + a + 1; + b += a - 1; + a += b * 2 - a / 5; + } + } + + return a; +} + + +int +main(int argc, char **argv) +{ + int a = call(argc, argc + 1); + return a == 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/tests/compress_prepared_bcj_sparc b/Build/source/extra/xz-4.999.9beta/tests/compress_prepared_bcj_sparc new file mode 100644 index 00000000000..86ea7ddb11b Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/compress_prepared_bcj_sparc differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/compress_prepared_bcj_x86 b/Build/source/extra/xz-4.999.9beta/tests/compress_prepared_bcj_x86 new file mode 100644 index 00000000000..bcc546f04cb Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/compress_prepared_bcj_x86 differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/create_compress_files.c b/Build/source/extra/xz-4.999.9beta/tests/create_compress_files.c new file mode 100644 index 00000000000..44367d8f18e --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/tests/create_compress_files.c @@ -0,0 +1,157 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file create_compress_files.c +/// \brief Creates bunch of test files to be compressed +/// +/// Using a test file generator program saves space in the source code +/// package considerably. +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "sysdefs.h" +#include + + +// Avoid re-creating the test files every time the tests are run. +#define create_test(name) \ +do { \ + if (!file_exists("compress_generated_" #name)) { \ + FILE *file = file_create("compress_generated_" #name); \ + write_ ## name(file); \ + file_finish(file, "compress_generated_" #name); \ + } \ +} while (0) + + +static bool +file_exists(const char *filename) +{ + // Trying to be somewhat portable by avoiding stat(). + FILE *file = fopen(filename, "rb"); + bool ret; + + if (file != NULL) { + fclose(file); + ret = true; + } else { + ret = false; + } + + return ret; +} + + +static FILE * +file_create(const char *filename) +{ + FILE *file = fopen(filename, "wb"); + + if (file == NULL) { + perror(filename); + exit(1); + } + + return file; +} + + +static void +file_finish(FILE *file, const char *filename) +{ + const bool ferror_fail = ferror(file); + const bool fclose_fail = fclose(file); + + if (ferror_fail || fclose_fail) { + perror(filename); + exit(1); + } +} + + +// File that repeats "abc\n" a few thousand times. This is targeted +// especially at Subblock filter's run-length encoder. +static void +write_abc(FILE *file) +{ + for (size_t i = 0; i < 12345; ++i) + fwrite("abc\n", 4, 1, file); +} + + +// File that doesn't compress. We always use the same random seed to +// generate identical files on all systems. +static void +write_random(FILE *file) +{ + uint32_t n = 5; + + for (size_t i = 0; i < 123456; ++i) { + n = 101771 * n + 71777; + + putc(n & 0xFF, file); + putc((n >> 8) & 0xFF, file); + putc((n >> 16) & 0xFF, file); + putc(n >> 24, file); + } +} + + +// Text file +static void +write_text(FILE *file) +{ + static const char *lorem[] = { + "Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", + "adipisicing", "elit,", "sed", "do", "eiusmod", "tempor", + "incididunt", "ut", "labore", "et", "dolore", "magna", + "aliqua.", "Ut", "enim", "ad", "minim", "veniam,", "quis", + "nostrud", "exercitation", "ullamco", "laboris", "nisi", + "ut", "aliquip", "ex", "ea", "commodo", "consequat.", + "Duis", "aute", "irure", "dolor", "in", "reprehenderit", + "in", "voluptate", "velit", "esse", "cillum", "dolore", + "eu", "fugiat", "nulla", "pariatur.", "Excepteur", "sint", + "occaecat", "cupidatat", "non", "proident,", "sunt", "in", + "culpa", "qui", "officia", "deserunt", "mollit", "anim", + "id", "est", "laborum." + }; + + // Let the first paragraph be the original text. + for (size_t w = 0; w < ARRAY_SIZE(lorem); ++w) { + fprintf(file, "%s ", lorem[w]); + + if (w % 7 == 6) + fprintf(file, "\n"); + } + + // The rest shall be (hopefully) meaningless combinations of + // the same words. + uint32_t n = 29; + + for (size_t p = 0; p < 500; ++p) { + fprintf(file, "\n\n"); + + for (size_t w = 0; w < ARRAY_SIZE(lorem); ++w) { + n = 101771 * n + 71777; + + fprintf(file, "%s ", lorem[n % ARRAY_SIZE(lorem)]); + + if (w % 7 == 6) + fprintf(file, "\n"); + } + } +} + + +int +main(void) +{ + create_test(abc); + create_test(random); + create_test(text); + return 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/README b/Build/source/extra/xz-4.999.9beta/tests/files/README new file mode 100644 index 00000000000..392ff768a90 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/tests/files/README @@ -0,0 +1,232 @@ + +.xz Test Files +---------------- + +0. Introduction + + This directory contains bunch of files to test handling of .xz files + in .xz decoder implementations. Many of the files have been created + by hand with a hex editor, thus there is no better "source code" than + the files themselves. All the test files (*.xz) and this README have + been put into the public domain. + + +1. File Types + + Good files (good-*.xz) must decode successfully without requiring + a lot of CPU time or RAM. + + Unsupported files (unsupported-*.xz) are good files, but headers + indicate features not supported by the current file format + specification. + + Bad files (bad-*.xz) must cause the decoder to give an error. Like + with the good files, these files must not require a lot of CPU time + or RAM before they get detected to be broken. + + +2. Descriptions of Individual Files + +2.1. Good Files + + good-0-empty.xz has one Stream with no Blocks. + + good-0pad-empty.xz has one Stream with no Blocks followed by + four-byte Stream Padding. + + good-0cat-empty.xz has two zero-Block Streams concatenated without + Stream Padding. + + good-0catpad-empty.xz has two zero-Block Streams concatenated with + four-byte Stream Padding between the Streams. + + good-1-check-none.xz has one Stream with one Block with two + uncompressed LZMA2 chunks and no integrity check. + + good-1-check-crc32.xz has one Stream with one Block with two + uncompressed LZMA2 chunks and CRC32 check. + + good-1-check-crc64.xz is like good-1-check-crc32.xz but with CRC64. + + good-1-check-sha256.xz is like good-1-check-crc32.xz but with + SHA256. + + good-2-lzma2.xz has one Stream with two Blocks with one uncompressed + LZMA2 chunk in each Block. + + good-1-block_header-1.xz has both Compressed Size and Uncompressed + Size in the Block Header. This has also four extra bytes of Header + Padding. + + good-1-block_header-2.xz has known Compressed Size. + + good-1-block_header-3.xz has known Uncompressed Size. + + good-1-delta-lzma2.tiff.xz is an image file that compresses + better with Delta+LZMA2 than with plain LZMA2. + + good-1-x86-lzma2.xz uses the x86 filter (BCJ) and LZMA2. The + uncompressed file is compress_prepared_bcj_x86 found from the tests + directory. + + good-1-sparc-lzma2.xz uses the SPARC filter and LZMA. The + uncompressed file is compress_prepared_bcj_sparc found from the tests + directory. + + good-1-lzma2-1.xz has two LZMA2 chunks, of which the second sets + new properties. + + good-1-lzma2-2.xz has two LZMA2 chunks, of which the second resets + the state without specifying new properties. + + good-1-lzma2-3.xz has two LZMA2 chunks, of which the first is + uncompressed and the second is LZMA. The first chunk resets dictionary + and the second sets new properties. + + good-1-lzma2-4.xz has three LZMA2 chunks: First is LZMA, second is + uncompressed with dictionary reset, and third is LZMA with new + properties but without dictionary reset. + + good-1-3delta-lzma2.xz has three Delta filters and LZMA2. + + +2.2. Unsupported Files + + unsupported-check.xz uses Check ID 0x02 which isn't supported by + the current version of the file format. It is implementation-defined + how this file handled (it may reject it, or decode it possibly with + a warning). + + unsupported-block_header.xz has a non-null byte in Header Padding, + which may indicate presence of a new unsupported field. + + unsupported-filter_flags-1.xz has unsupported Filter ID 0x7F. + + unsupported-filter_flags-2.xz specifies only Delta filter in the + List of Filter Flags, but Delta isn't allowed as the last filter in + the chain. It could be a little more correct to detect this file as + corrupt instead of unsupported, but saying it is unsupported is + simpler in case of liblzma. + + unsupported-filter_flags-3.xz specifies two LZMA2 filters in the + List of Filter Flags. LZMA2 is allowed only as the last filter in the + chain. It could be a little more correct to detect this file as + corrupt instead of unsupported, but saying it is unsupported is + simpler in case of liblzma. + + +2.3. Bad Files + + bad-0pad-empty.xz has one Stream with no Blocks followed by + five-byte Stream Padding. Stream Padding must be a multiple of four + bytes, thus this file is corrupt. + + bad-0catpad-empty.xz has two zero-Block Streams concatenated with + five-byte Stream Padding between the Streams. + + bad-0cat-alone.xz is good-0-empty.xz concatenated with an empty + LZMA_Alone file. + + bad-0cat-header_magic.xz is good-0cat-empty.xz but with one byte + wrong in the Header Magic Bytes field of the second Stream. liblzma + gives LZMA_DATA_ERROR for this. (LZMA_FORMAT_ERROR is used only if + the first Stream of a file has invalid Header Magic Bytes.) + + bad-0-header_magic.xz is good-0-empty.xz but with one byte wrong + in the Header Magic Bytes field. liblzma gives LZMA_FORMAT_ERROR for + this. + + bad-0-footer_magic.xz is good-0-empty.xz but with one byte wrong + in the Footer Magic Bytes field. liblzma gives LZMA_DATA_ERROR for + this. + + bad-0-empty-truncated.xz is good-0-empty.xz without the last byte + of the file. + + bad-0-nonempty_index.xz has no Blocks but Index claims that there is + one Block. + + bad-0-backward_size.xz has wrong Backward Size in Stream Footer. + + bad-1-stream_flags-1.xz has different Stream Flags in Stream Header + and Stream Footer. + + bad-1-stream_flags-2.xz has wrong CRC32 in Stream Header. + + bad-1-stream_flags-3.xz has wrong CRC32 in Stream Footer. + + bad-1-vli-1.xz has two-byte variable-length integer in the + Uncompressed Size field in Block Header while one-byte would be enough + for that value. It's important that the file gets rejected due to too + big integer encoding instead of due to Uncompressed Size not matching + the value stored in the Block Header. That is, the decoder must not + try to decode the Compressed Data field. + + bad-1-vli-2.xz has ten-byte variable-length integer as Uncompressed + Size in Block Header. It's important that the file gets rejected due + to too big integer encoding instead of due to Uncompressed Size not + matching the value stored in the Block Header. That is, the decoder + must not try to decode the Compressed Data field. + + bad-1-block_header-1.xz has Block Header that ends in the middle of + the Filter Flags field. + + bad-1-block_header-2.xz has Block Header that has Compressed Size and + Uncompressed Size but no List of Filter Flags field. + + bad-1-block_header-3.xz has wrong CRC32 in Block Header. + + bad-1-block_header-4.xz has too big Compressed Size in Block Header + (2^63 - 1 bytes while maximum is a little less, because the whole + Block must stay smaller than 2^63). It's important that the file + gets rejected due to invalid Compressed Size value; the decoder + must not try decoding the Compressed Data field. + + bad-1-block_header-5.xz has zero as Compressed Size in Block Header. + + bad-2-index-1.xz has wrong Unpadded Sizes in Index. + + bad-2-index-2.xz has wrong Uncompressed Sizes in Index. + + bad-2-index-3.xz has non-null byte in Index Padding. + + bad-2-index-4.xz wrong CRC32 in Index. + + bad-2-index-5.xz has zero as Unpadded Size. It is important that the + file gets rejected specifically due to Unpadded Size having an invalid + value. + + bad-2-compressed_data_padding.xz has non-null byte in the padding of + the Compressed Data field of the first Block. + + bad-1-check-crc32.xz has wrong Check (CRC32). + + bad-1-check-crc64.xz has wrong Check (CRC64). + + bad-1-check-sha256.xz has wrong Check (SHA-256). + + bad-1-lzma2-1.xz has LZMA2 stream whose first chunk (uncompressed) + doesn't reset the dictionary. + + bad-1-lzma2-2.xz has two LZMA2 chunks, of which the second chunk + indicates dictionary reset, but the LZMA compressed data tries to + repeat data from the previous chunk. + + bad-1-lzma2-3.xz sets new invalid properties (lc=8, lp=0, pb=0) in + the middle of Block. + + bad-1-lzma2-4.xz has two LZMA2 chunks, of which the first is + uncompressed and the second is LZMA. The first chunk resets dictionary + as it should, but the second chunk tries to reset state without + specifying properties for LZMA. + + bad-1-lzma2-5.xz is like bad-1-lzma2-4.xz but doesn't try to reset + anything in the header of the second chunk. + + bad-1-lzma2-6.xz has reserved LZMA2 control byte value (0x03). + + bad-1-lzma2-7.xz has EOPM at LZMA level. + + bad-1-lzma2-8.xz is like good-1-lzma2-4.xz but doesn't set new + properties in the third LZMA2 chunk. + diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-backward_size.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-backward_size.xz new file mode 100644 index 00000000000..2b46fa937b3 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-backward_size.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-empty-truncated.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-empty-truncated.xz new file mode 100644 index 00000000000..f879af84ac4 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-empty-truncated.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-footer_magic.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-footer_magic.xz new file mode 100644 index 00000000000..5d9e3894bc2 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-footer_magic.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-header_magic.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-header_magic.xz new file mode 100644 index 00000000000..5984a453bf8 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-header_magic.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-nonempty_index.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-nonempty_index.xz new file mode 100644 index 00000000000..ed6e81fa046 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0-nonempty_index.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-0cat-alone.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0cat-alone.xz new file mode 100644 index 00000000000..a915a3a1e2b Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0cat-alone.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-0cat-header_magic.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0cat-header_magic.xz new file mode 100644 index 00000000000..426bf2d4218 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0cat-header_magic.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-0catpad-empty.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0catpad-empty.xz new file mode 100644 index 00000000000..97c13302006 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0catpad-empty.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-0pad-empty.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0pad-empty.xz new file mode 100644 index 00000000000..45e00b74a3f Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-0pad-empty.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-1.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-1.xz new file mode 100644 index 00000000000..d991536aed8 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-1.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-2.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-2.xz new file mode 100644 index 00000000000..ae42ecf0f9b Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-2.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-3.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-3.xz new file mode 100644 index 00000000000..606cbd20e25 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-3.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-4.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-4.xz new file mode 100644 index 00000000000..e72dfbfc394 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-4.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-5.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-5.xz new file mode 100644 index 00000000000..96521129267 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-block_header-5.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-check-crc32.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-check-crc32.xz new file mode 100644 index 00000000000..1ebe1310b5a Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-check-crc32.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-check-crc64.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-check-crc64.xz new file mode 100644 index 00000000000..cdb77093db1 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-check-crc64.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-check-sha256.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-check-sha256.xz new file mode 100644 index 00000000000..def7bff174f Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-check-sha256.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-1.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-1.xz new file mode 100644 index 00000000000..640f592e803 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-1.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-2.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-2.xz new file mode 100644 index 00000000000..69ab07d4577 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-2.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-3.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-3.xz new file mode 100644 index 00000000000..66f48c5d535 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-3.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-4.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-4.xz new file mode 100644 index 00000000000..ac970419399 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-4.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-5.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-5.xz new file mode 100644 index 00000000000..700464d51ef Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-5.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-6.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-6.xz new file mode 100644 index 00000000000..2bda0c4b8b8 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-6.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-7.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-7.xz new file mode 100644 index 00000000000..8cc711c19ed Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-7.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-8.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-8.xz new file mode 100644 index 00000000000..f21a71b63f3 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-lzma2-8.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-stream_flags-1.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-stream_flags-1.xz new file mode 100644 index 00000000000..6511773ec69 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-stream_flags-1.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-stream_flags-2.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-stream_flags-2.xz new file mode 100644 index 00000000000..0c66b364b0e Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-stream_flags-2.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-stream_flags-3.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-stream_flags-3.xz new file mode 100644 index 00000000000..a9b1f98365f Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-stream_flags-3.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-vli-1.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-vli-1.xz new file mode 100644 index 00000000000..6514ab12946 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-vli-1.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-vli-2.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-vli-2.xz new file mode 100644 index 00000000000..c16941b4083 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-1-vli-2.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-compressed_data_padding.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-compressed_data_padding.xz new file mode 100644 index 00000000000..382d0476700 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-compressed_data_padding.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-1.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-1.xz new file mode 100644 index 00000000000..f51ed214d16 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-1.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-2.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-2.xz new file mode 100644 index 00000000000..d7d00ff343f Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-2.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-3.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-3.xz new file mode 100644 index 00000000000..62428b87223 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-3.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-4.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-4.xz new file mode 100644 index 00000000000..9cf2df65da5 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-4.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-5.xz b/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-5.xz new file mode 100644 index 00000000000..0a79270900a Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/bad-2-index-5.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-0-empty.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-0-empty.xz new file mode 100644 index 00000000000..83b95e05bc8 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-0-empty.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-0cat-empty.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-0cat-empty.xz new file mode 100644 index 00000000000..e6fc31461db Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-0cat-empty.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-0catpad-empty.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-0catpad-empty.xz new file mode 100644 index 00000000000..4f86b7d152d Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-0catpad-empty.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-0pad-empty.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-0pad-empty.xz new file mode 100644 index 00000000000..c51e3a69c0d Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-0pad-empty.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-3delta-lzma2.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-3delta-lzma2.xz new file mode 100644 index 00000000000..a0be1d007a2 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-3delta-lzma2.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-block_header-1.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-block_header-1.xz new file mode 100644 index 00000000000..fea5ad2f998 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-block_header-1.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-block_header-2.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-block_header-2.xz new file mode 100644 index 00000000000..6b5dcb347b2 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-block_header-2.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-block_header-3.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-block_header-3.xz new file mode 100644 index 00000000000..15653120634 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-block_header-3.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-crc32.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-crc32.xz new file mode 100644 index 00000000000..6c89593d447 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-crc32.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-crc64.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-crc64.xz new file mode 100644 index 00000000000..5a9915d2f9f Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-crc64.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-none.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-none.xz new file mode 100644 index 00000000000..1e85faf3d06 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-none.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-sha256.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-sha256.xz new file mode 100644 index 00000000000..fdc556b602c Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-check-sha256.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-delta-lzma2.tiff.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-delta-lzma2.tiff.xz new file mode 100644 index 00000000000..1f033bc52b5 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-delta-lzma2.tiff.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-1.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-1.xz new file mode 100644 index 00000000000..d8d6489c872 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-1.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-2.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-2.xz new file mode 100644 index 00000000000..7e8cdf1b7d0 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-2.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-3.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-3.xz new file mode 100644 index 00000000000..c4c72be6561 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-3.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-4.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-4.xz new file mode 100644 index 00000000000..e0d623a001c Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-lzma2-4.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-sparc-lzma2.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-sparc-lzma2.xz new file mode 100644 index 00000000000..4532bc61c1a Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-sparc-lzma2.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-1-x86-lzma2.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-x86-lzma2.xz new file mode 100644 index 00000000000..8053917bad7 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-1-x86-lzma2.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/good-2-lzma2.xz b/Build/source/extra/xz-4.999.9beta/tests/files/good-2-lzma2.xz new file mode 100644 index 00000000000..bed5085c1f6 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/good-2-lzma2.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-block_header.xz b/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-block_header.xz new file mode 100644 index 00000000000..38304429d91 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-block_header.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-check.xz b/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-check.xz new file mode 100644 index 00000000000..c28355e7474 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-check.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-filter_flags-1.xz b/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-filter_flags-1.xz new file mode 100644 index 00000000000..48b93731c52 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-filter_flags-1.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-filter_flags-2.xz b/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-filter_flags-2.xz new file mode 100644 index 00000000000..c283359d562 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-filter_flags-2.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-filter_flags-3.xz b/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-filter_flags-3.xz new file mode 100644 index 00000000000..26084984f97 Binary files /dev/null and b/Build/source/extra/xz-4.999.9beta/tests/files/unsupported-filter_flags-3.xz differ diff --git a/Build/source/extra/xz-4.999.9beta/tests/test_block_header.c b/Build/source/extra/xz-4.999.9beta/tests/test_block_header.c new file mode 100644 index 00000000000..a95792eb9dd --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/tests/test_block_header.c @@ -0,0 +1,240 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file test_block_header.c +/// \brief Tests Block Header coders +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "tests.h" + + +static uint8_t buf[LZMA_BLOCK_HEADER_SIZE_MAX]; +static lzma_block known_options; +static lzma_block decoded_options; + +static lzma_options_lzma opt_lzma; + +static lzma_filter filters_none[1] = { + { + .id = LZMA_VLI_UNKNOWN, + }, +}; + + +static lzma_filter filters_one[2] = { + { + .id = LZMA_FILTER_LZMA2, + .options = &opt_lzma, + }, { + .id = LZMA_VLI_UNKNOWN, + } +}; + + +static lzma_filter filters_four[5] = { + { + .id = LZMA_FILTER_X86, + .options = NULL, + }, { + .id = LZMA_FILTER_X86, + .options = NULL, + }, { + .id = LZMA_FILTER_X86, + .options = NULL, + }, { + .id = LZMA_FILTER_LZMA2, + .options = &opt_lzma, + }, { + .id = LZMA_VLI_UNKNOWN, + } +}; + + +static lzma_filter filters_five[6] = { + { + .id = LZMA_FILTER_X86, + .options = NULL, + }, { + .id = LZMA_FILTER_X86, + .options = NULL, + }, { + .id = LZMA_FILTER_X86, + .options = NULL, + }, { + .id = LZMA_FILTER_X86, + .options = NULL, + }, { + .id = LZMA_FILTER_LZMA2, + .options = &opt_lzma, + }, { + .id = LZMA_VLI_UNKNOWN, + } +}; + + +static void +code(void) +{ + expect(lzma_block_header_encode(&known_options, buf) == LZMA_OK); + + lzma_filter filters[LZMA_FILTERS_MAX + 1]; + memcrap(filters, sizeof(filters)); + memcrap(&decoded_options, sizeof(decoded_options)); + + decoded_options.header_size = known_options.header_size; + decoded_options.check = known_options.check; + decoded_options.filters = filters; + expect(lzma_block_header_decode(&decoded_options, NULL, buf) + == LZMA_OK); + + expect(known_options.compressed_size + == decoded_options.compressed_size); + expect(known_options.uncompressed_size + == decoded_options.uncompressed_size); + + for (size_t i = 0; known_options.filters[i].id + != LZMA_VLI_UNKNOWN; ++i) + expect(known_options.filters[i].id == filters[i].id); + + for (size_t i = 0; i < LZMA_FILTERS_MAX; ++i) + free(decoded_options.filters[i].options); +} + + +static void +test1(void) +{ + known_options = (lzma_block){ + .check = LZMA_CHECK_NONE, + .compressed_size = LZMA_VLI_UNKNOWN, + .uncompressed_size = LZMA_VLI_UNKNOWN, + .filters = NULL, + }; + + expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); + + known_options.filters = filters_none; + expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); + + known_options.filters = filters_five; + expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); + + known_options.filters = filters_one; + expect(lzma_block_header_size(&known_options) == LZMA_OK); + + known_options.check = 999; // Some invalid value, which gets ignored. + expect(lzma_block_header_size(&known_options) == LZMA_OK); + + known_options.compressed_size = 5; + expect(lzma_block_header_size(&known_options) == LZMA_OK); + + known_options.compressed_size = 0; // Cannot be zero. + expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); + + // LZMA_VLI_MAX is too big to keep the total size of the Block + // a valid VLI, but lzma_block_header_size() is not meant + // to validate it. (lzma_block_header_encode() must validate it.) + known_options.compressed_size = LZMA_VLI_MAX; + expect(lzma_block_header_size(&known_options) == LZMA_OK); + + known_options.compressed_size = LZMA_VLI_UNKNOWN; + known_options.uncompressed_size = 0; + expect(lzma_block_header_size(&known_options) == LZMA_OK); + + known_options.uncompressed_size = LZMA_VLI_MAX + 1; + expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); +} + + +static void +test2(void) +{ + known_options = (lzma_block){ + .check = LZMA_CHECK_CRC32, + .compressed_size = LZMA_VLI_UNKNOWN, + .uncompressed_size = LZMA_VLI_UNKNOWN, + .filters = filters_four, + }; + + expect(lzma_block_header_size(&known_options) == LZMA_OK); + code(); + + known_options.compressed_size = 123456; + known_options.uncompressed_size = 234567; + expect(lzma_block_header_size(&known_options) == LZMA_OK); + code(); + + // We can make the sizes smaller while keeping the header size + // the same. + known_options.compressed_size = 12; + known_options.uncompressed_size = 23; + code(); +} + + +static void +test3(void) +{ + known_options = (lzma_block){ + .check = LZMA_CHECK_CRC32, + .compressed_size = LZMA_VLI_UNKNOWN, + .uncompressed_size = LZMA_VLI_UNKNOWN, + .filters = filters_one, + }; + + expect(lzma_block_header_size(&known_options) == LZMA_OK); + known_options.header_size += 4; + expect(lzma_block_header_encode(&known_options, buf) == LZMA_OK); + + lzma_filter filters[LZMA_FILTERS_MAX + 1]; + decoded_options.header_size = known_options.header_size; + decoded_options.check = known_options.check; + decoded_options.filters = filters; + + // Wrong size + ++buf[0]; + expect(lzma_block_header_decode(&decoded_options, NULL, buf) + == LZMA_PROG_ERROR); + --buf[0]; + + // Wrong CRC32 + buf[known_options.header_size - 1] ^= 1; + expect(lzma_block_header_decode(&decoded_options, NULL, buf) + == LZMA_DATA_ERROR); + buf[known_options.header_size - 1] ^= 1; + + // Unsupported filter + // NOTE: This may need updating when new IDs become supported. + buf[2] ^= 0x1F; + integer_write_32(buf + known_options.header_size - 4, + lzma_crc32(buf, known_options.header_size - 4, 0)); + expect(lzma_block_header_decode(&decoded_options, NULL, buf) + == LZMA_OPTIONS_ERROR); + buf[2] ^= 0x1F; + + // Non-nul Padding + buf[known_options.header_size - 4 - 1] ^= 1; + integer_write_32(buf + known_options.header_size - 4, + lzma_crc32(buf, known_options.header_size - 4, 0)); + expect(lzma_block_header_decode(&decoded_options, NULL, buf) + == LZMA_OPTIONS_ERROR); + buf[known_options.header_size - 4 - 1] ^= 1; +} + + +int +main(void) +{ + succeed(lzma_lzma_preset(&opt_lzma, 1)); + + test1(); + test2(); + test3(); + + return 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/tests/test_check.c b/Build/source/extra/xz-4.999.9beta/tests/test_check.c new file mode 100644 index 00000000000..7d4a36078cf --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/tests/test_check.c @@ -0,0 +1,83 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file test_check.c +/// \brief Tests integrity checks +/// +/// \todo Add SHA256 +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "tests.h" + + +static const uint8_t test_string[9] = "123456789"; +static const uint8_t test_unaligned[12] = "xxx123456789"; + + +static bool +test_crc32(void) +{ + static const uint32_t test_vector = 0xCBF43926; + + // Test 1 + uint32_t crc = lzma_crc32(test_string, sizeof(test_string), 0); + if (crc != test_vector) + return true; + + // Test 2 + crc = lzma_crc32(test_unaligned + 3, sizeof(test_string), 0); + if (crc != test_vector) + return true; + + // Test 3 + crc = 0; + for (size_t i = 0; i < sizeof(test_string); ++i) + crc = lzma_crc32(test_string + i, 1, crc); + if (crc != test_vector) + return true; + + return false; +} + + +static bool +test_crc64(void) +{ + static const uint64_t test_vector = 0x995DC9BBDF1939FA; + + // Test 1 + uint64_t crc = lzma_crc64(test_string, sizeof(test_string), 0); + if (crc != test_vector) + return true; + + // Test 2 + crc = lzma_crc64(test_unaligned + 3, sizeof(test_string), 0); + if (crc != test_vector) + return true; + + // Test 3 + crc = 0; + for (size_t i = 0; i < sizeof(test_string); ++i) + crc = lzma_crc64(test_string + i, 1, crc); + if (crc != test_vector) + return true; + + return false; +} + + +int +main(void) +{ + bool error = false; + + error |= test_crc32(); + error |= test_crc64(); + + return error ? 1 : 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/tests/test_compress.sh b/Build/source/extra/xz-4.999.9beta/tests/test_compress.sh new file mode 100755 index 00000000000..ff0cb304df4 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/tests/test_compress.sh @@ -0,0 +1,129 @@ +#!/bin/sh + +############################################################################### +# +# Author: Lasse Collin +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# +############################################################################### + +# Find out if our shell supports functions. +eval 'unset foo ; foo() { return 42; } ; foo' +if test $? != 42 ; then + echo "/bin/sh doesn't support functions, skipping this test." + (exit 77) + exit 77 +fi + +test_xz() { + if $XZ -c "$@" "$FILE" > tmp_compressed; then + : + else + echo "Compressing failed: $* $FILE" + (exit 1) + exit 1 + fi + + if $XZ -cd tmp_compressed > tmp_uncompressed ; then + : + else + echo "Decoding failed: $* $FILE" + (exit 1) + exit 1 + fi + + if cmp tmp_uncompressed "$FILE" ; then + : + else + echo "Decoded file does not match the original: $* $FILE" + (exit 1) + exit 1 + fi + + if $XZDEC tmp_compressed > tmp_uncompressed ; then + : + else + echo "Decoding failed: $* $FILE" + (exit 1) + exit 1 + fi + + if cmp tmp_uncompressed "$FILE" ; then + : + else + echo "Decoded file does not match the original: $* $FILE" + (exit 1) + exit 1 + fi + + # Show progress: + echo . | tr -d '\n\r' +} + +XZ="../src/xz/xz --memory=28MiB --threads=1" +XZDEC="../src/xzdec/xzdec --memory=4MiB" +unset XZ_OPT + +# Create the required input files. +if ./create_compress_files ; then + : +else + rm -f compress_* + echo "Failed to create files to test compression." + (exit 1) + exit 1 +fi + +# Remove temporary now (in case they are something weird), and on exit. +rm -f tmp_compressed tmp_uncompressed +trap 'rm -f tmp_compressed tmp_uncompressed' 0 + +# Encode and decode each file with various filter configurations. +# This takes quite a bit of time. +echo "test_compress.sh:" +for FILE in compress_generated_* "$srcdir"/compress_prepared_* +do + MSG=`echo "x$FILE" | sed 's,^x,,; s,^.*/,,; s,^compress_,,'` + echo " $MSG" | tr -d '\n\r' + + # Don't test with empty arguments; it breaks some ancient + # proprietary /bin/sh versions due to $@ used in test_xz(). + test_xz -1 + test_xz -2 + test_xz -3 + test_xz -4 + + # Disabled until Subblock format is stable. +# --subblock \ +# --subblock=size=1 \ +# --subblock=size=1,rle=1 \ +# --subblock=size=1,rle=4 \ +# --subblock=size=4,rle=4 \ +# --subblock=size=8,rle=4 \ +# --subblock=size=8,rle=8 \ +# --subblock=size=4096,rle=12 \ +# + for ARGS in \ + --delta=dist=1 \ + --delta=dist=4 \ + --delta=dist=256 \ + --x86 \ + --powerpc \ + --ia64 \ + --arm \ + --armthumb \ + --sparc + do + test_xz $ARGS --lzma2=dict=64KiB,nice=32,mode=fast + + # Disabled until Subblock format is stable. + # test_xz --subblock $ARGS --lzma2=dict=64KiB,nice=32,mode=fast + done + + echo +done + +(exit 0) +exit 0 diff --git a/Build/source/extra/xz-4.999.9beta/tests/test_files.sh b/Build/source/extra/xz-4.999.9beta/tests/test_files.sh new file mode 100755 index 00000000000..7dd9a3901bf --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/tests/test_files.sh @@ -0,0 +1,33 @@ +#/bin/sh + +############################################################################### +# +# Author: Lasse Collin +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# +############################################################################### + +for I in "$srcdir"/files/good-*.xz +do + if ../src/xzdec/xzdec "$I" > /dev/null 2> /dev/null ; then + : + else + echo "Good file failed: $I" + (exit 1) + exit 1 + fi +done + +for I in "$srcdir"/files/bad-*.xz +do + if ../src/xzdec/xzdec "$I" > /dev/null 2> /dev/null ; then + echo "Bad file succeeded: $I" + (exit 1) + exit 1 + fi +done + +(exit 0) +exit 0 diff --git a/Build/source/extra/xz-4.999.9beta/tests/test_filter_flags.c b/Build/source/extra/xz-4.999.9beta/tests/test_filter_flags.c new file mode 100644 index 00000000000..808682b57e0 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/tests/test_filter_flags.c @@ -0,0 +1,281 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file test_filter_flags.c +/// \brief Tests Filter Flags coders +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "tests.h" + + +static uint8_t buffer[4096]; +static lzma_filter known_flags; +static lzma_filter decoded_flags; +static lzma_stream strm = LZMA_STREAM_INIT; + + +static bool +encode(uint32_t known_size) +{ + memcrap(buffer, sizeof(buffer)); + + uint32_t tmp; + if (lzma_filter_flags_size(&tmp, &known_flags) != LZMA_OK) + return true; + + if (tmp != known_size) + return true; + + size_t out_pos = 0; + if (lzma_filter_flags_encode(&known_flags, + buffer, &out_pos, known_size) != LZMA_OK) + return true; + + if (out_pos != known_size) + return true; + + return false; +} + + +static bool +decode_ret(uint32_t known_size, lzma_ret expected_ret) +{ + memcrap(&decoded_flags, sizeof(decoded_flags)); + + size_t pos = 0; + if (lzma_filter_flags_decode(&decoded_flags, NULL, + buffer, &pos, known_size) != expected_ret + || pos != known_size) + return true; + + return false; +} + + +static bool +decode(uint32_t known_size) +{ + if (decode_ret(known_size, LZMA_OK)) + return true; + + if (known_flags.id != decoded_flags.id) + return true; + + return false; +} + + +#if defined(HAVE_ENCODER_SUBBLOCK) && defined(HAVE_DECODER_SUBBLOCK) +static void +test_subblock(void) +{ + // Test 1 + known_flags.id = LZMA_FILTER_SUBBLOCK; + known_flags.options = NULL; + expect(!encode(2)); + expect(!decode(2)); + expect(decoded_flags.options == NULL); + + // Test 2 + buffer[0] = LZMA_FILTER_SUBBLOCK; + buffer[1] = 1; + buffer[2] = 0; + expect(!decode_ret(3, LZMA_OPTIONS_ERROR)); +} +#endif + + +#if defined(HAVE_ENCODER_X86) && defined(HAVE_DECODER_X86) +static void +test_bcj(void) +{ + // Test 1 + known_flags.id = LZMA_FILTER_X86; + known_flags.options = NULL; + + expect(!encode(2)); + expect(!decode(2)); + expect(decoded_flags.options == NULL); + + // Test 2 + lzma_options_bcj options; + options.start_offset = 0; + known_flags.options = &options; + expect(!encode(2)); + expect(!decode(2)); + expect(decoded_flags.options == NULL); + + // Test 3 + options.start_offset = 123456; + known_flags.options = &options; + expect(!encode(6)); + expect(!decode(6)); + expect(decoded_flags.options != NULL); + + lzma_options_bcj *decoded = decoded_flags.options; + expect(decoded->start_offset == options.start_offset); + + free(decoded); +} +#endif + + +#if defined(HAVE_ENCODER_DELTA) && defined(HAVE_DECODER_DELTA) +static void +test_delta(void) +{ + // Test 1 + known_flags.id = LZMA_FILTER_DELTA; + known_flags.options = NULL; + expect(encode(99)); + + // Test 2 + lzma_options_delta options = { + .type = LZMA_DELTA_TYPE_BYTE, + .dist = 0 + }; + known_flags.options = &options; + expect(encode(99)); + + // Test 3 + options.dist = LZMA_DELTA_DIST_MIN; + expect(!encode(3)); + expect(!decode(3)); + expect(((lzma_options_delta *)(decoded_flags.options))->dist + == options.dist); + + free(decoded_flags.options); + + // Test 4 + options.dist = LZMA_DELTA_DIST_MAX; + expect(!encode(3)); + expect(!decode(3)); + expect(((lzma_options_delta *)(decoded_flags.options))->dist + == options.dist); + + free(decoded_flags.options); + + // Test 5 + options.dist = LZMA_DELTA_DIST_MAX + 1; + expect(encode(99)); +} +#endif + +/* +#ifdef HAVE_FILTER_LZMA +static void +validate_lzma(void) +{ + const lzma_options_lzma *known = known_flags.options; + const lzma_options_lzma *decoded = decoded_flags.options; + + expect(known->dictionary_size <= decoded->dictionary_size); + + if (known->dictionary_size == 1) + expect(decoded->dictionary_size == 1); + else + expect(known->dictionary_size + known->dictionary_size / 2 + > decoded->dictionary_size); + + expect(known->literal_context_bits == decoded->literal_context_bits); + expect(known->literal_pos_bits == decoded->literal_pos_bits); + expect(known->pos_bits == decoded->pos_bits); +} + + +static void +test_lzma(void) +{ + // Test 1 + known_flags.id = LZMA_FILTER_LZMA1; + known_flags.options = NULL; + expect(encode(99)); + + // Test 2 + lzma_options_lzma options = { + .dictionary_size = 0, + .literal_context_bits = 0, + .literal_pos_bits = 0, + .pos_bits = 0, + .preset_dictionary = NULL, + .preset_dictionary_size = 0, + .mode = LZMA_MODE_INVALID, + .fast_bytes = 0, + .match_finder = LZMA_MF_INVALID, + .match_finder_cycles = 0, + }; + + // Test 3 (empty dictionary not allowed) + known_flags.options = &options; + expect(encode(99)); + + // Test 4 (brute-force test some valid dictionary sizes) + options.dictionary_size = LZMA_DICTIONARY_SIZE_MIN; + while (options.dictionary_size != LZMA_DICTIONARY_SIZE_MAX) { + if (++options.dictionary_size == 5000) + options.dictionary_size = LZMA_DICTIONARY_SIZE_MAX - 5; + + expect(!encode(4)); + expect(!decode(4)); + validate_lzma(); + + free(decoded_flags.options); + } + + // Test 5 (too big dictionary size) + options.dictionary_size = LZMA_DICTIONARY_SIZE_MAX + 1; + expect(encode(99)); + + // Test 6 (brute-force test lc/lp/pb) + options.dictionary_size = LZMA_DICTIONARY_SIZE_MIN; + for (uint32_t lc = LZMA_LITERAL_CONTEXT_BITS_MIN; + lc <= LZMA_LITERAL_CONTEXT_BITS_MAX; ++lc) { + for (uint32_t lp = LZMA_LITERAL_POS_BITS_MIN; + lp <= LZMA_LITERAL_POS_BITS_MAX; ++lp) { + for (uint32_t pb = LZMA_POS_BITS_MIN; + pb <= LZMA_POS_BITS_MAX; ++pb) { + if (lc + lp > LZMA_LITERAL_BITS_MAX) + continue; + + options.literal_context_bits = lc; + options.literal_pos_bits = lp; + options.pos_bits = pb; + + expect(!encode(4)); + expect(!decode(4)); + validate_lzma(); + + free(decoded_flags.options); + } + } + } +} +#endif +*/ + +int +main(void) +{ +#if defined(HAVE_ENCODER_SUBBLOCK) && defined(HAVE_DECODER_SUBBLOCK) + test_subblock(); +#endif +#if defined(HAVE_ENCODER_X86) && defined(HAVE_DECODER_X86) + test_bcj(); +#endif +#if defined(HAVE_ENCODER_DELTA) && defined(HAVE_DECODER_DELTA) + test_delta(); +#endif +// #ifdef HAVE_FILTER_LZMA +// test_lzma(); +// #endif + + lzma_end(&strm); + + return 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/tests/test_index.c b/Build/source/extra/xz-4.999.9beta/tests/test_index.c new file mode 100644 index 00000000000..5ce2c524735 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/tests/test_index.c @@ -0,0 +1,532 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file test_index.c +/// \brief Tests functions handling the lzma_index structure +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "tests.h" + +#define MEMLIMIT (LZMA_VLI_C(1) << 20) + + +static lzma_index * +create_empty(void) +{ + lzma_index *i = lzma_index_init(NULL, NULL); + expect(i != NULL); + return i; +} + + +static lzma_index * +create_small(void) +{ + lzma_index *i = lzma_index_init(NULL, NULL); + expect(i != NULL); + expect(lzma_index_append(i, NULL, 101, 555) == LZMA_OK); + expect(lzma_index_append(i, NULL, 602, 777) == LZMA_OK); + expect(lzma_index_append(i, NULL, 804, 999) == LZMA_OK); + return i; +} + + +static lzma_index * +create_big(void) +{ + lzma_index *i = lzma_index_init(NULL, NULL); + expect(i != NULL); + + lzma_vli total_size = 0; + lzma_vli uncompressed_size = 0; + + // Add pseudo-random sizes (but always the same size values). + const size_t count = 5555; + uint32_t n = 11; + for (size_t j = 0; j < count; ++j) { + n = 7019 * n + 7607; + const uint32_t t = n * 3011; + expect(lzma_index_append(i, NULL, t, n) == LZMA_OK); + total_size += (t + 3) & ~LZMA_VLI_C(3); + uncompressed_size += n; + } + + expect(lzma_index_count(i) == count); + expect(lzma_index_total_size(i) == total_size); + expect(lzma_index_uncompressed_size(i) == uncompressed_size); + expect(lzma_index_total_size(i) + lzma_index_size(i) + + 2 * LZMA_STREAM_HEADER_SIZE + == lzma_index_stream_size(i)); + + return i; +} + + +static void +test_equal(void) +{ + lzma_index *a = create_empty(); + lzma_index *b = create_small(); + lzma_index *c = create_big(); + expect(a && b && c); + + expect(lzma_index_equal(a, a)); + expect(lzma_index_equal(b, b)); + expect(lzma_index_equal(c, c)); + + expect(!lzma_index_equal(a, b)); + expect(!lzma_index_equal(a, c)); + expect(!lzma_index_equal(b, c)); + + lzma_index_end(a, NULL); + lzma_index_end(b, NULL); + lzma_index_end(c, NULL); +} + + +static void +test_overflow(void) +{ + // Integer overflow tests + lzma_index *i = create_empty(); + + expect(lzma_index_append(i, NULL, LZMA_VLI_MAX - 5, 1234) + == LZMA_DATA_ERROR); + + // TODO + + lzma_index_end(i, NULL); +} + + +static void +test_copy(const lzma_index *i) +{ + lzma_index *d = lzma_index_dup(i, NULL); + expect(d != NULL); + lzma_index_end(d, NULL); +} + + +static void +test_read(lzma_index *i) +{ + lzma_index_record record; + + // Try twice so we see that rewinding works. + for (size_t j = 0; j < 2; ++j) { + lzma_vli total_size = 0; + lzma_vli uncompressed_size = 0; + lzma_vli stream_offset = LZMA_STREAM_HEADER_SIZE; + lzma_vli uncompressed_offset = 0; + uint32_t count = 0; + + while (!lzma_index_read(i, &record)) { + ++count; + + total_size += record.total_size; + uncompressed_size += record.uncompressed_size; + + expect(record.stream_offset == stream_offset); + expect(record.uncompressed_offset + == uncompressed_offset); + + stream_offset += record.total_size; + uncompressed_offset += record.uncompressed_size; + } + + expect(lzma_index_total_size(i) == total_size); + expect(lzma_index_uncompressed_size(i) == uncompressed_size); + expect(lzma_index_count(i) == count); + + lzma_index_rewind(i); + } +} + + +static void +test_code(lzma_index *i) +{ + const size_t alloc_size = 128 * 1024; + uint8_t *buf = malloc(alloc_size); + expect(buf != NULL); + + // Encode + lzma_stream strm = LZMA_STREAM_INIT; + expect(lzma_index_encoder(&strm, i) == LZMA_OK); + const lzma_vli index_size = lzma_index_size(i); + succeed(coder_loop(&strm, NULL, 0, buf, index_size, + LZMA_STREAM_END, LZMA_RUN)); + + // Decode + lzma_index *d; + expect(lzma_index_decoder(&strm, &d, MEMLIMIT) == LZMA_OK); + succeed(decoder_loop(&strm, buf, index_size)); + + expect(lzma_index_equal(i, d)); + + lzma_index_end(d, NULL); + lzma_end(&strm); + + // Decode with hashing + lzma_index_hash *h = lzma_index_hash_init(NULL, NULL); + expect(h != NULL); + lzma_index_rewind(i); + lzma_index_record r; + while (!lzma_index_read(i, &r)) + expect(lzma_index_hash_append(h, r.unpadded_size, + r.uncompressed_size) == LZMA_OK); + size_t pos = 0; + while (pos < index_size - 1) + expect(lzma_index_hash_decode(h, buf, &pos, pos + 1) + == LZMA_OK); + expect(lzma_index_hash_decode(h, buf, &pos, pos + 1) + == LZMA_STREAM_END); + + lzma_index_hash_end(h, NULL); + + // Encode buffer + size_t buf_pos = 1; + expect(lzma_index_buffer_encode(i, buf, &buf_pos, index_size) + == LZMA_BUF_ERROR); + expect(buf_pos == 1); + + succeed(lzma_index_buffer_encode(i, buf, &buf_pos, index_size + 1)); + expect(buf_pos == index_size + 1); + + // Decode buffer + buf_pos = 1; + uint64_t memlimit = MEMLIMIT; + expect(lzma_index_buffer_decode(&d, &memlimit, NULL, buf, &buf_pos, + index_size) == LZMA_DATA_ERROR); + expect(buf_pos == 1); + expect(d == NULL); + + succeed(lzma_index_buffer_decode(&d, &memlimit, NULL, buf, &buf_pos, + index_size + 1)); + expect(buf_pos == index_size + 1); + expect(lzma_index_equal(i, d)); + + lzma_index_end(d, NULL); + + free(buf); +} + + +static void +test_many(lzma_index *i) +{ + test_copy(i); + test_read(i); + test_code(i); +} + + +static void +test_cat(void) +{ + lzma_index *a, *b, *c; + + // Empty Indexes + a = create_empty(); + b = create_empty(); + expect(lzma_index_cat(a, b, NULL, 0) == LZMA_OK); + expect(lzma_index_count(a) == 0); + expect(lzma_index_stream_size(a) == 2 * LZMA_STREAM_HEADER_SIZE + 8); + expect(lzma_index_file_size(a) + == 2 * (2 * LZMA_STREAM_HEADER_SIZE + 8)); + + b = create_empty(); + expect(lzma_index_cat(a, b, NULL, 0) == LZMA_OK); + expect(lzma_index_count(a) == 0); + expect(lzma_index_stream_size(a) == 2 * LZMA_STREAM_HEADER_SIZE + 8); + expect(lzma_index_file_size(a) + == 3 * (2 * LZMA_STREAM_HEADER_SIZE + 8)); + + b = create_empty(); + c = create_empty(); + expect(lzma_index_cat(b, c, NULL, 4) == LZMA_OK); + expect(lzma_index_count(b) == 0); + expect(lzma_index_stream_size(b) == 2 * LZMA_STREAM_HEADER_SIZE + 8); + expect(lzma_index_file_size(b) + == 2 * (2 * LZMA_STREAM_HEADER_SIZE + 8) + 4); + + expect(lzma_index_cat(a, b, NULL, 8) == LZMA_OK); + expect(lzma_index_count(a) == 0); + expect(lzma_index_stream_size(a) == 2 * LZMA_STREAM_HEADER_SIZE + 8); + expect(lzma_index_file_size(a) + == 5 * (2 * LZMA_STREAM_HEADER_SIZE + 8) + 4 + 8); + + lzma_index_end(a, NULL); + + // Small Indexes + a = create_small(); + lzma_vli stream_size = lzma_index_stream_size(a); + b = create_small(); + expect(lzma_index_cat(a, b, NULL, 4) == LZMA_OK); + expect(lzma_index_file_size(a) == stream_size * 2 + 4); + expect(lzma_index_stream_size(a) > stream_size); + expect(lzma_index_stream_size(a) < stream_size * 2); + + b = create_small(); + c = create_small(); + expect(lzma_index_cat(b, c, NULL, 8) == LZMA_OK); + expect(lzma_index_cat(a, b, NULL, 12) == LZMA_OK); + expect(lzma_index_file_size(a) == stream_size * 4 + 4 + 8 + 12); + + lzma_index_end(a, NULL); + + // Big Indexes + a = create_big(); + stream_size = lzma_index_stream_size(a); + b = create_big(); + expect(lzma_index_cat(a, b, NULL, 4) == LZMA_OK); + expect(lzma_index_file_size(a) == stream_size * 2 + 4); + expect(lzma_index_stream_size(a) > stream_size); + expect(lzma_index_stream_size(a) < stream_size * 2); + + b = create_big(); + c = create_big(); + expect(lzma_index_cat(b, c, NULL, 8) == LZMA_OK); + expect(lzma_index_cat(a, b, NULL, 12) == LZMA_OK); + expect(lzma_index_file_size(a) == stream_size * 4 + 4 + 8 + 12); + + lzma_index_end(a, NULL); +} + + +static void +test_locate(void) +{ + lzma_index_record r; + lzma_index *i = lzma_index_init(NULL, NULL); + expect(i != NULL); + + // Cannot locate anything from an empty Index. + expect(lzma_index_locate(i, &r, 0)); + expect(lzma_index_locate(i, &r, 555)); + + // One empty Record: nothing is found since there's no uncompressed + // data. + expect(lzma_index_append(i, NULL, 16, 0) == LZMA_OK); + expect(lzma_index_locate(i, &r, 0)); + + // Non-empty Record and we can find something. + expect(lzma_index_append(i, NULL, 32, 5) == LZMA_OK); + expect(!lzma_index_locate(i, &r, 0)); + expect(r.total_size == 32); + expect(r.uncompressed_size == 5); + expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE + 16); + expect(r.uncompressed_offset == 0); + + // Still cannot find anything past the end. + expect(lzma_index_locate(i, &r, 5)); + + // Add the third Record. + expect(lzma_index_append(i, NULL, 40, 11) == LZMA_OK); + + expect(!lzma_index_locate(i, &r, 0)); + expect(r.total_size == 32); + expect(r.uncompressed_size == 5); + expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE + 16); + expect(r.uncompressed_offset == 0); + + expect(!lzma_index_read(i, &r)); + expect(r.total_size == 40); + expect(r.uncompressed_size == 11); + expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE + 16 + 32); + expect(r.uncompressed_offset == 5); + + expect(!lzma_index_locate(i, &r, 2)); + expect(r.total_size == 32); + expect(r.uncompressed_size == 5); + expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE + 16); + expect(r.uncompressed_offset == 0); + + expect(!lzma_index_locate(i, &r, 5)); + expect(r.total_size == 40); + expect(r.uncompressed_size == 11); + expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE + 16 + 32); + expect(r.uncompressed_offset == 5); + + expect(!lzma_index_locate(i, &r, 5 + 11 - 1)); + expect(r.total_size == 40); + expect(r.uncompressed_size == 11); + expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE + 16 + 32); + expect(r.uncompressed_offset == 5); + + expect(lzma_index_locate(i, &r, 5 + 11)); + expect(lzma_index_locate(i, &r, 5 + 15)); + + // Large Index + i = lzma_index_init(i, NULL); + expect(i != NULL); + + for (size_t n = 4; n <= 4 * 5555; n += 4) + expect(lzma_index_append(i, NULL, n + 8, n) == LZMA_OK); + + expect(lzma_index_count(i) == 5555); + + // First Record + expect(!lzma_index_locate(i, &r, 0)); + expect(r.total_size == 4 + 8); + expect(r.uncompressed_size == 4); + expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE); + expect(r.uncompressed_offset == 0); + + expect(!lzma_index_locate(i, &r, 3)); + expect(r.total_size == 4 + 8); + expect(r.uncompressed_size == 4); + expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE); + expect(r.uncompressed_offset == 0); + + // Second Record + expect(!lzma_index_locate(i, &r, 4)); + expect(r.total_size == 2 * 4 + 8); + expect(r.uncompressed_size == 2 * 4); + expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE + 4 + 8); + expect(r.uncompressed_offset == 4); + + // Last Record + expect(!lzma_index_locate(i, &r, lzma_index_uncompressed_size(i) - 1)); + expect(r.total_size == 4 * 5555 + 8); + expect(r.uncompressed_size == 4 * 5555); + expect(r.stream_offset == lzma_index_total_size(i) + + LZMA_STREAM_HEADER_SIZE - 4 * 5555 - 8); + expect(r.uncompressed_offset + == lzma_index_uncompressed_size(i) - 4 * 5555); + + // Allocation chunk boundaries. See INDEX_GROUP_SIZE in + // liblzma/common/index.c. + const size_t group_multiple = 256 * 4; + const size_t radius = 8; + const size_t start = group_multiple - radius; + lzma_vli ubase = 0; + lzma_vli tbase = 0; + size_t n; + for (n = 1; n < start; ++n) { + ubase += n * 4; + tbase += n * 4 + 8; + } + + while (n < start + 2 * radius) { + expect(!lzma_index_locate(i, &r, ubase + n * 4)); + + expect(r.stream_offset == tbase + n * 4 + 8 + + LZMA_STREAM_HEADER_SIZE); + expect(r.uncompressed_offset == ubase + n * 4); + + tbase += n * 4 + 8; + ubase += n * 4; + ++n; + + expect(r.total_size == n * 4 + 8); + expect(r.uncompressed_size == n * 4); + } + + // Do it also backwards since lzma_index_locate() uses relative search. + while (n > start) { + expect(!lzma_index_locate(i, &r, ubase + (n - 1) * 4)); + + expect(r.total_size == n * 4 + 8); + expect(r.uncompressed_size == n * 4); + + --n; + tbase -= n * 4 + 8; + ubase -= n * 4; + + expect(r.stream_offset == tbase + n * 4 + 8 + + LZMA_STREAM_HEADER_SIZE); + expect(r.uncompressed_offset == ubase + n * 4); + } + + // Test locating in concatend Index. + i = lzma_index_init(i, NULL); + expect(i != NULL); + for (n = 0; n < group_multiple; ++n) + expect(lzma_index_append(i, NULL, 8, 0) == LZMA_OK); + expect(lzma_index_append(i, NULL, 16, 1) == LZMA_OK); + expect(!lzma_index_locate(i, &r, 0)); + expect(r.total_size == 16); + expect(r.uncompressed_size == 1); + expect(r.stream_offset + == LZMA_STREAM_HEADER_SIZE + group_multiple * 8); + expect(r.uncompressed_offset == 0); + + lzma_index_end(i, NULL); +} + + +static void +test_corrupt(void) +{ + const size_t alloc_size = 128 * 1024; + uint8_t *buf = malloc(alloc_size); + expect(buf != NULL); + lzma_stream strm = LZMA_STREAM_INIT; + + lzma_index *i = create_empty(); + expect(lzma_index_append(i, NULL, 0, 1) == LZMA_PROG_ERROR); + lzma_index_end(i, NULL); + + // Create a valid Index and corrupt it in different ways. + i = create_small(); + expect(lzma_index_encoder(&strm, i) == LZMA_OK); + succeed(coder_loop(&strm, NULL, 0, buf, 20, + LZMA_STREAM_END, LZMA_RUN)); + lzma_index_end(i, NULL); + + // Wrong Index Indicator + buf[0] ^= 1; + expect(lzma_index_decoder(&strm, &i, MEMLIMIT) == LZMA_OK); + succeed(decoder_loop_ret(&strm, buf, 1, LZMA_DATA_ERROR)); + buf[0] ^= 1; + + // Wrong Number of Records and thus CRC32 fails. + --buf[1]; + expect(lzma_index_decoder(&strm, &i, MEMLIMIT) == LZMA_OK); + succeed(decoder_loop_ret(&strm, buf, 10, LZMA_DATA_ERROR)); + ++buf[1]; + + // Padding not NULs + buf[15] ^= 1; + expect(lzma_index_decoder(&strm, &i, MEMLIMIT) == LZMA_OK); + succeed(decoder_loop_ret(&strm, buf, 16, LZMA_DATA_ERROR)); + + lzma_end(&strm); + free(buf); +} + + +int +main(void) +{ + test_equal(); + + test_overflow(); + + lzma_index *i = create_empty(); + test_many(i); + lzma_index_end(i, NULL); + + i = create_small(); + test_many(i); + lzma_index_end(i, NULL); + + i = create_big(); + test_many(i); + lzma_index_end(i, NULL); + + test_cat(); + + test_locate(); + + test_corrupt(); + + return 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/tests/test_stream_flags.c b/Build/source/extra/xz-4.999.9beta/tests/test_stream_flags.c new file mode 100644 index 00000000000..9c86c6b860a --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/tests/test_stream_flags.c @@ -0,0 +1,180 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file test_stream_flags.c +/// \brief Tests Stream Header and Stream Footer coders +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "tests.h" + + +static lzma_stream_flags known_flags; +static lzma_stream_flags decoded_flags; +static uint8_t buffer[LZMA_STREAM_HEADER_SIZE]; + + +static bool +validate(void) +{ + // TODO: This could require the specific error type as an argument. + // We could also test that lzma_stream_flags_compare() gives + // the correct return values in different situations. + return lzma_stream_flags_compare(&known_flags, &decoded_flags) + != LZMA_OK; +} + + +static bool +test_header_decoder(lzma_ret expected_ret) +{ + memcrap(&decoded_flags, sizeof(decoded_flags)); + + if (lzma_stream_header_decode(&decoded_flags, buffer) != expected_ret) + return true; + + if (expected_ret != LZMA_OK) + return false; + + // Header doesn't have Backward Size, so make + // lzma_stream_flags_compare() ignore it. + decoded_flags.backward_size = LZMA_VLI_UNKNOWN; + return validate(); +} + + +static void +test_header(void) +{ + memcrap(buffer, sizeof(buffer)); + expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); + succeed(test_header_decoder(LZMA_OK)); +} + + +static bool +test_footer_decoder(lzma_ret expected_ret) +{ + memcrap(&decoded_flags, sizeof(decoded_flags)); + + if (lzma_stream_footer_decode(&decoded_flags, buffer) != expected_ret) + return true; + + if (expected_ret != LZMA_OK) + return false; + + return validate(); +} + + +static void +test_footer(void) +{ + memcrap(buffer, sizeof(buffer)); + expect(lzma_stream_footer_encode(&known_flags, buffer) == LZMA_OK); + succeed(test_footer_decoder(LZMA_OK)); +} + + +static void +test_encode_invalid(void) +{ + known_flags.check = LZMA_CHECK_ID_MAX + 1; + known_flags.backward_size = 1024; + + expect(lzma_stream_header_encode(&known_flags, buffer) + == LZMA_PROG_ERROR); + + expect(lzma_stream_footer_encode(&known_flags, buffer) + == LZMA_PROG_ERROR); + + known_flags.check = (lzma_check)(-1); + + expect(lzma_stream_header_encode(&known_flags, buffer) + == LZMA_PROG_ERROR); + + expect(lzma_stream_footer_encode(&known_flags, buffer) + == LZMA_PROG_ERROR); + + known_flags.check = LZMA_CHECK_NONE; + known_flags.backward_size = 0; + + // Header encoder ignores backward_size. + expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); + + expect(lzma_stream_footer_encode(&known_flags, buffer) + == LZMA_PROG_ERROR); + + known_flags.backward_size = LZMA_VLI_MAX; + + expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); + + expect(lzma_stream_footer_encode(&known_flags, buffer) + == LZMA_PROG_ERROR); +} + + +static void +test_decode_invalid(void) +{ + known_flags.check = LZMA_CHECK_NONE; + known_flags.backward_size = 1024; + + expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); + + // Test 1 (invalid Magic Bytes) + buffer[5] ^= 1; + succeed(test_header_decoder(LZMA_FORMAT_ERROR)); + buffer[5] ^= 1; + + // Test 2a (valid CRC32) + uint32_t crc = lzma_crc32(buffer + 6, 2, 0); + integer_write_32(buffer + 8, crc); + succeed(test_header_decoder(LZMA_OK)); + + // Test 2b (invalid Stream Flags with valid CRC32) + buffer[6] ^= 0x20; + crc = lzma_crc32(buffer + 6, 2, 0); + integer_write_32(buffer + 8, crc); + succeed(test_header_decoder(LZMA_OPTIONS_ERROR)); + + // Test 3 (invalid CRC32) + expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); + buffer[9] ^= 1; + succeed(test_header_decoder(LZMA_DATA_ERROR)); + + // Test 4 (invalid Stream Flags with valid CRC32) + expect(lzma_stream_footer_encode(&known_flags, buffer) == LZMA_OK); + buffer[9] ^= 0x40; + crc = lzma_crc32(buffer + 4, 6, 0); + integer_write_32(buffer, crc); + succeed(test_footer_decoder(LZMA_OPTIONS_ERROR)); + + // Test 5 (invalid Magic Bytes) + expect(lzma_stream_footer_encode(&known_flags, buffer) == LZMA_OK); + buffer[11] ^= 1; + succeed(test_footer_decoder(LZMA_FORMAT_ERROR)); +} + + +int +main(void) +{ + // Valid headers + known_flags.backward_size = 1024; + for (lzma_check check = LZMA_CHECK_NONE; + check <= LZMA_CHECK_ID_MAX; ++check) { + test_header(); + test_footer(); + } + + // Invalid headers + test_encode_invalid(); + test_decode_invalid(); + + return 0; +} diff --git a/Build/source/extra/xz-4.999.9beta/tests/tests.h b/Build/source/extra/xz-4.999.9beta/tests/tests.h new file mode 100644 index 00000000000..185a6820058 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/tests/tests.h @@ -0,0 +1,124 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file tests.h +/// \brief Common definitions for test applications +// +// Author: Lasse Collin +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef LZMA_TESTS_H +#define LZMA_TESTS_H + +#include "sysdefs.h" +#include "integer.h" +#include "lzma.h" + +#include + +#define memcrap(buf, size) memset(buf, 0xFD, size) + +#define expect(test) ((test) ? 0 : (fprintf(stderr, "%s:%u: %s\n", \ + __FILE__, __LINE__, #test), abort(), 0)) + +#define succeed(test) expect(!(test)) + +#define fail(test) expect(test) + + +static inline const char * +lzma_ret_sym(lzma_ret ret) +{ + if ((unsigned int)(ret) > LZMA_PROG_ERROR) + return "UNKNOWN_ERROR"; + + static const char *msgs[] = { + "LZMA_OK", + "LZMA_STREAM_END", + "LZMA_NO_CHECK", + "LZMA_UNSUPPORTED_CHECK", + "LZMA_GET_CHECK", + "LZMA_MEM_ERROR", + "LZMA_MEMLIMIT_ERROR", + "LZMA_FORMAT_ERROR", + "LZMA_OPTIONS_ERROR", + "LZMA_DATA_ERROR", + "LZMA_BUF_ERROR", + "LZMA_PROG_ERROR" + }; + + return msgs[ret]; +} + + +static inline bool +coder_loop(lzma_stream *strm, uint8_t *in, size_t in_size, + uint8_t *out, size_t out_size, + lzma_ret expected_ret, lzma_action finishing_action) +{ + size_t in_left = in_size; + size_t out_left = out_size > 0 ? out_size + 1 : 0; + lzma_action action = LZMA_RUN; + lzma_ret ret; + + strm->next_in = NULL; + strm->avail_in = 0; + strm->next_out = NULL; + strm->avail_out = 0; + + while (true) { + if (in_left > 0) { + if (--in_left == 0) + action = finishing_action; + + strm->next_in = in++; + strm->avail_in = 1; + } + + if (out_left > 0) { + --out_left; + strm->next_out = out++; + strm->avail_out = 1; + } + + ret = lzma_code(strm, action); + if (ret != LZMA_OK) + break; + } + + bool error = false; + + if (ret != expected_ret) + error = true; + + if (expected_ret == LZMA_STREAM_END) { + if (strm->total_in != in_size || strm->total_out != out_size) + error = true; + } else { + if (strm->total_in != in_size || strm->total_out != out_size) + error = true; + } + + return error; +} + + +static inline bool +decoder_loop_ret(lzma_stream *strm, uint8_t *in, size_t in_size, + lzma_ret expected_ret) +{ + return coder_loop(strm, in, in_size, NULL, 0, expected_ret, LZMA_RUN); +} + + +static inline bool +decoder_loop(lzma_stream *strm, uint8_t *in, size_t in_size) +{ + return coder_loop(strm, in, in_size, NULL, 0, + LZMA_STREAM_END, LZMA_RUN); +} + +#endif diff --git a/Build/source/extra/xz-4.999.9beta/version.sh b/Build/source/extra/xz-4.999.9beta/version.sh new file mode 100644 index 00000000000..40d04936288 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/version.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# +############################################################################# +# +# Get the version string from version.h and print it out without +# trailing newline. This makes it suitable for use in configure.ac. +# +############################################################################# +# +# Author: Lasse Collin +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# +############################################################################# + +sed -n 's/LZMA_VERSION_STABILITY_ALPHA/alpha/ + s/LZMA_VERSION_STABILITY_BETA/beta/ + s/LZMA_VERSION_STABILITY_STABLE// + s/^#define LZMA_VERSION_[MPS][AIT][AJNT][A-Z]* //p' \ + src/liblzma/api/lzma/version.h \ + | tr '\n' '|' \ + | sed 's/|/./; s/|/./; s/|//g' \ + | tr -d '\n' diff --git a/Build/source/extra/xz-4.999.9beta/windows/Makefile b/Build/source/extra/xz-4.999.9beta/windows/Makefile new file mode 100644 index 00000000000..db362ef22a1 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/windows/Makefile @@ -0,0 +1,308 @@ +############################################################################### +# +# Makefile to build XZ Utils using MinGW +# +# Make flags to alter compilation: +# +# DEBUG=1 Enable assertions. Don't use this for production builds! +# You may also want to set CFLAGS="-g -O0" to disable +# optimizations. +# +# W64=1 Build for 64-bit Windows. Make sure that you have 64-bit +# MinGW in PATH. +# +# WINE=1 Shortcut to set CC, AR, and STRIP to use Wine to run Windows +# versions of MinGW binaries. +# +# The usual CPPFLAGS and CFLAGS are supported too. +# +############################################################################### +# +# Author: Lasse Collin +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# +############################################################################### + +ifdef W64 +CC = x86_64-pc-mingw32-gcc +WINDRES = x86_64-pc-mingw32-windres +AR = x86_64-pc-mingw32-ar +STRIP = x86_64-pc-mingw32-strip +else +CC = mingw32-gcc +WINDRES = windres +AR = ar +STRIP = strip +endif + +SED = sed +MKDIR = mkdir +CP = cp +RM = rm -f + +CFLAGS = -g -Wall -Wextra -O2 +# CFLAGS = -Wall -Wextra -O3 -fomit-frame-pointer -funroll-loops + +ALL_CFLAGS = -std=gnu99 -mms-bitfields + +ALL_CPPFLAGS = \ + -I. \ + -I../src/common \ + -I../src/liblzma/api \ + -I../src/liblzma/common \ + -I../src/liblzma/check \ + -I../src/liblzma/rangecoder \ + -I../src/liblzma/lz \ + -I../src/liblzma/lzma \ + -I../src/liblzma/delta \ + -I../src/liblzma/simple \ + -I../src/liblzma/subblock + +ALL_CPPFLAGS += -DHAVE_CONFIG_H + +# This works with Wine too while using native GNU make, sed, and rm. +ifdef WINE +ifdef W64 +CC := wine c:/MinGW64/bin/x86_64-pc-mingw32-gcc +WINDRES := wine c:/MinGW64/bin/x86_64-pc-mingw32-windres +AR := wine c:/MinGW64/bin/x86_64-pc-mingw32-ar +STRIP := wine c:/MinGW64/bin/x86_64-pc-mingw32-strip +else +CC := wine c:/MinGW/bin/gcc +WINDRES := wine c:/MinGW/bin/windres +AR := wine c:/MinGW/bin/ar +STRIP := wine c:/MinGW/bin/strip +endif +endif + +ifdef DEBUG +# Use echo since it works for this purpose on both Windows and POSIX. +STRIP := echo Skipping strip +else +ALL_CPPFLAGS += -DNDEBUG +endif + +ALL_CPPFLAGS += $(CPPFLAGS) +ALL_CFLAGS += $(CFLAGS) + + +################ +# Common rules # +################ + +.PHONY: all clean pkg +all: liblzma xzdec xz +clean: liblzma-clean xzdec-clean xz-clean + +pkg: all + $(RM) -r pkg + $(MKDIR) -p pkg/lib pkg/include/lzma + $(CP) liblzma.dll xz-dynamic.exe xz.exe xzdec-dynamic.exe xzdec.exe lzmadec-dynamic.exe lzmadec.exe pkg + $(CP) liblzma.a liblzma.def liblzma_static.lib pkg/lib + $(CP) ../src/liblzma/api/lzma.h pkg/include + $(CP) ../src/liblzma/api/lzma/*.h pkg/include/lzma + +%.o: %.rc + $(WINDRES) $(ALL_CPPFLAGS) $< $@ + + +############### +# liblzma.dll # +############### + +.PHONY: liblzma +liblzma: liblzma.dll liblzma_static.lib + +LIBLZMA_SRCS_C = \ + ../src/liblzma/common/alone_decoder.c \ + ../src/liblzma/common/alone_encoder.c \ + ../src/liblzma/common/auto_decoder.c \ + ../src/liblzma/common/block_buffer_decoder.c \ + ../src/liblzma/common/block_buffer_encoder.c \ + ../src/liblzma/common/block_decoder.c \ + ../src/liblzma/common/block_encoder.c \ + ../src/liblzma/common/block_header_decoder.c \ + ../src/liblzma/common/block_header_encoder.c \ + ../src/liblzma/common/block_util.c \ + ../src/liblzma/common/common.c \ + ../src/liblzma/common/easy_buffer_encoder.c \ + ../src/liblzma/common/easy_decoder_memusage.c \ + ../src/liblzma/common/easy_encoder.c \ + ../src/liblzma/common/easy_encoder_memusage.c \ + ../src/liblzma/common/easy_preset.c \ + ../src/liblzma/common/filter_buffer_decoder.c \ + ../src/liblzma/common/filter_buffer_encoder.c \ + ../src/liblzma/common/filter_common.c \ + ../src/liblzma/common/filter_decoder.c \ + ../src/liblzma/common/filter_encoder.c \ + ../src/liblzma/common/filter_flags_decoder.c \ + ../src/liblzma/common/filter_flags_encoder.c \ + ../src/liblzma/common/index.c \ + ../src/liblzma/common/index_decoder.c \ + ../src/liblzma/common/index_encoder.c \ + ../src/liblzma/common/index_hash.c \ + ../src/liblzma/common/stream_buffer_decoder.c \ + ../src/liblzma/common/stream_buffer_encoder.c \ + ../src/liblzma/common/stream_decoder.c \ + ../src/liblzma/common/stream_encoder.c \ + ../src/liblzma/common/stream_flags_common.c \ + ../src/liblzma/common/stream_flags_decoder.c \ + ../src/liblzma/common/stream_flags_encoder.c \ + ../src/liblzma/common/vli_decoder.c \ + ../src/liblzma/common/vli_encoder.c \ + ../src/liblzma/common/vli_size.c \ + ../src/liblzma/check/check.c \ + ../src/liblzma/check/crc32_table.c \ + ../src/liblzma/check/crc64_table.c \ + ../src/liblzma/check/sha256.c \ + ../src/liblzma/rangecoder/price_table.c \ + ../src/liblzma/lz/lz_decoder.c \ + ../src/liblzma/lz/lz_encoder.c \ + ../src/liblzma/lz/lz_encoder_mf.c \ + ../src/liblzma/lzma/fastpos_table.c \ + ../src/liblzma/lzma/lzma2_decoder.c \ + ../src/liblzma/lzma/lzma2_encoder.c \ + ../src/liblzma/lzma/lzma_decoder.c \ + ../src/liblzma/lzma/lzma_encoder.c \ + ../src/liblzma/lzma/lzma_encoder_optimum_fast.c \ + ../src/liblzma/lzma/lzma_encoder_optimum_normal.c \ + ../src/liblzma/lzma/lzma_encoder_presets.c \ + ../src/liblzma/delta/delta_common.c \ + ../src/liblzma/delta/delta_decoder.c \ + ../src/liblzma/delta/delta_encoder.c \ + ../src/liblzma/simple/arm.c \ + ../src/liblzma/simple/armthumb.c \ + ../src/liblzma/simple/ia64.c \ + ../src/liblzma/simple/powerpc.c \ + ../src/liblzma/simple/simple_coder.c \ + ../src/liblzma/simple/simple_decoder.c \ + ../src/liblzma/simple/simple_encoder.c \ + ../src/liblzma/simple/sparc.c \ + ../src/liblzma/simple/x86.c + +LIBLZMA_SRCS_ASM = + +ifdef W64 +LIBLZMA_SRCS_C += \ + ../src/liblzma/check/crc32_fast.c \ + ../src/liblzma/check/crc64_fast.c +else +LIBLZMA_SRCS_ASM += \ + ../src/liblzma/check/crc32_x86.S \ + ../src/liblzma/check/crc64_x86.S +endif + +LIBLZMA_OBJS_C = $(LIBLZMA_SRCS_C:.c=.o) +LIBLZMA_OBJS_ASM = $(LIBLZMA_SRCS_ASM:.S=.o) +LIBLZMA_OBJS = \ + $(LIBLZMA_OBJS_C) \ + $(LIBLZMA_OBJS_ASM) \ + ../src/liblzma/liblzma_w32res.o + +LIBLZMA_OBJS_STATIC_C = $(LIBLZMA_SRCS_C:.c=-static.o) +LIBLZMA_OBJS_STATIC_ASM = $(LIBLZMA_SRCS_ASM:.S=-static.o) +LIBLZMA_OBJS_STATIC = $(LIBLZMA_OBJS_STATIC_C) $(LIBLZMA_OBJS_STATIC_ASM) + +# The sed is needed to remove ordinals from the .def file. I'm not going +# to track the ordinal numbers, so people should link against liblzma.dll +# only by using symbol names. +liblzma.dll: $(LIBLZMA_OBJS) + $(CC) $(ALL_CFLAGS) -shared -o liblzma.dll $(LIBLZMA_OBJS) -Wl,--out-implib,liblzma.a,--output-def,liblzma.def.in + $(SED) 's/ \+@ *[0-9]\+//' liblzma.def.in > liblzma.def + $(RM) liblzma.def.in + $(STRIP) --strip-unneeded liblzma.a + $(STRIP) --strip-all liblzma.dll + +$(LIBLZMA_OBJS_C): %.o: %.c + $(CC) -DDLL_EXPORT $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< + +$(LIBLZMA_OBJS_ASM): %.o: %.S + $(CC) -DDLL_EXPORT $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< + +liblzma_static.lib: $(LIBLZMA_OBJS_STATIC) + $(RM) $@ + $(AR) rcs $@ $(LIBLZMA_OBJS_STATIC) + $(STRIP) --strip-unneeded $@ + +$(LIBLZMA_OBJS_STATIC_C): %-static.o: %.c + $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< + +$(LIBLZMA_OBJS_STATIC_ASM): %-static.o: %.S + $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< + +.PHONY: liblzma-clean +liblzma-clean: + -$(RM) $(LIBLZMA_OBJS) $(LIBLZMA_OBJS_STATIC) liblzma.def.in liblzma.def liblzma.a liblzma.dll liblzma_static.lib + + +########################### +# xzdec.exe & lzmadec.exe # +########################### + +.PHONY: xzdec +xzdec: xzdec-dynamic.exe lzmadec-dynamic.exe xzdec.exe lzmadec.exe + +XZDEC_SRCS = ../src/xzdec/xzdec.c + +xzdec-dynamic.exe: liblzma.dll $(XZDEC_SRCS) ../src/xzdec/xzdec_w32res.o + $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) $(XZDEC_SRCS) ../src/xzdec/xzdec_w32res.o -o $@ liblzma.a + $(STRIP) --strip-all $@ + +lzmadec-dynamic.exe: liblzma.dll $(XZDEC_SRCS) ../src/xzdec/lzmadec_w32res.o + $(CC) $(ALL_CPPFLAGS) -DLZMADEC $(ALL_CFLAGS) $(XZDEC_SRCS) ../src/xzdec/lzmadec_w32res.o -o $@ liblzma.a + $(STRIP) --strip-all $@ + +xzdec.exe: liblzma_static.lib $(XZDEC_SRCS) ../src/xzdec/xzdec_w32res.o + $(CC) -DLZMA_API_STATIC $(ALL_CPPFLAGS) $(ALL_CFLAGS) $(XZDEC_SRCS) ../src/xzdec/xzdec_w32res.o -o $@ liblzma_static.lib + $(STRIP) --strip-all $@ + +lzmadec.exe: liblzma_static.lib $(XZDEC_SRCS) ../src/xzdec/lzmadec_w32res.o + $(CC) -DLZMA_API_STATIC $(ALL_CPPFLAGS) -DLZMADEC $(ALL_CFLAGS) $(XZDEC_SRCS) ../src/xzdec/lzmadec_w32res.o -o $@ liblzma_static.lib + $(STRIP) --strip-all $@ + +.PHONY: xzdec-clean +xzdec-clean: + -$(RM) xzdec-dynamic.exe lzmadec-dynamic.exe xzdec.exe lzmadec.exe ../src/xzdec/xzdec_w32res.o ../src/xzdec/lzmadec_w32res.o + + +########## +# xz.exe # +########## + +.PHONY: xz +xz: xz-dynamic.exe xz.exe + +XZ_SRCS = \ + ../src/xz/args.c \ + ../src/xz/coder.c \ + ../src/xz/file_io.c \ + ../src/xz/hardware.c \ + ../src/xz/main.c \ + ../src/xz/message.c \ + ../src/xz/options.c \ + ../src/xz/signals.c \ + ../src/xz/suffix.c \ + ../src/xz/util.c + +XZ_OBJS = $(XZ_SRCS:.c=.o) +XZ_OBJS_STATIC = $(XZ_SRCS:.c=-static.o) + +$(XZ_OBJS): %.o: %.c + $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< + +xz-dynamic.exe: liblzma.dll $(XZ_OBJS) ../src/xz/xz_w32res.o + $(CC) $(ALL_CFLAGS) $(XZ_OBJS) ../src/xz/xz_w32res.o -o $@ liblzma.a + $(STRIP) --strip-all $@ + +$(XZ_OBJS_STATIC): %-static.o: %.c + $(CC) -DLZMA_API_STATIC $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< + +xz.exe: liblzma_static.lib $(XZ_OBJS_STATIC) ../src/xz/xz_w32res.o + $(CC) $(ALL_CFLAGS) $(XZ_OBJS_STATIC) ../src/xz/xz_w32res.o -o $@ liblzma_static.lib + $(STRIP) --strip-all $@ + +.PHONY: xz-clean +xz-clean: + -$(RM) $(XZ_OBJS) $(XZ_OBJS_STATIC) ../src/xz/xz_w32res.o xz-dynamic.exe xz.exe diff --git a/Build/source/extra/xz-4.999.9beta/windows/README b/Build/source/extra/xz-4.999.9beta/windows/README new file mode 100644 index 00000000000..0e529de9f05 --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/windows/README @@ -0,0 +1,155 @@ + +XZ Utils on Windows +=================== + +Introduction + + This document explains how to build XZ Utils for Microsoft Windows + using MinGW (Minimalist GNU for Windows). + + This is currently experimental and has got very little testing. + No ABI stability is promised for liblzma.dll. + + +Why MinGW + + XZ Utils code is C99. It should be possible to compile at least + liblzma using any C99 compiler. Compiling the command line tools may + need a little extra work to get them built on new systems, because + they use some features that aren't standardized in POSIX. + + MinGW is free software. MinGW runtime provides some functions that + made porting the command line tools easier. Most(?) of the MinGW + runtime, which gets linked into the resulting binaries, is in the + public domain. + + While most C compilers nowadays support C99 well enough (including + most compilers for Windows), MSVC doesn't. It seems that Microsoft + has no plans to ever support C99. Thus, it is not possible to build + XZ Utils using MSVC without doing a lot of work to convert the code. + Using prebuilt liblzma from MSVC is possible though, since the + liblzma API headers are in C89 and contain some non-standard extra + hacks required by MSVC. + + +Getting and Installing MinGW + + You can download MinGW for 32-bit Windows from Sourceforge: + + http://sourceforge.net/project/showfiles.php?group_id=2435 + + It is enough to pick Automated MinGW Installer and MSYS Base System. + Using the automated installer, select at least runtime, w32api, + core compiler, and MinGW make. From MSYS you actually need only + certain tools, but it is easiest to just install the whole MSYS. + + To build for x86-64 version of Windows, you can download a snapshot + of MinGW targeting for 64-bit Windows: + + http://sourceforge.net/project/showfiles.php?group_id=202880 + + You can use the 32-bit MSYS also for 64-bit build, since we don't + link against anything in MSYS, just use the tools from it. You may + use the make tool from 32-bit MinGW (mingw32-make.exe) although + probably the make.exe from MSYS works too. + + Naturally you can pick the components manually, for example to try + the latest available GCC. It is also possible to use a cross-compiler + to build Windows binaries for example on GNU/Linux, or use Wine to + run the Windows binaries. However, these instructions focus on + building on Windows. + + +Building for 32-bit Windows + + Add MinGW and MSYS to PATH (adjust if you installed to non-default + location): + + set PATH=C:\MinGW\bin;C:\MSYS\1.0\bin;%PATH% + + Then it should be enough to just run mingw32-make in this directory + (the directory containing this README): + + mingw32-make + + +Building for 64-bit Windows + + For 64-bit build the PATH has to point to 64-bit MinGW: + + set PATH=C:\MinGW64\bin;C:\MSYS\1.0\bin;%PATH% + + You need to pass W64=1 to mingw32-make (or make if you don't have + mingw32-make): + + mingw32-make W64=1 + + +Additional Make Flags and Targets + + You may want to try some additional optimizations, which may or + may not make the code faster (and may or may not hit possible + compiler bugs more easily): + + mingw32-make CFLAGS="-O3 -fomit-frame-pointer -funroll-loops" + + If you want to enable assertions (the assert() macro), use DEBUG=1. + You may want to disable optimizations too if you plan to actually + debug the code. Never use DEBUG=1 for production builds! + + mingw32-make DEBUG=1 CFLAGS="-g -O0" + + To copy the built binaries and required headers into a clean + directory, use the pkg target: + + mingw32-make pkg + + It first removes a possibly existing pkg directory, and then + recreates it with the required files. + + TODO: The pkg target doesn't copy any license or other copyright + related information into the pkg directory. + + +Creating an Import Library for MSVC + + The included Makefile creates import library liblzma.a which works + only(?) with MinGW. To use liblzma.dll for MSVC, you need to create + liblzma.lib using the lib command from MSVC: + + lib /def:liblzma.def /out:liblzma.lib /machine:ix86 + + On x86-64, the /machine argument has to naturally be changed: + + lib /def:liblzma.def /out:liblzma.lib /machine:x64 + + +To Do + + - Test Win64 support and add instructions about getting x86-64 + version of MinGW. + + - Creating the import library for other compilers/linkers + + - Building with other compilers for Windows + + - liblzma currently uses cdecl. Would stdcall be more compatible? + + - Support building more size-optimized liblzma (the HAVE_SMALL + define and other things that are needed) + + - Support selecting which parts of liblzma to build to make the + library even smaller. + + - Use the configure script on Windows just like it is used on all + the other systems? + + +Bugs + + Report bugs to (in English or Finnish). + + Take into account that I don't have MSVC and I cannot very easily + test anything on Windows. As of writing, I have tried MinGW and the + resulting binaries only under 32-bit Wine. + diff --git a/Build/source/extra/xz-4.999.9beta/windows/config.h b/Build/source/extra/xz-4.999.9beta/windows/config.h new file mode 100644 index 00000000000..4d3371348db --- /dev/null +++ b/Build/source/extra/xz-4.999.9beta/windows/config.h @@ -0,0 +1,165 @@ +/* Define to 1 if using x86 assembler optimizations. */ +/* #undef HAVE_ASM_X86 */ + +/* Define to 1 if using x86_64 assembler optimizations. */ +/* #undef HAVE_ASM_X86_64 */ + +/* Define to 1 if crc32 integrity check is enabled. */ +#define HAVE_CHECK_CRC32 1 + +/* Define to 1 if crc64 integrity check is enabled. */ +#define HAVE_CHECK_CRC64 1 + +/* Define to 1 if sha256 integrity check is enabled. */ +#define HAVE_CHECK_SHA256 1 + +/* Define to 1 if decoder components are enabled. */ +#define HAVE_DECODER 1 + +/* Define to 1 if arm decoder is enabled. */ +#define HAVE_DECODER_ARM 1 + +/* Define to 1 if armthumb decoder is enabled. */ +#define HAVE_DECODER_ARMTHUMB 1 + +/* Define to 1 if delta decoder is enabled. */ +#define HAVE_DECODER_DELTA 1 + +/* Define to 1 if ia64 decoder is enabled. */ +#define HAVE_DECODER_IA64 1 + +/* Define to 1 if lzma1 decoder is enabled. */ +#define HAVE_DECODER_LZMA1 1 + +/* Define to 1 if lzma2 decoder is enabled. */ +#define HAVE_DECODER_LZMA2 1 + +/* Define to 1 if powerpc decoder is enabled. */ +#define HAVE_DECODER_POWERPC 1 + +/* Define to 1 if sparc decoder is enabled. */ +#define HAVE_DECODER_SPARC 1 + +/* Define to 1 if subblock decoder is enabled. */ +/* #undef HAVE_DECODER_SUBBLOCK */ + +/* Define to 1 if x86 decoder is enabled. */ +#define HAVE_DECODER_X86 1 + +/* Define to 1 if encoder components are enabled. */ +#define HAVE_ENCODER 1 + +/* Define to 1 if arm encoder is enabled. */ +#define HAVE_ENCODER_ARM 1 + +/* Define to 1 if armthumb encoder is enabled. */ +#define HAVE_ENCODER_ARMTHUMB 1 + +/* Define to 1 if delta encoder is enabled. */ +#define HAVE_ENCODER_DELTA 1 + +/* Define to 1 if ia64 encoder is enabled. */ +#define HAVE_ENCODER_IA64 1 + +/* Define to 1 if lzma1 encoder is enabled. */ +#define HAVE_ENCODER_LZMA1 1 + +/* Define to 1 if lzma2 encoder is enabled. */ +#define HAVE_ENCODER_LZMA2 1 + +/* Define to 1 if powerpc encoder is enabled. */ +#define HAVE_ENCODER_POWERPC 1 + +/* Define to 1 if sparc encoder is enabled. */ +#define HAVE_ENCODER_SPARC 1 + +/* Define to 1 if subblock encoder is enabled. */ +/* #undef HAVE_ENCODER_SUBBLOCK */ + +/* Define to 1 if x86 encoder is enabled. */ +#define HAVE_ENCODER_X86 1 + +/* Define to 1 if the system supports fast unaligned memory access. */ +#define HAVE_FAST_UNALIGNED_ACCESS 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 to enable bt2 match finder. */ +#define HAVE_MF_BT2 1 + +/* Define to 1 to enable bt3 match finder. */ +#define HAVE_MF_BT3 1 + +/* Define to 1 to enable bt4 match finder. */ +#define HAVE_MF_BT4 1 + +/* Define to 1 to enable hc3 match finder. */ +#define HAVE_MF_HC3 1 + +/* Define to 1 to enable hc4 match finder. */ +#define HAVE_MF_HC4 1 + +/* Define to 1 if optimizing for size. */ +/* #undef HAVE_SMALL */ + +/* Define to 1 if stdbool.h conforms to C99. */ +#define HAVE_STDBOOL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if the system has the type `uintptr_t'. */ +#define HAVE_UINTPTR_T 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the `utime' function. */ +#define HAVE_UTIME 1 + +/* Define to 1 or 0, depending whether the compiler supports simple visibility + declarations. */ +#define HAVE_VISIBILITY 0 + +/* Define to 1 if the system has the type `_Bool'. */ +#define HAVE__BOOL 1 + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "XZ Utils" + +/* The size of `size_t', as computed by sizeof. */ +#ifdef _WIN64 +# define SIZEOF_SIZE_T 8 +#else +# define SIZEOF_SIZE_T 4 +#endif + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ +#if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +#elif ! defined __LITTLE_ENDIAN__ +/* # undef WORDS_BIGENDIAN */ +#endif diff --git a/Build/source/libs/expat/COPYING b/Build/source/libs/expat/COPYING deleted file mode 100644 index fc97b02d909..00000000000 --- a/Build/source/libs/expat/COPYING +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - and Clark Cooper - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Build/source/libs/expat/Changes b/Build/source/libs/expat/Changes deleted file mode 100644 index 5b78b862a72..00000000000 --- a/Build/source/libs/expat/Changes +++ /dev/null @@ -1,34 +0,0 @@ -Release 1.95.1 Sun Oct 22 15:11:36 EDT 2000 - - Changes to get expat to build under Microsoft compiler - - Removed all aborts and instead return an UNEXPECTED_STATE error. - - Fixed a bug where a stray '%' in an entity value would cause an - abort. - - Defined XML_SetEndNamespaceDeclHandler. Thanks to Darryl Miles for - finding this oversight. - - Changed default patterns in lib/Makefile.in to fit non-GNU makes - Thanks to robin@unrated.net for reporting and providing an - account to test on. - - The reference had the wrong label for XML_SetStartNamespaceDecl. - Reported by an anonymous user. -Release 1.95.0 Fri Sep 29 2000 - - XML_ParserCreate_MM - Allows you to set a memory management suite to replace the - standard malloc,realloc, and free. - - XML_SetReturnNSTriplet - If you turn this feature on when namespace processing is in - effect, then qualified, prefixed element and attribute names - are returned as "uri|name|prefix" where '|' is whatever - separator character is used in namespace processing. - - Merged in features from perl-expat - o XML_SetElementDeclHandler - o XML_SetAttlistDeclHandler - o XML_SetXmlDeclHandler - o XML_SetEntityDeclHandler - o StartDoctypeDeclHandler takes 3 additional parameters: - sysid, pubid, has_internal_subset - o Many paired handler setters (like XML_SetElementHandler) - now have corresponding individual handler setters - o XML_GetInputContext for getting the input context of - the current parse position. - - Added reference material - - Packaged into a distribution that builds a sharable library \ No newline at end of file diff --git a/Build/source/libs/expat/MANIFEST b/Build/source/libs/expat/MANIFEST deleted file mode 100644 index 645bfd9c33d..00000000000 --- a/Build/source/libs/expat/MANIFEST +++ /dev/null @@ -1,58 +0,0 @@ -Changes -COPYING -MANIFEST -Makefile.in -README -aclocal.m4 -config.hin -configure -configure.in -conftools/config.guess -conftools/config.sub -conftools/install-sh -conftools/ltconfig -conftools/ltmain.sh -conftools/missing -conftools/mkinstalldirs -doc/reference.html -doc/style.css -examples/Makefile.in -examples/outline.c -lib/Makefile.in -lib/ascii.h -lib/asciitab.h -lib/expat.dsp -lib/expat.h -lib/iasciitab.h -lib/latin1tab.h -lib/nametab.h -lib/utf8tab.h -lib/xmlparse.c -lib/xmlrole.c -lib/xmlrole.h -lib/xmltok.c -lib/xmltok.h -lib/xmltok_impl.c -lib/xmltok_impl.h -lib/xmltok_ns.c -lib/winconfig.h -xmlwf/Makefile.in -xmlwf/codepage.c -xmlwf/codepage.h -xmlwf/ct.c -xmlwf/filemap.h -xmlwf/readfilemap.c -xmlwf/unixfilemap.c -xmlwf/wfcheck.c -xmlwf/wfcheck.h -xmlwf/wfcheckmessage.c -xmlwf/win32filemap.c -xmlwf/xmlfile.c -xmlwf/xmlfile.h -xmlwf/xmlmime.c -xmlwf/xmlmime.h -xmlwf/xmltchar.h -xmlwf/xmlurl.h -xmlwf/xmlwf.c -xmlwf/xmlwf.dsp -xmlwf/xmlwin32url.cxx diff --git a/Build/source/libs/expat/Makefile.in b/Build/source/libs/expat/Makefile.in deleted file mode 100644 index ce0a987c096..00000000000 --- a/Build/source/libs/expat/Makefile.in +++ /dev/null @@ -1,148 +0,0 @@ -################################################################ -# Process this file with top-level configure script to produce Makefile -# -# Copyright 2000 Clark Cooper -# -# This file is part of EXPAT. -# -# EXPAT is free software; you can redistribute it and/or modify it -# under the terms of the License (based on the MIT/X license) contained -# in the file COPYING that comes with this distribution. -# -# EXPAT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# SOFTWARE OR THE USE OR OTHER DEALINGS IN EXPAT. -# -# --- -# I started using automake, but -# 1) it seemed like overkill -# 2) I don't want all the GNU policies -# 3) I wanted more explicit control over what gets built -# -# So I'm doing my Makefile.in files manually. But a fair part is based -# on what I learned from perusing the Makefile.in's generated by automake, -# and the automake authors still get my kudos. -# - -SHELL = @SHELL@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -oldincludedir = /usr/include - -top_builddir = . - - -AUTOCONF = autoconf - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ - -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -host_alias = @host_alias@ -host_triplet = @host@ - -CC = @CC@ - -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -PACKAGE = @PACKAGE@ -RANLIB = @RANLIB@ -VERSION = @VERSION@ - -SUBDIRS = lib -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -CONFIG_HEADERS = config.h:config.hin - -DISTDIR = $(PACKAGE)-$(VERSION) -DISTRIBUTION = $(DISTDIR).tar.gz - -all: $(SUBDIRS) - -.PHONY: all $(SUBDIRS) clean distclean maintainer-clean dist install \ - uninstall distdir - -Makefile: Makefile.in config.status - CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) config.status - -config.status: configure - @if test -f $@; then \ - $(SHELL) config.status --recheck ; \ - else \ - $(SHELL) configure ; \ - fi - -configure: configure.in - $(AUTOCONF) - -config.h: config.hin config.status - CONFIG_FILES= CONFIG_HEADERS=$(CONFIG_HEADERS) \ - $(SHELL) ./config.status - -$(SUBDIRS): config.status - cd $@; $(MAKE) - - -clean: - @list='$(SUBDIRS)'; for dir in $$list; do \ - cd $$dir; $(MAKE) clean; cd ..; \ - done - rm -f core *~ - -distclean: - @list='$(SUBDIRS)'; for dir in $$list; do \ - cd $$dir; $(MAKE) distclean; cd ..; \ - done - rm -f config.h config.status config.log libtool examples/Makefile xmlwf/Makefile - -maintainer-clean: distclean - rm -f $(DISTRIBUTION) - rm -rf $(DISTDIR) - -distdir: MANIFEST - test -d $(DISTDIR) && rm -rf $(DISTDIR); \ - mkdir $(DISTDIR); \ - flist=`sed -e "s/[ ]:.*$$//" MANIFEST`; for file in $$flist; do \ - cp -P $$file $(DISTDIR); \ - done - -$(DISTRIBUTION): distdir - tar cfz $(DISTRIBUTION) $(DISTDIR) - -dist: $(DISTRIBUTION) - -install: - @list='$(SUBDIRS)'; for dir in $$list; do \ - cd $$dir; $(MAKE) install; cd ..; \ - done - -uninstall: - @list='$(SUBDIRS)'; for dir in $$list; do \ - cd $$dir; $(MAKE) uninstall; cd ..; \ - done diff --git a/Build/source/libs/expat/README b/Build/source/libs/expat/README deleted file mode 100644 index d1c68741909..00000000000 --- a/Build/source/libs/expat/README +++ /dev/null @@ -1,57 +0,0 @@ - - Expat, Release 1.95.1 - -This is expat, the C library for parsing XML, written by James Clark. Expat -is a stream oriented XML parser. This means that you register handlers with -the parser prior to starting the parse. These handlers are called when -the parser discovers the associated structures in the document being parsed. -A start tag is an example of the kind of structures for which you may -register handlers. - -Expat is free software. You may copy, distribute, and modify it under the -terms of the License contained in the file, COPYING, distributed with this -package. This license is the same as the MIT/X Consortium license. - -Versions of expat that have an odd minor version (the middle number in the -release above), are development releases and should be considered as -beta software. Releases with even minor version numbers are intended to be -production grade software. - -To build expat, you first run the configuration shell script in the top -level distribution directory: - - ./configure - -There are many options which you may provide to configure (which you can -discover by running configure with the --help option.) But the one of most -interest is the one that sets the installation directory. By default, -the configure script will set things up to install libexpat into -/usr/local/lib and expat.h into /usr/local/include. If, for example, you'd -prefer to install into /home/me/mystuff/lib and /home/me/mystuff/include, -you can tell configure about that with: - - ./configure --prefix=/home/me/mystuff - -After running the configure script, the "make" command will build things and -"make install" will install things into their proper location. Note that -you need to have write permission into the directories into which things -will be installed. - -Alternatively, on Win32 systems with Microsoft's Developer's Studio installed, -you can simply double-click on lib/expat.dsp from Windows Explorer and build -and install in the usual way from with DevStudio. - -As a third alternative you may choose to download expat_win32bin which has -a pre-compiled dll in it. - -A reference manual is available in the doc/reference.html in this -distribution. - -The homepage for this project is http://expat.sourceforge.net. There are -links there to connect you to the bug reports page. If you need to report -a bug when you don't have access to a browser, you may also send a bug -report by email to expat-bugs@lists.sourceforge.net. - -Discussion related to the direction of future expat development takes place -on expat-discuss@lists.sourceforge.net. Archives of this list may be found -at http://www.geocrawler.com/redir-sf.php3?list=expat-discuss. diff --git a/Build/source/libs/expat/aclocal.m4 b/Build/source/libs/expat/aclocal.m4 deleted file mode 100644 index 983268ba09f..00000000000 --- a/Build/source/libs/expat/aclocal.m4 +++ /dev/null @@ -1,425 +0,0 @@ -## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*- -## Copyright (C) 1996-1999, 2000 Free Software Foundation, Inc. -## Originally by Gordon Matzigkeit , 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 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, but -## WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -## -## 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. - -# serial 40 AC_PROG_LIBTOOL -AC_DEFUN(AC_PROG_LIBTOOL, -[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl - -# Save cache, so that ltconfig can load it -AC_CACHE_SAVE - -# Actually configure libtool. ac_aux_dir is where install-sh is found. -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ -LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ -LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \ -DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \ -${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ -$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \ -|| AC_MSG_ERROR([libtool configure failed]) - -# Reload cache, that may have been modified by ltconfig -AC_CACHE_LOAD - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -# Redirect the config.log output again, so that the ltconfig log is not -# clobbered by the next message. -exec 5>>./config.log -]) - -AC_DEFUN(AC_LIBTOOL_SETUP, -[AC_PREREQ(2.13)dnl -AC_REQUIRE([AC_ENABLE_SHARED])dnl -AC_REQUIRE([AC_ENABLE_STATIC])dnl -AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([AC_PROG_RANLIB])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_LD])dnl -AC_REQUIRE([AC_PROG_NM])dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -dnl - -case "$target" in -NONE) lt_target="$host" ;; -*) lt_target="$target" ;; -esac - -# Check for any special flags to pass to ltconfig. -libtool_flags="--cache-file=$cache_file" -test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" -test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" -test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" -test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" -test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" -ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], -[libtool_flags="$libtool_flags --enable-dlopen"]) -ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], -[libtool_flags="$libtool_flags --enable-win32-dll"]) -AC_ARG_ENABLE(libtool-lock, - [ --disable-libtool-lock avoid locking (might break parallel builds)]) -test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" -test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case "$lt_target" in -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case "`/usr/bin/file conftest.o`" in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; - -ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], -[*-*-cygwin* | *-*-mingw*) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -]) -esac -]) - -# AC_LIBTOOL_DLOPEN - enable checks for dlopen support -AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])]) - -# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's -AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])]) - -# AC_ENABLE_SHARED - implement the --enable-shared flag -# Usage: AC_ENABLE_SHARED[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. -AC_DEFUN(AC_ENABLE_SHARED, [dnl -define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE(shared, -changequote(<<, >>)dnl -<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT], -changequote([, ])dnl -[p=${PACKAGE-default} -case "$enableval" in -yes) enable_shared=yes ;; -no) enable_shared=no ;; -*) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac], -enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl -]) - -# AC_DISABLE_SHARED - set the default shared flag to --disable-shared -AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_SHARED(no)]) - -# AC_ENABLE_STATIC - implement the --enable-static flag -# Usage: AC_ENABLE_STATIC[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. -AC_DEFUN(AC_ENABLE_STATIC, [dnl -define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE(static, -changequote(<<, >>)dnl -<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT], -changequote([, ])dnl -[p=${PACKAGE-default} -case "$enableval" in -yes) enable_static=yes ;; -no) enable_static=no ;; -*) - enable_static=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac], -enable_static=AC_ENABLE_STATIC_DEFAULT)dnl -]) - -# AC_DISABLE_STATIC - set the default static flag to --disable-static -AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_STATIC(no)]) - - -# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag -# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. -AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl -define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE(fast-install, -changequote(<<, >>)dnl -<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT], -changequote([, ])dnl -[p=${PACKAGE-default} -case "$enableval" in -yes) enable_fast_install=yes ;; -no) enable_fast_install=no ;; -*) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac], -enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl -]) - -# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install -AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_FAST_INSTALL(no)]) - -# AC_PROG_LD - find the path to the GNU or non-GNU linker -AC_DEFUN(AC_PROG_LD, -[AC_ARG_WITH(gnu-ld, -[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], -test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -ac_prog=ld -if test "$ac_cv_prog_gcc" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by GCC]) - ac_prog=`($CC -print-prog-name=ld) 2>&5` - case "$ac_prog" in - # Accept absolute paths. -changequote(,)dnl - [\\/]* | [A-Za-z]:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' -changequote([,])dnl - # Canonicalize the path of ld - ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(ac_cv_path_LD, -[if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - ac_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then - test "$with_gnu_ld" != no && break - else - test "$with_gnu_ld" != yes && break - fi - fi - done - IFS="$ac_save_ifs" -else - ac_cv_path_LD="$LD" # Let the user override the test with a path. -fi]) -LD="$ac_cv_path_LD" -if test -n "$LD"; then - AC_MSG_RESULT($LD) -else - AC_MSG_RESULT(no) -fi -test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) -AC_PROG_LD_GNU -]) - -AC_DEFUN(AC_PROG_LD_GNU, -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld, -[# I'd rather use --version here, but apparently some GNU ld's only accept -v. -if $LD -v 2>&1 &5; then - ac_cv_prog_gnu_ld=yes -else - ac_cv_prog_gnu_ld=no -fi]) -]) - -# AC_PROG_NM - find the path to a BSD-compatible name lister -AC_DEFUN(AC_PROG_NM, -[AC_MSG_CHECKING([for BSD-compatible nm]) -AC_CACHE_VAL(ac_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - ac_cv_path_NM="$NM" -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" - for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -B" - break - elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -p" - break - else - ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - fi - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm -fi]) -NM="$ac_cv_path_NM" -AC_MSG_RESULT([$NM]) -]) - -# AC_CHECK_LIBM - check for math library -AC_DEFUN(AC_CHECK_LIBM, -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case "$lt_target" in -*-*-beos* | *-*-cygwin*) - # These system don't have libm - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, main, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, main, LIBM="-lm") - ;; -esac -]) - -# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for -# the libltdl convenience library and INCLTDL to the include flags for -# the libltdl header and adds --enable-ltdl-convenience to the -# configure arguments. Note that LIBLTDL and INCLTDL are not -# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not -# provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed -# with '${top_builddir}/' and INCLTDL will be prefixed with -# '${top_srcdir}/' (note the single quotes!). If your package is not -# flat and you're not using automake, define top_builddir and -# top_srcdir appropriately in the Makefiles. -AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - case "$enable_ltdl_convenience" in - no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; - "") enable_ltdl_convenience=yes - ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; - esac - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la - INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) -]) - -# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for -# the libltdl installable library and INCLTDL to the include flags for -# the libltdl header and adds --enable-ltdl-install to the configure -# arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is -# AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed -# libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will -# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed -# with '${top_srcdir}/' (note the single quotes!). If your package is -# not flat and you're not using automake, define top_builddir and -# top_srcdir appropriately in the Makefiles. -# In the future, this macro may have to be called after AC_PROG_LIBTOOL. -AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - AC_CHECK_LIB(ltdl, main, - [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], - [if test x"$enable_ltdl_install" = xno; then - AC_MSG_WARN([libltdl not installed, but installation disabled]) - else - enable_ltdl_install=yes - fi - ]) - if test x"$enable_ltdl_install" = x"yes"; then - ac_configure_args="$ac_configure_args --enable-ltdl-install" - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la - INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) - else - ac_configure_args="$ac_configure_args --enable-ltdl-install=no" - LIBLTDL="-lltdl" - INCLTDL= - fi -]) - -dnl This is just to silence aclocal about the macro not being used -ifelse([AC_DISABLE_FAST_INSTALL])dnl diff --git a/Build/source/libs/expat/config.hin b/Build/source/libs/expat/config.hin deleted file mode 100644 index 5dd8d5b77a1..00000000000 --- a/Build/source/libs/expat/config.hin +++ /dev/null @@ -1,65 +0,0 @@ -/*================================================================ -** Copyright 2000, Clark Cooper -** All rights reserved. -** -** This is free software. You are permitted to copy, distribute, or modify -** it under the terms of the MIT/X license (contained in the COPYING file -** with this distribution.) -** -** -*/ - -/* Define to empty if the keyword does not work. */ -#undef const - -/* Define if you have a working `mmap' system call. */ -#undef HAVE_MMAP - -/* Define to `long' if doesn't define. */ -#undef off_t - -/* Define to `unsigned' if doesn't define. */ -#undef size_t - -/* Define if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define if your processor stores words with the most significant - byte first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN - -/* Define if you have the bcopy function. */ -#undef HAVE_BCOPY - -/* Define if you have the getpagesize function. */ -#undef HAVE_GETPAGESIZE - -/* Define if you have the memmove function. */ -#undef HAVE_MEMMOVE - -/* Define if you have the header file. */ -#undef HAVE_FCNTL_H - -/* Define if you have the header file. */ -#undef HAVE_UNISTD_H - -#define XML_NS -#define XML_DTD - -#ifdef WORDS_BIGENDIAN -#define XML_BYTE_ORDER 21 -#else -#define XML_BYTE_ORDER 12 -#endif - -#define XML_CONTEXT_BYTES 1024 - -#ifndef HAVE_MEMMOVE -#ifdef HAVE_BCOPY -#define memmove(d,s,l) bcopy((s),(d),(l)) -#else -#define memmove(d,s,l) ;punting on memmove; -#endif - -#endif - diff --git a/Build/source/libs/expat/configure b/Build/source/libs/expat/configure deleted file mode 100755 index bdcedeb706d..00000000000 --- a/Build/source/libs/expat/configure +++ /dev/null @@ -1,7042 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61. -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# CDPATH. -$as_unset CDPATH - - -if test "x$CONFIG_SHELL" = x; then - if (eval ":") 2>/dev/null; then - as_have_required=yes -else - as_have_required=no -fi - - if test $as_have_required = yes && (eval ": -(as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=\$LINENO - as_lineno_2=\$LINENO - test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && - test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -") 2> /dev/null; then - : -else - as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - case $as_dir in - /*) - for as_base in sh bash ksh sh5; do - as_candidate_shells="$as_candidate_shells $as_dir/$as_base" - done;; - esac -done -IFS=$as_save_IFS - - - for as_shell in $as_candidate_shells $SHELL; do - # Try only shells that exist, to save several forks. - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { ("$as_shell") 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -_ASEOF -}; then - CONFIG_SHELL=$as_shell - as_have_required=yes - if { "$as_shell" 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -(as_func_return () { - (exit $1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = "$1" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test $exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - -_ASEOF -}; then - break -fi - -fi - - done - - if test "x$CONFIG_SHELL" != x; then - for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - - if test $as_have_required = no; then - echo This script requires a shell more modern than all the - echo shells that I found on your system. Please install a - echo modern shell, or manually run the script under such a - echo shell if you do have one. - { (exit 1); exit 1; } -fi - - -fi - -fi - - - -(eval "as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0") || { - echo No shell found that supports shell functions. - echo Please tell autoconf@gnu.org about your system, - echo including any error possibly output before this - echo message -} - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # 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). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... 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'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - 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 - -# 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'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - -exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= - -ac_unique_file="Makefile.in" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='SHELL -PATH_SEPARATOR -PACKAGE_NAME -PACKAGE_TARNAME -PACKAGE_VERSION -PACKAGE_STRING -PACKAGE_BUGREPORT -exec_prefix -prefix -program_transform_name -bindir -sbindir -libexecdir -datarootdir -datadir -sysconfdir -sharedstatedir -localstatedir -includedir -oldincludedir -docdir -infodir -htmldir -dvidir -pdfdir -psdir -libdir -localedir -mandir -DEFS -ECHO_C -ECHO_N -ECHO_T -LIBS -build_alias -host_alias -target_alias -build -build_cpu -build_vendor -build_os -host -host_cpu -host_vendor -host_os -RANLIB -CC -CFLAGS -LDFLAGS -CPPFLAGS -ac_ct_CC -EXEEXT -OBJEXT -LN_S -LIBTOOL -PACKAGE -VERSION -LIBCURRENT -LIBREVISION -LIBAGE -INSTALL_PROGRAM -INSTALL_SCRIPT -INSTALL_DATA -CPP -GREP -EGREP -LIBOBJS -FILEMAP_OBJ -LTLIBOBJS' -ac_subst_files='' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=\$ac_optarg ;; - - -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } -fi - -# Be sure to have absolute directory names. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; } -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - 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 -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - { echo "$as_me: error: Working directory cannot be determined" >&2 - { (exit 1); exit 1; }; } -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { echo "$as_me: error: pwd does not report name of working directory" >&2 - { (exit 1); exit 1; }; } - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$0" || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 - { (exit 1); exit 1; }; } - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -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 this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Optional Features: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --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-libtool-lock avoid locking (might break parallel builds) - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-gnu-ld assume the C compiler uses GNU ld default=no - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.61 - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi -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 $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; - 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - ac_configure_args="$ac_configure_args '$ac_arg'" - ;; - esac - done -done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -n "$CONFIG_SITE"; then - set x "$CONFIG_SITE" -elif test "x$prefix" != xNONE; then - set x "$prefix/share/config.site" "$prefix/etc/config.site" -else - set x "$ac_default_prefix/share/config.site" \ - "$ac_default_prefix/etc/config.site" -fi -shift -for ac_site_file -do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -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 - - -ac_aux_dir= -for ac_dir in conftools "$srcdir"/conftools; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in conftools \"$srcdir\"/conftools" >&5 -echo "$as_me: error: cannot find install-sh or install.sh in conftools \"$srcdir\"/conftools" >&2;} - { (exit 1); exit 1; }; } -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -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. - - - - -EXPAT_MAJOR_VERSION=1 -EXPAT_MINOR_VERSION=95 -EXPAT_EDIT=1 - -EXPAT_VERSION=$EXPAT_MAJOR_VERSION.$EXPAT_MINOR_VERSION.$EXPAT_EDIT -VERSION=$EXPAT_VERSION -PACKAGE=expat - - -LIBCURRENT=0 -LIBREVISION=1 -LIBAGE=0 - -ac_config_headers="$ac_config_headers config.h:config.hin" - - - -# Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then - enableval=$enable_shared; p=${PACKAGE-default} -case "$enableval" in -yes) enable_shared=yes ;; -no) enable_shared=no ;; -*) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac -else - enable_shared=yes -fi - -# Check whether --enable-static was given. -if test "${enable_static+set}" = set; then - enableval=$enable_static; p=${PACKAGE-default} -case "$enableval" in -yes) enable_static=yes ;; -no) enable_static=no ;; -*) - enable_static=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac -else - enable_static=yes -fi - -# Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then - enableval=$enable_fast_install; p=${PACKAGE-default} -case "$enableval" in -yes) enable_fast_install=yes ;; -no) enable_fast_install=no ;; -*) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac -else - enable_fast_install=yes -fi - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 -echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} - { (exit 1); exit 1; }; } - -{ echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6; } -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} - { (exit 1); exit 1; }; } - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 -echo "$as_me: error: invalid value of canonical build" >&2;} - { (exit 1); exit 1; }; };; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6; } -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} - { (exit 1); exit 1; }; } -fi - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 -echo "$as_me: error: invalid value of canonical host" >&2;} - { (exit 1); exit 1; }; };; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -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 -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# -# List of possible output files, starting from the most likely. -# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) -# only as a last resort. b.out is created by i960 compilers. -ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' -# -# The IRIX 6 linker writes into existing files which may not be -# executable, retaining their permissions. Remove them first so a -# subsequent execution test works. -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { (ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi - -{ echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6; } -if test -z "$ac_file"; then - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } -fi - -ac_exeext=$ac_cv_exeext - -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - -rm -f a.out a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6; } - -{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } -GCC=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -/* 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); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_c89=$ac_arg -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6; } ;; - xno) - { echo "$as_me:$LINENO: result: unsupported" >&5 -echo "${ECHO_T}unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; -esac - - -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 - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$ac_cv_c_compiler_gnu" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { echo "$as_me:$LINENO: checking for ld used by GCC" >&5 -echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; } - ac_prog=`($CC -print-prog-name=ld) 2>&5` - case "$ac_prog" in - # Accept absolute paths. - [\\/]* | [A-Za-z]:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the path of ld - ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } -else - { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } -fi -if test "${ac_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - ac_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then - test "$with_gnu_ld" != no && break - else - test "$with_gnu_ld" != yes && break - fi - fi - done - IFS="$ac_save_ifs" -else - ac_cv_path_LD="$LD" # Let the user override the test with a path. -fi -fi - -LD="$ac_cv_path_LD" -if test -n "$LD"; then - { echo "$as_me:$LINENO: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } -if test "${ac_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # I'd rather use --version here, but apparently some GNU ld's only accept -v. -if $LD -v 2>&1 &5; then - ac_cv_prog_gnu_ld=yes -else - ac_cv_prog_gnu_ld=no -fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_gnu_ld" >&5 -echo "${ECHO_T}$ac_cv_prog_gnu_ld" >&6; } - - -{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 -echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } -if test "${ac_cv_path_NM+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$NM"; then - # Let the user override the test. - ac_cv_path_NM="$NM" -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" - for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -B" - break - elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -p" - break - else - ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - fi - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm -fi -fi - -NM="$ac_cv_path_NM" -{ echo "$as_me:$LINENO: result: $NM" >&5 -echo "${ECHO_T}$NM" >&6; } - -{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 -echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -else - { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -echo "${ECHO_T}no, using $LN_S" >&6; } -fi - - - -case "$target" in -NONE) lt_target="$host" ;; -*) lt_target="$target" ;; -esac - -# Check for any special flags to pass to ltconfig. -libtool_flags="--cache-file=$cache_file" -test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" -test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" -test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" -test "$ac_cv_c_compiler_gnu" = yes && libtool_flags="$libtool_flags --with-gcc" -test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" -test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case "$lt_target" in -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 3093 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case "`/usr/bin/file conftest.o`" in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 -echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - lt_cv_cc_needs_belf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - lt_cv_cc_needs_belf=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 -echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; - - -esac - - -# Save cache, so that ltconfig can load it -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -# Actually configure libtool. ac_aux_dir is where install-sh is found. -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ -LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ -LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \ -DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \ -${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ -$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \ -|| { { echo "$as_me:$LINENO: error: libtool configure failed" >&5 -echo "$as_me: error: libtool configure failed" >&2;} - { (exit 1); exit 1; }; } - -# Reload cache, that may have been modified by ltconfig -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - -# Redirect the config.log output again, so that the ltconfig log is not -# clobbered by the next message. -exec 5>>./config.log - - - - - - - - - -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 -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } -GCC=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -/* 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); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_c89=$ac_arg -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6; } ;; - xno) - { echo "$as_me:$LINENO: result: unsupported" >&5 -echo "${ECHO_T}unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; -esac - - -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 - -# 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: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # 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 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. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - done - done - ;; -esac -done -IFS=$as_save_IFS - - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - - - -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 -{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -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 - - -{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 -echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Extract the first word of "grep ggrep" to use in msg output -if test -z "$GREP"; then -set dummy grep ggrep; ac_prog_name=$2 -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_path_GREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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 - # 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 -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - - $ac_path_GREP_found && break 3 - done -done - -done -IFS=$as_save_IFS - - -fi - -GREP="$ac_cv_path_GREP" -if test -z "$GREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - -else - ac_cv_path_GREP=$GREP -fi - - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 -echo "${ECHO_T}$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - # Extract the first word of "egrep" to use in msg output -if test -z "$EGREP"; then -set dummy egrep; ac_prog_name=$2 -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_path_EGREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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 - # 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 -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - - $ac_path_EGREP_found && break 3 - done -done - -done -IFS=$as_save_IFS - - -fi - -EGREP="$ac_cv_path_EGREP" -if test -z "$EGREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - -else - ac_cv_path_EGREP=$EGREP -fi - - - fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 -echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_stdc=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. - - - - - - - - - -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - - -for ac_header in fcntl.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # See if sys/param.h defines the BYTE_ORDER macro. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \ - && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN) - bogus endian macros -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - # It does; now see whether it defined to BIG_ENDIAN or not. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_c_bigendian=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_c_bigendian=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # It does not; compile a test program. -if test "$cross_compiling" = yes; then - # try to guess the endianness by grepping values into an object file - ac_cv_c_bigendian=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; -short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; -void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } -short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; -short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; -void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } -int -main () -{ - _ascii (); _ebcdic (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then - ac_cv_c_bigendian=yes -fi -if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_bigendian=no -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 -echo "${ECHO_T}$ac_cv_c_bigendian" >&6; } -case $ac_cv_c_bigendian in - yes) - -cat >>confdefs.h <<\_ACEOF -#define WORDS_BIGENDIAN 1 -_ACEOF - ;; - no) - ;; - *) - { { echo "$as_me:$LINENO: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&5 -echo "$as_me: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} - { (exit 1); exit 1; }; } ;; -esac - -{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 -echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } -if test "${ac_cv_c_const+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset cs; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_c_const=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_c_const=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 -echo "${ECHO_T}$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then - -cat >>confdefs.h <<\_ACEOF -#define const -_ACEOF - -fi - -{ echo "$as_me:$LINENO: checking for off_t" >&5 -echo $ECHO_N "checking for off_t... $ECHO_C" >&6; } -if test "${ac_cv_type_off_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef off_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_off_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_off_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 -echo "${ECHO_T}$ac_cv_type_off_t" >&6; } -if test $ac_cv_type_off_t = yes; then - : -else - -cat >>confdefs.h <<_ACEOF -#define off_t long int -_ACEOF - -fi - -{ echo "$as_me:$LINENO: checking for size_t" >&5 -echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } -if test "${ac_cv_type_size_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef size_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_size_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_size_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 -echo "${ECHO_T}$ac_cv_type_size_t" >&6; } -if test $ac_cv_type_size_t = yes; then - : -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - - - -{ echo "$as_me:$LINENO: checking for working memcmp" >&5 -echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6; } -if test "${ac_cv_func_memcmp_working+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_func_memcmp_working=no -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Some versions of memcmp are not 8-bit clean. */ - char c0 = '\100', c1 = '\200', c2 = '\201'; - if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) - return 1; - - /* The Next x86 OpenStep bug shows up only when comparing 16 bytes - or more and with at least one buffer not starting on a 4-byte boundary. - William Lewis provided this test program. */ - { - char foo[21]; - char bar[21]; - int i; - for (i = 0; i < 4; i++) - { - char *a = foo + i; - char *b = bar + i; - strcpy (a, "--------01111111"); - strcpy (b, "--------10000000"); - if (memcmp (a, b, 16) >= 0) - return 1; - } - return 0; - } - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_memcmp_working=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_func_memcmp_working=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5 -echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6; } -test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in - *" memcmp.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" - ;; -esac - - - - -for ac_header in stdlib.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_func in getpagesize -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -{ echo "$as_me:$LINENO: checking for working mmap" >&5 -echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; } -if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_func_mmap_fixed_mapped=no -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -/* malloc might have been renamed as rpl_malloc. */ -#undef malloc - -/* Thanks to Mike Haertel and Jim Avera for this test. - Here is a matrix of mmap possibilities: - mmap private not fixed - mmap private fixed at somewhere currently unmapped - mmap private fixed at somewhere already mapped - mmap shared not fixed - mmap shared fixed at somewhere currently unmapped - mmap shared fixed at somewhere already mapped - For private mappings, we should verify that changes cannot be read() - back from the file, nor mmap's back from the file at a different - address. (There have been systems where private was not correctly - implemented like the infamous i386 svr4.0, and systems where the - VM page cache was not coherent with the file system buffer cache - like early versions of FreeBSD and possibly contemporary NetBSD.) - For shared mappings, we should conversely verify that changes get - propagated back to all the places they're supposed to be. - - Grep wants private fixed already mapped. - The main things grep needs to know about mmap are: - * does it exist and is it safe to write into the mmap'd area - * how to use it (BSD variants) */ - -#include -#include - -#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H -char *malloc (); -#endif - -/* This mess was copied from the GNU getpagesize.h. */ -#ifndef HAVE_GETPAGESIZE -/* Assume that all systems that can run configure have sys/param.h. */ -# ifndef HAVE_SYS_PARAM_H -# define HAVE_SYS_PARAM_H 1 -# endif - -# ifdef _SC_PAGESIZE -# define getpagesize() sysconf(_SC_PAGESIZE) -# else /* no _SC_PAGESIZE */ -# ifdef HAVE_SYS_PARAM_H -# include -# ifdef EXEC_PAGESIZE -# define getpagesize() EXEC_PAGESIZE -# else /* no EXEC_PAGESIZE */ -# ifdef NBPG -# define getpagesize() NBPG * CLSIZE -# ifndef CLSIZE -# define CLSIZE 1 -# endif /* no CLSIZE */ -# else /* no NBPG */ -# ifdef NBPC -# define getpagesize() NBPC -# else /* no NBPC */ -# ifdef PAGESIZE -# define getpagesize() PAGESIZE -# endif /* PAGESIZE */ -# endif /* no NBPC */ -# endif /* no NBPG */ -# endif /* no EXEC_PAGESIZE */ -# else /* no HAVE_SYS_PARAM_H */ -# define getpagesize() 8192 /* punt totally */ -# endif /* no HAVE_SYS_PARAM_H */ -# endif /* no _SC_PAGESIZE */ - -#endif /* no HAVE_GETPAGESIZE */ - -int -main () -{ - char *data, *data2, *data3; - int i, pagesize; - int fd; - - pagesize = getpagesize (); - - /* First, make a file with some known garbage in it. */ - data = (char *) malloc (pagesize); - if (!data) - return 1; - for (i = 0; i < pagesize; ++i) - *(data + i) = rand (); - umask (0); - fd = creat ("conftest.mmap", 0600); - if (fd < 0) - return 1; - if (write (fd, data, pagesize) != pagesize) - return 1; - close (fd); - - /* Next, try to mmap the file at a fixed address which already has - something else allocated at it. If we can, also make sure that - we see the same garbage. */ - fd = open ("conftest.mmap", O_RDWR); - if (fd < 0) - return 1; - data2 = (char *) malloc (2 * pagesize); - if (!data2) - return 1; - data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1); - if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_FIXED, fd, 0L)) - return 1; - for (i = 0; i < pagesize; ++i) - if (*(data + i) != *(data2 + i)) - return 1; - - /* Finally, make sure that changes to the mapped area do not - percolate back to the file as seen by read(). (This is a bug on - some variants of i386 svr4.0.) */ - for (i = 0; i < pagesize; ++i) - *(data2 + i) = *(data2 + i) + 1; - data3 = (char *) malloc (pagesize); - if (!data3) - return 1; - if (read (fd, data3, pagesize) != pagesize) - return 1; - for (i = 0; i < pagesize; ++i) - if (*(data + i) != *(data3 + i)) - return 1; - close (fd); - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_mmap_fixed_mapped=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_func_mmap_fixed_mapped=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 -echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; } -if test $ac_cv_func_mmap_fixed_mapped = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_MMAP 1 -_ACEOF - -fi -rm -f conftest.mmap - - -if test -z "$HAVE_MMAP"; then -FILEMAP_OBJ=unixfilemap.o -else -FILEMAP_OBJ=readfilemap.o -fi - - - -for ac_func in memmove bcopy -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -ac_config_files="$ac_config_files Makefile lib/Makefile xmlwf/Makefile examples/Makefile" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# CDPATH. -$as_unset CDPATH - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # 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). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... 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'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - 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 - -# 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'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 - -# Save the log message, to keep $[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.61, - with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - -Copyright (C) 2006 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - echo "$ac_cs_version"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - { echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) { echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$ac_config_targets $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -if \$ac_cs_recheck; then - echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - CONFIG_SHELL=$SHELL - export CONFIG_SHELL - exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.hin" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; - "xmlwf/Makefile") CONFIG_FILES="$CONFIG_FILES xmlwf/Makefile" ;; - "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; - - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -# -# Set up the sed scripts for CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "$CONFIG_FILES"; then - -_ACEOF - - - -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -SHELL!$SHELL$ac_delim -PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -PACKAGE_NAME!$PACKAGE_NAME$ac_delim -PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -PACKAGE_STRING!$PACKAGE_STRING$ac_delim -PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -exec_prefix!$exec_prefix$ac_delim -prefix!$prefix$ac_delim -program_transform_name!$program_transform_name$ac_delim -bindir!$bindir$ac_delim -sbindir!$sbindir$ac_delim -libexecdir!$libexecdir$ac_delim -datarootdir!$datarootdir$ac_delim -datadir!$datadir$ac_delim -sysconfdir!$sysconfdir$ac_delim -sharedstatedir!$sharedstatedir$ac_delim -localstatedir!$localstatedir$ac_delim -includedir!$includedir$ac_delim -oldincludedir!$oldincludedir$ac_delim -docdir!$docdir$ac_delim -infodir!$infodir$ac_delim -htmldir!$htmldir$ac_delim -dvidir!$dvidir$ac_delim -pdfdir!$pdfdir$ac_delim -psdir!$psdir$ac_delim -libdir!$libdir$ac_delim -localedir!$localedir$ac_delim -mandir!$mandir$ac_delim -DEFS!$DEFS$ac_delim -ECHO_C!$ECHO_C$ac_delim -ECHO_N!$ECHO_N$ac_delim -ECHO_T!$ECHO_T$ac_delim -LIBS!$LIBS$ac_delim -build_alias!$build_alias$ac_delim -host_alias!$host_alias$ac_delim -target_alias!$target_alias$ac_delim -build!$build$ac_delim -build_cpu!$build_cpu$ac_delim -build_vendor!$build_vendor$ac_delim -build_os!$build_os$ac_delim -host!$host$ac_delim -host_cpu!$host_cpu$ac_delim -host_vendor!$host_vendor$ac_delim -host_os!$host_os$ac_delim -RANLIB!$RANLIB$ac_delim -CC!$CC$ac_delim -CFLAGS!$CFLAGS$ac_delim -LDFLAGS!$LDFLAGS$ac_delim -CPPFLAGS!$CPPFLAGS$ac_delim -ac_ct_CC!$ac_ct_CC$ac_delim -EXEEXT!$EXEEXT$ac_delim -OBJEXT!$OBJEXT$ac_delim -LN_S!$LN_S$ac_delim -LIBTOOL!$LIBTOOL$ac_delim -PACKAGE!$PACKAGE$ac_delim -VERSION!$VERSION$ac_delim -LIBCURRENT!$LIBCURRENT$ac_delim -LIBREVISION!$LIBREVISION$ac_delim -LIBAGE!$LIBAGE$ac_delim -INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim -INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim -INSTALL_DATA!$INSTALL_DATA$ac_delim -CPP!$CPP$ac_delim -GREP!$GREP$ac_delim -EGREP!$EGREP$ac_delim -LIBOBJS!$LIBOBJS$ac_delim -FILEMAP_OBJ!$FILEMAP_OBJ$ac_delim -LTLIBOBJS!$LTLIBOBJS$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 69; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi - -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -:end -s/|#_!!_#|//g -CEOF$ac_eof -_ACEOF - - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF -fi # test -n "$CONFIG_FILES" - - -for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -echo "$as_me: error: Invalid tag $ac_tag." >&2;} - { (exit 1); exit 1; }; };; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; - esac - ac_file_inputs="$ac_file_inputs $ac_f" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input="Generated from "`IFS=: - echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - fi - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin";; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir="$ac_dir" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= - -case `sed -n '/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p -' $ac_file_inputs` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s&@configure_input@&$configure_input&;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -$ac_datarootdir_hack -" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out"; rm -f "$tmp/out";; - *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac - ;; - :H) - # - # CONFIG_HEADER - # -_ACEOF - -# Transform confdefs.h into a sed script `conftest.defines', that -# substitutes the proper values into config.h.in to produce config.h. -rm -f conftest.defines conftest.tail -# First, append a space to every undef/define line, to ease matching. -echo 's/$/ /' >conftest.defines -# Then, protect against being on the right side of a sed subst, or in -# an unquoted here document, in config.status. If some macros were -# called several times there might be several #defines for the same -# symbol, which is useless. But do not sort them, since the last -# AC_DEFINE must be honored. -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where -# NAME is the cpp macro being defined, VALUE is the value it is being given. -# PARAMS is the parameter list in the macro definition--in most cases, it's -# just an empty string. -ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' -ac_dB='\\)[ (].*,\\1define\\2' -ac_dC=' ' -ac_dD=' ,' - -uniq confdefs.h | - sed -n ' - t rset - :rset - s/^[ ]*#[ ]*define[ ][ ]*// - t ok - d - :ok - s/[\\&,]/\\&/g - s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p - s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p - ' >>conftest.defines - -# Remove the space that was appended to ease matching. -# Then replace #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -# (The regexp can be short, since the line contains either #define or #undef.) -echo 's/ $// -s,^[ #]*u.*,/* & */,' >>conftest.defines - -# Break up conftest.defines: -ac_max_sed_lines=50 - -# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" -# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" -# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" -# et cetera. -ac_in='$ac_file_inputs' -ac_out='"$tmp/out1"' -ac_nxt='"$tmp/out2"' - -while : -do - # Write a here document: - cat >>$CONFIG_STATUS <<_ACEOF - # First, check the format of the line: - cat >"\$tmp/defines.sed" <<\\CEOF -/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def -/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def -b -:def -_ACEOF - sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS - ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in - sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail - grep . conftest.tail >/dev/null || break - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines conftest.tail - -echo "ac_result=$ac_in" >>$CONFIG_STATUS -cat >>$CONFIG_STATUS <<\_ACEOF - if test x"$ac_file" != x-; then - echo "/* $configure_input */" >"$tmp/config.h" - cat "$ac_result" >>"$tmp/config.h" - if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f $ac_file - mv "$tmp/config.h" $ac_file - fi - else - echo "/* $configure_input */" - cat "$ac_result" - fi - rm -f "$tmp/out12" - ;; - - - esac - -done # for ac_tag - - -{ (exit 0); exit 0; } -_ACEOF -chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } -fi - diff --git a/Build/source/libs/expat/configure.in b/Build/source/libs/expat/configure.in deleted file mode 100644 index 5b3e29a8d5d..00000000000 --- a/Build/source/libs/expat/configure.in +++ /dev/null @@ -1,87 +0,0 @@ -dnl configuration script for expat -dnl Process this file with autoconf to produce a configure script. -dnl -dnl Copyright 2000 Clark Cooper -dnl -dnl This file is part of EXPAT. -dnl -dnl EXPAT is free software; you can redistribute it and/or modify it -dnl under the terms of the License (based on the MIT/X license) contained -dnl in the file COPYING that comes with this distribution. -dnl - -AC_INIT(Makefile.in) -AC_CONFIG_AUX_DIR(conftools) - -dnl -dnl Follow the GNU/Linux convention of odd number minor version for -dnl beta/development releases and even number minor version for stable -dnl releases. Edit is bumped with each release and set to 0 with -dnl change to major or minor version. -dnl - -EXPAT_MAJOR_VERSION=1 -EXPAT_MINOR_VERSION=95 -EXPAT_EDIT=1 - -EXPAT_VERSION=$EXPAT_MAJOR_VERSION.$EXPAT_MINOR_VERSION.$EXPAT_EDIT -VERSION=$EXPAT_VERSION -PACKAGE=expat - -dnl -dnl Increment LIBREVISION if source code has changed at all -dnl -dnl If the API has changed, increment LIBCURRENT and set LIBREVISION to 0 -dnl -dnl If the API changes compatibly (i.e. simply adding a new function -dnl without changing or removing earlier interfaces), then increment LIBAGE. -dnl -dnl If the API changes incompatibly set LIBAGE back to 0 -dnl - -LIBCURRENT=0 -LIBREVISION=1 -LIBAGE=0 - -AC_CONFIG_HEADER(config.h:config.hin) - -AC_LIBTOOL_WIN32_DLL -AC_PROG_LIBTOOL - -AC_SUBST(PACKAGE) -AC_SUBST(VERSION) - -AC_SUBST(LIBCURRENT) -AC_SUBST(LIBREVISION) -AC_SUBST(LIBAGE) - -dnl Checks for programs. -AC_PROG_CC -AC_PROG_INSTALL - -dnl Checks for libraries. - -dnl Checks for header files. -AC_HEADER_STDC -AC_CHECK_HEADERS(fcntl.h unistd.h) - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_BIGENDIAN -AC_C_CONST -AC_TYPE_OFF_T -AC_TYPE_SIZE_T - -dnl Checks for library functions. - -AC_FUNC_MEMCMP -AC_FUNC_MMAP -AC_SUBST(FILEMAP_OBJ) -if test -z "$HAVE_MMAP"; then -FILEMAP_OBJ=unixfilemap.o -else -FILEMAP_OBJ=readfilemap.o -fi - -AC_CHECK_FUNCS(memmove bcopy) - -AC_OUTPUT(Makefile lib/Makefile xmlwf/Makefile examples/Makefile) diff --git a/Build/source/libs/expat/conftools/config.guess b/Build/source/libs/expat/conftools/config.guess deleted file mode 100644 index e792aac6080..00000000000 --- a/Build/source/libs/expat/conftools/config.guess +++ /dev/null @@ -1,1494 +0,0 @@ -#! /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 -# Free Software Foundation, Inc. - -timestamp='2009-09-18' - -# 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 -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# 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. -# -# 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. -# -# 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 - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -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 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." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -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 - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:[3456]*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - EM64T | authenticamd | genuineintel) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`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 - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - 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} - 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 - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-gnu - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - 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 ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - 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 - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - 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 < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/Build/source/libs/expat/conftools/config.sub b/Build/source/libs/expat/conftools/config.sub deleted file mode 100644 index 5ecc18b6ada..00000000000 --- a/Build/source/libs/expat/conftools/config.sub +++ /dev/null @@ -1,1700 +0,0 @@ -#! /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 -# Free Software Foundation, Inc. - -timestamp='2009-10-07' - -# 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 -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# 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. - - -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -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 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." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -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) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | 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 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nios | nios2 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12 | picochip) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ - | tron-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze) - basic_machine=microblaze-xilinx - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - tile*) - basic_machine=tile-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -kopensolaris* \ - | -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* \ - | -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* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/Build/source/libs/expat/conftools/install-sh b/Build/source/libs/expat/conftools/install-sh deleted file mode 100644 index 6781b987bdb..00000000000 --- a/Build/source/libs/expat/conftools/install-sh +++ /dev/null @@ -1,520 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2009-04-28.21; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# 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 -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -no_target_directory= - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - 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. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - -*) prefix='./';; - *) prefix='';; - esac - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob set +f - IFS=$oIFS - - prefixes= - - for d - do - test -z "$d" && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# 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/Build/source/libs/expat/conftools/ltconfig b/Build/source/libs/expat/conftools/ltconfig deleted file mode 100644 index c14d83c1697..00000000000 --- a/Build/source/libs/expat/conftools/ltconfig +++ /dev/null @@ -1,3114 +0,0 @@ -#! /bin/sh - -# ltconfig - Create a system-specific libtool. -# Copyright (C) 1996-1999 Free Software Foundation, Inc. -# Originally by Gordon Matzigkeit , 1996 -# -# 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 -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# 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. - -# A lot of this script is taken from autoconf-2.10. - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} -echo=echo -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec "$SHELL" "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null`} - case X$UNAME in - *-DOS) PATH_SEPARATOR=';' ;; - *) PATH_SEPARATOR=':' ;; - esac -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi - -if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string="`eval $cmd`") 2>/dev/null && - echo_test_string="`eval $cmd`" && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" != 'X\t' || - test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" - for dir in $PATH /usr/ucb; do - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running ltconfig again with it. - ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}" - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - echo='printf "%s\n"' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then - # Cool, printf works - : - elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' && - test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then - CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL" - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL $0 --fallback-echo" - elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' && - test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then - echo="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e s/^X//' -sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# The name of this program. -progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'` - -# Constants: -PROGRAM=ltconfig -PACKAGE=libtool -VERSION=1.3.5 -TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)" -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -rm="rm -f" - -help="Try \`$progname --help' for more information." - -# Global variables: -default_ofile=libtool -can_build_shared=yes -enable_shared=yes -# All known linkers require a `.a' archive for static linking (except M$VC, -# which needs '.lib'). -enable_static=yes -enable_fast_install=yes -enable_dlopen=unknown -enable_win32_dll=no -ltmain= -silent= -srcdir= -ac_config_guess= -ac_config_sub= -host= -nonopt= -ofile="$default_ofile" -verify_host=yes -with_gcc=no -with_gnu_ld=no -need_locks=yes -ac_ext=c -objext=o -libext=a -exeext= -cache_file= - -old_AR="$AR" -old_CC="$CC" -old_CFLAGS="$CFLAGS" -old_CPPFLAGS="$CPPFLAGS" -old_LDFLAGS="$LDFLAGS" -old_LD="$LD" -old_LN_S="$LN_S" -old_LIBS="$LIBS" -old_NM="$NM" -old_RANLIB="$RANLIB" -old_DLLTOOL="$DLLTOOL" -old_OBJDUMP="$OBJDUMP" -old_AS="$AS" - -# Parse the command line options. -args= -prev= -for option -do - case "$option" in - -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - eval "$prev=\$option" - prev= - continue - fi - - case "$option" in - --help) cat <&2 - echo "$help" 1>&2 - exit 1 - ;; - - *) - if test -z "$ltmain"; then - ltmain="$option" - elif test -z "$host"; then -# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1 -# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then -# echo "$progname: warning \`$option' is not a valid host type" 1>&2 -# fi - host="$option" - else - echo "$progname: too many arguments" 1>&2 - echo "$help" 1>&2 - exit 1 - fi ;; - esac -done - -if test -z "$ltmain"; then - echo "$progname: you must specify a LTMAIN file" 1>&2 - echo "$help" 1>&2 - exit 1 -fi - -if test ! -f "$ltmain"; then - echo "$progname: \`$ltmain' does not exist" 1>&2 - echo "$help" 1>&2 - exit 1 -fi - -# Quote any args containing shell metacharacters. -ltconfig_args= -for arg -do - case "$arg" in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ltconfig_args="$ltconfig_args '$arg'" ;; - *) ltconfig_args="$ltconfig_args $arg" ;; - esac -done - -# A relevant subset of AC_INIT. - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 5 compiler messages saved in config.log -# 6 checking for... messages and results -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>>./config.log - -# NLS nuisances. -# Only set LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi -if test "X${LANG+set}" = Xset; then LANG=C; export LANG; fi - -if test -n "$cache_file" && test -r "$cache_file"; then - echo "loading cache $cache_file within ltconfig" - . $cache_file -fi - -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi - -if test -z "$srcdir"; then - # Assume the source directory is the same one as the path to LTMAIN. - srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'` - test "$srcdir" = "$ltmain" && srcdir=. -fi - -trap "$rm conftest*; exit 1" 1 2 15 -if test "$verify_host" = yes; then - # Check for config.guess and config.sub. - ac_aux_dir= - for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/config.guess; then - ac_aux_dir=$ac_dir - break - fi - done - if test -z "$ac_aux_dir"; then - echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2 - echo "$help" 1>&2 - exit 1 - fi - ac_config_guess=$ac_aux_dir/config.guess - ac_config_sub=$ac_aux_dir/config.sub - - # Make sure we can run config.sub. - if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then : - else - echo "$progname: cannot run $ac_config_sub" 1>&2 - echo "$help" 1>&2 - exit 1 - fi - - echo $ac_n "checking host system type""... $ac_c" 1>&6 - - host_alias=$host - case "$host_alias" in - "") - if host_alias=`$SHELL $ac_config_guess`; then : - else - echo "$progname: cannot guess host type; you must specify one" 1>&2 - echo "$help" 1>&2 - exit 1 - fi ;; - esac - host=`$SHELL $ac_config_sub $host_alias` - echo "$ac_t$host" 1>&6 - - # Make sure the host verified. - test -z "$host" && exit 1 - -elif test -z "$host"; then - echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2 - echo "$help" 1>&2 - exit 1 -else - host_alias=$host -fi - -# Transform linux* to *-*-linux-gnu*, to support old configure scripts. -case "$host_os" in -linux-gnu*) ;; -linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` -esac - -host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - -case "$host_os" in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR cru $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -# Set a sane default for `AR'. -test -z "$AR" && AR=ar - -# Set a sane default for `OBJDUMP'. -test -z "$OBJDUMP" && OBJDUMP=objdump - -# If RANLIB is not set, then run the test. -if test "${RANLIB+set}" != "set"; then - result=no - - echo $ac_n "checking for ranlib... $ac_c" 1>&6 - IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" - for dir in $PATH; do - test -z "$dir" && dir=. - if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then - RANLIB="ranlib" - result="ranlib" - break - fi - done - IFS="$save_ifs" - - echo "$ac_t$result" 1>&6 -fi - -if test -n "$RANLIB"; then - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" - old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" -fi - -# Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin. -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$AS" && AS=as - -# Check to see if we are using GCC. -if test "$with_gcc" != yes || test -z "$CC"; then - # If CC is not set, then try to find GCC or a usable CC. - if test -z "$CC"; then - echo $ac_n "checking for gcc... $ac_c" 1>&6 - IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" - for dir in $PATH; do - test -z "$dir" && dir=. - if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then - CC="gcc" - break - fi - done - IFS="$save_ifs" - - if test -n "$CC"; then - echo "$ac_t$CC" 1>&6 - else - echo "$ac_t"no 1>&6 - fi - fi - - # Not "gcc", so try "cc", rejecting "/usr/ucb/cc". - if test -z "$CC"; then - echo $ac_n "checking for cc... $ac_c" 1>&6 - IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" - cc_rejected=no - for dir in $PATH; do - test -z "$dir" && dir=. - if test -f $dir/cc || test -f $dir/cc$ac_exeext; then - if test "$dir/cc" = "/usr/ucb/cc"; then - cc_rejected=yes - continue - fi - CC="cc" - break - fi - done - IFS="$save_ifs" - if test $cc_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $CC - shift - if test $# -gt 0; then - # We chose a different compiler from the bogus one. - # However, it has the same name, so the bogon will be chosen - # first if we set CC to just the name; use the full file name. - shift - set dummy "$dir/cc" "$@" - shift - CC="$@" - fi - fi - - if test -n "$CC"; then - echo "$ac_t$CC" 1>&6 - else - echo "$ac_t"no 1>&6 - fi - - if test -z "$CC"; then - echo "$progname: error: no acceptable cc found in \$PATH" 1>&2 - exit 1 - fi - fi - - # Now see if the compiler is really GCC. - with_gcc=no - echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6 - echo "$progname:581: checking whether we are using GNU C" >&5 - - $rm conftest.c - cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - with_gcc=yes - fi - $rm conftest.c - echo "$ac_t$with_gcc" 1>&6 -fi - -# Allow CC to be a program name with arguments. -set dummy $CC -compiler="$2" - -echo $ac_n "checking for object suffix... $ac_c" 1>&6 -$rm conftest* -echo 'int i = 1;' > conftest.c -echo "$progname:603: checking for object suffix" >& 5 -if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then - # Append any warnings to the config.log. - cat conftest.err 1>&5 - - for ac_file in conftest.*; do - case $ac_file in - *.c) ;; - *) objext=`echo $ac_file | sed -e s/conftest.//` ;; - esac - done -else - cat conftest.err 1>&5 - echo "$progname: failed program was:" >&5 - cat conftest.c >&5 -fi -$rm conftest* -echo "$ac_t$objext" 1>&6 - -echo $ac_n "checking for executable suffix... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_cv_exeext="no" - $rm conftest* - echo 'main () { return 0; }' > conftest.c - echo "$progname:629: checking for executable suffix" >& 5 - if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then - # Append any warnings to the config.log. - cat conftest.err 1>&5 - - for ac_file in conftest.*; do - case $ac_file in - *.c | *.err | *.$objext ) ;; - *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;; - esac - done - else - cat conftest.err 1>&5 - echo "$progname: failed program was:" >&5 - cat conftest.c >&5 - fi - $rm conftest* -fi -if test "X$ac_cv_exeext" = Xno; then - exeext="" -else - exeext="$ac_cv_exeext" -fi -echo "$ac_t$ac_cv_exeext" 1>&6 - -echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6 -pic_flag= -special_shlib_compile_flags= -wl= -link_static_flag= -no_builtin_flag= - -if test "$with_gcc" = yes; then - wl='-Wl,' - link_static_flag='-static' - - case "$host_os" in - beos* | irix5* | irix6* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - aix*) - # Below there is a dirty hack to force normal static linking with -ldl - # The problem is because libdl dynamically linked with both libc and - # libC (AIX C++ library), which obviously doesn't included in libraries - # list by gcc. This cause undefined symbols with -static flags. - # This hack allows C programs to be linked with "-static -ldl", but - # we not sure about C++ programs. - link_static_flag="$link_static_flag ${wl}-lC" - ;; - cygwin* | mingw* | os2*) - # We can build DLLs from non-PIC. - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - pic_flag='-m68020 -resident32 -malways-restore-a4' - ;; - sysv4*MP*) - if test -d /usr/nec; then - pic_flag=-Kconform_pic - fi - ;; - *) - pic_flag='-fPIC' - ;; - esac -else - # PORTME Check for PIC flags for the system compiler. - case "$host_os" in - aix3* | aix4*) - # All AIX code is PIC. - link_static_flag='-bnso -bI:/lib/syscalls.exp' - ;; - - hpux9* | hpux10* | hpux11*) - # Is there a better link_static_flag that works with the bundled CC? - wl='-Wl,' - link_static_flag="${wl}-a ${wl}archive" - pic_flag='+Z' - ;; - - irix5* | irix6*) - wl='-Wl,' - link_static_flag='-non_shared' - # PIC (with -KPIC) is the default. - ;; - - cygwin* | mingw* | os2*) - # We can build DLLs from non-PIC. - ;; - - osf3* | osf4* | osf5*) - # All OSF/1 code is PIC. - wl='-Wl,' - link_static_flag='-non_shared' - ;; - - sco3.2v5*) - pic_flag='-Kpic' - link_static_flag='-dn' - special_shlib_compile_flags='-belf' - ;; - - solaris*) - pic_flag='-KPIC' - link_static_flag='-Bstatic' - wl='-Wl,' - ;; - - sunos4*) - pic_flag='-PIC' - link_static_flag='-Bstatic' - wl='-Qoption ld ' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - pic_flag='-KPIC' - link_static_flag='-Bstatic' - wl='-Wl,' - ;; - - uts4*) - pic_flag='-pic' - link_static_flag='-Bstatic' - ;; - sysv4*MP*) - if test -d /usr/nec ;then - pic_flag='-Kconform_pic' - link_static_flag='-Bstatic' - fi - ;; - *) - can_build_shared=no - ;; - esac -fi - -if test -n "$pic_flag"; then - echo "$ac_t$pic_flag" 1>&6 - - # Check to make sure the pic_flag actually works. - echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6 - $rm conftest* - echo "int some_variable = 0;" > conftest.c - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $pic_flag -DPIC" - echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5 - if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then - # Append any warnings to the config.log. - cat conftest.err 1>&5 - - case "$host_os" in - hpux9* | hpux10* | hpux11*) - # On HP-UX, both CC and GCC only warn that PIC is supported... then they - # create non-PIC objects. So, if there were any warnings, we assume that - # PIC is not supported. - if test -s conftest.err; then - echo "$ac_t"no 1>&6 - can_build_shared=no - pic_flag= - else - echo "$ac_t"yes 1>&6 - pic_flag=" $pic_flag" - fi - ;; - *) - echo "$ac_t"yes 1>&6 - pic_flag=" $pic_flag" - ;; - esac - else - # Append any errors to the config.log. - cat conftest.err 1>&5 - can_build_shared=no - pic_flag= - echo "$ac_t"no 1>&6 - fi - CFLAGS="$save_CFLAGS" - $rm conftest* -else - echo "$ac_t"none 1>&6 -fi - -# Check to see if options -o and -c are simultaneously supported by compiler -echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6 -$rm -r conftest 2>/dev/null -mkdir conftest -cd conftest -$rm conftest* -echo "int some_variable = 0;" > conftest.c -mkdir out -# According to Tom Tromey, Ian Lance Taylor reported there are C compilers -# that will create temporary files in the current directory regardless of -# the output directory. Thus, making CWD read-only will cause this test -# to fail, enabling locking or at least warning the user not to do parallel -# builds. -chmod -w . -save_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -o out/conftest2.o" -echo "$progname:829: checking if $compiler supports -c -o file.o" >&5 -if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then - - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s out/conftest.err; then - echo "$ac_t"no 1>&6 - compiler_c_o=no - else - echo "$ac_t"yes 1>&6 - compiler_c_o=yes - fi -else - # Append any errors to the config.log. - cat out/conftest.err 1>&5 - compiler_c_o=no - echo "$ac_t"no 1>&6 -fi -CFLAGS="$save_CFLAGS" -chmod u+w . -$rm conftest* out/* -rmdir out -cd .. -rmdir conftest -$rm -r conftest 2>/dev/null - -if test x"$compiler_c_o" = x"yes"; then - # Check to see if we can write to a .lo - echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6 - $rm conftest* - echo "int some_variable = 0;" > conftest.c - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -c -o conftest.lo" - echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5 -if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then - - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - echo "$ac_t"no 1>&6 - compiler_o_lo=no - else - echo "$ac_t"yes 1>&6 - compiler_o_lo=yes - fi - else - # Append any errors to the config.log. - cat conftest.err 1>&5 - compiler_o_lo=no - echo "$ac_t"no 1>&6 - fi - CFLAGS="$save_CFLAGS" - $rm conftest* -else - compiler_o_lo=no -fi - -# Check to see if we can do hard links to lock some files if needed -hard_links="nottested" -if test "$compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6 - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$ac_t$hard_links" 1>&6 - $rm conftest* - if test "$hard_links" = no; then - echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2 - need_locks=warn - fi -else - need_locks=no -fi - -if test "$with_gcc" = yes; then - # Check to see if options -fno-rtti -fno-exceptions are supported by compiler - echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6 - $rm conftest* - echo "int some_variable = 0;" > conftest.c - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c" - echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 - if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then - - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - echo "$ac_t"no 1>&6 - compiler_rtti_exceptions=no - else - echo "$ac_t"yes 1>&6 - compiler_rtti_exceptions=yes - fi - else - # Append any errors to the config.log. - cat conftest.err 1>&5 - compiler_rtti_exceptions=no - echo "$ac_t"no 1>&6 - fi - CFLAGS="$save_CFLAGS" - $rm conftest* - - if test "$compiler_rtti_exceptions" = "yes"; then - no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' - else - no_builtin_flag=' -fno-builtin' - fi - -fi - -# Check for any special shared library compilation flags. -if test -n "$special_shlib_compile_flags"; then - echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2 - if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then : - else - echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2 - can_build_shared=no - fi -fi - -echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6 -$rm conftest* -echo 'main(){return(0);}' > conftest.c -save_LDFLAGS="$LDFLAGS" -LDFLAGS="$LDFLAGS $link_static_flag" -echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5 -if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - echo "$ac_t$link_static_flag" 1>&6 -else - echo "$ac_t"none 1>&6 - link_static_flag= -fi -LDFLAGS="$save_LDFLAGS" -$rm conftest* - -if test -z "$LN_S"; then - # Check to see if we can use ln -s, or we need hard links. - echo $ac_n "checking whether ln -s works... $ac_c" 1>&6 - $rm conftest.dat - if ln -s X conftest.dat 2>/dev/null; then - $rm conftest.dat - LN_S="ln -s" - else - LN_S=ln - fi - if test "$LN_S" = "ln -s"; then - echo "$ac_t"yes 1>&6 - else - echo "$ac_t"no 1>&6 - fi -fi - -# Make sure LD is an absolute path. -if test -z "$LD"; then - ac_prog=ld - if test "$with_gcc" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6 - echo "$progname:991: checking for ld used by GCC" >&5 - ac_prog=`($CC -print-prog-name=ld) 2>&5` - case "$ac_prog" in - # Accept absolute paths. - [\\/]* | [A-Za-z]:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the path of ld - ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we are not using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac - elif test "$with_gnu_ld" = yes; then - echo $ac_n "checking for GNU ld... $ac_c" 1>&6 - echo "$progname:1015: checking for GNU ld" >&5 - else - echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 - echo "$progname:1018: checking for non-GNU ld" >&5 - fi - - if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then - test "$with_gnu_ld" != no && break - else - test "$with_gnu_ld" != yes && break - fi - fi - done - IFS="$ac_save_ifs" - fi - - if test -n "$LD"; then - echo "$ac_t$LD" 1>&6 - else - echo "$ac_t"no 1>&6 - fi - - if test -z "$LD"; then - echo "$progname: error: no acceptable ld found in \$PATH" 1>&2 - exit 1 - fi -fi - -# Check to see if it really is or is not GNU ld. -echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6 -# I'd rather use --version here, but apparently some GNU ld's only accept -v. -if $LD -v 2>&1 &5; then - with_gnu_ld=yes -else - with_gnu_ld=no -fi -echo "$ac_t$with_gnu_ld" 1>&6 - -# See if the linker supports building shared libraries. -echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6 - -allow_undefined_flag= -no_undefined_flag= -need_lib_prefix=unknown -need_version=unknown -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -archive_cmds= -archive_expsym_cmds= -old_archive_from_new_cmds= -export_dynamic_flag_spec= -whole_archive_flag_spec= -thread_safe_flag_spec= -hardcode_libdir_flag_spec= -hardcode_libdir_separator= -hardcode_direct=no -hardcode_minus_L=no -hardcode_shlibpath_var=unsupported -runpath_var= -always_export_symbols=no -export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' -# include_expsyms should be a list of space-separated symbols to be *always* -# included in the symbol list -include_expsyms= -# exclude_expsyms can be an egrep regular expression of symbols to exclude -# it will be wrapped by ` (' and `)$', so one must not match beginning or -# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', -# as well as any symbol that contains `d'. -exclude_expsyms="_GLOBAL_OFFSET_TABLE_" -# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out -# platforms (ab)use it in PIC code, but their linkers get confused if -# the symbol is explicitly referenced. Since portable code cannot -# rely on this symbol name, it's probably fine to never include it in -# preloaded symbol tables. - -case "$host_os" in -cygwin* | mingw*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$with_gcc" != yes; then - with_gnu_ld=no - fi - ;; - -esac - -ld_shlibs=yes -if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # See if GNU ld supports shared libraries. - case "$host_os" in - aix3* | aix4*) - # On AIX, the GNU linker is very broken - ld_shlibs=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - ;; - - amigaos*) - archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can use - # them. - ld_shlibs=no - ;; - - beos*) - if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw*) - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=yes - - # Extract the symbol export list from an `--export-all' def file, - # then regenerate the def file from the symbol export list, so that - # the compiled dll only exports the symbol export list. - # Be careful not to strip the DATA tag left by newer dlltools. - export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~ - test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~ - $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def $objdir/$soname-ltdll.$objext $libobjs $convenience~ - sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $objdir/$soname-def > $export_symbols' - - # If DATA tags from a recent dlltool are present, honour them! - archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~ - _lt_hint=1; - cat $export_symbols | while read symbol; do - set dummy \$symbol; - case \$# in - 2) echo " \$2 @ \$_lt_hint ; " >> $objdir/$soname-def;; - *) echo " \$2 @ \$_lt_hint \$3 ; " >> $objdir/$soname-def;; - esac; - _lt_hint=`expr 1 + \$_lt_hint`; - done~ - test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~ - test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~ - $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~ - $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~ - $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~ - $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~ - $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts' - - old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a' - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib' - # can we support soname and/or expsyms with a.out? -oliva - fi - ;; - - solaris* | sysv5*) - if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = yes; then - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - case $host_os in - cygwin* | mingw*) - # dlltool doesn't understand --whole-archive et. al. - whole_archive_flag_spec= - ;; - *) - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - ;; - esac - fi -else - # PORTME fill in a description of your system's linker (not GNU ld) - case "$host_os" in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$with_gcc" = yes && test -z "$link_static_flag"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix4*) - hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib' - hardcode_libdir_separator=':' - if test "$with_gcc" = yes; then - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct=yes - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - shared_flag='-shared' - else - shared_flag='${wl}-bM:SRE' - hardcode_direct=yes - fi - allow_undefined_flag=' ${wl}-berok' - archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}' - archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}' - case "$host_os" in aix4.[01]|aix4.[01].*) - # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on - always_export_symbols=yes ;; - esac - ;; - - amigaos*) - archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # see comment about different semantics on the GNU ld section - ld_shlibs=no - ;; - - cygwin* | mingw*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib /OUT:$oldlib$oldobjs' - fix_srcfile_path='`cygpath -w $srcfile`' - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9* | hpux10* | hpux11*) - case "$host_os" in - hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;; - *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;; - esac - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_minus_L=yes # Not in the search PATH, but as the default - # location of the library. - export_dynamic_flag_spec='${wl}-E' - ;; - - irix5* | irix6*) - if test "$with_gcc" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' - else - archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts' # ELF - fi - hardcode_libdir_flag_spec='${wl}-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - openbsd*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def' - ;; - - osf3*) - if test "$with_gcc" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # As osf3* with the addition of the -msym flag - if test "$with_gcc" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - rhapsody*) - archive_cmds='$CC -bundle -undefined suppress -o $lib $libobjs $deplibs $linkopts' - hardcode_libdir_flags_spec='-L$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - sco3.2v5*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ;; - - solaris*) - no_undefined_flag=' -z text' - # $CC -shared without GNU ld will not create a library from C++ - # object files and a static libstdc++, better avoid it by now - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case "$host_os" in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $linkopts' - else - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' - fi - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv5*) - no_undefined_flag=' -z text' - # $CC -shared without GNU ld will not create a library from C++ - # object files and a static libstdc++, better avoid it by now - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp' - hardcode_libdir_flag_spec= - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4.2uw2*) - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts' - hardcode_direct=yes - hardcode_minus_L=no - hardcode_shlibpath_var=no - hardcode_runpath_var=yes - runpath_var=LD_RUN_PATH - ;; - - unixware7*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac -fi -echo "$ac_t$ld_shlibs" 1>&6 -test "$ld_shlibs" = no && can_build_shared=no - -if test -z "$NM"; then - echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6 - case "$NM" in - [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path. - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" - for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - NM="$ac_dir/nm -B" - break - elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - NM="$ac_dir/nm -p" - break - else - NM=${NM="$ac_dir/nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - fi - fi - done - IFS="$ac_save_ifs" - test -z "$NM" && NM=nm - ;; - esac - echo "$ac_t$NM" 1>&6 -fi - -# Check for command to grab the raw symbol name followed by C symbol from nm. -echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6 - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Transform the above into a raw symbol and a C symbol. -symxfrm='\1 \2\3 \3' - -# Transform an extracted symbol line into a proper C declaration -global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" - -# Define system-specific variables. -case "$host_os" in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw*) - symcode='[ABCDGISTW]' - ;; -hpux*) # Its linker distinguishes data from code symbols - global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'" - ;; -irix*) - symcode='[BCDEGRST]' - ;; -solaris*) - symcode='[BDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then - symcode='[ABCDGISTW]' -fi - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Write the raw and C identifiers. - global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode\)[ ][ ]*\($ac_symprfx\)$sympat$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - $rm conftest* - cat > conftest.c <&5 - if { (eval echo $progname:1654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then - # Now try to grab the symbols. - nlist=conftest.nm - if { echo "$progname:1657: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then - - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if egrep ' nm_test_var$' "$nlist" >/dev/null; then - if egrep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.c -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c' - - cat <> conftest.c -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[] = -{ -EOF - sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c - cat <<\EOF >> conftest.c - {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$objext conftstm.$objext - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="conftstm.$objext" - CFLAGS="$CFLAGS$no_builtin_flag" - if { (eval echo $progname:1709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - pipe_works=yes - else - echo "$progname: failed program was:" >&5 - cat conftest.c >&5 - fi - LIBS="$save_LIBS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.c >&5 - fi - $rm conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - global_symbol_pipe= - fi -done -if test "$pipe_works" = yes; then - echo "${ac_t}ok" 1>&6 -else - echo "${ac_t}failed" 1>&6 -fi - -if test -z "$global_symbol_pipe"; then - global_symbol_to_cdecl= -fi - -# Check hardcoding attributes. -echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6 -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || \ - test -n "$runpath_var"; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$hardcode_shlibpath_var" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -echo "$ac_t$hardcode_action" 1>&6 - - -reload_flag= -reload_cmds='$LD$reload_flag -o $output$reload_objs' -echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6 -# PORTME Some linkers may need a different reload flag. -reload_flag='-r' -echo "$ac_t$reload_flag" 1>&6 -test -n "$reload_flag" && reload_flag=" $reload_flag" - -# PORTME Fill in your ld.so characteristics -library_names_spec= -libname_spec='lib$name' -soname_spec= -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -file_magic_cmd= -file_magic_test_file= -deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [regex]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given egrep regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. -echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6 -case "$host_os" in -aix3*) - version_type=linux - library_names_spec='${libname}${release}.so$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}.so$major' - ;; - -aix4*) - version_type=linux - # AIX has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - # We preserve .a as extension for shared libraries though AIX4.2 - # and later linker supports .so - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a' - shlibpath_var=LIBPATH - deplibs_check_method=pass_all - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}.so' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - deplibs_check_method=pass_all - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - -bsdi4*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - file_magic_cmd=/usr/bin/file - file_magic_test_file=/shlib/libc.so - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - export_dynamic_flag_spec=-rdynamic - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw*) - version_type=windows - need_version=no - need_lib_prefix=no - if test "$with_gcc" = yes; then - library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a' - else - library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib' - fi - dynamic_linker='Win32 ld.exe' - deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - file_magic_cmd='${OBJDUMP} -f' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd*) - objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` - version_type=freebsd-$objformat - case "$version_type" in - freebsd-elf*) - deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' - file_magic_cmd=/usr/bin/file - file_magic_test_file=`echo /usr/lib/libc.so*` - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - deplibs_check_method=unknown - library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case "$host_os" in - freebsd2* | freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - ;; - *) # from 3.2 on - shlibpath_overrides_runpath=no - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - dynamic_linker="$host_os dld.sl" - version_type=sunos - need_lib_prefix=no - need_version=no - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' - soname_spec='${libname}${release}.sl$major' - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - case "$host_os" in - hpux10.20*) - # TODO: Does this work for hpux-11 too? - deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - file_magic_cmd=/usr/bin/file - file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -irix5* | irix6*) - version_type=irix - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}.so.$major' - library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so' - case "$host_os" in - irix5*) - libsuff= shlibsuff= - # this will be overridden with pass_all, but let us keep it just in case - deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" - ;; - *) - case "$LD" in # libtool.m4 will add one of these switches to LD - *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - file_magic_cmd=/usr/bin/file - file_magic_test_file=`echo /lib${libsuff}/libc.so*` - deplibs_check_method='pass_all' - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux-gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - deplibs_check_method=pass_all - - if test -f /lib/ld.so.1; then - dynamic_linker='GNU ld.so' - else - # Only the GNU ld.so supports shared libraries on MkLinux. - case "$host_cpu" in - powerpc*) dynamic_linker=no ;; - *) dynamic_linker='Linux ld.so' ;; - esac - fi - ;; - -netbsd*) - version_type=sunos - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' - soname_spec='${libname}${release}.so$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - ;; - -openbsd*) - version_type=sunos - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - need_version=no - fi - library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - ;; - -os2*) - libname_spec='$name' - need_lib_prefix=no - library_names_spec='$libname.dll $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_version=no - soname_spec='${libname}${release}.so' - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' - shlibpath_var=LD_LIBRARY_PATH - # this will be overridden with pass_all, but let us keep it just in case - deplibs_check_method='file_magic COFF format alpha shared library' - file_magic_cmd=/usr/bin/file - file_magic_test_file=/shlib/libc.so - deplibs_check_method='pass_all' - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rhapsody*) - version_type=sunos - library_names_spec='${libname}.so' - soname_spec='${libname}.so' - shlibpath_var=DYLD_LIBRARY_PATH - deplibs_check_method=pass_all - ;; - -sco3.2v5*) - version_type=osf - soname_spec='${libname}${release}.so$major' - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - shlibpath_var=LD_LIBRARY_PATH - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib" - file_magic_cmd=/usr/bin/file - file_magic_test_file=/lib/libc.so - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - version_type=linux - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - case "$host_vendor" in - sequent) - file_magic_cmd='/bin/file' - deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - ncr) - deplibs_check_method='pass_all' - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - file_magic_cmd=/usr/bin/file - file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - esac - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' - soname_spec='$libname.so.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -*) - dynamic_linker=no - ;; -esac -echo "$ac_t$dynamic_linker" 1>&6 -test "$dynamic_linker" = no && can_build_shared=no - -# Report the final consequences. -echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6 - -# Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in -# configure.in, otherwise build static only libraries. -case "$host_os" in -cygwin* | mingw* | os2*) - if test x$can_build_shared = xyes; then - test x$enable_win32_dll = xno && can_build_shared=no - echo "checking if package supports dlls... $can_build_shared" 1>&6 - fi -;; -esac - -if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then - case "$deplibs_check_method" in - "file_magic "*) - file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - egrep "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -EOF - fi ;; - esac -fi - -echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6 -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case "$host_os" in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix4*) - test "$enable_shared" = yes && enable_static=no - ;; -esac - -echo "$ac_t$enable_shared" 1>&6 - -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes - -echo "checking whether to build static libraries... $enable_static" 1>&6 - -if test "$hardcode_action" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - -echo $ac_n "checking for objdir... $ac_c" 1>&6 -rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - objdir=_libs -fi -rmdir .libs 2>/dev/null -echo "$ac_t$objdir" 1>&6 - -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else -if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then - lt_cv_dlopen=no lt_cv_dlopen_libs= -echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "$progname:2248: checking for dlopen in -ldl" >&5 -ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-ldl $LIBS" -cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - echo "$ac_t""no" 1>&6 -echo $ac_n "checking for dlopen""... $ac_c" 1>&6 -echo "$progname:2288: checking for dlopen" >&5 -if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_dlopen) || defined (__stub___dlopen) -choke me -#else -dlopen(); -#endif - -; return 0; } -EOF -if { (eval echo $progname:2318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_dlopen=yes" -else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_dlopen=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then - echo "$ac_t""yes" 1>&6 - lt_cv_dlopen="dlopen" -else - echo "$ac_t""no" 1>&6 -echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6 -echo "$progname:2335: checking for dld_link in -ldld" >&5 -ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-ldld $LIBS" -cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -else - echo "$ac_t""no" 1>&6 -echo $ac_n "checking for shl_load""... $ac_c" 1>&6 -echo "$progname:2375: checking for shl_load" >&5 -if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_shl_load) || defined (__stub___shl_load) -choke me -#else -shl_load(); -#endif - -; return 0; } -EOF -if { (eval echo $progname:2405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_shl_load=yes" -else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_shl_load=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then - echo "$ac_t""yes" 1>&6 - lt_cv_dlopen="shl_load" -else - echo "$ac_t""no" 1>&6 -echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 -echo "$progname:2423: checking for shl_load in -ldld" >&5 -ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-ldld $LIBS" -cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - echo "$ac_t""no" 1>&6 -fi - - -fi - - -fi - - -fi - - -fi - -fi - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - fi - - case "$lt_cv_dlopen" in - dlopen) -for ac_hdr in dlfcn.h; do -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "$progname:2488: checking for $ac_hdr" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -int fnord = 0; -EOF -ac_try="$ac_compile >/dev/null 2>conftest.out" -{ (eval echo $progname:2498: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi -done - - if test "x$ac_cv_header_dlfcn_h" = xyes; then - CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - fi - eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - LIBS="$lt_cv_dlopen_libs $LIBS" - - echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6 -echo "$progname:2526: checking whether a program can dlopen itself" >&5 -if test "${lt_cv_dlopen_self+set}" = set; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - lt_cv_dlopen_self=cross - else - cat > conftest.c < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LTDL_GLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LTDL_GLOBAL DL_GLOBAL -# else -# define LTDL_GLOBAL 0 -# endif -#endif - -/* We may have to define LTDL_LAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LTDL_LAZY_OR_NOW -# ifdef RTLD_LAZY -# define LTDL_LAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LTDL_LAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LTDL_LAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LTDL_LAZY_OR_NOW DL_NOW -# else -# define LTDL_LAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -fnord() { int i=42;} -main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); - if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); - if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } - -EOF -if { (eval echo $progname:2580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null -then - lt_cv_dlopen_self=yes -else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - lt_cv_dlopen_self=no -fi -rm -fr conftest* -fi - -fi - -echo "$ac_t""$lt_cv_dlopen_self" 1>&6 - - if test "$lt_cv_dlopen_self" = yes; then - LDFLAGS="$LDFLAGS $link_static_flag" - echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6 -echo "$progname:2599: checking whether a statically linked program can dlopen itself" >&5 -if test "${lt_cv_dlopen_self_static+set}" = set; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - lt_cv_dlopen_self_static=cross - else - cat > conftest.c < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LTDL_GLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LTDL_GLOBAL DL_GLOBAL -# else -# define LTDL_GLOBAL 0 -# endif -#endif - -/* We may have to define LTDL_LAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LTDL_LAZY_OR_NOW -# ifdef RTLD_LAZY -# define LTDL_LAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LTDL_LAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LTDL_LAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LTDL_LAZY_OR_NOW DL_NOW -# else -# define LTDL_LAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -fnord() { int i=42;} -main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); - if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); - if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } - -EOF -if { (eval echo $progname:2653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null -then - lt_cv_dlopen_self_static=yes -else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - lt_cv_dlopen_self_static=no -fi -rm -fr conftest* -fi - -fi - -echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6 -fi - ;; - esac - - case "$lt_cv_dlopen_self" in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case "$lt_cv_dlopen_self_static" in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - -# Copy echo and quote the copy, instead of the original, because it is -# used later. -ltecho="$echo" -if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then - ltecho="$CONFIG_SHELL \$0 --fallback-echo" -fi -LTSHELL="$SHELL" - -LTCONFIG_VERSION="$VERSION" - -# Only quote variables if we're using ltmain.sh. -case "$ltmain" in -*.sh) - # Now quote all the things that may contain metacharacters. - for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \ - old_LD old_LDFLAGS old_LIBS \ - old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \ - AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \ - reload_flag reload_cmds wl \ - pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ - thread_safe_flag_spec whole_archive_flag_spec libname_spec \ - library_names_spec soname_spec \ - RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ - old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \ - file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \ - finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ - hardcode_libdir_flag_spec hardcode_libdir_separator \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do - - case "$var" in - reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case "$ltecho" in - *'\$0 --fallback-echo"') - ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - - trap "$rm \"$ofile\"; exit 1" 1 2 15 - echo "creating $ofile" - $rm "$ofile" - cat < "$ofile" -#! $SHELL - -# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh. -# -# Copyright (C) 1996-1999 Free Software Foundation, Inc. -# Originally by Gordon Matzigkeit , 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 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# 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. - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="sed -e s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi - -### BEGIN LIBTOOL CONFIG -EOF - cfgfile="$ofile" - ;; - -*) - # Double-quote the variables that need it (for aesthetics). - for var in old_CC old_CFLAGS old_CPPFLAGS \ - old_LD old_LDFLAGS old_LIBS \ - old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do - eval "$var=\\\"\$var\\\"" - done - - # Just create a config file. - cfgfile="$ofile.cfg" - trap "$rm \"$cfgfile\"; exit 1" 1 2 15 - echo "creating $cfgfile" - $rm "$cfgfile" - cat < "$cfgfile" -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -EOF - ;; -esac - -cat <> "$cfgfile" -# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\ -# LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\ -# NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\ -# DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\ -# $0$ltconfig_args -# -# Compiler and other test output produced by $progname, useful for -# debugging $progname, is in ./config.log if it exists. - -# The version of $progname that generated this script. -LTCONFIG_VERSION=$LTCONFIG_VERSION - -# Shell to use when invoking shell scripts. -SHELL=$LTSHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host - -# An echo program that does not interpret backslashes. -echo=$ltecho - -# The archiver. -AR=$AR - -# The default C compiler. -CC=$CC - -# The linker used to build libraries. -LD=$LD - -# Whether we need hard or soft links. -LN_S=$LN_S - -# A BSD-compatible nm program. -NM=$NM - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$reload_flag -reload_cmds=$reload_cmds - -# How to pass a linker flag through the compiler. -wl=$wl - -# Object file suffix (normally "o"). -objext="$objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$pic_flag - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$compiler_c_o - -# Can we write directly to a .lo ? -compiler_o_lo=$compiler_o_lo - -# Must we lock files when doing compilation ? -need_locks=$need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$link_static_flag - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$no_builtin_flag - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$whole_archive_flag_spec - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$thread_safe_flag_spec - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$RANLIB -old_archive_cmds=$old_archive_cmds -old_postinstall_cmds=$old_postinstall_cmds -old_postuninstall_cmds=$old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$old_archive_from_new_cmds - -# Commands used to build and install a shared archive. -archive_cmds=$archive_cmds -archive_expsym_cmds=$archive_expsym_cmds -postinstall_cmds=$postinstall_cmds -postuninstall_cmds=$postuninstall_cmds - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$allow_undefined_flag - -# Flag that forces no undefined symbols. -no_undefined_flag=$no_undefined_flag - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$global_symbol_to_cdecl - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$hardcode_libdir_separator - -# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path" - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$include_expsyms - -EOF - -case "$ltmain" in -*.sh) - echo '### END LIBTOOL CONFIG' >> "$ofile" - echo >> "$ofile" - case "$host_os" in - aix3*) - cat <<\EOF >> "$ofile" - -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - - # Append the ltmain.sh script. - sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1) - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - - chmod +x "$ofile" - ;; - -*) - # Compile the libtool program. - echo "FIXME: would compile $ltmain" - ;; -esac - -test -n "$cache_file" || exit 0 - -# AC_CACHE_SAVE -trap '' 1 2 15 -cat > confcache <<\EOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -(set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >> confcache -if cmp -s $cache_file confcache; then - : -else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -exit 0 - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: diff --git a/Build/source/libs/expat/conftools/ltmain.sh b/Build/source/libs/expat/conftools/ltmain.sh deleted file mode 100644 index 95908ae5985..00000000000 --- a/Build/source/libs/expat/conftools/ltmain.sh +++ /dev/null @@ -1,4025 +0,0 @@ -# ltmain.sh - Provide generalized library-building support services. -# NOTE: Changing this file will not affect anything until you rerun ltconfig. -# -# Copyright (C) 1996-1999 Free Software Foundation, Inc. -# Originally by Gordon Matzigkeit , 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 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# 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. - -# Check that we have a working $echo. -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then - # Yippee, $echo works! - : -else - # Restart under the correct shell, and then maybe $echo will work. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat <&2 - echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit 1 -fi - -if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - echo "$modename: not configured to build any kind of library" 1>&2 - echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit 1 -fi - -# Global variables. -mode=$default_mode -nonopt= -prev= -prevopt= -run= -show="$echo" -show_help= -execute_dlfiles= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" - -# Parse our command line options once, thoroughly. -while test $# -gt 0 -do - arg="$1" - shift - - case "$arg" in - -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case "$prev" in - execute_dlfiles) - eval "$prev=\"\$$prev \$arg\"" - ;; - *) - eval "$prev=\$arg" - ;; - esac - - prev= - prevopt= - continue - fi - - # Have we seen a non-optional argument yet? - case "$arg" in - --help) - show_help=yes - ;; - - --version) - echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" - exit 0 - ;; - - --config) - sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0 - exit 0 - ;; - - --debug) - echo "$progname: enabling shell trace mode" - set -x - ;; - - --dry-run | -n) - run=: - ;; - - --features) - echo "host: $host" - if test "$build_libtool_libs" = yes; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test "$build_old_libs" = yes; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - exit 0 - ;; - - --finish) mode="finish" ;; - - --mode) prevopt="--mode" prev=mode ;; - --mode=*) mode="$optarg" ;; - - --quiet | --silent) - show=: - ;; - - -dlopen) - prevopt="-dlopen" - prev=execute_dlfiles - ;; - - -*) - $echo "$modename: unrecognized option \`$arg'" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - - *) - nonopt="$arg" - break - ;; - esac -done - -if test -n "$prevopt"; then - $echo "$modename: option \`$prevopt' requires an argument" 1>&2 - $echo "$help" 1>&2 - exit 1 -fi - -if test -z "$show_help"; then - - # Infer the operation mode. - if test -z "$mode"; then - case "$nonopt" in - *cc | *++ | gcc* | *-gcc*) - mode=link - for arg - do - case "$arg" in - -c) - mode=compile - break - ;; - esac - done - ;; - *db | *dbx | *strace | *truss) - mode=execute - ;; - *install*|cp|mv) - mode=install - ;; - *rm) - mode=uninstall - ;; - *) - # If we have no mode, but dlfiles were specified, then do execute mode. - test -n "$execute_dlfiles" && mode=execute - - # Just use the default operation mode. - if test -z "$mode"; then - if test -n "$nonopt"; then - $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 - else - $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 - fi - fi - ;; - esac - fi - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - $echo "$modename: unrecognized option \`-dlopen'" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$modename --help --mode=$mode' for more information." - - # These modes are in order of execution frequency so that they run quickly. - case "$mode" in - # libtool compile mode - compile) - modename="$modename: compile" - # Get the compilation command and the source file. - base_compile= - lastarg= - srcfile="$nonopt" - suppress_output= - - user_target=no - for arg - do - # Accept any command-line options. - case "$arg" in - -o) - if test "$user_target" != "no"; then - $echo "$modename: you cannot specify \`-o' more than once" 1>&2 - exit 1 - fi - user_target=next - ;; - - -static) - build_old_libs=yes - continue - ;; - esac - - case "$user_target" in - next) - # The next one is the -o target name - user_target=yes - continue - ;; - yes) - # We got the output file - user_target=set - libobj="$arg" - continue - ;; - esac - - # Accept the current argument as the source file. - lastarg="$srcfile" - srcfile="$arg" - - # Aesthetically quote the previous argument. - - # Backslashify any backslashes, double quotes, and dollar signs. - # These are the only characters that are still specially - # interpreted inside of double-quoted scrings. - lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` - - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly in scan - # sets, so we specify it separately. - case "$lastarg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - lastarg="\"$lastarg\"" - ;; - esac - - # Add the previous argument to base_compile. - if test -z "$base_compile"; then - base_compile="$lastarg" - else - base_compile="$base_compile $lastarg" - fi - done - - case "$user_target" in - set) - ;; - no) - # Get the name of the library object. - libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` - ;; - *) - $echo "$modename: you must specify a target with \`-o'" 1>&2 - exit 1 - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - xform='[cCFSfmso]' - case "$libobj" in - *.ada) xform=ada ;; - *.adb) xform=adb ;; - *.ads) xform=ads ;; - *.asm) xform=asm ;; - *.c++) xform=c++ ;; - *.cc) xform=cc ;; - *.cpp) xform=cpp ;; - *.cxx) xform=cxx ;; - *.f90) xform=f90 ;; - *.for) xform=for ;; - esac - - libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` - - case "$libobj" in - *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; - *) - $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 - exit 1 - ;; - esac - - if test -z "$base_compile"; then - $echo "$modename: you must specify a compilation command" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $libobj" - else - removelist="$libobj" - fi - - $run $rm $removelist - trap "$run $rm $removelist; exit 1" 1 2 15 - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext} - lockfile="$output_obj.lock" - removelist="$removelist $output_obj $lockfile" - trap "$run $rm $removelist; exit 1" 1 2 15 - else - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until ln "$0" "$lockfile" 2>/dev/null; do - $show "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - echo "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $run $rm $removelist - exit 1 - fi - echo $srcfile > "$lockfile" - fi - - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - # All platforms use -DPIC, to notify preprocessed assembler code. - command="$base_compile $srcfile $pic_flag -DPIC" - if test "$build_old_libs" = yes; then - lo_libobj="$libobj" - dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$dir" = "X$libobj"; then - dir="$objdir" - else - dir="$dir/$objdir" - fi - libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` - - if test -d "$dir"; then - $show "$rm $libobj" - $run $rm $libobj - else - $show "$mkdir $dir" - $run $mkdir $dir - status=$? - if test $status -ne 0 && test ! -d $dir; then - exit $status - fi - fi - fi - if test "$compiler_o_lo" = yes; then - output_obj="$libobj" - command="$command -o $output_obj" - elif test "$compiler_c_o" = yes; then - output_obj="$obj" - command="$command -o $output_obj" - fi - - $run $rm "$output_obj" - $show "$command" - if $run eval "$command"; then : - else - test -n "$output_obj" && $run $rm $removelist - exit 1 - fi - - if test "$need_locks" = warn && - test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then - echo "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $run $rm $removelist - exit 1 - fi - - # Just move the object if needed, then go on to compile the next one - if test x"$output_obj" != x"$libobj"; then - $show "$mv $output_obj $libobj" - if $run $mv $output_obj $libobj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - fi - - # If we have no pic_flag, then copy the object into place and finish. - if test -z "$pic_flag" && test "$build_old_libs" = yes; then - # Rename the .lo from within objdir to obj - if test -f $obj; then - $show $rm $obj - $run $rm $obj - fi - - $show "$mv $libobj $obj" - if $run $mv $libobj $obj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - - xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$obj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` - libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` - # Now arrange that obj and lo_libobj become the same file - $show "(cd $xdir && $LN_S $baseobj $libobj)" - if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then - exit 0 - else - error=$? - $run $rm $removelist - exit $error - fi - fi - - # Allow error messages only from the first compilation. - suppress_output=' >/dev/null 2>&1' - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - command="$base_compile $srcfile" - if test "$compiler_c_o" = yes; then - command="$command -o $obj" - output_obj="$obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" - $run $rm "$output_obj" - $show "$command" - if $run eval "$command"; then : - else - $run $rm $removelist - exit 1 - fi - - if test "$need_locks" = warn && - test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then - echo "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $run $rm $removelist - exit 1 - fi - - # Just move the object if needed - if test x"$output_obj" != x"$obj"; then - $show "$mv $output_obj $obj" - if $run $mv $output_obj $obj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - fi - - # Create an invalid libtool object if no PIC, so that we do not - # accidentally link it into a program. - if test "$build_libtool_libs" != yes; then - $show "echo timestamp > $libobj" - $run eval "echo timestamp > \$libobj" || exit $? - else - # Move the .lo from within objdir - $show "$mv $libobj $lo_libobj" - if $run $mv $libobj $lo_libobj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - fi - fi - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - $rm "$lockfile" - fi - - exit 0 - ;; - - # libtool link mode - link) - modename="$modename: link" - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invokation. - allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - # allow_undefined=yes - - # This is a source program that is used to create dlls on Windows - # Don't remove nor modify the starting and closing comments -# /* ltdll.c starts here */ -# #define WIN32_LEAN_AND_MEAN -# #include -# #undef WIN32_LEAN_AND_MEAN -# #include -# -# #ifndef __CYGWIN__ -# # ifdef __CYGWIN32__ -# # define __CYGWIN__ __CYGWIN32__ -# # endif -# #endif -# -# #ifdef __CYGWIN__ -# #include -# DECLARE_CYGWIN_DLL( DllMain ); -# #else -# # ifdef __cplusplus -# extern "C" { -# # endif -# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); -# # ifdef __cplusplus -# } -# # endif -# -# HINSTANCE __hDllInstance_base; -# -# BOOL APIENTRY -# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) -# { -# __hDllInstance_base = hInst; -# return TRUE; -# } -# #endif -# /* ltdll.c ends here */ - # This is a source program that is used to create import libraries - # on Windows for dlls which lack them. Don't remove nor modify the - # starting and closing comments -# /* impgen.c starts here */ -# /* Copyright (C) 1999 Free Software Foundation, Inc. -# -# This file is part of GNU libtool. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# */ -# -# #include /* for printf() */ -# #include /* for open(), lseek(), read() */ -# #include /* for O_RDONLY, O_BINARY */ -# #include /* for strdup() */ -# -# static unsigned int -# pe_get16 (fd, offset) -# int fd; -# int offset; -# { -# unsigned char b[2]; -# lseek (fd, offset, SEEK_SET); -# read (fd, b, 2); -# return b[0] + (b[1]<<8); -# } -# -# static unsigned int -# pe_get32 (fd, offset) -# int fd; -# int offset; -# { -# unsigned char b[4]; -# lseek (fd, offset, SEEK_SET); -# read (fd, b, 4); -# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); -# } -# -# static unsigned int -# pe_as32 (ptr) -# void *ptr; -# { -# unsigned char *b = ptr; -# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); -# } -# -# int -# main (argc, argv) -# int argc; -# char *argv[]; -# { -# int dll; -# unsigned long pe_header_offset, opthdr_ofs, num_entries, i; -# unsigned long export_rva, export_size, nsections, secptr, expptr; -# unsigned long name_rvas, nexp; -# unsigned char *expdata, *erva; -# char *filename, *dll_name; -# -# filename = argv[1]; -# -# dll = open(filename, O_RDONLY|O_BINARY); -# if (!dll) -# return 1; -# -# dll_name = filename; -# -# for (i=0; filename[i]; i++) -# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') -# dll_name = filename + i +1; -# -# pe_header_offset = pe_get32 (dll, 0x3c); -# opthdr_ofs = pe_header_offset + 4 + 20; -# num_entries = pe_get32 (dll, opthdr_ofs + 92); -# -# if (num_entries < 1) /* no exports */ -# return 1; -# -# export_rva = pe_get32 (dll, opthdr_ofs + 96); -# export_size = pe_get32 (dll, opthdr_ofs + 100); -# nsections = pe_get16 (dll, pe_header_offset + 4 +2); -# secptr = (pe_header_offset + 4 + 20 + -# pe_get16 (dll, pe_header_offset + 4 + 16)); -# -# expptr = 0; -# for (i = 0; i < nsections; i++) -# { -# char sname[8]; -# unsigned long secptr1 = secptr + 40 * i; -# unsigned long vaddr = pe_get32 (dll, secptr1 + 12); -# unsigned long vsize = pe_get32 (dll, secptr1 + 16); -# unsigned long fptr = pe_get32 (dll, secptr1 + 20); -# lseek(dll, secptr1, SEEK_SET); -# read(dll, sname, 8); -# if (vaddr <= export_rva && vaddr+vsize > export_rva) -# { -# expptr = fptr + (export_rva - vaddr); -# if (export_rva + export_size > vaddr + vsize) -# export_size = vsize - (export_rva - vaddr); -# break; -# } -# } -# -# expdata = (unsigned char*)malloc(export_size); -# lseek (dll, expptr, SEEK_SET); -# read (dll, expdata, export_size); -# erva = expdata - export_rva; -# -# nexp = pe_as32 (expdata+24); -# name_rvas = pe_as32 (expdata+32); -# -# printf ("EXPORTS\n"); -# for (i = 0; i&2 - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - else - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - fi - build_libtool_libs=no - build_old_libs=yes - prefer_static_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test $# -gt 0; do - arg="$1" - shift - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case "$prev" in - output) - compile_command="$compile_command @OUTPUT@" - finalize_command="$finalize_command @OUTPUT@" - ;; - esac - - case "$prev" in - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - compile_command="$compile_command @SYMFILE@" - finalize_command="$finalize_command @SYMFILE@" - preload=yes - fi - case "$arg" in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - ;; - esac - ;; - expsyms) - export_symbols="$arg" - if test ! -f "$arg"; then - $echo "$modename: symbol file \`$arg' does not exist" - exit 1 - fi - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case "$arg" in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - $echo "$modename: only absolute run-paths are allowed" 1>&2 - exit 1 - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi - - prevarg="$arg" - - case "$arg" in - -all-static) - if test -n "$link_static_flag"; then - compile_command="$compile_command $link_static_flag" - finalize_command="$finalize_command $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 - continue - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - $echo "$modename: not more than one -exported-symbols argument allowed" - exit 1 - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -L*) - dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` - # We need an absolute path. - case "$dir" in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 - $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 - absdir="$dir" - fi - dir="$absdir" - ;; - esac - case " $deplibs " in - *" $arg "*) ;; - *) deplibs="$deplibs $arg";; - esac - case " $lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir";; - esac - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2*) - dllsearchdir=`cd "$dir" && pwd || echo "$dir"` - case ":$dllsearchpath:" in - ::) dllsearchpath="$dllsearchdir";; - *":$dllsearchdir:"*) ;; - *) dllsearchpath="$dllsearchpath:$dllsearchdir";; - esac - ;; - esac - ;; - - -l*) - if test "$arg" = "-lc"; then - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) - # These systems don't actually have c library (as such) - continue - ;; - esac - elif test "$arg" = "-lm"; then - case "$host" in - *-*-cygwin* | *-*-beos*) - # These systems don't actually have math library (as such) - continue - ;; - esac - fi - deplibs="$deplibs $arg" - ;; - - -module) - module=yes - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -o) prev=output ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` - # We need an absolute path. - case "$dir" in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - $echo "$modename: only absolute run-paths are allowed" 1>&2 - exit 1 - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -static) - # If we have no pic_flag, then this is the same as -all-static. - if test -z "$pic_flag" && test -n "$link_static_flag"; then - compile_command="$compile_command $link_static_flag" - finalize_command="$finalize_command $link_static_flag" - fi - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - # Some other compiler flag. - -* | +*) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - ;; - - *.o | *.obj | *.a | *.lib) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A library object. - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` - prev= - fi - libobjs="$libobjs $arg" - ;; - - *.la) - # A libtool-controlled library. - - dlname= - libdir= - library_names= - old_library= - - # Check to see that this really is a libtool archive. - if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2 - exit 1 - fi - - # If the library was installed with an old release of libtool, - # it will not redefine variable installed. - installed=yes - - # Read the .la file - # If there is no directory component, then add one. - case "$arg" in - */* | *\\*) . $arg ;; - *) . ./$arg ;; - esac - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - - if test -z "$linklib"; then - $echo "$modename: cannot find name of link library for \`$arg'" 1>&2 - exit 1 - fi - - # Find the relevant object directory and library name. - name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'` - - if test "X$installed" = Xyes; then - dir="$libdir" - else - dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$dir" = "X$arg"; then - dir="$objdir" - else - dir="$dir/$objdir" - fi - fi - - if test -n "$dependency_libs"; then - # Extract -R and -L from dependency_libs - temp_deplibs= - for deplib in $dependency_libs; do - case "$deplib" in - -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'` - case " $rpath $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - -L*) case "$compile_command $temp_deplibs " in - *" $deplib "*) ;; - *) temp_deplibs="$temp_deplibs $deplib";; - esac - temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'` - case " $lib_search_path " in - *" $temp_dir "*) ;; - *) lib_search_path="$lib_search_path $temp_dir";; - esac - ;; - *) temp_deplibs="$temp_deplibs $deplib";; - esac - done - dependency_libs="$temp_deplibs" - fi - - if test -z "$libdir"; then - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $dir/$old_library" - old_convenience="$old_convenience $dir/$old_library" - deplibs="$deplibs$dependency_libs" - compile_command="$compile_command $dir/$old_library$dependency_libs" - finalize_command="$finalize_command $dir/$old_library$dependency_libs" - continue - fi - - # This library was specified with -dlopen. - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking statically, - # we need to preload. - prev=dlprefiles - else - # We should not create a dependency on this library, but we - # may need any libraries it requires. - compile_command="$compile_command$dependency_libs" - finalize_command="$finalize_command$dependency_libs" - prev= - continue - fi - fi - - # The library was specified with -dlpreopen. - if test "$prev" = dlprefiles; then - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - dlprefiles="$dlprefiles $dir/$old_library" - else - dlprefiles="$dlprefiles $dir/$linklib" - fi - prev= - fi - - if test -n "$library_names" && - { test "$prefer_static_libs" = no || test -z "$old_library"; }; then - link_against_libtool_libs="$link_against_libtool_libs $arg" - if test -n "$shlibpath_var"; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath " in - *" $dir "*) ;; - *) temp_rpath="$temp_rpath $dir" ;; - esac - fi - - # We need an absolute path. - case "$dir" in - [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 - $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 - absdir="$dir" - fi - ;; - esac - - # This is the magic to use -rpath. - # Skip directories that are in the system default run-time - # search path, unless they have been requested with -R. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - - lib_linked=yes - case "$hardcode_action" in - immediate | unsupported) - if test "$hardcode_direct" = no; then - compile_command="$compile_command $dir/$linklib" - deplibs="$deplibs $dir/$linklib" - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2*) - dllsearchdir=`cd "$dir" && pwd || echo "$dir"` - if test -n "$dllsearchpath"; then - dllsearchpath="$dllsearchpath:$dllsearchdir" - else - dllsearchpath="$dllsearchdir" - fi - ;; - esac - elif test "$hardcode_minus_L" = no; then - case "$host" in - *-*-sunos*) - compile_shlibpath="$compile_shlibpath$dir:" - ;; - esac - case "$compile_command " in - *" -L$dir "*) ;; - *) compile_command="$compile_command -L$dir";; - esac - compile_command="$compile_command -l$name" - deplibs="$deplibs -L$dir -l$name" - elif test "$hardcode_shlibpath_var" = no; then - case ":$compile_shlibpath:" in - *":$dir:"*) ;; - *) compile_shlibpath="$compile_shlibpath$dir:";; - esac - compile_command="$compile_command -l$name" - deplibs="$deplibs -l$name" - else - lib_linked=no - fi - ;; - - relink) - if test "$hardcode_direct" = yes; then - compile_command="$compile_command $absdir/$linklib" - deplibs="$deplibs $absdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - case "$compile_command " in - *" -L$absdir "*) ;; - *) compile_command="$compile_command -L$absdir";; - esac - compile_command="$compile_command -l$name" - deplibs="$deplibs -L$absdir -l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case ":$compile_shlibpath:" in - *":$absdir:"*) ;; - *) compile_shlibpath="$compile_shlibpath$absdir:";; - esac - compile_command="$compile_command -l$name" - deplibs="$deplibs -l$name" - else - lib_linked=no - fi - ;; - - *) - lib_linked=no - ;; - esac - - if test "$lib_linked" != yes; then - $echo "$modename: configuration error: unsupported hardcode properties" - exit 1 - fi - - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes; then - finalize_command="$finalize_command $libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - case "$finalize_command " in - *" -L$libdir "*) ;; - *) finalize_command="$finalize_command -L$libdir";; - esac - finalize_command="$finalize_command -l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case ":$finalize_shlibpath:" in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:";; - esac - finalize_command="$finalize_command -l$name" - else - # We cannot seem to hardcode it, guess we'll fake it. - case "$finalize_command " in - *" -L$dir "*) ;; - *) finalize_command="$finalize_command -L$libdir";; - esac - finalize_command="$finalize_command -l$name" - fi - else - # Transform directly to old archives if we don't build new libraries. - if test -n "$pic_flag" && test -z "$old_library"; then - $echo "$modename: cannot find static library for \`$arg'" 1>&2 - exit 1 - fi - - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_command="$compile_command $dir/$linklib" - finalize_command="$finalize_command $dir/$linklib" - else - case "$compile_command " in - *" -L$dir "*) ;; - *) compile_command="$compile_command -L$dir";; - esac - compile_command="$compile_command -l$name" - case "$finalize_command " in - *" -L$dir "*) ;; - *) finalize_command="$finalize_command -L$dir";; - esac - finalize_command="$finalize_command -l$name" - fi - fi - - # Add in any libraries that this one depends upon. - compile_command="$compile_command$dependency_libs" - finalize_command="$finalize_command$dependency_libs" - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - ;; - esac - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - fi - done - - if test -n "$prev"; then - $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` - libobjs_save="$libobjs" - - case "$output" in - "") - $echo "$modename: you must specify an output file" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - - *.a | *.lib) - if test -n "$link_against_libtool_libs"; then - $echo "$modename: error: cannot link libtool libraries into archives" 1>&2 - exit 1 - fi - - if test -n "$deplibs"; then - $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 - fi - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 - fi - - if test -n "$rpath"; then - $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 - fi - - if test -n "$xrpath"; then - $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 - fi - - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 - fi - - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 - fi - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - ;; - - *.la) - # Make sure we only generate libraries of the form `libNAME.la'. - case "$outputname" in - lib*) - name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - eval libname=\"$libname_spec\" - ;; - *) - if test "$module" = no; then - $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` - eval libname=\"$libname_spec\" - else - libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` - fi - ;; - esac - - output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` - if test "X$output_objdir" = "X$output"; then - output_objdir="$objdir" - else - output_objdir="$output_objdir/$objdir" - fi - - if test -n "$objs"; then - $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 - exit 1 - fi - - # How the heck are we supposed to write a wrapper for a shared library? - if test -n "$link_against_libtool_libs"; then - $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2 - exit 1 - fi - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2 - fi - - set dummy $rpath - if test $# -gt 2; then - $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 - fi - install_libdir="$2" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - libext=al - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - dependency_libs="$deplibs" - - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 - fi - else - - # Parse the version information argument. - IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - IFS="$save_ifs" - - if test -n "$8"; then - $echo "$modename: too many parameters to \`-version-info'" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - current="$2" - revision="$3" - age="$4" - - # Check that each of the things are valid numbers. - case "$current" in - 0 | [1-9] | [1-9][0-9]*) ;; - *) - $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - ;; - esac - - case "$revision" in - 0 | [1-9] | [1-9][0-9]*) ;; - *) - $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - ;; - esac - - case "$age" in - 0 | [1-9] | [1-9][0-9]*) ;; - *) - $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - ;; - esac - - if test $age -gt $current; then - $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case "$version_type" in - none) ;; - - irix) - major=`expr $current - $age + 1` - versuffix="$major.$revision" - verstring="sgi$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test $loop != 0; do - iface=`expr $revision - $loop` - loop=`expr $loop - 1` - verstring="sgi$major.$iface:$verstring" - done - ;; - - linux) - major=.`expr $current - $age` - versuffix="$major.$age.$revision" - ;; - - osf) - major=`expr $current - $age` - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test $loop != 0; do - iface=`expr $current - $loop` - loop=`expr $loop - 1` - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current"; - ;; - - windows) - # Like Linux, but with '-' rather than '.', since we only - # want one extension on Windows 95. - major=`expr $current - $age` - versuffix="-$major-$age-$revision" - ;; - - *) - $echo "$modename: unknown library version type \`$version_type'" 1>&2 - echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit 1 - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - verstring="0.0" - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - dependency_libs="$deplibs" - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody*) - # rhapsody is a little odd... - deplibs="$deplibs -framework System" - ;; - *) - # Add libc to deplibs on all other systems. - deplibs="$deplibs -lc" - ;; - esac - fi - - # Create the output directory, or remove our outputs if we need to. - if test -d $output_objdir; then - $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" - $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* - else - $show "$mkdir $output_objdir" - $run $mkdir $output_objdir - status=$? - if test $status -ne 0 && test ! -d $output_objdir; then - exit $status - fi - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - oldlibs="$oldlibs $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` - fi - - if test "$build_libtool_libs" = yes; then - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case "$deplibs_check_method" in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behaviour. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $rm conftest.c - cat > conftest.c </dev/null` - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null \ - | grep " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | sed 's/.* -> //'` - case "$potliblink" in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ - | sed 10q \ - | egrep "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - echo "*** Warning: This library needs some functionality provided by $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - fi - else - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - fi - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ - -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' | - grep . >/dev/null; then - echo - if test "X$deplibs_check_method" = "Xnone"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." - else - echo "*** Warning: inter-library dependencies are not known to be supported." - fi - echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - fi - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - echo "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - echo "*** The inter-library dependencies that have been dropped here will be" - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - # Get the real and link names of the library. - eval library_names=\"$library_names_spec\" - set dummy $library_names - realname="$2" - shift; shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - lib="$output_objdir/$realname" - for link - do - linknames="$linknames $link" - done - - # Ensure that we have .o objects for linkers which dislike .lo - # (e.g. aix) in case we are running --disable-static - for obj in $libobjs; do - xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$obj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` - oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` - if test ! -f $xdir/$oldobj; then - $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" - $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? - fi - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - $show "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $run $rm $export_symbols - eval cmds=\"$export_symbols_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - if test -n "$export_symbols_regex"; then - $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" - $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - $show "$mv \"${export_symbols}T\" \"$export_symbols\"" - $run eval '$mv "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' - fi - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - else - gentop="$output_objdir/${outputname}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" - $show "mkdir $gentop" - $run mkdir "$gentop" - status=$? - if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" - - for xlib in $convenience; do - # Extract the objects. - case "$xlib" in - [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; - *) xabs=`pwd`"/$xlib" ;; - esac - xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` - xdir="$gentop/$xlib" - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" - $show "mkdir $xdir" - $run mkdir "$xdir" - status=$? - if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - - libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` - done - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - linkopts="$linkopts $flag" - fi - - # Do each of the archive commands. - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval cmds=\"$archive_expsym_cmds\" - else - eval cmds=\"$archive_cmds\" - fi - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" - $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - *.lo | *.o | *.obj) - if test -n "$link_against_libtool_libs"; then - $echo "$modename: error: cannot link libtool libraries into objects" 1>&2 - exit 1 - fi - - if test -n "$deplibs"; then - $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 - fi - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 - fi - - if test -n "$rpath"; then - $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 - fi - - if test -n "$xrpath"; then - $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 - fi - - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 - fi - - case "$output" in - *.lo) - if test -n "$objs"; then - $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 - exit 1 - fi - libobj="$output" - obj=`$echo "X$output" | $Xsed -e "$lo2o"` - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $run $rm $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" - else - gentop="$output_objdir/${obj}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" - $show "mkdir $gentop" - $run mkdir "$gentop" - status=$? - if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" - - for xlib in $convenience; do - # Extract the objects. - case "$xlib" in - [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; - *) xabs=`pwd`"/$xlib" ;; - esac - xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` - xdir="$gentop/$xlib" - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" - $show "mkdir $xdir" - $run mkdir "$xdir" - status=$? - if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - - reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` - done - fi - fi - - # Create the old-style object. - reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" - - output="$obj" - eval cmds=\"$reload_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi - - exit 0 - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - $show "echo timestamp > $libobj" - $run eval "echo timestamp > $libobj" || exit $? - exit 0 - fi - - if test -n "$pic_flag"; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - eval cmds=\"$reload_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - else - # Just create a symlink. - $show $rm $libobj - $run $rm $libobj - xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$libobj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` - oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` - $show "(cd $xdir && $LN_S $oldobj $baseobj)" - $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? - fi - - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi - - exit 0 - ;; - - # Anything else should be a program. - *) - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 - fi - - if test "$preload" = yes; then - if test "$dlopen" = unknown && test "$dlopen_self" = unknown && - test "$dlopen_self_static" = unknown; then - $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." - fi - fi - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$compile_rpath " in - *" $libdir "*) ;; - *) compile_rpath="$compile_rpath $libdir" ;; - esac - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` - if test "X$output_objdir" = "X$output"; then - output_objdir="$objdir" - else - output_objdir="$output_objdir/$objdir" - fi - - # Create the binary in the object directory, then wrap it. - if test ! -d $output_objdir; then - $show "$mkdir $output_objdir" - $run $mkdir $output_objdir - status=$? - if test $status -ne 0 && test ! -d $output_objdir; then - exit $status - fi - fi - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - fi - - dlsyms= - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - dlsyms="${outputname}S.c" - else - $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 - fi - fi - - if test -n "$dlsyms"; then - case "$dlsyms" in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${outputname}.nm" - - $show "$rm $nlist ${nlist}S ${nlist}T" - $run $rm "$nlist" "${nlist}S" "${nlist}T" - - # Parse the name list into a source file. - $show "creating $output_objdir/$dlsyms" - - test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ -/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ -/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -/* Prevent the only kind of declaration conflicts we can make. */ -#define lt_preloaded_symbols some_other_symbol - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - $show "generating symbol list for \`$output'" - - test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - for arg in $progfiles; do - $show "extracting global C symbols from \`$arg'" - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - $run eval '$mv "$nlist"T "$nlist"' - fi - - if test -n "$export_symbols_regex"; then - $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T' - $run eval '$mv "$nlist"T "$nlist"' - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$output.exp" - $run $rm $export_symbols - $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - else - $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' - $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' - $run eval 'mv "$nlist"T "$nlist"' - fi - fi - - for arg in $dlprefiles; do - $show "extracting global C symbols from \`$arg'" - name=`echo "$arg" | sed -e 's%^.*/%%'` - $run eval 'echo ": $name " >> "$nlist"' - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done - - if test -z "$run"; then - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $mv "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then - : - else - grep -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$dlsyms" - fi - - $echo >> "$output_objdir/$dlsyms" "\ - -#undef lt_preloaded_symbols - -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[] = -{\ -" - - sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \ - -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \ - < "$nlist" >> "$output_objdir/$dlsyms" - - $echo >> "$output_objdir/$dlsyms" "\ - {0, (lt_ptr_t) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - fi - - pic_flag_for_symtable= - case "$host" in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - case "$compile_command " in - *" -static "*) ;; - *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; - esac;; - *-*-hpux*) - case "$compile_command " in - *" -static "*) ;; - *) pic_flag_for_symtable=" $pic_flag -DPIC";; - esac - esac - - # Now compile the dynamic symbol file. - $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" - $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? - - # Clean up the generated files. - $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" - $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" - - # Transform the symbol file into the correct name. - compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` - ;; - *) - $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 - exit 1 - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi - - if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then - # Replace the output file specification. - compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - $show "$link_command" - $run eval "$link_command" - status=$? - - # Delete the generated files. - if test -n "$dlsyms"; then - $show "$rm $output_objdir/${outputname}S.${objext}" - $run $rm "$output_objdir/${outputname}S.${objext}" - fi - - exit $status - fi - - if test -n "$shlibpath_var"; then - # We should set the shlibpath_var - rpath= - for dir in $temp_rpath; do - case "$dir" in - [\\/]* | [A-Za-z]:[\\/]*) - # Absolute path. - rpath="$rpath$dir:" - ;; - *) - # Relative path: add a thisdir entry. - rpath="$rpath\$thisdir/$dir:" - ;; - esac - done - temp_rpath="$rpath" - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 - $echo "$modename: \`$output' will be relinked during installation" 1>&2 - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname - - $show "$link_command" - $run eval "$link_command" || exit $? - - # Now create the wrapper script. - $show "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - - # Quote $echo for shipping. - if test "X$echo" = "X$SHELL $0 --fallback-echo"; then - case "$0" in - [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; - *) qecho="$SHELL `pwd`/$0 --fallback-echo";; - esac - qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` - else - qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` - fi - - # Only actually do things if our run command is non-null. - if test -z "$run"; then - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) output=`echo $output|sed 's,.exe$,,'` ;; - esac - $rm $output - trap "$rm $output; exit 1" 1 2 15 - - $echo > $output "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -sed_quote_subst='$sed_quote_subst' - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variable: - link_against_libtool_libs='$link_against_libtool_libs' -else - # When we are sourced in execute mode, \$file and \$echo are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - echo=\"$qecho\" - file=\"\$0\" - # Make sure echo works. - if test \"X\$1\" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then - # Yippee, \$echo works! - : - else - # Restart under the correct shell, and then maybe \$echo will work. - exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} - fi - fi\ -" - $echo >> $output "\ - - # Find the directory that this script lives in. - thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` - done - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - echo >> $output "\ - program=lt-'$outputname' - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || \\ - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $mkdir \"\$progdir\" - else - $rm \"\$progdir/\$file\" - fi" - - echo >> $output "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if (cd \"\$thisdir\" && eval \$relink_command); then : - else - $rm \"\$progdir/\$file\" - exit 1 - fi - fi - - $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $rm \"\$progdir/\$program\"; - $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $rm \"\$progdir/\$file\" - fi" - else - echo >> $output "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - echo >> $output "\ - - if test -f \"\$progdir/\$program\"; then" - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $echo >> $output "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` - - export $shlibpath_var -" - fi - - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $echo >> $output "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - $echo >> $output "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. -" - case $host in - # win32 systems need to use the prog path for dll - # lookup to work - *-*-cygwin*) - $echo >> $output "\ - exec \$progdir/\$program \${1+\"\$@\"} -" - ;; - - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2*) - $echo >> $output "\ - exec \$progdir\\\\\$program \${1+\"\$@\"} -" - ;; - - *) - $echo >> $output "\ - # Export the path to the program. - PATH=\"\$progdir:\$PATH\" - export PATH - - exec \$program \${1+\"\$@\"} -" - ;; - esac - $echo >> $output "\ - \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" - exit 1 - fi - else - # The program doesn't exist. - \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 - \$echo \"This script is just a wrapper for \$program.\" 1>&2 - echo \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" - chmod +x $output - fi - exit 0 - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" - $show "mkdir $gentop" - $run mkdir "$gentop" - status=$? - if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" - - # Add in members from convenience archives. - for xlib in $addlibs; do - # Extract the objects. - case "$xlib" in - [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; - *) xabs=`pwd`"/$xlib" ;; - esac - xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` - xdir="$gentop/$xlib" - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" - $show "mkdir $xdir" - $run mkdir "$xdir" - status=$? - if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - - oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` - done - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - eval cmds=\"$old_archive_from_new_cmds\" - else - # Ensure that we have .o objects in place in case we decided - # not to build a shared library, and have fallen back to building - # static libs even though --disable-static was passed! - for oldobj in $oldobjs; do - if test ! -f $oldobj; then - xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$oldobj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` - obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` - $show "(cd $xdir && ${LN_S} $obj $baseobj)" - $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? - fi - done - - eval cmds=\"$old_archive_cmds\" - fi - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - done - - if test -n "$generated"; then - $show "${rm}r$generated" - $run ${rm}r$generated - fi - - # Now create the libtool archive. - case "$output" in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - $show "creating $output" - - if test -n "$xrpath"; then - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - done - dependency_libs="$temp_xrpath $dependency_libs" - fi - - # Only create the output if not a dry run. - if test -z "$run"; then - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - fi - $rm $output - $echo > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$dlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Directory that this library needs to be installed in: -libdir='$install_libdir'\ -" - done - fi - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" - $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $? - ;; - esac - exit 0 - ;; - - # libtool install mode - install) - modename="$modename: install" - - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then - # Aesthetically quote it. - arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - install_prog="$arg " - arg="$1" - shift - else - install_prog= - arg="$nonopt" - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - install_prog="$install_prog$arg" - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - for arg - do - if test -n "$dest"; then - files="$files $dest" - dest="$arg" - continue - fi - - case "$arg" in - -d) isdir=yes ;; - -f) prev="-f" ;; - -g) prev="-g" ;; - -m) prev="-m" ;; - -o) prev="-o" ;; - -s) - stripme=" -s" - continue - ;; - -*) ;; - - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - prev= - else - dest="$arg" - continue - fi - ;; - esac - - # Aesthetically quote the argument. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - install_prog="$install_prog $arg" - done - - if test -z "$install_prog"; then - $echo "$modename: you must specify an install program" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - if test -n "$prev"; then - $echo "$modename: the \`$prev' option requires an argument" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - if test -z "$files"; then - if test -z "$dest"; then - $echo "$modename: no file or destination specified" 1>&2 - else - $echo "$modename: you must specify a destination" 1>&2 - fi - $echo "$help" 1>&2 - exit 1 - fi - - # Strip any trailing slash from the destination. - dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` - test "X$destdir" = "X$dest" && destdir=. - destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` - - # Not a directory, so check to see that there is only one file specified. - set dummy $files - if test $# -gt 2; then - $echo "$modename: \`$dest' is not a directory" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - fi - case "$destdir" in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case "$file" in - *.lo) ;; - *) - $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case "$file" in - *.a | *.lib) - # Do the static libraries later. - staticlibs="$staticlibs $file" - ;; - - *.la) - # Check to see that this really is a libtool archive. - if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - library_names= - old_library= - # If there is no directory component, then add one. - case "$file" in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; - esac - fi - - dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/" - test "X$dir" = "X$file/" && dir= - dir="$dir$objdir" - - # See the names of the shared library. - set dummy $library_names - if test -n "$2"; then - realname="$2" - shift - shift - - # Install the shared library and build the symlinks. - $show "$install_prog $dir/$realname $destdir/$realname" - $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? - - if test $# -gt 0; then - # Delete the old symlinks, and create new ones. - for linkname - do - if test "$linkname" != "$realname"; then - $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" - $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" - fi - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - eval cmds=\"$postinstall_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - - # Install the pseudo-library for information purposes. - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - instname="$dir/$name"i - $show "$install_prog $instname $destdir/$name" - $run eval "$install_prog $instname $destdir/$name" || exit $? - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case "$destfile" in - *.lo) - staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` - ;; - *.o | *.obj) - staticdest="$destfile" - destfile= - ;; - *) - $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - esac - - # Install the libtool object if requested. - if test -n "$destfile"; then - $show "$install_prog $file $destfile" - $run eval "$install_prog $file $destfile" || exit $? - fi - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` - - $show "$install_prog $staticobj $staticdest" - $run eval "$install_prog \$staticobj \$staticdest" || exit $? - fi - exit 0 - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - destfile="$destdir/$destfile" - fi - - # Do a test to see if this is really a libtool program. - if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - link_against_libtool_libs= - relink_command= - - # If there is no directory component, then add one. - case "$file" in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Check the variables that should have been set. - if test -z "$link_against_libtool_libs"; then - $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 - exit 1 - fi - - finalize=yes - for lib in $link_against_libtool_libs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - # If there is no directory component, then add one. - case "$lib" in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac - fi - libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`" - if test -n "$libdir" && test ! -f "$libfile"; then - $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 - finalize=no - fi - done - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - if test "$finalize" = yes && test -z "$run"; then - tmpdir="/tmp" - test -n "$TMPDIR" && tmpdir="$TMPDIR" - tmpdir="$tmpdir/libtool-$$" - if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : - else - $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 - continue - fi - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` - - $show "$relink_command" - if $run eval "$relink_command"; then : - else - $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 - ${rm}r "$tmpdir" - continue - fi - file="$outputname" - else - $echo "$modename: warning: cannot relink \`$file'" 1>&2 - fi - else - # Install the binary that we compiled earlier. - file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - $show "$install_prog$stripme $file $destfile" - $run eval "$install_prog\$stripme \$file \$destfile" || exit $? - test -n "$outputname" && ${rm}r "$tmpdir" - ;; - esac - done - - for file in $staticlibs; do - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - $show "$install_prog $file $oldlib" - $run eval "$install_prog \$file \$oldlib" || exit $? - - # Do each command in the postinstall commands. - eval cmds=\"$old_postinstall_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - done - - if test -n "$future_libdirs"; then - $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 - fi - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - test -n "$run" && current_libdirs=" -n$current_libdirs" - exec $SHELL $0 --finish$current_libdirs - exit 1 - fi - - exit 0 - ;; - - # libtool finish mode - finish) - modename="$modename: finish" - libdirs="$nonopt" - admincmds= - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done - - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - eval cmds=\"$finish_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || admincmds="$admincmds - $cmd" - done - IFS="$save_ifs" - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $run eval "$cmds" || admincmds="$admincmds - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - test "$show" = : && exit 0 - - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - echo " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use \`-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - echo " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - echo " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - echo - echo "See any operating system documentation about shared libraries for" - echo "more information, such as the ld(1) and ld.so(8) manual pages." - echo "----------------------------------------------------------------------" - exit 0 - ;; - - # libtool execute mode - execute) - modename="$modename: execute" - - # The first argument is the command name. - cmd="$nonopt" - if test -z "$cmd"; then - $echo "$modename: you must specify a COMMAND" 1>&2 - $echo "$help" - exit 1 - fi - - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - if test ! -f "$file"; then - $echo "$modename: \`$file' is not a file" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - dir= - case "$file" in - *.la) - # Check to see that this really is a libtool archive. - if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - # Read the libtool library. - dlname= - library_names= - - # If there is no directory component, then add one. - case "$file" in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" - continue - fi - - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. - - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 - exit 1 - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. - ;; - - *) - $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case "$file" in - -*) ;; - *) - # Do a test to see if this is really a libtool program. - if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - # If there is no directory component, then add one. - case "$file" in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` - args="$args \"$file\"" - done - - if test -z "$run"; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved enviroment variables - if test "${save_LC_ALL+set}" = set; then - LC_ALL="$save_LC_ALL"; export LC_ALL - fi - if test "${save_LANG+set}" = set; then - LANG="$save_LANG"; export LANG - fi - - # Now actually exec the command. - eval "exec \$cmd$args" - - $echo "$modename: cannot exec \$cmd$args" - exit 1 - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" - $echo "export $shlibpath_var" - fi - $echo "$cmd$args" - exit 0 - fi - ;; - - # libtool uninstall mode - uninstall) - modename="$modename: uninstall" - rm="$nonopt" - files= - - for arg - do - case "$arg" in - -*) rm="$rm $arg" ;; - *) files="$files $arg" ;; - esac - done - - if test -z "$rm"; then - $echo "$modename: you must specify an RM program" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - for file in $files; do - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - - rmfiles="$file" - - case "$name" in - *.la) - # Possibly a libtool archive, so verify it. - if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - . $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - rmfiles="$rmfiles $dir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" - - $show "$rm $rmfiles" - $run $rm $rmfiles - - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - eval cmds=\"$postuninstall_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" - done - IFS="$save_ifs" - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - eval cmds=\"$old_postuninstall_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" - done - IFS="$save_ifs" - fi - - # FIXME: should reinstall the best remaining shared library. - fi - ;; - - *.lo) - if test "$build_old_libs" = yes; then - oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` - rmfiles="$rmfiles $dir/$oldobj" - fi - $show "$rm $rmfiles" - $run $rm $rmfiles - ;; - - *) - $show "$rm $rmfiles" - $run $rm $rmfiles - ;; - esac - done - exit 0 - ;; - - "") - $echo "$modename: you must specify a MODE" 1>&2 - $echo "$generic_help" 1>&2 - exit 1 - ;; - esac - - $echo "$modename: invalid operation mode \`$mode'" 1>&2 - $echo "$generic_help" 1>&2 - exit 1 -fi # test -z "$show_help" - -# We need to display help for each of the modes. -case "$mode" in -"") $echo \ -"Usage: $modename [OPTION]... [MODE-ARG]... - -Provide generalized library-building support services. - - --config show all configuration variables - --debug enable verbose shell tracing --n, --dry-run display commands without modifying any files - --features display basic configuration information and exit - --finish same as \`--mode=finish' - --help display this help message and exit - --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] - --quiet same as \`--silent' - --silent don't print informational messages - --version print version information - -MODE must be one of the following: - - compile compile a source file into a libtool object - execute automatically set library path, then run a program - finish complete the installation of libtool libraries - install install libraries or executables - link create a library or an executable - uninstall remove libraries from an installed directory - -MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for -a more detailed description of MODE." - exit 0 - ;; - -compile) - $echo \ -"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -static always build a \`.o' file suitable for static linking - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - -execute) - $echo \ -"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - -finish) - $echo \ -"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - -install) - $echo \ -"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - -link) - $echo \ -"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -static do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - -uninstall) - $echo \ -"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - -*) - $echo "$modename: invalid operation mode \`$mode'" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; -esac - -echo -$echo "Try \`$modename --help' for more information about other modes." - -exit 0 - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: diff --git a/Build/source/libs/expat/conftools/missing b/Build/source/libs/expat/conftools/missing deleted file mode 100644 index 28055d2ae6f..00000000000 --- a/Build/source/libs/expat/conftools/missing +++ /dev/null @@ -1,376 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2009-04-28.21; # UTC - -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, -# 2008, 2009 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 - tar try tar, gnutar, gtar, then tar without non-portable flags - 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. - ;; - - tar*) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; - - *) - 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 - ;; - - tar*) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case $firstarg in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case $firstarg in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - 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/Build/source/libs/expat/conftools/mkinstalldirs b/Build/source/libs/expat/conftools/mkinstalldirs deleted file mode 100644 index 4191a45dbd7..00000000000 --- a/Build/source/libs/expat/conftools/mkinstalldirs +++ /dev/null @@ -1,162 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy - -scriptversion=2009-04-28.21; # UTC - -# Original author: Noah Friedman -# Created: 1993-05-16 -# Public domain. -# -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -nl=' -' -IFS=" "" $nl" -errstatus=0 -dirmode= - -usage="\ -Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... - -Create each directory DIR (with mode MODE, if specified), including all -leading file name components. - -Report bugs to ." - -# process command line arguments -while test $# -gt 0 ; do - case $1 in - -h | --help | --h*) # -h for help - echo "$usage" - exit $? - ;; - -m) # -m PERM arg - shift - test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } - dirmode=$1 - shift - ;; - --version) - echo "$0 $scriptversion" - exit $? - ;; - --) # stop option processing - shift - break - ;; - -*) # unknown option - echo "$usage" 1>&2 - exit 1 - ;; - *) # first non-opt arg - break - ;; - esac -done - -for file -do - if test -d "$file"; then - shift - else - break - fi -done - -case $# in - 0) exit 0 ;; -esac - -# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and -# mkdir -p a/c at the same time, both will detect that a is missing, -# one will create a, then the other will try to create a and die with -# a "File exists" error. This is a problem when calling mkinstalldirs -# from a parallel make. We use --version in the probe to restrict -# ourselves to GNU mkdir, which is thread-safe. -case $dirmode in - '') - if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - echo "mkdir -p -- $*" - exec mkdir -p -- "$@" - else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - test -d ./-p && rmdir ./-p - test -d ./--version && rmdir ./--version - fi - ;; - *) - if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && - test ! -d ./--version; then - echo "mkdir -m $dirmode -p -- $*" - exec mkdir -m "$dirmode" -p -- "$@" - else - # Clean up after NextStep and OpenStep mkdir. - for d in ./-m ./-p ./--version "./$dirmode"; - do - test -d $d && rmdir $d - done - fi - ;; -esac - -for file -do - case $file in - /*) pathcomp=/ ;; - *) pathcomp= ;; - esac - oIFS=$IFS - IFS=/ - set fnord $file - shift - IFS=$oIFS - - for d - do - test "x$d" = x && continue - - pathcomp=$pathcomp$d - case $pathcomp in - -*) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" - - mkdir "$pathcomp" || lasterr=$? - - if test ! -d "$pathcomp"; then - errstatus=$lasterr - else - if test ! -z "$dirmode"; then - echo "chmod $dirmode $pathcomp" - lasterr= - chmod "$dirmode" "$pathcomp" || lasterr=$? - - if test ! -z "$lasterr"; then - errstatus=$lasterr - fi - fi - fi - fi - - pathcomp=$pathcomp/ - done -done - -exit $errstatus - -# 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/Build/source/libs/expat/doc/reference.html b/Build/source/libs/expat/doc/reference.html deleted file mode 100644 index 07df5e38330..00000000000 --- a/Build/source/libs/expat/doc/reference.html +++ /dev/null @@ -1,1493 +0,0 @@ - - - - - - Expat XML Parser - - - - - -

    Expat XML Parser

    - -

    Expat is a library, written in C, for parsing XML documents. It's the -underlying XML parser for the open source Mozilla project, perl's -XML::Parser, and other open-source XML parsers.

    - -

    This library is the creation of James Clark, who's also given us -groff (an nroff look-alike), Jade (an implemention of ISO's DSSSL stylesheet -language for SGML), XP (a Java XML parser package), XT (a Java XSL engine). -James was also the technical lead on the XML Working Group at W3 that produced -the XML specification.

    - -

    This is free software, licensed under the -MIT/X Consortium license. You may download it from -the expat homepage on Source Forge. -

    - -

    The bulk of this document was originally commissioned as an article by -XML.com. They graciously allowed me to retain -copyright and to distribute it with expat. - -


    -

    Table of Contents

    - - -
    -

    Overview

    -

    Expat is a stream-oriented parser. You register callback (or handler) -functions with -the parser and then start feeding it the document. -As the parser recognizes parts of -the document, it will call the appropriate handler for that part (if you've -registered one.) The document is fed to the parser in pieces, so you can -start parsing before you have all the document. This also allows you to -parse really huge documents that won't fit into memory.

    - -

    Expat can be intimidating due to the many kinds of handlers and options -you can set. But you only need to learn four functions in order to do 90% -of what you'll want to do with it:

    - -
    - -
    XML_ParserCreate
    -
    Create a new parser object.
    - -
    XML_SetElementHandler
    -
    Set handlers for start and end tags.
    - -
    XML_SetCharacterDataHandler
    -
    Set handler for text.
    - -
    XML_Parse
    -
    Pass a buffer full of document to the parser
    -
    - -

    These functions and others are described in the -reference part of this document. The reference -section also describes in detail the parameters passed to the different -types of handlers. - -

    Let's look at a very simple example program that only uses 3 of the above -functions (it doesn't need to set a character handler.) The program -outline.c -prints an element outline, indenting child elements to distinguish them from -the parent element that contains them. The start handler does all the work. -It prints two indenting spaces for every level of ancestor elements, then -it prints the element and attribute information. Finally it increments the -global Depth variable. - -

    -
    -int Depth;
    -
    -void
    -start(void *data, const char *el, const char **attr) {
    -  int i;
    -
    -  for (i = 0; i < Depth; i++)
    -    printf("  ");
    -
    -  printf("%s", el);
    -
    -  for (i = 0; attr[i]; i += 2) {
    -    printf(" %s='%s'", attr[i], attr[i + 1]);
    -  }
    -
    -  printf("\n");
    -  Depth++;
    -}  /* End of start handler */
    -
    -
    - -

    The end tag simply does the bookkeeping work of decrementing the Depth. -

    -
    -void
    -end(void *data, const char *el) {
    -  Depth--;
    -}  /* End of end handler */
    -
    -
    - -

    After creating the parser, the main program just has the job of -shoveling the document to the parser so that it can do its work. - -


    -

    Building and Installing expat

    -

    The expat distribution comes as a compressed (with GNU gzip) tar file. -You may download the latest version from -Source Forge. -After unpacking this, cd into the directory. Then follow either the -Win32 directions or Unix directions below.

    - -

    Building under Win32

    -

    If you're using the GNU compiler under cygwin, follow the Unix directions -in the next section. Otherwise if you have Microsoft's Developer Studio -installed, then from Windows Explorer double-click on "expat.dsp" in the -lib directory and build and install in the usual manner.

    - -

    Alternatively, you may download the win32 binary package that contains -the expat.h include file and a pre-built dll.

    - -

    Building under Unix (or GNU)

    -

    First you'll need to run the configure shell script in order to configure -the Makefiles and headers for your system.

    - -

    If you're happy with all the defaults that configure picks for you, -and you have permission on your system to install into /usr/local, you can -install expat with this sequence of commands:

    - -
    -   ./configure
    -   make
    -   make install
    -
    - -

    There are some options that you can provide to this script, but the -only one we'll mention here is the --prefix option. You can -find out all the options available by running configure with just the ---help option. -

    - -By default, the configure script sets things up so that the library gets -installed in /usr/local/lib and the associated header file in -/usr/local/include. -But if you were to give the option, --prefix=/home/me/mystuff, -then the library and header would get installed in -/home/me/mystuff/lib and /home/me/mystuff/include -respectively. -

    - -
    -

    Using Expat

    -

    Compiling and Linking against expat

    -

    Unless you installed expat in a location not expected by your compiler -and linker, all you have to do to use expat in your programs is to include -the expat header (#include <expat.h>) in your files that -make calls to it and to tell the linker -that it needs to link against the expat library. On Unix systems, this would -be the -lexpat argument. -Otherwise, you'll need to tell the compiler where to look for the expat header -and the linker where to find the expat library. You may also need to take -steps to tell the operating system where to find this libary at run time. -

    -

    On a Unix based system, here's what a Makefile might look like when expat -is installed in a standard location:

    - -
    -
    -CC=cc
    -LDFLAGS=
    -LIBS= -lexpat
    -xmlapp: xmlapp.o
    -        $(CC) $(LDFLAGS) -o xmlapp xmlapp.o $(LIBS)
    -
    -
    - -

    If you installed expat in, say, /home/me/mystuff, then -the Makefile would look like this:

    - -
    -
    -CC=cc
    -CFLAGS= -I/home/me/mystuff/include
    -LDFLAGS=
    -LIBS= -L/home/me/mystuff/lib -lexpat
    -xmlapp: xmlapp.o
    -        $(CC) $(LDFLAGS) -o xmlapp xmlapp.o $(LIBS)
    -
    -
    - -

    You'd also have to set the environment variable LD_LIBRARY_PATH -to /home/me/mystuff/lib (or to -${LD_LIBRARY_PATH}:/home/me/mystuff/lib if LD_LIBRARY_PATH -already has some directories in it) in order to run your application. -

    - -

    Expat Basics

    -

    As we saw in the example in the overview, the first step in parsing an -XML document with expat is to create a parser object. There are -three functions in the expat API for creating a -parser object. -However, only two of these -(XML_ParserCreate and -XML_ParserCreateNS) -can be used for constructing a parser for a top-level document. -The object returned by these functions is an opaque pointer -(i.e. expat.h declares it as void *) to data with further internal structure. -In order to free the memory associated with this object you must call -XML_ParserFree. Note that if -you have provided any user data that gets stored -in the parser, then your application is responsible for freeing it prior to -calling XML_ParserFree. -

    - -

    The objects returned by the parser creation functions are good for -parsing only one XML document or external parsed entity. If your application -needs to parse many XML documents, then it needs to create a parser object -for each one. The best way to deal with this is to create a higher level -object that contains all the default initialization you want for your parser -objects. - -

    Walking through a document hierarchy with a stream oriented parser will -require a good stack mechanism in order to keep track of current context. -For instance, to answer the simple question, -"What element does this text belong to?" requires a stack, since the -parser may have descended into other elements that are children of the -current one and has encountered this text on the way out. - -

    The things you're likely to want to keep on a stack are the currently -opened element and it's attributes. You push this information onto the -stack in the start handler and you pop it off in the end handler. - -

    For some tasks, it is sufficient to just keep information on what the -depth of the stack is (or would be if you had one.) The outline program shown -above presents one example. Another such task would be skipping over a -complete element. When you see the start tag for the element you want to -skip, you set a skip flag and record the depth at which the element started. -When the end tag handler encounters the same depth, the skipped element has -ended and the flag may be cleared. If you follow the convention that the -root element starts at 1, then you can use the same variable for skip flag -and skip depth. - -

    -
    -void
    -init_info(Parseinfo *info) {
    -  info->skip = 0;
    -  info->depth = 1;
    -  /* Other initializations here */
    -}  /* End of init_info */
    -
    -void
    -rawstart(void *data, const char *el, const char **attr) {
    -  Parseinfo *inf = (Parseinfo *) data;
    -
    -  if (! inf->skip) {
    -    if (should_skip(inf, el, attr)) {
    -      inf->skip = inf->depth;
    -    }
    -    else
    -      start(inf, el, attr);     /* This does rest of start handling */
    -  }
    -
    -  inf->depth++;
    -}  /* End of rawstart */
    -
    -void
    -rawend(void *data, const char *el) {
    -  Parseinfo *inf = (Parseinfo *) data;
    -
    -  inf->depth--;
    -
    -  if (! inf->skip)
    -    end(inf, el);              /* This does rest of end handling */
    -
    -  if (inf->skip == inf->depth)
    -    inf->skip = 0;
    -}  /* End rawend */
    -
    -
    -
    - -

    Notice in the above example the difference in how depth is manipulated -in the start and end handlers. The end tag handler should be the mirror -image of the start tag handler. This is necessary to properly model -containment. Since, in the start tag handler, we -incremented depth after the main body of start tag code, then in -the end handler, we need to manipulate it before the main body. -If we'd decided to increment it first thing in the start handler, then -we'd have had to decrement it last thing in the end handler. - -

    Communicating between handlers

    - -

    In order to be able to pass information between different handlers -without using globals, you'll need to define a data structure to hold -the shared variables. You can then tell expat (with the XML_SetUserData -function) to pass a pointer to this -structure to the handlers. This is typically the first argument received -by most handlers. - -

    Namespace Processing

    - -

    When the parser is created using the XML_ParserCreateNS, -function, expat performs namespace processing. Under namespace processing, -expat consumes xmlns and xmlns:... attributes, -which declare namespaces for the scope of the element in which they -occur. This means that your start handler will not see these attributes. -Your application can still be informed of these declarations by setting -namespace declaration handlers with - -XML_SetNamespaceDeclHandler. - -

    Element type and attribute names that belong to a given namespace are -passed to the appropriate handler in expanded form. By default this expanded -form is a concatenation of the namespace URI, the separator character (which -is the 2nd argument to XML_ParserCreateNS), and the local -name (i.e. the part after the colon). Names with undeclared prefixes are -passed through to the handlers unchanged, with the prefix and colon still -attached. Unprefixed attribute names are never expanded, and unprefixed -element names are only expanded when they are in the scope of a default -namespace. - -

    However if XML_SetReturnNSTriplet -has been called with a non-zero do_nst parameter, then the -expanded form for names with an explicit prefix is a concatenation of: -URI, separator, local name, separator, prefix. -

    - -

    You can set handlers for the start of a namespace declaration and for -the end of a scope of a declaration with the -XML_SetNamespaceDeclHandler function. -The StartNamespaceDeclHandler is called prior to the start tag handler -and the EndNamespaceDeclHandler is called before the corresponding end tag -that ends the namespace's scope. -The namespace start handler gets passed the prefix and URI for the namespace. -For a default namespace declaration (xmlns='...'), the prefix will be null. -The URI will be null for the case where the default namespace is being unset. -The namespace end handler just gets the prefix for the closing scope. - -

    These handlers are called for each declaration. So if, for instance, a -start tag had three namespace declarations, then the StartNamespaceDeclHandler -would be called three times before the start tag handler is called, once for -each declaration. - -

    The namespace.c example demonstrates the -use of these features. Like outline.c, it produces an outline, but -in addition it annotates when a namespace scope starts and when it ends. -This example also demonstrates use of application user data. - -

    Character Encodings

    - -

    While XML is based on Unicode, and every XML processor is required to -recognized UTF-8 and UTF-16 (1 and 2 byte encodings of Unicode), other -encodings may be declared in XML documents or entities. For the main -document, an XML declaration may contain an encoding declaration: -

    -<?xml version="1.0" encoding="ISO-8859-2"?>
    -
    - -

    External parsed entities may begin with a text declaration, which -looks like an XML declaration with just an encoding declaration: -

    -<?xml encoding="Big5"?>
    -
    - -

    With expat, you may also specify an encoding at the time of creating a -parser. This is useful when the encoding information may come from a source -outside the document itself (like a higher level protocol.) - -

    There are four built-in encodings in expat: -

      -
    • UTF-8 -
    • UTF-16 -
    • ISO-8859-1 -
    • US-ASCII -
    - -

    Anything else discovered in an encoding declaration or in the -protocol encoding specified in the parser constructor, triggers a call -to the UnknownEncodingHandler. This handler gets passed -the encoding name and a pointer to an XML_Encoding data -structure. Your handler must fill in this structure and return 1 if -it knows how to deal with the encoding. Otherwise the handler should -return 0. -The handler also gets passed a pointer to an -optional application data structure that you may indicate when you set -the handler. - -

    Expat places restrictions on character encodings that it can support -by filling in the XML_Encoding structure. -include file: -

      -
    1. Every ASCII character that can appear in a well-formed XML document -must be represented by a single byte, and that byte must correspond to -it's ASCII encoding (except for the characters $@\^'{}~)
    2. -
    3. Characters must be encoded in 4 bytes or less.
    4. -
    5. All characters encoded must have Unicode scalar values less than or -equal to 65535 (0xFFFF)This does not apply to the built-in support -for UTF-16 and UTF-8
    6. -
    7. No character may be encoded by more that one distinct sequence of -bytes
    8. -
    - -

    XML_Encoding contains an array of integers that correspond -to the 1st byte of an encoding sequence. If the value in the array for a -byte is zero or positive, then the byte is a single byte encoding that -encodes the Unicode scalar value contained in the array. A -1 in this array -indicates a malformed byte. If the value is --2, -3, or -4, then the byte is the beginning of a 2, 3, or 4 byte sequence -respectively. Multi-byte sequences are sent to the convert function pointed -at in the XML_Encoding structure. This function should return -the Unicode scalar value for the sequence or -1 if the sequence is malformed. - -

    One pitfall that novice expat users are likely to fall into is that -although expat may accept input in various encodings, the strings that it -passes to the handlers are always encoded in UTF-8. Your application is -responsible for any translation of these strings into other encodings. - -

    Handling External Entity References

    - -

    Expat does not read or parse external entities directly. Note that any -external DTD is a special case of an external entity. -If you've set no ExternalEntityRefHandler, then external -entity references are silently ignored. Otherwise, it calls your handler with -the information needed to read and parse the external entity. - -

    Your handler -isn't actually responsible for parsing the entity, but it is responsible -for creating a subsidiary parser with -XML_ExternalEntityParserCreate that will do the job. This returns -an instance of XML_Parser that has handlers and other data -structures initialized from the parent parser. You may then use -XML_Parse or XML_ParseBuffer calls against this -parser. -Since external entities my refer to other external entities, your handler -should be prepared to be called recursively. - -

    Parsing DTDs

    -

    In order to parse parameter entities, before starting the parse, you must -call XML_SetParamEntityParsing with one of the following -arguments: -

    -
    XML_PARAM_ENTITY_PARSING_NEVER
    -
    Don't parse parameter entities or the external subset
    -
    XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE
    -
    Parse parameter entites and the external subset unless -standalone was set to "yes" in the XML declaration.
    -
    XML_PARAM_ENTITY_PARSING_ALWAYS
    -
    Always parse parameter entities and the external subset
    -
    - -

    In order to read an external DTD, you also have to set an -external entity reference handler as described above. - -


    -

    Some expat Examples

    - -
    - - -

    Expat Reference

    - -

    Parser Creation

    - - -
    -Construct a new parser. If encoding is non-null, it specifies a -character encoding to use for the document. This overrides the document -encoding declaration. There are four built-in encodings: -
      -
    • US-ASCII -
    • UTF-8 -
    • UTF-16 -
    • ISO-8859-1 -
    -Any other value will invoke a call to the UnknownEncodingHandler. -
    - - -
    -Constructs a new parser that has namespace processing in effect. Namespace -expanded element names and attribute names are returned as a concatenation -of the namespace URI, sep, and the local part of the name. This -means that you should pick a character for sep that can't be -part of a legal URI.
    - - -
    -

    Construct a new parser using the suite of memory handling functions -specified in ms. If ms is NULL, then use the -standard set of memory management functions. If sep is -non NULL, then namespace processing is enabled in the created parser -and the character pointed at by sep is used as the separator between -the namespace URI and the local part of the name

    -
    -typedef struct {
    -  void *(*malloc_fcn)(size_t size);
    -  void *(*realloc_fcn)(void *ptr, size_t size);
    -  void (*free_fcn)(void *ptr);
    -} XML_Memory_Handling_Suite;
    -
    -
    - - -
    -Construct a new XML_Parser object for parsing an external general -entity. Context is the context argument passed in a call to a -ExternalEntityRefHandler. Other state information such as handlers, user data, -namespace processing is inherited from the parser passed as the 1st -argument. So you shouldn't need to call any of the behavior changing -functions on this parser (unless you want it to act differently than the -parent parser.) -
    - - -
    -Free memory used by the parser. Your application is responsible for -freeing any memory associated with UserData. -
    - -

    Parsing

    - - - -
    -Parse some more of the document. The string s is a buffer -containing part (or perhaps all) of the document. The number of bytes of s -that are part of the document is indicated by len. This means -that s doesn't have to be null terminated. It also means that -if len is larger than the number of bytes in the block of -memory that s points at, then a memory fault is likely. The -isFinal parameter informs the parser that this is the last -piece of the document. Frequently, the last piece is empty (i.e. -len is zero.) -If a parse error occurred, it returns 0. Otherwise it returns a non-zero -value. -
    - - -
    -This is just like XML_Parse, except in this case expat provides the buffer. -By obtaining the buffer from expat with the XML_GetBuffer -function, the application can avoid double copying of the input. -
    - - -
    -Obtain a buffer of size len to read a piece of the document -into. A NULL value is returned if expat can't allocate enough memory for -this buffer. This has to be called prior to every call to -XML_ParseBuffer. A typical use would look like this: - -
    -
    -for (;;) {
    -  int bytes_read;
    -  void *buff = XML_GetBuffer(p, BUFF_SIZE);
    -  if (buff == NULL) {
    -    /* handle error */
    -  }
    -
    -  bytes_read = read(docfd, buff, BUFF_SIZE);
    -  if (bytes_read < 0) {
    -    /* handle error */
    -  }
    -
    -  if (! XML_ParseBuffer(p, bytes_read, bytes_read == 0)) {
    -    /* handle parse error */
    -  }
    -
    -  if (bytes_read == 0)
    -    break;
    -}  
    -
    -
    -
    - -

    Handler Setting

    -

    Although handlers are typically set prior to parsing and left alone, an -application may choose to set or change the handler for a parsing event -while the parse is in progress. For instance, your application may choose -to ignore all text not descended from a para element. One -way it could do this is to set the character handler when a para start tag -is seen, and unset it for the corresponding end tag. - -

    A handler may be unset by providing a NULL pointer to the -appropriate handler setter. None of the handler setting functions have -a return value. - -

    Your handlers will be receiving strings in arrays of type -XML_Char. This type is defined in expat.h as char * -and contains bytes encoding UTF-8. -Note that you'll receive them in this form independent of the original -encoding of the document.

    - -
    - -
    -typedef void
    -(*XML_StartElementHandler)(void *userData,
    -                           const XML_Char *name,
    -                           const XML_Char **atts);
    -
    -

    Set handler for start (and empty) tags. Attributes are passed to the start -handler as a pointer to a vector of char pointers. Each attribute seen in -a start (or empty) tag occupies 2 consecutive places in this vector: the -attribute name followed by the attribute value. These pairs are terminated -by a null pointer.

    -

    Note that an empty tag generates a call to both start and end handlers -(in that order).

    -
    - -
    - -
    -typedef void
    -(*XML_EndElementHandler)(void *userData,
    -                         const XML_Char *name);
    -
    -

    Set handler for end (and empty) tags. As noted above, an empty tag -generates a call to both start and end handlers.

    -
    - - - -
    - -
    -typedef void
    -(*XML_CharacterDataHandler)(void *userData,
    -                            const XML_Char *s,
    -                            int len);
    -
    -

    Set a text handler. The string your handler receives -is NOT zero terminated. You have to use the length argument -to deal with the end of the string. A single block of contiguous text -free of markup may still result in a sequence of calls to this handler. -In other words, if you're searching for a pattern in the text, it may -be split across calls to this handler.

    -
    - -
    - -
    -typedef void
    -(*XML_ProcessingInstructionHandler)(void *userData,
    -                                    const XML_Char *target,
    -                                    const XML_Char *data);
    -
    -
    -

    Set a handler for processing instructions. The target is the first word -in the processing instruction. The data is the rest of the characters in -it after skipping all whitespace after the initial word.

    -
    - -
    - -
    -typedef void
    -(*XML_CommentHandler)(void *userData,
    -                      const XML_Char *data);
    -
    -

    Set a handler for comments. The data is all text inside the comment -delimiters.

    -
    - -
    - -
    -typedef void
    -(*XML_StartCdataSectionHandler)(void *userData);
    -
    -

    Set a handler that gets called at the beginning of a CDATA section.

    -
    - -
    - -
    -typedef void
    -(*XML_EndCdataSectionHandler)(void *userData);
    -
    -

    Set a handler that gets called at the end of a CDATA section.

    -
    - - - -
    - -
    -typedef void
    -(*XML_DefaultHandler)(void *userData,
    -                      const XML_Char *s,
    -                      int len);
    -
    -

    Sets a handler for any characters in the document which wouldn't -otherwise be handled. This includes both data for which no handlers can be -set (like some kinds of DTD declarations) and data which could be reported -but which currently has no handler set. Note that a contiguous piece of -data that is destined to be reported to the default handler may actually -be reported over several calls to the handler. Setting the handler with -this call has the side effect of turning off expansion of references -to internally defined general entities. Instead these references are -passed to the default handler.

    -
    - -
    - -
    -typedef void
    -(*XML_DefaultHandler)(void *userData,
    -                      const XML_Char *s,
    -                      int len);
    -
    -

    This sets a default handler, but doesn't affect expansion of internal -entity references.

    -
    - -
    - -
    -typedef int
    -(*XML_ExternalEntityRefHandler)(XML_Parser p,
    -                                const XML_Char *context,
    -                                const XML_Char *base,
    -                                const XML_Char *systemId,
    -                                const XML_Char *publicId);
    -
    -

    Set an external entity reference handler. This handler is also -called for processing an external DTD subset if parameter entity parsing -is in effect. (See -XML_SetParamEntityParsing.)

    - - -

    The base parameter is the base to use for relative system identifiers. -It is set by XML_SetBase and may be null. The -public id parameter is the public id given in the entity declaration and -may be null. The system id is the system identifier specified in the entity -declaration and is never null.

    - -

    There are a couple of ways in which this handler differs from others. -First, this handler returns an integer. A non-zero value should be returned -for successful handling of the external entity reference. Returning a zero -indicates failure, and causes the calling parser to return -an XML_ERROR_EXTERNAL_ENTITY_HANDLING error.

    - -

    Second, instead of having userData as its first argument, it receives the -parser that encountered the entity reference. This, along with the context -parameter, may be used as arguments to a call to -XML_ExternalEntityParserCreate. -Using the returned parser, the body of the external entity can be recursively -parsed.

    - -

    Since this handler may be called recursively, it should not be saving -information into global or static variables.

    -
    - -
    - -
    -typedef int
    -(*XML_UnknownEncodingHandler)(void *encodingHandlerData,
    -                              const XML_Char *name,
    -                              XML_Encoding *info);
    -
    -

    Set a handler to deal with encodings other than the -built in set. If the handler knows how -to deal with an encoding with the given name, it should fill in the info -data structure and return 1. Otherwise it should return 0.

    - -
    -    typedef struct {
    -      int map[256];
    -      void *data;
    -      int (*convert)(void *data, const char *s);
    -      void (*release)(void *data);
    -    } XML_Encoding;
    -
    - -

    The map array contains information for every possible possible leading -byte in a byte sequence. If the corresponding value is >= 0, then it's -a single byte sequence and the byte encodes that Unicode value. If the -value is -1, then that byte is invalid as the initial byte in a sequence. -If the value is -n, where n is an integer > 1, then n is the number of -bytes in the sequence and the actual conversion is accomplished by a -call to the function pointed at by convert. This function may return -1 -if the sequence itself is invalid. The convert pointer may be null if -there are only single byte codes. The data parameter passed to the convert -function is the data pointer from XML_Encoding. The string s is NOT -null terminated and points at the sequence of bytes to be converted.

    - -

    The function pointed at by release is called by the parser when it is -finished with the encoding. It may be null.

    -
    - -
    - -
    -typedef void
    -(*XML_StartNamespaceDeclHandler)(void *userData,
    -                                 const XML_Char *prefix,
    -                                 const XML_Char *uri);
    -
    -

    Set a handler to be called when a namespace is declared. Namespace -declarations occur inside start tags. But the namespace declaration start -handler is called before the start tag handler for each namespace declared -in that start tag.

    -
    - -
    - -
    -typedef void
    -(*XML_EndNamespaceDeclHandler)(void *userData,
    -                               const XML_Char *prefix);
    -
    -

    Set a handler to be called when leaving the scope of a namespace -declaration. This will be called, for each namespace declaration, after -the handler for the end tag of the element in which the namespace was declared. -

    -
    - - - -
    - -
    -typedef void
    -(*XML_XmlDeclHandler) (void            *userData,
    -                       const XML_Char  *version,
    -                       const XML_Char  *encoding,
    -                       int             standalone);
    -
    -

    Sets a handler that is called for XML declarations and also for -text declarations discovered in external entities. The way to distinguish -is that the version parameter will be NULL for text -declarations. The encoding parameter may be NULL for -an XML declaration. The standalone argument will contain --1, 0, or 1 indicating respectively that there was no standalone parameter in -the declaration, that it was given as no, or that it was given as yes.

    -
    - -
    - -
    -typedef void
    -(*XML_StartDoctypeDeclHandler)(void           *userData,
    -                               const XML_Char *doctypeName,
    -                               const XML_Char *sysid,
    -                               const XML_Char *pubid,
    -                               int            has_internal_subset);
    -
    -

    Set a handler that is called at the start of a DOCTYPE declaration, -before any external or internal subset is parsed. Both sysid -and pubid may be NULL. The has_internal_subset -will be non-zero if the DOCTYPE declaration has an internal subset.

    -
    - -
    - -
    -typedef void
    -(*XML_EndDoctypeDeclHandler)(void *userData);
    -
    -

    Set a handler that is called at the end of a DOCTYPE declaration, -after parsing any external subset.

    -
    - - - -
    - -
    -typedef void
    -(*XML_ElementDeclHandler)(void *userData,
    -                          const XML_Char *name,
    -                          XML_Content *model);
    -
    -
    -enum XML_Content_Type {
    -  XML_CTYPE_EMPTY = 1,
    -  XML_CTYPE_ANY,
    -  XML_CTYPE_MIXED,
    -  XML_CTYPE_NAME,
    -  XML_CTYPE_CHOICE,
    -  XML_CTYPE_SEQ
    -};
    -
    -enum XML_Content_Quant {
    -  XML_CQUANT_NONE,
    -  XML_CQUANT_OPT,
    -  XML_CQUANT_REP,
    -  XML_CQUANT_PLUS
    -};
    -
    -typedef struct XML_cp XML_Content;
    -
    -struct XML_cp {
    -  enum XML_Content_Type		type;
    -  enum XML_Content_Quant	quant;
    -  const XML_Char *		name;
    -  unsigned int			numchildren;
    -  XML_Content *			children;
    -};
    -
    -

    Sets a handler for element declarations in a DTD. The handler gets called -with the name of the element in the declaration and a pointer to a structure -that contains the element model. It is the application's responsibility to -free this data structure.

    - -

    The model argument is the root of a tree of -XML_Content nodes. If type equals -XML_CTYPE_EMPTY or XML_CTYPE_ANY, then -quant will be XML_CQUANT_NONE, and the other fields -will be zero or NULL. -If type is XML_CTYPE_MIXED, then quant -will be XML_CQUANT_NONE or XML_CQUANT_REP and -numchildren will contain the number of elements that are allowed -to be mixed in and children points to an array of -XML_Content structures that will all have type XML_CTYPE_NAME -with no quantification. -Only the root node can be type XML_CTYPE_EMPTY, XML_CTYPE_ANY, or XML_CTYPE_MIXED.

    - -

    For type XML_CTYPE_NAME, the name field points -to the name and the numchildren and children fields -will be zero and NULL. The quant field will indicate any -quantifiers placed on the name.

    - -

    Types XML_CTYPE_CHOICE and XML_CTYPE_SEQ -indicate a choice or sequence respectively. The numchildren -field indicates how many nodes in the choice or sequence and -children points to the nodes.

    -
    - -
    - -
    -typedef void
    -(*XML_AttlistDeclHandler) (void           *userData,
    -                           const XML_Char *elname,
    -                           const XML_Char *attname,
    -                           const XML_Char *att_type,
    -                           const XML_Char *dflt,
    -                           int            isrequired);
    -
    -

    Set a handler for attlist declarations in the DTD. This handler is called -for each attribute. So a single attlist declaration with multiple -attributes declared will generate multiple calls to this handler. The -elname parameter returns the name of the element for which the -attribute is being declared. The attribute name is in the attname -parameter. The attribute type is in the att_type parameter. -It is the string representing the type in the declaration with whitespace -removed.

    - -

    The dflt parameter holds the default value. It will -be NULL in the case of "#IMPLIED" or "#REQUIRED" attributes. You can -distinguish these two cases by checking the isrequired -parameter, which will be true in the case of "#REQUIRED" attributes. -Attributes which are "#FIXED" will have also have a true -isrequired, but they will have the non-NULL fixed value in the -dflt parameter. -

    -
    - -
    - -
    -typedef void
    -(*XML_EntityDeclHandler) (void           *userData,
    -                          const XML_Char *entityName,
    -                          int            is_parameter_entity,
    -                          const XML_Char *value,
    -                          int            value_length,
    -                          const XML_Char *base,
    -                          const XML_Char *systemId,
    -                          const XML_Char *publicId,
    -                          const XML_Char *notationName);
    -
    -

    Sets a handler that will be called for all entity declarations. -The is_parameter_entity argument will be non-zero in the case -of parameter entities and zero otherwise. -

    -

    For internal entities (<!ENTITY foo "bar">), -value will be non-NULL and systemId, -publicId, and notationName will all be NULL. -The value string is not NULL terminated; the length is provided in -the value_length parameter. Do not use value_length -to test for internal entities, since it is legal to have zero-length -values. Instead check for whether or not value is NULL.

    -

    The notationName argument will have a non-NULL value only -for unparsed entity declarations.

    -
    - -
    - -
    -typedef void
    -(*XML_UnparsedEntityDeclHandler)(void *userData,
    -                                 const XML_Char *entityName,
    -                                 const XML_Char *base,
    -                                 const XML_Char *systemId,
    -                                 const XML_Char *publicId,
    -                                 const XML_Char *notationName);
    -
    -

    Set a handler that receives declarations of unparsed entities. These -are entity declarations that have a notation (NDATA) field:

    - -
    -<!ENTITY logo SYSTEM "images/logo.gif" NDATA gif>
    -
    - -

    This handler is obsolete and is provided for backwards compatibility. -Use instead XML_SetEntityDeclHandler. -

    -
    - -
    - -
    -typedef void
    -(*XML_NotationDeclHandler)(void *userData,
    -                           const XML_Char *notationName,
    -                           const XML_Char *base,
    -                           const XML_Char *systemId,
    -                           const XML_Char *publicId);
    -
    -

    Set a handler that receives notation declarations.

    -
    - -
    - -
    -typedef int 
    -(*XML_NotStandaloneHandler)(void *userData);
    -
    -

    Set a handler that is called if the document is not "standalone". -This happens when there is an external subset or a reference to a parameter -entity, but does not have standalone set to "yes" in an XML declaration. -If this handler returns 0, then the parser will throw an -XML_ERROR_NOT_STANDALONE error.

    -
    - -

    Parse position and error reporting functions

    -

    These are the functions you'll want to call when the parse functions -return 0 (i.e. a parse error has ocurred), although the position reporting -functions are useful outside of errors. The position reported is the byte -position (in the original document or entity encoding) of the first of the -sequence of characters that generated the current event (or the error that -caused the parse functions to return 0.)

    -

    The position reporting functions are accurate only outside of the DTD. -In other words, they usually return bogus information when called from within -a DTD declaration handler.

    - - -
    -Return what type of error has occurred. -
    - - -
    -Return a string describing the error corresponding to code. -The code should be one of the enums that can be returned from -XML_GetErrorCode. -
    - - -
    -Return the byte offset of the position. -
    - - -
    -Return the line number of the position. -
    - - -
    -Return the offset, from the beginning of the current line, of -the position. -
    - - -
    -Return the number of bytes in the current event. Returns 0 if the event is -inside a reference to an internal entity. -
    - - -
    -

    Returns the parser's input buffer, sets the integer pointed at by -offset to the offset within this buffer of the current -parse position, and set the integer pointed at by size -to the size of the returned buffer.

    -

    This should only be called from within a handler during an active -parse and the returned buffer should only be referred to from within -the handler that made the call. This input buffer contains the untranslated -bytes of the input.

    -

    Only a limited amount of context is kept, so if the event triggering -a call spans over a very large amount of input, the actual parse position -may be before the beginning of the buffer.

    -
    - -

    Miscellaneous functions

    -

    The functions in this section either obtain state information from the -parser or can be used to dynamicly set parser options. - -

    -
    -This sets the user data pointer that gets passed to handlers. -It overwrites any previous value for this pointer. Note that the -application is responsible for freeing the memory associated with -userData when it is finished with the parser. So if -you call this when there's already a pointer there, and you haven't -freed the memory associated with it, then you've probably just leaked -memory. -
    - - -
    -This returns the user data pointer that gets passed to handlers. -It is actually implemented as a macro. -
    - - -
    -After this is called, handlers receive the parser in the -userData argument. The userData information can still be obtained using -the XML_GetUserData function. -
    - - -
    -Set the base to be used for resolving relative URIs in system identifiers. -The return value is 0 if there's no memory to store base, otherwise it's -non-zero. -
    - - -
    -Return the base for resolving relative URIs. -
    - - -
    -When attributes are reported to the start handler in the atts vector, -attributes that were explicitly set in the element occur before any -attributes that receive their value from default information in an -ATTLIST declaration. This function returns the number of attributes that -were explicitly set times two, thus giving the offset in the atts -array passed to the start tag handler of the first attribute set -due to defaults. It supplies information for the last call to a start -handler. If called inside a start handler, then that means the current call. -
    - - -
    -Returns the index of the ID attribute passed in the atts array -in the last call to XML_StartElementHandler, or -1 if there is no ID -attribute. If called inside a start handler, then that means the current call. -
    - - -
    -Set the encoding to be used by the parser. It is equivalent to -passing a non-null encoding argument to the parser creation functions. -It must not be called after XML_Parser or XML_ParseBuffer have been -called on the given parser. -
    - - -
    -This enables parsing of parameter entities, including the external -parameter entity that is the external DTD subset, according to -code. -The choices for code are: -
      -
    • XML_PARAM_ENTITY_PARSING_NEVER -
    • XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE -
    • XML_PARAM_ENTITY_PARSING_ALWAYS -
    -
    - - -
    -

    -This function only has an effect when using a parser created with -XML_ParserCreateNS, i.e. when namespace -processing is in effect. The do_nst sets whether or not prefixes -are returned with names qualified with a namespace prefix. If this function -is called with do_nst non-zero, then afterwards namespace -qualified names (that is qualified with a prefix as opposed to belonging -to a default namespace) are returned as a triplet with the three parts -separated by the namespace separator specified when the parser was created. -The order of returned parts is URI, local name, and prefix.

    -

    If do_nst is zero, then namespaces are reported in the -default manner, URI then local_name separated by the namespace separator.

    -
    - - -
    -Return the library version string (e.g. "expat_1.95.1"). - -
    - - - diff --git a/Build/source/libs/expat/doc/style.css b/Build/source/libs/expat/doc/style.css deleted file mode 100644 index 343e974dba5..00000000000 --- a/Build/source/libs/expat/doc/style.css +++ /dev/null @@ -1,47 +0,0 @@ -body { -background-color: white -} - -.eg { - padding-left: 1em; - padding-top: .5em; - border: solid thin; - margin: 1em 0; - background-color: tan; - margin-left: 5%; - margin-right: 10%; -} - -.handler { - width: 100%; - border-top-width: thin; - margin-left: 5%; - margin-bottom: 1em; -} - -.handler p { - margin-left: 3%; -} - -.setter { - font-weight: bold; -} - -.signature { - color: navy; -} - -.fcndec { - width: 100%; - border-top-width: thin; - font-weight: bold; -} - -.fcndef { - margin-left: 5%; - margin-bottom: 2em; -} - -dd { -margin-bottom: 2em; -} \ No newline at end of file diff --git a/Build/source/libs/expat/examples/Makefile.in b/Build/source/libs/expat/examples/Makefile.in deleted file mode 100644 index 76a771195a5..00000000000 --- a/Build/source/libs/expat/examples/Makefile.in +++ /dev/null @@ -1,29 +0,0 @@ -################################################################ -# Process this file with top-level configure script to produce Makefile -# -# Copyright 2000 Clark Cooper -# -# This file is part of EXPAT. -# -# EXPAT is free software; you can redistribute it and/or modify it -# under the terms of the License (based on the MIT/X license) contained -# in the file COPYING that comes with this distribution. -# -# EXPAT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# SOFTWARE OR THE USE OR OTHER DEALINGS IN EXPAT. -# - -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -LIBS = -lexpat -CFLAGS = @CFLAGS@ - -all: outline - -outline: outline.o - $(CC) -o outline outline.o $(LDFLAGS) $(LIBS) \ No newline at end of file diff --git a/Build/source/libs/expat/examples/outline.c b/Build/source/libs/expat/examples/outline.c deleted file mode 100644 index 22ab278d770..00000000000 --- a/Build/source/libs/expat/examples/outline.c +++ /dev/null @@ -1,86 +0,0 @@ -/***************************************************************** - * outline.c - * - * Copyright 1999, Clark Cooper - * All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the license contained in the - * COPYING file that comes with the expat distribution. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Read an XML document from standard input and print an element - * outline on standard output. - */ - - -#include -#include - -#define BUFFSIZE 8192 - -char Buff[BUFFSIZE]; - -int Depth; - -void -start(void *data, const char *el, const char **attr) { - int i; - - for (i = 0; i < Depth; i++) - printf(" "); - - printf("%s", el); - - for (i = 0; attr[i]; i += 2) { - printf(" %s='%s'", attr[i], attr[i + 1]); - } - - printf("\n"); - Depth++; -} /* End of start handler */ - -void -end(void *data, const char *el) { - Depth--; -} /* End of end handler */ - -main(int argc, char **argv) { - XML_Parser p = XML_ParserCreate(NULL); - if (! p) { - fprintf(stderr, "Couldn't allocate memory for parser\n"); - exit(-1); - } - - XML_SetElementHandler(p, start, end); - - for (;;) { - int done; - int len; - - len = fread(Buff, 1, BUFFSIZE, stdin); - if (ferror(stdin)) { - fprintf(stderr, "Read error\n"); - exit(-1); - } - done = feof(stdin); - - if (! XML_Parse(p, Buff, len, done)) { - fprintf(stderr, "Parse error at line %d:\n%s\n", - XML_GetCurrentLineNumber(p), - XML_ErrorString(XML_GetErrorCode(p))); - exit(-1); - } - - if (done) - break; - } -} /* End of main */ - diff --git a/Build/source/libs/expat/lib/Makefile.in b/Build/source/libs/expat/lib/Makefile.in deleted file mode 100644 index 24c43d94469..00000000000 --- a/Build/source/libs/expat/lib/Makefile.in +++ /dev/null @@ -1,168 +0,0 @@ -################################################################ -# Process this file with top-level configure script to produce Makefile -# -# Copyright 2000 Clark Cooper -# -# This file is part of EXPAT. -# -# EXPAT is free software; you can redistribute it and/or modify it -# under the terms of the License (based on the MIT/X license) contained -# in the file COPYING that comes with this distribution. -# -# EXPAT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# SOFTWARE OR THE USE OR OTHER DEALINGS IN EXPAT. -# - - -SHELL = @SHELL@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -oldincludedir = /usr/include - -subdir = lib - -DESTDIR = - -top_builddir = .. - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_DATA = @INSTALL_DATA@ - -host_alias = @host_alias@ -host_triplet = @host@ -AS = @AS@ -CC = @CC@ -DLLTOOL = @DLLTOOL@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -OBJDUMP = @OBJDUMP@ -PACKAGE = @PACKAGE@ -RANLIB = @RANLIB@ -VERSION = @VERSION@ - -LIBRARY = libexpat.la -SOURCES = xmlparse.c xmltok.c xmlrole.c -OBJECTS = $(SOURCES:.c=.o) -LTOBJECTS = $(SOURCES:.c=.lo) - -TEMPLATES = xmltok_impl.c xmltok_ns.c -APIHEADER = expat.h -HEADERS = ascii.h iasciitab.h utf8tab.h xmltok.h asciitab.h latin1tab.h \ - nametab.h xmldef.h xmlrole.h xmltok_impl.h - -mkinstalldirs = $(SHELL) $(top_srcdir)/conftools/mkinstalldirs -CONFIG_HEADER = ../config.h -CONFIG_CLEAN_FILES = - -INCLUDES = -I$(srcdir) -I.. -DEFS = @DEFS@ -DPACKAGE='"$(PACKAGE)"' -DVERSION='"$(PACKAGE)_$(VERSION)"' -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -LIBS = @LIBS@ -CFLAGS = @CFLAGS@ - -LIBREVISION = @LIBREVISION@ -LIBCURRENT = @LIBCURRENT@ -LIBAGE = @LIBAGE@ - -COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --mode=link $(CCLD) -version-info $(LIBCURRENT):$(LIBREVISION):$(LIBAGE) $(CFLAGS) $(LDFLAGS) -o $@ -DIST_COMMON = Makefile.in - - -DISTFILES = $(DIST_COMMON) $(SOURCES) $(TEMPLATES) $(APIHEADER) $(HEADERS) - -TAR = gtar -GZIP_ENV = --best - -all: $(LIBRARY) - -.SUFFIXES: .c .lo .o -.PHONY: all clean distclean maintainer-clean - -.c.o: - @echo '$(COMPILE) -c $<'; \ - $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< - @-cp .deps/$(*F).pp .deps/$(*F).P; \ - tr ' ' '\012' < .deps/$(*F).pp \ - | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ - >> .deps/$(*F).P; \ - rm .deps/$(*F).pp - -.c.lo: - @echo '$(LTCOMPILE) -c $<'; \ - test -d .deps || mkdir .deps ; \ - $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< - @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ - < .deps/$(*F).pp > .deps/$(*F).P; \ - tr ' ' '\012' < .deps/$(*F).pp \ - | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ - >> .deps/$(*F).P; \ - rm -f .deps/$(*F).pp - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - -$(top_builddir)/config.status: $(top_builddir)/configure - cd $(top_builddir) && $(MAKE) config.status - -$(top_builddir)/config.h: $(top_builddir)/config.hin - cd $(top_builddir) && $(MAKE) config.h - -clean: - rm -f $(LIBRARY) *.o *.lo *~ - rm -rf .libs _libs .deps - -distclean: clean - rm -f Makefile - -maintainer-clean: distclean - -install: $(LIBRARY) $(APIHEADER) - $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir) - $(LIBTOOL) --mode=install $(INSTALL) $(LIBRARY) $(DESTDIR)$(libdir)/$(LIBRARY) - $(INSTALL_DATA) $(APIHEADER) $(DESTDIR)$(includedir) - -uninstall: - $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$(LIBRARY); - rm -f $(DESTDIR)$(libdir)/$(APIHEADER) - -$(LIBRARY): $(LTOBJECTS) - $(LINK) -rpath $(libdir) $(LDFLAGS) $(LTOBJECTS) - -xmlparse.o \ -xmlparse.lo: xmlparse.c expat.h xmlrole.h xmltok.h $(top_builddir)/config.h - -xmlrole.o \ -xmlrole.lo: xmlrole.c ascii.h xmlrole.h $(top_builddir)/config.h - -xmltok.o \ -xmltok.lo: xmltok.c xmltok_impl.c xmltok_ns.c \ - ascii.h asciitab.h iasciitab.h latin1tab.h nametab.h utf8tab.h \ - xmltok.h xmltok_impl.h $(top_builddir)/config.h diff --git a/Build/source/libs/expat/lib/ascii.h b/Build/source/libs/expat/lib/ascii.h deleted file mode 100644 index 6376b1f311b..00000000000 --- a/Build/source/libs/expat/lib/ascii.h +++ /dev/null @@ -1,86 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -#define ASCII_A 0x41 -#define ASCII_B 0x42 -#define ASCII_C 0x43 -#define ASCII_D 0x44 -#define ASCII_E 0x45 -#define ASCII_F 0x46 -#define ASCII_G 0x47 -#define ASCII_H 0x48 -#define ASCII_I 0x49 -#define ASCII_J 0x4A -#define ASCII_K 0x4B -#define ASCII_L 0x4C -#define ASCII_M 0x4D -#define ASCII_N 0x4E -#define ASCII_O 0x4F -#define ASCII_P 0x50 -#define ASCII_Q 0x51 -#define ASCII_R 0x52 -#define ASCII_S 0x53 -#define ASCII_T 0x54 -#define ASCII_U 0x55 -#define ASCII_V 0x56 -#define ASCII_W 0x57 -#define ASCII_X 0x58 -#define ASCII_Y 0x59 -#define ASCII_Z 0x5A - -#define ASCII_a 0x61 -#define ASCII_b 0x62 -#define ASCII_c 0x63 -#define ASCII_d 0x64 -#define ASCII_e 0x65 -#define ASCII_f 0x66 -#define ASCII_g 0x67 -#define ASCII_h 0x68 -#define ASCII_i 0x69 -#define ASCII_j 0x6A -#define ASCII_k 0x6B -#define ASCII_l 0x6C -#define ASCII_m 0x6D -#define ASCII_n 0x6E -#define ASCII_o 0x6F -#define ASCII_p 0x70 -#define ASCII_q 0x71 -#define ASCII_r 0x72 -#define ASCII_s 0x73 -#define ASCII_t 0x74 -#define ASCII_u 0x75 -#define ASCII_v 0x76 -#define ASCII_w 0x77 -#define ASCII_x 0x78 -#define ASCII_y 0x79 -#define ASCII_z 0x7A - -#define ASCII_0 0x30 -#define ASCII_1 0x31 -#define ASCII_2 0x32 -#define ASCII_3 0x33 -#define ASCII_4 0x34 -#define ASCII_5 0x35 -#define ASCII_6 0x36 -#define ASCII_7 0x37 -#define ASCII_8 0x38 -#define ASCII_9 0x39 - -#define ASCII_TAB 0x09 -#define ASCII_SPACE 0x20 -#define ASCII_EXCL 0x21 -#define ASCII_QUOT 0x22 -#define ASCII_AMP 0x26 -#define ASCII_APOS 0x27 -#define ASCII_MINUS 0x2D -#define ASCII_PERIOD 0x2E -#define ASCII_COLON 0x3A -#define ASCII_SEMI 0x3B -#define ASCII_LT 0x3C -#define ASCII_EQUALS 0x3D -#define ASCII_GT 0x3E -#define ASCII_LSQB 0x5B -#define ASCII_RSQB 0x5D -#define ASCII_UNDERSCORE 0x5F diff --git a/Build/source/libs/expat/lib/asciitab.h b/Build/source/libs/expat/lib/asciitab.h deleted file mode 100644 index eb445cc52c1..00000000000 --- a/Build/source/libs/expat/lib/asciitab.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, -/* 0x0C */ BT_NONXML, BT_CR, BT_NONXML, BT_NONXML, -/* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, -/* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, -/* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, -/* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, -/* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, -/* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, -/* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, -/* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, -/* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, -/* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, -/* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, -/* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, -/* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, -/* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, -/* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, -/* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, diff --git a/Build/source/libs/expat/lib/config.h b/Build/source/libs/expat/lib/config.h deleted file mode 100644 index 77b1ece8ca1..00000000000 --- a/Build/source/libs/expat/lib/config.h +++ /dev/null @@ -1,27 +0,0 @@ -/*================================================================ -** Copyright 2000, Clark Cooper -** All rights reserved. -** -** This is free software. You are permitted to copy, distribute, or modify -** it under the terms of the MIT/X license (contained in the COPYING file -** with this distribution.) -** -** -*/ - -#ifndef WINCONFIG_H -#define WINCONFIG_H - -#define WIN32_LEAN_AND_MEAN -#include -#undef WIN32_LEAN_AND_MEAN - -#include -#include - -#define XML_NS 1 -#define XML_DTD 1 -#define XML_BYTE_ORDER 12 -#define XML_CONTEXT_BYTES 1024 - -#endif /* ndef WINCONFIG_H */ diff --git a/Build/source/libs/expat/lib/expat.dep b/Build/source/libs/expat/lib/expat.dep deleted file mode 100644 index 067e3fb33fe..00000000000 --- a/Build/source/libs/expat/lib/expat.dep +++ /dev/null @@ -1,32 +0,0 @@ -# Microsoft Developer Studio Generated Dependency File, included by expat.mak - -.\xmlparse.c : \ - ".\expat.h"\ - ".\winconfig.h"\ - ".\xmlrole.h"\ - ".\xmltok.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\xmlrole.c : \ - ".\ascii.h"\ - ".\winconfig.h"\ - ".\xmlrole.h"\ - ".\xmltok.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\xmltok.c : \ - ".\ascii.h"\ - ".\asciitab.h"\ - ".\iasciitab.h"\ - ".\latin1tab.h"\ - ".\nametab.h"\ - ".\utf8tab.h"\ - ".\winconfig.h"\ - ".\xmltok.h"\ - ".\xmltok_impl.c"\ - ".\xmltok_impl.h"\ - ".\xmltok_ns.c"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - diff --git a/Build/source/libs/expat/lib/expat.dsp b/Build/source/libs/expat/lib/expat.dsp deleted file mode 100644 index 0d975d01b76..00000000000 --- a/Build/source/libs/expat/lib/expat.dsp +++ /dev/null @@ -1,105 +0,0 @@ -# Microsoft Developer Studio Project File - Name="expat" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=expat - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "expat.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "expat.mak" CFG="expat - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "expat - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "expat - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "expat - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "COMPILED_FROM_DSP" /D VERSION=\"expat_1.95.1\" /YX /FD /c -# ADD BASE RSC /l 0x40c /d "NDEBUG" -# ADD RSC /l 0x40c /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ELSEIF "$(CFG)" == "expat - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "expat___Win32_Debug" -# PROP BASE Intermediate_Dir "expat___Win32_Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "COMPILED_FROM_DSP" /D VERSION=\"expat_1.95.1\" /FD /GZ /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x40c /d "_DEBUG" -# ADD RSC /l 0x40c /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ENDIF - -# Begin Target - -# Name "expat - Win32 Release" -# Name "expat - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\xmlparse.c -# End Source File -# Begin Source File - -SOURCE=.\xmlrole.c -# End Source File -# Begin Source File - -SOURCE=.\xmltok.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# End Target -# End Project diff --git a/Build/source/libs/expat/lib/expat.dsw b/Build/source/libs/expat/lib/expat.dsw deleted file mode 100644 index 65adfb9369d..00000000000 --- a/Build/source/libs/expat/lib/expat.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "expat"=".\expat.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/Build/source/libs/expat/lib/expat.h b/Build/source/libs/expat/lib/expat.h deleted file mode 100644 index 3df19ed613d..00000000000 --- a/Build/source/libs/expat/lib/expat.h +++ /dev/null @@ -1,712 +0,0 @@ -/* -Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -#ifndef XmlParse_INCLUDED -#define XmlParse_INCLUDED 1 - -#include - -#ifndef XMLPARSEAPI -# ifdef __declspec -# define XMLPARSEAPI __declspec(dllimport) -# else -# define XMLPARSEAPI /* nothing */ -# endif -#endif /* not defined XMLPARSEAPI */ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void *XML_Parser; - -/* Information is UTF-8 encoded. */ -typedef char XML_Char; -typedef char XML_LChar; - -enum XML_Content_Type { - XML_CTYPE_EMPTY = 1, - XML_CTYPE_ANY, - XML_CTYPE_MIXED, - XML_CTYPE_NAME, - XML_CTYPE_CHOICE, - XML_CTYPE_SEQ -}; - -enum XML_Content_Quant { - XML_CQUANT_NONE, - XML_CQUANT_OPT, - XML_CQUANT_REP, - XML_CQUANT_PLUS -}; - -/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be - XML_CQUANT_NONE, and the other fields will be zero or NULL. - If type == XML_CTYPE_MIXED, then quant will be NONE or REP and - numchildren will contain number of elements that may be mixed in - and children point to an array of XML_Content cells that will be - all of XML_CTYPE_NAME type with no quantification. - - If type == XML_CTYPE_NAME, then the name points to the name, and - the numchildren field will be zero and children will be NULL. The - quant fields indicates any quantifiers placed on the name. - - CHOICE and SEQ will have name NULL, the number of children in - numchildren and children will point, recursively, to an array - of XML_Content cells. - - The EMPTY, ANY, and MIXED types will only occur at top level. -*/ - -typedef struct XML_cp XML_Content; - -struct XML_cp { - enum XML_Content_Type type; - enum XML_Content_Quant quant; - const XML_Char * name; - unsigned int numchildren; - XML_Content * children; -}; - - -/* This is called for an element declaration. See above for - description of the model argument. It's the caller's responsibility - to free model when finished with it. -*/ - -typedef void (*XML_ElementDeclHandler) (void *userData, - const XML_Char *name, - XML_Content *model); - -void XMLPARSEAPI -XML_SetElementDeclHandler(XML_Parser parser, - XML_ElementDeclHandler eldecl); - -/* - The Attlist declaration handler is called for *each* attribute. So - a single Attlist declaration with multiple attributes declared will - generate multiple calls to this handler. The "default" parameter - may be NULL in the case of the "#IMPLIED" or "#REQUIRED" keyword. - The "isrequired" parameter will be true and the default value will - be NULL in the case of "#REQUIRED". If "isrequired" is true and - default is non-NULL, then this is a "#FIXED" default. - */ - -typedef void (*XML_AttlistDeclHandler) (void *userData, - const XML_Char *elname, - const XML_Char *attname, - const XML_Char *att_type, - const XML_Char *dflt, - int isrequired); - -void XMLPARSEAPI -XML_SetAttlistDeclHandler(XML_Parser parser, - XML_AttlistDeclHandler attdecl); - - - /* The XML declaration handler is called for *both* XML declarations and - text declarations. The way to distinguish is that the version parameter - will be null for text declarations. The encoding parameter may be null - for XML declarations. The standalone parameter will be -1, 0, or 1 - indicating respectively that there was no standalone parameter in - the declaration, that it was given as no, or that it was given as yes. - */ - -typedef void (*XML_XmlDeclHandler) (void *userData, - const XML_Char *version, - const XML_Char *encoding, - int standalone); - -void XMLPARSEAPI -XML_SetXmlDeclHandler(XML_Parser parser, - XML_XmlDeclHandler xmldecl); - - -typedef struct { - void *(__cdecl * malloc_fcn)(size_t size); - void *(__cdecl * realloc_fcn)(void *ptr, size_t size); - void (__cdecl * free_fcn)(void *ptr); -} XML_Memory_Handling_Suite; - -/* Constructs a new parser; encoding is the encoding specified by the external -protocol or null if there is none specified. */ - -XML_Parser XMLPARSEAPI -XML_ParserCreate(const XML_Char *encoding); - -/* Constructs a new parser and namespace processor. Element type names -and attribute names that belong to a namespace will be expanded; -unprefixed attribute names are never expanded; unprefixed element type -names are expanded only if there is a default namespace. The expanded -name is the concatenation of the namespace URI, the namespace separator character, -and the local part of the name. If the namespace separator is '\0' then -the namespace URI and the local part will be concatenated without any -separator. When a namespace is not declared, the name and prefix will be -passed through without expansion. */ - -XML_Parser XMLPARSEAPI -XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); - - -/* Constructs a new parser using the memory management suit referred to - by memsuite. If memsuite is NULL, then use the standard library memory - suite. If namespaceSeparator is non-NULL it creates a parser with - namespace processing as described above. The character pointed at - will serve as the namespace separator. - - All further memory operations used for the created parser will come from - the given suite. -*/ - -XML_Parser XMLPARSEAPI -XML_ParserCreate_MM(const XML_Char *encoding, - const XML_Memory_Handling_Suite *memsuite, - const XML_Char *namespaceSeparator); - -/* atts is array of name/value pairs, terminated by 0; - names and values are 0 terminated. */ - -typedef void (*XML_StartElementHandler)(void *userData, - const XML_Char *name, - const XML_Char **atts); - -typedef void (*XML_EndElementHandler)(void *userData, - const XML_Char *name); - - -/* s is not 0 terminated. */ -typedef void (*XML_CharacterDataHandler)(void *userData, - const XML_Char *s, - int len); - -/* target and data are 0 terminated */ -typedef void (*XML_ProcessingInstructionHandler)(void *userData, - const XML_Char *target, - const XML_Char *data); - -/* data is 0 terminated */ -typedef void (*XML_CommentHandler)(void *userData, const XML_Char *data); - -typedef void (*XML_StartCdataSectionHandler)(void *userData); -typedef void (*XML_EndCdataSectionHandler)(void *userData); - -/* This is called for any characters in the XML document for -which there is no applicable handler. This includes both -characters that are part of markup which is of a kind that is -not reported (comments, markup declarations), or characters -that are part of a construct which could be reported but -for which no handler has been supplied. The characters are passed -exactly as they were in the XML document except that -they will be encoded in UTF-8. Line boundaries are not normalized. -Note that a byte order mark character is not passed to the default handler. -There are no guarantees about how characters are divided between calls -to the default handler: for example, a comment might be split between -multiple calls. */ - -typedef void (*XML_DefaultHandler)(void *userData, - const XML_Char *s, - int len); - -/* This is called for the start of the DOCTYPE declaration, before - any DTD or internal subset is parsed. */ - -typedef void (*XML_StartDoctypeDeclHandler)(void *userData, - const XML_Char *doctypeName, - const XML_Char *sysid, - const XML_Char *pubid, - int has_internal_subset - ); - -/* This is called for the start of the DOCTYPE declaration when the -closing > is encountered, but after processing any external subset. */ -typedef void (*XML_EndDoctypeDeclHandler)(void *userData); - -/* This is called for entity declarations. The is_parameter_entity - argument will be non-zero if the entity is a parameter entity, zero - otherwise. - - For internal entities (), value will - be non-null and systemId, publicID, and notationName will be null. - The value string is NOT null terminated; the length is provided in - the value_length argument. Since it is legal to have zero-length - values, do not use this argument to test for internal entities. - - For external entities, value will be null and systemId will be non-null. - The publicId argument will be null unless a public identifier was - provided. The notationName argument will have a non-null value only - for unparsed entity declarations. -*/ - -typedef void (*XML_EntityDeclHandler) (void *userData, - const XML_Char *entityName, - int is_parameter_entity, - const XML_Char *value, - int value_length, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId, - const XML_Char *notationName); - -void XMLPARSEAPI -XML_SetEntityDeclHandler(XML_Parser parser, - XML_EntityDeclHandler handler); - -/* OBSOLETE -- OBSOLETE -- OBSOLETE - This handler has been superceded by the EntityDeclHandler above. - It is provided here for backward compatibility. -This is called for a declaration of an unparsed (NDATA) -entity. The base argument is whatever was set by XML_SetBase. -The entityName, systemId and notationName arguments will never be null. -The other arguments may be. */ - -typedef void (*XML_UnparsedEntityDeclHandler)(void *userData, - const XML_Char *entityName, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId, - const XML_Char *notationName); - -/* This is called for a declaration of notation. -The base argument is whatever was set by XML_SetBase. -The notationName will never be null. The other arguments can be. */ - -typedef void (*XML_NotationDeclHandler)(void *userData, - const XML_Char *notationName, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId); - -/* When namespace processing is enabled, these are called once for -each namespace declaration. The call to the start and end element -handlers occur between the calls to the start and end namespace -declaration handlers. For an xmlns attribute, prefix will be null. -For an xmlns="" attribute, uri will be null. */ - -typedef void (*XML_StartNamespaceDeclHandler)(void *userData, - const XML_Char *prefix, - const XML_Char *uri); - -typedef void (*XML_EndNamespaceDeclHandler)(void *userData, - const XML_Char *prefix); - -/* This is called if the document is not standalone (it has an -external subset or a reference to a parameter entity, but does not -have standalone="yes"). If this handler returns 0, then processing -will not continue, and the parser will return a -XML_ERROR_NOT_STANDALONE error. */ - -typedef int (*XML_NotStandaloneHandler)(void *userData); - -/* This is called for a reference to an external parsed general entity. -The referenced entity is not automatically parsed. -The application can parse it immediately or later using -XML_ExternalEntityParserCreate. -The parser argument is the parser parsing the entity containing the reference; -it can be passed as the parser argument to XML_ExternalEntityParserCreate. -The systemId argument is the system identifier as specified in the entity declaration; -it will not be null. -The base argument is the system identifier that should be used as the base for -resolving systemId if systemId was relative; this is set by XML_SetBase; -it may be null. -The publicId argument is the public identifier as specified in the entity declaration, -or null if none was specified; the whitespace in the public identifier -will have been normalized as required by the XML spec. -The context argument specifies the parsing context in the format -expected by the context argument to -XML_ExternalEntityParserCreate; context is valid only until the handler -returns, so if the referenced entity is to be parsed later, it must be copied. -The handler should return 0 if processing should not continue because of -a fatal error in the handling of the external entity. -In this case the calling parser will return an XML_ERROR_EXTERNAL_ENTITY_HANDLING -error. -Note that unlike other handlers the first argument is the parser, not userData. */ - -typedef int (*XML_ExternalEntityRefHandler)(XML_Parser parser, - const XML_Char *context, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId); - -/* This structure is filled in by the XML_UnknownEncodingHandler -to provide information to the parser about encodings that are unknown -to the parser. -The map[b] member gives information about byte sequences -whose first byte is b. -If map[b] is c where c is >= 0, then b by itself encodes the Unicode scalar value c. -If map[b] is -1, then the byte sequence is malformed. -If map[b] is -n, where n >= 2, then b is the first byte of an n-byte -sequence that encodes a single Unicode scalar value. -The data member will be passed as the first argument to the convert function. -The convert function is used to convert multibyte sequences; -s will point to a n-byte sequence where map[(unsigned char)*s] == -n. -The convert function must return the Unicode scalar value -represented by this byte sequence or -1 if the byte sequence is malformed. -The convert function may be null if the encoding is a single-byte encoding, -that is if map[b] >= -1 for all bytes b. -When the parser is finished with the encoding, then if release is not null, -it will call release passing it the data member; -once release has been called, the convert function will not be called again. - -Expat places certain restrictions on the encodings that are supported -using this mechanism. - -1. Every ASCII character that can appear in a well-formed XML document, -other than the characters - - $@\^`{}~ - -must be represented by a single byte, and that byte must be the -same byte that represents that character in ASCII. - -2. No character may require more than 4 bytes to encode. - -3. All characters encoded must have Unicode scalar values <= 0xFFFF, -(ie characters that would be encoded by surrogates in UTF-16 -are not allowed). Note that this restriction doesn't apply to -the built-in support for UTF-8 and UTF-16. - -4. No Unicode character may be encoded by more than one distinct sequence -of bytes. */ - -typedef struct { - int map[256]; - void *data; - int (*convert)(void *data, const char *s); - void (*release)(void *data); -} XML_Encoding; - -/* This is called for an encoding that is unknown to the parser. -The encodingHandlerData argument is that which was passed as the -second argument to XML_SetUnknownEncodingHandler. -The name argument gives the name of the encoding as specified in -the encoding declaration. -If the callback can provide information about the encoding, -it must fill in the XML_Encoding structure, and return 1. -Otherwise it must return 0. -If info does not describe a suitable encoding, -then the parser will return an XML_UNKNOWN_ENCODING error. */ - -typedef int (*XML_UnknownEncodingHandler)(void *encodingHandlerData, - const XML_Char *name, - XML_Encoding *info); - -void XMLPARSEAPI -XML_SetElementHandler(XML_Parser parser, - XML_StartElementHandler start, - XML_EndElementHandler end); - -void XMLPARSEAPI -XML_SetStartElementHandler(XML_Parser, XML_StartElementHandler); - -void XMLPARSEAPI -XML_SetEndElementHandler(XML_Parser, XML_EndElementHandler); - -void XMLPARSEAPI -XML_SetCharacterDataHandler(XML_Parser parser, - XML_CharacterDataHandler handler); - -void XMLPARSEAPI -XML_SetProcessingInstructionHandler(XML_Parser parser, - XML_ProcessingInstructionHandler handler); -void XMLPARSEAPI -XML_SetCommentHandler(XML_Parser parser, - XML_CommentHandler handler); - -void XMLPARSEAPI -XML_SetCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start, - XML_EndCdataSectionHandler end); - -void XMLPARSEAPI -XML_SetStartCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start); - -void XMLPARSEAPI -XML_SetEndCdataSectionHandler(XML_Parser parser, - XML_EndCdataSectionHandler end); - -/* This sets the default handler and also inhibits expansion of internal entities. -The entity reference will be passed to the default handler. */ - -void XMLPARSEAPI -XML_SetDefaultHandler(XML_Parser parser, - XML_DefaultHandler handler); - -/* This sets the default handler but does not inhibit expansion of internal entities. -The entity reference will not be passed to the default handler. */ - -void XMLPARSEAPI -XML_SetDefaultHandlerExpand(XML_Parser parser, - XML_DefaultHandler handler); - -void XMLPARSEAPI -XML_SetDoctypeDeclHandler(XML_Parser parser, - XML_StartDoctypeDeclHandler start, - XML_EndDoctypeDeclHandler end); - -void XMLPARSEAPI -XML_SetStartDoctypeDeclHandler(XML_Parser parser, - XML_StartDoctypeDeclHandler start); - -void XMLPARSEAPI -XML_SetEndDoctypeDeclHandler(XML_Parser parser, - XML_EndDoctypeDeclHandler end); - -void XMLPARSEAPI -XML_SetUnparsedEntityDeclHandler(XML_Parser parser, - XML_UnparsedEntityDeclHandler handler); - -void XMLPARSEAPI -XML_SetNotationDeclHandler(XML_Parser parser, - XML_NotationDeclHandler handler); - -void XMLPARSEAPI -XML_SetNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start, - XML_EndNamespaceDeclHandler end); - -void XMLPARSEAPI -XML_SetStartNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start); - -void XMLPARSEAPI -XML_SetEndNamespaceDeclHandler(XML_Parser parser, - XML_EndNamespaceDeclHandler end); - -void XMLPARSEAPI -XML_SetNotStandaloneHandler(XML_Parser parser, - XML_NotStandaloneHandler handler); - -void XMLPARSEAPI -XML_SetExternalEntityRefHandler(XML_Parser parser, - XML_ExternalEntityRefHandler handler); - -/* If a non-null value for arg is specified here, then it will be passed -as the first argument to the external entity ref handler instead -of the parser object. */ -void XMLPARSEAPI -XML_SetExternalEntityRefHandlerArg(XML_Parser, void *arg); - -void XMLPARSEAPI -XML_SetUnknownEncodingHandler(XML_Parser parser, - XML_UnknownEncodingHandler handler, - void *encodingHandlerData); - -/* This can be called within a handler for a start element, end element, -processing instruction or character data. It causes the corresponding -markup to be passed to the default handler. */ -void XML_DefaultCurrent(XML_Parser parser); - -/* If do_nst is non-zero, and namespace processing is in effect, and - a name has a prefix (i.e. an explicit namespace qualifier) then - that name is returned as a triplet in a single - string separated by the separator character specified when the parser - was created: URI + sep + local_name + sep + prefix. - - If do_nst is zero, then namespace information is returned in the - default manner (URI + sep + local_name) whether or not the names - has a prefix. -*/ - -void XMLPARSEAPI -XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); - -/* This value is passed as the userData argument to callbacks. */ -void XMLPARSEAPI -XML_SetUserData(XML_Parser parser, void *userData); - -/* Returns the last value set by XML_SetUserData or null. */ -#define XML_GetUserData(parser) (*(void **)(parser)) - -/* This is equivalent to supplying an encoding argument -to XML_ParserCreate. It must not be called after XML_Parse -or XML_ParseBuffer. */ - -int XMLPARSEAPI -XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); - -/* If this function is called, then the parser will be passed -as the first argument to callbacks instead of userData. -The userData will still be accessible using XML_GetUserData. */ - -void XMLPARSEAPI -XML_UseParserAsHandlerArg(XML_Parser parser); - -/* Sets the base to be used for resolving relative URIs in system identifiers in -declarations. Resolving relative identifiers is left to the application: -this value will be passed through as the base argument to the -XML_ExternalEntityRefHandler, XML_NotationDeclHandler -and XML_UnparsedEntityDeclHandler. The base argument will be copied. -Returns zero if out of memory, non-zero otherwise. */ - -int XMLPARSEAPI -XML_SetBase(XML_Parser parser, const XML_Char *base); - -const XML_Char XMLPARSEAPI * -XML_GetBase(XML_Parser parser); - -/* Returns the number of the attribute/value pairs passed in last call -to the XML_StartElementHandler that were specified in the start-tag -rather than defaulted. Each attribute/value pair counts as 2; thus -this correspondds to an index into the atts array passed to the -XML_StartElementHandler. */ - -int XMLPARSEAPI -XML_GetSpecifiedAttributeCount(XML_Parser parser); - -/* Returns the index of the ID attribute passed in the last call to -XML_StartElementHandler, or -1 if there is no ID attribute. Each -attribute/value pair counts as 2; thus this correspondds to an index -into the atts array passed to the XML_StartElementHandler. */ - -int XMLPARSEAPI -XML_GetIdAttributeIndex(XML_Parser parser); - -/* Parses some input. Returns 0 if a fatal error is detected. -The last call to XML_Parse must have isFinal true; -len may be zero for this call (or any other). */ -int XMLPARSEAPI -XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); - -void XMLPARSEAPI * -XML_GetBuffer(XML_Parser parser, int len); - -int XMLPARSEAPI -XML_ParseBuffer(XML_Parser parser, int len, int isFinal); - -/* Creates an XML_Parser object that can parse an external general entity; -context is a '\0'-terminated string specifying the parse context; -encoding is a '\0'-terminated string giving the name of the externally specified encoding, -or null if there is no externally specified encoding. -The context string consists of a sequence of tokens separated by formfeeds (\f); -a token consisting of a name specifies that the general entity of the name -is open; a token of the form prefix=uri specifies the namespace for a particular -prefix; a token of the form =uri specifies the default namespace. -This can be called at any point after the first call to an ExternalEntityRefHandler -so longer as the parser has not yet been freed. -The new parser is completely independent and may safely be used in a separate thread. -The handlers and userData are initialized from the parser argument. -Returns 0 if out of memory. Otherwise returns a new XML_Parser object. */ -XML_Parser XMLPARSEAPI -XML_ExternalEntityParserCreate(XML_Parser parser, - const XML_Char *context, - const XML_Char *encoding); - -enum XML_ParamEntityParsing { - XML_PARAM_ENTITY_PARSING_NEVER, - XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, - XML_PARAM_ENTITY_PARSING_ALWAYS -}; - -/* Controls parsing of parameter entities (including the external DTD -subset). If parsing of parameter entities is enabled, then references -to external parameter entities (including the external DTD subset) -will be passed to the handler set with -XML_SetExternalEntityRefHandler. The context passed will be 0. -Unlike external general entities, external parameter entities can only -be parsed synchronously. If the external parameter entity is to be -parsed, it must be parsed during the call to the external entity ref -handler: the complete sequence of XML_ExternalEntityParserCreate, -XML_Parse/XML_ParseBuffer and XML_ParserFree calls must be made during -this call. After XML_ExternalEntityParserCreate has been called to -create the parser for the external parameter entity (context must be 0 -for this call), it is illegal to make any calls on the old parser -until XML_ParserFree has been called on the newly created parser. If -the library has been compiled without support for parameter entity -parsing (ie without XML_DTD being defined), then -XML_SetParamEntityParsing will return 0 if parsing of parameter -entities is requested; otherwise it will return non-zero. */ - -int XMLPARSEAPI -XML_SetParamEntityParsing(XML_Parser parser, - enum XML_ParamEntityParsing parsing); - -enum XML_Error { - XML_ERROR_NONE, - XML_ERROR_NO_MEMORY, - XML_ERROR_SYNTAX, - XML_ERROR_NO_ELEMENTS, - XML_ERROR_INVALID_TOKEN, - XML_ERROR_UNCLOSED_TOKEN, - XML_ERROR_PARTIAL_CHAR, - XML_ERROR_TAG_MISMATCH, - XML_ERROR_DUPLICATE_ATTRIBUTE, - XML_ERROR_JUNK_AFTER_DOC_ELEMENT, - XML_ERROR_PARAM_ENTITY_REF, - XML_ERROR_UNDEFINED_ENTITY, - XML_ERROR_RECURSIVE_ENTITY_REF, - XML_ERROR_ASYNC_ENTITY, - XML_ERROR_BAD_CHAR_REF, - XML_ERROR_BINARY_ENTITY_REF, - XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, - XML_ERROR_MISPLACED_XML_PI, - XML_ERROR_UNKNOWN_ENCODING, - XML_ERROR_INCORRECT_ENCODING, - XML_ERROR_UNCLOSED_CDATA_SECTION, - XML_ERROR_EXTERNAL_ENTITY_HANDLING, - XML_ERROR_NOT_STANDALONE, - XML_ERROR_UNEXPECTED_STATE -}; - -/* If XML_Parse or XML_ParseBuffer have returned 0, then XML_GetErrorCode -returns information about the error. */ - -enum XML_Error XMLPARSEAPI -XML_GetErrorCode(XML_Parser parser); - -/* These functions return information about the current parse location. -They may be called when XML_Parse or XML_ParseBuffer return 0; -in this case the location is the location of the character at which -the error was detected. -They may also be called from any other callback called to report -some parse event; in this the location is the location of the first -of the sequence of characters that generated the event. */ - -int XMLPARSEAPI XML_GetCurrentLineNumber(XML_Parser parser); -int XMLPARSEAPI XML_GetCurrentColumnNumber(XML_Parser parser); -long XMLPARSEAPI XML_GetCurrentByteIndex(XML_Parser parser); - -/* Return the number of bytes in the current event. -Returns 0 if the event is in an internal entity. */ - -int XMLPARSEAPI -XML_GetCurrentByteCount(XML_Parser parser); - -/* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets - the integer pointed to by offset to the offset within this buffer - of the current parse position, and sets the integer pointed to by size - to the size of this buffer (the number of input bytes). Otherwise - returns a null pointer. Also returns a null pointer if a parse isn't active. - - NOTE: The character pointer returned should not be used outside - the handler that makes the call. */ - -const char XMLPARSEAPI * -XML_GetInputContext(XML_Parser parser, - int *offset, - int *size); - -/* For backwards compatibility with previous versions. */ -#define XML_GetErrorLineNumber XML_GetCurrentLineNumber -#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber -#define XML_GetErrorByteIndex XML_GetCurrentByteIndex - -/* Frees memory used by the parser. */ -void XMLPARSEAPI -XML_ParserFree(XML_Parser parser); - -/* Returns a string describing the error. */ -const XML_LChar XMLPARSEAPI * -XML_ErrorString(int code); - -/* Return a string containing the version number of this expat */ -const XML_LChar XMLPARSEAPI * -XML_ExpatVersion(); - -#ifdef __cplusplus -} -#endif - -#endif /* not XmlParse_INCLUDED */ diff --git a/Build/source/libs/expat/lib/expat.mak b/Build/source/libs/expat/lib/expat.mak deleted file mode 100644 index 0ef8041b1d1..00000000000 --- a/Build/source/libs/expat/lib/expat.mak +++ /dev/null @@ -1,168 +0,0 @@ -# Microsoft Developer Studio Generated NMAKE File, Based on expat.dsp -!IF "$(CFG)" == "" -CFG=expat - Win32 Debug -!MESSAGE No configuration specified. Defaulting to expat - Win32 Debug. -!ENDIF - -!IF "$(CFG)" != "expat - Win32 Release" && "$(CFG)" != "expat - Win32 Debug" -!MESSAGE Invalid configuration "$(CFG)" specified. -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "expat.mak" CFG="expat - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "expat - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "expat - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE -!ERROR An invalid configuration is specified. -!ENDIF - -!IF "$(OS)" == "Windows_NT" -NULL= -!ELSE -NULL=nul -!ENDIF - -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "expat - Win32 Release" - -OUTDIR=.\Release -INTDIR=.\Release -# Begin Custom Macros -OutDir=.\Release -# End Custom Macros - -ALL : "$(OUTDIR)\expat.lib" - - -CLEAN : - -@erase "$(INTDIR)\vc60.idb" - -@erase "$(INTDIR)\xmlparse.obj" - -@erase "$(INTDIR)\xmlrole.obj" - -@erase "$(INTDIR)\xmltok.obj" - -@erase "$(OUTDIR)\expat.lib" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "COMPILED_FROM_DSP" /D VERSION=\"expat_1.95.1\" /Fp"$(INTDIR)\expat.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c -BSC32=bscmake.exe -BSC32_FLAGS=/nologo /o"$(OUTDIR)\expat.bsc" -BSC32_SBRS= \ - -LIB32=link.exe -lib -LIB32_FLAGS=/nologo /out:"$(OUTDIR)\expat.lib" -LIB32_OBJS= \ - "$(INTDIR)\xmlparse.obj" \ - "$(INTDIR)\xmlrole.obj" \ - "$(INTDIR)\xmltok.obj" - -"$(OUTDIR)\expat.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) - $(LIB32) @<< - $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) -<< - -!ELSEIF "$(CFG)" == "expat - Win32 Debug" - -OUTDIR=.\Debug -INTDIR=.\Debug -# Begin Custom Macros -OutDir=.\Debug -# End Custom Macros - -ALL : "$(OUTDIR)\expat.lib" - - -CLEAN : - -@erase "$(INTDIR)\vc60.idb" - -@erase "$(INTDIR)\vc60.pdb" - -@erase "$(INTDIR)\xmlparse.obj" - -@erase "$(INTDIR)\xmlrole.obj" - -@erase "$(INTDIR)\xmltok.obj" - -@erase "$(OUTDIR)\expat.lib" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "COMPILED_FROM_DSP" /D VERSION=\"expat_1.95.1\" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c -BSC32=bscmake.exe -BSC32_FLAGS=/nologo /o"$(OUTDIR)\expat.bsc" -BSC32_SBRS= \ - -LIB32=link.exe -lib -LIB32_FLAGS=/nologo /out:"$(OUTDIR)\expat.lib" -LIB32_OBJS= \ - "$(INTDIR)\xmlparse.obj" \ - "$(INTDIR)\xmlrole.obj" \ - "$(INTDIR)\xmltok.obj" - -"$(OUTDIR)\expat.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) - $(LIB32) @<< - $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) -<< - -!ENDIF - -.c{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cpp{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cxx{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.c{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cpp{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cxx{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - - -!IF "$(NO_EXTERNAL_DEPS)" != "1" -!IF EXISTS("expat.dep") -!INCLUDE "expat.dep" -!ELSE -!MESSAGE Warning: cannot find "expat.dep" -!ENDIF -!ENDIF - - -!IF "$(CFG)" == "expat - Win32 Release" || "$(CFG)" == "expat - Win32 Debug" -SOURCE=.\xmlparse.c - -"$(INTDIR)\xmlparse.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\xmlrole.c - -"$(INTDIR)\xmlrole.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\xmltok.c - -"$(INTDIR)\xmltok.obj" : $(SOURCE) "$(INTDIR)" - - - -!ENDIF - diff --git a/Build/source/libs/expat/lib/expat.plg b/Build/source/libs/expat/lib/expat.plg deleted file mode 100644 index da52bfdd21f..00000000000 --- a/Build/source/libs/expat/lib/expat.plg +++ /dev/null @@ -1,16 +0,0 @@ - - -
    -

    Build Log

    -

    ---------------------Configuration: expat - Win32 Debug-------------------- -

    -

    Command Lines

    - - - -

    Results

    -expat.lib - 0 error(s), 0 warning(s) -
    - - diff --git a/Build/source/libs/expat/lib/expat.vcproj b/Build/source/libs/expat/lib/expat.vcproj deleted file mode 100644 index 8f62d2587a7..00000000000 --- a/Build/source/libs/expat/lib/expat.vcproj +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Build/source/libs/expat/lib/iasciitab.h b/Build/source/libs/expat/lib/iasciitab.h deleted file mode 100644 index 55dbc398b87..00000000000 --- a/Build/source/libs/expat/lib/iasciitab.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -/* Like asciitab.h, except that 0xD has code BT_S rather than BT_CR */ -/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, -/* 0x0C */ BT_NONXML, BT_S, BT_NONXML, BT_NONXML, -/* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, -/* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, -/* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, -/* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, -/* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, -/* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, -/* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, -/* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, -/* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, -/* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, -/* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, -/* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, -/* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, -/* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, -/* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, -/* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, diff --git a/Build/source/libs/expat/lib/latin1tab.h b/Build/source/libs/expat/lib/latin1tab.h deleted file mode 100644 index 178b1d186dd..00000000000 --- a/Build/source/libs/expat/lib/latin1tab.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -/* 0x80 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0x84 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0x88 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0x8C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0x90 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0x94 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0x98 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0x9C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0xA0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0xA4 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0xA8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, -/* 0xAC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0xB0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0xB4 */ BT_OTHER, BT_NMSTRT, BT_OTHER, BT_NAME, -/* 0xB8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, -/* 0xBC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0xC0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xC4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xC8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xCC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xD0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xD4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, -/* 0xD8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xDC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xE0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xE4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xE8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xEC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xF0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xF4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, -/* 0xF8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xFC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, diff --git a/Build/source/libs/expat/lib/nametab.h b/Build/source/libs/expat/lib/nametab.h deleted file mode 100644 index b05e62c77a6..00000000000 --- a/Build/source/libs/expat/lib/nametab.h +++ /dev/null @@ -1,150 +0,0 @@ -static const unsigned namingBitmap[] = { -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, -0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, -0x00000000, 0x04000000, 0x87FFFFFE, 0x07FFFFFE, -0x00000000, 0x00000000, 0xFF7FFFFF, 0xFF7FFFFF, -0xFFFFFFFF, 0x7FF3FFFF, 0xFFFFFDFE, 0x7FFFFFFF, -0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE00F, 0xFC31FFFF, -0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, -0xFFFFFFFF, 0xF80001FF, 0x00000003, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0xFFFFD740, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, -0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, -0xFFFF0003, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, -0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, -0x0000007F, 0x00000000, 0xFFFF0000, 0x000707FF, -0x00000000, 0x07FFFFFE, 0x000007FE, 0xFFFE0000, -0xFFFFFFFF, 0x7CFFFFFF, 0x002F7FFF, 0x00000060, -0xFFFFFFE0, 0x23FFFFFF, 0xFF000000, 0x00000003, -0xFFF99FE0, 0x03C5FDFF, 0xB0000000, 0x00030003, -0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, -0xFFFBAFE0, 0x23EDFDFF, 0x00000000, 0x00000001, -0xFFF99FE0, 0x23CDFDFF, 0xB0000000, 0x00000003, -0xD63DC7E0, 0x03BFC718, 0x00000000, 0x00000000, -0xFFFDDFE0, 0x03EFFDFF, 0x00000000, 0x00000003, -0xFFFDDFE0, 0x03EFFDFF, 0x40000000, 0x00000003, -0xFFFDDFE0, 0x03FFFDFF, 0x00000000, 0x00000003, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0xFFFFFFFE, 0x000D7FFF, 0x0000003F, 0x00000000, -0xFEF02596, 0x200D6CAE, 0x0000001F, 0x00000000, -0x00000000, 0x00000000, 0xFFFFFEFF, 0x000003FF, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0xFFFFFFFF, 0xFFFF003F, 0x007FFFFF, -0x0007DAED, 0x50000000, 0x82315001, 0x002C62AB, -0x40000000, 0xF580C900, 0x00000007, 0x02010800, -0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, -0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, -0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, -0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, -0x00000000, 0x00004C40, 0x00000000, 0x00000000, -0x00000007, 0x00000000, 0x00000000, 0x00000000, -0x00000080, 0x000003FE, 0xFFFFFFFE, 0xFFFFFFFF, -0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x07FFFFFF, -0xFFFFFFE0, 0x00001FFF, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, -0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, -0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, -0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, -0x00000000, 0x07FF6000, 0x87FFFFFE, 0x07FFFFFE, -0x00000000, 0x00800000, 0xFF7FFFFF, 0xFF7FFFFF, -0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, -0xFFFFFFFF, 0xF80001FF, 0x00030003, 0x00000000, -0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000003, -0xFFFFD7C0, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, -0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, -0xFFFF007B, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, -0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, -0xFFFE007F, 0xBBFFFFFB, 0xFFFF0016, 0x000707FF, -0x00000000, 0x07FFFFFE, 0x0007FFFF, 0xFFFF03FF, -0xFFFFFFFF, 0x7CFFFFFF, 0xFFEF7FFF, 0x03FF3DFF, -0xFFFFFFEE, 0xF3FFFFFF, 0xFF1E3FFF, 0x0000FFCF, -0xFFF99FEE, 0xD3C5FDFF, 0xB080399F, 0x0003FFCF, -0xFFF987E4, 0xD36DFDFF, 0x5E003987, 0x001FFFC0, -0xFFFBAFEE, 0xF3EDFDFF, 0x00003BBF, 0x0000FFC1, -0xFFF99FEE, 0xF3CDFDFF, 0xB0C0398F, 0x0000FFC3, -0xD63DC7EC, 0xC3BFC718, 0x00803DC7, 0x0000FF80, -0xFFFDDFEE, 0xC3EFFDFF, 0x00603DDF, 0x0000FFC3, -0xFFFDDFEC, 0xC3EFFDFF, 0x40603DDF, 0x0000FFC3, -0xFFFDDFEC, 0xC3FFFDFF, 0x00803DCF, 0x0000FFC3, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FFF, 0x00000000, -0xFEF02596, 0x3BFF6CAE, 0x03FF3F5F, 0x00000000, -0x03000000, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE03FF, -0xFEBF0FDF, 0x02FE3FFF, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x1FFF0000, 0x00000002, -0x000000A0, 0x003EFFFE, 0xFFFFFFFE, 0xFFFFFFFF, -0x661FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x77FFFFFF, -}; -static const unsigned char nmstrtPages[] = { -0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00, -0x00, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, -0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, -0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x15, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -static const unsigned char namePages[] = { -0x19, 0x03, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x00, -0x00, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, -0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, -0x26, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x27, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; diff --git a/Build/source/libs/expat/lib/utf8tab.h b/Build/source/libs/expat/lib/utf8tab.h deleted file mode 100644 index 9e3b6b83eb6..00000000000 --- a/Build/source/libs/expat/lib/utf8tab.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - - -/* 0x80 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0x84 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0x88 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0x8C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0x90 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0x94 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0x98 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0x9C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xA0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xA4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xA8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xAC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xB0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xB4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xB8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xBC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xC0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xC4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xC8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xCC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xD0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xD4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xD8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xDC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xE0 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, -/* 0xE4 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, -/* 0xE8 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, -/* 0xEC */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, -/* 0xF0 */ BT_LEAD4, BT_LEAD4, BT_LEAD4, BT_LEAD4, -/* 0xF4 */ BT_LEAD4, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0xF8 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0xFC */ BT_NONXML, BT_NONXML, BT_MALFORM, BT_MALFORM, diff --git a/Build/source/libs/expat/lib/winconfig.h b/Build/source/libs/expat/lib/winconfig.h deleted file mode 100644 index 2863a2642bf..00000000000 --- a/Build/source/libs/expat/lib/winconfig.h +++ /dev/null @@ -1,29 +0,0 @@ -/*================================================================ -** Copyright 2000, Clark Cooper -** All rights reserved. -** -** This is free software. You are permitted to copy, distribute, or modify -** it under the terms of the MIT/X license (contained in the COPYING file -** with this distribution.) -** -** -*/ - -#ifndef WINCONFIG_H -#define WINCONFIG_H - -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#include -#undef WIN32_LEAN_AND_MEAN - -#include -#include - -#define XML_NS 1 -#define XML_DTD 1 -#define XML_BYTE_ORDER 12 -#define XML_CONTEXT_BYTES 1024 - -#endif /* ndef WINCONFIG_H */ diff --git a/Build/source/libs/expat/lib/xmlparse.c b/Build/source/libs/expat/lib/xmlparse.c deleted file mode 100644 index c7ccb9f7264..00000000000 --- a/Build/source/libs/expat/lib/xmlparse.c +++ /dev/null @@ -1,4625 +0,0 @@ -/* -Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -static char RCSId[] - = "$Header: /cvsroot/expat/expat/lib/xmlparse.c,v 1.11 2000/10/22 19:20:23 coopercc Exp $"; - -#ifdef COMPILED_FROM_DSP -# include "winconfig.h" -# define XMLPARSEAPI __declspec(dllexport) -# include "expat.h" -# undef XMLPARSEAPI -#else -#include - -#ifdef __declspec -# define XMLPARSEAPI __declspec(dllexport) -#endif - -#include "expat.h" - -#ifdef __declspec -# undef XMLPARSEAPI -#endif -#endif /* ndef COMPILED_FROM_DSP */ - -#include - -#ifdef XML_UNICODE -#define XML_ENCODE_MAX XML_UTF16_ENCODE_MAX -#define XmlConvert XmlUtf16Convert -#define XmlGetInternalEncoding XmlGetUtf16InternalEncoding -#define XmlGetInternalEncodingNS XmlGetUtf16InternalEncodingNS -#define XmlEncode XmlUtf16Encode -#define MUST_CONVERT(enc, s) (!(enc)->isUtf16 || (((unsigned long)s) & 1)) -typedef unsigned short ICHAR; -#else -#define XML_ENCODE_MAX XML_UTF8_ENCODE_MAX -#define XmlConvert XmlUtf8Convert -#define XmlGetInternalEncoding XmlGetUtf8InternalEncoding -#define XmlGetInternalEncodingNS XmlGetUtf8InternalEncodingNS -#define XmlEncode XmlUtf8Encode -#define MUST_CONVERT(enc, s) (!(enc)->isUtf8) -typedef char ICHAR; -#endif - - -#ifndef XML_NS - -#define XmlInitEncodingNS XmlInitEncoding -#define XmlInitUnknownEncodingNS XmlInitUnknownEncoding -#undef XmlGetInternalEncodingNS -#define XmlGetInternalEncodingNS XmlGetInternalEncoding -#define XmlParseXmlDeclNS XmlParseXmlDecl - -#endif - -#ifdef XML_UNICODE_WCHAR_T -#define XML_T(x) L ## x -#else -#define XML_T(x) x -#endif - -/* Round up n to be a multiple of sz, where sz is a power of 2. */ -#define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1)) - -#include "xmltok.h" -#include "xmlrole.h" - -typedef const XML_Char *KEY; - -typedef struct { - KEY name; -} NAMED; - -typedef struct { - NAMED **v; - size_t size; - size_t used; - size_t usedLim; - XML_Memory_Handling_Suite *mem; -} HASH_TABLE; - -typedef struct { - NAMED **p; - NAMED **end; -} HASH_TABLE_ITER; - -#define INIT_TAG_BUF_SIZE 32 /* must be a multiple of sizeof(XML_Char) */ -#define INIT_DATA_BUF_SIZE 1024 -#define INIT_ATTS_SIZE 16 -#define INIT_BLOCK_SIZE 1024 -#define INIT_BUFFER_SIZE 1024 - -#define EXPAND_SPARE 24 - -typedef struct binding { - struct prefix *prefix; - struct binding *nextTagBinding; - struct binding *prevPrefixBinding; - const struct attribute_id *attId; - XML_Char *uri; - int uriLen; - int uriAlloc; -} BINDING; - -typedef struct prefix { - const XML_Char *name; - BINDING *binding; -} PREFIX; - -typedef struct { - const XML_Char *str; - const XML_Char *localPart; - int uriLen; -} TAG_NAME; - -typedef struct tag { - struct tag *parent; - const char *rawName; - int rawNameLength; - TAG_NAME name; - char *buf; - char *bufEnd; - BINDING *bindings; -} TAG; - -typedef struct { - const XML_Char *name; - const XML_Char *textPtr; - int textLen; - const XML_Char *systemId; - const XML_Char *base; - const XML_Char *publicId; - const XML_Char *notation; - char open; - char is_param; -} ENTITY; - -typedef struct { - enum XML_Content_Type type; - enum XML_Content_Quant quant; - const XML_Char * name; - int firstchild; - int lastchild; - int childcnt; - int nextsib; -} CONTENT_SCAFFOLD; - -typedef struct block { - struct block *next; - int size; - XML_Char s[1]; -} BLOCK; - -typedef struct { - BLOCK *blocks; - BLOCK *freeBlocks; - const XML_Char *end; - XML_Char *ptr; - XML_Char *start; - XML_Memory_Handling_Suite *mem; -} STRING_POOL; - -/* The XML_Char before the name is used to determine whether -an attribute has been specified. */ -typedef struct attribute_id { - XML_Char *name; - PREFIX *prefix; - char maybeTokenized; - char xmlns; -} ATTRIBUTE_ID; - -typedef struct { - const ATTRIBUTE_ID *id; - char isCdata; - const XML_Char *value; -} DEFAULT_ATTRIBUTE; - -typedef struct { - const XML_Char *name; - PREFIX *prefix; - const ATTRIBUTE_ID *idAtt; - int nDefaultAtts; - int allocDefaultAtts; - DEFAULT_ATTRIBUTE *defaultAtts; -} ELEMENT_TYPE; - -typedef struct { - HASH_TABLE generalEntities; - HASH_TABLE elementTypes; - HASH_TABLE attributeIds; - HASH_TABLE prefixes; - STRING_POOL pool; - int complete; - int standalone; -#ifdef XML_DTD - HASH_TABLE paramEntities; -#endif /* XML_DTD */ - PREFIX defaultPrefix; - /* === scaffolding for building content model === */ - int in_eldecl; - CONTENT_SCAFFOLD *scaffold; - unsigned contentStringLen; - unsigned scaffSize; - unsigned scaffCount; - int scaffLevel; - int *scaffIndex; -} DTD; - -typedef struct open_internal_entity { - const char *internalEventPtr; - const char *internalEventEndPtr; - struct open_internal_entity *next; - ENTITY *entity; -} OPEN_INTERNAL_ENTITY; - -typedef enum XML_Error Processor(XML_Parser parser, - const char *start, - const char *end, - const char **endPtr); - -static Processor prologProcessor; -static Processor prologInitProcessor; -static Processor contentProcessor; -static Processor cdataSectionProcessor; -#ifdef XML_DTD -static Processor ignoreSectionProcessor; -#endif /* XML_DTD */ -static Processor epilogProcessor; -static Processor errorProcessor; -static Processor externalEntityInitProcessor; -static Processor externalEntityInitProcessor2; -static Processor externalEntityInitProcessor3; -static Processor externalEntityContentProcessor; - -static enum XML_Error -handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName); -static enum XML_Error -processXmlDecl(XML_Parser parser, int isGeneralTextEntity, const char *, const char *); -static enum XML_Error -initializeEncoding(XML_Parser parser); -static enum XML_Error -doProlog(XML_Parser parser, const ENCODING *enc, const char *s, - const char *end, int tok, const char *next, const char **nextPtr); -static enum XML_Error -processInternalParamEntity(XML_Parser parser, ENTITY *entity); -static enum XML_Error -doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, - const char *start, const char *end, const char **endPtr); -static enum XML_Error -doCdataSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, const char **nextPtr); -#ifdef XML_DTD -static enum XML_Error -doIgnoreSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, const char **nextPtr); -#endif /* XML_DTD */ -static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *, const char *s, - TAG_NAME *tagNamePtr, BINDING **bindingsPtr); -static -int addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr); - -static int -defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *, - int isCdata, int isId, const XML_Char *dfltValue, - XML_Parser parser); - -static enum XML_Error -storeAttributeValue(XML_Parser parser, const ENCODING *, int isCdata, const char *, const char *, - STRING_POOL *); -static enum XML_Error -appendAttributeValue(XML_Parser parser, const ENCODING *, int isCdata, const char *, const char *, - STRING_POOL *); -static ATTRIBUTE_ID * -getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); -static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *); -static enum XML_Error -storeEntityValue(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); -static int -reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); -static int -reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); -static void -reportDefault(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); - -static const XML_Char *getContext(XML_Parser parser); -static int setContext(XML_Parser parser, const XML_Char *context); -static void normalizePublicId(XML_Char *s); -static int dtdInit(DTD *, XML_Parser parser); - -static void dtdDestroy(DTD *, XML_Parser parser); - -static int dtdCopy(DTD *newDtd, const DTD *oldDtd, XML_Parser parser); - -static int copyEntityTable(HASH_TABLE *, STRING_POOL *, const HASH_TABLE *, - XML_Parser parser); - -#ifdef XML_DTD -static void dtdSwap(DTD *, DTD *); -#endif /* XML_DTD */ - -static NAMED *lookup(HASH_TABLE *table, KEY name, size_t createSize); - -static void hashTableInit(HASH_TABLE *, XML_Memory_Handling_Suite *ms); - -static void hashTableDestroy(HASH_TABLE *); -static void hashTableIterInit(HASH_TABLE_ITER *, const HASH_TABLE *); -static NAMED *hashTableIterNext(HASH_TABLE_ITER *); -static void poolInit(STRING_POOL *, XML_Memory_Handling_Suite *ms); -static void poolClear(STRING_POOL *); -static void poolDestroy(STRING_POOL *); -static XML_Char *poolAppend(STRING_POOL *pool, const ENCODING *enc, - const char *ptr, const char *end); -static XML_Char *poolStoreString(STRING_POOL *pool, const ENCODING *enc, - const char *ptr, const char *end); - -static int poolGrow(STRING_POOL *pool); - -static int nextScaffoldPart(XML_Parser parser); -static XML_Content *build_model(XML_Parser parser); - -static const XML_Char *poolCopyString(STRING_POOL *pool, const XML_Char *s); -static const XML_Char *poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n); -static const XML_Char *poolAppendString(STRING_POOL *pool, const XML_Char *s); -static ELEMENT_TYPE * getElementType(XML_Parser Paraser, - const ENCODING *enc, - const char *ptr, - const char *end); - -#define poolStart(pool) ((pool)->start) -#define poolEnd(pool) ((pool)->ptr) -#define poolLength(pool) ((pool)->ptr - (pool)->start) -#define poolChop(pool) ((void)--(pool->ptr)) -#define poolLastChar(pool) (((pool)->ptr)[-1]) -#define poolDiscard(pool) ((pool)->ptr = (pool)->start) -#define poolFinish(pool) ((pool)->start = (pool)->ptr) -#define poolAppendChar(pool, c) \ - (((pool)->ptr == (pool)->end && !poolGrow(pool)) \ - ? 0 \ - : ((*((pool)->ptr)++ = c), 1)) - -typedef struct { - /* The first member must be userData so that the XML_GetUserData macro works. */ - void *m_userData; - void *m_handlerArg; - char *m_buffer; - XML_Memory_Handling_Suite m_mem; - /* first character to be parsed */ - const char *m_bufferPtr; - /* past last character to be parsed */ - char *m_bufferEnd; - /* allocated end of buffer */ - const char *m_bufferLim; - long m_parseEndByteIndex; - const char *m_parseEndPtr; - XML_Char *m_dataBuf; - XML_Char *m_dataBufEnd; - XML_StartElementHandler m_startElementHandler; - XML_EndElementHandler m_endElementHandler; - XML_CharacterDataHandler m_characterDataHandler; - XML_ProcessingInstructionHandler m_processingInstructionHandler; - XML_CommentHandler m_commentHandler; - XML_StartCdataSectionHandler m_startCdataSectionHandler; - XML_EndCdataSectionHandler m_endCdataSectionHandler; - XML_DefaultHandler m_defaultHandler; - XML_StartDoctypeDeclHandler m_startDoctypeDeclHandler; - XML_EndDoctypeDeclHandler m_endDoctypeDeclHandler; - XML_UnparsedEntityDeclHandler m_unparsedEntityDeclHandler; - XML_NotationDeclHandler m_notationDeclHandler; - XML_StartNamespaceDeclHandler m_startNamespaceDeclHandler; - XML_EndNamespaceDeclHandler m_endNamespaceDeclHandler; - XML_NotStandaloneHandler m_notStandaloneHandler; - XML_ExternalEntityRefHandler m_externalEntityRefHandler; - void *m_externalEntityRefHandlerArg; - XML_UnknownEncodingHandler m_unknownEncodingHandler; - XML_ElementDeclHandler m_elementDeclHandler; - XML_AttlistDeclHandler m_attlistDeclHandler; - XML_EntityDeclHandler m_entityDeclHandler; - XML_XmlDeclHandler m_xmlDeclHandler; - const ENCODING *m_encoding; - INIT_ENCODING m_initEncoding; - const ENCODING *m_internalEncoding; - const XML_Char *m_protocolEncodingName; - int m_ns; - int m_ns_triplets; - void *m_unknownEncodingMem; - void *m_unknownEncodingData; - void *m_unknownEncodingHandlerData; - void (*m_unknownEncodingRelease)(void *); - PROLOG_STATE m_prologState; - Processor *m_processor; - enum XML_Error m_errorCode; - const char *m_eventPtr; - const char *m_eventEndPtr; - const char *m_positionPtr; - OPEN_INTERNAL_ENTITY *m_openInternalEntities; - int m_defaultExpandInternalEntities; - int m_tagLevel; - ENTITY *m_declEntity; - const XML_Char *m_doctypeName; - const XML_Char *m_doctypeSysid; - const XML_Char *m_doctypePubid; - const XML_Char *m_declAttributeType; - const XML_Char *m_declNotationName; - const XML_Char *m_declNotationPublicId; - ELEMENT_TYPE *m_declElementType; - ATTRIBUTE_ID *m_declAttributeId; - char m_declAttributeIsCdata; - char m_declAttributeIsId; - DTD m_dtd; - const XML_Char *m_curBase; - TAG *m_tagStack; - TAG *m_freeTagList; - BINDING *m_inheritedBindings; - BINDING *m_freeBindingList; - int m_attsSize; - int m_nSpecifiedAtts; - int m_idAttIndex; - ATTRIBUTE *m_atts; - POSITION m_position; - STRING_POOL m_tempPool; - STRING_POOL m_temp2Pool; - char *m_groupConnector; - unsigned m_groupSize; - int m_hadExternalDoctype; - XML_Char m_namespaceSeparator; -#ifdef XML_DTD - enum XML_ParamEntityParsing m_paramEntityParsing; - XML_Parser m_parentParser; -#endif -} Parser; - -#define MALLOC(s) (((Parser *)parser)->m_mem.malloc_fcn((s))) -#define REALLOC(p,s) (((Parser *)parser)->m_mem.realloc_fcn((p),(s))) -#define FREE(p) (((Parser *)parser)->m_mem.free_fcn((p))) - -#define userData (((Parser *)parser)->m_userData) -#define handlerArg (((Parser *)parser)->m_handlerArg) -#define startElementHandler (((Parser *)parser)->m_startElementHandler) -#define endElementHandler (((Parser *)parser)->m_endElementHandler) -#define characterDataHandler (((Parser *)parser)->m_characterDataHandler) -#define processingInstructionHandler (((Parser *)parser)->m_processingInstructionHandler) -#define commentHandler (((Parser *)parser)->m_commentHandler) -#define startCdataSectionHandler (((Parser *)parser)->m_startCdataSectionHandler) -#define endCdataSectionHandler (((Parser *)parser)->m_endCdataSectionHandler) -#define defaultHandler (((Parser *)parser)->m_defaultHandler) -#define startDoctypeDeclHandler (((Parser *)parser)->m_startDoctypeDeclHandler) -#define endDoctypeDeclHandler (((Parser *)parser)->m_endDoctypeDeclHandler) -#define unparsedEntityDeclHandler (((Parser *)parser)->m_unparsedEntityDeclHandler) -#define notationDeclHandler (((Parser *)parser)->m_notationDeclHandler) -#define startNamespaceDeclHandler (((Parser *)parser)->m_startNamespaceDeclHandler) -#define endNamespaceDeclHandler (((Parser *)parser)->m_endNamespaceDeclHandler) -#define notStandaloneHandler (((Parser *)parser)->m_notStandaloneHandler) -#define externalEntityRefHandler (((Parser *)parser)->m_externalEntityRefHandler) -#define externalEntityRefHandlerArg (((Parser *)parser)->m_externalEntityRefHandlerArg) -#define unknownEncodingHandler (((Parser *)parser)->m_unknownEncodingHandler) -#define elementDeclHandler (((Parser *)parser)->m_elementDeclHandler) -#define attlistDeclHandler (((Parser *)parser)->m_attlistDeclHandler) -#define entityDeclHandler (((Parser *)parser)->m_entityDeclHandler) -#define xmlDeclHandler (((Parser *)parser)->m_xmlDeclHandler) -#define encoding (((Parser *)parser)->m_encoding) -#define initEncoding (((Parser *)parser)->m_initEncoding) -#define internalEncoding (((Parser *)parser)->m_internalEncoding) -#define unknownEncodingMem (((Parser *)parser)->m_unknownEncodingMem) -#define unknownEncodingData (((Parser *)parser)->m_unknownEncodingData) -#define unknownEncodingHandlerData \ - (((Parser *)parser)->m_unknownEncodingHandlerData) -#define unknownEncodingRelease (((Parser *)parser)->m_unknownEncodingRelease) -#define protocolEncodingName (((Parser *)parser)->m_protocolEncodingName) -#define ns (((Parser *)parser)->m_ns) -#define ns_triplets (((Parser *)parser)->m_ns_triplets) -#define prologState (((Parser *)parser)->m_prologState) -#define processor (((Parser *)parser)->m_processor) -#define errorCode (((Parser *)parser)->m_errorCode) -#define eventPtr (((Parser *)parser)->m_eventPtr) -#define eventEndPtr (((Parser *)parser)->m_eventEndPtr) -#define positionPtr (((Parser *)parser)->m_positionPtr) -#define position (((Parser *)parser)->m_position) -#define openInternalEntities (((Parser *)parser)->m_openInternalEntities) -#define defaultExpandInternalEntities (((Parser *)parser)->m_defaultExpandInternalEntities) -#define tagLevel (((Parser *)parser)->m_tagLevel) -#define buffer (((Parser *)parser)->m_buffer) -#define bufferPtr (((Parser *)parser)->m_bufferPtr) -#define bufferEnd (((Parser *)parser)->m_bufferEnd) -#define parseEndByteIndex (((Parser *)parser)->m_parseEndByteIndex) -#define parseEndPtr (((Parser *)parser)->m_parseEndPtr) -#define bufferLim (((Parser *)parser)->m_bufferLim) -#define dataBuf (((Parser *)parser)->m_dataBuf) -#define dataBufEnd (((Parser *)parser)->m_dataBufEnd) -#define dtd (((Parser *)parser)->m_dtd) -#define curBase (((Parser *)parser)->m_curBase) -#define declEntity (((Parser *)parser)->m_declEntity) -#define doctypeName (((Parser *)parser)->m_doctypeName) -#define doctypeSysid (((Parser *)parser)->m_doctypeSysid) -#define doctypePubid (((Parser *)parser)->m_doctypePubid) -#define declAttributeType (((Parser *)parser)->m_declAttributeType) -#define declNotationName (((Parser *)parser)->m_declNotationName) -#define declNotationPublicId (((Parser *)parser)->m_declNotationPublicId) -#define declElementType (((Parser *)parser)->m_declElementType) -#define declAttributeId (((Parser *)parser)->m_declAttributeId) -#define declAttributeIsCdata (((Parser *)parser)->m_declAttributeIsCdata) -#define declAttributeIsId (((Parser *)parser)->m_declAttributeIsId) -#define freeTagList (((Parser *)parser)->m_freeTagList) -#define freeBindingList (((Parser *)parser)->m_freeBindingList) -#define inheritedBindings (((Parser *)parser)->m_inheritedBindings) -#define tagStack (((Parser *)parser)->m_tagStack) -#define atts (((Parser *)parser)->m_atts) -#define attsSize (((Parser *)parser)->m_attsSize) -#define nSpecifiedAtts (((Parser *)parser)->m_nSpecifiedAtts) -#define idAttIndex (((Parser *)parser)->m_idAttIndex) -#define tempPool (((Parser *)parser)->m_tempPool) -#define temp2Pool (((Parser *)parser)->m_temp2Pool) -#define groupConnector (((Parser *)parser)->m_groupConnector) -#define groupSize (((Parser *)parser)->m_groupSize) -#define hadExternalDoctype (((Parser *)parser)->m_hadExternalDoctype) -#define namespaceSeparator (((Parser *)parser)->m_namespaceSeparator) -#ifdef XML_DTD -#define parentParser (((Parser *)parser)->m_parentParser) -#define paramEntityParsing (((Parser *)parser)->m_paramEntityParsing) -#endif /* XML_DTD */ - -#ifdef COMPILED_FROM_DSP -BOOL WINAPI DllMain(HINSTANCE h, DWORD r, LPVOID p) { - return TRUE; -} -#endif /* def COMPILED_FROM_DSP */ - -#ifdef _MSC_VER -#ifdef _DEBUG -Parser *asParser(XML_Parser parser) -{ - return parser; -} -#endif -#endif - -XML_Parser XML_ParserCreate(const XML_Char *encodingName) -{ - return XML_ParserCreate_MM(encodingName, NULL, NULL); -} - -XML_Parser XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep) -{ - XML_Char tmp[2]; - *tmp = nsSep; - return XML_ParserCreate_MM(encodingName, NULL, tmp); -} - -XML_Parser -XML_ParserCreate_MM(const XML_Char *encodingName, - const XML_Memory_Handling_Suite *memsuite, - const XML_Char *nameSep) { - - XML_Parser parser; - static - const XML_Char implicitContext[] = { - XML_T('x'), XML_T('m'), XML_T('l'), XML_T('='), - XML_T('h'), XML_T('t'), XML_T('t'), XML_T('p'), XML_T(':'), - XML_T('/'), XML_T('/'), XML_T('w'), XML_T('w'), XML_T('w'), - XML_T('.'), XML_T('w'), XML_T('3'), - XML_T('.'), XML_T('o'), XML_T('r'), XML_T('g'), - XML_T('/'), XML_T('X'), XML_T('M'), XML_T('L'), - XML_T('/'), XML_T('1'), XML_T('9'), XML_T('9'), XML_T('8'), - XML_T('/'), XML_T('n'), XML_T('a'), XML_T('m'), XML_T('e'), - XML_T('s'), XML_T('p'), XML_T('a'), XML_T('c'), XML_T('e'), - XML_T('\0') - }; - - - if (memsuite) { - XML_Memory_Handling_Suite *mtemp; - parser = memsuite->malloc_fcn(sizeof(Parser)); - mtemp = &(((Parser *) parser)->m_mem); - mtemp->malloc_fcn = memsuite->malloc_fcn; - mtemp->realloc_fcn = memsuite->realloc_fcn; - mtemp->free_fcn = memsuite->free_fcn; - } - else { - XML_Memory_Handling_Suite *mtemp; - parser = malloc(sizeof(Parser)); - mtemp = &(((Parser *) parser)->m_mem); - mtemp->malloc_fcn = malloc; - mtemp->realloc_fcn = realloc; - mtemp->free_fcn = free; - } - - if (!parser) - return parser; - processor = prologInitProcessor; - XmlPrologStateInit(&prologState); - userData = 0; - handlerArg = 0; - startElementHandler = 0; - endElementHandler = 0; - characterDataHandler = 0; - processingInstructionHandler = 0; - commentHandler = 0; - startCdataSectionHandler = 0; - endCdataSectionHandler = 0; - defaultHandler = 0; - startDoctypeDeclHandler = 0; - endDoctypeDeclHandler = 0; - unparsedEntityDeclHandler = 0; - notationDeclHandler = 0; - startNamespaceDeclHandler = 0; - endNamespaceDeclHandler = 0; - notStandaloneHandler = 0; - externalEntityRefHandler = 0; - externalEntityRefHandlerArg = parser; - unknownEncodingHandler = 0; - elementDeclHandler = 0; - attlistDeclHandler = 0; - entityDeclHandler = 0; - xmlDeclHandler = 0; - buffer = 0; - bufferPtr = 0; - bufferEnd = 0; - parseEndByteIndex = 0; - parseEndPtr = 0; - bufferLim = 0; - declElementType = 0; - declAttributeId = 0; - declEntity = 0; - doctypeName = 0; - doctypeSysid = 0; - doctypePubid = 0; - declAttributeType = 0; - declNotationName = 0; - declNotationPublicId = 0; - memset(&position, 0, sizeof(POSITION)); - errorCode = XML_ERROR_NONE; - eventPtr = 0; - eventEndPtr = 0; - positionPtr = 0; - openInternalEntities = 0; - tagLevel = 0; - tagStack = 0; - freeTagList = 0; - freeBindingList = 0; - inheritedBindings = 0; - attsSize = INIT_ATTS_SIZE; - atts = MALLOC(attsSize * sizeof(ATTRIBUTE)); - nSpecifiedAtts = 0; - dataBuf = MALLOC(INIT_DATA_BUF_SIZE * sizeof(XML_Char)); - groupSize = 0; - groupConnector = 0; - hadExternalDoctype = 0; - unknownEncodingMem = 0; - unknownEncodingRelease = 0; - unknownEncodingData = 0; - unknownEncodingHandlerData = 0; - namespaceSeparator = '!'; -#ifdef XML_DTD - parentParser = 0; - paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; -#endif - ns = 0; - ns_triplets = 0; - poolInit(&tempPool, &(((Parser *) parser)->m_mem)); - poolInit(&temp2Pool, &(((Parser *) parser)->m_mem)); - protocolEncodingName = encodingName ? poolCopyString(&tempPool, encodingName) : 0; - curBase = 0; - if (!dtdInit(&dtd, parser) || !atts || !dataBuf - || (encodingName && !protocolEncodingName)) { - XML_ParserFree(parser); - return 0; - } - dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE; - - if (nameSep) { - XmlInitEncodingNS(&initEncoding, &encoding, 0); - ns = 1; - internalEncoding = XmlGetInternalEncodingNS(); - namespaceSeparator = *nameSep; - - if (! setContext(parser, implicitContext)) { - XML_ParserFree(parser); - return 0; - } - } - else { - XmlInitEncoding(&initEncoding, &encoding, 0); - internalEncoding = XmlGetInternalEncoding(); - } - - return parser; -} /* End XML_ParserCreate_MM */ - -int XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName) -{ - if (!encodingName) - protocolEncodingName = 0; - else { - protocolEncodingName = poolCopyString(&tempPool, encodingName); - if (!protocolEncodingName) - return 0; - } - return 1; -} - -XML_Parser XML_ExternalEntityParserCreate(XML_Parser oldParser, - const XML_Char *context, - const XML_Char *encodingName) -{ - XML_Parser parser = oldParser; - DTD *oldDtd = &dtd; - XML_StartElementHandler oldStartElementHandler = startElementHandler; - XML_EndElementHandler oldEndElementHandler = endElementHandler; - XML_CharacterDataHandler oldCharacterDataHandler = characterDataHandler; - XML_ProcessingInstructionHandler oldProcessingInstructionHandler = processingInstructionHandler; - XML_CommentHandler oldCommentHandler = commentHandler; - XML_StartCdataSectionHandler oldStartCdataSectionHandler = startCdataSectionHandler; - XML_EndCdataSectionHandler oldEndCdataSectionHandler = endCdataSectionHandler; - XML_DefaultHandler oldDefaultHandler = defaultHandler; - XML_UnparsedEntityDeclHandler oldUnparsedEntityDeclHandler = unparsedEntityDeclHandler; - XML_NotationDeclHandler oldNotationDeclHandler = notationDeclHandler; - XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler = startNamespaceDeclHandler; - XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler = endNamespaceDeclHandler; - XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler; - XML_ExternalEntityRefHandler oldExternalEntityRefHandler = externalEntityRefHandler; - XML_UnknownEncodingHandler oldUnknownEncodingHandler = unknownEncodingHandler; - XML_ElementDeclHandler oldElementDeclHandler = elementDeclHandler; - XML_AttlistDeclHandler oldAttlistDeclHandler = attlistDeclHandler; - XML_EntityDeclHandler oldEntityDeclHandler = entityDeclHandler; - XML_XmlDeclHandler oldXmlDeclHandler = xmlDeclHandler; - ELEMENT_TYPE * oldDeclElementType = declElementType; - - void *oldUserData = userData; - void *oldHandlerArg = handlerArg; - int oldDefaultExpandInternalEntities = defaultExpandInternalEntities; - void *oldExternalEntityRefHandlerArg = externalEntityRefHandlerArg; -#ifdef XML_DTD - int oldParamEntityParsing = paramEntityParsing; -#endif - int oldns_triplets = ns_triplets; - - if (ns) { - XML_Char tmp[2]; - - *tmp = namespaceSeparator; - parser = XML_ParserCreate_MM(encodingName, &((Parser *)parser)->m_mem, - tmp); - } - else { - parser = XML_ParserCreate_MM(encodingName, &((Parser *)parser)->m_mem, - NULL); - } - - if (!parser) - return 0; - - startElementHandler = oldStartElementHandler; - endElementHandler = oldEndElementHandler; - characterDataHandler = oldCharacterDataHandler; - processingInstructionHandler = oldProcessingInstructionHandler; - commentHandler = oldCommentHandler; - startCdataSectionHandler = oldStartCdataSectionHandler; - endCdataSectionHandler = oldEndCdataSectionHandler; - defaultHandler = oldDefaultHandler; - unparsedEntityDeclHandler = oldUnparsedEntityDeclHandler; - notationDeclHandler = oldNotationDeclHandler; - startNamespaceDeclHandler = oldStartNamespaceDeclHandler; - endNamespaceDeclHandler = oldEndNamespaceDeclHandler; - notStandaloneHandler = oldNotStandaloneHandler; - externalEntityRefHandler = oldExternalEntityRefHandler; - unknownEncodingHandler = oldUnknownEncodingHandler; - elementDeclHandler = oldElementDeclHandler; - attlistDeclHandler = oldAttlistDeclHandler; - entityDeclHandler = oldEntityDeclHandler; - xmlDeclHandler = oldXmlDeclHandler; - declElementType = oldDeclElementType; - userData = oldUserData; - if (oldUserData == oldHandlerArg) - handlerArg = userData; - else - handlerArg = parser; - if (oldExternalEntityRefHandlerArg != oldParser) - externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg; - defaultExpandInternalEntities = oldDefaultExpandInternalEntities; - ns_triplets = oldns_triplets; -#ifdef XML_DTD - paramEntityParsing = oldParamEntityParsing; - if (context) { -#endif /* XML_DTD */ - if (!dtdCopy(&dtd, oldDtd, parser) || !setContext(parser, context)) { - XML_ParserFree(parser); - return 0; - } - processor = externalEntityInitProcessor; -#ifdef XML_DTD - } - else { - dtdSwap(&dtd, oldDtd); - parentParser = oldParser; - XmlPrologStateInitExternalEntity(&prologState); - dtd.complete = 1; - hadExternalDoctype = 1; - } -#endif /* XML_DTD */ - return parser; -} - -static -void destroyBindings(BINDING *bindings, XML_Parser parser) -{ - for (;;) { - BINDING *b = bindings; - if (!b) - break; - bindings = b->nextTagBinding; - FREE(b->uri); - FREE(b); - } -} - -void XML_ParserFree(XML_Parser parser) -{ - for (;;) { - TAG *p; - if (tagStack == 0) { - if (freeTagList == 0) - break; - tagStack = freeTagList; - freeTagList = 0; - } - p = tagStack; - tagStack = tagStack->parent; - FREE(p->buf); - destroyBindings(p->bindings, parser); - FREE(p); - } - destroyBindings(freeBindingList, parser); - destroyBindings(inheritedBindings, parser); - poolDestroy(&tempPool); - poolDestroy(&temp2Pool); -#ifdef XML_DTD - if (parentParser) { - if (hadExternalDoctype) - dtd.complete = 0; - dtdSwap(&dtd, &((Parser *)parentParser)->m_dtd); - } -#endif /* XML_DTD */ - dtdDestroy(&dtd, parser); - FREE((void *)atts); - if (groupConnector) - FREE(groupConnector); - if (buffer) - FREE(buffer); - FREE(dataBuf); - if (unknownEncodingMem) - FREE(unknownEncodingMem); - if (unknownEncodingRelease) - unknownEncodingRelease(unknownEncodingData); - FREE(parser); -} - -void XML_UseParserAsHandlerArg(XML_Parser parser) -{ - handlerArg = parser; -} - -void -XML_SetReturnNSTriplet(XML_Parser parser, int do_nst) { - ns_triplets = do_nst; -} - -void XML_SetUserData(XML_Parser parser, void *p) -{ - if (handlerArg == userData) - handlerArg = userData = p; - else - userData = p; -} - -int XML_SetBase(XML_Parser parser, const XML_Char *p) -{ - if (p) { - p = poolCopyString(&dtd.pool, p); - if (!p) - return 0; - curBase = p; - } - else - curBase = 0; - return 1; -} - -const XML_Char *XML_GetBase(XML_Parser parser) -{ - return curBase; -} - -int XML_GetSpecifiedAttributeCount(XML_Parser parser) -{ - return nSpecifiedAtts; -} - -int XML_GetIdAttributeIndex(XML_Parser parser) -{ - return idAttIndex; -} - -void XML_SetElementHandler(XML_Parser parser, - XML_StartElementHandler start, - XML_EndElementHandler end) -{ - startElementHandler = start; - endElementHandler = end; -} - -void XML_SetStartElementHandler(XML_Parser parser, - XML_StartElementHandler start) { - startElementHandler = start; -} - -void XML_SetEndElementHandler(XML_Parser parser, - XML_EndElementHandler end) { - endElementHandler = end; -} - -void XML_SetCharacterDataHandler(XML_Parser parser, - XML_CharacterDataHandler handler) -{ - characterDataHandler = handler; -} - -void XML_SetProcessingInstructionHandler(XML_Parser parser, - XML_ProcessingInstructionHandler handler) -{ - processingInstructionHandler = handler; -} - -void XML_SetCommentHandler(XML_Parser parser, - XML_CommentHandler handler) -{ - commentHandler = handler; -} - -void XML_SetCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start, - XML_EndCdataSectionHandler end) -{ - startCdataSectionHandler = start; - endCdataSectionHandler = end; -} - -void XML_SetStartCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start) { - startCdataSectionHandler = start; -} - -void XML_SetEndCdataSectionHandler(XML_Parser parser, - XML_EndCdataSectionHandler end) { - endCdataSectionHandler = end; -} - -void XML_SetDefaultHandler(XML_Parser parser, - XML_DefaultHandler handler) -{ - defaultHandler = handler; - defaultExpandInternalEntities = 0; -} - -void XML_SetDefaultHandlerExpand(XML_Parser parser, - XML_DefaultHandler handler) -{ - defaultHandler = handler; - defaultExpandInternalEntities = 1; -} - -void XML_SetDoctypeDeclHandler(XML_Parser parser, - XML_StartDoctypeDeclHandler start, - XML_EndDoctypeDeclHandler end) -{ - startDoctypeDeclHandler = start; - endDoctypeDeclHandler = end; -} - -void XML_SetStartDoctypeDeclHandler(XML_Parser parser, - XML_StartDoctypeDeclHandler start) { - startDoctypeDeclHandler = start; -} - -void XML_SetEndDoctypeDeclHandler(XML_Parser parser, - XML_EndDoctypeDeclHandler end) { - endDoctypeDeclHandler = end; -} - -void XML_SetUnparsedEntityDeclHandler(XML_Parser parser, - XML_UnparsedEntityDeclHandler handler) -{ - unparsedEntityDeclHandler = handler; -} - -void XML_SetNotationDeclHandler(XML_Parser parser, - XML_NotationDeclHandler handler) -{ - notationDeclHandler = handler; -} - -void XML_SetNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start, - XML_EndNamespaceDeclHandler end) -{ - startNamespaceDeclHandler = start; - endNamespaceDeclHandler = end; -} - -void XML_SetStartNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start) { - startNamespaceDeclHandler = start; -} - -void XML_SetEndNamespaceDeclHandler(XML_Parser parser, - XML_EndNamespaceDeclHandler end) { - endNamespaceDeclHandler = end; -} - - -void XML_SetNotStandaloneHandler(XML_Parser parser, - XML_NotStandaloneHandler handler) -{ - notStandaloneHandler = handler; -} - -void XML_SetExternalEntityRefHandler(XML_Parser parser, - XML_ExternalEntityRefHandler handler) -{ - externalEntityRefHandler = handler; -} - -void XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg) -{ - if (arg) - externalEntityRefHandlerArg = arg; - else - externalEntityRefHandlerArg = parser; -} - -void XML_SetUnknownEncodingHandler(XML_Parser parser, - XML_UnknownEncodingHandler handler, - void *data) -{ - unknownEncodingHandler = handler; - unknownEncodingHandlerData = data; -} - -void XML_SetElementDeclHandler(XML_Parser parser, - XML_ElementDeclHandler eldecl) -{ - elementDeclHandler = eldecl; -} - -void XML_SetAttlistDeclHandler(XML_Parser parser, - XML_AttlistDeclHandler attdecl) -{ - attlistDeclHandler = attdecl; -} - -void XML_SetEntityDeclHandler(XML_Parser parser, - XML_EntityDeclHandler handler) -{ - entityDeclHandler = handler; -} - -void XML_SetXmlDeclHandler(XML_Parser parser, - XML_XmlDeclHandler handler) { - xmlDeclHandler = handler; -} - -int XML_SetParamEntityParsing(XML_Parser parser, - enum XML_ParamEntityParsing parsing) -{ -#ifdef XML_DTD - paramEntityParsing = parsing; - return 1; -#else - return parsing == XML_PARAM_ENTITY_PARSING_NEVER; -#endif -} - -int XML_Parse(XML_Parser parser, const char *s, int len, int isFinal) -{ - if (len == 0) { - if (!isFinal) - return 1; - positionPtr = bufferPtr; - errorCode = processor(parser, bufferPtr, parseEndPtr = bufferEnd, 0); - if (errorCode == XML_ERROR_NONE) - return 1; - eventEndPtr = eventPtr; - processor = errorProcessor; - return 0; - } -#ifndef XML_CONTEXT_BYTES - else if (bufferPtr == bufferEnd) { - const char *end; - int nLeftOver; - parseEndByteIndex += len; - positionPtr = s; - if (isFinal) { - errorCode = processor(parser, s, parseEndPtr = s + len, 0); - if (errorCode == XML_ERROR_NONE) - return 1; - eventEndPtr = eventPtr; - processor = errorProcessor; - return 0; - } - errorCode = processor(parser, s, parseEndPtr = s + len, &end); - if (errorCode != XML_ERROR_NONE) { - eventEndPtr = eventPtr; - processor = errorProcessor; - return 0; - } - XmlUpdatePosition(encoding, positionPtr, end, &position); - nLeftOver = s + len - end; - if (nLeftOver) { - if (buffer == 0 || nLeftOver > bufferLim - buffer) { - /* FIXME avoid integer overflow */ - buffer = buffer == 0 ? MALLOC(len * 2) : REALLOC(buffer, len * 2); - /* FIXME storage leak if realloc fails */ - if (!buffer) { - errorCode = XML_ERROR_NO_MEMORY; - eventPtr = eventEndPtr = 0; - processor = errorProcessor; - return 0; - } - bufferLim = buffer + len * 2; - } - memcpy(buffer, end, nLeftOver); - bufferPtr = buffer; - bufferEnd = buffer + nLeftOver; - } - return 1; - } -#endif /* not defined XML_CONTEXT_BYTES */ - else { - memcpy(XML_GetBuffer(parser, len), s, len); - return XML_ParseBuffer(parser, len, isFinal); - } -} - -int XML_ParseBuffer(XML_Parser parser, int len, int isFinal) -{ - const char *start = bufferPtr; - positionPtr = start; - bufferEnd += len; - parseEndByteIndex += len; - errorCode = processor(parser, start, parseEndPtr = bufferEnd, - isFinal ? (const char **)0 : &bufferPtr); - if (errorCode == XML_ERROR_NONE) { - if (!isFinal) - XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position); - return 1; - } - else { - eventEndPtr = eventPtr; - processor = errorProcessor; - return 0; - } -} - -void *XML_GetBuffer(XML_Parser parser, int len) -{ - if (len > bufferLim - bufferEnd) { - /* FIXME avoid integer overflow */ - int neededSize = len + (bufferEnd - bufferPtr); -#ifdef XML_CONTEXT_BYTES - int keep = bufferPtr - buffer; - - if (keep > XML_CONTEXT_BYTES) - keep = XML_CONTEXT_BYTES; - neededSize += keep; -#endif /* defined XML_CONTEXT_BYTES */ - if (neededSize <= bufferLim - buffer) { -#ifdef XML_CONTEXT_BYTES - if (keep < bufferPtr - buffer) { - int offset = (bufferPtr - buffer) - keep; - memmove(buffer, &buffer[offset], bufferEnd - bufferPtr + keep); - bufferEnd -= offset; - bufferPtr -= offset; - } -#else - memmove(buffer, bufferPtr, bufferEnd - bufferPtr); - bufferEnd = buffer + (bufferEnd - bufferPtr); - bufferPtr = buffer; -#endif /* not defined XML_CONTEXT_BYTES */ - } - else { - char *newBuf; - int bufferSize = bufferLim - bufferPtr; - if (bufferSize == 0) - bufferSize = INIT_BUFFER_SIZE; - do { - bufferSize *= 2; - } while (bufferSize < neededSize); - newBuf = MALLOC(bufferSize); - if (newBuf == 0) { - errorCode = XML_ERROR_NO_MEMORY; - return 0; - } - bufferLim = newBuf + bufferSize; -#ifdef XML_CONTEXT_BYTES - if (bufferPtr) { - int keep = bufferPtr - buffer; - if (keep > XML_CONTEXT_BYTES) - keep = XML_CONTEXT_BYTES; - memcpy(newBuf, &bufferPtr[-keep], bufferEnd - bufferPtr + keep); - FREE(buffer); - buffer = newBuf; - bufferEnd = buffer + (bufferEnd - bufferPtr) + keep; - bufferPtr = buffer + keep; - } - else { - bufferEnd = newBuf + (bufferEnd - bufferPtr); - bufferPtr = buffer = newBuf; - } -#else - if (bufferPtr) { - memcpy(newBuf, bufferPtr, bufferEnd - bufferPtr); - FREE(buffer); - } - bufferEnd = newBuf + (bufferEnd - bufferPtr); - bufferPtr = buffer = newBuf; -#endif /* not defined XML_CONTEXT_BYTES */ - } - } - return bufferEnd; -} - -enum XML_Error XML_GetErrorCode(XML_Parser parser) -{ - return errorCode; -} - -long XML_GetCurrentByteIndex(XML_Parser parser) -{ - if (eventPtr) - return parseEndByteIndex - (parseEndPtr - eventPtr); - return -1; -} - -int XML_GetCurrentByteCount(XML_Parser parser) -{ - if (eventEndPtr && eventPtr) - return eventEndPtr - eventPtr; - return 0; -} - -const char * XML_GetInputContext(XML_Parser parser, int *offset, int *size) -{ -#ifdef XML_CONTEXT_BYTES - if (eventPtr && buffer) { - *offset = eventPtr - buffer; - *size = bufferEnd - buffer; - return buffer; - } -#endif /* defined XML_CONTEXT_BYTES */ - return (char *) 0; -} - -int XML_GetCurrentLineNumber(XML_Parser parser) -{ - if (eventPtr) { - XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); - positionPtr = eventPtr; - } - return position.lineNumber + 1; -} - -int XML_GetCurrentColumnNumber(XML_Parser parser) -{ - if (eventPtr) { - XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); - positionPtr = eventPtr; - } - return position.columnNumber; -} - -void XML_DefaultCurrent(XML_Parser parser) -{ - if (defaultHandler) { - if (openInternalEntities) - reportDefault(parser, - internalEncoding, - openInternalEntities->internalEventPtr, - openInternalEntities->internalEventEndPtr); - else - reportDefault(parser, encoding, eventPtr, eventEndPtr); - } -} - -const XML_LChar *XML_ErrorString(int code) -{ - static const XML_LChar *message[] = { - 0, - XML_T("out of memory"), - XML_T("syntax error"), - XML_T("no element found"), - XML_T("not well-formed (invalid token)"), - XML_T("unclosed token"), - XML_T("unclosed token"), - XML_T("mismatched tag"), - XML_T("duplicate attribute"), - XML_T("junk after document element"), - XML_T("illegal parameter entity reference"), - XML_T("undefined entity"), - XML_T("recursive entity reference"), - XML_T("asynchronous entity"), - XML_T("reference to invalid character number"), - XML_T("reference to binary entity"), - XML_T("reference to external entity in attribute"), - XML_T("xml processing instruction not at start of external entity"), - XML_T("unknown encoding"), - XML_T("encoding specified in XML declaration is incorrect"), - XML_T("unclosed CDATA section"), - XML_T("error in processing external entity reference"), - XML_T("document is not standalone"), - XML_T("unexpected parser state - please send a bug report") - }; - if (code > 0 && code < sizeof(message)/sizeof(message[0])) - return message[code]; - return 0; -} - -const XML_LChar * -XML_ExpatVersion() { - return VERSION; -} - -static -enum XML_Error contentProcessor(XML_Parser parser, - const char *start, - const char *end, - const char **endPtr) -{ - return doContent(parser, 0, encoding, start, end, endPtr); -} - -static -enum XML_Error externalEntityInitProcessor(XML_Parser parser, - const char *start, - const char *end, - const char **endPtr) -{ - enum XML_Error result = initializeEncoding(parser); - if (result != XML_ERROR_NONE) - return result; - processor = externalEntityInitProcessor2; - return externalEntityInitProcessor2(parser, start, end, endPtr); -} - -static -enum XML_Error externalEntityInitProcessor2(XML_Parser parser, - const char *start, - const char *end, - const char **endPtr) -{ - const char *next; - int tok = XmlContentTok(encoding, start, end, &next); - switch (tok) { - case XML_TOK_BOM: - start = next; - break; - case XML_TOK_PARTIAL: - if (endPtr) { - *endPtr = start; - return XML_ERROR_NONE; - } - eventPtr = start; - return XML_ERROR_UNCLOSED_TOKEN; - case XML_TOK_PARTIAL_CHAR: - if (endPtr) { - *endPtr = start; - return XML_ERROR_NONE; - } - eventPtr = start; - return XML_ERROR_PARTIAL_CHAR; - } - processor = externalEntityInitProcessor3; - return externalEntityInitProcessor3(parser, start, end, endPtr); -} - -static -enum XML_Error externalEntityInitProcessor3(XML_Parser parser, - const char *start, - const char *end, - const char **endPtr) -{ - const char *next; - int tok = XmlContentTok(encoding, start, end, &next); - switch (tok) { - case XML_TOK_XML_DECL: - { - enum XML_Error result = processXmlDecl(parser, 1, start, next); - if (result != XML_ERROR_NONE) - return result; - start = next; - } - break; - case XML_TOK_PARTIAL: - if (endPtr) { - *endPtr = start; - return XML_ERROR_NONE; - } - eventPtr = start; - return XML_ERROR_UNCLOSED_TOKEN; - case XML_TOK_PARTIAL_CHAR: - if (endPtr) { - *endPtr = start; - return XML_ERROR_NONE; - } - eventPtr = start; - return XML_ERROR_PARTIAL_CHAR; - } - processor = externalEntityContentProcessor; - tagLevel = 1; - return doContent(parser, 1, encoding, start, end, endPtr); -} - -static -enum XML_Error externalEntityContentProcessor(XML_Parser parser, - const char *start, - const char *end, - const char **endPtr) -{ - return doContent(parser, 1, encoding, start, end, endPtr); -} - -static enum XML_Error -doContent(XML_Parser parser, - int startTagLevel, - const ENCODING *enc, - const char *s, - const char *end, - const char **nextPtr) -{ - const char **eventPP; - const char **eventEndPP; - if (enc == encoding) { - eventPP = &eventPtr; - eventEndPP = &eventEndPtr; - } - else { - eventPP = &(openInternalEntities->internalEventPtr); - eventEndPP = &(openInternalEntities->internalEventEndPtr); - } - *eventPP = s; - for (;;) { - const char *next = s; /* XmlContentTok doesn't always set the last arg */ - int tok = XmlContentTok(enc, s, end, &next); - *eventEndPP = next; - switch (tok) { - case XML_TOK_TRAILING_CR: - if (nextPtr) { - *nextPtr = s; - return XML_ERROR_NONE; - } - *eventEndPP = end; - if (characterDataHandler) { - XML_Char c = 0xA; - characterDataHandler(handlerArg, &c, 1); - } - else if (defaultHandler) - reportDefault(parser, enc, s, end); - if (startTagLevel == 0) - return XML_ERROR_NO_ELEMENTS; - if (tagLevel != startTagLevel) - return XML_ERROR_ASYNC_ENTITY; - return XML_ERROR_NONE; - case XML_TOK_NONE: - if (nextPtr) { - *nextPtr = s; - return XML_ERROR_NONE; - } - if (startTagLevel > 0) { - if (tagLevel != startTagLevel) - return XML_ERROR_ASYNC_ENTITY; - return XML_ERROR_NONE; - } - return XML_ERROR_NO_ELEMENTS; - case XML_TOK_INVALID: - *eventPP = next; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL: - if (nextPtr) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_UNCLOSED_TOKEN; - case XML_TOK_PARTIAL_CHAR: - if (nextPtr) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_PARTIAL_CHAR; - case XML_TOK_ENTITY_REF: - { - const XML_Char *name; - ENTITY *entity; - XML_Char ch = XmlPredefinedEntityName(enc, - s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (ch) { - if (characterDataHandler) - characterDataHandler(handlerArg, &ch, 1); - else if (defaultHandler) - reportDefault(parser, enc, s, next); - break; - } - name = poolStoreString(&dtd.pool, enc, - s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (!name) - return XML_ERROR_NO_MEMORY; - entity = (ENTITY *)lookup(&dtd.generalEntities, name, 0); - poolDiscard(&dtd.pool); - if (!entity) { - if (dtd.complete || dtd.standalone) - return XML_ERROR_UNDEFINED_ENTITY; - if (defaultHandler) - reportDefault(parser, enc, s, next); - break; - } - if (entity->open) - return XML_ERROR_RECURSIVE_ENTITY_REF; - if (entity->notation) - return XML_ERROR_BINARY_ENTITY_REF; - if (entity) { - if (entity->textPtr) { - enum XML_Error result; - OPEN_INTERNAL_ENTITY openEntity; - if (defaultHandler && !defaultExpandInternalEntities) { - reportDefault(parser, enc, s, next); - break; - } - entity->open = 1; - openEntity.next = openInternalEntities; - openInternalEntities = &openEntity; - openEntity.entity = entity; - openEntity.internalEventPtr = 0; - openEntity.internalEventEndPtr = 0; - result = doContent(parser, - tagLevel, - internalEncoding, - (char *)entity->textPtr, - (char *)(entity->textPtr + entity->textLen), - 0); - entity->open = 0; - openInternalEntities = openEntity.next; - if (result) - return result; - } - else if (externalEntityRefHandler) { - const XML_Char *context; - entity->open = 1; - context = getContext(parser); - entity->open = 0; - if (!context) - return XML_ERROR_NO_MEMORY; - if (!externalEntityRefHandler(externalEntityRefHandlerArg, - context, - entity->base, - entity->systemId, - entity->publicId)) - return XML_ERROR_EXTERNAL_ENTITY_HANDLING; - poolDiscard(&tempPool); - } - else if (defaultHandler) - reportDefault(parser, enc, s, next); - } - break; - } - case XML_TOK_START_TAG_WITH_ATTS: - if (!startElementHandler) { - enum XML_Error result = storeAtts(parser, enc, s, 0, 0); - if (result) - return result; - } - /* fall through */ - case XML_TOK_START_TAG_NO_ATTS: - { - TAG *tag; - if (freeTagList) { - tag = freeTagList; - freeTagList = freeTagList->parent; - } - else { - tag = MALLOC(sizeof(TAG)); - if (!tag) - return XML_ERROR_NO_MEMORY; - tag->buf = MALLOC(INIT_TAG_BUF_SIZE); - if (!tag->buf) - return XML_ERROR_NO_MEMORY; - tag->bufEnd = tag->buf + INIT_TAG_BUF_SIZE; - } - tag->bindings = 0; - tag->parent = tagStack; - tagStack = tag; - tag->name.localPart = 0; - tag->rawName = s + enc->minBytesPerChar; - tag->rawNameLength = XmlNameLength(enc, tag->rawName); - if (nextPtr) { - /* Need to guarantee that: - tag->buf + ROUND_UP(tag->rawNameLength, sizeof(XML_Char)) <= tag->bufEnd - sizeof(XML_Char) */ - if (tag->rawNameLength + (int)(sizeof(XML_Char) - 1) + (int)sizeof(XML_Char) > tag->bufEnd - tag->buf) { - int bufSize = tag->rawNameLength * 4; - bufSize = ROUND_UP(bufSize, sizeof(XML_Char)); - tag->buf = REALLOC(tag->buf, bufSize); - if (!tag->buf) - return XML_ERROR_NO_MEMORY; - tag->bufEnd = tag->buf + bufSize; - } - memcpy(tag->buf, tag->rawName, tag->rawNameLength); - tag->rawName = tag->buf; - } - ++tagLevel; - if (startElementHandler) { - enum XML_Error result; - XML_Char *toPtr; - for (;;) { - const char *rawNameEnd = tag->rawName + tag->rawNameLength; - const char *fromPtr = tag->rawName; - int bufSize; - if (nextPtr) - toPtr = (XML_Char *)(tag->buf + ROUND_UP(tag->rawNameLength, sizeof(XML_Char))); - else - toPtr = (XML_Char *)tag->buf; - tag->name.str = toPtr; - XmlConvert(enc, - &fromPtr, rawNameEnd, - (ICHAR **)&toPtr, (ICHAR *)tag->bufEnd - 1); - if (fromPtr == rawNameEnd) - break; - bufSize = (tag->bufEnd - tag->buf) << 1; - tag->buf = REALLOC(tag->buf, bufSize); - if (!tag->buf) - return XML_ERROR_NO_MEMORY; - tag->bufEnd = tag->buf + bufSize; - if (nextPtr) - tag->rawName = tag->buf; - } - *toPtr = XML_T('\0'); - result = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings)); - if (result) - return result; - startElementHandler(handlerArg, tag->name.str, (const XML_Char **)atts); - poolClear(&tempPool); - } - else { - tag->name.str = 0; - if (defaultHandler) - reportDefault(parser, enc, s, next); - } - break; - } - case XML_TOK_EMPTY_ELEMENT_WITH_ATTS: - if (!startElementHandler) { - enum XML_Error result = storeAtts(parser, enc, s, 0, 0); - if (result) - return result; - } - /* fall through */ - case XML_TOK_EMPTY_ELEMENT_NO_ATTS: - if (startElementHandler || endElementHandler) { - const char *rawName = s + enc->minBytesPerChar; - enum XML_Error result; - BINDING *bindings = 0; - TAG_NAME name; - name.str = poolStoreString(&tempPool, enc, rawName, - rawName + XmlNameLength(enc, rawName)); - if (!name.str) - return XML_ERROR_NO_MEMORY; - poolFinish(&tempPool); - result = storeAtts(parser, enc, s, &name, &bindings); - if (result) - return result; - poolFinish(&tempPool); - if (startElementHandler) - startElementHandler(handlerArg, name.str, (const XML_Char **)atts); - if (endElementHandler) { - if (startElementHandler) - *eventPP = *eventEndPP; - endElementHandler(handlerArg, name.str); - } - poolClear(&tempPool); - while (bindings) { - BINDING *b = bindings; - if (endNamespaceDeclHandler) - endNamespaceDeclHandler(handlerArg, b->prefix->name); - bindings = bindings->nextTagBinding; - b->nextTagBinding = freeBindingList; - freeBindingList = b; - b->prefix->binding = b->prevPrefixBinding; - } - } - else if (defaultHandler) - reportDefault(parser, enc, s, next); - if (tagLevel == 0) - return epilogProcessor(parser, next, end, nextPtr); - break; - case XML_TOK_END_TAG: - if (tagLevel == startTagLevel) - return XML_ERROR_ASYNC_ENTITY; - else { - int len; - const char *rawName; - TAG *tag = tagStack; - tagStack = tag->parent; - tag->parent = freeTagList; - freeTagList = tag; - rawName = s + enc->minBytesPerChar*2; - len = XmlNameLength(enc, rawName); - if (len != tag->rawNameLength - || memcmp(tag->rawName, rawName, len) != 0) { - *eventPP = rawName; - return XML_ERROR_TAG_MISMATCH; - } - --tagLevel; - if (endElementHandler && tag->name.str) { - if (tag->name.localPart) { - XML_Char *to = (XML_Char *)tag->name.str + tag->name.uriLen; - const XML_Char *from = tag->name.localPart; - while ((*to++ = *from++) != 0) - ; - } - endElementHandler(handlerArg, tag->name.str); - } - else if (defaultHandler) - reportDefault(parser, enc, s, next); - while (tag->bindings) { - BINDING *b = tag->bindings; - if (endNamespaceDeclHandler) - endNamespaceDeclHandler(handlerArg, b->prefix->name); - tag->bindings = tag->bindings->nextTagBinding; - b->nextTagBinding = freeBindingList; - freeBindingList = b; - b->prefix->binding = b->prevPrefixBinding; - } - if (tagLevel == 0) - return epilogProcessor(parser, next, end, nextPtr); - } - break; - case XML_TOK_CHAR_REF: - { - int n = XmlCharRefNumber(enc, s); - if (n < 0) - return XML_ERROR_BAD_CHAR_REF; - if (characterDataHandler) { - XML_Char buf[XML_ENCODE_MAX]; - characterDataHandler(handlerArg, buf, XmlEncode(n, (ICHAR *)buf)); - } - else if (defaultHandler) - reportDefault(parser, enc, s, next); - } - break; - case XML_TOK_XML_DECL: - return XML_ERROR_MISPLACED_XML_PI; - case XML_TOK_DATA_NEWLINE: - if (characterDataHandler) { - XML_Char c = 0xA; - characterDataHandler(handlerArg, &c, 1); - } - else if (defaultHandler) - reportDefault(parser, enc, s, next); - break; - case XML_TOK_CDATA_SECT_OPEN: - { - enum XML_Error result; - if (startCdataSectionHandler) - startCdataSectionHandler(handlerArg); -#if 0 - /* Suppose you doing a transformation on a document that involves - changing only the character data. You set up a defaultHandler - and a characterDataHandler. The defaultHandler simply copies - characters through. The characterDataHandler does the transformation - and writes the characters out escaping them as necessary. This case - will fail to work if we leave out the following two lines (because & - and < inside CDATA sections will be incorrectly escaped). - - However, now we have a start/endCdataSectionHandler, so it seems - easier to let the user deal with this. */ - - else if (characterDataHandler) - characterDataHandler(handlerArg, dataBuf, 0); -#endif - else if (defaultHandler) - reportDefault(parser, enc, s, next); - result = doCdataSection(parser, enc, &next, end, nextPtr); - if (!next) { - processor = cdataSectionProcessor; - return result; - } - } - break; - case XML_TOK_TRAILING_RSQB: - if (nextPtr) { - *nextPtr = s; - return XML_ERROR_NONE; - } - if (characterDataHandler) { - if (MUST_CONVERT(enc, s)) { - ICHAR *dataPtr = (ICHAR *)dataBuf; - XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd); - characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); - } - else - characterDataHandler(handlerArg, - (XML_Char *)s, - (XML_Char *)end - (XML_Char *)s); - } - else if (defaultHandler) - reportDefault(parser, enc, s, end); - if (startTagLevel == 0) { - *eventPP = end; - return XML_ERROR_NO_ELEMENTS; - } - if (tagLevel != startTagLevel) { - *eventPP = end; - return XML_ERROR_ASYNC_ENTITY; - } - return XML_ERROR_NONE; - case XML_TOK_DATA_CHARS: - if (characterDataHandler) { - if (MUST_CONVERT(enc, s)) { - for (;;) { - ICHAR *dataPtr = (ICHAR *)dataBuf; - XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd); - *eventEndPP = s; - characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); - if (s == next) - break; - *eventPP = s; - } - } - else - characterDataHandler(handlerArg, - (XML_Char *)s, - (XML_Char *)next - (XML_Char *)s); - } - else if (defaultHandler) - reportDefault(parser, enc, s, next); - break; - case XML_TOK_PI: - if (!reportProcessingInstruction(parser, enc, s, next)) - return XML_ERROR_NO_MEMORY; - break; - case XML_TOK_COMMENT: - if (!reportComment(parser, enc, s, next)) - return XML_ERROR_NO_MEMORY; - break; - default: - if (defaultHandler) - reportDefault(parser, enc, s, next); - break; - } - *eventPP = s = next; - } - /* not reached */ -} - -/* If tagNamePtr is non-null, build a real list of attributes, -otherwise just check the attributes for well-formedness. */ - -static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *enc, - const char *attStr, TAG_NAME *tagNamePtr, - BINDING **bindingsPtr) -{ - ELEMENT_TYPE *elementType = 0; - int nDefaultAtts = 0; - const XML_Char **appAtts; /* the attribute list to pass to the application */ - int attIndex = 0; - int i; - int n; - int nPrefixes = 0; - BINDING *binding; - const XML_Char *localPart; - - /* lookup the element type name */ - if (tagNamePtr) { - elementType = (ELEMENT_TYPE *)lookup(&dtd.elementTypes, tagNamePtr->str,0); - if (!elementType) { - tagNamePtr->str = poolCopyString(&dtd.pool, tagNamePtr->str); - if (!tagNamePtr->str) - return XML_ERROR_NO_MEMORY; - elementType = (ELEMENT_TYPE *)lookup(&dtd.elementTypes, tagNamePtr->str, sizeof(ELEMENT_TYPE)); - if (!elementType) - return XML_ERROR_NO_MEMORY; - if (ns && !setElementTypePrefix(parser, elementType)) - return XML_ERROR_NO_MEMORY; - } - nDefaultAtts = elementType->nDefaultAtts; - } - /* get the attributes from the tokenizer */ - n = XmlGetAttributes(enc, attStr, attsSize, atts); - if (n + nDefaultAtts > attsSize) { - int oldAttsSize = attsSize; - attsSize = n + nDefaultAtts + INIT_ATTS_SIZE; - atts = REALLOC((void *)atts, attsSize * sizeof(ATTRIBUTE)); - if (!atts) - return XML_ERROR_NO_MEMORY; - if (n > oldAttsSize) - XmlGetAttributes(enc, attStr, n, atts); - } - appAtts = (const XML_Char **)atts; - for (i = 0; i < n; i++) { - /* add the name and value to the attribute list */ - ATTRIBUTE_ID *attId = getAttributeId(parser, enc, atts[i].name, - atts[i].name - + XmlNameLength(enc, atts[i].name)); - if (!attId) - return XML_ERROR_NO_MEMORY; - /* detect duplicate attributes */ - if ((attId->name)[-1]) { - if (enc == encoding) - eventPtr = atts[i].name; - return XML_ERROR_DUPLICATE_ATTRIBUTE; - } - (attId->name)[-1] = 1; - appAtts[attIndex++] = attId->name; - if (!atts[i].normalized) { - enum XML_Error result; - int isCdata = 1; - - /* figure out whether declared as other than CDATA */ - if (attId->maybeTokenized) { - int j; - for (j = 0; j < nDefaultAtts; j++) { - if (attId == elementType->defaultAtts[j].id) { - isCdata = elementType->defaultAtts[j].isCdata; - break; - } - } - } - - /* normalize the attribute value */ - result = storeAttributeValue(parser, enc, isCdata, - atts[i].valuePtr, atts[i].valueEnd, - &tempPool); - if (result) - return result; - if (tagNamePtr) { - appAtts[attIndex] = poolStart(&tempPool); - poolFinish(&tempPool); - } - else - poolDiscard(&tempPool); - } - else if (tagNamePtr) { - /* the value did not need normalizing */ - appAtts[attIndex] = poolStoreString(&tempPool, enc, atts[i].valuePtr, atts[i].valueEnd); - if (appAtts[attIndex] == 0) - return XML_ERROR_NO_MEMORY; - poolFinish(&tempPool); - } - /* handle prefixed attribute names */ - if (attId->prefix && tagNamePtr) { - if (attId->xmlns) { - /* deal with namespace declarations here */ - if (!addBinding(parser, attId->prefix, attId, appAtts[attIndex], bindingsPtr)) - return XML_ERROR_NO_MEMORY; - --attIndex; - } - else { - /* deal with other prefixed names later */ - attIndex++; - nPrefixes++; - (attId->name)[-1] = 2; - } - } - else - attIndex++; - } - if (tagNamePtr) { - int j; - nSpecifiedAtts = attIndex; - if (elementType->idAtt && (elementType->idAtt->name)[-1]) { - for (i = 0; i < attIndex; i += 2) - if (appAtts[i] == elementType->idAtt->name) { - idAttIndex = i; - break; - } - } - else - idAttIndex = -1; - /* do attribute defaulting */ - for (j = 0; j < nDefaultAtts; j++) { - const DEFAULT_ATTRIBUTE *da = elementType->defaultAtts + j; - if (!(da->id->name)[-1] && da->value) { - if (da->id->prefix) { - if (da->id->xmlns) { - if (!addBinding(parser, da->id->prefix, da->id, da->value, bindingsPtr)) - return XML_ERROR_NO_MEMORY; - } - else { - (da->id->name)[-1] = 2; - nPrefixes++; - appAtts[attIndex++] = da->id->name; - appAtts[attIndex++] = da->value; - } - } - else { - (da->id->name)[-1] = 1; - appAtts[attIndex++] = da->id->name; - appAtts[attIndex++] = da->value; - } - } - } - appAtts[attIndex] = 0; - } - i = 0; - if (nPrefixes) { - /* expand prefixed attribute names */ - for (; i < attIndex; i += 2) { - if (appAtts[i][-1] == 2) { - ATTRIBUTE_ID *id; - ((XML_Char *)(appAtts[i]))[-1] = 0; - id = (ATTRIBUTE_ID *)lookup(&dtd.attributeIds, appAtts[i], 0); - if (id->prefix->binding) { - int j; - const BINDING *b = id->prefix->binding; - const XML_Char *s = appAtts[i]; - for (j = 0; j < b->uriLen; j++) { - if (!poolAppendChar(&tempPool, b->uri[j])) - return XML_ERROR_NO_MEMORY; - } - while (*s++ != ':') - ; - do { - if (!poolAppendChar(&tempPool, *s)) - return XML_ERROR_NO_MEMORY; - } while (*s++); - if (ns_triplets) { - tempPool.ptr[-1] = namespaceSeparator; - s = b->prefix->name; - do { - if (!poolAppendChar(&tempPool, *s)) - return XML_ERROR_NO_MEMORY; - } while (*s++); - } - - appAtts[i] = poolStart(&tempPool); - poolFinish(&tempPool); - } - if (!--nPrefixes) - break; - } - else - ((XML_Char *)(appAtts[i]))[-1] = 0; - } - } - /* clear the flags that say whether attributes were specified */ - for (; i < attIndex; i += 2) - ((XML_Char *)(appAtts[i]))[-1] = 0; - if (!tagNamePtr) - return XML_ERROR_NONE; - for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding) - binding->attId->name[-1] = 0; - /* expand the element type name */ - if (elementType->prefix) { - binding = elementType->prefix->binding; - if (!binding) - return XML_ERROR_NONE; - localPart = tagNamePtr->str; - while (*localPart++ != XML_T(':')) - ; - } - else if (dtd.defaultPrefix.binding) { - binding = dtd.defaultPrefix.binding; - localPart = tagNamePtr->str; - } - else - return XML_ERROR_NONE; - tagNamePtr->localPart = localPart; - tagNamePtr->uriLen = binding->uriLen; - for (i = 0; localPart[i++];) - ; - n = i + binding->uriLen; - if (n > binding->uriAlloc) { - TAG *p; - XML_Char *uri = MALLOC((n + EXPAND_SPARE) * sizeof(XML_Char)); - if (!uri) - return XML_ERROR_NO_MEMORY; - binding->uriAlloc = n + EXPAND_SPARE; - memcpy(uri, binding->uri, binding->uriLen * sizeof(XML_Char)); - for (p = tagStack; p; p = p->parent) - if (p->name.str == binding->uri) - p->name.str = uri; - FREE(binding->uri); - binding->uri = uri; - } - memcpy(binding->uri + binding->uriLen, localPart, i * sizeof(XML_Char)); - tagNamePtr->str = binding->uri; - return XML_ERROR_NONE; -} - -static -int addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr) -{ - BINDING *b; - int len; - for (len = 0; uri[len]; len++) - ; - if (namespaceSeparator) - len++; - if (freeBindingList) { - b = freeBindingList; - if (len > b->uriAlloc) { - b->uri = REALLOC(b->uri, sizeof(XML_Char) * (len + EXPAND_SPARE)); - if (!b->uri) - return 0; - b->uriAlloc = len + EXPAND_SPARE; - } - freeBindingList = b->nextTagBinding; - } - else { - b = MALLOC(sizeof(BINDING)); - if (!b) - return 0; - b->uri = MALLOC(sizeof(XML_Char) * (len + EXPAND_SPARE)); - if (!b->uri) { - FREE(b); - return 0; - } - b->uriAlloc = len + EXPAND_SPARE; - } - b->uriLen = len; - memcpy(b->uri, uri, len * sizeof(XML_Char)); - if (namespaceSeparator) - b->uri[len - 1] = namespaceSeparator; - b->prefix = prefix; - b->attId = attId; - b->prevPrefixBinding = prefix->binding; - if (*uri == XML_T('\0') && prefix == &dtd.defaultPrefix) - prefix->binding = 0; - else - prefix->binding = b; - b->nextTagBinding = *bindingsPtr; - *bindingsPtr = b; - if (startNamespaceDeclHandler) - startNamespaceDeclHandler(handlerArg, prefix->name, - prefix->binding ? uri : 0); - return 1; -} - -/* The idea here is to avoid using stack for each CDATA section when -the whole file is parsed with one call. */ - -static -enum XML_Error cdataSectionProcessor(XML_Parser parser, - const char *start, - const char *end, - const char **endPtr) -{ - enum XML_Error result = doCdataSection(parser, encoding, &start, end, endPtr); - if (start) { - processor = contentProcessor; - return contentProcessor(parser, start, end, endPtr); - } - return result; -} - -/* startPtr gets set to non-null is the section is closed, and to null if -the section is not yet closed. */ - -static -enum XML_Error doCdataSection(XML_Parser parser, - const ENCODING *enc, - const char **startPtr, - const char *end, - const char **nextPtr) -{ - const char *s = *startPtr; - const char **eventPP; - const char **eventEndPP; - if (enc == encoding) { - eventPP = &eventPtr; - *eventPP = s; - eventEndPP = &eventEndPtr; - } - else { - eventPP = &(openInternalEntities->internalEventPtr); - eventEndPP = &(openInternalEntities->internalEventEndPtr); - } - *eventPP = s; - *startPtr = 0; - for (;;) { - const char *next; - int tok = XmlCdataSectionTok(enc, s, end, &next); - *eventEndPP = next; - switch (tok) { - case XML_TOK_CDATA_SECT_CLOSE: - if (endCdataSectionHandler) - endCdataSectionHandler(handlerArg); -#if 0 - /* see comment under XML_TOK_CDATA_SECT_OPEN */ - else if (characterDataHandler) - characterDataHandler(handlerArg, dataBuf, 0); -#endif - else if (defaultHandler) - reportDefault(parser, enc, s, next); - *startPtr = next; - return XML_ERROR_NONE; - case XML_TOK_DATA_NEWLINE: - if (characterDataHandler) { - XML_Char c = 0xA; - characterDataHandler(handlerArg, &c, 1); - } - else if (defaultHandler) - reportDefault(parser, enc, s, next); - break; - case XML_TOK_DATA_CHARS: - if (characterDataHandler) { - if (MUST_CONVERT(enc, s)) { - for (;;) { - ICHAR *dataPtr = (ICHAR *)dataBuf; - XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd); - *eventEndPP = next; - characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); - if (s == next) - break; - *eventPP = s; - } - } - else - characterDataHandler(handlerArg, - (XML_Char *)s, - (XML_Char *)next - (XML_Char *)s); - } - else if (defaultHandler) - reportDefault(parser, enc, s, next); - break; - case XML_TOK_INVALID: - *eventPP = next; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL_CHAR: - if (nextPtr) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_PARTIAL_CHAR; - case XML_TOK_PARTIAL: - case XML_TOK_NONE: - if (nextPtr) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_UNCLOSED_CDATA_SECTION; - default: - *eventPP = next; - return XML_ERROR_UNEXPECTED_STATE; - } - *eventPP = s = next; - } - /* not reached */ -} - -#ifdef XML_DTD - -/* The idea here is to avoid using stack for each IGNORE section when -the whole file is parsed with one call. */ - -static -enum XML_Error ignoreSectionProcessor(XML_Parser parser, - const char *start, - const char *end, - const char **endPtr) -{ - enum XML_Error result = doIgnoreSection(parser, encoding, &start, end, endPtr); - if (start) { - processor = prologProcessor; - return prologProcessor(parser, start, end, endPtr); - } - return result; -} - -/* startPtr gets set to non-null is the section is closed, and to null if -the section is not yet closed. */ - -static -enum XML_Error doIgnoreSection(XML_Parser parser, - const ENCODING *enc, - const char **startPtr, - const char *end, - const char **nextPtr) -{ - const char *next; - int tok; - const char *s = *startPtr; - const char **eventPP; - const char **eventEndPP; - if (enc == encoding) { - eventPP = &eventPtr; - *eventPP = s; - eventEndPP = &eventEndPtr; - } - else { - eventPP = &(openInternalEntities->internalEventPtr); - eventEndPP = &(openInternalEntities->internalEventEndPtr); - } - *eventPP = s; - *startPtr = 0; - tok = XmlIgnoreSectionTok(enc, s, end, &next); - *eventEndPP = next; - switch (tok) { - case XML_TOK_IGNORE_SECT: - if (defaultHandler) - reportDefault(parser, enc, s, next); - *startPtr = next; - return XML_ERROR_NONE; - case XML_TOK_INVALID: - *eventPP = next; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL_CHAR: - if (nextPtr) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_PARTIAL_CHAR; - case XML_TOK_PARTIAL: - case XML_TOK_NONE: - if (nextPtr) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_SYNTAX; /* XML_ERROR_UNCLOSED_IGNORE_SECTION */ - default: - *eventPP = next; - return XML_ERROR_UNEXPECTED_STATE; - } - /* not reached */ -} - -#endif /* XML_DTD */ - -static enum XML_Error -initializeEncoding(XML_Parser parser) -{ - const char *s; -#ifdef XML_UNICODE - char encodingBuf[128]; - if (!protocolEncodingName) - s = 0; - else { - int i; - for (i = 0; protocolEncodingName[i]; i++) { - if (i == sizeof(encodingBuf) - 1 - || (protocolEncodingName[i] & ~0x7f) != 0) { - encodingBuf[0] = '\0'; - break; - } - encodingBuf[i] = (char)protocolEncodingName[i]; - } - encodingBuf[i] = '\0'; - s = encodingBuf; - } -#else - s = protocolEncodingName; -#endif - if ((ns ? XmlInitEncodingNS : XmlInitEncoding)(&initEncoding, &encoding, s)) - return XML_ERROR_NONE; - return handleUnknownEncoding(parser, protocolEncodingName); -} - -static enum XML_Error -processXmlDecl(XML_Parser parser, int isGeneralTextEntity, - const char *s, const char *next) -{ - const char *encodingName = 0; - const char *storedEncName = 0; - const ENCODING *newEncoding = 0; - const char *version = 0; - const char *versionend; - const char *storedversion = 0; - int standalone = -1; - if (!(ns - ? XmlParseXmlDeclNS - : XmlParseXmlDecl)(isGeneralTextEntity, - encoding, - s, - next, - &eventPtr, - &version, - &versionend, - &encodingName, - &newEncoding, - &standalone)) - return XML_ERROR_SYNTAX; - if (!isGeneralTextEntity && standalone == 1) { - dtd.standalone = 1; -#ifdef XML_DTD - if (paramEntityParsing == XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE) - paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; -#endif /* XML_DTD */ - } - if (xmlDeclHandler) { - if (encodingName) { - storedEncName = poolStoreString(&temp2Pool, - encoding, - encodingName, - encodingName - + XmlNameLength(encoding, encodingName)); - if (! storedEncName) - return XML_ERROR_NO_MEMORY; - poolFinish(&temp2Pool); - } - if (version) { - storedversion = poolStoreString(&temp2Pool, - encoding, - version, - versionend - encoding->minBytesPerChar); - if (! storedversion) - return XML_ERROR_NO_MEMORY; - } - xmlDeclHandler(handlerArg, storedversion, storedEncName, standalone); - } - else if (defaultHandler) - reportDefault(parser, encoding, s, next); - if (!protocolEncodingName) { - if (newEncoding) { - if (newEncoding->minBytesPerChar != encoding->minBytesPerChar) { - eventPtr = encodingName; - return XML_ERROR_INCORRECT_ENCODING; - } - encoding = newEncoding; - } - else if (encodingName) { - enum XML_Error result; - if (! storedEncName) { - storedEncName = poolStoreString(&temp2Pool, - encoding, - encodingName, - encodingName - + XmlNameLength(encoding, encodingName)); - if (! storedEncName) - return XML_ERROR_NO_MEMORY; - } - result = handleUnknownEncoding(parser, storedEncName); - poolClear(&tempPool); - if (result == XML_ERROR_UNKNOWN_ENCODING) - eventPtr = encodingName; - return result; - } - } - - if (storedEncName || storedversion) - poolClear(&temp2Pool); - - return XML_ERROR_NONE; -} - -static enum XML_Error -handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName) -{ - if (unknownEncodingHandler) { - XML_Encoding info; - int i; - for (i = 0; i < 256; i++) - info.map[i] = -1; - info.convert = 0; - info.data = 0; - info.release = 0; - if (unknownEncodingHandler(unknownEncodingHandlerData, encodingName, &info)) { - ENCODING *enc; - unknownEncodingMem = MALLOC(XmlSizeOfUnknownEncoding()); - if (!unknownEncodingMem) { - if (info.release) - info.release(info.data); - return XML_ERROR_NO_MEMORY; - } - enc = (ns - ? XmlInitUnknownEncodingNS - : XmlInitUnknownEncoding)(unknownEncodingMem, - info.map, - info.convert, - info.data); - if (enc) { - unknownEncodingData = info.data; - unknownEncodingRelease = info.release; - encoding = enc; - return XML_ERROR_NONE; - } - } - if (info.release) - info.release(info.data); - } - return XML_ERROR_UNKNOWN_ENCODING; -} - -static enum XML_Error -prologInitProcessor(XML_Parser parser, - const char *s, - const char *end, - const char **nextPtr) -{ - enum XML_Error result = initializeEncoding(parser); - if (result != XML_ERROR_NONE) - return result; - processor = prologProcessor; - return prologProcessor(parser, s, end, nextPtr); -} - -static enum XML_Error -prologProcessor(XML_Parser parser, - const char *s, - const char *end, - const char **nextPtr) -{ - const char *next; - int tok = XmlPrologTok(encoding, s, end, &next); - return doProlog(parser, encoding, s, end, tok, next, nextPtr); -} - -static enum XML_Error -doProlog(XML_Parser parser, - const ENCODING *enc, - const char *s, - const char *end, - int tok, - const char *next, - const char **nextPtr) -{ -#ifdef XML_DTD - static const XML_Char externalSubsetName[] = { '#' , '\0' }; -#endif /* XML_DTD */ - - const char **eventPP; - const char **eventEndPP; - enum XML_Content_Quant quant; - - if (enc == encoding) { - eventPP = &eventPtr; - eventEndPP = &eventEndPtr; - } - else { - eventPP = &(openInternalEntities->internalEventPtr); - eventEndPP = &(openInternalEntities->internalEventEndPtr); - } - for (;;) { - int role; - *eventPP = s; - *eventEndPP = next; - if (tok <= 0) { - if (nextPtr != 0 && tok != XML_TOK_INVALID) { - *nextPtr = s; - return XML_ERROR_NONE; - } - switch (tok) { - case XML_TOK_INVALID: - *eventPP = next; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL: - return XML_ERROR_UNCLOSED_TOKEN; - case XML_TOK_PARTIAL_CHAR: - return XML_ERROR_PARTIAL_CHAR; - case XML_TOK_NONE: -#ifdef XML_DTD - if (enc != encoding) - return XML_ERROR_NONE; - if (parentParser) { - if (XmlTokenRole(&prologState, XML_TOK_NONE, end, end, enc) - == XML_ROLE_ERROR) - return XML_ERROR_SYNTAX; - hadExternalDoctype = 0; - return XML_ERROR_NONE; - } -#endif /* XML_DTD */ - return XML_ERROR_NO_ELEMENTS; - default: - tok = -tok; - next = end; - break; - } - } - role = XmlTokenRole(&prologState, tok, s, next, enc); - switch (role) { - case XML_ROLE_XML_DECL: - { - enum XML_Error result = processXmlDecl(parser, 0, s, next); - if (result != XML_ERROR_NONE) - return result; - enc = encoding; - } - break; - case XML_ROLE_DOCTYPE_NAME: - if (startDoctypeDeclHandler) { - doctypeName = poolStoreString(&tempPool, enc, s, next); - if (! doctypeName) - return XML_ERROR_NO_MEMORY; - poolFinish(&tempPool); - doctypeSysid = 0; - doctypePubid = 0; - } - break; - case XML_ROLE_DOCTYPE_INTERNAL_SUBSET: - if (startDoctypeDeclHandler) { - startDoctypeDeclHandler(handlerArg, doctypeName, doctypeSysid, - doctypePubid, 1); - doctypeName = 0; - poolClear(&tempPool); - } - break; -#ifdef XML_DTD - case XML_ROLE_TEXT_DECL: - { - enum XML_Error result = processXmlDecl(parser, 1, s, next); - if (result != XML_ERROR_NONE) - return result; - enc = encoding; - } - break; -#endif /* XML_DTD */ - case XML_ROLE_DOCTYPE_PUBLIC_ID: - if (startDoctypeDeclHandler) { - doctypePubid = poolStoreString(&tempPool, enc, s + 1, next - 1); - if (! doctypePubid) - return XML_ERROR_NO_MEMORY; - poolFinish(&tempPool); - } -#ifdef XML_DTD - declEntity = (ENTITY *)lookup(&dtd.paramEntities, - externalSubsetName, - sizeof(ENTITY)); - if (!declEntity) - return XML_ERROR_NO_MEMORY; -#endif /* XML_DTD */ - /* fall through */ - case XML_ROLE_ENTITY_PUBLIC_ID: - if (!XmlIsPublicId(enc, s, next, eventPP)) - return XML_ERROR_SYNTAX; - if (declEntity) { - XML_Char *tem = poolStoreString(&dtd.pool, - enc, - s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (!tem) - return XML_ERROR_NO_MEMORY; - normalizePublicId(tem); - declEntity->publicId = tem; - poolFinish(&dtd.pool); - } - break; - case XML_ROLE_DOCTYPE_CLOSE: - if (doctypeName) { - startDoctypeDeclHandler(handlerArg, doctypeName, - doctypeSysid, doctypePubid, 0); - poolClear(&tempPool); - } - if (dtd.complete && hadExternalDoctype) { - dtd.complete = 0; -#ifdef XML_DTD - if (paramEntityParsing && externalEntityRefHandler) { - ENTITY *entity = (ENTITY *)lookup(&dtd.paramEntities, - externalSubsetName, - 0); - if (!externalEntityRefHandler(externalEntityRefHandlerArg, - 0, - entity->base, - entity->systemId, - entity->publicId)) - return XML_ERROR_EXTERNAL_ENTITY_HANDLING; - } -#endif /* XML_DTD */ - if (!dtd.complete - && !dtd.standalone - && notStandaloneHandler - && !notStandaloneHandler(handlerArg)) - return XML_ERROR_NOT_STANDALONE; - } - if (endDoctypeDeclHandler) - endDoctypeDeclHandler(handlerArg); - break; - case XML_ROLE_INSTANCE_START: - processor = contentProcessor; - return contentProcessor(parser, s, end, nextPtr); - case XML_ROLE_ATTLIST_ELEMENT_NAME: - declElementType = getElementType(parser, enc, s, next); - if (!declElementType) - return XML_ERROR_NO_MEMORY; - break; - case XML_ROLE_ATTRIBUTE_NAME: - declAttributeId = getAttributeId(parser, enc, s, next); - if (!declAttributeId) - return XML_ERROR_NO_MEMORY; - declAttributeIsCdata = 0; - declAttributeType = 0; - declAttributeIsId = 0; - break; - case XML_ROLE_ATTRIBUTE_TYPE_CDATA: - declAttributeIsCdata = 1; - declAttributeType = "CDATA"; - break; - case XML_ROLE_ATTRIBUTE_TYPE_ID: - declAttributeIsId = 1; - declAttributeType = "ID"; - break; - case XML_ROLE_ATTRIBUTE_TYPE_IDREF: - declAttributeType = "IDREF"; - break; - case XML_ROLE_ATTRIBUTE_TYPE_IDREFS: - declAttributeType = "IDREFS"; - break; - case XML_ROLE_ATTRIBUTE_TYPE_ENTITY: - declAttributeType = "ENTITY"; - break; - case XML_ROLE_ATTRIBUTE_TYPE_ENTITIES: - declAttributeType = "ENTITIES"; - break; - case XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN: - declAttributeType = "NMTOKEN"; - break; - case XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS: - declAttributeType = "NMTOKENS"; - break; - - case XML_ROLE_ATTRIBUTE_ENUM_VALUE: - case XML_ROLE_ATTRIBUTE_NOTATION_VALUE: - if (attlistDeclHandler) - { - char *prefix; - if (declAttributeType) { - prefix = "|"; - } - else { - prefix = (role == XML_ROLE_ATTRIBUTE_NOTATION_VALUE - ? "NOTATION(" - : "("); - } - if (! poolAppendString(&tempPool, prefix)) - return XML_ERROR_NO_MEMORY; - if (! poolAppend(&tempPool, enc, s, next)) - return XML_ERROR_NO_MEMORY; - declAttributeType = tempPool.start; - } - break; - case XML_ROLE_IMPLIED_ATTRIBUTE_VALUE: - case XML_ROLE_REQUIRED_ATTRIBUTE_VALUE: - if (dtd.complete - && !defineAttribute(declElementType, declAttributeId, - declAttributeIsCdata, declAttributeIsId, 0, - parser)) - return XML_ERROR_NO_MEMORY; - if (attlistDeclHandler && declAttributeType) { - if (*declAttributeType == '(' - || *declAttributeType == 'N' && declAttributeType[1] == 'O') { - /* Enumerated or Notation type */ - if (! poolAppendChar(&tempPool, ')') - || ! poolAppendChar(&tempPool, '\0')) - return XML_ERROR_NO_MEMORY; - declAttributeType = tempPool.start; - poolFinish(&tempPool); - } - *eventEndPP = s; - attlistDeclHandler(handlerArg, declElementType->name, - declAttributeId->name, declAttributeType, - 0, role == XML_ROLE_REQUIRED_ATTRIBUTE_VALUE); - poolClear(&tempPool); - } - break; - case XML_ROLE_DEFAULT_ATTRIBUTE_VALUE: - case XML_ROLE_FIXED_ATTRIBUTE_VALUE: - { - const XML_Char *attVal; - enum XML_Error result - = storeAttributeValue(parser, enc, declAttributeIsCdata, - s + enc->minBytesPerChar, - next - enc->minBytesPerChar, - &dtd.pool); - if (result) - return result; - attVal = poolStart(&dtd.pool); - poolFinish(&dtd.pool); - if (dtd.complete - /* ID attributes aren't allowed to have a default */ - && !defineAttribute(declElementType, declAttributeId, declAttributeIsCdata, 0, attVal, parser)) - return XML_ERROR_NO_MEMORY; - if (attlistDeclHandler && declAttributeType) { - if (*declAttributeType == '(' - || *declAttributeType == 'N' && declAttributeType[1] == 'O') { - /* Enumerated or Notation type */ - if (! poolAppendChar(&tempPool, ')') - || ! poolAppendChar(&tempPool, '\0')) - return XML_ERROR_NO_MEMORY; - declAttributeType = tempPool.start; - poolFinish(&tempPool); - } - *eventEndPP = s; - attlistDeclHandler(handlerArg, declElementType->name, - declAttributeId->name, declAttributeType, - attVal, - role == XML_ROLE_FIXED_ATTRIBUTE_VALUE); - poolClear(&tempPool); - } - break; - } - case XML_ROLE_ENTITY_VALUE: - { - enum XML_Error result = storeEntityValue(parser, enc, - s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (declEntity) { - declEntity->textPtr = poolStart(&dtd.pool); - declEntity->textLen = poolLength(&dtd.pool); - poolFinish(&dtd.pool); - if (entityDeclHandler) { - *eventEndPP = s; - entityDeclHandler(handlerArg, - declEntity->name, - declEntity->is_param, - declEntity->textPtr, - declEntity->textLen, - curBase, 0, 0, 0); - } - } - else - poolDiscard(&dtd.pool); - if (result != XML_ERROR_NONE) - return result; - } - break; - case XML_ROLE_DOCTYPE_SYSTEM_ID: - if (startDoctypeDeclHandler) { - doctypeSysid = poolStoreString(&tempPool, enc, s + 1, next - 1); - if (! doctypeSysid) - return XML_ERROR_NO_MEMORY; - poolFinish(&tempPool); - } - if (!dtd.standalone -#ifdef XML_DTD - && !paramEntityParsing -#endif /* XML_DTD */ - && notStandaloneHandler - && !notStandaloneHandler(handlerArg)) - return XML_ERROR_NOT_STANDALONE; - hadExternalDoctype = 1; -#ifndef XML_DTD - break; -#else /* XML_DTD */ - if (!declEntity) { - declEntity = (ENTITY *)lookup(&dtd.paramEntities, - externalSubsetName, - sizeof(ENTITY)); - declEntity->publicId = 0; - if (!declEntity) - return XML_ERROR_NO_MEMORY; - } - /* fall through */ -#endif /* XML_DTD */ - case XML_ROLE_ENTITY_SYSTEM_ID: - if (declEntity) { - declEntity->systemId = poolStoreString(&dtd.pool, enc, - s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (!declEntity->systemId) - return XML_ERROR_NO_MEMORY; - declEntity->base = curBase; - poolFinish(&dtd.pool); - } - break; - case XML_ROLE_ENTITY_COMPLETE: - if (declEntity && entityDeclHandler) { - *eventEndPP = s; - entityDeclHandler(handlerArg, - declEntity->name, - 0,0,0, - declEntity->base, - declEntity->systemId, - declEntity->publicId, - 0); - } - break; - case XML_ROLE_ENTITY_NOTATION_NAME: - if (declEntity) { - declEntity->notation = poolStoreString(&dtd.pool, enc, s, next); - if (!declEntity->notation) - return XML_ERROR_NO_MEMORY; - poolFinish(&dtd.pool); - if (unparsedEntityDeclHandler) { - *eventEndPP = s; - unparsedEntityDeclHandler(handlerArg, - declEntity->name, - declEntity->base, - declEntity->systemId, - declEntity->publicId, - declEntity->notation); - } - else if (entityDeclHandler) { - *eventEndPP = s; - entityDeclHandler(handlerArg, - declEntity->name, - 0,0,0, - declEntity->base, - declEntity->systemId, - declEntity->publicId, - declEntity->notation); - } - } - break; - case XML_ROLE_GENERAL_ENTITY_NAME: - { - const XML_Char *name; - if (XmlPredefinedEntityName(enc, s, next)) { - declEntity = 0; - break; - } - name = poolStoreString(&dtd.pool, enc, s, next); - if (!name) - return XML_ERROR_NO_MEMORY; - if (dtd.complete) { - declEntity = (ENTITY *)lookup(&dtd.generalEntities, name, sizeof(ENTITY)); - if (!declEntity) - return XML_ERROR_NO_MEMORY; - if (declEntity->name != name) { - poolDiscard(&dtd.pool); - declEntity = 0; - } - else { - poolFinish(&dtd.pool); - declEntity->publicId = 0; - declEntity->is_param = 0; - } - } - else { - poolDiscard(&dtd.pool); - declEntity = 0; - } - } - break; - case XML_ROLE_PARAM_ENTITY_NAME: -#ifdef XML_DTD - if (dtd.complete) { - const XML_Char *name = poolStoreString(&dtd.pool, enc, s, next); - if (!name) - return XML_ERROR_NO_MEMORY; - declEntity = (ENTITY *)lookup(&dtd.paramEntities, - name, sizeof(ENTITY)); - if (!declEntity) - return XML_ERROR_NO_MEMORY; - if (declEntity->name != name) { - poolDiscard(&dtd.pool); - declEntity = 0; - } - else { - poolFinish(&dtd.pool); - declEntity->publicId = 0; - declEntity->is_param = 1; - } - } -#else /* not XML_DTD */ - declEntity = 0; -#endif /* not XML_DTD */ - break; - case XML_ROLE_NOTATION_NAME: - declNotationPublicId = 0; - declNotationName = 0; - if (notationDeclHandler) { - declNotationName = poolStoreString(&tempPool, enc, s, next); - if (!declNotationName) - return XML_ERROR_NO_MEMORY; - poolFinish(&tempPool); - } - break; - case XML_ROLE_NOTATION_PUBLIC_ID: - if (!XmlIsPublicId(enc, s, next, eventPP)) - return XML_ERROR_SYNTAX; - if (declNotationName) { - XML_Char *tem = poolStoreString(&tempPool, - enc, - s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (!tem) - return XML_ERROR_NO_MEMORY; - normalizePublicId(tem); - declNotationPublicId = tem; - poolFinish(&tempPool); - } - break; - case XML_ROLE_NOTATION_SYSTEM_ID: - if (declNotationName && notationDeclHandler) { - const XML_Char *systemId - = poolStoreString(&tempPool, enc, - s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (!systemId) - return XML_ERROR_NO_MEMORY; - *eventEndPP = s; - notationDeclHandler(handlerArg, - declNotationName, - curBase, - systemId, - declNotationPublicId); - } - poolClear(&tempPool); - break; - case XML_ROLE_NOTATION_NO_SYSTEM_ID: - if (declNotationPublicId && notationDeclHandler) { - *eventEndPP = s; - notationDeclHandler(handlerArg, - declNotationName, - curBase, - 0, - declNotationPublicId); - } - poolClear(&tempPool); - break; - case XML_ROLE_ERROR: - switch (tok) { - case XML_TOK_PARAM_ENTITY_REF: - return XML_ERROR_PARAM_ENTITY_REF; - case XML_TOK_XML_DECL: - return XML_ERROR_MISPLACED_XML_PI; - default: - return XML_ERROR_SYNTAX; - } -#ifdef XML_DTD - case XML_ROLE_IGNORE_SECT: - { - enum XML_Error result; - if (defaultHandler) - reportDefault(parser, enc, s, next); - result = doIgnoreSection(parser, enc, &next, end, nextPtr); - if (!next) { - processor = ignoreSectionProcessor; - return result; - } - } - break; -#endif /* XML_DTD */ - case XML_ROLE_GROUP_OPEN: - if (prologState.level >= groupSize) { - if (groupSize) { - groupConnector = REALLOC(groupConnector, groupSize *= 2); - if (dtd.scaffIndex) - dtd.scaffIndex = REALLOC(dtd.scaffIndex, groupSize * sizeof(int)); - } - else - groupConnector = MALLOC(groupSize = 32); - if (!groupConnector) - return XML_ERROR_NO_MEMORY; - } - groupConnector[prologState.level] = 0; - if (dtd.in_eldecl) { - int myindex = nextScaffoldPart(parser); - if (myindex < 0) - return XML_ERROR_NO_MEMORY; - dtd.scaffIndex[dtd.scaffLevel] = myindex; - dtd.scaffLevel++; - dtd.scaffold[myindex].type = XML_CTYPE_SEQ; - } - break; - case XML_ROLE_GROUP_SEQUENCE: - if (groupConnector[prologState.level] == '|') - return XML_ERROR_SYNTAX; - groupConnector[prologState.level] = ','; - break; - case XML_ROLE_GROUP_CHOICE: - if (groupConnector[prologState.level] == ',') - return XML_ERROR_SYNTAX; - if (dtd.in_eldecl - && ! groupConnector[prologState.level] - && dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]].type != XML_CTYPE_MIXED - ) { - dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]].type = XML_CTYPE_CHOICE; - } - groupConnector[prologState.level] = '|'; - break; - case XML_ROLE_PARAM_ENTITY_REF: -#ifdef XML_DTD - case XML_ROLE_INNER_PARAM_ENTITY_REF: - if (paramEntityParsing - && (dtd.complete || role == XML_ROLE_INNER_PARAM_ENTITY_REF)) { - const XML_Char *name; - ENTITY *entity; - name = poolStoreString(&dtd.pool, enc, - s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (!name) - return XML_ERROR_NO_MEMORY; - entity = (ENTITY *)lookup(&dtd.paramEntities, name, 0); - poolDiscard(&dtd.pool); - if (!entity) { - /* FIXME what to do if !dtd.complete? */ - return XML_ERROR_UNDEFINED_ENTITY; - } - if (entity->open) - return XML_ERROR_RECURSIVE_ENTITY_REF; - if (entity->textPtr) { - enum XML_Error result; - result = processInternalParamEntity(parser, entity); - if (result != XML_ERROR_NONE) - return result; - break; - } - if (role == XML_ROLE_INNER_PARAM_ENTITY_REF) - return XML_ERROR_PARAM_ENTITY_REF; - if (externalEntityRefHandler) { - dtd.complete = 0; - entity->open = 1; - if (!externalEntityRefHandler(externalEntityRefHandlerArg, - 0, - entity->base, - entity->systemId, - entity->publicId)) { - entity->open = 0; - return XML_ERROR_EXTERNAL_ENTITY_HANDLING; - } - entity->open = 0; - if (dtd.complete) - break; - } - } -#endif /* XML_DTD */ - if (!dtd.standalone - && notStandaloneHandler - && !notStandaloneHandler(handlerArg)) - return XML_ERROR_NOT_STANDALONE; - dtd.complete = 0; - if (defaultHandler) - reportDefault(parser, enc, s, next); - break; - - /* Element declaration stuff */ - - case XML_ROLE_ELEMENT_NAME: - if (elementDeclHandler) { - declElementType = getElementType(parser, enc, s, next); - if (! declElementType) - return XML_ERROR_NO_MEMORY; - dtd.scaffLevel = 0; - dtd.scaffCount = 0; - dtd.in_eldecl = 1; - } - break; - - case XML_ROLE_CONTENT_ANY: - case XML_ROLE_CONTENT_EMPTY: - if (dtd.in_eldecl) { - if (elementDeclHandler) { - XML_Content * content = (XML_Content *) MALLOC(sizeof(XML_Content)); - if (! content) - return XML_ERROR_NO_MEMORY; - content->quant = XML_CQUANT_NONE; - content->name = 0; - content->numchildren = 0; - content->children = 0; - content->type = ((role == XML_ROLE_CONTENT_ANY) ? - XML_CTYPE_ANY : - XML_CTYPE_EMPTY); - *eventEndPP = s; - elementDeclHandler(handlerArg, declElementType->name, content); - } - dtd.in_eldecl = 0; - } - break; - - case XML_ROLE_CONTENT_PCDATA: - if (dtd.in_eldecl) { - dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]].type = XML_CTYPE_MIXED; - } - break; - - case XML_ROLE_CONTENT_ELEMENT: - quant = XML_CQUANT_NONE; - goto elementContent; - case XML_ROLE_CONTENT_ELEMENT_OPT: - quant = XML_CQUANT_OPT; - goto elementContent; - case XML_ROLE_CONTENT_ELEMENT_REP: - quant = XML_CQUANT_REP; - goto elementContent; - case XML_ROLE_CONTENT_ELEMENT_PLUS: - quant = XML_CQUANT_PLUS; - elementContent: - if (dtd.in_eldecl) - { - ELEMENT_TYPE *el; - const char *nxt = quant == XML_CQUANT_NONE ? next : next - 1; - int myindex = nextScaffoldPart(parser); - if (myindex < 0) - return XML_ERROR_NO_MEMORY; - dtd.scaffold[myindex].type = XML_CTYPE_NAME; - dtd.scaffold[myindex].quant = quant; - el = getElementType(parser, enc, s, nxt); - if (! el) - return XML_ERROR_NO_MEMORY; - dtd.scaffold[myindex].name = el->name; - dtd.contentStringLen += nxt - s + 1; - } - break; - - case XML_ROLE_GROUP_CLOSE: - quant = XML_CQUANT_NONE; - goto closeGroup; - case XML_ROLE_GROUP_CLOSE_OPT: - quant = XML_CQUANT_OPT; - goto closeGroup; - case XML_ROLE_GROUP_CLOSE_REP: - quant = XML_CQUANT_REP; - goto closeGroup; - case XML_ROLE_GROUP_CLOSE_PLUS: - quant = XML_CQUANT_PLUS; - closeGroup: - if (dtd.in_eldecl) { - dtd.scaffLevel--; - dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel]].quant = quant; - if (dtd.scaffLevel == 0) { - if (elementDeclHandler) { - XML_Content *model = build_model(parser); - if (! model) - return XML_ERROR_NO_MEMORY; - *eventEndPP = s; - elementDeclHandler(handlerArg, declElementType->name, model); - } - dtd.in_eldecl = 0; - dtd.contentStringLen = 0; - } - } - break; - /* End element declaration stuff */ - - case XML_ROLE_NONE: - switch (tok) { - case XML_TOK_PI: - if (!reportProcessingInstruction(parser, enc, s, next)) - return XML_ERROR_NO_MEMORY; - break; - case XML_TOK_COMMENT: - if (!reportComment(parser, enc, s, next)) - return XML_ERROR_NO_MEMORY; - break; - } - break; - } - if (defaultHandler) { - switch (tok) { - case XML_TOK_PI: - case XML_TOK_COMMENT: - case XML_TOK_BOM: - case XML_TOK_XML_DECL: -#ifdef XML_DTD - case XML_TOK_IGNORE_SECT: -#endif /* XML_DTD */ - case XML_TOK_PARAM_ENTITY_REF: - break; - default: -#ifdef XML_DTD - if (role != XML_ROLE_IGNORE_SECT) -#endif /* XML_DTD */ - reportDefault(parser, enc, s, next); - } - } - s = next; - tok = XmlPrologTok(enc, s, end, &next); - } - /* not reached */ -} - -static -enum XML_Error epilogProcessor(XML_Parser parser, - const char *s, - const char *end, - const char **nextPtr) -{ - processor = epilogProcessor; - eventPtr = s; - for (;;) { - const char *next; - int tok = XmlPrologTok(encoding, s, end, &next); - eventEndPtr = next; - switch (tok) { - case -XML_TOK_PROLOG_S: - if (defaultHandler) { - eventEndPtr = end; - reportDefault(parser, encoding, s, end); - } - /* fall through */ - case XML_TOK_NONE: - if (nextPtr) - *nextPtr = end; - return XML_ERROR_NONE; - case XML_TOK_PROLOG_S: - if (defaultHandler) - reportDefault(parser, encoding, s, next); - break; - case XML_TOK_PI: - if (!reportProcessingInstruction(parser, encoding, s, next)) - return XML_ERROR_NO_MEMORY; - break; - case XML_TOK_COMMENT: - if (!reportComment(parser, encoding, s, next)) - return XML_ERROR_NO_MEMORY; - break; - case XML_TOK_INVALID: - eventPtr = next; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL: - if (nextPtr) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_UNCLOSED_TOKEN; - case XML_TOK_PARTIAL_CHAR: - if (nextPtr) { - *nextPtr = s; - return XML_ERROR_NONE; - } - return XML_ERROR_PARTIAL_CHAR; - default: - return XML_ERROR_JUNK_AFTER_DOC_ELEMENT; - } - eventPtr = s = next; - } -} - -#ifdef XML_DTD - -static enum XML_Error -processInternalParamEntity(XML_Parser parser, ENTITY *entity) -{ - const char *s, *end, *next; - int tok; - enum XML_Error result; - OPEN_INTERNAL_ENTITY openEntity; - entity->open = 1; - openEntity.next = openInternalEntities; - openInternalEntities = &openEntity; - openEntity.entity = entity; - openEntity.internalEventPtr = 0; - openEntity.internalEventEndPtr = 0; - s = (char *)entity->textPtr; - end = (char *)(entity->textPtr + entity->textLen); - tok = XmlPrologTok(internalEncoding, s, end, &next); - result = doProlog(parser, internalEncoding, s, end, tok, next, 0); - entity->open = 0; - openInternalEntities = openEntity.next; - return result; -} - -#endif /* XML_DTD */ - -static -enum XML_Error errorProcessor(XML_Parser parser, - const char *s, - const char *end, - const char **nextPtr) -{ - return errorCode; -} - -static enum XML_Error -storeAttributeValue(XML_Parser parser, const ENCODING *enc, int isCdata, - const char *ptr, const char *end, - STRING_POOL *pool) -{ - enum XML_Error result = appendAttributeValue(parser, enc, isCdata, ptr, end, pool); - if (result) - return result; - if (!isCdata && poolLength(pool) && poolLastChar(pool) == 0x20) - poolChop(pool); - if (!poolAppendChar(pool, XML_T('\0'))) - return XML_ERROR_NO_MEMORY; - return XML_ERROR_NONE; -} - -static enum XML_Error -appendAttributeValue(XML_Parser parser, const ENCODING *enc, int isCdata, - const char *ptr, const char *end, - STRING_POOL *pool) -{ - for (;;) { - const char *next; - int tok = XmlAttributeValueTok(enc, ptr, end, &next); - switch (tok) { - case XML_TOK_NONE: - return XML_ERROR_NONE; - case XML_TOK_INVALID: - if (enc == encoding) - eventPtr = next; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_PARTIAL: - if (enc == encoding) - eventPtr = ptr; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_CHAR_REF: - { - XML_Char buf[XML_ENCODE_MAX]; - int i; - int n = XmlCharRefNumber(enc, ptr); - if (n < 0) { - if (enc == encoding) - eventPtr = ptr; - return XML_ERROR_BAD_CHAR_REF; - } - if (!isCdata - && n == 0x20 /* space */ - && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) - break; - n = XmlEncode(n, (ICHAR *)buf); - if (!n) { - if (enc == encoding) - eventPtr = ptr; - return XML_ERROR_BAD_CHAR_REF; - } - for (i = 0; i < n; i++) { - if (!poolAppendChar(pool, buf[i])) - return XML_ERROR_NO_MEMORY; - } - } - break; - case XML_TOK_DATA_CHARS: - if (!poolAppend(pool, enc, ptr, next)) - return XML_ERROR_NO_MEMORY; - break; - break; - case XML_TOK_TRAILING_CR: - next = ptr + enc->minBytesPerChar; - /* fall through */ - case XML_TOK_ATTRIBUTE_VALUE_S: - case XML_TOK_DATA_NEWLINE: - if (!isCdata && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) - break; - if (!poolAppendChar(pool, 0x20)) - return XML_ERROR_NO_MEMORY; - break; - case XML_TOK_ENTITY_REF: - { - const XML_Char *name; - ENTITY *entity; - XML_Char ch = XmlPredefinedEntityName(enc, - ptr + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (ch) { - if (!poolAppendChar(pool, ch)) - return XML_ERROR_NO_MEMORY; - break; - } - name = poolStoreString(&temp2Pool, enc, - ptr + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (!name) - return XML_ERROR_NO_MEMORY; - entity = (ENTITY *)lookup(&dtd.generalEntities, name, 0); - poolDiscard(&temp2Pool); - if (!entity) { - if (dtd.complete) { - if (enc == encoding) - eventPtr = ptr; - return XML_ERROR_UNDEFINED_ENTITY; - } - } - else if (entity->open) { - if (enc == encoding) - eventPtr = ptr; - return XML_ERROR_RECURSIVE_ENTITY_REF; - } - else if (entity->notation) { - if (enc == encoding) - eventPtr = ptr; - return XML_ERROR_BINARY_ENTITY_REF; - } - else if (!entity->textPtr) { - if (enc == encoding) - eventPtr = ptr; - return XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF; - } - else { - enum XML_Error result; - const XML_Char *textEnd = entity->textPtr + entity->textLen; - entity->open = 1; - result = appendAttributeValue(parser, internalEncoding, isCdata, (char *)entity->textPtr, (char *)textEnd, pool); - entity->open = 0; - if (result) - return result; - } - } - break; - default: - if (enc == encoding) - eventPtr = ptr; - return XML_ERROR_UNEXPECTED_STATE; - } - ptr = next; - } - /* not reached */ -} - -static -enum XML_Error storeEntityValue(XML_Parser parser, - const ENCODING *enc, - const char *entityTextPtr, - const char *entityTextEnd) -{ - STRING_POOL *pool = &(dtd.pool); - for (;;) { - const char *next; - int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next); - switch (tok) { - case XML_TOK_PARAM_ENTITY_REF: -#ifdef XML_DTD - if (parentParser || enc != encoding) { - enum XML_Error result; - const XML_Char *name; - ENTITY *entity; - name = poolStoreString(&tempPool, enc, - entityTextPtr + enc->minBytesPerChar, - next - enc->minBytesPerChar); - if (!name) - return XML_ERROR_NO_MEMORY; - entity = (ENTITY *)lookup(&dtd.paramEntities, name, 0); - poolDiscard(&tempPool); - if (!entity) { - if (enc == encoding) - eventPtr = entityTextPtr; - return XML_ERROR_UNDEFINED_ENTITY; - } - if (entity->open) { - if (enc == encoding) - eventPtr = entityTextPtr; - return XML_ERROR_RECURSIVE_ENTITY_REF; - } - if (entity->systemId) { - if (enc == encoding) - eventPtr = entityTextPtr; - return XML_ERROR_PARAM_ENTITY_REF; - } - entity->open = 1; - result = storeEntityValue(parser, - internalEncoding, - (char *)entity->textPtr, - (char *)(entity->textPtr + entity->textLen)); - entity->open = 0; - if (result) - return result; - break; - } -#endif /* XML_DTD */ - eventPtr = entityTextPtr; - return XML_ERROR_SYNTAX; - case XML_TOK_NONE: - return XML_ERROR_NONE; - case XML_TOK_ENTITY_REF: - case XML_TOK_DATA_CHARS: - if (!poolAppend(pool, enc, entityTextPtr, next)) - return XML_ERROR_NO_MEMORY; - break; - case XML_TOK_TRAILING_CR: - next = entityTextPtr + enc->minBytesPerChar; - /* fall through */ - case XML_TOK_DATA_NEWLINE: - if (pool->end == pool->ptr && !poolGrow(pool)) - return XML_ERROR_NO_MEMORY; - *(pool->ptr)++ = 0xA; - break; - case XML_TOK_CHAR_REF: - { - XML_Char buf[XML_ENCODE_MAX]; - int i; - int n = XmlCharRefNumber(enc, entityTextPtr); - if (n < 0) { - if (enc == encoding) - eventPtr = entityTextPtr; - return XML_ERROR_BAD_CHAR_REF; - } - n = XmlEncode(n, (ICHAR *)buf); - if (!n) { - if (enc == encoding) - eventPtr = entityTextPtr; - return XML_ERROR_BAD_CHAR_REF; - } - for (i = 0; i < n; i++) { - if (pool->end == pool->ptr && !poolGrow(pool)) - return XML_ERROR_NO_MEMORY; - *(pool->ptr)++ = buf[i]; - } - } - break; - case XML_TOK_PARTIAL: - if (enc == encoding) - eventPtr = entityTextPtr; - return XML_ERROR_INVALID_TOKEN; - case XML_TOK_INVALID: - if (enc == encoding) - eventPtr = next; - return XML_ERROR_INVALID_TOKEN; - default: - if (enc == encoding) - eventPtr = entityTextPtr; - return XML_ERROR_UNEXPECTED_STATE; - } - entityTextPtr = next; - } - /* not reached */ -} - -static void -normalizeLines(XML_Char *s) -{ - XML_Char *p; - for (;; s++) { - if (*s == XML_T('\0')) - return; - if (*s == 0xD) - break; - } - p = s; - do { - if (*s == 0xD) { - *p++ = 0xA; - if (*++s == 0xA) - s++; - } - else - *p++ = *s++; - } while (*s); - *p = XML_T('\0'); -} - -static int -reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) -{ - const XML_Char *target; - XML_Char *data; - const char *tem; - if (!processingInstructionHandler) { - if (defaultHandler) - reportDefault(parser, enc, start, end); - return 1; - } - start += enc->minBytesPerChar * 2; - tem = start + XmlNameLength(enc, start); - target = poolStoreString(&tempPool, enc, start, tem); - if (!target) - return 0; - poolFinish(&tempPool); - data = poolStoreString(&tempPool, enc, - XmlSkipS(enc, tem), - end - enc->minBytesPerChar*2); - if (!data) - return 0; - normalizeLines(data); - processingInstructionHandler(handlerArg, target, data); - poolClear(&tempPool); - return 1; -} - -static int -reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) -{ - XML_Char *data; - if (!commentHandler) { - if (defaultHandler) - reportDefault(parser, enc, start, end); - return 1; - } - data = poolStoreString(&tempPool, - enc, - start + enc->minBytesPerChar * 4, - end - enc->minBytesPerChar * 3); - if (!data) - return 0; - normalizeLines(data); - commentHandler(handlerArg, data); - poolClear(&tempPool); - return 1; -} - -static void -reportDefault(XML_Parser parser, const ENCODING *enc, const char *s, const char *end) -{ - if (MUST_CONVERT(enc, s)) { - const char **eventPP; - const char **eventEndPP; - if (enc == encoding) { - eventPP = &eventPtr; - eventEndPP = &eventEndPtr; - } - else { - eventPP = &(openInternalEntities->internalEventPtr); - eventEndPP = &(openInternalEntities->internalEventEndPtr); - } - do { - ICHAR *dataPtr = (ICHAR *)dataBuf; - XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd); - *eventEndPP = s; - defaultHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); - *eventPP = s; - } while (s != end); - } - else - defaultHandler(handlerArg, (XML_Char *)s, (XML_Char *)end - (XML_Char *)s); -} - - -static int -defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, int isCdata, - int isId, const XML_Char *value, XML_Parser parser) -{ - DEFAULT_ATTRIBUTE *att; - if (value || isId) { - /* The handling of default attributes gets messed up if we have - a default which duplicates a non-default. */ - int i; - for (i = 0; i < type->nDefaultAtts; i++) - if (attId == type->defaultAtts[i].id) - return 1; - if (isId && !type->idAtt && !attId->xmlns) - type->idAtt = attId; - } - if (type->nDefaultAtts == type->allocDefaultAtts) { - if (type->allocDefaultAtts == 0) { - type->allocDefaultAtts = 8; - type->defaultAtts = MALLOC(type->allocDefaultAtts*sizeof(DEFAULT_ATTRIBUTE)); - } - else { - type->allocDefaultAtts *= 2; - type->defaultAtts = REALLOC(type->defaultAtts, - type->allocDefaultAtts*sizeof(DEFAULT_ATTRIBUTE)); - } - if (!type->defaultAtts) - return 0; - } - att = type->defaultAtts + type->nDefaultAtts; - att->id = attId; - att->value = value; - att->isCdata = isCdata; - if (!isCdata) - attId->maybeTokenized = 1; - type->nDefaultAtts += 1; - return 1; -} - -static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType) -{ - const XML_Char *name; - for (name = elementType->name; *name; name++) { - if (*name == XML_T(':')) { - PREFIX *prefix; - const XML_Char *s; - for (s = elementType->name; s != name; s++) { - if (!poolAppendChar(&dtd.pool, *s)) - return 0; - } - if (!poolAppendChar(&dtd.pool, XML_T('\0'))) - return 0; - prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&dtd.pool), sizeof(PREFIX)); - if (!prefix) - return 0; - if (prefix->name == poolStart(&dtd.pool)) - poolFinish(&dtd.pool); - else - poolDiscard(&dtd.pool); - elementType->prefix = prefix; - - } - } - return 1; -} - -static ATTRIBUTE_ID * -getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) -{ - ATTRIBUTE_ID *id; - const XML_Char *name; - if (!poolAppendChar(&dtd.pool, XML_T('\0'))) - return 0; - name = poolStoreString(&dtd.pool, enc, start, end); - if (!name) - return 0; - ++name; - id = (ATTRIBUTE_ID *)lookup(&dtd.attributeIds, name, sizeof(ATTRIBUTE_ID)); - if (!id) - return 0; - if (id->name != name) - poolDiscard(&dtd.pool); - else { - poolFinish(&dtd.pool); - if (!ns) - ; - else if (name[0] == 'x' - && name[1] == 'm' - && name[2] == 'l' - && name[3] == 'n' - && name[4] == 's' - && (name[5] == XML_T('\0') || name[5] == XML_T(':'))) { - if (name[5] == '\0') - id->prefix = &dtd.defaultPrefix; - else - id->prefix = (PREFIX *)lookup(&dtd.prefixes, name + 6, sizeof(PREFIX)); - id->xmlns = 1; - } - else { - int i; - for (i = 0; name[i]; i++) { - if (name[i] == XML_T(':')) { - int j; - for (j = 0; j < i; j++) { - if (!poolAppendChar(&dtd.pool, name[j])) - return 0; - } - if (!poolAppendChar(&dtd.pool, XML_T('\0'))) - return 0; - id->prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&dtd.pool), sizeof(PREFIX)); - if (id->prefix->name == poolStart(&dtd.pool)) - poolFinish(&dtd.pool); - else - poolDiscard(&dtd.pool); - break; - } - } - } - } - return id; -} - -#define CONTEXT_SEP XML_T('\f') - -static -const XML_Char *getContext(XML_Parser parser) -{ - HASH_TABLE_ITER iter; - int needSep = 0; - - if (dtd.defaultPrefix.binding) { - int i; - int len; - if (!poolAppendChar(&tempPool, XML_T('='))) - return 0; - len = dtd.defaultPrefix.binding->uriLen; - if (namespaceSeparator != XML_T('\0')) - len--; - for (i = 0; i < len; i++) - if (!poolAppendChar(&tempPool, dtd.defaultPrefix.binding->uri[i])) - return 0; - needSep = 1; - } - - hashTableIterInit(&iter, &(dtd.prefixes)); - for (;;) { - int i; - int len; - const XML_Char *s; - PREFIX *prefix = (PREFIX *)hashTableIterNext(&iter); - if (!prefix) - break; - if (!prefix->binding) - continue; - if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP)) - return 0; - for (s = prefix->name; *s; s++) - if (!poolAppendChar(&tempPool, *s)) - return 0; - if (!poolAppendChar(&tempPool, XML_T('='))) - return 0; - len = prefix->binding->uriLen; - if (namespaceSeparator != XML_T('\0')) - len--; - for (i = 0; i < len; i++) - if (!poolAppendChar(&tempPool, prefix->binding->uri[i])) - return 0; - needSep = 1; - } - - - hashTableIterInit(&iter, &(dtd.generalEntities)); - for (;;) { - const XML_Char *s; - ENTITY *e = (ENTITY *)hashTableIterNext(&iter); - if (!e) - break; - if (!e->open) - continue; - if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP)) - return 0; - for (s = e->name; *s; s++) - if (!poolAppendChar(&tempPool, *s)) - return 0; - needSep = 1; - } - - if (!poolAppendChar(&tempPool, XML_T('\0'))) - return 0; - return tempPool.start; -} - -static -int setContext(XML_Parser parser, const XML_Char *context) -{ - const XML_Char *s = context; - - while (*context != XML_T('\0')) { - if (*s == CONTEXT_SEP || *s == XML_T('\0')) { - ENTITY *e; - if (!poolAppendChar(&tempPool, XML_T('\0'))) - return 0; - e = (ENTITY *)lookup(&dtd.generalEntities, poolStart(&tempPool), 0); - if (e) - e->open = 1; - if (*s != XML_T('\0')) - s++; - context = s; - poolDiscard(&tempPool); - } - else if (*s == '=') { - PREFIX *prefix; - if (poolLength(&tempPool) == 0) - prefix = &dtd.defaultPrefix; - else { - if (!poolAppendChar(&tempPool, XML_T('\0'))) - return 0; - prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&tempPool), sizeof(PREFIX)); - if (!prefix) - return 0; - if (prefix->name == poolStart(&tempPool)) { - prefix->name = poolCopyString(&dtd.pool, prefix->name); - if (!prefix->name) - return 0; - } - poolDiscard(&tempPool); - } - for (context = s + 1; *context != CONTEXT_SEP && *context != XML_T('\0'); context++) - if (!poolAppendChar(&tempPool, *context)) - return 0; - if (!poolAppendChar(&tempPool, XML_T('\0'))) - return 0; - if (!addBinding(parser, prefix, 0, poolStart(&tempPool), &inheritedBindings)) - return 0; - poolDiscard(&tempPool); - if (*context != XML_T('\0')) - ++context; - s = context; - } - else { - if (!poolAppendChar(&tempPool, *s)) - return 0; - s++; - } - } - return 1; -} - - -static -void normalizePublicId(XML_Char *publicId) -{ - XML_Char *p = publicId; - XML_Char *s; - for (s = publicId; *s; s++) { - switch (*s) { - case 0x20: - case 0xD: - case 0xA: - if (p != publicId && p[-1] != 0x20) - *p++ = 0x20; - break; - default: - *p++ = *s; - } - } - if (p != publicId && p[-1] == 0x20) - --p; - *p = XML_T('\0'); -} - -static int dtdInit(DTD *p, XML_Parser parser) -{ - XML_Memory_Handling_Suite *ms = &((Parser *) parser)->m_mem; - poolInit(&(p->pool), ms); - hashTableInit(&(p->generalEntities), ms); - hashTableInit(&(p->elementTypes), ms); - hashTableInit(&(p->attributeIds), ms); - hashTableInit(&(p->prefixes), ms); - p->complete = 1; - p->standalone = 0; -#ifdef XML_DTD - hashTableInit(&(p->paramEntities), ms); -#endif /* XML_DTD */ - p->defaultPrefix.name = 0; - p->defaultPrefix.binding = 0; - - p->in_eldecl = 0; - p->scaffIndex = 0; - p->scaffLevel = 0; - p->scaffold = 0; - p->contentStringLen = 0; - p->scaffSize = 0; - p->scaffCount = 0; - - return 1; -} - -#ifdef XML_DTD - -static void dtdSwap(DTD *p1, DTD *p2) -{ - DTD tem; - memcpy(&tem, p1, sizeof(DTD)); - memcpy(p1, p2, sizeof(DTD)); - memcpy(p2, &tem, sizeof(DTD)); -} - -#endif /* XML_DTD */ - -static void dtdDestroy(DTD *p, XML_Parser parser) -{ - HASH_TABLE_ITER iter; - hashTableIterInit(&iter, &(p->elementTypes)); - for (;;) { - ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter); - if (!e) - break; - if (e->allocDefaultAtts != 0) - FREE(e->defaultAtts); - } - hashTableDestroy(&(p->generalEntities)); -#ifdef XML_DTD - hashTableDestroy(&(p->paramEntities)); -#endif /* XML_DTD */ - hashTableDestroy(&(p->elementTypes)); - hashTableDestroy(&(p->attributeIds)); - hashTableDestroy(&(p->prefixes)); - poolDestroy(&(p->pool)); - if (p->scaffIndex) - FREE(p->scaffIndex); - if (p->scaffold) - FREE(p->scaffold); -} - -/* Do a deep copy of the DTD. Return 0 for out of memory; non-zero otherwise. -The new DTD has already been initialized. */ - -static int dtdCopy(DTD *newDtd, const DTD *oldDtd, XML_Parser parser) -{ - HASH_TABLE_ITER iter; - - /* Copy the prefix table. */ - - hashTableIterInit(&iter, &(oldDtd->prefixes)); - for (;;) { - const XML_Char *name; - const PREFIX *oldP = (PREFIX *)hashTableIterNext(&iter); - if (!oldP) - break; - name = poolCopyString(&(newDtd->pool), oldP->name); - if (!name) - return 0; - if (!lookup(&(newDtd->prefixes), name, sizeof(PREFIX))) - return 0; - } - - hashTableIterInit(&iter, &(oldDtd->attributeIds)); - - /* Copy the attribute id table. */ - - for (;;) { - ATTRIBUTE_ID *newA; - const XML_Char *name; - const ATTRIBUTE_ID *oldA = (ATTRIBUTE_ID *)hashTableIterNext(&iter); - - if (!oldA) - break; - /* Remember to allocate the scratch byte before the name. */ - if (!poolAppendChar(&(newDtd->pool), XML_T('\0'))) - return 0; - name = poolCopyString(&(newDtd->pool), oldA->name); - if (!name) - return 0; - ++name; - newA = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), name, sizeof(ATTRIBUTE_ID)); - if (!newA) - return 0; - newA->maybeTokenized = oldA->maybeTokenized; - if (oldA->prefix) { - newA->xmlns = oldA->xmlns; - if (oldA->prefix == &oldDtd->defaultPrefix) - newA->prefix = &newDtd->defaultPrefix; - else - newA->prefix = (PREFIX *)lookup(&(newDtd->prefixes), oldA->prefix->name, 0); - } - } - - /* Copy the element type table. */ - - hashTableIterInit(&iter, &(oldDtd->elementTypes)); - - for (;;) { - int i; - ELEMENT_TYPE *newE; - const XML_Char *name; - const ELEMENT_TYPE *oldE = (ELEMENT_TYPE *)hashTableIterNext(&iter); - if (!oldE) - break; - name = poolCopyString(&(newDtd->pool), oldE->name); - if (!name) - return 0; - newE = (ELEMENT_TYPE *)lookup(&(newDtd->elementTypes), name, sizeof(ELEMENT_TYPE)); - if (!newE) - return 0; - if (oldE->nDefaultAtts) { - newE->defaultAtts = (DEFAULT_ATTRIBUTE *)MALLOC(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); - if (!newE->defaultAtts) - return 0; - } - if (oldE->idAtt) - newE->idAtt = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), oldE->idAtt->name, 0); - newE->allocDefaultAtts = newE->nDefaultAtts = oldE->nDefaultAtts; - if (oldE->prefix) - newE->prefix = (PREFIX *)lookup(&(newDtd->prefixes), oldE->prefix->name, 0); - for (i = 0; i < newE->nDefaultAtts; i++) { - newE->defaultAtts[i].id = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), oldE->defaultAtts[i].id->name, 0); - newE->defaultAtts[i].isCdata = oldE->defaultAtts[i].isCdata; - if (oldE->defaultAtts[i].value) { - newE->defaultAtts[i].value = poolCopyString(&(newDtd->pool), oldE->defaultAtts[i].value); - if (!newE->defaultAtts[i].value) - return 0; - } - else - newE->defaultAtts[i].value = 0; - } - } - - /* Copy the entity tables. */ - if (!copyEntityTable(&(newDtd->generalEntities), - &(newDtd->pool), - &(oldDtd->generalEntities), parser)) - return 0; - -#ifdef XML_DTD - if (!copyEntityTable(&(newDtd->paramEntities), - &(newDtd->pool), - &(oldDtd->paramEntities), parser)) - return 0; -#endif /* XML_DTD */ - - newDtd->complete = oldDtd->complete; - newDtd->standalone = oldDtd->standalone; - - /* Don't want deep copying for scaffolding */ - newDtd->in_eldecl = oldDtd->in_eldecl; - newDtd->scaffold = oldDtd->scaffold; - newDtd->contentStringLen = oldDtd->contentStringLen; - newDtd->scaffSize = oldDtd->scaffSize; - newDtd->scaffLevel = oldDtd->scaffLevel; - newDtd->scaffIndex = oldDtd->scaffIndex; - - return 1; -} /* End dtdCopy */ - -static int copyEntityTable(HASH_TABLE *newTable, - STRING_POOL *newPool, - const HASH_TABLE *oldTable, - XML_Parser parser) -{ - HASH_TABLE_ITER iter; - const XML_Char *cachedOldBase = 0; - const XML_Char *cachedNewBase = 0; - - hashTableIterInit(&iter, oldTable); - - for (;;) { - ENTITY *newE; - const XML_Char *name; - const ENTITY *oldE = (ENTITY *)hashTableIterNext(&iter); - if (!oldE) - break; - name = poolCopyString(newPool, oldE->name); - if (!name) - return 0; - newE = (ENTITY *)lookup(newTable, name, sizeof(ENTITY)); - if (!newE) - return 0; - if (oldE->systemId) { - const XML_Char *tem = poolCopyString(newPool, oldE->systemId); - if (!tem) - return 0; - newE->systemId = tem; - if (oldE->base) { - if (oldE->base == cachedOldBase) - newE->base = cachedNewBase; - else { - cachedOldBase = oldE->base; - tem = poolCopyString(newPool, cachedOldBase); - if (!tem) - return 0; - cachedNewBase = newE->base = tem; - } - } - } - else { - const XML_Char *tem = poolCopyStringN(newPool, oldE->textPtr, oldE->textLen); - if (!tem) - return 0; - newE->textPtr = tem; - newE->textLen = oldE->textLen; - } - if (oldE->notation) { - const XML_Char *tem = poolCopyString(newPool, oldE->notation); - if (!tem) - return 0; - newE->notation = tem; - } - } - return 1; -} - -#define INIT_SIZE 64 - -static -int keyeq(KEY s1, KEY s2) -{ - for (; *s1 == *s2; s1++, s2++) - if (*s1 == 0) - return 1; - return 0; -} - -static -unsigned long hash(KEY s) -{ - unsigned long h = 0; - while (*s) - h = (h << 5) + h + (unsigned char)*s++; - return h; -} - -static -NAMED *lookup(HASH_TABLE *table, KEY name, size_t createSize) -{ - size_t i; - if (table->size == 0) { - size_t tsize; - - if (!createSize) - return 0; - tsize = INIT_SIZE * sizeof(NAMED *); - table->v = table->mem->malloc_fcn(tsize); - if (!table->v) - return 0; - memset(table->v, 0, tsize); - table->size = INIT_SIZE; - table->usedLim = INIT_SIZE / 2; - i = hash(name) & (table->size - 1); - } - else { - unsigned long h = hash(name); - for (i = h & (table->size - 1); - table->v[i]; - i == 0 ? i = table->size - 1 : --i) { - if (keyeq(name, table->v[i]->name)) - return table->v[i]; - } - if (!createSize) - return 0; - if (table->used == table->usedLim) { - /* check for overflow */ - size_t newSize = table->size * 2; - size_t tsize = newSize * sizeof(NAMED *); - NAMED **newV = table->mem->malloc_fcn(tsize); - if (!newV) - return 0; - memset(newV, 0, tsize); - for (i = 0; i < table->size; i++) - if (table->v[i]) { - size_t j; - for (j = hash(table->v[i]->name) & (newSize - 1); - newV[j]; - j == 0 ? j = newSize - 1 : --j) - ; - newV[j] = table->v[i]; - } - table->mem->free_fcn(table->v); - table->v = newV; - table->size = newSize; - table->usedLim = newSize/2; - for (i = h & (table->size - 1); - table->v[i]; - i == 0 ? i = table->size - 1 : --i) - ; - } - } - table->v[i] = table->mem->malloc_fcn(createSize); - if (!table->v[i]) - return 0; - memset(table->v[i], 0, createSize); - table->v[i]->name = name; - (table->used)++; - return table->v[i]; -} - -static -void hashTableDestroy(HASH_TABLE *table) -{ - size_t i; - for (i = 0; i < table->size; i++) { - NAMED *p = table->v[i]; - if (p) - table->mem->free_fcn(p); - } - if (table->v) - table->mem->free_fcn(table->v); -} - -static -void hashTableInit(HASH_TABLE *p, XML_Memory_Handling_Suite *ms) -{ - p->size = 0; - p->usedLim = 0; - p->used = 0; - p->v = 0; - p->mem = ms; -} - -static -void hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table) -{ - iter->p = table->v; - iter->end = iter->p + table->size; -} - -static -NAMED *hashTableIterNext(HASH_TABLE_ITER *iter) -{ - while (iter->p != iter->end) { - NAMED *tem = *(iter->p)++; - if (tem) - return tem; - } - return 0; -} - - -static -void poolInit(STRING_POOL *pool, XML_Memory_Handling_Suite *ms) -{ - pool->blocks = 0; - pool->freeBlocks = 0; - pool->start = 0; - pool->ptr = 0; - pool->end = 0; - pool->mem = ms; -} - -static -void poolClear(STRING_POOL *pool) -{ - if (!pool->freeBlocks) - pool->freeBlocks = pool->blocks; - else { - BLOCK *p = pool->blocks; - while (p) { - BLOCK *tem = p->next; - p->next = pool->freeBlocks; - pool->freeBlocks = p; - p = tem; - } - } - pool->blocks = 0; - pool->start = 0; - pool->ptr = 0; - pool->end = 0; -} - -static -void poolDestroy(STRING_POOL *pool) -{ - BLOCK *p = pool->blocks; - while (p) { - BLOCK *tem = p->next; - pool->mem->free_fcn(p); - p = tem; - } - pool->blocks = 0; - p = pool->freeBlocks; - while (p) { - BLOCK *tem = p->next; - pool->mem->free_fcn(p); - p = tem; - } - pool->freeBlocks = 0; - pool->ptr = 0; - pool->start = 0; - pool->end = 0; -} - -static -XML_Char *poolAppend(STRING_POOL *pool, const ENCODING *enc, - const char *ptr, const char *end) -{ - if (!pool->ptr && !poolGrow(pool)) - return 0; - for (;;) { - XmlConvert(enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end); - if (ptr == end) - break; - if (!poolGrow(pool)) - return 0; - } - return pool->start; -} - -static const XML_Char *poolCopyString(STRING_POOL *pool, const XML_Char *s) -{ - do { - if (!poolAppendChar(pool, *s)) - return 0; - } while (*s++); - s = pool->start; - poolFinish(pool); - return s; -} - -static const XML_Char *poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n) -{ - if (!pool->ptr && !poolGrow(pool)) - return 0; - for (; n > 0; --n, s++) { - if (!poolAppendChar(pool, *s)) - return 0; - - } - s = pool->start; - poolFinish(pool); - return s; -} - -static -const XML_Char *poolAppendString(STRING_POOL *pool, const XML_Char *s) -{ - while (*s) { - if (!poolAppendChar(pool, *s)) - return 0; - s++; - } - return pool->start; -} /* End poolAppendString */ - -static -XML_Char *poolStoreString(STRING_POOL *pool, const ENCODING *enc, - const char *ptr, const char *end) -{ - if (!poolAppend(pool, enc, ptr, end)) - return 0; - if (pool->ptr == pool->end && !poolGrow(pool)) - return 0; - *(pool->ptr)++ = 0; - return pool->start; -} - -static -int poolGrow(STRING_POOL *pool) -{ - if (pool->freeBlocks) { - if (pool->start == 0) { - pool->blocks = pool->freeBlocks; - pool->freeBlocks = pool->freeBlocks->next; - pool->blocks->next = 0; - pool->start = pool->blocks->s; - pool->end = pool->start + pool->blocks->size; - pool->ptr = pool->start; - return 1; - } - if (pool->end - pool->start < pool->freeBlocks->size) { - BLOCK *tem = pool->freeBlocks->next; - pool->freeBlocks->next = pool->blocks; - pool->blocks = pool->freeBlocks; - pool->freeBlocks = tem; - memcpy(pool->blocks->s, pool->start, (pool->end - pool->start) * sizeof(XML_Char)); - pool->ptr = pool->blocks->s + (pool->ptr - pool->start); - pool->start = pool->blocks->s; - pool->end = pool->start + pool->blocks->size; - return 1; - } - } - if (pool->blocks && pool->start == pool->blocks->s) { - int blockSize = (pool->end - pool->start)*2; - pool->blocks = pool->mem->realloc_fcn(pool->blocks, offsetof(BLOCK, s) + blockSize * sizeof(XML_Char)); - if (!pool->blocks) - return 0; - pool->blocks->size = blockSize; - pool->ptr = pool->blocks->s + (pool->ptr - pool->start); - pool->start = pool->blocks->s; - pool->end = pool->start + blockSize; - } - else { - BLOCK *tem; - int blockSize = pool->end - pool->start; - if (blockSize < INIT_BLOCK_SIZE) - blockSize = INIT_BLOCK_SIZE; - else - blockSize *= 2; - tem = pool->mem->malloc_fcn(offsetof(BLOCK, s) + blockSize * sizeof(XML_Char)); - if (!tem) - return 0; - tem->size = blockSize; - tem->next = pool->blocks; - pool->blocks = tem; - if (pool->ptr != pool->start) - memcpy(tem->s, pool->start, (pool->ptr - pool->start) * sizeof(XML_Char)); - pool->ptr = tem->s + (pool->ptr - pool->start); - pool->start = tem->s; - pool->end = tem->s + blockSize; - } - return 1; -} - -static int -nextScaffoldPart(XML_Parser parser) -{ - CONTENT_SCAFFOLD * me; - int next; - - if (! dtd.scaffIndex) { - dtd.scaffIndex = MALLOC(groupSize * sizeof(int)); - if (! dtd.scaffIndex) - return -1; - dtd.scaffIndex[0] = 0; - } - - if (dtd.scaffCount >= dtd.scaffSize) { - if (dtd.scaffold) { - dtd.scaffSize *= 2; - dtd.scaffold = (CONTENT_SCAFFOLD *) REALLOC(dtd.scaffold, - dtd.scaffSize * sizeof(CONTENT_SCAFFOLD)); - } - else { - dtd.scaffSize = 32; - dtd.scaffold = (CONTENT_SCAFFOLD *) MALLOC(dtd.scaffSize * sizeof(CONTENT_SCAFFOLD)); - } - if (! dtd.scaffold) - return -1; - } - next = dtd.scaffCount++; - me = &dtd.scaffold[next]; - if (dtd.scaffLevel) { - CONTENT_SCAFFOLD *parent = &dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]]; - if (parent->lastchild) { - dtd.scaffold[parent->lastchild].nextsib = next; - } - if (! parent->childcnt) - parent->firstchild = next; - parent->lastchild = next; - parent->childcnt++; - } - me->firstchild = me->lastchild = me->childcnt = me->nextsib = 0; - return next; -} /* End nextScaffoldPart */ - -static void -build_node (XML_Parser parser, - int src_node, - XML_Content *dest, - XML_Content **contpos, - char **strpos) -{ - dest->type = dtd.scaffold[src_node].type; - dest->quant = dtd.scaffold[src_node].quant; - if (dest->type == XML_CTYPE_NAME) { - const char *src; - dest->name = *strpos; - src = dtd.scaffold[src_node].name; - for (;;) { - *(*strpos)++ = *src; - if (! *src) - break; - src++; - } - dest->numchildren = 0; - dest->children = 0; - } - else { - unsigned int i; - int cn; - dest->numchildren = dtd.scaffold[src_node].childcnt; - dest->children = *contpos; - *contpos += dest->numchildren; - for (i = 0, cn = dtd.scaffold[src_node].firstchild; - i < dest->numchildren; - i++, cn = dtd.scaffold[cn].nextsib) { - build_node(parser, cn, &(dest->children[i]), contpos, strpos); - } - dest->name = 0; - } -} /* End build_node */ - -static XML_Content * -build_model (XML_Parser parser) -{ - XML_Content *ret; - XML_Content *cpos; - char * str; - int allocsize = dtd.scaffCount * sizeof(XML_Content) + dtd.contentStringLen; - - ret = MALLOC(allocsize); - if (! ret) - return 0; - - str = (char *) (&ret[dtd.scaffCount]); - cpos = &ret[1]; - - build_node(parser, 0, ret, &cpos, &str); - return ret; -} /* End build_model */ - -static ELEMENT_TYPE * -getElementType(XML_Parser parser, - const ENCODING *enc, - const char *ptr, - const char *end) -{ - const XML_Char *name = poolStoreString(&dtd.pool, enc, ptr, end); - ELEMENT_TYPE *ret; - - if (! name) - return 0; - ret = (ELEMENT_TYPE *) lookup(&dtd.elementTypes, name, sizeof(ELEMENT_TYPE)); - if (! ret) - return 0; - if (ret->name != name) - poolDiscard(&dtd.pool); - else { - poolFinish(&dtd.pool); - if (!setElementTypePrefix(parser, ret)) - return 0; - } - return ret; -} /* End getElementType */ diff --git a/Build/source/libs/expat/lib/xmlrole.c b/Build/source/libs/expat/lib/xmlrole.c deleted file mode 100644 index 09fb12d6c75..00000000000 --- a/Build/source/libs/expat/lib/xmlrole.c +++ /dev/null @@ -1,1275 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -static char RCSId[] - = "$Header: /cvsroot/expat/expat/lib/xmlrole.c,v 1.5 2000/10/22 19:20:23 coopercc Exp $"; - -#ifdef COMPILED_FROM_DSP -# include "winconfig.h" -#else -# include -#endif /* ndef COMPILED_FROM_DSP */ - -#include "xmlrole.h" -#include "ascii.h" - -/* Doesn't check: - - that ,| are not mixed in a model group - content of literals - -*/ - -static const char KW_ANY[] = { ASCII_A, ASCII_N, ASCII_Y, '\0' }; -static const char KW_ATTLIST[] = { ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0' }; -static const char KW_CDATA[] = { ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; -static const char KW_DOCTYPE[] = { ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0' }; -static const char KW_ELEMENT[] = { ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0' }; -static const char KW_EMPTY[] = { ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0' }; -static const char KW_ENTITIES[] = { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S, '\0' }; -static const char KW_ENTITY[] = { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' }; -static const char KW_FIXED[] = { ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0' }; -static const char KW_ID[] = { ASCII_I, ASCII_D, '\0' }; -static const char KW_IDREF[] = { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' }; -static const char KW_IDREFS[] = { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' }; -static const char KW_IGNORE[] = { ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0' }; -static const char KW_IMPLIED[] = { ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0' }; -static const char KW_INCLUDE[] = { ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0' }; -static const char KW_NDATA[] = { ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; -static const char KW_NMTOKEN[] = { ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' }; -static const char KW_NMTOKENS[] = { ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S, '\0' }; -static const char KW_NOTATION[] = { ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N, '\0' }; -static const char KW_PCDATA[] = { ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; -static const char KW_PUBLIC[] = { ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0' }; -static const char KW_REQUIRED[] = { ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I, ASCII_R, ASCII_E, ASCII_D, '\0' }; -static const char KW_SYSTEM[] = { ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0' }; - -#ifndef MIN_BYTES_PER_CHAR -#define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar) -#endif - -#ifdef XML_DTD -#define setTopLevel(state) \ - ((state)->handler = ((state)->documentEntity \ - ? internalSubset \ - : externalSubset1)) -#else /* not XML_DTD */ -#define setTopLevel(state) ((state)->handler = internalSubset) -#endif /* not XML_DTD */ - -typedef int PROLOG_HANDLER(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc); - -static PROLOG_HANDLER - prolog0, prolog1, prolog2, - doctype0, doctype1, doctype2, doctype3, doctype4, doctype5, - internalSubset, - entity0, entity1, entity2, entity3, entity4, entity5, entity6, - entity7, entity8, entity9, - notation0, notation1, notation2, notation3, notation4, - attlist0, attlist1, attlist2, attlist3, attlist4, attlist5, attlist6, - attlist7, attlist8, attlist9, - element0, element1, element2, element3, element4, element5, element6, - element7, -#ifdef XML_DTD - externalSubset0, externalSubset1, - condSect0, condSect1, condSect2, -#endif /* XML_DTD */ - declClose, - error; - -static -int common(PROLOG_STATE *state, int tok); - -static -int prolog0(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - state->handler = prolog1; - return XML_ROLE_NONE; - case XML_TOK_XML_DECL: - state->handler = prolog1; - return XML_ROLE_XML_DECL; - case XML_TOK_PI: - state->handler = prolog1; - return XML_ROLE_NONE; - case XML_TOK_COMMENT: - state->handler = prolog1; - case XML_TOK_BOM: - return XML_ROLE_NONE; - case XML_TOK_DECL_OPEN: - if (!XmlNameMatchesAscii(enc, - ptr + 2 * MIN_BYTES_PER_CHAR(enc), - end, - KW_DOCTYPE)) - break; - state->handler = doctype0; - return XML_ROLE_NONE; - case XML_TOK_INSTANCE_START: - state->handler = error; - return XML_ROLE_INSTANCE_START; - } - return common(state, tok); -} - -static -int prolog1(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_PI: - case XML_TOK_COMMENT: - case XML_TOK_BOM: - return XML_ROLE_NONE; - case XML_TOK_DECL_OPEN: - if (!XmlNameMatchesAscii(enc, - ptr + 2 * MIN_BYTES_PER_CHAR(enc), - end, - KW_DOCTYPE)) - break; - state->handler = doctype0; - return XML_ROLE_NONE; - case XML_TOK_INSTANCE_START: - state->handler = error; - return XML_ROLE_INSTANCE_START; - } - return common(state, tok); -} - -static -int prolog2(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_PI: - case XML_TOK_COMMENT: - return XML_ROLE_NONE; - case XML_TOK_INSTANCE_START: - state->handler = error; - return XML_ROLE_INSTANCE_START; - } - return common(state, tok); -} - -static -int doctype0(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = doctype1; - return XML_ROLE_DOCTYPE_NAME; - } - return common(state, tok); -} - -static -int doctype1(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_OPEN_BRACKET: - state->handler = internalSubset; - return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; - case XML_TOK_DECL_CLOSE: - state->handler = prolog2; - return XML_ROLE_DOCTYPE_CLOSE; - case XML_TOK_NAME: - if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { - state->handler = doctype3; - return XML_ROLE_NONE; - } - if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { - state->handler = doctype2; - return XML_ROLE_NONE; - } - break; - } - return common(state, tok); -} - -static -int doctype2(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_LITERAL: - state->handler = doctype3; - return XML_ROLE_DOCTYPE_PUBLIC_ID; - } - return common(state, tok); -} - -static -int doctype3(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_LITERAL: - state->handler = doctype4; - return XML_ROLE_DOCTYPE_SYSTEM_ID; - } - return common(state, tok); -} - -static -int doctype4(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_OPEN_BRACKET: - state->handler = internalSubset; - return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; - case XML_TOK_DECL_CLOSE: - state->handler = prolog2; - return XML_ROLE_DOCTYPE_CLOSE; - } - return common(state, tok); -} - -static -int doctype5(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_DECL_CLOSE: - state->handler = prolog2; - return XML_ROLE_DOCTYPE_CLOSE; - } - return common(state, tok); -} - -static -int internalSubset(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_DECL_OPEN: - if (XmlNameMatchesAscii(enc, - ptr + 2 * MIN_BYTES_PER_CHAR(enc), - end, - KW_ENTITY)) { - state->handler = entity0; - return XML_ROLE_NONE; - } - if (XmlNameMatchesAscii(enc, - ptr + 2 * MIN_BYTES_PER_CHAR(enc), - end, - KW_ATTLIST)) { - state->handler = attlist0; - return XML_ROLE_NONE; - } - if (XmlNameMatchesAscii(enc, - ptr + 2 * MIN_BYTES_PER_CHAR(enc), - end, - KW_ELEMENT)) { - state->handler = element0; - return XML_ROLE_NONE; - } - if (XmlNameMatchesAscii(enc, - ptr + 2 * MIN_BYTES_PER_CHAR(enc), - end, - KW_NOTATION)) { - state->handler = notation0; - return XML_ROLE_NONE; - } - break; - case XML_TOK_PI: - case XML_TOK_COMMENT: - return XML_ROLE_NONE; - case XML_TOK_PARAM_ENTITY_REF: - return XML_ROLE_PARAM_ENTITY_REF; - case XML_TOK_CLOSE_BRACKET: - state->handler = doctype5; - return XML_ROLE_NONE; - } - return common(state, tok); -} - -#ifdef XML_DTD - -static -int externalSubset0(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - state->handler = externalSubset1; - if (tok == XML_TOK_XML_DECL) - return XML_ROLE_TEXT_DECL; - return externalSubset1(state, tok, ptr, end, enc); -} - -static -int externalSubset1(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_COND_SECT_OPEN: - state->handler = condSect0; - return XML_ROLE_NONE; - case XML_TOK_COND_SECT_CLOSE: - if (state->includeLevel == 0) - break; - state->includeLevel -= 1; - return XML_ROLE_NONE; - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_CLOSE_BRACKET: - break; - case XML_TOK_NONE: - if (state->includeLevel) - break; - return XML_ROLE_NONE; - default: - return internalSubset(state, tok, ptr, end, enc); - } - return common(state, tok); -} - -#endif /* XML_DTD */ - -static -int entity0(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_PERCENT: - state->handler = entity1; - return XML_ROLE_NONE; - case XML_TOK_NAME: - state->handler = entity2; - return XML_ROLE_GENERAL_ENTITY_NAME; - } - return common(state, tok); -} - -static -int entity1(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - state->handler = entity7; - return XML_ROLE_PARAM_ENTITY_NAME; - } - return common(state, tok); -} - -static -int entity2(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { - state->handler = entity4; - return XML_ROLE_NONE; - } - if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { - state->handler = entity3; - return XML_ROLE_NONE; - } - break; - case XML_TOK_LITERAL: - state->handler = declClose; - return XML_ROLE_ENTITY_VALUE; - } - return common(state, tok); -} - -static -int entity3(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_LITERAL: - state->handler = entity4; - return XML_ROLE_ENTITY_PUBLIC_ID; - } - return common(state, tok); -} - - -static -int entity4(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_LITERAL: - state->handler = entity5; - return XML_ROLE_ENTITY_SYSTEM_ID; - } - return common(state, tok); -} - -static -int entity5(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_DECL_CLOSE: - setTopLevel(state); - return XML_ROLE_ENTITY_COMPLETE; - case XML_TOK_NAME: - if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) { - state->handler = entity6; - return XML_ROLE_NONE; - } - break; - } - return common(state, tok); -} - -static -int entity6(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - state->handler = declClose; - return XML_ROLE_ENTITY_NOTATION_NAME; - } - return common(state, tok); -} - -static -int entity7(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { - state->handler = entity9; - return XML_ROLE_NONE; - } - if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { - state->handler = entity8; - return XML_ROLE_NONE; - } - break; - case XML_TOK_LITERAL: - state->handler = declClose; - return XML_ROLE_ENTITY_VALUE; - } - return common(state, tok); -} - -static -int entity8(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_LITERAL: - state->handler = entity9; - return XML_ROLE_ENTITY_PUBLIC_ID; - } - return common(state, tok); -} - -static -int entity9(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_LITERAL: - state->handler = declClose; - return XML_ROLE_ENTITY_SYSTEM_ID; - } - return common(state, tok); -} - -static -int notation0(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - state->handler = notation1; - return XML_ROLE_NOTATION_NAME; - } - return common(state, tok); -} - -static -int notation1(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { - state->handler = notation3; - return XML_ROLE_NONE; - } - if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { - state->handler = notation2; - return XML_ROLE_NONE; - } - break; - } - return common(state, tok); -} - -static -int notation2(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_LITERAL: - state->handler = notation4; - return XML_ROLE_NOTATION_PUBLIC_ID; - } - return common(state, tok); -} - -static -int notation3(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_LITERAL: - state->handler = declClose; - return XML_ROLE_NOTATION_SYSTEM_ID; - } - return common(state, tok); -} - -static -int notation4(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_LITERAL: - state->handler = declClose; - return XML_ROLE_NOTATION_SYSTEM_ID; - case XML_TOK_DECL_CLOSE: - setTopLevel(state); - return XML_ROLE_NOTATION_NO_SYSTEM_ID; - } - return common(state, tok); -} - -static -int attlist0(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = attlist1; - return XML_ROLE_ATTLIST_ELEMENT_NAME; - } - return common(state, tok); -} - -static -int attlist1(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_DECL_CLOSE: - setTopLevel(state); - return XML_ROLE_NONE; - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = attlist2; - return XML_ROLE_ATTRIBUTE_NAME; - } - return common(state, tok); -} - -static -int attlist2(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - { - static const char *types[] = { - KW_CDATA, - KW_ID, - KW_IDREF, - KW_IDREFS, - KW_ENTITY, - KW_ENTITIES, - KW_NMTOKEN, - KW_NMTOKENS, - }; - int i; - for (i = 0; i < (int)(sizeof(types)/sizeof(types[0])); i++) - if (XmlNameMatchesAscii(enc, ptr, end, types[i])) { - state->handler = attlist8; - return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i; - } - } - if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) { - state->handler = attlist5; - return XML_ROLE_NONE; - } - break; - case XML_TOK_OPEN_PAREN: - state->handler = attlist3; - return XML_ROLE_NONE; - } - return common(state, tok); -} - -static -int attlist3(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NMTOKEN: - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = attlist4; - return XML_ROLE_ATTRIBUTE_ENUM_VALUE; - } - return common(state, tok); -} - -static -int attlist4(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_CLOSE_PAREN: - state->handler = attlist8; - return XML_ROLE_NONE; - case XML_TOK_OR: - state->handler = attlist3; - return XML_ROLE_NONE; - } - return common(state, tok); -} - -static -int attlist5(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_OPEN_PAREN: - state->handler = attlist6; - return XML_ROLE_NONE; - } - return common(state, tok); -} - - -static -int attlist6(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - state->handler = attlist7; - return XML_ROLE_ATTRIBUTE_NOTATION_VALUE; - } - return common(state, tok); -} - -static -int attlist7(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_CLOSE_PAREN: - state->handler = attlist8; - return XML_ROLE_NONE; - case XML_TOK_OR: - state->handler = attlist6; - return XML_ROLE_NONE; - } - return common(state, tok); -} - -/* default value */ -static -int attlist8(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_POUND_NAME: - if (XmlNameMatchesAscii(enc, - ptr + MIN_BYTES_PER_CHAR(enc), - end, - KW_IMPLIED)) { - state->handler = attlist1; - return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE; - } - if (XmlNameMatchesAscii(enc, - ptr + MIN_BYTES_PER_CHAR(enc), - end, - KW_REQUIRED)) { - state->handler = attlist1; - return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE; - } - if (XmlNameMatchesAscii(enc, - ptr + MIN_BYTES_PER_CHAR(enc), - end, - KW_FIXED)) { - state->handler = attlist9; - return XML_ROLE_NONE; - } - break; - case XML_TOK_LITERAL: - state->handler = attlist1; - return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE; - } - return common(state, tok); -} - -static -int attlist9(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_LITERAL: - state->handler = attlist1; - return XML_ROLE_FIXED_ATTRIBUTE_VALUE; - } - return common(state, tok); -} - -static -int element0(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = element1; - return XML_ROLE_ELEMENT_NAME; - } - return common(state, tok); -} - -static -int element1(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) { - state->handler = declClose; - return XML_ROLE_CONTENT_EMPTY; - } - if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) { - state->handler = declClose; - return XML_ROLE_CONTENT_ANY; - } - break; - case XML_TOK_OPEN_PAREN: - state->handler = element2; - state->level = 1; - return XML_ROLE_GROUP_OPEN; - } - return common(state, tok); -} - -static -int element2(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_POUND_NAME: - if (XmlNameMatchesAscii(enc, - ptr + MIN_BYTES_PER_CHAR(enc), - end, - KW_PCDATA)) { - state->handler = element3; - return XML_ROLE_CONTENT_PCDATA; - } - break; - case XML_TOK_OPEN_PAREN: - state->level = 2; - state->handler = element6; - return XML_ROLE_GROUP_OPEN; - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT; - case XML_TOK_NAME_QUESTION: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT_OPT; - case XML_TOK_NAME_ASTERISK: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT_REP; - case XML_TOK_NAME_PLUS: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT_PLUS; - } - return common(state, tok); -} - -static -int element3(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_CLOSE_PAREN: - state->handler = declClose; - return XML_ROLE_GROUP_CLOSE; - case XML_TOK_CLOSE_PAREN_ASTERISK: - state->handler = declClose; - return XML_ROLE_GROUP_CLOSE_REP; - case XML_TOK_OR: - state->handler = element4; - return XML_ROLE_NONE; - } - return common(state, tok); -} - -static -int element4(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = element5; - return XML_ROLE_CONTENT_ELEMENT; - } - return common(state, tok); -} - -static -int element5(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_CLOSE_PAREN_ASTERISK: - state->handler = declClose; - return XML_ROLE_GROUP_CLOSE_REP; - case XML_TOK_OR: - state->handler = element4; - return XML_ROLE_NONE; - } - return common(state, tok); -} - -static -int element6(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_OPEN_PAREN: - state->level += 1; - return XML_ROLE_GROUP_OPEN; - case XML_TOK_NAME: - case XML_TOK_PREFIXED_NAME: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT; - case XML_TOK_NAME_QUESTION: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT_OPT; - case XML_TOK_NAME_ASTERISK: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT_REP; - case XML_TOK_NAME_PLUS: - state->handler = element7; - return XML_ROLE_CONTENT_ELEMENT_PLUS; - } - return common(state, tok); -} - -static -int element7(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_CLOSE_PAREN: - state->level -= 1; - if (state->level == 0) - state->handler = declClose; - return XML_ROLE_GROUP_CLOSE; - case XML_TOK_CLOSE_PAREN_ASTERISK: - state->level -= 1; - if (state->level == 0) - state->handler = declClose; - return XML_ROLE_GROUP_CLOSE_REP; - case XML_TOK_CLOSE_PAREN_QUESTION: - state->level -= 1; - if (state->level == 0) - state->handler = declClose; - return XML_ROLE_GROUP_CLOSE_OPT; - case XML_TOK_CLOSE_PAREN_PLUS: - state->level -= 1; - if (state->level == 0) - state->handler = declClose; - return XML_ROLE_GROUP_CLOSE_PLUS; - case XML_TOK_COMMA: - state->handler = element6; - return XML_ROLE_GROUP_SEQUENCE; - case XML_TOK_OR: - state->handler = element6; - return XML_ROLE_GROUP_CHOICE; - } - return common(state, tok); -} - -#ifdef XML_DTD - -static -int condSect0(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_NAME: - if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) { - state->handler = condSect1; - return XML_ROLE_NONE; - } - if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) { - state->handler = condSect2; - return XML_ROLE_NONE; - } - break; - } - return common(state, tok); -} - -static -int condSect1(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_OPEN_BRACKET: - state->handler = externalSubset1; - state->includeLevel += 1; - return XML_ROLE_NONE; - } - return common(state, tok); -} - -static -int condSect2(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_OPEN_BRACKET: - state->handler = externalSubset1; - return XML_ROLE_IGNORE_SECT; - } - return common(state, tok); -} - -#endif /* XML_DTD */ - -static -int declClose(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_PROLOG_S: - return XML_ROLE_NONE; - case XML_TOK_DECL_CLOSE: - setTopLevel(state); - return XML_ROLE_NONE; - } - return common(state, tok); -} - -#if 0 - -static -int ignore(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - switch (tok) { - case XML_TOK_DECL_CLOSE: - state->handler = internalSubset; - return 0; - default: - return XML_ROLE_NONE; - } - return common(state, tok); -} -#endif - -static -int error(PROLOG_STATE *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc) -{ - return XML_ROLE_NONE; -} - -static -int common(PROLOG_STATE *state, int tok) -{ -#ifdef XML_DTD - if (!state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF) - return XML_ROLE_INNER_PARAM_ENTITY_REF; -#endif - state->handler = error; - return XML_ROLE_ERROR; -} - -void XmlPrologStateInit(PROLOG_STATE *state) -{ - state->handler = prolog0; -#ifdef XML_DTD - state->documentEntity = 1; - state->includeLevel = 0; -#endif /* XML_DTD */ -} - -#ifdef XML_DTD - -void XmlPrologStateInitExternalEntity(PROLOG_STATE *state) -{ - state->handler = externalSubset0; - state->documentEntity = 0; - state->includeLevel = 0; -} - -#endif /* XML_DTD */ diff --git a/Build/source/libs/expat/lib/xmlrole.h b/Build/source/libs/expat/lib/xmlrole.h deleted file mode 100644 index db3ebc84843..00000000000 --- a/Build/source/libs/expat/lib/xmlrole.h +++ /dev/null @@ -1,100 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -#ifndef XmlRole_INCLUDED -#define XmlRole_INCLUDED 1 - -#include "xmltok.h" - -#ifdef __cplusplus -extern "C" { -#endif - -enum { - XML_ROLE_ERROR = -1, - XML_ROLE_NONE = 0, - XML_ROLE_XML_DECL, - XML_ROLE_INSTANCE_START, - XML_ROLE_DOCTYPE_NAME, - XML_ROLE_DOCTYPE_SYSTEM_ID, - XML_ROLE_DOCTYPE_PUBLIC_ID, - XML_ROLE_DOCTYPE_INTERNAL_SUBSET, - XML_ROLE_DOCTYPE_CLOSE, - XML_ROLE_GENERAL_ENTITY_NAME, - XML_ROLE_PARAM_ENTITY_NAME, - XML_ROLE_ENTITY_VALUE, - XML_ROLE_ENTITY_SYSTEM_ID, - XML_ROLE_ENTITY_PUBLIC_ID, - XML_ROLE_ENTITY_COMPLETE, - XML_ROLE_ENTITY_NOTATION_NAME, - XML_ROLE_NOTATION_NAME, - XML_ROLE_NOTATION_SYSTEM_ID, - XML_ROLE_NOTATION_NO_SYSTEM_ID, - XML_ROLE_NOTATION_PUBLIC_ID, - XML_ROLE_ATTRIBUTE_NAME, - XML_ROLE_ATTRIBUTE_TYPE_CDATA, - XML_ROLE_ATTRIBUTE_TYPE_ID, - XML_ROLE_ATTRIBUTE_TYPE_IDREF, - XML_ROLE_ATTRIBUTE_TYPE_IDREFS, - XML_ROLE_ATTRIBUTE_TYPE_ENTITY, - XML_ROLE_ATTRIBUTE_TYPE_ENTITIES, - XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN, - XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS, - XML_ROLE_ATTRIBUTE_ENUM_VALUE, - XML_ROLE_ATTRIBUTE_NOTATION_VALUE, - XML_ROLE_ATTLIST_ELEMENT_NAME, - XML_ROLE_IMPLIED_ATTRIBUTE_VALUE, - XML_ROLE_REQUIRED_ATTRIBUTE_VALUE, - XML_ROLE_DEFAULT_ATTRIBUTE_VALUE, - XML_ROLE_FIXED_ATTRIBUTE_VALUE, - XML_ROLE_ELEMENT_NAME, - XML_ROLE_CONTENT_ANY, - XML_ROLE_CONTENT_EMPTY, - XML_ROLE_CONTENT_PCDATA, - XML_ROLE_GROUP_OPEN, - XML_ROLE_GROUP_CLOSE, - XML_ROLE_GROUP_CLOSE_REP, - XML_ROLE_GROUP_CLOSE_OPT, - XML_ROLE_GROUP_CLOSE_PLUS, - XML_ROLE_GROUP_CHOICE, - XML_ROLE_GROUP_SEQUENCE, - XML_ROLE_CONTENT_ELEMENT, - XML_ROLE_CONTENT_ELEMENT_REP, - XML_ROLE_CONTENT_ELEMENT_OPT, - XML_ROLE_CONTENT_ELEMENT_PLUS, -#ifdef XML_DTD - XML_ROLE_TEXT_DECL, - XML_ROLE_IGNORE_SECT, - XML_ROLE_INNER_PARAM_ENTITY_REF, -#endif /* XML_DTD */ - XML_ROLE_PARAM_ENTITY_REF -}; - -typedef struct prolog_state { - int (*handler)(struct prolog_state *state, - int tok, - const char *ptr, - const char *end, - const ENCODING *enc); - unsigned level; -#ifdef XML_DTD - unsigned includeLevel; - int documentEntity; -#endif /* XML_DTD */ -} PROLOG_STATE; - -void XmlPrologStateInit(PROLOG_STATE *); -#ifdef XML_DTD -void XmlPrologStateInitExternalEntity(PROLOG_STATE *); -#endif /* XML_DTD */ - -#define XmlTokenRole(state, tok, ptr, end, enc) \ - (((state)->handler)(state, tok, ptr, end, enc)) - -#ifdef __cplusplus -} -#endif - -#endif /* not XmlRole_INCLUDED */ diff --git a/Build/source/libs/expat/lib/xmltok.c b/Build/source/libs/expat/lib/xmltok.c deleted file mode 100644 index 521bd1cbaf3..00000000000 --- a/Build/source/libs/expat/lib/xmltok.c +++ /dev/null @@ -1,1568 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -static char RCSId[] - = "$Header: /cvsroot/expat/expat/lib/xmltok.c,v 1.5 2000/10/22 19:20:23 coopercc Exp $"; - -#ifdef COMPILED_FROM_DSP -# include "winconfig.h" -#else -# include -#endif /* ndef COMPILED_FROM_DSP */ - -#include "xmltok.h" -#include "nametab.h" - -#ifdef XML_DTD -#define IGNORE_SECTION_TOK_VTABLE , PREFIX(ignoreSectionTok) -#else -#define IGNORE_SECTION_TOK_VTABLE /* as nothing */ -#endif - -#define VTABLE1 \ - { PREFIX(prologTok), PREFIX(contentTok), \ - PREFIX(cdataSectionTok) IGNORE_SECTION_TOK_VTABLE }, \ - { PREFIX(attributeValueTok), PREFIX(entityValueTok) }, \ - PREFIX(sameName), \ - PREFIX(nameMatchesAscii), \ - PREFIX(nameLength), \ - PREFIX(skipS), \ - PREFIX(getAtts), \ - PREFIX(charRefNumber), \ - PREFIX(predefinedEntityName), \ - PREFIX(updatePosition), \ - PREFIX(isPublicId) - -#define VTABLE VTABLE1, PREFIX(toUtf8), PREFIX(toUtf16) - -#define UCS2_GET_NAMING(pages, hi, lo) \ - (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1 << ((lo) & 0x1F))) - -/* A 2 byte UTF-8 representation splits the characters 11 bits -between the bottom 5 and 6 bits of the bytes. -We need 8 bits to index into pages, 3 bits to add to that index and -5 bits to generate the mask. */ -#define UTF8_GET_NAMING2(pages, byte) \ - (namingBitmap[((pages)[(((byte)[0]) >> 2) & 7] << 3) \ - + ((((byte)[0]) & 3) << 1) \ - + ((((byte)[1]) >> 5) & 1)] \ - & (1 << (((byte)[1]) & 0x1F))) - -/* A 3 byte UTF-8 representation splits the characters 16 bits -between the bottom 4, 6 and 6 bits of the bytes. -We need 8 bits to index into pages, 3 bits to add to that index and -5 bits to generate the mask. */ -#define UTF8_GET_NAMING3(pages, byte) \ - (namingBitmap[((pages)[((((byte)[0]) & 0xF) << 4) \ - + ((((byte)[1]) >> 2) & 0xF)] \ - << 3) \ - + ((((byte)[1]) & 3) << 1) \ - + ((((byte)[2]) >> 5) & 1)] \ - & (1 << (((byte)[2]) & 0x1F))) - -#define UTF8_GET_NAMING(pages, p, n) \ - ((n) == 2 \ - ? UTF8_GET_NAMING2(pages, (const unsigned char *)(p)) \ - : ((n) == 3 \ - ? UTF8_GET_NAMING3(pages, (const unsigned char *)(p)) \ - : 0)) - -#define UTF8_INVALID3(p) \ - ((*p) == 0xED \ - ? (((p)[1] & 0x20) != 0) \ - : ((*p) == 0xEF \ - ? ((p)[1] == 0xBF && ((p)[2] == 0xBF || (p)[2] == 0xBE)) \ - : 0)) - -#define UTF8_INVALID4(p) ((*p) == 0xF4 && ((p)[1] & 0x30) != 0) - -static -int isNever(const ENCODING *enc, const char *p) -{ - return 0; -} - -static -int utf8_isName2(const ENCODING *enc, const char *p) -{ - return UTF8_GET_NAMING2(namePages, (const unsigned char *)p); -} - -static -int utf8_isName3(const ENCODING *enc, const char *p) -{ - return UTF8_GET_NAMING3(namePages, (const unsigned char *)p); -} - -#define utf8_isName4 isNever - -static -int utf8_isNmstrt2(const ENCODING *enc, const char *p) -{ - return UTF8_GET_NAMING2(nmstrtPages, (const unsigned char *)p); -} - -static -int utf8_isNmstrt3(const ENCODING *enc, const char *p) -{ - return UTF8_GET_NAMING3(nmstrtPages, (const unsigned char *)p); -} - -#define utf8_isNmstrt4 isNever - -#define utf8_isInvalid2 isNever - -static -int utf8_isInvalid3(const ENCODING *enc, const char *p) -{ - return UTF8_INVALID3((const unsigned char *)p); -} - -static -int utf8_isInvalid4(const ENCODING *enc, const char *p) -{ - return UTF8_INVALID4((const unsigned char *)p); -} - -struct normal_encoding { - ENCODING enc; - unsigned char type[256]; -#ifdef XML_MIN_SIZE - int (*byteType)(const ENCODING *, const char *); - int (*isNameMin)(const ENCODING *, const char *); - int (*isNmstrtMin)(const ENCODING *, const char *); - int (*byteToAscii)(const ENCODING *, const char *); - int (*charMatches)(const ENCODING *, const char *, int); -#endif /* XML_MIN_SIZE */ - int (*isName2)(const ENCODING *, const char *); - int (*isName3)(const ENCODING *, const char *); - int (*isName4)(const ENCODING *, const char *); - int (*isNmstrt2)(const ENCODING *, const char *); - int (*isNmstrt3)(const ENCODING *, const char *); - int (*isNmstrt4)(const ENCODING *, const char *); - int (*isInvalid2)(const ENCODING *, const char *); - int (*isInvalid3)(const ENCODING *, const char *); - int (*isInvalid4)(const ENCODING *, const char *); -}; - -#ifdef XML_MIN_SIZE - -#define STANDARD_VTABLE(E) \ - E ## byteType, \ - E ## isNameMin, \ - E ## isNmstrtMin, \ - E ## byteToAscii, \ - E ## charMatches, - -#else - -#define STANDARD_VTABLE(E) /* as nothing */ - -#endif - -#define NORMAL_VTABLE(E) \ - E ## isName2, \ - E ## isName3, \ - E ## isName4, \ - E ## isNmstrt2, \ - E ## isNmstrt3, \ - E ## isNmstrt4, \ - E ## isInvalid2, \ - E ## isInvalid3, \ - E ## isInvalid4 - -static int checkCharRefNumber(int); - -#include "xmltok_impl.h" -#include "ascii.h" - -#ifdef XML_MIN_SIZE -#define sb_isNameMin isNever -#define sb_isNmstrtMin isNever -#endif - -#ifdef XML_MIN_SIZE -#define MINBPC(enc) ((enc)->minBytesPerChar) -#else -/* minimum bytes per character */ -#define MINBPC(enc) 1 -#endif - -#define SB_BYTE_TYPE(enc, p) \ - (((struct normal_encoding *)(enc))->type[(unsigned char)*(p)]) - -#ifdef XML_MIN_SIZE -static -int sb_byteType(const ENCODING *enc, const char *p) -{ - return SB_BYTE_TYPE(enc, p); -} -#define BYTE_TYPE(enc, p) \ - (((const struct normal_encoding *)(enc))->byteType(enc, p)) -#else -#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p) -#endif - -#ifdef XML_MIN_SIZE -#define BYTE_TO_ASCII(enc, p) \ - (((const struct normal_encoding *)(enc))->byteToAscii(enc, p)) -static -int sb_byteToAscii(const ENCODING *enc, const char *p) -{ - return *p; -} -#else -#define BYTE_TO_ASCII(enc, p) (*(p)) -#endif - -#define IS_NAME_CHAR(enc, p, n) \ - (((const struct normal_encoding *)(enc))->isName ## n(enc, p)) -#define IS_NMSTRT_CHAR(enc, p, n) \ - (((const struct normal_encoding *)(enc))->isNmstrt ## n(enc, p)) -#define IS_INVALID_CHAR(enc, p, n) \ - (((const struct normal_encoding *)(enc))->isInvalid ## n(enc, p)) - -#ifdef XML_MIN_SIZE -#define IS_NAME_CHAR_MINBPC(enc, p) \ - (((const struct normal_encoding *)(enc))->isNameMin(enc, p)) -#define IS_NMSTRT_CHAR_MINBPC(enc, p) \ - (((const struct normal_encoding *)(enc))->isNmstrtMin(enc, p)) -#else -#define IS_NAME_CHAR_MINBPC(enc, p) (0) -#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0) -#endif - -#ifdef XML_MIN_SIZE -#define CHAR_MATCHES(enc, p, c) \ - (((const struct normal_encoding *)(enc))->charMatches(enc, p, c)) -static -int sb_charMatches(const ENCODING *enc, const char *p, int c) -{ - return *p == c; -} -#else -/* c is an ASCII character */ -#define CHAR_MATCHES(enc, p, c) (*(p) == c) -#endif - -#define PREFIX(ident) normal_ ## ident -#include "xmltok_impl.c" - -#undef MINBPC -#undef BYTE_TYPE -#undef BYTE_TO_ASCII -#undef CHAR_MATCHES -#undef IS_NAME_CHAR -#undef IS_NAME_CHAR_MINBPC -#undef IS_NMSTRT_CHAR -#undef IS_NMSTRT_CHAR_MINBPC -#undef IS_INVALID_CHAR - -enum { /* UTF8_cvalN is value of masked first byte of N byte sequence */ - UTF8_cval1 = 0x00, - UTF8_cval2 = 0xc0, - UTF8_cval3 = 0xe0, - UTF8_cval4 = 0xf0 -}; - -static -void utf8_toUtf8(const ENCODING *enc, - const char **fromP, const char *fromLim, - char **toP, const char *toLim) -{ - char *to; - const char *from; - if (fromLim - *fromP > toLim - *toP) { - /* Avoid copying partial characters. */ - for (fromLim = *fromP + (toLim - *toP); fromLim > *fromP; fromLim--) - if (((unsigned char)fromLim[-1] & 0xc0) != 0x80) - break; - } - for (to = *toP, from = *fromP; from != fromLim; from++, to++) - *to = *from; - *fromP = from; - *toP = to; -} - -static -void utf8_toUtf16(const ENCODING *enc, - const char **fromP, const char *fromLim, - unsigned short **toP, const unsigned short *toLim) -{ - unsigned short *to = *toP; - const char *from = *fromP; - while (from != fromLim && to != toLim) { - switch (((struct normal_encoding *)enc)->type[(unsigned char)*from]) { - case BT_LEAD2: - *to++ = ((from[0] & 0x1f) << 6) | (from[1] & 0x3f); - from += 2; - break; - case BT_LEAD3: - *to++ = ((from[0] & 0xf) << 12) | ((from[1] & 0x3f) << 6) | (from[2] & 0x3f); - from += 3; - break; - case BT_LEAD4: - { - unsigned long n; - if (to + 1 == toLim) - break; - n = ((from[0] & 0x7) << 18) | ((from[1] & 0x3f) << 12) | ((from[2] & 0x3f) << 6) | (from[3] & 0x3f); - n -= 0x10000; - to[0] = (unsigned short)((n >> 10) | 0xD800); - to[1] = (unsigned short)((n & 0x3FF) | 0xDC00); - to += 2; - from += 4; - } - break; - default: - *to++ = *from++; - break; - } - } - *fromP = from; - *toP = to; -} - -#ifdef XML_NS -static const struct normal_encoding utf8_encoding_ns = { - { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, - { -#include "asciitab.h" -#include "utf8tab.h" - }, - STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) -}; -#endif - -static const struct normal_encoding utf8_encoding = { - { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, - { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON -#include "utf8tab.h" - }, - STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) -}; - -#ifdef XML_NS - -static const struct normal_encoding internal_utf8_encoding_ns = { - { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, - { -#include "iasciitab.h" -#include "utf8tab.h" - }, - STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) -}; - -#endif - -static const struct normal_encoding internal_utf8_encoding = { - { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, - { -#define BT_COLON BT_NMSTRT -#include "iasciitab.h" -#undef BT_COLON -#include "utf8tab.h" - }, - STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) -}; - -static -void latin1_toUtf8(const ENCODING *enc, - const char **fromP, const char *fromLim, - char **toP, const char *toLim) -{ - for (;;) { - unsigned char c; - if (*fromP == fromLim) - break; - c = (unsigned char)**fromP; - if (c & 0x80) { - if (toLim - *toP < 2) - break; - *(*toP)++ = ((c >> 6) | UTF8_cval2); - *(*toP)++ = ((c & 0x3f) | 0x80); - (*fromP)++; - } - else { - if (*toP == toLim) - break; - *(*toP)++ = *(*fromP)++; - } - } -} - -static -void latin1_toUtf16(const ENCODING *enc, - const char **fromP, const char *fromLim, - unsigned short **toP, const unsigned short *toLim) -{ - while (*fromP != fromLim && *toP != toLim) - *(*toP)++ = (unsigned char)*(*fromP)++; -} - -#ifdef XML_NS - -static const struct normal_encoding latin1_encoding_ns = { - { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 }, - { -#include "asciitab.h" -#include "latin1tab.h" - }, - STANDARD_VTABLE(sb_) -}; - -#endif - -static const struct normal_encoding latin1_encoding = { - { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 }, - { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON -#include "latin1tab.h" - }, - STANDARD_VTABLE(sb_) -}; - -static -void ascii_toUtf8(const ENCODING *enc, - const char **fromP, const char *fromLim, - char **toP, const char *toLim) -{ - while (*fromP != fromLim && *toP != toLim) - *(*toP)++ = *(*fromP)++; -} - -#ifdef XML_NS - -static const struct normal_encoding ascii_encoding_ns = { - { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 }, - { -#include "asciitab.h" -/* BT_NONXML == 0 */ - }, - STANDARD_VTABLE(sb_) -}; - -#endif - -static const struct normal_encoding ascii_encoding = { - { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 }, - { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON -/* BT_NONXML == 0 */ - }, - STANDARD_VTABLE(sb_) -}; - -static int unicode_byte_type(char hi, char lo) -{ - switch ((unsigned char)hi) { - case 0xD8: case 0xD9: case 0xDA: case 0xDB: - return BT_LEAD4; - case 0xDC: case 0xDD: case 0xDE: case 0xDF: - return BT_TRAIL; - case 0xFF: - switch ((unsigned char)lo) { - case 0xFF: - case 0xFE: - return BT_NONXML; - } - break; - } - return BT_NONASCII; -} - -#define DEFINE_UTF16_TO_UTF8(E) \ -static \ -void E ## toUtf8(const ENCODING *enc, \ - const char **fromP, const char *fromLim, \ - char **toP, const char *toLim) \ -{ \ - const char *from; \ - for (from = *fromP; from != fromLim; from += 2) { \ - int plane; \ - unsigned char lo2; \ - unsigned char lo = GET_LO(from); \ - unsigned char hi = GET_HI(from); \ - switch (hi) { \ - case 0: \ - if (lo < 0x80) { \ - if (*toP == toLim) { \ - *fromP = from; \ - return; \ - } \ - *(*toP)++ = lo; \ - break; \ - } \ - /* fall through */ \ - case 0x1: case 0x2: case 0x3: \ - case 0x4: case 0x5: case 0x6: case 0x7: \ - if (toLim - *toP < 2) { \ - *fromP = from; \ - return; \ - } \ - *(*toP)++ = ((lo >> 6) | (hi << 2) | UTF8_cval2); \ - *(*toP)++ = ((lo & 0x3f) | 0x80); \ - break; \ - default: \ - if (toLim - *toP < 3) { \ - *fromP = from; \ - return; \ - } \ - /* 16 bits divided 4, 6, 6 amongst 3 bytes */ \ - *(*toP)++ = ((hi >> 4) | UTF8_cval3); \ - *(*toP)++ = (((hi & 0xf) << 2) | (lo >> 6) | 0x80); \ - *(*toP)++ = ((lo & 0x3f) | 0x80); \ - break; \ - case 0xD8: case 0xD9: case 0xDA: case 0xDB: \ - if (toLim - *toP < 4) { \ - *fromP = from; \ - return; \ - } \ - plane = (((hi & 0x3) << 2) | ((lo >> 6) & 0x3)) + 1; \ - *(*toP)++ = ((plane >> 2) | UTF8_cval4); \ - *(*toP)++ = (((lo >> 2) & 0xF) | ((plane & 0x3) << 4) | 0x80); \ - from += 2; \ - lo2 = GET_LO(from); \ - *(*toP)++ = (((lo & 0x3) << 4) \ - | ((GET_HI(from) & 0x3) << 2) \ - | (lo2 >> 6) \ - | 0x80); \ - *(*toP)++ = ((lo2 & 0x3f) | 0x80); \ - break; \ - } \ - } \ - *fromP = from; \ -} - -#define DEFINE_UTF16_TO_UTF16(E) \ -static \ -void E ## toUtf16(const ENCODING *enc, \ - const char **fromP, const char *fromLim, \ - unsigned short **toP, const unsigned short *toLim) \ -{ \ - /* Avoid copying first half only of surrogate */ \ - if (fromLim - *fromP > ((toLim - *toP) << 1) \ - && (GET_HI(fromLim - 2) & 0xF8) == 0xD8) \ - fromLim -= 2; \ - for (; *fromP != fromLim && *toP != toLim; *fromP += 2) \ - *(*toP)++ = (GET_HI(*fromP) << 8) | GET_LO(*fromP); \ -} - -#define SET2(ptr, ch) \ - (((ptr)[0] = ((ch) & 0xff)), ((ptr)[1] = ((ch) >> 8))) -#define GET_LO(ptr) ((unsigned char)(ptr)[0]) -#define GET_HI(ptr) ((unsigned char)(ptr)[1]) - -DEFINE_UTF16_TO_UTF8(little2_) -DEFINE_UTF16_TO_UTF16(little2_) - -#undef SET2 -#undef GET_LO -#undef GET_HI - -#define SET2(ptr, ch) \ - (((ptr)[0] = ((ch) >> 8)), ((ptr)[1] = ((ch) & 0xFF))) -#define GET_LO(ptr) ((unsigned char)(ptr)[1]) -#define GET_HI(ptr) ((unsigned char)(ptr)[0]) - -DEFINE_UTF16_TO_UTF8(big2_) -DEFINE_UTF16_TO_UTF16(big2_) - -#undef SET2 -#undef GET_LO -#undef GET_HI - -#define LITTLE2_BYTE_TYPE(enc, p) \ - ((p)[1] == 0 \ - ? ((struct normal_encoding *)(enc))->type[(unsigned char)*(p)] \ - : unicode_byte_type((p)[1], (p)[0])) -#define LITTLE2_BYTE_TO_ASCII(enc, p) ((p)[1] == 0 ? (p)[0] : -1) -#define LITTLE2_CHAR_MATCHES(enc, p, c) ((p)[1] == 0 && (p)[0] == c) -#define LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) \ - UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0]) -#define LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) \ - UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0]) - -#ifdef XML_MIN_SIZE - -static -int little2_byteType(const ENCODING *enc, const char *p) -{ - return LITTLE2_BYTE_TYPE(enc, p); -} - -static -int little2_byteToAscii(const ENCODING *enc, const char *p) -{ - return LITTLE2_BYTE_TO_ASCII(enc, p); -} - -static -int little2_charMatches(const ENCODING *enc, const char *p, int c) -{ - return LITTLE2_CHAR_MATCHES(enc, p, c); -} - -static -int little2_isNameMin(const ENCODING *enc, const char *p) -{ - return LITTLE2_IS_NAME_CHAR_MINBPC(enc, p); -} - -static -int little2_isNmstrtMin(const ENCODING *enc, const char *p) -{ - return LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p); -} - -#undef VTABLE -#define VTABLE VTABLE1, little2_toUtf8, little2_toUtf16 - -#else /* not XML_MIN_SIZE */ - -#undef PREFIX -#define PREFIX(ident) little2_ ## ident -#define MINBPC(enc) 2 -/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */ -#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p) -#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(enc, p) -#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(enc, p, c) -#define IS_NAME_CHAR(enc, p, n) 0 -#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) -#define IS_NMSTRT_CHAR(enc, p, n) (0) -#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) - -#include "xmltok_impl.c" - -#undef MINBPC -#undef BYTE_TYPE -#undef BYTE_TO_ASCII -#undef CHAR_MATCHES -#undef IS_NAME_CHAR -#undef IS_NAME_CHAR_MINBPC -#undef IS_NMSTRT_CHAR -#undef IS_NMSTRT_CHAR_MINBPC -#undef IS_INVALID_CHAR - -#endif /* not XML_MIN_SIZE */ - -#ifdef XML_NS - -static const struct normal_encoding little2_encoding_ns = { - { VTABLE, 2, 0, -#if XML_BYTE_ORDER == 12 - 1 -#else - 0 -#endif - }, - { -#include "asciitab.h" -#include "latin1tab.h" - }, - STANDARD_VTABLE(little2_) -}; - -#endif - -static const struct normal_encoding little2_encoding = { - { VTABLE, 2, 0, -#if XML_BYTE_ORDER == 12 - 1 -#else - 0 -#endif - }, - { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON -#include "latin1tab.h" - }, - STANDARD_VTABLE(little2_) -}; - -#if XML_BYTE_ORDER != 21 - -#ifdef XML_NS - -static const struct normal_encoding internal_little2_encoding_ns = { - { VTABLE, 2, 0, 1 }, - { -#include "iasciitab.h" -#include "latin1tab.h" - }, - STANDARD_VTABLE(little2_) -}; - -#endif - -static const struct normal_encoding internal_little2_encoding = { - { VTABLE, 2, 0, 1 }, - { -#define BT_COLON BT_NMSTRT -#include "iasciitab.h" -#undef BT_COLON -#include "latin1tab.h" - }, - STANDARD_VTABLE(little2_) -}; - -#endif - - -#define BIG2_BYTE_TYPE(enc, p) \ - ((p)[0] == 0 \ - ? ((struct normal_encoding *)(enc))->type[(unsigned char)(p)[1]] \ - : unicode_byte_type((p)[0], (p)[1])) -#define BIG2_BYTE_TO_ASCII(enc, p) ((p)[0] == 0 ? (p)[1] : -1) -#define BIG2_CHAR_MATCHES(enc, p, c) ((p)[0] == 0 && (p)[1] == c) -#define BIG2_IS_NAME_CHAR_MINBPC(enc, p) \ - UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1]) -#define BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) \ - UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[0], (unsigned char)p[1]) - -#ifdef XML_MIN_SIZE - -static -int big2_byteType(const ENCODING *enc, const char *p) -{ - return BIG2_BYTE_TYPE(enc, p); -} - -static -int big2_byteToAscii(const ENCODING *enc, const char *p) -{ - return BIG2_BYTE_TO_ASCII(enc, p); -} - -static -int big2_charMatches(const ENCODING *enc, const char *p, int c) -{ - return BIG2_CHAR_MATCHES(enc, p, c); -} - -static -int big2_isNameMin(const ENCODING *enc, const char *p) -{ - return BIG2_IS_NAME_CHAR_MINBPC(enc, p); -} - -static -int big2_isNmstrtMin(const ENCODING *enc, const char *p) -{ - return BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p); -} - -#undef VTABLE -#define VTABLE VTABLE1, big2_toUtf8, big2_toUtf16 - -#else /* not XML_MIN_SIZE */ - -#undef PREFIX -#define PREFIX(ident) big2_ ## ident -#define MINBPC(enc) 2 -/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */ -#define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p) -#define BYTE_TO_ASCII(enc, p) BIG2_BYTE_TO_ASCII(enc, p) -#define CHAR_MATCHES(enc, p, c) BIG2_CHAR_MATCHES(enc, p, c) -#define IS_NAME_CHAR(enc, p, n) 0 -#define IS_NAME_CHAR_MINBPC(enc, p) BIG2_IS_NAME_CHAR_MINBPC(enc, p) -#define IS_NMSTRT_CHAR(enc, p, n) (0) -#define IS_NMSTRT_CHAR_MINBPC(enc, p) BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) - -#include "xmltok_impl.c" - -#undef MINBPC -#undef BYTE_TYPE -#undef BYTE_TO_ASCII -#undef CHAR_MATCHES -#undef IS_NAME_CHAR -#undef IS_NAME_CHAR_MINBPC -#undef IS_NMSTRT_CHAR -#undef IS_NMSTRT_CHAR_MINBPC -#undef IS_INVALID_CHAR - -#endif /* not XML_MIN_SIZE */ - -#ifdef XML_NS - -static const struct normal_encoding big2_encoding_ns = { - { VTABLE, 2, 0, -#if XML_BYTE_ORDER == 21 - 1 -#else - 0 -#endif - }, - { -#include "asciitab.h" -#include "latin1tab.h" - }, - STANDARD_VTABLE(big2_) -}; - -#endif - -static const struct normal_encoding big2_encoding = { - { VTABLE, 2, 0, -#if XML_BYTE_ORDER == 21 - 1 -#else - 0 -#endif - }, - { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON -#include "latin1tab.h" - }, - STANDARD_VTABLE(big2_) -}; - -#if XML_BYTE_ORDER != 12 - -#ifdef XML_NS - -static const struct normal_encoding internal_big2_encoding_ns = { - { VTABLE, 2, 0, 1 }, - { -#include "iasciitab.h" -#include "latin1tab.h" - }, - STANDARD_VTABLE(big2_) -}; - -#endif - -static const struct normal_encoding internal_big2_encoding = { - { VTABLE, 2, 0, 1 }, - { -#define BT_COLON BT_NMSTRT -#include "iasciitab.h" -#undef BT_COLON -#include "latin1tab.h" - }, - STANDARD_VTABLE(big2_) -}; - -#endif - -#undef PREFIX - -static -int streqci(const char *s1, const char *s2) -{ - for (;;) { - char c1 = *s1++; - char c2 = *s2++; - if (ASCII_a <= c1 && c1 <= ASCII_z) - c1 += ASCII_A - ASCII_a; - if (ASCII_a <= c2 && c2 <= ASCII_z) - c2 += ASCII_A - ASCII_a; - if (c1 != c2) - return 0; - if (!c1) - break; - } - return 1; -} - -static -void initUpdatePosition(const ENCODING *enc, const char *ptr, - const char *end, POSITION *pos) -{ - normal_updatePosition(&utf8_encoding.enc, ptr, end, pos); -} - -static -int toAscii(const ENCODING *enc, const char *ptr, const char *end) -{ - char buf[1]; - char *p = buf; - XmlUtf8Convert(enc, &ptr, end, &p, p + 1); - if (p == buf) - return -1; - else - return buf[0]; -} - -static -int isSpace(int c) -{ - switch (c) { - case 0x20: - case 0xD: - case 0xA: - case 0x9: - return 1; - } - return 0; -} - -/* Return 1 if there's just optional white space -or there's an S followed by name=val. */ -static -int parsePseudoAttribute(const ENCODING *enc, - const char *ptr, - const char *end, - const char **namePtr, - const char **nameEndPtr, - const char **valPtr, - const char **nextTokPtr) -{ - int c; - char open; - if (ptr == end) { - *namePtr = 0; - return 1; - } - if (!isSpace(toAscii(enc, ptr, end))) { - *nextTokPtr = ptr; - return 0; - } - do { - ptr += enc->minBytesPerChar; - } while (isSpace(toAscii(enc, ptr, end))); - if (ptr == end) { - *namePtr = 0; - return 1; - } - *namePtr = ptr; - for (;;) { - c = toAscii(enc, ptr, end); - if (c == -1) { - *nextTokPtr = ptr; - return 0; - } - if (c == ASCII_EQUALS) { - *nameEndPtr = ptr; - break; - } - if (isSpace(c)) { - *nameEndPtr = ptr; - do { - ptr += enc->minBytesPerChar; - } while (isSpace(c = toAscii(enc, ptr, end))); - if (c != ASCII_EQUALS) { - *nextTokPtr = ptr; - return 0; - } - break; - } - ptr += enc->minBytesPerChar; - } - if (ptr == *namePtr) { - *nextTokPtr = ptr; - return 0; - } - ptr += enc->minBytesPerChar; - c = toAscii(enc, ptr, end); - while (isSpace(c)) { - ptr += enc->minBytesPerChar; - c = toAscii(enc, ptr, end); - } - if (c != ASCII_QUOT && c != ASCII_APOS) { - *nextTokPtr = ptr; - return 0; - } - open = c; - ptr += enc->minBytesPerChar; - *valPtr = ptr; - for (;; ptr += enc->minBytesPerChar) { - c = toAscii(enc, ptr, end); - if (c == open) - break; - if (!(ASCII_a <= c && c <= ASCII_z) - && !(ASCII_A <= c && c <= ASCII_Z) - && !(ASCII_0 <= c && c <= ASCII_9) - && c != ASCII_PERIOD - && c != ASCII_MINUS - && c != ASCII_UNDERSCORE) { - *nextTokPtr = ptr; - return 0; - } - } - *nextTokPtr = ptr + enc->minBytesPerChar; - return 1; -} - -static const char KW_version[] = { - ASCII_v, ASCII_e, ASCII_r, ASCII_s, ASCII_i, ASCII_o, ASCII_n, '\0' -}; - -static const char KW_encoding[] = { - ASCII_e, ASCII_n, ASCII_c, ASCII_o, ASCII_d, ASCII_i, ASCII_n, ASCII_g, '\0' -}; - -static const char KW_standalone[] = { - ASCII_s, ASCII_t, ASCII_a, ASCII_n, ASCII_d, ASCII_a, ASCII_l, ASCII_o, ASCII_n, ASCII_e, '\0' -}; - -static const char KW_yes[] = { - ASCII_y, ASCII_e, ASCII_s, '\0' -}; - -static const char KW_no[] = { - ASCII_n, ASCII_o, '\0' -}; - -static -int doParseXmlDecl(const ENCODING *(*encodingFinder)(const ENCODING *, - const char *, - const char *), - int isGeneralTextEntity, - const ENCODING *enc, - const char *ptr, - const char *end, - const char **badPtr, - const char **versionPtr, - const char **versionEndPtr, - const char **encodingName, - const ENCODING **encoding, - int *standalone) -{ - const char *val = 0; - const char *name = 0; - const char *nameEnd = 0; - ptr += 5 * enc->minBytesPerChar; - end -= 2 * enc->minBytesPerChar; - if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr) || !name) { - *badPtr = ptr; - return 0; - } - if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_version)) { - if (!isGeneralTextEntity) { - *badPtr = name; - return 0; - } - } - else { - if (versionPtr) - *versionPtr = val; - if (versionEndPtr) - *versionEndPtr = ptr; - if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) { - *badPtr = ptr; - return 0; - } - if (!name) { - if (isGeneralTextEntity) { - /* a TextDecl must have an EncodingDecl */ - *badPtr = ptr; - return 0; - } - return 1; - } - } - if (XmlNameMatchesAscii(enc, name, nameEnd, KW_encoding)) { - int c = toAscii(enc, val, end); - if (!(ASCII_a <= c && c <= ASCII_z) && !(ASCII_A <= c && c <= ASCII_Z)) { - *badPtr = val; - return 0; - } - if (encodingName) - *encodingName = val; - if (encoding) - *encoding = encodingFinder(enc, val, ptr - enc->minBytesPerChar); - if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) { - *badPtr = ptr; - return 0; - } - if (!name) - return 1; - } - if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_standalone) || isGeneralTextEntity) { - *badPtr = name; - return 0; - } - if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_yes)) { - if (standalone) - *standalone = 1; - } - else if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_no)) { - if (standalone) - *standalone = 0; - } - else { - *badPtr = val; - return 0; - } - while (isSpace(toAscii(enc, ptr, end))) - ptr += enc->minBytesPerChar; - if (ptr != end) { - *badPtr = ptr; - return 0; - } - return 1; -} - -static -int checkCharRefNumber(int result) -{ - switch (result >> 8) { - case 0xD8: case 0xD9: case 0xDA: case 0xDB: - case 0xDC: case 0xDD: case 0xDE: case 0xDF: - return -1; - case 0: - if (latin1_encoding.type[result] == BT_NONXML) - return -1; - break; - case 0xFF: - if (result == 0xFFFE || result == 0xFFFF) - return -1; - break; - } - return result; -} - -int XmlUtf8Encode(int c, char *buf) -{ - enum { - /* minN is minimum legal resulting value for N byte sequence */ - min2 = 0x80, - min3 = 0x800, - min4 = 0x10000 - }; - - if (c < 0) - return 0; - if (c < min2) { - buf[0] = (c | UTF8_cval1); - return 1; - } - if (c < min3) { - buf[0] = ((c >> 6) | UTF8_cval2); - buf[1] = ((c & 0x3f) | 0x80); - return 2; - } - if (c < min4) { - buf[0] = ((c >> 12) | UTF8_cval3); - buf[1] = (((c >> 6) & 0x3f) | 0x80); - buf[2] = ((c & 0x3f) | 0x80); - return 3; - } - if (c < 0x110000) { - buf[0] = ((c >> 18) | UTF8_cval4); - buf[1] = (((c >> 12) & 0x3f) | 0x80); - buf[2] = (((c >> 6) & 0x3f) | 0x80); - buf[3] = ((c & 0x3f) | 0x80); - return 4; - } - return 0; -} - -int XmlUtf16Encode(int charNum, unsigned short *buf) -{ - if (charNum < 0) - return 0; - if (charNum < 0x10000) { - buf[0] = charNum; - return 1; - } - if (charNum < 0x110000) { - charNum -= 0x10000; - buf[0] = (charNum >> 10) + 0xD800; - buf[1] = (charNum & 0x3FF) + 0xDC00; - return 2; - } - return 0; -} - -struct unknown_encoding { - struct normal_encoding normal; - int (*convert)(void *userData, const char *p); - void *userData; - unsigned short utf16[256]; - char utf8[256][4]; -}; - -int XmlSizeOfUnknownEncoding(void) -{ - return sizeof(struct unknown_encoding); -} - -static -int unknown_isName(const ENCODING *enc, const char *p) -{ - int c = ((const struct unknown_encoding *)enc) - ->convert(((const struct unknown_encoding *)enc)->userData, p); - if (c & ~0xFFFF) - return 0; - return UCS2_GET_NAMING(namePages, c >> 8, c & 0xFF); -} - -static -int unknown_isNmstrt(const ENCODING *enc, const char *p) -{ - int c = ((const struct unknown_encoding *)enc) - ->convert(((const struct unknown_encoding *)enc)->userData, p); - if (c & ~0xFFFF) - return 0; - return UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xFF); -} - -static -int unknown_isInvalid(const ENCODING *enc, const char *p) -{ - int c = ((const struct unknown_encoding *)enc) - ->convert(((const struct unknown_encoding *)enc)->userData, p); - return (c & ~0xFFFF) || checkCharRefNumber(c) < 0; -} - -static -void unknown_toUtf8(const ENCODING *enc, - const char **fromP, const char *fromLim, - char **toP, const char *toLim) -{ - char buf[XML_UTF8_ENCODE_MAX]; - for (;;) { - const char *utf8; - int n; - if (*fromP == fromLim) - break; - utf8 = ((const struct unknown_encoding *)enc)->utf8[(unsigned char)**fromP]; - n = *utf8++; - if (n == 0) { - int c = ((const struct unknown_encoding *)enc) - ->convert(((const struct unknown_encoding *)enc)->userData, *fromP); - n = XmlUtf8Encode(c, buf); - if (n > toLim - *toP) - break; - utf8 = buf; - *fromP += ((const struct normal_encoding *)enc)->type[(unsigned char)**fromP] - - (BT_LEAD2 - 2); - } - else { - if (n > toLim - *toP) - break; - (*fromP)++; - } - do { - *(*toP)++ = *utf8++; - } while (--n != 0); - } -} - -static -void unknown_toUtf16(const ENCODING *enc, - const char **fromP, const char *fromLim, - unsigned short **toP, const unsigned short *toLim) -{ - while (*fromP != fromLim && *toP != toLim) { - unsigned short c - = ((const struct unknown_encoding *)enc)->utf16[(unsigned char)**fromP]; - if (c == 0) { - c = (unsigned short)((const struct unknown_encoding *)enc) - ->convert(((const struct unknown_encoding *)enc)->userData, *fromP); - *fromP += ((const struct normal_encoding *)enc)->type[(unsigned char)**fromP] - - (BT_LEAD2 - 2); - } - else - (*fromP)++; - *(*toP)++ = c; - } -} - -ENCODING * -XmlInitUnknownEncoding(void *mem, - int *table, - int (*convert)(void *userData, const char *p), - void *userData) -{ - int i; - struct unknown_encoding *e = mem; - for (i = 0; i < (int)sizeof(struct normal_encoding); i++) - ((char *)mem)[i] = ((char *)&latin1_encoding)[i]; - for (i = 0; i < 128; i++) - if (latin1_encoding.type[i] != BT_OTHER - && latin1_encoding.type[i] != BT_NONXML - && table[i] != i) - return 0; - for (i = 0; i < 256; i++) { - int c = table[i]; - if (c == -1) { - e->normal.type[i] = BT_MALFORM; - /* This shouldn't really get used. */ - e->utf16[i] = 0xFFFF; - e->utf8[i][0] = 1; - e->utf8[i][1] = 0; - } - else if (c < 0) { - if (c < -4) - return 0; - e->normal.type[i] = BT_LEAD2 - (c + 2); - e->utf8[i][0] = 0; - e->utf16[i] = 0; - } - else if (c < 0x80) { - if (latin1_encoding.type[c] != BT_OTHER - && latin1_encoding.type[c] != BT_NONXML - && c != i) - return 0; - e->normal.type[i] = latin1_encoding.type[c]; - e->utf8[i][0] = 1; - e->utf8[i][1] = (char)c; - e->utf16[i] = c == 0 ? 0xFFFF : c; - } - else if (checkCharRefNumber(c) < 0) { - e->normal.type[i] = BT_NONXML; - /* This shouldn't really get used. */ - e->utf16[i] = 0xFFFF; - e->utf8[i][0] = 1; - e->utf8[i][1] = 0; - } - else { - if (c > 0xFFFF) - return 0; - if (UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xff)) - e->normal.type[i] = BT_NMSTRT; - else if (UCS2_GET_NAMING(namePages, c >> 8, c & 0xff)) - e->normal.type[i] = BT_NAME; - else - e->normal.type[i] = BT_OTHER; - e->utf8[i][0] = (char)XmlUtf8Encode(c, e->utf8[i] + 1); - e->utf16[i] = c; - } - } - e->userData = userData; - e->convert = convert; - if (convert) { - e->normal.isName2 = unknown_isName; - e->normal.isName3 = unknown_isName; - e->normal.isName4 = unknown_isName; - e->normal.isNmstrt2 = unknown_isNmstrt; - e->normal.isNmstrt3 = unknown_isNmstrt; - e->normal.isNmstrt4 = unknown_isNmstrt; - e->normal.isInvalid2 = unknown_isInvalid; - e->normal.isInvalid3 = unknown_isInvalid; - e->normal.isInvalid4 = unknown_isInvalid; - } - e->normal.enc.utf8Convert = unknown_toUtf8; - e->normal.enc.utf16Convert = unknown_toUtf16; - return &(e->normal.enc); -} - -/* If this enumeration is changed, getEncodingIndex and encodings -must also be changed. */ -enum { - UNKNOWN_ENC = -1, - ISO_8859_1_ENC = 0, - US_ASCII_ENC, - UTF_8_ENC, - UTF_16_ENC, - UTF_16BE_ENC, - UTF_16LE_ENC, - /* must match encodingNames up to here */ - NO_ENC -}; - -static const char KW_ISO_8859_1[] = { - ASCII_I, ASCII_S, ASCII_O, ASCII_MINUS, ASCII_8, ASCII_8, ASCII_5, ASCII_9, ASCII_MINUS, ASCII_1, '\0' -}; -static const char KW_US_ASCII[] = { - ASCII_U, ASCII_S, ASCII_MINUS, ASCII_A, ASCII_S, ASCII_C, ASCII_I, ASCII_I, '\0' -}; -static const char KW_UTF_8[] = { - ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_8, '\0' -}; -static const char KW_UTF_16[] = { - ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, '\0' -}; -static const char KW_UTF_16BE[] = { - ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_B, ASCII_E, '\0' -}; -static const char KW_UTF_16LE[] = { - ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_L, ASCII_E, '\0' -}; - -static -int getEncodingIndex(const char *name) -{ - static const char *encodingNames[] = { - KW_ISO_8859_1, - KW_US_ASCII, - KW_UTF_8, - KW_UTF_16, - KW_UTF_16BE, - KW_UTF_16LE, - }; - int i; - if (name == 0) - return NO_ENC; - for (i = 0; i < (int)(sizeof(encodingNames)/sizeof(encodingNames[0])); i++) - if (streqci(name, encodingNames[i])) - return i; - return UNKNOWN_ENC; -} - -/* For binary compatibility, we store the index of the encoding specified -at initialization in the isUtf16 member. */ - -#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16) -#define SET_INIT_ENC_INDEX(enc, i) ((enc)->initEnc.isUtf16 = (char)i) - -/* This is what detects the encoding. -encodingTable maps from encoding indices to encodings; -INIT_ENC_INDEX(enc) is the index of the external (protocol) specified encoding; -state is XML_CONTENT_STATE if we're parsing an external text entity, -and XML_PROLOG_STATE otherwise. -*/ - - -static -int initScan(const ENCODING **encodingTable, - const INIT_ENCODING *enc, - int state, - const char *ptr, - const char *end, - const char **nextTokPtr) -{ - const ENCODING **encPtr; - - if (ptr == end) - return XML_TOK_NONE; - encPtr = enc->encPtr; - if (ptr + 1 == end) { - /* only a single byte available for auto-detection */ -#ifndef XML_DTD /* FIXME */ - /* a well-formed document entity must have more than one byte */ - if (state != XML_CONTENT_STATE) - return XML_TOK_PARTIAL; -#endif - /* so we're parsing an external text entity... */ - /* if UTF-16 was externally specified, then we need at least 2 bytes */ - switch (INIT_ENC_INDEX(enc)) { - case UTF_16_ENC: - case UTF_16LE_ENC: - case UTF_16BE_ENC: - return XML_TOK_PARTIAL; - } - switch ((unsigned char)*ptr) { - case 0xFE: - case 0xFF: - case 0xEF: /* possibly first byte of UTF-8 BOM */ - if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC - && state == XML_CONTENT_STATE) - break; - /* fall through */ - case 0x00: - case 0x3C: - return XML_TOK_PARTIAL; - } - } - else { - switch (((unsigned char)ptr[0] << 8) | (unsigned char)ptr[1]) { - case 0xFEFF: - if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC - && state == XML_CONTENT_STATE) - break; - *nextTokPtr = ptr + 2; - *encPtr = encodingTable[UTF_16BE_ENC]; - return XML_TOK_BOM; - /* 00 3C is handled in the default case */ - case 0x3C00: - if ((INIT_ENC_INDEX(enc) == UTF_16BE_ENC - || INIT_ENC_INDEX(enc) == UTF_16_ENC) - && state == XML_CONTENT_STATE) - break; - *encPtr = encodingTable[UTF_16LE_ENC]; - return XmlTok(*encPtr, state, ptr, end, nextTokPtr); - case 0xFFFE: - if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC - && state == XML_CONTENT_STATE) - break; - *nextTokPtr = ptr + 2; - *encPtr = encodingTable[UTF_16LE_ENC]; - return XML_TOK_BOM; - case 0xEFBB: - /* Maybe a UTF-8 BOM (EF BB BF) */ - /* If there's an explicitly specified (external) encoding - of ISO-8859-1 or some flavour of UTF-16 - and this is an external text entity, - don't look for the BOM, - because it might be a legal data. */ - if (state == XML_CONTENT_STATE) { - int e = INIT_ENC_INDEX(enc); - if (e == ISO_8859_1_ENC || e == UTF_16BE_ENC || e == UTF_16LE_ENC || e == UTF_16_ENC) - break; - } - if (ptr + 2 == end) - return XML_TOK_PARTIAL; - if ((unsigned char)ptr[2] == 0xBF) { - *encPtr = encodingTable[UTF_8_ENC]; - return XML_TOK_BOM; - } - break; - default: - if (ptr[0] == '\0') { - /* 0 isn't a legal data character. Furthermore a document entity can only - start with ASCII characters. So the only way this can fail to be big-endian - UTF-16 if it it's an external parsed general entity that's labelled as - UTF-16LE. */ - if (state == XML_CONTENT_STATE && INIT_ENC_INDEX(enc) == UTF_16LE_ENC) - break; - *encPtr = encodingTable[UTF_16BE_ENC]; - return XmlTok(*encPtr, state, ptr, end, nextTokPtr); - } - else if (ptr[1] == '\0') { - /* We could recover here in the case: - - parsing an external entity - - second byte is 0 - - no externally specified encoding - - no encoding declaration - by assuming UTF-16LE. But we don't, because this would mean when - presented just with a single byte, we couldn't reliably determine - whether we needed further bytes. */ - if (state == XML_CONTENT_STATE) - break; - *encPtr = encodingTable[UTF_16LE_ENC]; - return XmlTok(*encPtr, state, ptr, end, nextTokPtr); - } - break; - } - } - *encPtr = encodingTable[INIT_ENC_INDEX(enc)]; - return XmlTok(*encPtr, state, ptr, end, nextTokPtr); -} - - -#define NS(x) x -#define ns(x) x -#include "xmltok_ns.c" -#undef NS -#undef ns - -#ifdef XML_NS - -#define NS(x) x ## NS -#define ns(x) x ## _ns - -#include "xmltok_ns.c" - -#undef NS -#undef ns - -ENCODING * -XmlInitUnknownEncodingNS(void *mem, - int *table, - int (*convert)(void *userData, const char *p), - void *userData) -{ - ENCODING *enc = XmlInitUnknownEncoding(mem, table, convert, userData); - if (enc) - ((struct normal_encoding *)enc)->type[ASCII_COLON] = BT_COLON; - return enc; -} - -#endif /* XML_NS */ diff --git a/Build/source/libs/expat/lib/xmltok.h b/Build/source/libs/expat/lib/xmltok.h deleted file mode 100644 index 8b02324c387..00000000000 --- a/Build/source/libs/expat/lib/xmltok.h +++ /dev/null @@ -1,299 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -#ifndef XmlTok_INCLUDED -#define XmlTok_INCLUDED 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* The following token may be returned by XmlContentTok */ -#define XML_TOK_TRAILING_RSQB -5 /* ] or ]] at the end of the scan; might be start of - illegal ]]> sequence */ -/* The following tokens may be returned by both XmlPrologTok and XmlContentTok */ -#define XML_TOK_NONE -4 /* The string to be scanned is empty */ -#define XML_TOK_TRAILING_CR -3 /* A CR at the end of the scan; - might be part of CRLF sequence */ -#define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */ -#define XML_TOK_PARTIAL -1 /* only part of a token */ -#define XML_TOK_INVALID 0 - -/* The following tokens are returned by XmlContentTok; some are also - returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok */ - -#define XML_TOK_START_TAG_WITH_ATTS 1 -#define XML_TOK_START_TAG_NO_ATTS 2 -#define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag */ -#define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4 -#define XML_TOK_END_TAG 5 -#define XML_TOK_DATA_CHARS 6 -#define XML_TOK_DATA_NEWLINE 7 -#define XML_TOK_CDATA_SECT_OPEN 8 -#define XML_TOK_ENTITY_REF 9 -#define XML_TOK_CHAR_REF 10 /* numeric character reference */ - -/* The following tokens may be returned by both XmlPrologTok and XmlContentTok */ -#define XML_TOK_PI 11 /* processing instruction */ -#define XML_TOK_XML_DECL 12 /* XML decl or text decl */ -#define XML_TOK_COMMENT 13 -#define XML_TOK_BOM 14 /* Byte order mark */ - -/* The following tokens are returned only by XmlPrologTok */ -#define XML_TOK_PROLOG_S 15 -#define XML_TOK_DECL_OPEN 16 /* */ -#define XML_TOK_NAME 18 -#define XML_TOK_NMTOKEN 19 -#define XML_TOK_POUND_NAME 20 /* #name */ -#define XML_TOK_OR 21 /* | */ -#define XML_TOK_PERCENT 22 -#define XML_TOK_OPEN_PAREN 23 -#define XML_TOK_CLOSE_PAREN 24 -#define XML_TOK_OPEN_BRACKET 25 -#define XML_TOK_CLOSE_BRACKET 26 -#define XML_TOK_LITERAL 27 -#define XML_TOK_PARAM_ENTITY_REF 28 -#define XML_TOK_INSTANCE_START 29 - -/* The following occur only in element type declarations */ -#define XML_TOK_NAME_QUESTION 30 /* name? */ -#define XML_TOK_NAME_ASTERISK 31 /* name* */ -#define XML_TOK_NAME_PLUS 32 /* name+ */ -#define XML_TOK_COND_SECT_OPEN 33 /* */ -#define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */ -#define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */ -#define XML_TOK_CLOSE_PAREN_PLUS 37 /* )+ */ -#define XML_TOK_COMMA 38 - -/* The following token is returned only by XmlAttributeValueTok */ -#define XML_TOK_ATTRIBUTE_VALUE_S 39 - -/* The following token is returned only by XmlCdataSectionTok */ -#define XML_TOK_CDATA_SECT_CLOSE 40 - -/* With namespace processing this is returned by XmlPrologTok - for a name with a colon. */ -#define XML_TOK_PREFIXED_NAME 41 - -#ifdef XML_DTD -#define XML_TOK_IGNORE_SECT 42 -#endif /* XML_DTD */ - -#ifdef XML_DTD -#define XML_N_STATES 4 -#else /* not XML_DTD */ -#define XML_N_STATES 3 -#endif /* not XML_DTD */ - -#define XML_PROLOG_STATE 0 -#define XML_CONTENT_STATE 1 -#define XML_CDATA_SECTION_STATE 2 -#ifdef XML_DTD -#define XML_IGNORE_SECTION_STATE 3 -#endif /* XML_DTD */ - -#define XML_N_LITERAL_TYPES 2 -#define XML_ATTRIBUTE_VALUE_LITERAL 0 -#define XML_ENTITY_VALUE_LITERAL 1 - -/* The size of the buffer passed to XmlUtf8Encode must be at least this. */ -#define XML_UTF8_ENCODE_MAX 4 -/* The size of the buffer passed to XmlUtf16Encode must be at least this. */ -#define XML_UTF16_ENCODE_MAX 2 - -typedef struct position { - /* first line and first column are 0 not 1 */ - unsigned long lineNumber; - unsigned long columnNumber; -} POSITION; - -typedef struct { - const char *name; - const char *valuePtr; - const char *valueEnd; - char normalized; -} ATTRIBUTE; - -struct encoding; -typedef struct encoding ENCODING; - -struct encoding { - int (*scanners[XML_N_STATES])(const ENCODING *, - const char *, - const char *, - const char **); - int (*literalScanners[XML_N_LITERAL_TYPES])(const ENCODING *, - const char *, - const char *, - const char **); - int (*sameName)(const ENCODING *, - const char *, const char *); - int (*nameMatchesAscii)(const ENCODING *, - const char *, const char *, const char *); - int (*nameLength)(const ENCODING *, const char *); - const char *(*skipS)(const ENCODING *, const char *); - int (*getAtts)(const ENCODING *enc, const char *ptr, - int attsMax, ATTRIBUTE *atts); - int (*charRefNumber)(const ENCODING *enc, const char *ptr); - int (*predefinedEntityName)(const ENCODING *, const char *, const char *); - void (*updatePosition)(const ENCODING *, - const char *ptr, - const char *end, - POSITION *); - int (*isPublicId)(const ENCODING *enc, const char *ptr, const char *end, - const char **badPtr); - void (*utf8Convert)(const ENCODING *enc, - const char **fromP, - const char *fromLim, - char **toP, - const char *toLim); - void (*utf16Convert)(const ENCODING *enc, - const char **fromP, - const char *fromLim, - unsigned short **toP, - const unsigned short *toLim); - int minBytesPerChar; - char isUtf8; - char isUtf16; -}; - -/* -Scan the string starting at ptr until the end of the next complete token, -but do not scan past eptr. Return an integer giving the type of token. - -Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set. - -Return XML_TOK_PARTIAL when the string does not contain a complete token; -nextTokPtr will not be set. - -Return XML_TOK_INVALID when the string does not start a valid token; nextTokPtr -will be set to point to the character which made the token invalid. - -Otherwise the string starts with a valid token; nextTokPtr will be set to point -to the character following the end of that token. - -Each data character counts as a single token, but adjacent data characters -may be returned together. Similarly for characters in the prolog outside -literals, comments and processing instructions. -*/ - - -#define XmlTok(enc, state, ptr, end, nextTokPtr) \ - (((enc)->scanners[state])(enc, ptr, end, nextTokPtr)) - -#define XmlPrologTok(enc, ptr, end, nextTokPtr) \ - XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr) - -#define XmlContentTok(enc, ptr, end, nextTokPtr) \ - XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr) - -#define XmlCdataSectionTok(enc, ptr, end, nextTokPtr) \ - XmlTok(enc, XML_CDATA_SECTION_STATE, ptr, end, nextTokPtr) - -#ifdef XML_DTD - -#define XmlIgnoreSectionTok(enc, ptr, end, nextTokPtr) \ - XmlTok(enc, XML_IGNORE_SECTION_STATE, ptr, end, nextTokPtr) - -#endif /* XML_DTD */ - -/* This is used for performing a 2nd-level tokenization on -the content of a literal that has already been returned by XmlTok. */ - -#define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \ - (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr)) - -#define XmlAttributeValueTok(enc, ptr, end, nextTokPtr) \ - XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr) - -#define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \ - XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr) - -#define XmlSameName(enc, ptr1, ptr2) (((enc)->sameName)(enc, ptr1, ptr2)) - -#define XmlNameMatchesAscii(enc, ptr1, end1, ptr2) \ - (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2)) - -#define XmlNameLength(enc, ptr) \ - (((enc)->nameLength)(enc, ptr)) - -#define XmlSkipS(enc, ptr) \ - (((enc)->skipS)(enc, ptr)) - -#define XmlGetAttributes(enc, ptr, attsMax, atts) \ - (((enc)->getAtts)(enc, ptr, attsMax, atts)) - -#define XmlCharRefNumber(enc, ptr) \ - (((enc)->charRefNumber)(enc, ptr)) - -#define XmlPredefinedEntityName(enc, ptr, end) \ - (((enc)->predefinedEntityName)(enc, ptr, end)) - -#define XmlUpdatePosition(enc, ptr, end, pos) \ - (((enc)->updatePosition)(enc, ptr, end, pos)) - -#define XmlIsPublicId(enc, ptr, end, badPtr) \ - (((enc)->isPublicId)(enc, ptr, end, badPtr)) - -#define XmlUtf8Convert(enc, fromP, fromLim, toP, toLim) \ - (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim)) - -#define XmlUtf16Convert(enc, fromP, fromLim, toP, toLim) \ - (((enc)->utf16Convert)(enc, fromP, fromLim, toP, toLim)) - -typedef struct { - ENCODING initEnc; - const ENCODING **encPtr; -} INIT_ENCODING; - -int XmlParseXmlDecl(int isGeneralTextEntity, - const ENCODING *enc, - const char *ptr, - const char *end, - const char **badPtr, - const char **versionPtr, - const char **versionEndPtr, - const char **encodingNamePtr, - const ENCODING **namedEncodingPtr, - int *standalonePtr); - -int XmlInitEncoding(INIT_ENCODING *, const ENCODING **, const char *name); -const ENCODING *XmlGetUtf8InternalEncoding(void); -const ENCODING *XmlGetUtf16InternalEncoding(void); -int XmlUtf8Encode(int charNumber, char *buf); -int XmlUtf16Encode(int charNumber, unsigned short *buf); - -int XmlSizeOfUnknownEncoding(void); -ENCODING * -XmlInitUnknownEncoding(void *mem, - int *table, - int (*conv)(void *userData, const char *p), - void *userData); - -int XmlParseXmlDeclNS(int isGeneralTextEntity, - const ENCODING *enc, - const char *ptr, - const char *end, - const char **badPtr, - const char **versionPtr, - const char **versionEndPtr, - const char **encodingNamePtr, - const ENCODING **namedEncodingPtr, - int *standalonePtr); -int XmlInitEncodingNS(INIT_ENCODING *, const ENCODING **, const char *name); -const ENCODING *XmlGetUtf8InternalEncodingNS(void); -const ENCODING *XmlGetUtf16InternalEncodingNS(void); -ENCODING * -XmlInitUnknownEncodingNS(void *mem, - int *table, - int (*conv)(void *userData, const char *p), - void *userData); -#ifdef __cplusplus -} -#endif - -#endif /* not XmlTok_INCLUDED */ diff --git a/Build/source/libs/expat/lib/xmltok_impl.c b/Build/source/libs/expat/lib/xmltok_impl.c deleted file mode 100644 index 36d2065ce36..00000000000 --- a/Build/source/libs/expat/lib/xmltok_impl.c +++ /dev/null @@ -1,1768 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -#ifndef IS_INVALID_CHAR -#define IS_INVALID_CHAR(enc, ptr, n) (0) -#endif - -#define INVALID_LEAD_CASE(n, ptr, nextTokPtr) \ - case BT_LEAD ## n: \ - if (end - ptr < n) \ - return XML_TOK_PARTIAL_CHAR; \ - if (IS_INVALID_CHAR(enc, ptr, n)) { \ - *(nextTokPtr) = (ptr); \ - return XML_TOK_INVALID; \ - } \ - ptr += n; \ - break; - -#define INVALID_CASES(ptr, nextTokPtr) \ - INVALID_LEAD_CASE(2, ptr, nextTokPtr) \ - INVALID_LEAD_CASE(3, ptr, nextTokPtr) \ - INVALID_LEAD_CASE(4, ptr, nextTokPtr) \ - case BT_NONXML: \ - case BT_MALFORM: \ - case BT_TRAIL: \ - *(nextTokPtr) = (ptr); \ - return XML_TOK_INVALID; - -#define CHECK_NAME_CASE(n, enc, ptr, end, nextTokPtr) \ - case BT_LEAD ## n: \ - if (end - ptr < n) \ - return XML_TOK_PARTIAL_CHAR; \ - if (!IS_NAME_CHAR(enc, ptr, n)) { \ - *nextTokPtr = ptr; \ - return XML_TOK_INVALID; \ - } \ - ptr += n; \ - break; - -#define CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) \ - case BT_NONASCII: \ - if (!IS_NAME_CHAR_MINBPC(enc, ptr)) { \ - *nextTokPtr = ptr; \ - return XML_TOK_INVALID; \ - } \ - case BT_NMSTRT: \ - case BT_HEX: \ - case BT_DIGIT: \ - case BT_NAME: \ - case BT_MINUS: \ - ptr += MINBPC(enc); \ - break; \ - CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr) \ - CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr) \ - CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr) - -#define CHECK_NMSTRT_CASE(n, enc, ptr, end, nextTokPtr) \ - case BT_LEAD ## n: \ - if (end - ptr < n) \ - return XML_TOK_PARTIAL_CHAR; \ - if (!IS_NMSTRT_CHAR(enc, ptr, n)) { \ - *nextTokPtr = ptr; \ - return XML_TOK_INVALID; \ - } \ - ptr += n; \ - break; - -#define CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) \ - case BT_NONASCII: \ - if (!IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { \ - *nextTokPtr = ptr; \ - return XML_TOK_INVALID; \ - } \ - case BT_NMSTRT: \ - case BT_HEX: \ - ptr += MINBPC(enc); \ - break; \ - CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr) \ - CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr) \ - CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr) - -#ifndef PREFIX -#define PREFIX(ident) ident -#endif - -/* ptr points to character following " */ - switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) { - case BT_S: case BT_CR: case BT_LF: case BT_PERCNT: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - /* fall through */ - case BT_S: case BT_CR: case BT_LF: - *nextTokPtr = ptr; - return XML_TOK_DECL_OPEN; - case BT_NMSTRT: - case BT_HEX: - ptr += MINBPC(enc); - break; - default: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - } - return XML_TOK_PARTIAL; -} - -static -int PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr, const char *end, int *tokPtr) -{ - int upper = 0; - *tokPtr = XML_TOK_PI; - if (end - ptr != MINBPC(enc)*3) - return 1; - switch (BYTE_TO_ASCII(enc, ptr)) { - case ASCII_x: - break; - case ASCII_X: - upper = 1; - break; - default: - return 1; - } - ptr += MINBPC(enc); - switch (BYTE_TO_ASCII(enc, ptr)) { - case ASCII_m: - break; - case ASCII_M: - upper = 1; - break; - default: - return 1; - } - ptr += MINBPC(enc); - switch (BYTE_TO_ASCII(enc, ptr)) { - case ASCII_l: - break; - case ASCII_L: - upper = 1; - break; - default: - return 1; - } - if (upper) - return 0; - *tokPtr = XML_TOK_XML_DECL; - return 1; -} - -/* ptr points to character following " 1) { - size_t n = end - ptr; - if (n & (MINBPC(enc) - 1)) { - n &= ~(MINBPC(enc) - 1); - if (n == 0) - return XML_TOK_PARTIAL; - end = ptr + n; - } - } - switch (BYTE_TYPE(enc, ptr)) { - case BT_RSQB: - ptr += MINBPC(enc); - if (ptr == end) - return XML_TOK_PARTIAL; - if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB)) - break; - ptr += MINBPC(enc); - if (ptr == end) - return XML_TOK_PARTIAL; - if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { - ptr -= MINBPC(enc); - break; - } - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_CDATA_SECT_CLOSE; - case BT_CR: - ptr += MINBPC(enc); - if (ptr == end) - return XML_TOK_PARTIAL; - if (BYTE_TYPE(enc, ptr) == BT_LF) - ptr += MINBPC(enc); - *nextTokPtr = ptr; - return XML_TOK_DATA_NEWLINE; - case BT_LF: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_DATA_NEWLINE; - INVALID_CASES(ptr, nextTokPtr) - default: - ptr += MINBPC(enc); - break; - } - while (ptr != end) { - switch (BYTE_TYPE(enc, ptr)) { -#define LEAD_CASE(n) \ - case BT_LEAD ## n: \ - if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \ - *nextTokPtr = ptr; \ - return XML_TOK_DATA_CHARS; \ - } \ - ptr += n; \ - break; - LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE - case BT_NONXML: - case BT_MALFORM: - case BT_TRAIL: - case BT_CR: - case BT_LF: - case BT_RSQB: - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - default: - ptr += MINBPC(enc); - break; - } - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; -} - -/* ptr points to character following " 1) { - size_t n = end - ptr; - if (n & (MINBPC(enc) - 1)) { - n &= ~(MINBPC(enc) - 1); - if (n == 0) - return XML_TOK_PARTIAL; - end = ptr + n; - } - } - switch (BYTE_TYPE(enc, ptr)) { - case BT_LT: - return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr); - case BT_AMP: - return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); - case BT_CR: - ptr += MINBPC(enc); - if (ptr == end) - return XML_TOK_TRAILING_CR; - if (BYTE_TYPE(enc, ptr) == BT_LF) - ptr += MINBPC(enc); - *nextTokPtr = ptr; - return XML_TOK_DATA_NEWLINE; - case BT_LF: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_DATA_NEWLINE; - case BT_RSQB: - ptr += MINBPC(enc); - if (ptr == end) - return XML_TOK_TRAILING_RSQB; - if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB)) - break; - ptr += MINBPC(enc); - if (ptr == end) - return XML_TOK_TRAILING_RSQB; - if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { - ptr -= MINBPC(enc); - break; - } - *nextTokPtr = ptr; - return XML_TOK_INVALID; - INVALID_CASES(ptr, nextTokPtr) - default: - ptr += MINBPC(enc); - break; - } - while (ptr != end) { - switch (BYTE_TYPE(enc, ptr)) { -#define LEAD_CASE(n) \ - case BT_LEAD ## n: \ - if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \ - *nextTokPtr = ptr; \ - return XML_TOK_DATA_CHARS; \ - } \ - ptr += n; \ - break; - LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE - case BT_RSQB: - if (ptr + MINBPC(enc) != end) { - if (!CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) { - ptr += MINBPC(enc); - break; - } - if (ptr + 2*MINBPC(enc) != end) { - if (!CHAR_MATCHES(enc, ptr + 2*MINBPC(enc), ASCII_GT)) { - ptr += MINBPC(enc); - break; - } - *nextTokPtr = ptr + 2*MINBPC(enc); - return XML_TOK_INVALID; - } - } - /* fall through */ - case BT_AMP: - case BT_LT: - case BT_NONXML: - case BT_MALFORM: - case BT_TRAIL: - case BT_CR: - case BT_LF: - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - default: - ptr += MINBPC(enc); - break; - } - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; -} - -/* ptr points to character following "%" */ - -static -int PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) -{ - if (ptr == end) - return XML_TOK_PARTIAL; - switch (BYTE_TYPE(enc, ptr)) { - CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) - case BT_S: case BT_LF: case BT_CR: case BT_PERCNT: - *nextTokPtr = ptr; - return XML_TOK_PERCENT; - default: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - while (ptr != end) { - switch (BYTE_TYPE(enc, ptr)) { - CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) - case BT_SEMI: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_PARAM_ENTITY_REF; - default: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - } - return XML_TOK_PARTIAL; -} - -static -int PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) -{ - if (ptr == end) - return XML_TOK_PARTIAL; - switch (BYTE_TYPE(enc, ptr)) { - CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) - default: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - while (ptr != end) { - switch (BYTE_TYPE(enc, ptr)) { - CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) - case BT_CR: case BT_LF: case BT_S: - case BT_RPAR: case BT_GT: case BT_PERCNT: case BT_VERBAR: - *nextTokPtr = ptr; - return XML_TOK_POUND_NAME; - default: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - } - return -XML_TOK_POUND_NAME; -} - -static -int PREFIX(scanLit)(int open, const ENCODING *enc, - const char *ptr, const char *end, - const char **nextTokPtr) -{ - while (ptr != end) { - int t = BYTE_TYPE(enc, ptr); - switch (t) { - INVALID_CASES(ptr, nextTokPtr) - case BT_QUOT: - case BT_APOS: - ptr += MINBPC(enc); - if (t != open) - break; - if (ptr == end) - return -XML_TOK_LITERAL; - *nextTokPtr = ptr; - switch (BYTE_TYPE(enc, ptr)) { - case BT_S: case BT_CR: case BT_LF: - case BT_GT: case BT_PERCNT: case BT_LSQB: - return XML_TOK_LITERAL; - default: - return XML_TOK_INVALID; - } - default: - ptr += MINBPC(enc); - break; - } - } - return XML_TOK_PARTIAL; -} - -static -int PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) -{ - int tok; - if (ptr == end) - return XML_TOK_NONE; - if (MINBPC(enc) > 1) { - size_t n = end - ptr; - if (n & (MINBPC(enc) - 1)) { - n &= ~(MINBPC(enc) - 1); - if (n == 0) - return XML_TOK_PARTIAL; - end = ptr + n; - } - } - switch (BYTE_TYPE(enc, ptr)) { - case BT_QUOT: - return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr); - case BT_APOS: - return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr); - case BT_LT: - { - ptr += MINBPC(enc); - if (ptr == end) - return XML_TOK_PARTIAL; - switch (BYTE_TYPE(enc, ptr)) { - case BT_EXCL: - return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr); - case BT_QUEST: - return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr); - case BT_NMSTRT: - case BT_HEX: - case BT_NONASCII: - case BT_LEAD2: - case BT_LEAD3: - case BT_LEAD4: - *nextTokPtr = ptr - MINBPC(enc); - return XML_TOK_INSTANCE_START; - } - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - case BT_CR: - if (ptr + MINBPC(enc) == end) - return -XML_TOK_PROLOG_S; - /* fall through */ - case BT_S: case BT_LF: - for (;;) { - ptr += MINBPC(enc); - if (ptr == end) - break; - switch (BYTE_TYPE(enc, ptr)) { - case BT_S: case BT_LF: - break; - case BT_CR: - /* don't split CR/LF pair */ - if (ptr + MINBPC(enc) != end) - break; - /* fall through */ - default: - *nextTokPtr = ptr; - return XML_TOK_PROLOG_S; - } - } - *nextTokPtr = ptr; - return XML_TOK_PROLOG_S; - case BT_PERCNT: - return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr); - case BT_COMMA: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_COMMA; - case BT_LSQB: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_OPEN_BRACKET; - case BT_RSQB: - ptr += MINBPC(enc); - if (ptr == end) - return -XML_TOK_CLOSE_BRACKET; - if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) { - if (ptr + MINBPC(enc) == end) - return XML_TOK_PARTIAL; - if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) { - *nextTokPtr = ptr + 2*MINBPC(enc); - return XML_TOK_COND_SECT_CLOSE; - } - } - *nextTokPtr = ptr; - return XML_TOK_CLOSE_BRACKET; - case BT_LPAR: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_OPEN_PAREN; - case BT_RPAR: - ptr += MINBPC(enc); - if (ptr == end) - return -XML_TOK_CLOSE_PAREN; - switch (BYTE_TYPE(enc, ptr)) { - case BT_AST: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_CLOSE_PAREN_ASTERISK; - case BT_QUEST: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_CLOSE_PAREN_QUESTION; - case BT_PLUS: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_CLOSE_PAREN_PLUS; - case BT_CR: case BT_LF: case BT_S: - case BT_GT: case BT_COMMA: case BT_VERBAR: - case BT_RPAR: - *nextTokPtr = ptr; - return XML_TOK_CLOSE_PAREN; - } - *nextTokPtr = ptr; - return XML_TOK_INVALID; - case BT_VERBAR: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_OR; - case BT_GT: - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_DECL_CLOSE; - case BT_NUM: - return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr); -#define LEAD_CASE(n) \ - case BT_LEAD ## n: \ - if (end - ptr < n) \ - return XML_TOK_PARTIAL_CHAR; \ - if (IS_NMSTRT_CHAR(enc, ptr, n)) { \ - ptr += n; \ - tok = XML_TOK_NAME; \ - break; \ - } \ - if (IS_NAME_CHAR(enc, ptr, n)) { \ - ptr += n; \ - tok = XML_TOK_NMTOKEN; \ - break; \ - } \ - *nextTokPtr = ptr; \ - return XML_TOK_INVALID; - LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE - case BT_NMSTRT: - case BT_HEX: - tok = XML_TOK_NAME; - ptr += MINBPC(enc); - break; - case BT_DIGIT: - case BT_NAME: - case BT_MINUS: -#ifdef XML_NS - case BT_COLON: -#endif - tok = XML_TOK_NMTOKEN; - ptr += MINBPC(enc); - break; - case BT_NONASCII: - if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { - ptr += MINBPC(enc); - tok = XML_TOK_NAME; - break; - } - if (IS_NAME_CHAR_MINBPC(enc, ptr)) { - ptr += MINBPC(enc); - tok = XML_TOK_NMTOKEN; - break; - } - /* fall through */ - default: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - while (ptr != end) { - switch (BYTE_TYPE(enc, ptr)) { - CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) - case BT_GT: case BT_RPAR: case BT_COMMA: - case BT_VERBAR: case BT_LSQB: case BT_PERCNT: - case BT_S: case BT_CR: case BT_LF: - *nextTokPtr = ptr; - return tok; -#ifdef XML_NS - case BT_COLON: - ptr += MINBPC(enc); - switch (tok) { - case XML_TOK_NAME: - if (ptr == end) - return XML_TOK_PARTIAL; - tok = XML_TOK_PREFIXED_NAME; - switch (BYTE_TYPE(enc, ptr)) { - CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) - default: - tok = XML_TOK_NMTOKEN; - break; - } - break; - case XML_TOK_PREFIXED_NAME: - tok = XML_TOK_NMTOKEN; - break; - } - break; -#endif - case BT_PLUS: - if (tok == XML_TOK_NMTOKEN) { - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_NAME_PLUS; - case BT_AST: - if (tok == XML_TOK_NMTOKEN) { - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_NAME_ASTERISK; - case BT_QUEST: - if (tok == XML_TOK_NMTOKEN) { - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_NAME_QUESTION; - default: - *nextTokPtr = ptr; - return XML_TOK_INVALID; - } - } - return -tok; -} - -static -int PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) -{ - const char *start; - if (ptr == end) - return XML_TOK_NONE; - start = ptr; - while (ptr != end) { - switch (BYTE_TYPE(enc, ptr)) { -#define LEAD_CASE(n) \ - case BT_LEAD ## n: ptr += n; break; - LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE - case BT_AMP: - if (ptr == start) - return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - case BT_LT: - /* this is for inside entity references */ - *nextTokPtr = ptr; - return XML_TOK_INVALID; - case BT_LF: - if (ptr == start) { - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_DATA_NEWLINE; - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - case BT_CR: - if (ptr == start) { - ptr += MINBPC(enc); - if (ptr == end) - return XML_TOK_TRAILING_CR; - if (BYTE_TYPE(enc, ptr) == BT_LF) - ptr += MINBPC(enc); - *nextTokPtr = ptr; - return XML_TOK_DATA_NEWLINE; - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - case BT_S: - if (ptr == start) { - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_ATTRIBUTE_VALUE_S; - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - default: - ptr += MINBPC(enc); - break; - } - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; -} - -static -int PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) -{ - const char *start; - if (ptr == end) - return XML_TOK_NONE; - start = ptr; - while (ptr != end) { - switch (BYTE_TYPE(enc, ptr)) { -#define LEAD_CASE(n) \ - case BT_LEAD ## n: ptr += n; break; - LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE - case BT_AMP: - if (ptr == start) - return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - case BT_PERCNT: - if (ptr == start) { - int tok = PREFIX(scanPercent)(enc, ptr + MINBPC(enc), - end, nextTokPtr); - return (tok == XML_TOK_PERCENT) ? XML_TOK_INVALID : tok; - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - case BT_LF: - if (ptr == start) { - *nextTokPtr = ptr + MINBPC(enc); - return XML_TOK_DATA_NEWLINE; - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - case BT_CR: - if (ptr == start) { - ptr += MINBPC(enc); - if (ptr == end) - return XML_TOK_TRAILING_CR; - if (BYTE_TYPE(enc, ptr) == BT_LF) - ptr += MINBPC(enc); - *nextTokPtr = ptr; - return XML_TOK_DATA_NEWLINE; - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; - default: - ptr += MINBPC(enc); - break; - } - } - *nextTokPtr = ptr; - return XML_TOK_DATA_CHARS; -} - -#ifdef XML_DTD - -static -int PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) -{ - int level = 0; - if (MINBPC(enc) > 1) { - size_t n = end - ptr; - if (n & (MINBPC(enc) - 1)) { - n &= ~(MINBPC(enc) - 1); - end = ptr + n; - } - } - while (ptr != end) { - switch (BYTE_TYPE(enc, ptr)) { - INVALID_CASES(ptr, nextTokPtr) - case BT_LT: - if ((ptr += MINBPC(enc)) == end) - return XML_TOK_PARTIAL; - if (CHAR_MATCHES(enc, ptr, ASCII_EXCL)) { - if ((ptr += MINBPC(enc)) == end) - return XML_TOK_PARTIAL; - if (CHAR_MATCHES(enc, ptr, ASCII_LSQB)) { - ++level; - ptr += MINBPC(enc); - } - } - break; - case BT_RSQB: - if ((ptr += MINBPC(enc)) == end) - return XML_TOK_PARTIAL; - if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) { - if ((ptr += MINBPC(enc)) == end) - return XML_TOK_PARTIAL; - if (CHAR_MATCHES(enc, ptr, ASCII_GT)) { - ptr += MINBPC(enc); - if (level == 0) { - *nextTokPtr = ptr; - return XML_TOK_IGNORE_SECT; - } - --level; - } - } - break; - default: - ptr += MINBPC(enc); - break; - } - } - return XML_TOK_PARTIAL; -} - -#endif /* XML_DTD */ - -static -int PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end, - const char **badPtr) -{ - ptr += MINBPC(enc); - end -= MINBPC(enc); - for (; ptr != end; ptr += MINBPC(enc)) { - switch (BYTE_TYPE(enc, ptr)) { - case BT_DIGIT: - case BT_HEX: - case BT_MINUS: - case BT_APOS: - case BT_LPAR: - case BT_RPAR: - case BT_PLUS: - case BT_COMMA: - case BT_SOL: - case BT_EQUALS: - case BT_QUEST: - case BT_CR: - case BT_LF: - case BT_SEMI: - case BT_EXCL: - case BT_AST: - case BT_PERCNT: - case BT_NUM: -#ifdef XML_NS - case BT_COLON: -#endif - break; - case BT_S: - if (CHAR_MATCHES(enc, ptr, ASCII_TAB)) { - *badPtr = ptr; - return 0; - } - break; - case BT_NAME: - case BT_NMSTRT: - if (!(BYTE_TO_ASCII(enc, ptr) & ~0x7f)) - break; - default: - switch (BYTE_TO_ASCII(enc, ptr)) { - case 0x24: /* $ */ - case 0x40: /* @ */ - break; - default: - *badPtr = ptr; - return 0; - } - break; - } - } - return 1; -} - -/* This must only be called for a well-formed start-tag or empty element tag. -Returns the number of attributes. Pointers to the first attsMax attributes -are stored in atts. */ - -static -int PREFIX(getAtts)(const ENCODING *enc, const char *ptr, - int attsMax, ATTRIBUTE *atts) -{ - enum { other, inName, inValue } state = inName; - int nAtts = 0; - int open = 0; /* defined when state == inValue; - initialization just to shut up compilers */ - - for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) { - switch (BYTE_TYPE(enc, ptr)) { -#define START_NAME \ - if (state == other) { \ - if (nAtts < attsMax) { \ - atts[nAtts].name = ptr; \ - atts[nAtts].normalized = 1; \ - } \ - state = inName; \ - } -#define LEAD_CASE(n) \ - case BT_LEAD ## n: START_NAME ptr += (n - MINBPC(enc)); break; - LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE - case BT_NONASCII: - case BT_NMSTRT: - case BT_HEX: - START_NAME - break; -#undef START_NAME - case BT_QUOT: - if (state != inValue) { - if (nAtts < attsMax) - atts[nAtts].valuePtr = ptr + MINBPC(enc); - state = inValue; - open = BT_QUOT; - } - else if (open == BT_QUOT) { - state = other; - if (nAtts < attsMax) - atts[nAtts].valueEnd = ptr; - nAtts++; - } - break; - case BT_APOS: - if (state != inValue) { - if (nAtts < attsMax) - atts[nAtts].valuePtr = ptr + MINBPC(enc); - state = inValue; - open = BT_APOS; - } - else if (open == BT_APOS) { - state = other; - if (nAtts < attsMax) - atts[nAtts].valueEnd = ptr; - nAtts++; - } - break; - case BT_AMP: - if (nAtts < attsMax) - atts[nAtts].normalized = 0; - break; - case BT_S: - if (state == inName) - state = other; - else if (state == inValue - && nAtts < attsMax - && atts[nAtts].normalized - && (ptr == atts[nAtts].valuePtr - || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE - || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE - || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open)) - atts[nAtts].normalized = 0; - break; - case BT_CR: case BT_LF: - /* This case ensures that the first attribute name is counted - Apart from that we could just change state on the quote. */ - if (state == inName) - state = other; - else if (state == inValue && nAtts < attsMax) - atts[nAtts].normalized = 0; - break; - case BT_GT: - case BT_SOL: - if (state != inValue) - return nAtts; - break; - default: - break; - } - } - /* not reached */ -} - -static -int PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr) -{ - int result = 0; - /* skip &# */ - ptr += 2*MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_x)) { - for (ptr += MINBPC(enc); !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) { - int c = BYTE_TO_ASCII(enc, ptr); - switch (c) { - case ASCII_0: case ASCII_1: case ASCII_2: case ASCII_3: case ASCII_4: - case ASCII_5: case ASCII_6: case ASCII_7: case ASCII_8: case ASCII_9: - result <<= 4; - result |= (c - ASCII_0); - break; - case ASCII_A: case ASCII_B: case ASCII_C: case ASCII_D: case ASCII_E: case ASCII_F: - result <<= 4; - result += 10 + (c - ASCII_A); - break; - case ASCII_a: case ASCII_b: case ASCII_c: case ASCII_d: case ASCII_e: case ASCII_f: - result <<= 4; - result += 10 + (c - ASCII_a); - break; - } - if (result >= 0x110000) - return -1; - } - } - else { - for (; !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) { - int c = BYTE_TO_ASCII(enc, ptr); - result *= 10; - result += (c - ASCII_0); - if (result >= 0x110000) - return -1; - } - } - return checkCharRefNumber(result); -} - -static -int PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr, const char *end) -{ - switch ((end - ptr)/MINBPC(enc)) { - case 2: - if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) { - switch (BYTE_TO_ASCII(enc, ptr)) { - case ASCII_l: - return ASCII_LT; - case ASCII_g: - return ASCII_GT; - } - } - break; - case 3: - if (CHAR_MATCHES(enc, ptr, ASCII_a)) { - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_m)) { - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_p)) - return ASCII_AMP; - } - } - break; - case 4: - switch (BYTE_TO_ASCII(enc, ptr)) { - case ASCII_q: - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_u)) { - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_o)) { - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_t)) - return ASCII_QUOT; - } - } - break; - case ASCII_a: - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_p)) { - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_o)) { - ptr += MINBPC(enc); - if (CHAR_MATCHES(enc, ptr, ASCII_s)) - return ASCII_APOS; - } - } - break; - } - } - return 0; -} - -static -int PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2) -{ - for (;;) { - switch (BYTE_TYPE(enc, ptr1)) { -#define LEAD_CASE(n) \ - case BT_LEAD ## n: \ - if (*ptr1++ != *ptr2++) \ - return 0; - LEAD_CASE(4) LEAD_CASE(3) LEAD_CASE(2) -#undef LEAD_CASE - /* fall through */ - if (*ptr1++ != *ptr2++) - return 0; - break; - case BT_NONASCII: - case BT_NMSTRT: -#ifdef XML_NS - case BT_COLON: -#endif - case BT_HEX: - case BT_DIGIT: - case BT_NAME: - case BT_MINUS: - if (*ptr2++ != *ptr1++) - return 0; - if (MINBPC(enc) > 1) { - if (*ptr2++ != *ptr1++) - return 0; - if (MINBPC(enc) > 2) { - if (*ptr2++ != *ptr1++) - return 0; - if (MINBPC(enc) > 3) { - if (*ptr2++ != *ptr1++) - return 0; - } - } - } - break; - default: - if (MINBPC(enc) == 1 && *ptr1 == *ptr2) - return 1; - switch (BYTE_TYPE(enc, ptr2)) { - case BT_LEAD2: - case BT_LEAD3: - case BT_LEAD4: - case BT_NONASCII: - case BT_NMSTRT: -#ifdef XML_NS - case BT_COLON: -#endif - case BT_HEX: - case BT_DIGIT: - case BT_NAME: - case BT_MINUS: - return 0; - default: - return 1; - } - } - } - /* not reached */ -} - -static -int PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1, - const char *end1, const char *ptr2) -{ - for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) { - if (ptr1 == end1) - return 0; - if (!CHAR_MATCHES(enc, ptr1, *ptr2)) - return 0; - } - return ptr1 == end1; -} - -static -int PREFIX(nameLength)(const ENCODING *enc, const char *ptr) -{ - const char *start = ptr; - for (;;) { - switch (BYTE_TYPE(enc, ptr)) { -#define LEAD_CASE(n) \ - case BT_LEAD ## n: ptr += n; break; - LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE - case BT_NONASCII: - case BT_NMSTRT: -#ifdef XML_NS - case BT_COLON: -#endif - case BT_HEX: - case BT_DIGIT: - case BT_NAME: - case BT_MINUS: - ptr += MINBPC(enc); - break; - default: - return ptr - start; - } - } -} - -static -const char *PREFIX(skipS)(const ENCODING *enc, const char *ptr) -{ - for (;;) { - switch (BYTE_TYPE(enc, ptr)) { - case BT_LF: - case BT_CR: - case BT_S: - ptr += MINBPC(enc); - break; - default: - return ptr; - } - } -} - -static -void PREFIX(updatePosition)(const ENCODING *enc, - const char *ptr, - const char *end, - POSITION *pos) -{ - while (ptr != end) { - switch (BYTE_TYPE(enc, ptr)) { -#define LEAD_CASE(n) \ - case BT_LEAD ## n: \ - ptr += n; \ - break; - LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE - case BT_LF: - pos->columnNumber = (unsigned)-1; - pos->lineNumber++; - ptr += MINBPC(enc); - break; - case BT_CR: - pos->lineNumber++; - ptr += MINBPC(enc); - if (ptr != end && BYTE_TYPE(enc, ptr) == BT_LF) - ptr += MINBPC(enc); - pos->columnNumber = (unsigned)-1; - break; - default: - ptr += MINBPC(enc); - break; - } - pos->columnNumber++; - } -} - -#undef DO_LEAD_CASE -#undef MULTIBYTE_CASES -#undef INVALID_CASES -#undef CHECK_NAME_CASE -#undef CHECK_NAME_CASES -#undef CHECK_NMSTRT_CASE -#undef CHECK_NMSTRT_CASES diff --git a/Build/source/libs/expat/lib/xmltok_impl.h b/Build/source/libs/expat/lib/xmltok_impl.h deleted file mode 100644 index da0ea60a657..00000000000 --- a/Build/source/libs/expat/lib/xmltok_impl.h +++ /dev/null @@ -1,46 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -enum { - BT_NONXML, - BT_MALFORM, - BT_LT, - BT_AMP, - BT_RSQB, - BT_LEAD2, - BT_LEAD3, - BT_LEAD4, - BT_TRAIL, - BT_CR, - BT_LF, - BT_GT, - BT_QUOT, - BT_APOS, - BT_EQUALS, - BT_QUEST, - BT_EXCL, - BT_SOL, - BT_SEMI, - BT_NUM, - BT_LSQB, - BT_S, - BT_NMSTRT, - BT_COLON, - BT_HEX, - BT_DIGIT, - BT_NAME, - BT_MINUS, - BT_OTHER, /* known not to be a name or name start character */ - BT_NONASCII, /* might be a name or name start character */ - BT_PERCNT, - BT_LPAR, - BT_RPAR, - BT_AST, - BT_PLUS, - BT_COMMA, - BT_VERBAR -}; - -#include diff --git a/Build/source/libs/expat/lib/xmltok_ns.c b/Build/source/libs/expat/lib/xmltok_ns.c deleted file mode 100644 index 21859738ac2..00000000000 --- a/Build/source/libs/expat/lib/xmltok_ns.c +++ /dev/null @@ -1,98 +0,0 @@ -const ENCODING *NS(XmlGetUtf8InternalEncoding)(void) -{ - return &ns(internal_utf8_encoding).enc; -} - -const ENCODING *NS(XmlGetUtf16InternalEncoding)(void) -{ -#if XML_BYTE_ORDER == 12 - return &ns(internal_little2_encoding).enc; -#elif XML_BYTE_ORDER == 21 - return &ns(internal_big2_encoding).enc; -#else - const short n = 1; - return *(const char *)&n ? &ns(internal_little2_encoding).enc : &ns(internal_big2_encoding).enc; -#endif -} - -static -const ENCODING *NS(encodings)[] = { - &ns(latin1_encoding).enc, - &ns(ascii_encoding).enc, - &ns(utf8_encoding).enc, - &ns(big2_encoding).enc, - &ns(big2_encoding).enc, - &ns(little2_encoding).enc, - &ns(utf8_encoding).enc /* NO_ENC */ -}; - -static -int NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) -{ - return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE, ptr, end, nextTokPtr); -} - -static -int NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end, - const char **nextTokPtr) -{ - return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_CONTENT_STATE, ptr, end, nextTokPtr); -} - -int NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, const char *name) -{ - int i = getEncodingIndex(name); - if (i == UNKNOWN_ENC) - return 0; - SET_INIT_ENC_INDEX(p, i); - p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog); - p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent); - p->initEnc.updatePosition = initUpdatePosition; - p->encPtr = encPtr; - *encPtr = &(p->initEnc); - return 1; -} - -static -const ENCODING *NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) -{ -#define ENCODING_MAX 128 - char buf[ENCODING_MAX]; - char *p = buf; - int i; - XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1); - if (ptr != end) - return 0; - *p = 0; - if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2) - return enc; - i = getEncodingIndex(buf); - if (i == UNKNOWN_ENC) - return 0; - return NS(encodings)[i]; -} - -int NS(XmlParseXmlDecl)(int isGeneralTextEntity, - const ENCODING *enc, - const char *ptr, - const char *end, - const char **badPtr, - const char **versionPtr, - const char **versionEndPtr, - const char **encodingName, - const ENCODING **encoding, - int *standalone) -{ - return doParseXmlDecl(NS(findEncoding), - isGeneralTextEntity, - enc, - ptr, - end, - badPtr, - versionPtr, - versionEndPtr, - encodingName, - encoding, - standalone); -} diff --git a/Build/source/libs/expat/xmlwf/Makefile.in b/Build/source/libs/expat/xmlwf/Makefile.in deleted file mode 100644 index d7c4cb07fac..00000000000 --- a/Build/source/libs/expat/xmlwf/Makefile.in +++ /dev/null @@ -1,15 +0,0 @@ -LIBDIR= ../lib/.libs -INCDIR= ../lib - -LDFLAGS= @LDFLAGS@ -CFLAGS= @CFLAGS@ -I$(INCDIR) - -FILEMAP_OBJ= @FILEMAP_OBJ@ -OBJS= xmlwf.o xmlfile.o codepage.o $(FILEMAP_OBJ) -LIBS= -L$(LIBDIR) -lexpat - -xmlwf: $(OBJS) - $(CC) -o xmlwf $(LDFLAGS) $(OBJS) $(LIBS) - -clean: - rm -f xmlwf core *.o \ No newline at end of file diff --git a/Build/source/libs/expat/xmlwf/codepage.c b/Build/source/libs/expat/xmlwf/codepage.c deleted file mode 100644 index 4ab1344e70e..00000000000 --- a/Build/source/libs/expat/xmlwf/codepage.c +++ /dev/null @@ -1,65 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -#include "codepage.h" - -#ifdef WIN32 -#define STRICT 1 -#define WIN32_LEAN_AND_MEAN 1 - -#include - -int codepageMap(int cp, int *map) -{ - int i; - CPINFO info; - if (!GetCPInfo(cp, &info) || info.MaxCharSize > 2) - return 0; - for (i = 0; i < 256; i++) - map[i] = -1; - if (info.MaxCharSize > 1) { - for (i = 0; i < MAX_LEADBYTES; i++) { - int j, lim; - if (info.LeadByte[i] == 0 && info.LeadByte[i + 1] == 0) - break; - lim = info.LeadByte[i + 1]; - for (j = info.LeadByte[i]; j < lim; j++) - map[j] = -2; - } - } - for (i = 0; i < 256; i++) { - if (map[i] == -1) { - char c = i; - unsigned short n; - if (MultiByteToWideChar(cp, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, - &c, 1, &n, 1) == 1) - map[i] = n; - } - } - return 1; -} - -int codepageConvert(int cp, const char *p) -{ - unsigned short c; - if (MultiByteToWideChar(cp, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, - p, 2, &c, 1) == 1) - return c; - return -1; -} - -#else /* not WIN32 */ - -int codepageMap(int cp, int *map) -{ - return 0; -} - -int codepageConvert(int cp, const char *p) -{ - return -1; -} - -#endif /* not WIN32 */ diff --git a/Build/source/libs/expat/xmlwf/codepage.h b/Build/source/libs/expat/xmlwf/codepage.h deleted file mode 100644 index b36a5502df7..00000000000 --- a/Build/source/libs/expat/xmlwf/codepage.h +++ /dev/null @@ -1,7 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -int codepageMap(int cp, int *map); -int codepageConvert(int cp, const char *p); diff --git a/Build/source/libs/expat/xmlwf/ct.c b/Build/source/libs/expat/xmlwf/ct.c deleted file mode 100644 index 098699d0b0f..00000000000 --- a/Build/source/libs/expat/xmlwf/ct.c +++ /dev/null @@ -1,145 +0,0 @@ -#define CHARSET_MAX 41 - -static -const char *getTok(const char **pp) -{ - enum { inAtom, inString, init, inComment }; - int state = init; - const char *tokStart = 0; - for (;;) { - switch (**pp) { - case '\0': - return 0; - case ' ': - case '\r': - case '\t': - case '\n': - if (state == inAtom) - return tokStart; - break; - case '(': - if (state == inAtom) - return tokStart; - if (state != inString) - state++; - break; - case ')': - if (state > init) - --state; - else if (state != inString) - return 0; - break; - case ';': - case '/': - case '=': - if (state == inAtom) - return tokStart; - if (state == init) - return (*pp)++; - break; - case '\\': - ++*pp; - if (**pp == '\0') - return 0; - break; - case '"': - switch (state) { - case inString: - ++*pp; - return tokStart; - case inAtom: - return tokStart; - case init: - tokStart = *pp; - state = inString; - break; - } - break; - default: - if (state == init) { - tokStart = *pp; - state = inAtom; - } - break; - } - ++*pp; - } - /* not reached */ -} - -/* key must be lowercase ASCII */ - -static -int matchkey(const char *start, const char *end, const char *key) -{ - if (!start) - return 0; - for (; start != end; start++, key++) - if (*start != *key && *start != 'A' + (*key - 'a')) - return 0; - return *key == '\0'; -} - -void getXMLCharset(const char *buf, char *charset) -{ - const char *next, *p; - - charset[0] = '\0'; - next = buf; - p = getTok(&next); - if (matchkey(p, next, "text")) - strcpy(charset, "us-ascii"); - else if (!matchkey(p, next, "application")) - return; - p = getTok(&next); - if (!p || *p != '/') - return; - p = getTok(&next); - if (matchkey(p, next, "xml")) - isXml = 1; - p = getTok(&next); - while (p) { - if (*p == ';') { - p = getTok(&next); - if (matchkey(p, next, "charset")) { - p = getTok(&next); - if (p && *p == '=') { - p = getTok(&next); - if (p) { - char *s = charset; - if (*p == '"') { - while (++p != next - 1) { - if (*p == '\\') - ++p; - if (s == charset + CHARSET_MAX - 1) { - charset[0] = '\0'; - break; - } - *s++ = *p; - } - *s++ = '\0'; - } - else { - if (next - p > CHARSET_MAX - 1) - break; - while (p != next) - *s++ = *p++; - *s = 0; - break; - } - } - } - } - } - else - p = getTok(&next); - } -} - -int main(int argc, char **argv) -{ - char buf[CHARSET_MAX]; - getXMLCharset(argv[1], buf); - printf("charset = \"%s\"\n", buf); - return 0; -} diff --git a/Build/source/libs/expat/xmlwf/filemap.h b/Build/source/libs/expat/xmlwf/filemap.h deleted file mode 100644 index ecf01751daf..00000000000 --- a/Build/source/libs/expat/xmlwf/filemap.h +++ /dev/null @@ -1,17 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - - -#include - -#ifdef XML_UNICODE -int filemap(const wchar_t *name, - void (*processor)(const void *, size_t, const wchar_t *, void *arg), - void *arg); -#else -int filemap(const char *name, - void (*processor)(const void *, size_t, const char *, void *arg), - void *arg); -#endif diff --git a/Build/source/libs/expat/xmlwf/readfilemap.c b/Build/source/libs/expat/xmlwf/readfilemap.c deleted file mode 100644 index 7829f612b6c..00000000000 --- a/Build/source/libs/expat/xmlwf/readfilemap.c +++ /dev/null @@ -1,74 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -#include -#include -#include -#include -#include - -#ifndef S_ISREG -#ifndef S_IFREG -#define S_IFREG _S_IFREG -#endif -#ifndef S_IFMT -#define S_IFMT _S_IFMT -#endif -#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) -#endif /* not S_ISREG */ - -#ifndef O_BINARY -#ifdef _O_BINARY -#define O_BINARY _O_BINARY -#else -#define O_BINARY 0 -#endif -#endif - -int filemap(const char *name, - void (*processor)(const void *, size_t, const char *, void *arg), - void *arg) -{ - size_t nbytes; - int fd; - int n; - struct stat sb; - void *p; - - fd = open(name, O_RDONLY|O_BINARY); - if (fd < 0) { - perror(name); - return 0; - } - if (fstat(fd, &sb) < 0) { - perror(name); - return 0; - } - if (!S_ISREG(sb.st_mode)) { - fprintf(stderr, "%s: not a regular file\n", name); - return 0; - } - nbytes = sb.st_size; - p = malloc(nbytes); - if (!p) { - fprintf(stderr, "%s: out of memory\n", name); - return 0; - } - n = read(fd, p, nbytes); - if (n < 0) { - perror(name); - close(fd); - return 0; - } - if (n != nbytes) { - fprintf(stderr, "%s: read unexpected number of bytes\n", name); - close(fd); - return 0; - } - processor(p, nbytes, name, arg); - free(p); - close(fd); - return 1; -} diff --git a/Build/source/libs/expat/xmlwf/unixfilemap.c b/Build/source/libs/expat/xmlwf/unixfilemap.c deleted file mode 100644 index 4016dd05397..00000000000 --- a/Build/source/libs/expat/xmlwf/unixfilemap.c +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -#include -#include -#include -#include -#include -#include -#include - -#ifndef MAP_FILE -#define MAP_FILE 0 -#endif - -#include "filemap.h" - -int filemap(const char *name, - void (*processor)(const void *, size_t, const char *, void *arg), - void *arg) -{ - int fd; - size_t nbytes; - struct stat sb; - void *p; - - fd = open(name, O_RDONLY); - if (fd < 0) { - perror(name); - return 0; - } - if (fstat(fd, &sb) < 0) { - perror(name); - close(fd); - return 0; - } - if (!S_ISREG(sb.st_mode)) { - close(fd); - fprintf(stderr, "%s: not a regular file\n", name); - return 0; - } - - nbytes = sb.st_size; - p = (void *)mmap((caddr_t)0, (size_t)nbytes, PROT_READ, - MAP_FILE|MAP_PRIVATE, fd, (off_t)0); - if (p == (void *)-1) { - perror(name); - close(fd); - return 0; - } - processor(p, nbytes, name, arg); - munmap((caddr_t)p, nbytes); - close(fd); - return 1; -} diff --git a/Build/source/libs/expat/xmlwf/wfcheck.c b/Build/source/libs/expat/xmlwf/wfcheck.c deleted file mode 100644 index c18abd290bd..00000000000 --- a/Build/source/libs/expat/xmlwf/wfcheck.c +++ /dev/null @@ -1,953 +0,0 @@ -#include -#include - -#include "wfcheck.h" -#include "hashtable.h" - -#include "xmltok.h" -#include "xmlrole.h" - -typedef struct { - const char *name; - const char *textPtr; - size_t textLen; - const char *docTextPtr; - const char *systemId; - const char *publicId; - const char *notation; - char open; - char wfInContent; - char wfInAttribute; - char magic; -} ENTITY; - -#define INIT_BLOCK_SIZE 1024 - -typedef struct block { - struct block *next; - char s[1]; -} BLOCK; - -typedef struct { - BLOCK *blocks; - const char *end; - char *ptr; - char *start; -} STRING_POOL; - -typedef struct { - HASH_TABLE generalEntities; - HASH_TABLE paramEntities; - STRING_POOL pool; - int containsRef; - int standalone; - char *groupConnector; - size_t groupSize; -} DTD; - -typedef struct { - DTD dtd; - size_t stackSize; - const char **startName; - int attsSize; - ATTRIBUTE *atts; -} CONTEXT; - -static void poolInit(STRING_POOL *); -static void poolDestroy(STRING_POOL *); -static const char *poolAppend(STRING_POOL *pool, const ENCODING *enc, - const char *ptr, const char *end); -static const char *poolStoreString(STRING_POOL *pool, const ENCODING *enc, - const char *ptr, const char *end); -static int poolGrow(STRING_POOL *); -static int dtdInit(DTD *); -static void dtdDestroy(DTD *); -static int contextInit(CONTEXT *); -static void contextDestroy(CONTEXT *); - -#define poolStart(pool) ((pool)->start) -#define poolDiscard(pool) ((pool)->ptr = (pool)->start) -#define poolFinish(pool) ((pool)->start = (pool)->ptr) - -static enum WfCheckResult -checkProlog(DTD *, const char *s, const char *end, const char **, const ENCODING **enc); -static enum WfCheckResult -checkContent(size_t level, CONTEXT *context, const ENCODING *enc, - const char *s, const char *end, const char **badPtr); -static enum WfCheckResult -checkGeneralTextEntity(CONTEXT *context, - const char *s, const char *end, - const char **nextPtr, - const ENCODING **enc); -static enum WfCheckResult -checkAttributeValue(DTD *, const ENCODING *, const char *, const char *, const char **); -static enum WfCheckResult -checkAttributeUniqueness(CONTEXT *context, const ENCODING *enc, int nAtts, - const char **badPtr); -static enum WfCheckResult -checkParsedEntities(CONTEXT *context, const char **badPtr); - -static -enum WfCheckResult storeEntity(DTD *dtd, - const ENCODING *enc, - int isParam, - const char *entityNamePtr, - const char *entityNameEnd, - const char *entityTextPtr, - const char *entityTextEnd, - const char **badPtr); - - -enum WfCheckResult -wfCheck(enum EntityType entityType, const char *s, size_t n, - const char **badPtr, unsigned long *badLine, unsigned long *badCol) -{ - CONTEXT context; - const ENCODING *enc; - const char *start = s; - const char *end = s + n; - const char *next = 0; - enum WfCheckResult result; - - if (!contextInit(&context)) { - contextDestroy(&context); - return noMemory; - } - if (entityType == documentEntity) { - result = checkProlog(&context.dtd, s, end, &next, &enc); - s = next; - if (!result) { - result = checkParsedEntities(&context, &next); - s = next; - if (!result) { - result = checkContent(0, &context, enc, s, end, &next); - s = next; - } - } - } - else { - result = checkGeneralTextEntity(&context, s, end, &next, &enc); - s = next; - } - if (result && s) { - POSITION pos; - memset(&pos, 0, sizeof(POSITION)); - XmlUpdatePosition(enc, start, s, &pos); - *badPtr = s; - *badLine = pos.lineNumber; - *badCol = pos.columnNumber; - } - contextDestroy(&context); - return result; -} - -static -int contextInit(CONTEXT *p) -{ - p->stackSize = 1024; - p->startName = malloc(p->stackSize * sizeof(char *)); - p->attsSize = 1024; - p->atts = malloc(p->attsSize * sizeof(ATTRIBUTE)); - return dtdInit(&(p->dtd)) && p->atts && p->startName; -} - -static -void contextDestroy(CONTEXT *p) -{ - dtdDestroy(&(p->dtd)); - free((void *)p->startName); - free((void *)p->atts); -} - -static enum WfCheckResult -checkContent(size_t level, CONTEXT *context, const ENCODING *enc, - const char *s, const char *end, const char **badPtr) -{ - size_t startLevel = level; - const char *next; - int tok = XmlContentTok(enc, s, end, &next); - for (;;) { - switch (tok) { - case XML_TOK_TRAILING_CR: - case XML_TOK_NONE: - if (startLevel > 0) { - if (level != startLevel) { - *badPtr = s; - return asyncEntity; - } - return wellFormed; - } - *badPtr = s; - return noElements; - case XML_TOK_INVALID: - *badPtr = next; - return invalidToken; - case XML_TOK_PARTIAL: - *badPtr = s; - return unclosedToken; - case XML_TOK_PARTIAL_CHAR: - *badPtr = s; - return partialChar; - case XML_TOK_EMPTY_ELEMENT_NO_ATTS: - break; - case XML_TOK_ENTITY_REF: - { - const char *name = poolStoreString(&context->dtd.pool, enc, - s + enc->minBytesPerChar, - next - enc->minBytesPerChar); - ENTITY *entity = (ENTITY *)lookup(&context->dtd.generalEntities, name, 0); - poolDiscard(&context->dtd.pool); - if (!entity) { - if (!context->dtd.containsRef || context->dtd.standalone) { - *badPtr = s; - return undefinedEntity; - } - break; - } - if (entity->wfInContent) - break; - if (entity->open) { - *badPtr = s; - return recursiveEntityRef; - } - if (entity->notation) { - *badPtr = s; - return binaryEntityRef; - } - if (entity) { - if (entity->textPtr) { - enum WfCheckResult result; - const ENCODING *internalEnc = XmlGetInternalEncoding(XML_UTF8_ENCODING); - entity->open = 1; - result = checkContent(level, context, internalEnc, - entity->textPtr, entity->textPtr + entity->textLen, - badPtr); - entity->open = 0; - if (result && *badPtr) { - *badPtr = s; - return result; - } - entity->wfInContent = 1; - } - } - break; - } - case XML_TOK_START_TAG_NO_ATTS: - if (level == context->stackSize) { - context->startName - = realloc((void *)context->startName, (context->stackSize *= 2) * sizeof(char *)); - if (!context->startName) - return noMemory; - } - context->startName[level++] = s + enc->minBytesPerChar; - break; - case XML_TOK_START_TAG_WITH_ATTS: - if (level == context->stackSize) { - context->startName = realloc((void *)context->startName, (context->stackSize *= 2) * sizeof(char *)); - if (!context->startName) - return noMemory; - } - context->startName[level++] = s + enc->minBytesPerChar; - /* fall through */ - case XML_TOK_EMPTY_ELEMENT_WITH_ATTS: - { - int i; - int n = XmlGetAttributes(enc, s, context->attsSize, context->atts); - if (n > context->attsSize) { - context->attsSize = 2*n; - context->atts = realloc((void *)context->atts, context->attsSize * sizeof(ATTRIBUTE)); - if (!context->atts) - return noMemory; - XmlGetAttributes(enc, s, n, context->atts); - } - for (i = 0; i < n; i++) { - if (!context->atts[i].normalized) { - enum WfCheckResult result - = checkAttributeValue(&context->dtd, enc, - context->atts[i].valuePtr, - context->atts[i].valueEnd, - badPtr); - if (result) - return result; - } - } - if (i > 1) { - enum WfCheckResult result = checkAttributeUniqueness(context, enc, n, badPtr); - if (result) - return result; - } - } - break; - case XML_TOK_END_TAG: - if (level == startLevel) { - *badPtr = s; - return asyncEntity; - } - --level; - if (!XmlSameName(enc, context->startName[level], s + enc->minBytesPerChar * 2)) { - *badPtr = s; - return tagMismatch; - } - break; - case XML_TOK_CHAR_REF: - if (XmlCharRefNumber(enc, s) < 0) { - *badPtr = s; - return badCharRef; - } - break; - case XML_TOK_XML_DECL: - *badPtr = s; - return misplacedXmlPi; - } - s = next; - if (level == 0) { - do { - tok = XmlPrologTok(enc, s, end, &next); - switch (tok) { - case XML_TOK_TRAILING_CR: - case XML_TOK_NONE: - return wellFormed; - case XML_TOK_PROLOG_S: - case XML_TOK_COMMENT: - case XML_TOK_PI: - s = next; - break; - default: - if (tok > 0) { - *badPtr = s; - return junkAfterDocElement; - } - break; - } - } while (tok > 0); - } - else - tok = XmlContentTok(enc, s, end, &next); - } - /* not reached */ -} - -static -int attcmp(const void *p1, const void *p2) -{ - const ATTRIBUTE *a1 = p1; - const ATTRIBUTE *a2 = p2; - size_t n1 = a1->valuePtr - a1->name; - size_t n2 = a2->valuePtr - a2->name; - - if (n1 == n2) { - int n = memcmp(a1->name, a2->name, n1); - if (n) - return n; - /* Sort identical attribute names by position, so that we always - report the first duplicate attribute. */ - if (a1->name < a2->name) - return -1; - else if (a1->name > a2->name) - return 1; - else - return 0; - } - else if (n1 < n2) - return -1; - else - return 1; -} - -/* Note that this trashes the attribute values. */ - -static enum WfCheckResult -checkAttributeUniqueness(CONTEXT *context, const ENCODING *enc, int nAtts, - const char **badPtr) -{ -#define QSORT_MIN_ATTS 10 - if (nAtts < QSORT_MIN_ATTS) { - int i; - for (i = 1; i < nAtts; i++) { - int j; - for (j = 0; j < i; j++) { - if (XmlSameName(enc, context->atts[i].name, context->atts[j].name)) { - *badPtr = context->atts[i].name; - return duplicateAttribute; - } - } - } - } - else { - int i; - const char *dup = 0; - /* Store the end of the name in valuePtr */ - for (i = 0; i < nAtts; i++) { - ATTRIBUTE *a = context->atts + i; - a->valuePtr = a->name + XmlNameLength(enc, a->name); - } - qsort(context->atts, nAtts, sizeof(ATTRIBUTE), attcmp); - for (i = 1; i < nAtts; i++) { - ATTRIBUTE *a = context->atts + i; - if (XmlSameName(enc, a->name, a[-1].name)) { - if (!dup || a->name < dup) - dup = a->name; - } - } - if (dup) { - *badPtr = dup; - return duplicateAttribute; - } - } - return wellFormed; -} - -static enum WfCheckResult -checkProlog(DTD *dtd, const char *s, const char *end, - const char **nextPtr, const ENCODING **enc) -{ - const char *entityNamePtr, *entityNameEnd; - int entityIsParam; - PROLOG_STATE state; - ENTITY *entity; - INIT_ENCODING initEnc; - XmlInitEncoding(&initEnc, enc); - XmlPrologStateInit(&state); - for (;;) { - const char *next; - int tok = XmlPrologTok(*enc, s, end, &next); - switch (XmlTokenRole(&state, tok, s, next, *enc)) { - case XML_ROLE_XML_DECL: - { - const char *encodingName = 0; - const ENCODING *encoding = 0; - const char *version; - int standalone = -1; - if (!XmlParseXmlDecl(0, - *enc, - s, - next, - nextPtr, - &version, - &encodingName, - &encoding, - &standalone)) - return syntaxError; - if (encoding) { - if (encoding->minBytesPerChar != (*enc)->minBytesPerChar) { - *nextPtr = encodingName; - return incorrectEncoding; - } - *enc = encoding; - } - else if (encodingName) { - *nextPtr = encodingName; - return unknownEncoding; - } - if (standalone == 1) - dtd->standalone = 1; - break; - } - case XML_ROLE_DOCTYPE_SYSTEM_ID: - dtd->containsRef = 1; - break; - case XML_ROLE_DOCTYPE_PUBLIC_ID: - case XML_ROLE_ENTITY_PUBLIC_ID: - case XML_ROLE_NOTATION_PUBLIC_ID: - if (!XmlIsPublicId(*enc, s, next, nextPtr)) - return syntaxError; - break; - case XML_ROLE_INSTANCE_START: - *nextPtr = s; - return wellFormed; - case XML_ROLE_DEFAULT_ATTRIBUTE_VALUE: - case XML_ROLE_FIXED_ATTRIBUTE_VALUE: - { - const char *tem = 0; - enum WfCheckResult result - = checkAttributeValue(dtd, *enc, s + (*enc)->minBytesPerChar, - next - (*enc)->minBytesPerChar, - &tem); - if (result) { - if (tem) - *nextPtr = tem; - return result; - } - break; - } - case XML_ROLE_ENTITY_VALUE: - { - enum WfCheckResult result - = storeEntity(dtd, - *enc, - entityIsParam, - entityNamePtr, - entityNameEnd, - s, - next, - nextPtr); - if (result != wellFormed) - return result; - } - break; - case XML_ROLE_ENTITY_SYSTEM_ID: - { - const char *name = poolStoreString(&dtd->pool, *enc, entityNamePtr, entityNameEnd); - entity = (ENTITY *)lookup(entityIsParam ? &dtd->paramEntities : &dtd->generalEntities, - name, sizeof(ENTITY)); - if (entity->name != name) { - poolDiscard(&dtd->pool); - entity = 0; - } - else { - poolFinish(&dtd->pool); - entity->systemId = poolStoreString(&dtd->pool, *enc, - s + (*enc)->minBytesPerChar, - next - (*enc)->minBytesPerChar); - poolFinish(&dtd->pool); - } - } - break; - case XML_ROLE_PARAM_ENTITY_REF: - { - const char *name = poolStoreString(&dtd->pool, *enc, - s + (*enc)->minBytesPerChar, - next - (*enc)->minBytesPerChar); - ENTITY *entity = (ENTITY *)lookup(&dtd->paramEntities, name, 0); - poolDiscard(&dtd->pool); - if (!entity) { - if (!dtd->containsRef || dtd->standalone) { - *nextPtr = s; - return undefinedEntity; - } - } - } - break; - case XML_ROLE_ENTITY_NOTATION_NAME: - if (entity) { - entity->notation = poolStoreString(&dtd->pool, *enc, s, next); - poolFinish(&dtd->pool); - } - break; - case XML_ROLE_GENERAL_ENTITY_NAME: - entityNamePtr = s; - entityNameEnd = next; - entityIsParam = 0; - break; - case XML_ROLE_PARAM_ENTITY_NAME: - entityNamePtr = s; - entityNameEnd = next; - entityIsParam = 1; - break; - case XML_ROLE_ERROR: - *nextPtr = s; - switch (tok) { - case XML_TOK_PARAM_ENTITY_REF: - return paramEntityRef; - case XML_TOK_INVALID: - *nextPtr = next; - return invalidToken; - case XML_TOK_NONE: - return noElements; - case XML_TOK_PARTIAL: - return unclosedToken; - case XML_TOK_PARTIAL_CHAR: - return partialChar; - case XML_TOK_TRAILING_CR: - *nextPtr = s + (*enc)->minBytesPerChar; - return noElements; - case XML_TOK_XML_DECL: - return misplacedXmlPi; - default: - return syntaxError; - } - case XML_ROLE_GROUP_OPEN: - if (state.level >= dtd->groupSize) { - if (dtd->groupSize) - dtd->groupConnector = realloc(dtd->groupConnector, dtd->groupSize *= 2); - else - dtd->groupConnector = malloc(dtd->groupSize = 32); - if (!dtd->groupConnector) - return noMemory; - } - dtd->groupConnector[state.level] = 0; - break; - case XML_ROLE_GROUP_SEQUENCE: - if (dtd->groupConnector[state.level] == '|') { - *nextPtr = s; - return syntaxError; - } - dtd->groupConnector[state.level] = ','; - break; - case XML_ROLE_GROUP_CHOICE: - if (dtd->groupConnector[state.level] == ',') { - *nextPtr = s; - return syntaxError; - } - dtd->groupConnector[state.level] = '|'; - break; - case XML_ROLE_NONE: - if (tok == XML_TOK_PARAM_ENTITY_REF) - dtd->containsRef = 1; - break; - } - s = next; - } - /* not reached */ -} - -static enum WfCheckResult -checkParsedEntities(CONTEXT *context, const char **badPtr) -{ - HASH_TABLE_ITER iter; - hashTableIterInit(&iter, &context->dtd.generalEntities); - for (;;) { - ENTITY *entity = (ENTITY *)hashTableIterNext(&iter); - if (!entity) - break; - if (entity->textPtr && !entity->wfInContent && !entity->magic) { - enum WfCheckResult result; - const ENCODING *internalEnc = XmlGetInternalEncoding(XML_UTF8_ENCODING); - entity->open = 1; - result = checkContent(1, context, internalEnc, - entity->textPtr, entity->textPtr + entity->textLen, - badPtr); - entity->open = 0; - if (result && *badPtr) { - *badPtr = entity->docTextPtr; - return result; - } - entity->wfInContent = 1; - } - } - return wellFormed; -} - -static enum WfCheckResult -checkGeneralTextEntity(CONTEXT *context, - const char *s, const char *end, - const char **nextPtr, - const ENCODING **enc) -{ - INIT_ENCODING initEnc; - const char *next; - int tok; - - XmlInitEncoding(&initEnc, enc); - tok = XmlContentTok(*enc, s, end, &next); - - if (tok == XML_TOK_BOM) { - s = next; - tok = XmlContentTok(*enc, s, end, &next); - } - if (tok == XML_TOK_XML_DECL) { - const char *encodingName = 0; - const ENCODING *encoding = 0; - const char *version; - if (!XmlParseXmlDecl(1, - *enc, - s, - next, - nextPtr, - &version, - &encodingName, - &encoding, - 0)) - return syntaxError; - if (encoding) { - if (encoding->minBytesPerChar != (*enc)->minBytesPerChar) { - *nextPtr = encodingName; - return incorrectEncoding; - } - *enc = encoding; - } - else if (encodingName) { - *nextPtr = encodingName; - return unknownEncoding; - } - s = next; - } - context->dtd.containsRef = 1; - return checkContent(1, context, *enc, s, end, nextPtr); -} - -static enum WfCheckResult -checkAttributeValue(DTD *dtd, const ENCODING *enc, - const char *ptr, const char *end, const char **badPtr) -{ - for (;;) { - const char *next; - int tok = XmlAttributeValueTok(enc, ptr, end, &next); - switch (tok) { - case XML_TOK_TRAILING_CR: - case XML_TOK_NONE: - return wellFormed; - case XML_TOK_INVALID: - *badPtr = next; - return invalidToken; - case XML_TOK_PARTIAL: - *badPtr = ptr; - return invalidToken; - case XML_TOK_CHAR_REF: - if (XmlCharRefNumber(enc, ptr) < 0) { - *badPtr = ptr; - return badCharRef; - } - break; - case XML_TOK_DATA_CHARS: - case XML_TOK_DATA_NEWLINE: - break; - case XML_TOK_ENTITY_REF: - { - const char *name = poolStoreString(&dtd->pool, enc, - ptr + enc->minBytesPerChar, - next - enc->minBytesPerChar); - ENTITY *entity = (ENTITY *)lookup(&dtd->generalEntities, name, 0); - poolDiscard(&dtd->pool); - if (!entity) { - if (!dtd->containsRef) { - *badPtr = ptr; - return undefinedEntity; - } - break; - } - if (entity->wfInAttribute) - break; - if (entity->open) { - *badPtr = ptr; - return recursiveEntityRef; - } - if (entity->notation) { - *badPtr = ptr; - return binaryEntityRef; - } - if (entity) { - if (entity->textPtr) { - enum WfCheckResult result; - const ENCODING *internalEnc = XmlGetInternalEncoding(XML_UTF8_ENCODING); - const char *textEnd = entity->textPtr + entity->textLen; - entity->open = 1; - result = checkAttributeValue(dtd, internalEnc, entity->textPtr, textEnd, badPtr); - entity->open = 0; - if (result && *badPtr) { - *badPtr = ptr; - return result; - } - entity->wfInAttribute = 1; - } - else { - *badPtr = ptr; - return attributeExternalEntityRef; - } - } - break; - } - break; - default: - abort(); - } - ptr = next; - } - /* not reached */ -} - -static -void poolInit(STRING_POOL *pool) -{ - pool->blocks = 0; - pool->start = 0; - pool->ptr = 0; - pool->end = 0; -} - -static -void poolDestroy(STRING_POOL *pool) -{ - BLOCK *p = pool->blocks; - while (p) { - BLOCK *tem = p->next; - free(p); - p = tem; - } - pool->blocks = 0; - pool->ptr = 0; - pool->start = 0; - pool->end = 0; -} - -static -const char *poolAppend(STRING_POOL *pool, const ENCODING *enc, - const char *ptr, const char *end) -{ - for (;;) { - XmlConvert(enc, XML_UTF8_ENCODING, &ptr, end, &(pool->ptr), pool->end); - if (ptr == end) - break; - if (!poolGrow(pool)) - return 0; - } - return pool->start; -} - -static -const char *poolStoreString(STRING_POOL *pool, const ENCODING *enc, - const char *ptr, const char *end) -{ - if (!poolAppend(pool, enc, ptr, end)) - return 0; - if (pool->ptr == pool->end && !poolGrow(pool)) - return 0; - *(pool->ptr)++ = 0; - return pool->start; -} - -static -int poolGrow(STRING_POOL *pool) -{ - if (pool->blocks && pool->start == pool->blocks->s) { - size_t blockSize = (pool->end - pool->start)*2; - pool->blocks = realloc(pool->blocks, offsetof(BLOCK, s) + blockSize); - if (!pool->blocks) - return 0; - pool->ptr = pool->blocks->s + (pool->ptr - pool->start); - pool->start = pool->blocks->s; - pool->end = pool->start + blockSize; - } - else { - BLOCK *tem; - size_t blockSize = pool->end - pool->start; - if (blockSize < INIT_BLOCK_SIZE) - blockSize = INIT_BLOCK_SIZE; - else - blockSize *= 2; - tem = malloc(offsetof(BLOCK, s) + blockSize); - if (!tem) - return 0; - tem->next = pool->blocks; - pool->blocks = tem; - memcpy(tem->s, pool->start, pool->ptr - pool->start); - pool->ptr = tem->s + (pool->ptr - pool->start); - pool->start = tem->s; - pool->end = tem->s + blockSize; - } - return 1; -} - -static int dtdInit(DTD *dtd) -{ - static const char *names[] = { "lt", "amp", "gt", "quot", "apos" }; - static const char chars[] = { '<', '&', '>', '"', '\'' }; - int i; - - poolInit(&(dtd->pool)); - hashTableInit(&(dtd->generalEntities)); - for (i = 0; i < 5; i++) { - ENTITY *entity = (ENTITY *)lookup(&(dtd->generalEntities), names[i], sizeof(ENTITY)); - if (!entity) - return 0; - entity->textPtr = chars + i; - entity->textLen = 1; - entity->magic = 1; - entity->wfInContent = 1; - entity->wfInAttribute = 1; - } - hashTableInit(&(dtd->paramEntities)); - dtd->containsRef = 0; - dtd->groupSize = 0; - dtd->groupConnector = 0; - return 1; -} - -static void dtdDestroy(DTD *dtd) -{ - poolDestroy(&(dtd->pool)); - hashTableDestroy(&(dtd->generalEntities)); - hashTableDestroy(&(dtd->paramEntities)); - free(dtd->groupConnector); -} - -static -enum WfCheckResult storeEntity(DTD *dtd, - const ENCODING *enc, - int isParam, - const char *entityNamePtr, - const char *entityNameEnd, - const char *entityTextPtr, - const char *entityTextEnd, - const char **badPtr) -{ - ENTITY *entity; - const ENCODING *utf8 = XmlGetInternalEncoding(XML_UTF8_ENCODING); - STRING_POOL *pool = &(dtd->pool); - if (!poolStoreString(pool, enc, entityNamePtr, entityNameEnd)) - return noMemory; - entity = (ENTITY *)lookup(isParam ? &(dtd->paramEntities) : &(dtd->generalEntities), - pool->start, - sizeof(ENTITY)); - if (entity->name != pool->start) { - poolDiscard(pool); - entityNamePtr = 0; - } - else - poolFinish(pool); - entityTextPtr += enc->minBytesPerChar; - entityTextEnd -= enc->minBytesPerChar; - entity->docTextPtr = entityTextPtr; - for (;;) { - const char *next; - int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next); - switch (tok) { - case XML_TOK_PARAM_ENTITY_REF: - *badPtr = entityTextPtr; - return syntaxError; - case XML_TOK_NONE: - if (entityNamePtr) { - entity->textPtr = pool->start; - entity->textLen = pool->ptr - pool->start; - poolFinish(pool); - } - else - poolDiscard(pool); - return wellFormed; - case XML_TOK_ENTITY_REF: - case XML_TOK_DATA_CHARS: - if (!poolAppend(pool, enc, entityTextPtr, next)) - return noMemory; - break; - case XML_TOK_TRAILING_CR: - next = entityTextPtr + enc->minBytesPerChar; - /* fall through */ - case XML_TOK_DATA_NEWLINE: - if (pool->end == pool->ptr && !poolGrow(pool)) - return noMemory; - *(pool->ptr)++ = '\n'; - break; - case XML_TOK_CHAR_REF: - { - char buf[XML_MAX_BYTES_PER_CHAR]; - int i; - int n = XmlCharRefNumber(enc, entityTextPtr); - if (n < 0) { - *badPtr = entityTextPtr; - return badCharRef; - } - n = XmlEncode(utf8, n, buf); - if (!n) { - *badPtr = entityTextPtr; - return badCharRef; - } - for (i = 0; i < n; i++) { - if (pool->end == pool->ptr && !poolGrow(pool)) - return noMemory; - *(pool->ptr)++ = buf[i]; - } - } - break; - case XML_TOK_PARTIAL: - *badPtr = entityTextPtr; - return invalidToken; - case XML_TOK_INVALID: - *badPtr = next; - return invalidToken; - default: - abort(); - } - entityTextPtr = next; - } - /* not reached */ -} diff --git a/Build/source/libs/expat/xmlwf/wfcheck.h b/Build/source/libs/expat/xmlwf/wfcheck.h deleted file mode 100644 index ea8fe573502..00000000000 --- a/Build/source/libs/expat/xmlwf/wfcheck.h +++ /dev/null @@ -1,38 +0,0 @@ - -#include - -enum WfCheckResult { - wellFormed, - noMemory, - syntaxError, - noElements, - invalidToken, - unclosedToken, - partialChar, - tagMismatch, - duplicateAttribute, - junkAfterDocElement, - paramEntityRef, - undefinedEntity, - recursiveEntityRef, - asyncEntity, - badCharRef, - binaryEntityRef, - attributeExternalEntityRef, - misplacedXmlPi, - unknownEncoding, - incorrectEncoding -}; - -enum EntityType { - documentEntity, - generalTextEntity -}; - -enum WfCheckResult wfCheck(enum EntityType entityType, - const char *s, size_t n, - const char **errorPtr, - unsigned long *errorLineNumber, - unsigned long *errorColNumber); -const char *wfCheckMessage(enum WfCheckResult); - diff --git a/Build/source/libs/expat/xmlwf/wfcheckmessage.c b/Build/source/libs/expat/xmlwf/wfcheckmessage.c deleted file mode 100644 index 95e811f49dc..00000000000 --- a/Build/source/libs/expat/xmlwf/wfcheckmessage.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "wfcheck.h" - -const char *wfCheckMessage(enum WfCheckResult result) -{ - static const char *message[] = { - 0, - "out of memory", - "syntax error", - "no element found", - "not well-formed", - "unclosed token", - "unclosed token", - "mismatched tag", - "duplicate attribute", - "junk after document element", - "parameter entity reference not allowed within declaration in internal subset", - "undefined entity", - "recursive entity reference", - "asynchronous entity", - "reference to invalid character number", - "reference to binary entity", - "reference to external entity in attribute", - "xml pi not at start of external entity", - "unknown encoding", - "encoding specified in XML declaration is incorrect" - }; - if (result > 0 && result < sizeof(message)/sizeof(message[0])) - return message[result]; - return 0; -} diff --git a/Build/source/libs/expat/xmlwf/win32filemap.c b/Build/source/libs/expat/xmlwf/win32filemap.c deleted file mode 100644 index 7546fea8933..00000000000 --- a/Build/source/libs/expat/xmlwf/win32filemap.c +++ /dev/null @@ -1,95 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -#define STRICT 1 -#define WIN32_LEAN_AND_MEAN 1 - -#ifdef XML_UNICODE_WCHAR_T -#ifndef XML_UNICODE -#define XML_UNICODE -#endif -#endif - -#ifdef XML_UNICODE -#define UNICODE -#define _UNICODE -#endif /* XML_UNICODE */ -#include -#include -#include -#include "filemap.h" - -static void win32perror(const TCHAR *); - -int filemap(const TCHAR *name, - void (*processor)(const void *, size_t, const TCHAR *, void *arg), - void *arg) -{ - HANDLE f; - HANDLE m; - DWORD size; - DWORD sizeHi; - void *p; - - f = CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, - FILE_FLAG_SEQUENTIAL_SCAN, NULL); - if (f == INVALID_HANDLE_VALUE) { - win32perror(name); - return 0; - } - size = GetFileSize(f, &sizeHi); - if (size == (DWORD)-1) { - win32perror(name); - return 0; - } - if (sizeHi) { - _ftprintf(stderr, _T("%s: bigger than 2Gb\n"), name); - return 0; - } - /* CreateFileMapping barfs on zero length files */ - if (size == 0) { - static const char c = '\0'; - processor(&c, 0, name, arg); - CloseHandle(f); - return 1; - } - m = CreateFileMapping(f, NULL, PAGE_READONLY, 0, 0, NULL); - if (m == NULL) { - win32perror(name); - CloseHandle(f); - return 0; - } - p = MapViewOfFile(m, FILE_MAP_READ, 0, 0, 0); - if (p == NULL) { - win32perror(name); - CloseHandle(m); - CloseHandle(f); - return 0; - } - processor(p, size, name, arg); - UnmapViewOfFile(p); - CloseHandle(m); - CloseHandle(f); - return 1; -} - -static -void win32perror(const TCHAR *s) -{ - LPVOID buf; - if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - GetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &buf, - 0, - NULL)) { - _ftprintf(stderr, _T("%s: %s"), s, buf); - fflush(stderr); - LocalFree(buf); - } - else - _ftprintf(stderr, _T("%s: unknown Windows error\n"), s); -} diff --git a/Build/source/libs/expat/xmlwf/xmlfile.c b/Build/source/libs/expat/xmlwf/xmlfile.c deleted file mode 100644 index ba79b23b3ff..00000000000 --- a/Build/source/libs/expat/xmlwf/xmlfile.c +++ /dev/null @@ -1,217 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -#include -#include -#include -#include -#include -#include "expat.h" -#include "xmlfile.h" -#include "xmltchar.h" -#include "filemap.h" - -#ifdef _MSC_VER -#include -#endif - -#ifdef _POSIX_SOURCE -#include -#endif - -#ifndef O_BINARY -#ifdef _O_BINARY -#define O_BINARY _O_BINARY -#else -#define O_BINARY 0 -#endif -#endif - -#ifdef _DEBUG -#define READ_SIZE 16 -#else -#define READ_SIZE (1024*8) -#endif - - - -typedef struct { - XML_Parser parser; - int *retPtr; -} PROCESS_ARGS; - -static -void reportError(XML_Parser parser, const XML_Char *filename) -{ - int code = XML_GetErrorCode(parser); - const XML_Char *message = XML_ErrorString(code); - if (message) - ftprintf(stdout, T("%s:%d:%d: %s\n"), - filename, - XML_GetErrorLineNumber(parser), - XML_GetErrorColumnNumber(parser), - message); - else - ftprintf(stderr, T("%s: (unknown message %d)\n"), filename, code); -} - -static -void processFile(const void *data, - size_t size, - const XML_Char *filename, - void *args) -{ - XML_Parser parser = ((PROCESS_ARGS *)args)->parser; - int *retPtr = ((PROCESS_ARGS *)args)->retPtr; - if (!XML_Parse(parser, data, size, 1)) { - reportError(parser, filename); - *retPtr = 0; - } - else - *retPtr = 1; -} - -#ifdef WIN32 - -static -int isAsciiLetter(XML_Char c) -{ - return (T('a') <= c && c <= T('z')) || (T('A') <= c && c <= T('Z')); -} - -#endif /* WIN32 */ - -static -const XML_Char *resolveSystemId(const XML_Char *base, const XML_Char *systemId, XML_Char **toFree) -{ - XML_Char *s; - *toFree = 0; - if (!base - || *systemId == T('/') -#ifdef WIN32 - || *systemId == T('\\') - || (isAsciiLetter(systemId[0]) && systemId[1] == T(':')) -#endif - ) - return systemId; - *toFree = (XML_Char *)malloc((tcslen(base) + tcslen(systemId) + 2)*sizeof(XML_Char)); - if (!*toFree) - return systemId; - tcscpy(*toFree, base); - s = *toFree; - if (tcsrchr(s, T('/'))) - s = tcsrchr(s, T('/')) + 1; -#ifdef WIN32 - if (tcsrchr(s, T('\\'))) - s = tcsrchr(s, T('\\')) + 1; -#endif - tcscpy(s, systemId); - return *toFree; -} - -static -int externalEntityRefFilemap(XML_Parser parser, - const XML_Char *context, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId) -{ - int result; - XML_Char *s; - const XML_Char *filename; - XML_Parser entParser = XML_ExternalEntityParserCreate(parser, context, 0); - PROCESS_ARGS args; - args.retPtr = &result; - args.parser = entParser; - filename = resolveSystemId(base, systemId, &s); - XML_SetBase(entParser, filename); - if (!filemap(filename, processFile, &args)) - result = 0; - free(s); - XML_ParserFree(entParser); - return result; -} - -static -int processStream(const XML_Char *filename, XML_Parser parser) -{ - int fd = topen(filename, O_BINARY|O_RDONLY); - if (fd < 0) { - tperror(filename); - return 0; - } - for (;;) { - int nread; - char *buf = XML_GetBuffer(parser, READ_SIZE); - if (!buf) { - close(fd); - ftprintf(stderr, T("%s: out of memory\n"), filename); - return 0; - } - nread = read(fd, buf, READ_SIZE); - if (nread < 0) { - tperror(filename); - close(fd); - return 0; - } - if (!XML_ParseBuffer(parser, nread, nread == 0)) { - reportError(parser, filename); - close(fd); - return 0; - } - if (nread == 0) { - close(fd); - break;; - } - } - return 1; -} - -static -int externalEntityRefStream(XML_Parser parser, - const XML_Char *context, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId) -{ - XML_Char *s; - const XML_Char *filename; - int ret; - XML_Parser entParser = XML_ExternalEntityParserCreate(parser, context, 0); - filename = resolveSystemId(base, systemId, &s); - XML_SetBase(entParser, filename); - ret = processStream(filename, entParser); - free(s); - XML_ParserFree(entParser); - return ret; -} - -int XML_ProcessFile(XML_Parser parser, - const XML_Char *filename, - unsigned flags) -{ - int result; - - if (!XML_SetBase(parser, filename)) { - ftprintf(stderr, T("%s: out of memory"), filename); - exit(1); - } - - if (flags & XML_EXTERNAL_ENTITIES) - XML_SetExternalEntityRefHandler(parser, - (flags & XML_MAP_FILE) - ? externalEntityRefFilemap - : externalEntityRefStream); - if (flags & XML_MAP_FILE) { - PROCESS_ARGS args; - args.retPtr = &result; - args.parser = parser; - if (!filemap(filename, processFile, &args)) - result = 0; - } - else - result = processStream(filename, parser); - return result; -} diff --git a/Build/source/libs/expat/xmlwf/xmlfile.h b/Build/source/libs/expat/xmlwf/xmlfile.h deleted file mode 100644 index 5d6bdce457d..00000000000 --- a/Build/source/libs/expat/xmlwf/xmlfile.h +++ /dev/null @@ -1,11 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -#define XML_MAP_FILE 01 -#define XML_EXTERNAL_ENTITIES 02 - -extern int XML_ProcessFile(XML_Parser parser, - const XML_Char *filename, - unsigned flags); diff --git a/Build/source/libs/expat/xmlwf/xmlmime.c b/Build/source/libs/expat/xmlwf/xmlmime.c deleted file mode 100644 index 4b32c86fe2b..00000000000 --- a/Build/source/libs/expat/xmlwf/xmlmime.c +++ /dev/null @@ -1,161 +0,0 @@ -#include -#include "xmlmime.h" - -static -const char *getTok(const char **pp) -{ - /* inComment means one level of nesting; inComment+1 means two levels etc */ - enum { inAtom, inString, init, inComment }; - int state = init; - const char *tokStart = 0; - for (;;) { - switch (**pp) { - case '\0': - if (state == inAtom) - return tokStart; - return 0; - case ' ': - case '\r': - case '\t': - case '\n': - if (state == inAtom) - return tokStart; - break; - case '(': - if (state == inAtom) - return tokStart; - if (state != inString) - state++; - break; - case ')': - if (state > init) - --state; - else if (state != inString) - return 0; - break; - case ';': - case '/': - case '=': - if (state == inAtom) - return tokStart; - if (state == init) - return (*pp)++; - break; - case '\\': - ++*pp; - if (**pp == '\0') - return 0; - break; - case '"': - switch (state) { - case inString: - ++*pp; - return tokStart; - case inAtom: - return tokStart; - case init: - tokStart = *pp; - state = inString; - break; - } - break; - default: - if (state == init) { - tokStart = *pp; - state = inAtom; - } - break; - } - ++*pp; - } - /* not reached */ -} - -/* key must be lowercase ASCII */ - -static -int matchkey(const char *start, const char *end, const char *key) -{ - if (!start) - return 0; - for (; start != end; start++, key++) - if (*start != *key && *start != 'A' + (*key - 'a')) - return 0; - return *key == '\0'; -} - -void getXMLCharset(const char *buf, char *charset) -{ - const char *next, *p; - - charset[0] = '\0'; - next = buf; - p = getTok(&next); - if (matchkey(p, next, "text")) - strcpy(charset, "us-ascii"); - else if (!matchkey(p, next, "application")) - return; - p = getTok(&next); - if (!p || *p != '/') - return; - p = getTok(&next); -#if 0 - if (!matchkey(p, next, "xml") && charset[0] == '\0') - return; -#endif - p = getTok(&next); - while (p) { - if (*p == ';') { - p = getTok(&next); - if (matchkey(p, next, "charset")) { - p = getTok(&next); - if (p && *p == '=') { - p = getTok(&next); - if (p) { - char *s = charset; - if (*p == '"') { - while (++p != next - 1) { - if (*p == '\\') - ++p; - if (s == charset + CHARSET_MAX - 1) { - charset[0] = '\0'; - break; - } - *s++ = *p; - } - *s++ = '\0'; - } - else { - if (next - p > CHARSET_MAX - 1) - break; - while (p != next) - *s++ = *p++; - *s = 0; - break; - } - } - } - break; - } - } - else - p = getTok(&next); - } -} - -#ifdef TEST - -#include - -int main(int argc, char **argv) -{ - char buf[CHARSET_MAX]; - if (argc <= 1) - return 1; - printf("%s\n", argv[1]); - getXMLCharset(argv[1], buf); - printf("charset=\"%s\"\n", buf); - return 0; -} - -#endif /* TEST */ diff --git a/Build/source/libs/expat/xmlwf/xmlmime.h b/Build/source/libs/expat/xmlwf/xmlmime.h deleted file mode 100644 index 79654b69bf5..00000000000 --- a/Build/source/libs/expat/xmlwf/xmlmime.h +++ /dev/null @@ -1,19 +0,0 @@ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Registered charset names are at most 40 characters long. */ - -#define CHARSET_MAX 41 - -/* Figure out the charset to use from the ContentType. -buf contains the body of the header field (the part after "Content-Type:"). -charset gets the charset to use. It must be at least CHARSET_MAX chars long. -charset will be empty if the default charset should be used. */ - -void getXMLCharset(const char *buf, char *charset); - -#ifdef __cplusplus -} -#endif diff --git a/Build/source/libs/expat/xmlwf/xmltchar.h b/Build/source/libs/expat/xmlwf/xmltchar.h deleted file mode 100644 index 1088575512d..00000000000 --- a/Build/source/libs/expat/xmlwf/xmltchar.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifdef XML_UNICODE -#ifndef XML_UNICODE_WCHAR_T -#error xmlwf requires a 16-bit Unicode-compatible wchar_t -#endif -#define T(x) L ## x -#define ftprintf fwprintf -#define tfopen _wfopen -#define fputts fputws -#define puttc putwc -#define tcscmp wcscmp -#define tcscpy wcscpy -#define tcscat wcscat -#define tcschr wcschr -#define tcsrchr wcsrchr -#define tcslen wcslen -#define tperror _wperror -#define topen _wopen -#define tmain wmain -#define tremove _wremove -#else /* not XML_UNICODE */ -#define T(x) x -#define ftprintf fprintf -#define tfopen fopen -#define fputts fputs -#define puttc putc -#define tcscmp strcmp -#define tcscpy strcpy -#define tcscat strcat -#define tcschr strchr -#define tcsrchr strrchr -#define tcslen strlen -#define tperror perror -#define topen open -#define tmain main -#define tremove remove -#endif /* not XML_UNICODE */ diff --git a/Build/source/libs/expat/xmlwf/xmlurl.h b/Build/source/libs/expat/xmlwf/xmlurl.h deleted file mode 100644 index 3ab1726889b..00000000000 --- a/Build/source/libs/expat/xmlwf/xmlurl.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifdef __cplusplus -extern "C" { -#endif - -int XML_URLInit(); -void XML_URLUninit(); -int XML_ProcessURL(XML_Parser parser, - const XML_Char *url, - unsigned flags); - -#ifdef __cplusplus -} -#endif diff --git a/Build/source/libs/expat/xmlwf/xmlwf.c b/Build/source/libs/expat/xmlwf/xmlwf.c deleted file mode 100644 index 891c0db5f3d..00000000000 --- a/Build/source/libs/expat/xmlwf/xmlwf.c +++ /dev/null @@ -1,759 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -#include -#include -#include -#include - -#include "expat.h" -#include "codepage.h" -#include "xmlfile.h" -#include "xmltchar.h" - -#ifdef _MSC_VER -#include -#endif - -/* This ensures proper sorting. */ - -#define NSSEP T('\001') - -static void characterData(void *userData, const XML_Char *s, int len) -{ - FILE *fp = userData; - for (; len > 0; --len, ++s) { - switch (*s) { - case T('&'): - fputts(T("&"), fp); - break; - case T('<'): - fputts(T("<"), fp); - break; - case T('>'): - fputts(T(">"), fp); - break; -#ifdef W3C14N - case 13: - fputts(T(" "), fp); - break; -#else - case T('"'): - fputts(T("""), fp); - break; - case 9: - case 10: - case 13: - ftprintf(fp, T("&#%d;"), *s); - break; -#endif - default: - puttc(*s, fp); - break; - } - } -} - -static void attributeValue(FILE *fp, const XML_Char *s) -{ - puttc(T('='), fp); - puttc(T('"'), fp); - for (;;) { - switch (*s) { - case 0: - case NSSEP: - puttc(T('"'), fp); - return; - case T('&'): - fputts(T("&"), fp); - break; - case T('<'): - fputts(T("<"), fp); - break; - case T('"'): - fputts(T("""), fp); - break; -#ifdef W3C14N - case 9: - fputts(T(" "), fp); - break; - case 10: - fputts(T(" "), fp); - break; - case 13: - fputts(T(" "), fp); - break; -#else - case T('>'): - fputts(T(">"), fp); - break; - case 9: - case 10: - case 13: - ftprintf(fp, T("&#%d;"), *s); - break; -#endif - default: - puttc(*s, fp); - break; - } - s++; - } -} - -/* Lexicographically comparing UTF-8 encoded attribute values, -is equivalent to lexicographically comparing based on the character number. */ - -static int attcmp(const void *att1, const void *att2) -{ - return tcscmp(*(const XML_Char **)att1, *(const XML_Char **)att2); -} - -static void startElement(void *userData, const XML_Char *name, const XML_Char **atts) -{ - int nAtts; - const XML_Char **p; - FILE *fp = userData; - puttc(T('<'), fp); - fputts(name, fp); - - p = atts; - while (*p) - ++p; - nAtts = (p - atts) >> 1; - if (nAtts > 1) - qsort((void *)atts, nAtts, sizeof(XML_Char *) * 2, attcmp); - while (*atts) { - puttc(T(' '), fp); - fputts(*atts++, fp); - attributeValue(fp, *atts); - atts++; - } - puttc(T('>'), fp); -} - -static void endElement(void *userData, const XML_Char *name) -{ - FILE *fp = userData; - puttc(T('<'), fp); - puttc(T('/'), fp); - fputts(name, fp); - puttc(T('>'), fp); -} - -static int nsattcmp(const void *p1, const void *p2) -{ - const XML_Char *att1 = *(const XML_Char **)p1; - const XML_Char *att2 = *(const XML_Char **)p2; - int sep1 = (tcsrchr(att1, NSSEP) != 0); - int sep2 = (tcsrchr(att1, NSSEP) != 0); - if (sep1 != sep2) - return sep1 - sep2; - return tcscmp(att1, att2); -} - -static void startElementNS(void *userData, const XML_Char *name, const XML_Char **atts) -{ - int nAtts; - int nsi; - const XML_Char **p; - FILE *fp = userData; - const XML_Char *sep; - puttc(T('<'), fp); - - sep = tcsrchr(name, NSSEP); - if (sep) { - fputts(T("n1:"), fp); - fputts(sep + 1, fp); - fputts(T(" xmlns:n1"), fp); - attributeValue(fp, name); - nsi = 2; - } - else { - fputts(name, fp); - nsi = 1; - } - - p = atts; - while (*p) - ++p; - nAtts = (p - atts) >> 1; - if (nAtts > 1) - qsort((void *)atts, nAtts, sizeof(XML_Char *) * 2, nsattcmp); - while (*atts) { - name = *atts++; - sep = tcsrchr(name, NSSEP); - puttc(T(' '), fp); - if (sep) { - ftprintf(fp, T("n%d:"), nsi); - fputts(sep + 1, fp); - } - else - fputts(name, fp); - attributeValue(fp, *atts); - if (sep) { - ftprintf(fp, T(" xmlns:n%d"), nsi++); - attributeValue(fp, name); - } - atts++; - } - puttc(T('>'), fp); -} - -static void endElementNS(void *userData, const XML_Char *name) -{ - FILE *fp = userData; - const XML_Char *sep; - puttc(T('<'), fp); - puttc(T('/'), fp); - sep = tcsrchr(name, NSSEP); - if (sep) { - fputts(T("n1:"), fp); - fputts(sep + 1, fp); - } - else - fputts(name, fp); - puttc(T('>'), fp); -} - -#ifndef W3C14N - -static void processingInstruction(void *userData, const XML_Char *target, const XML_Char *data) -{ - FILE *fp = userData; - puttc(T('<'), fp); - puttc(T('?'), fp); - fputts(target, fp); - puttc(T(' '), fp); - fputts(data, fp); - puttc(T('?'), fp); - puttc(T('>'), fp); -} - -#endif /* not W3C14N */ - -static void defaultCharacterData(XML_Parser parser, const XML_Char *s, int len) -{ - XML_DefaultCurrent(parser); -} - -static void defaultStartElement(XML_Parser parser, const XML_Char *name, const XML_Char **atts) -{ - XML_DefaultCurrent(parser); -} - -static void defaultEndElement(XML_Parser parser, const XML_Char *name) -{ - XML_DefaultCurrent(parser); -} - -static void defaultProcessingInstruction(XML_Parser parser, const XML_Char *target, const XML_Char *data) -{ - XML_DefaultCurrent(parser); -} - -static void nopCharacterData(XML_Parser parser, const XML_Char *s, int len) -{ -} - -static void nopStartElement(XML_Parser parser, const XML_Char *name, const XML_Char **atts) -{ -} - -static void nopEndElement(XML_Parser parser, const XML_Char *name) -{ -} - -static void nopProcessingInstruction(XML_Parser parser, const XML_Char *target, const XML_Char *data) -{ -} - -static void markup(XML_Parser parser, const XML_Char *s, int len) -{ - FILE *fp = XML_GetUserData(parser); - for (; len > 0; --len, ++s) - puttc(*s, fp); -} - -static -void metaLocation(XML_Parser parser) -{ - const XML_Char *uri = XML_GetBase(parser); - if (uri) - ftprintf(XML_GetUserData(parser), T(" uri=\"%s\""), uri); - ftprintf(XML_GetUserData(parser), - T(" byte=\"%ld\" nbytes=\"%d\" line=\"%d\" col=\"%d\""), - XML_GetCurrentByteIndex(parser), - XML_GetCurrentByteCount(parser), - XML_GetCurrentLineNumber(parser), - XML_GetCurrentColumnNumber(parser)); -} - -static -void metaStartDocument(XML_Parser parser) -{ - fputts(T("\n"), XML_GetUserData(parser)); -} - -static -void metaEndDocument(XML_Parser parser) -{ - fputts(T("\n"), XML_GetUserData(parser)); -} - -static -void metaStartElement(XML_Parser parser, const XML_Char *name, const XML_Char **atts) -{ - FILE *fp = XML_GetUserData(parser); - const XML_Char **specifiedAttsEnd - = atts + XML_GetSpecifiedAttributeCount(parser); - const XML_Char **idAttPtr; - int idAttIndex = XML_GetIdAttributeIndex(parser); - if (idAttIndex < 0) - idAttPtr = 0; - else - idAttPtr = atts + idAttIndex; - - ftprintf(fp, T("\n"), fp); - do { - ftprintf(fp, T("= specifiedAttsEnd) - fputts(T("\" defaulted=\"yes\"/>\n"), fp); - else if (atts == idAttPtr) - fputts(T("\" id=\"yes\"/>\n"), fp); - else - fputts(T("\"/>\n"), fp); - } while (*(atts += 2)); - fputts(T("\n"), fp); - } - else - fputts(T("/>\n"), fp); -} - -static -void metaEndElement(XML_Parser parser, const XML_Char *name) -{ - FILE *fp = XML_GetUserData(parser); - ftprintf(fp, T("\n"), fp); -} - -static -void metaProcessingInstruction(XML_Parser parser, const XML_Char *target, const XML_Char *data) -{ - FILE *fp = XML_GetUserData(parser); - ftprintf(fp, T("\n"), fp); -} - -static -void metaComment(XML_Parser parser, const XML_Char *data) -{ - FILE *fp = XML_GetUserData(parser); - fputts(T("\n"), fp); -} - -static -void metaStartCdataSection(XML_Parser parser) -{ - FILE *fp = XML_GetUserData(parser); - fputts(T("\n"), fp); -} - -static -void metaEndCdataSection(XML_Parser parser) -{ - FILE *fp = XML_GetUserData(parser); - fputts(T("\n"), fp); -} - -static -void metaCharacterData(XML_Parser parser, const XML_Char *s, int len) -{ - FILE *fp = XML_GetUserData(parser); - fputts(T("\n"), fp); -} - -static -void metaStartDoctypeDecl(XML_Parser parser, - const XML_Char *doctypeName, - const XML_Char *sysid, - const XML_Char *pubid, - int has_internal_subset) -{ - FILE *fp = XML_GetUserData(parser); - ftprintf(fp, T("\n"), fp); -} - -static -void metaEndDoctypeDecl(XML_Parser parser) -{ - FILE *fp = XML_GetUserData(parser); - fputts(T("\n"), fp); -} - -static -void metaNotationDecl(XML_Parser parser, - const XML_Char *notationName, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId) -{ - FILE *fp = XML_GetUserData(parser); - ftprintf(fp, T("\n"), fp); -} - - -static -void metaEntityDecl(XML_Parser parser, - const XML_Char *entityName, - int is_param, - const XML_Char *value, - int value_length, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId, - const XML_Char *notationName) -{ - FILE *fp = XML_GetUserData(parser); - - if (value) { - ftprintf(fp, T("'), fp); - characterData(fp, value, value_length); - fputts(T("\n"), fp); - } - else if (notationName) { - ftprintf(fp, T("\n"), fp); - } - else { - ftprintf(fp, T("\n"), fp); - } -} - -static -void metaStartNamespaceDecl(XML_Parser parser, - const XML_Char *prefix, - const XML_Char *uri) -{ - FILE *fp = XML_GetUserData(parser); - fputts(T("\n"), fp); - } - else - fputts(T("/>\n"), fp); -} - -static -void metaEndNamespaceDecl(XML_Parser parser, const XML_Char *prefix) -{ - FILE *fp = XML_GetUserData(parser); - if (!prefix) - fputts(T("\n"), fp); - else - ftprintf(fp, T("\n"), prefix); -} - -static -int unknownEncodingConvert(void *data, const char *p) -{ - return codepageConvert(*(int *)data, p); -} - -static -int unknownEncoding(void *userData, - const XML_Char *name, - XML_Encoding *info) -{ - int cp; - static const XML_Char prefixL[] = T("windows-"); - static const XML_Char prefixU[] = T("WINDOWS-"); - int i; - - for (i = 0; prefixU[i]; i++) - if (name[i] != prefixU[i] && name[i] != prefixL[i]) - return 0; - - cp = 0; - for (; name[i]; i++) { - static const XML_Char digits[] = T("0123456789"); - const XML_Char *s = tcschr(digits, name[i]); - if (!s) - return 0; - cp *= 10; - cp += s - digits; - if (cp >= 0x10000) - return 0; - } - if (!codepageMap(cp, info->map)) - return 0; - info->convert = unknownEncodingConvert; - /* We could just cast the code page integer to a void *, - and avoid the use of release. */ - info->release = free; - info->data = malloc(sizeof(int)); - if (!info->data) - return 0; - *(int *)info->data = cp; - return 1; -} - -static -int notStandalone(void *userData) -{ - return 0; -} - -static -void usage(const XML_Char *prog) -{ - ftprintf(stderr, T("usage: %s [-n] [-p] [-r] [-s] [-w] [-x] [-d output-dir] [-e encoding] file ...\n"), prog); - exit(1); -} - -int tmain(int argc, XML_Char **argv) -{ - int i, j; - const XML_Char *outputDir = 0; - const XML_Char *encoding = 0; - unsigned processFlags = XML_MAP_FILE; - int windowsCodePages = 0; - int outputType = 0; - int useNamespaces = 0; - int requireStandalone = 0; - int paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; - -#ifdef _MSC_VER - _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF); -#endif - - i = 1; - j = 0; - while (i < argc) { - if (j == 0) { - if (argv[i][0] != T('-')) - break; - if (argv[i][1] == T('-') && argv[i][2] == T('\0')) { - i++; - break; - } - j++; - } - switch (argv[i][j]) { - case T('r'): - processFlags &= ~XML_MAP_FILE; - j++; - break; - case T('s'): - requireStandalone = 1; - j++; - break; - case T('n'): - useNamespaces = 1; - j++; - break; - case T('p'): - paramEntityParsing = XML_PARAM_ENTITY_PARSING_ALWAYS; - /* fall through */ - case T('x'): - processFlags |= XML_EXTERNAL_ENTITIES; - j++; - break; - case T('w'): - windowsCodePages = 1; - j++; - break; - case T('m'): - outputType = 'm'; - j++; - break; - case T('c'): - outputType = 'c'; - useNamespaces = 0; - j++; - break; - case T('t'): - outputType = 't'; - j++; - break; - case T('d'): - if (argv[i][j + 1] == T('\0')) { - if (++i == argc) - usage(argv[0]); - outputDir = argv[i]; - } - else - outputDir = argv[i] + j + 1; - i++; - j = 0; - break; - case T('e'): - if (argv[i][j + 1] == T('\0')) { - if (++i == argc) - usage(argv[0]); - encoding = argv[i]; - } - else - encoding = argv[i] + j + 1; - i++; - j = 0; - break; - case T('\0'): - if (j > 1) { - i++; - j = 0; - break; - } - /* fall through */ - default: - usage(argv[0]); - } - } - if (i == argc) - usage(argv[0]); - for (; i < argc; i++) { - FILE *fp = 0; - XML_Char *outName = 0; - int result; - XML_Parser parser; - if (useNamespaces) - parser = XML_ParserCreateNS(encoding, NSSEP); - else - parser = XML_ParserCreate(encoding); - if (requireStandalone) - XML_SetNotStandaloneHandler(parser, notStandalone); - XML_SetParamEntityParsing(parser, paramEntityParsing); - if (outputType == 't') { - /* This is for doing timings; this gives a more realistic estimate of - the parsing time. */ - outputDir = 0; - XML_SetElementHandler(parser, nopStartElement, nopEndElement); - XML_SetCharacterDataHandler(parser, nopCharacterData); - XML_SetProcessingInstructionHandler(parser, nopProcessingInstruction); - } - else if (outputDir) { - const XML_Char *file = argv[i]; - if (tcsrchr(file, T('/'))) - file = tcsrchr(file, T('/')) + 1; -#ifdef WIN32 - if (tcsrchr(file, T('\\'))) - file = tcsrchr(file, T('\\')) + 1; -#endif - outName = malloc((tcslen(outputDir) + tcslen(file) + 2) * sizeof(XML_Char)); - tcscpy(outName, outputDir); - tcscat(outName, T("/")); - tcscat(outName, file); - fp = tfopen(outName, T("wb")); - if (!fp) { - tperror(outName); - exit(1); - } - setvbuf(fp, NULL, _IOFBF, 16384); -#ifdef XML_UNICODE - puttc(0xFEFF, fp); -#endif - XML_SetUserData(parser, fp); - switch (outputType) { - case 'm': - XML_UseParserAsHandlerArg(parser); - XML_SetElementHandler(parser, metaStartElement, metaEndElement); - XML_SetProcessingInstructionHandler(parser, metaProcessingInstruction); - XML_SetCommentHandler(parser, metaComment); - XML_SetCdataSectionHandler(parser, metaStartCdataSection, metaEndCdataSection); - XML_SetCharacterDataHandler(parser, metaCharacterData); - XML_SetDoctypeDeclHandler(parser, metaStartDoctypeDecl, metaEndDoctypeDecl); - XML_SetEntityDeclHandler(parser, metaEntityDecl); - XML_SetNotationDeclHandler(parser, metaNotationDecl); - XML_SetNamespaceDeclHandler(parser, metaStartNamespaceDecl, metaEndNamespaceDecl); - metaStartDocument(parser); - break; - case 'c': - XML_UseParserAsHandlerArg(parser); - XML_SetDefaultHandler(parser, markup); - XML_SetElementHandler(parser, defaultStartElement, defaultEndElement); - XML_SetCharacterDataHandler(parser, defaultCharacterData); - XML_SetProcessingInstructionHandler(parser, defaultProcessingInstruction); - break; - default: - if (useNamespaces) - XML_SetElementHandler(parser, startElementNS, endElementNS); - else - XML_SetElementHandler(parser, startElement, endElement); - XML_SetCharacterDataHandler(parser, characterData); -#ifndef W3C14N - XML_SetProcessingInstructionHandler(parser, processingInstruction); -#endif /* not W3C14N */ - break; - } - } - if (windowsCodePages) - XML_SetUnknownEncodingHandler(parser, unknownEncoding, 0); - result = XML_ProcessFile(parser, argv[i], processFlags); - if (outputDir) { - if (outputType == 'm') - metaEndDocument(parser); - fclose(fp); - if (!result) - tremove(outName); - free(outName); - } - XML_ParserFree(parser); - } - return 0; -} diff --git a/Build/source/libs/expat/xmlwf/xmlwf.dsp b/Build/source/libs/expat/xmlwf/xmlwf.dsp deleted file mode 100644 index 51de958bf7a..00000000000 --- a/Build/source/libs/expat/xmlwf/xmlwf.dsp +++ /dev/null @@ -1,136 +0,0 @@ -# Microsoft Developer Studio Project File - Name="xmlwf" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=xmlwf - Win32 Release -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "xmlwf.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "xmlwf.mak" CFG="xmlwf - Win32 Release" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "xmlwf - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "xmlwf - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "xmlwf - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir ".\Release" -# PROP BASE Intermediate_Dir ".\Release" -# PROP BASE Target_Dir "." -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir ".\Release" -# PROP Intermediate_Dir ".\Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "." -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\xmlparse" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllimport) /YX /FD /c -# ADD BASE RSC /l 0x809 /d "NDEBUG" -# ADD RSC /l 0x809 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"..\bin\xmlwf.exe" - -!ELSEIF "$(CFG)" == "xmlwf - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir ".\Debug" -# PROP BASE Intermediate_Dir ".\Debug" -# PROP BASE Target_Dir "." -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir ".\Debug" -# PROP Intermediate_Dir ".\Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "." -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".\xmlparse" /I "..\xmlparse" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllimport) /YX /FD /c -# ADD BASE RSC /l 0x809 /d "_DEBUG" -# ADD RSC /l 0x809 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 -# ADD LINK32 setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\dbgbin\xmlwf.exe" - -!ENDIF - -# Begin Target - -# Name "xmlwf - Win32 Release" -# Name "xmlwf - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" -# Begin Source File - -SOURCE=.\codepage.c -# End Source File -# Begin Source File - -SOURCE=.\readfilemap.c -# PROP Exclude_From_Build 1 -# End Source File -# Begin Source File - -SOURCE=.\unixfilemap.c -# PROP Exclude_From_Build 1 -# End Source File -# Begin Source File - -SOURCE=.\win32filemap.c -# End Source File -# Begin Source File - -SOURCE=.\xmlfile.c -# End Source File -# Begin Source File - -SOURCE=.\xmlwf.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" -# Begin Source File - -SOURCE=.\codepage.h -# End Source File -# Begin Source File - -SOURCE=.\xmlfile.h -# End Source File -# Begin Source File - -SOURCE=.\xmltchar.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/Build/source/libs/expat/xmlwf/xmlwin32url.cxx b/Build/source/libs/expat/xmlwf/xmlwin32url.cxx deleted file mode 100644 index 4f33aa8e75a..00000000000 --- a/Build/source/libs/expat/xmlwf/xmlwin32url.cxx +++ /dev/null @@ -1,371 +0,0 @@ -#include "xmlparse.h" -#ifdef XML_UNICODE -#define UNICODE -#endif -#include -#include -#include -#include -#include -#include "xmlurl.h" -#include "xmlmime.h" - -static -int processURL(XML_Parser parser, IMoniker *baseMoniker, const XML_Char *url); - -typedef void (*StopHandler)(void *, HRESULT); - -class Callback : public IBindStatusCallback { -public: - // IUnknown methods - STDMETHODIMP QueryInterface(REFIID,void **); - STDMETHODIMP_(ULONG) AddRef(); - STDMETHODIMP_(ULONG) Release(); - // IBindStatusCallback methods - STDMETHODIMP OnStartBinding(DWORD, IBinding *); - STDMETHODIMP GetPriority(LONG *); - STDMETHODIMP OnLowResource(DWORD); - STDMETHODIMP OnProgress(ULONG, ULONG, ULONG, LPCWSTR); - STDMETHODIMP OnStopBinding(HRESULT, LPCWSTR); - STDMETHODIMP GetBindInfo(DWORD *, BINDINFO *); - STDMETHODIMP OnDataAvailable(DWORD, DWORD, FORMATETC *, STGMEDIUM *); - STDMETHODIMP OnObjectAvailable(REFIID, IUnknown *); - Callback(XML_Parser, IMoniker *, StopHandler, void *); - ~Callback(); - int externalEntityRef(const XML_Char *context, const XML_Char *systemId, const XML_Char *publicId); -private: - XML_Parser parser_; - IMoniker *baseMoniker_; - DWORD totalRead_; - ULONG ref_; - IBinding *pBinding_; - StopHandler stopHandler_; - void *stopArg_; -}; - -STDMETHODIMP_(ULONG) Callback::AddRef() -{ - return ref_++; -} - -STDMETHODIMP_(ULONG) Callback::Release() -{ - if (--ref_ == 0) { - delete this; - return 0; - } - return ref_; -} - -STDMETHODIMP Callback::QueryInterface(REFIID riid, void** ppv) -{ - if (IsEqualGUID(riid, IID_IUnknown)) - *ppv = (IUnknown *)this; - else if (IsEqualGUID(riid, IID_IBindStatusCallback)) - *ppv = (IBindStatusCallback *)this; - else - return E_NOINTERFACE; - ((LPUNKNOWN)*ppv)->AddRef(); - return S_OK; -} - -STDMETHODIMP Callback::OnStartBinding(DWORD, IBinding* pBinding) -{ - pBinding_ = pBinding; - pBinding->AddRef(); - return S_OK; -} - -STDMETHODIMP Callback::GetPriority(LONG *) -{ - return E_NOTIMPL; -} - -STDMETHODIMP Callback::OnLowResource(DWORD) -{ - return E_NOTIMPL; -} - -STDMETHODIMP Callback::OnProgress(ULONG, ULONG, ULONG, LPCWSTR) -{ - return S_OK; -} - -STDMETHODIMP Callback::OnStopBinding(HRESULT hr, LPCWSTR szError) -{ - if (pBinding_) { - pBinding_->Release(); - pBinding_ = 0; - } - if (baseMoniker_) { - baseMoniker_->Release(); - baseMoniker_ = 0; - } - stopHandler_(stopArg_, hr); - return S_OK; -} - -STDMETHODIMP Callback::GetBindInfo(DWORD* pgrfBINDF, BINDINFO* pbindinfo) -{ - *pgrfBINDF = BINDF_ASYNCHRONOUS; - return S_OK; -} - -static -void reportError(XML_Parser parser) -{ - int code = XML_GetErrorCode(parser); - const XML_Char *message = XML_ErrorString(code); - if (message) - _ftprintf(stderr, _T("%s:%d:%ld: %s\n"), - XML_GetBase(parser), - XML_GetErrorLineNumber(parser), - XML_GetErrorColumnNumber(parser), - message); - else - _ftprintf(stderr, _T("%s: (unknown message %d)\n"), XML_GetBase(parser), code); -} - -STDMETHODIMP Callback::OnDataAvailable(DWORD grfBSCF, - DWORD dwSize, - FORMATETC *pfmtetc, - STGMEDIUM* pstgmed) -{ - if (grfBSCF & BSCF_FIRSTDATANOTIFICATION) { - IWinInetHttpInfo *hp; - HRESULT hr = pBinding_->QueryInterface(IID_IWinInetHttpInfo, (void **)&hp); - if (SUCCEEDED(hr)) { - char contentType[1024]; - DWORD bufSize = sizeof(contentType); - DWORD flags = 0; - contentType[0] = 0; - hr = hp->QueryInfo(HTTP_QUERY_CONTENT_TYPE, contentType, &bufSize, 0, NULL); - if (SUCCEEDED(hr)) { - char charset[CHARSET_MAX]; - getXMLCharset(contentType, charset); - if (charset[0]) { -#ifdef XML_UNICODE - XML_Char wcharset[CHARSET_MAX]; - XML_Char *p1 = wcharset; - const char *p2 = charset; - while ((*p1++ = (unsigned char)*p2++) != 0) - ; - XML_SetEncoding(parser_, wcharset); -#else - XML_SetEncoding(parser_, charset); -#endif - } - } - hp->Release(); - } - } - if (!parser_) - return E_ABORT; - if (pstgmed->tymed == TYMED_ISTREAM) { - while (totalRead_ < dwSize) { -#define READ_MAX (64*1024) - DWORD nToRead = dwSize - totalRead_; - if (nToRead > READ_MAX) - nToRead = READ_MAX; - void *buf = XML_GetBuffer(parser_, nToRead); - if (!buf) { - _ftprintf(stderr, _T("out of memory\n")); - return E_ABORT; - } - DWORD nRead; - HRESULT hr = pstgmed->pstm->Read(buf, nToRead, &nRead); - if (SUCCEEDED(hr)) { - totalRead_ += nRead; - if (!XML_ParseBuffer(parser_, - nRead, - (grfBSCF & BSCF_LASTDATANOTIFICATION) != 0 - && totalRead_ == dwSize)) { - reportError(parser_); - return E_ABORT; - } - } - } - } - return S_OK; -} - -STDMETHODIMP Callback::OnObjectAvailable(REFIID, IUnknown *) -{ - return S_OK; -} - -int Callback::externalEntityRef(const XML_Char *context, const XML_Char *systemId, const XML_Char *publicId) -{ - XML_Parser entParser = XML_ExternalEntityParserCreate(parser_, context, 0); - XML_SetBase(entParser, systemId); - int ret = processURL(entParser, baseMoniker_, systemId); - XML_ParserFree(entParser); - return ret; -} - -Callback::Callback(XML_Parser parser, IMoniker *baseMoniker, StopHandler stopHandler, void *stopArg) -: parser_(parser), - baseMoniker_(baseMoniker), - ref_(0), - pBinding_(0), - totalRead_(0), - stopHandler_(stopHandler), - stopArg_(stopArg) -{ - if (baseMoniker_) - baseMoniker_->AddRef(); -} - -Callback::~Callback() -{ - if (pBinding_) - pBinding_->Release(); - if (baseMoniker_) - baseMoniker_->Release(); -} - -static -int externalEntityRef(void *arg, - const XML_Char *context, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId) -{ - return ((Callback *)arg)->externalEntityRef(context, systemId, publicId); -} - - -static -HRESULT openStream(XML_Parser parser, - IMoniker *baseMoniker, - const XML_Char *uri, - StopHandler stopHandler, void *stopArg) -{ - if (!XML_SetBase(parser, uri)) - return E_OUTOFMEMORY; - HRESULT hr; - IMoniker *m; -#ifdef XML_UNICODE - hr = CreateURLMoniker(0, uri, &m); -#else - LPWSTR uriw = new wchar_t[strlen(uri) + 1]; - for (int i = 0;; i++) { - uriw[i] = uri[i]; - if (uriw[i] == 0) - break; - } - hr = CreateURLMoniker(baseMoniker, uriw, &m); - delete [] uriw; -#endif - if (FAILED(hr)) - return hr; - IBindStatusCallback *cb = new Callback(parser, m, stopHandler, stopArg); - XML_SetExternalEntityRefHandler(parser, externalEntityRef); - XML_SetExternalEntityRefHandlerArg(parser, cb); - cb->AddRef(); - IBindCtx *b; - if (FAILED(hr = CreateAsyncBindCtx(0, cb, 0, &b))) { - cb->Release(); - m->Release(); - return hr; - } - cb->Release(); - IStream *pStream; - hr = m->BindToStorage(b, 0, IID_IStream, (void **)&pStream); - if (SUCCEEDED(hr)) { - if (pStream) - pStream->Release(); - } - if (hr == MK_S_ASYNCHRONOUS) - hr = S_OK; - m->Release(); - b->Release(); - return hr; -} - -struct QuitInfo { - const XML_Char *url; - HRESULT hr; - int stop; -}; - -static -void winPerror(const XML_Char *url, HRESULT hr) -{ - LPVOID buf; - if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER - | FORMAT_MESSAGE_FROM_HMODULE, - GetModuleHandleA("urlmon.dll"), - hr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &buf, - 0, - NULL) - || FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER - | FORMAT_MESSAGE_FROM_SYSTEM, - 0, - hr, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &buf, - 0, - NULL)) { - /* The system error messages seem to end with a newline. */ - _ftprintf(stderr, _T("%s: %s"), url, buf); - fflush(stderr); - LocalFree(buf); - } - else - _ftprintf(stderr, _T("%s: error %x\n"), url, hr); -} - -static void threadQuit(void *p, HRESULT hr) -{ - QuitInfo *qi = (QuitInfo *)p; - qi->hr = hr; - qi->stop = 1; -} - -extern "C" -int XML_URLInit() -{ - return SUCCEEDED(CoInitialize(0)); -} - -extern "C" -void XML_URLUninit() -{ - CoUninitialize(); -} - -static -int processURL(XML_Parser parser, IMoniker *baseMoniker, const XML_Char *url) -{ - QuitInfo qi; - qi.stop = 0; - qi.url = url; - - XML_SetBase(parser, url); - HRESULT hr = openStream(parser, baseMoniker, url, threadQuit, &qi); - if (FAILED(hr)) { - winPerror(url, hr); - return 0; - } - else if (FAILED(qi.hr)) { - winPerror(url, qi.hr); - return 0; - } - MSG msg; - while (!qi.stop && GetMessage (&msg, NULL, 0, 0)) { - TranslateMessage (&msg); - DispatchMessage (&msg); - } - return 1; -} - -extern "C" -int XML_ProcessURL(XML_Parser parser, - const XML_Char *url, - unsigned flags) -{ - return processURL(parser, 0, url); -} diff --git a/Build/source/libs/jpeg/README b/Build/source/libs/jpeg/README deleted file mode 100644 index 86cc20669d6..00000000000 --- a/Build/source/libs/jpeg/README +++ /dev/null @@ -1,385 +0,0 @@ -The Independent JPEG Group's JPEG software -========================================== - -README for release 6b of 27-Mar-1998 -==================================== - -This distribution contains the sixth public release of the Independent JPEG -Group's free JPEG software. You are welcome to redistribute this software and -to use it for any purpose, subject to the conditions under LEGAL ISSUES, below. - -Serious users of this software (particularly those incorporating it into -larger programs) should contact IJG at jpeg-info@uunet.uu.net to be added to -our electronic mailing list. Mailing list members are notified of updates -and have a chance to participate in technical discussions, etc. - -This software is the work of Tom Lane, Philip Gladstone, Jim Boucher, -Lee Crocker, Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, -Guido Vollbeding, Ge' Weijers, and other members of the Independent JPEG -Group. - -IJG is not affiliated with the official ISO JPEG standards committee. - - -DOCUMENTATION ROADMAP -===================== - -This file contains the following sections: - -OVERVIEW General description of JPEG and the IJG software. -LEGAL ISSUES Copyright, lack of warranty, terms of distribution. -REFERENCES Where to learn more about JPEG. -ARCHIVE LOCATIONS Where to find newer versions of this software. -RELATED SOFTWARE Other stuff you should get. -FILE FORMAT WARS Software *not* to get. -TO DO Plans for future IJG releases. - -Other documentation files in the distribution are: - -User documentation: - install.doc How to configure and install the IJG software. - usage.doc Usage instructions for cjpeg, djpeg, jpegtran, - rdjpgcom, and wrjpgcom. - *.1 Unix-style man pages for programs (same info as usage.doc). - wizard.doc Advanced usage instructions for JPEG wizards only. - change.log Version-to-version change highlights. -Programmer and internal documentation: - libjpeg.doc How to use the JPEG library in your own programs. - example.c Sample code for calling the JPEG library. - structure.doc Overview of the JPEG library's internal structure. - filelist.doc Road map of IJG files. - coderules.doc Coding style rules --- please read if you contribute code. - -Please read at least the files install.doc and usage.doc. Useful information -can also be found in the JPEG FAQ (Frequently Asked Questions) article. See -ARCHIVE LOCATIONS below to find out where to obtain the FAQ article. - -If you want to understand how the JPEG code works, we suggest reading one or -more of the REFERENCES, then looking at the documentation files (in roughly -the order listed) before diving into the code. - - -OVERVIEW -======== - -This package contains C software to implement JPEG image compression and -decompression. JPEG (pronounced "jay-peg") is a standardized compression -method for full-color and gray-scale images. JPEG is intended for compressing -"real-world" scenes; line drawings, cartoons and other non-realistic images -are not its strong suit. JPEG is lossy, meaning that the output image is not -exactly identical to the input image. Hence you must not use JPEG if you -have to have identical output bits. However, on typical photographic images, -very good compression levels can be obtained with no visible change, and -remarkably high compression levels are possible if you can tolerate a -low-quality image. For more details, see the references, or just experiment -with various compression settings. - -This software implements JPEG baseline, extended-sequential, and progressive -compression processes. Provision is made for supporting all variants of these -processes, although some uncommon parameter settings aren't implemented yet. -For legal reasons, we are not distributing code for the arithmetic-coding -variants of JPEG; see LEGAL ISSUES. We have made no provision for supporting -the hierarchical or lossless processes defined in the standard. - -We provide a set of library routines for reading and writing JPEG image files, -plus two sample applications "cjpeg" and "djpeg", which use the library to -perform conversion between JPEG and some other popular image file formats. -The library is intended to be reused in other applications. - -In order to support file conversion and viewing software, we have included -considerable functionality beyond the bare JPEG coding/decoding capability; -for example, the color quantization modules are not strictly part of JPEG -decoding, but they are essential for output to colormapped file formats or -colormapped displays. These extra functions can be compiled out of the -library if not required for a particular application. We have also included -"jpegtran", a utility for lossless transcoding between different JPEG -processes, and "rdjpgcom" and "wrjpgcom", two simple applications for -inserting and extracting textual comments in JFIF files. - -The emphasis in designing this software has been on achieving portability and -flexibility, while also making it fast enough to be useful. In particular, -the software is not intended to be read as a tutorial on JPEG. (See the -REFERENCES section for introductory material.) Rather, it is intended to -be reliable, portable, industrial-strength code. We do not claim to have -achieved that goal in every aspect of the software, but we strive for it. - -We welcome the use of this software as a component of commercial products. -No royalty is required, but we do ask for an acknowledgement in product -documentation, as described under LEGAL ISSUES. - - -LEGAL ISSUES -============ - -In plain English: - -1. We don't promise that this software works. (But if you find any bugs, - please let us know!) -2. You can use this software for whatever you want. You don't have to pay us. -3. You may not pretend that you wrote this software. If you use it in a - program, you must acknowledge somewhere in your documentation that - you've used the IJG code. - -In legalese: - -The authors make NO WARRANTY or representation, either express or implied, -with respect to this software, its quality, accuracy, merchantability, or -fitness for a particular purpose. This software is provided "AS IS", and you, -its user, assume the entire risk as to its quality and accuracy. - -This software is copyright (C) 1991-1998, Thomas G. Lane. -All Rights Reserved except as specified below. - -Permission is hereby granted to use, copy, modify, and distribute this -software (or portions thereof) for any purpose, without fee, subject to these -conditions: -(1) If any part of the source code for this software is distributed, then this -README file must be included, with this copyright and no-warranty notice -unaltered; and any additions, deletions, or changes to the original files -must be clearly indicated in accompanying documentation. -(2) If only executable code is distributed, then the accompanying -documentation must state that "this software is based in part on the work of -the Independent JPEG Group". -(3) Permission for use of this software is granted only if the user accepts -full responsibility for any undesirable consequences; the authors accept -NO LIABILITY for damages of any kind. - -These conditions apply to any software derived from or based on the IJG code, -not just to the unmodified library. If you use our work, you ought to -acknowledge us. - -Permission is NOT granted for the use of any IJG author's name or company name -in advertising or publicity relating to this software or products derived from -it. This software may be referred to only as "the Independent JPEG Group's -software". - -We specifically permit and encourage the use of this software as the basis of -commercial products, provided that all warranty or liability claims are -assumed by the product vendor. - - -ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, -sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. -ansi2knr.c is NOT covered by the above copyright and conditions, but instead -by the usual distribution terms of the Free Software Foundation; principally, -that you must include source code if you redistribute it. (See the file -ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part -of any program generated from the IJG code, this does not limit you more than -the foregoing paragraphs do. - -The Unix configuration script "configure" was produced with GNU Autoconf. -It is copyright by the Free Software Foundation but is freely distributable. -The same holds for its supporting scripts (config.guess, config.sub, -ltconfig, ltmain.sh). Another support script, install-sh, is copyright -by M.I.T. but is also freely distributable. - -It appears that the arithmetic coding option of the JPEG spec is covered by -patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot -legally be used without obtaining one or more licenses. For this reason, -support for arithmetic coding has been removed from the free JPEG software. -(Since arithmetic coding provides only a marginal gain over the unpatented -Huffman mode, it is unlikely that very many implementations will support it.) -So far as we are aware, there are no patent restrictions on the remaining -code. - -The IJG distribution formerly included code to read and write GIF files. -To avoid entanglement with the Unisys LZW patent, GIF reading support has -been removed altogether, and the GIF writer has been simplified to produce -"uncompressed GIFs". This technique does not use the LZW algorithm; the -resulting GIF files are larger than usual, but are readable by all standard -GIF decoders. - -We are required to state that - "The Graphics Interchange Format(c) is the Copyright property of - CompuServe Incorporated. GIF(sm) is a Service Mark property of - CompuServe Incorporated." - - -REFERENCES -========== - -We highly recommend reading one or more of these references before trying to -understand the innards of the JPEG software. - -The best short technical introduction to the JPEG compression algorithm is - Wallace, Gregory K. "The JPEG Still Picture Compression Standard", - Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44. -(Adjacent articles in that issue discuss MPEG motion picture compression, -applications of JPEG, and related topics.) If you don't have the CACM issue -handy, a PostScript file containing a revised version of Wallace's article is -available at ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz. The file (actually -a preprint for an article that appeared in IEEE Trans. Consumer Electronics) -omits the sample images that appeared in CACM, but it includes corrections -and some added material. Note: the Wallace article is copyright ACM and IEEE, -and it may not be used for commercial purposes. - -A somewhat less technical, more leisurely introduction to JPEG can be found in -"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by -M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides -good explanations and example C code for a multitude of compression methods -including JPEG. It is an excellent source if you are comfortable reading C -code but don't know much about data compression in general. The book's JPEG -sample code is far from industrial-strength, but when you are ready to look -at a full implementation, you've got one here... - -The best full description of JPEG is the textbook "JPEG Still Image Data -Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published -by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. Price US$59.95, 638 pp. -The book includes the complete text of the ISO JPEG standards (DIS 10918-1 -and draft DIS 10918-2). This is by far the most complete exposition of JPEG -in existence, and we highly recommend it. - -The JPEG standard itself is not available electronically; you must order a -paper copy through ISO or ITU. (Unless you feel a need to own a certified -official copy, we recommend buying the Pennebaker and Mitchell book instead; -it's much cheaper and includes a great deal of useful explanatory material.) -In the USA, copies of the standard may be ordered from ANSI Sales at (212) -642-4900, or from Global Engineering Documents at (800) 854-7179. (ANSI -doesn't take credit card orders, but Global does.) It's not cheap: as of -1992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7% -shipping/handling. The standard is divided into two parts, Part 1 being the -actual specification, while Part 2 covers compliance testing methods. Part 1 -is titled "Digital Compression and Coding of Continuous-tone Still Images, -Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS -10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of -Continuous-tone Still Images, Part 2: Compliance testing" and has document -numbers ISO/IEC IS 10918-2, ITU-T T.83. - -Some extensions to the original JPEG standard are defined in JPEG Part 3, -a newer ISO standard numbered ISO/IEC IS 10918-3 and ITU-T T.84. IJG -currently does not support any Part 3 extensions. - -The JPEG standard does not specify all details of an interchangeable file -format. For the omitted details we follow the "JFIF" conventions, revision -1.02. A copy of the JFIF spec is available from: - Literature Department - C-Cube Microsystems, Inc. - 1778 McCarthy Blvd. - Milpitas, CA 95035 - phone (408) 944-6300, fax (408) 944-6314 -A PostScript version of this document is available by FTP at -ftp://ftp.uu.net/graphics/jpeg/jfif.ps.gz. There is also a plain text -version at ftp://ftp.uu.net/graphics/jpeg/jfif.txt.gz, but it is missing -the figures. - -The TIFF 6.0 file format specification can be obtained by FTP from -ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme -found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems. -IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6). -Instead, we recommend the JPEG design proposed by TIFF Technical Note #2 -(Compression tag 7). Copies of this Note can be obtained from ftp.sgi.com or -from ftp://ftp.uu.net/graphics/jpeg/. It is expected that the next revision -of the TIFF spec will replace the 6.0 JPEG design with the Note's design. -Although IJG's own code does not support TIFF/JPEG, the free libtiff library -uses our library to implement TIFF/JPEG per the Note. libtiff is available -from ftp://ftp.sgi.com/graphics/tiff/. - - -ARCHIVE LOCATIONS -================= - -The "official" archive site for this software is ftp.uu.net (Internet -address 192.48.96.9). The most recent released version can always be found -there in directory graphics/jpeg. This particular version will be archived -as ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz. If you don't have -direct Internet access, UUNET's archives are also available via UUCP; contact -help@uunet.uu.net for information on retrieving files that way. - -Numerous Internet sites maintain copies of the UUNET files. However, only -ftp.uu.net is guaranteed to have the latest official version. - -You can also obtain this software in DOS-compatible "zip" archive format from -the SimTel archives (ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/), or -on CompuServe in the Graphics Support forum (GO CIS:GRAPHSUP), library 12 -"JPEG Tools". Again, these versions may sometimes lag behind the ftp.uu.net -release. - -The JPEG FAQ (Frequently Asked Questions) article is a useful source of -general information about JPEG. It is updated constantly and therefore is -not included in this distribution. The FAQ is posted every two weeks to -Usenet newsgroups comp.graphics.misc, news.answers, and other groups. -It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/ -and other news.answers archive sites, including the official news.answers -archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/. -If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu -with body - send usenet/news.answers/jpeg-faq/part1 - send usenet/news.answers/jpeg-faq/part2 - - -RELATED SOFTWARE -================ - -Numerous viewing and image manipulation programs now support JPEG. (Quite a -few of them use this library to do so.) The JPEG FAQ described above lists -some of the more popular free and shareware viewers, and tells where to -obtain them on Internet. - -If you are on a Unix machine, we highly recommend Jef Poskanzer's free -PBMPLUS software, which provides many useful operations on PPM-format image -files. In particular, it can convert PPM images to and from a wide range of -other formats, thus making cjpeg/djpeg considerably more useful. The latest -version is distributed by the NetPBM group, and is available from numerous -sites, notably ftp://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/. -Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software is; -you are likely to have difficulty making it work on any non-Unix machine. - -A different free JPEG implementation, written by the PVRG group at Stanford, -is available from ftp://havefun.stanford.edu/pub/jpeg/. This program -is designed for research and experimentation rather than production use; -it is slower, harder to use, and less portable than the IJG code, but it -is easier to read and modify. Also, the PVRG code supports lossless JPEG, -which we do not. (On the other hand, it doesn't do progressive JPEG.) - - -FILE FORMAT WARS -================ - -Some JPEG programs produce files that are not compatible with our library. -The root of the problem is that the ISO JPEG committee failed to specify a -concrete file format. Some vendors "filled in the blanks" on their own, -creating proprietary formats that no one else could read. (For example, none -of the early commercial JPEG implementations for the Macintosh were able to -exchange compressed files.) - -The file format we have adopted is called JFIF (see REFERENCES). This format -has been agreed to by a number of major commercial JPEG vendors, and it has -become the de facto standard. JFIF is a minimal or "low end" representation. -We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF -Technical Note #2) for "high end" applications that need to record a lot of -additional data about an image. TIFF/JPEG is fairly new and not yet widely -supported, unfortunately. - -The upcoming JPEG Part 3 standard defines a file format called SPIFF. -SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should -be able to read the most common variant of SPIFF. SPIFF has some technical -advantages over JFIF, but its major claim to fame is simply that it is an -official standard rather than an informal one. At this point it is unclear -whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto -standard. IJG intends to support SPIFF once the standard is frozen, but we -have not decided whether it should become our default output format or not. -(In any case, our decoder will remain capable of reading JFIF indefinitely.) - -Various proprietary file formats incorporating JPEG compression also exist. -We have little or no sympathy for the existence of these formats. Indeed, -one of the original reasons for developing this free software was to help -force convergence on common, open format standards for JPEG files. Don't -use a proprietary file format! - - -TO DO -===== - -The major thrust for v7 will probably be improvement of visual quality. -The current method for scaling the quantization tables is known not to be -very good at low Q values. We also intend to investigate block boundary -smoothing, "poor man's variable quantization", and other means of improving -quality-vs-file-size performance without sacrificing compatibility. - -In future versions, we are considering supporting some of the upcoming JPEG -Part 3 extensions --- principally, variable quantization and the SPIFF file -format. - -As always, speeding things up is of great interest. - -Please send bug reports, offers of help, etc. to jpeg-info@uunet.uu.net. diff --git a/Build/source/libs/jpeg/ansi2knr.1 b/Build/source/libs/jpeg/ansi2knr.1 deleted file mode 100644 index f9ee5a631c2..00000000000 --- a/Build/source/libs/jpeg/ansi2knr.1 +++ /dev/null @@ -1,36 +0,0 @@ -.TH ANSI2KNR 1 "19 Jan 1996" -.SH NAME -ansi2knr \- convert ANSI C to Kernighan & Ritchie C -.SH SYNOPSIS -.I ansi2knr -[--varargs] input_file [output_file] -.SH DESCRIPTION -If no output_file is supplied, output goes to stdout. -.br -There are no error messages. -.sp -.I ansi2knr -recognizes function definitions by seeing a non-keyword identifier at the left -margin, followed by a left parenthesis, with a right parenthesis as the last -character on the line, and with a left brace as the first token on the -following line (ignoring possible intervening comments). It will recognize a -multi-line header provided that no intervening line ends with a left or right -brace or a semicolon. These algorithms ignore whitespace and comments, except -that the function name must be the first thing on the line. -.sp -The following constructs will confuse it: -.br - - Any other construct that starts at the left margin and follows the -above syntax (such as a macro or function call). -.br - - Some macros that tinker with the syntax of the function header. -.sp -The --varargs switch is obsolete, and is recognized only for -backwards compatibility. The present version of -.I ansi2knr -will always attempt to convert a ... argument to va_alist and va_dcl. -.SH AUTHOR -L. Peter Deutsch wrote the original ansi2knr and -continues to maintain the current version; most of the code in the current -version is his work. ansi2knr also includes contributions by Francois -Pinard and Jim Avera . diff --git a/Build/source/libs/jpeg/ansi2knr.c b/Build/source/libs/jpeg/ansi2knr.c deleted file mode 100644 index 4e05fc2d321..00000000000 --- a/Build/source/libs/jpeg/ansi2knr.c +++ /dev/null @@ -1,693 +0,0 @@ -/* ansi2knr.c */ -/* Convert ANSI C function definitions to K&R ("traditional C") syntax */ - -/* -ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY. No author or distributor accepts responsibility to anyone for the -consequences of using it or for whether it serves any particular purpose or -works at all, unless he says so in writing. Refer to the GNU General Public -License (the "GPL") for full details. - -Everyone is granted permission to copy, modify and redistribute ansi2knr, -but only under the conditions described in the GPL. A copy of this license -is supposed to have been given to you along with ansi2knr so you can know -your rights and responsibilities. It should be in a file named COPYLEFT. -[In the IJG distribution, the GPL appears below, not in a separate file.] -Among other things, the copyright notice and this notice must be preserved -on all copies. - -We explicitly state here what we believe is already implied by the GPL: if -the ansi2knr program is distributed as a separate set of sources and a -separate executable file which are aggregated on a storage medium together -with another program, this in itself does not bring the other program under -the GPL, nor does the mere fact that such a program or the procedures for -constructing it invoke the ansi2knr executable bring any other part of the -program under the GPL. -*/ - -/* ----------- Here is the GNU GPL file COPYLEFT, referred to above ---------- ------ These terms do NOT apply to the JPEG software itself; see README ------ - - GHOSTSCRIPT GENERAL PUBLIC LICENSE - (Clarified 11 Feb 1988) - - Copyright (C) 1988 Richard M. Stallman - Everyone is permitted to copy and distribute verbatim copies of this - license, but changing it is not allowed. You can also use this wording - to make the terms for other programs. - - The license agreements of most software companies keep you at the -mercy of those companies. By contrast, our general public license is -intended to give everyone the right to share Ghostscript. To make sure -that you get the rights we want you to have, we need to make -restrictions that forbid anyone to deny you these rights or to ask you -to surrender the rights. Hence this license agreement. - - Specifically, we want to make sure that you have the right to give -away copies of Ghostscript, that you receive source code or else can get -it if you want it, that you can change Ghostscript or use pieces of it -in new free programs, and that you know you can do these things. - - To make sure that everyone has such rights, we have to forbid you to -deprive anyone else of these rights. For example, if you distribute -copies of Ghostscript, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must tell them their rights. - - Also, for our own protection, we must make certain that everyone finds -out that there is no warranty for Ghostscript. If Ghostscript is -modified by someone else and passed on, we want its recipients to know -that what they have is not what we distributed, so that any problems -introduced by others will not reflect on our reputation. - - Therefore we (Richard M. Stallman and the Free Software Foundation, -Inc.) make the following terms which say what you must do to be allowed -to distribute or change Ghostscript. - - - COPYING POLICIES - - 1. You may copy and distribute verbatim copies of Ghostscript source -code as you receive it, in any medium, provided that you conspicuously -and appropriately publish on each copy a valid copyright and license -notice "Copyright (C) 1989 Aladdin Enterprises. All rights reserved. -Distributed by Free Software Foundation, Inc." (or with whatever year is -appropriate); keep intact the notices on all files that refer to this -License Agreement and to the absence of any warranty; and give any other -recipients of the Ghostscript program a copy of this License Agreement -along with the program. You may charge a distribution fee for the -physical act of transferring a copy. - - 2. You may modify your copy or copies of Ghostscript or any portion of -it, and copy and distribute such modifications under the terms of -Paragraph 1 above, provided that you also do the following: - - a) cause the modified files to carry prominent notices stating - that you changed the files and the date of any change; and - - b) cause the whole of any work that you distribute or publish, - that in whole or in part contains or is a derivative of Ghostscript - or any part thereof, to be licensed at no charge to all third - parties on terms identical to those contained in this License - Agreement (except that you may choose to grant more extensive - warranty protection to some or all third parties, at your option). - - c) You may charge a distribution fee for the physical act of - transferring a copy, and you may at your option offer warranty - protection in exchange for a fee. - -Mere aggregation of another unrelated program with this program (or its -derivative) on a volume of a storage or distribution medium does not bring -the other program under the scope of these terms. - - 3. You may copy and distribute Ghostscript (or a portion or derivative -of it, under Paragraph 2) in object code or executable form under the -terms of Paragraphs 1 and 2 above provided that you also do one of the -following: - - a) accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of - Paragraphs 1 and 2 above; or, - - b) accompany it with a written offer, valid for at least three - years, to give any third party free (except for a nominal - shipping charge) a complete machine-readable copy of the - corresponding source code, to be distributed under the terms of - Paragraphs 1 and 2 above; or, - - c) accompany it with the information you received as to where the - corresponding source code may be obtained. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form alone.) - -For an executable file, complete source code means all the source code for -all modules it contains; but, as a special exception, it need not include -source code for modules which are standard libraries that accompany the -operating system on which the executable file runs. - - 4. You may not copy, sublicense, distribute or transfer Ghostscript -except as expressly provided under this License Agreement. Any attempt -otherwise to copy, sublicense, distribute or transfer Ghostscript is -void and your rights to use the program under this License agreement -shall be automatically terminated. However, parties who have received -computer software programs from you with this License Agreement will not -have their licenses terminated so long as such parties remain in full -compliance. - - 5. If you wish to incorporate parts of Ghostscript into other free -programs whose distribution conditions are different, write to the Free -Software Foundation at 675 Mass Ave, Cambridge, MA 02139. We have not -yet worked out a simple rule that can be stated here, but we will often -permit this. We will be guided by the two goals of preserving the free -status of all derivatives of our free software and of promoting the -sharing and reuse of software. - -Your comments and suggestions about our licensing policies and our -software are welcome! Please contact the Free Software Foundation, -Inc., 675 Mass Ave, Cambridge, MA 02139, or call (617) 876-3296. - - NO WARRANTY - - BECAUSE GHOSTSCRIPT IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY -NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT -WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC, RICHARD -M. STALLMAN, ALADDIN ENTERPRISES, L. PETER DEUTSCH, AND/OR OTHER PARTIES -PROVIDE GHOSTSCRIPT "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER -EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE -ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF GHOSTSCRIPT IS WITH -YOU. SHOULD GHOSTSCRIPT PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL -NECESSARY SERVICING, REPAIR OR CORRECTION. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M. -STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., L. PETER DEUTSCH, ALADDIN -ENTERPRISES, AND/OR ANY OTHER PARTY WHO MAY MODIFY AND REDISTRIBUTE -GHOSTSCRIPT AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING -ANY LOST PROFITS, LOST MONIES, OR OTHER SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE -(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED -INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A FAILURE OF THE -PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) GHOSTSCRIPT, EVEN IF YOU -HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM -BY ANY OTHER PARTY. - --------------------- End of file COPYLEFT ------------------------------ -*/ - -/* - * Usage: - ansi2knr input_file [output_file] - * If no output_file is supplied, output goes to stdout. - * There are no error messages. - * - * ansi2knr recognizes function definitions by seeing a non-keyword - * identifier at the left margin, followed by a left parenthesis, - * with a right parenthesis as the last character on the line, - * and with a left brace as the first token on the following line - * (ignoring possible intervening comments). - * It will recognize a multi-line header provided that no intervening - * line ends with a left or right brace or a semicolon. - * These algorithms ignore whitespace and comments, except that - * the function name must be the first thing on the line. - * The following constructs will confuse it: - * - Any other construct that starts at the left margin and - * follows the above syntax (such as a macro or function call). - * - Some macros that tinker with the syntax of the function header. - */ - -/* - * The original and principal author of ansi2knr is L. Peter Deutsch - * . Other authors are noted in the change history - * that follows (in reverse chronological order): - lpd 96-01-21 added code to cope with not HAVE_CONFIG_H and with - compilers that don't understand void, as suggested by - Tom Lane - lpd 96-01-15 changed to require that the first non-comment token - on the line following a function header be a left brace, - to reduce sensitivity to macros, as suggested by Tom Lane - - lpd 95-06-22 removed #ifndefs whose sole purpose was to define - undefined preprocessor symbols as 0; changed all #ifdefs - for configuration symbols to #ifs - lpd 95-04-05 changed copyright notice to make it clear that - including ansi2knr in a program does not bring the entire - program under the GPL - lpd 94-12-18 added conditionals for systems where ctype macros - don't handle 8-bit characters properly, suggested by - Francois Pinard ; - removed --varargs switch (this is now the default) - lpd 94-10-10 removed CONFIG_BROKETS conditional - lpd 94-07-16 added some conditionals to help GNU `configure', - suggested by Francois Pinard ; - properly erase prototype args in function parameters, - contributed by Jim Avera ; - correct error in writeblanks (it shouldn't erase EOLs) - lpd 89-xx-xx original version - */ - -/* Most of the conditionals here are to make ansi2knr work with */ -/* or without the GNU configure machinery. */ - -#if HAVE_CONFIG_H -# include -#endif - -#include -#include - -#if HAVE_CONFIG_H - -/* - For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h). - This will define HAVE_CONFIG_H and so, activate the following lines. - */ - -# if STDC_HEADERS || HAVE_STRING_H -# include -# else -# include -# endif - -#else /* not HAVE_CONFIG_H */ - -/* Otherwise do it the hard way */ - -# ifdef BSD -# include -# else -# ifdef VMS - extern int strlen(), strncmp(); -# else -# include -# endif -# endif - -#endif /* not HAVE_CONFIG_H */ - -#if STDC_HEADERS -# include -#else -/* - malloc and free should be declared in stdlib.h, - but if you've got a K&R compiler, they probably aren't. - */ -# ifdef MSDOS -# include -# else -# ifdef VMS - extern char *malloc(); - extern void free(); -# else - extern char *malloc(); - extern int free(); -# endif -# endif - -#endif - -/* - * The ctype macros don't always handle 8-bit characters correctly. - * Compensate for this here. - */ -#ifdef isascii -# undef HAVE_ISASCII /* just in case */ -# define HAVE_ISASCII 1 -#else -#endif -#if STDC_HEADERS || !HAVE_ISASCII -# define is_ascii(c) 1 -#else -# define is_ascii(c) isascii(c) -#endif - -#define is_space(c) (is_ascii(c) && isspace(c)) -#define is_alpha(c) (is_ascii(c) && isalpha(c)) -#define is_alnum(c) (is_ascii(c) && isalnum(c)) - -/* Scanning macros */ -#define isidchar(ch) (is_alnum(ch) || (ch) == '_') -#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_') - -/* Forward references */ -char *skipspace(); -int writeblanks(); -int test1(); -int convert1(); - -/* The main program */ -int -main(argc, argv) - int argc; - char *argv[]; -{ FILE *in, *out; -#define bufsize 5000 /* arbitrary size */ - char *buf; - char *line; - char *more; - /* - * In previous versions, ansi2knr recognized a --varargs switch. - * If this switch was supplied, ansi2knr would attempt to convert - * a ... argument to va_alist and va_dcl; if this switch was not - * supplied, ansi2knr would simply drop any such arguments. - * Now, ansi2knr always does this conversion, and we only - * check for this switch for backward compatibility. - */ - int convert_varargs = 1; - - if ( argc > 1 && argv[1][0] == '-' ) - { if ( !strcmp(argv[1], "--varargs") ) - { convert_varargs = 1; - argc--; - argv++; - } - else - { fprintf(stderr, "Unrecognized switch: %s\n", argv[1]); - exit(1); - } - } - switch ( argc ) - { - default: - printf("Usage: ansi2knr input_file [output_file]\n"); - exit(0); - case 2: - out = stdout; - break; - case 3: - out = fopen(argv[2], "w"); - if ( out == NULL ) - { fprintf(stderr, "Cannot open output file %s\n", argv[2]); - exit(1); - } - } - in = fopen(argv[1], "r"); - if ( in == NULL ) - { fprintf(stderr, "Cannot open input file %s\n", argv[1]); - exit(1); - } - fprintf(out, "#line 1 \"%s\"\n", argv[1]); - buf = malloc(bufsize); - line = buf; - while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL ) - { -test: line += strlen(line); - switch ( test1(buf) ) - { - case 2: /* a function header */ - convert1(buf, out, 1, convert_varargs); - break; - case 1: /* a function */ - /* Check for a { at the start of the next line. */ - more = ++line; -f: if ( line >= buf + (bufsize - 1) ) /* overflow check */ - goto wl; - if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL ) - goto wl; - switch ( *skipspace(more, 1) ) - { - case '{': - /* Definitely a function header. */ - convert1(buf, out, 0, convert_varargs); - fputs(more, out); - break; - case 0: - /* The next line was blank or a comment: */ - /* keep scanning for a non-comment. */ - line += strlen(line); - goto f; - default: - /* buf isn't a function header, but */ - /* more might be. */ - fputs(buf, out); - strcpy(buf, more); - line = buf; - goto test; - } - break; - case -1: /* maybe the start of a function */ - if ( line != buf + (bufsize - 1) ) /* overflow check */ - continue; - /* falls through */ - default: /* not a function */ -wl: fputs(buf, out); - break; - } - line = buf; - } - if ( line != buf ) - fputs(buf, out); - free(buf); - fclose(out); - fclose(in); - return 0; -} - -/* Skip over space and comments, in either direction. */ -char * -skipspace(p, dir) - register char *p; - register int dir; /* 1 for forward, -1 for backward */ -{ for ( ; ; ) - { while ( is_space(*p) ) - p += dir; - if ( !(*p == '/' && p[dir] == '*') ) - break; - p += dir; p += dir; - while ( !(*p == '*' && p[dir] == '/') ) - { if ( *p == 0 ) - return p; /* multi-line comment?? */ - p += dir; - } - p += dir; p += dir; - } - return p; -} - -/* - * Write blanks over part of a string. - * Don't overwrite end-of-line characters. - */ -int -writeblanks(start, end) - char *start; - char *end; -{ char *p; - for ( p = start; p < end; p++ ) - if ( *p != '\r' && *p != '\n' ) - *p = ' '; - return 0; -} - -/* - * Test whether the string in buf is a function definition. - * The string may contain and/or end with a newline. - * Return as follows: - * 0 - definitely not a function definition; - * 1 - definitely a function definition; - * 2 - definitely a function prototype (NOT USED); - * -1 - may be the beginning of a function definition, - * append another line and look again. - * The reason we don't attempt to convert function prototypes is that - * Ghostscript's declaration-generating macros look too much like - * prototypes, and confuse the algorithms. - */ -int -test1(buf) - char *buf; -{ register char *p = buf; - char *bend; - char *endfn; - int contin; - - if ( !isidfirstchar(*p) ) - return 0; /* no name at left margin */ - bend = skipspace(buf + strlen(buf) - 1, -1); - switch ( *bend ) - { - case ';': contin = 0 /*2*/; break; - case ')': contin = 1; break; - case '{': return 0; /* not a function */ - case '}': return 0; /* not a function */ - default: contin = -1; - } - while ( isidchar(*p) ) - p++; - endfn = p; - p = skipspace(p, 1); - if ( *p++ != '(' ) - return 0; /* not a function */ - p = skipspace(p, 1); - if ( *p == ')' ) - return 0; /* no parameters */ - /* Check that the apparent function name isn't a keyword. */ - /* We only need to check for keywords that could be followed */ - /* by a left parenthesis (which, unfortunately, is most of them). */ - { static char *words[] = - { "asm", "auto", "case", "char", "const", "double", - "extern", "float", "for", "if", "int", "long", - "register", "return", "short", "signed", "sizeof", - "static", "switch", "typedef", "unsigned", - "void", "volatile", "while", 0 - }; - char **key = words; - char *kp; - int len = endfn - buf; - - while ( (kp = *key) != 0 ) - { if ( strlen(kp) == len && !strncmp(kp, buf, len) ) - return 0; /* name is a keyword */ - key++; - } - } - return contin; -} - -/* Convert a recognized function definition or header to K&R syntax. */ -int -convert1(buf, out, header, convert_varargs) - char *buf; - FILE *out; - int header; /* Boolean */ - int convert_varargs; /* Boolean */ -{ char *endfn; - register char *p; - char **breaks; - unsigned num_breaks = 2; /* for testing */ - char **btop; - char **bp; - char **ap; - char *vararg = 0; - - /* Pre-ANSI implementations don't agree on whether strchr */ - /* is called strchr or index, so we open-code it here. */ - for ( endfn = buf; *(endfn++) != '('; ) - ; -top: p = endfn; - breaks = (char **)malloc(sizeof(char *) * num_breaks * 2); - if ( breaks == 0 ) - { /* Couldn't allocate break table, give up */ - fprintf(stderr, "Unable to allocate break table!\n"); - fputs(buf, out); - return -1; - } - btop = breaks + num_breaks * 2 - 2; - bp = breaks; - /* Parse the argument list */ - do - { int level = 0; - char *lp = NULL; - char *rp; - char *end = NULL; - - if ( bp >= btop ) - { /* Filled up break table. */ - /* Allocate a bigger one and start over. */ - free((char *)breaks); - num_breaks <<= 1; - goto top; - } - *bp++ = p; - /* Find the end of the argument */ - for ( ; end == NULL; p++ ) - { switch(*p) - { - case ',': - if ( !level ) end = p; - break; - case '(': - if ( !level ) lp = p; - level++; - break; - case ')': - if ( --level < 0 ) end = p; - else rp = p; - break; - case '/': - p = skipspace(p, 1) - 1; - break; - default: - ; - } - } - /* Erase any embedded prototype parameters. */ - if ( lp ) - writeblanks(lp + 1, rp); - p--; /* back up over terminator */ - /* Find the name being declared. */ - /* This is complicated because of procedure and */ - /* array modifiers. */ - for ( ; ; ) - { p = skipspace(p - 1, -1); - switch ( *p ) - { - case ']': /* skip array dimension(s) */ - case ')': /* skip procedure args OR name */ - { int level = 1; - while ( level ) - switch ( *--p ) - { - case ']': case ')': level++; break; - case '[': case '(': level--; break; - case '/': p = skipspace(p, -1) + 1; break; - default: ; - } - } - if ( *p == '(' && *skipspace(p + 1, 1) == '*' ) - { /* We found the name being declared */ - while ( !isidfirstchar(*p) ) - p = skipspace(p, 1) + 1; - goto found; - } - break; - default: - goto found; - } - } -found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' ) - { if ( convert_varargs ) - { *bp++ = "va_alist"; - vararg = p-2; - } - else - { p++; - if ( bp == breaks + 1 ) /* sole argument */ - writeblanks(breaks[0], p); - else - writeblanks(bp[-1] - 1, p); - bp--; - } - } - else - { while ( isidchar(*p) ) p--; - *bp++ = p+1; - } - p = end; - } - while ( *p++ == ',' ); - *bp = p; - /* Make a special check for 'void' arglist */ - if ( bp == breaks+2 ) - { p = skipspace(breaks[0], 1); - if ( !strncmp(p, "void", 4) ) - { p = skipspace(p+4, 1); - if ( p == breaks[2] - 1 ) - { bp = breaks; /* yup, pretend arglist is empty */ - writeblanks(breaks[0], p + 1); - } - } - } - /* Put out the function name and left parenthesis. */ - p = buf; - while ( p != endfn ) putc(*p, out), p++; - /* Put out the declaration. */ - if ( header ) - { fputs(");", out); - for ( p = breaks[0]; *p; p++ ) - if ( *p == '\r' || *p == '\n' ) - putc(*p, out); - } - else - { for ( ap = breaks+1; ap < bp; ap += 2 ) - { p = *ap; - while ( isidchar(*p) ) - putc(*p, out), p++; - if ( ap < bp - 1 ) - fputs(", ", out); - } - fputs(") ", out); - /* Put out the argument declarations */ - for ( ap = breaks+2; ap <= bp; ap += 2 ) - (*ap)[-1] = ';'; - if ( vararg != 0 ) - { *vararg = 0; - fputs(breaks[0], out); /* any prior args */ - fputs("va_dcl", out); /* the final arg */ - fputs(bp[0], out); - } - else - fputs(breaks[0], out); - } - free((char *)breaks); - return 0; -} diff --git a/Build/source/libs/jpeg/cderror.h b/Build/source/libs/jpeg/cderror.h deleted file mode 100644 index 70435e161c0..00000000000 --- a/Build/source/libs/jpeg/cderror.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * cderror.h - * - * Copyright (C) 1994-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file defines the error and message codes for the cjpeg/djpeg - * applications. These strings are not needed as part of the JPEG library - * proper. - * Edit this file to add new codes, or to translate the message strings to - * some other language. - */ - -/* - * To define the enum list of message codes, include this file without - * defining macro JMESSAGE. To create a message string table, include it - * again with a suitable JMESSAGE definition (see jerror.c for an example). - */ -#ifndef JMESSAGE -#ifndef CDERROR_H -#define CDERROR_H -/* First time through, define the enum list */ -#define JMAKE_ENUM_LIST -#else -/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */ -#define JMESSAGE(code,string) -#endif /* CDERROR_H */ -#endif /* JMESSAGE */ - -#ifdef JMAKE_ENUM_LIST - -typedef enum { - -#define JMESSAGE(code,string) code , - -#endif /* JMAKE_ENUM_LIST */ - -JMESSAGE(JMSG_FIRSTADDONCODE=1000, NULL) /* Must be first entry! */ - -#ifdef BMP_SUPPORTED -JMESSAGE(JERR_BMP_BADCMAP, "Unsupported BMP colormap format") -JMESSAGE(JERR_BMP_BADDEPTH, "Only 8- and 24-bit BMP files are supported") -JMESSAGE(JERR_BMP_BADHEADER, "Invalid BMP file: bad header length") -JMESSAGE(JERR_BMP_BADPLANES, "Invalid BMP file: biPlanes not equal to 1") -JMESSAGE(JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB") -JMESSAGE(JERR_BMP_COMPRESSED, "Sorry, compressed BMPs not yet supported") -JMESSAGE(JERR_BMP_NOT, "Not a BMP file - does not start with BM") -JMESSAGE(JTRC_BMP, "%ux%u 24-bit BMP image") -JMESSAGE(JTRC_BMP_MAPPED, "%ux%u 8-bit colormapped BMP image") -JMESSAGE(JTRC_BMP_OS2, "%ux%u 24-bit OS2 BMP image") -JMESSAGE(JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image") -#endif /* BMP_SUPPORTED */ - -#ifdef GIF_SUPPORTED -JMESSAGE(JERR_GIF_BUG, "GIF output got confused") -JMESSAGE(JERR_GIF_CODESIZE, "Bogus GIF codesize %d") -JMESSAGE(JERR_GIF_COLORSPACE, "GIF output must be grayscale or RGB") -JMESSAGE(JERR_GIF_IMAGENOTFOUND, "Too few images in GIF file") -JMESSAGE(JERR_GIF_NOT, "Not a GIF file") -JMESSAGE(JTRC_GIF, "%ux%ux%d GIF image") -JMESSAGE(JTRC_GIF_BADVERSION, - "Warning: unexpected GIF version number '%c%c%c'") -JMESSAGE(JTRC_GIF_EXTENSION, "Ignoring GIF extension block of type 0x%02x") -JMESSAGE(JTRC_GIF_NONSQUARE, "Caution: nonsquare pixels in input") -JMESSAGE(JWRN_GIF_BADDATA, "Corrupt data in GIF file") -JMESSAGE(JWRN_GIF_CHAR, "Bogus char 0x%02x in GIF file, ignoring") -JMESSAGE(JWRN_GIF_ENDCODE, "Premature end of GIF image") -JMESSAGE(JWRN_GIF_NOMOREDATA, "Ran out of GIF bits") -#endif /* GIF_SUPPORTED */ - -#ifdef PPM_SUPPORTED -JMESSAGE(JERR_PPM_COLORSPACE, "PPM output must be grayscale or RGB") -JMESSAGE(JERR_PPM_NONNUMERIC, "Nonnumeric data in PPM file") -JMESSAGE(JERR_PPM_NOT, "Not a PPM/PGM file") -JMESSAGE(JTRC_PGM, "%ux%u PGM image") -JMESSAGE(JTRC_PGM_TEXT, "%ux%u text PGM image") -JMESSAGE(JTRC_PPM, "%ux%u PPM image") -JMESSAGE(JTRC_PPM_TEXT, "%ux%u text PPM image") -#endif /* PPM_SUPPORTED */ - -#ifdef RLE_SUPPORTED -JMESSAGE(JERR_RLE_BADERROR, "Bogus error code from RLE library") -JMESSAGE(JERR_RLE_COLORSPACE, "RLE output must be grayscale or RGB") -JMESSAGE(JERR_RLE_DIMENSIONS, "Image dimensions (%ux%u) too large for RLE") -JMESSAGE(JERR_RLE_EMPTY, "Empty RLE file") -JMESSAGE(JERR_RLE_EOF, "Premature EOF in RLE header") -JMESSAGE(JERR_RLE_MEM, "Insufficient memory for RLE header") -JMESSAGE(JERR_RLE_NOT, "Not an RLE file") -JMESSAGE(JERR_RLE_TOOMANYCHANNELS, "Cannot handle %d output channels for RLE") -JMESSAGE(JERR_RLE_UNSUPPORTED, "Cannot handle this RLE setup") -JMESSAGE(JTRC_RLE, "%ux%u full-color RLE file") -JMESSAGE(JTRC_RLE_FULLMAP, "%ux%u full-color RLE file with map of length %d") -JMESSAGE(JTRC_RLE_GRAY, "%ux%u grayscale RLE file") -JMESSAGE(JTRC_RLE_MAPGRAY, "%ux%u grayscale RLE file with map of length %d") -JMESSAGE(JTRC_RLE_MAPPED, "%ux%u colormapped RLE file with map of length %d") -#endif /* RLE_SUPPORTED */ - -#ifdef TARGA_SUPPORTED -JMESSAGE(JERR_TGA_BADCMAP, "Unsupported Targa colormap format") -JMESSAGE(JERR_TGA_BADPARMS, "Invalid or unsupported Targa file") -JMESSAGE(JERR_TGA_COLORSPACE, "Targa output must be grayscale or RGB") -JMESSAGE(JTRC_TGA, "%ux%u RGB Targa image") -JMESSAGE(JTRC_TGA_GRAY, "%ux%u grayscale Targa image") -JMESSAGE(JTRC_TGA_MAPPED, "%ux%u colormapped Targa image") -#else -JMESSAGE(JERR_TGA_NOTCOMP, "Targa support was not compiled") -#endif /* TARGA_SUPPORTED */ - -JMESSAGE(JERR_BAD_CMAP_FILE, - "Color map file is invalid or of unsupported format") -JMESSAGE(JERR_TOO_MANY_COLORS, - "Output file format cannot handle %d colormap entries") -JMESSAGE(JERR_UNGETC_FAILED, "ungetc failed") -#ifdef TARGA_SUPPORTED -JMESSAGE(JERR_UNKNOWN_FORMAT, - "Unrecognized input file format --- perhaps you need -targa") -#else -JMESSAGE(JERR_UNKNOWN_FORMAT, "Unrecognized input file format") -#endif -JMESSAGE(JERR_UNSUPPORTED_FORMAT, "Unsupported output file format") - -#ifdef JMAKE_ENUM_LIST - - JMSG_LASTADDONCODE -} ADDON_MESSAGE_CODE; - -#undef JMAKE_ENUM_LIST -#endif /* JMAKE_ENUM_LIST */ - -/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */ -#undef JMESSAGE diff --git a/Build/source/libs/jpeg/cdjpeg.c b/Build/source/libs/jpeg/cdjpeg.c deleted file mode 100644 index b6250ff97cb..00000000000 --- a/Build/source/libs/jpeg/cdjpeg.c +++ /dev/null @@ -1,181 +0,0 @@ -/* - * cdjpeg.c - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains common support routines used by the IJG application - * programs (cjpeg, djpeg, jpegtran). - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ -#include /* to declare isupper(), tolower() */ -#ifdef NEED_SIGNAL_CATCHER -#include /* to declare signal() */ -#endif -#ifdef USE_SETMODE -#include /* to declare setmode()'s parameter macros */ -/* If you have setmode() but not , just delete this line: */ -#include /* to declare setmode() */ -#endif - - -/* - * Signal catcher to ensure that temporary files are removed before aborting. - * NB: for Amiga Manx C this is actually a global routine named _abort(); - * we put "#define signal_catcher _abort" in jconfig.h. Talk about bogus... - */ - -#ifdef NEED_SIGNAL_CATCHER - -static j_common_ptr sig_cinfo; - -void /* must be global for Manx C */ -signal_catcher (int signum) -{ - if (sig_cinfo != NULL) { - if (sig_cinfo->err != NULL) /* turn off trace output */ - sig_cinfo->err->trace_level = 0; - jpeg_destroy(sig_cinfo); /* clean up memory allocation & temp files */ - } - exit(EXIT_FAILURE); -} - - -GLOBAL(void) -enable_signal_catcher (j_common_ptr cinfo) -{ - sig_cinfo = cinfo; -#ifdef SIGINT /* not all systems have SIGINT */ - signal(SIGINT, signal_catcher); -#endif -#ifdef SIGTERM /* not all systems have SIGTERM */ - signal(SIGTERM, signal_catcher); -#endif -} - -#endif - - -/* - * Optional progress monitor: display a percent-done figure on stderr. - */ - -#ifdef PROGRESS_REPORT - -METHODDEF(void) -progress_monitor (j_common_ptr cinfo) -{ - cd_progress_ptr prog = (cd_progress_ptr) cinfo->progress; - int total_passes = prog->pub.total_passes + prog->total_extra_passes; - int percent_done = (int) (prog->pub.pass_counter*100L/prog->pub.pass_limit); - - if (percent_done != prog->percent_done) { - prog->percent_done = percent_done; - if (total_passes > 1) { - fprintf(stderr, "\rPass %d/%d: %3d%% ", - prog->pub.completed_passes + prog->completed_extra_passes + 1, - total_passes, percent_done); - } else { - fprintf(stderr, "\r %3d%% ", percent_done); - } - fflush(stderr); - } -} - - -GLOBAL(void) -start_progress_monitor (j_common_ptr cinfo, cd_progress_ptr progress) -{ - /* Enable progress display, unless trace output is on */ - if (cinfo->err->trace_level == 0) { - progress->pub.progress_monitor = progress_monitor; - progress->completed_extra_passes = 0; - progress->total_extra_passes = 0; - progress->percent_done = -1; - cinfo->progress = &progress->pub; - } -} - - -GLOBAL(void) -end_progress_monitor (j_common_ptr cinfo) -{ - /* Clear away progress display */ - if (cinfo->err->trace_level == 0) { - fprintf(stderr, "\r \r"); - fflush(stderr); - } -} - -#endif - - -/* - * Case-insensitive matching of possibly-abbreviated keyword switches. - * keyword is the constant keyword (must be lower case already), - * minchars is length of minimum legal abbreviation. - */ - -GLOBAL(boolean) -keymatch (char * arg, const char * keyword, int minchars) -{ - register int ca, ck; - register int nmatched = 0; - - while ((ca = *arg++) != '\0') { - if ((ck = *keyword++) == '\0') - return FALSE; /* arg longer than keyword, no good */ - if (isupper(ca)) /* force arg to lcase (assume ck is already) */ - ca = tolower(ca); - if (ca != ck) - return FALSE; /* no good */ - nmatched++; /* count matched characters */ - } - /* reached end of argument; fail if it's too short for unique abbrev */ - if (nmatched < minchars) - return FALSE; - return TRUE; /* A-OK */ -} - - -/* - * Routines to establish binary I/O mode for stdin and stdout. - * Non-Unix systems often require some hacking to get out of text mode. - */ - -GLOBAL(FILE *) -read_stdin (void) -{ - FILE * input_file = stdin; - -#ifdef USE_SETMODE /* need to hack file mode? */ - setmode(fileno(stdin), O_BINARY); -#endif -#ifdef USE_FDOPEN /* need to re-open in binary mode? */ - if ((input_file = fdopen(fileno(stdin), READ_BINARY)) == NULL) { - fprintf(stderr, "Cannot reopen stdin\n"); - exit(EXIT_FAILURE); - } -#endif - return input_file; -} - - -GLOBAL(FILE *) -write_stdout (void) -{ - FILE * output_file = stdout; - -#ifdef USE_SETMODE /* need to hack file mode? */ - setmode(fileno(stdout), O_BINARY); -#endif -#ifdef USE_FDOPEN /* need to re-open in binary mode? */ - if ((output_file = fdopen(fileno(stdout), WRITE_BINARY)) == NULL) { - fprintf(stderr, "Cannot reopen stdout\n"); - exit(EXIT_FAILURE); - } -#endif - return output_file; -} diff --git a/Build/source/libs/jpeg/cdjpeg.h b/Build/source/libs/jpeg/cdjpeg.h deleted file mode 100644 index 2b387b6e5fa..00000000000 --- a/Build/source/libs/jpeg/cdjpeg.h +++ /dev/null @@ -1,184 +0,0 @@ -/* - * cdjpeg.h - * - * Copyright (C) 1994-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains common declarations for the sample applications - * cjpeg and djpeg. It is NOT used by the core JPEG library. - */ - -#define JPEG_CJPEG_DJPEG /* define proper options in jconfig.h */ -#define JPEG_INTERNAL_OPTIONS /* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */ -#include "jinclude.h" -#include "jpeglib.h" -#include "jerror.h" /* get library error codes too */ -#include "cderror.h" /* get application-specific error codes */ - - -/* - * Object interface for cjpeg's source file decoding modules - */ - -typedef struct cjpeg_source_struct * cjpeg_source_ptr; - -struct cjpeg_source_struct { - JMETHOD(void, start_input, (j_compress_ptr cinfo, - cjpeg_source_ptr sinfo)); - JMETHOD(JDIMENSION, get_pixel_rows, (j_compress_ptr cinfo, - cjpeg_source_ptr sinfo)); - JMETHOD(void, finish_input, (j_compress_ptr cinfo, - cjpeg_source_ptr sinfo)); - - FILE *input_file; - - JSAMPARRAY buffer; - JDIMENSION buffer_height; -}; - - -/* - * Object interface for djpeg's output file encoding modules - */ - -typedef struct djpeg_dest_struct * djpeg_dest_ptr; - -struct djpeg_dest_struct { - /* start_output is called after jpeg_start_decompress finishes. - * The color map will be ready at this time, if one is needed. - */ - JMETHOD(void, start_output, (j_decompress_ptr cinfo, - djpeg_dest_ptr dinfo)); - /* Emit the specified number of pixel rows from the buffer. */ - JMETHOD(void, put_pixel_rows, (j_decompress_ptr cinfo, - djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied)); - /* Finish up at the end of the image. */ - JMETHOD(void, finish_output, (j_decompress_ptr cinfo, - djpeg_dest_ptr dinfo)); - - /* Target file spec; filled in by djpeg.c after object is created. */ - FILE * output_file; - - /* Output pixel-row buffer. Created by module init or start_output. - * Width is cinfo->output_width * cinfo->output_components; - * height is buffer_height. - */ - JSAMPARRAY buffer; - JDIMENSION buffer_height; -}; - - -/* - * cjpeg/djpeg may need to perform extra passes to convert to or from - * the source/destination file format. The JPEG library does not know - * about these passes, but we'd like them to be counted by the progress - * monitor. We use an expanded progress monitor object to hold the - * additional pass count. - */ - -struct cdjpeg_progress_mgr { - struct jpeg_progress_mgr pub; /* fields known to JPEG library */ - int completed_extra_passes; /* extra passes completed */ - int total_extra_passes; /* total extra */ - /* last printed percentage stored here to avoid multiple printouts */ - int percent_done; -}; - -typedef struct cdjpeg_progress_mgr * cd_progress_ptr; - - -/* Short forms of external names for systems with brain-damaged linkers. */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jinit_read_bmp jIRdBMP -#define jinit_write_bmp jIWrBMP -#define jinit_read_gif jIRdGIF -#define jinit_write_gif jIWrGIF -#define jinit_read_ppm jIRdPPM -#define jinit_write_ppm jIWrPPM -#define jinit_read_rle jIRdRLE -#define jinit_write_rle jIWrRLE -#define jinit_read_targa jIRdTarga -#define jinit_write_targa jIWrTarga -#define read_quant_tables RdQTables -#define read_scan_script RdScnScript -#define set_quant_slots SetQSlots -#define set_sample_factors SetSFacts -#define read_color_map RdCMap -#define enable_signal_catcher EnSigCatcher -#define start_progress_monitor StProgMon -#define end_progress_monitor EnProgMon -#define read_stdin RdStdin -#define write_stdout WrStdout -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - -/* Module selection routines for I/O modules. */ - -EXTERN(cjpeg_source_ptr) jinit_read_bmp JPP((j_compress_ptr cinfo)); -EXTERN(djpeg_dest_ptr) jinit_write_bmp JPP((j_decompress_ptr cinfo, - boolean is_os2)); -EXTERN(cjpeg_source_ptr) jinit_read_gif JPP((j_compress_ptr cinfo)); -EXTERN(djpeg_dest_ptr) jinit_write_gif JPP((j_decompress_ptr cinfo)); -EXTERN(cjpeg_source_ptr) jinit_read_ppm JPP((j_compress_ptr cinfo)); -EXTERN(djpeg_dest_ptr) jinit_write_ppm JPP((j_decompress_ptr cinfo)); -EXTERN(cjpeg_source_ptr) jinit_read_rle JPP((j_compress_ptr cinfo)); -EXTERN(djpeg_dest_ptr) jinit_write_rle JPP((j_decompress_ptr cinfo)); -EXTERN(cjpeg_source_ptr) jinit_read_targa JPP((j_compress_ptr cinfo)); -EXTERN(djpeg_dest_ptr) jinit_write_targa JPP((j_decompress_ptr cinfo)); - -/* cjpeg support routines (in rdswitch.c) */ - -EXTERN(boolean) read_quant_tables JPP((j_compress_ptr cinfo, char * filename, - int scale_factor, boolean force_baseline)); -EXTERN(boolean) read_scan_script JPP((j_compress_ptr cinfo, char * filename)); -EXTERN(boolean) set_quant_slots JPP((j_compress_ptr cinfo, char *arg)); -EXTERN(boolean) set_sample_factors JPP((j_compress_ptr cinfo, char *arg)); - -/* djpeg support routines (in rdcolmap.c) */ - -EXTERN(void) read_color_map JPP((j_decompress_ptr cinfo, FILE * infile)); - -/* common support routines (in cdjpeg.c) */ - -EXTERN(void) enable_signal_catcher JPP((j_common_ptr cinfo)); -EXTERN(void) start_progress_monitor JPP((j_common_ptr cinfo, - cd_progress_ptr progress)); -EXTERN(void) end_progress_monitor JPP((j_common_ptr cinfo)); -EXTERN(boolean) keymatch JPP((char * arg, const char * keyword, int minchars)); -EXTERN(FILE *) read_stdin JPP((void)); -EXTERN(FILE *) write_stdout JPP((void)); - -/* miscellaneous useful macros */ - -#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ -#define READ_BINARY "r" -#define WRITE_BINARY "w" -#else -#ifdef VMS /* VMS is very nonstandard */ -#define READ_BINARY "rb", "ctx=stm" -#define WRITE_BINARY "wb", "ctx=stm" -#else /* standard ANSI-compliant case */ -#define READ_BINARY "rb" -#define WRITE_BINARY "wb" -#endif -#endif - -#ifndef EXIT_FAILURE /* define exit() codes if not provided */ -#define EXIT_FAILURE 1 -#endif -#ifndef EXIT_SUCCESS -#ifdef VMS -#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ -#else -#define EXIT_SUCCESS 0 -#endif -#endif -#ifndef EXIT_WARNING -#ifdef VMS -#define EXIT_WARNING 1 /* VMS is very nonstandard */ -#else -#define EXIT_WARNING 2 -#endif -#endif diff --git a/Build/source/libs/jpeg/cjpeg.1 b/Build/source/libs/jpeg/cjpeg.1 deleted file mode 100644 index d175a961c6a..00000000000 --- a/Build/source/libs/jpeg/cjpeg.1 +++ /dev/null @@ -1,292 +0,0 @@ -.TH CJPEG 1 "20 March 1998" -.SH NAME -cjpeg \- compress an image file to a JPEG file -.SH SYNOPSIS -.B cjpeg -[ -.I options -] -[ -.I filename -] -.LP -.SH DESCRIPTION -.LP -.B cjpeg -compresses the named image file, or the standard input if no file is -named, and produces a JPEG/JFIF file on the standard output. -The currently supported input file formats are: PPM (PBMPLUS color -format), PGM (PBMPLUS gray-scale format), BMP, Targa, and RLE (Utah Raster -Toolkit format). (RLE is supported only if the URT library is available.) -.SH OPTIONS -All switch names may be abbreviated; for example, -.B \-grayscale -may be written -.B \-gray -or -.BR \-gr . -Most of the "basic" switches can be abbreviated to as little as one letter. -Upper and lower case are equivalent (thus -.B \-BMP -is the same as -.BR \-bmp ). -British spellings are also accepted (e.g., -.BR \-greyscale ), -though for brevity these are not mentioned below. -.PP -The basic switches are: -.TP -.BI \-quality " N" -Scale quantization tables to adjust image quality. Quality is 0 (worst) to -100 (best); default is 75. (See below for more info.) -.TP -.B \-grayscale -Create monochrome JPEG file from color input. Be sure to use this switch when -compressing a grayscale BMP file, because -.B cjpeg -isn't bright enough to notice whether a BMP file uses only shades of gray. -By saying -.BR \-grayscale , -you'll get a smaller JPEG file that takes less time to process. -.TP -.B \-optimize -Perform optimization of entropy encoding parameters. Without this, default -encoding parameters are used. -.B \-optimize -usually makes the JPEG file a little smaller, but -.B cjpeg -runs somewhat slower and needs much more memory. Image quality and speed of -decompression are unaffected by -.BR \-optimize . -.TP -.B \-progressive -Create progressive JPEG file (see below). -.TP -.B \-targa -Input file is Targa format. Targa files that contain an "identification" -field will not be automatically recognized by -.BR cjpeg ; -for such files you must specify -.B \-targa -to make -.B cjpeg -treat the input as Targa format. -For most Targa files, you won't need this switch. -.PP -The -.B \-quality -switch lets you trade off compressed file size against quality of the -reconstructed image: the higher the quality setting, the larger the JPEG file, -and the closer the output image will be to the original input. Normally you -want to use the lowest quality setting (smallest file) that decompresses into -something visually indistinguishable from the original image. For this -purpose the quality setting should be between 50 and 95; the default of 75 is -often about right. If you see defects at -.B \-quality -75, then go up 5 or 10 counts at a time until you are happy with the output -image. (The optimal setting will vary from one image to another.) -.PP -.B \-quality -100 will generate a quantization table of all 1's, minimizing loss in the -quantization step (but there is still information loss in subsampling, as well -as roundoff error). This setting is mainly of interest for experimental -purposes. Quality values above about 95 are -.B not -recommended for normal use; the compressed file size goes up dramatically for -hardly any gain in output image quality. -.PP -In the other direction, quality values below 50 will produce very small files -of low image quality. Settings around 5 to 10 might be useful in preparing an -index of a large image library, for example. Try -.B \-quality -2 (or so) for some amusing Cubist effects. (Note: quality -values below about 25 generate 2-byte quantization tables, which are -considered optional in the JPEG standard. -.B cjpeg -emits a warning message when you give such a quality value, because some -other JPEG programs may be unable to decode the resulting file. Use -.B \-baseline -if you need to ensure compatibility at low quality values.) -.PP -The -.B \-progressive -switch creates a "progressive JPEG" file. In this type of JPEG file, the data -is stored in multiple scans of increasing quality. If the file is being -transmitted over a slow communications link, the decoder can use the first -scan to display a low-quality image very quickly, and can then improve the -display with each subsequent scan. The final image is exactly equivalent to a -standard JPEG file of the same quality setting, and the total file size is -about the same --- often a little smaller. -.B Caution: -progressive JPEG is not yet widely implemented, so many decoders will be -unable to view a progressive JPEG file at all. -.PP -Switches for advanced users: -.TP -.B \-dct int -Use integer DCT method (default). -.TP -.B \-dct fast -Use fast integer DCT (less accurate). -.TP -.B \-dct float -Use floating-point DCT method. -The float method is very slightly more accurate than the int method, but is -much slower unless your machine has very fast floating-point hardware. Also -note that results of the floating-point method may vary slightly across -machines, while the integer methods should give the same results everywhere. -The fast integer method is much less accurate than the other two. -.TP -.BI \-restart " N" -Emit a JPEG restart marker every N MCU rows, or every N MCU blocks if "B" is -attached to the number. -.B \-restart 0 -(the default) means no restart markers. -.TP -.BI \-smooth " N" -Smooth the input image to eliminate dithering noise. N, ranging from 1 to -100, indicates the strength of smoothing. 0 (the default) means no smoothing. -.TP -.BI \-maxmemory " N" -Set limit for amount of memory to use in processing large images. Value is -in thousands of bytes, or millions of bytes if "M" is attached to the -number. For example, -.B \-max 4m -selects 4000000 bytes. If more space is needed, temporary files will be used. -.TP -.BI \-outfile " name" -Send output image to the named file, not to standard output. -.TP -.B \-verbose -Enable debug printout. More -.BR \-v 's -give more output. Also, version information is printed at startup. -.TP -.B \-debug -Same as -.BR \-verbose . -.PP -The -.B \-restart -option inserts extra markers that allow a JPEG decoder to resynchronize after -a transmission error. Without restart markers, any damage to a compressed -file will usually ruin the image from the point of the error to the end of the -image; with restart markers, the damage is usually confined to the portion of -the image up to the next restart marker. Of course, the restart markers -occupy extra space. We recommend -.B \-restart 1 -for images that will be transmitted across unreliable networks such as Usenet. -.PP -The -.B \-smooth -option filters the input to eliminate fine-scale noise. This is often useful -when converting dithered images to JPEG: a moderate smoothing factor of 10 to -50 gets rid of dithering patterns in the input file, resulting in a smaller -JPEG file and a better-looking image. Too large a smoothing factor will -visibly blur the image, however. -.PP -Switches for wizards: -.TP -.B \-baseline -Force baseline-compatible quantization tables to be generated. This clamps -quantization values to 8 bits even at low quality settings. (This switch is -poorly named, since it does not ensure that the output is actually baseline -JPEG. For example, you can use -.B \-baseline -and -.B \-progressive -together.) -.TP -.BI \-qtables " file" -Use the quantization tables given in the specified text file. -.TP -.BI \-qslots " N[,...]" -Select which quantization table to use for each color component. -.TP -.BI \-sample " HxV[,...]" -Set JPEG sampling factors for each color component. -.TP -.BI \-scans " file" -Use the scan script given in the specified text file. -.PP -The "wizard" switches are intended for experimentation with JPEG. If you -don't know what you are doing, \fBdon't use them\fR. These switches are -documented further in the file wizard.doc. -.SH EXAMPLES -.LP -This example compresses the PPM file foo.ppm with a quality factor of -60 and saves the output as foo.jpg: -.IP -.B cjpeg \-quality -.I 60 foo.ppm -.B > -.I foo.jpg -.SH HINTS -Color GIF files are not the ideal input for JPEG; JPEG is really intended for -compressing full-color (24-bit) images. In particular, don't try to convert -cartoons, line drawings, and other images that have only a few distinct -colors. GIF works great on these, JPEG does not. If you want to convert a -GIF to JPEG, you should experiment with -.BR cjpeg 's -.B \-quality -and -.B \-smooth -options to get a satisfactory conversion. -.B \-smooth 10 -or so is often helpful. -.PP -Avoid running an image through a series of JPEG compression/decompression -cycles. Image quality loss will accumulate; after ten or so cycles the image -may be noticeably worse than it was after one cycle. It's best to use a -lossless format while manipulating an image, then convert to JPEG format when -you are ready to file the image away. -.PP -The -.B \-optimize -option to -.B cjpeg -is worth using when you are making a "final" version for posting or archiving. -It's also a win when you are using low quality settings to make very small -JPEG files; the percentage improvement is often a lot more than it is on -larger files. (At present, -.B \-optimize -mode is always selected when generating progressive JPEG files.) -.SH ENVIRONMENT -.TP -.B JPEGMEM -If this environment variable is set, its value is the default memory limit. -The value is specified as described for the -.B \-maxmemory -switch. -.B JPEGMEM -overrides the default value specified when the program was compiled, and -itself is overridden by an explicit -.BR \-maxmemory . -.SH SEE ALSO -.BR djpeg (1), -.BR jpegtran (1), -.BR rdjpgcom (1), -.BR wrjpgcom (1) -.br -.BR ppm (5), -.BR pgm (5) -.br -Wallace, Gregory K. "The JPEG Still Picture Compression Standard", -Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44. -.SH AUTHOR -Independent JPEG Group -.SH BUGS -Arithmetic coding is not supported for legal reasons. -.PP -GIF input files are no longer supported, to avoid the Unisys LZW patent. -Use a Unisys-licensed program if you need to read a GIF file. (Conversion -of GIF files to JPEG is usually a bad idea anyway.) -.PP -Not all variants of BMP and Targa file formats are supported. -.PP -The -.B \-targa -switch is not a bug, it's a feature. (It would be a bug if the Targa format -designers had not been clueless.) -.PP -Still not as fast as we'd like. diff --git a/Build/source/libs/jpeg/cjpeg.c b/Build/source/libs/jpeg/cjpeg.c deleted file mode 100644 index f2a929f0c9f..00000000000 --- a/Build/source/libs/jpeg/cjpeg.c +++ /dev/null @@ -1,606 +0,0 @@ -/* - * cjpeg.c - * - * Copyright (C) 1991-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a command-line user interface for the JPEG compressor. - * It should work on any system with Unix- or MS-DOS-style command lines. - * - * Two different command line styles are permitted, depending on the - * compile-time switch TWO_FILE_COMMANDLINE: - * cjpeg [options] inputfile outputfile - * cjpeg [options] [inputfile] - * In the second style, output is always to standard output, which you'd - * normally redirect to a file or pipe to some other program. Input is - * either from a named file or from standard input (typically redirected). - * The second style is convenient on Unix but is unhelpful on systems that - * don't support pipes. Also, you MUST use the first style if your system - * doesn't do binary I/O to stdin/stdout. - * To simplify script writing, the "-outfile" switch is provided. The syntax - * cjpeg [options] -outfile outputfile inputfile - * works regardless of which command line style is used. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ -#include "jversion.h" /* for version message */ - -#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ -#ifdef __MWERKS__ -#include /* Metrowerks needs this */ -#include /* ... and this */ -#endif -#ifdef THINK_C -#include /* Think declares it here */ -#endif -#endif - - -/* Create the add-on message string table. */ - -#define JMESSAGE(code,string) string , - -static const char * const cdjpeg_message_table[] = { -#include "cderror.h" - NULL -}; - - -/* - * This routine determines what format the input file is, - * and selects the appropriate input-reading module. - * - * To determine which family of input formats the file belongs to, - * we may look only at the first byte of the file, since C does not - * guarantee that more than one character can be pushed back with ungetc. - * Looking at additional bytes would require one of these approaches: - * 1) assume we can fseek() the input file (fails for piped input); - * 2) assume we can push back more than one character (works in - * some C implementations, but unportable); - * 3) provide our own buffering (breaks input readers that want to use - * stdio directly, such as the RLE library); - * or 4) don't put back the data, and modify the input_init methods to assume - * they start reading after the start of file (also breaks RLE library). - * #1 is attractive for MS-DOS but is untenable on Unix. - * - * The most portable solution for file types that can't be identified by their - * first byte is to make the user tell us what they are. This is also the - * only approach for "raw" file types that contain only arbitrary values. - * We presently apply this method for Targa files. Most of the time Targa - * files start with 0x00, so we recognize that case. Potentially, however, - * a Targa file could start with any byte value (byte 0 is the length of the - * seldom-used ID field), so we provide a switch to force Targa input mode. - */ - -static boolean is_targa; /* records user -targa switch */ - - -LOCAL(cjpeg_source_ptr) -select_file_type (j_compress_ptr cinfo, FILE * infile) -{ - int c; - - if (is_targa) { -#ifdef TARGA_SUPPORTED - return jinit_read_targa(cinfo); -#else - ERREXIT(cinfo, JERR_TGA_NOTCOMP); -#endif - } - - if ((c = getc(infile)) == EOF) - ERREXIT(cinfo, JERR_INPUT_EMPTY); - if (ungetc(c, infile) == EOF) - ERREXIT(cinfo, JERR_UNGETC_FAILED); - - switch (c) { -#ifdef BMP_SUPPORTED - case 'B': - return jinit_read_bmp(cinfo); -#endif -#ifdef GIF_SUPPORTED - case 'G': - return jinit_read_gif(cinfo); -#endif -#ifdef PPM_SUPPORTED - case 'P': - return jinit_read_ppm(cinfo); -#endif -#ifdef RLE_SUPPORTED - case 'R': - return jinit_read_rle(cinfo); -#endif -#ifdef TARGA_SUPPORTED - case 0x00: - return jinit_read_targa(cinfo); -#endif - default: - ERREXIT(cinfo, JERR_UNKNOWN_FORMAT); - break; - } - - return NULL; /* suppress compiler warnings */ -} - - -/* - * Argument-parsing code. - * The switch parser is designed to be useful with DOS-style command line - * syntax, ie, intermixed switches and file names, where only the switches - * to the left of a given file name affect processing of that file. - * The main program in this file doesn't actually use this capability... - */ - - -static const char * progname; /* program name for error messages */ -static char * outfilename; /* for -outfile switch */ - - -LOCAL(void) -usage (void) -/* complain about bad command line */ -{ - fprintf(stderr, "usage: %s [switches] ", progname); -#ifdef TWO_FILE_COMMANDLINE - fprintf(stderr, "inputfile outputfile\n"); -#else - fprintf(stderr, "[inputfile]\n"); -#endif - - fprintf(stderr, "Switches (names may be abbreviated):\n"); - fprintf(stderr, " -quality N Compression quality (0..100; 5-95 is useful range)\n"); - fprintf(stderr, " -grayscale Create monochrome JPEG file\n"); -#ifdef ENTROPY_OPT_SUPPORTED - fprintf(stderr, " -optimize Optimize Huffman table (smaller file, but slow compression)\n"); -#endif -#ifdef C_PROGRESSIVE_SUPPORTED - fprintf(stderr, " -progressive Create progressive JPEG file\n"); -#endif -#ifdef TARGA_SUPPORTED - fprintf(stderr, " -targa Input file is Targa format (usually not needed)\n"); -#endif - fprintf(stderr, "Switches for advanced users:\n"); -#ifdef DCT_ISLOW_SUPPORTED - fprintf(stderr, " -dct int Use integer DCT method%s\n", - (JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : "")); -#endif -#ifdef DCT_IFAST_SUPPORTED - fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n", - (JDCT_DEFAULT == JDCT_IFAST ? " (default)" : "")); -#endif -#ifdef DCT_FLOAT_SUPPORTED - fprintf(stderr, " -dct float Use floating-point DCT method%s\n", - (JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : "")); -#endif - fprintf(stderr, " -restart N Set restart interval in rows, or in blocks with B\n"); -#ifdef INPUT_SMOOTHING_SUPPORTED - fprintf(stderr, " -smooth N Smooth dithered input (N=1..100 is strength)\n"); -#endif - fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n"); - fprintf(stderr, " -outfile name Specify name for output file\n"); - fprintf(stderr, " -verbose or -debug Emit debug output\n"); - fprintf(stderr, "Switches for wizards:\n"); -#ifdef C_ARITH_CODING_SUPPORTED - fprintf(stderr, " -arithmetic Use arithmetic coding\n"); -#endif - fprintf(stderr, " -baseline Force baseline quantization tables\n"); - fprintf(stderr, " -qtables file Use quantization tables given in file\n"); - fprintf(stderr, " -qslots N[,...] Set component quantization tables\n"); - fprintf(stderr, " -sample HxV[,...] Set component sampling factors\n"); -#ifdef C_MULTISCAN_FILES_SUPPORTED - fprintf(stderr, " -scans file Create multi-scan JPEG per script file\n"); -#endif - exit(EXIT_FAILURE); -} - - -LOCAL(int) -parse_switches (j_compress_ptr cinfo, int argc, char **argv, - int last_file_arg_seen, boolean for_real) -/* Parse optional switches. - * Returns argv[] index of first file-name argument (== argc if none). - * Any file names with indexes <= last_file_arg_seen are ignored; - * they have presumably been processed in a previous iteration. - * (Pass 0 for last_file_arg_seen on the first or only iteration.) - * for_real is FALSE on the first (dummy) pass; we may skip any expensive - * processing. - */ -{ - int argn; - char * arg; - int quality; /* -quality parameter */ - int q_scale_factor; /* scaling percentage for -qtables */ - boolean force_baseline; - boolean simple_progressive; - char * qtablefile = NULL; /* saves -qtables filename if any */ - char * qslotsarg = NULL; /* saves -qslots parm if any */ - char * samplearg = NULL; /* saves -sample parm if any */ - char * scansarg = NULL; /* saves -scans parm if any */ - - /* Set up default JPEG parameters. */ - /* Note that default -quality level need not, and does not, - * match the default scaling for an explicit -qtables argument. - */ - quality = 75; /* default -quality value */ - q_scale_factor = 100; /* default to no scaling for -qtables */ - force_baseline = FALSE; /* by default, allow 16-bit quantizers */ - simple_progressive = FALSE; - is_targa = FALSE; - outfilename = NULL; - cinfo->err->trace_level = 0; - - /* Scan command line options, adjust parameters */ - - for (argn = 1; argn < argc; argn++) { - arg = argv[argn]; - if (*arg != '-') { - /* Not a switch, must be a file name argument */ - if (argn <= last_file_arg_seen) { - outfilename = NULL; /* -outfile applies to just one input file */ - continue; /* ignore this name if previously processed */ - } - break; /* else done parsing switches */ - } - arg++; /* advance past switch marker character */ - - if (keymatch(arg, "arithmetic", 1)) { - /* Use arithmetic coding. */ -#ifdef C_ARITH_CODING_SUPPORTED - cinfo->arith_code = TRUE; -#else - fprintf(stderr, "%s: sorry, arithmetic coding not supported\n", - progname); - exit(EXIT_FAILURE); -#endif - - } else if (keymatch(arg, "baseline", 1)) { - /* Force baseline-compatible output (8-bit quantizer values). */ - force_baseline = TRUE; - - } else if (keymatch(arg, "dct", 2)) { - /* Select DCT algorithm. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (keymatch(argv[argn], "int", 1)) { - cinfo->dct_method = JDCT_ISLOW; - } else if (keymatch(argv[argn], "fast", 2)) { - cinfo->dct_method = JDCT_IFAST; - } else if (keymatch(argv[argn], "float", 2)) { - cinfo->dct_method = JDCT_FLOAT; - } else - usage(); - - } else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) { - /* Enable debug printouts. */ - /* On first -d, print version identification */ - static boolean printed_version = FALSE; - - if (! printed_version) { - fprintf(stderr, "Independent JPEG Group's CJPEG, version %s\n%s\n", - JVERSION, JCOPYRIGHT); - printed_version = TRUE; - } - cinfo->err->trace_level++; - - } else if (keymatch(arg, "grayscale", 2) || keymatch(arg, "greyscale",2)) { - /* Force a monochrome JPEG file to be generated. */ - jpeg_set_colorspace(cinfo, JCS_GRAYSCALE); - - } else if (keymatch(arg, "maxmemory", 3)) { - /* Maximum memory in Kb (or Mb with 'm'). */ - long lval; - char ch = 'x'; - - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) - usage(); - if (ch == 'm' || ch == 'M') - lval *= 1000L; - cinfo->mem->max_memory_to_use = lval * 1000L; - - } else if (keymatch(arg, "optimize", 1) || keymatch(arg, "optimise", 1)) { - /* Enable entropy parm optimization. */ -#ifdef ENTROPY_OPT_SUPPORTED - cinfo->optimize_coding = TRUE; -#else - fprintf(stderr, "%s: sorry, entropy optimization was not compiled\n", - progname); - exit(EXIT_FAILURE); -#endif - - } else if (keymatch(arg, "outfile", 4)) { - /* Set output file name. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - outfilename = argv[argn]; /* save it away for later use */ - - } else if (keymatch(arg, "progressive", 1)) { - /* Select simple progressive mode. */ -#ifdef C_PROGRESSIVE_SUPPORTED - simple_progressive = TRUE; - /* We must postpone execution until num_components is known. */ -#else - fprintf(stderr, "%s: sorry, progressive output was not compiled\n", - progname); - exit(EXIT_FAILURE); -#endif - - } else if (keymatch(arg, "quality", 1)) { - /* Quality factor (quantization table scaling factor). */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%d", &quality) != 1) - usage(); - /* Change scale factor in case -qtables is present. */ - q_scale_factor = jpeg_quality_scaling(quality); - - } else if (keymatch(arg, "qslots", 2)) { - /* Quantization table slot numbers. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - qslotsarg = argv[argn]; - /* Must delay setting qslots until after we have processed any - * colorspace-determining switches, since jpeg_set_colorspace sets - * default quant table numbers. - */ - - } else if (keymatch(arg, "qtables", 2)) { - /* Quantization tables fetched from file. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - qtablefile = argv[argn]; - /* We postpone actually reading the file in case -quality comes later. */ - - } else if (keymatch(arg, "restart", 1)) { - /* Restart interval in MCU rows (or in MCUs with 'b'). */ - long lval; - char ch = 'x'; - - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) - usage(); - if (lval < 0 || lval > 65535L) - usage(); - if (ch == 'b' || ch == 'B') { - cinfo->restart_interval = (unsigned int) lval; - cinfo->restart_in_rows = 0; /* else prior '-restart n' overrides me */ - } else { - cinfo->restart_in_rows = (int) lval; - /* restart_interval will be computed during startup */ - } - - } else if (keymatch(arg, "sample", 2)) { - /* Set sampling factors. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - samplearg = argv[argn]; - /* Must delay setting sample factors until after we have processed any - * colorspace-determining switches, since jpeg_set_colorspace sets - * default sampling factors. - */ - - } else if (keymatch(arg, "scans", 2)) { - /* Set scan script. */ -#ifdef C_MULTISCAN_FILES_SUPPORTED - if (++argn >= argc) /* advance to next argument */ - usage(); - scansarg = argv[argn]; - /* We must postpone reading the file in case -progressive appears. */ -#else - fprintf(stderr, "%s: sorry, multi-scan output was not compiled\n", - progname); - exit(EXIT_FAILURE); -#endif - - } else if (keymatch(arg, "smooth", 2)) { - /* Set input smoothing factor. */ - int val; - - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%d", &val) != 1) - usage(); - if (val < 0 || val > 100) - usage(); - cinfo->smoothing_factor = val; - - } else if (keymatch(arg, "targa", 1)) { - /* Input file is Targa format. */ - is_targa = TRUE; - - } else { - usage(); /* bogus switch */ - } - } - - /* Post-switch-scanning cleanup */ - - if (for_real) { - - /* Set quantization tables for selected quality. */ - /* Some or all may be overridden if -qtables is present. */ - jpeg_set_quality(cinfo, quality, force_baseline); - - if (qtablefile != NULL) /* process -qtables if it was present */ - if (! read_quant_tables(cinfo, qtablefile, - q_scale_factor, force_baseline)) - usage(); - - if (qslotsarg != NULL) /* process -qslots if it was present */ - if (! set_quant_slots(cinfo, qslotsarg)) - usage(); - - if (samplearg != NULL) /* process -sample if it was present */ - if (! set_sample_factors(cinfo, samplearg)) - usage(); - -#ifdef C_PROGRESSIVE_SUPPORTED - if (simple_progressive) /* process -progressive; -scans can override */ - jpeg_simple_progression(cinfo); -#endif - -#ifdef C_MULTISCAN_FILES_SUPPORTED - if (scansarg != NULL) /* process -scans if it was present */ - if (! read_scan_script(cinfo, scansarg)) - usage(); -#endif - } - - return argn; /* return index of next arg (file name) */ -} - - -/* - * The main program. - */ - -int -main (int argc, char **argv) -{ - struct jpeg_compress_struct cinfo; - struct jpeg_error_mgr jerr; -#ifdef PROGRESS_REPORT - struct cdjpeg_progress_mgr progress; -#endif - int file_index; - cjpeg_source_ptr src_mgr; - FILE * input_file; - FILE * output_file; - JDIMENSION num_scanlines; - - /* On Mac, fetch a command line. */ -#ifdef USE_CCOMMAND - argc = ccommand(&argv); -#endif - - progname = argv[0]; - if (progname == NULL || progname[0] == 0) - progname = "cjpeg"; /* in case C library doesn't provide it */ - - /* Initialize the JPEG compression object with default error handling. */ - cinfo.err = jpeg_std_error(&jerr); - jpeg_create_compress(&cinfo); - /* Add some application-specific error messages (from cderror.h) */ - jerr.addon_message_table = cdjpeg_message_table; - jerr.first_addon_message = JMSG_FIRSTADDONCODE; - jerr.last_addon_message = JMSG_LASTADDONCODE; - - /* Now safe to enable signal catcher. */ -#ifdef NEED_SIGNAL_CATCHER - enable_signal_catcher((j_common_ptr) &cinfo); -#endif - - /* Initialize JPEG parameters. - * Much of this may be overridden later. - * In particular, we don't yet know the input file's color space, - * but we need to provide some value for jpeg_set_defaults() to work. - */ - - cinfo.in_color_space = JCS_RGB; /* arbitrary guess */ - jpeg_set_defaults(&cinfo); - - /* Scan command line to find file names. - * It is convenient to use just one switch-parsing routine, but the switch - * values read here are ignored; we will rescan the switches after opening - * the input file. - */ - - file_index = parse_switches(&cinfo, argc, argv, 0, FALSE); - -#ifdef TWO_FILE_COMMANDLINE - /* Must have either -outfile switch or explicit output file name */ - if (outfilename == NULL) { - if (file_index != argc-2) { - fprintf(stderr, "%s: must name one input and one output file\n", - progname); - usage(); - } - outfilename = argv[file_index+1]; - } else { - if (file_index != argc-1) { - fprintf(stderr, "%s: must name one input and one output file\n", - progname); - usage(); - } - } -#else - /* Unix style: expect zero or one file name */ - if (file_index < argc-1) { - fprintf(stderr, "%s: only one input file\n", progname); - usage(); - } -#endif /* TWO_FILE_COMMANDLINE */ - - /* Open the input file. */ - if (file_index < argc) { - if ((input_file = fopen(argv[file_index], READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[file_index]); - exit(EXIT_FAILURE); - } - } else { - /* default input file is stdin */ - input_file = read_stdin(); - } - - /* Open the output file. */ - if (outfilename != NULL) { - if ((output_file = fopen(outfilename, WRITE_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, outfilename); - exit(EXIT_FAILURE); - } - } else { - /* default output file is stdout */ - output_file = write_stdout(); - } - -#ifdef PROGRESS_REPORT - start_progress_monitor((j_common_ptr) &cinfo, &progress); -#endif - - /* Figure out the input file format, and set up to read it. */ - src_mgr = select_file_type(&cinfo, input_file); - src_mgr->input_file = input_file; - - /* Read the input file header to obtain file size & colorspace. */ - (*src_mgr->start_input) (&cinfo, src_mgr); - - /* Now that we know input colorspace, fix colorspace-dependent defaults */ - jpeg_default_colorspace(&cinfo); - - /* Adjust default compression parameters by re-parsing the options */ - file_index = parse_switches(&cinfo, argc, argv, 0, TRUE); - - /* Specify data destination for compression */ - jpeg_stdio_dest(&cinfo, output_file); - - /* Start compressor */ - jpeg_start_compress(&cinfo, TRUE); - - /* Process data */ - while (cinfo.next_scanline < cinfo.image_height) { - num_scanlines = (*src_mgr->get_pixel_rows) (&cinfo, src_mgr); - (void) jpeg_write_scanlines(&cinfo, src_mgr->buffer, num_scanlines); - } - - /* Finish compression and release memory */ - (*src_mgr->finish_input) (&cinfo, src_mgr); - jpeg_finish_compress(&cinfo); - jpeg_destroy_compress(&cinfo); - - /* Close files, if we opened them */ - if (input_file != stdin) - fclose(input_file); - if (output_file != stdout) - fclose(output_file); - -#ifdef PROGRESS_REPORT - end_progress_monitor((j_common_ptr) &cinfo); -#endif - - /* All done. */ - exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS); - return 0; /* suppress no-return-value warnings */ -} diff --git a/Build/source/libs/jpeg/ckconfig.c b/Build/source/libs/jpeg/ckconfig.c deleted file mode 100644 index 34baf795b00..00000000000 --- a/Build/source/libs/jpeg/ckconfig.c +++ /dev/null @@ -1,402 +0,0 @@ -/* - * ckconfig.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - */ - -/* - * This program is intended to help you determine how to configure the JPEG - * software for installation on a particular system. The idea is to try to - * compile and execute this program. If your compiler fails to compile the - * program, make changes as indicated in the comments below. Once you can - * compile the program, run it, and it will produce a "jconfig.h" file for - * your system. - * - * As a general rule, each time you try to compile this program, - * pay attention only to the *first* error message you get from the compiler. - * Many C compilers will issue lots of spurious error messages once they - * have gotten confused. Go to the line indicated in the first error message, - * and read the comments preceding that line to see what to change. - * - * Almost all of the edits you may need to make to this program consist of - * changing a line that reads "#define SOME_SYMBOL" to "#undef SOME_SYMBOL", - * or vice versa. This is called defining or undefining that symbol. - */ - - -/* First we must see if your system has the include files we need. - * We start out with the assumption that your system has all the ANSI-standard - * include files. If you get any error trying to include one of these files, - * undefine the corresponding HAVE_xxx symbol. - */ - -#define HAVE_STDDEF_H /* replace 'define' by 'undef' if error here */ -#ifdef HAVE_STDDEF_H /* next line will be skipped if you undef... */ -#include -#endif - -#define HAVE_STDLIB_H /* same thing for stdlib.h */ -#ifdef HAVE_STDLIB_H -#include -#endif - -#include /* If you ain't got this, you ain't got C. */ - -/* We have to see if your string functions are defined by - * strings.h (old BSD convention) or string.h (everybody else). - * We try the non-BSD convention first; define NEED_BSD_STRINGS - * if the compiler says it can't find string.h. - */ - -#undef NEED_BSD_STRINGS - -#ifdef NEED_BSD_STRINGS -#include -#else -#include -#endif - -/* On some systems (especially older Unix machines), type size_t is - * defined only in the include file . If you get a failure - * on the size_t test below, try defining NEED_SYS_TYPES_H. - */ - -#undef NEED_SYS_TYPES_H /* start by assuming we don't need it */ -#ifdef NEED_SYS_TYPES_H -#include -#endif - - -/* Usually type size_t is defined in one of the include files we've included - * above. If not, you'll get an error on the "typedef size_t my_size_t;" line. - * In that case, first try defining NEED_SYS_TYPES_H just above. - * If that doesn't work, you'll have to search through your system library - * to figure out which include file defines "size_t". Look for a line that - * says "typedef something-or-other size_t;". Then, change the line below - * that says "#include " to instead include the file - * you found size_t in, and define NEED_SPECIAL_INCLUDE. If you can't find - * type size_t anywhere, try replacing "#include " with - * "typedef unsigned int size_t;". - */ - -#undef NEED_SPECIAL_INCLUDE /* assume we DON'T need it, for starters */ - -#ifdef NEED_SPECIAL_INCLUDE -#include -#endif - -typedef size_t my_size_t; /* The payoff: do we have size_t now? */ - - -/* The next question is whether your compiler supports ANSI-style function - * prototypes. You need to know this in order to choose between using - * makefile.ansi and using makefile.unix. - * The #define line below is set to assume you have ANSI function prototypes. - * If you get an error in this group of lines, undefine HAVE_PROTOTYPES. - */ - -#define HAVE_PROTOTYPES - -#ifdef HAVE_PROTOTYPES -int testfunction (int arg1, int * arg2); /* check prototypes */ - -struct methods_struct { /* check method-pointer declarations */ - int (*error_exit) (char *msgtext); - int (*trace_message) (char *msgtext); - int (*another_method) (void); -}; - -int testfunction (int arg1, int * arg2) /* check definitions */ -{ - return arg2[arg1]; -} - -int test2function (void) /* check void arg list */ -{ - return 0; -} -#endif - - -/* Now we want to find out if your compiler knows what "unsigned char" means. - * If you get an error on the "unsigned char un_char;" line, - * then undefine HAVE_UNSIGNED_CHAR. - */ - -#define HAVE_UNSIGNED_CHAR - -#ifdef HAVE_UNSIGNED_CHAR -unsigned char un_char; -#endif - - -/* Now we want to find out if your compiler knows what "unsigned short" means. - * If you get an error on the "unsigned short un_short;" line, - * then undefine HAVE_UNSIGNED_SHORT. - */ - -#define HAVE_UNSIGNED_SHORT - -#ifdef HAVE_UNSIGNED_SHORT -unsigned short un_short; -#endif - - -/* Now we want to find out if your compiler understands type "void". - * If you get an error anywhere in here, undefine HAVE_VOID. - */ - -#define HAVE_VOID - -#ifdef HAVE_VOID -/* Caution: a C++ compiler will insist on complete prototypes */ -typedef void * void_ptr; /* check void * */ -#ifdef HAVE_PROTOTYPES /* check ptr to function returning void */ -typedef void (*void_func) (int a, int b); -#else -typedef void (*void_func) (); -#endif - -#ifdef HAVE_PROTOTYPES /* check void function result */ -void test3function (void_ptr arg1, void_func arg2) -#else -void test3function (arg1, arg2) - void_ptr arg1; - void_func arg2; -#endif -{ - char * locptr = (char *) arg1; /* check casting to and from void * */ - arg1 = (void *) locptr; - (*arg2) (1, 2); /* check call of fcn returning void */ -} -#endif - - -/* Now we want to find out if your compiler knows what "const" means. - * If you get an error here, undefine HAVE_CONST. - */ - -#define HAVE_CONST - -#ifdef HAVE_CONST -static const int carray[3] = {1, 2, 3}; - -#ifdef HAVE_PROTOTYPES -int test4function (const int arg1) -#else -int test4function (arg1) - const int arg1; -#endif -{ - return carray[arg1]; -} -#endif - - -/* If you get an error or warning about this structure definition, - * define INCOMPLETE_TYPES_BROKEN. - */ - -#undef INCOMPLETE_TYPES_BROKEN - -#ifndef INCOMPLETE_TYPES_BROKEN -typedef struct undefined_structure * undef_struct_ptr; -#endif - - -/* If you get an error about duplicate names, - * define NEED_SHORT_EXTERNAL_NAMES. - */ - -#undef NEED_SHORT_EXTERNAL_NAMES - -#ifndef NEED_SHORT_EXTERNAL_NAMES - -int possibly_duplicate_function () -{ - return 0; -} - -int possibly_dupli_function () -{ - return 1; -} - -#endif - - - -/************************************************************************ - * OK, that's it. You should not have to change anything beyond this - * point in order to compile and execute this program. (You might get - * some warnings, but you can ignore them.) - * When you run the program, it will make a couple more tests that it - * can do automatically, and then it will create jconfig.h and print out - * any additional suggestions it has. - ************************************************************************ - */ - - -#ifdef HAVE_PROTOTYPES -int is_char_signed (int arg) -#else -int is_char_signed (arg) - int arg; -#endif -{ - if (arg == 189) { /* expected result for unsigned char */ - return 0; /* type char is unsigned */ - } - else if (arg != -67) { /* expected result for signed char */ - printf("Hmm, it seems 'char' is not eight bits wide on your machine.\n"); - printf("I fear the JPEG software will not work at all.\n\n"); - } - return 1; /* assume char is signed otherwise */ -} - - -#ifdef HAVE_PROTOTYPES -int is_shifting_signed (long arg) -#else -int is_shifting_signed (arg) - long arg; -#endif -/* See whether right-shift on a long is signed or not. */ -{ - long res = arg >> 4; - - if (res == -0x7F7E80CL) { /* expected result for signed shift */ - return 1; /* right shift is signed */ - } - /* see if unsigned-shift hack will fix it. */ - /* we can't just test exact value since it depends on width of long... */ - res |= (~0L) << (32-4); - if (res == -0x7F7E80CL) { /* expected result now? */ - return 0; /* right shift is unsigned */ - } - printf("Right shift isn't acting as I expect it to.\n"); - printf("I fear the JPEG software will not work at all.\n\n"); - return 0; /* try it with unsigned anyway */ -} - - -#ifdef HAVE_PROTOTYPES -int main (int argc, char ** argv) -#else -int main (argc, argv) - int argc; - char ** argv; -#endif -{ - char signed_char_check = (char) (-67); - FILE *outfile; - - /* Attempt to write jconfig.h */ - if ((outfile = fopen("jconfig.h", "w")) == NULL) { - printf("Failed to write jconfig.h\n"); - return 1; - } - - /* Write out all the info */ - fprintf(outfile, "/* jconfig.h --- generated by ckconfig.c */\n"); - fprintf(outfile, "/* see jconfig.doc for explanations */\n\n"); -#ifdef HAVE_PROTOTYPES - fprintf(outfile, "#define HAVE_PROTOTYPES\n"); -#else - fprintf(outfile, "#undef HAVE_PROTOTYPES\n"); -#endif -#ifdef HAVE_UNSIGNED_CHAR - fprintf(outfile, "#define HAVE_UNSIGNED_CHAR\n"); -#else - fprintf(outfile, "#undef HAVE_UNSIGNED_CHAR\n"); -#endif -#ifdef HAVE_UNSIGNED_SHORT - fprintf(outfile, "#define HAVE_UNSIGNED_SHORT\n"); -#else - fprintf(outfile, "#undef HAVE_UNSIGNED_SHORT\n"); -#endif -#ifdef HAVE_VOID - fprintf(outfile, "/* #define void char */\n"); -#else - fprintf(outfile, "#define void char\n"); -#endif -#ifdef HAVE_CONST - fprintf(outfile, "/* #define const */\n"); -#else - fprintf(outfile, "#define const\n"); -#endif - if (is_char_signed((int) signed_char_check)) - fprintf(outfile, "#undef CHAR_IS_UNSIGNED\n"); - else - fprintf(outfile, "#define CHAR_IS_UNSIGNED\n"); -#ifdef HAVE_STDDEF_H - fprintf(outfile, "#define HAVE_STDDEF_H\n"); -#else - fprintf(outfile, "#undef HAVE_STDDEF_H\n"); -#endif -#ifdef HAVE_STDLIB_H - fprintf(outfile, "#define HAVE_STDLIB_H\n"); -#else - fprintf(outfile, "#undef HAVE_STDLIB_H\n"); -#endif -#ifdef NEED_BSD_STRINGS - fprintf(outfile, "#define NEED_BSD_STRINGS\n"); -#else - fprintf(outfile, "#undef NEED_BSD_STRINGS\n"); -#endif -#ifdef NEED_SYS_TYPES_H - fprintf(outfile, "#define NEED_SYS_TYPES_H\n"); -#else - fprintf(outfile, "#undef NEED_SYS_TYPES_H\n"); -#endif - fprintf(outfile, "#undef NEED_FAR_POINTERS\n"); -#ifdef NEED_SHORT_EXTERNAL_NAMES - fprintf(outfile, "#define NEED_SHORT_EXTERNAL_NAMES\n"); -#else - fprintf(outfile, "#undef NEED_SHORT_EXTERNAL_NAMES\n"); -#endif -#ifdef INCOMPLETE_TYPES_BROKEN - fprintf(outfile, "#define INCOMPLETE_TYPES_BROKEN\n"); -#else - fprintf(outfile, "#undef INCOMPLETE_TYPES_BROKEN\n"); -#endif - fprintf(outfile, "\n#ifdef JPEG_INTERNALS\n\n"); - if (is_shifting_signed(-0x7F7E80B1L)) - fprintf(outfile, "#undef RIGHT_SHIFT_IS_UNSIGNED\n"); - else - fprintf(outfile, "#define RIGHT_SHIFT_IS_UNSIGNED\n"); - fprintf(outfile, "\n#endif /* JPEG_INTERNALS */\n"); - fprintf(outfile, "\n#ifdef JPEG_CJPEG_DJPEG\n\n"); - fprintf(outfile, "#define BMP_SUPPORTED /* BMP image file format */\n"); - fprintf(outfile, "#define GIF_SUPPORTED /* GIF image file format */\n"); - fprintf(outfile, "#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */\n"); - fprintf(outfile, "#undef RLE_SUPPORTED /* Utah RLE image file format */\n"); - fprintf(outfile, "#define TARGA_SUPPORTED /* Targa image file format */\n\n"); - fprintf(outfile, "#undef TWO_FILE_COMMANDLINE /* You may need this on non-Unix systems */\n"); - fprintf(outfile, "#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */\n"); - fprintf(outfile, "#undef DONT_USE_B_MODE\n"); - fprintf(outfile, "/* #define PROGRESS_REPORT */ /* optional */\n"); - fprintf(outfile, "\n#endif /* JPEG_CJPEG_DJPEG */\n"); - - /* Close the jconfig.h file */ - fclose(outfile); - - /* User report */ - printf("Configuration check for Independent JPEG Group's software done.\n"); - printf("\nI have written the jconfig.h file for you.\n\n"); -#ifdef HAVE_PROTOTYPES - printf("You should use makefile.ansi as the starting point for your Makefile.\n"); -#else - printf("You should use makefile.unix as the starting point for your Makefile.\n"); -#endif - -#ifdef NEED_SPECIAL_INCLUDE - printf("\nYou'll need to change jconfig.h to include the system include file\n"); - printf("that you found type size_t in, or add a direct definition of type\n"); - printf("size_t if that's what you used. Just add it to the end.\n"); -#endif - - return 0; -} diff --git a/Build/source/libs/jpeg/coderules.doc b/Build/source/libs/jpeg/coderules.doc deleted file mode 100644 index 0ab5d9bd302..00000000000 --- a/Build/source/libs/jpeg/coderules.doc +++ /dev/null @@ -1,118 +0,0 @@ -IJG JPEG LIBRARY: CODING RULES - -Copyright (C) 1991-1996, Thomas G. Lane. -This file is part of the Independent JPEG Group's software. -For conditions of distribution and use, see the accompanying README file. - - -Since numerous people will be contributing code and bug fixes, it's important -to establish a common coding style. The goal of using similar coding styles -is much more important than the details of just what that style is. - -In general we follow the recommendations of "Recommended C Style and Coding -Standards" revision 6.1 (Cannon et al. as modified by Spencer, Keppel and -Brader). This document is available in the IJG FTP archive (see -jpeg/doc/cstyle.ms.tbl.Z, or cstyle.txt.Z for those without nroff/tbl). - -Block comments should be laid out thusly: - -/* - * Block comments in this style. - */ - -We indent statements in K&R style, e.g., - if (test) { - then-part; - } else { - else-part; - } -with two spaces per indentation level. (This indentation convention is -handled automatically by GNU Emacs and many other text editors.) - -Multi-word names should be written in lower case with underscores, e.g., -multi_word_name (not multiWordName). Preprocessor symbols and enum constants -are similar but upper case (MULTI_WORD_NAME). Names should be unique within -the first fifteen characters. (On some older systems, global names must be -unique within six characters. We accommodate this without cluttering the -source code by using macros to substitute shorter names.) - -We use function prototypes everywhere; we rely on automatic source code -transformation to feed prototype-less C compilers. Transformation is done -by the simple and portable tool 'ansi2knr.c' (courtesy of Ghostscript). -ansi2knr is not very bright, so it imposes a format requirement on function -declarations: the function name MUST BEGIN IN COLUMN 1. Thus all functions -should be written in the following style: - -LOCAL(int *) -function_name (int a, char *b) -{ - code... -} - -Note that each function definition must begin with GLOBAL(type), LOCAL(type), -or METHODDEF(type). These macros expand to "static type" or just "type" as -appropriate. They provide a readable indication of the routine's usage and -can readily be changed for special needs. (For instance, special linkage -keywords can be inserted for use in Windows DLLs.) - -ansi2knr does not transform method declarations (function pointers in -structs). We handle these with a macro JMETHOD, defined as - #ifdef HAVE_PROTOTYPES - #define JMETHOD(type,methodname,arglist) type (*methodname) arglist - #else - #define JMETHOD(type,methodname,arglist) type (*methodname) () - #endif -which is used like this: - struct function_pointers { - JMETHOD(void, init_entropy_encoder, (int somearg, jparms *jp)); - JMETHOD(void, term_entropy_encoder, (void)); - }; -Note the set of parentheses surrounding the parameter list. - -A similar solution is used for forward and external function declarations -(see the EXTERN and JPP macros). - -If the code is to work on non-ANSI compilers, we cannot rely on a prototype -declaration to coerce actual parameters into the right types. Therefore, use -explicit casts on actual parameters whenever the actual parameter type is not -identical to the formal parameter. Beware of implicit conversions to "int". - -It seems there are some non-ANSI compilers in which the sizeof() operator -is defined to return int, yet size_t is defined as long. Needless to say, -this is brain-damaged. Always use the SIZEOF() macro in place of sizeof(), -so that the result is guaranteed to be of type size_t. - - -The JPEG library is intended to be used within larger programs. Furthermore, -we want it to be reentrant so that it can be used by applications that process -multiple images concurrently. The following rules support these requirements: - -1. Avoid direct use of file I/O, "malloc", error report printouts, etc; -pass these through the common routines provided. - -2. Minimize global namespace pollution. Functions should be declared static -wherever possible. (Note that our method-based calling conventions help this -a lot: in many modules only the initialization function will ever need to be -called directly, so only that function need be externally visible.) All -global function names should begin with "jpeg_", and should have an -abbreviated name (unique in the first six characters) substituted by macro -when NEED_SHORT_EXTERNAL_NAMES is set. - -3. Don't use global variables; anything that must be used in another module -should be in the common data structures. - -4. Don't use static variables except for read-only constant tables. Variables -that should be private to a module can be placed into private structures (see -the system architecture document, structure.doc). - -5. Source file names should begin with "j" for files that are part of the -library proper; source files that are not part of the library, such as cjpeg.c -and djpeg.c, do not begin with "j". Keep source file names to eight -characters (plus ".c" or ".h", etc) to make life easy for MS-DOSers. Keep -compression and decompression code in separate source files --- some -applications may want only one half of the library. - -Note: these rules (particularly #4) are not followed religiously in the -modules that are used in cjpeg/djpeg but are not part of the JPEG library -proper. Those modules are not really intended to be used in other -applications. diff --git a/Build/source/libs/jpeg/config.guess b/Build/source/libs/jpeg/config.guess deleted file mode 100644 index e792aac6080..00000000000 --- a/Build/source/libs/jpeg/config.guess +++ /dev/null @@ -1,1494 +0,0 @@ -#! /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 -# Free Software Foundation, Inc. - -timestamp='2009-09-18' - -# 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 -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# 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. -# -# 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. -# -# 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 - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -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 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." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -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 - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:[3456]*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - EM64T | authenticamd | genuineintel) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`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 - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - 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} - 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 - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-gnu - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - 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 ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - 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 - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - 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 < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/Build/source/libs/jpeg/config.sub b/Build/source/libs/jpeg/config.sub deleted file mode 100644 index 5ecc18b6ada..00000000000 --- a/Build/source/libs/jpeg/config.sub +++ /dev/null @@ -1,1700 +0,0 @@ -#! /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 -# Free Software Foundation, Inc. - -timestamp='2009-10-07' - -# 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 -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# 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. - - -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -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 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." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -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) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | 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 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nios | nios2 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12 | picochip) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ - | tron-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze) - basic_machine=microblaze-xilinx - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - tile*) - basic_machine=tile-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -kopensolaris* \ - | -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* \ - | -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* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/Build/source/libs/jpeg/configure b/Build/source/libs/jpeg/configure deleted file mode 100755 index 35c9db5cadc..00000000000 --- a/Build/source/libs/jpeg/configure +++ /dev/null @@ -1,2011 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.12 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_help= -ac_default_prefix=/usr/local -# Any additions from configure.in: -ac_help="$ac_help - --enable-shared build shared library using GNU libtool" -ac_help="$ac_help - --enable-static build static library using GNU libtool" -ac_help="$ac_help - --enable-maxmem[=N] enable use of temp files, set max mem usage to N MB" -ac_help="$ac_help -" - -# Initialize some variables set by options. -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -# Maximum number of lines to put in a shell here document. -ac_max_here_lines=12 - -ac_prev= -for ac_option -do - - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" - ac_prev= - continue - fi - - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$ac_optarg'" ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he) - # 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 << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; - - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.12" - exit 0 ;; - - -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; - - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } - ;; - - *=*) - varname=`echo "$ac_option"|sed -e 's/=.*//'` - # Reject names that aren't valid shell variable names. - if test -n "`echo $varname| sed 's/[a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $varname: invalid shell variable name" 1>&2; exit 1; } - fi - val="`echo "$ac_option"|sed 's/[^=]*=//'`" - test -n "$verbose" && echo " setting shell variable $varname to $val" - eval "$varname='$val'" - eval "export $varname" ;; - - *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 - -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=jcmaster.c - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } - fi -fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` - -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done - - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi - - - -# Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:538: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:567: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - ac_prog_rejected=no - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_save_ifs" -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# -gt 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - set dummy "$ac_dir/$ac_word" "$@" - shift - ac_cv_prog_CC="$@" - fi -fi -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } -fi - -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:615: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then - ac_cv_prog_cc_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - ac_cv_prog_cc_cross=no - else - ac_cv_prog_cc_cross=yes - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_prog_cc_works=no -fi -rm -fr conftest* - -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 -if test $ac_cv_prog_cc_works = no; then - { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } -fi -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:649: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 -cross_compiling=$ac_cv_prog_cc_cross - -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:654: checking whether we are using GNU C" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi -fi - -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 - -if test $ac_cv_prog_gcc = yes; then - GCC=yes - test "${CFLAGS+set}" = set || CFLAGS="-O2" -else - GCC= - test "${CFLAGS+set}" = set || CFLAGS="-O" -fi - -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:681: checking how to run the C preprocessor" >&5 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and "${CC-cc}" will confuse make. - CPP="${CC-cc} -E" - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. - cat > conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:702: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -E -traditional-cpp" - cat > conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:719: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP=/lib/cpp -fi -rm -f conftest* -fi -rm -f conftest* - ac_cv_prog_CPP="$CPP" -fi - CPP="$ac_cv_prog_CPP" -else - ac_cv_prog_CPP="$CPP" -fi -echo "$ac_t""$CPP" 1>&6 - -echo $ac_n "checking for function prototypes""... $ac_c" 1>&6 -echo "configure:742: checking for function prototypes" >&5 -if eval "test \"`echo '$''{'ijg_cv_have_prototypes'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ijg_cv_have_prototypes=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ijg_cv_have_prototypes=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ijg_cv_have_prototypes" 1>&6 -if test $ijg_cv_have_prototypes = yes; then - cat >> confdefs.h <<\EOF -#define HAVE_PROTOTYPES -EOF - -else - echo Your compiler does not seem to know about function prototypes. - echo Perhaps it needs a special switch to enable ANSI C mode. - echo If so, we recommend running configure like this: - echo " ./configure CC='cc -switch'" - echo where -switch is the proper switch. -fi -ac_safe=`echo "stddef.h" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for stddef.h""... $ac_c" 1>&6 -echo "configure:792: checking for stddef.h" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:802: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_STDDEF_H -EOF - -else - echo "$ac_t""no" 1>&6 -fi - -ac_safe=`echo "stdlib.h" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for stdlib.h""... $ac_c" 1>&6 -echo "configure:828: checking for stdlib.h" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:838: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_STDLIB_H -EOF - -else - echo "$ac_t""no" 1>&6 -fi - -ac_safe=`echo "string.h" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for string.h""... $ac_c" 1>&6 -echo "configure:864: checking for string.h" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - : -else - echo "$ac_t""no" 1>&6 -cat >> confdefs.h <<\EOF -#define NEED_BSD_STRINGS -EOF - -fi - -echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:900: checking for size_t" >&5 -cat > conftest.$ac_ext < -#endif -#ifdef HAVE_STDLIB_H -#include -#endif -#include -#ifdef NEED_BSD_STRINGS -#include -#else -#include -#endif -typedef size_t my_size_t; - -int main() { - my_size_t foovar; -; return 0; } -EOF -if { (eval echo configure:923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ijg_size_t_ok=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ijg_size_t_ok="not ANSI, perhaps it is in sys/types.h" -fi -rm -f conftest* -echo "$ac_t""$ijg_size_t_ok" 1>&6 -if test "$ijg_size_t_ok" != yes; then -ac_safe=`echo "sys/types.h" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for sys/types.h""... $ac_c" 1>&6 -echo "configure:937: checking for sys/types.h" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:947: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define NEED_SYS_TYPES_H -EOF - -cat > conftest.$ac_ext < -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "size_t" >/dev/null 2>&1; then - rm -rf conftest* - ijg_size_t_ok="size_t is in sys/types.h" -else - rm -rf conftest* - ijg_size_t_ok=no -fi -rm -f conftest* - -else - echo "$ac_t""no" 1>&6 -ijg_size_t_ok=no -fi - -echo "$ac_t""$ijg_size_t_ok" 1>&6 -if test "$ijg_size_t_ok" = no; then - echo Type size_t is not defined in any of the usual places. - echo Try putting '"typedef unsigned int size_t;"' in jconfig.h. -fi -fi -echo $ac_n "checking for type unsigned char""... $ac_c" 1>&6 -echo "configure:994: checking for type unsigned char" >&5 -cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - echo "$ac_t""yes" 1>&6 -cat >> confdefs.h <<\EOF -#define HAVE_UNSIGNED_CHAR -EOF - -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* -echo $ac_n "checking for type unsigned short""... $ac_c" 1>&6 -echo "configure:1018: checking for type unsigned short" >&5 -cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - echo "$ac_t""yes" 1>&6 -cat >> confdefs.h <<\EOF -#define HAVE_UNSIGNED_SHORT -EOF - -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* -echo $ac_n "checking for type void""... $ac_c" 1>&6 -echo "configure:1042: checking for type void" >&5 -cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -cat >> confdefs.h <<\EOF -#define void char -EOF - -fi -rm -f conftest* - -echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:1088: checking for working const" >&5 -if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <j = 5; -} -{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; -} - -; return 0; } -EOF -if { (eval echo configure:1142: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_c_const=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_c_const=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_c_const" 1>&6 -if test $ac_cv_c_const = no; then - cat >> confdefs.h <<\EOF -#define const -EOF - -fi - -echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:1163: checking for inline" >&5 -ijg_cv_inline="" -cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ijg_cv_inline="__inline__" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ijg_cv_inline="__inline" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ijg_cv_inline="inline" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 -fi -rm -f conftest* -fi -rm -f conftest* -fi -rm -f conftest* -echo "$ac_t""$ijg_cv_inline" 1>&6 -cat >> confdefs.h <&6 -echo "configure:1224: checking for broken incomplete types" >&5 -cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - echo "$ac_t""ok" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""broken" 1>&6 -cat >> confdefs.h <<\EOF -#define INCOMPLETE_TYPES_BROKEN -EOF - -fi -rm -f conftest* -echo $ac_n "checking for short external names""... $ac_c" 1>&6 -echo "configure:1248: checking for short external names" >&5 -cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - echo "$ac_t""ok" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""short" 1>&6 -cat >> confdefs.h <<\EOF -#define NEED_SHORT_EXTERNAL_NAMES -EOF - -fi -rm -f conftest* -echo $ac_n "checking to see if char is signed""... $ac_c" 1>&6 -echo "configure:1275: checking to see if char is signed" >&5 -if test "$cross_compiling" = yes; then - echo Assuming that char is signed on target machine. -echo If it is unsigned, this will be a little bit inefficient. - -else - cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null -then - echo "$ac_t""no" 1>&6 -cat >> confdefs.h <<\EOF -#define CHAR_IS_UNSIGNED -EOF - -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - echo "$ac_t""yes" 1>&6 -fi -rm -fr conftest* -fi - -echo $ac_n "checking to see if right shift is signed""... $ac_c" 1>&6 -echo "configure:1323: checking to see if right shift is signed" >&5 -if test "$cross_compiling" = yes; then - echo "$ac_t""Assuming that right shift is signed on target machine." 1>&6 -else - cat > conftest.$ac_ext <> 4; - - if (res == -0x7F7E80CL) { /* expected result for signed shift */ - return 1; /* right shift is signed */ - } - /* see if unsigned-shift hack will fix it. */ - /* we can't just test exact value since it depends on width of long... */ - res |= (~0L) << (32-4); - if (res == -0x7F7E80CL) { /* expected result now? */ - return 0; /* right shift is unsigned */ - } - printf("Right shift isn't acting as I expect it to.\n"); - printf("I fear the JPEG software will not work at all.\n\n"); - return 0; /* try it with unsigned anyway */ -} -main() { - exit(is_shifting_signed(-0x7F7E80B1L)); -} -EOF -if { (eval echo configure:1358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null -then - echo "$ac_t""no" 1>&6 -cat >> confdefs.h <<\EOF -#define RIGHT_SHIFT_IS_UNSIGNED -EOF - -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - echo "$ac_t""yes" 1>&6 -fi -rm -fr conftest* -fi - -echo $ac_n "checking to see if fopen accepts b spec""... $ac_c" 1>&6 -echo "configure:1375: checking to see if fopen accepts b spec" >&5 -if test "$cross_compiling" = yes; then - echo "$ac_t""Assuming that it does." 1>&6 -else - cat > conftest.$ac_ext < -main() { - if (fopen("conftestdata", "wb") != NULL) - exit(0); - exit(1); -} -EOF -if { (eval echo configure:1390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null -then - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - echo "$ac_t""no" 1>&6 -cat >> confdefs.h <<\EOF -#define DONT_USE_B_MODE -EOF - -fi -rm -fr conftest* -fi - -ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } -fi -ac_config_guess=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. - -# 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: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# ./install, which can be erroneously created by make from ./install.sh. -echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1436: checking for a BSD compatible install" >&5 -if test -z "$INSTALL"; then -if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - for ac_prog in ginstall installbsd scoinst install; do - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - # OSF/1 installbsd also uses dspmsg, but is usable. - : - else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - done - ;; - esac - done - IFS="$ac_save_IFS" - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL="$ac_cv_path_install" - else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL="$ac_install_sh" - fi -fi -echo "$ac_t""$INSTALL" 1>&6 - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -# Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1488: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" -fi -fi -RANLIB="$ac_cv_prog_RANLIB" -if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - -# Decide whether to use libtool, -# and if so whether to build shared, static, or both flavors of library. -LTSHARED="no" -# Check whether --enable-shared or --disable-shared was given. -if test "${enable_shared+set}" = set; then - enableval="$enable_shared" - LTSHARED="$enableval" -fi - -LTSTATIC="no" -# Check whether --enable-static or --disable-static was given. -if test "${enable_static+set}" = set; then - enableval="$enable_static" - LTSTATIC="$enableval" -fi - -if test "x$LTSHARED" != xno -o "x$LTSTATIC" != xno; then - USELIBTOOL="yes" - LIBTOOL="./libtool" - O="lo" - A="la" - LN='$(LIBTOOL) --mode=link $(CC)' - INSTALL_LIB='$(LIBTOOL) --mode=install ${INSTALL}' - INSTALL_PROGRAM="\$(LIBTOOL) --mode=install $INSTALL_PROGRAM" -else - USELIBTOOL="no" - LIBTOOL="" - O="o" - A="a" - LN='$(CC)' - INSTALL_LIB="$INSTALL_DATA" -fi - - - - - - -# Configure libtool if needed. -if test $USELIBTOOL = yes; then - disable_shared= - disable_static= - if test "x$LTSHARED" = xno; then - disable_shared="--disable-shared" - fi - if test "x$LTSTATIC" = xno; then - disable_static="--disable-static" - fi - $srcdir/ltconfig $disable_shared $disable_static $srcdir/ltmain.sh -fi - -# Select memory manager depending on user input. -# If no "-enable-maxmem", use jmemnobs -MEMORYMGR='jmemnobs.$(O)' -MAXMEM="no" -# Check whether --enable-maxmem or --disable-maxmem was given. -if test "${enable_maxmem+set}" = set; then - enableval="$enable_maxmem" - MAXMEM="$enableval" -fi - -# support --with-maxmem for backwards compatibility with IJG V5. -# Check whether --with-maxmem or --without-maxmem was given. -if test "${with_maxmem+set}" = set; then - withval="$with_maxmem" - MAXMEM="$withval" -fi - -if test "x$MAXMEM" = xyes; then - MAXMEM=1 -fi -if test "x$MAXMEM" != xno; then - if test -n "`echo $MAXMEM | sed 's/[0-9]//g'`"; then - { echo "configure: error: non-numeric argument to --enable-maxmem" 1>&2; exit 1; } - fi - DEFAULTMAXMEM=`expr $MAXMEM \* 1048576` -cat >> confdefs.h <&6 -echo "configure:1596: checking for 'tmpfile()'" >&5 -cat > conftest.$ac_ext < -int main() { - FILE * tfile = tmpfile(); -; return 0; } -EOF -if { (eval echo configure:1605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - echo "$ac_t""yes" 1>&6 -MEMORYMGR='jmemansi.$(O)' -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -MEMORYMGR='jmemname.$(O)' -cat >> confdefs.h <<\EOF -#define NEED_SIGNAL_CATCHER -EOF - -echo $ac_n "checking for 'mktemp()'""... $ac_c" 1>&6 -echo "configure:1620: checking for 'mktemp()'" >&5 -cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -cat >> confdefs.h <<\EOF -#define NO_MKTEMP -EOF - -fi -rm -f conftest* -fi -rm -f conftest* -fi - - -# Extract the library version ID from jpeglib.h. -echo $ac_n "checking libjpeg version number""... $ac_c" 1>&6 -echo "configure:1650: checking libjpeg version number" >&5 -JPEG_LIB_VERSION=`sed -e '/^#define JPEG_LIB_VERSION/!d' -e 's/^[^0-9]*\([0-9][0-9]*\).*$/\1/' $srcdir/jpeglib.h` -echo "$ac_t""$JPEG_LIB_VERSION" 1>&6 - - -# Prepare to massage makefile.cfg correctly. -if test $ijg_cv_have_prototypes = yes; then - A2K_DEPS="" - COM_A2K="# " -else - A2K_DEPS="ansi2knr" - COM_A2K="" -fi - - -# ansi2knr needs -DBSD if string.h is missing -if test $ac_cv_header_string_h = no; then - ANSI2KNRFLAGS="-DBSD" -else - ANSI2KNRFLAGS="" -fi - -# Substitutions to enable or disable libtool-related stuff -if test $USELIBTOOL = yes -a $ijg_cv_have_prototypes = yes; then - COM_LT="" -else - COM_LT="# " -fi - -if test "x$LTSHARED" != xno; then - FORCE_INSTALL_LIB="install-lib" -else - FORCE_INSTALL_LIB="" -fi - -# Set up -I directives -if test "x$srcdir" = x.; then - INCLUDEFLAGS='-I$(srcdir)' -else - INCLUDEFLAGS='-I. -I$(srcdir)' -fi - -trap '' 1 2 15 - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - -DEFS=-DHAVE_CONFIG_H - -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} - -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS </dev/null | sed 1q`: -# -# $0 $ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option -do - case "\$ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.12" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; - esac -done - -ac_given_srcdir=$srcdir -ac_given_INSTALL="$INSTALL" - -trap 'rm -fr `echo "Makefile:makefile.cfg jconfig.h:jconfig.cfg" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@CC@%$CC%g -s%@CPP@%$CPP%g -s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_DATA@%$INSTALL_DATA%g -s%@RANLIB@%$RANLIB%g -s%@LIBTOOL@%$LIBTOOL%g -s%@O@%$O%g -s%@A@%$A%g -s%@LN@%$LN%g -s%@INSTALL_LIB@%$INSTALL_LIB%g -s%@MEMORYMGR@%$MEMORYMGR%g -s%@JPEG_LIB_VERSION@%$JPEG_LIB_VERSION%g -s%@A2K_DEPS@%$A2K_DEPS%g -s%@COM_A2K@%$COM_A2K%g -s%@ANSI2KNRFLAGS@%$ANSI2KNRFLAGS%g -s%@COM_LT@%$COM_LT%g -s%@FORCE_INSTALL_LIB@%$FORCE_INSTALL_LIB%g -s%@INCLUDEFLAGS@%$INCLUDEFLAGS%g - -CEOF -EOF - -cat >> $CONFIG_STATUS <<\EOF - -# Split the substitutions into bite-sized pieces for seds with -# small command number limits, like on Digital OSF/1 and HP-UX. -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. -ac_file=1 # Number of current file. -ac_beg=1 # First line for current file. -ac_end=$ac_max_sed_cmds # Line after last line for current file. -ac_more_lines=: -ac_sed_cmds="" -while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file - else - sed "${ac_end}q" conftest.subs > conftest.s$ac_file - fi - if test ! -s conftest.s$ac_file; then - ac_more_lines=false - rm -f conftest.s$ac_file - else - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f conftest.s$ac_file" - else - ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" - fi - ac_file=`expr $ac_file + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_cmds` - fi -done -if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat -fi -EOF - -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - case "$ac_given_INSTALL" in - [/$]*) INSTALL="$ac_given_INSTALL" ;; - *) INSTALL="$ac_dots$ac_given_INSTALL" ;; - esac - - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -s%@INSTALL@%$INSTALL%g -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file -fi; done -rm -f conftest.s* - -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' -ac_dC='\3' -ac_dD='%g' -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". -ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='\([ ]\)%\1#\2define\3' -ac_uC=' ' -ac_uD='\4%g' -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_eB='$%\1#\2define\3' -ac_eC=' ' -ac_eD='%g' - -if test "${CONFIG_HEADERS+set}" != set; then -EOF -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -fi -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - echo creating $ac_file - - rm -f conftest.frag conftest.in conftest.out - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - cat $ac_file_inputs > conftest.in - -EOF - -# Transform confdefs.h into a sed script conftest.vals that substitutes -# the proper values into config.h.in to produce config.h. And first: -# Protect against being on the right side of a sed subst in config.status. -# Protect against being in an unquoted here document in config.status. -rm -f conftest.vals -cat > conftest.hdr <<\EOF -s/[\\&%]/\\&/g -s%[\\$`]%\\&%g -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp -s%ac_d%ac_u%gp -s%ac_u%ac_e%gp -EOF -sed -n -f conftest.hdr confdefs.h > conftest.vals -rm -f conftest.hdr - -# This sed command replaces #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -cat >> conftest.vals <<\EOF -EOF - -# Break up conftest.vals because some shells have a limit on -# the size of here documents, and old seds have small limits too. - -rm -f conftest.tail -while : -do - ac_lines=`grep -c . conftest.vals` - # grep -c gives empty output for an empty file on some AIX systems. - if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi - # Write a limited-size here document to conftest.frag. - echo ' cat > conftest.frag <> $CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS - echo 'CEOF - sed -f conftest.frag conftest.in > conftest.out - rm -f conftest.in - mv conftest.out conftest.in -' >> $CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail - rm -f conftest.vals - mv conftest.tail conftest.vals -done -rm -f conftest.vals - -cat >> $CONFIG_STATUS <<\EOF - rm -f conftest.frag conftest.h - echo "/* $ac_file. Generated automatically by configure. */" > conftest.h - cat conftest.in >> conftest.h - rm -f conftest.in - if cmp -s $ac_file conftest.h 2>/dev/null; then - echo "$ac_file is unchanged" - rm -f conftest.h - else - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - fi - rm -f $ac_file - mv conftest.h $ac_file - fi -fi; done - -EOF -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF - -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 - diff --git a/Build/source/libs/jpeg/djpeg.1 b/Build/source/libs/jpeg/djpeg.1 deleted file mode 100644 index 11beb6a5133..00000000000 --- a/Build/source/libs/jpeg/djpeg.1 +++ /dev/null @@ -1,253 +0,0 @@ -.TH DJPEG 1 "22 August 1997" -.SH NAME -djpeg \- decompress a JPEG file to an image file -.SH SYNOPSIS -.B djpeg -[ -.I options -] -[ -.I filename -] -.LP -.SH DESCRIPTION -.LP -.B djpeg -decompresses the named JPEG file, or the standard input if no file is named, -and produces an image file on the standard output. PBMPLUS (PPM/PGM), BMP, -GIF, Targa, or RLE (Utah Raster Toolkit) output format can be selected. -(RLE is supported only if the URT library is available.) -.SH OPTIONS -All switch names may be abbreviated; for example, -.B \-grayscale -may be written -.B \-gray -or -.BR \-gr . -Most of the "basic" switches can be abbreviated to as little as one letter. -Upper and lower case are equivalent (thus -.B \-BMP -is the same as -.BR \-bmp ). -British spellings are also accepted (e.g., -.BR \-greyscale ), -though for brevity these are not mentioned below. -.PP -The basic switches are: -.TP -.BI \-colors " N" -Reduce image to at most N colors. This reduces the number of colors used in -the output image, so that it can be displayed on a colormapped display or -stored in a colormapped file format. For example, if you have an 8-bit -display, you'd need to reduce to 256 or fewer colors. -.TP -.BI \-quantize " N" -Same as -.BR \-colors . -.B \-colors -is the recommended name, -.B \-quantize -is provided only for backwards compatibility. -.TP -.B \-fast -Select recommended processing options for fast, low quality output. (The -default options are chosen for highest quality output.) Currently, this is -equivalent to \fB\-dct fast \-nosmooth \-onepass \-dither ordered\fR. -.TP -.B \-grayscale -Force gray-scale output even if JPEG file is color. Useful for viewing on -monochrome displays; also, -.B djpeg -runs noticeably faster in this mode. -.TP -.BI \-scale " M/N" -Scale the output image by a factor M/N. Currently the scale factor must be -1/1, 1/2, 1/4, or 1/8. Scaling is handy if the image is larger than your -screen; also, -.B djpeg -runs much faster when scaling down the output. -.TP -.B \-bmp -Select BMP output format (Windows flavor). 8-bit colormapped format is -emitted if -.B \-colors -or -.B \-grayscale -is specified, or if the JPEG file is gray-scale; otherwise, 24-bit full-color -format is emitted. -.TP -.B \-gif -Select GIF output format. Since GIF does not support more than 256 colors, -.B \-colors 256 -is assumed (unless you specify a smaller number of colors). -.TP -.B \-os2 -Select BMP output format (OS/2 1.x flavor). 8-bit colormapped format is -emitted if -.B \-colors -or -.B \-grayscale -is specified, or if the JPEG file is gray-scale; otherwise, 24-bit full-color -format is emitted. -.TP -.B \-pnm -Select PBMPLUS (PPM/PGM) output format (this is the default format). -PGM is emitted if the JPEG file is gray-scale or if -.B \-grayscale -is specified; otherwise PPM is emitted. -.TP -.B \-rle -Select RLE output format. (Requires URT library.) -.TP -.B \-targa -Select Targa output format. Gray-scale format is emitted if the JPEG file is -gray-scale or if -.B \-grayscale -is specified; otherwise, colormapped format is emitted if -.B \-colors -is specified; otherwise, 24-bit full-color format is emitted. -.PP -Switches for advanced users: -.TP -.B \-dct int -Use integer DCT method (default). -.TP -.B \-dct fast -Use fast integer DCT (less accurate). -.TP -.B \-dct float -Use floating-point DCT method. -The float method is very slightly more accurate than the int method, but is -much slower unless your machine has very fast floating-point hardware. Also -note that results of the floating-point method may vary slightly across -machines, while the integer methods should give the same results everywhere. -The fast integer method is much less accurate than the other two. -.TP -.B \-dither fs -Use Floyd-Steinberg dithering in color quantization. -.TP -.B \-dither ordered -Use ordered dithering in color quantization. -.TP -.B \-dither none -Do not use dithering in color quantization. -By default, Floyd-Steinberg dithering is applied when quantizing colors; this -is slow but usually produces the best results. Ordered dither is a compromise -between speed and quality; no dithering is fast but usually looks awful. Note -that these switches have no effect unless color quantization is being done. -Ordered dither is only available in -.B \-onepass -mode. -.TP -.BI \-map " file" -Quantize to the colors used in the specified image file. This is useful for -producing multiple files with identical color maps, or for forcing a -predefined set of colors to be used. The -.I file -must be a GIF or PPM file. This option overrides -.B \-colors -and -.BR \-onepass . -.TP -.B \-nosmooth -Use a faster, lower-quality upsampling routine. -.TP -.B \-onepass -Use one-pass instead of two-pass color quantization. The one-pass method is -faster and needs less memory, but it produces a lower-quality image. -.B \-onepass -is ignored unless you also say -.B \-colors -.IR N . -Also, the one-pass method is always used for gray-scale output (the two-pass -method is no improvement then). -.TP -.BI \-maxmemory " N" -Set limit for amount of memory to use in processing large images. Value is -in thousands of bytes, or millions of bytes if "M" is attached to the -number. For example, -.B \-max 4m -selects 4000000 bytes. If more space is needed, temporary files will be used. -.TP -.BI \-outfile " name" -Send output image to the named file, not to standard output. -.TP -.B \-verbose -Enable debug printout. More -.BR \-v 's -give more output. Also, version information is printed at startup. -.TP -.B \-debug -Same as -.BR \-verbose . -.SH EXAMPLES -.LP -This example decompresses the JPEG file foo.jpg, quantizes it to -256 colors, and saves the output in 8-bit BMP format in foo.bmp: -.IP -.B djpeg \-colors 256 \-bmp -.I foo.jpg -.B > -.I foo.bmp -.SH HINTS -To get a quick preview of an image, use the -.B \-grayscale -and/or -.B \-scale -switches. -.B \-grayscale \-scale 1/8 -is the fastest case. -.PP -Several options are available that trade off image quality to gain speed. -.B \-fast -turns on the recommended settings. -.PP -.B \-dct fast -and/or -.B \-nosmooth -gain speed at a small sacrifice in quality. -When producing a color-quantized image, -.B \-onepass \-dither ordered -is fast but much lower quality than the default behavior. -.B \-dither none -may give acceptable results in two-pass mode, but is seldom tolerable in -one-pass mode. -.PP -If you are fortunate enough to have very fast floating point hardware, -\fB\-dct float\fR may be even faster than \fB\-dct fast\fR. But on most -machines \fB\-dct float\fR is slower than \fB\-dct int\fR; in this case it is -not worth using, because its theoretical accuracy advantage is too small to be -significant in practice. -.SH ENVIRONMENT -.TP -.B JPEGMEM -If this environment variable is set, its value is the default memory limit. -The value is specified as described for the -.B \-maxmemory -switch. -.B JPEGMEM -overrides the default value specified when the program was compiled, and -itself is overridden by an explicit -.BR \-maxmemory . -.SH SEE ALSO -.BR cjpeg (1), -.BR jpegtran (1), -.BR rdjpgcom (1), -.BR wrjpgcom (1) -.br -.BR ppm (5), -.BR pgm (5) -.br -Wallace, Gregory K. "The JPEG Still Picture Compression Standard", -Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44. -.SH AUTHOR -Independent JPEG Group -.SH BUGS -Arithmetic coding is not supported for legal reasons. -.PP -To avoid the Unisys LZW patent, -.B djpeg -produces uncompressed GIF files. These are larger than they should be, but -are readable by standard GIF decoders. -.PP -Still not as fast as we'd like. diff --git a/Build/source/libs/jpeg/djpeg.c b/Build/source/libs/jpeg/djpeg.c deleted file mode 100644 index e099e90aee3..00000000000 --- a/Build/source/libs/jpeg/djpeg.c +++ /dev/null @@ -1,616 +0,0 @@ -/* - * djpeg.c - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a command-line user interface for the JPEG decompressor. - * It should work on any system with Unix- or MS-DOS-style command lines. - * - * Two different command line styles are permitted, depending on the - * compile-time switch TWO_FILE_COMMANDLINE: - * djpeg [options] inputfile outputfile - * djpeg [options] [inputfile] - * In the second style, output is always to standard output, which you'd - * normally redirect to a file or pipe to some other program. Input is - * either from a named file or from standard input (typically redirected). - * The second style is convenient on Unix but is unhelpful on systems that - * don't support pipes. Also, you MUST use the first style if your system - * doesn't do binary I/O to stdin/stdout. - * To simplify script writing, the "-outfile" switch is provided. The syntax - * djpeg [options] -outfile outputfile inputfile - * works regardless of which command line style is used. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ -#include "jversion.h" /* for version message */ - -#include /* to declare isprint() */ - -#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ -#ifdef __MWERKS__ -#include /* Metrowerks needs this */ -#include /* ... and this */ -#endif -#ifdef THINK_C -#include /* Think declares it here */ -#endif -#endif - - -/* Create the add-on message string table. */ - -#define JMESSAGE(code,string) string , - -static const char * const cdjpeg_message_table[] = { -#include "cderror.h" - NULL -}; - - -/* - * This list defines the known output image formats - * (not all of which need be supported by a given version). - * You can change the default output format by defining DEFAULT_FMT; - * indeed, you had better do so if you undefine PPM_SUPPORTED. - */ - -typedef enum { - FMT_BMP, /* BMP format (Windows flavor) */ - FMT_GIF, /* GIF format */ - FMT_OS2, /* BMP format (OS/2 flavor) */ - FMT_PPM, /* PPM/PGM (PBMPLUS formats) */ - FMT_RLE, /* RLE format */ - FMT_TARGA, /* Targa format */ - FMT_TIFF /* TIFF format */ -} IMAGE_FORMATS; - -#ifndef DEFAULT_FMT /* so can override from CFLAGS in Makefile */ -#define DEFAULT_FMT FMT_PPM -#endif - -static IMAGE_FORMATS requested_fmt; - - -/* - * Argument-parsing code. - * The switch parser is designed to be useful with DOS-style command line - * syntax, ie, intermixed switches and file names, where only the switches - * to the left of a given file name affect processing of that file. - * The main program in this file doesn't actually use this capability... - */ - - -static const char * progname; /* program name for error messages */ -static char * outfilename; /* for -outfile switch */ - - -LOCAL(void) -usage (void) -/* complain about bad command line */ -{ - fprintf(stderr, "usage: %s [switches] ", progname); -#ifdef TWO_FILE_COMMANDLINE - fprintf(stderr, "inputfile outputfile\n"); -#else - fprintf(stderr, "[inputfile]\n"); -#endif - - fprintf(stderr, "Switches (names may be abbreviated):\n"); - fprintf(stderr, " -colors N Reduce image to no more than N colors\n"); - fprintf(stderr, " -fast Fast, low-quality processing\n"); - fprintf(stderr, " -grayscale Force grayscale output\n"); -#ifdef IDCT_SCALING_SUPPORTED - fprintf(stderr, " -scale M/N Scale output image by fraction M/N, eg, 1/8\n"); -#endif -#ifdef BMP_SUPPORTED - fprintf(stderr, " -bmp Select BMP output format (Windows style)%s\n", - (DEFAULT_FMT == FMT_BMP ? " (default)" : "")); -#endif -#ifdef GIF_SUPPORTED - fprintf(stderr, " -gif Select GIF output format%s\n", - (DEFAULT_FMT == FMT_GIF ? " (default)" : "")); -#endif -#ifdef BMP_SUPPORTED - fprintf(stderr, " -os2 Select BMP output format (OS/2 style)%s\n", - (DEFAULT_FMT == FMT_OS2 ? " (default)" : "")); -#endif -#ifdef PPM_SUPPORTED - fprintf(stderr, " -pnm Select PBMPLUS (PPM/PGM) output format%s\n", - (DEFAULT_FMT == FMT_PPM ? " (default)" : "")); -#endif -#ifdef RLE_SUPPORTED - fprintf(stderr, " -rle Select Utah RLE output format%s\n", - (DEFAULT_FMT == FMT_RLE ? " (default)" : "")); -#endif -#ifdef TARGA_SUPPORTED - fprintf(stderr, " -targa Select Targa output format%s\n", - (DEFAULT_FMT == FMT_TARGA ? " (default)" : "")); -#endif - fprintf(stderr, "Switches for advanced users:\n"); -#ifdef DCT_ISLOW_SUPPORTED - fprintf(stderr, " -dct int Use integer DCT method%s\n", - (JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : "")); -#endif -#ifdef DCT_IFAST_SUPPORTED - fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n", - (JDCT_DEFAULT == JDCT_IFAST ? " (default)" : "")); -#endif -#ifdef DCT_FLOAT_SUPPORTED - fprintf(stderr, " -dct float Use floating-point DCT method%s\n", - (JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : "")); -#endif - fprintf(stderr, " -dither fs Use F-S dithering (default)\n"); - fprintf(stderr, " -dither none Don't use dithering in quantization\n"); - fprintf(stderr, " -dither ordered Use ordered dither (medium speed, quality)\n"); -#ifdef QUANT_2PASS_SUPPORTED - fprintf(stderr, " -map FILE Map to colors used in named image file\n"); -#endif - fprintf(stderr, " -nosmooth Don't use high-quality upsampling\n"); -#ifdef QUANT_1PASS_SUPPORTED - fprintf(stderr, " -onepass Use 1-pass quantization (fast, low quality)\n"); -#endif - fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n"); - fprintf(stderr, " -outfile name Specify name for output file\n"); - fprintf(stderr, " -verbose or -debug Emit debug output\n"); - exit(EXIT_FAILURE); -} - - -LOCAL(int) -parse_switches (j_decompress_ptr cinfo, int argc, char **argv, - int last_file_arg_seen, boolean for_real) -/* Parse optional switches. - * Returns argv[] index of first file-name argument (== argc if none). - * Any file names with indexes <= last_file_arg_seen are ignored; - * they have presumably been processed in a previous iteration. - * (Pass 0 for last_file_arg_seen on the first or only iteration.) - * for_real is FALSE on the first (dummy) pass; we may skip any expensive - * processing. - */ -{ - int argn; - char * arg; - - /* Set up default JPEG parameters. */ - requested_fmt = DEFAULT_FMT; /* set default output file format */ - outfilename = NULL; - cinfo->err->trace_level = 0; - - /* Scan command line options, adjust parameters */ - - for (argn = 1; argn < argc; argn++) { - arg = argv[argn]; - if (*arg != '-') { - /* Not a switch, must be a file name argument */ - if (argn <= last_file_arg_seen) { - outfilename = NULL; /* -outfile applies to just one input file */ - continue; /* ignore this name if previously processed */ - } - break; /* else done parsing switches */ - } - arg++; /* advance past switch marker character */ - - if (keymatch(arg, "bmp", 1)) { - /* BMP output format. */ - requested_fmt = FMT_BMP; - - } else if (keymatch(arg, "colors", 1) || keymatch(arg, "colours", 1) || - keymatch(arg, "quantize", 1) || keymatch(arg, "quantise", 1)) { - /* Do color quantization. */ - int val; - - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%d", &val) != 1) - usage(); - cinfo->desired_number_of_colors = val; - cinfo->quantize_colors = TRUE; - - } else if (keymatch(arg, "dct", 2)) { - /* Select IDCT algorithm. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (keymatch(argv[argn], "int", 1)) { - cinfo->dct_method = JDCT_ISLOW; - } else if (keymatch(argv[argn], "fast", 2)) { - cinfo->dct_method = JDCT_IFAST; - } else if (keymatch(argv[argn], "float", 2)) { - cinfo->dct_method = JDCT_FLOAT; - } else - usage(); - - } else if (keymatch(arg, "dither", 2)) { - /* Select dithering algorithm. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (keymatch(argv[argn], "fs", 2)) { - cinfo->dither_mode = JDITHER_FS; - } else if (keymatch(argv[argn], "none", 2)) { - cinfo->dither_mode = JDITHER_NONE; - } else if (keymatch(argv[argn], "ordered", 2)) { - cinfo->dither_mode = JDITHER_ORDERED; - } else - usage(); - - } else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) { - /* Enable debug printouts. */ - /* On first -d, print version identification */ - static boolean printed_version = FALSE; - - if (! printed_version) { - fprintf(stderr, "Independent JPEG Group's DJPEG, version %s\n%s\n", - JVERSION, JCOPYRIGHT); - printed_version = TRUE; - } - cinfo->err->trace_level++; - - } else if (keymatch(arg, "fast", 1)) { - /* Select recommended processing options for quick-and-dirty output. */ - cinfo->two_pass_quantize = FALSE; - cinfo->dither_mode = JDITHER_ORDERED; - if (! cinfo->quantize_colors) /* don't override an earlier -colors */ - cinfo->desired_number_of_colors = 216; - cinfo->dct_method = JDCT_FASTEST; - cinfo->do_fancy_upsampling = FALSE; - - } else if (keymatch(arg, "gif", 1)) { - /* GIF output format. */ - requested_fmt = FMT_GIF; - - } else if (keymatch(arg, "grayscale", 2) || keymatch(arg, "greyscale",2)) { - /* Force monochrome output. */ - cinfo->out_color_space = JCS_GRAYSCALE; - - } else if (keymatch(arg, "map", 3)) { - /* Quantize to a color map taken from an input file. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (for_real) { /* too expensive to do twice! */ -#ifdef QUANT_2PASS_SUPPORTED /* otherwise can't quantize to supplied map */ - FILE * mapfile; - - if ((mapfile = fopen(argv[argn], READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); - exit(EXIT_FAILURE); - } - read_color_map(cinfo, mapfile); - fclose(mapfile); - cinfo->quantize_colors = TRUE; -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } - - } else if (keymatch(arg, "maxmemory", 3)) { - /* Maximum memory in Kb (or Mb with 'm'). */ - long lval; - char ch = 'x'; - - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) - usage(); - if (ch == 'm' || ch == 'M') - lval *= 1000L; - cinfo->mem->max_memory_to_use = lval * 1000L; - - } else if (keymatch(arg, "nosmooth", 3)) { - /* Suppress fancy upsampling */ - cinfo->do_fancy_upsampling = FALSE; - - } else if (keymatch(arg, "onepass", 3)) { - /* Use fast one-pass quantization. */ - cinfo->two_pass_quantize = FALSE; - - } else if (keymatch(arg, "os2", 3)) { - /* BMP output format (OS/2 flavor). */ - requested_fmt = FMT_OS2; - - } else if (keymatch(arg, "outfile", 4)) { - /* Set output file name. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - outfilename = argv[argn]; /* save it away for later use */ - - } else if (keymatch(arg, "pnm", 1) || keymatch(arg, "ppm", 1)) { - /* PPM/PGM output format. */ - requested_fmt = FMT_PPM; - - } else if (keymatch(arg, "rle", 1)) { - /* RLE output format. */ - requested_fmt = FMT_RLE; - - } else if (keymatch(arg, "scale", 1)) { - /* Scale the output image by a fraction M/N. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%d/%d", - &cinfo->scale_num, &cinfo->scale_denom) != 2) - usage(); - - } else if (keymatch(arg, "targa", 1)) { - /* Targa output format. */ - requested_fmt = FMT_TARGA; - - } else { - usage(); /* bogus switch */ - } - } - - return argn; /* return index of next arg (file name) */ -} - - -/* - * Marker processor for COM and interesting APPn markers. - * This replaces the library's built-in processor, which just skips the marker. - * We want to print out the marker as text, to the extent possible. - * Note this code relies on a non-suspending data source. - */ - -LOCAL(unsigned int) -jpeg_getc (j_decompress_ptr cinfo) -/* Read next byte */ -{ - struct jpeg_source_mgr * datasrc = cinfo->src; - - if (datasrc->bytes_in_buffer == 0) { - if (! (*datasrc->fill_input_buffer) (cinfo)) - ERREXIT(cinfo, JERR_CANT_SUSPEND); - } - datasrc->bytes_in_buffer--; - return GETJOCTET(*datasrc->next_input_byte++); -} - - -METHODDEF(boolean) -print_text_marker (j_decompress_ptr cinfo) -{ - boolean traceit = (cinfo->err->trace_level >= 1); - INT32 length; - unsigned int ch; - unsigned int lastch = 0; - - length = jpeg_getc(cinfo) << 8; - length += jpeg_getc(cinfo); - length -= 2; /* discount the length word itself */ - - if (traceit) { - if (cinfo->unread_marker == JPEG_COM) - fprintf(stderr, "Comment, length %ld:\n", (long) length); - else /* assume it is an APPn otherwise */ - fprintf(stderr, "APP%d, length %ld:\n", - cinfo->unread_marker - JPEG_APP0, (long) length); - } - - while (--length >= 0) { - ch = jpeg_getc(cinfo); - if (traceit) { - /* Emit the character in a readable form. - * Nonprintables are converted to \nnn form, - * while \ is converted to \\. - * Newlines in CR, CR/LF, or LF form will be printed as one newline. - */ - if (ch == '\r') { - fprintf(stderr, "\n"); - } else if (ch == '\n') { - if (lastch != '\r') - fprintf(stderr, "\n"); - } else if (ch == '\\') { - fprintf(stderr, "\\\\"); - } else if (isprint(ch)) { - putc(ch, stderr); - } else { - fprintf(stderr, "\\%03o", ch); - } - lastch = ch; - } - } - - if (traceit) - fprintf(stderr, "\n"); - - return TRUE; -} - - -/* - * The main program. - */ - -int -main (int argc, char **argv) -{ - struct jpeg_decompress_struct cinfo; - struct jpeg_error_mgr jerr; -#ifdef PROGRESS_REPORT - struct cdjpeg_progress_mgr progress; -#endif - int file_index; - djpeg_dest_ptr dest_mgr = NULL; - FILE * input_file; - FILE * output_file; - JDIMENSION num_scanlines; - - /* On Mac, fetch a command line. */ -#ifdef USE_CCOMMAND - argc = ccommand(&argv); -#endif - - progname = argv[0]; - if (progname == NULL || progname[0] == 0) - progname = "djpeg"; /* in case C library doesn't provide it */ - - /* Initialize the JPEG decompression object with default error handling. */ - cinfo.err = jpeg_std_error(&jerr); - jpeg_create_decompress(&cinfo); - /* Add some application-specific error messages (from cderror.h) */ - jerr.addon_message_table = cdjpeg_message_table; - jerr.first_addon_message = JMSG_FIRSTADDONCODE; - jerr.last_addon_message = JMSG_LASTADDONCODE; - - /* Insert custom marker processor for COM and APP12. - * APP12 is used by some digital camera makers for textual info, - * so we provide the ability to display it as text. - * If you like, additional APPn marker types can be selected for display, - * but don't try to override APP0 or APP14 this way (see libjpeg.doc). - */ - jpeg_set_marker_processor(&cinfo, JPEG_COM, print_text_marker); - jpeg_set_marker_processor(&cinfo, JPEG_APP0+12, print_text_marker); - - /* Now safe to enable signal catcher. */ -#ifdef NEED_SIGNAL_CATCHER - enable_signal_catcher((j_common_ptr) &cinfo); -#endif - - /* Scan command line to find file names. */ - /* It is convenient to use just one switch-parsing routine, but the switch - * values read here are ignored; we will rescan the switches after opening - * the input file. - * (Exception: tracing level set here controls verbosity for COM markers - * found during jpeg_read_header...) - */ - - file_index = parse_switches(&cinfo, argc, argv, 0, FALSE); - -#ifdef TWO_FILE_COMMANDLINE - /* Must have either -outfile switch or explicit output file name */ - if (outfilename == NULL) { - if (file_index != argc-2) { - fprintf(stderr, "%s: must name one input and one output file\n", - progname); - usage(); - } - outfilename = argv[file_index+1]; - } else { - if (file_index != argc-1) { - fprintf(stderr, "%s: must name one input and one output file\n", - progname); - usage(); - } - } -#else - /* Unix style: expect zero or one file name */ - if (file_index < argc-1) { - fprintf(stderr, "%s: only one input file\n", progname); - usage(); - } -#endif /* TWO_FILE_COMMANDLINE */ - - /* Open the input file. */ - if (file_index < argc) { - if ((input_file = fopen(argv[file_index], READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[file_index]); - exit(EXIT_FAILURE); - } - } else { - /* default input file is stdin */ - input_file = read_stdin(); - } - - /* Open the output file. */ - if (outfilename != NULL) { - if ((output_file = fopen(outfilename, WRITE_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, outfilename); - exit(EXIT_FAILURE); - } - } else { - /* default output file is stdout */ - output_file = write_stdout(); - } - -#ifdef PROGRESS_REPORT - start_progress_monitor((j_common_ptr) &cinfo, &progress); -#endif - - /* Specify data source for decompression */ - jpeg_stdio_src(&cinfo, input_file); - - /* Read file header, set default decompression parameters */ - (void) jpeg_read_header(&cinfo, TRUE); - - /* Adjust default decompression parameters by re-parsing the options */ - file_index = parse_switches(&cinfo, argc, argv, 0, TRUE); - - /* Initialize the output module now to let it override any crucial - * option settings (for instance, GIF wants to force color quantization). - */ - switch (requested_fmt) { -#ifdef BMP_SUPPORTED - case FMT_BMP: - dest_mgr = jinit_write_bmp(&cinfo, FALSE); - break; - case FMT_OS2: - dest_mgr = jinit_write_bmp(&cinfo, TRUE); - break; -#endif -#ifdef GIF_SUPPORTED - case FMT_GIF: - dest_mgr = jinit_write_gif(&cinfo); - break; -#endif -#ifdef PPM_SUPPORTED - case FMT_PPM: - dest_mgr = jinit_write_ppm(&cinfo); - break; -#endif -#ifdef RLE_SUPPORTED - case FMT_RLE: - dest_mgr = jinit_write_rle(&cinfo); - break; -#endif -#ifdef TARGA_SUPPORTED - case FMT_TARGA: - dest_mgr = jinit_write_targa(&cinfo); - break; -#endif - default: - ERREXIT(&cinfo, JERR_UNSUPPORTED_FORMAT); - break; - } - dest_mgr->output_file = output_file; - - /* Start decompressor */ - (void) jpeg_start_decompress(&cinfo); - - /* Write output file header */ - (*dest_mgr->start_output) (&cinfo, dest_mgr); - - /* Process data */ - while (cinfo.output_scanline < cinfo.output_height) { - num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer, - dest_mgr->buffer_height); - (*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines); - } - -#ifdef PROGRESS_REPORT - /* Hack: count final pass as done in case finish_output does an extra pass. - * The library won't have updated completed_passes. - */ - progress.pub.completed_passes = progress.pub.total_passes; -#endif - - /* Finish decompression and release memory. - * I must do it in this order because output module has allocated memory - * of lifespan JPOOL_IMAGE; it needs to finish before releasing memory. - */ - (*dest_mgr->finish_output) (&cinfo, dest_mgr); - (void) jpeg_finish_decompress(&cinfo); - jpeg_destroy_decompress(&cinfo); - - /* Close files, if we opened them */ - if (input_file != stdin) - fclose(input_file); - if (output_file != stdout) - fclose(output_file); - -#ifdef PROGRESS_REPORT - end_progress_monitor((j_common_ptr) &cinfo); -#endif - - /* All done. */ - exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS); - return 0; /* suppress no-return-value warnings */ -} diff --git a/Build/source/libs/jpeg/example.c b/Build/source/libs/jpeg/example.c deleted file mode 100644 index 7fc354f04d9..00000000000 --- a/Build/source/libs/jpeg/example.c +++ /dev/null @@ -1,433 +0,0 @@ -/* - * example.c - * - * This file illustrates how to use the IJG code as a subroutine library - * to read or write JPEG image files. You should look at this code in - * conjunction with the documentation file libjpeg.doc. - * - * This code will not do anything useful as-is, but it may be helpful as a - * skeleton for constructing routines that call the JPEG library. - * - * We present these routines in the same coding style used in the JPEG code - * (ANSI function definitions, etc); but you are of course free to code your - * routines in a different style if you prefer. - */ - -#include - -/* - * Include file for users of JPEG library. - * You will need to have included system headers that define at least - * the typedefs FILE and size_t before you can include jpeglib.h. - * (stdio.h is sufficient on ANSI-conforming systems.) - * You may also wish to include "jerror.h". - */ - -#include "jpeglib.h" - -/* - * is used for the optional error recovery mechanism shown in - * the second part of the example. - */ - -#include - - - -/******************** JPEG COMPRESSION SAMPLE INTERFACE *******************/ - -/* This half of the example shows how to feed data into the JPEG compressor. - * We present a minimal version that does not worry about refinements such - * as error recovery (the JPEG code will just exit() if it gets an error). - */ - - -/* - * IMAGE DATA FORMATS: - * - * The standard input image format is a rectangular array of pixels, with - * each pixel having the same number of "component" values (color channels). - * Each pixel row is an array of JSAMPLEs (which typically are unsigned chars). - * If you are working with color data, then the color values for each pixel - * must be adjacent in the row; for example, R,G,B,R,G,B,R,G,B,... for 24-bit - * RGB color. - * - * For this example, we'll assume that this data structure matches the way - * our application has stored the image in memory, so we can just pass a - * pointer to our image buffer. In particular, let's say that the image is - * RGB color and is described by: - */ - -extern JSAMPLE * image_buffer; /* Points to large array of R,G,B-order data */ -extern int image_height; /* Number of rows in image */ -extern int image_width; /* Number of columns in image */ - - -/* - * Sample routine for JPEG compression. We assume that the target file name - * and a compression quality factor are passed in. - */ - -GLOBAL(void) -write_JPEG_file (char * filename, int quality) -{ - /* This struct contains the JPEG compression parameters and pointers to - * working space (which is allocated as needed by the JPEG library). - * It is possible to have several such structures, representing multiple - * compression/decompression processes, in existence at once. We refer - * to any one struct (and its associated working data) as a "JPEG object". - */ - struct jpeg_compress_struct cinfo; - /* This struct represents a JPEG error handler. It is declared separately - * because applications often want to supply a specialized error handler - * (see the second half of this file for an example). But here we just - * take the easy way out and use the standard error handler, which will - * print a message on stderr and call exit() if compression fails. - * Note that this struct must live as long as the main JPEG parameter - * struct, to avoid dangling-pointer problems. - */ - struct jpeg_error_mgr jerr; - /* More stuff */ - FILE * outfile; /* target file */ - JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */ - int row_stride; /* physical row width in image buffer */ - - /* Step 1: allocate and initialize JPEG compression object */ - - /* We have to set up the error handler first, in case the initialization - * step fails. (Unlikely, but it could happen if you are out of memory.) - * This routine fills in the contents of struct jerr, and returns jerr's - * address which we place into the link field in cinfo. - */ - cinfo.err = jpeg_std_error(&jerr); - /* Now we can initialize the JPEG compression object. */ - jpeg_create_compress(&cinfo); - - /* Step 2: specify data destination (eg, a file) */ - /* Note: steps 2 and 3 can be done in either order. */ - - /* Here we use the library-supplied code to send compressed data to a - * stdio stream. You can also write your own code to do something else. - * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that - * requires it in order to write binary files. - */ - if ((outfile = fopen(filename, "wb")) == NULL) { - fprintf(stderr, "can't open %s\n", filename); - exit(1); - } - jpeg_stdio_dest(&cinfo, outfile); - - /* Step 3: set parameters for compression */ - - /* First we supply a description of the input image. - * Four fields of the cinfo struct must be filled in: - */ - cinfo.image_width = image_width; /* image width and height, in pixels */ - cinfo.image_height = image_height; - cinfo.input_components = 3; /* # of color components per pixel */ - cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ - /* Now use the library's routine to set default compression parameters. - * (You must set at least cinfo.in_color_space before calling this, - * since the defaults depend on the source color space.) - */ - jpeg_set_defaults(&cinfo); - /* Now you can set any non-default parameters you wish to. - * Here we just illustrate the use of quality (quantization table) scaling: - */ - jpeg_set_quality(&cinfo, quality, TRUE /* limit to baseline-JPEG values */); - - /* Step 4: Start compressor */ - - /* TRUE ensures that we will write a complete interchange-JPEG file. - * Pass TRUE unless you are very sure of what you're doing. - */ - jpeg_start_compress(&cinfo, TRUE); - - /* Step 5: while (scan lines remain to be written) */ - /* jpeg_write_scanlines(...); */ - - /* Here we use the library's state variable cinfo.next_scanline as the - * loop counter, so that we don't have to keep track ourselves. - * To keep things simple, we pass one scanline per call; you can pass - * more if you wish, though. - */ - row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */ - - while (cinfo.next_scanline < cinfo.image_height) { - /* jpeg_write_scanlines expects an array of pointers to scanlines. - * Here the array is only one element long, but you could pass - * more than one scanline at a time if that's more convenient. - */ - row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride]; - (void) jpeg_write_scanlines(&cinfo, row_pointer, 1); - } - - /* Step 6: Finish compression */ - - jpeg_finish_compress(&cinfo); - /* After finish_compress, we can close the output file. */ - fclose(outfile); - - /* Step 7: release JPEG compression object */ - - /* This is an important step since it will release a good deal of memory. */ - jpeg_destroy_compress(&cinfo); - - /* And we're done! */ -} - - -/* - * SOME FINE POINTS: - * - * In the above loop, we ignored the return value of jpeg_write_scanlines, - * which is the number of scanlines actually written. We could get away - * with this because we were only relying on the value of cinfo.next_scanline, - * which will be incremented correctly. If you maintain additional loop - * variables then you should be careful to increment them properly. - * Actually, for output to a stdio stream you needn't worry, because - * then jpeg_write_scanlines will write all the lines passed (or else exit - * with a fatal error). Partial writes can only occur if you use a data - * destination module that can demand suspension of the compressor. - * (If you don't know what that's for, you don't need it.) - * - * If the compressor requires full-image buffers (for entropy-coding - * optimization or a multi-scan JPEG file), it will create temporary - * files for anything that doesn't fit within the maximum-memory setting. - * (Note that temp files are NOT needed if you use the default parameters.) - * On some systems you may need to set up a signal handler to ensure that - * temporary files are deleted if the program is interrupted. See libjpeg.doc. - * - * Scanlines MUST be supplied in top-to-bottom order if you want your JPEG - * files to be compatible with everyone else's. If you cannot readily read - * your data in that order, you'll need an intermediate array to hold the - * image. See rdtarga.c or rdbmp.c for examples of handling bottom-to-top - * source data using the JPEG code's internal virtual-array mechanisms. - */ - - - -/******************** JPEG DECOMPRESSION SAMPLE INTERFACE *******************/ - -/* This half of the example shows how to read data from the JPEG decompressor. - * It's a bit more refined than the above, in that we show: - * (a) how to modify the JPEG library's standard error-reporting behavior; - * (b) how to allocate workspace using the library's memory manager. - * - * Just to make this example a little different from the first one, we'll - * assume that we do not intend to put the whole image into an in-memory - * buffer, but to send it line-by-line someplace else. We need a one- - * scanline-high JSAMPLE array as a work buffer, and we will let the JPEG - * memory manager allocate it for us. This approach is actually quite useful - * because we don't need to remember to deallocate the buffer separately: it - * will go away automatically when the JPEG object is cleaned up. - */ - - -/* - * ERROR HANDLING: - * - * The JPEG library's standard error handler (jerror.c) is divided into - * several "methods" which you can override individually. This lets you - * adjust the behavior without duplicating a lot of code, which you might - * have to update with each future release. - * - * Our example here shows how to override the "error_exit" method so that - * control is returned to the library's caller when a fatal error occurs, - * rather than calling exit() as the standard error_exit method does. - * - * We use C's setjmp/longjmp facility to return control. This means that the - * routine which calls the JPEG library must first execute a setjmp() call to - * establish the return point. We want the replacement error_exit to do a - * longjmp(). But we need to make the setjmp buffer accessible to the - * error_exit routine. To do this, we make a private extension of the - * standard JPEG error handler object. (If we were using C++, we'd say we - * were making a subclass of the regular error handler.) - * - * Here's the extended error handler struct: - */ - -struct my_error_mgr { - struct jpeg_error_mgr pub; /* "public" fields */ - - jmp_buf setjmp_buffer; /* for return to caller */ -}; - -typedef struct my_error_mgr * my_error_ptr; - -/* - * Here's the routine that will replace the standard error_exit method: - */ - -METHODDEF(void) -my_error_exit (j_common_ptr cinfo) -{ - /* cinfo->err really points to a my_error_mgr struct, so coerce pointer */ - my_error_ptr myerr = (my_error_ptr) cinfo->err; - - /* Always display the message. */ - /* We could postpone this until after returning, if we chose. */ - (*cinfo->err->output_message) (cinfo); - - /* Return control to the setjmp point */ - longjmp(myerr->setjmp_buffer, 1); -} - - -/* - * Sample routine for JPEG decompression. We assume that the source file name - * is passed in. We want to return 1 on success, 0 on error. - */ - - -GLOBAL(int) -read_JPEG_file (char * filename) -{ - /* This struct contains the JPEG decompression parameters and pointers to - * working space (which is allocated as needed by the JPEG library). - */ - struct jpeg_decompress_struct cinfo; - /* We use our private extension JPEG error handler. - * Note that this struct must live as long as the main JPEG parameter - * struct, to avoid dangling-pointer problems. - */ - struct my_error_mgr jerr; - /* More stuff */ - FILE * infile; /* source file */ - JSAMPARRAY buffer; /* Output row buffer */ - int row_stride; /* physical row width in output buffer */ - - /* In this example we want to open the input file before doing anything else, - * so that the setjmp() error recovery below can assume the file is open. - * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that - * requires it in order to read binary files. - */ - - if ((infile = fopen(filename, "rb")) == NULL) { - fprintf(stderr, "can't open %s\n", filename); - return 0; - } - - /* Step 1: allocate and initialize JPEG decompression object */ - - /* We set up the normal JPEG error routines, then override error_exit. */ - cinfo.err = jpeg_std_error(&jerr.pub); - jerr.pub.error_exit = my_error_exit; - /* Establish the setjmp return context for my_error_exit to use. */ - if (setjmp(jerr.setjmp_buffer)) { - /* If we get here, the JPEG code has signaled an error. - * We need to clean up the JPEG object, close the input file, and return. - */ - jpeg_destroy_decompress(&cinfo); - fclose(infile); - return 0; - } - /* Now we can initialize the JPEG decompression object. */ - jpeg_create_decompress(&cinfo); - - /* Step 2: specify data source (eg, a file) */ - - jpeg_stdio_src(&cinfo, infile); - - /* Step 3: read file parameters with jpeg_read_header() */ - - (void) jpeg_read_header(&cinfo, TRUE); - /* We can ignore the return value from jpeg_read_header since - * (a) suspension is not possible with the stdio data source, and - * (b) we passed TRUE to reject a tables-only JPEG file as an error. - * See libjpeg.doc for more info. - */ - - /* Step 4: set parameters for decompression */ - - /* In this example, we don't need to change any of the defaults set by - * jpeg_read_header(), so we do nothing here. - */ - - /* Step 5: Start decompressor */ - - (void) jpeg_start_decompress(&cinfo); - /* We can ignore the return value since suspension is not possible - * with the stdio data source. - */ - - /* We may need to do some setup of our own at this point before reading - * the data. After jpeg_start_decompress() we have the correct scaled - * output image dimensions available, as well as the output colormap - * if we asked for color quantization. - * In this example, we need to make an output work buffer of the right size. - */ - /* JSAMPLEs per row in output buffer */ - row_stride = cinfo.output_width * cinfo.output_components; - /* Make a one-row-high sample array that will go away when done with image */ - buffer = (*cinfo.mem->alloc_sarray) - ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); - - /* Step 6: while (scan lines remain to be read) */ - /* jpeg_read_scanlines(...); */ - - /* Here we use the library's state variable cinfo.output_scanline as the - * loop counter, so that we don't have to keep track ourselves. - */ - while (cinfo.output_scanline < cinfo.output_height) { - /* jpeg_read_scanlines expects an array of pointers to scanlines. - * Here the array is only one element long, but you could ask for - * more than one scanline at a time if that's more convenient. - */ - (void) jpeg_read_scanlines(&cinfo, buffer, 1); - /* Assume put_scanline_someplace wants a pointer and sample count. */ - put_scanline_someplace(buffer[0], row_stride); - } - - /* Step 7: Finish decompression */ - - (void) jpeg_finish_decompress(&cinfo); - /* We can ignore the return value since suspension is not possible - * with the stdio data source. - */ - - /* Step 8: Release JPEG decompression object */ - - /* This is an important step since it will release a good deal of memory. */ - jpeg_destroy_decompress(&cinfo); - - /* After finish_decompress, we can close the input file. - * Here we postpone it until after no more JPEG errors are possible, - * so as to simplify the setjmp error logic above. (Actually, I don't - * think that jpeg_destroy can do an error exit, but why assume anything...) - */ - fclose(infile); - - /* At this point you may want to check to see whether any corrupt-data - * warnings occurred (test whether jerr.pub.num_warnings is nonzero). - */ - - /* And we're done! */ - return 1; -} - - -/* - * SOME FINE POINTS: - * - * In the above code, we ignored the return value of jpeg_read_scanlines, - * which is the number of scanlines actually read. We could get away with - * this because we asked for only one line at a time and we weren't using - * a suspending data source. See libjpeg.doc for more info. - * - * We cheated a bit by calling alloc_sarray() after jpeg_start_decompress(); - * we should have done it beforehand to ensure that the space would be - * counted against the JPEG max_memory setting. In some systems the above - * code would risk an out-of-memory error. However, in general we don't - * know the output image dimensions before jpeg_start_decompress(), unless we - * call jpeg_calc_output_dimensions(). See libjpeg.doc for more about this. - * - * Scanlines are returned in the same order as they appear in the JPEG file, - * which is standardly top-to-bottom. If you must emit data bottom-to-top, - * you can use one of the virtual arrays provided by the JPEG memory manager - * to invert the data. See wrbmp.c for an example. - * - * As with compression, some operating modes may require temporary files. - * On some systems you may need to set up a signal handler to ensure that - * temporary files are deleted if the program is interrupted. See libjpeg.doc. - */ diff --git a/Build/source/libs/jpeg/filelist.doc b/Build/source/libs/jpeg/filelist.doc deleted file mode 100644 index e14982ca55b..00000000000 --- a/Build/source/libs/jpeg/filelist.doc +++ /dev/null @@ -1,210 +0,0 @@ -IJG JPEG LIBRARY: FILE LIST - -Copyright (C) 1994-1998, Thomas G. Lane. -This file is part of the Independent JPEG Group's software. -For conditions of distribution and use, see the accompanying README file. - - -Here is a road map to the files in the IJG JPEG distribution. The -distribution includes the JPEG library proper, plus two application -programs ("cjpeg" and "djpeg") which use the library to convert JPEG -files to and from some other popular image formats. A third application -"jpegtran" uses the library to do lossless conversion between different -variants of JPEG. There are also two stand-alone applications, -"rdjpgcom" and "wrjpgcom". - - -THE JPEG LIBRARY -================ - -Include files: - -jpeglib.h JPEG library's exported data and function declarations. -jconfig.h Configuration declarations. Note: this file is not present - in the distribution; it is generated during installation. -jmorecfg.h Additional configuration declarations; need not be changed - for a standard installation. -jerror.h Declares JPEG library's error and trace message codes. -jinclude.h Central include file used by all IJG .c files to reference - system include files. -jpegint.h JPEG library's internal data structures. -jchuff.h Private declarations for Huffman encoder modules. -jdhuff.h Private declarations for Huffman decoder modules. -jdct.h Private declarations for forward & reverse DCT subsystems. -jmemsys.h Private declarations for memory management subsystem. -jversion.h Version information. - -Applications using the library should include jpeglib.h (which in turn -includes jconfig.h and jmorecfg.h). Optionally, jerror.h may be included -if the application needs to reference individual JPEG error codes. The -other include files are intended for internal use and would not normally -be included by an application program. (cjpeg/djpeg/etc do use jinclude.h, -since its function is to improve portability of the whole IJG distribution. -Most other applications will directly include the system include files they -want, and hence won't need jinclude.h.) - - -C source code files: - -These files contain most of the functions intended to be called directly by -an application program: - -jcapimin.c Application program interface: core routines for compression. -jcapistd.c Application program interface: standard compression. -jdapimin.c Application program interface: core routines for decompression. -jdapistd.c Application program interface: standard decompression. -jcomapi.c Application program interface routines common to compression - and decompression. -jcparam.c Compression parameter setting helper routines. -jctrans.c API and library routines for transcoding compression. -jdtrans.c API and library routines for transcoding decompression. - -Compression side of the library: - -jcinit.c Initialization: determines which other modules to use. -jcmaster.c Master control: setup and inter-pass sequencing logic. -jcmainct.c Main buffer controller (preprocessor => JPEG compressor). -jcprepct.c Preprocessor buffer controller. -jccoefct.c Buffer controller for DCT coefficient buffer. -jccolor.c Color space conversion. -jcsample.c Downsampling. -jcdctmgr.c DCT manager (DCT implementation selection & control). -jfdctint.c Forward DCT using slow-but-accurate integer method. -jfdctfst.c Forward DCT using faster, less accurate integer method. -jfdctflt.c Forward DCT using floating-point arithmetic. -jchuff.c Huffman entropy coding for sequential JPEG. -jcphuff.c Huffman entropy coding for progressive JPEG. -jcmarker.c JPEG marker writing. -jdatadst.c Data destination manager for stdio output. - -Decompression side of the library: - -jdmaster.c Master control: determines which other modules to use. -jdinput.c Input controller: controls input processing modules. -jdmainct.c Main buffer controller (JPEG decompressor => postprocessor). -jdcoefct.c Buffer controller for DCT coefficient buffer. -jdpostct.c Postprocessor buffer controller. -jdmarker.c JPEG marker reading. -jdhuff.c Huffman entropy decoding for sequential JPEG. -jdphuff.c Huffman entropy decoding for progressive JPEG. -jddctmgr.c IDCT manager (IDCT implementation selection & control). -jidctint.c Inverse DCT using slow-but-accurate integer method. -jidctfst.c Inverse DCT using faster, less accurate integer method. -jidctflt.c Inverse DCT using floating-point arithmetic. -jidctred.c Inverse DCTs with reduced-size outputs. -jdsample.c Upsampling. -jdcolor.c Color space conversion. -jdmerge.c Merged upsampling/color conversion (faster, lower quality). -jquant1.c One-pass color quantization using a fixed-spacing colormap. -jquant2.c Two-pass color quantization using a custom-generated colormap. - Also handles one-pass quantization to an externally given map. -jdatasrc.c Data source manager for stdio input. - -Support files for both compression and decompression: - -jerror.c Standard error handling routines (application replaceable). -jmemmgr.c System-independent (more or less) memory management code. -jutils.c Miscellaneous utility routines. - -jmemmgr.c relies on a system-dependent memory management module. The IJG -distribution includes the following implementations of the system-dependent -module: - -jmemnobs.c "No backing store": assumes adequate virtual memory exists. -jmemansi.c Makes temporary files with ANSI-standard routine tmpfile(). -jmemname.c Makes temporary files with program-generated file names. -jmemdos.c Custom implementation for MS-DOS (16-bit environment only): - can use extended and expanded memory as well as temp files. -jmemmac.c Custom implementation for Apple Macintosh. - -Exactly one of the system-dependent modules should be configured into an -installed JPEG library (see install.doc for hints about which one to use). -On unusual systems you may find it worthwhile to make a special -system-dependent memory manager. - - -Non-C source code files: - -jmemdosa.asm 80x86 assembly code support for jmemdos.c; used only in - MS-DOS-specific configurations of the JPEG library. - - -CJPEG/DJPEG/JPEGTRAN -==================== - -Include files: - -cdjpeg.h Declarations shared by cjpeg/djpeg/jpegtran modules. -cderror.h Additional error and trace message codes for cjpeg et al. -transupp.h Declarations for jpegtran support routines in transupp.c. - -C source code files: - -cjpeg.c Main program for cjpeg. -djpeg.c Main program for djpeg. -jpegtran.c Main program for jpegtran. -cdjpeg.c Utility routines used by all three programs. -rdcolmap.c Code to read a colormap file for djpeg's "-map" switch. -rdswitch.c Code to process some of cjpeg's more complex switches. - Also used by jpegtran. -transupp.c Support code for jpegtran: lossless image manipulations. - -Image file reader modules for cjpeg: - -rdbmp.c BMP file input. -rdgif.c GIF file input (now just a stub). -rdppm.c PPM/PGM file input. -rdrle.c Utah RLE file input. -rdtarga.c Targa file input. - -Image file writer modules for djpeg: - -wrbmp.c BMP file output. -wrgif.c GIF file output (a mere shadow of its former self). -wrppm.c PPM/PGM file output. -wrrle.c Utah RLE file output. -wrtarga.c Targa file output. - - -RDJPGCOM/WRJPGCOM -================= - -C source code files: - -rdjpgcom.c Stand-alone rdjpgcom application. -wrjpgcom.c Stand-alone wrjpgcom application. - -These programs do not depend on the IJG library. They do use -jconfig.h and jinclude.h, only to improve portability. - - -ADDITIONAL FILES -================ - -Documentation (see README for a guide to the documentation files): - -README Master documentation file. -*.doc Other documentation files. -*.1 Documentation in Unix man page format. -change.log Version-to-version change highlights. -example.c Sample code for calling JPEG library. - -Configuration/installation files and programs (see install.doc for more info): - -configure Unix shell script to perform automatic configuration. -ltconfig Support scripts for configure (from GNU libtool). -ltmain.sh -config.guess -config.sub -install-sh Install shell script for those Unix systems lacking one. -ckconfig.c Program to generate jconfig.h on non-Unix systems. -jconfig.doc Template for making jconfig.h by hand. -makefile.* Sample makefiles for particular systems. -jconfig.* Sample jconfig.h for particular systems. -ansi2knr.c De-ANSIfier for pre-ANSI C compilers (courtesy of - L. Peter Deutsch and Aladdin Enterprises). - -Test files (see install.doc for test procedure): - -test*.* Source and comparison files for confidence test. - These are binary image files, NOT text files. diff --git a/Build/source/libs/jpeg/install-sh b/Build/source/libs/jpeg/install-sh deleted file mode 100644 index 6781b987bdb..00000000000 --- a/Build/source/libs/jpeg/install-sh +++ /dev/null @@ -1,520 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2009-04-28.21; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# 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 -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -no_target_directory= - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - 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. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - -*) prefix='./';; - *) prefix='';; - esac - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob set +f - IFS=$oIFS - - prefixes= - - for d - do - test -z "$d" && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# 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/Build/source/libs/jpeg/install.doc b/Build/source/libs/jpeg/install.doc deleted file mode 100644 index 3702b986b6f..00000000000 --- a/Build/source/libs/jpeg/install.doc +++ /dev/null @@ -1,1063 +0,0 @@ -INSTALLATION INSTRUCTIONS for the Independent JPEG Group's JPEG software - -Copyright (C) 1991-1998, Thomas G. Lane. -This file is part of the Independent JPEG Group's software. -For conditions of distribution and use, see the accompanying README file. - - -This file explains how to configure and install the IJG software. We have -tried to make this software extremely portable and flexible, so that it can be -adapted to almost any environment. The downside of this decision is that the -installation process is complicated. We have provided shortcuts to simplify -the task on common systems. But in any case, you will need at least a little -familiarity with C programming and program build procedures for your system. - -If you are only using this software as part of a larger program, the larger -program's installation procedure may take care of configuring the IJG code. -For example, Ghostscript's installation script will configure the IJG code. -You don't need to read this file if you just want to compile Ghostscript. - -If you are on a Unix machine, you may not need to read this file at all. -Try doing - ./configure - make - make test -If that doesn't complain, do - make install -(better do "make -n install" first to see if the makefile will put the files -where you want them). Read further if you run into snags or want to customize -the code for your system. - - -TABLE OF CONTENTS ------------------ - -Before you start -Configuring the software: - using the automatic "configure" script - using one of the supplied jconfig and makefile files - by hand -Building the software -Testing the software -Installing the software -Optional stuff -Optimization -Hints for specific systems - - -BEFORE YOU START -================ - -Before installing the software you must unpack the distributed source code. -Since you are reading this file, you have probably already succeeded in this -task. However, there is a potential for error if you needed to convert the -files to the local standard text file format (for example, if you are on -MS-DOS you may have converted LF end-of-line to CR/LF). You must apply -such conversion to all the files EXCEPT those whose names begin with "test". -The test files contain binary data; if you change them in any way then the -self-test will give bad results. - -Please check the last section of this file to see if there are hints for the -specific machine or compiler you are using. - - -CONFIGURING THE SOFTWARE -======================== - -To configure the IJG code for your system, you need to create two files: - * jconfig.h: contains values for system-dependent #define symbols. - * Makefile: controls the compilation process. -(On a non-Unix machine, you may create "project files" or some other -substitute for a Makefile. jconfig.h is needed in any environment.) - -We provide three different ways to generate these files: - * On a Unix system, you can just run the "configure" script. - * We provide sample jconfig files and makefiles for popular machines; - if your machine matches one of the samples, just copy the right sample - files to jconfig.h and Makefile. - * If all else fails, read the instructions below and make your own files. - - -Configuring the software using the automatic "configure" script ---------------------------------------------------------------- - -If you are on a Unix machine, you can just type - ./configure -and let the configure script construct appropriate configuration files. -If you're using "csh" on an old version of System V, you might need to type - sh configure -instead to prevent csh from trying to execute configure itself. -Expect configure to run for a few minutes, particularly on slower machines; -it works by compiling a series of test programs. - -Configure was created with GNU Autoconf and it follows the usual conventions -for GNU configure scripts. It makes a few assumptions that you may want to -override. You can do this by providing optional switches to configure: - -* If you want to build libjpeg as a shared library, say - ./configure --enable-shared -To get both shared and static libraries, say - ./configure --enable-shared --enable-static -Note that these switches invoke GNU libtool to take care of system-dependent -shared library building methods. If things don't work this way, please try -running configure without either switch; that should build a static library -without using libtool. If that works, your problem is probably with libtool -not with the IJG code. libtool is fairly new and doesn't support all flavors -of Unix yet. (You might be able to find a newer version of libtool than the -one included with libjpeg; see ftp.gnu.org. Report libtool problems to -bug-libtool@gnu.org.) - -* Configure will use gcc (GNU C compiler) if it's available, otherwise cc. -To force a particular compiler to be selected, use the CC option, for example - ./configure CC='cc' -The same method can be used to include any unusual compiler switches. -For example, on HP-UX you probably want to say - ./configure CC='cc -Aa' -to get HP's compiler to run in ANSI mode. - -* The default CFLAGS setting is "-O" for non-gcc compilers, "-O2" for gcc. -You can override this by saying, for example, - ./configure CFLAGS='-g' -if you want to compile with debugging support. - -* Configure will set up the makefile so that "make install" will install files -into /usr/local/bin, /usr/local/man, etc. You can specify an installation -prefix other than "/usr/local" by giving configure the option "--prefix=PATH". - -* If you don't have a lot of swap space, you may need to enable the IJG -software's internal virtual memory mechanism. To do this, give the option -"--enable-maxmem=N" where N is the default maxmemory limit in megabytes. -This is discussed in more detail under "Selecting a memory manager", below. -You probably don't need to worry about this on reasonably-sized Unix machines, -unless you plan to process very large images. - -Configure has some other features that are useful if you are cross-compiling -or working in a network of multiple machine types; but if you need those -features, you probably already know how to use them. - - -Configuring the software using one of the supplied jconfig and makefile files ------------------------------------------------------------------------------ - -If you have one of these systems, you can just use the provided configuration -files: - -Makefile jconfig file System and/or compiler - -makefile.manx jconfig.manx Amiga, Manx Aztec C -makefile.sas jconfig.sas Amiga, SAS C -makeproj.mac jconfig.mac Apple Macintosh, Metrowerks CodeWarrior -mak*jpeg.st jconfig.st Atari ST/STE/TT, Pure C or Turbo C -makefile.bcc jconfig.bcc MS-DOS or OS/2, Borland C -makefile.dj jconfig.dj MS-DOS, DJGPP (Delorie's port of GNU C) -makefile.mc6 jconfig.mc6 MS-DOS, Microsoft C (16-bit only) -makefile.wat jconfig.wat MS-DOS, OS/2, or Windows NT, Watcom C -makefile.vc jconfig.vc Windows NT/95, MS Visual C++ -make*.ds jconfig.vc Windows NT/95, MS Developer Studio -makefile.mms jconfig.vms Digital VMS, with MMS software -makefile.vms jconfig.vms Digital VMS, without MMS software - -Copy the proper jconfig file to jconfig.h and the makefile to Makefile (or -whatever your system uses as the standard makefile name). For more info see -the appropriate system-specific hints section near the end of this file. - - -Configuring the software by hand --------------------------------- - -First, generate a jconfig.h file. If you are moderately familiar with C, -the comments in jconfig.doc should be enough information to do this; just -copy jconfig.doc to jconfig.h and edit it appropriately. Otherwise, you may -prefer to use the ckconfig.c program. You will need to compile and execute -ckconfig.c by hand --- we hope you know at least enough to do that. -ckconfig.c may not compile the first try (in fact, the whole idea is for it -to fail if anything is going to). If you get compile errors, fix them by -editing ckconfig.c according to the directions given in ckconfig.c. Once -you get it to run, it will write a suitable jconfig.h file, and will also -print out some advice about which makefile to use. - -You may also want to look at the canned jconfig files, if there is one for a -system similar to yours. - -Second, select a makefile and copy it to Makefile (or whatever your system -uses as the standard makefile name). The most generic makefiles we provide -are - makefile.ansi: if your C compiler supports function prototypes - makefile.unix: if not. -(You have function prototypes if ckconfig.c put "#define HAVE_PROTOTYPES" -in jconfig.h.) You may want to start from one of the other makefiles if -there is one for a system similar to yours. - -Look over the selected Makefile and adjust options as needed. In particular -you may want to change the CC and CFLAGS definitions. For instance, if you -are using GCC, set CC=gcc. If you had to use any compiler switches to get -ckconfig.c to work, make sure the same switches are in CFLAGS. - -If you are on a system that doesn't use makefiles, you'll need to set up -project files (or whatever you do use) to compile all the source files and -link them into executable files cjpeg, djpeg, jpegtran, rdjpgcom, and wrjpgcom. -See the file lists in any of the makefiles to find out which files go into -each program. Note that the provided makefiles all make a "library" file -libjpeg first, but you don't have to do that if you don't want to; the file -lists identify which source files are actually needed for compression, -decompression, or both. As a last resort, you can make a batch script that -just compiles everything and links it all together; makefile.vms is an example -of this (it's for VMS systems that have no make-like utility). - -Here are comments about some specific configuration decisions you'll -need to make: - -Command line style ------------------- - -These programs can use a Unix-like command line style which supports -redirection and piping, like this: - cjpeg inputfile >outputfile - cjpeg outputfile - source program | cjpeg >outputfile -The simpler "two file" command line style is just - cjpeg inputfile outputfile -You may prefer the two-file style, particularly if you don't have pipes. - -You MUST use two-file style on any system that doesn't cope well with binary -data fed through stdin/stdout; this is true for some MS-DOS compilers, for -example. If you're not on a Unix system, it's safest to assume you need -two-file style. (But if your compiler provides either the Posix-standard -fdopen() library routine or a Microsoft-compatible setmode() routine, you -can safely use the Unix command line style, by defining USE_FDOPEN or -USE_SETMODE respectively.) - -To use the two-file style, make jconfig.h say "#define TWO_FILE_COMMANDLINE". - -Selecting a memory manager --------------------------- - -The IJG code is capable of working on images that are too big to fit in main -memory; data is swapped out to temporary files as necessary. However, the -code to do this is rather system-dependent. We provide five different -memory managers: - -* jmemansi.c This version uses the ANSI-standard library routine tmpfile(), - which not all non-ANSI systems have. On some systems - tmpfile() may put the temporary file in a non-optimal - location; if you don't like what it does, use jmemname.c. - -* jmemname.c This version creates named temporary files. For anything - except a Unix machine, you'll need to configure the - select_file_name() routine appropriately; see the comments - near the head of jmemname.c. If you use this version, define - NEED_SIGNAL_CATCHER in jconfig.h to make sure the temp files - are removed if the program is aborted. - -* jmemnobs.c (That stands for No Backing Store :-).) This will compile on - almost any system, but it assumes you have enough main memory - or virtual memory to hold the biggest images you work with. - -* jmemdos.c This should be used with most 16-bit MS-DOS compilers. - See the system-specific notes about MS-DOS for more info. - IMPORTANT: if you use this, define USE_MSDOS_MEMMGR in - jconfig.h, and include the assembly file jmemdosa.asm in the - programs. The supplied makefiles and jconfig files for - 16-bit MS-DOS compilers already do both. - -* jmemmac.c Custom version for Apple Macintosh; see the system-specific - notes for Macintosh for more info. - -To use a particular memory manager, change the SYSDEPMEM variable in your -makefile to equal the corresponding object file name (for example, jmemansi.o -or jmemansi.obj for jmemansi.c). - -If you have plenty of (real or virtual) main memory, just use jmemnobs.c. -"Plenty" means about ten bytes for every pixel in the largest images -you plan to process, so a lot of systems don't meet this criterion. -If yours doesn't, try jmemansi.c first. If that doesn't compile, you'll have -to use jmemname.c; be sure to adjust select_file_name() for local conditions. -You may also need to change unlink() to remove() in close_backing_store(). - -Except with jmemnobs.c or jmemmac.c, you need to adjust the DEFAULT_MAX_MEM -setting to a reasonable value for your system (either by adding a #define for -DEFAULT_MAX_MEM to jconfig.h, or by adding a -D switch to the Makefile). -This value limits the amount of data space the program will attempt to -allocate. Code and static data space isn't counted, so the actual memory -needs for cjpeg or djpeg are typically 100 to 150Kb more than the max-memory -setting. Larger max-memory settings reduce the amount of I/O needed to -process a large image, but too large a value can result in "insufficient -memory" failures. On most Unix machines (and other systems with virtual -memory), just set DEFAULT_MAX_MEM to several million and forget it. At the -other end of the spectrum, for MS-DOS machines you probably can't go much -above 300K to 400K. (On MS-DOS the value refers to conventional memory only. -Extended/expanded memory is handled separately by jmemdos.c.) - - -BUILDING THE SOFTWARE -===================== - -Now you should be able to compile the software. Just say "make" (or -whatever's necessary to start the compilation). Have a cup of coffee. - -Here are some things that could go wrong: - -If your compiler complains about undefined structures, you should be able to -shut it up by putting "#define INCOMPLETE_TYPES_BROKEN" in jconfig.h. - -If you have trouble with missing system include files or inclusion of the -wrong ones, read jinclude.h. This shouldn't happen if you used configure -or ckconfig.c to set up jconfig.h. - -There are a fair number of routines that do not use all of their parameters; -some compilers will issue warnings about this, which you can ignore. There -are also a few configuration checks that may give "unreachable code" warnings. -Any other warning deserves investigation. - -If you don't have a getenv() library routine, define NO_GETENV. - -Also see the system-specific hints, below. - - -TESTING THE SOFTWARE -==================== - -As a quick test of functionality we've included a small sample image in -several forms: - testorig.jpg Starting point for the djpeg tests. - testimg.ppm The output of djpeg testorig.jpg - testimg.bmp The output of djpeg -bmp -colors 256 testorig.jpg - testimg.jpg The output of cjpeg testimg.ppm - testprog.jpg Progressive-mode equivalent of testorig.jpg. - testimgp.jpg The output of cjpeg -progressive -optimize testimg.ppm -(The first- and second-generation .jpg files aren't identical since JPEG is -lossy.) If you can generate duplicates of the testimg* files then you -probably have working programs. - -With most of the makefiles, "make test" will perform the necessary -comparisons. - -If you're using a makefile that doesn't provide the test option, run djpeg -and cjpeg by hand and compare the output files to testimg* with whatever -binary file comparison tool you have. The files should be bit-for-bit -identical. - -If the programs complain "MAX_ALLOC_CHUNK is wrong, please fix", then you -need to reduce MAX_ALLOC_CHUNK to a value that fits in type size_t. -Try adding "#define MAX_ALLOC_CHUNK 65520L" to jconfig.h. A less likely -configuration error is "ALIGN_TYPE is wrong, please fix": defining ALIGN_TYPE -as long should take care of that one. - -If the cjpeg test run fails with "Missing Huffman code table entry", it's a -good bet that you needed to define RIGHT_SHIFT_IS_UNSIGNED. Go back to the -configuration step and run ckconfig.c. (This is a good plan for any other -test failure, too.) - -If you are using Unix (one-file) command line style on a non-Unix system, -it's a good idea to check that binary I/O through stdin/stdout actually -works. You should get the same results from "djpeg out.ppm" -as from "djpeg -outfile out.ppm testorig.jpg". Note that the makefiles all -use the latter style and therefore do not exercise stdin/stdout! If this -check fails, try recompiling with USE_SETMODE or USE_FDOPEN defined. -If it still doesn't work, better use two-file style. - -If you chose a memory manager other than jmemnobs.c, you should test that -temporary-file usage works. Try "djpeg -bmp -colors 256 -max 0 testorig.jpg" -and make sure its output matches testimg.bmp. If you have any really large -images handy, try compressing them with -optimize and/or decompressing with --colors 256 to make sure your DEFAULT_MAX_MEM setting is not too large. - -NOTE: this is far from an exhaustive test of the JPEG software; some modules, -such as 1-pass color quantization, are not exercised at all. It's just a -quick test to give you some confidence that you haven't missed something -major. - - -INSTALLING THE SOFTWARE -======================= - -Once you're done with the above steps, you can install the software by -copying the executable files (cjpeg, djpeg, jpegtran, rdjpgcom, and wrjpgcom) -to wherever you normally install programs. On Unix systems, you'll also want -to put the man pages (cjpeg.1, djpeg.1, jpegtran.1, rdjpgcom.1, wrjpgcom.1) -in the man-page directory. The pre-fab makefiles don't support this step -since there's such a wide variety of installation procedures on different -systems. - -If you generated a Makefile with the "configure" script, you can just say - make install -to install the programs and their man pages into the standard places. -(You'll probably need to be root to do this.) We recommend first saying - make -n install -to see where configure thought the files should go. You may need to edit -the Makefile, particularly if your system's conventions for man page -filenames don't match what configure expects. - -If you want to install the IJG library itself, for use in compiling other -programs besides ours, then you need to put the four include files - jpeglib.h jerror.h jconfig.h jmorecfg.h -into your include-file directory, and put the library file libjpeg.a -(extension may vary depending on system) wherever library files go. -If you generated a Makefile with "configure", it will do what it thinks -is the right thing if you say - make install-lib - - -OPTIONAL STUFF -============== - -Progress monitor: - -If you like, you can #define PROGRESS_REPORT (in jconfig.h) to enable display -of percent-done progress reports. The routine provided in cdjpeg.c merely -prints percentages to stderr, but you can customize it to do something -fancier. - -Utah RLE file format support: - -We distribute the software with support for RLE image files (Utah Raster -Toolkit format) disabled, because the RLE support won't compile without the -Utah library. If you have URT version 3.1 or later, you can enable RLE -support as follows: - 1. #define RLE_SUPPORTED in jconfig.h. - 2. Add a -I option to CFLAGS in the Makefile for the directory - containing the URT .h files (typically the "include" - subdirectory of the URT distribution). - 3. Add -L... -lrle to LDLIBS in the Makefile, where ... specifies - the directory containing the URT "librle.a" file (typically the - "lib" subdirectory of the URT distribution). - -Support for 12-bit-deep pixel data: - -The JPEG standard allows either 8-bit or 12-bit data precision. (For color, -this means 8 or 12 bits per channel, of course.) If you need to work with -deeper than 8-bit data, you can compile the IJG code for 12-bit operation. -To do so: - 1. In jmorecfg.h, define BITS_IN_JSAMPLE as 12 rather than 8. - 2. In jconfig.h, undefine BMP_SUPPORTED, RLE_SUPPORTED, and TARGA_SUPPORTED, - because the code for those formats doesn't handle 12-bit data and won't - even compile. (The PPM code does work, as explained below. The GIF - code works too; it scales 8-bit GIF data to and from 12-bit depth - automatically.) - 3. Compile. Don't expect "make test" to pass, since the supplied test - files are for 8-bit data. - -Currently, 12-bit support does not work on 16-bit-int machines. - -Note that a 12-bit version will not read 8-bit JPEG files, nor vice versa; -so you'll want to keep around a regular 8-bit compilation as well. -(Run-time selection of data depth, to allow a single copy that does both, -is possible but would probably slow things down considerably; it's very low -on our to-do list.) - -The PPM reader (rdppm.c) can read 12-bit data from either text-format or -binary-format PPM and PGM files. Binary-format PPM/PGM files which have a -maxval greater than 255 are assumed to use 2 bytes per sample, LSB first -(little-endian order). As of early 1995, 2-byte binary format is not -officially supported by the PBMPLUS library, but it is expected that a -future release of PBMPLUS will support it. Note that the PPM reader will -read files of any maxval regardless of the BITS_IN_JSAMPLE setting; incoming -data is automatically rescaled to either maxval=255 or maxval=4095 as -appropriate for the cjpeg bit depth. - -The PPM writer (wrppm.c) will normally write 2-byte binary PPM or PGM -format, maxval 4095, when compiled with BITS_IN_JSAMPLE=12. Since this -format is not yet widely supported, you can disable it by compiling wrppm.c -with PPM_NORAWWORD defined; then the data is scaled down to 8 bits to make a -standard 1-byte/sample PPM or PGM file. (Yes, this means still another copy -of djpeg to keep around. But hopefully you won't need it for very long. -Poskanzer's supposed to get that new PBMPLUS release out Real Soon Now.) - -Of course, if you are working with 12-bit data, you probably have it stored -in some other, nonstandard format. In that case you'll probably want to -write your own I/O modules to read and write your format. - -Note that a 12-bit version of cjpeg always runs in "-optimize" mode, in -order to generate valid Huffman tables. This is necessary because our -default Huffman tables only cover 8-bit data. - -Removing code: - -If you need to make a smaller version of the JPEG software, some optional -functions can be removed at compile time. See the xxx_SUPPORTED #defines in -jconfig.h and jmorecfg.h. If at all possible, we recommend that you leave in -decoder support for all valid JPEG files, to ensure that you can read anyone's -output. Taking out support for image file formats that you don't use is the -most painless way to make the programs smaller. Another possibility is to -remove some of the DCT methods: in particular, the "IFAST" method may not be -enough faster than the others to be worth keeping on your machine. (If you -do remove ISLOW or IFAST, be sure to redefine JDCT_DEFAULT or JDCT_FASTEST -to a supported method, by adding a #define in jconfig.h.) - - -OPTIMIZATION -============ - -Unless you own a Cray, you'll probably be interested in making the JPEG -software go as fast as possible. This section covers some machine-dependent -optimizations you may want to try. We suggest that before trying any of -this, you first get the basic installation to pass the self-test step. -Repeat the self-test after any optimization to make sure that you haven't -broken anything. - -The integer DCT routines perform a lot of multiplications. These -multiplications must yield 32-bit results, but none of their input values -are more than 16 bits wide. On many machines, notably the 680x0 and 80x86 -CPUs, a 16x16=>32 bit multiply instruction is faster than a full 32x32=>32 -bit multiply. Unfortunately there is no portable way to specify such a -multiplication in C, but some compilers can generate one when you use the -right combination of casts. See the MULTIPLYxxx macro definitions in -jdct.h. If your compiler makes "int" be 32 bits and "short" be 16 bits, -defining SHORTxSHORT_32 is fairly likely to work. When experimenting with -alternate definitions, be sure to test not only whether the code still works -(use the self-test), but also whether it is actually faster --- on some -compilers, alternate definitions may compute the right answer, yet be slower -than the default. Timing cjpeg on a large PGM (grayscale) input file is the -best way to check this, as the DCT will be the largest fraction of the runtime -in that mode. (Note: some of the distributed compiler-specific jconfig files -already contain #define switches to select appropriate MULTIPLYxxx -definitions.) - -If your machine has sufficiently fast floating point hardware, you may find -that the float DCT method is faster than the integer DCT methods, even -after tweaking the integer multiply macros. In that case you may want to -make the float DCT be the default method. (The only objection to this is -that float DCT results may vary slightly across machines.) To do that, add -"#define JDCT_DEFAULT JDCT_FLOAT" to jconfig.h. Even if you don't change -the default, you should redefine JDCT_FASTEST, which is the method selected -by djpeg's -fast switch. Don't forget to update the documentation files -(usage.doc and/or cjpeg.1, djpeg.1) to agree with what you've done. - -If access to "short" arrays is slow on your machine, it may be a win to -define type JCOEF as int rather than short. This will cost a good deal of -memory though, particularly in some multi-pass modes, so don't do it unless -you have memory to burn and short is REALLY slow. - -If your compiler can compile function calls in-line, make sure the INLINE -macro in jmorecfg.h is defined as the keyword that marks a function -inline-able. Some compilers have a switch that tells the compiler to inline -any function it thinks is profitable (e.g., -finline-functions for gcc). -Enabling such a switch is likely to make the compiled code bigger but faster. - -In general, it's worth trying the maximum optimization level of your compiler, -and experimenting with any optional optimizations such as loop unrolling. -(Unfortunately, far too many compilers have optimizer bugs ... be prepared to -back off if the code fails self-test.) If you do any experimentation along -these lines, please report the optimal settings to jpeg-info@uunet.uu.net so -we can mention them in future releases. Be sure to specify your machine and -compiler version. - - -HINTS FOR SPECIFIC SYSTEMS -========================== - -We welcome reports on changes needed for systems not mentioned here. Submit -'em to jpeg-info@uunet.uu.net. Also, if configure or ckconfig.c is wrong -about how to configure the JPEG software for your system, please let us know. - - -Acorn RISC OS: - -(Thanks to Simon Middleton for these hints on compiling with Desktop C.) -After renaming the files according to Acorn conventions, take a copy of -makefile.ansi, change all occurrences of 'libjpeg.a' to 'libjpeg.o' and -change these definitions as indicated: - -CFLAGS= -throwback -IC: -Wn -LDLIBS=C:o.Stubs -SYSDEPMEM=jmemansi.o -LN=Link -AR=LibFile -c -o - -Also add a new line '.c.o:; $(cc) $< $(cflags) -c -o $@'. Remove the -lines '$(RM) libjpeg.o' and '$(AR2) libjpeg.o' and the 'jconfig.h' -dependency section. - -Copy jconfig.doc to jconfig.h. Edit jconfig.h to define TWO_FILE_COMMANDLINE -and CHAR_IS_UNSIGNED. - -Run the makefile using !AMU not !Make. If you want to use the 'clean' and -'test' makefile entries then you will have to fiddle with the syntax a bit -and rename the test files. - - -Amiga: - -SAS C 6.50 reportedly is too buggy to compile the IJG code properly. -A patch to update to 6.51 is available from SAS or AmiNet FTP sites. - -The supplied config files are set up to use jmemname.c as the memory -manager, with temporary files being created on the device named by -"JPEGTMP:". - - -Atari ST/STE/TT: - -Copy the project files makcjpeg.st, makdjpeg.st, maktjpeg.st, and makljpeg.st -to cjpeg.prj, djpeg.prj, jpegtran.prj, and libjpeg.prj respectively. The -project files should work as-is with Pure C. For Turbo C, change library -filenames "pc..." to "tc..." in each project file. Note that libjpeg.prj -selects jmemansi.c as the recommended memory manager. You'll probably want to -adjust the DEFAULT_MAX_MEM setting --- you want it to be a couple hundred K -less than your normal free memory. Put "#define DEFAULT_MAX_MEM nnnn" into -jconfig.h to do this. - -To use the 68881/68882 coprocessor for the floating point DCT, add the -compiler option "-8" to the project files and replace pcfltlib.lib with -pc881lib.lib in cjpeg.prj and djpeg.prj. Or if you don't have a -coprocessor, you may prefer to remove the float DCT code by undefining -DCT_FLOAT_SUPPORTED in jmorecfg.h (since without a coprocessor, the float -code will be too slow to be useful). In that case, you can delete -pcfltlib.lib from the project files. - -Note that you must make libjpeg.lib before making cjpeg.ttp, djpeg.ttp, -or jpegtran.ttp. You'll have to perform the self-test by hand. - -We haven't bothered to include project files for rdjpgcom and wrjpgcom. -Those source files should just be compiled by themselves; they don't -depend on the JPEG library. - -There is a bug in some older versions of the Turbo C library which causes the -space used by temporary files created with "tmpfile()" not to be freed after -an abnormal program exit. If you check your disk afterwards, you will find -cluster chains that are allocated but not used by a file. This should not -happen in cjpeg/djpeg/jpegtran, since we enable a signal catcher to explicitly -close temp files before exiting. But if you use the JPEG library with your -own code, be sure to supply a signal catcher, or else use a different -system-dependent memory manager. - - -Cray: - -Should you be so fortunate as to be running JPEG on a Cray YMP, there is a -compiler bug in old versions of Cray's Standard C (prior to 3.1). If you -still have an old compiler, you'll need to insert a line reading -"#pragma novector" just before the loop - for (i = 1; i <= (int) htbl->bits[l]; i++) - huffsize[p++] = (char) l; -in fix_huff_tbl (in V5beta1, line 204 of jchuff.c and line 176 of jdhuff.c). -[This bug may or may not still occur with the current IJG code, but it's -probably a dead issue anyway...] - - -HP-UX: - -If you have HP-UX 7.05 or later with the "software development" C compiler, -you should run the compiler in ANSI mode. If using the configure script, -say - ./configure CC='cc -Aa' -(or -Ae if you prefer). If configuring by hand, use makefile.ansi and add -"-Aa" to the CFLAGS line in the makefile. - -If you have a pre-7.05 system, or if you are using the non-ANSI C compiler -delivered with a minimum HP-UX system, then you must use makefile.unix -(and do NOT add -Aa); or just run configure without the CC option. - -On HP 9000 series 800 machines, the HP C compiler is buggy in revisions prior -to A.08.07. If you get complaints about "not a typedef name", you'll have to -use makefile.unix, or run configure without the CC option. - - -Macintosh, generic comments: - -The supplied user-interface files (cjpeg.c, djpeg.c, etc) are set up to -provide a Unix-style command line interface. You can use this interface on -the Mac by means of the ccommand() library routine provided by Metrowerks -CodeWarrior or Think C. This is only appropriate for testing the library, -however; to make a user-friendly equivalent of cjpeg/djpeg you'd really want -to develop a Mac-style user interface. There isn't a complete example -available at the moment, but there are some helpful starting points: -1. Sam Bushell's free "To JPEG" applet provides drag-and-drop conversion to -JPEG under System 7 and later. This only illustrates how to use the -compression half of the library, but it does a very nice job of that part. -The CodeWarrior source code is available from http://www.pobox.com/~jsam. -2. Jim Brunner prepared a Mac-style user interface for both compression and -decompression. Unfortunately, it hasn't been updated since IJG v4, and -the library's API has changed considerably since then. Still it may be of -some help, particularly as a guide to compiling the IJG code under Think C. -Jim's code is available from the Info-Mac archives, at sumex-aim.stanford.edu -or mirrors thereof; see file /info-mac/dev/src/jpeg-convert-c.hqx. - -jmemmac.c is the recommended memory manager back end for Macintosh. It uses -NewPtr/DisposePtr instead of malloc/free, and has a Mac-specific -implementation of jpeg_mem_available(). It also creates temporary files that -follow Mac conventions. (That part of the code relies on System-7-or-later OS -functions. See the comments in jmemmac.c if you need to run it on System 6.) -NOTE that USE_MAC_MEMMGR must be defined in jconfig.h to use jmemmac.c. - -You can also use jmemnobs.c, if you don't care about handling images larger -than available memory. If you use any memory manager back end other than -jmemmac.c, we recommend replacing "malloc" and "free" by "NewPtr" and -"DisposePtr", because Mac C libraries often have peculiar implementations of -malloc/free. (For instance, free() may not return the freed space to the -Mac Memory Manager. This is undesirable for the IJG code because jmemmgr.c -already clumps space requests.) - - -Macintosh, Metrowerks CodeWarrior: - -The Unix-command-line-style interface can be used by defining USE_CCOMMAND. -You'll also need to define TWO_FILE_COMMANDLINE to avoid stdin/stdout. -This means that when using the cjpeg/djpeg programs, you'll have to type the -input and output file names in the "Arguments" text-edit box, rather than -using the file radio buttons. (Perhaps USE_FDOPEN or USE_SETMODE would -eliminate the problem, but I haven't heard from anyone who's tried it.) - -On 680x0 Macs, Metrowerks defines type "double" as a 10-byte IEEE extended -float. jmemmgr.c won't like this: it wants sizeof(ALIGN_TYPE) to be a power -of 2. Add "#define ALIGN_TYPE long" to jconfig.h to eliminate the complaint. - -The supplied configuration file jconfig.mac can be used for your jconfig.h; -it includes all the recommended symbol definitions. If you have AppleScript -installed, you can run the supplied script makeproj.mac to create CodeWarrior -project files for the library and the testbed applications, then build the -library and applications. (Thanks to Dan Sears and Don Agro for this nifty -hack, which saves us from trying to maintain CodeWarrior project files as part -of the IJG distribution...) - - -Macintosh, Think C: - -The documentation in Jim Brunner's "JPEG Convert" source code (see above) -includes detailed build instructions for Think C; it's probably somewhat -out of date for the current release, but may be helpful. - -If you want to build the minimal command line version, proceed as follows. -You'll have to prepare project files for the programs; we don't include any -in the distribution since they are not text files. Use the file lists in -any of the supplied makefiles as a guide. Also add the ANSI and Unix C -libraries in a separate segment. You may need to divide the JPEG files into -more than one segment; we recommend dividing compression and decompression -modules. Define USE_CCOMMAND in jconfig.h so that the ccommand() routine is -called. You must also define TWO_FILE_COMMANDLINE because stdin/stdout -don't handle binary data correctly. - -On 680x0 Macs, Think C defines type "double" as a 12-byte IEEE extended float. -jmemmgr.c won't like this: it wants sizeof(ALIGN_TYPE) to be a power of 2. -Add "#define ALIGN_TYPE long" to jconfig.h to eliminate the complaint. - -jconfig.mac should work as a jconfig.h configuration file for Think C, -but the makeproj.mac AppleScript script is specific to CodeWarrior. Sorry. - - -MIPS R3000: - -MIPS's cc version 1.31 has a rather nasty optimization bug. Don't use -O -if you have that compiler version. (Use "cc -V" to check the version.) -Note that the R3000 chip is found in workstations from DEC and others. - - -MS-DOS, generic comments for 16-bit compilers: - -The IJG code is designed to work well in 80x86 "small" or "medium" memory -models (i.e., data pointers are 16 bits unless explicitly declared "far"; -code pointers can be either size). You may be able to use small model to -compile cjpeg or djpeg by itself, but you will probably have to use medium -model for any larger application. This won't make much difference in -performance. You *will* take a noticeable performance hit if you use a -large-data memory model, and you should avoid "huge" model if at all -possible. Be sure that NEED_FAR_POINTERS is defined in jconfig.h if you use -a small-data memory model; be sure it is NOT defined if you use a large-data -model. (The supplied makefiles and jconfig files for Borland and Microsoft C -compile in medium model and define NEED_FAR_POINTERS.) - -The DOS-specific memory manager, jmemdos.c, should be used if possible. -It needs some assembly-code routines which are in jmemdosa.asm; make sure -your makefile assembles that file and includes it in the library. If you -don't have a suitable assembler, you can get pre-assembled object files for -jmemdosa by FTP from ftp.uu.net:/graphics/jpeg/jdosaobj.zip. (DOS-oriented -distributions of the IJG source code often include these object files.) - -When using jmemdos.c, jconfig.h must define USE_MSDOS_MEMMGR and must set -MAX_ALLOC_CHUNK to less than 64K (65520L is a typical value). If your -C library's far-heap malloc() can't allocate blocks that large, reduce -MAX_ALLOC_CHUNK to whatever it can handle. - -If you can't use jmemdos.c for some reason --- for example, because you -don't have an assembler to assemble jmemdosa.asm --- you'll have to fall -back to jmemansi.c or jmemname.c. You'll probably still need to set -MAX_ALLOC_CHUNK in jconfig.h, because most DOS C libraries won't malloc() -more than 64K at a time. IMPORTANT: if you use jmemansi.c or jmemname.c, -you will have to compile in a large-data memory model in order to get the -right stdio library. Too bad. - -wrjpgcom needs to be compiled in large model, because it malloc()s a 64KB -work area to hold the comment text. If your C library's malloc can't -handle that, reduce MAX_COM_LENGTH as necessary in wrjpgcom.c. - -Most MS-DOS compilers treat stdin/stdout as text files, so you must use -two-file command line style. But if your compiler has either fdopen() or -setmode(), you can use one-file style if you like. To do this, define -USE_SETMODE or USE_FDOPEN so that stdin/stdout will be set to binary mode. -(USE_SETMODE seems to work with more DOS compilers than USE_FDOPEN.) You -should test that I/O through stdin/stdout produces the same results as I/O -to explicitly named files... the "make test" procedures in the supplied -makefiles do NOT use stdin/stdout. - - -MS-DOS, generic comments for 32-bit compilers: - -None of the above comments about memory models apply if you are using a -32-bit flat-memory-space environment, such as DJGPP or Watcom C. (And you -should use one if you have it, as performance will be much better than -8086-compatible code!) For flat-memory-space compilers, do NOT define -NEED_FAR_POINTERS, and do NOT use jmemdos.c. Use jmemnobs.c if the -environment supplies adequate virtual memory, otherwise use jmemansi.c or -jmemname.c. - -You'll still need to be careful about binary I/O through stdin/stdout. -See the last paragraph of the previous section. - - -MS-DOS, Borland C: - -Be sure to convert all the source files to DOS text format (CR/LF newlines). -Although Borland C will often work OK with unmodified Unix (LF newlines) -source files, sometimes it will give bogus compile errors. -"Illegal character '#'" is the most common such error. (This is true with -Borland C 3.1, but perhaps is fixed in newer releases.) - -If you want one-file command line style, just undefine TWO_FILE_COMMANDLINE. -jconfig.bcc already includes #define USE_SETMODE to make this work. -(fdopen does not work correctly.) - - -MS-DOS, Microsoft C: - -makefile.mc6 works with Microsoft C, DOS Visual C++, etc. It should only -be used if you want to build a 16-bit (small or medium memory model) program. - -If you want one-file command line style, just undefine TWO_FILE_COMMANDLINE. -jconfig.mc6 already includes #define USE_SETMODE to make this work. -(fdopen does not work correctly.) - -Note that this makefile assumes that the working copy of itself is called -"makefile". If you want to call it something else, say "makefile.mak", -be sure to adjust the dependency line that reads "$(RFILE) : makefile". -Otherwise the make will fail because it doesn't know how to create "makefile". -Worse, some releases of Microsoft's make utilities give an incorrect error -message in this situation. - -Old versions of MS C fail with an "out of macro expansion space" error -because they can't cope with the macro TRACEMS8 (defined in jerror.h). -If this happens to you, the easiest solution is to change TRACEMS8 to -expand to nothing. You'll lose the ability to dump out JPEG coefficient -tables with djpeg -debug -debug, but at least you can compile. - -Original MS C 6.0 is very buggy; it compiles incorrect code unless you turn -off optimization entirely (remove -O from CFLAGS). 6.00A is better, but it -still generates bad code if you enable loop optimizations (-Ol or -Ox). - -MS C 8.0 crashes when compiling jquant1.c with optimization switch /Oo ... -which is on by default. To work around this bug, compile that one file -with /Oo-. - - -Microsoft Windows (all versions), generic comments: - -Some Windows system include files define typedef boolean as "unsigned char". -The IJG code also defines typedef boolean, but we make it "int" by default. -This doesn't affect the IJG programs because we don't import those Windows -include files. But if you use the JPEG library in your own program, and some -of your program's files import one definition of boolean while some import the -other, you can get all sorts of mysterious problems. A good preventive step -is to make the IJG library use "unsigned char" for boolean. To do that, -add something like this to your jconfig.h file: - /* Define "boolean" as unsigned char, not int, per Windows custom */ - #ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ - typedef unsigned char boolean; - #endif - #define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ -(This is already in jconfig.vc, by the way.) - -windef.h contains the declarations - #define far - #define FAR far -Since jmorecfg.h tries to define FAR as empty, you may get a compiler -warning if you include both jpeglib.h and windef.h (which windows.h -includes). To suppress the warning, you can put "#ifndef FAR"/"#endif" -around the line "#define FAR" in jmorecfg.h. - -When using the library in a Windows application, you will almost certainly -want to modify or replace the error handler module jerror.c, since our -default error handler does a couple of inappropriate things: - 1. it tries to write error and warning messages on stderr; - 2. in event of a fatal error, it exits by calling exit(). - -A simple stopgap solution for problem 1 is to replace the line - fprintf(stderr, "%s\n", buffer); -(in output_message in jerror.c) with - MessageBox(GetActiveWindow(),buffer,"JPEG Error",MB_OK|MB_ICONERROR); -It's highly recommended that you at least do that much, since otherwise -error messages will disappear into nowhere. (Beginning with IJG v6b, this -code is already present in jerror.c; just define USE_WINDOWS_MESSAGEBOX in -jconfig.h to enable it.) - -The proper solution for problem 2 is to return control to your calling -application after a library error. This can be done with the setjmp/longjmp -technique discussed in libjpeg.doc and illustrated in example.c. (NOTE: -some older Windows C compilers provide versions of setjmp/longjmp that -don't actually work under Windows. You may need to use the Windows system -functions Catch and Throw instead.) - -The recommended memory manager under Windows is jmemnobs.c; in other words, -let Windows do any virtual memory management needed. You should NOT use -jmemdos.c nor jmemdosa.asm under Windows. - -For Windows 3.1, we recommend compiling in medium or large memory model; -for newer Windows versions, use a 32-bit flat memory model. (See the MS-DOS -sections above for more info about memory models.) In the 16-bit memory -models only, you'll need to put - #define MAX_ALLOC_CHUNK 65520L /* Maximum request to malloc() */ -into jconfig.h to limit allocation chunks to 64Kb. (Without that, you'd -have to use huge memory model, which slows things down unnecessarily.) -jmemnobs.c works without modification in large or flat memory models, but to -use medium model, you need to modify its jpeg_get_large and jpeg_free_large -routines to allocate far memory. In any case, you might like to replace -its calls to malloc and free with direct calls on Windows memory allocation -functions. - -You may also want to modify jdatasrc.c and jdatadst.c to use Windows file -operations rather than fread/fwrite. This is only necessary if your C -compiler doesn't provide a competent implementation of C stdio functions. - -You might want to tweak the RGB_xxx macros in jmorecfg.h so that the library -will accept or deliver color pixels in BGR sample order, not RGB; BGR order -is usually more convenient under Windows. Note that this change will break -the sample applications cjpeg/djpeg, but the library itself works fine. - - -Many people want to convert the IJG library into a DLL. This is reasonably -straightforward, but watch out for the following: - - 1. Don't try to compile as a DLL in small or medium memory model; use -large model, or even better, 32-bit flat model. Many places in the IJG code -assume the address of a local variable is an ordinary (not FAR) pointer; -that isn't true in a medium-model DLL. - - 2. Microsoft C cannot pass file pointers between applications and DLLs. -(See Microsoft Knowledge Base, PSS ID Number Q50336.) So jdatasrc.c and -jdatadst.c don't work if you open a file in your application and then pass -the pointer to the DLL. One workaround is to make jdatasrc.c/jdatadst.c -part of your main application rather than part of the DLL. - - 3. You'll probably need to modify the macros GLOBAL() and EXTERN() to -attach suitable linkage keywords to the exported routine names. Similarly, -you'll want to modify METHODDEF() and JMETHOD() to ensure function pointers -are declared in a way that lets application routines be called back through -the function pointers. These macros are in jmorecfg.h. Typical definitions -for a 16-bit DLL are: - #define GLOBAL(type) type _far _pascal _loadds _export - #define EXTERN(type) extern type _far _pascal _loadds - #define METHODDEF(type) static type _far _pascal - #define JMETHOD(type,methodname,arglist) \ - type (_far _pascal *methodname) arglist -For a 32-bit DLL you may want something like - #define GLOBAL(type) __declspec(dllexport) type - #define EXTERN(type) extern __declspec(dllexport) type -Although not all the GLOBAL routines are actually intended to be called by -the application, the performance cost of making them all DLL entry points is -negligible. - -The unmodified IJG library presents a very C-specific application interface, -so the resulting DLL is only usable from C or C++ applications. There has -been some talk of writing wrapper code that would present a simpler interface -usable from other languages, such as Visual Basic. This is on our to-do list -but hasn't been very high priority --- any volunteers out there? - - -Microsoft Windows, Borland C: - -The provided jconfig.bcc should work OK in a 32-bit Windows environment, -but you'll need to tweak it in a 16-bit environment (you'd need to define -NEED_FAR_POINTERS and MAX_ALLOC_CHUNK). Beware that makefile.bcc will need -alteration if you want to use it for Windows --- in particular, you should -use jmemnobs.c not jmemdos.c under Windows. - -Borland C++ 4.5 fails with an internal compiler error when trying to compile -jdmerge.c in 32-bit mode. If enough people complain, perhaps Borland will fix -it. In the meantime, the simplest known workaround is to add a redundant -definition of the variable range_limit in h2v1_merged_upsample(), at the head -of the block that handles odd image width (about line 268 in v6 jdmerge.c): - /* If image width is odd, do the last output column separately */ - if (cinfo->output_width & 1) { - register JSAMPLE * range_limit = cinfo->sample_range_limit; /* ADD THIS */ - cb = GETJSAMPLE(*inptr1); -Pretty bizarre, especially since the very similar routine h2v2_merged_upsample -doesn't trigger the bug. -Recent reports suggest that this bug does not occur with "bcc32a" (the -Pentium-optimized version of the compiler). - -Another report from a user of Borland C 4.5 was that incorrect code (leading -to a color shift in processed images) was produced if any of the following -optimization switch combinations were used: - -Ot -Og - -Ot -Op - -Ot -Om -So try backing off on optimization if you see such a problem. (Are there -several different releases all numbered "4.5"??) - - -Microsoft Windows, Microsoft Visual C++: - -jconfig.vc should work OK with any Microsoft compiler for a 32-bit memory -model. makefile.vc is intended for command-line use. (If you are using -the Developer Studio environment, you may prefer the DevStudio project -files; see below.) - -Some users feel that it's easier to call the library from C++ code if you -force VC++ to treat the library as C++ code, which you can do by renaming -all the *.c files to *.cpp (and adjusting the makefile to match). This -avoids the need to put extern "C" { ... } around #include "jpeglib.h" in -your C++ application. - - -Microsoft Windows, Microsoft Developer Studio: - -We include makefiles that should work as project files in DevStudio 4.2 or -later. There is a library makefile that builds the IJG library as a static -Win32 library, and an application makefile that builds the sample applications -as Win32 console applications. (Even if you only want the library, we -recommend building the applications so that you can run the self-test.) - -To use: -1. Copy jconfig.vc to jconfig.h, makelib.ds to jpeg.mak, and - makeapps.ds to apps.mak. (Note that the renaming is critical!) -2. Click on the .mak files to construct project workspaces. - (If you are using DevStudio more recent than 4.2, you'll probably - get a message saying that the makefiles are being updated.) -3. Build the library project, then the applications project. -4. Move the application .exe files from `app`\Release to an - appropriate location on your path. -5. To perform the self-test, execute the command line - NMAKE /f makefile.vc test - - -OS/2, Borland C++: - -Watch out for optimization bugs in older Borland compilers; you may need -to back off the optimization switch settings. See the comments in -makefile.bcc. - - -SGI: - -On some SGI systems, you may need to set "AR2= ar -ts" in the Makefile. -If you are using configure, you can do this by saying - ./configure RANLIB='ar -ts' -This change is not needed on all SGIs. Use it only if the make fails at the -stage of linking the completed programs. - -On the MIPS R4000 architecture (Indy, etc.), the compiler option "-mips2" -reportedly speeds up the float DCT method substantially, enough to make it -faster than the default int method (but still slower than the fast int -method). If you use -mips2, you may want to alter the default DCT method to -be float. To do this, put "#define JDCT_DEFAULT JDCT_FLOAT" in jconfig.h. - - -VMS: - -On an Alpha/VMS system with MMS, be sure to use the "/Marco=Alpha=1" -qualifier with MMS when building the JPEG package. - -VAX/VMS v5.5-1 may have problems with the test step of the build procedure -reporting differences when it compares the original and test images. If the -error points to the last block of the files, it is most likely bogus and may -be safely ignored. It seems to be because the files are Stream_LF and -Backup/Compare has difficulty with the (presumably) null padded files. -This problem was not observed on VAX/VMS v6.1 or AXP/VMS v6.1. diff --git a/Build/source/libs/jpeg/jcapimin.c b/Build/source/libs/jpeg/jcapimin.c deleted file mode 100644 index 54fb8c58c56..00000000000 --- a/Build/source/libs/jpeg/jcapimin.c +++ /dev/null @@ -1,280 +0,0 @@ -/* - * jcapimin.c - * - * Copyright (C) 1994-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains application interface code for the compression half - * of the JPEG library. These are the "minimum" API routines that may be - * needed in either the normal full-compression case or the transcoding-only - * case. - * - * Most of the routines intended to be called directly by an application - * are in this file or in jcapistd.c. But also see jcparam.c for - * parameter-setup helper routines, jcomapi.c for routines shared by - * compression and decompression, and jctrans.c for the transcoding case. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* - * Initialization of a JPEG compression object. - * The error manager must already be set up (in case memory manager fails). - */ - -GLOBAL(void) -jpeg_CreateCompress (j_compress_ptr cinfo, int version, size_t structsize) -{ - int i; - - /* Guard against version mismatches between library and caller. */ - cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */ - if (version != JPEG_LIB_VERSION) - ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version); - if (structsize != SIZEOF(struct jpeg_compress_struct)) - ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, - (int) SIZEOF(struct jpeg_compress_struct), (int) structsize); - - /* For debugging purposes, we zero the whole master structure. - * But the application has already set the err pointer, and may have set - * client_data, so we have to save and restore those fields. - * Note: if application hasn't set client_data, tools like Purify may - * complain here. - */ - { - struct jpeg_error_mgr * err = cinfo->err; - void * client_data = cinfo->client_data; /* ignore Purify complaint here */ - MEMZERO(cinfo, SIZEOF(struct jpeg_compress_struct)); - cinfo->err = err; - cinfo->client_data = client_data; - } - cinfo->is_decompressor = FALSE; - - /* Initialize a memory manager instance for this object */ - jinit_memory_mgr((j_common_ptr) cinfo); - - /* Zero out pointers to permanent structures. */ - cinfo->progress = NULL; - cinfo->dest = NULL; - - cinfo->comp_info = NULL; - - for (i = 0; i < NUM_QUANT_TBLS; i++) - cinfo->quant_tbl_ptrs[i] = NULL; - - for (i = 0; i < NUM_HUFF_TBLS; i++) { - cinfo->dc_huff_tbl_ptrs[i] = NULL; - cinfo->ac_huff_tbl_ptrs[i] = NULL; - } - - cinfo->script_space = NULL; - - cinfo->input_gamma = 1.0; /* in case application forgets */ - - /* OK, I'm ready */ - cinfo->global_state = CSTATE_START; -} - - -/* - * Destruction of a JPEG compression object - */ - -GLOBAL(void) -jpeg_destroy_compress (j_compress_ptr cinfo) -{ - jpeg_destroy((j_common_ptr) cinfo); /* use common routine */ -} - - -/* - * Abort processing of a JPEG compression operation, - * but don't destroy the object itself. - */ - -GLOBAL(void) -jpeg_abort_compress (j_compress_ptr cinfo) -{ - jpeg_abort((j_common_ptr) cinfo); /* use common routine */ -} - - -/* - * Forcibly suppress or un-suppress all quantization and Huffman tables. - * Marks all currently defined tables as already written (if suppress) - * or not written (if !suppress). This will control whether they get emitted - * by a subsequent jpeg_start_compress call. - * - * This routine is exported for use by applications that want to produce - * abbreviated JPEG datastreams. It logically belongs in jcparam.c, but - * since it is called by jpeg_start_compress, we put it here --- otherwise - * jcparam.o would be linked whether the application used it or not. - */ - -GLOBAL(void) -jpeg_suppress_tables (j_compress_ptr cinfo, boolean suppress) -{ - int i; - JQUANT_TBL * qtbl; - JHUFF_TBL * htbl; - - for (i = 0; i < NUM_QUANT_TBLS; i++) { - if ((qtbl = cinfo->quant_tbl_ptrs[i]) != NULL) - qtbl->sent_table = suppress; - } - - for (i = 0; i < NUM_HUFF_TBLS; i++) { - if ((htbl = cinfo->dc_huff_tbl_ptrs[i]) != NULL) - htbl->sent_table = suppress; - if ((htbl = cinfo->ac_huff_tbl_ptrs[i]) != NULL) - htbl->sent_table = suppress; - } -} - - -/* - * Finish JPEG compression. - * - * If a multipass operating mode was selected, this may do a great deal of - * work including most of the actual output. - */ - -GLOBAL(void) -jpeg_finish_compress (j_compress_ptr cinfo) -{ - JDIMENSION iMCU_row; - - if (cinfo->global_state == CSTATE_SCANNING || - cinfo->global_state == CSTATE_RAW_OK) { - /* Terminate first pass */ - if (cinfo->next_scanline < cinfo->image_height) - ERREXIT(cinfo, JERR_TOO_LITTLE_DATA); - (*cinfo->master->finish_pass) (cinfo); - } else if (cinfo->global_state != CSTATE_WRCOEFS) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - /* Perform any remaining passes */ - while (! cinfo->master->is_last_pass) { - (*cinfo->master->prepare_for_pass) (cinfo); - for (iMCU_row = 0; iMCU_row < cinfo->total_iMCU_rows; iMCU_row++) { - if (cinfo->progress != NULL) { - cinfo->progress->pass_counter = (long) iMCU_row; - cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows; - (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); - } - /* We bypass the main controller and invoke coef controller directly; - * all work is being done from the coefficient buffer. - */ - if (! (*cinfo->coef->compress_data) (cinfo, (JSAMPIMAGE) NULL)) - ERREXIT(cinfo, JERR_CANT_SUSPEND); - } - (*cinfo->master->finish_pass) (cinfo); - } - /* Write EOI, do final cleanup */ - (*cinfo->marker->write_file_trailer) (cinfo); - (*cinfo->dest->term_destination) (cinfo); - /* We can use jpeg_abort to release memory and reset global_state */ - jpeg_abort((j_common_ptr) cinfo); -} - - -/* - * Write a special marker. - * This is only recommended for writing COM or APPn markers. - * Must be called after jpeg_start_compress() and before - * first call to jpeg_write_scanlines() or jpeg_write_raw_data(). - */ - -GLOBAL(void) -jpeg_write_marker (j_compress_ptr cinfo, int marker, - const JOCTET *dataptr, unsigned int datalen) -{ - JMETHOD(void, write_marker_byte, (j_compress_ptr info, int val)); - - if (cinfo->next_scanline != 0 || - (cinfo->global_state != CSTATE_SCANNING && - cinfo->global_state != CSTATE_RAW_OK && - cinfo->global_state != CSTATE_WRCOEFS)) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - (*cinfo->marker->write_marker_header) (cinfo, marker, datalen); - write_marker_byte = cinfo->marker->write_marker_byte; /* copy for speed */ - while (datalen--) { - (*write_marker_byte) (cinfo, *dataptr); - dataptr++; - } -} - -/* Same, but piecemeal. */ - -GLOBAL(void) -jpeg_write_m_header (j_compress_ptr cinfo, int marker, unsigned int datalen) -{ - if (cinfo->next_scanline != 0 || - (cinfo->global_state != CSTATE_SCANNING && - cinfo->global_state != CSTATE_RAW_OK && - cinfo->global_state != CSTATE_WRCOEFS)) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - (*cinfo->marker->write_marker_header) (cinfo, marker, datalen); -} - -GLOBAL(void) -jpeg_write_m_byte (j_compress_ptr cinfo, int val) -{ - (*cinfo->marker->write_marker_byte) (cinfo, val); -} - - -/* - * Alternate compression function: just write an abbreviated table file. - * Before calling this, all parameters and a data destination must be set up. - * - * To produce a pair of files containing abbreviated tables and abbreviated - * image data, one would proceed as follows: - * - * initialize JPEG object - * set JPEG parameters - * set destination to table file - * jpeg_write_tables(cinfo); - * set destination to image file - * jpeg_start_compress(cinfo, FALSE); - * write data... - * jpeg_finish_compress(cinfo); - * - * jpeg_write_tables has the side effect of marking all tables written - * (same as jpeg_suppress_tables(..., TRUE)). Thus a subsequent start_compress - * will not re-emit the tables unless it is passed write_all_tables=TRUE. - */ - -GLOBAL(void) -jpeg_write_tables (j_compress_ptr cinfo) -{ - if (cinfo->global_state != CSTATE_START) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - /* (Re)initialize error mgr and destination modules */ - (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); - (*cinfo->dest->init_destination) (cinfo); - /* Initialize the marker writer ... bit of a crock to do it here. */ - jinit_marker_writer(cinfo); - /* Write them tables! */ - (*cinfo->marker->write_tables_only) (cinfo); - /* And clean up. */ - (*cinfo->dest->term_destination) (cinfo); - /* - * In library releases up through v6a, we called jpeg_abort() here to free - * any working memory allocated by the destination manager and marker - * writer. Some applications had a problem with that: they allocated space - * of their own from the library memory manager, and didn't want it to go - * away during write_tables. So now we do nothing. This will cause a - * memory leak if an app calls write_tables repeatedly without doing a full - * compression cycle or otherwise resetting the JPEG object. However, that - * seems less bad than unexpectedly freeing memory in the normal case. - * An app that prefers the old behavior can call jpeg_abort for itself after - * each call to jpeg_write_tables(). - */ -} diff --git a/Build/source/libs/jpeg/jcapistd.c b/Build/source/libs/jpeg/jcapistd.c deleted file mode 100644 index c0320b1b190..00000000000 --- a/Build/source/libs/jpeg/jcapistd.c +++ /dev/null @@ -1,161 +0,0 @@ -/* - * jcapistd.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains application interface code for the compression half - * of the JPEG library. These are the "standard" API routines that are - * used in the normal full-compression case. They are not used by a - * transcoding-only application. Note that if an application links in - * jpeg_start_compress, it will end up linking in the entire compressor. - * We thus must separate this file from jcapimin.c to avoid linking the - * whole compression library into a transcoder. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* - * Compression initialization. - * Before calling this, all parameters and a data destination must be set up. - * - * We require a write_all_tables parameter as a failsafe check when writing - * multiple datastreams from the same compression object. Since prior runs - * will have left all the tables marked sent_table=TRUE, a subsequent run - * would emit an abbreviated stream (no tables) by default. This may be what - * is wanted, but for safety's sake it should not be the default behavior: - * programmers should have to make a deliberate choice to emit abbreviated - * images. Therefore the documentation and examples should encourage people - * to pass write_all_tables=TRUE; then it will take active thought to do the - * wrong thing. - */ - -GLOBAL(void) -jpeg_start_compress (j_compress_ptr cinfo, boolean write_all_tables) -{ - if (cinfo->global_state != CSTATE_START) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - if (write_all_tables) - jpeg_suppress_tables(cinfo, FALSE); /* mark all tables to be written */ - - /* (Re)initialize error mgr and destination modules */ - (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); - (*cinfo->dest->init_destination) (cinfo); - /* Perform master selection of active modules */ - jinit_compress_master(cinfo); - /* Set up for the first pass */ - (*cinfo->master->prepare_for_pass) (cinfo); - /* Ready for application to drive first pass through jpeg_write_scanlines - * or jpeg_write_raw_data. - */ - cinfo->next_scanline = 0; - cinfo->global_state = (cinfo->raw_data_in ? CSTATE_RAW_OK : CSTATE_SCANNING); -} - - -/* - * Write some scanlines of data to the JPEG compressor. - * - * The return value will be the number of lines actually written. - * This should be less than the supplied num_lines only in case that - * the data destination module has requested suspension of the compressor, - * or if more than image_height scanlines are passed in. - * - * Note: we warn about excess calls to jpeg_write_scanlines() since - * this likely signals an application programmer error. However, - * excess scanlines passed in the last valid call are *silently* ignored, - * so that the application need not adjust num_lines for end-of-image - * when using a multiple-scanline buffer. - */ - -GLOBAL(JDIMENSION) -jpeg_write_scanlines (j_compress_ptr cinfo, JSAMPARRAY scanlines, - JDIMENSION num_lines) -{ - JDIMENSION row_ctr, rows_left; - - if (cinfo->global_state != CSTATE_SCANNING) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - if (cinfo->next_scanline >= cinfo->image_height) - WARNMS(cinfo, JWRN_TOO_MUCH_DATA); - - /* Call progress monitor hook if present */ - if (cinfo->progress != NULL) { - cinfo->progress->pass_counter = (long) cinfo->next_scanline; - cinfo->progress->pass_limit = (long) cinfo->image_height; - (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); - } - - /* Give master control module another chance if this is first call to - * jpeg_write_scanlines. This lets output of the frame/scan headers be - * delayed so that application can write COM, etc, markers between - * jpeg_start_compress and jpeg_write_scanlines. - */ - if (cinfo->master->call_pass_startup) - (*cinfo->master->pass_startup) (cinfo); - - /* Ignore any extra scanlines at bottom of image. */ - rows_left = cinfo->image_height - cinfo->next_scanline; - if (num_lines > rows_left) - num_lines = rows_left; - - row_ctr = 0; - (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, num_lines); - cinfo->next_scanline += row_ctr; - return row_ctr; -} - - -/* - * Alternate entry point to write raw data. - * Processes exactly one iMCU row per call, unless suspended. - */ - -GLOBAL(JDIMENSION) -jpeg_write_raw_data (j_compress_ptr cinfo, JSAMPIMAGE data, - JDIMENSION num_lines) -{ - JDIMENSION lines_per_iMCU_row; - - if (cinfo->global_state != CSTATE_RAW_OK) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - if (cinfo->next_scanline >= cinfo->image_height) { - WARNMS(cinfo, JWRN_TOO_MUCH_DATA); - return 0; - } - - /* Call progress monitor hook if present */ - if (cinfo->progress != NULL) { - cinfo->progress->pass_counter = (long) cinfo->next_scanline; - cinfo->progress->pass_limit = (long) cinfo->image_height; - (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); - } - - /* Give master control module another chance if this is first call to - * jpeg_write_raw_data. This lets output of the frame/scan headers be - * delayed so that application can write COM, etc, markers between - * jpeg_start_compress and jpeg_write_raw_data. - */ - if (cinfo->master->call_pass_startup) - (*cinfo->master->pass_startup) (cinfo); - - /* Verify that at least one iMCU row has been passed. */ - lines_per_iMCU_row = cinfo->max_v_samp_factor * DCTSIZE; - if (num_lines < lines_per_iMCU_row) - ERREXIT(cinfo, JERR_BUFFER_SIZE); - - /* Directly compress the row. */ - if (! (*cinfo->coef->compress_data) (cinfo, data)) { - /* If compressor did not consume the whole row, suspend processing. */ - return 0; - } - - /* OK, we processed one iMCU row. */ - cinfo->next_scanline += lines_per_iMCU_row; - return lines_per_iMCU_row; -} diff --git a/Build/source/libs/jpeg/jccoefct.c b/Build/source/libs/jpeg/jccoefct.c deleted file mode 100644 index 1963ddb61b1..00000000000 --- a/Build/source/libs/jpeg/jccoefct.c +++ /dev/null @@ -1,449 +0,0 @@ -/* - * jccoefct.c - * - * Copyright (C) 1994-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the coefficient buffer controller for compression. - * This controller is the top level of the JPEG compressor proper. - * The coefficient buffer lies between forward-DCT and entropy encoding steps. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* We use a full-image coefficient buffer when doing Huffman optimization, - * and also for writing multiple-scan JPEG files. In all cases, the DCT - * step is run during the first pass, and subsequent passes need only read - * the buffered coefficients. - */ -#ifdef ENTROPY_OPT_SUPPORTED -#define FULL_COEF_BUFFER_SUPPORTED -#else -#ifdef C_MULTISCAN_FILES_SUPPORTED -#define FULL_COEF_BUFFER_SUPPORTED -#endif -#endif - - -/* Private buffer controller object */ - -typedef struct { - struct jpeg_c_coef_controller pub; /* public fields */ - - JDIMENSION iMCU_row_num; /* iMCU row # within image */ - JDIMENSION mcu_ctr; /* counts MCUs processed in current row */ - int MCU_vert_offset; /* counts MCU rows within iMCU row */ - int MCU_rows_per_iMCU_row; /* number of such rows needed */ - - /* For single-pass compression, it's sufficient to buffer just one MCU - * (although this may prove a bit slow in practice). We allocate a - * workspace of C_MAX_BLOCKS_IN_MCU coefficient blocks, and reuse it for each - * MCU constructed and sent. (On 80x86, the workspace is FAR even though - * it's not really very big; this is to keep the module interfaces unchanged - * when a large coefficient buffer is necessary.) - * In multi-pass modes, this array points to the current MCU's blocks - * within the virtual arrays. - */ - JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU]; - - /* In multi-pass modes, we need a virtual block array for each component. */ - jvirt_barray_ptr whole_image[MAX_COMPONENTS]; -} my_coef_controller; - -typedef my_coef_controller * my_coef_ptr; - - -/* Forward declarations */ -METHODDEF(boolean) compress_data - JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf)); -#ifdef FULL_COEF_BUFFER_SUPPORTED -METHODDEF(boolean) compress_first_pass - JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf)); -METHODDEF(boolean) compress_output - JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf)); -#endif - - -LOCAL(void) -start_iMCU_row (j_compress_ptr cinfo) -/* Reset within-iMCU-row counters for a new row */ -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - - /* In an interleaved scan, an MCU row is the same as an iMCU row. - * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows. - * But at the bottom of the image, process only what's left. - */ - if (cinfo->comps_in_scan > 1) { - coef->MCU_rows_per_iMCU_row = 1; - } else { - if (coef->iMCU_row_num < (cinfo->total_iMCU_rows-1)) - coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; - else - coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height; - } - - coef->mcu_ctr = 0; - coef->MCU_vert_offset = 0; -} - - -/* - * Initialize for a processing pass. - */ - -METHODDEF(void) -start_pass_coef (j_compress_ptr cinfo, J_BUF_MODE pass_mode) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - - coef->iMCU_row_num = 0; - start_iMCU_row(cinfo); - - switch (pass_mode) { - case JBUF_PASS_THRU: - if (coef->whole_image[0] != NULL) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - coef->pub.compress_data = compress_data; - break; -#ifdef FULL_COEF_BUFFER_SUPPORTED - case JBUF_SAVE_AND_PASS: - if (coef->whole_image[0] == NULL) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - coef->pub.compress_data = compress_first_pass; - break; - case JBUF_CRANK_DEST: - if (coef->whole_image[0] == NULL) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - coef->pub.compress_data = compress_output; - break; -#endif - default: - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - break; - } -} - - -/* - * Process some data in the single-pass case. - * We process the equivalent of one fully interleaved MCU row ("iMCU" row) - * per call, ie, v_samp_factor block rows for each component in the image. - * Returns TRUE if the iMCU row is completed, FALSE if suspended. - * - * NB: input_buf contains a plane for each component in image, - * which we index according to the component's SOF position. - */ - -METHODDEF(boolean) -compress_data (j_compress_ptr cinfo, JSAMPIMAGE input_buf) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - JDIMENSION MCU_col_num; /* index of current MCU within row */ - JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; - JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; - int blkn, bi, ci, yindex, yoffset, blockcnt; - JDIMENSION ypos, xpos; - jpeg_component_info *compptr; - - /* Loop to write as much as one whole iMCU row */ - for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; - yoffset++) { - for (MCU_col_num = coef->mcu_ctr; MCU_col_num <= last_MCU_col; - MCU_col_num++) { - /* Determine where data comes from in input_buf and do the DCT thing. - * Each call on forward_DCT processes a horizontal row of DCT blocks - * as wide as an MCU; we rely on having allocated the MCU_buffer[] blocks - * sequentially. Dummy blocks at the right or bottom edge are filled in - * specially. The data in them does not matter for image reconstruction, - * so we fill them with values that will encode to the smallest amount of - * data, viz: all zeroes in the AC entries, DC entries equal to previous - * block's DC value. (Thanks to Thomas Kinsman for this idea.) - */ - blkn = 0; - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - blockcnt = (MCU_col_num < last_MCU_col) ? compptr->MCU_width - : compptr->last_col_width; - xpos = MCU_col_num * compptr->MCU_sample_width; - ypos = yoffset * DCTSIZE; /* ypos == (yoffset+yindex) * DCTSIZE */ - for (yindex = 0; yindex < compptr->MCU_height; yindex++) { - if (coef->iMCU_row_num < last_iMCU_row || - yoffset+yindex < compptr->last_row_height) { - (*cinfo->fdct->forward_DCT) (cinfo, compptr, - input_buf[compptr->component_index], - coef->MCU_buffer[blkn], - ypos, xpos, (JDIMENSION) blockcnt); - if (blockcnt < compptr->MCU_width) { - /* Create some dummy blocks at the right edge of the image. */ - jzero_far((void FAR *) coef->MCU_buffer[blkn + blockcnt], - (compptr->MCU_width - blockcnt) * SIZEOF(JBLOCK)); - for (bi = blockcnt; bi < compptr->MCU_width; bi++) { - coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn+bi-1][0][0]; - } - } - } else { - /* Create a row of dummy blocks at the bottom of the image. */ - jzero_far((void FAR *) coef->MCU_buffer[blkn], - compptr->MCU_width * SIZEOF(JBLOCK)); - for (bi = 0; bi < compptr->MCU_width; bi++) { - coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn-1][0][0]; - } - } - blkn += compptr->MCU_width; - ypos += DCTSIZE; - } - } - /* Try to write the MCU. In event of a suspension failure, we will - * re-DCT the MCU on restart (a bit inefficient, could be fixed...) - */ - if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) { - /* Suspension forced; update state counters and exit */ - coef->MCU_vert_offset = yoffset; - coef->mcu_ctr = MCU_col_num; - return FALSE; - } - } - /* Completed an MCU row, but perhaps not an iMCU row */ - coef->mcu_ctr = 0; - } - /* Completed the iMCU row, advance counters for next one */ - coef->iMCU_row_num++; - start_iMCU_row(cinfo); - return TRUE; -} - - -#ifdef FULL_COEF_BUFFER_SUPPORTED - -/* - * Process some data in the first pass of a multi-pass case. - * We process the equivalent of one fully interleaved MCU row ("iMCU" row) - * per call, ie, v_samp_factor block rows for each component in the image. - * This amount of data is read from the source buffer, DCT'd and quantized, - * and saved into the virtual arrays. We also generate suitable dummy blocks - * as needed at the right and lower edges. (The dummy blocks are constructed - * in the virtual arrays, which have been padded appropriately.) This makes - * it possible for subsequent passes not to worry about real vs. dummy blocks. - * - * We must also emit the data to the entropy encoder. This is conveniently - * done by calling compress_output() after we've loaded the current strip - * of the virtual arrays. - * - * NB: input_buf contains a plane for each component in image. All - * components are DCT'd and loaded into the virtual arrays in this pass. - * However, it may be that only a subset of the components are emitted to - * the entropy encoder during this first pass; be careful about looking - * at the scan-dependent variables (MCU dimensions, etc). - */ - -METHODDEF(boolean) -compress_first_pass (j_compress_ptr cinfo, JSAMPIMAGE input_buf) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; - JDIMENSION blocks_across, MCUs_across, MCUindex; - int bi, ci, h_samp_factor, block_row, block_rows, ndummy; - JCOEF lastDC; - jpeg_component_info *compptr; - JBLOCKARRAY buffer; - JBLOCKROW thisblockrow, lastblockrow; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* Align the virtual buffer for this component. */ - buffer = (*cinfo->mem->access_virt_barray) - ((j_common_ptr) cinfo, coef->whole_image[ci], - coef->iMCU_row_num * compptr->v_samp_factor, - (JDIMENSION) compptr->v_samp_factor, TRUE); - /* Count non-dummy DCT block rows in this iMCU row. */ - if (coef->iMCU_row_num < last_iMCU_row) - block_rows = compptr->v_samp_factor; - else { - /* NB: can't use last_row_height here, since may not be set! */ - block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); - if (block_rows == 0) block_rows = compptr->v_samp_factor; - } - blocks_across = compptr->width_in_blocks; - h_samp_factor = compptr->h_samp_factor; - /* Count number of dummy blocks to be added at the right margin. */ - ndummy = (int) (blocks_across % h_samp_factor); - if (ndummy > 0) - ndummy = h_samp_factor - ndummy; - /* Perform DCT for all non-dummy blocks in this iMCU row. Each call - * on forward_DCT processes a complete horizontal row of DCT blocks. - */ - for (block_row = 0; block_row < block_rows; block_row++) { - thisblockrow = buffer[block_row]; - (*cinfo->fdct->forward_DCT) (cinfo, compptr, - input_buf[ci], thisblockrow, - (JDIMENSION) (block_row * DCTSIZE), - (JDIMENSION) 0, blocks_across); - if (ndummy > 0) { - /* Create dummy blocks at the right edge of the image. */ - thisblockrow += blocks_across; /* => first dummy block */ - jzero_far((void FAR *) thisblockrow, ndummy * SIZEOF(JBLOCK)); - lastDC = thisblockrow[-1][0]; - for (bi = 0; bi < ndummy; bi++) { - thisblockrow[bi][0] = lastDC; - } - } - } - /* If at end of image, create dummy block rows as needed. - * The tricky part here is that within each MCU, we want the DC values - * of the dummy blocks to match the last real block's DC value. - * This squeezes a few more bytes out of the resulting file... - */ - if (coef->iMCU_row_num == last_iMCU_row) { - blocks_across += ndummy; /* include lower right corner */ - MCUs_across = blocks_across / h_samp_factor; - for (block_row = block_rows; block_row < compptr->v_samp_factor; - block_row++) { - thisblockrow = buffer[block_row]; - lastblockrow = buffer[block_row-1]; - jzero_far((void FAR *) thisblockrow, - (size_t) (blocks_across * SIZEOF(JBLOCK))); - for (MCUindex = 0; MCUindex < MCUs_across; MCUindex++) { - lastDC = lastblockrow[h_samp_factor-1][0]; - for (bi = 0; bi < h_samp_factor; bi++) { - thisblockrow[bi][0] = lastDC; - } - thisblockrow += h_samp_factor; /* advance to next MCU in row */ - lastblockrow += h_samp_factor; - } - } - } - } - /* NB: compress_output will increment iMCU_row_num if successful. - * A suspension return will result in redoing all the work above next time. - */ - - /* Emit data to the entropy encoder, sharing code with subsequent passes */ - return compress_output(cinfo, input_buf); -} - - -/* - * Process some data in subsequent passes of a multi-pass case. - * We process the equivalent of one fully interleaved MCU row ("iMCU" row) - * per call, ie, v_samp_factor block rows for each component in the scan. - * The data is obtained from the virtual arrays and fed to the entropy coder. - * Returns TRUE if the iMCU row is completed, FALSE if suspended. - * - * NB: input_buf is ignored; it is likely to be a NULL pointer. - */ - -METHODDEF(boolean) -compress_output (j_compress_ptr cinfo, JSAMPIMAGE input_buf) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - JDIMENSION MCU_col_num; /* index of current MCU within row */ - int blkn, ci, xindex, yindex, yoffset; - JDIMENSION start_col; - JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; - JBLOCKROW buffer_ptr; - jpeg_component_info *compptr; - - /* Align the virtual buffers for the components used in this scan. - * NB: during first pass, this is safe only because the buffers will - * already be aligned properly, so jmemmgr.c won't need to do any I/O. - */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - buffer[ci] = (*cinfo->mem->access_virt_barray) - ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index], - coef->iMCU_row_num * compptr->v_samp_factor, - (JDIMENSION) compptr->v_samp_factor, FALSE); - } - - /* Loop to process one whole iMCU row */ - for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; - yoffset++) { - for (MCU_col_num = coef->mcu_ctr; MCU_col_num < cinfo->MCUs_per_row; - MCU_col_num++) { - /* Construct list of pointers to DCT blocks belonging to this MCU */ - blkn = 0; /* index of current DCT block within MCU */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - start_col = MCU_col_num * compptr->MCU_width; - for (yindex = 0; yindex < compptr->MCU_height; yindex++) { - buffer_ptr = buffer[ci][yindex+yoffset] + start_col; - for (xindex = 0; xindex < compptr->MCU_width; xindex++) { - coef->MCU_buffer[blkn++] = buffer_ptr++; - } - } - } - /* Try to write the MCU. */ - if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) { - /* Suspension forced; update state counters and exit */ - coef->MCU_vert_offset = yoffset; - coef->mcu_ctr = MCU_col_num; - return FALSE; - } - } - /* Completed an MCU row, but perhaps not an iMCU row */ - coef->mcu_ctr = 0; - } - /* Completed the iMCU row, advance counters for next one */ - coef->iMCU_row_num++; - start_iMCU_row(cinfo); - return TRUE; -} - -#endif /* FULL_COEF_BUFFER_SUPPORTED */ - - -/* - * Initialize coefficient buffer controller. - */ - -GLOBAL(void) -jinit_c_coef_controller (j_compress_ptr cinfo, boolean need_full_buffer) -{ - my_coef_ptr coef; - - coef = (my_coef_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_coef_controller)); - cinfo->coef = (struct jpeg_c_coef_controller *) coef; - coef->pub.start_pass = start_pass_coef; - - /* Create the coefficient buffer. */ - if (need_full_buffer) { -#ifdef FULL_COEF_BUFFER_SUPPORTED - /* Allocate a full-image virtual array for each component, */ - /* padded to a multiple of samp_factor DCT blocks in each direction. */ - int ci; - jpeg_component_info *compptr; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - coef->whole_image[ci] = (*cinfo->mem->request_virt_barray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, - (JDIMENSION) jround_up((long) compptr->width_in_blocks, - (long) compptr->h_samp_factor), - (JDIMENSION) jround_up((long) compptr->height_in_blocks, - (long) compptr->v_samp_factor), - (JDIMENSION) compptr->v_samp_factor); - } -#else - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); -#endif - } else { - /* We only need a single-MCU buffer. */ - JBLOCKROW buffer; - int i; - - buffer = (JBLOCKROW) - (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, - C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); - for (i = 0; i < C_MAX_BLOCKS_IN_MCU; i++) { - coef->MCU_buffer[i] = buffer + i; - } - coef->whole_image[0] = NULL; /* flag for no virtual arrays */ - } -} diff --git a/Build/source/libs/jpeg/jccolor.c b/Build/source/libs/jpeg/jccolor.c deleted file mode 100644 index 0a8a4b5d13c..00000000000 --- a/Build/source/libs/jpeg/jccolor.c +++ /dev/null @@ -1,459 +0,0 @@ -/* - * jccolor.c - * - * Copyright (C) 1991-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains input colorspace conversion routines. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Private subobject */ - -typedef struct { - struct jpeg_color_converter pub; /* public fields */ - - /* Private state for RGB->YCC conversion */ - INT32 * rgb_ycc_tab; /* => table for RGB to YCbCr conversion */ -} my_color_converter; - -typedef my_color_converter * my_cconvert_ptr; - - -/**************** RGB -> YCbCr conversion: most common case **************/ - -/* - * YCbCr is defined per CCIR 601-1, except that Cb and Cr are - * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. - * The conversion equations to be implemented are therefore - * Y = 0.29900 * R + 0.58700 * G + 0.11400 * B - * Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + CENTERJSAMPLE - * Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + CENTERJSAMPLE - * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) - * Note: older versions of the IJG code used a zero offset of MAXJSAMPLE/2, - * rather than CENTERJSAMPLE, for Cb and Cr. This gave equal positive and - * negative swings for Cb/Cr, but meant that grayscale values (Cb=Cr=0) - * were not represented exactly. Now we sacrifice exact representation of - * maximum red and maximum blue in order to get exact grayscales. - * - * To avoid floating-point arithmetic, we represent the fractional constants - * as integers scaled up by 2^16 (about 4 digits precision); we have to divide - * the products by 2^16, with appropriate rounding, to get the correct answer. - * - * For even more speed, we avoid doing any multiplications in the inner loop - * by precalculating the constants times R,G,B for all possible values. - * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table); - * for 12-bit samples it is still acceptable. It's not very reasonable for - * 16-bit samples, but if you want lossless storage you shouldn't be changing - * colorspace anyway. - * The CENTERJSAMPLE offsets and the rounding fudge-factor of 0.5 are included - * in the tables to save adding them separately in the inner loop. - */ - -#define SCALEBITS 16 /* speediest right-shift on some machines */ -#define CBCR_OFFSET ((INT32) CENTERJSAMPLE << SCALEBITS) -#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) -#define FIX(x) ((INT32) ((x) * (1L< Y section */ -#define G_Y_OFF (1*(MAXJSAMPLE+1)) /* offset to G => Y section */ -#define B_Y_OFF (2*(MAXJSAMPLE+1)) /* etc. */ -#define R_CB_OFF (3*(MAXJSAMPLE+1)) -#define G_CB_OFF (4*(MAXJSAMPLE+1)) -#define B_CB_OFF (5*(MAXJSAMPLE+1)) -#define R_CR_OFF B_CB_OFF /* B=>Cb, R=>Cr are the same */ -#define G_CR_OFF (6*(MAXJSAMPLE+1)) -#define B_CR_OFF (7*(MAXJSAMPLE+1)) -#define TABLE_SIZE (8*(MAXJSAMPLE+1)) - - -/* - * Initialize for RGB->YCC colorspace conversion. - */ - -METHODDEF(void) -rgb_ycc_start (j_compress_ptr cinfo) -{ - my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - INT32 * rgb_ycc_tab; - INT32 i; - - /* Allocate and fill in the conversion tables. */ - cconvert->rgb_ycc_tab = rgb_ycc_tab = (INT32 *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (TABLE_SIZE * SIZEOF(INT32))); - - for (i = 0; i <= MAXJSAMPLE; i++) { - rgb_ycc_tab[i+R_Y_OFF] = FIX(0.29900) * i; - rgb_ycc_tab[i+G_Y_OFF] = FIX(0.58700) * i; - rgb_ycc_tab[i+B_Y_OFF] = FIX(0.11400) * i + ONE_HALF; - rgb_ycc_tab[i+R_CB_OFF] = (-FIX(0.16874)) * i; - rgb_ycc_tab[i+G_CB_OFF] = (-FIX(0.33126)) * i; - /* We use a rounding fudge-factor of 0.5-epsilon for Cb and Cr. - * This ensures that the maximum output will round to MAXJSAMPLE - * not MAXJSAMPLE+1, and thus that we don't have to range-limit. - */ - rgb_ycc_tab[i+B_CB_OFF] = FIX(0.50000) * i + CBCR_OFFSET + ONE_HALF-1; -/* B=>Cb and R=>Cr tables are the same - rgb_ycc_tab[i+R_CR_OFF] = FIX(0.50000) * i + CBCR_OFFSET + ONE_HALF-1; -*/ - rgb_ycc_tab[i+G_CR_OFF] = (-FIX(0.41869)) * i; - rgb_ycc_tab[i+B_CR_OFF] = (-FIX(0.08131)) * i; - } -} - - -/* - * Convert some rows of samples to the JPEG colorspace. - * - * Note that we change from the application's interleaved-pixel format - * to our internal noninterleaved, one-plane-per-component format. - * The input buffer is therefore three times as wide as the output buffer. - * - * A starting row offset is provided only for the output buffer. The caller - * can easily adjust the passed input_buf value to accommodate any row - * offset required on that side. - */ - -METHODDEF(void) -rgb_ycc_convert (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPIMAGE output_buf, - JDIMENSION output_row, int num_rows) -{ - my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int r, g, b; - register INT32 * ctab = cconvert->rgb_ycc_tab; - register JSAMPROW inptr; - register JSAMPROW outptr0, outptr1, outptr2; - register JDIMENSION col; - JDIMENSION num_cols = cinfo->image_width; - - while (--num_rows >= 0) { - inptr = *input_buf++; - outptr0 = output_buf[0][output_row]; - outptr1 = output_buf[1][output_row]; - outptr2 = output_buf[2][output_row]; - output_row++; - for (col = 0; col < num_cols; col++) { - r = GETJSAMPLE(inptr[RGB_RED]); - g = GETJSAMPLE(inptr[RGB_GREEN]); - b = GETJSAMPLE(inptr[RGB_BLUE]); - inptr += RGB_PIXELSIZE; - /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations - * must be too; we do not need an explicit range-limiting operation. - * Hence the value being shifted is never negative, and we don't - * need the general RIGHT_SHIFT macro. - */ - /* Y */ - outptr0[col] = (JSAMPLE) - ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) - >> SCALEBITS); - /* Cb */ - outptr1[col] = (JSAMPLE) - ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF]) - >> SCALEBITS); - /* Cr */ - outptr2[col] = (JSAMPLE) - ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF]) - >> SCALEBITS); - } - } -} - - -/**************** Cases other than RGB -> YCbCr **************/ - - -/* - * Convert some rows of samples to the JPEG colorspace. - * This version handles RGB->grayscale conversion, which is the same - * as the RGB->Y portion of RGB->YCbCr. - * We assume rgb_ycc_start has been called (we only use the Y tables). - */ - -METHODDEF(void) -rgb_gray_convert (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPIMAGE output_buf, - JDIMENSION output_row, int num_rows) -{ - my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int r, g, b; - register INT32 * ctab = cconvert->rgb_ycc_tab; - register JSAMPROW inptr; - register JSAMPROW outptr; - register JDIMENSION col; - JDIMENSION num_cols = cinfo->image_width; - - while (--num_rows >= 0) { - inptr = *input_buf++; - outptr = output_buf[0][output_row]; - output_row++; - for (col = 0; col < num_cols; col++) { - r = GETJSAMPLE(inptr[RGB_RED]); - g = GETJSAMPLE(inptr[RGB_GREEN]); - b = GETJSAMPLE(inptr[RGB_BLUE]); - inptr += RGB_PIXELSIZE; - /* Y */ - outptr[col] = (JSAMPLE) - ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) - >> SCALEBITS); - } - } -} - - -/* - * Convert some rows of samples to the JPEG colorspace. - * This version handles Adobe-style CMYK->YCCK conversion, - * where we convert R=1-C, G=1-M, and B=1-Y to YCbCr using the same - * conversion as above, while passing K (black) unchanged. - * We assume rgb_ycc_start has been called. - */ - -METHODDEF(void) -cmyk_ycck_convert (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPIMAGE output_buf, - JDIMENSION output_row, int num_rows) -{ - my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int r, g, b; - register INT32 * ctab = cconvert->rgb_ycc_tab; - register JSAMPROW inptr; - register JSAMPROW outptr0, outptr1, outptr2, outptr3; - register JDIMENSION col; - JDIMENSION num_cols = cinfo->image_width; - - while (--num_rows >= 0) { - inptr = *input_buf++; - outptr0 = output_buf[0][output_row]; - outptr1 = output_buf[1][output_row]; - outptr2 = output_buf[2][output_row]; - outptr3 = output_buf[3][output_row]; - output_row++; - for (col = 0; col < num_cols; col++) { - r = MAXJSAMPLE - GETJSAMPLE(inptr[0]); - g = MAXJSAMPLE - GETJSAMPLE(inptr[1]); - b = MAXJSAMPLE - GETJSAMPLE(inptr[2]); - /* K passes through as-is */ - outptr3[col] = inptr[3]; /* don't need GETJSAMPLE here */ - inptr += 4; - /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations - * must be too; we do not need an explicit range-limiting operation. - * Hence the value being shifted is never negative, and we don't - * need the general RIGHT_SHIFT macro. - */ - /* Y */ - outptr0[col] = (JSAMPLE) - ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) - >> SCALEBITS); - /* Cb */ - outptr1[col] = (JSAMPLE) - ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF]) - >> SCALEBITS); - /* Cr */ - outptr2[col] = (JSAMPLE) - ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF]) - >> SCALEBITS); - } - } -} - - -/* - * Convert some rows of samples to the JPEG colorspace. - * This version handles grayscale output with no conversion. - * The source can be either plain grayscale or YCbCr (since Y == gray). - */ - -METHODDEF(void) -grayscale_convert (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPIMAGE output_buf, - JDIMENSION output_row, int num_rows) -{ - register JSAMPROW inptr; - register JSAMPROW outptr; - register JDIMENSION col; - JDIMENSION num_cols = cinfo->image_width; - int instride = cinfo->input_components; - - while (--num_rows >= 0) { - inptr = *input_buf++; - outptr = output_buf[0][output_row]; - output_row++; - for (col = 0; col < num_cols; col++) { - outptr[col] = inptr[0]; /* don't need GETJSAMPLE() here */ - inptr += instride; - } - } -} - - -/* - * Convert some rows of samples to the JPEG colorspace. - * This version handles multi-component colorspaces without conversion. - * We assume input_components == num_components. - */ - -METHODDEF(void) -null_convert (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPIMAGE output_buf, - JDIMENSION output_row, int num_rows) -{ - register JSAMPROW inptr; - register JSAMPROW outptr; - register JDIMENSION col; - register int ci; - int nc = cinfo->num_components; - JDIMENSION num_cols = cinfo->image_width; - - while (--num_rows >= 0) { - /* It seems fastest to make a separate pass for each component. */ - for (ci = 0; ci < nc; ci++) { - inptr = *input_buf; - outptr = output_buf[ci][output_row]; - for (col = 0; col < num_cols; col++) { - outptr[col] = inptr[ci]; /* don't need GETJSAMPLE() here */ - inptr += nc; - } - } - input_buf++; - output_row++; - } -} - - -/* - * Empty method for start_pass. - */ - -METHODDEF(void) -null_method (j_compress_ptr cinfo) -{ - /* no work needed */ -} - - -/* - * Module initialization routine for input colorspace conversion. - */ - -GLOBAL(void) -jinit_color_converter (j_compress_ptr cinfo) -{ - my_cconvert_ptr cconvert; - - cconvert = (my_cconvert_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_color_converter)); - cinfo->cconvert = (struct jpeg_color_converter *) cconvert; - /* set start_pass to null method until we find out differently */ - cconvert->pub.start_pass = null_method; - - /* Make sure input_components agrees with in_color_space */ - switch (cinfo->in_color_space) { - case JCS_GRAYSCALE: - if (cinfo->input_components != 1) - ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); - break; - - case JCS_RGB: -#if RGB_PIXELSIZE != 3 - if (cinfo->input_components != RGB_PIXELSIZE) - ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); - break; -#endif /* else share code with YCbCr */ - - case JCS_YCbCr: - if (cinfo->input_components != 3) - ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); - break; - - case JCS_CMYK: - case JCS_YCCK: - if (cinfo->input_components != 4) - ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); - break; - - default: /* JCS_UNKNOWN can be anything */ - if (cinfo->input_components < 1) - ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); - break; - } - - /* Check num_components, set conversion method based on requested space */ - switch (cinfo->jpeg_color_space) { - case JCS_GRAYSCALE: - if (cinfo->num_components != 1) - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_GRAYSCALE) - cconvert->pub.color_convert = grayscale_convert; - else if (cinfo->in_color_space == JCS_RGB) { - cconvert->pub.start_pass = rgb_ycc_start; - cconvert->pub.color_convert = rgb_gray_convert; - } else if (cinfo->in_color_space == JCS_YCbCr) - cconvert->pub.color_convert = grayscale_convert; - else - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; - - case JCS_RGB: - if (cinfo->num_components != 3) - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_RGB && RGB_PIXELSIZE == 3) - cconvert->pub.color_convert = null_convert; - else - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; - - case JCS_YCbCr: - if (cinfo->num_components != 3) - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_RGB) { - cconvert->pub.start_pass = rgb_ycc_start; - cconvert->pub.color_convert = rgb_ycc_convert; - } else if (cinfo->in_color_space == JCS_YCbCr) - cconvert->pub.color_convert = null_convert; - else - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; - - case JCS_CMYK: - if (cinfo->num_components != 4) - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_CMYK) - cconvert->pub.color_convert = null_convert; - else - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; - - case JCS_YCCK: - if (cinfo->num_components != 4) - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_CMYK) { - cconvert->pub.start_pass = rgb_ycc_start; - cconvert->pub.color_convert = cmyk_ycck_convert; - } else if (cinfo->in_color_space == JCS_YCCK) - cconvert->pub.color_convert = null_convert; - else - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; - - default: /* allow null conversion of JCS_UNKNOWN */ - if (cinfo->jpeg_color_space != cinfo->in_color_space || - cinfo->num_components != cinfo->input_components) - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - cconvert->pub.color_convert = null_convert; - break; - } -} diff --git a/Build/source/libs/jpeg/jcdctmgr.c b/Build/source/libs/jpeg/jcdctmgr.c deleted file mode 100644 index 61fa79b9e68..00000000000 --- a/Build/source/libs/jpeg/jcdctmgr.c +++ /dev/null @@ -1,387 +0,0 @@ -/* - * jcdctmgr.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the forward-DCT management logic. - * This code selects a particular DCT implementation to be used, - * and it performs related housekeeping chores including coefficient - * quantization. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdct.h" /* Private declarations for DCT subsystem */ - - -/* Private subobject for this module */ - -typedef struct { - struct jpeg_forward_dct pub; /* public fields */ - - /* Pointer to the DCT routine actually in use */ - forward_DCT_method_ptr do_dct; - - /* The actual post-DCT divisors --- not identical to the quant table - * entries, because of scaling (especially for an unnormalized DCT). - * Each table is given in normal array order. - */ - DCTELEM * divisors[NUM_QUANT_TBLS]; - -#ifdef DCT_FLOAT_SUPPORTED - /* Same as above for the floating-point case. */ - float_DCT_method_ptr do_float_dct; - FAST_FLOAT * float_divisors[NUM_QUANT_TBLS]; -#endif -} my_fdct_controller; - -typedef my_fdct_controller * my_fdct_ptr; - - -/* - * Initialize for a processing pass. - * Verify that all referenced Q-tables are present, and set up - * the divisor table for each one. - * In the current implementation, DCT of all components is done during - * the first pass, even if only some components will be output in the - * first scan. Hence all components should be examined here. - */ - -METHODDEF(void) -start_pass_fdctmgr (j_compress_ptr cinfo) -{ - my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; - int ci, qtblno, i; - jpeg_component_info *compptr; - JQUANT_TBL * qtbl; - DCTELEM * dtbl; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - qtblno = compptr->quant_tbl_no; - /* Make sure specified quantization table is present */ - if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS || - cinfo->quant_tbl_ptrs[qtblno] == NULL) - ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno); - qtbl = cinfo->quant_tbl_ptrs[qtblno]; - /* Compute divisors for this quant table */ - /* We may do this more than once for same table, but it's not a big deal */ - switch (cinfo->dct_method) { -#ifdef DCT_ISLOW_SUPPORTED - case JDCT_ISLOW: - /* For LL&M IDCT method, divisors are equal to raw quantization - * coefficients multiplied by 8 (to counteract scaling). - */ - if (fdct->divisors[qtblno] == NULL) { - fdct->divisors[qtblno] = (DCTELEM *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - DCTSIZE2 * SIZEOF(DCTELEM)); - } - dtbl = fdct->divisors[qtblno]; - for (i = 0; i < DCTSIZE2; i++) { - dtbl[i] = ((DCTELEM) qtbl->quantval[i]) << 3; - } - break; -#endif -#ifdef DCT_IFAST_SUPPORTED - case JDCT_IFAST: - { - /* For AA&N IDCT method, divisors are equal to quantization - * coefficients scaled by scalefactor[row]*scalefactor[col], where - * scalefactor[0] = 1 - * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 - * We apply a further scale factor of 8. - */ -#define CONST_BITS 14 - static const INT16 aanscales[DCTSIZE2] = { - /* precomputed values scaled up by 14 bits */ - 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, - 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270, - 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906, - 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315, - 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, - 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552, - 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446, - 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247 - }; - SHIFT_TEMPS - - if (fdct->divisors[qtblno] == NULL) { - fdct->divisors[qtblno] = (DCTELEM *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - DCTSIZE2 * SIZEOF(DCTELEM)); - } - dtbl = fdct->divisors[qtblno]; - for (i = 0; i < DCTSIZE2; i++) { - dtbl[i] = (DCTELEM) - DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], - (INT32) aanscales[i]), - CONST_BITS-3); - } - } - break; -#endif -#ifdef DCT_FLOAT_SUPPORTED - case JDCT_FLOAT: - { - /* For float AA&N IDCT method, divisors are equal to quantization - * coefficients scaled by scalefactor[row]*scalefactor[col], where - * scalefactor[0] = 1 - * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 - * We apply a further scale factor of 8. - * What's actually stored is 1/divisor so that the inner loop can - * use a multiplication rather than a division. - */ - FAST_FLOAT * fdtbl; - int row, col; - static const double aanscalefactor[DCTSIZE] = { - 1.0, 1.387039845, 1.306562965, 1.175875602, - 1.0, 0.785694958, 0.541196100, 0.275899379 - }; - - if (fdct->float_divisors[qtblno] == NULL) { - fdct->float_divisors[qtblno] = (FAST_FLOAT *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - DCTSIZE2 * SIZEOF(FAST_FLOAT)); - } - fdtbl = fdct->float_divisors[qtblno]; - i = 0; - for (row = 0; row < DCTSIZE; row++) { - for (col = 0; col < DCTSIZE; col++) { - fdtbl[i] = (FAST_FLOAT) - (1.0 / (((double) qtbl->quantval[i] * - aanscalefactor[row] * aanscalefactor[col] * 8.0))); - i++; - } - } - } - break; -#endif - default: - ERREXIT(cinfo, JERR_NOT_COMPILED); - break; - } - } -} - - -/* - * Perform forward DCT on one or more blocks of a component. - * - * The input samples are taken from the sample_data[] array starting at - * position start_row/start_col, and moving to the right for any additional - * blocks. The quantized coefficients are returned in coef_blocks[]. - */ - -METHODDEF(void) -forward_DCT (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY sample_data, JBLOCKROW coef_blocks, - JDIMENSION start_row, JDIMENSION start_col, - JDIMENSION num_blocks) -/* This version is used for integer DCT implementations. */ -{ - /* This routine is heavily used, so it's worth coding it tightly. */ - my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; - forward_DCT_method_ptr do_dct = fdct->do_dct; - DCTELEM * divisors = fdct->divisors[compptr->quant_tbl_no]; - DCTELEM workspace[DCTSIZE2]; /* work area for FDCT subroutine */ - JDIMENSION bi; - - sample_data += start_row; /* fold in the vertical offset once */ - - for (bi = 0; bi < num_blocks; bi++, start_col += DCTSIZE) { - /* Load data into workspace, applying unsigned->signed conversion */ - { register DCTELEM *workspaceptr; - register JSAMPROW elemptr; - register int elemr; - - workspaceptr = workspace; - for (elemr = 0; elemr < DCTSIZE; elemr++) { - elemptr = sample_data[elemr] + start_col; -#if DCTSIZE == 8 /* unroll the inner loop */ - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; -#else - { register int elemc; - for (elemc = DCTSIZE; elemc > 0; elemc--) { - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - } - } -#endif - } - } - - /* Perform the DCT */ - (*do_dct) (workspace); - - /* Quantize/descale the coefficients, and store into coef_blocks[] */ - { register DCTELEM temp, qval; - register int i; - register JCOEFPTR output_ptr = coef_blocks[bi]; - - for (i = 0; i < DCTSIZE2; i++) { - qval = divisors[i]; - temp = workspace[i]; - /* Divide the coefficient value by qval, ensuring proper rounding. - * Since C does not specify the direction of rounding for negative - * quotients, we have to force the dividend positive for portability. - * - * In most files, at least half of the output values will be zero - * (at default quantization settings, more like three-quarters...) - * so we should ensure that this case is fast. On many machines, - * a comparison is enough cheaper than a divide to make a special test - * a win. Since both inputs will be nonnegative, we need only test - * for a < b to discover whether a/b is 0. - * If your machine's division is fast enough, define FAST_DIVIDE. - */ -#ifdef FAST_DIVIDE -#define DIVIDE_BY(a,b) a /= b -#else -#define DIVIDE_BY(a,b) if (a >= b) a /= b; else a = 0 -#endif - if (temp < 0) { - temp = -temp; - temp += qval>>1; /* for rounding */ - DIVIDE_BY(temp, qval); - temp = -temp; - } else { - temp += qval>>1; /* for rounding */ - DIVIDE_BY(temp, qval); - } - output_ptr[i] = (JCOEF) temp; - } - } - } -} - - -#ifdef DCT_FLOAT_SUPPORTED - -METHODDEF(void) -forward_DCT_float (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY sample_data, JBLOCKROW coef_blocks, - JDIMENSION start_row, JDIMENSION start_col, - JDIMENSION num_blocks) -/* This version is used for floating-point DCT implementations. */ -{ - /* This routine is heavily used, so it's worth coding it tightly. */ - my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; - float_DCT_method_ptr do_dct = fdct->do_float_dct; - FAST_FLOAT * divisors = fdct->float_divisors[compptr->quant_tbl_no]; - FAST_FLOAT workspace[DCTSIZE2]; /* work area for FDCT subroutine */ - JDIMENSION bi; - - sample_data += start_row; /* fold in the vertical offset once */ - - for (bi = 0; bi < num_blocks; bi++, start_col += DCTSIZE) { - /* Load data into workspace, applying unsigned->signed conversion */ - { register FAST_FLOAT *workspaceptr; - register JSAMPROW elemptr; - register int elemr; - - workspaceptr = workspace; - for (elemr = 0; elemr < DCTSIZE; elemr++) { - elemptr = sample_data[elemr] + start_col; -#if DCTSIZE == 8 /* unroll the inner loop */ - *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); - *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); - *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); - *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); - *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); - *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); - *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); - *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); -#else - { register int elemc; - for (elemc = DCTSIZE; elemc > 0; elemc--) { - *workspaceptr++ = (FAST_FLOAT) - (GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); - } - } -#endif - } - } - - /* Perform the DCT */ - (*do_dct) (workspace); - - /* Quantize/descale the coefficients, and store into coef_blocks[] */ - { register FAST_FLOAT temp; - register int i; - register JCOEFPTR output_ptr = coef_blocks[bi]; - - for (i = 0; i < DCTSIZE2; i++) { - /* Apply the quantization and scaling factor */ - temp = workspace[i] * divisors[i]; - /* Round to nearest integer. - * Since C does not specify the direction of rounding for negative - * quotients, we have to force the dividend positive for portability. - * The maximum coefficient size is +-16K (for 12-bit data), so this - * code should work for either 16-bit or 32-bit ints. - */ - output_ptr[i] = (JCOEF) ((int) (temp + (FAST_FLOAT) 16384.5) - 16384); - } - } - } -} - -#endif /* DCT_FLOAT_SUPPORTED */ - - -/* - * Initialize FDCT manager. - */ - -GLOBAL(void) -jinit_forward_dct (j_compress_ptr cinfo) -{ - my_fdct_ptr fdct; - int i; - - fdct = (my_fdct_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_fdct_controller)); - cinfo->fdct = (struct jpeg_forward_dct *) fdct; - fdct->pub.start_pass = start_pass_fdctmgr; - - switch (cinfo->dct_method) { -#ifdef DCT_ISLOW_SUPPORTED - case JDCT_ISLOW: - fdct->pub.forward_DCT = forward_DCT; - fdct->do_dct = jpeg_fdct_islow; - break; -#endif -#ifdef DCT_IFAST_SUPPORTED - case JDCT_IFAST: - fdct->pub.forward_DCT = forward_DCT; - fdct->do_dct = jpeg_fdct_ifast; - break; -#endif -#ifdef DCT_FLOAT_SUPPORTED - case JDCT_FLOAT: - fdct->pub.forward_DCT = forward_DCT_float; - fdct->do_float_dct = jpeg_fdct_float; - break; -#endif - default: - ERREXIT(cinfo, JERR_NOT_COMPILED); - break; - } - - /* Mark divisor tables unallocated */ - for (i = 0; i < NUM_QUANT_TBLS; i++) { - fdct->divisors[i] = NULL; -#ifdef DCT_FLOAT_SUPPORTED - fdct->float_divisors[i] = NULL; -#endif - } -} diff --git a/Build/source/libs/jpeg/jchuff.c b/Build/source/libs/jpeg/jchuff.c deleted file mode 100644 index f2352505486..00000000000 --- a/Build/source/libs/jpeg/jchuff.c +++ /dev/null @@ -1,909 +0,0 @@ -/* - * jchuff.c - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains Huffman entropy encoding routines. - * - * Much of the complexity here has to do with supporting output suspension. - * If the data destination module demands suspension, we want to be able to - * back up to the start of the current MCU. To do this, we copy state - * variables into local working storage, and update them back to the - * permanent JPEG objects only upon successful completion of an MCU. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jchuff.h" /* Declarations shared with jcphuff.c */ - - -/* Expanded entropy encoder object for Huffman encoding. - * - * The savable_state subrecord contains fields that change within an MCU, - * but must not be updated permanently until we complete the MCU. - */ - -typedef struct { - INT32 put_buffer; /* current bit-accumulation buffer */ - int put_bits; /* # of bits now in it */ - int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ -} savable_state; - -/* This macro is to work around compilers with missing or broken - * structure assignment. You'll need to fix this code if you have - * such a compiler and you change MAX_COMPS_IN_SCAN. - */ - -#ifndef NO_STRUCT_ASSIGN -#define ASSIGN_STATE(dest,src) ((dest) = (src)) -#else -#if MAX_COMPS_IN_SCAN == 4 -#define ASSIGN_STATE(dest,src) \ - ((dest).put_buffer = (src).put_buffer, \ - (dest).put_bits = (src).put_bits, \ - (dest).last_dc_val[0] = (src).last_dc_val[0], \ - (dest).last_dc_val[1] = (src).last_dc_val[1], \ - (dest).last_dc_val[2] = (src).last_dc_val[2], \ - (dest).last_dc_val[3] = (src).last_dc_val[3]) -#endif -#endif - - -typedef struct { - struct jpeg_entropy_encoder pub; /* public fields */ - - savable_state saved; /* Bit buffer & DC state at start of MCU */ - - /* These fields are NOT loaded into local working state. */ - unsigned int restarts_to_go; /* MCUs left in this restart interval */ - int next_restart_num; /* next restart number to write (0-7) */ - - /* Pointers to derived tables (these workspaces have image lifespan) */ - c_derived_tbl * dc_derived_tbls[NUM_HUFF_TBLS]; - c_derived_tbl * ac_derived_tbls[NUM_HUFF_TBLS]; - -#ifdef ENTROPY_OPT_SUPPORTED /* Statistics tables for optimization */ - long * dc_count_ptrs[NUM_HUFF_TBLS]; - long * ac_count_ptrs[NUM_HUFF_TBLS]; -#endif -} huff_entropy_encoder; - -typedef huff_entropy_encoder * huff_entropy_ptr; - -/* Working state while writing an MCU. - * This struct contains all the fields that are needed by subroutines. - */ - -typedef struct { - JOCTET * next_output_byte; /* => next byte to write in buffer */ - size_t free_in_buffer; /* # of byte spaces remaining in buffer */ - savable_state cur; /* Current bit buffer & DC state */ - j_compress_ptr cinfo; /* dump_buffer needs access to this */ -} working_state; - - -/* Forward declarations */ -METHODDEF(boolean) encode_mcu_huff JPP((j_compress_ptr cinfo, - JBLOCKROW *MCU_data)); -METHODDEF(void) finish_pass_huff JPP((j_compress_ptr cinfo)); -#ifdef ENTROPY_OPT_SUPPORTED -METHODDEF(boolean) encode_mcu_gather JPP((j_compress_ptr cinfo, - JBLOCKROW *MCU_data)); -METHODDEF(void) finish_pass_gather JPP((j_compress_ptr cinfo)); -#endif - - -/* - * Initialize for a Huffman-compressed scan. - * If gather_statistics is TRUE, we do not output anything during the scan, - * just count the Huffman symbols used and generate Huffman code tables. - */ - -METHODDEF(void) -start_pass_huff (j_compress_ptr cinfo, boolean gather_statistics) -{ - huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - int ci, dctbl, actbl; - jpeg_component_info * compptr; - - if (gather_statistics) { -#ifdef ENTROPY_OPT_SUPPORTED - entropy->pub.encode_mcu = encode_mcu_gather; - entropy->pub.finish_pass = finish_pass_gather; -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } else { - entropy->pub.encode_mcu = encode_mcu_huff; - entropy->pub.finish_pass = finish_pass_huff; - } - - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - dctbl = compptr->dc_tbl_no; - actbl = compptr->ac_tbl_no; - if (gather_statistics) { -#ifdef ENTROPY_OPT_SUPPORTED - /* Check for invalid table indexes */ - /* (make_c_derived_tbl does this in the other path) */ - if (dctbl < 0 || dctbl >= NUM_HUFF_TBLS) - ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, dctbl); - if (actbl < 0 || actbl >= NUM_HUFF_TBLS) - ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, actbl); - /* Allocate and zero the statistics tables */ - /* Note that jpeg_gen_optimal_table expects 257 entries in each table! */ - if (entropy->dc_count_ptrs[dctbl] == NULL) - entropy->dc_count_ptrs[dctbl] = (long *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - 257 * SIZEOF(long)); - MEMZERO(entropy->dc_count_ptrs[dctbl], 257 * SIZEOF(long)); - if (entropy->ac_count_ptrs[actbl] == NULL) - entropy->ac_count_ptrs[actbl] = (long *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - 257 * SIZEOF(long)); - MEMZERO(entropy->ac_count_ptrs[actbl], 257 * SIZEOF(long)); -#endif - } else { - /* Compute derived values for Huffman tables */ - /* We may do this more than once for a table, but it's not expensive */ - jpeg_make_c_derived_tbl(cinfo, TRUE, dctbl, - & entropy->dc_derived_tbls[dctbl]); - jpeg_make_c_derived_tbl(cinfo, FALSE, actbl, - & entropy->ac_derived_tbls[actbl]); - } - /* Initialize DC predictions to 0 */ - entropy->saved.last_dc_val[ci] = 0; - } - - /* Initialize bit buffer to empty */ - entropy->saved.put_buffer = 0; - entropy->saved.put_bits = 0; - - /* Initialize restart stuff */ - entropy->restarts_to_go = cinfo->restart_interval; - entropy->next_restart_num = 0; -} - - -/* - * Compute the derived values for a Huffman table. - * This routine also performs some validation checks on the table. - * - * Note this is also used by jcphuff.c. - */ - -GLOBAL(void) -jpeg_make_c_derived_tbl (j_compress_ptr cinfo, boolean isDC, int tblno, - c_derived_tbl ** pdtbl) -{ - JHUFF_TBL *htbl; - c_derived_tbl *dtbl; - int p, i, l, lastp, si, maxsymbol; - char huffsize[257]; - unsigned int huffcode[257]; - unsigned int code; - - /* Note that huffsize[] and huffcode[] are filled in code-length order, - * paralleling the order of the symbols themselves in htbl->huffval[]. - */ - - /* Find the input Huffman table */ - if (tblno < 0 || tblno >= NUM_HUFF_TBLS) - ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); - htbl = - isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno]; - if (htbl == NULL) - ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); - - /* Allocate a workspace if we haven't already done so. */ - if (*pdtbl == NULL) - *pdtbl = (c_derived_tbl *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(c_derived_tbl)); - dtbl = *pdtbl; - - /* Figure C.1: make table of Huffman code length for each symbol */ - - p = 0; - for (l = 1; l <= 16; l++) { - i = (int) htbl->bits[l]; - if (i < 0 || p + i > 256) /* protect against table overrun */ - ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); - while (i--) - huffsize[p++] = (char) l; - } - huffsize[p] = 0; - lastp = p; - - /* Figure C.2: generate the codes themselves */ - /* We also validate that the counts represent a legal Huffman code tree. */ - - code = 0; - si = huffsize[0]; - p = 0; - while (huffsize[p]) { - while (((int) huffsize[p]) == si) { - huffcode[p++] = code; - code++; - } - /* code is now 1 more than the last code used for codelength si; but - * it must still fit in si bits, since no code is allowed to be all ones. - */ - if (((INT32) code) >= (((INT32) 1) << si)) - ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); - code <<= 1; - si++; - } - - /* Figure C.3: generate encoding tables */ - /* These are code and size indexed by symbol value */ - - /* Set all codeless symbols to have code length 0; - * this lets us detect duplicate VAL entries here, and later - * allows emit_bits to detect any attempt to emit such symbols. - */ - MEMZERO(dtbl->ehufsi, SIZEOF(dtbl->ehufsi)); - - /* This is also a convenient place to check for out-of-range - * and duplicated VAL entries. We allow 0..255 for AC symbols - * but only 0..15 for DC. (We could constrain them further - * based on data depth and mode, but this seems enough.) - */ - maxsymbol = isDC ? 15 : 255; - - for (p = 0; p < lastp; p++) { - i = htbl->huffval[p]; - if (i < 0 || i > maxsymbol || dtbl->ehufsi[i]) - ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); - dtbl->ehufco[i] = huffcode[p]; - dtbl->ehufsi[i] = huffsize[p]; - } -} - - -/* Outputting bytes to the file */ - -/* Emit a byte, taking 'action' if must suspend. */ -#define emit_byte(state,val,action) \ - { *(state)->next_output_byte++ = (JOCTET) (val); \ - if (--(state)->free_in_buffer == 0) \ - if (! dump_buffer(state)) \ - { action; } } - - -LOCAL(boolean) -dump_buffer (working_state * state) -/* Empty the output buffer; return TRUE if successful, FALSE if must suspend */ -{ - struct jpeg_destination_mgr * dest = state->cinfo->dest; - - if (! (*dest->empty_output_buffer) (state->cinfo)) - return FALSE; - /* After a successful buffer dump, must reset buffer pointers */ - state->next_output_byte = dest->next_output_byte; - state->free_in_buffer = dest->free_in_buffer; - return TRUE; -} - - -/* Outputting bits to the file */ - -/* Only the right 24 bits of put_buffer are used; the valid bits are - * left-justified in this part. At most 16 bits can be passed to emit_bits - * in one call, and we never retain more than 7 bits in put_buffer - * between calls, so 24 bits are sufficient. - */ - -INLINE -LOCAL(boolean) -emit_bits (working_state * state, unsigned int code, int size) -/* Emit some bits; return TRUE if successful, FALSE if must suspend */ -{ - /* This routine is heavily used, so it's worth coding tightly. */ - register INT32 put_buffer = (INT32) code; - register int put_bits = state->cur.put_bits; - - /* if size is 0, caller used an invalid Huffman table entry */ - if (size == 0) - ERREXIT(state->cinfo, JERR_HUFF_MISSING_CODE); - - put_buffer &= (((INT32) 1)<cur.put_buffer; /* and merge with old buffer contents */ - - while (put_bits >= 8) { - int c = (int) ((put_buffer >> 16) & 0xFF); - - emit_byte(state, c, return FALSE); - if (c == 0xFF) { /* need to stuff a zero byte? */ - emit_byte(state, 0, return FALSE); - } - put_buffer <<= 8; - put_bits -= 8; - } - - state->cur.put_buffer = put_buffer; /* update state variables */ - state->cur.put_bits = put_bits; - - return TRUE; -} - - -LOCAL(boolean) -flush_bits (working_state * state) -{ - if (! emit_bits(state, 0x7F, 7)) /* fill any partial byte with ones */ - return FALSE; - state->cur.put_buffer = 0; /* and reset bit-buffer to empty */ - state->cur.put_bits = 0; - return TRUE; -} - - -/* Encode a single block's worth of coefficients */ - -LOCAL(boolean) -encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val, - c_derived_tbl *dctbl, c_derived_tbl *actbl) -{ - register int temp, temp2; - register int nbits; - register int k, r, i; - - /* Encode the DC coefficient difference per section F.1.2.1 */ - - temp = temp2 = block[0] - last_dc_val; - - if (temp < 0) { - temp = -temp; /* temp is abs value of input */ - /* For a negative input, want temp2 = bitwise complement of abs(input) */ - /* This code assumes we are on a two's complement machine */ - temp2--; - } - - /* Find the number of bits needed for the magnitude of the coefficient */ - nbits = 0; - while (temp) { - nbits++; - temp >>= 1; - } - /* Check for out-of-range coefficient values. - * Since we're encoding a difference, the range limit is twice as much. - */ - if (nbits > MAX_COEF_BITS+1) - ERREXIT(state->cinfo, JERR_BAD_DCT_COEF); - - /* Emit the Huffman-coded symbol for the number of bits */ - if (! emit_bits(state, dctbl->ehufco[nbits], dctbl->ehufsi[nbits])) - return FALSE; - - /* Emit that number of bits of the value, if positive, */ - /* or the complement of its magnitude, if negative. */ - if (nbits) /* emit_bits rejects calls with size 0 */ - if (! emit_bits(state, (unsigned int) temp2, nbits)) - return FALSE; - - /* Encode the AC coefficients per section F.1.2.2 */ - - r = 0; /* r = run length of zeros */ - - for (k = 1; k < DCTSIZE2; k++) { - if ((temp = block[jpeg_natural_order[k]]) == 0) { - r++; - } else { - /* if run length > 15, must emit special run-length-16 codes (0xF0) */ - while (r > 15) { - if (! emit_bits(state, actbl->ehufco[0xF0], actbl->ehufsi[0xF0])) - return FALSE; - r -= 16; - } - - temp2 = temp; - if (temp < 0) { - temp = -temp; /* temp is abs value of input */ - /* This code assumes we are on a two's complement machine */ - temp2--; - } - - /* Find the number of bits needed for the magnitude of the coefficient */ - nbits = 1; /* there must be at least one 1 bit */ - while ((temp >>= 1)) - nbits++; - /* Check for out-of-range coefficient values */ - if (nbits > MAX_COEF_BITS) - ERREXIT(state->cinfo, JERR_BAD_DCT_COEF); - - /* Emit Huffman symbol for run length / number of bits */ - i = (r << 4) + nbits; - if (! emit_bits(state, actbl->ehufco[i], actbl->ehufsi[i])) - return FALSE; - - /* Emit that number of bits of the value, if positive, */ - /* or the complement of its magnitude, if negative. */ - if (! emit_bits(state, (unsigned int) temp2, nbits)) - return FALSE; - - r = 0; - } - } - - /* If the last coef(s) were zero, emit an end-of-block code */ - if (r > 0) - if (! emit_bits(state, actbl->ehufco[0], actbl->ehufsi[0])) - return FALSE; - - return TRUE; -} - - -/* - * Emit a restart marker & resynchronize predictions. - */ - -LOCAL(boolean) -emit_restart (working_state * state, int restart_num) -{ - int ci; - - if (! flush_bits(state)) - return FALSE; - - emit_byte(state, 0xFF, return FALSE); - emit_byte(state, JPEG_RST0 + restart_num, return FALSE); - - /* Re-initialize DC predictions to 0 */ - for (ci = 0; ci < state->cinfo->comps_in_scan; ci++) - state->cur.last_dc_val[ci] = 0; - - /* The restart counter is not updated until we successfully write the MCU. */ - - return TRUE; -} - - -/* - * Encode and output one MCU's worth of Huffman-compressed coefficients. - */ - -METHODDEF(boolean) -encode_mcu_huff (j_compress_ptr cinfo, JBLOCKROW *MCU_data) -{ - huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - working_state state; - int blkn, ci; - jpeg_component_info * compptr; - - /* Load up working state */ - state.next_output_byte = cinfo->dest->next_output_byte; - state.free_in_buffer = cinfo->dest->free_in_buffer; - ASSIGN_STATE(state.cur, entropy->saved); - state.cinfo = cinfo; - - /* Emit restart marker if needed */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) - if (! emit_restart(&state, entropy->next_restart_num)) - return FALSE; - } - - /* Encode the MCU data blocks */ - for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { - ci = cinfo->MCU_membership[blkn]; - compptr = cinfo->cur_comp_info[ci]; - if (! encode_one_block(&state, - MCU_data[blkn][0], state.cur.last_dc_val[ci], - entropy->dc_derived_tbls[compptr->dc_tbl_no], - entropy->ac_derived_tbls[compptr->ac_tbl_no])) - return FALSE; - /* Update last_dc_val */ - state.cur.last_dc_val[ci] = MCU_data[blkn][0][0]; - } - - /* Completed MCU, so update state */ - cinfo->dest->next_output_byte = state.next_output_byte; - cinfo->dest->free_in_buffer = state.free_in_buffer; - ASSIGN_STATE(entropy->saved, state.cur); - - /* Update restart-interval state too */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) { - entropy->restarts_to_go = cinfo->restart_interval; - entropy->next_restart_num++; - entropy->next_restart_num &= 7; - } - entropy->restarts_to_go--; - } - - return TRUE; -} - - -/* - * Finish up at the end of a Huffman-compressed scan. - */ - -METHODDEF(void) -finish_pass_huff (j_compress_ptr cinfo) -{ - huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - working_state state; - - /* Load up working state ... flush_bits needs it */ - state.next_output_byte = cinfo->dest->next_output_byte; - state.free_in_buffer = cinfo->dest->free_in_buffer; - ASSIGN_STATE(state.cur, entropy->saved); - state.cinfo = cinfo; - - /* Flush out the last data */ - if (! flush_bits(&state)) - ERREXIT(cinfo, JERR_CANT_SUSPEND); - - /* Update state */ - cinfo->dest->next_output_byte = state.next_output_byte; - cinfo->dest->free_in_buffer = state.free_in_buffer; - ASSIGN_STATE(entropy->saved, state.cur); -} - - -/* - * Huffman coding optimization. - * - * We first scan the supplied data and count the number of uses of each symbol - * that is to be Huffman-coded. (This process MUST agree with the code above.) - * Then we build a Huffman coding tree for the observed counts. - * Symbols which are not needed at all for the particular image are not - * assigned any code, which saves space in the DHT marker as well as in - * the compressed data. - */ - -#ifdef ENTROPY_OPT_SUPPORTED - - -/* Process a single block's worth of coefficients */ - -LOCAL(void) -htest_one_block (j_compress_ptr cinfo, JCOEFPTR block, int last_dc_val, - long dc_counts[], long ac_counts[]) -{ - register int temp; - register int nbits; - register int k, r; - - /* Encode the DC coefficient difference per section F.1.2.1 */ - - temp = block[0] - last_dc_val; - if (temp < 0) - temp = -temp; - - /* Find the number of bits needed for the magnitude of the coefficient */ - nbits = 0; - while (temp) { - nbits++; - temp >>= 1; - } - /* Check for out-of-range coefficient values. - * Since we're encoding a difference, the range limit is twice as much. - */ - if (nbits > MAX_COEF_BITS+1) - ERREXIT(cinfo, JERR_BAD_DCT_COEF); - - /* Count the Huffman symbol for the number of bits */ - dc_counts[nbits]++; - - /* Encode the AC coefficients per section F.1.2.2 */ - - r = 0; /* r = run length of zeros */ - - for (k = 1; k < DCTSIZE2; k++) { - if ((temp = block[jpeg_natural_order[k]]) == 0) { - r++; - } else { - /* if run length > 15, must emit special run-length-16 codes (0xF0) */ - while (r > 15) { - ac_counts[0xF0]++; - r -= 16; - } - - /* Find the number of bits needed for the magnitude of the coefficient */ - if (temp < 0) - temp = -temp; - - /* Find the number of bits needed for the magnitude of the coefficient */ - nbits = 1; /* there must be at least one 1 bit */ - while ((temp >>= 1)) - nbits++; - /* Check for out-of-range coefficient values */ - if (nbits > MAX_COEF_BITS) - ERREXIT(cinfo, JERR_BAD_DCT_COEF); - - /* Count Huffman symbol for run length / number of bits */ - ac_counts[(r << 4) + nbits]++; - - r = 0; - } - } - - /* If the last coef(s) were zero, emit an end-of-block code */ - if (r > 0) - ac_counts[0]++; -} - - -/* - * Trial-encode one MCU's worth of Huffman-compressed coefficients. - * No data is actually output, so no suspension return is possible. - */ - -METHODDEF(boolean) -encode_mcu_gather (j_compress_ptr cinfo, JBLOCKROW *MCU_data) -{ - huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - int blkn, ci; - jpeg_component_info * compptr; - - /* Take care of restart intervals if needed */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) { - /* Re-initialize DC predictions to 0 */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) - entropy->saved.last_dc_val[ci] = 0; - /* Update restart state */ - entropy->restarts_to_go = cinfo->restart_interval; - } - entropy->restarts_to_go--; - } - - for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { - ci = cinfo->MCU_membership[blkn]; - compptr = cinfo->cur_comp_info[ci]; - htest_one_block(cinfo, MCU_data[blkn][0], entropy->saved.last_dc_val[ci], - entropy->dc_count_ptrs[compptr->dc_tbl_no], - entropy->ac_count_ptrs[compptr->ac_tbl_no]); - entropy->saved.last_dc_val[ci] = MCU_data[blkn][0][0]; - } - - return TRUE; -} - - -/* - * Generate the best Huffman code table for the given counts, fill htbl. - * Note this is also used by jcphuff.c. - * - * The JPEG standard requires that no symbol be assigned a codeword of all - * one bits (so that padding bits added at the end of a compressed segment - * can't look like a valid code). Because of the canonical ordering of - * codewords, this just means that there must be an unused slot in the - * longest codeword length category. Section K.2 of the JPEG spec suggests - * reserving such a slot by pretending that symbol 256 is a valid symbol - * with count 1. In theory that's not optimal; giving it count zero but - * including it in the symbol set anyway should give a better Huffman code. - * But the theoretically better code actually seems to come out worse in - * practice, because it produces more all-ones bytes (which incur stuffed - * zero bytes in the final file). In any case the difference is tiny. - * - * The JPEG standard requires Huffman codes to be no more than 16 bits long. - * If some symbols have a very small but nonzero probability, the Huffman tree - * must be adjusted to meet the code length restriction. We currently use - * the adjustment method suggested in JPEG section K.2. This method is *not* - * optimal; it may not choose the best possible limited-length code. But - * typically only very-low-frequency symbols will be given less-than-optimal - * lengths, so the code is almost optimal. Experimental comparisons against - * an optimal limited-length-code algorithm indicate that the difference is - * microscopic --- usually less than a hundredth of a percent of total size. - * So the extra complexity of an optimal algorithm doesn't seem worthwhile. - */ - -GLOBAL(void) -jpeg_gen_optimal_table (j_compress_ptr cinfo, JHUFF_TBL * htbl, long freq[]) -{ -#define MAX_CLEN 32 /* assumed maximum initial code length */ - UINT8 bits[MAX_CLEN+1]; /* bits[k] = # of symbols with code length k */ - int codesize[257]; /* codesize[k] = code length of symbol k */ - int others[257]; /* next symbol in current branch of tree */ - int c1, c2; - int p, i, j; - long v; - - /* This algorithm is explained in section K.2 of the JPEG standard */ - - MEMZERO(bits, SIZEOF(bits)); - MEMZERO(codesize, SIZEOF(codesize)); - for (i = 0; i < 257; i++) - others[i] = -1; /* init links to empty */ - - freq[256] = 1; /* make sure 256 has a nonzero count */ - /* Including the pseudo-symbol 256 in the Huffman procedure guarantees - * that no real symbol is given code-value of all ones, because 256 - * will be placed last in the largest codeword category. - */ - - /* Huffman's basic algorithm to assign optimal code lengths to symbols */ - - for (;;) { - /* Find the smallest nonzero frequency, set c1 = its symbol */ - /* In case of ties, take the larger symbol number */ - c1 = -1; - v = 1000000000L; - for (i = 0; i <= 256; i++) { - if (freq[i] && freq[i] <= v) { - v = freq[i]; - c1 = i; - } - } - - /* Find the next smallest nonzero frequency, set c2 = its symbol */ - /* In case of ties, take the larger symbol number */ - c2 = -1; - v = 1000000000L; - for (i = 0; i <= 256; i++) { - if (freq[i] && freq[i] <= v && i != c1) { - v = freq[i]; - c2 = i; - } - } - - /* Done if we've merged everything into one frequency */ - if (c2 < 0) - break; - - /* Else merge the two counts/trees */ - freq[c1] += freq[c2]; - freq[c2] = 0; - - /* Increment the codesize of everything in c1's tree branch */ - codesize[c1]++; - while (others[c1] >= 0) { - c1 = others[c1]; - codesize[c1]++; - } - - others[c1] = c2; /* chain c2 onto c1's tree branch */ - - /* Increment the codesize of everything in c2's tree branch */ - codesize[c2]++; - while (others[c2] >= 0) { - c2 = others[c2]; - codesize[c2]++; - } - } - - /* Now count the number of symbols of each code length */ - for (i = 0; i <= 256; i++) { - if (codesize[i]) { - /* The JPEG standard seems to think that this can't happen, */ - /* but I'm paranoid... */ - if (codesize[i] > MAX_CLEN) - ERREXIT(cinfo, JERR_HUFF_CLEN_OVERFLOW); - - bits[codesize[i]]++; - } - } - - /* JPEG doesn't allow symbols with code lengths over 16 bits, so if the pure - * Huffman procedure assigned any such lengths, we must adjust the coding. - * Here is what the JPEG spec says about how this next bit works: - * Since symbols are paired for the longest Huffman code, the symbols are - * removed from this length category two at a time. The prefix for the pair - * (which is one bit shorter) is allocated to one of the pair; then, - * skipping the BITS entry for that prefix length, a code word from the next - * shortest nonzero BITS entry is converted into a prefix for two code words - * one bit longer. - */ - - for (i = MAX_CLEN; i > 16; i--) { - while (bits[i] > 0) { - j = i - 2; /* find length of new prefix to be used */ - while (bits[j] == 0) - j--; - - bits[i] -= 2; /* remove two symbols */ - bits[i-1]++; /* one goes in this length */ - bits[j+1] += 2; /* two new symbols in this length */ - bits[j]--; /* symbol of this length is now a prefix */ - } - } - - /* Remove the count for the pseudo-symbol 256 from the largest codelength */ - while (bits[i] == 0) /* find largest codelength still in use */ - i--; - bits[i]--; - - /* Return final symbol counts (only for lengths 0..16) */ - MEMCOPY(htbl->bits, bits, SIZEOF(htbl->bits)); - - /* Return a list of the symbols sorted by code length */ - /* It's not real clear to me why we don't need to consider the codelength - * changes made above, but the JPEG spec seems to think this works. - */ - p = 0; - for (i = 1; i <= MAX_CLEN; i++) { - for (j = 0; j <= 255; j++) { - if (codesize[j] == i) { - htbl->huffval[p] = (UINT8) j; - p++; - } - } - } - - /* Set sent_table FALSE so updated table will be written to JPEG file. */ - htbl->sent_table = FALSE; -} - - -/* - * Finish up a statistics-gathering pass and create the new Huffman tables. - */ - -METHODDEF(void) -finish_pass_gather (j_compress_ptr cinfo) -{ - huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - int ci, dctbl, actbl; - jpeg_component_info * compptr; - JHUFF_TBL **htblptr; - boolean did_dc[NUM_HUFF_TBLS]; - boolean did_ac[NUM_HUFF_TBLS]; - - /* It's important not to apply jpeg_gen_optimal_table more than once - * per table, because it clobbers the input frequency counts! - */ - MEMZERO(did_dc, SIZEOF(did_dc)); - MEMZERO(did_ac, SIZEOF(did_ac)); - - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - dctbl = compptr->dc_tbl_no; - actbl = compptr->ac_tbl_no; - if (! did_dc[dctbl]) { - htblptr = & cinfo->dc_huff_tbl_ptrs[dctbl]; - if (*htblptr == NULL) - *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); - jpeg_gen_optimal_table(cinfo, *htblptr, entropy->dc_count_ptrs[dctbl]); - did_dc[dctbl] = TRUE; - } - if (! did_ac[actbl]) { - htblptr = & cinfo->ac_huff_tbl_ptrs[actbl]; - if (*htblptr == NULL) - *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); - jpeg_gen_optimal_table(cinfo, *htblptr, entropy->ac_count_ptrs[actbl]); - did_ac[actbl] = TRUE; - } - } -} - - -#endif /* ENTROPY_OPT_SUPPORTED */ - - -/* - * Module initialization routine for Huffman entropy encoding. - */ - -GLOBAL(void) -jinit_huff_encoder (j_compress_ptr cinfo) -{ - huff_entropy_ptr entropy; - int i; - - entropy = (huff_entropy_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(huff_entropy_encoder)); - cinfo->entropy = (struct jpeg_entropy_encoder *) entropy; - entropy->pub.start_pass = start_pass_huff; - - /* Mark tables unallocated */ - for (i = 0; i < NUM_HUFF_TBLS; i++) { - entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL; -#ifdef ENTROPY_OPT_SUPPORTED - entropy->dc_count_ptrs[i] = entropy->ac_count_ptrs[i] = NULL; -#endif - } -} diff --git a/Build/source/libs/jpeg/jchuff.h b/Build/source/libs/jpeg/jchuff.h deleted file mode 100644 index a9599fc1e6f..00000000000 --- a/Build/source/libs/jpeg/jchuff.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * jchuff.h - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains declarations for Huffman entropy encoding routines - * that are shared between the sequential encoder (jchuff.c) and the - * progressive encoder (jcphuff.c). No other modules need to see these. - */ - -/* The legal range of a DCT coefficient is - * -1024 .. +1023 for 8-bit data; - * -16384 .. +16383 for 12-bit data. - * Hence the magnitude should always fit in 10 or 14 bits respectively. - */ - -#if BITS_IN_JSAMPLE == 8 -#define MAX_COEF_BITS 10 -#else -#define MAX_COEF_BITS 14 -#endif - -/* Derived data constructed for each Huffman table */ - -typedef struct { - unsigned int ehufco[256]; /* code for each symbol */ - char ehufsi[256]; /* length of code for each symbol */ - /* If no code has been allocated for a symbol S, ehufsi[S] contains 0 */ -} c_derived_tbl; - -/* Short forms of external names for systems with brain-damaged linkers. */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jpeg_make_c_derived_tbl jMkCDerived -#define jpeg_gen_optimal_table jGenOptTbl -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - -/* Expand a Huffman table definition into the derived format */ -EXTERN(void) jpeg_make_c_derived_tbl - JPP((j_compress_ptr cinfo, boolean isDC, int tblno, - c_derived_tbl ** pdtbl)); - -/* Generate an optimal table definition given the specified counts */ -EXTERN(void) jpeg_gen_optimal_table - JPP((j_compress_ptr cinfo, JHUFF_TBL * htbl, long freq[])); diff --git a/Build/source/libs/jpeg/jcinit.c b/Build/source/libs/jpeg/jcinit.c deleted file mode 100644 index 5efffe33166..00000000000 --- a/Build/source/libs/jpeg/jcinit.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * jcinit.c - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains initialization logic for the JPEG compressor. - * This routine is in charge of selecting the modules to be executed and - * making an initialization call to each one. - * - * Logically, this code belongs in jcmaster.c. It's split out because - * linking this routine implies linking the entire compression library. - * For a transcoding-only application, we want to be able to use jcmaster.c - * without linking in the whole library. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* - * Master selection of compression modules. - * This is done once at the start of processing an image. We determine - * which modules will be used and give them appropriate initialization calls. - */ - -GLOBAL(void) -jinit_compress_master (j_compress_ptr cinfo) -{ - /* Initialize master control (includes parameter checking/processing) */ - jinit_c_master_control(cinfo, FALSE /* full compression */); - - /* Preprocessing */ - if (! cinfo->raw_data_in) { - jinit_color_converter(cinfo); - jinit_downsampler(cinfo); - jinit_c_prep_controller(cinfo, FALSE /* never need full buffer here */); - } - /* Forward DCT */ - jinit_forward_dct(cinfo); - /* Entropy encoding: either Huffman or arithmetic coding. */ - if (cinfo->arith_code) { - ERREXIT(cinfo, JERR_ARITH_NOTIMPL); - } else { - if (cinfo->progressive_mode) { -#ifdef C_PROGRESSIVE_SUPPORTED - jinit_phuff_encoder(cinfo); -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } else - jinit_huff_encoder(cinfo); - } - - /* Need a full-image coefficient buffer in any multi-pass mode. */ - jinit_c_coef_controller(cinfo, - (boolean) (cinfo->num_scans > 1 || cinfo->optimize_coding)); - jinit_c_main_controller(cinfo, FALSE /* never need full buffer here */); - - jinit_marker_writer(cinfo); - - /* We can now tell the memory manager to allocate virtual arrays. */ - (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); - - /* Write the datastream header (SOI) immediately. - * Frame and scan headers are postponed till later. - * This lets application insert special markers after the SOI. - */ - (*cinfo->marker->write_file_header) (cinfo); -} diff --git a/Build/source/libs/jpeg/jcmainct.c b/Build/source/libs/jpeg/jcmainct.c deleted file mode 100644 index e0279a7e017..00000000000 --- a/Build/source/libs/jpeg/jcmainct.c +++ /dev/null @@ -1,293 +0,0 @@ -/* - * jcmainct.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the main buffer controller for compression. - * The main buffer lies between the pre-processor and the JPEG - * compressor proper; it holds downsampled data in the JPEG colorspace. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Note: currently, there is no operating mode in which a full-image buffer - * is needed at this step. If there were, that mode could not be used with - * "raw data" input, since this module is bypassed in that case. However, - * we've left the code here for possible use in special applications. - */ -#undef FULL_MAIN_BUFFER_SUPPORTED - - -/* Private buffer controller object */ - -typedef struct { - struct jpeg_c_main_controller pub; /* public fields */ - - JDIMENSION cur_iMCU_row; /* number of current iMCU row */ - JDIMENSION rowgroup_ctr; /* counts row groups received in iMCU row */ - boolean suspended; /* remember if we suspended output */ - J_BUF_MODE pass_mode; /* current operating mode */ - - /* If using just a strip buffer, this points to the entire set of buffers - * (we allocate one for each component). In the full-image case, this - * points to the currently accessible strips of the virtual arrays. - */ - JSAMPARRAY buffer[MAX_COMPONENTS]; - -#ifdef FULL_MAIN_BUFFER_SUPPORTED - /* If using full-image storage, this array holds pointers to virtual-array - * control blocks for each component. Unused if not full-image storage. - */ - jvirt_sarray_ptr whole_image[MAX_COMPONENTS]; -#endif -} my_main_controller; - -typedef my_main_controller * my_main_ptr; - - -/* Forward declarations */ -METHODDEF(void) process_data_simple_main - JPP((j_compress_ptr cinfo, JSAMPARRAY input_buf, - JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail)); -#ifdef FULL_MAIN_BUFFER_SUPPORTED -METHODDEF(void) process_data_buffer_main - JPP((j_compress_ptr cinfo, JSAMPARRAY input_buf, - JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail)); -#endif - - -/* - * Initialize for a processing pass. - */ - -METHODDEF(void) -start_pass_main (j_compress_ptr cinfo, J_BUF_MODE pass_mode) -{ - my_main_ptr main = (my_main_ptr) cinfo->main; - - /* Do nothing in raw-data mode. */ - if (cinfo->raw_data_in) - return; - - main->cur_iMCU_row = 0; /* initialize counters */ - main->rowgroup_ctr = 0; - main->suspended = FALSE; - main->pass_mode = pass_mode; /* save mode for use by process_data */ - - switch (pass_mode) { - case JBUF_PASS_THRU: -#ifdef FULL_MAIN_BUFFER_SUPPORTED - if (main->whole_image[0] != NULL) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); -#endif - main->pub.process_data = process_data_simple_main; - break; -#ifdef FULL_MAIN_BUFFER_SUPPORTED - case JBUF_SAVE_SOURCE: - case JBUF_CRANK_DEST: - case JBUF_SAVE_AND_PASS: - if (main->whole_image[0] == NULL) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - main->pub.process_data = process_data_buffer_main; - break; -#endif - default: - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - break; - } -} - - -/* - * Process some data. - * This routine handles the simple pass-through mode, - * where we have only a strip buffer. - */ - -METHODDEF(void) -process_data_simple_main (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, - JDIMENSION in_rows_avail) -{ - my_main_ptr main = (my_main_ptr) cinfo->main; - - while (main->cur_iMCU_row < cinfo->total_iMCU_rows) { - /* Read input data if we haven't filled the main buffer yet */ - if (main->rowgroup_ctr < DCTSIZE) - (*cinfo->prep->pre_process_data) (cinfo, - input_buf, in_row_ctr, in_rows_avail, - main->buffer, &main->rowgroup_ctr, - (JDIMENSION) DCTSIZE); - - /* If we don't have a full iMCU row buffered, return to application for - * more data. Note that preprocessor will always pad to fill the iMCU row - * at the bottom of the image. - */ - if (main->rowgroup_ctr != DCTSIZE) - return; - - /* Send the completed row to the compressor */ - if (! (*cinfo->coef->compress_data) (cinfo, main->buffer)) { - /* If compressor did not consume the whole row, then we must need to - * suspend processing and return to the application. In this situation - * we pretend we didn't yet consume the last input row; otherwise, if - * it happened to be the last row of the image, the application would - * think we were done. - */ - if (! main->suspended) { - (*in_row_ctr)--; - main->suspended = TRUE; - } - return; - } - /* We did finish the row. Undo our little suspension hack if a previous - * call suspended; then mark the main buffer empty. - */ - if (main->suspended) { - (*in_row_ctr)++; - main->suspended = FALSE; - } - main->rowgroup_ctr = 0; - main->cur_iMCU_row++; - } -} - - -#ifdef FULL_MAIN_BUFFER_SUPPORTED - -/* - * Process some data. - * This routine handles all of the modes that use a full-size buffer. - */ - -METHODDEF(void) -process_data_buffer_main (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, - JDIMENSION in_rows_avail) -{ - my_main_ptr main = (my_main_ptr) cinfo->main; - int ci; - jpeg_component_info *compptr; - boolean writing = (main->pass_mode != JBUF_CRANK_DEST); - - while (main->cur_iMCU_row < cinfo->total_iMCU_rows) { - /* Realign the virtual buffers if at the start of an iMCU row. */ - if (main->rowgroup_ctr == 0) { - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - main->buffer[ci] = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, main->whole_image[ci], - main->cur_iMCU_row * (compptr->v_samp_factor * DCTSIZE), - (JDIMENSION) (compptr->v_samp_factor * DCTSIZE), writing); - } - /* In a read pass, pretend we just read some source data. */ - if (! writing) { - *in_row_ctr += cinfo->max_v_samp_factor * DCTSIZE; - main->rowgroup_ctr = DCTSIZE; - } - } - - /* If a write pass, read input data until the current iMCU row is full. */ - /* Note: preprocessor will pad if necessary to fill the last iMCU row. */ - if (writing) { - (*cinfo->prep->pre_process_data) (cinfo, - input_buf, in_row_ctr, in_rows_avail, - main->buffer, &main->rowgroup_ctr, - (JDIMENSION) DCTSIZE); - /* Return to application if we need more data to fill the iMCU row. */ - if (main->rowgroup_ctr < DCTSIZE) - return; - } - - /* Emit data, unless this is a sink-only pass. */ - if (main->pass_mode != JBUF_SAVE_SOURCE) { - if (! (*cinfo->coef->compress_data) (cinfo, main->buffer)) { - /* If compressor did not consume the whole row, then we must need to - * suspend processing and return to the application. In this situation - * we pretend we didn't yet consume the last input row; otherwise, if - * it happened to be the last row of the image, the application would - * think we were done. - */ - if (! main->suspended) { - (*in_row_ctr)--; - main->suspended = TRUE; - } - return; - } - /* We did finish the row. Undo our little suspension hack if a previous - * call suspended; then mark the main buffer empty. - */ - if (main->suspended) { - (*in_row_ctr)++; - main->suspended = FALSE; - } - } - - /* If get here, we are done with this iMCU row. Mark buffer empty. */ - main->rowgroup_ctr = 0; - main->cur_iMCU_row++; - } -} - -#endif /* FULL_MAIN_BUFFER_SUPPORTED */ - - -/* - * Initialize main buffer controller. - */ - -GLOBAL(void) -jinit_c_main_controller (j_compress_ptr cinfo, boolean need_full_buffer) -{ - my_main_ptr main; - int ci; - jpeg_component_info *compptr; - - main = (my_main_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_main_controller)); - cinfo->main = (struct jpeg_c_main_controller *) main; - main->pub.start_pass = start_pass_main; - - /* We don't need to create a buffer in raw-data mode. */ - if (cinfo->raw_data_in) - return; - - /* Create the buffer. It holds downsampled data, so each component - * may be of a different size. - */ - if (need_full_buffer) { -#ifdef FULL_MAIN_BUFFER_SUPPORTED - /* Allocate a full-image virtual array for each component */ - /* Note we pad the bottom to a multiple of the iMCU height */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - main->whole_image[ci] = (*cinfo->mem->request_virt_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, - compptr->width_in_blocks * DCTSIZE, - (JDIMENSION) jround_up((long) compptr->height_in_blocks, - (long) compptr->v_samp_factor) * DCTSIZE, - (JDIMENSION) (compptr->v_samp_factor * DCTSIZE)); - } -#else - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); -#endif - } else { -#ifdef FULL_MAIN_BUFFER_SUPPORTED - main->whole_image[0] = NULL; /* flag for no virtual arrays */ -#endif - /* Allocate a strip buffer for each component */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - main->buffer[ci] = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - compptr->width_in_blocks * DCTSIZE, - (JDIMENSION) (compptr->v_samp_factor * DCTSIZE)); - } - } -} diff --git a/Build/source/libs/jpeg/jcmarker.c b/Build/source/libs/jpeg/jcmarker.c deleted file mode 100644 index 3d1e6c6d524..00000000000 --- a/Build/source/libs/jpeg/jcmarker.c +++ /dev/null @@ -1,664 +0,0 @@ -/* - * jcmarker.c - * - * Copyright (C) 1991-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to write JPEG datastream markers. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -typedef enum { /* JPEG marker codes */ - M_SOF0 = 0xc0, - M_SOF1 = 0xc1, - M_SOF2 = 0xc2, - M_SOF3 = 0xc3, - - M_SOF5 = 0xc5, - M_SOF6 = 0xc6, - M_SOF7 = 0xc7, - - M_JPG = 0xc8, - M_SOF9 = 0xc9, - M_SOF10 = 0xca, - M_SOF11 = 0xcb, - - M_SOF13 = 0xcd, - M_SOF14 = 0xce, - M_SOF15 = 0xcf, - - M_DHT = 0xc4, - - M_DAC = 0xcc, - - M_RST0 = 0xd0, - M_RST1 = 0xd1, - M_RST2 = 0xd2, - M_RST3 = 0xd3, - M_RST4 = 0xd4, - M_RST5 = 0xd5, - M_RST6 = 0xd6, - M_RST7 = 0xd7, - - M_SOI = 0xd8, - M_EOI = 0xd9, - M_SOS = 0xda, - M_DQT = 0xdb, - M_DNL = 0xdc, - M_DRI = 0xdd, - M_DHP = 0xde, - M_EXP = 0xdf, - - M_APP0 = 0xe0, - M_APP1 = 0xe1, - M_APP2 = 0xe2, - M_APP3 = 0xe3, - M_APP4 = 0xe4, - M_APP5 = 0xe5, - M_APP6 = 0xe6, - M_APP7 = 0xe7, - M_APP8 = 0xe8, - M_APP9 = 0xe9, - M_APP10 = 0xea, - M_APP11 = 0xeb, - M_APP12 = 0xec, - M_APP13 = 0xed, - M_APP14 = 0xee, - M_APP15 = 0xef, - - M_JPG0 = 0xf0, - M_JPG13 = 0xfd, - M_COM = 0xfe, - - M_TEM = 0x01, - - M_ERROR = 0x100 -} JPEG_MARKER; - - -/* Private state */ - -typedef struct { - struct jpeg_marker_writer pub; /* public fields */ - - unsigned int last_restart_interval; /* last DRI value emitted; 0 after SOI */ -} my_marker_writer; - -typedef my_marker_writer * my_marker_ptr; - - -/* - * Basic output routines. - * - * Note that we do not support suspension while writing a marker. - * Therefore, an application using suspension must ensure that there is - * enough buffer space for the initial markers (typ. 600-700 bytes) before - * calling jpeg_start_compress, and enough space to write the trailing EOI - * (a few bytes) before calling jpeg_finish_compress. Multipass compression - * modes are not supported at all with suspension, so those two are the only - * points where markers will be written. - */ - -LOCAL(void) -emit_byte (j_compress_ptr cinfo, int val) -/* Emit a byte */ -{ - struct jpeg_destination_mgr * dest = cinfo->dest; - - *(dest->next_output_byte)++ = (JOCTET) val; - if (--dest->free_in_buffer == 0) { - if (! (*dest->empty_output_buffer) (cinfo)) - ERREXIT(cinfo, JERR_CANT_SUSPEND); - } -} - - -LOCAL(void) -emit_marker (j_compress_ptr cinfo, JPEG_MARKER mark) -/* Emit a marker code */ -{ - emit_byte(cinfo, 0xFF); - emit_byte(cinfo, (int) mark); -} - - -LOCAL(void) -emit_2bytes (j_compress_ptr cinfo, int value) -/* Emit a 2-byte integer; these are always MSB first in JPEG files */ -{ - emit_byte(cinfo, (value >> 8) & 0xFF); - emit_byte(cinfo, value & 0xFF); -} - - -/* - * Routines to write specific marker types. - */ - -LOCAL(int) -emit_dqt (j_compress_ptr cinfo, int index) -/* Emit a DQT marker */ -/* Returns the precision used (0 = 8bits, 1 = 16bits) for baseline checking */ -{ - JQUANT_TBL * qtbl = cinfo->quant_tbl_ptrs[index]; - int prec; - int i; - - if (qtbl == NULL) - ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, index); - - prec = 0; - for (i = 0; i < DCTSIZE2; i++) { - if (qtbl->quantval[i] > 255) - prec = 1; - } - - if (! qtbl->sent_table) { - emit_marker(cinfo, M_DQT); - - emit_2bytes(cinfo, prec ? DCTSIZE2*2 + 1 + 2 : DCTSIZE2 + 1 + 2); - - emit_byte(cinfo, index + (prec<<4)); - - for (i = 0; i < DCTSIZE2; i++) { - /* The table entries must be emitted in zigzag order. */ - unsigned int qval = qtbl->quantval[jpeg_natural_order[i]]; - if (prec) - emit_byte(cinfo, (int) (qval >> 8)); - emit_byte(cinfo, (int) (qval & 0xFF)); - } - - qtbl->sent_table = TRUE; - } - - return prec; -} - - -LOCAL(void) -emit_dht (j_compress_ptr cinfo, int index, boolean is_ac) -/* Emit a DHT marker */ -{ - JHUFF_TBL * htbl; - int length, i; - - if (is_ac) { - htbl = cinfo->ac_huff_tbl_ptrs[index]; - index += 0x10; /* output index has AC bit set */ - } else { - htbl = cinfo->dc_huff_tbl_ptrs[index]; - } - - if (htbl == NULL) - ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, index); - - if (! htbl->sent_table) { - emit_marker(cinfo, M_DHT); - - length = 0; - for (i = 1; i <= 16; i++) - length += htbl->bits[i]; - - emit_2bytes(cinfo, length + 2 + 1 + 16); - emit_byte(cinfo, index); - - for (i = 1; i <= 16; i++) - emit_byte(cinfo, htbl->bits[i]); - - for (i = 0; i < length; i++) - emit_byte(cinfo, htbl->huffval[i]); - - htbl->sent_table = TRUE; - } -} - - -LOCAL(void) -emit_dac (j_compress_ptr cinfo) -/* Emit a DAC marker */ -/* Since the useful info is so small, we want to emit all the tables in */ -/* one DAC marker. Therefore this routine does its own scan of the table. */ -{ -#ifdef C_ARITH_CODING_SUPPORTED - char dc_in_use[NUM_ARITH_TBLS]; - char ac_in_use[NUM_ARITH_TBLS]; - int length, i; - jpeg_component_info *compptr; - - for (i = 0; i < NUM_ARITH_TBLS; i++) - dc_in_use[i] = ac_in_use[i] = 0; - - for (i = 0; i < cinfo->comps_in_scan; i++) { - compptr = cinfo->cur_comp_info[i]; - dc_in_use[compptr->dc_tbl_no] = 1; - ac_in_use[compptr->ac_tbl_no] = 1; - } - - length = 0; - for (i = 0; i < NUM_ARITH_TBLS; i++) - length += dc_in_use[i] + ac_in_use[i]; - - emit_marker(cinfo, M_DAC); - - emit_2bytes(cinfo, length*2 + 2); - - for (i = 0; i < NUM_ARITH_TBLS; i++) { - if (dc_in_use[i]) { - emit_byte(cinfo, i); - emit_byte(cinfo, cinfo->arith_dc_L[i] + (cinfo->arith_dc_U[i]<<4)); - } - if (ac_in_use[i]) { - emit_byte(cinfo, i + 0x10); - emit_byte(cinfo, cinfo->arith_ac_K[i]); - } - } -#endif /* C_ARITH_CODING_SUPPORTED */ -} - - -LOCAL(void) -emit_dri (j_compress_ptr cinfo) -/* Emit a DRI marker */ -{ - emit_marker(cinfo, M_DRI); - - emit_2bytes(cinfo, 4); /* fixed length */ - - emit_2bytes(cinfo, (int) cinfo->restart_interval); -} - - -LOCAL(void) -emit_sof (j_compress_ptr cinfo, JPEG_MARKER code) -/* Emit a SOF marker */ -{ - int ci; - jpeg_component_info *compptr; - - emit_marker(cinfo, code); - - emit_2bytes(cinfo, 3 * cinfo->num_components + 2 + 5 + 1); /* length */ - - /* Make sure image isn't bigger than SOF field can handle */ - if ((long) cinfo->image_height > 65535L || - (long) cinfo->image_width > 65535L) - ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) 65535); - - emit_byte(cinfo, cinfo->data_precision); - emit_2bytes(cinfo, (int) cinfo->image_height); - emit_2bytes(cinfo, (int) cinfo->image_width); - - emit_byte(cinfo, cinfo->num_components); - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - emit_byte(cinfo, compptr->component_id); - emit_byte(cinfo, (compptr->h_samp_factor << 4) + compptr->v_samp_factor); - emit_byte(cinfo, compptr->quant_tbl_no); - } -} - - -LOCAL(void) -emit_sos (j_compress_ptr cinfo) -/* Emit a SOS marker */ -{ - int i, td, ta; - jpeg_component_info *compptr; - - emit_marker(cinfo, M_SOS); - - emit_2bytes(cinfo, 2 * cinfo->comps_in_scan + 2 + 1 + 3); /* length */ - - emit_byte(cinfo, cinfo->comps_in_scan); - - for (i = 0; i < cinfo->comps_in_scan; i++) { - compptr = cinfo->cur_comp_info[i]; - emit_byte(cinfo, compptr->component_id); - td = compptr->dc_tbl_no; - ta = compptr->ac_tbl_no; - if (cinfo->progressive_mode) { - /* Progressive mode: only DC or only AC tables are used in one scan; - * furthermore, Huffman coding of DC refinement uses no table at all. - * We emit 0 for unused field(s); this is recommended by the P&M text - * but does not seem to be specified in the standard. - */ - if (cinfo->Ss == 0) { - ta = 0; /* DC scan */ - if (cinfo->Ah != 0 && !cinfo->arith_code) - td = 0; /* no DC table either */ - } else { - td = 0; /* AC scan */ - } - } - emit_byte(cinfo, (td << 4) + ta); - } - - emit_byte(cinfo, cinfo->Ss); - emit_byte(cinfo, cinfo->Se); - emit_byte(cinfo, (cinfo->Ah << 4) + cinfo->Al); -} - - -LOCAL(void) -emit_jfif_app0 (j_compress_ptr cinfo) -/* Emit a JFIF-compliant APP0 marker */ -{ - /* - * Length of APP0 block (2 bytes) - * Block ID (4 bytes - ASCII "JFIF") - * Zero byte (1 byte to terminate the ID string) - * Version Major, Minor (2 bytes - major first) - * Units (1 byte - 0x00 = none, 0x01 = inch, 0x02 = cm) - * Xdpu (2 bytes - dots per unit horizontal) - * Ydpu (2 bytes - dots per unit vertical) - * Thumbnail X size (1 byte) - * Thumbnail Y size (1 byte) - */ - - emit_marker(cinfo, M_APP0); - - emit_2bytes(cinfo, 2 + 4 + 1 + 2 + 1 + 2 + 2 + 1 + 1); /* length */ - - emit_byte(cinfo, 0x4A); /* Identifier: ASCII "JFIF" */ - emit_byte(cinfo, 0x46); - emit_byte(cinfo, 0x49); - emit_byte(cinfo, 0x46); - emit_byte(cinfo, 0); - emit_byte(cinfo, cinfo->JFIF_major_version); /* Version fields */ - emit_byte(cinfo, cinfo->JFIF_minor_version); - emit_byte(cinfo, cinfo->density_unit); /* Pixel size information */ - emit_2bytes(cinfo, (int) cinfo->X_density); - emit_2bytes(cinfo, (int) cinfo->Y_density); - emit_byte(cinfo, 0); /* No thumbnail image */ - emit_byte(cinfo, 0); -} - - -LOCAL(void) -emit_adobe_app14 (j_compress_ptr cinfo) -/* Emit an Adobe APP14 marker */ -{ - /* - * Length of APP14 block (2 bytes) - * Block ID (5 bytes - ASCII "Adobe") - * Version Number (2 bytes - currently 100) - * Flags0 (2 bytes - currently 0) - * Flags1 (2 bytes - currently 0) - * Color transform (1 byte) - * - * Although Adobe TN 5116 mentions Version = 101, all the Adobe files - * now in circulation seem to use Version = 100, so that's what we write. - * - * We write the color transform byte as 1 if the JPEG color space is - * YCbCr, 2 if it's YCCK, 0 otherwise. Adobe's definition has to do with - * whether the encoder performed a transformation, which is pretty useless. - */ - - emit_marker(cinfo, M_APP14); - - emit_2bytes(cinfo, 2 + 5 + 2 + 2 + 2 + 1); /* length */ - - emit_byte(cinfo, 0x41); /* Identifier: ASCII "Adobe" */ - emit_byte(cinfo, 0x64); - emit_byte(cinfo, 0x6F); - emit_byte(cinfo, 0x62); - emit_byte(cinfo, 0x65); - emit_2bytes(cinfo, 100); /* Version */ - emit_2bytes(cinfo, 0); /* Flags0 */ - emit_2bytes(cinfo, 0); /* Flags1 */ - switch (cinfo->jpeg_color_space) { - case JCS_YCbCr: - emit_byte(cinfo, 1); /* Color transform = 1 */ - break; - case JCS_YCCK: - emit_byte(cinfo, 2); /* Color transform = 2 */ - break; - default: - emit_byte(cinfo, 0); /* Color transform = 0 */ - break; - } -} - - -/* - * These routines allow writing an arbitrary marker with parameters. - * The only intended use is to emit COM or APPn markers after calling - * write_file_header and before calling write_frame_header. - * Other uses are not guaranteed to produce desirable results. - * Counting the parameter bytes properly is the caller's responsibility. - */ - -METHODDEF(void) -write_marker_header (j_compress_ptr cinfo, int marker, unsigned int datalen) -/* Emit an arbitrary marker header */ -{ - if (datalen > (unsigned int) 65533) /* safety check */ - ERREXIT(cinfo, JERR_BAD_LENGTH); - - emit_marker(cinfo, (JPEG_MARKER) marker); - - emit_2bytes(cinfo, (int) (datalen + 2)); /* total length */ -} - -METHODDEF(void) -write_marker_byte (j_compress_ptr cinfo, int val) -/* Emit one byte of marker parameters following write_marker_header */ -{ - emit_byte(cinfo, val); -} - - -/* - * Write datastream header. - * This consists of an SOI and optional APPn markers. - * We recommend use of the JFIF marker, but not the Adobe marker, - * when using YCbCr or grayscale data. The JFIF marker should NOT - * be used for any other JPEG colorspace. The Adobe marker is helpful - * to distinguish RGB, CMYK, and YCCK colorspaces. - * Note that an application can write additional header markers after - * jpeg_start_compress returns. - */ - -METHODDEF(void) -write_file_header (j_compress_ptr cinfo) -{ - my_marker_ptr marker = (my_marker_ptr) cinfo->marker; - - emit_marker(cinfo, M_SOI); /* first the SOI */ - - /* SOI is defined to reset restart interval to 0 */ - marker->last_restart_interval = 0; - - if (cinfo->write_JFIF_header) /* next an optional JFIF APP0 */ - emit_jfif_app0(cinfo); - if (cinfo->write_Adobe_marker) /* next an optional Adobe APP14 */ - emit_adobe_app14(cinfo); -} - - -/* - * Write frame header. - * This consists of DQT and SOFn markers. - * Note that we do not emit the SOF until we have emitted the DQT(s). - * This avoids compatibility problems with incorrect implementations that - * try to error-check the quant table numbers as soon as they see the SOF. - */ - -METHODDEF(void) -write_frame_header (j_compress_ptr cinfo) -{ - int ci, prec; - boolean is_baseline; - jpeg_component_info *compptr; - - /* Emit DQT for each quantization table. - * Note that emit_dqt() suppresses any duplicate tables. - */ - prec = 0; - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - prec += emit_dqt(cinfo, compptr->quant_tbl_no); - } - /* now prec is nonzero iff there are any 16-bit quant tables. */ - - /* Check for a non-baseline specification. - * Note we assume that Huffman table numbers won't be changed later. - */ - if (cinfo->arith_code || cinfo->progressive_mode || - cinfo->data_precision != 8) { - is_baseline = FALSE; - } else { - is_baseline = TRUE; - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - if (compptr->dc_tbl_no > 1 || compptr->ac_tbl_no > 1) - is_baseline = FALSE; - } - if (prec && is_baseline) { - is_baseline = FALSE; - /* If it's baseline except for quantizer size, warn the user */ - TRACEMS(cinfo, 0, JTRC_16BIT_TABLES); - } - } - - /* Emit the proper SOF marker */ - if (cinfo->arith_code) { - emit_sof(cinfo, M_SOF9); /* SOF code for arithmetic coding */ - } else { - if (cinfo->progressive_mode) - emit_sof(cinfo, M_SOF2); /* SOF code for progressive Huffman */ - else if (is_baseline) - emit_sof(cinfo, M_SOF0); /* SOF code for baseline implementation */ - else - emit_sof(cinfo, M_SOF1); /* SOF code for non-baseline Huffman file */ - } -} - - -/* - * Write scan header. - * This consists of DHT or DAC markers, optional DRI, and SOS. - * Compressed data will be written following the SOS. - */ - -METHODDEF(void) -write_scan_header (j_compress_ptr cinfo) -{ - my_marker_ptr marker = (my_marker_ptr) cinfo->marker; - int i; - jpeg_component_info *compptr; - - if (cinfo->arith_code) { - /* Emit arith conditioning info. We may have some duplication - * if the file has multiple scans, but it's so small it's hardly - * worth worrying about. - */ - emit_dac(cinfo); - } else { - /* Emit Huffman tables. - * Note that emit_dht() suppresses any duplicate tables. - */ - for (i = 0; i < cinfo->comps_in_scan; i++) { - compptr = cinfo->cur_comp_info[i]; - if (cinfo->progressive_mode) { - /* Progressive mode: only DC or only AC tables are used in one scan */ - if (cinfo->Ss == 0) { - if (cinfo->Ah == 0) /* DC needs no table for refinement scan */ - emit_dht(cinfo, compptr->dc_tbl_no, FALSE); - } else { - emit_dht(cinfo, compptr->ac_tbl_no, TRUE); - } - } else { - /* Sequential mode: need both DC and AC tables */ - emit_dht(cinfo, compptr->dc_tbl_no, FALSE); - emit_dht(cinfo, compptr->ac_tbl_no, TRUE); - } - } - } - - /* Emit DRI if required --- note that DRI value could change for each scan. - * We avoid wasting space with unnecessary DRIs, however. - */ - if (cinfo->restart_interval != marker->last_restart_interval) { - emit_dri(cinfo); - marker->last_restart_interval = cinfo->restart_interval; - } - - emit_sos(cinfo); -} - - -/* - * Write datastream trailer. - */ - -METHODDEF(void) -write_file_trailer (j_compress_ptr cinfo) -{ - emit_marker(cinfo, M_EOI); -} - - -/* - * Write an abbreviated table-specification datastream. - * This consists of SOI, DQT and DHT tables, and EOI. - * Any table that is defined and not marked sent_table = TRUE will be - * emitted. Note that all tables will be marked sent_table = TRUE at exit. - */ - -METHODDEF(void) -write_tables_only (j_compress_ptr cinfo) -{ - int i; - - emit_marker(cinfo, M_SOI); - - for (i = 0; i < NUM_QUANT_TBLS; i++) { - if (cinfo->quant_tbl_ptrs[i] != NULL) - (void) emit_dqt(cinfo, i); - } - - if (! cinfo->arith_code) { - for (i = 0; i < NUM_HUFF_TBLS; i++) { - if (cinfo->dc_huff_tbl_ptrs[i] != NULL) - emit_dht(cinfo, i, FALSE); - if (cinfo->ac_huff_tbl_ptrs[i] != NULL) - emit_dht(cinfo, i, TRUE); - } - } - - emit_marker(cinfo, M_EOI); -} - - -/* - * Initialize the marker writer module. - */ - -GLOBAL(void) -jinit_marker_writer (j_compress_ptr cinfo) -{ - my_marker_ptr marker; - - /* Create the subobject */ - marker = (my_marker_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_marker_writer)); - cinfo->marker = (struct jpeg_marker_writer *) marker; - /* Initialize method pointers */ - marker->pub.write_file_header = write_file_header; - marker->pub.write_frame_header = write_frame_header; - marker->pub.write_scan_header = write_scan_header; - marker->pub.write_file_trailer = write_file_trailer; - marker->pub.write_tables_only = write_tables_only; - marker->pub.write_marker_header = write_marker_header; - marker->pub.write_marker_byte = write_marker_byte; - /* Initialize private state */ - marker->last_restart_interval = 0; -} diff --git a/Build/source/libs/jpeg/jcmaster.c b/Build/source/libs/jpeg/jcmaster.c deleted file mode 100644 index aab4020b879..00000000000 --- a/Build/source/libs/jpeg/jcmaster.c +++ /dev/null @@ -1,590 +0,0 @@ -/* - * jcmaster.c - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains master control logic for the JPEG compressor. - * These routines are concerned with parameter validation, initial setup, - * and inter-pass control (determining the number of passes and the work - * to be done in each pass). - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Private state */ - -typedef enum { - main_pass, /* input data, also do first output step */ - huff_opt_pass, /* Huffman code optimization pass */ - output_pass /* data output pass */ -} c_pass_type; - -typedef struct { - struct jpeg_comp_master pub; /* public fields */ - - c_pass_type pass_type; /* the type of the current pass */ - - int pass_number; /* # of passes completed */ - int total_passes; /* total # of passes needed */ - - int scan_number; /* current index in scan_info[] */ -} my_comp_master; - -typedef my_comp_master * my_master_ptr; - - -/* - * Support routines that do various essential calculations. - */ - -LOCAL(void) -initial_setup (j_compress_ptr cinfo) -/* Do computations that are needed before master selection phase */ -{ - int ci; - jpeg_component_info *compptr; - long samplesperrow; - JDIMENSION jd_samplesperrow; - - /* Sanity check on image dimensions */ - if (cinfo->image_height <= 0 || cinfo->image_width <= 0 - || cinfo->num_components <= 0 || cinfo->input_components <= 0) - ERREXIT(cinfo, JERR_EMPTY_IMAGE); - - /* Make sure image isn't bigger than I can handle */ - if ((long) cinfo->image_height > (long) JPEG_MAX_DIMENSION || - (long) cinfo->image_width > (long) JPEG_MAX_DIMENSION) - ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION); - - /* Width of an input scanline must be representable as JDIMENSION. */ - samplesperrow = (long) cinfo->image_width * (long) cinfo->input_components; - jd_samplesperrow = (JDIMENSION) samplesperrow; - if ((long) jd_samplesperrow != samplesperrow) - ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); - - /* For now, precision must match compiled-in value... */ - if (cinfo->data_precision != BITS_IN_JSAMPLE) - ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); - - /* Check that number of components won't exceed internal array sizes */ - if (cinfo->num_components > MAX_COMPONENTS) - ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, - MAX_COMPONENTS); - - /* Compute maximum sampling factors; check factor validity */ - cinfo->max_h_samp_factor = 1; - cinfo->max_v_samp_factor = 1; - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR || - compptr->v_samp_factor<=0 || compptr->v_samp_factor>MAX_SAMP_FACTOR) - ERREXIT(cinfo, JERR_BAD_SAMPLING); - cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor, - compptr->h_samp_factor); - cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor, - compptr->v_samp_factor); - } - - /* Compute dimensions of components */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* Fill in the correct component_index value; don't rely on application */ - compptr->component_index = ci; - /* For compression, we never do DCT scaling. */ - compptr->DCT_scaled_size = DCTSIZE; - /* Size in DCT blocks */ - compptr->width_in_blocks = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, - (long) (cinfo->max_h_samp_factor * DCTSIZE)); - compptr->height_in_blocks = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, - (long) (cinfo->max_v_samp_factor * DCTSIZE)); - /* Size in samples */ - compptr->downsampled_width = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, - (long) cinfo->max_h_samp_factor); - compptr->downsampled_height = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, - (long) cinfo->max_v_samp_factor); - /* Mark component needed (this flag isn't actually used for compression) */ - compptr->component_needed = TRUE; - } - - /* Compute number of fully interleaved MCU rows (number of times that - * main controller will call coefficient controller). - */ - cinfo->total_iMCU_rows = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height, - (long) (cinfo->max_v_samp_factor*DCTSIZE)); -} - - -#ifdef C_MULTISCAN_FILES_SUPPORTED - -LOCAL(void) -validate_script (j_compress_ptr cinfo) -/* Verify that the scan script in cinfo->scan_info[] is valid; also - * determine whether it uses progressive JPEG, and set cinfo->progressive_mode. - */ -{ - const jpeg_scan_info * scanptr; - int scanno, ncomps, ci, coefi, thisi; - int Ss, Se, Ah, Al; - boolean component_sent[MAX_COMPONENTS]; -#ifdef C_PROGRESSIVE_SUPPORTED - int * last_bitpos_ptr; - int last_bitpos[MAX_COMPONENTS][DCTSIZE2]; - /* -1 until that coefficient has been seen; then last Al for it */ -#endif - - if (cinfo->num_scans <= 0) - ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, 0); - - /* For sequential JPEG, all scans must have Ss=0, Se=DCTSIZE2-1; - * for progressive JPEG, no scan can have this. - */ - scanptr = cinfo->scan_info; - if (scanptr->Ss != 0 || scanptr->Se != DCTSIZE2-1) { -#ifdef C_PROGRESSIVE_SUPPORTED - cinfo->progressive_mode = TRUE; - last_bitpos_ptr = & last_bitpos[0][0]; - for (ci = 0; ci < cinfo->num_components; ci++) - for (coefi = 0; coefi < DCTSIZE2; coefi++) - *last_bitpos_ptr++ = -1; -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } else { - cinfo->progressive_mode = FALSE; - for (ci = 0; ci < cinfo->num_components; ci++) - component_sent[ci] = FALSE; - } - - for (scanno = 1; scanno <= cinfo->num_scans; scanptr++, scanno++) { - /* Validate component indexes */ - ncomps = scanptr->comps_in_scan; - if (ncomps <= 0 || ncomps > MAX_COMPS_IN_SCAN) - ERREXIT2(cinfo, JERR_COMPONENT_COUNT, ncomps, MAX_COMPS_IN_SCAN); - for (ci = 0; ci < ncomps; ci++) { - thisi = scanptr->component_index[ci]; - if (thisi < 0 || thisi >= cinfo->num_components) - ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno); - /* Components must appear in SOF order within each scan */ - if (ci > 0 && thisi <= scanptr->component_index[ci-1]) - ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno); - } - /* Validate progression parameters */ - Ss = scanptr->Ss; - Se = scanptr->Se; - Ah = scanptr->Ah; - Al = scanptr->Al; - if (cinfo->progressive_mode) { -#ifdef C_PROGRESSIVE_SUPPORTED - /* The JPEG spec simply gives the ranges 0..13 for Ah and Al, but that - * seems wrong: the upper bound ought to depend on data precision. - * Perhaps they really meant 0..N+1 for N-bit precision. - * Here we allow 0..10 for 8-bit data; Al larger than 10 results in - * out-of-range reconstructed DC values during the first DC scan, - * which might cause problems for some decoders. - */ -#if BITS_IN_JSAMPLE == 8 -#define MAX_AH_AL 10 -#else -#define MAX_AH_AL 13 -#endif - if (Ss < 0 || Ss >= DCTSIZE2 || Se < Ss || Se >= DCTSIZE2 || - Ah < 0 || Ah > MAX_AH_AL || Al < 0 || Al > MAX_AH_AL) - ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); - if (Ss == 0) { - if (Se != 0) /* DC and AC together not OK */ - ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); - } else { - if (ncomps != 1) /* AC scans must be for only one component */ - ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); - } - for (ci = 0; ci < ncomps; ci++) { - last_bitpos_ptr = & last_bitpos[scanptr->component_index[ci]][0]; - if (Ss != 0 && last_bitpos_ptr[0] < 0) /* AC without prior DC scan */ - ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); - for (coefi = Ss; coefi <= Se; coefi++) { - if (last_bitpos_ptr[coefi] < 0) { - /* first scan of this coefficient */ - if (Ah != 0) - ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); - } else { - /* not first scan */ - if (Ah != last_bitpos_ptr[coefi] || Al != Ah-1) - ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); - } - last_bitpos_ptr[coefi] = Al; - } - } -#endif - } else { - /* For sequential JPEG, all progression parameters must be these: */ - if (Ss != 0 || Se != DCTSIZE2-1 || Ah != 0 || Al != 0) - ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno); - /* Make sure components are not sent twice */ - for (ci = 0; ci < ncomps; ci++) { - thisi = scanptr->component_index[ci]; - if (component_sent[thisi]) - ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno); - component_sent[thisi] = TRUE; - } - } - } - - /* Now verify that everything got sent. */ - if (cinfo->progressive_mode) { -#ifdef C_PROGRESSIVE_SUPPORTED - /* For progressive mode, we only check that at least some DC data - * got sent for each component; the spec does not require that all bits - * of all coefficients be transmitted. Would it be wiser to enforce - * transmission of all coefficient bits?? - */ - for (ci = 0; ci < cinfo->num_components; ci++) { - if (last_bitpos[ci][0] < 0) - ERREXIT(cinfo, JERR_MISSING_DATA); - } -#endif - } else { - for (ci = 0; ci < cinfo->num_components; ci++) { - if (! component_sent[ci]) - ERREXIT(cinfo, JERR_MISSING_DATA); - } - } -} - -#endif /* C_MULTISCAN_FILES_SUPPORTED */ - - -LOCAL(void) -select_scan_parameters (j_compress_ptr cinfo) -/* Set up the scan parameters for the current scan */ -{ - int ci; - -#ifdef C_MULTISCAN_FILES_SUPPORTED - if (cinfo->scan_info != NULL) { - /* Prepare for current scan --- the script is already validated */ - my_master_ptr master = (my_master_ptr) cinfo->master; - const jpeg_scan_info * scanptr = cinfo->scan_info + master->scan_number; - - cinfo->comps_in_scan = scanptr->comps_in_scan; - for (ci = 0; ci < scanptr->comps_in_scan; ci++) { - cinfo->cur_comp_info[ci] = - &cinfo->comp_info[scanptr->component_index[ci]]; - } - cinfo->Ss = scanptr->Ss; - cinfo->Se = scanptr->Se; - cinfo->Ah = scanptr->Ah; - cinfo->Al = scanptr->Al; - } - else -#endif - { - /* Prepare for single sequential-JPEG scan containing all components */ - if (cinfo->num_components > MAX_COMPS_IN_SCAN) - ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, - MAX_COMPS_IN_SCAN); - cinfo->comps_in_scan = cinfo->num_components; - for (ci = 0; ci < cinfo->num_components; ci++) { - cinfo->cur_comp_info[ci] = &cinfo->comp_info[ci]; - } - cinfo->Ss = 0; - cinfo->Se = DCTSIZE2-1; - cinfo->Ah = 0; - cinfo->Al = 0; - } -} - - -LOCAL(void) -per_scan_setup (j_compress_ptr cinfo) -/* Do computations that are needed before processing a JPEG scan */ -/* cinfo->comps_in_scan and cinfo->cur_comp_info[] are already set */ -{ - int ci, mcublks, tmp; - jpeg_component_info *compptr; - - if (cinfo->comps_in_scan == 1) { - - /* Noninterleaved (single-component) scan */ - compptr = cinfo->cur_comp_info[0]; - - /* Overall image size in MCUs */ - cinfo->MCUs_per_row = compptr->width_in_blocks; - cinfo->MCU_rows_in_scan = compptr->height_in_blocks; - - /* For noninterleaved scan, always one block per MCU */ - compptr->MCU_width = 1; - compptr->MCU_height = 1; - compptr->MCU_blocks = 1; - compptr->MCU_sample_width = DCTSIZE; - compptr->last_col_width = 1; - /* For noninterleaved scans, it is convenient to define last_row_height - * as the number of block rows present in the last iMCU row. - */ - tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor); - if (tmp == 0) tmp = compptr->v_samp_factor; - compptr->last_row_height = tmp; - - /* Prepare array describing MCU composition */ - cinfo->blocks_in_MCU = 1; - cinfo->MCU_membership[0] = 0; - - } else { - - /* Interleaved (multi-component) scan */ - if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN) - ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan, - MAX_COMPS_IN_SCAN); - - /* Overall image size in MCUs */ - cinfo->MCUs_per_row = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width, - (long) (cinfo->max_h_samp_factor*DCTSIZE)); - cinfo->MCU_rows_in_scan = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height, - (long) (cinfo->max_v_samp_factor*DCTSIZE)); - - cinfo->blocks_in_MCU = 0; - - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - /* Sampling factors give # of blocks of component in each MCU */ - compptr->MCU_width = compptr->h_samp_factor; - compptr->MCU_height = compptr->v_samp_factor; - compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height; - compptr->MCU_sample_width = compptr->MCU_width * DCTSIZE; - /* Figure number of non-dummy blocks in last MCU column & row */ - tmp = (int) (compptr->width_in_blocks % compptr->MCU_width); - if (tmp == 0) tmp = compptr->MCU_width; - compptr->last_col_width = tmp; - tmp = (int) (compptr->height_in_blocks % compptr->MCU_height); - if (tmp == 0) tmp = compptr->MCU_height; - compptr->last_row_height = tmp; - /* Prepare array describing MCU composition */ - mcublks = compptr->MCU_blocks; - if (cinfo->blocks_in_MCU + mcublks > C_MAX_BLOCKS_IN_MCU) - ERREXIT(cinfo, JERR_BAD_MCU_SIZE); - while (mcublks-- > 0) { - cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci; - } - } - - } - - /* Convert restart specified in rows to actual MCU count. */ - /* Note that count must fit in 16 bits, so we provide limiting. */ - if (cinfo->restart_in_rows > 0) { - long nominal = (long) cinfo->restart_in_rows * (long) cinfo->MCUs_per_row; - cinfo->restart_interval = (unsigned int) MIN(nominal, 65535L); - } -} - - -/* - * Per-pass setup. - * This is called at the beginning of each pass. We determine which modules - * will be active during this pass and give them appropriate start_pass calls. - * We also set is_last_pass to indicate whether any more passes will be - * required. - */ - -METHODDEF(void) -prepare_for_pass (j_compress_ptr cinfo) -{ - my_master_ptr master = (my_master_ptr) cinfo->master; - - switch (master->pass_type) { - case main_pass: - /* Initial pass: will collect input data, and do either Huffman - * optimization or data output for the first scan. - */ - select_scan_parameters(cinfo); - per_scan_setup(cinfo); - if (! cinfo->raw_data_in) { - (*cinfo->cconvert->start_pass) (cinfo); - (*cinfo->downsample->start_pass) (cinfo); - (*cinfo->prep->start_pass) (cinfo, JBUF_PASS_THRU); - } - (*cinfo->fdct->start_pass) (cinfo); - (*cinfo->entropy->start_pass) (cinfo, cinfo->optimize_coding); - (*cinfo->coef->start_pass) (cinfo, - (master->total_passes > 1 ? - JBUF_SAVE_AND_PASS : JBUF_PASS_THRU)); - (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); - if (cinfo->optimize_coding) { - /* No immediate data output; postpone writing frame/scan headers */ - master->pub.call_pass_startup = FALSE; - } else { - /* Will write frame/scan headers at first jpeg_write_scanlines call */ - master->pub.call_pass_startup = TRUE; - } - break; -#ifdef ENTROPY_OPT_SUPPORTED - case huff_opt_pass: - /* Do Huffman optimization for a scan after the first one. */ - select_scan_parameters(cinfo); - per_scan_setup(cinfo); - if (cinfo->Ss != 0 || cinfo->Ah == 0 || cinfo->arith_code) { - (*cinfo->entropy->start_pass) (cinfo, TRUE); - (*cinfo->coef->start_pass) (cinfo, JBUF_CRANK_DEST); - master->pub.call_pass_startup = FALSE; - break; - } - /* Special case: Huffman DC refinement scans need no Huffman table - * and therefore we can skip the optimization pass for them. - */ - master->pass_type = output_pass; - master->pass_number++; - /*FALLTHROUGH*/ -#endif - case output_pass: - /* Do a data-output pass. */ - /* We need not repeat per-scan setup if prior optimization pass did it. */ - if (! cinfo->optimize_coding) { - select_scan_parameters(cinfo); - per_scan_setup(cinfo); - } - (*cinfo->entropy->start_pass) (cinfo, FALSE); - (*cinfo->coef->start_pass) (cinfo, JBUF_CRANK_DEST); - /* We emit frame/scan headers now */ - if (master->scan_number == 0) - (*cinfo->marker->write_frame_header) (cinfo); - (*cinfo->marker->write_scan_header) (cinfo); - master->pub.call_pass_startup = FALSE; - break; - default: - ERREXIT(cinfo, JERR_NOT_COMPILED); - } - - master->pub.is_last_pass = (master->pass_number == master->total_passes-1); - - /* Set up progress monitor's pass info if present */ - if (cinfo->progress != NULL) { - cinfo->progress->completed_passes = master->pass_number; - cinfo->progress->total_passes = master->total_passes; - } -} - - -/* - * Special start-of-pass hook. - * This is called by jpeg_write_scanlines if call_pass_startup is TRUE. - * In single-pass processing, we need this hook because we don't want to - * write frame/scan headers during jpeg_start_compress; we want to let the - * application write COM markers etc. between jpeg_start_compress and the - * jpeg_write_scanlines loop. - * In multi-pass processing, this routine is not used. - */ - -METHODDEF(void) -pass_startup (j_compress_ptr cinfo) -{ - cinfo->master->call_pass_startup = FALSE; /* reset flag so call only once */ - - (*cinfo->marker->write_frame_header) (cinfo); - (*cinfo->marker->write_scan_header) (cinfo); -} - - -/* - * Finish up at end of pass. - */ - -METHODDEF(void) -finish_pass_master (j_compress_ptr cinfo) -{ - my_master_ptr master = (my_master_ptr) cinfo->master; - - /* The entropy coder always needs an end-of-pass call, - * either to analyze statistics or to flush its output buffer. - */ - (*cinfo->entropy->finish_pass) (cinfo); - - /* Update state for next pass */ - switch (master->pass_type) { - case main_pass: - /* next pass is either output of scan 0 (after optimization) - * or output of scan 1 (if no optimization). - */ - master->pass_type = output_pass; - if (! cinfo->optimize_coding) - master->scan_number++; - break; - case huff_opt_pass: - /* next pass is always output of current scan */ - master->pass_type = output_pass; - break; - case output_pass: - /* next pass is either optimization or output of next scan */ - if (cinfo->optimize_coding) - master->pass_type = huff_opt_pass; - master->scan_number++; - break; - } - - master->pass_number++; -} - - -/* - * Initialize master compression control. - */ - -GLOBAL(void) -jinit_c_master_control (j_compress_ptr cinfo, boolean transcode_only) -{ - my_master_ptr master; - - master = (my_master_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_comp_master)); - cinfo->master = (struct jpeg_comp_master *) master; - master->pub.prepare_for_pass = prepare_for_pass; - master->pub.pass_startup = pass_startup; - master->pub.finish_pass = finish_pass_master; - master->pub.is_last_pass = FALSE; - - /* Validate parameters, determine derived values */ - initial_setup(cinfo); - - if (cinfo->scan_info != NULL) { -#ifdef C_MULTISCAN_FILES_SUPPORTED - validate_script(cinfo); -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } else { - cinfo->progressive_mode = FALSE; - cinfo->num_scans = 1; - } - - if (cinfo->progressive_mode) /* TEMPORARY HACK ??? */ - cinfo->optimize_coding = TRUE; /* assume default tables no good for progressive mode */ - - /* Initialize my private state */ - if (transcode_only) { - /* no main pass in transcoding */ - if (cinfo->optimize_coding) - master->pass_type = huff_opt_pass; - else - master->pass_type = output_pass; - } else { - /* for normal compression, first pass is always this type: */ - master->pass_type = main_pass; - } - master->scan_number = 0; - master->pass_number = 0; - if (cinfo->optimize_coding) - master->total_passes = cinfo->num_scans * 2; - else - master->total_passes = cinfo->num_scans; -} diff --git a/Build/source/libs/jpeg/jcomapi.c b/Build/source/libs/jpeg/jcomapi.c deleted file mode 100644 index 9b1fa7568a6..00000000000 --- a/Build/source/libs/jpeg/jcomapi.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * jcomapi.c - * - * Copyright (C) 1994-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains application interface routines that are used for both - * compression and decompression. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* - * Abort processing of a JPEG compression or decompression operation, - * but don't destroy the object itself. - * - * For this, we merely clean up all the nonpermanent memory pools. - * Note that temp files (virtual arrays) are not allowed to belong to - * the permanent pool, so we will be able to close all temp files here. - * Closing a data source or destination, if necessary, is the application's - * responsibility. - */ - -GLOBAL(void) -jpeg_abort (j_common_ptr cinfo) -{ - int pool; - - /* Do nothing if called on a not-initialized or destroyed JPEG object. */ - if (cinfo->mem == NULL) - return; - - /* Releasing pools in reverse order might help avoid fragmentation - * with some (brain-damaged) malloc libraries. - */ - for (pool = JPOOL_NUMPOOLS-1; pool > JPOOL_PERMANENT; pool--) { - (*cinfo->mem->free_pool) (cinfo, pool); - } - - /* Reset overall state for possible reuse of object */ - if (cinfo->is_decompressor) { - cinfo->global_state = DSTATE_START; - /* Try to keep application from accessing now-deleted marker list. - * A bit kludgy to do it here, but this is the most central place. - */ - ((j_decompress_ptr) cinfo)->marker_list = NULL; - } else { - cinfo->global_state = CSTATE_START; - } -} - - -/* - * Destruction of a JPEG object. - * - * Everything gets deallocated except the master jpeg_compress_struct itself - * and the error manager struct. Both of these are supplied by the application - * and must be freed, if necessary, by the application. (Often they are on - * the stack and so don't need to be freed anyway.) - * Closing a data source or destination, if necessary, is the application's - * responsibility. - */ - -GLOBAL(void) -jpeg_destroy (j_common_ptr cinfo) -{ - /* We need only tell the memory manager to release everything. */ - /* NB: mem pointer is NULL if memory mgr failed to initialize. */ - if (cinfo->mem != NULL) - (*cinfo->mem->self_destruct) (cinfo); - cinfo->mem = NULL; /* be safe if jpeg_destroy is called twice */ - cinfo->global_state = 0; /* mark it destroyed */ -} - - -/* - * Convenience routines for allocating quantization and Huffman tables. - * (Would jutils.c be a more reasonable place to put these?) - */ - -GLOBAL(JQUANT_TBL *) -jpeg_alloc_quant_table (j_common_ptr cinfo) -{ - JQUANT_TBL *tbl; - - tbl = (JQUANT_TBL *) - (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JQUANT_TBL)); - tbl->sent_table = FALSE; /* make sure this is false in any new table */ - return tbl; -} - - -GLOBAL(JHUFF_TBL *) -jpeg_alloc_huff_table (j_common_ptr cinfo) -{ - JHUFF_TBL *tbl; - - tbl = (JHUFF_TBL *) - (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JHUFF_TBL)); - tbl->sent_table = FALSE; /* make sure this is false in any new table */ - return tbl; -} diff --git a/Build/source/libs/jpeg/jconfig.bcc b/Build/source/libs/jpeg/jconfig.bcc deleted file mode 100644 index c6c53ff63a7..00000000000 --- a/Build/source/libs/jpeg/jconfig.bcc +++ /dev/null @@ -1,48 +0,0 @@ -/* jconfig.bcc --- jconfig.h for Borland C (Turbo C) on MS-DOS or OS/2. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#ifdef __MSDOS__ -#define NEED_FAR_POINTERS /* for small or medium memory model */ -#endif -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN /* this assumes you have -w-stu in CFLAGS */ - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#ifdef __MSDOS__ -#define USE_MSDOS_MEMMGR /* Define this if you use jmemdos.c */ -#define MAX_ALLOC_CHUNK 65520L /* Maximum request to malloc() */ -#define USE_FMEM /* Borland has _fmemcpy() and _fmemset() */ -#endif - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE -#define USE_SETMODE /* Borland has setmode() */ -#ifdef __MSDOS__ -#define NEED_SIGNAL_CATCHER /* Define this if you use jmemdos.c */ -#endif -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/libs/jpeg/jconfig.cfg b/Build/source/libs/jpeg/jconfig.cfg deleted file mode 100644 index 36a04fa8402..00000000000 --- a/Build/source/libs/jpeg/jconfig.cfg +++ /dev/null @@ -1,44 +0,0 @@ -/* jconfig.cfg --- source file edited by configure script */ -/* see jconfig.doc for explanations */ - -#undef HAVE_PROTOTYPES -#undef HAVE_UNSIGNED_CHAR -#undef HAVE_UNSIGNED_SHORT -#undef void -#undef const -#undef CHAR_IS_UNSIGNED -#undef HAVE_STDDEF_H -#undef HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS -#undef NEED_SHORT_EXTERNAL_NAMES -/* Define this if you get warnings about undefined structures. */ -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED -#undef INLINE -/* These are for configuring the JPEG memory manager. */ -#undef DEFAULT_MAX_MEM -#undef NO_MKTEMP - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#undef TWO_FILE_COMMANDLINE -#undef NEED_SIGNAL_CATCHER -#undef DONT_USE_B_MODE - -/* Define this if you want percent-done progress reports from cjpeg/djpeg. */ -#undef PROGRESS_REPORT - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/libs/jpeg/jconfig.dj b/Build/source/libs/jpeg/jconfig.dj deleted file mode 100644 index f759a9dbd6b..00000000000 --- a/Build/source/libs/jpeg/jconfig.dj +++ /dev/null @@ -1,38 +0,0 @@ -/* jconfig.dj --- jconfig.h for DJGPP (Delorie's GNU C port) on MS-DOS. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS /* DJGPP uses flat 32-bit addressing */ -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#undef TWO_FILE_COMMANDLINE /* optional */ -#define USE_SETMODE /* Needed to make one-file style work in DJGPP */ -#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */ -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/libs/jpeg/jconfig.doc b/Build/source/libs/jpeg/jconfig.doc deleted file mode 100644 index c18d1c064b7..00000000000 --- a/Build/source/libs/jpeg/jconfig.doc +++ /dev/null @@ -1,155 +0,0 @@ -/* - * jconfig.doc - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file documents the configuration options that are required to - * customize the JPEG software for a particular system. - * - * The actual configuration options for a particular installation are stored - * in jconfig.h. On many machines, jconfig.h can be generated automatically - * or copied from one of the "canned" jconfig files that we supply. But if - * you need to generate a jconfig.h file by hand, this file tells you how. - * - * DO NOT EDIT THIS FILE --- IT WON'T ACCOMPLISH ANYTHING. - * EDIT A COPY NAMED JCONFIG.H. - */ - - -/* - * These symbols indicate the properties of your machine or compiler. - * #define the symbol if yes, #undef it if no. - */ - -/* Does your compiler support function prototypes? - * (If not, you also need to use ansi2knr, see install.doc) - */ -#define HAVE_PROTOTYPES - -/* Does your compiler support the declaration "unsigned char" ? - * How about "unsigned short" ? - */ -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT - -/* Define "void" as "char" if your compiler doesn't know about type void. - * NOTE: be sure to define void such that "void *" represents the most general - * pointer type, e.g., that returned by malloc(). - */ -/* #define void char */ - -/* Define "const" as empty if your compiler doesn't know the "const" keyword. - */ -/* #define const */ - -/* Define this if an ordinary "char" type is unsigned. - * If you're not sure, leaving it undefined will work at some cost in speed. - * If you defined HAVE_UNSIGNED_CHAR then the speed difference is minimal. - */ -#undef CHAR_IS_UNSIGNED - -/* Define this if your system has an ANSI-conforming file. - */ -#define HAVE_STDDEF_H - -/* Define this if your system has an ANSI-conforming file. - */ -#define HAVE_STDLIB_H - -/* Define this if your system does not have an ANSI/SysV , - * but does have a BSD-style . - */ -#undef NEED_BSD_STRINGS - -/* Define this if your system does not provide typedef size_t in any of the - * ANSI-standard places (stddef.h, stdlib.h, or stdio.h), but places it in - * instead. - */ -#undef NEED_SYS_TYPES_H - -/* For 80x86 machines, you need to define NEED_FAR_POINTERS, - * unless you are using a large-data memory model or 80386 flat-memory mode. - * On less brain-damaged CPUs this symbol must not be defined. - * (Defining this symbol causes large data structures to be referenced through - * "far" pointers and to be allocated with a special version of malloc.) - */ -#undef NEED_FAR_POINTERS - -/* Define this if your linker needs global names to be unique in less - * than the first 15 characters. - */ -#undef NEED_SHORT_EXTERNAL_NAMES - -/* Although a real ANSI C compiler can deal perfectly well with pointers to - * unspecified structures (see "incomplete types" in the spec), a few pre-ANSI - * and pseudo-ANSI compilers get confused. To keep one of these bozos happy, - * define INCOMPLETE_TYPES_BROKEN. This is not recommended unless you - * actually get "missing structure definition" warnings or errors while - * compiling the JPEG code. - */ -#undef INCOMPLETE_TYPES_BROKEN - - -/* - * The following options affect code selection within the JPEG library, - * but they don't need to be visible to applications using the library. - * To minimize application namespace pollution, the symbols won't be - * defined unless JPEG_INTERNALS has been defined. - */ - -#ifdef JPEG_INTERNALS - -/* Define this if your compiler implements ">>" on signed values as a logical - * (unsigned) shift; leave it undefined if ">>" is a signed (arithmetic) shift, - * which is the normal and rational definition. - */ -#undef RIGHT_SHIFT_IS_UNSIGNED - - -#endif /* JPEG_INTERNALS */ - - -/* - * The remaining options do not affect the JPEG library proper, - * but only the sample applications cjpeg/djpeg (see cjpeg.c, djpeg.c). - * Other applications can ignore these. - */ - -#ifdef JPEG_CJPEG_DJPEG - -/* These defines indicate which image (non-JPEG) file formats are allowed. */ - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -/* Define this if you want to name both input and output files on the command - * line, rather than using stdout and optionally stdin. You MUST do this if - * your system can't cope with binary I/O to stdin/stdout. See comments at - * head of cjpeg.c or djpeg.c. - */ -#undef TWO_FILE_COMMANDLINE - -/* Define this if your system needs explicit cleanup of temporary files. - * This is crucial under MS-DOS, where the temporary "files" may be areas - * of extended memory; on most other systems it's not as important. - */ -#undef NEED_SIGNAL_CATCHER - -/* By default, we open image files with fopen(...,"rb") or fopen(...,"wb"). - * This is necessary on systems that distinguish text files from binary files, - * and is harmless on most systems that don't. If you have one of the rare - * systems that complains about the "b" spec, define this symbol. - */ -#undef DONT_USE_B_MODE - -/* Define this if you want percent-done progress reports from cjpeg/djpeg. - */ -#undef PROGRESS_REPORT - - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/libs/jpeg/jconfig.mac b/Build/source/libs/jpeg/jconfig.mac deleted file mode 100644 index 0de3efe24d7..00000000000 --- a/Build/source/libs/jpeg/jconfig.mac +++ /dev/null @@ -1,43 +0,0 @@ -/* jconfig.mac --- jconfig.h for CodeWarrior on Apple Macintosh */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#define USE_MAC_MEMMGR /* Define this if you use jmemmac.c */ - -#define ALIGN_TYPE long /* Needed for 680x0 Macs */ - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define USE_CCOMMAND /* Command line reader for Macintosh */ -#define TWO_FILE_COMMANDLINE /* Binary I/O thru stdin/stdout doesn't work */ - -#undef NEED_SIGNAL_CATCHER -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/libs/jpeg/jconfig.manx b/Build/source/libs/jpeg/jconfig.manx deleted file mode 100644 index 6dd0d008ea8..00000000000 --- a/Build/source/libs/jpeg/jconfig.manx +++ /dev/null @@ -1,43 +0,0 @@ -/* jconfig.manx --- jconfig.h for Amiga systems using Manx Aztec C ver 5.x. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#define TEMP_DIRECTORY "JPEGTMP:" /* recommended setting for Amiga */ - -#define SHORTxSHORT_32 /* produces better DCT code with Aztec C */ - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE -#define NEED_SIGNAL_CATCHER -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#define signal_catcher _abort /* hack for Aztec C naming requirements */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/libs/jpeg/jconfig.mc6 b/Build/source/libs/jpeg/jconfig.mc6 deleted file mode 100644 index c55082df435..00000000000 --- a/Build/source/libs/jpeg/jconfig.mc6 +++ /dev/null @@ -1,52 +0,0 @@ -/* jconfig.mc6 --- jconfig.h for Microsoft C on MS-DOS, version 6.00A & up. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#define NEED_FAR_POINTERS /* for small or medium memory model */ -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#define USE_MSDOS_MEMMGR /* Define this if you use jmemdos.c */ - -#define MAX_ALLOC_CHUNK 65520L /* Maximum request to malloc() */ - -#define USE_FMEM /* Microsoft has _fmemcpy() and _fmemset() */ - -#define NEED_FHEAPMIN /* far heap management routines are broken */ - -#define SHORTxLCONST_32 /* enable compiler-specific DCT optimization */ -/* Note: the above define is known to improve the code with Microsoft C 6.00A. - * I do not know whether it is good for later compiler versions. - * Please report any info on this point to jpeg-info@uunet.uu.net. - */ - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE -#define USE_SETMODE /* Microsoft has setmode() */ -#define NEED_SIGNAL_CATCHER /* Define this if you use jmemdos.c */ -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/libs/jpeg/jconfig.sas b/Build/source/libs/jpeg/jconfig.sas deleted file mode 100644 index efdac22294f..00000000000 --- a/Build/source/libs/jpeg/jconfig.sas +++ /dev/null @@ -1,43 +0,0 @@ -/* jconfig.sas --- jconfig.h for Amiga systems using SAS C 6.0 and up. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#define TEMP_DIRECTORY "JPEGTMP:" /* recommended setting for Amiga */ - -#define NO_MKTEMP /* SAS C doesn't have mktemp() */ - -#define SHORTxSHORT_32 /* produces better DCT code with SAS C */ - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE -#define NEED_SIGNAL_CATCHER -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/libs/jpeg/jconfig.st b/Build/source/libs/jpeg/jconfig.st deleted file mode 100644 index 4421b7a1a67..00000000000 --- a/Build/source/libs/jpeg/jconfig.st +++ /dev/null @@ -1,42 +0,0 @@ -/* jconfig.st --- jconfig.h for Atari ST/STE/TT using Pure C or Turbo C. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS -#undef NEED_SHORT_EXTERNAL_NAMES -#define INCOMPLETE_TYPES_BROKEN /* suppress undefined-structure warnings */ - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#define ALIGN_TYPE long /* apparently double is a weird size? */ - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE /* optional -- undef if you like Unix style */ -/* Note: if you undef TWO_FILE_COMMANDLINE, you may need to define - * USE_SETMODE. Some Atari compilers require it, some do not. - */ -#define NEED_SIGNAL_CATCHER /* needed if you use jmemname.c */ -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/libs/jpeg/jconfig.vc b/Build/source/libs/jpeg/jconfig.vc deleted file mode 100644 index 2b42dcd949d..00000000000 --- a/Build/source/libs/jpeg/jconfig.vc +++ /dev/null @@ -1,71 +0,0 @@ -/* jconfig.vc --- jconfig.h for Microsoft Visual C++ on Windows 95 or NT. */ -/* see jconfig.doc for explanations */ - -#if defined(WIN32) -# ifdef JPEG_DLL -# ifdef MAKE_JPEG_DLL -# define JPEGDLL __declspec( dllexport) -# else -# define JPEGDLL __declspec( dllimport) -# endif -# else -# define JPEGDLL -# endif -#else /* ! WIN32 */ -# define JPEGDLL -#endif - -#ifdef FPTEX -#include -#endif - -#ifndef HAVE_PROTOTYPES -# define HAVE_PROTOTYPES -#endif - -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#ifndef HAVE_STDDEF_H -# define HAVE_STDDEF_H -#endif -#ifndef HAVE_STDLIB_H -# define HAVE_STDLIB_H -#endif -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS /* we presume a 32-bit flat memory model */ -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -/* Define "boolean" as unsigned char, not int, per Windows custom */ -#ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ -typedef unsigned char boolean; -#endif -#ifndef HAVE_BOOLEAN -#define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ -#endif - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE /* optional */ -#define USE_SETMODE /* Microsoft has setmode() */ -#undef NEED_SIGNAL_CATCHER -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/libs/jpeg/jconfig.vms b/Build/source/libs/jpeg/jconfig.vms deleted file mode 100644 index 55a6ffba5cd..00000000000 --- a/Build/source/libs/jpeg/jconfig.vms +++ /dev/null @@ -1,37 +0,0 @@ -/* jconfig.vms --- jconfig.h for use on Digital VMS. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE /* Needed on VMS */ -#undef NEED_SIGNAL_CATCHER -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/libs/jpeg/jconfig.wat b/Build/source/libs/jpeg/jconfig.wat deleted file mode 100644 index 6cc545baeea..00000000000 --- a/Build/source/libs/jpeg/jconfig.wat +++ /dev/null @@ -1,38 +0,0 @@ -/* jconfig.wat --- jconfig.h for Watcom C/C++ on MS-DOS or OS/2. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#define CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS /* Watcom uses flat 32-bit addressing */ -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#undef TWO_FILE_COMMANDLINE /* optional */ -#define USE_SETMODE /* Needed to make one-file style work in Watcom */ -#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */ -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/Build/source/libs/jpeg/jcparam.c b/Build/source/libs/jpeg/jcparam.c deleted file mode 100644 index 6fc48f53653..00000000000 --- a/Build/source/libs/jpeg/jcparam.c +++ /dev/null @@ -1,610 +0,0 @@ -/* - * jcparam.c - * - * Copyright (C) 1991-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains optional default-setting code for the JPEG compressor. - * Applications do not have to use this file, but those that don't use it - * must know a lot more about the innards of the JPEG code. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* - * Quantization table setup routines - */ - -GLOBAL(void) -jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl, - const unsigned int *basic_table, - int scale_factor, boolean force_baseline) -/* Define a quantization table equal to the basic_table times - * a scale factor (given as a percentage). - * If force_baseline is TRUE, the computed quantization table entries - * are limited to 1..255 for JPEG baseline compatibility. - */ -{ - JQUANT_TBL ** qtblptr; - int i; - long temp; - - /* Safety check to ensure start_compress not called yet. */ - if (cinfo->global_state != CSTATE_START) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - if (which_tbl < 0 || which_tbl >= NUM_QUANT_TBLS) - ERREXIT1(cinfo, JERR_DQT_INDEX, which_tbl); - - qtblptr = & cinfo->quant_tbl_ptrs[which_tbl]; - - if (*qtblptr == NULL) - *qtblptr = jpeg_alloc_quant_table((j_common_ptr) cinfo); - - for (i = 0; i < DCTSIZE2; i++) { - temp = ((long) basic_table[i] * scale_factor + 50L) / 100L; - /* limit the values to the valid range */ - if (temp <= 0L) temp = 1L; - if (temp > 32767L) temp = 32767L; /* max quantizer needed for 12 bits */ - if (force_baseline && temp > 255L) - temp = 255L; /* limit to baseline range if requested */ - (*qtblptr)->quantval[i] = (UINT16) temp; - } - - /* Initialize sent_table FALSE so table will be written to JPEG file. */ - (*qtblptr)->sent_table = FALSE; -} - - -GLOBAL(void) -jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor, - boolean force_baseline) -/* Set or change the 'quality' (quantization) setting, using default tables - * and a straight percentage-scaling quality scale. In most cases it's better - * to use jpeg_set_quality (below); this entry point is provided for - * applications that insist on a linear percentage scaling. - */ -{ - /* These are the sample quantization tables given in JPEG spec section K.1. - * The spec says that the values given produce "good" quality, and - * when divided by 2, "very good" quality. - */ - static const unsigned int std_luminance_quant_tbl[DCTSIZE2] = { - 16, 11, 10, 16, 24, 40, 51, 61, - 12, 12, 14, 19, 26, 58, 60, 55, - 14, 13, 16, 24, 40, 57, 69, 56, - 14, 17, 22, 29, 51, 87, 80, 62, - 18, 22, 37, 56, 68, 109, 103, 77, - 24, 35, 55, 64, 81, 104, 113, 92, - 49, 64, 78, 87, 103, 121, 120, 101, - 72, 92, 95, 98, 112, 100, 103, 99 - }; - static const unsigned int std_chrominance_quant_tbl[DCTSIZE2] = { - 17, 18, 24, 47, 99, 99, 99, 99, - 18, 21, 26, 66, 99, 99, 99, 99, - 24, 26, 56, 99, 99, 99, 99, 99, - 47, 66, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99 - }; - - /* Set up two quantization tables using the specified scaling */ - jpeg_add_quant_table(cinfo, 0, std_luminance_quant_tbl, - scale_factor, force_baseline); - jpeg_add_quant_table(cinfo, 1, std_chrominance_quant_tbl, - scale_factor, force_baseline); -} - - -GLOBAL(int) -jpeg_quality_scaling (int quality) -/* Convert a user-specified quality rating to a percentage scaling factor - * for an underlying quantization table, using our recommended scaling curve. - * The input 'quality' factor should be 0 (terrible) to 100 (very good). - */ -{ - /* Safety limit on quality factor. Convert 0 to 1 to avoid zero divide. */ - if (quality <= 0) quality = 1; - if (quality > 100) quality = 100; - - /* The basic table is used as-is (scaling 100) for a quality of 50. - * Qualities 50..100 are converted to scaling percentage 200 - 2*Q; - * note that at Q=100 the scaling is 0, which will cause jpeg_add_quant_table - * to make all the table entries 1 (hence, minimum quantization loss). - * Qualities 1..50 are converted to scaling percentage 5000/Q. - */ - if (quality < 50) - quality = 5000 / quality; - else - quality = 200 - quality*2; - - return quality; -} - - -GLOBAL(void) -jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline) -/* Set or change the 'quality' (quantization) setting, using default tables. - * This is the standard quality-adjusting entry point for typical user - * interfaces; only those who want detailed control over quantization tables - * would use the preceding three routines directly. - */ -{ - /* Convert user 0-100 rating to percentage scaling */ - quality = jpeg_quality_scaling(quality); - - /* Set up standard quality tables */ - jpeg_set_linear_quality(cinfo, quality, force_baseline); -} - - -/* - * Huffman table setup routines - */ - -LOCAL(void) -add_huff_table (j_compress_ptr cinfo, - JHUFF_TBL **htblptr, const UINT8 *bits, const UINT8 *val) -/* Define a Huffman table */ -{ - int nsymbols, len; - - if (*htblptr == NULL) - *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); - - /* Copy the number-of-symbols-of-each-code-length counts */ - MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits)); - - /* Validate the counts. We do this here mainly so we can copy the right - * number of symbols from the val[] array, without risking marching off - * the end of memory. jchuff.c will do a more thorough test later. - */ - nsymbols = 0; - for (len = 1; len <= 16; len++) - nsymbols += bits[len]; - if (nsymbols < 1 || nsymbols > 256) - ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); - - MEMCOPY((*htblptr)->huffval, val, nsymbols * SIZEOF(UINT8)); - - /* Initialize sent_table FALSE so table will be written to JPEG file. */ - (*htblptr)->sent_table = FALSE; -} - - -LOCAL(void) -std_huff_tables (j_compress_ptr cinfo) -/* Set up the standard Huffman tables (cf. JPEG standard section K.3) */ -/* IMPORTANT: these are only valid for 8-bit data precision! */ -{ - static const UINT8 bits_dc_luminance[17] = - { /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }; - static const UINT8 val_dc_luminance[] = - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; - - static const UINT8 bits_dc_chrominance[17] = - { /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }; - static const UINT8 val_dc_chrominance[] = - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; - - static const UINT8 bits_ac_luminance[17] = - { /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d }; - static const UINT8 val_ac_luminance[] = - { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, - 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, - 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, - 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, - 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, - 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, - 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, - 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, - 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, - 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, - 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, - 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, - 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, - 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, - 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, - 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, - 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, - 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, - 0xf9, 0xfa }; - - static const UINT8 bits_ac_chrominance[17] = - { /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 }; - static const UINT8 val_ac_chrominance[] = - { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, - 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, - 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, - 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, - 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, - 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, - 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, - 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, - 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, - 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, - 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, - 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, - 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, - 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, - 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, - 0xf9, 0xfa }; - - add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[0], - bits_dc_luminance, val_dc_luminance); - add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[0], - bits_ac_luminance, val_ac_luminance); - add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[1], - bits_dc_chrominance, val_dc_chrominance); - add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[1], - bits_ac_chrominance, val_ac_chrominance); -} - - -/* - * Default parameter setup for compression. - * - * Applications that don't choose to use this routine must do their - * own setup of all these parameters. Alternately, you can call this - * to establish defaults and then alter parameters selectively. This - * is the recommended approach since, if we add any new parameters, - * your code will still work (they'll be set to reasonable defaults). - */ - -GLOBAL(void) -jpeg_set_defaults (j_compress_ptr cinfo) -{ - int i; - - /* Safety check to ensure start_compress not called yet. */ - if (cinfo->global_state != CSTATE_START) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - /* Allocate comp_info array large enough for maximum component count. - * Array is made permanent in case application wants to compress - * multiple images at same param settings. - */ - if (cinfo->comp_info == NULL) - cinfo->comp_info = (jpeg_component_info *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - MAX_COMPONENTS * SIZEOF(jpeg_component_info)); - - /* Initialize everything not dependent on the color space */ - - cinfo->data_precision = BITS_IN_JSAMPLE; - /* Set up two quantization tables using default quality of 75 */ - jpeg_set_quality(cinfo, 75, TRUE); - /* Set up two Huffman tables */ - std_huff_tables(cinfo); - - /* Initialize default arithmetic coding conditioning */ - for (i = 0; i < NUM_ARITH_TBLS; i++) { - cinfo->arith_dc_L[i] = 0; - cinfo->arith_dc_U[i] = 1; - cinfo->arith_ac_K[i] = 5; - } - - /* Default is no multiple-scan output */ - cinfo->scan_info = NULL; - cinfo->num_scans = 0; - - /* Expect normal source image, not raw downsampled data */ - cinfo->raw_data_in = FALSE; - - /* Use Huffman coding, not arithmetic coding, by default */ - cinfo->arith_code = FALSE; - - /* By default, don't do extra passes to optimize entropy coding */ - cinfo->optimize_coding = FALSE; - /* The standard Huffman tables are only valid for 8-bit data precision. - * If the precision is higher, force optimization on so that usable - * tables will be computed. This test can be removed if default tables - * are supplied that are valid for the desired precision. - */ - if (cinfo->data_precision > 8) - cinfo->optimize_coding = TRUE; - - /* By default, use the simpler non-cosited sampling alignment */ - cinfo->CCIR601_sampling = FALSE; - - /* No input smoothing */ - cinfo->smoothing_factor = 0; - - /* DCT algorithm preference */ - cinfo->dct_method = JDCT_DEFAULT; - - /* No restart markers */ - cinfo->restart_interval = 0; - cinfo->restart_in_rows = 0; - - /* Fill in default JFIF marker parameters. Note that whether the marker - * will actually be written is determined by jpeg_set_colorspace. - * - * By default, the library emits JFIF version code 1.01. - * An application that wants to emit JFIF 1.02 extension markers should set - * JFIF_minor_version to 2. We could probably get away with just defaulting - * to 1.02, but there may still be some decoders in use that will complain - * about that; saying 1.01 should minimize compatibility problems. - */ - cinfo->JFIF_major_version = 1; /* Default JFIF version = 1.01 */ - cinfo->JFIF_minor_version = 1; - cinfo->density_unit = 0; /* Pixel size is unknown by default */ - cinfo->X_density = 1; /* Pixel aspect ratio is square by default */ - cinfo->Y_density = 1; - - /* Choose JPEG colorspace based on input space, set defaults accordingly */ - - jpeg_default_colorspace(cinfo); -} - - -/* - * Select an appropriate JPEG colorspace for in_color_space. - */ - -GLOBAL(void) -jpeg_default_colorspace (j_compress_ptr cinfo) -{ - switch (cinfo->in_color_space) { - case JCS_GRAYSCALE: - jpeg_set_colorspace(cinfo, JCS_GRAYSCALE); - break; - case JCS_RGB: - jpeg_set_colorspace(cinfo, JCS_YCbCr); - break; - case JCS_YCbCr: - jpeg_set_colorspace(cinfo, JCS_YCbCr); - break; - case JCS_CMYK: - jpeg_set_colorspace(cinfo, JCS_CMYK); /* By default, no translation */ - break; - case JCS_YCCK: - jpeg_set_colorspace(cinfo, JCS_YCCK); - break; - case JCS_UNKNOWN: - jpeg_set_colorspace(cinfo, JCS_UNKNOWN); - break; - default: - ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); - } -} - - -/* - * Set the JPEG colorspace, and choose colorspace-dependent default values. - */ - -GLOBAL(void) -jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) -{ - jpeg_component_info * compptr; - int ci; - -#define SET_COMP(index,id,hsamp,vsamp,quant,dctbl,actbl) \ - (compptr = &cinfo->comp_info[index], \ - compptr->component_id = (id), \ - compptr->h_samp_factor = (hsamp), \ - compptr->v_samp_factor = (vsamp), \ - compptr->quant_tbl_no = (quant), \ - compptr->dc_tbl_no = (dctbl), \ - compptr->ac_tbl_no = (actbl) ) - - /* Safety check to ensure start_compress not called yet. */ - if (cinfo->global_state != CSTATE_START) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - /* For all colorspaces, we use Q and Huff tables 0 for luminance components, - * tables 1 for chrominance components. - */ - - cinfo->jpeg_color_space = colorspace; - - cinfo->write_JFIF_header = FALSE; /* No marker for non-JFIF colorspaces */ - cinfo->write_Adobe_marker = FALSE; /* write no Adobe marker by default */ - - switch (colorspace) { - case JCS_GRAYSCALE: - cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */ - cinfo->num_components = 1; - /* JFIF specifies component ID 1 */ - SET_COMP(0, 1, 1,1, 0, 0,0); - break; - case JCS_RGB: - cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag RGB */ - cinfo->num_components = 3; - SET_COMP(0, 0x52 /* 'R' */, 1,1, 0, 0,0); - SET_COMP(1, 0x47 /* 'G' */, 1,1, 0, 0,0); - SET_COMP(2, 0x42 /* 'B' */, 1,1, 0, 0,0); - break; - case JCS_YCbCr: - cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */ - cinfo->num_components = 3; - /* JFIF specifies component IDs 1,2,3 */ - /* We default to 2x2 subsamples of chrominance */ - SET_COMP(0, 1, 2,2, 0, 0,0); - SET_COMP(1, 2, 1,1, 1, 1,1); - SET_COMP(2, 3, 1,1, 1, 1,1); - break; - case JCS_CMYK: - cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag CMYK */ - cinfo->num_components = 4; - SET_COMP(0, 0x43 /* 'C' */, 1,1, 0, 0,0); - SET_COMP(1, 0x4D /* 'M' */, 1,1, 0, 0,0); - SET_COMP(2, 0x59 /* 'Y' */, 1,1, 0, 0,0); - SET_COMP(3, 0x4B /* 'K' */, 1,1, 0, 0,0); - break; - case JCS_YCCK: - cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag YCCK */ - cinfo->num_components = 4; - SET_COMP(0, 1, 2,2, 0, 0,0); - SET_COMP(1, 2, 1,1, 1, 1,1); - SET_COMP(2, 3, 1,1, 1, 1,1); - SET_COMP(3, 4, 2,2, 0, 0,0); - break; - case JCS_UNKNOWN: - cinfo->num_components = cinfo->input_components; - if (cinfo->num_components < 1 || cinfo->num_components > MAX_COMPONENTS) - ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, - MAX_COMPONENTS); - for (ci = 0; ci < cinfo->num_components; ci++) { - SET_COMP(ci, ci, 1,1, 0, 0,0); - } - break; - default: - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - } -} - - -#ifdef C_PROGRESSIVE_SUPPORTED - -LOCAL(jpeg_scan_info *) -fill_a_scan (jpeg_scan_info * scanptr, int ci, - int Ss, int Se, int Ah, int Al) -/* Support routine: generate one scan for specified component */ -{ - scanptr->comps_in_scan = 1; - scanptr->component_index[0] = ci; - scanptr->Ss = Ss; - scanptr->Se = Se; - scanptr->Ah = Ah; - scanptr->Al = Al; - scanptr++; - return scanptr; -} - -LOCAL(jpeg_scan_info *) -fill_scans (jpeg_scan_info * scanptr, int ncomps, - int Ss, int Se, int Ah, int Al) -/* Support routine: generate one scan for each component */ -{ - int ci; - - for (ci = 0; ci < ncomps; ci++) { - scanptr->comps_in_scan = 1; - scanptr->component_index[0] = ci; - scanptr->Ss = Ss; - scanptr->Se = Se; - scanptr->Ah = Ah; - scanptr->Al = Al; - scanptr++; - } - return scanptr; -} - -LOCAL(jpeg_scan_info *) -fill_dc_scans (jpeg_scan_info * scanptr, int ncomps, int Ah, int Al) -/* Support routine: generate interleaved DC scan if possible, else N scans */ -{ - int ci; - - if (ncomps <= MAX_COMPS_IN_SCAN) { - /* Single interleaved DC scan */ - scanptr->comps_in_scan = ncomps; - for (ci = 0; ci < ncomps; ci++) - scanptr->component_index[ci] = ci; - scanptr->Ss = scanptr->Se = 0; - scanptr->Ah = Ah; - scanptr->Al = Al; - scanptr++; - } else { - /* Noninterleaved DC scan for each component */ - scanptr = fill_scans(scanptr, ncomps, 0, 0, Ah, Al); - } - return scanptr; -} - - -/* - * Create a recommended progressive-JPEG script. - * cinfo->num_components and cinfo->jpeg_color_space must be correct. - */ - -GLOBAL(void) -jpeg_simple_progression (j_compress_ptr cinfo) -{ - int ncomps = cinfo->num_components; - int nscans; - jpeg_scan_info * scanptr; - - /* Safety check to ensure start_compress not called yet. */ - if (cinfo->global_state != CSTATE_START) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - /* Figure space needed for script. Calculation must match code below! */ - if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) { - /* Custom script for YCbCr color images. */ - nscans = 10; - } else { - /* All-purpose script for other color spaces. */ - if (ncomps > MAX_COMPS_IN_SCAN) - nscans = 6 * ncomps; /* 2 DC + 4 AC scans per component */ - else - nscans = 2 + 4 * ncomps; /* 2 DC scans; 4 AC scans per component */ - } - - /* Allocate space for script. - * We need to put it in the permanent pool in case the application performs - * multiple compressions without changing the settings. To avoid a memory - * leak if jpeg_simple_progression is called repeatedly for the same JPEG - * object, we try to re-use previously allocated space, and we allocate - * enough space to handle YCbCr even if initially asked for grayscale. - */ - if (cinfo->script_space == NULL || cinfo->script_space_size < nscans) { - cinfo->script_space_size = MAX(nscans, 10); - cinfo->script_space = (jpeg_scan_info *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - cinfo->script_space_size * SIZEOF(jpeg_scan_info)); - } - scanptr = cinfo->script_space; - cinfo->scan_info = scanptr; - cinfo->num_scans = nscans; - - if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) { - /* Custom script for YCbCr color images. */ - /* Initial DC scan */ - scanptr = fill_dc_scans(scanptr, ncomps, 0, 1); - /* Initial AC scan: get some luma data out in a hurry */ - scanptr = fill_a_scan(scanptr, 0, 1, 5, 0, 2); - /* Chroma data is too small to be worth expending many scans on */ - scanptr = fill_a_scan(scanptr, 2, 1, 63, 0, 1); - scanptr = fill_a_scan(scanptr, 1, 1, 63, 0, 1); - /* Complete spectral selection for luma AC */ - scanptr = fill_a_scan(scanptr, 0, 6, 63, 0, 2); - /* Refine next bit of luma AC */ - scanptr = fill_a_scan(scanptr, 0, 1, 63, 2, 1); - /* Finish DC successive approximation */ - scanptr = fill_dc_scans(scanptr, ncomps, 1, 0); - /* Finish AC successive approximation */ - scanptr = fill_a_scan(scanptr, 2, 1, 63, 1, 0); - scanptr = fill_a_scan(scanptr, 1, 1, 63, 1, 0); - /* Luma bottom bit comes last since it's usually largest scan */ - scanptr = fill_a_scan(scanptr, 0, 1, 63, 1, 0); - } else { - /* All-purpose script for other color spaces. */ - /* Successive approximation first pass */ - scanptr = fill_dc_scans(scanptr, ncomps, 0, 1); - scanptr = fill_scans(scanptr, ncomps, 1, 5, 0, 2); - scanptr = fill_scans(scanptr, ncomps, 6, 63, 0, 2); - /* Successive approximation second pass */ - scanptr = fill_scans(scanptr, ncomps, 1, 63, 2, 1); - /* Successive approximation final pass */ - scanptr = fill_dc_scans(scanptr, ncomps, 1, 0); - scanptr = fill_scans(scanptr, ncomps, 1, 63, 1, 0); - } -} - -#endif /* C_PROGRESSIVE_SUPPORTED */ diff --git a/Build/source/libs/jpeg/jcphuff.c b/Build/source/libs/jpeg/jcphuff.c deleted file mode 100644 index 07f9178b01c..00000000000 --- a/Build/source/libs/jpeg/jcphuff.c +++ /dev/null @@ -1,833 +0,0 @@ -/* - * jcphuff.c - * - * Copyright (C) 1995-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains Huffman entropy encoding routines for progressive JPEG. - * - * We do not support output suspension in this module, since the library - * currently does not allow multiple-scan files to be written with output - * suspension. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jchuff.h" /* Declarations shared with jchuff.c */ - -#ifdef C_PROGRESSIVE_SUPPORTED - -/* Expanded entropy encoder object for progressive Huffman encoding. */ - -typedef struct { - struct jpeg_entropy_encoder pub; /* public fields */ - - /* Mode flag: TRUE for optimization, FALSE for actual data output */ - boolean gather_statistics; - - /* Bit-level coding status. - * next_output_byte/free_in_buffer are local copies of cinfo->dest fields. - */ - JOCTET * next_output_byte; /* => next byte to write in buffer */ - size_t free_in_buffer; /* # of byte spaces remaining in buffer */ - INT32 put_buffer; /* current bit-accumulation buffer */ - int put_bits; /* # of bits now in it */ - j_compress_ptr cinfo; /* link to cinfo (needed for dump_buffer) */ - - /* Coding status for DC components */ - int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ - - /* Coding status for AC components */ - int ac_tbl_no; /* the table number of the single component */ - unsigned int EOBRUN; /* run length of EOBs */ - unsigned int BE; /* # of buffered correction bits before MCU */ - char * bit_buffer; /* buffer for correction bits (1 per char) */ - /* packing correction bits tightly would save some space but cost time... */ - - unsigned int restarts_to_go; /* MCUs left in this restart interval */ - int next_restart_num; /* next restart number to write (0-7) */ - - /* Pointers to derived tables (these workspaces have image lifespan). - * Since any one scan codes only DC or only AC, we only need one set - * of tables, not one for DC and one for AC. - */ - c_derived_tbl * derived_tbls[NUM_HUFF_TBLS]; - - /* Statistics tables for optimization; again, one set is enough */ - long * count_ptrs[NUM_HUFF_TBLS]; -} phuff_entropy_encoder; - -typedef phuff_entropy_encoder * phuff_entropy_ptr; - -/* MAX_CORR_BITS is the number of bits the AC refinement correction-bit - * buffer can hold. Larger sizes may slightly improve compression, but - * 1000 is already well into the realm of overkill. - * The minimum safe size is 64 bits. - */ - -#define MAX_CORR_BITS 1000 /* Max # of correction bits I can buffer */ - -/* IRIGHT_SHIFT is like RIGHT_SHIFT, but works on int rather than INT32. - * We assume that int right shift is unsigned if INT32 right shift is, - * which should be safe. - */ - -#ifdef RIGHT_SHIFT_IS_UNSIGNED -#define ISHIFT_TEMPS int ishift_temp; -#define IRIGHT_SHIFT(x,shft) \ - ((ishift_temp = (x)) < 0 ? \ - (ishift_temp >> (shft)) | ((~0) << (16-(shft))) : \ - (ishift_temp >> (shft))) -#else -#define ISHIFT_TEMPS -#define IRIGHT_SHIFT(x,shft) ((x) >> (shft)) -#endif - -/* Forward declarations */ -METHODDEF(boolean) encode_mcu_DC_first JPP((j_compress_ptr cinfo, - JBLOCKROW *MCU_data)); -METHODDEF(boolean) encode_mcu_AC_first JPP((j_compress_ptr cinfo, - JBLOCKROW *MCU_data)); -METHODDEF(boolean) encode_mcu_DC_refine JPP((j_compress_ptr cinfo, - JBLOCKROW *MCU_data)); -METHODDEF(boolean) encode_mcu_AC_refine JPP((j_compress_ptr cinfo, - JBLOCKROW *MCU_data)); -METHODDEF(void) finish_pass_phuff JPP((j_compress_ptr cinfo)); -METHODDEF(void) finish_pass_gather_phuff JPP((j_compress_ptr cinfo)); - - -/* - * Initialize for a Huffman-compressed scan using progressive JPEG. - */ - -METHODDEF(void) -start_pass_phuff (j_compress_ptr cinfo, boolean gather_statistics) -{ - phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; - boolean is_DC_band; - int ci, tbl; - jpeg_component_info * compptr; - - entropy->cinfo = cinfo; - entropy->gather_statistics = gather_statistics; - - is_DC_band = (cinfo->Ss == 0); - - /* We assume jcmaster.c already validated the scan parameters. */ - - /* Select execution routines */ - if (cinfo->Ah == 0) { - if (is_DC_band) - entropy->pub.encode_mcu = encode_mcu_DC_first; - else - entropy->pub.encode_mcu = encode_mcu_AC_first; - } else { - if (is_DC_band) - entropy->pub.encode_mcu = encode_mcu_DC_refine; - else { - entropy->pub.encode_mcu = encode_mcu_AC_refine; - /* AC refinement needs a correction bit buffer */ - if (entropy->bit_buffer == NULL) - entropy->bit_buffer = (char *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - MAX_CORR_BITS * SIZEOF(char)); - } - } - if (gather_statistics) - entropy->pub.finish_pass = finish_pass_gather_phuff; - else - entropy->pub.finish_pass = finish_pass_phuff; - - /* Only DC coefficients may be interleaved, so cinfo->comps_in_scan = 1 - * for AC coefficients. - */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - /* Initialize DC predictions to 0 */ - entropy->last_dc_val[ci] = 0; - /* Get table index */ - if (is_DC_band) { - if (cinfo->Ah != 0) /* DC refinement needs no table */ - continue; - tbl = compptr->dc_tbl_no; - } else { - entropy->ac_tbl_no = tbl = compptr->ac_tbl_no; - } - if (gather_statistics) { - /* Check for invalid table index */ - /* (make_c_derived_tbl does this in the other path) */ - if (tbl < 0 || tbl >= NUM_HUFF_TBLS) - ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tbl); - /* Allocate and zero the statistics tables */ - /* Note that jpeg_gen_optimal_table expects 257 entries in each table! */ - if (entropy->count_ptrs[tbl] == NULL) - entropy->count_ptrs[tbl] = (long *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - 257 * SIZEOF(long)); - MEMZERO(entropy->count_ptrs[tbl], 257 * SIZEOF(long)); - } else { - /* Compute derived values for Huffman table */ - /* We may do this more than once for a table, but it's not expensive */ - jpeg_make_c_derived_tbl(cinfo, is_DC_band, tbl, - & entropy->derived_tbls[tbl]); - } - } - - /* Initialize AC stuff */ - entropy->EOBRUN = 0; - entropy->BE = 0; - - /* Initialize bit buffer to empty */ - entropy->put_buffer = 0; - entropy->put_bits = 0; - - /* Initialize restart stuff */ - entropy->restarts_to_go = cinfo->restart_interval; - entropy->next_restart_num = 0; -} - - -/* Outputting bytes to the file. - * NB: these must be called only when actually outputting, - * that is, entropy->gather_statistics == FALSE. - */ - -/* Emit a byte */ -#define emit_byte(entropy,val) \ - { *(entropy)->next_output_byte++ = (JOCTET) (val); \ - if (--(entropy)->free_in_buffer == 0) \ - dump_buffer(entropy); } - - -LOCAL(void) -dump_buffer (phuff_entropy_ptr entropy) -/* Empty the output buffer; we do not support suspension in this module. */ -{ - struct jpeg_destination_mgr * dest = entropy->cinfo->dest; - - if (! (*dest->empty_output_buffer) (entropy->cinfo)) - ERREXIT(entropy->cinfo, JERR_CANT_SUSPEND); - /* After a successful buffer dump, must reset buffer pointers */ - entropy->next_output_byte = dest->next_output_byte; - entropy->free_in_buffer = dest->free_in_buffer; -} - - -/* Outputting bits to the file */ - -/* Only the right 24 bits of put_buffer are used; the valid bits are - * left-justified in this part. At most 16 bits can be passed to emit_bits - * in one call, and we never retain more than 7 bits in put_buffer - * between calls, so 24 bits are sufficient. - */ - -INLINE -LOCAL(void) -emit_bits (phuff_entropy_ptr entropy, unsigned int code, int size) -/* Emit some bits, unless we are in gather mode */ -{ - /* This routine is heavily used, so it's worth coding tightly. */ - register INT32 put_buffer = (INT32) code; - register int put_bits = entropy->put_bits; - - /* if size is 0, caller used an invalid Huffman table entry */ - if (size == 0) - ERREXIT(entropy->cinfo, JERR_HUFF_MISSING_CODE); - - if (entropy->gather_statistics) - return; /* do nothing if we're only getting stats */ - - put_buffer &= (((INT32) 1)<put_buffer; /* and merge with old buffer contents */ - - while (put_bits >= 8) { - int c = (int) ((put_buffer >> 16) & 0xFF); - - emit_byte(entropy, c); - if (c == 0xFF) { /* need to stuff a zero byte? */ - emit_byte(entropy, 0); - } - put_buffer <<= 8; - put_bits -= 8; - } - - entropy->put_buffer = put_buffer; /* update variables */ - entropy->put_bits = put_bits; -} - - -LOCAL(void) -flush_bits (phuff_entropy_ptr entropy) -{ - emit_bits(entropy, 0x7F, 7); /* fill any partial byte with ones */ - entropy->put_buffer = 0; /* and reset bit-buffer to empty */ - entropy->put_bits = 0; -} - - -/* - * Emit (or just count) a Huffman symbol. - */ - -INLINE -LOCAL(void) -emit_symbol (phuff_entropy_ptr entropy, int tbl_no, int symbol) -{ - if (entropy->gather_statistics) - entropy->count_ptrs[tbl_no][symbol]++; - else { - c_derived_tbl * tbl = entropy->derived_tbls[tbl_no]; - emit_bits(entropy, tbl->ehufco[symbol], tbl->ehufsi[symbol]); - } -} - - -/* - * Emit bits from a correction bit buffer. - */ - -LOCAL(void) -emit_buffered_bits (phuff_entropy_ptr entropy, char * bufstart, - unsigned int nbits) -{ - if (entropy->gather_statistics) - return; /* no real work */ - - while (nbits > 0) { - emit_bits(entropy, (unsigned int) (*bufstart), 1); - bufstart++; - nbits--; - } -} - - -/* - * Emit any pending EOBRUN symbol. - */ - -LOCAL(void) -emit_eobrun (phuff_entropy_ptr entropy) -{ - register int temp, nbits; - - if (entropy->EOBRUN > 0) { /* if there is any pending EOBRUN */ - temp = entropy->EOBRUN; - nbits = 0; - while ((temp >>= 1)) - nbits++; - /* safety check: shouldn't happen given limited correction-bit buffer */ - if (nbits > 14) - ERREXIT(entropy->cinfo, JERR_HUFF_MISSING_CODE); - - emit_symbol(entropy, entropy->ac_tbl_no, nbits << 4); - if (nbits) - emit_bits(entropy, entropy->EOBRUN, nbits); - - entropy->EOBRUN = 0; - - /* Emit any buffered correction bits */ - emit_buffered_bits(entropy, entropy->bit_buffer, entropy->BE); - entropy->BE = 0; - } -} - - -/* - * Emit a restart marker & resynchronize predictions. - */ - -LOCAL(void) -emit_restart (phuff_entropy_ptr entropy, int restart_num) -{ - int ci; - - emit_eobrun(entropy); - - if (! entropy->gather_statistics) { - flush_bits(entropy); - emit_byte(entropy, 0xFF); - emit_byte(entropy, JPEG_RST0 + restart_num); - } - - if (entropy->cinfo->Ss == 0) { - /* Re-initialize DC predictions to 0 */ - for (ci = 0; ci < entropy->cinfo->comps_in_scan; ci++) - entropy->last_dc_val[ci] = 0; - } else { - /* Re-initialize all AC-related fields to 0 */ - entropy->EOBRUN = 0; - entropy->BE = 0; - } -} - - -/* - * MCU encoding for DC initial scan (either spectral selection, - * or first pass of successive approximation). - */ - -METHODDEF(boolean) -encode_mcu_DC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) -{ - phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; - register int temp, temp2; - register int nbits; - int blkn, ci; - int Al = cinfo->Al; - JBLOCKROW block; - jpeg_component_info * compptr; - ISHIFT_TEMPS - - entropy->next_output_byte = cinfo->dest->next_output_byte; - entropy->free_in_buffer = cinfo->dest->free_in_buffer; - - /* Emit restart marker if needed */ - if (cinfo->restart_interval) - if (entropy->restarts_to_go == 0) - emit_restart(entropy, entropy->next_restart_num); - - /* Encode the MCU data blocks */ - for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { - block = MCU_data[blkn]; - ci = cinfo->MCU_membership[blkn]; - compptr = cinfo->cur_comp_info[ci]; - - /* Compute the DC value after the required point transform by Al. - * This is simply an arithmetic right shift. - */ - temp2 = IRIGHT_SHIFT((int) ((*block)[0]), Al); - - /* DC differences are figured on the point-transformed values. */ - temp = temp2 - entropy->last_dc_val[ci]; - entropy->last_dc_val[ci] = temp2; - - /* Encode the DC coefficient difference per section G.1.2.1 */ - temp2 = temp; - if (temp < 0) { - temp = -temp; /* temp is abs value of input */ - /* For a negative input, want temp2 = bitwise complement of abs(input) */ - /* This code assumes we are on a two's complement machine */ - temp2--; - } - - /* Find the number of bits needed for the magnitude of the coefficient */ - nbits = 0; - while (temp) { - nbits++; - temp >>= 1; - } - /* Check for out-of-range coefficient values. - * Since we're encoding a difference, the range limit is twice as much. - */ - if (nbits > MAX_COEF_BITS+1) - ERREXIT(cinfo, JERR_BAD_DCT_COEF); - - /* Count/emit the Huffman-coded symbol for the number of bits */ - emit_symbol(entropy, compptr->dc_tbl_no, nbits); - - /* Emit that number of bits of the value, if positive, */ - /* or the complement of its magnitude, if negative. */ - if (nbits) /* emit_bits rejects calls with size 0 */ - emit_bits(entropy, (unsigned int) temp2, nbits); - } - - cinfo->dest->next_output_byte = entropy->next_output_byte; - cinfo->dest->free_in_buffer = entropy->free_in_buffer; - - /* Update restart-interval state too */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) { - entropy->restarts_to_go = cinfo->restart_interval; - entropy->next_restart_num++; - entropy->next_restart_num &= 7; - } - entropy->restarts_to_go--; - } - - return TRUE; -} - - -/* - * MCU encoding for AC initial scan (either spectral selection, - * or first pass of successive approximation). - */ - -METHODDEF(boolean) -encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) -{ - phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; - register int temp, temp2; - register int nbits; - register int r, k; - int Se = cinfo->Se; - int Al = cinfo->Al; - JBLOCKROW block; - - entropy->next_output_byte = cinfo->dest->next_output_byte; - entropy->free_in_buffer = cinfo->dest->free_in_buffer; - - /* Emit restart marker if needed */ - if (cinfo->restart_interval) - if (entropy->restarts_to_go == 0) - emit_restart(entropy, entropy->next_restart_num); - - /* Encode the MCU data block */ - block = MCU_data[0]; - - /* Encode the AC coefficients per section G.1.2.2, fig. G.3 */ - - r = 0; /* r = run length of zeros */ - - for (k = cinfo->Ss; k <= Se; k++) { - if ((temp = (*block)[jpeg_natural_order[k]]) == 0) { - r++; - continue; - } - /* We must apply the point transform by Al. For AC coefficients this - * is an integer division with rounding towards 0. To do this portably - * in C, we shift after obtaining the absolute value; so the code is - * interwoven with finding the abs value (temp) and output bits (temp2). - */ - if (temp < 0) { - temp = -temp; /* temp is abs value of input */ - temp >>= Al; /* apply the point transform */ - /* For a negative coef, want temp2 = bitwise complement of abs(coef) */ - temp2 = ~temp; - } else { - temp >>= Al; /* apply the point transform */ - temp2 = temp; - } - /* Watch out for case that nonzero coef is zero after point transform */ - if (temp == 0) { - r++; - continue; - } - - /* Emit any pending EOBRUN */ - if (entropy->EOBRUN > 0) - emit_eobrun(entropy); - /* if run length > 15, must emit special run-length-16 codes (0xF0) */ - while (r > 15) { - emit_symbol(entropy, entropy->ac_tbl_no, 0xF0); - r -= 16; - } - - /* Find the number of bits needed for the magnitude of the coefficient */ - nbits = 1; /* there must be at least one 1 bit */ - while ((temp >>= 1)) - nbits++; - /* Check for out-of-range coefficient values */ - if (nbits > MAX_COEF_BITS) - ERREXIT(cinfo, JERR_BAD_DCT_COEF); - - /* Count/emit Huffman symbol for run length / number of bits */ - emit_symbol(entropy, entropy->ac_tbl_no, (r << 4) + nbits); - - /* Emit that number of bits of the value, if positive, */ - /* or the complement of its magnitude, if negative. */ - emit_bits(entropy, (unsigned int) temp2, nbits); - - r = 0; /* reset zero run length */ - } - - if (r > 0) { /* If there are trailing zeroes, */ - entropy->EOBRUN++; /* count an EOB */ - if (entropy->EOBRUN == 0x7FFF) - emit_eobrun(entropy); /* force it out to avoid overflow */ - } - - cinfo->dest->next_output_byte = entropy->next_output_byte; - cinfo->dest->free_in_buffer = entropy->free_in_buffer; - - /* Update restart-interval state too */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) { - entropy->restarts_to_go = cinfo->restart_interval; - entropy->next_restart_num++; - entropy->next_restart_num &= 7; - } - entropy->restarts_to_go--; - } - - return TRUE; -} - - -/* - * MCU encoding for DC successive approximation refinement scan. - * Note: we assume such scans can be multi-component, although the spec - * is not very clear on the point. - */ - -METHODDEF(boolean) -encode_mcu_DC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) -{ - phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; - register int temp; - int blkn; - int Al = cinfo->Al; - JBLOCKROW block; - - entropy->next_output_byte = cinfo->dest->next_output_byte; - entropy->free_in_buffer = cinfo->dest->free_in_buffer; - - /* Emit restart marker if needed */ - if (cinfo->restart_interval) - if (entropy->restarts_to_go == 0) - emit_restart(entropy, entropy->next_restart_num); - - /* Encode the MCU data blocks */ - for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { - block = MCU_data[blkn]; - - /* We simply emit the Al'th bit of the DC coefficient value. */ - temp = (*block)[0]; - emit_bits(entropy, (unsigned int) (temp >> Al), 1); - } - - cinfo->dest->next_output_byte = entropy->next_output_byte; - cinfo->dest->free_in_buffer = entropy->free_in_buffer; - - /* Update restart-interval state too */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) { - entropy->restarts_to_go = cinfo->restart_interval; - entropy->next_restart_num++; - entropy->next_restart_num &= 7; - } - entropy->restarts_to_go--; - } - - return TRUE; -} - - -/* - * MCU encoding for AC successive approximation refinement scan. - */ - -METHODDEF(boolean) -encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) -{ - phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; - register int temp; - register int r, k; - int EOB; - char *BR_buffer; - unsigned int BR; - int Se = cinfo->Se; - int Al = cinfo->Al; - JBLOCKROW block; - int absvalues[DCTSIZE2]; - - entropy->next_output_byte = cinfo->dest->next_output_byte; - entropy->free_in_buffer = cinfo->dest->free_in_buffer; - - /* Emit restart marker if needed */ - if (cinfo->restart_interval) - if (entropy->restarts_to_go == 0) - emit_restart(entropy, entropy->next_restart_num); - - /* Encode the MCU data block */ - block = MCU_data[0]; - - /* It is convenient to make a pre-pass to determine the transformed - * coefficients' absolute values and the EOB position. - */ - EOB = 0; - for (k = cinfo->Ss; k <= Se; k++) { - temp = (*block)[jpeg_natural_order[k]]; - /* We must apply the point transform by Al. For AC coefficients this - * is an integer division with rounding towards 0. To do this portably - * in C, we shift after obtaining the absolute value. - */ - if (temp < 0) - temp = -temp; /* temp is abs value of input */ - temp >>= Al; /* apply the point transform */ - absvalues[k] = temp; /* save abs value for main pass */ - if (temp == 1) - EOB = k; /* EOB = index of last newly-nonzero coef */ - } - - /* Encode the AC coefficients per section G.1.2.3, fig. G.7 */ - - r = 0; /* r = run length of zeros */ - BR = 0; /* BR = count of buffered bits added now */ - BR_buffer = entropy->bit_buffer + entropy->BE; /* Append bits to buffer */ - - for (k = cinfo->Ss; k <= Se; k++) { - if ((temp = absvalues[k]) == 0) { - r++; - continue; - } - - /* Emit any required ZRLs, but not if they can be folded into EOB */ - while (r > 15 && k <= EOB) { - /* emit any pending EOBRUN and the BE correction bits */ - emit_eobrun(entropy); - /* Emit ZRL */ - emit_symbol(entropy, entropy->ac_tbl_no, 0xF0); - r -= 16; - /* Emit buffered correction bits that must be associated with ZRL */ - emit_buffered_bits(entropy, BR_buffer, BR); - BR_buffer = entropy->bit_buffer; /* BE bits are gone now */ - BR = 0; - } - - /* If the coef was previously nonzero, it only needs a correction bit. - * NOTE: a straight translation of the spec's figure G.7 would suggest - * that we also need to test r > 15. But if r > 15, we can only get here - * if k > EOB, which implies that this coefficient is not 1. - */ - if (temp > 1) { - /* The correction bit is the next bit of the absolute value. */ - BR_buffer[BR++] = (char) (temp & 1); - continue; - } - - /* Emit any pending EOBRUN and the BE correction bits */ - emit_eobrun(entropy); - - /* Count/emit Huffman symbol for run length / number of bits */ - emit_symbol(entropy, entropy->ac_tbl_no, (r << 4) + 1); - - /* Emit output bit for newly-nonzero coef */ - temp = ((*block)[jpeg_natural_order[k]] < 0) ? 0 : 1; - emit_bits(entropy, (unsigned int) temp, 1); - - /* Emit buffered correction bits that must be associated with this code */ - emit_buffered_bits(entropy, BR_buffer, BR); - BR_buffer = entropy->bit_buffer; /* BE bits are gone now */ - BR = 0; - r = 0; /* reset zero run length */ - } - - if (r > 0 || BR > 0) { /* If there are trailing zeroes, */ - entropy->EOBRUN++; /* count an EOB */ - entropy->BE += BR; /* concat my correction bits to older ones */ - /* We force out the EOB if we risk either: - * 1. overflow of the EOB counter; - * 2. overflow of the correction bit buffer during the next MCU. - */ - if (entropy->EOBRUN == 0x7FFF || entropy->BE > (MAX_CORR_BITS-DCTSIZE2+1)) - emit_eobrun(entropy); - } - - cinfo->dest->next_output_byte = entropy->next_output_byte; - cinfo->dest->free_in_buffer = entropy->free_in_buffer; - - /* Update restart-interval state too */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) { - entropy->restarts_to_go = cinfo->restart_interval; - entropy->next_restart_num++; - entropy->next_restart_num &= 7; - } - entropy->restarts_to_go--; - } - - return TRUE; -} - - -/* - * Finish up at the end of a Huffman-compressed progressive scan. - */ - -METHODDEF(void) -finish_pass_phuff (j_compress_ptr cinfo) -{ - phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; - - entropy->next_output_byte = cinfo->dest->next_output_byte; - entropy->free_in_buffer = cinfo->dest->free_in_buffer; - - /* Flush out any buffered data */ - emit_eobrun(entropy); - flush_bits(entropy); - - cinfo->dest->next_output_byte = entropy->next_output_byte; - cinfo->dest->free_in_buffer = entropy->free_in_buffer; -} - - -/* - * Finish up a statistics-gathering pass and create the new Huffman tables. - */ - -METHODDEF(void) -finish_pass_gather_phuff (j_compress_ptr cinfo) -{ - phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; - boolean is_DC_band; - int ci, tbl; - jpeg_component_info * compptr; - JHUFF_TBL **htblptr; - boolean did[NUM_HUFF_TBLS]; - - /* Flush out buffered data (all we care about is counting the EOB symbol) */ - emit_eobrun(entropy); - - is_DC_band = (cinfo->Ss == 0); - - /* It's important not to apply jpeg_gen_optimal_table more than once - * per table, because it clobbers the input frequency counts! - */ - MEMZERO(did, SIZEOF(did)); - - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - if (is_DC_band) { - if (cinfo->Ah != 0) /* DC refinement needs no table */ - continue; - tbl = compptr->dc_tbl_no; - } else { - tbl = compptr->ac_tbl_no; - } - if (! did[tbl]) { - if (is_DC_band) - htblptr = & cinfo->dc_huff_tbl_ptrs[tbl]; - else - htblptr = & cinfo->ac_huff_tbl_ptrs[tbl]; - if (*htblptr == NULL) - *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); - jpeg_gen_optimal_table(cinfo, *htblptr, entropy->count_ptrs[tbl]); - did[tbl] = TRUE; - } - } -} - - -/* - * Module initialization routine for progressive Huffman entropy encoding. - */ - -GLOBAL(void) -jinit_phuff_encoder (j_compress_ptr cinfo) -{ - phuff_entropy_ptr entropy; - int i; - - entropy = (phuff_entropy_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(phuff_entropy_encoder)); - cinfo->entropy = (struct jpeg_entropy_encoder *) entropy; - entropy->pub.start_pass = start_pass_phuff; - - /* Mark tables unallocated */ - for (i = 0; i < NUM_HUFF_TBLS; i++) { - entropy->derived_tbls[i] = NULL; - entropy->count_ptrs[i] = NULL; - } - entropy->bit_buffer = NULL; /* needed only in AC refinement scan */ -} - -#endif /* C_PROGRESSIVE_SUPPORTED */ diff --git a/Build/source/libs/jpeg/jcprepct.c b/Build/source/libs/jpeg/jcprepct.c deleted file mode 100644 index fa93333db20..00000000000 --- a/Build/source/libs/jpeg/jcprepct.c +++ /dev/null @@ -1,354 +0,0 @@ -/* - * jcprepct.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the compression preprocessing controller. - * This controller manages the color conversion, downsampling, - * and edge expansion steps. - * - * Most of the complexity here is associated with buffering input rows - * as required by the downsampler. See the comments at the head of - * jcsample.c for the downsampler's needs. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* At present, jcsample.c can request context rows only for smoothing. - * In the future, we might also need context rows for CCIR601 sampling - * or other more-complex downsampling procedures. The code to support - * context rows should be compiled only if needed. - */ -#ifdef INPUT_SMOOTHING_SUPPORTED -#define CONTEXT_ROWS_SUPPORTED -#endif - - -/* - * For the simple (no-context-row) case, we just need to buffer one - * row group's worth of pixels for the downsampling step. At the bottom of - * the image, we pad to a full row group by replicating the last pixel row. - * The downsampler's last output row is then replicated if needed to pad - * out to a full iMCU row. - * - * When providing context rows, we must buffer three row groups' worth of - * pixels. Three row groups are physically allocated, but the row pointer - * arrays are made five row groups high, with the extra pointers above and - * below "wrapping around" to point to the last and first real row groups. - * This allows the downsampler to access the proper context rows. - * At the top and bottom of the image, we create dummy context rows by - * copying the first or last real pixel row. This copying could be avoided - * by pointer hacking as is done in jdmainct.c, but it doesn't seem worth the - * trouble on the compression side. - */ - - -/* Private buffer controller object */ - -typedef struct { - struct jpeg_c_prep_controller pub; /* public fields */ - - /* Downsampling input buffer. This buffer holds color-converted data - * until we have enough to do a downsample step. - */ - JSAMPARRAY color_buf[MAX_COMPONENTS]; - - JDIMENSION rows_to_go; /* counts rows remaining in source image */ - int next_buf_row; /* index of next row to store in color_buf */ - -#ifdef CONTEXT_ROWS_SUPPORTED /* only needed for context case */ - int this_row_group; /* starting row index of group to process */ - int next_buf_stop; /* downsample when we reach this index */ -#endif -} my_prep_controller; - -typedef my_prep_controller * my_prep_ptr; - - -/* - * Initialize for a processing pass. - */ - -METHODDEF(void) -start_pass_prep (j_compress_ptr cinfo, J_BUF_MODE pass_mode) -{ - my_prep_ptr prep = (my_prep_ptr) cinfo->prep; - - if (pass_mode != JBUF_PASS_THRU) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - - /* Initialize total-height counter for detecting bottom of image */ - prep->rows_to_go = cinfo->image_height; - /* Mark the conversion buffer empty */ - prep->next_buf_row = 0; -#ifdef CONTEXT_ROWS_SUPPORTED - /* Preset additional state variables for context mode. - * These aren't used in non-context mode, so we needn't test which mode. - */ - prep->this_row_group = 0; - /* Set next_buf_stop to stop after two row groups have been read in. */ - prep->next_buf_stop = 2 * cinfo->max_v_samp_factor; -#endif -} - - -/* - * Expand an image vertically from height input_rows to height output_rows, - * by duplicating the bottom row. - */ - -LOCAL(void) -expand_bottom_edge (JSAMPARRAY image_data, JDIMENSION num_cols, - int input_rows, int output_rows) -{ - register int row; - - for (row = input_rows; row < output_rows; row++) { - jcopy_sample_rows(image_data, input_rows-1, image_data, row, - 1, num_cols); - } -} - - -/* - * Process some data in the simple no-context case. - * - * Preprocessor output data is counted in "row groups". A row group - * is defined to be v_samp_factor sample rows of each component. - * Downsampling will produce this much data from each max_v_samp_factor - * input rows. - */ - -METHODDEF(void) -pre_process_data (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, - JDIMENSION in_rows_avail, - JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr, - JDIMENSION out_row_groups_avail) -{ - my_prep_ptr prep = (my_prep_ptr) cinfo->prep; - int numrows, ci; - JDIMENSION inrows; - jpeg_component_info * compptr; - - while (*in_row_ctr < in_rows_avail && - *out_row_group_ctr < out_row_groups_avail) { - /* Do color conversion to fill the conversion buffer. */ - inrows = in_rows_avail - *in_row_ctr; - numrows = cinfo->max_v_samp_factor - prep->next_buf_row; - numrows = (int) MIN((JDIMENSION) numrows, inrows); - (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr, - prep->color_buf, - (JDIMENSION) prep->next_buf_row, - numrows); - *in_row_ctr += numrows; - prep->next_buf_row += numrows; - prep->rows_to_go -= numrows; - /* If at bottom of image, pad to fill the conversion buffer. */ - if (prep->rows_to_go == 0 && - prep->next_buf_row < cinfo->max_v_samp_factor) { - for (ci = 0; ci < cinfo->num_components; ci++) { - expand_bottom_edge(prep->color_buf[ci], cinfo->image_width, - prep->next_buf_row, cinfo->max_v_samp_factor); - } - prep->next_buf_row = cinfo->max_v_samp_factor; - } - /* If we've filled the conversion buffer, empty it. */ - if (prep->next_buf_row == cinfo->max_v_samp_factor) { - (*cinfo->downsample->downsample) (cinfo, - prep->color_buf, (JDIMENSION) 0, - output_buf, *out_row_group_ctr); - prep->next_buf_row = 0; - (*out_row_group_ctr)++; - } - /* If at bottom of image, pad the output to a full iMCU height. - * Note we assume the caller is providing a one-iMCU-height output buffer! - */ - if (prep->rows_to_go == 0 && - *out_row_group_ctr < out_row_groups_avail) { - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - expand_bottom_edge(output_buf[ci], - compptr->width_in_blocks * DCTSIZE, - (int) (*out_row_group_ctr * compptr->v_samp_factor), - (int) (out_row_groups_avail * compptr->v_samp_factor)); - } - *out_row_group_ctr = out_row_groups_avail; - break; /* can exit outer loop without test */ - } - } -} - - -#ifdef CONTEXT_ROWS_SUPPORTED - -/* - * Process some data in the context case. - */ - -METHODDEF(void) -pre_process_context (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, - JDIMENSION in_rows_avail, - JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr, - JDIMENSION out_row_groups_avail) -{ - my_prep_ptr prep = (my_prep_ptr) cinfo->prep; - int numrows, ci; - int buf_height = cinfo->max_v_samp_factor * 3; - JDIMENSION inrows; - - while (*out_row_group_ctr < out_row_groups_avail) { - if (*in_row_ctr < in_rows_avail) { - /* Do color conversion to fill the conversion buffer. */ - inrows = in_rows_avail - *in_row_ctr; - numrows = prep->next_buf_stop - prep->next_buf_row; - numrows = (int) MIN((JDIMENSION) numrows, inrows); - (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr, - prep->color_buf, - (JDIMENSION) prep->next_buf_row, - numrows); - /* Pad at top of image, if first time through */ - if (prep->rows_to_go == cinfo->image_height) { - for (ci = 0; ci < cinfo->num_components; ci++) { - int row; - for (row = 1; row <= cinfo->max_v_samp_factor; row++) { - jcopy_sample_rows(prep->color_buf[ci], 0, - prep->color_buf[ci], -row, - 1, cinfo->image_width); - } - } - } - *in_row_ctr += numrows; - prep->next_buf_row += numrows; - prep->rows_to_go -= numrows; - } else { - /* Return for more data, unless we are at the bottom of the image. */ - if (prep->rows_to_go != 0) - break; - /* When at bottom of image, pad to fill the conversion buffer. */ - if (prep->next_buf_row < prep->next_buf_stop) { - for (ci = 0; ci < cinfo->num_components; ci++) { - expand_bottom_edge(prep->color_buf[ci], cinfo->image_width, - prep->next_buf_row, prep->next_buf_stop); - } - prep->next_buf_row = prep->next_buf_stop; - } - } - /* If we've gotten enough data, downsample a row group. */ - if (prep->next_buf_row == prep->next_buf_stop) { - (*cinfo->downsample->downsample) (cinfo, - prep->color_buf, - (JDIMENSION) prep->this_row_group, - output_buf, *out_row_group_ctr); - (*out_row_group_ctr)++; - /* Advance pointers with wraparound as necessary. */ - prep->this_row_group += cinfo->max_v_samp_factor; - if (prep->this_row_group >= buf_height) - prep->this_row_group = 0; - if (prep->next_buf_row >= buf_height) - prep->next_buf_row = 0; - prep->next_buf_stop = prep->next_buf_row + cinfo->max_v_samp_factor; - } - } -} - - -/* - * Create the wrapped-around downsampling input buffer needed for context mode. - */ - -LOCAL(void) -create_context_buffer (j_compress_ptr cinfo) -{ - my_prep_ptr prep = (my_prep_ptr) cinfo->prep; - int rgroup_height = cinfo->max_v_samp_factor; - int ci, i; - jpeg_component_info * compptr; - JSAMPARRAY true_buffer, fake_buffer; - - /* Grab enough space for fake row pointers for all the components; - * we need five row groups' worth of pointers for each component. - */ - fake_buffer = (JSAMPARRAY) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (cinfo->num_components * 5 * rgroup_height) * - SIZEOF(JSAMPROW)); - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* Allocate the actual buffer space (3 row groups) for this component. - * We make the buffer wide enough to allow the downsampler to edge-expand - * horizontally within the buffer, if it so chooses. - */ - true_buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) (((long) compptr->width_in_blocks * DCTSIZE * - cinfo->max_h_samp_factor) / compptr->h_samp_factor), - (JDIMENSION) (3 * rgroup_height)); - /* Copy true buffer row pointers into the middle of the fake row array */ - MEMCOPY(fake_buffer + rgroup_height, true_buffer, - 3 * rgroup_height * SIZEOF(JSAMPROW)); - /* Fill in the above and below wraparound pointers */ - for (i = 0; i < rgroup_height; i++) { - fake_buffer[i] = true_buffer[2 * rgroup_height + i]; - fake_buffer[4 * rgroup_height + i] = true_buffer[i]; - } - prep->color_buf[ci] = fake_buffer + rgroup_height; - fake_buffer += 5 * rgroup_height; /* point to space for next component */ - } -} - -#endif /* CONTEXT_ROWS_SUPPORTED */ - - -/* - * Initialize preprocessing controller. - */ - -GLOBAL(void) -jinit_c_prep_controller (j_compress_ptr cinfo, boolean need_full_buffer) -{ - my_prep_ptr prep; - int ci; - jpeg_component_info * compptr; - - if (need_full_buffer) /* safety check */ - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - - prep = (my_prep_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_prep_controller)); - cinfo->prep = (struct jpeg_c_prep_controller *) prep; - prep->pub.start_pass = start_pass_prep; - - /* Allocate the color conversion buffer. - * We make the buffer wide enough to allow the downsampler to edge-expand - * horizontally within the buffer, if it so chooses. - */ - if (cinfo->downsample->need_context_rows) { - /* Set up to provide context rows */ -#ifdef CONTEXT_ROWS_SUPPORTED - prep->pub.pre_process_data = pre_process_context; - create_context_buffer(cinfo); -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } else { - /* No context, just make it tall enough for one row group */ - prep->pub.pre_process_data = pre_process_data; - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - prep->color_buf[ci] = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) (((long) compptr->width_in_blocks * DCTSIZE * - cinfo->max_h_samp_factor) / compptr->h_samp_factor), - (JDIMENSION) cinfo->max_v_samp_factor); - } - } -} diff --git a/Build/source/libs/jpeg/jcsample.c b/Build/source/libs/jpeg/jcsample.c deleted file mode 100644 index 212ec8757c4..00000000000 --- a/Build/source/libs/jpeg/jcsample.c +++ /dev/null @@ -1,519 +0,0 @@ -/* - * jcsample.c - * - * Copyright (C) 1991-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains downsampling routines. - * - * Downsampling input data is counted in "row groups". A row group - * is defined to be max_v_samp_factor pixel rows of each component, - * from which the downsampler produces v_samp_factor sample rows. - * A single row group is processed in each call to the downsampler module. - * - * The downsampler is responsible for edge-expansion of its output data - * to fill an integral number of DCT blocks horizontally. The source buffer - * may be modified if it is helpful for this purpose (the source buffer is - * allocated wide enough to correspond to the desired output width). - * The caller (the prep controller) is responsible for vertical padding. - * - * The downsampler may request "context rows" by setting need_context_rows - * during startup. In this case, the input arrays will contain at least - * one row group's worth of pixels above and below the passed-in data; - * the caller will create dummy rows at image top and bottom by replicating - * the first or last real pixel row. - * - * An excellent reference for image resampling is - * Digital Image Warping, George Wolberg, 1990. - * Pub. by IEEE Computer Society Press, Los Alamitos, CA. ISBN 0-8186-8944-7. - * - * The downsampling algorithm used here is a simple average of the source - * pixels covered by the output pixel. The hi-falutin sampling literature - * refers to this as a "box filter". In general the characteristics of a box - * filter are not very good, but for the specific cases we normally use (1:1 - * and 2:1 ratios) the box is equivalent to a "triangle filter" which is not - * nearly so bad. If you intend to use other sampling ratios, you'd be well - * advised to improve this code. - * - * A simple input-smoothing capability is provided. This is mainly intended - * for cleaning up color-dithered GIF input files (if you find it inadequate, - * we suggest using an external filtering program such as pnmconvol). When - * enabled, each input pixel P is replaced by a weighted sum of itself and its - * eight neighbors. P's weight is 1-8*SF and each neighbor's weight is SF, - * where SF = (smoothing_factor / 1024). - * Currently, smoothing is only supported for 2h2v sampling factors. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Pointer to routine to downsample a single component */ -typedef JMETHOD(void, downsample1_ptr, - (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY output_data)); - -/* Private subobject */ - -typedef struct { - struct jpeg_downsampler pub; /* public fields */ - - /* Downsampling method pointers, one per component */ - downsample1_ptr methods[MAX_COMPONENTS]; -} my_downsampler; - -typedef my_downsampler * my_downsample_ptr; - - -/* - * Initialize for a downsampling pass. - */ - -METHODDEF(void) -start_pass_downsample (j_compress_ptr cinfo) -{ - /* no work for now */ -} - - -/* - * Expand a component horizontally from width input_cols to width output_cols, - * by duplicating the rightmost samples. - */ - -LOCAL(void) -expand_right_edge (JSAMPARRAY image_data, int num_rows, - JDIMENSION input_cols, JDIMENSION output_cols) -{ - register JSAMPROW ptr; - register JSAMPLE pixval; - register int count; - int row; - int numcols = (int) (output_cols - input_cols); - - if (numcols > 0) { - for (row = 0; row < num_rows; row++) { - ptr = image_data[row] + input_cols; - pixval = ptr[-1]; /* don't need GETJSAMPLE() here */ - for (count = numcols; count > 0; count--) - *ptr++ = pixval; - } - } -} - - -/* - * Do downsampling for a whole row group (all components). - * - * In this version we simply downsample each component independently. - */ - -METHODDEF(void) -sep_downsample (j_compress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION in_row_index, - JSAMPIMAGE output_buf, JDIMENSION out_row_group_index) -{ - my_downsample_ptr downsample = (my_downsample_ptr) cinfo->downsample; - int ci; - jpeg_component_info * compptr; - JSAMPARRAY in_ptr, out_ptr; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - in_ptr = input_buf[ci] + in_row_index; - out_ptr = output_buf[ci] + (out_row_group_index * compptr->v_samp_factor); - (*downsample->methods[ci]) (cinfo, compptr, in_ptr, out_ptr); - } -} - - -/* - * Downsample pixel values of a single component. - * One row group is processed per call. - * This version handles arbitrary integral sampling ratios, without smoothing. - * Note that this version is not actually used for customary sampling ratios. - */ - -METHODDEF(void) -int_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY output_data) -{ - int inrow, outrow, h_expand, v_expand, numpix, numpix2, h, v; - JDIMENSION outcol, outcol_h; /* outcol_h == outcol*h_expand */ - JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; - JSAMPROW inptr, outptr; - INT32 outvalue; - - h_expand = cinfo->max_h_samp_factor / compptr->h_samp_factor; - v_expand = cinfo->max_v_samp_factor / compptr->v_samp_factor; - numpix = h_expand * v_expand; - numpix2 = numpix/2; - - /* Expand input data enough to let all the output samples be generated - * by the standard loop. Special-casing padded output would be more - * efficient. - */ - expand_right_edge(input_data, cinfo->max_v_samp_factor, - cinfo->image_width, output_cols * h_expand); - - inrow = 0; - for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { - outptr = output_data[outrow]; - for (outcol = 0, outcol_h = 0; outcol < output_cols; - outcol++, outcol_h += h_expand) { - outvalue = 0; - for (v = 0; v < v_expand; v++) { - inptr = input_data[inrow+v] + outcol_h; - for (h = 0; h < h_expand; h++) { - outvalue += (INT32) GETJSAMPLE(*inptr++); - } - } - *outptr++ = (JSAMPLE) ((outvalue + numpix2) / numpix); - } - inrow += v_expand; - } -} - - -/* - * Downsample pixel values of a single component. - * This version handles the special case of a full-size component, - * without smoothing. - */ - -METHODDEF(void) -fullsize_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY output_data) -{ - /* Copy the data */ - jcopy_sample_rows(input_data, 0, output_data, 0, - cinfo->max_v_samp_factor, cinfo->image_width); - /* Edge-expand */ - expand_right_edge(output_data, cinfo->max_v_samp_factor, - cinfo->image_width, compptr->width_in_blocks * DCTSIZE); -} - - -/* - * Downsample pixel values of a single component. - * This version handles the common case of 2:1 horizontal and 1:1 vertical, - * without smoothing. - * - * A note about the "bias" calculations: when rounding fractional values to - * integer, we do not want to always round 0.5 up to the next integer. - * If we did that, we'd introduce a noticeable bias towards larger values. - * Instead, this code is arranged so that 0.5 will be rounded up or down at - * alternate pixel locations (a simple ordered dither pattern). - */ - -METHODDEF(void) -h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY output_data) -{ - int outrow; - JDIMENSION outcol; - JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; - register JSAMPROW inptr, outptr; - register int bias; - - /* Expand input data enough to let all the output samples be generated - * by the standard loop. Special-casing padded output would be more - * efficient. - */ - expand_right_edge(input_data, cinfo->max_v_samp_factor, - cinfo->image_width, output_cols * 2); - - for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { - outptr = output_data[outrow]; - inptr = input_data[outrow]; - bias = 0; /* bias = 0,1,0,1,... for successive samples */ - for (outcol = 0; outcol < output_cols; outcol++) { - *outptr++ = (JSAMPLE) ((GETJSAMPLE(*inptr) + GETJSAMPLE(inptr[1]) - + bias) >> 1); - bias ^= 1; /* 0=>1, 1=>0 */ - inptr += 2; - } - } -} - - -/* - * Downsample pixel values of a single component. - * This version handles the standard case of 2:1 horizontal and 2:1 vertical, - * without smoothing. - */ - -METHODDEF(void) -h2v2_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY output_data) -{ - int inrow, outrow; - JDIMENSION outcol; - JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; - register JSAMPROW inptr0, inptr1, outptr; - register int bias; - - /* Expand input data enough to let all the output samples be generated - * by the standard loop. Special-casing padded output would be more - * efficient. - */ - expand_right_edge(input_data, cinfo->max_v_samp_factor, - cinfo->image_width, output_cols * 2); - - inrow = 0; - for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { - outptr = output_data[outrow]; - inptr0 = input_data[inrow]; - inptr1 = input_data[inrow+1]; - bias = 1; /* bias = 1,2,1,2,... for successive samples */ - for (outcol = 0; outcol < output_cols; outcol++) { - *outptr++ = (JSAMPLE) ((GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + - GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]) - + bias) >> 2); - bias ^= 3; /* 1=>2, 2=>1 */ - inptr0 += 2; inptr1 += 2; - } - inrow += 2; - } -} - - -#ifdef INPUT_SMOOTHING_SUPPORTED - -/* - * Downsample pixel values of a single component. - * This version handles the standard case of 2:1 horizontal and 2:1 vertical, - * with smoothing. One row of context is required. - */ - -METHODDEF(void) -h2v2_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY output_data) -{ - int inrow, outrow; - JDIMENSION colctr; - JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; - register JSAMPROW inptr0, inptr1, above_ptr, below_ptr, outptr; - INT32 membersum, neighsum, memberscale, neighscale; - - /* Expand input data enough to let all the output samples be generated - * by the standard loop. Special-casing padded output would be more - * efficient. - */ - expand_right_edge(input_data - 1, cinfo->max_v_samp_factor + 2, - cinfo->image_width, output_cols * 2); - - /* We don't bother to form the individual "smoothed" input pixel values; - * we can directly compute the output which is the average of the four - * smoothed values. Each of the four member pixels contributes a fraction - * (1-8*SF) to its own smoothed image and a fraction SF to each of the three - * other smoothed pixels, therefore a total fraction (1-5*SF)/4 to the final - * output. The four corner-adjacent neighbor pixels contribute a fraction - * SF to just one smoothed pixel, or SF/4 to the final output; while the - * eight edge-adjacent neighbors contribute SF to each of two smoothed - * pixels, or SF/2 overall. In order to use integer arithmetic, these - * factors are scaled by 2^16 = 65536. - * Also recall that SF = smoothing_factor / 1024. - */ - - memberscale = 16384 - cinfo->smoothing_factor * 80; /* scaled (1-5*SF)/4 */ - neighscale = cinfo->smoothing_factor * 16; /* scaled SF/4 */ - - inrow = 0; - for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { - outptr = output_data[outrow]; - inptr0 = input_data[inrow]; - inptr1 = input_data[inrow+1]; - above_ptr = input_data[inrow-1]; - below_ptr = input_data[inrow+2]; - - /* Special case for first column: pretend column -1 is same as column 0 */ - membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + - GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); - neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + - GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + - GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[2]) + - GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[2]); - neighsum += neighsum; - neighsum += GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[2]) + - GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[2]); - membersum = membersum * memberscale + neighsum * neighscale; - *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); - inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2; - - for (colctr = output_cols - 2; colctr > 0; colctr--) { - /* sum of pixels directly mapped to this output element */ - membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + - GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); - /* sum of edge-neighbor pixels */ - neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + - GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + - GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[2]) + - GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[2]); - /* The edge-neighbors count twice as much as corner-neighbors */ - neighsum += neighsum; - /* Add in the corner-neighbors */ - neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[2]) + - GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[2]); - /* form final output scaled up by 2^16 */ - membersum = membersum * memberscale + neighsum * neighscale; - /* round, descale and output it */ - *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); - inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2; - } - - /* Special case for last column */ - membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + - GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); - neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + - GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + - GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[1]) + - GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[1]); - neighsum += neighsum; - neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[1]) + - GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[1]); - membersum = membersum * memberscale + neighsum * neighscale; - *outptr = (JSAMPLE) ((membersum + 32768) >> 16); - - inrow += 2; - } -} - - -/* - * Downsample pixel values of a single component. - * This version handles the special case of a full-size component, - * with smoothing. One row of context is required. - */ - -METHODDEF(void) -fullsize_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr, - JSAMPARRAY input_data, JSAMPARRAY output_data) -{ - int outrow; - JDIMENSION colctr; - JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; - register JSAMPROW inptr, above_ptr, below_ptr, outptr; - INT32 membersum, neighsum, memberscale, neighscale; - int colsum, lastcolsum, nextcolsum; - - /* Expand input data enough to let all the output samples be generated - * by the standard loop. Special-casing padded output would be more - * efficient. - */ - expand_right_edge(input_data - 1, cinfo->max_v_samp_factor + 2, - cinfo->image_width, output_cols); - - /* Each of the eight neighbor pixels contributes a fraction SF to the - * smoothed pixel, while the main pixel contributes (1-8*SF). In order - * to use integer arithmetic, these factors are multiplied by 2^16 = 65536. - * Also recall that SF = smoothing_factor / 1024. - */ - - memberscale = 65536L - cinfo->smoothing_factor * 512L; /* scaled 1-8*SF */ - neighscale = cinfo->smoothing_factor * 64; /* scaled SF */ - - for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { - outptr = output_data[outrow]; - inptr = input_data[outrow]; - above_ptr = input_data[outrow-1]; - below_ptr = input_data[outrow+1]; - - /* Special case for first column */ - colsum = GETJSAMPLE(*above_ptr++) + GETJSAMPLE(*below_ptr++) + - GETJSAMPLE(*inptr); - membersum = GETJSAMPLE(*inptr++); - nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) + - GETJSAMPLE(*inptr); - neighsum = colsum + (colsum - membersum) + nextcolsum; - membersum = membersum * memberscale + neighsum * neighscale; - *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); - lastcolsum = colsum; colsum = nextcolsum; - - for (colctr = output_cols - 2; colctr > 0; colctr--) { - membersum = GETJSAMPLE(*inptr++); - above_ptr++; below_ptr++; - nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) + - GETJSAMPLE(*inptr); - neighsum = lastcolsum + (colsum - membersum) + nextcolsum; - membersum = membersum * memberscale + neighsum * neighscale; - *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); - lastcolsum = colsum; colsum = nextcolsum; - } - - /* Special case for last column */ - membersum = GETJSAMPLE(*inptr); - neighsum = lastcolsum + (colsum - membersum) + colsum; - membersum = membersum * memberscale + neighsum * neighscale; - *outptr = (JSAMPLE) ((membersum + 32768) >> 16); - - } -} - -#endif /* INPUT_SMOOTHING_SUPPORTED */ - - -/* - * Module initialization routine for downsampling. - * Note that we must select a routine for each component. - */ - -GLOBAL(void) -jinit_downsampler (j_compress_ptr cinfo) -{ - my_downsample_ptr downsample; - int ci; - jpeg_component_info * compptr; - boolean smoothok = TRUE; - - downsample = (my_downsample_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_downsampler)); - cinfo->downsample = (struct jpeg_downsampler *) downsample; - downsample->pub.start_pass = start_pass_downsample; - downsample->pub.downsample = sep_downsample; - downsample->pub.need_context_rows = FALSE; - - if (cinfo->CCIR601_sampling) - ERREXIT(cinfo, JERR_CCIR601_NOTIMPL); - - /* Verify we can handle the sampling factors, and set up method pointers */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - if (compptr->h_samp_factor == cinfo->max_h_samp_factor && - compptr->v_samp_factor == cinfo->max_v_samp_factor) { -#ifdef INPUT_SMOOTHING_SUPPORTED - if (cinfo->smoothing_factor) { - downsample->methods[ci] = fullsize_smooth_downsample; - downsample->pub.need_context_rows = TRUE; - } else -#endif - downsample->methods[ci] = fullsize_downsample; - } else if (compptr->h_samp_factor * 2 == cinfo->max_h_samp_factor && - compptr->v_samp_factor == cinfo->max_v_samp_factor) { - smoothok = FALSE; - downsample->methods[ci] = h2v1_downsample; - } else if (compptr->h_samp_factor * 2 == cinfo->max_h_samp_factor && - compptr->v_samp_factor * 2 == cinfo->max_v_samp_factor) { -#ifdef INPUT_SMOOTHING_SUPPORTED - if (cinfo->smoothing_factor) { - downsample->methods[ci] = h2v2_smooth_downsample; - downsample->pub.need_context_rows = TRUE; - } else -#endif - downsample->methods[ci] = h2v2_downsample; - } else if ((cinfo->max_h_samp_factor % compptr->h_samp_factor) == 0 && - (cinfo->max_v_samp_factor % compptr->v_samp_factor) == 0) { - smoothok = FALSE; - downsample->methods[ci] = int_downsample; - } else - ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL); - } - -#ifdef INPUT_SMOOTHING_SUPPORTED - if (cinfo->smoothing_factor && !smoothok) - TRACEMS(cinfo, 0, JTRC_SMOOTH_NOTIMPL); -#endif -} diff --git a/Build/source/libs/jpeg/jctrans.c b/Build/source/libs/jpeg/jctrans.c deleted file mode 100644 index 0e6d70769df..00000000000 --- a/Build/source/libs/jpeg/jctrans.c +++ /dev/null @@ -1,388 +0,0 @@ -/* - * jctrans.c - * - * Copyright (C) 1995-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains library routines for transcoding compression, - * that is, writing raw DCT coefficient arrays to an output JPEG file. - * The routines in jcapimin.c will also be needed by a transcoder. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Forward declarations */ -LOCAL(void) transencode_master_selection - JPP((j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays)); -LOCAL(void) transencode_coef_controller - JPP((j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays)); - - -/* - * Compression initialization for writing raw-coefficient data. - * Before calling this, all parameters and a data destination must be set up. - * Call jpeg_finish_compress() to actually write the data. - * - * The number of passed virtual arrays must match cinfo->num_components. - * Note that the virtual arrays need not be filled or even realized at - * the time write_coefficients is called; indeed, if the virtual arrays - * were requested from this compression object's memory manager, they - * typically will be realized during this routine and filled afterwards. - */ - -GLOBAL(void) -jpeg_write_coefficients (j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays) -{ - if (cinfo->global_state != CSTATE_START) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - /* Mark all tables to be written */ - jpeg_suppress_tables(cinfo, FALSE); - /* (Re)initialize error mgr and destination modules */ - (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); - (*cinfo->dest->init_destination) (cinfo); - /* Perform master selection of active modules */ - transencode_master_selection(cinfo, coef_arrays); - /* Wait for jpeg_finish_compress() call */ - cinfo->next_scanline = 0; /* so jpeg_write_marker works */ - cinfo->global_state = CSTATE_WRCOEFS; -} - - -/* - * Initialize the compression object with default parameters, - * then copy from the source object all parameters needed for lossless - * transcoding. Parameters that can be varied without loss (such as - * scan script and Huffman optimization) are left in their default states. - */ - -GLOBAL(void) -jpeg_copy_critical_parameters (j_decompress_ptr srcinfo, - j_compress_ptr dstinfo) -{ - JQUANT_TBL ** qtblptr; - jpeg_component_info *incomp, *outcomp; - JQUANT_TBL *c_quant, *slot_quant; - int tblno, ci, coefi; - - /* Safety check to ensure start_compress not called yet. */ - if (dstinfo->global_state != CSTATE_START) - ERREXIT1(dstinfo, JERR_BAD_STATE, dstinfo->global_state); - /* Copy fundamental image dimensions */ - dstinfo->image_width = srcinfo->image_width; - dstinfo->image_height = srcinfo->image_height; - dstinfo->input_components = srcinfo->num_components; - dstinfo->in_color_space = srcinfo->jpeg_color_space; - /* Initialize all parameters to default values */ - jpeg_set_defaults(dstinfo); - /* jpeg_set_defaults may choose wrong colorspace, eg YCbCr if input is RGB. - * Fix it to get the right header markers for the image colorspace. - */ - jpeg_set_colorspace(dstinfo, srcinfo->jpeg_color_space); - dstinfo->data_precision = srcinfo->data_precision; - dstinfo->CCIR601_sampling = srcinfo->CCIR601_sampling; - /* Copy the source's quantization tables. */ - for (tblno = 0; tblno < NUM_QUANT_TBLS; tblno++) { - if (srcinfo->quant_tbl_ptrs[tblno] != NULL) { - qtblptr = & dstinfo->quant_tbl_ptrs[tblno]; - if (*qtblptr == NULL) - *qtblptr = jpeg_alloc_quant_table((j_common_ptr) dstinfo); - MEMCOPY((*qtblptr)->quantval, - srcinfo->quant_tbl_ptrs[tblno]->quantval, - SIZEOF((*qtblptr)->quantval)); - (*qtblptr)->sent_table = FALSE; - } - } - /* Copy the source's per-component info. - * Note we assume jpeg_set_defaults has allocated the dest comp_info array. - */ - dstinfo->num_components = srcinfo->num_components; - if (dstinfo->num_components < 1 || dstinfo->num_components > MAX_COMPONENTS) - ERREXIT2(dstinfo, JERR_COMPONENT_COUNT, dstinfo->num_components, - MAX_COMPONENTS); - for (ci = 0, incomp = srcinfo->comp_info, outcomp = dstinfo->comp_info; - ci < dstinfo->num_components; ci++, incomp++, outcomp++) { - outcomp->component_id = incomp->component_id; - outcomp->h_samp_factor = incomp->h_samp_factor; - outcomp->v_samp_factor = incomp->v_samp_factor; - outcomp->quant_tbl_no = incomp->quant_tbl_no; - /* Make sure saved quantization table for component matches the qtable - * slot. If not, the input file re-used this qtable slot. - * IJG encoder currently cannot duplicate this. - */ - tblno = outcomp->quant_tbl_no; - if (tblno < 0 || tblno >= NUM_QUANT_TBLS || - srcinfo->quant_tbl_ptrs[tblno] == NULL) - ERREXIT1(dstinfo, JERR_NO_QUANT_TABLE, tblno); - slot_quant = srcinfo->quant_tbl_ptrs[tblno]; - c_quant = incomp->quant_table; - if (c_quant != NULL) { - for (coefi = 0; coefi < DCTSIZE2; coefi++) { - if (c_quant->quantval[coefi] != slot_quant->quantval[coefi]) - ERREXIT1(dstinfo, JERR_MISMATCHED_QUANT_TABLE, tblno); - } - } - /* Note: we do not copy the source's Huffman table assignments; - * instead we rely on jpeg_set_colorspace to have made a suitable choice. - */ - } - /* Also copy JFIF version and resolution information, if available. - * Strictly speaking this isn't "critical" info, but it's nearly - * always appropriate to copy it if available. In particular, - * if the application chooses to copy JFIF 1.02 extension markers from - * the source file, we need to copy the version to make sure we don't - * emit a file that has 1.02 extensions but a claimed version of 1.01. - * We will *not*, however, copy version info from mislabeled "2.01" files. - */ - if (srcinfo->saw_JFIF_marker) { - if (srcinfo->JFIF_major_version == 1) { - dstinfo->JFIF_major_version = srcinfo->JFIF_major_version; - dstinfo->JFIF_minor_version = srcinfo->JFIF_minor_version; - } - dstinfo->density_unit = srcinfo->density_unit; - dstinfo->X_density = srcinfo->X_density; - dstinfo->Y_density = srcinfo->Y_density; - } -} - - -/* - * Master selection of compression modules for transcoding. - * This substitutes for jcinit.c's initialization of the full compressor. - */ - -LOCAL(void) -transencode_master_selection (j_compress_ptr cinfo, - jvirt_barray_ptr * coef_arrays) -{ - /* Although we don't actually use input_components for transcoding, - * jcmaster.c's initial_setup will complain if input_components is 0. - */ - cinfo->input_components = 1; - /* Initialize master control (includes parameter checking/processing) */ - jinit_c_master_control(cinfo, TRUE /* transcode only */); - - /* Entropy encoding: either Huffman or arithmetic coding. */ - if (cinfo->arith_code) { - ERREXIT(cinfo, JERR_ARITH_NOTIMPL); - } else { - if (cinfo->progressive_mode) { -#ifdef C_PROGRESSIVE_SUPPORTED - jinit_phuff_encoder(cinfo); -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } else - jinit_huff_encoder(cinfo); - } - - /* We need a special coefficient buffer controller. */ - transencode_coef_controller(cinfo, coef_arrays); - - jinit_marker_writer(cinfo); - - /* We can now tell the memory manager to allocate virtual arrays. */ - (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); - - /* Write the datastream header (SOI, JFIF) immediately. - * Frame and scan headers are postponed till later. - * This lets application insert special markers after the SOI. - */ - (*cinfo->marker->write_file_header) (cinfo); -} - - -/* - * The rest of this file is a special implementation of the coefficient - * buffer controller. This is similar to jccoefct.c, but it handles only - * output from presupplied virtual arrays. Furthermore, we generate any - * dummy padding blocks on-the-fly rather than expecting them to be present - * in the arrays. - */ - -/* Private buffer controller object */ - -typedef struct { - struct jpeg_c_coef_controller pub; /* public fields */ - - JDIMENSION iMCU_row_num; /* iMCU row # within image */ - JDIMENSION mcu_ctr; /* counts MCUs processed in current row */ - int MCU_vert_offset; /* counts MCU rows within iMCU row */ - int MCU_rows_per_iMCU_row; /* number of such rows needed */ - - /* Virtual block array for each component. */ - jvirt_barray_ptr * whole_image; - - /* Workspace for constructing dummy blocks at right/bottom edges. */ - JBLOCKROW dummy_buffer[C_MAX_BLOCKS_IN_MCU]; -} my_coef_controller; - -typedef my_coef_controller * my_coef_ptr; - - -LOCAL(void) -start_iMCU_row (j_compress_ptr cinfo) -/* Reset within-iMCU-row counters for a new row */ -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - - /* In an interleaved scan, an MCU row is the same as an iMCU row. - * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows. - * But at the bottom of the image, process only what's left. - */ - if (cinfo->comps_in_scan > 1) { - coef->MCU_rows_per_iMCU_row = 1; - } else { - if (coef->iMCU_row_num < (cinfo->total_iMCU_rows-1)) - coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; - else - coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height; - } - - coef->mcu_ctr = 0; - coef->MCU_vert_offset = 0; -} - - -/* - * Initialize for a processing pass. - */ - -METHODDEF(void) -start_pass_coef (j_compress_ptr cinfo, J_BUF_MODE pass_mode) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - - if (pass_mode != JBUF_CRANK_DEST) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - - coef->iMCU_row_num = 0; - start_iMCU_row(cinfo); -} - - -/* - * Process some data. - * We process the equivalent of one fully interleaved MCU row ("iMCU" row) - * per call, ie, v_samp_factor block rows for each component in the scan. - * The data is obtained from the virtual arrays and fed to the entropy coder. - * Returns TRUE if the iMCU row is completed, FALSE if suspended. - * - * NB: input_buf is ignored; it is likely to be a NULL pointer. - */ - -METHODDEF(boolean) -compress_output (j_compress_ptr cinfo, JSAMPIMAGE input_buf) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - JDIMENSION MCU_col_num; /* index of current MCU within row */ - JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; - JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; - int blkn, ci, xindex, yindex, yoffset, blockcnt; - JDIMENSION start_col; - JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; - JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU]; - JBLOCKROW buffer_ptr; - jpeg_component_info *compptr; - - /* Align the virtual buffers for the components used in this scan. */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - buffer[ci] = (*cinfo->mem->access_virt_barray) - ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index], - coef->iMCU_row_num * compptr->v_samp_factor, - (JDIMENSION) compptr->v_samp_factor, FALSE); - } - - /* Loop to process one whole iMCU row */ - for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; - yoffset++) { - for (MCU_col_num = coef->mcu_ctr; MCU_col_num < cinfo->MCUs_per_row; - MCU_col_num++) { - /* Construct list of pointers to DCT blocks belonging to this MCU */ - blkn = 0; /* index of current DCT block within MCU */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - start_col = MCU_col_num * compptr->MCU_width; - blockcnt = (MCU_col_num < last_MCU_col) ? compptr->MCU_width - : compptr->last_col_width; - for (yindex = 0; yindex < compptr->MCU_height; yindex++) { - if (coef->iMCU_row_num < last_iMCU_row || - yindex+yoffset < compptr->last_row_height) { - /* Fill in pointers to real blocks in this row */ - buffer_ptr = buffer[ci][yindex+yoffset] + start_col; - for (xindex = 0; xindex < blockcnt; xindex++) - MCU_buffer[blkn++] = buffer_ptr++; - } else { - /* At bottom of image, need a whole row of dummy blocks */ - xindex = 0; - } - /* Fill in any dummy blocks needed in this row. - * Dummy blocks are filled in the same way as in jccoefct.c: - * all zeroes in the AC entries, DC entries equal to previous - * block's DC value. The init routine has already zeroed the - * AC entries, so we need only set the DC entries correctly. - */ - for (; xindex < compptr->MCU_width; xindex++) { - MCU_buffer[blkn] = coef->dummy_buffer[blkn]; - MCU_buffer[blkn][0][0] = MCU_buffer[blkn-1][0][0]; - blkn++; - } - } - } - /* Try to write the MCU. */ - if (! (*cinfo->entropy->encode_mcu) (cinfo, MCU_buffer)) { - /* Suspension forced; update state counters and exit */ - coef->MCU_vert_offset = yoffset; - coef->mcu_ctr = MCU_col_num; - return FALSE; - } - } - /* Completed an MCU row, but perhaps not an iMCU row */ - coef->mcu_ctr = 0; - } - /* Completed the iMCU row, advance counters for next one */ - coef->iMCU_row_num++; - start_iMCU_row(cinfo); - return TRUE; -} - - -/* - * Initialize coefficient buffer controller. - * - * Each passed coefficient array must be the right size for that - * coefficient: width_in_blocks wide and height_in_blocks high, - * with unitheight at least v_samp_factor. - */ - -LOCAL(void) -transencode_coef_controller (j_compress_ptr cinfo, - jvirt_barray_ptr * coef_arrays) -{ - my_coef_ptr coef; - JBLOCKROW buffer; - int i; - - coef = (my_coef_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_coef_controller)); - cinfo->coef = (struct jpeg_c_coef_controller *) coef; - coef->pub.start_pass = start_pass_coef; - coef->pub.compress_data = compress_output; - - /* Save pointer to virtual arrays */ - coef->whole_image = coef_arrays; - - /* Allocate and pre-zero space for dummy DCT blocks. */ - buffer = (JBLOCKROW) - (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, - C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); - jzero_far((void FAR *) buffer, C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); - for (i = 0; i < C_MAX_BLOCKS_IN_MCU; i++) { - coef->dummy_buffer[i] = buffer + i; - } -} diff --git a/Build/source/libs/jpeg/jdapimin.c b/Build/source/libs/jpeg/jdapimin.c deleted file mode 100644 index cadb59fce3a..00000000000 --- a/Build/source/libs/jpeg/jdapimin.c +++ /dev/null @@ -1,395 +0,0 @@ -/* - * jdapimin.c - * - * Copyright (C) 1994-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains application interface code for the decompression half - * of the JPEG library. These are the "minimum" API routines that may be - * needed in either the normal full-decompression case or the - * transcoding-only case. - * - * Most of the routines intended to be called directly by an application - * are in this file or in jdapistd.c. But also see jcomapi.c for routines - * shared by compression and decompression, and jdtrans.c for the transcoding - * case. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* - * Initialization of a JPEG decompression object. - * The error manager must already be set up (in case memory manager fails). - */ - -GLOBAL(void) -jpeg_CreateDecompress (j_decompress_ptr cinfo, int version, size_t structsize) -{ - int i; - - /* Guard against version mismatches between library and caller. */ - cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */ - if (version != JPEG_LIB_VERSION) - ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version); - if (structsize != SIZEOF(struct jpeg_decompress_struct)) - ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, - (int) SIZEOF(struct jpeg_decompress_struct), (int) structsize); - - /* For debugging purposes, we zero the whole master structure. - * But the application has already set the err pointer, and may have set - * client_data, so we have to save and restore those fields. - * Note: if application hasn't set client_data, tools like Purify may - * complain here. - */ - { - struct jpeg_error_mgr * err = cinfo->err; - void * client_data = cinfo->client_data; /* ignore Purify complaint here */ - MEMZERO(cinfo, SIZEOF(struct jpeg_decompress_struct)); - cinfo->err = err; - cinfo->client_data = client_data; - } - cinfo->is_decompressor = TRUE; - - /* Initialize a memory manager instance for this object */ - jinit_memory_mgr((j_common_ptr) cinfo); - - /* Zero out pointers to permanent structures. */ - cinfo->progress = NULL; - cinfo->src = NULL; - - for (i = 0; i < NUM_QUANT_TBLS; i++) - cinfo->quant_tbl_ptrs[i] = NULL; - - for (i = 0; i < NUM_HUFF_TBLS; i++) { - cinfo->dc_huff_tbl_ptrs[i] = NULL; - cinfo->ac_huff_tbl_ptrs[i] = NULL; - } - - /* Initialize marker processor so application can override methods - * for COM, APPn markers before calling jpeg_read_header. - */ - cinfo->marker_list = NULL; - jinit_marker_reader(cinfo); - - /* And initialize the overall input controller. */ - jinit_input_controller(cinfo); - - /* OK, I'm ready */ - cinfo->global_state = DSTATE_START; -} - - -/* - * Destruction of a JPEG decompression object - */ - -GLOBAL(void) -jpeg_destroy_decompress (j_decompress_ptr cinfo) -{ - jpeg_destroy((j_common_ptr) cinfo); /* use common routine */ -} - - -/* - * Abort processing of a JPEG decompression operation, - * but don't destroy the object itself. - */ - -GLOBAL(void) -jpeg_abort_decompress (j_decompress_ptr cinfo) -{ - jpeg_abort((j_common_ptr) cinfo); /* use common routine */ -} - - -/* - * Set default decompression parameters. - */ - -LOCAL(void) -default_decompress_parms (j_decompress_ptr cinfo) -{ - /* Guess the input colorspace, and set output colorspace accordingly. */ - /* (Wish JPEG committee had provided a real way to specify this...) */ - /* Note application may override our guesses. */ - switch (cinfo->num_components) { - case 1: - cinfo->jpeg_color_space = JCS_GRAYSCALE; - cinfo->out_color_space = JCS_GRAYSCALE; - break; - - case 3: - if (cinfo->saw_JFIF_marker) { - cinfo->jpeg_color_space = JCS_YCbCr; /* JFIF implies YCbCr */ - } else if (cinfo->saw_Adobe_marker) { - switch (cinfo->Adobe_transform) { - case 0: - cinfo->jpeg_color_space = JCS_RGB; - break; - case 1: - cinfo->jpeg_color_space = JCS_YCbCr; - break; - default: - WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); - cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ - break; - } - } else { - /* Saw no special markers, try to guess from the component IDs */ - int cid0 = cinfo->comp_info[0].component_id; - int cid1 = cinfo->comp_info[1].component_id; - int cid2 = cinfo->comp_info[2].component_id; - - if (cid0 == 1 && cid1 == 2 && cid2 == 3) - cinfo->jpeg_color_space = JCS_YCbCr; /* assume JFIF w/out marker */ - else if (cid0 == 82 && cid1 == 71 && cid2 == 66) - cinfo->jpeg_color_space = JCS_RGB; /* ASCII 'R', 'G', 'B' */ - else { - TRACEMS3(cinfo, 1, JTRC_UNKNOWN_IDS, cid0, cid1, cid2); - cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ - } - } - /* Always guess RGB is proper output colorspace. */ - cinfo->out_color_space = JCS_RGB; - break; - - case 4: - if (cinfo->saw_Adobe_marker) { - switch (cinfo->Adobe_transform) { - case 0: - cinfo->jpeg_color_space = JCS_CMYK; - break; - case 2: - cinfo->jpeg_color_space = JCS_YCCK; - break; - default: - WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); - cinfo->jpeg_color_space = JCS_YCCK; /* assume it's YCCK */ - break; - } - } else { - /* No special markers, assume straight CMYK. */ - cinfo->jpeg_color_space = JCS_CMYK; - } - cinfo->out_color_space = JCS_CMYK; - break; - - default: - cinfo->jpeg_color_space = JCS_UNKNOWN; - cinfo->out_color_space = JCS_UNKNOWN; - break; - } - - /* Set defaults for other decompression parameters. */ - cinfo->scale_num = 1; /* 1:1 scaling */ - cinfo->scale_denom = 1; - cinfo->output_gamma = 1.0; - cinfo->buffered_image = FALSE; - cinfo->raw_data_out = FALSE; - cinfo->dct_method = JDCT_DEFAULT; - cinfo->do_fancy_upsampling = TRUE; - cinfo->do_block_smoothing = TRUE; - cinfo->quantize_colors = FALSE; - /* We set these in case application only sets quantize_colors. */ - cinfo->dither_mode = JDITHER_FS; -#ifdef QUANT_2PASS_SUPPORTED - cinfo->two_pass_quantize = TRUE; -#else - cinfo->two_pass_quantize = FALSE; -#endif - cinfo->desired_number_of_colors = 256; - cinfo->colormap = NULL; - /* Initialize for no mode change in buffered-image mode. */ - cinfo->enable_1pass_quant = FALSE; - cinfo->enable_external_quant = FALSE; - cinfo->enable_2pass_quant = FALSE; -} - - -/* - * Decompression startup: read start of JPEG datastream to see what's there. - * Need only initialize JPEG object and supply a data source before calling. - * - * This routine will read as far as the first SOS marker (ie, actual start of - * compressed data), and will save all tables and parameters in the JPEG - * object. It will also initialize the decompression parameters to default - * values, and finally return JPEG_HEADER_OK. On return, the application may - * adjust the decompression parameters and then call jpeg_start_decompress. - * (Or, if the application only wanted to determine the image parameters, - * the data need not be decompressed. In that case, call jpeg_abort or - * jpeg_destroy to release any temporary space.) - * If an abbreviated (tables only) datastream is presented, the routine will - * return JPEG_HEADER_TABLES_ONLY upon reaching EOI. The application may then - * re-use the JPEG object to read the abbreviated image datastream(s). - * It is unnecessary (but OK) to call jpeg_abort in this case. - * The JPEG_SUSPENDED return code only occurs if the data source module - * requests suspension of the decompressor. In this case the application - * should load more source data and then re-call jpeg_read_header to resume - * processing. - * If a non-suspending data source is used and require_image is TRUE, then the - * return code need not be inspected since only JPEG_HEADER_OK is possible. - * - * This routine is now just a front end to jpeg_consume_input, with some - * extra error checking. - */ - -GLOBAL(int) -jpeg_read_header (j_decompress_ptr cinfo, boolean require_image) -{ - int retcode; - - if (cinfo->global_state != DSTATE_START && - cinfo->global_state != DSTATE_INHEADER) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - retcode = jpeg_consume_input(cinfo); - - switch (retcode) { - case JPEG_REACHED_SOS: - retcode = JPEG_HEADER_OK; - break; - case JPEG_REACHED_EOI: - if (require_image) /* Complain if application wanted an image */ - ERREXIT(cinfo, JERR_NO_IMAGE); - /* Reset to start state; it would be safer to require the application to - * call jpeg_abort, but we can't change it now for compatibility reasons. - * A side effect is to free any temporary memory (there shouldn't be any). - */ - jpeg_abort((j_common_ptr) cinfo); /* sets state = DSTATE_START */ - retcode = JPEG_HEADER_TABLES_ONLY; - break; - case JPEG_SUSPENDED: - /* no work */ - break; - } - - return retcode; -} - - -/* - * Consume data in advance of what the decompressor requires. - * This can be called at any time once the decompressor object has - * been created and a data source has been set up. - * - * This routine is essentially a state machine that handles a couple - * of critical state-transition actions, namely initial setup and - * transition from header scanning to ready-for-start_decompress. - * All the actual input is done via the input controller's consume_input - * method. - */ - -GLOBAL(int) -jpeg_consume_input (j_decompress_ptr cinfo) -{ - int retcode = JPEG_SUSPENDED; - - /* NB: every possible DSTATE value should be listed in this switch */ - switch (cinfo->global_state) { - case DSTATE_START: - /* Start-of-datastream actions: reset appropriate modules */ - (*cinfo->inputctl->reset_input_controller) (cinfo); - /* Initialize application's data source module */ - (*cinfo->src->init_source) (cinfo); - cinfo->global_state = DSTATE_INHEADER; - /*FALLTHROUGH*/ - case DSTATE_INHEADER: - retcode = (*cinfo->inputctl->consume_input) (cinfo); - if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */ - /* Set up default parameters based on header data */ - default_decompress_parms(cinfo); - /* Set global state: ready for start_decompress */ - cinfo->global_state = DSTATE_READY; - } - break; - case DSTATE_READY: - /* Can't advance past first SOS until start_decompress is called */ - retcode = JPEG_REACHED_SOS; - break; - case DSTATE_PRELOAD: - case DSTATE_PRESCAN: - case DSTATE_SCANNING: - case DSTATE_RAW_OK: - case DSTATE_BUFIMAGE: - case DSTATE_BUFPOST: - case DSTATE_STOPPING: - retcode = (*cinfo->inputctl->consume_input) (cinfo); - break; - default: - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - } - return retcode; -} - - -/* - * Have we finished reading the input file? - */ - -GLOBAL(boolean) -jpeg_input_complete (j_decompress_ptr cinfo) -{ - /* Check for valid jpeg object */ - if (cinfo->global_state < DSTATE_START || - cinfo->global_state > DSTATE_STOPPING) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - return cinfo->inputctl->eoi_reached; -} - - -/* - * Is there more than one scan? - */ - -GLOBAL(boolean) -jpeg_has_multiple_scans (j_decompress_ptr cinfo) -{ - /* Only valid after jpeg_read_header completes */ - if (cinfo->global_state < DSTATE_READY || - cinfo->global_state > DSTATE_STOPPING) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - return cinfo->inputctl->has_multiple_scans; -} - - -/* - * Finish JPEG decompression. - * - * This will normally just verify the file trailer and release temp storage. - * - * Returns FALSE if suspended. The return value need be inspected only if - * a suspending data source is used. - */ - -GLOBAL(boolean) -jpeg_finish_decompress (j_decompress_ptr cinfo) -{ - if ((cinfo->global_state == DSTATE_SCANNING || - cinfo->global_state == DSTATE_RAW_OK) && ! cinfo->buffered_image) { - /* Terminate final pass of non-buffered mode */ - if (cinfo->output_scanline < cinfo->output_height) - ERREXIT(cinfo, JERR_TOO_LITTLE_DATA); - (*cinfo->master->finish_output_pass) (cinfo); - cinfo->global_state = DSTATE_STOPPING; - } else if (cinfo->global_state == DSTATE_BUFIMAGE) { - /* Finishing after a buffered-image operation */ - cinfo->global_state = DSTATE_STOPPING; - } else if (cinfo->global_state != DSTATE_STOPPING) { - /* STOPPING = repeat call after a suspension, anything else is error */ - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - } - /* Read until EOI */ - while (! cinfo->inputctl->eoi_reached) { - if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED) - return FALSE; /* Suspend, come back later */ - } - /* Do final cleanup */ - (*cinfo->src->term_source) (cinfo); - /* We can use jpeg_abort to release memory and reset global_state */ - jpeg_abort((j_common_ptr) cinfo); - return TRUE; -} diff --git a/Build/source/libs/jpeg/jdapistd.c b/Build/source/libs/jpeg/jdapistd.c deleted file mode 100644 index c8e3fa0c35d..00000000000 --- a/Build/source/libs/jpeg/jdapistd.c +++ /dev/null @@ -1,275 +0,0 @@ -/* - * jdapistd.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains application interface code for the decompression half - * of the JPEG library. These are the "standard" API routines that are - * used in the normal full-decompression case. They are not used by a - * transcoding-only application. Note that if an application links in - * jpeg_start_decompress, it will end up linking in the entire decompressor. - * We thus must separate this file from jdapimin.c to avoid linking the - * whole decompression library into a transcoder. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Forward declarations */ -LOCAL(boolean) output_pass_setup JPP((j_decompress_ptr cinfo)); - - -/* - * Decompression initialization. - * jpeg_read_header must be completed before calling this. - * - * If a multipass operating mode was selected, this will do all but the - * last pass, and thus may take a great deal of time. - * - * Returns FALSE if suspended. The return value need be inspected only if - * a suspending data source is used. - */ - -GLOBAL(boolean) -jpeg_start_decompress (j_decompress_ptr cinfo) -{ - if (cinfo->global_state == DSTATE_READY) { - /* First call: initialize master control, select active modules */ - jinit_master_decompress(cinfo); - if (cinfo->buffered_image) { - /* No more work here; expecting jpeg_start_output next */ - cinfo->global_state = DSTATE_BUFIMAGE; - return TRUE; - } - cinfo->global_state = DSTATE_PRELOAD; - } - if (cinfo->global_state == DSTATE_PRELOAD) { - /* If file has multiple scans, absorb them all into the coef buffer */ - if (cinfo->inputctl->has_multiple_scans) { -#ifdef D_MULTISCAN_FILES_SUPPORTED - for (;;) { - int retcode; - /* Call progress monitor hook if present */ - if (cinfo->progress != NULL) - (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); - /* Absorb some more input */ - retcode = (*cinfo->inputctl->consume_input) (cinfo); - if (retcode == JPEG_SUSPENDED) - return FALSE; - if (retcode == JPEG_REACHED_EOI) - break; - /* Advance progress counter if appropriate */ - if (cinfo->progress != NULL && - (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) { - if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) { - /* jdmaster underestimated number of scans; ratchet up one scan */ - cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows; - } - } - } -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif /* D_MULTISCAN_FILES_SUPPORTED */ - } - cinfo->output_scan_number = cinfo->input_scan_number; - } else if (cinfo->global_state != DSTATE_PRESCAN) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - /* Perform any dummy output passes, and set up for the final pass */ - return output_pass_setup(cinfo); -} - - -/* - * Set up for an output pass, and perform any dummy pass(es) needed. - * Common subroutine for jpeg_start_decompress and jpeg_start_output. - * Entry: global_state = DSTATE_PRESCAN only if previously suspended. - * Exit: If done, returns TRUE and sets global_state for proper output mode. - * If suspended, returns FALSE and sets global_state = DSTATE_PRESCAN. - */ - -LOCAL(boolean) -output_pass_setup (j_decompress_ptr cinfo) -{ - if (cinfo->global_state != DSTATE_PRESCAN) { - /* First call: do pass setup */ - (*cinfo->master->prepare_for_output_pass) (cinfo); - cinfo->output_scanline = 0; - cinfo->global_state = DSTATE_PRESCAN; - } - /* Loop over any required dummy passes */ - while (cinfo->master->is_dummy_pass) { -#ifdef QUANT_2PASS_SUPPORTED - /* Crank through the dummy pass */ - while (cinfo->output_scanline < cinfo->output_height) { - JDIMENSION last_scanline; - /* Call progress monitor hook if present */ - if (cinfo->progress != NULL) { - cinfo->progress->pass_counter = (long) cinfo->output_scanline; - cinfo->progress->pass_limit = (long) cinfo->output_height; - (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); - } - /* Process some data */ - last_scanline = cinfo->output_scanline; - (*cinfo->main->process_data) (cinfo, (JSAMPARRAY) NULL, - &cinfo->output_scanline, (JDIMENSION) 0); - if (cinfo->output_scanline == last_scanline) - return FALSE; /* No progress made, must suspend */ - } - /* Finish up dummy pass, and set up for another one */ - (*cinfo->master->finish_output_pass) (cinfo); - (*cinfo->master->prepare_for_output_pass) (cinfo); - cinfo->output_scanline = 0; -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif /* QUANT_2PASS_SUPPORTED */ - } - /* Ready for application to drive output pass through - * jpeg_read_scanlines or jpeg_read_raw_data. - */ - cinfo->global_state = cinfo->raw_data_out ? DSTATE_RAW_OK : DSTATE_SCANNING; - return TRUE; -} - - -/* - * Read some scanlines of data from the JPEG decompressor. - * - * The return value will be the number of lines actually read. - * This may be less than the number requested in several cases, - * including bottom of image, data source suspension, and operating - * modes that emit multiple scanlines at a time. - * - * Note: we warn about excess calls to jpeg_read_scanlines() since - * this likely signals an application programmer error. However, - * an oversize buffer (max_lines > scanlines remaining) is not an error. - */ - -GLOBAL(JDIMENSION) -jpeg_read_scanlines (j_decompress_ptr cinfo, JSAMPARRAY scanlines, - JDIMENSION max_lines) -{ - JDIMENSION row_ctr; - - if (cinfo->global_state != DSTATE_SCANNING) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - if (cinfo->output_scanline >= cinfo->output_height) { - WARNMS(cinfo, JWRN_TOO_MUCH_DATA); - return 0; - } - - /* Call progress monitor hook if present */ - if (cinfo->progress != NULL) { - cinfo->progress->pass_counter = (long) cinfo->output_scanline; - cinfo->progress->pass_limit = (long) cinfo->output_height; - (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); - } - - /* Process some data */ - row_ctr = 0; - (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, max_lines); - cinfo->output_scanline += row_ctr; - return row_ctr; -} - - -/* - * Alternate entry point to read raw data. - * Processes exactly one iMCU row per call, unless suspended. - */ - -GLOBAL(JDIMENSION) -jpeg_read_raw_data (j_decompress_ptr cinfo, JSAMPIMAGE data, - JDIMENSION max_lines) -{ - JDIMENSION lines_per_iMCU_row; - - if (cinfo->global_state != DSTATE_RAW_OK) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - if (cinfo->output_scanline >= cinfo->output_height) { - WARNMS(cinfo, JWRN_TOO_MUCH_DATA); - return 0; - } - - /* Call progress monitor hook if present */ - if (cinfo->progress != NULL) { - cinfo->progress->pass_counter = (long) cinfo->output_scanline; - cinfo->progress->pass_limit = (long) cinfo->output_height; - (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); - } - - /* Verify that at least one iMCU row can be returned. */ - lines_per_iMCU_row = cinfo->max_v_samp_factor * cinfo->min_DCT_scaled_size; - if (max_lines < lines_per_iMCU_row) - ERREXIT(cinfo, JERR_BUFFER_SIZE); - - /* Decompress directly into user's buffer. */ - if (! (*cinfo->coef->decompress_data) (cinfo, data)) - return 0; /* suspension forced, can do nothing more */ - - /* OK, we processed one iMCU row. */ - cinfo->output_scanline += lines_per_iMCU_row; - return lines_per_iMCU_row; -} - - -/* Additional entry points for buffered-image mode. */ - -#ifdef D_MULTISCAN_FILES_SUPPORTED - -/* - * Initialize for an output pass in buffered-image mode. - */ - -GLOBAL(boolean) -jpeg_start_output (j_decompress_ptr cinfo, int scan_number) -{ - if (cinfo->global_state != DSTATE_BUFIMAGE && - cinfo->global_state != DSTATE_PRESCAN) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - /* Limit scan number to valid range */ - if (scan_number <= 0) - scan_number = 1; - if (cinfo->inputctl->eoi_reached && - scan_number > cinfo->input_scan_number) - scan_number = cinfo->input_scan_number; - cinfo->output_scan_number = scan_number; - /* Perform any dummy output passes, and set up for the real pass */ - return output_pass_setup(cinfo); -} - - -/* - * Finish up after an output pass in buffered-image mode. - * - * Returns FALSE if suspended. The return value need be inspected only if - * a suspending data source is used. - */ - -GLOBAL(boolean) -jpeg_finish_output (j_decompress_ptr cinfo) -{ - if ((cinfo->global_state == DSTATE_SCANNING || - cinfo->global_state == DSTATE_RAW_OK) && cinfo->buffered_image) { - /* Terminate this pass. */ - /* We do not require the whole pass to have been completed. */ - (*cinfo->master->finish_output_pass) (cinfo); - cinfo->global_state = DSTATE_BUFPOST; - } else if (cinfo->global_state != DSTATE_BUFPOST) { - /* BUFPOST = repeat call after a suspension, anything else is error */ - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - } - /* Read markers looking for SOS or EOI */ - while (cinfo->input_scan_number <= cinfo->output_scan_number && - ! cinfo->inputctl->eoi_reached) { - if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED) - return FALSE; /* Suspend, come back later */ - } - cinfo->global_state = DSTATE_BUFIMAGE; - return TRUE; -} - -#endif /* D_MULTISCAN_FILES_SUPPORTED */ diff --git a/Build/source/libs/jpeg/jdatadst.c b/Build/source/libs/jpeg/jdatadst.c deleted file mode 100644 index a8f6fb0e025..00000000000 --- a/Build/source/libs/jpeg/jdatadst.c +++ /dev/null @@ -1,151 +0,0 @@ -/* - * jdatadst.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains compression data destination routines for the case of - * emitting JPEG data to a file (or any stdio stream). While these routines - * are sufficient for most applications, some will want to use a different - * destination manager. - * IMPORTANT: we assume that fwrite() will correctly transcribe an array of - * JOCTETs into 8-bit-wide elements on external storage. If char is wider - * than 8 bits on your machine, you may need to do some tweaking. - */ - -/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ -#include "jinclude.h" -#include "jpeglib.h" -#include "jerror.h" - - -/* Expanded data destination object for stdio output */ - -typedef struct { - struct jpeg_destination_mgr pub; /* public fields */ - - FILE * outfile; /* target stream */ - JOCTET * buffer; /* start of buffer */ -} my_destination_mgr; - -typedef my_destination_mgr * my_dest_ptr; - -#define OUTPUT_BUF_SIZE 4096 /* choose an efficiently fwrite'able size */ - - -/* - * Initialize destination --- called by jpeg_start_compress - * before any data is actually written. - */ - -METHODDEF(void) -init_destination (j_compress_ptr cinfo) -{ - my_dest_ptr dest = (my_dest_ptr) cinfo->dest; - - /* Allocate the output buffer --- it will be released when done with image */ - dest->buffer = (JOCTET *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - OUTPUT_BUF_SIZE * SIZEOF(JOCTET)); - - dest->pub.next_output_byte = dest->buffer; - dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; -} - - -/* - * Empty the output buffer --- called whenever buffer fills up. - * - * In typical applications, this should write the entire output buffer - * (ignoring the current state of next_output_byte & free_in_buffer), - * reset the pointer & count to the start of the buffer, and return TRUE - * indicating that the buffer has been dumped. - * - * In applications that need to be able to suspend compression due to output - * overrun, a FALSE return indicates that the buffer cannot be emptied now. - * In this situation, the compressor will return to its caller (possibly with - * an indication that it has not accepted all the supplied scanlines). The - * application should resume compression after it has made more room in the - * output buffer. Note that there are substantial restrictions on the use of - * suspension --- see the documentation. - * - * When suspending, the compressor will back up to a convenient restart point - * (typically the start of the current MCU). next_output_byte & free_in_buffer - * indicate where the restart point will be if the current call returns FALSE. - * Data beyond this point will be regenerated after resumption, so do not - * write it out when emptying the buffer externally. - */ - -METHODDEF(boolean) -empty_output_buffer (j_compress_ptr cinfo) -{ - my_dest_ptr dest = (my_dest_ptr) cinfo->dest; - - if (JFWRITE(dest->outfile, dest->buffer, OUTPUT_BUF_SIZE) != - (size_t) OUTPUT_BUF_SIZE) - ERREXIT(cinfo, JERR_FILE_WRITE); - - dest->pub.next_output_byte = dest->buffer; - dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; - - return TRUE; -} - - -/* - * Terminate destination --- called by jpeg_finish_compress - * after all data has been written. Usually needs to flush buffer. - * - * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding - * application must deal with any cleanup that should happen even - * for error exit. - */ - -METHODDEF(void) -term_destination (j_compress_ptr cinfo) -{ - my_dest_ptr dest = (my_dest_ptr) cinfo->dest; - size_t datacount = OUTPUT_BUF_SIZE - dest->pub.free_in_buffer; - - /* Write any data remaining in the buffer */ - if (datacount > 0) { - if (JFWRITE(dest->outfile, dest->buffer, datacount) != datacount) - ERREXIT(cinfo, JERR_FILE_WRITE); - } - fflush(dest->outfile); - /* Make sure we wrote the output file OK */ - if (ferror(dest->outfile)) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * Prepare for output to a stdio stream. - * The caller must have already opened the stream, and is responsible - * for closing it after finishing compression. - */ - -GLOBAL(void) -jpeg_stdio_dest (j_compress_ptr cinfo, FILE * outfile) -{ - my_dest_ptr dest; - - /* The destination object is made permanent so that multiple JPEG images - * can be written to the same file without re-executing jpeg_stdio_dest. - * This makes it dangerous to use this manager and a different destination - * manager serially with the same JPEG object, because their private object - * sizes may be different. Caveat programmer. - */ - if (cinfo->dest == NULL) { /* first time for this JPEG object? */ - cinfo->dest = (struct jpeg_destination_mgr *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - SIZEOF(my_destination_mgr)); - } - - dest = (my_dest_ptr) cinfo->dest; - dest->pub.init_destination = init_destination; - dest->pub.empty_output_buffer = empty_output_buffer; - dest->pub.term_destination = term_destination; - dest->outfile = outfile; -} diff --git a/Build/source/libs/jpeg/jdatasrc.c b/Build/source/libs/jpeg/jdatasrc.c deleted file mode 100644 index edc752bf5d8..00000000000 --- a/Build/source/libs/jpeg/jdatasrc.c +++ /dev/null @@ -1,212 +0,0 @@ -/* - * jdatasrc.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains decompression data source routines for the case of - * reading JPEG data from a file (or any stdio stream). While these routines - * are sufficient for most applications, some will want to use a different - * source manager. - * IMPORTANT: we assume that fread() will correctly transcribe an array of - * JOCTETs from 8-bit-wide elements on external storage. If char is wider - * than 8 bits on your machine, you may need to do some tweaking. - */ - -/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ -#include "jinclude.h" -#include "jpeglib.h" -#include "jerror.h" - - -/* Expanded data source object for stdio input */ - -typedef struct { - struct jpeg_source_mgr pub; /* public fields */ - - FILE * infile; /* source stream */ - JOCTET * buffer; /* start of buffer */ - boolean start_of_file; /* have we gotten any data yet? */ -} my_source_mgr; - -typedef my_source_mgr * my_src_ptr; - -#define INPUT_BUF_SIZE 4096 /* choose an efficiently fread'able size */ - - -/* - * Initialize source --- called by jpeg_read_header - * before any data is actually read. - */ - -METHODDEF(void) -init_source (j_decompress_ptr cinfo) -{ - my_src_ptr src = (my_src_ptr) cinfo->src; - - /* We reset the empty-input-file flag for each image, - * but we don't clear the input buffer. - * This is correct behavior for reading a series of images from one source. - */ - src->start_of_file = TRUE; -} - - -/* - * Fill the input buffer --- called whenever buffer is emptied. - * - * In typical applications, this should read fresh data into the buffer - * (ignoring the current state of next_input_byte & bytes_in_buffer), - * reset the pointer & count to the start of the buffer, and return TRUE - * indicating that the buffer has been reloaded. It is not necessary to - * fill the buffer entirely, only to obtain at least one more byte. - * - * There is no such thing as an EOF return. If the end of the file has been - * reached, the routine has a choice of ERREXIT() or inserting fake data into - * the buffer. In most cases, generating a warning message and inserting a - * fake EOI marker is the best course of action --- this will allow the - * decompressor to output however much of the image is there. However, - * the resulting error message is misleading if the real problem is an empty - * input file, so we handle that case specially. - * - * In applications that need to be able to suspend compression due to input - * not being available yet, a FALSE return indicates that no more data can be - * obtained right now, but more may be forthcoming later. In this situation, - * the decompressor will return to its caller (with an indication of the - * number of scanlines it has read, if any). The application should resume - * decompression after it has loaded more data into the input buffer. Note - * that there are substantial restrictions on the use of suspension --- see - * the documentation. - * - * When suspending, the decompressor will back up to a convenient restart point - * (typically the start of the current MCU). next_input_byte & bytes_in_buffer - * indicate where the restart point will be if the current call returns FALSE. - * Data beyond this point must be rescanned after resumption, so move it to - * the front of the buffer rather than discarding it. - */ - -METHODDEF(boolean) -fill_input_buffer (j_decompress_ptr cinfo) -{ - my_src_ptr src = (my_src_ptr) cinfo->src; - size_t nbytes; - - nbytes = JFREAD(src->infile, src->buffer, INPUT_BUF_SIZE); - - if (nbytes <= 0) { - if (src->start_of_file) /* Treat empty input file as fatal error */ - ERREXIT(cinfo, JERR_INPUT_EMPTY); - WARNMS(cinfo, JWRN_JPEG_EOF); - /* Insert a fake EOI marker */ - src->buffer[0] = (JOCTET) 0xFF; - src->buffer[1] = (JOCTET) JPEG_EOI; - nbytes = 2; - } - - src->pub.next_input_byte = src->buffer; - src->pub.bytes_in_buffer = nbytes; - src->start_of_file = FALSE; - - return TRUE; -} - - -/* - * Skip data --- used to skip over a potentially large amount of - * uninteresting data (such as an APPn marker). - * - * Writers of suspendable-input applications must note that skip_input_data - * is not granted the right to give a suspension return. If the skip extends - * beyond the data currently in the buffer, the buffer can be marked empty so - * that the next read will cause a fill_input_buffer call that can suspend. - * Arranging for additional bytes to be discarded before reloading the input - * buffer is the application writer's problem. - */ - -METHODDEF(void) -skip_input_data (j_decompress_ptr cinfo, long num_bytes) -{ - my_src_ptr src = (my_src_ptr) cinfo->src; - - /* Just a dumb implementation for now. Could use fseek() except - * it doesn't work on pipes. Not clear that being smart is worth - * any trouble anyway --- large skips are infrequent. - */ - if (num_bytes > 0) { - while (num_bytes > (long) src->pub.bytes_in_buffer) { - num_bytes -= (long) src->pub.bytes_in_buffer; - (void) fill_input_buffer(cinfo); - /* note we assume that fill_input_buffer will never return FALSE, - * so suspension need not be handled. - */ - } - src->pub.next_input_byte += (size_t) num_bytes; - src->pub.bytes_in_buffer -= (size_t) num_bytes; - } -} - - -/* - * An additional method that can be provided by data source modules is the - * resync_to_restart method for error recovery in the presence of RST markers. - * For the moment, this source module just uses the default resync method - * provided by the JPEG library. That method assumes that no backtracking - * is possible. - */ - - -/* - * Terminate source --- called by jpeg_finish_decompress - * after all data has been read. Often a no-op. - * - * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding - * application must deal with any cleanup that should happen even - * for error exit. - */ - -METHODDEF(void) -term_source (j_decompress_ptr cinfo) -{ - /* no work necessary here */ -} - - -/* - * Prepare for input from a stdio stream. - * The caller must have already opened the stream, and is responsible - * for closing it after finishing decompression. - */ - -GLOBAL(void) -jpeg_stdio_src (j_decompress_ptr cinfo, FILE * infile) -{ - my_src_ptr src; - - /* The source object and input buffer are made permanent so that a series - * of JPEG images can be read from the same file by calling jpeg_stdio_src - * only before the first one. (If we discarded the buffer at the end of - * one image, we'd likely lose the start of the next one.) - * This makes it unsafe to use this manager and a different source - * manager serially with the same JPEG object. Caveat programmer. - */ - if (cinfo->src == NULL) { /* first time for this JPEG object? */ - cinfo->src = (struct jpeg_source_mgr *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - SIZEOF(my_source_mgr)); - src = (my_src_ptr) cinfo->src; - src->buffer = (JOCTET *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - INPUT_BUF_SIZE * SIZEOF(JOCTET)); - } - - src = (my_src_ptr) cinfo->src; - src->pub.init_source = init_source; - src->pub.fill_input_buffer = fill_input_buffer; - src->pub.skip_input_data = skip_input_data; - src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */ - src->pub.term_source = term_source; - src->infile = infile; - src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */ - src->pub.next_input_byte = NULL; /* until buffer loaded */ -} diff --git a/Build/source/libs/jpeg/jdcoefct.c b/Build/source/libs/jpeg/jdcoefct.c deleted file mode 100644 index 4938d20fcb6..00000000000 --- a/Build/source/libs/jpeg/jdcoefct.c +++ /dev/null @@ -1,736 +0,0 @@ -/* - * jdcoefct.c - * - * Copyright (C) 1994-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the coefficient buffer controller for decompression. - * This controller is the top level of the JPEG decompressor proper. - * The coefficient buffer lies between entropy decoding and inverse-DCT steps. - * - * In buffered-image mode, this controller is the interface between - * input-oriented processing and output-oriented processing. - * Also, the input side (only) is used when reading a file for transcoding. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - -/* Block smoothing is only applicable for progressive JPEG, so: */ -#ifndef D_PROGRESSIVE_SUPPORTED -#undef BLOCK_SMOOTHING_SUPPORTED -#endif - -/* Private buffer controller object */ - -typedef struct { - struct jpeg_d_coef_controller pub; /* public fields */ - - /* These variables keep track of the current location of the input side. */ - /* cinfo->input_iMCU_row is also used for this. */ - JDIMENSION MCU_ctr; /* counts MCUs processed in current row */ - int MCU_vert_offset; /* counts MCU rows within iMCU row */ - int MCU_rows_per_iMCU_row; /* number of such rows needed */ - - /* The output side's location is represented by cinfo->output_iMCU_row. */ - - /* In single-pass modes, it's sufficient to buffer just one MCU. - * We allocate a workspace of D_MAX_BLOCKS_IN_MCU coefficient blocks, - * and let the entropy decoder write into that workspace each time. - * (On 80x86, the workspace is FAR even though it's not really very big; - * this is to keep the module interfaces unchanged when a large coefficient - * buffer is necessary.) - * In multi-pass modes, this array points to the current MCU's blocks - * within the virtual arrays; it is used only by the input side. - */ - JBLOCKROW MCU_buffer[D_MAX_BLOCKS_IN_MCU]; - -#ifdef D_MULTISCAN_FILES_SUPPORTED - /* In multi-pass modes, we need a virtual block array for each component. */ - jvirt_barray_ptr whole_image[MAX_COMPONENTS]; -#endif - -#ifdef BLOCK_SMOOTHING_SUPPORTED - /* When doing block smoothing, we latch coefficient Al values here */ - int * coef_bits_latch; -#define SAVED_COEFS 6 /* we save coef_bits[0..5] */ -#endif -} my_coef_controller; - -typedef my_coef_controller * my_coef_ptr; - -/* Forward declarations */ -METHODDEF(int) decompress_onepass - JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); -#ifdef D_MULTISCAN_FILES_SUPPORTED -METHODDEF(int) decompress_data - JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); -#endif -#ifdef BLOCK_SMOOTHING_SUPPORTED -LOCAL(boolean) smoothing_ok JPP((j_decompress_ptr cinfo)); -METHODDEF(int) decompress_smooth_data - JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf)); -#endif - - -LOCAL(void) -start_iMCU_row (j_decompress_ptr cinfo) -/* Reset within-iMCU-row counters for a new row (input side) */ -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - - /* In an interleaved scan, an MCU row is the same as an iMCU row. - * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows. - * But at the bottom of the image, process only what's left. - */ - if (cinfo->comps_in_scan > 1) { - coef->MCU_rows_per_iMCU_row = 1; - } else { - if (cinfo->input_iMCU_row < (cinfo->total_iMCU_rows-1)) - coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; - else - coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height; - } - - coef->MCU_ctr = 0; - coef->MCU_vert_offset = 0; -} - - -/* - * Initialize for an input processing pass. - */ - -METHODDEF(void) -start_input_pass (j_decompress_ptr cinfo) -{ - cinfo->input_iMCU_row = 0; - start_iMCU_row(cinfo); -} - - -/* - * Initialize for an output processing pass. - */ - -METHODDEF(void) -start_output_pass (j_decompress_ptr cinfo) -{ -#ifdef BLOCK_SMOOTHING_SUPPORTED - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - - /* If multipass, check to see whether to use block smoothing on this pass */ - if (coef->pub.coef_arrays != NULL) { - if (cinfo->do_block_smoothing && smoothing_ok(cinfo)) - coef->pub.decompress_data = decompress_smooth_data; - else - coef->pub.decompress_data = decompress_data; - } -#endif - cinfo->output_iMCU_row = 0; -} - - -/* - * Decompress and return some data in the single-pass case. - * Always attempts to emit one fully interleaved MCU row ("iMCU" row). - * Input and output must run in lockstep since we have only a one-MCU buffer. - * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. - * - * NB: output_buf contains a plane for each component in image, - * which we index according to the component's SOF position. - */ - -METHODDEF(int) -decompress_onepass (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - JDIMENSION MCU_col_num; /* index of current MCU within row */ - JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; - JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; - int blkn, ci, xindex, yindex, yoffset, useful_width; - JSAMPARRAY output_ptr; - JDIMENSION start_col, output_col; - jpeg_component_info *compptr; - inverse_DCT_method_ptr inverse_DCT; - - /* Loop to process as much as one whole iMCU row */ - for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; - yoffset++) { - for (MCU_col_num = coef->MCU_ctr; MCU_col_num <= last_MCU_col; - MCU_col_num++) { - /* Try to fetch an MCU. Entropy decoder expects buffer to be zeroed. */ - jzero_far((void FAR *) coef->MCU_buffer[0], - (size_t) (cinfo->blocks_in_MCU * SIZEOF(JBLOCK))); - if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) { - /* Suspension forced; update state counters and exit */ - coef->MCU_vert_offset = yoffset; - coef->MCU_ctr = MCU_col_num; - return JPEG_SUSPENDED; - } - /* Determine where data should go in output_buf and do the IDCT thing. - * We skip dummy blocks at the right and bottom edges (but blkn gets - * incremented past them!). Note the inner loop relies on having - * allocated the MCU_buffer[] blocks sequentially. - */ - blkn = 0; /* index of current DCT block within MCU */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - /* Don't bother to IDCT an uninteresting component. */ - if (! compptr->component_needed) { - blkn += compptr->MCU_blocks; - continue; - } - inverse_DCT = cinfo->idct->inverse_DCT[compptr->component_index]; - useful_width = (MCU_col_num < last_MCU_col) ? compptr->MCU_width - : compptr->last_col_width; - output_ptr = output_buf[compptr->component_index] + - yoffset * compptr->DCT_scaled_size; - start_col = MCU_col_num * compptr->MCU_sample_width; - for (yindex = 0; yindex < compptr->MCU_height; yindex++) { - if (cinfo->input_iMCU_row < last_iMCU_row || - yoffset+yindex < compptr->last_row_height) { - output_col = start_col; - for (xindex = 0; xindex < useful_width; xindex++) { - (*inverse_DCT) (cinfo, compptr, - (JCOEFPTR) coef->MCU_buffer[blkn+xindex], - output_ptr, output_col); - output_col += compptr->DCT_scaled_size; - } - } - blkn += compptr->MCU_width; - output_ptr += compptr->DCT_scaled_size; - } - } - } - /* Completed an MCU row, but perhaps not an iMCU row */ - coef->MCU_ctr = 0; - } - /* Completed the iMCU row, advance counters for next one */ - cinfo->output_iMCU_row++; - if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) { - start_iMCU_row(cinfo); - return JPEG_ROW_COMPLETED; - } - /* Completed the scan */ - (*cinfo->inputctl->finish_input_pass) (cinfo); - return JPEG_SCAN_COMPLETED; -} - - -/* - * Dummy consume-input routine for single-pass operation. - */ - -METHODDEF(int) -dummy_consume_data (j_decompress_ptr cinfo) -{ - return JPEG_SUSPENDED; /* Always indicate nothing was done */ -} - - -#ifdef D_MULTISCAN_FILES_SUPPORTED - -/* - * Consume input data and store it in the full-image coefficient buffer. - * We read as much as one fully interleaved MCU row ("iMCU" row) per call, - * ie, v_samp_factor block rows for each component in the scan. - * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. - */ - -METHODDEF(int) -consume_data (j_decompress_ptr cinfo) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - JDIMENSION MCU_col_num; /* index of current MCU within row */ - int blkn, ci, xindex, yindex, yoffset; - JDIMENSION start_col; - JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; - JBLOCKROW buffer_ptr; - jpeg_component_info *compptr; - - /* Align the virtual buffers for the components used in this scan. */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - buffer[ci] = (*cinfo->mem->access_virt_barray) - ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index], - cinfo->input_iMCU_row * compptr->v_samp_factor, - (JDIMENSION) compptr->v_samp_factor, TRUE); - /* Note: entropy decoder expects buffer to be zeroed, - * but this is handled automatically by the memory manager - * because we requested a pre-zeroed array. - */ - } - - /* Loop to process one whole iMCU row */ - for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; - yoffset++) { - for (MCU_col_num = coef->MCU_ctr; MCU_col_num < cinfo->MCUs_per_row; - MCU_col_num++) { - /* Construct list of pointers to DCT blocks belonging to this MCU */ - blkn = 0; /* index of current DCT block within MCU */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - start_col = MCU_col_num * compptr->MCU_width; - for (yindex = 0; yindex < compptr->MCU_height; yindex++) { - buffer_ptr = buffer[ci][yindex+yoffset] + start_col; - for (xindex = 0; xindex < compptr->MCU_width; xindex++) { - coef->MCU_buffer[blkn++] = buffer_ptr++; - } - } - } - /* Try to fetch the MCU. */ - if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) { - /* Suspension forced; update state counters and exit */ - coef->MCU_vert_offset = yoffset; - coef->MCU_ctr = MCU_col_num; - return JPEG_SUSPENDED; - } - } - /* Completed an MCU row, but perhaps not an iMCU row */ - coef->MCU_ctr = 0; - } - /* Completed the iMCU row, advance counters for next one */ - if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) { - start_iMCU_row(cinfo); - return JPEG_ROW_COMPLETED; - } - /* Completed the scan */ - (*cinfo->inputctl->finish_input_pass) (cinfo); - return JPEG_SCAN_COMPLETED; -} - - -/* - * Decompress and return some data in the multi-pass case. - * Always attempts to emit one fully interleaved MCU row ("iMCU" row). - * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. - * - * NB: output_buf contains a plane for each component in image. - */ - -METHODDEF(int) -decompress_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; - JDIMENSION block_num; - int ci, block_row, block_rows; - JBLOCKARRAY buffer; - JBLOCKROW buffer_ptr; - JSAMPARRAY output_ptr; - JDIMENSION output_col; - jpeg_component_info *compptr; - inverse_DCT_method_ptr inverse_DCT; - - /* Force some input to be done if we are getting ahead of the input. */ - while (cinfo->input_scan_number < cinfo->output_scan_number || - (cinfo->input_scan_number == cinfo->output_scan_number && - cinfo->input_iMCU_row <= cinfo->output_iMCU_row)) { - if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED) - return JPEG_SUSPENDED; - } - - /* OK, output from the virtual arrays. */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* Don't bother to IDCT an uninteresting component. */ - if (! compptr->component_needed) - continue; - /* Align the virtual buffer for this component. */ - buffer = (*cinfo->mem->access_virt_barray) - ((j_common_ptr) cinfo, coef->whole_image[ci], - cinfo->output_iMCU_row * compptr->v_samp_factor, - (JDIMENSION) compptr->v_samp_factor, FALSE); - /* Count non-dummy DCT block rows in this iMCU row. */ - if (cinfo->output_iMCU_row < last_iMCU_row) - block_rows = compptr->v_samp_factor; - else { - /* NB: can't use last_row_height here; it is input-side-dependent! */ - block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); - if (block_rows == 0) block_rows = compptr->v_samp_factor; - } - inverse_DCT = cinfo->idct->inverse_DCT[ci]; - output_ptr = output_buf[ci]; - /* Loop over all DCT blocks to be processed. */ - for (block_row = 0; block_row < block_rows; block_row++) { - buffer_ptr = buffer[block_row]; - output_col = 0; - for (block_num = 0; block_num < compptr->width_in_blocks; block_num++) { - (*inverse_DCT) (cinfo, compptr, (JCOEFPTR) buffer_ptr, - output_ptr, output_col); - buffer_ptr++; - output_col += compptr->DCT_scaled_size; - } - output_ptr += compptr->DCT_scaled_size; - } - } - - if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows) - return JPEG_ROW_COMPLETED; - return JPEG_SCAN_COMPLETED; -} - -#endif /* D_MULTISCAN_FILES_SUPPORTED */ - - -#ifdef BLOCK_SMOOTHING_SUPPORTED - -/* - * This code applies interblock smoothing as described by section K.8 - * of the JPEG standard: the first 5 AC coefficients are estimated from - * the DC values of a DCT block and its 8 neighboring blocks. - * We apply smoothing only for progressive JPEG decoding, and only if - * the coefficients it can estimate are not yet known to full precision. - */ - -/* Natural-order array positions of the first 5 zigzag-order coefficients */ -#define Q01_POS 1 -#define Q10_POS 8 -#define Q20_POS 16 -#define Q11_POS 9 -#define Q02_POS 2 - -/* - * Determine whether block smoothing is applicable and safe. - * We also latch the current states of the coef_bits[] entries for the - * AC coefficients; otherwise, if the input side of the decompressor - * advances into a new scan, we might think the coefficients are known - * more accurately than they really are. - */ - -LOCAL(boolean) -smoothing_ok (j_decompress_ptr cinfo) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - boolean smoothing_useful = FALSE; - int ci, coefi; - jpeg_component_info *compptr; - JQUANT_TBL * qtable; - int * coef_bits; - int * coef_bits_latch; - - if (! cinfo->progressive_mode || cinfo->coef_bits == NULL) - return FALSE; - - /* Allocate latch area if not already done */ - if (coef->coef_bits_latch == NULL) - coef->coef_bits_latch = (int *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - cinfo->num_components * - (SAVED_COEFS * SIZEOF(int))); - coef_bits_latch = coef->coef_bits_latch; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* All components' quantization values must already be latched. */ - if ((qtable = compptr->quant_table) == NULL) - return FALSE; - /* Verify DC & first 5 AC quantizers are nonzero to avoid zero-divide. */ - if (qtable->quantval[0] == 0 || - qtable->quantval[Q01_POS] == 0 || - qtable->quantval[Q10_POS] == 0 || - qtable->quantval[Q20_POS] == 0 || - qtable->quantval[Q11_POS] == 0 || - qtable->quantval[Q02_POS] == 0) - return FALSE; - /* DC values must be at least partly known for all components. */ - coef_bits = cinfo->coef_bits[ci]; - if (coef_bits[0] < 0) - return FALSE; - /* Block smoothing is helpful if some AC coefficients remain inaccurate. */ - for (coefi = 1; coefi <= 5; coefi++) { - coef_bits_latch[coefi] = coef_bits[coefi]; - if (coef_bits[coefi] != 0) - smoothing_useful = TRUE; - } - coef_bits_latch += SAVED_COEFS; - } - - return smoothing_useful; -} - - -/* - * Variant of decompress_data for use when doing block smoothing. - */ - -METHODDEF(int) -decompress_smooth_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; - JDIMENSION block_num, last_block_column; - int ci, block_row, block_rows, access_rows; - JBLOCKARRAY buffer; - JBLOCKROW buffer_ptr, prev_block_row, next_block_row; - JSAMPARRAY output_ptr; - JDIMENSION output_col; - jpeg_component_info *compptr; - inverse_DCT_method_ptr inverse_DCT; - boolean first_row, last_row; - JBLOCK workspace; - int *coef_bits; - JQUANT_TBL *quanttbl; - INT32 Q00,Q01,Q02,Q10,Q11,Q20, num; - int DC1,DC2,DC3,DC4,DC5,DC6,DC7,DC8,DC9; - int Al, pred; - - /* Force some input to be done if we are getting ahead of the input. */ - while (cinfo->input_scan_number <= cinfo->output_scan_number && - ! cinfo->inputctl->eoi_reached) { - if (cinfo->input_scan_number == cinfo->output_scan_number) { - /* If input is working on current scan, we ordinarily want it to - * have completed the current row. But if input scan is DC, - * we want it to keep one row ahead so that next block row's DC - * values are up to date. - */ - JDIMENSION delta = (cinfo->Ss == 0) ? 1 : 0; - if (cinfo->input_iMCU_row > cinfo->output_iMCU_row+delta) - break; - } - if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED) - return JPEG_SUSPENDED; - } - - /* OK, output from the virtual arrays. */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* Don't bother to IDCT an uninteresting component. */ - if (! compptr->component_needed) - continue; - /* Count non-dummy DCT block rows in this iMCU row. */ - if (cinfo->output_iMCU_row < last_iMCU_row) { - block_rows = compptr->v_samp_factor; - access_rows = block_rows * 2; /* this and next iMCU row */ - last_row = FALSE; - } else { - /* NB: can't use last_row_height here; it is input-side-dependent! */ - block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); - if (block_rows == 0) block_rows = compptr->v_samp_factor; - access_rows = block_rows; /* this iMCU row only */ - last_row = TRUE; - } - /* Align the virtual buffer for this component. */ - if (cinfo->output_iMCU_row > 0) { - access_rows += compptr->v_samp_factor; /* prior iMCU row too */ - buffer = (*cinfo->mem->access_virt_barray) - ((j_common_ptr) cinfo, coef->whole_image[ci], - (cinfo->output_iMCU_row - 1) * compptr->v_samp_factor, - (JDIMENSION) access_rows, FALSE); - buffer += compptr->v_samp_factor; /* point to current iMCU row */ - first_row = FALSE; - } else { - buffer = (*cinfo->mem->access_virt_barray) - ((j_common_ptr) cinfo, coef->whole_image[ci], - (JDIMENSION) 0, (JDIMENSION) access_rows, FALSE); - first_row = TRUE; - } - /* Fetch component-dependent info */ - coef_bits = coef->coef_bits_latch + (ci * SAVED_COEFS); - quanttbl = compptr->quant_table; - Q00 = quanttbl->quantval[0]; - Q01 = quanttbl->quantval[Q01_POS]; - Q10 = quanttbl->quantval[Q10_POS]; - Q20 = quanttbl->quantval[Q20_POS]; - Q11 = quanttbl->quantval[Q11_POS]; - Q02 = quanttbl->quantval[Q02_POS]; - inverse_DCT = cinfo->idct->inverse_DCT[ci]; - output_ptr = output_buf[ci]; - /* Loop over all DCT blocks to be processed. */ - for (block_row = 0; block_row < block_rows; block_row++) { - buffer_ptr = buffer[block_row]; - if (first_row && block_row == 0) - prev_block_row = buffer_ptr; - else - prev_block_row = buffer[block_row-1]; - if (last_row && block_row == block_rows-1) - next_block_row = buffer_ptr; - else - next_block_row = buffer[block_row+1]; - /* We fetch the surrounding DC values using a sliding-register approach. - * Initialize all nine here so as to do the right thing on narrow pics. - */ - DC1 = DC2 = DC3 = (int) prev_block_row[0][0]; - DC4 = DC5 = DC6 = (int) buffer_ptr[0][0]; - DC7 = DC8 = DC9 = (int) next_block_row[0][0]; - output_col = 0; - last_block_column = compptr->width_in_blocks - 1; - for (block_num = 0; block_num <= last_block_column; block_num++) { - /* Fetch current DCT block into workspace so we can modify it. */ - jcopy_block_row(buffer_ptr, (JBLOCKROW) workspace, (JDIMENSION) 1); - /* Update DC values */ - if (block_num < last_block_column) { - DC3 = (int) prev_block_row[1][0]; - DC6 = (int) buffer_ptr[1][0]; - DC9 = (int) next_block_row[1][0]; - } - /* Compute coefficient estimates per K.8. - * An estimate is applied only if coefficient is still zero, - * and is not known to be fully accurate. - */ - /* AC01 */ - if ((Al=coef_bits[1]) != 0 && workspace[1] == 0) { - num = 36 * Q00 * (DC4 - DC6); - if (num >= 0) { - pred = (int) (((Q01<<7) + num) / (Q01<<8)); - if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { - pred = (int) (((Q10<<7) + num) / (Q10<<8)); - if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { - pred = (int) (((Q20<<7) + num) / (Q20<<8)); - if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { - pred = (int) (((Q11<<7) + num) / (Q11<<8)); - if (Al > 0 && pred >= (1< 0 && pred >= (1<= 0) { - pred = (int) (((Q02<<7) + num) / (Q02<<8)); - if (Al > 0 && pred >= (1< 0 && pred >= (1<DCT_scaled_size; - } - output_ptr += compptr->DCT_scaled_size; - } - } - - if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows) - return JPEG_ROW_COMPLETED; - return JPEG_SCAN_COMPLETED; -} - -#endif /* BLOCK_SMOOTHING_SUPPORTED */ - - -/* - * Initialize coefficient buffer controller. - */ - -GLOBAL(void) -jinit_d_coef_controller (j_decompress_ptr cinfo, boolean need_full_buffer) -{ - my_coef_ptr coef; - - coef = (my_coef_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_coef_controller)); - cinfo->coef = (struct jpeg_d_coef_controller *) coef; - coef->pub.start_input_pass = start_input_pass; - coef->pub.start_output_pass = start_output_pass; -#ifdef BLOCK_SMOOTHING_SUPPORTED - coef->coef_bits_latch = NULL; -#endif - - /* Create the coefficient buffer. */ - if (need_full_buffer) { -#ifdef D_MULTISCAN_FILES_SUPPORTED - /* Allocate a full-image virtual array for each component, */ - /* padded to a multiple of samp_factor DCT blocks in each direction. */ - /* Note we ask for a pre-zeroed array. */ - int ci, access_rows; - jpeg_component_info *compptr; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - access_rows = compptr->v_samp_factor; -#ifdef BLOCK_SMOOTHING_SUPPORTED - /* If block smoothing could be used, need a bigger window */ - if (cinfo->progressive_mode) - access_rows *= 3; -#endif - coef->whole_image[ci] = (*cinfo->mem->request_virt_barray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, TRUE, - (JDIMENSION) jround_up((long) compptr->width_in_blocks, - (long) compptr->h_samp_factor), - (JDIMENSION) jround_up((long) compptr->height_in_blocks, - (long) compptr->v_samp_factor), - (JDIMENSION) access_rows); - } - coef->pub.consume_data = consume_data; - coef->pub.decompress_data = decompress_data; - coef->pub.coef_arrays = coef->whole_image; /* link to virtual arrays */ -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } else { - /* We only need a single-MCU buffer. */ - JBLOCKROW buffer; - int i; - - buffer = (JBLOCKROW) - (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, - D_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); - for (i = 0; i < D_MAX_BLOCKS_IN_MCU; i++) { - coef->MCU_buffer[i] = buffer + i; - } - coef->pub.consume_data = dummy_consume_data; - coef->pub.decompress_data = decompress_onepass; - coef->pub.coef_arrays = NULL; /* flag for no virtual arrays */ - } -} diff --git a/Build/source/libs/jpeg/jdcolor.c b/Build/source/libs/jpeg/jdcolor.c deleted file mode 100644 index 6c04dfe8aa1..00000000000 --- a/Build/source/libs/jpeg/jdcolor.c +++ /dev/null @@ -1,396 +0,0 @@ -/* - * jdcolor.c - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains output colorspace conversion routines. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Private subobject */ - -typedef struct { - struct jpeg_color_deconverter pub; /* public fields */ - - /* Private state for YCC->RGB conversion */ - int * Cr_r_tab; /* => table for Cr to R conversion */ - int * Cb_b_tab; /* => table for Cb to B conversion */ - INT32 * Cr_g_tab; /* => table for Cr to G conversion */ - INT32 * Cb_g_tab; /* => table for Cb to G conversion */ -} my_color_deconverter; - -typedef my_color_deconverter * my_cconvert_ptr; - - -/**************** YCbCr -> RGB conversion: most common case **************/ - -/* - * YCbCr is defined per CCIR 601-1, except that Cb and Cr are - * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. - * The conversion equations to be implemented are therefore - * R = Y + 1.40200 * Cr - * G = Y - 0.34414 * Cb - 0.71414 * Cr - * B = Y + 1.77200 * Cb - * where Cb and Cr represent the incoming values less CENTERJSAMPLE. - * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) - * - * To avoid floating-point arithmetic, we represent the fractional constants - * as integers scaled up by 2^16 (about 4 digits precision); we have to divide - * the products by 2^16, with appropriate rounding, to get the correct answer. - * Notice that Y, being an integral input, does not contribute any fraction - * so it need not participate in the rounding. - * - * For even more speed, we avoid doing any multiplications in the inner loop - * by precalculating the constants times Cb and Cr for all possible values. - * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table); - * for 12-bit samples it is still acceptable. It's not very reasonable for - * 16-bit samples, but if you want lossless storage you shouldn't be changing - * colorspace anyway. - * The Cr=>R and Cb=>B values can be rounded to integers in advance; the - * values for the G calculation are left scaled up, since we must add them - * together before rounding. - */ - -#define SCALEBITS 16 /* speediest right-shift on some machines */ -#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) -#define FIX(x) ((INT32) ((x) * (1L<RGB colorspace conversion. - */ - -LOCAL(void) -build_ycc_rgb_table (j_decompress_ptr cinfo) -{ - my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - int i; - INT32 x; - SHIFT_TEMPS - - cconvert->Cr_r_tab = (int *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (MAXJSAMPLE+1) * SIZEOF(int)); - cconvert->Cb_b_tab = (int *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (MAXJSAMPLE+1) * SIZEOF(int)); - cconvert->Cr_g_tab = (INT32 *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (MAXJSAMPLE+1) * SIZEOF(INT32)); - cconvert->Cb_g_tab = (INT32 *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (MAXJSAMPLE+1) * SIZEOF(INT32)); - - for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { - /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ - /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ - /* Cr=>R value is nearest int to 1.40200 * x */ - cconvert->Cr_r_tab[i] = (int) - RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); - /* Cb=>B value is nearest int to 1.77200 * x */ - cconvert->Cb_b_tab[i] = (int) - RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); - /* Cr=>G value is scaled-up -0.71414 * x */ - cconvert->Cr_g_tab[i] = (- FIX(0.71414)) * x; - /* Cb=>G value is scaled-up -0.34414 * x */ - /* We also add in ONE_HALF so that need not do it in inner loop */ - cconvert->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; - } -} - - -/* - * Convert some rows of samples to the output colorspace. - * - * Note that we change from noninterleaved, one-plane-per-component format - * to interleaved-pixel format. The output buffer is therefore three times - * as wide as the input buffer. - * A starting row offset is provided only for the input buffer. The caller - * can easily adjust the passed output_buf value to accommodate any row - * offset required on that side. - */ - -METHODDEF(void) -ycc_rgb_convert (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION input_row, - JSAMPARRAY output_buf, int num_rows) -{ - my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int y, cb, cr; - register JSAMPROW outptr; - register JSAMPROW inptr0, inptr1, inptr2; - register JDIMENSION col; - JDIMENSION num_cols = cinfo->output_width; - /* copy these pointers into registers if possible */ - register JSAMPLE * range_limit = cinfo->sample_range_limit; - register int * Crrtab = cconvert->Cr_r_tab; - register int * Cbbtab = cconvert->Cb_b_tab; - register INT32 * Crgtab = cconvert->Cr_g_tab; - register INT32 * Cbgtab = cconvert->Cb_g_tab; - SHIFT_TEMPS - - while (--num_rows >= 0) { - inptr0 = input_buf[0][input_row]; - inptr1 = input_buf[1][input_row]; - inptr2 = input_buf[2][input_row]; - input_row++; - outptr = *output_buf++; - for (col = 0; col < num_cols; col++) { - y = GETJSAMPLE(inptr0[col]); - cb = GETJSAMPLE(inptr1[col]); - cr = GETJSAMPLE(inptr2[col]); - /* Range-limiting is essential due to noise introduced by DCT losses. */ - outptr[RGB_RED] = range_limit[y + Crrtab[cr]]; - outptr[RGB_GREEN] = range_limit[y + - ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], - SCALEBITS))]; - outptr[RGB_BLUE] = range_limit[y + Cbbtab[cb]]; - outptr += RGB_PIXELSIZE; - } - } -} - - -/**************** Cases other than YCbCr -> RGB **************/ - - -/* - * Color conversion for no colorspace change: just copy the data, - * converting from separate-planes to interleaved representation. - */ - -METHODDEF(void) -null_convert (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION input_row, - JSAMPARRAY output_buf, int num_rows) -{ - register JSAMPROW inptr, outptr; - register JDIMENSION count; - register int num_components = cinfo->num_components; - JDIMENSION num_cols = cinfo->output_width; - int ci; - - while (--num_rows >= 0) { - for (ci = 0; ci < num_components; ci++) { - inptr = input_buf[ci][input_row]; - outptr = output_buf[0] + ci; - for (count = num_cols; count > 0; count--) { - *outptr = *inptr++; /* needn't bother with GETJSAMPLE() here */ - outptr += num_components; - } - } - input_row++; - output_buf++; - } -} - - -/* - * Color conversion for grayscale: just copy the data. - * This also works for YCbCr -> grayscale conversion, in which - * we just copy the Y (luminance) component and ignore chrominance. - */ - -METHODDEF(void) -grayscale_convert (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION input_row, - JSAMPARRAY output_buf, int num_rows) -{ - jcopy_sample_rows(input_buf[0], (int) input_row, output_buf, 0, - num_rows, cinfo->output_width); -} - - -/* - * Convert grayscale to RGB: just duplicate the graylevel three times. - * This is provided to support applications that don't want to cope - * with grayscale as a separate case. - */ - -METHODDEF(void) -gray_rgb_convert (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION input_row, - JSAMPARRAY output_buf, int num_rows) -{ - register JSAMPROW inptr, outptr; - register JDIMENSION col; - JDIMENSION num_cols = cinfo->output_width; - - while (--num_rows >= 0) { - inptr = input_buf[0][input_row++]; - outptr = *output_buf++; - for (col = 0; col < num_cols; col++) { - /* We can dispense with GETJSAMPLE() here */ - outptr[RGB_RED] = outptr[RGB_GREEN] = outptr[RGB_BLUE] = inptr[col]; - outptr += RGB_PIXELSIZE; - } - } -} - - -/* - * Adobe-style YCCK->CMYK conversion. - * We convert YCbCr to R=1-C, G=1-M, and B=1-Y using the same - * conversion as above, while passing K (black) unchanged. - * We assume build_ycc_rgb_table has been called. - */ - -METHODDEF(void) -ycck_cmyk_convert (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION input_row, - JSAMPARRAY output_buf, int num_rows) -{ - my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int y, cb, cr; - register JSAMPROW outptr; - register JSAMPROW inptr0, inptr1, inptr2, inptr3; - register JDIMENSION col; - JDIMENSION num_cols = cinfo->output_width; - /* copy these pointers into registers if possible */ - register JSAMPLE * range_limit = cinfo->sample_range_limit; - register int * Crrtab = cconvert->Cr_r_tab; - register int * Cbbtab = cconvert->Cb_b_tab; - register INT32 * Crgtab = cconvert->Cr_g_tab; - register INT32 * Cbgtab = cconvert->Cb_g_tab; - SHIFT_TEMPS - - while (--num_rows >= 0) { - inptr0 = input_buf[0][input_row]; - inptr1 = input_buf[1][input_row]; - inptr2 = input_buf[2][input_row]; - inptr3 = input_buf[3][input_row]; - input_row++; - outptr = *output_buf++; - for (col = 0; col < num_cols; col++) { - y = GETJSAMPLE(inptr0[col]); - cb = GETJSAMPLE(inptr1[col]); - cr = GETJSAMPLE(inptr2[col]); - /* Range-limiting is essential due to noise introduced by DCT losses. */ - outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])]; /* red */ - outptr[1] = range_limit[MAXJSAMPLE - (y + /* green */ - ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], - SCALEBITS)))]; - outptr[2] = range_limit[MAXJSAMPLE - (y + Cbbtab[cb])]; /* blue */ - /* K passes through unchanged */ - outptr[3] = inptr3[col]; /* don't need GETJSAMPLE here */ - outptr += 4; - } - } -} - - -/* - * Empty method for start_pass. - */ - -METHODDEF(void) -start_pass_dcolor (j_decompress_ptr cinfo) -{ - /* no work needed */ -} - - -/* - * Module initialization routine for output colorspace conversion. - */ - -GLOBAL(void) -jinit_color_deconverter (j_decompress_ptr cinfo) -{ - my_cconvert_ptr cconvert; - int ci; - - cconvert = (my_cconvert_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_color_deconverter)); - cinfo->cconvert = (struct jpeg_color_deconverter *) cconvert; - cconvert->pub.start_pass = start_pass_dcolor; - - /* Make sure num_components agrees with jpeg_color_space */ - switch (cinfo->jpeg_color_space) { - case JCS_GRAYSCALE: - if (cinfo->num_components != 1) - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - break; - - case JCS_RGB: - case JCS_YCbCr: - if (cinfo->num_components != 3) - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - break; - - case JCS_CMYK: - case JCS_YCCK: - if (cinfo->num_components != 4) - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - break; - - default: /* JCS_UNKNOWN can be anything */ - if (cinfo->num_components < 1) - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - break; - } - - /* Set out_color_components and conversion method based on requested space. - * Also clear the component_needed flags for any unused components, - * so that earlier pipeline stages can avoid useless computation. - */ - - switch (cinfo->out_color_space) { - case JCS_GRAYSCALE: - cinfo->out_color_components = 1; - if (cinfo->jpeg_color_space == JCS_GRAYSCALE || - cinfo->jpeg_color_space == JCS_YCbCr) { - cconvert->pub.color_convert = grayscale_convert; - /* For color->grayscale conversion, only the Y (0) component is needed */ - for (ci = 1; ci < cinfo->num_components; ci++) - cinfo->comp_info[ci].component_needed = FALSE; - } else - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; - - case JCS_RGB: - cinfo->out_color_components = RGB_PIXELSIZE; - if (cinfo->jpeg_color_space == JCS_YCbCr) { - cconvert->pub.color_convert = ycc_rgb_convert; - build_ycc_rgb_table(cinfo); - } else if (cinfo->jpeg_color_space == JCS_GRAYSCALE) { - cconvert->pub.color_convert = gray_rgb_convert; - } else if (cinfo->jpeg_color_space == JCS_RGB && RGB_PIXELSIZE == 3) { - cconvert->pub.color_convert = null_convert; - } else - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; - - case JCS_CMYK: - cinfo->out_color_components = 4; - if (cinfo->jpeg_color_space == JCS_YCCK) { - cconvert->pub.color_convert = ycck_cmyk_convert; - build_ycc_rgb_table(cinfo); - } else if (cinfo->jpeg_color_space == JCS_CMYK) { - cconvert->pub.color_convert = null_convert; - } else - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; - - default: - /* Permit null conversion to same output space */ - if (cinfo->out_color_space == cinfo->jpeg_color_space) { - cinfo->out_color_components = cinfo->num_components; - cconvert->pub.color_convert = null_convert; - } else /* unsupported non-null conversion */ - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; - } - - if (cinfo->quantize_colors) - cinfo->output_components = 1; /* single colormapped output component */ - else - cinfo->output_components = cinfo->out_color_components; -} diff --git a/Build/source/libs/jpeg/jdct.h b/Build/source/libs/jpeg/jdct.h deleted file mode 100644 index 04192a266ae..00000000000 --- a/Build/source/libs/jpeg/jdct.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * jdct.h - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This include file contains common declarations for the forward and - * inverse DCT modules. These declarations are private to the DCT managers - * (jcdctmgr.c, jddctmgr.c) and the individual DCT algorithms. - * The individual DCT algorithms are kept in separate files to ease - * machine-dependent tuning (e.g., assembly coding). - */ - - -/* - * A forward DCT routine is given a pointer to a work area of type DCTELEM[]; - * the DCT is to be performed in-place in that buffer. Type DCTELEM is int - * for 8-bit samples, INT32 for 12-bit samples. (NOTE: Floating-point DCT - * implementations use an array of type FAST_FLOAT, instead.) - * The DCT inputs are expected to be signed (range +-CENTERJSAMPLE). - * The DCT outputs are returned scaled up by a factor of 8; they therefore - * have a range of +-8K for 8-bit data, +-128K for 12-bit data. This - * convention improves accuracy in integer implementations and saves some - * work in floating-point ones. - * Quantization of the output coefficients is done by jcdctmgr.c. - */ - -#if BITS_IN_JSAMPLE == 8 -typedef int DCTELEM; /* 16 or 32 bits is fine */ -#else -typedef INT32 DCTELEM; /* must have 32 bits */ -#endif - -typedef JMETHOD(void, forward_DCT_method_ptr, (DCTELEM * data)); -typedef JMETHOD(void, float_DCT_method_ptr, (FAST_FLOAT * data)); - - -/* - * An inverse DCT routine is given a pointer to the input JBLOCK and a pointer - * to an output sample array. The routine must dequantize the input data as - * well as perform the IDCT; for dequantization, it uses the multiplier table - * pointed to by compptr->dct_table. The output data is to be placed into the - * sample array starting at a specified column. (Any row offset needed will - * be applied to the array pointer before it is passed to the IDCT code.) - * Note that the number of samples emitted by the IDCT routine is - * DCT_scaled_size * DCT_scaled_size. - */ - -/* typedef inverse_DCT_method_ptr is declared in jpegint.h */ - -/* - * Each IDCT routine has its own ideas about the best dct_table element type. - */ - -typedef MULTIPLIER ISLOW_MULT_TYPE; /* short or int, whichever is faster */ -#if BITS_IN_JSAMPLE == 8 -typedef MULTIPLIER IFAST_MULT_TYPE; /* 16 bits is OK, use short if faster */ -#define IFAST_SCALE_BITS 2 /* fractional bits in scale factors */ -#else -typedef INT32 IFAST_MULT_TYPE; /* need 32 bits for scaled quantizers */ -#define IFAST_SCALE_BITS 13 /* fractional bits in scale factors */ -#endif -typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */ - - -/* - * Each IDCT routine is responsible for range-limiting its results and - * converting them to unsigned form (0..MAXJSAMPLE). The raw outputs could - * be quite far out of range if the input data is corrupt, so a bulletproof - * range-limiting step is required. We use a mask-and-table-lookup method - * to do the combined operations quickly. See the comments with - * prepare_range_limit_table (in jdmaster.c) for more info. - */ - -#define IDCT_range_limit(cinfo) ((cinfo)->sample_range_limit + CENTERJSAMPLE) - -#define RANGE_MASK (MAXJSAMPLE * 4 + 3) /* 2 bits wider than legal samples */ - - -/* Short forms of external names for systems with brain-damaged linkers. */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jpeg_fdct_islow jFDislow -#define jpeg_fdct_ifast jFDifast -#define jpeg_fdct_float jFDfloat -#define jpeg_idct_islow jRDislow -#define jpeg_idct_ifast jRDifast -#define jpeg_idct_float jRDfloat -#define jpeg_idct_4x4 jRD4x4 -#define jpeg_idct_2x2 jRD2x2 -#define jpeg_idct_1x1 jRD1x1 -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - -/* Extern declarations for the forward and inverse DCT routines. */ - -EXTERN(void) jpeg_fdct_islow JPP((DCTELEM * data)); -EXTERN(void) jpeg_fdct_ifast JPP((DCTELEM * data)); -EXTERN(void) jpeg_fdct_float JPP((FAST_FLOAT * data)); - -EXTERN(void) jpeg_idct_islow - JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); -EXTERN(void) jpeg_idct_ifast - JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); -EXTERN(void) jpeg_idct_float - JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); -EXTERN(void) jpeg_idct_4x4 - JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); -EXTERN(void) jpeg_idct_2x2 - JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); -EXTERN(void) jpeg_idct_1x1 - JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); - - -/* - * Macros for handling fixed-point arithmetic; these are used by many - * but not all of the DCT/IDCT modules. - * - * All values are expected to be of type INT32. - * Fractional constants are scaled left by CONST_BITS bits. - * CONST_BITS is defined within each module using these macros, - * and may differ from one module to the next. - */ - -#define ONE ((INT32) 1) -#define CONST_SCALE (ONE << CONST_BITS) - -/* Convert a positive real constant to an integer scaled by CONST_SCALE. - * Caution: some C compilers fail to reduce "FIX(constant)" at compile time, - * thus causing a lot of useless floating-point operations at run time. - */ - -#define FIX(x) ((INT32) ((x) * CONST_SCALE + 0.5)) - -/* Descale and correctly round an INT32 value that's scaled by N bits. - * We assume RIGHT_SHIFT rounds towards minus infinity, so adding - * the fudge factor is correct for either sign of X. - */ - -#define DESCALE(x,n) RIGHT_SHIFT((x) + (ONE << ((n)-1)), n) - -/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. - * This macro is used only when the two inputs will actually be no more than - * 16 bits wide, so that a 16x16->32 bit multiply can be used instead of a - * full 32x32 multiply. This provides a useful speedup on many machines. - * Unfortunately there is no way to specify a 16x16->32 multiply portably - * in C, but some C compilers will do the right thing if you provide the - * correct combination of casts. - */ - -#ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ -#define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT16) (const))) -#endif -#ifdef SHORTxLCONST_32 /* known to work with Microsoft C 6.0 */ -#define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT32) (const))) -#endif - -#ifndef MULTIPLY16C16 /* default definition */ -#define MULTIPLY16C16(var,const) ((var) * (const)) -#endif - -/* Same except both inputs are variables. */ - -#ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ -#define MULTIPLY16V16(var1,var2) (((INT16) (var1)) * ((INT16) (var2))) -#endif - -#ifndef MULTIPLY16V16 /* default definition */ -#define MULTIPLY16V16(var1,var2) ((var1) * (var2)) -#endif diff --git a/Build/source/libs/jpeg/jddctmgr.c b/Build/source/libs/jpeg/jddctmgr.c deleted file mode 100644 index bbf8d0e92fd..00000000000 --- a/Build/source/libs/jpeg/jddctmgr.c +++ /dev/null @@ -1,269 +0,0 @@ -/* - * jddctmgr.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the inverse-DCT management logic. - * This code selects a particular IDCT implementation to be used, - * and it performs related housekeeping chores. No code in this file - * is executed per IDCT step, only during output pass setup. - * - * Note that the IDCT routines are responsible for performing coefficient - * dequantization as well as the IDCT proper. This module sets up the - * dequantization multiplier table needed by the IDCT routine. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdct.h" /* Private declarations for DCT subsystem */ - - -/* - * The decompressor input side (jdinput.c) saves away the appropriate - * quantization table for each component at the start of the first scan - * involving that component. (This is necessary in order to correctly - * decode files that reuse Q-table slots.) - * When we are ready to make an output pass, the saved Q-table is converted - * to a multiplier table that will actually be used by the IDCT routine. - * The multiplier table contents are IDCT-method-dependent. To support - * application changes in IDCT method between scans, we can remake the - * multiplier tables if necessary. - * In buffered-image mode, the first output pass may occur before any data - * has been seen for some components, and thus before their Q-tables have - * been saved away. To handle this case, multiplier tables are preset - * to zeroes; the result of the IDCT will be a neutral gray level. - */ - - -/* Private subobject for this module */ - -typedef struct { - struct jpeg_inverse_dct pub; /* public fields */ - - /* This array contains the IDCT method code that each multiplier table - * is currently set up for, or -1 if it's not yet set up. - * The actual multiplier tables are pointed to by dct_table in the - * per-component comp_info structures. - */ - int cur_method[MAX_COMPONENTS]; -} my_idct_controller; - -typedef my_idct_controller * my_idct_ptr; - - -/* Allocated multiplier tables: big enough for any supported variant */ - -typedef union { - ISLOW_MULT_TYPE islow_array[DCTSIZE2]; -#ifdef DCT_IFAST_SUPPORTED - IFAST_MULT_TYPE ifast_array[DCTSIZE2]; -#endif -#ifdef DCT_FLOAT_SUPPORTED - FLOAT_MULT_TYPE float_array[DCTSIZE2]; -#endif -} multiplier_table; - - -/* The current scaled-IDCT routines require ISLOW-style multiplier tables, - * so be sure to compile that code if either ISLOW or SCALING is requested. - */ -#ifdef DCT_ISLOW_SUPPORTED -#define PROVIDE_ISLOW_TABLES -#else -#ifdef IDCT_SCALING_SUPPORTED -#define PROVIDE_ISLOW_TABLES -#endif -#endif - - -/* - * Prepare for an output pass. - * Here we select the proper IDCT routine for each component and build - * a matching multiplier table. - */ - -METHODDEF(void) -start_pass (j_decompress_ptr cinfo) -{ - my_idct_ptr idct = (my_idct_ptr) cinfo->idct; - int ci, i; - jpeg_component_info *compptr; - int method = 0; - inverse_DCT_method_ptr method_ptr = NULL; - JQUANT_TBL * qtbl; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* Select the proper IDCT routine for this component's scaling */ - switch (compptr->DCT_scaled_size) { -#ifdef IDCT_SCALING_SUPPORTED - case 1: - method_ptr = jpeg_idct_1x1; - method = JDCT_ISLOW; /* jidctred uses islow-style table */ - break; - case 2: - method_ptr = jpeg_idct_2x2; - method = JDCT_ISLOW; /* jidctred uses islow-style table */ - break; - case 4: - method_ptr = jpeg_idct_4x4; - method = JDCT_ISLOW; /* jidctred uses islow-style table */ - break; -#endif - case DCTSIZE: - switch (cinfo->dct_method) { -#ifdef DCT_ISLOW_SUPPORTED - case JDCT_ISLOW: - method_ptr = jpeg_idct_islow; - method = JDCT_ISLOW; - break; -#endif -#ifdef DCT_IFAST_SUPPORTED - case JDCT_IFAST: - method_ptr = jpeg_idct_ifast; - method = JDCT_IFAST; - break; -#endif -#ifdef DCT_FLOAT_SUPPORTED - case JDCT_FLOAT: - method_ptr = jpeg_idct_float; - method = JDCT_FLOAT; - break; -#endif - default: - ERREXIT(cinfo, JERR_NOT_COMPILED); - break; - } - break; - default: - ERREXIT1(cinfo, JERR_BAD_DCTSIZE, compptr->DCT_scaled_size); - break; - } - idct->pub.inverse_DCT[ci] = method_ptr; - /* Create multiplier table from quant table. - * However, we can skip this if the component is uninteresting - * or if we already built the table. Also, if no quant table - * has yet been saved for the component, we leave the - * multiplier table all-zero; we'll be reading zeroes from the - * coefficient controller's buffer anyway. - */ - if (! compptr->component_needed || idct->cur_method[ci] == method) - continue; - qtbl = compptr->quant_table; - if (qtbl == NULL) /* happens if no data yet for component */ - continue; - idct->cur_method[ci] = method; - switch (method) { -#ifdef PROVIDE_ISLOW_TABLES - case JDCT_ISLOW: - { - /* For LL&M IDCT method, multipliers are equal to raw quantization - * coefficients, but are stored as ints to ensure access efficiency. - */ - ISLOW_MULT_TYPE * ismtbl = (ISLOW_MULT_TYPE *) compptr->dct_table; - for (i = 0; i < DCTSIZE2; i++) { - ismtbl[i] = (ISLOW_MULT_TYPE) qtbl->quantval[i]; - } - } - break; -#endif -#ifdef DCT_IFAST_SUPPORTED - case JDCT_IFAST: - { - /* For AA&N IDCT method, multipliers are equal to quantization - * coefficients scaled by scalefactor[row]*scalefactor[col], where - * scalefactor[0] = 1 - * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 - * For integer operation, the multiplier table is to be scaled by - * IFAST_SCALE_BITS. - */ - IFAST_MULT_TYPE * ifmtbl = (IFAST_MULT_TYPE *) compptr->dct_table; -#define CONST_BITS 14 - static const INT16 aanscales[DCTSIZE2] = { - /* precomputed values scaled up by 14 bits */ - 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, - 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270, - 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906, - 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315, - 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, - 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552, - 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446, - 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247 - }; - SHIFT_TEMPS - - for (i = 0; i < DCTSIZE2; i++) { - ifmtbl[i] = (IFAST_MULT_TYPE) - DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], - (INT32) aanscales[i]), - CONST_BITS-IFAST_SCALE_BITS); - } - } - break; -#endif -#ifdef DCT_FLOAT_SUPPORTED - case JDCT_FLOAT: - { - /* For float AA&N IDCT method, multipliers are equal to quantization - * coefficients scaled by scalefactor[row]*scalefactor[col], where - * scalefactor[0] = 1 - * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 - */ - FLOAT_MULT_TYPE * fmtbl = (FLOAT_MULT_TYPE *) compptr->dct_table; - int row, col; - static const double aanscalefactor[DCTSIZE] = { - 1.0, 1.387039845, 1.306562965, 1.175875602, - 1.0, 0.785694958, 0.541196100, 0.275899379 - }; - - i = 0; - for (row = 0; row < DCTSIZE; row++) { - for (col = 0; col < DCTSIZE; col++) { - fmtbl[i] = (FLOAT_MULT_TYPE) - ((double) qtbl->quantval[i] * - aanscalefactor[row] * aanscalefactor[col]); - i++; - } - } - } - break; -#endif - default: - ERREXIT(cinfo, JERR_NOT_COMPILED); - break; - } - } -} - - -/* - * Initialize IDCT manager. - */ - -GLOBAL(void) -jinit_inverse_dct (j_decompress_ptr cinfo) -{ - my_idct_ptr idct; - int ci; - jpeg_component_info *compptr; - - idct = (my_idct_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_idct_controller)); - cinfo->idct = (struct jpeg_inverse_dct *) idct; - idct->pub.start_pass = start_pass; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* Allocate and pre-zero a multiplier table for each component */ - compptr->dct_table = - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(multiplier_table)); - MEMZERO(compptr->dct_table, SIZEOF(multiplier_table)); - /* Mark multiplier table not yet set up for any method */ - idct->cur_method[ci] = -1; - } -} diff --git a/Build/source/libs/jpeg/jdhuff.c b/Build/source/libs/jpeg/jdhuff.c deleted file mode 100644 index b5ba39f736a..00000000000 --- a/Build/source/libs/jpeg/jdhuff.c +++ /dev/null @@ -1,651 +0,0 @@ -/* - * jdhuff.c - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains Huffman entropy decoding routines. - * - * Much of the complexity here has to do with supporting input suspension. - * If the data source module demands suspension, we want to be able to back - * up to the start of the current MCU. To do this, we copy state variables - * into local working storage, and update them back to the permanent - * storage only upon successful completion of an MCU. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdhuff.h" /* Declarations shared with jdphuff.c */ - - -/* - * Expanded entropy decoder object for Huffman decoding. - * - * The savable_state subrecord contains fields that change within an MCU, - * but must not be updated permanently until we complete the MCU. - */ - -typedef struct { - int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ -} savable_state; - -/* This macro is to work around compilers with missing or broken - * structure assignment. You'll need to fix this code if you have - * such a compiler and you change MAX_COMPS_IN_SCAN. - */ - -#ifndef NO_STRUCT_ASSIGN -#define ASSIGN_STATE(dest,src) ((dest) = (src)) -#else -#if MAX_COMPS_IN_SCAN == 4 -#define ASSIGN_STATE(dest,src) \ - ((dest).last_dc_val[0] = (src).last_dc_val[0], \ - (dest).last_dc_val[1] = (src).last_dc_val[1], \ - (dest).last_dc_val[2] = (src).last_dc_val[2], \ - (dest).last_dc_val[3] = (src).last_dc_val[3]) -#endif -#endif - - -typedef struct { - struct jpeg_entropy_decoder pub; /* public fields */ - - /* These fields are loaded into local variables at start of each MCU. - * In case of suspension, we exit WITHOUT updating them. - */ - bitread_perm_state bitstate; /* Bit buffer at start of MCU */ - savable_state saved; /* Other state at start of MCU */ - - /* These fields are NOT loaded into local working state. */ - unsigned int restarts_to_go; /* MCUs left in this restart interval */ - - /* Pointers to derived tables (these workspaces have image lifespan) */ - d_derived_tbl * dc_derived_tbls[NUM_HUFF_TBLS]; - d_derived_tbl * ac_derived_tbls[NUM_HUFF_TBLS]; - - /* Precalculated info set up by start_pass for use in decode_mcu: */ - - /* Pointers to derived tables to be used for each block within an MCU */ - d_derived_tbl * dc_cur_tbls[D_MAX_BLOCKS_IN_MCU]; - d_derived_tbl * ac_cur_tbls[D_MAX_BLOCKS_IN_MCU]; - /* Whether we care about the DC and AC coefficient values for each block */ - boolean dc_needed[D_MAX_BLOCKS_IN_MCU]; - boolean ac_needed[D_MAX_BLOCKS_IN_MCU]; -} huff_entropy_decoder; - -typedef huff_entropy_decoder * huff_entropy_ptr; - - -/* - * Initialize for a Huffman-compressed scan. - */ - -METHODDEF(void) -start_pass_huff_decoder (j_decompress_ptr cinfo) -{ - huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - int ci, blkn, dctbl, actbl; - jpeg_component_info * compptr; - - /* Check that the scan parameters Ss, Se, Ah/Al are OK for sequential JPEG. - * This ought to be an error condition, but we make it a warning because - * there are some baseline files out there with all zeroes in these bytes. - */ - if (cinfo->Ss != 0 || cinfo->Se != DCTSIZE2-1 || - cinfo->Ah != 0 || cinfo->Al != 0) - WARNMS(cinfo, JWRN_NOT_SEQUENTIAL); - - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - dctbl = compptr->dc_tbl_no; - actbl = compptr->ac_tbl_no; - /* Compute derived values for Huffman tables */ - /* We may do this more than once for a table, but it's not expensive */ - jpeg_make_d_derived_tbl(cinfo, TRUE, dctbl, - & entropy->dc_derived_tbls[dctbl]); - jpeg_make_d_derived_tbl(cinfo, FALSE, actbl, - & entropy->ac_derived_tbls[actbl]); - /* Initialize DC predictions to 0 */ - entropy->saved.last_dc_val[ci] = 0; - } - - /* Precalculate decoding info for each block in an MCU of this scan */ - for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { - ci = cinfo->MCU_membership[blkn]; - compptr = cinfo->cur_comp_info[ci]; - /* Precalculate which table to use for each block */ - entropy->dc_cur_tbls[blkn] = entropy->dc_derived_tbls[compptr->dc_tbl_no]; - entropy->ac_cur_tbls[blkn] = entropy->ac_derived_tbls[compptr->ac_tbl_no]; - /* Decide whether we really care about the coefficient values */ - if (compptr->component_needed) { - entropy->dc_needed[blkn] = TRUE; - /* we don't need the ACs if producing a 1/8th-size image */ - entropy->ac_needed[blkn] = (compptr->DCT_scaled_size > 1); - } else { - entropy->dc_needed[blkn] = entropy->ac_needed[blkn] = FALSE; - } - } - - /* Initialize bitread state variables */ - entropy->bitstate.bits_left = 0; - entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */ - entropy->pub.insufficient_data = FALSE; - - /* Initialize restart counter */ - entropy->restarts_to_go = cinfo->restart_interval; -} - - -/* - * Compute the derived values for a Huffman table. - * This routine also performs some validation checks on the table. - * - * Note this is also used by jdphuff.c. - */ - -GLOBAL(void) -jpeg_make_d_derived_tbl (j_decompress_ptr cinfo, boolean isDC, int tblno, - d_derived_tbl ** pdtbl) -{ - JHUFF_TBL *htbl; - d_derived_tbl *dtbl; - int p, i, l, si, numsymbols; - int lookbits, ctr; - char huffsize[257]; - unsigned int huffcode[257]; - unsigned int code; - - /* Note that huffsize[] and huffcode[] are filled in code-length order, - * paralleling the order of the symbols themselves in htbl->huffval[]. - */ - - /* Find the input Huffman table */ - if (tblno < 0 || tblno >= NUM_HUFF_TBLS) - ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); - htbl = - isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno]; - if (htbl == NULL) - ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); - - /* Allocate a workspace if we haven't already done so. */ - if (*pdtbl == NULL) - *pdtbl = (d_derived_tbl *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(d_derived_tbl)); - dtbl = *pdtbl; - dtbl->pub = htbl; /* fill in back link */ - - /* Figure C.1: make table of Huffman code length for each symbol */ - - p = 0; - for (l = 1; l <= 16; l++) { - i = (int) htbl->bits[l]; - if (i < 0 || p + i > 256) /* protect against table overrun */ - ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); - while (i--) - huffsize[p++] = (char) l; - } - huffsize[p] = 0; - numsymbols = p; - - /* Figure C.2: generate the codes themselves */ - /* We also validate that the counts represent a legal Huffman code tree. */ - - code = 0; - si = huffsize[0]; - p = 0; - while (huffsize[p]) { - while (((int) huffsize[p]) == si) { - huffcode[p++] = code; - code++; - } - /* code is now 1 more than the last code used for codelength si; but - * it must still fit in si bits, since no code is allowed to be all ones. - */ - if (((INT32) code) >= (((INT32) 1) << si)) - ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); - code <<= 1; - si++; - } - - /* Figure F.15: generate decoding tables for bit-sequential decoding */ - - p = 0; - for (l = 1; l <= 16; l++) { - if (htbl->bits[l]) { - /* valoffset[l] = huffval[] index of 1st symbol of code length l, - * minus the minimum code of length l - */ - dtbl->valoffset[l] = (INT32) p - (INT32) huffcode[p]; - p += htbl->bits[l]; - dtbl->maxcode[l] = huffcode[p-1]; /* maximum code of length l */ - } else { - dtbl->maxcode[l] = -1; /* -1 if no codes of this length */ - } - } - dtbl->maxcode[17] = 0xFFFFFL; /* ensures jpeg_huff_decode terminates */ - - /* Compute lookahead tables to speed up decoding. - * First we set all the table entries to 0, indicating "too long"; - * then we iterate through the Huffman codes that are short enough and - * fill in all the entries that correspond to bit sequences starting - * with that code. - */ - - MEMZERO(dtbl->look_nbits, SIZEOF(dtbl->look_nbits)); - - p = 0; - for (l = 1; l <= HUFF_LOOKAHEAD; l++) { - for (i = 1; i <= (int) htbl->bits[l]; i++, p++) { - /* l = current code's length, p = its index in huffcode[] & huffval[]. */ - /* Generate left-justified code followed by all possible bit sequences */ - lookbits = huffcode[p] << (HUFF_LOOKAHEAD-l); - for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) { - dtbl->look_nbits[lookbits] = l; - dtbl->look_sym[lookbits] = htbl->huffval[p]; - lookbits++; - } - } - } - - /* Validate symbols as being reasonable. - * For AC tables, we make no check, but accept all byte values 0..255. - * For DC tables, we require the symbols to be in range 0..15. - * (Tighter bounds could be applied depending on the data depth and mode, - * but this is sufficient to ensure safe decoding.) - */ - if (isDC) { - for (i = 0; i < numsymbols; i++) { - int sym = htbl->huffval[i]; - if (sym < 0 || sym > 15) - ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); - } - } -} - - -/* - * Out-of-line code for bit fetching (shared with jdphuff.c). - * See jdhuff.h for info about usage. - * Note: current values of get_buffer and bits_left are passed as parameters, - * but are returned in the corresponding fields of the state struct. - * - * On most machines MIN_GET_BITS should be 25 to allow the full 32-bit width - * of get_buffer to be used. (On machines with wider words, an even larger - * buffer could be used.) However, on some machines 32-bit shifts are - * quite slow and take time proportional to the number of places shifted. - * (This is true with most PC compilers, for instance.) In this case it may - * be a win to set MIN_GET_BITS to the minimum value of 15. This reduces the - * average shift distance at the cost of more calls to jpeg_fill_bit_buffer. - */ - -#ifdef SLOW_SHIFT_32 -#define MIN_GET_BITS 15 /* minimum allowable value */ -#else -#define MIN_GET_BITS (BIT_BUF_SIZE-7) -#endif - - -GLOBAL(boolean) -jpeg_fill_bit_buffer (bitread_working_state * state, - register bit_buf_type get_buffer, register int bits_left, - int nbits) -/* Load up the bit buffer to a depth of at least nbits */ -{ - /* Copy heavily used state fields into locals (hopefully registers) */ - register const JOCTET * next_input_byte = state->next_input_byte; - register size_t bytes_in_buffer = state->bytes_in_buffer; - j_decompress_ptr cinfo = state->cinfo; - - /* Attempt to load at least MIN_GET_BITS bits into get_buffer. */ - /* (It is assumed that no request will be for more than that many bits.) */ - /* We fail to do so only if we hit a marker or are forced to suspend. */ - - if (cinfo->unread_marker == 0) { /* cannot advance past a marker */ - while (bits_left < MIN_GET_BITS) { - register int c; - - /* Attempt to read a byte */ - if (bytes_in_buffer == 0) { - if (! (*cinfo->src->fill_input_buffer) (cinfo)) - return FALSE; - next_input_byte = cinfo->src->next_input_byte; - bytes_in_buffer = cinfo->src->bytes_in_buffer; - } - bytes_in_buffer--; - c = GETJOCTET(*next_input_byte++); - - /* If it's 0xFF, check and discard stuffed zero byte */ - if (c == 0xFF) { - /* Loop here to discard any padding FF's on terminating marker, - * so that we can save a valid unread_marker value. NOTE: we will - * accept multiple FF's followed by a 0 as meaning a single FF data - * byte. This data pattern is not valid according to the standard. - */ - do { - if (bytes_in_buffer == 0) { - if (! (*cinfo->src->fill_input_buffer) (cinfo)) - return FALSE; - next_input_byte = cinfo->src->next_input_byte; - bytes_in_buffer = cinfo->src->bytes_in_buffer; - } - bytes_in_buffer--; - c = GETJOCTET(*next_input_byte++); - } while (c == 0xFF); - - if (c == 0) { - /* Found FF/00, which represents an FF data byte */ - c = 0xFF; - } else { - /* Oops, it's actually a marker indicating end of compressed data. - * Save the marker code for later use. - * Fine point: it might appear that we should save the marker into - * bitread working state, not straight into permanent state. But - * once we have hit a marker, we cannot need to suspend within the - * current MCU, because we will read no more bytes from the data - * source. So it is OK to update permanent state right away. - */ - cinfo->unread_marker = c; - /* See if we need to insert some fake zero bits. */ - goto no_more_bytes; - } - } - - /* OK, load c into get_buffer */ - get_buffer = (get_buffer << 8) | c; - bits_left += 8; - } /* end while */ - } else { - no_more_bytes: - /* We get here if we've read the marker that terminates the compressed - * data segment. There should be enough bits in the buffer register - * to satisfy the request; if so, no problem. - */ - if (nbits > bits_left) { - /* Uh-oh. Report corrupted data to user and stuff zeroes into - * the data stream, so that we can produce some kind of image. - * We use a nonvolatile flag to ensure that only one warning message - * appears per data segment. - */ - if (! cinfo->entropy->insufficient_data) { - WARNMS(cinfo, JWRN_HIT_MARKER); - cinfo->entropy->insufficient_data = TRUE; - } - /* Fill the buffer with zero bits */ - get_buffer <<= MIN_GET_BITS - bits_left; - bits_left = MIN_GET_BITS; - } - } - - /* Unload the local registers */ - state->next_input_byte = next_input_byte; - state->bytes_in_buffer = bytes_in_buffer; - state->get_buffer = get_buffer; - state->bits_left = bits_left; - - return TRUE; -} - - -/* - * Out-of-line code for Huffman code decoding. - * See jdhuff.h for info about usage. - */ - -GLOBAL(int) -jpeg_huff_decode (bitread_working_state * state, - register bit_buf_type get_buffer, register int bits_left, - d_derived_tbl * htbl, int min_bits) -{ - register int l = min_bits; - register INT32 code; - - /* HUFF_DECODE has determined that the code is at least min_bits */ - /* bits long, so fetch that many bits in one swoop. */ - - CHECK_BIT_BUFFER(*state, l, return -1); - code = GET_BITS(l); - - /* Collect the rest of the Huffman code one bit at a time. */ - /* This is per Figure F.16 in the JPEG spec. */ - - while (code > htbl->maxcode[l]) { - code <<= 1; - CHECK_BIT_BUFFER(*state, 1, return -1); - code |= GET_BITS(1); - l++; - } - - /* Unload the local registers */ - state->get_buffer = get_buffer; - state->bits_left = bits_left; - - /* With garbage input we may reach the sentinel value l = 17. */ - - if (l > 16) { - WARNMS(state->cinfo, JWRN_HUFF_BAD_CODE); - return 0; /* fake a zero as the safest result */ - } - - return htbl->pub->huffval[ (int) (code + htbl->valoffset[l]) ]; -} - - -/* - * Figure F.12: extend sign bit. - * On some machines, a shift and add will be faster than a table lookup. - */ - -#ifdef AVOID_TABLES - -#define HUFF_EXTEND(x,s) ((x) < (1<<((s)-1)) ? (x) + (((-1)<<(s)) + 1) : (x)) - -#else - -#define HUFF_EXTEND(x,s) ((x) < extend_test[s] ? (x) + extend_offset[s] : (x)) - -static const int extend_test[16] = /* entry n is 2**(n-1) */ - { 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, - 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 }; - -static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */ - { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, - ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, - ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, - ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; - -#endif /* AVOID_TABLES */ - - -/* - * Check for a restart marker & resynchronize decoder. - * Returns FALSE if must suspend. - */ - -LOCAL(boolean) -process_restart (j_decompress_ptr cinfo) -{ - huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - int ci; - - /* Throw away any unused bits remaining in bit buffer; */ - /* include any full bytes in next_marker's count of discarded bytes */ - cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8; - entropy->bitstate.bits_left = 0; - - /* Advance past the RSTn marker */ - if (! (*cinfo->marker->read_restart_marker) (cinfo)) - return FALSE; - - /* Re-initialize DC predictions to 0 */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) - entropy->saved.last_dc_val[ci] = 0; - - /* Reset restart counter */ - entropy->restarts_to_go = cinfo->restart_interval; - - /* Reset out-of-data flag, unless read_restart_marker left us smack up - * against a marker. In that case we will end up treating the next data - * segment as empty, and we can avoid producing bogus output pixels by - * leaving the flag set. - */ - if (cinfo->unread_marker == 0) - entropy->pub.insufficient_data = FALSE; - - return TRUE; -} - - -/* - * Decode and return one MCU's worth of Huffman-compressed coefficients. - * The coefficients are reordered from zigzag order into natural array order, - * but are not dequantized. - * - * The i'th block of the MCU is stored into the block pointed to by - * MCU_data[i]. WE ASSUME THIS AREA HAS BEEN ZEROED BY THE CALLER. - * (Wholesale zeroing is usually a little faster than retail...) - * - * Returns FALSE if data source requested suspension. In that case no - * changes have been made to permanent state. (Exception: some output - * coefficients may already have been assigned. This is harmless for - * this module, since we'll just re-assign them on the next call.) - */ - -METHODDEF(boolean) -decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) -{ - huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - int blkn; - BITREAD_STATE_VARS; - savable_state state; - - /* Process restart marker if needed; may have to suspend */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) - if (! process_restart(cinfo)) - return FALSE; - } - - /* If we've run out of data, just leave the MCU set to zeroes. - * This way, we return uniform gray for the remainder of the segment. - */ - if (! entropy->pub.insufficient_data) { - - /* Load up working state */ - BITREAD_LOAD_STATE(cinfo,entropy->bitstate); - ASSIGN_STATE(state, entropy->saved); - - /* Outer loop handles each block in the MCU */ - - for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { - JBLOCKROW block = MCU_data[blkn]; - d_derived_tbl * dctbl = entropy->dc_cur_tbls[blkn]; - d_derived_tbl * actbl = entropy->ac_cur_tbls[blkn]; - register int s, k, r; - - /* Decode a single block's worth of coefficients */ - - /* Section F.2.2.1: decode the DC coefficient difference */ - HUFF_DECODE(s, br_state, dctbl, return FALSE, label1); - if (s) { - CHECK_BIT_BUFFER(br_state, s, return FALSE); - r = GET_BITS(s); - s = HUFF_EXTEND(r, s); - } - - if (entropy->dc_needed[blkn]) { - /* Convert DC difference to actual value, update last_dc_val */ - int ci = cinfo->MCU_membership[blkn]; - s += state.last_dc_val[ci]; - state.last_dc_val[ci] = s; - /* Output the DC coefficient (assumes jpeg_natural_order[0] = 0) */ - (*block)[0] = (JCOEF) s; - } - - if (entropy->ac_needed[blkn]) { - - /* Section F.2.2.2: decode the AC coefficients */ - /* Since zeroes are skipped, output area must be cleared beforehand */ - for (k = 1; k < DCTSIZE2; k++) { - HUFF_DECODE(s, br_state, actbl, return FALSE, label2); - - r = s >> 4; - s &= 15; - - if (s) { - k += r; - CHECK_BIT_BUFFER(br_state, s, return FALSE); - r = GET_BITS(s); - s = HUFF_EXTEND(r, s); - /* Output coefficient in natural (dezigzagged) order. - * Note: the extra entries in jpeg_natural_order[] will save us - * if k >= DCTSIZE2, which could happen if the data is corrupted. - */ - (*block)[jpeg_natural_order[k]] = (JCOEF) s; - } else { - if (r != 15) - break; - k += 15; - } - } - - } else { - - /* Section F.2.2.2: decode the AC coefficients */ - /* In this path we just discard the values */ - for (k = 1; k < DCTSIZE2; k++) { - HUFF_DECODE(s, br_state, actbl, return FALSE, label3); - - r = s >> 4; - s &= 15; - - if (s) { - k += r; - CHECK_BIT_BUFFER(br_state, s, return FALSE); - DROP_BITS(s); - } else { - if (r != 15) - break; - k += 15; - } - } - - } - } - - /* Completed MCU, so update state */ - BITREAD_SAVE_STATE(cinfo,entropy->bitstate); - ASSIGN_STATE(entropy->saved, state); - } - - /* Account for restart interval (no-op if not using restarts) */ - entropy->restarts_to_go--; - - return TRUE; -} - - -/* - * Module initialization routine for Huffman entropy decoding. - */ - -GLOBAL(void) -jinit_huff_decoder (j_decompress_ptr cinfo) -{ - huff_entropy_ptr entropy; - int i; - - entropy = (huff_entropy_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(huff_entropy_decoder)); - cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; - entropy->pub.start_pass = start_pass_huff_decoder; - entropy->pub.decode_mcu = decode_mcu; - - /* Mark tables unallocated */ - for (i = 0; i < NUM_HUFF_TBLS; i++) { - entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL; - } -} diff --git a/Build/source/libs/jpeg/jdhuff.h b/Build/source/libs/jpeg/jdhuff.h deleted file mode 100644 index ae19b6cafd7..00000000000 --- a/Build/source/libs/jpeg/jdhuff.h +++ /dev/null @@ -1,201 +0,0 @@ -/* - * jdhuff.h - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains declarations for Huffman entropy decoding routines - * that are shared between the sequential decoder (jdhuff.c) and the - * progressive decoder (jdphuff.c). No other modules need to see these. - */ - -/* Short forms of external names for systems with brain-damaged linkers. */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jpeg_make_d_derived_tbl jMkDDerived -#define jpeg_fill_bit_buffer jFilBitBuf -#define jpeg_huff_decode jHufDecode -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - - -/* Derived data constructed for each Huffman table */ - -#define HUFF_LOOKAHEAD 8 /* # of bits of lookahead */ - -typedef struct { - /* Basic tables: (element [0] of each array is unused) */ - INT32 maxcode[18]; /* largest code of length k (-1 if none) */ - /* (maxcode[17] is a sentinel to ensure jpeg_huff_decode terminates) */ - INT32 valoffset[17]; /* huffval[] offset for codes of length k */ - /* valoffset[k] = huffval[] index of 1st symbol of code length k, less - * the smallest code of length k; so given a code of length k, the - * corresponding symbol is huffval[code + valoffset[k]] - */ - - /* Link to public Huffman table (needed only in jpeg_huff_decode) */ - JHUFF_TBL *pub; - - /* Lookahead tables: indexed by the next HUFF_LOOKAHEAD bits of - * the input data stream. If the next Huffman code is no more - * than HUFF_LOOKAHEAD bits long, we can obtain its length and - * the corresponding symbol directly from these tables. - */ - int look_nbits[1< 32 bits on your machine, and shifting/masking longs is - * reasonably fast, making bit_buf_type be long and setting BIT_BUF_SIZE - * appropriately should be a win. Unfortunately we can't define the size - * with something like #define BIT_BUF_SIZE (sizeof(bit_buf_type)*8) - * because not all machines measure sizeof in 8-bit bytes. - */ - -typedef struct { /* Bitreading state saved across MCUs */ - bit_buf_type get_buffer; /* current bit-extraction buffer */ - int bits_left; /* # of unused bits in it */ -} bitread_perm_state; - -typedef struct { /* Bitreading working state within an MCU */ - /* Current data source location */ - /* We need a copy, rather than munging the original, in case of suspension */ - const JOCTET * next_input_byte; /* => next byte to read from source */ - size_t bytes_in_buffer; /* # of bytes remaining in source buffer */ - /* Bit input buffer --- note these values are kept in register variables, - * not in this struct, inside the inner loops. - */ - bit_buf_type get_buffer; /* current bit-extraction buffer */ - int bits_left; /* # of unused bits in it */ - /* Pointer needed by jpeg_fill_bit_buffer. */ - j_decompress_ptr cinfo; /* back link to decompress master record */ -} bitread_working_state; - -/* Macros to declare and load/save bitread local variables. */ -#define BITREAD_STATE_VARS \ - register bit_buf_type get_buffer; \ - register int bits_left; \ - bitread_working_state br_state - -#define BITREAD_LOAD_STATE(cinfop,permstate) \ - br_state.cinfo = cinfop; \ - br_state.next_input_byte = cinfop->src->next_input_byte; \ - br_state.bytes_in_buffer = cinfop->src->bytes_in_buffer; \ - get_buffer = permstate.get_buffer; \ - bits_left = permstate.bits_left; - -#define BITREAD_SAVE_STATE(cinfop,permstate) \ - cinfop->src->next_input_byte = br_state.next_input_byte; \ - cinfop->src->bytes_in_buffer = br_state.bytes_in_buffer; \ - permstate.get_buffer = get_buffer; \ - permstate.bits_left = bits_left - -/* - * These macros provide the in-line portion of bit fetching. - * Use CHECK_BIT_BUFFER to ensure there are N bits in get_buffer - * before using GET_BITS, PEEK_BITS, or DROP_BITS. - * The variables get_buffer and bits_left are assumed to be locals, - * but the state struct might not be (jpeg_huff_decode needs this). - * CHECK_BIT_BUFFER(state,n,action); - * Ensure there are N bits in get_buffer; if suspend, take action. - * val = GET_BITS(n); - * Fetch next N bits. - * val = PEEK_BITS(n); - * Fetch next N bits without removing them from the buffer. - * DROP_BITS(n); - * Discard next N bits. - * The value N should be a simple variable, not an expression, because it - * is evaluated multiple times. - */ - -#define CHECK_BIT_BUFFER(state,nbits,action) \ - { if (bits_left < (nbits)) { \ - if (! jpeg_fill_bit_buffer(&(state),get_buffer,bits_left,nbits)) \ - { action; } \ - get_buffer = (state).get_buffer; bits_left = (state).bits_left; } } - -#define GET_BITS(nbits) \ - (((int) (get_buffer >> (bits_left -= (nbits)))) & ((1<<(nbits))-1)) - -#define PEEK_BITS(nbits) \ - (((int) (get_buffer >> (bits_left - (nbits)))) & ((1<<(nbits))-1)) - -#define DROP_BITS(nbits) \ - (bits_left -= (nbits)) - -/* Load up the bit buffer to a depth of at least nbits */ -EXTERN(boolean) jpeg_fill_bit_buffer - JPP((bitread_working_state * state, register bit_buf_type get_buffer, - register int bits_left, int nbits)); - - -/* - * Code for extracting next Huffman-coded symbol from input bit stream. - * Again, this is time-critical and we make the main paths be macros. - * - * We use a lookahead table to process codes of up to HUFF_LOOKAHEAD bits - * without looping. Usually, more than 95% of the Huffman codes will be 8 - * or fewer bits long. The few overlength codes are handled with a loop, - * which need not be inline code. - * - * Notes about the HUFF_DECODE macro: - * 1. Near the end of the data segment, we may fail to get enough bits - * for a lookahead. In that case, we do it the hard way. - * 2. If the lookahead table contains no entry, the next code must be - * more than HUFF_LOOKAHEAD bits long. - * 3. jpeg_huff_decode returns -1 if forced to suspend. - */ - -#define HUFF_DECODE(result,state,htbl,failaction,slowlabel) \ -{ register int nb, look; \ - if (bits_left < HUFF_LOOKAHEAD) { \ - if (! jpeg_fill_bit_buffer(&state,get_buffer,bits_left, 0)) {failaction;} \ - get_buffer = state.get_buffer; bits_left = state.bits_left; \ - if (bits_left < HUFF_LOOKAHEAD) { \ - nb = 1; goto slowlabel; \ - } \ - } \ - look = PEEK_BITS(HUFF_LOOKAHEAD); \ - if ((nb = htbl->look_nbits[look]) != 0) { \ - DROP_BITS(nb); \ - result = htbl->look_sym[look]; \ - } else { \ - nb = HUFF_LOOKAHEAD+1; \ -slowlabel: \ - if ((result=jpeg_huff_decode(&state,get_buffer,bits_left,htbl,nb)) < 0) \ - { failaction; } \ - get_buffer = state.get_buffer; bits_left = state.bits_left; \ - } \ -} - -/* Out-of-line case for Huffman code fetching */ -EXTERN(int) jpeg_huff_decode - JPP((bitread_working_state * state, register bit_buf_type get_buffer, - register int bits_left, d_derived_tbl * htbl, int min_bits)); diff --git a/Build/source/libs/jpeg/jdinput.c b/Build/source/libs/jpeg/jdinput.c deleted file mode 100644 index 0c2ac8f120b..00000000000 --- a/Build/source/libs/jpeg/jdinput.c +++ /dev/null @@ -1,381 +0,0 @@ -/* - * jdinput.c - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains input control logic for the JPEG decompressor. - * These routines are concerned with controlling the decompressor's input - * processing (marker reading and coefficient decoding). The actual input - * reading is done in jdmarker.c, jdhuff.c, and jdphuff.c. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Private state */ - -typedef struct { - struct jpeg_input_controller pub; /* public fields */ - - boolean inheaders; /* TRUE until first SOS is reached */ -} my_input_controller; - -typedef my_input_controller * my_inputctl_ptr; - - -/* Forward declarations */ -METHODDEF(int) consume_markers JPP((j_decompress_ptr cinfo)); - - -/* - * Routines to calculate various quantities related to the size of the image. - */ - -LOCAL(void) -initial_setup (j_decompress_ptr cinfo) -/* Called once, when first SOS marker is reached */ -{ - int ci; - jpeg_component_info *compptr; - - /* Make sure image isn't bigger than I can handle */ - if ((long) cinfo->image_height > (long) JPEG_MAX_DIMENSION || - (long) cinfo->image_width > (long) JPEG_MAX_DIMENSION) - ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION); - - /* For now, precision must match compiled-in value... */ - if (cinfo->data_precision != BITS_IN_JSAMPLE) - ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); - - /* Check that number of components won't exceed internal array sizes */ - if (cinfo->num_components > MAX_COMPONENTS) - ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, - MAX_COMPONENTS); - - /* Compute maximum sampling factors; check factor validity */ - cinfo->max_h_samp_factor = 1; - cinfo->max_v_samp_factor = 1; - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR || - compptr->v_samp_factor<=0 || compptr->v_samp_factor>MAX_SAMP_FACTOR) - ERREXIT(cinfo, JERR_BAD_SAMPLING); - cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor, - compptr->h_samp_factor); - cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor, - compptr->v_samp_factor); - } - - /* We initialize DCT_scaled_size and min_DCT_scaled_size to DCTSIZE. - * In the full decompressor, this will be overridden by jdmaster.c; - * but in the transcoder, jdmaster.c is not used, so we must do it here. - */ - cinfo->min_DCT_scaled_size = DCTSIZE; - - /* Compute dimensions of components */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - compptr->DCT_scaled_size = DCTSIZE; - /* Size in DCT blocks */ - compptr->width_in_blocks = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, - (long) (cinfo->max_h_samp_factor * DCTSIZE)); - compptr->height_in_blocks = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, - (long) (cinfo->max_v_samp_factor * DCTSIZE)); - /* downsampled_width and downsampled_height will also be overridden by - * jdmaster.c if we are doing full decompression. The transcoder library - * doesn't use these values, but the calling application might. - */ - /* Size in samples */ - compptr->downsampled_width = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, - (long) cinfo->max_h_samp_factor); - compptr->downsampled_height = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, - (long) cinfo->max_v_samp_factor); - /* Mark component needed, until color conversion says otherwise */ - compptr->component_needed = TRUE; - /* Mark no quantization table yet saved for component */ - compptr->quant_table = NULL; - } - - /* Compute number of fully interleaved MCU rows. */ - cinfo->total_iMCU_rows = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height, - (long) (cinfo->max_v_samp_factor*DCTSIZE)); - - /* Decide whether file contains multiple scans */ - if (cinfo->comps_in_scan < cinfo->num_components || cinfo->progressive_mode) - cinfo->inputctl->has_multiple_scans = TRUE; - else - cinfo->inputctl->has_multiple_scans = FALSE; -} - - -LOCAL(void) -per_scan_setup (j_decompress_ptr cinfo) -/* Do computations that are needed before processing a JPEG scan */ -/* cinfo->comps_in_scan and cinfo->cur_comp_info[] were set from SOS marker */ -{ - int ci, mcublks, tmp; - jpeg_component_info *compptr; - - if (cinfo->comps_in_scan == 1) { - - /* Noninterleaved (single-component) scan */ - compptr = cinfo->cur_comp_info[0]; - - /* Overall image size in MCUs */ - cinfo->MCUs_per_row = compptr->width_in_blocks; - cinfo->MCU_rows_in_scan = compptr->height_in_blocks; - - /* For noninterleaved scan, always one block per MCU */ - compptr->MCU_width = 1; - compptr->MCU_height = 1; - compptr->MCU_blocks = 1; - compptr->MCU_sample_width = compptr->DCT_scaled_size; - compptr->last_col_width = 1; - /* For noninterleaved scans, it is convenient to define last_row_height - * as the number of block rows present in the last iMCU row. - */ - tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor); - if (tmp == 0) tmp = compptr->v_samp_factor; - compptr->last_row_height = tmp; - - /* Prepare array describing MCU composition */ - cinfo->blocks_in_MCU = 1; - cinfo->MCU_membership[0] = 0; - - } else { - - /* Interleaved (multi-component) scan */ - if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN) - ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan, - MAX_COMPS_IN_SCAN); - - /* Overall image size in MCUs */ - cinfo->MCUs_per_row = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width, - (long) (cinfo->max_h_samp_factor*DCTSIZE)); - cinfo->MCU_rows_in_scan = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height, - (long) (cinfo->max_v_samp_factor*DCTSIZE)); - - cinfo->blocks_in_MCU = 0; - - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - /* Sampling factors give # of blocks of component in each MCU */ - compptr->MCU_width = compptr->h_samp_factor; - compptr->MCU_height = compptr->v_samp_factor; - compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height; - compptr->MCU_sample_width = compptr->MCU_width * compptr->DCT_scaled_size; - /* Figure number of non-dummy blocks in last MCU column & row */ - tmp = (int) (compptr->width_in_blocks % compptr->MCU_width); - if (tmp == 0) tmp = compptr->MCU_width; - compptr->last_col_width = tmp; - tmp = (int) (compptr->height_in_blocks % compptr->MCU_height); - if (tmp == 0) tmp = compptr->MCU_height; - compptr->last_row_height = tmp; - /* Prepare array describing MCU composition */ - mcublks = compptr->MCU_blocks; - if (cinfo->blocks_in_MCU + mcublks > D_MAX_BLOCKS_IN_MCU) - ERREXIT(cinfo, JERR_BAD_MCU_SIZE); - while (mcublks-- > 0) { - cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci; - } - } - - } -} - - -/* - * Save away a copy of the Q-table referenced by each component present - * in the current scan, unless already saved during a prior scan. - * - * In a multiple-scan JPEG file, the encoder could assign different components - * the same Q-table slot number, but change table definitions between scans - * so that each component uses a different Q-table. (The IJG encoder is not - * currently capable of doing this, but other encoders might.) Since we want - * to be able to dequantize all the components at the end of the file, this - * means that we have to save away the table actually used for each component. - * We do this by copying the table at the start of the first scan containing - * the component. - * The JPEG spec prohibits the encoder from changing the contents of a Q-table - * slot between scans of a component using that slot. If the encoder does so - * anyway, this decoder will simply use the Q-table values that were current - * at the start of the first scan for the component. - * - * The decompressor output side looks only at the saved quant tables, - * not at the current Q-table slots. - */ - -LOCAL(void) -latch_quant_tables (j_decompress_ptr cinfo) -{ - int ci, qtblno; - jpeg_component_info *compptr; - JQUANT_TBL * qtbl; - - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - /* No work if we already saved Q-table for this component */ - if (compptr->quant_table != NULL) - continue; - /* Make sure specified quantization table is present */ - qtblno = compptr->quant_tbl_no; - if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS || - cinfo->quant_tbl_ptrs[qtblno] == NULL) - ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno); - /* OK, save away the quantization table */ - qtbl = (JQUANT_TBL *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(JQUANT_TBL)); - MEMCOPY(qtbl, cinfo->quant_tbl_ptrs[qtblno], SIZEOF(JQUANT_TBL)); - compptr->quant_table = qtbl; - } -} - - -/* - * Initialize the input modules to read a scan of compressed data. - * The first call to this is done by jdmaster.c after initializing - * the entire decompressor (during jpeg_start_decompress). - * Subsequent calls come from consume_markers, below. - */ - -METHODDEF(void) -start_input_pass (j_decompress_ptr cinfo) -{ - per_scan_setup(cinfo); - latch_quant_tables(cinfo); - (*cinfo->entropy->start_pass) (cinfo); - (*cinfo->coef->start_input_pass) (cinfo); - cinfo->inputctl->consume_input = cinfo->coef->consume_data; -} - - -/* - * Finish up after inputting a compressed-data scan. - * This is called by the coefficient controller after it's read all - * the expected data of the scan. - */ - -METHODDEF(void) -finish_input_pass (j_decompress_ptr cinfo) -{ - cinfo->inputctl->consume_input = consume_markers; -} - - -/* - * Read JPEG markers before, between, or after compressed-data scans. - * Change state as necessary when a new scan is reached. - * Return value is JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. - * - * The consume_input method pointer points either here or to the - * coefficient controller's consume_data routine, depending on whether - * we are reading a compressed data segment or inter-segment markers. - */ - -METHODDEF(int) -consume_markers (j_decompress_ptr cinfo) -{ - my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl; - int val; - - if (inputctl->pub.eoi_reached) /* After hitting EOI, read no further */ - return JPEG_REACHED_EOI; - - val = (*cinfo->marker->read_markers) (cinfo); - - switch (val) { - case JPEG_REACHED_SOS: /* Found SOS */ - if (inputctl->inheaders) { /* 1st SOS */ - initial_setup(cinfo); - inputctl->inheaders = FALSE; - /* Note: start_input_pass must be called by jdmaster.c - * before any more input can be consumed. jdapimin.c is - * responsible for enforcing this sequencing. - */ - } else { /* 2nd or later SOS marker */ - if (! inputctl->pub.has_multiple_scans) - ERREXIT(cinfo, JERR_EOI_EXPECTED); /* Oops, I wasn't expecting this! */ - start_input_pass(cinfo); - } - break; - case JPEG_REACHED_EOI: /* Found EOI */ - inputctl->pub.eoi_reached = TRUE; - if (inputctl->inheaders) { /* Tables-only datastream, apparently */ - if (cinfo->marker->saw_SOF) - ERREXIT(cinfo, JERR_SOF_NO_SOS); - } else { - /* Prevent infinite loop in coef ctlr's decompress_data routine - * if user set output_scan_number larger than number of scans. - */ - if (cinfo->output_scan_number > cinfo->input_scan_number) - cinfo->output_scan_number = cinfo->input_scan_number; - } - break; - case JPEG_SUSPENDED: - break; - } - - return val; -} - - -/* - * Reset state to begin a fresh datastream. - */ - -METHODDEF(void) -reset_input_controller (j_decompress_ptr cinfo) -{ - my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl; - - inputctl->pub.consume_input = consume_markers; - inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */ - inputctl->pub.eoi_reached = FALSE; - inputctl->inheaders = TRUE; - /* Reset other modules */ - (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); - (*cinfo->marker->reset_marker_reader) (cinfo); - /* Reset progression state -- would be cleaner if entropy decoder did this */ - cinfo->coef_bits = NULL; -} - - -/* - * Initialize the input controller module. - * This is called only once, when the decompression object is created. - */ - -GLOBAL(void) -jinit_input_controller (j_decompress_ptr cinfo) -{ - my_inputctl_ptr inputctl; - - /* Create subobject in permanent pool */ - inputctl = (my_inputctl_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - SIZEOF(my_input_controller)); - cinfo->inputctl = (struct jpeg_input_controller *) inputctl; - /* Initialize method pointers */ - inputctl->pub.consume_input = consume_markers; - inputctl->pub.reset_input_controller = reset_input_controller; - inputctl->pub.start_input_pass = start_input_pass; - inputctl->pub.finish_input_pass = finish_input_pass; - /* Initialize state: can't use reset_input_controller since we don't - * want to try to reset other modules yet. - */ - inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */ - inputctl->pub.eoi_reached = FALSE; - inputctl->inheaders = TRUE; -} diff --git a/Build/source/libs/jpeg/jdmainct.c b/Build/source/libs/jpeg/jdmainct.c deleted file mode 100644 index 13c956f5deb..00000000000 --- a/Build/source/libs/jpeg/jdmainct.c +++ /dev/null @@ -1,512 +0,0 @@ -/* - * jdmainct.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the main buffer controller for decompression. - * The main buffer lies between the JPEG decompressor proper and the - * post-processor; it holds downsampled data in the JPEG colorspace. - * - * Note that this code is bypassed in raw-data mode, since the application - * supplies the equivalent of the main buffer in that case. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* - * In the current system design, the main buffer need never be a full-image - * buffer; any full-height buffers will be found inside the coefficient or - * postprocessing controllers. Nonetheless, the main controller is not - * trivial. Its responsibility is to provide context rows for upsampling/ - * rescaling, and doing this in an efficient fashion is a bit tricky. - * - * Postprocessor input data is counted in "row groups". A row group - * is defined to be (v_samp_factor * DCT_scaled_size / min_DCT_scaled_size) - * sample rows of each component. (We require DCT_scaled_size values to be - * chosen such that these numbers are integers. In practice DCT_scaled_size - * values will likely be powers of two, so we actually have the stronger - * condition that DCT_scaled_size / min_DCT_scaled_size is an integer.) - * Upsampling will typically produce max_v_samp_factor pixel rows from each - * row group (times any additional scale factor that the upsampler is - * applying). - * - * The coefficient controller will deliver data to us one iMCU row at a time; - * each iMCU row contains v_samp_factor * DCT_scaled_size sample rows, or - * exactly min_DCT_scaled_size row groups. (This amount of data corresponds - * to one row of MCUs when the image is fully interleaved.) Note that the - * number of sample rows varies across components, but the number of row - * groups does not. Some garbage sample rows may be included in the last iMCU - * row at the bottom of the image. - * - * Depending on the vertical scaling algorithm used, the upsampler may need - * access to the sample row(s) above and below its current input row group. - * The upsampler is required to set need_context_rows TRUE at global selection - * time if so. When need_context_rows is FALSE, this controller can simply - * obtain one iMCU row at a time from the coefficient controller and dole it - * out as row groups to the postprocessor. - * - * When need_context_rows is TRUE, this controller guarantees that the buffer - * passed to postprocessing contains at least one row group's worth of samples - * above and below the row group(s) being processed. Note that the context - * rows "above" the first passed row group appear at negative row offsets in - * the passed buffer. At the top and bottom of the image, the required - * context rows are manufactured by duplicating the first or last real sample - * row; this avoids having special cases in the upsampling inner loops. - * - * The amount of context is fixed at one row group just because that's a - * convenient number for this controller to work with. The existing - * upsamplers really only need one sample row of context. An upsampler - * supporting arbitrary output rescaling might wish for more than one row - * group of context when shrinking the image; tough, we don't handle that. - * (This is justified by the assumption that downsizing will be handled mostly - * by adjusting the DCT_scaled_size values, so that the actual scale factor at - * the upsample step needn't be much less than one.) - * - * To provide the desired context, we have to retain the last two row groups - * of one iMCU row while reading in the next iMCU row. (The last row group - * can't be processed until we have another row group for its below-context, - * and so we have to save the next-to-last group too for its above-context.) - * We could do this most simply by copying data around in our buffer, but - * that'd be very slow. We can avoid copying any data by creating a rather - * strange pointer structure. Here's how it works. We allocate a workspace - * consisting of M+2 row groups (where M = min_DCT_scaled_size is the number - * of row groups per iMCU row). We create two sets of redundant pointers to - * the workspace. Labeling the physical row groups 0 to M+1, the synthesized - * pointer lists look like this: - * M+1 M-1 - * master pointer --> 0 master pointer --> 0 - * 1 1 - * ... ... - * M-3 M-3 - * M-2 M - * M-1 M+1 - * M M-2 - * M+1 M-1 - * 0 0 - * We read alternate iMCU rows using each master pointer; thus the last two - * row groups of the previous iMCU row remain un-overwritten in the workspace. - * The pointer lists are set up so that the required context rows appear to - * be adjacent to the proper places when we pass the pointer lists to the - * upsampler. - * - * The above pictures describe the normal state of the pointer lists. - * At top and bottom of the image, we diddle the pointer lists to duplicate - * the first or last sample row as necessary (this is cheaper than copying - * sample rows around). - * - * This scheme breaks down if M < 2, ie, min_DCT_scaled_size is 1. In that - * situation each iMCU row provides only one row group so the buffering logic - * must be different (eg, we must read two iMCU rows before we can emit the - * first row group). For now, we simply do not support providing context - * rows when min_DCT_scaled_size is 1. That combination seems unlikely to - * be worth providing --- if someone wants a 1/8th-size preview, they probably - * want it quick and dirty, so a context-free upsampler is sufficient. - */ - - -/* Private buffer controller object */ - -typedef struct { - struct jpeg_d_main_controller pub; /* public fields */ - - /* Pointer to allocated workspace (M or M+2 row groups). */ - JSAMPARRAY buffer[MAX_COMPONENTS]; - - boolean buffer_full; /* Have we gotten an iMCU row from decoder? */ - JDIMENSION rowgroup_ctr; /* counts row groups output to postprocessor */ - - /* Remaining fields are only used in the context case. */ - - /* These are the master pointers to the funny-order pointer lists. */ - JSAMPIMAGE xbuffer[2]; /* pointers to weird pointer lists */ - - int whichptr; /* indicates which pointer set is now in use */ - int context_state; /* process_data state machine status */ - JDIMENSION rowgroups_avail; /* row groups available to postprocessor */ - JDIMENSION iMCU_row_ctr; /* counts iMCU rows to detect image top/bot */ -} my_main_controller; - -typedef my_main_controller * my_main_ptr; - -/* context_state values: */ -#define CTX_PREPARE_FOR_IMCU 0 /* need to prepare for MCU row */ -#define CTX_PROCESS_IMCU 1 /* feeding iMCU to postprocessor */ -#define CTX_POSTPONED_ROW 2 /* feeding postponed row group */ - - -/* Forward declarations */ -METHODDEF(void) process_data_simple_main - JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, - JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); -METHODDEF(void) process_data_context_main - JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, - JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); -#ifdef QUANT_2PASS_SUPPORTED -METHODDEF(void) process_data_crank_post - JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf, - JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail)); -#endif - - -LOCAL(void) -alloc_funny_pointers (j_decompress_ptr cinfo) -/* Allocate space for the funny pointer lists. - * This is done only once, not once per pass. - */ -{ - my_main_ptr main = (my_main_ptr) cinfo->main; - int ci, rgroup; - int M = cinfo->min_DCT_scaled_size; - jpeg_component_info *compptr; - JSAMPARRAY xbuf; - - /* Get top-level space for component array pointers. - * We alloc both arrays with one call to save a few cycles. - */ - main->xbuffer[0] = (JSAMPIMAGE) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - cinfo->num_components * 2 * SIZEOF(JSAMPARRAY)); - main->xbuffer[1] = main->xbuffer[0] + cinfo->num_components; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / - cinfo->min_DCT_scaled_size; /* height of a row group of component */ - /* Get space for pointer lists --- M+4 row groups in each list. - * We alloc both pointer lists with one call to save a few cycles. - */ - xbuf = (JSAMPARRAY) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - 2 * (rgroup * (M + 4)) * SIZEOF(JSAMPROW)); - xbuf += rgroup; /* want one row group at negative offsets */ - main->xbuffer[0][ci] = xbuf; - xbuf += rgroup * (M + 4); - main->xbuffer[1][ci] = xbuf; - } -} - - -LOCAL(void) -make_funny_pointers (j_decompress_ptr cinfo) -/* Create the funny pointer lists discussed in the comments above. - * The actual workspace is already allocated (in main->buffer), - * and the space for the pointer lists is allocated too. - * This routine just fills in the curiously ordered lists. - * This will be repeated at the beginning of each pass. - */ -{ - my_main_ptr main = (my_main_ptr) cinfo->main; - int ci, i, rgroup; - int M = cinfo->min_DCT_scaled_size; - jpeg_component_info *compptr; - JSAMPARRAY buf, xbuf0, xbuf1; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / - cinfo->min_DCT_scaled_size; /* height of a row group of component */ - xbuf0 = main->xbuffer[0][ci]; - xbuf1 = main->xbuffer[1][ci]; - /* First copy the workspace pointers as-is */ - buf = main->buffer[ci]; - for (i = 0; i < rgroup * (M + 2); i++) { - xbuf0[i] = xbuf1[i] = buf[i]; - } - /* In the second list, put the last four row groups in swapped order */ - for (i = 0; i < rgroup * 2; i++) { - xbuf1[rgroup*(M-2) + i] = buf[rgroup*M + i]; - xbuf1[rgroup*M + i] = buf[rgroup*(M-2) + i]; - } - /* The wraparound pointers at top and bottom will be filled later - * (see set_wraparound_pointers, below). Initially we want the "above" - * pointers to duplicate the first actual data line. This only needs - * to happen in xbuffer[0]. - */ - for (i = 0; i < rgroup; i++) { - xbuf0[i - rgroup] = xbuf0[0]; - } - } -} - - -LOCAL(void) -set_wraparound_pointers (j_decompress_ptr cinfo) -/* Set up the "wraparound" pointers at top and bottom of the pointer lists. - * This changes the pointer list state from top-of-image to the normal state. - */ -{ - my_main_ptr main = (my_main_ptr) cinfo->main; - int ci, i, rgroup; - int M = cinfo->min_DCT_scaled_size; - jpeg_component_info *compptr; - JSAMPARRAY xbuf0, xbuf1; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / - cinfo->min_DCT_scaled_size; /* height of a row group of component */ - xbuf0 = main->xbuffer[0][ci]; - xbuf1 = main->xbuffer[1][ci]; - for (i = 0; i < rgroup; i++) { - xbuf0[i - rgroup] = xbuf0[rgroup*(M+1) + i]; - xbuf1[i - rgroup] = xbuf1[rgroup*(M+1) + i]; - xbuf0[rgroup*(M+2) + i] = xbuf0[i]; - xbuf1[rgroup*(M+2) + i] = xbuf1[i]; - } - } -} - - -LOCAL(void) -set_bottom_pointers (j_decompress_ptr cinfo) -/* Change the pointer lists to duplicate the last sample row at the bottom - * of the image. whichptr indicates which xbuffer holds the final iMCU row. - * Also sets rowgroups_avail to indicate number of nondummy row groups in row. - */ -{ - my_main_ptr main = (my_main_ptr) cinfo->main; - int ci, i, rgroup, iMCUheight, rows_left; - jpeg_component_info *compptr; - JSAMPARRAY xbuf; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* Count sample rows in one iMCU row and in one row group */ - iMCUheight = compptr->v_samp_factor * compptr->DCT_scaled_size; - rgroup = iMCUheight / cinfo->min_DCT_scaled_size; - /* Count nondummy sample rows remaining for this component */ - rows_left = (int) (compptr->downsampled_height % (JDIMENSION) iMCUheight); - if (rows_left == 0) rows_left = iMCUheight; - /* Count nondummy row groups. Should get same answer for each component, - * so we need only do it once. - */ - if (ci == 0) { - main->rowgroups_avail = (JDIMENSION) ((rows_left-1) / rgroup + 1); - } - /* Duplicate the last real sample row rgroup*2 times; this pads out the - * last partial rowgroup and ensures at least one full rowgroup of context. - */ - xbuf = main->xbuffer[main->whichptr][ci]; - for (i = 0; i < rgroup * 2; i++) { - xbuf[rows_left + i] = xbuf[rows_left-1]; - } - } -} - - -/* - * Initialize for a processing pass. - */ - -METHODDEF(void) -start_pass_main (j_decompress_ptr cinfo, J_BUF_MODE pass_mode) -{ - my_main_ptr main = (my_main_ptr) cinfo->main; - - switch (pass_mode) { - case JBUF_PASS_THRU: - if (cinfo->upsample->need_context_rows) { - main->pub.process_data = process_data_context_main; - make_funny_pointers(cinfo); /* Create the xbuffer[] lists */ - main->whichptr = 0; /* Read first iMCU row into xbuffer[0] */ - main->context_state = CTX_PREPARE_FOR_IMCU; - main->iMCU_row_ctr = 0; - } else { - /* Simple case with no context needed */ - main->pub.process_data = process_data_simple_main; - } - main->buffer_full = FALSE; /* Mark buffer empty */ - main->rowgroup_ctr = 0; - break; -#ifdef QUANT_2PASS_SUPPORTED - case JBUF_CRANK_DEST: - /* For last pass of 2-pass quantization, just crank the postprocessor */ - main->pub.process_data = process_data_crank_post; - break; -#endif - default: - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - break; - } -} - - -/* - * Process some data. - * This handles the simple case where no context is required. - */ - -METHODDEF(void) -process_data_simple_main (j_decompress_ptr cinfo, - JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail) -{ - my_main_ptr main = (my_main_ptr) cinfo->main; - JDIMENSION rowgroups_avail; - - /* Read input data if we haven't filled the main buffer yet */ - if (! main->buffer_full) { - if (! (*cinfo->coef->decompress_data) (cinfo, main->buffer)) - return; /* suspension forced, can do nothing more */ - main->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ - } - - /* There are always min_DCT_scaled_size row groups in an iMCU row. */ - rowgroups_avail = (JDIMENSION) cinfo->min_DCT_scaled_size; - /* Note: at the bottom of the image, we may pass extra garbage row groups - * to the postprocessor. The postprocessor has to check for bottom - * of image anyway (at row resolution), so no point in us doing it too. - */ - - /* Feed the postprocessor */ - (*cinfo->post->post_process_data) (cinfo, main->buffer, - &main->rowgroup_ctr, rowgroups_avail, - output_buf, out_row_ctr, out_rows_avail); - - /* Has postprocessor consumed all the data yet? If so, mark buffer empty */ - if (main->rowgroup_ctr >= rowgroups_avail) { - main->buffer_full = FALSE; - main->rowgroup_ctr = 0; - } -} - - -/* - * Process some data. - * This handles the case where context rows must be provided. - */ - -METHODDEF(void) -process_data_context_main (j_decompress_ptr cinfo, - JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail) -{ - my_main_ptr main = (my_main_ptr) cinfo->main; - - /* Read input data if we haven't filled the main buffer yet */ - if (! main->buffer_full) { - if (! (*cinfo->coef->decompress_data) (cinfo, - main->xbuffer[main->whichptr])) - return; /* suspension forced, can do nothing more */ - main->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ - main->iMCU_row_ctr++; /* count rows received */ - } - - /* Postprocessor typically will not swallow all the input data it is handed - * in one call (due to filling the output buffer first). Must be prepared - * to exit and restart. This switch lets us keep track of how far we got. - * Note that each case falls through to the next on successful completion. - */ - switch (main->context_state) { - case CTX_POSTPONED_ROW: - /* Call postprocessor using previously set pointers for postponed row */ - (*cinfo->post->post_process_data) (cinfo, main->xbuffer[main->whichptr], - &main->rowgroup_ctr, main->rowgroups_avail, - output_buf, out_row_ctr, out_rows_avail); - if (main->rowgroup_ctr < main->rowgroups_avail) - return; /* Need to suspend */ - main->context_state = CTX_PREPARE_FOR_IMCU; - if (*out_row_ctr >= out_rows_avail) - return; /* Postprocessor exactly filled output buf */ - /*FALLTHROUGH*/ - case CTX_PREPARE_FOR_IMCU: - /* Prepare to process first M-1 row groups of this iMCU row */ - main->rowgroup_ctr = 0; - main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_scaled_size - 1); - /* Check for bottom of image: if so, tweak pointers to "duplicate" - * the last sample row, and adjust rowgroups_avail to ignore padding rows. - */ - if (main->iMCU_row_ctr == cinfo->total_iMCU_rows) - set_bottom_pointers(cinfo); - main->context_state = CTX_PROCESS_IMCU; - /*FALLTHROUGH*/ - case CTX_PROCESS_IMCU: - /* Call postprocessor using previously set pointers */ - (*cinfo->post->post_process_data) (cinfo, main->xbuffer[main->whichptr], - &main->rowgroup_ctr, main->rowgroups_avail, - output_buf, out_row_ctr, out_rows_avail); - if (main->rowgroup_ctr < main->rowgroups_avail) - return; /* Need to suspend */ - /* After the first iMCU, change wraparound pointers to normal state */ - if (main->iMCU_row_ctr == 1) - set_wraparound_pointers(cinfo); - /* Prepare to load new iMCU row using other xbuffer list */ - main->whichptr ^= 1; /* 0=>1 or 1=>0 */ - main->buffer_full = FALSE; - /* Still need to process last row group of this iMCU row, */ - /* which is saved at index M+1 of the other xbuffer */ - main->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_scaled_size + 1); - main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_scaled_size + 2); - main->context_state = CTX_POSTPONED_ROW; - } -} - - -/* - * Process some data. - * Final pass of two-pass quantization: just call the postprocessor. - * Source data will be the postprocessor controller's internal buffer. - */ - -#ifdef QUANT_2PASS_SUPPORTED - -METHODDEF(void) -process_data_crank_post (j_decompress_ptr cinfo, - JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail) -{ - (*cinfo->post->post_process_data) (cinfo, (JSAMPIMAGE) NULL, - (JDIMENSION *) NULL, (JDIMENSION) 0, - output_buf, out_row_ctr, out_rows_avail); -} - -#endif /* QUANT_2PASS_SUPPORTED */ - - -/* - * Initialize main buffer controller. - */ - -GLOBAL(void) -jinit_d_main_controller (j_decompress_ptr cinfo, boolean need_full_buffer) -{ - my_main_ptr main; - int ci, rgroup, ngroups; - jpeg_component_info *compptr; - - main = (my_main_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_main_controller)); - cinfo->main = (struct jpeg_d_main_controller *) main; - main->pub.start_pass = start_pass_main; - - if (need_full_buffer) /* shouldn't happen */ - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - - /* Allocate the workspace. - * ngroups is the number of row groups we need. - */ - if (cinfo->upsample->need_context_rows) { - if (cinfo->min_DCT_scaled_size < 2) /* unsupported, see comments above */ - ERREXIT(cinfo, JERR_NOTIMPL); - alloc_funny_pointers(cinfo); /* Alloc space for xbuffer[] lists */ - ngroups = cinfo->min_DCT_scaled_size + 2; - } else { - ngroups = cinfo->min_DCT_scaled_size; - } - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) / - cinfo->min_DCT_scaled_size; /* height of a row group of component */ - main->buffer[ci] = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - compptr->width_in_blocks * compptr->DCT_scaled_size, - (JDIMENSION) (rgroup * ngroups)); - } -} diff --git a/Build/source/libs/jpeg/jdmarker.c b/Build/source/libs/jpeg/jdmarker.c deleted file mode 100644 index f4cca8cc835..00000000000 --- a/Build/source/libs/jpeg/jdmarker.c +++ /dev/null @@ -1,1360 +0,0 @@ -/* - * jdmarker.c - * - * Copyright (C) 1991-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to decode JPEG datastream markers. - * Most of the complexity arises from our desire to support input - * suspension: if not all of the data for a marker is available, - * we must exit back to the application. On resumption, we reprocess - * the marker. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -typedef enum { /* JPEG marker codes */ - M_SOF0 = 0xc0, - M_SOF1 = 0xc1, - M_SOF2 = 0xc2, - M_SOF3 = 0xc3, - - M_SOF5 = 0xc5, - M_SOF6 = 0xc6, - M_SOF7 = 0xc7, - - M_JPG = 0xc8, - M_SOF9 = 0xc9, - M_SOF10 = 0xca, - M_SOF11 = 0xcb, - - M_SOF13 = 0xcd, - M_SOF14 = 0xce, - M_SOF15 = 0xcf, - - M_DHT = 0xc4, - - M_DAC = 0xcc, - - M_RST0 = 0xd0, - M_RST1 = 0xd1, - M_RST2 = 0xd2, - M_RST3 = 0xd3, - M_RST4 = 0xd4, - M_RST5 = 0xd5, - M_RST6 = 0xd6, - M_RST7 = 0xd7, - - M_SOI = 0xd8, - M_EOI = 0xd9, - M_SOS = 0xda, - M_DQT = 0xdb, - M_DNL = 0xdc, - M_DRI = 0xdd, - M_DHP = 0xde, - M_EXP = 0xdf, - - M_APP0 = 0xe0, - M_APP1 = 0xe1, - M_APP2 = 0xe2, - M_APP3 = 0xe3, - M_APP4 = 0xe4, - M_APP5 = 0xe5, - M_APP6 = 0xe6, - M_APP7 = 0xe7, - M_APP8 = 0xe8, - M_APP9 = 0xe9, - M_APP10 = 0xea, - M_APP11 = 0xeb, - M_APP12 = 0xec, - M_APP13 = 0xed, - M_APP14 = 0xee, - M_APP15 = 0xef, - - M_JPG0 = 0xf0, - M_JPG13 = 0xfd, - M_COM = 0xfe, - - M_TEM = 0x01, - - M_ERROR = 0x100 -} JPEG_MARKER; - - -/* Private state */ - -typedef struct { - struct jpeg_marker_reader pub; /* public fields */ - - /* Application-overridable marker processing methods */ - jpeg_marker_parser_method process_COM; - jpeg_marker_parser_method process_APPn[16]; - - /* Limit on marker data length to save for each marker type */ - unsigned int length_limit_COM; - unsigned int length_limit_APPn[16]; - - /* Status of COM/APPn marker saving */ - jpeg_saved_marker_ptr cur_marker; /* NULL if not processing a marker */ - unsigned int bytes_read; /* data bytes read so far in marker */ - /* Note: cur_marker is not linked into marker_list until it's all read. */ -} my_marker_reader; - -typedef my_marker_reader * my_marker_ptr; - - -/* - * Macros for fetching data from the data source module. - * - * At all times, cinfo->src->next_input_byte and ->bytes_in_buffer reflect - * the current restart point; we update them only when we have reached a - * suitable place to restart if a suspension occurs. - */ - -/* Declare and initialize local copies of input pointer/count */ -#define INPUT_VARS(cinfo) \ - struct jpeg_source_mgr * datasrc = (cinfo)->src; \ - const JOCTET * next_input_byte = datasrc->next_input_byte; \ - size_t bytes_in_buffer = datasrc->bytes_in_buffer - -/* Unload the local copies --- do this only at a restart boundary */ -#define INPUT_SYNC(cinfo) \ - ( datasrc->next_input_byte = next_input_byte, \ - datasrc->bytes_in_buffer = bytes_in_buffer ) - -/* Reload the local copies --- used only in MAKE_BYTE_AVAIL */ -#define INPUT_RELOAD(cinfo) \ - ( next_input_byte = datasrc->next_input_byte, \ - bytes_in_buffer = datasrc->bytes_in_buffer ) - -/* Internal macro for INPUT_BYTE and INPUT_2BYTES: make a byte available. - * Note we do *not* do INPUT_SYNC before calling fill_input_buffer, - * but we must reload the local copies after a successful fill. - */ -#define MAKE_BYTE_AVAIL(cinfo,action) \ - if (bytes_in_buffer == 0) { \ - if (! (*datasrc->fill_input_buffer) (cinfo)) \ - { action; } \ - INPUT_RELOAD(cinfo); \ - } - -/* Read a byte into variable V. - * If must suspend, take the specified action (typically "return FALSE"). - */ -#define INPUT_BYTE(cinfo,V,action) \ - MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \ - bytes_in_buffer--; \ - V = GETJOCTET(*next_input_byte++); ) - -/* As above, but read two bytes interpreted as an unsigned 16-bit integer. - * V should be declared unsigned int or perhaps INT32. - */ -#define INPUT_2BYTES(cinfo,V,action) \ - MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \ - bytes_in_buffer--; \ - V = ((unsigned int) GETJOCTET(*next_input_byte++)) << 8; \ - MAKE_BYTE_AVAIL(cinfo,action); \ - bytes_in_buffer--; \ - V += GETJOCTET(*next_input_byte++); ) - - -/* - * Routines to process JPEG markers. - * - * Entry condition: JPEG marker itself has been read and its code saved - * in cinfo->unread_marker; input restart point is just after the marker. - * - * Exit: if return TRUE, have read and processed any parameters, and have - * updated the restart point to point after the parameters. - * If return FALSE, was forced to suspend before reaching end of - * marker parameters; restart point has not been moved. Same routine - * will be called again after application supplies more input data. - * - * This approach to suspension assumes that all of a marker's parameters - * can fit into a single input bufferload. This should hold for "normal" - * markers. Some COM/APPn markers might have large parameter segments - * that might not fit. If we are simply dropping such a marker, we use - * skip_input_data to get past it, and thereby put the problem on the - * source manager's shoulders. If we are saving the marker's contents - * into memory, we use a slightly different convention: when forced to - * suspend, the marker processor updates the restart point to the end of - * what it's consumed (ie, the end of the buffer) before returning FALSE. - * On resumption, cinfo->unread_marker still contains the marker code, - * but the data source will point to the next chunk of marker data. - * The marker processor must retain internal state to deal with this. - * - * Note that we don't bother to avoid duplicate trace messages if a - * suspension occurs within marker parameters. Other side effects - * require more care. - */ - - -LOCAL(boolean) -get_soi (j_decompress_ptr cinfo) -/* Process an SOI marker */ -{ - int i; - - TRACEMS(cinfo, 1, JTRC_SOI); - - if (cinfo->marker->saw_SOI) - ERREXIT(cinfo, JERR_SOI_DUPLICATE); - - /* Reset all parameters that are defined to be reset by SOI */ - - for (i = 0; i < NUM_ARITH_TBLS; i++) { - cinfo->arith_dc_L[i] = 0; - cinfo->arith_dc_U[i] = 1; - cinfo->arith_ac_K[i] = 5; - } - cinfo->restart_interval = 0; - - /* Set initial assumptions for colorspace etc */ - - cinfo->jpeg_color_space = JCS_UNKNOWN; - cinfo->CCIR601_sampling = FALSE; /* Assume non-CCIR sampling??? */ - - cinfo->saw_JFIF_marker = FALSE; - cinfo->JFIF_major_version = 1; /* set default JFIF APP0 values */ - cinfo->JFIF_minor_version = 1; - cinfo->density_unit = 0; - cinfo->X_density = 1; - cinfo->Y_density = 1; - cinfo->saw_Adobe_marker = FALSE; - cinfo->Adobe_transform = 0; - - cinfo->marker->saw_SOI = TRUE; - - return TRUE; -} - - -LOCAL(boolean) -get_sof (j_decompress_ptr cinfo, boolean is_prog, boolean is_arith) -/* Process a SOFn marker */ -{ - INT32 length; - int c, ci; - jpeg_component_info * compptr; - INPUT_VARS(cinfo); - - cinfo->progressive_mode = is_prog; - cinfo->arith_code = is_arith; - - INPUT_2BYTES(cinfo, length, return FALSE); - - INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE); - INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE); - INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE); - INPUT_BYTE(cinfo, cinfo->num_components, return FALSE); - - length -= 8; - - TRACEMS4(cinfo, 1, JTRC_SOF, cinfo->unread_marker, - (int) cinfo->image_width, (int) cinfo->image_height, - cinfo->num_components); - - if (cinfo->marker->saw_SOF) - ERREXIT(cinfo, JERR_SOF_DUPLICATE); - - /* We don't support files in which the image height is initially specified */ - /* as 0 and is later redefined by DNL. As long as we have to check that, */ - /* might as well have a general sanity check. */ - if (cinfo->image_height <= 0 || cinfo->image_width <= 0 - || cinfo->num_components <= 0) - ERREXIT(cinfo, JERR_EMPTY_IMAGE); - - if (length != (cinfo->num_components * 3)) - ERREXIT(cinfo, JERR_BAD_LENGTH); - - if (cinfo->comp_info == NULL) /* do only once, even if suspend */ - cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - cinfo->num_components * SIZEOF(jpeg_component_info)); - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - compptr->component_index = ci; - INPUT_BYTE(cinfo, compptr->component_id, return FALSE); - INPUT_BYTE(cinfo, c, return FALSE); - compptr->h_samp_factor = (c >> 4) & 15; - compptr->v_samp_factor = (c ) & 15; - INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE); - - TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT, - compptr->component_id, compptr->h_samp_factor, - compptr->v_samp_factor, compptr->quant_tbl_no); - } - - cinfo->marker->saw_SOF = TRUE; - - INPUT_SYNC(cinfo); - return TRUE; -} - - -LOCAL(boolean) -get_sos (j_decompress_ptr cinfo) -/* Process a SOS marker */ -{ - INT32 length; - int i, ci, n, c, cc; - jpeg_component_info * compptr; - INPUT_VARS(cinfo); - - if (! cinfo->marker->saw_SOF) - ERREXIT(cinfo, JERR_SOS_NO_SOF); - - INPUT_2BYTES(cinfo, length, return FALSE); - - INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */ - - TRACEMS1(cinfo, 1, JTRC_SOS, n); - - if (length != (n * 2 + 6) || n < 1 || n > MAX_COMPS_IN_SCAN) - ERREXIT(cinfo, JERR_BAD_LENGTH); - - cinfo->comps_in_scan = n; - - /* Collect the component-spec parameters */ - - for (i = 0; i < n; i++) { - INPUT_BYTE(cinfo, cc, return FALSE); - INPUT_BYTE(cinfo, c, return FALSE); - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - if (cc == compptr->component_id) - goto id_found; - } - - ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc); - - id_found: - - cinfo->cur_comp_info[i] = compptr; - compptr->dc_tbl_no = (c >> 4) & 15; - compptr->ac_tbl_no = (c ) & 15; - - TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc, - compptr->dc_tbl_no, compptr->ac_tbl_no); - } - - /* Collect the additional scan parameters Ss, Se, Ah/Al. */ - INPUT_BYTE(cinfo, c, return FALSE); - cinfo->Ss = c; - INPUT_BYTE(cinfo, c, return FALSE); - cinfo->Se = c; - INPUT_BYTE(cinfo, c, return FALSE); - cinfo->Ah = (c >> 4) & 15; - cinfo->Al = (c ) & 15; - - TRACEMS4(cinfo, 1, JTRC_SOS_PARAMS, cinfo->Ss, cinfo->Se, - cinfo->Ah, cinfo->Al); - - /* Prepare to scan data & restart markers */ - cinfo->marker->next_restart_num = 0; - - /* Count another SOS marker */ - cinfo->input_scan_number++; - - INPUT_SYNC(cinfo); - return TRUE; -} - - -#ifdef D_ARITH_CODING_SUPPORTED - -LOCAL(boolean) -get_dac (j_decompress_ptr cinfo) -/* Process a DAC marker */ -{ - INT32 length; - int index, val; - INPUT_VARS(cinfo); - - INPUT_2BYTES(cinfo, length, return FALSE); - length -= 2; - - while (length > 0) { - INPUT_BYTE(cinfo, index, return FALSE); - INPUT_BYTE(cinfo, val, return FALSE); - - length -= 2; - - TRACEMS2(cinfo, 1, JTRC_DAC, index, val); - - if (index < 0 || index >= (2*NUM_ARITH_TBLS)) - ERREXIT1(cinfo, JERR_DAC_INDEX, index); - - if (index >= NUM_ARITH_TBLS) { /* define AC table */ - cinfo->arith_ac_K[index-NUM_ARITH_TBLS] = (UINT8) val; - } else { /* define DC table */ - cinfo->arith_dc_L[index] = (UINT8) (val & 0x0F); - cinfo->arith_dc_U[index] = (UINT8) (val >> 4); - if (cinfo->arith_dc_L[index] > cinfo->arith_dc_U[index]) - ERREXIT1(cinfo, JERR_DAC_VALUE, val); - } - } - - if (length != 0) - ERREXIT(cinfo, JERR_BAD_LENGTH); - - INPUT_SYNC(cinfo); - return TRUE; -} - -#else /* ! D_ARITH_CODING_SUPPORTED */ - -#define get_dac(cinfo) skip_variable(cinfo) - -#endif /* D_ARITH_CODING_SUPPORTED */ - - -LOCAL(boolean) -get_dht (j_decompress_ptr cinfo) -/* Process a DHT marker */ -{ - INT32 length; - UINT8 bits[17]; - UINT8 huffval[256]; - int i, index, count; - JHUFF_TBL **htblptr; - INPUT_VARS(cinfo); - - INPUT_2BYTES(cinfo, length, return FALSE); - length -= 2; - - while (length > 16) { - INPUT_BYTE(cinfo, index, return FALSE); - - TRACEMS1(cinfo, 1, JTRC_DHT, index); - - bits[0] = 0; - count = 0; - for (i = 1; i <= 16; i++) { - INPUT_BYTE(cinfo, bits[i], return FALSE); - count += bits[i]; - } - - length -= 1 + 16; - - TRACEMS8(cinfo, 2, JTRC_HUFFBITS, - bits[1], bits[2], bits[3], bits[4], - bits[5], bits[6], bits[7], bits[8]); - TRACEMS8(cinfo, 2, JTRC_HUFFBITS, - bits[9], bits[10], bits[11], bits[12], - bits[13], bits[14], bits[15], bits[16]); - - /* Here we just do minimal validation of the counts to avoid walking - * off the end of our table space. jdhuff.c will check more carefully. - */ - if (count > 256 || ((INT32) count) > length) - ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); - - for (i = 0; i < count; i++) - INPUT_BYTE(cinfo, huffval[i], return FALSE); - - length -= count; - - if (index & 0x10) { /* AC table definition */ - index -= 0x10; - htblptr = &cinfo->ac_huff_tbl_ptrs[index]; - } else { /* DC table definition */ - htblptr = &cinfo->dc_huff_tbl_ptrs[index]; - } - - if (index < 0 || index >= NUM_HUFF_TBLS) - ERREXIT1(cinfo, JERR_DHT_INDEX, index); - - if (*htblptr == NULL) - *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); - - MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits)); - MEMCOPY((*htblptr)->huffval, huffval, SIZEOF((*htblptr)->huffval)); - } - - if (length != 0) - ERREXIT(cinfo, JERR_BAD_LENGTH); - - INPUT_SYNC(cinfo); - return TRUE; -} - - -LOCAL(boolean) -get_dqt (j_decompress_ptr cinfo) -/* Process a DQT marker */ -{ - INT32 length; - int n, i, prec; - unsigned int tmp; - JQUANT_TBL *quant_ptr; - INPUT_VARS(cinfo); - - INPUT_2BYTES(cinfo, length, return FALSE); - length -= 2; - - while (length > 0) { - INPUT_BYTE(cinfo, n, return FALSE); - prec = n >> 4; - n &= 0x0F; - - TRACEMS2(cinfo, 1, JTRC_DQT, n, prec); - - if (n >= NUM_QUANT_TBLS) - ERREXIT1(cinfo, JERR_DQT_INDEX, n); - - if (cinfo->quant_tbl_ptrs[n] == NULL) - cinfo->quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) cinfo); - quant_ptr = cinfo->quant_tbl_ptrs[n]; - - for (i = 0; i < DCTSIZE2; i++) { - if (prec) - INPUT_2BYTES(cinfo, tmp, return FALSE); - else - INPUT_BYTE(cinfo, tmp, return FALSE); - /* We convert the zigzag-order table to natural array order. */ - quant_ptr->quantval[jpeg_natural_order[i]] = (UINT16) tmp; - } - - if (cinfo->err->trace_level >= 2) { - for (i = 0; i < DCTSIZE2; i += 8) { - TRACEMS8(cinfo, 2, JTRC_QUANTVALS, - quant_ptr->quantval[i], quant_ptr->quantval[i+1], - quant_ptr->quantval[i+2], quant_ptr->quantval[i+3], - quant_ptr->quantval[i+4], quant_ptr->quantval[i+5], - quant_ptr->quantval[i+6], quant_ptr->quantval[i+7]); - } - } - - length -= DCTSIZE2+1; - if (prec) length -= DCTSIZE2; - } - - if (length != 0) - ERREXIT(cinfo, JERR_BAD_LENGTH); - - INPUT_SYNC(cinfo); - return TRUE; -} - - -LOCAL(boolean) -get_dri (j_decompress_ptr cinfo) -/* Process a DRI marker */ -{ - INT32 length; - unsigned int tmp; - INPUT_VARS(cinfo); - - INPUT_2BYTES(cinfo, length, return FALSE); - - if (length != 4) - ERREXIT(cinfo, JERR_BAD_LENGTH); - - INPUT_2BYTES(cinfo, tmp, return FALSE); - - TRACEMS1(cinfo, 1, JTRC_DRI, tmp); - - cinfo->restart_interval = tmp; - - INPUT_SYNC(cinfo); - return TRUE; -} - - -/* - * Routines for processing APPn and COM markers. - * These are either saved in memory or discarded, per application request. - * APP0 and APP14 are specially checked to see if they are - * JFIF and Adobe markers, respectively. - */ - -#define APP0_DATA_LEN 14 /* Length of interesting data in APP0 */ -#define APP14_DATA_LEN 12 /* Length of interesting data in APP14 */ -#define APPN_DATA_LEN 14 /* Must be the largest of the above!! */ - - -LOCAL(void) -examine_app0 (j_decompress_ptr cinfo, JOCTET FAR * data, - unsigned int datalen, INT32 remaining) -/* Examine first few bytes from an APP0. - * Take appropriate action if it is a JFIF marker. - * datalen is # of bytes at data[], remaining is length of rest of marker data. - */ -{ - INT32 totallen = (INT32) datalen + remaining; - - if (datalen >= APP0_DATA_LEN && - GETJOCTET(data[0]) == 0x4A && - GETJOCTET(data[1]) == 0x46 && - GETJOCTET(data[2]) == 0x49 && - GETJOCTET(data[3]) == 0x46 && - GETJOCTET(data[4]) == 0) { - /* Found JFIF APP0 marker: save info */ - cinfo->saw_JFIF_marker = TRUE; - cinfo->JFIF_major_version = GETJOCTET(data[5]); - cinfo->JFIF_minor_version = GETJOCTET(data[6]); - cinfo->density_unit = GETJOCTET(data[7]); - cinfo->X_density = (GETJOCTET(data[8]) << 8) + GETJOCTET(data[9]); - cinfo->Y_density = (GETJOCTET(data[10]) << 8) + GETJOCTET(data[11]); - /* Check version. - * Major version must be 1, anything else signals an incompatible change. - * (We used to treat this as an error, but now it's a nonfatal warning, - * because some bozo at Hijaak couldn't read the spec.) - * Minor version should be 0..2, but process anyway if newer. - */ - if (cinfo->JFIF_major_version != 1) - WARNMS2(cinfo, JWRN_JFIF_MAJOR, - cinfo->JFIF_major_version, cinfo->JFIF_minor_version); - /* Generate trace messages */ - TRACEMS5(cinfo, 1, JTRC_JFIF, - cinfo->JFIF_major_version, cinfo->JFIF_minor_version, - cinfo->X_density, cinfo->Y_density, cinfo->density_unit); - /* Validate thumbnail dimensions and issue appropriate messages */ - if (GETJOCTET(data[12]) | GETJOCTET(data[13])) - TRACEMS2(cinfo, 1, JTRC_JFIF_THUMBNAIL, - GETJOCTET(data[12]), GETJOCTET(data[13])); - totallen -= APP0_DATA_LEN; - if (totallen != - ((INT32)GETJOCTET(data[12]) * (INT32)GETJOCTET(data[13]) * (INT32) 3)) - TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int) totallen); - } else if (datalen >= 6 && - GETJOCTET(data[0]) == 0x4A && - GETJOCTET(data[1]) == 0x46 && - GETJOCTET(data[2]) == 0x58 && - GETJOCTET(data[3]) == 0x58 && - GETJOCTET(data[4]) == 0) { - /* Found JFIF "JFXX" extension APP0 marker */ - /* The library doesn't actually do anything with these, - * but we try to produce a helpful trace message. - */ - switch (GETJOCTET(data[5])) { - case 0x10: - TRACEMS1(cinfo, 1, JTRC_THUMB_JPEG, (int) totallen); - break; - case 0x11: - TRACEMS1(cinfo, 1, JTRC_THUMB_PALETTE, (int) totallen); - break; - case 0x13: - TRACEMS1(cinfo, 1, JTRC_THUMB_RGB, (int) totallen); - break; - default: - TRACEMS2(cinfo, 1, JTRC_JFIF_EXTENSION, - GETJOCTET(data[5]), (int) totallen); - break; - } - } else { - /* Start of APP0 does not match "JFIF" or "JFXX", or too short */ - TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen); - } -} - - -LOCAL(void) -examine_app14 (j_decompress_ptr cinfo, JOCTET FAR * data, - unsigned int datalen, INT32 remaining) -/* Examine first few bytes from an APP14. - * Take appropriate action if it is an Adobe marker. - * datalen is # of bytes at data[], remaining is length of rest of marker data. - */ -{ - unsigned int version, flags0, flags1, transform; - - if (datalen >= APP14_DATA_LEN && - GETJOCTET(data[0]) == 0x41 && - GETJOCTET(data[1]) == 0x64 && - GETJOCTET(data[2]) == 0x6F && - GETJOCTET(data[3]) == 0x62 && - GETJOCTET(data[4]) == 0x65) { - /* Found Adobe APP14 marker */ - version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]); - flags0 = (GETJOCTET(data[7]) << 8) + GETJOCTET(data[8]); - flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]); - transform = GETJOCTET(data[11]); - TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform); - cinfo->saw_Adobe_marker = TRUE; - cinfo->Adobe_transform = (UINT8) transform; - } else { - /* Start of APP14 does not match "Adobe", or too short */ - TRACEMS1(cinfo, 1, JTRC_APP14, (int) (datalen + remaining)); - } -} - - -METHODDEF(boolean) -get_interesting_appn (j_decompress_ptr cinfo) -/* Process an APP0 or APP14 marker without saving it */ -{ - INT32 length; - JOCTET b[APPN_DATA_LEN]; - unsigned int i, numtoread; - INPUT_VARS(cinfo); - - INPUT_2BYTES(cinfo, length, return FALSE); - length -= 2; - - /* get the interesting part of the marker data */ - if (length >= APPN_DATA_LEN) - numtoread = APPN_DATA_LEN; - else if (length > 0) - numtoread = (unsigned int) length; - else - numtoread = 0; - for (i = 0; i < numtoread; i++) - INPUT_BYTE(cinfo, b[i], return FALSE); - length -= numtoread; - - /* process it */ - switch (cinfo->unread_marker) { - case M_APP0: - examine_app0(cinfo, (JOCTET FAR *) b, numtoread, length); - break; - case M_APP14: - examine_app14(cinfo, (JOCTET FAR *) b, numtoread, length); - break; - default: - /* can't get here unless jpeg_save_markers chooses wrong processor */ - ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); - break; - } - - /* skip any remaining data -- could be lots */ - INPUT_SYNC(cinfo); - if (length > 0) - (*cinfo->src->skip_input_data) (cinfo, (long) length); - - return TRUE; -} - - -#ifdef SAVE_MARKERS_SUPPORTED - -METHODDEF(boolean) -save_marker (j_decompress_ptr cinfo) -/* Save an APPn or COM marker into the marker list */ -{ - my_marker_ptr marker = (my_marker_ptr) cinfo->marker; - jpeg_saved_marker_ptr cur_marker = marker->cur_marker; - unsigned int bytes_read, data_length; - JOCTET FAR * data; - INT32 length = 0; - INPUT_VARS(cinfo); - - if (cur_marker == NULL) { - /* begin reading a marker */ - INPUT_2BYTES(cinfo, length, return FALSE); - length -= 2; - if (length >= 0) { /* watch out for bogus length word */ - /* figure out how much we want to save */ - unsigned int limit; - if (cinfo->unread_marker == (int) M_COM) - limit = marker->length_limit_COM; - else - limit = marker->length_limit_APPn[cinfo->unread_marker - (int) M_APP0]; - if ((unsigned int) length < limit) - limit = (unsigned int) length; - /* allocate and initialize the marker item */ - cur_marker = (jpeg_saved_marker_ptr) - (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(struct jpeg_marker_struct) + limit); - cur_marker->next = NULL; - cur_marker->marker = (UINT8) cinfo->unread_marker; - cur_marker->original_length = (unsigned int) length; - cur_marker->data_length = limit; - /* data area is just beyond the jpeg_marker_struct */ - data = cur_marker->data = (JOCTET FAR *) (cur_marker + 1); - marker->cur_marker = cur_marker; - marker->bytes_read = 0; - bytes_read = 0; - data_length = limit; - } else { - /* deal with bogus length word */ - bytes_read = data_length = 0; - data = NULL; - } - } else { - /* resume reading a marker */ - bytes_read = marker->bytes_read; - data_length = cur_marker->data_length; - data = cur_marker->data + bytes_read; - } - - while (bytes_read < data_length) { - INPUT_SYNC(cinfo); /* move the restart point to here */ - marker->bytes_read = bytes_read; - /* If there's not at least one byte in buffer, suspend */ - MAKE_BYTE_AVAIL(cinfo, return FALSE); - /* Copy bytes with reasonable rapidity */ - while (bytes_read < data_length && bytes_in_buffer > 0) { - *data++ = *next_input_byte++; - bytes_in_buffer--; - bytes_read++; - } - } - - /* Done reading what we want to read */ - if (cur_marker != NULL) { /* will be NULL if bogus length word */ - /* Add new marker to end of list */ - if (cinfo->marker_list == NULL) { - cinfo->marker_list = cur_marker; - } else { - jpeg_saved_marker_ptr prev = cinfo->marker_list; - while (prev->next != NULL) - prev = prev->next; - prev->next = cur_marker; - } - /* Reset pointer & calc remaining data length */ - data = cur_marker->data; - length = cur_marker->original_length - data_length; - } - /* Reset to initial state for next marker */ - marker->cur_marker = NULL; - - /* Process the marker if interesting; else just make a generic trace msg */ - switch (cinfo->unread_marker) { - case M_APP0: - examine_app0(cinfo, data, data_length, length); - break; - case M_APP14: - examine_app14(cinfo, data, data_length, length); - break; - default: - TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, - (int) (data_length + length)); - break; - } - - /* skip any remaining data -- could be lots */ - INPUT_SYNC(cinfo); /* do before skip_input_data */ - if (length > 0) - (*cinfo->src->skip_input_data) (cinfo, (long) length); - - return TRUE; -} - -#endif /* SAVE_MARKERS_SUPPORTED */ - - -METHODDEF(boolean) -skip_variable (j_decompress_ptr cinfo) -/* Skip over an unknown or uninteresting variable-length marker */ -{ - INT32 length; - INPUT_VARS(cinfo); - - INPUT_2BYTES(cinfo, length, return FALSE); - length -= 2; - - TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (int) length); - - INPUT_SYNC(cinfo); /* do before skip_input_data */ - if (length > 0) - (*cinfo->src->skip_input_data) (cinfo, (long) length); - - return TRUE; -} - - -/* - * Find the next JPEG marker, save it in cinfo->unread_marker. - * Returns FALSE if had to suspend before reaching a marker; - * in that case cinfo->unread_marker is unchanged. - * - * Note that the result might not be a valid marker code, - * but it will never be 0 or FF. - */ - -LOCAL(boolean) -next_marker (j_decompress_ptr cinfo) -{ - int c; - INPUT_VARS(cinfo); - - for (;;) { - INPUT_BYTE(cinfo, c, return FALSE); - /* Skip any non-FF bytes. - * This may look a bit inefficient, but it will not occur in a valid file. - * We sync after each discarded byte so that a suspending data source - * can discard the byte from its buffer. - */ - while (c != 0xFF) { - cinfo->marker->discarded_bytes++; - INPUT_SYNC(cinfo); - INPUT_BYTE(cinfo, c, return FALSE); - } - /* This loop swallows any duplicate FF bytes. Extra FFs are legal as - * pad bytes, so don't count them in discarded_bytes. We assume there - * will not be so many consecutive FF bytes as to overflow a suspending - * data source's input buffer. - */ - do { - INPUT_BYTE(cinfo, c, return FALSE); - } while (c == 0xFF); - if (c != 0) - break; /* found a valid marker, exit loop */ - /* Reach here if we found a stuffed-zero data sequence (FF/00). - * Discard it and loop back to try again. - */ - cinfo->marker->discarded_bytes += 2; - INPUT_SYNC(cinfo); - } - - if (cinfo->marker->discarded_bytes != 0) { - WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c); - cinfo->marker->discarded_bytes = 0; - } - - cinfo->unread_marker = c; - - INPUT_SYNC(cinfo); - return TRUE; -} - - -LOCAL(boolean) -first_marker (j_decompress_ptr cinfo) -/* Like next_marker, but used to obtain the initial SOI marker. */ -/* For this marker, we do not allow preceding garbage or fill; otherwise, - * we might well scan an entire input file before realizing it ain't JPEG. - * If an application wants to process non-JFIF files, it must seek to the - * SOI before calling the JPEG library. - */ -{ - int c, c2; - INPUT_VARS(cinfo); - - INPUT_BYTE(cinfo, c, return FALSE); - INPUT_BYTE(cinfo, c2, return FALSE); - if (c != 0xFF || c2 != (int) M_SOI) - ERREXIT2(cinfo, JERR_NO_SOI, c, c2); - - cinfo->unread_marker = c2; - - INPUT_SYNC(cinfo); - return TRUE; -} - - -/* - * Read markers until SOS or EOI. - * - * Returns same codes as are defined for jpeg_consume_input: - * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. - */ - -METHODDEF(int) -read_markers (j_decompress_ptr cinfo) -{ - /* Outer loop repeats once for each marker. */ - for (;;) { - /* Collect the marker proper, unless we already did. */ - /* NB: first_marker() enforces the requirement that SOI appear first. */ - if (cinfo->unread_marker == 0) { - if (! cinfo->marker->saw_SOI) { - if (! first_marker(cinfo)) - return JPEG_SUSPENDED; - } else { - if (! next_marker(cinfo)) - return JPEG_SUSPENDED; - } - } - /* At this point cinfo->unread_marker contains the marker code and the - * input point is just past the marker proper, but before any parameters. - * A suspension will cause us to return with this state still true. - */ - switch (cinfo->unread_marker) { - case M_SOI: - if (! get_soi(cinfo)) - return JPEG_SUSPENDED; - break; - - case M_SOF0: /* Baseline */ - case M_SOF1: /* Extended sequential, Huffman */ - if (! get_sof(cinfo, FALSE, FALSE)) - return JPEG_SUSPENDED; - break; - - case M_SOF2: /* Progressive, Huffman */ - if (! get_sof(cinfo, TRUE, FALSE)) - return JPEG_SUSPENDED; - break; - - case M_SOF9: /* Extended sequential, arithmetic */ - if (! get_sof(cinfo, FALSE, TRUE)) - return JPEG_SUSPENDED; - break; - - case M_SOF10: /* Progressive, arithmetic */ - if (! get_sof(cinfo, TRUE, TRUE)) - return JPEG_SUSPENDED; - break; - - /* Currently unsupported SOFn types */ - case M_SOF3: /* Lossless, Huffman */ - case M_SOF5: /* Differential sequential, Huffman */ - case M_SOF6: /* Differential progressive, Huffman */ - case M_SOF7: /* Differential lossless, Huffman */ - case M_JPG: /* Reserved for JPEG extensions */ - case M_SOF11: /* Lossless, arithmetic */ - case M_SOF13: /* Differential sequential, arithmetic */ - case M_SOF14: /* Differential progressive, arithmetic */ - case M_SOF15: /* Differential lossless, arithmetic */ - ERREXIT1(cinfo, JERR_SOF_UNSUPPORTED, cinfo->unread_marker); - break; - - case M_SOS: - if (! get_sos(cinfo)) - return JPEG_SUSPENDED; - cinfo->unread_marker = 0; /* processed the marker */ - return JPEG_REACHED_SOS; - - case M_EOI: - TRACEMS(cinfo, 1, JTRC_EOI); - cinfo->unread_marker = 0; /* processed the marker */ - return JPEG_REACHED_EOI; - - case M_DAC: - if (! get_dac(cinfo)) - return JPEG_SUSPENDED; - break; - - case M_DHT: - if (! get_dht(cinfo)) - return JPEG_SUSPENDED; - break; - - case M_DQT: - if (! get_dqt(cinfo)) - return JPEG_SUSPENDED; - break; - - case M_DRI: - if (! get_dri(cinfo)) - return JPEG_SUSPENDED; - break; - - case M_APP0: - case M_APP1: - case M_APP2: - case M_APP3: - case M_APP4: - case M_APP5: - case M_APP6: - case M_APP7: - case M_APP8: - case M_APP9: - case M_APP10: - case M_APP11: - case M_APP12: - case M_APP13: - case M_APP14: - case M_APP15: - if (! (*((my_marker_ptr) cinfo->marker)->process_APPn[ - cinfo->unread_marker - (int) M_APP0]) (cinfo)) - return JPEG_SUSPENDED; - break; - - case M_COM: - if (! (*((my_marker_ptr) cinfo->marker)->process_COM) (cinfo)) - return JPEG_SUSPENDED; - break; - - case M_RST0: /* these are all parameterless */ - case M_RST1: - case M_RST2: - case M_RST3: - case M_RST4: - case M_RST5: - case M_RST6: - case M_RST7: - case M_TEM: - TRACEMS1(cinfo, 1, JTRC_PARMLESS_MARKER, cinfo->unread_marker); - break; - - case M_DNL: /* Ignore DNL ... perhaps the wrong thing */ - if (! skip_variable(cinfo)) - return JPEG_SUSPENDED; - break; - - default: /* must be DHP, EXP, JPGn, or RESn */ - /* For now, we treat the reserved markers as fatal errors since they are - * likely to be used to signal incompatible JPEG Part 3 extensions. - * Once the JPEG 3 version-number marker is well defined, this code - * ought to change! - */ - ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); - break; - } - /* Successfully processed marker, so reset state variable */ - cinfo->unread_marker = 0; - } /* end loop */ -} - - -/* - * Read a restart marker, which is expected to appear next in the datastream; - * if the marker is not there, take appropriate recovery action. - * Returns FALSE if suspension is required. - * - * This is called by the entropy decoder after it has read an appropriate - * number of MCUs. cinfo->unread_marker may be nonzero if the entropy decoder - * has already read a marker from the data source. Under normal conditions - * cinfo->unread_marker will be reset to 0 before returning; if not reset, - * it holds a marker which the decoder will be unable to read past. - */ - -METHODDEF(boolean) -read_restart_marker (j_decompress_ptr cinfo) -{ - /* Obtain a marker unless we already did. */ - /* Note that next_marker will complain if it skips any data. */ - if (cinfo->unread_marker == 0) { - if (! next_marker(cinfo)) - return FALSE; - } - - if (cinfo->unread_marker == - ((int) M_RST0 + cinfo->marker->next_restart_num)) { - /* Normal case --- swallow the marker and let entropy decoder continue */ - TRACEMS1(cinfo, 3, JTRC_RST, cinfo->marker->next_restart_num); - cinfo->unread_marker = 0; - } else { - /* Uh-oh, the restart markers have been messed up. */ - /* Let the data source manager determine how to resync. */ - if (! (*cinfo->src->resync_to_restart) (cinfo, - cinfo->marker->next_restart_num)) - return FALSE; - } - - /* Update next-restart state */ - cinfo->marker->next_restart_num = (cinfo->marker->next_restart_num + 1) & 7; - - return TRUE; -} - - -/* - * This is the default resync_to_restart method for data source managers - * to use if they don't have any better approach. Some data source managers - * may be able to back up, or may have additional knowledge about the data - * which permits a more intelligent recovery strategy; such managers would - * presumably supply their own resync method. - * - * read_restart_marker calls resync_to_restart if it finds a marker other than - * the restart marker it was expecting. (This code is *not* used unless - * a nonzero restart interval has been declared.) cinfo->unread_marker is - * the marker code actually found (might be anything, except 0 or FF). - * The desired restart marker number (0..7) is passed as a parameter. - * This routine is supposed to apply whatever error recovery strategy seems - * appropriate in order to position the input stream to the next data segment. - * Note that cinfo->unread_marker is treated as a marker appearing before - * the current data-source input point; usually it should be reset to zero - * before returning. - * Returns FALSE if suspension is required. - * - * This implementation is substantially constrained by wanting to treat the - * input as a data stream; this means we can't back up. Therefore, we have - * only the following actions to work with: - * 1. Simply discard the marker and let the entropy decoder resume at next - * byte of file. - * 2. Read forward until we find another marker, discarding intervening - * data. (In theory we could look ahead within the current bufferload, - * without having to discard data if we don't find the desired marker. - * This idea is not implemented here, in part because it makes behavior - * dependent on buffer size and chance buffer-boundary positions.) - * 3. Leave the marker unread (by failing to zero cinfo->unread_marker). - * This will cause the entropy decoder to process an empty data segment, - * inserting dummy zeroes, and then we will reprocess the marker. - * - * #2 is appropriate if we think the desired marker lies ahead, while #3 is - * appropriate if the found marker is a future restart marker (indicating - * that we have missed the desired restart marker, probably because it got - * corrupted). - * We apply #2 or #3 if the found marker is a restart marker no more than - * two counts behind or ahead of the expected one. We also apply #2 if the - * found marker is not a legal JPEG marker code (it's certainly bogus data). - * If the found marker is a restart marker more than 2 counts away, we do #1 - * (too much risk that the marker is erroneous; with luck we will be able to - * resync at some future point). - * For any valid non-restart JPEG marker, we apply #3. This keeps us from - * overrunning the end of a scan. An implementation limited to single-scan - * files might find it better to apply #2 for markers other than EOI, since - * any other marker would have to be bogus data in that case. - */ - -GLOBAL(boolean) -jpeg_resync_to_restart (j_decompress_ptr cinfo, int desired) -{ - int marker = cinfo->unread_marker; - int action = 1; - - /* Always put up a warning. */ - WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired); - - /* Outer loop handles repeated decision after scanning forward. */ - for (;;) { - if (marker < (int) M_SOF0) - action = 2; /* invalid marker */ - else if (marker < (int) M_RST0 || marker > (int) M_RST7) - action = 3; /* valid non-restart marker */ - else { - if (marker == ((int) M_RST0 + ((desired+1) & 7)) || - marker == ((int) M_RST0 + ((desired+2) & 7))) - action = 3; /* one of the next two expected restarts */ - else if (marker == ((int) M_RST0 + ((desired-1) & 7)) || - marker == ((int) M_RST0 + ((desired-2) & 7))) - action = 2; /* a prior restart, so advance */ - else - action = 1; /* desired restart or too far away */ - } - TRACEMS2(cinfo, 4, JTRC_RECOVERY_ACTION, marker, action); - switch (action) { - case 1: - /* Discard marker and let entropy decoder resume processing. */ - cinfo->unread_marker = 0; - return TRUE; - case 2: - /* Scan to the next marker, and repeat the decision loop. */ - if (! next_marker(cinfo)) - return FALSE; - marker = cinfo->unread_marker; - break; - case 3: - /* Return without advancing past this marker. */ - /* Entropy decoder will be forced to process an empty segment. */ - return TRUE; - } - } /* end loop */ -} - - -/* - * Reset marker processing state to begin a fresh datastream. - */ - -METHODDEF(void) -reset_marker_reader (j_decompress_ptr cinfo) -{ - my_marker_ptr marker = (my_marker_ptr) cinfo->marker; - - cinfo->comp_info = NULL; /* until allocated by get_sof */ - cinfo->input_scan_number = 0; /* no SOS seen yet */ - cinfo->unread_marker = 0; /* no pending marker */ - marker->pub.saw_SOI = FALSE; /* set internal state too */ - marker->pub.saw_SOF = FALSE; - marker->pub.discarded_bytes = 0; - marker->cur_marker = NULL; -} - - -/* - * Initialize the marker reader module. - * This is called only once, when the decompression object is created. - */ - -GLOBAL(void) -jinit_marker_reader (j_decompress_ptr cinfo) -{ - my_marker_ptr marker; - int i; - - /* Create subobject in permanent pool */ - marker = (my_marker_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - SIZEOF(my_marker_reader)); - cinfo->marker = (struct jpeg_marker_reader *) marker; - /* Initialize public method pointers */ - marker->pub.reset_marker_reader = reset_marker_reader; - marker->pub.read_markers = read_markers; - marker->pub.read_restart_marker = read_restart_marker; - /* Initialize COM/APPn processing. - * By default, we examine and then discard APP0 and APP14, - * but simply discard COM and all other APPn. - */ - marker->process_COM = skip_variable; - marker->length_limit_COM = 0; - for (i = 0; i < 16; i++) { - marker->process_APPn[i] = skip_variable; - marker->length_limit_APPn[i] = 0; - } - marker->process_APPn[0] = get_interesting_appn; - marker->process_APPn[14] = get_interesting_appn; - /* Reset marker processing state */ - reset_marker_reader(cinfo); -} - - -/* - * Control saving of COM and APPn markers into marker_list. - */ - -#ifdef SAVE_MARKERS_SUPPORTED - -GLOBAL(void) -jpeg_save_markers (j_decompress_ptr cinfo, int marker_code, - unsigned int length_limit) -{ - my_marker_ptr marker = (my_marker_ptr) cinfo->marker; - long maxlength; - jpeg_marker_parser_method processor; - - /* Length limit mustn't be larger than what we can allocate - * (should only be a concern in a 16-bit environment). - */ - maxlength = cinfo->mem->max_alloc_chunk - SIZEOF(struct jpeg_marker_struct); - if (((long) length_limit) > maxlength) - length_limit = (unsigned int) maxlength; - - /* Choose processor routine to use. - * APP0/APP14 have special requirements. - */ - if (length_limit) { - processor = save_marker; - /* If saving APP0/APP14, save at least enough for our internal use. */ - if (marker_code == (int) M_APP0 && length_limit < APP0_DATA_LEN) - length_limit = APP0_DATA_LEN; - else if (marker_code == (int) M_APP14 && length_limit < APP14_DATA_LEN) - length_limit = APP14_DATA_LEN; - } else { - processor = skip_variable; - /* If discarding APP0/APP14, use our regular on-the-fly processor. */ - if (marker_code == (int) M_APP0 || marker_code == (int) M_APP14) - processor = get_interesting_appn; - } - - if (marker_code == (int) M_COM) { - marker->process_COM = processor; - marker->length_limit_COM = length_limit; - } else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15) { - marker->process_APPn[marker_code - (int) M_APP0] = processor; - marker->length_limit_APPn[marker_code - (int) M_APP0] = length_limit; - } else - ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code); -} - -#endif /* SAVE_MARKERS_SUPPORTED */ - - -/* - * Install a special processing method for COM or APPn markers. - */ - -GLOBAL(void) -jpeg_set_marker_processor (j_decompress_ptr cinfo, int marker_code, - jpeg_marker_parser_method routine) -{ - my_marker_ptr marker = (my_marker_ptr) cinfo->marker; - - if (marker_code == (int) M_COM) - marker->process_COM = routine; - else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15) - marker->process_APPn[marker_code - (int) M_APP0] = routine; - else - ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code); -} diff --git a/Build/source/libs/jpeg/jdmaster.c b/Build/source/libs/jpeg/jdmaster.c deleted file mode 100644 index 2802c5b7b29..00000000000 --- a/Build/source/libs/jpeg/jdmaster.c +++ /dev/null @@ -1,557 +0,0 @@ -/* - * jdmaster.c - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains master control logic for the JPEG decompressor. - * These routines are concerned with selecting the modules to be executed - * and with determining the number of passes and the work to be done in each - * pass. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Private state */ - -typedef struct { - struct jpeg_decomp_master pub; /* public fields */ - - int pass_number; /* # of passes completed */ - - boolean using_merged_upsample; /* TRUE if using merged upsample/cconvert */ - - /* Saved references to initialized quantizer modules, - * in case we need to switch modes. - */ - struct jpeg_color_quantizer * quantizer_1pass; - struct jpeg_color_quantizer * quantizer_2pass; -} my_decomp_master; - -typedef my_decomp_master * my_master_ptr; - - -/* - * Determine whether merged upsample/color conversion should be used. - * CRUCIAL: this must match the actual capabilities of jdmerge.c! - */ - -LOCAL(boolean) -use_merged_upsample (j_decompress_ptr cinfo) -{ -#ifdef UPSAMPLE_MERGING_SUPPORTED - /* Merging is the equivalent of plain box-filter upsampling */ - if (cinfo->do_fancy_upsampling || cinfo->CCIR601_sampling) - return FALSE; - /* jdmerge.c only supports YCC=>RGB color conversion */ - if (cinfo->jpeg_color_space != JCS_YCbCr || cinfo->num_components != 3 || - cinfo->out_color_space != JCS_RGB || - cinfo->out_color_components != RGB_PIXELSIZE) - return FALSE; - /* and it only handles 2h1v or 2h2v sampling ratios */ - if (cinfo->comp_info[0].h_samp_factor != 2 || - cinfo->comp_info[1].h_samp_factor != 1 || - cinfo->comp_info[2].h_samp_factor != 1 || - cinfo->comp_info[0].v_samp_factor > 2 || - cinfo->comp_info[1].v_samp_factor != 1 || - cinfo->comp_info[2].v_samp_factor != 1) - return FALSE; - /* furthermore, it doesn't work if we've scaled the IDCTs differently */ - if (cinfo->comp_info[0].DCT_scaled_size != cinfo->min_DCT_scaled_size || - cinfo->comp_info[1].DCT_scaled_size != cinfo->min_DCT_scaled_size || - cinfo->comp_info[2].DCT_scaled_size != cinfo->min_DCT_scaled_size) - return FALSE; - /* ??? also need to test for upsample-time rescaling, when & if supported */ - return TRUE; /* by golly, it'll work... */ -#else - return FALSE; -#endif -} - - -/* - * Compute output image dimensions and related values. - * NOTE: this is exported for possible use by application. - * Hence it mustn't do anything that can't be done twice. - * Also note that it may be called before the master module is initialized! - */ - -GLOBAL(void) -jpeg_calc_output_dimensions (j_decompress_ptr cinfo) -/* Do computations that are needed before master selection phase */ -{ -#ifdef IDCT_SCALING_SUPPORTED - int ci; - jpeg_component_info *compptr; -#endif - - /* Prevent application from calling me at wrong times */ - if (cinfo->global_state != DSTATE_READY) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - -#ifdef IDCT_SCALING_SUPPORTED - - /* Compute actual output image dimensions and DCT scaling choices. */ - if (cinfo->scale_num * 8 <= cinfo->scale_denom) { - /* Provide 1/8 scaling */ - cinfo->output_width = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width, 8L); - cinfo->output_height = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height, 8L); - cinfo->min_DCT_scaled_size = 1; - } else if (cinfo->scale_num * 4 <= cinfo->scale_denom) { - /* Provide 1/4 scaling */ - cinfo->output_width = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width, 4L); - cinfo->output_height = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height, 4L); - cinfo->min_DCT_scaled_size = 2; - } else if (cinfo->scale_num * 2 <= cinfo->scale_denom) { - /* Provide 1/2 scaling */ - cinfo->output_width = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width, 2L); - cinfo->output_height = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height, 2L); - cinfo->min_DCT_scaled_size = 4; - } else { - /* Provide 1/1 scaling */ - cinfo->output_width = cinfo->image_width; - cinfo->output_height = cinfo->image_height; - cinfo->min_DCT_scaled_size = DCTSIZE; - } - /* In selecting the actual DCT scaling for each component, we try to - * scale up the chroma components via IDCT scaling rather than upsampling. - * This saves time if the upsampler gets to use 1:1 scaling. - * Note this code assumes that the supported DCT scalings are powers of 2. - */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - int ssize = cinfo->min_DCT_scaled_size; - while (ssize < DCTSIZE && - (compptr->h_samp_factor * ssize * 2 <= - cinfo->max_h_samp_factor * cinfo->min_DCT_scaled_size) && - (compptr->v_samp_factor * ssize * 2 <= - cinfo->max_v_samp_factor * cinfo->min_DCT_scaled_size)) { - ssize = ssize * 2; - } - compptr->DCT_scaled_size = ssize; - } - - /* Recompute downsampled dimensions of components; - * application needs to know these if using raw downsampled data. - */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* Size in samples, after IDCT scaling */ - compptr->downsampled_width = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width * - (long) (compptr->h_samp_factor * compptr->DCT_scaled_size), - (long) (cinfo->max_h_samp_factor * DCTSIZE)); - compptr->downsampled_height = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height * - (long) (compptr->v_samp_factor * compptr->DCT_scaled_size), - (long) (cinfo->max_v_samp_factor * DCTSIZE)); - } - -#else /* !IDCT_SCALING_SUPPORTED */ - - /* Hardwire it to "no scaling" */ - cinfo->output_width = cinfo->image_width; - cinfo->output_height = cinfo->image_height; - /* jdinput.c has already initialized DCT_scaled_size to DCTSIZE, - * and has computed unscaled downsampled_width and downsampled_height. - */ - -#endif /* IDCT_SCALING_SUPPORTED */ - - /* Report number of components in selected colorspace. */ - /* Probably this should be in the color conversion module... */ - switch (cinfo->out_color_space) { - case JCS_GRAYSCALE: - cinfo->out_color_components = 1; - break; - case JCS_RGB: -#if RGB_PIXELSIZE != 3 - cinfo->out_color_components = RGB_PIXELSIZE; - break; -#endif /* else share code with YCbCr */ - case JCS_YCbCr: - cinfo->out_color_components = 3; - break; - case JCS_CMYK: - case JCS_YCCK: - cinfo->out_color_components = 4; - break; - default: /* else must be same colorspace as in file */ - cinfo->out_color_components = cinfo->num_components; - break; - } - cinfo->output_components = (cinfo->quantize_colors ? 1 : - cinfo->out_color_components); - - /* See if upsampler will want to emit more than one row at a time */ - if (use_merged_upsample(cinfo)) - cinfo->rec_outbuf_height = cinfo->max_v_samp_factor; - else - cinfo->rec_outbuf_height = 1; -} - - -/* - * Several decompression processes need to range-limit values to the range - * 0..MAXJSAMPLE; the input value may fall somewhat outside this range - * due to noise introduced by quantization, roundoff error, etc. These - * processes are inner loops and need to be as fast as possible. On most - * machines, particularly CPUs with pipelines or instruction prefetch, - * a (subscript-check-less) C table lookup - * x = sample_range_limit[x]; - * is faster than explicit tests - * if (x < 0) x = 0; - * else if (x > MAXJSAMPLE) x = MAXJSAMPLE; - * These processes all use a common table prepared by the routine below. - * - * For most steps we can mathematically guarantee that the initial value - * of x is within MAXJSAMPLE+1 of the legal range, so a table running from - * -(MAXJSAMPLE+1) to 2*MAXJSAMPLE+1 is sufficient. But for the initial - * limiting step (just after the IDCT), a wildly out-of-range value is - * possible if the input data is corrupt. To avoid any chance of indexing - * off the end of memory and getting a bad-pointer trap, we perform the - * post-IDCT limiting thus: - * x = range_limit[x & MASK]; - * where MASK is 2 bits wider than legal sample data, ie 10 bits for 8-bit - * samples. Under normal circumstances this is more than enough range and - * a correct output will be generated; with bogus input data the mask will - * cause wraparound, and we will safely generate a bogus-but-in-range output. - * For the post-IDCT step, we want to convert the data from signed to unsigned - * representation by adding CENTERJSAMPLE at the same time that we limit it. - * So the post-IDCT limiting table ends up looking like this: - * CENTERJSAMPLE,CENTERJSAMPLE+1,...,MAXJSAMPLE, - * MAXJSAMPLE (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times), - * 0 (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times), - * 0,1,...,CENTERJSAMPLE-1 - * Negative inputs select values from the upper half of the table after - * masking. - * - * We can save some space by overlapping the start of the post-IDCT table - * with the simpler range limiting table. The post-IDCT table begins at - * sample_range_limit + CENTERJSAMPLE. - * - * Note that the table is allocated in near data space on PCs; it's small - * enough and used often enough to justify this. - */ - -LOCAL(void) -prepare_range_limit_table (j_decompress_ptr cinfo) -/* Allocate and fill in the sample_range_limit table */ -{ - JSAMPLE * table; - int i; - - table = (JSAMPLE *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (5 * (MAXJSAMPLE+1) + CENTERJSAMPLE) * SIZEOF(JSAMPLE)); - table += (MAXJSAMPLE+1); /* allow negative subscripts of simple table */ - cinfo->sample_range_limit = table; - /* First segment of "simple" table: limit[x] = 0 for x < 0 */ - MEMZERO(table - (MAXJSAMPLE+1), (MAXJSAMPLE+1) * SIZEOF(JSAMPLE)); - /* Main part of "simple" table: limit[x] = x */ - for (i = 0; i <= MAXJSAMPLE; i++) - table[i] = (JSAMPLE) i; - table += CENTERJSAMPLE; /* Point to where post-IDCT table starts */ - /* End of simple table, rest of first half of post-IDCT table */ - for (i = CENTERJSAMPLE; i < 2*(MAXJSAMPLE+1); i++) - table[i] = MAXJSAMPLE; - /* Second half of post-IDCT table */ - MEMZERO(table + (2 * (MAXJSAMPLE+1)), - (2 * (MAXJSAMPLE+1) - CENTERJSAMPLE) * SIZEOF(JSAMPLE)); - MEMCOPY(table + (4 * (MAXJSAMPLE+1) - CENTERJSAMPLE), - cinfo->sample_range_limit, CENTERJSAMPLE * SIZEOF(JSAMPLE)); -} - - -/* - * Master selection of decompression modules. - * This is done once at jpeg_start_decompress time. We determine - * which modules will be used and give them appropriate initialization calls. - * We also initialize the decompressor input side to begin consuming data. - * - * Since jpeg_read_header has finished, we know what is in the SOF - * and (first) SOS markers. We also have all the application parameter - * settings. - */ - -LOCAL(void) -master_selection (j_decompress_ptr cinfo) -{ - my_master_ptr master = (my_master_ptr) cinfo->master; - boolean use_c_buffer; - long samplesperrow; - JDIMENSION jd_samplesperrow; - - /* Initialize dimensions and other stuff */ - jpeg_calc_output_dimensions(cinfo); - prepare_range_limit_table(cinfo); - - /* Width of an output scanline must be representable as JDIMENSION. */ - samplesperrow = (long) cinfo->output_width * (long) cinfo->out_color_components; - jd_samplesperrow = (JDIMENSION) samplesperrow; - if ((long) jd_samplesperrow != samplesperrow) - ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); - - /* Initialize my private state */ - master->pass_number = 0; - master->using_merged_upsample = use_merged_upsample(cinfo); - - /* Color quantizer selection */ - master->quantizer_1pass = NULL; - master->quantizer_2pass = NULL; - /* No mode changes if not using buffered-image mode. */ - if (! cinfo->quantize_colors || ! cinfo->buffered_image) { - cinfo->enable_1pass_quant = FALSE; - cinfo->enable_external_quant = FALSE; - cinfo->enable_2pass_quant = FALSE; - } - if (cinfo->quantize_colors) { - if (cinfo->raw_data_out) - ERREXIT(cinfo, JERR_NOTIMPL); - /* 2-pass quantizer only works in 3-component color space. */ - if (cinfo->out_color_components != 3) { - cinfo->enable_1pass_quant = TRUE; - cinfo->enable_external_quant = FALSE; - cinfo->enable_2pass_quant = FALSE; - cinfo->colormap = NULL; - } else if (cinfo->colormap != NULL) { - cinfo->enable_external_quant = TRUE; - } else if (cinfo->two_pass_quantize) { - cinfo->enable_2pass_quant = TRUE; - } else { - cinfo->enable_1pass_quant = TRUE; - } - - if (cinfo->enable_1pass_quant) { -#ifdef QUANT_1PASS_SUPPORTED - jinit_1pass_quantizer(cinfo); - master->quantizer_1pass = cinfo->cquantize; -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } - - /* We use the 2-pass code to map to external colormaps. */ - if (cinfo->enable_2pass_quant || cinfo->enable_external_quant) { -#ifdef QUANT_2PASS_SUPPORTED - jinit_2pass_quantizer(cinfo); - master->quantizer_2pass = cinfo->cquantize; -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } - /* If both quantizers are initialized, the 2-pass one is left active; - * this is necessary for starting with quantization to an external map. - */ - } - - /* Post-processing: in particular, color conversion first */ - if (! cinfo->raw_data_out) { - if (master->using_merged_upsample) { -#ifdef UPSAMPLE_MERGING_SUPPORTED - jinit_merged_upsampler(cinfo); /* does color conversion too */ -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } else { - jinit_color_deconverter(cinfo); - jinit_upsampler(cinfo); - } - jinit_d_post_controller(cinfo, cinfo->enable_2pass_quant); - } - /* Inverse DCT */ - jinit_inverse_dct(cinfo); - /* Entropy decoding: either Huffman or arithmetic coding. */ - if (cinfo->arith_code) { - ERREXIT(cinfo, JERR_ARITH_NOTIMPL); - } else { - if (cinfo->progressive_mode) { -#ifdef D_PROGRESSIVE_SUPPORTED - jinit_phuff_decoder(cinfo); -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } else - jinit_huff_decoder(cinfo); - } - - /* Initialize principal buffer controllers. */ - use_c_buffer = cinfo->inputctl->has_multiple_scans || cinfo->buffered_image; - jinit_d_coef_controller(cinfo, use_c_buffer); - - if (! cinfo->raw_data_out) - jinit_d_main_controller(cinfo, FALSE /* never need full buffer here */); - - /* We can now tell the memory manager to allocate virtual arrays. */ - (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); - - /* Initialize input side of decompressor to consume first scan. */ - (*cinfo->inputctl->start_input_pass) (cinfo); - -#ifdef D_MULTISCAN_FILES_SUPPORTED - /* If jpeg_start_decompress will read the whole file, initialize - * progress monitoring appropriately. The input step is counted - * as one pass. - */ - if (cinfo->progress != NULL && ! cinfo->buffered_image && - cinfo->inputctl->has_multiple_scans) { - int nscans; - /* Estimate number of scans to set pass_limit. */ - if (cinfo->progressive_mode) { - /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */ - nscans = 2 + 3 * cinfo->num_components; - } else { - /* For a nonprogressive multiscan file, estimate 1 scan per component. */ - nscans = cinfo->num_components; - } - cinfo->progress->pass_counter = 0L; - cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans; - cinfo->progress->completed_passes = 0; - cinfo->progress->total_passes = (cinfo->enable_2pass_quant ? 3 : 2); - /* Count the input pass as done */ - master->pass_number++; - } -#endif /* D_MULTISCAN_FILES_SUPPORTED */ -} - - -/* - * Per-pass setup. - * This is called at the beginning of each output pass. We determine which - * modules will be active during this pass and give them appropriate - * start_pass calls. We also set is_dummy_pass to indicate whether this - * is a "real" output pass or a dummy pass for color quantization. - * (In the latter case, jdapistd.c will crank the pass to completion.) - */ - -METHODDEF(void) -prepare_for_output_pass (j_decompress_ptr cinfo) -{ - my_master_ptr master = (my_master_ptr) cinfo->master; - - if (master->pub.is_dummy_pass) { -#ifdef QUANT_2PASS_SUPPORTED - /* Final pass of 2-pass quantization */ - master->pub.is_dummy_pass = FALSE; - (*cinfo->cquantize->start_pass) (cinfo, FALSE); - (*cinfo->post->start_pass) (cinfo, JBUF_CRANK_DEST); - (*cinfo->main->start_pass) (cinfo, JBUF_CRANK_DEST); -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif /* QUANT_2PASS_SUPPORTED */ - } else { - if (cinfo->quantize_colors && cinfo->colormap == NULL) { - /* Select new quantization method */ - if (cinfo->two_pass_quantize && cinfo->enable_2pass_quant) { - cinfo->cquantize = master->quantizer_2pass; - master->pub.is_dummy_pass = TRUE; - } else if (cinfo->enable_1pass_quant) { - cinfo->cquantize = master->quantizer_1pass; - } else { - ERREXIT(cinfo, JERR_MODE_CHANGE); - } - } - (*cinfo->idct->start_pass) (cinfo); - (*cinfo->coef->start_output_pass) (cinfo); - if (! cinfo->raw_data_out) { - if (! master->using_merged_upsample) - (*cinfo->cconvert->start_pass) (cinfo); - (*cinfo->upsample->start_pass) (cinfo); - if (cinfo->quantize_colors) - (*cinfo->cquantize->start_pass) (cinfo, master->pub.is_dummy_pass); - (*cinfo->post->start_pass) (cinfo, - (master->pub.is_dummy_pass ? JBUF_SAVE_AND_PASS : JBUF_PASS_THRU)); - (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); - } - } - - /* Set up progress monitor's pass info if present */ - if (cinfo->progress != NULL) { - cinfo->progress->completed_passes = master->pass_number; - cinfo->progress->total_passes = master->pass_number + - (master->pub.is_dummy_pass ? 2 : 1); - /* In buffered-image mode, we assume one more output pass if EOI not - * yet reached, but no more passes if EOI has been reached. - */ - if (cinfo->buffered_image && ! cinfo->inputctl->eoi_reached) { - cinfo->progress->total_passes += (cinfo->enable_2pass_quant ? 2 : 1); - } - } -} - - -/* - * Finish up at end of an output pass. - */ - -METHODDEF(void) -finish_output_pass (j_decompress_ptr cinfo) -{ - my_master_ptr master = (my_master_ptr) cinfo->master; - - if (cinfo->quantize_colors) - (*cinfo->cquantize->finish_pass) (cinfo); - master->pass_number++; -} - - -#ifdef D_MULTISCAN_FILES_SUPPORTED - -/* - * Switch to a new external colormap between output passes. - */ - -GLOBAL(void) -jpeg_new_colormap (j_decompress_ptr cinfo) -{ - my_master_ptr master = (my_master_ptr) cinfo->master; - - /* Prevent application from calling me at wrong times */ - if (cinfo->global_state != DSTATE_BUFIMAGE) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - if (cinfo->quantize_colors && cinfo->enable_external_quant && - cinfo->colormap != NULL) { - /* Select 2-pass quantizer for external colormap use */ - cinfo->cquantize = master->quantizer_2pass; - /* Notify quantizer of colormap change */ - (*cinfo->cquantize->new_color_map) (cinfo); - master->pub.is_dummy_pass = FALSE; /* just in case */ - } else - ERREXIT(cinfo, JERR_MODE_CHANGE); -} - -#endif /* D_MULTISCAN_FILES_SUPPORTED */ - - -/* - * Initialize master decompression control and select active modules. - * This is performed at the start of jpeg_start_decompress. - */ - -GLOBAL(void) -jinit_master_decompress (j_decompress_ptr cinfo) -{ - my_master_ptr master; - - master = (my_master_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_decomp_master)); - cinfo->master = (struct jpeg_decomp_master *) master; - master->pub.prepare_for_output_pass = prepare_for_output_pass; - master->pub.finish_output_pass = finish_output_pass; - - master->pub.is_dummy_pass = FALSE; - - master_selection(cinfo); -} diff --git a/Build/source/libs/jpeg/jdmerge.c b/Build/source/libs/jpeg/jdmerge.c deleted file mode 100644 index 37444468c23..00000000000 --- a/Build/source/libs/jpeg/jdmerge.c +++ /dev/null @@ -1,400 +0,0 @@ -/* - * jdmerge.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains code for merged upsampling/color conversion. - * - * This file combines functions from jdsample.c and jdcolor.c; - * read those files first to understand what's going on. - * - * When the chroma components are to be upsampled by simple replication - * (ie, box filtering), we can save some work in color conversion by - * calculating all the output pixels corresponding to a pair of chroma - * samples at one time. In the conversion equations - * R = Y + K1 * Cr - * G = Y + K2 * Cb + K3 * Cr - * B = Y + K4 * Cb - * only the Y term varies among the group of pixels corresponding to a pair - * of chroma samples, so the rest of the terms can be calculated just once. - * At typical sampling ratios, this eliminates half or three-quarters of the - * multiplications needed for color conversion. - * - * This file currently provides implementations for the following cases: - * YCbCr => RGB color conversion only. - * Sampling ratios of 2h1v or 2h2v. - * No scaling needed at upsample time. - * Corner-aligned (non-CCIR601) sampling alignment. - * Other special cases could be added, but in most applications these are - * the only common cases. (For uncommon cases we fall back on the more - * general code in jdsample.c and jdcolor.c.) - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - -#ifdef UPSAMPLE_MERGING_SUPPORTED - - -/* Private subobject */ - -typedef struct { - struct jpeg_upsampler pub; /* public fields */ - - /* Pointer to routine to do actual upsampling/conversion of one row group */ - JMETHOD(void, upmethod, (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, - JSAMPARRAY output_buf)); - - /* Private state for YCC->RGB conversion */ - int * Cr_r_tab; /* => table for Cr to R conversion */ - int * Cb_b_tab; /* => table for Cb to B conversion */ - INT32 * Cr_g_tab; /* => table for Cr to G conversion */ - INT32 * Cb_g_tab; /* => table for Cb to G conversion */ - - /* For 2:1 vertical sampling, we produce two output rows at a time. - * We need a "spare" row buffer to hold the second output row if the - * application provides just a one-row buffer; we also use the spare - * to discard the dummy last row if the image height is odd. - */ - JSAMPROW spare_row; - boolean spare_full; /* T if spare buffer is occupied */ - - JDIMENSION out_row_width; /* samples per output row */ - JDIMENSION rows_to_go; /* counts rows remaining in image */ -} my_upsampler; - -typedef my_upsampler * my_upsample_ptr; - -#define SCALEBITS 16 /* speediest right-shift on some machines */ -#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) -#define FIX(x) ((INT32) ((x) * (1L<RGB colorspace conversion. - * This is taken directly from jdcolor.c; see that file for more info. - */ - -LOCAL(void) -build_ycc_rgb_table (j_decompress_ptr cinfo) -{ - my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; - int i; - INT32 x; - SHIFT_TEMPS - - upsample->Cr_r_tab = (int *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (MAXJSAMPLE+1) * SIZEOF(int)); - upsample->Cb_b_tab = (int *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (MAXJSAMPLE+1) * SIZEOF(int)); - upsample->Cr_g_tab = (INT32 *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (MAXJSAMPLE+1) * SIZEOF(INT32)); - upsample->Cb_g_tab = (INT32 *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (MAXJSAMPLE+1) * SIZEOF(INT32)); - - for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { - /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ - /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ - /* Cr=>R value is nearest int to 1.40200 * x */ - upsample->Cr_r_tab[i] = (int) - RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); - /* Cb=>B value is nearest int to 1.77200 * x */ - upsample->Cb_b_tab[i] = (int) - RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); - /* Cr=>G value is scaled-up -0.71414 * x */ - upsample->Cr_g_tab[i] = (- FIX(0.71414)) * x; - /* Cb=>G value is scaled-up -0.34414 * x */ - /* We also add in ONE_HALF so that need not do it in inner loop */ - upsample->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; - } -} - - -/* - * Initialize for an upsampling pass. - */ - -METHODDEF(void) -start_pass_merged_upsample (j_decompress_ptr cinfo) -{ - my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; - - /* Mark the spare buffer empty */ - upsample->spare_full = FALSE; - /* Initialize total-height counter for detecting bottom of image */ - upsample->rows_to_go = cinfo->output_height; -} - - -/* - * Control routine to do upsampling (and color conversion). - * - * The control routine just handles the row buffering considerations. - */ - -METHODDEF(void) -merged_2v_upsample (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, - JDIMENSION in_row_groups_avail, - JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail) -/* 2:1 vertical sampling case: may need a spare row. */ -{ - my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; - JSAMPROW work_ptrs[2]; - JDIMENSION num_rows; /* number of rows returned to caller */ - - if (upsample->spare_full) { - /* If we have a spare row saved from a previous cycle, just return it. */ - jcopy_sample_rows(& upsample->spare_row, 0, output_buf + *out_row_ctr, 0, - 1, upsample->out_row_width); - num_rows = 1; - upsample->spare_full = FALSE; - } else { - /* Figure number of rows to return to caller. */ - num_rows = 2; - /* Not more than the distance to the end of the image. */ - if (num_rows > upsample->rows_to_go) - num_rows = upsample->rows_to_go; - /* And not more than what the client can accept: */ - out_rows_avail -= *out_row_ctr; - if (num_rows > out_rows_avail) - num_rows = out_rows_avail; - /* Create output pointer array for upsampler. */ - work_ptrs[0] = output_buf[*out_row_ctr]; - if (num_rows > 1) { - work_ptrs[1] = output_buf[*out_row_ctr + 1]; - } else { - work_ptrs[1] = upsample->spare_row; - upsample->spare_full = TRUE; - } - /* Now do the upsampling. */ - (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, work_ptrs); - } - - /* Adjust counts */ - *out_row_ctr += num_rows; - upsample->rows_to_go -= num_rows; - /* When the buffer is emptied, declare this input row group consumed */ - if (! upsample->spare_full) - (*in_row_group_ctr)++; -} - - -METHODDEF(void) -merged_1v_upsample (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, - JDIMENSION in_row_groups_avail, - JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail) -/* 1:1 vertical sampling case: much easier, never need a spare row. */ -{ - my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; - - /* Just do the upsampling. */ - (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, - output_buf + *out_row_ctr); - /* Adjust counts */ - (*out_row_ctr)++; - (*in_row_group_ctr)++; -} - - -/* - * These are the routines invoked by the control routines to do - * the actual upsampling/conversion. One row group is processed per call. - * - * Note: since we may be writing directly into application-supplied buffers, - * we have to be honest about the output width; we can't assume the buffer - * has been rounded up to an even width. - */ - - -/* - * Upsample and color convert for the case of 2:1 horizontal and 1:1 vertical. - */ - -METHODDEF(void) -h2v1_merged_upsample (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, - JSAMPARRAY output_buf) -{ - my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; - register int y, cred, cgreen, cblue; - int cb, cr; - register JSAMPROW outptr; - JSAMPROW inptr0, inptr1, inptr2; - JDIMENSION col; - /* copy these pointers into registers if possible */ - register JSAMPLE * range_limit = cinfo->sample_range_limit; - int * Crrtab = upsample->Cr_r_tab; - int * Cbbtab = upsample->Cb_b_tab; - INT32 * Crgtab = upsample->Cr_g_tab; - INT32 * Cbgtab = upsample->Cb_g_tab; - SHIFT_TEMPS - - inptr0 = input_buf[0][in_row_group_ctr]; - inptr1 = input_buf[1][in_row_group_ctr]; - inptr2 = input_buf[2][in_row_group_ctr]; - outptr = output_buf[0]; - /* Loop for each pair of output pixels */ - for (col = cinfo->output_width >> 1; col > 0; col--) { - /* Do the chroma part of the calculation */ - cb = GETJSAMPLE(*inptr1++); - cr = GETJSAMPLE(*inptr2++); - cred = Crrtab[cr]; - cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); - cblue = Cbbtab[cb]; - /* Fetch 2 Y values and emit 2 pixels */ - y = GETJSAMPLE(*inptr0++); - outptr[RGB_RED] = range_limit[y + cred]; - outptr[RGB_GREEN] = range_limit[y + cgreen]; - outptr[RGB_BLUE] = range_limit[y + cblue]; - outptr += RGB_PIXELSIZE; - y = GETJSAMPLE(*inptr0++); - outptr[RGB_RED] = range_limit[y + cred]; - outptr[RGB_GREEN] = range_limit[y + cgreen]; - outptr[RGB_BLUE] = range_limit[y + cblue]; - outptr += RGB_PIXELSIZE; - } - /* If image width is odd, do the last output column separately */ - if (cinfo->output_width & 1) { - cb = GETJSAMPLE(*inptr1); - cr = GETJSAMPLE(*inptr2); - cred = Crrtab[cr]; - cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); - cblue = Cbbtab[cb]; - y = GETJSAMPLE(*inptr0); - outptr[RGB_RED] = range_limit[y + cred]; - outptr[RGB_GREEN] = range_limit[y + cgreen]; - outptr[RGB_BLUE] = range_limit[y + cblue]; - } -} - - -/* - * Upsample and color convert for the case of 2:1 horizontal and 2:1 vertical. - */ - -METHODDEF(void) -h2v2_merged_upsample (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, - JSAMPARRAY output_buf) -{ - my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; - register int y, cred, cgreen, cblue; - int cb, cr; - register JSAMPROW outptr0, outptr1; - JSAMPROW inptr00, inptr01, inptr1, inptr2; - JDIMENSION col; - /* copy these pointers into registers if possible */ - register JSAMPLE * range_limit = cinfo->sample_range_limit; - int * Crrtab = upsample->Cr_r_tab; - int * Cbbtab = upsample->Cb_b_tab; - INT32 * Crgtab = upsample->Cr_g_tab; - INT32 * Cbgtab = upsample->Cb_g_tab; - SHIFT_TEMPS - - inptr00 = input_buf[0][in_row_group_ctr*2]; - inptr01 = input_buf[0][in_row_group_ctr*2 + 1]; - inptr1 = input_buf[1][in_row_group_ctr]; - inptr2 = input_buf[2][in_row_group_ctr]; - outptr0 = output_buf[0]; - outptr1 = output_buf[1]; - /* Loop for each group of output pixels */ - for (col = cinfo->output_width >> 1; col > 0; col--) { - /* Do the chroma part of the calculation */ - cb = GETJSAMPLE(*inptr1++); - cr = GETJSAMPLE(*inptr2++); - cred = Crrtab[cr]; - cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); - cblue = Cbbtab[cb]; - /* Fetch 4 Y values and emit 4 pixels */ - y = GETJSAMPLE(*inptr00++); - outptr0[RGB_RED] = range_limit[y + cred]; - outptr0[RGB_GREEN] = range_limit[y + cgreen]; - outptr0[RGB_BLUE] = range_limit[y + cblue]; - outptr0 += RGB_PIXELSIZE; - y = GETJSAMPLE(*inptr00++); - outptr0[RGB_RED] = range_limit[y + cred]; - outptr0[RGB_GREEN] = range_limit[y + cgreen]; - outptr0[RGB_BLUE] = range_limit[y + cblue]; - outptr0 += RGB_PIXELSIZE; - y = GETJSAMPLE(*inptr01++); - outptr1[RGB_RED] = range_limit[y + cred]; - outptr1[RGB_GREEN] = range_limit[y + cgreen]; - outptr1[RGB_BLUE] = range_limit[y + cblue]; - outptr1 += RGB_PIXELSIZE; - y = GETJSAMPLE(*inptr01++); - outptr1[RGB_RED] = range_limit[y + cred]; - outptr1[RGB_GREEN] = range_limit[y + cgreen]; - outptr1[RGB_BLUE] = range_limit[y + cblue]; - outptr1 += RGB_PIXELSIZE; - } - /* If image width is odd, do the last output column separately */ - if (cinfo->output_width & 1) { - cb = GETJSAMPLE(*inptr1); - cr = GETJSAMPLE(*inptr2); - cred = Crrtab[cr]; - cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); - cblue = Cbbtab[cb]; - y = GETJSAMPLE(*inptr00); - outptr0[RGB_RED] = range_limit[y + cred]; - outptr0[RGB_GREEN] = range_limit[y + cgreen]; - outptr0[RGB_BLUE] = range_limit[y + cblue]; - y = GETJSAMPLE(*inptr01); - outptr1[RGB_RED] = range_limit[y + cred]; - outptr1[RGB_GREEN] = range_limit[y + cgreen]; - outptr1[RGB_BLUE] = range_limit[y + cblue]; - } -} - - -/* - * Module initialization routine for merged upsampling/color conversion. - * - * NB: this is called under the conditions determined by use_merged_upsample() - * in jdmaster.c. That routine MUST correspond to the actual capabilities - * of this module; no safety checks are made here. - */ - -GLOBAL(void) -jinit_merged_upsampler (j_decompress_ptr cinfo) -{ - my_upsample_ptr upsample; - - upsample = (my_upsample_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_upsampler)); - cinfo->upsample = (struct jpeg_upsampler *) upsample; - upsample->pub.start_pass = start_pass_merged_upsample; - upsample->pub.need_context_rows = FALSE; - - upsample->out_row_width = cinfo->output_width * cinfo->out_color_components; - - if (cinfo->max_v_samp_factor == 2) { - upsample->pub.upsample = merged_2v_upsample; - upsample->upmethod = h2v2_merged_upsample; - /* Allocate a spare row buffer */ - upsample->spare_row = (JSAMPROW) - (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) (upsample->out_row_width * SIZEOF(JSAMPLE))); - } else { - upsample->pub.upsample = merged_1v_upsample; - upsample->upmethod = h2v1_merged_upsample; - /* No spare row needed */ - upsample->spare_row = NULL; - } - - build_ycc_rgb_table(cinfo); -} - -#endif /* UPSAMPLE_MERGING_SUPPORTED */ diff --git a/Build/source/libs/jpeg/jdphuff.c b/Build/source/libs/jpeg/jdphuff.c deleted file mode 100644 index 22678099451..00000000000 --- a/Build/source/libs/jpeg/jdphuff.c +++ /dev/null @@ -1,668 +0,0 @@ -/* - * jdphuff.c - * - * Copyright (C) 1995-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains Huffman entropy decoding routines for progressive JPEG. - * - * Much of the complexity here has to do with supporting input suspension. - * If the data source module demands suspension, we want to be able to back - * up to the start of the current MCU. To do this, we copy state variables - * into local working storage, and update them back to the permanent - * storage only upon successful completion of an MCU. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdhuff.h" /* Declarations shared with jdhuff.c */ - - -#ifdef D_PROGRESSIVE_SUPPORTED - -/* - * Expanded entropy decoder object for progressive Huffman decoding. - * - * The savable_state subrecord contains fields that change within an MCU, - * but must not be updated permanently until we complete the MCU. - */ - -typedef struct { - unsigned int EOBRUN; /* remaining EOBs in EOBRUN */ - int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ -} savable_state; - -/* This macro is to work around compilers with missing or broken - * structure assignment. You'll need to fix this code if you have - * such a compiler and you change MAX_COMPS_IN_SCAN. - */ - -#ifndef NO_STRUCT_ASSIGN -#define ASSIGN_STATE(dest,src) ((dest) = (src)) -#else -#if MAX_COMPS_IN_SCAN == 4 -#define ASSIGN_STATE(dest,src) \ - ((dest).EOBRUN = (src).EOBRUN, \ - (dest).last_dc_val[0] = (src).last_dc_val[0], \ - (dest).last_dc_val[1] = (src).last_dc_val[1], \ - (dest).last_dc_val[2] = (src).last_dc_val[2], \ - (dest).last_dc_val[3] = (src).last_dc_val[3]) -#endif -#endif - - -typedef struct { - struct jpeg_entropy_decoder pub; /* public fields */ - - /* These fields are loaded into local variables at start of each MCU. - * In case of suspension, we exit WITHOUT updating them. - */ - bitread_perm_state bitstate; /* Bit buffer at start of MCU */ - savable_state saved; /* Other state at start of MCU */ - - /* These fields are NOT loaded into local working state. */ - unsigned int restarts_to_go; /* MCUs left in this restart interval */ - - /* Pointers to derived tables (these workspaces have image lifespan) */ - d_derived_tbl * derived_tbls[NUM_HUFF_TBLS]; - - d_derived_tbl * ac_derived_tbl; /* active table during an AC scan */ -} phuff_entropy_decoder; - -typedef phuff_entropy_decoder * phuff_entropy_ptr; - -/* Forward declarations */ -METHODDEF(boolean) decode_mcu_DC_first JPP((j_decompress_ptr cinfo, - JBLOCKROW *MCU_data)); -METHODDEF(boolean) decode_mcu_AC_first JPP((j_decompress_ptr cinfo, - JBLOCKROW *MCU_data)); -METHODDEF(boolean) decode_mcu_DC_refine JPP((j_decompress_ptr cinfo, - JBLOCKROW *MCU_data)); -METHODDEF(boolean) decode_mcu_AC_refine JPP((j_decompress_ptr cinfo, - JBLOCKROW *MCU_data)); - - -/* - * Initialize for a Huffman-compressed scan. - */ - -METHODDEF(void) -start_pass_phuff_decoder (j_decompress_ptr cinfo) -{ - phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; - boolean is_DC_band, bad; - int ci, coefi, tbl; - int *coef_bit_ptr; - jpeg_component_info * compptr; - - is_DC_band = (cinfo->Ss == 0); - - /* Validate scan parameters */ - bad = FALSE; - if (is_DC_band) { - if (cinfo->Se != 0) - bad = TRUE; - } else { - /* need not check Ss/Se < 0 since they came from unsigned bytes */ - if (cinfo->Ss > cinfo->Se || cinfo->Se >= DCTSIZE2) - bad = TRUE; - /* AC scans may have only one component */ - if (cinfo->comps_in_scan != 1) - bad = TRUE; - } - if (cinfo->Ah != 0) { - /* Successive approximation refinement scan: must have Al = Ah-1. */ - if (cinfo->Al != cinfo->Ah-1) - bad = TRUE; - } - if (cinfo->Al > 13) /* need not check for < 0 */ - bad = TRUE; - /* Arguably the maximum Al value should be less than 13 for 8-bit precision, - * but the spec doesn't say so, and we try to be liberal about what we - * accept. Note: large Al values could result in out-of-range DC - * coefficients during early scans, leading to bizarre displays due to - * overflows in the IDCT math. But we won't crash. - */ - if (bad) - ERREXIT4(cinfo, JERR_BAD_PROGRESSION, - cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al); - /* Update progression status, and verify that scan order is legal. - * Note that inter-scan inconsistencies are treated as warnings - * not fatal errors ... not clear if this is right way to behave. - */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - int cindex = cinfo->cur_comp_info[ci]->component_index; - coef_bit_ptr = & cinfo->coef_bits[cindex][0]; - if (!is_DC_band && coef_bit_ptr[0] < 0) /* AC without prior DC scan */ - WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0); - for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) { - int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi]; - if (cinfo->Ah != expected) - WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi); - coef_bit_ptr[coefi] = cinfo->Al; - } - } - - /* Select MCU decoding routine */ - if (cinfo->Ah == 0) { - if (is_DC_band) - entropy->pub.decode_mcu = decode_mcu_DC_first; - else - entropy->pub.decode_mcu = decode_mcu_AC_first; - } else { - if (is_DC_band) - entropy->pub.decode_mcu = decode_mcu_DC_refine; - else - entropy->pub.decode_mcu = decode_mcu_AC_refine; - } - - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - /* Make sure requested tables are present, and compute derived tables. - * We may build same derived table more than once, but it's not expensive. - */ - if (is_DC_band) { - if (cinfo->Ah == 0) { /* DC refinement needs no table */ - tbl = compptr->dc_tbl_no; - jpeg_make_d_derived_tbl(cinfo, TRUE, tbl, - & entropy->derived_tbls[tbl]); - } - } else { - tbl = compptr->ac_tbl_no; - jpeg_make_d_derived_tbl(cinfo, FALSE, tbl, - & entropy->derived_tbls[tbl]); - /* remember the single active table */ - entropy->ac_derived_tbl = entropy->derived_tbls[tbl]; - } - /* Initialize DC predictions to 0 */ - entropy->saved.last_dc_val[ci] = 0; - } - - /* Initialize bitread state variables */ - entropy->bitstate.bits_left = 0; - entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */ - entropy->pub.insufficient_data = FALSE; - - /* Initialize private state variables */ - entropy->saved.EOBRUN = 0; - - /* Initialize restart counter */ - entropy->restarts_to_go = cinfo->restart_interval; -} - - -/* - * Figure F.12: extend sign bit. - * On some machines, a shift and add will be faster than a table lookup. - */ - -#ifdef AVOID_TABLES - -#define HUFF_EXTEND(x,s) ((x) < (1<<((s)-1)) ? (x) + (((-1)<<(s)) + 1) : (x)) - -#else - -#define HUFF_EXTEND(x,s) ((x) < extend_test[s] ? (x) + extend_offset[s] : (x)) - -static const int extend_test[16] = /* entry n is 2**(n-1) */ - { 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, - 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 }; - -static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */ - { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, - ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, - ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, - ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; - -#endif /* AVOID_TABLES */ - - -/* - * Check for a restart marker & resynchronize decoder. - * Returns FALSE if must suspend. - */ - -LOCAL(boolean) -process_restart (j_decompress_ptr cinfo) -{ - phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; - int ci; - - /* Throw away any unused bits remaining in bit buffer; */ - /* include any full bytes in next_marker's count of discarded bytes */ - cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8; - entropy->bitstate.bits_left = 0; - - /* Advance past the RSTn marker */ - if (! (*cinfo->marker->read_restart_marker) (cinfo)) - return FALSE; - - /* Re-initialize DC predictions to 0 */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) - entropy->saved.last_dc_val[ci] = 0; - /* Re-init EOB run count, too */ - entropy->saved.EOBRUN = 0; - - /* Reset restart counter */ - entropy->restarts_to_go = cinfo->restart_interval; - - /* Reset out-of-data flag, unless read_restart_marker left us smack up - * against a marker. In that case we will end up treating the next data - * segment as empty, and we can avoid producing bogus output pixels by - * leaving the flag set. - */ - if (cinfo->unread_marker == 0) - entropy->pub.insufficient_data = FALSE; - - return TRUE; -} - - -/* - * Huffman MCU decoding. - * Each of these routines decodes and returns one MCU's worth of - * Huffman-compressed coefficients. - * The coefficients are reordered from zigzag order into natural array order, - * but are not dequantized. - * - * The i'th block of the MCU is stored into the block pointed to by - * MCU_data[i]. WE ASSUME THIS AREA IS INITIALLY ZEROED BY THE CALLER. - * - * We return FALSE if data source requested suspension. In that case no - * changes have been made to permanent state. (Exception: some output - * coefficients may already have been assigned. This is harmless for - * spectral selection, since we'll just re-assign them on the next call. - * Successive approximation AC refinement has to be more careful, however.) - */ - -/* - * MCU decoding for DC initial scan (either spectral selection, - * or first pass of successive approximation). - */ - -METHODDEF(boolean) -decode_mcu_DC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) -{ - phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; - int Al = cinfo->Al; - register int s, r; - int blkn, ci; - JBLOCKROW block; - BITREAD_STATE_VARS; - savable_state state; - d_derived_tbl * tbl; - jpeg_component_info * compptr; - - /* Process restart marker if needed; may have to suspend */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) - if (! process_restart(cinfo)) - return FALSE; - } - - /* If we've run out of data, just leave the MCU set to zeroes. - * This way, we return uniform gray for the remainder of the segment. - */ - if (! entropy->pub.insufficient_data) { - - /* Load up working state */ - BITREAD_LOAD_STATE(cinfo,entropy->bitstate); - ASSIGN_STATE(state, entropy->saved); - - /* Outer loop handles each block in the MCU */ - - for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { - block = MCU_data[blkn]; - ci = cinfo->MCU_membership[blkn]; - compptr = cinfo->cur_comp_info[ci]; - tbl = entropy->derived_tbls[compptr->dc_tbl_no]; - - /* Decode a single block's worth of coefficients */ - - /* Section F.2.2.1: decode the DC coefficient difference */ - HUFF_DECODE(s, br_state, tbl, return FALSE, label1); - if (s) { - CHECK_BIT_BUFFER(br_state, s, return FALSE); - r = GET_BITS(s); - s = HUFF_EXTEND(r, s); - } - - /* Convert DC difference to actual value, update last_dc_val */ - s += state.last_dc_val[ci]; - state.last_dc_val[ci] = s; - /* Scale and output the coefficient (assumes jpeg_natural_order[0]=0) */ - (*block)[0] = (JCOEF) (s << Al); - } - - /* Completed MCU, so update state */ - BITREAD_SAVE_STATE(cinfo,entropy->bitstate); - ASSIGN_STATE(entropy->saved, state); - } - - /* Account for restart interval (no-op if not using restarts) */ - entropy->restarts_to_go--; - - return TRUE; -} - - -/* - * MCU decoding for AC initial scan (either spectral selection, - * or first pass of successive approximation). - */ - -METHODDEF(boolean) -decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) -{ - phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; - int Se = cinfo->Se; - int Al = cinfo->Al; - register int s, k, r; - unsigned int EOBRUN; - JBLOCKROW block; - BITREAD_STATE_VARS; - d_derived_tbl * tbl; - - /* Process restart marker if needed; may have to suspend */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) - if (! process_restart(cinfo)) - return FALSE; - } - - /* If we've run out of data, just leave the MCU set to zeroes. - * This way, we return uniform gray for the remainder of the segment. - */ - if (! entropy->pub.insufficient_data) { - - /* Load up working state. - * We can avoid loading/saving bitread state if in an EOB run. - */ - EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */ - - /* There is always only one block per MCU */ - - if (EOBRUN > 0) /* if it's a band of zeroes... */ - EOBRUN--; /* ...process it now (we do nothing) */ - else { - BITREAD_LOAD_STATE(cinfo,entropy->bitstate); - block = MCU_data[0]; - tbl = entropy->ac_derived_tbl; - - for (k = cinfo->Ss; k <= Se; k++) { - HUFF_DECODE(s, br_state, tbl, return FALSE, label2); - r = s >> 4; - s &= 15; - if (s) { - k += r; - CHECK_BIT_BUFFER(br_state, s, return FALSE); - r = GET_BITS(s); - s = HUFF_EXTEND(r, s); - /* Scale and output coefficient in natural (dezigzagged) order */ - (*block)[jpeg_natural_order[k]] = (JCOEF) (s << Al); - } else { - if (r == 15) { /* ZRL */ - k += 15; /* skip 15 zeroes in band */ - } else { /* EOBr, run length is 2^r + appended bits */ - EOBRUN = 1 << r; - if (r) { /* EOBr, r > 0 */ - CHECK_BIT_BUFFER(br_state, r, return FALSE); - r = GET_BITS(r); - EOBRUN += r; - } - EOBRUN--; /* this band is processed at this moment */ - break; /* force end-of-band */ - } - } - } - - BITREAD_SAVE_STATE(cinfo,entropy->bitstate); - } - - /* Completed MCU, so update state */ - entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ - } - - /* Account for restart interval (no-op if not using restarts) */ - entropy->restarts_to_go--; - - return TRUE; -} - - -/* - * MCU decoding for DC successive approximation refinement scan. - * Note: we assume such scans can be multi-component, although the spec - * is not very clear on the point. - */ - -METHODDEF(boolean) -decode_mcu_DC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) -{ - phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; - int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ - int blkn; - JBLOCKROW block; - BITREAD_STATE_VARS; - - /* Process restart marker if needed; may have to suspend */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) - if (! process_restart(cinfo)) - return FALSE; - } - - /* Not worth the cycles to check insufficient_data here, - * since we will not change the data anyway if we read zeroes. - */ - - /* Load up working state */ - BITREAD_LOAD_STATE(cinfo,entropy->bitstate); - - /* Outer loop handles each block in the MCU */ - - for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { - block = MCU_data[blkn]; - - /* Encoded data is simply the next bit of the two's-complement DC value */ - CHECK_BIT_BUFFER(br_state, 1, return FALSE); - if (GET_BITS(1)) - (*block)[0] |= p1; - /* Note: since we use |=, repeating the assignment later is safe */ - } - - /* Completed MCU, so update state */ - BITREAD_SAVE_STATE(cinfo,entropy->bitstate); - - /* Account for restart interval (no-op if not using restarts) */ - entropy->restarts_to_go--; - - return TRUE; -} - - -/* - * MCU decoding for AC successive approximation refinement scan. - */ - -METHODDEF(boolean) -decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) -{ - phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy; - int Se = cinfo->Se; - int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ - int m1 = (-1) << cinfo->Al; /* -1 in the bit position being coded */ - register int s, k, r; - unsigned int EOBRUN; - JBLOCKROW block; - JCOEFPTR thiscoef; - BITREAD_STATE_VARS; - d_derived_tbl * tbl; - int num_newnz; - int newnz_pos[DCTSIZE2]; - - /* Process restart marker if needed; may have to suspend */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) - if (! process_restart(cinfo)) - return FALSE; - } - - /* If we've run out of data, don't modify the MCU. - */ - if (! entropy->pub.insufficient_data) { - - /* Load up working state */ - BITREAD_LOAD_STATE(cinfo,entropy->bitstate); - EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */ - - /* There is always only one block per MCU */ - block = MCU_data[0]; - tbl = entropy->ac_derived_tbl; - - /* If we are forced to suspend, we must undo the assignments to any newly - * nonzero coefficients in the block, because otherwise we'd get confused - * next time about which coefficients were already nonzero. - * But we need not undo addition of bits to already-nonzero coefficients; - * instead, we can test the current bit to see if we already did it. - */ - num_newnz = 0; - - /* initialize coefficient loop counter to start of band */ - k = cinfo->Ss; - - if (EOBRUN == 0) { - for (; k <= Se; k++) { - HUFF_DECODE(s, br_state, tbl, goto undoit, label3); - r = s >> 4; - s &= 15; - if (s) { - if (s != 1) /* size of new coef should always be 1 */ - WARNMS(cinfo, JWRN_HUFF_BAD_CODE); - CHECK_BIT_BUFFER(br_state, 1, goto undoit); - if (GET_BITS(1)) - s = p1; /* newly nonzero coef is positive */ - else - s = m1; /* newly nonzero coef is negative */ - } else { - if (r != 15) { - EOBRUN = 1 << r; /* EOBr, run length is 2^r + appended bits */ - if (r) { - CHECK_BIT_BUFFER(br_state, r, goto undoit); - r = GET_BITS(r); - EOBRUN += r; - } - break; /* rest of block is handled by EOB logic */ - } - /* note s = 0 for processing ZRL */ - } - /* Advance over already-nonzero coefs and r still-zero coefs, - * appending correction bits to the nonzeroes. A correction bit is 1 - * if the absolute value of the coefficient must be increased. - */ - do { - thiscoef = *block + jpeg_natural_order[k]; - if (*thiscoef != 0) { - CHECK_BIT_BUFFER(br_state, 1, goto undoit); - if (GET_BITS(1)) { - if ((*thiscoef & p1) == 0) { /* do nothing if already set it */ - if (*thiscoef >= 0) - *thiscoef += p1; - else - *thiscoef += m1; - } - } - } else { - if (--r < 0) - break; /* reached target zero coefficient */ - } - k++; - } while (k <= Se); - if (s) { - int pos = jpeg_natural_order[k]; - /* Output newly nonzero coefficient */ - (*block)[pos] = (JCOEF) s; - /* Remember its position in case we have to suspend */ - newnz_pos[num_newnz++] = pos; - } - } - } - - if (EOBRUN > 0) { - /* Scan any remaining coefficient positions after the end-of-band - * (the last newly nonzero coefficient, if any). Append a correction - * bit to each already-nonzero coefficient. A correction bit is 1 - * if the absolute value of the coefficient must be increased. - */ - for (; k <= Se; k++) { - thiscoef = *block + jpeg_natural_order[k]; - if (*thiscoef != 0) { - CHECK_BIT_BUFFER(br_state, 1, goto undoit); - if (GET_BITS(1)) { - if ((*thiscoef & p1) == 0) { /* do nothing if already changed it */ - if (*thiscoef >= 0) - *thiscoef += p1; - else - *thiscoef += m1; - } - } - } - } - /* Count one block completed in EOB run */ - EOBRUN--; - } - - /* Completed MCU, so update state */ - BITREAD_SAVE_STATE(cinfo,entropy->bitstate); - entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ - } - - /* Account for restart interval (no-op if not using restarts) */ - entropy->restarts_to_go--; - - return TRUE; - -undoit: - /* Re-zero any output coefficients that we made newly nonzero */ - while (num_newnz > 0) - (*block)[newnz_pos[--num_newnz]] = 0; - - return FALSE; -} - - -/* - * Module initialization routine for progressive Huffman entropy decoding. - */ - -GLOBAL(void) -jinit_phuff_decoder (j_decompress_ptr cinfo) -{ - phuff_entropy_ptr entropy; - int *coef_bit_ptr; - int ci, i; - - entropy = (phuff_entropy_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(phuff_entropy_decoder)); - cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; - entropy->pub.start_pass = start_pass_phuff_decoder; - - /* Mark derived tables unallocated */ - for (i = 0; i < NUM_HUFF_TBLS; i++) { - entropy->derived_tbls[i] = NULL; - } - - /* Create progression status table */ - cinfo->coef_bits = (int (*)[DCTSIZE2]) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - cinfo->num_components*DCTSIZE2*SIZEOF(int)); - coef_bit_ptr = & cinfo->coef_bits[0][0]; - for (ci = 0; ci < cinfo->num_components; ci++) - for (i = 0; i < DCTSIZE2; i++) - *coef_bit_ptr++ = -1; -} - -#endif /* D_PROGRESSIVE_SUPPORTED */ diff --git a/Build/source/libs/jpeg/jdpostct.c b/Build/source/libs/jpeg/jdpostct.c deleted file mode 100644 index 571563d728e..00000000000 --- a/Build/source/libs/jpeg/jdpostct.c +++ /dev/null @@ -1,290 +0,0 @@ -/* - * jdpostct.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the decompression postprocessing controller. - * This controller manages the upsampling, color conversion, and color - * quantization/reduction steps; specifically, it controls the buffering - * between upsample/color conversion and color quantization/reduction. - * - * If no color quantization/reduction is required, then this module has no - * work to do, and it just hands off to the upsample/color conversion code. - * An integrated upsample/convert/quantize process would replace this module - * entirely. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Private buffer controller object */ - -typedef struct { - struct jpeg_d_post_controller pub; /* public fields */ - - /* Color quantization source buffer: this holds output data from - * the upsample/color conversion step to be passed to the quantizer. - * For two-pass color quantization, we need a full-image buffer; - * for one-pass operation, a strip buffer is sufficient. - */ - jvirt_sarray_ptr whole_image; /* virtual array, or NULL if one-pass */ - JSAMPARRAY buffer; /* strip buffer, or current strip of virtual */ - JDIMENSION strip_height; /* buffer size in rows */ - /* for two-pass mode only: */ - JDIMENSION starting_row; /* row # of first row in current strip */ - JDIMENSION next_row; /* index of next row to fill/empty in strip */ -} my_post_controller; - -typedef my_post_controller * my_post_ptr; - - -/* Forward declarations */ -METHODDEF(void) post_process_1pass - JPP((j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, - JDIMENSION in_row_groups_avail, - JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail)); -#ifdef QUANT_2PASS_SUPPORTED -METHODDEF(void) post_process_prepass - JPP((j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, - JDIMENSION in_row_groups_avail, - JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail)); -METHODDEF(void) post_process_2pass - JPP((j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, - JDIMENSION in_row_groups_avail, - JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail)); -#endif - - -/* - * Initialize for a processing pass. - */ - -METHODDEF(void) -start_pass_dpost (j_decompress_ptr cinfo, J_BUF_MODE pass_mode) -{ - my_post_ptr post = (my_post_ptr) cinfo->post; - - switch (pass_mode) { - case JBUF_PASS_THRU: - if (cinfo->quantize_colors) { - /* Single-pass processing with color quantization. */ - post->pub.post_process_data = post_process_1pass; - /* We could be doing buffered-image output before starting a 2-pass - * color quantization; in that case, jinit_d_post_controller did not - * allocate a strip buffer. Use the virtual-array buffer as workspace. - */ - if (post->buffer == NULL) { - post->buffer = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, post->whole_image, - (JDIMENSION) 0, post->strip_height, TRUE); - } - } else { - /* For single-pass processing without color quantization, - * I have no work to do; just call the upsampler directly. - */ - post->pub.post_process_data = cinfo->upsample->upsample; - } - break; -#ifdef QUANT_2PASS_SUPPORTED - case JBUF_SAVE_AND_PASS: - /* First pass of 2-pass quantization */ - if (post->whole_image == NULL) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - post->pub.post_process_data = post_process_prepass; - break; - case JBUF_CRANK_DEST: - /* Second pass of 2-pass quantization */ - if (post->whole_image == NULL) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - post->pub.post_process_data = post_process_2pass; - break; -#endif /* QUANT_2PASS_SUPPORTED */ - default: - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - break; - } - post->starting_row = post->next_row = 0; -} - - -/* - * Process some data in the one-pass (strip buffer) case. - * This is used for color precision reduction as well as one-pass quantization. - */ - -METHODDEF(void) -post_process_1pass (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, - JDIMENSION in_row_groups_avail, - JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail) -{ - my_post_ptr post = (my_post_ptr) cinfo->post; - JDIMENSION num_rows, max_rows; - - /* Fill the buffer, but not more than what we can dump out in one go. */ - /* Note we rely on the upsampler to detect bottom of image. */ - max_rows = out_rows_avail - *out_row_ctr; - if (max_rows > post->strip_height) - max_rows = post->strip_height; - num_rows = 0; - (*cinfo->upsample->upsample) (cinfo, - input_buf, in_row_group_ctr, in_row_groups_avail, - post->buffer, &num_rows, max_rows); - /* Quantize and emit data. */ - (*cinfo->cquantize->color_quantize) (cinfo, - post->buffer, output_buf + *out_row_ctr, (int) num_rows); - *out_row_ctr += num_rows; -} - - -#ifdef QUANT_2PASS_SUPPORTED - -/* - * Process some data in the first pass of 2-pass quantization. - */ - -METHODDEF(void) -post_process_prepass (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, - JDIMENSION in_row_groups_avail, - JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail) -{ - my_post_ptr post = (my_post_ptr) cinfo->post; - JDIMENSION old_next_row, num_rows; - - /* Reposition virtual buffer if at start of strip. */ - if (post->next_row == 0) { - post->buffer = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, post->whole_image, - post->starting_row, post->strip_height, TRUE); - } - - /* Upsample some data (up to a strip height's worth). */ - old_next_row = post->next_row; - (*cinfo->upsample->upsample) (cinfo, - input_buf, in_row_group_ctr, in_row_groups_avail, - post->buffer, &post->next_row, post->strip_height); - - /* Allow quantizer to scan new data. No data is emitted, */ - /* but we advance out_row_ctr so outer loop can tell when we're done. */ - if (post->next_row > old_next_row) { - num_rows = post->next_row - old_next_row; - (*cinfo->cquantize->color_quantize) (cinfo, post->buffer + old_next_row, - (JSAMPARRAY) NULL, (int) num_rows); - *out_row_ctr += num_rows; - } - - /* Advance if we filled the strip. */ - if (post->next_row >= post->strip_height) { - post->starting_row += post->strip_height; - post->next_row = 0; - } -} - - -/* - * Process some data in the second pass of 2-pass quantization. - */ - -METHODDEF(void) -post_process_2pass (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, - JDIMENSION in_row_groups_avail, - JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail) -{ - my_post_ptr post = (my_post_ptr) cinfo->post; - JDIMENSION num_rows, max_rows; - - /* Reposition virtual buffer if at start of strip. */ - if (post->next_row == 0) { - post->buffer = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, post->whole_image, - post->starting_row, post->strip_height, FALSE); - } - - /* Determine number of rows to emit. */ - num_rows = post->strip_height - post->next_row; /* available in strip */ - max_rows = out_rows_avail - *out_row_ctr; /* available in output area */ - if (num_rows > max_rows) - num_rows = max_rows; - /* We have to check bottom of image here, can't depend on upsampler. */ - max_rows = cinfo->output_height - post->starting_row; - if (num_rows > max_rows) - num_rows = max_rows; - - /* Quantize and emit data. */ - (*cinfo->cquantize->color_quantize) (cinfo, - post->buffer + post->next_row, output_buf + *out_row_ctr, - (int) num_rows); - *out_row_ctr += num_rows; - - /* Advance if we filled the strip. */ - post->next_row += num_rows; - if (post->next_row >= post->strip_height) { - post->starting_row += post->strip_height; - post->next_row = 0; - } -} - -#endif /* QUANT_2PASS_SUPPORTED */ - - -/* - * Initialize postprocessing controller. - */ - -GLOBAL(void) -jinit_d_post_controller (j_decompress_ptr cinfo, boolean need_full_buffer) -{ - my_post_ptr post; - - post = (my_post_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_post_controller)); - cinfo->post = (struct jpeg_d_post_controller *) post; - post->pub.start_pass = start_pass_dpost; - post->whole_image = NULL; /* flag for no virtual arrays */ - post->buffer = NULL; /* flag for no strip buffer */ - - /* Create the quantization buffer, if needed */ - if (cinfo->quantize_colors) { - /* The buffer strip height is max_v_samp_factor, which is typically - * an efficient number of rows for upsampling to return. - * (In the presence of output rescaling, we might want to be smarter?) - */ - post->strip_height = (JDIMENSION) cinfo->max_v_samp_factor; - if (need_full_buffer) { - /* Two-pass color quantization: need full-image storage. */ - /* We round up the number of rows to a multiple of the strip height. */ -#ifdef QUANT_2PASS_SUPPORTED - post->whole_image = (*cinfo->mem->request_virt_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, - cinfo->output_width * cinfo->out_color_components, - (JDIMENSION) jround_up((long) cinfo->output_height, - (long) post->strip_height), - post->strip_height); -#else - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); -#endif /* QUANT_2PASS_SUPPORTED */ - } else { - /* One-pass color quantization: just make a strip buffer. */ - post->buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - cinfo->output_width * cinfo->out_color_components, - post->strip_height); - } - } -} diff --git a/Build/source/libs/jpeg/jdsample.c b/Build/source/libs/jpeg/jdsample.c deleted file mode 100644 index 80ffefb2a1c..00000000000 --- a/Build/source/libs/jpeg/jdsample.c +++ /dev/null @@ -1,478 +0,0 @@ -/* - * jdsample.c - * - * Copyright (C) 1991-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains upsampling routines. - * - * Upsampling input data is counted in "row groups". A row group - * is defined to be (v_samp_factor * DCT_scaled_size / min_DCT_scaled_size) - * sample rows of each component. Upsampling will normally produce - * max_v_samp_factor pixel rows from each row group (but this could vary - * if the upsampler is applying a scale factor of its own). - * - * An excellent reference for image resampling is - * Digital Image Warping, George Wolberg, 1990. - * Pub. by IEEE Computer Society Press, Los Alamitos, CA. ISBN 0-8186-8944-7. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Pointer to routine to upsample a single component */ -typedef JMETHOD(void, upsample1_ptr, - (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)); - -/* Private subobject */ - -typedef struct { - struct jpeg_upsampler pub; /* public fields */ - - /* Color conversion buffer. When using separate upsampling and color - * conversion steps, this buffer holds one upsampled row group until it - * has been color converted and output. - * Note: we do not allocate any storage for component(s) which are full-size, - * ie do not need rescaling. The corresponding entry of color_buf[] is - * simply set to point to the input data array, thereby avoiding copying. - */ - JSAMPARRAY color_buf[MAX_COMPONENTS]; - - /* Per-component upsampling method pointers */ - upsample1_ptr methods[MAX_COMPONENTS]; - - int next_row_out; /* counts rows emitted from color_buf */ - JDIMENSION rows_to_go; /* counts rows remaining in image */ - - /* Height of an input row group for each component. */ - int rowgroup_height[MAX_COMPONENTS]; - - /* These arrays save pixel expansion factors so that int_expand need not - * recompute them each time. They are unused for other upsampling methods. - */ - UINT8 h_expand[MAX_COMPONENTS]; - UINT8 v_expand[MAX_COMPONENTS]; -} my_upsampler; - -typedef my_upsampler * my_upsample_ptr; - - -/* - * Initialize for an upsampling pass. - */ - -METHODDEF(void) -start_pass_upsample (j_decompress_ptr cinfo) -{ - my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; - - /* Mark the conversion buffer empty */ - upsample->next_row_out = cinfo->max_v_samp_factor; - /* Initialize total-height counter for detecting bottom of image */ - upsample->rows_to_go = cinfo->output_height; -} - - -/* - * Control routine to do upsampling (and color conversion). - * - * In this version we upsample each component independently. - * We upsample one row group into the conversion buffer, then apply - * color conversion a row at a time. - */ - -METHODDEF(void) -sep_upsample (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, - JDIMENSION in_row_groups_avail, - JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail) -{ - my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; - int ci; - jpeg_component_info * compptr; - JDIMENSION num_rows; - - /* Fill the conversion buffer, if it's empty */ - if (upsample->next_row_out >= cinfo->max_v_samp_factor) { - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* Invoke per-component upsample method. Notice we pass a POINTER - * to color_buf[ci], so that fullsize_upsample can change it. - */ - (*upsample->methods[ci]) (cinfo, compptr, - input_buf[ci] + (*in_row_group_ctr * upsample->rowgroup_height[ci]), - upsample->color_buf + ci); - } - upsample->next_row_out = 0; - } - - /* Color-convert and emit rows */ - - /* How many we have in the buffer: */ - num_rows = (JDIMENSION) (cinfo->max_v_samp_factor - upsample->next_row_out); - /* Not more than the distance to the end of the image. Need this test - * in case the image height is not a multiple of max_v_samp_factor: - */ - if (num_rows > upsample->rows_to_go) - num_rows = upsample->rows_to_go; - /* And not more than what the client can accept: */ - out_rows_avail -= *out_row_ctr; - if (num_rows > out_rows_avail) - num_rows = out_rows_avail; - - (*cinfo->cconvert->color_convert) (cinfo, upsample->color_buf, - (JDIMENSION) upsample->next_row_out, - output_buf + *out_row_ctr, - (int) num_rows); - - /* Adjust counts */ - *out_row_ctr += num_rows; - upsample->rows_to_go -= num_rows; - upsample->next_row_out += num_rows; - /* When the buffer is emptied, declare this input row group consumed */ - if (upsample->next_row_out >= cinfo->max_v_samp_factor) - (*in_row_group_ctr)++; -} - - -/* - * These are the routines invoked by sep_upsample to upsample pixel values - * of a single component. One row group is processed per call. - */ - - -/* - * For full-size components, we just make color_buf[ci] point at the - * input buffer, and thus avoid copying any data. Note that this is - * safe only because sep_upsample doesn't declare the input row group - * "consumed" until we are done color converting and emitting it. - */ - -METHODDEF(void) -fullsize_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) -{ - *output_data_ptr = input_data; -} - - -/* - * This is a no-op version used for "uninteresting" components. - * These components will not be referenced by color conversion. - */ - -METHODDEF(void) -noop_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) -{ - *output_data_ptr = NULL; /* safety check */ -} - - -/* - * This version handles any integral sampling ratios. - * This is not used for typical JPEG files, so it need not be fast. - * Nor, for that matter, is it particularly accurate: the algorithm is - * simple replication of the input pixel onto the corresponding output - * pixels. The hi-falutin sampling literature refers to this as a - * "box filter". A box filter tends to introduce visible artifacts, - * so if you are actually going to use 3:1 or 4:1 sampling ratios - * you would be well advised to improve this code. - */ - -METHODDEF(void) -int_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) -{ - my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; - JSAMPARRAY output_data = *output_data_ptr; - register JSAMPROW inptr, outptr; - register JSAMPLE invalue; - register int h; - JSAMPROW outend; - int h_expand, v_expand; - int inrow, outrow; - - h_expand = upsample->h_expand[compptr->component_index]; - v_expand = upsample->v_expand[compptr->component_index]; - - inrow = outrow = 0; - while (outrow < cinfo->max_v_samp_factor) { - /* Generate one output row with proper horizontal expansion */ - inptr = input_data[inrow]; - outptr = output_data[outrow]; - outend = outptr + cinfo->output_width; - while (outptr < outend) { - invalue = *inptr++; /* don't need GETJSAMPLE() here */ - for (h = h_expand; h > 0; h--) { - *outptr++ = invalue; - } - } - /* Generate any additional output rows by duplicating the first one */ - if (v_expand > 1) { - jcopy_sample_rows(output_data, outrow, output_data, outrow+1, - v_expand-1, cinfo->output_width); - } - inrow++; - outrow += v_expand; - } -} - - -/* - * Fast processing for the common case of 2:1 horizontal and 1:1 vertical. - * It's still a box filter. - */ - -METHODDEF(void) -h2v1_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) -{ - JSAMPARRAY output_data = *output_data_ptr; - register JSAMPROW inptr, outptr; - register JSAMPLE invalue; - JSAMPROW outend; - int inrow; - - for (inrow = 0; inrow < cinfo->max_v_samp_factor; inrow++) { - inptr = input_data[inrow]; - outptr = output_data[inrow]; - outend = outptr + cinfo->output_width; - while (outptr < outend) { - invalue = *inptr++; /* don't need GETJSAMPLE() here */ - *outptr++ = invalue; - *outptr++ = invalue; - } - } -} - - -/* - * Fast processing for the common case of 2:1 horizontal and 2:1 vertical. - * It's still a box filter. - */ - -METHODDEF(void) -h2v2_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) -{ - JSAMPARRAY output_data = *output_data_ptr; - register JSAMPROW inptr, outptr; - register JSAMPLE invalue; - JSAMPROW outend; - int inrow, outrow; - - inrow = outrow = 0; - while (outrow < cinfo->max_v_samp_factor) { - inptr = input_data[inrow]; - outptr = output_data[outrow]; - outend = outptr + cinfo->output_width; - while (outptr < outend) { - invalue = *inptr++; /* don't need GETJSAMPLE() here */ - *outptr++ = invalue; - *outptr++ = invalue; - } - jcopy_sample_rows(output_data, outrow, output_data, outrow+1, - 1, cinfo->output_width); - inrow++; - outrow += 2; - } -} - - -/* - * Fancy processing for the common case of 2:1 horizontal and 1:1 vertical. - * - * The upsampling algorithm is linear interpolation between pixel centers, - * also known as a "triangle filter". This is a good compromise between - * speed and visual quality. The centers of the output pixels are 1/4 and 3/4 - * of the way between input pixel centers. - * - * A note about the "bias" calculations: when rounding fractional values to - * integer, we do not want to always round 0.5 up to the next integer. - * If we did that, we'd introduce a noticeable bias towards larger values. - * Instead, this code is arranged so that 0.5 will be rounded up or down at - * alternate pixel locations (a simple ordered dither pattern). - */ - -METHODDEF(void) -h2v1_fancy_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) -{ - JSAMPARRAY output_data = *output_data_ptr; - register JSAMPROW inptr, outptr; - register int invalue; - register JDIMENSION colctr; - int inrow; - - for (inrow = 0; inrow < cinfo->max_v_samp_factor; inrow++) { - inptr = input_data[inrow]; - outptr = output_data[inrow]; - /* Special case for first column */ - invalue = GETJSAMPLE(*inptr++); - *outptr++ = (JSAMPLE) invalue; - *outptr++ = (JSAMPLE) ((invalue * 3 + GETJSAMPLE(*inptr) + 2) >> 2); - - for (colctr = compptr->downsampled_width - 2; colctr > 0; colctr--) { - /* General case: 3/4 * nearer pixel + 1/4 * further pixel */ - invalue = GETJSAMPLE(*inptr++) * 3; - *outptr++ = (JSAMPLE) ((invalue + GETJSAMPLE(inptr[-2]) + 1) >> 2); - *outptr++ = (JSAMPLE) ((invalue + GETJSAMPLE(*inptr) + 2) >> 2); - } - - /* Special case for last column */ - invalue = GETJSAMPLE(*inptr); - *outptr++ = (JSAMPLE) ((invalue * 3 + GETJSAMPLE(inptr[-1]) + 1) >> 2); - *outptr++ = (JSAMPLE) invalue; - } -} - - -/* - * Fancy processing for the common case of 2:1 horizontal and 2:1 vertical. - * Again a triangle filter; see comments for h2v1 case, above. - * - * It is OK for us to reference the adjacent input rows because we demanded - * context from the main buffer controller (see initialization code). - */ - -METHODDEF(void) -h2v2_fancy_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) -{ - JSAMPARRAY output_data = *output_data_ptr; - register JSAMPROW inptr0, inptr1, outptr; -#if BITS_IN_JSAMPLE == 8 - register int thiscolsum, lastcolsum, nextcolsum; -#else - register INT32 thiscolsum, lastcolsum, nextcolsum; -#endif - register JDIMENSION colctr; - int inrow, outrow, v; - - inrow = outrow = 0; - while (outrow < cinfo->max_v_samp_factor) { - for (v = 0; v < 2; v++) { - /* inptr0 points to nearest input row, inptr1 points to next nearest */ - inptr0 = input_data[inrow]; - if (v == 0) /* next nearest is row above */ - inptr1 = input_data[inrow-1]; - else /* next nearest is row below */ - inptr1 = input_data[inrow+1]; - outptr = output_data[outrow++]; - - /* Special case for first column */ - thiscolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++); - nextcolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++); - *outptr++ = (JSAMPLE) ((thiscolsum * 4 + 8) >> 4); - *outptr++ = (JSAMPLE) ((thiscolsum * 3 + nextcolsum + 7) >> 4); - lastcolsum = thiscolsum; thiscolsum = nextcolsum; - - for (colctr = compptr->downsampled_width - 2; colctr > 0; colctr--) { - /* General case: 3/4 * nearer pixel + 1/4 * further pixel in each */ - /* dimension, thus 9/16, 3/16, 3/16, 1/16 overall */ - nextcolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++); - *outptr++ = (JSAMPLE) ((thiscolsum * 3 + lastcolsum + 8) >> 4); - *outptr++ = (JSAMPLE) ((thiscolsum * 3 + nextcolsum + 7) >> 4); - lastcolsum = thiscolsum; thiscolsum = nextcolsum; - } - - /* Special case for last column */ - *outptr++ = (JSAMPLE) ((thiscolsum * 3 + lastcolsum + 8) >> 4); - *outptr++ = (JSAMPLE) ((thiscolsum * 4 + 7) >> 4); - } - inrow++; - } -} - - -/* - * Module initialization routine for upsampling. - */ - -GLOBAL(void) -jinit_upsampler (j_decompress_ptr cinfo) -{ - my_upsample_ptr upsample; - int ci; - jpeg_component_info * compptr; - boolean need_buffer, do_fancy; - int h_in_group, v_in_group, h_out_group, v_out_group; - - upsample = (my_upsample_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_upsampler)); - cinfo->upsample = (struct jpeg_upsampler *) upsample; - upsample->pub.start_pass = start_pass_upsample; - upsample->pub.upsample = sep_upsample; - upsample->pub.need_context_rows = FALSE; /* until we find out differently */ - - if (cinfo->CCIR601_sampling) /* this isn't supported */ - ERREXIT(cinfo, JERR_CCIR601_NOTIMPL); - - /* jdmainct.c doesn't support context rows when min_DCT_scaled_size = 1, - * so don't ask for it. - */ - do_fancy = cinfo->do_fancy_upsampling && cinfo->min_DCT_scaled_size > 1; - - /* Verify we can handle the sampling factors, select per-component methods, - * and create storage as needed. - */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* Compute size of an "input group" after IDCT scaling. This many samples - * are to be converted to max_h_samp_factor * max_v_samp_factor pixels. - */ - h_in_group = (compptr->h_samp_factor * compptr->DCT_scaled_size) / - cinfo->min_DCT_scaled_size; - v_in_group = (compptr->v_samp_factor * compptr->DCT_scaled_size) / - cinfo->min_DCT_scaled_size; - h_out_group = cinfo->max_h_samp_factor; - v_out_group = cinfo->max_v_samp_factor; - upsample->rowgroup_height[ci] = v_in_group; /* save for use later */ - need_buffer = TRUE; - if (! compptr->component_needed) { - /* Don't bother to upsample an uninteresting component. */ - upsample->methods[ci] = noop_upsample; - need_buffer = FALSE; - } else if (h_in_group == h_out_group && v_in_group == v_out_group) { - /* Fullsize components can be processed without any work. */ - upsample->methods[ci] = fullsize_upsample; - need_buffer = FALSE; - } else if (h_in_group * 2 == h_out_group && - v_in_group == v_out_group) { - /* Special cases for 2h1v upsampling */ - if (do_fancy && compptr->downsampled_width > 2) - upsample->methods[ci] = h2v1_fancy_upsample; - else - upsample->methods[ci] = h2v1_upsample; - } else if (h_in_group * 2 == h_out_group && - v_in_group * 2 == v_out_group) { - /* Special cases for 2h2v upsampling */ - if (do_fancy && compptr->downsampled_width > 2) { - upsample->methods[ci] = h2v2_fancy_upsample; - upsample->pub.need_context_rows = TRUE; - } else - upsample->methods[ci] = h2v2_upsample; - } else if ((h_out_group % h_in_group) == 0 && - (v_out_group % v_in_group) == 0) { - /* Generic integral-factors upsampling method */ - upsample->methods[ci] = int_upsample; - upsample->h_expand[ci] = (UINT8) (h_out_group / h_in_group); - upsample->v_expand[ci] = (UINT8) (v_out_group / v_in_group); - } else - ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL); - if (need_buffer) { - upsample->color_buf[ci] = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) jround_up((long) cinfo->output_width, - (long) cinfo->max_h_samp_factor), - (JDIMENSION) cinfo->max_v_samp_factor); - } - } -} diff --git a/Build/source/libs/jpeg/jdtrans.c b/Build/source/libs/jpeg/jdtrans.c deleted file mode 100644 index 6c0ab715d32..00000000000 --- a/Build/source/libs/jpeg/jdtrans.c +++ /dev/null @@ -1,143 +0,0 @@ -/* - * jdtrans.c - * - * Copyright (C) 1995-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains library routines for transcoding decompression, - * that is, reading raw DCT coefficient arrays from an input JPEG file. - * The routines in jdapimin.c will also be needed by a transcoder. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Forward declarations */ -LOCAL(void) transdecode_master_selection JPP((j_decompress_ptr cinfo)); - - -/* - * Read the coefficient arrays from a JPEG file. - * jpeg_read_header must be completed before calling this. - * - * The entire image is read into a set of virtual coefficient-block arrays, - * one per component. The return value is a pointer to the array of - * virtual-array descriptors. These can be manipulated directly via the - * JPEG memory manager, or handed off to jpeg_write_coefficients(). - * To release the memory occupied by the virtual arrays, call - * jpeg_finish_decompress() when done with the data. - * - * An alternative usage is to simply obtain access to the coefficient arrays - * during a buffered-image-mode decompression operation. This is allowed - * after any jpeg_finish_output() call. The arrays can be accessed until - * jpeg_finish_decompress() is called. (Note that any call to the library - * may reposition the arrays, so don't rely on access_virt_barray() results - * to stay valid across library calls.) - * - * Returns NULL if suspended. This case need be checked only if - * a suspending data source is used. - */ - -GLOBAL(jvirt_barray_ptr *) -jpeg_read_coefficients (j_decompress_ptr cinfo) -{ - if (cinfo->global_state == DSTATE_READY) { - /* First call: initialize active modules */ - transdecode_master_selection(cinfo); - cinfo->global_state = DSTATE_RDCOEFS; - } - if (cinfo->global_state == DSTATE_RDCOEFS) { - /* Absorb whole file into the coef buffer */ - for (;;) { - int retcode; - /* Call progress monitor hook if present */ - if (cinfo->progress != NULL) - (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); - /* Absorb some more input */ - retcode = (*cinfo->inputctl->consume_input) (cinfo); - if (retcode == JPEG_SUSPENDED) - return NULL; - if (retcode == JPEG_REACHED_EOI) - break; - /* Advance progress counter if appropriate */ - if (cinfo->progress != NULL && - (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) { - if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) { - /* startup underestimated number of scans; ratchet up one scan */ - cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows; - } - } - } - /* Set state so that jpeg_finish_decompress does the right thing */ - cinfo->global_state = DSTATE_STOPPING; - } - /* At this point we should be in state DSTATE_STOPPING if being used - * standalone, or in state DSTATE_BUFIMAGE if being invoked to get access - * to the coefficients during a full buffered-image-mode decompression. - */ - if ((cinfo->global_state == DSTATE_STOPPING || - cinfo->global_state == DSTATE_BUFIMAGE) && cinfo->buffered_image) { - return cinfo->coef->coef_arrays; - } - /* Oops, improper usage */ - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - return NULL; /* keep compiler happy */ -} - - -/* - * Master selection of decompression modules for transcoding. - * This substitutes for jdmaster.c's initialization of the full decompressor. - */ - -LOCAL(void) -transdecode_master_selection (j_decompress_ptr cinfo) -{ - /* This is effectively a buffered-image operation. */ - cinfo->buffered_image = TRUE; - - /* Entropy decoding: either Huffman or arithmetic coding. */ - if (cinfo->arith_code) { - ERREXIT(cinfo, JERR_ARITH_NOTIMPL); - } else { - if (cinfo->progressive_mode) { -#ifdef D_PROGRESSIVE_SUPPORTED - jinit_phuff_decoder(cinfo); -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } else - jinit_huff_decoder(cinfo); - } - - /* Always get a full-image coefficient buffer. */ - jinit_d_coef_controller(cinfo, TRUE); - - /* We can now tell the memory manager to allocate virtual arrays. */ - (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); - - /* Initialize input side of decompressor to consume first scan. */ - (*cinfo->inputctl->start_input_pass) (cinfo); - - /* Initialize progress monitoring. */ - if (cinfo->progress != NULL) { - int nscans; - /* Estimate number of scans to set pass_limit. */ - if (cinfo->progressive_mode) { - /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */ - nscans = 2 + 3 * cinfo->num_components; - } else if (cinfo->inputctl->has_multiple_scans) { - /* For a nonprogressive multiscan file, estimate 1 scan per component. */ - nscans = cinfo->num_components; - } else { - nscans = 1; - } - cinfo->progress->pass_counter = 0L; - cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans; - cinfo->progress->completed_passes = 0; - cinfo->progress->total_passes = 1; - } -} diff --git a/Build/source/libs/jpeg/jerror.c b/Build/source/libs/jpeg/jerror.c deleted file mode 100644 index 3da7be86a00..00000000000 --- a/Build/source/libs/jpeg/jerror.c +++ /dev/null @@ -1,252 +0,0 @@ -/* - * jerror.c - * - * Copyright (C) 1991-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains simple error-reporting and trace-message routines. - * These are suitable for Unix-like systems and others where writing to - * stderr is the right thing to do. Many applications will want to replace - * some or all of these routines. - * - * If you define USE_WINDOWS_MESSAGEBOX in jconfig.h or in the makefile, - * you get a Windows-specific hack to display error messages in a dialog box. - * It ain't much, but it beats dropping error messages into the bit bucket, - * which is what happens to output to stderr under most Windows C compilers. - * - * These routines are used by both the compression and decompression code. - */ - -/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ -#include "jinclude.h" -#include "jpeglib.h" -#include "jversion.h" -#include "jerror.h" - -#ifdef USE_WINDOWS_MESSAGEBOX -#include -#endif - -#ifndef EXIT_FAILURE /* define exit() codes if not provided */ -#define EXIT_FAILURE 1 -#endif - - -/* - * Create the message string table. - * We do this from the master message list in jerror.h by re-reading - * jerror.h with a suitable definition for macro JMESSAGE. - * The message table is made an external symbol just in case any applications - * want to refer to it directly. - */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jpeg_std_message_table jMsgTable -#endif - -#define JMESSAGE(code,string) string , - -const char * const jpeg_std_message_table[] = { -#include "jerror.h" - NULL -}; - - -/* - * Error exit handler: must not return to caller. - * - * Applications may override this if they want to get control back after - * an error. Typically one would longjmp somewhere instead of exiting. - * The setjmp buffer can be made a private field within an expanded error - * handler object. Note that the info needed to generate an error message - * is stored in the error object, so you can generate the message now or - * later, at your convenience. - * You should make sure that the JPEG object is cleaned up (with jpeg_abort - * or jpeg_destroy) at some point. - */ - -METHODDEF(void) -error_exit (j_common_ptr cinfo) -{ - /* Always display the message */ - (*cinfo->err->output_message) (cinfo); - - /* Let the memory manager delete any temp files before we die */ - jpeg_destroy(cinfo); - - exit(EXIT_FAILURE); -} - - -/* - * Actual output of an error or trace message. - * Applications may override this method to send JPEG messages somewhere - * other than stderr. - * - * On Windows, printing to stderr is generally completely useless, - * so we provide optional code to produce an error-dialog popup. - * Most Windows applications will still prefer to override this routine, - * but if they don't, it'll do something at least marginally useful. - * - * NOTE: to use the library in an environment that doesn't support the - * C stdio library, you may have to delete the call to fprintf() entirely, - * not just not use this routine. - */ - -METHODDEF(void) -output_message (j_common_ptr cinfo) -{ - char buffer[JMSG_LENGTH_MAX]; - - /* Create the message */ - (*cinfo->err->format_message) (cinfo, buffer); - -#ifdef USE_WINDOWS_MESSAGEBOX - /* Display it in a message dialog box */ - MessageBox(GetActiveWindow(), buffer, "JPEG Library Error", - MB_OK | MB_ICONERROR); -#else - /* Send it to stderr, adding a newline */ - fprintf(stderr, "%s\n", buffer); -#endif -} - - -/* - * Decide whether to emit a trace or warning message. - * msg_level is one of: - * -1: recoverable corrupt-data warning, may want to abort. - * 0: important advisory messages (always display to user). - * 1: first level of tracing detail. - * 2,3,...: successively more detailed tracing messages. - * An application might override this method if it wanted to abort on warnings - * or change the policy about which messages to display. - */ - -METHODDEF(void) -emit_message (j_common_ptr cinfo, int msg_level) -{ - struct jpeg_error_mgr * err = cinfo->err; - - if (msg_level < 0) { - /* It's a warning message. Since corrupt files may generate many warnings, - * the policy implemented here is to show only the first warning, - * unless trace_level >= 3. - */ - if (err->num_warnings == 0 || err->trace_level >= 3) - (*err->output_message) (cinfo); - /* Always count warnings in num_warnings. */ - err->num_warnings++; - } else { - /* It's a trace message. Show it if trace_level >= msg_level. */ - if (err->trace_level >= msg_level) - (*err->output_message) (cinfo); - } -} - - -/* - * Format a message string for the most recent JPEG error or message. - * The message is stored into buffer, which should be at least JMSG_LENGTH_MAX - * characters. Note that no '\n' character is added to the string. - * Few applications should need to override this method. - */ - -METHODDEF(void) -format_message (j_common_ptr cinfo, char * buffer) -{ - struct jpeg_error_mgr * err = cinfo->err; - int msg_code = err->msg_code; - const char * msgtext = NULL; - const char * msgptr; - char ch; - boolean isstring; - - /* Look up message string in proper table */ - if (msg_code > 0 && msg_code <= err->last_jpeg_message) { - msgtext = err->jpeg_message_table[msg_code]; - } else if (err->addon_message_table != NULL && - msg_code >= err->first_addon_message && - msg_code <= err->last_addon_message) { - msgtext = err->addon_message_table[msg_code - err->first_addon_message]; - } - - /* Defend against bogus message number */ - if (msgtext == NULL) { - err->msg_parm.i[0] = msg_code; - msgtext = err->jpeg_message_table[0]; - } - - /* Check for string parameter, as indicated by %s in the message text */ - isstring = FALSE; - msgptr = msgtext; - while ((ch = *msgptr++) != '\0') { - if (ch == '%') { - if (*msgptr == 's') isstring = TRUE; - break; - } - } - - /* Format the message into the passed buffer */ - if (isstring) - sprintf(buffer, msgtext, err->msg_parm.s); - else - sprintf(buffer, msgtext, - err->msg_parm.i[0], err->msg_parm.i[1], - err->msg_parm.i[2], err->msg_parm.i[3], - err->msg_parm.i[4], err->msg_parm.i[5], - err->msg_parm.i[6], err->msg_parm.i[7]); -} - - -/* - * Reset error state variables at start of a new image. - * This is called during compression startup to reset trace/error - * processing to default state, without losing any application-specific - * method pointers. An application might possibly want to override - * this method if it has additional error processing state. - */ - -METHODDEF(void) -reset_error_mgr (j_common_ptr cinfo) -{ - cinfo->err->num_warnings = 0; - /* trace_level is not reset since it is an application-supplied parameter */ - cinfo->err->msg_code = 0; /* may be useful as a flag for "no error" */ -} - - -/* - * Fill in the standard error-handling methods in a jpeg_error_mgr object. - * Typical call is: - * struct jpeg_compress_struct cinfo; - * struct jpeg_error_mgr err; - * - * cinfo.err = jpeg_std_error(&err); - * after which the application may override some of the methods. - */ - -GLOBAL(struct jpeg_error_mgr *) -jpeg_std_error (struct jpeg_error_mgr * err) -{ - err->error_exit = error_exit; - err->emit_message = emit_message; - err->output_message = output_message; - err->format_message = format_message; - err->reset_error_mgr = reset_error_mgr; - - err->trace_level = 0; /* default = no tracing */ - err->num_warnings = 0; /* no warnings emitted yet */ - err->msg_code = 0; /* may be useful as a flag for "no error" */ - - /* Initialize message table pointers */ - err->jpeg_message_table = jpeg_std_message_table; - err->last_jpeg_message = (int) JMSG_LASTMSGCODE - 1; - - err->addon_message_table = NULL; - err->first_addon_message = 0; /* for safety */ - err->last_addon_message = 0; - - return err; -} diff --git a/Build/source/libs/jpeg/jerror.h b/Build/source/libs/jpeg/jerror.h deleted file mode 100644 index fc2fffeac29..00000000000 --- a/Build/source/libs/jpeg/jerror.h +++ /dev/null @@ -1,291 +0,0 @@ -/* - * jerror.h - * - * Copyright (C) 1994-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file defines the error and message codes for the JPEG library. - * Edit this file to add new codes, or to translate the message strings to - * some other language. - * A set of error-reporting macros are defined too. Some applications using - * the JPEG library may wish to include this file to get the error codes - * and/or the macros. - */ - -/* - * To define the enum list of message codes, include this file without - * defining macro JMESSAGE. To create a message string table, include it - * again with a suitable JMESSAGE definition (see jerror.c for an example). - */ -#ifndef JMESSAGE -#ifndef JERROR_H -/* First time through, define the enum list */ -#define JMAKE_ENUM_LIST -#else -/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */ -#define JMESSAGE(code,string) -#endif /* JERROR_H */ -#endif /* JMESSAGE */ - -#ifdef JMAKE_ENUM_LIST - -typedef enum { - -#define JMESSAGE(code,string) code , - -#endif /* JMAKE_ENUM_LIST */ - -JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */ - -/* For maintenance convenience, list is alphabetical by message code name */ -JMESSAGE(JERR_ARITH_NOTIMPL, - "Sorry, there are legal restrictions on arithmetic coding") -JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix") -JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix") -JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode") -JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS") -JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range") -JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported") -JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition") -JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace") -JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace") -JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length") -JMESSAGE(JERR_BAD_LIB_VERSION, - "Wrong JPEG library version: library is %d, caller expects %d") -JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan") -JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d") -JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d") -JMESSAGE(JERR_BAD_PROGRESSION, - "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d") -JMESSAGE(JERR_BAD_PROG_SCRIPT, - "Invalid progressive parameters at scan script entry %d") -JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors") -JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d") -JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d") -JMESSAGE(JERR_BAD_STRUCT_SIZE, - "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u") -JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access") -JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small") -JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here") -JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet") -JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d") -JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request") -JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d") -JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x") -JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d") -JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d") -JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)") -JMESSAGE(JERR_EMS_READ, "Read from EMS failed") -JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed") -JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan") -JMESSAGE(JERR_FILE_READ, "Input file read error") -JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?") -JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet") -JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow") -JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry") -JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels") -JMESSAGE(JERR_INPUT_EMPTY, "Empty input file") -JMESSAGE(JERR_INPUT_EOF, "Premature end of input file") -JMESSAGE(JERR_MISMATCHED_QUANT_TABLE, - "Cannot transcode due to multiple use of quantization table %d") -JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data") -JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change") -JMESSAGE(JERR_NOTIMPL, "Not implemented yet") -JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time") -JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported") -JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined") -JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image") -JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined") -JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x") -JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)") -JMESSAGE(JERR_QUANT_COMPONENTS, - "Cannot quantize more than %d color components") -JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors") -JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors") -JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers") -JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker") -JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x") -JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers") -JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF") -JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s") -JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file") -JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file") -JMESSAGE(JERR_TFILE_WRITE, - "Write failed on temporary file --- out of disk space?") -JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines") -JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x") -JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up") -JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation") -JMESSAGE(JERR_XMS_READ, "Read from XMS failed") -JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed") -JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT) -JMESSAGE(JMSG_VERSION, JVERSION) -JMESSAGE(JTRC_16BIT_TABLES, - "Caution: quantization tables are too coarse for baseline JPEG") -JMESSAGE(JTRC_ADOBE, - "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d") -JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u") -JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u") -JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x") -JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x") -JMESSAGE(JTRC_DQT, "Define Quantization Table %d precision %d") -JMESSAGE(JTRC_DRI, "Define Restart Interval %u") -JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u") -JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u") -JMESSAGE(JTRC_EOI, "End Of Image") -JMESSAGE(JTRC_HUFFBITS, " %3d %3d %3d %3d %3d %3d %3d %3d") -JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d %d") -JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE, - "Warning: thumbnail image size does not match data length %u") -JMESSAGE(JTRC_JFIF_EXTENSION, - "JFIF extension marker: type 0x%02x, length %u") -JMESSAGE(JTRC_JFIF_THUMBNAIL, " with %d x %d thumbnail image") -JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u") -JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x") -JMESSAGE(JTRC_QUANTVALS, " %4u %4u %4u %4u %4u %4u %4u %4u") -JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors") -JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors") -JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization") -JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d") -JMESSAGE(JTRC_RST, "RST%d") -JMESSAGE(JTRC_SMOOTH_NOTIMPL, - "Smoothing not supported with nonstandard sampling ratios") -JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d") -JMESSAGE(JTRC_SOF_COMPONENT, " Component %d: %dhx%dv q=%d") -JMESSAGE(JTRC_SOI, "Start of Image") -JMESSAGE(JTRC_SOS, "Start Of Scan: %d components") -JMESSAGE(JTRC_SOS_COMPONENT, " Component %d: dc=%d ac=%d") -JMESSAGE(JTRC_SOS_PARAMS, " Ss=%d, Se=%d, Ah=%d, Al=%d") -JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s") -JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s") -JMESSAGE(JTRC_THUMB_JPEG, - "JFIF extension marker: JPEG-compressed thumbnail image, length %u") -JMESSAGE(JTRC_THUMB_PALETTE, - "JFIF extension marker: palette thumbnail image, length %u") -JMESSAGE(JTRC_THUMB_RGB, - "JFIF extension marker: RGB thumbnail image, length %u") -JMESSAGE(JTRC_UNKNOWN_IDS, - "Unrecognized component IDs %d %d %d, assuming YCbCr") -JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u") -JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u") -JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d") -JMESSAGE(JWRN_BOGUS_PROGRESSION, - "Inconsistent progression sequence for component %d coefficient %d") -JMESSAGE(JWRN_EXTRANEOUS_DATA, - "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x") -JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment") -JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code") -JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d") -JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file") -JMESSAGE(JWRN_MUST_RESYNC, - "Corrupt JPEG data: found marker 0x%02x instead of RST%d") -JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG") -JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines") - -#ifdef JMAKE_ENUM_LIST - - JMSG_LASTMSGCODE -} J_MESSAGE_CODE; - -#undef JMAKE_ENUM_LIST -#endif /* JMAKE_ENUM_LIST */ - -/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */ -#undef JMESSAGE - - -#ifndef JERROR_H -#define JERROR_H - -/* Macros to simplify using the error and trace message stuff */ -/* The first parameter is either type of cinfo pointer */ - -/* Fatal errors (print message and exit) */ -#define ERREXIT(cinfo,code) \ - ((cinfo)->err->msg_code = (code), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXIT1(cinfo,code,p1) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXIT2(cinfo,code,p1,p2) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXIT3(cinfo,code,p1,p2,p3) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (cinfo)->err->msg_parm.i[2] = (p3), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXIT4(cinfo,code,p1,p2,p3,p4) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (cinfo)->err->msg_parm.i[2] = (p3), \ - (cinfo)->err->msg_parm.i[3] = (p4), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXITS(cinfo,code,str) \ - ((cinfo)->err->msg_code = (code), \ - strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) - -#define MAKESTMT(stuff) do { stuff } while (0) - -/* Nonfatal errors (we can keep going, but the data is probably corrupt) */ -#define WARNMS(cinfo,code) \ - ((cinfo)->err->msg_code = (code), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) -#define WARNMS1(cinfo,code,p1) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) -#define WARNMS2(cinfo,code,p1,p2) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) - -/* Informational/debugging messages */ -#define TRACEMS(cinfo,lvl,code) \ - ((cinfo)->err->msg_code = (code), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) -#define TRACEMS1(cinfo,lvl,code,p1) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) -#define TRACEMS2(cinfo,lvl,code,p1,p2) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) -#define TRACEMS3(cinfo,lvl,code,p1,p2,p3) \ - MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ - _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \ - (cinfo)->err->msg_code = (code); \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) -#define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4) \ - MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ - _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ - (cinfo)->err->msg_code = (code); \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) -#define TRACEMS5(cinfo,lvl,code,p1,p2,p3,p4,p5) \ - MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ - _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ - _mp[4] = (p5); \ - (cinfo)->err->msg_code = (code); \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) -#define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8) \ - MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ - _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ - _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \ - (cinfo)->err->msg_code = (code); \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) -#define TRACEMSS(cinfo,lvl,code,str) \ - ((cinfo)->err->msg_code = (code), \ - strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) - -#endif /* JERROR_H */ diff --git a/Build/source/libs/jpeg/jfdctflt.c b/Build/source/libs/jpeg/jfdctflt.c deleted file mode 100644 index 79d7a007874..00000000000 --- a/Build/source/libs/jpeg/jfdctflt.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * jfdctflt.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a floating-point implementation of the - * forward DCT (Discrete Cosine Transform). - * - * This implementation should be more accurate than either of the integer - * DCT implementations. However, it may not give the same results on all - * machines because of differences in roundoff behavior. Speed will depend - * on the hardware's floating point capacity. - * - * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT - * on each column. Direct algorithms are also available, but they are - * much more complex and seem not to be any faster when reduced to code. - * - * This implementation is based on Arai, Agui, and Nakajima's algorithm for - * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in - * Japanese, but the algorithm is described in the Pennebaker & Mitchell - * JPEG textbook (see REFERENCES section in file README). The following code - * is based directly on figure 4-8 in P&M. - * While an 8-point DCT cannot be done in less than 11 multiplies, it is - * possible to arrange the computation so that many of the multiplies are - * simple scalings of the final outputs. These multiplies can then be - * folded into the multiplications or divisions by the JPEG quantization - * table entries. The AA&N method leaves only 5 multiplies and 29 adds - * to be done in the DCT itself. - * The primary disadvantage of this method is that with a fixed-point - * implementation, accuracy is lost due to imprecise representation of the - * scaled quantization values. However, that problem does not arise if - * we use floating point arithmetic. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdct.h" /* Private declarations for DCT subsystem */ - -#ifdef DCT_FLOAT_SUPPORTED - - -/* - * This module is specialized to the case DCTSIZE = 8. - */ - -#if DCTSIZE != 8 - Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ -#endif - - -/* - * Perform the forward DCT on one block of samples. - */ - -GLOBAL(void) -jpeg_fdct_float (FAST_FLOAT * data) -{ - FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; - FAST_FLOAT tmp10, tmp11, tmp12, tmp13; - FAST_FLOAT z1, z2, z3, z4, z5, z11, z13; - FAST_FLOAT *dataptr; - int ctr; - - /* Pass 1: process rows. */ - - dataptr = data; - for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { - tmp0 = dataptr[0] + dataptr[7]; - tmp7 = dataptr[0] - dataptr[7]; - tmp1 = dataptr[1] + dataptr[6]; - tmp6 = dataptr[1] - dataptr[6]; - tmp2 = dataptr[2] + dataptr[5]; - tmp5 = dataptr[2] - dataptr[5]; - tmp3 = dataptr[3] + dataptr[4]; - tmp4 = dataptr[3] - dataptr[4]; - - /* Even part */ - - tmp10 = tmp0 + tmp3; /* phase 2 */ - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - dataptr[0] = tmp10 + tmp11; /* phase 3 */ - dataptr[4] = tmp10 - tmp11; - - z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */ - dataptr[2] = tmp13 + z1; /* phase 5 */ - dataptr[6] = tmp13 - z1; - - /* Odd part */ - - tmp10 = tmp4 + tmp5; /* phase 2 */ - tmp11 = tmp5 + tmp6; - tmp12 = tmp6 + tmp7; - - /* The rotator is modified from fig 4-8 to avoid extra negations. */ - z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */ - z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */ - z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */ - z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */ - - z11 = tmp7 + z3; /* phase 5 */ - z13 = tmp7 - z3; - - dataptr[5] = z13 + z2; /* phase 6 */ - dataptr[3] = z13 - z2; - dataptr[1] = z11 + z4; - dataptr[7] = z11 - z4; - - dataptr += DCTSIZE; /* advance pointer to next row */ - } - - /* Pass 2: process columns. */ - - dataptr = data; - for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { - tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; - tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; - tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; - tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; - tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; - tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; - tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; - tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; - - /* Even part */ - - tmp10 = tmp0 + tmp3; /* phase 2 */ - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */ - dataptr[DCTSIZE*4] = tmp10 - tmp11; - - z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */ - dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */ - dataptr[DCTSIZE*6] = tmp13 - z1; - - /* Odd part */ - - tmp10 = tmp4 + tmp5; /* phase 2 */ - tmp11 = tmp5 + tmp6; - tmp12 = tmp6 + tmp7; - - /* The rotator is modified from fig 4-8 to avoid extra negations. */ - z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */ - z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */ - z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */ - z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */ - - z11 = tmp7 + z3; /* phase 5 */ - z13 = tmp7 - z3; - - dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */ - dataptr[DCTSIZE*3] = z13 - z2; - dataptr[DCTSIZE*1] = z11 + z4; - dataptr[DCTSIZE*7] = z11 - z4; - - dataptr++; /* advance pointer to next column */ - } -} - -#endif /* DCT_FLOAT_SUPPORTED */ diff --git a/Build/source/libs/jpeg/jfdctfst.c b/Build/source/libs/jpeg/jfdctfst.c deleted file mode 100644 index ccb378a3b45..00000000000 --- a/Build/source/libs/jpeg/jfdctfst.c +++ /dev/null @@ -1,224 +0,0 @@ -/* - * jfdctfst.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a fast, not so accurate integer implementation of the - * forward DCT (Discrete Cosine Transform). - * - * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT - * on each column. Direct algorithms are also available, but they are - * much more complex and seem not to be any faster when reduced to code. - * - * This implementation is based on Arai, Agui, and Nakajima's algorithm for - * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in - * Japanese, but the algorithm is described in the Pennebaker & Mitchell - * JPEG textbook (see REFERENCES section in file README). The following code - * is based directly on figure 4-8 in P&M. - * While an 8-point DCT cannot be done in less than 11 multiplies, it is - * possible to arrange the computation so that many of the multiplies are - * simple scalings of the final outputs. These multiplies can then be - * folded into the multiplications or divisions by the JPEG quantization - * table entries. The AA&N method leaves only 5 multiplies and 29 adds - * to be done in the DCT itself. - * The primary disadvantage of this method is that with fixed-point math, - * accuracy is lost due to imprecise representation of the scaled - * quantization values. The smaller the quantization table entry, the less - * precise the scaled value, so this implementation does worse with high- - * quality-setting files than with low-quality ones. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdct.h" /* Private declarations for DCT subsystem */ - -#ifdef DCT_IFAST_SUPPORTED - - -/* - * This module is specialized to the case DCTSIZE = 8. - */ - -#if DCTSIZE != 8 - Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ -#endif - - -/* Scaling decisions are generally the same as in the LL&M algorithm; - * see jfdctint.c for more details. However, we choose to descale - * (right shift) multiplication products as soon as they are formed, - * rather than carrying additional fractional bits into subsequent additions. - * This compromises accuracy slightly, but it lets us save a few shifts. - * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples) - * everywhere except in the multiplications proper; this saves a good deal - * of work on 16-bit-int machines. - * - * Again to save a few shifts, the intermediate results between pass 1 and - * pass 2 are not upscaled, but are represented only to integral precision. - * - * A final compromise is to represent the multiplicative constants to only - * 8 fractional bits, rather than 13. This saves some shifting work on some - * machines, and may also reduce the cost of multiplication (since there - * are fewer one-bits in the constants). - */ - -#define CONST_BITS 8 - - -/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus - * causing a lot of useless floating-point operations at run time. - * To get around this we use the following pre-calculated constants. - * If you change CONST_BITS you may want to add appropriate values. - * (With a reasonable C compiler, you can just rely on the FIX() macro...) - */ - -#if CONST_BITS == 8 -#define FIX_0_382683433 ((INT32) 98) /* FIX(0.382683433) */ -#define FIX_0_541196100 ((INT32) 139) /* FIX(0.541196100) */ -#define FIX_0_707106781 ((INT32) 181) /* FIX(0.707106781) */ -#define FIX_1_306562965 ((INT32) 334) /* FIX(1.306562965) */ -#else -#define FIX_0_382683433 FIX(0.382683433) -#define FIX_0_541196100 FIX(0.541196100) -#define FIX_0_707106781 FIX(0.707106781) -#define FIX_1_306562965 FIX(1.306562965) -#endif - - -/* We can gain a little more speed, with a further compromise in accuracy, - * by omitting the addition in a descaling shift. This yields an incorrectly - * rounded result half the time... - */ - -#ifndef USE_ACCURATE_ROUNDING -#undef DESCALE -#define DESCALE(x,n) RIGHT_SHIFT(x, n) -#endif - - -/* Multiply a DCTELEM variable by an INT32 constant, and immediately - * descale to yield a DCTELEM result. - */ - -#define MULTIPLY(var,const) ((DCTELEM) DESCALE((var) * (const), CONST_BITS)) - - -/* - * Perform the forward DCT on one block of samples. - */ - -GLOBAL(void) -jpeg_fdct_ifast (DCTELEM * data) -{ - DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; - DCTELEM tmp10, tmp11, tmp12, tmp13; - DCTELEM z1, z2, z3, z4, z5, z11, z13; - DCTELEM *dataptr; - int ctr; - SHIFT_TEMPS - - /* Pass 1: process rows. */ - - dataptr = data; - for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { - tmp0 = dataptr[0] + dataptr[7]; - tmp7 = dataptr[0] - dataptr[7]; - tmp1 = dataptr[1] + dataptr[6]; - tmp6 = dataptr[1] - dataptr[6]; - tmp2 = dataptr[2] + dataptr[5]; - tmp5 = dataptr[2] - dataptr[5]; - tmp3 = dataptr[3] + dataptr[4]; - tmp4 = dataptr[3] - dataptr[4]; - - /* Even part */ - - tmp10 = tmp0 + tmp3; /* phase 2 */ - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - dataptr[0] = tmp10 + tmp11; /* phase 3 */ - dataptr[4] = tmp10 - tmp11; - - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */ - dataptr[2] = tmp13 + z1; /* phase 5 */ - dataptr[6] = tmp13 - z1; - - /* Odd part */ - - tmp10 = tmp4 + tmp5; /* phase 2 */ - tmp11 = tmp5 + tmp6; - tmp12 = tmp6 + tmp7; - - /* The rotator is modified from fig 4-8 to avoid extra negations. */ - z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */ - z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */ - z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */ - z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */ - - z11 = tmp7 + z3; /* phase 5 */ - z13 = tmp7 - z3; - - dataptr[5] = z13 + z2; /* phase 6 */ - dataptr[3] = z13 - z2; - dataptr[1] = z11 + z4; - dataptr[7] = z11 - z4; - - dataptr += DCTSIZE; /* advance pointer to next row */ - } - - /* Pass 2: process columns. */ - - dataptr = data; - for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { - tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; - tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; - tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; - tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; - tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; - tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; - tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; - tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; - - /* Even part */ - - tmp10 = tmp0 + tmp3; /* phase 2 */ - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */ - dataptr[DCTSIZE*4] = tmp10 - tmp11; - - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */ - dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */ - dataptr[DCTSIZE*6] = tmp13 - z1; - - /* Odd part */ - - tmp10 = tmp4 + tmp5; /* phase 2 */ - tmp11 = tmp5 + tmp6; - tmp12 = tmp6 + tmp7; - - /* The rotator is modified from fig 4-8 to avoid extra negations. */ - z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */ - z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */ - z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */ - z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */ - - z11 = tmp7 + z3; /* phase 5 */ - z13 = tmp7 - z3; - - dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */ - dataptr[DCTSIZE*3] = z13 - z2; - dataptr[DCTSIZE*1] = z11 + z4; - dataptr[DCTSIZE*7] = z11 - z4; - - dataptr++; /* advance pointer to next column */ - } -} - -#endif /* DCT_IFAST_SUPPORTED */ diff --git a/Build/source/libs/jpeg/jfdctint.c b/Build/source/libs/jpeg/jfdctint.c deleted file mode 100644 index 0a78b64aee8..00000000000 --- a/Build/source/libs/jpeg/jfdctint.c +++ /dev/null @@ -1,283 +0,0 @@ -/* - * jfdctint.c - * - * Copyright (C) 1991-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a slow-but-accurate integer implementation of the - * forward DCT (Discrete Cosine Transform). - * - * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT - * on each column. Direct algorithms are also available, but they are - * much more complex and seem not to be any faster when reduced to code. - * - * This implementation is based on an algorithm described in - * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT - * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, - * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. - * The primary algorithm described there uses 11 multiplies and 29 adds. - * We use their alternate method with 12 multiplies and 32 adds. - * The advantage of this method is that no data path contains more than one - * multiplication; this allows a very simple and accurate implementation in - * scaled fixed-point arithmetic, with a minimal number of shifts. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdct.h" /* Private declarations for DCT subsystem */ - -#ifdef DCT_ISLOW_SUPPORTED - - -/* - * This module is specialized to the case DCTSIZE = 8. - */ - -#if DCTSIZE != 8 - Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ -#endif - - -/* - * The poop on this scaling stuff is as follows: - * - * Each 1-D DCT step produces outputs which are a factor of sqrt(N) - * larger than the true DCT outputs. The final outputs are therefore - * a factor of N larger than desired; since N=8 this can be cured by - * a simple right shift at the end of the algorithm. The advantage of - * this arrangement is that we save two multiplications per 1-D DCT, - * because the y0 and y4 outputs need not be divided by sqrt(N). - * In the IJG code, this factor of 8 is removed by the quantization step - * (in jcdctmgr.c), NOT in this module. - * - * We have to do addition and subtraction of the integer inputs, which - * is no problem, and multiplication by fractional constants, which is - * a problem to do in integer arithmetic. We multiply all the constants - * by CONST_SCALE and convert them to integer constants (thus retaining - * CONST_BITS bits of precision in the constants). After doing a - * multiplication we have to divide the product by CONST_SCALE, with proper - * rounding, to produce the correct output. This division can be done - * cheaply as a right shift of CONST_BITS bits. We postpone shifting - * as long as possible so that partial sums can be added together with - * full fractional precision. - * - * The outputs of the first pass are scaled up by PASS1_BITS bits so that - * they are represented to better-than-integral precision. These outputs - * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word - * with the recommended scaling. (For 12-bit sample data, the intermediate - * array is INT32 anyway.) - * - * To avoid overflow of the 32-bit intermediate results in pass 2, we must - * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis - * shows that the values given below are the most effective. - */ - -#if BITS_IN_JSAMPLE == 8 -#define CONST_BITS 13 -#define PASS1_BITS 2 -#else -#define CONST_BITS 13 -#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ -#endif - -/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus - * causing a lot of useless floating-point operations at run time. - * To get around this we use the following pre-calculated constants. - * If you change CONST_BITS you may want to add appropriate values. - * (With a reasonable C compiler, you can just rely on the FIX() macro...) - */ - -#if CONST_BITS == 13 -#define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */ -#define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */ -#define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */ -#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ -#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ -#define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */ -#define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */ -#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ -#define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */ -#define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */ -#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ -#define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */ -#else -#define FIX_0_298631336 FIX(0.298631336) -#define FIX_0_390180644 FIX(0.390180644) -#define FIX_0_541196100 FIX(0.541196100) -#define FIX_0_765366865 FIX(0.765366865) -#define FIX_0_899976223 FIX(0.899976223) -#define FIX_1_175875602 FIX(1.175875602) -#define FIX_1_501321110 FIX(1.501321110) -#define FIX_1_847759065 FIX(1.847759065) -#define FIX_1_961570560 FIX(1.961570560) -#define FIX_2_053119869 FIX(2.053119869) -#define FIX_2_562915447 FIX(2.562915447) -#define FIX_3_072711026 FIX(3.072711026) -#endif - - -/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. - * For 8-bit samples with the recommended scaling, all the variable - * and constant values involved are no more than 16 bits wide, so a - * 16x16->32 bit multiply can be used instead of a full 32x32 multiply. - * For 12-bit samples, a full 32-bit multiplication will be needed. - */ - -#if BITS_IN_JSAMPLE == 8 -#define MULTIPLY(var,const) MULTIPLY16C16(var,const) -#else -#define MULTIPLY(var,const) ((var) * (const)) -#endif - - -/* - * Perform the forward DCT on one block of samples. - */ - -GLOBAL(void) -jpeg_fdct_islow (DCTELEM * data) -{ - INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; - INT32 tmp10, tmp11, tmp12, tmp13; - INT32 z1, z2, z3, z4, z5; - DCTELEM *dataptr; - int ctr; - SHIFT_TEMPS - - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - - dataptr = data; - for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { - tmp0 = dataptr[0] + dataptr[7]; - tmp7 = dataptr[0] - dataptr[7]; - tmp1 = dataptr[1] + dataptr[6]; - tmp6 = dataptr[1] - dataptr[6]; - tmp2 = dataptr[2] + dataptr[5]; - tmp5 = dataptr[2] - dataptr[5]; - tmp3 = dataptr[3] + dataptr[4]; - tmp4 = dataptr[3] - dataptr[4]; - - /* Even part per LL&M figure 1 --- note that published figure is faulty; - * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". - */ - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - dataptr[0] = (DCTELEM) ((tmp10 + tmp11) << PASS1_BITS); - dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS); - - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); - dataptr[2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865), - CONST_BITS-PASS1_BITS); - dataptr[6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065), - CONST_BITS-PASS1_BITS); - - /* Odd part per figure 8 --- note paper omits factor of sqrt(2). - * cK represents cos(K*pi/16). - * i0..i3 in the paper are tmp4..tmp7 here. - */ - - z1 = tmp4 + tmp7; - z2 = tmp5 + tmp6; - z3 = tmp4 + tmp6; - z4 = tmp5 + tmp7; - z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ - - tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ - tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ - z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ - - z3 += z5; - z4 += z5; - - dataptr[7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS-PASS1_BITS); - dataptr[5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, CONST_BITS-PASS1_BITS); - dataptr[3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, CONST_BITS-PASS1_BITS); - dataptr[1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, CONST_BITS-PASS1_BITS); - - dataptr += DCTSIZE; /* advance pointer to next row */ - } - - /* Pass 2: process columns. - * We remove the PASS1_BITS scaling, but leave the results scaled up - * by an overall factor of 8. - */ - - dataptr = data; - for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { - tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; - tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; - tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; - tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; - tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; - tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; - tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; - tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; - - /* Even part per LL&M figure 1 --- note that published figure is faulty; - * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". - */ - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS); - dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS); - - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); - dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865), - CONST_BITS+PASS1_BITS); - dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065), - CONST_BITS+PASS1_BITS); - - /* Odd part per figure 8 --- note paper omits factor of sqrt(2). - * cK represents cos(K*pi/16). - * i0..i3 in the paper are tmp4..tmp7 here. - */ - - z1 = tmp4 + tmp7; - z2 = tmp5 + tmp6; - z3 = tmp4 + tmp6; - z4 = tmp5 + tmp7; - z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ - - tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ - tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ - z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ - - z3 += z5; - z4 += z5; - - dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, - CONST_BITS+PASS1_BITS); - dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, - CONST_BITS+PASS1_BITS); - dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, - CONST_BITS+PASS1_BITS); - dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, - CONST_BITS+PASS1_BITS); - - dataptr++; /* advance pointer to next column */ - } -} - -#endif /* DCT_ISLOW_SUPPORTED */ diff --git a/Build/source/libs/jpeg/jidctflt.c b/Build/source/libs/jpeg/jidctflt.c deleted file mode 100644 index 0188ce3dfcd..00000000000 --- a/Build/source/libs/jpeg/jidctflt.c +++ /dev/null @@ -1,242 +0,0 @@ -/* - * jidctflt.c - * - * Copyright (C) 1994-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a floating-point implementation of the - * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine - * must also perform dequantization of the input coefficients. - * - * This implementation should be more accurate than either of the integer - * IDCT implementations. However, it may not give the same results on all - * machines because of differences in roundoff behavior. Speed will depend - * on the hardware's floating point capacity. - * - * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT - * on each row (or vice versa, but it's more convenient to emit a row at - * a time). Direct algorithms are also available, but they are much more - * complex and seem not to be any faster when reduced to code. - * - * This implementation is based on Arai, Agui, and Nakajima's algorithm for - * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in - * Japanese, but the algorithm is described in the Pennebaker & Mitchell - * JPEG textbook (see REFERENCES section in file README). The following code - * is based directly on figure 4-8 in P&M. - * While an 8-point DCT cannot be done in less than 11 multiplies, it is - * possible to arrange the computation so that many of the multiplies are - * simple scalings of the final outputs. These multiplies can then be - * folded into the multiplications or divisions by the JPEG quantization - * table entries. The AA&N method leaves only 5 multiplies and 29 adds - * to be done in the DCT itself. - * The primary disadvantage of this method is that with a fixed-point - * implementation, accuracy is lost due to imprecise representation of the - * scaled quantization values. However, that problem does not arise if - * we use floating point arithmetic. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdct.h" /* Private declarations for DCT subsystem */ - -#ifdef DCT_FLOAT_SUPPORTED - - -/* - * This module is specialized to the case DCTSIZE = 8. - */ - -#if DCTSIZE != 8 - Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ -#endif - - -/* Dequantize a coefficient by multiplying it by the multiplier-table - * entry; produce a float result. - */ - -#define DEQUANTIZE(coef,quantval) (((FAST_FLOAT) (coef)) * (quantval)) - - -/* - * Perform dequantization and inverse DCT on one block of coefficients. - */ - -GLOBAL(void) -jpeg_idct_float (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, - JSAMPARRAY output_buf, JDIMENSION output_col) -{ - FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; - FAST_FLOAT tmp10, tmp11, tmp12, tmp13; - FAST_FLOAT z5, z10, z11, z12, z13; - JCOEFPTR inptr; - FLOAT_MULT_TYPE * quantptr; - FAST_FLOAT * wsptr; - JSAMPROW outptr; - JSAMPLE *range_limit = IDCT_range_limit(cinfo); - int ctr; - FAST_FLOAT workspace[DCTSIZE2]; /* buffers data between passes */ - SHIFT_TEMPS - - /* Pass 1: process columns from input, store into work array. */ - - inptr = coef_block; - quantptr = (FLOAT_MULT_TYPE *) compptr->dct_table; - wsptr = workspace; - for (ctr = DCTSIZE; ctr > 0; ctr--) { - /* Due to quantization, we will usually find that many of the input - * coefficients are zero, especially the AC terms. We can exploit this - * by short-circuiting the IDCT calculation for any column in which all - * the AC terms are zero. In that case each output is equal to the - * DC coefficient (with scale factor as needed). - * With typical images and quantization tables, half or more of the - * column DCT calculations can be simplified this way. - */ - - if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && - inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && - inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && - inptr[DCTSIZE*7] == 0) { - /* AC terms all zero */ - FAST_FLOAT dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); - - wsptr[DCTSIZE*0] = dcval; - wsptr[DCTSIZE*1] = dcval; - wsptr[DCTSIZE*2] = dcval; - wsptr[DCTSIZE*3] = dcval; - wsptr[DCTSIZE*4] = dcval; - wsptr[DCTSIZE*5] = dcval; - wsptr[DCTSIZE*6] = dcval; - wsptr[DCTSIZE*7] = dcval; - - inptr++; /* advance pointers to next column */ - quantptr++; - wsptr++; - continue; - } - - /* Even part */ - - tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); - tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); - tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); - tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); - - tmp10 = tmp0 + tmp2; /* phase 3 */ - tmp11 = tmp0 - tmp2; - - tmp13 = tmp1 + tmp3; /* phases 5-3 */ - tmp12 = (tmp1 - tmp3) * ((FAST_FLOAT) 1.414213562) - tmp13; /* 2*c4 */ - - tmp0 = tmp10 + tmp13; /* phase 2 */ - tmp3 = tmp10 - tmp13; - tmp1 = tmp11 + tmp12; - tmp2 = tmp11 - tmp12; - - /* Odd part */ - - tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); - tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); - tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); - tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); - - z13 = tmp6 + tmp5; /* phase 6 */ - z10 = tmp6 - tmp5; - z11 = tmp4 + tmp7; - z12 = tmp4 - tmp7; - - tmp7 = z11 + z13; /* phase 5 */ - tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); /* 2*c4 */ - - z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */ - tmp10 = ((FAST_FLOAT) 1.082392200) * z12 - z5; /* 2*(c2-c6) */ - tmp12 = ((FAST_FLOAT) -2.613125930) * z10 + z5; /* -2*(c2+c6) */ - - tmp6 = tmp12 - tmp7; /* phase 2 */ - tmp5 = tmp11 - tmp6; - tmp4 = tmp10 + tmp5; - - wsptr[DCTSIZE*0] = tmp0 + tmp7; - wsptr[DCTSIZE*7] = tmp0 - tmp7; - wsptr[DCTSIZE*1] = tmp1 + tmp6; - wsptr[DCTSIZE*6] = tmp1 - tmp6; - wsptr[DCTSIZE*2] = tmp2 + tmp5; - wsptr[DCTSIZE*5] = tmp2 - tmp5; - wsptr[DCTSIZE*4] = tmp3 + tmp4; - wsptr[DCTSIZE*3] = tmp3 - tmp4; - - inptr++; /* advance pointers to next column */ - quantptr++; - wsptr++; - } - - /* Pass 2: process rows from work array, store into output array. */ - /* Note that we must descale the results by a factor of 8 == 2**3. */ - - wsptr = workspace; - for (ctr = 0; ctr < DCTSIZE; ctr++) { - outptr = output_buf[ctr] + output_col; - /* Rows of zeroes can be exploited in the same way as we did with columns. - * However, the column calculation has created many nonzero AC terms, so - * the simplification applies less often (typically 5% to 10% of the time). - * And testing floats for zero is relatively expensive, so we don't bother. - */ - - /* Even part */ - - tmp10 = wsptr[0] + wsptr[4]; - tmp11 = wsptr[0] - wsptr[4]; - - tmp13 = wsptr[2] + wsptr[6]; - tmp12 = (wsptr[2] - wsptr[6]) * ((FAST_FLOAT) 1.414213562) - tmp13; - - tmp0 = tmp10 + tmp13; - tmp3 = tmp10 - tmp13; - tmp1 = tmp11 + tmp12; - tmp2 = tmp11 - tmp12; - - /* Odd part */ - - z13 = wsptr[5] + wsptr[3]; - z10 = wsptr[5] - wsptr[3]; - z11 = wsptr[1] + wsptr[7]; - z12 = wsptr[1] - wsptr[7]; - - tmp7 = z11 + z13; - tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); - - z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */ - tmp10 = ((FAST_FLOAT) 1.082392200) * z12 - z5; /* 2*(c2-c6) */ - tmp12 = ((FAST_FLOAT) -2.613125930) * z10 + z5; /* -2*(c2+c6) */ - - tmp6 = tmp12 - tmp7; - tmp5 = tmp11 - tmp6; - tmp4 = tmp10 + tmp5; - - /* Final output stage: scale down by a factor of 8 and range-limit */ - - outptr[0] = range_limit[(int) DESCALE((INT32) (tmp0 + tmp7), 3) - & RANGE_MASK]; - outptr[7] = range_limit[(int) DESCALE((INT32) (tmp0 - tmp7), 3) - & RANGE_MASK]; - outptr[1] = range_limit[(int) DESCALE((INT32) (tmp1 + tmp6), 3) - & RANGE_MASK]; - outptr[6] = range_limit[(int) DESCALE((INT32) (tmp1 - tmp6), 3) - & RANGE_MASK]; - outptr[2] = range_limit[(int) DESCALE((INT32) (tmp2 + tmp5), 3) - & RANGE_MASK]; - outptr[5] = range_limit[(int) DESCALE((INT32) (tmp2 - tmp5), 3) - & RANGE_MASK]; - outptr[4] = range_limit[(int) DESCALE((INT32) (tmp3 + tmp4), 3) - & RANGE_MASK]; - outptr[3] = range_limit[(int) DESCALE((INT32) (tmp3 - tmp4), 3) - & RANGE_MASK]; - - wsptr += DCTSIZE; /* advance pointer to next row */ - } -} - -#endif /* DCT_FLOAT_SUPPORTED */ diff --git a/Build/source/libs/jpeg/jidctfst.c b/Build/source/libs/jpeg/jidctfst.c deleted file mode 100644 index dba4216fb95..00000000000 --- a/Build/source/libs/jpeg/jidctfst.c +++ /dev/null @@ -1,368 +0,0 @@ -/* - * jidctfst.c - * - * Copyright (C) 1994-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a fast, not so accurate integer implementation of the - * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine - * must also perform dequantization of the input coefficients. - * - * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT - * on each row (or vice versa, but it's more convenient to emit a row at - * a time). Direct algorithms are also available, but they are much more - * complex and seem not to be any faster when reduced to code. - * - * This implementation is based on Arai, Agui, and Nakajima's algorithm for - * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in - * Japanese, but the algorithm is described in the Pennebaker & Mitchell - * JPEG textbook (see REFERENCES section in file README). The following code - * is based directly on figure 4-8 in P&M. - * While an 8-point DCT cannot be done in less than 11 multiplies, it is - * possible to arrange the computation so that many of the multiplies are - * simple scalings of the final outputs. These multiplies can then be - * folded into the multiplications or divisions by the JPEG quantization - * table entries. The AA&N method leaves only 5 multiplies and 29 adds - * to be done in the DCT itself. - * The primary disadvantage of this method is that with fixed-point math, - * accuracy is lost due to imprecise representation of the scaled - * quantization values. The smaller the quantization table entry, the less - * precise the scaled value, so this implementation does worse with high- - * quality-setting files than with low-quality ones. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdct.h" /* Private declarations for DCT subsystem */ - -#ifdef DCT_IFAST_SUPPORTED - - -/* - * This module is specialized to the case DCTSIZE = 8. - */ - -#if DCTSIZE != 8 - Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ -#endif - - -/* Scaling decisions are generally the same as in the LL&M algorithm; - * see jidctint.c for more details. However, we choose to descale - * (right shift) multiplication products as soon as they are formed, - * rather than carrying additional fractional bits into subsequent additions. - * This compromises accuracy slightly, but it lets us save a few shifts. - * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples) - * everywhere except in the multiplications proper; this saves a good deal - * of work on 16-bit-int machines. - * - * The dequantized coefficients are not integers because the AA&N scaling - * factors have been incorporated. We represent them scaled up by PASS1_BITS, - * so that the first and second IDCT rounds have the same input scaling. - * For 8-bit JSAMPLEs, we choose IFAST_SCALE_BITS = PASS1_BITS so as to - * avoid a descaling shift; this compromises accuracy rather drastically - * for small quantization table entries, but it saves a lot of shifts. - * For 12-bit JSAMPLEs, there's no hope of using 16x16 multiplies anyway, - * so we use a much larger scaling factor to preserve accuracy. - * - * A final compromise is to represent the multiplicative constants to only - * 8 fractional bits, rather than 13. This saves some shifting work on some - * machines, and may also reduce the cost of multiplication (since there - * are fewer one-bits in the constants). - */ - -#if BITS_IN_JSAMPLE == 8 -#define CONST_BITS 8 -#define PASS1_BITS 2 -#else -#define CONST_BITS 8 -#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ -#endif - -/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus - * causing a lot of useless floating-point operations at run time. - * To get around this we use the following pre-calculated constants. - * If you change CONST_BITS you may want to add appropriate values. - * (With a reasonable C compiler, you can just rely on the FIX() macro...) - */ - -#if CONST_BITS == 8 -#define FIX_1_082392200 ((INT32) 277) /* FIX(1.082392200) */ -#define FIX_1_414213562 ((INT32) 362) /* FIX(1.414213562) */ -#define FIX_1_847759065 ((INT32) 473) /* FIX(1.847759065) */ -#define FIX_2_613125930 ((INT32) 669) /* FIX(2.613125930) */ -#else -#define FIX_1_082392200 FIX(1.082392200) -#define FIX_1_414213562 FIX(1.414213562) -#define FIX_1_847759065 FIX(1.847759065) -#define FIX_2_613125930 FIX(2.613125930) -#endif - - -/* We can gain a little more speed, with a further compromise in accuracy, - * by omitting the addition in a descaling shift. This yields an incorrectly - * rounded result half the time... - */ - -#ifndef USE_ACCURATE_ROUNDING -#undef DESCALE -#define DESCALE(x,n) RIGHT_SHIFT(x, n) -#endif - - -/* Multiply a DCTELEM variable by an INT32 constant, and immediately - * descale to yield a DCTELEM result. - */ - -#define MULTIPLY(var,const) ((DCTELEM) DESCALE((var) * (const), CONST_BITS)) - - -/* Dequantize a coefficient by multiplying it by the multiplier-table - * entry; produce a DCTELEM result. For 8-bit data a 16x16->16 - * multiplication will do. For 12-bit data, the multiplier table is - * declared INT32, so a 32-bit multiply will be used. - */ - -#if BITS_IN_JSAMPLE == 8 -#define DEQUANTIZE(coef,quantval) (((IFAST_MULT_TYPE) (coef)) * (quantval)) -#else -#define DEQUANTIZE(coef,quantval) \ - DESCALE((coef)*(quantval), IFAST_SCALE_BITS-PASS1_BITS) -#endif - - -/* Like DESCALE, but applies to a DCTELEM and produces an int. - * We assume that int right shift is unsigned if INT32 right shift is. - */ - -#ifdef RIGHT_SHIFT_IS_UNSIGNED -#define ISHIFT_TEMPS DCTELEM ishift_temp; -#if BITS_IN_JSAMPLE == 8 -#define DCTELEMBITS 16 /* DCTELEM may be 16 or 32 bits */ -#else -#define DCTELEMBITS 32 /* DCTELEM must be 32 bits */ -#endif -#define IRIGHT_SHIFT(x,shft) \ - ((ishift_temp = (x)) < 0 ? \ - (ishift_temp >> (shft)) | ((~((DCTELEM) 0)) << (DCTELEMBITS-(shft))) : \ - (ishift_temp >> (shft))) -#else -#define ISHIFT_TEMPS -#define IRIGHT_SHIFT(x,shft) ((x) >> (shft)) -#endif - -#ifdef USE_ACCURATE_ROUNDING -#define IDESCALE(x,n) ((int) IRIGHT_SHIFT((x) + (1 << ((n)-1)), n)) -#else -#define IDESCALE(x,n) ((int) IRIGHT_SHIFT(x, n)) -#endif - - -/* - * Perform dequantization and inverse DCT on one block of coefficients. - */ - -GLOBAL(void) -jpeg_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, - JSAMPARRAY output_buf, JDIMENSION output_col) -{ - DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; - DCTELEM tmp10, tmp11, tmp12, tmp13; - DCTELEM z5, z10, z11, z12, z13; - JCOEFPTR inptr; - IFAST_MULT_TYPE * quantptr; - int * wsptr; - JSAMPROW outptr; - JSAMPLE *range_limit = IDCT_range_limit(cinfo); - int ctr; - int workspace[DCTSIZE2]; /* buffers data between passes */ - SHIFT_TEMPS /* for DESCALE */ - ISHIFT_TEMPS /* for IDESCALE */ - - /* Pass 1: process columns from input, store into work array. */ - - inptr = coef_block; - quantptr = (IFAST_MULT_TYPE *) compptr->dct_table; - wsptr = workspace; - for (ctr = DCTSIZE; ctr > 0; ctr--) { - /* Due to quantization, we will usually find that many of the input - * coefficients are zero, especially the AC terms. We can exploit this - * by short-circuiting the IDCT calculation for any column in which all - * the AC terms are zero. In that case each output is equal to the - * DC coefficient (with scale factor as needed). - * With typical images and quantization tables, half or more of the - * column DCT calculations can be simplified this way. - */ - - if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && - inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && - inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && - inptr[DCTSIZE*7] == 0) { - /* AC terms all zero */ - int dcval = (int) DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); - - wsptr[DCTSIZE*0] = dcval; - wsptr[DCTSIZE*1] = dcval; - wsptr[DCTSIZE*2] = dcval; - wsptr[DCTSIZE*3] = dcval; - wsptr[DCTSIZE*4] = dcval; - wsptr[DCTSIZE*5] = dcval; - wsptr[DCTSIZE*6] = dcval; - wsptr[DCTSIZE*7] = dcval; - - inptr++; /* advance pointers to next column */ - quantptr++; - wsptr++; - continue; - } - - /* Even part */ - - tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); - tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); - tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); - tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); - - tmp10 = tmp0 + tmp2; /* phase 3 */ - tmp11 = tmp0 - tmp2; - - tmp13 = tmp1 + tmp3; /* phases 5-3 */ - tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; /* 2*c4 */ - - tmp0 = tmp10 + tmp13; /* phase 2 */ - tmp3 = tmp10 - tmp13; - tmp1 = tmp11 + tmp12; - tmp2 = tmp11 - tmp12; - - /* Odd part */ - - tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); - tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); - tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); - tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); - - z13 = tmp6 + tmp5; /* phase 6 */ - z10 = tmp6 - tmp5; - z11 = tmp4 + tmp7; - z12 = tmp4 - tmp7; - - tmp7 = z11 + z13; /* phase 5 */ - tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */ - - z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */ - tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ - tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ - - tmp6 = tmp12 - tmp7; /* phase 2 */ - tmp5 = tmp11 - tmp6; - tmp4 = tmp10 + tmp5; - - wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7); - wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7); - wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6); - wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6); - wsptr[DCTSIZE*2] = (int) (tmp2 + tmp5); - wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5); - wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4); - wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4); - - inptr++; /* advance pointers to next column */ - quantptr++; - wsptr++; - } - - /* Pass 2: process rows from work array, store into output array. */ - /* Note that we must descale the results by a factor of 8 == 2**3, */ - /* and also undo the PASS1_BITS scaling. */ - - wsptr = workspace; - for (ctr = 0; ctr < DCTSIZE; ctr++) { - outptr = output_buf[ctr] + output_col; - /* Rows of zeroes can be exploited in the same way as we did with columns. - * However, the column calculation has created many nonzero AC terms, so - * the simplification applies less often (typically 5% to 10% of the time). - * On machines with very fast multiplication, it's possible that the - * test takes more time than it's worth. In that case this section - * may be commented out. - */ - -#ifndef NO_ZERO_ROW_TEST - if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && - wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { - /* AC terms all zero */ - JSAMPLE dcval = range_limit[IDESCALE(wsptr[0], PASS1_BITS+3) - & RANGE_MASK]; - - outptr[0] = dcval; - outptr[1] = dcval; - outptr[2] = dcval; - outptr[3] = dcval; - outptr[4] = dcval; - outptr[5] = dcval; - outptr[6] = dcval; - outptr[7] = dcval; - - wsptr += DCTSIZE; /* advance pointer to next row */ - continue; - } -#endif - - /* Even part */ - - tmp10 = ((DCTELEM) wsptr[0] + (DCTELEM) wsptr[4]); - tmp11 = ((DCTELEM) wsptr[0] - (DCTELEM) wsptr[4]); - - tmp13 = ((DCTELEM) wsptr[2] + (DCTELEM) wsptr[6]); - tmp12 = MULTIPLY((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6], FIX_1_414213562) - - tmp13; - - tmp0 = tmp10 + tmp13; - tmp3 = tmp10 - tmp13; - tmp1 = tmp11 + tmp12; - tmp2 = tmp11 - tmp12; - - /* Odd part */ - - z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3]; - z10 = (DCTELEM) wsptr[5] - (DCTELEM) wsptr[3]; - z11 = (DCTELEM) wsptr[1] + (DCTELEM) wsptr[7]; - z12 = (DCTELEM) wsptr[1] - (DCTELEM) wsptr[7]; - - tmp7 = z11 + z13; /* phase 5 */ - tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */ - - z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */ - tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ - tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ - - tmp6 = tmp12 - tmp7; /* phase 2 */ - tmp5 = tmp11 - tmp6; - tmp4 = tmp10 + tmp5; - - /* Final output stage: scale down by a factor of 8 and range-limit */ - - outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3) - & RANGE_MASK]; - outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3) - & RANGE_MASK]; - outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3) - & RANGE_MASK]; - outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3) - & RANGE_MASK]; - outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3) - & RANGE_MASK]; - outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3) - & RANGE_MASK]; - outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3) - & RANGE_MASK]; - outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3) - & RANGE_MASK]; - - wsptr += DCTSIZE; /* advance pointer to next row */ - } -} - -#endif /* DCT_IFAST_SUPPORTED */ diff --git a/Build/source/libs/jpeg/jidctint.c b/Build/source/libs/jpeg/jidctint.c deleted file mode 100644 index a72b3207caf..00000000000 --- a/Build/source/libs/jpeg/jidctint.c +++ /dev/null @@ -1,389 +0,0 @@ -/* - * jidctint.c - * - * Copyright (C) 1991-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a slow-but-accurate integer implementation of the - * inverse DCT (Discrete Cosine Transform). In the IJG code, this routine - * must also perform dequantization of the input coefficients. - * - * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT - * on each row (or vice versa, but it's more convenient to emit a row at - * a time). Direct algorithms are also available, but they are much more - * complex and seem not to be any faster when reduced to code. - * - * This implementation is based on an algorithm described in - * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT - * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, - * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. - * The primary algorithm described there uses 11 multiplies and 29 adds. - * We use their alternate method with 12 multiplies and 32 adds. - * The advantage of this method is that no data path contains more than one - * multiplication; this allows a very simple and accurate implementation in - * scaled fixed-point arithmetic, with a minimal number of shifts. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdct.h" /* Private declarations for DCT subsystem */ - -#ifdef DCT_ISLOW_SUPPORTED - - -/* - * This module is specialized to the case DCTSIZE = 8. - */ - -#if DCTSIZE != 8 - Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ -#endif - - -/* - * The poop on this scaling stuff is as follows: - * - * Each 1-D IDCT step produces outputs which are a factor of sqrt(N) - * larger than the true IDCT outputs. The final outputs are therefore - * a factor of N larger than desired; since N=8 this can be cured by - * a simple right shift at the end of the algorithm. The advantage of - * this arrangement is that we save two multiplications per 1-D IDCT, - * because the y0 and y4 inputs need not be divided by sqrt(N). - * - * We have to do addition and subtraction of the integer inputs, which - * is no problem, and multiplication by fractional constants, which is - * a problem to do in integer arithmetic. We multiply all the constants - * by CONST_SCALE and convert them to integer constants (thus retaining - * CONST_BITS bits of precision in the constants). After doing a - * multiplication we have to divide the product by CONST_SCALE, with proper - * rounding, to produce the correct output. This division can be done - * cheaply as a right shift of CONST_BITS bits. We postpone shifting - * as long as possible so that partial sums can be added together with - * full fractional precision. - * - * The outputs of the first pass are scaled up by PASS1_BITS bits so that - * they are represented to better-than-integral precision. These outputs - * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word - * with the recommended scaling. (To scale up 12-bit sample data further, an - * intermediate INT32 array would be needed.) - * - * To avoid overflow of the 32-bit intermediate results in pass 2, we must - * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis - * shows that the values given below are the most effective. - */ - -#if BITS_IN_JSAMPLE == 8 -#define CONST_BITS 13 -#define PASS1_BITS 2 -#else -#define CONST_BITS 13 -#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ -#endif - -/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus - * causing a lot of useless floating-point operations at run time. - * To get around this we use the following pre-calculated constants. - * If you change CONST_BITS you may want to add appropriate values. - * (With a reasonable C compiler, you can just rely on the FIX() macro...) - */ - -#if CONST_BITS == 13 -#define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */ -#define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */ -#define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */ -#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ -#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ -#define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */ -#define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */ -#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ -#define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */ -#define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */ -#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ -#define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */ -#else -#define FIX_0_298631336 FIX(0.298631336) -#define FIX_0_390180644 FIX(0.390180644) -#define FIX_0_541196100 FIX(0.541196100) -#define FIX_0_765366865 FIX(0.765366865) -#define FIX_0_899976223 FIX(0.899976223) -#define FIX_1_175875602 FIX(1.175875602) -#define FIX_1_501321110 FIX(1.501321110) -#define FIX_1_847759065 FIX(1.847759065) -#define FIX_1_961570560 FIX(1.961570560) -#define FIX_2_053119869 FIX(2.053119869) -#define FIX_2_562915447 FIX(2.562915447) -#define FIX_3_072711026 FIX(3.072711026) -#endif - - -/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. - * For 8-bit samples with the recommended scaling, all the variable - * and constant values involved are no more than 16 bits wide, so a - * 16x16->32 bit multiply can be used instead of a full 32x32 multiply. - * For 12-bit samples, a full 32-bit multiplication will be needed. - */ - -#if BITS_IN_JSAMPLE == 8 -#define MULTIPLY(var,const) MULTIPLY16C16(var,const) -#else -#define MULTIPLY(var,const) ((var) * (const)) -#endif - - -/* Dequantize a coefficient by multiplying it by the multiplier-table - * entry; produce an int result. In this module, both inputs and result - * are 16 bits or less, so either int or short multiply will work. - */ - -#define DEQUANTIZE(coef,quantval) (((ISLOW_MULT_TYPE) (coef)) * (quantval)) - - -/* - * Perform dequantization and inverse DCT on one block of coefficients. - */ - -GLOBAL(void) -jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, - JSAMPARRAY output_buf, JDIMENSION output_col) -{ - INT32 tmp0, tmp1, tmp2, tmp3; - INT32 tmp10, tmp11, tmp12, tmp13; - INT32 z1, z2, z3, z4, z5; - JCOEFPTR inptr; - ISLOW_MULT_TYPE * quantptr; - int * wsptr; - JSAMPROW outptr; - JSAMPLE *range_limit = IDCT_range_limit(cinfo); - int ctr; - int workspace[DCTSIZE2]; /* buffers data between passes */ - SHIFT_TEMPS - - /* Pass 1: process columns from input, store into work array. */ - /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - - inptr = coef_block; - quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; - wsptr = workspace; - for (ctr = DCTSIZE; ctr > 0; ctr--) { - /* Due to quantization, we will usually find that many of the input - * coefficients are zero, especially the AC terms. We can exploit this - * by short-circuiting the IDCT calculation for any column in which all - * the AC terms are zero. In that case each output is equal to the - * DC coefficient (with scale factor as needed). - * With typical images and quantization tables, half or more of the - * column DCT calculations can be simplified this way. - */ - - if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && - inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && - inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && - inptr[DCTSIZE*7] == 0) { - /* AC terms all zero */ - int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; - - wsptr[DCTSIZE*0] = dcval; - wsptr[DCTSIZE*1] = dcval; - wsptr[DCTSIZE*2] = dcval; - wsptr[DCTSIZE*3] = dcval; - wsptr[DCTSIZE*4] = dcval; - wsptr[DCTSIZE*5] = dcval; - wsptr[DCTSIZE*6] = dcval; - wsptr[DCTSIZE*7] = dcval; - - inptr++; /* advance pointers to next column */ - quantptr++; - wsptr++; - continue; - } - - /* Even part: reverse the even part of the forward DCT. */ - /* The rotator is sqrt(2)*c(-6). */ - - z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); - z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); - - z1 = MULTIPLY(z2 + z3, FIX_0_541196100); - tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065); - tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865); - - z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); - z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); - - tmp0 = (z2 + z3) << CONST_BITS; - tmp1 = (z2 - z3) << CONST_BITS; - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - /* Odd part per figure 8; the matrix is unitary and hence its - * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. - */ - - tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); - tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); - tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); - tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); - - z1 = tmp0 + tmp3; - z2 = tmp1 + tmp2; - z3 = tmp0 + tmp2; - z4 = tmp1 + tmp3; - z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ - - tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ - tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ - z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ - - z3 += z5; - z4 += z5; - - tmp0 += z1 + z3; - tmp1 += z2 + z4; - tmp2 += z2 + z3; - tmp3 += z1 + z4; - - /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ - - wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp3, CONST_BITS-PASS1_BITS); - wsptr[DCTSIZE*7] = (int) DESCALE(tmp10 - tmp3, CONST_BITS-PASS1_BITS); - wsptr[DCTSIZE*1] = (int) DESCALE(tmp11 + tmp2, CONST_BITS-PASS1_BITS); - wsptr[DCTSIZE*6] = (int) DESCALE(tmp11 - tmp2, CONST_BITS-PASS1_BITS); - wsptr[DCTSIZE*2] = (int) DESCALE(tmp12 + tmp1, CONST_BITS-PASS1_BITS); - wsptr[DCTSIZE*5] = (int) DESCALE(tmp12 - tmp1, CONST_BITS-PASS1_BITS); - wsptr[DCTSIZE*3] = (int) DESCALE(tmp13 + tmp0, CONST_BITS-PASS1_BITS); - wsptr[DCTSIZE*4] = (int) DESCALE(tmp13 - tmp0, CONST_BITS-PASS1_BITS); - - inptr++; /* advance pointers to next column */ - quantptr++; - wsptr++; - } - - /* Pass 2: process rows from work array, store into output array. */ - /* Note that we must descale the results by a factor of 8 == 2**3, */ - /* and also undo the PASS1_BITS scaling. */ - - wsptr = workspace; - for (ctr = 0; ctr < DCTSIZE; ctr++) { - outptr = output_buf[ctr] + output_col; - /* Rows of zeroes can be exploited in the same way as we did with columns. - * However, the column calculation has created many nonzero AC terms, so - * the simplification applies less often (typically 5% to 10% of the time). - * On machines with very fast multiplication, it's possible that the - * test takes more time than it's worth. In that case this section - * may be commented out. - */ - -#ifndef NO_ZERO_ROW_TEST - if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && - wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { - /* AC terms all zero */ - JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) - & RANGE_MASK]; - - outptr[0] = dcval; - outptr[1] = dcval; - outptr[2] = dcval; - outptr[3] = dcval; - outptr[4] = dcval; - outptr[5] = dcval; - outptr[6] = dcval; - outptr[7] = dcval; - - wsptr += DCTSIZE; /* advance pointer to next row */ - continue; - } -#endif - - /* Even part: reverse the even part of the forward DCT. */ - /* The rotator is sqrt(2)*c(-6). */ - - z2 = (INT32) wsptr[2]; - z3 = (INT32) wsptr[6]; - - z1 = MULTIPLY(z2 + z3, FIX_0_541196100); - tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065); - tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865); - - tmp0 = ((INT32) wsptr[0] + (INT32) wsptr[4]) << CONST_BITS; - tmp1 = ((INT32) wsptr[0] - (INT32) wsptr[4]) << CONST_BITS; - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - /* Odd part per figure 8; the matrix is unitary and hence its - * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. - */ - - tmp0 = (INT32) wsptr[7]; - tmp1 = (INT32) wsptr[5]; - tmp2 = (INT32) wsptr[3]; - tmp3 = (INT32) wsptr[1]; - - z1 = tmp0 + tmp3; - z2 = tmp1 + tmp2; - z3 = tmp0 + tmp2; - z4 = tmp1 + tmp3; - z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ - - tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ - tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ - z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ - - z3 += z5; - z4 += z5; - - tmp0 += z1 + z3; - tmp1 += z2 + z4; - tmp2 += z2 + z3; - tmp3 += z1 + z4; - - /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ - - outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp3, - CONST_BITS+PASS1_BITS+3) - & RANGE_MASK]; - outptr[7] = range_limit[(int) DESCALE(tmp10 - tmp3, - CONST_BITS+PASS1_BITS+3) - & RANGE_MASK]; - outptr[1] = range_limit[(int) DESCALE(tmp11 + tmp2, - CONST_BITS+PASS1_BITS+3) - & RANGE_MASK]; - outptr[6] = range_limit[(int) DESCALE(tmp11 - tmp2, - CONST_BITS+PASS1_BITS+3) - & RANGE_MASK]; - outptr[2] = range_limit[(int) DESCALE(tmp12 + tmp1, - CONST_BITS+PASS1_BITS+3) - & RANGE_MASK]; - outptr[5] = range_limit[(int) DESCALE(tmp12 - tmp1, - CONST_BITS+PASS1_BITS+3) - & RANGE_MASK]; - outptr[3] = range_limit[(int) DESCALE(tmp13 + tmp0, - CONST_BITS+PASS1_BITS+3) - & RANGE_MASK]; - outptr[4] = range_limit[(int) DESCALE(tmp13 - tmp0, - CONST_BITS+PASS1_BITS+3) - & RANGE_MASK]; - - wsptr += DCTSIZE; /* advance pointer to next row */ - } -} - -#endif /* DCT_ISLOW_SUPPORTED */ diff --git a/Build/source/libs/jpeg/jidctred.c b/Build/source/libs/jpeg/jidctred.c deleted file mode 100644 index 421f3c7ca1e..00000000000 --- a/Build/source/libs/jpeg/jidctred.c +++ /dev/null @@ -1,398 +0,0 @@ -/* - * jidctred.c - * - * Copyright (C) 1994-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains inverse-DCT routines that produce reduced-size output: - * either 4x4, 2x2, or 1x1 pixels from an 8x8 DCT block. - * - * The implementation is based on the Loeffler, Ligtenberg and Moschytz (LL&M) - * algorithm used in jidctint.c. We simply replace each 8-to-8 1-D IDCT step - * with an 8-to-4 step that produces the four averages of two adjacent outputs - * (or an 8-to-2 step producing two averages of four outputs, for 2x2 output). - * These steps were derived by computing the corresponding values at the end - * of the normal LL&M code, then simplifying as much as possible. - * - * 1x1 is trivial: just take the DC coefficient divided by 8. - * - * See jidctint.c for additional comments. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdct.h" /* Private declarations for DCT subsystem */ - -#ifdef IDCT_SCALING_SUPPORTED - - -/* - * This module is specialized to the case DCTSIZE = 8. - */ - -#if DCTSIZE != 8 - Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ -#endif - - -/* Scaling is the same as in jidctint.c. */ - -#if BITS_IN_JSAMPLE == 8 -#define CONST_BITS 13 -#define PASS1_BITS 2 -#else -#define CONST_BITS 13 -#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ -#endif - -/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus - * causing a lot of useless floating-point operations at run time. - * To get around this we use the following pre-calculated constants. - * If you change CONST_BITS you may want to add appropriate values. - * (With a reasonable C compiler, you can just rely on the FIX() macro...) - */ - -#if CONST_BITS == 13 -#define FIX_0_211164243 ((INT32) 1730) /* FIX(0.211164243) */ -#define FIX_0_509795579 ((INT32) 4176) /* FIX(0.509795579) */ -#define FIX_0_601344887 ((INT32) 4926) /* FIX(0.601344887) */ -#define FIX_0_720959822 ((INT32) 5906) /* FIX(0.720959822) */ -#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ -#define FIX_0_850430095 ((INT32) 6967) /* FIX(0.850430095) */ -#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ -#define FIX_1_061594337 ((INT32) 8697) /* FIX(1.061594337) */ -#define FIX_1_272758580 ((INT32) 10426) /* FIX(1.272758580) */ -#define FIX_1_451774981 ((INT32) 11893) /* FIX(1.451774981) */ -#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ -#define FIX_2_172734803 ((INT32) 17799) /* FIX(2.172734803) */ -#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ -#define FIX_3_624509785 ((INT32) 29692) /* FIX(3.624509785) */ -#else -#define FIX_0_211164243 FIX(0.211164243) -#define FIX_0_509795579 FIX(0.509795579) -#define FIX_0_601344887 FIX(0.601344887) -#define FIX_0_720959822 FIX(0.720959822) -#define FIX_0_765366865 FIX(0.765366865) -#define FIX_0_850430095 FIX(0.850430095) -#define FIX_0_899976223 FIX(0.899976223) -#define FIX_1_061594337 FIX(1.061594337) -#define FIX_1_272758580 FIX(1.272758580) -#define FIX_1_451774981 FIX(1.451774981) -#define FIX_1_847759065 FIX(1.847759065) -#define FIX_2_172734803 FIX(2.172734803) -#define FIX_2_562915447 FIX(2.562915447) -#define FIX_3_624509785 FIX(3.624509785) -#endif - - -/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. - * For 8-bit samples with the recommended scaling, all the variable - * and constant values involved are no more than 16 bits wide, so a - * 16x16->32 bit multiply can be used instead of a full 32x32 multiply. - * For 12-bit samples, a full 32-bit multiplication will be needed. - */ - -#if BITS_IN_JSAMPLE == 8 -#define MULTIPLY(var,const) MULTIPLY16C16(var,const) -#else -#define MULTIPLY(var,const) ((var) * (const)) -#endif - - -/* Dequantize a coefficient by multiplying it by the multiplier-table - * entry; produce an int result. In this module, both inputs and result - * are 16 bits or less, so either int or short multiply will work. - */ - -#define DEQUANTIZE(coef,quantval) (((ISLOW_MULT_TYPE) (coef)) * (quantval)) - - -/* - * Perform dequantization and inverse DCT on one block of coefficients, - * producing a reduced-size 4x4 output block. - */ - -GLOBAL(void) -jpeg_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, - JSAMPARRAY output_buf, JDIMENSION output_col) -{ - INT32 tmp0, tmp2, tmp10, tmp12; - INT32 z1, z2, z3, z4; - JCOEFPTR inptr; - ISLOW_MULT_TYPE * quantptr; - int * wsptr; - JSAMPROW outptr; - JSAMPLE *range_limit = IDCT_range_limit(cinfo); - int ctr; - int workspace[DCTSIZE*4]; /* buffers data between passes */ - SHIFT_TEMPS - - /* Pass 1: process columns from input, store into work array. */ - - inptr = coef_block; - quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; - wsptr = workspace; - for (ctr = DCTSIZE; ctr > 0; inptr++, quantptr++, wsptr++, ctr--) { - /* Don't bother to process column 4, because second pass won't use it */ - if (ctr == DCTSIZE-4) - continue; - if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && - inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*5] == 0 && - inptr[DCTSIZE*6] == 0 && inptr[DCTSIZE*7] == 0) { - /* AC terms all zero; we need not examine term 4 for 4x4 output */ - int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; - - wsptr[DCTSIZE*0] = dcval; - wsptr[DCTSIZE*1] = dcval; - wsptr[DCTSIZE*2] = dcval; - wsptr[DCTSIZE*3] = dcval; - - continue; - } - - /* Even part */ - - tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); - tmp0 <<= (CONST_BITS+1); - - z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); - z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); - - tmp2 = MULTIPLY(z2, FIX_1_847759065) + MULTIPLY(z3, - FIX_0_765366865); - - tmp10 = tmp0 + tmp2; - tmp12 = tmp0 - tmp2; - - /* Odd part */ - - z1 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); - z2 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); - z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); - z4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); - - tmp0 = MULTIPLY(z1, - FIX_0_211164243) /* sqrt(2) * (c3-c1) */ - + MULTIPLY(z2, FIX_1_451774981) /* sqrt(2) * (c3+c7) */ - + MULTIPLY(z3, - FIX_2_172734803) /* sqrt(2) * (-c1-c5) */ - + MULTIPLY(z4, FIX_1_061594337); /* sqrt(2) * (c5+c7) */ - - tmp2 = MULTIPLY(z1, - FIX_0_509795579) /* sqrt(2) * (c7-c5) */ - + MULTIPLY(z2, - FIX_0_601344887) /* sqrt(2) * (c5-c1) */ - + MULTIPLY(z3, FIX_0_899976223) /* sqrt(2) * (c3-c7) */ - + MULTIPLY(z4, FIX_2_562915447); /* sqrt(2) * (c1+c3) */ - - /* Final output stage */ - - wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp2, CONST_BITS-PASS1_BITS+1); - wsptr[DCTSIZE*3] = (int) DESCALE(tmp10 - tmp2, CONST_BITS-PASS1_BITS+1); - wsptr[DCTSIZE*1] = (int) DESCALE(tmp12 + tmp0, CONST_BITS-PASS1_BITS+1); - wsptr[DCTSIZE*2] = (int) DESCALE(tmp12 - tmp0, CONST_BITS-PASS1_BITS+1); - } - - /* Pass 2: process 4 rows from work array, store into output array. */ - - wsptr = workspace; - for (ctr = 0; ctr < 4; ctr++) { - outptr = output_buf[ctr] + output_col; - /* It's not clear whether a zero row test is worthwhile here ... */ - -#ifndef NO_ZERO_ROW_TEST - if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && - wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { - /* AC terms all zero */ - JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) - & RANGE_MASK]; - - outptr[0] = dcval; - outptr[1] = dcval; - outptr[2] = dcval; - outptr[3] = dcval; - - wsptr += DCTSIZE; /* advance pointer to next row */ - continue; - } -#endif - - /* Even part */ - - tmp0 = ((INT32) wsptr[0]) << (CONST_BITS+1); - - tmp2 = MULTIPLY((INT32) wsptr[2], FIX_1_847759065) - + MULTIPLY((INT32) wsptr[6], - FIX_0_765366865); - - tmp10 = tmp0 + tmp2; - tmp12 = tmp0 - tmp2; - - /* Odd part */ - - z1 = (INT32) wsptr[7]; - z2 = (INT32) wsptr[5]; - z3 = (INT32) wsptr[3]; - z4 = (INT32) wsptr[1]; - - tmp0 = MULTIPLY(z1, - FIX_0_211164243) /* sqrt(2) * (c3-c1) */ - + MULTIPLY(z2, FIX_1_451774981) /* sqrt(2) * (c3+c7) */ - + MULTIPLY(z3, - FIX_2_172734803) /* sqrt(2) * (-c1-c5) */ - + MULTIPLY(z4, FIX_1_061594337); /* sqrt(2) * (c5+c7) */ - - tmp2 = MULTIPLY(z1, - FIX_0_509795579) /* sqrt(2) * (c7-c5) */ - + MULTIPLY(z2, - FIX_0_601344887) /* sqrt(2) * (c5-c1) */ - + MULTIPLY(z3, FIX_0_899976223) /* sqrt(2) * (c3-c7) */ - + MULTIPLY(z4, FIX_2_562915447); /* sqrt(2) * (c1+c3) */ - - /* Final output stage */ - - outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp2, - CONST_BITS+PASS1_BITS+3+1) - & RANGE_MASK]; - outptr[3] = range_limit[(int) DESCALE(tmp10 - tmp2, - CONST_BITS+PASS1_BITS+3+1) - & RANGE_MASK]; - outptr[1] = range_limit[(int) DESCALE(tmp12 + tmp0, - CONST_BITS+PASS1_BITS+3+1) - & RANGE_MASK]; - outptr[2] = range_limit[(int) DESCALE(tmp12 - tmp0, - CONST_BITS+PASS1_BITS+3+1) - & RANGE_MASK]; - - wsptr += DCTSIZE; /* advance pointer to next row */ - } -} - - -/* - * Perform dequantization and inverse DCT on one block of coefficients, - * producing a reduced-size 2x2 output block. - */ - -GLOBAL(void) -jpeg_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, - JSAMPARRAY output_buf, JDIMENSION output_col) -{ - INT32 tmp0, tmp10, z1; - JCOEFPTR inptr; - ISLOW_MULT_TYPE * quantptr; - int * wsptr; - JSAMPROW outptr; - JSAMPLE *range_limit = IDCT_range_limit(cinfo); - int ctr; - int workspace[DCTSIZE*2]; /* buffers data between passes */ - SHIFT_TEMPS - - /* Pass 1: process columns from input, store into work array. */ - - inptr = coef_block; - quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; - wsptr = workspace; - for (ctr = DCTSIZE; ctr > 0; inptr++, quantptr++, wsptr++, ctr--) { - /* Don't bother to process columns 2,4,6 */ - if (ctr == DCTSIZE-2 || ctr == DCTSIZE-4 || ctr == DCTSIZE-6) - continue; - if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*3] == 0 && - inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*7] == 0) { - /* AC terms all zero; we need not examine terms 2,4,6 for 2x2 output */ - int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; - - wsptr[DCTSIZE*0] = dcval; - wsptr[DCTSIZE*1] = dcval; - - continue; - } - - /* Even part */ - - z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); - tmp10 = z1 << (CONST_BITS+2); - - /* Odd part */ - - z1 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); - tmp0 = MULTIPLY(z1, - FIX_0_720959822); /* sqrt(2) * (c7-c5+c3-c1) */ - z1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); - tmp0 += MULTIPLY(z1, FIX_0_850430095); /* sqrt(2) * (-c1+c3+c5+c7) */ - z1 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); - tmp0 += MULTIPLY(z1, - FIX_1_272758580); /* sqrt(2) * (-c1+c3-c5-c7) */ - z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); - tmp0 += MULTIPLY(z1, FIX_3_624509785); /* sqrt(2) * (c1+c3+c5+c7) */ - - /* Final output stage */ - - wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp0, CONST_BITS-PASS1_BITS+2); - wsptr[DCTSIZE*1] = (int) DESCALE(tmp10 - tmp0, CONST_BITS-PASS1_BITS+2); - } - - /* Pass 2: process 2 rows from work array, store into output array. */ - - wsptr = workspace; - for (ctr = 0; ctr < 2; ctr++) { - outptr = output_buf[ctr] + output_col; - /* It's not clear whether a zero row test is worthwhile here ... */ - -#ifndef NO_ZERO_ROW_TEST - if (wsptr[1] == 0 && wsptr[3] == 0 && wsptr[5] == 0 && wsptr[7] == 0) { - /* AC terms all zero */ - JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) - & RANGE_MASK]; - - outptr[0] = dcval; - outptr[1] = dcval; - - wsptr += DCTSIZE; /* advance pointer to next row */ - continue; - } -#endif - - /* Even part */ - - tmp10 = ((INT32) wsptr[0]) << (CONST_BITS+2); - - /* Odd part */ - - tmp0 = MULTIPLY((INT32) wsptr[7], - FIX_0_720959822) /* sqrt(2) * (c7-c5+c3-c1) */ - + MULTIPLY((INT32) wsptr[5], FIX_0_850430095) /* sqrt(2) * (-c1+c3+c5+c7) */ - + MULTIPLY((INT32) wsptr[3], - FIX_1_272758580) /* sqrt(2) * (-c1+c3-c5-c7) */ - + MULTIPLY((INT32) wsptr[1], FIX_3_624509785); /* sqrt(2) * (c1+c3+c5+c7) */ - - /* Final output stage */ - - outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp0, - CONST_BITS+PASS1_BITS+3+2) - & RANGE_MASK]; - outptr[1] = range_limit[(int) DESCALE(tmp10 - tmp0, - CONST_BITS+PASS1_BITS+3+2) - & RANGE_MASK]; - - wsptr += DCTSIZE; /* advance pointer to next row */ - } -} - - -/* - * Perform dequantization and inverse DCT on one block of coefficients, - * producing a reduced-size 1x1 output block. - */ - -GLOBAL(void) -jpeg_idct_1x1 (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, - JSAMPARRAY output_buf, JDIMENSION output_col) -{ - int dcval; - ISLOW_MULT_TYPE * quantptr; - JSAMPLE *range_limit = IDCT_range_limit(cinfo); - SHIFT_TEMPS - - /* We hardly need an inverse DCT routine for this: just take the - * average pixel value, which is one-eighth of the DC coefficient. - */ - quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; - dcval = DEQUANTIZE(coef_block[0], quantptr[0]); - dcval = (int) DESCALE((INT32) dcval, 3); - - output_buf[0][output_col] = range_limit[dcval & RANGE_MASK]; -} - -#endif /* IDCT_SCALING_SUPPORTED */ diff --git a/Build/source/libs/jpeg/jinclude.h b/Build/source/libs/jpeg/jinclude.h deleted file mode 100644 index 0a4f15146ae..00000000000 --- a/Build/source/libs/jpeg/jinclude.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * jinclude.h - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file exists to provide a single place to fix any problems with - * including the wrong system include files. (Common problems are taken - * care of by the standard jconfig symbols, but on really weird systems - * you may have to edit this file.) - * - * NOTE: this file is NOT intended to be included by applications using the - * JPEG library. Most applications need only include jpeglib.h. - */ - - -/* Include auto-config file to find out which system include files we need. */ - -#include "jconfig.h" /* auto configuration options */ -#define JCONFIG_INCLUDED /* so that jpeglib.h doesn't do it again */ - -/* - * We need the NULL macro and size_t typedef. - * On an ANSI-conforming system it is sufficient to include . - * Otherwise, we get them from or ; we may have to - * pull in as well. - * Note that the core JPEG library does not require ; - * only the default error handler and data source/destination modules do. - * But we must pull it in because of the references to FILE in jpeglib.h. - * You can remove those references if you want to compile without . - */ - -#ifdef HAVE_STDDEF_H -#include -#endif - -#ifdef HAVE_STDLIB_H -#include -#endif - -#ifdef NEED_SYS_TYPES_H -#include -#endif - -#include - -/* - * We need memory copying and zeroing functions, plus strncpy(). - * ANSI and System V implementations declare these in . - * BSD doesn't have the mem() functions, but it does have bcopy()/bzero(). - * Some systems may declare memset and memcpy in . - * - * NOTE: we assume the size parameters to these functions are of type size_t. - * Change the casts in these macros if not! - */ - -#ifdef NEED_BSD_STRINGS - -#include -#define MEMZERO(target,size) bzero((void *)(target), (size_t)(size)) -#define MEMCOPY(dest,src,size) bcopy((const void *)(src), (void *)(dest), (size_t)(size)) - -#else /* not BSD, assume ANSI/SysV string lib */ - -#include -#define MEMZERO(target,size) memset((void *)(target), 0, (size_t)(size)) -#define MEMCOPY(dest,src,size) memcpy((void *)(dest), (const void *)(src), (size_t)(size)) - -#endif - -/* - * In ANSI C, and indeed any rational implementation, size_t is also the - * type returned by sizeof(). However, it seems there are some irrational - * implementations out there, in which sizeof() returns an int even though - * size_t is defined as long or unsigned long. To ensure consistent results - * we always use this SIZEOF() macro in place of using sizeof() directly. - */ - -#define SIZEOF(object) ((size_t) sizeof(object)) - -/* - * The modules that use fread() and fwrite() always invoke them through - * these macros. On some systems you may need to twiddle the argument casts. - * CAUTION: argument order is different from underlying functions! - */ - -#define JFREAD(file,buf,sizeofbuf) \ - ((size_t) fread((void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file))) -#define JFWRITE(file,buf,sizeofbuf) \ - ((size_t) fwrite((const void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file))) diff --git a/Build/source/libs/jpeg/jmemansi.c b/Build/source/libs/jpeg/jmemansi.c deleted file mode 100644 index 2d93e496251..00000000000 --- a/Build/source/libs/jpeg/jmemansi.c +++ /dev/null @@ -1,167 +0,0 @@ -/* - * jmemansi.c - * - * Copyright (C) 1992-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file provides a simple generic implementation of the system- - * dependent portion of the JPEG memory manager. This implementation - * assumes that you have the ANSI-standard library routine tmpfile(). - * Also, the problem of determining the amount of memory available - * is shoved onto the user. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jmemsys.h" /* import the system-dependent declarations */ - -#ifndef HAVE_STDLIB_H /* should declare malloc(),free() */ -extern void * malloc JPP((size_t size)); -extern void free JPP((void *ptr)); -#endif - -#ifndef SEEK_SET /* pre-ANSI systems may not define this; */ -#define SEEK_SET 0 /* if not, assume 0 is correct */ -#endif - - -/* - * Memory allocation and freeing are controlled by the regular library - * routines malloc() and free(). - */ - -GLOBAL(void *) -jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void *) malloc(sizeofobject); -} - -GLOBAL(void) -jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) -{ - free(object); -} - - -/* - * "Large" objects are treated the same as "small" ones. - * NB: although we include FAR keywords in the routine declarations, - * this file won't actually work in 80x86 small/medium model; at least, - * you probably won't be able to process useful-size images in only 64KB. - */ - -GLOBAL(void FAR *) -jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void FAR *) malloc(sizeofobject); -} - -GLOBAL(void) -jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) -{ - free(object); -} - - -/* - * This routine computes the total memory space available for allocation. - * It's impossible to do this in a portable way; our current solution is - * to make the user tell us (with a default value set at compile time). - * If you can actually get the available space, it's a good idea to subtract - * a slop factor of 5% or so. - */ - -#ifndef DEFAULT_MAX_MEM /* so can override from makefile */ -#define DEFAULT_MAX_MEM 1000000L /* default: one megabyte */ -#endif - -GLOBAL(long) -jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, - long max_bytes_needed, long already_allocated) -{ - return cinfo->mem->max_memory_to_use - already_allocated; -} - - -/* - * Backing store (temporary file) management. - * Backing store objects are only used when the value returned by - * jpeg_mem_available is less than the total space needed. You can dispense - * with these routines if you have plenty of virtual memory; see jmemnobs.c. - */ - - -METHODDEF(void) -read_backing_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - if (fseek(info->temp_file, file_offset, SEEK_SET)) - ERREXIT(cinfo, JERR_TFILE_SEEK); - if (JFREAD(info->temp_file, buffer_address, byte_count) - != (size_t) byte_count) - ERREXIT(cinfo, JERR_TFILE_READ); -} - - -METHODDEF(void) -write_backing_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - if (fseek(info->temp_file, file_offset, SEEK_SET)) - ERREXIT(cinfo, JERR_TFILE_SEEK); - if (JFWRITE(info->temp_file, buffer_address, byte_count) - != (size_t) byte_count) - ERREXIT(cinfo, JERR_TFILE_WRITE); -} - - -METHODDEF(void) -close_backing_store (j_common_ptr cinfo, backing_store_ptr info) -{ - fclose(info->temp_file); - /* Since this implementation uses tmpfile() to create the file, - * no explicit file deletion is needed. - */ -} - - -/* - * Initial opening of a backing-store object. - * - * This version uses tmpfile(), which constructs a suitable file name - * behind the scenes. We don't have to use info->temp_name[] at all; - * indeed, we can't even find out the actual name of the temp file. - */ - -GLOBAL(void) -jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - if ((info->temp_file = tmpfile()) == NULL) - ERREXITS(cinfo, JERR_TFILE_CREATE, ""); - info->read_backing_store = read_backing_store; - info->write_backing_store = write_backing_store; - info->close_backing_store = close_backing_store; -} - - -/* - * These routines take care of any system-dependent initialization and - * cleanup required. - */ - -GLOBAL(long) -jpeg_mem_init (j_common_ptr cinfo) -{ - return DEFAULT_MAX_MEM; /* default for max_memory_to_use */ -} - -GLOBAL(void) -jpeg_mem_term (j_common_ptr cinfo) -{ - /* no work */ -} diff --git a/Build/source/libs/jpeg/jmemdos.c b/Build/source/libs/jpeg/jmemdos.c deleted file mode 100644 index 60b45c69388..00000000000 --- a/Build/source/libs/jpeg/jmemdos.c +++ /dev/null @@ -1,638 +0,0 @@ -/* - * jmemdos.c - * - * Copyright (C) 1992-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file provides an MS-DOS-compatible implementation of the system- - * dependent portion of the JPEG memory manager. Temporary data can be - * stored in extended or expanded memory as well as in regular DOS files. - * - * If you use this file, you must be sure that NEED_FAR_POINTERS is defined - * if you compile in a small-data memory model; it should NOT be defined if - * you use a large-data memory model. This file is not recommended if you - * are using a flat-memory-space 386 environment such as DJGCC or Watcom C. - * Also, this code will NOT work if struct fields are aligned on greater than - * 2-byte boundaries. - * - * Based on code contributed by Ge' Weijers. - */ - -/* - * If you have both extended and expanded memory, you may want to change the - * order in which they are tried in jopen_backing_store. On a 286 machine - * expanded memory is usually faster, since extended memory access involves - * an expensive protected-mode-and-back switch. On 386 and better, extended - * memory is usually faster. As distributed, the code tries extended memory - * first (what? not everyone has a 386? :-). - * - * You can disable use of extended/expanded memory entirely by altering these - * definitions or overriding them from the Makefile (eg, -DEMS_SUPPORTED=0). - */ - -#ifndef XMS_SUPPORTED -#define XMS_SUPPORTED 1 -#endif -#ifndef EMS_SUPPORTED -#define EMS_SUPPORTED 1 -#endif - - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jmemsys.h" /* import the system-dependent declarations */ - -#ifndef HAVE_STDLIB_H /* should declare these */ -extern void * malloc JPP((size_t size)); -extern void free JPP((void *ptr)); -extern char * getenv JPP((const char * name)); -#endif - -#ifdef NEED_FAR_POINTERS - -#ifdef __TURBOC__ -/* These definitions work for Borland C (Turbo C) */ -#include /* need farmalloc(), farfree() */ -#define far_malloc(x) farmalloc(x) -#define far_free(x) farfree(x) -#else -/* These definitions work for Microsoft C and compatible compilers */ -#include /* need _fmalloc(), _ffree() */ -#define far_malloc(x) _fmalloc(x) -#define far_free(x) _ffree(x) -#endif - -#else /* not NEED_FAR_POINTERS */ - -#define far_malloc(x) malloc(x) -#define far_free(x) free(x) - -#endif /* NEED_FAR_POINTERS */ - -#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ -#define READ_BINARY "r" -#else -#define READ_BINARY "rb" -#endif - -#ifndef USE_MSDOS_MEMMGR /* make sure user got configuration right */ - You forgot to define USE_MSDOS_MEMMGR in jconfig.h. /* deliberate syntax error */ -#endif - -#if MAX_ALLOC_CHUNK >= 65535L /* make sure jconfig.h got this right */ - MAX_ALLOC_CHUNK should be less than 64K. /* deliberate syntax error */ -#endif - - -/* - * Declarations for assembly-language support routines (see jmemdosa.asm). - * - * The functions are declared "far" as are all their pointer arguments; - * this ensures the assembly source code will work regardless of the - * compiler memory model. We assume "short" is 16 bits, "long" is 32. - */ - -typedef void far * XMSDRIVER; /* actually a pointer to code */ -typedef struct { /* registers for calling XMS driver */ - unsigned short ax, dx, bx; - void far * ds_si; - } XMScontext; -typedef struct { /* registers for calling EMS driver */ - unsigned short ax, dx, bx; - void far * ds_si; - } EMScontext; - -extern short far jdos_open JPP((short far * handle, char far * filename)); -extern short far jdos_close JPP((short handle)); -extern short far jdos_seek JPP((short handle, long offset)); -extern short far jdos_read JPP((short handle, void far * buffer, - unsigned short count)); -extern short far jdos_write JPP((short handle, void far * buffer, - unsigned short count)); -extern void far jxms_getdriver JPP((XMSDRIVER far *)); -extern void far jxms_calldriver JPP((XMSDRIVER, XMScontext far *)); -extern short far jems_available JPP((void)); -extern void far jems_calldriver JPP((EMScontext far *)); - - -/* - * Selection of a file name for a temporary file. - * This is highly system-dependent, and you may want to customize it. - */ - -static int next_file_num; /* to distinguish among several temp files */ - -LOCAL(void) -select_file_name (char * fname) -{ - const char * env; - char * ptr; - FILE * tfile; - - /* Keep generating file names till we find one that's not in use */ - for (;;) { - /* Get temp directory name from environment TMP or TEMP variable; - * if none, use "." - */ - if ((env = (const char *) getenv("TMP")) == NULL) - if ((env = (const char *) getenv("TEMP")) == NULL) - env = "."; - if (*env == '\0') /* null string means "." */ - env = "."; - ptr = fname; /* copy name to fname */ - while (*env != '\0') - *ptr++ = *env++; - if (ptr[-1] != '\\' && ptr[-1] != '/') - *ptr++ = '\\'; /* append backslash if not in env variable */ - /* Append a suitable file name */ - next_file_num++; /* advance counter */ - sprintf(ptr, "JPG%03d.TMP", next_file_num); - /* Probe to see if file name is already in use */ - if ((tfile = fopen(fname, READ_BINARY)) == NULL) - break; - fclose(tfile); /* oops, it's there; close tfile & try again */ - } -} - - -/* - * Near-memory allocation and freeing are controlled by the regular library - * routines malloc() and free(). - */ - -GLOBAL(void *) -jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void *) malloc(sizeofobject); -} - -GLOBAL(void) -jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) -{ - free(object); -} - - -/* - * "Large" objects are allocated in far memory, if possible - */ - -GLOBAL(void FAR *) -jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void FAR *) far_malloc(sizeofobject); -} - -GLOBAL(void) -jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) -{ - far_free(object); -} - - -/* - * This routine computes the total memory space available for allocation. - * It's impossible to do this in a portable way; our current solution is - * to make the user tell us (with a default value set at compile time). - * If you can actually get the available space, it's a good idea to subtract - * a slop factor of 5% or so. - */ - -#ifndef DEFAULT_MAX_MEM /* so can override from makefile */ -#define DEFAULT_MAX_MEM 300000L /* for total usage about 450K */ -#endif - -GLOBAL(long) -jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, - long max_bytes_needed, long already_allocated) -{ - return cinfo->mem->max_memory_to_use - already_allocated; -} - - -/* - * Backing store (temporary file) management. - * Backing store objects are only used when the value returned by - * jpeg_mem_available is less than the total space needed. You can dispense - * with these routines if you have plenty of virtual memory; see jmemnobs.c. - */ - -/* - * For MS-DOS we support three types of backing storage: - * 1. Conventional DOS files. We access these by direct DOS calls rather - * than via the stdio package. This provides a bit better performance, - * but the real reason is that the buffers to be read or written are FAR. - * The stdio library for small-data memory models can't cope with that. - * 2. Extended memory, accessed per the XMS V2.0 specification. - * 3. Expanded memory, accessed per the LIM/EMS 4.0 specification. - * You'll need copies of those specs to make sense of the related code. - * The specs are available by Internet FTP from the SIMTEL archives - * (oak.oakland.edu and its various mirror sites). See files - * pub/msdos/microsoft/xms20.arc and pub/msdos/info/limems41.zip. - */ - - -/* - * Access methods for a DOS file. - */ - - -METHODDEF(void) -read_file_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - if (jdos_seek(info->handle.file_handle, file_offset)) - ERREXIT(cinfo, JERR_TFILE_SEEK); - /* Since MAX_ALLOC_CHUNK is less than 64K, byte_count will be too. */ - if (byte_count > 65535L) /* safety check */ - ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); - if (jdos_read(info->handle.file_handle, buffer_address, - (unsigned short) byte_count)) - ERREXIT(cinfo, JERR_TFILE_READ); -} - - -METHODDEF(void) -write_file_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - if (jdos_seek(info->handle.file_handle, file_offset)) - ERREXIT(cinfo, JERR_TFILE_SEEK); - /* Since MAX_ALLOC_CHUNK is less than 64K, byte_count will be too. */ - if (byte_count > 65535L) /* safety check */ - ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); - if (jdos_write(info->handle.file_handle, buffer_address, - (unsigned short) byte_count)) - ERREXIT(cinfo, JERR_TFILE_WRITE); -} - - -METHODDEF(void) -close_file_store (j_common_ptr cinfo, backing_store_ptr info) -{ - jdos_close(info->handle.file_handle); /* close the file */ - remove(info->temp_name); /* delete the file */ -/* If your system doesn't have remove(), try unlink() instead. - * remove() is the ANSI-standard name for this function, but - * unlink() was more common in pre-ANSI systems. - */ - TRACEMSS(cinfo, 1, JTRC_TFILE_CLOSE, info->temp_name); -} - - -LOCAL(boolean) -open_file_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - short handle; - - select_file_name(info->temp_name); - if (jdos_open((short far *) & handle, (char far *) info->temp_name)) { - /* might as well exit since jpeg_open_backing_store will fail anyway */ - ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); - return FALSE; - } - info->handle.file_handle = handle; - info->read_backing_store = read_file_store; - info->write_backing_store = write_file_store; - info->close_backing_store = close_file_store; - TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name); - return TRUE; /* succeeded */ -} - - -/* - * Access methods for extended memory. - */ - -#if XMS_SUPPORTED - -static XMSDRIVER xms_driver; /* saved address of XMS driver */ - -typedef union { /* either long offset or real-mode pointer */ - long offset; - void far * ptr; - } XMSPTR; - -typedef struct { /* XMS move specification structure */ - long length; - XMSH src_handle; - XMSPTR src; - XMSH dst_handle; - XMSPTR dst; - } XMSspec; - -#define ODD(X) (((X) & 1L) != 0) - - -METHODDEF(void) -read_xms_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - XMScontext ctx; - XMSspec spec; - char endbuffer[2]; - - /* The XMS driver can't cope with an odd length, so handle the last byte - * specially if byte_count is odd. We don't expect this to be common. - */ - - spec.length = byte_count & (~ 1L); - spec.src_handle = info->handle.xms_handle; - spec.src.offset = file_offset; - spec.dst_handle = 0; - spec.dst.ptr = buffer_address; - - ctx.ds_si = (void far *) & spec; - ctx.ax = 0x0b00; /* EMB move */ - jxms_calldriver(xms_driver, (XMScontext far *) & ctx); - if (ctx.ax != 1) - ERREXIT(cinfo, JERR_XMS_READ); - - if (ODD(byte_count)) { - read_xms_store(cinfo, info, (void FAR *) endbuffer, - file_offset + byte_count - 1L, 2L); - ((char FAR *) buffer_address)[byte_count - 1L] = endbuffer[0]; - } -} - - -METHODDEF(void) -write_xms_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - XMScontext ctx; - XMSspec spec; - char endbuffer[2]; - - /* The XMS driver can't cope with an odd length, so handle the last byte - * specially if byte_count is odd. We don't expect this to be common. - */ - - spec.length = byte_count & (~ 1L); - spec.src_handle = 0; - spec.src.ptr = buffer_address; - spec.dst_handle = info->handle.xms_handle; - spec.dst.offset = file_offset; - - ctx.ds_si = (void far *) & spec; - ctx.ax = 0x0b00; /* EMB move */ - jxms_calldriver(xms_driver, (XMScontext far *) & ctx); - if (ctx.ax != 1) - ERREXIT(cinfo, JERR_XMS_WRITE); - - if (ODD(byte_count)) { - read_xms_store(cinfo, info, (void FAR *) endbuffer, - file_offset + byte_count - 1L, 2L); - endbuffer[0] = ((char FAR *) buffer_address)[byte_count - 1L]; - write_xms_store(cinfo, info, (void FAR *) endbuffer, - file_offset + byte_count - 1L, 2L); - } -} - - -METHODDEF(void) -close_xms_store (j_common_ptr cinfo, backing_store_ptr info) -{ - XMScontext ctx; - - ctx.dx = info->handle.xms_handle; - ctx.ax = 0x0a00; - jxms_calldriver(xms_driver, (XMScontext far *) & ctx); - TRACEMS1(cinfo, 1, JTRC_XMS_CLOSE, info->handle.xms_handle); - /* we ignore any error return from the driver */ -} - - -LOCAL(boolean) -open_xms_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - XMScontext ctx; - - /* Get address of XMS driver */ - jxms_getdriver((XMSDRIVER far *) & xms_driver); - if (xms_driver == NULL) - return FALSE; /* no driver to be had */ - - /* Get version number, must be >= 2.00 */ - ctx.ax = 0x0000; - jxms_calldriver(xms_driver, (XMScontext far *) & ctx); - if (ctx.ax < (unsigned short) 0x0200) - return FALSE; - - /* Try to get space (expressed in kilobytes) */ - ctx.dx = (unsigned short) ((total_bytes_needed + 1023L) >> 10); - ctx.ax = 0x0900; - jxms_calldriver(xms_driver, (XMScontext far *) & ctx); - if (ctx.ax != 1) - return FALSE; - - /* Succeeded, save the handle and away we go */ - info->handle.xms_handle = ctx.dx; - info->read_backing_store = read_xms_store; - info->write_backing_store = write_xms_store; - info->close_backing_store = close_xms_store; - TRACEMS1(cinfo, 1, JTRC_XMS_OPEN, ctx.dx); - return TRUE; /* succeeded */ -} - -#endif /* XMS_SUPPORTED */ - - -/* - * Access methods for expanded memory. - */ - -#if EMS_SUPPORTED - -/* The EMS move specification structure requires word and long fields aligned - * at odd byte boundaries. Some compilers will align struct fields at even - * byte boundaries. While it's usually possible to force byte alignment, - * that causes an overall performance penalty and may pose problems in merging - * JPEG into a larger application. Instead we accept some rather dirty code - * here. Note this code would fail if the hardware did not allow odd-byte - * word & long accesses, but all 80x86 CPUs do. - */ - -typedef void far * EMSPTR; - -typedef union { /* EMS move specification structure */ - long length; /* It's easy to access first 4 bytes */ - char bytes[18]; /* Misaligned fields in here! */ - } EMSspec; - -/* Macros for accessing misaligned fields */ -#define FIELD_AT(spec,offset,type) (*((type *) &(spec.bytes[offset]))) -#define SRC_TYPE(spec) FIELD_AT(spec,4,char) -#define SRC_HANDLE(spec) FIELD_AT(spec,5,EMSH) -#define SRC_OFFSET(spec) FIELD_AT(spec,7,unsigned short) -#define SRC_PAGE(spec) FIELD_AT(spec,9,unsigned short) -#define SRC_PTR(spec) FIELD_AT(spec,7,EMSPTR) -#define DST_TYPE(spec) FIELD_AT(spec,11,char) -#define DST_HANDLE(spec) FIELD_AT(spec,12,EMSH) -#define DST_OFFSET(spec) FIELD_AT(spec,14,unsigned short) -#define DST_PAGE(spec) FIELD_AT(spec,16,unsigned short) -#define DST_PTR(spec) FIELD_AT(spec,14,EMSPTR) - -#define EMSPAGESIZE 16384L /* gospel, see the EMS specs */ - -#define HIBYTE(W) (((W) >> 8) & 0xFF) -#define LOBYTE(W) ((W) & 0xFF) - - -METHODDEF(void) -read_ems_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - EMScontext ctx; - EMSspec spec; - - spec.length = byte_count; - SRC_TYPE(spec) = 1; - SRC_HANDLE(spec) = info->handle.ems_handle; - SRC_PAGE(spec) = (unsigned short) (file_offset / EMSPAGESIZE); - SRC_OFFSET(spec) = (unsigned short) (file_offset % EMSPAGESIZE); - DST_TYPE(spec) = 0; - DST_HANDLE(spec) = 0; - DST_PTR(spec) = buffer_address; - - ctx.ds_si = (void far *) & spec; - ctx.ax = 0x5700; /* move memory region */ - jems_calldriver((EMScontext far *) & ctx); - if (HIBYTE(ctx.ax) != 0) - ERREXIT(cinfo, JERR_EMS_READ); -} - - -METHODDEF(void) -write_ems_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - EMScontext ctx; - EMSspec spec; - - spec.length = byte_count; - SRC_TYPE(spec) = 0; - SRC_HANDLE(spec) = 0; - SRC_PTR(spec) = buffer_address; - DST_TYPE(spec) = 1; - DST_HANDLE(spec) = info->handle.ems_handle; - DST_PAGE(spec) = (unsigned short) (file_offset / EMSPAGESIZE); - DST_OFFSET(spec) = (unsigned short) (file_offset % EMSPAGESIZE); - - ctx.ds_si = (void far *) & spec; - ctx.ax = 0x5700; /* move memory region */ - jems_calldriver((EMScontext far *) & ctx); - if (HIBYTE(ctx.ax) != 0) - ERREXIT(cinfo, JERR_EMS_WRITE); -} - - -METHODDEF(void) -close_ems_store (j_common_ptr cinfo, backing_store_ptr info) -{ - EMScontext ctx; - - ctx.ax = 0x4500; - ctx.dx = info->handle.ems_handle; - jems_calldriver((EMScontext far *) & ctx); - TRACEMS1(cinfo, 1, JTRC_EMS_CLOSE, info->handle.ems_handle); - /* we ignore any error return from the driver */ -} - - -LOCAL(boolean) -open_ems_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - EMScontext ctx; - - /* Is EMS driver there? */ - if (! jems_available()) - return FALSE; - - /* Get status, make sure EMS is OK */ - ctx.ax = 0x4000; - jems_calldriver((EMScontext far *) & ctx); - if (HIBYTE(ctx.ax) != 0) - return FALSE; - - /* Get version, must be >= 4.0 */ - ctx.ax = 0x4600; - jems_calldriver((EMScontext far *) & ctx); - if (HIBYTE(ctx.ax) != 0 || LOBYTE(ctx.ax) < 0x40) - return FALSE; - - /* Try to allocate requested space */ - ctx.ax = 0x4300; - ctx.bx = (unsigned short) ((total_bytes_needed + EMSPAGESIZE-1L) / EMSPAGESIZE); - jems_calldriver((EMScontext far *) & ctx); - if (HIBYTE(ctx.ax) != 0) - return FALSE; - - /* Succeeded, save the handle and away we go */ - info->handle.ems_handle = ctx.dx; - info->read_backing_store = read_ems_store; - info->write_backing_store = write_ems_store; - info->close_backing_store = close_ems_store; - TRACEMS1(cinfo, 1, JTRC_EMS_OPEN, ctx.dx); - return TRUE; /* succeeded */ -} - -#endif /* EMS_SUPPORTED */ - - -/* - * Initial opening of a backing-store object. - */ - -GLOBAL(void) -jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - /* Try extended memory, then expanded memory, then regular file. */ -#if XMS_SUPPORTED - if (open_xms_store(cinfo, info, total_bytes_needed)) - return; -#endif -#if EMS_SUPPORTED - if (open_ems_store(cinfo, info, total_bytes_needed)) - return; -#endif - if (open_file_store(cinfo, info, total_bytes_needed)) - return; - ERREXITS(cinfo, JERR_TFILE_CREATE, ""); -} - - -/* - * These routines take care of any system-dependent initialization and - * cleanup required. - */ - -GLOBAL(long) -jpeg_mem_init (j_common_ptr cinfo) -{ - next_file_num = 0; /* initialize temp file name generator */ - return DEFAULT_MAX_MEM; /* default for max_memory_to_use */ -} - -GLOBAL(void) -jpeg_mem_term (j_common_ptr cinfo) -{ - /* Microsoft C, at least in v6.00A, will not successfully reclaim freed - * blocks of size > 32Kbytes unless we give it a kick in the rear, like so: - */ -#ifdef NEED_FHEAPMIN - _fheapmin(); -#endif -} diff --git a/Build/source/libs/jpeg/jmemdosa.asm b/Build/source/libs/jpeg/jmemdosa.asm deleted file mode 100644 index ecd43729fe5..00000000000 --- a/Build/source/libs/jpeg/jmemdosa.asm +++ /dev/null @@ -1,379 +0,0 @@ -; -; jmemdosa.asm -; -; Copyright (C) 1992, Thomas G. Lane. -; This file is part of the Independent JPEG Group's software. -; For conditions of distribution and use, see the accompanying README file. -; -; This file contains low-level interface routines to support the MS-DOS -; backing store manager (jmemdos.c). Routines are provided to access disk -; files through direct DOS calls, and to access XMS and EMS drivers. -; -; This file should assemble with Microsoft's MASM or any compatible -; assembler (including Borland's Turbo Assembler). If you haven't got -; a compatible assembler, better fall back to jmemansi.c or jmemname.c. -; -; To minimize dependence on the C compiler's register usage conventions, -; we save and restore all 8086 registers, even though most compilers only -; require SI,DI,DS to be preserved. Also, we use only 16-bit-wide return -; values, which everybody returns in AX. -; -; Based on code contributed by Ge' Weijers. -; - -JMEMDOSA_TXT segment byte public 'CODE' - - assume cs:JMEMDOSA_TXT - - public _jdos_open - public _jdos_close - public _jdos_seek - public _jdos_read - public _jdos_write - public _jxms_getdriver - public _jxms_calldriver - public _jems_available - public _jems_calldriver - -; -; short far jdos_open (short far * handle, char far * filename) -; -; Create and open a temporary file -; -_jdos_open proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - mov cx,0 ; normal file attributes - lds dx,dword ptr [bp+10] ; get filename pointer - mov ah,3ch ; create file - int 21h - jc open_err ; if failed, return error code - lds bx,dword ptr [bp+6] ; get handle pointer - mov word ptr [bx],ax ; save the handle - xor ax,ax ; return zero for OK -open_err: pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jdos_open endp - - -; -; short far jdos_close (short handle) -; -; Close the file handle -; -_jdos_close proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - mov bx,word ptr [bp+6] ; file handle - mov ah,3eh ; close file - int 21h - jc close_err ; if failed, return error code - xor ax,ax ; return zero for OK -close_err: pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jdos_close endp - - -; -; short far jdos_seek (short handle, long offset) -; -; Set file position -; -_jdos_seek proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - mov bx,word ptr [bp+6] ; file handle - mov dx,word ptr [bp+8] ; LS offset - mov cx,word ptr [bp+10] ; MS offset - mov ax,4200h ; absolute seek - int 21h - jc seek_err ; if failed, return error code - xor ax,ax ; return zero for OK -seek_err: pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jdos_seek endp - - -; -; short far jdos_read (short handle, void far * buffer, unsigned short count) -; -; Read from file -; -_jdos_read proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - mov bx,word ptr [bp+6] ; file handle - lds dx,dword ptr [bp+8] ; buffer address - mov cx,word ptr [bp+12] ; number of bytes - mov ah,3fh ; read file - int 21h - jc read_err ; if failed, return error code - cmp ax,word ptr [bp+12] ; make sure all bytes were read - je read_ok - mov ax,1 ; else return 1 for not OK - jmp short read_err -read_ok: xor ax,ax ; return zero for OK -read_err: pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jdos_read endp - - -; -; short far jdos_write (short handle, void far * buffer, unsigned short count) -; -; Write to file -; -_jdos_write proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - mov bx,word ptr [bp+6] ; file handle - lds dx,dword ptr [bp+8] ; buffer address - mov cx,word ptr [bp+12] ; number of bytes - mov ah,40h ; write file - int 21h - jc write_err ; if failed, return error code - cmp ax,word ptr [bp+12] ; make sure all bytes written - je write_ok - mov ax,1 ; else return 1 for not OK - jmp short write_err -write_ok: xor ax,ax ; return zero for OK -write_err: pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jdos_write endp - - -; -; void far jxms_getdriver (XMSDRIVER far *) -; -; Get the address of the XMS driver, or NULL if not available -; -_jxms_getdriver proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - mov ax,4300h ; call multiplex interrupt with - int 2fh ; a magic cookie, hex 4300 - cmp al,80h ; AL should contain hex 80 - je xmsavail - xor dx,dx ; no XMS driver available - xor ax,ax ; return a nil pointer - jmp short xmsavail_done -xmsavail: mov ax,4310h ; fetch driver address with - int 2fh ; another magic cookie - mov dx,es ; copy address to dx:ax - mov ax,bx -xmsavail_done: les bx,dword ptr [bp+6] ; get pointer to return value - mov word ptr es:[bx],ax - mov word ptr es:[bx+2],dx - pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jxms_getdriver endp - - -; -; void far jxms_calldriver (XMSDRIVER, XMScontext far *) -; -; The XMScontext structure contains values for the AX,DX,BX,SI,DS registers. -; These are loaded, the XMS call is performed, and the new values of the -; AX,DX,BX registers are written back to the context structure. -; -_jxms_calldriver proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - les bx,dword ptr [bp+10] ; get XMScontext pointer - mov ax,word ptr es:[bx] ; load registers - mov dx,word ptr es:[bx+2] - mov si,word ptr es:[bx+6] - mov ds,word ptr es:[bx+8] - mov bx,word ptr es:[bx+4] - call dword ptr [bp+6] ; call the driver - mov cx,bx ; save returned BX for a sec - les bx,dword ptr [bp+10] ; get XMScontext pointer - mov word ptr es:[bx],ax ; put back ax,dx,bx - mov word ptr es:[bx+2],dx - mov word ptr es:[bx+4],cx - pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jxms_calldriver endp - - -; -; short far jems_available (void) -; -; Have we got an EMS driver? (this comes straight from the EMS 4.0 specs) -; -_jems_available proc far - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - mov ax,3567h ; get interrupt vector 67h - int 21h - push cs - pop ds - mov di,000ah ; check offs 10 in returned seg - lea si,ASCII_device_name ; against literal string - mov cx,8 - cld - repe cmpsb - jne no_ems - mov ax,1 ; match, it's there - jmp short avail_done -no_ems: xor ax,ax ; it's not there -avail_done: pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - ret - -ASCII_device_name db "EMMXXXX0" - -_jems_available endp - - -; -; void far jems_calldriver (EMScontext far *) -; -; The EMScontext structure contains values for the AX,DX,BX,SI,DS registers. -; These are loaded, the EMS trap is performed, and the new values of the -; AX,DX,BX registers are written back to the context structure. -; -_jems_calldriver proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - les bx,dword ptr [bp+6] ; get EMScontext pointer - mov ax,word ptr es:[bx] ; load registers - mov dx,word ptr es:[bx+2] - mov si,word ptr es:[bx+6] - mov ds,word ptr es:[bx+8] - mov bx,word ptr es:[bx+4] - int 67h ; call the EMS driver - mov cx,bx ; save returned BX for a sec - les bx,dword ptr [bp+6] ; get EMScontext pointer - mov word ptr es:[bx],ax ; put back ax,dx,bx - mov word ptr es:[bx+2],dx - mov word ptr es:[bx+4],cx - pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jems_calldriver endp - -JMEMDOSA_TXT ends - - end diff --git a/Build/source/libs/jpeg/jmemmac.c b/Build/source/libs/jpeg/jmemmac.c deleted file mode 100644 index 106f9bea05d..00000000000 --- a/Build/source/libs/jpeg/jmemmac.c +++ /dev/null @@ -1,289 +0,0 @@ -/* - * jmemmac.c - * - * Copyright (C) 1992-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * jmemmac.c provides an Apple Macintosh implementation of the system- - * dependent portion of the JPEG memory manager. - * - * If you use jmemmac.c, then you must define USE_MAC_MEMMGR in the - * JPEG_INTERNALS part of jconfig.h. - * - * jmemmac.c uses the Macintosh toolbox routines NewPtr and DisposePtr - * instead of malloc and free. It accurately determines the amount of - * memory available by using CompactMem. Notice that if left to its - * own devices, this code can chew up all available space in the - * application's zone, with the exception of the rather small "slop" - * factor computed in jpeg_mem_available(). The application can ensure - * that more space is left over by reducing max_memory_to_use. - * - * Large images are swapped to disk using temporary files and System 7.0+'s - * temporary folder functionality. - * - * Note that jmemmac.c depends on two features of MacOS that were first - * introduced in System 7: FindFolder and the FSSpec-based calls. - * If your application uses jmemmac.c and is run under System 6 or earlier, - * and the jpeg library decides it needs a temporary file, it will abort, - * printing error messages about requiring System 7. (If no temporary files - * are created, it will run fine.) - * - * If you want to use jmemmac.c in an application that might be used with - * System 6 or earlier, then you should remove dependencies on FindFolder - * and the FSSpec calls. You will need to replace FindFolder with some - * other mechanism for finding a place to put temporary files, and you - * should replace the FSSpec calls with their HFS equivalents: - * - * FSpDelete -> HDelete - * FSpGetFInfo -> HGetFInfo - * FSpCreate -> HCreate - * FSpOpenDF -> HOpen *** Note: not HOpenDF *** - * FSMakeFSSpec -> (fill in spec by hand.) - * - * (Use HOpen instead of HOpenDF. HOpen is just a glue-interface to PBHOpen, - * which is on all HFS macs. HOpenDF is a System 7 addition which avoids the - * ages-old problem of names starting with a period.) - * - * Contributed by Sam Bushell (jsam@iagu.on.net) and - * Dan Gildor (gyld@in-touch.com). - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jmemsys.h" /* import the system-dependent declarations */ - -#ifndef USE_MAC_MEMMGR /* make sure user got configuration right */ - You forgot to define USE_MAC_MEMMGR in jconfig.h. /* deliberate syntax error */ -#endif - -#include /* we use the MacOS memory manager */ -#include /* we use the MacOS File stuff */ -#include /* we use the MacOS HFS stuff */ -#include /* for smSystemScript */ -#include /* we use Gestalt to test for specific functionality */ - -#ifndef TEMP_FILE_NAME /* can override from jconfig.h or Makefile */ -#define TEMP_FILE_NAME "JPG%03d.TMP" -#endif - -static int next_file_num; /* to distinguish among several temp files */ - - -/* - * Memory allocation and freeing are controlled by the MacOS library - * routines NewPtr() and DisposePtr(), which allocate fixed-address - * storage. Unfortunately, the IJG library isn't smart enough to cope - * with relocatable storage. - */ - -GLOBAL(void *) -jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void *) NewPtr(sizeofobject); -} - -GLOBAL(void) -jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) -{ - DisposePtr((Ptr) object); -} - - -/* - * "Large" objects are treated the same as "small" ones. - * NB: we include FAR keywords in the routine declarations simply for - * consistency with the rest of the IJG code; FAR should expand to empty - * on rational architectures like the Mac. - */ - -GLOBAL(void FAR *) -jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void FAR *) NewPtr(sizeofobject); -} - -GLOBAL(void) -jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) -{ - DisposePtr((Ptr) object); -} - - -/* - * This routine computes the total memory space available for allocation. - */ - -GLOBAL(long) -jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, - long max_bytes_needed, long already_allocated) -{ - long limit = cinfo->mem->max_memory_to_use - already_allocated; - long slop, mem; - - /* Don't ask for more than what application has told us we may use */ - if (max_bytes_needed > limit && limit > 0) - max_bytes_needed = limit; - /* Find whether there's a big enough free block in the heap. - * CompactMem tries to create a contiguous block of the requested size, - * and then returns the size of the largest free block (which could be - * much more or much less than we asked for). - * We add some slop to ensure we don't use up all available memory. - */ - slop = max_bytes_needed / 16 + 32768L; - mem = CompactMem(max_bytes_needed + slop) - slop; - if (mem < 0) - mem = 0; /* sigh, couldn't even get the slop */ - /* Don't take more than the application says we can have */ - if (mem > limit && limit > 0) - mem = limit; - return mem; -} - - -/* - * Backing store (temporary file) management. - * Backing store objects are only used when the value returned by - * jpeg_mem_available is less than the total space needed. You can dispense - * with these routines if you have plenty of virtual memory; see jmemnobs.c. - */ - - -METHODDEF(void) -read_backing_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - long bytes = byte_count; - long retVal; - - if ( SetFPos ( info->temp_file, fsFromStart, file_offset ) != noErr ) - ERREXIT(cinfo, JERR_TFILE_SEEK); - - retVal = FSRead ( info->temp_file, &bytes, - (unsigned char *) buffer_address ); - if ( retVal != noErr || bytes != byte_count ) - ERREXIT(cinfo, JERR_TFILE_READ); -} - - -METHODDEF(void) -write_backing_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - long bytes = byte_count; - long retVal; - - if ( SetFPos ( info->temp_file, fsFromStart, file_offset ) != noErr ) - ERREXIT(cinfo, JERR_TFILE_SEEK); - - retVal = FSWrite ( info->temp_file, &bytes, - (unsigned char *) buffer_address ); - if ( retVal != noErr || bytes != byte_count ) - ERREXIT(cinfo, JERR_TFILE_WRITE); -} - - -METHODDEF(void) -close_backing_store (j_common_ptr cinfo, backing_store_ptr info) -{ - FSClose ( info->temp_file ); - FSpDelete ( &(info->tempSpec) ); -} - - -/* - * Initial opening of a backing-store object. - * - * This version uses FindFolder to find the Temporary Items folder, - * and puts the temporary file in there. - */ - -GLOBAL(void) -jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - short tmpRef, vRefNum; - long dirID; - FInfo finderInfo; - FSSpec theSpec; - Str255 fName; - OSErr osErr; - long gestaltResponse = 0; - - /* Check that FSSpec calls are available. */ - osErr = Gestalt( gestaltFSAttr, &gestaltResponse ); - if ( ( osErr != noErr ) - || !( gestaltResponse & (1<temp_name, TEMP_FILE_NAME, next_file_num); - strcpy ( (Ptr)fName+1, info->temp_name ); - *fName = strlen (info->temp_name); - osErr = FSMakeFSSpec ( vRefNum, dirID, fName, &theSpec ); - - if ( (osErr = FSpGetFInfo ( &theSpec, &finderInfo ) ) != noErr ) - break; - } - - osErr = FSpCreate ( &theSpec, '????', '????', smSystemScript ); - if ( osErr != noErr ) - ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); - - osErr = FSpOpenDF ( &theSpec, fsRdWrPerm, &(info->temp_file) ); - if ( osErr != noErr ) - ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); - - info->tempSpec = theSpec; - - info->read_backing_store = read_backing_store; - info->write_backing_store = write_backing_store; - info->close_backing_store = close_backing_store; - TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name); -} - - -/* - * These routines take care of any system-dependent initialization and - * cleanup required. - */ - -GLOBAL(long) -jpeg_mem_init (j_common_ptr cinfo) -{ - next_file_num = 0; - - /* max_memory_to_use will be initialized to FreeMem()'s result; - * the calling application might later reduce it, for example - * to leave room to invoke multiple JPEG objects. - * Note that FreeMem returns the total number of free bytes; - * it may not be possible to allocate a single block of this size. - */ - return FreeMem(); -} - -GLOBAL(void) -jpeg_mem_term (j_common_ptr cinfo) -{ - /* no work */ -} diff --git a/Build/source/libs/jpeg/jmemmgr.c b/Build/source/libs/jpeg/jmemmgr.c deleted file mode 100644 index d801b322da0..00000000000 --- a/Build/source/libs/jpeg/jmemmgr.c +++ /dev/null @@ -1,1118 +0,0 @@ -/* - * jmemmgr.c - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the JPEG system-independent memory management - * routines. This code is usable across a wide variety of machines; most - * of the system dependencies have been isolated in a separate file. - * The major functions provided here are: - * * pool-based allocation and freeing of memory; - * * policy decisions about how to divide available memory among the - * virtual arrays; - * * control logic for swapping virtual arrays between main memory and - * backing storage. - * The separate system-dependent file provides the actual backing-storage - * access code, and it contains the policy decision about how much total - * main memory to use. - * This file is system-dependent in the sense that some of its functions - * are unnecessary in some systems. For example, if there is enough virtual - * memory so that backing storage will never be used, much of the virtual - * array control logic could be removed. (Of course, if you have that much - * memory then you shouldn't care about a little bit of unused code...) - */ - -#define JPEG_INTERNALS -#define AM_MEMORY_MANAGER /* we define jvirt_Xarray_control structs */ -#include "jinclude.h" -#include "jpeglib.h" -#include "jmemsys.h" /* import the system-dependent declarations */ - -#ifndef NO_GETENV -#ifndef HAVE_STDLIB_H /* should declare getenv() */ -extern char * getenv JPP((const char * name)); -#endif -#endif - - -/* - * Some important notes: - * The allocation routines provided here must never return NULL. - * They should exit to error_exit if unsuccessful. - * - * It's not a good idea to try to merge the sarray and barray routines, - * even though they are textually almost the same, because samples are - * usually stored as bytes while coefficients are shorts or ints. Thus, - * in machines where byte pointers have a different representation from - * word pointers, the resulting machine code could not be the same. - */ - - -/* - * Many machines require storage alignment: longs must start on 4-byte - * boundaries, doubles on 8-byte boundaries, etc. On such machines, malloc() - * always returns pointers that are multiples of the worst-case alignment - * requirement, and we had better do so too. - * There isn't any really portable way to determine the worst-case alignment - * requirement. This module assumes that the alignment requirement is - * multiples of sizeof(ALIGN_TYPE). - * By default, we define ALIGN_TYPE as double. This is necessary on some - * workstations (where doubles really do need 8-byte alignment) and will work - * fine on nearly everything. If your machine has lesser alignment needs, - * you can save a few bytes by making ALIGN_TYPE smaller. - * The only place I know of where this will NOT work is certain Macintosh - * 680x0 compilers that define double as a 10-byte IEEE extended float. - * Doing 10-byte alignment is counterproductive because longwords won't be - * aligned well. Put "#define ALIGN_TYPE long" in jconfig.h if you have - * such a compiler. - */ - -#ifndef ALIGN_TYPE /* so can override from jconfig.h */ -#define ALIGN_TYPE double -#endif - - -/* - * We allocate objects from "pools", where each pool is gotten with a single - * request to jpeg_get_small() or jpeg_get_large(). There is no per-object - * overhead within a pool, except for alignment padding. Each pool has a - * header with a link to the next pool of the same class. - * Small and large pool headers are identical except that the latter's - * link pointer must be FAR on 80x86 machines. - * Notice that the "real" header fields are union'ed with a dummy ALIGN_TYPE - * field. This forces the compiler to make SIZEOF(small_pool_hdr) a multiple - * of the alignment requirement of ALIGN_TYPE. - */ - -typedef union small_pool_struct * small_pool_ptr; - -typedef union small_pool_struct { - struct { - small_pool_ptr next; /* next in list of pools */ - size_t bytes_used; /* how many bytes already used within pool */ - size_t bytes_left; /* bytes still available in this pool */ - } hdr; - ALIGN_TYPE dummy; /* included in union to ensure alignment */ -} small_pool_hdr; - -typedef union large_pool_struct FAR * large_pool_ptr; - -typedef union large_pool_struct { - struct { - large_pool_ptr next; /* next in list of pools */ - size_t bytes_used; /* how many bytes already used within pool */ - size_t bytes_left; /* bytes still available in this pool */ - } hdr; - ALIGN_TYPE dummy; /* included in union to ensure alignment */ -} large_pool_hdr; - - -/* - * Here is the full definition of a memory manager object. - */ - -typedef struct { - struct jpeg_memory_mgr pub; /* public fields */ - - /* Each pool identifier (lifetime class) names a linked list of pools. */ - small_pool_ptr small_list[JPOOL_NUMPOOLS]; - large_pool_ptr large_list[JPOOL_NUMPOOLS]; - - /* Since we only have one lifetime class of virtual arrays, only one - * linked list is necessary (for each datatype). Note that the virtual - * array control blocks being linked together are actually stored somewhere - * in the small-pool list. - */ - jvirt_sarray_ptr virt_sarray_list; - jvirt_barray_ptr virt_barray_list; - - /* This counts total space obtained from jpeg_get_small/large */ - long total_space_allocated; - - /* alloc_sarray and alloc_barray set this value for use by virtual - * array routines. - */ - JDIMENSION last_rowsperchunk; /* from most recent alloc_sarray/barray */ -} my_memory_mgr; - -typedef my_memory_mgr * my_mem_ptr; - - -/* - * The control blocks for virtual arrays. - * Note that these blocks are allocated in the "small" pool area. - * System-dependent info for the associated backing store (if any) is hidden - * inside the backing_store_info struct. - */ - -struct jvirt_sarray_control { - JSAMPARRAY mem_buffer; /* => the in-memory buffer */ - JDIMENSION rows_in_array; /* total virtual array height */ - JDIMENSION samplesperrow; /* width of array (and of memory buffer) */ - JDIMENSION maxaccess; /* max rows accessed by access_virt_sarray */ - JDIMENSION rows_in_mem; /* height of memory buffer */ - JDIMENSION rowsperchunk; /* allocation chunk size in mem_buffer */ - JDIMENSION cur_start_row; /* first logical row # in the buffer */ - JDIMENSION first_undef_row; /* row # of first uninitialized row */ - boolean pre_zero; /* pre-zero mode requested? */ - boolean dirty; /* do current buffer contents need written? */ - boolean b_s_open; /* is backing-store data valid? */ - jvirt_sarray_ptr next; /* link to next virtual sarray control block */ - backing_store_info b_s_info; /* System-dependent control info */ -}; - -struct jvirt_barray_control { - JBLOCKARRAY mem_buffer; /* => the in-memory buffer */ - JDIMENSION rows_in_array; /* total virtual array height */ - JDIMENSION blocksperrow; /* width of array (and of memory buffer) */ - JDIMENSION maxaccess; /* max rows accessed by access_virt_barray */ - JDIMENSION rows_in_mem; /* height of memory buffer */ - JDIMENSION rowsperchunk; /* allocation chunk size in mem_buffer */ - JDIMENSION cur_start_row; /* first logical row # in the buffer */ - JDIMENSION first_undef_row; /* row # of first uninitialized row */ - boolean pre_zero; /* pre-zero mode requested? */ - boolean dirty; /* do current buffer contents need written? */ - boolean b_s_open; /* is backing-store data valid? */ - jvirt_barray_ptr next; /* link to next virtual barray control block */ - backing_store_info b_s_info; /* System-dependent control info */ -}; - - -#ifdef MEM_STATS /* optional extra stuff for statistics */ - -LOCAL(void) -print_mem_stats (j_common_ptr cinfo, int pool_id) -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - small_pool_ptr shdr_ptr; - large_pool_ptr lhdr_ptr; - - /* Since this is only a debugging stub, we can cheat a little by using - * fprintf directly rather than going through the trace message code. - * This is helpful because message parm array can't handle longs. - */ - fprintf(stderr, "Freeing pool %d, total space = %ld\n", - pool_id, mem->total_space_allocated); - - for (lhdr_ptr = mem->large_list[pool_id]; lhdr_ptr != NULL; - lhdr_ptr = lhdr_ptr->hdr.next) { - fprintf(stderr, " Large chunk used %ld\n", - (long) lhdr_ptr->hdr.bytes_used); - } - - for (shdr_ptr = mem->small_list[pool_id]; shdr_ptr != NULL; - shdr_ptr = shdr_ptr->hdr.next) { - fprintf(stderr, " Small chunk used %ld free %ld\n", - (long) shdr_ptr->hdr.bytes_used, - (long) shdr_ptr->hdr.bytes_left); - } -} - -#endif /* MEM_STATS */ - - -LOCAL(void) -out_of_memory (j_common_ptr cinfo, int which) -/* Report an out-of-memory error and stop execution */ -/* If we compiled MEM_STATS support, report alloc requests before dying */ -{ -#ifdef MEM_STATS - cinfo->err->trace_level = 2; /* force self_destruct to report stats */ -#endif - ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, which); -} - - -/* - * Allocation of "small" objects. - * - * For these, we use pooled storage. When a new pool must be created, - * we try to get enough space for the current request plus a "slop" factor, - * where the slop will be the amount of leftover space in the new pool. - * The speed vs. space tradeoff is largely determined by the slop values. - * A different slop value is provided for each pool class (lifetime), - * and we also distinguish the first pool of a class from later ones. - * NOTE: the values given work fairly well on both 16- and 32-bit-int - * machines, but may be too small if longs are 64 bits or more. - */ - -static const size_t first_pool_slop[JPOOL_NUMPOOLS] = -{ - 1600, /* first PERMANENT pool */ - 16000 /* first IMAGE pool */ -}; - -static const size_t extra_pool_slop[JPOOL_NUMPOOLS] = -{ - 0, /* additional PERMANENT pools */ - 5000 /* additional IMAGE pools */ -}; - -#define MIN_SLOP 50 /* greater than 0 to avoid futile looping */ - - -METHODDEF(void *) -alloc_small (j_common_ptr cinfo, int pool_id, size_t sizeofobject) -/* Allocate a "small" object */ -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - small_pool_ptr hdr_ptr, prev_hdr_ptr; - char * data_ptr; - size_t odd_bytes, min_request, slop; - - /* Check for unsatisfiable request (do now to ensure no overflow below) */ - if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(small_pool_hdr))) - out_of_memory(cinfo, 1); /* request exceeds malloc's ability */ - - /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */ - odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE); - if (odd_bytes > 0) - sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes; - - /* See if space is available in any existing pool */ - if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) - ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ - prev_hdr_ptr = NULL; - hdr_ptr = mem->small_list[pool_id]; - while (hdr_ptr != NULL) { - if (hdr_ptr->hdr.bytes_left >= sizeofobject) - break; /* found pool with enough space */ - prev_hdr_ptr = hdr_ptr; - hdr_ptr = hdr_ptr->hdr.next; - } - - /* Time to make a new pool? */ - if (hdr_ptr == NULL) { - /* min_request is what we need now, slop is what will be leftover */ - min_request = sizeofobject + SIZEOF(small_pool_hdr); - if (prev_hdr_ptr == NULL) /* first pool in class? */ - slop = first_pool_slop[pool_id]; - else - slop = extra_pool_slop[pool_id]; - /* Don't ask for more than MAX_ALLOC_CHUNK */ - if (slop > (size_t) (MAX_ALLOC_CHUNK-min_request)) - slop = (size_t) (MAX_ALLOC_CHUNK-min_request); - /* Try to get space, if fail reduce slop and try again */ - for (;;) { - hdr_ptr = (small_pool_ptr) jpeg_get_small(cinfo, min_request + slop); - if (hdr_ptr != NULL) - break; - slop /= 2; - if (slop < MIN_SLOP) /* give up when it gets real small */ - out_of_memory(cinfo, 2); /* jpeg_get_small failed */ - } - mem->total_space_allocated += min_request + slop; - /* Success, initialize the new pool header and add to end of list */ - hdr_ptr->hdr.next = NULL; - hdr_ptr->hdr.bytes_used = 0; - hdr_ptr->hdr.bytes_left = sizeofobject + slop; - if (prev_hdr_ptr == NULL) /* first pool in class? */ - mem->small_list[pool_id] = hdr_ptr; - else - prev_hdr_ptr->hdr.next = hdr_ptr; - } - - /* OK, allocate the object from the current pool */ - data_ptr = (char *) (hdr_ptr + 1); /* point to first data byte in pool */ - data_ptr += hdr_ptr->hdr.bytes_used; /* point to place for object */ - hdr_ptr->hdr.bytes_used += sizeofobject; - hdr_ptr->hdr.bytes_left -= sizeofobject; - - return (void *) data_ptr; -} - - -/* - * Allocation of "large" objects. - * - * The external semantics of these are the same as "small" objects, - * except that FAR pointers are used on 80x86. However the pool - * management heuristics are quite different. We assume that each - * request is large enough that it may as well be passed directly to - * jpeg_get_large; the pool management just links everything together - * so that we can free it all on demand. - * Note: the major use of "large" objects is in JSAMPARRAY and JBLOCKARRAY - * structures. The routines that create these structures (see below) - * deliberately bunch rows together to ensure a large request size. - */ - -METHODDEF(void FAR *) -alloc_large (j_common_ptr cinfo, int pool_id, size_t sizeofobject) -/* Allocate a "large" object */ -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - large_pool_ptr hdr_ptr; - size_t odd_bytes; - - /* Check for unsatisfiable request (do now to ensure no overflow below) */ - if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr))) - out_of_memory(cinfo, 3); /* request exceeds malloc's ability */ - - /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */ - odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE); - if (odd_bytes > 0) - sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes; - - /* Always make a new pool */ - if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) - ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ - - hdr_ptr = (large_pool_ptr) jpeg_get_large(cinfo, sizeofobject + - SIZEOF(large_pool_hdr)); - if (hdr_ptr == NULL) - out_of_memory(cinfo, 4); /* jpeg_get_large failed */ - mem->total_space_allocated += sizeofobject + SIZEOF(large_pool_hdr); - - /* Success, initialize the new pool header and add to list */ - hdr_ptr->hdr.next = mem->large_list[pool_id]; - /* We maintain space counts in each pool header for statistical purposes, - * even though they are not needed for allocation. - */ - hdr_ptr->hdr.bytes_used = sizeofobject; - hdr_ptr->hdr.bytes_left = 0; - mem->large_list[pool_id] = hdr_ptr; - - return (void FAR *) (hdr_ptr + 1); /* point to first data byte in pool */ -} - - -/* - * Creation of 2-D sample arrays. - * The pointers are in near heap, the samples themselves in FAR heap. - * - * To minimize allocation overhead and to allow I/O of large contiguous - * blocks, we allocate the sample rows in groups of as many rows as possible - * without exceeding MAX_ALLOC_CHUNK total bytes per allocation request. - * NB: the virtual array control routines, later in this file, know about - * this chunking of rows. The rowsperchunk value is left in the mem manager - * object so that it can be saved away if this sarray is the workspace for - * a virtual array. - */ - -METHODDEF(JSAMPARRAY) -alloc_sarray (j_common_ptr cinfo, int pool_id, - JDIMENSION samplesperrow, JDIMENSION numrows) -/* Allocate a 2-D sample array */ -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - JSAMPARRAY result; - JSAMPROW workspace; - JDIMENSION rowsperchunk, currow, i; - long ltemp; - - /* Calculate max # of rows allowed in one allocation chunk */ - ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / - ((long) samplesperrow * SIZEOF(JSAMPLE)); - if (ltemp <= 0) - ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); - if (ltemp < (long) numrows) - rowsperchunk = (JDIMENSION) ltemp; - else - rowsperchunk = numrows; - mem->last_rowsperchunk = rowsperchunk; - - /* Get space for row pointers (small object) */ - result = (JSAMPARRAY) alloc_small(cinfo, pool_id, - (size_t) (numrows * SIZEOF(JSAMPROW))); - - /* Get the rows themselves (large objects) */ - currow = 0; - while (currow < numrows) { - rowsperchunk = MIN(rowsperchunk, numrows - currow); - workspace = (JSAMPROW) alloc_large(cinfo, pool_id, - (size_t) ((size_t) rowsperchunk * (size_t) samplesperrow - * SIZEOF(JSAMPLE))); - for (i = rowsperchunk; i > 0; i--) { - result[currow++] = workspace; - workspace += samplesperrow; - } - } - - return result; -} - - -/* - * Creation of 2-D coefficient-block arrays. - * This is essentially the same as the code for sample arrays, above. - */ - -METHODDEF(JBLOCKARRAY) -alloc_barray (j_common_ptr cinfo, int pool_id, - JDIMENSION blocksperrow, JDIMENSION numrows) -/* Allocate a 2-D coefficient-block array */ -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - JBLOCKARRAY result; - JBLOCKROW workspace; - JDIMENSION rowsperchunk, currow, i; - long ltemp; - - /* Calculate max # of rows allowed in one allocation chunk */ - ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / - ((long) blocksperrow * SIZEOF(JBLOCK)); - if (ltemp <= 0) - ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); - if (ltemp < (long) numrows) - rowsperchunk = (JDIMENSION) ltemp; - else - rowsperchunk = numrows; - mem->last_rowsperchunk = rowsperchunk; - - /* Get space for row pointers (small object) */ - result = (JBLOCKARRAY) alloc_small(cinfo, pool_id, - (size_t) (numrows * SIZEOF(JBLOCKROW))); - - /* Get the rows themselves (large objects) */ - currow = 0; - while (currow < numrows) { - rowsperchunk = MIN(rowsperchunk, numrows - currow); - workspace = (JBLOCKROW) alloc_large(cinfo, pool_id, - (size_t) ((size_t) rowsperchunk * (size_t) blocksperrow - * SIZEOF(JBLOCK))); - for (i = rowsperchunk; i > 0; i--) { - result[currow++] = workspace; - workspace += blocksperrow; - } - } - - return result; -} - - -/* - * About virtual array management: - * - * The above "normal" array routines are only used to allocate strip buffers - * (as wide as the image, but just a few rows high). Full-image-sized buffers - * are handled as "virtual" arrays. The array is still accessed a strip at a - * time, but the memory manager must save the whole array for repeated - * accesses. The intended implementation is that there is a strip buffer in - * memory (as high as is possible given the desired memory limit), plus a - * backing file that holds the rest of the array. - * - * The request_virt_array routines are told the total size of the image and - * the maximum number of rows that will be accessed at once. The in-memory - * buffer must be at least as large as the maxaccess value. - * - * The request routines create control blocks but not the in-memory buffers. - * That is postponed until realize_virt_arrays is called. At that time the - * total amount of space needed is known (approximately, anyway), so free - * memory can be divided up fairly. - * - * The access_virt_array routines are responsible for making a specific strip - * area accessible (after reading or writing the backing file, if necessary). - * Note that the access routines are told whether the caller intends to modify - * the accessed strip; during a read-only pass this saves having to rewrite - * data to disk. The access routines are also responsible for pre-zeroing - * any newly accessed rows, if pre-zeroing was requested. - * - * In current usage, the access requests are usually for nonoverlapping - * strips; that is, successive access start_row numbers differ by exactly - * num_rows = maxaccess. This means we can get good performance with simple - * buffer dump/reload logic, by making the in-memory buffer be a multiple - * of the access height; then there will never be accesses across bufferload - * boundaries. The code will still work with overlapping access requests, - * but it doesn't handle bufferload overlaps very efficiently. - */ - - -METHODDEF(jvirt_sarray_ptr) -request_virt_sarray (j_common_ptr cinfo, int pool_id, boolean pre_zero, - JDIMENSION samplesperrow, JDIMENSION numrows, - JDIMENSION maxaccess) -/* Request a virtual 2-D sample array */ -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - jvirt_sarray_ptr result; - - /* Only IMAGE-lifetime virtual arrays are currently supported */ - if (pool_id != JPOOL_IMAGE) - ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ - - /* get control block */ - result = (jvirt_sarray_ptr) alloc_small(cinfo, pool_id, - SIZEOF(struct jvirt_sarray_control)); - - result->mem_buffer = NULL; /* marks array not yet realized */ - result->rows_in_array = numrows; - result->samplesperrow = samplesperrow; - result->maxaccess = maxaccess; - result->pre_zero = pre_zero; - result->b_s_open = FALSE; /* no associated backing-store object */ - result->next = mem->virt_sarray_list; /* add to list of virtual arrays */ - mem->virt_sarray_list = result; - - return result; -} - - -METHODDEF(jvirt_barray_ptr) -request_virt_barray (j_common_ptr cinfo, int pool_id, boolean pre_zero, - JDIMENSION blocksperrow, JDIMENSION numrows, - JDIMENSION maxaccess) -/* Request a virtual 2-D coefficient-block array */ -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - jvirt_barray_ptr result; - - /* Only IMAGE-lifetime virtual arrays are currently supported */ - if (pool_id != JPOOL_IMAGE) - ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ - - /* get control block */ - result = (jvirt_barray_ptr) alloc_small(cinfo, pool_id, - SIZEOF(struct jvirt_barray_control)); - - result->mem_buffer = NULL; /* marks array not yet realized */ - result->rows_in_array = numrows; - result->blocksperrow = blocksperrow; - result->maxaccess = maxaccess; - result->pre_zero = pre_zero; - result->b_s_open = FALSE; /* no associated backing-store object */ - result->next = mem->virt_barray_list; /* add to list of virtual arrays */ - mem->virt_barray_list = result; - - return result; -} - - -METHODDEF(void) -realize_virt_arrays (j_common_ptr cinfo) -/* Allocate the in-memory buffers for any unrealized virtual arrays */ -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - long space_per_minheight, maximum_space, avail_mem; - long minheights, max_minheights; - jvirt_sarray_ptr sptr; - jvirt_barray_ptr bptr; - - /* Compute the minimum space needed (maxaccess rows in each buffer) - * and the maximum space needed (full image height in each buffer). - * These may be of use to the system-dependent jpeg_mem_available routine. - */ - space_per_minheight = 0; - maximum_space = 0; - for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { - if (sptr->mem_buffer == NULL) { /* if not realized yet */ - space_per_minheight += (long) sptr->maxaccess * - (long) sptr->samplesperrow * SIZEOF(JSAMPLE); - maximum_space += (long) sptr->rows_in_array * - (long) sptr->samplesperrow * SIZEOF(JSAMPLE); - } - } - for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { - if (bptr->mem_buffer == NULL) { /* if not realized yet */ - space_per_minheight += (long) bptr->maxaccess * - (long) bptr->blocksperrow * SIZEOF(JBLOCK); - maximum_space += (long) bptr->rows_in_array * - (long) bptr->blocksperrow * SIZEOF(JBLOCK); - } - } - - if (space_per_minheight <= 0) - return; /* no unrealized arrays, no work */ - - /* Determine amount of memory to actually use; this is system-dependent. */ - avail_mem = jpeg_mem_available(cinfo, space_per_minheight, maximum_space, - mem->total_space_allocated); - - /* If the maximum space needed is available, make all the buffers full - * height; otherwise parcel it out with the same number of minheights - * in each buffer. - */ - if (avail_mem >= maximum_space) - max_minheights = 1000000000L; - else { - max_minheights = avail_mem / space_per_minheight; - /* If there doesn't seem to be enough space, try to get the minimum - * anyway. This allows a "stub" implementation of jpeg_mem_available(). - */ - if (max_minheights <= 0) - max_minheights = 1; - } - - /* Allocate the in-memory buffers and initialize backing store as needed. */ - - for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { - if (sptr->mem_buffer == NULL) { /* if not realized yet */ - minheights = ((long) sptr->rows_in_array - 1L) / sptr->maxaccess + 1L; - if (minheights <= max_minheights) { - /* This buffer fits in memory */ - sptr->rows_in_mem = sptr->rows_in_array; - } else { - /* It doesn't fit in memory, create backing store. */ - sptr->rows_in_mem = (JDIMENSION) (max_minheights * sptr->maxaccess); - jpeg_open_backing_store(cinfo, & sptr->b_s_info, - (long) sptr->rows_in_array * - (long) sptr->samplesperrow * - (long) SIZEOF(JSAMPLE)); - sptr->b_s_open = TRUE; - } - sptr->mem_buffer = alloc_sarray(cinfo, JPOOL_IMAGE, - sptr->samplesperrow, sptr->rows_in_mem); - sptr->rowsperchunk = mem->last_rowsperchunk; - sptr->cur_start_row = 0; - sptr->first_undef_row = 0; - sptr->dirty = FALSE; - } - } - - for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { - if (bptr->mem_buffer == NULL) { /* if not realized yet */ - minheights = ((long) bptr->rows_in_array - 1L) / bptr->maxaccess + 1L; - if (minheights <= max_minheights) { - /* This buffer fits in memory */ - bptr->rows_in_mem = bptr->rows_in_array; - } else { - /* It doesn't fit in memory, create backing store. */ - bptr->rows_in_mem = (JDIMENSION) (max_minheights * bptr->maxaccess); - jpeg_open_backing_store(cinfo, & bptr->b_s_info, - (long) bptr->rows_in_array * - (long) bptr->blocksperrow * - (long) SIZEOF(JBLOCK)); - bptr->b_s_open = TRUE; - } - bptr->mem_buffer = alloc_barray(cinfo, JPOOL_IMAGE, - bptr->blocksperrow, bptr->rows_in_mem); - bptr->rowsperchunk = mem->last_rowsperchunk; - bptr->cur_start_row = 0; - bptr->first_undef_row = 0; - bptr->dirty = FALSE; - } - } -} - - -LOCAL(void) -do_sarray_io (j_common_ptr cinfo, jvirt_sarray_ptr ptr, boolean writing) -/* Do backing store read or write of a virtual sample array */ -{ - long bytesperrow, file_offset, byte_count, rows, thisrow, i; - - bytesperrow = (long) ptr->samplesperrow * SIZEOF(JSAMPLE); - file_offset = ptr->cur_start_row * bytesperrow; - /* Loop to read or write each allocation chunk in mem_buffer */ - for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { - /* One chunk, but check for short chunk at end of buffer */ - rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); - /* Transfer no more than is currently defined */ - thisrow = (long) ptr->cur_start_row + i; - rows = MIN(rows, (long) ptr->first_undef_row - thisrow); - /* Transfer no more than fits in file */ - rows = MIN(rows, (long) ptr->rows_in_array - thisrow); - if (rows <= 0) /* this chunk might be past end of file! */ - break; - byte_count = rows * bytesperrow; - if (writing) - (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, - (void FAR *) ptr->mem_buffer[i], - file_offset, byte_count); - else - (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, - (void FAR *) ptr->mem_buffer[i], - file_offset, byte_count); - file_offset += byte_count; - } -} - - -LOCAL(void) -do_barray_io (j_common_ptr cinfo, jvirt_barray_ptr ptr, boolean writing) -/* Do backing store read or write of a virtual coefficient-block array */ -{ - long bytesperrow, file_offset, byte_count, rows, thisrow, i; - - bytesperrow = (long) ptr->blocksperrow * SIZEOF(JBLOCK); - file_offset = ptr->cur_start_row * bytesperrow; - /* Loop to read or write each allocation chunk in mem_buffer */ - for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { - /* One chunk, but check for short chunk at end of buffer */ - rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); - /* Transfer no more than is currently defined */ - thisrow = (long) ptr->cur_start_row + i; - rows = MIN(rows, (long) ptr->first_undef_row - thisrow); - /* Transfer no more than fits in file */ - rows = MIN(rows, (long) ptr->rows_in_array - thisrow); - if (rows <= 0) /* this chunk might be past end of file! */ - break; - byte_count = rows * bytesperrow; - if (writing) - (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, - (void FAR *) ptr->mem_buffer[i], - file_offset, byte_count); - else - (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, - (void FAR *) ptr->mem_buffer[i], - file_offset, byte_count); - file_offset += byte_count; - } -} - - -METHODDEF(JSAMPARRAY) -access_virt_sarray (j_common_ptr cinfo, jvirt_sarray_ptr ptr, - JDIMENSION start_row, JDIMENSION num_rows, - boolean writable) -/* Access the part of a virtual sample array starting at start_row */ -/* and extending for num_rows rows. writable is true if */ -/* caller intends to modify the accessed area. */ -{ - JDIMENSION end_row = start_row + num_rows; - JDIMENSION undef_row; - - /* debugging check */ - if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || - ptr->mem_buffer == NULL) - ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); - - /* Make the desired part of the virtual array accessible */ - if (start_row < ptr->cur_start_row || - end_row > ptr->cur_start_row+ptr->rows_in_mem) { - if (! ptr->b_s_open) - ERREXIT(cinfo, JERR_VIRTUAL_BUG); - /* Flush old buffer contents if necessary */ - if (ptr->dirty) { - do_sarray_io(cinfo, ptr, TRUE); - ptr->dirty = FALSE; - } - /* Decide what part of virtual array to access. - * Algorithm: if target address > current window, assume forward scan, - * load starting at target address. If target address < current window, - * assume backward scan, load so that target area is top of window. - * Note that when switching from forward write to forward read, will have - * start_row = 0, so the limiting case applies and we load from 0 anyway. - */ - if (start_row > ptr->cur_start_row) { - ptr->cur_start_row = start_row; - } else { - /* use long arithmetic here to avoid overflow & unsigned problems */ - long ltemp; - - ltemp = (long) end_row - (long) ptr->rows_in_mem; - if (ltemp < 0) - ltemp = 0; /* don't fall off front end of file */ - ptr->cur_start_row = (JDIMENSION) ltemp; - } - /* Read in the selected part of the array. - * During the initial write pass, we will do no actual read - * because the selected part is all undefined. - */ - do_sarray_io(cinfo, ptr, FALSE); - } - /* Ensure the accessed part of the array is defined; prezero if needed. - * To improve locality of access, we only prezero the part of the array - * that the caller is about to access, not the entire in-memory array. - */ - if (ptr->first_undef_row < end_row) { - if (ptr->first_undef_row < start_row) { - if (writable) /* writer skipped over a section of array */ - ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); - undef_row = start_row; /* but reader is allowed to read ahead */ - } else { - undef_row = ptr->first_undef_row; - } - if (writable) - ptr->first_undef_row = end_row; - if (ptr->pre_zero) { - size_t bytesperrow = (size_t) ptr->samplesperrow * SIZEOF(JSAMPLE); - undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ - end_row -= ptr->cur_start_row; - while (undef_row < end_row) { - jzero_far((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); - undef_row++; - } - } else { - if (! writable) /* reader looking at undefined data */ - ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); - } - } - /* Flag the buffer dirty if caller will write in it */ - if (writable) - ptr->dirty = TRUE; - /* Return address of proper part of the buffer */ - return ptr->mem_buffer + (start_row - ptr->cur_start_row); -} - - -METHODDEF(JBLOCKARRAY) -access_virt_barray (j_common_ptr cinfo, jvirt_barray_ptr ptr, - JDIMENSION start_row, JDIMENSION num_rows, - boolean writable) -/* Access the part of a virtual block array starting at start_row */ -/* and extending for num_rows rows. writable is true if */ -/* caller intends to modify the accessed area. */ -{ - JDIMENSION end_row = start_row + num_rows; - JDIMENSION undef_row; - - /* debugging check */ - if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || - ptr->mem_buffer == NULL) - ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); - - /* Make the desired part of the virtual array accessible */ - if (start_row < ptr->cur_start_row || - end_row > ptr->cur_start_row+ptr->rows_in_mem) { - if (! ptr->b_s_open) - ERREXIT(cinfo, JERR_VIRTUAL_BUG); - /* Flush old buffer contents if necessary */ - if (ptr->dirty) { - do_barray_io(cinfo, ptr, TRUE); - ptr->dirty = FALSE; - } - /* Decide what part of virtual array to access. - * Algorithm: if target address > current window, assume forward scan, - * load starting at target address. If target address < current window, - * assume backward scan, load so that target area is top of window. - * Note that when switching from forward write to forward read, will have - * start_row = 0, so the limiting case applies and we load from 0 anyway. - */ - if (start_row > ptr->cur_start_row) { - ptr->cur_start_row = start_row; - } else { - /* use long arithmetic here to avoid overflow & unsigned problems */ - long ltemp; - - ltemp = (long) end_row - (long) ptr->rows_in_mem; - if (ltemp < 0) - ltemp = 0; /* don't fall off front end of file */ - ptr->cur_start_row = (JDIMENSION) ltemp; - } - /* Read in the selected part of the array. - * During the initial write pass, we will do no actual read - * because the selected part is all undefined. - */ - do_barray_io(cinfo, ptr, FALSE); - } - /* Ensure the accessed part of the array is defined; prezero if needed. - * To improve locality of access, we only prezero the part of the array - * that the caller is about to access, not the entire in-memory array. - */ - if (ptr->first_undef_row < end_row) { - if (ptr->first_undef_row < start_row) { - if (writable) /* writer skipped over a section of array */ - ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); - undef_row = start_row; /* but reader is allowed to read ahead */ - } else { - undef_row = ptr->first_undef_row; - } - if (writable) - ptr->first_undef_row = end_row; - if (ptr->pre_zero) { - size_t bytesperrow = (size_t) ptr->blocksperrow * SIZEOF(JBLOCK); - undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ - end_row -= ptr->cur_start_row; - while (undef_row < end_row) { - jzero_far((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); - undef_row++; - } - } else { - if (! writable) /* reader looking at undefined data */ - ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); - } - } - /* Flag the buffer dirty if caller will write in it */ - if (writable) - ptr->dirty = TRUE; - /* Return address of proper part of the buffer */ - return ptr->mem_buffer + (start_row - ptr->cur_start_row); -} - - -/* - * Release all objects belonging to a specified pool. - */ - -METHODDEF(void) -free_pool (j_common_ptr cinfo, int pool_id) -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - small_pool_ptr shdr_ptr; - large_pool_ptr lhdr_ptr; - size_t space_freed; - - if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) - ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ - -#ifdef MEM_STATS - if (cinfo->err->trace_level > 1) - print_mem_stats(cinfo, pool_id); /* print pool's memory usage statistics */ -#endif - - /* If freeing IMAGE pool, close any virtual arrays first */ - if (pool_id == JPOOL_IMAGE) { - jvirt_sarray_ptr sptr; - jvirt_barray_ptr bptr; - - for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { - if (sptr->b_s_open) { /* there may be no backing store */ - sptr->b_s_open = FALSE; /* prevent recursive close if error */ - (*sptr->b_s_info.close_backing_store) (cinfo, & sptr->b_s_info); - } - } - mem->virt_sarray_list = NULL; - for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { - if (bptr->b_s_open) { /* there may be no backing store */ - bptr->b_s_open = FALSE; /* prevent recursive close if error */ - (*bptr->b_s_info.close_backing_store) (cinfo, & bptr->b_s_info); - } - } - mem->virt_barray_list = NULL; - } - - /* Release large objects */ - lhdr_ptr = mem->large_list[pool_id]; - mem->large_list[pool_id] = NULL; - - while (lhdr_ptr != NULL) { - large_pool_ptr next_lhdr_ptr = lhdr_ptr->hdr.next; - space_freed = lhdr_ptr->hdr.bytes_used + - lhdr_ptr->hdr.bytes_left + - SIZEOF(large_pool_hdr); - jpeg_free_large(cinfo, (void FAR *) lhdr_ptr, space_freed); - mem->total_space_allocated -= space_freed; - lhdr_ptr = next_lhdr_ptr; - } - - /* Release small objects */ - shdr_ptr = mem->small_list[pool_id]; - mem->small_list[pool_id] = NULL; - - while (shdr_ptr != NULL) { - small_pool_ptr next_shdr_ptr = shdr_ptr->hdr.next; - space_freed = shdr_ptr->hdr.bytes_used + - shdr_ptr->hdr.bytes_left + - SIZEOF(small_pool_hdr); - jpeg_free_small(cinfo, (void *) shdr_ptr, space_freed); - mem->total_space_allocated -= space_freed; - shdr_ptr = next_shdr_ptr; - } -} - - -/* - * Close up shop entirely. - * Note that this cannot be called unless cinfo->mem is non-NULL. - */ - -METHODDEF(void) -self_destruct (j_common_ptr cinfo) -{ - int pool; - - /* Close all backing store, release all memory. - * Releasing pools in reverse order might help avoid fragmentation - * with some (brain-damaged) malloc libraries. - */ - for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) { - free_pool(cinfo, pool); - } - - /* Release the memory manager control block too. */ - jpeg_free_small(cinfo, (void *) cinfo->mem, SIZEOF(my_memory_mgr)); - cinfo->mem = NULL; /* ensures I will be called only once */ - - jpeg_mem_term(cinfo); /* system-dependent cleanup */ -} - - -/* - * Memory manager initialization. - * When this is called, only the error manager pointer is valid in cinfo! - */ - -GLOBAL(void) -jinit_memory_mgr (j_common_ptr cinfo) -{ - my_mem_ptr mem; - long max_to_use; - int pool; - size_t test_mac; - - cinfo->mem = NULL; /* for safety if init fails */ - - /* Check for configuration errors. - * SIZEOF(ALIGN_TYPE) should be a power of 2; otherwise, it probably - * doesn't reflect any real hardware alignment requirement. - * The test is a little tricky: for X>0, X and X-1 have no one-bits - * in common if and only if X is a power of 2, ie has only one one-bit. - * Some compilers may give an "unreachable code" warning here; ignore it. - */ - if ((SIZEOF(ALIGN_TYPE) & (SIZEOF(ALIGN_TYPE)-1)) != 0) - ERREXIT(cinfo, JERR_BAD_ALIGN_TYPE); - /* MAX_ALLOC_CHUNK must be representable as type size_t, and must be - * a multiple of SIZEOF(ALIGN_TYPE). - * Again, an "unreachable code" warning may be ignored here. - * But a "constant too large" warning means you need to fix MAX_ALLOC_CHUNK. - */ - test_mac = (size_t) MAX_ALLOC_CHUNK; - if ((long) test_mac != MAX_ALLOC_CHUNK || - (MAX_ALLOC_CHUNK % SIZEOF(ALIGN_TYPE)) != 0) - ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); - - max_to_use = jpeg_mem_init(cinfo); /* system-dependent initialization */ - - /* Attempt to allocate memory manager's control block */ - mem = (my_mem_ptr) jpeg_get_small(cinfo, SIZEOF(my_memory_mgr)); - - if (mem == NULL) { - jpeg_mem_term(cinfo); /* system-dependent cleanup */ - ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 0); - } - - /* OK, fill in the method pointers */ - mem->pub.alloc_small = alloc_small; - mem->pub.alloc_large = alloc_large; - mem->pub.alloc_sarray = alloc_sarray; - mem->pub.alloc_barray = alloc_barray; - mem->pub.request_virt_sarray = request_virt_sarray; - mem->pub.request_virt_barray = request_virt_barray; - mem->pub.realize_virt_arrays = realize_virt_arrays; - mem->pub.access_virt_sarray = access_virt_sarray; - mem->pub.access_virt_barray = access_virt_barray; - mem->pub.free_pool = free_pool; - mem->pub.self_destruct = self_destruct; - - /* Make MAX_ALLOC_CHUNK accessible to other modules */ - mem->pub.max_alloc_chunk = MAX_ALLOC_CHUNK; - - /* Initialize working state */ - mem->pub.max_memory_to_use = max_to_use; - - for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) { - mem->small_list[pool] = NULL; - mem->large_list[pool] = NULL; - } - mem->virt_sarray_list = NULL; - mem->virt_barray_list = NULL; - - mem->total_space_allocated = SIZEOF(my_memory_mgr); - - /* Declare ourselves open for business */ - cinfo->mem = & mem->pub; - - /* Check for an environment variable JPEGMEM; if found, override the - * default max_memory setting from jpeg_mem_init. Note that the - * surrounding application may again override this value. - * If your system doesn't support getenv(), define NO_GETENV to disable - * this feature. - */ -#ifndef NO_GETENV - { char * memenv; - - if ((memenv = getenv("JPEGMEM")) != NULL) { - char ch = 'x'; - - if (sscanf(memenv, "%ld%c", &max_to_use, &ch) > 0) { - if (ch == 'm' || ch == 'M') - max_to_use *= 1000L; - mem->pub.max_memory_to_use = max_to_use * 1000L; - } - } - } -#endif - -} diff --git a/Build/source/libs/jpeg/jmemname.c b/Build/source/libs/jpeg/jmemname.c deleted file mode 100644 index ed96dee1bc8..00000000000 --- a/Build/source/libs/jpeg/jmemname.c +++ /dev/null @@ -1,276 +0,0 @@ -/* - * jmemname.c - * - * Copyright (C) 1992-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file provides a generic implementation of the system-dependent - * portion of the JPEG memory manager. This implementation assumes that - * you must explicitly construct a name for each temp file. - * Also, the problem of determining the amount of memory available - * is shoved onto the user. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jmemsys.h" /* import the system-dependent declarations */ - -#ifndef HAVE_STDLIB_H /* should declare malloc(),free() */ -extern void * malloc JPP((size_t size)); -extern void free JPP((void *ptr)); -#endif - -#ifndef SEEK_SET /* pre-ANSI systems may not define this; */ -#define SEEK_SET 0 /* if not, assume 0 is correct */ -#endif - -#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ -#define READ_BINARY "r" -#define RW_BINARY "w+" -#else -#ifdef VMS /* VMS is very nonstandard */ -#define READ_BINARY "rb", "ctx=stm" -#define RW_BINARY "w+b", "ctx=stm" -#else /* standard ANSI-compliant case */ -#define READ_BINARY "rb" -#define RW_BINARY "w+b" -#endif -#endif - - -/* - * Selection of a file name for a temporary file. - * This is system-dependent! - * - * The code as given is suitable for most Unix systems, and it is easily - * modified for most non-Unix systems. Some notes: - * 1. The temp file is created in the directory named by TEMP_DIRECTORY. - * The default value is /usr/tmp, which is the conventional place for - * creating large temp files on Unix. On other systems you'll probably - * want to change the file location. You can do this by editing the - * #define, or (preferred) by defining TEMP_DIRECTORY in jconfig.h. - * - * 2. If you need to change the file name as well as its location, - * you can override the TEMP_FILE_NAME macro. (Note that this is - * actually a printf format string; it must contain %s and %d.) - * Few people should need to do this. - * - * 3. mktemp() is used to ensure that multiple processes running - * simultaneously won't select the same file names. If your system - * doesn't have mktemp(), define NO_MKTEMP to do it the hard way. - * (If you don't have , also define NO_ERRNO_H.) - * - * 4. You probably want to define NEED_SIGNAL_CATCHER so that cjpeg.c/djpeg.c - * will cause the temp files to be removed if you stop the program early. - */ - -#ifndef TEMP_DIRECTORY /* can override from jconfig.h or Makefile */ -#define TEMP_DIRECTORY "/usr/tmp/" /* recommended setting for Unix */ -#endif - -static int next_file_num; /* to distinguish among several temp files */ - -#ifdef NO_MKTEMP - -#ifndef TEMP_FILE_NAME /* can override from jconfig.h or Makefile */ -#define TEMP_FILE_NAME "%sJPG%03d.TMP" -#endif - -#ifndef NO_ERRNO_H -#include /* to define ENOENT */ -#endif - -/* ANSI C specifies that errno is a macro, but on older systems it's more - * likely to be a plain int variable. And not all versions of errno.h - * bother to declare it, so we have to in order to be most portable. Thus: - */ -#ifndef errno -extern int errno; -#endif - - -LOCAL(void) -select_file_name (char * fname) -{ - FILE * tfile; - - /* Keep generating file names till we find one that's not in use */ - for (;;) { - next_file_num++; /* advance counter */ - sprintf(fname, TEMP_FILE_NAME, TEMP_DIRECTORY, next_file_num); - if ((tfile = fopen(fname, READ_BINARY)) == NULL) { - /* fopen could have failed for a reason other than the file not - * being there; for example, file there but unreadable. - * If isn't available, then we cannot test the cause. - */ -#ifdef ENOENT - if (errno != ENOENT) - continue; -#endif - break; - } - fclose(tfile); /* oops, it's there; close tfile & try again */ - } -} - -#else /* ! NO_MKTEMP */ - -/* Note that mktemp() requires the initial filename to end in six X's */ -#ifndef TEMP_FILE_NAME /* can override from jconfig.h or Makefile */ -#define TEMP_FILE_NAME "%sJPG%dXXXXXX" -#endif - -LOCAL(void) -select_file_name (char * fname) -{ - next_file_num++; /* advance counter */ - sprintf(fname, TEMP_FILE_NAME, TEMP_DIRECTORY, next_file_num); - mktemp(fname); /* make sure file name is unique */ - /* mktemp replaces the trailing XXXXXX with a unique string of characters */ -} - -#endif /* NO_MKTEMP */ - - -/* - * Memory allocation and freeing are controlled by the regular library - * routines malloc() and free(). - */ - -GLOBAL(void *) -jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void *) malloc(sizeofobject); -} - -GLOBAL(void) -jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) -{ - free(object); -} - - -/* - * "Large" objects are treated the same as "small" ones. - * NB: although we include FAR keywords in the routine declarations, - * this file won't actually work in 80x86 small/medium model; at least, - * you probably won't be able to process useful-size images in only 64KB. - */ - -GLOBAL(void FAR *) -jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void FAR *) malloc(sizeofobject); -} - -GLOBAL(void) -jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) -{ - free(object); -} - - -/* - * This routine computes the total memory space available for allocation. - * It's impossible to do this in a portable way; our current solution is - * to make the user tell us (with a default value set at compile time). - * If you can actually get the available space, it's a good idea to subtract - * a slop factor of 5% or so. - */ - -#ifndef DEFAULT_MAX_MEM /* so can override from makefile */ -#define DEFAULT_MAX_MEM 1000000L /* default: one megabyte */ -#endif - -GLOBAL(long) -jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, - long max_bytes_needed, long already_allocated) -{ - return cinfo->mem->max_memory_to_use - already_allocated; -} - - -/* - * Backing store (temporary file) management. - * Backing store objects are only used when the value returned by - * jpeg_mem_available is less than the total space needed. You can dispense - * with these routines if you have plenty of virtual memory; see jmemnobs.c. - */ - - -METHODDEF(void) -read_backing_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - if (fseek(info->temp_file, file_offset, SEEK_SET)) - ERREXIT(cinfo, JERR_TFILE_SEEK); - if (JFREAD(info->temp_file, buffer_address, byte_count) - != (size_t) byte_count) - ERREXIT(cinfo, JERR_TFILE_READ); -} - - -METHODDEF(void) -write_backing_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - if (fseek(info->temp_file, file_offset, SEEK_SET)) - ERREXIT(cinfo, JERR_TFILE_SEEK); - if (JFWRITE(info->temp_file, buffer_address, byte_count) - != (size_t) byte_count) - ERREXIT(cinfo, JERR_TFILE_WRITE); -} - - -METHODDEF(void) -close_backing_store (j_common_ptr cinfo, backing_store_ptr info) -{ - fclose(info->temp_file); /* close the file */ - unlink(info->temp_name); /* delete the file */ -/* If your system doesn't have unlink(), use remove() instead. - * remove() is the ANSI-standard name for this function, but if - * your system was ANSI you'd be using jmemansi.c, right? - */ - TRACEMSS(cinfo, 1, JTRC_TFILE_CLOSE, info->temp_name); -} - - -/* - * Initial opening of a backing-store object. - */ - -GLOBAL(void) -jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - select_file_name(info->temp_name); - if ((info->temp_file = fopen(info->temp_name, RW_BINARY)) == NULL) - ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); - info->read_backing_store = read_backing_store; - info->write_backing_store = write_backing_store; - info->close_backing_store = close_backing_store; - TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name); -} - - -/* - * These routines take care of any system-dependent initialization and - * cleanup required. - */ - -GLOBAL(long) -jpeg_mem_init (j_common_ptr cinfo) -{ - next_file_num = 0; /* initialize temp file name generator */ - return DEFAULT_MAX_MEM; /* default for max_memory_to_use */ -} - -GLOBAL(void) -jpeg_mem_term (j_common_ptr cinfo) -{ - /* no work */ -} diff --git a/Build/source/libs/jpeg/jmemnobs.c b/Build/source/libs/jpeg/jmemnobs.c deleted file mode 100644 index eb8c337725f..00000000000 --- a/Build/source/libs/jpeg/jmemnobs.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * jmemnobs.c - * - * Copyright (C) 1992-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file provides a really simple implementation of the system- - * dependent portion of the JPEG memory manager. This implementation - * assumes that no backing-store files are needed: all required space - * can be obtained from malloc(). - * This is very portable in the sense that it'll compile on almost anything, - * but you'd better have lots of main memory (or virtual memory) if you want - * to process big images. - * Note that the max_memory_to_use option is ignored by this implementation. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jmemsys.h" /* import the system-dependent declarations */ - -#ifndef HAVE_STDLIB_H /* should declare malloc(),free() */ -extern void * malloc JPP((size_t size)); -extern void free JPP((void *ptr)); -#endif - - -/* - * Memory allocation and freeing are controlled by the regular library - * routines malloc() and free(). - */ - -GLOBAL(void *) -jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void *) malloc(sizeofobject); -} - -GLOBAL(void) -jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) -{ - free(object); -} - - -/* - * "Large" objects are treated the same as "small" ones. - * NB: although we include FAR keywords in the routine declarations, - * this file won't actually work in 80x86 small/medium model; at least, - * you probably won't be able to process useful-size images in only 64KB. - */ - -GLOBAL(void FAR *) -jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void FAR *) malloc(sizeofobject); -} - -GLOBAL(void) -jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) -{ - free(object); -} - - -/* - * This routine computes the total memory space available for allocation. - * Here we always say, "we got all you want bud!" - */ - -GLOBAL(long) -jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, - long max_bytes_needed, long already_allocated) -{ - return max_bytes_needed; -} - - -/* - * Backing store (temporary file) management. - * Since jpeg_mem_available always promised the moon, - * this should never be called and we can just error out. - */ - -GLOBAL(void) -jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - ERREXIT(cinfo, JERR_NO_BACKING_STORE); -} - - -/* - * These routines take care of any system-dependent initialization and - * cleanup required. Here, there isn't any. - */ - -GLOBAL(long) -jpeg_mem_init (j_common_ptr cinfo) -{ - return 0; /* just set max_memory_to_use to 0 */ -} - -GLOBAL(void) -jpeg_mem_term (j_common_ptr cinfo) -{ - /* no work */ -} diff --git a/Build/source/libs/jpeg/jmemsys.h b/Build/source/libs/jpeg/jmemsys.h deleted file mode 100644 index 6c3c6d348f2..00000000000 --- a/Build/source/libs/jpeg/jmemsys.h +++ /dev/null @@ -1,198 +0,0 @@ -/* - * jmemsys.h - * - * Copyright (C) 1992-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This include file defines the interface between the system-independent - * and system-dependent portions of the JPEG memory manager. No other - * modules need include it. (The system-independent portion is jmemmgr.c; - * there are several different versions of the system-dependent portion.) - * - * This file works as-is for the system-dependent memory managers supplied - * in the IJG distribution. You may need to modify it if you write a - * custom memory manager. If system-dependent changes are needed in - * this file, the best method is to #ifdef them based on a configuration - * symbol supplied in jconfig.h, as we have done with USE_MSDOS_MEMMGR - * and USE_MAC_MEMMGR. - */ - - -/* Short forms of external names for systems with brain-damaged linkers. */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jpeg_get_small jGetSmall -#define jpeg_free_small jFreeSmall -#define jpeg_get_large jGetLarge -#define jpeg_free_large jFreeLarge -#define jpeg_mem_available jMemAvail -#define jpeg_open_backing_store jOpenBackStore -#define jpeg_mem_init jMemInit -#define jpeg_mem_term jMemTerm -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - - -/* - * These two functions are used to allocate and release small chunks of - * memory. (Typically the total amount requested through jpeg_get_small is - * no more than 20K or so; this will be requested in chunks of a few K each.) - * Behavior should be the same as for the standard library functions malloc - * and free; in particular, jpeg_get_small must return NULL on failure. - * On most systems, these ARE malloc and free. jpeg_free_small is passed the - * size of the object being freed, just in case it's needed. - * On an 80x86 machine using small-data memory model, these manage near heap. - */ - -EXTERN(void *) jpeg_get_small JPP((j_common_ptr cinfo, size_t sizeofobject)); -EXTERN(void) jpeg_free_small JPP((j_common_ptr cinfo, void * object, - size_t sizeofobject)); - -/* - * These two functions are used to allocate and release large chunks of - * memory (up to the total free space designated by jpeg_mem_available). - * The interface is the same as above, except that on an 80x86 machine, - * far pointers are used. On most other machines these are identical to - * the jpeg_get/free_small routines; but we keep them separate anyway, - * in case a different allocation strategy is desirable for large chunks. - */ - -EXTERN(void FAR *) jpeg_get_large JPP((j_common_ptr cinfo, - size_t sizeofobject)); -EXTERN(void) jpeg_free_large JPP((j_common_ptr cinfo, void FAR * object, - size_t sizeofobject)); - -/* - * The macro MAX_ALLOC_CHUNK designates the maximum number of bytes that may - * be requested in a single call to jpeg_get_large (and jpeg_get_small for that - * matter, but that case should never come into play). This macro is needed - * to model the 64Kb-segment-size limit of far addressing on 80x86 machines. - * On those machines, we expect that jconfig.h will provide a proper value. - * On machines with 32-bit flat address spaces, any large constant may be used. - * - * NB: jmemmgr.c expects that MAX_ALLOC_CHUNK will be representable as type - * size_t and will be a multiple of sizeof(align_type). - */ - -#ifndef MAX_ALLOC_CHUNK /* may be overridden in jconfig.h */ -#define MAX_ALLOC_CHUNK 1000000000L -#endif - -/* - * This routine computes the total space still available for allocation by - * jpeg_get_large. If more space than this is needed, backing store will be - * used. NOTE: any memory already allocated must not be counted. - * - * There is a minimum space requirement, corresponding to the minimum - * feasible buffer sizes; jmemmgr.c will request that much space even if - * jpeg_mem_available returns zero. The maximum space needed, enough to hold - * all working storage in memory, is also passed in case it is useful. - * Finally, the total space already allocated is passed. If no better - * method is available, cinfo->mem->max_memory_to_use - already_allocated - * is often a suitable calculation. - * - * It is OK for jpeg_mem_available to underestimate the space available - * (that'll just lead to more backing-store access than is really necessary). - * However, an overestimate will lead to failure. Hence it's wise to subtract - * a slop factor from the true available space. 5% should be enough. - * - * On machines with lots of virtual memory, any large constant may be returned. - * Conversely, zero may be returned to always use the minimum amount of memory. - */ - -EXTERN(long) jpeg_mem_available JPP((j_common_ptr cinfo, - long min_bytes_needed, - long max_bytes_needed, - long already_allocated)); - - -/* - * This structure holds whatever state is needed to access a single - * backing-store object. The read/write/close method pointers are called - * by jmemmgr.c to manipulate the backing-store object; all other fields - * are private to the system-dependent backing store routines. - */ - -#define TEMP_NAME_LENGTH 64 /* max length of a temporary file's name */ - - -#ifdef USE_MSDOS_MEMMGR /* DOS-specific junk */ - -typedef unsigned short XMSH; /* type of extended-memory handles */ -typedef unsigned short EMSH; /* type of expanded-memory handles */ - -typedef union { - short file_handle; /* DOS file handle if it's a temp file */ - XMSH xms_handle; /* handle if it's a chunk of XMS */ - EMSH ems_handle; /* handle if it's a chunk of EMS */ -} handle_union; - -#endif /* USE_MSDOS_MEMMGR */ - -#ifdef USE_MAC_MEMMGR /* Mac-specific junk */ -#include -#endif /* USE_MAC_MEMMGR */ - - -typedef struct backing_store_struct * backing_store_ptr; - -typedef struct backing_store_struct { - /* Methods for reading/writing/closing this backing-store object */ - JMETHOD(void, read_backing_store, (j_common_ptr cinfo, - backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count)); - JMETHOD(void, write_backing_store, (j_common_ptr cinfo, - backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count)); - JMETHOD(void, close_backing_store, (j_common_ptr cinfo, - backing_store_ptr info)); - - /* Private fields for system-dependent backing-store management */ -#ifdef USE_MSDOS_MEMMGR - /* For the MS-DOS manager (jmemdos.c), we need: */ - handle_union handle; /* reference to backing-store storage object */ - char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */ -#else -#ifdef USE_MAC_MEMMGR - /* For the Mac manager (jmemmac.c), we need: */ - short temp_file; /* file reference number to temp file */ - FSSpec tempSpec; /* the FSSpec for the temp file */ - char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */ -#else - /* For a typical implementation with temp files, we need: */ - FILE * temp_file; /* stdio reference to temp file */ - char temp_name[TEMP_NAME_LENGTH]; /* name of temp file */ -#endif -#endif -} backing_store_info; - - -/* - * Initial opening of a backing-store object. This must fill in the - * read/write/close pointers in the object. The read/write routines - * may take an error exit if the specified maximum file size is exceeded. - * (If jpeg_mem_available always returns a large value, this routine can - * just take an error exit.) - */ - -EXTERN(void) jpeg_open_backing_store JPP((j_common_ptr cinfo, - backing_store_ptr info, - long total_bytes_needed)); - - -/* - * These routines take care of any system-dependent initialization and - * cleanup required. jpeg_mem_init will be called before anything is - * allocated (and, therefore, nothing in cinfo is of use except the error - * manager pointer). It should return a suitable default value for - * max_memory_to_use; this may subsequently be overridden by the surrounding - * application. (Note that max_memory_to_use is only important if - * jpeg_mem_available chooses to consult it ... no one else will.) - * jpeg_mem_term may assume that all requested memory has been freed and that - * all opened backing-store objects have been closed. - */ - -EXTERN(long) jpeg_mem_init JPP((j_common_ptr cinfo)); -EXTERN(void) jpeg_mem_term JPP((j_common_ptr cinfo)); diff --git a/Build/source/libs/jpeg/jmorecfg.h b/Build/source/libs/jpeg/jmorecfg.h deleted file mode 100644 index fc0899ec829..00000000000 --- a/Build/source/libs/jpeg/jmorecfg.h +++ /dev/null @@ -1,366 +0,0 @@ -/* - * jmorecfg.h - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains additional configuration options that customize the - * JPEG software for special applications or support machine-dependent - * optimizations. Most users will not need to touch this file. - */ - - -/* - * Define BITS_IN_JSAMPLE as either - * 8 for 8-bit sample values (the usual setting) - * 12 for 12-bit sample values - * Only 8 and 12 are legal data precisions for lossy JPEG according to the - * JPEG standard, and the IJG code does not support anything else! - * We do not support run-time selection of data precision, sorry. - */ - -#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ - - -/* - * Maximum number of components (color channels) allowed in JPEG image. - * To meet the letter of the JPEG spec, set this to 255. However, darn - * few applications need more than 4 channels (maybe 5 for CMYK + alpha - * mask). We recommend 10 as a reasonable compromise; use 4 if you are - * really short on memory. (Each allowed component costs a hundred or so - * bytes of storage, whether actually used in an image or not.) - */ - -#define MAX_COMPONENTS 10 /* maximum number of image components */ - - -/* - * Basic data types. - * You may need to change these if you have a machine with unusual data - * type sizes; for example, "char" not 8 bits, "short" not 16 bits, - * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, - * but it had better be at least 16. - */ - -/* Representation of a single sample (pixel element value). - * We frequently allocate large arrays of these, so it's important to keep - * them small. But if you have memory to burn and access to char or short - * arrays is very slow on your hardware, you might want to change these. - */ - -#if BITS_IN_JSAMPLE == 8 -/* JSAMPLE should be the smallest type that will hold the values 0..255. - * You can use a signed char by having GETJSAMPLE mask it with 0xFF. - */ - -#ifdef HAVE_UNSIGNED_CHAR - -typedef unsigned char JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#else /* not HAVE_UNSIGNED_CHAR */ - -typedef char JSAMPLE; -#ifdef CHAR_IS_UNSIGNED -#define GETJSAMPLE(value) ((int) (value)) -#else -#define GETJSAMPLE(value) ((int) (value) & 0xFF) -#endif /* CHAR_IS_UNSIGNED */ - -#endif /* HAVE_UNSIGNED_CHAR */ - -#define MAXJSAMPLE 255 -#define CENTERJSAMPLE 128 - -#endif /* BITS_IN_JSAMPLE == 8 */ - - -#if BITS_IN_JSAMPLE == 12 -/* JSAMPLE should be the smallest type that will hold the values 0..4095. - * On nearly all machines "short" will do nicely. - */ - -typedef short JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#define MAXJSAMPLE 4095 -#define CENTERJSAMPLE 2048 - -#endif /* BITS_IN_JSAMPLE == 12 */ - - -/* Representation of a DCT frequency coefficient. - * This should be a signed value of at least 16 bits; "short" is usually OK. - * Again, we allocate large arrays of these, but you can change to int - * if you have memory to burn and "short" is really slow. - */ - -typedef short JCOEF; - - -/* Compressed datastreams are represented as arrays of JOCTET. - * These must be EXACTLY 8 bits wide, at least once they are written to - * external storage. Note that when using the stdio data source/destination - * managers, this is also the data type passed to fread/fwrite. - */ - -#ifdef HAVE_UNSIGNED_CHAR - -typedef unsigned char JOCTET; -#define GETJOCTET(value) (value) - -#else /* not HAVE_UNSIGNED_CHAR */ - -typedef char JOCTET; -#ifdef CHAR_IS_UNSIGNED -#define GETJOCTET(value) (value) -#else -#define GETJOCTET(value) ((value) & 0xFF) -#endif /* CHAR_IS_UNSIGNED */ - -#endif /* HAVE_UNSIGNED_CHAR */ - - -/* These typedefs are used for various table entries and so forth. - * They must be at least as wide as specified; but making them too big - * won't cost a huge amount of memory, so we don't provide special - * extraction code like we did for JSAMPLE. (In other words, these - * typedefs live at a different point on the speed/space tradeoff curve.) - */ - -/* UINT8 must hold at least the values 0..255. */ - -#ifdef HAVE_UNSIGNED_CHAR -typedef unsigned char UINT8; -#else /* not HAVE_UNSIGNED_CHAR */ -#ifdef CHAR_IS_UNSIGNED -typedef char UINT8; -#else /* not CHAR_IS_UNSIGNED */ -typedef short UINT8; -#endif /* CHAR_IS_UNSIGNED */ -#endif /* HAVE_UNSIGNED_CHAR */ - -/* UINT16 must hold at least the values 0..65535. */ - -#ifdef HAVE_UNSIGNED_SHORT -typedef unsigned short UINT16; -#else /* not HAVE_UNSIGNED_SHORT */ -typedef unsigned int UINT16; -#endif /* HAVE_UNSIGNED_SHORT */ - -/* INT16 must hold at least the values -32768..32767. */ - -#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ -typedef short INT16; -#endif - -/* INT32 must hold at least signed 32-bit values. */ - -#if !defined(XMD_H) && !defined(_WIN32) /* X11/xmd.h correctly defines INT32 */ -typedef long INT32; -#endif - -/* Datatype used for image dimensions. The JPEG standard only supports - * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore - * "unsigned int" is sufficient on all machines. However, if you need to - * handle larger images and you don't mind deviating from the spec, you - * can change this datatype. - */ - -typedef unsigned int JDIMENSION; - -#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ - - -/* These macros are used in all function definitions and extern declarations. - * You could modify them if you need to change function linkage conventions; - * in particular, you'll need to do that to make the library a Windows DLL. - * Another application is to make all functions global for use with debuggers - * or code profilers that require it. - */ - -/* a function called through method pointers: */ -#define METHODDEF(type) static type -/* a function used only in its module: */ -#define LOCAL(type) static type -/* a function referenced thru EXTERNs: */ -#define GLOBAL(type) type -/* a reference to a GLOBAL function: */ -#define EXTERN(type) extern JPEGDLL type - - -/* This macro is used to declare a "method", that is, a function pointer. - * We want to supply prototype parameters if the compiler can cope. - * Note that the arglist parameter must be parenthesized! - * Again, you can customize this if you need special linkage keywords. - */ - -#ifdef HAVE_PROTOTYPES -#define JMETHOD(type,methodname,arglist) type (*methodname) arglist -#else -#define JMETHOD(type,methodname,arglist) type (*methodname) () -#endif - - -/* Here is the pseudo-keyword for declaring pointers that must be "far" - * on 80x86 machines. Most of the specialized coding for 80x86 is handled - * by just saying "FAR *" where such a pointer is needed. In a few places - * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. - */ - -#ifdef FAR -#undef FAR -#endif -#ifdef NEED_FAR_POINTERS -#define FAR far -#else -#define FAR -#endif - - -/* - * On a few systems, type boolean and/or its values FALSE, TRUE may appear - * in standard header files. Or you may have conflicts with application- - * specific header files that you want to include together with these files. - * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. - */ - -#ifndef HAVE_BOOLEAN -typedef int boolean; -#endif -#ifndef FALSE /* in case these macros already exist */ -#define FALSE 0 /* values of boolean */ -#endif -#ifndef TRUE -#define TRUE 1 -#endif - - -/* - * The remaining options affect code selection within the JPEG library, - * but they don't need to be visible to most applications using the library. - * To minimize application namespace pollution, the symbols won't be - * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. - */ - -#ifdef JPEG_INTERNALS -#define JPEG_INTERNAL_OPTIONS -#endif - -#ifdef JPEG_INTERNAL_OPTIONS - - -/* - * These defines indicate whether to include various optional functions. - * Undefining some of these symbols will produce a smaller but less capable - * library. Note that you can leave certain source files out of the - * compilation/linking process if you've #undef'd the corresponding symbols. - * (You may HAVE to do that if your compiler doesn't like null source files.) - */ - -/* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */ - -/* Capability options common to encoder and decoder: */ - -#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ -#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ -#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ - -/* Encoder capability options: */ - -#undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ -#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ -#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ -#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ -/* Note: if you selected 12-bit data precision, it is dangerous to turn off - * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit - * precision, so jchuff.c normally uses entropy optimization to compute - * usable tables for higher precision. If you don't want to do optimization, - * you'll have to supply different default Huffman tables. - * The exact same statements apply for progressive JPEG: the default tables - * don't work for progressive mode. (This may get fixed, however.) - */ -#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ - -/* Decoder capability options: */ - -#undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ -#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ -#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ -#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ -#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ -#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ -#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ -#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ -#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ -#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ - -/* more capability options later, no doubt */ - - -/* - * Ordering of RGB data in scanlines passed to or from the application. - * If your application wants to deal with data in the order B,G,R, just - * change these macros. You can also deal with formats such as R,G,B,X - * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing - * the offsets will also change the order in which colormap data is organized. - * RESTRICTIONS: - * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. - * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not - * useful if you are using JPEG color spaces other than YCbCr or grayscale. - * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE - * is not 3 (they don't understand about dummy color components!). So you - * can't use color quantization if you change that value. - */ - -#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ -#define RGB_GREEN 1 /* Offset of Green */ -#define RGB_BLUE 2 /* Offset of Blue */ -#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ - - -/* Definitions for speed-related optimizations. */ - - -/* If your compiler supports inline functions, define INLINE - * as the inline keyword; otherwise define it as empty. - */ - -#ifndef INLINE -#ifdef __GNUC__ /* for instance, GNU C knows about inline */ -#define INLINE __inline__ -#endif -#ifndef INLINE -#define INLINE /* default is to define it as empty */ -#endif -#endif - - -/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying - * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER - * as short on such a machine. MULTIPLIER must be at least 16 bits wide. - */ - -#ifndef MULTIPLIER -#define MULTIPLIER int /* type for fastest integer multiply */ -#endif - - -/* FAST_FLOAT should be either float or double, whichever is done faster - * by your compiler. (Note that this type is only used in the floating point - * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) - * Typically, float is faster in ANSI C compilers, while double is faster in - * pre-ANSI compilers (because they insist on converting to double anyway). - * The code below therefore chooses float if we have ANSI-style prototypes. - */ - -#ifndef FAST_FLOAT -#ifdef HAVE_PROTOTYPES -#define FAST_FLOAT float -#else -#define FAST_FLOAT double -#endif -#endif - -#endif /* JPEG_INTERNAL_OPTIONS */ diff --git a/Build/source/libs/jpeg/jpegint.h b/Build/source/libs/jpeg/jpegint.h deleted file mode 100644 index 95b00d405ca..00000000000 --- a/Build/source/libs/jpeg/jpegint.h +++ /dev/null @@ -1,392 +0,0 @@ -/* - * jpegint.h - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file provides common declarations for the various JPEG modules. - * These declarations are considered internal to the JPEG library; most - * applications using the library shouldn't need to include this file. - */ - - -/* Declarations for both compression & decompression */ - -typedef enum { /* Operating modes for buffer controllers */ - JBUF_PASS_THRU, /* Plain stripwise operation */ - /* Remaining modes require a full-image buffer to have been created */ - JBUF_SAVE_SOURCE, /* Run source subobject only, save output */ - JBUF_CRANK_DEST, /* Run dest subobject only, using saved data */ - JBUF_SAVE_AND_PASS /* Run both subobjects, save output */ -} J_BUF_MODE; - -/* Values of global_state field (jdapi.c has some dependencies on ordering!) */ -#define CSTATE_START 100 /* after create_compress */ -#define CSTATE_SCANNING 101 /* start_compress done, write_scanlines OK */ -#define CSTATE_RAW_OK 102 /* start_compress done, write_raw_data OK */ -#define CSTATE_WRCOEFS 103 /* jpeg_write_coefficients done */ -#define DSTATE_START 200 /* after create_decompress */ -#define DSTATE_INHEADER 201 /* reading header markers, no SOS yet */ -#define DSTATE_READY 202 /* found SOS, ready for start_decompress */ -#define DSTATE_PRELOAD 203 /* reading multiscan file in start_decompress*/ -#define DSTATE_PRESCAN 204 /* performing dummy pass for 2-pass quant */ -#define DSTATE_SCANNING 205 /* start_decompress done, read_scanlines OK */ -#define DSTATE_RAW_OK 206 /* start_decompress done, read_raw_data OK */ -#define DSTATE_BUFIMAGE 207 /* expecting jpeg_start_output */ -#define DSTATE_BUFPOST 208 /* looking for SOS/EOI in jpeg_finish_output */ -#define DSTATE_RDCOEFS 209 /* reading file in jpeg_read_coefficients */ -#define DSTATE_STOPPING 210 /* looking for EOI in jpeg_finish_decompress */ - - -/* Declarations for compression modules */ - -/* Master control module */ -struct jpeg_comp_master { - JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo)); - JMETHOD(void, pass_startup, (j_compress_ptr cinfo)); - JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); - - /* State variables made visible to other modules */ - boolean call_pass_startup; /* True if pass_startup must be called */ - boolean is_last_pass; /* True during last pass */ -}; - -/* Main buffer control (downsampled-data buffer) */ -struct jpeg_c_main_controller { - JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); - JMETHOD(void, process_data, (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, - JDIMENSION in_rows_avail)); -}; - -/* Compression preprocessing (downsampling input buffer control) */ -struct jpeg_c_prep_controller { - JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); - JMETHOD(void, pre_process_data, (j_compress_ptr cinfo, - JSAMPARRAY input_buf, - JDIMENSION *in_row_ctr, - JDIMENSION in_rows_avail, - JSAMPIMAGE output_buf, - JDIMENSION *out_row_group_ctr, - JDIMENSION out_row_groups_avail)); -}; - -/* Coefficient buffer control */ -struct jpeg_c_coef_controller { - JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); - JMETHOD(boolean, compress_data, (j_compress_ptr cinfo, - JSAMPIMAGE input_buf)); -}; - -/* Colorspace conversion */ -struct jpeg_color_converter { - JMETHOD(void, start_pass, (j_compress_ptr cinfo)); - JMETHOD(void, color_convert, (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPIMAGE output_buf, - JDIMENSION output_row, int num_rows)); -}; - -/* Downsampling */ -struct jpeg_downsampler { - JMETHOD(void, start_pass, (j_compress_ptr cinfo)); - JMETHOD(void, downsample, (j_compress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION in_row_index, - JSAMPIMAGE output_buf, - JDIMENSION out_row_group_index)); - - boolean need_context_rows; /* TRUE if need rows above & below */ -}; - -/* Forward DCT (also controls coefficient quantization) */ -struct jpeg_forward_dct { - JMETHOD(void, start_pass, (j_compress_ptr cinfo)); - /* perhaps this should be an array??? */ - JMETHOD(void, forward_DCT, (j_compress_ptr cinfo, - jpeg_component_info * compptr, - JSAMPARRAY sample_data, JBLOCKROW coef_blocks, - JDIMENSION start_row, JDIMENSION start_col, - JDIMENSION num_blocks)); -}; - -/* Entropy encoding */ -struct jpeg_entropy_encoder { - JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics)); - JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data)); - JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); -}; - -/* Marker writing */ -struct jpeg_marker_writer { - JMETHOD(void, write_file_header, (j_compress_ptr cinfo)); - JMETHOD(void, write_frame_header, (j_compress_ptr cinfo)); - JMETHOD(void, write_scan_header, (j_compress_ptr cinfo)); - JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo)); - JMETHOD(void, write_tables_only, (j_compress_ptr cinfo)); - /* These routines are exported to allow insertion of extra markers */ - /* Probably only COM and APPn markers should be written this way */ - JMETHOD(void, write_marker_header, (j_compress_ptr cinfo, int marker, - unsigned int datalen)); - JMETHOD(void, write_marker_byte, (j_compress_ptr cinfo, int val)); -}; - - -/* Declarations for decompression modules */ - -/* Master control module */ -struct jpeg_decomp_master { - JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo)); - JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo)); - - /* State variables made visible to other modules */ - boolean is_dummy_pass; /* True during 1st pass for 2-pass quant */ -}; - -/* Input control module */ -struct jpeg_input_controller { - JMETHOD(int, consume_input, (j_decompress_ptr cinfo)); - JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo)); - JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); - JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo)); - - /* State variables made visible to other modules */ - boolean has_multiple_scans; /* True if file has multiple scans */ - boolean eoi_reached; /* True when EOI has been consumed */ -}; - -/* Main buffer control (downsampled-data buffer) */ -struct jpeg_d_main_controller { - JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); - JMETHOD(void, process_data, (j_decompress_ptr cinfo, - JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail)); -}; - -/* Coefficient buffer control */ -struct jpeg_d_coef_controller { - JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); - JMETHOD(int, consume_data, (j_decompress_ptr cinfo)); - JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo)); - JMETHOD(int, decompress_data, (j_decompress_ptr cinfo, - JSAMPIMAGE output_buf)); - /* Pointer to array of coefficient virtual arrays, or NULL if none */ - jvirt_barray_ptr *coef_arrays; -}; - -/* Decompression postprocessing (color quantization buffer control) */ -struct jpeg_d_post_controller { - JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); - JMETHOD(void, post_process_data, (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, - JDIMENSION *in_row_group_ctr, - JDIMENSION in_row_groups_avail, - JSAMPARRAY output_buf, - JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail)); -}; - -/* Marker reading & parsing */ -struct jpeg_marker_reader { - JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo)); - /* Read markers until SOS or EOI. - * Returns same codes as are defined for jpeg_consume_input: - * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI. - */ - JMETHOD(int, read_markers, (j_decompress_ptr cinfo)); - /* Read a restart marker --- exported for use by entropy decoder only */ - jpeg_marker_parser_method read_restart_marker; - - /* State of marker reader --- nominally internal, but applications - * supplying COM or APPn handlers might like to know the state. - */ - boolean saw_SOI; /* found SOI? */ - boolean saw_SOF; /* found SOF? */ - int next_restart_num; /* next restart number expected (0-7) */ - unsigned int discarded_bytes; /* # of bytes skipped looking for a marker */ -}; - -/* Entropy decoding */ -struct jpeg_entropy_decoder { - JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); - JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo, - JBLOCKROW *MCU_data)); - - /* This is here to share code between baseline and progressive decoders; */ - /* other modules probably should not use it */ - boolean insufficient_data; /* set TRUE after emitting warning */ -}; - -/* Inverse DCT (also performs dequantization) */ -typedef JMETHOD(void, inverse_DCT_method_ptr, - (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, - JSAMPARRAY output_buf, JDIMENSION output_col)); - -struct jpeg_inverse_dct { - JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); - /* It is useful to allow each component to have a separate IDCT method. */ - inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS]; -}; - -/* Upsampling (note that upsampler must also call color converter) */ -struct jpeg_upsampler { - JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); - JMETHOD(void, upsample, (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, - JDIMENSION *in_row_group_ctr, - JDIMENSION in_row_groups_avail, - JSAMPARRAY output_buf, - JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail)); - - boolean need_context_rows; /* TRUE if need rows above & below */ -}; - -/* Colorspace conversion */ -struct jpeg_color_deconverter { - JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); - JMETHOD(void, color_convert, (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION input_row, - JSAMPARRAY output_buf, int num_rows)); -}; - -/* Color quantization or color precision reduction */ -struct jpeg_color_quantizer { - JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan)); - JMETHOD(void, color_quantize, (j_decompress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPARRAY output_buf, - int num_rows)); - JMETHOD(void, finish_pass, (j_decompress_ptr cinfo)); - JMETHOD(void, new_color_map, (j_decompress_ptr cinfo)); -}; - - -/* Miscellaneous useful macros */ - -#undef MAX -#define MAX(a,b) ((a) > (b) ? (a) : (b)) -#undef MIN -#define MIN(a,b) ((a) < (b) ? (a) : (b)) - - -/* We assume that right shift corresponds to signed division by 2 with - * rounding towards minus infinity. This is correct for typical "arithmetic - * shift" instructions that shift in copies of the sign bit. But some - * C compilers implement >> with an unsigned shift. For these machines you - * must define RIGHT_SHIFT_IS_UNSIGNED. - * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity. - * It is only applied with constant shift counts. SHIFT_TEMPS must be - * included in the variables of any routine using RIGHT_SHIFT. - */ - -#ifdef RIGHT_SHIFT_IS_UNSIGNED -#define SHIFT_TEMPS INT32 shift_temp; -#define RIGHT_SHIFT(x,shft) \ - ((shift_temp = (x)) < 0 ? \ - (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \ - (shift_temp >> (shft))) -#else -#define SHIFT_TEMPS -#define RIGHT_SHIFT(x,shft) ((x) >> (shft)) -#endif - - -/* Short forms of external names for systems with brain-damaged linkers. */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jinit_compress_master jICompress -#define jinit_c_master_control jICMaster -#define jinit_c_main_controller jICMainC -#define jinit_c_prep_controller jICPrepC -#define jinit_c_coef_controller jICCoefC -#define jinit_color_converter jICColor -#define jinit_downsampler jIDownsampler -#define jinit_forward_dct jIFDCT -#define jinit_huff_encoder jIHEncoder -#define jinit_phuff_encoder jIPHEncoder -#define jinit_marker_writer jIMWriter -#define jinit_master_decompress jIDMaster -#define jinit_d_main_controller jIDMainC -#define jinit_d_coef_controller jIDCoefC -#define jinit_d_post_controller jIDPostC -#define jinit_input_controller jIInCtlr -#define jinit_marker_reader jIMReader -#define jinit_huff_decoder jIHDecoder -#define jinit_phuff_decoder jIPHDecoder -#define jinit_inverse_dct jIIDCT -#define jinit_upsampler jIUpsampler -#define jinit_color_deconverter jIDColor -#define jinit_1pass_quantizer jI1Quant -#define jinit_2pass_quantizer jI2Quant -#define jinit_merged_upsampler jIMUpsampler -#define jinit_memory_mgr jIMemMgr -#define jdiv_round_up jDivRound -#define jround_up jRound -#define jcopy_sample_rows jCopySamples -#define jcopy_block_row jCopyBlocks -#define jzero_far jZeroFar -#define jpeg_zigzag_order jZIGTable -#define jpeg_natural_order jZAGTable -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - - -/* Compression module initialization routines */ -EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo)); -EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo, - boolean transcode_only)); -EXTERN(void) jinit_c_main_controller JPP((j_compress_ptr cinfo, - boolean need_full_buffer)); -EXTERN(void) jinit_c_prep_controller JPP((j_compress_ptr cinfo, - boolean need_full_buffer)); -EXTERN(void) jinit_c_coef_controller JPP((j_compress_ptr cinfo, - boolean need_full_buffer)); -EXTERN(void) jinit_color_converter JPP((j_compress_ptr cinfo)); -EXTERN(void) jinit_downsampler JPP((j_compress_ptr cinfo)); -EXTERN(void) jinit_forward_dct JPP((j_compress_ptr cinfo)); -EXTERN(void) jinit_huff_encoder JPP((j_compress_ptr cinfo)); -EXTERN(void) jinit_phuff_encoder JPP((j_compress_ptr cinfo)); -EXTERN(void) jinit_marker_writer JPP((j_compress_ptr cinfo)); -/* Decompression module initialization routines */ -EXTERN(void) jinit_master_decompress JPP((j_decompress_ptr cinfo)); -EXTERN(void) jinit_d_main_controller JPP((j_decompress_ptr cinfo, - boolean need_full_buffer)); -EXTERN(void) jinit_d_coef_controller JPP((j_decompress_ptr cinfo, - boolean need_full_buffer)); -EXTERN(void) jinit_d_post_controller JPP((j_decompress_ptr cinfo, - boolean need_full_buffer)); -EXTERN(void) jinit_input_controller JPP((j_decompress_ptr cinfo)); -EXTERN(void) jinit_marker_reader JPP((j_decompress_ptr cinfo)); -EXTERN(void) jinit_huff_decoder JPP((j_decompress_ptr cinfo)); -EXTERN(void) jinit_phuff_decoder JPP((j_decompress_ptr cinfo)); -EXTERN(void) jinit_inverse_dct JPP((j_decompress_ptr cinfo)); -EXTERN(void) jinit_upsampler JPP((j_decompress_ptr cinfo)); -EXTERN(void) jinit_color_deconverter JPP((j_decompress_ptr cinfo)); -EXTERN(void) jinit_1pass_quantizer JPP((j_decompress_ptr cinfo)); -EXTERN(void) jinit_2pass_quantizer JPP((j_decompress_ptr cinfo)); -EXTERN(void) jinit_merged_upsampler JPP((j_decompress_ptr cinfo)); -/* Memory manager initialization */ -EXTERN(void) jinit_memory_mgr JPP((j_common_ptr cinfo)); - -/* Utility routines in jutils.c */ -EXTERN(long) jdiv_round_up JPP((long a, long b)); -EXTERN(long) jround_up JPP((long a, long b)); -EXTERN(void) jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row, - JSAMPARRAY output_array, int dest_row, - int num_rows, JDIMENSION num_cols)); -EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row, - JDIMENSION num_blocks)); -EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero)); -/* Constant tables in jutils.c */ -#if 0 /* This table is not actually needed in v6a */ -extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */ -#endif -extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */ - -/* Suppress undefined-structure complaints if necessary. */ - -#ifdef INCOMPLETE_TYPES_BROKEN -#ifndef AM_MEMORY_MANAGER /* only jmemmgr.c defines these */ -struct jvirt_sarray_control { long dummy; }; -struct jvirt_barray_control { long dummy; }; -#endif -#endif /* INCOMPLETE_TYPES_BROKEN */ diff --git a/Build/source/libs/jpeg/jpeglib.h b/Build/source/libs/jpeg/jpeglib.h deleted file mode 100644 index d1be8ddeff1..00000000000 --- a/Build/source/libs/jpeg/jpeglib.h +++ /dev/null @@ -1,1096 +0,0 @@ -/* - * jpeglib.h - * - * Copyright (C) 1991-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file defines the application interface for the JPEG library. - * Most applications using the library need only include this file, - * and perhaps jerror.h if they want to know the exact error codes. - */ - -#ifndef JPEGLIB_H -#define JPEGLIB_H - -/* - * First we include the configuration files that record how this - * installation of the JPEG library is set up. jconfig.h can be - * generated automatically for many systems. jmorecfg.h contains - * manual configuration options that most people need not worry about. - */ - -#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ -#include "jconfig.h" /* widely used configuration options */ -#endif -#include "jmorecfg.h" /* seldom changed options */ - - -/* Version ID for the JPEG library. - * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". - */ - -#define JPEG_LIB_VERSION 62 /* Version 6b */ - - -/* Various constants determining the sizes of things. - * All of these are specified by the JPEG standard, so don't change them - * if you want to be compatible. - */ - -#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ -#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ -#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ -#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ -#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ -#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ -#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ -/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; - * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. - * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU - * to handle it. We even let you do this from the jconfig.h file. However, - * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe - * sometimes emits noncompliant files doesn't mean you should too. - */ -#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ -#ifndef D_MAX_BLOCKS_IN_MCU -#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ -#endif - - -/* Data structures for images (arrays of samples and of DCT coefficients). - * On 80x86 machines, the image arrays are too big for near pointers, - * but the pointer arrays can fit in near memory. - */ - -typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ -typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ -typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ - -typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ -typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ -typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ -typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ - -typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ - - -/* Types for JPEG compression parameters and working tables. */ - - -/* DCT coefficient quantization tables. */ - -typedef struct { - /* This array gives the coefficient quantizers in natural array order - * (not the zigzag order in which they are stored in a JPEG DQT marker). - * CAUTION: IJG versions prior to v6a kept this array in zigzag order. - */ - UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ - /* This field is used only during compression. It's initialized FALSE when - * the table is created, and set TRUE when it's been output to the file. - * You could suppress output of a table by setting this to TRUE. - * (See jpeg_suppress_tables for an example.) - */ - boolean sent_table; /* TRUE when table has been output */ -} JQUANT_TBL; - - -/* Huffman coding tables. */ - -typedef struct { - /* These two fields directly represent the contents of a JPEG DHT marker */ - UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ - /* length k bits; bits[0] is unused */ - UINT8 huffval[256]; /* The symbols, in order of incr code length */ - /* This field is used only during compression. It's initialized FALSE when - * the table is created, and set TRUE when it's been output to the file. - * You could suppress output of a table by setting this to TRUE. - * (See jpeg_suppress_tables for an example.) - */ - boolean sent_table; /* TRUE when table has been output */ -} JHUFF_TBL; - - -/* Basic info about one component (color channel). */ - -typedef struct { - /* These values are fixed over the whole image. */ - /* For compression, they must be supplied by parameter setup; */ - /* for decompression, they are read from the SOF marker. */ - int component_id; /* identifier for this component (0..255) */ - int component_index; /* its index in SOF or cinfo->comp_info[] */ - int h_samp_factor; /* horizontal sampling factor (1..4) */ - int v_samp_factor; /* vertical sampling factor (1..4) */ - int quant_tbl_no; /* quantization table selector (0..3) */ - /* These values may vary between scans. */ - /* For compression, they must be supplied by parameter setup; */ - /* for decompression, they are read from the SOS marker. */ - /* The decompressor output side may not use these variables. */ - int dc_tbl_no; /* DC entropy table selector (0..3) */ - int ac_tbl_no; /* AC entropy table selector (0..3) */ - - /* Remaining fields should be treated as private by applications. */ - - /* These values are computed during compression or decompression startup: */ - /* Component's size in DCT blocks. - * Any dummy blocks added to complete an MCU are not counted; therefore - * these values do not depend on whether a scan is interleaved or not. - */ - JDIMENSION width_in_blocks; - JDIMENSION height_in_blocks; - /* Size of a DCT block in samples. Always DCTSIZE for compression. - * For decompression this is the size of the output from one DCT block, - * reflecting any scaling we choose to apply during the IDCT step. - * Values of 1,2,4,8 are likely to be supported. Note that different - * components may receive different IDCT scalings. - */ - int DCT_scaled_size; - /* The downsampled dimensions are the component's actual, unpadded number - * of samples at the main buffer (preprocessing/compression interface), thus - * downsampled_width = ceil(image_width * Hi/Hmax) - * and similarly for height. For decompression, IDCT scaling is included, so - * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE) - */ - JDIMENSION downsampled_width; /* actual width in samples */ - JDIMENSION downsampled_height; /* actual height in samples */ - /* This flag is used only for decompression. In cases where some of the - * components will be ignored (eg grayscale output from YCbCr image), - * we can skip most computations for the unused components. - */ - boolean component_needed; /* do we need the value of this component? */ - - /* These values are computed before starting a scan of the component. */ - /* The decompressor output side may not use these variables. */ - int MCU_width; /* number of blocks per MCU, horizontally */ - int MCU_height; /* number of blocks per MCU, vertically */ - int MCU_blocks; /* MCU_width * MCU_height */ - int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */ - int last_col_width; /* # of non-dummy blocks across in last MCU */ - int last_row_height; /* # of non-dummy blocks down in last MCU */ - - /* Saved quantization table for component; NULL if none yet saved. - * See jdinput.c comments about the need for this information. - * This field is currently used only for decompression. - */ - JQUANT_TBL * quant_table; - - /* Private per-component storage for DCT or IDCT subsystem. */ - void * dct_table; -} jpeg_component_info; - - -/* The script for encoding a multiple-scan file is an array of these: */ - -typedef struct { - int comps_in_scan; /* number of components encoded in this scan */ - int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ - int Ss, Se; /* progressive JPEG spectral selection parms */ - int Ah, Al; /* progressive JPEG successive approx. parms */ -} jpeg_scan_info; - -/* The decompressor can save APPn and COM markers in a list of these: */ - -typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; - -struct jpeg_marker_struct { - jpeg_saved_marker_ptr next; /* next in list, or NULL */ - UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ - unsigned int original_length; /* # bytes of data in the file */ - unsigned int data_length; /* # bytes of data saved at data[] */ - JOCTET FAR * data; /* the data contained in the marker */ - /* the marker length word is not counted in data_length or original_length */ -}; - -/* Known color spaces. */ - -typedef enum { - JCS_UNKNOWN, /* error/unspecified */ - JCS_GRAYSCALE, /* monochrome */ - JCS_RGB, /* red/green/blue */ - JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ - JCS_CMYK, /* C/M/Y/K */ - JCS_YCCK /* Y/Cb/Cr/K */ -} J_COLOR_SPACE; - -/* DCT/IDCT algorithm options. */ - -typedef enum { - JDCT_ISLOW, /* slow but accurate integer algorithm */ - JDCT_IFAST, /* faster, less accurate integer method */ - JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ -} J_DCT_METHOD; - -#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ -#define JDCT_DEFAULT JDCT_ISLOW -#endif -#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ -#define JDCT_FASTEST JDCT_IFAST -#endif - -/* Dithering options for decompression. */ - -typedef enum { - JDITHER_NONE, /* no dithering */ - JDITHER_ORDERED, /* simple ordered dither */ - JDITHER_FS /* Floyd-Steinberg error diffusion dither */ -} J_DITHER_MODE; - - -/* Common fields between JPEG compression and decompression master structs. */ - -#define jpeg_common_fields \ - struct jpeg_error_mgr * err; /* Error handler module */\ - struct jpeg_memory_mgr * mem; /* Memory manager module */\ - struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ - void * client_data; /* Available for use by application */\ - boolean is_decompressor; /* So common code can tell which is which */\ - int global_state /* For checking call sequence validity */ - -/* Routines that are to be used by both halves of the library are declared - * to receive a pointer to this structure. There are no actual instances of - * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. - */ -struct jpeg_common_struct { - jpeg_common_fields; /* Fields common to both master struct types */ - /* Additional fields follow in an actual jpeg_compress_struct or - * jpeg_decompress_struct. All three structs must agree on these - * initial fields! (This would be a lot cleaner in C++.) - */ -}; - -typedef struct jpeg_common_struct * j_common_ptr; -typedef struct jpeg_compress_struct * j_compress_ptr; -typedef struct jpeg_decompress_struct * j_decompress_ptr; - - -/* Master record for a compression instance */ - -struct jpeg_compress_struct { - jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ - - /* Destination for compressed data */ - struct jpeg_destination_mgr * dest; - - /* Description of source image --- these fields must be filled in by - * outer application before starting compression. in_color_space must - * be correct before you can even call jpeg_set_defaults(). - */ - - JDIMENSION image_width; /* input image width */ - JDIMENSION image_height; /* input image height */ - int input_components; /* # of color components in input image */ - J_COLOR_SPACE in_color_space; /* colorspace of input image */ - - double input_gamma; /* image gamma of input image */ - - /* Compression parameters --- these fields must be set before calling - * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to - * initialize everything to reasonable defaults, then changing anything - * the application specifically wants to change. That way you won't get - * burnt when new parameters are added. Also note that there are several - * helper routines to simplify changing parameters. - */ - - int data_precision; /* bits of precision in image data */ - - int num_components; /* # of color components in JPEG image */ - J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ - - jpeg_component_info * comp_info; - /* comp_info[i] describes component that appears i'th in SOF */ - - JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; - /* ptrs to coefficient quantization tables, or NULL if not defined */ - - JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; - JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; - /* ptrs to Huffman coding tables, or NULL if not defined */ - - UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ - UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ - UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ - - int num_scans; /* # of entries in scan_info array */ - const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ - /* The default value of scan_info is NULL, which causes a single-scan - * sequential JPEG file to be emitted. To create a multi-scan file, - * set num_scans and scan_info to point to an array of scan definitions. - */ - - boolean raw_data_in; /* TRUE=caller supplies downsampled data */ - boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ - boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ - boolean CCIR601_sampling; /* TRUE=first samples are cosited */ - int smoothing_factor; /* 1..100, or 0 for no input smoothing */ - J_DCT_METHOD dct_method; /* DCT algorithm selector */ - - /* The restart interval can be specified in absolute MCUs by setting - * restart_interval, or in MCU rows by setting restart_in_rows - * (in which case the correct restart_interval will be figured - * for each scan). - */ - unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ - int restart_in_rows; /* if > 0, MCU rows per restart interval */ - - /* Parameters controlling emission of special markers. */ - - boolean write_JFIF_header; /* should a JFIF marker be written? */ - UINT8 JFIF_major_version; /* What to write for the JFIF version number */ - UINT8 JFIF_minor_version; - /* These three values are not used by the JPEG code, merely copied */ - /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ - /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ - /* ratio is defined by X_density/Y_density even when density_unit=0. */ - UINT8 density_unit; /* JFIF code for pixel size units */ - UINT16 X_density; /* Horizontal pixel density */ - UINT16 Y_density; /* Vertical pixel density */ - boolean write_Adobe_marker; /* should an Adobe marker be written? */ - - /* State variable: index of next scanline to be written to - * jpeg_write_scanlines(). Application may use this to control its - * processing loop, e.g., "while (next_scanline < image_height)". - */ - - JDIMENSION next_scanline; /* 0 .. image_height-1 */ - - /* Remaining fields are known throughout compressor, but generally - * should not be touched by a surrounding application. - */ - - /* - * These fields are computed during compression startup - */ - boolean progressive_mode; /* TRUE if scan script uses progressive mode */ - int max_h_samp_factor; /* largest h_samp_factor */ - int max_v_samp_factor; /* largest v_samp_factor */ - - JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ - /* The coefficient controller receives data in units of MCU rows as defined - * for fully interleaved scans (whether the JPEG file is interleaved or not). - * There are v_samp_factor * DCTSIZE sample rows of each component in an - * "iMCU" (interleaved MCU) row. - */ - - /* - * These fields are valid during any one scan. - * They describe the components and MCUs actually appearing in the scan. - */ - int comps_in_scan; /* # of JPEG components in this scan */ - jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; - /* *cur_comp_info[i] describes component that appears i'th in SOS */ - - JDIMENSION MCUs_per_row; /* # of MCUs across the image */ - JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ - - int blocks_in_MCU; /* # of DCT blocks per MCU */ - int MCU_membership[C_MAX_BLOCKS_IN_MCU]; - /* MCU_membership[i] is index in cur_comp_info of component owning */ - /* i'th block in an MCU */ - - int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ - - /* - * Links to compression subobjects (methods and private variables of modules) - */ - struct jpeg_comp_master * master; - struct jpeg_c_main_controller * main; - struct jpeg_c_prep_controller * prep; - struct jpeg_c_coef_controller * coef; - struct jpeg_marker_writer * marker; - struct jpeg_color_converter * cconvert; - struct jpeg_downsampler * downsample; - struct jpeg_forward_dct * fdct; - struct jpeg_entropy_encoder * entropy; - jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ - int script_space_size; -}; - - -/* Master record for a decompression instance */ - -struct jpeg_decompress_struct { - jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ - - /* Source of compressed data */ - struct jpeg_source_mgr * src; - - /* Basic description of image --- filled in by jpeg_read_header(). */ - /* Application may inspect these values to decide how to process image. */ - - JDIMENSION image_width; /* nominal image width (from SOF marker) */ - JDIMENSION image_height; /* nominal image height */ - int num_components; /* # of color components in JPEG image */ - J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ - - /* Decompression processing parameters --- these fields must be set before - * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes - * them to default values. - */ - - J_COLOR_SPACE out_color_space; /* colorspace for output */ - - unsigned int scale_num, scale_denom; /* fraction by which to scale image */ - - double output_gamma; /* image gamma wanted in output */ - - boolean buffered_image; /* TRUE=multiple output passes */ - boolean raw_data_out; /* TRUE=downsampled data wanted */ - - J_DCT_METHOD dct_method; /* IDCT algorithm selector */ - boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ - boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ - - boolean quantize_colors; /* TRUE=colormapped output wanted */ - /* the following are ignored if not quantize_colors: */ - J_DITHER_MODE dither_mode; /* type of color dithering to use */ - boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ - int desired_number_of_colors; /* max # colors to use in created colormap */ - /* these are significant only in buffered-image mode: */ - boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ - boolean enable_external_quant;/* enable future use of external colormap */ - boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ - - /* Description of actual output image that will be returned to application. - * These fields are computed by jpeg_start_decompress(). - * You can also use jpeg_calc_output_dimensions() to determine these values - * in advance of calling jpeg_start_decompress(). - */ - - JDIMENSION output_width; /* scaled image width */ - JDIMENSION output_height; /* scaled image height */ - int out_color_components; /* # of color components in out_color_space */ - int output_components; /* # of color components returned */ - /* output_components is 1 (a colormap index) when quantizing colors; - * otherwise it equals out_color_components. - */ - int rec_outbuf_height; /* min recommended height of scanline buffer */ - /* If the buffer passed to jpeg_read_scanlines() is less than this many rows - * high, space and time will be wasted due to unnecessary data copying. - * Usually rec_outbuf_height will be 1 or 2, at most 4. - */ - - /* When quantizing colors, the output colormap is described by these fields. - * The application can supply a colormap by setting colormap non-NULL before - * calling jpeg_start_decompress; otherwise a colormap is created during - * jpeg_start_decompress or jpeg_start_output. - * The map has out_color_components rows and actual_number_of_colors columns. - */ - int actual_number_of_colors; /* number of entries in use */ - JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ - - /* State variables: these variables indicate the progress of decompression. - * The application may examine these but must not modify them. - */ - - /* Row index of next scanline to be read from jpeg_read_scanlines(). - * Application may use this to control its processing loop, e.g., - * "while (output_scanline < output_height)". - */ - JDIMENSION output_scanline; /* 0 .. output_height-1 */ - - /* Current input scan number and number of iMCU rows completed in scan. - * These indicate the progress of the decompressor input side. - */ - int input_scan_number; /* Number of SOS markers seen so far */ - JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ - - /* The "output scan number" is the notional scan being displayed by the - * output side. The decompressor will not allow output scan/row number - * to get ahead of input scan/row, but it can fall arbitrarily far behind. - */ - int output_scan_number; /* Nominal scan number being displayed */ - JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ - - /* Current progression status. coef_bits[c][i] indicates the precision - * with which component c's DCT coefficient i (in zigzag order) is known. - * It is -1 when no data has yet been received, otherwise it is the point - * transform (shift) value for the most recent scan of the coefficient - * (thus, 0 at completion of the progression). - * This pointer is NULL when reading a non-progressive file. - */ - int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ - - /* Internal JPEG parameters --- the application usually need not look at - * these fields. Note that the decompressor output side may not use - * any parameters that can change between scans. - */ - - /* Quantization and Huffman tables are carried forward across input - * datastreams when processing abbreviated JPEG datastreams. - */ - - JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; - /* ptrs to coefficient quantization tables, or NULL if not defined */ - - JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; - JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; - /* ptrs to Huffman coding tables, or NULL if not defined */ - - /* These parameters are never carried across datastreams, since they - * are given in SOF/SOS markers or defined to be reset by SOI. - */ - - int data_precision; /* bits of precision in image data */ - - jpeg_component_info * comp_info; - /* comp_info[i] describes component that appears i'th in SOF */ - - boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ - boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ - - UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ - UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ - UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ - - unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ - - /* These fields record data obtained from optional markers recognized by - * the JPEG library. - */ - boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ - /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ - UINT8 JFIF_major_version; /* JFIF version number */ - UINT8 JFIF_minor_version; - UINT8 density_unit; /* JFIF code for pixel size units */ - UINT16 X_density; /* Horizontal pixel density */ - UINT16 Y_density; /* Vertical pixel density */ - boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ - UINT8 Adobe_transform; /* Color transform code from Adobe marker */ - - boolean CCIR601_sampling; /* TRUE=first samples are cosited */ - - /* Aside from the specific data retained from APPn markers known to the - * library, the uninterpreted contents of any or all APPn and COM markers - * can be saved in a list for examination by the application. - */ - jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ - - /* Remaining fields are known throughout decompressor, but generally - * should not be touched by a surrounding application. - */ - - /* - * These fields are computed during decompression startup - */ - int max_h_samp_factor; /* largest h_samp_factor */ - int max_v_samp_factor; /* largest v_samp_factor */ - - int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ - - JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ - /* The coefficient controller's input and output progress is measured in - * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows - * in fully interleaved JPEG scans, but are used whether the scan is - * interleaved or not. We define an iMCU row as v_samp_factor DCT block - * rows of each component. Therefore, the IDCT output contains - * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row. - */ - - JSAMPLE * sample_range_limit; /* table for fast range-limiting */ - - /* - * These fields are valid during any one scan. - * They describe the components and MCUs actually appearing in the scan. - * Note that the decompressor output side must not use these fields. - */ - int comps_in_scan; /* # of JPEG components in this scan */ - jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; - /* *cur_comp_info[i] describes component that appears i'th in SOS */ - - JDIMENSION MCUs_per_row; /* # of MCUs across the image */ - JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ - - int blocks_in_MCU; /* # of DCT blocks per MCU */ - int MCU_membership[D_MAX_BLOCKS_IN_MCU]; - /* MCU_membership[i] is index in cur_comp_info of component owning */ - /* i'th block in an MCU */ - - int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ - - /* This field is shared between entropy decoder and marker parser. - * It is either zero or the code of a JPEG marker that has been - * read from the data source, but has not yet been processed. - */ - int unread_marker; - - /* - * Links to decompression subobjects (methods, private variables of modules) - */ - struct jpeg_decomp_master * master; - struct jpeg_d_main_controller * main; - struct jpeg_d_coef_controller * coef; - struct jpeg_d_post_controller * post; - struct jpeg_input_controller * inputctl; - struct jpeg_marker_reader * marker; - struct jpeg_entropy_decoder * entropy; - struct jpeg_inverse_dct * idct; - struct jpeg_upsampler * upsample; - struct jpeg_color_deconverter * cconvert; - struct jpeg_color_quantizer * cquantize; -}; - - -/* "Object" declarations for JPEG modules that may be supplied or called - * directly by the surrounding application. - * As with all objects in the JPEG library, these structs only define the - * publicly visible methods and state variables of a module. Additional - * private fields may exist after the public ones. - */ - - -/* Error handler object */ - -struct jpeg_error_mgr { - /* Error exit handler: does not return to caller */ - JMETHOD(void, error_exit, (j_common_ptr cinfo)); - /* Conditionally emit a trace or warning message */ - JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); - /* Routine that actually outputs a trace or error message */ - JMETHOD(void, output_message, (j_common_ptr cinfo)); - /* Format a message string for the most recent JPEG error or message */ - JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); -#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ - /* Reset error state variables at start of a new image */ - JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); - - /* The message ID code and any parameters are saved here. - * A message can have one string parameter or up to 8 int parameters. - */ - int msg_code; -#define JMSG_STR_PARM_MAX 80 - union { - int i[8]; - char s[JMSG_STR_PARM_MAX]; - } msg_parm; - - /* Standard state variables for error facility */ - - int trace_level; /* max msg_level that will be displayed */ - - /* For recoverable corrupt-data errors, we emit a warning message, - * but keep going unless emit_message chooses to abort. emit_message - * should count warnings in num_warnings. The surrounding application - * can check for bad data by seeing if num_warnings is nonzero at the - * end of processing. - */ - long num_warnings; /* number of corrupt-data warnings */ - - /* These fields point to the table(s) of error message strings. - * An application can change the table pointer to switch to a different - * message list (typically, to change the language in which errors are - * reported). Some applications may wish to add additional error codes - * that will be handled by the JPEG library error mechanism; the second - * table pointer is used for this purpose. - * - * First table includes all errors generated by JPEG library itself. - * Error code 0 is reserved for a "no such error string" message. - */ - const char * const * jpeg_message_table; /* Library errors */ - int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ - /* Second table can be added by application (see cjpeg/djpeg for example). - * It contains strings numbered first_addon_message..last_addon_message. - */ - const char * const * addon_message_table; /* Non-library errors */ - int first_addon_message; /* code for first string in addon table */ - int last_addon_message; /* code for last string in addon table */ -}; - - -/* Progress monitor object */ - -struct jpeg_progress_mgr { - JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); - - long pass_counter; /* work units completed in this pass */ - long pass_limit; /* total number of work units in this pass */ - int completed_passes; /* passes completed so far */ - int total_passes; /* total number of passes expected */ -}; - - -/* Data destination object for compression */ - -struct jpeg_destination_mgr { - JOCTET * next_output_byte; /* => next byte to write in buffer */ - size_t free_in_buffer; /* # of byte spaces remaining in buffer */ - - JMETHOD(void, init_destination, (j_compress_ptr cinfo)); - JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); - JMETHOD(void, term_destination, (j_compress_ptr cinfo)); -}; - - -/* Data source object for decompression */ - -struct jpeg_source_mgr { - const JOCTET * next_input_byte; /* => next byte to read from buffer */ - size_t bytes_in_buffer; /* # of bytes remaining in buffer */ - - JMETHOD(void, init_source, (j_decompress_ptr cinfo)); - JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); - JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); - JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); - JMETHOD(void, term_source, (j_decompress_ptr cinfo)); -}; - - -/* Memory manager object. - * Allocates "small" objects (a few K total), "large" objects (tens of K), - * and "really big" objects (virtual arrays with backing store if needed). - * The memory manager does not allow individual objects to be freed; rather, - * each created object is assigned to a pool, and whole pools can be freed - * at once. This is faster and more convenient than remembering exactly what - * to free, especially where malloc()/free() are not too speedy. - * NB: alloc routines never return NULL. They exit to error_exit if not - * successful. - */ - -#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ -#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ -#define JPOOL_NUMPOOLS 2 - -typedef struct jvirt_sarray_control * jvirt_sarray_ptr; -typedef struct jvirt_barray_control * jvirt_barray_ptr; - - -struct jpeg_memory_mgr { - /* Method pointers */ - JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, - size_t sizeofobject)); - JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, - size_t sizeofobject)); - JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, - JDIMENSION samplesperrow, - JDIMENSION numrows)); - JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, - JDIMENSION blocksperrow, - JDIMENSION numrows)); - JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, - int pool_id, - boolean pre_zero, - JDIMENSION samplesperrow, - JDIMENSION numrows, - JDIMENSION maxaccess)); - JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, - int pool_id, - boolean pre_zero, - JDIMENSION blocksperrow, - JDIMENSION numrows, - JDIMENSION maxaccess)); - JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); - JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, - jvirt_sarray_ptr ptr, - JDIMENSION start_row, - JDIMENSION num_rows, - boolean writable)); - JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, - jvirt_barray_ptr ptr, - JDIMENSION start_row, - JDIMENSION num_rows, - boolean writable)); - JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); - JMETHOD(void, self_destruct, (j_common_ptr cinfo)); - - /* Limit on memory allocation for this JPEG object. (Note that this is - * merely advisory, not a guaranteed maximum; it only affects the space - * used for virtual-array buffers.) May be changed by outer application - * after creating the JPEG object. - */ - long max_memory_to_use; - - /* Maximum allocation request accepted by alloc_large. */ - long max_alloc_chunk; -}; - - -/* Routine signature for application-supplied marker processing methods. - * Need not pass marker code since it is stored in cinfo->unread_marker. - */ -typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); - - -/* Declarations for routines called by application. - * The JPP macro hides prototype parameters from compilers that can't cope. - * Note JPP requires double parentheses. - */ - -#ifdef HAVE_PROTOTYPES -#define JPP(arglist) arglist -#else -#define JPP(arglist) () -#endif - - -/* Short forms of external names for systems with brain-damaged linkers. - * We shorten external names to be unique in the first six letters, which - * is good enough for all known systems. - * (If your compiler itself needs names to be unique in less than 15 - * characters, you are out of luck. Get a better compiler.) - */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jpeg_std_error jStdError -#define jpeg_CreateCompress jCreaCompress -#define jpeg_CreateDecompress jCreaDecompress -#define jpeg_destroy_compress jDestCompress -#define jpeg_destroy_decompress jDestDecompress -#define jpeg_stdio_dest jStdDest -#define jpeg_stdio_src jStdSrc -#define jpeg_set_defaults jSetDefaults -#define jpeg_set_colorspace jSetColorspace -#define jpeg_default_colorspace jDefColorspace -#define jpeg_set_quality jSetQuality -#define jpeg_set_linear_quality jSetLQuality -#define jpeg_add_quant_table jAddQuantTable -#define jpeg_quality_scaling jQualityScaling -#define jpeg_simple_progression jSimProgress -#define jpeg_suppress_tables jSuppressTables -#define jpeg_alloc_quant_table jAlcQTable -#define jpeg_alloc_huff_table jAlcHTable -#define jpeg_start_compress jStrtCompress -#define jpeg_write_scanlines jWrtScanlines -#define jpeg_finish_compress jFinCompress -#define jpeg_write_raw_data jWrtRawData -#define jpeg_write_marker jWrtMarker -#define jpeg_write_m_header jWrtMHeader -#define jpeg_write_m_byte jWrtMByte -#define jpeg_write_tables jWrtTables -#define jpeg_read_header jReadHeader -#define jpeg_start_decompress jStrtDecompress -#define jpeg_read_scanlines jReadScanlines -#define jpeg_finish_decompress jFinDecompress -#define jpeg_read_raw_data jReadRawData -#define jpeg_has_multiple_scans jHasMultScn -#define jpeg_start_output jStrtOutput -#define jpeg_finish_output jFinOutput -#define jpeg_input_complete jInComplete -#define jpeg_new_colormap jNewCMap -#define jpeg_consume_input jConsumeInput -#define jpeg_calc_output_dimensions jCalcDimensions -#define jpeg_save_markers jSaveMarkers -#define jpeg_set_marker_processor jSetMarker -#define jpeg_read_coefficients jReadCoefs -#define jpeg_write_coefficients jWrtCoefs -#define jpeg_copy_critical_parameters jCopyCrit -#define jpeg_abort_compress jAbrtCompress -#define jpeg_abort_decompress jAbrtDecompress -#define jpeg_abort jAbort -#define jpeg_destroy jDestroy -#define jpeg_resync_to_restart jResyncRestart -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - - -/* Default error-management setup */ -EXTERN(struct jpeg_error_mgr *) jpeg_std_error - JPP((struct jpeg_error_mgr * err)); - -/* Initialization of JPEG compression objects. - * jpeg_create_compress() and jpeg_create_decompress() are the exported - * names that applications should call. These expand to calls on - * jpeg_CreateCompress and jpeg_CreateDecompress with additional information - * passed for version mismatch checking. - * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. - */ -#define jpeg_create_compress(cinfo) \ - jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ - (size_t) sizeof(struct jpeg_compress_struct)) -#define jpeg_create_decompress(cinfo) \ - jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ - (size_t) sizeof(struct jpeg_decompress_struct)) -EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, - int version, size_t structsize)); -EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, - int version, size_t structsize)); -/* Destruction of JPEG compression objects */ -EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); - -/* Standard data source and destination managers: stdio streams. */ -/* Caller is responsible for opening the file before and closing after. */ -EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); -EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); - -/* Default parameter setup for compression */ -EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); -/* Compression parameter setup aids */ -EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, - J_COLOR_SPACE colorspace)); -EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, - boolean force_baseline)); -EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, - int scale_factor, - boolean force_baseline)); -EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, - const unsigned int *basic_table, - int scale_factor, - boolean force_baseline)); -EXTERN(int) jpeg_quality_scaling JPP((int quality)); -EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, - boolean suppress)); -EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); -EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); - -/* Main entry points for compression */ -EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, - boolean write_all_tables)); -EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, - JSAMPARRAY scanlines, - JDIMENSION num_lines)); -EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); - -/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ -EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, - JSAMPIMAGE data, - JDIMENSION num_lines)); - -/* Write a special marker. See libjpeg.doc concerning safe usage. */ -EXTERN(void) jpeg_write_marker - JPP((j_compress_ptr cinfo, int marker, - const JOCTET * dataptr, unsigned int datalen)); -/* Same, but piecemeal. */ -EXTERN(void) jpeg_write_m_header - JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); -EXTERN(void) jpeg_write_m_byte - JPP((j_compress_ptr cinfo, int val)); - -/* Alternate compression function: just write an abbreviated table file */ -EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); - -/* Decompression startup: read start of JPEG datastream to see what's there */ -EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, - boolean require_image)); -/* Return value is one of: */ -#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ -#define JPEG_HEADER_OK 1 /* Found valid image datastream */ -#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ -/* If you pass require_image = TRUE (normal case), you need not check for - * a TABLES_ONLY return code; an abbreviated file will cause an error exit. - * JPEG_SUSPENDED is only possible if you use a data source module that can - * give a suspension return (the stdio source module doesn't). - */ - -/* Main entry points for decompression */ -EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); -EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, - JSAMPARRAY scanlines, - JDIMENSION max_lines)); -EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); - -/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ -EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, - JSAMPIMAGE data, - JDIMENSION max_lines)); - -/* Additional entry points for buffered-image mode. */ -EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); -EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, - int scan_number)); -EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); -EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); -EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); -EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); -/* Return value is one of: */ -/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ -#define JPEG_REACHED_SOS 1 /* Reached start of new scan */ -#define JPEG_REACHED_EOI 2 /* Reached end of image */ -#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ -#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ - -/* Precalculate output dimensions for current decompression parameters. */ -EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); - -/* Control saving of COM and APPn markers into marker_list. */ -EXTERN(void) jpeg_save_markers - JPP((j_decompress_ptr cinfo, int marker_code, - unsigned int length_limit)); - -/* Install a special processing method for COM or APPn markers. */ -EXTERN(void) jpeg_set_marker_processor - JPP((j_decompress_ptr cinfo, int marker_code, - jpeg_marker_parser_method routine)); - -/* Read or write raw DCT coefficients --- useful for lossless transcoding. */ -EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); -EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, - jvirt_barray_ptr * coef_arrays)); -EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, - j_compress_ptr dstinfo)); - -/* If you choose to abort compression or decompression before completing - * jpeg_finish_(de)compress, then you need to clean up to release memory, - * temporary files, etc. You can just call jpeg_destroy_(de)compress - * if you're done with the JPEG object, but if you want to clean it up and - * reuse it, call this: - */ -EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); -EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); - -/* Generic versions of jpeg_abort and jpeg_destroy that work on either - * flavor of JPEG object. These may be more convenient in some places. - */ -EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); -EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); - -/* Default restart-marker-resync procedure for use by data source modules */ -EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, - int desired)); - - -/* These marker codes are exported since applications and data source modules - * are likely to want to use them. - */ - -#define JPEG_RST0 0xD0 /* RST0 marker code */ -#define JPEG_EOI 0xD9 /* EOI marker code */ -#define JPEG_APP0 0xE0 /* APP0 marker code */ -#define JPEG_COM 0xFE /* COM marker code */ - - -/* If we have a brain-damaged compiler that emits warnings (or worse, errors) - * for structure definitions that are never filled in, keep it quiet by - * supplying dummy definitions for the various substructures. - */ - -#ifdef INCOMPLETE_TYPES_BROKEN -#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ -struct jvirt_sarray_control { long dummy; }; -struct jvirt_barray_control { long dummy; }; -struct jpeg_comp_master { long dummy; }; -struct jpeg_c_main_controller { long dummy; }; -struct jpeg_c_prep_controller { long dummy; }; -struct jpeg_c_coef_controller { long dummy; }; -struct jpeg_marker_writer { long dummy; }; -struct jpeg_color_converter { long dummy; }; -struct jpeg_downsampler { long dummy; }; -struct jpeg_forward_dct { long dummy; }; -struct jpeg_entropy_encoder { long dummy; }; -struct jpeg_decomp_master { long dummy; }; -struct jpeg_d_main_controller { long dummy; }; -struct jpeg_d_coef_controller { long dummy; }; -struct jpeg_d_post_controller { long dummy; }; -struct jpeg_input_controller { long dummy; }; -struct jpeg_marker_reader { long dummy; }; -struct jpeg_entropy_decoder { long dummy; }; -struct jpeg_inverse_dct { long dummy; }; -struct jpeg_upsampler { long dummy; }; -struct jpeg_color_deconverter { long dummy; }; -struct jpeg_color_quantizer { long dummy; }; -#endif /* JPEG_INTERNALS */ -#endif /* INCOMPLETE_TYPES_BROKEN */ - - -/* - * The JPEG library modules define JPEG_INTERNALS before including this file. - * The internal structure declarations are read only when that is true. - * Applications using the library should not include jpegint.h, but may wish - * to include jerror.h. - */ - -#ifdef JPEG_INTERNALS -#include "jpegint.h" /* fetch private declarations */ -#include "jerror.h" /* fetch error codes too */ -#endif - -#endif /* JPEGLIB_H */ diff --git a/Build/source/libs/jpeg/jpegtran.1 b/Build/source/libs/jpeg/jpegtran.1 deleted file mode 100644 index 6de18e2af96..00000000000 --- a/Build/source/libs/jpeg/jpegtran.1 +++ /dev/null @@ -1,238 +0,0 @@ -.TH JPEGTRAN 1 "3 August 1997" -.SH NAME -jpegtran \- lossless transformation of JPEG files -.SH SYNOPSIS -.B jpegtran -[ -.I options -] -[ -.I filename -] -.LP -.SH DESCRIPTION -.LP -.B jpegtran -performs various useful transformations of JPEG files. -It can translate the coded representation from one variant of JPEG to another, -for example from baseline JPEG to progressive JPEG or vice versa. It can also -perform some rearrangements of the image data, for example turning an image -from landscape to portrait format by rotation. -.PP -.B jpegtran -works by rearranging the compressed data (DCT coefficients), without -ever fully decoding the image. Therefore, its transformations are lossless: -there is no image degradation at all, which would not be true if you used -.B djpeg -followed by -.B cjpeg -to accomplish the same conversion. But by the same token, -.B jpegtran -cannot perform lossy operations such as changing the image quality. -.PP -.B jpegtran -reads the named JPEG/JFIF file, or the standard input if no file is -named, and produces a JPEG/JFIF file on the standard output. -.SH OPTIONS -All switch names may be abbreviated; for example, -.B \-optimize -may be written -.B \-opt -or -.BR \-o . -Upper and lower case are equivalent. -British spellings are also accepted (e.g., -.BR \-optimise ), -though for brevity these are not mentioned below. -.PP -To specify the coded JPEG representation used in the output file, -.B jpegtran -accepts a subset of the switches recognized by -.BR cjpeg : -.TP -.B \-optimize -Perform optimization of entropy encoding parameters. -.TP -.B \-progressive -Create progressive JPEG file. -.TP -.BI \-restart " N" -Emit a JPEG restart marker every N MCU rows, or every N MCU blocks if "B" is -attached to the number. -.TP -.BI \-scans " file" -Use the scan script given in the specified text file. -.PP -See -.BR cjpeg (1) -for more details about these switches. -If you specify none of these switches, you get a plain baseline-JPEG output -file. The quality setting and so forth are determined by the input file. -.PP -The image can be losslessly transformed by giving one of these switches: -.TP -.B \-flip horizontal -Mirror image horizontally (left-right). -.TP -.B \-flip vertical -Mirror image vertically (top-bottom). -.TP -.B \-rotate 90 -Rotate image 90 degrees clockwise. -.TP -.B \-rotate 180 -Rotate image 180 degrees. -.TP -.B \-rotate 270 -Rotate image 270 degrees clockwise (or 90 ccw). -.TP -.B \-transpose -Transpose image (across UL-to-LR axis). -.TP -.B \-transverse -Transverse transpose (across UR-to-LL axis). -.PP -The transpose transformation has no restrictions regarding image dimensions. -The other transformations operate rather oddly if the image dimensions are not -a multiple of the iMCU size (usually 8 or 16 pixels), because they can only -transform complete blocks of DCT coefficient data in the desired way. -.PP -.BR jpegtran 's -default behavior when transforming an odd-size image is designed -to preserve exact reversibility and mathematical consistency of the -transformation set. As stated, transpose is able to flip the entire image -area. Horizontal mirroring leaves any partial iMCU column at the right edge -untouched, but is able to flip all rows of the image. Similarly, vertical -mirroring leaves any partial iMCU row at the bottom edge untouched, but is -able to flip all columns. The other transforms can be built up as sequences -of transpose and flip operations; for consistency, their actions on edge -pixels are defined to be the same as the end result of the corresponding -transpose-and-flip sequence. -.PP -For practical use, you may prefer to discard any untransformable edge pixels -rather than having a strange-looking strip along the right and/or bottom edges -of a transformed image. To do this, add the -.B \-trim -switch: -.TP -.B \-trim -Drop non-transformable edge blocks. -.PP -Obviously, a transformation with -.B \-trim -is not reversible, so strictly speaking -.B jpegtran -with this switch is not lossless. Also, the expected mathematical -equivalences between the transformations no longer hold. For example, -.B \-rot 270 -trim -trims only the bottom edge, but -.B \-rot 90 -trim -followed by -.B \-rot 180 -trim -trims both edges. -.PP -Another not-strictly-lossless transformation switch is: -.TP -.B \-grayscale -Force grayscale output. -.PP -This option discards the chrominance channels if the input image is YCbCr -(ie, a standard color JPEG), resulting in a grayscale JPEG file. The -luminance channel is preserved exactly, so this is a better method of reducing -to grayscale than decompression, conversion, and recompression. This switch -is particularly handy for fixing a monochrome picture that was mistakenly -encoded as a color JPEG. (In such a case, the space savings from getting rid -of the near-empty chroma channels won't be large; but the decoding time for -a grayscale JPEG is substantially less than that for a color JPEG.) -.PP -.B jpegtran -also recognizes these switches that control what to do with "extra" markers, -such as comment blocks: -.TP -.B \-copy none -Copy no extra markers from source file. This setting suppresses all -comments and other excess baggage present in the source file. -.TP -.B \-copy comments -Copy only comment markers. This setting copies comments from the source file, -but discards any other inessential data. -.TP -.B \-copy all -Copy all extra markers. This setting preserves miscellaneous markers -found in the source file, such as JFIF thumbnails and Photoshop settings. -In some files these extra markers can be sizable. -.PP -The default behavior is -.BR "\-copy comments" . -(Note: in IJG releases v6 and v6a, -.B jpegtran -always did the equivalent of -.BR "\-copy none" .) -.PP -Additional switches recognized by jpegtran are: -.TP -.BI \-maxmemory " N" -Set limit for amount of memory to use in processing large images. Value is -in thousands of bytes, or millions of bytes if "M" is attached to the -number. For example, -.B \-max 4m -selects 4000000 bytes. If more space is needed, temporary files will be used. -.TP -.BI \-outfile " name" -Send output image to the named file, not to standard output. -.TP -.B \-verbose -Enable debug printout. More -.BR \-v 's -give more output. Also, version information is printed at startup. -.TP -.B \-debug -Same as -.BR \-verbose . -.SH EXAMPLES -.LP -This example converts a baseline JPEG file to progressive form: -.IP -.B jpegtran \-progressive -.I foo.jpg -.B > -.I fooprog.jpg -.PP -This example rotates an image 90 degrees clockwise, discarding any -unrotatable edge pixels: -.IP -.B jpegtran \-rot 90 -trim -.I foo.jpg -.B > -.I foo90.jpg -.SH ENVIRONMENT -.TP -.B JPEGMEM -If this environment variable is set, its value is the default memory limit. -The value is specified as described for the -.B \-maxmemory -switch. -.B JPEGMEM -overrides the default value specified when the program was compiled, and -itself is overridden by an explicit -.BR \-maxmemory . -.SH SEE ALSO -.BR cjpeg (1), -.BR djpeg (1), -.BR rdjpgcom (1), -.BR wrjpgcom (1) -.br -Wallace, Gregory K. "The JPEG Still Picture Compression Standard", -Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44. -.SH AUTHOR -Independent JPEG Group -.SH BUGS -Arithmetic coding is not supported for legal reasons. -.PP -The transform options can't transform odd-size images perfectly. Use -.B \-trim -if you don't like the results without it. -.PP -The entire image is read into memory and then written out again, even in -cases where this isn't really necessary. Expect swapping on large images, -especially when using the more complex transform options. diff --git a/Build/source/libs/jpeg/jpegtran.c b/Build/source/libs/jpeg/jpegtran.c deleted file mode 100644 index 20ef111b3f5..00000000000 --- a/Build/source/libs/jpeg/jpegtran.c +++ /dev/null @@ -1,504 +0,0 @@ -/* - * jpegtran.c - * - * Copyright (C) 1995-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a command-line user interface for JPEG transcoding. - * It is very similar to cjpeg.c, but provides lossless transcoding between - * different JPEG file formats. It also provides some lossless and sort-of- - * lossless transformations of JPEG data. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ -#include "transupp.h" /* Support routines for jpegtran */ -#include "jversion.h" /* for version message */ - -#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ -#ifdef __MWERKS__ -#include /* Metrowerks needs this */ -#include /* ... and this */ -#endif -#ifdef THINK_C -#include /* Think declares it here */ -#endif -#endif - - -/* - * Argument-parsing code. - * The switch parser is designed to be useful with DOS-style command line - * syntax, ie, intermixed switches and file names, where only the switches - * to the left of a given file name affect processing of that file. - * The main program in this file doesn't actually use this capability... - */ - - -static const char * progname; /* program name for error messages */ -static char * outfilename; /* for -outfile switch */ -static JCOPY_OPTION copyoption; /* -copy switch */ -static jpeg_transform_info transformoption; /* image transformation options */ - - -LOCAL(void) -usage (void) -/* complain about bad command line */ -{ - fprintf(stderr, "usage: %s [switches] ", progname); -#ifdef TWO_FILE_COMMANDLINE - fprintf(stderr, "inputfile outputfile\n"); -#else - fprintf(stderr, "[inputfile]\n"); -#endif - - fprintf(stderr, "Switches (names may be abbreviated):\n"); - fprintf(stderr, " -copy none Copy no extra markers from source file\n"); - fprintf(stderr, " -copy comments Copy only comment markers (default)\n"); - fprintf(stderr, " -copy all Copy all extra markers\n"); -#ifdef ENTROPY_OPT_SUPPORTED - fprintf(stderr, " -optimize Optimize Huffman table (smaller file, but slow compression)\n"); -#endif -#ifdef C_PROGRESSIVE_SUPPORTED - fprintf(stderr, " -progressive Create progressive JPEG file\n"); -#endif -#if TRANSFORMS_SUPPORTED - fprintf(stderr, "Switches for modifying the image:\n"); - fprintf(stderr, " -grayscale Reduce to grayscale (omit color data)\n"); - fprintf(stderr, " -flip [horizontal|vertical] Mirror image (left-right or top-bottom)\n"); - fprintf(stderr, " -rotate [90|180|270] Rotate image (degrees clockwise)\n"); - fprintf(stderr, " -transpose Transpose image\n"); - fprintf(stderr, " -transverse Transverse transpose image\n"); - fprintf(stderr, " -trim Drop non-transformable edge blocks\n"); -#endif /* TRANSFORMS_SUPPORTED */ - fprintf(stderr, "Switches for advanced users:\n"); - fprintf(stderr, " -restart N Set restart interval in rows, or in blocks with B\n"); - fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n"); - fprintf(stderr, " -outfile name Specify name for output file\n"); - fprintf(stderr, " -verbose or -debug Emit debug output\n"); - fprintf(stderr, "Switches for wizards:\n"); -#ifdef C_ARITH_CODING_SUPPORTED - fprintf(stderr, " -arithmetic Use arithmetic coding\n"); -#endif -#ifdef C_MULTISCAN_FILES_SUPPORTED - fprintf(stderr, " -scans file Create multi-scan JPEG per script file\n"); -#endif - exit(EXIT_FAILURE); -} - - -LOCAL(void) -select_transform (JXFORM_CODE transform) -/* Silly little routine to detect multiple transform options, - * which we can't handle. - */ -{ -#if TRANSFORMS_SUPPORTED - if (transformoption.transform == JXFORM_NONE || - transformoption.transform == transform) { - transformoption.transform = transform; - } else { - fprintf(stderr, "%s: can only do one image transformation at a time\n", - progname); - usage(); - } -#else - fprintf(stderr, "%s: sorry, image transformation was not compiled\n", - progname); - exit(EXIT_FAILURE); -#endif -} - - -LOCAL(int) -parse_switches (j_compress_ptr cinfo, int argc, char **argv, - int last_file_arg_seen, boolean for_real) -/* Parse optional switches. - * Returns argv[] index of first file-name argument (== argc if none). - * Any file names with indexes <= last_file_arg_seen are ignored; - * they have presumably been processed in a previous iteration. - * (Pass 0 for last_file_arg_seen on the first or only iteration.) - * for_real is FALSE on the first (dummy) pass; we may skip any expensive - * processing. - */ -{ - int argn; - char * arg; - boolean simple_progressive; - char * scansarg = NULL; /* saves -scans parm if any */ - - /* Set up default JPEG parameters. */ - simple_progressive = FALSE; - outfilename = NULL; - copyoption = JCOPYOPT_DEFAULT; - transformoption.transform = JXFORM_NONE; - transformoption.trim = FALSE; - transformoption.force_grayscale = FALSE; - cinfo->err->trace_level = 0; - - /* Scan command line options, adjust parameters */ - - for (argn = 1; argn < argc; argn++) { - arg = argv[argn]; - if (*arg != '-') { - /* Not a switch, must be a file name argument */ - if (argn <= last_file_arg_seen) { - outfilename = NULL; /* -outfile applies to just one input file */ - continue; /* ignore this name if previously processed */ - } - break; /* else done parsing switches */ - } - arg++; /* advance past switch marker character */ - - if (keymatch(arg, "arithmetic", 1)) { - /* Use arithmetic coding. */ -#ifdef C_ARITH_CODING_SUPPORTED - cinfo->arith_code = TRUE; -#else - fprintf(stderr, "%s: sorry, arithmetic coding not supported\n", - progname); - exit(EXIT_FAILURE); -#endif - - } else if (keymatch(arg, "copy", 1)) { - /* Select which extra markers to copy. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (keymatch(argv[argn], "none", 1)) { - copyoption = JCOPYOPT_NONE; - } else if (keymatch(argv[argn], "comments", 1)) { - copyoption = JCOPYOPT_COMMENTS; - } else if (keymatch(argv[argn], "all", 1)) { - copyoption = JCOPYOPT_ALL; - } else - usage(); - - } else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) { - /* Enable debug printouts. */ - /* On first -d, print version identification */ - static boolean printed_version = FALSE; - - if (! printed_version) { - fprintf(stderr, "Independent JPEG Group's JPEGTRAN, version %s\n%s\n", - JVERSION, JCOPYRIGHT); - printed_version = TRUE; - } - cinfo->err->trace_level++; - - } else if (keymatch(arg, "flip", 1)) { - /* Mirror left-right or top-bottom. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (keymatch(argv[argn], "horizontal", 1)) - select_transform(JXFORM_FLIP_H); - else if (keymatch(argv[argn], "vertical", 1)) - select_transform(JXFORM_FLIP_V); - else - usage(); - - } else if (keymatch(arg, "grayscale", 1) || keymatch(arg, "greyscale",1)) { - /* Force to grayscale. */ -#if TRANSFORMS_SUPPORTED - transformoption.force_grayscale = TRUE; -#else - select_transform(JXFORM_NONE); /* force an error */ -#endif - - } else if (keymatch(arg, "maxmemory", 3)) { - /* Maximum memory in Kb (or Mb with 'm'). */ - long lval; - char ch = 'x'; - - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) - usage(); - if (ch == 'm' || ch == 'M') - lval *= 1000L; - cinfo->mem->max_memory_to_use = lval * 1000L; - - } else if (keymatch(arg, "optimize", 1) || keymatch(arg, "optimise", 1)) { - /* Enable entropy parm optimization. */ -#ifdef ENTROPY_OPT_SUPPORTED - cinfo->optimize_coding = TRUE; -#else - fprintf(stderr, "%s: sorry, entropy optimization was not compiled\n", - progname); - exit(EXIT_FAILURE); -#endif - - } else if (keymatch(arg, "outfile", 4)) { - /* Set output file name. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - outfilename = argv[argn]; /* save it away for later use */ - - } else if (keymatch(arg, "progressive", 1)) { - /* Select simple progressive mode. */ -#ifdef C_PROGRESSIVE_SUPPORTED - simple_progressive = TRUE; - /* We must postpone execution until num_components is known. */ -#else - fprintf(stderr, "%s: sorry, progressive output was not compiled\n", - progname); - exit(EXIT_FAILURE); -#endif - - } else if (keymatch(arg, "restart", 1)) { - /* Restart interval in MCU rows (or in MCUs with 'b'). */ - long lval; - char ch = 'x'; - - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) - usage(); - if (lval < 0 || lval > 65535L) - usage(); - if (ch == 'b' || ch == 'B') { - cinfo->restart_interval = (unsigned int) lval; - cinfo->restart_in_rows = 0; /* else prior '-restart n' overrides me */ - } else { - cinfo->restart_in_rows = (int) lval; - /* restart_interval will be computed during startup */ - } - - } else if (keymatch(arg, "rotate", 2)) { - /* Rotate 90, 180, or 270 degrees (measured clockwise). */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (keymatch(argv[argn], "90", 2)) - select_transform(JXFORM_ROT_90); - else if (keymatch(argv[argn], "180", 3)) - select_transform(JXFORM_ROT_180); - else if (keymatch(argv[argn], "270", 3)) - select_transform(JXFORM_ROT_270); - else - usage(); - - } else if (keymatch(arg, "scans", 1)) { - /* Set scan script. */ -#ifdef C_MULTISCAN_FILES_SUPPORTED - if (++argn >= argc) /* advance to next argument */ - usage(); - scansarg = argv[argn]; - /* We must postpone reading the file in case -progressive appears. */ -#else - fprintf(stderr, "%s: sorry, multi-scan output was not compiled\n", - progname); - exit(EXIT_FAILURE); -#endif - - } else if (keymatch(arg, "transpose", 1)) { - /* Transpose (across UL-to-LR axis). */ - select_transform(JXFORM_TRANSPOSE); - - } else if (keymatch(arg, "transverse", 6)) { - /* Transverse transpose (across UR-to-LL axis). */ - select_transform(JXFORM_TRANSVERSE); - - } else if (keymatch(arg, "trim", 3)) { - /* Trim off any partial edge MCUs that the transform can't handle. */ - transformoption.trim = TRUE; - - } else { - usage(); /* bogus switch */ - } - } - - /* Post-switch-scanning cleanup */ - - if (for_real) { - -#ifdef C_PROGRESSIVE_SUPPORTED - if (simple_progressive) /* process -progressive; -scans can override */ - jpeg_simple_progression(cinfo); -#endif - -#ifdef C_MULTISCAN_FILES_SUPPORTED - if (scansarg != NULL) /* process -scans if it was present */ - if (! read_scan_script(cinfo, scansarg)) - usage(); -#endif - } - - return argn; /* return index of next arg (file name) */ -} - - -/* - * The main program. - */ - -int -main (int argc, char **argv) -{ - struct jpeg_decompress_struct srcinfo; - struct jpeg_compress_struct dstinfo; - struct jpeg_error_mgr jsrcerr, jdsterr; -#ifdef PROGRESS_REPORT - struct cdjpeg_progress_mgr progress; -#endif - jvirt_barray_ptr * src_coef_arrays; - jvirt_barray_ptr * dst_coef_arrays; - int file_index; - FILE * input_file; - FILE * output_file; - - /* On Mac, fetch a command line. */ -#ifdef USE_CCOMMAND - argc = ccommand(&argv); -#endif - - progname = argv[0]; - if (progname == NULL || progname[0] == 0) - progname = "jpegtran"; /* in case C library doesn't provide it */ - - /* Initialize the JPEG decompression object with default error handling. */ - srcinfo.err = jpeg_std_error(&jsrcerr); - jpeg_create_decompress(&srcinfo); - /* Initialize the JPEG compression object with default error handling. */ - dstinfo.err = jpeg_std_error(&jdsterr); - jpeg_create_compress(&dstinfo); - - /* Now safe to enable signal catcher. - * Note: we assume only the decompression object will have virtual arrays. - */ -#ifdef NEED_SIGNAL_CATCHER - enable_signal_catcher((j_common_ptr) &srcinfo); -#endif - - /* Scan command line to find file names. - * It is convenient to use just one switch-parsing routine, but the switch - * values read here are mostly ignored; we will rescan the switches after - * opening the input file. Also note that most of the switches affect the - * destination JPEG object, so we parse into that and then copy over what - * needs to affects the source too. - */ - - file_index = parse_switches(&dstinfo, argc, argv, 0, FALSE); - jsrcerr.trace_level = jdsterr.trace_level; - srcinfo.mem->max_memory_to_use = dstinfo.mem->max_memory_to_use; - -#ifdef TWO_FILE_COMMANDLINE - /* Must have either -outfile switch or explicit output file name */ - if (outfilename == NULL) { - if (file_index != argc-2) { - fprintf(stderr, "%s: must name one input and one output file\n", - progname); - usage(); - } - outfilename = argv[file_index+1]; - } else { - if (file_index != argc-1) { - fprintf(stderr, "%s: must name one input and one output file\n", - progname); - usage(); - } - } -#else - /* Unix style: expect zero or one file name */ - if (file_index < argc-1) { - fprintf(stderr, "%s: only one input file\n", progname); - usage(); - } -#endif /* TWO_FILE_COMMANDLINE */ - - /* Open the input file. */ - if (file_index < argc) { - if ((input_file = fopen(argv[file_index], READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[file_index]); - exit(EXIT_FAILURE); - } - } else { - /* default input file is stdin */ - input_file = read_stdin(); - } - - /* Open the output file. */ - if (outfilename != NULL) { - if ((output_file = fopen(outfilename, WRITE_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, outfilename); - exit(EXIT_FAILURE); - } - } else { - /* default output file is stdout */ - output_file = write_stdout(); - } - -#ifdef PROGRESS_REPORT - start_progress_monitor((j_common_ptr) &dstinfo, &progress); -#endif - - /* Specify data source for decompression */ - jpeg_stdio_src(&srcinfo, input_file); - - /* Enable saving of extra markers that we want to copy */ - jcopy_markers_setup(&srcinfo, copyoption); - - /* Read file header */ - (void) jpeg_read_header(&srcinfo, TRUE); - - /* Any space needed by a transform option must be requested before - * jpeg_read_coefficients so that memory allocation will be done right. - */ -#if TRANSFORMS_SUPPORTED - jtransform_request_workspace(&srcinfo, &transformoption); -#endif - - /* Read source file as DCT coefficients */ - src_coef_arrays = jpeg_read_coefficients(&srcinfo); - - /* Initialize destination compression parameters from source values */ - jpeg_copy_critical_parameters(&srcinfo, &dstinfo); - - /* Adjust destination parameters if required by transform options; - * also find out which set of coefficient arrays will hold the output. - */ -#if TRANSFORMS_SUPPORTED - dst_coef_arrays = jtransform_adjust_parameters(&srcinfo, &dstinfo, - src_coef_arrays, - &transformoption); -#else - dst_coef_arrays = src_coef_arrays; -#endif - - /* Adjust default compression parameters by re-parsing the options */ - file_index = parse_switches(&dstinfo, argc, argv, 0, TRUE); - - /* Specify data destination for compression */ - jpeg_stdio_dest(&dstinfo, output_file); - - /* Start compressor (note no image data is actually written here) */ - jpeg_write_coefficients(&dstinfo, dst_coef_arrays); - - /* Copy to the output file any extra markers that we want to preserve */ - jcopy_markers_execute(&srcinfo, &dstinfo, copyoption); - - /* Execute image transformation, if any */ -#if TRANSFORMS_SUPPORTED - jtransform_execute_transformation(&srcinfo, &dstinfo, - src_coef_arrays, - &transformoption); -#endif - - /* Finish compression and release memory */ - jpeg_finish_compress(&dstinfo); - jpeg_destroy_compress(&dstinfo); - (void) jpeg_finish_decompress(&srcinfo); - jpeg_destroy_decompress(&srcinfo); - - /* Close files, if we opened them */ - if (input_file != stdin) - fclose(input_file); - if (output_file != stdout) - fclose(output_file); - -#ifdef PROGRESS_REPORT - end_progress_monitor((j_common_ptr) &dstinfo); -#endif - - /* All done. */ - exit(jsrcerr.num_warnings + jdsterr.num_warnings ?EXIT_WARNING:EXIT_SUCCESS); - return 0; /* suppress no-return-value warnings */ -} diff --git a/Build/source/libs/jpeg/jquant1.c b/Build/source/libs/jpeg/jquant1.c deleted file mode 100644 index b2f96aa15d2..00000000000 --- a/Build/source/libs/jpeg/jquant1.c +++ /dev/null @@ -1,856 +0,0 @@ -/* - * jquant1.c - * - * Copyright (C) 1991-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains 1-pass color quantization (color mapping) routines. - * These routines provide mapping to a fixed color map using equally spaced - * color values. Optional Floyd-Steinberg or ordered dithering is available. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - -#ifdef QUANT_1PASS_SUPPORTED - - -/* - * The main purpose of 1-pass quantization is to provide a fast, if not very - * high quality, colormapped output capability. A 2-pass quantizer usually - * gives better visual quality; however, for quantized grayscale output this - * quantizer is perfectly adequate. Dithering is highly recommended with this - * quantizer, though you can turn it off if you really want to. - * - * In 1-pass quantization the colormap must be chosen in advance of seeing the - * image. We use a map consisting of all combinations of Ncolors[i] color - * values for the i'th component. The Ncolors[] values are chosen so that - * their product, the total number of colors, is no more than that requested. - * (In most cases, the product will be somewhat less.) - * - * Since the colormap is orthogonal, the representative value for each color - * component can be determined without considering the other components; - * then these indexes can be combined into a colormap index by a standard - * N-dimensional-array-subscript calculation. Most of the arithmetic involved - * can be precalculated and stored in the lookup table colorindex[]. - * colorindex[i][j] maps pixel value j in component i to the nearest - * representative value (grid plane) for that component; this index is - * multiplied by the array stride for component i, so that the - * index of the colormap entry closest to a given pixel value is just - * sum( colorindex[component-number][pixel-component-value] ) - * Aside from being fast, this scheme allows for variable spacing between - * representative values with no additional lookup cost. - * - * If gamma correction has been applied in color conversion, it might be wise - * to adjust the color grid spacing so that the representative colors are - * equidistant in linear space. At this writing, gamma correction is not - * implemented by jdcolor, so nothing is done here. - */ - - -/* Declarations for ordered dithering. - * - * We use a standard 16x16 ordered dither array. The basic concept of ordered - * dithering is described in many references, for instance Dale Schumacher's - * chapter II.2 of Graphics Gems II (James Arvo, ed. Academic Press, 1991). - * In place of Schumacher's comparisons against a "threshold" value, we add a - * "dither" value to the input pixel and then round the result to the nearest - * output value. The dither value is equivalent to (0.5 - threshold) times - * the distance between output values. For ordered dithering, we assume that - * the output colors are equally spaced; if not, results will probably be - * worse, since the dither may be too much or too little at a given point. - * - * The normal calculation would be to form pixel value + dither, range-limit - * this to 0..MAXJSAMPLE, and then index into the colorindex table as usual. - * We can skip the separate range-limiting step by extending the colorindex - * table in both directions. - */ - -#define ODITHER_SIZE 16 /* dimension of dither matrix */ -/* NB: if ODITHER_SIZE is not a power of 2, ODITHER_MASK uses will break */ -#define ODITHER_CELLS (ODITHER_SIZE*ODITHER_SIZE) /* # cells in matrix */ -#define ODITHER_MASK (ODITHER_SIZE-1) /* mask for wrapping around counters */ - -typedef int ODITHER_MATRIX[ODITHER_SIZE][ODITHER_SIZE]; -typedef int (*ODITHER_MATRIX_PTR)[ODITHER_SIZE]; - -static const UINT8 base_dither_matrix[ODITHER_SIZE][ODITHER_SIZE] = { - /* Bayer's order-4 dither array. Generated by the code given in - * Stephen Hawley's article "Ordered Dithering" in Graphics Gems I. - * The values in this array must range from 0 to ODITHER_CELLS-1. - */ - { 0,192, 48,240, 12,204, 60,252, 3,195, 51,243, 15,207, 63,255 }, - { 128, 64,176,112,140, 76,188,124,131, 67,179,115,143, 79,191,127 }, - { 32,224, 16,208, 44,236, 28,220, 35,227, 19,211, 47,239, 31,223 }, - { 160, 96,144, 80,172,108,156, 92,163, 99,147, 83,175,111,159, 95 }, - { 8,200, 56,248, 4,196, 52,244, 11,203, 59,251, 7,199, 55,247 }, - { 136, 72,184,120,132, 68,180,116,139, 75,187,123,135, 71,183,119 }, - { 40,232, 24,216, 36,228, 20,212, 43,235, 27,219, 39,231, 23,215 }, - { 168,104,152, 88,164,100,148, 84,171,107,155, 91,167,103,151, 87 }, - { 2,194, 50,242, 14,206, 62,254, 1,193, 49,241, 13,205, 61,253 }, - { 130, 66,178,114,142, 78,190,126,129, 65,177,113,141, 77,189,125 }, - { 34,226, 18,210, 46,238, 30,222, 33,225, 17,209, 45,237, 29,221 }, - { 162, 98,146, 82,174,110,158, 94,161, 97,145, 81,173,109,157, 93 }, - { 10,202, 58,250, 6,198, 54,246, 9,201, 57,249, 5,197, 53,245 }, - { 138, 74,186,122,134, 70,182,118,137, 73,185,121,133, 69,181,117 }, - { 42,234, 26,218, 38,230, 22,214, 41,233, 25,217, 37,229, 21,213 }, - { 170,106,154, 90,166,102,150, 86,169,105,153, 89,165,101,149, 85 } -}; - - -/* Declarations for Floyd-Steinberg dithering. - * - * Errors are accumulated into the array fserrors[], at a resolution of - * 1/16th of a pixel count. The error at a given pixel is propagated - * to its not-yet-processed neighbors using the standard F-S fractions, - * ... (here) 7/16 - * 3/16 5/16 1/16 - * We work left-to-right on even rows, right-to-left on odd rows. - * - * We can get away with a single array (holding one row's worth of errors) - * by using it to store the current row's errors at pixel columns not yet - * processed, but the next row's errors at columns already processed. We - * need only a few extra variables to hold the errors immediately around the - * current column. (If we are lucky, those variables are in registers, but - * even if not, they're probably cheaper to access than array elements are.) - * - * The fserrors[] array is indexed [component#][position]. - * We provide (#columns + 2) entries per component; the extra entry at each - * end saves us from special-casing the first and last pixels. - * - * Note: on a wide image, we might not have enough room in a PC's near data - * segment to hold the error array; so it is allocated with alloc_large. - */ - -#if BITS_IN_JSAMPLE == 8 -typedef INT16 FSERROR; /* 16 bits should be enough */ -typedef int LOCFSERROR; /* use 'int' for calculation temps */ -#else -typedef INT32 FSERROR; /* may need more than 16 bits */ -typedef INT32 LOCFSERROR; /* be sure calculation temps are big enough */ -#endif - -typedef FSERROR FAR *FSERRPTR; /* pointer to error array (in FAR storage!) */ - - -/* Private subobject */ - -#define MAX_Q_COMPS 4 /* max components I can handle */ - -typedef struct { - struct jpeg_color_quantizer pub; /* public fields */ - - /* Initially allocated colormap is saved here */ - JSAMPARRAY sv_colormap; /* The color map as a 2-D pixel array */ - int sv_actual; /* number of entries in use */ - - JSAMPARRAY colorindex; /* Precomputed mapping for speed */ - /* colorindex[i][j] = index of color closest to pixel value j in component i, - * premultiplied as described above. Since colormap indexes must fit into - * JSAMPLEs, the entries of this array will too. - */ - boolean is_padded; /* is the colorindex padded for odither? */ - - int Ncolors[MAX_Q_COMPS]; /* # of values alloced to each component */ - - /* Variables for ordered dithering */ - int row_index; /* cur row's vertical index in dither matrix */ - ODITHER_MATRIX_PTR odither[MAX_Q_COMPS]; /* one dither array per component */ - - /* Variables for Floyd-Steinberg dithering */ - FSERRPTR fserrors[MAX_Q_COMPS]; /* accumulated errors */ - boolean on_odd_row; /* flag to remember which row we are on */ -} my_cquantizer; - -typedef my_cquantizer * my_cquantize_ptr; - - -/* - * Policy-making subroutines for create_colormap and create_colorindex. - * These routines determine the colormap to be used. The rest of the module - * only assumes that the colormap is orthogonal. - * - * * select_ncolors decides how to divvy up the available colors - * among the components. - * * output_value defines the set of representative values for a component. - * * largest_input_value defines the mapping from input values to - * representative values for a component. - * Note that the latter two routines may impose different policies for - * different components, though this is not currently done. - */ - - -LOCAL(int) -select_ncolors (j_decompress_ptr cinfo, int Ncolors[]) -/* Determine allocation of desired colors to components, */ -/* and fill in Ncolors[] array to indicate choice. */ -/* Return value is total number of colors (product of Ncolors[] values). */ -{ - int nc = cinfo->out_color_components; /* number of color components */ - int max_colors = cinfo->desired_number_of_colors; - int total_colors, iroot, i, j; - boolean changed; - long temp; - static const int RGB_order[3] = { RGB_GREEN, RGB_RED, RGB_BLUE }; - - /* We can allocate at least the nc'th root of max_colors per component. */ - /* Compute floor(nc'th root of max_colors). */ - iroot = 1; - do { - iroot++; - temp = iroot; /* set temp = iroot ** nc */ - for (i = 1; i < nc; i++) - temp *= iroot; - } while (temp <= (long) max_colors); /* repeat till iroot exceeds root */ - iroot--; /* now iroot = floor(root) */ - - /* Must have at least 2 color values per component */ - if (iroot < 2) - ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, (int) temp); - - /* Initialize to iroot color values for each component */ - total_colors = 1; - for (i = 0; i < nc; i++) { - Ncolors[i] = iroot; - total_colors *= iroot; - } - /* We may be able to increment the count for one or more components without - * exceeding max_colors, though we know not all can be incremented. - * Sometimes, the first component can be incremented more than once! - * (Example: for 16 colors, we start at 2*2*2, go to 3*2*2, then 4*2*2.) - * In RGB colorspace, try to increment G first, then R, then B. - */ - do { - changed = FALSE; - for (i = 0; i < nc; i++) { - j = (cinfo->out_color_space == JCS_RGB ? RGB_order[i] : i); - /* calculate new total_colors if Ncolors[j] is incremented */ - temp = total_colors / Ncolors[j]; - temp *= Ncolors[j]+1; /* done in long arith to avoid oflo */ - if (temp > (long) max_colors) - break; /* won't fit, done with this pass */ - Ncolors[j]++; /* OK, apply the increment */ - total_colors = (int) temp; - changed = TRUE; - } - } while (changed); - - return total_colors; -} - - -LOCAL(int) -output_value (j_decompress_ptr cinfo, int ci, int j, int maxj) -/* Return j'th output value, where j will range from 0 to maxj */ -/* The output values must fall in 0..MAXJSAMPLE in increasing order */ -{ - /* We always provide values 0 and MAXJSAMPLE for each component; - * any additional values are equally spaced between these limits. - * (Forcing the upper and lower values to the limits ensures that - * dithering can't produce a color outside the selected gamut.) - */ - return (int) (((INT32) j * MAXJSAMPLE + maxj/2) / maxj); -} - - -LOCAL(int) -largest_input_value (j_decompress_ptr cinfo, int ci, int j, int maxj) -/* Return largest input value that should map to j'th output value */ -/* Must have largest(j=0) >= 0, and largest(j=maxj) >= MAXJSAMPLE */ -{ - /* Breakpoints are halfway between values returned by output_value */ - return (int) (((INT32) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj)); -} - - -/* - * Create the colormap. - */ - -LOCAL(void) -create_colormap (j_decompress_ptr cinfo) -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - JSAMPARRAY colormap; /* Created colormap */ - int total_colors; /* Number of distinct output colors */ - int i,j,k, nci, blksize, blkdist, ptr, val; - - /* Select number of colors for each component */ - total_colors = select_ncolors(cinfo, cquantize->Ncolors); - - /* Report selected color counts */ - if (cinfo->out_color_components == 3) - TRACEMS4(cinfo, 1, JTRC_QUANT_3_NCOLORS, - total_colors, cquantize->Ncolors[0], - cquantize->Ncolors[1], cquantize->Ncolors[2]); - else - TRACEMS1(cinfo, 1, JTRC_QUANT_NCOLORS, total_colors); - - /* Allocate and fill in the colormap. */ - /* The colors are ordered in the map in standard row-major order, */ - /* i.e. rightmost (highest-indexed) color changes most rapidly. */ - - colormap = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) total_colors, (JDIMENSION) cinfo->out_color_components); - - /* blksize is number of adjacent repeated entries for a component */ - /* blkdist is distance between groups of identical entries for a component */ - blkdist = total_colors; - - for (i = 0; i < cinfo->out_color_components; i++) { - /* fill in colormap entries for i'th color component */ - nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ - blksize = blkdist / nci; - for (j = 0; j < nci; j++) { - /* Compute j'th output value (out of nci) for component */ - val = output_value(cinfo, i, j, nci-1); - /* Fill in all colormap entries that have this value of this component */ - for (ptr = j * blksize; ptr < total_colors; ptr += blkdist) { - /* fill in blksize entries beginning at ptr */ - for (k = 0; k < blksize; k++) - colormap[i][ptr+k] = (JSAMPLE) val; - } - } - blkdist = blksize; /* blksize of this color is blkdist of next */ - } - - /* Save the colormap in private storage, - * where it will survive color quantization mode changes. - */ - cquantize->sv_colormap = colormap; - cquantize->sv_actual = total_colors; -} - - -/* - * Create the color index table. - */ - -LOCAL(void) -create_colorindex (j_decompress_ptr cinfo) -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - JSAMPROW indexptr; - int i,j,k, nci, blksize, val, pad; - - /* For ordered dither, we pad the color index tables by MAXJSAMPLE in - * each direction (input index values can be -MAXJSAMPLE .. 2*MAXJSAMPLE). - * This is not necessary in the other dithering modes. However, we - * flag whether it was done in case user changes dithering mode. - */ - if (cinfo->dither_mode == JDITHER_ORDERED) { - pad = MAXJSAMPLE*2; - cquantize->is_padded = TRUE; - } else { - pad = 0; - cquantize->is_padded = FALSE; - } - - cquantize->colorindex = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) (MAXJSAMPLE+1 + pad), - (JDIMENSION) cinfo->out_color_components); - - /* blksize is number of adjacent repeated entries for a component */ - blksize = cquantize->sv_actual; - - for (i = 0; i < cinfo->out_color_components; i++) { - /* fill in colorindex entries for i'th color component */ - nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ - blksize = blksize / nci; - - /* adjust colorindex pointers to provide padding at negative indexes. */ - if (pad) - cquantize->colorindex[i] += MAXJSAMPLE; - - /* in loop, val = index of current output value, */ - /* and k = largest j that maps to current val */ - indexptr = cquantize->colorindex[i]; - val = 0; - k = largest_input_value(cinfo, i, 0, nci-1); - for (j = 0; j <= MAXJSAMPLE; j++) { - while (j > k) /* advance val if past boundary */ - k = largest_input_value(cinfo, i, ++val, nci-1); - /* premultiply so that no multiplication needed in main processing */ - indexptr[j] = (JSAMPLE) (val * blksize); - } - /* Pad at both ends if necessary */ - if (pad) - for (j = 1; j <= MAXJSAMPLE; j++) { - indexptr[-j] = indexptr[0]; - indexptr[MAXJSAMPLE+j] = indexptr[MAXJSAMPLE]; - } - } -} - - -/* - * Create an ordered-dither array for a component having ncolors - * distinct output values. - */ - -LOCAL(ODITHER_MATRIX_PTR) -make_odither_array (j_decompress_ptr cinfo, int ncolors) -{ - ODITHER_MATRIX_PTR odither; - int j,k; - INT32 num,den; - - odither = (ODITHER_MATRIX_PTR) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(ODITHER_MATRIX)); - /* The inter-value distance for this color is MAXJSAMPLE/(ncolors-1). - * Hence the dither value for the matrix cell with fill order f - * (f=0..N-1) should be (N-1-2*f)/(2*N) * MAXJSAMPLE/(ncolors-1). - * On 16-bit-int machine, be careful to avoid overflow. - */ - den = 2 * ODITHER_CELLS * ((INT32) (ncolors - 1)); - for (j = 0; j < ODITHER_SIZE; j++) { - for (k = 0; k < ODITHER_SIZE; k++) { - num = ((INT32) (ODITHER_CELLS-1 - 2*((int)base_dither_matrix[j][k]))) - * MAXJSAMPLE; - /* Ensure round towards zero despite C's lack of consistency - * about rounding negative values in integer division... - */ - odither[j][k] = (int) (num<0 ? -((-num)/den) : num/den); - } - } - return odither; -} - - -/* - * Create the ordered-dither tables. - * Components having the same number of representative colors may - * share a dither table. - */ - -LOCAL(void) -create_odither_tables (j_decompress_ptr cinfo) -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - ODITHER_MATRIX_PTR odither; - int i, j, nci; - - for (i = 0; i < cinfo->out_color_components; i++) { - nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ - odither = NULL; /* search for matching prior component */ - for (j = 0; j < i; j++) { - if (nci == cquantize->Ncolors[j]) { - odither = cquantize->odither[j]; - break; - } - } - if (odither == NULL) /* need a new table? */ - odither = make_odither_array(cinfo, nci); - cquantize->odither[i] = odither; - } -} - - -/* - * Map some rows of pixels to the output colormapped representation. - */ - -METHODDEF(void) -color_quantize (j_decompress_ptr cinfo, JSAMPARRAY input_buf, - JSAMPARRAY output_buf, int num_rows) -/* General case, no dithering */ -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - JSAMPARRAY colorindex = cquantize->colorindex; - register int pixcode, ci; - register JSAMPROW ptrin, ptrout; - int row; - JDIMENSION col; - JDIMENSION width = cinfo->output_width; - register int nc = cinfo->out_color_components; - - for (row = 0; row < num_rows; row++) { - ptrin = input_buf[row]; - ptrout = output_buf[row]; - for (col = width; col > 0; col--) { - pixcode = 0; - for (ci = 0; ci < nc; ci++) { - pixcode += GETJSAMPLE(colorindex[ci][GETJSAMPLE(*ptrin++)]); - } - *ptrout++ = (JSAMPLE) pixcode; - } - } -} - - -METHODDEF(void) -color_quantize3 (j_decompress_ptr cinfo, JSAMPARRAY input_buf, - JSAMPARRAY output_buf, int num_rows) -/* Fast path for out_color_components==3, no dithering */ -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - register int pixcode; - register JSAMPROW ptrin, ptrout; - JSAMPROW colorindex0 = cquantize->colorindex[0]; - JSAMPROW colorindex1 = cquantize->colorindex[1]; - JSAMPROW colorindex2 = cquantize->colorindex[2]; - int row; - JDIMENSION col; - JDIMENSION width = cinfo->output_width; - - for (row = 0; row < num_rows; row++) { - ptrin = input_buf[row]; - ptrout = output_buf[row]; - for (col = width; col > 0; col--) { - pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*ptrin++)]); - pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*ptrin++)]); - pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*ptrin++)]); - *ptrout++ = (JSAMPLE) pixcode; - } - } -} - - -METHODDEF(void) -quantize_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, - JSAMPARRAY output_buf, int num_rows) -/* General case, with ordered dithering */ -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - register JSAMPROW input_ptr; - register JSAMPROW output_ptr; - JSAMPROW colorindex_ci; - int * dither; /* points to active row of dither matrix */ - int row_index, col_index; /* current indexes into dither matrix */ - int nc = cinfo->out_color_components; - int ci; - int row; - JDIMENSION col; - JDIMENSION width = cinfo->output_width; - - for (row = 0; row < num_rows; row++) { - /* Initialize output values to 0 so can process components separately */ - jzero_far((void FAR *) output_buf[row], - (size_t) (width * SIZEOF(JSAMPLE))); - row_index = cquantize->row_index; - for (ci = 0; ci < nc; ci++) { - input_ptr = input_buf[row] + ci; - output_ptr = output_buf[row]; - colorindex_ci = cquantize->colorindex[ci]; - dither = cquantize->odither[ci][row_index]; - col_index = 0; - - for (col = width; col > 0; col--) { - /* Form pixel value + dither, range-limit to 0..MAXJSAMPLE, - * select output value, accumulate into output code for this pixel. - * Range-limiting need not be done explicitly, as we have extended - * the colorindex table to produce the right answers for out-of-range - * inputs. The maximum dither is +- MAXJSAMPLE; this sets the - * required amount of padding. - */ - *output_ptr += colorindex_ci[GETJSAMPLE(*input_ptr)+dither[col_index]]; - input_ptr += nc; - output_ptr++; - col_index = (col_index + 1) & ODITHER_MASK; - } - } - /* Advance row index for next row */ - row_index = (row_index + 1) & ODITHER_MASK; - cquantize->row_index = row_index; - } -} - - -METHODDEF(void) -quantize3_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, - JSAMPARRAY output_buf, int num_rows) -/* Fast path for out_color_components==3, with ordered dithering */ -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - register int pixcode; - register JSAMPROW input_ptr; - register JSAMPROW output_ptr; - JSAMPROW colorindex0 = cquantize->colorindex[0]; - JSAMPROW colorindex1 = cquantize->colorindex[1]; - JSAMPROW colorindex2 = cquantize->colorindex[2]; - int * dither0; /* points to active row of dither matrix */ - int * dither1; - int * dither2; - int row_index, col_index; /* current indexes into dither matrix */ - int row; - JDIMENSION col; - JDIMENSION width = cinfo->output_width; - - for (row = 0; row < num_rows; row++) { - row_index = cquantize->row_index; - input_ptr = input_buf[row]; - output_ptr = output_buf[row]; - dither0 = cquantize->odither[0][row_index]; - dither1 = cquantize->odither[1][row_index]; - dither2 = cquantize->odither[2][row_index]; - col_index = 0; - - for (col = width; col > 0; col--) { - pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*input_ptr++) + - dither0[col_index]]); - pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*input_ptr++) + - dither1[col_index]]); - pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*input_ptr++) + - dither2[col_index]]); - *output_ptr++ = (JSAMPLE) pixcode; - col_index = (col_index + 1) & ODITHER_MASK; - } - row_index = (row_index + 1) & ODITHER_MASK; - cquantize->row_index = row_index; - } -} - - -METHODDEF(void) -quantize_fs_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, - JSAMPARRAY output_buf, int num_rows) -/* General case, with Floyd-Steinberg dithering */ -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - register LOCFSERROR cur; /* current error or pixel value */ - LOCFSERROR belowerr; /* error for pixel below cur */ - LOCFSERROR bpreverr; /* error for below/prev col */ - LOCFSERROR bnexterr; /* error for below/next col */ - LOCFSERROR delta; - register FSERRPTR errorptr; /* => fserrors[] at column before current */ - register JSAMPROW input_ptr; - register JSAMPROW output_ptr; - JSAMPROW colorindex_ci; - JSAMPROW colormap_ci; - int pixcode; - int nc = cinfo->out_color_components; - int dir; /* 1 for left-to-right, -1 for right-to-left */ - int dirnc; /* dir * nc */ - int ci; - int row; - JDIMENSION col; - JDIMENSION width = cinfo->output_width; - JSAMPLE *range_limit = cinfo->sample_range_limit; - SHIFT_TEMPS - - for (row = 0; row < num_rows; row++) { - /* Initialize output values to 0 so can process components separately */ - jzero_far((void FAR *) output_buf[row], - (size_t) (width * SIZEOF(JSAMPLE))); - for (ci = 0; ci < nc; ci++) { - input_ptr = input_buf[row] + ci; - output_ptr = output_buf[row]; - if (cquantize->on_odd_row) { - /* work right to left in this row */ - input_ptr += (width-1) * nc; /* so point to rightmost pixel */ - output_ptr += width-1; - dir = -1; - dirnc = -nc; - errorptr = cquantize->fserrors[ci] + (width+1); /* => entry after last column */ - } else { - /* work left to right in this row */ - dir = 1; - dirnc = nc; - errorptr = cquantize->fserrors[ci]; /* => entry before first column */ - } - colorindex_ci = cquantize->colorindex[ci]; - colormap_ci = cquantize->sv_colormap[ci]; - /* Preset error values: no error propagated to first pixel from left */ - cur = 0; - /* and no error propagated to row below yet */ - belowerr = bpreverr = 0; - - for (col = width; col > 0; col--) { - /* cur holds the error propagated from the previous pixel on the - * current line. Add the error propagated from the previous line - * to form the complete error correction term for this pixel, and - * round the error term (which is expressed * 16) to an integer. - * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct - * for either sign of the error value. - * Note: errorptr points to *previous* column's array entry. - */ - cur = RIGHT_SHIFT(cur + errorptr[dir] + 8, 4); - /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE. - * The maximum error is +- MAXJSAMPLE; this sets the required size - * of the range_limit array. - */ - cur += GETJSAMPLE(*input_ptr); - cur = GETJSAMPLE(range_limit[cur]); - /* Select output value, accumulate into output code for this pixel */ - pixcode = GETJSAMPLE(colorindex_ci[cur]); - *output_ptr += (JSAMPLE) pixcode; - /* Compute actual representation error at this pixel */ - /* Note: we can do this even though we don't have the final */ - /* pixel code, because the colormap is orthogonal. */ - cur -= GETJSAMPLE(colormap_ci[pixcode]); - /* Compute error fractions to be propagated to adjacent pixels. - * Add these into the running sums, and simultaneously shift the - * next-line error sums left by 1 column. - */ - bnexterr = cur; - delta = cur * 2; - cur += delta; /* form error * 3 */ - errorptr[0] = (FSERROR) (bpreverr + cur); - cur += delta; /* form error * 5 */ - bpreverr = belowerr + cur; - belowerr = bnexterr; - cur += delta; /* form error * 7 */ - /* At this point cur contains the 7/16 error value to be propagated - * to the next pixel on the current line, and all the errors for the - * next line have been shifted over. We are therefore ready to move on. - */ - input_ptr += dirnc; /* advance input ptr to next column */ - output_ptr += dir; /* advance output ptr to next column */ - errorptr += dir; /* advance errorptr to current column */ - } - /* Post-loop cleanup: we must unload the final error value into the - * final fserrors[] entry. Note we need not unload belowerr because - * it is for the dummy column before or after the actual array. - */ - errorptr[0] = (FSERROR) bpreverr; /* unload prev err into array */ - } - cquantize->on_odd_row = (cquantize->on_odd_row ? FALSE : TRUE); - } -} - - -/* - * Allocate workspace for Floyd-Steinberg errors. - */ - -LOCAL(void) -alloc_fs_workspace (j_decompress_ptr cinfo) -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - size_t arraysize; - int i; - - arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); - for (i = 0; i < cinfo->out_color_components; i++) { - cquantize->fserrors[i] = (FSERRPTR) - (*cinfo->mem->alloc_large)((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize); - } -} - - -/* - * Initialize for one-pass color quantization. - */ - -METHODDEF(void) -start_pass_1_quant (j_decompress_ptr cinfo, boolean is_pre_scan) -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - size_t arraysize; - int i; - - /* Install my colormap. */ - cinfo->colormap = cquantize->sv_colormap; - cinfo->actual_number_of_colors = cquantize->sv_actual; - - /* Initialize for desired dithering mode. */ - switch (cinfo->dither_mode) { - case JDITHER_NONE: - if (cinfo->out_color_components == 3) - cquantize->pub.color_quantize = color_quantize3; - else - cquantize->pub.color_quantize = color_quantize; - break; - case JDITHER_ORDERED: - if (cinfo->out_color_components == 3) - cquantize->pub.color_quantize = quantize3_ord_dither; - else - cquantize->pub.color_quantize = quantize_ord_dither; - cquantize->row_index = 0; /* initialize state for ordered dither */ - /* If user changed to ordered dither from another mode, - * we must recreate the color index table with padding. - * This will cost extra space, but probably isn't very likely. - */ - if (! cquantize->is_padded) - create_colorindex(cinfo); - /* Create ordered-dither tables if we didn't already. */ - if (cquantize->odither[0] == NULL) - create_odither_tables(cinfo); - break; - case JDITHER_FS: - cquantize->pub.color_quantize = quantize_fs_dither; - cquantize->on_odd_row = FALSE; /* initialize state for F-S dither */ - /* Allocate Floyd-Steinberg workspace if didn't already. */ - if (cquantize->fserrors[0] == NULL) - alloc_fs_workspace(cinfo); - /* Initialize the propagated errors to zero. */ - arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); - for (i = 0; i < cinfo->out_color_components; i++) - jzero_far((void FAR *) cquantize->fserrors[i], arraysize); - break; - default: - ERREXIT(cinfo, JERR_NOT_COMPILED); - break; - } -} - - -/* - * Finish up at the end of the pass. - */ - -METHODDEF(void) -finish_pass_1_quant (j_decompress_ptr cinfo) -{ - /* no work in 1-pass case */ -} - - -/* - * Switch to a new external colormap between output passes. - * Shouldn't get to this module! - */ - -METHODDEF(void) -new_color_map_1_quant (j_decompress_ptr cinfo) -{ - ERREXIT(cinfo, JERR_MODE_CHANGE); -} - - -/* - * Module initialization routine for 1-pass color quantization. - */ - -GLOBAL(void) -jinit_1pass_quantizer (j_decompress_ptr cinfo) -{ - my_cquantize_ptr cquantize; - - cquantize = (my_cquantize_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_cquantizer)); - cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize; - cquantize->pub.start_pass = start_pass_1_quant; - cquantize->pub.finish_pass = finish_pass_1_quant; - cquantize->pub.new_color_map = new_color_map_1_quant; - cquantize->fserrors[0] = NULL; /* Flag FS workspace not allocated */ - cquantize->odither[0] = NULL; /* Also flag odither arrays not allocated */ - - /* Make sure my internal arrays won't overflow */ - if (cinfo->out_color_components > MAX_Q_COMPS) - ERREXIT1(cinfo, JERR_QUANT_COMPONENTS, MAX_Q_COMPS); - /* Make sure colormap indexes can be represented by JSAMPLEs */ - if (cinfo->desired_number_of_colors > (MAXJSAMPLE+1)) - ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXJSAMPLE+1); - - /* Create the colormap and color index table. */ - create_colormap(cinfo); - create_colorindex(cinfo); - - /* Allocate Floyd-Steinberg workspace now if requested. - * We do this now since it is FAR storage and may affect the memory - * manager's space calculations. If the user changes to FS dither - * mode in a later pass, we will allocate the space then, and will - * possibly overrun the max_memory_to_use setting. - */ - if (cinfo->dither_mode == JDITHER_FS) - alloc_fs_workspace(cinfo); -} - -#endif /* QUANT_1PASS_SUPPORTED */ diff --git a/Build/source/libs/jpeg/jquant2.c b/Build/source/libs/jpeg/jquant2.c deleted file mode 100644 index af601e334b2..00000000000 --- a/Build/source/libs/jpeg/jquant2.c +++ /dev/null @@ -1,1310 +0,0 @@ -/* - * jquant2.c - * - * Copyright (C) 1991-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains 2-pass color quantization (color mapping) routines. - * These routines provide selection of a custom color map for an image, - * followed by mapping of the image to that color map, with optional - * Floyd-Steinberg dithering. - * It is also possible to use just the second pass to map to an arbitrary - * externally-given color map. - * - * Note: ordered dithering is not supported, since there isn't any fast - * way to compute intercolor distances; it's unclear that ordered dither's - * fundamental assumptions even hold with an irregularly spaced color map. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - -#ifdef QUANT_2PASS_SUPPORTED - - -/* - * This module implements the well-known Heckbert paradigm for color - * quantization. Most of the ideas used here can be traced back to - * Heckbert's seminal paper - * Heckbert, Paul. "Color Image Quantization for Frame Buffer Display", - * Proc. SIGGRAPH '82, Computer Graphics v.16 #3 (July 1982), pp 297-304. - * - * In the first pass over the image, we accumulate a histogram showing the - * usage count of each possible color. To keep the histogram to a reasonable - * size, we reduce the precision of the input; typical practice is to retain - * 5 or 6 bits per color, so that 8 or 4 different input values are counted - * in the same histogram cell. - * - * Next, the color-selection step begins with a box representing the whole - * color space, and repeatedly splits the "largest" remaining box until we - * have as many boxes as desired colors. Then the mean color in each - * remaining box becomes one of the possible output colors. - * - * The second pass over the image maps each input pixel to the closest output - * color (optionally after applying a Floyd-Steinberg dithering correction). - * This mapping is logically trivial, but making it go fast enough requires - * considerable care. - * - * Heckbert-style quantizers vary a good deal in their policies for choosing - * the "largest" box and deciding where to cut it. The particular policies - * used here have proved out well in experimental comparisons, but better ones - * may yet be found. - * - * In earlier versions of the IJG code, this module quantized in YCbCr color - * space, processing the raw upsampled data without a color conversion step. - * This allowed the color conversion math to be done only once per colormap - * entry, not once per pixel. However, that optimization precluded other - * useful optimizations (such as merging color conversion with upsampling) - * and it also interfered with desired capabilities such as quantizing to an - * externally-supplied colormap. We have therefore abandoned that approach. - * The present code works in the post-conversion color space, typically RGB. - * - * To improve the visual quality of the results, we actually work in scaled - * RGB space, giving G distances more weight than R, and R in turn more than - * B. To do everything in integer math, we must use integer scale factors. - * The 2/3/1 scale factors used here correspond loosely to the relative - * weights of the colors in the NTSC grayscale equation. - * If you want to use this code to quantize a non-RGB color space, you'll - * probably need to change these scale factors. - */ - -#define R_SCALE 2 /* scale R distances by this much */ -#define G_SCALE 3 /* scale G distances by this much */ -#define B_SCALE 1 /* and B by this much */ - -/* Relabel R/G/B as components 0/1/2, respecting the RGB ordering defined - * in jmorecfg.h. As the code stands, it will do the right thing for R,G,B - * and B,G,R orders. If you define some other weird order in jmorecfg.h, - * you'll get compile errors until you extend this logic. In that case - * you'll probably want to tweak the histogram sizes too. - */ - -#if RGB_RED == 0 -#define C0_SCALE R_SCALE -#endif -#if RGB_BLUE == 0 -#define C0_SCALE B_SCALE -#endif -#if RGB_GREEN == 1 -#define C1_SCALE G_SCALE -#endif -#if RGB_RED == 2 -#define C2_SCALE R_SCALE -#endif -#if RGB_BLUE == 2 -#define C2_SCALE B_SCALE -#endif - - -/* - * First we have the histogram data structure and routines for creating it. - * - * The number of bits of precision can be adjusted by changing these symbols. - * We recommend keeping 6 bits for G and 5 each for R and B. - * If you have plenty of memory and cycles, 6 bits all around gives marginally - * better results; if you are short of memory, 5 bits all around will save - * some space but degrade the results. - * To maintain a fully accurate histogram, we'd need to allocate a "long" - * (preferably unsigned long) for each cell. In practice this is overkill; - * we can get by with 16 bits per cell. Few of the cell counts will overflow, - * and clamping those that do overflow to the maximum value will give close- - * enough results. This reduces the recommended histogram size from 256Kb - * to 128Kb, which is a useful savings on PC-class machines. - * (In the second pass the histogram space is re-used for pixel mapping data; - * in that capacity, each cell must be able to store zero to the number of - * desired colors. 16 bits/cell is plenty for that too.) - * Since the JPEG code is intended to run in small memory model on 80x86 - * machines, we can't just allocate the histogram in one chunk. Instead - * of a true 3-D array, we use a row of pointers to 2-D arrays. Each - * pointer corresponds to a C0 value (typically 2^5 = 32 pointers) and - * each 2-D array has 2^6*2^5 = 2048 or 2^6*2^6 = 4096 entries. Note that - * on 80x86 machines, the pointer row is in near memory but the actual - * arrays are in far memory (same arrangement as we use for image arrays). - */ - -#define MAXNUMCOLORS (MAXJSAMPLE+1) /* maximum size of colormap */ - -/* These will do the right thing for either R,G,B or B,G,R color order, - * but you may not like the results for other color orders. - */ -#define HIST_C0_BITS 5 /* bits of precision in R/B histogram */ -#define HIST_C1_BITS 6 /* bits of precision in G histogram */ -#define HIST_C2_BITS 5 /* bits of precision in B/R histogram */ - -/* Number of elements along histogram axes. */ -#define HIST_C0_ELEMS (1<cquantize; - register JSAMPROW ptr; - register histptr histp; - register hist3d histogram = cquantize->histogram; - int row; - JDIMENSION col; - JDIMENSION width = cinfo->output_width; - - for (row = 0; row < num_rows; row++) { - ptr = input_buf[row]; - for (col = width; col > 0; col--) { - /* get pixel value and index into the histogram */ - histp = & histogram[GETJSAMPLE(ptr[0]) >> C0_SHIFT] - [GETJSAMPLE(ptr[1]) >> C1_SHIFT] - [GETJSAMPLE(ptr[2]) >> C2_SHIFT]; - /* increment, check for overflow and undo increment if so. */ - if (++(*histp) <= 0) - (*histp)--; - ptr += 3; - } - } -} - - -/* - * Next we have the really interesting routines: selection of a colormap - * given the completed histogram. - * These routines work with a list of "boxes", each representing a rectangular - * subset of the input color space (to histogram precision). - */ - -typedef struct { - /* The bounds of the box (inclusive); expressed as histogram indexes */ - int c0min, c0max; - int c1min, c1max; - int c2min, c2max; - /* The volume (actually 2-norm) of the box */ - INT32 volume; - /* The number of nonzero histogram cells within this box */ - long colorcount; -} box; - -typedef box * boxptr; - - -LOCAL(boxptr) -find_biggest_color_pop (boxptr boxlist, int numboxes) -/* Find the splittable box with the largest color population */ -/* Returns NULL if no splittable boxes remain */ -{ - register boxptr boxp; - register int i; - register long maxc = 0; - boxptr which = NULL; - - for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { - if (boxp->colorcount > maxc && boxp->volume > 0) { - which = boxp; - maxc = boxp->colorcount; - } - } - return which; -} - - -LOCAL(boxptr) -find_biggest_volume (boxptr boxlist, int numboxes) -/* Find the splittable box with the largest (scaled) volume */ -/* Returns NULL if no splittable boxes remain */ -{ - register boxptr boxp; - register int i; - register INT32 maxv = 0; - boxptr which = NULL; - - for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { - if (boxp->volume > maxv) { - which = boxp; - maxv = boxp->volume; - } - } - return which; -} - - -LOCAL(void) -update_box (j_decompress_ptr cinfo, boxptr boxp) -/* Shrink the min/max bounds of a box to enclose only nonzero elements, */ -/* and recompute its volume and population */ -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - hist3d histogram = cquantize->histogram; - histptr histp; - int c0,c1,c2; - int c0min,c0max,c1min,c1max,c2min,c2max; - INT32 dist0,dist1,dist2; - long ccount; - - c0min = boxp->c0min; c0max = boxp->c0max; - c1min = boxp->c1min; c1max = boxp->c1max; - c2min = boxp->c2min; c2max = boxp->c2max; - - if (c0max > c0min) - for (c0 = c0min; c0 <= c0max; c0++) - for (c1 = c1min; c1 <= c1max; c1++) { - histp = & histogram[c0][c1][c2min]; - for (c2 = c2min; c2 <= c2max; c2++) - if (*histp++ != 0) { - boxp->c0min = c0min = c0; - goto have_c0min; - } - } - have_c0min: - if (c0max > c0min) - for (c0 = c0max; c0 >= c0min; c0--) - for (c1 = c1min; c1 <= c1max; c1++) { - histp = & histogram[c0][c1][c2min]; - for (c2 = c2min; c2 <= c2max; c2++) - if (*histp++ != 0) { - boxp->c0max = c0max = c0; - goto have_c0max; - } - } - have_c0max: - if (c1max > c1min) - for (c1 = c1min; c1 <= c1max; c1++) - for (c0 = c0min; c0 <= c0max; c0++) { - histp = & histogram[c0][c1][c2min]; - for (c2 = c2min; c2 <= c2max; c2++) - if (*histp++ != 0) { - boxp->c1min = c1min = c1; - goto have_c1min; - } - } - have_c1min: - if (c1max > c1min) - for (c1 = c1max; c1 >= c1min; c1--) - for (c0 = c0min; c0 <= c0max; c0++) { - histp = & histogram[c0][c1][c2min]; - for (c2 = c2min; c2 <= c2max; c2++) - if (*histp++ != 0) { - boxp->c1max = c1max = c1; - goto have_c1max; - } - } - have_c1max: - if (c2max > c2min) - for (c2 = c2min; c2 <= c2max; c2++) - for (c0 = c0min; c0 <= c0max; c0++) { - histp = & histogram[c0][c1min][c2]; - for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) - if (*histp != 0) { - boxp->c2min = c2min = c2; - goto have_c2min; - } - } - have_c2min: - if (c2max > c2min) - for (c2 = c2max; c2 >= c2min; c2--) - for (c0 = c0min; c0 <= c0max; c0++) { - histp = & histogram[c0][c1min][c2]; - for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) - if (*histp != 0) { - boxp->c2max = c2max = c2; - goto have_c2max; - } - } - have_c2max: - - /* Update box volume. - * We use 2-norm rather than real volume here; this biases the method - * against making long narrow boxes, and it has the side benefit that - * a box is splittable iff norm > 0. - * Since the differences are expressed in histogram-cell units, - * we have to shift back to JSAMPLE units to get consistent distances; - * after which, we scale according to the selected distance scale factors. - */ - dist0 = ((c0max - c0min) << C0_SHIFT) * C0_SCALE; - dist1 = ((c1max - c1min) << C1_SHIFT) * C1_SCALE; - dist2 = ((c2max - c2min) << C2_SHIFT) * C2_SCALE; - boxp->volume = dist0*dist0 + dist1*dist1 + dist2*dist2; - - /* Now scan remaining volume of box and compute population */ - ccount = 0; - for (c0 = c0min; c0 <= c0max; c0++) - for (c1 = c1min; c1 <= c1max; c1++) { - histp = & histogram[c0][c1][c2min]; - for (c2 = c2min; c2 <= c2max; c2++, histp++) - if (*histp != 0) { - ccount++; - } - } - boxp->colorcount = ccount; -} - - -LOCAL(int) -median_cut (j_decompress_ptr cinfo, boxptr boxlist, int numboxes, - int desired_colors) -/* Repeatedly select and split the largest box until we have enough boxes */ -{ - int n,lb; - int c0,c1,c2,cmax; - register boxptr b1,b2; - - while (numboxes < desired_colors) { - /* Select box to split. - * Current algorithm: by population for first half, then by volume. - */ - if (numboxes*2 <= desired_colors) { - b1 = find_biggest_color_pop(boxlist, numboxes); - } else { - b1 = find_biggest_volume(boxlist, numboxes); - } - if (b1 == NULL) /* no splittable boxes left! */ - break; - b2 = &boxlist[numboxes]; /* where new box will go */ - /* Copy the color bounds to the new box. */ - b2->c0max = b1->c0max; b2->c1max = b1->c1max; b2->c2max = b1->c2max; - b2->c0min = b1->c0min; b2->c1min = b1->c1min; b2->c2min = b1->c2min; - /* Choose which axis to split the box on. - * Current algorithm: longest scaled axis. - * See notes in update_box about scaling distances. - */ - c0 = ((b1->c0max - b1->c0min) << C0_SHIFT) * C0_SCALE; - c1 = ((b1->c1max - b1->c1min) << C1_SHIFT) * C1_SCALE; - c2 = ((b1->c2max - b1->c2min) << C2_SHIFT) * C2_SCALE; - /* We want to break any ties in favor of green, then red, blue last. - * This code does the right thing for R,G,B or B,G,R color orders only. - */ -#if RGB_RED == 0 - cmax = c1; n = 1; - if (c0 > cmax) { cmax = c0; n = 0; } - if (c2 > cmax) { n = 2; } -#else - cmax = c1; n = 1; - if (c2 > cmax) { cmax = c2; n = 2; } - if (c0 > cmax) { n = 0; } -#endif - /* Choose split point along selected axis, and update box bounds. - * Current algorithm: split at halfway point. - * (Since the box has been shrunk to minimum volume, - * any split will produce two nonempty subboxes.) - * Note that lb value is max for lower box, so must be < old max. - */ - switch (n) { - case 0: - lb = (b1->c0max + b1->c0min) / 2; - b1->c0max = lb; - b2->c0min = lb+1; - break; - case 1: - lb = (b1->c1max + b1->c1min) / 2; - b1->c1max = lb; - b2->c1min = lb+1; - break; - case 2: - lb = (b1->c2max + b1->c2min) / 2; - b1->c2max = lb; - b2->c2min = lb+1; - break; - } - /* Update stats for boxes */ - update_box(cinfo, b1); - update_box(cinfo, b2); - numboxes++; - } - return numboxes; -} - - -LOCAL(void) -compute_color (j_decompress_ptr cinfo, boxptr boxp, int icolor) -/* Compute representative color for a box, put it in colormap[icolor] */ -{ - /* Current algorithm: mean weighted by pixels (not colors) */ - /* Note it is important to get the rounding correct! */ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - hist3d histogram = cquantize->histogram; - histptr histp; - int c0,c1,c2; - int c0min,c0max,c1min,c1max,c2min,c2max; - long count; - long total = 0; - long c0total = 0; - long c1total = 0; - long c2total = 0; - - c0min = boxp->c0min; c0max = boxp->c0max; - c1min = boxp->c1min; c1max = boxp->c1max; - c2min = boxp->c2min; c2max = boxp->c2max; - - for (c0 = c0min; c0 <= c0max; c0++) - for (c1 = c1min; c1 <= c1max; c1++) { - histp = & histogram[c0][c1][c2min]; - for (c2 = c2min; c2 <= c2max; c2++) { - if ((count = *histp++) != 0) { - total += count; - c0total += ((c0 << C0_SHIFT) + ((1<>1)) * count; - c1total += ((c1 << C1_SHIFT) + ((1<>1)) * count; - c2total += ((c2 << C2_SHIFT) + ((1<>1)) * count; - } - } - } - - cinfo->colormap[0][icolor] = (JSAMPLE) ((c0total + (total>>1)) / total); - cinfo->colormap[1][icolor] = (JSAMPLE) ((c1total + (total>>1)) / total); - cinfo->colormap[2][icolor] = (JSAMPLE) ((c2total + (total>>1)) / total); -} - - -LOCAL(void) -select_colors (j_decompress_ptr cinfo, int desired_colors) -/* Master routine for color selection */ -{ - boxptr boxlist; - int numboxes; - int i; - - /* Allocate workspace for box list */ - boxlist = (boxptr) (*cinfo->mem->alloc_small) - ((j_common_ptr) cinfo, JPOOL_IMAGE, desired_colors * SIZEOF(box)); - /* Initialize one box containing whole space */ - numboxes = 1; - boxlist[0].c0min = 0; - boxlist[0].c0max = MAXJSAMPLE >> C0_SHIFT; - boxlist[0].c1min = 0; - boxlist[0].c1max = MAXJSAMPLE >> C1_SHIFT; - boxlist[0].c2min = 0; - boxlist[0].c2max = MAXJSAMPLE >> C2_SHIFT; - /* Shrink it to actually-used volume and set its statistics */ - update_box(cinfo, & boxlist[0]); - /* Perform median-cut to produce final box list */ - numboxes = median_cut(cinfo, boxlist, numboxes, desired_colors); - /* Compute the representative color for each box, fill colormap */ - for (i = 0; i < numboxes; i++) - compute_color(cinfo, & boxlist[i], i); - cinfo->actual_number_of_colors = numboxes; - TRACEMS1(cinfo, 1, JTRC_QUANT_SELECTED, numboxes); -} - - -/* - * These routines are concerned with the time-critical task of mapping input - * colors to the nearest color in the selected colormap. - * - * We re-use the histogram space as an "inverse color map", essentially a - * cache for the results of nearest-color searches. All colors within a - * histogram cell will be mapped to the same colormap entry, namely the one - * closest to the cell's center. This may not be quite the closest entry to - * the actual input color, but it's almost as good. A zero in the cache - * indicates we haven't found the nearest color for that cell yet; the array - * is cleared to zeroes before starting the mapping pass. When we find the - * nearest color for a cell, its colormap index plus one is recorded in the - * cache for future use. The pass2 scanning routines call fill_inverse_cmap - * when they need to use an unfilled entry in the cache. - * - * Our method of efficiently finding nearest colors is based on the "locally - * sorted search" idea described by Heckbert and on the incremental distance - * calculation described by Spencer W. Thomas in chapter III.1 of Graphics - * Gems II (James Arvo, ed. Academic Press, 1991). Thomas points out that - * the distances from a given colormap entry to each cell of the histogram can - * be computed quickly using an incremental method: the differences between - * distances to adjacent cells themselves differ by a constant. This allows a - * fairly fast implementation of the "brute force" approach of computing the - * distance from every colormap entry to every histogram cell. Unfortunately, - * it needs a work array to hold the best-distance-so-far for each histogram - * cell (because the inner loop has to be over cells, not colormap entries). - * The work array elements have to be INT32s, so the work array would need - * 256Kb at our recommended precision. This is not feasible in DOS machines. - * - * To get around these problems, we apply Thomas' method to compute the - * nearest colors for only the cells within a small subbox of the histogram. - * The work array need be only as big as the subbox, so the memory usage - * problem is solved. Furthermore, we need not fill subboxes that are never - * referenced in pass2; many images use only part of the color gamut, so a - * fair amount of work is saved. An additional advantage of this - * approach is that we can apply Heckbert's locality criterion to quickly - * eliminate colormap entries that are far away from the subbox; typically - * three-fourths of the colormap entries are rejected by Heckbert's criterion, - * and we need not compute their distances to individual cells in the subbox. - * The speed of this approach is heavily influenced by the subbox size: too - * small means too much overhead, too big loses because Heckbert's criterion - * can't eliminate as many colormap entries. Empirically the best subbox - * size seems to be about 1/512th of the histogram (1/8th in each direction). - * - * Thomas' article also describes a refined method which is asymptotically - * faster than the brute-force method, but it is also far more complex and - * cannot efficiently be applied to small subboxes. It is therefore not - * useful for programs intended to be portable to DOS machines. On machines - * with plenty of memory, filling the whole histogram in one shot with Thomas' - * refined method might be faster than the present code --- but then again, - * it might not be any faster, and it's certainly more complicated. - */ - - -/* log2(histogram cells in update box) for each axis; this can be adjusted */ -#define BOX_C0_LOG (HIST_C0_BITS-3) -#define BOX_C1_LOG (HIST_C1_BITS-3) -#define BOX_C2_LOG (HIST_C2_BITS-3) - -#define BOX_C0_ELEMS (1<actual_number_of_colors; - int maxc0, maxc1, maxc2; - int centerc0, centerc1, centerc2; - int i, x, ncolors; - INT32 minmaxdist, min_dist, max_dist, tdist; - INT32 mindist[MAXNUMCOLORS]; /* min distance to colormap entry i */ - - /* Compute true coordinates of update box's upper corner and center. - * Actually we compute the coordinates of the center of the upper-corner - * histogram cell, which are the upper bounds of the volume we care about. - * Note that since ">>" rounds down, the "center" values may be closer to - * min than to max; hence comparisons to them must be "<=", not "<". - */ - maxc0 = minc0 + ((1 << BOX_C0_SHIFT) - (1 << C0_SHIFT)); - centerc0 = (minc0 + maxc0) >> 1; - maxc1 = minc1 + ((1 << BOX_C1_SHIFT) - (1 << C1_SHIFT)); - centerc1 = (minc1 + maxc1) >> 1; - maxc2 = minc2 + ((1 << BOX_C2_SHIFT) - (1 << C2_SHIFT)); - centerc2 = (minc2 + maxc2) >> 1; - - /* For each color in colormap, find: - * 1. its minimum squared-distance to any point in the update box - * (zero if color is within update box); - * 2. its maximum squared-distance to any point in the update box. - * Both of these can be found by considering only the corners of the box. - * We save the minimum distance for each color in mindist[]; - * only the smallest maximum distance is of interest. - */ - minmaxdist = 0x7FFFFFFFL; - - for (i = 0; i < numcolors; i++) { - /* We compute the squared-c0-distance term, then add in the other two. */ - x = GETJSAMPLE(cinfo->colormap[0][i]); - if (x < minc0) { - tdist = (x - minc0) * C0_SCALE; - min_dist = tdist*tdist; - tdist = (x - maxc0) * C0_SCALE; - max_dist = tdist*tdist; - } else if (x > maxc0) { - tdist = (x - maxc0) * C0_SCALE; - min_dist = tdist*tdist; - tdist = (x - minc0) * C0_SCALE; - max_dist = tdist*tdist; - } else { - /* within cell range so no contribution to min_dist */ - min_dist = 0; - if (x <= centerc0) { - tdist = (x - maxc0) * C0_SCALE; - max_dist = tdist*tdist; - } else { - tdist = (x - minc0) * C0_SCALE; - max_dist = tdist*tdist; - } - } - - x = GETJSAMPLE(cinfo->colormap[1][i]); - if (x < minc1) { - tdist = (x - minc1) * C1_SCALE; - min_dist += tdist*tdist; - tdist = (x - maxc1) * C1_SCALE; - max_dist += tdist*tdist; - } else if (x > maxc1) { - tdist = (x - maxc1) * C1_SCALE; - min_dist += tdist*tdist; - tdist = (x - minc1) * C1_SCALE; - max_dist += tdist*tdist; - } else { - /* within cell range so no contribution to min_dist */ - if (x <= centerc1) { - tdist = (x - maxc1) * C1_SCALE; - max_dist += tdist*tdist; - } else { - tdist = (x - minc1) * C1_SCALE; - max_dist += tdist*tdist; - } - } - - x = GETJSAMPLE(cinfo->colormap[2][i]); - if (x < minc2) { - tdist = (x - minc2) * C2_SCALE; - min_dist += tdist*tdist; - tdist = (x - maxc2) * C2_SCALE; - max_dist += tdist*tdist; - } else if (x > maxc2) { - tdist = (x - maxc2) * C2_SCALE; - min_dist += tdist*tdist; - tdist = (x - minc2) * C2_SCALE; - max_dist += tdist*tdist; - } else { - /* within cell range so no contribution to min_dist */ - if (x <= centerc2) { - tdist = (x - maxc2) * C2_SCALE; - max_dist += tdist*tdist; - } else { - tdist = (x - minc2) * C2_SCALE; - max_dist += tdist*tdist; - } - } - - mindist[i] = min_dist; /* save away the results */ - if (max_dist < minmaxdist) - minmaxdist = max_dist; - } - - /* Now we know that no cell in the update box is more than minmaxdist - * away from some colormap entry. Therefore, only colors that are - * within minmaxdist of some part of the box need be considered. - */ - ncolors = 0; - for (i = 0; i < numcolors; i++) { - if (mindist[i] <= minmaxdist) - colorlist[ncolors++] = (JSAMPLE) i; - } - return ncolors; -} - - -LOCAL(void) -find_best_colors (j_decompress_ptr cinfo, int minc0, int minc1, int minc2, - int numcolors, JSAMPLE colorlist[], JSAMPLE bestcolor[]) -/* Find the closest colormap entry for each cell in the update box, - * given the list of candidate colors prepared by find_nearby_colors. - * Return the indexes of the closest entries in the bestcolor[] array. - * This routine uses Thomas' incremental distance calculation method to - * find the distance from a colormap entry to successive cells in the box. - */ -{ - int ic0, ic1, ic2; - int i, icolor; - register INT32 * bptr; /* pointer into bestdist[] array */ - JSAMPLE * cptr; /* pointer into bestcolor[] array */ - INT32 dist0, dist1; /* initial distance values */ - register INT32 dist2; /* current distance in inner loop */ - INT32 xx0, xx1; /* distance increments */ - register INT32 xx2; - INT32 inc0, inc1, inc2; /* initial values for increments */ - /* This array holds the distance to the nearest-so-far color for each cell */ - INT32 bestdist[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS]; - - /* Initialize best-distance for each cell of the update box */ - bptr = bestdist; - for (i = BOX_C0_ELEMS*BOX_C1_ELEMS*BOX_C2_ELEMS-1; i >= 0; i--) - *bptr++ = 0x7FFFFFFFL; - - /* For each color selected by find_nearby_colors, - * compute its distance to the center of each cell in the box. - * If that's less than best-so-far, update best distance and color number. - */ - - /* Nominal steps between cell centers ("x" in Thomas article) */ -#define STEP_C0 ((1 << C0_SHIFT) * C0_SCALE) -#define STEP_C1 ((1 << C1_SHIFT) * C1_SCALE) -#define STEP_C2 ((1 << C2_SHIFT) * C2_SCALE) - - for (i = 0; i < numcolors; i++) { - icolor = GETJSAMPLE(colorlist[i]); - /* Compute (square of) distance from minc0/c1/c2 to this color */ - inc0 = (minc0 - GETJSAMPLE(cinfo->colormap[0][icolor])) * C0_SCALE; - dist0 = inc0*inc0; - inc1 = (minc1 - GETJSAMPLE(cinfo->colormap[1][icolor])) * C1_SCALE; - dist0 += inc1*inc1; - inc2 = (minc2 - GETJSAMPLE(cinfo->colormap[2][icolor])) * C2_SCALE; - dist0 += inc2*inc2; - /* Form the initial difference increments */ - inc0 = inc0 * (2 * STEP_C0) + STEP_C0 * STEP_C0; - inc1 = inc1 * (2 * STEP_C1) + STEP_C1 * STEP_C1; - inc2 = inc2 * (2 * STEP_C2) + STEP_C2 * STEP_C2; - /* Now loop over all cells in box, updating distance per Thomas method */ - bptr = bestdist; - cptr = bestcolor; - xx0 = inc0; - for (ic0 = BOX_C0_ELEMS-1; ic0 >= 0; ic0--) { - dist1 = dist0; - xx1 = inc1; - for (ic1 = BOX_C1_ELEMS-1; ic1 >= 0; ic1--) { - dist2 = dist1; - xx2 = inc2; - for (ic2 = BOX_C2_ELEMS-1; ic2 >= 0; ic2--) { - if (dist2 < *bptr) { - *bptr = dist2; - *cptr = (JSAMPLE) icolor; - } - dist2 += xx2; - xx2 += 2 * STEP_C2 * STEP_C2; - bptr++; - cptr++; - } - dist1 += xx1; - xx1 += 2 * STEP_C1 * STEP_C1; - } - dist0 += xx0; - xx0 += 2 * STEP_C0 * STEP_C0; - } - } -} - - -LOCAL(void) -fill_inverse_cmap (j_decompress_ptr cinfo, int c0, int c1, int c2) -/* Fill the inverse-colormap entries in the update box that contains */ -/* histogram cell c0/c1/c2. (Only that one cell MUST be filled, but */ -/* we can fill as many others as we wish.) */ -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - hist3d histogram = cquantize->histogram; - int minc0, minc1, minc2; /* lower left corner of update box */ - int ic0, ic1, ic2; - register JSAMPLE * cptr; /* pointer into bestcolor[] array */ - register histptr cachep; /* pointer into main cache array */ - /* This array lists the candidate colormap indexes. */ - JSAMPLE colorlist[MAXNUMCOLORS]; - int numcolors; /* number of candidate colors */ - /* This array holds the actually closest colormap index for each cell. */ - JSAMPLE bestcolor[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS]; - - /* Convert cell coordinates to update box ID */ - c0 >>= BOX_C0_LOG; - c1 >>= BOX_C1_LOG; - c2 >>= BOX_C2_LOG; - - /* Compute true coordinates of update box's origin corner. - * Actually we compute the coordinates of the center of the corner - * histogram cell, which are the lower bounds of the volume we care about. - */ - minc0 = (c0 << BOX_C0_SHIFT) + ((1 << C0_SHIFT) >> 1); - minc1 = (c1 << BOX_C1_SHIFT) + ((1 << C1_SHIFT) >> 1); - minc2 = (c2 << BOX_C2_SHIFT) + ((1 << C2_SHIFT) >> 1); - - /* Determine which colormap entries are close enough to be candidates - * for the nearest entry to some cell in the update box. - */ - numcolors = find_nearby_colors(cinfo, minc0, minc1, minc2, colorlist); - - /* Determine the actually nearest colors. */ - find_best_colors(cinfo, minc0, minc1, minc2, numcolors, colorlist, - bestcolor); - - /* Save the best color numbers (plus 1) in the main cache array */ - c0 <<= BOX_C0_LOG; /* convert ID back to base cell indexes */ - c1 <<= BOX_C1_LOG; - c2 <<= BOX_C2_LOG; - cptr = bestcolor; - for (ic0 = 0; ic0 < BOX_C0_ELEMS; ic0++) { - for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++) { - cachep = & histogram[c0+ic0][c1+ic1][c2]; - for (ic2 = 0; ic2 < BOX_C2_ELEMS; ic2++) { - *cachep++ = (histcell) (GETJSAMPLE(*cptr++) + 1); - } - } - } -} - - -/* - * Map some rows of pixels to the output colormapped representation. - */ - -METHODDEF(void) -pass2_no_dither (j_decompress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) -/* This version performs no dithering */ -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - hist3d histogram = cquantize->histogram; - register JSAMPROW inptr, outptr; - register histptr cachep; - register int c0, c1, c2; - int row; - JDIMENSION col; - JDIMENSION width = cinfo->output_width; - - for (row = 0; row < num_rows; row++) { - inptr = input_buf[row]; - outptr = output_buf[row]; - for (col = width; col > 0; col--) { - /* get pixel value and index into the cache */ - c0 = GETJSAMPLE(*inptr++) >> C0_SHIFT; - c1 = GETJSAMPLE(*inptr++) >> C1_SHIFT; - c2 = GETJSAMPLE(*inptr++) >> C2_SHIFT; - cachep = & histogram[c0][c1][c2]; - /* If we have not seen this color before, find nearest colormap entry */ - /* and update the cache */ - if (*cachep == 0) - fill_inverse_cmap(cinfo, c0,c1,c2); - /* Now emit the colormap index for this cell */ - *outptr++ = (JSAMPLE) (*cachep - 1); - } - } -} - - -METHODDEF(void) -pass2_fs_dither (j_decompress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) -/* This version performs Floyd-Steinberg dithering */ -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - hist3d histogram = cquantize->histogram; - register LOCFSERROR cur0, cur1, cur2; /* current error or pixel value */ - LOCFSERROR belowerr0, belowerr1, belowerr2; /* error for pixel below cur */ - LOCFSERROR bpreverr0, bpreverr1, bpreverr2; /* error for below/prev col */ - register FSERRPTR errorptr; /* => fserrors[] at column before current */ - JSAMPROW inptr; /* => current input pixel */ - JSAMPROW outptr; /* => current output pixel */ - histptr cachep; - int dir; /* +1 or -1 depending on direction */ - int dir3; /* 3*dir, for advancing inptr & errorptr */ - int row; - JDIMENSION col; - JDIMENSION width = cinfo->output_width; - JSAMPLE *range_limit = cinfo->sample_range_limit; - int *error_limit = cquantize->error_limiter; - JSAMPROW colormap0 = cinfo->colormap[0]; - JSAMPROW colormap1 = cinfo->colormap[1]; - JSAMPROW colormap2 = cinfo->colormap[2]; - SHIFT_TEMPS - - for (row = 0; row < num_rows; row++) { - inptr = input_buf[row]; - outptr = output_buf[row]; - if (cquantize->on_odd_row) { - /* work right to left in this row */ - inptr += (width-1) * 3; /* so point to rightmost pixel */ - outptr += width-1; - dir = -1; - dir3 = -3; - errorptr = cquantize->fserrors + (width+1)*3; /* => entry after last column */ - cquantize->on_odd_row = FALSE; /* flip for next time */ - } else { - /* work left to right in this row */ - dir = 1; - dir3 = 3; - errorptr = cquantize->fserrors; /* => entry before first real column */ - cquantize->on_odd_row = TRUE; /* flip for next time */ - } - /* Preset error values: no error propagated to first pixel from left */ - cur0 = cur1 = cur2 = 0; - /* and no error propagated to row below yet */ - belowerr0 = belowerr1 = belowerr2 = 0; - bpreverr0 = bpreverr1 = bpreverr2 = 0; - - for (col = width; col > 0; col--) { - /* curN holds the error propagated from the previous pixel on the - * current line. Add the error propagated from the previous line - * to form the complete error correction term for this pixel, and - * round the error term (which is expressed * 16) to an integer. - * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct - * for either sign of the error value. - * Note: errorptr points to *previous* column's array entry. - */ - cur0 = RIGHT_SHIFT(cur0 + errorptr[dir3+0] + 8, 4); - cur1 = RIGHT_SHIFT(cur1 + errorptr[dir3+1] + 8, 4); - cur2 = RIGHT_SHIFT(cur2 + errorptr[dir3+2] + 8, 4); - /* Limit the error using transfer function set by init_error_limit. - * See comments with init_error_limit for rationale. - */ - cur0 = error_limit[cur0]; - cur1 = error_limit[cur1]; - cur2 = error_limit[cur2]; - /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE. - * The maximum error is +- MAXJSAMPLE (or less with error limiting); - * this sets the required size of the range_limit array. - */ - cur0 += GETJSAMPLE(inptr[0]); - cur1 += GETJSAMPLE(inptr[1]); - cur2 += GETJSAMPLE(inptr[2]); - cur0 = GETJSAMPLE(range_limit[cur0]); - cur1 = GETJSAMPLE(range_limit[cur1]); - cur2 = GETJSAMPLE(range_limit[cur2]); - /* Index into the cache with adjusted pixel value */ - cachep = & histogram[cur0>>C0_SHIFT][cur1>>C1_SHIFT][cur2>>C2_SHIFT]; - /* If we have not seen this color before, find nearest colormap */ - /* entry and update the cache */ - if (*cachep == 0) - fill_inverse_cmap(cinfo, cur0>>C0_SHIFT,cur1>>C1_SHIFT,cur2>>C2_SHIFT); - /* Now emit the colormap index for this cell */ - { register int pixcode = *cachep - 1; - *outptr = (JSAMPLE) pixcode; - /* Compute representation error for this pixel */ - cur0 -= GETJSAMPLE(colormap0[pixcode]); - cur1 -= GETJSAMPLE(colormap1[pixcode]); - cur2 -= GETJSAMPLE(colormap2[pixcode]); - } - /* Compute error fractions to be propagated to adjacent pixels. - * Add these into the running sums, and simultaneously shift the - * next-line error sums left by 1 column. - */ - { register LOCFSERROR bnexterr, delta; - - bnexterr = cur0; /* Process component 0 */ - delta = cur0 * 2; - cur0 += delta; /* form error * 3 */ - errorptr[0] = (FSERROR) (bpreverr0 + cur0); - cur0 += delta; /* form error * 5 */ - bpreverr0 = belowerr0 + cur0; - belowerr0 = bnexterr; - cur0 += delta; /* form error * 7 */ - bnexterr = cur1; /* Process component 1 */ - delta = cur1 * 2; - cur1 += delta; /* form error * 3 */ - errorptr[1] = (FSERROR) (bpreverr1 + cur1); - cur1 += delta; /* form error * 5 */ - bpreverr1 = belowerr1 + cur1; - belowerr1 = bnexterr; - cur1 += delta; /* form error * 7 */ - bnexterr = cur2; /* Process component 2 */ - delta = cur2 * 2; - cur2 += delta; /* form error * 3 */ - errorptr[2] = (FSERROR) (bpreverr2 + cur2); - cur2 += delta; /* form error * 5 */ - bpreverr2 = belowerr2 + cur2; - belowerr2 = bnexterr; - cur2 += delta; /* form error * 7 */ - } - /* At this point curN contains the 7/16 error value to be propagated - * to the next pixel on the current line, and all the errors for the - * next line have been shifted over. We are therefore ready to move on. - */ - inptr += dir3; /* Advance pixel pointers to next column */ - outptr += dir; - errorptr += dir3; /* advance errorptr to current column */ - } - /* Post-loop cleanup: we must unload the final error values into the - * final fserrors[] entry. Note we need not unload belowerrN because - * it is for the dummy column before or after the actual array. - */ - errorptr[0] = (FSERROR) bpreverr0; /* unload prev errs into array */ - errorptr[1] = (FSERROR) bpreverr1; - errorptr[2] = (FSERROR) bpreverr2; - } -} - - -/* - * Initialize the error-limiting transfer function (lookup table). - * The raw F-S error computation can potentially compute error values of up to - * +- MAXJSAMPLE. But we want the maximum correction applied to a pixel to be - * much less, otherwise obviously wrong pixels will be created. (Typical - * effects include weird fringes at color-area boundaries, isolated bright - * pixels in a dark area, etc.) The standard advice for avoiding this problem - * is to ensure that the "corners" of the color cube are allocated as output - * colors; then repeated errors in the same direction cannot cause cascading - * error buildup. However, that only prevents the error from getting - * completely out of hand; Aaron Giles reports that error limiting improves - * the results even with corner colors allocated. - * A simple clamping of the error values to about +- MAXJSAMPLE/8 works pretty - * well, but the smoother transfer function used below is even better. Thanks - * to Aaron Giles for this idea. - */ - -LOCAL(void) -init_error_limit (j_decompress_ptr cinfo) -/* Allocate and fill in the error_limiter table */ -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - int * table; - int in, out; - - table = (int *) (*cinfo->mem->alloc_small) - ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE*2+1) * SIZEOF(int)); - table += MAXJSAMPLE; /* so can index -MAXJSAMPLE .. +MAXJSAMPLE */ - cquantize->error_limiter = table; - -#define STEPSIZE ((MAXJSAMPLE+1)/16) - /* Map errors 1:1 up to +- MAXJSAMPLE/16 */ - out = 0; - for (in = 0; in < STEPSIZE; in++, out++) { - table[in] = out; table[-in] = -out; - } - /* Map errors 1:2 up to +- 3*MAXJSAMPLE/16 */ - for (; in < STEPSIZE*3; in++, out += (in&1) ? 0 : 1) { - table[in] = out; table[-in] = -out; - } - /* Clamp the rest to final out value (which is (MAXJSAMPLE+1)/8) */ - for (; in <= MAXJSAMPLE; in++) { - table[in] = out; table[-in] = -out; - } -#undef STEPSIZE -} - - -/* - * Finish up at the end of each pass. - */ - -METHODDEF(void) -finish_pass1 (j_decompress_ptr cinfo) -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - - /* Select the representative colors and fill in cinfo->colormap */ - cinfo->colormap = cquantize->sv_colormap; - select_colors(cinfo, cquantize->desired); - /* Force next pass to zero the color index table */ - cquantize->needs_zeroed = TRUE; -} - - -METHODDEF(void) -finish_pass2 (j_decompress_ptr cinfo) -{ - /* no work */ -} - - -/* - * Initialize for each processing pass. - */ - -METHODDEF(void) -start_pass_2_quant (j_decompress_ptr cinfo, boolean is_pre_scan) -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - hist3d histogram = cquantize->histogram; - int i; - - /* Only F-S dithering or no dithering is supported. */ - /* If user asks for ordered dither, give him F-S. */ - if (cinfo->dither_mode != JDITHER_NONE) - cinfo->dither_mode = JDITHER_FS; - - if (is_pre_scan) { - /* Set up method pointers */ - cquantize->pub.color_quantize = prescan_quantize; - cquantize->pub.finish_pass = finish_pass1; - cquantize->needs_zeroed = TRUE; /* Always zero histogram */ - } else { - /* Set up method pointers */ - if (cinfo->dither_mode == JDITHER_FS) - cquantize->pub.color_quantize = pass2_fs_dither; - else - cquantize->pub.color_quantize = pass2_no_dither; - cquantize->pub.finish_pass = finish_pass2; - - /* Make sure color count is acceptable */ - i = cinfo->actual_number_of_colors; - if (i < 1) - ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 1); - if (i > MAXNUMCOLORS) - ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS); - - if (cinfo->dither_mode == JDITHER_FS) { - size_t arraysize = (size_t) ((cinfo->output_width + 2) * - (3 * SIZEOF(FSERROR))); - /* Allocate Floyd-Steinberg workspace if we didn't already. */ - if (cquantize->fserrors == NULL) - cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large) - ((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize); - /* Initialize the propagated errors to zero. */ - jzero_far((void FAR *) cquantize->fserrors, arraysize); - /* Make the error-limit table if we didn't already. */ - if (cquantize->error_limiter == NULL) - init_error_limit(cinfo); - cquantize->on_odd_row = FALSE; - } - - } - /* Zero the histogram or inverse color map, if necessary */ - if (cquantize->needs_zeroed) { - for (i = 0; i < HIST_C0_ELEMS; i++) { - jzero_far((void FAR *) histogram[i], - HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell)); - } - cquantize->needs_zeroed = FALSE; - } -} - - -/* - * Switch to a new external colormap between output passes. - */ - -METHODDEF(void) -new_color_map_2_quant (j_decompress_ptr cinfo) -{ - my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; - - /* Reset the inverse color map */ - cquantize->needs_zeroed = TRUE; -} - - -/* - * Module initialization routine for 2-pass color quantization. - */ - -GLOBAL(void) -jinit_2pass_quantizer (j_decompress_ptr cinfo) -{ - my_cquantize_ptr cquantize; - int i; - - cquantize = (my_cquantize_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_cquantizer)); - cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize; - cquantize->pub.start_pass = start_pass_2_quant; - cquantize->pub.new_color_map = new_color_map_2_quant; - cquantize->fserrors = NULL; /* flag optional arrays not allocated */ - cquantize->error_limiter = NULL; - - /* Make sure jdmaster didn't give me a case I can't handle */ - if (cinfo->out_color_components != 3) - ERREXIT(cinfo, JERR_NOTIMPL); - - /* Allocate the histogram/inverse colormap storage */ - cquantize->histogram = (hist3d) (*cinfo->mem->alloc_small) - ((j_common_ptr) cinfo, JPOOL_IMAGE, HIST_C0_ELEMS * SIZEOF(hist2d)); - for (i = 0; i < HIST_C0_ELEMS; i++) { - cquantize->histogram[i] = (hist2d) (*cinfo->mem->alloc_large) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell)); - } - cquantize->needs_zeroed = TRUE; /* histogram is garbage now */ - - /* Allocate storage for the completed colormap, if required. - * We do this now since it is FAR storage and may affect - * the memory manager's space calculations. - */ - if (cinfo->enable_2pass_quant) { - /* Make sure color count is acceptable */ - int desired = cinfo->desired_number_of_colors; - /* Lower bound on # of colors ... somewhat arbitrary as long as > 0 */ - if (desired < 8) - ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 8); - /* Make sure colormap indexes can be represented by JSAMPLEs */ - if (desired > MAXNUMCOLORS) - ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS); - cquantize->sv_colormap = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo,JPOOL_IMAGE, (JDIMENSION) desired, (JDIMENSION) 3); - cquantize->desired = desired; - } else - cquantize->sv_colormap = NULL; - - /* Only F-S dithering or no dithering is supported. */ - /* If user asks for ordered dither, give him F-S. */ - if (cinfo->dither_mode != JDITHER_NONE) - cinfo->dither_mode = JDITHER_FS; - - /* Allocate Floyd-Steinberg workspace if necessary. - * This isn't really needed until pass 2, but again it is FAR storage. - * Although we will cope with a later change in dither_mode, - * we do not promise to honor max_memory_to_use if dither_mode changes. - */ - if (cinfo->dither_mode == JDITHER_FS) { - cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) ((cinfo->output_width + 2) * (3 * SIZEOF(FSERROR)))); - /* Might as well create the error-limiting table too. */ - init_error_limit(cinfo); - } -} - -#endif /* QUANT_2PASS_SUPPORTED */ diff --git a/Build/source/libs/jpeg/jutils.c b/Build/source/libs/jpeg/jutils.c deleted file mode 100644 index d18a9555621..00000000000 --- a/Build/source/libs/jpeg/jutils.c +++ /dev/null @@ -1,179 +0,0 @@ -/* - * jutils.c - * - * Copyright (C) 1991-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains tables and miscellaneous utility routines needed - * for both compression and decompression. - * Note we prefix all global names with "j" to minimize conflicts with - * a surrounding application. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* - * jpeg_zigzag_order[i] is the zigzag-order position of the i'th element - * of a DCT block read in natural order (left to right, top to bottom). - */ - -#if 0 /* This table is not actually needed in v6a */ - -const int jpeg_zigzag_order[DCTSIZE2] = { - 0, 1, 5, 6, 14, 15, 27, 28, - 2, 4, 7, 13, 16, 26, 29, 42, - 3, 8, 12, 17, 25, 30, 41, 43, - 9, 11, 18, 24, 31, 40, 44, 53, - 10, 19, 23, 32, 39, 45, 52, 54, - 20, 22, 33, 38, 46, 51, 55, 60, - 21, 34, 37, 47, 50, 56, 59, 61, - 35, 36, 48, 49, 57, 58, 62, 63 -}; - -#endif - -/* - * jpeg_natural_order[i] is the natural-order position of the i'th element - * of zigzag order. - * - * When reading corrupted data, the Huffman decoders could attempt - * to reference an entry beyond the end of this array (if the decoded - * zero run length reaches past the end of the block). To prevent - * wild stores without adding an inner-loop test, we put some extra - * "63"s after the real entries. This will cause the extra coefficient - * to be stored in location 63 of the block, not somewhere random. - * The worst case would be a run-length of 15, which means we need 16 - * fake entries. - */ - -const int jpeg_natural_order[DCTSIZE2+16] = { - 0, 1, 8, 16, 9, 2, 3, 10, - 17, 24, 32, 25, 18, 11, 4, 5, - 12, 19, 26, 33, 40, 48, 41, 34, - 27, 20, 13, 6, 7, 14, 21, 28, - 35, 42, 49, 56, 57, 50, 43, 36, - 29, 22, 15, 23, 30, 37, 44, 51, - 58, 59, 52, 45, 38, 31, 39, 46, - 53, 60, 61, 54, 47, 55, 62, 63, - 63, 63, 63, 63, 63, 63, 63, 63, /* extra entries for safety in decoder */ - 63, 63, 63, 63, 63, 63, 63, 63 -}; - - -/* - * Arithmetic utilities - */ - -GLOBAL(long) -jdiv_round_up (long a, long b) -/* Compute a/b rounded up to next integer, ie, ceil(a/b) */ -/* Assumes a >= 0, b > 0 */ -{ - return (a + b - 1L) / b; -} - - -GLOBAL(long) -jround_up (long a, long b) -/* Compute a rounded up to next multiple of b, ie, ceil(a/b)*b */ -/* Assumes a >= 0, b > 0 */ -{ - a += b - 1L; - return a - (a % b); -} - - -/* On normal machines we can apply MEMCOPY() and MEMZERO() to sample arrays - * and coefficient-block arrays. This won't work on 80x86 because the arrays - * are FAR and we're assuming a small-pointer memory model. However, some - * DOS compilers provide far-pointer versions of memcpy() and memset() even - * in the small-model libraries. These will be used if USE_FMEM is defined. - * Otherwise, the routines below do it the hard way. (The performance cost - * is not all that great, because these routines aren't very heavily used.) - */ - -#ifndef NEED_FAR_POINTERS /* normal case, same as regular macros */ -#define FMEMCOPY(dest,src,size) MEMCOPY(dest,src,size) -#define FMEMZERO(target,size) MEMZERO(target,size) -#else /* 80x86 case, define if we can */ -#ifdef USE_FMEM -#define FMEMCOPY(dest,src,size) _fmemcpy((void FAR *)(dest), (const void FAR *)(src), (size_t)(size)) -#define FMEMZERO(target,size) _fmemset((void FAR *)(target), 0, (size_t)(size)) -#endif -#endif - - -GLOBAL(void) -jcopy_sample_rows (JSAMPARRAY input_array, int source_row, - JSAMPARRAY output_array, int dest_row, - int num_rows, JDIMENSION num_cols) -/* Copy some rows of samples from one place to another. - * num_rows rows are copied from input_array[source_row++] - * to output_array[dest_row++]; these areas may overlap for duplication. - * The source and destination arrays must be at least as wide as num_cols. - */ -{ - register JSAMPROW inptr, outptr; -#ifdef FMEMCOPY - register size_t count = (size_t) (num_cols * SIZEOF(JSAMPLE)); -#else - register JDIMENSION count; -#endif - register int row; - - input_array += source_row; - output_array += dest_row; - - for (row = num_rows; row > 0; row--) { - inptr = *input_array++; - outptr = *output_array++; -#ifdef FMEMCOPY - FMEMCOPY(outptr, inptr, count); -#else - for (count = num_cols; count > 0; count--) - *outptr++ = *inptr++; /* needn't bother with GETJSAMPLE() here */ -#endif - } -} - - -GLOBAL(void) -jcopy_block_row (JBLOCKROW input_row, JBLOCKROW output_row, - JDIMENSION num_blocks) -/* Copy a row of coefficient blocks from one place to another. */ -{ -#ifdef FMEMCOPY - FMEMCOPY(output_row, input_row, num_blocks * (DCTSIZE2 * SIZEOF(JCOEF))); -#else - register JCOEFPTR inptr, outptr; - register long count; - - inptr = (JCOEFPTR) input_row; - outptr = (JCOEFPTR) output_row; - for (count = (long) num_blocks * DCTSIZE2; count > 0; count--) { - *outptr++ = *inptr++; - } -#endif -} - - -GLOBAL(void) -jzero_far (void FAR * target, size_t bytestozero) -/* Zero out a chunk of FAR memory. */ -/* This might be sample-array data, block-array data, or alloc_large data. */ -{ -#ifdef FMEMZERO - FMEMZERO(target, bytestozero); -#else - register char FAR * ptr = (char FAR *) target; - register size_t count; - - for (count = bytestozero; count > 0; count--) { - *ptr++ = 0; - } -#endif -} diff --git a/Build/source/libs/jpeg/jversion.h b/Build/source/libs/jpeg/jversion.h deleted file mode 100644 index 6472c58d351..00000000000 --- a/Build/source/libs/jpeg/jversion.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * jversion.h - * - * Copyright (C) 1991-1998, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains software version identification. - */ - - -#define JVERSION "6b 27-Mar-1998" - -#define JCOPYRIGHT "Copyright (C) 1998, Thomas G. Lane" diff --git a/Build/source/libs/jpeg/libjpeg.doc b/Build/source/libs/jpeg/libjpeg.doc deleted file mode 100644 index 689b206c07f..00000000000 --- a/Build/source/libs/jpeg/libjpeg.doc +++ /dev/null @@ -1,3006 +0,0 @@ -USING THE IJG JPEG LIBRARY - -Copyright (C) 1994-1998, Thomas G. Lane. -This file is part of the Independent JPEG Group's software. -For conditions of distribution and use, see the accompanying README file. - - -This file describes how to use the IJG JPEG library within an application -program. Read it if you want to write a program that uses the library. - -The file example.c provides heavily commented skeleton code for calling the -JPEG library. Also see jpeglib.h (the include file to be used by application -programs) for full details about data structures and function parameter lists. -The library source code, of course, is the ultimate reference. - -Note that there have been *major* changes from the application interface -presented by IJG version 4 and earlier versions. The old design had several -inherent limitations, and it had accumulated a lot of cruft as we added -features while trying to minimize application-interface changes. We have -sacrificed backward compatibility in the version 5 rewrite, but we think the -improvements justify this. - - -TABLE OF CONTENTS ------------------ - -Overview: - Functions provided by the library - Outline of typical usage -Basic library usage: - Data formats - Compression details - Decompression details - Mechanics of usage: include files, linking, etc -Advanced features: - Compression parameter selection - Decompression parameter selection - Special color spaces - Error handling - Compressed data handling (source and destination managers) - I/O suspension - Progressive JPEG support - Buffered-image mode - Abbreviated datastreams and multiple images - Special markers - Raw (downsampled) image data - Really raw data: DCT coefficients - Progress monitoring - Memory management - Memory usage - Library compile-time options - Portability considerations - Notes for MS-DOS implementors - -You should read at least the overview and basic usage sections before trying -to program with the library. The sections on advanced features can be read -if and when you need them. - - -OVERVIEW -======== - -Functions provided by the library ---------------------------------- - -The IJG JPEG library provides C code to read and write JPEG-compressed image -files. The surrounding application program receives or supplies image data a -scanline at a time, using a straightforward uncompressed image format. All -details of color conversion and other preprocessing/postprocessing can be -handled by the library. - -The library includes a substantial amount of code that is not covered by the -JPEG standard but is necessary for typical applications of JPEG. These -functions preprocess the image before JPEG compression or postprocess it after -decompression. They include colorspace conversion, downsampling/upsampling, -and color quantization. The application indirectly selects use of this code -by specifying the format in which it wishes to supply or receive image data. -For example, if colormapped output is requested, then the decompression -library automatically invokes color quantization. - -A wide range of quality vs. speed tradeoffs are possible in JPEG processing, -and even more so in decompression postprocessing. The decompression library -provides multiple implementations that cover most of the useful tradeoffs, -ranging from very-high-quality down to fast-preview operation. On the -compression side we have generally not provided low-quality choices, since -compression is normally less time-critical. It should be understood that the -low-quality modes may not meet the JPEG standard's accuracy requirements; -nonetheless, they are useful for viewers. - -A word about functions *not* provided by the library. We handle a subset of -the ISO JPEG standard; most baseline, extended-sequential, and progressive -JPEG processes are supported. (Our subset includes all features now in common -use.) Unsupported ISO options include: - * Hierarchical storage - * Lossless JPEG - * Arithmetic entropy coding (unsupported for legal reasons) - * DNL marker - * Nonintegral subsampling ratios -We support both 8- and 12-bit data precision, but this is a compile-time -choice rather than a run-time choice; hence it is difficult to use both -precisions in a single application. - -By itself, the library handles only interchange JPEG datastreams --- in -particular the widely used JFIF file format. The library can be used by -surrounding code to process interchange or abbreviated JPEG datastreams that -are embedded in more complex file formats. (For example, this library is -used by the free LIBTIFF library to support JPEG compression in TIFF.) - - -Outline of typical usage ------------------------- - -The rough outline of a JPEG compression operation is: - - Allocate and initialize a JPEG compression object - Specify the destination for the compressed data (eg, a file) - Set parameters for compression, including image size & colorspace - jpeg_start_compress(...); - while (scan lines remain to be written) - jpeg_write_scanlines(...); - jpeg_finish_compress(...); - Release the JPEG compression object - -A JPEG compression object holds parameters and working state for the JPEG -library. We make creation/destruction of the object separate from starting -or finishing compression of an image; the same object can be re-used for a -series of image compression operations. This makes it easy to re-use the -same parameter settings for a sequence of images. Re-use of a JPEG object -also has important implications for processing abbreviated JPEG datastreams, -as discussed later. - -The image data to be compressed is supplied to jpeg_write_scanlines() from -in-memory buffers. If the application is doing file-to-file compression, -reading image data from the source file is the application's responsibility. -The library emits compressed data by calling a "data destination manager", -which typically will write the data into a file; but the application can -provide its own destination manager to do something else. - -Similarly, the rough outline of a JPEG decompression operation is: - - Allocate and initialize a JPEG decompression object - Specify the source of the compressed data (eg, a file) - Call jpeg_read_header() to obtain image info - Set parameters for decompression - jpeg_start_decompress(...); - while (scan lines remain to be read) - jpeg_read_scanlines(...); - jpeg_finish_decompress(...); - Release the JPEG decompression object - -This is comparable to the compression outline except that reading the -datastream header is a separate step. This is helpful because information -about the image's size, colorspace, etc is available when the application -selects decompression parameters. For example, the application can choose an -output scaling ratio that will fit the image into the available screen size. - -The decompression library obtains compressed data by calling a data source -manager, which typically will read the data from a file; but other behaviors -can be obtained with a custom source manager. Decompressed data is delivered -into in-memory buffers passed to jpeg_read_scanlines(). - -It is possible to abort an incomplete compression or decompression operation -by calling jpeg_abort(); or, if you do not need to retain the JPEG object, -simply release it by calling jpeg_destroy(). - -JPEG compression and decompression objects are two separate struct types. -However, they share some common fields, and certain routines such as -jpeg_destroy() can work on either type of object. - -The JPEG library has no static variables: all state is in the compression -or decompression object. Therefore it is possible to process multiple -compression and decompression operations concurrently, using multiple JPEG -objects. - -Both compression and decompression can be done in an incremental memory-to- -memory fashion, if suitable source/destination managers are used. See the -section on "I/O suspension" for more details. - - -BASIC LIBRARY USAGE -=================== - -Data formats ------------- - -Before diving into procedural details, it is helpful to understand the -image data format that the JPEG library expects or returns. - -The standard input image format is a rectangular array of pixels, with each -pixel having the same number of "component" or "sample" values (color -channels). You must specify how many components there are and the colorspace -interpretation of the components. Most applications will use RGB data -(three components per pixel) or grayscale data (one component per pixel). -PLEASE NOTE THAT RGB DATA IS THREE SAMPLES PER PIXEL, GRAYSCALE ONLY ONE. -A remarkable number of people manage to miss this, only to find that their -programs don't work with grayscale JPEG files. - -There is no provision for colormapped input. JPEG files are always full-color -or full grayscale (or sometimes another colorspace such as CMYK). You can -feed in a colormapped image by expanding it to full-color format. However -JPEG often doesn't work very well with source data that has been colormapped, -because of dithering noise. This is discussed in more detail in the JPEG FAQ -and the other references mentioned in the README file. - -Pixels are stored by scanlines, with each scanline running from left to -right. The component values for each pixel are adjacent in the row; for -example, R,G,B,R,G,B,R,G,B,... for 24-bit RGB color. Each scanline is an -array of data type JSAMPLE --- which is typically "unsigned char", unless -you've changed jmorecfg.h. (You can also change the RGB pixel layout, say -to B,G,R order, by modifying jmorecfg.h. But see the restrictions listed in -that file before doing so.) - -A 2-D array of pixels is formed by making a list of pointers to the starts of -scanlines; so the scanlines need not be physically adjacent in memory. Even -if you process just one scanline at a time, you must make a one-element -pointer array to conform to this structure. Pointers to JSAMPLE rows are of -type JSAMPROW, and the pointer to the pointer array is of type JSAMPARRAY. - -The library accepts or supplies one or more complete scanlines per call. -It is not possible to process part of a row at a time. Scanlines are always -processed top-to-bottom. You can process an entire image in one call if you -have it all in memory, but usually it's simplest to process one scanline at -a time. - -For best results, source data values should have the precision specified by -BITS_IN_JSAMPLE (normally 8 bits). For instance, if you choose to compress -data that's only 6 bits/channel, you should left-justify each value in a -byte before passing it to the compressor. If you need to compress data -that has more than 8 bits/channel, compile with BITS_IN_JSAMPLE = 12. -(See "Library compile-time options", later.) - - -The data format returned by the decompressor is the same in all details, -except that colormapped output is supported. (Again, a JPEG file is never -colormapped. But you can ask the decompressor to perform on-the-fly color -quantization to deliver colormapped output.) If you request colormapped -output then the returned data array contains a single JSAMPLE per pixel; -its value is an index into a color map. The color map is represented as -a 2-D JSAMPARRAY in which each row holds the values of one color component, -that is, colormap[i][j] is the value of the i'th color component for pixel -value (map index) j. Note that since the colormap indexes are stored in -JSAMPLEs, the maximum number of colors is limited by the size of JSAMPLE -(ie, at most 256 colors for an 8-bit JPEG library). - - -Compression details -------------------- - -Here we revisit the JPEG compression outline given in the overview. - -1. Allocate and initialize a JPEG compression object. - -A JPEG compression object is a "struct jpeg_compress_struct". (It also has -a bunch of subsidiary structures which are allocated via malloc(), but the -application doesn't control those directly.) This struct can be just a local -variable in the calling routine, if a single routine is going to execute the -whole JPEG compression sequence. Otherwise it can be static or allocated -from malloc(). - -You will also need a structure representing a JPEG error handler. The part -of this that the library cares about is a "struct jpeg_error_mgr". If you -are providing your own error handler, you'll typically want to embed the -jpeg_error_mgr struct in a larger structure; this is discussed later under -"Error handling". For now we'll assume you are just using the default error -handler. The default error handler will print JPEG error/warning messages -on stderr, and it will call exit() if a fatal error occurs. - -You must initialize the error handler structure, store a pointer to it into -the JPEG object's "err" field, and then call jpeg_create_compress() to -initialize the rest of the JPEG object. - -Typical code for this step, if you are using the default error handler, is - - struct jpeg_compress_struct cinfo; - struct jpeg_error_mgr jerr; - ... - cinfo.err = jpeg_std_error(&jerr); - jpeg_create_compress(&cinfo); - -jpeg_create_compress allocates a small amount of memory, so it could fail -if you are out of memory. In that case it will exit via the error handler; -that's why the error handler must be initialized first. - - -2. Specify the destination for the compressed data (eg, a file). - -As previously mentioned, the JPEG library delivers compressed data to a -"data destination" module. The library includes one data destination -module which knows how to write to a stdio stream. You can use your own -destination module if you want to do something else, as discussed later. - -If you use the standard destination module, you must open the target stdio -stream beforehand. Typical code for this step looks like: - - FILE * outfile; - ... - if ((outfile = fopen(filename, "wb")) == NULL) { - fprintf(stderr, "can't open %s\n", filename); - exit(1); - } - jpeg_stdio_dest(&cinfo, outfile); - -where the last line invokes the standard destination module. - -WARNING: it is critical that the binary compressed data be delivered to the -output file unchanged. On non-Unix systems the stdio library may perform -newline translation or otherwise corrupt binary data. To suppress this -behavior, you may need to use a "b" option to fopen (as shown above), or use -setmode() or another routine to put the stdio stream in binary mode. See -cjpeg.c and djpeg.c for code that has been found to work on many systems. - -You can select the data destination after setting other parameters (step 3), -if that's more convenient. You may not change the destination between -calling jpeg_start_compress() and jpeg_finish_compress(). - - -3. Set parameters for compression, including image size & colorspace. - -You must supply information about the source image by setting the following -fields in the JPEG object (cinfo structure): - - image_width Width of image, in pixels - image_height Height of image, in pixels - input_components Number of color channels (samples per pixel) - in_color_space Color space of source image - -The image dimensions are, hopefully, obvious. JPEG supports image dimensions -of 1 to 64K pixels in either direction. The input color space is typically -RGB or grayscale, and input_components is 3 or 1 accordingly. (See "Special -color spaces", later, for more info.) The in_color_space field must be -assigned one of the J_COLOR_SPACE enum constants, typically JCS_RGB or -JCS_GRAYSCALE. - -JPEG has a large number of compression parameters that determine how the -image is encoded. Most applications don't need or want to know about all -these parameters. You can set all the parameters to reasonable defaults by -calling jpeg_set_defaults(); then, if there are particular values you want -to change, you can do so after that. The "Compression parameter selection" -section tells about all the parameters. - -You must set in_color_space correctly before calling jpeg_set_defaults(), -because the defaults depend on the source image colorspace. However the -other three source image parameters need not be valid until you call -jpeg_start_compress(). There's no harm in calling jpeg_set_defaults() more -than once, if that happens to be convenient. - -Typical code for a 24-bit RGB source image is - - cinfo.image_width = Width; /* image width and height, in pixels */ - cinfo.image_height = Height; - cinfo.input_components = 3; /* # of color components per pixel */ - cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ - - jpeg_set_defaults(&cinfo); - /* Make optional parameter settings here */ - - -4. jpeg_start_compress(...); - -After you have established the data destination and set all the necessary -source image info and other parameters, call jpeg_start_compress() to begin -a compression cycle. This will initialize internal state, allocate working -storage, and emit the first few bytes of the JPEG datastream header. - -Typical code: - - jpeg_start_compress(&cinfo, TRUE); - -The "TRUE" parameter ensures that a complete JPEG interchange datastream -will be written. This is appropriate in most cases. If you think you might -want to use an abbreviated datastream, read the section on abbreviated -datastreams, below. - -Once you have called jpeg_start_compress(), you may not alter any JPEG -parameters or other fields of the JPEG object until you have completed -the compression cycle. - - -5. while (scan lines remain to be written) - jpeg_write_scanlines(...); - -Now write all the required image data by calling jpeg_write_scanlines() -one or more times. You can pass one or more scanlines in each call, up -to the total image height. In most applications it is convenient to pass -just one or a few scanlines at a time. The expected format for the passed -data is discussed under "Data formats", above. - -Image data should be written in top-to-bottom scanline order. The JPEG spec -contains some weasel wording about how top and bottom are application-defined -terms (a curious interpretation of the English language...) but if you want -your files to be compatible with everyone else's, you WILL use top-to-bottom -order. If the source data must be read in bottom-to-top order, you can use -the JPEG library's virtual array mechanism to invert the data efficiently. -Examples of this can be found in the sample application cjpeg. - -The library maintains a count of the number of scanlines written so far -in the next_scanline field of the JPEG object. Usually you can just use -this variable as the loop counter, so that the loop test looks like -"while (cinfo.next_scanline < cinfo.image_height)". - -Code for this step depends heavily on the way that you store the source data. -example.c shows the following code for the case of a full-size 2-D source -array containing 3-byte RGB pixels: - - JSAMPROW row_pointer[1]; /* pointer to a single row */ - int row_stride; /* physical row width in buffer */ - - row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */ - - while (cinfo.next_scanline < cinfo.image_height) { - row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride]; - jpeg_write_scanlines(&cinfo, row_pointer, 1); - } - -jpeg_write_scanlines() returns the number of scanlines actually written. -This will normally be equal to the number passed in, so you can usually -ignore the return value. It is different in just two cases: - * If you try to write more scanlines than the declared image height, - the additional scanlines are ignored. - * If you use a suspending data destination manager, output buffer overrun - will cause the compressor to return before accepting all the passed lines. - This feature is discussed under "I/O suspension", below. The normal - stdio destination manager will NOT cause this to happen. -In any case, the return value is the same as the change in the value of -next_scanline. - - -6. jpeg_finish_compress(...); - -After all the image data has been written, call jpeg_finish_compress() to -complete the compression cycle. This step is ESSENTIAL to ensure that the -last bufferload of data is written to the data destination. -jpeg_finish_compress() also releases working memory associated with the JPEG -object. - -Typical code: - - jpeg_finish_compress(&cinfo); - -If using the stdio destination manager, don't forget to close the output -stdio stream (if necessary) afterwards. - -If you have requested a multi-pass operating mode, such as Huffman code -optimization, jpeg_finish_compress() will perform the additional passes using -data buffered by the first pass. In this case jpeg_finish_compress() may take -quite a while to complete. With the default compression parameters, this will -not happen. - -It is an error to call jpeg_finish_compress() before writing the necessary -total number of scanlines. If you wish to abort compression, call -jpeg_abort() as discussed below. - -After completing a compression cycle, you may dispose of the JPEG object -as discussed next, or you may use it to compress another image. In that case -return to step 2, 3, or 4 as appropriate. If you do not change the -destination manager, the new datastream will be written to the same target. -If you do not change any JPEG parameters, the new datastream will be written -with the same parameters as before. Note that you can change the input image -dimensions freely between cycles, but if you change the input colorspace, you -should call jpeg_set_defaults() to adjust for the new colorspace; and then -you'll need to repeat all of step 3. - - -7. Release the JPEG compression object. - -When you are done with a JPEG compression object, destroy it by calling -jpeg_destroy_compress(). This will free all subsidiary memory (regardless of -the previous state of the object). Or you can call jpeg_destroy(), which -works for either compression or decompression objects --- this may be more -convenient if you are sharing code between compression and decompression -cases. (Actually, these routines are equivalent except for the declared type -of the passed pointer. To avoid gripes from ANSI C compilers, jpeg_destroy() -should be passed a j_common_ptr.) - -If you allocated the jpeg_compress_struct structure from malloc(), freeing -it is your responsibility --- jpeg_destroy() won't. Ditto for the error -handler structure. - -Typical code: - - jpeg_destroy_compress(&cinfo); - - -8. Aborting. - -If you decide to abort a compression cycle before finishing, you can clean up -in either of two ways: - -* If you don't need the JPEG object any more, just call - jpeg_destroy_compress() or jpeg_destroy() to release memory. This is - legitimate at any point after calling jpeg_create_compress() --- in fact, - it's safe even if jpeg_create_compress() fails. - -* If you want to re-use the JPEG object, call jpeg_abort_compress(), or call - jpeg_abort() which works on both compression and decompression objects. - This will return the object to an idle state, releasing any working memory. - jpeg_abort() is allowed at any time after successful object creation. - -Note that cleaning up the data destination, if required, is your -responsibility; neither of these routines will call term_destination(). -(See "Compressed data handling", below, for more about that.) - -jpeg_destroy() and jpeg_abort() are the only safe calls to make on a JPEG -object that has reported an error by calling error_exit (see "Error handling" -for more info). The internal state of such an object is likely to be out of -whack. Either of these two routines will return the object to a known state. - - -Decompression details ---------------------- - -Here we revisit the JPEG decompression outline given in the overview. - -1. Allocate and initialize a JPEG decompression object. - -This is just like initialization for compression, as discussed above, -except that the object is a "struct jpeg_decompress_struct" and you -call jpeg_create_decompress(). Error handling is exactly the same. - -Typical code: - - struct jpeg_decompress_struct cinfo; - struct jpeg_error_mgr jerr; - ... - cinfo.err = jpeg_std_error(&jerr); - jpeg_create_decompress(&cinfo); - -(Both here and in the IJG code, we usually use variable name "cinfo" for -both compression and decompression objects.) - - -2. Specify the source of the compressed data (eg, a file). - -As previously mentioned, the JPEG library reads compressed data from a "data -source" module. The library includes one data source module which knows how -to read from a stdio stream. You can use your own source module if you want -to do something else, as discussed later. - -If you use the standard source module, you must open the source stdio stream -beforehand. Typical code for this step looks like: - - FILE * infile; - ... - if ((infile = fopen(filename, "rb")) == NULL) { - fprintf(stderr, "can't open %s\n", filename); - exit(1); - } - jpeg_stdio_src(&cinfo, infile); - -where the last line invokes the standard source module. - -WARNING: it is critical that the binary compressed data be read unchanged. -On non-Unix systems the stdio library may perform newline translation or -otherwise corrupt binary data. To suppress this behavior, you may need to use -a "b" option to fopen (as shown above), or use setmode() or another routine to -put the stdio stream in binary mode. See cjpeg.c and djpeg.c for code that -has been found to work on many systems. - -You may not change the data source between calling jpeg_read_header() and -jpeg_finish_decompress(). If you wish to read a series of JPEG images from -a single source file, you should repeat the jpeg_read_header() to -jpeg_finish_decompress() sequence without reinitializing either the JPEG -object or the data source module; this prevents buffered input data from -being discarded. - - -3. Call jpeg_read_header() to obtain image info. - -Typical code for this step is just - - jpeg_read_header(&cinfo, TRUE); - -This will read the source datastream header markers, up to the beginning -of the compressed data proper. On return, the image dimensions and other -info have been stored in the JPEG object. The application may wish to -consult this information before selecting decompression parameters. - -More complex code is necessary if - * A suspending data source is used --- in that case jpeg_read_header() - may return before it has read all the header data. See "I/O suspension", - below. The normal stdio source manager will NOT cause this to happen. - * Abbreviated JPEG files are to be processed --- see the section on - abbreviated datastreams. Standard applications that deal only in - interchange JPEG files need not be concerned with this case either. - -It is permissible to stop at this point if you just wanted to find out the -image dimensions and other header info for a JPEG file. In that case, -call jpeg_destroy() when you are done with the JPEG object, or call -jpeg_abort() to return it to an idle state before selecting a new data -source and reading another header. - - -4. Set parameters for decompression. - -jpeg_read_header() sets appropriate default decompression parameters based on -the properties of the image (in particular, its colorspace). However, you -may well want to alter these defaults before beginning the decompression. -For example, the default is to produce full color output from a color file. -If you want colormapped output you must ask for it. Other options allow the -returned image to be scaled and allow various speed/quality tradeoffs to be -selected. "Decompression parameter selection", below, gives details. - -If the defaults are appropriate, nothing need be done at this step. - -Note that all default values are set by each call to jpeg_read_header(). -If you reuse a decompression object, you cannot expect your parameter -settings to be preserved across cycles, as you can for compression. -You must set desired parameter values each time. - - -5. jpeg_start_decompress(...); - -Once the parameter values are satisfactory, call jpeg_start_decompress() to -begin decompression. This will initialize internal state, allocate working -memory, and prepare for returning data. - -Typical code is just - - jpeg_start_decompress(&cinfo); - -If you have requested a multi-pass operating mode, such as 2-pass color -quantization, jpeg_start_decompress() will do everything needed before data -output can begin. In this case jpeg_start_decompress() may take quite a while -to complete. With a single-scan (non progressive) JPEG file and default -decompression parameters, this will not happen; jpeg_start_decompress() will -return quickly. - -After this call, the final output image dimensions, including any requested -scaling, are available in the JPEG object; so is the selected colormap, if -colormapped output has been requested. Useful fields include - - output_width image width and height, as scaled - output_height - out_color_components # of color components in out_color_space - output_components # of color components returned per pixel - colormap the selected colormap, if any - actual_number_of_colors number of entries in colormap - -output_components is 1 (a colormap index) when quantizing colors; otherwise it -equals out_color_components. It is the number of JSAMPLE values that will be -emitted per pixel in the output arrays. - -Typically you will need to allocate data buffers to hold the incoming image. -You will need output_width * output_components JSAMPLEs per scanline in your -output buffer, and a total of output_height scanlines will be returned. - -Note: if you are using the JPEG library's internal memory manager to allocate -data buffers (as djpeg does), then the manager's protocol requires that you -request large buffers *before* calling jpeg_start_decompress(). This is a -little tricky since the output_XXX fields are not normally valid then. You -can make them valid by calling jpeg_calc_output_dimensions() after setting the -relevant parameters (scaling, output color space, and quantization flag). - - -6. while (scan lines remain to be read) - jpeg_read_scanlines(...); - -Now you can read the decompressed image data by calling jpeg_read_scanlines() -one or more times. At each call, you pass in the maximum number of scanlines -to be read (ie, the height of your working buffer); jpeg_read_scanlines() -will return up to that many lines. The return value is the number of lines -actually read. The format of the returned data is discussed under "Data -formats", above. Don't forget that grayscale and color JPEGs will return -different data formats! - -Image data is returned in top-to-bottom scanline order. If you must write -out the image in bottom-to-top order, you can use the JPEG library's virtual -array mechanism to invert the data efficiently. Examples of this can be -found in the sample application djpeg. - -The library maintains a count of the number of scanlines returned so far -in the output_scanline field of the JPEG object. Usually you can just use -this variable as the loop counter, so that the loop test looks like -"while (cinfo.output_scanline < cinfo.output_height)". (Note that the test -should NOT be against image_height, unless you never use scaling. The -image_height field is the height of the original unscaled image.) -The return value always equals the change in the value of output_scanline. - -If you don't use a suspending data source, it is safe to assume that -jpeg_read_scanlines() reads at least one scanline per call, until the -bottom of the image has been reached. - -If you use a buffer larger than one scanline, it is NOT safe to assume that -jpeg_read_scanlines() fills it. (The current implementation returns only a -few scanlines per call, no matter how large a buffer you pass.) So you must -always provide a loop that calls jpeg_read_scanlines() repeatedly until the -whole image has been read. - - -7. jpeg_finish_decompress(...); - -After all the image data has been read, call jpeg_finish_decompress() to -complete the decompression cycle. This causes working memory associated -with the JPEG object to be released. - -Typical code: - - jpeg_finish_decompress(&cinfo); - -If using the stdio source manager, don't forget to close the source stdio -stream if necessary. - -It is an error to call jpeg_finish_decompress() before reading the correct -total number of scanlines. If you wish to abort decompression, call -jpeg_abort() as discussed below. - -After completing a decompression cycle, you may dispose of the JPEG object as -discussed next, or you may use it to decompress another image. In that case -return to step 2 or 3 as appropriate. If you do not change the source -manager, the next image will be read from the same source. - - -8. Release the JPEG decompression object. - -When you are done with a JPEG decompression object, destroy it by calling -jpeg_destroy_decompress() or jpeg_destroy(). The previous discussion of -destroying compression objects applies here too. - -Typical code: - - jpeg_destroy_decompress(&cinfo); - - -9. Aborting. - -You can abort a decompression cycle by calling jpeg_destroy_decompress() or -jpeg_destroy() if you don't need the JPEG object any more, or -jpeg_abort_decompress() or jpeg_abort() if you want to reuse the object. -The previous discussion of aborting compression cycles applies here too. - - -Mechanics of usage: include files, linking, etc ------------------------------------------------ - -Applications using the JPEG library should include the header file jpeglib.h -to obtain declarations of data types and routines. Before including -jpeglib.h, include system headers that define at least the typedefs FILE and -size_t. On ANSI-conforming systems, including is sufficient; on -older Unix systems, you may need to define size_t. - -If the application needs to refer to individual JPEG library error codes, also -include jerror.h to define those symbols. - -jpeglib.h indirectly includes the files jconfig.h and jmorecfg.h. If you are -installing the JPEG header files in a system directory, you will want to -install all four files: jpeglib.h, jerror.h, jconfig.h, jmorecfg.h. - -The most convenient way to include the JPEG code into your executable program -is to prepare a library file ("libjpeg.a", or a corresponding name on non-Unix -machines) and reference it at your link step. If you use only half of the -library (only compression or only decompression), only that much code will be -included from the library, unless your linker is hopelessly brain-damaged. -The supplied makefiles build libjpeg.a automatically (see install.doc). - -While you can build the JPEG library as a shared library if the whim strikes -you, we don't really recommend it. The trouble with shared libraries is that -at some point you'll probably try to substitute a new version of the library -without recompiling the calling applications. That generally doesn't work -because the parameter struct declarations usually change with each new -version. In other words, the library's API is *not* guaranteed binary -compatible across versions; we only try to ensure source-code compatibility. -(In hindsight, it might have been smarter to hide the parameter structs from -applications and introduce a ton of access functions instead. Too late now, -however.) - -On some systems your application may need to set up a signal handler to ensure -that temporary files are deleted if the program is interrupted. This is most -critical if you are on MS-DOS and use the jmemdos.c memory manager back end; -it will try to grab extended memory for temp files, and that space will NOT be -freed automatically. See cjpeg.c or djpeg.c for an example signal handler. - -It may be worth pointing out that the core JPEG library does not actually -require the stdio library: only the default source/destination managers and -error handler need it. You can use the library in a stdio-less environment -if you replace those modules and use jmemnobs.c (or another memory manager of -your own devising). More info about the minimum system library requirements -may be found in jinclude.h. - - -ADVANCED FEATURES -================= - -Compression parameter selection -------------------------------- - -This section describes all the optional parameters you can set for JPEG -compression, as well as the "helper" routines provided to assist in this -task. Proper setting of some parameters requires detailed understanding -of the JPEG standard; if you don't know what a parameter is for, it's best -not to mess with it! See REFERENCES in the README file for pointers to -more info about JPEG. - -It's a good idea to call jpeg_set_defaults() first, even if you plan to set -all the parameters; that way your code is more likely to work with future JPEG -libraries that have additional parameters. For the same reason, we recommend -you use a helper routine where one is provided, in preference to twiddling -cinfo fields directly. - -The helper routines are: - -jpeg_set_defaults (j_compress_ptr cinfo) - This routine sets all JPEG parameters to reasonable defaults, using - only the input image's color space (field in_color_space, which must - already be set in cinfo). Many applications will only need to use - this routine and perhaps jpeg_set_quality(). - -jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) - Sets the JPEG file's colorspace (field jpeg_color_space) as specified, - and sets other color-space-dependent parameters appropriately. See - "Special color spaces", below, before using this. A large number of - parameters, including all per-component parameters, are set by this - routine; if you want to twiddle individual parameters you should call - jpeg_set_colorspace() before rather than after. - -jpeg_default_colorspace (j_compress_ptr cinfo) - Selects an appropriate JPEG colorspace based on cinfo->in_color_space, - and calls jpeg_set_colorspace(). This is actually a subroutine of - jpeg_set_defaults(). It's broken out in case you want to change - just the colorspace-dependent JPEG parameters. - -jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline) - Constructs JPEG quantization tables appropriate for the indicated - quality setting. The quality value is expressed on the 0..100 scale - recommended by IJG (cjpeg's "-quality" switch uses this routine). - Note that the exact mapping from quality values to tables may change - in future IJG releases as more is learned about DCT quantization. - If the force_baseline parameter is TRUE, then the quantization table - entries are constrained to the range 1..255 for full JPEG baseline - compatibility. In the current implementation, this only makes a - difference for quality settings below 25, and it effectively prevents - very small/low quality files from being generated. The IJG decoder - is capable of reading the non-baseline files generated at low quality - settings when force_baseline is FALSE, but other decoders may not be. - -jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor, - boolean force_baseline) - Same as jpeg_set_quality() except that the generated tables are the - sample tables given in the JPEC spec section K.1, multiplied by the - specified scale factor (which is expressed as a percentage; thus - scale_factor = 100 reproduces the spec's tables). Note that larger - scale factors give lower quality. This entry point is useful for - conforming to the Adobe PostScript DCT conventions, but we do not - recommend linear scaling as a user-visible quality scale otherwise. - force_baseline again constrains the computed table entries to 1..255. - -int jpeg_quality_scaling (int quality) - Converts a value on the IJG-recommended quality scale to a linear - scaling percentage. Note that this routine may change or go away - in future releases --- IJG may choose to adopt a scaling method that - can't be expressed as a simple scalar multiplier, in which case the - premise of this routine collapses. Caveat user. - -jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl, - const unsigned int *basic_table, - int scale_factor, boolean force_baseline) - Allows an arbitrary quantization table to be created. which_tbl - indicates which table slot to fill. basic_table points to an array - of 64 unsigned ints given in normal array order. These values are - multiplied by scale_factor/100 and then clamped to the range 1..65535 - (or to 1..255 if force_baseline is TRUE). - CAUTION: prior to library version 6a, jpeg_add_quant_table expected - the basic table to be given in JPEG zigzag order. If you need to - write code that works with either older or newer versions of this - routine, you must check the library version number. Something like - "#if JPEG_LIB_VERSION >= 61" is the right test. - -jpeg_simple_progression (j_compress_ptr cinfo) - Generates a default scan script for writing a progressive-JPEG file. - This is the recommended method of creating a progressive file, - unless you want to make a custom scan sequence. You must ensure that - the JPEG color space is set correctly before calling this routine. - - -Compression parameters (cinfo fields) include: - -J_DCT_METHOD dct_method - Selects the algorithm used for the DCT step. Choices are: - JDCT_ISLOW: slow but accurate integer algorithm - JDCT_IFAST: faster, less accurate integer method - JDCT_FLOAT: floating-point method - JDCT_DEFAULT: default method (normally JDCT_ISLOW) - JDCT_FASTEST: fastest method (normally JDCT_IFAST) - The FLOAT method is very slightly more accurate than the ISLOW method, - but may give different results on different machines due to varying - roundoff behavior. The integer methods should give the same results - on all machines. On machines with sufficiently fast FP hardware, the - floating-point method may also be the fastest. The IFAST method is - considerably less accurate than the other two; its use is not - recommended if high quality is a concern. JDCT_DEFAULT and - JDCT_FASTEST are macros configurable by each installation. - -J_COLOR_SPACE jpeg_color_space -int num_components - The JPEG color space and corresponding number of components; see - "Special color spaces", below, for more info. We recommend using - jpeg_set_color_space() if you want to change these. - -boolean optimize_coding - TRUE causes the compressor to compute optimal Huffman coding tables - for the image. This requires an extra pass over the data and - therefore costs a good deal of space and time. The default is - FALSE, which tells the compressor to use the supplied or default - Huffman tables. In most cases optimal tables save only a few percent - of file size compared to the default tables. Note that when this is - TRUE, you need not supply Huffman tables at all, and any you do - supply will be overwritten. - -unsigned int restart_interval -int restart_in_rows - To emit restart markers in the JPEG file, set one of these nonzero. - Set restart_interval to specify the exact interval in MCU blocks. - Set restart_in_rows to specify the interval in MCU rows. (If - restart_in_rows is not 0, then restart_interval is set after the - image width in MCUs is computed.) Defaults are zero (no restarts). - One restart marker per MCU row is often a good choice. - NOTE: the overhead of restart markers is higher in grayscale JPEG - files than in color files, and MUCH higher in progressive JPEGs. - If you use restarts, you may want to use larger intervals in those - cases. - -const jpeg_scan_info * scan_info -int num_scans - By default, scan_info is NULL; this causes the compressor to write a - single-scan sequential JPEG file. If not NULL, scan_info points to - an array of scan definition records of length num_scans. The - compressor will then write a JPEG file having one scan for each scan - definition record. This is used to generate noninterleaved or - progressive JPEG files. The library checks that the scan array - defines a valid JPEG scan sequence. (jpeg_simple_progression creates - a suitable scan definition array for progressive JPEG.) This is - discussed further under "Progressive JPEG support". - -int smoothing_factor - If non-zero, the input image is smoothed; the value should be 1 for - minimal smoothing to 100 for maximum smoothing. Consult jcsample.c - for details of the smoothing algorithm. The default is zero. - -boolean write_JFIF_header - If TRUE, a JFIF APP0 marker is emitted. jpeg_set_defaults() and - jpeg_set_colorspace() set this TRUE if a JFIF-legal JPEG color space - (ie, YCbCr or grayscale) is selected, otherwise FALSE. - -UINT8 JFIF_major_version -UINT8 JFIF_minor_version - The version number to be written into the JFIF marker. - jpeg_set_defaults() initializes the version to 1.01 (major=minor=1). - You should set it to 1.02 (major=1, minor=2) if you plan to write - any JFIF 1.02 extension markers. - -UINT8 density_unit -UINT16 X_density -UINT16 Y_density - The resolution information to be written into the JFIF marker; - not used otherwise. density_unit may be 0 for unknown, - 1 for dots/inch, or 2 for dots/cm. The default values are 0,1,1 - indicating square pixels of unknown size. - -boolean write_Adobe_marker - If TRUE, an Adobe APP14 marker is emitted. jpeg_set_defaults() and - jpeg_set_colorspace() set this TRUE if JPEG color space RGB, CMYK, - or YCCK is selected, otherwise FALSE. It is generally a bad idea - to set both write_JFIF_header and write_Adobe_marker. In fact, - you probably shouldn't change the default settings at all --- the - default behavior ensures that the JPEG file's color space can be - recognized by the decoder. - -JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS] - Pointers to coefficient quantization tables, one per table slot, - or NULL if no table is defined for a slot. Usually these should - be set via one of the above helper routines; jpeg_add_quant_table() - is general enough to define any quantization table. The other - routines will set up table slot 0 for luminance quality and table - slot 1 for chrominance. - -JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS] -JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS] - Pointers to Huffman coding tables, one per table slot, or NULL if - no table is defined for a slot. Slots 0 and 1 are filled with the - JPEG sample tables by jpeg_set_defaults(). If you need to allocate - more table structures, jpeg_alloc_huff_table() may be used. - Note that optimal Huffman tables can be computed for an image - by setting optimize_coding, as discussed above; there's seldom - any need to mess with providing your own Huffman tables. - -There are some additional cinfo fields which are not documented here -because you currently can't change them; for example, you can't set -arith_code TRUE because arithmetic coding is unsupported. - - -Per-component parameters are stored in the struct cinfo.comp_info[i] for -component number i. Note that components here refer to components of the -JPEG color space, *not* the source image color space. A suitably large -comp_info[] array is allocated by jpeg_set_defaults(); if you choose not -to use that routine, it's up to you to allocate the array. - -int component_id - The one-byte identifier code to be recorded in the JPEG file for - this component. For the standard color spaces, we recommend you - leave the default values alone. - -int h_samp_factor -int v_samp_factor - Horizontal and vertical sampling factors for the component; must - be 1..4 according to the JPEG standard. Note that larger sampling - factors indicate a higher-resolution component; many people find - this behavior quite unintuitive. The default values are 2,2 for - luminance components and 1,1 for chrominance components, except - for grayscale where 1,1 is used. - -int quant_tbl_no - Quantization table number for component. The default value is - 0 for luminance components and 1 for chrominance components. - -int dc_tbl_no -int ac_tbl_no - DC and AC entropy coding table numbers. The default values are - 0 for luminance components and 1 for chrominance components. - -int component_index - Must equal the component's index in comp_info[]. (Beginning in - release v6, the compressor library will fill this in automatically; - you don't have to.) - - -Decompression parameter selection ---------------------------------- - -Decompression parameter selection is somewhat simpler than compression -parameter selection, since all of the JPEG internal parameters are -recorded in the source file and need not be supplied by the application. -(Unless you are working with abbreviated files, in which case see -"Abbreviated datastreams", below.) Decompression parameters control -the postprocessing done on the image to deliver it in a format suitable -for the application's use. Many of the parameters control speed/quality -tradeoffs, in which faster decompression may be obtained at the price of -a poorer-quality image. The defaults select the highest quality (slowest) -processing. - -The following fields in the JPEG object are set by jpeg_read_header() and -may be useful to the application in choosing decompression parameters: - -JDIMENSION image_width Width and height of image -JDIMENSION image_height -int num_components Number of color components -J_COLOR_SPACE jpeg_color_space Colorspace of image -boolean saw_JFIF_marker TRUE if a JFIF APP0 marker was seen - UINT8 JFIF_major_version Version information from JFIF marker - UINT8 JFIF_minor_version - UINT8 density_unit Resolution data from JFIF marker - UINT16 X_density - UINT16 Y_density -boolean saw_Adobe_marker TRUE if an Adobe APP14 marker was seen - UINT8 Adobe_transform Color transform code from Adobe marker - -The JPEG color space, unfortunately, is something of a guess since the JPEG -standard proper does not provide a way to record it. In practice most files -adhere to the JFIF or Adobe conventions, and the decoder will recognize these -correctly. See "Special color spaces", below, for more info. - - -The decompression parameters that determine the basic properties of the -returned image are: - -J_COLOR_SPACE out_color_space - Output color space. jpeg_read_header() sets an appropriate default - based on jpeg_color_space; typically it will be RGB or grayscale. - The application can change this field to request output in a different - colorspace. For example, set it to JCS_GRAYSCALE to get grayscale - output from a color file. (This is useful for previewing: grayscale - output is faster than full color since the color components need not - be processed.) Note that not all possible color space transforms are - currently implemented; you may need to extend jdcolor.c if you want an - unusual conversion. - -unsigned int scale_num, scale_denom - Scale the image by the fraction scale_num/scale_denom. Default is - 1/1, or no scaling. Currently, the only supported scaling ratios - are 1/1, 1/2, 1/4, and 1/8. (The library design allows for arbitrary - scaling ratios but this is not likely to be implemented any time soon.) - Smaller scaling ratios permit significantly faster decoding since - fewer pixels need be processed and a simpler IDCT method can be used. - -boolean quantize_colors - If set TRUE, colormapped output will be delivered. Default is FALSE, - meaning that full-color output will be delivered. - -The next three parameters are relevant only if quantize_colors is TRUE. - -int desired_number_of_colors - Maximum number of colors to use in generating a library-supplied color - map (the actual number of colors is returned in a different field). - Default 256. Ignored when the application supplies its own color map. - -boolean two_pass_quantize - If TRUE, an extra pass over the image is made to select a custom color - map for the image. This usually looks a lot better than the one-size- - fits-all colormap that is used otherwise. Default is TRUE. Ignored - when the application supplies its own color map. - -J_DITHER_MODE dither_mode - Selects color dithering method. Supported values are: - JDITHER_NONE no dithering: fast, very low quality - JDITHER_ORDERED ordered dither: moderate speed and quality - JDITHER_FS Floyd-Steinberg dither: slow, high quality - Default is JDITHER_FS. (At present, ordered dither is implemented - only in the single-pass, standard-colormap case. If you ask for - ordered dither when two_pass_quantize is TRUE or when you supply - an external color map, you'll get F-S dithering.) - -When quantize_colors is TRUE, the target color map is described by the next -two fields. colormap is set to NULL by jpeg_read_header(). The application -can supply a color map by setting colormap non-NULL and setting -actual_number_of_colors to the map size. Otherwise, jpeg_start_decompress() -selects a suitable color map and sets these two fields itself. -[Implementation restriction: at present, an externally supplied colormap is -only accepted for 3-component output color spaces.] - -JSAMPARRAY colormap - The color map, represented as a 2-D pixel array of out_color_components - rows and actual_number_of_colors columns. Ignored if not quantizing. - CAUTION: if the JPEG library creates its own colormap, the storage - pointed to by this field is released by jpeg_finish_decompress(). - Copy the colormap somewhere else first, if you want to save it. - -int actual_number_of_colors - The number of colors in the color map. - -Additional decompression parameters that the application may set include: - -J_DCT_METHOD dct_method - Selects the algorithm used for the DCT step. Choices are the same - as described above for compression. - -boolean do_fancy_upsampling - If TRUE, do careful upsampling of chroma components. If FALSE, - a faster but sloppier method is used. Default is TRUE. The visual - impact of the sloppier method is often very small. - -boolean do_block_smoothing - If TRUE, interblock smoothing is applied in early stages of decoding - progressive JPEG files; if FALSE, not. Default is TRUE. Early - progression stages look "fuzzy" with smoothing, "blocky" without. - In any case, block smoothing ceases to be applied after the first few - AC coefficients are known to full accuracy, so it is relevant only - when using buffered-image mode for progressive images. - -boolean enable_1pass_quant -boolean enable_external_quant -boolean enable_2pass_quant - These are significant only in buffered-image mode, which is - described in its own section below. - - -The output image dimensions are given by the following fields. These are -computed from the source image dimensions and the decompression parameters -by jpeg_start_decompress(). You can also call jpeg_calc_output_dimensions() -to obtain the values that will result from the current parameter settings. -This can be useful if you are trying to pick a scaling ratio that will get -close to a desired target size. It's also important if you are using the -JPEG library's memory manager to allocate output buffer space, because you -are supposed to request such buffers *before* jpeg_start_decompress(). - -JDIMENSION output_width Actual dimensions of output image. -JDIMENSION output_height -int out_color_components Number of color components in out_color_space. -int output_components Number of color components returned. -int rec_outbuf_height Recommended height of scanline buffer. - -When quantizing colors, output_components is 1, indicating a single color map -index per pixel. Otherwise it equals out_color_components. The output arrays -are required to be output_width * output_components JSAMPLEs wide. - -rec_outbuf_height is the recommended minimum height (in scanlines) of the -buffer passed to jpeg_read_scanlines(). If the buffer is smaller, the -library will still work, but time will be wasted due to unnecessary data -copying. In high-quality modes, rec_outbuf_height is always 1, but some -faster, lower-quality modes set it to larger values (typically 2 to 4). -If you are going to ask for a high-speed processing mode, you may as well -go to the trouble of honoring rec_outbuf_height so as to avoid data copying. -(An output buffer larger than rec_outbuf_height lines is OK, but won't -provide any material speed improvement over that height.) - - -Special color spaces --------------------- - -The JPEG standard itself is "color blind" and doesn't specify any particular -color space. It is customary to convert color data to a luminance/chrominance -color space before compressing, since this permits greater compression. The -existing de-facto JPEG file format standards specify YCbCr or grayscale data -(JFIF), or grayscale, RGB, YCbCr, CMYK, or YCCK (Adobe). For special -applications such as multispectral images, other color spaces can be used, -but it must be understood that such files will be unportable. - -The JPEG library can handle the most common colorspace conversions (namely -RGB <=> YCbCr and CMYK <=> YCCK). It can also deal with data of an unknown -color space, passing it through without conversion. If you deal extensively -with an unusual color space, you can easily extend the library to understand -additional color spaces and perform appropriate conversions. - -For compression, the source data's color space is specified by field -in_color_space. This is transformed to the JPEG file's color space given -by jpeg_color_space. jpeg_set_defaults() chooses a reasonable JPEG color -space depending on in_color_space, but you can override this by calling -jpeg_set_colorspace(). Of course you must select a supported transformation. -jccolor.c currently supports the following transformations: - RGB => YCbCr - RGB => GRAYSCALE - YCbCr => GRAYSCALE - CMYK => YCCK -plus the null transforms: GRAYSCALE => GRAYSCALE, RGB => RGB, -YCbCr => YCbCr, CMYK => CMYK, YCCK => YCCK, and UNKNOWN => UNKNOWN. - -The de-facto file format standards (JFIF and Adobe) specify APPn markers that -indicate the color space of the JPEG file. It is important to ensure that -these are written correctly, or omitted if the JPEG file's color space is not -one of the ones supported by the de-facto standards. jpeg_set_colorspace() -will set the compression parameters to include or omit the APPn markers -properly, so long as it is told the truth about the JPEG color space. -For example, if you are writing some random 3-component color space without -conversion, don't try to fake out the library by setting in_color_space and -jpeg_color_space to JCS_YCbCr; use JCS_UNKNOWN. You may want to write an -APPn marker of your own devising to identify the colorspace --- see "Special -markers", below. - -When told that the color space is UNKNOWN, the library will default to using -luminance-quality compression parameters for all color components. You may -well want to change these parameters. See the source code for -jpeg_set_colorspace(), in jcparam.c, for details. - -For decompression, the JPEG file's color space is given in jpeg_color_space, -and this is transformed to the output color space out_color_space. -jpeg_read_header's setting of jpeg_color_space can be relied on if the file -conforms to JFIF or Adobe conventions, but otherwise it is no better than a -guess. If you know the JPEG file's color space for certain, you can override -jpeg_read_header's guess by setting jpeg_color_space. jpeg_read_header also -selects a default output color space based on (its guess of) jpeg_color_space; -set out_color_space to override this. Again, you must select a supported -transformation. jdcolor.c currently supports - YCbCr => GRAYSCALE - YCbCr => RGB - GRAYSCALE => RGB - YCCK => CMYK -as well as the null transforms. (Since GRAYSCALE=>RGB is provided, an -application can force grayscale JPEGs to look like color JPEGs if it only -wants to handle one case.) - -The two-pass color quantizer, jquant2.c, is specialized to handle RGB data -(it weights distances appropriately for RGB colors). You'll need to modify -the code if you want to use it for non-RGB output color spaces. Note that -jquant2.c is used to map to an application-supplied colormap as well as for -the normal two-pass colormap selection process. - -CAUTION: it appears that Adobe Photoshop writes inverted data in CMYK JPEG -files: 0 represents 100% ink coverage, rather than 0% ink as you'd expect. -This is arguably a bug in Photoshop, but if you need to work with Photoshop -CMYK files, you will have to deal with it in your application. We cannot -"fix" this in the library by inverting the data during the CMYK<=>YCCK -transform, because that would break other applications, notably Ghostscript. -Photoshop versions prior to 3.0 write EPS files containing JPEG-encoded CMYK -data in the same inverted-YCCK representation used in bare JPEG files, but -the surrounding PostScript code performs an inversion using the PS image -operator. I am told that Photoshop 3.0 will write uninverted YCCK in -EPS/JPEG files, and will omit the PS-level inversion. (But the data -polarity used in bare JPEG files will not change in 3.0.) In either case, -the JPEG library must not invert the data itself, or else Ghostscript would -read these EPS files incorrectly. - - -Error handling --------------- - -When the default error handler is used, any error detected inside the JPEG -routines will cause a message to be printed on stderr, followed by exit(). -You can supply your own error handling routines to override this behavior -and to control the treatment of nonfatal warnings and trace/debug messages. -The file example.c illustrates the most common case, which is to have the -application regain control after an error rather than exiting. - -The JPEG library never writes any message directly; it always goes through -the error handling routines. Three classes of messages are recognized: - * Fatal errors: the library cannot continue. - * Warnings: the library can continue, but the data is corrupt, and a - damaged output image is likely to result. - * Trace/informational messages. These come with a trace level indicating - the importance of the message; you can control the verbosity of the - program by adjusting the maximum trace level that will be displayed. - -You may, if you wish, simply replace the entire JPEG error handling module -(jerror.c) with your own code. However, you can avoid code duplication by -only replacing some of the routines depending on the behavior you need. -This is accomplished by calling jpeg_std_error() as usual, but then overriding -some of the method pointers in the jpeg_error_mgr struct, as illustrated by -example.c. - -All of the error handling routines will receive a pointer to the JPEG object -(a j_common_ptr which points to either a jpeg_compress_struct or a -jpeg_decompress_struct; if you need to tell which, test the is_decompressor -field). This struct includes a pointer to the error manager struct in its -"err" field. Frequently, custom error handler routines will need to access -additional data which is not known to the JPEG library or the standard error -handler. The most convenient way to do this is to embed either the JPEG -object or the jpeg_error_mgr struct in a larger structure that contains -additional fields; then casting the passed pointer provides access to the -additional fields. Again, see example.c for one way to do it. (Beginning -with IJG version 6b, there is also a void pointer "client_data" in each -JPEG object, which the application can also use to find related data. -The library does not touch client_data at all.) - -The individual methods that you might wish to override are: - -error_exit (j_common_ptr cinfo) - Receives control for a fatal error. Information sufficient to - generate the error message has been stored in cinfo->err; call - output_message to display it. Control must NOT return to the caller; - generally this routine will exit() or longjmp() somewhere. - Typically you would override this routine to get rid of the exit() - default behavior. Note that if you continue processing, you should - clean up the JPEG object with jpeg_abort() or jpeg_destroy(). - -output_message (j_common_ptr cinfo) - Actual output of any JPEG message. Override this to send messages - somewhere other than stderr. Note that this method does not know - how to generate a message, only where to send it. - -format_message (j_common_ptr cinfo, char * buffer) - Constructs a readable error message string based on the error info - stored in cinfo->err. This method is called by output_message. Few - applications should need to override this method. One possible - reason for doing so is to implement dynamic switching of error message - language. - -emit_message (j_common_ptr cinfo, int msg_level) - Decide whether or not to emit a warning or trace message; if so, - calls output_message. The main reason for overriding this method - would be to abort on warnings. msg_level is -1 for warnings, - 0 and up for trace messages. - -Only error_exit() and emit_message() are called from the rest of the JPEG -library; the other two are internal to the error handler. - -The actual message texts are stored in an array of strings which is pointed to -by the field err->jpeg_message_table. The messages are numbered from 0 to -err->last_jpeg_message, and it is these code numbers that are used in the -JPEG library code. You could replace the message texts (for instance, with -messages in French or German) by changing the message table pointer. See -jerror.h for the default texts. CAUTION: this table will almost certainly -change or grow from one library version to the next. - -It may be useful for an application to add its own message texts that are -handled by the same mechanism. The error handler supports a second "add-on" -message table for this purpose. To define an addon table, set the pointer -err->addon_message_table and the message numbers err->first_addon_message and -err->last_addon_message. If you number the addon messages beginning at 1000 -or so, you won't have to worry about conflicts with the library's built-in -messages. See the sample applications cjpeg/djpeg for an example of using -addon messages (the addon messages are defined in cderror.h). - -Actual invocation of the error handler is done via macros defined in jerror.h: - ERREXITn(...) for fatal errors - WARNMSn(...) for corrupt-data warnings - TRACEMSn(...) for trace and informational messages. -These macros store the message code and any additional parameters into the -error handler struct, then invoke the error_exit() or emit_message() method. -The variants of each macro are for varying numbers of additional parameters. -The additional parameters are inserted into the generated message using -standard printf() format codes. - -See jerror.h and jerror.c for further details. - - -Compressed data handling (source and destination managers) ----------------------------------------------------------- - -The JPEG compression library sends its compressed data to a "destination -manager" module. The default destination manager just writes the data to a -stdio stream, but you can provide your own manager to do something else. -Similarly, the decompression library calls a "source manager" to obtain the -compressed data; you can provide your own source manager if you want the data -to come from somewhere other than a stdio stream. - -In both cases, compressed data is processed a bufferload at a time: the -destination or source manager provides a work buffer, and the library invokes -the manager only when the buffer is filled or emptied. (You could define a -one-character buffer to force the manager to be invoked for each byte, but -that would be rather inefficient.) The buffer's size and location are -controlled by the manager, not by the library. For example, if you desired to -decompress a JPEG datastream that was all in memory, you could just make the -buffer pointer and length point to the original data in memory. Then the -buffer-reload procedure would be invoked only if the decompressor ran off the -end of the datastream, which would indicate an erroneous datastream. - -The work buffer is defined as an array of datatype JOCTET, which is generally -"char" or "unsigned char". On a machine where char is not exactly 8 bits -wide, you must define JOCTET as a wider data type and then modify the data -source and destination modules to transcribe the work arrays into 8-bit units -on external storage. - -A data destination manager struct contains a pointer and count defining the -next byte to write in the work buffer and the remaining free space: - - JOCTET * next_output_byte; /* => next byte to write in buffer */ - size_t free_in_buffer; /* # of byte spaces remaining in buffer */ - -The library increments the pointer and decrements the count until the buffer -is filled. The manager's empty_output_buffer method must reset the pointer -and count. The manager is expected to remember the buffer's starting address -and total size in private fields not visible to the library. - -A data destination manager provides three methods: - -init_destination (j_compress_ptr cinfo) - Initialize destination. This is called by jpeg_start_compress() - before any data is actually written. It must initialize - next_output_byte and free_in_buffer. free_in_buffer must be - initialized to a positive value. - -empty_output_buffer (j_compress_ptr cinfo) - This is called whenever the buffer has filled (free_in_buffer - reaches zero). In typical applications, it should write out the - *entire* buffer (use the saved start address and buffer length; - ignore the current state of next_output_byte and free_in_buffer). - Then reset the pointer & count to the start of the buffer, and - return TRUE indicating that the buffer has been dumped. - free_in_buffer must be set to a positive value when TRUE is - returned. A FALSE return should only be used when I/O suspension is - desired (this operating mode is discussed in the next section). - -term_destination (j_compress_ptr cinfo) - Terminate destination --- called by jpeg_finish_compress() after all - data has been written. In most applications, this must flush any - data remaining in the buffer. Use either next_output_byte or - free_in_buffer to determine how much data is in the buffer. - -term_destination() is NOT called by jpeg_abort() or jpeg_destroy(). If you -want the destination manager to be cleaned up during an abort, you must do it -yourself. - -You will also need code to create a jpeg_destination_mgr struct, fill in its -method pointers, and insert a pointer to the struct into the "dest" field of -the JPEG compression object. This can be done in-line in your setup code if -you like, but it's probably cleaner to provide a separate routine similar to -the jpeg_stdio_dest() routine of the supplied destination manager. - -Decompression source managers follow a parallel design, but with some -additional frammishes. The source manager struct contains a pointer and count -defining the next byte to read from the work buffer and the number of bytes -remaining: - - const JOCTET * next_input_byte; /* => next byte to read from buffer */ - size_t bytes_in_buffer; /* # of bytes remaining in buffer */ - -The library increments the pointer and decrements the count until the buffer -is emptied. The manager's fill_input_buffer method must reset the pointer and -count. In most applications, the manager must remember the buffer's starting -address and total size in private fields not visible to the library. - -A data source manager provides five methods: - -init_source (j_decompress_ptr cinfo) - Initialize source. This is called by jpeg_read_header() before any - data is actually read. Unlike init_destination(), it may leave - bytes_in_buffer set to 0 (in which case a fill_input_buffer() call - will occur immediately). - -fill_input_buffer (j_decompress_ptr cinfo) - This is called whenever bytes_in_buffer has reached zero and more - data is wanted. In typical applications, it should read fresh data - into the buffer (ignoring the current state of next_input_byte and - bytes_in_buffer), reset the pointer & count to the start of the - buffer, and return TRUE indicating that the buffer has been reloaded. - It is not necessary to fill the buffer entirely, only to obtain at - least one more byte. bytes_in_buffer MUST be set to a positive value - if TRUE is returned. A FALSE return should only be used when I/O - suspension is desired (this mode is discussed in the next section). - -skip_input_data (j_decompress_ptr cinfo, long num_bytes) - Skip num_bytes worth of data. The buffer pointer and count should - be advanced over num_bytes input bytes, refilling the buffer as - needed. This is used to skip over a potentially large amount of - uninteresting data (such as an APPn marker). In some applications - it may be possible to optimize away the reading of the skipped data, - but it's not clear that being smart is worth much trouble; large - skips are uncommon. bytes_in_buffer may be zero on return. - A zero or negative skip count should be treated as a no-op. - -resync_to_restart (j_decompress_ptr cinfo, int desired) - This routine is called only when the decompressor has failed to find - a restart (RSTn) marker where one is expected. Its mission is to - find a suitable point for resuming decompression. For most - applications, we recommend that you just use the default resync - procedure, jpeg_resync_to_restart(). However, if you are able to back - up in the input data stream, or if you have a-priori knowledge about - the likely location of restart markers, you may be able to do better. - Read the read_restart_marker() and jpeg_resync_to_restart() routines - in jdmarker.c if you think you'd like to implement your own resync - procedure. - -term_source (j_decompress_ptr cinfo) - Terminate source --- called by jpeg_finish_decompress() after all - data has been read. Often a no-op. - -For both fill_input_buffer() and skip_input_data(), there is no such thing -as an EOF return. If the end of the file has been reached, the routine has -a choice of exiting via ERREXIT() or inserting fake data into the buffer. -In most cases, generating a warning message and inserting a fake EOI marker -is the best course of action --- this will allow the decompressor to output -however much of the image is there. In pathological cases, the decompressor -may swallow the EOI and again demand data ... just keep feeding it fake EOIs. -jdatasrc.c illustrates the recommended error recovery behavior. - -term_source() is NOT called by jpeg_abort() or jpeg_destroy(). If you want -the source manager to be cleaned up during an abort, you must do it yourself. - -You will also need code to create a jpeg_source_mgr struct, fill in its method -pointers, and insert a pointer to the struct into the "src" field of the JPEG -decompression object. This can be done in-line in your setup code if you -like, but it's probably cleaner to provide a separate routine similar to the -jpeg_stdio_src() routine of the supplied source manager. - -For more information, consult the stdio source and destination managers -in jdatasrc.c and jdatadst.c. - - -I/O suspension --------------- - -Some applications need to use the JPEG library as an incremental memory-to- -memory filter: when the compressed data buffer is filled or emptied, they want -control to return to the outer loop, rather than expecting that the buffer can -be emptied or reloaded within the data source/destination manager subroutine. -The library supports this need by providing an "I/O suspension" mode, which we -describe in this section. - -The I/O suspension mode is not a panacea: nothing is guaranteed about the -maximum amount of time spent in any one call to the library, so it will not -eliminate response-time problems in single-threaded applications. If you -need guaranteed response time, we suggest you "bite the bullet" and implement -a real multi-tasking capability. - -To use I/O suspension, cooperation is needed between the calling application -and the data source or destination manager; you will always need a custom -source/destination manager. (Please read the previous section if you haven't -already.) The basic idea is that the empty_output_buffer() or -fill_input_buffer() routine is a no-op, merely returning FALSE to indicate -that it has done nothing. Upon seeing this, the JPEG library suspends -operation and returns to its caller. The surrounding application is -responsible for emptying or refilling the work buffer before calling the -JPEG library again. - -Compression suspension: - -For compression suspension, use an empty_output_buffer() routine that returns -FALSE; typically it will not do anything else. This will cause the -compressor to return to the caller of jpeg_write_scanlines(), with the return -value indicating that not all the supplied scanlines have been accepted. -The application must make more room in the output buffer, adjust the output -buffer pointer/count appropriately, and then call jpeg_write_scanlines() -again, pointing to the first unconsumed scanline. - -When forced to suspend, the compressor will backtrack to a convenient stopping -point (usually the start of the current MCU); it will regenerate some output -data when restarted. Therefore, although empty_output_buffer() is only -called when the buffer is filled, you should NOT write out the entire buffer -after a suspension. Write only the data up to the current position of -next_output_byte/free_in_buffer. The data beyond that point will be -regenerated after resumption. - -Because of the backtracking behavior, a good-size output buffer is essential -for efficiency; you don't want the compressor to suspend often. (In fact, an -overly small buffer could lead to infinite looping, if a single MCU required -more data than would fit in the buffer.) We recommend a buffer of at least -several Kbytes. You may want to insert explicit code to ensure that you don't -call jpeg_write_scanlines() unless there is a reasonable amount of space in -the output buffer; in other words, flush the buffer before trying to compress -more data. - -The compressor does not allow suspension while it is trying to write JPEG -markers at the beginning and end of the file. This means that: - * At the beginning of a compression operation, there must be enough free - space in the output buffer to hold the header markers (typically 600 or - so bytes). The recommended buffer size is bigger than this anyway, so - this is not a problem as long as you start with an empty buffer. However, - this restriction might catch you if you insert large special markers, such - as a JFIF thumbnail image, without flushing the buffer afterwards. - * When you call jpeg_finish_compress(), there must be enough space in the - output buffer to emit any buffered data and the final EOI marker. In the - current implementation, half a dozen bytes should suffice for this, but - for safety's sake we recommend ensuring that at least 100 bytes are free - before calling jpeg_finish_compress(). - -A more significant restriction is that jpeg_finish_compress() cannot suspend. -This means you cannot use suspension with multi-pass operating modes, namely -Huffman code optimization and multiple-scan output. Those modes write the -whole file during jpeg_finish_compress(), which will certainly result in -buffer overrun. (Note that this restriction applies only to compression, -not decompression. The decompressor supports input suspension in all of its -operating modes.) - -Decompression suspension: - -For decompression suspension, use a fill_input_buffer() routine that simply -returns FALSE (except perhaps during error recovery, as discussed below). -This will cause the decompressor to return to its caller with an indication -that suspension has occurred. This can happen at four places: - * jpeg_read_header(): will return JPEG_SUSPENDED. - * jpeg_start_decompress(): will return FALSE, rather than its usual TRUE. - * jpeg_read_scanlines(): will return the number of scanlines already - completed (possibly 0). - * jpeg_finish_decompress(): will return FALSE, rather than its usual TRUE. -The surrounding application must recognize these cases, load more data into -the input buffer, and repeat the call. In the case of jpeg_read_scanlines(), -increment the passed pointers past any scanlines successfully read. - -Just as with compression, the decompressor will typically backtrack to a -convenient restart point before suspending. When fill_input_buffer() is -called, next_input_byte/bytes_in_buffer point to the current restart point, -which is where the decompressor will backtrack to if FALSE is returned. -The data beyond that position must NOT be discarded if you suspend; it needs -to be re-read upon resumption. In most implementations, you'll need to shift -this data down to the start of your work buffer and then load more data after -it. Again, this behavior means that a several-Kbyte work buffer is essential -for decent performance; furthermore, you should load a reasonable amount of -new data before resuming decompression. (If you loaded, say, only one new -byte each time around, you could waste a LOT of cycles.) - -The skip_input_data() source manager routine requires special care in a -suspension scenario. This routine is NOT granted the ability to suspend the -decompressor; it can decrement bytes_in_buffer to zero, but no more. If the -requested skip distance exceeds the amount of data currently in the input -buffer, then skip_input_data() must set bytes_in_buffer to zero and record the -additional skip distance somewhere else. The decompressor will immediately -call fill_input_buffer(), which should return FALSE, which will cause a -suspension return. The surrounding application must then arrange to discard -the recorded number of bytes before it resumes loading the input buffer. -(Yes, this design is rather baroque, but it avoids complexity in the far more -common case where a non-suspending source manager is used.) - -If the input data has been exhausted, we recommend that you emit a warning -and insert dummy EOI markers just as a non-suspending data source manager -would do. This can be handled either in the surrounding application logic or -within fill_input_buffer(); the latter is probably more efficient. If -fill_input_buffer() knows that no more data is available, it can set the -pointer/count to point to a dummy EOI marker and then return TRUE just as -though it had read more data in a non-suspending situation. - -The decompressor does not attempt to suspend within standard JPEG markers; -instead it will backtrack to the start of the marker and reprocess the whole -marker next time. Hence the input buffer must be large enough to hold the -longest standard marker in the file. Standard JPEG markers should normally -not exceed a few hundred bytes each (DHT tables are typically the longest). -We recommend at least a 2K buffer for performance reasons, which is much -larger than any correct marker is likely to be. For robustness against -damaged marker length counts, you may wish to insert a test in your -application for the case that the input buffer is completely full and yet -the decoder has suspended without consuming any data --- otherwise, if this -situation did occur, it would lead to an endless loop. (The library can't -provide this test since it has no idea whether "the buffer is full", or -even whether there is a fixed-size input buffer.) - -The input buffer would need to be 64K to allow for arbitrary COM or APPn -markers, but these are handled specially: they are either saved into allocated -memory, or skipped over by calling skip_input_data(). In the former case, -suspension is handled correctly, and in the latter case, the problem of -buffer overrun is placed on skip_input_data's shoulders, as explained above. -Note that if you provide your own marker handling routine for large markers, -you should consider how to deal with buffer overflow. - -Multiple-buffer management: - -In some applications it is desirable to store the compressed data in a linked -list of buffer areas, so as to avoid data copying. This can be handled by -having empty_output_buffer() or fill_input_buffer() set the pointer and count -to reference the next available buffer; FALSE is returned only if no more -buffers are available. Although seemingly straightforward, there is a -pitfall in this approach: the backtrack that occurs when FALSE is returned -could back up into an earlier buffer. For example, when fill_input_buffer() -is called, the current pointer & count indicate the backtrack restart point. -Since fill_input_buffer() will set the pointer and count to refer to a new -buffer, the restart position must be saved somewhere else. Suppose a second -call to fill_input_buffer() occurs in the same library call, and no -additional input data is available, so fill_input_buffer must return FALSE. -If the JPEG library has not moved the pointer/count forward in the current -buffer, then *the correct restart point is the saved position in the prior -buffer*. Prior buffers may be discarded only after the library establishes -a restart point within a later buffer. Similar remarks apply for output into -a chain of buffers. - -The library will never attempt to backtrack over a skip_input_data() call, -so any skipped data can be permanently discarded. You still have to deal -with the case of skipping not-yet-received data, however. - -It's much simpler to use only a single buffer; when fill_input_buffer() is -called, move any unconsumed data (beyond the current pointer/count) down to -the beginning of this buffer and then load new data into the remaining buffer -space. This approach requires a little more data copying but is far easier -to get right. - - -Progressive JPEG support ------------------------- - -Progressive JPEG rearranges the stored data into a series of scans of -increasing quality. In situations where a JPEG file is transmitted across a -slow communications link, a decoder can generate a low-quality image very -quickly from the first scan, then gradually improve the displayed quality as -more scans are received. The final image after all scans are complete is -identical to that of a regular (sequential) JPEG file of the same quality -setting. Progressive JPEG files are often slightly smaller than equivalent -sequential JPEG files, but the possibility of incremental display is the main -reason for using progressive JPEG. - -The IJG encoder library generates progressive JPEG files when given a -suitable "scan script" defining how to divide the data into scans. -Creation of progressive JPEG files is otherwise transparent to the encoder. -Progressive JPEG files can also be read transparently by the decoder library. -If the decoding application simply uses the library as defined above, it -will receive a final decoded image without any indication that the file was -progressive. Of course, this approach does not allow incremental display. -To perform incremental display, an application needs to use the decoder -library's "buffered-image" mode, in which it receives a decoded image -multiple times. - -Each displayed scan requires about as much work to decode as a full JPEG -image of the same size, so the decoder must be fairly fast in relation to the -data transmission rate in order to make incremental display useful. However, -it is possible to skip displaying the image and simply add the incoming bits -to the decoder's coefficient buffer. This is fast because only Huffman -decoding need be done, not IDCT, upsampling, colorspace conversion, etc. -The IJG decoder library allows the application to switch dynamically between -displaying the image and simply absorbing the incoming bits. A properly -coded application can automatically adapt the number of display passes to -suit the time available as the image is received. Also, a final -higher-quality display cycle can be performed from the buffered data after -the end of the file is reached. - -Progressive compression: - -To create a progressive JPEG file (or a multiple-scan sequential JPEG file), -set the scan_info cinfo field to point to an array of scan descriptors, and -perform compression as usual. Instead of constructing your own scan list, -you can call the jpeg_simple_progression() helper routine to create a -recommended progression sequence; this method should be used by all -applications that don't want to get involved in the nitty-gritty of -progressive scan sequence design. (If you want to provide user control of -scan sequences, you may wish to borrow the scan script reading code found -in rdswitch.c, so that you can read scan script files just like cjpeg's.) -When scan_info is not NULL, the compression library will store DCT'd data -into a buffer array as jpeg_write_scanlines() is called, and will emit all -the requested scans during jpeg_finish_compress(). This implies that -multiple-scan output cannot be created with a suspending data destination -manager, since jpeg_finish_compress() does not support suspension. We -should also note that the compressor currently forces Huffman optimization -mode when creating a progressive JPEG file, because the default Huffman -tables are unsuitable for progressive files. - -Progressive decompression: - -When buffered-image mode is not used, the decoder library will read all of -a multi-scan file during jpeg_start_decompress(), so that it can provide a -final decoded image. (Here "multi-scan" means either progressive or -multi-scan sequential.) This makes multi-scan files transparent to the -decoding application. However, existing applications that used suspending -input with version 5 of the IJG library will need to be modified to check -for a suspension return from jpeg_start_decompress(). - -To perform incremental display, an application must use the library's -buffered-image mode. This is described in the next section. - - -Buffered-image mode -------------------- - -In buffered-image mode, the library stores the partially decoded image in a -coefficient buffer, from which it can be read out as many times as desired. -This mode is typically used for incremental display of progressive JPEG files, -but it can be used with any JPEG file. Each scan of a progressive JPEG file -adds more data (more detail) to the buffered image. The application can -display in lockstep with the source file (one display pass per input scan), -or it can allow input processing to outrun display processing. By making -input and display processing run independently, it is possible for the -application to adapt progressive display to a wide range of data transmission -rates. - -The basic control flow for buffered-image decoding is - - jpeg_create_decompress() - set data source - jpeg_read_header() - set overall decompression parameters - cinfo.buffered_image = TRUE; /* select buffered-image mode */ - jpeg_start_decompress() - for (each output pass) { - adjust output decompression parameters if required - jpeg_start_output() /* start a new output pass */ - for (all scanlines in image) { - jpeg_read_scanlines() - display scanlines - } - jpeg_finish_output() /* terminate output pass */ - } - jpeg_finish_decompress() - jpeg_destroy_decompress() - -This differs from ordinary unbuffered decoding in that there is an additional -level of looping. The application can choose how many output passes to make -and how to display each pass. - -The simplest approach to displaying progressive images is to do one display -pass for each scan appearing in the input file. In this case the outer loop -condition is typically - while (! jpeg_input_complete(&cinfo)) -and the start-output call should read - jpeg_start_output(&cinfo, cinfo.input_scan_number); -The second parameter to jpeg_start_output() indicates which scan of the input -file is to be displayed; the scans are numbered starting at 1 for this -purpose. (You can use a loop counter starting at 1 if you like, but using -the library's input scan counter is easier.) The library automatically reads -data as necessary to complete each requested scan, and jpeg_finish_output() -advances to the next scan or end-of-image marker (hence input_scan_number -will be incremented by the time control arrives back at jpeg_start_output()). -With this technique, data is read from the input file only as needed, and -input and output processing run in lockstep. - -After reading the final scan and reaching the end of the input file, the -buffered image remains available; it can be read additional times by -repeating the jpeg_start_output()/jpeg_read_scanlines()/jpeg_finish_output() -sequence. For example, a useful technique is to use fast one-pass color -quantization for display passes made while the image is arriving, followed by -a final display pass using two-pass quantization for highest quality. This -is done by changing the library parameters before the final output pass. -Changing parameters between passes is discussed in detail below. - -In general the last scan of a progressive file cannot be recognized as such -until after it is read, so a post-input display pass is the best approach if -you want special processing in the final pass. - -When done with the image, be sure to call jpeg_finish_decompress() to release -the buffered image (or just use jpeg_destroy_decompress()). - -If input data arrives faster than it can be displayed, the application can -cause the library to decode input data in advance of what's needed to produce -output. This is done by calling the routine jpeg_consume_input(). -The return value is one of the following: - JPEG_REACHED_SOS: reached an SOS marker (the start of a new scan) - JPEG_REACHED_EOI: reached the EOI marker (end of image) - JPEG_ROW_COMPLETED: completed reading one MCU row of compressed data - JPEG_SCAN_COMPLETED: completed reading last MCU row of current scan - JPEG_SUSPENDED: suspended before completing any of the above -(JPEG_SUSPENDED can occur only if a suspending data source is used.) This -routine can be called at any time after initializing the JPEG object. It -reads some additional data and returns when one of the indicated significant -events occurs. (If called after the EOI marker is reached, it will -immediately return JPEG_REACHED_EOI without attempting to read more data.) - -The library's output processing will automatically call jpeg_consume_input() -whenever the output processing overtakes the input; thus, simple lockstep -display requires no direct calls to jpeg_consume_input(). But by adding -calls to jpeg_consume_input(), you can absorb data in advance of what is -being displayed. This has two benefits: - * You can limit buildup of unprocessed data in your input buffer. - * You can eliminate extra display passes by paying attention to the - state of the library's input processing. - -The first of these benefits only requires interspersing calls to -jpeg_consume_input() with your display operations and any other processing -you may be doing. To avoid wasting cycles due to backtracking, it's best to -call jpeg_consume_input() only after a hundred or so new bytes have arrived. -This is discussed further under "I/O suspension", above. (Note: the JPEG -library currently is not thread-safe. You must not call jpeg_consume_input() -from one thread of control if a different library routine is working on the -same JPEG object in another thread.) - -When input arrives fast enough that more than one new scan is available -before you start a new output pass, you may as well skip the output pass -corresponding to the completed scan. This occurs for free if you pass -cinfo.input_scan_number as the target scan number to jpeg_start_output(). -The input_scan_number field is simply the index of the scan currently being -consumed by the input processor. You can ensure that this is up-to-date by -emptying the input buffer just before calling jpeg_start_output(): call -jpeg_consume_input() repeatedly until it returns JPEG_SUSPENDED or -JPEG_REACHED_EOI. - -The target scan number passed to jpeg_start_output() is saved in the -cinfo.output_scan_number field. The library's output processing calls -jpeg_consume_input() whenever the current input scan number and row within -that scan is less than or equal to the current output scan number and row. -Thus, input processing can "get ahead" of the output processing but is not -allowed to "fall behind". You can achieve several different effects by -manipulating this interlock rule. For example, if you pass a target scan -number greater than the current input scan number, the output processor will -wait until that scan starts to arrive before producing any output. (To avoid -an infinite loop, the target scan number is automatically reset to the last -scan number when the end of image is reached. Thus, if you specify a large -target scan number, the library will just absorb the entire input file and -then perform an output pass. This is effectively the same as what -jpeg_start_decompress() does when you don't select buffered-image mode.) -When you pass a target scan number equal to the current input scan number, -the image is displayed no faster than the current input scan arrives. The -final possibility is to pass a target scan number less than the current input -scan number; this disables the input/output interlock and causes the output -processor to simply display whatever it finds in the image buffer, without -waiting for input. (However, the library will not accept a target scan -number less than one, so you can't avoid waiting for the first scan.) - -When data is arriving faster than the output display processing can advance -through the image, jpeg_consume_input() will store data into the buffered -image beyond the point at which the output processing is reading data out -again. If the input arrives fast enough, it may "wrap around" the buffer to -the point where the input is more than one whole scan ahead of the output. -If the output processing simply proceeds through its display pass without -paying attention to the input, the effect seen on-screen is that the lower -part of the image is one or more scans better in quality than the upper part. -Then, when the next output scan is started, you have a choice of what target -scan number to use. The recommended choice is to use the current input scan -number at that time, which implies that you've skipped the output scans -corresponding to the input scans that were completed while you processed the -previous output scan. In this way, the decoder automatically adapts its -speed to the arriving data, by skipping output scans as necessary to keep up -with the arriving data. - -When using this strategy, you'll want to be sure that you perform a final -output pass after receiving all the data; otherwise your last display may not -be full quality across the whole screen. So the right outer loop logic is -something like this: - do { - absorb any waiting input by calling jpeg_consume_input() - final_pass = jpeg_input_complete(&cinfo); - adjust output decompression parameters if required - jpeg_start_output(&cinfo, cinfo.input_scan_number); - ... - jpeg_finish_output() - } while (! final_pass); -rather than quitting as soon as jpeg_input_complete() returns TRUE. This -arrangement makes it simple to use higher-quality decoding parameters -for the final pass. But if you don't want to use special parameters for -the final pass, the right loop logic is like this: - for (;;) { - absorb any waiting input by calling jpeg_consume_input() - jpeg_start_output(&cinfo, cinfo.input_scan_number); - ... - jpeg_finish_output() - if (jpeg_input_complete(&cinfo) && - cinfo.input_scan_number == cinfo.output_scan_number) - break; - } -In this case you don't need to know in advance whether an output pass is to -be the last one, so it's not necessary to have reached EOF before starting -the final output pass; rather, what you want to test is whether the output -pass was performed in sync with the final input scan. This form of the loop -will avoid an extra output pass whenever the decoder is able (or nearly able) -to keep up with the incoming data. - -When the data transmission speed is high, you might begin a display pass, -then find that much or all of the file has arrived before you can complete -the pass. (You can detect this by noting the JPEG_REACHED_EOI return code -from jpeg_consume_input(), or equivalently by testing jpeg_input_complete().) -In this situation you may wish to abort the current display pass and start a -new one using the newly arrived information. To do so, just call -jpeg_finish_output() and then start a new pass with jpeg_start_output(). - -A variant strategy is to abort and restart display if more than one complete -scan arrives during an output pass; this can be detected by noting -JPEG_REACHED_SOS returns and/or examining cinfo.input_scan_number. This -idea should be employed with caution, however, since the display process -might never get to the bottom of the image before being aborted, resulting -in the lower part of the screen being several passes worse than the upper. -In most cases it's probably best to abort an output pass only if the whole -file has arrived and you want to begin the final output pass immediately. - -When receiving data across a communication link, we recommend always using -the current input scan number for the output target scan number; if a -higher-quality final pass is to be done, it should be started (aborting any -incomplete output pass) as soon as the end of file is received. However, -many other strategies are possible. For example, the application can examine -the parameters of the current input scan and decide whether to display it or -not. If the scan contains only chroma data, one might choose not to use it -as the target scan, expecting that the scan will be small and will arrive -quickly. To skip to the next scan, call jpeg_consume_input() until it -returns JPEG_REACHED_SOS or JPEG_REACHED_EOI. Or just use the next higher -number as the target scan for jpeg_start_output(); but that method doesn't -let you inspect the next scan's parameters before deciding to display it. - - -In buffered-image mode, jpeg_start_decompress() never performs input and -thus never suspends. An application that uses input suspension with -buffered-image mode must be prepared for suspension returns from these -routines: -* jpeg_start_output() performs input only if you request 2-pass quantization - and the target scan isn't fully read yet. (This is discussed below.) -* jpeg_read_scanlines(), as always, returns the number of scanlines that it - was able to produce before suspending. -* jpeg_finish_output() will read any markers following the target scan, - up to the end of the file or the SOS marker that begins another scan. - (But it reads no input if jpeg_consume_input() has already reached the - end of the file or a SOS marker beyond the target output scan.) -* jpeg_finish_decompress() will read until the end of file, and thus can - suspend if the end hasn't already been reached (as can be tested by - calling jpeg_input_complete()). -jpeg_start_output(), jpeg_finish_output(), and jpeg_finish_decompress() -all return TRUE if they completed their tasks, FALSE if they had to suspend. -In the event of a FALSE return, the application must load more input data -and repeat the call. Applications that use non-suspending data sources need -not check the return values of these three routines. - - -It is possible to change decoding parameters between output passes in the -buffered-image mode. The decoder library currently supports only very -limited changes of parameters. ONLY THE FOLLOWING parameter changes are -allowed after jpeg_start_decompress() is called: -* dct_method can be changed before each call to jpeg_start_output(). - For example, one could use a fast DCT method for early scans, changing - to a higher quality method for the final scan. -* dither_mode can be changed before each call to jpeg_start_output(); - of course this has no impact if not using color quantization. Typically - one would use ordered dither for initial passes, then switch to - Floyd-Steinberg dither for the final pass. Caution: changing dither mode - can cause more memory to be allocated by the library. Although the amount - of memory involved is not large (a scanline or so), it may cause the - initial max_memory_to_use specification to be exceeded, which in the worst - case would result in an out-of-memory failure. -* do_block_smoothing can be changed before each call to jpeg_start_output(). - This setting is relevant only when decoding a progressive JPEG image. - During the first DC-only scan, block smoothing provides a very "fuzzy" look - instead of the very "blocky" look seen without it; which is better seems a - matter of personal taste. But block smoothing is nearly always a win - during later stages, especially when decoding a successive-approximation - image: smoothing helps to hide the slight blockiness that otherwise shows - up on smooth gradients until the lowest coefficient bits are sent. -* Color quantization mode can be changed under the rules described below. - You *cannot* change between full-color and quantized output (because that - would alter the required I/O buffer sizes), but you can change which - quantization method is used. - -When generating color-quantized output, changing quantization method is a -very useful way of switching between high-speed and high-quality display. -The library allows you to change among its three quantization methods: -1. Single-pass quantization to a fixed color cube. - Selected by cinfo.two_pass_quantize = FALSE and cinfo.colormap = NULL. -2. Single-pass quantization to an application-supplied colormap. - Selected by setting cinfo.colormap to point to the colormap (the value of - two_pass_quantize is ignored); also set cinfo.actual_number_of_colors. -3. Two-pass quantization to a colormap chosen specifically for the image. - Selected by cinfo.two_pass_quantize = TRUE and cinfo.colormap = NULL. - (This is the default setting selected by jpeg_read_header, but it is - probably NOT what you want for the first pass of progressive display!) -These methods offer successively better quality and lesser speed. However, -only the first method is available for quantizing in non-RGB color spaces. - -IMPORTANT: because the different quantizer methods have very different -working-storage requirements, the library requires you to indicate which -one(s) you intend to use before you call jpeg_start_decompress(). (If we did -not require this, the max_memory_to_use setting would be a complete fiction.) -You do this by setting one or more of these three cinfo fields to TRUE: - enable_1pass_quant Fixed color cube colormap - enable_external_quant Externally-supplied colormap - enable_2pass_quant Two-pass custom colormap -All three are initialized FALSE by jpeg_read_header(). But -jpeg_start_decompress() automatically sets TRUE the one selected by the -current two_pass_quantize and colormap settings, so you only need to set the -enable flags for any other quantization methods you plan to change to later. - -After setting the enable flags correctly at jpeg_start_decompress() time, you -can change to any enabled quantization method by setting two_pass_quantize -and colormap properly just before calling jpeg_start_output(). The following -special rules apply: -1. You must explicitly set cinfo.colormap to NULL when switching to 1-pass - or 2-pass mode from a different mode, or when you want the 2-pass - quantizer to be re-run to generate a new colormap. -2. To switch to an external colormap, or to change to a different external - colormap than was used on the prior pass, you must call - jpeg_new_colormap() after setting cinfo.colormap. -NOTE: if you want to use the same colormap as was used in the prior pass, -you should not do either of these things. This will save some nontrivial -switchover costs. -(These requirements exist because cinfo.colormap will always be non-NULL -after completing a prior output pass, since both the 1-pass and 2-pass -quantizers set it to point to their output colormaps. Thus you have to -do one of these two things to notify the library that something has changed. -Yup, it's a bit klugy, but it's necessary to do it this way for backwards -compatibility.) - -Note that in buffered-image mode, the library generates any requested colormap -during jpeg_start_output(), not during jpeg_start_decompress(). - -When using two-pass quantization, jpeg_start_output() makes a pass over the -buffered image to determine the optimum color map; it therefore may take a -significant amount of time, whereas ordinarily it does little work. The -progress monitor hook is called during this pass, if defined. It is also -important to realize that if the specified target scan number is greater than -or equal to the current input scan number, jpeg_start_output() will attempt -to consume input as it makes this pass. If you use a suspending data source, -you need to check for a FALSE return from jpeg_start_output() under these -conditions. The combination of 2-pass quantization and a not-yet-fully-read -target scan is the only case in which jpeg_start_output() will consume input. - - -Application authors who support buffered-image mode may be tempted to use it -for all JPEG images, even single-scan ones. This will work, but it is -inefficient: there is no need to create an image-sized coefficient buffer for -single-scan images. Requesting buffered-image mode for such an image wastes -memory. Worse, it can cost time on large images, since the buffered data has -to be swapped out or written to a temporary file. If you are concerned about -maximum performance on baseline JPEG files, you should use buffered-image -mode only when the incoming file actually has multiple scans. This can be -tested by calling jpeg_has_multiple_scans(), which will return a correct -result at any time after jpeg_read_header() completes. - -It is also worth noting that when you use jpeg_consume_input() to let input -processing get ahead of output processing, the resulting pattern of access to -the coefficient buffer is quite nonsequential. It's best to use the memory -manager jmemnobs.c if you can (ie, if you have enough real or virtual main -memory). If not, at least make sure that max_memory_to_use is set as high as -possible. If the JPEG memory manager has to use a temporary file, you will -probably see a lot of disk traffic and poor performance. (This could be -improved with additional work on the memory manager, but we haven't gotten -around to it yet.) - -In some applications it may be convenient to use jpeg_consume_input() for all -input processing, including reading the initial markers; that is, you may -wish to call jpeg_consume_input() instead of jpeg_read_header() during -startup. This works, but note that you must check for JPEG_REACHED_SOS and -JPEG_REACHED_EOI return codes as the equivalent of jpeg_read_header's codes. -Once the first SOS marker has been reached, you must call -jpeg_start_decompress() before jpeg_consume_input() will consume more input; -it'll just keep returning JPEG_REACHED_SOS until you do. If you read a -tables-only file this way, jpeg_consume_input() will return JPEG_REACHED_EOI -without ever returning JPEG_REACHED_SOS; be sure to check for this case. -If this happens, the decompressor will not read any more input until you call -jpeg_abort() to reset it. It is OK to call jpeg_consume_input() even when not -using buffered-image mode, but in that case it's basically a no-op after the -initial markers have been read: it will just return JPEG_SUSPENDED. - - -Abbreviated datastreams and multiple images -------------------------------------------- - -A JPEG compression or decompression object can be reused to process multiple -images. This saves a small amount of time per image by eliminating the -"create" and "destroy" operations, but that isn't the real purpose of the -feature. Rather, reuse of an object provides support for abbreviated JPEG -datastreams. Object reuse can also simplify processing a series of images in -a single input or output file. This section explains these features. - -A JPEG file normally contains several hundred bytes worth of quantization -and Huffman tables. In a situation where many images will be stored or -transmitted with identical tables, this may represent an annoying overhead. -The JPEG standard therefore permits tables to be omitted. The standard -defines three classes of JPEG datastreams: - * "Interchange" datastreams contain an image and all tables needed to decode - the image. These are the usual kind of JPEG file. - * "Abbreviated image" datastreams contain an image, but are missing some or - all of the tables needed to decode that image. - * "Abbreviated table specification" (henceforth "tables-only") datastreams - contain only table specifications. -To decode an abbreviated image, it is necessary to load the missing table(s) -into the decoder beforehand. This can be accomplished by reading a separate -tables-only file. A variant scheme uses a series of images in which the first -image is an interchange (complete) datastream, while subsequent ones are -abbreviated and rely on the tables loaded by the first image. It is assumed -that once the decoder has read a table, it will remember that table until a -new definition for the same table number is encountered. - -It is the application designer's responsibility to figure out how to associate -the correct tables with an abbreviated image. While abbreviated datastreams -can be useful in a closed environment, their use is strongly discouraged in -any situation where data exchange with other applications might be needed. -Caveat designer. - -The JPEG library provides support for reading and writing any combination of -tables-only datastreams and abbreviated images. In both compression and -decompression objects, a quantization or Huffman table will be retained for -the lifetime of the object, unless it is overwritten by a new table definition. - - -To create abbreviated image datastreams, it is only necessary to tell the -compressor not to emit some or all of the tables it is using. Each -quantization and Huffman table struct contains a boolean field "sent_table", -which normally is initialized to FALSE. For each table used by the image, the -header-writing process emits the table and sets sent_table = TRUE unless it is -already TRUE. (In normal usage, this prevents outputting the same table -definition multiple times, as would otherwise occur because the chroma -components typically share tables.) Thus, setting this field to TRUE before -calling jpeg_start_compress() will prevent the table from being written at -all. - -If you want to create a "pure" abbreviated image file containing no tables, -just call "jpeg_suppress_tables(&cinfo, TRUE)" after constructing all the -tables. If you want to emit some but not all tables, you'll need to set the -individual sent_table fields directly. - -To create an abbreviated image, you must also call jpeg_start_compress() -with a second parameter of FALSE, not TRUE. Otherwise jpeg_start_compress() -will force all the sent_table fields to FALSE. (This is a safety feature to -prevent abbreviated images from being created accidentally.) - -To create a tables-only file, perform the same parameter setup that you -normally would, but instead of calling jpeg_start_compress() and so on, call -jpeg_write_tables(&cinfo). This will write an abbreviated datastream -containing only SOI, DQT and/or DHT markers, and EOI. All the quantization -and Huffman tables that are currently defined in the compression object will -be emitted unless their sent_tables flag is already TRUE, and then all the -sent_tables flags will be set TRUE. - -A sure-fire way to create matching tables-only and abbreviated image files -is to proceed as follows: - - create JPEG compression object - set JPEG parameters - set destination to tables-only file - jpeg_write_tables(&cinfo); - set destination to image file - jpeg_start_compress(&cinfo, FALSE); - write data... - jpeg_finish_compress(&cinfo); - -Since the JPEG parameters are not altered between writing the table file and -the abbreviated image file, the same tables are sure to be used. Of course, -you can repeat the jpeg_start_compress() ... jpeg_finish_compress() sequence -many times to produce many abbreviated image files matching the table file. - -You cannot suppress output of the computed Huffman tables when Huffman -optimization is selected. (If you could, there'd be no way to decode the -image...) Generally, you don't want to set optimize_coding = TRUE when -you are trying to produce abbreviated files. - -In some cases you might want to compress an image using tables which are -not stored in the application, but are defined in an interchange or -tables-only file readable by the application. This can be done by setting up -a JPEG decompression object to read the specification file, then copying the -tables into your compression object. See jpeg_copy_critical_parameters() -for an example of copying quantization tables. - - -To read abbreviated image files, you simply need to load the proper tables -into the decompression object before trying to read the abbreviated image. -If the proper tables are stored in the application program, you can just -allocate the table structs and fill in their contents directly. For example, -to load a fixed quantization table into table slot "n": - - if (cinfo.quant_tbl_ptrs[n] == NULL) - cinfo.quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) &cinfo); - quant_ptr = cinfo.quant_tbl_ptrs[n]; /* quant_ptr is JQUANT_TBL* */ - for (i = 0; i < 64; i++) { - /* Qtable[] is desired quantization table, in natural array order */ - quant_ptr->quantval[i] = Qtable[i]; - } - -Code to load a fixed Huffman table is typically (for AC table "n"): - - if (cinfo.ac_huff_tbl_ptrs[n] == NULL) - cinfo.ac_huff_tbl_ptrs[n] = jpeg_alloc_huff_table((j_common_ptr) &cinfo); - huff_ptr = cinfo.ac_huff_tbl_ptrs[n]; /* huff_ptr is JHUFF_TBL* */ - for (i = 1; i <= 16; i++) { - /* counts[i] is number of Huffman codes of length i bits, i=1..16 */ - huff_ptr->bits[i] = counts[i]; - } - for (i = 0; i < 256; i++) { - /* symbols[] is the list of Huffman symbols, in code-length order */ - huff_ptr->huffval[i] = symbols[i]; - } - -(Note that trying to set cinfo.quant_tbl_ptrs[n] to point directly at a -constant JQUANT_TBL object is not safe. If the incoming file happened to -contain a quantization table definition, your master table would get -overwritten! Instead allocate a working table copy and copy the master table -into it, as illustrated above. Ditto for Huffman tables, of course.) - -You might want to read the tables from a tables-only file, rather than -hard-wiring them into your application. The jpeg_read_header() call is -sufficient to read a tables-only file. You must pass a second parameter of -FALSE to indicate that you do not require an image to be present. Thus, the -typical scenario is - - create JPEG decompression object - set source to tables-only file - jpeg_read_header(&cinfo, FALSE); - set source to abbreviated image file - jpeg_read_header(&cinfo, TRUE); - set decompression parameters - jpeg_start_decompress(&cinfo); - read data... - jpeg_finish_decompress(&cinfo); - -In some cases, you may want to read a file without knowing whether it contains -an image or just tables. In that case, pass FALSE and check the return value -from jpeg_read_header(): it will be JPEG_HEADER_OK if an image was found, -JPEG_HEADER_TABLES_ONLY if only tables were found. (A third return value, -JPEG_SUSPENDED, is possible when using a suspending data source manager.) -Note that jpeg_read_header() will not complain if you read an abbreviated -image for which you haven't loaded the missing tables; the missing-table check -occurs later, in jpeg_start_decompress(). - - -It is possible to read a series of images from a single source file by -repeating the jpeg_read_header() ... jpeg_finish_decompress() sequence, -without releasing/recreating the JPEG object or the data source module. -(If you did reinitialize, any partial bufferload left in the data source -buffer at the end of one image would be discarded, causing you to lose the -start of the next image.) When you use this method, stored tables are -automatically carried forward, so some of the images can be abbreviated images -that depend on tables from earlier images. - -If you intend to write a series of images into a single destination file, -you might want to make a specialized data destination module that doesn't -flush the output buffer at term_destination() time. This would speed things -up by some trifling amount. Of course, you'd need to remember to flush the -buffer after the last image. You can make the later images be abbreviated -ones by passing FALSE to jpeg_start_compress(). - - -Special markers ---------------- - -Some applications may need to insert or extract special data in the JPEG -datastream. The JPEG standard provides marker types "COM" (comment) and -"APP0" through "APP15" (application) to hold application-specific data. -Unfortunately, the use of these markers is not specified by the standard. -COM markers are fairly widely used to hold user-supplied text. The JFIF file -format spec uses APP0 markers with specified initial strings to hold certain -data. Adobe applications use APP14 markers beginning with the string "Adobe" -for miscellaneous data. Other APPn markers are rarely seen, but might -contain almost anything. - -If you wish to store user-supplied text, we recommend you use COM markers -and place readable 7-bit ASCII text in them. Newline conventions are not -standardized --- expect to find LF (Unix style), CR/LF (DOS style), or CR -(Mac style). A robust COM reader should be able to cope with random binary -garbage, including nulls, since some applications generate COM markers -containing non-ASCII junk. (But yours should not be one of them.) - -For program-supplied data, use an APPn marker, and be sure to begin it with an -identifying string so that you can tell whether the marker is actually yours. -It's probably best to avoid using APP0 or APP14 for any private markers. -(NOTE: the upcoming SPIFF standard will use APP8 markers; we recommend you -not use APP8 markers for any private purposes, either.) - -Keep in mind that at most 65533 bytes can be put into one marker, but you -can have as many markers as you like. - -By default, the IJG compression library will write a JFIF APP0 marker if the -selected JPEG colorspace is grayscale or YCbCr, or an Adobe APP14 marker if -the selected colorspace is RGB, CMYK, or YCCK. You can disable this, but -we don't recommend it. The decompression library will recognize JFIF and -Adobe markers and will set the JPEG colorspace properly when one is found. - - -You can write special markers immediately following the datastream header by -calling jpeg_write_marker() after jpeg_start_compress() and before the first -call to jpeg_write_scanlines(). When you do this, the markers appear after -the SOI and the JFIF APP0 and Adobe APP14 markers (if written), but before -all else. Specify the marker type parameter as "JPEG_COM" for COM or -"JPEG_APP0 + n" for APPn. (Actually, jpeg_write_marker will let you write -any marker type, but we don't recommend writing any other kinds of marker.) -For example, to write a user comment string pointed to by comment_text: - jpeg_write_marker(cinfo, JPEG_COM, comment_text, strlen(comment_text)); - -If it's not convenient to store all the marker data in memory at once, -you can instead call jpeg_write_m_header() followed by multiple calls to -jpeg_write_m_byte(). If you do it this way, it's your responsibility to -call jpeg_write_m_byte() exactly the number of times given in the length -parameter to jpeg_write_m_header(). (This method lets you empty the -output buffer partway through a marker, which might be important when -using a suspending data destination module. In any case, if you are using -a suspending destination, you should flush its buffer after inserting -any special markers. See "I/O suspension".) - -Or, if you prefer to synthesize the marker byte sequence yourself, -you can just cram it straight into the data destination module. - -If you are writing JFIF 1.02 extension markers (thumbnail images), don't -forget to set cinfo.JFIF_minor_version = 2 so that the encoder will write the -correct JFIF version number in the JFIF header marker. The library's default -is to write version 1.01, but that's wrong if you insert any 1.02 extension -markers. (We could probably get away with just defaulting to 1.02, but there -used to be broken decoders that would complain about unknown minor version -numbers. To reduce compatibility risks it's safest not to write 1.02 unless -you are actually using 1.02 extensions.) - - -When reading, two methods of handling special markers are available: -1. You can ask the library to save the contents of COM and/or APPn markers -into memory, and then examine them at your leisure afterwards. -2. You can supply your own routine to process COM and/or APPn markers -on-the-fly as they are read. -The first method is simpler to use, especially if you are using a suspending -data source; writing a marker processor that copes with input suspension is -not easy (consider what happens if the marker is longer than your available -input buffer). However, the second method conserves memory since the marker -data need not be kept around after it's been processed. - -For either method, you'd normally set up marker handling after creating a -decompression object and before calling jpeg_read_header(), because the -markers of interest will typically be near the head of the file and so will -be scanned by jpeg_read_header. Once you've established a marker handling -method, it will be used for the life of that decompression object -(potentially many datastreams), unless you change it. Marker handling is -determined separately for COM markers and for each APPn marker code. - - -To save the contents of special markers in memory, call - jpeg_save_markers(cinfo, marker_code, length_limit) -where marker_code is the marker type to save, JPEG_COM or JPEG_APP0+n. -(To arrange to save all the special marker types, you need to call this -routine 17 times, for COM and APP0-APP15.) If the incoming marker is longer -than length_limit data bytes, only length_limit bytes will be saved; this -parameter allows you to avoid chewing up memory when you only need to see the -first few bytes of a potentially large marker. If you want to save all the -data, set length_limit to 0xFFFF; that is enough since marker lengths are only -16 bits. As a special case, setting length_limit to 0 prevents that marker -type from being saved at all. (That is the default behavior, in fact.) - -After jpeg_read_header() completes, you can examine the special markers by -following the cinfo->marker_list pointer chain. All the special markers in -the file appear in this list, in order of their occurrence in the file (but -omitting any markers of types you didn't ask for). Both the original data -length and the saved data length are recorded for each list entry; the latter -will not exceed length_limit for the particular marker type. Note that these -lengths exclude the marker length word, whereas the stored representation -within the JPEG file includes it. (Hence the maximum data length is really -only 65533.) - -It is possible that additional special markers appear in the file beyond the -SOS marker at which jpeg_read_header stops; if so, the marker list will be -extended during reading of the rest of the file. This is not expected to be -common, however. If you are short on memory you may want to reset the length -limit to zero for all marker types after finishing jpeg_read_header, to -ensure that the max_memory_to_use setting cannot be exceeded due to addition -of later markers. - -The marker list remains stored until you call jpeg_finish_decompress or -jpeg_abort, at which point the memory is freed and the list is set to empty. -(jpeg_destroy also releases the storage, of course.) - -Note that the library is internally interested in APP0 and APP14 markers; -if you try to set a small nonzero length limit on these types, the library -will silently force the length up to the minimum it wants. (But you can set -a zero length limit to prevent them from being saved at all.) Also, in a -16-bit environment, the maximum length limit may be constrained to less than -65533 by malloc() limitations. It is therefore best not to assume that the -effective length limit is exactly what you set it to be. - - -If you want to supply your own marker-reading routine, you do it by calling -jpeg_set_marker_processor(). A marker processor routine must have the -signature - boolean jpeg_marker_parser_method (j_decompress_ptr cinfo) -Although the marker code is not explicitly passed, the routine can find it -in cinfo->unread_marker. At the time of call, the marker proper has been -read from the data source module. The processor routine is responsible for -reading the marker length word and the remaining parameter bytes, if any. -Return TRUE to indicate success. (FALSE should be returned only if you are -using a suspending data source and it tells you to suspend. See the standard -marker processors in jdmarker.c for appropriate coding methods if you need to -use a suspending data source.) - -If you override the default APP0 or APP14 processors, it is up to you to -recognize JFIF and Adobe markers if you want colorspace recognition to occur -properly. We recommend copying and extending the default processors if you -want to do that. (A better idea is to save these marker types for later -examination by calling jpeg_save_markers(); that method doesn't interfere -with the library's own processing of these markers.) - -jpeg_set_marker_processor() and jpeg_save_markers() are mutually exclusive ---- if you call one it overrides any previous call to the other, for the -particular marker type specified. - -A simple example of an external COM processor can be found in djpeg.c. -Also, see jpegtran.c for an example of using jpeg_save_markers. - - -Raw (downsampled) image data ----------------------------- - -Some applications need to supply already-downsampled image data to the JPEG -compressor, or to receive raw downsampled data from the decompressor. The -library supports this requirement by allowing the application to write or -read raw data, bypassing the normal preprocessing or postprocessing steps. -The interface is different from the standard one and is somewhat harder to -use. If your interest is merely in bypassing color conversion, we recommend -that you use the standard interface and simply set jpeg_color_space = -in_color_space (or jpeg_color_space = out_color_space for decompression). -The mechanism described in this section is necessary only to supply or -receive downsampled image data, in which not all components have the same -dimensions. - - -To compress raw data, you must supply the data in the colorspace to be used -in the JPEG file (please read the earlier section on Special color spaces) -and downsampled to the sampling factors specified in the JPEG parameters. -You must supply the data in the format used internally by the JPEG library, -namely a JSAMPIMAGE array. This is an array of pointers to two-dimensional -arrays, each of type JSAMPARRAY. Each 2-D array holds the values for one -color component. This structure is necessary since the components are of -different sizes. If the image dimensions are not a multiple of the MCU size, -you must also pad the data correctly (usually, this is done by replicating -the last column and/or row). The data must be padded to a multiple of a DCT -block in each component: that is, each downsampled row must contain a -multiple of 8 valid samples, and there must be a multiple of 8 sample rows -for each component. (For applications such as conversion of digital TV -images, the standard image size is usually a multiple of the DCT block size, -so that no padding need actually be done.) - -The procedure for compression of raw data is basically the same as normal -compression, except that you call jpeg_write_raw_data() in place of -jpeg_write_scanlines(). Before calling jpeg_start_compress(), you must do -the following: - * Set cinfo->raw_data_in to TRUE. (It is set FALSE by jpeg_set_defaults().) - This notifies the library that you will be supplying raw data. - * Ensure jpeg_color_space is correct --- an explicit jpeg_set_colorspace() - call is a good idea. Note that since color conversion is bypassed, - in_color_space is ignored, except that jpeg_set_defaults() uses it to - choose the default jpeg_color_space setting. - * Ensure the sampling factors, cinfo->comp_info[i].h_samp_factor and - cinfo->comp_info[i].v_samp_factor, are correct. Since these indicate the - dimensions of the data you are supplying, it's wise to set them - explicitly, rather than assuming the library's defaults are what you want. - -To pass raw data to the library, call jpeg_write_raw_data() in place of -jpeg_write_scanlines(). The two routines work similarly except that -jpeg_write_raw_data takes a JSAMPIMAGE data array rather than JSAMPARRAY. -The scanlines count passed to and returned from jpeg_write_raw_data is -measured in terms of the component with the largest v_samp_factor. - -jpeg_write_raw_data() processes one MCU row per call, which is to say -v_samp_factor*DCTSIZE sample rows of each component. The passed num_lines -value must be at least max_v_samp_factor*DCTSIZE, and the return value will -be exactly that amount (or possibly some multiple of that amount, in future -library versions). This is true even on the last call at the bottom of the -image; don't forget to pad your data as necessary. - -The required dimensions of the supplied data can be computed for each -component as - cinfo->comp_info[i].width_in_blocks*DCTSIZE samples per row - cinfo->comp_info[i].height_in_blocks*DCTSIZE rows in image -after jpeg_start_compress() has initialized those fields. If the valid data -is smaller than this, it must be padded appropriately. For some sampling -factors and image sizes, additional dummy DCT blocks are inserted to make -the image a multiple of the MCU dimensions. The library creates such dummy -blocks itself; it does not read them from your supplied data. Therefore you -need never pad by more than DCTSIZE samples. An example may help here. -Assume 2h2v downsampling of YCbCr data, that is - cinfo->comp_info[0].h_samp_factor = 2 for Y - cinfo->comp_info[0].v_samp_factor = 2 - cinfo->comp_info[1].h_samp_factor = 1 for Cb - cinfo->comp_info[1].v_samp_factor = 1 - cinfo->comp_info[2].h_samp_factor = 1 for Cr - cinfo->comp_info[2].v_samp_factor = 1 -and suppose that the nominal image dimensions (cinfo->image_width and -cinfo->image_height) are 101x101 pixels. Then jpeg_start_compress() will -compute downsampled_width = 101 and width_in_blocks = 13 for Y, -downsampled_width = 51 and width_in_blocks = 7 for Cb and Cr (and the same -for the height fields). You must pad the Y data to at least 13*8 = 104 -columns and rows, the Cb/Cr data to at least 7*8 = 56 columns and rows. The -MCU height is max_v_samp_factor = 2 DCT rows so you must pass at least 16 -scanlines on each call to jpeg_write_raw_data(), which is to say 16 actual -sample rows of Y and 8 each of Cb and Cr. A total of 7 MCU rows are needed, -so you must pass a total of 7*16 = 112 "scanlines". The last DCT block row -of Y data is dummy, so it doesn't matter what you pass for it in the data -arrays, but the scanlines count must total up to 112 so that all of the Cb -and Cr data gets passed. - -Output suspension is supported with raw-data compression: if the data -destination module suspends, jpeg_write_raw_data() will return 0. -In this case the same data rows must be passed again on the next call. - - -Decompression with raw data output implies bypassing all postprocessing: -you cannot ask for rescaling or color quantization, for instance. More -seriously, you must deal with the color space and sampling factors present in -the incoming file. If your application only handles, say, 2h1v YCbCr data, -you must check for and fail on other color spaces or other sampling factors. -The library will not convert to a different color space for you. - -To obtain raw data output, set cinfo->raw_data_out = TRUE before -jpeg_start_decompress() (it is set FALSE by jpeg_read_header()). Be sure to -verify that the color space and sampling factors are ones you can handle. -Then call jpeg_read_raw_data() in place of jpeg_read_scanlines(). The -decompression process is otherwise the same as usual. - -jpeg_read_raw_data() returns one MCU row per call, and thus you must pass a -buffer of at least max_v_samp_factor*DCTSIZE scanlines (scanline counting is -the same as for raw-data compression). The buffer you pass must be large -enough to hold the actual data plus padding to DCT-block boundaries. As with -compression, any entirely dummy DCT blocks are not processed so you need not -allocate space for them, but the total scanline count includes them. The -above example of computing buffer dimensions for raw-data compression is -equally valid for decompression. - -Input suspension is supported with raw-data decompression: if the data source -module suspends, jpeg_read_raw_data() will return 0. You can also use -buffered-image mode to read raw data in multiple passes. - - -Really raw data: DCT coefficients ---------------------------------- - -It is possible to read or write the contents of a JPEG file as raw DCT -coefficients. This facility is mainly intended for use in lossless -transcoding between different JPEG file formats. Other possible applications -include lossless cropping of a JPEG image, lossless reassembly of a -multi-strip or multi-tile TIFF/JPEG file into a single JPEG datastream, etc. - -To read the contents of a JPEG file as DCT coefficients, open the file and do -jpeg_read_header() as usual. But instead of calling jpeg_start_decompress() -and jpeg_read_scanlines(), call jpeg_read_coefficients(). This will read the -entire image into a set of virtual coefficient-block arrays, one array per -component. The return value is a pointer to an array of virtual-array -descriptors. Each virtual array can be accessed directly using the JPEG -memory manager's access_virt_barray method (see Memory management, below, -and also read structure.doc's discussion of virtual array handling). Or, -for simple transcoding to a different JPEG file format, the array list can -just be handed directly to jpeg_write_coefficients(). - -Each block in the block arrays contains quantized coefficient values in -normal array order (not JPEG zigzag order). The block arrays contain only -DCT blocks containing real data; any entirely-dummy blocks added to fill out -interleaved MCUs at the right or bottom edges of the image are discarded -during reading and are not stored in the block arrays. (The size of each -block array can be determined from the width_in_blocks and height_in_blocks -fields of the component's comp_info entry.) This is also the data format -expected by jpeg_write_coefficients(). - -When you are done using the virtual arrays, call jpeg_finish_decompress() -to release the array storage and return the decompression object to an idle -state; or just call jpeg_destroy() if you don't need to reuse the object. - -If you use a suspending data source, jpeg_read_coefficients() will return -NULL if it is forced to suspend; a non-NULL return value indicates successful -completion. You need not test for a NULL return value when using a -non-suspending data source. - -It is also possible to call jpeg_read_coefficients() to obtain access to the -decoder's coefficient arrays during a normal decode cycle in buffered-image -mode. This frammish might be useful for progressively displaying an incoming -image and then re-encoding it without loss. To do this, decode in buffered- -image mode as discussed previously, then call jpeg_read_coefficients() after -the last jpeg_finish_output() call. The arrays will be available for your use -until you call jpeg_finish_decompress(). - - -To write the contents of a JPEG file as DCT coefficients, you must provide -the DCT coefficients stored in virtual block arrays. You can either pass -block arrays read from an input JPEG file by jpeg_read_coefficients(), or -allocate virtual arrays from the JPEG compression object and fill them -yourself. In either case, jpeg_write_coefficients() is substituted for -jpeg_start_compress() and jpeg_write_scanlines(). Thus the sequence is - * Create compression object - * Set all compression parameters as necessary - * Request virtual arrays if needed - * jpeg_write_coefficients() - * jpeg_finish_compress() - * Destroy or re-use compression object -jpeg_write_coefficients() is passed a pointer to an array of virtual block -array descriptors; the number of arrays is equal to cinfo.num_components. - -The virtual arrays need only have been requested, not realized, before -jpeg_write_coefficients() is called. A side-effect of -jpeg_write_coefficients() is to realize any virtual arrays that have been -requested from the compression object's memory manager. Thus, when obtaining -the virtual arrays from the compression object, you should fill the arrays -after calling jpeg_write_coefficients(). The data is actually written out -when you call jpeg_finish_compress(); jpeg_write_coefficients() only writes -the file header. - -When writing raw DCT coefficients, it is crucial that the JPEG quantization -tables and sampling factors match the way the data was encoded, or the -resulting file will be invalid. For transcoding from an existing JPEG file, -we recommend using jpeg_copy_critical_parameters(). This routine initializes -all the compression parameters to default values (like jpeg_set_defaults()), -then copies the critical information from a source decompression object. -The decompression object should have just been used to read the entire -JPEG input file --- that is, it should be awaiting jpeg_finish_decompress(). - -jpeg_write_coefficients() marks all tables stored in the compression object -as needing to be written to the output file (thus, it acts like -jpeg_start_compress(cinfo, TRUE)). This is for safety's sake, to avoid -emitting abbreviated JPEG files by accident. If you really want to emit an -abbreviated JPEG file, call jpeg_suppress_tables(), or set the tables' -individual sent_table flags, between calling jpeg_write_coefficients() and -jpeg_finish_compress(). - - -Progress monitoring -------------------- - -Some applications may need to regain control from the JPEG library every so -often. The typical use of this feature is to produce a percent-done bar or -other progress display. (For a simple example, see cjpeg.c or djpeg.c.) -Although you do get control back frequently during the data-transferring pass -(the jpeg_read_scanlines or jpeg_write_scanlines loop), any additional passes -will occur inside jpeg_finish_compress or jpeg_start_decompress; those -routines may take a long time to execute, and you don't get control back -until they are done. - -You can define a progress-monitor routine which will be called periodically -by the library. No guarantees are made about how often this call will occur, -so we don't recommend you use it for mouse tracking or anything like that. -At present, a call will occur once per MCU row, scanline, or sample row -group, whichever unit is convenient for the current processing mode; so the -wider the image, the longer the time between calls. During the data -transferring pass, only one call occurs per call of jpeg_read_scanlines or -jpeg_write_scanlines, so don't pass a large number of scanlines at once if -you want fine resolution in the progress count. (If you really need to use -the callback mechanism for time-critical tasks like mouse tracking, you could -insert additional calls inside some of the library's inner loops.) - -To establish a progress-monitor callback, create a struct jpeg_progress_mgr, -fill in its progress_monitor field with a pointer to your callback routine, -and set cinfo->progress to point to the struct. The callback will be called -whenever cinfo->progress is non-NULL. (This pointer is set to NULL by -jpeg_create_compress or jpeg_create_decompress; the library will not change -it thereafter. So if you allocate dynamic storage for the progress struct, -make sure it will live as long as the JPEG object does. Allocating from the -JPEG memory manager with lifetime JPOOL_PERMANENT will work nicely.) You -can use the same callback routine for both compression and decompression. - -The jpeg_progress_mgr struct contains four fields which are set by the library: - long pass_counter; /* work units completed in this pass */ - long pass_limit; /* total number of work units in this pass */ - int completed_passes; /* passes completed so far */ - int total_passes; /* total number of passes expected */ -During any one pass, pass_counter increases from 0 up to (not including) -pass_limit; the step size is usually but not necessarily 1. The pass_limit -value may change from one pass to another. The expected total number of -passes is in total_passes, and the number of passes already completed is in -completed_passes. Thus the fraction of work completed may be estimated as - completed_passes + (pass_counter/pass_limit) - -------------------------------------------- - total_passes -ignoring the fact that the passes may not be equal amounts of work. - -When decompressing, pass_limit can even change within a pass, because it -depends on the number of scans in the JPEG file, which isn't always known in -advance. The computed fraction-of-work-done may jump suddenly (if the library -discovers it has overestimated the number of scans) or even decrease (in the -opposite case). It is not wise to put great faith in the work estimate. - -When using the decompressor's buffered-image mode, the progress monitor work -estimate is likely to be completely unhelpful, because the library has no way -to know how many output passes will be demanded of it. Currently, the library -sets total_passes based on the assumption that there will be one more output -pass if the input file end hasn't yet been read (jpeg_input_complete() isn't -TRUE), but no more output passes if the file end has been reached when the -output pass is started. This means that total_passes will rise as additional -output passes are requested. If you have a way of determining the input file -size, estimating progress based on the fraction of the file that's been read -will probably be more useful than using the library's value. - - -Memory management ------------------ - -This section covers some key facts about the JPEG library's built-in memory -manager. For more info, please read structure.doc's section about the memory -manager, and consult the source code if necessary. - -All memory and temporary file allocation within the library is done via the -memory manager. If necessary, you can replace the "back end" of the memory -manager to control allocation yourself (for example, if you don't want the -library to use malloc() and free() for some reason). - -Some data is allocated "permanently" and will not be freed until the JPEG -object is destroyed. Most data is allocated "per image" and is freed by -jpeg_finish_compress, jpeg_finish_decompress, or jpeg_abort. You can call the -memory manager yourself to allocate structures that will automatically be -freed at these times. Typical code for this is - ptr = (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, size); -Use JPOOL_PERMANENT to get storage that lasts as long as the JPEG object. -Use alloc_large instead of alloc_small for anything bigger than a few Kbytes. -There are also alloc_sarray and alloc_barray routines that automatically -build 2-D sample or block arrays. - -The library's minimum space requirements to process an image depend on the -image's width, but not on its height, because the library ordinarily works -with "strip" buffers that are as wide as the image but just a few rows high. -Some operating modes (eg, two-pass color quantization) require full-image -buffers. Such buffers are treated as "virtual arrays": only the current strip -need be in memory, and the rest can be swapped out to a temporary file. - -If you use the simplest memory manager back end (jmemnobs.c), then no -temporary files are used; virtual arrays are simply malloc()'d. Images bigger -than memory can be processed only if your system supports virtual memory. -The other memory manager back ends support temporary files of various flavors -and thus work in machines without virtual memory. They may also be useful on -Unix machines if you need to process images that exceed available swap space. - -When using temporary files, the library will make the in-memory buffers for -its virtual arrays just big enough to stay within a "maximum memory" setting. -Your application can set this limit by setting cinfo->mem->max_memory_to_use -after creating the JPEG object. (Of course, there is still a minimum size for -the buffers, so the max-memory setting is effective only if it is bigger than -the minimum space needed.) If you allocate any large structures yourself, you -must allocate them before jpeg_start_compress() or jpeg_start_decompress() in -order to have them counted against the max memory limit. Also keep in mind -that space allocated with alloc_small() is ignored, on the assumption that -it's too small to be worth worrying about; so a reasonable safety margin -should be left when setting max_memory_to_use. - -If you use the jmemname.c or jmemdos.c memory manager back end, it is -important to clean up the JPEG object properly to ensure that the temporary -files get deleted. (This is especially crucial with jmemdos.c, where the -"temporary files" may be extended-memory segments; if they are not freed, -DOS will require a reboot to recover the memory.) Thus, with these memory -managers, it's a good idea to provide a signal handler that will trap any -early exit from your program. The handler should call either jpeg_abort() -or jpeg_destroy() for any active JPEG objects. A handler is not needed with -jmemnobs.c, and shouldn't be necessary with jmemansi.c or jmemmac.c either, -since the C library is supposed to take care of deleting files made with -tmpfile(). - - -Memory usage ------------- - -Working memory requirements while performing compression or decompression -depend on image dimensions, image characteristics (such as colorspace and -JPEG process), and operating mode (application-selected options). - -As of v6b, the decompressor requires: - 1. About 24K in more-or-less-fixed-size data. This varies a bit depending - on operating mode and image characteristics (particularly color vs. - grayscale), but it doesn't depend on image dimensions. - 2. Strip buffers (of size proportional to the image width) for IDCT and - upsampling results. The worst case for commonly used sampling factors - is about 34 bytes * width in pixels for a color image. A grayscale image - only needs about 8 bytes per pixel column. - 3. A full-image DCT coefficient buffer is needed to decode a multi-scan JPEG - file (including progressive JPEGs), or whenever you select buffered-image - mode. This takes 2 bytes/coefficient. At typical 2x2 sampling, that's - 3 bytes per pixel for a color image. Worst case (1x1 sampling) requires - 6 bytes/pixel. For grayscale, figure 2 bytes/pixel. - 4. To perform 2-pass color quantization, the decompressor also needs a - 128K color lookup table and a full-image pixel buffer (3 bytes/pixel). -This does not count any memory allocated by the application, such as a -buffer to hold the final output image. - -The above figures are valid for 8-bit JPEG data precision and a machine with -32-bit ints. For 12-bit JPEG data, double the size of the strip buffers and -quantization pixel buffer. The "fixed-size" data will be somewhat smaller -with 16-bit ints, larger with 64-bit ints. Also, CMYK or other unusual -color spaces will require different amounts of space. - -The full-image coefficient and pixel buffers, if needed at all, do not -have to be fully RAM resident; you can have the library use temporary -files instead when the total memory usage would exceed a limit you set. -(But if your OS supports virtual memory, it's probably better to just use -jmemnobs and let the OS do the swapping.) - -The compressor's memory requirements are similar, except that it has no need -for color quantization. Also, it needs a full-image DCT coefficient buffer -if Huffman-table optimization is asked for, even if progressive mode is not -requested. - -If you need more detailed information about memory usage in a particular -situation, you can enable the MEM_STATS code in jmemmgr.c. - - -Library compile-time options ----------------------------- - -A number of compile-time options are available by modifying jmorecfg.h. - -The JPEG standard provides for both the baseline 8-bit DCT process and -a 12-bit DCT process. The IJG code supports 12-bit lossy JPEG if you define -BITS_IN_JSAMPLE as 12 rather than 8. Note that this causes JSAMPLE to be -larger than a char, so it affects the surrounding application's image data. -The sample applications cjpeg and djpeg can support 12-bit mode only for PPM -and GIF file formats; you must disable the other file formats to compile a -12-bit cjpeg or djpeg. (install.doc has more information about that.) -At present, a 12-bit library can handle *only* 12-bit images, not both -precisions. (If you need to include both 8- and 12-bit libraries in a single -application, you could probably do it by defining NEED_SHORT_EXTERNAL_NAMES -for just one of the copies. You'd have to access the 8-bit and 12-bit copies -from separate application source files. This is untested ... if you try it, -we'd like to hear whether it works!) - -Note that a 12-bit library always compresses in Huffman optimization mode, -in order to generate valid Huffman tables. This is necessary because our -default Huffman tables only cover 8-bit data. If you need to output 12-bit -files in one pass, you'll have to supply suitable default Huffman tables. -You may also want to supply your own DCT quantization tables; the existing -quality-scaling code has been developed for 8-bit use, and probably doesn't -generate especially good tables for 12-bit. - -The maximum number of components (color channels) in the image is determined -by MAX_COMPONENTS. The JPEG standard allows up to 255 components, but we -expect that few applications will need more than four or so. - -On machines with unusual data type sizes, you may be able to improve -performance or reduce memory space by tweaking the various typedefs in -jmorecfg.h. In particular, on some RISC CPUs, access to arrays of "short"s -is quite slow; consider trading memory for speed by making JCOEF, INT16, and -UINT16 be "int" or "unsigned int". UINT8 is also a candidate to become int. -You probably don't want to make JSAMPLE be int unless you have lots of memory -to burn. - -You can reduce the size of the library by compiling out various optional -functions. To do this, undefine xxx_SUPPORTED symbols as necessary. - -You can also save a few K by not having text error messages in the library; -the standard error message table occupies about 5Kb. This is particularly -reasonable for embedded applications where there's no good way to display -a message anyway. To do this, remove the creation of the message table -(jpeg_std_message_table[]) from jerror.c, and alter format_message to do -something reasonable without it. You could output the numeric value of the -message code number, for example. If you do this, you can also save a couple -more K by modifying the TRACEMSn() macros in jerror.h to expand to nothing; -you don't need trace capability anyway, right? - - -Portability considerations --------------------------- - -The JPEG library has been written to be extremely portable; the sample -applications cjpeg and djpeg are slightly less so. This section summarizes -the design goals in this area. (If you encounter any bugs that cause the -library to be less portable than is claimed here, we'd appreciate hearing -about them.) - -The code works fine on ANSI C, C++, and pre-ANSI C compilers, using any of -the popular system include file setups, and some not-so-popular ones too. -See install.doc for configuration procedures. - -The code is not dependent on the exact sizes of the C data types. As -distributed, we make the assumptions that - char is at least 8 bits wide - short is at least 16 bits wide - int is at least 16 bits wide - long is at least 32 bits wide -(These are the minimum requirements of the ANSI C standard.) Wider types will -work fine, although memory may be used inefficiently if char is much larger -than 8 bits or short is much bigger than 16 bits. The code should work -equally well with 16- or 32-bit ints. - -In a system where these assumptions are not met, you may be able to make the -code work by modifying the typedefs in jmorecfg.h. However, you will probably -have difficulty if int is less than 16 bits wide, since references to plain -int abound in the code. - -char can be either signed or unsigned, although the code runs faster if an -unsigned char type is available. If char is wider than 8 bits, you will need -to redefine JOCTET and/or provide custom data source/destination managers so -that JOCTET represents exactly 8 bits of data on external storage. - -The JPEG library proper does not assume ASCII representation of characters. -But some of the image file I/O modules in cjpeg/djpeg do have ASCII -dependencies in file-header manipulation; so does cjpeg's select_file_type() -routine. - -The JPEG library does not rely heavily on the C library. In particular, C -stdio is used only by the data source/destination modules and the error -handler, all of which are application-replaceable. (cjpeg/djpeg are more -heavily dependent on stdio.) malloc and free are called only from the memory -manager "back end" module, so you can use a different memory allocator by -replacing that one file. - -The code generally assumes that C names must be unique in the first 15 -characters. However, global function names can be made unique in the -first 6 characters by defining NEED_SHORT_EXTERNAL_NAMES. - -More info about porting the code may be gleaned by reading jconfig.doc, -jmorecfg.h, and jinclude.h. - - -Notes for MS-DOS implementors ------------------------------ - -The IJG code is designed to work efficiently in 80x86 "small" or "medium" -memory models (i.e., data pointers are 16 bits unless explicitly declared -"far"; code pointers can be either size). You may be able to use small -model to compile cjpeg or djpeg by itself, but you will probably have to use -medium model for any larger application. This won't make much difference in -performance. You *will* take a noticeable performance hit if you use a -large-data memory model (perhaps 10%-25%), and you should avoid "huge" model -if at all possible. - -The JPEG library typically needs 2Kb-3Kb of stack space. It will also -malloc about 20K-30K of near heap space while executing (and lots of far -heap, but that doesn't count in this calculation). This figure will vary -depending on selected operating mode, and to a lesser extent on image size. -There is also about 5Kb-6Kb of constant data which will be allocated in the -near data segment (about 4Kb of this is the error message table). -Thus you have perhaps 20K available for other modules' static data and near -heap space before you need to go to a larger memory model. The C library's -static data will account for several K of this, but that still leaves a good -deal for your needs. (If you are tight on space, you could reduce the sizes -of the I/O buffers allocated by jdatasrc.c and jdatadst.c, say from 4K to -1K. Another possibility is to move the error message table to far memory; -this should be doable with only localized hacking on jerror.c.) - -About 2K of the near heap space is "permanent" memory that will not be -released until you destroy the JPEG object. This is only an issue if you -save a JPEG object between compression or decompression operations. - -Far data space may also be a tight resource when you are dealing with large -images. The most memory-intensive case is decompression with two-pass color -quantization, or single-pass quantization to an externally supplied color -map. This requires a 128Kb color lookup table plus strip buffers amounting -to about 40 bytes per column for typical sampling ratios (eg, about 25600 -bytes for a 640-pixel-wide image). You may not be able to process wide -images if you have large data structures of your own. - -Of course, all of these concerns vanish if you use a 32-bit flat-memory-model -compiler, such as DJGPP or Watcom C. We highly recommend flat model if you -can use it; the JPEG library is significantly faster in flat model. diff --git a/Build/source/libs/jpeg/ltconfig b/Build/source/libs/jpeg/ltconfig deleted file mode 100644 index 2347e694395..00000000000 --- a/Build/source/libs/jpeg/ltconfig +++ /dev/null @@ -1,1512 +0,0 @@ -#! /bin/sh - -# ltconfig - Create a system-specific libtool. -# Copyright (C) 1996-1998 Free Software Foundation, Inc. -# Gordon Matzigkeit , 1996 -# -# 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 -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# 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. - -# A lot of this script is taken from autoconf-2.10. - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -if test "${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi - -echo=echo -if test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then : -else - # The Solaris and AIX default echo program unquotes backslashes. - # This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # So, we emulate echo with printf '%s\n' - echo="printf %s\\n" - if test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then : - else - # Oops. We have no working printf. Try to find a not-so-buggy echo. - echo=echo - IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" - for dir in $PATH /usr/ucb; do - if test -f $dir/echo && test "X`$dir/echo '\t'`" = 'X\t'; then - echo="$dir/echo" - break - fi - done - IFS="$save_ifs" - fi -fi - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e s/^X//' -sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' - -# The name of this program. -progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'` - -# Constants: -PROGRAM=ltconfig -PACKAGE=libtool -VERSION=1.2 -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.c $LIBS 1>&5' -rm="rm -f" - -help="Try \`$progname --help' for more information." - -# Global variables: -can_build_shared=yes -enable_shared=yes -# All known linkers require a `.a' archive for static linking. -enable_static=yes -ltmain= -silent= -srcdir= -ac_config_guess= -ac_config_sub= -host= -nonopt= -verify_host=yes -with_gcc=no -with_gnu_ld=no - -old_AR="$AR" -old_CC="$CC" -old_CFLAGS="$CFLAGS" -old_CPPFLAGS="$CPPFLAGS" -old_LD="$LD" -old_LN_S="$LN_S" -old_NM="$NM" -old_RANLIB="$RANLIB" - -# Parse the command line options. -args= -prev= -for option -do - case "$option" in - -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - eval "$prev=\$option" - prev= - continue - fi - - case "$option" in - --help) cat <&2 - echo "$help" 1>&2 - exit 1 - ;; - - *) - if test -z "$ltmain"; then - ltmain="$option" - elif test -z "$host"; then -# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1 -# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then -# echo "$progname: warning \`$option' is not a valid host type" 1>&2 -# fi - host="$option" - else - echo "$progname: too many arguments" 1>&2 - echo "$help" 1>&2 - exit 1 - fi ;; - esac -done - -if test -z "$ltmain"; then - echo "$progname: you must specify a LTMAIN file" 1>&2 - echo "$help" 1>&2 - exit 1 -fi - -if test -f "$ltmain"; then : -else - echo "$progname: \`$ltmain' does not exist" 1>&2 - echo "$help" 1>&2 - exit 1 -fi - -# Quote any args containing shell metacharacters. -ltconfig_args= -for arg -do - case "$arg" in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ltconfig_args="$ltconfig_args '$arg'" ;; - *) ltconfig_args="$ltconfig_args $arg" ;; - esac -done - -# A relevant subset of AC_INIT. - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 5 compiler messages saved in config.log -# 6 checking for... messages and results -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>>./config.log - -# NLS nuisances. -# Only set LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LANG+set}" = set; then LANG=C; export LANG; fi - -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi - -if test -z "$srcdir"; then - # Assume the source directory is the same one as the path to ltmain.sh. - srcdir=`$echo "$ltmain" | $Xsed -e 's%/[^/]*$%%'` - test "$srcdir" = "$ltmain" && srcdir=. -fi - -trap "$rm conftest*; exit 1" 1 2 15 -if test "$verify_host" = yes; then - # Check for config.guess and config.sub. - ac_aux_dir= - for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/config.guess; then - ac_aux_dir=$ac_dir - break - fi - done - if test -z "$ac_aux_dir"; then - echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2 - echo "$help" 1>&2 - exit 1 - fi - ac_config_guess=$ac_aux_dir/config.guess - ac_config_sub=$ac_aux_dir/config.sub - - # Make sure we can run config.sub. - if $ac_config_sub sun4 >/dev/null 2>&1; then : - else - echo "$progname: cannot run $ac_config_sub" 1>&2 - echo "$help" 1>&2 - exit 1 - fi - - echo $ac_n "checking host system type""... $ac_c" 1>&6 - - host_alias=$host - case "$host_alias" in - "") - if host_alias=`$ac_config_guess`; then : - else - echo "$progname: cannot guess host type; you must specify one" 1>&2 - echo "$help" 1>&2 - exit 1 - fi ;; - esac - host=`$ac_config_sub $host_alias` - echo "$ac_t$host" 1>&6 - - # Make sure the host verified. - test -z "$host" && exit 1 - -elif test -z "$host"; then - echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2 - echo "$help" 1>&2 - exit 1 -else - host_alias=$host -fi - -# Transform linux* to *-*-linux-gnu*, to support old configure scripts. -case "$host_os" in -linux-gnu*) ;; -linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` -esac - -host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - -case "$host_os" in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "${COLLECT_NAMES+set}" != set; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR cru $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -# Set a sane default for `AR'. -test -z "$AR" && AR=ar - -# If RANLIB is not set, then run the test. -if test "${RANLIB+set}" != "set"; then - result=no - - echo $ac_n "checking for ranlib... $ac_c" 1>&6 - IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" - for dir in $PATH; do - test -z "$dir" && dir=. - if test -f $dir/ranlib; then - RANLIB="ranlib" - result="ranlib" - break - fi - done - IFS="$save_ifs" - - echo "$ac_t$result" 1>&6 -fi - -if test -n "$RANLIB"; then - old_archive_cmds="$old_archive_cmds;\$RANLIB \$oldlib" - old_postinstall_cmds="\$RANLIB \$oldlib;$old_postinstall_cmds" -fi - -# Check to see if we are using GCC. -if test "$with_gcc" != yes || test -z "$CC"; then - # If CC is not set, then try to find GCC or a usable CC. - if test -z "$CC"; then - echo $ac_n "checking for gcc... $ac_c" 1>&6 - IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" - for dir in $PATH; do - IFS="$save_ifs" - test -z "$dir" && dir=. - if test -f $dir/gcc; then - CC="gcc" - break - fi - done - IFS="$save_ifs" - - if test -n "$CC"; then - echo "$ac_t$CC" 1>&6 - else - echo "$ac_t"no 1>&6 - fi - fi - - # Not "gcc", so try "cc", rejecting "/usr/ucb/cc". - if test -z "$CC"; then - echo $ac_n "checking for cc... $ac_c" 1>&6 - IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" - cc_rejected=no - for dir in $PATH; do - test -z "$dir" && dir=. - if test -f $dir/cc; then - if test "$dir/cc" = "/usr/ucb/cc"; then - cc_rejected=yes - continue - fi - CC="cc" - break - fi - done - IFS="$save_ifs" - if test $cc_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $CC - shift - if test $# -gt 0; then - # We chose a different compiler from the bogus one. - # However, it has the same name, so the bogon will be chosen - # first if we set CC to just the name; use the full file name. - shift - set dummy "$dir/cc" "$@" - shift - CC="$@" - fi - fi - - if test -n "$CC"; then - echo "$ac_t$CC" 1>&6 - else - echo "$ac_t"no 1>&6 - fi - - if test -z "$CC"; then - echo "$progname: error: no acceptable cc found in \$PATH" 1>&2 - exit 1 - fi - fi - - # Now see if the compiler is really GCC. - with_gcc=no - echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6 - echo "$progname:424: checking whether we are using GNU C" >&5 - - $rm conftest.c - cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - with_gcc=yes - fi - $rm conftest.c - echo "$ac_t$with_gcc" 1>&6 -fi - -# Allow CC to be a program name with arguments. -set dummy $CC -compiler="$2" - -echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6 -pic_flag= -special_shlib_compile_flags= -wl= -link_static_flag= -no_builtin_flag= - -if test "$with_gcc" = yes; then - wl='-Wl,' - link_static_flag='-static' - no_builtin_flag=' -fno-builtin' - - case "$host_os" in - aix3* | aix4* | irix5* | irix6* | osf3* | osf4*) - # PIC is the default for these OSes. - ;; - os2*) - # We can build DLLs from non-PIC. - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - pic_flag='-m68020 -resident32 -malways-restore-a4' - ;; - *) - pic_flag='-fPIC' - ;; - esac -else - # PORTME Check for PIC flags for the system compiler. - case "$host_os" in - aix3* | aix4*) - # All AIX code is PIC. - link_static_flag='-bnso -bI:/lib/syscalls.exp' - ;; - - hpux9* | hpux10*) - # Is there a better link_static_flag that works with the bundled CC? - wl='-Wl,' - link_static_flag="${wl}-a ${wl}archive" - pic_flag='+Z' - ;; - - irix5* | irix6*) - wl='-Wl,' - link_static_flag='-non_shared' - # PIC (with -KPIC) is the default. - ;; - - os2*) - # We can build DLLs from non-PIC. - ;; - - osf3* | osf4*) - # All OSF/1 code is PIC. - wl='-Wl,' - link_static_flag='-non_shared' - ;; - - sco3.2v5*) - pic_flag='-Kpic' - link_static_flag='-dn' - special_shlib_compile_flags='-belf' - ;; - - solaris2*) - pic_flag='-KPIC' - link_static_flag='-Bstatic' - wl='-Wl,' - ;; - - sunos4*) - pic_flag='-PIC' - link_static_flag='-Bstatic' - wl='-Qoption ld ' - ;; - - sysv4.2uw2*) - pic_flag='-KPIC' - link_static_flag='-Bstatic' - wl='-Wl,' - ;; - - uts4*) - pic_flag='-pic' - link_static_flag='-Bstatic' - ;; - - *) - can_build_shared=no - ;; - esac -fi - -if test -n "$pic_flag"; then - echo "$ac_t$pic_flag" 1>&6 - - # Check to make sure the pic_flag actually works. - echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6 - $rm conftest* - echo > conftest.c - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $pic_flag -DPIC" - echo "$progname:547: checking if $compiler PIC flag $pic_flag works" >&5 - if { (eval echo $progname:548: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then - # Append any warnings to the config.log. - cat conftest.err 1>&5 - - # On HP-UX, both CC and GCC only warn that PIC is supported... then they - # create non-PIC objects. So, if there were any warnings, we assume that - # PIC is not supported. - if test -s conftest.err; then - echo "$ac_t"no 1>&6 - can_build_shared=no - pic_flag= - else - echo "$ac_t"yes 1>&6 - pic_flag=" $pic_flag" - fi - else - # Append any errors to the config.log. - cat conftest.err 1>&5 - can_build_shared=no - pic_flag= - echo "$ac_t"no 1>&6 - fi - CFLAGS="$save_CFLAGS" - $rm conftest* -else - echo "$ac_t"none 1>&6 -fi - -# Check for any special shared library compilation flags. -if test -n "$special_shlib_compile_flags"; then - echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2 - if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then : - else - echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2 - can_build_shared=no - fi -fi - -echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6 -$rm conftest* -echo 'main(){return(0);}' > conftest.c -save_LDFLAGS="$LDFLAGS" -LDFLAGS="$LDFLAGS $link_static_flag" -echo "$progname:591: checking if $compiler static flag $link_static_flag works" >&5 -if { (eval echo $progname:592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - echo "$ac_t$link_static_flag" 1>&6 -else - echo "$ac_t"none 1>&6 - link_static_flag= -fi -LDFLAGS="$save_LDFLAGS" -$rm conftest* - -if test -z "$LN_S"; then - # Check to see if we can use ln -s, or we need hard links. - echo $ac_n "checking whether ln -s works... $ac_c" 1>&6 - $rm conftestdata - if ln -s X conftestdata 2>/dev/null; then - $rm conftestdata - LN_S="ln -s" - else - LN_S=ln - fi - if test "$LN_S" = "ln -s"; then - echo "$ac_t"yes 1>&6 - else - echo "$ac_t"no 1>&6 - fi -fi - -# Make sure LD is an absolute path. -if test -z "$LD"; then - ac_prog=ld - if test "$with_gcc" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6 - echo "$progname:624: checking for ld used by GCC" >&5 - ac_prog=`($CC -print-prog-name=ld) 2>&5` - case "$ac_prog" in - # Accept absolute paths. - /* | [A-Za-z]:\\*) - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we are not using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac - elif test "$with_gnu_ld" = yes; then - echo $ac_n "checking for GNU ld... $ac_c" 1>&6 - echo "$progname:642: checking for GNU ld" >&5 - else - echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 - echo "$progname:645: checking for non-GNU ld" >&5 - fi - - if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog"; then - LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then - test "$with_gnu_ld" != no && break - else - test "$with_gnu_ld" != yes && break - fi - fi - done - IFS="$ac_save_ifs" - fi - - if test -n "$LD"; then - echo "$ac_t$LD" 1>&6 - else - echo "$ac_t"no 1>&6 - fi - - if test -z "$LD"; then - echo "$progname: error: no acceptable ld found in \$PATH" 1>&2 - exit 1 - fi -fi - -# Check to see if it really is or is not GNU ld. -echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6 -# I'd rather use --version here, but apparently some GNU ld's only accept -v. -if $LD -v 2>&1 &5; then - with_gnu_ld=yes -else - with_gnu_ld=no -fi -echo "$ac_t$with_gnu_ld" 1>&6 - -# See if the linker supports building shared libraries. -echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6 - -allow_undefined_flag= -no_undefined_flag= -archive_cmds= -old_archive_from_new_cmds= -export_dynamic_flag_spec= -hardcode_libdir_flag_spec= -hardcode_libdir_separator= -hardcode_direct=no -hardcode_minus_L=no -hardcode_shlibpath_var=unsupported -runpath_var= - -case "$host_os" in -amigaos* | sunos4*) - # On these operating systems, we should treat GNU ld like the system ld. - gnu_ld_acts_native=yes - ;; -*) - gnu_ld_acts_native=no - ;; -esac - -ld_shlibs=yes -if test "$with_gnu_ld" = yes && test "$gnu_ld_acts_native" != yes; then - - # See if GNU ld supports shared libraries. - if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared ${wl}-soname $wl$soname -o $lib$libobjs' - runpath_var=LD_RUN_PATH - ld_shlibs=yes - else - ld_shlibs=no - fi - - if test "$ld_shlibs" = yes; then - hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - fi -else - # PORTME fill in a description of your system's linker (not GNU ld) - case "$host_os" in - aix3*) - allow_undefined_flag=unsupported - archive_cmds='$NM$libobjs | $global_symbol_pipe | sed '\''s/.* //'\'' > $lib.exp;$LD -o $objdir/$soname$libobjs -bE:$lib.exp -T512 -H512 -bM:SRE;$AR cru $lib $objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$with_gcc" = yes && test -z "$link_static_flag"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix4*) - allow_undefined_flag=unsupported - archive_cmds='$NM$libobjs | $global_symbol_pipe | sed '\''s/.* //'\'' > $lib.exp;$CC -o $objdir/$soname$libobjs ${wl}-bE:$lib.exp ${wl}-bM:SRE ${wl}-bnoentry;$AR cru $lib $objdir/$soname' - hardcode_direct=yes - hardcode_minus_L=yes - ;; - - amigaos*) - archive_cmds='$rm $objdir/a2ixlibrary.data;$echo "#define NAME $libname" > $objdir/a2ixlibrary.data;$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data;$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data;$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data;$AR cru $lib$libobjs;$RANLIB $lib;(cd $objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib$libobjs /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib$libobjs' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3, at last, uses gcc -shared to do shared libraries. - freebsd3*) - archive_cmds='$CC -shared -o $lib$libobjs' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - archive_cmds='$rm $objdir/$soname;$LD -b +s +b $install_libdir -o $objdir/$soname$libobjs;mv $objdir/$soname $lib' - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - archive_cmds='$LD -b +h $soname +s +b $install_libdir -o $lib$libobjs' - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - irix5* | irix6*) - archive_cmds='$LD -shared -o $lib -soname $soname -set_version $verstring$libobjs' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - ;; - - netbsd*) - # Tested with NetBSD 1.2 ld - archive_cmds='$LD -Bshareable -o $lib$libobjs' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - openbsd*) - archive_cmds='$LD -Bshareable -o $lib$libobjs' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def;$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def;$echo DATA >> $objdir/$libname.def;$echo " SINGLE NONSHARED" >> $objdir/$libname.def;$echo EXPORTS >> $objdir/$libname.def;emxexp$libobjs >> $objdir/$libname.def;$CC -Zdll -Zcrtdll -o $lib$libobjs $objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def' - ;; - - osf3* | osf4*) - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} -o $lib -soname $soname -set_version $verstring$libobjs$deplibs' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - sco3.2v5*) - archive_cmds='$LD -G -o $lib$libobjs' - hardcode_direct=yes - ;; - - solaris2*) - no_undefined_flag=' -z text' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib$libobjs' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - - # Solaris 2 before 2.5 hardcodes -L paths. - case "$host_os" in - solaris2.[0-4]*) - hardcode_minus_L=yes - ;; - esac - ;; - - sunos4*) - if test "$with_gcc" = yes; then - archive_cmds='$CC -shared -o $lib$libobjs' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib$libobjs' - fi - - if test "$with_gnu_ld" = yes; then - export_dynamic_flag_spec='${wl}-export-dynamic' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib$libobjs' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=no - hardcode_minus_L=no - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - can_build_shared=no - ;; - esac -fi -echo "$ac_t$ld_shlibs" 1>&6 - -if test -z "$NM"; then - echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6 - case "$NM" in - /* | [A-Za-z]:\\*) ;; # Let the user override the test with a path. - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/nm; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - NM="$ac_dir/nm -B" - elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - NM="$ac_dir/nm -p" - else - NM="$ac_dir/nm" - fi - break - fi - done - IFS="$ac_save_ifs" - test -z "$NM" && NM=nm - ;; - esac - echo "$ac_t$NM" 1>&6 -fi - -# Check for command to grab the raw symbol name followed by C symbol from nm. -echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6 - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRSTU]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Transform the above into a raw symbol and a C symbol. -symxfrm='\1 \1' - -# Define system-specific variables. -case "$host_os" in -aix*) - symcode='[BCDTU]' - ;; -irix*) - # Cannot use undefined symbols on IRIX because inlined functions mess us up. - symcode='[BCDEGRST]' - ;; -solaris2*) - symcode='[BDTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then - symcode='[ABCDGISTUW]' -fi - -# Write the raw and C identifiers. -global_symbol_pipe="sed -n -e 's/^.* $symcode $sympat$/$symxfrm/p'" - -# Check to see that the pipe works correctly. -pipe_works=no -$rm conftest* -cat > conftest.c <&5 -if { (eval echo $progname:972: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.o; then - # Now try to grab the symbols. - nlist=conftest.nm - if { echo "$progname:975: eval \"$NM conftest.o | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.o | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then - - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - wcout=`wc "$nlist" 2>/dev/null` - count=`$echo "X$wcout" | $Xsed -e 's/^[ ]*\([0-9][0-9]*\).*$/\1/'` - (test "$count" -ge 0) 2>/dev/null || count=-1 - else - rm -f "$nlist"T - count=-1 - fi - - # Make sure that we snagged all the symbols we need. - if egrep ' nm_test_var$' "$nlist" >/dev/null; then - if egrep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.c -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - sed 's/^.* \(.*\)$/extern char \1;/' < "$nlist" >> conftest.c - - cat <> conftest.c -#if defined (__STDC__) && __STDC__ -# define __ptr_t void * -#else -# define __ptr_t char * -#endif - -/* The number of symbols in dld_preloaded_symbols, -1 if unsorted. */ -int dld_preloaded_symbol_count = $count; - -/* The mapping between symbol names and symbols. */ -struct { - char *name; - __ptr_t address; -} -dld_preloaded_symbols[] = -{ -EOF - sed 's/^\(.*\) \(.*\)$/ {"\1", (__ptr_t) \&\2},/' < "$nlist" >> conftest.c - cat <<\EOF >> conftest.c - {0, (__ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.o conftestm.o - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS='conftestm.o' - CFLAGS="$CFLAGS$no_builtin_flag" - if { (eval echo $progname:1033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - pipe_works=yes - else - echo "$progname: failed program was:" >&5 - cat conftest.c >&5 - fi - LIBS="$save_LIBS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $global_symbol_pipe" >&5 - fi -else - echo "$progname: failed program was:" >&5 - cat conftest.c >&5 -fi -$rm conftest* - -# Do not use the global_symbol_pipe unless it works. -echo "$ac_t$pipe_works" 1>&6 -test "$pipe_works" = yes || global_symbol_pipe= - -# Check hardcoding attributes. -echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6 -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || \ - test -n "$runpath_var"; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct" != no && \ - test "$hardcode_minus_L" != no && \ - test "$hardcode_shlibpath_var" != no; then - - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -elif test "$hardcode_direct" != yes && \ - test "$hardcode_minus_L" != yes && \ - test "$hardcode_shlibpath_var" != yes; then - # We cannot hardcode anything. - hardcode_action=unsupported -else - # We can only hardcode existing directories. - hardcode_action=relink -fi -echo "$ac_t$hardcode_action" 1>&6 -test "$hardcode_action" = unsupported && can_build_shared=no - - -reload_flag= -reload_cmds='$LD$reload_flag -o $output$reload_objs' -echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6 -# PORTME Some linker may need a different reload flag. -reload_flag='-r' -echo "$ac_t$reload_flag" -test -n "$reload_flag" && reload_flag=" $reload_flag" - -# PORTME Fill in your ld.so characteristics -library_names_spec= -libname_spec='lib$name' -soname_spec= -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -version_type=none -dynamic_linker="$host_os ld.so" - -echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6 -case "$host_os" in -aix3* | aix4*) - version_type=linux - library_names_spec='${libname}${release}.so.$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}.so.$major' - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' - ;; - -freebsd2* | freebsd3*) - version_type=sunos - library_names_spec='${libname}${release}.so.$versuffix $libname.so' - finish_cmds='PATH="$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - ;; - -gnu*) - version_type=sunos - library_names_spec='${libname}${release}.so.$versuffix' - shlibpath_var=LD_LIBRARY_PATH - ;; - -hpux9* | hpux10*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - dynamic_linker="$host_os dld.sl" - version_type=sunos - shlibpath_var=SHLIB_PATH - library_names_spec='${libname}${release}.sl.$versuffix ${libname}${release}.sl.$major $libname.sl' - soname_spec='${libname}${release}.sl.$major' - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -irix5* | irix6*) - version_type=osf - soname_spec='${libname}${release}.so' - library_names_spec='${libname}${release}.so.$versuffix $libname.so' - shlibpath_var=LD_LIBRARY_PATH - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux-gnu*) - version_type=linux - library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' - soname_spec='${libname}${release}.so.$major' - finish_cmds='PATH="$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - - if test -f /lib/ld.so.1; then - dynamic_linker='GNU ld.so' - else - # Only the GNU ld.so supports shared libraries on MkLinux. - case "$host_cpu" in - powerpc*) dynamic_linker=no ;; - *) dynamic_linker='Linux ld.so' ;; - esac - fi - ;; - -netbsd* | openbsd*) - version_type=sunos - library_names_spec='${libname}${release}.so.$versuffix' - finish_cmds='PATH="$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - ;; - -os2*) - libname_spec='$name' - library_names_spec='$libname.dll $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4*) - version_type=osf - soname_spec='${libname}${release}.so' - library_names_spec='${libname}${release}.so.$versuffix $libname.so' - shlibpath_var=LD_LIBRARY_PATH - ;; - -sco3.2v5*) - version_type=osf - soname_spec='${libname}${release}.so.$major' - library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' - shlibpath_var=LD_LIBRARY_PATH - ;; - -solaris2*) - version_type=linux - library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' - soname_spec='${libname}${release}.so.$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}.so.$versuffix' - finish_cmds='PATH="$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - ;; - -sysv4.2uw2*) - version_type=linux - library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' - soname_spec='${libname}${release}.so.$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' - soname_spec='${libname}${release}.so.$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -echo "$ac_t$dynamic_linker" -test "$dynamic_linker" = no && can_build_shared=no - -# Report the final consequences. -echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6 - -echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6 -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case "$host_os" in -aix*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds;\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; -esac - -echo "$ac_t$enable_shared" 1>&6 - -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes - -echo "checking whether to build static libraries... $enable_static" 1>&6 - -echo $ac_n "checking for objdir... $ac_c" 1>&6 -rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - objdir=_libs -fi -rmdir .libs 2>/dev/null -echo "$ac_t$objdir" 1>&6 - -# Copy echo and quote the copy, instead of the original, because it is -# used later. -ltecho="$echo" - -# Now quote all the things that may contain metacharacters. -for var in ltecho old_CC old_CFLAGS old_CPPFLAGS old_LD old_NM old_RANLIB \ - old_LN_S AR CC LD LN_S NM reload_flag reload_cmds wl pic_flag \ - link_static_flag no_builtin_flag export_dynamic_flag_spec \ - libname_spec library_names_spec soname_spec RANLIB \ - old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ - old_postuninstall_cmds archive_cmds postinstall_cmds postuninstall_cmds \ - allow_undefined_flag no_undefined_flag \ - finish_cmds finish_eval global_symbol_pipe \ - hardcode_libdir_flag_spec hardcode_libdir_separator; do - - case "$var" in - reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | archive_cmds | \ - postinstall_cmds | postuninstall_cmds | finish_cmds) - # Double-quote double-evaled strings. - eval "$var=\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\"\`" - ;; - *) - eval "$var=\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`" - ;; - esac -done - -ofile=libtool -trap "$rm $ofile; exit 1" 1 2 15 -echo creating $ofile -$rm $ofile -cat < $ofile -#! /bin/sh - -# libtool - Provide generalized library-building support services. -# Generated automatically by $PROGRAM - GNU $PACKAGE $VERSION -# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh. -# -# Copyright (C) 1996-1998 Free Software Foundation, Inc. -# Gordon Matzigkeit , 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 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# 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 program was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# CC="$old_CC" CFLAGS="$old_CFLAGS" CPPFLAGS="$old_CPPFLAGS" \\ -# LD="$old_LD" NM="$old_NM" RANLIB="$old_RANLIB" LN_S="$old_LN_S" \\ -# $0$ltconfig_args -# -# Compiler and other test output produced by $progname, useful for -# debugging $progname, is in ./config.log if it exists. - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="sed -e s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -if test "\${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi - -# An echo program that does not interpret backslashes. -echo="$ltecho" - -# The version of $progname that generated this script. -LTCONFIG_VERSION="$VERSION" - -# Shell to use when invoking shell scripts. -SHELL=${CONFIG_SHELL-/bin/sh} - -# Whether or not to build libtool libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build old-style libraries. -build_old_libs=$enable_static - -# The host system. -host_alias="$host_alias" -host="$host" - -# The archiver. -AR="$AR" - -# The default C compiler. -CC="$CC" - -# The linker used to build libraries. -LD="$LD" - -# Whether we need hard or soft links. -LN_S="$LN_S" - -# A BSD-compatible nm program. -NM="$NM" - -# The name of the directory that contains temporary libtool files. -objdir="$objdir" - -# How to create reloadable object files. -reload_flag="$reload_flag" -reload_cmds="$reload_cmds" - -# How to pass a linker flag through the compiler. -wl="$wl" - -# Additional compiler flags for building library objects. -pic_flag="$pic_flag" - -# Compiler flag to prevent dynamic linking. -link_static_flag="$link_static_flag" - -# Compiler flag to turn off builtin functions. -no_builtin_flag="$no_builtin_flag" - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec="$export_dynamic_flag_spec" - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec="$libname_spec" - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec="$library_names_spec" - -# The coded name of the library, if different from the real name. -soname_spec="$soname_spec" - -# Commands used to build and install an old-style archive. -RANLIB="$RANLIB" -old_archive_cmds="$old_archive_cmds" -old_postinstall_cmds="$old_postinstall_cmds" -old_postuninstall_cmds="$old_postuninstall_cmds" - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds="$old_archive_from_new_cmds" - -# Commands used to build and install a shared archive. -archive_cmds="$archive_cmds" -postinstall_cmds="$postinstall_cmds" -postuninstall_cmds="$postuninstall_cmds" - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag="$allow_undefined_flag" - -# Flag that forces no undefined symbols. -no_undefined_flag="$no_undefined_flag" - -# Commands used to finish a libtool library installation in a directory. -finish_cmds="$finish_cmds" - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval="$finish_eval" - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe="$global_symbol_pipe" - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec="$hardcode_libdir_flag_spec" - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator="$hardcode_libdir_separator" - -# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -EOF - -case "$host_os" in -aix3*) - cat <<\EOF >> $ofile -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "${COLLECT_NAMES+set}" != set; then - COLLECT_NAMES= - export COLLECT_NAMES -fi - -EOF - ;; -esac - -# Append the ltmain.sh script. -cat "$ltmain" >> $ofile || (rm -f $ofile; exit 1) - -chmod +x $ofile -exit 0 - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: diff --git a/Build/source/libs/jpeg/ltmain.sh b/Build/source/libs/jpeg/ltmain.sh deleted file mode 100644 index e9350b3fab0..00000000000 --- a/Build/source/libs/jpeg/ltmain.sh +++ /dev/null @@ -1,2453 +0,0 @@ -# ltmain.sh - Provide generalized library-building support services. -# NOTE: Changing this file will not affect anything until you rerun ltconfig. -# -# Copyright (C) 1996-1998 Free Software Foundation, Inc. -# Gordon Matzigkeit , 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 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# 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 name of this program. -progname=`$echo "$0" | sed 's%^.*/%%'` -modename="$progname" - -# Constants. -PROGRAM=ltmain.sh -PACKAGE=libtool -VERSION=1.2 - -default_mode= -help="Try \`$progname --help' for more information." -magic="%%%MAGIC variable%%%" -mkdir="mkdir" -mv="mv -f" -rm="rm -f" - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e s/^X//' -sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' - -# NLS nuisances. -# Only set LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LANG+set}" = set; then LANG=C; export LANG; fi - -if test "$LTCONFIG_VERSION" != "$VERSION"; then - echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2 - echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit 1 -fi - -if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - echo "$modename: not configured to build any kind of library" 1>&2 - echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit 1 -fi - -# Global variables. -mode=$default_mode -nonopt= -prev= -prevopt= -run= -show="$echo" -show_help= -execute_dlfiles= - -# Parse our command line options once, thoroughly. -while test $# -gt 0 -do - arg="$1" - shift - - case "$arg" in - -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case "$prev" in - execute_dlfiles) - eval "$prev=\"\$$prev \$arg\"" - ;; - *) - eval "$prev=\$arg" - ;; - esac - - prev= - prevopt= - continue - fi - - # Have we seen a non-optional argument yet? - case "$arg" in - --help) - show_help=yes - ;; - - --version) - echo "$PROGRAM (GNU $PACKAGE) $VERSION" - exit 0 - ;; - - --dry-run | -n) - run=: - ;; - - --features) - echo "host: $host" - if test "$build_libtool_libs" = yes; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test "$build_old_libs" = yes; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - exit 0 - ;; - - --finish) mode="finish" ;; - - --mode) prevopt="--mode" prev=mode ;; - --mode=*) mode="$optarg" ;; - - --quiet | --silent) - show=: - ;; - - -dlopen) - prevopt="-dlopen" - prev=execute_dlfiles - ;; - - -*) - $echo "$modename: unrecognized option \`$arg'" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - - *) - nonopt="$arg" - break - ;; - esac -done - -if test -n "$prevopt"; then - $echo "$modename: option \`$prevopt' requires an argument" 1>&2 - $echo "$help" 1>&2 - exit 1 -fi - -if test -z "$show_help"; then - - # Infer the operation mode. - if test -z "$mode"; then - case "$nonopt" in - *cc | *++ | gcc* | *-gcc*) - mode=link - for arg - do - case "$arg" in - -c) - mode=compile - break - ;; - esac - done - ;; - *db | *dbx) - mode=execute - ;; - *install*|cp|mv) - mode=install - ;; - *rm) - mode=uninstall - ;; - *) - # If we have no mode, but dlfiles were specified, then do execute mode. - test -n "$execute_dlfiles" && mode=execute - - # Just use the default operation mode. - if test -z "$mode"; then - if test -n "$nonopt"; then - $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 - else - $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 - fi - fi - ;; - esac - fi - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - $echo "$modename: unrecognized option \`-dlopen'" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$modename --help --mode=$mode' for more information." - - # These modes are in order of execution frequency so that they run quickly. - case "$mode" in - # libtool compile mode - compile) - modename="$modename: compile" - # Get the compilation command and the source file. - base_compile= - lastarg= - srcfile="$nonopt" - suppress_output= - - for arg - do - # Accept any command-line options. - case "$arg" in - -o) - $echo "$modename: you cannot specify the output filename with \`-o'" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - - -static) - build_libtool_libs=no - build_old_libs=yes - continue - ;; - esac - - # Accept the current argument as the source file. - lastarg="$srcfile" - srcfile="$arg" - - # Aesthetically quote the previous argument. - - # Backslashify any backslashes, double quotes, and dollar signs. - # These are the only characters that are still specially - # interpreted inside of double-quoted scrings. - lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` - - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly in scan - # sets, so we specify it separately. - case "$lastarg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - lastarg="\"$lastarg\"" - ;; - esac - - # Add the previous argument to base_compile. - if test -z "$base_compile"; then - base_compile="$lastarg" - else - base_compile="$base_compile $lastarg" - fi - done - - # Get the name of the library object. - libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` - - # Recognize several different file suffixes. - xform='[cCFSfms]' - case "$libobj" in - *.ada) xform=ada ;; - *.adb) xform=adb ;; - *.ads) xform=ads ;; - *.asm) xform=asm ;; - *.c++) xform=c++ ;; - *.cc) xform=cc ;; - *.cpp) xform=cpp ;; - *.cxx) xform=cxx ;; - *.f90) xform=f90 ;; - *.for) xform=for ;; - esac - - libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` - - case "$libobj" in - *.lo) obj=`$echo "X$libobj" | $Xsed -e 's/\.lo$/.o/'` ;; - *) - $echo "$modename: cannot determine name of library object from \`$srcfile'" 1>&2 - exit 1 - ;; - esac - - if test -z "$base_compile"; then - $echo "$modename: you must specify a compilation command" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - $run $rm $obj $libobj - trap "$run $rm $obj $libobj; exit 1" 1 2 15 - else - $run $rm $libobj - trap "$run $rm $libobj; exit 1" 1 2 15 - fi - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - # All platforms use -DPIC, to notify preprocessed assembler code. - $show "$base_compile$pic_flag -DPIC $srcfile" - if $run eval "$base_compile\$pic_flag -DPIC \$srcfile"; then : - else - test -n "$obj" && $run $rm $obj - exit 1 - fi - - # If we have no pic_flag, then copy the object into place and finish. - if test -z "$pic_flag"; then - $show "$LN_S $obj $libobj" - $run $LN_S $obj $libobj - exit $? - fi - - # Just move the object, then go on to compile the next one - $show "$mv $obj $libobj" - $run $mv $obj $libobj || exit 1 - - # Allow error messages only from the first compilation. - suppress_output=' >/dev/null 2>&1' - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - # Suppress compiler output if we already did a PIC compilation. - $show "$base_compile $srcfile$suppress_output" - if $run eval "$base_compile \$srcfile$suppress_output"; then : - else - $run $rm $obj $libobj - exit 1 - fi - fi - - # Create an invalid libtool object if no PIC, so that we do not - # accidentally link it into a program. - if test "$build_libtool_libs" != yes; then - $show "echo timestamp > $libobj" - $run eval "echo timestamp > \$libobj" || exit $? - fi - - exit 0 - ;; - - # libtool link mode - link) - modename="$modename: link" - CC="$nonopt" - allow_undefined=yes - compile_command="$CC" - finalize_command="$CC" - - compile_shlibpath= - finalize_shlibpath= - deplibs= - dlfiles= - dlprefiles= - export_dynamic=no - hardcode_libdirs= - libobjs= - link_against_libtool_libs= - ltlibs= - objs= - prev= - prevarg= - release= - rpath= - perm_rpath= - temp_rpath= - vinfo= - - # We need to know -static, to get the right output filenames. - for arg - do - case "$arg" in - -all-static | -static) - if test "X$arg" = "X-all-static" && test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 - fi - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - for arg - do - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case "$prev" in - output) - compile_command="$compile_command @OUTPUT@" - finalize_command="$finalize_command @OUTPUT@" - ;; - esac - - case "$prev" in - dlfiles|dlprefiles) - case "$arg" in - *.la | *.lo) ;; # We handle these cases below. - *) - dlprefiles="$dlprefiles $arg" - test "$prev" = dlfiles && dlfiles="$dlfiles $arg" - prev= - ;; - esac - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath) - rpath="$rpath $arg" - prev= - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi - - prevarg="$arg" - - case "$arg" in - -all-static) - if test -n "$link_static_flag"; then - compile_command="$compile_command $link_static_flag" - finalize_command="$finalize_command $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - if test "$export_dynamic" != yes; then - export_dynamic=yes - if test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - else - arg= - fi - - # Add the symbol object into the linking commands. - compile_command="$compile_command @SYMFILE@" - finalize_command="$finalize_command @SYMFILE@" - fi - ;; - - -L*) - dir=`$echo "X$arg" | $Xsed -e 's%^-L\(.*\)$%\1%'` - case "$dir" in - /* | [A-Za-z]:\\*) - # Add the corresponding hardcode_libdir_flag, if it is not identical. - ;; - *) - $echo "$modename: \`-L$dir' cannot specify a relative directory" 1>&2 - exit 1 - ;; - esac - deplibs="$deplibs $arg" - ;; - - -l*) deplibs="$deplibs $arg" ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -o) prev=output ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -static) - # If we have no pic_flag, then this is the same as -all-static. - if test -z "$pic_flag" && test -n "$link_static_flag"; then - compile_command="$compile_command $link_static_flag" - finalize_command="$finalize_command $link_static_flag" - fi - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - # Some other compiler flag. - -* | +*) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - ;; - - *.o | *.a) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A library object. - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - if test "$build_libtool_libs" = yes; then - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e 's/\.lo$/\.o/'` - prev= - fi - libobjs="$libobjs $arg" - ;; - - *.la) - # A libtool-controlled library. - - dlname= - libdir= - library_names= - old_library= - - # Check to see that this really is a libtool archive. - if (sed -e '2q' $arg | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : - else - $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2 - exit 1 - fi - - # If there is no directory component, then add one. - case "$arg" in - */* | *\\*) . $arg ;; - *) . ./$arg ;; - esac - - if test -z "$libdir"; then - $echo "$modename: \`$arg' contains no -rpath information" 1>&2 - exit 1 - fi - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - - if test -z "$linklib"; then - $echo "$modename: cannot find name of link library for \`$arg'" 1>&2 - exit 1 - fi - - # Find the relevant object directory and library name. - name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'` - dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$dir" = "X$arg"; then - dir="$objdir" - else - dir="$dir/$objdir" - fi - - # This library was specified with -dlopen. - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - if test -z "$dlname"; then - # If there is no dlname, we need to preload. - prev=dlprefiles - else - # We should not create a dependency on this library, but we - # may need any libraries it requires. - compile_command="$compile_command$dependency_libs" - finalize_command="$finalize_command$dependency_libs" - prev= - continue - fi - fi - - # The library was specified with -dlpreopen. - if test "$prev" = dlprefiles; then - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - dlprefiles="$dlprefiles $dir/$old_library" - else - dlprefiles="$dlprefiles $dir/$linklib" - fi - prev= - fi - - if test "$build_libtool_libs" = yes && test -n "$library_names"; then - link_against_libtool_libs="$link_against_libtool_libs $arg" - if test -n "$shlibpath_var"; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath " in - *" $dir "*) ;; - *) temp_rpath="$temp_rpath $dir" ;; - esac - fi - - # This is the magic to use -rpath. - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - # Put the magic libdir with the hardcode flag. - hardcode_libdirs="$libdir" - libdir="@HARDCODE_LIBDIRS@" - else - # Just accumulate the unique libdirs. - case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - libdir= - fi - fi - - if test -n "$libdir"; then - eval flag=\"$hardcode_libdir_flag_spec\" - - compile_command="$compile_command $flag" - finalize_command="$finalize_command $flag" - fi - elif test -n "$runpath_var"; then - # Do the same for the permanent run path. - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - - - case "$hardcode_action" in - immediate) - if test "$hardcode_direct" = no; then - compile_command="$compile_command $dir/$linklib" - elif test "$hardcode_minus_L" = no; then - compile_command="$compile_command -L$dir -l$name" - elif test "$hardcode_shlibpath_var" = no; then - compile_shlibpath="$compile_shlibpath$dir:" - compile_command="$compile_command -l$name" - fi - ;; - - relink) - # We need an absolute path. - case "$dir" in - /* | [A-Za-z]:\\*) ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 - exit 1 - fi - dir="$absdir" - ;; - esac - - if test "$hardcode_direct" = yes; then - compile_command="$compile_command $dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - compile_command="$compile_command -L$dir -l$name" - elif test "$hardcode_shlibpath_var" = yes; then - compile_shlibpath="$compile_shlibpath$dir:" - compile_command="$compile_command -l$name" - fi - ;; - - *) - $echo "$modename: \`$hardcode_action' is an unknown hardcode action" 1>&2 - exit 1 - ;; - esac - - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes; then - finalize_command="$finalize_command $libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - finalize_command="$finalize_command -L$libdir -l$name" - elif test "$hardcode_shlibpath_var" = yes; then - finalize_shlibpath="$finalize_shlibpath$libdir:" - finalize_command="$finalize_command -l$name" - else - # We cannot seem to hardcode it, guess we'll fake it. - finalize_command="$finalize_command -L$libdir -l$name" - fi - else - # Transform directly to old archives if we don't build new libraries. - if test -n "$pic_flag" && test -z "$old_library"; then - $echo "$modename: cannot find static library for \`$arg'" 1>&2 - exit 1 - fi - - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_command="$compile_command $dir/$linklib" - finalize_command="$finalize_command $dir/$linklib" - else - compile_command="$compile_command -L$dir -l$name" - finalize_command="$finalize_command -L$dir -l$name" - fi - fi - - # Add in any libraries that this one depends upon. - compile_command="$compile_command$dependency_libs" - finalize_command="$finalize_command$dependency_libs" - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - ;; - esac - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - fi - done - - if test -n "$prev"; then - $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - if test -n "$vinfo" && test -n "$release"; then - $echo "$modename: you cannot specify both \`-version-info' and \`-release'" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - oldlib= - oldobjs= - case "$output" in - "") - $echo "$modename: you must specify an output file" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - - */* | *\\*) - $echo "$modename: output file \`$output' must have no directory components" 1>&2 - exit 1 - ;; - - *.a) - # Now set the variables for building old libraries. - build_libtool_libs=no - build_old_libs=yes - oldlib="$output" - $show "$rm $oldlib" - $run $rm $oldlib - ;; - - *.la) - # Make sure we only generate libraries of the form `libNAME.la'. - case "$output" in - lib*) ;; - *) - $echo "$modename: libtool library \`$arg' must begin with \`lib'" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - esac - - name=`$echo "X$output" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - eval libname=\"$libname_spec\" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - current=0 - revision=0 - age=0 - - if test -n "$objs"; then - $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 - exit 1 - fi - - # How the heck are we supposed to write a wrapper for a shared library? - if test -n "$link_against_libtool_libs"; then - $echo "$modename: libtool library \`$output' may not depend on uninstalled libraries:$link_against_libtool_libs" 1>&2 - exit 1 - fi - - if test -n "$dlfiles$dlprefiles"; then - $echo "$modename: warning: \`-dlopen' is ignored while creating libtool libraries" 1>&2 - # Nullify the symbol file. - compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi - - if test -z "$rpath"; then - $echo "$modename: you must specify an installation directory with \`-rpath'" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - set dummy $rpath - if test $# -gt 2; then - $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 - fi - install_libdir="$2" - - # Parse the version information argument. - IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' - set dummy $vinfo - IFS="$save_ifs" - - if test -n "$5"; then - $echo "$modename: too many parameters to \`-version-info'" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - test -n "$2" && current="$2" - test -n "$3" && revision="$3" - test -n "$4" && age="$4" - - # Check that each of the things are valid numbers. - case "$current" in - 0 | [1-9] | [1-9][0-9]*) ;; - *) - $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - ;; - esac - - case "$revision" in - 0 | [1-9] | [1-9][0-9]*) ;; - *) - $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - ;; - esac - - case "$age" in - 0 | [1-9] | [1-9][0-9]*) ;; - *) - $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - ;; - esac - - if test $age -gt $current; then - $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - fi - - # Calculate the version variables. - version_vars="version_type current age revision" - case "$version_type" in - none) ;; - - linux) - version_vars="$version_vars major versuffix" - major=`expr $current - $age` - versuffix="$major.$age.$revision" - ;; - - osf) - version_vars="$version_vars versuffix verstring" - major=`expr $current - $age` - versuffix="$current.$age.$revision" - verstring="$versuffix" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test $loop != 0; do - iface=`expr $current - $loop` - loop=`expr $loop - 1` - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; - - sunos) - version_vars="$version_vars major versuffix" - major="$current" - versuffix="$current.$revision" - ;; - - *) - $echo "$modename: unknown library version type \`$version_type'" 1>&2 - echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit 1 - ;; - esac - - # Create the output directory, or remove our outputs if we need to. - if test -d $objdir; then - $show "$rm $objdir/$output $objdir/$libname.* $objdir/${libname}${release}.*" - $run $rm $objdir/$output $objdir/$libname.* $objdir/${libname}${release}.* - else - $show "$mkdir $objdir" - $run $mkdir $objdir - status=$? - if test $status -eq 0 || test -d $objdir; then : - else - exit $status - fi - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - # Add libc to deplibs on all systems. - dependency_libs="$deplibs" - deplibs="$deplibs -lc" - - if test "$build_libtool_libs" = yes; then - # Get the real and link names of the library. - eval library_names=\"$library_names_spec\" - set dummy $library_names - realname="$2" - shift; shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - lib="$objdir/$realname" - for link - do - linknames="$linknames $link" - done - - # Use standard objects if they are PIC. - test -z "$pic_flag" && libobjs=`$echo "X$libobjs " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//g'` - - # Do each of the archive commands. - eval cmds=\"$archive_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - - # Create links to the real library. - for linkname in $linknames; do - $show "(cd $objdir && $LN_S $realname $linkname)" - $run eval '(cd $objdir && $LN_S $realname $linkname)' || exit $? - done - - # If -export-dynamic was specified, set the dlname. - if test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - - # Now set the variables for building old libraries. - oldlib="$objdir/$libname.a" - ;; - - *.lo | *.o) - if test -n "$link_against_libtool_libs"; then - $echo "$modename: error: cannot link libtool libraries into reloadable objects" 1>&2 - exit 1 - fi - - if test -n "$deplibs"; then - $echo "$modename: warning: \`-l' and \`-L' are ignored while creating objects" 1>&2 - fi - - if test -n "$dlfiles$dlprefiles"; then - $echo "$modename: warning: \`-dlopen' is ignored while creating objects" 1>&2 - # Nullify the symbol file. - compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi - - if test -n "$rpath"; then - $echo "$modename: warning: \`-rpath' is ignored while creating objects" 1>&2 - fi - - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored while creating objects" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored while creating objects" 1>&2 - fi - - case "$output" in - *.lo) - if test -n "$objs"; then - $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 - exit 1 - fi - libobj="$output" - obj=`$echo "X$output" | $Xsed -e 's/\.lo$/.o/'` - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $run $rm $obj $libobj - - # Create the old-style object. - reload_objs="$objs"`$echo "X$libobjs " | $Xsed -e 's/[^ ]*\.a //g' -e 's/\.lo /.o /g' -e 's/ $//g'` - - output="$obj" - eval cmds=\"$reload_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - - # Exit if we aren't doing a library object file. - test -z "$libobj" && exit 0 - - if test "$build_libtool_libs" != yes; then - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - $show "echo timestamp > $libobj" - $run eval "echo timestamp > $libobj" || exit $? - exit 0 - fi - - if test -n "$pic_flag"; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs" - output="$libobj" - eval cmds=\"$reload_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - else - # Just create a symlink. - $show "$LN_S $obj $libobj" - $run $LN_S $obj $libobj || exit 1 - fi - - exit 0 - ;; - - *) - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored while linking programs" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored while creating objects" 1>&2 - fi - - if test -n "$rpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - # Put the magic libdir with the hardcode flag. - hardcode_libdirs="$libdir" - libdir="@HARDCODE_LIBDIRS@" - else - # Just accumulate the unique libdirs. - case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - libdir= - fi - fi - - if test -n "$libdir"; then - eval flag=\"$hardcode_libdir_flag_spec\" - - compile_command="$compile_command $flag" - finalize_command="$finalize_command $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - done - fi - - # Substitute the hardcoded libdirs into the compile commands. - if test -n "$hardcode_libdir_separator"; then - compile_command=`$echo "X$compile_command" | $Xsed -e "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` - fi - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$echo "X$compile_command " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` - finalize_command=`$echo "X$finalize_command " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` - fi - - if test "$export_dynamic" = yes && test -n "$NM" && test -n "$global_symbol_pipe"; then - dlsyms="${output}S.c" - else - dlsyms= - fi - - if test -n "$dlsyms"; then - # Add our own program objects to the preloaded list. - dlprefiles=`$echo "X$objs$dlprefiles " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` - - # Discover the nlist of each of the dlfiles. - nlist="$objdir/${output}.nm" - - if test -d $objdir; then - $show "$rm $nlist ${nlist}T" - $run $rm "$nlist" "${nlist}T" - else - $show "$mkdir $objdir" - $run $mkdir $objdir - status=$? - if test $status -eq 0 || test -d $objdir; then : - else - exit $status - fi - fi - - for arg in $dlprefiles; do - $show "extracting global C symbols from \`$arg'" - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done - - # Parse the name list into a source file. - $show "creating $objdir/$dlsyms" - if test -z "$run"; then - # Make sure we at least have an empty file. - test -f "$nlist" || : > "$nlist" - - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - wcout=`wc "$nlist" 2>/dev/null` - count=`echo "X$wcout" | $Xsed -e 's/^[ ]*\([0-9][0-9]*\).*$/\1/'` - (test "$count" -ge 0) 2>/dev/null || count=-1 - else - $rm "$nlist"T - count=-1 - fi - - case "$dlsyms" in - "") ;; - *.c) - $echo > "$objdir/$dlsyms" "\ -/* $dlsyms - symbol resolution table for \`$output' dlsym emulation. */ -/* Generated by $PROGRAM - GNU $PACKAGE $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -/* Prevent the only kind of declaration conflicts we can make. */ -#define dld_preloaded_symbol_count some_other_symbol -#define dld_preloaded_symbols some_other_symbol - -/* External symbol declarations for the compiler. */\ -" - - if test -f "$nlist"; then - sed -e 's/^.* \(.*\)$/extern char \1;/' < "$nlist" >> "$objdir/$dlsyms" - else - echo '/* NONE */' >> "$objdir/$dlsyms" - fi - - $echo >> "$objdir/$dlsyms" "\ - -#undef dld_preloaded_symbol_count -#undef dld_preloaded_symbols - -#if defined (__STDC__) && __STDC__ -# define __ptr_t void * -#else -# define __ptr_t char * -#endif - -/* The number of symbols in dld_preloaded_symbols, -1 if unsorted. */ -int dld_preloaded_symbol_count = $count; - -/* The mapping between symbol names and symbols. */ -struct { - char *name; - __ptr_t address; -} -dld_preloaded_symbols[] = -{\ -" - - if test -f "$nlist"; then - sed 's/^\(.*\) \(.*\)$/ {"\1", (__ptr_t) \&\2},/' < "$nlist" >> "$objdir/$dlsyms" - fi - - $echo >> "$objdir/$dlsyms" "\ - {0, (__ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif\ -" - ;; - - *) - $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 - exit 1 - ;; - esac - fi - - # Now compile the dynamic symbol file. - $show "(cd $objdir && $CC -c$no_builtin_flag \"$dlsyms\")" - $run eval '(cd $objdir && $CC -c$no_builtin_flag "$dlsyms")' || exit $? - - # Transform the symbol file into the correct name. - compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$objdir/${output}S.o%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$objdir/${output}S.o%"` - elif test "$export_dynamic" != yes; then - test -n "$dlfiles$dlprefiles" && $echo "$modename: warning: \`-dlopen' and \`-dlpreopen' are ignored without \`-export-dynamic'" 1>&2 - else - # We keep going just in case the user didn't refer to - # dld_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 - - # Nullify the symbol file. - compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi - - if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then - # Replace the output file specification. - compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - finalize_command=`$echo "X$finalize_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - - # We have no uninstalled library dependencies, so finalize right now. - $show "$compile_command" - $run eval "$compile_command" - exit $? - fi - - # Replace the output file specification. - compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$objdir/$output"'%g'` - finalize_command=`$echo "X$finalize_command" | $Xsed -e 's%@OUTPUT@%'"$objdir/$output"'T%g'` - - # Create the binary in the object directory, then wrap it. - if test -d $objdir; then : - else - $show "$mkdir $objdir" - $run $mkdir $objdir - status=$? - if test $status -eq 0 || test -d $objdir; then : - else - exit $status - fi - fi - - if test -n "$shlibpath_var"; then - # We should set the shlibpath_var - rpath= - for dir in $temp_rpath; do - case "$dir" in - /* | [A-Za-z]:\\*) - # Absolute path. - rpath="$rpath$dir:" - ;; - *) - # Relative path: add a thisdir entry. - rpath="$rpath\$thisdir/$dir:" - ;; - esac - done - temp_rpath="$rpath" - fi - - # Delete the old output file. - $run $rm $output - - if test -n "$compile_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - compile_command="$runpath_var=\"$rpath\$$runpath_var\" $compile_command" - finalize_command="$runpath_var=\"$rpath\$$runpath_var\" $finalize_command" - fi - - case "$hardcode_action" in - relink) - # AGH! Flame the AIX and HP-UX people for me, will ya? - $echo "$modename: warning: using a buggy system linker" 1>&2 - $echo "$modename: relinking will be required before \`$output' can be installed" 1>&2 - ;; - esac - - $show "$compile_command" - $run eval "$compile_command" || exit $? - - # Now create the wrapper script. - $show "creating $output" - - # Quote the finalize command for shipping. - finalize_command=`$echo "X$finalize_command" | $Xsed -e "$sed_quote_subst"` - - # Quote $echo for shipping. - qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` - - # Only actually do things if our run command is non-null. - if test -z "$run"; then - $rm $output - trap "$rm $output; exit 1" 1 2 15 - - $echo > $output "\ -#! /bin/sh - -# $output - temporary wrapper script for $objdir/$output -# Generated by ltmain.sh - GNU $PACKAGE $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of \``pwd`'. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e s/^X//' -sed_quote_subst='$sed_quote_subst' - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -if test \"\${CDPATH+set}\" = set; then CDPATH=; export CDPATH; fi - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - link_against_libtool_libs='$link_against_libtool_libs' - finalize_command=\"$finalize_command\" -else - # When we are sourced in execute mode, \$file and \$echo are already set. - if test \"\$libtool_execute_magic\" = \"$magic\"; then : - else - echo=\"$qecho\" - file=\"\$0\" - fi\ -" - $echo >> $output "\ - - # Find the directory that this script lives in. - thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - /* | [A-Za-z]:\\*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` - done - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" - - progdir=\"\$thisdir/$objdir\" - program='$output' - - if test -f \"\$progdir/\$program\"; then" - - # Export our shlibpath_var if we have one. - if test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $echo >> $output "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/:*\$//'\` - - export $shlibpath_var -" - fi - - $echo >> $output "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. - - # Export the path to the program. - PATH=\"\$progdir:\$PATH\" - export PATH - - exec \$program \${1+\"\$@\"} - - \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" - exit 1 - fi - else - # The program doesn't exist. - \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 - \$echo \"This script is just a wrapper for \$program.\" 1>&2 - echo \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" - chmod +x $output - fi - exit 0 - ;; - esac - - # See if we need to build an old-fashioned archive. - if test "$build_old_libs" = "yes"; then - # Transform .lo files to .o files. - oldobjs="$objs"`$echo "X$libobjs " | $Xsed -e 's/[^ ]*\.a //g' -e 's/\.lo /.o /g' -e 's/ $//g'` - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - eval cmds=\"$old_archive_from_new_cmds\" - else - eval cmds=\"$old_archive_cmds\" - fi - IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - - # Now create the libtool archive. - case "$output" in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.a" - - $show "creating $output" - - # Only create the output if not a dry run. - if test -z "$run"; then - $echo > $output "\ -# $output - a libtool library file -# Generated by ltmain.sh - GNU $PACKAGE $VERSION - -# The name that we can dlopen(3). -dlname='$dlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Directory that this library needs to be installed in: -libdir='$install_libdir'\ -" - fi - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - $show "(cd $objdir && $LN_S ../$output $output)" - $run eval "(cd $objdir && $LN_S ../$output $output)" || exit 1 - ;; - esac - exit 0 - ;; - - # libtool install mode - install) - modename="$modename: install" - - # There may be an optional /bin/sh argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL"; then - # Aesthetically quote it. - arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - install_prog="$arg " - arg="$1" - shift - else - install_prog= - arg="$nonopt" - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - install_prog="$install_prog$arg" - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir= - stripme= - for arg - do - if test -n "$dest"; then - files="$files $dest" - dest="$arg" - continue - fi - - case "$arg" in - -d) isdir=yes ;; - -f) prev="-f" ;; - -g) prev="-g" ;; - -m) prev="-m" ;; - -o) prev="-o" ;; - -s) - stripme=" -s" - continue - ;; - -*) ;; - - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - prev= - else - dest="$arg" - continue - fi - ;; - esac - - # Aesthetically quote the argument. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - install_prog="$install_prog $arg" - done - - if test -z "$install_prog"; then - $echo "$modename: you must specify an install program" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - if test -n "$prev"; then - $echo "$modename: the \`$prev' option requires an argument" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - if test -z "$files"; then - if test -z "$dest"; then - $echo "$modename: no file or destination specified" 1>&2 - else - $echo "$modename: you must specify a destination" 1>&2 - fi - $echo "$help" 1>&2 - exit 1 - fi - - # Strip any trailing slash from the destination. - dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test -n "$isdir"; then - destdir="$dest" - destname= - else - destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` - test "X$destdir" = "X$dest" && destdir=. - destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` - - # Not a directory, so check to see that there is only one file specified. - set dummy $files - if test $# -gt 2; then - $echo "$modename: \`$dest' is not a directory" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - fi - case "$destdir" in - /* | [A-Za-z]:\\*) ;; - *) - for file in $files; do - case "$file" in - *.lo) ;; - *) - $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case "$file" in - *.a) - # Do the static libraries later. - staticlibs="$staticlibs $file" - ;; - - *.la) - # Check to see that this really is a libtool archive. - if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : - else - $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - library_names= - old_library= - # If there is no directory component, then add one. - case "$file" in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; - esac - fi - - dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/" - test "X$dir" = "X$file/" && dir= - dir="$dir$objdir" - - # See the names of the shared library. - set dummy $library_names - if test -n "$2"; then - realname="$2" - shift - shift - - # Install the shared library and build the symlinks. - $show "$install_prog $dir/$realname $destdir/$realname" - $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? - test "X$dlname" = "X$realname" && dlname= - - if test $# -gt 0; then - # Delete the old symlinks. - rmcmd="$rm" - for linkname - do - rmcmd="$rmcmd $destdir/$linkname" - done - $show "$rmcmd" - $run $rmcmd - - # ... and create new ones. - for linkname - do - test "X$dlname" = "X$linkname" && dlname= - $show "(cd $destdir && $LN_S $realname $linkname)" - $run eval "(cd $destdir && $LN_S $realname $linkname)" - done - fi - - if test -n "$dlname"; then - # Install the dynamically-loadable library. - $show "$install_prog $dir/$dlname $destdir/$dlname" - $run eval "$install_prog $dir/$dlname $destdir/$dlname" || exit $? - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - eval cmds=\"$postinstall_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - - # Install the pseudo-library for information purposes. - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - $show "$install_prog $file $destdir/$name" - $run eval "$install_prog $file $destdir/$name" || exit $? - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case "$destfile" in - *.lo) - staticdest=`$echo "X$destfile" | $Xsed -e 's/\.lo$/\.o/'` - ;; - *.o) - staticdest="$destfile" - destfile= - ;; - *) - $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - esac - - # Install the libtool object if requested. - if test -n "$destfile"; then - $show "$install_prog $file $destfile" - $run eval "$install_prog $file $destfile" || exit $? - fi - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - staticobj=`$echo "X$file" | $Xsed -e 's/\.lo$/\.o/'` - - $show "$install_prog $staticobj $staticdest" - $run eval "$install_prog \$staticobj \$staticdest" || exit $? - fi - exit 0 - ;; - - *) - # Do a test to see if this is really a libtool program. - if (sed -e '4q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then - link_against_libtool_libs= - finalize_command= - - # If there is no directory component, then add one. - case "$file" in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Check the variables that should have been set. - if test -z "$link_against_libtool_libs" || test -z "$finalize_command"; then - $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 - exit 1 - fi - - finalize=yes - for lib in $link_against_libtool_libs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - # If there is no directory component, then add one. - case "$lib" in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac - fi - libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`" - if test -z "$libdir"; then - $echo "$modename: warning: \`$lib' contains no -rpath information" 1>&2 - elif test -f "$libfile"; then : - else - $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 - finalize=no - fi - done - - if test "$hardcode_action" = relink; then - if test "$finalize" = yes; then - $echo "$modename: warning: relinking \`$file' on behalf of your buggy system linker" 1>&2 - $show "$finalize_command" - if $run eval "$finalize_command"; then : - else - $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 - continue - fi - file="$objdir/$file"T - else - $echo "$modename: warning: cannot relink \`$file' on behalf of your buggy system linker" 1>&2 - fi - else - # Install the binary that we compiled earlier. - file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - $show "$install_prog$stripme $file $dest" - $run eval "$install_prog\$stripme \$file \$dest" || exit $? - ;; - esac - done - - for file in $staticlibs; do - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - $show "$install_prog $file $oldlib" - $run eval "$install_prog \$file \$oldlib" || exit $? - - # Do each command in the postinstall commands. - eval cmds=\"$old_postinstall_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - done - - if test -n "$future_libdirs"; then - $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 - fi - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - test -n "$run" && current_libdirs=" -n$current_libdirs" - exec $SHELL $0 --finish$current_libdirs - exit 1 - fi - - exit 0 - ;; - - # libtool finish mode - finish) - modename="$modename: finish" - libdirs="$nonopt" - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done - - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - eval cmds=\"$finish_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" - done - IFS="$save_ifs" - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $run eval "$cmds" - fi - done - fi - - echo "------------------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - echo " $libdir" - done - echo - echo "To link against installed libraries in a given directory, LIBDIR," - echo "you must use the \`-LLIBDIR' flag during linking." - echo - echo " You will also need to do one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - echo " - use the \`$flag' linker flag" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - echo - echo "See any operating system documentation about shared libraries for" - echo "more information, such as the ld(1) and ld.so(8) manual pages." - echo "------------------------------------------------------------------------------" - exit 0 - ;; - - # libtool execute mode - execute) - modename="$modename: execute" - - # The first argument is the command name. - cmd="$nonopt" - if test -z "$cmd"; then - $echo "$modename: you must specify a COMMAND" 1>&2 - $echo "$help" - exit 1 - fi - - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - if test -f "$file"; then : - else - $echo "$modename: \`$file' is not a file" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - dir= - case "$file" in - *.la) - # Check to see that this really is a libtool archive. - if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - # Read the libtool library. - dlname= - library_names= - - # If there is no directory component, then add one. - case "$file" in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" - continue - fi - - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. - - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 - exit 1 - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. - ;; - - *) - $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case "$file" in - -*) ;; - *) - # Do a test to see if this is really a libtool program. - if (sed -e '4q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then - # If there is no directory component, then add one. - case "$file" in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` - args="$args \"$file\"" - done - - if test -z "$run"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - - # Now actually exec the command. - eval "exec \$cmd$args" - - $echo "$modename: cannot exec \$cmd$args" - exit 1 - else - # Display what would be done. - eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" - $echo "export $shlibpath_var" - $echo "$cmd$args" - exit 0 - fi - ;; - - # libtool uninstall mode - uninstall) - modename="$modename: uninstall" - rm="$nonopt" - files= - - for arg - do - case "$arg" in - -*) rm="$rm $arg" ;; - *) files="$files $arg" ;; - esac - done - - if test -z "$rm"; then - $echo "$modename: you must specify an RM program" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - for file in $files; do - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - - rmfiles="$file" - - case "$name" in - *.la) - # Possibly a libtool archive, so verify it. - if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then - . $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - rmfiles="$rmfiles $dir/$n" - test "X$n" = "X$dlname" && dlname= - done - test -n "$dlname" && rmfiles="$rmfiles $dir/$dlname" - test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" - - $show "$rm $rmfiles" - $run $rm $rmfiles - - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - eval cmds=\"$postuninstall_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" - done - IFS="$save_ifs" - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - eval cmds=\"$old_postuninstall_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" - done - IFS="$save_ifs" - fi - - # FIXME: should reinstall the best remaining shared library. - fi - ;; - - *.lo) - if test "$build_old_libs" = yes; then - oldobj=`$echo "X$name" | $Xsed -e 's/\.lo$/\.o/'` - rmfiles="$rmfiles $dir/$oldobj" - fi - $show "$rm $rmfiles" - $run $rm $rmfiles - ;; - - *) - $show "$rm $rmfiles" - $run $rm $rmfiles - ;; - esac - done - exit 0 - ;; - - "") - $echo "$modename: you must specify a MODE" 1>&2 - $echo "$generic_help" 1>&2 - exit 1 - ;; - esac - - $echo "$modename: invalid operation mode \`$mode'" 1>&2 - $echo "$generic_help" 1>&2 - exit 1 -fi # test -z "$show_help" - -# We need to display help for each of the modes. -case "$mode" in -"") $echo \ -"Usage: $modename [OPTION]... [MODE-ARG]... - -Provide generalized library-building support services. - --n, --dry-run display commands without modifying any files - --features display configuration information and exit - --finish same as \`--mode=finish' - --help display this help message and exit - --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] - --quiet same as \`--silent' - --silent don't print informational messages - --version print version information - -MODE must be one of the following: - - compile compile a source file into a libtool object - execute automatically set library path, then run a program - finish complete the installation of libtool libraries - install install libraries or executables - link create a library or an executable - uninstall remove libraries from an installed directory - -MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for -a more detailed description of MODE." - exit 0 - ;; - -compile) - $echo \ -"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - -execute) - $echo \ -"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - -finish) - $echo \ -"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - -install) - $echo \ -"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - -link) - $echo \ -"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to dld_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -static do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only -library objects (\`.lo' files) may be specified, and \`-rpath' is required. - -If OUTPUT-FILE ends in \`.a', then a standard library is created using \`ar' -and \`ranlib'. - -If OUTPUT-FILE ends in \`.lo' or \`.o', then a reloadable object file is -created, otherwise an executable program is created." - ;; - -uninstall) - $echo -"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - -*) - $echo "$modename: invalid operation mode \`$mode'" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; -esac - -echo -$echo "Try \`$modename --help' for more information about other modes." - -exit 0 - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: diff --git a/Build/source/libs/jpeg/makcjpeg.st b/Build/source/libs/jpeg/makcjpeg.st deleted file mode 100644 index fc72c898230..00000000000 --- a/Build/source/libs/jpeg/makcjpeg.st +++ /dev/null @@ -1,38 +0,0 @@ -; Project file for Independent JPEG Group's software -; -; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. -; Thanks to Frank Moehle (Frank.Moehle@arbi.informatik.uni-oldenburg.de), -; Dr. B. Setzepfandt (bernd@gina.uni-muenster.de), -; and Guido Vollbeding (guivol@esc.de). -; -; To use this file, rename it to cjpeg.prj. -; If you are using Turbo C, change filenames beginning with "pc..." to "tc..." -; Read installation instructions before trying to make the program! -; -; -; * * * Output file * * * -cjpeg.ttp -; -; * * * COMPILER OPTIONS * * * -.C[-P] ; absolute calls -.C[-M] ; and no string merging, folks -.C[-w-cln] ; no "constant is long" warnings -.C[-w-par] ; no "parameter xxxx unused" -.C[-w-rch] ; no "unreachable code" -.C[-wsig] ; warn if significant digits may be lost -= -; * * * * List of modules * * * * -pcstart.o -cjpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h,jversion.h) -cdjpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -rdswitch.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -rdppm.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -rdgif.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -rdtarga.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -rdbmp.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -rdrle.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -libjpeg.lib ; built by libjpeg.prj -pcfltlib.lib ; floating point library -; the float library can be omitted if you've turned off DCT_FLOAT_SUPPORTED -pcstdlib.lib ; standard library -pcextlib.lib ; extended library diff --git a/Build/source/libs/jpeg/makdjpeg.st b/Build/source/libs/jpeg/makdjpeg.st deleted file mode 100644 index 32267263110..00000000000 --- a/Build/source/libs/jpeg/makdjpeg.st +++ /dev/null @@ -1,38 +0,0 @@ -; Project file for Independent JPEG Group's software -; -; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. -; Thanks to Frank Moehle (Frank.Moehle@arbi.informatik.uni-oldenburg.de), -; Dr. B. Setzepfandt (bernd@gina.uni-muenster.de), -; and Guido Vollbeding (guivol@esc.de). -; -; To use this file, rename it to djpeg.prj. -; If you are using Turbo C, change filenames beginning with "pc..." to "tc..." -; Read installation instructions before trying to make the program! -; -; -; * * * Output file * * * -djpeg.ttp -; -; * * * COMPILER OPTIONS * * * -.C[-P] ; absolute calls -.C[-M] ; and no string merging, folks -.C[-w-cln] ; no "constant is long" warnings -.C[-w-par] ; no "parameter xxxx unused" -.C[-w-rch] ; no "unreachable code" -.C[-wsig] ; warn if significant digits may be lost -= -; * * * * List of modules * * * * -pcstart.o -djpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h,jversion.h) -cdjpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -rdcolmap.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -wrppm.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -wrgif.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -wrtarga.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -wrbmp.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -wrrle.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -libjpeg.lib ; built by libjpeg.prj -pcfltlib.lib ; floating point library -; the float library can be omitted if you've turned off DCT_FLOAT_SUPPORTED -pcstdlib.lib ; standard library -pcextlib.lib ; extended library diff --git a/Build/source/libs/jpeg/makeapps.ds b/Build/source/libs/jpeg/makeapps.ds deleted file mode 100644 index bedd038a395..00000000000 --- a/Build/source/libs/jpeg/makeapps.ds +++ /dev/null @@ -1,828 +0,0 @@ -# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -!IF "$(CFG)" == "" -CFG=cjpeg - Win32 -!MESSAGE No configuration specified. Defaulting to cjpeg - Win32. -!ENDIF - -!IF "$(CFG)" != "cjpeg - Win32" && "$(CFG)" != "djpeg - Win32" &&\ - "$(CFG)" != "jpegtran - Win32" && "$(CFG)" != "rdjpgcom - Win32" &&\ - "$(CFG)" != "wrjpgcom - Win32" -!MESSAGE Invalid configuration "$(CFG)" specified. -!MESSAGE You can specify a configuration when running NMAKE on this makefile -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "apps.mak" CFG="cjpeg - Win32" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "cjpeg - Win32" (based on "Win32 (x86) Console Application") -!MESSAGE "djpeg - Win32" (based on "Win32 (x86) Console Application") -!MESSAGE "jpegtran - Win32" (based on "Win32 (x86) Console Application") -!MESSAGE "rdjpgcom - Win32" (based on "Win32 (x86) Console Application") -!MESSAGE "wrjpgcom - Win32" (based on "Win32 (x86) Console Application") -!MESSAGE -!ERROR An invalid configuration is specified. -!ENDIF - -!IF "$(OS)" == "Windows_NT" -NULL= -!ELSE -NULL=nul -!ENDIF -################################################################################ -# Begin Project -# PROP Target_Last_Scanned "cjpeg - Win32" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "cjpeg - Win32" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "cjpeg\Release" -# PROP BASE Intermediate_Dir "cjpeg\Release" -# PROP BASE Target_Dir "cjpeg" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "cjpeg\Release" -# PROP Intermediate_Dir "cjpeg\Release" -# PROP Target_Dir "cjpeg" -OUTDIR=.\cjpeg\Release -INTDIR=.\cjpeg\Release - -ALL : "$(OUTDIR)\cjpeg.exe" - -CLEAN : - -@erase "$(INTDIR)\cjpeg.obj" - -@erase "$(INTDIR)\rdppm.obj" - -@erase "$(INTDIR)\rdgif.obj" - -@erase "$(INTDIR)\rdtarga.obj" - -@erase "$(INTDIR)\rdrle.obj" - -@erase "$(INTDIR)\rdbmp.obj" - -@erase "$(INTDIR)\rdswitch.obj" - -@erase "$(INTDIR)\cdjpeg.obj" - -@erase "$(OUTDIR)\cjpeg.exe" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c -CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"\ - /Fp"$(INTDIR)/cjpeg.pch" /YX /Fo"$(INTDIR)/" /c -CPP_OBJS=.\cjpeg\Release/ -CPP_SBRS=.\. -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -BSC32_FLAGS=/nologo /o"$(OUTDIR)/cjpeg.bsc" -BSC32_SBRS= \ - -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib\ - comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\ - odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no\ - /pdb:"$(OUTDIR)/cjpeg.pdb" /machine:I386 /out:"$(OUTDIR)/cjpeg.exe" -LINK32_OBJS= \ - "$(INTDIR)\cjpeg.obj" \ - "$(INTDIR)\rdppm.obj" \ - "$(INTDIR)\rdgif.obj" \ - "$(INTDIR)\rdtarga.obj" \ - "$(INTDIR)\rdrle.obj" \ - "$(INTDIR)\rdbmp.obj" \ - "$(INTDIR)\rdswitch.obj" \ - "$(INTDIR)\cdjpeg.obj" \ - - -"$(OUTDIR)\cjpeg.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ELSEIF "$(CFG)" == "djpeg - Win32" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "djpeg\Release" -# PROP BASE Intermediate_Dir "djpeg\Release" -# PROP BASE Target_Dir "djpeg" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "djpeg\Release" -# PROP Intermediate_Dir "djpeg\Release" -# PROP Target_Dir "djpeg" -OUTDIR=.\djpeg\Release -INTDIR=.\djpeg\Release - -ALL : "$(OUTDIR)\djpeg.exe" - -CLEAN : - -@erase "$(INTDIR)\djpeg.obj" - -@erase "$(INTDIR)\wrppm.obj" - -@erase "$(INTDIR)\wrgif.obj" - -@erase "$(INTDIR)\wrtarga.obj" - -@erase "$(INTDIR)\wrrle.obj" - -@erase "$(INTDIR)\wrbmp.obj" - -@erase "$(INTDIR)\rdcolmap.obj" - -@erase "$(INTDIR)\cdjpeg.obj" - -@erase "$(OUTDIR)\djpeg.exe" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c -CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"\ - /Fp"$(INTDIR)/djpeg.pch" /YX /Fo"$(INTDIR)/" /c -CPP_OBJS=.\djpeg\Release/ -CPP_SBRS=.\. -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -BSC32_FLAGS=/nologo /o"$(OUTDIR)/djpeg.bsc" -BSC32_SBRS= \ - -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib\ - comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\ - odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no\ - /pdb:"$(OUTDIR)/djpeg.pdb" /machine:I386 /out:"$(OUTDIR)/djpeg.exe" -LINK32_OBJS= \ - "$(INTDIR)\djpeg.obj" \ - "$(INTDIR)\wrppm.obj" \ - "$(INTDIR)\wrgif.obj" \ - "$(INTDIR)\wrtarga.obj" \ - "$(INTDIR)\wrrle.obj" \ - "$(INTDIR)\wrbmp.obj" \ - "$(INTDIR)\rdcolmap.obj" \ - "$(INTDIR)\cdjpeg.obj" \ - - -"$(OUTDIR)\djpeg.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ELSEIF "$(CFG)" == "jpegtran - Win32" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "jpegtran\Release" -# PROP BASE Intermediate_Dir "jpegtran\Release" -# PROP BASE Target_Dir "jpegtran" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "jpegtran\Release" -# PROP Intermediate_Dir "jpegtran\Release" -# PROP Target_Dir "jpegtran" -OUTDIR=.\jpegtran\Release -INTDIR=.\jpegtran\Release - -ALL : "$(OUTDIR)\jpegtran.exe" - -CLEAN : - -@erase "$(INTDIR)\jpegtran.obj" - -@erase "$(INTDIR)\rdswitch.obj" - -@erase "$(INTDIR)\cdjpeg.obj" - -@erase "$(INTDIR)\transupp.obj" - -@erase "$(OUTDIR)\jpegtran.exe" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c -CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"\ - /Fp"$(INTDIR)/jpegtran.pch" /YX /Fo"$(INTDIR)/" /c -CPP_OBJS=.\jpegtran\Release/ -CPP_SBRS=.\. -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -BSC32_FLAGS=/nologo /o"$(OUTDIR)/jpegtran.bsc" -BSC32_SBRS= \ - -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib\ - comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\ - odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no\ - /pdb:"$(OUTDIR)/jpegtran.pdb" /machine:I386 /out:"$(OUTDIR)/jpegtran.exe" -LINK32_OBJS= \ - "$(INTDIR)\jpegtran.obj" \ - "$(INTDIR)\rdswitch.obj" \ - "$(INTDIR)\cdjpeg.obj" \ - "$(INTDIR)\transupp.obj" \ - - -"$(OUTDIR)\jpegtran.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ELSEIF "$(CFG)" == "rdjpgcom - Win32" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "rdjpgcom\Release" -# PROP BASE Intermediate_Dir "rdjpgcom\Release" -# PROP BASE Target_Dir "rdjpgcom" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "rdjpgcom\Release" -# PROP Intermediate_Dir "rdjpgcom\Release" -# PROP Target_Dir "rdjpgcom" -OUTDIR=.\rdjpgcom\Release -INTDIR=.\rdjpgcom\Release - -ALL : "$(OUTDIR)\rdjpgcom.exe" - -CLEAN : - -@erase "$(INTDIR)\rdjpgcom.obj" - -@erase "$(OUTDIR)\rdjpgcom.exe" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c -CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"\ - /Fp"$(INTDIR)/rdjpgcom.pch" /YX /Fo"$(INTDIR)/" /c -CPP_OBJS=.\rdjpgcom\Release/ -CPP_SBRS=.\. -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -BSC32_FLAGS=/nologo /o"$(OUTDIR)/rdjpgcom.bsc" -BSC32_SBRS= \ - -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib\ - comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\ - odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no\ - /pdb:"$(OUTDIR)/rdjpgcom.pdb" /machine:I386 /out:"$(OUTDIR)/rdjpgcom.exe" -LINK32_OBJS= \ - "$(INTDIR)\rdjpgcom.obj" - -"$(OUTDIR)\rdjpgcom.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ELSEIF "$(CFG)" == "wrjpgcom - Win32" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "wrjpgcom\Release" -# PROP BASE Intermediate_Dir "wrjpgcom\Release" -# PROP BASE Target_Dir "wrjpgcom" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "wrjpgcom\Release" -# PROP Intermediate_Dir "wrjpgcom\Release" -# PROP Target_Dir "wrjpgcom" -OUTDIR=.\wrjpgcom\Release -INTDIR=.\wrjpgcom\Release - -ALL : "$(OUTDIR)\wrjpgcom.exe" - -CLEAN : - -@erase "$(INTDIR)\wrjpgcom.obj" - -@erase "$(OUTDIR)\wrjpgcom.exe" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c -CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"\ - /Fp"$(INTDIR)/wrjpgcom.pch" /YX /Fo"$(INTDIR)/" /c -CPP_OBJS=.\wrjpgcom\Release/ -CPP_SBRS=.\. -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -BSC32_FLAGS=/nologo /o"$(OUTDIR)/wrjpgcom.bsc" -BSC32_SBRS= \ - -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -LINK32_FLAGS=Release\jpeg.lib kernel32.lib user32.lib gdi32.lib winspool.lib\ - comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\ - odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no\ - /pdb:"$(OUTDIR)/wrjpgcom.pdb" /machine:I386 /out:"$(OUTDIR)/wrjpgcom.exe" -LINK32_OBJS= \ - "$(INTDIR)\wrjpgcom.obj" - -"$(OUTDIR)\wrjpgcom.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ENDIF - -.c{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.c{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -################################################################################ -# Begin Target - -# Name "cjpeg - Win32" - -!IF "$(CFG)" == "cjpeg - Win32" - -!ENDIF - -################################################################################ -# Begin Source File - -SOURCE="cjpeg.c" -DEP_CPP_CJPEG=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - "jversion.h"\ - - -"$(INTDIR)\cjpeg.obj" : $(SOURCE) $(DEP_CPP_CJPEG) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="cdjpeg.c" -DEP_CPP_CDJPE=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\cdjpeg.obj" : $(SOURCE) $(DEP_CPP_CDJPE) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="rdswitch.c" -DEP_CPP_RDSWI=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\rdswitch.obj" : $(SOURCE) $(DEP_CPP_RDSWI) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="rdppm.c" -DEP_CPP_RDPPM=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\rdppm.obj" : $(SOURCE) $(DEP_CPP_RDPPM) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="rdgif.c" -DEP_CPP_RDGIF=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\rdgif.obj" : $(SOURCE) $(DEP_CPP_RDGIF) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="rdtarga.c" -DEP_CPP_RDTAR=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\rdtarga.obj" : $(SOURCE) $(DEP_CPP_RDTAR) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="rdbmp.c" -DEP_CPP_RDBMP=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\rdbmp.obj" : $(SOURCE) $(DEP_CPP_RDBMP) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="rdrle.c" -DEP_CPP_RDRLE=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\rdrle.obj" : $(SOURCE) $(DEP_CPP_RDRLE) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -# End Target -################################################################################ -# Begin Target - -# Name "djpeg - Win32" - -!IF "$(CFG)" == "djpeg - Win32" - -!ENDIF - -################################################################################ -# Begin Source File - -SOURCE="djpeg.c" -DEP_CPP_DJPEG=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - "jversion.h"\ - - -"$(INTDIR)\djpeg.obj" : $(SOURCE) $(DEP_CPP_DJPEG) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="cdjpeg.c" -DEP_CPP_CDJPE=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\cdjpeg.obj" : $(SOURCE) $(DEP_CPP_CDJPE) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="rdcolmap.c" -DEP_CPP_RDCOL=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\rdcolmap.obj" : $(SOURCE) $(DEP_CPP_RDCOL) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="wrppm.c" -DEP_CPP_WRPPM=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\wrppm.obj" : $(SOURCE) $(DEP_CPP_WRPPM) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="wrgif.c" -DEP_CPP_WRGIF=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\wrgif.obj" : $(SOURCE) $(DEP_CPP_WRGIF) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="wrtarga.c" -DEP_CPP_WRTAR=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\wrtarga.obj" : $(SOURCE) $(DEP_CPP_WRTAR) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="wrbmp.c" -DEP_CPP_WRBMP=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\wrbmp.obj" : $(SOURCE) $(DEP_CPP_WRBMP) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="wrrle.c" -DEP_CPP_WRRLE=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\wrrle.obj" : $(SOURCE) $(DEP_CPP_WRRLE) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -# End Target -################################################################################ -# Begin Target - -# Name "jpegtran - Win32" - -!IF "$(CFG)" == "jpegtran - Win32" - -!ENDIF - -################################################################################ -# Begin Source File - -SOURCE="jpegtran.c" -DEP_CPP_JPEGT=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - "transupp.h"\ - "jversion.h"\ - - -"$(INTDIR)\jpegtran.obj" : $(SOURCE) $(DEP_CPP_JPEGT) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="cdjpeg.c" -DEP_CPP_CDJPE=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\cdjpeg.obj" : $(SOURCE) $(DEP_CPP_CDJPE) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="rdswitch.c" -DEP_CPP_RDSWI=\ - "cdjpeg.h"\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - "cderror.h"\ - - -"$(INTDIR)\rdswitch.obj" : $(SOURCE) $(DEP_CPP_RDSWI) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="transupp.c" -DEP_CPP_TRANS=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "transupp.h"\ - - -"$(INTDIR)\transupp.obj" : $(SOURCE) $(DEP_CPP_TRANS) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -# End Target -################################################################################ -# Begin Target - -# Name "rdjpgcom - Win32" - -!IF "$(CFG)" == "rdjpgcom - Win32" - -!ENDIF - -################################################################################ -# Begin Source File - -SOURCE="rdjpgcom.c" -DEP_CPP_RDJPG=\ - "jinclude.h"\ - "jconfig.h"\ - - -"$(INTDIR)\rdjpgcom.obj" : $(SOURCE) $(DEP_CPP_RDJPG) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -# End Target -################################################################################ -# Begin Target - -# Name "wrjpgcom - Win32" - -!IF "$(CFG)" == "wrjpgcom - Win32" - -!ENDIF - -################################################################################ -# Begin Source File - -SOURCE="wrjpgcom.c" -DEP_CPP_WRJPG=\ - "jinclude.h"\ - "jconfig.h"\ - - -"$(INTDIR)\wrjpgcom.obj" : $(SOURCE) $(DEP_CPP_WRJPG) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -# End Target -# End Project -################################################################################ - diff --git a/Build/source/libs/jpeg/makefile.ansi b/Build/source/libs/jpeg/makefile.ansi deleted file mode 100644 index 82919135937..00000000000 --- a/Build/source/libs/jpeg/makefile.ansi +++ /dev/null @@ -1,214 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is suitable for Unix-like systems with ANSI-capable compilers. -# If you have a non-ANSI compiler, makefile.unix is a better starting point. - -# Read installation instructions before saying "make" !! - -# The name of your C compiler: -CC= cc - -# You may need to adjust these cc options: -CFLAGS= -O -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via -D switches here. - -# Link-time cc options: -LDFLAGS= - -# To link any special libraries, add the necessary -l commands here. -LDLIBS= - -# Put here the object file name for the correct system-dependent memory -# manager file. For Unix this is usually jmemnobs.o, but you may want -# to use jmemansi.o or jmemname.o if you have limited swap space. -SYSDEPMEM= jmemnobs.o - -# miscellaneous OS-dependent stuff -# linker -LN= $(CC) -# file deletion command -RM= rm -f -# library (.a) file creation command -AR= ar rc -# second step in .a creation (use "touch" if not needed) -AR2= ranlib - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ - jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ - jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ - jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ - jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ - jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ - jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ - jquant2.c jutils.c jmemmgr.c -# memmgr back ends: compile only one of these into a working library -SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c -# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ - rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c -SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ - jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ - wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ - coderules.doc filelist.doc change.log -MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ - makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ - makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ - maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ - makvms.opt -CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ - jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ - jconfig.vms -CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ - testimgp.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapimin.o jcapistd.o jctrans.o jcparam.o jdatadst.o jcinit.o \ - jcmaster.o jcmarker.o jcmainct.o jcprepct.o jccoefct.o jccolor.o \ - jcsample.o jchuff.o jcphuff.o jcdctmgr.o jfdctfst.o jfdctflt.o \ - jfdctint.o -# decompression library object files -DLIBOBJECTS= jdapimin.o jdapistd.o jdtrans.o jdatasrc.o jdmaster.o \ - jdinput.o jdmarker.o jdhuff.o jdphuff.o jdmainct.o jdcoefct.o \ - jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ - jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o -# These objectfiles are included in libjpeg.a -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for sample applications (excluding library files) -COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ - cdjpeg.o -DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ - cdjpeg.o -TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o - - -all: libjpeg.a cjpeg djpeg jpegtran rdjpgcom wrjpgcom - -libjpeg.a: $(LIBOBJECTS) - $(RM) libjpeg.a - $(AR) libjpeg.a $(LIBOBJECTS) - $(AR2) libjpeg.a - -cjpeg: $(COBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.a $(LDLIBS) - -djpeg: $(DOBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.a $(LDLIBS) - -jpegtran: $(TROBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o jpegtran $(TROBJECTS) libjpeg.a $(LDLIBS) - -rdjpgcom: rdjpgcom.o - $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.o $(LDLIBS) - -wrjpgcom: wrjpgcom.o - $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.o $(LDLIBS) - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -clean: - $(RM) *.o cjpeg djpeg jpegtran libjpeg.a rdjpgcom wrjpgcom - $(RM) core testout* - -test: cjpeg djpeg jpegtran - $(RM) testout* - ./djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg - ./cjpeg -dct int -outfile testout.jpg testimg.ppm - ./djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg - ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm - ./jpegtran -outfile testoutt.jpg testprog.jpg - cmp testimg.ppm testout.ppm - cmp testimg.bmp testout.bmp - cmp testimg.jpg testout.jpg - cmp testimg.ppm testoutp.ppm - cmp testimgp.jpg testoutp.jpg - cmp testorig.jpg testoutt.jpg - - -jcapimin.o: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcapistd.o: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcinit.o: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcphuff.o: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jctrans.o: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapimin.o: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapistd.o: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdinput.o: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdphuff.o: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdtrans.o: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.o: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.o: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.o: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.o: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemmac.o: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.o: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.o: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -jpegtran.o: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h -rdjpgcom.o: rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.o: wrjpgcom.c jinclude.h jconfig.h -cdjpeg.o: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdcolmap.o: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdswitch.o: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -transupp.o: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h -rdppm.o: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.o: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.o: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.o: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.o: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.o: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.o: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.o: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.o: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.o: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/Build/source/libs/jpeg/makefile.bcc b/Build/source/libs/jpeg/makefile.bcc deleted file mode 100644 index a1cfcde6697..00000000000 --- a/Build/source/libs/jpeg/makefile.bcc +++ /dev/null @@ -1,285 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is suitable for Borland C on MS-DOS or OS/2. -# It works with Borland C++ for DOS, revision 3.0 or later, -# and has been tested with Borland C++ for OS/2. -# Watch out for optimization bugs in the OS/2 compilers --- see notes below! -# Thanks to Tom Wright and Ge' Weijers (original DOS) and -# Ken Porter (OS/2) for this file. - -# Read installation instructions before saying "make" !! - -# Are we under DOS or OS/2? -!if !$d(DOS) && !$d(OS2) -!if $d(__OS2__) -OS2=1 -!else -DOS=1 -!endif -!endif - -# The name of your C compiler: -CC= bcc - -# You may need to adjust these cc options: -!if $d(DOS) -CFLAGS= -O2 -mm -w-par -w-stu -w-ccc -w-rch -!else -CFLAGS= -O1 -w-par -w-stu -w-ccc -w-rch -!endif -# -O2 enables full code optimization (for pre-3.0 Borland C++, use -O -G -Z). -# -O2 is buggy in Borland OS/2 C++ revision 2.0, so use -O1 there for now. -# If you have Borland OS/2 C++ revision 1.0, use -O or no optimization at all. -# -mm selects medium memory model (near data, far code pointers; DOS only!) -# -w-par suppresses warnings about unused function parameters -# -w-stu suppresses warnings about incomplete structures -# -w-ccc suppresses warnings about compile-time-constant conditions -# -w-rch suppresses warnings about unreachable code -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via -D switches here. - -# Link-time cc options: -!if $d(DOS) -LDFLAGS= -mm -# memory model option here must match CFLAGS! -!else -LDFLAGS= -# -lai full-screen app -# -lc case-significant link -!endif - -# Put here the object file name for the correct system-dependent memory -# manager file. -# For DOS, we recommend jmemdos.c and jmemdosa.asm. -# For OS/2, we recommend jmemnobs.c (flat memory!) -# SYSDEPMEMLIB must list the same files with "+" signs for the librarian. -!if $d(DOS) -SYSDEPMEM= jmemdos.obj jmemdosa.obj -SYSDEPMEMLIB= +jmemdos.obj +jmemdosa.obj -!else -SYSDEPMEM= jmemnobs.obj -SYSDEPMEMLIB= +jmemnobs.obj -!endif - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ - jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ - jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ - jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ - jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ - jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ - jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ - jquant2.c jutils.c jmemmgr.c -# memmgr back ends: compile only one of these into a working library -SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c -# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ - rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c -SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ - jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ - wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ - coderules.doc filelist.doc change.log -MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ - makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ - makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ - maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ - makvms.opt -CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ - jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ - jconfig.vms -CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ - testimgp.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapimin.obj jcapistd.obj jctrans.obj jcparam.obj jdatadst.obj \ - jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj jcprepct.obj \ - jccoefct.obj jccolor.obj jcsample.obj jchuff.obj jcphuff.obj \ - jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj -# decompression library object files -DLIBOBJECTS= jdapimin.obj jdapistd.obj jdtrans.obj jdatasrc.obj \ - jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdphuff.obj \ - jdmainct.obj jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj \ - jidctflt.obj jidctint.obj jidctred.obj jdsample.obj jdcolor.obj \ - jquant1.obj jquant2.obj jdmerge.obj -# These objectfiles are included in libjpeg.lib -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for sample applications (excluding library files) -COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj \ - rdswitch.obj cdjpeg.obj -DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ - rdcolmap.obj cdjpeg.obj -TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj - - -all: libjpeg.lib cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe - -libjpeg.lib: $(LIBOBJECTS) - - del libjpeg.lib - tlib libjpeg.lib /E /C @&&| -+jcapimin.obj +jcapistd.obj +jctrans.obj +jcparam.obj +jdatadst.obj & -+jcinit.obj +jcmaster.obj +jcmarker.obj +jcmainct.obj +jcprepct.obj & -+jccoefct.obj +jccolor.obj +jcsample.obj +jchuff.obj +jcphuff.obj & -+jcdctmgr.obj +jfdctfst.obj +jfdctflt.obj +jfdctint.obj +jdapimin.obj & -+jdapistd.obj +jdtrans.obj +jdatasrc.obj +jdmaster.obj +jdinput.obj & -+jdmarker.obj +jdhuff.obj +jdphuff.obj +jdmainct.obj +jdcoefct.obj & -+jdpostct.obj +jddctmgr.obj +jidctfst.obj +jidctflt.obj +jidctint.obj & -+jidctred.obj +jdsample.obj +jdcolor.obj +jquant1.obj +jquant2.obj & -+jdmerge.obj +jcomapi.obj +jutils.obj +jerror.obj +jmemmgr.obj & -$(SYSDEPMEMLIB) -| - -cjpeg.exe: $(COBJECTS) libjpeg.lib - $(CC) $(LDFLAGS) -ecjpeg.exe $(COBJECTS) libjpeg.lib - -djpeg.exe: $(DOBJECTS) libjpeg.lib - $(CC) $(LDFLAGS) -edjpeg.exe $(DOBJECTS) libjpeg.lib - -jpegtran.exe: $(TROBJECTS) libjpeg.lib - $(CC) $(LDFLAGS) -ejpegtran.exe $(TROBJECTS) libjpeg.lib - -rdjpgcom.exe: rdjpgcom.c -!if $d(DOS) - $(CC) -ms -O rdjpgcom.c -!else - $(CC) $(CFLAGS) rdjpgcom.c -!endif - -# On DOS, wrjpgcom needs large model so it can malloc a 64K chunk -wrjpgcom.exe: wrjpgcom.c -!if $d(DOS) - $(CC) -ml -O wrjpgcom.c -!else - $(CC) $(CFLAGS) wrjpgcom.c -!endif - -# This "{}" syntax allows Borland Make to "batch" source files. -# In this way, each run of the compiler can build many modules. -.c.obj: - $(CC) $(CFLAGS) -c{ $<} - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -clean: - - del *.obj - - del libjpeg.lib - - del cjpeg.exe - - del djpeg.exe - - del jpegtran.exe - - del rdjpgcom.exe - - del wrjpgcom.exe - - del testout*.* - -test: cjpeg.exe djpeg.exe jpegtran.exe - - del testout*.* - djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg - cjpeg -dct int -outfile testout.jpg testimg.ppm - djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg - cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm - jpegtran -outfile testoutt.jpg testprog.jpg -!if $d(DOS) - fc /b testimg.ppm testout.ppm - fc /b testimg.bmp testout.bmp - fc /b testimg.jpg testout.jpg - fc /b testimg.ppm testoutp.ppm - fc /b testimgp.jpg testoutp.jpg - fc /b testorig.jpg testoutt.jpg -!else - echo n > n.tmp - comp testimg.ppm testout.ppm < n.tmp - comp testimg.bmp testout.bmp < n.tmp - comp testimg.jpg testout.jpg < n.tmp - comp testimg.ppm testoutp.ppm < n.tmp - comp testimgp.jpg testoutp.jpg < n.tmp - comp testorig.jpg testoutt.jpg < n.tmp - del n.tmp -!endif - - -jcapimin.obj: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcapistd.obj: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.obj: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.obj: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.obj: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.obj: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcinit.obj: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.obj: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.obj: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.obj: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.obj: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.obj: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcphuff.obj: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcprepct.obj: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.obj: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jctrans.obj: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapimin.obj: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapistd.obj: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatadst.obj: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatasrc.obj: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.obj: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.obj: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.obj: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.obj: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdinput.obj: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.obj: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.obj: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.obj: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.obj: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdphuff.obj: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdpostct.obj: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.obj: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdtrans.obj: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.obj: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jfdctflt.obj: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctfst.obj: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.obj: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.obj: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.obj: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.obj: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.obj: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.obj: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.obj: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jutils.obj: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.obj: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.obj: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.obj: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.obj: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.obj: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemmac.obj: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.obj: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.obj: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -jpegtran.obj: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h -rdjpgcom.obj: rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.obj: wrjpgcom.c jinclude.h jconfig.h -cdjpeg.obj: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdcolmap.obj: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdswitch.obj: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -transupp.obj: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h -rdppm.obj: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.obj: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.obj: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.obj: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.obj: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.obj: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.obj: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.obj: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.obj: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.obj: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -jmemdosa.obj: jmemdosa.asm - tasm /mx jmemdosa.asm diff --git a/Build/source/libs/jpeg/makefile.cfg b/Build/source/libs/jpeg/makefile.cfg deleted file mode 100644 index f25e42e3e66..00000000000 --- a/Build/source/libs/jpeg/makefile.cfg +++ /dev/null @@ -1,319 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# makefile.cfg is edited by configure to produce a custom Makefile. - -# Read installation instructions before saying "make" !! - -# For compiling with source and object files in different directories. -srcdir = @srcdir@ -VPATH = @srcdir@ - -# Where to install the programs and man pages. -prefix = @prefix@ -exec_prefix = @exec_prefix@ -bindir = $(exec_prefix)/bin -libdir = $(exec_prefix)/lib -includedir = $(prefix)/include -binprefix = -manprefix = -manext = 1 -mandir = $(prefix)/man/man$(manext) - -# The name of your C compiler: -CC= @CC@ - -# You may need to adjust these cc options: -CFLAGS= @CFLAGS@ @CPPFLAGS@ @INCLUDEFLAGS@ -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via -D switches here. -# However, any special defines for ansi2knr.c may be included here: -ANSI2KNRFLAGS= @ANSI2KNRFLAGS@ - -# Link-time cc options: -LDFLAGS= @LDFLAGS@ - -# To link any special libraries, add the necessary -l commands here. -LDLIBS= @LIBS@ - -# If using GNU libtool, LIBTOOL references it; if not, LIBTOOL is empty. -LIBTOOL = @LIBTOOL@ -# $(O) expands to "lo" if using libtool, plain "o" if not. -# Similarly, $(A) expands to "la" or "a". -O = @O@ -A = @A@ - -# Library version ID; libtool uses this for the shared library version number. -# Note: we suggest this match the macro of the same name in jpeglib.h. -JPEG_LIB_VERSION = @JPEG_LIB_VERSION@ - -# Put here the object file name for the correct system-dependent memory -# manager file. For Unix this is usually jmemnobs.o, but you may want -# to use jmemansi.o or jmemname.o if you have limited swap space. -SYSDEPMEM= @MEMORYMGR@ - -# miscellaneous OS-dependent stuff -SHELL= /bin/sh -# linker -LN= @LN@ -# file deletion command -RM= rm -f -# directory creation command -MKDIR= mkdir -# library (.a) file creation command -AR= ar rc -# second step in .a creation (use "touch" if not needed) -AR2= @RANLIB@ -# installation program -INSTALL= @INSTALL@ -INSTALL_PROGRAM= @INSTALL_PROGRAM@ -INSTALL_LIB= @INSTALL_LIB@ -INSTALL_DATA= @INSTALL_DATA@ - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ - jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ - jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ - jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ - jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ - jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ - jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ - jquant2.c jutils.c jmemmgr.c -# memmgr back ends: compile only one of these into a working library -SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c -# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ - rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c -SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ - jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ - wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ - coderules.doc filelist.doc change.log -MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ - makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ - makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ - maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ - makvms.opt -CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ - jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ - jconfig.vms -CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ - testimgp.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.$(O) jutils.$(O) jerror.$(O) jmemmgr.$(O) $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapimin.$(O) jcapistd.$(O) jctrans.$(O) jcparam.$(O) \ - jdatadst.$(O) jcinit.$(O) jcmaster.$(O) jcmarker.$(O) jcmainct.$(O) \ - jcprepct.$(O) jccoefct.$(O) jccolor.$(O) jcsample.$(O) jchuff.$(O) \ - jcphuff.$(O) jcdctmgr.$(O) jfdctfst.$(O) jfdctflt.$(O) \ - jfdctint.$(O) -# decompression library object files -DLIBOBJECTS= jdapimin.$(O) jdapistd.$(O) jdtrans.$(O) jdatasrc.$(O) \ - jdmaster.$(O) jdinput.$(O) jdmarker.$(O) jdhuff.$(O) jdphuff.$(O) \ - jdmainct.$(O) jdcoefct.$(O) jdpostct.$(O) jddctmgr.$(O) \ - jidctfst.$(O) jidctflt.$(O) jidctint.$(O) jidctred.$(O) \ - jdsample.$(O) jdcolor.$(O) jquant1.$(O) jquant2.$(O) jdmerge.$(O) -# These objectfiles are included in libjpeg.a -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for sample applications (excluding library files) -COBJECTS= cjpeg.$(O) rdppm.$(O) rdgif.$(O) rdtarga.$(O) rdrle.$(O) \ - rdbmp.$(O) rdswitch.$(O) cdjpeg.$(O) -DOBJECTS= djpeg.$(O) wrppm.$(O) wrgif.$(O) wrtarga.$(O) wrrle.$(O) \ - wrbmp.$(O) rdcolmap.$(O) cdjpeg.$(O) -TROBJECTS= jpegtran.$(O) rdswitch.$(O) cdjpeg.$(O) transupp.$(O) - - -all: @A2K_DEPS@ libjpeg.$(A) cjpeg djpeg jpegtran rdjpgcom wrjpgcom - -# Special compilation rules to support ansi2knr and libtool. -.SUFFIXES: .lo .la - -# How to compile with libtool. -@COM_LT@.c.lo: -@COM_LT@ $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c $(srcdir)/$*.c - -# How to use ansi2knr, when not using libtool. -@COM_A2K@.c.o: -@COM_A2K@ ./ansi2knr $(srcdir)/$*.c knr/$*.c -@COM_A2K@ $(CC) $(CFLAGS) -c knr/$*.c -@COM_A2K@ $(RM) knr/$*.c - -# How to use ansi2knr AND libtool. -@COM_A2K@.c.lo: -@COM_A2K@ ./ansi2knr $(srcdir)/$*.c knr/$*.c -@COM_A2K@ $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c knr/$*.c -@COM_A2K@ $(RM) knr/$*.c - -ansi2knr: ansi2knr.c - $(CC) $(CFLAGS) $(ANSI2KNRFLAGS) -o ansi2knr $(srcdir)/ansi2knr.c - $(MKDIR) knr - -# the library: - -# without libtool: -libjpeg.a: @A2K_DEPS@ $(LIBOBJECTS) - $(RM) libjpeg.a - $(AR) libjpeg.a $(LIBOBJECTS) - $(AR2) libjpeg.a - -# with libtool: -libjpeg.la: @A2K_DEPS@ $(LIBOBJECTS) - $(LIBTOOL) --mode=link $(CC) -o libjpeg.la $(LIBOBJECTS) \ - -rpath $(libdir) -version-info $(JPEG_LIB_VERSION) - -# sample programs: - -cjpeg: $(COBJECTS) libjpeg.$(A) - $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.$(A) $(LDLIBS) - -djpeg: $(DOBJECTS) libjpeg.$(A) - $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.$(A) $(LDLIBS) - -jpegtran: $(TROBJECTS) libjpeg.$(A) - $(LN) $(LDFLAGS) -o jpegtran $(TROBJECTS) libjpeg.$(A) $(LDLIBS) - -rdjpgcom: rdjpgcom.$(O) - $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.$(O) $(LDLIBS) - -wrjpgcom: wrjpgcom.$(O) - $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.$(O) $(LDLIBS) - -# Installation rules: - -install: cjpeg djpeg jpegtran rdjpgcom wrjpgcom @FORCE_INSTALL_LIB@ - $(INSTALL_PROGRAM) cjpeg $(bindir)/$(binprefix)cjpeg - $(INSTALL_PROGRAM) djpeg $(bindir)/$(binprefix)djpeg - $(INSTALL_PROGRAM) jpegtran $(bindir)/$(binprefix)jpegtran - $(INSTALL_PROGRAM) rdjpgcom $(bindir)/$(binprefix)rdjpgcom - $(INSTALL_PROGRAM) wrjpgcom $(bindir)/$(binprefix)wrjpgcom - $(INSTALL_DATA) $(srcdir)/cjpeg.1 $(mandir)/$(manprefix)cjpeg.$(manext) - $(INSTALL_DATA) $(srcdir)/djpeg.1 $(mandir)/$(manprefix)djpeg.$(manext) - $(INSTALL_DATA) $(srcdir)/jpegtran.1 $(mandir)/$(manprefix)jpegtran.$(manext) - $(INSTALL_DATA) $(srcdir)/rdjpgcom.1 $(mandir)/$(manprefix)rdjpgcom.$(manext) - $(INSTALL_DATA) $(srcdir)/wrjpgcom.1 $(mandir)/$(manprefix)wrjpgcom.$(manext) - -install-lib: libjpeg.$(A) install-headers - $(INSTALL_LIB) libjpeg.$(A) $(libdir)/$(binprefix)libjpeg.$(A) - -install-headers: jconfig.h - $(INSTALL_DATA) jconfig.h $(includedir)/jconfig.h - $(INSTALL_DATA) $(srcdir)/jpeglib.h $(includedir)/jpeglib.h - $(INSTALL_DATA) $(srcdir)/jmorecfg.h $(includedir)/jmorecfg.h - $(INSTALL_DATA) $(srcdir)/jerror.h $(includedir)/jerror.h - -clean: - $(RM) *.o *.lo libjpeg.a libjpeg.la - $(RM) cjpeg djpeg jpegtran rdjpgcom wrjpgcom - $(RM) ansi2knr core testout* config.log config.status - $(RM) -r knr .libs _libs - -distclean: clean - $(RM) Makefile jconfig.h libtool config.cache - -test: cjpeg djpeg jpegtran - $(RM) testout* - ./djpeg -dct int -ppm -outfile testout.ppm $(srcdir)/testorig.jpg - ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp $(srcdir)/testorig.jpg - ./cjpeg -dct int -outfile testout.jpg $(srcdir)/testimg.ppm - ./djpeg -dct int -ppm -outfile testoutp.ppm $(srcdir)/testprog.jpg - ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg $(srcdir)/testimg.ppm - ./jpegtran -outfile testoutt.jpg $(srcdir)/testprog.jpg - cmp $(srcdir)/testimg.ppm testout.ppm - cmp $(srcdir)/testimg.bmp testout.bmp - cmp $(srcdir)/testimg.jpg testout.jpg - cmp $(srcdir)/testimg.ppm testoutp.ppm - cmp $(srcdir)/testimgp.jpg testoutp.jpg - cmp $(srcdir)/testorig.jpg testoutt.jpg - -check: test - -# Mistake catcher: - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -# GNU Make likes to know which target names are not really files to be made: -.PHONY: all install install-lib install-headers clean distclean test check - - -jcapimin.$(O): jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcapistd.$(O): jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.$(O): jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.$(O): jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.$(O): jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.$(O): jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcinit.$(O): jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.$(O): jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.$(O): jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.$(O): jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.$(O): jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.$(O): jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcphuff.$(O): jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcprepct.$(O): jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.$(O): jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jctrans.$(O): jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapimin.$(O): jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapistd.$(O): jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatadst.$(O): jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatasrc.$(O): jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.$(O): jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.$(O): jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.$(O): jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.$(O): jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdinput.$(O): jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.$(O): jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.$(O): jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.$(O): jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.$(O): jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdphuff.$(O): jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdpostct.$(O): jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.$(O): jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdtrans.$(O): jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.$(O): jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jfdctflt.$(O): jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctfst.$(O): jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.$(O): jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.$(O): jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.$(O): jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.$(O): jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.$(O): jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.$(O): jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.$(O): jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jutils.$(O): jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.$(O): jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.$(O): jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.$(O): jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.$(O): jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.$(O): jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemmac.$(O): jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.$(O): cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.$(O): djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -jpegtran.$(O): jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h -rdjpgcom.$(O): rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.$(O): wrjpgcom.c jinclude.h jconfig.h -cdjpeg.$(O): cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdcolmap.$(O): rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdswitch.$(O): rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -transupp.$(O): transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h -rdppm.$(O): rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.$(O): wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.$(O): rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.$(O): wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.$(O): rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.$(O): wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.$(O): rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.$(O): wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.$(O): rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.$(O): wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/Build/source/libs/jpeg/makefile.dj b/Build/source/libs/jpeg/makefile.dj deleted file mode 100644 index f766d25e38a..00000000000 --- a/Build/source/libs/jpeg/makefile.dj +++ /dev/null @@ -1,220 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is for DJGPP (Delorie's GNU C port on MS-DOS), v2.0 or later. -# Thanks to Frank J. Donahoe for this version. - -# Read installation instructions before saying "make" !! - -# The name of your C compiler: -CC= gcc - -# You may need to adjust these cc options: -CFLAGS= -O2 -Wall -I. -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via -D switches here. - -# Link-time cc options: -LDFLAGS= -s - -# To link any special libraries, add the necessary -l commands here. -LDLIBS= - -# Put here the object file name for the correct system-dependent memory -# manager file. For DJGPP this is usually jmemnobs.o, but you could -# use jmemname.o if you want to use named temp files instead of swap space. -SYSDEPMEM= jmemnobs.o - -# miscellaneous OS-dependent stuff -# linker -LN= $(CC) -# file deletion command -RM= del -# library (.a) file creation command -AR= ar rc -# second step in .a creation (use "touch" if not needed) -AR2= ranlib - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ - jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ - jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ - jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ - jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ - jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ - jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ - jquant2.c jutils.c jmemmgr.c -# memmgr back ends: compile only one of these into a working library -SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c -# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ - rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c -SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ - jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ - wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ - coderules.doc filelist.doc change.log -MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ - makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ - makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ - maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ - makvms.opt -CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ - jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ - jconfig.vms -CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ - testimgp.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapimin.o jcapistd.o jctrans.o jcparam.o jdatadst.o jcinit.o \ - jcmaster.o jcmarker.o jcmainct.o jcprepct.o jccoefct.o jccolor.o \ - jcsample.o jchuff.o jcphuff.o jcdctmgr.o jfdctfst.o jfdctflt.o \ - jfdctint.o -# decompression library object files -DLIBOBJECTS= jdapimin.o jdapistd.o jdtrans.o jdatasrc.o jdmaster.o \ - jdinput.o jdmarker.o jdhuff.o jdphuff.o jdmainct.o jdcoefct.o \ - jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ - jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o -# These objectfiles are included in libjpeg.a -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for sample applications (excluding library files) -COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ - cdjpeg.o -DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ - cdjpeg.o -TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o - - -all: libjpeg.a cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe - -libjpeg.a: $(LIBOBJECTS) - $(RM) libjpeg.a - $(AR) libjpeg.a $(LIBOBJECTS) - $(AR2) libjpeg.a - -cjpeg.exe: $(COBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o cjpeg.exe $(COBJECTS) libjpeg.a $(LDLIBS) - -djpeg.exe: $(DOBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o djpeg.exe $(DOBJECTS) libjpeg.a $(LDLIBS) - -jpegtran.exe: $(TROBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o jpegtran.exe $(TROBJECTS) libjpeg.a $(LDLIBS) - -rdjpgcom.exe: rdjpgcom.o - $(LN) $(LDFLAGS) -o rdjpgcom.exe rdjpgcom.o $(LDLIBS) - -wrjpgcom.exe: wrjpgcom.o - $(LN) $(LDFLAGS) -o wrjpgcom.exe wrjpgcom.o $(LDLIBS) - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -clean: - $(RM) *.o - $(RM) cjpeg.exe - $(RM) djpeg.exe - $(RM) jpegtran.exe - $(RM) rdjpgcom.exe - $(RM) wrjpgcom.exe - $(RM) libjpeg.a - $(RM) testout*.* - -test: cjpeg.exe djpeg.exe jpegtran.exe - $(RM) testout*.* - ./djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg - ./cjpeg -dct int -outfile testout.jpg testimg.ppm - ./djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg - ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm - ./jpegtran -outfile testoutt.jpg testprog.jpg - fc /b testimg.ppm testout.ppm - fc /b testimg.bmp testout.bmp - fc /b testimg.jpg testout.jpg - fc /b testimg.ppm testoutp.ppm - fc /b testimgp.jpg testoutp.jpg - fc /b testorig.jpg testoutt.jpg - - -jcapimin.o: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcapistd.o: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcinit.o: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcphuff.o: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jctrans.o: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapimin.o: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapistd.o: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdinput.o: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdphuff.o: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdtrans.o: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.o: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.o: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.o: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.o: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemmac.o: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.o: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.o: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -jpegtran.o: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h -rdjpgcom.o: rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.o: wrjpgcom.c jinclude.h jconfig.h -cdjpeg.o: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdcolmap.o: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdswitch.o: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -transupp.o: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h -rdppm.o: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.o: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.o: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.o: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.o: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.o: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.o: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.o: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.o: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.o: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/Build/source/libs/jpeg/makefile.manx b/Build/source/libs/jpeg/makefile.manx deleted file mode 100644 index 4cb42d17ca1..00000000000 --- a/Build/source/libs/jpeg/makefile.manx +++ /dev/null @@ -1,214 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is for Amiga systems using Manx Aztec C ver 5.x. -# Thanks to D.J. James (djjames@cup.portal.com) for this version. - -# Read installation instructions before saying "make" !! - -# The name of your C compiler: -CC= cc - -# You may need to adjust these cc options: -# Uncomment for generic 68000 code (will work on any Amiga) -ARCHFLAGS= -sn - -# Uncomment for 68020/68030 code (faster, but won't run on 68000 CPU) -#ARCHFLAGS= -c2 - -CFLAGS= -MC -MD $(ARCHFLAGS) -spfam -r4 - -# Link-time cc options: -LDFLAGS= -g - -# To link any special libraries, add the necessary -l commands here. -LDLIBS= -lml -lcl - -# Put here the object file name for the correct system-dependent memory -# manager file. For Amiga we recommend jmemname.o. -SYSDEPMEM= jmemname.o - -# miscellaneous OS-dependent stuff -# linker -LN= ln -# file deletion command -RM= delete quiet -# library (.lib) file creation command -AR= lb - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ - jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ - jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ - jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ - jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ - jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ - jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ - jquant2.c jutils.c jmemmgr.c -# memmgr back ends: compile only one of these into a working library -SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c -# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ - rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c -SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ - jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ - wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ - coderules.doc filelist.doc change.log -MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ - makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ - makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ - maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ - makvms.opt -CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ - jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ - jconfig.vms -CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ - testimgp.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapimin.o jcapistd.o jctrans.o jcparam.o jdatadst.o jcinit.o \ - jcmaster.o jcmarker.o jcmainct.o jcprepct.o jccoefct.o jccolor.o \ - jcsample.o jchuff.o jcphuff.o jcdctmgr.o jfdctfst.o jfdctflt.o \ - jfdctint.o -# decompression library object files -DLIBOBJECTS= jdapimin.o jdapistd.o jdtrans.o jdatasrc.o jdmaster.o \ - jdinput.o jdmarker.o jdhuff.o jdphuff.o jdmainct.o jdcoefct.o \ - jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ - jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o -# These objectfiles are included in libjpeg.lib -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for sample applications (excluding library files) -COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ - cdjpeg.o -DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ - cdjpeg.o -TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o - - -all: libjpeg.lib cjpeg djpeg jpegtran rdjpgcom wrjpgcom - -libjpeg.lib: $(LIBOBJECTS) - -$(RM) libjpeg.lib - $(AR) libjpeg.lib $(LIBOBJECTS) - -cjpeg: $(COBJECTS) libjpeg.lib - $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.lib $(LDLIBS) - -djpeg: $(DOBJECTS) libjpeg.lib - $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.lib $(LDLIBS) - -jpegtran: $(TROBJECTS) libjpeg.lib - $(LN) $(LDFLAGS) -o jpegtran $(TROBJECTS) libjpeg.lib $(LDLIBS) - -rdjpgcom: rdjpgcom.o - $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.o $(LDLIBS) - -wrjpgcom: wrjpgcom.o - $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.o $(LDLIBS) - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -clean: - -$(RM) *.o cjpeg djpeg jpegtran libjpeg.lib rdjpgcom wrjpgcom - -$(RM) core testout*.* - -test: cjpeg djpeg jpegtran - -$(RM) testout*.* - djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg - cjpeg -dct int -outfile testout.jpg testimg.ppm - djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg - cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm - jpegtran -outfile testoutt.jpg testprog.jpg - cmp testimg.ppm testout.ppm - cmp testimg.bmp testout.bmp - cmp testimg.jpg testout.jpg - cmp testimg.ppm testoutp.ppm - cmp testimgp.jpg testoutp.jpg - cmp testorig.jpg testoutt.jpg - - -jcapimin.o: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcapistd.o: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcinit.o: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcphuff.o: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jctrans.o: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapimin.o: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapistd.o: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdinput.o: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdphuff.o: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdtrans.o: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.o: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.o: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.o: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.o: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemmac.o: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.o: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.o: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -jpegtran.o: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h -rdjpgcom.o: rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.o: wrjpgcom.c jinclude.h jconfig.h -cdjpeg.o: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdcolmap.o: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdswitch.o: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -transupp.o: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h -rdppm.o: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.o: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.o: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.o: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.o: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.o: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.o: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.o: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.o: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.o: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/Build/source/libs/jpeg/makefile.mc6 b/Build/source/libs/jpeg/makefile.mc6 deleted file mode 100644 index 6aff054646a..00000000000 --- a/Build/source/libs/jpeg/makefile.mc6 +++ /dev/null @@ -1,249 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is for Microsoft C for MS-DOS, version 6.00A and up. -# Use NMAKE, not Microsoft's brain-damaged MAKE. -# Thanks to Alan Wright and Chris Turner of Olivetti Research Ltd. - -# Read installation instructions before saying "nmake" !! - -# You may need to adjust these compiler options: -CFLAGS = -AM -Oecigt -Gs -W3 -# -AM medium memory model (or use -AS for small model, if you remove features) -# -Oecigt -Gs maximum safe optimisation (-Ol has bugs in MSC 6.00A) -# -W3 warning level 3 -# You might also want to add -G2 if you have an 80286, etc. -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via -D switches here. - -# Jan-Herman Buining suggests the following switches for MS C 8.0 and a 486: -# CFLAGS = /AM /f- /FPi87 /G3 /Gs /Gy /Ob1 /Oc /Oe /Og /Oi /Ol /On /Oo /Ot \ -# /OV4 /W3 -# except for jquant1.c, which must be compiled with /Oo- to avoid a compiler -# crash. - -# Ingar Steinsland suggests the following switches when building -# a 16-bit Windows DLL: -# CFLAGS = -ALw -Gsw -Zpe -W3 -O2 -Zi -Zd - -# Put here the object file name for the correct system-dependent memory -# manager file. For DOS, we recommend jmemdos.c and jmemdosa.asm. -# (But not for Windows; see install.doc if you use this makefile for Windows.) -SYSDEPMEM= jmemdos.obj jmemdosa.obj -# SYSDEPMEMLIB must list the same files with "+" signs for the librarian. -SYSDEPMEMLIB= +jmemdos.obj +jmemdosa.obj - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ - jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ - jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ - jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ - jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ - jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ - jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ - jquant2.c jutils.c jmemmgr.c -# memmgr back ends: compile only one of these into a working library -SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c -# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ - rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c -SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ - jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ - wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ - coderules.doc filelist.doc change.log -MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ - makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ - makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ - maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ - makvms.opt -CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ - jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ - jconfig.vms -CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ - testimgp.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapimin.obj jcapistd.obj jctrans.obj jcparam.obj jdatadst.obj \ - jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj jcprepct.obj \ - jccoefct.obj jccolor.obj jcsample.obj jchuff.obj jcphuff.obj \ - jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj -# decompression library object files -DLIBOBJECTS= jdapimin.obj jdapistd.obj jdtrans.obj jdatasrc.obj \ - jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdphuff.obj \ - jdmainct.obj jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj \ - jidctflt.obj jidctint.obj jidctred.obj jdsample.obj jdcolor.obj \ - jquant1.obj jquant2.obj jdmerge.obj -# These objectfiles are included in libjpeg.lib -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for sample applications (excluding library files) -COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj \ - rdswitch.obj cdjpeg.obj -DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ - rdcolmap.obj cdjpeg.obj -TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj - -# need linker response file because file list > 128 chars -RFILE = libjpeg.ans - - -all: libjpeg.lib cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe - -libjpeg.lib: $(LIBOBJECTS) $(RFILE) - del libjpeg.lib - lib @$(RFILE) - -# linker response file for building libjpeg.lib -$(RFILE) : makefile - del $(RFILE) - echo libjpeg.lib >$(RFILE) -# silly want-to-create-it prompt: - echo y >>$(RFILE) - echo +jcapimin.obj +jcapistd.obj +jctrans.obj +jcparam.obj & >>$(RFILE) - echo +jdatadst.obj +jcinit.obj +jcmaster.obj +jcmarker.obj & >>$(RFILE) - echo +jcmainct.obj +jcprepct.obj +jccoefct.obj & >>$(RFILE) - echo +jccolor.obj +jcsample.obj +jchuff.obj +jcphuff.obj & >>$(RFILE) - echo +jcdctmgr.obj +jfdctfst.obj +jfdctflt.obj & >>$(RFILE) - echo +jfdctint.obj +jdapimin.obj +jdapistd.obj & >>$(RFILE) - echo +jdtrans.obj +jdatasrc.obj +jdmaster.obj +jdinput.obj & >>$(RFILE) - echo +jdmarker.obj +jdhuff.obj +jdphuff.obj +jdmainct.obj & >>$(RFILE) - echo +jdcoefct.obj +jdpostct.obj +jddctmgr.obj & >>$(RFILE) - echo +jidctfst.obj +jidctflt.obj +jidctint.obj & >>$(RFILE) - echo +jidctred.obj +jdsample.obj +jdcolor.obj +jquant1.obj & >>$(RFILE) - echo +jquant2.obj +jdmerge.obj +jcomapi.obj +jutils.obj & >>$(RFILE) - echo +jerror.obj +jmemmgr.obj & >>$(RFILE) - echo $(SYSDEPMEMLIB) ; >>$(RFILE) - -cjpeg.exe: $(COBJECTS) libjpeg.lib - echo $(COBJECTS) >cjpeg.lst - link /STACK:4096 /EXEPACK @cjpeg.lst, cjpeg.exe, , libjpeg.lib, ; - del cjpeg.lst - -djpeg.exe: $(DOBJECTS) libjpeg.lib - echo $(DOBJECTS) >djpeg.lst - link /STACK:4096 /EXEPACK @djpeg.lst, djpeg.exe, , libjpeg.lib, ; - del djpeg.lst - -jpegtran.exe: $(TROBJECTS) libjpeg.lib - link /STACK:4096 /EXEPACK $(TROBJECTS), jpegtran.exe, , libjpeg.lib, ; - -rdjpgcom.exe: rdjpgcom.c - $(CC) -AS -O -W3 rdjpgcom.c - -# wrjpgcom needs large model so it can malloc a 64K chunk -wrjpgcom.exe: wrjpgcom.c - $(CC) -AL -O -W3 wrjpgcom.c - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -clean: - del *.obj - del libjpeg.lib - del cjpeg.exe - del djpeg.exe - del jpegtran.exe - del rdjpgcom.exe - del wrjpgcom.exe - del testout*.* - -test: cjpeg.exe djpeg.exe jpegtran.exe - del testout*.* - djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg - cjpeg -dct int -outfile testout.jpg testimg.ppm - djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg - cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm - jpegtran -outfile testoutt.jpg testprog.jpg - fc /b testimg.ppm testout.ppm - fc /b testimg.bmp testout.bmp - fc /b testimg.jpg testout.jpg - fc /b testimg.ppm testoutp.ppm - fc /b testimgp.jpg testoutp.jpg - fc /b testorig.jpg testoutt.jpg - - -jcapimin.obj: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcapistd.obj: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.obj: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.obj: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.obj: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.obj: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcinit.obj: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.obj: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.obj: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.obj: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.obj: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.obj: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcphuff.obj: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcprepct.obj: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.obj: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jctrans.obj: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapimin.obj: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapistd.obj: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatadst.obj: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatasrc.obj: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.obj: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.obj: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.obj: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.obj: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdinput.obj: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.obj: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.obj: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.obj: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.obj: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdphuff.obj: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdpostct.obj: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.obj: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdtrans.obj: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.obj: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jfdctflt.obj: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctfst.obj: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.obj: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.obj: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.obj: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.obj: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.obj: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.obj: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.obj: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jutils.obj: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.obj: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.obj: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.obj: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.obj: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.obj: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemmac.obj: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.obj: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.obj: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -jpegtran.obj: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h -rdjpgcom.obj: rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.obj: wrjpgcom.c jinclude.h jconfig.h -cdjpeg.obj: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdcolmap.obj: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdswitch.obj: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -transupp.obj: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h -rdppm.obj: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.obj: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.obj: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.obj: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.obj: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.obj: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.obj: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.obj: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.obj: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.obj: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -jmemdosa.obj : jmemdosa.asm - masm /mx $*; diff --git a/Build/source/libs/jpeg/makefile.mms b/Build/source/libs/jpeg/makefile.mms deleted file mode 100644 index cf130e5b9f3..00000000000 --- a/Build/source/libs/jpeg/makefile.mms +++ /dev/null @@ -1,218 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is for use with MMS on Digital VMS systems. -# Thanks to Rick Dyson (dyson@iowasp.physics.uiowa.edu) -# and Tim Bell (tbell@netcom.com) for their help. - -# Read installation instructions before saying "MMS" !! - -# You may need to adjust these cc options: -CFLAGS= $(CFLAGS) /NoDebug /Optimize -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via /Define switches here. -.ifdef ALPHA -OPT= -.else -OPT= ,Sys$Disk:[]MAKVMS.OPT/Option -.endif - -# Put here the object file name for the correct system-dependent memory -# manager file. For Unix this is usually jmemnobs.o, but you may want -# to use jmemansi.o or jmemname.o if you have limited swap space. -SYSDEPMEM= jmemnobs.obj - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ - jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ - jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ - jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ - jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ - jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ - jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ - jquant2.c jutils.c jmemmgr.c -# memmgr back ends: compile only one of these into a working library -SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c -# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ - rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c -SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ - jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ - wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ - coderules.doc filelist.doc change.log -MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ - makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ - makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ - maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ - makvms.opt -CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ - jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ - jconfig.vms -CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ - testimgp.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapimin.obj jcapistd.obj jctrans.obj jcparam.obj jdatadst.obj \ - jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj jcprepct.obj \ - jccoefct.obj jccolor.obj jcsample.obj jchuff.obj jcphuff.obj \ - jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj -# decompression library object files -DLIBOBJECTS= jdapimin.obj jdapistd.obj jdtrans.obj jdatasrc.obj \ - jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdphuff.obj \ - jdmainct.obj jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj \ - jidctflt.obj jidctint.obj jidctred.obj jdsample.obj jdcolor.obj \ - jquant1.obj jquant2.obj jdmerge.obj -# These objectfiles are included in libjpeg.olb -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for sample applications (excluding library files) -COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj \ - rdswitch.obj cdjpeg.obj -DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ - rdcolmap.obj cdjpeg.obj -TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj -# objectfile lists with commas --- what a crock -COBJLIST= cjpeg.obj,rdppm.obj,rdgif.obj,rdtarga.obj,rdrle.obj,rdbmp.obj,\ - rdswitch.obj,cdjpeg.obj -DOBJLIST= djpeg.obj,wrppm.obj,wrgif.obj,wrtarga.obj,wrrle.obj,wrbmp.obj,\ - rdcolmap.obj,cdjpeg.obj -TROBJLIST= jpegtran.obj,rdswitch.obj,cdjpeg.obj,transupp.obj -LIBOBJLIST= jcapimin.obj,jcapistd.obj,jctrans.obj,jcparam.obj,jdatadst.obj,\ - jcinit.obj,jcmaster.obj,jcmarker.obj,jcmainct.obj,jcprepct.obj,\ - jccoefct.obj,jccolor.obj,jcsample.obj,jchuff.obj,jcphuff.obj,\ - jcdctmgr.obj,jfdctfst.obj,jfdctflt.obj,jfdctint.obj,jdapimin.obj,\ - jdapistd.obj,jdtrans.obj,jdatasrc.obj,jdmaster.obj,jdinput.obj,\ - jdmarker.obj,jdhuff.obj,jdphuff.obj,jdmainct.obj,jdcoefct.obj,\ - jdpostct.obj,jddctmgr.obj,jidctfst.obj,jidctflt.obj,jidctint.obj,\ - jidctred.obj,jdsample.obj,jdcolor.obj,jquant1.obj,jquant2.obj,\ - jdmerge.obj,jcomapi.obj,jutils.obj,jerror.obj,jmemmgr.obj,$(SYSDEPMEM) - - -.first - @- Define /NoLog Sys Sys$Library - -ALL : libjpeg.olb cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe - @ Continue - -libjpeg.olb : $(LIBOBJECTS) - Library /Create libjpeg.olb $(LIBOBJLIST) - -cjpeg.exe : $(COBJECTS) libjpeg.olb - $(LINK) $(LFLAGS) /Executable = cjpeg.exe $(COBJLIST),libjpeg.olb/Library$(OPT) - -djpeg.exe : $(DOBJECTS) libjpeg.olb - $(LINK) $(LFLAGS) /Executable = djpeg.exe $(DOBJLIST),libjpeg.olb/Library$(OPT) - -jpegtran.exe : $(TROBJECTS) libjpeg.olb - $(LINK) $(LFLAGS) /Executable = jpegtran.exe $(TROBJLIST),libjpeg.olb/Library$(OPT) - -rdjpgcom.exe : rdjpgcom.obj - $(LINK) $(LFLAGS) /Executable = rdjpgcom.exe rdjpgcom.obj$(OPT) - -wrjpgcom.exe : wrjpgcom.obj - $(LINK) $(LFLAGS) /Executable = wrjpgcom.exe wrjpgcom.obj$(OPT) - -jconfig.h : jconfig.vms - @- Copy jconfig.vms jconfig.h - -clean : - @- Set Protection = Owner:RWED *.*;-1 - @- Set Protection = Owner:RWED *.OBJ - - Purge /NoLog /NoConfirm *.* - - Delete /NoLog /NoConfirm *.OBJ; - -test : cjpeg.exe djpeg.exe jpegtran.exe - mcr sys$disk:[]djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - mcr sys$disk:[]djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg - mcr sys$disk:[]cjpeg -dct int -outfile testout.jpg testimg.ppm - mcr sys$disk:[]djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg - mcr sys$disk:[]cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm - mcr sys$disk:[]jpegtran -outfile testoutt.jpg testprog.jpg - - Backup /Compare/Log testimg.ppm testout.ppm - - Backup /Compare/Log testimg.bmp testout.bmp - - Backup /Compare/Log testimg.jpg testout.jpg - - Backup /Compare/Log testimg.ppm testoutp.ppm - - Backup /Compare/Log testimgp.jpg testoutp.jpg - - Backup /Compare/Log testorig.jpg testoutt.jpg - - -jcapimin.obj : jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcapistd.obj : jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.obj : jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.obj : jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.obj : jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.obj : jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcinit.obj : jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.obj : jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.obj : jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.obj : jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.obj : jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.obj : jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcphuff.obj : jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcprepct.obj : jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.obj : jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jctrans.obj : jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapimin.obj : jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapistd.obj : jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatadst.obj : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatasrc.obj : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.obj : jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.obj : jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.obj : jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.obj : jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdinput.obj : jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.obj : jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.obj : jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.obj : jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.obj : jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdphuff.obj : jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdpostct.obj : jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.obj : jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdtrans.obj : jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.obj : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jfdctflt.obj : jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctfst.obj : jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.obj : jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.obj : jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.obj : jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.obj : jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.obj : jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.obj : jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.obj : jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jutils.obj : jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.obj : jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.obj : jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.obj : jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.obj : jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.obj : jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemmac.obj : jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.obj : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.obj : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -jpegtran.obj : jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h -rdjpgcom.obj : rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.obj : wrjpgcom.c jinclude.h jconfig.h -cdjpeg.obj : cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdcolmap.obj : rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdswitch.obj : rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -transupp.obj : transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h -rdppm.obj : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.obj : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.obj : rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.obj : wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.obj : rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.obj : wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.obj : rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.obj : wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.obj : rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.obj : wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/Build/source/libs/jpeg/makefile.sas b/Build/source/libs/jpeg/makefile.sas deleted file mode 100644 index f296faf069d..00000000000 --- a/Build/source/libs/jpeg/makefile.sas +++ /dev/null @@ -1,252 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is for Amiga systems using SAS C 6.0 and up. -# Thanks to Ed Hanway, Mark Rinfret, and Jim Zepeda. - -# Read installation instructions before saying "make" !! - -# The name of your C compiler: -CC= sc - -# You may need to adjust these cc options: -# Uncomment the following lines for generic 680x0 version -ARCHFLAGS= cpu=any -SUFFIX= - -# Uncomment the following lines for 68030-only version -#ARCHFLAGS= cpu=68030 -#SUFFIX=.030 - -CFLAGS= nostackcheck data=near parms=register optimize $(ARCHFLAGS) \ - ignore=104 ignore=304 ignore=306 -# ignore=104 disables warnings for mismatched const qualifiers -# ignore=304 disables warnings for variables being optimized out -# ignore=306 disables warnings for the inlining of functions -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via define switches here. - -# Link-time cc options: -LDFLAGS= SC SD ND BATCH - -# To link any special libraries, add the necessary commands here. -LDLIBS= LIB:scm.lib LIB:sc.lib - -# Put here the object file name for the correct system-dependent memory -# manager file. For Amiga we recommend jmemname.o. -SYSDEPMEM= jmemname.o - -# miscellaneous OS-dependent stuff -# linker -LN= slink -# file deletion command -RM= delete quiet -# library (.lib) file creation command -AR= oml - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ - jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ - jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ - jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ - jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ - jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ - jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ - jquant2.c jutils.c jmemmgr.c -# memmgr back ends: compile only one of these into a working library -SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c -# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ - rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c -SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ - jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ - wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ - coderules.doc filelist.doc change.log -MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ - makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ - makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ - maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ - makvms.opt -CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ - jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ - jconfig.vms -CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ - testimgp.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapimin.o jcapistd.o jctrans.o jcparam.o jdatadst.o jcinit.o \ - jcmaster.o jcmarker.o jcmainct.o jcprepct.o jccoefct.o jccolor.o \ - jcsample.o jchuff.o jcphuff.o jcdctmgr.o jfdctfst.o jfdctflt.o \ - jfdctint.o -# decompression library object files -DLIBOBJECTS= jdapimin.o jdapistd.o jdtrans.o jdatasrc.o jdmaster.o \ - jdinput.o jdmarker.o jdhuff.o jdphuff.o jdmainct.o jdcoefct.o \ - jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ - jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o -# These objectfiles are included in libjpeg.lib -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for sample applications (excluding library files) -COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o rdswitch.o \ - cdjpeg.o -DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o \ - cdjpeg.o -TROBJECTS= jpegtran.o rdswitch.o cdjpeg.o transupp.o - - -all: libjpeg.lib cjpeg$(SUFFIX) djpeg$(SUFFIX) jpegtran$(SUFFIX) rdjpgcom$(SUFFIX) wrjpgcom$(SUFFIX) - -# note: do several AR steps to avoid command line length limitations - -libjpeg.lib: $(LIBOBJECTS) - -$(RM) libjpeg.lib - $(AR) libjpeg.lib r $(CLIBOBJECTS) - $(AR) libjpeg.lib r $(DLIBOBJECTS) - $(AR) libjpeg.lib r $(COMOBJECTS) - -cjpeg$(SUFFIX): $(COBJECTS) libjpeg.lib - $(LN) - -# You may want to adjust these compiler options: -CFLAGS= $(cflags) $(cdebug) $(cvars) -I. -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via -D switches here. - -# Link-time options: -LDFLAGS= $(ldebug) $(conlflags) - -# To link any special libraries, add the necessary commands here. -LDLIBS= $(conlibs) - -# Put here the object file name for the correct system-dependent memory -# manager file. For NT we suggest jmemnobs.obj, which expects the OS to -# provide adequate virtual memory. -SYSDEPMEM= jmemnobs.obj - -# miscellaneous OS-dependent stuff -# file deletion command -RM= del - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c \ - jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ - jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c \ - jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c \ - jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c \ - jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c \ - jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c \ - jquant2.c jutils.c jmemmgr.c -# memmgr back ends: compile only one of these into a working library -SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c -# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c \ - rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c -SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h \ - jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 \ - wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc \ - coderules.doc filelist.doc change.log -MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc \ - makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds \ - makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st \ - maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms \ - makvms.opt -CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat \ - jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas \ - jconfig.vms -CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg \ - testimgp.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapimin.obj jcapistd.obj jctrans.obj jcparam.obj jdatadst.obj \ - jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj jcprepct.obj \ - jccoefct.obj jccolor.obj jcsample.obj jchuff.obj jcphuff.obj \ - jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj -# decompression library object files -DLIBOBJECTS= jdapimin.obj jdapistd.obj jdtrans.obj jdatasrc.obj \ - jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdphuff.obj \ - jdmainct.obj jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj \ - jidctflt.obj jidctint.obj jidctred.obj jdsample.obj jdcolor.obj \ - jquant1.obj jquant2.obj jdmerge.obj -# These objectfiles are included in libjpeg.lib -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for sample applications (excluding library files) -COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj \ - rdswitch.obj cdjpeg.obj -DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ - rdcolmap.obj cdjpeg.obj -TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj - -# Template command for compiling .c to .obj -.c.obj: - $(cc) $(CFLAGS) $*.c - - -all: libjpeg.lib cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe - -libjpeg.lib: $(LIBOBJECTS) - $(RM) libjpeg.lib - lib -out:libjpeg.lib $(LIBOBJECTS) - -cjpeg.exe: $(COBJECTS) libjpeg.lib - $(link) $(LDFLAGS) -out:cjpeg.exe $(COBJECTS) libjpeg.lib $(LDLIBS) - -djpeg.exe: $(DOBJECTS) libjpeg.lib - $(link) $(LDFLAGS) -out:djpeg.exe $(DOBJECTS) libjpeg.lib $(LDLIBS) - -jpegtran.exe: $(TROBJECTS) libjpeg.lib - $(link) $(LDFLAGS) -out:jpegtran.exe $(TROBJECTS) libjpeg.lib $(LDLIBS) - -rdjpgcom.exe: rdjpgcom.obj - $(link) $(LDFLAGS) -out:rdjpgcom.exe rdjpgcom.obj $(LDLIBS) - -wrjpgcom.exe: wrjpgcom.obj - $(link) $(LDFLAGS) -out:wrjpgcom.exe wrjpgcom.obj $(LDLIBS) - - -clean: - $(RM) *.obj *.exe libjpeg.lib - $(RM) testout* - -test: cjpeg.exe djpeg.exe jpegtran.exe - $(RM) testout* - .\djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - .\djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg - .\cjpeg -dct int -outfile testout.jpg testimg.ppm - .\djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg - .\cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm - .\jpegtran -outfile testoutt.jpg testprog.jpg - fc /b testimg.ppm testout.ppm - fc /b testimg.bmp testout.bmp - fc /b testimg.jpg testout.jpg - fc /b testimg.ppm testoutp.ppm - fc /b testimgp.jpg testoutp.jpg - fc /b testorig.jpg testoutt.jpg - - -jcapimin.obj: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcapistd.obj: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.obj: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.obj: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.obj: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.obj: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcinit.obj: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.obj: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.obj: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.obj: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.obj: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.obj: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcphuff.obj: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcprepct.obj: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.obj: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jctrans.obj: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapimin.obj: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapistd.obj: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatadst.obj: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatasrc.obj: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.obj: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.obj: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.obj: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.obj: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdinput.obj: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.obj: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.obj: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.obj: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.obj: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdphuff.obj: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdpostct.obj: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.obj: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdtrans.obj: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.obj: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jfdctflt.obj: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctfst.obj: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.obj: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.obj: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.obj: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.obj: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.obj: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.obj: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.obj: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jutils.obj: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.obj: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.obj: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.obj: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.obj: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.obj: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemmac.obj: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.obj: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.obj: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -jpegtran.obj: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h -rdjpgcom.obj: rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.obj: wrjpgcom.c jinclude.h jconfig.h -cdjpeg.obj: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdcolmap.obj: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdswitch.obj: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -transupp.obj: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h -rdppm.obj: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.obj: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.obj: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.obj: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.obj: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.obj: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.obj: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.obj: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.obj: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.obj: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/Build/source/libs/jpeg/makefile.vms b/Build/source/libs/jpeg/makefile.vms deleted file mode 100644 index a42358d05ca..00000000000 --- a/Build/source/libs/jpeg/makefile.vms +++ /dev/null @@ -1,142 +0,0 @@ -$! Makefile for Independent JPEG Group's software -$! -$! This is a command procedure for Digital VMS systems that do not have MMS. -$! It builds the JPEG software by brute force, recompiling everything whether -$! or not it is necessary. It then runs the basic self-test. -$! Thanks to Rick Dyson (dyson@iowasp.physics.uiowa.edu) -$! and Tim Bell (tbell@netcom.com) for their help. -$! -$! Read installation instructions before running this!! -$! -$ If F$Mode () .eqs. "INTERACTIVE" -$ Then -$ VERIFY = F$Verify (0) -$ Else -$ VERIFY = F$Verify (1) -$ EndIf -$ On Control_Y Then GoTo End -$ On Error Then GoTo End -$ -$ If F$GetSyi ("HW_MODEL") .gt. 1023 -$ Then -$ OPT = "" -$ Else -$ OPT = ",Sys$Disk:[]makvms.opt/Option" -$ EndIf -$ -$ DoCompile := CC /NoDebug /Optimize /NoList -$! -$ DoCompile jcapimin.c -$ DoCompile jcapistd.c -$ DoCompile jctrans.c -$ DoCompile jcparam.c -$ DoCompile jdatadst.c -$ DoCompile jcinit.c -$ DoCompile jcmaster.c -$ DoCompile jcmarker.c -$ DoCompile jcmainct.c -$ DoCompile jcprepct.c -$ DoCompile jccoefct.c -$ DoCompile jccolor.c -$ DoCompile jcsample.c -$ DoCompile jchuff.c -$ DoCompile jcphuff.c -$ DoCompile jcdctmgr.c -$ DoCompile jfdctfst.c -$ DoCompile jfdctflt.c -$ DoCompile jfdctint.c -$ DoCompile jdapimin.c -$ DoCompile jdapistd.c -$ DoCompile jdtrans.c -$ DoCompile jdatasrc.c -$ DoCompile jdmaster.c -$ DoCompile jdinput.c -$ DoCompile jdmarker.c -$ DoCompile jdhuff.c -$ DoCompile jdphuff.c -$ DoCompile jdmainct.c -$ DoCompile jdcoefct.c -$ DoCompile jdpostct.c -$ DoCompile jddctmgr.c -$ DoCompile jidctfst.c -$ DoCompile jidctflt.c -$ DoCompile jidctint.c -$ DoCompile jidctred.c -$ DoCompile jdsample.c -$ DoCompile jdcolor.c -$ DoCompile jquant1.c -$ DoCompile jquant2.c -$ DoCompile jdmerge.c -$ DoCompile jcomapi.c -$ DoCompile jutils.c -$ DoCompile jerror.c -$ DoCompile jmemmgr.c -$ DoCompile jmemnobs.c -$! -$ Library /Create libjpeg.olb jcapimin.obj,jcapistd.obj,jctrans.obj, - - jcparam.obj,jdatadst.obj,jcinit.obj,jcmaster.obj,jcmarker.obj, - - jcmainct.obj,jcprepct.obj,jccoefct.obj,jccolor.obj,jcsample.obj, - - jchuff.obj,jcphuff.obj,jcdctmgr.obj,jfdctfst.obj,jfdctflt.obj, - - jfdctint.obj,jdapimin.obj,jdapistd.obj,jdtrans.obj,jdatasrc.obj, - - jdmaster.obj,jdinput.obj,jdmarker.obj,jdhuff.obj,jdphuff.obj, - - jdmainct.obj,jdcoefct.obj,jdpostct.obj,jddctmgr.obj,jidctfst.obj, - - jidctflt.obj,jidctint.obj,jidctred.obj,jdsample.obj,jdcolor.obj, - - jquant1.obj,jquant2.obj,jdmerge.obj,jcomapi.obj,jutils.obj, - - jerror.obj,jmemmgr.obj,jmemnobs.obj -$! -$ DoCompile cjpeg.c -$ DoCompile rdppm.c -$ DoCompile rdgif.c -$ DoCompile rdtarga.c -$ DoCompile rdrle.c -$ DoCompile rdbmp.c -$ DoCompile rdswitch.c -$ DoCompile cdjpeg.c -$! -$ Link /NoMap /Executable = cjpeg.exe cjpeg.obj,rdppm.obj,rdgif.obj, - - rdtarga.obj,rdrle.obj,rdbmp.obj,rdswitch.obj,cdjpeg.obj,libjpeg.olb/Library'OPT' -$! -$ DoCompile djpeg.c -$ DoCompile wrppm.c -$ DoCompile wrgif.c -$ DoCompile wrtarga.c -$ DoCompile wrrle.c -$ DoCompile wrbmp.c -$ DoCompile rdcolmap.c -$ DoCompile cdjpeg.c -$! -$ Link /NoMap /Executable = djpeg.exe djpeg.obj,wrppm.obj,wrgif.obj, - - wrtarga.obj,wrrle.obj,wrbmp.obj,rdcolmap.obj,cdjpeg.obj,libjpeg.olb/Library'OPT' -$! -$ DoCompile jpegtran.c -$ DoCompile rdswitch.c -$ DoCompile cdjpeg.c -$ DoCompile transupp.c -$! -$ Link /NoMap /Executable = jpegtran.exe jpegtran.obj,rdswitch.obj, - - cdjpeg.obj,transupp.obj,libjpeg.olb/Library'OPT' -$! -$ DoCompile rdjpgcom.c -$ Link /NoMap /Executable = rdjpgcom.exe rdjpgcom.obj'OPT' -$! -$ DoCompile wrjpgcom.c -$ Link /NoMap /Executable = wrjpgcom.exe wrjpgcom.obj'OPT' -$! -$! Run the self-test -$! -$ mcr sys$disk:[]djpeg -dct int -ppm -outfile testout.ppm testorig.jpg -$ mcr sys$disk:[]djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg -$ mcr sys$disk:[]cjpeg -dct int -outfile testout.jpg testimg.ppm -$ mcr sys$disk:[]djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg -$ mcr sys$disk:[]cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm -$ mcr sys$disk:[]jpegtran -outfile testoutt.jpg testprog.jpg -$ Backup /Compare/Log testimg.ppm testout.ppm -$ Backup /Compare/Log testimg.bmp testout.bmp -$ Backup /Compare/Log testimg.jpg testout.jpg -$ Backup /Compare/Log testimg.ppm testoutp.ppm -$ Backup /Compare/Log testimgp.jpg testoutp.jpg -$ Backup /Compare/Log testorig.jpg testoutt.jpg -$! -$End: -$ If Verify Then Set Verify -$ Exit diff --git a/Build/source/libs/jpeg/makefile.wat b/Build/source/libs/jpeg/makefile.wat deleted file mode 100644 index d953e466f8c..00000000000 --- a/Build/source/libs/jpeg/makefile.wat +++ /dev/null @@ -1,233 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is suitable for Watcom C/C++ 10.0 on MS-DOS (using -# dos4g extender), OS/2, and Windows NT console mode. -# Thanks to Janos Haide, jhaide@btrvtech.com. - -# Read installation instructions before saying "wmake" !! - -# Uncomment line for desired system -SYSTEM=DOS -#SYSTEM=OS2 -#SYSTEM=NT - -# The name of your C compiler: -CC= wcl386 - -# You may need to adjust these cc options: -CFLAGS= -4r -ort -wx -zq -bt=$(SYSTEM) -# Caution: avoid -ol or -ox; these generate bad code with 10.0 or 10.0a. -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via -D switches here. - -# Link-time cc options: -!ifeq SYSTEM DOS -LDFLAGS= -zq -l=dos4g -!else ifeq SYSTEM OS2 -LDFLAGS= -zq -l=os2v2 -!else ifeq SYSTEM NT -LDFLAGS= -zq -l=nt -!endif - -# Put here the object file name for the correct system-dependent memory -# manager file. jmemnobs should work fine for dos4g or OS/2 environment. -SYSDEPMEM= jmemnobs.obj - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c & - jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c & - jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c & - jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c & - jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c & - jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c & - jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c & - jquant2.c jutils.c jmemmgr.c -# memmgr back ends: compile only one of these into a working library -SYSDEPSOURCES= jmemansi.c jmemname.c jmemnobs.c jmemdos.c jmemmac.c -# source files: cjpeg/djpeg/jpegtran applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c jpegtran.c rdjpgcom.c wrjpgcom.c cdjpeg.c & - rdcolmap.c rdswitch.c transupp.c rdppm.c wrppm.c rdgif.c wrgif.c & - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c -SOURCES= $(LIBSOURCES) $(SYSDEPSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jchuff.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h & - jpegint.h jpeglib.h jversion.h cdjpeg.h cderror.h transupp.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 & - wrjpgcom.1 wizard.doc example.c libjpeg.doc structure.doc & - coderules.doc filelist.doc change.log -MKFILES= configure makefile.cfg makefile.ansi makefile.unix makefile.bcc & - makefile.mc6 makefile.dj makefile.wat makefile.vc makelib.ds & - makeapps.ds makeproj.mac makcjpeg.st makdjpeg.st makljpeg.st & - maktjpeg.st makefile.manx makefile.sas makefile.mms makefile.vms & - makvms.opt -CONFIGFILES= jconfig.cfg jconfig.bcc jconfig.mc6 jconfig.dj jconfig.wat & - jconfig.vc jconfig.mac jconfig.st jconfig.manx jconfig.sas & - jconfig.vms -CONFIGUREFILES= config.guess config.sub install-sh ltconfig ltmain.sh -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.bmp testimg.jpg testprog.jpg & - testimgp.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) & - $(CONFIGUREFILES) $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapimin.obj jcapistd.obj jctrans.obj jcparam.obj jdatadst.obj & - jcinit.obj jcmaster.obj jcmarker.obj jcmainct.obj jcprepct.obj & - jccoefct.obj jccolor.obj jcsample.obj jchuff.obj jcphuff.obj & - jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj -# decompression library object files -DLIBOBJECTS= jdapimin.obj jdapistd.obj jdtrans.obj jdatasrc.obj & - jdmaster.obj jdinput.obj jdmarker.obj jdhuff.obj jdphuff.obj & - jdmainct.obj jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj & - jidctflt.obj jidctint.obj jidctred.obj jdsample.obj jdcolor.obj & - jquant1.obj jquant2.obj jdmerge.obj -# These objectfiles are included in libjpeg.lib -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for sample applications (excluding library files) -COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj & - rdswitch.obj cdjpeg.obj -DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj & - rdcolmap.obj cdjpeg.obj -TROBJECTS= jpegtran.obj rdswitch.obj cdjpeg.obj transupp.obj - - -all: libjpeg.lib cjpeg.exe djpeg.exe jpegtran.exe rdjpgcom.exe wrjpgcom.exe - -libjpeg.lib: $(LIBOBJECTS) - - del libjpeg.lib - * wlib -n libjpeg.lib $(LIBOBJECTS) - -cjpeg.exe: $(COBJECTS) libjpeg.lib - $(CC) $(LDFLAGS) $(COBJECTS) libjpeg.lib - -djpeg.exe: $(DOBJECTS) libjpeg.lib - $(CC) $(LDFLAGS) $(DOBJECTS) libjpeg.lib - -jpegtran.exe: $(TROBJECTS) libjpeg.lib - $(CC) $(LDFLAGS) $(TROBJECTS) libjpeg.lib - -rdjpgcom.exe: rdjpgcom.c - $(CC) $(CFLAGS) $(LDFLAGS) rdjpgcom.c - -wrjpgcom.exe: wrjpgcom.c - $(CC) $(CFLAGS) $(LDFLAGS) wrjpgcom.c - -.c.obj: - $(CC) $(CFLAGS) -c $< - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -clean: .SYMBOLIC - - del *.obj - - del libjpeg.lib - - del cjpeg.exe - - del djpeg.exe - - del jpegtran.exe - - del rdjpgcom.exe - - del wrjpgcom.exe - - del testout*.* - -test: cjpeg.exe djpeg.exe jpegtran.exe .SYMBOLIC - - del testout*.* - djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - djpeg -dct int -bmp -colors 256 -outfile testout.bmp testorig.jpg - cjpeg -dct int -outfile testout.jpg testimg.ppm - djpeg -dct int -ppm -outfile testoutp.ppm testprog.jpg - cjpeg -dct int -progressive -opt -outfile testoutp.jpg testimg.ppm - jpegtran -outfile testoutt.jpg testprog.jpg -!ifeq SYSTEM DOS - fc /b testimg.ppm testout.ppm - fc /b testimg.bmp testout.bmp - fc /b testimg.jpg testout.jpg - fc /b testimg.ppm testoutp.ppm - fc /b testimgp.jpg testoutp.jpg - fc /b testorig.jpg testoutt.jpg -!else - echo n > n.tmp - comp testimg.ppm testout.ppm < n.tmp - comp testimg.bmp testout.bmp < n.tmp - comp testimg.jpg testout.jpg < n.tmp - comp testimg.ppm testoutp.ppm < n.tmp - comp testimgp.jpg testoutp.jpg < n.tmp - comp testorig.jpg testoutt.jpg < n.tmp - del n.tmp -!endif - - -jcapimin.obj: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcapistd.obj: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.obj: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.obj: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.obj: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.obj: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcinit.obj: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.obj: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.obj: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.obj: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.obj: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.obj: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcphuff.obj: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h -jcprepct.obj: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.obj: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jctrans.obj: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapimin.obj: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapistd.obj: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatadst.obj: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatasrc.obj: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.obj: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.obj: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.obj: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.obj: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdinput.obj: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.obj: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.obj: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.obj: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.obj: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdphuff.obj: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h -jdpostct.obj: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.obj: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdtrans.obj: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.obj: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jfdctflt.obj: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctfst.obj: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.obj: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.obj: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.obj: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.obj: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.obj: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.obj: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.obj: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jutils.obj: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.obj: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.obj: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.obj: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.obj: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.obj: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemmac.obj: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.obj: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.obj: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -jpegtran.obj: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h -rdjpgcom.obj: rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.obj: wrjpgcom.c jinclude.h jconfig.h -cdjpeg.obj: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdcolmap.obj: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdswitch.obj: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -transupp.obj: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h -rdppm.obj: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.obj: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.obj: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.obj: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.obj: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.obj: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.obj: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.obj: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.obj: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.obj: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h diff --git a/Build/source/libs/jpeg/makelib.ds b/Build/source/libs/jpeg/makelib.ds deleted file mode 100644 index c7ad36d09e4..00000000000 --- a/Build/source/libs/jpeg/makelib.ds +++ /dev/null @@ -1,1046 +0,0 @@ -# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -!IF "$(CFG)" == "" -CFG=jpeg - Win32 -!MESSAGE No configuration specified. Defaulting to jpeg - Win32. -!ENDIF - -!IF "$(CFG)" != "jpeg - Win32" -!MESSAGE Invalid configuration "$(CFG)" specified. -!MESSAGE You can specify a configuration when running NMAKE on this makefile -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "jpeg.mak" CFG="jpeg - Win32" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "jpeg - Win32" (based on "Win32 (x86) Static Library") -!MESSAGE -!ERROR An invalid configuration is specified. -!ENDIF - -!IF "$(OS)" == "Windows_NT" -NULL= -!ELSE -NULL=nul -!ENDIF -################################################################################ -# Begin Project -# PROP Target_Last_Scanned "jpeg - Win32" -CPP=cl.exe - -!IF "$(CFG)" == "jpeg - Win32" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -OUTDIR=.\Release -INTDIR=.\Release - -ALL : "$(OUTDIR)\jpeg.lib" - -CLEAN : - -@erase "$(INTDIR)\jcapimin.obj" - -@erase "$(INTDIR)\jcapistd.obj" - -@erase "$(INTDIR)\jctrans.obj" - -@erase "$(INTDIR)\jcparam.obj" - -@erase "$(INTDIR)\jdatadst.obj" - -@erase "$(INTDIR)\jcinit.obj" - -@erase "$(INTDIR)\jcmaster.obj" - -@erase "$(INTDIR)\jcmarker.obj" - -@erase "$(INTDIR)\jcmainct.obj" - -@erase "$(INTDIR)\jcprepct.obj" - -@erase "$(INTDIR)\jccoefct.obj" - -@erase "$(INTDIR)\jccolor.obj" - -@erase "$(INTDIR)\jcsample.obj" - -@erase "$(INTDIR)\jchuff.obj" - -@erase "$(INTDIR)\jcphuff.obj" - -@erase "$(INTDIR)\jcdctmgr.obj" - -@erase "$(INTDIR)\jfdctfst.obj" - -@erase "$(INTDIR)\jfdctflt.obj" - -@erase "$(INTDIR)\jfdctint.obj" - -@erase "$(INTDIR)\jdapimin.obj" - -@erase "$(INTDIR)\jdapistd.obj" - -@erase "$(INTDIR)\jdtrans.obj" - -@erase "$(INTDIR)\jdatasrc.obj" - -@erase "$(INTDIR)\jdmaster.obj" - -@erase "$(INTDIR)\jdinput.obj" - -@erase "$(INTDIR)\jdmarker.obj" - -@erase "$(INTDIR)\jdhuff.obj" - -@erase "$(INTDIR)\jdphuff.obj" - -@erase "$(INTDIR)\jdmainct.obj" - -@erase "$(INTDIR)\jdcoefct.obj" - -@erase "$(INTDIR)\jdpostct.obj" - -@erase "$(INTDIR)\jddctmgr.obj" - -@erase "$(INTDIR)\jidctfst.obj" - -@erase "$(INTDIR)\jidctflt.obj" - -@erase "$(INTDIR)\jidctint.obj" - -@erase "$(INTDIR)\jidctred.obj" - -@erase "$(INTDIR)\jdsample.obj" - -@erase "$(INTDIR)\jdcolor.obj" - -@erase "$(INTDIR)\jquant1.obj" - -@erase "$(INTDIR)\jquant2.obj" - -@erase "$(INTDIR)\jdmerge.obj" - -@erase "$(INTDIR)\jcomapi.obj" - -@erase "$(INTDIR)\jutils.obj" - -@erase "$(INTDIR)\jerror.obj" - -@erase "$(INTDIR)\jmemmgr.obj" - -@erase "$(INTDIR)\jmemnobs.obj" - -@erase "$(OUTDIR)\jpeg.lib" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c -CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ - /Fp"$(INTDIR)/jpeg.pch" /YX /Fo"$(INTDIR)/" /c -CPP_OBJS=.\Release/ -CPP_SBRS=.\. -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -BSC32_FLAGS=/nologo /o"$(OUTDIR)/jpeg.bsc" -BSC32_SBRS= \ - -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo -LIB32_FLAGS=/nologo /out:"$(OUTDIR)/jpeg.lib" -LIB32_OBJS= \ - "$(INTDIR)\jcapimin.obj" \ - "$(INTDIR)\jcapistd.obj" \ - "$(INTDIR)\jctrans.obj" \ - "$(INTDIR)\jcparam.obj" \ - "$(INTDIR)\jdatadst.obj" \ - "$(INTDIR)\jcinit.obj" \ - "$(INTDIR)\jcmaster.obj" \ - "$(INTDIR)\jcmarker.obj" \ - "$(INTDIR)\jcmainct.obj" \ - "$(INTDIR)\jcprepct.obj" \ - "$(INTDIR)\jccoefct.obj" \ - "$(INTDIR)\jccolor.obj" \ - "$(INTDIR)\jcsample.obj" \ - "$(INTDIR)\jchuff.obj" \ - "$(INTDIR)\jcphuff.obj" \ - "$(INTDIR)\jcdctmgr.obj" \ - "$(INTDIR)\jfdctfst.obj" \ - "$(INTDIR)\jfdctflt.obj" \ - "$(INTDIR)\jfdctint.obj" \ - "$(INTDIR)\jdapimin.obj" \ - "$(INTDIR)\jdapistd.obj" \ - "$(INTDIR)\jdtrans.obj" \ - "$(INTDIR)\jdatasrc.obj" \ - "$(INTDIR)\jdmaster.obj" \ - "$(INTDIR)\jdinput.obj" \ - "$(INTDIR)\jdmarker.obj" \ - "$(INTDIR)\jdhuff.obj" \ - "$(INTDIR)\jdphuff.obj" \ - "$(INTDIR)\jdmainct.obj" \ - "$(INTDIR)\jdcoefct.obj" \ - "$(INTDIR)\jdpostct.obj" \ - "$(INTDIR)\jddctmgr.obj" \ - "$(INTDIR)\jidctfst.obj" \ - "$(INTDIR)\jidctflt.obj" \ - "$(INTDIR)\jidctint.obj" \ - "$(INTDIR)\jidctred.obj" \ - "$(INTDIR)\jdsample.obj" \ - "$(INTDIR)\jdcolor.obj" \ - "$(INTDIR)\jquant1.obj" \ - "$(INTDIR)\jquant2.obj" \ - "$(INTDIR)\jdmerge.obj" \ - "$(INTDIR)\jcomapi.obj" \ - "$(INTDIR)\jutils.obj" \ - "$(INTDIR)\jerror.obj" \ - "$(INTDIR)\jmemmgr.obj" \ - "$(INTDIR)\jmemnobs.obj" - -"$(OUTDIR)\jpeg.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) - $(LIB32) @<< - $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) -<< - -!ENDIF - -.c{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_OBJS)}.obj: - $(CPP) $(CPP_PROJ) $< - -.c{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cpp{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -.cxx{$(CPP_SBRS)}.sbr: - $(CPP) $(CPP_PROJ) $< - -################################################################################ -# Begin Target - -# Name "jpeg - Win32" - -!IF "$(CFG)" == "jpeg - Win32" - -!ENDIF - -################################################################################ -# Begin Source File - -SOURCE="jcapimin.c" -DEP_CPP_JCAPI=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jcapimin.obj" : $(SOURCE) $(DEP_CPP_JCAPI) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jcapistd.c" -DEP_CPP_JCAPIS=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jcapistd.obj" : $(SOURCE) $(DEP_CPP_JCAPIS) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jccoefct.c" -DEP_CPP_JCCOE=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jccoefct.obj" : $(SOURCE) $(DEP_CPP_JCCOE) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jccolor.c" -DEP_CPP_JCCOL=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jccolor.obj" : $(SOURCE) $(DEP_CPP_JCCOL) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jcdctmgr.c" -DEP_CPP_JCDCT=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jdct.h"\ - - -"$(INTDIR)\jcdctmgr.obj" : $(SOURCE) $(DEP_CPP_JCDCT) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jchuff.c" -DEP_CPP_JCHUF=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jchuff.h"\ - - -"$(INTDIR)\jchuff.obj" : $(SOURCE) $(DEP_CPP_JCHUF) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jcinit.c" -DEP_CPP_JCINI=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jcinit.obj" : $(SOURCE) $(DEP_CPP_JCINI) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jcmainct.c" -DEP_CPP_JCMAI=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jcmainct.obj" : $(SOURCE) $(DEP_CPP_JCMAI) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jcmarker.c" -DEP_CPP_JCMAR=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jcmarker.obj" : $(SOURCE) $(DEP_CPP_JCMAR) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jcmaster.c" -DEP_CPP_JCMAS=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jcmaster.obj" : $(SOURCE) $(DEP_CPP_JCMAS) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jcomapi.c" -DEP_CPP_JCOMA=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jcomapi.obj" : $(SOURCE) $(DEP_CPP_JCOMA) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jcparam.c" -DEP_CPP_JCPAR=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jcparam.obj" : $(SOURCE) $(DEP_CPP_JCPAR) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jcphuff.c" -DEP_CPP_JCPHU=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jchuff.h"\ - - -"$(INTDIR)\jcphuff.obj" : $(SOURCE) $(DEP_CPP_JCPHU) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jcprepct.c" -DEP_CPP_JCPRE=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jcprepct.obj" : $(SOURCE) $(DEP_CPP_JCPRE) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jcsample.c" -DEP_CPP_JCSAM=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jcsample.obj" : $(SOURCE) $(DEP_CPP_JCSAM) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jctrans.c" -DEP_CPP_JCTRA=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jctrans.obj" : $(SOURCE) $(DEP_CPP_JCTRA) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdapimin.c" -DEP_CPP_JDAPI=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jdapimin.obj" : $(SOURCE) $(DEP_CPP_JDAPI) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdapistd.c" -DEP_CPP_JDAPIS=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jdapistd.obj" : $(SOURCE) $(DEP_CPP_JDAPIS) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdatadst.c" -DEP_CPP_JDATA=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - - -"$(INTDIR)\jdatadst.obj" : $(SOURCE) $(DEP_CPP_JDATA) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdatasrc.c" -DEP_CPP_JDATAS=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jerror.h"\ - - -"$(INTDIR)\jdatasrc.obj" : $(SOURCE) $(DEP_CPP_JDATAS) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdcoefct.c" -DEP_CPP_JDCOE=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jdcoefct.obj" : $(SOURCE) $(DEP_CPP_JDCOE) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdcolor.c" -DEP_CPP_JDCOL=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jdcolor.obj" : $(SOURCE) $(DEP_CPP_JDCOL) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jddctmgr.c" -DEP_CPP_JDDCT=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jdct.h"\ - - -"$(INTDIR)\jddctmgr.obj" : $(SOURCE) $(DEP_CPP_JDDCT) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdhuff.c" -DEP_CPP_JDHUF=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jdhuff.h"\ - - -"$(INTDIR)\jdhuff.obj" : $(SOURCE) $(DEP_CPP_JDHUF) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdinput.c" -DEP_CPP_JDINP=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jdinput.obj" : $(SOURCE) $(DEP_CPP_JDINP) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdmainct.c" -DEP_CPP_JDMAI=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jdmainct.obj" : $(SOURCE) $(DEP_CPP_JDMAI) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdmarker.c" -DEP_CPP_JDMAR=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jdmarker.obj" : $(SOURCE) $(DEP_CPP_JDMAR) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdmaster.c" -DEP_CPP_JDMAS=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jdmaster.obj" : $(SOURCE) $(DEP_CPP_JDMAS) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdmerge.c" -DEP_CPP_JDMER=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jdmerge.obj" : $(SOURCE) $(DEP_CPP_JDMER) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdphuff.c" -DEP_CPP_JDPHU=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jdhuff.h"\ - - -"$(INTDIR)\jdphuff.obj" : $(SOURCE) $(DEP_CPP_JDPHU) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdpostct.c" -DEP_CPP_JDPOS=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jdpostct.obj" : $(SOURCE) $(DEP_CPP_JDPOS) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdsample.c" -DEP_CPP_JDSAM=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jdsample.obj" : $(SOURCE) $(DEP_CPP_JDSAM) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jdtrans.c" -DEP_CPP_JDTRA=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jdtrans.obj" : $(SOURCE) $(DEP_CPP_JDTRA) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jerror.c" -DEP_CPP_JERRO=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jversion.h"\ - "jerror.h"\ - - -"$(INTDIR)\jerror.obj" : $(SOURCE) $(DEP_CPP_JERRO) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jfdctflt.c" -DEP_CPP_JFDCT=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jdct.h"\ - - -"$(INTDIR)\jfdctflt.obj" : $(SOURCE) $(DEP_CPP_JFDCT) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jfdctfst.c" -DEP_CPP_JFDCTF=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jdct.h"\ - - -"$(INTDIR)\jfdctfst.obj" : $(SOURCE) $(DEP_CPP_JFDCTF) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jfdctint.c" -DEP_CPP_JFDCTI=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jdct.h"\ - - -"$(INTDIR)\jfdctint.obj" : $(SOURCE) $(DEP_CPP_JFDCTI) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jidctflt.c" -DEP_CPP_JIDCT=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jdct.h"\ - - -"$(INTDIR)\jidctflt.obj" : $(SOURCE) $(DEP_CPP_JIDCT) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jidctfst.c" -DEP_CPP_JIDCTF=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jdct.h"\ - - -"$(INTDIR)\jidctfst.obj" : $(SOURCE) $(DEP_CPP_JIDCTF) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jidctint.c" -DEP_CPP_JIDCTI=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jdct.h"\ - - -"$(INTDIR)\jidctint.obj" : $(SOURCE) $(DEP_CPP_JIDCTI) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jidctred.c" -DEP_CPP_JIDCTR=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jdct.h"\ - - -"$(INTDIR)\jidctred.obj" : $(SOURCE) $(DEP_CPP_JIDCTR) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jquant1.c" -DEP_CPP_JQUAN=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jquant1.obj" : $(SOURCE) $(DEP_CPP_JQUAN) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jquant2.c" -DEP_CPP_JQUANT=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jquant2.obj" : $(SOURCE) $(DEP_CPP_JQUANT) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jutils.c" -DEP_CPP_JUTIL=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - - -"$(INTDIR)\jutils.obj" : $(SOURCE) $(DEP_CPP_JUTIL) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jmemmgr.c" -DEP_CPP_JMEMM=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jmemsys.h"\ - - -"$(INTDIR)\jmemmgr.obj" : $(SOURCE) $(DEP_CPP_JMEMM) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -################################################################################ -# Begin Source File - -SOURCE="jmemnobs.c" -DEP_CPP_JMEMN=\ - "jinclude.h"\ - "jconfig.h"\ - "jpeglib.h"\ - "jmorecfg.h"\ - "jpegint.h"\ - "jerror.h"\ - "jmemsys.h"\ - - -"$(INTDIR)\jmemnobs.obj" : $(SOURCE) $(DEP_CPP_JMEMN) "$(INTDIR)" - $(CPP) $(CPP_PROJ) $(SOURCE) - - -# End Source File -# End Target -# End Project -################################################################################ - diff --git a/Build/source/libs/jpeg/makeproj.mac b/Build/source/libs/jpeg/makeproj.mac deleted file mode 100644 index ed277c83da8..00000000000 --- a/Build/source/libs/jpeg/makeproj.mac +++ /dev/null @@ -1,213 +0,0 @@ --- --- makeproj.mac --- --- This AppleScript builds Code Warrior PRO Release 2 project files for the --- libjpeg library as well as the test programs 'cjpeg', 'djpeg', 'jpegtran'. --- (We'd distribute real project files, except they're not text --- and would create maintenance headaches.) --- --- The script then compiles and links the library and the test programs. --- NOTE: if you haven't already created a 'jconfig.h' file, the script --- automatically copies 'jconfig.mac' to 'jconfig.h'. --- --- To use this script, you must have AppleScript 1.1 or later installed --- and a suitable AppleScript editor like Script Editor or Script Debugger --- (http://www.latenightsw.com). Open this file with your AppleScript --- editor and execute the "run" command to build the projects. --- --- Thanks to Dan Sears and Don Agro for this script. --- Questions about this script can be addressed to dogpark@interlog.com --- - -on run - - choose folder with prompt ">>> Select IJG source folder <<<" - set ijg_folder to result - - choose folder with prompt ">>> Select MetroWerks folder <<<" - set cw_folder to result - - -- if jconfig.h doesn't already exist, copy jconfig.mac - - tell application "Finder" - if not (exists file "jconfig.h" of ijg_folder) then - duplicate {file "jconfig.mac" of folder ijg_folder} - select file "jconfig.mac copy" of folder ijg_folder - set name of selection to "jconfig.h" - end if - end tell - - tell application "CodeWarrior IDE 2.1" - with timeout of 10000 seconds - - -- create libjpeg project - - activate - Create Project (ijg_folder as string) & "libjpeg.proj" - Set Preferences of panel "Target Settings" to {Target Name:"libjpeg"} - Set Preferences of panel "PPC Project" to {File Name:"libjpeg"} - Set Preferences of panel "Target Settings" to {Linker:"MacOS PPC Linker"} - Set Preferences of panel "PPC Project" to {Project Type:library} - Set Preferences of panel "C/C++ Compiler" to {ANSI Strict:true} - Set Preferences of panel "C/C++ Compiler" to {Enums Always Ints:true} - Set Preferences of panel "PPC Codegen" to {Struct Alignment:PowerPC} - Set Preferences of panel "PPC Linker" to {Generate SYM File:false} - - Add Files (ijg_folder as string) & "jcapimin.c" To Segment 1 - Add Files (ijg_folder as string) & "jcapistd.c" To Segment 1 - Add Files (ijg_folder as string) & "jctrans.c" To Segment 1 - Add Files (ijg_folder as string) & "jcparam.c" To Segment 1 - Add Files (ijg_folder as string) & "jdatadst.c" To Segment 1 - Add Files (ijg_folder as string) & "jcinit.c" To Segment 1 - Add Files (ijg_folder as string) & "jcmaster.c" To Segment 1 - Add Files (ijg_folder as string) & "jcmarker.c" To Segment 1 - Add Files (ijg_folder as string) & "jcmainct.c" To Segment 1 - Add Files (ijg_folder as string) & "jcprepct.c" To Segment 1 - Add Files (ijg_folder as string) & "jccoefct.c" To Segment 1 - Add Files (ijg_folder as string) & "jccolor.c" To Segment 1 - Add Files (ijg_folder as string) & "jcsample.c" To Segment 1 - Add Files (ijg_folder as string) & "jchuff.c" To Segment 1 - Add Files (ijg_folder as string) & "jcphuff.c" To Segment 1 - Add Files (ijg_folder as string) & "jcdctmgr.c" To Segment 1 - Add Files (ijg_folder as string) & "jfdctfst.c" To Segment 1 - Add Files (ijg_folder as string) & "jfdctflt.c" To Segment 1 - Add Files (ijg_folder as string) & "jfdctint.c" To Segment 1 - Add Files (ijg_folder as string) & "jdapimin.c" To Segment 1 - Add Files (ijg_folder as string) & "jdapistd.c" To Segment 1 - Add Files (ijg_folder as string) & "jdtrans.c" To Segment 1 - Add Files (ijg_folder as string) & "jdatasrc.c" To Segment 1 - Add Files (ijg_folder as string) & "jdmaster.c" To Segment 1 - Add Files (ijg_folder as string) & "jdinput.c" To Segment 1 - Add Files (ijg_folder as string) & "jdmarker.c" To Segment 1 - Add Files (ijg_folder as string) & "jdhuff.c" To Segment 1 - Add Files (ijg_folder as string) & "jdphuff.c" To Segment 1 - Add Files (ijg_folder as string) & "jdmainct.c" To Segment 1 - Add Files (ijg_folder as string) & "jdcoefct.c" To Segment 1 - Add Files (ijg_folder as string) & "jdpostct.c" To Segment 1 - Add Files (ijg_folder as string) & "jddctmgr.c" To Segment 1 - Add Files (ijg_folder as string) & "jidctfst.c" To Segment 1 - Add Files (ijg_folder as string) & "jidctflt.c" To Segment 1 - Add Files (ijg_folder as string) & "jidctint.c" To Segment 1 - Add Files (ijg_folder as string) & "jidctred.c" To Segment 1 - Add Files (ijg_folder as string) & "jdsample.c" To Segment 1 - Add Files (ijg_folder as string) & "jdcolor.c" To Segment 1 - Add Files (ijg_folder as string) & "jquant1.c" To Segment 1 - Add Files (ijg_folder as string) & "jquant2.c" To Segment 1 - Add Files (ijg_folder as string) & "jdmerge.c" To Segment 1 - Add Files (ijg_folder as string) & "jcomapi.c" To Segment 1 - Add Files (ijg_folder as string) & "jutils.c" To Segment 1 - Add Files (ijg_folder as string) & "jerror.c" To Segment 1 - Add Files (ijg_folder as string) & "jmemmgr.c" To Segment 1 - Add Files (ijg_folder as string) & "jmemmac.c" To Segment 1 - - -- compile and link the library - - Make Project - Close Project - - -- create cjpeg project - - activate - Create Project (ijg_folder as string) & "cjpeg.proj" - Set Preferences of panel "Target Settings" to {Target Name:"cjpeg"} - Set Preferences of panel "PPC Project" to {File Name:"cjpeg"} - Set Preferences of panel "Target Settings" to {Linker:"MacOS PPC Linker"} - Set Preferences of panel "C/C++ Compiler" to {ANSI Strict:true} - Set Preferences of panel "C/C++ Compiler" to {Enums Always Ints:true} - Set Preferences of panel "PPC Codegen" to {Struct Alignment:PowerPC} - Set Preferences of panel "PPC Linker" to {Generate SYM File:false} - - Add Files (ijg_folder as string) & "cjpeg.c" To Segment 1 - Add Files (ijg_folder as string) & "rdppm.c" To Segment 1 - Add Files (ijg_folder as string) & "rdgif.c" To Segment 1 - Add Files (ijg_folder as string) & "rdtarga.c" To Segment 1 - Add Files (ijg_folder as string) & "rdrle.c" To Segment 1 - Add Files (ijg_folder as string) & "rdbmp.c" To Segment 1 - Add Files (ijg_folder as string) & "rdswitch.c" To Segment 1 - Add Files (ijg_folder as string) & "cdjpeg.c" To Segment 1 - - Add Files (ijg_folder as string) & "libjpeg" To Segment 2 - - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL C.PPC.Lib" To Segment 3 - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL SIOUX.PPC.Lib" To Segment 3 - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:Runtime:Runtime PPC:MSL RuntimePPC.Lib" To Segment 3 - - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:InterfaceLib" To Segment 4 - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:MathLib" To Segment 4 - - -- compile and link cjpeg - - Make Project - Close Project - - -- create djpeg project - - activate - Create Project (ijg_folder as string) & "djpeg.proj" - Set Preferences of panel "Target Settings" to {Target Name:"djpeg"} - Set Preferences of panel "PPC Project" to {File Name:"djpeg"} - Set Preferences of panel "Target Settings" to {Linker:"MacOS PPC Linker"} - Set Preferences of panel "C/C++ Compiler" to {ANSI Strict:true} - Set Preferences of panel "C/C++ Compiler" to {Enums Always Ints:true} - Set Preferences of panel "PPC Codegen" to {Struct Alignment:PowerPC} - Set Preferences of panel "PPC Linker" to {Generate SYM File:false} - - Add Files (ijg_folder as string) & "djpeg.c" To Segment 1 - Add Files (ijg_folder as string) & "wrppm.c" To Segment 1 - Add Files (ijg_folder as string) & "wrgif.c" To Segment 1 - Add Files (ijg_folder as string) & "wrtarga.c" To Segment 1 - Add Files (ijg_folder as string) & "wrrle.c" To Segment 1 - Add Files (ijg_folder as string) & "wrbmp.c" To Segment 1 - Add Files (ijg_folder as string) & "rdcolmap.c" To Segment 1 - Add Files (ijg_folder as string) & "cdjpeg.c" To Segment 1 - - Add Files (ijg_folder as string) & "libjpeg" To Segment 2 - - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL C.PPC.Lib" To Segment 3 - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL SIOUX.PPC.Lib" To Segment 3 - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:Runtime:Runtime PPC:MSL RuntimePPC.Lib" To Segment 3 - - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:InterfaceLib" To Segment 4 - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:MathLib" To Segment 4 - - -- compile and link djpeg - - Make Project - Close Project - - -- create jpegtran project - - activate - Create Project (ijg_folder as string) & "jpegtran.proj" - Set Preferences of panel "Target Settings" to {Target Name:"jpegtran"} - Set Preferences of panel "PPC Project" to {File Name:"jpegtran"} - Set Preferences of panel "Target Settings" to {Linker:"MacOS PPC Linker"} - Set Preferences of panel "C/C++ Compiler" to {ANSI Strict:true} - Set Preferences of panel "C/C++ Compiler" to {Enums Always Ints:true} - Set Preferences of panel "PPC Codegen" to {Struct Alignment:PowerPC} - Set Preferences of panel "PPC Linker" to {Generate SYM File:false} - - Add Files (ijg_folder as string) & "jpegtran.c" To Segment 1 - Add Files (ijg_folder as string) & "rdswitch.c" To Segment 1 - Add Files (ijg_folder as string) & "cdjpeg.c" To Segment 1 - Add Files (ijg_folder as string) & "transupp.c" To Segment 1 - - Add Files (ijg_folder as string) & "libjpeg" To Segment 2 - - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL C.PPC.Lib" To Segment 3 - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:Metrowerks Standard Library:MSL C:Bin:MSL SIOUX.PPC.Lib" To Segment 3 - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:Runtime:Runtime PPC:MSL RuntimePPC.Lib" To Segment 3 - - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:InterfaceLib" To Segment 4 - Add Files (cw_folder as string) & "Metrowerks CodeWarrior:MacOS Support:Libraries:MacOS Common:MathLib" To Segment 4 - - -- compile and link jpegtran - - Make Project - Close Project - - quit - - end timeout - end tell -end run diff --git a/Build/source/libs/jpeg/makljpeg.st b/Build/source/libs/jpeg/makljpeg.st deleted file mode 100644 index 813493ea878..00000000000 --- a/Build/source/libs/jpeg/makljpeg.st +++ /dev/null @@ -1,70 +0,0 @@ -; Project file for Independent JPEG Group's software -; -; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. -; Thanks to Frank Moehle (Frank.Moehle@arbi.informatik.uni-oldenburg.de), -; Dr. B. Setzepfandt (bernd@gina.uni-muenster.de), -; and Guido Vollbeding (guivol@esc.de). -; -; To use this file, rename it to libjpeg.prj. -; Read installation instructions before trying to make the program! -; -; -; * * * Output file * * * -libjpeg.lib -; -; * * * COMPILER OPTIONS * * * -.C[-P] ; absolute calls -.C[-M] ; and no string merging, folks -.C[-w-cln] ; no "constant is long" warnings -.C[-w-par] ; no "parameter xxxx unused" -.C[-w-rch] ; no "unreachable code" -.C[-wsig] ; warn if significant digits may be lost -.L[-J] ; link new Obj-format (so we get a library) -= -; * * * * List of modules * * * * -jcapimin.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcapistd.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jccoefct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jccolor.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcdctmgr.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jchuff.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jchuff.h) -jcinit.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcmainct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcmarker.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcmaster.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcomapi.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcparam.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcphuff.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jchuff.h) -jcprepct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcsample.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jctrans.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdapimin.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdapistd.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdatadst.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h) -jdatasrc.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h) -jdcoefct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdcolor.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jddctmgr.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jdhuff.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdhuff.h) -jdinput.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdmainct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdmarker.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdmaster.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdmerge.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdphuff.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdhuff.h) -jdpostct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdsample.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdtrans.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jerror.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jversion.h,jerror.h) -jfdctflt.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jfdctfst.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jfdctint.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jidctflt.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jidctfst.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jidctint.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jidctred.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jquant1.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jquant2.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jutils.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jmemmgr.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jmemsys.h) -jmemansi.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jmemsys.h) diff --git a/Build/source/libs/jpeg/maktjpeg.st b/Build/source/libs/jpeg/maktjpeg.st deleted file mode 100644 index 31f4d169cdb..00000000000 --- a/Build/source/libs/jpeg/maktjpeg.st +++ /dev/null @@ -1,32 +0,0 @@ -; Project file for Independent JPEG Group's software -; -; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. -; Thanks to Frank Moehle (Frank.Moehle@arbi.informatik.uni-oldenburg.de), -; Dr. B. Setzepfandt (bernd@gina.uni-muenster.de), -; and Guido Vollbeding (guivol@esc.de). -; -; To use this file, rename it to jpegtran.prj. -; If you are using Turbo C, change filenames beginning with "pc..." to "tc..." -; Read installation instructions before trying to make the program! -; -; -; * * * Output file * * * -jpegtran.ttp -; -; * * * COMPILER OPTIONS * * * -.C[-P] ; absolute calls -.C[-M] ; and no string merging, folks -.C[-w-cln] ; no "constant is long" warnings -.C[-w-par] ; no "parameter xxxx unused" -.C[-w-rch] ; no "unreachable code" -.C[-wsig] ; warn if significant digits may be lost -= -; * * * * List of modules * * * * -pcstart.o -jpegtran.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h,transupp.h,jversion.h) -cdjpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -rdswitch.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -transupp.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,transupp.h) -libjpeg.lib ; built by libjpeg.prj -pcstdlib.lib ; standard library -pcextlib.lib ; extended library diff --git a/Build/source/libs/jpeg/makvms.opt b/Build/source/libs/jpeg/makvms.opt deleted file mode 100644 index 675e8fe98a4..00000000000 --- a/Build/source/libs/jpeg/makvms.opt +++ /dev/null @@ -1,4 +0,0 @@ -! A pointer to the VAX/VMS C Run-Time Shareable Library. -! This file is needed by makefile.mms and makefile.vms, -! but only for the older VAX C compiler. DEC C does not need it. -Sys$Library:VAXCRTL.EXE /Share diff --git a/Build/source/libs/jpeg/rdbmp.c b/Build/source/libs/jpeg/rdbmp.c deleted file mode 100644 index b05fe2ac47c..00000000000 --- a/Build/source/libs/jpeg/rdbmp.c +++ /dev/null @@ -1,439 +0,0 @@ -/* - * rdbmp.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to read input images in Microsoft "BMP" - * format (MS Windows 3.x, OS/2 1.x, and OS/2 2.x flavors). - * Currently, only 8-bit and 24-bit images are supported, not 1-bit or - * 4-bit (feeding such low-depth images into JPEG would be silly anyway). - * Also, we don't support RLE-compressed files. - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume input from - * an ordinary stdio stream. They further assume that reading begins - * at the start of the file; start_input may need work if the - * user interface has already read some data (e.g., to determine that - * the file is indeed BMP format). - * - * This code contributed by James Arthur Boucher. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef BMP_SUPPORTED - - -/* Macros to deal with unsigned chars as efficiently as compiler allows */ - -#ifdef HAVE_UNSIGNED_CHAR -typedef unsigned char U_CHAR; -#define UCH(x) ((int) (x)) -#else /* !HAVE_UNSIGNED_CHAR */ -#ifdef CHAR_IS_UNSIGNED -typedef char U_CHAR; -#define UCH(x) ((int) (x)) -#else -typedef char U_CHAR; -#define UCH(x) ((int) (x) & 0xFF) -#endif -#endif /* HAVE_UNSIGNED_CHAR */ - - -#define ReadOK(file,buffer,len) (JFREAD(file,buffer,len) == ((size_t) (len))) - - -/* Private version of data source object */ - -typedef struct _bmp_source_struct * bmp_source_ptr; - -typedef struct _bmp_source_struct { - struct cjpeg_source_struct pub; /* public fields */ - - j_compress_ptr cinfo; /* back link saves passing separate parm */ - - JSAMPARRAY colormap; /* BMP colormap (converted to my format) */ - - jvirt_sarray_ptr whole_image; /* Needed to reverse row order */ - JDIMENSION source_row; /* Current source row number */ - JDIMENSION row_width; /* Physical width of scanlines in file */ - - int bits_per_pixel; /* remembers 8- or 24-bit format */ -} bmp_source_struct; - - -LOCAL(int) -read_byte (bmp_source_ptr sinfo) -/* Read next byte from BMP file */ -{ - register FILE *infile = sinfo->pub.input_file; - register int c; - - if ((c = getc(infile)) == EOF) - ERREXIT(sinfo->cinfo, JERR_INPUT_EOF); - return c; -} - - -LOCAL(void) -read_colormap (bmp_source_ptr sinfo, int cmaplen, int mapentrysize) -/* Read the colormap from a BMP file */ -{ - int i; - - switch (mapentrysize) { - case 3: - /* BGR format (occurs in OS/2 files) */ - for (i = 0; i < cmaplen; i++) { - sinfo->colormap[2][i] = (JSAMPLE) read_byte(sinfo); - sinfo->colormap[1][i] = (JSAMPLE) read_byte(sinfo); - sinfo->colormap[0][i] = (JSAMPLE) read_byte(sinfo); - } - break; - case 4: - /* BGR0 format (occurs in MS Windows files) */ - for (i = 0; i < cmaplen; i++) { - sinfo->colormap[2][i] = (JSAMPLE) read_byte(sinfo); - sinfo->colormap[1][i] = (JSAMPLE) read_byte(sinfo); - sinfo->colormap[0][i] = (JSAMPLE) read_byte(sinfo); - (void) read_byte(sinfo); - } - break; - default: - ERREXIT(sinfo->cinfo, JERR_BMP_BADCMAP); - break; - } -} - - -/* - * Read one row of pixels. - * The image has been read into the whole_image array, but is otherwise - * unprocessed. We must read it out in top-to-bottom row order, and if - * it is an 8-bit image, we must expand colormapped pixels to 24bit format. - */ - -METHODDEF(JDIMENSION) -get_8bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading 8-bit colormap indexes */ -{ - bmp_source_ptr source = (bmp_source_ptr) sinfo; - register JSAMPARRAY colormap = source->colormap; - JSAMPARRAY image_ptr; - register int t; - register JSAMPROW inptr, outptr; - register JDIMENSION col; - - /* Fetch next row from virtual array */ - source->source_row--; - image_ptr = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->whole_image, - source->source_row, (JDIMENSION) 1, FALSE); - - /* Expand the colormap indexes to real data */ - inptr = image_ptr[0]; - outptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - t = GETJSAMPLE(*inptr++); - *outptr++ = colormap[0][t]; /* can omit GETJSAMPLE() safely */ - *outptr++ = colormap[1][t]; - *outptr++ = colormap[2][t]; - } - - return 1; -} - - -METHODDEF(JDIMENSION) -get_24bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading 24-bit pixels */ -{ - bmp_source_ptr source = (bmp_source_ptr) sinfo; - JSAMPARRAY image_ptr; - register JSAMPROW inptr, outptr; - register JDIMENSION col; - - /* Fetch next row from virtual array */ - source->source_row--; - image_ptr = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->whole_image, - source->source_row, (JDIMENSION) 1, FALSE); - - /* Transfer data. Note source values are in BGR order - * (even though Microsoft's own documents say the opposite). - */ - inptr = image_ptr[0]; - outptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - outptr[2] = *inptr++; /* can omit GETJSAMPLE() safely */ - outptr[1] = *inptr++; - outptr[0] = *inptr++; - outptr += 3; - } - - return 1; -} - - -/* - * This method loads the image into whole_image during the first call on - * get_pixel_rows. The get_pixel_rows pointer is then adjusted to call - * get_8bit_row or get_24bit_row on subsequent calls. - */ - -METHODDEF(JDIMENSION) -preload_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - bmp_source_ptr source = (bmp_source_ptr) sinfo; - register FILE *infile = source->pub.input_file; - register int c; - register JSAMPROW out_ptr; - JSAMPARRAY image_ptr; - JDIMENSION row, col; - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; - - /* Read the data into a virtual array in input-file row order. */ - for (row = 0; row < cinfo->image_height; row++) { - if (progress != NULL) { - progress->pub.pass_counter = (long) row; - progress->pub.pass_limit = (long) cinfo->image_height; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } - image_ptr = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->whole_image, - row, (JDIMENSION) 1, TRUE); - out_ptr = image_ptr[0]; - for (col = source->row_width; col > 0; col--) { - /* inline copy of read_byte() for speed */ - if ((c = getc(infile)) == EOF) - ERREXIT(cinfo, JERR_INPUT_EOF); - *out_ptr++ = (JSAMPLE) c; - } - } - if (progress != NULL) - progress->completed_extra_passes++; - - /* Set up to read from the virtual array in top-to-bottom order */ - switch (source->bits_per_pixel) { - case 8: - source->pub.get_pixel_rows = get_8bit_row; - break; - case 24: - source->pub.get_pixel_rows = get_24bit_row; - break; - default: - ERREXIT(cinfo, JERR_BMP_BADDEPTH); - } - source->source_row = cinfo->image_height; - - /* And read the first row */ - return (*source->pub.get_pixel_rows) (cinfo, sinfo); -} - - -/* - * Read the file header; return image size and component count. - */ - -METHODDEF(void) -start_input_bmp (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - bmp_source_ptr source = (bmp_source_ptr) sinfo; - U_CHAR bmpfileheader[14]; - U_CHAR bmpinfoheader[64]; -#define GET_2B(array,offset) ((unsigned int) UCH(array[offset]) + \ - (((unsigned int) UCH(array[offset+1])) << 8)) -#define GET_4B(array,offset) ((INT32) UCH(array[offset]) + \ - (((INT32) UCH(array[offset+1])) << 8) + \ - (((INT32) UCH(array[offset+2])) << 16) + \ - (((INT32) UCH(array[offset+3])) << 24)) - INT32 bfOffBits; - INT32 headerSize; - INT32 biWidth = 0; /* initialize to avoid compiler warning */ - INT32 biHeight = 0; - unsigned int biPlanes; - INT32 biCompression; - INT32 biXPelsPerMeter,biYPelsPerMeter; - INT32 biClrUsed = 0; - int mapentrysize = 0; /* 0 indicates no colormap */ - INT32 bPad; - JDIMENSION row_width; - - /* Read and verify the bitmap file header */ - if (! ReadOK(source->pub.input_file, bmpfileheader, 14)) - ERREXIT(cinfo, JERR_INPUT_EOF); - if (GET_2B(bmpfileheader,0) != 0x4D42) /* 'BM' */ - ERREXIT(cinfo, JERR_BMP_NOT); - bfOffBits = (INT32) GET_4B(bmpfileheader,10); - /* We ignore the remaining fileheader fields */ - - /* The infoheader might be 12 bytes (OS/2 1.x), 40 bytes (Windows), - * or 64 bytes (OS/2 2.x). Check the first 4 bytes to find out which. - */ - if (! ReadOK(source->pub.input_file, bmpinfoheader, 4)) - ERREXIT(cinfo, JERR_INPUT_EOF); - headerSize = (INT32) GET_4B(bmpinfoheader,0); - if (headerSize < 12 || headerSize > 64) - ERREXIT(cinfo, JERR_BMP_BADHEADER); - if (! ReadOK(source->pub.input_file, bmpinfoheader+4, headerSize-4)) - ERREXIT(cinfo, JERR_INPUT_EOF); - - switch ((int) headerSize) { - case 12: - /* Decode OS/2 1.x header (Microsoft calls this a BITMAPCOREHEADER) */ - biWidth = (INT32) GET_2B(bmpinfoheader,4); - biHeight = (INT32) GET_2B(bmpinfoheader,6); - biPlanes = GET_2B(bmpinfoheader,8); - source->bits_per_pixel = (int) GET_2B(bmpinfoheader,10); - - switch (source->bits_per_pixel) { - case 8: /* colormapped image */ - mapentrysize = 3; /* OS/2 uses RGBTRIPLE colormap */ - TRACEMS2(cinfo, 1, JTRC_BMP_OS2_MAPPED, (int) biWidth, (int) biHeight); - break; - case 24: /* RGB image */ - TRACEMS2(cinfo, 1, JTRC_BMP_OS2, (int) biWidth, (int) biHeight); - break; - default: - ERREXIT(cinfo, JERR_BMP_BADDEPTH); - break; - } - if (biPlanes != 1) - ERREXIT(cinfo, JERR_BMP_BADPLANES); - break; - case 40: - case 64: - /* Decode Windows 3.x header (Microsoft calls this a BITMAPINFOHEADER) */ - /* or OS/2 2.x header, which has additional fields that we ignore */ - biWidth = GET_4B(bmpinfoheader,4); - biHeight = GET_4B(bmpinfoheader,8); - biPlanes = GET_2B(bmpinfoheader,12); - source->bits_per_pixel = (int) GET_2B(bmpinfoheader,14); - biCompression = GET_4B(bmpinfoheader,16); - biXPelsPerMeter = GET_4B(bmpinfoheader,24); - biYPelsPerMeter = GET_4B(bmpinfoheader,28); - biClrUsed = GET_4B(bmpinfoheader,32); - /* biSizeImage, biClrImportant fields are ignored */ - - switch (source->bits_per_pixel) { - case 8: /* colormapped image */ - mapentrysize = 4; /* Windows uses RGBQUAD colormap */ - TRACEMS2(cinfo, 1, JTRC_BMP_MAPPED, (int) biWidth, (int) biHeight); - break; - case 24: /* RGB image */ - TRACEMS2(cinfo, 1, JTRC_BMP, (int) biWidth, (int) biHeight); - break; - default: - ERREXIT(cinfo, JERR_BMP_BADDEPTH); - break; - } - if (biPlanes != 1) - ERREXIT(cinfo, JERR_BMP_BADPLANES); - if (biCompression != 0) - ERREXIT(cinfo, JERR_BMP_COMPRESSED); - - if (biXPelsPerMeter > 0 && biYPelsPerMeter > 0) { - /* Set JFIF density parameters from the BMP data */ - cinfo->X_density = (UINT16) (biXPelsPerMeter/100); /* 100 cm per meter */ - cinfo->Y_density = (UINT16) (biYPelsPerMeter/100); - cinfo->density_unit = 2; /* dots/cm */ - } - break; - default: - ERREXIT(cinfo, JERR_BMP_BADHEADER); - break; - } - - /* Compute distance to bitmap data --- will adjust for colormap below */ - bPad = bfOffBits - (headerSize + 14); - - /* Read the colormap, if any */ - if (mapentrysize > 0) { - if (biClrUsed <= 0) - biClrUsed = 256; /* assume it's 256 */ - else if (biClrUsed > 256) - ERREXIT(cinfo, JERR_BMP_BADCMAP); - /* Allocate space to store the colormap */ - source->colormap = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) biClrUsed, (JDIMENSION) 3); - /* and read it from the file */ - read_colormap(source, (int) biClrUsed, mapentrysize); - /* account for size of colormap */ - bPad -= biClrUsed * mapentrysize; - } - - /* Skip any remaining pad bytes */ - if (bPad < 0) /* incorrect bfOffBits value? */ - ERREXIT(cinfo, JERR_BMP_BADHEADER); - while (--bPad >= 0) { - (void) read_byte(source); - } - - /* Compute row width in file, including padding to 4-byte boundary */ - if (source->bits_per_pixel == 24) - row_width = (JDIMENSION) (biWidth * 3); - else - row_width = (JDIMENSION) biWidth; - while ((row_width & 3) != 0) row_width++; - source->row_width = row_width; - - /* Allocate space for inversion array, prepare for preload pass */ - source->whole_image = (*cinfo->mem->request_virt_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, - row_width, (JDIMENSION) biHeight, (JDIMENSION) 1); - source->pub.get_pixel_rows = preload_image; - if (cinfo->progress != NULL) { - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; - progress->total_extra_passes++; /* count file input as separate pass */ - } - - /* Allocate one-row buffer for returned data */ - source->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) (biWidth * 3), (JDIMENSION) 1); - source->pub.buffer_height = 1; - - cinfo->in_color_space = JCS_RGB; - cinfo->input_components = 3; - cinfo->data_precision = 8; - cinfo->image_width = (JDIMENSION) biWidth; - cinfo->image_height = (JDIMENSION) biHeight; -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF(void) -finish_input_bmp (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - /* no work */ -} - - -/* - * The module selection routine for BMP format input. - */ - -GLOBAL(cjpeg_source_ptr) -jinit_read_bmp (j_compress_ptr cinfo) -{ - bmp_source_ptr source; - - /* Create module interface object */ - source = (bmp_source_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(bmp_source_struct)); - source->cinfo = cinfo; /* make back link for subroutines */ - /* Fill in method ptrs, except get_pixel_rows which start_input sets */ - source->pub.start_input = start_input_bmp; - source->pub.finish_input = finish_input_bmp; - - return (cjpeg_source_ptr) source; -} - -#endif /* BMP_SUPPORTED */ diff --git a/Build/source/libs/jpeg/rdcolmap.c b/Build/source/libs/jpeg/rdcolmap.c deleted file mode 100644 index 42b343763b5..00000000000 --- a/Build/source/libs/jpeg/rdcolmap.c +++ /dev/null @@ -1,253 +0,0 @@ -/* - * rdcolmap.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file implements djpeg's "-map file" switch. It reads a source image - * and constructs a colormap to be supplied to the JPEG decompressor. - * - * Currently, these file formats are supported for the map file: - * GIF: the contents of the GIF's global colormap are used. - * PPM (either text or raw flavor): the entire file is read and - * each unique pixel value is entered in the map. - * Note that reading a large PPM file will be horrendously slow. - * Typically, a PPM-format map file should contain just one pixel - * of each desired color. Such a file can be extracted from an - * ordinary image PPM file with ppmtomap(1). - * - * Rescaling a PPM that has a maxval unequal to MAXJSAMPLE is not - * currently implemented. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef QUANT_2PASS_SUPPORTED /* otherwise can't quantize to supplied map */ - -/* Portions of this code are based on the PBMPLUS library, which is: -** -** Copyright (C) 1988 by Jef Poskanzer. -** -** Permission to use, copy, modify, and distribute this software and its -** documentation for any purpose and without fee is hereby granted, provided -** that the above copyright notice appear in all copies and that both that -** copyright notice and this permission notice appear in supporting -** documentation. This software is provided "as is" without express or -** implied warranty. -*/ - - -/* - * Add a (potentially) new color to the color map. - */ - -LOCAL(void) -add_map_entry (j_decompress_ptr cinfo, int R, int G, int B) -{ - JSAMPROW colormap0 = cinfo->colormap[0]; - JSAMPROW colormap1 = cinfo->colormap[1]; - JSAMPROW colormap2 = cinfo->colormap[2]; - int ncolors = cinfo->actual_number_of_colors; - int index; - - /* Check for duplicate color. */ - for (index = 0; index < ncolors; index++) { - if (GETJSAMPLE(colormap0[index]) == R && - GETJSAMPLE(colormap1[index]) == G && - GETJSAMPLE(colormap2[index]) == B) - return; /* color is already in map */ - } - - /* Check for map overflow. */ - if (ncolors >= (MAXJSAMPLE+1)) - ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, (MAXJSAMPLE+1)); - - /* OK, add color to map. */ - colormap0[ncolors] = (JSAMPLE) R; - colormap1[ncolors] = (JSAMPLE) G; - colormap2[ncolors] = (JSAMPLE) B; - cinfo->actual_number_of_colors++; -} - - -/* - * Extract color map from a GIF file. - */ - -LOCAL(void) -read_gif_map (j_decompress_ptr cinfo, FILE * infile) -{ - int header[13]; - int i, colormaplen; - int R, G, B; - - /* Initial 'G' has already been read by read_color_map */ - /* Read the rest of the GIF header and logical screen descriptor */ - for (i = 1; i < 13; i++) { - if ((header[i] = getc(infile)) == EOF) - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - } - - /* Verify GIF Header */ - if (header[1] != 'I' || header[2] != 'F') - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - - /* There must be a global color map. */ - if ((header[10] & 0x80) == 0) - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - - /* OK, fetch it. */ - colormaplen = 2 << (header[10] & 0x07); - - for (i = 0; i < colormaplen; i++) { - R = getc(infile); - G = getc(infile); - B = getc(infile); - if (R == EOF || G == EOF || B == EOF) - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - add_map_entry(cinfo, - R << (BITS_IN_JSAMPLE-8), - G << (BITS_IN_JSAMPLE-8), - B << (BITS_IN_JSAMPLE-8)); - } -} - - -/* Support routines for reading PPM */ - - -LOCAL(int) -pbm_getc (FILE * infile) -/* Read next char, skipping over any comments */ -/* A comment/newline sequence is returned as a newline */ -{ - register int ch; - - ch = getc(infile); - if (ch == '#') { - do { - ch = getc(infile); - } while (ch != '\n' && ch != EOF); - } - return ch; -} - - -LOCAL(unsigned int) -read_pbm_integer (j_decompress_ptr cinfo, FILE * infile) -/* Read an unsigned decimal integer from the PPM file */ -/* Swallows one trailing character after the integer */ -/* Note that on a 16-bit-int machine, only values up to 64k can be read. */ -/* This should not be a problem in practice. */ -{ - register int ch; - register unsigned int val; - - /* Skip any leading whitespace */ - do { - ch = pbm_getc(infile); - if (ch == EOF) - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - } while (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r'); - - if (ch < '0' || ch > '9') - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - - val = ch - '0'; - while ((ch = pbm_getc(infile)) >= '0' && ch <= '9') { - val *= 10; - val += ch - '0'; - } - return val; -} - - -/* - * Extract color map from a PPM file. - */ - -LOCAL(void) -read_ppm_map (j_decompress_ptr cinfo, FILE * infile) -{ - int c; - unsigned int w, h, maxval, row, col; - int R, G, B; - - /* Initial 'P' has already been read by read_color_map */ - c = getc(infile); /* save format discriminator for a sec */ - - /* while we fetch the remaining header info */ - w = read_pbm_integer(cinfo, infile); - h = read_pbm_integer(cinfo, infile); - maxval = read_pbm_integer(cinfo, infile); - - if (w <= 0 || h <= 0 || maxval <= 0) /* error check */ - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - - /* For now, we don't support rescaling from an unusual maxval. */ - if (maxval != (unsigned int) MAXJSAMPLE) - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - - switch (c) { - case '3': /* it's a text-format PPM file */ - for (row = 0; row < h; row++) { - for (col = 0; col < w; col++) { - R = read_pbm_integer(cinfo, infile); - G = read_pbm_integer(cinfo, infile); - B = read_pbm_integer(cinfo, infile); - add_map_entry(cinfo, R, G, B); - } - } - break; - - case '6': /* it's a raw-format PPM file */ - for (row = 0; row < h; row++) { - for (col = 0; col < w; col++) { - R = getc(infile); - G = getc(infile); - B = getc(infile); - if (R == EOF || G == EOF || B == EOF) - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - add_map_entry(cinfo, R, G, B); - } - } - break; - - default: - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - break; - } -} - - -/* - * Main entry point from djpeg.c. - * Input: opened input file (from file name argument on command line). - * Output: colormap and actual_number_of_colors fields are set in cinfo. - */ - -GLOBAL(void) -read_color_map (j_decompress_ptr cinfo, FILE * infile) -{ - /* Allocate space for a color map of maximum supported size. */ - cinfo->colormap = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) (MAXJSAMPLE+1), (JDIMENSION) 3); - cinfo->actual_number_of_colors = 0; /* initialize map to empty */ - - /* Read first byte to determine file format */ - switch (getc(infile)) { - case 'G': - read_gif_map(cinfo, infile); - break; - case 'P': - read_ppm_map(cinfo, infile); - break; - default: - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - break; - } -} - -#endif /* QUANT_2PASS_SUPPORTED */ diff --git a/Build/source/libs/jpeg/rdgif.c b/Build/source/libs/jpeg/rdgif.c deleted file mode 100644 index b27c1675d76..00000000000 --- a/Build/source/libs/jpeg/rdgif.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * rdgif.c - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to read input images in GIF format. - * - ***************************************************************************** - * NOTE: to avoid entanglements with Unisys' patent on LZW compression, * - * the ability to read GIF files has been removed from the IJG distribution. * - * Sorry about that. * - ***************************************************************************** - * - * We are required to state that - * "The Graphics Interchange Format(c) is the Copyright property of - * CompuServe Incorporated. GIF(sm) is a Service Mark property of - * CompuServe Incorporated." - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef GIF_SUPPORTED - -/* - * The module selection routine for GIF format input. - */ - -GLOBAL(cjpeg_source_ptr) -jinit_read_gif (j_compress_ptr cinfo) -{ - fprintf(stderr, "GIF input is unsupported for legal reasons. Sorry.\n"); - exit(EXIT_FAILURE); - return NULL; /* keep compiler happy */ -} - -#endif /* GIF_SUPPORTED */ diff --git a/Build/source/libs/jpeg/rdjpgcom.1 b/Build/source/libs/jpeg/rdjpgcom.1 deleted file mode 100644 index 2bba04e1a24..00000000000 --- a/Build/source/libs/jpeg/rdjpgcom.1 +++ /dev/null @@ -1,54 +0,0 @@ -.TH RDJPGCOM 1 "11 October 1997" -.SH NAME -rdjpgcom \- display text comments from a JPEG file -.SH SYNOPSIS -.B rdjpgcom -[ -.B \-verbose -] -[ -.I filename -] -.LP -.SH DESCRIPTION -.LP -.B rdjpgcom -reads the named JPEG/JFIF file, or the standard input if no file is named, -and prints any text comments found in the file on the standard output. -.PP -The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file. -Although the standard doesn't actually define what COM blocks are for, they -are widely used to hold user-supplied text strings. This lets you add -annotations, titles, index terms, etc to your JPEG files, and later retrieve -them as text. COM blocks do not interfere with the image stored in the JPEG -file. The maximum size of a COM block is 64K, but you can have as many of -them as you like in one JPEG file. -.SH OPTIONS -.TP -.B \-verbose -Causes -.B rdjpgcom -to also display the JPEG image dimensions. -.PP -Switch names may be abbreviated, and are not case sensitive. -.SH HINTS -.B rdjpgcom -does not depend on the IJG JPEG library. Its source code is intended as an -illustration of the minimum amount of code required to parse a JPEG file -header correctly. -.PP -In -.B \-verbose -mode, -.B rdjpgcom -will also attempt to print the contents of any "APP12" markers as text. -Some digital cameras produce APP12 markers containing useful textual -information. If you like, you can modify the source code to print -other APPn marker types as well. -.SH SEE ALSO -.BR cjpeg (1), -.BR djpeg (1), -.BR jpegtran (1), -.BR wrjpgcom (1) -.SH AUTHOR -Independent JPEG Group diff --git a/Build/source/libs/jpeg/rdjpgcom.c b/Build/source/libs/jpeg/rdjpgcom.c deleted file mode 100644 index ffe6fc6218d..00000000000 --- a/Build/source/libs/jpeg/rdjpgcom.c +++ /dev/null @@ -1,496 +0,0 @@ -/* - * rdjpgcom.c - * - * Copyright (C) 1994-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a very simple stand-alone application that displays - * the text in COM (comment) markers in a JFIF file. - * This may be useful as an example of the minimum logic needed to parse - * JPEG markers. - */ - -#define JPEG_CJPEG_DJPEG /* to get the command-line config symbols */ -#include "jinclude.h" /* get auto-config symbols, */ - -#include /* to declare isupper(), tolower() */ -#ifdef USE_SETMODE -#include /* to declare setmode()'s parameter macros */ -/* If you have setmode() but not , just delete this line: */ -#include /* to declare setmode() */ -#endif - -#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ -#ifdef __MWERKS__ -#include /* Metrowerks needs this */ -#include /* ... and this */ -#endif -#ifdef THINK_C -#include /* Think declares it here */ -#endif -#endif - -#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ -#define READ_BINARY "r" -#else -#ifdef VMS /* VMS is very nonstandard */ -#define READ_BINARY "rb", "ctx=stm" -#else /* standard ANSI-compliant case */ -#define READ_BINARY "rb" -#endif -#endif - -#ifndef EXIT_FAILURE /* define exit() codes if not provided */ -#define EXIT_FAILURE 1 -#endif -#ifndef EXIT_SUCCESS -#ifdef VMS -#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ -#else -#define EXIT_SUCCESS 0 -#endif -#endif - - -/* - * These macros are used to read the input file. - * To reuse this code in another application, you might need to change these. - */ - -static FILE * infile; /* input JPEG file */ - -/* Return next input byte, or EOF if no more */ -#define NEXTBYTE() getc(infile) - - -/* Error exit handler */ -#define ERREXIT(msg) (fprintf(stderr, "%s\n", msg), exit(EXIT_FAILURE)) - - -/* Read one byte, testing for EOF */ -static int -read_1_byte (void) -{ - int c; - - c = NEXTBYTE(); - if (c == EOF) - ERREXIT("Premature EOF in JPEG file"); - return c; -} - -/* Read 2 bytes, convert to unsigned int */ -/* All 2-byte quantities in JPEG markers are MSB first */ -static unsigned int -read_2_bytes (void) -{ - int c1, c2; - - c1 = NEXTBYTE(); - if (c1 == EOF) - ERREXIT("Premature EOF in JPEG file"); - c2 = NEXTBYTE(); - if (c2 == EOF) - ERREXIT("Premature EOF in JPEG file"); - return (((unsigned int) c1) << 8) + ((unsigned int) c2); -} - - -/* - * JPEG markers consist of one or more 0xFF bytes, followed by a marker - * code byte (which is not an FF). Here are the marker codes of interest - * in this program. (See jdmarker.c for a more complete list.) - */ - -#define M_SOF0 0xC0 /* Start Of Frame N */ -#define M_SOF1 0xC1 /* N indicates which compression process */ -#define M_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use */ -#define M_SOF3 0xC3 -#define M_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers */ -#define M_SOF6 0xC6 -#define M_SOF7 0xC7 -#define M_SOF9 0xC9 -#define M_SOF10 0xCA -#define M_SOF11 0xCB -#define M_SOF13 0xCD -#define M_SOF14 0xCE -#define M_SOF15 0xCF -#define M_SOI 0xD8 /* Start Of Image (beginning of datastream) */ -#define M_EOI 0xD9 /* End Of Image (end of datastream) */ -#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */ -#define M_APP0 0xE0 /* Application-specific marker, type N */ -#define M_APP12 0xEC /* (we don't bother to list all 16 APPn's) */ -#define M_COM 0xFE /* COMment */ - - -/* - * Find the next JPEG marker and return its marker code. - * We expect at least one FF byte, possibly more if the compressor used FFs - * to pad the file. - * There could also be non-FF garbage between markers. The treatment of such - * garbage is unspecified; we choose to skip over it but emit a warning msg. - * NB: this routine must not be used after seeing SOS marker, since it will - * not deal correctly with FF/00 sequences in the compressed image data... - */ - -static int -next_marker (void) -{ - int c; - int discarded_bytes = 0; - - /* Find 0xFF byte; count and skip any non-FFs. */ - c = read_1_byte(); - while (c != 0xFF) { - discarded_bytes++; - c = read_1_byte(); - } - /* Get marker code byte, swallowing any duplicate FF bytes. Extra FFs - * are legal as pad bytes, so don't count them in discarded_bytes. - */ - do { - c = read_1_byte(); - } while (c == 0xFF); - - if (discarded_bytes != 0) { - fprintf(stderr, "Warning: garbage data found in JPEG file\n"); - } - - return c; -} - - -/* - * Read the initial marker, which should be SOI. - * For a JFIF file, the first two bytes of the file should be literally - * 0xFF M_SOI. To be more general, we could use next_marker, but if the - * input file weren't actually JPEG at all, next_marker might read the whole - * file and then return a misleading error message... - */ - -static int -first_marker (void) -{ - int c1, c2; - - c1 = NEXTBYTE(); - c2 = NEXTBYTE(); - if (c1 != 0xFF || c2 != M_SOI) - ERREXIT("Not a JPEG file"); - return c2; -} - - -/* - * Most types of marker are followed by a variable-length parameter segment. - * This routine skips over the parameters for any marker we don't otherwise - * want to process. - * Note that we MUST skip the parameter segment explicitly in order not to - * be fooled by 0xFF bytes that might appear within the parameter segment; - * such bytes do NOT introduce new markers. - */ - -static void -skip_variable (void) -/* Skip over an unknown or uninteresting variable-length marker */ -{ - unsigned int length; - - /* Get the marker parameter length count */ - length = read_2_bytes(); - /* Length includes itself, so must be at least 2 */ - if (length < 2) - ERREXIT("Erroneous JPEG marker length"); - length -= 2; - /* Skip over the remaining bytes */ - while (length > 0) { - (void) read_1_byte(); - length--; - } -} - - -/* - * Process a COM marker. - * We want to print out the marker contents as legible text; - * we must guard against non-text junk and varying newline representations. - */ - -static void -process_COM (void) -{ - unsigned int length; - int ch; - int lastch = 0; - - /* Get the marker parameter length count */ - length = read_2_bytes(); - /* Length includes itself, so must be at least 2 */ - if (length < 2) - ERREXIT("Erroneous JPEG marker length"); - length -= 2; - - while (length > 0) { - ch = read_1_byte(); - /* Emit the character in a readable form. - * Nonprintables are converted to \nnn form, - * while \ is converted to \\. - * Newlines in CR, CR/LF, or LF form will be printed as one newline. - */ - if (ch == '\r') { - printf("\n"); - } else if (ch == '\n') { - if (lastch != '\r') - printf("\n"); - } else if (ch == '\\') { - printf("\\\\"); - } else if (isprint(ch)) { - putc(ch, stdout); - } else { - printf("\\%03o", ch); - } - lastch = ch; - length--; - } - printf("\n"); -} - - -/* - * Process a SOFn marker. - * This code is only needed if you want to know the image dimensions... - */ - -static void -process_SOFn (int marker) -{ - unsigned int length; - unsigned int image_height, image_width; - int data_precision, num_components; - const char * process; - int ci; - - length = read_2_bytes(); /* usual parameter length count */ - - data_precision = read_1_byte(); - image_height = read_2_bytes(); - image_width = read_2_bytes(); - num_components = read_1_byte(); - - switch (marker) { - case M_SOF0: process = "Baseline"; break; - case M_SOF1: process = "Extended sequential"; break; - case M_SOF2: process = "Progressive"; break; - case M_SOF3: process = "Lossless"; break; - case M_SOF5: process = "Differential sequential"; break; - case M_SOF6: process = "Differential progressive"; break; - case M_SOF7: process = "Differential lossless"; break; - case M_SOF9: process = "Extended sequential, arithmetic coding"; break; - case M_SOF10: process = "Progressive, arithmetic coding"; break; - case M_SOF11: process = "Lossless, arithmetic coding"; break; - case M_SOF13: process = "Differential sequential, arithmetic coding"; break; - case M_SOF14: process = "Differential progressive, arithmetic coding"; break; - case M_SOF15: process = "Differential lossless, arithmetic coding"; break; - default: process = "Unknown"; break; - } - - printf("JPEG image is %uw * %uh, %d color components, %d bits per sample\n", - image_width, image_height, num_components, data_precision); - printf("JPEG process: %s\n", process); - - if (length != (unsigned int) (8 + num_components * 3)) - ERREXIT("Bogus SOF marker length"); - - for (ci = 0; ci < num_components; ci++) { - (void) read_1_byte(); /* Component ID code */ - (void) read_1_byte(); /* H, V sampling factors */ - (void) read_1_byte(); /* Quantization table number */ - } -} - - -/* - * Parse the marker stream until SOS or EOI is seen; - * display any COM markers. - * While the companion program wrjpgcom will always insert COM markers before - * SOFn, other implementations might not, so we scan to SOS before stopping. - * If we were only interested in the image dimensions, we would stop at SOFn. - * (Conversely, if we only cared about COM markers, there would be no need - * for special code to handle SOFn; we could treat it like other markers.) - */ - -static int -scan_JPEG_header (int verbose) -{ - int marker; - - /* Expect SOI at start of file */ - if (first_marker() != M_SOI) - ERREXIT("Expected SOI marker first"); - - /* Scan miscellaneous markers until we reach SOS. */ - for (;;) { - marker = next_marker(); - switch (marker) { - /* Note that marker codes 0xC4, 0xC8, 0xCC are not, and must not be, - * treated as SOFn. C4 in particular is actually DHT. - */ - case M_SOF0: /* Baseline */ - case M_SOF1: /* Extended sequential, Huffman */ - case M_SOF2: /* Progressive, Huffman */ - case M_SOF3: /* Lossless, Huffman */ - case M_SOF5: /* Differential sequential, Huffman */ - case M_SOF6: /* Differential progressive, Huffman */ - case M_SOF7: /* Differential lossless, Huffman */ - case M_SOF9: /* Extended sequential, arithmetic */ - case M_SOF10: /* Progressive, arithmetic */ - case M_SOF11: /* Lossless, arithmetic */ - case M_SOF13: /* Differential sequential, arithmetic */ - case M_SOF14: /* Differential progressive, arithmetic */ - case M_SOF15: /* Differential lossless, arithmetic */ - if (verbose) - process_SOFn(marker); - else - skip_variable(); - break; - - case M_SOS: /* stop before hitting compressed data */ - return marker; - - case M_EOI: /* in case it's a tables-only JPEG stream */ - return marker; - - case M_COM: - process_COM(); - break; - - case M_APP12: - /* Some digital camera makers put useful textual information into - * APP12 markers, so we print those out too when in -verbose mode. - */ - if (verbose) { - printf("APP12 contains:\n"); - process_COM(); - } else - skip_variable(); - break; - - default: /* Anything else just gets skipped */ - skip_variable(); /* we assume it has a parameter count... */ - break; - } - } /* end loop */ -} - - -/* Command line parsing code */ - -static const char * progname; /* program name for error messages */ - - -static void -usage (void) -/* complain about bad command line */ -{ - fprintf(stderr, "rdjpgcom displays any textual comments in a JPEG file.\n"); - - fprintf(stderr, "Usage: %s [switches] [inputfile]\n", progname); - - fprintf(stderr, "Switches (names may be abbreviated):\n"); - fprintf(stderr, " -verbose Also display dimensions of JPEG image\n"); - - exit(EXIT_FAILURE); -} - - -static int -keymatch (char * arg, const char * keyword, int minchars) -/* Case-insensitive matching of (possibly abbreviated) keyword switches. */ -/* keyword is the constant keyword (must be lower case already), */ -/* minchars is length of minimum legal abbreviation. */ -{ - register int ca, ck; - register int nmatched = 0; - - while ((ca = *arg++) != '\0') { - if ((ck = *keyword++) == '\0') - return 0; /* arg longer than keyword, no good */ - if (isupper(ca)) /* force arg to lcase (assume ck is already) */ - ca = tolower(ca); - if (ca != ck) - return 0; /* no good */ - nmatched++; /* count matched characters */ - } - /* reached end of argument; fail if it's too short for unique abbrev */ - if (nmatched < minchars) - return 0; - return 1; /* A-OK */ -} - - -/* - * The main program. - */ - -int -main (int argc, char **argv) -{ - int argn; - char * arg; - int verbose = 0; - - /* On Mac, fetch a command line. */ -#ifdef USE_CCOMMAND - argc = ccommand(&argv); -#endif - - progname = argv[0]; - if (progname == NULL || progname[0] == 0) - progname = "rdjpgcom"; /* in case C library doesn't provide it */ - - /* Parse switches, if any */ - for (argn = 1; argn < argc; argn++) { - arg = argv[argn]; - if (arg[0] != '-') - break; /* not switch, must be file name */ - arg++; /* advance over '-' */ - if (keymatch(arg, "verbose", 1)) { - verbose++; - } else - usage(); - } - - /* Open the input file. */ - /* Unix style: expect zero or one file name */ - if (argn < argc-1) { - fprintf(stderr, "%s: only one input file\n", progname); - usage(); - } - if (argn < argc) { - if ((infile = fopen(argv[argn], READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); - exit(EXIT_FAILURE); - } - } else { - /* default input file is stdin */ -#ifdef USE_SETMODE /* need to hack file mode? */ - setmode(fileno(stdin), O_BINARY); -#endif -#ifdef USE_FDOPEN /* need to re-open in binary mode? */ - if ((infile = fdopen(fileno(stdin), READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open stdin\n", progname); - exit(EXIT_FAILURE); - } -#else - infile = stdin; -#endif - } - - /* Scan the JPEG headers. */ - (void) scan_JPEG_header(verbose); - - /* All done. */ - exit(EXIT_SUCCESS); - return 0; /* suppress no-return-value warnings */ -} diff --git a/Build/source/libs/jpeg/rdppm.c b/Build/source/libs/jpeg/rdppm.c deleted file mode 100644 index 1df35c1b3a4..00000000000 --- a/Build/source/libs/jpeg/rdppm.c +++ /dev/null @@ -1,458 +0,0 @@ -/* - * rdppm.c - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to read input images in PPM/PGM format. - * The extended 2-byte-per-sample raw PPM/PGM formats are supported. - * The PBMPLUS library is NOT required to compile this software - * (but it is highly useful as a set of PPM image manipulation programs). - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume input from - * an ordinary stdio stream. They further assume that reading begins - * at the start of the file; start_input may need work if the - * user interface has already read some data (e.g., to determine that - * the file is indeed PPM format). - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef PPM_SUPPORTED - - -/* Portions of this code are based on the PBMPLUS library, which is: -** -** Copyright (C) 1988 by Jef Poskanzer. -** -** Permission to use, copy, modify, and distribute this software and its -** documentation for any purpose and without fee is hereby granted, provided -** that the above copyright notice appear in all copies and that both that -** copyright notice and this permission notice appear in supporting -** documentation. This software is provided "as is" without express or -** implied warranty. -*/ - - -/* Macros to deal with unsigned chars as efficiently as compiler allows */ - -#ifdef HAVE_UNSIGNED_CHAR -typedef unsigned char U_CHAR; -#define UCH(x) ((int) (x)) -#else /* !HAVE_UNSIGNED_CHAR */ -#ifdef CHAR_IS_UNSIGNED -typedef char U_CHAR; -#define UCH(x) ((int) (x)) -#else -typedef char U_CHAR; -#define UCH(x) ((int) (x) & 0xFF) -#endif -#endif /* HAVE_UNSIGNED_CHAR */ - - -#define ReadOK(file,buffer,len) (JFREAD(file,buffer,len) == ((size_t) (len))) - - -/* - * On most systems, reading individual bytes with getc() is drastically less - * efficient than buffering a row at a time with fread(). On PCs, we must - * allocate the buffer in near data space, because we are assuming small-data - * memory model, wherein fread() can't reach far memory. If you need to - * process very wide images on a PC, you might have to compile in large-memory - * model, or else replace fread() with a getc() loop --- which will be much - * slower. - */ - - -/* Private version of data source object */ - -typedef struct { - struct cjpeg_source_struct pub; /* public fields */ - - U_CHAR *iobuffer; /* non-FAR pointer to I/O buffer */ - JSAMPROW pixrow; /* FAR pointer to same */ - size_t buffer_width; /* width of I/O buffer */ - JSAMPLE *rescale; /* => maxval-remapping array, or NULL */ -} ppm_source_struct; - -typedef ppm_source_struct * ppm_source_ptr; - - -LOCAL(int) -pbm_getc (FILE * infile) -/* Read next char, skipping over any comments */ -/* A comment/newline sequence is returned as a newline */ -{ - register int ch; - - ch = getc(infile); - if (ch == '#') { - do { - ch = getc(infile); - } while (ch != '\n' && ch != EOF); - } - return ch; -} - - -LOCAL(unsigned int) -read_pbm_integer (j_compress_ptr cinfo, FILE * infile) -/* Read an unsigned decimal integer from the PPM file */ -/* Swallows one trailing character after the integer */ -/* Note that on a 16-bit-int machine, only values up to 64k can be read. */ -/* This should not be a problem in practice. */ -{ - register int ch; - register unsigned int val; - - /* Skip any leading whitespace */ - do { - ch = pbm_getc(infile); - if (ch == EOF) - ERREXIT(cinfo, JERR_INPUT_EOF); - } while (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r'); - - if (ch < '0' || ch > '9') - ERREXIT(cinfo, JERR_PPM_NONNUMERIC); - - val = ch - '0'; - while ((ch = pbm_getc(infile)) >= '0' && ch <= '9') { - val *= 10; - val += ch - '0'; - } - return val; -} - - -/* - * Read one row of pixels. - * - * We provide several different versions depending on input file format. - * In all cases, input is scaled to the size of JSAMPLE. - * - * A really fast path is provided for reading byte/sample raw files with - * maxval = MAXJSAMPLE, which is the normal case for 8-bit data. - */ - - -METHODDEF(JDIMENSION) -get_text_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading text-format PGM files with any maxval */ -{ - ppm_source_ptr source = (ppm_source_ptr) sinfo; - FILE * infile = source->pub.input_file; - register JSAMPROW ptr; - register JSAMPLE *rescale = source->rescale; - JDIMENSION col; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; - } - return 1; -} - - -METHODDEF(JDIMENSION) -get_text_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading text-format PPM files with any maxval */ -{ - ppm_source_ptr source = (ppm_source_ptr) sinfo; - FILE * infile = source->pub.input_file; - register JSAMPROW ptr; - register JSAMPLE *rescale = source->rescale; - JDIMENSION col; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; - *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; - *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; - } - return 1; -} - - -METHODDEF(JDIMENSION) -get_scaled_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading raw-byte-format PGM files with any maxval */ -{ - ppm_source_ptr source = (ppm_source_ptr) sinfo; - register JSAMPROW ptr; - register U_CHAR * bufferptr; - register JSAMPLE *rescale = source->rescale; - JDIMENSION col; - - if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) - ERREXIT(cinfo, JERR_INPUT_EOF); - ptr = source->pub.buffer[0]; - bufferptr = source->iobuffer; - for (col = cinfo->image_width; col > 0; col--) { - *ptr++ = rescale[UCH(*bufferptr++)]; - } - return 1; -} - - -METHODDEF(JDIMENSION) -get_scaled_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading raw-byte-format PPM files with any maxval */ -{ - ppm_source_ptr source = (ppm_source_ptr) sinfo; - register JSAMPROW ptr; - register U_CHAR * bufferptr; - register JSAMPLE *rescale = source->rescale; - JDIMENSION col; - - if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) - ERREXIT(cinfo, JERR_INPUT_EOF); - ptr = source->pub.buffer[0]; - bufferptr = source->iobuffer; - for (col = cinfo->image_width; col > 0; col--) { - *ptr++ = rescale[UCH(*bufferptr++)]; - *ptr++ = rescale[UCH(*bufferptr++)]; - *ptr++ = rescale[UCH(*bufferptr++)]; - } - return 1; -} - - -METHODDEF(JDIMENSION) -get_raw_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading raw-byte-format files with maxval = MAXJSAMPLE. - * In this case we just read right into the JSAMPLE buffer! - * Note that same code works for PPM and PGM files. - */ -{ - ppm_source_ptr source = (ppm_source_ptr) sinfo; - - if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) - ERREXIT(cinfo, JERR_INPUT_EOF); - return 1; -} - - -METHODDEF(JDIMENSION) -get_word_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading raw-word-format PGM files with any maxval */ -{ - ppm_source_ptr source = (ppm_source_ptr) sinfo; - register JSAMPROW ptr; - register U_CHAR * bufferptr; - register JSAMPLE *rescale = source->rescale; - JDIMENSION col; - - if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) - ERREXIT(cinfo, JERR_INPUT_EOF); - ptr = source->pub.buffer[0]; - bufferptr = source->iobuffer; - for (col = cinfo->image_width; col > 0; col--) { - register int temp; - temp = UCH(*bufferptr++); - temp |= UCH(*bufferptr++) << 8; - *ptr++ = rescale[temp]; - } - return 1; -} - - -METHODDEF(JDIMENSION) -get_word_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading raw-word-format PPM files with any maxval */ -{ - ppm_source_ptr source = (ppm_source_ptr) sinfo; - register JSAMPROW ptr; - register U_CHAR * bufferptr; - register JSAMPLE *rescale = source->rescale; - JDIMENSION col; - - if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) - ERREXIT(cinfo, JERR_INPUT_EOF); - ptr = source->pub.buffer[0]; - bufferptr = source->iobuffer; - for (col = cinfo->image_width; col > 0; col--) { - register int temp; - temp = UCH(*bufferptr++); - temp |= UCH(*bufferptr++) << 8; - *ptr++ = rescale[temp]; - temp = UCH(*bufferptr++); - temp |= UCH(*bufferptr++) << 8; - *ptr++ = rescale[temp]; - temp = UCH(*bufferptr++); - temp |= UCH(*bufferptr++) << 8; - *ptr++ = rescale[temp]; - } - return 1; -} - - -/* - * Read the file header; return image size and component count. - */ - -METHODDEF(void) -start_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - ppm_source_ptr source = (ppm_source_ptr) sinfo; - int c; - unsigned int w, h, maxval; - boolean need_iobuffer, use_raw_buffer, need_rescale; - - if (getc(source->pub.input_file) != 'P') - ERREXIT(cinfo, JERR_PPM_NOT); - - c = getc(source->pub.input_file); /* subformat discriminator character */ - - /* detect unsupported variants (ie, PBM) before trying to read header */ - switch (c) { - case '2': /* it's a text-format PGM file */ - case '3': /* it's a text-format PPM file */ - case '5': /* it's a raw-format PGM file */ - case '6': /* it's a raw-format PPM file */ - break; - default: - ERREXIT(cinfo, JERR_PPM_NOT); - break; - } - - /* fetch the remaining header info */ - w = read_pbm_integer(cinfo, source->pub.input_file); - h = read_pbm_integer(cinfo, source->pub.input_file); - maxval = read_pbm_integer(cinfo, source->pub.input_file); - - if (w <= 0 || h <= 0 || maxval <= 0) /* error check */ - ERREXIT(cinfo, JERR_PPM_NOT); - - cinfo->data_precision = BITS_IN_JSAMPLE; /* we always rescale data to this */ - cinfo->image_width = (JDIMENSION) w; - cinfo->image_height = (JDIMENSION) h; - - /* initialize flags to most common settings */ - need_iobuffer = TRUE; /* do we need an I/O buffer? */ - use_raw_buffer = FALSE; /* do we map input buffer onto I/O buffer? */ - need_rescale = TRUE; /* do we need a rescale array? */ - - switch (c) { - case '2': /* it's a text-format PGM file */ - cinfo->input_components = 1; - cinfo->in_color_space = JCS_GRAYSCALE; - TRACEMS2(cinfo, 1, JTRC_PGM_TEXT, w, h); - source->pub.get_pixel_rows = get_text_gray_row; - need_iobuffer = FALSE; - break; - - case '3': /* it's a text-format PPM file */ - cinfo->input_components = 3; - cinfo->in_color_space = JCS_RGB; - TRACEMS2(cinfo, 1, JTRC_PPM_TEXT, w, h); - source->pub.get_pixel_rows = get_text_rgb_row; - need_iobuffer = FALSE; - break; - - case '5': /* it's a raw-format PGM file */ - cinfo->input_components = 1; - cinfo->in_color_space = JCS_GRAYSCALE; - TRACEMS2(cinfo, 1, JTRC_PGM, w, h); - if (maxval > 255) { - source->pub.get_pixel_rows = get_word_gray_row; - } else if (maxval == MAXJSAMPLE && SIZEOF(JSAMPLE) == SIZEOF(U_CHAR)) { - source->pub.get_pixel_rows = get_raw_row; - use_raw_buffer = TRUE; - need_rescale = FALSE; - } else { - source->pub.get_pixel_rows = get_scaled_gray_row; - } - break; - - case '6': /* it's a raw-format PPM file */ - cinfo->input_components = 3; - cinfo->in_color_space = JCS_RGB; - TRACEMS2(cinfo, 1, JTRC_PPM, w, h); - if (maxval > 255) { - source->pub.get_pixel_rows = get_word_rgb_row; - } else if (maxval == MAXJSAMPLE && SIZEOF(JSAMPLE) == SIZEOF(U_CHAR)) { - source->pub.get_pixel_rows = get_raw_row; - use_raw_buffer = TRUE; - need_rescale = FALSE; - } else { - source->pub.get_pixel_rows = get_scaled_rgb_row; - } - break; - } - - /* Allocate space for I/O buffer: 1 or 3 bytes or words/pixel. */ - if (need_iobuffer) { - source->buffer_width = (size_t) w * cinfo->input_components * - ((maxval<=255) ? SIZEOF(U_CHAR) : (2*SIZEOF(U_CHAR))); - source->iobuffer = (U_CHAR *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - source->buffer_width); - } - - /* Create compressor input buffer. */ - if (use_raw_buffer) { - /* For unscaled raw-input case, we can just map it onto the I/O buffer. */ - /* Synthesize a JSAMPARRAY pointer structure */ - /* Cast here implies near->far pointer conversion on PCs */ - source->pixrow = (JSAMPROW) source->iobuffer; - source->pub.buffer = & source->pixrow; - source->pub.buffer_height = 1; - } else { - /* Need to translate anyway, so make a separate sample buffer. */ - source->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) w * cinfo->input_components, (JDIMENSION) 1); - source->pub.buffer_height = 1; - } - - /* Compute the rescaling array if required. */ - if (need_rescale) { - INT32 val, half_maxval; - - /* On 16-bit-int machines we have to be careful of maxval = 65535 */ - source->rescale = (JSAMPLE *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) (((long) maxval + 1L) * SIZEOF(JSAMPLE))); - half_maxval = maxval / 2; - for (val = 0; val <= (INT32) maxval; val++) { - /* The multiplication here must be done in 32 bits to avoid overflow */ - source->rescale[val] = (JSAMPLE) ((val*MAXJSAMPLE + half_maxval)/maxval); - } - } -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF(void) -finish_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - /* no work */ -} - - -/* - * The module selection routine for PPM format input. - */ - -GLOBAL(cjpeg_source_ptr) -jinit_read_ppm (j_compress_ptr cinfo) -{ - ppm_source_ptr source; - - /* Create module interface object */ - source = (ppm_source_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(ppm_source_struct)); - /* Fill in method ptrs, except get_pixel_rows which start_input sets */ - source->pub.start_input = start_input_ppm; - source->pub.finish_input = finish_input_ppm; - - return (cjpeg_source_ptr) source; -} - -#endif /* PPM_SUPPORTED */ diff --git a/Build/source/libs/jpeg/rdrle.c b/Build/source/libs/jpeg/rdrle.c deleted file mode 100644 index 542bc37490c..00000000000 --- a/Build/source/libs/jpeg/rdrle.c +++ /dev/null @@ -1,387 +0,0 @@ -/* - * rdrle.c - * - * Copyright (C) 1991-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to read input images in Utah RLE format. - * The Utah Raster Toolkit library is required (version 3.1 or later). - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume input from - * an ordinary stdio stream. They further assume that reading begins - * at the start of the file; start_input may need work if the - * user interface has already read some data (e.g., to determine that - * the file is indeed RLE format). - * - * Based on code contributed by Mike Lijewski, - * with updates from Robert Hutchinson. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef RLE_SUPPORTED - -/* rle.h is provided by the Utah Raster Toolkit. */ - -#include - -/* - * We assume that JSAMPLE has the same representation as rle_pixel, - * to wit, "unsigned char". Hence we can't cope with 12- or 16-bit samples. - */ - -#if BITS_IN_JSAMPLE != 8 - Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ -#endif - -/* - * We support the following types of RLE files: - * - * GRAYSCALE - 8 bits, no colormap - * MAPPEDGRAY - 8 bits, 1 channel colomap - * PSEUDOCOLOR - 8 bits, 3 channel colormap - * TRUECOLOR - 24 bits, 3 channel colormap - * DIRECTCOLOR - 24 bits, no colormap - * - * For now, we ignore any alpha channel in the image. - */ - -typedef enum - { GRAYSCALE, MAPPEDGRAY, PSEUDOCOLOR, TRUECOLOR, DIRECTCOLOR } rle_kind; - - -/* - * Since RLE stores scanlines bottom-to-top, we have to invert the image - * to conform to JPEG's top-to-bottom order. To do this, we read the - * incoming image into a virtual array on the first get_pixel_rows call, - * then fetch the required row from the virtual array on subsequent calls. - */ - -typedef struct _rle_source_struct * rle_source_ptr; - -typedef struct _rle_source_struct { - struct cjpeg_source_struct pub; /* public fields */ - - rle_kind visual; /* actual type of input file */ - jvirt_sarray_ptr image; /* virtual array to hold the image */ - JDIMENSION row; /* current row # in the virtual array */ - rle_hdr header; /* Input file information */ - rle_pixel** rle_row; /* holds a row returned by rle_getrow() */ - -} rle_source_struct; - - -/* - * Read the file header; return image size and component count. - */ - -METHODDEF(void) -start_input_rle (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - rle_source_ptr source = (rle_source_ptr) sinfo; - JDIMENSION width, height; -#ifdef PROGRESS_REPORT - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; -#endif - - /* Use RLE library routine to get the header info */ - source->header = *rle_hdr_init(NULL); - source->header.rle_file = source->pub.input_file; - switch (rle_get_setup(&(source->header))) { - case RLE_SUCCESS: - /* A-OK */ - break; - case RLE_NOT_RLE: - ERREXIT(cinfo, JERR_RLE_NOT); - break; - case RLE_NO_SPACE: - ERREXIT(cinfo, JERR_RLE_MEM); - break; - case RLE_EMPTY: - ERREXIT(cinfo, JERR_RLE_EMPTY); - break; - case RLE_EOF: - ERREXIT(cinfo, JERR_RLE_EOF); - break; - default: - ERREXIT(cinfo, JERR_RLE_BADERROR); - break; - } - - /* Figure out what we have, set private vars and return values accordingly */ - - width = source->header.xmax - source->header.xmin + 1; - height = source->header.ymax - source->header.ymin + 1; - source->header.xmin = 0; /* realign horizontally */ - source->header.xmax = width-1; - - cinfo->image_width = width; - cinfo->image_height = height; - cinfo->data_precision = 8; /* we can only handle 8 bit data */ - - if (source->header.ncolors == 1 && source->header.ncmap == 0) { - source->visual = GRAYSCALE; - TRACEMS2(cinfo, 1, JTRC_RLE_GRAY, width, height); - } else if (source->header.ncolors == 1 && source->header.ncmap == 1) { - source->visual = MAPPEDGRAY; - TRACEMS3(cinfo, 1, JTRC_RLE_MAPGRAY, width, height, - 1 << source->header.cmaplen); - } else if (source->header.ncolors == 1 && source->header.ncmap == 3) { - source->visual = PSEUDOCOLOR; - TRACEMS3(cinfo, 1, JTRC_RLE_MAPPED, width, height, - 1 << source->header.cmaplen); - } else if (source->header.ncolors == 3 && source->header.ncmap == 3) { - source->visual = TRUECOLOR; - TRACEMS3(cinfo, 1, JTRC_RLE_FULLMAP, width, height, - 1 << source->header.cmaplen); - } else if (source->header.ncolors == 3 && source->header.ncmap == 0) { - source->visual = DIRECTCOLOR; - TRACEMS2(cinfo, 1, JTRC_RLE, width, height); - } else - ERREXIT(cinfo, JERR_RLE_UNSUPPORTED); - - if (source->visual == GRAYSCALE || source->visual == MAPPEDGRAY) { - cinfo->in_color_space = JCS_GRAYSCALE; - cinfo->input_components = 1; - } else { - cinfo->in_color_space = JCS_RGB; - cinfo->input_components = 3; - } - - /* - * A place to hold each scanline while it's converted. - * (GRAYSCALE scanlines don't need converting) - */ - if (source->visual != GRAYSCALE) { - source->rle_row = (rle_pixel**) (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) width, (JDIMENSION) cinfo->input_components); - } - - /* request a virtual array to hold the image */ - source->image = (*cinfo->mem->request_virt_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, - (JDIMENSION) (width * source->header.ncolors), - (JDIMENSION) height, (JDIMENSION) 1); - -#ifdef PROGRESS_REPORT - if (progress != NULL) { - /* count file input as separate pass */ - progress->total_extra_passes++; - } -#endif - - source->pub.buffer_height = 1; -} - - -/* - * Read one row of pixels. - * Called only after load_image has read the image into the virtual array. - * Used for GRAYSCALE, MAPPEDGRAY, TRUECOLOR, and DIRECTCOLOR images. - */ - -METHODDEF(JDIMENSION) -get_rle_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - rle_source_ptr source = (rle_source_ptr) sinfo; - - source->row--; - source->pub.buffer = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->image, source->row, (JDIMENSION) 1, FALSE); - - return 1; -} - -/* - * Read one row of pixels. - * Called only after load_image has read the image into the virtual array. - * Used for PSEUDOCOLOR images. - */ - -METHODDEF(JDIMENSION) -get_pseudocolor_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - rle_source_ptr source = (rle_source_ptr) sinfo; - JSAMPROW src_row, dest_row; - JDIMENSION col; - rle_map *colormap; - int val; - - colormap = source->header.cmap; - dest_row = source->pub.buffer[0]; - source->row--; - src_row = * (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->image, source->row, (JDIMENSION) 1, FALSE); - - for (col = cinfo->image_width; col > 0; col--) { - val = GETJSAMPLE(*src_row++); - *dest_row++ = (JSAMPLE) (colormap[val ] >> 8); - *dest_row++ = (JSAMPLE) (colormap[val + 256] >> 8); - *dest_row++ = (JSAMPLE) (colormap[val + 512] >> 8); - } - - return 1; -} - - -/* - * Load the image into a virtual array. We have to do this because RLE - * files start at the lower left while the JPEG standard has them starting - * in the upper left. This is called the first time we want to get a row - * of input. What we do is load the RLE data into the array and then call - * the appropriate routine to read one row from the array. Before returning, - * we set source->pub.get_pixel_rows so that subsequent calls go straight to - * the appropriate row-reading routine. - */ - -METHODDEF(JDIMENSION) -load_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - rle_source_ptr source = (rle_source_ptr) sinfo; - JDIMENSION row, col; - JSAMPROW scanline, red_ptr, green_ptr, blue_ptr; - rle_pixel **rle_row; - rle_map *colormap; - char channel; -#ifdef PROGRESS_REPORT - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; -#endif - - colormap = source->header.cmap; - rle_row = source->rle_row; - - /* Read the RLE data into our virtual array. - * We assume here that (a) rle_pixel is represented the same as JSAMPLE, - * and (b) we are not on a machine where FAR pointers differ from regular. - */ - RLE_CLR_BIT(source->header, RLE_ALPHA); /* don't read the alpha channel */ - -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->pub.pass_limit = cinfo->image_height; - progress->pub.pass_counter = 0; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } -#endif - - switch (source->visual) { - - case GRAYSCALE: - case PSEUDOCOLOR: - for (row = 0; row < cinfo->image_height; row++) { - rle_row = (rle_pixel **) (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->image, row, (JDIMENSION) 1, TRUE); - rle_getrow(&source->header, rle_row); -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->pub.pass_counter++; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } -#endif - } - break; - - case MAPPEDGRAY: - case TRUECOLOR: - for (row = 0; row < cinfo->image_height; row++) { - scanline = * (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->image, row, (JDIMENSION) 1, TRUE); - rle_row = source->rle_row; - rle_getrow(&source->header, rle_row); - - for (col = 0; col < cinfo->image_width; col++) { - for (channel = 0; channel < source->header.ncolors; channel++) { - *scanline++ = (JSAMPLE) - (colormap[GETJSAMPLE(rle_row[channel][col]) + 256 * channel] >> 8); - } - } - -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->pub.pass_counter++; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } -#endif - } - break; - - case DIRECTCOLOR: - for (row = 0; row < cinfo->image_height; row++) { - scanline = * (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->image, row, (JDIMENSION) 1, TRUE); - rle_getrow(&source->header, rle_row); - - red_ptr = rle_row[0]; - green_ptr = rle_row[1]; - blue_ptr = rle_row[2]; - - for (col = cinfo->image_width; col > 0; col--) { - *scanline++ = *red_ptr++; - *scanline++ = *green_ptr++; - *scanline++ = *blue_ptr++; - } - -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->pub.pass_counter++; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } -#endif - } - } - -#ifdef PROGRESS_REPORT - if (progress != NULL) - progress->completed_extra_passes++; -#endif - - /* Set up to call proper row-extraction routine in future */ - if (source->visual == PSEUDOCOLOR) { - source->pub.buffer = source->rle_row; - source->pub.get_pixel_rows = get_pseudocolor_row; - } else { - source->pub.get_pixel_rows = get_rle_row; - } - source->row = cinfo->image_height; - - /* And fetch the topmost (bottommost) row */ - return (*source->pub.get_pixel_rows) (cinfo, sinfo); -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF(void) -finish_input_rle (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - /* no work */ -} - - -/* - * The module selection routine for RLE format input. - */ - -GLOBAL(cjpeg_source_ptr) -jinit_read_rle (j_compress_ptr cinfo) -{ - rle_source_ptr source; - - /* Create module interface object */ - source = (rle_source_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(rle_source_struct)); - /* Fill in method ptrs */ - source->pub.start_input = start_input_rle; - source->pub.finish_input = finish_input_rle; - source->pub.get_pixel_rows = load_image; - - return (cjpeg_source_ptr) source; -} - -#endif /* RLE_SUPPORTED */ diff --git a/Build/source/libs/jpeg/rdswitch.c b/Build/source/libs/jpeg/rdswitch.c deleted file mode 100644 index 4f4bb4f5899..00000000000 --- a/Build/source/libs/jpeg/rdswitch.c +++ /dev/null @@ -1,332 +0,0 @@ -/* - * rdswitch.c - * - * Copyright (C) 1991-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to process some of cjpeg's more complicated - * command-line switches. Switches processed here are: - * -qtables file Read quantization tables from text file - * -scans file Read scan script from text file - * -qslots N[,N,...] Set component quantization table selectors - * -sample HxV[,HxV,...] Set component sampling factors - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ -#include /* to declare isdigit(), isspace() */ - - -LOCAL(int) -text_getc (FILE * file) -/* Read next char, skipping over any comments (# to end of line) */ -/* A comment/newline sequence is returned as a newline */ -{ - register int ch; - - ch = getc(file); - if (ch == '#') { - do { - ch = getc(file); - } while (ch != '\n' && ch != EOF); - } - return ch; -} - - -LOCAL(boolean) -read_text_integer (FILE * file, long * result, int * termchar) -/* Read an unsigned decimal integer from a file, store it in result */ -/* Reads one trailing character after the integer; returns it in termchar */ -{ - register int ch; - register long val; - - /* Skip any leading whitespace, detect EOF */ - do { - ch = text_getc(file); - if (ch == EOF) { - *termchar = ch; - return FALSE; - } - } while (isspace(ch)); - - if (! isdigit(ch)) { - *termchar = ch; - return FALSE; - } - - val = ch - '0'; - while ((ch = text_getc(file)) != EOF) { - if (! isdigit(ch)) - break; - val *= 10; - val += ch - '0'; - } - *result = val; - *termchar = ch; - return TRUE; -} - - -GLOBAL(boolean) -read_quant_tables (j_compress_ptr cinfo, char * filename, - int scale_factor, boolean force_baseline) -/* Read a set of quantization tables from the specified file. - * The file is plain ASCII text: decimal numbers with whitespace between. - * Comments preceded by '#' may be included in the file. - * There may be one to NUM_QUANT_TBLS tables in the file, each of 64 values. - * The tables are implicitly numbered 0,1,etc. - * NOTE: does not affect the qslots mapping, which will default to selecting - * table 0 for luminance (or primary) components, 1 for chrominance components. - * You must use -qslots if you want a different component->table mapping. - */ -{ - FILE * fp; - int tblno, i, termchar; - long val; - unsigned int table[DCTSIZE2]; - - if ((fp = fopen(filename, "r")) == NULL) { - fprintf(stderr, "Can't open table file %s\n", filename); - return FALSE; - } - tblno = 0; - - while (read_text_integer(fp, &val, &termchar)) { /* read 1st element of table */ - if (tblno >= NUM_QUANT_TBLS) { - fprintf(stderr, "Too many tables in file %s\n", filename); - fclose(fp); - return FALSE; - } - table[0] = (unsigned int) val; - for (i = 1; i < DCTSIZE2; i++) { - if (! read_text_integer(fp, &val, &termchar)) { - fprintf(stderr, "Invalid table data in file %s\n", filename); - fclose(fp); - return FALSE; - } - table[i] = (unsigned int) val; - } - jpeg_add_quant_table(cinfo, tblno, table, scale_factor, force_baseline); - tblno++; - } - - if (termchar != EOF) { - fprintf(stderr, "Non-numeric data in file %s\n", filename); - fclose(fp); - return FALSE; - } - - fclose(fp); - return TRUE; -} - - -#ifdef C_MULTISCAN_FILES_SUPPORTED - -LOCAL(boolean) -read_scan_integer (FILE * file, long * result, int * termchar) -/* Variant of read_text_integer that always looks for a non-space termchar; - * this simplifies parsing of punctuation in scan scripts. - */ -{ - register int ch; - - if (! read_text_integer(file, result, termchar)) - return FALSE; - ch = *termchar; - while (ch != EOF && isspace(ch)) - ch = text_getc(file); - if (isdigit(ch)) { /* oops, put it back */ - if (ungetc(ch, file) == EOF) - return FALSE; - ch = ' '; - } else { - /* Any separators other than ';' and ':' are ignored; - * this allows user to insert commas, etc, if desired. - */ - if (ch != EOF && ch != ';' && ch != ':') - ch = ' '; - } - *termchar = ch; - return TRUE; -} - - -GLOBAL(boolean) -read_scan_script (j_compress_ptr cinfo, char * filename) -/* Read a scan script from the specified text file. - * Each entry in the file defines one scan to be emitted. - * Entries are separated by semicolons ';'. - * An entry contains one to four component indexes, - * optionally followed by a colon ':' and four progressive-JPEG parameters. - * The component indexes denote which component(s) are to be transmitted - * in the current scan. The first component has index 0. - * Sequential JPEG is used if the progressive-JPEG parameters are omitted. - * The file is free format text: any whitespace may appear between numbers - * and the ':' and ';' punctuation marks. Also, other punctuation (such - * as commas or dashes) can be placed between numbers if desired. - * Comments preceded by '#' may be included in the file. - * Note: we do very little validity checking here; - * jcmaster.c will validate the script parameters. - */ -{ - FILE * fp; - int scanno, ncomps, termchar; - long val; - jpeg_scan_info * scanptr; -#define MAX_SCANS 100 /* quite arbitrary limit */ - jpeg_scan_info scans[MAX_SCANS]; - - if ((fp = fopen(filename, "r")) == NULL) { - fprintf(stderr, "Can't open scan definition file %s\n", filename); - return FALSE; - } - scanptr = scans; - scanno = 0; - - while (read_scan_integer(fp, &val, &termchar)) { - if (scanno >= MAX_SCANS) { - fprintf(stderr, "Too many scans defined in file %s\n", filename); - fclose(fp); - return FALSE; - } - scanptr->component_index[0] = (int) val; - ncomps = 1; - while (termchar == ' ') { - if (ncomps >= MAX_COMPS_IN_SCAN) { - fprintf(stderr, "Too many components in one scan in file %s\n", - filename); - fclose(fp); - return FALSE; - } - if (! read_scan_integer(fp, &val, &termchar)) - goto bogus; - scanptr->component_index[ncomps] = (int) val; - ncomps++; - } - scanptr->comps_in_scan = ncomps; - if (termchar == ':') { - if (! read_scan_integer(fp, &val, &termchar) || termchar != ' ') - goto bogus; - scanptr->Ss = (int) val; - if (! read_scan_integer(fp, &val, &termchar) || termchar != ' ') - goto bogus; - scanptr->Se = (int) val; - if (! read_scan_integer(fp, &val, &termchar) || termchar != ' ') - goto bogus; - scanptr->Ah = (int) val; - if (! read_scan_integer(fp, &val, &termchar)) - goto bogus; - scanptr->Al = (int) val; - } else { - /* set non-progressive parameters */ - scanptr->Ss = 0; - scanptr->Se = DCTSIZE2-1; - scanptr->Ah = 0; - scanptr->Al = 0; - } - if (termchar != ';' && termchar != EOF) { -bogus: - fprintf(stderr, "Invalid scan entry format in file %s\n", filename); - fclose(fp); - return FALSE; - } - scanptr++, scanno++; - } - - if (termchar != EOF) { - fprintf(stderr, "Non-numeric data in file %s\n", filename); - fclose(fp); - return FALSE; - } - - if (scanno > 0) { - /* Stash completed scan list in cinfo structure. - * NOTE: for cjpeg's use, JPOOL_IMAGE is the right lifetime for this data, - * but if you want to compress multiple images you'd want JPOOL_PERMANENT. - */ - scanptr = (jpeg_scan_info *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - scanno * SIZEOF(jpeg_scan_info)); - MEMCOPY(scanptr, scans, scanno * SIZEOF(jpeg_scan_info)); - cinfo->scan_info = scanptr; - cinfo->num_scans = scanno; - } - - fclose(fp); - return TRUE; -} - -#endif /* C_MULTISCAN_FILES_SUPPORTED */ - - -GLOBAL(boolean) -set_quant_slots (j_compress_ptr cinfo, char *arg) -/* Process a quantization-table-selectors parameter string, of the form - * N[,N,...] - * If there are more components than parameters, the last value is replicated. - */ -{ - int val = 0; /* default table # */ - int ci; - char ch; - - for (ci = 0; ci < MAX_COMPONENTS; ci++) { - if (*arg) { - ch = ','; /* if not set by sscanf, will be ',' */ - if (sscanf(arg, "%d%c", &val, &ch) < 1) - return FALSE; - if (ch != ',') /* syntax check */ - return FALSE; - if (val < 0 || val >= NUM_QUANT_TBLS) { - fprintf(stderr, "JPEG quantization tables are numbered 0..%d\n", - NUM_QUANT_TBLS-1); - return FALSE; - } - cinfo->comp_info[ci].quant_tbl_no = val; - while (*arg && *arg++ != ',') /* advance to next segment of arg string */ - ; - } else { - /* reached end of parameter, set remaining components to last table */ - cinfo->comp_info[ci].quant_tbl_no = val; - } - } - return TRUE; -} - - -GLOBAL(boolean) -set_sample_factors (j_compress_ptr cinfo, char *arg) -/* Process a sample-factors parameter string, of the form - * HxV[,HxV,...] - * If there are more components than parameters, "1x1" is assumed for the rest. - */ -{ - int ci, val1, val2; - char ch1, ch2; - - for (ci = 0; ci < MAX_COMPONENTS; ci++) { - if (*arg) { - ch2 = ','; /* if not set by sscanf, will be ',' */ - if (sscanf(arg, "%d%c%d%c", &val1, &ch1, &val2, &ch2) < 3) - return FALSE; - if ((ch1 != 'x' && ch1 != 'X') || ch2 != ',') /* syntax check */ - return FALSE; - if (val1 <= 0 || val1 > 4 || val2 <= 0 || val2 > 4) { - fprintf(stderr, "JPEG sampling factors must be 1..4\n"); - return FALSE; - } - cinfo->comp_info[ci].h_samp_factor = val1; - cinfo->comp_info[ci].v_samp_factor = val2; - while (*arg && *arg++ != ',') /* advance to next segment of arg string */ - ; - } else { - /* reached end of parameter, set remaining components to 1x1 sampling */ - cinfo->comp_info[ci].h_samp_factor = 1; - cinfo->comp_info[ci].v_samp_factor = 1; - } - } - return TRUE; -} diff --git a/Build/source/libs/jpeg/rdtarga.c b/Build/source/libs/jpeg/rdtarga.c deleted file mode 100644 index 4c2cd26730a..00000000000 --- a/Build/source/libs/jpeg/rdtarga.c +++ /dev/null @@ -1,500 +0,0 @@ -/* - * rdtarga.c - * - * Copyright (C) 1991-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to read input images in Targa format. - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume input from - * an ordinary stdio stream. They further assume that reading begins - * at the start of the file; start_input may need work if the - * user interface has already read some data (e.g., to determine that - * the file is indeed Targa format). - * - * Based on code contributed by Lee Daniel Crocker. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef TARGA_SUPPORTED - - -/* Macros to deal with unsigned chars as efficiently as compiler allows */ - -#ifdef HAVE_UNSIGNED_CHAR -typedef unsigned char U_CHAR; -#define UCH(x) ((int) (x)) -#else /* !HAVE_UNSIGNED_CHAR */ -#ifdef CHAR_IS_UNSIGNED -typedef char U_CHAR; -#define UCH(x) ((int) (x)) -#else -typedef char U_CHAR; -#define UCH(x) ((int) (x) & 0xFF) -#endif -#endif /* HAVE_UNSIGNED_CHAR */ - - -#define ReadOK(file,buffer,len) (JFREAD(file,buffer,len) == ((size_t) (len))) - - -/* Private version of data source object */ - -typedef struct _tga_source_struct * tga_source_ptr; - -typedef struct _tga_source_struct { - struct cjpeg_source_struct pub; /* public fields */ - - j_compress_ptr cinfo; /* back link saves passing separate parm */ - - JSAMPARRAY colormap; /* Targa colormap (converted to my format) */ - - jvirt_sarray_ptr whole_image; /* Needed if funny input row order */ - JDIMENSION current_row; /* Current logical row number to read */ - - /* Pointer to routine to extract next Targa pixel from input file */ - JMETHOD(void, read_pixel, (tga_source_ptr sinfo)); - - /* Result of read_pixel is delivered here: */ - U_CHAR tga_pixel[4]; - - int pixel_size; /* Bytes per Targa pixel (1 to 4) */ - - /* State info for reading RLE-coded pixels; both counts must be init to 0 */ - int block_count; /* # of pixels remaining in RLE block */ - int dup_pixel_count; /* # of times to duplicate previous pixel */ - - /* This saves the correct pixel-row-expansion method for preload_image */ - JMETHOD(JDIMENSION, get_pixel_rows, (j_compress_ptr cinfo, - cjpeg_source_ptr sinfo)); -} tga_source_struct; - - -/* For expanding 5-bit pixel values to 8-bit with best rounding */ - -static const UINT8 c5to8bits[32] = { - 0, 8, 16, 25, 33, 41, 49, 58, - 66, 74, 82, 90, 99, 107, 115, 123, - 132, 140, 148, 156, 165, 173, 181, 189, - 197, 206, 214, 222, 230, 239, 247, 255 -}; - - - -LOCAL(int) -read_byte (tga_source_ptr sinfo) -/* Read next byte from Targa file */ -{ - register FILE *infile = sinfo->pub.input_file; - register int c; - - if ((c = getc(infile)) == EOF) - ERREXIT(sinfo->cinfo, JERR_INPUT_EOF); - return c; -} - - -LOCAL(void) -read_colormap (tga_source_ptr sinfo, int cmaplen, int mapentrysize) -/* Read the colormap from a Targa file */ -{ - int i; - - /* Presently only handles 24-bit BGR format */ - if (mapentrysize != 24) - ERREXIT(sinfo->cinfo, JERR_TGA_BADCMAP); - - for (i = 0; i < cmaplen; i++) { - sinfo->colormap[2][i] = (JSAMPLE) read_byte(sinfo); - sinfo->colormap[1][i] = (JSAMPLE) read_byte(sinfo); - sinfo->colormap[0][i] = (JSAMPLE) read_byte(sinfo); - } -} - - -/* - * read_pixel methods: get a single pixel from Targa file into tga_pixel[] - */ - -METHODDEF(void) -read_non_rle_pixel (tga_source_ptr sinfo) -/* Read one Targa pixel from the input file; no RLE expansion */ -{ - register FILE *infile = sinfo->pub.input_file; - register int i; - - for (i = 0; i < sinfo->pixel_size; i++) { - sinfo->tga_pixel[i] = (U_CHAR) getc(infile); - } -} - - -METHODDEF(void) -read_rle_pixel (tga_source_ptr sinfo) -/* Read one Targa pixel from the input file, expanding RLE data as needed */ -{ - register FILE *infile = sinfo->pub.input_file; - register int i; - - /* Duplicate previously read pixel? */ - if (sinfo->dup_pixel_count > 0) { - sinfo->dup_pixel_count--; - return; - } - - /* Time to read RLE block header? */ - if (--sinfo->block_count < 0) { /* decrement pixels remaining in block */ - i = read_byte(sinfo); - if (i & 0x80) { /* Start of duplicate-pixel block? */ - sinfo->dup_pixel_count = i & 0x7F; /* number of dups after this one */ - sinfo->block_count = 0; /* then read new block header */ - } else { - sinfo->block_count = i & 0x7F; /* number of pixels after this one */ - } - } - - /* Read next pixel */ - for (i = 0; i < sinfo->pixel_size; i++) { - sinfo->tga_pixel[i] = (U_CHAR) getc(infile); - } -} - - -/* - * Read one row of pixels. - * - * We provide several different versions depending on input file format. - */ - - -METHODDEF(JDIMENSION) -get_8bit_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading 8-bit grayscale pixels */ -{ - tga_source_ptr source = (tga_source_ptr) sinfo; - register JSAMPROW ptr; - register JDIMENSION col; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ - *ptr++ = (JSAMPLE) UCH(source->tga_pixel[0]); - } - return 1; -} - -METHODDEF(JDIMENSION) -get_8bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading 8-bit colormap indexes */ -{ - tga_source_ptr source = (tga_source_ptr) sinfo; - register int t; - register JSAMPROW ptr; - register JDIMENSION col; - register JSAMPARRAY colormap = source->colormap; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ - t = UCH(source->tga_pixel[0]); - *ptr++ = colormap[0][t]; - *ptr++ = colormap[1][t]; - *ptr++ = colormap[2][t]; - } - return 1; -} - -METHODDEF(JDIMENSION) -get_16bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading 16-bit pixels */ -{ - tga_source_ptr source = (tga_source_ptr) sinfo; - register int t; - register JSAMPROW ptr; - register JDIMENSION col; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ - t = UCH(source->tga_pixel[0]); - t += UCH(source->tga_pixel[1]) << 8; - /* We expand 5 bit data to 8 bit sample width. - * The format of the 16-bit (LSB first) input word is - * xRRRRRGGGGGBBBBB - */ - ptr[2] = (JSAMPLE) c5to8bits[t & 0x1F]; - t >>= 5; - ptr[1] = (JSAMPLE) c5to8bits[t & 0x1F]; - t >>= 5; - ptr[0] = (JSAMPLE) c5to8bits[t & 0x1F]; - ptr += 3; - } - return 1; -} - -METHODDEF(JDIMENSION) -get_24bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading 24-bit pixels */ -{ - tga_source_ptr source = (tga_source_ptr) sinfo; - register JSAMPROW ptr; - register JDIMENSION col; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ - *ptr++ = (JSAMPLE) UCH(source->tga_pixel[2]); /* change BGR to RGB order */ - *ptr++ = (JSAMPLE) UCH(source->tga_pixel[1]); - *ptr++ = (JSAMPLE) UCH(source->tga_pixel[0]); - } - return 1; -} - -/* - * Targa also defines a 32-bit pixel format with order B,G,R,A. - * We presently ignore the attribute byte, so the code for reading - * these pixels is identical to the 24-bit routine above. - * This works because the actual pixel length is only known to read_pixel. - */ - -#define get_32bit_row get_24bit_row - - -/* - * This method is for re-reading the input data in standard top-down - * row order. The entire image has already been read into whole_image - * with proper conversion of pixel format, but it's in a funny row order. - */ - -METHODDEF(JDIMENSION) -get_memory_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - tga_source_ptr source = (tga_source_ptr) sinfo; - JDIMENSION source_row; - - /* Compute row of source that maps to current_row of normal order */ - /* For now, assume image is bottom-up and not interlaced. */ - /* NEEDS WORK to support interlaced images! */ - source_row = cinfo->image_height - source->current_row - 1; - - /* Fetch that row from virtual array */ - source->pub.buffer = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->whole_image, - source_row, (JDIMENSION) 1, FALSE); - - source->current_row++; - return 1; -} - - -/* - * This method loads the image into whole_image during the first call on - * get_pixel_rows. The get_pixel_rows pointer is then adjusted to call - * get_memory_row on subsequent calls. - */ - -METHODDEF(JDIMENSION) -preload_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - tga_source_ptr source = (tga_source_ptr) sinfo; - JDIMENSION row; - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; - - /* Read the data into a virtual array in input-file row order. */ - for (row = 0; row < cinfo->image_height; row++) { - if (progress != NULL) { - progress->pub.pass_counter = (long) row; - progress->pub.pass_limit = (long) cinfo->image_height; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } - source->pub.buffer = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->whole_image, row, (JDIMENSION) 1, TRUE); - (*source->get_pixel_rows) (cinfo, sinfo); - } - if (progress != NULL) - progress->completed_extra_passes++; - - /* Set up to read from the virtual array in unscrambled order */ - source->pub.get_pixel_rows = get_memory_row; - source->current_row = 0; - /* And read the first row */ - return get_memory_row(cinfo, sinfo); -} - - -/* - * Read the file header; return image size and component count. - */ - -METHODDEF(void) -start_input_tga (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - tga_source_ptr source = (tga_source_ptr) sinfo; - U_CHAR targaheader[18]; - int idlen, cmaptype, subtype, flags, interlace_type, components; - unsigned int width, height, maplen; - boolean is_bottom_up; - -#define GET_2B(offset) ((unsigned int) UCH(targaheader[offset]) + \ - (((unsigned int) UCH(targaheader[offset+1])) << 8)) - - if (! ReadOK(source->pub.input_file, targaheader, 18)) - ERREXIT(cinfo, JERR_INPUT_EOF); - - /* Pretend "15-bit" pixels are 16-bit --- we ignore attribute bit anyway */ - if (targaheader[16] == 15) - targaheader[16] = 16; - - idlen = UCH(targaheader[0]); - cmaptype = UCH(targaheader[1]); - subtype = UCH(targaheader[2]); - maplen = GET_2B(5); - width = GET_2B(12); - height = GET_2B(14); - source->pixel_size = UCH(targaheader[16]) >> 3; - flags = UCH(targaheader[17]); /* Image Descriptor byte */ - - is_bottom_up = ((flags & 0x20) == 0); /* bit 5 set => top-down */ - interlace_type = flags >> 6; /* bits 6/7 are interlace code */ - - if (cmaptype > 1 || /* cmaptype must be 0 or 1 */ - source->pixel_size < 1 || source->pixel_size > 4 || - (UCH(targaheader[16]) & 7) != 0 || /* bits/pixel must be multiple of 8 */ - interlace_type != 0) /* currently don't allow interlaced image */ - ERREXIT(cinfo, JERR_TGA_BADPARMS); - - if (subtype > 8) { - /* It's an RLE-coded file */ - source->read_pixel = read_rle_pixel; - source->block_count = source->dup_pixel_count = 0; - subtype -= 8; - } else { - /* Non-RLE file */ - source->read_pixel = read_non_rle_pixel; - } - - /* Now should have subtype 1, 2, or 3 */ - components = 3; /* until proven different */ - cinfo->in_color_space = JCS_RGB; - - switch (subtype) { - case 1: /* Colormapped image */ - if (source->pixel_size == 1 && cmaptype == 1) - source->get_pixel_rows = get_8bit_row; - else - ERREXIT(cinfo, JERR_TGA_BADPARMS); - TRACEMS2(cinfo, 1, JTRC_TGA_MAPPED, width, height); - break; - case 2: /* RGB image */ - switch (source->pixel_size) { - case 2: - source->get_pixel_rows = get_16bit_row; - break; - case 3: - source->get_pixel_rows = get_24bit_row; - break; - case 4: - source->get_pixel_rows = get_32bit_row; - break; - default: - ERREXIT(cinfo, JERR_TGA_BADPARMS); - break; - } - TRACEMS2(cinfo, 1, JTRC_TGA, width, height); - break; - case 3: /* Grayscale image */ - components = 1; - cinfo->in_color_space = JCS_GRAYSCALE; - if (source->pixel_size == 1) - source->get_pixel_rows = get_8bit_gray_row; - else - ERREXIT(cinfo, JERR_TGA_BADPARMS); - TRACEMS2(cinfo, 1, JTRC_TGA_GRAY, width, height); - break; - default: - ERREXIT(cinfo, JERR_TGA_BADPARMS); - break; - } - - if (is_bottom_up) { - /* Create a virtual array to buffer the upside-down image. */ - source->whole_image = (*cinfo->mem->request_virt_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, - (JDIMENSION) width * components, (JDIMENSION) height, (JDIMENSION) 1); - if (cinfo->progress != NULL) { - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; - progress->total_extra_passes++; /* count file input as separate pass */ - } - /* source->pub.buffer will point to the virtual array. */ - source->pub.buffer_height = 1; /* in case anyone looks at it */ - source->pub.get_pixel_rows = preload_image; - } else { - /* Don't need a virtual array, but do need a one-row input buffer. */ - source->whole_image = NULL; - source->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) width * components, (JDIMENSION) 1); - source->pub.buffer_height = 1; - source->pub.get_pixel_rows = source->get_pixel_rows; - } - - while (idlen--) /* Throw away ID field */ - (void) read_byte(source); - - if (maplen > 0) { - if (maplen > 256 || GET_2B(3) != 0) - ERREXIT(cinfo, JERR_TGA_BADCMAP); - /* Allocate space to store the colormap */ - source->colormap = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, (JDIMENSION) maplen, (JDIMENSION) 3); - /* and read it from the file */ - read_colormap(source, (int) maplen, UCH(targaheader[7])); - } else { - if (cmaptype) /* but you promised a cmap! */ - ERREXIT(cinfo, JERR_TGA_BADPARMS); - source->colormap = NULL; - } - - cinfo->input_components = components; - cinfo->data_precision = 8; - cinfo->image_width = width; - cinfo->image_height = height; -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF(void) -finish_input_tga (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - /* no work */ -} - - -/* - * The module selection routine for Targa format input. - */ - -GLOBAL(cjpeg_source_ptr) -jinit_read_targa (j_compress_ptr cinfo) -{ - tga_source_ptr source; - - /* Create module interface object */ - source = (tga_source_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(tga_source_struct)); - source->cinfo = cinfo; /* make back link for subroutines */ - /* Fill in method ptrs, except get_pixel_rows which start_input sets */ - source->pub.start_input = start_input_tga; - source->pub.finish_input = finish_input_tga; - - return (cjpeg_source_ptr) source; -} - -#endif /* TARGA_SUPPORTED */ diff --git a/Build/source/libs/jpeg/structure.doc b/Build/source/libs/jpeg/structure.doc deleted file mode 100644 index 51c9def7e5d..00000000000 --- a/Build/source/libs/jpeg/structure.doc +++ /dev/null @@ -1,948 +0,0 @@ -IJG JPEG LIBRARY: SYSTEM ARCHITECTURE - -Copyright (C) 1991-1995, Thomas G. Lane. -This file is part of the Independent JPEG Group's software. -For conditions of distribution and use, see the accompanying README file. - - -This file provides an overview of the architecture of the IJG JPEG software; -that is, the functions of the various modules in the system and the interfaces -between modules. For more precise details about any data structure or calling -convention, see the include files and comments in the source code. - -We assume that the reader is already somewhat familiar with the JPEG standard. -The README file includes references for learning about JPEG. The file -libjpeg.doc describes the library from the viewpoint of an application -programmer using the library; it's best to read that file before this one. -Also, the file coderules.doc describes the coding style conventions we use. - -In this document, JPEG-specific terminology follows the JPEG standard: - A "component" means a color channel, e.g., Red or Luminance. - A "sample" is a single component value (i.e., one number in the image data). - A "coefficient" is a frequency coefficient (a DCT transform output number). - A "block" is an 8x8 group of samples or coefficients. - An "MCU" (minimum coded unit) is an interleaved set of blocks of size - determined by the sampling factors, or a single block in a - noninterleaved scan. -We do not use the terms "pixel" and "sample" interchangeably. When we say -pixel, we mean an element of the full-size image, while a sample is an element -of the downsampled image. Thus the number of samples may vary across -components while the number of pixels does not. (This terminology is not used -rigorously throughout the code, but it is used in places where confusion would -otherwise result.) - - -*** System features *** - -The IJG distribution contains two parts: - * A subroutine library for JPEG compression and decompression. - * cjpeg/djpeg, two sample applications that use the library to transform - JFIF JPEG files to and from several other image formats. -cjpeg/djpeg are of no great intellectual complexity: they merely add a simple -command-line user interface and I/O routines for several uncompressed image -formats. This document concentrates on the library itself. - -We desire the library to be capable of supporting all JPEG baseline, extended -sequential, and progressive DCT processes. Hierarchical processes are not -supported. - -The library does not support the lossless (spatial) JPEG process. Lossless -JPEG shares little or no code with lossy JPEG, and would normally be used -without the extensive pre- and post-processing provided by this library. -We feel that lossless JPEG is better handled by a separate library. - -Within these limits, any set of compression parameters allowed by the JPEG -spec should be readable for decompression. (We can be more restrictive about -what formats we can generate.) Although the system design allows for all -parameter values, some uncommon settings are not yet implemented and may -never be; nonintegral sampling ratios are the prime example. Furthermore, -we treat 8-bit vs. 12-bit data precision as a compile-time switch, not a -run-time option, because most machines can store 8-bit pixels much more -compactly than 12-bit. - -For legal reasons, JPEG arithmetic coding is not currently supported, but -extending the library to include it would be straightforward. - -By itself, the library handles only interchange JPEG datastreams --- in -particular the widely used JFIF file format. The library can be used by -surrounding code to process interchange or abbreviated JPEG datastreams that -are embedded in more complex file formats. (For example, libtiff uses this -library to implement JPEG compression within the TIFF file format.) - -The library includes a substantial amount of code that is not covered by the -JPEG standard but is necessary for typical applications of JPEG. These -functions preprocess the image before JPEG compression or postprocess it after -decompression. They include colorspace conversion, downsampling/upsampling, -and color quantization. This code can be omitted if not needed. - -A wide range of quality vs. speed tradeoffs are possible in JPEG processing, -and even more so in decompression postprocessing. The decompression library -provides multiple implementations that cover most of the useful tradeoffs, -ranging from very-high-quality down to fast-preview operation. On the -compression side we have generally not provided low-quality choices, since -compression is normally less time-critical. It should be understood that the -low-quality modes may not meet the JPEG standard's accuracy requirements; -nonetheless, they are useful for viewers. - - -*** Portability issues *** - -Portability is an essential requirement for the library. The key portability -issues that show up at the level of system architecture are: - -1. Memory usage. We want the code to be able to run on PC-class machines -with limited memory. Images should therefore be processed sequentially (in -strips), to avoid holding the whole image in memory at once. Where a -full-image buffer is necessary, we should be able to use either virtual memory -or temporary files. - -2. Near/far pointer distinction. To run efficiently on 80x86 machines, the -code should distinguish "small" objects (kept in near data space) from -"large" ones (kept in far data space). This is an annoying restriction, but -fortunately it does not impact code quality for less brain-damaged machines, -and the source code clutter turns out to be minimal with sufficient use of -pointer typedefs. - -3. Data precision. We assume that "char" is at least 8 bits, "short" and -"int" at least 16, "long" at least 32. The code will work fine with larger -data sizes, although memory may be used inefficiently in some cases. However, -the JPEG compressed datastream must ultimately appear on external storage as a -sequence of 8-bit bytes if it is to conform to the standard. This may pose a -problem on machines where char is wider than 8 bits. The library represents -compressed data as an array of values of typedef JOCTET. If no data type -exactly 8 bits wide is available, custom data source and data destination -modules must be written to unpack and pack the chosen JOCTET datatype into -8-bit external representation. - - -*** System overview *** - -The compressor and decompressor are each divided into two main sections: -the JPEG compressor or decompressor proper, and the preprocessing or -postprocessing functions. The interface between these two sections is the -image data that the official JPEG spec regards as its input or output: this -data is in the colorspace to be used for compression, and it is downsampled -to the sampling factors to be used. The preprocessing and postprocessing -steps are responsible for converting a normal image representation to or from -this form. (Those few applications that want to deal with YCbCr downsampled -data can skip the preprocessing or postprocessing step.) - -Looking more closely, the compressor library contains the following main -elements: - - Preprocessing: - * Color space conversion (e.g., RGB to YCbCr). - * Edge expansion and downsampling. Optionally, this step can do simple - smoothing --- this is often helpful for low-quality source data. - JPEG proper: - * MCU assembly, DCT, quantization. - * Entropy coding (sequential or progressive, Huffman or arithmetic). - -In addition to these modules we need overall control, marker generation, -and support code (memory management & error handling). There is also a -module responsible for physically writing the output data --- typically -this is just an interface to fwrite(), but some applications may need to -do something else with the data. - -The decompressor library contains the following main elements: - - JPEG proper: - * Entropy decoding (sequential or progressive, Huffman or arithmetic). - * Dequantization, inverse DCT, MCU disassembly. - Postprocessing: - * Upsampling. Optionally, this step may be able to do more general - rescaling of the image. - * Color space conversion (e.g., YCbCr to RGB). This step may also - provide gamma adjustment [ currently it does not ]. - * Optional color quantization (e.g., reduction to 256 colors). - * Optional color precision reduction (e.g., 24-bit to 15-bit color). - [This feature is not currently implemented.] - -We also need overall control, marker parsing, and a data source module. -The support code (memory management & error handling) can be shared with -the compression half of the library. - -There may be several implementations of each of these elements, particularly -in the decompressor, where a wide range of speed/quality tradeoffs is very -useful. It must be understood that some of the best speedups involve -merging adjacent steps in the pipeline. For example, upsampling, color space -conversion, and color quantization might all be done at once when using a -low-quality ordered-dither technique. The system architecture is designed to -allow such merging where appropriate. - - -Note: it is convenient to regard edge expansion (padding to block boundaries) -as a preprocessing/postprocessing function, even though the JPEG spec includes -it in compression/decompression. We do this because downsampling/upsampling -can be simplified a little if they work on padded data: it's not necessary to -have special cases at the right and bottom edges. Therefore the interface -buffer is always an integral number of blocks wide and high, and we expect -compression preprocessing to pad the source data properly. Padding will occur -only to the next block (8-sample) boundary. In an interleaved-scan situation, -additional dummy blocks may be used to fill out MCUs, but the MCU assembly and -disassembly logic will create or discard these blocks internally. (This is -advantageous for speed reasons, since we avoid DCTing the dummy blocks. -It also permits a small reduction in file size, because the compressor can -choose dummy block contents so as to minimize their size in compressed form. -Finally, it makes the interface buffer specification independent of whether -the file is actually interleaved or not.) Applications that wish to deal -directly with the downsampled data must provide similar buffering and padding -for odd-sized images. - - -*** Poor man's object-oriented programming *** - -It should be clear by now that we have a lot of quasi-independent processing -steps, many of which have several possible behaviors. To avoid cluttering the -code with lots of switch statements, we use a simple form of object-style -programming to separate out the different possibilities. - -For example, two different color quantization algorithms could be implemented -as two separate modules that present the same external interface; at runtime, -the calling code will access the proper module indirectly through an "object". - -We can get the limited features we need while staying within portable C. -The basic tool is a function pointer. An "object" is just a struct -containing one or more function pointer fields, each of which corresponds to -a method name in real object-oriented languages. During initialization we -fill in the function pointers with references to whichever module we have -determined we need to use in this run. Then invocation of the module is done -by indirecting through a function pointer; on most machines this is no more -expensive than a switch statement, which would be the only other way of -making the required run-time choice. The really significant benefit, of -course, is keeping the source code clean and well structured. - -We can also arrange to have private storage that varies between different -implementations of the same kind of object. We do this by making all the -module-specific object structs be separately allocated entities, which will -be accessed via pointers in the master compression or decompression struct. -The "public" fields or methods for a given kind of object are specified by -a commonly known struct. But a module's initialization code can allocate -a larger struct that contains the common struct as its first member, plus -additional private fields. With appropriate pointer casting, the module's -internal functions can access these private fields. (For a simple example, -see jdatadst.c, which implements the external interface specified by struct -jpeg_destination_mgr, but adds extra fields.) - -(Of course this would all be a lot easier if we were using C++, but we are -not yet prepared to assume that everyone has a C++ compiler.) - -An important benefit of this scheme is that it is easy to provide multiple -versions of any method, each tuned to a particular case. While a lot of -precalculation might be done to select an optimal implementation of a method, -the cost per invocation is constant. For example, the upsampling step might -have a "generic" method, plus one or more "hardwired" methods for the most -popular sampling factors; the hardwired methods would be faster because they'd -use straight-line code instead of for-loops. The cost to determine which -method to use is paid only once, at startup, and the selection criteria are -hidden from the callers of the method. - -This plan differs a little bit from usual object-oriented structures, in that -only one instance of each object class will exist during execution. The -reason for having the class structure is that on different runs we may create -different instances (choose to execute different modules). You can think of -the term "method" as denoting the common interface presented by a particular -set of interchangeable functions, and "object" as denoting a group of related -methods, or the total shared interface behavior of a group of modules. - - -*** Overall control structure *** - -We previously mentioned the need for overall control logic in the compression -and decompression libraries. In IJG implementations prior to v5, overall -control was mostly provided by "pipeline control" modules, which proved to be -large, unwieldy, and hard to understand. To improve the situation, the -control logic has been subdivided into multiple modules. The control modules -consist of: - -1. Master control for module selection and initialization. This has two -responsibilities: - - 1A. Startup initialization at the beginning of image processing. - The individual processing modules to be used in this run are selected - and given initialization calls. - - 1B. Per-pass control. This determines how many passes will be performed - and calls each active processing module to configure itself - appropriately at the beginning of each pass. End-of-pass processing, - where necessary, is also invoked from the master control module. - - Method selection is partially distributed, in that a particular processing - module may contain several possible implementations of a particular method, - which it will select among when given its initialization call. The master - control code need only be concerned with decisions that affect more than - one module. - -2. Data buffering control. A separate control module exists for each - inter-processing-step data buffer. This module is responsible for - invoking the processing steps that write or read that data buffer. - -Each buffer controller sees the world as follows: - -input data => processing step A => buffer => processing step B => output data - | | | - ------------------ controller ------------------ - -The controller knows the dataflow requirements of steps A and B: how much data -they want to accept in one chunk and how much they output in one chunk. Its -function is to manage its buffer and call A and B at the proper times. - -A data buffer control module may itself be viewed as a processing step by a -higher-level control module; thus the control modules form a binary tree with -elementary processing steps at the leaves of the tree. - -The control modules are objects. A considerable amount of flexibility can -be had by replacing implementations of a control module. For example: -* Merging of adjacent steps in the pipeline is done by replacing a control - module and its pair of processing-step modules with a single processing- - step module. (Hence the possible merges are determined by the tree of - control modules.) -* In some processing modes, a given interstep buffer need only be a "strip" - buffer large enough to accommodate the desired data chunk sizes. In other - modes, a full-image buffer is needed and several passes are required. - The control module determines which kind of buffer is used and manipulates - virtual array buffers as needed. One or both processing steps may be - unaware of the multi-pass behavior. - -In theory, we might be able to make all of the data buffer controllers -interchangeable and provide just one set of implementations for all. In -practice, each one contains considerable special-case processing for its -particular job. The buffer controller concept should be regarded as an -overall system structuring principle, not as a complete description of the -task performed by any one controller. - - -*** Compression object structure *** - -Here is a sketch of the logical structure of the JPEG compression library: - - |-- Colorspace conversion - |-- Preprocessing controller --| - | |-- Downsampling -Main controller --| - | |-- Forward DCT, quantize - |-- Coefficient controller --| - |-- Entropy encoding - -This sketch also describes the flow of control (subroutine calls) during -typical image data processing. Each of the components shown in the diagram is -an "object" which may have several different implementations available. One -or more source code files contain the actual implementation(s) of each object. - -The objects shown above are: - -* Main controller: buffer controller for the subsampled-data buffer, which - holds the preprocessed input data. This controller invokes preprocessing to - fill the subsampled-data buffer, and JPEG compression to empty it. There is - usually no need for a full-image buffer here; a strip buffer is adequate. - -* Preprocessing controller: buffer controller for the downsampling input data - buffer, which lies between colorspace conversion and downsampling. Note - that a unified conversion/downsampling module would probably replace this - controller entirely. - -* Colorspace conversion: converts application image data into the desired - JPEG color space; also changes the data from pixel-interleaved layout to - separate component planes. Processes one pixel row at a time. - -* Downsampling: performs reduction of chroma components as required. - Optionally may perform pixel-level smoothing as well. Processes a "row - group" at a time, where a row group is defined as Vmax pixel rows of each - component before downsampling, and Vk sample rows afterwards (remember Vk - differs across components). Some downsampling or smoothing algorithms may - require context rows above and below the current row group; the - preprocessing controller is responsible for supplying these rows via proper - buffering. The downsampler is responsible for edge expansion at the right - edge (i.e., extending each sample row to a multiple of 8 samples); but the - preprocessing controller is responsible for vertical edge expansion (i.e., - duplicating the bottom sample row as needed to make a multiple of 8 rows). - -* Coefficient controller: buffer controller for the DCT-coefficient data. - This controller handles MCU assembly, including insertion of dummy DCT - blocks when needed at the right or bottom edge. When performing - Huffman-code optimization or emitting a multiscan JPEG file, this - controller is responsible for buffering the full image. The equivalent of - one fully interleaved MCU row of subsampled data is processed per call, - even when the JPEG file is noninterleaved. - -* Forward DCT and quantization: Perform DCT, quantize, and emit coefficients. - Works on one or more DCT blocks at a time. (Note: the coefficients are now - emitted in normal array order, which the entropy encoder is expected to - convert to zigzag order as necessary. Prior versions of the IJG code did - the conversion to zigzag order within the quantization step.) - -* Entropy encoding: Perform Huffman or arithmetic entropy coding and emit the - coded data to the data destination module. Works on one MCU per call. - For progressive JPEG, the same DCT blocks are fed to the entropy coder - during each pass, and the coder must emit the appropriate subset of - coefficients. - -In addition to the above objects, the compression library includes these -objects: - -* Master control: determines the number of passes required, controls overall - and per-pass initialization of the other modules. - -* Marker writing: generates JPEG markers (except for RSTn, which is emitted - by the entropy encoder when needed). - -* Data destination manager: writes the output JPEG datastream to its final - destination (e.g., a file). The destination manager supplied with the - library knows how to write to a stdio stream; for other behaviors, the - surrounding application may provide its own destination manager. - -* Memory manager: allocates and releases memory, controls virtual arrays - (with backing store management, where required). - -* Error handler: performs formatting and output of error and trace messages; - determines handling of nonfatal errors. The surrounding application may - override some or all of this object's methods to change error handling. - -* Progress monitor: supports output of "percent-done" progress reports. - This object represents an optional callback to the surrounding application: - if wanted, it must be supplied by the application. - -The error handler, destination manager, and progress monitor objects are -defined as separate objects in order to simplify application-specific -customization of the JPEG library. A surrounding application may override -individual methods or supply its own all-new implementation of one of these -objects. The object interfaces for these objects are therefore treated as -part of the application interface of the library, whereas the other objects -are internal to the library. - -The error handler and memory manager are shared by JPEG compression and -decompression; the progress monitor, if used, may be shared as well. - - -*** Decompression object structure *** - -Here is a sketch of the logical structure of the JPEG decompression library: - - |-- Entropy decoding - |-- Coefficient controller --| - | |-- Dequantize, Inverse DCT -Main controller --| - | |-- Upsampling - |-- Postprocessing controller --| |-- Colorspace conversion - |-- Color quantization - |-- Color precision reduction - -As before, this diagram also represents typical control flow. The objects -shown are: - -* Main controller: buffer controller for the subsampled-data buffer, which - holds the output of JPEG decompression proper. This controller's primary - task is to feed the postprocessing procedure. Some upsampling algorithms - may require context rows above and below the current row group; when this - is true, the main controller is responsible for managing its buffer so as - to make context rows available. In the current design, the main buffer is - always a strip buffer; a full-image buffer is never required. - -* Coefficient controller: buffer controller for the DCT-coefficient data. - This controller handles MCU disassembly, including deletion of any dummy - DCT blocks at the right or bottom edge. When reading a multiscan JPEG - file, this controller is responsible for buffering the full image. - (Buffering DCT coefficients, rather than samples, is necessary to support - progressive JPEG.) The equivalent of one fully interleaved MCU row of - subsampled data is processed per call, even when the source JPEG file is - noninterleaved. - -* Entropy decoding: Read coded data from the data source module and perform - Huffman or arithmetic entropy decoding. Works on one MCU per call. - For progressive JPEG decoding, the coefficient controller supplies the prior - coefficients of each MCU (initially all zeroes), which the entropy decoder - modifies in each scan. - -* Dequantization and inverse DCT: like it says. Note that the coefficients - buffered by the coefficient controller have NOT been dequantized; we - merge dequantization and inverse DCT into a single step for speed reasons. - When scaled-down output is asked for, simplified DCT algorithms may be used - that emit only 1x1, 2x2, or 4x4 samples per DCT block, not the full 8x8. - Works on one DCT block at a time. - -* Postprocessing controller: buffer controller for the color quantization - input buffer, when quantization is in use. (Without quantization, this - controller just calls the upsampler.) For two-pass quantization, this - controller is responsible for buffering the full-image data. - -* Upsampling: restores chroma components to full size. (May support more - general output rescaling, too. Note that if undersized DCT outputs have - been emitted by the DCT module, this module must adjust so that properly - sized outputs are created.) Works on one row group at a time. This module - also calls the color conversion module, so its top level is effectively a - buffer controller for the upsampling->color conversion buffer. However, in - all but the highest-quality operating modes, upsampling and color - conversion are likely to be merged into a single step. - -* Colorspace conversion: convert from JPEG color space to output color space, - and change data layout from separate component planes to pixel-interleaved. - Works on one pixel row at a time. - -* Color quantization: reduce the data to colormapped form, using either an - externally specified colormap or an internally generated one. This module - is not used for full-color output. Works on one pixel row at a time; may - require two passes to generate a color map. Note that the output will - always be a single component representing colormap indexes. In the current - design, the output values are JSAMPLEs, so an 8-bit compilation cannot - quantize to more than 256 colors. This is unlikely to be a problem in - practice. - -* Color reduction: this module handles color precision reduction, e.g., - generating 15-bit color (5 bits/primary) from JPEG's 24-bit output. - Not quite clear yet how this should be handled... should we merge it with - colorspace conversion??? - -Note that some high-speed operating modes might condense the entire -postprocessing sequence to a single module (upsample, color convert, and -quantize in one step). - -In addition to the above objects, the decompression library includes these -objects: - -* Master control: determines the number of passes required, controls overall - and per-pass initialization of the other modules. This is subdivided into - input and output control: jdinput.c controls only input-side processing, - while jdmaster.c handles overall initialization and output-side control. - -* Marker reading: decodes JPEG markers (except for RSTn). - -* Data source manager: supplies the input JPEG datastream. The source - manager supplied with the library knows how to read from a stdio stream; - for other behaviors, the surrounding application may provide its own source - manager. - -* Memory manager: same as for compression library. - -* Error handler: same as for compression library. - -* Progress monitor: same as for compression library. - -As with compression, the data source manager, error handler, and progress -monitor are candidates for replacement by a surrounding application. - - -*** Decompression input and output separation *** - -To support efficient incremental display of progressive JPEG files, the -decompressor is divided into two sections that can run independently: - -1. Data input includes marker parsing, entropy decoding, and input into the - coefficient controller's DCT coefficient buffer. Note that this - processing is relatively cheap and fast. - -2. Data output reads from the DCT coefficient buffer and performs the IDCT - and all postprocessing steps. - -For a progressive JPEG file, the data input processing is allowed to get -arbitrarily far ahead of the data output processing. (This occurs only -if the application calls jpeg_consume_input(); otherwise input and output -run in lockstep, since the input section is called only when the output -section needs more data.) In this way the application can avoid making -extra display passes when data is arriving faster than the display pass -can run. Furthermore, it is possible to abort an output pass without -losing anything, since the coefficient buffer is read-only as far as the -output section is concerned. See libjpeg.doc for more detail. - -A full-image coefficient array is only created if the JPEG file has multiple -scans (or if the application specifies buffered-image mode anyway). When -reading a single-scan file, the coefficient controller normally creates only -a one-MCU buffer, so input and output processing must run in lockstep in this -case. jpeg_consume_input() is effectively a no-op in this situation. - -The main impact of dividing the decompressor in this fashion is that we must -be very careful with shared variables in the cinfo data structure. Each -variable that can change during the course of decompression must be -classified as belonging to data input or data output, and each section must -look only at its own variables. For example, the data output section may not -depend on any of the variables that describe the current scan in the JPEG -file, because these may change as the data input section advances into a new -scan. - -The progress monitor is (somewhat arbitrarily) defined to treat input of the -file as one pass when buffered-image mode is not used, and to ignore data -input work completely when buffered-image mode is used. Note that the -library has no reliable way to predict the number of passes when dealing -with a progressive JPEG file, nor can it predict the number of output passes -in buffered-image mode. So the work estimate is inherently bogus anyway. - -No comparable division is currently made in the compression library, because -there isn't any real need for it. - - -*** Data formats *** - -Arrays of pixel sample values use the following data structure: - - typedef something JSAMPLE; a pixel component value, 0..MAXJSAMPLE - typedef JSAMPLE *JSAMPROW; ptr to a row of samples - typedef JSAMPROW *JSAMPARRAY; ptr to a list of rows - typedef JSAMPARRAY *JSAMPIMAGE; ptr to a list of color-component arrays - -The basic element type JSAMPLE will typically be one of unsigned char, -(signed) char, or short. Short will be used if samples wider than 8 bits are -to be supported (this is a compile-time option). Otherwise, unsigned char is -used if possible. If the compiler only supports signed chars, then it is -necessary to mask off the value when reading. Thus, all reads of JSAMPLE -values must be coded as "GETJSAMPLE(value)", where the macro will be defined -as "((value) & 0xFF)" on signed-char machines and "((int) (value))" elsewhere. - -With these conventions, JSAMPLE values can be assumed to be >= 0. This helps -simplify correct rounding during downsampling, etc. The JPEG standard's -specification that sample values run from -128..127 is accommodated by -subtracting 128 just as the sample value is copied into the source array for -the DCT step (this will be an array of signed ints). Similarly, during -decompression the output of the IDCT step will be immediately shifted back to -0..255. (NB: different values are required when 12-bit samples are in use. -The code is written in terms of MAXJSAMPLE and CENTERJSAMPLE, which will be -defined as 255 and 128 respectively in an 8-bit implementation, and as 4095 -and 2048 in a 12-bit implementation.) - -We use a pointer per row, rather than a two-dimensional JSAMPLE array. This -choice costs only a small amount of memory and has several benefits: -* Code using the data structure doesn't need to know the allocated width of - the rows. This simplifies edge expansion/compression, since we can work - in an array that's wider than the logical picture width. -* Indexing doesn't require multiplication; this is a performance win on many - machines. -* Arrays with more than 64K total elements can be supported even on machines - where malloc() cannot allocate chunks larger than 64K. -* The rows forming a component array may be allocated at different times - without extra copying. This trick allows some speedups in smoothing steps - that need access to the previous and next rows. - -Note that each color component is stored in a separate array; we don't use the -traditional layout in which the components of a pixel are stored together. -This simplifies coding of modules that work on each component independently, -because they don't need to know how many components there are. Furthermore, -we can read or write each component to a temporary file independently, which -is helpful when dealing with noninterleaved JPEG files. - -In general, a specific sample value is accessed by code such as - GETJSAMPLE(image[colorcomponent][row][col]) -where col is measured from the image left edge, but row is measured from the -first sample row currently in memory. Either of the first two indexings can -be precomputed by copying the relevant pointer. - - -Since most image-processing applications prefer to work on images in which -the components of a pixel are stored together, the data passed to or from the -surrounding application uses the traditional convention: a single pixel is -represented by N consecutive JSAMPLE values, and an image row is an array of -(# of color components)*(image width) JSAMPLEs. One or more rows of data can -be represented by a pointer of type JSAMPARRAY in this scheme. This scheme is -converted to component-wise storage inside the JPEG library. (Applications -that want to skip JPEG preprocessing or postprocessing will have to contend -with component-wise storage.) - - -Arrays of DCT-coefficient values use the following data structure: - - typedef short JCOEF; a 16-bit signed integer - typedef JCOEF JBLOCK[DCTSIZE2]; an 8x8 block of coefficients - typedef JBLOCK *JBLOCKROW; ptr to one horizontal row of 8x8 blocks - typedef JBLOCKROW *JBLOCKARRAY; ptr to a list of such rows - typedef JBLOCKARRAY *JBLOCKIMAGE; ptr to a list of color component arrays - -The underlying type is at least a 16-bit signed integer; while "short" is big -enough on all machines of interest, on some machines it is preferable to use -"int" for speed reasons, despite the storage cost. Coefficients are grouped -into 8x8 blocks (but we always use #defines DCTSIZE and DCTSIZE2 rather than -"8" and "64"). - -The contents of a coefficient block may be in either "natural" or zigzagged -order, and may be true values or divided by the quantization coefficients, -depending on where the block is in the processing pipeline. In the current -library, coefficient blocks are kept in natural order everywhere; the entropy -codecs zigzag or dezigzag the data as it is written or read. The blocks -contain quantized coefficients everywhere outside the DCT/IDCT subsystems. -(This latter decision may need to be revisited to support variable -quantization a la JPEG Part 3.) - -Notice that the allocation unit is now a row of 8x8 blocks, corresponding to -eight rows of samples. Otherwise the structure is much the same as for -samples, and for the same reasons. - -On machines where malloc() can't handle a request bigger than 64Kb, this data -structure limits us to rows of less than 512 JBLOCKs, or a picture width of -4000+ pixels. This seems an acceptable restriction. - - -On 80x86 machines, the bottom-level pointer types (JSAMPROW and JBLOCKROW) -must be declared as "far" pointers, but the upper levels can be "near" -(implying that the pointer lists are allocated in the DS segment). -We use a #define symbol FAR, which expands to the "far" keyword when -compiling on 80x86 machines and to nothing elsewhere. - - -*** Suspendable processing *** - -In some applications it is desirable to use the JPEG library as an -incremental, memory-to-memory filter. In this situation the data source or -destination may be a limited-size buffer, and we can't rely on being able to -empty or refill the buffer at arbitrary times. Instead the application would -like to have control return from the library at buffer overflow/underrun, and -then resume compression or decompression at a later time. - -This scenario is supported for simple cases. (For anything more complex, we -recommend that the application "bite the bullet" and develop real multitasking -capability.) The libjpeg.doc file goes into more detail about the usage and -limitations of this capability; here we address the implications for library -structure. - -The essence of the problem is that the entropy codec (coder or decoder) must -be prepared to stop at arbitrary times. In turn, the controllers that call -the entropy codec must be able to stop before having produced or consumed all -the data that they normally would handle in one call. That part is reasonably -straightforward: we make the controller call interfaces include "progress -counters" which indicate the number of data chunks successfully processed, and -we require callers to test the counter rather than just assume all of the data -was processed. - -Rather than trying to restart at an arbitrary point, the current Huffman -codecs are designed to restart at the beginning of the current MCU after a -suspension due to buffer overflow/underrun. At the start of each call, the -codec's internal state is loaded from permanent storage (in the JPEG object -structures) into local variables. On successful completion of the MCU, the -permanent state is updated. (This copying is not very expensive, and may even -lead to *improved* performance if the local variables can be registerized.) -If a suspension occurs, the codec simply returns without updating the state, -thus effectively reverting to the start of the MCU. Note that this implies -leaving some data unprocessed in the source/destination buffer (ie, the -compressed partial MCU). The data source/destination module interfaces are -specified so as to make this possible. This also implies that the data buffer -must be large enough to hold a worst-case compressed MCU; a couple thousand -bytes should be enough. - -In a successive-approximation AC refinement scan, the progressive Huffman -decoder has to be able to undo assignments of newly nonzero coefficients if it -suspends before the MCU is complete, since decoding requires distinguishing -previously-zero and previously-nonzero coefficients. This is a bit tedious -but probably won't have much effect on performance. Other variants of Huffman -decoding need not worry about this, since they will just store the same values -again if forced to repeat the MCU. - -This approach would probably not work for an arithmetic codec, since its -modifiable state is quite large and couldn't be copied cheaply. Instead it -would have to suspend and resume exactly at the point of the buffer end. - -The JPEG marker reader is designed to cope with suspension at an arbitrary -point. It does so by backing up to the start of the marker parameter segment, -so the data buffer must be big enough to hold the largest marker of interest. -Again, a couple KB should be adequate. (A special "skip" convention is used -to bypass COM and APPn markers, so these can be larger than the buffer size -without causing problems; otherwise a 64K buffer would be needed in the worst -case.) - -The JPEG marker writer currently does *not* cope with suspension. I feel that -this is not necessary; it is much easier simply to require the application to -ensure there is enough buffer space before starting. (An empty 2K buffer is -more than sufficient for the header markers; and ensuring there are a dozen or -two bytes available before calling jpeg_finish_compress() will suffice for the -trailer.) This would not work for writing multi-scan JPEG files, but -we simply do not intend to support that capability with suspension. - - -*** Memory manager services *** - -The JPEG library's memory manager controls allocation and deallocation of -memory, and it manages large "virtual" data arrays on machines where the -operating system does not provide virtual memory. Note that the same -memory manager serves both compression and decompression operations. - -In all cases, allocated objects are tied to a particular compression or -decompression master record, and they will be released when that master -record is destroyed. - -The memory manager does not provide explicit deallocation of objects. -Instead, objects are created in "pools" of free storage, and a whole pool -can be freed at once. This approach helps prevent storage-leak bugs, and -it speeds up operations whenever malloc/free are slow (as they often are). -The pools can be regarded as lifetime identifiers for objects. Two -pools/lifetimes are defined: - * JPOOL_PERMANENT lasts until master record is destroyed - * JPOOL_IMAGE lasts until done with image (JPEG datastream) -Permanent lifetime is used for parameters and tables that should be carried -across from one datastream to another; this includes all application-visible -parameters. Image lifetime is used for everything else. (A third lifetime, -JPOOL_PASS = one processing pass, was originally planned. However it was -dropped as not being worthwhile. The actual usage patterns are such that the -peak memory usage would be about the same anyway; and having per-pass storage -substantially complicates the virtual memory allocation rules --- see below.) - -The memory manager deals with three kinds of object: -1. "Small" objects. Typically these require no more than 10K-20K total. -2. "Large" objects. These may require tens to hundreds of K depending on - image size. Semantically they behave the same as small objects, but we - distinguish them for two reasons: - * On MS-DOS machines, large objects are referenced by FAR pointers, - small objects by NEAR pointers. - * Pool allocation heuristics may differ for large and small objects. - Note that individual "large" objects cannot exceed the size allowed by - type size_t, which may be 64K or less on some machines. -3. "Virtual" objects. These are large 2-D arrays of JSAMPLEs or JBLOCKs - (typically large enough for the entire image being processed). The - memory manager provides stripwise access to these arrays. On machines - without virtual memory, the rest of the array may be swapped out to a - temporary file. - -(Note: JSAMPARRAY and JBLOCKARRAY data structures are a combination of large -objects for the data proper and small objects for the row pointers. For -convenience and speed, the memory manager provides single routines to create -these structures. Similarly, virtual arrays include a small control block -and a JSAMPARRAY or JBLOCKARRAY working buffer, all created with one call.) - -In the present implementation, virtual arrays are only permitted to have image -lifespan. (Permanent lifespan would not be reasonable, and pass lifespan is -not very useful since a virtual array's raison d'etre is to store data for -multiple passes through the image.) We also expect that only "small" objects -will be given permanent lifespan, though this restriction is not required by -the memory manager. - -In a non-virtual-memory machine, some performance benefit can be gained by -making the in-memory buffers for virtual arrays be as large as possible. -(For small images, the buffers might fit entirely in memory, so blind -swapping would be very wasteful.) The memory manager will adjust the height -of the buffers to fit within a prespecified maximum memory usage. In order -to do this in a reasonably optimal fashion, the manager needs to allocate all -of the virtual arrays at once. Therefore, there isn't a one-step allocation -routine for virtual arrays; instead, there is a "request" routine that simply -allocates the control block, and a "realize" routine (called just once) that -determines space allocation and creates all of the actual buffers. The -realize routine must allow for space occupied by non-virtual large objects. -(We don't bother to factor in the space needed for small objects, on the -grounds that it isn't worth the trouble.) - -To support all this, we establish the following protocol for doing business -with the memory manager: - 1. Modules must request virtual arrays (which may have only image lifespan) - during the initial setup phase, i.e., in their jinit_xxx routines. - 2. All "large" objects (including JSAMPARRAYs and JBLOCKARRAYs) must also be - allocated during initial setup. - 3. realize_virt_arrays will be called at the completion of initial setup. - The above conventions ensure that sufficient information is available - for it to choose a good size for virtual array buffers. -Small objects of any lifespan may be allocated at any time. We expect that -the total space used for small objects will be small enough to be negligible -in the realize_virt_arrays computation. - -In a virtual-memory machine, we simply pretend that the available space is -infinite, thus causing realize_virt_arrays to decide that it can allocate all -the virtual arrays as full-size in-memory buffers. The overhead of the -virtual-array access protocol is very small when no swapping occurs. - -A virtual array can be specified to be "pre-zeroed"; when this flag is set, -never-yet-written sections of the array are set to zero before being made -available to the caller. If this flag is not set, never-written sections -of the array contain garbage. (This feature exists primarily because the -equivalent logic would otherwise be needed in jdcoefct.c for progressive -JPEG mode; we may as well make it available for possible other uses.) - -The first write pass on a virtual array is required to occur in top-to-bottom -order; read passes, as well as any write passes after the first one, may -access the array in any order. This restriction exists partly to simplify -the virtual array control logic, and partly because some file systems may not -support seeking beyond the current end-of-file in a temporary file. The main -implication of this restriction is that rearrangement of rows (such as -converting top-to-bottom data order to bottom-to-top) must be handled while -reading data out of the virtual array, not while putting it in. - - -*** Memory manager internal structure *** - -To isolate system dependencies as much as possible, we have broken the -memory manager into two parts. There is a reasonably system-independent -"front end" (jmemmgr.c) and a "back end" that contains only the code -likely to change across systems. All of the memory management methods -outlined above are implemented by the front end. The back end provides -the following routines for use by the front end (none of these routines -are known to the rest of the JPEG code): - -jpeg_mem_init, jpeg_mem_term system-dependent initialization/shutdown - -jpeg_get_small, jpeg_free_small interface to malloc and free library routines - (or their equivalents) - -jpeg_get_large, jpeg_free_large interface to FAR malloc/free in MSDOS machines; - else usually the same as - jpeg_get_small/jpeg_free_small - -jpeg_mem_available estimate available memory - -jpeg_open_backing_store create a backing-store object - -read_backing_store, manipulate a backing-store object -write_backing_store, -close_backing_store - -On some systems there will be more than one type of backing-store object -(specifically, in MS-DOS a backing store file might be an area of extended -memory as well as a disk file). jpeg_open_backing_store is responsible for -choosing how to implement a given object. The read/write/close routines -are method pointers in the structure that describes a given object; this -lets them be different for different object types. - -It may be necessary to ensure that backing store objects are explicitly -released upon abnormal program termination. For example, MS-DOS won't free -extended memory by itself. To support this, we will expect the main program -or surrounding application to arrange to call self_destruct (typically via -jpeg_destroy) upon abnormal termination. This may require a SIGINT signal -handler or equivalent. We don't want to have the back end module install its -own signal handler, because that would pre-empt the surrounding application's -ability to control signal handling. - -The IJG distribution includes several memory manager back end implementations. -Usually the same back end should be suitable for all applications on a given -system, but it is possible for an application to supply its own back end at -need. - - -*** Implications of DNL marker *** - -Some JPEG files may use a DNL marker to postpone definition of the image -height (this would be useful for a fax-like scanner's output, for instance). -In these files the SOF marker claims the image height is 0, and you only -find out the true image height at the end of the first scan. - -We could read these files as follows: -1. Upon seeing zero image height, replace it by 65535 (the maximum allowed). -2. When the DNL is found, update the image height in the global image - descriptor. -This implies that control modules must avoid making copies of the image -height, and must re-test for termination after each MCU row. This would -be easy enough to do. - -In cases where image-size data structures are allocated, this approach will -result in very inefficient use of virtual memory or much-larger-than-necessary -temporary files. This seems acceptable for something that probably won't be a -mainstream usage. People might have to forgo use of memory-hogging options -(such as two-pass color quantization or noninterleaved JPEG files) if they -want efficient conversion of such files. (One could improve efficiency by -demanding a user-supplied upper bound for the height, less than 65536; in most -cases it could be much less.) - -The standard also permits the SOF marker to overestimate the image height, -with a DNL to give the true, smaller height at the end of the first scan. -This would solve the space problems if the overestimate wasn't too great. -However, it implies that you don't even know whether DNL will be used. - -This leads to a couple of very serious objections: -1. Testing for a DNL marker must occur in the inner loop of the decompressor's - Huffman decoder; this implies a speed penalty whether the feature is used - or not. -2. There is no way to hide the last-minute change in image height from an - application using the decoder. Thus *every* application using the IJG - library would suffer a complexity penalty whether it cared about DNL or - not. -We currently do not support DNL because of these problems. - -A different approach is to insist that DNL-using files be preprocessed by a -separate program that reads ahead to the DNL, then goes back and fixes the SOF -marker. This is a much simpler solution and is probably far more efficient. -Even if one wants piped input, buffering the first scan of the JPEG file needs -a lot smaller temp file than is implied by the maximum-height method. For -this approach we'd simply treat DNL as a no-op in the decompressor (at most, -check that it matches the SOF image height). - -We will not worry about making the compressor capable of outputting DNL. -Something similar to the first scheme above could be applied if anyone ever -wants to make that work. diff --git a/Build/source/libs/jpeg/testimg.bmp b/Build/source/libs/jpeg/testimg.bmp deleted file mode 100644 index 8603d15484d..00000000000 Binary files a/Build/source/libs/jpeg/testimg.bmp and /dev/null differ diff --git a/Build/source/libs/jpeg/testimg.jpg b/Build/source/libs/jpeg/testimg.jpg deleted file mode 100644 index b34ca5d3151..00000000000 Binary files a/Build/source/libs/jpeg/testimg.jpg and /dev/null differ diff --git a/Build/source/libs/jpeg/testimg.ppm b/Build/source/libs/jpeg/testimg.ppm deleted file mode 100644 index 9d81ce24a3b..00000000000 --- a/Build/source/libs/jpeg/testimg.ppm +++ /dev/null @@ -1,4 +0,0 @@ -P6 -227 149 -255 -0/-0/-10.21/51.51.62/62/83/83/:3-:3-:3-:3-:3-:3-:2/91.91.80-80-91.91.:2/80-80-80-80-80-80-80-80-6.+6.+6.+5-*5-*4,)4,)4,)4,)4,)4,)4,)4,)4,)4,)2-)/*$/,%/,%0-&1.'2/(30)30)63,63,74-85.85.96/:70:7.A:0B<0D>2F@4IA4JB5KC6KC6MD5MD5OC3NB2OC3OC3PD4RE5R?1Y?2b@4nB5}E6‹H8™G9£F7¯G:¸G9¾E:ÅG;ÇG>ÊG?ËH@ÐE@çFLíCLëDKëEIîCIïBDñ>Bô=Aø;A÷:@ô:?ð×?<ËA7»=/µ@.µ@.´?-´?-³@-²?-¯@-­@,ªA,¦A-¢B,Ÿ@*›A)˜@*–A,”>-’?/’?/‘>.‘>,=+’<+’<+”?+”?+”=*”=*”=*•>+–?,–@/–?6•>5—=2Ÿ?1©B3³D3¼D4¿D4¹?0µA2¬F8žH;‡H9oA2T8*C3&=5295495473271160050-50-72/72/72/61.61-50,50,41,//-.0-//-//-0/-0/-2.-2.-5,-4+,4*+3)*7(+=.1E69P:0U?1^A3jC4xD6„E4’E5œC3§C4¯A4µA4¼B7ÀD:ÄE<ÅF=ÍC@áEIçBIèCIêDHíDGïBDó@Cö?Cø;A÷:@ô:?ðÕ@<Ê@6¹>/µ@.´?-´?-´?-²?,°?-¯@-­@,©@+¦A-¡A+Ÿ@*›A)˜@*–A,”>-’?/‘>.‘>.‘>,=+’<+’<+”?+“>*”=*”=*”=*•>+–?,–@/”@5•>5˜>3 >1«A3µD4½C4¿D5»A2·C6¬F8œI;…G:l@3S9*B4)>63:6595484382271161.61.72/72/72/61.61-50,50,41,//-.0-//-//-0/-0/-2.-2.-3--5,-4*+3)*5)+<-0C47N8:d>=vEA†JINLšTV¤aj¥l}rŽ‘{¢†€®…¹{„»ou©[[QHuOCiOFeOG_PH_RN_[Yfnotƒ‡ˆ”™•™ž—š ”™‘ƒ~ojkY][LVSJXSZVRaXQa/.,/.,0/-10.40-40-51.51.72.72.72.72.92,92,92,92,91.80.7/-7/-7/-7/-80.91/80.80.80.80.80.80.80.80.6.,5-+5-+5-+4,*4,*4,*4,*5-+5-+5-+5-+5-+5-+5-+3.*2-'1.'2/(30)30)41*41*52+63,63,63,74-85.96/96/:7.?8.@:.B<0D>2G?4H@5H@3H@3I@1I@1K?1K?1K?/L@0MA1NB2MA1QA1YB2dC2qC3|C2‡B2’A0˜<- :+§;.¯=2µ@6ºD:¿F=ÅD>ÙCEá@FãBGçBFêDFðCEôADø?Dú;@ù:?õ;@ð=@è@@ÜA=Ñ@;Æ@5·=.³@-³@-²?,²?-°?-¯>,­@,ª?-§@-¥@,¡A+A,š?*˜@*•@+”>-‘>.‘>.‘>.=+=+=+=+‘>,‘>,’<+’<+“=,“=,”?+•?.•A6–?5š>3£>2¯A4¹C5¿D5ÁC5ÀD8¸F;®I=™J=G;h@4Q:,B5,?74=77<66:4494183072/72/62/62/62/51.52-41,41,21,.0-,1-.0-.0-//-//-0/-2.-5//4..5,-4*+4*+9-/>24I56[97l?9|E@†IDOM˜[`›fv”mˆŒwžƒ}­}‚¹u~·fm¤TV‰MEvLAkMAeOFcQHcMH^NK\[[eqty…‰ˆ‡Œ†Šˆ…†Š|xzlfiXZ[MVSLZU[ZT`[S`.-+/.,/.,0/-3/,40-40-40-61-61-61-61-81+81+81+81+7/-7/-6.,6.,6.,6.,7/-7/-80.80.80.80.80.80.80.80.5-+5-+5-+4,*4,*4,*3+)3+)6.,6.,6.,6.,6.,6.,6.,4/,30+30)30)41*41*52+52+52+52+52+63,74-85.85.96/96->7-?9-@:.B<0E=2E=2F>1F>1G=1G>/H<.I=/I=/J>.L@0JA0KD2NE4UD4^D3iD2sB1~A/†?-Œ9)”9'9*£<-¬@3³E8¸H<ÁF>ÒDCÚACÞBCâDCçCDìBCó@C÷?Aú;@ù:?õ;@î>@åA@ÚB=Í@9Â@3µ=-°@,°@,°@,¯>,®?,®?,¬?+©@-¦?,£@+ @*œ@+˜@*–@)”?*‘>,‘>.‘>.=-=+=+<*<*=+=+<*<*’<+‘>,”>-’?-•A6–?5œ>2¦@4²B6¼C8ÁC7ÂB7ÂF<ºJ?¬L@—K>|F:b@4L:.A7-@85>96=77<74:5294183083062/62/62/32.52-21,21,12--2.-2./1./1.00.00.10.10.5106005//5,-4+,6,-:01D22T71c;3qA7{E;‚HD‰RU_l‹i‚ƒs˜}y«x}µowµ`f¢QR‹LEyL@pL@hPEgQFfLC^GBVMLZ^^fjnquyxx}wz€vwzokoa`bTWYLTTL]WY]V]]V^------.-+/.,0/-10.3/,40-3/,3/,4/+4/+4/+4/+6/)6/)4/,4/,3.+3.+3.+3.+4/,4/,50-50-50-50-50-50-50-50-3.+3.+2-*2-*2-*1,)1,)1,)4/,4/,4/,4/,4/,4/,4/,4/,41,41,41,41,41,52-52-52-52-52-63.63.74/85096196/<5-=6,?8.@9/B:/C;0C;0C;.D:.D:.F:.G;-H<.I=/J>0I@1JG6MH5RG5YF5bE3jD1uB/}>,‚;)‹:)“:*š=,£B2¬F8²J=»I?ÌGBÔDCØDBÝEBâBBéAAð=@ô<>ù:?ø:<ô<>í?>áB>ÓC:ÅA5¹?0²?-®?,®?,®?,­>-¬>-¬>-ª?-¨>.¤?- ?,ž?+š?,—?+•>*“>*‘>,?.>->->-Ž=,Ž=,Ž=,Ž=,Ž=,Ž=,Ž=,<,>-‘>.?.”B4—A4@1¨@3¶A7¿C9ÅB8ÄA7¾C;·H?¦LCJ@tE;Z>2E9-<5+@93@85?75>63=52<4194083/62/43/43/23.32.12-12-02--2.,2.-2.-2./1./1.00.10.3205105104..2,,4+,7./=/.N5.Y9.e=1n@3sB;yKK€Zeƒg€p—zxªu{·ks´_d¦TT”OGƒLBwNAmNBhMAeJA`GBYGFXKKWMPU]cc`fbbia`f\Z`TW[MUXMXXP^YV`WX`WZ,,,,,,.-+.-+/.,0/-3/,3/,2.+2.+3.*3.*3.*3.*5.(5-*3.+3.+2-*1,)1,)2-*3.+3.+3.+3.+3.+3.+3.+3.+3.+3.+2-*2-*2-*2-*1,)1,)1,)0+(3.+3.+3.+3.+3.+3.+3.+3.+41,41,41,41,41,41,41,41,41,52-52-63.74/85085085.;4,<5+=6,>7-@7.A9.A9.A9.C9/C9-E9-F:.G;/H<.J>0HA1JG6IH6NG5VF6\E3dC2n@0v>-{<+‚;)Œ;*”=,œ@1£F5ªJ:´J=ÄH@ÌEAÑFAÖE@ÞCAä@>ì>?ñ:<÷;<ô:;ð<=é@=ÜC=ÍC8¾@2±>,®?,«@,ª?+ª?+ª?-©>,©>,¨?,¥>-¢?, ?,›>,—?+•>*“>)‘?*>+>->->-Ž=,Ž=,Ž=,<+Ž=,‹<+<+‹<+‹<-Œ=,>/Ž?.”B4—A2 @2¬B5¹C9ÂC:ÅB:ÂA;ºA9±I@£NGNEoG=S?4A;/96-@93A75?74>63<4194083/74/43/43/34/23.23.02-02-.3--3/-3/.3/.3/02/02/11/11/21/32032040/2.-1-,4..8.,G4-O4)X8+`<0e?6mGFyYd‚k…€uŸ||²w|¼nu»dh¯[[¡RMLB~OArL@hI=cH>`HB^ECX@BO;@FBGJDMJJQJJQIIQFKQEOUIVWO^YS`YS`XU++++++,,,---/.,/.,0/-0/-1-*1-*1-*1-*2-)2-)2-)2-)2-*2,,1++1++1++1++2,,2,,1++1++1++1++1++1++1++1++2,,2,,2,,1++1++1++0**0**3--3--3--3--3--3--3--3.+41,41,41,30+30+30+30+30+41,41,52-63.74/74/85085.:3+;4,<5-=6.?6/?6-?6-?7,B8.B8.E8/E9-G;/H<0J>2H@3HE6GF4KE5QD4XC2_B2f?.n=,v=,|:*…9)Œ;*“=.›B2¢F7¬F8»F<ÂF>ÉF>ÐE>ÙD@âC?ê@@ð>>ò::ñ;:ì<<äA<ÖC;ÆD6µ@/ª=)ª?-©@-©@-¨?,¨>.¨>.§=-¥>-£=. ?.ž?-š?-–?,“>*‘?*>)>+>->-Œ=,Œ=.Œ=.‹<-‹<-‹<-Š=-Š;,‰<,Š.‹=0Œ?/’C2˜B1¡A1®B6¼C:ÂC<ÄC=ÀC=¹FA²QJ¥XRXQsRIWI>CC793@72>71=60:5/94.83/63.43.43.34/13.13..3-.3-.3--3/-3/-3/-3/.3/.3/02/02/00.11/22021/0/-/.,2.-4/,?0+D0)K3)T8-Z<4dFFu]jƒs‰€«…„¾~ƒÇtzÆmp½ce¯VSšLC‚K?qI_FB]DBW?AN;?H:BE>HGDMHGQIGQHJRGNVKUXM^ZOaYNaXO++++++,,,,,,.,-/.,0/-0/-1-*1-*1-*1-*2-)2-)2-)2-*2,,1++1++0**0**1++1++2,,0**0**0**0**0**0**0**0**2,,2,,2,,1++1++0**0**0**2,,2,,2,,2,,2,,2,,2,,2,,3/,30+30+30+30+30+30+30+41,41,52-63.63.74/85085092,:3+;4,<5->5.>5.>5.>5,B8/B8.E8/E8/G:1I=1J>2I?3FC4FC4JB5OA4TA2\@2b>0j<-q<.w9*}8)…8(Œ:,•=/›B4¤B5²F:ºE;ÁF>ÊG?ÔG@ÞFAçCAîB@í;;ë;;ç>;ßB;ÑD:¿D4¯@-¤>(¦A-¦A-¥@,¥@.¥@.¤?-¤?-¤>/¢>.Ÿ@.œ?.˜?-•>+‘?*>)>+>->->-Œ=,Œ=.‹<-‹<-Š=-Š=-ˆ<.ˆ<.ˆ<.ˆ/ˆ>1‹?1‘D2–C1¢B4­C6ºC;ÁD>ÁD>»EA¹PL²[T¥e\‘f]u_T[UIGMACI?<92?82>71;6094.74-63.43.43.34.24/13./4..3-.3-.3--3/-3/-3/-3/.3/.3/02/02///-00.22022010.0/-0/-3/,8,,;,)C0*K70S<6^IHtbn‡z”Š¶ŒÆ„ˆÏz€ÌrxÆik¶WWŸID„E=nG^CAY@CV@DP>EKGQRKWUQ^WU`XS_UR^TT^SY_S^[LaZJaZJ,-/,-/,-/,.-------.-+.-+/.,/.,1-*0,)0,)0,)/+(/+(/+*/+*/+*/+*/+*/+*/+*0,+/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+1-,1-,2.-1-,1-,1-,1-,1-,1-,1-,1-,0,)1-*2.+3/,3/,3/,3/,3/,3/,3/,3/,3/,40-51.62/74/80-92,:3-;4.=4/>5.>5.>5.?4.?5,B5-C6.D7/F90G:1F<2G?4H@5J@6P?5T>3X<1^90b6+m9.t8-|8+ƒ9,;/“=0˜?1ž>0§A3­A4µC8¾E:ÊG=ÔG>ÞE?åC@è@?êBAæDAÚE>ÈD8·B1ªA.¢B,¢A.¡@-¢?,¢>.¡=-¡=-¢>. ?/œ<,š=,˜<-•>-“=,=+Ž=*Œ>*‹<+‹<+Š=-‰<,‰<,‰<,ˆ:-‡;-‰=/†3ˆ@2‰A5‹A4‘E5—D4£E9±I>ºG@»D>»EA¸MG´ZR¯f_£qf‘sh~rdjj^V^SIQFLLBJF=B>5<8/95,74+63,33+43.34.14-14-02-/1,,1+,1+-2.-2.-2.-2./1./1./1./1.02/02/11/11/11/11/11/40/4+0;/3A32C4/J;6]OOymy‹…Ÿ“»”–Ï•Ùƒ‰ÓtzÆjn·_b§Z[”LItHBdA>]>>X?BUAIVLU\U`bbqnn}xv†|rulyoguh_k_W_P]\Hb\Fc]G,-/,-/,-/,-/------.,-.-+/.,.-+0,)0,)/+(/+(/+(/+(.*).*).*).*)/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+0,+1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,0,+0,)1-*2.+3/,3/,2.+2.+2.+2.+2.+2.+3/,40-51.62/80.91.:2/;4.=4/>50>50=4-?4.?4.A4.B5-C6.E80G:2H;3H>5H>5L=6O>6Q=4V;2Z90_7/h70p7.w7-9-‰9.<1–<1›=1¢@3§A3¬B5´D8¾E:ÉF<ÔE=ÛD=ßD@àE@ÞFAÔG>ÄF8²C2¥B-žB-ŸC.žB-Ÿ@.ž?-ž?-ž?-ž>.ž>.š=,™>,–=-”=,=+>+Œ>*Œ=,‹<+Š=+‰<,‰<,‰<,‡;+‡;-…<-†2†@6‡A7ˆB6“G9—E7£G<¯J@¸IB¸GA·LF³TN±d\ªqfŸ~oo|mmseZfZNXMLNAKI=EC7@=4=:188.44,11)23-23-03,/2+/1,.0+.0+.0+/1.-2./1./1./1./1./1./1.02/02/11/11/11/11/11/2015+49-7<23?53H?:^VTxr|Šˆž““¹”—Ê–Ô„‹ÏyÂqy¸kt­hnž\_€XZqSUjRWjT^hZgmfvvr‚tˆ~’‡ƒ•‰~Žv†yr€qfteZeT[ZE`Z@b\D,-/,-/,-/,-/,-/,.-------.-+.-+.-+-,*/+(.*'.*'.*',+),*+,*+,*++)*+)*+)*+)*-+,-+,-+,-+,-+,-+,-+,-+,,*+,*+-+,-+,-+,.,-.,-.,-.,-.,-.,-/-./-./-./-./.,0,+0,+1-,2.-2.-2.-2.-1-,1-,1-,1-,1-,2.-3/.40/51.80.91.:2/;30=31=4/=4/=4/?40?4.A4.A4.C60D71F93G:4H;5J;6K<7N=6P;6S:5V72[6.c60k6.t5,}7/‡9/;0”<0–<1?3 @4¢@3¨@3±C6ºD8ÅE:ÍD:ÕF@×H@ÔIBÌI?¾E:®C3¡B.œA.B/œA.œ?.›>-›>-›>-›>/›?0˜<-–=-”<.“=.>-Œ=,‹<+Š=+‰<*‰<*‰<,‡;+‡;-…<-„:-ƒ;-„<0‚<0‚<2‚>3ƒ?4…A8‡C:ˆD9”J=—H; H>¬KD²KF³LG²SM®`V­sg¦qŒz‘Ž{‚‰ws€ocqbXcUNRDMN@HI;DD8@@49;.46+/1&01)01)/0*/0*./*./*//-//-//-.0-//-//-//-//-//-//-00.00.00.00.00.00.00.1/26+97+98/4;63HE>_^Yzz|‹š”±’—¿•Ç„ŽÃ}‰»{‰¶|‹²}Œ«}ˆšwƒq~‡n}‚n~~o‚~yŽ…ƒ™‹¡”‘¨˜¥”ˆŠƒ–ƒ|{j{i\hTXX@]Y<_[@-.0-.0-.0-.0-.0-.0.......-+.-+-,*-,*.*'.*'.*'.*),*++)*+)*+)*+)**()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+-+,-+,-+,-+,.,-.,-.,-.,-/-./-./-./+*0,+1-,1-,1-,1-,0,+0,+0,+0,+0,+0,+1-,2.-3/.40/91/:20;31<41=31=31=31=4/>3/>3/@2/@3-A4.C60D71E82F93H94I:5J;6L:6N94Q83T50^72e60o6/x8/‚90Š:/<1”>1™?4›?4›?2Ÿ?1¥A2®B5¸D7¿E:ÇG>ËH@ÊJAÃI>¶F:ªB5žA0™@.™A-™A-˜?-—>,—>,™>,™=.—>.•<,”=,“=.=-Ž=,Š=+Š=-‰<,ˆ;)ˆ;)‡;+‡;+„;,„;,ƒ;-€;,;/€<1€<1>5ƒ@7ƒC:‡D<ˆE<”L@–H<žG>§JC®LI®QL­]Vªj^§€o¡yšš‚›ƒ†•€z‹xm{jbm]SZJQUFKO@EI:@D6;=057,13(01)/0(./).-(.-).-)/.,0/-/.,/.,/.,/.,/.,..,/.,..,0/-//-0/-//-//-//-//-2-17,:6*83-1961HJ?bfX{€z‹““£–°Œ•¶ƒ²¯…™²¤¶’¨³“¨«¤£Œ ž‡ž˜‚™}˜‰œ‹ˆ£”°š˜±›”­—‹£…›„’|k|iXfOSV;ZV9^Z=+/2+/2+/2+/2-.0-.0......------.-+-,*-,*,+),+),+),*+,*+,*++)*+)**()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*++)*+)*+)*,*+-+,-+,.,-.,-/-./-./-./+*0,+0,+0,+0,+0,+/+*.*)/+*/+*/+*/+*0,+1-,3/.40/901:20;31<42=32=31<20<20=20=2.?1.?1.@2/A30B5/C60D63C84D95E:6G96H94K84N50X72_60i70r7/}:1†<1Œ>2>2—@6—?5—?5—?3œ@3£C5«C6³E8ºE;½G=¾H>¹G=°D8¦A5›?0—@/—@-—@-–?.•>-”=,•<,–=/–=/•<.“;-’0->0-?1.@2/A4.?4.@51@72@93A:4B94C84F74H5/Q51X5/a6/l8-u9.€0‹=1“?5•>5“?5“?4•B4šB4 C4¥D4¬B5°D8´E:±E;ªB7¡?4š>1–>0•?.”?+“=,“=,“<+“<+”<.”<.“;-’<-<.;-Š;,‰<,‡;+‡;+†:*†:*…9)ƒ:)ƒ:+9*9-9-€<1<3?6€A8‚C<…F?ˆIBŠICŽJAG>—HCŸNJ§VR§`Z©pe¤ƒrœ”}–¡ƒ¨Šˆ§ˆƒ „~–~yˆup{jdp\]iSR^JJS@BK:>E5:@29<134,22*1.)/,'/))0**1++2,,1++1++1++1++1++0,+0,+0,+1-,1-,1-,1-,/.,/.,/.,2,.8*75(13+(56&EK1\gGu‚d†“yŽ›Š‘ž”Ÿš‹ž˜¥——´ž¢Å¥©Î­¥É­¦Ê°§Ë±¤È¬—¾Ÿ‹³‘ˆ°²Ž²Ž²¬Š„¡‚€™{wŽrdx]Q_ENR7QQ5SR6,03,03,03,03./1./1./1./1/////////////.,/.,.-+.-+/-..,-.,--+,,*++)*+)**()+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)**()*()*())'()'(+)*+)*,*+-+,.,-.,-/-./-./+*/+*/+*/+*/+*.*)-)(,('0,+0,+0,+0,+1-,2.-40/40/:12;23;23<34=32<21<21;10<1/<1/>0/=/.>0->0-?1.>3/=60;60;83<94=:5>93@72C60G4.O4+Y4+d5+n8,x:-;.…;.<4‘<5>3@3A2“B1—A2™@0 >1¦@4ªB7ªB9¥@6Ÿ>5—=2•?2’?-’?-‘>,=+‘;*‘;*’<-’<-‘;.‘;.Ž;-;-Š;.ˆ:-†:,„;,…9)…9)ƒ:)‚9(‚9*9*~8,~8,€<1€=4€@7B9„E>…IAˆKFŒMFŒIAŽH@˜JF¡SO¨]X©hb©{n¤Žy™œ’§†‰¬‹‚ªˆ€¡„™€~‹wxnjxadr[ZhQQ]IITCCL;>D60-?1.=2.=4-=6.;819919:29:2;81?6/C2+J1,T2)^3*g7+o9-u=.z2¢B6¡C7žB7™?4–>2”>1”>/“=.=-<,Ž=,Œ=,Œ=.>/Ž<.Ž<.‹2>5€@6‚C:ƒG=…JB‡NE‹OGŒICŽID“PJ˜\Tžg`uiž‡už˜€”¡…ª‰‰¬‹ƒ¨‡€¡„~›zytˆoi}bby]\pUUgOO\HGRAAH8=A388.85.7/,3+)2()2()3)*4*+0*,/+*0*,0**0*,0*,2),2),3*-1+-1+-1+-0,-0,-0,-1+/4)/4*+4-%46!?F%T`8m|Qg‰™tžz¡~ˆ¡zŠ§{‘¶‚›ÄˆŸËŸÉ™žÇÆš˜Á•Œ·Š‚­€…®‚Œµ‰„«‰®…‰©‚~œxvolƒfZnSJZ?GM3FJ1DF./0+.0+/0+01,01,01,12-21-32.43/43/62/51.41,3/,4/,50-50-4/,3.+2,,1-,0,+0,+.,-.,---/--/,,.++-*).))+.)/.)-/(/.)-/)-.)-.*+.*+/+*/+*-,*.-)--+-.)./*./*------.,-/-./.,0/-2.+2.+2-*4,)5-*6.+8/*:1,:1*;2+=4-=4->50>50>50=4/<3.;2-=2.<1-<1/;0.=/.>0/>0/@1.A0)@2);4*77-39-28.56.:3-?-)F*'L)'S*&Z/(`5,d<0k@0yA0@/†A1‹B3@3“=0“;/’8-“;/“=.”A1•B2”C2’A0‘>.‘;,—;0—:2’;1Œ=0ˆ?0„?/‚?.ƒ>.ˆ@1ˆ?0Š>1Š<0‰;/ˆ:.†:-ƒ;-{9+~@3w<.q7)w>-w>-v;-}?2{;/‚@4‡E9‰I?ˆLA†MB„PC‡NE‘KI—SP”bY‘paŒ}j‰‰q‰–|Šž‚¤‡¦‰Ž§Š§Œ‡¤ˆ~Ÿ‚uš{o—uiib„_[zXZsUZnSWeNPWEJK=C?6@93;0.6**3')3'+3'+1&*,*-)+***,*(),'+.(,1(-2'-3(.3(.3(02(00)10)1/*1/*0/)-1++0-(//#5,>5,>5.>5.>5.=4-<3.<3.=2.<1-;0.;0.=/.=/.>0/@1.C0*C0)A2+>4+:6-95,:3-<1-?-+D*)I*(N+'T/)Z5-_:1e>/pA/xA-€A0ˆ@2?4‘=3“:2“;19.‹.Œ@0A1A1ŽA/‘?1•;2•;2<2‹=0†>0ƒ@/?/‚?.…@1†>/‰=0ˆ<.‡;.„;,‚:,€;,x8,x<1s9-n9+s>.s>.r8*u:,}=1ƒA5‰E:‹I=‰K@†NA„PC‡NE‘JH—SR’f]Œwf„†p€“wž„¥†ˆ§ˆ§Š§§Š¤‰Ÿƒwœ}o˜ve’i`‹`Y‚ZY{X\wXZnSSaJNUCFH;C@7<737/-3*+2)*1(+.(*,*+**,+),+),-(,/)-2(02(02(02(02(10)1/*1-*3-*3-*12-12.-0,)--%8:,SXBox]€‹i‡–o†™l†žnˆ£p†¤p„¥pŠ­w“¶€™¹‡–¶„“³Œ®{†«x‚¨w‚¨yƒ¨|ƒ¦|‚¤{x’uqˆnh{eYjWMZHEL<@D5;=/12,12,12,12,23-23-43.43.54/54/85085085074/72.61-80-80-7/,6.+4/,3.+2,,1-,1-./-.0.1/-0--/,,.+*/+)./(/1'//)-/)-/)-/)-.*+.*+0,+0,+/.*/.*/.)0/*0/*0/+//-///0./0./0/-/.,1-*2-*6.+70*90+:1*<1+=3*>4+?5,?6-?6-@7.@7.?6/>5.=4-=4-=2.<1-;0.;0.;0.;0.<1/?1.C2+E0+H/+K--L,/K+.I*/E+.A-,@.*A.(E.(M.)X1*b3-g5,j:,o;-w;0=4‡<6Œ<5:4:4Š<2‡=2†>2…?3†A2‰A3ŒB5C5Ž?2=/Œ>1Š>.‡>/…>,†=.ˆ<,‰;.‰<,ˆ:-†:*ƒ;,<)~=+{<+}=1z<1v:/u;/x@1x@1v<.v;-?5‚B8‰F=‹H?‰JA‡KA‡NCŠNF‘JH˜TQ–f\ve‡…n‚‘t{¤ƒ…¨‡ˆª‰ªŒ©ŒŽ¥‰ˆŸƒš}y˜xi–ma’e\‹a\†`]‚`[|]UrVPhPFYEBP?:D93:2.3,*/)*,)**(0'(1&*1&*1&*0'*1(+0*.0+//*.-+.,+0+,0)-0(-1(-1)-01/23/..*'**"57*PUAmv[|Ši€k~“j™jƒŸn€ n~ m€¥q‡¬x¯|‹­zˆªx„©v§v§u¦w¦y¤y€¢}}›yw‘tp‡mh|cYkUMZHDH9=?299-23-23-34.34.34.45/54/54/650761961:72:72961940940:2/91.91.80-50-4/,4..4..3/03/01/01/20.1..0--/-+.0)02).0*.0*.0*.0*,/+,/+*1-,1-,0/+0/+10+10+10+10,11/1111/010.10.2.+3.+3.*92,92,;2+<3,>4+@6-@6-A7.B8/A8/B90A8/A81@70>5.>5.=2.=2.<1/;0.;0.<1/=20=2.B3.E2.L..R+0V'/U&.P'/I).C/.<1+;2)?2)G0(R/)_.*d/)i9/k;/u<3}<6…;8‰;9Š;7ˆ:6‰>8†@8†B9…B9…C7†B7‡A7‰A5ˆ@1ˆA/‡@.‡@.‡>-ˆ<,ˆ;+‰:+Š8*ˆ9*‡:*ƒ:)<){=(x>(x>*‚>1{7.z7.z<1v;-w=/|A3{@2€B7ƒE:†H=ˆJ?†J@‡MBˆODŠQHŒSJŽ\QŽh[‹tb…g€‹m~–vž|ƒ§ƒ„©‡‡ª‰‹ªŠ‹¦‡‡ ‚ƒš~}˜yq•oi”ifgfŒeg‹gd†e_~_Zw[PhPK^JBP?8D62:/.4*,/(+*%2&&5%(4%(2&(1'(/)+/+,.,-+++*+-*+-(,-(,/',/',/*+-.*+1++0+'.+"88,PUAiqYv„c{Œhyh|–iœl}Ÿmyžkz m¥r‚§t€¥q}£p}£p}¥s~¥v~¥x}¤x|¡x}Ÿzz™wuqn‡je|bWkRN[GDF9?=1:8,45/45/45/560560560761761872872;83<94<94<94<73<73<41<41;30;3083072/61.61.5106216213122011/00./1-.2,04+.4+.4+.2,.2,,2,,2,,3/.3/,3/,3/,21,21,32-32.32032032032051051.61.61-;4.<5/=4-?6-A7.B8/E8/C9/D:1D:1E;2D:1C90B8/@5/@5/>3/>3/=2.=2.=20=20>31>31@51E31M02T,4X)3W(2R)1K,1B30:6-77+:6*B4)M2)X/)^/)f:1j;3s<7z=:‚<:†<;‡;;†::‚;7>8A8B9ƒC:ƒC:…@9„@7‚C2‚C1ƒB0„?/†=.ˆ<.‰:-‹9-‰7+‡8+…9+‚:+~=+x>*v?*x>*9-|/'‚8/„>4w4+s5*}A6}C7E:€G<‚I>ƒJ?„KB†MD‡QG…WJ|aNzjQ€pYu]‚|bƒ†i†“uˆ|ƒ£~§‚‚ª…‚¬†©„¥€{ž}z™wz’pzlxlwŒkumr‰lm„gkd`rX[iRR[HHL=@@4;7,70&5*$6('5''3''1'&.)&+*(++)+-*',('+*)+*)+***,+),+),-)*,#$2*'50*86*BC5UZFfpWn}^tˆeqŠbuex˜iw›ks™htšiwŸkz¢nx lwŸmx ny£s{¥u{¥w|£wyžuzœww–tsŽom†hd{_WkPN[GCC7>:195,560560671671782782872872983:94=:5>;6>;6>;6>95>95?74?74>63=52;63:5294194184184395484373243151240/6-06-.6-06-.4..4..4..4/,40-40-40-51.32-32-43.43.43/431542540841850940:5/=60>7/@7.A8/C90D:0G:1H;2F<3F<3F<3F<3E;2C90B71A60@51@51?40>3/>31?42@53?53@72C52I35P16T/6S.5P05J22C52=90<:-=:+C7)I6(Q3)W2)]2+d3,l50v64}77‚87ƒ77‚66~75}:4}<6}>5€?9ƒ@8†?9…A8€B3€C1B1ƒ@0…=/‡;.ˆ:.‡9-…9,ƒ9,‚:,<,|=,y>,x?,|=,‡5*‹2,¡LE§XQ‹A8|90‚F;€K=yH:zJ<{M>|N?}OBQE‡UJ‚_LrkOosR|uX‡w]yb˜iŸ‹s ”z––z|‹£ˆ¨…§‚€¤~{Ÿy~™vƒ‘p…ŽoƒŽp€pp{ŽpwŒms‡kj~bfv\_hSV[GOM>GA3@6*=0';,'9+(6+'3+(/,',-'+.').().(+-(-,*/+*3)*4(*7'*7'(3($<3,E>4IG8QR@]bKgqVjyZn‚]k„\l‰]p‘bq•eo•do—eršfuŸmrœjq›itžnx¢rz¤vy¢vyŸvvštw™vu”rokj…fc|^UlON\ECC7@91;4,671782782782893893983:94:94;:5>;6?<7?<7?<7@;7@;7B:7B:7A96@85=84=84<73<73<73<74<74<74;639529338308/09/.8/080.80.80.61.61-61-61-52-52-63.63.74/74/540540841952:63<94=84@93@70A8/C90D:0G:1H<0I=1I=1J=4J=4J=4I<3F<3D:1B8/A7.A81@70@72?61?61@72@72A83?74@85B86D97G96H96H96H94E80E8/E9-E9+G9,I9*K9+Q7*Z/&d/'n3-z63ƒ98‰;9‹;:‹=;‹A>‡@:‚=6<3:3‚<4ˆ=7‰@7ƒA5B3‚@2ƒ?2ƒ=1„<0;/€/|>/}>/=/†9/1+¢<8ÍlfÙ~y­ZTŒC<ˆLAN@tJ(+C&+E$+C&(F5-LC4VQ>[YD`bJgmQiwVj{Wl‚[g‚Wf†WlŽ\o”an”an–bršfsko›jo™irœnw ty¢xxžwu›vs—su—vs’rn‹li„cb{[TmMM]CGH:E<5@707827828938938939:4:94:94;:5<;6?<7@=8@=8@=8A<8A<8C;8C;8C;8B:7?:6>95>95=84>95>95>95>95=85<73:51;30:0.:0.91.91.91/91.91.72.61-61-63.63.63.74/74/74/540651952;83<94?:4B;5B;3A8/B:/C9/E;/H<0I=1J>2J>2K>5K>5J=4J=4F<3E;2C90B8/B92B92A83@72@72A83B94A:4?82@93B;5D=7F=6G<6K<5N;4M6.N6,Q6+Q6+Q7*P9+P9)V6'f6*r6,~;3‰@9•D@›HDŸJGŸLF QJ™LDŽD;…;0„7-…7-Œ91=4ˆ>5‡>7†=6…<5…<5=4}=3z>3x@3vA3x@3z>3<3ƒ:3ˆ73‘31˜(&³=;ì|zý•’Åhc–G@‰K@xH:nMhV>lX@t[E`L€hPysQ„wUžt\´l^É__ÓV\ÙQ[×T\äouÙzx̆|À~µ•€«•}£’xŸvœŠrœŠt™u•u‘‘u‹’s†‘s‚‘r|‹ny†ju{amoWgbN_TBUE5R/(9/&7.'6/'81):/)=.+A,+F)+H(+K'+H)'TB4YQ9B?:D?;D?;E@8E>8D=7B;5B;5B;5B;5B:7B;5A:4A:4A83A83A83@72@64>71>71>71<71<71;60:5/85.85.74/74/961961961:70<71=82A:2B;1C:1D<1F<2J>2K?3L@2N@3N@5N@7N@7L?6K>5I<3H;2E;2E;2B90A8/@91?80?80?80@93@93<5/MD=M@:K:3T@9R62O0+a<6\3-`5.`4+^/'^/%f6,m=1q=0‰I=G;—I?ŸKAŸF>›>7š=6žD;¦ND¤PE¨VJ«YK¥OB™A5—;0›>6“98‘98Œ65†52†84„?8|@6r>1rB4oA2q=0v:0‚72Œ43’-1š',ÈHIèbaÅEDÍWUáyv«VO†F<„VFmR=i[AibFjeHj`En^D|dLjT’bL²m]ÑnhÛX]à;Lç-Eò+Hõ0Lö@YìI\ä[eånrâ{|Û€}Ûƒ؉‚Ãv½wº„x¶†x²ˆx­Šw¨‹y¥Œxš€o™~m˜xi“oabY„UM{IBxA>u:9:49:49:49:4:;5;<6>=8?>9>=8>=8A>9A>9B?:C@;D?;D?;FA=E@8E>8E>8E>8E>8D=5C<6C<4D;4C:1B92B92B92B92A83A83@93@93>71<71;60;6096/85.74/74/96196/96/:70<71>:1A:0B<0C;0E;/I=1J>0L@2L@2N@3N@3N@5N@7M?6J=4I<3H;2E;2E;2C:1B90@91@91@91@91A:4B92D93I81L/+V.,j76u99{;;…ECƒD?„H@…IA†G>ŽIB™NH¡PL¢OG“D7”B4šB6ŸC8 >3œ7-œ7-Ÿ=0£C5›?0™@0 E3¤G6§F6®H:¶NE´LM¯HL¥@D™9;‘98>:ƒ@8x>3o>0zI;…LA„?8„,+’).³9DÒLWÜKNßMMÊ>=À@?Ð`\³YQ„@5‚TDyaIe[@^]?ihIslOvgJ~dK–cN¼dXÖ_[æUZëANò,Eþ%Dÿ&Hÿ'Iÿ.Nù3Nò6UE8[O5cZ9gaAifEnrOz‚]z‰bt†^r‰_p‰_p‹`qŽ`u’dw”dw”dw”fs’ix–rz—xy–x~˜}ƒ„…‡ƒ›…™ƒz’zr‰om„hhd`y[TmMNaERSAVPBUOC8938938939:4;<6<=7?>9@?:@?:@?:C@;C@;C@;C@;D?;D?;FA;FA;FA;E@:E@:E@:G@8F?7JA:I@9H?8G>5F=6E<3F<3E;1D:1D:1D:1D:1D;4D;4D;4C<4?80?80<71;60:5/:5/94.94.96/96/:5/;7.>7/@9/B90C;0E;1F<0I=1K?1M?2M@0NA1M@0P?5M?4L>3K=2I<3H;2E;1D:0C:1C:1A:0A:0?;2@<3@<3D;4UD—I?–LAœNB¬RJ¾URÌOSÄLK¥@4B0 @0¥?1¥;.£7+¤8+§=/«E6¡>+˜7$:'¥>-¬A/²C2¶D:§02¯:B¹DL½LRºMR­KL–A>‚71{8/v6,x2*„1-œ37¹=GÕGWèM[âFIÏ53Ð:9½31ÈNKÆc]”J?Œ[J}cLj_CgdEtoOpQhJhN°hYäbbõQZôDQö7Iý1Jÿ2Nÿ/Mÿ*Hÿ2Oü0K÷1Jõ5Lò4Mð2Kó3Ló7Pò@XïC[îF]íIaëNcêQeèUhèVkåSjäRiãOiäNiçNlëPoòSsóVuþh…ña|å[tÕUlÍYlÉdr¨R]r-2^&'Y0,W:4Q?5B:-:8)>B1LN9VO3aV6e_?heDquT†e~ŒiwˆdxŒiu‹er‹dr‹cvŒeyhzizj€•v„›~Šž… Š’£—¨–˜©™–¦™‘¢’‡˜†zypƒmg~b^wYTmMPcGSXDXUDYVG7827828939:4;<6=>8@?:A@;BA5G=3F<2E;1D:0D:0E;1E;2D;2E<3E<5E<5@91?80=82<71;60:5/:5/:5/96/96-;7.;7,?8.@:.C;0D0K?/M@0M@0M@/M@0O?2O>4L>3K=2J<3G:1E;1D:0D;2D;2B;1@<1@<3A=4B>5F<3S81[*&‰:?¾T`ÙTeæUfãUcËJOŸ30–:/‘>0™A3®F=ÅIGÕBHÍ>@±B7§F5©B3¬@3¯?3°>3³B4´D6²G5©B/£<)¤;(©<(«:(®6&­3(¶97º9=½7>¼7<¿^õ@aøCfö@fõ?eõ?gø?hüCmÿErÿIsÿOuÿQuþUvòSqçTnåaxÖfv·Wb}15j0/X1*P8,G>/>A.;D/?G/PK._T8g`CokN||`ˆŽr‡‘v}‹qzq|s|szozŠm}Œoƒ’uˆ—z•£Šœ©•£®¦±¡¬´§±¹®°·°«µ­¡«¢” ”ƒ‘‚s„qh|c]tXSlNPdHRZCWYDYZH671671782893:;5<=7?>9@?:BA/K?1M@0M@0NA0O?/O?0O?2N=3N=3J<1I;0G;/D:0D:0D<1D<1B;1@<1A=2A?3B?6K=4\5.w32­LSÛ]iæM_å@Q×6E·&+¨1)7(’:&—<)¬@3ÃD=Ô>?Í;;±?5¨B4ª@2­?2²@5¸C9¼H;»J<¬>/ª?/¨=+¦;)ª9)°:,·;/¼<1ÊFAÎDAÐ>?Ð79Ö7<ÞBEâLNÝROÄC>ÆKCÍTLÔSMÙKJÛ?Bà5>á27Û4.Ú7.Ð1+Ï:4¿84³@9µ[P–UC{N9‚bI†kP„`F’[F­fTËrdçmhêEKò:Dê9Cç=8@?:@?:C@;DAGB>GD=GD=HC=ID>IE2I=1G=1G=1F<0F<0E;1E;1D;2C:1A:0A:0@91@91=82<71;60;60;7.;7.;7,<8-?9-A;/D0L?/M@0NA0NA0O?/O?/O?2N=3M<2L;1I;0G;/F90C9/C;0B<0B;1@<1@>2A?3B?6N;4m84—FEÄY_ÛWbßCQÞ8FÔ3;½++­1'¡8%˜:!—9 ¤;&¶>.Ã:2¾71§7,¢:-¥9-§7,¯:1¸B8ºE;·E:®>2­?0§<,¤6'ª6)¶>0ÃD;ÊG=¾8-Î@6áD?ìBBô=Aó9>ë27Þ.0Û75âGBèSLåNGÜ=9Ù10ã/2ê67Ù1(ÞÒA>ÒGBÝOMëWWíNRïDMð:Gö5F÷2Fø.Dû1Gþ7Nþ8Sý8Tý8Vþ9Wÿ;\ÿ>aÿAeÿCkþ;eýjý?mú>nø>oô=mö:jÿHrÿ;aÿ?dÿKnÿKn÷NmïUoãZnèr‚Âaj˜ILt:8\6-P9+PC2UM:^QAreUˆ|n•‚Ÿ‘¦§Ÿ¡¦Ÿ–œ˜•ž›ž§¤¦¯¬¦¬¨¢§£¦¨£µ´°ÂÁ¼ÌÉÀÑÎÅÕÐÌÕÐÍÔÎÎÕÏÑÑËÏËÆÊ¿½À°²¯˜Ÿ˜€Œ~m~k`t[WnRVjNS`FV`EX`H560560560560671893:94;:5=<7>=8A>9C@;DAHC?HC?GD=HE>ID>ID>JF=JF=MF2@@4P91r1/¨JKÁSV»>D½06Â03Á//º1)©1!£9#œ=!™;›< ¡=#¥;%¤6%ž6) 8-¢6,¥4,­81·@:¸C<²@6±B7­A4¨-Ï>-Ù5+á*&í"%ú%+ÿ*1ÿ.4í)*ç.+á3,ß4,à3,ã2,é0-ç2+Ú2%Ö6&Ð2&Ï7,Å6.½>7È`UÒq¦eSVBŠM:£WIÈf[ßd_çRTèCIõFMí@Dß??Ô@<É@8Æ@7ÑFAãMLïJNô@Kù9Hý7Hü5Hø3E÷6Gú;Mú8Pü7Rû6Rý6Uÿ6Xÿ9]ÿ;aÿkÿ?mÿ@qÿBtÿBuþBuüBtùBpÿFmúAaþEeÿKjþKkÿVtÿ_zõ]tòj~æp~Óow®^aƒCAg6/hB7sUJye\Œ}v£–­£¡²®«¶¶¶²¶¹ª¯³°·½¶½Å½ÁÊÀÃÊÃÂÊÉÆÍÕÎÖÝ×ÛâÚØçÝÛéÝÝæÚÜåØßä×ààÔÞÙÏØÊÅ˺ºº¢§£ˆ’‡t‚qexb\sW[oS[jM\iK]gL561561561560561671872983<;6=<7@=8B?:DAHE>HE>HE2G=1E=2D;2C:1C:3A:2A:4@93?74<73<71>7/>7/<8/=90>:1A:2C<2D=3H@5I?3L@2MA1NA0P@0O@-O@-L?/L>1M=0L;1J91I81E80C90@9/>:/;;/<<0=>0>?1A?0S8-‡<7Ä\[ÊZY®86«.*²1+®.%­2#¬9&¬B*ªF,¦D'£A&£A&¢<#Ÿ9# 9*£;0¦:0¦7.­<4¶C<·E;°@5«=0¨Dá;=Ö<<Í@9Á>4¶8,¹6.Ä94âHHé@Eð;Dö:Hú:Iø8G÷;Iû?NþAUÿ?Vþiÿ>lÿ>oÿ>pý>qú@rø@t÷Aq÷CjÿMmÿSs÷Jhë@`ýTsÿg…ÿe‚÷]wï_xçh{Üp}Æqx§gg^X{ZQ—~wª™’¾°­Ä¼ºÆÂÃÈÇÌÇÇÏÃÃÏËÊØÌÊØÑÊÚ×ÎßßÔäæÛéêàëíãëïåæòèæôèèðäæîáèíàéêÝçäØâÑÊÑÁ¿Â««©‘–z†xl{hbu_`rXbpVboScmT21/320431651875984984984;:5<;6==5??7AA9CC9EE;EE;HH@HH>HHLC4J@4KA5MC9LB8F=4B90E<5C:5@93?74@85?75<74<42C:5B94A96>95?:7>:7?;8@<9B?:D@7G@6J@4L@0O@-O@+L?,G@.F?/I;0K81M53K65J88F;9B?:6904,«=,­<,³=/½C4ÄF8À>1º2&Ç9+Ì8*Ð8+Ö8-Û7-â5.é3/î1-ñ.,ô.-ó0,ñ1,ê5*ã7)Ý:)Û:(Ü9&Ô3Ð3 Ï8'Æ7'¾6(ÂB5ÏSIÈNCÏSKá\Wî]ZðPRí>Cò9?÷?GêAFßCDÕAAÈ?9»<3±;/°HH>HH9H?:F=8B;5D:8A96?74?74@85@85=85;62=4/=4/=52<74=96>:9=<:>=9B?:D?9G@6J@4M@0O@-P?+L@*B?,B?.F<0H:1J65I56F35@65@<9:=6;>5@@4E<-J9)^B4€L>®QB«;- 2#¡6&£:'ž7$ž9%£>*¡;%§<(®?+³@-¶=,·9*¸6(µ7)ª9)¥:*¤9)¥;+¨>.«A1«B/«@.®?,«:(±<+¿E6ÆH9Á?1¼8+À6)Ë7+Ï7,Ð9.Ñ;-Ô8·;1®:-ª<-«=.¶E5ÆL?ÔNEÜGCã?>ï?Bú?Fþ@JøCJ÷CLúDPÿFTýBSù>Sü>XÿBaÿFhÿCiü?iù@jùBpüFvþJzÿK{ÿJzÿHtõKpñQsõ\zù_{ûXwüNqýEkúDlïEiÚKgÈ_p±nukLI~t°–‰Ì²¥äÓÉìãÜëçæêéîêçòíâóöãùûáúÿâýÿçÿÿìÿÿòþÿöþÿùûþú÷ýúõü÷ôúõòøïðôëîñèíïæëæÝàÜÖØÊÆų²®ž¡šŽ“Œ‰…ˆƒ•‡‰€†Œ~/.,0/-10.21/43/540762761:94::2<<4>>6@@6BB8CC9DD:IF=IG;JH;LI8MJ7NL7NL7OL9KI:NKBTRS_^fihxmm…lkŠkhƒ`YiYQ\OGRH@KH>GG=EE93>:1=9083-94.;60<92=:3>;4?<5@<3E>4G?4I?3L@0O?0P?/P?-L?,<;&:=(?<+A;-B71A62>42;30=84B;5H94N2.Y,)l/.‡;= FE£;0¢2$Ÿ1 ¤9'¥<)ž7$ž8"¢<&¤;&ª=)±A-¶A/¹>.»<-¾:-¾-­>-­<,²?-°8(¹>.ËL=ËG:¼6*º2&É9.Ð6,Ô6+Ô8,Ö:.Ø:/Ü8.ã6/è3,ð0-ô.+ô.+ð1)ç2'Ý6&Ô8"Ò7!Ý8$Ü5#Ú9'Ú>/Ó=.È6)Å9,ËA7É<5Í>8ÙEAåKIêJJéCCì?AëCCÞCAÕD?ÍB=Â=4¶:.®8*«:*¬;+¬8)ÀD8ÔNEÝIEà@@è>A÷BIÿHPôAGô@IùCOýGTþEUú@Uû?XþA_ÿDfÿCiÿCkÿFpÿIwÿK{ÿL|ÿJzÿFxÿHwÿKtúNtÿZ|ÿa€ýUvñCdûIkÿTvÜ?\ÍI`Ø{…¸||aC;|n®ŽÕ³§óÛÑûìåúòðù÷ú÷ôýôìûúëÿÿêÿÿìÿÿîÿÿóÿÿ÷ÿÿûÿÿýüÿþûÿýùÿúøÿøöÿõöýóôûðôùðóðçêåßáÓÏξ½¹­®¨¢¥ž£™£—£«žž¦—›£–/.,/.,0/-10,21-32.54/650880991;;3==5??5AA7BB8CC9HEQPL^]bmlzzz’‚¡€‚¨€€¦{u—rkŠe_{YSmTLdMEZG@PB;2?=1@<1?;/A;-F?/H?.K?/M@/O?0O?/P>0L?/@=*?>,@=.?;/?;2>93=:5:94<94D95M51V-+j)-„28ž8C«>C¦7.¥7(¥:(ª?-¨?, 9&¡8#¤;&¥:&«<)³>,¹@/½>/Á=0Å=1Ä>2½?3¶=2²9.®8*¯9+°:,²:,³9*¶;,¹;-ÄB4ËE9È>3¾1'À2(Í9/Ö5+Ø4*Ú6-Û7-Þ7.á6,æ3,ì1*ó0,ô.+ô/)ï0(ä2&Û4$Ò6 Ð5×2Ú0Ú4$Ü<.Ö=/Ð9.Í=2ÒD:Ä5-Å60Ê;5ØD@âMIåKIÞC?Ö=8Ó@9ÎA8Ç>4¾VádtþŸ§ÓŽd92lJ>¥ynÐ¥œõÔËÿéãÿôòÿýÿÿüÿùóÿüïÿÿïÿÿðÿÿòÿÿôÿÿ÷ÿÿûýÿüûÿýúÿüøÿúøÿù÷ÿö÷ÿõöÿôøþó÷öëïìãäÚÕÒÉÆÁº¹´³´¬±´©°¶ª¶¾³°¸­¬´©10,10,0/+0/+10,21,43.54/77/880991;;3==3??5AA7DA8IE:LF:NH:PJ:RK9RM:SL:QK=OJDVTUfdqwx††¨¹“ÃÆŽ‹À‡ƒ¶{w©pmšid_[~UPnNJaKGXEBM?=B;7895296/85,85,671783891;;1>5L?6K>5F<3B92=82:946;47<59<5>:1H4-Y2-w78”?D¦>E§9<ª;0ª<+«@.¬A/©@-¥<)¦;'«>*§8$­:'µ<+¼=.Á<-Å;.Ê<0Ê=3Å?6¾>3º:/·7,·7,¸8+º8+º8+»7+ÇA5ÍC8Å8.Á1&Æ3)Ë7-Ï5+Û4+ß3)á4-â6,ã5,ç5+ì1*ð/*õ/,ö/*ò/)ì0'â2#Ù4!Ð5Ï4Ö1Ù/Ø2"Ø6)×9-Ô:0Ö?6ØE=ÖF>Í@7É<5Ë@9ÖKDÙNGÒE>Å;1Å=1Â<0ÀCòBLûIUÿJYýFXúCYûC]û@_ûBdÿElÿJsÿNzÿO|ÿLyþIvÿJwÿTÿT}ýJqùImÿStÿVtøNiëD^äF]êXkÿ–¢ÿµ¼óžŽHFk.)¦kcÍ–óÈÁÿãÞÿñðÿüýÿýÿü÷þþöÿÿöÿÿ÷ÿÿøÿÿúÿÿüÿÿýýÿýúÿüøÿûøÿùøÿø÷ÿöøÿõ÷ÿôøÿôøýñóóéêäÜÚÖÑÍÍÊÃÉÉ¿ÊÊÀÊÍÂÉÐȾȿ·Á¸65143.32.10+10+21,32-43.66.77/880::2<<2>>4@@6B@4JD8ME8OH8RK;TK:TM;SL*F@*G?*H@+IA,IB0IA4HB6HA9G@:K=?ž51§;/ª<+ª?-ª?-©>,©>*¬?+°?-«8%²9(¹:+¿9-Ã9,È:.Í:0Ï<4Ë>5Æ;4Â91Á8.Á8.Â9/Â8.Ã6,Å7-ÑC9Ð@7Ã0&Ã,#Ð7/Ö<4Ó2*à3,ä2(ç2+è3*ê3+í2+ð/*ó-*ö/*õ.)ñ0)ì1(á4$Ú5"Ñ6 Ð5Ø7#Ù3#Ö3$Õ3&Õ5)Ô8,Ô<1Ö?6ìYQáRJÓHAÌC;ÊE<ÌI?ÈE;À>1¼:*¼;(¼:*¹:)·:(¸:+¼>0¿A3ÁA6Á<3Å<6ÏA=×EEÝGHäIMëLPèBFê@CðCIùKTþNYüJZüF\üF_øA_ùBaýEiÿJpÿNwÿOzÿNxÿLvÿQ{ÿRyþOvýOtÿVyÿ]{ÿSoîD^úTlîQd÷dtÿ’žÿ‹•ôƒ‰Ç`d§MMµjgΊXÿÞÙÿïîÿúùÿüþýûÿýúÿþûÿÿûÿÿûÿÿüÿÿûýÿûûÿûøÿûøÿüùÿûúÿûúÿøúÿöøÿó÷ýñóùíïòææçÝÛßØÒÛ×ÎÝÛÏàÞÒßáÖÜãÛÏØÓÅÎÉ<94;8185052+41*41*52+63,74-85.96/;81=:1?<3A>5C?4JB7MC7PG8SJ;WK;UL=UK?SJCSJK]Wcnl‚‚‚¦‘•Åš ÚŸ¦ê¢©ñ¡¥ïž ë™›å•˜Ý”•Ö‘ʉ‰½‚ƒ±zy¡rq‘fc~XVkPN\IGRFCLCBJ??K==G;:@;9:<94?;/C=-E@,F@*FA+EB/EC4CC7BC;AC>@ACBLCANEEOCHNAIL>HI>GDCHAA=2L:.gF7ƒOAI<Ž?2”8)¥>/©>,«>*¬?+­@,¯@-°?-±<*±8'¶8)½9*Ã9,È8-Ì8.Ò91Ô;5Ï:4Í:3Ë81Ë81Ì92Í:2Ì70Ë6/Ó<5Õ>5Ò91Ì2(Î4*Ø;2Ú<3×3*ä1*é1'ì1*î2)ð1)ò/)ô-(ö,(÷-)ô/)ð1)é3(â5'Ù6%Ò7!Ï7 Ô9%Õ8%Ó6%Ñ4%Ò4(Ó7+Ò8.Ð7/ãNGèXPçZSÚQIÌG>ÄD9¿@7¹>/¹<*¹<&¹<(¹:'¸9(º;*À>0ÃA4ÉD;Æ@7É@:ÑFCÕIHÖHGØGJßIKæFHèBDíDIõLSüQZûO]ûL]ûK`öD^÷DaùFfýIlÿNuÿOxÿOxÿPw÷VxóUvôTvüYxÿ]{ÿZwûQkòI`ýWköUgêM^ö^mâKZæTaåTa×XaÁefȃ~嫧ÿÔÑÿëèÿóòÿøùÿþÿûüÿûüÿûüÿüüþüúýýùúý÷÷ü÷ôÿú÷ÿûøÿüûÿûúÿøøÿóóýîñúëîðáäéÝÝäÙÕâÙÒæßÕëçÛñíáññåìóìÛæâÎÙÕ@=6=:3:7074-52+52+52+63,74-74-96/;81=:1?<3@=4B>3JB7MC7RF8VJ:WK;XL?:6@<1A>/C@/CB0BC3BD7?D=>D@CVCIaLRhU\o\br`dobbjd`afXWaJDlG>ƒSE•XF“J7‘@+™>+¨A.®@/®A-¯@-°A.´A/²=+°7&µ7(¼8+Â8+È8-Í6-Ñ7/Õ81Ø;4Ò72Ð72Ð72Ñ82Ô94Ô94Ó83Ó6/ÞA:Õ8/Ñ3*Ö8/Þ=5Þ=5Ú91Ü5,ç2)ë0'ï0(ñ0)ô/)÷-)÷,(÷,(÷-)ô/)î2)é4)á5'Ú7&Ô7$Ï8#Î7"Ï8%Î7$Ï6&Ð7)Ò9+Ñ7+Î4*Ë4+ãNGód\ë`YÕOFÄA7º;2µ9-¸>)¸>'¹<&¹;%º9&½9*À2ÊD9ÊA9ÎE?ÕKHÓLIÎGDÍEEÖHGãIIæCDèEHòMSøSZùR\÷O^úOaôH^õG`øGdûIiÿNrÿQxÿRyÿTzðUuïZwù^}ý^|ùUpõMgùOiÿYnÿ[mÿctðM^÷TeôO`üUgõL_äR_À^_»vqל˜úÉÅÿåãÿíëÿôôÿÿýüÿÿûÿÿûÿÿûÿþýýýýüúþùöýøõÿøõÿùöÿúùÿúùÿööüððøéìôææëÝÝèÚÙäÙÓèÞÕðèÝùóåÿúìþþòôúöáëêÓÝÜB>5A=4@<3>:1<8/:6-84+73*62)62)73*84+;60>93A<6E>6I@7MC7RF8UI9WJ:XK;ZLA[NHTIMXR`gd|~§’Ê— ãžªö¥°ÿª³ÿ«²ÿ¬´ÿ¬²üª±ùª¯ó¨¬ì©«èŸ¡Ú™šÒÁ±tr¡he’]Z‡XR~XQzYQvVOnMH_C?M?:@?;:B?8>>4@B5BE:?D=:CB>FH?LUDVnQfƒarŽisŽtvx„o€€^lŠ[c’WYžWU¦VM¦M?Ÿ@.œ9$ :$§<(¬=*®?,±@.³@-´?-¶=,¹;,º6'¾6(Ä6*Ë7-Ñ7-Ö8/Ú91Ú83×84Ø95Ù:6Ø93Ø61Ø61Ú83Ý:3æC<à=6Ú70ã@7þ[Rÿlcÿ]Tç?6å3)í2)ñ2*ô/)ô*&õ(%ø(&ø+(÷-+ó0,í2+ã1'Ú0#Ô1"Ô4$Ó:(Ì;&Ê<(Í<)Ï<*Ò:,Ò9+Ò8,Ñ7-Ú@8Ï81ÜGAôc^åXQËB<Å@;·4*·:&¶<$¹<&º<&½:(¿:+Ä<0Æ>2Ç>4ÌC;ÙPJßXRÔOJÃ?:À?:ÏHDÞHGâGEæJKïPTñRWïNVíKXñL\ùRføOf÷Ke÷JfüMlÿQsÿRvýRvôWvîXuõXuû[wÿ\xÿZsÿWnÿVkÿbuýVgÿ\mÿ[lñFXôDXÿQeîVeÆfgªieʋ網øÒÏÿëçýïîüø÷ùýüùÿÿùÿÿúÿþüþýÿþüÿûøþöôþùõÿû÷ÿùöÿöôÿööÿõõöèèæØØãÕÔÞÐÍáÖÐñçÞüôçþøèÿüéÿÿóúÿùèñðØáàC?6B>3A=4?;2=90;7.:6-95,73*73*73*84+:5/=82@;5D=5H?6LB6QE7TH8VI8WJ9YK>ZMEUJNWQ_eby{¤ŠÉ”⛦õ£®þ«´ÿ¬µÿ®¶ÿ¯·ÿ°·ÿ¯¶ü¯´ø¯²õ©ªë¢£ã˜˜ØŒŠÉ€»uq®ie c^˜`WŽ`Vˆ]TVPtMIbFCTBAIAAC<<:AB=FEACD?A?@DBEOMRWVdch†quš}¢‡}Ÿ’}œ {š¥pŠ¤`u¬Yi¶VaºQU¸HF°@4¬;)¬<&­='¨8$¨7%«8&®9(°8'²9(µ7(¸6(»3%Â4(Ê7-Ó:2Ù<3Þ=5ß<5ß<5á>9ß<7ß<7á>9åB=èC=çB<æA;å@:æB9ä@7Ü8/Õ1(Ø6+ëI>ÿ[Oñ@6î6,ê+#î)#ø-)ÿ/-þ,+ö((ú0.õ4/ï61ç6.Þ3)Ö2&Ô2%Ï6&Ë:'È;'Ê<(Í:(Ï9*Ð7)Ñ5)Ð4(Ó9/Ï5-Ô=6åPJåTQÛLHÍB?·1(¼;(»=&½<'¾;'¾9(À8(Â:,Ä:/È>4ËB8ÕOFÜWPÒRIÃD=¿C;ÌHCÛLHßJFåMLëSRíTWëPVéNVìOZ÷VføUhùSiúRküRmÿSqÿStÿRuòMmøUtÿ\zÿ_{ÿ\vÿUoûRiûReüUf÷RbÿZhÿZhóN^øScþYißS^¶`_—^W¶}Ù©¥îÈÅýáÞùééýøõúüùùÿÿøÿÿ÷ÿýúþýÿÿýÿûûÿ÷õýøôþùõþùõþöóÿ÷öÿõõöêêêÜÛäÖÓÝÐÊßÕÌïåÛüõåÿùçÿýéÿÿïúÿøèñîÛáßEA6EA5C?4A=2?;0=9.<8-;7,84+84+73*84+:5/=82?:4C<4G>5JB7ND8RF6TG6WG7YIBZEJpW]‚cs˜r—¥z§®«²{£¸vœÀp“ÂcƒÀTnÂG\ÐK\ÑHPÄ<<º5.¸9*µ<'°<%°;'°;)²:)´;*·<,»<-À<-Ä<.Ä6*Ë8.Ó<1Ù?5ßA8á>7à<3ß:4Ü71Ù4.Ø3-Þ93æA;ìE?éB<ä=5ã<4Û4,Ø4+Û7-Ô2'Ì, Ö6*éG:õK>ò@6ï4-ð-)ö,*ú,,ü,,ø*,ð*)ì/+è2.ã5.Ü4+Ø1(Õ1'Ñ3'Í7(Ë:)Í:(Ð:)Ò;*Ó:*Ô8+Ô8,Ñ4+Ö<4Õ:5Õ<7åONíYWÙEEÂ3/À;,¿<(À;*¿:)Á9)À8(À8*À8,Æ=3ÇA6ÏJAØUKÒRGÆG>ÀD:ÇG>ÖKDØICÝLIäSPåSTâPSâMSåNWòXdöZhý[pþZrüVnúRlûQlÿQpýGmÿPvÿZ}ÿ[{ÿVrýTkþWkÿ\mûYhøZhûamö`kí]gïfnìfmÉ\_ ]W{OF˜mfÁ˜”ݺ¶ðÔÑôàßÿõôùù÷ùÿýùÿÿ÷ÿýúþýÿÿÿÿýÿÿøùüùôüùòüùôýøôÿùöÿøöùîìïäâåÚÖÛÐÊÜÒÈîäØýöäÿûèÿýçÿÿíúýôêðìÞãßIE9HD8FB6D@4B>3@<1?;0>:/:6-95,95,95,:5/<71>93@;5E>6I@7LD7OF5RE4UE5WG8WI>XMKXNW^Zqpp–€†ºŒ–Ô•¡é©õ¨°ù©±ù­³ý°·ÿ±·ÿ²¹ÿ´¸ÿ´¸ÿ¯±ü«­ø¥§òŸžê—–⌋ׂÍ}yÅum¶pgªf`ž_ZYX„QQuGGcA>Q=5DH8BT=C`@EnCJ€OU–]d«fx¿kÉnšËo˜ÉiÈ`ƒÉWxÆIgÄ;UÆ2HÙAPàEMÑ;<Æ71Ä?0½@,±:$­6"­5$®5$³5&¶7(¼8+Ã;-È/Û?0Ü@3Ü@3Ò6*æLBåJEÎ50ßGFóZ\ßIKÕA?È2ÈF9ÏOBÎPDÆH<¿C7ÁC7ÎH?ÑF?ÕJEÛPKÝROÙMLÚKMÜKPëX`ó[güaqÿauúXmõOgõMgÿNkÿOuÿRyÿUwÿTqüTmý[pÿcuÿjxÿguúboõamídlãflÙhjÎghµfa^TeG<^U©ˆÍ«©åÇÅïÚÙÿóóùøöùýüøÿÿ÷ÿÿûÿÿÿþÿÿüÿÿùúþûöûûóûúõþûöÿýùÿûøþôòøíéêßÙÞÔËÝÓÉíæÖÿøåÿþèÿÿæÿÿëøúïêïèãæßNH:MG9LF8JD6HB6F@4D=3C<2?80>7/=6.=6.=60>71@93?:4C>8EA8KC8NE6QD3RE2VF6VH;ZMGVMR[Whlk‹~‚±Š“Î’Ÿãš¦î¦®÷©¯ù­°ý¯³ý°³ÿ°´þ°³ÿ¯³ý«®û¨«ø¤§ô ¢ïšœé“•âŠŒÙ†…уÉ{u»mk¬dež_a’Y[„RQsNHbWFY_CQmBLEM˜MT¬U]¼[bÊZhÙRpâRußTuÙPlÒJbÍBWÇ8JÅ.?Ô8EãCKæGKØ>>Í>6ÌF:ÃH6¶?+·>-¸=-º<-½>/Ã?0ÊB4ÐD7ÕE:ÙE9ÚB7Û>5Ù;2Ù6-Ù5,Ú3+×3*Ô1*×4-Ú7.Ý90ß80Þ7/Ý6.Ü5,Ö/&Ù5+×7+Ï2#Í1"Ò9)Õ>-Ô;)Ø<-æD7øJAýD?ù64õ*-ö*-÷/2÷67í55â30Ú1,×0*×/,Ù0-Ù0+ã81ä91â:1â;2à<0ß=0Ü?0Ú>1Ñ7+ïWLøaZÓ;6Ñ;:æPQÜFHæPQÏ<4Ê:/Æ8,Å9,Ä:-Ä<.Ã;-À;,¾:-¾<.ÃA3ÇH9ÇI;ÂD6¾@2¼>0ÉF<ÊE<ÎIBÕPI×RMÕNKÓKK×LOéZ`ð^hüfrÿhxü]qòPeóMeýNkÿVzÿTxÿRrøTmö]qûhxûjw÷erüetó_mì`kêkrßruÃjfªd\žla}fVXH9kXJ”|r½ œÞÂÁîÖÖþîïûõõûûûûÿÿùÿÿýþÿÿþÿÿûÿÿúýÿþùûþõûüöÿþùÿÿúÿþúÿûõÿ÷òñèáäÜÑáÙÌðé×ÿúäÿÿæÿþåÿÿê÷ùëíðçèéáQK=PJ1ÃE6ÃE6ÅF7ÉE8ÎF8ÑG:×G<ÚG=Ö>3Õ;1Ö8/Õ4,Ö3*Ø4+Û4,Ú6-Û81Ý<4à=4ß<3Ý90Ü5-Ü5,Û7-Ò.$Ý;0Ú=.Í1"Æ-Î7&Ò=)Í:&Ì9'Ô8)â:/ó=9ÿ@@ÿ<>þ37ó,/ê,.á+*Ø*)Ô+(×/,Þ44ä88é99ï75ð74î73è71ã7-Ü6*×5(Ñ5&Í5(çPEÿmcÛHAÈ42×CCÓ>BêVVÙA<Ò>4Ë8.Æ6+Æ:-Æ/Á=.»9+»<-¾?0ÀA2¿A2½@.¼=.»<-ÃC6ÄD9ÈH?ÐPGÓRLÐOIÒNLÕONé^cîagûitÿnzÿduõVjõQiÿUoÿWvÿVtúXpñ^pônyöw€íksÞXañ`mñ`mìboïs}숊Ì|ªth™yjskXON:_VGƒqg¯–’ÜÀ¿ïÕØüéëþôõýûüýþÿúþÿþýÿÿýÿÿûÿÿùþÿÿûùÿõúýöÿÿúÿÿúÿÿøÿý÷ÿþöùðçíåÚéáÔôïÜÿûåÿþåÿÿãÿÿèùúêòôçîðåSM=RL4D=3B;3A:2@93A:4A96@;7A@;CC;IE9MG7OG2RF0UF1UH5WK?RHFXR^jg‚}§‰“Ä’žÚ˜¢ç¤§ö¦§ú«©ü«¬þ¬­ÿ­®þ¬®û¬®û¨¬ö¦ªô¤¨ñ£§ð¡¨î §í¤è›¢æ™žâ’šÛ‹“҆ʃ„ˆ·ƒ¨ˆyšmˆšcz©Xi»Q_ÏMYàIRèAIê=Aé=;ã>8ÝC9ÖH:ÎI8ÅF3ÂC0Å@1äTIàG?Ú;7Ø64Ø88Ø:;Ñ98È74À:/¾<.¿;.À:.Â8+Ã7*Æ4'Æ2&Î4*Ð3*Ñ3(Ô3)Ö3*Ù5,Ý6.Ü8/Þ=3Û=2Ü;1Û8/Û7-Ú6,Ø4*×3)Õ3&Ó3%Ð4%Ï6&Ò=)Ñ>*Ê9$À2È:&Ê4%Õ1'ç51ú<<ÿ=@ÿ7=÷37ê-1á-.Ù--×/.Ü43ã9:é;=ð9=ö26ø03ô01í1/ä1*Þ2(Õ1%Ï3$É1$Ñ=1új_äTLÈ95Ð@?Ë:=äRSäJHÜC=Ñ:3É6.Æ8.Å;0Â<0¿=/º;*¼?-½@.¼?-º;*º;(½;+¾<,¼>0¼>2ÀD8ÈLBÌPHÊNFÌLIÐNLèaeìaføhrÿo{ÿhx÷Zk÷UjþZrÿYsû]tîaræjtë}€ñ‡‰èwyÚ_dñgtþm|óeuëlwö‘•ì¢ŸÄ”Š¢|hjUHQSK>PJ>êDFå@DÙ8=Î65ÍB;ÈD8ÉC8ÇA5Æ>2Ã9,Â6)Â2'Æ2(Ë3(Î4*Ó5,Ø5.Ù4.Û4.Û4,äB7Ý=1Ù7,Ú6,ß9-ß9-Û5)Õ1%Ø8(Í2 Ê1!Ï9(Î8'Ç4"Ê7%ÔC0È7&Î8*×6,Þ5.æ3/î53ö:9û?>ÿLKúHFòBBì>=ê<=ç7:å26æ,1ô+1ø)/ô,.ï/.è1+à4*Ù5)Ó7(Æ0!À.ôdYë]SÏ@:ÔDCË;;ßMMêRQàHEÓ;6É6/Æ8.Æ9/Ã;-¾:+¾<,Á@-ÀA.»<)·8%¸9&½<)¾?.µ7)³7+¸>1ÁG:ÅK@ÅIAÈIBËJEåa_æ^`ñdjþnwþkuó]iðXeø]mú^sõbtèdoãlrì~ù‹ö†…éqsøryÿy†õaqàXföˆ‘ÿ´´Ð®¢ ›‡]jPDR9QT?jbU›ˆÚÀ¿òØÙöàãÿô÷ÿúýÿþÿýüÿþüÿÿýÿÿûÿþùýûÿúôÿòòþòùÿôüÿöûýòÿýôÿÿôÿÿóûõç÷ñáþùåÿýçþüãþýáÿÿêÿÿñýýóüüòXO@WP@WN?UN>TK2G?2H>2F@4GC:GE9JG8NI6RJ5UJ4UJ4VK9XNDULMZTbkhƒ{~§‰Ã‘™×˜Ÿç£¤ö¥¢ù¢¢ü¡¢ü ¤ÿ¢¨ÿ£«ÿ¤­ü¡ªõ¡©ñ¡¨ì¥¨íª©ï­©ó±©ö¬©ø ©ø—§ò’¡â–ŸÖ¦£Î¶ž¾¹…œ¸gz¿L]ÑERß>Mç;Gç?ß<=ÝEBÉ:4ÊD9ÊF:º1)ÛJEèJIéCEë>Bè;?æÚ<=Ô<;ÏB;È?7ÊD;ÑMAÍK>¿=0¸6)½9,¿7+Ã6,È5-Ë2*Ñ/*Ô/+Û2/Þ5.çA5ß9+Ù1$Ý3&å9+ç;-ß8&Õ2Ï2Ì4Ê5!Ç4"Ç4"Ê4%Í5'Ï5)Ê0&Ï2)Ñ5)Ò6*Ò4(Õ3&×3'Ü4)à2)æ3.ë52ë33é/2ç-2è-4í.5ö-3ö+/ï+,ì/-ê5.ã9,Ù7(Ð4%Ã-Ä3"çXHéYNË;3ßNIÅ41ÚHHáOPÜJJÔC@Ì;6È80Æ8,Ç9+È<+Å<*Â;(¾9&¼;(»<)º=)º=+·<,´8,µ;0¹=1»?3»?3¾@4À@5ÄA7ïjaõpiêc_ômjûqqìadôgmÿpyÿlzûhxðdoébiëdjîlnîqoîqoûy{ÿ}…ùZlücwßbpû¬¯¶ªš}‘u]rQJY:LR8snZ¥•ˆË·°íÕÓÿîðÿö÷ÿ÷ûýøüüüþþÿÿþÿÿÿþÿûÿþðÿôåþéæûêïÿîøÿöüÿôþÿóÿþñÿýñÿûîÿúêÿùæÿùãÿùáÿùáüúåÿÿõÿÿûÿÿûYPAXO@XO@VM>UL=TKÌLAÁC5¸:,·9+¹7*¿7+Æ6-Ë4-Ñ2.Ø3/á53ä84ä>2á;-Þ6)ß5&á5'á5'Ú5"Ó4Ñ9$Ë9"Ç9%Ç:&É<+Ë<,Ì8,Î4*Õ3.Ö5-Ó7+Ï7)É6&Ç4"Ë4!Ï4"Ø2$Þ2&ã0+æ.,æ,-æ,/æ-2è.3ì+.í,-ì0.è2.à4*Û5'Õ8'Ò9'Õ?.»*ÖD5Ð>1ÙF>ëVPÚB?ØBAçUVâRRÜKHÔC>Í=5É9.È9+Ç8(È;*Ä;(¿:'½<)½>+º?-¹@/¶>.²:,´;0·=0¸>1º?0½?1ÁB3ÅC5ëi\òmdçb[ðkfõolèbañklütxÿq~ÿo|öirí]fêY`ñbf÷qpþzxûvwÿx~ùRdþ[pä]nö¦©©¦“jŒkZtON_;SZ;us\©ÖĸöáÜÿõñÿúúÿúûÿûüüüüúþýûÿþúþÿõÿúíÿóáÿéáýæéÿëóÿñøÿòýÿòÿÿñÿýïÿýíÿúéÿöåûóàúòÝüôßü÷äýúóüüúÿÿý\PB[OA[OAYM?XL>WK=VJDã=?å==åAá>CàBè;?ã9<Ü68Ö66Ñ96Ì;6ÕHAÄ;1¾5+ÅA5ÍK>ÆH:»=/·8)º6)¿7)Ç7,Ï6.×50Þ71æ95é=9×3*×5*Ú6*Ü6*Ý5*Ý7)Ú:*×>,Å4!¿4¹4!¹6"¼8)½8)½3(À-%ã@;å>8Þ=3Õ<.Ì9)È7$È7"Ì7#Ò7%Õ3$×/&Ù.'Û.*Ü.-Û//Ü./Û,)ß0+à5-Ü5,Õ3&Ð4%Ð9&Ñ>*ÔA/Â1 çSEÒ;0ÚA;ÞC?èJIðTUíUTçSQãOMÝJCÖC;Ï<2Ê8+Å6&Ä7&À7%¼7&¹:'¹<*·>-µ=,²=,°:,±;/´<.µ=/·=.¹?0¾C4ÃE7Ü\Qêg]äaYðlgöpmça`ìfgójqàR^ï^kõhqòemñ`gôeiùqqþxwútuÿnuóJ]øRhä[mñœ¡£œŠa€`UoHOd=W`Aww]­¥’áÑÂÿîæÿøñÿüøÿþúþÿúûÿüûÿýûÿýùÿûóÿöèÿîÜþãÚøÞáùáèûåïüèöýëýþìýúéÿúêÿ÷æúñàôèØòçÕöëÙøñáþúñýüøÿþû\PB\PB[OAZN@YM?YM?XL>XL>UI;TH:SG9RF8RF8RF8RF8PF:LE;KGEç=Fã?FÖ:>Ñ?@ÑEDÆA<º61Å>:êZYÝABã@Cæ=@ã:=Û89Ó97Ð<8ÎA8ÏE;Â:.»2(À/¸9(½8)Â9)Ë8.Ò:/Ù80à91è;7ë>8Ø1+Ù2*Ü3,Ý5,à5-ß7.Û9.Ö=/É7(Æ:)Á<+¾<,¿;.Á;0Å<6Î95ëC@í@<ä@7Ù=1Ï9*Ç9%È:&É;%Ï<(Ð7'Ï1%Ñ1%Ô1(Ö3,Ô1,Ñ/*Ó2*Ó5,Ó7+Ð7)Í5'Ê7%Ì;(Ì>*Ì;(Ï<,ô^PàF<Ò3/Ò.,æ@@ûWXÿusÿroÿjgö^YçPGÕA7Ç5(½. Ä8'À8(»8&¸;)·<,µ=-²=,°<-¯;.­<.°.¼B3ÀF7ËMAß`Wâa[ôpløtræ`aä]aæ]dÖHTçYeógrôgoöelükpþsvþvvûpsûenñDXôKbåXkë’– •ƒ_zYQlCSh?\gEy|_°ª”çÜÊÿõèÿùðÿûñþþôýÿ÷ûÿúùÿúöÿøòüóêûëÚøÞÎóÒÊëÌÏìÎ×îÒàðÖéóÛò÷áöõáûöãüõãõìÛíáÑéÝÍíáÑñèÙüõíü÷ñþùó\PB\PB[OA[OAZN@YM?YM?YM?WK=VJ@Ð@?ÐIE¿>8³2,ÈC<àUPÜDCáACã?@á>?Ú?=Ô@<ÑD;ÏF<Ç=2À8*½5)½9*¿=-¿=-½;+½<)Â:*Ç;*Ï;/Õ;/Û8/à8/ç83é:5æ95ä52ä20æ21ç32æ40Ý2+Ô0'Ë1'Ë7-È:0Ä7.Á4-Ã40Ì:;Ý?@ë8;í76ä71Ø5,Ì4&Æ5"Ä7#Å:%Ë=)Ë8&Ì4&Î5'Ô8,Ô:0Ó9/Ð8-Ð>1Ê;-Å8'Ä7%Æ9'Ç<)Ç<)Ç:(Í>-Í:*Ø>2áC:Ô/-ä::à24ß56×53Ö;6ÞC>åKCêQIêSHèTHäUGË?0Ä?.¾<,¸=-·>-´?.°?/®>0¬<.¬<.¬<.¬=,­<,±=.·A3ºD6ÆLAÞbXâc]ðnlôrrå`cå`eç`g÷kvûoz÷kví`hð_fýlqÿx{ÿy|úmsø^jóAWôC]èUh懣“ƒg]YtI^uIhwPˆf³²–èâÌÿúéÿýíÿþïýÿòûÿôøÿôôÿñíûêäòáØî×Åèǻ伺޺¿Þ¼ÇàÀÍâÃØæÌãëÓìîØôñÞ÷òßóêÙìàÒèÚÍêÜÏïáÖòèßñèáòéâ[OA[OA[OAZN@ZN@YM?YM?YM?XL>XL>WK=VJQI>QI>SK>UL;XM9XM7YL9XM;WK?ULGYSWe^nnjƒut–~}¥„…±†‰´‡‰¹Š‹Á‹ÈŽÏŽŽÔÕӔӋʃˆÀ|¸u|²ov­io«ljœ€lˆ“cy®YvËPoãBdð7Vö4L÷8Hï@EåFBÝJCÛJEáGGèCJò=Nð>LäCI×CCÌA>ÎIDº;4°4,ÉI@ÕLFØBAÚ?=Û;;Ú<;Ø@=ÔE?ÍG<ËG:À8*Á8(À8*¾9(¼9'»8&½:(À;(Ä;)Ê=,Ò<.×;.Ü8.á6.ä6/è50é32è./é,0î02õ47õ77î45æ21Ú.*×4/Õ62Ñ32Ï/1Ò/4Û6=ê:Dí06î02æ3/Ü3,Ñ5)Ê7'È9(É<(Æ8$É6$Î6(Ó:,Ú>2ÝA5ÝA5ØA6ÓG8ÉA1Â;(À9&Ã<)Æ=*Å<*Å8&Ì:+Í7)Í0'æC<Û2/ï?Aã/2Ú*,Õ1/Ò5.Õ81Ö90Ò8.Ì5*Æ2&À1#ÎE5ÆA2¼=.µ:*±9)¯9+«:,ª:,«;/«=0¬>/¬<.«<+­<,²>/µA2ÉSGàg^àc_êjiînoæchðjqõoxúq{ýt~ömuîbködnÿrzÿx~ÿquúipøWfùAYô@[êQfá~ƒ¬—†ykmˆ]o‰ZyŠ`—r¶·˜ßÞÂùôÞüúåÿÿïûÿïõÿïïÿëçúäÜïÙÐãÍÅÞÁ°Ö­¨Ó¦ªÐ§°Ó«¶Ô®¼Ö±ÇÚºÒßÁàæÌèêÔòíÚòéØîâÔìÛÑêÙÏìÛÓéÚÓæÙÑåØÐ[N>[N>[N>[N>ZM=ZM=ZM=ZM=YLUL=XLNÝAEÔFDÈA=ÉHB´:/±7,ÎOFÉB<Î=8Ð64Ï10Ð51Ó>8ÏE;ÈF9ÃD5¾9(Ã:(Â:*¿:'½8%¾9&¿:'Á:&Ä9&Ë:)Ó:,Ù9+Ý7+á5+ä3+ê3-ë*+ñ*-ø-3ü/4ÿ17ÿ37ÿ38ý58ù8;õ8<ò9>ò9Aô9D÷7Fû6Hþ5Eô+5ô-2í12ã4/Ù6-Ð8*Î;+Î=,Ë5&Ñ8*Ù;/ß=2â>4ä=4å>5ßA6ÙJ<ÏG7ÉA1Ä<,Â9)Â9'Æ8*È9)É2'Ó9/á@8ëD>Þ0/à..ë46è66Ø3-Õ7.×90×:1Õ;1Ò;0Í:0É;/ÖL?ÌF:¿@1´9*°6)¬6(«7*©8*¬;-­=/®>0­=/«<+«<+­<.±=0ÀKAÚdZÞc^èkiðosêinõrzüvîfp÷oyùryöjsþlvÿwÿv}ùhoùcn÷RbþB[÷ZM=ZM=ZM=ZM=ZM=YLVJ>XL>YN5É83Ç/,Å*&È/*Í:3ÌC9ÃC6¼>/À;*Ä;)Ã<)Á:'Â;(Ã<)Â;'Ã8%Ä5$Ê7%Ô8)Ù7*Ý5*á3*å3)ê2*õ33ÿ58ÿ8<ÿ4:ÿ-2ÿ(-ÿ(-þ+1ü-3ö)0ò&1÷)6ÿ,?ÿ*Aü 9ó/ö"0ó(.í,1æ0/Ú1,Ô3+Ñ5)Ð6*Ô6+Ý90æ=6ë>7ë:4è71è50â92ßH=×K<ÓE7Ë=/Ä6(Â3%È6)Ï8-Î4*Ô6-æC<ß82à21Ò ì89å63Õ1(Ò4)Ò4)Ï5)Î6+Ê6*È5+Å7+ãYNØRFÊH;¾@2·;/µ;.µ<1µ<1¯9-±;/±=0±=.¯;,­9*­9,®:-±<2ÐYQÜb]ìppôvyîmrõq|ör}ÿzƒÿ‰ÿy€ôhq÷epÿq|ÿuÿktø^jöOaÿA^÷8WéG^Ûntº‹™©„‚žn~šg—hœq¡©‚´º–ÈÍ­ÕܽÌÙ»ÁÔ´²Ì©§ÂŸž¼˜š¶–²Œ±†‰³†µ~¹„•À‹œÂŸÄ‘¨Å™²È¡¾ÎªÉÒµÚÙÄæßÍêÞÒéÖÏáÌÉÛÆÃÔÁ»Î½µÈ·°ZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=XK;XK;XK;YLYM=WMCWLHXNOZPX]Ub`Yia\rjfokŽsp›vq§{u³ƒ~ÁŠƒÉŠƒÇˆÀŠ~¼ˆy²ƒr¨†r§t«‡l£†\„HL¤B9¶A:ÍC@Þ@?è:;ô<>ÿDE÷><ó=<ì>=ê@AëBIêCMëANãALÐ>>Å@9¾?6·>3°,º7%Á:'Ã<)Â;(À9%Â9&Å:'Ç:(Ë:'Ð9(Ö6(Ø2$Ú."à/%ì7.õ=5õ82÷40÷0-ø**û&(û%'û%'û%'û&*÷!)ø".ÿ'7ÿ(>ÿ!;ÿ6ý1ÿ'8ï#,æ#+ã+-Ý--Ô+(Ò-)Ü41â62è64î66ò65ò12ï./î,,å/,Ü92Ñ:1Ò91ìSK»"Ä+#ßF>È.&Í.(Þ<7èE@â:7Ø/*Ú.*â51å<7ß>4Õ<.Ï5)Ë3&Ì5*Í;.Ë;0Å8.ìbXàZOÈC:¹6,º:/¸8-±3'´6*°0%°2&®2&¯4%°6'²:*´<.³=1°:0ºC;Ö\Wìppñsvöx|ûyƒõq|ÿ|„ýw€út}üs{ÿr~ÿr}ÿmxÿgsü`nôI\ÿ>\ÿ>[äAVÔek´•€’¡zƒm}™f~”c‡—j”Ÿwž¦ ¨ƒœ¨„’£Š£|€Ÿvzšqyšo|r vƒ¤u‚­wƒ³y‹¸‘¼„“¾†—¾‡œ¾Œ¢½§¼“¯½š¾Â§Ï̹ßÓÇãÒÊÜÇÄÔ¿¼Ìº¶Á²«¹ª¥ZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=XK;XK;XK;YL]P@[OC[NFYNJZPQ\SX_U^_Wfd\tibƒng‘qjxp¬€y¼‡€ÄŠÄ€Á~ºt«Œn¢—q¤¡u¨šjž™W{=Aª5+±5+Â<3Ó@8Ý>8è?:óA=õ=;õ;<ô;@ñ>Bî@IèAIâ@KÚAFÇ<9½=4¶<1±;/«:,®:+½A5ÐJAÚG@ÜA=Ô63Ð51Õ@9ÍC8»9+²5#½8'Â;(Ä=*Ä=*Ä;(Æ;(Ç:(Ê9(Ï9(Ï6&Ô2%Ú2%ã5*ê8.ï80ð91ç1&ç/%ê.%ï,&ö+'û+)þ,+ÿ-.ü*-ú%+ú$.ÿ'7ÿ$;ÿ7ÿ3ü0õ0ö.9õ3<å*1Û(,Ü.0Þ02Û+.ñ:>ô7=÷4:ö26ö/4ø03ù25ô87Û2-Ú;5×82äE?äE?Î/+Ñ2.Á"Ô51á?:èE@à=8Ø3-Ù2,Ý60Ý:1Ô:.Ï9*É5'Ç5(È9+Ê<0Ê<2Æ9/ícYáXNÉ@8º4+Â91Ã:0¿6,Â9/¿5+¾4*½4*»5)¸6)µ5(´6(°6)´;0»B9ÓYTèljïqtöx|þ|„øv€þ|„üyùv~þuÿsÿp}ÿkwüdqý_nöI]ÿ>\ÿ>\éCYÓeh®Žw‰˜oz•bu’\xŽ]cŠ•k˜p‹•p…”mp‡]l‰]h‰\g^k_q•ey›izŸk¬t„±vŠ·|»}¼“¼‚–½†›»‰›µ†¡³‹­¶—¾½¨ÏÆ·ØÇ¿ÖÁ¼Ï¼¸Æ·´º¬©²¤£\L<\L<\L<\L<\L<\L<\L<\Lù:Aö=Eï@GæAHÙ@EÏ@BÀ;6¸90±9+­9*©8(­9*»?3ÏF<ÙD>×96Ù74Ú;7ÜC=ÝOEÎH<µ3#¾9(Á:'Ä;)Æ=+É=,È<+É:)Ì9)Ï7)Ï2#Ó/#ß4*î=3ô?6ñ91é4+à4&ß5&â2%å/$ë,$î+%ñ+(ò+(ó+-ð(+ò&/ø(6þ%:ý7ü3ø3ô%7ò0;ó5Aò8Cð;Dðä,6ð2<ó/;ö.9ö-7õ.3õ.1ó/1í42Ü0,â=9Ú64ß;9ÿmjåCAÑ/-Î/,Ù:7ß@<àA;Û<6Õ7.Ö5-Ö5+Ò6*È6'Ã6%Â6'Ä8)Å;.Æ<1Æ<1Å;1ë`YáTMÉ<3¿0(Ë;3Ñ>6Î;3Ò=6Ø=8×<7Ô=6Ï<2É;1Ã9.¼6*¶6)¹;/¼@6ÏTMãgeíorøz~ÿˆû|ƒû|ƒûyûx€ÿwÿsÿn}ÿgvû`pü[mõG^ÿ\ìFZÎ`až~ev…Zi„Qh…OmƒRt…X{ˆ]}ˆ^x„\q‚X`zM_Pa…UeYn•`uœg} j~£mƒ¬r„²tˆ¶x‹¹y‹¹y¹z‘º~”º“±•¬€›©†©­’ºµ¢Ç¹®Ë¸²È¶´¸¬¬ª¡¢ —š[K;[K;[K;[K;[K;[K;[K;[K;ZJ:ZJ:ZJ:[K;[K;\L<\L<\L<]K=]K=]L<^M=^M;^O<^O<^O<^Q@^Q@]OB[OC\NE[NF\OI]OO^P_bTmdY{i^‰pgœ|t­…{·ˆ{³™…º¥…´¯€ª¸z¡ÆxŸÑuœÌcŒÈMlÜFRßA@ÕA=ÏE;ÌH;ÍG;ÓE9ÞA:î@Aõ0ÎD:Õ<7Õ31à;9åA?áD?èSLßUJ¿:+Á9)¾7$À7%Ä;)É=,Ê=,Ë9*Î8)Í4&Ò2&Ù2)å9/ñ>7õ>6ð5.ä/&à6)Þ6)à4*ã1'ç.)ê-)ì*(ì**ê),è',ë'1ò)9ö&<÷!;û=û%Aû6Hä(6ç.<ÿP\ÿ`lÿP\ò;åGDÛ=:Ú<9Õ:5Ò80Ñ7-Ð6*Í4&Æ3#¾5#¹6$»8&¿;,À9é=9æ?9á@8Ù?5Ð<2È:.Á9-»9,»=1ËNHàc_ìnoú|ÿ„ˆý~…øy€øy€üyÿx‚ÿt‚ÿn}ýetù^n÷VhóE\ý8Vÿ^N>\O?^NA]OB^PE^OJbNYbQdcTqdZ}le‘xr¢w¨ƒv¤”}§¬†«Â‰©Î‚žÚw”ál‰ÛXwÚD_óBTúDPïJPáIHÐE>ËE<ÐF<ÙD>èBBð@Cõ@GõBHíDGßCDÏA=Â?7¿@7µ=/®:+«:*ª9)®8*»;.Ì?6áFAâ=;îBBëAAÞ;6ãJBæXLÕK>È@2À8(¼3#Á8(È<-É:*Ë7)Ð8+Î0%×3)à8/é;4í:5í60ë0+å,'ã0,ã1-ç10ì31ó25ö37÷48÷6;ì-5ê,6í.=ñ0Có-Fö)Gý+Nÿ3Rô9Lå3?ð@Mÿ_lÿlzÿWfõCSõ>Pî3Dí3Aí3>é6<ã99Û83Î4*Ç/$Ë2*Ç.(Ð72òYTö\ZòXVÛA?âHFÜB@Ô<7Î70Í6-Ï8-Ï9+Ê7'Â5#¹8#³9$µ:(¸=-¹;,¶6)¼7.Æ=5ÛNGÙEAÎ50Ð1-á>9ç@:ã81ç51ë20î21ë52ç83á:2Ø:/Ð9.È:.¾6*º8+ÈIBÜ_Yënlû}€ÿ…‰ýƒõv}öw~üyÿx‚ÿsƒÿk}ýdvù^pôSeôF]ý8Vþ=ZïL]ÀTRz_BWhÑC?ÖEBãEFèBDîAEíCFçDEÚEAËB:¿?4»?3±;-©8(¨9(ª9)°8*¼:-Ê;3èIEé??ë=>å78Ú2/ÞA:îZPôh[ÚPCÉA3¾5%Â6'Ç9+È9+Ë7+Ò8,Ñ0&Ú6-æ;4é;4ê40è/,ê-+ë--ó49õ3;ø3=ü3=ÿ1>þ0=ý1=ù1>õ0Aò1Bô4Kõ5Nõ0Nö-Oÿ1Xÿ>_æ3HùO\ÿanÿ_nÿWfûP`ôDXé8JóAQê:GÝ2:Ò/2Ê2-Â8-½;+¼:*Ä:/À2(ÙJBúkcÝLGáPKÏ;9Ï;9àLJÔ@<Ê70Ê7-Î-±9)¯3'º:/ÊD;ÖGAØC=Ô72×2.ç;7ì:6è2.í2-ò,-ô,,ò./ï31è71â:1Ú<1Ò>2Â6)º4)ÅB:×XRçjhú|}ÿ†‰þ€„õv}÷xýz‚ÿx‚ÿqÿi{ûbtø]oòQc÷I`ÿ:Xý?[ðO_ºQNqX:Sf8]uEa|InSv†Y{ˆ]~‹`g‚—l€œl}Ÿm|¤o}¨p€©o‚ªnƒ©l…©lˆ«qˆ®qˆ°r†³r„³oƒµp…·r‰¸t‹µv‰¬tŽ¥wš¨„°´™ÈïØ̾ÚÑÌÂÂÌ«±Á›¡±ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8[L9[L9\M:\M:]L:^K<`J<^K<_L=^M;_N<^O<^O<^O:_P;`O;aP>aP>aP>aPÉ@8¾>3¸>1¯9+¨7'©:)­<*´<,Á=1Ï?7ß=:å99ã03â/2à42Û94æMEülaòh[ÙQCÆÍD>Á63É;7äUQÕF@É91È8-É:,È9(È9(Ä=)±?'¦<&¨;&¬=*«7(¬3(¼=4ÓLFÖGAÝE@Û96Ü30é73ì51ë0+ô1-ý,/ÿ+-ú./ô1/í4/æ81ß;1Ø>2É9.½3(À;2ÏNHáa^÷yzÿˆŠÿƒ‡ùzû|ƒÿ{†ÿx„ÿn~þew÷^põZlëL`õIaü9Wû=YîM]²JGhQ1Qd6\tDf~Nuˆ[Žc„h†’jˆ—n‰žsˆ¤t„¦t§r}¨p¨n©mƒ©l…©l…¨n‡«n…­o…¯o°l€²k‚¶n…·r‡³t‡­t§wœ¬…²¹šÈƯ×νÙÒÌ»¿Ê¤¬¿’š­[J8ZK8[J8ZK8[J8ZK8[J8ZK8[J8ZK8[J8[L9\K9\M:]L:]L:^K<^K<^K<^M=^M=^O<^O<\O<`Q>aR=aR?bQ?bQ?aP>aO;bL>hOKgNRbP\cWkjfuv”}|œx—‘z–«•Æ„’Ú}…ðuzþlmÿY[ýDLþ/Iÿ5Rÿ4½=0µ?1¬;+©8(­<,´?.»@1ÊA7ØC=Ù74á85Þ..â30æ:6Ó0'Ï5)ëUGÿwjë[PÑC7Ê<0Ë;0É7*Í6+Ô:0Ú70ß82å63ç32ê01í12ô36ý4<þ%6ÿ#9ÿ"9ÿ"9ÿ!8ÿ6ý5ø6ï2î9ð%Bï(Gî&Jñ'Mÿ3\ÿEhÿbuÿ`l÷WcñQ]òP]ïMZâ@MÔ2=Ú=FÌ7;»/.®/(¦5'¢;(›?&œ>%ª9'²8+ÒVJ»;2Ä?8¾41½2/ÎC@åWSÕHAÈ91Ä6*Å6(Ä5%Æ5$Ã:(±<(§:&¨7%­9*¬4&¯1%Â?5ÛRJÙIAáHBÞ;6Þ2.ê41í1/ï-+ü22þ,/ý+.ù+-ó++í-*æ1*ß4,Ö8,Ñ=1¿2(¼7.ÈIBÙ\Xówwÿ‰‹ÿ‡Šû€…þ†ÿ}ˆÿv„ÿj|þ_s÷XlöTiêD\õD^õ6Uñ:VàLZ¥HC^K-Mc5Uo?b}JtŒ\€–g‡˜lˆ›nŠ r‹¥vŒ¬z†«wªr~§m|¥i}¥g¥g‚¦i‚¥k‚¨mƒ«m‚¬l®h~°i³j„¶o‰¶s‰¯rŽ¬x™°„­»˜¿Å©ËʵËͶ½Åžªº‹—§]K7\K7]K7\K7]K7\K7]K7\K7^L8]L8^L8]L8^L8]L8^L8]L:]J<]K=^L>\L<\L<[N=]P?^SA`SB_R?`P@bQAcRBdQBdNAdLBjMIhKMdPYf[lnk†w{ž€…­‰ˆ²ƒ©¥‡©¾ˆ Ð‚’ây~ðsqújbÿa^ùJWñ>Që:Lî?NïCQê@Kæ9Ê=4Á;0¸:,§6&¯A0­<,¬6(¿A5ÌF=Ì=5Ð72Ú85Ü71Þ5.Þ6-Þ8*Ý<*×:'Ó6%Ù;0ðSLòZOÙE9Ç8*Í>.ÔB3Ò:-Ô3+ðGBá//î5:ó6=î,7ÿBMñ'3ú&2ÿ)2ÿ(2ù'ý"*ÿ'/þ'/ð&ð)ù+7ê .ì&7ñ-Aç#;ÿXrç-Dÿ]lÿ_iþZcùU\õPWëHMÝ?@Í84Ë>7ÄA7·?1¦7&™2!™6#š;'Ÿ<)§8-®7/ÂE?¿;7½31Ä64Å54ÔDCÛLHÚKEÑD;È:0Ä4)Ç5(Ë4)Å5*¼1¹=3Ö_Yésqÿû„†û‡Šÿ„Œÿxˆÿh}ÿ_wÿ[uÿUoøLføEcñ:Yô;[æ?YÛ]i‹@;VF-L^6YuBg†Mw–]}œcg€¡jƒ¦n‚¨o€§n¦m~¥l}¥i|¤h}£f£e£f¥l¦m«l¬k~­g®f±gƒ³i‡µm‹´r°vŽ®|™´‰§½™±Á¤²Á®¦²°˜žz…‹]K7]K7]K7]K7]K7]K7]K7]K7^L8^L8^L8^L8^L8^L8^L8^K:\K;^L>_M?^N>[N=[N=\Q?^RB_SC]QA]OB_OB`NDbPFcOHeNHiMJgNQeS_g_tnny~¨€‡»‡ŠÁž•Ê£‹»«£¹xÓyƒê|{ôvjöi`ø]aóOZìFRòHSøIVõEPï?Jë;Eä9?à:<Ú::Õ=8Î?7Ç>4À/Ç8(Ê8)Ó;.Þ;4öJFä01ð6;ö6Añ.<ÿ@Nï'4ó$,÷%(û),ý+,ü*+ø((ö((÷+,ï$'í%(ê%,ý;DÙ'ð4CüARØ&6ÿjuÿbjþZaüW]ôOSåBC×<8Ñ>6¾8,¿D5¹H6©>,™/)(’(ž-%°:6ÑTPÎHGÃ54Æ45Ñ==ëWUØGBÖG?ÐA9Ç9/Æ3)Ê6,Ð7/Î70Ç=3Â91Â5.Ã2-É4.Ñ83Ø?9ÞE=äJ@ÞA8Ú6-Ý0*ç0,ò21û03û03ô02ó12ô01ó/0ó0.î1-ç4-ß9-×=1¿3$¾aP@`P@]P?\O>[O?[RC[QE[QG\OG\OI_PMcQOfTTgUUgUUgV\h]nli†sv£|ƒº‚ŠËŠÔ˜‘× ŠÊª‚´¹}ŸÏ€“䄆îvósjûeg÷S\íGQðFOöHR÷EQòAKî=Eä7=à7:Ù99Ô<7Í@7ÅA4¾?0¶>-­>-ª<+«:,¸B6ÇH?À;2»0)Ê:2Í6/Ð6.Õ7,Ø8,Ù7(Ù8&Ü9&à:*Ý4-Û4.âA9éOCÞH:È5%È2#Ù@2â>5õHDè13ò5;ù7@ø4@ÿESø2?ð)0ë#&ì$'ù13õ-/ï''ì&%õ12ë)*ö8:è+1â)1ë3=ÿR^ï=Kÿ[gþ^fñV\îOTðMRêEIÝ:;Õ74Ô?9À6,Á?2¼B5³=1¬7-¥3)¡,#œ' š%©/*ÇECÂ::¼,,È35×ABô^]Ð?:ÒC;ÐA9Ë=3Ì9/Ô=4Ú@8Û@;Û@<Ø=;Ý>;ãA?ä>>à::ã?=ëIDàB9Ý<4Ù5,Ý2+ç1-ð31õ12ø02ô02ô02ô01ó/0ó0.î1-ç4-ß9-Ø>2À4%º8+µ;0Ð[Tízwÿ“’û‡Šúƒ‰ý~‰ÿr‚ÿdyÿ[tÿTqÿNmÿFgû=_ô=\îEbßTg¢AHp;3SH2Qa<]xEf‡Nr“Zu˜^tš_xžc{£g{£gy¢fy¢fy¡cx byŸby a| bz cz¢f{¤h{§h{¨e{©a{©`}«`®`‡²jŠµn‹²s‰¬t†¦w‚žuy“no†lSeYAPM2A>^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^M9^L8`N:aP<`Q>]P?ZN>YOCXPEXOH[QO_UTbXYeX_iYcl\fk^glaildqok‚rtšy~µ†Ê…ŒÚŒŽáŽ‡×Ÿ‹Ó­ŠÄ³€©½yŽÌ{Þzò‚wÿsrÿcgùU\ôMTõGPôCMò>Gï-±=0¼F:ÌRGÇH?º5.º1)È91Í81Ó;0Ù=1Û;-Ù6'Ü6&à8+à5-Û2+à=4ìNBãK=Ò:,Ñ8*àB6ß7.ð>:é/0ð16÷4<ü8BÿNZÿLUý>Eò38â$&í/1ê,,ð22è**ë/.ò::Ñæ37Ý,2è9@ðEMÿXcóMWØ=CÚADáBFá>AÞ9=Ü89Ø88Ó97É83Â91½:2ÀA:ÍNHÖVSÐNNÃC@²72¶95ÏKIÙMLãQRïYZêRQñYVÉ51Î>6ÒB9Ð@7Ó?5ÙB9àC<â@;é?@ç8=ì9=ò?Cï:?è58ì>=öMJÞ93Û60Ú3+Þ3,å4.ì30ò21ô01ô02ö/2ö01õ/0õ/.ð0-é4-à8-Ù?3Â6'·5(³9.ËVOï|yÿ“’üˆ‹ý‰þz‡ýoücwÿXqÿOlÿFhÿ@cû9\ô?^éKdØZh…35g;0WO8WgCa{Kj‰Ps’Yt•\u˜^wby¡ez¢fw dv awŸavž`xŸ`xŸ`{Ÿaz cz¢fz£gz§fz§bz¨`z¨]|«]~­_†²g‹´nŒ³tŠ­s†¦u€qtŽii€dQcUDSL8G@^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M9]K5_M5`P9_P;\O>ZN@XOFXQKYPQ`W\g`hnfsshysg{sg}qh}ol}pq†rw—v}«z‚Á‡Ò„ŠàŠ‹å“ãŒÚ „¿žuŸ l‚¬nq¼vlÒviòsmÿllÿgiþ^`ûRWõFMï3Û=1Ú6*Ü4'â6*à3,â70ä=5åE9âF9ÞB3ÞA2â>2Û0&ê72ì0/ï.1ñ.4ú7?ÿPXÿ]dÿZ_ÿOSá.1ã03à,-÷EEè66Ü,,Û-.ë>@Ü25Ù37ÿbhà=BË*2Ê-4Á&*Õ;=á@EÛ6:Ù37ß9=Ü7;Í/0Ì43Í;;ÕGFÞRSì`cõilôekê^aÄ@>ÆE@å^[øhgÿopÿjjåKK×=;É40Ñ>7×D<ÖC;Õ>5Õ<4Ø:1Ü41î5;ñ-7ð,6ò.8ï,4ë,3ó9<þJKß3/Ü3.Ú3+Ü3,ã5.ê40ï4/ò21ô02ö/2÷/1ö.0õ/.ð0-ê3-â7-Ù?3Æ8*´2%²8-ÃNGï|yÿ’‘ÿˆŒÿ‰ÿw…úl|øatûTnýHgÿ>bÿ:_ú6\óAaàNeÂWap/+_?0[W>^lIe}Mk‰St’\u–_v™_xžcy¡cx buŸ`uŸ`u_vž_wž_xŸ`{Ÿaz¡bz¢d{¥e|¦d|§`y§^y¨Z{ª\}¬^€¬a…¯g‡®m‡ªp…¥sƒ r{•nrŠjexe[k^RbU_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N<_N:^L4_N4`N8^O:[N>YOEZSMZTT_ZahbprmzuŒ{u‘{q“zp“vp’qt“rxšt}¨w¶zƒÄ~†Ï„‰Ú‹ŒÞ–Ü™ŠÍ›…¶¢ƒ£ª„‘«~yŸl[šQ>¼MBÔQIâWRëWUñSRñKMí>Cå4:é9<æ9;à;9Ø=8Ó@8ÊB6ÀA0º?/³9,ºA6«5+£.$¾I?Ùg\ÙdZËUI¸<2¸6)À3)Î:0Ù;0Ú6,Þ3)ä6-ß1*ä71ã;2Ý9/Þ>0ãF5äB3ß9+ß1(é4-ð31ï-.í*.ô17ÿEJÿV[ÿ]bÿ\aâ9<ã9<Õ+,ôJKâ89×//Û57Ì()Ì'+øXZÝ>BÕ9=Ñ6:º#Ä(+Ü<>æAEÝ49Ù,2Þ17Ù05Í(.Ò37äKNöaeûhnùcl÷`iú`løbkÖLLÕNJê\ZêVTçMMãHFÏ42Î3/ÙA<àKDäOHßJCÙ@8×:3×6.Ü.-õ2:û-:ø*7õ'4õ)4ø0:ÿ>CÿJJà1.Þ3,Ü3,Ý5,á4-ç4/í4/ð3/ô02÷/2ù.1ø-0ö..ñ/-ë2-â7-Ù=1É;-³1$±7,ºC=ìyvÿÿˆÿ|ˆÿqöhxö_rùRlûDcÿ9^ÿ6]ú6\ðFcÑN`¢IMe5+VD0[Y@^lIe|NkˆRt‘[w•_x™`{ždz cvž`s›]rœ\s›\tœ]v^wž_{Ÿaz¡by¡bz¤b|§b{¦_x¦[x§Yz©Y{ªZ~ª_ƒ­e…¬k‡©m‰§s‰¥u„s|”ru‰pnlfwe_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<_N:aP6aP6aO9^O<[OA[RK\VV_Zakgvso†}z—‚~¡|¥}w£{u¥xv§sy©s}°x¸{„¿~†Ä„‰ÉŽÎ”“Íš“Ç •½«›µ¼¦²É­©Å¦”ªˆmœfJœE2¯A4¶@4ÂB9ÖHDèNNîJKì?Cë=?é;=ä<;ß=:Ù@8Ð@5È>1Á=0½:0¾?6¯4,§1'»I?ÑcVÖh[ÕeWÃOBº>2º4)Ç7,Ö90Ù5,ß2+ç60â0,ã4/â7/Þ7.à>1åC4ä>0Þ4%æ4*é0+ð3/ð..ï-.ò14ó78öBEöMRüY^éFKöQWØ37ëFJÝ8<æAEÚ7:Î.0Ñ05äHKÒ7;Ð7:¹#%Õ;=Û8;å;>ëÿ0=ú*7ü.:ÿ;EÿCHûABã1/ß4-Ý4-Ý5,â4-æ3,í4/ñ40ô02÷/2ù.1ø-0ö..ñ/-ë2-ã7-Ø:/Í>0µ1%±7,²;5ésqÿŠŠÿ‡ÿv†þi}óató[p÷PjúCbÿ7`ÿ7aù;_ìLf¿O[~86]=0NF1VX@ZeEcxMj…RrŽ[v”^yša{ždxžas›]p˜Yp™WqšXqšXt›\uœ]y_xŸ`x¡_y¢^z¥^y¤\x¤Yx¤Wy¥V{§X©_‚¬d„«h†¨l‡¥o†¢q€šmx‘jq…ij~cbv]_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<_N:cQ9cQ9aP<]P@ZPG\TR_Zaa_mtrŠyx˜€¨ƒ°~~°yy¯yu°wwµw|¾x€Á}…Ä‚ˆÄ…ŠÁ¿—–¾ ¼¬§»¶¬µ¾³±È¸«Ð¾¦ÖÁ¢Ñ»–Ьˆ¯oT®\G¤G5¨>0ÂG?àWQïWVñNOé@Cê=?æ<=â=;ß=:×=5Ñ:1É90Á80Á<5¹:3¸=5ÁOEÇXMÇ]OÑeXÓcUÂL>¼:-Å8.Ò91×4-ß2,ç60æ40á2-à5.ã<3çC7æC4â:-ß3%ê5,æ.&ð0-ï/,ð31ñ54ç-.â24çBF÷X]öW\ÿouåDJëHMà@Æ02Ö:=òHKî9>ð7?ø=Fò7Bè-8ô>Jÿ]gÿmwÿjrÿcn÷]gú^kÿaoÿ]nùYeò\]ãPIâJGÕ74Ò/0Ù54Ò0.Ø95ßD?ãJDâIAÙ@8Ó6/Ö4/Ü71è66ê'/ü0<þ2=÷+6ù0:ÿ>Eý?Aì44â3.à5.Þ6-ß4,á3*è3,ï4/ô41ö01÷/2ù.1ø-0ø..ò/-ë2-ã7-×9.Ñ?2¶0%²6,°61èpoÿ‡ˆÿ†Žÿp‚ücxñ\pôXn÷OiûBbÿ9aÿ`P@`P@_O?_O?_O?aQAbRB_O?]M=]M=aQAcSCbRB`Q>dS?aP>]P@^QI[QPZSZeapsq‰yxšz|¥~€±€¹}ºxz·rs´lo¶twÈv{Ì€ƒÊ‹Æ–—䤾²°»¼¹´ËƳÓÌ°ÙϬÛϧÜÏ£ÝУÙ˜٘Ѩˆ¸€g ^FËzgÖue½H?×QN÷ccéKLå?Aâ89ä::â:9Ü75Ù61Ö;6Ë81À5.ÇB;»<3¿I?ÆXK¹OAÎdVÑcTÌXIÅG9Ä:/Í6-Ø7/á6/ã4/ß0-ß2,à70ä=4à<0Ý7)ß5(å7,ä/$ê/&ì/)î1-î20ë40è51â64×79æJNõY]íNS×8=×6<ùX`ÿ~„ÿ~†ÿouÿgoÿipÿflõ\añX[ûZ_ÿUZÿDKü8Bû7Aö2>î+9ì0>ñ=HÿS_ÿ`iÿgrÿepþbmÿcnÿ`oý]gíSSßF@Ö85Ö41×11×/.Ø31Û94áD=ÜB:Ù?7Ö<4×90Û81à93æ66ð7<ó4;ó4;ö4<õ6;ò59ë33ã1/Þ3,Þ5.ß7.à5+ä3+é2,ï2,õ20÷12ø03ú/2ù.1ù//ó0.ì3.å7.à?5Ì8,¿6,¯/&¸;7ÒXWÿ˜šþ{ƒÿm€ÿe|ø\rðPhôGeüCeÿ;dù9`õNlÓRd‰=?P, C;&CG.KM5Y_CZjEcxMqˆZx’bx–`t•\r–Yq˜Yl•Sm–Rn—So˜Tr™Xt›Zuœ]uœ[t›XtWv Xw¡Wv¢Wv¢Uu¡Tt S{¥[{£]zž^u—[m‹Ub~MXrCSj>AW0?U/`P@`P@`P@_O?`P@aQAbRB`P@_O?`P@bRBcSCbRB`P@fVG_QF\OG^TSaZad`omkƒvw–wy¢{}®}¸x|¹quµkp´lo¶nq¾uvÐ|~Õ‰‰Ó˜˜Î¨§Ç¸¶ÁÉźÓαÛתâÛ¥çÞ¥æÝ¢äÛ¤âØ£ÛÑ ÔǛӼš»œ€©}dÅ‹wÊ}m´VJÒa[örpìZ[çKLã?@ç=>ë>@ç;;â66Û64Ö=8É83Ê?8¹6.¸>3½K@¶H;È]MÝo`Ô`QÆH:½5)Ä0&Ô6-Ü5-Û0)â51å95ä=7à<3Ü8.Û5)ß4*ã5*ì7.í5+í2+ë0+ç0,ã2,á4.Ý52Ö87Ø>@äJLóW[ú^bü\dþ]eÿaiôS[ïNVñQYÿ_gÿjqÿflõZ`óNTí4:ñ,5ô*6÷-9ñ'5å!-æ'6í7CþPZÿZdÿblÿdmÿenÿcmý[hõQZåEEÞ<7Û64Þ63ß55Ü30Ú2/Û62à>9Û>7Ø;4×:3Û81ß82å95ç:6é9;ê7:ë7:î79î79ì65å31ß2,Ü3,Ý6-ß7,â6,å2+ê1,ò1,õ20÷12÷03ú/2ù.1÷//ó0.ì3.å7.ß<3Ô=2Â8.¶1*·74ØZ[ÿ“ûs}ÿfzÿ^vùWo÷OiùFfû?bü^QA^QA^QA^QA_RB`SCaTD`SC_RB`SCaTDaTD`SC^PCbUM\QM[QRcYbkdtqm„vu•y{¤y{¬y~¶x|»nsµei°`g¯jn¸ruÆ}}ׇ„Ý—”Û©§Ø»¹ÏËÊÈÜØ¿åá´éäªíè¦ðé¥íå¤çá§âÛ§×Ï¡ËÃœ¸¯©››ƒk¨ƒp§o`œRGº]UÝmi÷uuï__äJLå@DëADì>@è8:â66ß=:Ô;6ÔA:Â70·7,·>3®=/¶F8Ûj\ßi[Ù[MÊB6Å2(Ñ4+Ù6-Ù2,Þ52éA>ìGCà=6Õ2)Õ1'Ú2'Þ0%æ4*è1)ç.)æ/)ã2,â7/á=4àB9Æ-(Ê43ÜDCðVXú^b÷ZaóS[ñQ[èFQêHSïOYü\fÿmvÿntôY_ã>Dé.5ô-4û2<ü2>õ+9í'4ö6EÿKW÷ISõPWøW_þ^fÿckÿ`i÷RYéBIÞ97Þ71ã75é<8ë;;æ95á51Ý60Ý:3Ù;2×90×90Ü71á83ç:6é<8ã99ã99å97ç98è88æ74á40Û2+Ú6-Û7-Þ8,â6,ç2)ë0)ó0,÷10õ12õ13ø02÷/1÷//ò0.î3.ç6.Ý90ÜD9Ç80»4.µ/.ä_bÿƒˆølwþbxþWsúPmþLlÿCfö:]ó;_ìIfÔSgDJl;4O>,=<':?(ED/FH0Q\U'B\/E_2Ic6WJ:ZM=\O?^QA]P@^QA_RBaTD`SC`SC`SCaTDaTD`SC_RB\PDZOMZQVbXcjcsqm†vu•xz£z|­w|´sy·mr´bi¯]d¬ag±lr¾x{ʉ‰ß•‘夡䶵áÇÄÙÕÑÎáÝÄçä¹ëæ¯îê­îè¬éâ«ãÛªÚÓ©Ë¡»¶™¥¥›™„“ˆv˜q™rc›bW³i`Ïrmû‹‰õutê[]æLNèCGí@Dìô@?ï=;æ95à72Ý82Ú91Ù80Ù80Ü71ã73è96é:7â:7à;9ã:7æ:8ç:6å84à5.Ú3+Ú6,Û7-Þ8,â6,ç2)ë0)ò/+ö0/ô22ô23÷12ö01ö0/ò0.î3.ç6.Ü8/àF<É91¾3.¶,,îfjÿy€øgtÿbyýTqþKkÿGjÿ>cò6Yë=^ãQhÄXeˆBBgC7[N;GF1AC-JH3EE-LU6Sc>btLlƒUp‹XnRkPiŽKgIhJh‘Kj“Mk”Pm–To–Wp—Vt›Xs›Uq™So—Pj“MgJeŽHdG`‡D]AWy=Rq8Mi6Lf6Ne7Of8Lf7Oi9Sm>UH8WJ:[N>\O?]P@]P@_RBaTD_RB`SCaTDaTD`SC_RB_RB^QIVMR_Xhnf{tp‰xt—xw¡xz«y{´sy·jr³`g­[c«_g°jr»v|Æ€„Γ•àžžä­®ç»½æËÉßÔÓØÝÛÎáßÆåá¾æâ¼äß¹à׶ÚеÎƱ¾µ¦­§›˜šŒŒŽ€‰…yŠ|q‘vk›si¨meºoi扄î~ósrñedñWYðMNîDEì@@ã:7à;7äB=ÞE?Ì<3Æ=3ÄB5¯1#®0"ÇI;ÜXKÖN@Ì=/Î8*Ð6*Ñ3*Ö42õUUÿkhú]XãD>Ü;3ß;2ã80â4-ã2,â1+Ý0)Ô0'Í/$Æ/$Â0#Å9,À4'Á3)Ë:5×CAÛEGÛBGÚ@HàDOëOZòVaòVaú^iÿgoóYaáBGê:<í57í38ï28ñ3=÷9CÿHSÿV_ä6?Ý4;ß6;ëADùJOüIMô;Aé13è51ë95ï<8ò<9ó;9ð:7é73â70ß;2Ü;1Û:0Ü90ß82ä73è64é75æ:8ä;8æ:8è:9è;7æ95á6/Ü3,Û7-Ü8.ß9-á7*å3)é1)ñ0)ô1-ó32ñ33ô22ô01ô1/ò0.î3.ç6.Þ7/àC:Ê70À1-À13÷jpÿqzúftû]túPmÿCfÿ=dÿ9cõ8^æEdÙZm«V[wE>dJ=aYFTO;KI4PI6GE.GP3L\8ZlFf|Nm…SmŠRlŒMhJfŽHgHg‘Ii’Lj“Ol•Sn•Vo–Ut™Vs˜Un•Rj’LfKcŒHaŠF_ˆFZBX|?St;Pn8Ok:Rl=Wn@ZqCUo?Vq>WqARE5UH8XK;ZM=[N>\O?^QA`SC`SCaTDaTDaTD`SC`SCbUEaVP^Vcje|yu}yšzy¡xy©vy°sw´jr³cj°[c«]e®hp¹v~LJшŒÓ™Ý£¥à¯³ã»¿åÆÇãÏÎÞÔÓØ×ÖÑÙ×ËÙÖÇ×ÑÅÒÉÀÌþŹ¹´¨¬£šŠ‹†x{tyvquleleogŽa[`[ÀsmØyuð{ü|yÿrpýccöSTðHGïC?ê>:á<6àA;Ñ:1ÓC:ÝTJÂ>2¸6)½9,Â=.È?/ÏB1×C5Ö@1Ñ7-Ð2/êLMú_]òWSßD?Ù:4Û81à70æ93ç92ç92â:1Ú9/Ñ9,Ê8+Ä8)°(¸3"È@2ÓI>ÒD@Ë;:Ì7;Ï:@Ñ7AâHRíV_ðYbõ^g÷`iêU[ÜAEå@>ì?;ñACúGJÿLTÿQYÿT]ÿV^á4:Ú/5Ü/3ç7:ô=Aø;?÷48ó12í42ï95ð86í42ë20ê20ç40á4.ã<4à=4ß<3Þ;2á83ä73è43è43è88ç98è88ë99ë97é75â5/Þ3,Û7-Ü8,Ý:+ß7*ã2(ç0(ï0(ò1,ñ42ð43ó32ó11ó1/ñ1.ì3.ç6.à91Ù<3Ì71Á0-Ñ@CÿnuýkuùbqðRiõHfÿ;aÿ4^ÿ6bû>däNiÊ\i‹GFjF:]L<]VCXQ>RJ7OG4ID.DJ.GU2Sc>^sHgMj‡OjŠKgŒGgŒFfŽGfHgJi’Nk”Rm”Um”Uq•Uo”Qj‘NgŽKcŒH`‰E_ˆF^†G\‚E[~DWxAVr?Uo@YpB]rG^uG[sCYtAXs@NB2QE5UI9WK;XL\P@^RBaUEbVFbVFaUE_SCaUEfZJh]YngwupŽ|x™{y wx¦vw­pu¯jo¯ah¬^f®_g°em¶pxÀ}…ؙ͉ؗ Ö¡¨Öª±Û´¹ßº¿ßÀÁÝÃÃÛÇÆØÆÃÔÅÁÐÁ»É¼³Ä»°Áµ¨¼¦˜¯–‹œˆ…Œqqqtpopfewhe†nj„_Y•d_›ZT¹f`Ùsnðzvÿ{wÿwsÿhfüZWþRNõHBæ=6çD=Ø;4ÛG=ê\RÅ;0Ä<0½7+¾6(Ç>.ÑD3ÔB3ÔA1×A3Ò86Ø>>ÝCCÜB@Ö=7Õ81Ø7/Þ7/å:3æ93å:3â;3Û>5ÕA5ÑE8ÌG6®-¼;%ÍJ8ÑL=Æ=5»0+À00Ê9>×AJáKTëU`ðZeð]eìYaßLRÔ>@Ï4/Ø7/à;9ê@@òCHõDJñBIî?Fâ5;ß26ã36ï8<õ79ø14û/2ü14ï20ð95ð74ì0.è,*ç0,æ3.à3,ä=5à=4à=4à<3ã:5æ95ê65ì65ì57ì57í57î68î66ë54ä2.Þ1+Þ7.Ý9-Ý:+ß7*á4&æ1&í1(ñ1,ð42î53ñ42ò21ó1/ñ1.ì3.ç6.â;3Ò4+Ò:5Æ20çUXÿpxùcnòZiçI`óEfÿ8bÿ/]ÿ5bÿBhÜLe±PYj5/^G7XK:UN;[P>VI8M@0JC0@F,AO.K[6Xj@bxGfJhˆIf‹FeŠDc‹BcEeŽHgLh‘Oi‘Rk’Sn’RlPhNd‹JaŠH_ˆF_‡H_‡H_…H_‚H]~G]yF]wH`wKcxOczN]uC[vAZu@JC3MF6QH9TK.ÑE6Ë>-Á2"Ê7'ÛE7ÞE?Ó97Ì3.Í50Ô;5×=5Ý<4á=4ä;4ä92Þ5.×4+Ï5)Ê8+Å<,Â?-ÔS>ÈG2½<)¾:-Ã=2Ä;5Â74Â43ÜKNÞMRáPUåTYèY]åVXÜMOÓD@É5+Ñ7+Ø7/Ý52â24å26æ18æ.6ì4>ì3;ó5?û9Bý4>ú+5ÿ(3ÿ/9ø-3ù57ù59ð./ë*+é0.è51â5/ã<4à=4à=4á=4ä;6ç:6ë76î66ì46ë35ì25í34í55ê41ã1-Û0(Þ8,Ý:+Ý:+Þ8(à4&ã3$é3&ì4*î50î52ð42ð3/ò2/ï2,ì4,ç6.ä=4Í/&×>9Ì35ùbgÿoy÷[iðNcêC]ùEhÿ:eÿ0]ÿ6aöGhÉJ]“CFR,#VI8SL:OH6[O?UI9F?-HF1>B'@J(IU1Sd:_rEe}Ig„JeˆHcˆCa‰BbŠCcEeŽHfMhPiQlPkMfJcŠIaˆG`‡F`‡H`†I^G^F_}G`|Ia{Kd{Mf|Nf~N]xC]z@^{CDB6FD8JF;PG>RH>WI>]M>_O?`Q>aR?`SB_VGbYRgb_ojnso~wq“zt |y¨yw©pp¦gg£`a¢\_¤`b­fhµopÀyzÌ„‚Ö‹ß–’眙栞ݡ¡×££Ù¤¤Ú¦£Ø¥¢×¥¡Ô¤ Ó¥žÑ£Í¢šÉ¢™ÈŸ–Ù»Ž‚°ƒ|žrn}igld^`fZZkYUrWP}WNŒWO•RI¨ZPµXPÁZSØkdìyrù‚|ÿ‹†ùuqÿusí_]ßPLÙEAïZTÌ71Å2*Ä6*Ã7(À7'Ã7&Æ9(Ê;+Ð<.Õ?1Ò8.Ö<2×?4Ó;0Í5(Í3'Ø:/â@5à90á90Þ7.×7+Ï7)É:*Æ?,ÄA/Â=.Æ@4ËE:ÍG<ÌC;Å<4»2,¶+&Ç<7ÐEBÙOLàVSãYVáXRØOIÐC:Ì;*Ó:(Ü8,â5.è./ì*2ð(3ô'6ú->ú+?û*?ý)?ÿ(?ÿ&?ÿ$<ÿ$<ÿ$8ÿ'9ÿ+<þ,9ó+5í.5è45ç;9Ý84Ý:3Þ;4à;5ã:5æ95é73ë54ë35ì46ë54é54ç53â5/Ý5,Û5)Ü8,Û9*Ü9(Þ9&ß8&â7%ã6%æ4&ì5-í4/ð50ñ4.ñ5,í5+ê5*å7,à90Ø7/Õ:6Û?BÿmwÿbsûSjõIcÿKjö6[ÿ6_ÿcçNj¯IV^$"D, ?:'HE4PMC/?G/BH&EK%KS.S]8[kDavKd~NdƒJb†F`ˆBa‰@c‹BeFhJlPm‘Ql‘LiŽHgŒGf‹HfŠJe‰Ic…HaƒGdƒJdIbGc~GdJdHe~Ga}C[{<\=_‚B=?4?A6FC[K>]M=`O;`Q<^SA^VIc[Xhcinlyso†tp•vpžtp¢pm¢gfŸaaŸ]^¡\\¤ed°kjºtrÅ}{φ‚Ù‰à”Žæ˜“å›–Ùœ˜Õ™Öžš×ž˜Ö—Õœ–Ô›•Ñž–Ñœ”Íœ“Ê›’ǚē‰»ˆ®‚xtk|mdif]^f[YiZSoWM{UJŠVKšVK°\RºYRÁXRÓfaàqjãvoí~wý‡…ÿ‡…÷usîgdãUSëZUÇ2,Â/%Å7)Ã7&À7%Á8&Ä8'È;*Ï;-Ó=/Õ9,Õ9,Ó:,Ò:,Ñ9+Ñ9+Ô8+Ø8,ß;1à90Ü8.Ö8,Ï9*È9(Á:&¾9&¾6*Á80Æ=5É@8ÊA9È?7Å<4Â91¿4-Ç>6ÑH@ØOGÚQI×NFÌC;Ã7*Ê7%Ó8$Ý7)å4,í//ô+3ù)7ý(:ÿ+@ÿ*Aÿ)Aÿ&Aÿ#@ÿ!<ÿ=ÿ:ÿ:ÿ 9ÿ%;ÿ);÷-9ð19ê7:å;;Ü94Ü:5Þ;4à;5ã:5æ95é73ë52ë35ì46ë54è64ä71ß6/Ü5,Ù5)Û9*Û9*Ü9(Ü9&Þ9&ß8%á8%ã6%ç5+ê3+ë4,ë5*ë5*ê6(ä7)á7*ß;1Õ4,Ó54óTYÿesÿ[põGbÿIhÿAdÿ;`ý3[ù;aòMmÍLb‰8?S*$A5'69(;<,B@1DA0@?-=B.>G,=CKP'\b_„?b‡B69.:<1??7DA:KB;OE/Ô>/Î6(Ë/"Ú:.Ú8-Ù7,Ö8,Ð:+É:)Â9&¾7$½5)À6,Â8.Ä:0Ç=3Ê@6ËA7ÌB8Ç:1Ê@6ÏE;ÐF<ÒH>ÑG=Ê@6Å7+Ì6%Ö6&ß7,ç4/ñ03ö-5û+9ÿ*<ü';ü'=û%=ù#;û!:ú7ü7þ6ÿ8ÿ6ÿ$8ý*;÷2<ñ6=ë8;ä::Ü94Ü:5Þ;4à;5å95ç85é73ë52í36î47í55ê65å61á6/Ü5,Ø4(Ú8)Ù9)Ú9'Û8%Ý8%Þ7$à7$á6%á5'â4)ã5*ã6(ã6(á7(Þ6)Û7+Ý<2Ð1+Ø88ÿkrÿ]nþPiñ<[ÿHlÿ7]ÿ>eù5[î>bæVqª?Qa#(L/);7+07'37&9<)@=*A<(@>)BB&?FXa4s~T€Œdw‡`hSa}La€G`ƒC`…?a‰@cŒ@hŽEjJkMl‘Nn“Mk‘HhHgŒGh‹Kh‹KfˆLd†Je„KdƒJc€FdGf‚Hf‚GeFb€Bc†DeŠEhH25*58-;<4A>7G@:KB;RE.Ñ>.Ë8(Ç/!Ò6)Ó5)Ò4(Ò6)Ñ9+Í<+È=*Ä;)Ä:-Ä:/Æ90Æ9/Ç:1È;1É<3Ë=3ÓD<ÓE;ÐA9Ë=3Ë<4ÏA7Ï@8Î;1Î5'Ù5)â5.ë31ò/5÷+6ù)7ü):ù&9÷&;÷&;ø'<û&<ý%:ÿ$:ÿ#:ÿ"7þ#7ú%7ù,;÷5>ò9?è8:à87Ü94Ü:5Þ;4à;5å95ç85é73ë54î47î47î66ê65æ72á6/Ü5,×5*Ø8*Ø8(Ø8(Ù8&Ú7&Ü7$Ý6$Ý6$Û5%Ü6(Ý7'Ü9(Ü9(Û:(Ù9)×:+×:1Ð3.ëHKÿoyÿVjøD_ø<_ÿAgÿ3\ÿ8bø>cèMlÅOe€0=J C1-11'.6'4=,=B.B@+B<$E>$HE$U\0p~MŸr—¨|ƒ˜mj„W_{J]~E_ƒCa†@bŠAfCkJl‘Lm’Om’Oo”Nl’IiŽIhHiŒLiŒLhŠNg‰Mf…LdƒJdGe‚HgƒHh„If‚Gd‚DgŠHiŽIl‘L-3'36+891<;6B=9G@:MD=QG=SI=SK>UNDZUQa^eigumklkŠjhb`XVˆPP†QQXYš`cªfj´orÁuxÉ|Ђ…Ö†‡Ù‡ˆØŠ‰Ù‹ŠÖ‹ŒÏ‹ŠÌŠ‰Í‰‡Ð‰…ш„ÑŠƒÑ‰‚ÐŒ„Ï‹„È…Á†º†°‡¥~w–m…„Yj€SZnVTc\RZaOZ_HeZDxUB’LD¸TRÐSWÛRYå^dèejãklæuqäunâoh÷~vÿ‚{ÿ‡~ôl`É?2Á8(À;(¿='¿='À<'Â;'Å:'Ç8(Í7)Ø:/Ù8.Ò8,Ï9+Ì:+É:*È9)É7(Ï9+Ñ7+Ò8,Ñ7+Ï7*Ì8*Ë<,Ë>-Ê<0É=0Ê<2É;/È:0Æ8,Å7-Å5*Ð@7Ð@5Í=4É9.Ë80Î;1Í:2Ì5,Ð/%Ù0)ä20ì25ô/8ù-9û+;ü,<ü-?û.?ü/@ü/@þ/Aÿ/?ÿ-?ÿ.@ÿ)9ü)8÷+7õ0:ñ6=í8=ã77Ü43Ü94Ü:5Þ;6â:7å95ç85ê65ì44ñ48ñ48ï56í76æ72á6/Ú6,×5*Ø8*Ö9(Ö9(Ø9&Ø9&Ù8&Ú7&Ù8&Õ8%Õ:&Ö;'Õ=(Ô=(Ô=*Ô=,Ô<.Ñ7/Ú;8ÿ^eÿaqÿPi÷<[ÿAiÿ4_ÿ4`û1YôKlÛYq•>NZ%-C),:2/-0)08+7@/:B+<<"A<UH(`[5{…S£lª¾‹¨¾Ž¥wo‹[aK^F`„DcˆBeDj“Go”Np•Po“So“So”Nl’IiŽIgŒGiŒLiŒLi‹OhŠNf…Je„IdƒHe„Ig…Ih†Hg…Ge…DiŽIi‘Kl”N+1%.4*470893>:7B=:HA;KD1Î8*È4&Ê8)Ë<,É:,È:,É;/É;-Ê:/È9+È5+Ç5(Ê6,Ï;/Ò>4Ó?3Ö?6Õ>3Î7.É,#Ò+%Ü-*ç02ð39ö1;ú0<ý0?ý0?ù0@÷1@÷1@ö0=÷/<÷-9ú,9ú*7ý/<ù/;õ0:ð3:í6;æ69ß55Ù42Ü94Ý:5ß:6â:7å95ç85ê65ì44ò59ò59ð67í76æ74ß6/Ú6-Ö6*Õ7+Ô8)Ô8)Ô9'Õ8'Õ8%×7'Ô9%Ð9$Î<%Ï=&Ï?'Î@(Î@*Ð?.Ò;0Ñ61ëHIÿfrÿOdÿHfû7[ÿAmý/]ÿ7aò4XãPj¼Ufm19E(*E697325406906=-3;#38CCja:…TŸ®w©Á‡µÎ—¯Ç“’®}v”be†Q`‚F`…BcˆBgFm–Jr˜Or—Rq•Up”To”Nl‘KhHf‹Fh‹KiŒLi‹Ni‹Og†Kf…Je„If…IhˆIi‰Hi‡Gf†CjJk“Mn–P(0#+1'/4-350764<85@=8C>8IEù4>ù1>ú0@ø/?ò.<ï/<í/9í07ï-5ï,2ò+2ñ*1õ2:õ3;ò5;ì59å57á55Þ65Ü75Ü86Ý97ß:6ã:7æ87é77ê67ì46ô5:ô5:ñ7:î87æ74à70Ú6-Ô6*Ó7*Ñ8*Ð8*Ð9(Ð9(Ð9&Ñ8(Ð9&Ë9"È:"È>$Ç?%È@(È@*Ì=-Ï;1×96üU\ÿ^qÿGcÿ?aÿ:aÿ7gþ3bû8`íFdÅNa‰@IS12A64@:<:46?56<7179+4="9CSZ.‚‚P¢§q±ÅŠ¯ËŽ°Ì’¦Ã’®}{™egˆQ_E^ƒ@c‰@iDo•Js™Ps˜Sq•Uo“Sn“NkJgŒGeŠEgŠJh‹Ki‹Ni‹NfˆKd†Id†IeˆHgŠJh‹Ii‰Hf‰Ej’Ll–No™Q&.!(0%-2+13.331764:95<;6GD=DD*¾;'¼7$À4#ÑB2ãOAäN@ØB4Ë7)Ë7)Ð>/Ê;+É:*Ç8(Æ7'È6'Ê6(Î8*Ð8+Ó;.Õ;/Õ9-Ò6*Õ7,Ú<1Ý<2Ü71è88ñ8=÷:Aû9Bú4Aõ/<ò,;ï,:í/;ê19ê38ë48í57ñ56ô36ó57ð37ï6;í9<é69â45Ý33ß76à;9Ý86Þ97á96ã:7æ87é77ê67ì46ô5:ô5:ñ7:ì89æ95ß82Ø7/Ó7+Ð8+Í:*Í9+Ì;*Í:*Í:(Í:*Ì;(Å9"Â:"Ã=$Â>%Ã?(Æ?+Ê<.Ï81ß<89?48E26C41=:)>E&FU*bs?›a­½±ËŒ«É‹¦Ã‹º„Ž¬z{™ef‡PZ|@^?a‡>hŽCo•Jr˜Or—Rp”Tn’Rn“NjIf‹Fd‰Df‰Ih‹Ki‹Ni‹NfˆKe‡Jd‡GeˆFgŠHh‹Gh‹GeŠDk“Lm—OpšR(0!'/"(-&).(.0-3317839:4==5?@8DE@JLKORYVXeZ\s]^}YX‚[Y‹^]–ee£nn¶wxÈØ„…⌌ðŠŠì†‡ä‚‚Ü€€Ö‚€Óƒ‚΀ƒÈ„ǃƒË„„ΆƒÐˆƒÓ‹„ÒŒ„ÏŠ€ÅŠ€¼‰€¯‡}Ÿ€xwozkegf]Xm[Qm[Mi\Lf^Kd_IeaHhaGo_FoP;…UA¥]O¿aYÑYXÝQTîS[ø\`ùheæYPÔD<Î70Ñ7/×:1Ö=/Ô;+Ï9(Í:&Ï9(Ñ:)Ô8)Ø8*Ü5,Ü5,Ð/%Í3)Ì8,Ê>/Å@/Á@-¾=*¼9'Â9)¾0"éWJßK?Ã/#Ñ=1Î2Ü<0Ù7,Ú8-â>4ìC<õBEò9?ð2<ö4?ö2@ñ-;í-:í2=ì7>æ5;ä68å78ë99ð:9ñ78ï77ò;=î<<ê::æ87á85ß74Ü75Ü75Þ97á98ã99æ::é9;ì9<í9<ï8<ô7;ó6:ð8:í9:ç;9à;5×90Ï7,Ê8+È9)Ç9+Æ:)Ç:)Ç:(È;*Ç<)Á9#Ä='¾:#¶4¼9%ÉD3Ï?6Ê1,ÿ^eÿVgÿIbÿ<\ø1X÷0Yû6cõBiçYo¬FQo33N3,B?6>C<@78@-1L/3K2.A9&DJ(Zn=~š_ž¸w¨Å‚¬ÊŒŸ¾‚˜¶€”²~‚ nf„RXvBY{?]€>c‡AiDn”Im•Ll”Nk’Ol‘NiŽIfŠDc†Bc†Bf‰Ih‹KfŠLdˆJg‹MhŒNg‹Kf‹HeŠEf‹EjIk“Jq›QržSt U*0")/#).').(-/,130561782;<4>?7AD=HJGOPTSUaXYkZ\u\Z^]‰db”kj¤utº~·‡ß‹Œéð‰‰ë…„ ؀~Ҁς‚Ì…†É†‡È‡ˆË‰ˆÎ‹ˆÏŒ†Î†ÌŽ…ÈŠ€¼‰±†|¡‚x‘{s€tknlb`e]Re`Me^Kf^Kh]Ki\Ij^Hk_Gn^Ew_G[C’YF­ZLÇVPÞRSõQXÿX_ðUSãLEÙ>9Õ60Ù6/Ü90Û9,Ö9(Ó8&Ñ8&Ñ8(Ô8)×7)Ü6*ß4,Ý5,Î0'É5)È9+Æ=-ÄA/Á@-¿<*¾9(Ä8)Ë<.äREÜH<È4(Ì:-È:,Â4&Ê=,Ë<+Ê;*Ê;*Ë:)Ì9)Î8)Ï6(Ó7*Ö8,Ù7,×3)Õ1'Ø1(Þ7.ç<5øDGñ8>í/9ï/:ð0=î.;ë1<ë6?ä5:Ü36Ø22ß:8îEBøIFøDCó?>é:7ç98å97â96á85à85á98á98à87â88å99ç9:é9;ì9<í9<î7;ó6:ò59î68ê88ä;8Ü:5Ó9/Ë7+Æ8*Ã:*Â:*À;*À;*Á<)Á<+Á<)½9$Á?)»:%³5¹:'Á;/Ê:2Ø<=ÿ^gÿPdÿA[ù8Wö6[õ;`ô>dãIe«?Lƒ?>_:2G;/:>08>2F<:R>=N0.S8/VK5ciEx[°pÂ}¡Æš¹}š¹€š¶ƒ©xrŽ^YuETp=\{B_@b†@iCm“Hl”Kk“LiMiMgŒGe‰Cc†Bc†DgŠJiŒLhŒNg‹MiOiMiŽKgŒGgŒFfŽEl’Im•LpœQoRt U-1"-1#,/&,.)//-11/34/45-9;0<>1@B7EHAKMLQRWUUaVWi\Yt^]fdŒpn zx·…ƒÎ‹ßêŽïŽŒíŠ‰ç‡„ßÓ|Ë}ȀƅLjˆÆŠŠÊŒŠÉŒŠÉŒˆÅŒ„¿‹‚·‰€­†|¡€v{p€ujpndbi_Vc]M_aL_aKc^Jg\Jl[In\Ho]Gq]EwaIxX?‡S=£VDÇXOãUSøOTþMSâ><Þ<7Ý84Þ71á6/á6.Ý7+Ú7(Ô7&Ó8$Ó8&Õ8'Ø6)Ý5*à3,Ý5,Ë3(Ä6(Â9)Á<+Â?-Â?-Á<+À8(Ã5'ÜJ=ÚF:ÕA5Îå84â62à72à72à72á85â96ä;8ä;8á77ä88æ8:è8;ë8<ë8<ë8<ì8;ï58î47ì57ç77â:7Ù:4Ï8/Ç7,Â8+¿:+½;+»<+»<+»<)»<+»<)¸9&½@*³9$±6$¶;+µ0'Ã40ìPTÿ[iÿJ`õ:Uð7Vñ@]ïHfçHdÍNa‚89e?6R@2DA09=,57)>6+K9/E-#R=,g]Bˆ_’«t—»{–Áz–¿{”³xœ¸…š´…€šm\uKHb5Nh8[xB_}?cƒ@hŒDl’Gj’Ih’JgLfKd‰Dd‡Cc†DeˆFh‹KkŽNkOjŽNiOiOiMhJgHh’Hl”Ko™Ms¡Vs£Wv¤Y24&04&01)01+12-23.34.46+9;-;>-?A3DF9IJDMONRQWSS]XVd\Zoda~nl”zw¬„‚ÃŒ‰Ö‘㔑ê“뎋≅قÌ|Ã|¿€~½„‚Á†…Á‰ˆÂŠÃ‹ˆ¿‰…¸‡®…}¤…{€vŽyn~rgmmaak^Vi[Pc\J]`K]aJc^Jh[JmZKqZJtZIv[FsWAxR;ŠQ=ªYFÍ[PãTPðFIñ>AÛ2/Ü5/á51ã60ã5.á5+à6)Û8)Ö7$Ó8$Ñ8&Ô9'Ø6)Ü6*à3,Ú6-È6)½8'¼7&½:(¿>+Â?-Ã;+Ä8)Æ4'éUIÓ<1Ì8,ÑB4¾5%À=+À=+À8(Ä8'Å9(Ç:)È9)Ë7)Ì6(Í3'Ò6*Ô3)Õ2)Û4,ã:3é>7ì?9ì=:è45ì59ï6;î5;ê2:æ39ä7=â<@óUVübbÿmjÿidóVQäA<ß63Ý4/ß61Þ71Þ71ß82á85â96å97æ:8å78æ89è8;é9<ë8<ë8<ë8<ì7<î5:î68ê67å97ß<7Ö<4Ì9/Å9,¾9*º;*¶;)µ<)µ<+´=)³;*³<(³:'·@,­8&­8'³;-«+"Ã54ý`gÿTdúG\ð-=@-@C.DG4IK>MNFQPNRRRVUSYX]a_lkius›€}²ˆ†ÇŒŠÓ•’ᔑâÜ‹‡Ó„Ä}º|µ|³~·„º‡„¹‰…·Š„²†¨z›€xs‡znzrfjm_^j[Ti[PjZKfZJb_Lb_Le^Li\Kn[Lr[Kw\K{ZG~UA†R=›RA¶VFÎRHÚG@â88å33Ý1-ß3/â5/ã5.á3,ß3)Ý5(Ü9(Ó8$Ð9$Ï:&Ñ:'Ô8)Ù7*Ý5,Ø7-Ä;+¹:)µ6%·8'½;+Â=.Ç;.Ç7,Ð90õ\TÖ=5É5+ÏA5¸3$·:(¼?+¿:)Ã:*Æ:+È:,Ê;-Ì:-Ï8-Ñ7-Ð3*Ò1)Ö1+Þ71å<7ê>:è;7æ74é75ï;<ðë8>è7=ê7;î7;î79ê7:ä::ß=:Ö=7Ë;2Ã;/º8*µ:*³;*¯<)¯<*¬<(¬;)¬;)ª;(¬=*¦8'§9*ª8-¬/)Ë@CÿhrôM^óH[íDYåH[ÙO^ÉT]·TWœXUdM?OL9LG4JE1FD-?B'=D#>H#KV.\g.==1==3==5;<4;=2;=/?B/@D-CG.FJ3KL:NOAQQIRRHYWJZZN_^\gerqn‰{y¡ƒ€·‡…Čьӊϊ…ǃº~y¯zw¦yv¥{v¬|y®€|®ƒ}©ƒ}£x—|t‹zrvksrffm_\j\Sk[NlZLl[Kk[Ki]Mg^Mi]Mj]Mn]Ms^Mz]MZI“`O›VG§N@¸J=Å@7Ï6.Ø1+Þ1+á51á6/â5.â4-à2)Þ4'Ü6&Ú;(Ñ9$Í;$Ì;&Î;'Ñ:)Õ9*Ù7,Ó9-Á>,´;(°5#²5#»9)Ä<.É;/Ë7-Ù?7ø[TãIAÎ:0Ì@3¸6&¬3 µ<)¼9'¿7'À7'Ã7(Å7)É7*Î7,Ñ7-Ù<3Û:2Þ93å<7ê>:ê=9ç85ã41è96ë<9ì::è8:ì>@øPPÿbcÿppùheâTPÊ=6À1+É40Ö;7ß=:à;7â;5á:2â94á83ã73ä73å55æ66é69é69ê7;ë8<ë8>ê7=è7=é6:ï8<ì89è8:ã;:Ý>:Ó>7É<2À8ÛTXûepîK\ïI]éJ\ÛM[ÉQZ´VV ZRŠ`RPI7HM9NI5H@+;567>O%Lf6lŠTw”\„›e‰šd›f£k”­t˜°|ƒ•mn}\Q`Cg{HiƒFl‹Gm‘Gj“Gf’GbGcŽGhJlMo’Pn“PlMiŽKjJj’Ls›TsUsSržQržOs¢Rw¦Uz«Zv¦Zu¥[s£YRK;RK;RJ=RJ=RJ=RJ=RJ=RK;UNXQ?YR@[TD\UE\UEb[HaZHaYLbYRe][kaiqftuj{zn„|pˆs‹s‰|p„uj{mbre]jc`k`_g_\c_Z^^ZY^YUaZRbZOe[Og[Ki\Kk\Ik\Gm]Fm]Fj^HicMqfTqZJuOB‹WJœ\P£YL¬ZL¥N=¦E4§<,±7(Â8-Ñ80Ü41Ý1-ß6/Þ7.Þ7.Þ7.Þ7.Û7+Ø6)×7)Õ8)Ô8)Ò9)Ò9)Ò9+Ò9+Ô8+Í;,½;+¶>-®9(©1 «2!·9*ÀÔH9Â=,·2#ÝPFØJ@ÔF<ÔD;ÚG?ÞG@àC>à<:à74æ87ì::ì::ç77â64à93Ü=7ÙF>ÏB9Ä:/¼4(·1&¹5)¿;/Ã?3Ã:0É<3Ò?7Ú?:â=;ç;9ì89í9:ç7:å8:å8:å99å97å97å95å95à40á51ä65å76æ89ç9:ç9:ç9;ë;>æ9;ß99Ü=:ÖA=ÍB;ÁA6·?1©:)£<+ =*›<(™:&–:%—8&‘8&A0‹<-‡/#‘/&¼LJämoçloÍVZ½LNµNOªQM¢UO›XO—]R•aTŠjSWZ/:M7FTa)~ŽP›°oŸ¼yœ½x’µs~ah€L\mCYdBT]BHP9?D0:=,@C2<@1:>0]sBgƒHpKo“Kl’Gj’Ii“KgJlPm‘So“Sl“Pm’Mk“Jm–Jm˜IqœLqžMrŸNr¡Pt£Rv§UyªYzª^y¦cm™ZbŽOWN?WN?WN?WN?WN?WN?WN?WN?XO@YPAYPA[RC\SD]TE^UF_VGd[JcZIcYMcYOf[Uj_]nbdpdhreltgpvirvirsfmm`gg[_bXY^[VZZRYVOWTKXTIXTH\VH^WGcZKcZIf[Ig\Hi]Gj^Fk_Gh`IcbMngTv\MSFšVM«VO°RJ·QE¯H9¬C0¬=,±9)¾8,Ë80Õ62Ù40Ý6.Ü8.Ü8.Ü8.Û7-Ú8-Ù7,×7+×7+Õ7+Õ7+Õ7+Ô8+Ô8+Ô8+Î:,¾<.¶>.®9(¦1 §2 ²:)¹>.¾<.Æ:-Ç4*Ë4)Ò;0ÜE:áOBßQCÝOCÛF?Ø@;Ó<5Ò;4Ö=7Ú=8Ü86Ý33ç77ë78î79ë78ç77å97â=9ÛB:ÊA7¿?4¸:,±6'¯5&²8)¸=-¿@1ÅA4Í@6×@7ß=8ã:7é77ï56ñ7:é6:ç6<ç7:æ89æ87å95å95ã:5â92ã:3ã:5ä;6ä;8ä;8å99å99ä:;ã;;ß<=Ù?=ÐA;Ä?6·=2¬;-¥;+ =*œ=+—<)–;(’:&“8%Œ:%€9'€8)‰5*<5¿QP×eeÑ^a·MM¬NL¤TMYP˜\Q—^S—^S˜_VŒfQ`_/Sg*^r3zO™¯n¥¾|™²pˆ bj‚HauBTe;JX7FP7?H59?158-:^tEgƒHqMp”Ln’Hk”Hk“Lh‘Km‘Qn’Tm”Sm”Qk“Lk”Hl—Hm˜HpJpJp Ls¢Qu¦Tx©Xx©Xx¨^m—Xb‹QY‚H]TE]TE]TE]TE]TE]TE]TE]TE[RC\SD]TE^UF_VG`WHaXIaXGe]Je]Hd[Jd[Le[Qf[Uh]Yh][i]]j^^k__k__i^\f[YbWS_VQZVMWTKUQHRNCQMBSOCWQCXRB^WG^WEaYFc[Fg\Hi^Hk`JhbLbaMngUy_PˆXN¢[U±VQ²IE¸E@¹@7¸>1·;/¸8+¼8+Ã9,É;/Ñ:/Ù8.Û7-Û7-Û9.Ú8-Ù7,Ù7,×7+×7+Õ7+Õ7+Ô8+Ô8+Ô8+Ò9+Í;,À>0¶>.­:(£2 £3ª:&³>,¹>.Ä?0Ä8+Å2(È4*Ð<0ØF9ÜM?âNDÙ:6Ø43Ô20Ö42Û97á=<æ<<é;<í9<î5:ë27é26è58å99á<:Ù@:¾8-µ:+±6'®4%­5%°8(µ<+»=.ÈD5ÏC6ÖB8Ü=7â94è64í55ï79ê69é69é69ç77ç77æ95å95å:3ã:3ä;4ä;6ã<6ã;8â:9á99Þ88Ý9:Ü<<Ú@>ÓB=È?9¹:1­7+¥7(¡;,<+™<+”;)“:(9&7%Š9&z6#y6%ˆ9, F=¹SOÀWT¸PO«IF¢MHœSL™YP—^S—aW—aW˜_V‹ePsrFzV“¦n¤¹€«À‡ž³{|[[oaXIaXIaXIaXIaXIaXIaXIaXI_VG`WH`WHaXIbYJcZKd[Ld[Je]Hf^Gf^Ig_Lg^Of\Pf\Rf\Sh]Wh]Wh]Wh^Ug]Te[QdZPc[N]YMZVJVRFRNBPL@PM>TN@UO?WQAYTA[VC]XDaZGd]Jf_LfaMdcQleUv\OŠ[Q©b\¸ZX¶FD¹<:Ã<8Æ;6Ä:0Â8-½8)¼:*¾?.Ç?/Ó9-Ù7,Ú8-Ù9-Ú8-Ø8,Ø8,Õ7+Õ7+Ô8+Ô8+Ô8+Ô8+Ô8+Ò9+Í;,Á?1¶>.¬9'¢3 3¢8"¬=)µ@.¼?-¿:+Ã7*Å5*Ë7+Î:.Îî7<ì38é06æ25å58á77Ú65Î61·5(¯7'®6&¬7&¬7&®9(²:)µ:*ÃA1ÊB4ÔA7Ü?8â;5æ95ë76î87í68ë78ë78ê86ê86è94ç:4æ;4â92á:2ß:4à;7Þ:8Ü:8Û97Ù99Ö<:Õ@<ÒC=ÊA;»;2¯6+¤6'ž7(œ;*˜;)”;)’;(:&8$Œ7#‡9%€=*v5#5'™E:ªPH¬MG©LG¦QLPJ˜UL”ZO”^R•aV•aV—aWgT‰…_™©x­½Ž¦¸ˆ¡ts†YN`8/A->3B%:F.=F3;A3:=2:=4<=599-?@2<>39<1<@29B/?L2PbNK:NK:NK:PMTQ@VS@XWC[ZF]\H^]Kb`Qf^QmWJ†[R¬ic¾c`ÁMMÈBCÐ;=Ô89Ó84Ì70Á9+º=)µC+¼B+Î;+×7)Ø8*×:+Ù9+Ö9*Ö9*Ô8)Ô8)Ô8)Ô8)Ò9)Ò9)Ò9)Ò9)Í;,Á?1¶>0«:(¡6"š4›7 £=&¯B-³;*º;,Â:,Ç9-Ë8.Î:0Ð<0Ù:4é9<ì4<æ39ã28â38á48â38â25é6<é49ç4:ç7:ã9<Û76Ð21À0(´6(­:(­:(«:(«:(«:(¬9&¯7&¸:+Á;/Î>3Ø?7à=8ä;8è96ì87î66î66î66í74ê84è:3ç:3ä<3á:2ß;2ß<5Ü=7Û=:Ù><×=;Ô>=Ï@<ËB<ÅB:¹=5­7-£5(ž7(š:*–;)“<)‘;*:(Š9&‰8%ˆ7$ƒ8%ƒ@-u4"{3%“G:¤QI¡NFžNG¡WN˜UL’XLZN\N]R”`U—aWhW‰f˜¥z©€Žj]kHDS42@&$2-:&0;*5=.9?3?1;=28;0;?18A.>K1PbÜ87Ô70Ç;.¼?+±C*µA(Ê;*Ô7(Õ8)Õ9*Ö9*Õ9*Õ9*Ô8)Ô8)Ò9)Ò9)Ò9)Ò9)Ò9)Ò9)Í;,Á?1µ=/«<)¢9$™6•5›;"§A*²B.¹@/¿;,Ã7*Å2(Ë4+Ò;0ß=8ê5:î3<ë6=é8>ç:>ä;>ã:=â9<ß58á7:â9>á=>Û=>Ñ96Ã2/¶0'¯9+«>*«>*©>*ª=)©<(©:'«8%¯6%¹7)Å;0Ð=3Ù<5ß<7ä;8è;7î87ï75ï75î85ë:4é;4ç<4ä=4â>5à?7ÞA:ÚA;ÙA>ÕA?Ñ@=ÍB?Ã?:»@8³=3ª8-¡5(›5'˜8(•<*‘<(<)Š<(ˆ:&†9'„7%ƒ6$6%}:)t3!~9*—OA£YNœRG•OE˜VJ•YN[MŽZMŒ[MŽ\Q“_T™`W‘gW~xXyƒ^r|ZU`B;E,/;%0;*0<.3=24<16<2?1:<17:/:>07@-=J0Oa;bxIk‡Lu”Qu™Qt˜NqšNršSpšRršQsœPr›Op™Kn™Jp›LsžOv¡Ry¥X{§Zz¨]x¦]qŸWg”O]ŠEX‚B`‡NY€ISzCg^Og^Og^Og^Og^Og^Og^Og^Og^Og^Og^Oh_Ph_Ph_Ph_Pi`OjaPjbOjbOjbOi`Oi`OiaNiaNiaNh`Kh`Kh`Ih`IhaGhaGhaGf_Le^Kb[I\WDWR?PM:LI8IH6IH6GH6GJ9GK:HL;IMì;Aê@CæAEàBCÜ@AÙ??Í12Ð66Ó:<Ñ=;É;9¾71µ4.­4)ª<-¥>+¥>+¥@,¥>+¤>(¦;'©:'ª7%²7'¼8+Å8.Ì70Ô94Ü=9æ>;é:7ì95ì95ë:4é;4è;4å=4â>4àB7ÝC9ÚC<ÕB;ÏA=Ê?<Ç=;¿>9±<3©:/¢8+œ6(˜7'”8)‘:):(‹=)‰<*‡<)ƒ:'‚9(€7&6%}6$x3#x5%…B2˜UEWK”PCPD•ZL“YMZN\Q\Q’[T•\U˜[VŽbUkbEV`=JS4=G,6?*2=,4>35?66=68?8=B;CF=EG/;9*78*=>0:<17:/:>06?,=J0N`:awHk‡Lu”Qu™Qt˜Nr›OršSpšPq›OrNqœMp›LošKrNu¡Ty¥X«`~©az¥]qœUf‘L_‰G]‡E^ˆIb‰PY€ISzCh_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Pg^Oh_Ph_Ph_Ph_Ph_Pi`Qi`QmdUlcTjaRi`Qh_Pg^Og^Mh`MiaNiaLiaLiaLh`Ih`IhaGh`IgaKf_Le^Kb[H\WDUR?PMSQDSPAXLÂYSÙROàDEà::Ü75Õ;3Ê>/º=)µ8"É:)Ï8'Ð9(Ò;*Ò;*Ò;*Ò;*Ò;*Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)Ñ:)Í;,Á;0¶:.­<,§>+™9#3“7Ÿ?'£9#°;)À>0Æ<1Ì8.Ð7/Ù<5ã?=ì=Bî?DéCEâDCØ@?Ê;7À50»1.¹/,¼51¾:6»<6³:2ª8.¤8,¡:+¡=-Ÿ>+ ?,¡@-¡@-¡A+£>*¦=*©;*­:(²7(¹5)¿5+É90Ô?9àC>ä=7è;5è;5ç<4å<5ä=4á>5Þ@5ÜD9ØD:ÒC;ÊA9Ä?:¼;6¸85°93¢7-™8(•5'“6'‘:)<*‹:)…8&ˆ=*…<+ƒ<*€<)~:'|8%{6&{6&y1#€8*ŒG8–SC’PB‹L=RE™_S‘WL’YN”[R–]T–]V—\V–YTŒ^QaX;EM(6@8A&>G26BE*;:&78(=>09;069.:>06?,F7GK=IK=AE4KJ6\Q;aE/ƒJ9Àj]Üg`ãUSäFEåA@àA=Õ>5É=0Æ=-Æ4%Ë5&Ì6'Í7(Í7(Î8)Ñ;,Ó=.Ò<-Ò<-Ò<-Ò<-Ñ;,Ñ;,Ñ;,Î<-»2(¶7.±;/¨:)š7"”5•7œ9"®A-³;+º6)Á4*Í6/×<7âC?êHEèDEèEHÝCCÉ:6»61´80®8.©4+«9/©9.¤8. 8-›9,–:+“<+’<+–=+˜=*™>+š?,›@-A, A-£@-¢;*¥:(«7(°6)¶6+¾8-Ä;3Ì<4Ú=6à=6â?8âA7âA9ÞB6Ú@6×@5ØH=ÒE;ÇA8»;2²5/ª3-¦1*Ÿ2+™9-’;*‘9+:*‹:)ˆ;)‡;+…<+€9'}8(|9(|9(|9({8'y6&x3$w- ‹A4—OC“MAŽL@‘QE“UJŽRG˜\R˜\R‘UMTL—ZU•XS”WT“gZ]T5IQ*AK(BK,>H/7@+2=-4?14<1HPCZ^PW[JMO:DF.AA'==%:;)>?1;=2:=2;?14=*;H.PbF7>F7=E6@F8>E5>F1HL5MI0U?'Q:¼sbËcXà_ZëUTçGGâ@>àA=Ø?9Î:0Í9+Î=,Ï=.Ï>-Ï;-Î;+Í9+Í:*Î:,Ð:+Ð:,Ð:+Ð:,Ð:+Ð:,Í;.É?5ÅB:¼B7®=/Ÿ6#–1–1›2¨5#´6(Ã;/ÑA8ÞE?æIDéJFêKHÞCAÛEDÐB>¼<3¯9/©=0¥?1Ÿ=0Ÿ?1œ>2—>0”>/=/Š>.‡@.ˆ?,Ž=*‘;*’<+“=,”?+•>+—>,™>,Ÿ@.¡=-¤:,¨8,¬8+±8-¶:0¼9/Ê<2Ð<2Ó?5ÕA7×C9ÖC9ÔD9ÑE8ÊB6ÃA4¹=3°:0©6/¤5.Ÿ4,™7,’:.Œ=,Š;,ˆ;+†:*„;*ƒ<*<,~;*|;){9)y:)x9(w8'u6'w4$€4'D7˜NC‘K?ŒJ>QD’TIRG“SJ˜XO˜UO—VPœ]X”WRŽSOŠcT]W5Xc9_jBZfBIT66C)4@*0:<19<1<@25>+;H.PbMKD63Å?3ÅA4ÃA3ÁA4¶;,²:,ª8-£7+ž6+›6,˜7.”:/;/ˆ<,‡;-„;,‚:+€;+€;+<,};+z;*z;,w9*v8)u7(t6)v4&ˆ;1”F<–NBŽJ=ˆHEI0?C(=@#:<$89';<.8:/9<1=A36?,MK4Ñ>4Ò>4Ò>4Ó?5Ó?5Ó?5Ó>7Ó?;ÑB>ËD>ÆF=ÂF<ÃI>ÇM@ÎPDÙSHÝPGâMGäIEäGBâC?àA=ÛB=ÕFBÉD?º?7«=0Ÿ>.šC0•G3”I6F4ŒE3ˆC3…B1€A0}@.zA.|?-‚:,†8,…9+†:,†:,‡;-‡;+ˆ;+‰:+‹:)Ž8)8*•9,™;/=/¢<0ª:/­8.¯9/°:.°:.°:,¯9+®8*¨7)¥7(ž6)›6*•7+’8-‘9/Ž<0ˆ<.…<-ƒ;,9*:*~9*}:*};+|:,z;,y;,w9*s8*q6(r7)u5)ŒD8’H=‘K?ŠH:‡I<‹OD“TK—TL–QL›TP˜QO”SO–\X_Xh^—~j””p…’fu‚WYh?CR+?O*P`B)=A(;='78(:;-79.9<1=A37@-NKB1=I1?G/LG1S>+g=-•ZL­_Sœ>4ž3+¶?9ØXUóigödeëRUæJNèNPÙIAÓF<Í@6Ë>4Î@6ÒD:ÕG=×G>ÚJAÚJAÝJBÝJBÞKCÞKCàKDàKEëSRèTTãSRÜROØSLØSLÛULàUNàLHáIFãEBâC@äB@âC@äEBàFDÙJFÊE@¹>7¬=2¡?2˜B1’E3G4ŒE3ˆC3‡B3ƒ@0?1~?0z?/|>/€:.ƒ9.ƒ9.ƒ9.ƒ;-ƒ;-ƒ;-ƒ;-9*‚9*…9+‡:*‰:+;-<.“;/›;/ž9-Ÿ9- :,¡9,¢8+¢8*¢8*Ÿ8)œ8)˜8(”8)9*Œ:,‰:-‡;-„:-‚:,9+€8*}8)}7+|8+{9+z8,y9-x:-v8+q5*o5)q7+t9+ŒH;I<‰I=„I;…K?ŒRF“WM˜XO˜QMœUQ˜RP“VQ’`YˆbWƒg[†zdnrQZi@JY0AR(IZ0Wi?dvNj|VXiEL[:?L.:D)C-B47@-;H.L^8_uFi…Jt“Pt˜Pt˜Nr›Os›TpœQnMmžLp¡Pw¨Y|ªaz¨`rXi“QZƒA\„EaˆIeŒMgŽMgŽKhJfŠLc†PY{IRtBi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkaUlbYlbYlbYlbVlbVlcRlcRldQldQldQlcRlcTlbVlbXlbXlbXocUnbRkbQlcRlcRkbQg`Pd]M^WGYSCSM?MJ;KH9GE6EB3?B/;H.?H-OC-a=-ƒE:«XR´NJž,+²:9¹=;ÓSRòpnþvvñehëX^ð^_ãUQÚPFÔG@ÐC:ÑD=ÔG>ÖGAÖG?ÙHCÚJBÜHDÝJCÞJFÞKDàKGàKGâHHáGIÜHHÙGGÖHD×HDØGBÛFBàBAäABæBAèBBçCBäB@ßA>ÛA?ÛJGÊC?¹<6®>3¢@3˜A0A0C3ŠA2ˆ@1‡?1…=1‚<0€<1=1=1;1;1ƒ:3;1;1€.™9)–9(“:*:+Š;,‡;+„;,‚:+‚:,9+7)~6({5){5){5)z6)x6*x8,w9,s8*p4)o5)r:-v<0‹M@‰K<„J<‚M=…QC‹VH’XM—WN“NI™TO—VR•\Ue\{^PfVF`^GEO->N)?O(J\2_rEk~QexKXj@M_7@Q-6E&7D*=F1=D4:>07;-8:,:;-68-8;0>B47@-9F,I[5[qBeFr‘Ns—Os—Mr›Os›TpœQmœLo Os¤Ux¨\z¨`s [i“Q`ŠHYB^†GeŒMgŽMfJeGgŒGhŒLa„NXzHQsAi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkbSlbXlbVlbVlcRlcRldOldOldMldMldMldOldQlcRlcTlbVlbVocUmaSkbSlcTmdUlcTi`Qf_Ob[K^WGXQARLÐB>Í@9ÒC?ÒC=ÔC@ÕD?×CAØD@ÙECÚDCÝADÝADÞDFÝGHßIHàJIãIIåGHçACêADìBEìBEçAAâ@>Û=:Õ=:ÚFFÉ=<¹83°;2¦@4˜?1‘>0@1ŠG]/AV-7H$1@!6B*=F5PK8MH5ID1DC.@F*DD([B,ˆTG¯\X«>A¬/3ÎINÆ?EÀ;>»;<ÄFGØZ[ãefÛY[ÌGHÑJGÐEBÍB?ÐB>ÔFBÔFBÐB>É>7ÏD=ÏD=ÒD@ÔEAÖEBÙECÚDEÝDFÞ?Cß@DÞBEßEEáGGàFFàBCá>?èBDé@Cè>Aç=>ä>>ãA?áC@ßECÖBBÅ98¶50°;4¦?6š>3=/?2ˆ)=C5ã?>â@=â@=ÞC?ÓB?Å>:¶93ª70Ÿ:0—=2Ž>3†>2ƒ?2?3=2;3„93†93ˆ81ˆ92…;0„<.„<.ƒ;-;/€:.€:.€:.~:-~:-~:-~:-};/};/};/};/}90}90~80~8.€7.€7.€7.~8,€8,~8,}9,|8-{9-z8,x8,x8,x8.x8.w7-v8-v6,t6+s5*q5+m1'r6,n4)m3(o6+m4)q8-I=…SH…SJ†RGˆRH‹PHQJ”QK•RL“TMTK‰[N‚cQo_HYU:MV7O_;j~YbxQYoHUjCRg@Mb;IY5CR17D&4>#2:#6;'<>0@B5@@6<>358-39-4:.7:/9=/;?.=B,%Q?)kP=XG„NBˆE=“D?±WV¸TT»QQÀPOÀNMÁMMÂLJÃKJÐTTÈHGÂ=>Ä=:ÐB@ÓEAÏB;Ç>4ÊD9ÉE9ËF=ÍG>ÔFBØDDÜAEÝAEáBFáCDáCDâDEâDCáFDáFDáFDàEAßD@àB?ßA>àA=àA=àA=ÞC?ÔE?ÈC<º>6¬:0 90”:/Š<0‚<0€A2~@3~>4<3ƒ:3†91ˆ81‰90‡;.…<-„;,„;,ƒ;-‚:,‚:,‚:,9-9-9-9-~:/~:/~:/~:/}90}90}90}90}90}90|90|90|90z:0z:0y9/y9/y9/w9.w9.w8/w8/t8.s7-r6,r6,p6+p6+k1&q7,m4)l3(o6+l3(p7,~H>„RI…SLˆQJ‹PJQL”PM•QN”SOŠOG…SH€[K{ePsiPhkLfqQgxT^tMXnGPf?La:K_:K\:GV7CP4>2;=04:03;05;16<0:A,>D*Q[9^mDkRpŒRp“Sq™RsSsžVxŸ^|¢exžak‘T`†I]ƒF]ƒF\‚E`†Ia‡Jc‰Le‹NdŠMbˆK`†I^„I]LRtBIk9i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTqdTo_Pm]Pm_RqeYog\ldYhbVfbWpl`{xi~{jyizubpiVe`JTT(MB.S@/U8(]7*l=3n70u91~;5‡@:’IB›PJ¥XP­ZR»^YºSN·GE¼B?ÈDBÑFCÓD@Ï@:ÐA;ÐC<ÒE>ÔG@ÖGCÚFFÛEFÞDFßCDßCDßCDßCDàDEßEEßECßECÞDBÞDBÜD?ÛC>ÜC=ÜC=ÜC=ÛC>ÖE@ÎE?ÃB<³>5¢:1”8-ˆ9,ƒ;-‚@2@1~>2=1ƒ:1†91‡81ˆ:0‡;.„;,„;,„;,‚:,‚:,€:.€:.9-9-~:/~:/~:/~:/~:/~:/}90}90}90}90|90{8/{8/{8/{;1{;1z:0y;0x:/x:/x:/x:/t8.t8.s7-s7-r6,q5+o5*o5*j1&o6+m4)k2'l6*i3'm7+}G=‡PI‡PI‹PJŽQL‘RM’SN”UP‘VPŒWO‡[P~^OtbNoiQorUlwYfwUQeBK_:EY6DU3EV6GV9GT8ER8?I0*7;*:<.<>0;=/9;.6<25=26<26<0:0=@-=C)MW5Zi@f|MlˆNn‘Qq™RuŸUtŸWz¡`w`n”Wc‰L\‚E\‚E\‚EZ€C_…Ha‡JbˆKdŠMc‰La‡J_…H]ƒH[}JPr@Gi7i`Qi`Qi`QjaRjaRkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTnbTrdWoaTm_Rk_SkaWlcZle[jf]jf]xtiˆ„x‘•’Œ~‰‚r}zg`cNOT>DG2FE1HC0F=,L<,VC4P9+R6*V4*Y5)\6+a9/e=1m=1ŠKBSJ®UO¶NK¼FDÆABÒDCØFFÔ@>ÕA?ÖB>ÖE@ÙECÚFDÛEDÝEDÞDDßCDßCDÞDDÞDDÝEDÝEBÞFCÛFBÚEAÙD>ØE>×D<×D<ÙD=ØE>ÔD<ÓF?ÉF>ºA8§;1˜8,Œ9+…<-ƒ@0@1~?0=/ƒ:1„:/‡9/ˆ:.„:-„;,„;,ƒ:+‚:,‚:,9-9-9-9-~:/~:/~:/~:/~:/~:/}90|90}90{8/{8/{8/{8/x8.{;1y;0y;0y;0x:/x:/x:/v:/s7-s7-s7-r6,q5+o5*o5*m4)j1&o6+l3(h2&k5)h2&l6*|F<ŠOGŒOJPKRMSN‘VPWPŒZQ‰]R…aUy_PiZGd_IdhO\fKN]@EU8AQ4=M0G2:A/9=,9=.9=.8<-7;-7=36=56;46<2:<1;=/bxIj†Ln‘Qs›Tw¡Wx¢Z{¢ar˜[e‹N\‚EZ€C\‚E\‚EZ€C_…H`†Ia‡JbˆKa‡J`†I^„G]ƒHY{HNp>Eg5haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTrfXth\sg[mcYjaXle]snhzwp~w† ”¨¥œ«§œ¨¤™£‘™–‡z{kcfSOR?GJ7EH5BE2BE2EH5KL0A9,A7+@6*F4(S5*qB8ŒPHŸPK¯IG¿GIÌEIÓBEÖ@BÙ@BÚBAÛCBÚEAÚEAÜDAÜDAÞDDÞDFÞDFÞDFÞDDÝEDÝEDÚDCÚFB×FAÖF>ÔE=ÔE=ÓF=ÔE=ÕF>ÔA:ÓC;ÎE=ÁB9®>3ž9-‘;.Š.€=-;/„:-†:-‡;.„:-ƒ;-‚:,‚:,‚:,9+9-9-~:/~:/~:/~:/}:1}:1}:1}:1|91z:1|91y90y90x8/x8/v7.y:1y:1x90v:0v:0u9/u9/t:/r7/q6.q6.p5-o4,n3+n3+m4+j1(m7-j4*h2(j4*f2'j6+}D;NGNHQJTLUOŽWPŠYRƒ[Q{YMv\OkZJ]UBYXDY^HOYA?K3:H/7E.4B+5A+8D.=I3CL7EN9BK6?H5.5<,4:,5<45<56;56;49;0:-;@)GP1Ra:`vGi…Ko’RuVy£Yy£[xŸ`n‘W`ƒIZ}C[~D^G^G]€F`ƒIa„Jb…Kb…Ka„J`ƒI_‚H^IW|ILp@Bf6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTkaUndZpf\lcZkd\rmg„|‘Œ§£ µ±®ÄÁ¼ÉÆÁÉľÅÀºÀ¹±¹²¨¤œˆ‚rfcTPQ?FI8>E3;D1:F28E38E38C2:B34(P:/e?6€EA¡PO¿X[ÊQVÊCIÕFJ×EFÚFFÛEDÝEBÞDBÝD?ÞCAÞDDÞDFÞDFÞDFÜDCÜDCÜDCÚDCÙEA×FAÕF@ÓF=ÒE<ÐF<ÑG=ÔE=Ô?8Õ@9ÐC:ÆC9¶A7¥=0–=/Œ=.†>/‚?/>.€=-<-ƒ;-„:-…;.‚:,‚:,‚:,‚:,9+:+9-~8,~:/~:/~:/~:/}:1}:1}:1}:1z:1z:1y90y90x8/v7.v7.t8.w8/u9/u9/s9.t8.s9.r8-r8-q6.q6.p5-o4,n3+m4+l3*j4*h2(l6,i3)f2'h4)e1&i5*{B9ŽMG’MH‘PJTLVO‡XNYO|\Qs\Nk[L`WFVSBPSBJQ?@I64@,3<+2;*09(09(2;*5>-9B1G4:F2:C25@/3>-1<,3:33954954928919;.;>-;@*CL/O^7]sDi„Mp“SwŸYy£Yw¡Yq˜Yf‰OZ}CX{A\E]€F]€F^G`ƒI`ƒI`ƒI`ƒI`ƒI_‚H^G]€JV{HJn@Ae7haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlbVj`VjaXkdZkg^upjˆ…€Ÿžš°°®ÃÂÀÓÒÐâáßçæäçãàãÞÚÞÖÓÙÎÈμ²¸¥——‡zym]_YIKL:@E1;D/>J6=H7=F5;C4;>5:;3983880==3C<2N71a84ˆHH¯]_Å`dÊWZÍQSÓNO×MKÛKJÞHGáFDãDAâBBßCDÞDFÞDFÝCEÝCEÜBDÜBBÛCBÚDCØD@ÕD?ÓF?ÒE<ÐF<ÐG=ÔE=Ù@:Ù@:ÑB:ÈC:¼C:¬@4™;/Œ9+‰=/ƒ>.>-€=,<,ƒ;,ƒ;,„<-‚:,‚:,‚:,9+9-9-~8.}9.~:/~:/}:1}:1}:1}:1}:1}:1z:1y:1x90x90w8/t8.s7-r8-t8.s9.r8-q8-r8-p7,p7,p7,o6-o6-n5,n5,m4+l3*k2)i3)g1'k7,h4)e1&h4)b0%f4)zA8MG’MH‘PJŽULˆXNYOxZOr\Nk^N^WGRPAKN=CJ:9B12:+08)17+17-06,/5+/5)08+2:+4<-9D4;F5=H7-.800621622717829;0:<.:?)?H+KY5[qChƒLq“Vwž[w¡YsœVgP^IUx@WzB[~F[~F[~F]€H_‚J_‚J_‚J_‚J^I^I]€H]€JUvIJk@@a6haQhaQhaQibRibRjcSjcSjcSibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlbVpg^ng_lgatqj‡„¡ œ¼¼ºÎÐÏÏÏÏàààòòòúøùû÷ö÷óðñìéðâßèÐÆÝÁµÁ«¢‘}ub^\GKM7CH2AI2AI4@G5BD7AA7B=9C97?:69<5>?7B71J.+d66QR³giÆnmÀ\\ÇZWÐVS×QNÜLKâHHæCDåBCßCFÝDFÝDFÝCEÝCEÜBDÜBBÜBBÜDCÙCB×C?ÓD>ÒE>ÐF<ÐF<ÔE=ÜC=ÛA9ÒB:ÊD;¿E:°A6œ:-‹5&ŠD69A208+/7*6<247058157247025.06,08-19,6A3:E5=J9>K9-,6..400511606718:/:<.:?+WzB[~FY|DY|D\G_‚J_‚J^I^I^I]€H]€H]LStIHhA?]7icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSjcSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUldWibZgd]vsn“’Ž¯¯­ÄÆÅÚÜÛêîïóôöö÷ùüüþÿÿÿÿÿýÿûúü÷ôýòì÷áÔòØÇàʵƶŸª ‡ˆ„ibbFEH-DH/CG0FE1GD5F<3C60F42H:9>=9>?:B:7I75cGF’jjÅ“’è­©Ò‹‡ÇtnÀ]XÆSPÕONßJLçFKéFKßEGßIKÚDFÔ;>Ø>@áGIàDGÖ:=Ú@@Ú@@ÙA@ÖB>ÔC>ÑB<ÐA;ÑA9ÞC>ÛA9Ó@9ÊA9¾B8°@5Ÿ:.8*Œ=0‡>/ƒ>.>-€=,<+=*<,:+9-9-~8,~8.|8-|8-|8-|90|90|90|90z:1z:1z:1z:1y=5w<4w;3u:2t91q8/p7.p7.o6-m7-m7-l8-m7-l8-m7-m7-i2+m6/p92o81k4-g2*g2*h3+e0(i7.d2)]-#`0&_/%b2(s>6ŒOJPKˆQJRJ}YMv_QfYITN>DE5>E5:C25@04&DR1WlCh‚Rs”]wž_r›Wk”R[~DXyDTu@Tu@WxCZ{F[|GZ{F^JbƒNbƒN^J\}H_€K`L^~MTsJFd@2I:3L95K<9?:7BA?MHE]RPyjg£Ž‹Î²®èÅ¿ÿ×Ñ쳪͂|Àc^ÊVVØRSßHMÚADÖDEÕEEØHHÜJKÛEFÕ<>Ö<>ÛACÙ??Ù??ÙA@×A@ÖB>ÓB=ÒA<Ó@9ÜA<Û@;Ó@9ËB:¿C;±A6 ;1’8-Œ=0‡>/ƒ>.>-€=,<+<,<,:+9-9-~8,}9.|8-|8-|8-|90|90|90|90z:1{;2{;2z;2w<4u<3u:2s:1r90n8.o6-m7-m7-l8-l8-l8-l8-j8-l8-l8-k6.n70o81n91l7/i4,g2*e3*c1(d4*_/%^.$b2(^.$`0&p>5JE‡RL‡XR~XOrVKdRDQJ:>?/:A16A05@03>04<14<15;17:379477577557246116//6./7,.9+1<.4A08E49H58G44E24B1.8/.5..3--2+23+46+8:-9=,7?(DQ3WlEh‚Ut•`wbp˜YgPY|DWxCTu@Tu@VwBYzEYzEYzE[|G_€K_€K\}H[|G^J^J^{MSnKF_A9R4icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUneVneVlfZed_y{x—™˜²¶·ÍÑÒäéìôùüúÿÿûÿÿüÿÿýþÿþþþÿþüÿÿûÿÿúÿÿôþüçúùÝïðÑáåÄÒØ´¼ÄŸ ¨ƒ‡‘l`gEQX7DG,DC.JD4LD7KA8I>:C;9SJKia_wvœ’¾³¯ÙÎÈêÜÓþèÝÿóéÿäÛð©£ÃecµBEÇDIÚRVÛUTÑMKÊDAÍCAÔFE×EFØDDÙCDÖ=?×>@Ø@?Ö@?ÖB@ÓB?ÓB=ÔA:Ù@:Ù@:ÒB:ËE<ÀD<²B7¡<2“9.Ž<0‰=0ƒ>/>.=-~<,€=-€=-9-9-~:/}9.}9.|8-{8/{8/}:1}:1{;2{;2{;2{;2z;4x<4t;2q;1r90o9/n8.l8-l6,k7,l8-j8-j8-j8-j8-i9-j8-j8-n91m80m80m80m80i7.f4+c1(d2)a1']-#_0&c4*\-#_0&sD<}PJVP~YQpTI^J?OC7?<-46(2;*0;+1<.2=/4<14<15;17:379479668357257227007/08-.9+0;-2?.6C27E48G48G49F54>33:2/4-,2(/0(13(57*6:)6>'DQ5YmJk„Zw—fwœfl“Z_‡KWxCWuCTr@Tr@VtBXvDYwEYwEZxF]{I_}K]{I]{I_}K^|JZwKPgJAW@3I2icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUmdUneVneVneVneVmg[jkfƒ‡ˆ£§¨¹¾ÁÐÕØåíïóûýõýÿûÿÿûÿÿüÿÿüþûýþùþýøÿþ÷ÿÿóøýæôýÞî÷ØæòÎÝéÃÎÚ´¶Á™¡«†€‡efmLMQ6FH0HJ5KI:HD9D@7OGDj`_‹€¤š™·¯¬ËÆÂÞÛÔêæÝúñèÿûñÿ÷íÿÝÕû¶±åŽÊcd°@?ÃPKÉTMÉPHÃF@ÈGBÔMJÖKHÐ@?Ò>>Ó??Õ?>ÕA?ÕA?ÓB?ÓB=ÓB=Ö>9Õ@:ÒC=ÌE?ÀE>²A9¢=5•;2Ž<1‰=0ƒ>/>.=/~<,€=-€=-9-9-~:/}9.}9.|8-{8/{8/~;2~;2|<3{;2{;2{;2z;4x<4r90o9/o9/m9.l8-k7,j6+h6+i7,i7,i7,h8,h8,h8,h8,h8,m;2l7/j5-i7.j8/j8/f4+a1'e5+a2(].$a2(b3)Y* a2(yNE\VvWRiNGWC:I<3@:.:;-8<.08)/:*3;.4Ð@?ÑA@ÒC?ÑC?ÑC?ÒC=Ó?;ÒA<ÐE@ÉE@½C>¯@9 >5•=3Ž<1‰<2ƒ=1=0=1~<.=/=/~:/~:/~:/}9.|90{8/{8/{8/|<3|<3|<3{;2z;4y:3y:3w;3n70m80l7/l7/k6.h6-h6-h6-i7.h8.h8.g8.g8.g8.g8.h8.k92h6/f4-g5.i70h70e4-b1*c2+b3+_0(]1(]1(V*!b6-{ULtYRaNHN?8A7.=6,;9-9;.9<139-3;.5;/6<06<07:/58-47.69049238139/39/2:/19.19,.9+.9+/:,0;-3>.6C2:E5Qn>Qn>Qn>Qn>Qn>Sp@Sp@WtD[xH]zJ]zJ_|L_|LZwGRlECU?6D7(6)gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSkbSkbSlcTlcTmdUmdUmdUmdUmdUneVneVofWpgXpgXng]lnmz‚…“š «µ·ÄÎÐÜæèí÷ùôþÿõþýöÿüúÿúûÿùûþóøúíõöèñôãôýêôýèôüåóùßòöÛéìÍØ×¹ÅÄ¥±°’ŽregOMP;GK:FM=GOBKQG{{sŸš”ž¸ØÎÌßÓÓçÛÛóëéü÷ôðïêüüôÿÿöÿýóÿùïÿóêÿçÞÿ×ËØ“ƒ¸eS£J:´TF½WIµF;·@8ÈKEÇC>ÊC?ÌB?ÎC@ÎC>ÎC>ÍD>ÍB=ÑB<ÒC?ÎDAÅD?¸A=ª=8ž;5•<4Ž;3‰<2ƒ=3=2=1~<0=1=/~:/~:/~:/}9.|90{8/{8/{8/|<3{;2{;2z:1y:3x92w81u91n70l7/l7/j8/i7.i7.h6-g7-g7-g7-f7-f7-f7-f7-f7-f7-h70h6/g5.g5.g6/h70g6/f5.a2*e6.^2)\0'`4+a5,i=4uSJXG@E>6<5/95,;8/8:/57,36+69.5;/7:/69.69.58-57,36+28,19,28.19,19.19,19,19,.9+.9+.9+/:,0;+3>.6A17B2ex\umt’lf‰_RwKBh9KkVsCZwG]zJ^{K_|L_|LVsCNg@ÉD=ÈC<ÉB<ÑC?ÐE@ÌEAÂC=³=9¦;5œ;5•<6Œ<3‡=4…<5=4<3~<0=1=1~:/~:/~:/}9.|90{8/{8/{8/{;2{;2y:3x92w81v70v70s7/n70j8/j8/j8/j8/h8.h8.h8.g7-f7-f7-f7-d8-d8-d8-f7-g6/h70i81i81h70i81j;3l=5g80k<4b6-a5,oC:xLCtI@nMDC9056.45/8918;247.14+25,58-58-57,46+46+46+46)37)/7(.9)08+.9).9+.9)08)08)19*08)08+/7*08+19,3;.4<-9B1:C0;B0:A1:<.68*24&/3$29'IU?cu[m„gf„bWyTInE?d8Hg;Li;Nk=Nk=Li;Li;Mj
      UrDYvH[xJ]zL^{M\yKQn@G_;6B4+4/#)%gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSicSjcSjcSjbUlbVlbVmcWmdUmdUmdUleUmfVngWogZnh\oh^mjekormtzƒŠ¥®³ÃÌÑÕßáæîñôüþôýú÷ýùùþ÷úÿôüÿòüÿñüÿîýþðûøïþúñÿùïÿúíÿùéÿòßïàËÝηÁ²›¢—|ubb_NXZL]cWmwn|†}¦¬¢¾ÀµÚÕÏîäâüîîÿôôÿô÷þôõÿùùûúøûýøüÿúøÿõôüñ÷ýñÿÿñÿùèÿôãÿÌ»½p›QD©SFµSH²C:ÀJ@ÄH@ÇG>ÉF>ÈE=ÇD<ÆC;ÆC;ÍG>ÌG>ÇG>¼C;­>5Ÿ:2—:3‘>6Š=5†=4ƒ=5=4€<3;0;1;1~:/~:/~:1}90|90{8/{8/{8/z:1z:1x92w81v70u6/u6/q6.m80k90j8/j8/i9/i9/i9/h8.g7-f7-g7-f7-f7-f7-f7-f7-f5.j81m;4k:3j92j:0m>4oC8l@5oD;d<2c=2zVJ†dZyWMbLA>:13814927<54:0/5+25,9<336+25*24)03(13(25*46+47,.6),7)/7*-8*/7*/7*/7*/7*19,08+08-/7,/7,/7,08-08+7?09B14*00!''heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjdXldYlcZmeZmeXmfVg`NjeRnkXol]he\feasqr‚†Š“–ž¡«³¶ÃÈËØÝàêîïö÷ùùûúüþýþþüÿÿúýþöúýòùüñúýòûþóùúòúúòùùíüúëþüçù÷ÞéåÊÕÔ¶º¹›˜˜|qtY_dMbkXr}l„‚‘›´¹²ËÌÇãâÞòîë÷óòû÷öýùøüø÷ÿþüþþüþþüýÿúýÿúýÿúýÿúýÿúúü÷ÿÿúÿûöÿêåا £`X›D=µNE¿MCÂF<ÄD9ÊE<ÎI@ÎKAËH@ÇG<ÆG8ÃH8½J8³H8¦E5šB4‘B5‹C5†B5„B6‚@4‚>3‚<2„:1†91†9191~:1|91{80z7/z7/w7.v6-w7.w7.w8/w8/v7.u6-q5+n3+l7/i81i81h70h70g6/g6/g6/f5.g6/i70i81h70g6/e4-e3,h3-j5/m80k90j:0i;.i=0kA3gB2jI:dH:v_O~k\ŠxjŒoRJ=79.4:04:039/39/39/28.28.17-17-36-06,25,/5+14+/5+/4-.5-/4-.5-/4-/4-/4-/4-05./4-/4-.3,.3,/4-/4-/6.1;23=26@58B79D67B45@03>-4?.DQ=WeN[kQPbHEX<@T8BW6Ic>Ke>Kf=Kf=JeOj?UpGYtK\vO]wP]wRWqNHb?;O6&1+&+.$),heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVidQjhSmjWjk[gg_lll~„“š¨¯µ¸ÂÄÑÖÙâçêòóõûüþÿþÿÿþÿþýûÿþúÿÿúþÿùûüôøûòöüò÷ýó÷úñøúïøúí÷úéùûåòõÚßâÃÌЯ´¸—‘–vkqUYaI_kUtoŒ˜Š§œ¿Á¼ÓÓÑççåóóñ÷÷õûûùüüúûûùþþüþþüþþüþþüþþüþþüþþüûÿþõÿÿõÿÿþÿÿÿûúÿíêð¿ºÂ~uŸKA¯M@¹K>ÂL@ÅK>ÃE9¼=4¾?6ÃE9ÄF7ÃJ7½L:³J7¦F6™C2‘C6E7…C7‚B8A7>5‚<4ƒ:3†91„93~92}:2z:1z:1y90x8/v7.v7.u6-v7.t8.t8.t8.r6,o5*m4+l7/i81j81h70i70h70g6/g6/e3,e3,g5.h6/j81j81j81k92k60l71k90k;1k;/j>1j@0iD2gH6kP=gRAufSueŒ…s†ƒrKL<69.39/39/39/28.28.28.17-17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4.05//4..3-.3-.3-.3-/4./6/.80/:21=34@66B66B66B45B16C1CP>P]IR`IIW@AO6BP7EU:Jb@Jd?Ke@Ke>Ic6I5&1-',0$)-heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVmhUkiTmjWjk[kkcwww‘’—§¬²¿ÆÌÒÜÞìñô÷üÿþÿÿþÿÿÿþÿÿþÿþýûÿþúÿÿúýþøúûóõøïñ÷ëñ÷ëô÷ìõùëöøêõøåõ÷áîîÔÛÛ¿ÉÊ«°±’“–yuy`kpZt{iˆŸ§œ®µ­ÍÏÊÞÞÜïïíøøöûûùþþüþþüýýûþþüþþüþþüþþüþþüþþüþþüýÿþûÿÿûÿÿÿÿÿÿûùÿúôÿ÷íýÑÆØž”L=¥RB©L;§@1·G;ÏYMÏUJ¼@4ÄD7ÆH:ÃK=¹I;ªB7?3—@7“E;‰@9„A9A8?6~>5}=4<4}=4z;4x<4w;3w;3u:2t91t91t91r90r90r90r90o9/n8.l6,k5+l7/j81l71j81k60i70i70h6/g5.g5.f5.g6/h70i81k:3k:3l;4j;3i:0h<1k?2jC4iD2fE2fI7lVAjYGujV†m‘Ž{€mEF658-28.28.28.17-17-17-06,17-17-17-06,06,/5+/5+/5+/4./4./4./4./4./4./4./4./4./4..3--2,-2,.3-/4..5.+5-+6.-9//;12>24@46B47D38E3?L:ER>CQ:;I28F->L3DT9J_@Jb@LdBKc?Ia=G`9F_8G`9RkDXpL]uS^vVZqTPgK=T8.A.&1-',0%*.heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZmfVniVljUlkWlm]pqi€‚ž¡¦¹¾ÄÄËÑÛåçõúýûÿÿüýÿüýÿþüýüûùÿþüÿÿûÿþùûüôõöîîñæéïãçíßíñâðôåñôãñôßòñÜêêÐØؼÇÇ«²±•¡¡‰‘“}“€œž‘ª­¢¶»´ÀÅ¿ÜÜÚééçööôûûùýýûÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþþûûýÿþÿÿþÿ÷òïüóìÿüóÿûíÿôäìñ¹p•P@¢O?¸XJ·M?µE9ÀG<ÁA6ÈE;ÅI?½G=¯@9¡<4š=6–A4e=1f>2hC3iE5fG3cG2cJ6hV@i\IskV…‚oŽzpq_9=,47,28.17-17-17-06,06,06,17-17-17-06,06,/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3-.3-.3--2,-2,-2,-2,.3--4-*4,)4,*6,+7-.:.1=14@25A36C2:G5N4DX¿@7ÆC;ÅF?¿D=±>;¦:7ž:8™>;‘=;Š?<„@=}@=xA6s>6r=5r=5r=5p>5o=4n>4m=3l<2k;1j;1i:0i:0j:0n72p62p62m61m61l71i70i70l;4k:3h91e90e90e90e:1d<2fB6cA5cC4dD5dG5dI6bI3_I2^L6eV?jbMrmW„ƒo„‡r[`L3:(28,28.17-17-17-06,06,06,17-17-17-06,06,/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3--2,-2,,1+,1+,1+,1+-2,,3,,6.+5-*4+*4++5,.8-0;-2=/2=-5@/6A05A-1=)1=)5A-8F/=O5@T8FY=H\@J]?I^=K^>K`?TgG[pQcvZauZYkSJ]G6G4&4%$-*$),"'*heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjcYkdZlc\md[meZlfVjgTkjUlnYorasvm…„Ÿ¤¨¸¿ÇÖßäí÷ùûÿÿûÿÿûüÿþÿÿÿþÿþýûÿÿûÿÿúüüôóõêëíâãçÙÝãÕÜãÑäéÓçìÕéíÖêìÔëëÓèæÏßÚÄÓθÓκÌƶËøÐÉÁ×ÒÎàÛØêæåðïíóòðùù÷ýýûýýûýýûÿÿýþþüüüúþþüþþüþþüþþüþþüþþüþþüÿýüÿûüÿøùÿþýþÿýùÿýôÿøïÿõ÷ÿöð÷çÿÿíÿîÛͧ”¤kX¢[GªWE­L;¹D:ÀD<ÀE>¼E?´A>ª=:¢:9š;9•=5o?5o?5o@6n?5m>4k<2h<1h<1h<1l<2o83q62p62p62m61l71j81i81h70g80e90e:1d<2e?4f@5dB6^B4aG8cL:dM;cM8`K6]K3]M4]Q9bX?mhRss[€ƒnv{eFO:4=*39-28.28.28.17-17-17-06,17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,-2,,1++0*+0*+0*+0*,1+,3,.5.,6.*4+*4+*4++5,-7,.9+-8*0;+4?/5@/4?.3?+3>-3@,7F/9K3@O8BT:GW¸J=¹I>¸I@´G@¯D>¥=:œ:7–=9>:ˆ?9€A:xA:tD:pF:pE5j>5n=6o83r73p62p62n72l71j81i81d8/d90c;1d>3d@4cA5cA5_C5ZE4_NnlUtv^|kcmU2>(6B.3;.39/39/39/28.28.28.17-17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,,1+,1++0**/)*/)+0*,1++2+-4-+5-*4,*4,+5,+5,,6+-7,,6+/:,2=/6A17B27B15@04?.2?-4C.:G3=L5AO8DT:JX?L\BTbI\kTcqZ^mXUbPDRA2>0#/%&/,&,,$**heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdVjdVjcYkdZlc\md[lfZlfVolYmlWjlWgkZflbr{xŽ˜š¨±¸ÊÓØãìñøýÿ÷üÿúûÿþÿÿÿþÿúùõÿÿúýýõøøîðòåéëÝåéØãêØåíÖæìÒéíÒêíÒèèÎèæÏèãÏáÚÈØÐÃØÎÄÝÒÌêßÛøíëÿôöÿõùÿõûÿùüþüýÿÿýÿÿýþþüþþüÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüÿþúÿýûÿýûýüúùýüøÿÿõÿÿóÿÿíýúóÿûûÿúÿÿôÿöæÿóßÿãÍ×­•©oY¨WD®Q@¬O>¯OA±OB­K@¤C<™<5•>7?6ˆ?8A7{B7uD6qE8qE8p?8q?8s>8q?8q?8q?8q?8p?8sB;qB:o@8m>6l=5j>5m>6o>7o83q73o83m82m82i81h91f:1f;2d>3d@4bB5`C5]A3\@2WB1TG4[S>f^Gi^HbX?ZS9ZS7\W:ZV;XW;kmUsw^u}fUaI&28D03;.4:04:039/39/39/28.28.17-17-17-06,06,/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,,1++0*+0**/)*/)+0*+0*,1++2+)3+*4,+5-+5,,6--7.-7,,6+.8-2<16A39D69D47B46A10;+2?-5B09F22=/x=/t?/sB3tD6r=5r=7t=8s>8u@:u@:t?9q?8sA:q@9q@9q@9p?8n?7o>7o>7k92m82l:3l;4l;4h<3g<3c=2c?3^>1dG9cG9T=-N9(M8'@1WQ;PN7KI0OK2]Y>ieJeaDVU7XX<]`CosZz€fdlU=I1-9#2>*4-1=)2>*9E/BN8IU?O[GVbN]hWYdTLWI/u@8s>8u>9u@:t?9o=6p>7sA:q?8p?8p?8n?7o>7m>6n=6m>6k<4l=5m>6k?6j?6gA6eA5bB5dG9[A2^G7^I8N=+F7$G8%>6!LL4GK2DG,DD*MM1\[?baC`aBYY=dgJsw^sy_X`I:D,/;%7C/6>16<26<26<25;15;15;15;15;15;15;14:04:039/39/39/27127127116016016005/05/.3-.3--2,-2,,1+,1++0*+0**1**1*)0))0))0)*1*+2*,3+.5--4,.5-07/4;39A6?F>BJ?;F8:E57B14?.3?+6B.)r>)s@+tD0vE4q?4n<3q<4tB9sA8o?5qA7xH>n>4m>4m>4k?4l=3j>3l=3j>3g?5gA6gA6gC7eC7cC6`C5^D5bK;UB1ZI7`S@RG3C;&E=(FA+AE,BH.AE*<@%?B%NN2_`AijKaaEnqTvzagmSJO94<%4=(=F38>28>48>48>47=37=37=36<28>48>47=37=37=36<26<26<25:449349349338238238227105/05//4..3--2,,1++0*+0*).().().().().(*/)+0*,1+160/4.,1+,1+/4.6;4=BK:4.8/-4--4-,3,gdUgdUheVheVheVheVifWifWifWifWifWifWifWifWifWifWkeWkeWlcZmd[md]mf\mg[jiWkmXimVjoYjs`hthm|wˆ˜˜¦³¹¿ÊÐÓÜãëðööûÿüýÿýÿþÿÿýÿþùþþöýýñúûí÷úçô÷âîóÜåíÕâèÎÛàÀ×Ú»ÖÖ¼Ù×ÂÝ×ÇÞ×ÍåÛÙìààøìðûðöÿõûÿùþÿúýÿûûÿûûÿýüÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüøÿþøÿþûÿþþþþÿüþÿúÿÿùÿÿøþÿúýÿùüÿùùÿýúÿÿøÿÿøûÿõüþðÿÿíÿüéÿñßÿðÝÿïÚñÒ½´z{R>tJ4uH3vI4zM8}P;yL7nA.e7'{M@sD:qB8sD:oC8g;0d8-g=1i?3i?3i?3g?3f>2f>2f>2e?2b@4bB5`C5_C5_C5[D4ZE4WD3XI6OB/\T?oiSc^HMK4IG0IK3>D*?H-@F*48>47=37=37=39?58>48>48>48>48>48>48>47<67<67<66;56;56;55:45:438238216005//4.-2,,1+,1++0*+0**/)*/)+0*,1+-2,-2,05/.3-+0*+0*-2.2718=9;B:@K=@M;@M;=J68E13@,1?(0>'4.:0,6..5.-4-gdUgdUgdUheVheVifWifWifWifWifWifWifWifWifWifWifWkeWldWlcZmd[md]mf\mg[jiWkmXinWiqZgs_drejyt…••£²·½ÈÎÒÛâêïõôùýûüÿýÿþÿÿýÿÿúÿÿøÿÿóþÿñûþë÷úåðõÞæîÖâèÌÙÜ¿ÕÕ¹ÒйÔѾÚÔÈàÙÑêàßôéíþóùÿ÷üÿûÿÿýÿÿþÿÿþüÿþúÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþúÿÿúÿÿûÿÿþþþÿýþÿüüÿûüÿûúÿúøÿù÷ÿú÷ÿýøÿÿûÿÿûýÿúýþùùôîÿþöÿýôÿüóÿûîÿ÷çûæÕéÒÀÏ´¡¶š…”uawVCjI6lI6rM;uP>mF7iB3gB2jE5nI9nJ:oK;oK;eA1cB1cB1cB1cB1cB1bC1`C3]F6\G6\G6ZG6ZG6WH5TG4RG3PH3NH2fdM~~frrZVX@JL4GM3A.:>-;>39?59?58>48>47=37=37=38>48>48>48>48>48>48>48>49>89>89>88=78=78=77<67<66;55:449338227105//4./4.-2.-2.,1-+0,+0,,1--2.-2.,1-,1-,1-,1-.210513764;4;G9=L9@O<@O:8F71?2-9-,6--4,,3+fcTfcTgdUheVheVifWjgXjgXifWifWifWifWifWifWifWifWldWldWlcZmd[md]mf\mg[jiWkmXinWiqZgs_bpcgxr‚””£²·ÀËÑÔÝäëðöõúþûüÿýÿþÿÿýÿÿúÿÿøÿÿôÿÿóÿÿïúýèò÷àçðÕâèÌ×Ú½ÑѵÍË´Î˺ÖÏÅÞ×Ñìâã÷îóÿöþÿúÿÿýÿÿþÿÿÿýþÿúþÿùþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýþÿýþÿýÿþýÿüþÿúþÿùÿÿ÷ýýóýýõþýøþýùÿþüþþþÿýÿÿþÿþùÿÿüÿÿûüûöóÿøòÿýôÿþñÿýíÿúéÿòà÷äÓçÒ¿Ò»©¹ŸŽŸ„srb|]K}^LtUCaD2W:(Y<*[>,X=*`E2`E2`E2_F2`G3`G3`G3]H3\K7\M:\M:YL9XM9UM8RL6QL6NL5QQ9ikS|€gmqXSY?FL2>G,48>48>48>47=37=38>48>48>48>49?59?5:?9:?9:?9:?99>89>89>88=78=78=77<66;55:4493382382/40.3/-2.,1-+0,+0,+0,+0,+0,,1--10.21/32/32/32-4-3?17F3=L7@O:?N7M:MJ9BC3=@5;A7;A7;A7:@6:@6:@69?58>48>48>49?59?5:@6:@6:@6;@:;@:;@::?9:?99>89>89>8:?9:?99>89>88=78=77<67<6495273162/40-2.,1-+/.+/.,0/,0/-10.21.23.23-12+1-+9*/@-6H2;M7=O7A6>A6>A6=@7=@79?59?59?5:@6:@6:B7:B7:B7;@9;@9;@::?8:?99>79>89>7;@:;@9;@:;@9:?9:?8:?9:?98?87=94;4382160/4..3/.3/.21.21,2.,2.+2++2*,4))6%$6)=!2F+8L1;O6;M5;M5;M58J29K3;M5H&DK*FM+EL*PV4PT3KN/HK,TT8bbFccIZZ@[Y@\ZA][B][B[Y@XV=US:SQ8HF1GD1DA0A?0@>1>>2??5>@5;>59?59?59A69A48C58C58C5:B79A69@88@58?79A69@8:B7:A9:B79@8:B7;B:E=8B:8B:7A88@56>14O<>P::L6@R8EW=FY=DX=@T;5H2+<),6+,3++2*ZgM[hN\hP]iQbjSckTglXhkXghVghVifWifWkeWlfXmeZmgYmgYkhYkg[kg\jf]jf[hfZefVhiWglVfo\erajwnzŠ‰œ«²ºÈÑÐÙàáéìò÷ûøþþùþúúÿøûþóùýïøùë÷øæõôâíìØéæÓåâÏÜ×ÄÒ˹ʿ­Á´¤¹­¡¼¯¦Á¶²ËÁÀÛÐÖæßæûóþý÷ÿþûÿÿþÿþýÿüýÿüýÿüýÿþþþþþþþþþþþþþþþþþþÿþüÿþüÿþüÿþüÿýúÿüùÿüùÿýúÿýùÿþúÿþýÿýüÿüýÿýþÿþÿÿþÿÿýþýûüÿþýÿþûÿüúÿøóøíçòåÝöèßûðêÿúýÿüÿÿýþÿÿýÿÿûýÿüýÿþüýÿýþÿýþÿÿýÿÿþüÿþõÿÿîÿþèÿÿäúöÝýûâäàÇ‹‡lRM0SN0QK+QK+UO/UO/TO1TO1SO2SO2QP4QP4QM2PO3PN5NQ6MO7JP6HM6EM5HQ6EN1BK.?I'BI(FM+JP,KQ-NR/PT1VZ7^bA_bCY\?TWWU>XV=YW>XV=XW;WV:XT9QK3OI3LG4ID1DA2B@3A?3>@5<=59?59?59A67B48C57D37D3:B79A69A68@58@59A69A6:B7:B7:B7:B7:B7;C874>63=40>-3C)9M*BY/Ga1Op;Ln;Li=Fa>BY?F;J@?I>>I9?G8>F7>D8=B;>E>9C;6@74B19I/BV3Pg=XrB^J[}JXuIMhECZ@9O:6G54E2XR6:@6:@69A67B47B46C26C2;C8:B79A69A69A69A6:B7;C8;C8:B7:B7;C8;C8=E:>F;=G<=G?>H=>I9?G8>F7>D8=B;=D=9C;6@74B19I/DX5Ri?[uEZ{FWyFTqEIdA=T:2H3/@.->+6H2@R8L_CReGSgKOcG@W=6I30:/07/-4,YgMZhN\hP^jRblTemVinZjo[mn\lm[mk\mj[nhZnhZoi]oi[liZkhYjfZieZie\ieZig[ghXghVchRajWerao|s{‹ŠŸ¦¢°¹ÁËÔÔÝäéñôòúüôúøñöðíðçèìÞâãÕÚÛÉÒÑ¿ÌɶÉıþ«¿¸¦¼³¢Ê¾®ÓŸÜÐÄæÙÑíâàöìíÿôúÿùÿÿ÷ÿÿúÿÿüÿþýÿýüÿûüþüþýþÿÿþþþþþþþþþþþþþþþþþþÿþüÿþüþýûþýûÿýúÿýúÿýúÿûøÿúöþùõÿýüÿûúýùúþúûþüýÿýþÿþÿÿýþÿüûÿýúÿüúÿøó÷ìæòåÝøêáÿôîÿúýÿüÿÿýþÿÿýÿÿûýÿúýÿþüýÿüýÿýþÿÿþÿÿÿýÿþõÿýìÿûãþúßÿüæÿÿéçâÌŒˆoRL2TO2TM0UN1TN.UO/VQ3VQ3UQ4SO2ON2NM1PL1NM1NL3KN3LN6KQ7KP9JR:LU:IR5JS6OY7SZ9T[9]c?fnG‚’c’¦sŸ±›ª’¡zˆ”pr{\\bFLP7KM5LK6KI4LJ5PK5TN8VP:WQ;VP:SN;QL9LI:IG:GE9CE:=>6:@6:@69A67B47B46C26C2;C8;C8:B79A69A6:B7;C8;C8;C8;C8;C8;C8F;=G<=G?=G<=H8>F7=E6=C7=B;:A:7A95?64B19I/BV3Ne;Uo?Tu@RtAPmAE`=9P6-C.+<*+<)1C-image_width / (dstinfo->max_h_samp_factor * DCTSIZE); - - for (ci = 0; ci < dstinfo->num_components; ci++) { - compptr = dstinfo->comp_info + ci; - comp_width = MCU_cols * compptr->h_samp_factor; - for (blk_y = 0; blk_y < compptr->height_in_blocks; - blk_y += compptr->v_samp_factor) { - buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, src_coef_arrays[ci], blk_y, - (JDIMENSION) compptr->v_samp_factor, TRUE); - for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { - for (blk_x = 0; blk_x * 2 < comp_width; blk_x++) { - ptr1 = buffer[offset_y][blk_x]; - ptr2 = buffer[offset_y][comp_width - blk_x - 1]; - /* this unrolled loop doesn't need to know which row it's on... */ - for (k = 0; k < DCTSIZE2; k += 2) { - temp1 = *ptr1; /* swap even column */ - temp2 = *ptr2; - *ptr1++ = temp2; - *ptr2++ = temp1; - temp1 = *ptr1; /* swap odd column with sign change */ - temp2 = *ptr2; - *ptr1++ = -temp2; - *ptr2++ = -temp1; - } - } - } - } - } -} - - -LOCAL(void) -do_flip_v (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, - jvirt_barray_ptr *src_coef_arrays, - jvirt_barray_ptr *dst_coef_arrays) -/* Vertical flip */ -{ - JDIMENSION MCU_rows, comp_height, dst_blk_x, dst_blk_y; - int ci, i, j, offset_y; - JBLOCKARRAY src_buffer, dst_buffer; - JBLOCKROW src_row_ptr, dst_row_ptr; - JCOEFPTR src_ptr, dst_ptr; - jpeg_component_info *compptr; - - /* We output into a separate array because we can't touch different - * rows of the source virtual array simultaneously. Otherwise, this - * is a pretty straightforward analog of horizontal flip. - * Within a DCT block, vertical mirroring is done by changing the signs - * of odd-numbered rows. - * Partial iMCUs at the bottom edge are copied verbatim. - */ - MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE); - - for (ci = 0; ci < dstinfo->num_components; ci++) { - compptr = dstinfo->comp_info + ci; - comp_height = MCU_rows * compptr->v_samp_factor; - for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; - dst_blk_y += compptr->v_samp_factor) { - dst_buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, - (JDIMENSION) compptr->v_samp_factor, TRUE); - if (dst_blk_y < comp_height) { - /* Row is within the mirrorable area. */ - src_buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, src_coef_arrays[ci], - comp_height - dst_blk_y - (JDIMENSION) compptr->v_samp_factor, - (JDIMENSION) compptr->v_samp_factor, FALSE); - } else { - /* Bottom-edge blocks will be copied verbatim. */ - src_buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_y, - (JDIMENSION) compptr->v_samp_factor, FALSE); - } - for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { - if (dst_blk_y < comp_height) { - /* Row is within the mirrorable area. */ - dst_row_ptr = dst_buffer[offset_y]; - src_row_ptr = src_buffer[compptr->v_samp_factor - offset_y - 1]; - for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; - dst_blk_x++) { - dst_ptr = dst_row_ptr[dst_blk_x]; - src_ptr = src_row_ptr[dst_blk_x]; - for (i = 0; i < DCTSIZE; i += 2) { - /* copy even row */ - for (j = 0; j < DCTSIZE; j++) - *dst_ptr++ = *src_ptr++; - /* copy odd row with sign change */ - for (j = 0; j < DCTSIZE; j++) - *dst_ptr++ = - *src_ptr++; - } - } - } else { - /* Just copy row verbatim. */ - jcopy_block_row(src_buffer[offset_y], dst_buffer[offset_y], - compptr->width_in_blocks); - } - } - } - } -} - - -LOCAL(void) -do_transpose (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, - jvirt_barray_ptr *src_coef_arrays, - jvirt_barray_ptr *dst_coef_arrays) -/* Transpose source into destination */ -{ - JDIMENSION dst_blk_x, dst_blk_y; - int ci, i, j, offset_x, offset_y; - JBLOCKARRAY src_buffer, dst_buffer; - JCOEFPTR src_ptr, dst_ptr; - jpeg_component_info *compptr; - - /* Transposing pixels within a block just requires transposing the - * DCT coefficients. - * Partial iMCUs at the edges require no special treatment; we simply - * process all the available DCT blocks for every component. - */ - for (ci = 0; ci < dstinfo->num_components; ci++) { - compptr = dstinfo->comp_info + ci; - for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; - dst_blk_y += compptr->v_samp_factor) { - dst_buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, - (JDIMENSION) compptr->v_samp_factor, TRUE); - for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { - for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; - dst_blk_x += compptr->h_samp_factor) { - src_buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x, - (JDIMENSION) compptr->h_samp_factor, FALSE); - for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) { - src_ptr = src_buffer[offset_x][dst_blk_y + offset_y]; - dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x]; - for (i = 0; i < DCTSIZE; i++) - for (j = 0; j < DCTSIZE; j++) - dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; - } - } - } - } - } -} - - -LOCAL(void) -do_rot_90 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, - jvirt_barray_ptr *src_coef_arrays, - jvirt_barray_ptr *dst_coef_arrays) -/* 90 degree rotation is equivalent to - * 1. Transposing the image; - * 2. Horizontal mirroring. - * These two steps are merged into a single processing routine. - */ -{ - JDIMENSION MCU_cols, comp_width, dst_blk_x, dst_blk_y; - int ci, i, j, offset_x, offset_y; - JBLOCKARRAY src_buffer, dst_buffer; - JCOEFPTR src_ptr, dst_ptr; - jpeg_component_info *compptr; - - /* Because of the horizontal mirror step, we can't process partial iMCUs - * at the (output) right edge properly. They just get transposed and - * not mirrored. - */ - MCU_cols = dstinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE); - - for (ci = 0; ci < dstinfo->num_components; ci++) { - compptr = dstinfo->comp_info + ci; - comp_width = MCU_cols * compptr->h_samp_factor; - for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; - dst_blk_y += compptr->v_samp_factor) { - dst_buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, - (JDIMENSION) compptr->v_samp_factor, TRUE); - for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { - for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; - dst_blk_x += compptr->h_samp_factor) { - src_buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x, - (JDIMENSION) compptr->h_samp_factor, FALSE); - for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) { - src_ptr = src_buffer[offset_x][dst_blk_y + offset_y]; - if (dst_blk_x < comp_width) { - /* Block is within the mirrorable area. */ - dst_ptr = dst_buffer[offset_y] - [comp_width - dst_blk_x - offset_x - 1]; - for (i = 0; i < DCTSIZE; i++) { - for (j = 0; j < DCTSIZE; j++) - dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; - i++; - for (j = 0; j < DCTSIZE; j++) - dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; - } - } else { - /* Edge blocks are transposed but not mirrored. */ - dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x]; - for (i = 0; i < DCTSIZE; i++) - for (j = 0; j < DCTSIZE; j++) - dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; - } - } - } - } - } - } -} - - -LOCAL(void) -do_rot_270 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, - jvirt_barray_ptr *src_coef_arrays, - jvirt_barray_ptr *dst_coef_arrays) -/* 270 degree rotation is equivalent to - * 1. Horizontal mirroring; - * 2. Transposing the image. - * These two steps are merged into a single processing routine. - */ -{ - JDIMENSION MCU_rows, comp_height, dst_blk_x, dst_blk_y; - int ci, i, j, offset_x, offset_y; - JBLOCKARRAY src_buffer, dst_buffer; - JCOEFPTR src_ptr, dst_ptr; - jpeg_component_info *compptr; - - /* Because of the horizontal mirror step, we can't process partial iMCUs - * at the (output) bottom edge properly. They just get transposed and - * not mirrored. - */ - MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE); - - for (ci = 0; ci < dstinfo->num_components; ci++) { - compptr = dstinfo->comp_info + ci; - comp_height = MCU_rows * compptr->v_samp_factor; - for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; - dst_blk_y += compptr->v_samp_factor) { - dst_buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, - (JDIMENSION) compptr->v_samp_factor, TRUE); - for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { - for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; - dst_blk_x += compptr->h_samp_factor) { - src_buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x, - (JDIMENSION) compptr->h_samp_factor, FALSE); - for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) { - dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x]; - if (dst_blk_y < comp_height) { - /* Block is within the mirrorable area. */ - src_ptr = src_buffer[offset_x] - [comp_height - dst_blk_y - offset_y - 1]; - for (i = 0; i < DCTSIZE; i++) { - for (j = 0; j < DCTSIZE; j++) { - dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; - j++; - dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; - } - } - } else { - /* Edge blocks are transposed but not mirrored. */ - src_ptr = src_buffer[offset_x][dst_blk_y + offset_y]; - for (i = 0; i < DCTSIZE; i++) - for (j = 0; j < DCTSIZE; j++) - dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; - } - } - } - } - } - } -} - - -LOCAL(void) -do_rot_180 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, - jvirt_barray_ptr *src_coef_arrays, - jvirt_barray_ptr *dst_coef_arrays) -/* 180 degree rotation is equivalent to - * 1. Vertical mirroring; - * 2. Horizontal mirroring. - * These two steps are merged into a single processing routine. - */ -{ - JDIMENSION MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x, dst_blk_y; - int ci, i, j, offset_y; - JBLOCKARRAY src_buffer, dst_buffer; - JBLOCKROW src_row_ptr, dst_row_ptr; - JCOEFPTR src_ptr, dst_ptr; - jpeg_component_info *compptr; - - MCU_cols = dstinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE); - MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE); - - for (ci = 0; ci < dstinfo->num_components; ci++) { - compptr = dstinfo->comp_info + ci; - comp_width = MCU_cols * compptr->h_samp_factor; - comp_height = MCU_rows * compptr->v_samp_factor; - for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; - dst_blk_y += compptr->v_samp_factor) { - dst_buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, - (JDIMENSION) compptr->v_samp_factor, TRUE); - if (dst_blk_y < comp_height) { - /* Row is within the vertically mirrorable area. */ - src_buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, src_coef_arrays[ci], - comp_height - dst_blk_y - (JDIMENSION) compptr->v_samp_factor, - (JDIMENSION) compptr->v_samp_factor, FALSE); - } else { - /* Bottom-edge rows are only mirrored horizontally. */ - src_buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_y, - (JDIMENSION) compptr->v_samp_factor, FALSE); - } - for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { - if (dst_blk_y < comp_height) { - /* Row is within the mirrorable area. */ - dst_row_ptr = dst_buffer[offset_y]; - src_row_ptr = src_buffer[compptr->v_samp_factor - offset_y - 1]; - /* Process the blocks that can be mirrored both ways. */ - for (dst_blk_x = 0; dst_blk_x < comp_width; dst_blk_x++) { - dst_ptr = dst_row_ptr[dst_blk_x]; - src_ptr = src_row_ptr[comp_width - dst_blk_x - 1]; - for (i = 0; i < DCTSIZE; i += 2) { - /* For even row, negate every odd column. */ - for (j = 0; j < DCTSIZE; j += 2) { - *dst_ptr++ = *src_ptr++; - *dst_ptr++ = - *src_ptr++; - } - /* For odd row, negate every even column. */ - for (j = 0; j < DCTSIZE; j += 2) { - *dst_ptr++ = - *src_ptr++; - *dst_ptr++ = *src_ptr++; - } - } - } - /* Any remaining right-edge blocks are only mirrored vertically. */ - for (; dst_blk_x < compptr->width_in_blocks; dst_blk_x++) { - dst_ptr = dst_row_ptr[dst_blk_x]; - src_ptr = src_row_ptr[dst_blk_x]; - for (i = 0; i < DCTSIZE; i += 2) { - for (j = 0; j < DCTSIZE; j++) - *dst_ptr++ = *src_ptr++; - for (j = 0; j < DCTSIZE; j++) - *dst_ptr++ = - *src_ptr++; - } - } - } else { - /* Remaining rows are just mirrored horizontally. */ - dst_row_ptr = dst_buffer[offset_y]; - src_row_ptr = src_buffer[offset_y]; - /* Process the blocks that can be mirrored. */ - for (dst_blk_x = 0; dst_blk_x < comp_width; dst_blk_x++) { - dst_ptr = dst_row_ptr[dst_blk_x]; - src_ptr = src_row_ptr[comp_width - dst_blk_x - 1]; - for (i = 0; i < DCTSIZE2; i += 2) { - *dst_ptr++ = *src_ptr++; - *dst_ptr++ = - *src_ptr++; - } - } - /* Any remaining right-edge blocks are only copied. */ - for (; dst_blk_x < compptr->width_in_blocks; dst_blk_x++) { - dst_ptr = dst_row_ptr[dst_blk_x]; - src_ptr = src_row_ptr[dst_blk_x]; - for (i = 0; i < DCTSIZE2; i++) - *dst_ptr++ = *src_ptr++; - } - } - } - } - } -} - - -LOCAL(void) -do_transverse (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, - jvirt_barray_ptr *src_coef_arrays, - jvirt_barray_ptr *dst_coef_arrays) -/* Transverse transpose is equivalent to - * 1. 180 degree rotation; - * 2. Transposition; - * or - * 1. Horizontal mirroring; - * 2. Transposition; - * 3. Horizontal mirroring. - * These steps are merged into a single processing routine. - */ -{ - JDIMENSION MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x, dst_blk_y; - int ci, i, j, offset_x, offset_y; - JBLOCKARRAY src_buffer, dst_buffer; - JCOEFPTR src_ptr, dst_ptr; - jpeg_component_info *compptr; - - MCU_cols = dstinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE); - MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE); - - for (ci = 0; ci < dstinfo->num_components; ci++) { - compptr = dstinfo->comp_info + ci; - comp_width = MCU_cols * compptr->h_samp_factor; - comp_height = MCU_rows * compptr->v_samp_factor; - for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks; - dst_blk_y += compptr->v_samp_factor) { - dst_buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y, - (JDIMENSION) compptr->v_samp_factor, TRUE); - for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) { - for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks; - dst_blk_x += compptr->h_samp_factor) { - src_buffer = (*srcinfo->mem->access_virt_barray) - ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x, - (JDIMENSION) compptr->h_samp_factor, FALSE); - for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) { - if (dst_blk_y < comp_height) { - src_ptr = src_buffer[offset_x] - [comp_height - dst_blk_y - offset_y - 1]; - if (dst_blk_x < comp_width) { - /* Block is within the mirrorable area. */ - dst_ptr = dst_buffer[offset_y] - [comp_width - dst_blk_x - offset_x - 1]; - for (i = 0; i < DCTSIZE; i++) { - for (j = 0; j < DCTSIZE; j++) { - dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; - j++; - dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; - } - i++; - for (j = 0; j < DCTSIZE; j++) { - dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; - j++; - dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; - } - } - } else { - /* Right-edge blocks are mirrored in y only */ - dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x]; - for (i = 0; i < DCTSIZE; i++) { - for (j = 0; j < DCTSIZE; j++) { - dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; - j++; - dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; - } - } - } - } else { - src_ptr = src_buffer[offset_x][dst_blk_y + offset_y]; - if (dst_blk_x < comp_width) { - /* Bottom-edge blocks are mirrored in x only */ - dst_ptr = dst_buffer[offset_y] - [comp_width - dst_blk_x - offset_x - 1]; - for (i = 0; i < DCTSIZE; i++) { - for (j = 0; j < DCTSIZE; j++) - dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; - i++; - for (j = 0; j < DCTSIZE; j++) - dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j]; - } - } else { - /* At lower right corner, just transpose, no mirroring */ - dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x]; - for (i = 0; i < DCTSIZE; i++) - for (j = 0; j < DCTSIZE; j++) - dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j]; - } - } - } - } - } - } - } -} - - -/* Request any required workspace. - * - * We allocate the workspace virtual arrays from the source decompression - * object, so that all the arrays (both the original data and the workspace) - * will be taken into account while making memory management decisions. - * Hence, this routine must be called after jpeg_read_header (which reads - * the image dimensions) and before jpeg_read_coefficients (which realizes - * the source's virtual arrays). - */ - -GLOBAL(void) -jtransform_request_workspace (j_decompress_ptr srcinfo, - jpeg_transform_info *info) -{ - jvirt_barray_ptr *coef_arrays = NULL; - jpeg_component_info *compptr; - int ci; - - if (info->force_grayscale && - srcinfo->jpeg_color_space == JCS_YCbCr && - srcinfo->num_components == 3) { - /* We'll only process the first component */ - info->num_components = 1; - } else { - /* Process all the components */ - info->num_components = srcinfo->num_components; - } - - switch (info->transform) { - case JXFORM_NONE: - case JXFORM_FLIP_H: - /* Don't need a workspace array */ - break; - case JXFORM_FLIP_V: - case JXFORM_ROT_180: - /* Need workspace arrays having same dimensions as source image. - * Note that we allocate arrays padded out to the next iMCU boundary, - * so that transform routines need not worry about missing edge blocks. - */ - coef_arrays = (jvirt_barray_ptr *) - (*srcinfo->mem->alloc_small) ((j_common_ptr) srcinfo, JPOOL_IMAGE, - SIZEOF(jvirt_barray_ptr) * info->num_components); - for (ci = 0; ci < info->num_components; ci++) { - compptr = srcinfo->comp_info + ci; - coef_arrays[ci] = (*srcinfo->mem->request_virt_barray) - ((j_common_ptr) srcinfo, JPOOL_IMAGE, FALSE, - (JDIMENSION) jround_up((long) compptr->width_in_blocks, - (long) compptr->h_samp_factor), - (JDIMENSION) jround_up((long) compptr->height_in_blocks, - (long) compptr->v_samp_factor), - (JDIMENSION) compptr->v_samp_factor); - } - break; - case JXFORM_TRANSPOSE: - case JXFORM_TRANSVERSE: - case JXFORM_ROT_90: - case JXFORM_ROT_270: - /* Need workspace arrays having transposed dimensions. - * Note that we allocate arrays padded out to the next iMCU boundary, - * so that transform routines need not worry about missing edge blocks. - */ - coef_arrays = (jvirt_barray_ptr *) - (*srcinfo->mem->alloc_small) ((j_common_ptr) srcinfo, JPOOL_IMAGE, - SIZEOF(jvirt_barray_ptr) * info->num_components); - for (ci = 0; ci < info->num_components; ci++) { - compptr = srcinfo->comp_info + ci; - coef_arrays[ci] = (*srcinfo->mem->request_virt_barray) - ((j_common_ptr) srcinfo, JPOOL_IMAGE, FALSE, - (JDIMENSION) jround_up((long) compptr->height_in_blocks, - (long) compptr->v_samp_factor), - (JDIMENSION) jround_up((long) compptr->width_in_blocks, - (long) compptr->h_samp_factor), - (JDIMENSION) compptr->h_samp_factor); - } - break; - } - info->workspace_coef_arrays = coef_arrays; -} - - -/* Transpose destination image parameters */ - -LOCAL(void) -transpose_critical_parameters (j_compress_ptr dstinfo) -{ - int tblno, i, j, ci, itemp; - jpeg_component_info *compptr; - JQUANT_TBL *qtblptr; - JDIMENSION dtemp; - UINT16 qtemp; - - /* Transpose basic image dimensions */ - dtemp = dstinfo->image_width; - dstinfo->image_width = dstinfo->image_height; - dstinfo->image_height = dtemp; - - /* Transpose sampling factors */ - for (ci = 0; ci < dstinfo->num_components; ci++) { - compptr = dstinfo->comp_info + ci; - itemp = compptr->h_samp_factor; - compptr->h_samp_factor = compptr->v_samp_factor; - compptr->v_samp_factor = itemp; - } - - /* Transpose quantization tables */ - for (tblno = 0; tblno < NUM_QUANT_TBLS; tblno++) { - qtblptr = dstinfo->quant_tbl_ptrs[tblno]; - if (qtblptr != NULL) { - for (i = 0; i < DCTSIZE; i++) { - for (j = 0; j < i; j++) { - qtemp = qtblptr->quantval[i*DCTSIZE+j]; - qtblptr->quantval[i*DCTSIZE+j] = qtblptr->quantval[j*DCTSIZE+i]; - qtblptr->quantval[j*DCTSIZE+i] = qtemp; - } - } - } - } -} - - -/* Trim off any partial iMCUs on the indicated destination edge */ - -LOCAL(void) -trim_right_edge (j_compress_ptr dstinfo) -{ - int ci, max_h_samp_factor; - JDIMENSION MCU_cols; - - /* We have to compute max_h_samp_factor ourselves, - * because it hasn't been set yet in the destination - * (and we don't want to use the source's value). - */ - max_h_samp_factor = 1; - for (ci = 0; ci < dstinfo->num_components; ci++) { - int h_samp_factor = dstinfo->comp_info[ci].h_samp_factor; - max_h_samp_factor = MAX(max_h_samp_factor, h_samp_factor); - } - MCU_cols = dstinfo->image_width / (max_h_samp_factor * DCTSIZE); - if (MCU_cols > 0) /* can't trim to 0 pixels */ - dstinfo->image_width = MCU_cols * (max_h_samp_factor * DCTSIZE); -} - -LOCAL(void) -trim_bottom_edge (j_compress_ptr dstinfo) -{ - int ci, max_v_samp_factor; - JDIMENSION MCU_rows; - - /* We have to compute max_v_samp_factor ourselves, - * because it hasn't been set yet in the destination - * (and we don't want to use the source's value). - */ - max_v_samp_factor = 1; - for (ci = 0; ci < dstinfo->num_components; ci++) { - int v_samp_factor = dstinfo->comp_info[ci].v_samp_factor; - max_v_samp_factor = MAX(max_v_samp_factor, v_samp_factor); - } - MCU_rows = dstinfo->image_height / (max_v_samp_factor * DCTSIZE); - if (MCU_rows > 0) /* can't trim to 0 pixels */ - dstinfo->image_height = MCU_rows * (max_v_samp_factor * DCTSIZE); -} - - -/* Adjust output image parameters as needed. - * - * This must be called after jpeg_copy_critical_parameters() - * and before jpeg_write_coefficients(). - * - * The return value is the set of virtual coefficient arrays to be written - * (either the ones allocated by jtransform_request_workspace, or the - * original source data arrays). The caller will need to pass this value - * to jpeg_write_coefficients(). - */ - -GLOBAL(jvirt_barray_ptr *) -jtransform_adjust_parameters (j_decompress_ptr srcinfo, - j_compress_ptr dstinfo, - jvirt_barray_ptr *src_coef_arrays, - jpeg_transform_info *info) -{ - /* If force-to-grayscale is requested, adjust destination parameters */ - if (info->force_grayscale) { - /* We use jpeg_set_colorspace to make sure subsidiary settings get fixed - * properly. Among other things, the target h_samp_factor & v_samp_factor - * will get set to 1, which typically won't match the source. - * In fact we do this even if the source is already grayscale; that - * provides an easy way of coercing a grayscale JPEG with funny sampling - * factors to the customary 1,1. (Some decoders fail on other factors.) - */ - if ((dstinfo->jpeg_color_space == JCS_YCbCr && - dstinfo->num_components == 3) || - (dstinfo->jpeg_color_space == JCS_GRAYSCALE && - dstinfo->num_components == 1)) { - /* We have to preserve the source's quantization table number. */ - int sv_quant_tbl_no = dstinfo->comp_info[0].quant_tbl_no; - jpeg_set_colorspace(dstinfo, JCS_GRAYSCALE); - dstinfo->comp_info[0].quant_tbl_no = sv_quant_tbl_no; - } else { - /* Sorry, can't do it */ - ERREXIT(dstinfo, JERR_CONVERSION_NOTIMPL); - } - } - - /* Correct the destination's image dimensions etc if necessary */ - switch (info->transform) { - case JXFORM_NONE: - /* Nothing to do */ - break; - case JXFORM_FLIP_H: - if (info->trim) - trim_right_edge(dstinfo); - break; - case JXFORM_FLIP_V: - if (info->trim) - trim_bottom_edge(dstinfo); - break; - case JXFORM_TRANSPOSE: - transpose_critical_parameters(dstinfo); - /* transpose does NOT have to trim anything */ - break; - case JXFORM_TRANSVERSE: - transpose_critical_parameters(dstinfo); - if (info->trim) { - trim_right_edge(dstinfo); - trim_bottom_edge(dstinfo); - } - break; - case JXFORM_ROT_90: - transpose_critical_parameters(dstinfo); - if (info->trim) - trim_right_edge(dstinfo); - break; - case JXFORM_ROT_180: - if (info->trim) { - trim_right_edge(dstinfo); - trim_bottom_edge(dstinfo); - } - break; - case JXFORM_ROT_270: - transpose_critical_parameters(dstinfo); - if (info->trim) - trim_bottom_edge(dstinfo); - break; - } - - /* Return the appropriate output data set */ - if (info->workspace_coef_arrays != NULL) - return info->workspace_coef_arrays; - return src_coef_arrays; -} - - -/* Execute the actual transformation, if any. - * - * This must be called *after* jpeg_write_coefficients, because it depends - * on jpeg_write_coefficients to have computed subsidiary values such as - * the per-component width and height fields in the destination object. - * - * Note that some transformations will modify the source data arrays! - */ - -GLOBAL(void) -jtransform_execute_transformation (j_decompress_ptr srcinfo, - j_compress_ptr dstinfo, - jvirt_barray_ptr *src_coef_arrays, - jpeg_transform_info *info) -{ - jvirt_barray_ptr *dst_coef_arrays = info->workspace_coef_arrays; - - switch (info->transform) { - case JXFORM_NONE: - break; - case JXFORM_FLIP_H: - do_flip_h(srcinfo, dstinfo, src_coef_arrays); - break; - case JXFORM_FLIP_V: - do_flip_v(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays); - break; - case JXFORM_TRANSPOSE: - do_transpose(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays); - break; - case JXFORM_TRANSVERSE: - do_transverse(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays); - break; - case JXFORM_ROT_90: - do_rot_90(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays); - break; - case JXFORM_ROT_180: - do_rot_180(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays); - break; - case JXFORM_ROT_270: - do_rot_270(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays); - break; - } -} - -#endif /* TRANSFORMS_SUPPORTED */ - - -/* Setup decompression object to save desired markers in memory. - * This must be called before jpeg_read_header() to have the desired effect. - */ - -GLOBAL(void) -jcopy_markers_setup (j_decompress_ptr srcinfo, JCOPY_OPTION option) -{ -#ifdef SAVE_MARKERS_SUPPORTED - int m; - - /* Save comments except under NONE option */ - if (option != JCOPYOPT_NONE) { - jpeg_save_markers(srcinfo, JPEG_COM, 0xFFFF); - } - /* Save all types of APPn markers iff ALL option */ - if (option == JCOPYOPT_ALL) { - for (m = 0; m < 16; m++) - jpeg_save_markers(srcinfo, JPEG_APP0 + m, 0xFFFF); - } -#endif /* SAVE_MARKERS_SUPPORTED */ -} - -/* Copy markers saved in the given source object to the destination object. - * This should be called just after jpeg_start_compress() or - * jpeg_write_coefficients(). - * Note that those routines will have written the SOI, and also the - * JFIF APP0 or Adobe APP14 markers if selected. - */ - -GLOBAL(void) -jcopy_markers_execute (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, - JCOPY_OPTION option) -{ - jpeg_saved_marker_ptr marker; - - /* In the current implementation, we don't actually need to examine the - * option flag here; we just copy everything that got saved. - * But to avoid confusion, we do not output JFIF and Adobe APP14 markers - * if the encoder library already wrote one. - */ - for (marker = srcinfo->marker_list; marker != NULL; marker = marker->next) { - if (dstinfo->write_JFIF_header && - marker->marker == JPEG_APP0 && - marker->data_length >= 5 && - GETJOCTET(marker->data[0]) == 0x4A && - GETJOCTET(marker->data[1]) == 0x46 && - GETJOCTET(marker->data[2]) == 0x49 && - GETJOCTET(marker->data[3]) == 0x46 && - GETJOCTET(marker->data[4]) == 0) - continue; /* reject duplicate JFIF */ - if (dstinfo->write_Adobe_marker && - marker->marker == JPEG_APP0+14 && - marker->data_length >= 5 && - GETJOCTET(marker->data[0]) == 0x41 && - GETJOCTET(marker->data[1]) == 0x64 && - GETJOCTET(marker->data[2]) == 0x6F && - GETJOCTET(marker->data[3]) == 0x62 && - GETJOCTET(marker->data[4]) == 0x65) - continue; /* reject duplicate Adobe */ -#ifdef NEED_FAR_POINTERS - /* We could use jpeg_write_marker if the data weren't FAR... */ - { - unsigned int i; - jpeg_write_m_header(dstinfo, marker->marker, marker->data_length); - for (i = 0; i < marker->data_length; i++) - jpeg_write_m_byte(dstinfo, marker->data[i]); - } -#else - jpeg_write_marker(dstinfo, marker->marker, - marker->data, marker->data_length); -#endif - } -} diff --git a/Build/source/libs/jpeg/transupp.h b/Build/source/libs/jpeg/transupp.h deleted file mode 100644 index 5c2d32aff50..00000000000 --- a/Build/source/libs/jpeg/transupp.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * transupp.h - * - * Copyright (C) 1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains declarations for image transformation routines and - * other utility code used by the jpegtran sample application. These are - * NOT part of the core JPEG library. But we keep these routines separate - * from jpegtran.c to ease the task of maintaining jpegtran-like programs - * that have other user interfaces. - * - * NOTE: all the routines declared here have very specific requirements - * about when they are to be executed during the reading and writing of the - * source and destination files. See the comments in transupp.c, or see - * jpegtran.c for an example of correct usage. - */ - -/* If you happen not to want the image transform support, disable it here */ -#ifndef TRANSFORMS_SUPPORTED -#define TRANSFORMS_SUPPORTED 1 /* 0 disables transform code */ -#endif - -/* Short forms of external names for systems with brain-damaged linkers. */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jtransform_request_workspace jTrRequest -#define jtransform_adjust_parameters jTrAdjust -#define jtransform_execute_transformation jTrExec -#define jcopy_markers_setup jCMrkSetup -#define jcopy_markers_execute jCMrkExec -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - - -/* - * Codes for supported types of image transformations. - */ - -typedef enum { - JXFORM_NONE, /* no transformation */ - JXFORM_FLIP_H, /* horizontal flip */ - JXFORM_FLIP_V, /* vertical flip */ - JXFORM_TRANSPOSE, /* transpose across UL-to-LR axis */ - JXFORM_TRANSVERSE, /* transpose across UR-to-LL axis */ - JXFORM_ROT_90, /* 90-degree clockwise rotation */ - JXFORM_ROT_180, /* 180-degree rotation */ - JXFORM_ROT_270 /* 270-degree clockwise (or 90 ccw) */ -} JXFORM_CODE; - -/* - * Although rotating and flipping data expressed as DCT coefficients is not - * hard, there is an asymmetry in the JPEG format specification for images - * whose dimensions aren't multiples of the iMCU size. The right and bottom - * image edges are padded out to the next iMCU boundary with junk data; but - * no padding is possible at the top and left edges. If we were to flip - * the whole image including the pad data, then pad garbage would become - * visible at the top and/or left, and real pixels would disappear into the - * pad margins --- perhaps permanently, since encoders & decoders may not - * bother to preserve DCT blocks that appear to be completely outside the - * nominal image area. So, we have to exclude any partial iMCUs from the - * basic transformation. - * - * Transpose is the only transformation that can handle partial iMCUs at the - * right and bottom edges completely cleanly. flip_h can flip partial iMCUs - * at the bottom, but leaves any partial iMCUs at the right edge untouched. - * Similarly flip_v leaves any partial iMCUs at the bottom edge untouched. - * The other transforms are defined as combinations of these basic transforms - * and process edge blocks in a way that preserves the equivalence. - * - * The "trim" option causes untransformable partial iMCUs to be dropped; - * this is not strictly lossless, but it usually gives the best-looking - * result for odd-size images. Note that when this option is active, - * the expected mathematical equivalences between the transforms may not hold. - * (For example, -rot 270 -trim trims only the bottom edge, but -rot 90 -trim - * followed by -rot 180 -trim trims both edges.) - * - * We also offer a "force to grayscale" option, which simply discards the - * chrominance channels of a YCbCr image. This is lossless in the sense that - * the luminance channel is preserved exactly. It's not the same kind of - * thing as the rotate/flip transformations, but it's convenient to handle it - * as part of this package, mainly because the transformation routines have to - * be aware of the option to know how many components to work on. - */ - -typedef struct { - /* Options: set by caller */ - JXFORM_CODE transform; /* image transform operator */ - boolean trim; /* if TRUE, trim partial MCUs as needed */ - boolean force_grayscale; /* if TRUE, convert color image to grayscale */ - - /* Internal workspace: caller should not touch these */ - int num_components; /* # of components in workspace */ - jvirt_barray_ptr * workspace_coef_arrays; /* workspace for transformations */ -} jpeg_transform_info; - - -#if TRANSFORMS_SUPPORTED - -/* Request any required workspace */ -EXTERN(void) jtransform_request_workspace - JPP((j_decompress_ptr srcinfo, jpeg_transform_info *info)); -/* Adjust output image parameters */ -EXTERN(jvirt_barray_ptr *) jtransform_adjust_parameters - JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, - jvirt_barray_ptr *src_coef_arrays, - jpeg_transform_info *info)); -/* Execute the actual transformation, if any */ -EXTERN(void) jtransform_execute_transformation - JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, - jvirt_barray_ptr *src_coef_arrays, - jpeg_transform_info *info)); - -#endif /* TRANSFORMS_SUPPORTED */ - - -/* - * Support for copying optional markers from source to destination file. - */ - -typedef enum { - JCOPYOPT_NONE, /* copy no optional markers */ - JCOPYOPT_COMMENTS, /* copy only comment (COM) markers */ - JCOPYOPT_ALL /* copy all optional markers */ -} JCOPY_OPTION; - -#define JCOPYOPT_DEFAULT JCOPYOPT_COMMENTS /* recommended default */ - -/* Setup decompression object to save desired markers in memory */ -EXTERN(void) jcopy_markers_setup - JPP((j_decompress_ptr srcinfo, JCOPY_OPTION option)); -/* Copy markers saved in the given source object to the destination object */ -EXTERN(void) jcopy_markers_execute - JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, - JCOPY_OPTION option)); diff --git a/Build/source/libs/jpeg/usage.doc b/Build/source/libs/jpeg/usage.doc deleted file mode 100644 index 8c4970af051..00000000000 --- a/Build/source/libs/jpeg/usage.doc +++ /dev/null @@ -1,562 +0,0 @@ -USAGE instructions for the Independent JPEG Group's JPEG software -================================================================= - -This file describes usage of the JPEG conversion programs cjpeg and djpeg, -as well as the utility programs jpegtran, rdjpgcom and wrjpgcom. (See -the other documentation files if you wish to use the JPEG library within -your own programs.) - -If you are on a Unix machine you may prefer to read the Unix-style manual -pages in files cjpeg.1, djpeg.1, jpegtran.1, rdjpgcom.1, wrjpgcom.1. - - -INTRODUCTION - -These programs implement JPEG image compression and decompression. JPEG -(pronounced "jay-peg") is a standardized compression method for full-color -and gray-scale images. JPEG is designed to handle "real-world" scenes, -for example scanned photographs. Cartoons, line drawings, and other -non-realistic images are not JPEG's strong suit; on that sort of material -you may get poor image quality and/or little compression. - -JPEG is lossy, meaning that the output image is not necessarily identical to -the input image. Hence you should not use JPEG if you have to have identical -output bits. However, on typical real-world images, very good compression -levels can be obtained with no visible change, and amazingly high compression -is possible if you can tolerate a low-quality image. You can trade off image -quality against file size by adjusting the compressor's "quality" setting. - - -GENERAL USAGE - -We provide two programs, cjpeg to compress an image file into JPEG format, -and djpeg to decompress a JPEG file back into a conventional image format. - -On Unix-like systems, you say: - cjpeg [switches] [imagefile] >jpegfile -or - djpeg [switches] [jpegfile] >imagefile -The programs read the specified input file, or standard input if none is -named. They always write to standard output (with trace/error messages to -standard error). These conventions are handy for piping images between -programs. - -On most non-Unix systems, you say: - cjpeg [switches] imagefile jpegfile -or - djpeg [switches] jpegfile imagefile -i.e., both the input and output files are named on the command line. This -style is a little more foolproof, and it loses no functionality if you don't -have pipes. (You can get this style on Unix too, if you prefer, by defining -TWO_FILE_COMMANDLINE when you compile the programs; see install.doc.) - -You can also say: - cjpeg [switches] -outfile jpegfile imagefile -or - djpeg [switches] -outfile imagefile jpegfile -This syntax works on all systems, so it is useful for scripts. - -The currently supported image file formats are: PPM (PBMPLUS color format), -PGM (PBMPLUS gray-scale format), BMP, Targa, and RLE (Utah Raster Toolkit -format). (RLE is supported only if the URT library is available.) -cjpeg recognizes the input image format automatically, with the exception -of some Targa-format files. You have to tell djpeg which format to generate. - -JPEG files are in the defacto standard JFIF file format. There are other, -less widely used JPEG-based file formats, but we don't support them. - -All switch names may be abbreviated; for example, -grayscale may be written --gray or -gr. Most of the "basic" switches can be abbreviated to as little as -one letter. Upper and lower case are equivalent (-BMP is the same as -bmp). -British spellings are also accepted (e.g., -greyscale), though for brevity -these are not mentioned below. - - -CJPEG DETAILS - -The basic command line switches for cjpeg are: - - -quality N Scale quantization tables to adjust image quality. - Quality is 0 (worst) to 100 (best); default is 75. - (See below for more info.) - - -grayscale Create monochrome JPEG file from color input. - Be sure to use this switch when compressing a grayscale - BMP file, because cjpeg isn't bright enough to notice - whether a BMP file uses only shades of gray. By - saying -grayscale, you'll get a smaller JPEG file that - takes less time to process. - - -optimize Perform optimization of entropy encoding parameters. - Without this, default encoding parameters are used. - -optimize usually makes the JPEG file a little smaller, - but cjpeg runs somewhat slower and needs much more - memory. Image quality and speed of decompression are - unaffected by -optimize. - - -progressive Create progressive JPEG file (see below). - - -targa Input file is Targa format. Targa files that contain - an "identification" field will not be automatically - recognized by cjpeg; for such files you must specify - -targa to make cjpeg treat the input as Targa format. - For most Targa files, you won't need this switch. - -The -quality switch lets you trade off compressed file size against quality of -the reconstructed image: the higher the quality setting, the larger the JPEG -file, and the closer the output image will be to the original input. Normally -you want to use the lowest quality setting (smallest file) that decompresses -into something visually indistinguishable from the original image. For this -purpose the quality setting should be between 50 and 95; the default of 75 is -often about right. If you see defects at -quality 75, then go up 5 or 10 -counts at a time until you are happy with the output image. (The optimal -setting will vary from one image to another.) - --quality 100 will generate a quantization table of all 1's, minimizing loss -in the quantization step (but there is still information loss in subsampling, -as well as roundoff error). This setting is mainly of interest for -experimental purposes. Quality values above about 95 are NOT recommended for -normal use; the compressed file size goes up dramatically for hardly any gain -in output image quality. - -In the other direction, quality values below 50 will produce very small files -of low image quality. Settings around 5 to 10 might be useful in preparing an -index of a large image library, for example. Try -quality 2 (or so) for some -amusing Cubist effects. (Note: quality values below about 25 generate 2-byte -quantization tables, which are considered optional in the JPEG standard. -cjpeg emits a warning message when you give such a quality value, because some -other JPEG programs may be unable to decode the resulting file. Use -baseline -if you need to ensure compatibility at low quality values.) - -The -progressive switch creates a "progressive JPEG" file. In this type of -JPEG file, the data is stored in multiple scans of increasing quality. If the -file is being transmitted over a slow communications link, the decoder can use -the first scan to display a low-quality image very quickly, and can then -improve the display with each subsequent scan. The final image is exactly -equivalent to a standard JPEG file of the same quality setting, and the total -file size is about the same --- often a little smaller. CAUTION: progressive -JPEG is not yet widely implemented, so many decoders will be unable to view a -progressive JPEG file at all. - -Switches for advanced users: - - -dct int Use integer DCT method (default). - -dct fast Use fast integer DCT (less accurate). - -dct float Use floating-point DCT method. - The float method is very slightly more accurate than - the int method, but is much slower unless your machine - has very fast floating-point hardware. Also note that - results of the floating-point method may vary slightly - across machines, while the integer methods should give - the same results everywhere. The fast integer method - is much less accurate than the other two. - - -restart N Emit a JPEG restart marker every N MCU rows, or every - N MCU blocks if "B" is attached to the number. - -restart 0 (the default) means no restart markers. - - -smooth N Smooth the input image to eliminate dithering noise. - N, ranging from 1 to 100, indicates the strength of - smoothing. 0 (the default) means no smoothing. - - -maxmemory N Set limit for amount of memory to use in processing - large images. Value is in thousands of bytes, or - millions of bytes if "M" is attached to the number. - For example, -max 4m selects 4000000 bytes. If more - space is needed, temporary files will be used. - - -verbose Enable debug printout. More -v's give more printout. - or -debug Also, version information is printed at startup. - -The -restart option inserts extra markers that allow a JPEG decoder to -resynchronize after a transmission error. Without restart markers, any damage -to a compressed file will usually ruin the image from the point of the error -to the end of the image; with restart markers, the damage is usually confined -to the portion of the image up to the next restart marker. Of course, the -restart markers occupy extra space. We recommend -restart 1 for images that -will be transmitted across unreliable networks such as Usenet. - -The -smooth option filters the input to eliminate fine-scale noise. This is -often useful when converting dithered images to JPEG: a moderate smoothing -factor of 10 to 50 gets rid of dithering patterns in the input file, resulting -in a smaller JPEG file and a better-looking image. Too large a smoothing -factor will visibly blur the image, however. - -Switches for wizards: - - -baseline Force baseline-compatible quantization tables to be - generated. This clamps quantization values to 8 bits - even at low quality settings. (This switch is poorly - named, since it does not ensure that the output is - actually baseline JPEG. For example, you can use - -baseline and -progressive together.) - - -qtables file Use the quantization tables given in the specified - text file. - - -qslots N[,...] Select which quantization table to use for each color - component. - - -sample HxV[,...] Set JPEG sampling factors for each color component. - - -scans file Use the scan script given in the specified text file. - -The "wizard" switches are intended for experimentation with JPEG. If you -don't know what you are doing, DON'T USE THEM. These switches are documented -further in the file wizard.doc. - - -DJPEG DETAILS - -The basic command line switches for djpeg are: - - -colors N Reduce image to at most N colors. This reduces the - or -quantize N number of colors used in the output image, so that it - can be displayed on a colormapped display or stored in - a colormapped file format. For example, if you have - an 8-bit display, you'd need to reduce to 256 or fewer - colors. (-colors is the recommended name, -quantize - is provided only for backwards compatibility.) - - -fast Select recommended processing options for fast, low - quality output. (The default options are chosen for - highest quality output.) Currently, this is equivalent - to "-dct fast -nosmooth -onepass -dither ordered". - - -grayscale Force gray-scale output even if JPEG file is color. - Useful for viewing on monochrome displays; also, - djpeg runs noticeably faster in this mode. - - -scale M/N Scale the output image by a factor M/N. Currently - the scale factor must be 1/1, 1/2, 1/4, or 1/8. - Scaling is handy if the image is larger than your - screen; also, djpeg runs much faster when scaling - down the output. - - -bmp Select BMP output format (Windows flavor). 8-bit - colormapped format is emitted if -colors or -grayscale - is specified, or if the JPEG file is gray-scale; - otherwise, 24-bit full-color format is emitted. - - -gif Select GIF output format. Since GIF does not support - more than 256 colors, -colors 256 is assumed (unless - you specify a smaller number of colors). If you - specify -fast, the default number of colors is 216. - - -os2 Select BMP output format (OS/2 1.x flavor). 8-bit - colormapped format is emitted if -colors or -grayscale - is specified, or if the JPEG file is gray-scale; - otherwise, 24-bit full-color format is emitted. - - -pnm Select PBMPLUS (PPM/PGM) output format (this is the - default format). PGM is emitted if the JPEG file is - gray-scale or if -grayscale is specified; otherwise - PPM is emitted. - - -rle Select RLE output format. (Requires URT library.) - - -targa Select Targa output format. Gray-scale format is - emitted if the JPEG file is gray-scale or if - -grayscale is specified; otherwise, colormapped format - is emitted if -colors is specified; otherwise, 24-bit - full-color format is emitted. - -Switches for advanced users: - - -dct int Use integer DCT method (default). - -dct fast Use fast integer DCT (less accurate). - -dct float Use floating-point DCT method. - The float method is very slightly more accurate than - the int method, but is much slower unless your machine - has very fast floating-point hardware. Also note that - results of the floating-point method may vary slightly - across machines, while the integer methods should give - the same results everywhere. The fast integer method - is much less accurate than the other two. - - -dither fs Use Floyd-Steinberg dithering in color quantization. - -dither ordered Use ordered dithering in color quantization. - -dither none Do not use dithering in color quantization. - By default, Floyd-Steinberg dithering is applied when - quantizing colors; this is slow but usually produces - the best results. Ordered dither is a compromise - between speed and quality; no dithering is fast but - usually looks awful. Note that these switches have - no effect unless color quantization is being done. - Ordered dither is only available in -onepass mode. - - -map FILE Quantize to the colors used in the specified image - file. This is useful for producing multiple files - with identical color maps, or for forcing a predefined - set of colors to be used. The FILE must be a GIF - or PPM file. This option overrides -colors and - -onepass. - - -nosmooth Use a faster, lower-quality upsampling routine. - - -onepass Use one-pass instead of two-pass color quantization. - The one-pass method is faster and needs less memory, - but it produces a lower-quality image. -onepass is - ignored unless you also say -colors N. Also, - the one-pass method is always used for gray-scale - output (the two-pass method is no improvement then). - - -maxmemory N Set limit for amount of memory to use in processing - large images. Value is in thousands of bytes, or - millions of bytes if "M" is attached to the number. - For example, -max 4m selects 4000000 bytes. If more - space is needed, temporary files will be used. - - -verbose Enable debug printout. More -v's give more printout. - or -debug Also, version information is printed at startup. - - -HINTS FOR CJPEG - -Color GIF files are not the ideal input for JPEG; JPEG is really intended for -compressing full-color (24-bit) images. In particular, don't try to convert -cartoons, line drawings, and other images that have only a few distinct -colors. GIF works great on these, JPEG does not. If you want to convert a -GIF to JPEG, you should experiment with cjpeg's -quality and -smooth options -to get a satisfactory conversion. -smooth 10 or so is often helpful. - -Avoid running an image through a series of JPEG compression/decompression -cycles. Image quality loss will accumulate; after ten or so cycles the image -may be noticeably worse than it was after one cycle. It's best to use a -lossless format while manipulating an image, then convert to JPEG format when -you are ready to file the image away. - -The -optimize option to cjpeg is worth using when you are making a "final" -version for posting or archiving. It's also a win when you are using low -quality settings to make very small JPEG files; the percentage improvement -is often a lot more than it is on larger files. (At present, -optimize -mode is always selected when generating progressive JPEG files.) - -GIF input files are no longer supported, to avoid the Unisys LZW patent. -Use a Unisys-licensed program if you need to read a GIF file. (Conversion -of GIF files to JPEG is usually a bad idea anyway.) - - -HINTS FOR DJPEG - -To get a quick preview of an image, use the -grayscale and/or -scale switches. -"-grayscale -scale 1/8" is the fastest case. - -Several options are available that trade off image quality to gain speed. -"-fast" turns on the recommended settings. - -"-dct fast" and/or "-nosmooth" gain speed at a small sacrifice in quality. -When producing a color-quantized image, "-onepass -dither ordered" is fast but -much lower quality than the default behavior. "-dither none" may give -acceptable results in two-pass mode, but is seldom tolerable in one-pass mode. - -If you are fortunate enough to have very fast floating point hardware, -"-dct float" may be even faster than "-dct fast". But on most machines -"-dct float" is slower than "-dct int"; in this case it is not worth using, -because its theoretical accuracy advantage is too small to be significant -in practice. - -Two-pass color quantization requires a good deal of memory; on MS-DOS machines -it may run out of memory even with -maxmemory 0. In that case you can still -decompress, with some loss of image quality, by specifying -onepass for -one-pass quantization. - -To avoid the Unisys LZW patent, djpeg produces uncompressed GIF files. These -are larger than they should be, but are readable by standard GIF decoders. - - -HINTS FOR BOTH PROGRAMS - -If more space is needed than will fit in the available main memory (as -determined by -maxmemory), temporary files will be used. (MS-DOS versions -will try to get extended or expanded memory first.) The temporary files are -often rather large: in typical cases they occupy three bytes per pixel, for -example 3*800*600 = 1.44Mb for an 800x600 image. If you don't have enough -free disk space, leave out -progressive and -optimize (for cjpeg) or specify --onepass (for djpeg). - -On MS-DOS, the temporary files are created in the directory named by the TMP -or TEMP environment variable, or in the current directory if neither of those -exist. Amiga implementations put the temp files in the directory named by -JPEGTMP:, so be sure to assign JPEGTMP: to a disk partition with adequate free -space. - -The default memory usage limit (-maxmemory) is set when the software is -compiled. If you get an "insufficient memory" error, try specifying a smaller --maxmemory value, even -maxmemory 0 to use the absolute minimum space. You -may want to recompile with a smaller default value if this happens often. - -On machines that have "environment" variables, you can define the environment -variable JPEGMEM to set the default memory limit. The value is specified as -described for the -maxmemory switch. JPEGMEM overrides the default value -specified when the program was compiled, and itself is overridden by an -explicit -maxmemory switch. - -On MS-DOS machines, -maxmemory is the amount of main (conventional) memory to -use. (Extended or expanded memory is also used if available.) Most -DOS-specific versions of this software do their own memory space estimation -and do not need you to specify -maxmemory. - - -JPEGTRAN - -jpegtran performs various useful transformations of JPEG files. -It can translate the coded representation from one variant of JPEG to another, -for example from baseline JPEG to progressive JPEG or vice versa. It can also -perform some rearrangements of the image data, for example turning an image -from landscape to portrait format by rotation. - -jpegtran works by rearranging the compressed data (DCT coefficients), without -ever fully decoding the image. Therefore, its transformations are lossless: -there is no image degradation at all, which would not be true if you used -djpeg followed by cjpeg to accomplish the same conversion. But by the same -token, jpegtran cannot perform lossy operations such as changing the image -quality. - -jpegtran uses a command line syntax similar to cjpeg or djpeg. -On Unix-like systems, you say: - jpegtran [switches] [inputfile] >outputfile -On most non-Unix systems, you say: - jpegtran [switches] inputfile outputfile -where both the input and output files are JPEG files. - -To specify the coded JPEG representation used in the output file, -jpegtran accepts a subset of the switches recognized by cjpeg: - -optimize Perform optimization of entropy encoding parameters. - -progressive Create progressive JPEG file. - -restart N Emit a JPEG restart marker every N MCU rows, or every - N MCU blocks if "B" is attached to the number. - -scans file Use the scan script given in the specified text file. -See the previous discussion of cjpeg for more details about these switches. -If you specify none of these switches, you get a plain baseline-JPEG output -file. The quality setting and so forth are determined by the input file. - -The image can be losslessly transformed by giving one of these switches: - -flip horizontal Mirror image horizontally (left-right). - -flip vertical Mirror image vertically (top-bottom). - -rotate 90 Rotate image 90 degrees clockwise. - -rotate 180 Rotate image 180 degrees. - -rotate 270 Rotate image 270 degrees clockwise (or 90 ccw). - -transpose Transpose image (across UL-to-LR axis). - -transverse Transverse transpose (across UR-to-LL axis). - -The transpose transformation has no restrictions regarding image dimensions. -The other transformations operate rather oddly if the image dimensions are not -a multiple of the iMCU size (usually 8 or 16 pixels), because they can only -transform complete blocks of DCT coefficient data in the desired way. - -jpegtran's default behavior when transforming an odd-size image is designed -to preserve exact reversibility and mathematical consistency of the -transformation set. As stated, transpose is able to flip the entire image -area. Horizontal mirroring leaves any partial iMCU column at the right edge -untouched, but is able to flip all rows of the image. Similarly, vertical -mirroring leaves any partial iMCU row at the bottom edge untouched, but is -able to flip all columns. The other transforms can be built up as sequences -of transpose and flip operations; for consistency, their actions on edge -pixels are defined to be the same as the end result of the corresponding -transpose-and-flip sequence. - -For practical use, you may prefer to discard any untransformable edge pixels -rather than having a strange-looking strip along the right and/or bottom edges -of a transformed image. To do this, add the -trim switch: - -trim Drop non-transformable edge blocks. -Obviously, a transformation with -trim is not reversible, so strictly speaking -jpegtran with this switch is not lossless. Also, the expected mathematical -equivalences between the transformations no longer hold. For example, -"-rot 270 -trim" trims only the bottom edge, but "-rot 90 -trim" followed by -"-rot 180 -trim" trims both edges. - -Another not-strictly-lossless transformation switch is: - -grayscale Force grayscale output. -This option discards the chrominance channels if the input image is YCbCr -(ie, a standard color JPEG), resulting in a grayscale JPEG file. The -luminance channel is preserved exactly, so this is a better method of reducing -to grayscale than decompression, conversion, and recompression. This switch -is particularly handy for fixing a monochrome picture that was mistakenly -encoded as a color JPEG. (In such a case, the space savings from getting rid -of the near-empty chroma channels won't be large; but the decoding time for -a grayscale JPEG is substantially less than that for a color JPEG.) - -jpegtran also recognizes these switches that control what to do with "extra" -markers, such as comment blocks: - -copy none Copy no extra markers from source file. This setting - suppresses all comments and other excess baggage - present in the source file. - -copy comments Copy only comment markers. This setting copies - comments from the source file, but discards - any other inessential data. - -copy all Copy all extra markers. This setting preserves - miscellaneous markers found in the source file, such - as JFIF thumbnails and Photoshop settings. In some - files these extra markers can be sizable. -The default behavior is -copy comments. (Note: in IJG releases v6 and v6a, -jpegtran always did the equivalent of -copy none.) - -Additional switches recognized by jpegtran are: - -outfile filename - -maxmemory N - -verbose - -debug -These work the same as in cjpeg or djpeg. - - -THE COMMENT UTILITIES - -The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file. -Although the standard doesn't actually define what COM blocks are for, they -are widely used to hold user-supplied text strings. This lets you add -annotations, titles, index terms, etc to your JPEG files, and later retrieve -them as text. COM blocks do not interfere with the image stored in the JPEG -file. The maximum size of a COM block is 64K, but you can have as many of -them as you like in one JPEG file. - -We provide two utility programs to display COM block contents and add COM -blocks to a JPEG file. - -rdjpgcom searches a JPEG file and prints the contents of any COM blocks on -standard output. The command line syntax is - rdjpgcom [-verbose] [inputfilename] -The switch "-verbose" (or just "-v") causes rdjpgcom to also display the JPEG -image dimensions. If you omit the input file name from the command line, -the JPEG file is read from standard input. (This may not work on some -operating systems, if binary data can't be read from stdin.) - -wrjpgcom adds a COM block, containing text you provide, to a JPEG file. -Ordinarily, the COM block is added after any existing COM blocks, but you -can delete the old COM blocks if you wish. wrjpgcom produces a new JPEG -file; it does not modify the input file. DO NOT try to overwrite the input -file by directing wrjpgcom's output back into it; on most systems this will -just destroy your file. - -The command line syntax for wrjpgcom is similar to cjpeg's. On Unix-like -systems, it is - wrjpgcom [switches] [inputfilename] -The output file is written to standard output. The input file comes from -the named file, or from standard input if no input file is named. - -On most non-Unix systems, the syntax is - wrjpgcom [switches] inputfilename outputfilename -where both input and output file names must be given explicitly. - -wrjpgcom understands three switches: - -replace Delete any existing COM blocks from the file. - -comment "Comment text" Supply new COM text on command line. - -cfile name Read text for new COM block from named file. -(Switch names can be abbreviated.) If you have only one line of comment text -to add, you can provide it on the command line with -comment. The comment -text must be surrounded with quotes so that it is treated as a single -argument. Longer comments can be read from a text file. - -If you give neither -comment nor -cfile, then wrjpgcom will read the comment -text from standard input. (In this case an input image file name MUST be -supplied, so that the source JPEG file comes from somewhere else.) You can -enter multiple lines, up to 64KB worth. Type an end-of-file indicator -(usually control-D or control-Z) to terminate the comment text entry. - -wrjpgcom will not add a COM block if the provided comment string is empty. -Therefore -replace -comment "" can be used to delete all COM blocks from a -file. - -These utility programs do not depend on the IJG JPEG library. In -particular, the source code for rdjpgcom is intended as an illustration of -the minimum amount of code required to parse a JPEG file header correctly. diff --git a/Build/source/libs/jpeg/wizard.doc b/Build/source/libs/jpeg/wizard.doc deleted file mode 100644 index 54170b227df..00000000000 --- a/Build/source/libs/jpeg/wizard.doc +++ /dev/null @@ -1,211 +0,0 @@ -Advanced usage instructions for the Independent JPEG Group's JPEG software -========================================================================== - -This file describes cjpeg's "switches for wizards". - -The "wizard" switches are intended for experimentation with JPEG by persons -who are reasonably knowledgeable about the JPEG standard. If you don't know -what you are doing, DON'T USE THESE SWITCHES. You'll likely produce files -with worse image quality and/or poorer compression than you'd get from the -default settings. Furthermore, these switches must be used with caution -when making files intended for general use, because not all JPEG decoders -will support unusual JPEG parameter settings. - - -Quantization Table Adjustment ------------------------------ - -Ordinarily, cjpeg starts with a default set of tables (the same ones given -as examples in the JPEG standard) and scales them up or down according to -the -quality setting. The details of the scaling algorithm can be found in -jcparam.c. At very low quality settings, some quantization table entries -can get scaled up to values exceeding 255. Although 2-byte quantization -values are supported by the IJG software, this feature is not in baseline -JPEG and is not supported by all implementations. If you need to ensure -wide compatibility of low-quality files, you can constrain the scaled -quantization values to no more than 255 by giving the -baseline switch. -Note that use of -baseline will result in poorer quality for the same file -size, since more bits than necessary are expended on higher AC coefficients. - -You can substitute a different set of quantization values by using the --qtables switch: - - -qtables file Use the quantization tables given in the named file. - -The specified file should be a text file containing decimal quantization -values. The file should contain one to four tables, each of 64 elements. -The tables are implicitly numbered 0,1,etc. in order of appearance. Table -entries appear in normal array order (NOT in the zigzag order in which they -will be stored in the JPEG file). - -Quantization table files are free format, in that arbitrary whitespace can -appear between numbers. Also, comments can be included: a comment starts -with '#' and extends to the end of the line. Here is an example file that -duplicates the default quantization tables: - - # Quantization tables given in JPEG spec, section K.1 - - # This is table 0 (the luminance table): - 16 11 10 16 24 40 51 61 - 12 12 14 19 26 58 60 55 - 14 13 16 24 40 57 69 56 - 14 17 22 29 51 87 80 62 - 18 22 37 56 68 109 103 77 - 24 35 55 64 81 104 113 92 - 49 64 78 87 103 121 120 101 - 72 92 95 98 112 100 103 99 - - # This is table 1 (the chrominance table): - 17 18 24 47 99 99 99 99 - 18 21 26 66 99 99 99 99 - 24 26 56 99 99 99 99 99 - 47 66 99 99 99 99 99 99 - 99 99 99 99 99 99 99 99 - 99 99 99 99 99 99 99 99 - 99 99 99 99 99 99 99 99 - 99 99 99 99 99 99 99 99 - -If the -qtables switch is used without -quality, then the specified tables -are used exactly as-is. If both -qtables and -quality are used, then the -tables taken from the file are scaled in the same fashion that the default -tables would be scaled for that quality setting. If -baseline appears, then -the quantization values are constrained to the range 1-255. - -By default, cjpeg will use quantization table 0 for luminance components and -table 1 for chrominance components. To override this choice, use the -qslots -switch: - - -qslots N[,...] Select which quantization table to use for - each color component. - -The -qslots switch specifies a quantization table number for each color -component, in the order in which the components appear in the JPEG SOF marker. -For example, to create a separate table for each of Y,Cb,Cr, you could -provide a -qtables file that defines three quantization tables and say -"-qslots 0,1,2". If -qslots gives fewer table numbers than there are color -components, then the last table number is repeated as necessary. - - -Sampling Factor Adjustment --------------------------- - -By default, cjpeg uses 2:1 horizontal and vertical downsampling when -compressing YCbCr data, and no downsampling for all other color spaces. -You can override this default with the -sample switch: - - -sample HxV[,...] Set JPEG sampling factors for each color - component. - -The -sample switch specifies the JPEG sampling factors for each color -component, in the order in which they appear in the JPEG SOF marker. -If you specify fewer HxV pairs than there are components, the remaining -components are set to 1x1 sampling. For example, the default YCbCr setting -is equivalent to "-sample 2x2,1x1,1x1", which can be abbreviated to -"-sample 2x2". - -There are still some JPEG decoders in existence that support only 2x1 -sampling (also called 4:2:2 sampling). Compatibility with such decoders can -be achieved by specifying "-sample 2x1". This is not recommended unless -really necessary, since it increases file size and encoding/decoding time -with very little quality gain. - - -Multiple Scan / Progression Control ------------------------------------ - -By default, cjpeg emits a single-scan sequential JPEG file. The --progressive switch generates a progressive JPEG file using a default series -of progression parameters. You can create multiple-scan sequential JPEG -files or progressive JPEG files with custom progression parameters by using -the -scans switch: - - -scans file Use the scan sequence given in the named file. - -The specified file should be a text file containing a "scan script". -The script specifies the contents and ordering of the scans to be emitted. -Each entry in the script defines one scan. A scan definition specifies -the components to be included in the scan, and for progressive JPEG it also -specifies the progression parameters Ss,Se,Ah,Al for the scan. Scan -definitions are separated by semicolons (';'). A semicolon after the last -scan definition is optional. - -Each scan definition contains one to four component indexes, optionally -followed by a colon (':') and the four progressive-JPEG parameters. The -component indexes denote which color component(s) are to be transmitted in -the scan. Components are numbered in the order in which they appear in the -JPEG SOF marker, with the first component being numbered 0. (Note that these -indexes are not the "component ID" codes assigned to the components, just -positional indexes.) - -The progression parameters for each scan are: - Ss Zigzag index of first coefficient included in scan - Se Zigzag index of last coefficient included in scan - Ah Zero for first scan of a coefficient, else Al of prior scan - Al Successive approximation low bit position for scan -If the progression parameters are omitted, the values 0,63,0,0 are used, -producing a sequential JPEG file. cjpeg automatically determines whether -the script represents a progressive or sequential file, by observing whether -Ss and Se values other than 0 and 63 appear. (The -progressive switch is -not needed to specify this; in fact, it is ignored when -scans appears.) -The scan script must meet the JPEG restrictions on progression sequences. -(cjpeg checks that the spec's requirements are obeyed.) - -Scan script files are free format, in that arbitrary whitespace can appear -between numbers and around punctuation. Also, comments can be included: a -comment starts with '#' and extends to the end of the line. For additional -legibility, commas or dashes can be placed between values. (Actually, any -single punctuation character other than ':' or ';' can be inserted.) For -example, the following two scan definitions are equivalent: - 0 1 2: 0 63 0 0; - 0,1,2 : 0-63, 0,0 ; - -Here is an example of a scan script that generates a partially interleaved -sequential JPEG file: - - 0; # Y only in first scan - 1 2; # Cb and Cr in second scan - -Here is an example of a progressive scan script using only spectral selection -(no successive approximation): - - # Interleaved DC scan for Y,Cb,Cr: - 0,1,2: 0-0, 0, 0 ; - # AC scans: - 0: 1-2, 0, 0 ; # First two Y AC coefficients - 0: 3-5, 0, 0 ; # Three more - 1: 1-63, 0, 0 ; # All AC coefficients for Cb - 2: 1-63, 0, 0 ; # All AC coefficients for Cr - 0: 6-9, 0, 0 ; # More Y coefficients - 0: 10-63, 0, 0 ; # Remaining Y coefficients - -Here is an example of a successive-approximation script. This is equivalent -to the default script used by "cjpeg -progressive" for YCbCr images: - - # Initial DC scan for Y,Cb,Cr (lowest bit not sent) - 0,1,2: 0-0, 0, 1 ; - # First AC scan: send first 5 Y AC coefficients, minus 2 lowest bits: - 0: 1-5, 0, 2 ; - # Send all Cr,Cb AC coefficients, minus lowest bit: - # (chroma data is usually too small to be worth subdividing further; - # but note we send Cr first since eye is least sensitive to Cb) - 2: 1-63, 0, 1 ; - 1: 1-63, 0, 1 ; - # Send remaining Y AC coefficients, minus 2 lowest bits: - 0: 6-63, 0, 2 ; - # Send next-to-lowest bit of all Y AC coefficients: - 0: 1-63, 2, 1 ; - # At this point we've sent all but the lowest bit of all coefficients. - # Send lowest bit of DC coefficients - 0,1,2: 0-0, 1, 0 ; - # Send lowest bit of AC coefficients - 2: 1-63, 1, 0 ; - 1: 1-63, 1, 0 ; - # Y AC lowest bit scan is last; it's usually the largest scan - 0: 1-63, 1, 0 ; - -It may be worth pointing out that this script is tuned for quality settings -of around 50 to 75. For lower quality settings, you'd probably want to use -a script with fewer stages of successive approximation (otherwise the -initial scans will be really bad). For higher quality settings, you might -want to use more stages of successive approximation (so that the initial -scans are not too large). diff --git a/Build/source/libs/jpeg/wrbmp.c b/Build/source/libs/jpeg/wrbmp.c deleted file mode 100644 index 3283b0f15c2..00000000000 --- a/Build/source/libs/jpeg/wrbmp.c +++ /dev/null @@ -1,442 +0,0 @@ -/* - * wrbmp.c - * - * Copyright (C) 1994-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to write output images in Microsoft "BMP" - * format (MS Windows 3.x and OS/2 1.x flavors). - * Either 8-bit colormapped or 24-bit full-color format can be written. - * No compression is supported. - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume output to - * an ordinary stdio stream. - * - * This code contributed by James Arthur Boucher. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef BMP_SUPPORTED - - -/* - * To support 12-bit JPEG data, we'd have to scale output down to 8 bits. - * This is not yet implemented. - */ - -#if BITS_IN_JSAMPLE != 8 - Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ -#endif - -/* - * Since BMP stores scanlines bottom-to-top, we have to invert the image - * from JPEG's top-to-bottom order. To do this, we save the outgoing data - * in a virtual array during put_pixel_row calls, then actually emit the - * BMP file during finish_output. The virtual array contains one JSAMPLE per - * pixel if the output is grayscale or colormapped, three if it is full color. - */ - -/* Private version of data destination object */ - -typedef struct { - struct djpeg_dest_struct pub; /* public fields */ - - boolean is_os2; /* saves the OS2 format request flag */ - - jvirt_sarray_ptr whole_image; /* needed to reverse row order */ - JDIMENSION data_width; /* JSAMPLEs per row */ - JDIMENSION row_width; /* physical width of one row in the BMP file */ - int pad_bytes; /* number of padding bytes needed per row */ - JDIMENSION cur_output_row; /* next row# to write to virtual array */ -} bmp_dest_struct; - -typedef bmp_dest_struct * bmp_dest_ptr; - - -/* Forward declarations */ -LOCAL(void) write_colormap - JPP((j_decompress_ptr cinfo, bmp_dest_ptr dest, - int map_colors, int map_entry_size)); - - -/* - * Write some pixel data. - * In this module rows_supplied will always be 1. - */ - -METHODDEF(void) -put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -/* This version is for writing 24-bit pixels */ -{ - bmp_dest_ptr dest = (bmp_dest_ptr) dinfo; - JSAMPARRAY image_ptr; - register JSAMPROW inptr, outptr; - register JDIMENSION col; - int pad; - - /* Access next row in virtual array */ - image_ptr = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, dest->whole_image, - dest->cur_output_row, (JDIMENSION) 1, TRUE); - dest->cur_output_row++; - - /* Transfer data. Note destination values must be in BGR order - * (even though Microsoft's own documents say the opposite). - */ - inptr = dest->pub.buffer[0]; - outptr = image_ptr[0]; - for (col = cinfo->output_width; col > 0; col--) { - outptr[2] = *inptr++; /* can omit GETJSAMPLE() safely */ - outptr[1] = *inptr++; - outptr[0] = *inptr++; - outptr += 3; - } - - /* Zero out the pad bytes. */ - pad = dest->pad_bytes; - while (--pad >= 0) - *outptr++ = 0; -} - -METHODDEF(void) -put_gray_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -/* This version is for grayscale OR quantized color output */ -{ - bmp_dest_ptr dest = (bmp_dest_ptr) dinfo; - JSAMPARRAY image_ptr; - register JSAMPROW inptr, outptr; - register JDIMENSION col; - int pad; - - /* Access next row in virtual array */ - image_ptr = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, dest->whole_image, - dest->cur_output_row, (JDIMENSION) 1, TRUE); - dest->cur_output_row++; - - /* Transfer data. */ - inptr = dest->pub.buffer[0]; - outptr = image_ptr[0]; - for (col = cinfo->output_width; col > 0; col--) { - *outptr++ = *inptr++; /* can omit GETJSAMPLE() safely */ - } - - /* Zero out the pad bytes. */ - pad = dest->pad_bytes; - while (--pad >= 0) - *outptr++ = 0; -} - - -/* - * Startup: normally writes the file header. - * In this module we may as well postpone everything until finish_output. - */ - -METHODDEF(void) -start_output_bmp (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - /* no work here */ -} - - -/* - * Finish up at the end of the file. - * - * Here is where we really output the BMP file. - * - * First, routines to write the Windows and OS/2 variants of the file header. - */ - -LOCAL(void) -write_bmp_header (j_decompress_ptr cinfo, bmp_dest_ptr dest) -/* Write a Windows-style BMP file header, including colormap if needed */ -{ - char bmpfileheader[14]; - char bmpinfoheader[40]; -#define PUT_2B(array,offset,value) \ - (array[offset] = (char) ((value) & 0xFF), \ - array[offset+1] = (char) (((value) >> 8) & 0xFF)) -#define PUT_4B(array,offset,value) \ - (array[offset] = (char) ((value) & 0xFF), \ - array[offset+1] = (char) (((value) >> 8) & 0xFF), \ - array[offset+2] = (char) (((value) >> 16) & 0xFF), \ - array[offset+3] = (char) (((value) >> 24) & 0xFF)) - INT32 headersize, bfSize; - int bits_per_pixel, cmap_entries; - - /* Compute colormap size and total file size */ - if (cinfo->out_color_space == JCS_RGB) { - if (cinfo->quantize_colors) { - /* Colormapped RGB */ - bits_per_pixel = 8; - cmap_entries = 256; - } else { - /* Unquantized, full color RGB */ - bits_per_pixel = 24; - cmap_entries = 0; - } - } else { - /* Grayscale output. We need to fake a 256-entry colormap. */ - bits_per_pixel = 8; - cmap_entries = 256; - } - /* File size */ - headersize = 14 + 40 + cmap_entries * 4; /* Header and colormap */ - bfSize = headersize + (INT32) dest->row_width * (INT32) cinfo->output_height; - - /* Set unused fields of header to 0 */ - MEMZERO(bmpfileheader, SIZEOF(bmpfileheader)); - MEMZERO(bmpinfoheader, SIZEOF(bmpinfoheader)); - - /* Fill the file header */ - bmpfileheader[0] = 0x42; /* first 2 bytes are ASCII 'B', 'M' */ - bmpfileheader[1] = 0x4D; - PUT_4B(bmpfileheader, 2, bfSize); /* bfSize */ - /* we leave bfReserved1 & bfReserved2 = 0 */ - PUT_4B(bmpfileheader, 10, headersize); /* bfOffBits */ - - /* Fill the info header (Microsoft calls this a BITMAPINFOHEADER) */ - PUT_2B(bmpinfoheader, 0, 40); /* biSize */ - PUT_4B(bmpinfoheader, 4, cinfo->output_width); /* biWidth */ - PUT_4B(bmpinfoheader, 8, cinfo->output_height); /* biHeight */ - PUT_2B(bmpinfoheader, 12, 1); /* biPlanes - must be 1 */ - PUT_2B(bmpinfoheader, 14, bits_per_pixel); /* biBitCount */ - /* we leave biCompression = 0, for none */ - /* we leave biSizeImage = 0; this is correct for uncompressed data */ - if (cinfo->density_unit == 2) { /* if have density in dots/cm, then */ - PUT_4B(bmpinfoheader, 24, (INT32) (cinfo->X_density*100)); /* XPels/M */ - PUT_4B(bmpinfoheader, 28, (INT32) (cinfo->Y_density*100)); /* XPels/M */ - } - PUT_2B(bmpinfoheader, 32, cmap_entries); /* biClrUsed */ - /* we leave biClrImportant = 0 */ - - if (JFWRITE(dest->pub.output_file, bmpfileheader, 14) != (size_t) 14) - ERREXIT(cinfo, JERR_FILE_WRITE); - if (JFWRITE(dest->pub.output_file, bmpinfoheader, 40) != (size_t) 40) - ERREXIT(cinfo, JERR_FILE_WRITE); - - if (cmap_entries > 0) - write_colormap(cinfo, dest, cmap_entries, 4); -} - - -LOCAL(void) -write_os2_header (j_decompress_ptr cinfo, bmp_dest_ptr dest) -/* Write an OS2-style BMP file header, including colormap if needed */ -{ - char bmpfileheader[14]; - char bmpcoreheader[12]; - INT32 headersize, bfSize; - int bits_per_pixel, cmap_entries; - - /* Compute colormap size and total file size */ - if (cinfo->out_color_space == JCS_RGB) { - if (cinfo->quantize_colors) { - /* Colormapped RGB */ - bits_per_pixel = 8; - cmap_entries = 256; - } else { - /* Unquantized, full color RGB */ - bits_per_pixel = 24; - cmap_entries = 0; - } - } else { - /* Grayscale output. We need to fake a 256-entry colormap. */ - bits_per_pixel = 8; - cmap_entries = 256; - } - /* File size */ - headersize = 14 + 12 + cmap_entries * 3; /* Header and colormap */ - bfSize = headersize + (INT32) dest->row_width * (INT32) cinfo->output_height; - - /* Set unused fields of header to 0 */ - MEMZERO(bmpfileheader, SIZEOF(bmpfileheader)); - MEMZERO(bmpcoreheader, SIZEOF(bmpcoreheader)); - - /* Fill the file header */ - bmpfileheader[0] = 0x42; /* first 2 bytes are ASCII 'B', 'M' */ - bmpfileheader[1] = 0x4D; - PUT_4B(bmpfileheader, 2, bfSize); /* bfSize */ - /* we leave bfReserved1 & bfReserved2 = 0 */ - PUT_4B(bmpfileheader, 10, headersize); /* bfOffBits */ - - /* Fill the info header (Microsoft calls this a BITMAPCOREHEADER) */ - PUT_2B(bmpcoreheader, 0, 12); /* bcSize */ - PUT_2B(bmpcoreheader, 4, cinfo->output_width); /* bcWidth */ - PUT_2B(bmpcoreheader, 6, cinfo->output_height); /* bcHeight */ - PUT_2B(bmpcoreheader, 8, 1); /* bcPlanes - must be 1 */ - PUT_2B(bmpcoreheader, 10, bits_per_pixel); /* bcBitCount */ - - if (JFWRITE(dest->pub.output_file, bmpfileheader, 14) != (size_t) 14) - ERREXIT(cinfo, JERR_FILE_WRITE); - if (JFWRITE(dest->pub.output_file, bmpcoreheader, 12) != (size_t) 12) - ERREXIT(cinfo, JERR_FILE_WRITE); - - if (cmap_entries > 0) - write_colormap(cinfo, dest, cmap_entries, 3); -} - - -/* - * Write the colormap. - * Windows uses BGR0 map entries; OS/2 uses BGR entries. - */ - -LOCAL(void) -write_colormap (j_decompress_ptr cinfo, bmp_dest_ptr dest, - int map_colors, int map_entry_size) -{ - JSAMPARRAY colormap = cinfo->colormap; - int num_colors = cinfo->actual_number_of_colors; - FILE * outfile = dest->pub.output_file; - int i; - - if (colormap != NULL) { - if (cinfo->out_color_components == 3) { - /* Normal case with RGB colormap */ - for (i = 0; i < num_colors; i++) { - putc(GETJSAMPLE(colormap[2][i]), outfile); - putc(GETJSAMPLE(colormap[1][i]), outfile); - putc(GETJSAMPLE(colormap[0][i]), outfile); - if (map_entry_size == 4) - putc(0, outfile); - } - } else { - /* Grayscale colormap (only happens with grayscale quantization) */ - for (i = 0; i < num_colors; i++) { - putc(GETJSAMPLE(colormap[0][i]), outfile); - putc(GETJSAMPLE(colormap[0][i]), outfile); - putc(GETJSAMPLE(colormap[0][i]), outfile); - if (map_entry_size == 4) - putc(0, outfile); - } - } - } else { - /* If no colormap, must be grayscale data. Generate a linear "map". */ - for (i = 0; i < 256; i++) { - putc(i, outfile); - putc(i, outfile); - putc(i, outfile); - if (map_entry_size == 4) - putc(0, outfile); - } - } - /* Pad colormap with zeros to ensure specified number of colormap entries */ - if (i > map_colors) - ERREXIT1(cinfo, JERR_TOO_MANY_COLORS, i); - for (; i < map_colors; i++) { - putc(0, outfile); - putc(0, outfile); - putc(0, outfile); - if (map_entry_size == 4) - putc(0, outfile); - } -} - - -METHODDEF(void) -finish_output_bmp (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - bmp_dest_ptr dest = (bmp_dest_ptr) dinfo; - register FILE * outfile = dest->pub.output_file; - JSAMPARRAY image_ptr; - register JSAMPROW data_ptr; - JDIMENSION row; - register JDIMENSION col; - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; - - /* Write the header and colormap */ - if (dest->is_os2) - write_os2_header(cinfo, dest); - else - write_bmp_header(cinfo, dest); - - /* Write the file body from our virtual array */ - for (row = cinfo->output_height; row > 0; row--) { - if (progress != NULL) { - progress->pub.pass_counter = (long) (cinfo->output_height - row); - progress->pub.pass_limit = (long) cinfo->output_height; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } - image_ptr = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, dest->whole_image, row-1, (JDIMENSION) 1, FALSE); - data_ptr = image_ptr[0]; - for (col = dest->row_width; col > 0; col--) { - putc(GETJSAMPLE(*data_ptr), outfile); - data_ptr++; - } - } - if (progress != NULL) - progress->completed_extra_passes++; - - /* Make sure we wrote the output file OK */ - fflush(outfile); - if (ferror(outfile)) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * The module selection routine for BMP format output. - */ - -GLOBAL(djpeg_dest_ptr) -jinit_write_bmp (j_decompress_ptr cinfo, boolean is_os2) -{ - bmp_dest_ptr dest; - JDIMENSION row_width; - - /* Create module interface object, fill in method pointers */ - dest = (bmp_dest_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(bmp_dest_struct)); - dest->pub.start_output = start_output_bmp; - dest->pub.finish_output = finish_output_bmp; - dest->is_os2 = is_os2; - - if (cinfo->out_color_space == JCS_GRAYSCALE) { - dest->pub.put_pixel_rows = put_gray_rows; - } else if (cinfo->out_color_space == JCS_RGB) { - if (cinfo->quantize_colors) - dest->pub.put_pixel_rows = put_gray_rows; - else - dest->pub.put_pixel_rows = put_pixel_rows; - } else { - ERREXIT(cinfo, JERR_BMP_COLORSPACE); - } - - /* Calculate output image dimensions so we can allocate space */ - jpeg_calc_output_dimensions(cinfo); - - /* Determine width of rows in the BMP file (padded to 4-byte boundary). */ - row_width = cinfo->output_width * cinfo->output_components; - dest->data_width = row_width; - while ((row_width & 3) != 0) row_width++; - dest->row_width = row_width; - dest->pad_bytes = (int) (row_width - dest->data_width); - - /* Allocate space for inversion array, prepare for write pass */ - dest->whole_image = (*cinfo->mem->request_virt_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, - row_width, cinfo->output_height, (JDIMENSION) 1); - dest->cur_output_row = 0; - if (cinfo->progress != NULL) { - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; - progress->total_extra_passes++; /* count file input as separate pass */ - } - - /* Create decompressor output buffer. */ - dest->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, row_width, (JDIMENSION) 1); - dest->pub.buffer_height = 1; - - return (djpeg_dest_ptr) dest; -} - -#endif /* BMP_SUPPORTED */ diff --git a/Build/source/libs/jpeg/wrgif.c b/Build/source/libs/jpeg/wrgif.c deleted file mode 100644 index 5fe83283919..00000000000 --- a/Build/source/libs/jpeg/wrgif.c +++ /dev/null @@ -1,399 +0,0 @@ -/* - * wrgif.c - * - * Copyright (C) 1991-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to write output images in GIF format. - * - ************************************************************************** - * NOTE: to avoid entanglements with Unisys' patent on LZW compression, * - * this code has been modified to output "uncompressed GIF" files. * - * There is no trace of the LZW algorithm in this file. * - ************************************************************************** - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume output to - * an ordinary stdio stream. - */ - -/* - * This code is loosely based on ppmtogif from the PBMPLUS distribution - * of Feb. 1991. That file contains the following copyright notice: - * Based on GIFENCODE by David Rowley . - * Lempel-Ziv compression based on "compress" by Spencer W. Thomas et al. - * Copyright (C) 1989 by Jef Poskanzer. - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation. This software is provided "as is" without express or - * implied warranty. - * - * We are also required to state that - * "The Graphics Interchange Format(c) is the Copyright property of - * CompuServe Incorporated. GIF(sm) is a Service Mark property of - * CompuServe Incorporated." - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef GIF_SUPPORTED - - -/* Private version of data destination object */ - -typedef struct { - struct djpeg_dest_struct pub; /* public fields */ - - j_decompress_ptr cinfo; /* back link saves passing separate parm */ - - /* State for packing variable-width codes into a bitstream */ - int n_bits; /* current number of bits/code */ - int maxcode; /* maximum code, given n_bits */ - INT32 cur_accum; /* holds bits not yet output */ - int cur_bits; /* # of bits in cur_accum */ - - /* State for GIF code assignment */ - int ClearCode; /* clear code (doesn't change) */ - int EOFCode; /* EOF code (ditto) */ - int code_counter; /* counts output symbols */ - - /* GIF data packet construction buffer */ - int bytesinpkt; /* # of bytes in current packet */ - char packetbuf[256]; /* workspace for accumulating packet */ - -} gif_dest_struct; - -typedef gif_dest_struct * gif_dest_ptr; - -/* Largest value that will fit in N bits */ -#define MAXCODE(n_bits) ((1 << (n_bits)) - 1) - - -/* - * Routines to package finished data bytes into GIF data blocks. - * A data block consists of a count byte (1..255) and that many data bytes. - */ - -LOCAL(void) -flush_packet (gif_dest_ptr dinfo) -/* flush any accumulated data */ -{ - if (dinfo->bytesinpkt > 0) { /* never write zero-length packet */ - dinfo->packetbuf[0] = (char) dinfo->bytesinpkt++; - if (JFWRITE(dinfo->pub.output_file, dinfo->packetbuf, dinfo->bytesinpkt) - != (size_t) dinfo->bytesinpkt) - ERREXIT(dinfo->cinfo, JERR_FILE_WRITE); - dinfo->bytesinpkt = 0; - } -} - - -/* Add a character to current packet; flush to disk if necessary */ -#define CHAR_OUT(dinfo,c) \ - { (dinfo)->packetbuf[++(dinfo)->bytesinpkt] = (char) (c); \ - if ((dinfo)->bytesinpkt >= 255) \ - flush_packet(dinfo); \ - } - - -/* Routine to convert variable-width codes into a byte stream */ - -LOCAL(void) -output (gif_dest_ptr dinfo, int code) -/* Emit a code of n_bits bits */ -/* Uses cur_accum and cur_bits to reblock into 8-bit bytes */ -{ - dinfo->cur_accum |= ((INT32) code) << dinfo->cur_bits; - dinfo->cur_bits += dinfo->n_bits; - - while (dinfo->cur_bits >= 8) { - CHAR_OUT(dinfo, dinfo->cur_accum & 0xFF); - dinfo->cur_accum >>= 8; - dinfo->cur_bits -= 8; - } -} - - -/* The pseudo-compression algorithm. - * - * In this module we simply output each pixel value as a separate symbol; - * thus, no compression occurs. In fact, there is expansion of one bit per - * pixel, because we use a symbol width one bit wider than the pixel width. - * - * GIF ordinarily uses variable-width symbols, and the decoder will expect - * to ratchet up the symbol width after a fixed number of symbols. - * To simplify the logic and keep the expansion penalty down, we emit a - * GIF Clear code to reset the decoder just before the width would ratchet up. - * Thus, all the symbols in the output file will have the same bit width. - * Note that emitting the Clear codes at the right times is a mere matter of - * counting output symbols and is in no way dependent on the LZW patent. - * - * With a small basic pixel width (low color count), Clear codes will be - * needed very frequently, causing the file to expand even more. So this - * simplistic approach wouldn't work too well on bilevel images, for example. - * But for output of JPEG conversions the pixel width will usually be 8 bits - * (129 to 256 colors), so the overhead added by Clear symbols is only about - * one symbol in every 256. - */ - -LOCAL(void) -compress_init (gif_dest_ptr dinfo, int i_bits) -/* Initialize pseudo-compressor */ -{ - /* init all the state variables */ - dinfo->n_bits = i_bits; - dinfo->maxcode = MAXCODE(dinfo->n_bits); - dinfo->ClearCode = (1 << (i_bits - 1)); - dinfo->EOFCode = dinfo->ClearCode + 1; - dinfo->code_counter = dinfo->ClearCode + 2; - /* init output buffering vars */ - dinfo->bytesinpkt = 0; - dinfo->cur_accum = 0; - dinfo->cur_bits = 0; - /* GIF specifies an initial Clear code */ - output(dinfo, dinfo->ClearCode); -} - - -LOCAL(void) -compress_pixel (gif_dest_ptr dinfo, int c) -/* Accept and "compress" one pixel value. - * The given value must be less than n_bits wide. - */ -{ - /* Output the given pixel value as a symbol. */ - output(dinfo, c); - /* Issue Clear codes often enough to keep the reader from ratcheting up - * its symbol size. - */ - if (dinfo->code_counter < dinfo->maxcode) { - dinfo->code_counter++; - } else { - output(dinfo, dinfo->ClearCode); - dinfo->code_counter = dinfo->ClearCode + 2; /* reset the counter */ - } -} - - -LOCAL(void) -compress_term (gif_dest_ptr dinfo) -/* Clean up at end */ -{ - /* Send an EOF code */ - output(dinfo, dinfo->EOFCode); - /* Flush the bit-packing buffer */ - if (dinfo->cur_bits > 0) { - CHAR_OUT(dinfo, dinfo->cur_accum & 0xFF); - } - /* Flush the packet buffer */ - flush_packet(dinfo); -} - - -/* GIF header construction */ - - -LOCAL(void) -put_word (gif_dest_ptr dinfo, unsigned int w) -/* Emit a 16-bit word, LSB first */ -{ - putc(w & 0xFF, dinfo->pub.output_file); - putc((w >> 8) & 0xFF, dinfo->pub.output_file); -} - - -LOCAL(void) -put_3bytes (gif_dest_ptr dinfo, int val) -/* Emit 3 copies of same byte value --- handy subr for colormap construction */ -{ - putc(val, dinfo->pub.output_file); - putc(val, dinfo->pub.output_file); - putc(val, dinfo->pub.output_file); -} - - -LOCAL(void) -emit_header (gif_dest_ptr dinfo, int num_colors, JSAMPARRAY colormap) -/* Output the GIF file header, including color map */ -/* If colormap==NULL, synthesize a gray-scale colormap */ -{ - int BitsPerPixel, ColorMapSize, InitCodeSize, FlagByte; - int cshift = dinfo->cinfo->data_precision - 8; - int i; - - if (num_colors > 256) - ERREXIT1(dinfo->cinfo, JERR_TOO_MANY_COLORS, num_colors); - /* Compute bits/pixel and related values */ - BitsPerPixel = 1; - while (num_colors > (1 << BitsPerPixel)) - BitsPerPixel++; - ColorMapSize = 1 << BitsPerPixel; - if (BitsPerPixel <= 1) - InitCodeSize = 2; - else - InitCodeSize = BitsPerPixel; - /* - * Write the GIF header. - * Note that we generate a plain GIF87 header for maximum compatibility. - */ - putc('G', dinfo->pub.output_file); - putc('I', dinfo->pub.output_file); - putc('F', dinfo->pub.output_file); - putc('8', dinfo->pub.output_file); - putc('7', dinfo->pub.output_file); - putc('a', dinfo->pub.output_file); - /* Write the Logical Screen Descriptor */ - put_word(dinfo, (unsigned int) dinfo->cinfo->output_width); - put_word(dinfo, (unsigned int) dinfo->cinfo->output_height); - FlagByte = 0x80; /* Yes, there is a global color table */ - FlagByte |= (BitsPerPixel-1) << 4; /* color resolution */ - FlagByte |= (BitsPerPixel-1); /* size of global color table */ - putc(FlagByte, dinfo->pub.output_file); - putc(0, dinfo->pub.output_file); /* Background color index */ - putc(0, dinfo->pub.output_file); /* Reserved (aspect ratio in GIF89) */ - /* Write the Global Color Map */ - /* If the color map is more than 8 bits precision, */ - /* we reduce it to 8 bits by shifting */ - for (i=0; i < ColorMapSize; i++) { - if (i < num_colors) { - if (colormap != NULL) { - if (dinfo->cinfo->out_color_space == JCS_RGB) { - /* Normal case: RGB color map */ - putc(GETJSAMPLE(colormap[0][i]) >> cshift, dinfo->pub.output_file); - putc(GETJSAMPLE(colormap[1][i]) >> cshift, dinfo->pub.output_file); - putc(GETJSAMPLE(colormap[2][i]) >> cshift, dinfo->pub.output_file); - } else { - /* Grayscale "color map": possible if quantizing grayscale image */ - put_3bytes(dinfo, GETJSAMPLE(colormap[0][i]) >> cshift); - } - } else { - /* Create a gray-scale map of num_colors values, range 0..255 */ - put_3bytes(dinfo, (i * 255 + (num_colors-1)/2) / (num_colors-1)); - } - } else { - /* fill out the map to a power of 2 */ - put_3bytes(dinfo, 0); - } - } - /* Write image separator and Image Descriptor */ - putc(',', dinfo->pub.output_file); /* separator */ - put_word(dinfo, 0); /* left/top offset */ - put_word(dinfo, 0); - put_word(dinfo, (unsigned int) dinfo->cinfo->output_width); /* image size */ - put_word(dinfo, (unsigned int) dinfo->cinfo->output_height); - /* flag byte: not interlaced, no local color map */ - putc(0x00, dinfo->pub.output_file); - /* Write Initial Code Size byte */ - putc(InitCodeSize, dinfo->pub.output_file); - - /* Initialize for "compression" of image data */ - compress_init(dinfo, InitCodeSize+1); -} - - -/* - * Startup: write the file header. - */ - -METHODDEF(void) -start_output_gif (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - gif_dest_ptr dest = (gif_dest_ptr) dinfo; - - if (cinfo->quantize_colors) - emit_header(dest, cinfo->actual_number_of_colors, cinfo->colormap); - else - emit_header(dest, 256, (JSAMPARRAY) NULL); -} - - -/* - * Write some pixel data. - * In this module rows_supplied will always be 1. - */ - -METHODDEF(void) -put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -{ - gif_dest_ptr dest = (gif_dest_ptr) dinfo; - register JSAMPROW ptr; - register JDIMENSION col; - - ptr = dest->pub.buffer[0]; - for (col = cinfo->output_width; col > 0; col--) { - compress_pixel(dest, GETJSAMPLE(*ptr++)); - } -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF(void) -finish_output_gif (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - gif_dest_ptr dest = (gif_dest_ptr) dinfo; - - /* Flush "compression" mechanism */ - compress_term(dest); - /* Write a zero-length data block to end the series */ - putc(0, dest->pub.output_file); - /* Write the GIF terminator mark */ - putc(';', dest->pub.output_file); - /* Make sure we wrote the output file OK */ - fflush(dest->pub.output_file); - if (ferror(dest->pub.output_file)) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * The module selection routine for GIF format output. - */ - -GLOBAL(djpeg_dest_ptr) -jinit_write_gif (j_decompress_ptr cinfo) -{ - gif_dest_ptr dest; - - /* Create module interface object, fill in method pointers */ - dest = (gif_dest_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(gif_dest_struct)); - dest->cinfo = cinfo; /* make back link for subroutines */ - dest->pub.start_output = start_output_gif; - dest->pub.put_pixel_rows = put_pixel_rows; - dest->pub.finish_output = finish_output_gif; - - if (cinfo->out_color_space != JCS_GRAYSCALE && - cinfo->out_color_space != JCS_RGB) - ERREXIT(cinfo, JERR_GIF_COLORSPACE); - - /* Force quantization if color or if > 8 bits input */ - if (cinfo->out_color_space != JCS_GRAYSCALE || cinfo->data_precision > 8) { - /* Force quantization to at most 256 colors */ - cinfo->quantize_colors = TRUE; - if (cinfo->desired_number_of_colors > 256) - cinfo->desired_number_of_colors = 256; - } - - /* Calculate output image dimensions so we can allocate space */ - jpeg_calc_output_dimensions(cinfo); - - if (cinfo->output_components != 1) /* safety check: just one component? */ - ERREXIT(cinfo, JERR_GIF_BUG); - - /* Create decompressor output buffer. */ - dest->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, cinfo->output_width, (JDIMENSION) 1); - dest->pub.buffer_height = 1; - - return (djpeg_dest_ptr) dest; -} - -#endif /* GIF_SUPPORTED */ diff --git a/Build/source/libs/jpeg/wrjpgcom.1 b/Build/source/libs/jpeg/wrjpgcom.1 deleted file mode 100644 index d419a999936..00000000000 --- a/Build/source/libs/jpeg/wrjpgcom.1 +++ /dev/null @@ -1,103 +0,0 @@ -.TH WRJPGCOM 1 "15 June 1995" -.SH NAME -wrjpgcom \- insert text comments into a JPEG file -.SH SYNOPSIS -.B wrjpgcom -[ -.B \-replace -] -[ -.BI \-comment " text" -] -[ -.BI \-cfile " name" -] -[ -.I filename -] -.LP -.SH DESCRIPTION -.LP -.B wrjpgcom -reads the named JPEG/JFIF file, or the standard input if no file is named, -and generates a new JPEG/JFIF file on standard output. A comment block is -added to the file. -.PP -The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file. -Although the standard doesn't actually define what COM blocks are for, they -are widely used to hold user-supplied text strings. This lets you add -annotations, titles, index terms, etc to your JPEG files, and later retrieve -them as text. COM blocks do not interfere with the image stored in the JPEG -file. The maximum size of a COM block is 64K, but you can have as many of -them as you like in one JPEG file. -.PP -.B wrjpgcom -adds a COM block, containing text you provide, to a JPEG file. -Ordinarily, the COM block is added after any existing COM blocks; but you -can delete the old COM blocks if you wish. -.SH OPTIONS -Switch names may be abbreviated, and are not case sensitive. -.TP -.B \-replace -Delete any existing COM blocks from the file. -.TP -.BI \-comment " text" -Supply text for new COM block on command line. -.TP -.BI \-cfile " name" -Read text for new COM block from named file. -.PP -If you have only one line of comment text to add, you can provide it on the -command line with -.BR \-comment . -The comment text must be surrounded with quotes so that it is treated as a -single argument. Longer comments can be read from a text file. -.PP -If you give neither -.B \-comment -nor -.BR \-cfile , -then -.B wrjpgcom -will read the comment text from standard input. (In this case an input image -file name MUST be supplied, so that the source JPEG file comes from somewhere -else.) You can enter multiple lines, up to 64KB worth. Type an end-of-file -indicator (usually control-D) to terminate the comment text entry. -.PP -.B wrjpgcom -will not add a COM block if the provided comment string is empty. Therefore -\fB\-replace \-comment ""\fR can be used to delete all COM blocks from a file. -.SH EXAMPLES -.LP -Add a short comment to in.jpg, producing out.jpg: -.IP -.B wrjpgcom \-c -\fI"View of my back yard" in.jpg -.B > -.I out.jpg -.PP -Attach a long comment previously stored in comment.txt: -.IP -.B wrjpgcom -.I in.jpg -.B < -.I comment.txt -.B > -.I out.jpg -.PP -or equivalently -.IP -.B wrjpgcom -.B -cfile -.I comment.txt -.B < -.I in.jpg -.B > -.I out.jpg -.SH SEE ALSO -.BR cjpeg (1), -.BR djpeg (1), -.BR jpegtran (1), -.BR rdjpgcom (1) -.SH AUTHOR -Independent JPEG Group diff --git a/Build/source/libs/jpeg/wrjpgcom.c b/Build/source/libs/jpeg/wrjpgcom.c deleted file mode 100644 index 8c04b055120..00000000000 --- a/Build/source/libs/jpeg/wrjpgcom.c +++ /dev/null @@ -1,583 +0,0 @@ -/* - * wrjpgcom.c - * - * Copyright (C) 1994-1997, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a very simple stand-alone application that inserts - * user-supplied text as a COM (comment) marker in a JFIF file. - * This may be useful as an example of the minimum logic needed to parse - * JPEG markers. - */ - -#define JPEG_CJPEG_DJPEG /* to get the command-line config symbols */ -#include "jinclude.h" /* get auto-config symbols, */ - -#ifndef HAVE_STDLIB_H /* should declare malloc() */ -extern void * malloc (); -#endif -#include /* to declare isupper(), tolower() */ -#ifdef USE_SETMODE -#include /* to declare setmode()'s parameter macros */ -/* If you have setmode() but not , just delete this line: */ -#include /* to declare setmode() */ -#endif - -#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ -#ifdef __MWERKS__ -#include /* Metrowerks needs this */ -#include /* ... and this */ -#endif -#ifdef THINK_C -#include /* Think declares it here */ -#endif -#endif - -#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ -#define READ_BINARY "r" -#define WRITE_BINARY "w" -#else -#ifdef VMS /* VMS is very nonstandard */ -#define READ_BINARY "rb", "ctx=stm" -#define WRITE_BINARY "wb", "ctx=stm" -#else /* standard ANSI-compliant case */ -#define READ_BINARY "rb" -#define WRITE_BINARY "wb" -#endif -#endif - -#ifndef EXIT_FAILURE /* define exit() codes if not provided */ -#define EXIT_FAILURE 1 -#endif -#ifndef EXIT_SUCCESS -#ifdef VMS -#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ -#else -#define EXIT_SUCCESS 0 -#endif -#endif - -/* Reduce this value if your malloc() can't allocate blocks up to 64K. - * On DOS, compiling in large model is usually a better solution. - */ - -#ifndef MAX_COM_LENGTH -#define MAX_COM_LENGTH 65000L /* must be <= 65533 in any case */ -#endif - - -/* - * These macros are used to read the input file and write the output file. - * To reuse this code in another application, you might need to change these. - */ - -static FILE * infile; /* input JPEG file */ - -/* Return next input byte, or EOF if no more */ -#define NEXTBYTE() getc(infile) - -static FILE * outfile; /* output JPEG file */ - -/* Emit an output byte */ -#define PUTBYTE(x) putc((x), outfile) - - -/* Error exit handler */ -#define ERREXIT(msg) (fprintf(stderr, "%s\n", msg), exit(EXIT_FAILURE)) - - -/* Read one byte, testing for EOF */ -static int -read_1_byte (void) -{ - int c; - - c = NEXTBYTE(); - if (c == EOF) - ERREXIT("Premature EOF in JPEG file"); - return c; -} - -/* Read 2 bytes, convert to unsigned int */ -/* All 2-byte quantities in JPEG markers are MSB first */ -static unsigned int -read_2_bytes (void) -{ - int c1, c2; - - c1 = NEXTBYTE(); - if (c1 == EOF) - ERREXIT("Premature EOF in JPEG file"); - c2 = NEXTBYTE(); - if (c2 == EOF) - ERREXIT("Premature EOF in JPEG file"); - return (((unsigned int) c1) << 8) + ((unsigned int) c2); -} - - -/* Routines to write data to output file */ - -static void -write_1_byte (int c) -{ - PUTBYTE(c); -} - -static void -write_2_bytes (unsigned int val) -{ - PUTBYTE((val >> 8) & 0xFF); - PUTBYTE(val & 0xFF); -} - -static void -write_marker (int marker) -{ - PUTBYTE(0xFF); - PUTBYTE(marker); -} - -static void -copy_rest_of_file (void) -{ - int c; - - while ((c = NEXTBYTE()) != EOF) - PUTBYTE(c); -} - - -/* - * JPEG markers consist of one or more 0xFF bytes, followed by a marker - * code byte (which is not an FF). Here are the marker codes of interest - * in this program. (See jdmarker.c for a more complete list.) - */ - -#define M_SOF0 0xC0 /* Start Of Frame N */ -#define M_SOF1 0xC1 /* N indicates which compression process */ -#define M_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use */ -#define M_SOF3 0xC3 -#define M_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers */ -#define M_SOF6 0xC6 -#define M_SOF7 0xC7 -#define M_SOF9 0xC9 -#define M_SOF10 0xCA -#define M_SOF11 0xCB -#define M_SOF13 0xCD -#define M_SOF14 0xCE -#define M_SOF15 0xCF -#define M_SOI 0xD8 /* Start Of Image (beginning of datastream) */ -#define M_EOI 0xD9 /* End Of Image (end of datastream) */ -#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */ -#define M_COM 0xFE /* COMment */ - - -/* - * Find the next JPEG marker and return its marker code. - * We expect at least one FF byte, possibly more if the compressor used FFs - * to pad the file. (Padding FFs will NOT be replicated in the output file.) - * There could also be non-FF garbage between markers. The treatment of such - * garbage is unspecified; we choose to skip over it but emit a warning msg. - * NB: this routine must not be used after seeing SOS marker, since it will - * not deal correctly with FF/00 sequences in the compressed image data... - */ - -static int -next_marker (void) -{ - int c; - int discarded_bytes = 0; - - /* Find 0xFF byte; count and skip any non-FFs. */ - c = read_1_byte(); - while (c != 0xFF) { - discarded_bytes++; - c = read_1_byte(); - } - /* Get marker code byte, swallowing any duplicate FF bytes. Extra FFs - * are legal as pad bytes, so don't count them in discarded_bytes. - */ - do { - c = read_1_byte(); - } while (c == 0xFF); - - if (discarded_bytes != 0) { - fprintf(stderr, "Warning: garbage data found in JPEG file\n"); - } - - return c; -} - - -/* - * Read the initial marker, which should be SOI. - * For a JFIF file, the first two bytes of the file should be literally - * 0xFF M_SOI. To be more general, we could use next_marker, but if the - * input file weren't actually JPEG at all, next_marker might read the whole - * file and then return a misleading error message... - */ - -static int -first_marker (void) -{ - int c1, c2; - - c1 = NEXTBYTE(); - c2 = NEXTBYTE(); - if (c1 != 0xFF || c2 != M_SOI) - ERREXIT("Not a JPEG file"); - return c2; -} - - -/* - * Most types of marker are followed by a variable-length parameter segment. - * This routine skips over the parameters for any marker we don't otherwise - * want to process. - * Note that we MUST skip the parameter segment explicitly in order not to - * be fooled by 0xFF bytes that might appear within the parameter segment; - * such bytes do NOT introduce new markers. - */ - -static void -copy_variable (void) -/* Copy an unknown or uninteresting variable-length marker */ -{ - unsigned int length; - - /* Get the marker parameter length count */ - length = read_2_bytes(); - write_2_bytes(length); - /* Length includes itself, so must be at least 2 */ - if (length < 2) - ERREXIT("Erroneous JPEG marker length"); - length -= 2; - /* Skip over the remaining bytes */ - while (length > 0) { - write_1_byte(read_1_byte()); - length--; - } -} - -static void -skip_variable (void) -/* Skip over an unknown or uninteresting variable-length marker */ -{ - unsigned int length; - - /* Get the marker parameter length count */ - length = read_2_bytes(); - /* Length includes itself, so must be at least 2 */ - if (length < 2) - ERREXIT("Erroneous JPEG marker length"); - length -= 2; - /* Skip over the remaining bytes */ - while (length > 0) { - (void) read_1_byte(); - length--; - } -} - - -/* - * Parse the marker stream until SOFn or EOI is seen; - * copy data to output, but discard COM markers unless keep_COM is true. - */ - -static int -scan_JPEG_header (int keep_COM) -{ - int marker; - - /* Expect SOI at start of file */ - if (first_marker() != M_SOI) - ERREXIT("Expected SOI marker first"); - write_marker(M_SOI); - - /* Scan miscellaneous markers until we reach SOFn. */ - for (;;) { - marker = next_marker(); - switch (marker) { - /* Note that marker codes 0xC4, 0xC8, 0xCC are not, and must not be, - * treated as SOFn. C4 in particular is actually DHT. - */ - case M_SOF0: /* Baseline */ - case M_SOF1: /* Extended sequential, Huffman */ - case M_SOF2: /* Progressive, Huffman */ - case M_SOF3: /* Lossless, Huffman */ - case M_SOF5: /* Differential sequential, Huffman */ - case M_SOF6: /* Differential progressive, Huffman */ - case M_SOF7: /* Differential lossless, Huffman */ - case M_SOF9: /* Extended sequential, arithmetic */ - case M_SOF10: /* Progressive, arithmetic */ - case M_SOF11: /* Lossless, arithmetic */ - case M_SOF13: /* Differential sequential, arithmetic */ - case M_SOF14: /* Differential progressive, arithmetic */ - case M_SOF15: /* Differential lossless, arithmetic */ - return marker; - - case M_SOS: /* should not see compressed data before SOF */ - ERREXIT("SOS without prior SOFn"); - break; - - case M_EOI: /* in case it's a tables-only JPEG stream */ - return marker; - - case M_COM: /* Existing COM: conditionally discard */ - if (keep_COM) { - write_marker(marker); - copy_variable(); - } else { - skip_variable(); - } - break; - - default: /* Anything else just gets copied */ - write_marker(marker); - copy_variable(); /* we assume it has a parameter count... */ - break; - } - } /* end loop */ -} - - -/* Command line parsing code */ - -static const char * progname; /* program name for error messages */ - - -static void -usage (void) -/* complain about bad command line */ -{ - fprintf(stderr, "wrjpgcom inserts a textual comment in a JPEG file.\n"); - fprintf(stderr, "You can add to or replace any existing comment(s).\n"); - - fprintf(stderr, "Usage: %s [switches] ", progname); -#ifdef TWO_FILE_COMMANDLINE - fprintf(stderr, "inputfile outputfile\n"); -#else - fprintf(stderr, "[inputfile]\n"); -#endif - - fprintf(stderr, "Switches (names may be abbreviated):\n"); - fprintf(stderr, " -replace Delete any existing comments\n"); - fprintf(stderr, " -comment \"text\" Insert comment with given text\n"); - fprintf(stderr, " -cfile name Read comment from named file\n"); - fprintf(stderr, "Notice that you must put quotes around the comment text\n"); - fprintf(stderr, "when you use -comment.\n"); - fprintf(stderr, "If you do not give either -comment or -cfile on the command line,\n"); - fprintf(stderr, "then the comment text is read from standard input.\n"); - fprintf(stderr, "It can be multiple lines, up to %u characters total.\n", - (unsigned int) MAX_COM_LENGTH); -#ifndef TWO_FILE_COMMANDLINE - fprintf(stderr, "You must specify an input JPEG file name when supplying\n"); - fprintf(stderr, "comment text from standard input.\n"); -#endif - - exit(EXIT_FAILURE); -} - - -static int -keymatch (char * arg, const char * keyword, int minchars) -/* Case-insensitive matching of (possibly abbreviated) keyword switches. */ -/* keyword is the constant keyword (must be lower case already), */ -/* minchars is length of minimum legal abbreviation. */ -{ - register int ca, ck; - register int nmatched = 0; - - while ((ca = *arg++) != '\0') { - if ((ck = *keyword++) == '\0') - return 0; /* arg longer than keyword, no good */ - if (isupper(ca)) /* force arg to lcase (assume ck is already) */ - ca = tolower(ca); - if (ca != ck) - return 0; /* no good */ - nmatched++; /* count matched characters */ - } - /* reached end of argument; fail if it's too short for unique abbrev */ - if (nmatched < minchars) - return 0; - return 1; /* A-OK */ -} - - -/* - * The main program. - */ - -int -main (int argc, char **argv) -{ - int argn; - char * arg; - int keep_COM = 1; - char * comment_arg = NULL; - FILE * comment_file = NULL; - unsigned int comment_length = 0; - int marker; - - /* On Mac, fetch a command line. */ -#ifdef USE_CCOMMAND - argc = ccommand(&argv); -#endif - - progname = argv[0]; - if (progname == NULL || progname[0] == 0) - progname = "wrjpgcom"; /* in case C library doesn't provide it */ - - /* Parse switches, if any */ - for (argn = 1; argn < argc; argn++) { - arg = argv[argn]; - if (arg[0] != '-') - break; /* not switch, must be file name */ - arg++; /* advance over '-' */ - if (keymatch(arg, "replace", 1)) { - keep_COM = 0; - } else if (keymatch(arg, "cfile", 2)) { - if (++argn >= argc) usage(); - if ((comment_file = fopen(argv[argn], "r")) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); - exit(EXIT_FAILURE); - } - } else if (keymatch(arg, "comment", 1)) { - if (++argn >= argc) usage(); - comment_arg = argv[argn]; - /* If the comment text starts with '"', then we are probably running - * under MS-DOG and must parse out the quoted string ourselves. Sigh. - */ - if (comment_arg[0] == '"') { - comment_arg = (char *) malloc((size_t) MAX_COM_LENGTH); - if (comment_arg == NULL) - ERREXIT("Insufficient memory"); - strcpy(comment_arg, argv[argn]+1); - for (;;) { - comment_length = (unsigned int) strlen(comment_arg); - if (comment_length > 0 && comment_arg[comment_length-1] == '"') { - comment_arg[comment_length-1] = '\0'; /* zap terminating quote */ - break; - } - if (++argn >= argc) - ERREXIT("Missing ending quote mark"); - strcat(comment_arg, " "); - strcat(comment_arg, argv[argn]); - } - } - comment_length = (unsigned int) strlen(comment_arg); - } else - usage(); - } - - /* Cannot use both -comment and -cfile. */ - if (comment_arg != NULL && comment_file != NULL) - usage(); - /* If there is neither -comment nor -cfile, we will read the comment text - * from stdin; in this case there MUST be an input JPEG file name. - */ - if (comment_arg == NULL && comment_file == NULL && argn >= argc) - usage(); - - /* Open the input file. */ - if (argn < argc) { - if ((infile = fopen(argv[argn], READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); - exit(EXIT_FAILURE); - } - } else { - /* default input file is stdin */ -#ifdef USE_SETMODE /* need to hack file mode? */ - setmode(fileno(stdin), O_BINARY); -#endif -#ifdef USE_FDOPEN /* need to re-open in binary mode? */ - if ((infile = fdopen(fileno(stdin), READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open stdin\n", progname); - exit(EXIT_FAILURE); - } -#else - infile = stdin; -#endif - } - - /* Open the output file. */ -#ifdef TWO_FILE_COMMANDLINE - /* Must have explicit output file name */ - if (argn != argc-2) { - fprintf(stderr, "%s: must name one input and one output file\n", - progname); - usage(); - } - if ((outfile = fopen(argv[argn+1], WRITE_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[argn+1]); - exit(EXIT_FAILURE); - } -#else - /* Unix style: expect zero or one file name */ - if (argn < argc-1) { - fprintf(stderr, "%s: only one input file\n", progname); - usage(); - } - /* default output file is stdout */ -#ifdef USE_SETMODE /* need to hack file mode? */ - setmode(fileno(stdout), O_BINARY); -#endif -#ifdef USE_FDOPEN /* need to re-open in binary mode? */ - if ((outfile = fdopen(fileno(stdout), WRITE_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open stdout\n", progname); - exit(EXIT_FAILURE); - } -#else - outfile = stdout; -#endif -#endif /* TWO_FILE_COMMANDLINE */ - - /* Collect comment text from comment_file or stdin, if necessary */ - if (comment_arg == NULL) { - FILE * src_file; - int c; - - comment_arg = (char *) malloc((size_t) MAX_COM_LENGTH); - if (comment_arg == NULL) - ERREXIT("Insufficient memory"); - comment_length = 0; - src_file = (comment_file != NULL ? comment_file : stdin); - while ((c = getc(src_file)) != EOF) { - if (comment_length >= (unsigned int) MAX_COM_LENGTH) { - fprintf(stderr, "Comment text may not exceed %u bytes\n", - (unsigned int) MAX_COM_LENGTH); - exit(EXIT_FAILURE); - } - comment_arg[comment_length++] = (char) c; - } - if (comment_file != NULL) - fclose(comment_file); - } - - /* Copy JPEG headers until SOFn marker; - * we will insert the new comment marker just before SOFn. - * This (a) causes the new comment to appear after, rather than before, - * existing comments; and (b) ensures that comments come after any JFIF - * or JFXX markers, as required by the JFIF specification. - */ - marker = scan_JPEG_header(keep_COM); - /* Insert the new COM marker, but only if nonempty text has been supplied */ - if (comment_length > 0) { - write_marker(M_COM); - write_2_bytes(comment_length + 2); - while (comment_length > 0) { - write_1_byte(*comment_arg++); - comment_length--; - } - } - /* Duplicate the remainder of the source file. - * Note that any COM markers occuring after SOF will not be touched. - */ - write_marker(marker); - copy_rest_of_file(); - - /* All done. */ - exit(EXIT_SUCCESS); - return 0; /* suppress no-return-value warnings */ -} diff --git a/Build/source/libs/jpeg/wrppm.c b/Build/source/libs/jpeg/wrppm.c deleted file mode 100644 index 6c6d908817c..00000000000 --- a/Build/source/libs/jpeg/wrppm.c +++ /dev/null @@ -1,268 +0,0 @@ -/* - * wrppm.c - * - * Copyright (C) 1991-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to write output images in PPM/PGM format. - * The extended 2-byte-per-sample raw PPM/PGM formats are supported. - * The PBMPLUS library is NOT required to compile this software - * (but it is highly useful as a set of PPM image manipulation programs). - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume output to - * an ordinary stdio stream. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef PPM_SUPPORTED - - -/* - * For 12-bit JPEG data, we either downscale the values to 8 bits - * (to write standard byte-per-sample PPM/PGM files), or output - * nonstandard word-per-sample PPM/PGM files. Downscaling is done - * if PPM_NORAWWORD is defined (this can be done in the Makefile - * or in jconfig.h). - * (When the core library supports data precision reduction, a cleaner - * implementation will be to ask for that instead.) - */ - -#if BITS_IN_JSAMPLE == 8 -#define PUTPPMSAMPLE(ptr,v) *ptr++ = (char) (v) -#define BYTESPERSAMPLE 1 -#define PPM_MAXVAL 255 -#else -#ifdef PPM_NORAWWORD -#define PUTPPMSAMPLE(ptr,v) *ptr++ = (char) ((v) >> (BITS_IN_JSAMPLE-8)) -#define BYTESPERSAMPLE 1 -#define PPM_MAXVAL 255 -#else -/* The word-per-sample format always puts the LSB first. */ -#define PUTPPMSAMPLE(ptr,v) \ - { register int val_ = v; \ - *ptr++ = (char) (val_ & 0xFF); \ - *ptr++ = (char) ((val_ >> 8) & 0xFF); \ - } -#define BYTESPERSAMPLE 2 -#define PPM_MAXVAL ((1<pub.output_file, dest->iobuffer, dest->buffer_width); -} - - -/* - * This code is used when we have to copy the data and apply a pixel - * format translation. Typically this only happens in 12-bit mode. - */ - -METHODDEF(void) -copy_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -{ - ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; - register char * bufferptr; - register JSAMPROW ptr; - register JDIMENSION col; - - ptr = dest->pub.buffer[0]; - bufferptr = dest->iobuffer; - for (col = dest->samples_per_row; col > 0; col--) { - PUTPPMSAMPLE(bufferptr, GETJSAMPLE(*ptr++)); - } - (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); -} - - -/* - * Write some pixel data when color quantization is in effect. - * We have to demap the color index values to straight data. - */ - -METHODDEF(void) -put_demapped_rgb (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -{ - ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; - register char * bufferptr; - register int pixval; - register JSAMPROW ptr; - register JSAMPROW color_map0 = cinfo->colormap[0]; - register JSAMPROW color_map1 = cinfo->colormap[1]; - register JSAMPROW color_map2 = cinfo->colormap[2]; - register JDIMENSION col; - - ptr = dest->pub.buffer[0]; - bufferptr = dest->iobuffer; - for (col = cinfo->output_width; col > 0; col--) { - pixval = GETJSAMPLE(*ptr++); - PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map0[pixval])); - PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map1[pixval])); - PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map2[pixval])); - } - (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); -} - - -METHODDEF(void) -put_demapped_gray (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -{ - ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; - register char * bufferptr; - register JSAMPROW ptr; - register JSAMPROW color_map = cinfo->colormap[0]; - register JDIMENSION col; - - ptr = dest->pub.buffer[0]; - bufferptr = dest->iobuffer; - for (col = cinfo->output_width; col > 0; col--) { - PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map[GETJSAMPLE(*ptr++)])); - } - (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); -} - - -/* - * Startup: write the file header. - */ - -METHODDEF(void) -start_output_ppm (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; - - /* Emit file header */ - switch (cinfo->out_color_space) { - case JCS_GRAYSCALE: - /* emit header for raw PGM format */ - fprintf(dest->pub.output_file, "P5\n%ld %ld\n%d\n", - (long) cinfo->output_width, (long) cinfo->output_height, - PPM_MAXVAL); - break; - case JCS_RGB: - /* emit header for raw PPM format */ - fprintf(dest->pub.output_file, "P6\n%ld %ld\n%d\n", - (long) cinfo->output_width, (long) cinfo->output_height, - PPM_MAXVAL); - break; - default: - ERREXIT(cinfo, JERR_PPM_COLORSPACE); - } -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF(void) -finish_output_ppm (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - /* Make sure we wrote the output file OK */ - fflush(dinfo->output_file); - if (ferror(dinfo->output_file)) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * The module selection routine for PPM format output. - */ - -GLOBAL(djpeg_dest_ptr) -jinit_write_ppm (j_decompress_ptr cinfo) -{ - ppm_dest_ptr dest; - - /* Create module interface object, fill in method pointers */ - dest = (ppm_dest_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(ppm_dest_struct)); - dest->pub.start_output = start_output_ppm; - dest->pub.finish_output = finish_output_ppm; - - /* Calculate output image dimensions so we can allocate space */ - jpeg_calc_output_dimensions(cinfo); - - /* Create physical I/O buffer. Note we make this near on a PC. */ - dest->samples_per_row = cinfo->output_width * cinfo->out_color_components; - dest->buffer_width = dest->samples_per_row * (BYTESPERSAMPLE * SIZEOF(char)); - dest->iobuffer = (char *) (*cinfo->mem->alloc_small) - ((j_common_ptr) cinfo, JPOOL_IMAGE, dest->buffer_width); - - if (cinfo->quantize_colors || BITS_IN_JSAMPLE != 8 || - SIZEOF(JSAMPLE) != SIZEOF(char)) { - /* When quantizing, we need an output buffer for colormap indexes - * that's separate from the physical I/O buffer. We also need a - * separate buffer if pixel format translation must take place. - */ - dest->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - cinfo->output_width * cinfo->output_components, (JDIMENSION) 1); - dest->pub.buffer_height = 1; - if (! cinfo->quantize_colors) - dest->pub.put_pixel_rows = copy_pixel_rows; - else if (cinfo->out_color_space == JCS_GRAYSCALE) - dest->pub.put_pixel_rows = put_demapped_gray; - else - dest->pub.put_pixel_rows = put_demapped_rgb; - } else { - /* We will fwrite() directly from decompressor output buffer. */ - /* Synthesize a JSAMPARRAY pointer structure */ - /* Cast here implies near->far pointer conversion on PCs */ - dest->pixrow = (JSAMPROW) dest->iobuffer; - dest->pub.buffer = & dest->pixrow; - dest->pub.buffer_height = 1; - dest->pub.put_pixel_rows = put_pixel_rows; - } - - return (djpeg_dest_ptr) dest; -} - -#endif /* PPM_SUPPORTED */ diff --git a/Build/source/libs/jpeg/wrrle.c b/Build/source/libs/jpeg/wrrle.c deleted file mode 100644 index a4e73372de6..00000000000 --- a/Build/source/libs/jpeg/wrrle.c +++ /dev/null @@ -1,305 +0,0 @@ -/* - * wrrle.c - * - * Copyright (C) 1991-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to write output images in RLE format. - * The Utah Raster Toolkit library is required (version 3.1 or later). - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume output to - * an ordinary stdio stream. - * - * Based on code contributed by Mike Lijewski, - * with updates from Robert Hutchinson. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef RLE_SUPPORTED - -/* rle.h is provided by the Utah Raster Toolkit. */ - -#include - -/* - * We assume that JSAMPLE has the same representation as rle_pixel, - * to wit, "unsigned char". Hence we can't cope with 12- or 16-bit samples. - */ - -#if BITS_IN_JSAMPLE != 8 - Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ -#endif - - -/* - * Since RLE stores scanlines bottom-to-top, we have to invert the image - * from JPEG's top-to-bottom order. To do this, we save the outgoing data - * in a virtual array during put_pixel_row calls, then actually emit the - * RLE file during finish_output. - */ - - -/* - * For now, if we emit an RLE color map then it is always 256 entries long, - * though not all of the entries need be used. - */ - -#define CMAPBITS 8 -#define CMAPLENGTH (1<<(CMAPBITS)) - -typedef struct { - struct djpeg_dest_struct pub; /* public fields */ - - jvirt_sarray_ptr image; /* virtual array to store the output image */ - rle_map *colormap; /* RLE-style color map, or NULL if none */ - rle_pixel **rle_row; /* To pass rows to rle_putrow() */ - -} rle_dest_struct; - -typedef rle_dest_struct * rle_dest_ptr; - -/* Forward declarations */ -METHODDEF(void) rle_put_pixel_rows - JPP((j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied)); - - -/* - * Write the file header. - * - * In this module it's easier to wait till finish_output to write anything. - */ - -METHODDEF(void) -start_output_rle (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - rle_dest_ptr dest = (rle_dest_ptr) dinfo; - size_t cmapsize; - int i, ci; -#ifdef PROGRESS_REPORT - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; -#endif - - /* - * Make sure the image can be stored in RLE format. - * - * - RLE stores image dimensions as *signed* 16 bit integers. JPEG - * uses unsigned, so we have to check the width. - * - * - Colorspace is expected to be grayscale or RGB. - * - * - The number of channels (components) is expected to be 1 (grayscale/ - * pseudocolor) or 3 (truecolor/directcolor). - * (could be 2 or 4 if using an alpha channel, but we aren't) - */ - - if (cinfo->output_width > 32767 || cinfo->output_height > 32767) - ERREXIT2(cinfo, JERR_RLE_DIMENSIONS, cinfo->output_width, - cinfo->output_height); - - if (cinfo->out_color_space != JCS_GRAYSCALE && - cinfo->out_color_space != JCS_RGB) - ERREXIT(cinfo, JERR_RLE_COLORSPACE); - - if (cinfo->output_components != 1 && cinfo->output_components != 3) - ERREXIT1(cinfo, JERR_RLE_TOOMANYCHANNELS, cinfo->num_components); - - /* Convert colormap, if any, to RLE format. */ - - dest->colormap = NULL; - - if (cinfo->quantize_colors) { - /* Allocate storage for RLE-style cmap, zero any extra entries */ - cmapsize = cinfo->out_color_components * CMAPLENGTH * SIZEOF(rle_map); - dest->colormap = (rle_map *) (*cinfo->mem->alloc_small) - ((j_common_ptr) cinfo, JPOOL_IMAGE, cmapsize); - MEMZERO(dest->colormap, cmapsize); - - /* Save away data in RLE format --- note 8-bit left shift! */ - /* Shifting would need adjustment for JSAMPLEs wider than 8 bits. */ - for (ci = 0; ci < cinfo->out_color_components; ci++) { - for (i = 0; i < cinfo->actual_number_of_colors; i++) { - dest->colormap[ci * CMAPLENGTH + i] = - GETJSAMPLE(cinfo->colormap[ci][i]) << 8; - } - } - } - - /* Set the output buffer to the first row */ - dest->pub.buffer = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, dest->image, (JDIMENSION) 0, (JDIMENSION) 1, TRUE); - dest->pub.buffer_height = 1; - - dest->pub.put_pixel_rows = rle_put_pixel_rows; - -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->total_extra_passes++; /* count file writing as separate pass */ - } -#endif -} - - -/* - * Write some pixel data. - * - * This routine just saves the data away in a virtual array. - */ - -METHODDEF(void) -rle_put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -{ - rle_dest_ptr dest = (rle_dest_ptr) dinfo; - - if (cinfo->output_scanline < cinfo->output_height) { - dest->pub.buffer = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, dest->image, - cinfo->output_scanline, (JDIMENSION) 1, TRUE); - } -} - -/* - * Finish up at the end of the file. - * - * Here is where we really output the RLE file. - */ - -METHODDEF(void) -finish_output_rle (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - rle_dest_ptr dest = (rle_dest_ptr) dinfo; - rle_hdr header; /* Output file information */ - rle_pixel **rle_row, *red, *green, *blue; - JSAMPROW output_row; - char cmapcomment[80]; - int row, col; - int ci; -#ifdef PROGRESS_REPORT - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; -#endif - - /* Initialize the header info */ - header = *rle_hdr_init(NULL); - header.rle_file = dest->pub.output_file; - header.xmin = 0; - header.xmax = cinfo->output_width - 1; - header.ymin = 0; - header.ymax = cinfo->output_height - 1; - header.alpha = 0; - header.ncolors = cinfo->output_components; - for (ci = 0; ci < cinfo->output_components; ci++) { - RLE_SET_BIT(header, ci); - } - if (cinfo->quantize_colors) { - header.ncmap = cinfo->out_color_components; - header.cmaplen = CMAPBITS; - header.cmap = dest->colormap; - /* Add a comment to the output image with the true colormap length. */ - sprintf(cmapcomment, "color_map_length=%d", cinfo->actual_number_of_colors); - rle_putcom(cmapcomment, &header); - } - - /* Emit the RLE header and color map (if any) */ - rle_put_setup(&header); - - /* Now output the RLE data from our virtual array. - * We assume here that (a) rle_pixel is represented the same as JSAMPLE, - * and (b) we are not on a machine where FAR pointers differ from regular. - */ - -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->pub.pass_limit = cinfo->output_height; - progress->pub.pass_counter = 0; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } -#endif - - if (cinfo->output_components == 1) { - for (row = cinfo->output_height-1; row >= 0; row--) { - rle_row = (rle_pixel **) (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, dest->image, - (JDIMENSION) row, (JDIMENSION) 1, FALSE); - rle_putrow(rle_row, (int) cinfo->output_width, &header); -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->pub.pass_counter++; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } -#endif - } - } else { - for (row = cinfo->output_height-1; row >= 0; row--) { - rle_row = (rle_pixel **) dest->rle_row; - output_row = * (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, dest->image, - (JDIMENSION) row, (JDIMENSION) 1, FALSE); - red = rle_row[0]; - green = rle_row[1]; - blue = rle_row[2]; - for (col = cinfo->output_width; col > 0; col--) { - *red++ = GETJSAMPLE(*output_row++); - *green++ = GETJSAMPLE(*output_row++); - *blue++ = GETJSAMPLE(*output_row++); - } - rle_putrow(rle_row, (int) cinfo->output_width, &header); -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->pub.pass_counter++; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } -#endif - } - } - -#ifdef PROGRESS_REPORT - if (progress != NULL) - progress->completed_extra_passes++; -#endif - - /* Emit file trailer */ - rle_puteof(&header); - fflush(dest->pub.output_file); - if (ferror(dest->pub.output_file)) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * The module selection routine for RLE format output. - */ - -GLOBAL(djpeg_dest_ptr) -jinit_write_rle (j_decompress_ptr cinfo) -{ - rle_dest_ptr dest; - - /* Create module interface object, fill in method pointers */ - dest = (rle_dest_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(rle_dest_struct)); - dest->pub.start_output = start_output_rle; - dest->pub.finish_output = finish_output_rle; - - /* Calculate output image dimensions so we can allocate space */ - jpeg_calc_output_dimensions(cinfo); - - /* Allocate a work array for output to the RLE library. */ - dest->rle_row = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - cinfo->output_width, (JDIMENSION) cinfo->output_components); - - /* Allocate a virtual array to hold the image. */ - dest->image = (*cinfo->mem->request_virt_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, - (JDIMENSION) (cinfo->output_width * cinfo->output_components), - cinfo->output_height, (JDIMENSION) 1); - - return (djpeg_dest_ptr) dest; -} - -#endif /* RLE_SUPPORTED */ diff --git a/Build/source/libs/jpeg/wrtarga.c b/Build/source/libs/jpeg/wrtarga.c deleted file mode 100644 index cf104d2debd..00000000000 --- a/Build/source/libs/jpeg/wrtarga.c +++ /dev/null @@ -1,253 +0,0 @@ -/* - * wrtarga.c - * - * Copyright (C) 1991-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to write output images in Targa format. - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume output to - * an ordinary stdio stream. - * - * Based on code contributed by Lee Daniel Crocker. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef TARGA_SUPPORTED - - -/* - * To support 12-bit JPEG data, we'd have to scale output down to 8 bits. - * This is not yet implemented. - */ - -#if BITS_IN_JSAMPLE != 8 - Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ -#endif - -/* - * The output buffer needs to be writable by fwrite(). On PCs, we must - * allocate the buffer in near data space, because we are assuming small-data - * memory model, wherein fwrite() can't reach far memory. If you need to - * process very wide images on a PC, you might have to compile in large-memory - * model, or else replace fwrite() with a putc() loop --- which will be much - * slower. - */ - - -/* Private version of data destination object */ - -typedef struct { - struct djpeg_dest_struct pub; /* public fields */ - - char *iobuffer; /* physical I/O buffer */ - JDIMENSION buffer_width; /* width of one row */ -} tga_dest_struct; - -typedef tga_dest_struct * tga_dest_ptr; - - -LOCAL(void) -write_header (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, int num_colors) -/* Create and write a Targa header */ -{ - char targaheader[18]; - - /* Set unused fields of header to 0 */ - MEMZERO(targaheader, SIZEOF(targaheader)); - - if (num_colors > 0) { - targaheader[1] = 1; /* color map type 1 */ - targaheader[5] = (char) (num_colors & 0xFF); - targaheader[6] = (char) (num_colors >> 8); - targaheader[7] = 24; /* 24 bits per cmap entry */ - } - - targaheader[12] = (char) (cinfo->output_width & 0xFF); - targaheader[13] = (char) (cinfo->output_width >> 8); - targaheader[14] = (char) (cinfo->output_height & 0xFF); - targaheader[15] = (char) (cinfo->output_height >> 8); - targaheader[17] = 0x20; /* Top-down, non-interlaced */ - - if (cinfo->out_color_space == JCS_GRAYSCALE) { - targaheader[2] = 3; /* image type = uncompressed gray-scale */ - targaheader[16] = 8; /* bits per pixel */ - } else { /* must be RGB */ - if (num_colors > 0) { - targaheader[2] = 1; /* image type = colormapped RGB */ - targaheader[16] = 8; - } else { - targaheader[2] = 2; /* image type = uncompressed RGB */ - targaheader[16] = 24; - } - } - - if (JFWRITE(dinfo->output_file, targaheader, 18) != (size_t) 18) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * Write some pixel data. - * In this module rows_supplied will always be 1. - */ - -METHODDEF(void) -put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -/* used for unquantized full-color output */ -{ - tga_dest_ptr dest = (tga_dest_ptr) dinfo; - register JSAMPROW inptr; - register char * outptr; - register JDIMENSION col; - - inptr = dest->pub.buffer[0]; - outptr = dest->iobuffer; - for (col = cinfo->output_width; col > 0; col--) { - outptr[0] = (char) GETJSAMPLE(inptr[2]); /* RGB to BGR order */ - outptr[1] = (char) GETJSAMPLE(inptr[1]); - outptr[2] = (char) GETJSAMPLE(inptr[0]); - inptr += 3, outptr += 3; - } - (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); -} - -METHODDEF(void) -put_gray_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -/* used for grayscale OR quantized color output */ -{ - tga_dest_ptr dest = (tga_dest_ptr) dinfo; - register JSAMPROW inptr; - register char * outptr; - register JDIMENSION col; - - inptr = dest->pub.buffer[0]; - outptr = dest->iobuffer; - for (col = cinfo->output_width; col > 0; col--) { - *outptr++ = (char) GETJSAMPLE(*inptr++); - } - (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); -} - - -/* - * Write some demapped pixel data when color quantization is in effect. - * For Targa, this is only applied to grayscale data. - */ - -METHODDEF(void) -put_demapped_gray (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -{ - tga_dest_ptr dest = (tga_dest_ptr) dinfo; - register JSAMPROW inptr; - register char * outptr; - register JSAMPROW color_map0 = cinfo->colormap[0]; - register JDIMENSION col; - - inptr = dest->pub.buffer[0]; - outptr = dest->iobuffer; - for (col = cinfo->output_width; col > 0; col--) { - *outptr++ = (char) GETJSAMPLE(color_map0[GETJSAMPLE(*inptr++)]); - } - (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); -} - - -/* - * Startup: write the file header. - */ - -METHODDEF(void) -start_output_tga (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - tga_dest_ptr dest = (tga_dest_ptr) dinfo; - int num_colors, i; - FILE *outfile; - - if (cinfo->out_color_space == JCS_GRAYSCALE) { - /* Targa doesn't have a mapped grayscale format, so we will */ - /* demap quantized gray output. Never emit a colormap. */ - write_header(cinfo, dinfo, 0); - if (cinfo->quantize_colors) - dest->pub.put_pixel_rows = put_demapped_gray; - else - dest->pub.put_pixel_rows = put_gray_rows; - } else if (cinfo->out_color_space == JCS_RGB) { - if (cinfo->quantize_colors) { - /* We only support 8-bit colormap indexes, so only 256 colors */ - num_colors = cinfo->actual_number_of_colors; - if (num_colors > 256) - ERREXIT1(cinfo, JERR_TOO_MANY_COLORS, num_colors); - write_header(cinfo, dinfo, num_colors); - /* Write the colormap. Note Targa uses BGR byte order */ - outfile = dest->pub.output_file; - for (i = 0; i < num_colors; i++) { - putc(GETJSAMPLE(cinfo->colormap[2][i]), outfile); - putc(GETJSAMPLE(cinfo->colormap[1][i]), outfile); - putc(GETJSAMPLE(cinfo->colormap[0][i]), outfile); - } - dest->pub.put_pixel_rows = put_gray_rows; - } else { - write_header(cinfo, dinfo, 0); - dest->pub.put_pixel_rows = put_pixel_rows; - } - } else { - ERREXIT(cinfo, JERR_TGA_COLORSPACE); - } -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF(void) -finish_output_tga (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - /* Make sure we wrote the output file OK */ - fflush(dinfo->output_file); - if (ferror(dinfo->output_file)) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * The module selection routine for Targa format output. - */ - -GLOBAL(djpeg_dest_ptr) -jinit_write_targa (j_decompress_ptr cinfo) -{ - tga_dest_ptr dest; - - /* Create module interface object, fill in method pointers */ - dest = (tga_dest_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(tga_dest_struct)); - dest->pub.start_output = start_output_tga; - dest->pub.finish_output = finish_output_tga; - - /* Calculate output image dimensions so we can allocate space */ - jpeg_calc_output_dimensions(cinfo); - - /* Create I/O buffer. Note we make this near on a PC. */ - dest->buffer_width = cinfo->output_width * cinfo->output_components; - dest->iobuffer = (char *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) (dest->buffer_width * SIZEOF(char))); - - /* Create decompressor output buffer. */ - dest->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, dest->buffer_width, (JDIMENSION) 1); - dest->pub.buffer_height = 1; - - return (djpeg_dest_ptr) dest; -} - -#endif /* TARGA_SUPPORTED */ diff --git a/Build/source/libs/unzip/api.c b/Build/source/libs/unzip/api.c deleted file mode 100644 index 5a4e73abf8b..00000000000 --- a/Build/source/libs/unzip/api.c +++ /dev/null @@ -1,601 +0,0 @@ -/*--------------------------------------------------------------------------- - - api.c - - This module supplies an UnZip engine for use directly from C/C++ - programs. The functions are: - - UzpVer *UzpVersion(void); - void UzpVersion2(UzpVer2 *version) - int UzpMain(int argc, char *argv[]); - int UzpAltMain(int argc, char *argv[], UzpInit *init); - int UzpValidate(char *archive, int AllCodes); - void UzpFreeMemBuffer(UzpBuffer *retstr); - int UzpUnzipToMemory(char *zip, char *file, UzpOpts *optflgs, - UzpCB *UsrFuncts, UzpBuffer *retstr); - - non-WINDLL only (a special WINDLL variant is defined in windll/windll.c): - int UzpGrep(char *archive, char *file, char *pattern, int cmd, int SkipBin, - UzpCB *UsrFuncts); - - OS/2 only (for now): - int UzpFileTree(char *name, cbList(callBack), char *cpInclude[], - char *cpExclude[]); - - You must define `DLL' in order to include the API extensions. - - ---------------------------------------------------------------------------*/ - - -#ifdef OS2 -# define INCL_DOSMEMMGR -# include -#endif -#include - -#define UNZIP_INTERNAL -#include "unzip.h" -#include "version.h" -#ifdef WINDLL -# include "windll/windll.h" -#endif - -#ifdef DLL /* This source file supplies DLL-only interface code. */ - -jmp_buf dll_error_return; - -/*--------------------------------------------------------------------------- - Documented API entry points - ---------------------------------------------------------------------------*/ - - -UzpVer * UZ_EXP UzpVersion() /* should be pointer to const struct */ -{ - static UzpVer version; /* doesn't change between calls */ - - - version.structlen = UZPVER_LEN; - -#ifdef BETA - version.flag = 1; -#else - version.flag = 0; -#endif - version.betalevel = BETALEVEL; - version.date = VERSION_DATE; - -#ifdef ZLIB_VERSION - version.zlib_version = ZLIB_VERSION; - version.flag |= 2; -#else - version.zlib_version = NULL; -#endif - - /* someday each of these may have a separate patchlevel: */ - version.unzip.major = UZ_MAJORVER; - version.unzip.minor = UZ_MINORVER; - version.unzip.patchlevel = PATCHLEVEL; - - version.zipinfo.major = ZI_MAJORVER; - version.zipinfo.minor = ZI_MINORVER; - version.zipinfo.patchlevel = PATCHLEVEL; - - /* these are retained for backward compatibility only: */ - version.os2dll.major = UZ_MAJORVER; - version.os2dll.minor = UZ_MINORVER; - version.os2dll.patchlevel = PATCHLEVEL; - - version.windll.major = UZ_MAJORVER; - version.windll.minor = UZ_MINORVER; - version.windll.patchlevel = PATCHLEVEL; - - return &version; -} - -void UZ_EXP UzpVersion2(UzpVer2 *version) -{ - - version->structlen = UZPVER_LEN; - -#ifdef BETA - version->flag = 1; -#else - version->flag = 0; -#endif - strcpy(version->betalevel, BETALEVEL); - strcpy(version->date, VERSION_DATE); - -#ifdef ZLIB_VERSION - strcpy(version->zlib_version, ZLIB_VERSION); - version->flag |= 2; -#else - version->zlib_version[0] = '\0'; -#endif - - /* someday each of these may have a separate patchlevel: */ - version->unzip.major = UZ_MAJORVER; - version->unzip.minor = UZ_MINORVER; - version->unzip.patchlevel = PATCHLEVEL; - - version->zipinfo.major = ZI_MAJORVER; - version->zipinfo.minor = ZI_MINORVER; - version->zipinfo.patchlevel = PATCHLEVEL; - - /* these are retained for backward compatibility only: */ - version->os2dll.major = UZ_MAJORVER; - version->os2dll.minor = UZ_MINORVER; - version->os2dll.patchlevel = PATCHLEVEL; - - version->windll.major = UZ_MAJORVER; - version->windll.minor = UZ_MINORVER; - version->windll.patchlevel = PATCHLEVEL; -} - - - - - -#ifndef WINDLL - -int UZ_EXP UzpAltMain(int argc, char *argv[], UzpInit *init) -{ - int r, (*dummyfn)(); - - - CONSTRUCTGLOBALS(); - - if (init->structlen >= (sizeof(ulg) + sizeof(dummyfn)) && init->msgfn) - G.message = init->msgfn; - - if (init->structlen >= (sizeof(ulg) + 2*sizeof(dummyfn)) && init->inputfn) - G.input = init->inputfn; - - if (init->structlen >= (sizeof(ulg) + 3*sizeof(dummyfn)) && init->pausefn) - G.mpause = init->pausefn; - - if (init->structlen >= (sizeof(ulg) + 4*sizeof(dummyfn)) && init->userfn) - (*init->userfn)(); /* allow void* arg? */ - - r = unzip(__G__ argc, argv); - DESTROYGLOBALS() - RETURN(r); -} - -#endif /* !WINDLL */ - - - - -#ifndef __16BIT__ - -void UZ_EXP UzpFreeMemBuffer(UzpBuffer *retstr) -{ - if (retstr->strptr != NULL) { - free(retstr->strptr); - retstr->strptr = NULL; - } -} - - - - -#ifndef WINDLL - -static int UzpDLL_Init OF((zvoid *pG, UzpCB *UsrFuncts)); - -static int UzpDLL_Init(pG, UsrFuncts) -zvoid *pG; -UzpCB *UsrFuncts; -{ - int (*dummyfn)(); - - if (UsrFuncts->structlen >= (sizeof(ulg) + sizeof(dummyfn)) && - UsrFuncts->msgfn) - ((Uz_Globs *)pG)->message = UsrFuncts->msgfn; - else - return FALSE; - - if (UsrFuncts->structlen >= (sizeof(ulg) + 2*sizeof(dummyfn)) && - UsrFuncts->inputfn) - ((Uz_Globs *)pG)->input = UsrFuncts->inputfn; - - if (UsrFuncts->structlen >= (sizeof(ulg) + 3*sizeof(dummyfn)) && - UsrFuncts->pausefn) - ((Uz_Globs *)pG)->mpause = UsrFuncts->pausefn; - - if (UsrFuncts->structlen >= (sizeof(ulg) + 4*sizeof(dummyfn)) && - UsrFuncts->passwdfn) - ((Uz_Globs *)pG)->decr_passwd = UsrFuncts->passwdfn; - - if (UsrFuncts->structlen >= (sizeof(ulg) + 5*sizeof(dummyfn)) && - UsrFuncts->statrepfn) - ((Uz_Globs *)pG)->statreportcb = UsrFuncts->statrepfn; - - return TRUE; -} - - -int UZ_EXP UzpUnzipToMemory(char *zip, char *file, UzpOpts *optflgs, - UzpCB *UsrFuncts, UzpBuffer *retstr) -{ - int r; -#if (defined(WINDLL) && !defined(CRTL_CP_IS_ISO)) - char *intern_zip, *intern_file; -#endif - - CONSTRUCTGLOBALS(); -#if (defined(WINDLL) && !defined(CRTL_CP_IS_ISO)) - intern_zip = (char *)malloc(strlen(zip)+1); - if (intern_zip == NULL) { - DESTROYGLOBALS() - return PK_MEM; - } - intern_file = (char *)malloc(strlen(file)+1); - if (intern_file == NULL) { - DESTROYGLOBALS() - free(intern_zip); - return PK_MEM; - } - ISO_TO_INTERN(zip, intern_zip); - ISO_TO_INTERN(file, intern_file); -# define zip intern_zip -# define file intern_file -#endif - /* Copy those options that are meaningful for UzpUnzipToMemory, instead of - * a simple "memcpy(G.UzO, optflgs, sizeof(UzpOpts));" - */ - uO.pwdarg = optflgs->pwdarg; - uO.aflag = optflgs->aflag; - uO.C_flag = optflgs->C_flag; - uO.qflag = optflgs->qflag; /* currently, overridden in unzipToMemory */ - - if (!UzpDLL_Init((zvoid *)&G, UsrFuncts)) { - DESTROYGLOBALS(); - return PK_BADERR; - } - G.redirect_data = 1; - - r = (unzipToMemory(__G__ zip, file, retstr) <= PK_WARN); - - DESTROYGLOBALS() -#if (defined(WINDLL) && !defined(CRTL_CP_IS_ISO)) -# undef file -# undef zip - free(intern_file); - free(intern_zip); -#endif - if (!r && retstr->strlength) { - free(retstr->strptr); - retstr->strptr = NULL; - } - return r; -} -#endif /* !WINDLL */ -#endif /* !__16BIT__ */ - - - - - -#ifdef OS2DLL - -int UZ_EXP UzpFileTree(char *name, cbList(callBack), char *cpInclude[], - char *cpExclude[]) -{ - int r; - - CONSTRUCTGLOBALS(); - uO.qflag = 2; - uO.vflag = 1; - uO.C_flag = 1; - G.wildzipfn = name; - G.process_all_files = TRUE; - if (cpInclude) { - char **ptr = cpInclude; - - while (*ptr != NULL) ptr++; - G.filespecs = ptr - cpInclude; - G.pfnames = cpInclude, G.process_all_files = FALSE; - } - if (cpExclude) { - char **ptr = cpExclude; - - while (*ptr != NULL) ptr++; - G.xfilespecs = ptr - cpExclude; - G.pxnames = cpExclude, G.process_all_files = FALSE; - } - - G.processExternally = callBack; - r = process_zipfiles(__G)==0; - DESTROYGLOBALS() - return r; -} - -#endif /* OS2DLL */ - - - - -/*--------------------------------------------------------------------------- - Helper functions - ---------------------------------------------------------------------------*/ - - -void setFileNotFound(__G) - __GDEF -{ - G.filenotfound++; -} - - - -int unzipToMemory(__GPRO__ char *zip, char *file, UzpBuffer *retstr) -{ - int r; - char *incname[2]; - - G.process_all_files = FALSE; - G.extract_flag = TRUE; - uO.qflag = 2; - G.wildzipfn = zip; - - G.pfnames = incname; - incname[0] = file; - incname[1] = NULL; - G.filespecs = 1; - - r = process_zipfiles(__G); - if (retstr) { - retstr->strptr = (char *)G.redirect_buffer; - retstr->strlength = G.redirect_size; - } - return r; /* returns `PK_???' error values */ -} - - - -int redirect_outfile(__G) - __GDEF -{ - if (G.redirect_size != 0 || G.redirect_buffer != NULL) - return FALSE; - -#ifndef NO_SLIDE_REDIR - G.redirect_slide = !G.pInfo->textmode; -#endif - G.redirect_size = (G.pInfo->textmode ? - G.lrec.ucsize * lenEOL : G.lrec.ucsize); -#ifdef OS2 - DosAllocMem((void **)&G.redirect_buffer, G.redirect_size+1, - PAG_READ|PAG_WRITE|PAG_COMMIT); - G.redirect_pointer = G.redirect_buffer; -#else -#ifdef __16BIT__ - if ((ulg)((extent)G.redirect_size) != G.redirect_size) - return FALSE; -#endif - G.redirect_pointer = G.redirect_buffer = malloc(G.redirect_size+1); -#endif - if (!G.redirect_buffer) - return FALSE; - G.redirect_pointer[G.redirect_size] = '\0'; - return TRUE; -} - - - -int writeToMemory(__GPRO__ uch *rawbuf, ulg size) -{ - if (rawbuf != G.redirect_pointer) - memcpy(G.redirect_pointer,rawbuf,size); - G.redirect_pointer += size; - return 0; -} - - - - -int close_redirect(__G) - __GDEF -{ - if (G.pInfo->textmode) { - *G.redirect_pointer = '\0'; - G.redirect_size = G.redirect_pointer - G.redirect_buffer; - if ((G.redirect_buffer = - realloc(G.redirect_buffer, G.redirect_size + 1)) == NULL) { - G.redirect_size = 0; - return EOF; - } - } - return 0; -} - - - - -#ifndef __16BIT__ -#ifndef WINDLL - -/* Purpose: Determine if file in archive contains the string szSearch - - Parameters: archive = archive name - file = file contained in the archive. This cannot be - a wild card to be meaningful - pattern = string to search for - cmd = 0 - case-insensitive search - 1 - case-sensitve search - 2 - case-insensitive, whole words only - 3 - case-sensitive, whole words only - SkipBin = if true, skip any files that have control - characters other than CR, LF, or tab in the first - 100 characters. - - Returns: TRUE if a match is found - FALSE if no match is found - -1 on error - - Comments: This does not pretend to be as useful as the standard - Unix grep, which returns the strings associated with a - particular pattern, nor does it search past the first - matching occurrence of the pattern. - */ - -int UZ_EXP UzpGrep(char *archive, char *file, char *pattern, int cmd, - int SkipBin, UzpCB *UsrFuncts) -{ - int retcode = FALSE, compare; - ulg i, j, patternLen, buflen; - char * sz, *p; - UzpOpts flgopts; - UzpBuffer retstr; - - memzero(&flgopts, sizeof(UzpOpts)); /* no special options */ - - if (!UzpUnzipToMemory(archive, file, &flgopts, UsrFuncts, &retstr)) { - return -1; /* not enough memory, file not found, or other error */ - } - - if (SkipBin) { - if (retstr.strlength < 100) - buflen = retstr.strlength; - else - buflen = 100; - for (i = 0; i < buflen; i++) { - if (iscntrl(retstr.strptr[i])) { - if ((retstr.strptr[i] != 0x0A) && - (retstr.strptr[i] != 0x0D) && - (retstr.strptr[i] != 0x09)) - { - /* OK, we now think we have a binary file of some sort */ - free(retstr.strptr); - return FALSE; - } - } - } - } - - patternLen = strlen(pattern); - - if (retstr.strlength < patternLen) { - free(retstr.strptr); - return FALSE; - } - - sz = malloc(patternLen + 3); /* add two in case doing whole words only */ - if (cmd > 1) { - strcpy(sz, " "); - strcat(sz, pattern); - strcat(sz, " "); - } else - strcpy(sz, pattern); - - if ((cmd == 0) || (cmd == 2)) { - for (i = 0; i < strlen(sz); i++) - sz[i] = toupper(sz[i]); - for (i = 0; i < retstr.strlength; i++) - retstr.strptr[i] = toupper(retstr.strptr[i]); - } - - for (i = 0; i < (retstr.strlength - patternLen); i++) { - p = &retstr.strptr[i]; - compare = TRUE; - for (j = 0; j < patternLen; j++) { - /* We cannot do strncmp here, as we may be dealing with a - * "binary" file, such as a word processing file, or perhaps - * even a true executable of some sort. */ - if (p[j] != sz[j]) { - compare = FALSE; - break; - } - } - if (compare == TRUE) { - retcode = TRUE; - break; - } - } - - free(sz); - free(retstr.strptr); - - return retcode; -} -#endif /* !WINDLL */ -#endif /* !__16BIT__ */ - - - - -int UZ_EXP UzpValidate(char *archive, int AllCodes) -{ - int retcode; - CONSTRUCTGLOBALS(); - - uO.jflag = 1; - uO.tflag = 1; - uO.overwrite_none = 0; - G.extract_flag = (!uO.zipinfo_mode && - !uO.cflag && !uO.tflag && !uO.vflag && !uO.zflag -#ifdef TIMESTAMP - && !uO.T_flag -#endif - ); - - uO.qflag = 2; /* turn off all messages */ - G.fValidate = TRUE; - G.pfnames = (char **)&fnames[0]; /* assign default filename vector */ -#ifdef WINDLL - Wiz_NoPrinting(TRUE); -#endif - - if (archive == NULL) { /* something is screwed up: no filename */ - DESTROYGLOBALS(); - return PK_NOZIP; - } - - G.wildzipfn = (char *)malloc(FILNAMSIZ + 1); - strcpy(G.wildzipfn, archive); -#if (defined(WINDLL) && !defined(CRTL_CP_IS_ISO)) - _ISO_INTERN(G.wildzipfn); -#endif - - G.process_all_files = TRUE; /* for speed */ - - retcode = setjmp(dll_error_return); - - if (retcode) { -#ifdef WINDLL - Wiz_NoPrinting(FALSE); -#endif - free(G.wildzipfn); - DESTROYGLOBALS(); - return PK_BADERR; - } - - retcode = process_zipfiles(__G); - - free(G.wildzipfn); -#ifdef WINDLL - Wiz_NoPrinting(FALSE); -#endif - DESTROYGLOBALS(); - - /* PK_WARN == 1 and PK_FIND == 11. When we are just looking at an - archive, we should still be able to see the files inside it, - even if we can't decode them for some reason. - - We also still want to be able to get at files even if there is - something odd about the zip archive, hence allow PK_WARN, - PK_FIND, IZ_UNSUP as well as PK_ERR - */ - - if (AllCodes) - return retcode; - - if ((retcode == PK_OK) || (retcode == PK_WARN) || (retcode == PK_ERR) || - (retcode == IZ_UNSUP) || (retcode == PK_FIND)) - return TRUE; - else - return FALSE; -} - -#endif /* DLL */ diff --git a/Build/source/libs/unzip/consts.h b/Build/source/libs/unzip/consts.h deleted file mode 100644 index f418a6c8fe1..00000000000 --- a/Build/source/libs/unzip/consts.h +++ /dev/null @@ -1,46 +0,0 @@ -/*--------------------------------------------------------------------------- - - consts.h - - This file contains global, initialized variables that never change. It is - included by unzip.c and windll/windll.c. - - ---------------------------------------------------------------------------*/ - - -/* And'ing with mask_bits[n] masks the lower n bits */ -ZCONST ush near mask_bits[] = { - 0x0000, - 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, - 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff -}; - -ZCONST char Far VersionDate[] = VERSION_DATE; /* now defined in version.h */ - -#ifndef SFX - ZCONST char Far EndSigMsg[] = - "\nnote: didn't find end-of-central-dir signature at end of central dir.\n"; -#endif - -ZCONST char Far CentSigMsg[] = - "error: expected central file header signature not found (file #%u).\n"; -ZCONST char Far SeekMsg[] = - "error [%s]: attempt to seek before beginning of zipfile\n%s"; -ZCONST char Far FilenameNotMatched[] = "caution: filename not matched: %s\n"; -ZCONST char Far ExclFilenameNotMatched[] = - "caution: excluded filename not matched: %s\n"; - -#ifdef VMS - ZCONST char Far ReportMsg[] = "\ - (please check that you have transferred or created the zipfile in the\n\ - appropriate BINARY mode--this includes ftp, Kermit, AND unzip'd zipfiles)\n"; -#else - ZCONST char Far ReportMsg[] = "\ - (please check that you have transferred or created the zipfile in the\n\ - appropriate BINARY mode and that you have compiled UnZip properly)\n"; -#endif - -#ifndef SFX - ZCONST char Far Zipnfo[] = "zipinfo"; - ZCONST char Far CompiledWith[] = "Compiled with %s%s for %s%s%s%s.\n\n"; -#endif diff --git a/Build/source/libs/unzip/crc32.c b/Build/source/libs/unzip/crc32.c deleted file mode 100644 index ff2daa0c088..00000000000 --- a/Build/source/libs/unzip/crc32.c +++ /dev/null @@ -1,56 +0,0 @@ -/* crc32.c -- compute the CRC-32 of a data stream - * Copyright (C) 1995 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* $Id: crc32.c,v 1.1 1999/02/01 04:22:50 mik Exp $ */ - -#define __CRC32_C /* identifies this source module */ - -#include "zip.h" - -#ifndef USE_ZLIB -#ifndef ASM_CRC - -#ifndef ZCONST -# define ZCONST const -#endif - -#ifdef CRC32 -# undef CRC32 -#endif -#define CRC32(c, b) (crc_table[((int)(c) ^ (b)) & 0xff] ^ ((c) >> 8)) -#define DO1(buf) crc = CRC32(crc, *buf++) -#define DO2(buf) DO1(buf); DO1(buf) -#define DO4(buf) DO2(buf); DO2(buf) -#define DO8(buf) DO4(buf); DO4(buf) - -/* ========================================================================= */ -ulg crc32(crc, buf, len) - register ulg crc; /* crc shift register */ - register ZCONST uch *buf; /* pointer to bytes to pump through */ - extent len; /* number of bytes in buf[] */ -/* Run a set of bytes through the crc shift register. If buf is a NULL - pointer, then initialize the crc shift register contents instead. - Return the current crc in either case. */ -{ - register ZCONST ulg near *crc_table; - - if (buf == NULL) return 0L; - - crc_table = get_crc_table(); - - crc = crc ^ 0xffffffffL; -#ifndef NO_UNROLLED_LOOPS - while (len >= 8) { - DO8(buf); - len -= 8; - } -#endif - if (len) do { - DO1(buf); - } while (--len); - return crc ^ 0xffffffffL; /* (instead of ~c for 64-bit machines) */ -} -#endif /* !ASM_CRC */ -#endif /* !USE_ZLIB */ diff --git a/Build/source/libs/unzip/crctab.c b/Build/source/libs/unzip/crctab.c deleted file mode 100644 index 4eb6461c23b..00000000000 --- a/Build/source/libs/unzip/crctab.c +++ /dev/null @@ -1,219 +0,0 @@ -/* crctab.c -- supply the CRC table needed for CRC-32 calculations. - * Copyright (C) 1995 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* $Id: crctab.c,v 1.1 1999/02/01 04:22:50 mik Exp $ */ - -/* - Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: - x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. - - Polynomials over GF(2) are represented in binary, one bit per coefficient, - with the lowest powers in the most significant bit. Then adding polynomials - is just exclusive-or, and multiplying a polynomial by x is a right shift by - one. If we call the above polynomial p, and represent a byte as the - polynomial q, also with the lowest power in the most significant bit (so the - byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, - where a mod b means the remainder after dividing a by b. - - This calculation is done using the shift-register method of multiplying and - taking the remainder. The register is initialized to zero, and for each - incoming bit, x^32 is added mod p to the register if the bit is a one (where - x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by - x (which is shifting right by one and adding x^32 mod p if the bit shifted - out is a one). We start with the highest power (least significant bit) of - q and repeat for all eight bits of q. - - The table is simply the CRC of all possible eight bit values. This is all - the information needed to generate CRC's on data a byte at a time for all - combinations of CRC register values and incoming bytes. -*/ - -#define __CRCTAB_C /* identifies this source module */ - -#include "zip.h" - -#if (!defined(USE_ZLIB) || defined(USE_OWN_CRCTAB)) - -#ifndef ZCONST -# define ZCONST const -#endif - -#ifdef DYNAMIC_CRC_TABLE - -/* ========================================================================= - * Make the crc table. This function is needed only if you want to compute - * the table dynamically. - */ - -local void make_crc_table OF((void)); - -#if (defined(DYNALLOC_CRCTAB) && defined(REENTRANT)) - error: Dynamic allocation of CRC table not safe with reentrant code. -#endif /* DYNALLOC_CRCTAB && REENTRANT */ - -#ifdef DYNALLOC_CRCTAB - local ulg near *crc_table = NULL; -# if 0 /* not used, since sizeof("near *") <= sizeof(int) */ - /* Use this section when access to a "local int" is faster than access to - a "local pointer" (e.g.: i86 16bit code with far pointers). */ - local int crc_table_empty = 1; -# define CRC_TABLE_IS_EMPTY (crc_table_empty != 0) -# define MARK_CRCTAB_FILLED crc_table_empty = 0 -# define MARK_CRCTAB_EMPTY crc_table_empty = 1 -# else - /* Use this section on systems where the size of pointers and ints is - equal (e.g.: all 32bit systems). */ -# define CRC_TABLE_IS_EMPTY (crc_table == NULL) -# define MARK_CRCTAB_FILLED crc_table = crctab_p -# define MARK_CRCTAB_EMPTY crc_table = NULL -# endif -#else /* !DYNALLOC_CRCTAB */ - local ulg near crc_table[256]; - local int crc_table_empty = 1; -# define CRC_TABLE_IS_EMPTY (crc_table_empty != 0) -# define MARK_CRCTAB_FILLED crc_table_empty = 0 -#endif /* ?DYNALLOC_CRCTAB */ - - -local void make_crc_table() -{ - ulg c; /* crc shift register */ - int n; /* counter for all possible eight bit values */ - int k; /* byte being shifted into crc apparatus */ -#ifdef DYNALLOC_CRCTAB - ulg near *crctab_p; /* temporary pointer to allocated crc_table area */ -#else /* !DYNALLOC_CRCTAB */ -# define crctab_p crc_table -#endif /* DYNALLOC_CRCTAB */ - -#ifdef COMPUTE_XOR_PATTERN - /* This piece of code has been left here to explain how the XOR pattern - * used in the creation of the crc_table values can be recomputed. - * For production versions of this function, it is more efficient to - * supply the resultant pattern at compile time. - */ - ulg xor; /* polynomial exclusive-or pattern */ - /* terms of polynomial defining this crc (except x^32): */ - static uch p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; - - /* make exclusive-or pattern from polynomial (0xedb88320L) */ - xor = 0L; - for (i = 0; i < sizeof(p)/sizeof(uch); i++) - xor |= 1L << (31 - p[i]); -#else -# define xor 0xedb88320L -#endif - -#ifdef DYNALLOC_CRCTAB - crctab_p = (ulg near *) nearmalloc (256*sizeof(ulg)); - if (crctab_p == NULL) { - ziperr(ZE_MEM, "crc_table allocation"); - } -#endif /* DYNALLOC_CRCTAB */ - - for (n = 0; n < 256; n++) { - c = (ulg)n; - for (k = 8; k; k--) - c = c & 1 ? xor ^ (c >> 1) : c >> 1; - crctab_p[n] = c; - } - MARK_CRCTAB_FILLED; -} - -#else /* !DYNAMIC_CRC_TABLE */ - -#ifdef DYNALLOC_CRCTAB - error: Inconsistent flags, DYNALLOC_CRCTAB without DYNAMIC_CRC_TABLE. -#endif - -/* ======================================================================== - * Table of CRC-32's of all single-byte values (made by make_crc_table) - */ -local ZCONST ulg near crc_table[256] = { - 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, - 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, - 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, - 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, - 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, - 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, - 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, - 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, - 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, - 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, - 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, - 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, - 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, - 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, - 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, - 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, - 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, - 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, - 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, - 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, - 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, - 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, - 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, - 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, - 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, - 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, - 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, - 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, - 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, - 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, - 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, - 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, - 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, - 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, - 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, - 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, - 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, - 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, - 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, - 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, - 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, - 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, - 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, - 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, - 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, - 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, - 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, - 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, - 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, - 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, - 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, - 0x2d02ef8dL -}; -#endif /* ?DYNAMIC_CRC_TABLE */ - -/* use "OF((void))" here to work around a Borland TC++ 1.0 problem */ -#ifdef USE_ZLIB -ZCONST uLongf *get_crc_table OF((void)) -#else -ZCONST ulg near *get_crc_table OF((void)) -#endif -{ -#ifdef DYNAMIC_CRC_TABLE - if (CRC_TABLE_IS_EMPTY) - make_crc_table(); -#endif -#ifdef USE_ZLIB - return (ZCONST uLongf *)crc_table; -#else - return (ZCONST ulg near *)crc_table; -#endif -} - -#ifdef DYNALLOC_CRCTAB -void free_crc_table() -{ - if (!CRC_TABLE_IS_EMPTY) - { - nearfree((ulg near *)crc_table); - MARK_CRCTAB_EMPTY; - } -} -#endif - -#endif /* !USE_ZLIB || USE_OWN_CRCTAB */ diff --git a/Build/source/libs/unzip/crypt.c b/Build/source/libs/unzip/crypt.c deleted file mode 100644 index 0dbe227f810..00000000000 --- a/Build/source/libs/unzip/crypt.c +++ /dev/null @@ -1,12 +0,0 @@ -/* - crypt.c (dummy version) by Info-ZIP. Last revised: 15 Aug 98 - - This is a non-functional version of Info-ZIP's crypt.c encryption/ - decryption code for Zip, ZipCloak, UnZip and fUnZip. This file is - not copyrighted and may be distributed freely. :-) See the "WHERE" - file for sites from which to obtain the full encryption/decryption - sources (zcrypt28.zip or later). - */ - -/* something "externally visible" to shut up compiler/linker warnings */ -int zcr_dummy; diff --git a/Build/source/libs/unzip/crypt.h b/Build/source/libs/unzip/crypt.h deleted file mode 100644 index d462f2d7ba5..00000000000 --- a/Build/source/libs/unzip/crypt.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - crypt.h (dummy version) by Info-ZIP. Last revised: 15 Aug 98 - - This is a non-functional version of Info-ZIP's crypt.h encryption/ - decryption header file for Zip, ZipCloak, UnZip and fUnZip. This - file is not copyrighted and may be distributed without restriction. - See the "WHERE" file for sites from which to obtain the full crypt - sources (zcrypt28.zip or later). - */ - -#ifndef __crypt_h /* don't include more than once */ -#define __crypt_h - -#ifdef CRYPT -# undef CRYPT -#endif -#define CRYPT 0 /* dummy version */ - -#define zencode -#define zdecode - -#define zfwrite fwrite - -#endif /* !__crypt_h */ diff --git a/Build/source/libs/unzip/ebcdic.h b/Build/source/libs/unzip/ebcdic.h deleted file mode 100644 index db2e976b7fa..00000000000 --- a/Build/source/libs/unzip/ebcdic.h +++ /dev/null @@ -1,272 +0,0 @@ -/*--------------------------------------------------------------------------- - - ebcdic.h - - The CECP 1047 (Extended de-facto EBCDIC) <-> ISO 8859-1 conversion tables, - from ftp://aix1.segi.ulg.ac.be/pub/docs/iso8859/iso8859.networking - - NOTES: - (OS/390 port 12/97) - These table no longer represent the standard mappings (for example in the - OS/390 iconv utility). In order to follow current standards I remapped - ebcdic x0a to ascii x15 and - ebcdic x85 to ascii x25 (and vice-versa) - Without these changes, newlines in auto-convert text files appeared - as literal \045. - I'm not sure what effect this remap would have on the MVS and CMS ports, so - I ifdef'd these changes. Hopefully these ifdef's can be removed when the - MVS/CMS folks test the new mappings. - - Christian Spieler , 27-Apr-1998 - The problem mentioned by Paul von Behren was already observed previously - on VM/CMS, during the preparation of the CMS&MVS port of UnZip 5.20 in - 1996. At that point, the ebcdic tables were not changed since they seemed - to be an adopted standard (to my knowledge, these tables are still used - as presented in mainfraime KERMIT). Instead, the "end-of-line" conversion - feature of Zip's and UnZip's "text-translation" mode was used to force - correct mappings between ASCII and EBCDIC newline markers. - Before interchanging the ASCII mappings of the EBCDIC control characters - "NL" 0x25 and "LF" 0x15 according to the OS/390 setting, we have to - make sure that EBCDIC 0x15 is never used as line termination. - - ---------------------------------------------------------------------------*/ - -#ifndef __ebcdic_h /* prevent multiple inclusions */ -#define __ebcdic_h - - -#ifndef ZCONST -# define ZCONST const -#endif - -#ifdef EBCDIC -#ifndef MTS /* MTS uses a slightly "special" EBCDIC code page */ - -ZCONST uch ebcdic[] = { - 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F, /* 00 - 07 */ -#ifdef OS390 - 0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ -#else - 0x16, 0x05, 0x25, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ -#endif - 0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26, /* 10 - 17 */ - 0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ - 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, /* 20 - 27 */ - 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61, /* 28 - 2F */ - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 30 - 37 */ - 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F, /* 38 - 3F */ - 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 40 - 47 */ - 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, /* 48 - 4F */ - 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, /* 50 - 57 */ - 0xE7, 0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D, /* 58 - 5F */ - 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60 - 67 */ - 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 68 - 6F */ - 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, /* 70 - 77 */ - 0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07, /* 78 - 7F */ -#ifdef OS390 - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x06, 0x17, /* 80 - 87 */ -#else - 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 80 - 87 */ -#endif - 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x09, 0x0A, 0x1B, /* 88 - 8F */ - 0x30, 0x31, 0x1A, 0x33, 0x34, 0x35, 0x36, 0x08, /* 90 - 97 */ - 0x38, 0x39, 0x3A, 0x3B, 0x04, 0x14, 0x3E, 0xFF, /* 98 - 9F */ - 0x41, 0xAA, 0x4A, 0xB1, 0x9F, 0xB2, 0x6A, 0xB5, /* A0 - A7 */ - 0xBB, 0xB4, 0x9A, 0x8A, 0xB0, 0xCA, 0xAF, 0xBC, /* A8 - AF */ - 0x90, 0x8F, 0xEA, 0xFA, 0xBE, 0xA0, 0xB6, 0xB3, /* B0 - B7 */ - 0x9D, 0xDA, 0x9B, 0x8B, 0xB7, 0xB8, 0xB9, 0xAB, /* B8 - BF */ - 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9E, 0x68, /* C0 - C7 */ - 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* C8 - CF */ - 0xAC, 0x69, 0xED, 0xEE, 0xEB, 0xEF, 0xEC, 0xBF, /* D0 - D7 */ - 0x80, 0xFD, 0xFE, 0xFB, 0xFC, 0xBA, 0xAE, 0x59, /* D8 - DF */ - 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9C, 0x48, /* E0 - E7 */ - 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* E8 - EF */ - 0x8C, 0x49, 0xCD, 0xCE, 0xCB, 0xCF, 0xCC, 0xE1, /* F0 - F7 */ - 0x70, 0xDD, 0xDE, 0xDB, 0xDC, 0x8D, 0x8E, 0xDF /* F8 - FF */ -}; - -#if (defined(ZIP) || CRYPT) -ZCONST uch ascii[] = { - 0x00, 0x01, 0x02, 0x03, 0x9C, 0x09, 0x86, 0x7F, /* 00 - 07 */ - 0x97, 0x8D, 0x8E, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ -#ifdef OS390 - 0x10, 0x11, 0x12, 0x13, 0x9D, 0x0A, 0x08, 0x87, /* 10 - 17 */ -#else - 0x10, 0x11, 0x12, 0x13, 0x9D, 0x85, 0x08, 0x87, /* 10 - 17 */ -#endif - 0x18, 0x19, 0x92, 0x8F, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ -#ifdef OS390 - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x17, 0x1B, /* 20 - 27 */ -#else - 0x80, 0x81, 0x82, 0x83, 0x84, 0x0A, 0x17, 0x1B, /* 20 - 27 */ -#endif - 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x05, 0x06, 0x07, /* 28 - 2F */ - 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30 - 37 */ - 0x98, 0x99, 0x9A, 0x9B, 0x14, 0x15, 0x9E, 0x1A, /* 38 - 3F */ - 0x20, 0xA0, 0xE2, 0xE4, 0xE0, 0xE1, 0xE3, 0xE5, /* 40 - 47 */ - 0xE7, 0xF1, 0xA2, 0x2E, 0x3C, 0x28, 0x2B, 0x7C, /* 48 - 4F */ - 0x26, 0xE9, 0xEA, 0xEB, 0xE8, 0xED, 0xEE, 0xEF, /* 50 - 57 */ - 0xEC, 0xDF, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0x5E, /* 58 - 5F */ - 0x2D, 0x2F, 0xC2, 0xC4, 0xC0, 0xC1, 0xC3, 0xC5, /* 60 - 67 */ - 0xC7, 0xD1, 0xA6, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, /* 68 - 6F */ - 0xF8, 0xC9, 0xCA, 0xCB, 0xC8, 0xCD, 0xCE, 0xCF, /* 70 - 77 */ - 0xCC, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, /* 78 - 7F */ - 0xD8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80 - 87 */ - 0x68, 0x69, 0xAB, 0xBB, 0xF0, 0xFD, 0xFE, 0xB1, /* 88 - 8F */ - 0xB0, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, /* 90 - 97 */ - 0x71, 0x72, 0xAA, 0xBA, 0xE6, 0xB8, 0xC6, 0xA4, /* 98 - 9F */ - 0xB5, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* A0 - A7 */ - 0x79, 0x7A, 0xA1, 0xBF, 0xD0, 0x5B, 0xDE, 0xAE, /* A8 - AF */ - 0xAC, 0xA3, 0xA5, 0xB7, 0xA9, 0xA7, 0xB6, 0xBC, /* B0 - B7 */ - 0xBD, 0xBE, 0xDD, 0xA8, 0xAF, 0x5D, 0xB4, 0xD7, /* B8 - BF */ - 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* C0 - C7 */ - 0x48, 0x49, 0xAD, 0xF4, 0xF6, 0xF2, 0xF3, 0xF5, /* C8 - CF */ - 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, /* D0 - D7 */ - 0x51, 0x52, 0xB9, 0xFB, 0xFC, 0xF9, 0xFA, 0xFF, /* D8 - DF */ - 0x5C, 0xF7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* E0 - E7 */ - 0x59, 0x5A, 0xB2, 0xD4, 0xD6, 0xD2, 0xD3, 0xD5, /* E8 - EF */ - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* F0 - F7 */ - 0x38, 0x39, 0xB3, 0xDB, 0xDC, 0xD9, 0xDA, 0x9F /* F8 - FF */ -}; -#endif /* ZIP || CRYPT */ - -#else /* MTS */ - -/* - * This is the MTS ASCII->EBCDIC translation table. It provides a 1-1 - * translation from ISO 8859/1 8-bit ASCII to IBM Code Page 37 EBCDIC. - */ - -ZCONST uch ebcdic[] = { - 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F, /* 00 - 07 */ - 0x16, 0x05, 0x25, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ - 0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26, /* 10 - 17 */ - 0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ - 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, /* 20 - 27 */ - 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61, /* 28 - 2F */ - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 30 - 37 */ - 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F, /* 38 - 3F */ - 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 40 - 47 */ - 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, /* 48 - 4F */ - 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, /* 50 - 57 */ - 0xE7, 0xE8, 0xE9, 0xBA, 0xE0, 0xBB, 0xB0, 0x6D, /* 58 - 5F */ - 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60 - 67 */ - 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 68 - 6F */ - 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, /* 70 - 77 */ - 0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07, /* 78 - 7F */ - 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 80 - 87 */ - 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x09, 0x0A, 0x1B, /* 88 - 8F */ - 0x30, 0x31, 0x1A, 0x33, 0x34, 0x35, 0x36, 0x08, /* 90 - 97 */ - 0x38, 0x39, 0x3A, 0x3B, 0x04, 0x14, 0x3E, 0xFF, /* 98 - 9F */ - 0x41, 0xAA, 0x4A, 0xB1, 0x9F, 0xB2, 0x6A, 0xB5, /* A0 - A7 */ - 0xBD, 0xB4, 0x9A, 0x8A, 0x5F, 0xCA, 0xAF, 0xBC, /* A8 - AF */ - 0x90, 0x8F, 0xEA, 0xFA, 0xBE, 0xA0, 0xB6, 0xB3, /* B0 - B7 */ - 0x9D, 0xDA, 0x9B, 0x8B, 0xB7, 0xB8, 0xB9, 0xAB, /* B8 - BF */ - 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9E, 0x68, /* C0 - C7 */ - 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* C8 - CF */ - 0xAC, 0x69, 0xED, 0xEE, 0xEB, 0xEF, 0xEC, 0xBF, /* D0 - D7 */ - 0x80, 0xFD, 0xFE, 0xFB, 0xFC, 0xAD, 0xAE, 0x59, /* D8 - DF */ - 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9C, 0x48, /* E0 - E7 */ - 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* E8 - EF */ - 0x8C, 0x49, 0xCD, 0xCE, 0xCB, 0xCF, 0xCC, 0xE1, /* F0 - F7 */ - 0x70, 0xDD, 0xDE, 0xDB, 0xDC, 0x8D, 0x8E, 0xDF /* F8 - FF */ -}; - -#if (defined(ZIP) || CRYPT) -ZCONST uch ascii[] = { - 0x00, 0x01, 0x02, 0x03, 0x9C, 0x09, 0x86, 0x7F, /* 00 - 07 */ - 0x97, 0x8D, 0x8E, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ - 0x10, 0x11, 0x12, 0x13, 0x9D, 0x85, 0x08, 0x87, /* 10 - 17 */ - 0x18, 0x19, 0x92, 0x8F, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ - 0x80, 0x81, 0x82, 0x83, 0x84, 0x0A, 0x17, 0x1B, /* 20 - 27 */ - 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x05, 0x06, 0x07, /* 28 - 2F */ - 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30 - 37 */ - 0x98, 0x99, 0x9A, 0x9B, 0x14, 0x15, 0x9E, 0x1A, /* 38 - 3F */ - 0x20, 0xA0, 0xE2, 0xE4, 0xE0, 0xE1, 0xE3, 0xE5, /* 40 - 47 */ - 0xE7, 0xF1, 0xA2, 0x2E, 0x3C, 0x28, 0x2B, 0x7C, /* 48 - 4F */ - 0x26, 0xE9, 0xEA, 0xEB, 0xE8, 0xED, 0xEE, 0xEF, /* 50 - 57 */ - 0xEC, 0xDF, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0xAC, /* 58 - 5F */ - 0x2D, 0x2F, 0xC2, 0xC4, 0xC0, 0xC1, 0xC3, 0xC5, /* 60 - 67 */ - 0xC7, 0xD1, 0xA6, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, /* 68 - 6F */ - 0xF8, 0xC9, 0xCA, 0xCB, 0xC8, 0xCD, 0xCE, 0xCF, /* 70 - 77 */ - 0xCC, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, /* 78 - 7F */ - 0xD8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80 - 87 */ - 0x68, 0x69, 0xAB, 0xBB, 0xF0, 0xFD, 0xFE, 0xB1, /* 88 - 8F */ - 0xB0, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, /* 90 - 97 */ - 0x71, 0x72, 0xAA, 0xBA, 0xE6, 0xB8, 0xC6, 0xA4, /* 98 - 9F */ - 0xB5, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* A0 - A7 */ - 0x79, 0x7A, 0xA1, 0xBF, 0xD0, 0xDD, 0xDE, 0xAE, /* A8 - AF */ - 0x5E, 0xA3, 0xA5, 0xB7, 0xA9, 0xA7, 0xB6, 0xBC, /* B0 - B7 */ - 0xBD, 0xBE, 0x5B, 0x5D, 0xAF, 0xA8, 0xB4, 0xD7, /* B8 - BF */ - 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* C0 - C7 */ - 0x48, 0x49, 0xAD, 0xF4, 0xF6, 0xF2, 0xF3, 0xF5, /* C8 - CF */ - 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, /* D0 - D7 */ - 0x51, 0x52, 0xB9, 0xFB, 0xFC, 0xF9, 0xFA, 0xFF, /* D8 - DF */ - 0x5C, 0xF7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* E0 - E7 */ - 0x59, 0x5A, 0xB2, 0xD4, 0xD6, 0xD2, 0xD3, 0xD5, /* E8 - EF */ - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* F0 - F7 */ - 0x38, 0x39, 0xB3, 0xDB, 0xDC, 0xD9, 0xDA, 0x9F /* F8 - FF */ -}; -#endif /* ZIP || CRYPT */ - -#endif /* ?MTS */ -#endif /* EBCDIC */ - -/*--------------------------------------------------------------------------- - - The following conversion tables translate between IBM PC CP 850 - (OEM codepage) and the "Western Europe & America" Windows codepage 1252. - The Windows codepage 1252 contains the ISO 8859-1 "Latin 1" codepage, - with some additional printable characters in the range (0x80 - 0x9F), - that is reserved to control codes in the ISO 8859-1 character table. - - The ISO <--> OEM conversion tables were constructed with the help - of the WIN32 (Win16?) API's OemToAnsi() and AnsiToOem() conversion - functions and have been checked against the CP850 and LATIN1 tables - provided in the MS-Kermit 3.14 distribution. - - ---------------------------------------------------------------------------*/ - -#ifdef IZ_ISO2OEM_ARRAY -ZCONST uch Far iso2oem[] = { - 0x3F, 0x3F, 0x27, 0x9F, 0x22, 0x2E, 0xC5, 0xCE, /* 80 - 87 */ - 0x5E, 0x25, 0x53, 0x3C, 0x4F, 0x3F, 0x3F, 0x3F, /* 88 - 8F */ - 0x3F, 0x27, 0x27, 0x22, 0x22, 0x07, 0x2D, 0x2D, /* 90 - 97 */ - 0x7E, 0x54, 0x73, 0x3E, 0x6F, 0x3F, 0x3F, 0x59, /* 98 - 9F */ - 0xFF, 0xAD, 0xBD, 0x9C, 0xCF, 0xBE, 0xDD, 0xF5, /* A0 - A7 */ - 0xF9, 0xB8, 0xA6, 0xAE, 0xAA, 0xF0, 0xA9, 0xEE, /* A8 - AF */ - 0xF8, 0xF1, 0xFD, 0xFC, 0xEF, 0xE6, 0xF4, 0xFA, /* B0 - B7 */ - 0xF7, 0xFB, 0xA7, 0xAF, 0xAC, 0xAB, 0xF3, 0xA8, /* B8 - BF */ - 0xB7, 0xB5, 0xB6, 0xC7, 0x8E, 0x8F, 0x92, 0x80, /* C0 - C7 */ - 0xD4, 0x90, 0xD2, 0xD3, 0xDE, 0xD6, 0xD7, 0xD8, /* C8 - CF */ - 0xD1, 0xA5, 0xE3, 0xE0, 0xE2, 0xE5, 0x99, 0x9E, /* D0 - D7 */ - 0x9D, 0xEB, 0xE9, 0xEA, 0x9A, 0xED, 0xE8, 0xE1, /* D8 - DF */ - 0x85, 0xA0, 0x83, 0xC6, 0x84, 0x86, 0x91, 0x87, /* E0 - E7 */ - 0x8A, 0x82, 0x88, 0x89, 0x8D, 0xA1, 0x8C, 0x8B, /* E8 - EF */ - 0xD0, 0xA4, 0x95, 0xA2, 0x93, 0xE4, 0x94, 0xF6, /* F0 - F7 */ - 0x9B, 0x97, 0xA3, 0x96, 0x81, 0xEC, 0xE7, 0x98 /* F8 - FF */ -}; -#endif /* IZ_ISO2OEM_ARRAY */ - -#ifdef IZ_OEM2ISO_ARRAY -ZCONST uch Far oem2iso[] = { - 0xC7, 0xFC, 0xE9, 0xE2, 0xE4, 0xE0, 0xE5, 0xE7, /* 80 - 87 */ - 0xEA, 0xEB, 0xE8, 0xEF, 0xEE, 0xEC, 0xC4, 0xC5, /* 88 - 8F */ - 0xC9, 0xE6, 0xC6, 0xF4, 0xF6, 0xF2, 0xFB, 0xF9, /* 90 - 97 */ - 0xFF, 0xD6, 0xDC, 0xF8, 0xA3, 0xD8, 0xD7, 0x83, /* 98 - 9F */ - 0xE1, 0xED, 0xF3, 0xFA, 0xF1, 0xD1, 0xAA, 0xBA, /* A0 - A7 */ - 0xBF, 0xAE, 0xAC, 0xBD, 0xBC, 0xA1, 0xAB, 0xBB, /* A8 - AF */ - 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xC1, 0xC2, 0xC0, /* B0 - B7 */ - 0xA9, 0xA6, 0xA6, 0x2B, 0x2B, 0xA2, 0xA5, 0x2B, /* B8 - BF */ - 0x2B, 0x2D, 0x2D, 0x2B, 0x2D, 0x2B, 0xE3, 0xC3, /* C0 - C7 */ - 0x2B, 0x2B, 0x2D, 0x2D, 0xA6, 0x2D, 0x2B, 0xA4, /* C8 - CF */ - 0xF0, 0xD0, 0xCA, 0xCB, 0xC8, 0x69, 0xCD, 0xCE, /* D0 - D7 */ - 0xCF, 0x2B, 0x2B, 0xA6, 0x5F, 0xA6, 0xCC, 0xAF, /* D8 - DF */ - 0xD3, 0xDF, 0xD4, 0xD2, 0xF5, 0xD5, 0xB5, 0xFE, /* E0 - E7 */ - 0xDE, 0xDA, 0xDB, 0xD9, 0xFD, 0xDD, 0xAF, 0xB4, /* E8 - EF */ - 0xAD, 0xB1, 0x3D, 0xBE, 0xB6, 0xA7, 0xF7, 0xB8, /* F0 - F7 */ - 0xB0, 0xA8, 0xB7, 0xB9, 0xB3, 0xB2, 0xA6, 0xA0 /* F8 - FF */ -}; -#endif /* IZ_OEM2ISO_ARRAY */ - -#endif /* __ebcdic_h */ diff --git a/Build/source/libs/unzip/explode.c b/Build/source/libs/unzip/explode.c deleted file mode 100644 index c1a8f80032a..00000000000 --- a/Build/source/libs/unzip/explode.c +++ /dev/null @@ -1,871 +0,0 @@ -/* explode.c -- put in the public domain by Mark Adler - version c15, 6 July 1996 */ - - -/* You can do whatever you like with this source file, though I would - prefer that if you modify it and redistribute it that you include - comments to that effect with your name and the date. Thank you. - - History: - vers date who what - ---- --------- -------------- ------------------------------------ - c1 30 Mar 92 M. Adler explode that uses huft_build from inflate - (this gives over a 70% speed improvement - over the original unimplode.c, which - decoded a bit at a time) - c2 4 Apr 92 M. Adler fixed bug for file sizes a multiple of 32k. - c3 10 Apr 92 M. Adler added a little memory tracking if DEBUG - c4 11 Apr 92 M. Adler added NOMEMCPY do kill use of memcpy() - c5 21 Apr 92 M. Adler added the WSIZE #define to allow reducing - the 32K window size for specialized - applications. - c6 31 May 92 M. Adler added typecasts to eliminate some warnings - c7 27 Jun 92 G. Roelofs added more typecasts. - c8 17 Oct 92 G. Roelofs changed ULONG/UWORD/byte to ulg/ush/uch. - c9 19 Jul 93 J. Bush added more typecasts (to return values); - made l[256] array static for Amiga. - c10 8 Oct 93 G. Roelofs added used_csize for diagnostics; added - buf and unshrink arguments to flush(); - undef'd various macros at end for Turbo C; - removed NEXTBYTE macro (now in unzip.h) - and bytebuf variable (not used); changed - memset() to memzero(). - c11 9 Jan 94 M. Adler fixed incorrect used_csize calculation. - c12 9 Apr 94 G. Roelofs fixed split comments on preprocessor lines - to avoid bug in Encore compiler. - c13 25 Aug 94 M. Adler fixed distance-length comment (orig c9 fix) - c14 22 Nov 95 S. Maxwell removed unnecessary "static" on auto array - c15 6 Jul 96 W. Haidinger added ulg typecasts to flush() calls. - c16 8 Feb 98 C. Spieler added ZCONST modifiers to const tables - and #ifdef DEBUG around debugging code. - c16b 25 Mar 98 C. Spieler modified DLL code for slide redirection. - */ - - -/* - Explode imploded (PKZIP method 6 compressed) data. This compression - method searches for as much of the current string of bytes (up to a length - of ~320) in the previous 4K or 8K bytes. If it doesn't find any matches - (of at least length 2 or 3), it codes the next byte. Otherwise, it codes - the length of the matched string and its distance backwards from the - current position. Single bytes ("literals") are preceded by a one (a - single bit) and are either uncoded (the eight bits go directly into the - compressed stream for a total of nine bits) or Huffman coded with a - supplied literal code tree. If literals are coded, then the minimum match - length is three, otherwise it is two. - - There are therefore four kinds of imploded streams: 8K search with coded - literals (min match = 3), 4K search with coded literals (min match = 3), - 8K with uncoded literals (min match = 2), and 4K with uncoded literals - (min match = 2). The kind of stream is identified in two bits of a - general purpose bit flag that is outside of the compressed stream. - - Distance-length pairs for matched strings are preceded by a zero bit (to - distinguish them from literals) and are always coded. The distance comes - first and is either the low six (4K) or low seven (8K) bits of the - distance (uncoded), followed by the high six bits of the distance coded. - Then the length is six bits coded (0..63 + min match length), and if the - maximum such length is coded, then it's followed by another eight bits - (uncoded) to be added to the coded length. This gives a match length - range of 2..320 or 3..321 bytes. - - The literal, length, and distance codes are all represented in a slightly - compressed form themselves. What is sent are the lengths of the codes for - each value, which is sufficient to construct the codes. Each byte of the - code representation is the code length (the low four bits representing - 1..16), and the number of values sequentially with that length (the high - four bits also representing 1..16). There are 256 literal code values (if - literals are coded), 64 length code values, and 64 distance code values, - in that order at the beginning of the compressed stream. Each set of code - values is preceded (redundantly) with a byte indicating how many bytes are - in the code description that follows, in the range 1..256. - - The codes themselves are decoded using tables made by huft_build() from - the bit lengths. That routine and its comments are in the inflate.c - module. - */ - -#define UNZIP_INTERNAL -#include "unzip.h" /* must supply slide[] (uch) array and NEXTBYTE macro */ - -#ifndef WSIZE -# define WSIZE 0x8000 /* window size--must be a power of two, and */ -#endif /* at least 8K for zip's implode method */ - -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) -# define wsize G._wsize -#else -# define wsize WSIZE -#endif - -/* routines here */ -static int get_tree OF((__GPRO__ unsigned *l, unsigned n)); -static int explode_lit8 OF((__GPRO__ struct huft *tb, struct huft *tl, - struct huft *td, int bb, int bl, int bd)); -static int explode_lit4 OF((__GPRO__ struct huft *tb, struct huft *tl, - struct huft *td, int bb, int bl, int bd)); -static int explode_nolit8 OF((__GPRO__ struct huft *tl, struct huft *td, - int bl, int bd)); -static int explode_nolit4 OF((__GPRO__ struct huft *tl, struct huft *td, - int bl, int bd)); -int explode OF((__GPRO)); - - -/* The implode algorithm uses a sliding 4K or 8K byte window on the - uncompressed stream to find repeated byte strings. This is implemented - here as a circular buffer. The index is updated simply by incrementing - and then and'ing with 0x0fff (4K-1) or 0x1fff (8K-1). Here, the 32K - buffer of inflate is used, and it works just as well to always have - a 32K circular buffer, so the index is anded with 0x7fff. This is - done to allow the window to also be used as the output buffer. */ -/* This must be supplied in an external module useable like "uch slide[8192];" - or "uch *slide;", where the latter would be malloc'ed. In unzip, slide[] - is actually a 32K area for use by inflate, which uses a 32K sliding window. - */ - - -/* Tables for length and distance */ -static ZCONST ush cplen2[] = - {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65}; -static ZCONST ush cplen3[] = - {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66}; -static ZCONST ush extra[] = - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8}; -static ZCONST ush cpdist4[] = - {1, 65, 129, 193, 257, 321, 385, 449, 513, 577, 641, 705, - 769, 833, 897, 961, 1025, 1089, 1153, 1217, 1281, 1345, 1409, 1473, - 1537, 1601, 1665, 1729, 1793, 1857, 1921, 1985, 2049, 2113, 2177, - 2241, 2305, 2369, 2433, 2497, 2561, 2625, 2689, 2753, 2817, 2881, - 2945, 3009, 3073, 3137, 3201, 3265, 3329, 3393, 3457, 3521, 3585, - 3649, 3713, 3777, 3841, 3905, 3969, 4033}; -static ZCONST ush cpdist8[] = - {1, 129, 257, 385, 513, 641, 769, 897, 1025, 1153, 1281, - 1409, 1537, 1665, 1793, 1921, 2049, 2177, 2305, 2433, 2561, 2689, - 2817, 2945, 3073, 3201, 3329, 3457, 3585, 3713, 3841, 3969, 4097, - 4225, 4353, 4481, 4609, 4737, 4865, 4993, 5121, 5249, 5377, 5505, - 5633, 5761, 5889, 6017, 6145, 6273, 6401, 6529, 6657, 6785, 6913, - 7041, 7169, 7297, 7425, 7553, 7681, 7809, 7937, 8065}; - - -/* Macros for inflate() bit peeking and grabbing. - The usage is: - - NEEDBITS(j) - x = b & mask_bits[j]; - DUMPBITS(j) - - where NEEDBITS makes sure that b has at least j bits in it, and - DUMPBITS removes the bits from b. The macros use the variable k - for the number of bits in b. Normally, b and k are register - variables for speed. - */ - -#define NEEDBITS(n) {while(k<(n)){b|=((ulg)NEXTBYTE)<>=(n);k-=(n);} - - - -static int get_tree(__G__ l, n) - __GDEF -unsigned *l; /* bit lengths */ -unsigned n; /* number expected */ -/* Get the bit lengths for a code representation from the compressed - stream. If get_tree() returns 4, then there is an error in the data. - Otherwise zero is returned. */ -{ - unsigned i; /* bytes remaining in list */ - unsigned k; /* lengths entered */ - unsigned j; /* number of codes */ - unsigned b; /* bit length for those codes */ - - - /* get bit lengths */ - i = NEXTBYTE + 1; /* length/count pairs to read */ - k = 0; /* next code */ - do { - b = ((j = NEXTBYTE) & 0xf) + 1; /* bits in code (1..16) */ - j = ((j & 0xf0) >> 4) + 1; /* codes with those bits (1..16) */ - if (k + j > n) - return 4; /* don't overflow l[] */ - do { - l[k++] = b; - } while (--j); - } while (--i); - return k != n ? 4 : 0; /* should have read n of them */ -} - - - -static int explode_lit8(__G__ tb, tl, td, bb, bl, bd) - __GDEF -struct huft *tb, *tl, *td; /* literal, length, and distance tables */ -int bb, bl, bd; /* number of bits decoded by those */ -/* Decompress the imploded data using coded literals and an 8K sliding - window. */ -{ - long s; /* bytes to decompress */ - register unsigned e; /* table entry flag/number of extra bits */ - unsigned n, d; /* length and index for copy */ - unsigned w; /* current window position */ - struct huft *t; /* pointer to table entry */ - unsigned mb, ml, md; /* masks for bb, bl, and bd bits */ - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - unsigned u; /* true if unflushed */ - - - /* explode the coded data */ - b = k = w = 0; /* initialize bit buffer, window */ - u = 1; /* buffer unflushed */ - mb = mask_bits[bb]; /* precompute masks for speed */ - ml = mask_bits[bl]; - md = mask_bits[bd]; - s = G.ucsize; - while (s > 0) /* do until ucsize bytes uncompressed */ - { - NEEDBITS(1) - if (b & 1) /* then literal--decode it */ - { - DUMPBITS(1) - s--; - NEEDBITS((unsigned)bb) /* get coded literal */ - if ((e = (t = tb + ((~(unsigned)b) & mb))->e) > 16) - do { - if (e == 99) - return 1; - DUMPBITS(t->b) - e -= 16; - NEEDBITS(e) - } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); - DUMPBITS(t->b) - redirSlide[w++] = (uch)t->v.n; - if (w == wsize) - { - flush(__G__ redirSlide, (ulg)w, 0); - w = u = 0; - } - } - else /* else distance/length */ - { - DUMPBITS(1) - NEEDBITS(7) /* get distance low bits */ - d = (unsigned)b & 0x7f; - DUMPBITS(7) - NEEDBITS((unsigned)bd) /* get coded distance high bits */ - if ((e = (t = td + ((~(unsigned)b) & md))->e) > 16) - do { - if (e == 99) - return 1; - DUMPBITS(t->b) - e -= 16; - NEEDBITS(e) - } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); - DUMPBITS(t->b) - d = w - d - t->v.n; /* construct offset */ - NEEDBITS((unsigned)bl) /* get coded length */ - if ((e = (t = tl + ((~(unsigned)b) & ml))->e) > 16) - do { - if (e == 99) - return 1; - DUMPBITS(t->b) - e -= 16; - NEEDBITS(e) - } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); - DUMPBITS(t->b) - n = t->v.n; - if (e) /* get length extra bits */ - { - NEEDBITS(8) - n += (unsigned)b & 0xff; - DUMPBITS(8) - } - - /* do the copy */ - s -= n; - do { -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) - if (G.redirect_slide) { - /* &= w/ wsize not needed and wrong if redirect */ - if (d >= wsize) - return 1; - n -= (e = (e = wsize - (d > w ? d : w)) > n ? n : e); - } else -#endif - n -= (e = (e = wsize - ((d &= wsize-1) > w ? d : w)) > n ? n : e); - if (u && w <= d) - { - memzero(redirSlide + w, e); - w += e; - d += e; - } - else -#ifndef NOMEMCPY - if (w - d >= e) /* (this test assumes unsigned comparison) */ - { - memcpy(redirSlide + w, redirSlide + d, e); - w += e; - d += e; - } - else /* do it slow to avoid memcpy() overlap */ -#endif /* !NOMEMCPY */ - do { - redirSlide[w++] = redirSlide[d++]; - } while (--e); - if (w == wsize) - { - flush(__G__ redirSlide, (ulg)w, 0); - w = u = 0; - } - } while (n); - } - } - - /* flush out redirSlide */ - flush(__G__ redirSlide, (ulg)w, 0); - if (G.csize + G.incnt + (k >> 3)) /* should have read csize bytes, but */ - { /* sometimes read one too many: k>>3 compensates */ - G.used_csize = G.lrec.csize - G.csize - G.incnt - (k >> 3); - return 5; - } - return 0; -} - - - -static int explode_lit4(__G__ tb, tl, td, bb, bl, bd) - __GDEF -struct huft *tb, *tl, *td; /* literal, length, and distance tables */ -int bb, bl, bd; /* number of bits decoded by those */ -/* Decompress the imploded data using coded literals and a 4K sliding - window. */ -{ - long s; /* bytes to decompress */ - register unsigned e; /* table entry flag/number of extra bits */ - unsigned n, d; /* length and index for copy */ - unsigned w; /* current window position */ - struct huft *t; /* pointer to table entry */ - unsigned mb, ml, md; /* masks for bb, bl, and bd bits */ - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - unsigned u; /* true if unflushed */ - - - /* explode the coded data */ - b = k = w = 0; /* initialize bit buffer, window */ - u = 1; /* buffer unflushed */ - mb = mask_bits[bb]; /* precompute masks for speed */ - ml = mask_bits[bl]; - md = mask_bits[bd]; - s = G.ucsize; - while (s > 0) /* do until ucsize bytes uncompressed */ - { - NEEDBITS(1) - if (b & 1) /* then literal--decode it */ - { - DUMPBITS(1) - s--; - NEEDBITS((unsigned)bb) /* get coded literal */ - if ((e = (t = tb + ((~(unsigned)b) & mb))->e) > 16) - do { - if (e == 99) - return 1; - DUMPBITS(t->b) - e -= 16; - NEEDBITS(e) - } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); - DUMPBITS(t->b) - redirSlide[w++] = (uch)t->v.n; - if (w == wsize) - { - flush(__G__ redirSlide, (ulg)w, 0); - w = u = 0; - } - } - else /* else distance/length */ - { - DUMPBITS(1) - NEEDBITS(6) /* get distance low bits */ - d = (unsigned)b & 0x3f; - DUMPBITS(6) - NEEDBITS((unsigned)bd) /* get coded distance high bits */ - if ((e = (t = td + ((~(unsigned)b) & md))->e) > 16) - do { - if (e == 99) - return 1; - DUMPBITS(t->b) - e -= 16; - NEEDBITS(e) - } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); - DUMPBITS(t->b) - d = w - d - t->v.n; /* construct offset */ - NEEDBITS((unsigned)bl) /* get coded length */ - if ((e = (t = tl + ((~(unsigned)b) & ml))->e) > 16) - do { - if (e == 99) - return 1; - DUMPBITS(t->b) - e -= 16; - NEEDBITS(e) - } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); - DUMPBITS(t->b) - n = t->v.n; - if (e) /* get length extra bits */ - { - NEEDBITS(8) - n += (unsigned)b & 0xff; - DUMPBITS(8) - } - - /* do the copy */ - s -= n; - do { -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) - if (G.redirect_slide) { - /* &= w/ wsize not needed and wrong if redirect */ - if (d >= wsize) - return 1; - n -= (e = (e = wsize - (d > w ? d : w)) > n ? n : e); - } else -#endif - n -= (e = (e = wsize - ((d &= wsize-1) > w ? d : w)) > n ? n : e); - if (u && w <= d) - { - memzero(redirSlide + w, e); - w += e; - d += e; - } - else -#ifndef NOMEMCPY - if (w - d >= e) /* (this test assumes unsigned comparison) */ - { - memcpy(redirSlide + w, redirSlide + d, e); - w += e; - d += e; - } - else /* do it slow to avoid memcpy() overlap */ -#endif /* !NOMEMCPY */ - do { - redirSlide[w++] = redirSlide[d++]; - } while (--e); - if (w == wsize) - { - flush(__G__ redirSlide, (ulg)w, 0); - w = u = 0; - } - } while (n); - } - } - - /* flush out redirSlide */ - flush(__G__ redirSlide, (ulg)w, 0); - if (G.csize + G.incnt + (k >> 3)) /* should have read csize bytes, but */ - { /* sometimes read one too many: k>>3 compensates */ - G.used_csize = G.lrec.csize - G.csize - G.incnt - (k >> 3); - return 5; - } - return 0; -} - - - -static int explode_nolit8(__G__ tl, td, bl, bd) - __GDEF -struct huft *tl, *td; /* length and distance decoder tables */ -int bl, bd; /* number of bits decoded by tl[] and td[] */ -/* Decompress the imploded data using uncoded literals and an 8K sliding - window. */ -{ - long s; /* bytes to decompress */ - register unsigned e; /* table entry flag/number of extra bits */ - unsigned n, d; /* length and index for copy */ - unsigned w; /* current window position */ - struct huft *t; /* pointer to table entry */ - unsigned ml, md; /* masks for bl and bd bits */ - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - unsigned u; /* true if unflushed */ - - - /* explode the coded data */ - b = k = w = 0; /* initialize bit buffer, window */ - u = 1; /* buffer unflushed */ - ml = mask_bits[bl]; /* precompute masks for speed */ - md = mask_bits[bd]; - s = G.ucsize; - while (s > 0) /* do until ucsize bytes uncompressed */ - { - NEEDBITS(1) - if (b & 1) /* then literal--get eight bits */ - { - DUMPBITS(1) - s--; - NEEDBITS(8) - redirSlide[w++] = (uch)b; - if (w == wsize) - { - flush(__G__ redirSlide, (ulg)w, 0); - w = u = 0; - } - DUMPBITS(8) - } - else /* else distance/length */ - { - DUMPBITS(1) - NEEDBITS(7) /* get distance low bits */ - d = (unsigned)b & 0x7f; - DUMPBITS(7) - NEEDBITS((unsigned)bd) /* get coded distance high bits */ - if ((e = (t = td + ((~(unsigned)b) & md))->e) > 16) - do { - if (e == 99) - return 1; - DUMPBITS(t->b) - e -= 16; - NEEDBITS(e) - } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); - DUMPBITS(t->b) - d = w - d - t->v.n; /* construct offset */ - NEEDBITS((unsigned)bl) /* get coded length */ - if ((e = (t = tl + ((~(unsigned)b) & ml))->e) > 16) - do { - if (e == 99) - return 1; - DUMPBITS(t->b) - e -= 16; - NEEDBITS(e) - } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); - DUMPBITS(t->b) - n = t->v.n; - if (e) /* get length extra bits */ - { - NEEDBITS(8) - n += (unsigned)b & 0xff; - DUMPBITS(8) - } - - /* do the copy */ - s -= n; - do { -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) - if (G.redirect_slide) { - /* &= w/ wsize not needed and wrong if redirect */ - if (d >= wsize) - return 1; - n -= (e = (e = wsize - (d > w ? d : w)) > n ? n : e); - } else -#endif - n -= (e = (e = wsize - ((d &= wsize-1) > w ? d : w)) > n ? n : e); - if (u && w <= d) - { - memzero(redirSlide + w, e); - w += e; - d += e; - } - else -#ifndef NOMEMCPY - if (w - d >= e) /* (this test assumes unsigned comparison) */ - { - memcpy(redirSlide + w, redirSlide + d, e); - w += e; - d += e; - } - else /* do it slow to avoid memcpy() overlap */ -#endif /* !NOMEMCPY */ - do { - redirSlide[w++] = redirSlide[d++]; - } while (--e); - if (w == wsize) - { - flush(__G__ redirSlide, (ulg)w, 0); - w = u = 0; - } - } while (n); - } - } - - /* flush out redirSlide */ - flush(__G__ redirSlide, (ulg)w, 0); - if (G.csize + G.incnt + (k >> 3)) /* should have read csize bytes, but */ - { /* sometimes read one too many: k>>3 compensates */ - G.used_csize = G.lrec.csize - G.csize - G.incnt - (k >> 3); - return 5; - } - return 0; -} - - - -static int explode_nolit4(__G__ tl, td, bl, bd) - __GDEF -struct huft *tl, *td; /* length and distance decoder tables */ -int bl, bd; /* number of bits decoded by tl[] and td[] */ -/* Decompress the imploded data using uncoded literals and a 4K sliding - window. */ -{ - long s; /* bytes to decompress */ - register unsigned e; /* table entry flag/number of extra bits */ - unsigned n, d; /* length and index for copy */ - unsigned w; /* current window position */ - struct huft *t; /* pointer to table entry */ - unsigned ml, md; /* masks for bl and bd bits */ - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - unsigned u; /* true if unflushed */ - - - /* explode the coded data */ - b = k = w = 0; /* initialize bit buffer, window */ - u = 1; /* buffer unflushed */ - ml = mask_bits[bl]; /* precompute masks for speed */ - md = mask_bits[bd]; - s = G.ucsize; - while (s > 0) /* do until ucsize bytes uncompressed */ - { - NEEDBITS(1) - if (b & 1) /* then literal--get eight bits */ - { - DUMPBITS(1) - s--; - NEEDBITS(8) - redirSlide[w++] = (uch)b; - if (w == wsize) - { - flush(__G__ redirSlide, (ulg)w, 0); - w = u = 0; - } - DUMPBITS(8) - } - else /* else distance/length */ - { - DUMPBITS(1) - NEEDBITS(6) /* get distance low bits */ - d = (unsigned)b & 0x3f; - DUMPBITS(6) - NEEDBITS((unsigned)bd) /* get coded distance high bits */ - if ((e = (t = td + ((~(unsigned)b) & md))->e) > 16) - do { - if (e == 99) - return 1; - DUMPBITS(t->b) - e -= 16; - NEEDBITS(e) - } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); - DUMPBITS(t->b) - d = w - d - t->v.n; /* construct offset */ - NEEDBITS((unsigned)bl) /* get coded length */ - if ((e = (t = tl + ((~(unsigned)b) & ml))->e) > 16) - do { - if (e == 99) - return 1; - DUMPBITS(t->b) - e -= 16; - NEEDBITS(e) - } while ((e = (t = t->v.t + ((~(unsigned)b) & mask_bits[e]))->e) > 16); - DUMPBITS(t->b) - n = t->v.n; - if (e) /* get length extra bits */ - { - NEEDBITS(8) - n += (unsigned)b & 0xff; - DUMPBITS(8) - } - - /* do the copy */ - s -= n; - do { -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) - if (G.redirect_slide) { - /* &= w/ wsize not needed and wrong if redirect */ - if (d >= wsize) - return 1; - n -= (e = (e = wsize - (d > w ? d : w)) > n ? n : e); - } else -#endif - n -= (e = (e = wsize - ((d &= wsize-1) > w ? d : w)) > n ? n : e); - if (u && w <= d) - { - memzero(redirSlide + w, e); - w += e; - d += e; - } - else -#ifndef NOMEMCPY - if (w - d >= e) /* (this test assumes unsigned comparison) */ - { - memcpy(redirSlide + w, redirSlide + d, e); - w += e; - d += e; - } - else /* do it slow to avoid memcpy() overlap */ -#endif /* !NOMEMCPY */ - do { - redirSlide[w++] = redirSlide[d++]; - } while (--e); - if (w == wsize) - { - flush(__G__ redirSlide, (ulg)w, 0); - w = u = 0; - } - } while (n); - } - } - - /* flush out redirSlide */ - flush(__G__ redirSlide, (ulg)w, 0); - if (G.csize + G.incnt + (k >> 3)) /* should have read csize bytes, but */ - { /* sometimes read one too many: k>>3 compensates */ - G.used_csize = G.lrec.csize - G.csize - G.incnt - (k >> 3); - return 5; - } - return 0; -} - - - -int explode(__G) - __GDEF -/* Explode an imploded compressed stream. Based on the general purpose - bit flag, decide on coded or uncoded literals, and an 8K or 4K sliding - window. Construct the literal (if any), length, and distance codes and - the tables needed to decode them (using huft_build() from inflate.c), - and call the appropriate routine for the type of data in the remainder - of the stream. The four routines are nearly identical, differing only - in whether the literal is decoded or simply read in, and in how many - bits are read in, uncoded, for the low distance bits. */ -{ - unsigned r; /* return codes */ - struct huft *tb; /* literal code table */ - struct huft *tl; /* length code table */ - struct huft *td; /* distance code table */ - int bb; /* bits for tb */ - int bl; /* bits for tl */ - int bd; /* bits for td */ - unsigned l[256]; /* bit lengths for codes */ - -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) - if (G.redirect_slide) - wsize = G.redirect_size, redirSlide = G.redirect_buffer; - else - wsize = WSIZE, redirSlide = slide; -#endif - - /* Tune base table sizes. Note: I thought that to truly optimize speed, - I would have to select different bl, bd, and bb values for different - compressed file sizes. I was surprised to find out that the values of - 7, 7, and 9 worked best over a very wide range of sizes, except that - bd = 8 worked marginally better for large compressed sizes. */ - bl = 7; - bd = (G.csize + G.incnt) > 200000L ? 8 : 7; - - - /* With literal tree--minimum match length is 3 */ -#ifdef DEBUG - G.hufts = 0; /* initialize huft's malloc'ed */ -#endif - if (G.lrec.general_purpose_bit_flag & 4) - { - bb = 9; /* base table size for literals */ - if ((r = get_tree(__G__ l, 256)) != 0) - return (int)r; - if ((r = huft_build(__G__ l, 256, 256, NULL, NULL, &tb, &bb)) != 0) - { - if (r == 1) - huft_free(tb); - return (int)r; - } - if ((r = get_tree(__G__ l, 64)) != 0) - return (int)r; - if ((r = huft_build(__G__ l, 64, 0, cplen3, extra, &tl, &bl)) != 0) - { - if (r == 1) - huft_free(tl); - huft_free(tb); - return (int)r; - } - if ((r = get_tree(__G__ l, 64)) != 0) - return (int)r; - if (G.lrec.general_purpose_bit_flag & 2) /* true if 8K */ - { - if ((r = huft_build(__G__ l, 64, 0, cpdist8, extra, &td, &bd)) != 0) - { - if (r == 1) - huft_free(td); - huft_free(tl); - huft_free(tb); - return (int)r; - } - r = explode_lit8(__G__ tb, tl, td, bb, bl, bd); - } - else /* else 4K */ - { - if ((r = huft_build(__G__ l, 64, 0, cpdist4, extra, &td, &bd)) != 0) - { - if (r == 1) - huft_free(td); - huft_free(tl); - huft_free(tb); - return (int)r; - } - r = explode_lit4(__G__ tb, tl, td, bb, bl, bd); - } - huft_free(td); - huft_free(tl); - huft_free(tb); - } - else - - - /* No literal tree--minimum match length is 2 */ - { - if ((r = get_tree(__G__ l, 64)) != 0) - return (int)r; - if ((r = huft_build(__G__ l, 64, 0, cplen2, extra, &tl, &bl)) != 0) - { - if (r == 1) - huft_free(tl); - return (int)r; - } - if ((r = get_tree(__G__ l, 64)) != 0) - return (int)r; - if (G.lrec.general_purpose_bit_flag & 2) /* true if 8K */ - { - if ((r = huft_build(__G__ l, 64, 0, cpdist8, extra, &td, &bd)) != 0) - { - if (r == 1) - huft_free(td); - huft_free(tl); - return (int)r; - } - r = explode_nolit8(__G__ tl, td, bl, bd); - } - else /* else 4K */ - { - if ((r = huft_build(__G__ l, 64, 0, cpdist4, extra, &td, &bd)) != 0) - { - if (r == 1) - huft_free(td); - huft_free(tl); - return (int)r; - } - r = explode_nolit4(__G__ tl, td, bl, bd); - } - huft_free(td); - huft_free(tl); - } - Trace((stderr, "<%u > ", G.hufts)); - return (int)r; -} - -/* so explode.c and inflate.c can be compiled together into one object: */ -#undef NEXTBYTE -#undef NEEDBITS -#undef DUMPBITS diff --git a/Build/source/libs/unzip/extract.c b/Build/source/libs/unzip/extract.c deleted file mode 100644 index 75ed7e0fd0e..00000000000 --- a/Build/source/libs/unzip/extract.c +++ /dev/null @@ -1,1985 +0,0 @@ -/*--------------------------------------------------------------------------- - - extract.c - - This file contains the high-level routines ("driver routines") for extrac- - ting and testing zipfile members. It calls the low-level routines in files - explode.c, inflate.c, unreduce.c and unshrink.c. - - Contains: extract_or_test_files() - store_info() - extract_or_test_member() - TestExtraField() - test_compr_eb() - memextract() - memflush() - fnfilter() - - ---------------------------------------------------------------------------*/ - - -#define EXTRACT_C -#define UNZIP_INTERNAL -#include "unzip.h" -#include "crypt.h" -#ifdef WINDLL -# ifdef POCKET_UNZIP -# include "wince/intrface.h" -# else -# include "windll/windll.h" -# endif -#endif - -#define GRRDUMP(buf,len) { \ - int i, j; \ - \ - for (j = 0; j < (len)/16; ++j) { \ - printf(" "); \ - for (i = 0; i < 16; ++i) \ - printf("%02x ", (uch)(buf)[i+(j<<4)]); \ - printf("\n "); \ - for (i = 0; i < 16; ++i) { \ - char c = (char)(buf)[i+(j<<4)]; \ - \ - if (c == '\n') \ - printf("\\n "); \ - else if (c == '\r') \ - printf("\\r "); \ - else \ - printf(" %c ", c); \ - } \ - printf("\n"); \ - } \ - if ((len) % 16) { \ - printf(" "); \ - for (i = j<<4; i < (len); ++i) \ - printf("%02x ", (uch)(buf)[i]); \ - printf("\n "); \ - for (i = j<<4; i < (len); ++i) { \ - char c = (char)(buf)[i]; \ - \ - if (c == '\n') \ - printf("\\n "); \ - else if (c == '\r') \ - printf("\\r "); \ - else \ - printf(" %c ", c); \ - } \ - printf("\n"); \ - } \ -} - -static int store_info OF((__GPRO)); -static int extract_or_test_member OF((__GPRO)); -#ifndef SFX - static int TestExtraField OF((__GPRO__ uch *ef, unsigned ef_len)); - static int test_compr_eb OF((__GPRO__ uch *eb, unsigned eb_size, - unsigned compr_offset, - int (*test_uc_ebdata)(__GPRO__ uch *eb, unsigned eb_size, - uch *eb_ucptr, ulg eb_ucsize))); -#endif -#ifdef SET_DIR_ATTRIB - static int dircomp OF((ZCONST zvoid *a, ZCONST zvoid *b)); -#endif - - - -/*******************************/ -/* Strings used in extract.c */ -/*******************************/ - -static ZCONST char Far VersionMsg[] = - " skipping: %-22s need %s compat. v%u.%u (can do v%u.%u)\n"; -static ZCONST char Far ComprMsgNum[] = - " skipping: %-22s unsupported compression method %u\n"; -#ifndef SFX - static ZCONST char Far ComprMsgName[] = - " skipping: %-22s `%s' method not supported\n"; - static ZCONST char Far CmprNone[] = "store"; - static ZCONST char Far CmprShrink[] = "shrink"; - static ZCONST char Far CmprReduce[] = "reduce"; - static ZCONST char Far CmprImplode[] = "implode"; - static ZCONST char Far CmprTokenize[] = "tokenize"; - static ZCONST char Far CmprDeflate[] = "deflate"; - static ZCONST char Far CmprEnDeflate[] = "enhanced deflate"; - static ZCONST char Far CmprDCLImplode[] = "DCL implode"; - static ZCONST char Far *ComprNames[NUM_METHODS] = { - CmprNone, CmprShrink, CmprReduce, CmprReduce, CmprReduce, CmprReduce, - CmprImplode, CmprTokenize, CmprDeflate, CmprEnDeflate, CmprDCLImplode - }; -#endif /* !SFX */ -static ZCONST char Far FilNamMsg[] = - "%s: bad filename length (%s)\n"; -static ZCONST char Far ExtFieldMsg[] = - "%s: bad extra field length (%s)\n"; -static ZCONST char Far OffsetMsg[] = - "file #%u: bad zipfile offset (%s): %ld\n"; -static ZCONST char Far ExtractMsg[] = - "%8sing: %-22s %s%s"; -#ifndef SFX - static ZCONST char Far LengthMsg[] = - "%s %s: %ld bytes required to uncompress to %lu bytes;\n %s\ - supposed to require %lu bytes%s%s%s\n"; -#endif - -static ZCONST char Far BadFileCommLength[] = "%s: bad file comment length\n"; -static ZCONST char Far LocalHdrSig[] = "local header sig"; -static ZCONST char Far BadLocalHdr[] = "file #%u: bad local header\n"; -static ZCONST char Far AttemptRecompensate[] = - " (attempting to re-compensate)\n"; -#ifndef SFX - static ZCONST char Far BackslashPathSep[] = - "warning: %s appears to use backslashes as path separators\n"; -#endif -static ZCONST char Far SkipVolumeLabel[] = - " skipping: %-22s %svolume label\n"; - -#ifdef SET_DIR_ATTRIB /* messages of code for setting directory attributes */ - static ZCONST char Far DirlistEntryNoMem[] = - "warning: cannot alloc memory for dir times/permissions/UID/GID\n"; - static ZCONST char Far DirlistSortNoMem[] = - "warning: cannot alloc memory to sort dir times/perms/etc.\n"; - static ZCONST char Far DirlistSetAttrFailed[] = - "warning: set times/attribs failed for %s\n"; -#endif - -#ifndef WINDLL - static ZCONST char Far ReplaceQuery[] = - "replace %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: "; - static ZCONST char Far AssumeNone[] = " NULL\n(assuming [N]one)\n"; - static ZCONST char Far NewNameQuery[] = "new name: "; - static ZCONST char Far InvalidResponse[] = "error: invalid response [%c]\n"; -#endif /* !WINDLL */ - -static ZCONST char Far ErrorInArchive[] = - "At least one %serror was detected in %s.\n"; -static ZCONST char Far ZeroFilesTested[] = - "Caution: zero files tested in %s.\n"; - -#ifndef VMS - static ZCONST char Far VMSFormatQuery[] = - "\n%s: stored in VMS format. Extract anyway? (y/n) "; -#endif - -#if CRYPT - static ZCONST char Far SkipCannotGetPasswd[] = - " skipping: %-22s unable to get password\n"; - static ZCONST char Far SkipIncorrectPasswd[] = - " skipping: %-22s incorrect password\n"; - static ZCONST char Far FilesSkipBadPasswd[] = - "%u file%s skipped because of incorrect password.\n"; - static ZCONST char Far MaybeBadPasswd[] = - " (may instead be incorrect password)\n"; -#else - static ZCONST char Far SkipEncrypted[] = - " skipping: %-22s encrypted (not supported)\n"; -#endif - -static ZCONST char Far NoErrInCompData[] = - "No errors detected in compressed data of %s.\n"; -static ZCONST char Far NoErrInTestedFiles[] = - "No errors detected in %s for the %u file%s tested.\n"; -static ZCONST char Far FilesSkipped[] = - "%u file%s skipped because of unsupported compression or encoding.\n"; - -static ZCONST char Far ErrUnzipFile[] = " error: %s%s %s\n"; -static ZCONST char Far ErrUnzipNoFile[] = "\n error: %s%s\n"; -static ZCONST char Far NotEnoughMem[] = "not enough memory to "; -static ZCONST char Far InvalidComprData[] = "invalid compressed data to "; -static ZCONST char Far Inflate[] = "inflate"; - -#ifndef SFX - static ZCONST char Far Explode[] = "explode"; -#ifndef LZW_CLEAN - static ZCONST char Far Unshrink[] = "unshrink"; -#endif -#endif - -#if (!defined(DELETE_IF_FULL) || !defined(HAVE_UNLINK)) - static ZCONST char Far FileTruncated[] = - "warning: %s is probably truncated\n"; -#endif - -static ZCONST char Far FileUnknownCompMethod[] = - "%s: unknown compression method\n"; -static ZCONST char Far BadCRC[] = " bad CRC %08lx (should be %08lx)\n"; - - /* TruncEAs[] also used in OS/2 mapname(), close_outfile() */ -char ZCONST Far TruncEAs[] = " compressed EA data missing (%d bytes)%s"; -char ZCONST Far TruncNTSD[] = - " compressed WinNT security data missing (%d bytes)%s"; - -#ifndef SFX - static ZCONST char Far InconsistEFlength[] = "bad extra-field entry:\n \ - EF block length (%u bytes) exceeds remaining EF data (%u bytes)\n"; - static ZCONST char Far InvalidComprDataEAs[] = - " invalid compressed data for EAs\n"; -# if (defined(WIN32) && defined(NTSD_EAS)) - static ZCONST char Far InvalidSecurityEAs[] = - " EAs fail security check\n"; -# endif - static ZCONST char Far UnsuppNTSDVersEAs[] = - " unsupported NTSD EAs version %d\n"; - static ZCONST char Far BadCRC_EAs[] = " bad CRC for extended attributes\n"; - static ZCONST char Far UnknComprMethodEAs[] = - " unknown compression method for EAs (%u)\n"; - static ZCONST char Far NotEnoughMemEAs[] = - " out of memory while inflating EAs\n"; - static ZCONST char Far UnknErrorEAs[] = - " unknown error on extended attributes\n"; -#endif /* !SFX */ - -static ZCONST char Far UnsupportedExtraField[] = - "\nerror: unsupported extra-field compression type (%u)--skipping\n"; -static ZCONST char Far BadExtraFieldCRC[] = - "error [%s]: bad extra-field CRC %08lx (should be %08lx)\n"; - - - - - -/**************************************/ -/* Function extract_or_test_files() */ -/**************************************/ - -int extract_or_test_files(__G) /* return PK-type error code */ - __GDEF -{ - uch *cd_inptr; - unsigned i, j, filnum=0, blknum=0; - int cd_incnt, renamed, query; - int error, error_in_archive=PK_COOL, *fn_matched=NULL, *xn_matched=NULL; -#ifdef WINDLL - int done_once = 0; -#else - extent len; -#endif - unsigned members_remaining, num_skipped=0, num_bad_pwd=0; - long cd_bufstart, bufstart, inbuf_offset, request; - LONGINT old_extra_bytes = 0L; -#ifdef SET_DIR_ATTRIB - unsigned num_dirs=0; - dirtime *dirlist=(dirtime *)NULL, **sorted_dirlist=(dirtime **)NULL; -#endif - - -/*--------------------------------------------------------------------------- - The basic idea of this function is as follows. Since the central di- - rectory lies at the end of the zipfile and the member files lie at the - beginning or middle or wherever, it is not very desirable to simply - read a central directory entry, jump to the member and extract it, and - then jump back to the central directory. In the case of a large zipfile - this would lead to a whole lot of disk-grinding, especially if each mem- - ber file is small. Instead, we read from the central directory the per- - tinent information for a block of files, then go extract/test the whole - block. Thus this routine contains two small(er) loops within a very - large outer loop: the first of the small ones reads a block of files - from the central directory; the second extracts or tests each file; and - the outer one loops over blocks. There's some file-pointer positioning - stuff in between, but that's about it. Btw, it's because of this jump- - ing around that we can afford to be lenient if an error occurs in one of - the member files: we should still be able to go find the other members, - since we know the offset of each from the beginning of the zipfile. - ---------------------------------------------------------------------------*/ - - G.pInfo = G.info; - members_remaining = (unsigned)G.ecrec.total_entries_central_dir; - -#if CRYPT - G.newzip = TRUE; -#endif -#ifndef SFX - G.reported_backslash = FALSE; -#endif - - /* malloc space for check on unmatched filespecs (OK if one or both NULL) */ - if (G.filespecs > 0 && - (fn_matched=(int *)malloc(G.filespecs*sizeof(int))) != (int *)NULL) - for (i = 0; i < G.filespecs; ++i) - fn_matched[i] = FALSE; - if (G.xfilespecs > 0 && - (xn_matched=(int *)malloc(G.xfilespecs*sizeof(int))) != (int *)NULL) - for (i = 0; i < G.xfilespecs; ++i) - xn_matched[i] = FALSE; - -/*--------------------------------------------------------------------------- - Begin main loop over blocks of member files. We know the entire central - directory is on this disk: we would not have any of this information un- - less the end-of-central-directory record was on this disk, and we would - not have gotten to this routine unless this is also the disk on which - the central directory starts. In practice, this had better be the ONLY - disk in the archive, but we'll add multi-disk support soon. - ---------------------------------------------------------------------------*/ - - while (members_remaining) { - j = 0; -#ifdef AMIGA - memzero(G.filenotes, DIR_BLKSIZ * sizeof(char *)); -#endif - - /* - * Loop through files in central directory, storing offsets, file - * attributes, case-conversion and text-conversion flags until block - * size is reached. - */ - - while (members_remaining && (j < DIR_BLKSIZ)) { - --members_remaining; - G.pInfo = &G.info[j]; - - if (readbuf(__G__ G.sig, 4) == 0) { - error_in_archive = PK_EOF; - members_remaining = 0; /* ...so no more left to do */ - break; - } - if (strncmp(G.sig, central_hdr_sig, 4)) { /* just to make sure */ - Info(slide, 0x401, ((char *)slide, LoadFarString(CentSigMsg), - j + blknum*DIR_BLKSIZ + 1)); - Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg))); - error_in_archive = PK_BADERR; - members_remaining = 0; /* ...so no more left to do */ - break; - } - /* process_cdir_file_hdr() sets pInfo->hostnum, pInfo->lcflag */ - if ((error = process_cdir_file_hdr(__G)) != PK_COOL) { - error_in_archive = error; /* only PK_EOF defined */ - members_remaining = 0; /* ...so no more left to do */ - break; - } - if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) != - PK_COOL) - { - if (error > error_in_archive) - error_in_archive = error; - if (error > PK_WARN) { /* fatal: no more left to do */ - Info(slide, 0x401, ((char *)slide, LoadFarString(FilNamMsg), - FnFilter1(G.filename), "central")); - members_remaining = 0; - break; - } - } - if ((error = do_string(__G__ G.crec.extra_field_length, - EXTRA_FIELD)) != 0) - { - if (error > error_in_archive) - error_in_archive = error; - if (error > PK_WARN) { /* fatal */ - Info(slide, 0x401, ((char *)slide, - LoadFarString(ExtFieldMsg), - FnFilter1(G.filename), "central")); - members_remaining = 0; - break; - } - } -#ifdef AMIGA - G.filenote_slot = j; - if ((error = do_string(__G__ G.crec.file_comment_length, - uO.N_flag ? FILENOTE : SKIP)) != PK_COOL) -#else - if ((error = do_string(__G__ G.crec.file_comment_length, SKIP)) - != PK_COOL) -#endif - { - if (error > error_in_archive) - error_in_archive = error; - if (error > PK_WARN) { /* fatal */ - Info(slide, 0x421, ((char *)slide, - LoadFarString(BadFileCommLength), - FnFilter1(G.filename))); - members_remaining = 0; - break; - } - } - if (G.process_all_files) { - if (store_info(__G)) - ++j; /* file is OK; info[] stored; continue with next */ - else - ++num_skipped; - } else { - int do_this_file; - - if (G.filespecs == 0) - do_this_file = TRUE; - else { /* check if this entry matches an `include' argument */ - do_this_file = FALSE; - for (i = 0; i < G.filespecs; i++) - if (match(G.filename, G.pfnames[i], uO.C_flag)) { - do_this_file = TRUE; /* ^-- ignore case or not? */ - if (fn_matched) - fn_matched[i] = TRUE; - break; /* found match, so stop looping */ - } - } - if (do_this_file) { /* check if this is an excluded file */ - for (i = 0; i < G.xfilespecs; i++) - if (match(G.filename, G.pxnames[i], uO.C_flag)) { - do_this_file = FALSE; /* ^-- ignore case or not? */ - if (xn_matched) - xn_matched[i] = TRUE; - break; - } - } - if (do_this_file) { - if (store_info(__G)) - ++j; /* file is OK */ - else - ++num_skipped; /* unsupp. compression or encryption */ - } - } /* end if (process_all_files) */ - - - } /* end while-loop (adding files to current block) */ - - /* save position in central directory so can come back later */ - cd_bufstart = G.cur_zipfile_bufstart; - cd_inptr = G.inptr; - cd_incnt = G.incnt; - - /*----------------------------------------------------------------------- - Second loop: process files in current block, extracting or testing - each one. - -----------------------------------------------------------------------*/ - - for (i = 0; i < j; ++i) { - filnum++; /* filnum = i + blknum*DIR_BLKSIZ + 1; */ - G.pInfo = &G.info[i]; -#ifdef NOVELL_BUG_FAILSAFE - G.dne = FALSE; /* assume file exists until stat() says otherwise */ -#endif - - /* if the target position is not within the current input buffer - * (either haven't yet read far enough, or (maybe) skipping back- - * ward), skip to the target position and reset readbuf(). */ - - /* ZLSEEK(pInfo->offset): */ - request = G.pInfo->offset + G.extra_bytes; - inbuf_offset = request % INBUFSIZ; - bufstart = request - inbuf_offset; - - Trace((stderr, "\ndebug: request = %ld, inbuf_offset = %ld\n", - request, inbuf_offset)); - Trace((stderr, - "debug: bufstart = %ld, cur_zipfile_bufstart = %ld\n", - bufstart, G.cur_zipfile_bufstart)); - if (request < 0) { - Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(SeekMsg), - G.zipfn, LoadFarString(ReportMsg))); - error_in_archive = PK_ERR; - if (filnum == 1 && G.extra_bytes != 0L) { - Info(slide, 0x401, ((char *)slide, - LoadFarString(AttemptRecompensate))); - old_extra_bytes = G.extra_bytes; - G.extra_bytes = 0L; - request = G.pInfo->offset; /* could also check if != 0 */ - inbuf_offset = request % INBUFSIZ; - bufstart = request - inbuf_offset; - Trace((stderr, "debug: request = %ld, inbuf_offset = %ld\n", - request, inbuf_offset)); - Trace((stderr, - "debug: bufstart = %ld, cur_zipfile_bufstart = %ld\n", - bufstart, G.cur_zipfile_bufstart)); - } else { - error_in_archive = PK_BADERR; - continue; /* this one hosed; try next */ - } - } - /* try again */ - if (request < 0) { - Trace((stderr, "debug: recompensated request still < 0\n")); - Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(SeekMsg), - G.zipfn, LoadFarString(ReportMsg))); - error_in_archive = PK_BADERR; - continue; - } else if (bufstart != G.cur_zipfile_bufstart) { - Trace((stderr, "debug: bufstart != cur_zipfile_bufstart\n")); -#ifdef USE_STRM_INPUT - fseek((FILE *)G.zipfd,(LONGINT)bufstart,SEEK_SET); - G.cur_zipfile_bufstart = ftell((FILE *)G.zipfd); -#else /* !USE_STRM_INPUT */ - G.cur_zipfile_bufstart = - lseek(G.zipfd,(LONGINT)bufstart,SEEK_SET); -#endif /* ?USE_STRM_INPUT */ - if ((G.incnt = read(G.zipfd,(char *)G.inbuf,INBUFSIZ)) <= 0) - { - Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), - filnum, "lseek", bufstart)); - error_in_archive = PK_BADERR; - continue; /* can still do next file */ - } - G.inptr = G.inbuf + (int)inbuf_offset; - G.incnt -= (int)inbuf_offset; - } else { - G.incnt += (int)(G.inptr-G.inbuf) - (int)inbuf_offset; - G.inptr = G.inbuf + (int)inbuf_offset; - } - - /* should be in proper position now, so check for sig */ - if (readbuf(__G__ G.sig, 4) == 0) { /* bad offset */ - Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), - filnum, "EOF", request)); - error_in_archive = PK_BADERR; - continue; /* but can still try next one */ - } - if (strncmp(G.sig, local_hdr_sig, 4)) { - Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), - filnum, LoadFarStringSmall(LocalHdrSig), request)); - /* - GRRDUMP(G.sig, 4) - GRRDUMP(local_hdr_sig, 4) - */ - error_in_archive = PK_ERR; - if ((filnum == 1 && G.extra_bytes != 0L) || - (G.extra_bytes == 0L && old_extra_bytes != 0L)) { - Info(slide, 0x401, ((char *)slide, - LoadFarString(AttemptRecompensate))); - if (G.extra_bytes) { - old_extra_bytes = G.extra_bytes; - G.extra_bytes = 0L; - } else - G.extra_bytes = old_extra_bytes; /* third attempt */ - ZLSEEK(G.pInfo->offset) - if (readbuf(__G__ G.sig, 4) == 0) { /* bad offset */ - Info(slide, 0x401, ((char *)slide, - LoadFarString(OffsetMsg), filnum, "EOF", request)); - error_in_archive = PK_BADERR; - continue; /* but can still try next one */ - } - if (strncmp(G.sig, local_hdr_sig, 4)) { - Info(slide, 0x401, ((char *)slide, - LoadFarString(OffsetMsg), filnum, - LoadFarStringSmall(LocalHdrSig), request)); - error_in_archive = PK_BADERR; - continue; - } - } else - continue; /* this one hosed; try next */ - } - if ((error = process_local_file_hdr(__G)) != PK_COOL) { - Info(slide, 0x421, ((char *)slide, LoadFarString(BadLocalHdr), - filnum)); - error_in_archive = error; /* only PK_EOF defined */ - continue; /* can still try next one */ - } - if ((error = do_string(__G__ G.lrec.filename_length, DS_FN)) != - PK_COOL) - { - if (error > error_in_archive) - error_in_archive = error; - if (error > PK_WARN) { - Info(slide, 0x401, ((char *)slide, LoadFarString(FilNamMsg), - FnFilter1(G.filename), "local")); - continue; /* go on to next one */ - } - } - if (G.extra_field != (uch *)NULL) { - free(G.extra_field); - G.extra_field = (uch *)NULL; - } - if ((error = - do_string(__G__ G.lrec.extra_field_length, EXTRA_FIELD)) != 0) - { - if (error > error_in_archive) - error_in_archive = error; - if (error > PK_WARN) { - Info(slide, 0x401, ((char *)slide, - LoadFarString(ExtFieldMsg), - FnFilter1(G.filename), "local")); - continue; /* go on */ - } - } - -#if CRYPT - if (G.pInfo->encrypted && - (error = decrypt(__G__ uO.pwdarg)) != PK_COOL) { - if (error == PK_WARN) { - if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) - Info(slide, 0x401, ((char *)slide, - LoadFarString(SkipIncorrectPasswd), - FnFilter1(G.filename))); - ++num_bad_pwd; - } else { /* (error > PK_WARN) */ - if (error > error_in_archive) - error_in_archive = error; - Info(slide, 0x401, ((char *)slide, - LoadFarString(SkipCannotGetPasswd), - FnFilter1(G.filename))); - } - continue; /* go on to next file */ - } -#endif /* CRYPT */ - - /* - * just about to extract file: if extracting to disk, check if - * already exists, and if so, take appropriate action according to - * fflag/uflag/overwrite_all/etc. (we couldn't do this in upper - * loop because we don't store the possibly renamed filename[] in - * info[]) - */ -#ifdef DLL - if (!uO.tflag && !uO.cflag && !G.redirect_data) -#else - if (!uO.tflag && !uO.cflag) -#endif - { - renamed = FALSE; /* user hasn't renamed output file yet */ - -startover: - query = FALSE; - /* for files from DOS FAT, check for use of backslash instead - * of slash as directory separator (bug in some zipper(s); so - * far, not a problem in HPFS, NTFS or VFAT systems) - */ -#ifndef SFX - if (G.pInfo->hostnum == FS_FAT_ && !strchr(G.filename, '/')) { - char *p=G.filename-1; - - while (*++p) { - if (*p == '\\') { - if (!G.reported_backslash) { - Info(slide, 0x21, ((char *)slide, - LoadFarString(BackslashPathSep), G.zipfn)); - G.reported_backslash = TRUE; - if (!error_in_archive) - error_in_archive = PK_WARN; - } - *p = '/'; - } - } - } -#endif /* !SFX */ - - /* mapname can create dirs if not freshening or if renamed */ - if ((error = mapname(__G__ renamed)) > PK_WARN) { - if (error == IZ_CREATED_DIR) { -#ifdef SET_DIR_ATTRIB - dirtime *d_entry; - - d_entry = (dirtime *)malloc(sizeof(dirtime)); - if (d_entry == (dirtime *)NULL) { - Info(slide, 0x401, ((char *)slide, - LoadFarString(DirlistEntryNoMem))); - } else { - unsigned eb_izux_flg; - - d_entry->next = dirlist; - dirlist = d_entry; - dirlist->fn = - (char *)malloc(strlen(G.filename) + 1); - if (dirlist->fn == (char *)NULL) { - Info(slide, 0x401, ((char *)slide, - LoadFarString(DirlistEntryNoMem))); - dirlist = d_entry->next; - free(d_entry); - if (!error_in_archive) - error_in_archive = PK_WARN; - continue; - } - strcpy(dirlist->fn, G.filename); - dirlist->perms = G.pInfo->file_attr; -#ifdef USE_EF_UT_TIME - eb_izux_flg = G.extra_field? ef_scan_for_izux( - G.extra_field, G.lrec.extra_field_length, 0, - G.lrec.last_mod_dos_datetime, -#ifdef IZ_CHECK_TZ - (G.tz_is_valid ? &(dirlist->u.t3) : NULL), -#else - &(dirlist->u.t3), -#endif - dirlist->uidgid) - : 0; -#else /* !USE_EF_UT_TIME */ - eb_izux_flg = 0; -#endif /* ?USE_EF_UT_TIME */ - if (eb_izux_flg & EB_UT_FL_MTIME) { - TTrace((stderr, - "\nextract: Unix dir e.f. modtime = %ld\n", - dirlist->u.t3.mtime)); - } else { - dirlist->u.t3.mtime = dos_to_unix_time( - G.lrec.last_mod_dos_datetime); - } - if (eb_izux_flg & EB_UT_FL_ATIME) { - TTrace((stderr, - "\nextract: Unix dir e.f. actime = %ld\n", - dirlist->u.t3.atime)); - } else { - dirlist->u.t3.atime = - dirlist->u.t3.mtime; - } - dirlist->have_uidgid = - (uO.X_flag && (eb_izux_flg & EB_UX2_VALID)); - ++num_dirs; - } -#endif /* SET_DIR_ATTRIB */ - } else if (error == IZ_VOL_LABEL) { -#ifdef DOS_OS2_W32 - Info(slide, 0x401, ((char *)slide, - LoadFarString(SkipVolumeLabel), - FnFilter1(G.filename), - uO.volflag? "hard disk " : "")); -#else - Info(slide, 1, ((char *)slide, - LoadFarString(SkipVolumeLabel), - FnFilter1(G.filename), "")); -#endif - /* if (!error_in_archive) - error_in_archive = PK_WARN; */ - } else if (error > PK_ERR && error_in_archive < PK_ERR) - error_in_archive = PK_ERR; - Trace((stderr, "mapname(%s) returns error = %d\n", - FnFilter1(G.filename), error)); - continue; /* go on to next file */ - } - -#ifdef QDOS - QFilename(__G__ G.filename); -#endif - switch (check_for_newer(__G__ G.filename)) { - case DOES_NOT_EXIST: -#ifdef NOVELL_BUG_FAILSAFE - G.dne = TRUE; /* stat() says file DOES NOT EXIST */ -#endif - /* if freshening, don't skip if just renamed */ - if (uO.fflag && !renamed) - continue; /* freshen (no new files): skip */ - break; - case EXISTS_AND_OLDER: - if (uO.overwrite_none) { -#ifdef WINDLL - char szStr[FILNAMSIZ+40]; /* add. space for text */ - - if ((!G.prompt_always) || (done_once)) { - sprintf(szStr, - "Target file exists.\nSkipping %s\n", - FnFilter1(G.filename)); - win_fprintf((zvoid *)&G, stdout, - strlen(szStr), szStr); - } else { - query = TRUE; - break; - } -#endif /* WINDLL */ - continue; /* never overwrite: skip file */ - } -#ifdef UNIXBACKUP - if (!uO.overwrite_all && !uO.B_flag) -#else - if (!uO.overwrite_all) -#endif - query = TRUE; - break; - case EXISTS_AND_NEWER: /* (or equal) */ - if (uO.overwrite_none || (uO.uflag && !renamed)) { -#ifdef WINDLL - char szStr[FILNAMSIZ+40]; /* add. space for text */ - - if ((!G.prompt_always) || (done_once)) { - sprintf(szStr, - "Target file newer.\nSkipping %s\n", - FnFilter1(G.filename)); - win_fprintf((zvoid *)&G, stdout, - strlen(szStr), szStr); - } else { - query = TRUE; - break; - } -#endif /* WINDLL */ - continue; /* skip if update/freshen & orig name */ - } -#ifdef UNIXBACKUP - if (!uO.overwrite_all && !uO.B_flag) -#else - if (!uO.overwrite_all) -#endif - query = TRUE; - break; - } - if (query) { -#ifdef WINDLL - switch (G.lpUserFunctions->replace != NULL ? - (*G.lpUserFunctions->replace)(G.filename) : - IDM_REPLACE_NONE) { - case IDM_REPLACE_RENAME: - _ISO_INTERN(G.filename); - renamed = TRUE; - goto startover; - case IDM_REPLACE_YES: - break; - case IDM_REPLACE_ALL: - uO.overwrite_all = TRUE; - uO.overwrite_none = FALSE; /* just to make sure */ - break; - case IDM_REPLACE_NONE: - uO.overwrite_none = TRUE; - uO.overwrite_all = FALSE; /* make sure */ - done_once = TRUE; - /* FALL THROUGH, skip */ - case IDM_REPLACE_NO: - { - char szStr[FILNAMSIZ+40]; - - sprintf(szStr, - "Target file newer.\nSkipping %s\n", - FnFilter1(G.filename)); - win_fprintf((zvoid *)&G, stdout, - strlen(szStr), szStr); - } - continue; - } -#else /* !WINDLL */ -reprompt: - Info(slide, 0x81, ((char *)slide, - LoadFarString(ReplaceQuery), - FnFilter1(G.filename))); - if (fgets(G.answerbuf, 9, stdin) == (char *)NULL) { - Info(slide, 1, ((char *)slide, - LoadFarString(AssumeNone))); - *G.answerbuf = 'N'; - if (!error_in_archive) - error_in_archive = 1; /* not extracted: warning */ - } - switch (*G.answerbuf) { - case 'A': /* dangerous option: force caps */ - uO.overwrite_all = TRUE; - uO.overwrite_none = FALSE; /* just to make sure */ - break; - case 'r': - case 'R': - do { - Info(slide, 0x81, ((char *)slide, - LoadFarString(NewNameQuery))); - fgets(G.filename, FILNAMSIZ, stdin); - /* usually get \n here: better check for it */ - len = strlen(G.filename); - if (G.filename[len-1] == '\n') - G.filename[--len] = '\0'; - } while (len == 0); -#ifdef WIN32 /* WIN32 fgets( ... , stdin) returns OEM coded strings */ - _OEM_INTERN(G.filename); -#endif - renamed = TRUE; - goto startover; /* sorry for a goto */ - case 'y': - case 'Y': - break; - case 'N': - uO.overwrite_none = TRUE; - uO.overwrite_all = FALSE; /* make sure */ - /* FALL THROUGH, skip */ - case 'n': - continue; /* skip file */ - default: - Info(slide, 1, ((char *)slide, - LoadFarString(InvalidResponse), *G.answerbuf)); - goto reprompt; /* yet another goto? */ - } /* end switch (*answerbuf) */ -#endif /* ?WINDLL */ - } /* end if (query) */ - } /* end if (extracting to disk) */ - -#ifdef DLL - if ((G.statreportcb != NULL) && - (*G.statreportcb)(__G__ UZ_ST_START_EXTRACT, G.zipfn, - G.filename, NULL)) { - if (fn_matched) - free((zvoid *)fn_matched); - if (xn_matched) - free((zvoid *)xn_matched); - return IZ_CTRLC; /* cancel operation by user request */ - } -#endif -#ifdef MACOS /* MacOS is no preemptive OS, thus call event-handling by hand */ - UserStop(); -#endif -#ifdef AMIGA - G.filenote_slot = i; -#endif - G.disk_full = 0; - if ((error = extract_or_test_member(__G)) != PK_COOL) { - if (error > error_in_archive) - error_in_archive = error; /* ...and keep going */ -#ifdef DLL - if (G.disk_full > 1 || error_in_archive == IZ_CTRLC) { -#else - if (G.disk_full > 1) { -#endif - if (fn_matched) - free((zvoid *)fn_matched); - if (xn_matched) - free((zvoid *)xn_matched); - return error_in_archive; /* (unless disk full) */ - } - } -#ifdef DLL - if ((G.statreportcb != NULL) && - (*G.statreportcb)(__G__ UZ_ST_FINISH_MEMBER, G.zipfn, - G.filename, (zvoid *)&G.lrec.ucsize)) { - if (fn_matched) - free((zvoid *)fn_matched); - if (xn_matched) - free((zvoid *)xn_matched); - return IZ_CTRLC; /* cancel operation by user request */ - } -#endif -#ifdef MACOS /* MacOS is no preemptive OS, thus call event-handling by hand */ - UserStop(); -#endif - } /* end for-loop (i: files in current block) */ - - - /* - * Jump back to where we were in the central directory, then go and do - * the next batch of files. - */ - -#ifdef USE_STRM_INPUT - fseek((FILE *)G.zipfd, (LONGINT)cd_bufstart, SEEK_SET); - G.cur_zipfile_bufstart = ftell((FILE *)G.zipfd); -#else /* !USE_STRM_INPUT */ - G.cur_zipfile_bufstart = lseek(G.zipfd,(LONGINT)cd_bufstart,SEEK_SET); -#endif /* ?USE_STRM_INPUT */ - read(G.zipfd, (char *)G.inbuf, INBUFSIZ); /* been here before... */ - G.inptr = cd_inptr; - G.incnt = cd_incnt; - ++blknum; - -#ifdef TEST - printf("\ncd_bufstart = %ld (%.8lXh)\n", cd_bufstart, cd_bufstart); - printf("cur_zipfile_bufstart = %ld (%.8lXh)\n", cur_zipfile_bufstart, - cur_zipfile_bufstart); - printf("inptr-inbuf = %d\n", G.inptr-G.inbuf); - printf("incnt = %d\n\n", G.incnt); -#endif - - } /* end while-loop (blocks of files in central directory) */ - -/*--------------------------------------------------------------------------- - Go back through saved list of directories, sort and set times/perms/UIDs - and GIDs from the deepest level on up. - ---------------------------------------------------------------------------*/ - -#ifdef SET_DIR_ATTRIB - if (num_dirs > 0) { - sorted_dirlist = (dirtime **)malloc(num_dirs*sizeof(dirtime *)); - if (sorted_dirlist == (dirtime **)NULL) { - Info(slide, 0x401, ((char *)slide, - LoadFarString(DirlistSortNoMem))); - while (dirlist != (dirtime *)NULL) { - dirtime *d = dirlist; - - dirlist = dirlist->next; - free(d); - } - } else { - if (num_dirs == 1) - sorted_dirlist[0] = dirlist; - else { - for (i = 0; i < num_dirs; ++i) { - sorted_dirlist[i] = dirlist; - dirlist = dirlist->next; - } - qsort((char *)sorted_dirlist, num_dirs, sizeof(dirtime *), - dircomp); - } - - Trace((stderr, "setting directory times/perms/attributes\n")); - for (i = 0; i < num_dirs; ++i) { - dirtime *d = sorted_dirlist[i]; - - Trace((stderr, "dir = %s\n", d->fn)); - if ((error = set_direc_attribs(__G__ d)) != PK_OK) { - Info(slide, 0x201, ((char *)slide, - LoadFarString(DirlistSetAttrFailed), d->fn)); - if (!error_in_archive) - error_in_archive = error; - } - free(d->fn); - free(d); - } - free(sorted_dirlist); - } - } -#endif /* SET_DIR_ATTRIB */ - -#if (defined(WIN32) && defined(NTSD_EAS)) - process_defer_NT(__G); /* process any deferred items for this .zip file */ -#endif - -/*--------------------------------------------------------------------------- - Check for unmatched filespecs on command line and print warning if any - found. Free allocated memory. - ---------------------------------------------------------------------------*/ - - if (fn_matched) { - for (i = 0; i < G.filespecs; ++i) - if (!fn_matched[i]) { -#ifdef DLL - if (!G.redirect_data && !G.redirect_text) - Info(slide, 0x401, ((char *)slide, - LoadFarString(FilenameNotMatched), G.pfnames[i])); - else - setFileNotFound(__G); -#else - Info(slide, 1, ((char *)slide, - LoadFarString(FilenameNotMatched), G.pfnames[i])); -#endif - if (error_in_archive <= PK_WARN) - error_in_archive = PK_FIND; /* some files not found */ - } - free((zvoid *)fn_matched); - } - if (xn_matched) { - for (i = 0; i < G.xfilespecs; ++i) - if (!xn_matched[i]) - Info(slide, 0x401, ((char *)slide, - LoadFarString(ExclFilenameNotMatched), G.pxnames[i])); - free((zvoid *)xn_matched); - } - -/*--------------------------------------------------------------------------- - Double-check that we're back at the end-of-central-directory record, and - print quick summary of results, if we were just testing the archive. We - send the summary to stdout so that people doing the testing in the back- - ground and redirecting to a file can just do a "tail" on the output file. - ---------------------------------------------------------------------------*/ - -#ifndef SFX - if (readbuf(__G__ G.sig, 4) == 0) - error_in_archive = PK_EOF; - if (strncmp(G.sig, end_central_sig, 4)) { /* just to make sure */ - Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg))); - Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg))); - if (!error_in_archive) /* don't overwrite stronger error */ - error_in_archive = PK_WARN; - } -#endif /* !SFX */ - if (uO.tflag) { - unsigned num = filnum - num_bad_pwd; - - if (uO.qflag < 2) { /* GRR 930710: was (uO.qflag == 1) */ - if (error_in_archive) - Info(slide, 0, ((char *)slide, LoadFarString(ErrorInArchive), - (error_in_archive == 1)? "warning-" : "", G.zipfn)); - else if (num == 0) - Info(slide, 0, ((char *)slide, LoadFarString(ZeroFilesTested), - G.zipfn)); - else if (G.process_all_files && (num_skipped+num_bad_pwd == 0)) - Info(slide, 0, ((char *)slide, LoadFarString(NoErrInCompData), - G.zipfn)); - else - Info(slide, 0, ((char *)slide, LoadFarString(NoErrInTestedFiles) - , G.zipfn, num, (num==1)? "":"s")); - if (num_skipped > 0) - Info(slide, 0, ((char *)slide, LoadFarString(FilesSkipped), - num_skipped, (num_skipped==1)? "":"s")); -#if CRYPT - if (num_bad_pwd > 0) - Info(slide, 0, ((char *)slide, LoadFarString(FilesSkipBadPasswd) - , num_bad_pwd, (num_bad_pwd==1)? "":"s")); -#endif /* CRYPT */ - } else if ((uO.qflag == 0) && !error_in_archive && (num == 0)) - Info(slide, 0, ((char *)slide, LoadFarString(ZeroFilesTested), - G.zipfn)); - } - - /* give warning if files not tested or extracted (first condition can still - * happen if zipfile is empty and no files specified on command line) */ - - if ((filnum == 0) && error_in_archive <= PK_WARN) { - if (num_skipped > 0) - error_in_archive = IZ_UNSUP; /* unsupport. compression/encryption */ - else - error_in_archive = PK_FIND; /* no files found at all */ - } -#if CRYPT - else if ((filnum == num_bad_pwd) && error_in_archive <= PK_WARN) - error_in_archive = IZ_BADPWD; /* bad passwd => all files skipped */ -#endif - else if ((num_skipped > 0) && error_in_archive <= PK_WARN) - error_in_archive = IZ_UNSUP; /* was PK_WARN; Jean-loup complained */ -#if CRYPT - else if ((num_bad_pwd > 0) && !error_in_archive) - error_in_archive = PK_WARN; -#endif - - return error_in_archive; - -} /* end function extract_or_test_files() */ - - - - - -/***************************/ -/* Function store_info() */ -/***************************/ - -static int store_info(__G) /* return 0 if skipping, 1 if OK */ - __GDEF -{ -#ifdef SFX -# define UNKN_COMPR \ - (G.crec.compression_method!=STORED && G.crec.compression_method!=DEFLATED) -#else -# ifdef COPYRIGHT_CLEAN /* no reduced files */ -# define UNKN_RED (G.crec.compression_method >= REDUCED1 && \ - G.crec.compression_method <= REDUCED4) -# else -# define UNKN_RED FALSE /* reducing not unknown */ -# endif -# ifdef LZW_CLEAN /* no shrunk files */ -# define UNKN_SHR (G.crec.compression_method == SHRUNK) -# else -# define UNKN_SHR FALSE /* unshrinking not unknown */ -# endif -# define UNKN_COMPR (UNKN_RED || UNKN_SHR || \ - G.crec.compression_method==TOKENIZED || G.crec.compression_method>DEFLATED) -#endif - -/*--------------------------------------------------------------------------- - Check central directory info for version/compatibility requirements. - ---------------------------------------------------------------------------*/ - - G.pInfo->encrypted = G.crec.general_purpose_bit_flag & 1; /* bit field */ - G.pInfo->ExtLocHdr = (G.crec.general_purpose_bit_flag & 8) == 8; /* bit */ - G.pInfo->textfile = G.crec.internal_file_attributes & 1; /* bit field */ - G.pInfo->crc = G.crec.crc32; - G.pInfo->compr_size = G.crec.csize; - G.pInfo->uncompr_size = G.crec.ucsize; - - switch (uO.aflag) { - case 0: - G.pInfo->textmode = FALSE; /* bit field */ - break; - case 1: - G.pInfo->textmode = G.pInfo->textfile; /* auto-convert mode */ - break; - default: /* case 2: */ - G.pInfo->textmode = TRUE; - break; - } - - if (G.crec.version_needed_to_extract[1] == VMS_) { - if (G.crec.version_needed_to_extract[0] > VMS_UNZIP_VERSION) { - if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) - Info(slide, 0x401, ((char *)slide, LoadFarString(VersionMsg), - FnFilter1(G.filename), "VMS", - G.crec.version_needed_to_extract[0] / 10, - G.crec.version_needed_to_extract[0] % 10, - VMS_UNZIP_VERSION / 10, VMS_UNZIP_VERSION % 10)); - return 0; - } -#ifndef VMS /* won't be able to use extra field, but still have data */ - else if (!uO.tflag && !uO.overwrite_all) { /* if -o, extract anyway */ - Info(slide, 0x481, ((char *)slide, LoadFarString(VMSFormatQuery), - FnFilter1(G.filename))); - fgets(G.answerbuf, 9, stdin); - if ((*G.answerbuf != 'y') && (*G.answerbuf != 'Y')) - return 0; - } -#endif /* !VMS */ - /* usual file type: don't need VMS to extract */ - } else if (G.crec.version_needed_to_extract[0] > UNZIP_VERSION) { - if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) - Info(slide, 0x401, ((char *)slide, LoadFarString(VersionMsg), - FnFilter1(G.filename), "PK", - G.crec.version_needed_to_extract[0] / 10, - G.crec.version_needed_to_extract[0] % 10, - UNZIP_VERSION / 10, UNZIP_VERSION % 10)); - return 0; - } - - if UNKN_COMPR { - if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) { -#ifndef SFX - if (G.crec.compression_method < NUM_METHODS) - Info(slide, 0x401, ((char *)slide, LoadFarString(ComprMsgName), - FnFilter1(G.filename), - LoadFarStringSmall(ComprNames[G.crec.compression_method]))); - else -#endif - Info(slide, 0x401, ((char *)slide, LoadFarString(ComprMsgNum), - FnFilter1(G.filename), - G.crec.compression_method)); - } - return 0; - } -#if (!CRYPT) - if (G.pInfo->encrypted) { - if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) - Info(slide, 0x401, ((char *)slide, LoadFarString(SkipEncrypted), - FnFilter1(G.filename))); - return 0; - } -#endif /* !CRYPT */ - - /* map whatever file attributes we have into the local format */ - mapattr(__G); /* GRR: worry about return value later */ - - G.pInfo->offset = (long)G.crec.relative_offset_local_header; - return 1; - -} /* end function store_info() */ - - - - - -/***************************************/ -/* Function extract_or_test_member() */ -/***************************************/ - -static int extract_or_test_member(__G) /* return PK-type error code */ - __GDEF -{ - char *nul="[empty] ", *txt="[text] ", *bin="[binary]"; -#ifdef CMS_MVS - char *ebc="[ebcdic]"; -#endif - register int b; - int r, error=PK_COOL; -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) - ulg wsize; -#else -# define wsize WSIZE -#endif - - -/*--------------------------------------------------------------------------- - Initialize variables, buffers, etc. - ---------------------------------------------------------------------------*/ - - G.bits_left = 0; - G.bitbuf = 0L; /* unreduce and unshrink only */ - G.zipeof = 0; - G.newfile = TRUE; - G.crc32val = CRCVAL_INITIAL; - -#ifdef SYMLINKS - /* if file came from Unix and is a symbolic link and we are extracting - * to disk, prepare to restore the link */ - if (S_ISLNK(G.pInfo->file_attr) && - (G.pInfo->hostnum == UNIX_ || G.pInfo->hostnum == ATARI_ || - G.pInfo->hostnum == BEOS_) && - !uO.tflag && !uO.cflag && (G.lrec.ucsize > 0)) - G.symlnk = TRUE; - else - G.symlnk = FALSE; -#endif /* SYMLINKS */ - - if (uO.tflag) { - if (!uO.qflag) - Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "test", - FnFilter1(G.filename), "", "")); - } else { -#ifdef DLL - if (uO.cflag && !G.redirect_data) -#else - if (uO.cflag) -#endif - { -#if (defined(OS2) && defined(__IBMC__) && (__IBMC__ >= 200)) - G.outfile = freopen("", "wb", stdout); /* VAC++ ignores setmode */ -#else - G.outfile = stdout; -#endif -#ifdef DOS_FLX_H68_OS2_W32 -#if (defined(__HIGHC__) && !defined(FLEXOS)) - setmode(G.outfile, _BINARY); -#else /* !(defined(__HIGHC__) && !defined(FLEXOS)) */ - setmode(fileno(G.outfile), O_BINARY); -#endif /* ?(defined(__HIGHC__) && !defined(FLEXOS)) */ -# define NEWLINE "\r\n" -#else /* !DOS_FLX_H68_OS2_W32 */ -# define NEWLINE "\n" -#endif /* ?DOS_FLX_H68_OS2_W32 */ -#ifdef VMS - if (open_outfile(__G)) /* VMS: required even for stdout! */ - return PK_DISK; -#endif - } else if (open_outfile(__G)) - return PK_DISK; - } - -/*--------------------------------------------------------------------------- - Unpack the file. - ---------------------------------------------------------------------------*/ - - defer_leftover_input(__G); /* so NEXTBYTE bounds check will work */ - switch (G.lrec.compression_method) { - case STORED: - if (!uO.tflag && QCOND2) { -#ifdef SYMLINKS - if (G.symlnk) /* can also be deflated, but rarer... */ - Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), - "link", FnFilter1(G.filename), "", "")); - else -#endif /* SYMLINKS */ - Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), - "extract", FnFilter1(G.filename), - (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? - "" : (G.lrec.ucsize == 0L? nul : (G.pInfo->textfile? txt : - bin)), uO.cflag? NEWLINE : "")); - } -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) - if (G.redirect_slide) { - wsize = G.redirect_size; redirSlide = G.redirect_buffer; - } else { - wsize = WSIZE; redirSlide = slide; - } -#endif - G.outptr = redirSlide; - G.outcnt = 0L; - while ((b = NEXTBYTE) != EOF && !G.disk_full) { - *G.outptr++ = (uch)b; - if (++G.outcnt == wsize) { - flush(__G__ redirSlide, G.outcnt, 0); - G.outptr = redirSlide; - G.outcnt = 0L; - } - } - if (G.outcnt) /* flush final (partial) buffer */ - flush(__G__ redirSlide, G.outcnt, 0); - break; - -#ifndef SFX -#ifndef LZW_CLEAN - case SHRUNK: - if (!uO.tflag && QCOND2) { - Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), - LoadFarStringSmall(Unshrink), FnFilter1(G.filename), - (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? - "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); - } - if ((r = unshrink(__G)) != PK_COOL) { - if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) - Info(slide, 0x401, ((char *)slide, - LoadFarStringSmall(ErrUnzipFile), - LoadFarString(NotEnoughMem), - LoadFarStringSmall2(Unshrink), - FnFilter1(G.filename))); - else - Info(slide, 0x401, ((char *)slide, - LoadFarStringSmall(ErrUnzipNoFile), - LoadFarString(NotEnoughMem), - LoadFarStringSmall2(Unshrink))); - error = r; - } - break; -#endif /* !LZW_CLEAN */ - -#ifndef COPYRIGHT_CLEAN - case REDUCED1: - case REDUCED2: - case REDUCED3: - case REDUCED4: - if (!uO.tflag && QCOND2) { - Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), - "unreduc", FnFilter1(G.filename), - (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? - "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); - } - unreduce(__G); - break; -#endif /* !COPYRIGHT_CLEAN */ - - case IMPLODED: - if (!uO.tflag && QCOND2) { - Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), - "explod", FnFilter1(G.filename), - (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? - "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); - } - if (((r = explode(__G)) != 0) && (r != 5)) { /* treat 5 specially */ - if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) - Info(slide, 0x401, ((char *)slide, - LoadFarStringSmall(ErrUnzipFile), r == 3? - LoadFarString(NotEnoughMem) : - LoadFarString(InvalidComprData), - LoadFarStringSmall2(Explode), - FnFilter1(G.filename))); - else - Info(slide, 0x401, ((char *)slide, - LoadFarStringSmall(ErrUnzipNoFile), r == 3? - LoadFarString(NotEnoughMem) : - LoadFarString(InvalidComprData), - LoadFarStringSmall2(Explode))); - error = (r == 3)? PK_MEM3 : PK_ERR; - } - if (r == 5) { - int warning = ((ulg)G.used_csize <= G.lrec.csize); - - if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) - Info(slide, 0x401, ((char *)slide, LoadFarString(LengthMsg), - "", warning? "warning" : "error", G.used_csize, - G.lrec.ucsize, warning? " " : "", G.lrec.csize, - " [", FnFilter1(G.filename), "]")); - else - Info(slide, 0x401, ((char *)slide, LoadFarString(LengthMsg), - "\n", warning? "warning" : "error", G.used_csize, - G.lrec.ucsize, warning? " ":"", G.lrec.csize, - "", "", ".")); - error = warning? PK_WARN : PK_ERR; - } - break; -#endif /* !SFX */ - - case DEFLATED: - if (!uO.tflag && QCOND2) { - Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), - "inflat", FnFilter1(G.filename), - (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? - "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); - } -#ifndef USE_ZLIB /* zlib's function is called inflate(), too */ -# define UZinflate inflate -#endif - if ((r = UZinflate(__G)) != 0) { - if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) - Info(slide, 0x401, ((char *)slide, - LoadFarStringSmall(ErrUnzipFile), r == 3? - LoadFarString(NotEnoughMem) : - LoadFarString(InvalidComprData), - LoadFarStringSmall2(Inflate), - FnFilter1(G.filename))); - else - Info(slide, 0x401, ((char *)slide, - LoadFarStringSmall(ErrUnzipNoFile), r == 3? - LoadFarString(NotEnoughMem) : - LoadFarString(InvalidComprData), - LoadFarStringSmall2(Inflate))); - error = (r == 3)? PK_MEM3 : PK_ERR; - } - break; - - default: /* should never get to this point */ - Info(slide, 0x401, ((char *)slide, - LoadFarString(FileUnknownCompMethod), FnFilter1(G.filename))); - /* close and delete file before return? */ - undefer_input(__G); - return PK_WARN; - - } /* end switch (compression method) */ - -/*--------------------------------------------------------------------------- - Close the file and set its date and time (not necessarily in that order), - and make sure the CRC checked out OK. Logical-AND the CRC for 64-bit - machines (redundant on 32-bit machines). - ---------------------------------------------------------------------------*/ - -#ifdef VMS /* VMS: required even for stdout! (final flush) */ - if (!uO.tflag) /* don't close NULL file */ - close_outfile(__G); -#else -#ifdef DLL - if (!uO.tflag && (!uO.cflag || G.redirect_data)) { - if (G.redirect_data) - FINISH_REDIRECT(); - else - close_outfile(__G); - } -#else - if (!uO.tflag && !uO.cflag) /* don't close NULL file or stdout */ - close_outfile(__G); -#endif -#endif /* VMS */ - - /* GRR: CONVERT close_outfile() TO NON-VOID: CHECK FOR ERRORS! */ - - - if (G.disk_full) { /* set by flush() */ - if (G.disk_full > 1) { -#if (defined(DELETE_IF_FULL) && defined(HAVE_UNLINK)) - /* delete the incomplete file if we can */ - if (unlink(G.filename) != 0) - Trace((stderr, "extract.c: could not delete %s\n", - FnFilter1(G.filename))); -#else - /* warn user about the incomplete file */ - Info(slide, 0x421, ((char *)slide, LoadFarString(FileTruncated), - FnFilter1(G.filename))); -#endif - error = PK_DISK; - } else { - error = PK_WARN; - } - } - - if (error > PK_WARN) {/* don't print redundant CRC error if error already */ - undefer_input(__G); - return error; - } - if (G.crc32val != G.lrec.crc32) { - /* if quiet enough, we haven't output the filename yet: do it */ - if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) - Info(slide, 0x401, ((char *)slide, "%-22s ", - FnFilter1(G.filename))); - Info(slide, 0x401, ((char *)slide, LoadFarString(BadCRC), G.crc32val, - G.lrec.crc32)); -#if CRYPT - if (G.pInfo->encrypted) - Info(slide, 0x401, ((char *)slide, LoadFarString(MaybeBadPasswd))); -#endif - error = PK_ERR; - } else if (uO.tflag) { -#ifndef SFX - if (G.extra_field) { - if ((r = TestExtraField(__G__ G.extra_field, - G.lrec.extra_field_length)) > error) - error = r; - } else -#endif /* !SFX */ - if (!uO.qflag) - Info(slide, 0, ((char *)slide, " OK\n")); - } else { - if (QCOND2 && !error) /* GRR: is stdout reset to text mode yet? */ - Info(slide, 0, ((char *)slide, "\n")); - } - - undefer_input(__G); - return error; - -} /* end function extract_or_test_member() */ - - - - - -#ifndef SFX - -/*******************************/ -/* Function TestExtraField() */ -/*******************************/ - -static int TestExtraField(__G__ ef, ef_len) - __GDEF - uch *ef; - unsigned ef_len; -{ - ush ebID; - unsigned ebLen; - unsigned eb_cmpr_offs = 0; - int r; - - /* we know the regular compressed file data tested out OK, or else we - * wouldn't be here ==> print filename if any extra-field errors found - */ - while (ef_len >= EB_HEADSIZE) { - ebID = makeword(ef); - ebLen = (unsigned)makeword(ef+EB_LEN); - - if (ebLen > (ef_len - EB_HEADSIZE)) { - /* Discovered some extra field inconsistency! */ - if (uO.qflag) - Info(slide, 1, ((char *)slide, "%-22s ", - FnFilter1(G.filename))); - Info(slide, 1, ((char *)slide, LoadFarString(InconsistEFlength), - ebLen, (ef_len - EB_HEADSIZE))); - return PK_ERR; - } - - switch (ebID) { - case EF_OS2: - case EF_ACL: - case EF_MAC3: - case EF_BEOS: - switch (ebID) { - case EF_OS2: - case EF_ACL: - eb_cmpr_offs = EB_OS2_HLEN; - break; - case EF_MAC3: - if (ebLen >= EB_MAC3_HLEN && - (makeword(ef+(EB_HEADSIZE+EB_FLGS_OFFS)) - & EB_M3_FL_UNCMPR) && - (makelong(ef+EB_HEADSIZE) == ebLen - EB_MAC3_HLEN)) - eb_cmpr_offs = 0; - else - eb_cmpr_offs = EB_MAC3_HLEN; - break; - case EF_BEOS: - if (ebLen >= EB_BEOS_HLEN && - (*(ef+(EB_HEADSIZE+EB_FLGS_OFFS)) & EB_BE_FL_UNCMPR) && - (makelong(ef+EB_HEADSIZE) == ebLen - EB_BEOS_HLEN)) - eb_cmpr_offs = 0; - else - eb_cmpr_offs = EB_BEOS_HLEN; - break; - } - if ((r = test_compr_eb(__G__ ef, ebLen, eb_cmpr_offs, NULL)) - != PK_OK) { - if (uO.qflag) - Info(slide, 1, ((char *)slide, "%-22s ", - FnFilter1(G.filename))); - switch (r) { - case IZ_EF_TRUNC: - Info(slide, 1, ((char *)slide, - LoadFarString(TruncEAs), - ebLen-(eb_cmpr_offs+EB_CMPRHEADLEN), "\n")); - break; - case PK_ERR: - Info(slide, 1, ((char *)slide, - LoadFarString(InvalidComprDataEAs))); - break; - case PK_MEM3: - case PK_MEM4: - Info(slide, 1, ((char *)slide, - LoadFarString(NotEnoughMemEAs))); - break; - default: - if ((r & 0xff) != PK_ERR) - Info(slide, 1, ((char *)slide, - LoadFarString(UnknErrorEAs))); - else { - ush m = (ush)(r >> 8); - if (m == DEFLATED) /* GRR KLUDGE! */ - Info(slide, 1, ((char *)slide, - LoadFarString(BadCRC_EAs))); - else - Info(slide, 1, ((char *)slide, - LoadFarString(UnknComprMethodEAs), m)); - } - break; - } - return r; - } - break; - - case EF_NTSD: - Trace((stderr, "ebID: %i / ebLen: %u\n", ebID, ebLen)); - r = ebLen < EB_NTSD_L_LEN ? IZ_EF_TRUNC : - ((ef[EB_HEADSIZE+EB_NTSD_VERSION] > EB_NTSD_MAX_VER) ? - (PK_WARN | 0x4000) : - test_compr_eb(__G__ ef, ebLen, EB_NTSD_L_LEN, TEST_NTSD)); - if (r != PK_OK) { - if (uO.qflag) - Info(slide, 1, ((char *)slide, "%-22s ", - FnFilter1(G.filename))); - switch (r) { - case IZ_EF_TRUNC: - Info(slide, 1, ((char *)slide, - LoadFarString(TruncNTSD), - ebLen-(EB_NTSD_L_LEN+EB_CMPRHEADLEN), "\n")); - break; -#if (defined(WIN32) && defined(NTSD_EAS)) - case PK_WARN: - Info(slide, 1, ((char *)slide, - LoadFarString(InvalidSecurityEAs))); - break; -#endif - case PK_ERR: - Info(slide, 1, ((char *)slide, - LoadFarString(InvalidComprDataEAs))); - break; - case PK_MEM3: - case PK_MEM4: - Info(slide, 1, ((char *)slide, - LoadFarString(NotEnoughMemEAs))); - break; - case (PK_WARN | 0x4000): - Info(slide, 1, ((char *)slide, - LoadFarString(UnsuppNTSDVersEAs), - (int)ef[EB_HEADSIZE+EB_NTSD_VERSION])); - r = PK_WARN; - break; - default: - if ((r & 0xff) != PK_ERR) - Info(slide, 1, ((char *)slide, - LoadFarString(UnknErrorEAs))); - else { - ush m = (ush)(r >> 8); - if (m == DEFLATED) /* GRR KLUDGE! */ - Info(slide, 1, ((char *)slide, - LoadFarString(BadCRC_EAs))); - else - Info(slide, 1, ((char *)slide, - LoadFarString(UnknComprMethodEAs), m)); - } - break; - } - return r; - } - break; - case EF_PKVMS: - case EF_PKW32: - case EF_PKUNIX: - case EF_ASIUNIX: - case EF_IZVMS: - case EF_IZUNIX: - case EF_VMCMS: - case EF_MVS: - case EF_SPARK: - case EF_AV: - default: - break; - } - ef_len -= (ebLen + EB_HEADSIZE); - ef += (ebLen + EB_HEADSIZE); - } - - if (!uO.qflag) - Info(slide, 0, ((char *)slide, " OK\n")); - - return PK_COOL; - -} /* end function TestExtraField() */ - - - - - -/******************************/ -/* Function test_compr_eb() */ -/******************************/ - -#ifdef PROTO -static int test_compr_eb( - __GPRO__ - uch *eb, - unsigned eb_size, - unsigned compr_offset, - int (*test_uc_ebdata)(__GPRO__ uch *eb, unsigned eb_size, - uch *eb_ucptr, ulg eb_ucsize)) -#else /* !PROTO */ -static int test_compr_eb(__G__ eb, eb_size, compr_offset, test_uc_ebdata) - __GDEF - uch *eb; - unsigned eb_size; - unsigned compr_offset; - int (*test_uc_ebdata)(); -#endif /* ?PROTO */ -{ - ulg eb_ucsize; - uch *eb_ucptr; - int r; - - if (compr_offset < 4) /* field is not compressed: */ - return PK_OK; /* do nothing and signal OK */ - - if ((eb_size < (EB_UCSIZE_P + 4)) || - ((eb_ucsize = makelong(eb+(EB_HEADSIZE+EB_UCSIZE_P))) > 0L && - eb_size <= (compr_offset + EB_CMPRHEADLEN))) - return IZ_EF_TRUNC; /* no compressed data! */ - - if ((eb_ucptr = (uch *)malloc((extent)eb_ucsize)) == (uch *)NULL) - return PK_MEM4; - - r = memextract(__G__ eb_ucptr, eb_ucsize, - eb + (EB_HEADSIZE + compr_offset), - (ulg)(eb_size - compr_offset)); - - if (r == PK_OK && test_uc_ebdata != NULL) - r = (*test_uc_ebdata)(__G__ eb, eb_size, eb_ucptr, eb_ucsize); - - free(eb_ucptr); - return r; - -} /* end function test_compr_eb() */ - -#endif /* !SFX */ - - - - - -/***************************/ -/* Function memextract() */ -/***************************/ - -int memextract(__G__ tgt, tgtsize, src, srcsize) /* extract compressed */ - __GDEF /* extra field block; */ - uch *tgt, *src; /* return PK-type error */ - ulg tgtsize, srcsize; /* level */ -{ - long old_csize=G.csize; - uch *old_inptr=G.inptr; - int old_incnt=G.incnt; - int r, error=PK_OK; - ush method; - ulg extra_field_crc; - - - method = makeword(src); - extra_field_crc = makelong(src+2); - - /* compressed extra field exists completely in memory at this location: */ - G.inptr = src + 2 + 4; /* method and extra_field_crc */ - G.incnt = (int)(G.csize = (long)(srcsize - (2 + 4))); - G.mem_mode = TRUE; - G.outbufptr = tgt; - G.outsize = tgtsize; - - switch (method) { - case STORED: - memcpy((char *)tgt, (char *)G.inptr, (extent)G.incnt); - G.outcnt = G.csize; /* for CRC calculation */ - break; - case DEFLATED: - G.outcnt = 0L; - if ((r = UZinflate(__G)) != 0) { - if (!uO.tflag) - Info(slide, 0x401, ((char *)slide, - LoadFarStringSmall(ErrUnzipNoFile), r == 3? - LoadFarString(NotEnoughMem) : - LoadFarString(InvalidComprData), - LoadFarStringSmall2(Inflate))); - error = (r == 3)? PK_MEM3 : PK_ERR; - } - if (G.outcnt == 0L) /* inflate's final FLUSH sets outcnt */ - break; - break; - default: - if (uO.tflag) - error = PK_ERR | ((int)method << 8); - else { - Info(slide, 0x401, ((char *)slide, - LoadFarString(UnsupportedExtraField), method)); - error = PK_ERR; /* GRR: should be passed on up via SetEAs() */ - } - break; - } - - G.inptr = old_inptr; - G.incnt = old_incnt; - G.csize = old_csize; - G.mem_mode = FALSE; - - if (!error) { - register ulg crcval = crc32(CRCVAL_INITIAL, tgt, (extent)G.outcnt); - - if (crcval != extra_field_crc) { - if (uO.tflag) - error = PK_ERR | (DEFLATED << 8); /* kludge for now */ - else { - Info(slide, 0x401, ((char *)slide, - LoadFarString(BadExtraFieldCRC), G.zipfn, crcval, - extra_field_crc)); - error = PK_ERR; - } - } - } - return error; - -} /* end function memextract() */ - - - - - -/*************************/ -/* Function memflush() */ -/*************************/ - -int memflush(__G__ rawbuf, size) - __GDEF - uch *rawbuf; - ulg size; -{ - if (size > G.outsize) - return 50; /* more data than output buffer can hold */ - - memcpy((char *)G.outbufptr, (char *)rawbuf, (extent)size); - G.outbufptr += (unsigned int)size; - G.outsize -= size; - G.outcnt += size; - - return 0; - -} /* end function memflush() */ - - - - - -/*************************/ -/* Function fnfilter() */ /* here instead of in list.c for SFX */ -/*************************/ - -char *fnfilter(raw, space) /* convert name to safely printable form */ - ZCONST char *raw; - uch *space; -{ -#ifndef NATIVE /* ASCII: filter ANSI escape codes, etc. */ - uch *r=(uch *)raw, *s=space; - - while (*r) { -#ifdef QDOS - if (qlflag & 2) { - if (*r == '/' || *r == '.') { - ++r; - *s++ = '_'; - continue; - } - } else -#endif - if (*r < 32) - *s++ = '^', *s++ = (uch)(64 + *r++); - else - *s++ = *r++; - } - *s = 0; - -#ifdef WINDLL - INTERN_TO_ISO((char *)space, (char *)space); /* translate to ANSI */ -#else -#ifdef WIN32 - /* Win9x console always uses OEM character coding, and - WinNT console is set to OEM charset by default, too */ - INTERN_TO_OEM((char *)space, (char *)space); -#endif /* WIN32 */ -#endif /* ?WINDLL */ - - return (char *)space; - -#else /* NATIVE: EBCDIC or whatever */ - return (char *)raw; -#endif - -} /* end function fnfilter() */ - - - - - -#ifdef SET_DIR_ATTRIB -/* must sort saved directories so can set perms from bottom up */ - -/************************/ -/* Function dircomp() */ -/************************/ - -static int dircomp(a, b) /* used by qsort(); swiped from Zip */ - ZCONST zvoid *a, *b; -{ - /* order is significant: this sorts in reverse order (deepest first) */ - return strcmp((*(dirtime **)b)->fn, (*(dirtime **)a)->fn); - /* return namecmp((*(dirtime **)b)->fn, (*(dirtime **)a)->fn); */ -} - - - -#if 0 /* not used in Unix, but maybe for future OSes? */ - -/************************/ -/* Function namecmp() */ -/************************/ - -static int namecmp(s1, s2) /* [not] used by dircomp(); swiped from Zip */ - ZCONST char *s1, *s2; -{ - int d; - - for (;;) { - d = (int)(uch)case_map(*s1) - - (int)(uch)case_map(*s2); - - if (d || *s1 == 0 || *s2 == 0) - return d; - - s1++; - s2++; - } -} - -#endif /* 0 */ -#endif /* SET_DIR_ATTRIB */ diff --git a/Build/source/libs/unzip/fileio.c b/Build/source/libs/unzip/fileio.c deleted file mode 100644 index 97001b579df..00000000000 --- a/Build/source/libs/unzip/fileio.c +++ /dev/null @@ -1,2151 +0,0 @@ -/*--------------------------------------------------------------------------- - - fileio.c - - This file contains routines for doing direct but relatively generic input/ - output, file-related sorts of things, plus some miscellaneous stuff. Most - of the stuff has to do with opening, closing, reading and/or writing files. - - Contains: open_input_file() - open_outfile() (non-VMS, non-AOS/VS, non-CMS_MVS) - undefer_input() - defer_leftover_input() - readbuf() - readbyte() - fillinbuf() - flush() (non-VMS) - disk_error() (non-VMS) - UzpMessagePrnt() - UzpMessageNull() (DLL only) - UzpInput() - UzpMorePause() - UzpPassword() (non-WINDLL) - handler() - dos_to_unix_time() (non-VMS, non-VM/CMS, non-MVS) - check_for_newer() (non-VMS, non-OS/2, non-VM/CMS, non-MVS) - do_string() - makeword() - makelong() - str2iso() (CRYPT && NEED_STR2ISO, only) - str2oem() (CRYPT && NEED_STR2OEM, only) - memset() (ZMEM only) - memcpy() (ZMEM only) - zstrnicmp() - zstat() (REGULUS only) - fLoadFarString() (SMALL_MEM only) - fLoadFarStringSmall() (SMALL_MEM only) - fLoadFarStringSmall2() (SMALL_MEM only) - zfstrcpy() (SMALL_MEM only) - - ---------------------------------------------------------------------------*/ - - -#define FILEIO_C -#define UNZIP_INTERNAL -#include "unzip.h" -#ifdef WINDLL -# include "windll/windll.h" -# include -#endif -#include "crypt.h" -#include "ttyio.h" - -/* setup of codepage conversion for decryption passwords */ -#if CRYPT -# if (defined(CRYP_USES_ISO2OEM) && !defined(IZ_ISO2OEM_ARRAY)) -# define IZ_ISO2OEM_ARRAY /* pull in iso2oem[] table */ -# endif -# if (defined(CRYP_USES_OEM2ISO) && !defined(IZ_OEM2ISO_ARRAY)) -# define IZ_OEM2ISO_ARRAY /* pull in oem2iso[] table */ -# endif -#endif -#include "ebcdic.h" /* definition/initialization of ebcdic[] */ - - -/* - Note: Under Windows, the maximum size of the buffer that can be used - with any of the *printf calls is 16,384, so win_fprintf was used to - feed the fprintf clone no more than 16K chunks at a time. This should - be valid for anything up to 64K (and probably beyond, assuming your - buffers are that big). -*/ -#ifdef WINDLL -# define WriteError(buf,len,strm) \ - (win_fprintf(pG, strm, (extent)len, (char far *)buf) != (int)(len)) -#else /* !WINDLL */ -# ifdef USE_FWRITE -# define WriteError(buf,len,strm) \ - ((extent)fwrite((char *)(buf),1,(extent)(len),strm) != (extent)(len)) -# else -# define WriteError(buf,len,strm) \ - ((extent)write(fileno(strm),(char *)(buf),(extent)(len)) != (extent)(len)) -# endif -#endif /* ?WINDLL */ - -static int disk_error OF((__GPRO)); - - -/****************************/ -/* Strings used in fileio.c */ -/****************************/ - -#if (defined(UNIX) || defined(DOS_FLX_OS2_W32) || defined(__BEOS__)) - static ZCONST char Far CannotDeleteOldFile[] = - "error: cannot delete old %s\n"; -#ifdef UNIXBACKUP - static ZCONST char Far CannotRenameOldFile[] = - "error: cannot rename old %s\n"; - static ZCONST char Far BackupSuffix[] = "~"; -#endif -#endif /* UNIX || DOS_FLX_OS2_W32 || __BEOS__ */ - -static ZCONST char Far CannotOpenZipfile[] = - "error: cannot open zipfile [ %s ]\n"; -#if (!defined(VMS) && !defined(AOS_VS) && !defined(CMS_MVS) && !defined(MACOS)) - static ZCONST char Far CannotCreateFile[] = "error: cannot create %s\n"; -#endif -#ifdef NOVELL_BUG_FAILSAFE - static ZCONST char Far NovellBug[] = - "error: %s: stat() says does not exist, but fopen() found anyway\n"; -#endif -static ZCONST char Far ReadError[] = "error: zipfile read error\n"; -static ZCONST char Far FilenameTooLongTrunc[] = - "warning: filename too long--truncating.\n"; -static ZCONST char Far ExtraFieldTooLong[] = - "warning: extra field too long (%d). Ignoring...\n"; - -#ifdef WINDLL - static ZCONST char Far DiskFullQuery[] = - "%s: write error (disk full?).\n"; -#else - static ZCONST char Far DiskFullQuery[] = - "%s: write error (disk full?). Continue? (y/n/^C) "; - static ZCONST char Far ZipfileCorrupt[] = - "error: zipfile probably corrupt (%s)\n"; -# ifdef SYMLINKS - static ZCONST char Far FileIsSymLink[] = - "%s exists and is a symbolic link%s.\n"; -# endif -# ifdef MORE - static ZCONST char Far MorePrompt[] = "--More--(%lu)"; -# endif - static ZCONST char Far QuitPrompt[] = - "--- Press `Q' to quit, or any other key to continue ---"; - static ZCONST char Far HidePrompt[] = /* "\r \r"; */ - "\r \r"; -# if CRYPT -# ifdef MACOS - /* SPC: are names on MacOS REALLY so much longer than elsewhere ??? */ - static ZCONST char Far PasswPrompt[] = "[%s]\n %s password: "; -# else - static ZCONST char Far PasswPrompt[] = "[%s] %s password: "; -# endif - static ZCONST char Far PasswPrompt2[] = "Enter password: "; - static ZCONST char Far PasswRetry[] = "password incorrect--reenter: "; -# endif /* CRYPT */ -#endif /* !WINDLL */ - - - - - -/******************************/ -/* Function open_input_file() */ -/******************************/ - -int open_input_file(__G) /* return 1 if open failed */ - __GDEF -{ - /* - * open the zipfile for reading and in BINARY mode to prevent cr/lf - * translation, which would corrupt the bitstreams - */ - -#if (defined(UNIX) || defined(TOPS20) || defined(AOS_VS) || defined(__BEOS__)) - G.zipfd = open(G.zipfn, O_RDONLY); -#else /* !(UNIX || TOPS20 || AOS_VS || __BEOS__) */ -#ifdef VMS - G.zipfd = open(G.zipfn, O_RDONLY, 0, "ctx=stm"); -#else /* !VMS */ -#ifdef MACOS - G.zipfd = open(G.zipfn, 0); -#else /* !MACOS */ -#ifdef RISCOS - G.zipfd = fopen(G.zipfn, "rb"); -#else /* !RISCOS */ -#ifdef CMS_MVS - G.zipfd = vmmvs_open_infile(__G); -#else /* !CMS_MVS */ - G.zipfd = open(G.zipfn, O_RDONLY | O_BINARY); -#endif /* ?CMS_MVS */ -#endif /* ?RISCOS */ -#endif /* ?MACOS */ -#endif /* ?VMS */ -#endif /* ?(UNIX || TOPS20 || AOS_VS || __BEOS__) */ - -#ifdef USE_STRM_INPUT - if (G.zipfd == NULL) -#else - /* if (G.zipfd < 0) */ /* no good for Windows CE port */ - if (G.zipfd == -1) -#endif - { - Info(slide, 0x401, ((char *)slide, LoadFarString(CannotOpenZipfile), - G.zipfn)); - return 1; - } - return 0; - -} /* end function open_input_file() */ - - - - -#if (!defined(VMS) && !defined(AOS_VS) && !defined(CMS_MVS) && !defined(MACOS)) - -/***************************/ -/* Function open_outfile() */ -/***************************/ - -int open_outfile(__G) /* return 1 if fail */ - __GDEF -{ -#ifdef DLL - if (G.redirect_data) - return (redirect_outfile(__G) == FALSE); -#endif -#ifdef QDOS - QFilename(__G__ G.filename); -#endif -#if (defined(DOS_FLX_OS2_W32) || defined(UNIX) || defined(__BEOS__)) -#ifdef BORLAND_STAT_BUG - /* Borland 5.0's stat() barfs if the filename has no extension and the - * file doesn't exist. */ - if (access(G.filename, 0) == -1) { - FILE *tmp = fopen(G.filename, "wb+"); - - /* file doesn't exist, so create a dummy file to keep stat() from - * failing (will be over-written anyway) */ - fputc('0', tmp); /* just to have something in the file */ - fclose(tmp); - } -#endif /* BORLAND_STAT_BUG */ -#ifdef SYMLINKS - if (SSTAT(G.filename, &G.statbuf) == 0 || lstat(G.filename,&G.statbuf) == 0) -#else - if (SSTAT(G.filename, &G.statbuf) == 0) -#endif /* ?SYMLINKS */ - { - Trace((stderr, "open_outfile: stat(%s) returns 0: file exists\n", - FnFilter1(G.filename))); -#ifdef UNIXBACKUP - if (uO.B_flag) { /* do backup */ - char *tname; - int blen, flen, tlen; - - blen = strlen(BackupSuffix); - flen = strlen(G.filename); - tlen = flen + blen + 1; - if (tlen >= FILNAMSIZ) { /* in case name is too long, truncate */ - tname = (char *)malloc(FILNAMSIZ); - if (tname == NULL) - return 1; /* in case we run out of space */ - tlen = FILNAMSIZ - 1 - blen; - strcpy(tname, G.filename); /* make backup name */ - tname[tlen] = '\0'; - } else { - tname = (char *)malloc(tlen); - if (tname == NULL) - return 1; /* in case we run out of space */ - strcpy(tname, G.filename); /* make backup name */ - } - strcpy(tname+flen, BackupSuffix); - - /* GRR: should check if backup file exists, apply -n/-o to that */ - if (rename(G.filename, tname) < 0) { /* move file */ - Info(slide, 0x401, ((char *)slide, - LoadFarString(CannotRenameOldFile), FnFilter1(G.filename))); - free(tname); - return 1; - } - free(tname); - } else -#endif /* UNIXBACKUP */ -#ifdef DOS_FLX_OS2_W32 - if (!(G.statbuf.st_mode & S_IWRITE)) { - Trace((stderr, "open_outfile: existing file %s is read-only\n", - FnFilter1(G.filename))); - chmod(G.filename, S_IREAD | S_IWRITE); - Trace((stderr, "open_outfile: %s now writable\n", - FnFilter1(G.filename))); - } -#endif /* DOS_FLX_OS2_W32 */ - if (unlink(G.filename) != 0) { - Info(slide, 0x401, ((char *)slide, - LoadFarString(CannotDeleteOldFile), FnFilter1(G.filename))); - return 1; - } - Trace((stderr, "open_outfile: %s now deleted\n", - FnFilter1(G.filename))); - } -#endif /* DOS_FLX_OS2_W32 || UNIX || __BEOS__ */ -#ifdef RISCOS - if (SWI_OS_File_7(G.filename,0xDEADDEAD,0xDEADDEAD,G.lrec.ucsize)!=NULL) { - Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile), - FnFilter1(G.filename))); - return 1; - } -#endif /* RISCOS */ -#ifdef TOPS20 - char *tfilnam; - - if ((tfilnam = (char *)malloc(2*strlen(G.filename)+1)) == (char *)NULL) - return 1; - strcpy(tfilnam, G.filename); - upper(tfilnam); - enquote(tfilnam); - if ((G.outfile = fopen(tfilnam, FOPW)) == (FILE *)NULL) { - Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile), - tfilnam)); - free(tfilnam); - return 1; - } - free(tfilnam); -#else /* !TOPS20 */ -#ifdef MTS - if (uO.aflag) - G.outfile = fopen(G.filename, FOPWT); - else - G.outfile = fopen(G.filename, FOPW); - if (G.outfile == (FILE *)NULL) { - Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile), - FnFilter1(G.filename))); - return 1; - } -#else /* !MTS */ -#ifdef TANDEM - if (SSTAT(G.filename, &G.statbuf) == 0) { - Trace((stderr, "open_outfile: stat(%s) returns 0 (file exists)\n", - FnFilter1(G.filename))); - if (unlink(G.filename) != 0) { - Trace((stderr, "open_outfile: existing file %s is read-only\n", - FnFilter1(G.filename))); - chmod(G.filename, S_IRUSR | S_IWUSR); - Trace((stderr, "open_outfile: %s now writable\n", - FnFilter1(G.filename))); - if (unlink(G.filename) != 0) - return 1; - } - Trace((stderr, "open_outfile: %s now deleted\n", - FnFilter1(G.filename))); - } - if (G.pInfo->textmode) - G.outfile = fopen(G.filename, FOPWT); - else - G.outfile = fopen(G.filename, FOPW); - if (G.outfile == (FILE *)NULL) { - Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile), - FnFilter1(G.filename))); - return 1; - } -#else /* !TANDEM */ -#ifdef DEBUG - Info(slide, 1, ((char *)slide, - "open_outfile: doing fopen(%s) for reading\n", FnFilter1(G.filename))); - if ((G.outfile = fopen(G.filename, FOPR)) == (FILE *)NULL) - Info(slide, 1, ((char *)slide, - "open_outfile: fopen(%s) for reading failed: does not exist\n", - FnFilter1(G.filename))); - else { - Info(slide, 1, ((char *)slide, - "open_outfile: fopen(%s) for reading succeeded: file exists\n", - FnFilter1(G.filename))); - fclose(G.outfile); - } -#endif /* DEBUG */ -#ifdef NOVELL_BUG_FAILSAFE - if (G.dne && ((G.outfile = fopen(G.filename, FOPR)) != (FILE *)NULL)) { - Info(slide, 0x401, ((char *)slide, LoadFarString(NovellBug), - FnFilter1(G.filename))); - fclose(G.outfile); - return 1; /* with "./" fix in checkdir(), should never reach here */ - } -#endif /* NOVELL_BUG_FAILSAFE */ - Trace((stderr, "open_outfile: doing fopen(%s) for writing\n", - FnFilter1(G.filename))); - if ((G.outfile = fopen(G.filename, FOPW)) == (FILE *)NULL) { - Info(slide, 0x401, ((char *)slide, LoadFarString(CannotCreateFile), - FnFilter1(G.filename))); - return 1; - } - Trace((stderr, "open_outfile: fopen(%s) for writing succeeded\n", - FnFilter1(G.filename))); -#endif /* !TANDEM */ -#endif /* !MTS */ -#endif /* !TOPS20 */ - -#ifdef USE_FWRITE -#ifdef DOS_OS2_W32 - /* 16-bit MSC: buffer size must be strictly LESS than 32K (WSIZE): bogus */ - setbuf(G.outfile, (char *)NULL); /* make output unbuffered */ -#else /* !DOS_OS2_W32 */ -#ifndef RISCOS -#ifdef _IOFBF /* make output fully buffered (works just about like write()) */ - setvbuf(G.outfile, (char *)slide, _IOFBF, WSIZE); -#else - setbuf(G.outfile, (char *)slide); -#endif -#endif /* !RISCOS */ -#endif /* ?DOS_OS2_W32 */ -#endif /* USE_FWRITE */ - return 0; - -} /* end function open_outfile() */ - -#endif /* !VMS && !AOS_VS && !CMS_MVS && !MACOS */ - - - - - -/* - * These functions allow NEXTBYTE to function without needing two bounds - * checks. Call defer_leftover_input() if you ever have filled G.inbuf - * by some means other than readbyte(), and you then want to start using - * NEXTBYTE. When going back to processing bytes without NEXTBYTE, call - * undefer_input(). For example, extract_or_test_member brackets its - * central section that does the decompression with these two functions. - * If you need to check the number of bytes remaining in the current - * file while using NEXTBYTE, check (G.csize + G.incnt), not G.csize. - */ - -/****************************/ -/* function undefer_input() */ -/****************************/ - -void undefer_input(__G) - __GDEF -{ - if (G.incnt > 0) - G.csize += G.incnt; - if (G.incnt_leftover > 0) { - /* We know that "(G.csize < MAXINT)" so we can cast G.csize to int: - * This condition was checked when G.incnt_leftover was set > 0 in - * defer_leftover_input(), and it is NOT allowed to touch G.csize - * before calling undefer_input() when (G.incnt_leftover > 0) - * (single exception: see read_byte()'s "G.csize <= 0" handling) !! - */ - G.incnt = G.incnt_leftover + (int)G.csize; - G.inptr = G.inptr_leftover - (int)G.csize; - G.incnt_leftover = 0; - } else if (G.incnt < 0) - G.incnt = 0; -} /* end function undefer_input() */ - - - - - -/***********************************/ -/* function defer_leftover_input() */ -/***********************************/ - -void defer_leftover_input(__G) - __GDEF -{ - if ((long)G.incnt > G.csize) { - /* (G.csize < MAXINT), we can safely cast it to int !! */ - if (G.csize < 0L) - G.csize = 0L; - G.inptr_leftover = G.inptr + (int)G.csize; - G.incnt_leftover = G.incnt - (int)G.csize; - G.incnt = (int)G.csize; - } else - G.incnt_leftover = 0; - G.csize -= G.incnt; -} /* end function defer_leftover_input() */ - - - - - -/**********************/ -/* Function readbuf() */ -/**********************/ - -unsigned readbuf(__G__ buf, size) /* return number of bytes read into buf */ - __GDEF - char *buf; - register unsigned size; -{ - register unsigned count; - unsigned n; - - n = size; - while (size) { - if (G.incnt <= 0) { - if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) == 0) - return (n-size); - else if (G.incnt < 0) { - /* another hack, but no real harm copying same thing twice */ - (*G.message)((zvoid *)&G, - (uch *)LoadFarString(ReadError), /* CANNOT use slide */ - (ulg)strlen(LoadFarString(ReadError)), 0x401); - return 0; /* discarding some data; better than lock-up */ - } - /* buffer ALWAYS starts on a block boundary: */ - G.cur_zipfile_bufstart += INBUFSIZ; - G.inptr = G.inbuf; - } - count = MIN(size, (unsigned)G.incnt); - memcpy(buf, G.inptr, count); - buf += count; - G.inptr += count; - G.incnt -= count; - size -= count; - } - return n; - -} /* end function readbuf() */ - - - - - -/***********************/ -/* Function readbyte() */ -/***********************/ - -int readbyte(__G) /* refill inbuf and return a byte if available, else EOF */ - __GDEF -{ - if (G.mem_mode) - return EOF; - if (G.csize <= 0) { - G.csize--; /* for tests done after exploding */ - G.incnt = 0; - return EOF; - } - if (G.incnt <= 0) { - if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) == 0) { - G.incnt = 0; /* do not allow negative value to affect stuff */ - return EOF; - } else if (G.incnt < 0) { /* "fail" (abort, retry, ...) returns this */ - /* another hack, but no real harm copying same thing twice */ - (*G.message)((zvoid *)&G, - (uch *)LoadFarString(ReadError), - (ulg)strlen(LoadFarString(ReadError)), 0x401); - echon(); -#ifdef WINDLL - longjmp(dll_error_return, 1); -#else - DESTROYGLOBALS() - EXIT(PK_BADERR); /* totally bailing; better than lock-up */ -#endif - } - G.cur_zipfile_bufstart += INBUFSIZ; /* always starts on block bndry */ - G.inptr = G.inbuf; - defer_leftover_input(__G); /* decrements G.csize */ - } - -#if CRYPT - if (G.pInfo->encrypted) { - uch *p; - int n; - - /* This was previously set to decrypt one byte beyond G.csize, when - * incnt reached that far. GRR said, "but it's required: why?" This - * was a bug in fillinbuf() -- was it also a bug here? - */ - for (n = G.incnt, p = G.inptr; n--; p++) - zdecode(*p); - } -#endif /* CRYPT */ - - --G.incnt; - return *G.inptr++; - -} /* end function readbyte() */ - - - - - -#ifdef USE_ZLIB - -/************************/ -/* Function fillinbuf() */ -/************************/ - -int fillinbuf(__G) /* like readbyte() except returns number of bytes in inbuf */ - __GDEF -{ - if (G.mem_mode || - (G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) <= 0) - return 0; - G.cur_zipfile_bufstart += INBUFSIZ; /* always starts on a block boundary */ - G.inptr = G.inbuf; - defer_leftover_input(__G); /* decrements G.csize */ - -#if CRYPT - if (G.pInfo->encrypted) { - uch *p; - int n; - - for (n = G.incnt, p = G.inptr; n--; p++) - zdecode(*p); - } -#endif /* CRYPT */ - - return G.incnt; - -} /* end function fillinbuf() */ - -#endif /* USE_ZLIB */ - - - - - -#ifndef VMS /* for VMS use code in vms.c */ - -/********************/ -/* Function flush() */ /* returns PK error codes: */ -/********************/ /* if cflag => always 0; PK_DISK if write error */ - -int flush(__G__ rawbuf, size, unshrink) - __GDEF - uch *rawbuf; - ulg size; - int unshrink; -{ - register uch *p, *q; - uch *transbuf; -#if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV)) - ulg transbufsiz; -#endif - /* static int didCRlast = FALSE; moved to globals.h */ - - -/*--------------------------------------------------------------------------- - Compute the CRC first; if testing or if disk is full, that's it. - ---------------------------------------------------------------------------*/ - - G.crc32val = crc32(G.crc32val, rawbuf, (extent)size); - -#ifdef DLL - if ((G.statreportcb != NULL) && - (*G.statreportcb)(__G__ UZ_ST_IN_PROGRESS, G.zipfn, G.filename, NULL)) - return IZ_CTRLC; /* cancel operation by user request */ -#endif - - if (uO.tflag || size == 0L) /* testing or nothing to write: all done */ - return PK_OK; - - if (G.disk_full) - return PK_DISK; /* disk already full: ignore rest of file */ - -/*--------------------------------------------------------------------------- - Write the bytes rawbuf[0..size-1] to the output device, first converting - end-of-lines and ASCII/EBCDIC as needed. If SMALL_MEM or MED_MEM are NOT - defined, outbuf is assumed to be at least as large as rawbuf and is not - necessarily checked for overflow. - ---------------------------------------------------------------------------*/ - - if (!G.pInfo->textmode) { /* write raw binary data */ - /* GRR: note that for standard MS-DOS compilers, size argument to - * fwrite() can never be more than 65534, so WriteError macro will - * have to be rewritten if size can ever be that large. For now, - * never more than 32K. Also note that write() returns an int, which - * doesn't necessarily limit size to 32767 bytes if write() is used - * on 16-bit systems but does make it more of a pain; however, because - * at least MSC 5.1 has a lousy implementation of fwrite() (as does - * DEC Ultrix cc), write() is used anyway. - */ -#ifdef DLL - if (G.redirect_data) - writeToMemory(__G__ rawbuf, size); - else -#endif - if (!uO.cflag && WriteError(rawbuf, size, G.outfile)) - return disk_error(__G); - else if (uO.cflag && (*G.message)((zvoid *)&G, rawbuf, size, 0)) - return 0; - } else { /* textmode: aflag is true */ - if (unshrink) { - /* rawbuf = outbuf */ - transbuf = G.outbuf2; -#if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV)) - transbufsiz = TRANSBUFSIZ; -#endif - } else { - /* rawbuf = slide */ - transbuf = G.outbuf; -#if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV)) - transbufsiz = OUTBUFSIZ; - Trace((stderr, "\ntransbufsiz = OUTBUFSIZ = %u\n", OUTBUFSIZ)); -#endif - } - if (G.newfile) { -#ifdef VMS_TEXT_CONV - /* GRR: really want to check if -aa (or -aaa?) was given... */ - if (rawbuf[1]) { /* first line is more than 255 chars long */ - Trace((stderr, - "\nfirst line of VMS `text' too long; switching to normal extraction\n")); - G.VMS_line_state = -1; /* -1: don't treat as VMS text */ - } else - G.VMS_line_state = 0; /* 0: ready to read line length */ -#endif - G.didCRlast = FALSE; /* no previous buffers written */ - G.newfile = FALSE; - } - -#ifdef VMS_TEXT_CONV - if (G.pInfo->hostnum == VMS_ && G.extra_field && G.VMS_line_state >= 0) - { - /* GRR: really want to check for actual VMS extra field, and - * ideally for variable-length record format */ -/* - printf("\n>>>>>> GRR: file is VMS text and has an extra field\n"); - */ - - p = rawbuf; - q = transbuf; - while(p < rawbuf+(unsigned)size) { - switch (G.VMS_line_state) { - - /* 0: ready to read line length */ - case 0: - G.VMS_line_length = 0; - G.VMS_line_pad = 0; - if (p == rawbuf+(unsigned)size-1) { /* last char */ - G.VMS_line_length = (int)((uch)(*p++)); - G.VMS_line_state = 1; - } else { - G.VMS_line_length = makeword(p); - p += 2; - G.VMS_line_state = 2; - } - if (G.VMS_line_length & 1) /* odd */ - G.VMS_line_pad = 1; - break; - - /* 1: read one byte of length, need second */ - case 1: - G.VMS_line_length += ((int)((uch)(*p++)) << 8); - G.VMS_line_state = 2; - break; - - /* 2: ready to read VMS_line_length chars */ - case 2: - if (G.VMS_line_length < rawbuf+(unsigned)size-p) { - if (G.VMS_line_length >= - transbuf+(unsigned)transbufsiz-q) - { - int outroom = transbuf+(unsigned)transbufsiz-q; - -/* GRR: need to change this to *q++ = native(*p++); loop or something */ - memcpy(q, p, outroom); -#ifdef DLL - if (G.redirect_data) - writeToMemory(__G__ transbuf, - (unsigned)outroom); - else -#endif - if (!uO.cflag && WriteError(transbuf, - (unsigned)outroom, G.outfile)) - return disk_error(__G); - else if (uO.cflag && (*G.message)((zvoid *)&G, - transbuf, (ulg)outroom, 0)) - return 0; - q = transbuf; - p += outroom; - G.VMS_line_length -= outroom; - /* fall through to normal case */ - } -/* GRR: need to change this to *q++ = native(*p++); loop or something */ - memcpy(q, p, G.VMS_line_length); - q += G.VMS_line_length; - p += G.VMS_line_length; - G.VMS_line_length = 0; /* necessary?? */ - G.VMS_line_state = 3; - - } else { /* remaining input is less than full line */ - int remaining = rawbuf+(unsigned)size-p; - - if (remaining < - transbuf+(unsigned)transbufsiz-q) - { - int outroom = transbuf+(unsigned)transbufsiz-q; - -/* GRR: need to change this to *q++ = native(*p++); loop or something */ - memcpy(q, p, outroom); -#ifdef DLL - if (G.redirect_data) - writeToMemory(__G__ transbuf, - (unsigned)(outroom)); - else -#endif - if (!uO.cflag && WriteError(transbuf, - (unsigned)outroom, G.outfile)) - return disk_error(__G); - else if (uO.cflag && (*G.message)((zvoid *)&G, - transbuf, (ulg)outroom, 0)) - return 0; - q = transbuf; - p += outroom; - remaining -= outroom; - } -/* GRR: need to change this to *q++ = native(*p++); loop or something */ - memcpy(q, p, remaining); - q += remaining; - p += remaining; - G.VMS_line_length -= remaining; - /* no change in G.VMS_line_state */ - } - break; - - /* 3: ready to PutNativeEOL */ - case 3: - if (q > transbuf+(unsigned)transbufsiz-lenEOL) { -#ifdef DLL - if (G.redirect_data) - writeToMemory(__G__ transbuf, - (unsigned)(q-transbuf)); - else -#endif - if (!uO.cflag && - WriteError(transbuf, (unsigned)(q-transbuf), - G.outfile)) - return disk_error(__G); - else if (uO.cflag && (*G.message)((zvoid *)&G, - transbuf, (ulg)(q-transbuf), 0)) - return 0; - q = transbuf; - } - PutNativeEOL - if (G.VMS_line_pad) - if (p < rawbuf+(unsigned)size) { - ++p; - G.VMS_line_state = 0; - } else - G.VMS_line_state = 4; - else - G.VMS_line_state = 0; - break; - - /* 4: ready to read pad byte */ - case 4: - ++p; - G.VMS_line_state = 0; - break; - } - } /* end while */ - - } else -#endif /* VMS_TEXT_CONV */ - - /*----------------------------------------------------------------------- - Algorithm: CR/LF => native; lone CR => native; lone LF => native. - This routine is only for non-raw-VMS, non-raw-VM/CMS files (i.e., - stream-oriented files, not record-oriented). - -----------------------------------------------------------------------*/ - - /* else not VMS text */ { - p = rawbuf; - if (*p == LF && G.didCRlast) - ++p; - G.didCRlast = FALSE; - for (q = transbuf; p < rawbuf+(unsigned)size; ++p) { - if (*p == CR) { /* lone CR or CR/LF: EOL either way */ - PutNativeEOL - if (p == rawbuf+(unsigned)size-1) /* last char in buffer */ - G.didCRlast = TRUE; - else if (p[1] == LF) /* get rid of accompanying LF */ - ++p; - } else if (*p == LF) /* lone LF */ - PutNativeEOL - else -#ifndef DOS_FLX_OS2_W32 - if (*p != CTRLZ) /* lose all ^Z's */ -#endif - *q++ = native(*p); - -#if (defined(SMALL_MEM) || defined(MED_MEM)) -# if (lenEOL == 1) /* don't check unshrink: both buffers small but equal */ - if (!unshrink) -# endif - /* check for danger of buffer overflow and flush */ - if (q > transbuf+(unsigned)transbufsiz-lenEOL) { - Trace((stderr, - "p - rawbuf = %u q-transbuf = %u size = %lu\n", - (unsigned)(p-rawbuf), (unsigned)(q-transbuf), size)); - if (!uO.cflag && WriteError(transbuf, - (unsigned)(q-transbuf), G.outfile)) - return disk_error(__G); - else if (uO.cflag && (*G.message)((zvoid *)&G, - transbuf, (ulg)(q-transbuf), 0)) - return 0; - q = transbuf; - continue; - } -#endif /* SMALL_MEM || MED_MEM */ - } - } - - /*----------------------------------------------------------------------- - Done translating: write whatever we've got to file (or screen). - -----------------------------------------------------------------------*/ - - Trace((stderr, "p - rawbuf = %u q-transbuf = %u size = %lu\n", - (unsigned)(p-rawbuf), (unsigned)(q-transbuf), size)); - if (q > transbuf) { -#ifdef DLL - if (G.redirect_data) - writeToMemory(__G__ transbuf, (unsigned)(q-transbuf)); - else -#endif - if (!uO.cflag && WriteError(transbuf, (unsigned)(q-transbuf), - G.outfile)) - return disk_error(__G); - else if (uO.cflag && (*G.message)((zvoid *)&G, transbuf, - (ulg)(q-transbuf), 0)) - return 0; - } - } - - return 0; - -} /* end function flush() */ - - - - - -/*************************/ -/* Function disk_error() */ -/*************************/ - -static int disk_error(__G) - __GDEF -{ - /* OK to use slide[] here because this file is finished regardless */ - Info(slide, 0x4a1, ((char *)slide, LoadFarString(DiskFullQuery), - FnFilter1(G.filename))); - -#ifndef WINDLL - fgets(G.answerbuf, 9, stdin); - if (*G.answerbuf == 'y') /* stop writing to this file */ - G.disk_full = 1; /* (outfile bad?), but new OK */ - else -#endif - G.disk_full = 2; /* no: exit program */ - - return PK_DISK; - -} /* end function disk_error() */ - -#endif /* !VMS */ - - - - - -/*****************************/ -/* Function UzpMessagePrnt() */ -/*****************************/ - -int UZ_EXP UzpMessagePrnt(pG, buf, size, flag) - zvoid *pG; /* globals struct: always passed */ - uch *buf; /* preformatted string to be printed */ - ulg size; /* length of string (may include nulls) */ - int flag; /* flag bits */ -{ - /* IMPORTANT NOTE: - * The name of the first parameter of UzpMessagePrnt(), which passes - * the "Uz_Globs" address, >>> MUST <<< be identical to the string - * expansion of the __G__ macro in the REENTRANT case (see globals.h). - * This name identity is mandatory for the LoadFarString() macro - * (in the SMALL_MEM case) !!! - */ - int error; - uch *q=buf, *endbuf=buf+(unsigned)size; -#ifdef MORE - uch *p=buf-1; -#endif - FILE *outfp; - - -/*--------------------------------------------------------------------------- - These tests are here to allow fine-tuning of UnZip's output messages, - but none of them will do anything without setting the appropriate bit - in the flag argument of every Info() statement which is to be turned - *off*. That is, all messages are currently turned on for all ports. - To turn off *all* messages, use the UzpMessageNull() function instead - of this one. - ---------------------------------------------------------------------------*/ - -#if (defined(OS2) && defined(DLL)) - if (MSG_NO_DLL2(flag)) /* if OS/2 DLL bit is set, do NOT print this msg */ - return 0; -#endif -#ifdef WINDLL - if (MSG_NO_WDLL(flag)) - return 0; -#endif -#ifdef WINDLL - if (MSG_NO_WGUI(flag)) - return 0; -#endif -/* -#ifdef ACORN_GUI - if (MSG_NO_AGUI(flag)) - return 0; -#endif - */ -#ifdef DLL /* don't display message if data is redirected */ - if (((Uz_Globs *)pG)->redirect_data && - !((Uz_Globs *)pG)->redirect_text) - return 0; -#endif - - if (MSG_STDERR(flag) && !((Uz_Globs *)pG)->UzO.tflag) - outfp = (FILE *)stderr; - else - outfp = (FILE *)stdout; - -#ifdef QUERY_TRNEWLN - /* some systems require termination of query prompts with '\n' to force - * immediate display */ - if (MSG_MNEWLN(flag)) { /* assumes writable buffer (e.g., slide[]) */ - *endbuf++ = '\n'; /* with room for one more char at end of buf */ - ++size; /* (safe assumption: only used for four */ - } /* short queries in extract.c and fileio.c) */ -#endif - - if (MSG_TNEWLN(flag)) { /* again assumes writable buffer: fragile... */ - if ((!size && !((Uz_Globs *)pG)->sol) || - (size && (endbuf[-1] != '\n'))) - { - *endbuf++ = '\n'; - ++size; - } - } - -#ifdef MORE - /* room for --More-- and one line of overlap: */ - ((Uz_Globs *)pG)->height = SCREENLINES - 2; -#endif - - if (MSG_LNEWLN(flag) && !((Uz_Globs *)pG)->sol) { - /* not at start of line: want newline */ -#ifdef OS2DLL - if (!((Uz_Globs *)pG)->redirect_text) { -#endif - putc('\n', outfp); - fflush(outfp); -#ifdef MORE - if (((Uz_Globs *)pG)->M_flag) - { - ++((Uz_Globs *)pG)->numlines; - if (((Uz_Globs *)pG)->numlines % - ((Uz_Globs *)pG)->height == 0L) /* GRR: fix */ - (*((Uz_Globs *)pG)->mpause)((zvoid *)pG, - LoadFarString(MorePrompt), 1); - } -#endif /* MORE */ - if (MSG_STDERR(flag) && ((Uz_Globs *)pG)->UzO.tflag && - !isatty(1) && isatty(2)) - { - /* error output from testing redirected: also send to stderr */ - putc('\n', stderr); - fflush(stderr); - } -#ifdef OS2DLL - } else - REDIRECTC('\n'); -#endif - ((Uz_Globs *)pG)->sol = TRUE; - } - - /* put zipfile name, filename and/or error/warning keywords here */ - -#ifdef MORE - if (((Uz_Globs *)pG)->M_flag -#ifdef OS2DLL - && !((Uz_Globs *)pG)->redirect_text -#endif - ) - { - while (++p < endbuf) { - if (*p == '\n') { - ++((Uz_Globs *)pG)->numlines; - if (((Uz_Globs *)pG)->numlines % - ((Uz_Globs *)pG)->height == 0L) /* GRR: fix */ - { - if ((error = WriteError(q, p-q+1, outfp)) != 0) - return error; - fflush(outfp); - ((Uz_Globs *)pG)->sol = TRUE; - q = p + 1; - (*((Uz_Globs *)pG)->mpause)((zvoid *)pG, - LoadFarString(MorePrompt), 1); - } - } - } /* end while */ - size = (ulg)(p - q); /* remaining text */ - } -#endif /* MORE */ - - if (size) { -#ifdef OS2DLL - if (!((Uz_Globs *)pG)->redirect_text) { -#endif - if ((error = WriteError(q, size, outfp)) != 0) - return error; - fflush(outfp); - if (MSG_STDERR(flag) && ((Uz_Globs *)pG)->UzO.tflag && - !isatty(1) && isatty(2)) - { - /* error output from testing redirected: also send to stderr */ - if ((error = WriteError(q, size, stderr)) != 0) - return error; - fflush(stderr); - } -#ifdef OS2DLL - } else { /* GRR: this is ugly: hide with macro */ - if ((error = REDIRECTPRINT(q, size)) != 0) - return error; - } -#endif - ((Uz_Globs *)pG)->sol = (endbuf[-1] == '\n'); - } - return 0; - -} /* end function UzpMessagePrnt() */ - - - - - -#ifdef DLL - -/*****************************/ -/* Function UzpMessageNull() */ /* convenience routine for no output at all */ -/*****************************/ - -int UZ_EXP UzpMessageNull(pG, buf, size, flag) - zvoid *pG; /* globals struct: always passed */ - uch *buf; /* preformatted string to be printed */ - ulg size; /* length of string (may include nulls) */ - int flag; /* flag bits */ -{ - return 0; - -} /* end function UzpMessageNull() */ - -#endif /* DLL */ - - - - - -/***********************/ -/* Function UzpInput() */ /* GRR: this is a placeholder for now */ -/***********************/ - -int UZ_EXP UzpInput(pG, buf, size, flag) - zvoid *pG; /* globals struct: always passed */ - uch *buf; /* preformatted string to be printed */ - int *size; /* (address of) size of buf and of returned string */ - int flag; /* flag bits (bit 0: no echo) */ -{ - /* tell picky compilers to shut up about "unused variable" warnings */ - pG = pG; buf = buf; flag = flag; - - *size = 0; - return 0; - -} /* end function UzpInput() */ - - - - - -#if (!defined(WINDLL) && !defined(MACOS)) - -/***************************/ -/* Function UzpMorePause() */ -/***************************/ - -void UZ_EXP UzpMorePause(pG, prompt, flag) - zvoid *pG; /* globals struct: always passed */ - ZCONST char *prompt; /* "--More--" prompt */ - int flag; /* 0 = any char OK; 1 = accept only '\n', ' ', q */ -{ - uch c; - -/*--------------------------------------------------------------------------- - Print a prompt and wait for the user to press a key, then erase prompt - if possible. - ---------------------------------------------------------------------------*/ - - if (!((Uz_Globs *)pG)->sol) - fprintf(stderr, "\n"); - /* numlines may or may not be used: */ - fprintf(stderr, prompt, ((Uz_Globs *)pG)->numlines); - fflush(stderr); - if (flag & 1) { - do { - c = (uch)FGETCH(0); - } while (c != '\r' && c != '\n' && c != ' ' && c != 'q' && c != 'Q'); - } else - c = (uch)FGETCH(0); - - /* newline was not echoed, so cover up prompt line */ - fprintf(stderr, LoadFarString(HidePrompt)); - fflush(stderr); - - if (ToLower(c) == 'q') { - DESTROYGLOBALS() - EXIT(PK_COOL); - } - - ((Uz_Globs *)pG)->sol = TRUE; - -} /* end function UzpMorePause() */ - -#endif /* !WINDLL && !MACOS */ - - - - -#ifndef WINDLL - -/**************************/ -/* Function UzpPassword() */ -/**************************/ - -int UZ_EXP UzpPassword (pG, rcnt, pwbuf, size, zfn, efn) - zvoid *pG; /* pointer to UnZip's internal global vars */ - int *rcnt; /* retry counter */ - char *pwbuf; /* buffer for password */ - int size; /* size of password buffer */ - ZCONST char *zfn; /* name of zip archive */ - ZCONST char *efn; /* name of archive entry being processed */ -{ -#if CRYPT - int r = IZ_PW_ENTERED; - char *m; - char *prompt; - -#ifndef REENTRANT - /* tell picky compilers to shut up about "unused variable" warnings */ - pG = pG; -#endif - - if (*rcnt == 0) { /* First call for current entry */ - *rcnt = 2; - if ((prompt = (char *)malloc(2*FILNAMSIZ + 15)) != (char *)NULL) { - sprintf(prompt, LoadFarString(PasswPrompt), - FnFilter1(zfn), FnFilter2(efn)); - m = prompt; - } else - m = (char *)LoadFarString(PasswPrompt2); - } else { /* Retry call, previous password was wrong */ - (*rcnt)--; - prompt = NULL; - m = (char *)LoadFarString(PasswRetry); - } - - m = getp(__G__ m, pwbuf, size); - if (prompt != (char *)NULL) { - free(prompt); - } - if (m == (char *)NULL) { - r = IZ_PW_ERROR; - } - else if (*pwbuf == '\0') { - r = IZ_PW_CANCELALL; - } - return r; - -#else /* !CRYPT */ - /* tell picky compilers to shut up about "unused variable" warnings */ - pG = pG; rcnt = rcnt; pwbuf = pwbuf; size = size; zfn = zfn; efn = efn; - - return IZ_PW_ERROR; /* internal error; function should never get called */ -#endif /* ?CRYPT */ - -} /* end function UzpPassword() */ - - - - - -/**********************/ -/* Function handler() */ -/**********************/ - -void handler(signal) /* upon interrupt, turn on echo and exit cleanly */ - int signal; -{ - GETGLOBALS(); - -#if !(defined(SIGBUS) || defined(SIGSEGV)) /* add a newline if not at */ - (*G.message)((zvoid *)&G, slide, 0L, 0x41); /* start of line (to stderr; */ -#endif /* slide[] should be safe) */ - - echon(); - -#ifdef SIGBUS - if (signal == SIGBUS) { - Info(slide, 0x421, ((char *)slide, LoadFarString(ZipfileCorrupt), - "bus error")); - DESTROYGLOBALS() - EXIT(PK_BADERR); - } -#endif /* SIGBUS */ - -#ifdef SIGSEGV - if (signal == SIGSEGV) { - Info(slide, 0x421, ((char *)slide, LoadFarString(ZipfileCorrupt), - "segmentation violation")); - DESTROYGLOBALS() - EXIT(PK_BADERR); - } -#endif /* SIGSEGV */ - - /* probably ctrl-C */ - DESTROYGLOBALS() -#if defined(AMIGA) && defined(__SASC) - _abort(); -#endif - EXIT(IZ_CTRLC); /* was EXIT(0), then EXIT(PK_ERR) */ -} - -#endif /* !WINDLL */ - - - - -#if (!defined(VMS) && !defined(CMS_MVS)) -#if (!defined(OS2) || defined(TIMESTAMP)) - -#if (!defined(HAVE_MKTIME) || defined(AMIGA) || defined(WIN32)) -/* also used in amiga/filedate.c and win32/win32.c */ -ZCONST ush ydays[] = - { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; -#endif - -/*******************************/ -/* Function dos_to_unix_time() */ /* used for freshening/updating/timestamps */ -/*******************************/ - -time_t dos_to_unix_time(dosdatetime) - ulg dosdatetime; -{ - time_t m_time; - -#ifdef HAVE_MKTIME - - ZCONST time_t now = time(NULL); - struct tm *tm; -# define YRBASE 1900 - - tm = localtime(&now); - tm->tm_isdst = -1; /* let mktime determine if DST is in effect */ - - /* dissect date */ - tm->tm_year = ((int)(dosdatetime >> 25) & 0x7f) + (1980 - YRBASE); - tm->tm_mon = ((int)(dosdatetime >> 21) & 0x0f) - 1; - tm->tm_mday = ((int)(dosdatetime >> 16) & 0x1f); - - /* dissect time */ - tm->tm_hour = (int)((unsigned)dosdatetime >> 11) & 0x1f; - tm->tm_min = (int)((unsigned)dosdatetime >> 5) & 0x3f; - tm->tm_sec = (int)((unsigned)dosdatetime << 1) & 0x3e; - - m_time = mktime(tm); - NATIVE_TO_TIMET(m_time) /* NOP unless MSC 7.0 or Macintosh */ - TTrace((stderr, " final m_time = %lu\n", (ulg)m_time)); - -#else /* !HAVE_MKTIME */ - - int yr, mo, dy, hh, mm, ss; -#ifdef TOPS20 -# define YRBASE 1900 - struct tmx *tmx; - char temp[20]; -#else /* !TOPS20 */ -# define YRBASE 1970 - int leap; - unsigned days; - struct tm *tm; -#if (!defined(MACOS) && !defined(RISCOS) && !defined(QDOS) && !defined(TANDEM)) -#ifdef WIN32 - TIME_ZONE_INFORMATION tzinfo; - DWORD res; -#else /* ! WIN32 */ -#ifndef BSD4_4 /* GRR: change to !defined(MODERN) ? */ -#if (defined(BSD) || defined(MTS) || defined(__GO32__)) - struct timeb tbp; -#else /* !(BSD || MTS || __GO32__) */ -#ifdef DECLARE_TIMEZONE - extern time_t timezone; -#endif -#endif /* ?(BSD || MTS || __GO32__) */ -#endif /* !BSD4_4 */ -#endif /* ?WIN32 */ -#endif /* !MACOS && !RISCOS && !QDOS && !TANDEM */ -#endif /* ?TOPS20 */ - - - /* dissect date */ - yr = ((int)(dosdatetime >> 25) & 0x7f) + (1980 - YRBASE); - mo = ((int)(dosdatetime >> 21) & 0x0f) - 1; - dy = ((int)(dosdatetime >> 16) & 0x1f) - 1; - - /* dissect time */ - hh = (int)((unsigned)dosdatetime >> 11) & 0x1f; - mm = (int)((unsigned)dosdatetime >> 5) & 0x3f; - ss = (int)((unsigned)dosdatetime & 0x1f) * 2; - -#ifdef TOPS20 - tmx = (struct tmx *)malloc(sizeof(struct tmx)); - sprintf (temp, "%02d/%02d/%02d %02d:%02d:%02d", mo+1, dy+1, yr, hh, mm, ss); - time_parse(temp, tmx, (char *)0); - m_time = time_make(tmx); - free(tmx); - -#else /* !TOPS20 */ - -/*--------------------------------------------------------------------------- - Calculate the number of seconds since the epoch, usually 1 January 1970. - ---------------------------------------------------------------------------*/ - - /* leap = # of leap yrs from YRBASE up to but not including current year */ - leap = ((yr + YRBASE - 1) / 4); /* leap year base factor */ - - /* calculate days from BASE to this year and add expired days this year */ - days = (yr * 365) + (leap - 492) + ydays[mo]; - - /* if year is a leap year and month is after February, add another day */ - if ((mo > 1) && ((yr+YRBASE)%4 == 0) && ((yr+YRBASE) != 2100)) - ++days; /* OK through 2199 */ - - /* convert date & time to seconds relative to 00:00:00, 01/01/YRBASE */ - m_time = (time_t)((unsigned long)(days + dy) * 86400L + - (unsigned long)hh * 3600L + - (unsigned long)(mm * 60 + ss)); - /* - 1; MS-DOS times always rounded up to nearest even second */ - TTrace((stderr, "dos_to_unix_time:\n")); - TTrace((stderr, " m_time before timezone = %lu\n", (ulg)m_time)); - -/*--------------------------------------------------------------------------- - Adjust for local standard timezone offset. - ---------------------------------------------------------------------------*/ - -#if (!defined(MACOS) && !defined(RISCOS) && !defined(QDOS) && !defined(TANDEM)) -#ifdef WIN32 - /* account for timezone differences */ - res = GetTimeZoneInformation(&tzinfo); - if (res != TIME_ZONE_ID_UNKNOWN) - { - m_time += 60*(tzinfo.Bias); -#else /* !WIN32 */ -#if (defined(BSD) || defined(MTS) || defined(__GO32__)) -#ifdef BSD4_4 - if ( (dosdatetime >= DOSTIME_2038_01_18) && - (m_time < (time_t)0x70000000L) ) - m_time = U_TIME_T_MAX; /* saturate in case of (unsigned) overflow */ - if (m_time < (time_t)0L) /* a converted DOS time cannot be negative */ - m_time = S_TIME_T_MAX; /* -> saturate at max signed time_t value */ - if ((tm = localtime(&m_time)) != (struct tm *)NULL) - m_time -= tm->tm_gmtoff; /* sec. EAST of GMT: subtr. */ -#else /* !(BSD4_4 */ - ftime(&tbp); /* get `timezone' */ - m_time += tbp.timezone * 60L; /* seconds WEST of GMT: add */ -#endif /* ?(BSD4_4 || __EMX__) */ -#else /* !(BSD || MTS || __GO32__) */ - /* tzset was already called at start of process_zipfiles() */ - /* tzset(); */ /* set `timezone' variable */ -#ifndef __BEOS__ /* BeOS DR8 has no timezones... */ - m_time += timezone; /* seconds WEST of GMT: add */ -#endif -#endif /* ?(BSD || MTS || __GO32__) */ -#endif /* ?WIN32 */ - TTrace((stderr, " m_time after timezone = %lu\n", (ulg)m_time)); - -/*--------------------------------------------------------------------------- - Adjust for local daylight savings (summer) time. - ---------------------------------------------------------------------------*/ - -#ifndef BSD4_4 /* (DST already added to tm_gmtoff, so skip tm_isdst) */ - if ( (dosdatetime >= DOSTIME_2038_01_18) && - (m_time < (time_t)0x70000000L) ) - m_time = U_TIME_T_MAX; /* saturate in case of (unsigned) overflow */ - if (m_time < (time_t)0L) /* a converted DOS time cannot be negative */ - m_time = S_TIME_T_MAX; /* -> saturate at max signed time_t value */ - TIMET_TO_NATIVE(m_time) /* NOP unless MSC 7.0 or Macintosh */ - if (((tm = localtime((time_t *)&m_time)) != NULL) && tm->tm_isdst) -#ifdef WIN32 - m_time += 60L * tzinfo.DaylightBias; /* adjust with DST bias */ - else - m_time += 60L * tzinfo.StandardBias; /* add StdBias (normally 0) */ -#else - m_time -= 60L * 60L; /* adjust for daylight savings time */ -#endif - NATIVE_TO_TIMET(m_time) /* NOP unless MSC 7.0 or Macintosh */ - TTrace((stderr, " m_time after DST = %lu\n", (ulg)m_time)); -#endif /* !BSD4_4 */ -#ifdef WIN32 - } -#endif -#endif /* !MACOS && !RISCOS && !QDOS && !TANDEM */ -#endif /* ?TOPS20 */ - -#endif /* ?HAVE_MKTIME */ - - if ( (dosdatetime >= DOSTIME_2038_01_18) && - (m_time < (time_t)0x70000000L) ) - m_time = U_TIME_T_MAX; /* saturate in case of (unsigned) overflow */ - if (m_time < (time_t)0L) /* a converted DOS time cannot be negative */ - m_time = S_TIME_T_MAX; /* -> saturate at max signed time_t value */ - - return m_time; - -} /* end function dos_to_unix_time() */ - -#endif /* !OS2 || TIMESTAMP */ -#endif /* !VMS && !CMS_MVS */ - - - -#if (!defined(VMS) && !defined(OS2) && !defined(CMS_MVS)) - -/******************************/ -/* Function check_for_newer() */ /* used for overwriting/freshening/updating */ -/******************************/ - -int check_for_newer(__G__ filename) /* return 1 if existing file is newer */ - __GDEF /* or equal; 0 if older; -1 if doesn't */ - char *filename; /* exist yet */ -{ - time_t existing, archive; -#ifdef USE_EF_UT_TIME - iztimes z_utime; -#endif -#ifdef AOS_VS - long dyy, dmm, ddd, dhh, dmin, dss; - - - dyy = (lrec.last_mod_dos_datetime >> 25) + 1980; - dmm = (lrec.last_mod_dos_datetime >> 21) & 0x0f; - ddd = (lrec.last_mod_dos_datetime >> 16) & 0x1f; - dhh = (lrec.last_mod_dos_datetime >> 11) & 0x1f; - dmin = (lrec.last_mod_dos_datetime >> 5) & 0x3f; - dss = (lrec.last_mod_dos_datetime & 0x1f) * 2; - - /* under AOS/VS, file times can only be set at creation time, - * with the info in a special DG format. Make sure we can create - * it here - we delete it later & re-create it, whether or not - * it exists now. - */ - if (!zvs_create(filename, (((ulg)dgdate(dmm, ddd, dyy)) << 16) | - (dhh*1800L + dmin*30L + dss/2L), -1L, -1L, (char *) -1, -1, -1, -1)) - return DOES_NOT_EXIST; -#endif /* AOS_VS */ - - Trace((stderr, "check_for_newer: doing stat(%s)\n", FnFilter1(filename))); - if (SSTAT(filename, &G.statbuf)) { - Trace((stderr, - "check_for_newer: stat(%s) returns %d: file does not exist\n", - FnFilter1(filename), SSTAT(filename, &G.statbuf))); -#ifdef SYMLINKS - Trace((stderr, "check_for_newer: doing lstat(%s)\n", - FnFilter1(filename))); - /* GRR OPTION: could instead do this test ONLY if G.symlnk is true */ - if (lstat(filename, &G.statbuf) == 0) { - Trace((stderr, - "check_for_newer: lstat(%s) returns 0: symlink does exist\n", - FnFilter1(filename))); - if (QCOND2 && !uO.overwrite_all) - Info(slide, 0, ((char *)slide, LoadFarString(FileIsSymLink), - FnFilter1(filename), " with no real file")); - return EXISTS_AND_OLDER; /* symlink dates are meaningless */ - } -#endif /* SYMLINKS */ - return DOES_NOT_EXIST; - } - Trace((stderr, "check_for_newer: stat(%s) returns 0: file exists\n", - FnFilter1(filename))); - -#ifdef SYMLINKS - /* GRR OPTION: could instead do this test ONLY if G.symlnk is true */ - if (lstat(filename, &G.statbuf) == 0 && S_ISLNK(G.statbuf.st_mode)) { - Trace((stderr, "check_for_newer: %s is a symbolic link\n", - FnFilter1(filename))); - if (QCOND2 && !uO.overwrite_all) - Info(slide, 0, ((char *)slide, LoadFarString(FileIsSymLink), - FnFilter1(filename), "")); - return EXISTS_AND_OLDER; /* symlink dates are meaningless */ - } -#endif /* SYMLINKS */ - - NATIVE_TO_TIMET(G.statbuf.st_mtime) /* NOP unless MSC 7.0 or Macintosh */ - -#ifdef USE_EF_UT_TIME - /* The `Unix extra field mtime' should be used for comparison with the - * time stamp of the existing file >>>ONLY<<< when the EF info is also - * used to set the modification time of the extracted file. - */ - if (G.extra_field && -#ifdef IZ_CHECK_TZ - G.tz_is_valid && -#endif - (ef_scan_for_izux(G.extra_field, G.lrec.extra_field_length, 0, - G.lrec.last_mod_dos_datetime, &z_utime, NULL) - & EB_UT_FL_MTIME)) - { - TTrace((stderr, "check_for_newer: using Unix extra field mtime\n")); - existing = G.statbuf.st_mtime; - archive = z_utime.mtime; - } else { - /* round up existing filetime to nearest 2 seconds for comparison, - * but saturate in case of arithmetic overflow - */ - existing = ((G.statbuf.st_mtime & 1) && - (G.statbuf.st_mtime + 1 > G.statbuf.st_mtime)) ? - G.statbuf.st_mtime + 1 : G.statbuf.st_mtime; - archive = dos_to_unix_time(G.lrec.last_mod_dos_datetime); - } -#else /* !USE_EF_UT_TIME */ - /* round up existing filetime to nearest 2 seconds for comparison, - * but saturate in case of arithmetic overflow - */ - existing = ((G.statbuf.st_mtime & 1) && - (G.statbuf.st_mtime + 1 > G.statbuf.st_mtime)) ? - G.statbuf.st_mtime + 1 : G.statbuf.st_mtime; - archive = dos_to_unix_time(G.lrec.last_mod_dos_datetime); -#endif /* ?USE_EF_UT_TIME */ - - TTrace((stderr, "check_for_newer: existing %lu, archive %lu, e-a %ld\n", - (ulg)existing, (ulg)archive, (long)(existing-archive))); - - return (existing >= archive); - -} /* end function check_for_newer() */ - -#endif /* !VMS && !OS2 && !CMS_MVS */ - - - - - -/************************/ -/* Function do_string() */ -/************************/ - -int do_string(__G__ len, option) /* return PK-type error code */ - __GDEF - unsigned int len; /* without prototype, ush converted to this */ - int option; -{ - long comment_bytes_left, block_length; - int error=PK_OK; - ush extra_len; -#ifdef AMIGA - char tmp_fnote[2 * AMIGA_FILENOTELEN]; /* extra room for squozen chars */ -#endif - - -/*--------------------------------------------------------------------------- - This function processes arbitrary-length (well, usually) strings. Four - options are allowed: SKIP, wherein the string is skipped (pretty logical, - eh?); DISPLAY, wherein the string is printed to standard output after un- - dergoing any necessary or unnecessary character conversions; DS_FN, - wherein the string is put into the filename[] array after undergoing ap- - propriate conversions (including case-conversion, if that is indicated: - see the global variable pInfo->lcflag); and EXTRA_FIELD, wherein the - `string' is assumed to be an extra field and is copied to the (freshly - malloced) buffer G.extra_field. The third option should be OK since - filename is dimensioned at 1025, but we check anyway. - - The string, by the way, is assumed to start at the current file-pointer - position; its length is given by len. So start off by checking length - of string: if zero, we're already done. - ---------------------------------------------------------------------------*/ - - if (!len) - return PK_COOL; - - switch (option) { - - /* - * First case: print string on standard output. First set loop vari- - * ables, then loop through the comment in chunks of OUTBUFSIZ bytes, - * converting formats and printing as we go. The second half of the - * loop conditional was added because the file might be truncated, in - * which case comment_bytes_left will remain at some non-zero value for - * all time. outbuf and slide are used as scratch buffers because they - * are available (we should be either before or in between any file pro- - * cessing). - */ - - case DISPLAY: - case DISPL_8: - comment_bytes_left = len; - block_length = OUTBUFSIZ; /* for the while statement, first time */ - while (comment_bytes_left > 0 && block_length > 0) { - register uch *p = G.outbuf; - register uch *q = G.outbuf; - - if ((block_length = readbuf(__G__ (char *)G.outbuf, - (unsigned) MIN((long)OUTBUFSIZ, comment_bytes_left))) == 0) - return PK_EOF; - comment_bytes_left -= block_length; - - /* this is why we allocated an extra byte for outbuf: terminate - * with zero (ASCIIZ) */ - G.outbuf[(unsigned)block_length] = '\0'; - - /* remove all ASCII carriage returns from comment before printing - * (since used before A_TO_N(), check for CR instead of '\r') - */ - while (*p) { - while (*p == CR) - ++p; - *q++ = *p++; - } - /* could check whether (p - outbuf) == block_length here */ - *q = '\0'; - - if (option == DISPL_8) { - /* translate the text coded in the entry's host-dependent - "extended ASCII" charset into the compiler's (system's) - internal text code page */ - Ext_ASCII_TO_Native((char *)G.outbuf, G.pInfo->hostnum, - G.crec.version_made_by[0]); -#ifdef WINDLL - /* translate to ANSI (RTL internal codepage may be OEM) */ - INTERN_TO_ISO((char *)G.outbuf, (char *)G.outbuf); -#else /* !WINDLL */ -#ifdef WIN32 - /* Win9x console always uses OEM character coding, and - WinNT console is set to OEM charset by default, too */ - INTERN_TO_OEM((char *)G.outbuf, (char *)G.outbuf); -#endif /* WIN32 */ -#endif /* ?WINDLL */ - } else { - A_TO_N(G.outbuf); /* translate string to native */ - } - -#ifdef WINDLL - /* ran out of local mem -- had to cheat */ - win_fprintf((zvoid *)&G, stdout, len, (char *)G.outbuf); - win_fprintf((zvoid *)&G, stdout, 2, (char *)"\n\n"); -#else /* !WINDLL */ -#ifdef NOANSIFILT /* GRR: can ANSI be used with EBCDIC? */ - (*G.message)((zvoid *)&G, G.outbuf, (ulg)(q-G.outbuf), 0); -#else /* ASCII, filter out ANSI escape sequences and handle ^S (pause) */ - p = G.outbuf - 1; - q = slide; - while (*++p) { - int pause = FALSE; - - if (*p == 0x1B) { /* ASCII escape char */ - *q++ = '^'; - *q++ = '['; - } else if (*p == 0x13) { /* ASCII ^S (pause) */ - pause = TRUE; - if (p[1] == LF) /* ASCII LF */ - *q++ = *++p; - else if (p[1] == CR && p[2] == LF) { /* ASCII CR LF */ - *q++ = *++p; - *q++ = *++p; - } - } else - *q++ = *p; - if ((unsigned)(q-slide) > WSIZE-3 || pause) { /* flush */ - (*G.message)((zvoid *)&G, slide, (ulg)(q-slide), 0); - q = slide; - if (pause && G.extract_flag) /* don't pause for list/test */ - (*G.mpause)((zvoid *)&G, LoadFarString(QuitPrompt), 0); - } - } - (*G.message)((zvoid *)&G, slide, (ulg)(q-slide), 0); -#endif /* ?NOANSIFILT */ -#endif /* ?WINDLL */ - } - /* add '\n' if not at start of line */ - (*G.message)((zvoid *)&G, slide, 0L, 0x40); - break; - - /* - * Second case: read string into filename[] array. The filename should - * never ever be longer than FILNAMSIZ-1 (1024), but for now we'll check, - * just to be sure. - */ - - case DS_FN: - extra_len = 0; - if (len >= FILNAMSIZ) { - Info(slide, 0x401, ((char *)slide, - LoadFarString(FilenameTooLongTrunc))); - error = PK_WARN; - extra_len = (ush)(len - FILNAMSIZ + 1); - len = FILNAMSIZ - 1; - } - if (readbuf(__G__ G.filename, len) == 0) - return PK_EOF; - G.filename[len] = '\0'; /* terminate w/zero: ASCIIZ */ - - /* translate the Zip entry filename coded in host-dependent "extended - ASCII" into the compiler's (system's) internal text code page */ - Ext_ASCII_TO_Native(G.filename, G.pInfo->hostnum, - G.crec.version_made_by[0]); - - if (G.pInfo->lcflag) /* replace with lowercase filename */ - TOLOWER(G.filename, G.filename); - - if (G.pInfo->vollabel && len > 8 && G.filename[8] == '.') { - char *p = G.filename+8; - while (*p++) - p[-1] = *p; /* disk label, and 8th char is dot: remove dot */ - } - - if (!extra_len) /* we're done here */ - break; - - /* - * We truncated the filename, so print what's left and then fall - * through to the SKIP routine. - */ - Info(slide, 0x401, ((char *)slide, "[ %s ]\n", FnFilter1(G.filename))); - len = extra_len; - /* FALL THROUGH... */ - - /* - * Third case: skip string, adjusting readbuf's internal variables - * as necessary (and possibly skipping to and reading a new block of - * data). - */ - - case SKIP: - /* cur_zipfile_bufstart already takes account of extra_bytes, so don't - * correct for it twice: */ - ZLSEEK(G.cur_zipfile_bufstart - G.extra_bytes + - (G.inptr-G.inbuf) + len) - break; - - /* - * Fourth case: assume we're at the start of an "extra field"; malloc - * storage for it and read data into the allocated space. - */ - - case EXTRA_FIELD: - if (G.extra_field != (uch *)NULL) - free(G.extra_field); - if ((G.extra_field = (uch *)malloc(len)) == (uch *)NULL) { - Info(slide, 0x401, ((char *)slide, LoadFarString(ExtraFieldTooLong), - len)); - /* cur_zipfile_bufstart already takes account of extra_bytes, - * so don't correct for it twice: */ - ZLSEEK(G.cur_zipfile_bufstart - G.extra_bytes + - (G.inptr-G.inbuf) + len) - } else - if (readbuf(__G__ (char *)G.extra_field, len) == 0) - return PK_EOF; - break; - -#ifdef AMIGA - /* - * Fifth case, for the Amiga only: take the comment that would ordinarily - * be skipped over, and turn it into a 79 character string that will be - * attached to the file as a "filenote" after it is extracted. - */ - - case FILENOTE: - if ((extra_len = readbuf(__G__ tmp_fnote, (unsigned) - MIN(len, 2 * AMIGA_FILENOTELEN - 1))) == 0) - return PK_EOF; - if ((len -= extra_len) > 0) /* treat remainder as in case SKIP: */ - ZLSEEK(G.cur_zipfile_bufstart - G.extra_bytes - + (G.inptr - G.inbuf) + len) - /* convert multi-line text into single line with no ctl-chars: */ - tmp_fnote[extra_len] = '\0'; - while ((short int) --extra_len >= 0) - if ((unsigned) tmp_fnote[extra_len] < ' ') - if (tmp_fnote[extra_len+1] == ' ') /* no excess */ - strcpy(tmp_fnote+extra_len, tmp_fnote+extra_len+1); - else - tmp_fnote[extra_len] = ' '; - tmp_fnote[AMIGA_FILENOTELEN - 1] = '\0'; - if (G.filenotes[G.filenote_slot]) - free(G.filenotes[G.filenote_slot]); /* should not happen */ - G.filenotes[G.filenote_slot] = NULL; - if (tmp_fnote[0]) { - if (!(G.filenotes[G.filenote_slot] = malloc(strlen(tmp_fnote)+1))) - return PK_MEM; - strcpy(G.filenotes[G.filenote_slot], tmp_fnote); - } - break; -#endif /* AMIGA */ - - } /* end switch (option) */ - - return error; - -} /* end function do_string() */ - - - - - -/***********************/ -/* Function makeword() */ -/***********************/ - -ush makeword(b) - ZCONST uch *b; -{ - /* - * Convert Intel style 'short' integer to non-Intel non-16-bit - * host format. This routine also takes care of byte-ordering. - */ - return (ush)((b[1] << 8) | b[0]); -} - - - - - -/***********************/ -/* Function makelong() */ -/***********************/ - -ulg makelong(sig) - ZCONST uch *sig; -{ - /* - * Convert intel style 'long' variable to non-Intel non-16-bit - * host format. This routine also takes care of byte-ordering. - */ - return (((ulg)sig[3]) << 24) - + (((ulg)sig[2]) << 16) - + (((ulg)sig[1]) << 8) - + ((ulg)sig[0]); -} - - - -#if CRYPT - -#ifdef NEED_STR2ISO -/**********************/ -/* Function str2iso() */ -/**********************/ - -char *str2iso(dst, src) - char *dst; /* destination buffer */ - register ZCONST char *src; /* source string */ -{ -#ifdef INTERN_TO_ISO - INTERN_TO_ISO(src, dst); -#else - register uch c; - register char *dstp = dst; - - do { - c = (uch)foreign(*src++); - *dstp++ = (char)ASCII2ISO(c); - } while (c != '\0'); -#endif - - return dst; -} -#endif /* NEED_STR2ISO */ - - -#ifdef NEED_STR2OEM -/**********************/ -/* Function str2oem() */ -/**********************/ - -char *str2oem(dst, src) - char *dst; /* destination buffer */ - register ZCONST char *src; /* source string */ -{ -#ifdef INTERN_TO_OEM - INTERN_TO_OEM(src, dst); -#else - register uch c; - register char *dstp = dst; - - do { - c = (uch)foreign(*src++); - *dstp++ = (char)ASCII2OEM(c); - } while (c != '\0'); -#endif - - return dst; -} -#endif /* NEED_STR2OEM */ - -#endif /* CRYPT */ - - -#ifdef ZMEM /* memset/memcmp/memcpy for systems without either them or */ - /* bzero/bcmp/bcopy */ - /* (no known systems as of 960211) */ - -/*********************/ -/* Function memset() */ -/*********************/ - -zvoid *memset(buf, init, len) - register zvoid *buf; /* buffer location */ - register int init; /* initializer character */ - register unsigned int len; /* length of the buffer */ -{ - zvoid *start; - - start = buf; - while (len--) - *((char *)buf++) = (char)init; - return start; -} - - - -/*********************/ -/* Function memcmp() */ -/*********************/ - -int memcmp(b1, b2, len) - register ZCONST zvoid *b1; - register ZCONST zvoid *b2; - register unsigned int len; -{ - register int c; - - if (len > 0) do { - if ((c = (int)(*((ZCONST unsigned char *)b1)++) - - (int)(*((ZCONST unsigned char *)b2)++)) != 0) - return c; - } while (--len > 0) - return 0; -} - - - -/*********************/ -/* Function memcpy() */ -/*********************/ - -zvoid *memcpy(dst, src, len) - register zvoid *dst; - register ZCONST zvoid *src; - register unsigned int len; -{ - zvoid *start; - - start = dst; - while (len-- > 0) - *((char *)dst)++ = *((ZCONST char *)src)++; - return start; -} - -#endif /* ZMEM */ - - - - - -/************************/ -/* Function zstrnicmp() */ -/************************/ - -int zstrnicmp(s1, s2, n) - register ZCONST char *s1, *s2; - register unsigned n; -{ - for (; n > 0; --n, ++s1, ++s2) { - - if (ToLower(*s1) != ToLower(*s2)) - /* test includes early termination of one string */ - return (ToLower(*s1) < ToLower(*s2))? -1 : 1; - - if (*s1 == '\0') /* both strings terminate early */ - return 0; - } - return 0; -} - - - - - -#ifdef REGULUS /* returns the inode number on success(!)...argh argh argh */ -# undef stat - -/********************/ -/* Function zstat() */ -/********************/ - -int zstat(p, s) - char *p; - struct stat *s; -{ - return (stat(p,s) >= 0? 0 : (-1)); -} - -#endif /* REGULUS */ - - - - - -#ifdef SMALL_MEM - -/*******************************/ -/* Function fLoadFarString() */ /* (and friends...) */ -/*******************************/ - -char *fLoadFarString(__GPRO__ const char Far *sz) -{ - (void)zfstrcpy(G.rgchBigBuffer, sz); - return G.rgchBigBuffer; -} - -char *fLoadFarStringSmall(__GPRO__ const char Far *sz) -{ - (void)zfstrcpy(G.rgchSmallBuffer, sz); - return G.rgchSmallBuffer; -} - -char *fLoadFarStringSmall2(__GPRO__ const char Far *sz) -{ - (void)zfstrcpy(G.rgchSmallBuffer2, sz); - return G.rgchSmallBuffer2; -} - - - - -#if (!defined(_MSC_VER) || (_MSC_VER < 600)) -/*************************/ -/* Function zfstrcpy() */ /* portable clone of _fstrcpy() */ -/*************************/ - -char Far * Far zfstrcpy(char Far *s1, const char Far *s2) -{ - char Far *p = s1; - - while ((*s1++ = *s2++) != '\0'); - return p; -} -#endif /* !_MSC_VER || (_MSC_VER < 600) */ - -#endif /* SMALL_MEM */ diff --git a/Build/source/libs/unzip/globals.c b/Build/source/libs/unzip/globals.c deleted file mode 100644 index d795090b983..00000000000 --- a/Build/source/libs/unzip/globals.c +++ /dev/null @@ -1,204 +0,0 @@ -/*--------------------------------------------------------------------------- - - globals.c - - Routines to allocate and initialize globals, with or without threads. - - Contents: registerGlobalPointer() - deregisterGlobalPointer() - getGlobalPointer() - globalsCtor() - - ---------------------------------------------------------------------------*/ - - -#define UNZIP_INTERNAL -#include "unzip.h" - -#ifndef FUNZIP -/* initialization of sigs is completed at runtime so unzip(sfx) executable - * won't look like a zipfile - */ -char central_hdr_sig[4] = {0, 0, 0x01, 0x02}; -char local_hdr_sig[4] = {0, 0, 0x03, 0x04}; -char end_central_sig[4] = {0, 0, 0x05, 0x06}; -/* extern char extd_local_sig[4] = {0, 0, 0x07, 0x08}; NOT USED YET */ - -ZCONST char *fnames[2] = {"*", NULL}; /* default filenames vector */ -#endif - - -#ifndef REENTRANT - Uz_Globs G; -#else /* REENTRANT */ - -# ifndef USETHREADID - Uz_Globs *GG; -# else /* USETHREADID */ -# define THREADID_ENTRIES 0x40 - - int lastScan; - Uz_Globs *threadPtrTable[THREADID_ENTRIES]; - ulg threadIdTable [THREADID_ENTRIES] = { - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* Make sure there are */ - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* THREADID_ENTRIES 0s */ - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 - }; - - static ZCONST char Far TooManyThreads[] = - "error: more than %d simultaneous threads.\n\ - Some threads are probably not calling DESTROYTHREAD()\n"; - static ZCONST char Far EntryNotFound[] = - "error: couldn't find global pointer in table.\n\ - Maybe somebody accidentally called DESTROYTHREAD() twice.\n"; - static ZCONST char Far GlobalPointerMismatch[] = - "error: global pointer in table does not match pointer passed as\ - parameter\n"; - -static void registerGlobalPointer OF((__GPRO)); - - - -static void registerGlobalPointer(__G) - __GDEF -{ - int scan=0; - ulg tid = GetThreadId(); - - while (threadIdTable[scan] && scan < THREADID_ENTRIES) - scan++; - - if (scan == THREADID_ENTRIES) { - ZCONST char *tooMany = LoadFarString(TooManyThreads); - Info(slide, 0x421, ((char *)slide, tooMany, THREADID_ENTRIES)); - free(pG); - EXIT(PK_MEM); /* essentially memory error before we've started */ - } - - threadIdTable [scan] = tid; - threadPtrTable[scan] = pG; - lastScan = scan; -} - - - -void deregisterGlobalPointer(__G) - __GDEF -{ - int scan=0; - ulg tid = GetThreadId(); - - - while (threadIdTable[scan] != tid && scan < THREADID_ENTRIES) - scan++; - -/*--------------------------------------------------------------------------- - There are two things we can do if we can't find the entry: ignore it or - scream. The most likely reason for it not to be here is the user calling - this routine twice. Since this could cause BIG problems if any globals - are accessed after the first call, we'd better scream. - ---------------------------------------------------------------------------*/ - - if (scan == THREADID_ENTRIES || threadPtrTable[scan] != pG) { - ZCONST char *noEntry; - if (scan == THREADID_ENTRIES) - noEntry = LoadFarString(EntryNotFound); - else - noEntry = LoadFarString(GlobalPointerMismatch); - Info(slide, 0x421, ((char *)slide, noEntry)); - EXIT(PK_WARN); /* programming error, but after we're all done */ - } - - threadIdTable [scan] = 0; - lastScan = scan; - free(threadPtrTable[scan]); -} - - - -Uz_Globs *getGlobalPointer() -{ - int scan=0; - ulg tid = GetThreadId(); - - while (threadIdTable[scan] != tid && scan < THREADID_ENTRIES) - scan++; - -/*--------------------------------------------------------------------------- - There are two things we can do if we can't find the entry: ignore it or - scream. The most likely reason for it not to be here is the user calling - this routine twice. Since this could cause BIG problems if any globals - are accessed after the first call, we'd better scream. - ---------------------------------------------------------------------------*/ - - if (scan == THREADID_ENTRIES) { - ZCONST char *noEntry = LoadFarString(EntryNotFound); - fprintf(stderr, noEntry); /* can't use Info w/o a global pointer */ - EXIT(PK_ERR); /* programming error while still working */ - } - - return threadPtrTable[scan]; -} - -# endif /* ?USETHREADID */ -#endif /* ?REENTRANT */ - - - -Uz_Globs *globalsCtor() -{ -#ifdef REENTRANT - Uz_Globs *pG = (Uz_Globs *)malloc(sizeof(Uz_Globs)); - - if (!pG) - return (Uz_Globs *)NULL; -#endif /* REENTRANT */ - - /* for REENTRANT version, G is defined as (*pG) */ - - memzero(&G, sizeof(Uz_Globs)); - -#ifndef FUNZIP -#ifdef CMS_MVS - uO.aflag=1; - uO.C_flag=1; -#endif - - uO.lflag=(-1); - G.wildzipfn = ""; - G.pfnames = (char **)fnames; - G.pxnames = (char **)&fnames[1]; - G.pInfo = G.info; - G.sol = TRUE; /* at start of line */ - - G.message = UzpMessagePrnt; - G.input = UzpInput; /* not used by anyone at the moment... */ -#if defined(WINDLL) || defined(MACOS) - G.mpause = NULL; /* has scrollbars: no need for pausing */ -#else - G.mpause = UzpMorePause; -#endif - G.decr_passwd = UzpPassword; -#endif /* !FUNZIP */ - -#if (!defined(DOS_FLX_H68_OS2_W32) && !defined(AMIGA) && !defined(RISCOS)) -#if (!defined(MACOS) && !defined(ATARI) && !defined(VMS)) - G.echofd = -1; -#endif /* !(MACOS || ATARI || VMS) */ -#endif /* !(DOS_FLX_H68_OS2_W32 || AMIGA || RISCOS) */ - -#ifdef SYSTEM_SPECIFIC_CTOR - SYSTEM_SPECIFIC_CTOR(__G); -#endif - -#ifdef REENTRANT -#ifdef USETHREADID - registerGlobalPointer(__G); -#else - GG = &G; -#endif /* ?USETHREADID */ -#endif /* REENTRANT */ - - return &G; -} diff --git a/Build/source/libs/unzip/globals.h b/Build/source/libs/unzip/globals.h deleted file mode 100644 index 49439cffe7f..00000000000 --- a/Build/source/libs/unzip/globals.h +++ /dev/null @@ -1,395 +0,0 @@ -/*--------------------------------------------------------------------------- - - globals.h - - There is usually no need to include this file since unzip.h includes it. - - This header file is used by all of the UnZip source files. It contains - a struct definition that is used to "house" all of the global variables. - This is done to allow for multithreaded environments (OS/2, NT, Win95, - Unix) to call UnZip through an API without a semaphore. REENTRANT should - be defined for all platforms that require this. - - GLOBAL CONSTRUCTOR AND DESTRUCTOR (API WRITERS READ THIS!!!) - ------------------------------------------------------------ - - No, it's not C++, but it's as close as we can get with K&R. - - The main() of each process that uses these globals must include the - CONSTRUCTGLOBALS; statement. This will malloc enough memory for the - structure and initialize any variables that require it. This must - also be done by any API function that jumps into the middle of the - code. - - The DESTROYGLOBALS; statement should be inserted before EVERY "EXIT(n)". - Naturally, it also needs to be put before any API returns as well. - In fact, it's much more important in API functions since the process - will NOT end, and therefore the memory WON'T automatically be freed - by the operating system. - - USING VARIABLES FROM THE STRUCTURE - ---------------------------------- - - All global variables must now be prefixed with `G.' which is either a - global struct (in which case it should be the only global variable) or - a macro for the value of a local pointer variable that is passed from - function to function. Yes, this is a pain. But it's the only way to - allow full reentrancy. - - ADDING VARIABLES TO THE STRUCTURE - --------------------------------- - - If you make the inclusion of any variables conditional, be sure to only - check macros that are GUARANTEED to be included in every module. - For instance, newzip and pwdarg are needed only if CRYPT is TRUE, - but this is defined after unzip.h has been read. If you are not careful, - some modules will expect your variable to be part of this struct while - others won't. This will cause BIG problems. (Inexplicable crashes at - strange times, car fires, etc.) When in doubt, always include it! - - Note also that UnZipSFX needs a few variables that UnZip doesn't. However, - it also includes some object files from UnZip. If we were to conditionally - include the extra variables that UnZipSFX needs, the object files from - UnZip would not mesh with the UnZipSFX object files. Result: we just - include the UnZipSFX variables every time. (It's only an extra 4 bytes - so who cares!) - - ADDING FUNCTIONS - ---------------- - - To support this new global struct, all functions must now conditionally - pass the globals pointer (pG) to each other. This is supported by 5 macros: - __GPRO, __GPRO__, __G, __G__ and __GDEF. A function that needs no other - parameters would look like this: - - int extract_or_test_files(__G) - __GDEF - { - ... stuff ... - } - - A function with other parameters would look like: - - int memextract(__G__ tgt, tgtsize, src, srcsize) - __GDEF - uch *tgt, *src; - ulg tgtsize, srcsize; - { - ... stuff ... - } - - In the Function Prototypes section of unzpriv.h, you should use __GPRO and - __GPRO__ instead: - - int uz_opts OF((__GPRO__ int *pargc, char ***pargv)); - int process_zipfiles OF((__GPRO)); - - Note that there is NO comma after __G__ or __GPRO__ and no semi-colon after - __GDEF. I wish there was another way but I don't think there is. - - - TESTING THE CODE - ----------------- - - Whether your platform requires reentrancy or not, you should always try - building with REENTRANT defined if any functions have been added. It is - pretty easy to forget a __G__ or a __GDEF and this mistake will only show - up if REENTRANT is defined. All platforms should run with REENTRANT - defined. Platforms that can't take advantage of it will just be paying - a performance penalty needlessly. - - SIGNAL MADNESS - -------------- - - This whole pointer passing scheme falls apart when it comes to SIGNALs. - I handle this situation 2 ways right now. If you define USETHREADID, - UnZip will include a 64-entry table. Each entry can hold a global - pointer and thread ID for one thread. This should allow up to 64 - threads to access UnZip simultaneously. Calling DESTROYGLOBALS() - will free the global struct and zero the table entry. If somebody - forgets to call DESTROYGLOBALS(), this table will eventually fill up - and UnZip will exit with an error message. A good way to test your - code to make sure you didn't forget a DESTROYGLOBALS() is to change - THREADID_ENTRIES to 3 or 4 in globals.c, making the table real small. - Then make a small test program that calls your API a dozen times. - - Those platforms that don't have threads still need to be able to compile - with REENTRANT defined to test and see if new code is correctly written - to work either way. For these platforms, I simply keep a global pointer - called GG that points to the Globals structure. Good enough for testing. - - I believe that NT has thread level storage. This could probably be used - to store a global pointer for the sake of the signal handler more cleanly - than my table approach. - - ---------------------------------------------------------------------------*/ - -#ifndef __globals_h -#define __globals_h - -#ifdef USE_ZLIB -# include "zlib.h" -#endif - - -/*************/ -/* Globals */ -/*************/ - -typedef struct Globals { -#ifdef DLL - zvoid *callerglobs; /* pointer to structure of pass-through global vars */ -#endif - - /* command options of general use */ - UzpOpts UzO; /* command options of general use */ - -#ifndef FUNZIP - /* command options specific to the high level command line interface */ -#ifdef MORE - int M_flag; /* -M: built-in "more" function */ -#endif - - /* internal flags and general globals */ -#ifdef MORE - int height; /* check for SIGWINCH, etc., eventually... */ -#endif /* (take line-wrapping into account?) */ -#if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME)) - int tz_is_valid; /* indicates that timezone info can be used */ -#endif -#ifdef WINDLL - int prompt_always; /* prompt to overwrite if TRUE */ -#endif - int noargs; /* did true command line have *any* arguments? */ - unsigned filespecs; /* number of real file specifications to be matched */ - unsigned xfilespecs; /* number of excluded filespecs to be matched */ - int process_all_files; - int create_dirs; /* used by main(), mapname(), checkdir() */ - int extract_flag; - int newzip; /* reset in extract.c; used in crypt.c */ - LONGINT real_ecrec_offset; - LONGINT expect_ecrec_offset; - long csize; /* used by decompr. (NEXTBYTE): must be signed */ - long ucsize; /* used by unReduce(), explode() */ - long used_csize; /* used by extract_or_test_member(), explode() */ - -#ifdef DLL - int fValidate; /* true if only validating an archive */ - int filenotfound; - int redirect_data; /* redirect data to memory buffer */ - int redirect_text; /* redirect text output to buffer */ -# ifndef NO_SLIDE_REDIR - int redirect_slide; /* redirect decompression area to mem buffer */ - unsigned _wsize; -# endif - unsigned redirect_size; /* size of redirected output buffer */ - uch *redirect_buffer; /* pointer to head of allocated buffer */ - uch *redirect_pointer; /* pointer past end of written data */ -# ifndef NO_SLIDE_REDIR - uch *redirect_sldptr; /* head of decompression slide buffer */ -# endif -# ifdef OS2DLL - cbList(processExternally); /* call-back list */ -# endif -#endif /* DLL */ - - char **pfnames; - char **pxnames; - char sig[4]; - char answerbuf[10]; - min_info info[DIR_BLKSIZ]; - min_info *pInfo; -#endif /* !FUNZIP */ - union work area; /* see unzpriv.h for definition of work */ - -#ifndef FUNZIP -# if (!defined(USE_ZLIB) || defined(USE_OWN_CRCTAB)) - ZCONST ulg near *crc_32_tab; -# else - ZCONST ulg Far *crc_32_tab; -# endif -#endif - ulg crc32val; /* CRC shift reg. (was static in funzip) */ - -#ifdef FUNZIP - FILE *in; /* file descriptor of compressed stream */ -#endif - uch *inbuf; /* input buffer (any size is OK) */ - uch *inptr; /* pointer into input buffer */ - int incnt; - -#ifndef FUNZIP - ulg bitbuf; - int bits_left; /* unreduce and unshrink only */ - int zipeof; - char *argv0; /* used for NT and EXE_EXTENSION */ - char *wildzipfn; - char *zipfn; /* GRR: WINDLL: must nuke any malloc'd zipfn... */ -#ifdef USE_STRM_INPUT - FILE *zipfd; /* zipfile file descriptor */ -#else - int zipfd; /* zipfile file handle */ -#endif - LONGINT ziplen; - LONGINT cur_zipfile_bufstart; /* extract_or_test, readbuf, ReadByte */ - LONGINT extra_bytes; /* used in unzip.c, misc.c */ - uch *extra_field; /* Unix, VMS, Mac, OS/2, Acorn, ... */ - uch *hold; - - local_file_hdr lrec; /* used in unzip.c, extract.c */ - cdir_file_hdr crec; /* used in unzip.c, extract.c, misc.c */ - ecdir_rec ecrec; /* used in unzip.c, extract.c */ - struct stat statbuf; /* used by main, mapname, check_for_newer */ - - int mem_mode; - uch *outbufptr; /* extract.c static */ - ulg outsize; /* extract.c static */ - int reported_backslash; /* extract.c static */ - int disk_full; - int newfile; - - int didCRlast; /* fileio static */ - ulg numlines; /* fileio static: number of lines printed */ - int sol; /* fileio static: at start of line */ - int no_ecrec; /* process static */ -#ifdef SYMLINKS - int symlnk; -#endif -#ifdef NOVELL_BUG_FAILSAFE - int dne; /* true if stat() says file doesn't exist */ -#endif - - FILE *outfile; - uch *outbuf; - uch *realbuf; - -#ifndef VMS /* if SMALL_MEM, outbuf2 is initialized in */ - uch *outbuf2; /* process_zipfiles() (never changes); */ -#endif /* else malloc'd ONLY if unshrink and -a */ -#endif /* !FUNZIP */ - uch *outptr; - ulg outcnt; /* number of chars stored in outbuf */ -#ifndef FUNZIP - char filename[FILNAMSIZ]; /* also used by NT for temporary SFX path */ - -#ifdef CMS_MVS - char *tempfn; /* temp file used; erase on close */ -#endif - - char *key; /* crypt static: decryption password or NULL */ - int nopwd; /* crypt static */ -#endif /* !FUNZIP */ - ulg keys[3]; /* crypt static: keys defining pseudo-random sequence */ - -#if (!defined(DOS_FLX_H68_OS2_W32) && !defined(AMIGA) && !defined(RISCOS)) -#if (!defined(MACOS) && !defined(ATARI) && !defined(VMS)) - int echofd; /* ttyio static: file descriptor whose echo is off */ -#endif /* !(MACOS || ATARI || VMS) */ -#endif /* !(DOS_FLX_H68_OS2_W32 || AMIGA || RISCOS) */ - - unsigned hufts; /* track memory usage */ - -#ifdef USE_ZLIB - int inflInit; /* inflate static: zlib inflate() initialized */ - z_stream dstrm; /* inflate global: decompression stream */ -#else - struct huft *fixed_tl; /* inflate static */ - struct huft *fixed_td; /* inflate static */ - int fixed_bl, fixed_bd; /* inflate static */ - unsigned wp; /* inflate static: current position in slide */ - ulg bb; /* inflate static: bit buffer */ - unsigned bk; /* inflate static: bits in bit buffer */ -#endif /* ?USE_ZLIB */ - -#ifndef FUNZIP -#ifdef SMALL_MEM - char rgchBigBuffer[512]; - char rgchSmallBuffer[96]; - char rgchSmallBuffer2[160]; /* boosted to 160 for local3[] in unzip.c */ -#endif - - MsgFn *message; - InputFn *input; - PauseFn *mpause; - PasswdFn *decr_passwd; - StatCBFn *statreportcb; -#ifdef WINDLL - LPUSERFUNCTIONS lpUserFunctions; -#endif - - int incnt_leftover; /* so improved NEXTBYTE does not waste input */ - uch *inptr_leftover; - -#ifdef VMS_TEXT_CONV - int VMS_line_state; /* so native VMS variable-length text files are */ - int VMS_line_length; /* readable on other platforms */ - int VMS_line_pad; -#endif -#endif /* !FUNZIP */ - -#ifdef SYSTEM_SPECIFIC_GLOBALS - SYSTEM_SPECIFIC_GLOBALS -#endif - -} Uz_Globs; /* end of struct Globals */ - - -/***************************************************************************/ - - -#ifdef FUNZIP -# if (!defined(USE_ZLIB) || defined(USE_OWN_CRCTAB)) - extern ZCONST ulg near crc_32_tab[256]; -# else - extern ZCONST ulg Far *crc_32_tab; -# endif -# define CRC_32_TAB crc_32_tab -#else -# define CRC_32_TAB G.crc_32_tab -#endif - - -Uz_Globs *globalsCtor OF((void)); - -/* pseudo constant sigs; they are initialized at runtime so unzip executable - * won't look like a zipfile - */ -extern char local_hdr_sig[4]; -extern char central_hdr_sig[4]; -extern char end_central_sig[4]; -/* extern char extd_local_sig[4]; NOT USED YET */ - -#ifdef REENTRANT -# define G (*(Uz_Globs *)pG) -# define __G pG -# define __G__ pG, -# define __GPRO Uz_Globs *pG -# define __GPRO__ Uz_Globs *pG, -# define __GDEF Uz_Globs *pG; -# ifdef USETHREADID - extern int lastScan; - void deregisterGlobalPointer OF((__GPRO)); - Uz_Globs *getGlobalPointer OF((void)); -# define GETGLOBALS() Uz_Globs *pG = getGlobalPointer(); -# define DESTROYGLOBALS() {free_G_buffers(pG); deregisterGlobalPointer(pG);} -# else - extern Uz_Globs *GG; -# define GETGLOBALS() Uz_Globs *pG = GG; -# define DESTROYGLOBALS() {free_G_buffers(pG); free(pG);} -# endif /* ?USETHREADID */ -# define CONSTRUCTGLOBALS() Uz_Globs *pG = globalsCtor() -#else /* !REENTRANT */ - extern Uz_Globs G; -# define __G -# define __G__ -# define __GPRO void -# define __GPRO__ -# define __GDEF -# define GETGLOBALS() -# define CONSTRUCTGLOBALS() globalsCtor() -# define DESTROYGLOBALS() -#endif /* ?REENTRANT */ - -#define uO G.UzO - -#endif /* __globals_h */ diff --git a/Build/source/libs/unzip/inflate.c b/Build/source/libs/unzip/inflate.c deleted file mode 100644 index 93913f15e05..00000000000 --- a/Build/source/libs/unzip/inflate.c +++ /dev/null @@ -1,1305 +0,0 @@ -/* inflate.c -- put in the public domain by Mark Adler - version c16b, 29 March 1998 */ - - -/* You can do whatever you like with this source file, though I would - prefer that if you modify it and redistribute it that you include - comments to that effect with your name and the date. Thank you. - - History: - vers date who what - ---- --------- -------------- ------------------------------------ - a ~~ Feb 92 M. Adler used full (large, one-step) lookup table - b1 21 Mar 92 M. Adler first version with partial lookup tables - b2 21 Mar 92 M. Adler fixed bug in fixed-code blocks - b3 22 Mar 92 M. Adler sped up match copies, cleaned up some - b4 25 Mar 92 M. Adler added prototypes; removed window[] (now - is the responsibility of unzip.h--also - changed name to slide[]), so needs diffs - for unzip.c and unzip.h (this allows - compiling in the small model on MSDOS); - fixed cast of q in huft_build(); - b5 26 Mar 92 M. Adler got rid of unintended macro recursion. - b6 27 Mar 92 M. Adler got rid of nextbyte() routine. fixed - bug in inflate_fixed(). - c1 30 Mar 92 M. Adler removed lbits, dbits environment variables. - changed BMAX to 16 for explode. Removed - OUTB usage, and replaced it with flush()-- - this was a 20% speed improvement! Added - an explode.c (to replace unimplod.c) that - uses the huft routines here. Removed - register union. - c2 4 Apr 92 M. Adler fixed bug for file sizes a multiple of 32k. - c3 10 Apr 92 M. Adler reduced memory of code tables made by - huft_build significantly (factor of two to - three). - c4 15 Apr 92 M. Adler added NOMEMCPY do kill use of memcpy(). - worked around a Turbo C optimization bug. - c5 21 Apr 92 M. Adler added the WSIZE #define to allow reducing - the 32K window size for specialized - applications. - c6 31 May 92 M. Adler added some typecasts to eliminate warnings - c7 27 Jun 92 G. Roelofs added some more typecasts (444: MSC bug). - c8 5 Oct 92 J-l. Gailly added ifdef'd code to deal with PKZIP bug. - c9 9 Oct 92 M. Adler removed a memory error message (~line 416). - c10 17 Oct 92 G. Roelofs changed ULONG/UWORD/byte to ulg/ush/uch, - removed old inflate, renamed inflate_entry - to inflate, added Mark's fix to a comment. - c10.5 14 Dec 92 M. Adler fix up error messages for incomplete trees. - c11 2 Jan 93 M. Adler fixed bug in detection of incomplete - tables, and removed assumption that EOB is - the longest code (bad assumption). - c12 3 Jan 93 M. Adler make tables for fixed blocks only once. - c13 5 Jan 93 M. Adler allow all zero length codes (pkzip 2.04c - outputs one zero length code for an empty - distance tree). - c14 12 Mar 93 M. Adler made inflate.c standalone with the - introduction of inflate.h. - c14b 16 Jul 93 G. Roelofs added (unsigned) typecast to w at 470. - c14c 19 Jul 93 J. Bush changed v[N_MAX], l[288], ll[28x+3x] arrays - to static for Amiga. - c14d 13 Aug 93 J-l. Gailly de-complicatified Mark's c[*p++]++ thing. - c14e 8 Oct 93 G. Roelofs changed memset() to memzero(). - c14f 22 Oct 93 G. Roelofs renamed quietflg to qflag; made Trace() - conditional; added inflate_free(). - c14g 28 Oct 93 G. Roelofs changed l/(lx+1) macro to pointer (Cray bug) - c14h 7 Dec 93 C. Ghisler huft_build() optimizations. - c14i 9 Jan 94 A. Verheijen set fixed_t{d,l} to NULL after freeing; - G. Roelofs check NEXTBYTE macro for EOF. - c14j 23 Jan 94 G. Roelofs removed Ghisler "optimizations"; ifdef'd - EOF check. - c14k 27 Feb 94 G. Roelofs added some typecasts to avoid warnings. - c14l 9 Apr 94 G. Roelofs fixed split comments on preprocessor lines - to avoid bug in Encore compiler. - c14m 7 Jul 94 P. Kienitz modified to allow assembler version of - inflate_codes() (define ASM_INFLATECODES) - c14n 22 Jul 94 G. Roelofs changed fprintf to macro for DLL versions - c14o 23 Aug 94 C. Spieler added a newline to a debug statement; - G. Roelofs added another typecast to avoid MSC warning - c14p 4 Oct 94 G. Roelofs added (voidp *) cast to free() argument - c14q 30 Oct 94 G. Roelofs changed fprintf macro to MESSAGE() - c14r 1 Nov 94 G. Roelofs fixed possible redefinition of CHECK_EOF - c14s 7 May 95 S. Maxwell OS/2 DLL globals stuff incorporated; - P. Kienitz "fixed" ASM_INFLATECODES macro/prototype - c14t 18 Aug 95 G. Roelofs added UZinflate() to use zlib functions; - changed voidp to zvoid; moved huft_build() - and huft_free() to end of file - c14u 1 Oct 95 G. Roelofs moved G into definition of MESSAGE macro - c14v 8 Nov 95 P. Kienitz changed ASM_INFLATECODES to use a regular - call with __G__ instead of a macro - c15 3 Aug 96 M. Adler fixed bomb-bug on random input data (Adobe) - c15b 24 Aug 96 M. Adler more fixes for random input data - c15c 28 Mar 97 G. Roelofs changed USE_ZLIB fatal exit code from - PK_MEM2 to PK_MEM3 - c16 20 Apr 97 J. Altman added memzero(v[]) in huft_build() - c16b 29 Mar 98 C. Spieler modified DLL code for slide redirection - */ - - -/* - Inflate deflated (PKZIP's method 8 compressed) data. The compression - method searches for as much of the current string of bytes (up to a - length of 258) in the previous 32K bytes. If it doesn't find any - matches (of at least length 3), it codes the next byte. Otherwise, it - codes the length of the matched string and its distance backwards from - the current position. There is a single Huffman code that codes both - single bytes (called "literals") and match lengths. A second Huffman - code codes the distance information, which follows a length code. Each - length or distance code actually represents a base value and a number - of "extra" (sometimes zero) bits to get to add to the base value. At - the end of each deflated block is a special end-of-block (EOB) literal/ - length code. The decoding process is basically: get a literal/length - code; if EOB then done; if a literal, emit the decoded byte; if a - length then get the distance and emit the referred-to bytes from the - sliding window of previously emitted data. - - There are (currently) three kinds of inflate blocks: stored, fixed, and - dynamic. The compressor outputs a chunk of data at a time and decides - which method to use on a chunk-by-chunk basis. A chunk might typically - be 32K to 64K, uncompressed. If the chunk is uncompressible, then the - "stored" method is used. In this case, the bytes are simply stored as - is, eight bits per byte, with none of the above coding. The bytes are - preceded by a count, since there is no longer an EOB code. - - If the data are compressible, then either the fixed or dynamic methods - are used. In the dynamic method, the compressed data are preceded by - an encoding of the literal/length and distance Huffman codes that are - to be used to decode this block. The representation is itself Huffman - coded, and so is preceded by a description of that code. These code - descriptions take up a little space, and so for small blocks, there is - a predefined set of codes, called the fixed codes. The fixed method is - used if the block ends up smaller that way (usually for quite small - chunks); otherwise the dynamic method is used. In the latter case, the - codes are customized to the probabilities in the current block and so - can code it much better than the pre-determined fixed codes can. - - The Huffman codes themselves are decoded using a multi-level table - lookup, in order to maximize the speed of decoding plus the speed of - building the decoding tables. See the comments below that precede the - lbits and dbits tuning parameters. - - GRR: return values(?) - 0 OK - 1 incomplete table - 2 bad input - 3 not enough memory - */ - - -/* - Notes beyond the 1.93a appnote.txt: - - 1. Distance pointers never point before the beginning of the output - stream. - 2. Distance pointers can point back across blocks, up to 32k away. - 3. There is an implied maximum of 7 bits for the bit length table and - 15 bits for the actual data. - 4. If only one code exists, then it is encoded using one bit. (Zero - would be more efficient, but perhaps a little confusing.) If two - codes exist, they are coded using one bit each (0 and 1). - 5. There is no way of sending zero distance codes--a dummy must be - sent if there are none. (History: a pre 2.0 version of PKZIP would - store blocks with no distance codes, but this was discovered to be - too harsh a criterion.) Valid only for 1.93a. 2.04c does allow - zero distance codes, which is sent as one code of zero bits in - length. - 6. There are up to 286 literal/length codes. Code 256 represents the - end-of-block. Note however that the static length tree defines - 288 codes just to fill out the Huffman codes. Codes 286 and 287 - cannot be used though, since there is no length base or extra bits - defined for them. Similarily, there are up to 30 distance codes. - However, static trees define 32 codes (all 5 bits) to fill out the - Huffman codes, but the last two had better not show up in the data. - 7. Unzip can check dynamic Huffman blocks for complete code sets. - The exception is that a single code would not be complete (see #4). - 8. The five bits following the block type is really the number of - literal codes sent minus 257. - 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits - (1+6+6). Therefore, to output three times the length, you output - three codes (1+1+1), whereas to output four times the same length, - you only need two codes (1+3). Hmm. - 10. In the tree reconstruction algorithm, Code = Code + Increment - only if BitLength(i) is not zero. (Pretty obvious.) - 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19) - 12. Note: length code 284 can represent 227-258, but length code 285 - really is 258. The last length deserves its own, short code - since it gets used a lot in very redundant files. The length - 258 is special since 258 - 3 (the min match length) is 255. - 13. The literal/length and distance code bit lengths are read as a - single stream of lengths. It is possible (and advantageous) for - a repeat code (16, 17, or 18) to go across the boundary between - the two sets of lengths. - */ - - -#define PKZIP_BUG_WORKAROUND /* PKZIP 1.93a problem--live with it */ - -/* - inflate.h must supply the uch slide[WSIZE] array, the zvoid typedef - (void if (void *) is accepted, else char) and the NEXTBYTE, - FLUSH() and memzero macros. If the window size is not 32K, it - should also define WSIZE. If INFMOD is defined, it can include - compiled functions to support the NEXTBYTE and/or FLUSH() macros. - There are defaults for NEXTBYTE and FLUSH() below for use as - examples of what those functions need to do. Normally, you would - also want FLUSH() to compute a crc on the data. inflate.h also - needs to provide these typedefs: - - typedef unsigned char uch; - typedef unsigned short ush; - typedef unsigned long ulg; - - This module uses the external functions malloc() and free() (and - probably memset() or bzero() in the memzero() macro). Their - prototypes are normally found in and . - */ - -/* #define DEBUG */ -#define INFMOD /* tell inflate.h to include code to be compiled */ -#include "inflate.h" - - -#ifndef WSIZE /* default is 32K */ -# define WSIZE 0x8000 /* window size--must be a power of two, and at least */ -#endif /* 32K for zip's deflate method */ - -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) -# define wsize G._wsize /* wsize is a variable */ -#else -# define wsize WSIZE /* wsize is a constant */ -#endif - - -#ifndef NEXTBYTE /* default is to simply get a byte from stdin */ -# define NEXTBYTE getchar() -#endif - -#ifndef MESSAGE /* only used twice, for fixed strings--NOT general-purpose */ -# define MESSAGE(str,len,flag) fprintf(stderr,(char *)(str)) -#endif - -#ifndef FLUSH /* default is to simply write the buffer to stdout */ -# define FLUSH(n) fwrite(redirSlide, 1, n, stdout) /* return value not used */ -#endif -/* Warning: the fwrite above might not work on 16-bit compilers, since - 0x8000 might be interpreted as -32,768 by the library function. */ - -#ifndef Trace -# ifdef DEBUG -# define Trace(x) fprintf x -# else -# define Trace(x) -# endif -#endif - - -/*---------------------------------------------------------------------------*/ -#ifdef USE_ZLIB - - -/* - GRR: return values for both original inflate() and UZinflate() - 0 OK - 1 incomplete table(?) - 2 bad input - 3 not enough memory - */ - -/**************************/ -/* Function UZinflate() */ -/**************************/ - -int UZinflate(__G) /* decompress an inflated entry using the zlib routines */ - __GDEF -{ - int err=Z_OK; - -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) - if (G.redirect_slide) - wsize = G.redirect_size, redirSlide = G.redirect_buffer; - else - wsize = WSIZE, redirSlide = slide; -#endif - - G.dstrm.next_out = redirSlide; - G.dstrm.avail_out = wsize; - - G.dstrm.next_in = G.inptr; - G.dstrm.avail_in = G.incnt; - - if (!G.inflInit) { - unsigned i; - int windowBits; - - /* only need to test this stuff once */ - if (zlib_version[0] != ZLIB_VERSION[0]) { - Info(slide, 0x21, ((char *)slide, - "error: incompatible zlib version (expected %s, found %s)\n", - ZLIB_VERSION, zlib_version)); - return 3; - } else if (strcmp(zlib_version, ZLIB_VERSION) != 0) - Info(slide, 0x21, ((char *)slide, - "warning: different zlib version (expected %s, using %s)\n", - ZLIB_VERSION, zlib_version)); - - /* windowBits = log2(wsize) */ - for (i = ((unsigned)wsize * 2 - 1), windowBits = 0; - !(i & 1); i >>= 1, ++windowBits); - if ((unsigned)windowBits > (unsigned)15) - windowBits = 15; - else if (windowBits < 8) - windowBits = 8; - - G.dstrm.zalloc = (alloc_func)Z_NULL; - G.dstrm.zfree = (free_func)Z_NULL; - - Trace((stderr, "initializing inflate()\n")); - err = inflateInit2(&G.dstrm, -windowBits); - - if (err == Z_MEM_ERROR) - return 3; - else if (err != Z_OK) - Trace((stderr, "oops! (inflateInit2() err = %d)\n", err)); - G.inflInit = 1; - } - -#ifdef FUNZIP - while (err != Z_STREAM_END) { -#else /* !FUNZIP */ - while (G.csize > 0) { - Trace((stderr, "first loop: G.csize = %ld\n", G.csize)); -#endif /* ?FUNZIP */ - while (G.dstrm.avail_out > 0) { - err = inflate(&G.dstrm, Z_PARTIAL_FLUSH); - - if (err == Z_DATA_ERROR) - return 2; - else if (err == Z_MEM_ERROR) - return 3; - else if (err != Z_OK && err != Z_STREAM_END) - Trace((stderr, "oops! (inflate(first loop) err = %d)\n", err)); - -#ifdef FUNZIP - if (err == Z_STREAM_END) /* "END-of-entry-condition" ? */ -#else /* !FUNZIP */ - if (G.csize <= 0L) /* "END-of-entry-condition" ? */ -#endif /* ?FUNZIP */ - break; - - if (G.dstrm.avail_in <= 0) { - if (fillinbuf(__G) == 0) - return 2; /* no "END-condition" yet, but no more data */ - - G.dstrm.next_in = G.inptr; - G.dstrm.avail_in = G.incnt; - } - Trace((stderr, " avail_in = %d\n", G.dstrm.avail_in)); - } - FLUSH(wsize - G.dstrm.avail_out); /* flush slide[] */ - Trace((stderr, "inside loop: flushing %ld bytes (ptr diff = %ld)\n", - (long)(wsize - G.dstrm.avail_out), - (long)(G.dstrm.next_out-(Bytef *)redirSlide))); - G.dstrm.next_out = redirSlide; - G.dstrm.avail_out = wsize; - } - - /* no more input, so loop until we have all output */ - Trace((stderr, "beginning final loop: err = %d\n", err)); - while (err != Z_STREAM_END) { - err = inflate(&G.dstrm, Z_PARTIAL_FLUSH); - if (err == Z_DATA_ERROR) - return 2; - else if (err == Z_MEM_ERROR) - return 3; - else if (err == Z_BUF_ERROR) { /* DEBUG */ - Trace((stderr, "zlib inflate() did not detect stream end (%s, %s)\n" - , G.zipfn, G.filename)); - break; - } else if (err != Z_OK && err != Z_STREAM_END) { - Trace((stderr, "oops! (inflate(final loop) err = %d)\n", err)); - DESTROYGLOBALS() - EXIT(PK_MEM3); - } - FLUSH(wsize - G.dstrm.avail_out); /* final flush of slide[] */ - Trace((stderr, "final loop: flushing %ld bytes (ptr diff = %ld)\n", - (long)(wsize - G.dstrm.avail_out), - (long)(G.dstrm.next_out-(Bytef *)redirSlide))); - G.dstrm.next_out = redirSlide; - G.dstrm.avail_out = wsize; - } - Trace((stderr, "total in = %ld, total out = %ld\n", G.dstrm.total_in, - G.dstrm.total_out)); - - G.inptr = (uch *)G.dstrm.next_in; - G.incnt = (G.inbuf + INBUFSIZ) - G.inptr; /* reset for other routines */ - - err = inflateReset(&G.dstrm); - if (err != Z_OK) - Trace((stderr, "oops! (inflateReset() err = %d)\n", err)); - - return 0; -} - - -/*---------------------------------------------------------------------------*/ -#else /* !USE_ZLIB */ - - -/* Function prototypes */ -#ifndef OF -# ifdef __STDC__ -# define OF(a) a -# else -# define OF(a) () -# endif -#endif /* !OF */ -int inflate_codes OF((__GPRO__ struct huft *tl, struct huft *td, - int bl, int bd)); -static int inflate_stored OF((__GPRO)); -static int inflate_fixed OF((__GPRO)); -static int inflate_dynamic OF((__GPRO)); -static int inflate_block OF((__GPRO__ int *e)); - - -/* The inflate algorithm uses a sliding 32K byte window on the uncompressed - stream to find repeated byte strings. This is implemented here as a - circular buffer. The index is updated simply by incrementing and then - and'ing with 0x7fff (32K-1). */ -/* It is left to other modules to supply the 32K area. It is assumed - to be usable as if it were declared "uch slide[32768];" or as just - "uch *slide;" and then malloc'ed in the latter case. The definition - must be in unzip.h, included above. */ - - -/* unsigned wp; moved to globals.h */ /* current position in slide */ - - -/* Tables for deflate from PKZIP's appnote.txt. */ -static ZCONST unsigned border[] = { /* Order of the bit length code lengths */ - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; -static ZCONST ush cplens[] = { /* Copy lengths for literal codes 257..285 */ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; - /* note: see note #13 above about the 258 in this list. */ -static ZCONST ush cplext[] = { /* Extra bits for literal codes 257..285 */ - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, - 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */ -static ZCONST ush cpdist[] = { /* Copy offsets for distance codes 0..29 */ - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577}; -static ZCONST ush cpdext[] = { /* Extra bits for distance codes */ - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, - 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, - 12, 12, 13, 13}; - - -/* moved to consts.h (included in unzip.c), resp. funzip.c */ -#if 0 -/* And'ing with mask_bits[n] masks the lower n bits */ -ZCONST ush near mask_bits[] = { - 0x0000, - 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, - 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff -}; -#endif /* 0 */ - - -/* Macros for inflate() bit peeking and grabbing. - The usage is: - - NEEDBITS(j) - x = b & mask_bits[j]; - DUMPBITS(j) - - where NEEDBITS makes sure that b has at least j bits in it, and - DUMPBITS removes the bits from b. The macros use the variable k - for the number of bits in b. Normally, b and k are register - variables for speed and are initialized at the begining of a - routine that uses these macros from a global bit buffer and count. - - In order to not ask for more bits than there are in the compressed - stream, the Huffman tables are constructed to only ask for just - enough bits to make up the end-of-block code (value 256). Then no - bytes need to be "returned" to the buffer at the end of the last - block. See the huft_build() routine. - */ - -/* These have been moved to globals.h */ -#if 0 -ulg bb; /* bit buffer */ -unsigned bk; /* bits in bit buffer */ -#endif - -#ifndef CHECK_EOF -# define CHECK_EOF /* default as of 5.13/5.2 */ -#endif - -#ifndef CHECK_EOF -# define NEEDBITS(n) {while(k<(n)){b|=((ulg)NEXTBYTE)<>=(n);k-=(n);} - - -/* - Huffman code decoding is performed using a multi-level table lookup. - The fastest way to decode is to simply build a lookup table whose - size is determined by the longest code. However, the time it takes - to build this table can also be a factor if the data being decoded - are not very long. The most common codes are necessarily the - shortest codes, so those codes dominate the decoding time, and hence - the speed. The idea is you can have a shorter table that decodes the - shorter, more probable codes, and then point to subsidiary tables for - the longer codes. The time it costs to decode the longer codes is - then traded against the time it takes to make longer tables. - - This results of this trade are in the variables lbits and dbits - below. lbits is the number of bits the first level table for literal/ - length codes can decode in one step, and dbits is the same thing for - the distance codes. Subsequent tables are also less than or equal to - those sizes. These values may be adjusted either when all of the - codes are shorter than that, in which case the longest code length in - bits is used, or when the shortest code is *longer* than the requested - table size, in which case the length of the shortest code in bits is - used. - - There are two different values for the two tables, since they code a - different number of possibilities each. The literal/length table - codes 286 possible values, or in a flat code, a little over eight - bits. The distance table codes 30 possible values, or a little less - than five bits, flat. The optimum values for speed end up being - about one bit more than those, so lbits is 8+1 and dbits is 5+1. - The optimum values may differ though from machine to machine, and - possibly even between compilers. Your mileage may vary. - */ - - -static ZCONST int lbits = 9; /* bits in base literal/length lookup table */ -static ZCONST int dbits = 6; /* bits in base distance lookup table */ - - -#ifndef ASM_INFLATECODES - -int inflate_codes(__G__ tl, td, bl, bd) - __GDEF -struct huft *tl, *td; /* literal/length and distance decoder tables */ -int bl, bd; /* number of bits decoded by tl[] and td[] */ -/* inflate (decompress) the codes in a deflated (compressed) block. - Return an error code or zero if it all goes ok. */ -{ - register unsigned e; /* table entry flag/number of extra bits */ - unsigned n, d; /* length and index for copy */ - unsigned w; /* current window position */ - struct huft *t; /* pointer to table entry */ - unsigned ml, md; /* masks for bl and bd bits */ - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - - /* make local copies of globals */ - b = G.bb; /* initialize bit buffer */ - k = G.bk; - w = G.wp; /* initialize window position */ - - - /* inflate the coded data */ - ml = mask_bits[bl]; /* precompute masks for speed */ - md = mask_bits[bd]; - while (1) /* do until end of block */ - { - NEEDBITS((unsigned)bl) - if ((e = (t = tl + ((unsigned)b & ml))->e) > 16) - do { - if (e == 99) - return 1; - DUMPBITS(t->b) - e -= 16; - NEEDBITS(e) - } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16); - DUMPBITS(t->b) - if (e == 16) /* then it's a literal */ - { - redirSlide[w++] = (uch)t->v.n; - if (w == wsize) - { - FLUSH(w); - w = 0; - } - } - else /* it's an EOB or a length */ - { - /* exit if end of block */ - if (e == 15) - break; - - /* get length of block to copy */ - NEEDBITS(e) - n = t->v.n + ((unsigned)b & mask_bits[e]); - DUMPBITS(e); - - /* decode distance of block to copy */ - NEEDBITS((unsigned)bd) - if ((e = (t = td + ((unsigned)b & md))->e) > 16) - do { - if (e == 99) - return 1; - DUMPBITS(t->b) - e -= 16; - NEEDBITS(e) - } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16); - DUMPBITS(t->b) - NEEDBITS(e) - d = w - t->v.n - ((unsigned)b & mask_bits[e]); - DUMPBITS(e) - - /* do the copy */ - do { -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) - if (G.redirect_slide) {/* &= w/ wsize unnecessary & wrong if redirect */ - if (d >= wsize) - return 1; /* invalid compressed data */ - n -= (e = (e = wsize - (d > w ? d : w)) > n ? n : e); - } - else -#endif - n -= (e = (e = wsize - ((d &= wsize-1) > w ? d : w)) > n ? n : e); -#ifndef NOMEMCPY - if (w - d >= e) /* (this test assumes unsigned comparison) */ - { - memcpy(redirSlide + w, redirSlide + d, e); - w += e; - d += e; - } - else /* do it slowly to avoid memcpy() overlap */ -#endif /* !NOMEMCPY */ - do { - redirSlide[w++] = redirSlide[d++]; - } while (--e); - if (w == wsize) - { - FLUSH(w); - w = 0; - } - } while (n); - } - } - - - /* restore the globals from the locals */ - G.wp = w; /* restore global window pointer */ - G.bb = b; /* restore global bit buffer */ - G.bk = k; - - - /* done */ - return 0; -} - -#endif /* ASM_INFLATECODES */ - - - -static int inflate_stored(__G) - __GDEF -/* "decompress" an inflated type 0 (stored) block. */ -{ - unsigned n; /* number of bytes in block */ - unsigned w; /* current window position */ - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - - /* make local copies of globals */ - Trace((stderr, "\nstored block")); - b = G.bb; /* initialize bit buffer */ - k = G.bk; - w = G.wp; /* initialize window position */ - - - /* go to byte boundary */ - n = k & 7; - DUMPBITS(n); - - - /* get the length and its complement */ - NEEDBITS(16) - n = ((unsigned)b & 0xffff); - DUMPBITS(16) - NEEDBITS(16) - if (n != (unsigned)((~b) & 0xffff)) - return 1; /* error in compressed data */ - DUMPBITS(16) - - - /* read and output the compressed data */ - while (n--) - { - NEEDBITS(8) - redirSlide[w++] = (uch)b; - if (w == wsize) - { - FLUSH(w); - w = 0; - } - DUMPBITS(8) - } - - - /* restore the globals from the locals */ - G.wp = w; /* restore global window pointer */ - G.bb = b; /* restore global bit buffer */ - G.bk = k; - return 0; -} - - -/* Globals for literal tables (built once) */ -/* Moved to globals.h */ -#if 0 -struct huft *fixed_tl = (struct huft *)NULL; -struct huft *fixed_td; -int fixed_bl, fixed_bd; -#endif - -static int inflate_fixed(__G) - __GDEF -/* decompress an inflated type 1 (fixed Huffman codes) block. We should - either replace this with a custom decoder, or at least precompute the - Huffman tables. */ -{ - /* if first time, set up tables for fixed blocks */ - Trace((stderr, "\nliteral block")); - if (G.fixed_tl == (struct huft *)NULL) - { - int i; /* temporary variable */ - unsigned l[288]; /* length list for huft_build */ - - /* literal table */ - for (i = 0; i < 144; i++) - l[i] = 8; - for (; i < 256; i++) - l[i] = 9; - for (; i < 280; i++) - l[i] = 7; - for (; i < 288; i++) /* make a complete, but wrong code set */ - l[i] = 8; - G.fixed_bl = 7; - if ((i = huft_build(__G__ l, 288, 257, cplens, cplext, - &G.fixed_tl, &G.fixed_bl)) != 0) - { - G.fixed_tl = (struct huft *)NULL; - return i; - } - - /* distance table */ - for (i = 0; i < 30; i++) /* make an incomplete code set */ - l[i] = 5; - G.fixed_bd = 5; - if ((i = huft_build(__G__ l, 30, 0, cpdist, cpdext, - &G.fixed_td, &G.fixed_bd)) > 1) - { - huft_free(G.fixed_tl); - G.fixed_tl = (struct huft *)NULL; - return i; - } - } - - /* decompress until an end-of-block code */ - return inflate_codes(__G__ G.fixed_tl, G.fixed_td, - G.fixed_bl, G.fixed_bd) != 0; -} - - - -static int inflate_dynamic(__G) - __GDEF -/* decompress an inflated type 2 (dynamic Huffman codes) block. */ -{ - int i; /* temporary variables */ - unsigned j; - unsigned l; /* last length */ - unsigned m; /* mask for bit lengths table */ - unsigned n; /* number of lengths to get */ - struct huft *tl; /* literal/length code table */ - struct huft *td; /* distance code table */ - int bl; /* lookup bits for tl */ - int bd; /* lookup bits for td */ - unsigned nb; /* number of bit length codes */ - unsigned nl; /* number of literal/length codes */ - unsigned nd; /* number of distance codes */ -#ifdef PKZIP_BUG_WORKAROUND - unsigned ll[288+32]; /* literal/length and distance code lengths */ -#else - unsigned ll[286+30]; /* literal/length and distance code lengths */ -#endif - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - - /* make local bit buffer */ - Trace((stderr, "\ndynamic block")); - b = G.bb; - k = G.bk; - - - /* read in table lengths */ - NEEDBITS(5) - nl = 257 + ((unsigned)b & 0x1f); /* number of literal/length codes */ - DUMPBITS(5) - NEEDBITS(5) - nd = 1 + ((unsigned)b & 0x1f); /* number of distance codes */ - DUMPBITS(5) - NEEDBITS(4) - nb = 4 + ((unsigned)b & 0xf); /* number of bit length codes */ - DUMPBITS(4) -#ifdef PKZIP_BUG_WORKAROUND - if (nl > 288 || nd > 32) -#else - if (nl > 286 || nd > 30) -#endif - return 1; /* bad lengths */ - - - /* read in bit-length-code lengths */ - for (j = 0; j < nb; j++) - { - NEEDBITS(3) - ll[border[j]] = (unsigned)b & 7; - DUMPBITS(3) - } - for (; j < 19; j++) - ll[border[j]] = 0; - - - /* build decoding table for trees--single level, 7 bit lookup */ - bl = 7; - i = huft_build(__G__ ll, 19, 19, NULL, NULL, &tl, &bl); - if (bl == 0) /* no bit lengths */ - i = 1; - if (i) - { - if (i == 1) - huft_free(tl); - return i; /* incomplete code set */ - } - - - /* read in literal and distance code lengths */ - n = nl + nd; - m = mask_bits[bl]; - i = l = 0; - while ((unsigned)i < n) - { - NEEDBITS((unsigned)bl) - j = (td = tl + ((unsigned)b & m))->b; - DUMPBITS(j) - j = td->v.n; - if (j < 16) /* length of code in bits (0..15) */ - ll[i++] = l = j; /* save last length in l */ - else if (j == 16) /* repeat last length 3 to 6 times */ - { - NEEDBITS(2) - j = 3 + ((unsigned)b & 3); - DUMPBITS(2) - if ((unsigned)i + j > n) - return 1; - while (j--) - ll[i++] = l; - } - else if (j == 17) /* 3 to 10 zero length codes */ - { - NEEDBITS(3) - j = 3 + ((unsigned)b & 7); - DUMPBITS(3) - if ((unsigned)i + j > n) - return 1; - while (j--) - ll[i++] = 0; - l = 0; - } - else /* j == 18: 11 to 138 zero length codes */ - { - NEEDBITS(7) - j = 11 + ((unsigned)b & 0x7f); - DUMPBITS(7) - if ((unsigned)i + j > n) - return 1; - while (j--) - ll[i++] = 0; - l = 0; - } - } - - - /* free decoding table for trees */ - huft_free(tl); - - - /* restore the global bit buffer */ - G.bb = b; - G.bk = k; - - - /* build the decoding tables for literal/length and distance codes */ - bl = lbits; - i = huft_build(__G__ ll, nl, 257, cplens, cplext, &tl, &bl); - if (bl == 0) /* no literals or lengths */ - i = 1; - if (i) - { - if (i == 1) { - if (!uO.qflag) - MESSAGE((uch *)"(incomplete l-tree) ", 21L, 1); - huft_free(tl); - } - return i; /* incomplete code set */ - } - bd = dbits; - i = huft_build(__G__ ll + nl, nd, 0, cpdist, cpdext, &td, &bd); - if (bd == 0 && nl > 257) /* lengths but no distances */ - { - if (!uO.qflag) - MESSAGE((uch *)"(incomplete d-tree) ", 21L, 1); - huft_free(tl); - return 1; - } - if (i == 1) { -#ifdef PKZIP_BUG_WORKAROUND - i = 0; -#else - if (!uO.qflag) - MESSAGE((uch *)"(incomplete d-tree) ", 21L, 1); - huft_free(td); -#endif - } - if (i) - { - huft_free(tl); - return i; - } - - - /* decompress until an end-of-block code */ - if (inflate_codes(__G__ tl, td, bl, bd)) - return 1; - - - /* free the decoding tables, return */ - huft_free(tl); - huft_free(td); - return 0; -} - - - -static int inflate_block(__G__ e) - __GDEF - int *e; /* last block flag */ -/* decompress an inflated block */ -{ - unsigned t; /* block type */ - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - - /* make local bit buffer */ - b = G.bb; - k = G.bk; - - - /* read in last block bit */ - NEEDBITS(1) - *e = (int)b & 1; - DUMPBITS(1) - - - /* read in block type */ - NEEDBITS(2) - t = (unsigned)b & 3; - DUMPBITS(2) - - - /* restore the global bit buffer */ - G.bb = b; - G.bk = k; - - - /* inflate that block type */ - if (t == 2) - return inflate_dynamic(__G); - if (t == 0) - return inflate_stored(__G); - if (t == 1) - return inflate_fixed(__G); - - - /* bad block type */ - return 2; -} - - - -int inflate(__G) - __GDEF -/* decompress an inflated entry */ -{ - int e; /* last block flag */ - int r; /* result code */ -#ifdef DEBUG - unsigned h = 0; /* maximum struct huft's malloc'ed */ -#endif - -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) - if (G.redirect_slide) - wsize = G.redirect_size, redirSlide = G.redirect_buffer; - else - wsize = WSIZE, redirSlide = slide; /* how they're #defined if !DLL */ -#endif - - /* initialize window, bit buffer */ - G.wp = 0; - G.bk = 0; - G.bb = 0; - - - /* decompress until the last block */ - do { -#ifdef DEBUG - G.hufts = 0; -#endif - if ((r = inflate_block(__G__ &e)) != 0) - return r; -#ifdef DEBUG - if (G.hufts > h) - h = G.hufts; -#endif - } while (!e); - - - /* flush out redirSlide */ - FLUSH(G.wp); - - - /* return success */ - Trace((stderr, "\n%u bytes in Huffman tables (%d/entry)\n", - h * sizeof(struct huft), sizeof(struct huft))); - return 0; -} - - - -int inflate_free(__G) - __GDEF -{ - if (G.fixed_tl != (struct huft *)NULL) - { - huft_free(G.fixed_td); - huft_free(G.fixed_tl); - G.fixed_td = G.fixed_tl = (struct huft *)NULL; - } - return 0; -} - -#endif /* ?USE_ZLIB */ - - -/* - * GRR: moved huft_build() and huft_free() down here; used by explode() - * and fUnZip regardless of whether USE_ZLIB defined or not - */ - - -/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */ -#define BMAX 16 /* maximum bit length of any code (16 for explode) */ -#define N_MAX 288 /* maximum number of codes in any set */ - - -int huft_build(__G__ b, n, s, d, e, t, m) - __GDEF - ZCONST unsigned *b; /* code lengths in bits (all assumed <= BMAX) */ - unsigned n; /* number of codes (assumed <= N_MAX) */ - unsigned s; /* number of simple-valued codes (0..s-1) */ - ZCONST ush *d; /* list of base values for non-simple codes */ - ZCONST ush *e; /* list of extra bits for non-simple codes */ - struct huft **t; /* result: starting table */ - int *m; /* maximum lookup bits, returns actual */ -/* Given a list of code lengths and a maximum table size, make a set of - tables to decode that set of codes. Return zero on success, one if - the given code set is incomplete (the tables are still built in this - case), two if the input is invalid (all zero length codes or an - oversubscribed set of lengths), and three if not enough memory. - The code with value 256 is special, and the tables are constructed - so that no bits beyond that code are fetched when that code is - decoded. */ -{ - unsigned a; /* counter for codes of length k */ - unsigned c[BMAX+1]; /* bit length count table */ - unsigned el; /* length of EOB code (value 256) */ - unsigned f; /* i repeats in table every f entries */ - int g; /* maximum code length */ - int h; /* table level */ - register unsigned i; /* counter, current code */ - register unsigned j; /* counter */ - register int k; /* number of bits in current code */ - int lx[BMAX+1]; /* memory for l[-1..BMAX-1] */ - int *l = lx+1; /* stack of bits per table */ - register unsigned *p; /* pointer into c[], b[], or v[] */ - register struct huft *q; /* points to current table */ - struct huft r; /* table entry for structure assignment */ - struct huft *u[BMAX]; /* table stack */ - unsigned v[N_MAX]; /* values in order of bit length */ - register int w; /* bits before this table == (l * h) */ - unsigned x[BMAX+1]; /* bit offsets, then code stack */ - unsigned *xp; /* pointer into x */ - int y; /* number of dummy codes added */ - unsigned z; /* number of entries in current table */ - - - /* Generate counts for each bit length */ - el = n > 256 ? b[256] : BMAX; /* set length of EOB code, if any */ - memzero((char *)c, sizeof(c)); - p = (unsigned *)b; i = n; - do { - c[*p]++; p++; /* assume all entries <= BMAX */ - } while (--i); - if (c[0] == n) /* null input--all zero length codes */ - { - *t = (struct huft *)NULL; - *m = 0; - return 0; - } - - - /* Find minimum and maximum length, bound *m by those */ - for (j = 1; j <= BMAX; j++) - if (c[j]) - break; - k = j; /* minimum code length */ - if ((unsigned)*m < j) - *m = j; - for (i = BMAX; i; i--) - if (c[i]) - break; - g = i; /* maximum code length */ - if ((unsigned)*m > i) - *m = i; - - - /* Adjust last length count to fill out codes, if needed */ - for (y = 1 << j; j < i; j++, y <<= 1) - if ((y -= c[j]) < 0) - return 2; /* bad input: more codes than bits */ - if ((y -= c[i]) < 0) - return 2; - c[i] += y; - - - /* Generate starting offsets into the value table for each length */ - x[1] = j = 0; - p = c + 1; xp = x + 2; - while (--i) { /* note that i == g from above */ - *xp++ = (j += *p++); - } - - - /* Make a table of values in order of bit lengths */ - memzero((char *)v, sizeof(v)); - p = (unsigned *)b; i = 0; - do { - if ((j = *p++) != 0) - v[x[j]++] = i; - } while (++i < n); - n = x[g]; /* set n to length of v */ - - - /* Generate the Huffman codes and for each, make the table entries */ - x[0] = i = 0; /* first Huffman code is zero */ - p = v; /* grab values in bit order */ - h = -1; /* no tables yet--level -1 */ - w = l[-1] = 0; /* no bits decoded yet */ - u[0] = (struct huft *)NULL; /* just to keep compilers happy */ - q = (struct huft *)NULL; /* ditto */ - z = 0; /* ditto */ - - /* go through the bit lengths (k already is bits in shortest code) */ - for (; k <= g; k++) - { - a = c[k]; - while (a--) - { - /* here i is the Huffman code of length k bits for value *p */ - /* make tables up to required level */ - while (k > w + l[h]) - { - w += l[h++]; /* add bits already decoded */ - - /* compute minimum size table less than or equal to *m bits */ - z = (z = g - w) > (unsigned)*m ? *m : z; /* upper limit */ - if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */ - { /* too few codes for k-w bit table */ - f -= a + 1; /* deduct codes from patterns left */ - xp = c + k; - while (++j < z) /* try smaller tables up to z bits */ - { - if ((f <<= 1) <= *++xp) - break; /* enough codes to use up j bits */ - f -= *xp; /* else deduct codes from patterns */ - } - } - if ((unsigned)w + j > el && (unsigned)w < el) - j = el - w; /* make EOB code end at table */ - z = 1 << j; /* table entries for j-bit table */ - l[h] = j; /* set table size in stack */ - - /* allocate and link in new table */ - if ((q = (struct huft *)malloc((z + 1)*sizeof(struct huft))) == - (struct huft *)NULL) - { - if (h) - huft_free(u[0]); - return 3; /* not enough memory */ - } -#ifdef DEBUG - G.hufts += z + 1; /* track memory usage */ -#endif - *t = q + 1; /* link to list for huft_free() */ - *(t = &(q->v.t)) = (struct huft *)NULL; - u[h] = ++q; /* table starts after link */ - - /* connect to last table, if there is one */ - if (h) - { - x[h] = i; /* save pattern for backing up */ - r.b = (uch)l[h-1]; /* bits to dump before this table */ - r.e = (uch)(16 + j); /* bits in this table */ - r.v.t = q; /* pointer to this table */ - j = (i & ((1 << w) - 1)) >> (w - l[h-1]); - u[h-1][j] = r; /* connect to last table */ - } - } - - /* set up table entry in r */ - r.b = (uch)(k - w); - if (p >= v + n) - r.e = 99; /* out of values--invalid code */ - else if (*p < s) - { - r.e = (uch)(*p < 256 ? 16 : 15); /* 256 is end-of-block code */ - r.v.n = (ush)*p++; /* simple code is just the value */ - } - else - { - r.e = (uch)e[*p - s]; /* non-simple--look up in lists */ - r.v.n = d[*p++ - s]; - } - - /* fill code-like entries with r */ - f = 1 << (k - w); - for (j = i >> w; j < z; j += f) - q[j] = r; - - /* backwards increment the k-bit code i */ - for (j = 1 << (k - 1); i & j; j >>= 1) - i ^= j; - i ^= j; - - /* backup over finished tables */ - while ((i & ((1 << w) - 1)) != x[h]) - w -= l[--h]; /* don't need to update q */ - } - } - - - /* return actual size of base table */ - *m = l[0]; - - - /* Return true (1) if we were given an incomplete table */ - return y != 0 && g != 1; -} - - - -int huft_free(t) -struct huft *t; /* table to free */ -/* Free the malloc'ed tables built by huft_build(), which makes a linked - list of the tables it made, with the links in a dummy first entry of - each table. */ -{ - register struct huft *p, *q; - - - /* Go through linked list, freeing from the malloced (t[-1]) address. */ - p = t; - while (p != (struct huft *)NULL) - { - q = (--p)->v.t; - free((zvoid *)p); - p = q; - } - return 0; -} diff --git a/Build/source/libs/unzip/inflate.h b/Build/source/libs/unzip/inflate.h deleted file mode 100644 index f1d774b7935..00000000000 --- a/Build/source/libs/unzip/inflate.h +++ /dev/null @@ -1,24 +0,0 @@ -/* inflate.h for UnZip -- put in the public domain by Mark Adler - version c14f, 23 November 1995 */ - - -/* You can do whatever you like with this source file, though I would - prefer that if you modify it and redistribute it that you include - comments to that effect with your name and the date. Thank you. - - History: - vers date who what - ---- --------- -------------- ------------------------------------ - c14 12 Mar 93 M. Adler made inflate.c standalone with the - introduction of inflate.h. - c14d 28 Aug 93 G. Roelofs replaced flush/FlushOutput with new version - c14e 29 Sep 93 G. Roelofs moved everything into unzip.h; added crypt.h - c14f 23 Nov 95 G. Roelofs added UNZIP_INTERNAL to accommodate newly - split unzip.h - */ - -#define UNZIP_INTERNAL -#include "unzip.h" /* provides slide[], typedefs and macros */ -#ifdef FUNZIP -# include "crypt.h" /* provides NEXTBYTE macro for crypt version of funzip */ -#endif diff --git a/Build/source/libs/unzip/list.c b/Build/source/libs/unzip/list.c deleted file mode 100644 index 0dc1e8a1286..00000000000 --- a/Build/source/libs/unzip/list.c +++ /dev/null @@ -1,644 +0,0 @@ -/*--------------------------------------------------------------------------- - - list.c - - This file contains the non-ZipInfo-specific listing routines for UnZip. - - Contains: list_files() - get_time_stamp() [optional feature] - ratio() - fnprint() - - ---------------------------------------------------------------------------*/ - - -#define UNZIP_INTERNAL -#include "unzip.h" -#ifdef WINDLL -# ifdef POCKET_UNZIP -# include "wince/intrface.h" -# else -# include "windll/windll.h" -# endif -#endif - - -#ifdef TIMESTAMP - static int fn_is_dir OF((__GPRO)); -#endif - -#ifndef WINDLL - static ZCONST char Far CompFactorStr[] = "%c%d%%"; - static ZCONST char Far CompFactor100[] = "100%%"; - -#ifdef OS2_EAS - static ZCONST char Far HeadersS[] = - " Length EAs ACLs Date Time Name"; - static ZCONST char Far HeadersS1[] = - " -------- --- ---- ---- ---- ----"; -#else - static ZCONST char Far HeadersS[] = " Length Date Time Name"; - static ZCONST char Far HeadersS1[] = " -------- ---- ---- ----"; -#endif - - static ZCONST char Far HeadersL[] = - " Length Method Size Ratio Date Time CRC-32 Name"; - static ZCONST char Far HeadersL1[] = - "-------- ------ ------- ----- ---- ---- ------ ----"; - static ZCONST char Far *Headers[][2] = - { {HeadersS, HeadersS1}, {HeadersL, HeadersL1} }; - - static ZCONST char Far CaseConversion[] = - "%s (\"^\" ==> case\n%s conversion)\n"; - static ZCONST char Far LongHdrStats[] = - "%8lu %-7s%8lu %4s %02u-%02u-%02u %02u:%02u %08lx %c"; - static ZCONST char Far LongFileTrailer[] = - "-------- ------- --- \ - -------\n%8lu %8lu %4s %u file%s\n"; -#ifdef OS2_EAS - static ZCONST char Far ShortHdrStats[] = - "%9lu %6lu %6lu %02u-%02u-%02u %02u:%02u %c"; - static ZCONST char Far ShortFileTrailer[] = " -------- ----- ----- \ - -------\n%9lu %6lu %6lu %u file%s\n"; - static ZCONST char Far OS2ExtAttrTrailer[] = - "%ld file%s %ld bytes of OS/2 extended attributes attached.\n"; - static ZCONST char Far OS2ACLTrailer[] = - "%ld file%s %ld bytes of access control lists attached.\n"; -#else - static ZCONST char Far ShortHdrStats[] = - "%9lu %02u-%02u-%02u %02u:%02u %c"; - static ZCONST char Far ShortFileTrailer[] = - " -------- -------\n%9lu %u file%s\n"; -#endif /* ?OS2_EAS */ -#endif /* !WINDLL */ - - - - - -/*************************/ -/* Function list_files() */ -/*************************/ - -int list_files(__G) /* return PK-type error code */ - __GDEF -{ - int do_this_file=FALSE, cfactor, error, error_in_archive=PK_COOL; -#ifndef WINDLL - char sgn, cfactorstr[10]; - int longhdr=(uO.vflag>1); -#endif - int date_format; - unsigned j, methnum, members=0; -#ifdef USE_EF_UT_TIME - iztimes z_utime; - struct tm *t; -#endif - unsigned yr, mo, dy, hh, mm; - ulg csiz, tot_csize=0L, tot_ucsize=0L; -#ifdef OS2_EAS - ulg ea_size, tot_easize=0L, tot_eafiles=0L; - ulg acl_size, tot_aclsize=0L, tot_aclfiles=0L; -#endif - min_info info; - char methbuf[8]; - static ZCONST char dtype[]="NXFS"; /* see zi_short() */ - static ZCONST char Far method[NUM_METHODS+1][8] = - {"Stored", "Shrunk", "Reduce1", "Reduce2", "Reduce3", "Reduce4", - "Implode", "Token", "Defl:#", "EnhDefl", "ImplDCL", "Unk:###"}; - - - -/*--------------------------------------------------------------------------- - Unlike extract_or_test_files(), this routine confines itself to the cen- - tral directory. Thus its structure is somewhat simpler, since we can do - just a single loop through the entire directory, listing files as we go. - - So to start off, print the heading line and then begin main loop through - the central directory. The results will look vaguely like the following: - - Length Method Size Ratio Date Time CRC-32 Name ("^" ==> case --------- ------ ------- ----- ---- ---- ------ ---- conversion) - 44004 Implode 13041 71% 11-02-89 19:34 8b4207f7 Makefile.UNIX - 3438 Shrunk 2209 36% 09-15-90 14:07 a2394fd8 ^dos-file.ext - 16717 Defl:X 5252 69% 11-03-97 06:40 1ce0f189 WHERE --------- ------- --- ------- - 64159 20502 68% 3 files - ---------------------------------------------------------------------------*/ - - G.pInfo = &info; - date_format = DATE_FORMAT; - -#ifndef WINDLL - if (uO.qflag < 2) { - if (uO.L_flag) - Info(slide, 0, ((char *)slide, LoadFarString(CaseConversion), - LoadFarStringSmall(Headers[longhdr][0]), - LoadFarStringSmall2(Headers[longhdr][1]))); - else - Info(slide, 0, ((char *)slide, "%s\n%s\n", - LoadFarString(Headers[longhdr][0]), - LoadFarStringSmall(Headers[longhdr][1]))); - } -#endif /* !WINDLL */ - - for (j = 0; j++ < (unsigned)G.ecrec.total_entries_central_dir;) { - - if (readbuf(__G__ G.sig, 4) == 0) - return PK_EOF; - if (strncmp(G.sig, central_hdr_sig, 4)) { /* just to make sure */ - Info(slide, 0x401, ((char *)slide, LoadFarString(CentSigMsg), j)); - Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg))); - return PK_BADERR; /* sig not found */ - } - /* process_cdir_file_hdr() sets pInfo->hostnum, pInfo->lcflag, ...: */ - if ((error = process_cdir_file_hdr(__G)) != PK_COOL) - return error; /* only PK_EOF defined */ - - /* - * We could DISPLAY the filename instead of storing (and possibly trun- - * cating, in the case of a very long name) and printing it, but that - * has the disadvantage of not allowing case conversion--and it's nice - * to be able to see in the listing precisely how you have to type each - * filename in order for unzip to consider it a match. Speaking of - * which, if member names were specified on the command line, check in - * with match() to see if the current file is one of them, and make a - * note of it if it is. - */ - - if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) != - PK_COOL) /* ^--(uses pInfo->lcflag) */ - { - error_in_archive = error; - if (error > PK_WARN) /* fatal: can't continue */ - return error; - } - if (G.extra_field != (uch *)NULL) { - free(G.extra_field); - G.extra_field = (uch *)NULL; - } - if ((error = do_string(__G__ G.crec.extra_field_length, EXTRA_FIELD)) - != 0) - { - error_in_archive = error; - if (error > PK_WARN) /* fatal */ - return error; - } - if (!G.process_all_files) { /* check if specified on command line */ - unsigned i; - - do_this_file = FALSE; - for (i = 0; i < G.filespecs; i++) - if (match(G.filename, G.pfnames[i], uO.C_flag)) { - do_this_file = TRUE; - break; /* found match, so stop looping */ - } - if (do_this_file) { /* check if this is an excluded file */ - for (i = 0; i < G.xfilespecs; i++) - if (match(G.filename, G.pxnames[i], uO.C_flag)) { - do_this_file = FALSE; /* ^-- ignore case in match */ - break; - } - } - } - /* - * If current file was specified on command line, or if no names were - * specified, do the listing for this file. Otherwise, get rid of the - * file comment and go back for the next file. - */ - - if (G.process_all_files || do_this_file) { - -#ifdef OS2DLL - /* this is used by UzpFileTree() to allow easy processing of lists - * of zip directory contents */ - if (G.processExternally) { - if ((G.processExternally)(G.filename, &G.crec)) - break; - ++members; - } else { -#endif -#ifdef OS2_EAS - { - uch *ef_ptr = G.extra_field; - int ef_size, ef_len = G.crec.extra_field_length; - ea_size = acl_size = 0; - - while (ef_len >= EB_HEADSIZE) { - ef_size = makeword(&ef_ptr[EB_LEN]); - switch (makeword(&ef_ptr[EB_ID])) { - case EF_OS2: - ea_size = makelong(&ef_ptr[EB_HEADSIZE]); - break; - case EF_ACL: - acl_size = makelong(&ef_ptr[EB_HEADSIZE]); - break; - } - ef_ptr += (ef_size + EB_HEADSIZE); - ef_len -= (ef_size + EB_HEADSIZE); - } - } -#endif -#ifdef USE_EF_UT_TIME - if (G.extra_field && -#ifdef IZ_CHECK_TZ - G.tz_is_valid && -#endif - (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1, - G.crec.last_mod_dos_datetime, &z_utime, NULL) - & EB_UT_FL_MTIME)) - { - TIMET_TO_NATIVE(z_utime.mtime) /* NOP unless MSC 7.0, Mac */ - t = localtime(&(z_utime.mtime)); - } else - t = (struct tm *)NULL; - if (t != (struct tm *)NULL) { - mo = (unsigned)(t->tm_mon + 1); - dy = (unsigned)(t->tm_mday); - yr = (unsigned)(t->tm_year % 100); - hh = (unsigned)(t->tm_hour); - mm = (unsigned)(t->tm_min); - } else -#endif /* USE_EF_UT_TIME */ - { - yr = ((((unsigned)(G.crec.last_mod_dos_datetime >> 25) & 0x7f) - + 80) % (unsigned)100); - mo = ((unsigned)(G.crec.last_mod_dos_datetime >> 21) & 0x0f); - dy = ((unsigned)(G.crec.last_mod_dos_datetime >> 16) & 0x1f); - hh = (((unsigned)G.crec.last_mod_dos_datetime >> 11) & 0x1f); - mm = (((unsigned)G.crec.last_mod_dos_datetime >> 5) & 0x3f); - } - /* permute date so it displays according to nat'l convention - * ('methnum' is not yet set, it is used as temporary buffer) */ - switch (date_format) { - case DF_YMD: - methnum = (unsigned)mo; - mo = yr; yr = dy; dy = (ush)methnum; - break; - case DF_DMY: - methnum = (unsigned)mo; - mo = dy; dy = (ush)methnum; - } - - csiz = G.crec.csize; - if (G.crec.general_purpose_bit_flag & 1) - csiz -= 12; /* if encrypted, don't count encryption header */ - if ((cfactor = ratio(G.crec.ucsize, csiz)) < 0) { -#ifndef WINDLL - sgn = '-'; -#endif - cfactor = (-cfactor + 5) / 10; - } else { -#ifndef WINDLL - sgn = ' '; -#endif - cfactor = (cfactor + 5) / 10; - } - - methnum = MIN(G.crec.compression_method, NUM_METHODS); - zfstrcpy(methbuf, method[methnum]); - if (methnum == DEFLATED) { - methbuf[5] = dtype[(G.crec.general_purpose_bit_flag>>1) & 3]; - } else if (methnum >= NUM_METHODS) { - sprintf(&methbuf[4], "%03u", G.crec.compression_method); - } - -#if 0 /* GRR/Euro: add this? */ -#if defined(DOS_FLX_OS2_W32) || defined(UNIX) - for (p = G.filename; *p; ++p) - if (!isprint(*p)) - *p = '?'; /* change non-printable chars to '?' */ -#endif /* DOS_FLX_OS2_W32 || UNIX */ -#endif /* 0 */ - -#ifdef WINDLL - /* send data to application for formatting and printing */ - (*G.lpUserFunctions->SendApplicationMessage)(G.crec.ucsize, csiz, - (ush)cfactor, mo, dy, yr, hh, mm, - (char)(G.pInfo->lcflag ? '^' : ' '), - (LPSTR)fnfilter(G.filename, slide), (LPSTR)methbuf, G.crec.crc32, - (char)((G.crec.general_purpose_bit_flag & 1) ? 'E' : ' ')); -#else /* !WINDLL */ - if (cfactor == 100) - sprintf(cfactorstr, LoadFarString(CompFactor100)); - else - sprintf(cfactorstr, LoadFarString(CompFactorStr), sgn, cfactor); - if (longhdr) - Info(slide, 0, ((char *)slide, LoadFarString(LongHdrStats), - G.crec.ucsize, methbuf, csiz, cfactorstr, mo, dy, - yr, hh, mm, G.crec.crc32, (G.pInfo->lcflag? '^':' '))); - else -#ifdef OS2_EAS - Info(slide, 0, ((char *)slide, LoadFarString(ShortHdrStats), - G.crec.ucsize, ea_size, acl_size, - mo, dy, yr, hh, mm, (G.pInfo->lcflag? '^':' '))); -#else - Info(slide, 0, ((char *)slide, LoadFarString(ShortHdrStats), - G.crec.ucsize, - mo, dy, yr, hh, mm, (G.pInfo->lcflag? '^':' '))); -#endif - fnprint(__G); -#endif /* ?WINDLL */ - - if ((error = do_string(__G__ G.crec.file_comment_length, - QCOND? DISPL_8 : SKIP)) != 0) - { - error_in_archive = error; /* might be just warning */ - if (error > PK_WARN) /* fatal */ - return error; - } - tot_ucsize += G.crec.ucsize; - tot_csize += csiz; - ++members; -#ifdef OS2_EAS - if (ea_size) { - tot_easize += ea_size; - ++tot_eafiles; - } - if (acl_size) { - tot_aclsize += acl_size; - ++tot_aclfiles; - } -#endif -#ifdef OS2DLL - } /* end of "if (G.processExternally) {...} else {..." */ -#endif - } else { /* not listing this file */ - SKIP_(G.crec.file_comment_length) - } - } /* end for-loop (j: files in central directory) */ - -/*--------------------------------------------------------------------------- - Print footer line and totals (compressed size, uncompressed size, number - of members in zipfile). - ---------------------------------------------------------------------------*/ - - if (uO.qflag < 2 -#ifdef OS2DLL - && !G.processExternally -#endif - ) { - if ((cfactor = ratio(tot_ucsize, tot_csize)) < 0) { -#ifndef WINDLL - sgn = '-'; -#endif - cfactor = (-cfactor + 5) / 10; - } else { -#ifndef WINDLL - sgn = ' '; -#endif - cfactor = (cfactor + 5) / 10; - } -#ifdef WINDLL - /* pass the totals back to the calling application */ - G.lpUserFunctions->TotalSizeComp = tot_csize; - G.lpUserFunctions->TotalSize = tot_ucsize; - G.lpUserFunctions->CompFactor = cfactor; - G.lpUserFunctions->NumMembers = members; - -#else /* !WINDLL */ - if (cfactor == 100) - sprintf(cfactorstr, LoadFarString(CompFactor100)); - else - sprintf(cfactorstr, LoadFarString(CompFactorStr), sgn, cfactor); - if (longhdr) { - Info(slide, 0, ((char *)slide, LoadFarString(LongFileTrailer), - tot_ucsize, tot_csize, cfactorstr, members, members==1? "":"s")); -#ifdef OS2_EAS - if (tot_easize || tot_aclsize) - Info(slide, 0, ((char *)slide, "\n")); - if (tot_eafiles && tot_easize) - Info(slide, 0, ((char *)slide, LoadFarString(OS2ExtAttrTrailer), - tot_eafiles, tot_eafiles == 1? " has" : "s have a total of", - tot_easize)); - if (tot_aclfiles && tot_aclsize) - Info(slide, 0, ((char *)slide, LoadFarString(OS2ACLTrailer), - tot_aclfiles, tot_aclfiles == 1? " has" : "s have a total of", - tot_aclsize)); -#endif /* OS2_EAS */ - } else -#ifdef OS2_EAS - Info(slide, 0, ((char *)slide, LoadFarString(ShortFileTrailer), - tot_ucsize, tot_easize, tot_aclsize, members, members == 1? - "" : "s")); -#else - Info(slide, 0, ((char *)slide, LoadFarString(ShortFileTrailer), - tot_ucsize, members, members == 1? "" : "s")); -#endif /* OS2_EAS */ -#endif /* ?WINDLL */ - } - -/*--------------------------------------------------------------------------- - Double check that we're back at the end-of-central-directory record. - ---------------------------------------------------------------------------*/ - - if (readbuf(__G__ G.sig, 4) == 0) /* disk error? */ - return PK_EOF; - if (strncmp(G.sig, end_central_sig, 4)) { /* just to make sure again */ - Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg))); - error_in_archive = PK_WARN; /* didn't find sig */ - } - if (members == 0 && error_in_archive <= PK_WARN) - error_in_archive = PK_FIND; - - return error_in_archive; - -} /* end function list_files() */ - - - - - -#ifdef TIMESTAMP - -/************************/ -/* Function fn_is_dir() */ -/************************/ - -static int fn_is_dir(__G) /* returns TRUE if G.filename is directory */ - __GDEF -{ - extent fn_len = strlen(G.filename); - register char endc; - - return fn_len > 0 && - ((endc = G.filename[fn_len-1]) == '/' || - (G.pInfo->hostnum == FS_FAT_ && !strchr(G.filename, '/') && - endc == '\\')); -} - - - - - -/*****************************/ -/* Function get_time_stamp() */ -/*****************************/ - -int get_time_stamp(__G__ last_modtime, nmember) /* return PK-type error code */ - __GDEF - time_t *last_modtime; - unsigned *nmember; -{ - int do_this_file=FALSE, error, error_in_archive=PK_COOL; - unsigned j; -#ifdef USE_EF_UT_TIME - iztimes z_utime; -#endif - min_info info; - - -/*--------------------------------------------------------------------------- - Unlike extract_or_test_files() but like list_files(), this function works - on information in the central directory alone. Thus we have a single, - large loop through the entire directory, searching for the latest time - stamp. - ---------------------------------------------------------------------------*/ - - *last_modtime = 0L; /* assuming no zipfile data older than 1970 */ - *nmember = 0; - G.pInfo = &info; - - for (j = 0; j++ < (unsigned)G.ecrec.total_entries_central_dir;) { - - if (readbuf(__G__ G.sig, 4) == 0) - return PK_EOF; - if (strncmp(G.sig, central_hdr_sig, 4)) { /* just to make sure */ - Info(slide, 0x401, ((char *)slide, LoadFarString(CentSigMsg), j)); - Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg))); - return PK_BADERR; - } - /* process_cdir_file_hdr() sets pInfo->lcflag: */ - if ((error = process_cdir_file_hdr(__G)) != PK_COOL) - return error; /* only PK_EOF defined */ - if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) != PK_OK) - { /* ^-- (uses pInfo->lcflag) */ - error_in_archive = error; - if (error > PK_WARN) /* fatal: can't continue */ - return error; - } - if (G.extra_field != (uch *)NULL) { - free(G.extra_field); - G.extra_field = (uch *)NULL; - } - if ((error = do_string(__G__ G.crec.extra_field_length, EXTRA_FIELD)) - != 0) - { - error_in_archive = error; - if (error > PK_WARN) /* fatal */ - return error; - } - if (!G.process_all_files) { /* check if specified on command line */ - unsigned i; - - do_this_file = FALSE; - for (i = 0; i < G.filespecs; i++) - if (match(G.filename, G.pfnames[i], uO.C_flag)) { - do_this_file = TRUE; - break; /* found match, so stop looping */ - } - if (do_this_file) { /* check if this is an excluded file */ - for (i = 0; i < G.xfilespecs; i++) - if (match(G.filename, G.pxnames[i], uO.C_flag)) { - do_this_file = FALSE; /* ^-- ignore case in match */ - break; - } - } - } - - /* If current file was specified on command line, or if no names were - * specified, check the time for this file. Either way, get rid of the - * file comment and go back for the next file. - * Directory entries are always ignored, to stay compatible with both - * Zip and PKZIP. - */ - if ((G.process_all_files || do_this_file) && !fn_is_dir(__G)) { -#ifdef USE_EF_UT_TIME - if (G.extra_field && -#ifdef IZ_CHECK_TZ - G.tz_is_valid && -#endif - (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1, - G.crec.last_mod_dos_datetime, &z_utime, NULL) - & EB_UT_FL_MTIME)) - { - if (*last_modtime < z_utime.mtime) - *last_modtime = z_utime.mtime; - } else -#endif /* USE_EF_UT_TIME */ - { - time_t modtime = dos_to_unix_time(G.crec.last_mod_dos_datetime); - - if (*last_modtime < modtime) - *last_modtime = modtime; - } - ++*nmember; - } - SKIP_(G.crec.file_comment_length) - - } /* end for-loop (j: files in central directory) */ - -/*--------------------------------------------------------------------------- - Double check that we're back at the end-of-central-directory record. - ---------------------------------------------------------------------------*/ - - if (readbuf(__G__ G.sig, 4) == 0) - return PK_EOF; - if (strncmp(G.sig, end_central_sig, 4)) { /* just to make sure again */ - Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg))); - error_in_archive = PK_WARN; - } - if (*nmember == 0 && error_in_archive <= PK_WARN) - error_in_archive = PK_FIND; - - return error_in_archive; - -} /* end function get_time_stamp() */ - -#endif /* TIMESTAMP */ - - - - - -/********************/ -/* Function ratio() */ /* also used by ZipInfo routines */ -/********************/ - -int ratio(uc, c) - ulg uc, c; -{ - ulg denom; - - if (uc == 0) - return 0; - if (uc > 2000000L) { /* risk signed overflow if multiply numerator */ - denom = uc / 1000L; - return ((uc >= c) ? - (int) ((uc-c + (denom>>1)) / denom) : - -((int) ((c-uc + (denom>>1)) / denom))); - } else { /* ^^^^^^^^ rounding */ - denom = uc; - return ((uc >= c) ? - (int) ((1000L*(uc-c) + (denom>>1)) / denom) : - -((int) ((1000L*(c-uc) + (denom>>1)) / denom))); - } /* ^^^^^^^^ rounding */ -} - - - - - -/************************/ -/* Function fnprint() */ /* also used by ZipInfo routines */ -/************************/ - -void fnprint(__G) /* print filename (after filtering) and newline */ - __GDEF -{ - char *name = fnfilter(G.filename, slide); - - (*G.message)((zvoid *)&G, (uch *)name, (ulg)strlen(name), 0); - (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0); - -} /* end function fnprint() */ diff --git a/Build/source/libs/unzip/match.c b/Build/source/libs/unzip/match.c deleted file mode 100644 index 34954742ee0..00000000000 --- a/Build/source/libs/unzip/match.c +++ /dev/null @@ -1,294 +0,0 @@ -/*--------------------------------------------------------------------------- - - match.c - - The match() routine recursively compares a string to a "pattern" (regular - expression), returning TRUE if a match is found or FALSE if not. This - version is specifically for use with unzip.c: as did the previous match() - routines from SEA and J. Kercheval, it leaves the case (upper, lower, or - mixed) of the string alone, but converts any uppercase characters in the - pattern to lowercase if indicated by the global var pInfo->lcflag (which - is to say, string is assumed to have been converted to lowercase already, - if such was necessary). - - GRR: reversed order of text, pattern in matche() (now same as match()); - added ignore_case/ic flags, Case() macro. - - PaulK: replaced matche() with recmatch() from Zip, modified to have an - ignore_case argument; replaced test frame with simpler one. - - --------------------------------------------------------------------------- - - Copyright on recmatch() from Zip's util.c (although recmatch() was almost - certainly written by Mark Adler...ask me how I can tell :-) ): - - Copyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly, - Kai Uwe Rommel and Igor Mandrichenko. - - Permission is granted to any individual or institution to use, copy, - or redistribute this software so long as all of the original files are - included unmodified, that it is not sold for profit, and that this copy- - right notice is retained. - - --------------------------------------------------------------------------- - - Match the pattern (wildcard) against the string (fixed): - - match(string, pattern, ignore_case); - - returns TRUE if string matches pattern, FALSE otherwise. In the pattern: - - `*' matches any sequence of characters (zero or more) - `?' matches any single character - [SET] matches any character in the specified set, - [!SET] or [^SET] matches any character not in the specified set. - - A set is composed of characters or ranges; a range looks like ``character - hyphen character'' (as in 0-9 or A-Z). [0-9a-zA-Z_] is the minimal set of - characters allowed in the [..] pattern construct. Other characters are - allowed (i.e., 8-bit characters) if your system will support them. - - To suppress the special syntactic significance of any of ``[]*?!^-\'', in- - side or outside a [..] construct, and match the character exactly, precede - it with a ``\'' (backslash). - - Note that "*.*" and "*." are treated specially under MS-DOS if DOSWILD is - defined. See the DOSWILD section below for an explanation. Note also - that with VMSWILD defined, '%' is used instead of '?', and sets (ranges) - are delimited by () instead of []. - - ---------------------------------------------------------------------------*/ - - - -/* define ToLower() in here (for Unix, define ToLower to be macro (using - * isupper()); otherwise just use tolower() */ -#define UNZIP_INTERNAL -#include "unzip.h" - -#if 0 /* this is not useful until it matches Amiga names insensitively */ -#ifdef AMIGA /* some other platforms might also want to use this */ -# define ANSI_CHARSET /* MOVE INTO UNZIP.H EVENTUALLY */ -#endif -#endif /* 0 */ - -#ifdef ANSI_CHARSET -# ifdef ToLower -# undef ToLower -# endif - /* uppercase letters are values 41 thru 5A, C0 thru D6, and D8 thru DE */ -# define IsUpper(c) (c>=0xC0 ? c<=0xDE && c!=0xD7 : c>=0x41 && c<=0x5A) -# define ToLower(c) (IsUpper((uch) c) ? (unsigned) c | 0x20 : (unsigned) c) -#endif -#define Case(x) (ic? ToLower(x) : (x)) - -#ifdef VMSWILD -# define WILDCHAR '%' -# define BEG_RANGE '(' -# define END_RANGE ')' -#else -# define WILDCHAR '?' -# define BEG_RANGE '[' -# define END_RANGE ']' -#endif - -#if 0 /* GRR: add this to unzip.h someday... */ -#if !(defined(MSDOS) && defined(DOSWILD)) -#define match(s,p,ic) (recmatch((ZCONST uch *)p,(ZCONST uch *)s,ic) == 1) -int recmatch OF((ZCONST uch *pattern, ZCONST uch *string, int ignore_case)); -#endif -#endif /* 0 */ -static int recmatch OF((ZCONST uch *pattern, ZCONST uch *string, - int ignore_case)); - - - -/* match() is a shell to recmatch() to return only Boolean values. */ - -int match(string, pattern, ignore_case) - ZCONST char *string, *pattern; - int ignore_case; -{ -#if (defined(MSDOS) && defined(DOSWILD)) - char *dospattern; - int j = strlen(pattern); - -/*--------------------------------------------------------------------------- - Optional MS-DOS preprocessing section: compare last three chars of the - wildcard to "*.*" and translate to "*" if found; else compare the last - two characters to "*." and, if found, scan the non-wild string for dots. - If in the latter case a dot is found, return failure; else translate the - "*." to "*". In either case, continue with the normal (Unix-like) match - procedure after translation. (If not enough memory, default to normal - match.) This causes "a*.*" and "a*." to behave as MS-DOS users expect. - ---------------------------------------------------------------------------*/ - - if ((dospattern = (char *)malloc(j+1)) != NULL) { - strcpy(dospattern, pattern); - if (!strcmp(dospattern+j-3, "*.*")) { - dospattern[j-2] = '\0'; /* nuke the ".*" */ - } else if (!strcmp(dospattern+j-2, "*.")) { - char *p = strchr(string, '.'); - - if (p) { /* found a dot: match fails */ - free(dospattern); - return 0; - } - dospattern[j-1] = '\0'; /* nuke the end "." */ - } - j = recmatch((uch *)dospattern, (uch *)string, ignore_case); - free(dospattern); - return j == 1; - } else -#endif /* MSDOS && DOSWILD */ - return recmatch((uch *)pattern, (uch *)string, ignore_case) == 1; -} - - - -static int recmatch(p, s, ic) - ZCONST uch *p; /* sh pattern to match */ - ZCONST uch *s; /* string to which to match it */ - int ic; /* true for case insensitivity */ -/* Recursively compare the sh pattern p with the string s and return 1 if - * they match, and 0 or 2 if they don't or if there is a syntax error in the - * pattern. This routine recurses on itself no more deeply than the number - * of characters in the pattern. */ -{ - unsigned int c; /* pattern char or start of range in [-] loop */ - - /* Get first character, the pattern for new recmatch calls follows */ - c = *p++; - - /* If that was the end of the pattern, match if string empty too */ - if (c == 0) - return *s == 0; - - /* '?' (or '%') matches any character (but not an empty string) */ - if (c == WILDCHAR) - return *s ? recmatch(p, s + 1, ic) : 0; - - /* '*' matches any number of characters, including zero */ -#ifdef AMIGA - if (c == '#' && *p == '?') /* "#?" is Amiga-ese for "*" */ - c = '*', p++; -#endif /* AMIGA */ - if (c == '*') { - if (*p == 0) - return 1; - for (; *s; s++) - if ((c = recmatch(p, s, ic)) != 0) - return (int)c; - return 2; /* 2 means give up--match will return false */ - } - - /* Parse and process the list of characters and ranges in brackets */ - if (c == BEG_RANGE) { - int e; /* flag true if next char to be taken literally */ - ZCONST uch *q; /* pointer to end of [-] group */ - int r; /* flag true to match anything but the range */ - - if (*s == 0) /* need a character to match */ - return 0; - p += (r = (*p == '!' || *p == '^')); /* see if reverse */ - for (q = p, e = 0; *q; q++) /* find closing bracket */ - if (e) - e = 0; - else - if (*q == '\\') /* GRR: change to ^ for MS-DOS, OS/2? */ - e = 1; - else if (*q == END_RANGE) - break; - if (*q != END_RANGE) /* nothing matches if bad syntax */ - return 0; - for (c = 0, e = *p == '-'; p < q; p++) { /* go through the list */ - if (e == 0 && *p == '\\') /* set escape flag if \ */ - e = 1; - else if (e == 0 && *p == '-') /* set start of range if - */ - c = *(p-1); - else { - unsigned int cc = Case(*s); - - if (*(p+1) != '-') - for (c = c ? c : *p; c <= *p; c++) /* compare range */ - if ((unsigned)Case(c) == cc) /* typecast for MSC bug */ - return r ? 0 : recmatch(q + 1, s + 1, ic); - c = e = 0; /* clear range, escape flags */ - } - } - return r ? recmatch(q + 1, s + 1, ic) : 0; /* bracket match failed */ - } - - /* if escape ('\'), just compare next character */ - if (c == '\\' && (c = *p++) == 0) /* if \ at end, then syntax error */ - return 0; - - /* just a character--compare it */ -#ifdef QDOS - return QMatch(Case((uch)c), Case(*s)) ? recmatch(p, ++s, ic) : 0; -#else - return Case((uch)c) == Case(*s) ? recmatch(p, ++s, ic) : 0; -#endif - -} /* end function recmatch() */ - - - - - -int iswild(p) /* originally only used for stat()-bug workaround in */ - ZCONST char *p; /* VAX C, Turbo/Borland C, Watcom C, Atari MiNT libs; */ -{ /* now used in process_zipfiles() as well */ - for (; *p; ++p) - if (*p == '\\' && *(p+1)) - ++p; -#ifdef VMS - else if (*p == '%' || *p == '*') -#else /* !VMS */ -#ifdef AMIGA - else if (*p == '?' || *p == '*' || (*p=='#' && p[1]=='?') || *p == '[') -#else /* !AMIGA */ - else if (*p == '?' || *p == '*' || *p == '[') -#endif /* ?AMIGA */ -#endif /* ?VMS */ -#ifdef QDOS - return (int)p; -#else - return TRUE; -#endif - - return FALSE; - -} /* end function iswild() */ - - - - - -#ifdef TEST_MATCH - -#define put(s) {fputs(s,stdout); fflush(stdout);} - -void main() -{ - char pat[256], str[256]; - - for (;;) { - put("Pattern (return to exit): "); - gets(pat); - if (!pat[0]) - break; - for (;;) { - put("String (return for new pattern): "); - gets(str); - if (!str[0]) - break; - printf("Case sensitive: %s insensitive: %s\n", - match(str, pat, 0) ? "YES" : "NO", - match(str, pat, 1) ? "YES" : "NO"); - } - } - EXIT(0); -} - -#endif /* TEST_MATCH */ diff --git a/Build/source/libs/unzip/process.c b/Build/source/libs/unzip/process.c deleted file mode 100644 index 2d8f179e843..00000000000 --- a/Build/source/libs/unzip/process.c +++ /dev/null @@ -1,1378 +0,0 @@ -/*--------------------------------------------------------------------------- - - process.c - - This file contains the top-level routines for processing multiple zipfiles. - - Contains: process_zipfiles() - free_G_buffers() - do_seekable() - find_ecrec() - uz_end_central() - process_cdir_file_hdr() - get_cdir_ent() - process_local_file_hdr() - ef_scan_for_izux() - - ---------------------------------------------------------------------------*/ - - -#define UNZIP_INTERNAL -#include "unzip.h" -#ifdef WINDLL -# ifdef POCKET_UNZIP -# include "wince/intrface.h" -# else -# include "windll/windll.h" -# endif -#endif - -static int do_seekable OF((__GPRO__ int lastchance)); -static int find_ecrec OF((__GPRO__ long searchlen)); - -static ZCONST char Far CannotAllocateBuffers[] = - "error: cannot allocate unzip buffers\n"; - -#ifdef SFX - static ZCONST char Far CannotFindMyself[] = - "unzipsfx: cannot find myself! [%s]\n"; - -#else /* !SFX */ - /* process_zipfiles() strings */ -# if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME)) - static ZCONST char Far WarnInvalidTZ[] = - "Warning: TZ environment variable not found, cannot use UTC times!!\n"; -# endif - static ZCONST char Far FilesProcessOK[] = - "%d archive%s successfully processed.\n"; - static ZCONST char Far ArchiveWarning[] = - "%d archive%s had warnings but no fatal errors.\n"; - static ZCONST char Far ArchiveFatalError[] = - "%d archive%s had fatal errors.\n"; - static ZCONST char Far FileHadNoZipfileDir[] = - "%d file%s had no zipfile directory.\n"; - static ZCONST char Far ZipfileWasDir[] = "1 \"zipfile\" was a directory.\n"; - static ZCONST char Far ManyZipfilesWereDir[] = - "%d \"zipfiles\" were directories.\n"; - static ZCONST char Far NoZipfileFound[] = "No zipfiles found.\n"; - - /* do_seekable() strings */ -# ifdef UNIX - static ZCONST char Far CannotFindZipfileDirMsg[] = - "%s: cannot find zipfile directory in one of %s or\n\ - %s%s.zip, and cannot find %s, period.\n"; - static ZCONST char Far CannotFindEitherZipfile[] = - "%s: cannot find %s, %s.zip or %s.\n"; /* ", so there" removed 970918 */ -# else /* !UNIX */ -# ifndef AMIGA - static ZCONST char Far CannotFindWildcardMatch[] = - "%s: cannot find any matches for wildcard specification \"%s\".\n"; -# endif /* !AMIGA */ - static ZCONST char Far CannotFindZipfileDirMsg[] = - "%s: cannot find zipfile directory in %s,\n\ - %sand cannot find %s, period.\n"; - static ZCONST char Far CannotFindEitherZipfile[] = - "%s: cannot find either %s or %s.\n"; /* ", so there" removed 970918 */ -# endif /* ?UNIX */ - extern ZCONST char Far Zipnfo[]; /* in unzip.c */ -#ifndef WINDLL - static ZCONST char Far Unzip[] = "unzip"; -#else - static ZCONST char Far Unzip[] = "UnZip DLL"; -#endif - static ZCONST char Far MaybeExe[] = - "note: %s may be a plain executable, not an archive\n"; - static ZCONST char Far CentDirNotInZipMsg[] = "\n\ - [%s]:\n\ - Zipfile is disk %u of a multi-disk archive, and this is not the disk on\n\ - which the central zipfile directory begins (disk %u).\n"; - static ZCONST char Far EndCentDirBogus[] = - "\nwarning [%s]: end-of-central-directory record claims this\n\ - is disk %u but that the central directory starts on disk %u; this is a\n\ - contradiction. Attempting to process anyway.\n"; -# ifdef NO_MULTIPART - static ZCONST char Far NoMultiDiskArcSupport[] = - "\nerror [%s]: zipfile is part of multi-disk archive\n\ - (sorry, not yet supported).\n"; - static ZCONST char Far MaybePakBug[] = "warning [%s]:\ - zipfile claims to be 2nd disk of a 2-part archive;\n\ - attempting to process anyway. If no further errors occur, this archive\n\ - was probably created by PAK v2.51 or earlier. This bug was reported to\n\ - NoGate in March 1991 and was supposed to have been fixed by mid-1991; as\n\ - of mid-1992 it still hadn't been. (If further errors do occur, archive\n\ - was probably created by PKZIP 2.04c or later; UnZip does not yet support\n\ - multi-part archives.)\n"; -# else - static ZCONST char Far MaybePakBug[] = "warning [%s]:\ - zipfile claims to be last disk of a multi-part archive;\n\ - attempting to process anyway, assuming all parts have been concatenated\n\ - together in order. Expect \"errors\" and warnings...true multi-part support\ -\n doesn't exist yet (coming soon).\n"; -# endif - static ZCONST char Far ExtraBytesAtStart[] = - "warning [%s]: %ld extra byte%s at beginning or within zipfile\n\ - (attempting to process anyway)\n"; -#endif /* ?SFX */ - -static ZCONST char Far MissingBytes[] = - "error [%s]: missing %ld bytes in zipfile\n\ - (attempting to process anyway)\n"; -static ZCONST char Far NullCentDirOffset[] = - "error [%s]: NULL central directory offset\n\ - (attempting to process anyway)\n"; -static ZCONST char Far ZipfileEmpty[] = "warning [%s]: zipfile is empty\n"; -static ZCONST char Far CentDirStartNotFound[] = - "error [%s]: start of central directory not found;\n\ - zipfile corrupt.\n%s"; -#ifndef SFX - static ZCONST char Far CentDirTooLong[] = - "error [%s]: reported length of central directory is\n\ - %ld bytes too long (Atari STZip zipfile? J.H.Holm ZIPSPLIT 1.1\n\ - zipfile?). Compensating...\n"; - static ZCONST char Far CentDirEndSigNotFound[] = "\ - End-of-central-directory signature not found. Either this file is not\n\ - a zipfile, or it constitutes one disk of a multi-part archive. In the\n\ - latter case the central directory and zipfile comment will be found on\n\ - the last disk(s) of this archive.\n"; -#else /* SFX */ - static ZCONST char Far CentDirEndSigNotFound[] = - " End-of-central-directory signature not found.\n"; -#endif /* ?SFX */ -static ZCONST char Far ZipfileCommTrunc1[] = - "\ncaution: zipfile comment truncated\n"; - - - - -/*******************************/ -/* Function process_zipfiles() */ -/*******************************/ - -int process_zipfiles(__G) /* return PK-type error code */ - __GDEF -{ -#ifndef SFX - char *lastzipfn = (char *)NULL; - int NumWinFiles, NumLoseFiles, NumWarnFiles; - int NumMissDirs, NumMissFiles; -#endif - int error=0, error_in_archive=0; - - -/*--------------------------------------------------------------------------- - Start by allocating buffers and (re)constructing the various PK signature - strings. - ---------------------------------------------------------------------------*/ - - G.inbuf = (uch *)malloc(INBUFSIZ + 4); /* 4 extra for hold[] (below) */ - G.outbuf = (uch *)malloc(OUTBUFSIZ + 1); /* 1 extra for string term. */ - - if ((G.inbuf == (uch *)NULL) || (G.outbuf == (uch *)NULL)) { - Info(slide, 0x401, ((char *)slide, - LoadFarString(CannotAllocateBuffers))); - return(PK_MEM); - } - G.hold = G.inbuf + INBUFSIZ; /* to check for boundary-spanning sigs */ -#ifndef VMS /* VMS uses its own buffer scheme for textmode flush(). */ -#ifdef SMALL_MEM - G.outbuf2 = G.outbuf+RAWBUFSIZ; /* never changes */ -#endif -#endif /* !VMS */ - -#if 0 /* CRC_32_TAB has been NULLified by CONSTRUCTGLOBALS !!!! */ - /* allocate the CRC table only later when we know we have a zipfile */ - CRC_32_TAB = NULL; -#endif /* 0 */ - - /* finish up initialization of magic signature strings */ - local_hdr_sig[0] /* = extd_local_sig[0] */ = 0x50; /* ASCII 'P', */ - central_hdr_sig[0] = end_central_sig[0] = 0x50; /* not EBCDIC */ - - local_hdr_sig[1] /* = extd_local_sig[1] */ = 0x4B; /* ASCII 'K', */ - central_hdr_sig[1] = end_central_sig[1] = 0x4B; /* not EBCDIC */ - -/*--------------------------------------------------------------------------- - Make sure timezone info is set correctly; localtime() returns GMT on - some OSes (e.g., Solaris 2.x) if this isn't done first. The ifdefs were - initially copied from dos_to_unix_time() in fileio.c. probably, they are - still too strict; any listed OS that supplies tzset(), regardless of - whether the function does anything, should be removed from the ifdefs. - ---------------------------------------------------------------------------*/ - -#if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME)) -# ifndef VALID_TIMEZONE -# define VALID_TIMEZONE(tmp) \ - (((tmp = getenv("TZ")) != NULL) && (*tmp != '\0')) -# endif - { - char *p; - G.tz_is_valid = VALID_TIMEZONE(p); -# ifndef SFX - if (!G.tz_is_valid) { - Info(slide, 0x401, ((char *)slide, LoadFarString(WarnInvalidTZ))); - error_in_archive = error = PK_WARN; - } -# endif /* !SFX */ - } -#endif /* IZ_CHECK_TZ && USE_EF_UT_TIME */ - -/* For systems that do not have tzset() but supply this function using another - name (_tzset() or something similar), an appropiate "#define tzset ..." - should be added to the system specifc configuration section. */ -#if (!defined(T20_VMS) && !defined(MACOS) && !defined(RISCOS) && !defined(QDOS)) -#if (!defined(BSD) && !defined(MTS) && !defined(CMS_MVS) && !defined(TANDEM)) - tzset(); -#endif -#endif - -/*--------------------------------------------------------------------------- - Match (possible) wildcard zipfile specification with existing files and - attempt to process each. If no hits, try again after appending ".zip" - suffix. If still no luck, give up. - ---------------------------------------------------------------------------*/ - -#ifdef SFX - if ((error = do_seekable(__G__ 0)) == PK_NOZIP) { -#ifdef EXE_EXTENSION - int len=strlen(G.argv0); - - /* append .exe if appropriate; also .sfx? */ - if ( (G.zipfn = (char *)malloc(len+sizeof(EXE_EXTENSION))) != - (char *)NULL ) { - strcpy(G.zipfn, G.argv0); - strcpy(G.zipfn+len, EXE_EXTENSION); - error = do_seekable(__G__ 0); - free(G.zipfn); - G.zipfn = G.argv0; /* for "cannot find myself" message only */ - } -#endif /* EXE_EXTENSION */ -#ifdef WIN32 - G.zipfn = G.argv0; /* for "cannot find myself" message only */ -#endif - } - if (error) { - if (error == IZ_DIR) - error_in_archive = PK_NOZIP; - else - error_in_archive = error; - if (error == PK_NOZIP) - Info(slide, 1, ((char *)slide, LoadFarString(CannotFindMyself), - G.zipfn)); - } - -#else /* !SFX */ - NumWinFiles = NumLoseFiles = NumWarnFiles = 0; - NumMissDirs = NumMissFiles = 0; - - while ((G.zipfn = do_wild(__G__ G.wildzipfn)) != (char *)NULL) { - Trace((stderr, "do_wild( %s ) returns %s\n", G.wildzipfn, G.zipfn)); - - lastzipfn = G.zipfn; - - /* print a blank line between the output of different zipfiles */ - if (!uO.qflag && error != PK_NOZIP && error != IZ_DIR -#ifdef TIMESTAMP - && (!uO.T_flag || uO.zipinfo_mode) -#endif - && (NumWinFiles+NumLoseFiles+NumWarnFiles+NumMissFiles) > 0) - (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0); - - if ((error = do_seekable(__G__ 0)) == PK_WARN) - ++NumWarnFiles; - else if (error == IZ_DIR) - ++NumMissDirs; - else if (error == PK_NOZIP) - ++NumMissFiles; - else if (error) - ++NumLoseFiles; - else - ++NumWinFiles; - - if (error != IZ_DIR && error > error_in_archive) - error_in_archive = error; - Trace((stderr, "do_seekable(0) returns %d\n", error)); -#ifdef WINDLL - if (error == IZ_CTRLC) { - free_G_buffers(__G); - return error; - } -#endif - - } /* end while-loop (wildcard zipfiles) */ - - if ((NumWinFiles + NumWarnFiles + NumLoseFiles) == 0 && - (NumMissDirs + NumMissFiles) == 1 && lastzipfn != (char *)NULL) - { - NumMissDirs = NumMissFiles = 0; - if (error_in_archive == PK_NOZIP) - error_in_archive = PK_COOL; - -#if (!defined(UNIX) && !defined(AMIGA)) /* filenames with wildcard characters */ - if (iswild(G.wildzipfn)) - Info(slide, 0x401, ((char *)slide, - LoadFarString(CannotFindWildcardMatch), uO.zipinfo_mode? - LoadFarStringSmall(Zipnfo) : LoadFarStringSmall(Unzip), - G.wildzipfn)); - else -#endif - { - char *p = lastzipfn + strlen(lastzipfn); - - G.zipfn = lastzipfn; - strcpy(p, ZSUFX); - -#if defined(UNIX) || defined(QDOS) - /* only Unix has case-sensitive filesystems */ - /* Well FlexOS (sometimes) also has them, but support is per media */ - /* and a pig to code for, so treat as case insensitive for now */ - /* we do this under QDOS to check for .zip as well as _zip */ - if ((error = do_seekable(__G__ 0)) == PK_NOZIP || error == IZ_DIR) { - if (error == IZ_DIR) - ++NumMissDirs; - strcpy(p, ALT_ZSUFX); - error = do_seekable(__G__ 1); - } -#else - error = do_seekable(__G__ 1); -#endif - if (error == PK_WARN) /* GRR: make this a switch/case stmt ... */ - ++NumWarnFiles; - else if (error == IZ_DIR) - ++NumMissDirs; - else if (error == PK_NOZIP) - /* increment again => bug: "1 file had no zipfile directory." */ - /* ++NumMissFiles */ ; - else if (error) - ++NumLoseFiles; - else - ++NumWinFiles; - - if (error > error_in_archive) - error_in_archive = error; - Trace((stderr, "do_seekable(1) returns %d\n", error)); -#ifdef WINDLL - if (error == IZ_CTRLC) { - free_G_buffers(__G); - return error; - } -#endif - } - } -#endif /* ?SFX */ - -/*--------------------------------------------------------------------------- - Print summary of all zipfiles, assuming zipfile spec was a wildcard (no - need for a summary if just one zipfile). - ---------------------------------------------------------------------------*/ - -#ifndef SFX - if (iswild(G.wildzipfn) && uO.qflag < 3 -#ifdef TIMESTAMP - && !(uO.T_flag && uO.qflag && !uO.zipinfo_mode) -#endif - ) - { - if ((NumMissFiles + NumLoseFiles + NumWarnFiles > 0 || NumWinFiles != 1) -#ifdef TIMESTAMP - && !(uO.T_flag && !uO.zipinfo_mode) -#endif - && !(uO.tflag && uO.qflag > 1)) - (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0x401); - if ((NumWinFiles > 1) || (NumWinFiles == 1 && - NumMissDirs + NumMissFiles + NumLoseFiles + NumWarnFiles > 0)) - Info(slide, 0x401, ((char *)slide, LoadFarString(FilesProcessOK), - NumWinFiles, (NumWinFiles == 1)? " was" : "s were")); - if (NumWarnFiles > 0) - Info(slide, 0x401, ((char *)slide, LoadFarString(ArchiveWarning), - NumWarnFiles, (NumWarnFiles == 1)? "" : "s")); - if (NumLoseFiles > 0) - Info(slide, 0x401, ((char *)slide, LoadFarString(ArchiveFatalError), - NumLoseFiles, (NumLoseFiles == 1)? "" : "s")); - if (NumMissFiles > 0) - Info(slide, 0x401, ((char *)slide, - LoadFarString(FileHadNoZipfileDir), NumMissFiles, - (NumMissFiles == 1)? "" : "s")); - if (NumMissDirs == 1) - Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileWasDir))); - else if (NumMissDirs > 0) - Info(slide, 0x401, ((char *)slide, - LoadFarString(ManyZipfilesWereDir), NumMissDirs)); - if (NumWinFiles + NumLoseFiles + NumWarnFiles == 0) - Info(slide, 0x401, ((char *)slide, LoadFarString(NoZipfileFound))); - } -#endif /* !SFX */ - - /* free allocated memory */ - free_G_buffers(__G); - - return error_in_archive; - -} /* end function process_zipfiles() */ - - - - - -/*****************************/ -/* Function free_G_buffers() */ -/*****************************/ - -void free_G_buffers(__G) /* releases all memory allocated in global vars */ - __GDEF -{ - inflate_free(__G); - checkdir(__G__ (char *)NULL, END); - -#ifdef DYNALLOC_CRCTAB - if (CRC_32_TAB) { - free_crc_table(); - CRC_32_TAB = NULL; - } -#endif - - if (G.key != (char *)NULL) { - free(G.key); - G.key = (char *)NULL; - } - -#if (!defined(VMS) && !defined(SMALL_MEM)) - /* VMS uses its own buffer scheme for textmode flush() */ - if (G.outbuf2) { - free(G.outbuf2); /* malloc'd ONLY if unshrink and -a */ - G.outbuf2 = (uch *)NULL; - } -#endif - - if (G.outbuf) - free(G.outbuf); - if (G.inbuf) - free(G.inbuf); - G.inbuf = G.outbuf = (uch *)NULL; - -#ifdef MALLOC_WORK - if (G.area.Slide) { - free(G.area.Slide); - G.area.Slide = (uch *)NULL; - } -#endif - -} /* end function free_G_buffers() */ - - - - - -/**************************/ -/* Function do_seekable() */ -/**************************/ - -static int do_seekable(__G__ lastchance) /* return PK-type error code */ - __GDEF - int lastchance; -{ -#ifndef SFX - /* static int no_ecrec = FALSE; SKM: moved to globals.h */ - int maybe_exe=FALSE; - int too_weird_to_continue=FALSE; -#ifdef TIMESTAMP - time_t uxstamp; - unsigned nmember = 0; -#endif -#endif - int error=0, error_in_archive; - - -/*--------------------------------------------------------------------------- - Open the zipfile for reading in BINARY mode to prevent CR/LF translation, - which would corrupt the bit streams. - ---------------------------------------------------------------------------*/ - - if (SSTAT(G.zipfn, &G.statbuf) || - (error = S_ISDIR(G.statbuf.st_mode)) != 0) - { -#ifndef SFX - if (lastchance) { -#if defined(UNIX) || defined(QDOS) - if (G.no_ecrec) - Info(slide, 1, ((char *)slide, - LoadFarString(CannotFindZipfileDirMsg), uO.zipinfo_mode? - LoadFarStringSmall(Zipnfo) : LoadFarStringSmall(Unzip), - G.wildzipfn, uO.zipinfo_mode? " " : "", G.wildzipfn, - G.zipfn)); - else - Info(slide, 1, ((char *)slide, - LoadFarString(CannotFindEitherZipfile), uO.zipinfo_mode? - LoadFarStringSmall(Zipnfo) : LoadFarStringSmall(Unzip), - G.wildzipfn, G.wildzipfn, G.zipfn)); -#else /* !UNIX */ - if (G.no_ecrec) - Info(slide, 0x401, ((char *)slide, - LoadFarString(CannotFindZipfileDirMsg), uO.zipinfo_mode? - LoadFarStringSmall(Zipnfo) : LoadFarStringSmall(Unzip), - G.wildzipfn, uO.zipinfo_mode? " " : "", G.zipfn)); - else - Info(slide, 0x401, ((char *)slide, - LoadFarString(CannotFindEitherZipfile), uO.zipinfo_mode? - LoadFarStringSmall(Zipnfo) : LoadFarStringSmall(Unzip), - G.wildzipfn, G.zipfn)); -#endif /* ?UNIX */ - } -#endif /* !SFX */ - return error? IZ_DIR : PK_NOZIP; - } - G.ziplen = G.statbuf.st_size; - -#ifndef SFX -#if defined(UNIX) || defined(DOS_OS2_W32) - if (G.statbuf.st_mode & S_IEXEC) /* no extension on Unix exes: might */ - maybe_exe = TRUE; /* find unzip, not unzip.zip; etc. */ -#endif -#endif /* !SFX */ - -#ifdef VMS - if (check_format(__G)) /* check for variable-length format */ - return PK_ERR; -#endif - - if (open_input_file(__G)) /* this should never happen, given */ - return PK_NOZIP; /* the stat() test above, but... */ - -/*--------------------------------------------------------------------------- - Find and process the end-of-central-directory header. UnZip need only - check last 65557 bytes of zipfile: comment may be up to 65535, end-of- - central-directory record is 18 bytes, and signature itself is 4 bytes; - add some to allow for appended garbage. Since ZipInfo is often used as - a debugging tool, search the whole zipfile if zipinfo_mode is true. - ---------------------------------------------------------------------------*/ - - /* initialize the CRC table pointer (once) */ - if (CRC_32_TAB == NULL) { - if ((CRC_32_TAB = get_crc_table()) == NULL) - return PK_MEM; - } - -#if (!defined(SFX) || defined(SFX_EXDIR)) - /* check out if specified extraction root directory exists */ - if (uO.exdir != (char *)NULL && G.extract_flag) { - G.create_dirs = !uO.fflag; - if ((error = checkdir(__G__ uO.exdir, ROOT)) > 2) - return error; /* out of memory, or file in way */ - } -#endif /* !SFX || SFX_EXDIR */ - - G.cur_zipfile_bufstart = 0; - G.inptr = G.inbuf; - -#if (!defined(WINDLL) && !defined(SFX)) -#ifdef TIMESTAMP - if (!uO.zipinfo_mode && !uO.qflag && !uO.T_flag) -#else - if (!uO.zipinfo_mode && !uO.qflag) -#endif -#ifdef WIN32 /* Win32 console may require codepage conversion for G.zipfn */ - Info(slide, 0, ((char *)slide, "Archive: %s\n", FnFilter1(G.zipfn))); -#else - Info(slide, 0, ((char *)slide, "Archive: %s\n", G.zipfn)); -#endif -#endif /* !WINDLL && !SFX */ - - if (( -#ifndef NO_ZIPINFO - uO.zipinfo_mode && - ((error_in_archive = find_ecrec(__G__ G.ziplen)) != 0 || - (error_in_archive = zi_end_central(__G)) > PK_WARN)) - || (!uO.zipinfo_mode && -#endif - ((error_in_archive = find_ecrec(__G__ MIN(G.ziplen,66000L))) != 0 || - (error_in_archive = uz_end_central(__G)) > PK_WARN))) - { - CLOSE_INFILE(); - -#ifdef SFX - ++lastchance; /* avoid picky compiler warnings */ - return error_in_archive; -#else - if (maybe_exe) - Info(slide, 0x401, ((char *)slide, LoadFarString(MaybeExe), - G.zipfn)); - if (lastchance) - return error_in_archive; - else { - G.no_ecrec = TRUE; /* assume we found wrong file: e.g., */ - return PK_NOZIP; /* unzip instead of unzip.zip */ - } -#endif /* ?SFX */ - } - - if ((uO.zflag > 0) && !uO.zipinfo_mode) { /* unzip: zflag = comment ONLY */ - CLOSE_INFILE(); - return error_in_archive; - } - -/*--------------------------------------------------------------------------- - Test the end-of-central-directory info for incompatibilities (multi-disk - archives) or inconsistencies (missing or extra bytes in zipfile). - ---------------------------------------------------------------------------*/ - -#ifdef NO_MULTIPART - error = !uO.zipinfo_mode && (G.ecrec.number_this_disk == 1) && - (G.ecrec.num_disk_start_cdir == 1); -#else - error = !uO.zipinfo_mode && (G.ecrec.number_this_disk != 0); -#endif - -#ifndef SFX - if (uO.zipinfo_mode && - G.ecrec.number_this_disk != G.ecrec.num_disk_start_cdir) - { - if (G.ecrec.number_this_disk > G.ecrec.num_disk_start_cdir) { - Info(slide, 0x401, ((char *)slide, - LoadFarString(CentDirNotInZipMsg), G.zipfn, - G.ecrec.number_this_disk, G.ecrec.num_disk_start_cdir)); - error_in_archive = PK_FIND; - too_weird_to_continue = TRUE; - } else { - Info(slide, 0x401, ((char *)slide, - LoadFarString(EndCentDirBogus), G.zipfn, - G.ecrec.number_this_disk, G.ecrec.num_disk_start_cdir)); - error_in_archive = PK_WARN; - } -#ifdef NO_MULTIPART /* concatenation of multiple parts works in some cases */ - } else if (!uO.zipinfo_mode && !error && G.ecrec.number_this_disk != 0) { - Info(slide, 0x401, ((char *)slide, LoadFarString(NoMultiDiskArcSupport), - G.zipfn)); - error_in_archive = PK_FIND; - too_weird_to_continue = TRUE; -#endif - } - - if (!too_weird_to_continue) { /* (relatively) normal zipfile: go for it */ - if (error) { - Info(slide, 0x401, ((char *)slide, LoadFarString(MaybePakBug), - G.zipfn)); - error_in_archive = PK_WARN; - } -#endif /* !SFX */ - if ((G.extra_bytes = G.real_ecrec_offset-G.expect_ecrec_offset) < - (LONGINT)0) - { - Info(slide, 0x401, ((char *)slide, LoadFarString(MissingBytes), - G.zipfn, (long)(-G.extra_bytes))); - error_in_archive = PK_ERR; - } else if (G.extra_bytes > 0) { - if ((G.ecrec.offset_start_central_directory == 0) && - (G.ecrec.size_central_directory != 0)) /* zip 1.5 -go bug */ - { - Info(slide, 0x401, ((char *)slide, - LoadFarString(NullCentDirOffset), G.zipfn)); - G.ecrec.offset_start_central_directory = G.extra_bytes; - G.extra_bytes = 0; - error_in_archive = PK_ERR; - } -#ifndef SFX - else { - Info(slide, 0x401, ((char *)slide, - LoadFarString(ExtraBytesAtStart), G.zipfn, - (long)G.extra_bytes, (G.extra_bytes == 1)? "":"s")); - error_in_archive = PK_WARN; - } -#endif /* !SFX */ - } - - /*----------------------------------------------------------------------- - Check for empty zipfile and exit now if so. - -----------------------------------------------------------------------*/ - - if (G.expect_ecrec_offset==0L && G.ecrec.size_central_directory==0) { - if (uO.zipinfo_mode) - Info(slide, 0, ((char *)slide, "%sEmpty zipfile.\n", - uO.lflag>9? "\n " : "")); - else - Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileEmpty), - G.zipfn)); - CLOSE_INFILE(); - return (error_in_archive > PK_WARN)? error_in_archive : PK_WARN; - } - - /*----------------------------------------------------------------------- - Compensate for missing or extra bytes, and seek to where the start - of central directory should be. If header not found, uncompensate - and try again (necessary for at least some Atari archives created - with STZip, as well as archives created by J.H. Holm's ZIPSPLIT 1.1). - -----------------------------------------------------------------------*/ - - ZLSEEK( G.ecrec.offset_start_central_directory ) -#ifdef OLD_SEEK_TEST - if (readbuf(G.sig, 4) == 0) { - CLOSE_INFILE(); - return PK_ERR; /* file may be locked, or possibly disk error(?) */ - } - if (strncmp(G.sig, central_hdr_sig, 4)) -#else - if ((readbuf(__G__ G.sig, 4) == 0) || - strncmp(G.sig, central_hdr_sig, 4)) -#endif - { -#ifndef SFX - long tmp = G.extra_bytes; -#endif - - G.extra_bytes = 0; - ZLSEEK( G.ecrec.offset_start_central_directory ) - if ((readbuf(__G__ G.sig, 4) == 0) || - strncmp(G.sig, central_hdr_sig, 4)) - { - Info(slide, 0x401, ((char *)slide, - LoadFarString(CentDirStartNotFound), G.zipfn, - LoadFarStringSmall(ReportMsg))); - CLOSE_INFILE(); - return PK_BADERR; - } -#ifndef SFX - Info(slide, 0x401, ((char *)slide, LoadFarString(CentDirTooLong), - G.zipfn, -tmp)); -#endif - error_in_archive = PK_ERR; - } - - /*----------------------------------------------------------------------- - Seek to the start of the central directory one last time, since we - have just read the first entry's signature bytes; then list, extract - or test member files as instructed, and close the zipfile. - -----------------------------------------------------------------------*/ - - Trace((stderr, "about to extract/list files (error = %d)\n", - error_in_archive)); - - ZLSEEK( G.ecrec.offset_start_central_directory ) - -#ifdef DLL - /* G.fValidate is used only to look at an archive to see if - it appears to be a valid archive. There is no interest - in what the archive contains, nor in validating that the - entries in the archive are in good condition. This is - currently used only in the Windows DLLs for purposes of - checking archives within an archive to determine whether - or not to display the inner archives. - */ - if (!G.fValidate) -#endif - { -#ifndef NO_ZIPINFO - if (uO.zipinfo_mode) - error = zipinfo(__G); /* ZIPINFO 'EM */ - else -#endif -#ifndef SFX -#ifdef TIMESTAMP - if (uO.T_flag) - error = get_time_stamp(__G__ &uxstamp, &nmember); - else -#endif - if (uO.vflag && !uO.tflag && !uO.cflag) - error = list_files(__G); /* LIST 'EM */ - else -#endif /* !SFX */ - error = extract_or_test_files(__G); /* EXTRACT OR TEST 'EM */ - - Trace((stderr, "done with extract/list files (error = %d)\n", - error)); - } - - if (error > error_in_archive) /* don't overwrite stronger error */ - error_in_archive = error; /* with (for example) a warning */ -#ifndef SFX - } /* end if (!too_weird_to_continue) */ -#endif - - CLOSE_INFILE(); - -#ifdef TIMESTAMP - if (uO.T_flag && !uO.zipinfo_mode && (nmember > 0)) { -# ifdef WIN32 - if (stamp_file(__G__ G.zipfn, uxstamp)) { /* TIME-STAMP 'EM */ -# else - if (stamp_file(G.zipfn, uxstamp)) { /* TIME-STAMP 'EM */ -# endif - Info(slide, 0x201, ((char *)slide, - "warning: cannot set time for %s\n", G.zipfn)); - if (error_in_archive < PK_WARN) - error_in_archive = PK_WARN; - } - } -#endif - return error_in_archive; - -} /* end function do_seekable() */ - - - - - -/*************************/ -/* Function find_ecrec() */ -/*************************/ - -static int find_ecrec(__G__ searchlen) /* return PK-class error */ - __GDEF - long searchlen; -{ - int i, numblks, found=FALSE; - LONGINT tail_len; - ec_byte_rec byterec; - - -/*--------------------------------------------------------------------------- - Treat case of short zipfile separately. - ---------------------------------------------------------------------------*/ - - if (G.ziplen <= INBUFSIZ) { - lseek(G.zipfd, 0L, SEEK_SET); - if ((G.incnt = read(G.zipfd,(char *)G.inbuf,(unsigned int)G.ziplen)) - == (int)G.ziplen) - - /* 'P' must be at least 22 bytes from end of zipfile */ - for (G.inptr = G.inbuf+(int)G.ziplen-22; G.inptr >= G.inbuf; - --G.inptr) - if ((native(*G.inptr) == 'P') && - !strncmp((char *)G.inptr, end_central_sig, 4)) { - G.incnt -= (int)(G.inptr - G.inbuf); - found = TRUE; - break; - } - -/*--------------------------------------------------------------------------- - Zipfile is longer than INBUFSIZ: may need to loop. Start with short - block at end of zipfile (if not TOO short). - ---------------------------------------------------------------------------*/ - - } else { - if ((tail_len = G.ziplen % INBUFSIZ) > ECREC_SIZE) { -#ifdef USE_STRM_INPUT - fseek((FILE *)G.zipfd, G.ziplen-tail_len, SEEK_SET); - G.cur_zipfile_bufstart = ftell((FILE *)G.zipfd); -#else /* !USE_STRM_INPUT */ - G.cur_zipfile_bufstart = lseek(G.zipfd, G.ziplen-tail_len, - SEEK_SET); -#endif /* ?USE_STRM_INPUT */ - if ((G.incnt = read(G.zipfd, (char *)G.inbuf, - (unsigned int)tail_len)) != (int)tail_len) - goto fail; /* it's expedient... */ - - /* 'P' must be at least 22 bytes from end of zipfile */ - for (G.inptr = G.inbuf+(int)tail_len-22; G.inptr >= G.inbuf; - --G.inptr) - if ((native(*G.inptr) == 'P') && - !strncmp((char *)G.inptr, end_central_sig, 4)) { - G.incnt -= (int)(G.inptr - G.inbuf); - found = TRUE; - break; - } - /* sig may span block boundary: */ - strncpy((char *)G.hold, (char *)G.inbuf, 3); - } else - G.cur_zipfile_bufstart = G.ziplen - tail_len; - - /*----------------------------------------------------------------------- - Loop through blocks of zipfile data, starting at the end and going - toward the beginning. In general, need not check whole zipfile for - signature, but may want to do so if testing. - -----------------------------------------------------------------------*/ - - numblks = (int)((searchlen - tail_len + (INBUFSIZ-1)) / INBUFSIZ); - /* ==amount= ==done== ==rounding== =blksiz= */ - - for (i = 1; !found && (i <= numblks); ++i) { - G.cur_zipfile_bufstart -= INBUFSIZ; - lseek(G.zipfd, G.cur_zipfile_bufstart, SEEK_SET); - if ((G.incnt = read(G.zipfd,(char *)G.inbuf,INBUFSIZ)) - != INBUFSIZ) - break; /* fall through and fail */ - - for (G.inptr = G.inbuf+INBUFSIZ-1; G.inptr >= G.inbuf; - --G.inptr) - if ((native(*G.inptr) == 'P') && - !strncmp((char *)G.inptr, end_central_sig, 4)) { - G.incnt -= (int)(G.inptr - G.inbuf); - found = TRUE; - break; - } - /* sig may span block boundary: */ - strncpy((char *)G.hold, (char *)G.inbuf, 3); - } - } /* end if (ziplen > INBUFSIZ) */ - -/*--------------------------------------------------------------------------- - Searched through whole region where signature should be without finding - it. Print informational message and die a horrible death. - ---------------------------------------------------------------------------*/ - -fail: - if (!found) { - if (uO.qflag || uO.zipinfo_mode) - Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); - Info(slide, 0x401, ((char *)slide, - LoadFarString(CentDirEndSigNotFound))); - return PK_ERR; /* failed */ - } - -/*--------------------------------------------------------------------------- - Found the signature, so get the end-central data before returning. Do - any necessary machine-type conversions (byte ordering, structure padding - compensation) by reading data into character array and copying to struct. - ---------------------------------------------------------------------------*/ - - G.real_ecrec_offset = G.cur_zipfile_bufstart + (G.inptr-G.inbuf); -#ifdef TEST - printf("\n found end-of-central-dir signature at offset %ld (%.8lXh)\n", - G.real_ecrec_offset, G.real_ecrec_offset); - printf(" from beginning of file; offset %d (%.4Xh) within block\n", - G.inptr-G.inbuf, G.inptr-G.inbuf); -#endif - - if (readbuf(__G__ (char *)byterec, ECREC_SIZE+4) == 0) - return PK_EOF; - - G.ecrec.number_this_disk = - makeword(&byterec[NUMBER_THIS_DISK]); - G.ecrec.num_disk_start_cdir = - makeword(&byterec[NUM_DISK_WITH_START_CENTRAL_DIR]); - G.ecrec.num_entries_centrl_dir_ths_disk = - makeword(&byterec[NUM_ENTRIES_CENTRL_DIR_THS_DISK]); - G.ecrec.total_entries_central_dir = - makeword(&byterec[TOTAL_ENTRIES_CENTRAL_DIR]); - G.ecrec.size_central_directory = - makelong(&byterec[SIZE_CENTRAL_DIRECTORY]); - G.ecrec.offset_start_central_directory = - makelong(&byterec[OFFSET_START_CENTRAL_DIRECTORY]); - G.ecrec.zipfile_comment_length = - makeword(&byterec[ZIPFILE_COMMENT_LENGTH]); - - G.expect_ecrec_offset = G.ecrec.offset_start_central_directory + - G.ecrec.size_central_directory; - return PK_COOL; - -} /* end function find_ecrec() */ - - - - - -/*****************************/ -/* Function uz_end_central() */ -/*****************************/ - -int uz_end_central(__G) /* return PK-type error code */ - __GDEF -{ - int error = PK_COOL; - - -/*--------------------------------------------------------------------------- - Get the zipfile comment (up to 64KB long), if any, and print it out. - Then position the file pointer to the beginning of the central directory - and fill buffer. - ---------------------------------------------------------------------------*/ - -#ifdef WINDLL - /* for comment button: */ - if ((!G.fValidate) && (G.lpUserFunctions != NULL)) - G.lpUserFunctions->cchComment = G.ecrec.zipfile_comment_length; - if (G.ecrec.zipfile_comment_length && (uO.zflag > 0)) -#else /* !WINDLL */ - if (G.ecrec.zipfile_comment_length && (uO.zflag > 0 || - (uO.zflag == 0 && -#ifdef TIMESTAMP - !uO.T_flag && -#endif - !uO.qflag))) -#endif /* ?WINDLL */ - { - if (do_string(__G__ G.ecrec.zipfile_comment_length, DISPLAY)) { - Info(slide, 0x401, ((char *)slide, - LoadFarString(ZipfileCommTrunc1))); - error = PK_WARN; - } - } - return error; - -} /* end function uz_end_central() */ - - - - - -/************************************/ -/* Function process_cdir_file_hdr() */ -/************************************/ - -int process_cdir_file_hdr(__G) /* return PK-type error code */ - __GDEF -{ - int error; - - -/*--------------------------------------------------------------------------- - Get central directory info, save host and method numbers, and set flag - for lowercase conversion of filename, depending on the OS from which the - file is coming. - ---------------------------------------------------------------------------*/ - - if ((error = get_cdir_ent(__G)) != 0) - return error; - - G.pInfo->hostnum = MIN(G.crec.version_made_by[1], NUM_HOSTS); -/* extnum = MIN(crec.version_needed_to_extract[1], NUM_HOSTS); */ - - G.pInfo->lcflag = 0; - if (uO.L_flag) /* user specified case-conversion */ - switch (G.pInfo->hostnum) { - case FS_FAT_: /* PKZIP and zip -k store in uppercase */ - case CPM_: /* like MS-DOS, right? */ - case VM_CMS_: /* all caps? */ - case MVS_: /* all caps? */ - case TANDEM_: - case TOPS20_: - case VMS_: /* our Zip uses lowercase, but ASi's doesn't */ - /* case Z_SYSTEM_: ? */ - /* case QDOS_: ? */ - G.pInfo->lcflag = 1; /* convert filename to lowercase */ - break; - - default: /* AMIGA_, FS_HPFS_, FS_NTFS_, MAC_, UNIX_, ATARI_, */ - break; /* FS_VFAT_, BEOS_ (Z_SYSTEM_): no conversion */ - } - - /* do Amigas (AMIGA_) also have volume labels? */ - if (IS_VOLID(G.crec.external_file_attributes) && - (G.pInfo->hostnum == FS_FAT_ || G.pInfo->hostnum == FS_HPFS_ || - G.pInfo->hostnum == FS_NTFS_ || G.pInfo->hostnum == ATARI_)) - { - G.pInfo->vollabel = TRUE; - G.pInfo->lcflag = 0; /* preserve case of volume labels */ - } else - G.pInfo->vollabel = FALSE; - - return PK_COOL; - -} /* end function process_cdir_file_hdr() */ - - - - - -/***************************/ -/* Function get_cdir_ent() */ -/***************************/ - -int get_cdir_ent(__G) /* return PK-type error code */ - __GDEF -{ - cdir_byte_hdr byterec; - - -/*--------------------------------------------------------------------------- - Read the next central directory entry and do any necessary machine-type - conversions (byte ordering, structure padding compensation--do so by - copying the data from the array into which it was read (byterec) to the - usable struct (crec)). - ---------------------------------------------------------------------------*/ - - if (readbuf(__G__ (char *)byterec, CREC_SIZE) == 0) - return PK_EOF; - - G.crec.version_made_by[0] = byterec[C_VERSION_MADE_BY_0]; - G.crec.version_made_by[1] = byterec[C_VERSION_MADE_BY_1]; - G.crec.version_needed_to_extract[0] = - byterec[C_VERSION_NEEDED_TO_EXTRACT_0]; - G.crec.version_needed_to_extract[1] = - byterec[C_VERSION_NEEDED_TO_EXTRACT_1]; - - G.crec.general_purpose_bit_flag = - makeword(&byterec[C_GENERAL_PURPOSE_BIT_FLAG]); - G.crec.compression_method = - makeword(&byterec[C_COMPRESSION_METHOD]); - G.crec.last_mod_dos_datetime = - makelong(&byterec[C_LAST_MOD_DOS_DATETIME]); - G.crec.crc32 = - makelong(&byterec[C_CRC32]); - G.crec.csize = - makelong(&byterec[C_COMPRESSED_SIZE]); - G.crec.ucsize = - makelong(&byterec[C_UNCOMPRESSED_SIZE]); - G.crec.filename_length = - makeword(&byterec[C_FILENAME_LENGTH]); - G.crec.extra_field_length = - makeword(&byterec[C_EXTRA_FIELD_LENGTH]); - G.crec.file_comment_length = - makeword(&byterec[C_FILE_COMMENT_LENGTH]); - G.crec.disk_number_start = - makeword(&byterec[C_DISK_NUMBER_START]); - G.crec.internal_file_attributes = - makeword(&byterec[C_INTERNAL_FILE_ATTRIBUTES]); - G.crec.external_file_attributes = - makelong(&byterec[C_EXTERNAL_FILE_ATTRIBUTES]); /* LONG, not word! */ - G.crec.relative_offset_local_header = - makelong(&byterec[C_RELATIVE_OFFSET_LOCAL_HEADER]); - - return PK_COOL; - -} /* end function get_cdir_ent() */ - - - - - -/*************************************/ -/* Function process_local_file_hdr() */ -/*************************************/ - -int process_local_file_hdr(__G) /* return PK-type error code */ - __GDEF -{ - local_byte_hdr byterec; - - -/*--------------------------------------------------------------------------- - Read the next local file header and do any necessary machine-type con- - versions (byte ordering, structure padding compensation--do so by copy- - ing the data from the array into which it was read (byterec) to the - usable struct (lrec)). - ---------------------------------------------------------------------------*/ - - if (readbuf(__G__ (char *)byterec, LREC_SIZE) == 0) - return PK_EOF; - - G.lrec.version_needed_to_extract[0] = - byterec[L_VERSION_NEEDED_TO_EXTRACT_0]; - G.lrec.version_needed_to_extract[1] = - byterec[L_VERSION_NEEDED_TO_EXTRACT_1]; - - G.lrec.general_purpose_bit_flag = - makeword(&byterec[L_GENERAL_PURPOSE_BIT_FLAG]); - G.lrec.compression_method = makeword(&byterec[L_COMPRESSION_METHOD]); - G.lrec.last_mod_dos_datetime = makelong(&byterec[L_LAST_MOD_DOS_DATETIME]); - G.lrec.crc32 = makelong(&byterec[L_CRC32]); - G.lrec.csize = makelong(&byterec[L_COMPRESSED_SIZE]); - G.lrec.ucsize = makelong(&byterec[L_UNCOMPRESSED_SIZE]); - G.lrec.filename_length = makeword(&byterec[L_FILENAME_LENGTH]); - G.lrec.extra_field_length = makeword(&byterec[L_EXTRA_FIELD_LENGTH]); - - G.csize = (long) G.lrec.csize; - G.ucsize = (long) G.lrec.ucsize; - - if ((G.lrec.general_purpose_bit_flag & 8) != 0) { - /* can't trust local header, use central directory: */ - G.lrec.crc32 = G.pInfo->crc; - G.csize = (long)(G.lrec.csize = G.pInfo->compr_size); - G.ucsize = (long)(G.lrec.ucsize = G.pInfo->uncompr_size); - } - - return PK_COOL; - -} /* end function process_local_file_hdr() */ - - -#ifdef USE_EF_UT_TIME - -/*******************************/ -/* Function ef_scan_for_izux() */ -/*******************************/ - -unsigned ef_scan_for_izux(ef_buf, ef_len, ef_is_c, dos_mdatetime, - z_utim, z_uidgid) - uch *ef_buf; /* buffer containing extra field */ - unsigned ef_len; /* total length of extra field */ - int ef_is_c; /* flag indicating "is central extra field" */ - ulg dos_mdatetime; /* last_mod_file_date_time in DOS format */ - iztimes *z_utim; /* return storage: atime, mtime, ctime */ - ush *z_uidgid; /* return storage: uid and gid */ -{ - unsigned flags = 0; - unsigned eb_id; - unsigned eb_len; - int have_new_type_eb = FALSE; - int ut_zip_unzip_compatible = FALSE; - -/*--------------------------------------------------------------------------- - This function scans the extra field for EF_TIME, EF_IZUNIX2, EF_IZUNIX, or - EF_PKUNIX blocks containing Unix-style time_t (GMT) values for the entry's - access, creation, and modification time. - If a valid block is found, the time stamps are copied to the iztimes - structure (provided the z_utim pointer is not NULL). - If a IZUNIX2 block is found or the IZUNIX block contains UID/GID fields, - and the z_uidgid array pointer is valid (!= NULL), the owner info is - transfered as well. - The presence of an EF_TIME or EF_IZUNIX2 block results in ignoring all - data from probably present obsolete EF_IZUNIX blocks. - If multiple blocks of the same type are found, only the information from - the last block is used. - The return value is a combination of the EF_TIME Flags field with an - additional flag bit indicating the presence of valid UID/GID info, - or 0 in case of failure. - ---------------------------------------------------------------------------*/ - - if (ef_len == 0 || ef_buf == NULL || (z_utim == 0 && z_uidgid == NULL)) - return 0; - - TTrace((stderr,"\nef_scan_for_izux: scanning extra field of length %u\n", - ef_len)); - - while (ef_len >= EB_HEADSIZE) { - eb_id = makeword(EB_ID + ef_buf); - eb_len = makeword(EB_LEN + ef_buf); - - if (eb_len > (ef_len - EB_HEADSIZE)) { - /* discovered some extra field inconsistency! */ - TTrace((stderr, - "ef_scan_for_izux: block length %u > rest ef_size %u\n", eb_len, - ef_len - EB_HEADSIZE)); - break; - } - - switch (eb_id) { - case EF_TIME: - flags &= ~0x0ff; /* ignore previous IZUNIX or EF_TIME fields */ - have_new_type_eb = TRUE; - if ( eb_len >= EB_UT_MINLEN && z_utim != NULL) { - unsigned eb_idx = EB_UT_TIME1; - TTrace((stderr,"ef_scan_for_izux: found TIME extra field\n")); - flags |= (ef_buf[EB_HEADSIZE+EB_UT_FLAGS] & 0x0ff); - if ((flags & EB_UT_FL_MTIME)) { - if ((eb_idx+4) <= eb_len) { - z_utim->mtime = makelong((EB_HEADSIZE+eb_idx) + ef_buf); - eb_idx += 4; - TTrace((stderr," UT e.f. modification time = %ld\n", - z_utim->mtime)); - - if ((ulg)(z_utim->mtime) & (ulg)(0x80000000L)) { - ut_zip_unzip_compatible = - ((time_t)0x80000000L < (time_t)0L) - ? (dos_mdatetime == DOSTIME_MINIMUM) - : (dos_mdatetime >= DOSTIME_2038_01_18); - if (!ut_zip_unzip_compatible) { - /* UnZip interpretes mtime differently than Zip; - without modtime: ignore complete UT field */ - flags &= ~0x0ff; /* no time_t times available */ - TTrace((stderr, - " UT modtime range error; ignore e.f.!\n")); - break; /* stop scanning this field */ - } - } else { - /* cannot determine, safe assumption is FALSE */ - ut_zip_unzip_compatible = FALSE; - } - } else { - flags &= ~EB_UT_FL_MTIME; - TTrace((stderr," UT e.f. truncated; no modtime\n")); - } - } - if (ef_is_c) { - break; /* central version of TIME field ends here */ - } - - if (flags & EB_UT_FL_ATIME) { - if ((eb_idx+4) <= eb_len) { - z_utim->atime = makelong((EB_HEADSIZE+eb_idx) + ef_buf); - eb_idx += 4; - TTrace((stderr," UT e.f. access time = %ld\n", - z_utim->atime)); - if (((ulg)(z_utim->atime) & (ulg)(0x80000000L)) && - !ut_zip_unzip_compatible) { - flags &= ~EB_UT_FL_ATIME; - TTrace((stderr, - " UT access time range error: skip time!\n")); - } - } else { - flags &= ~EB_UT_FL_ATIME; - } - } - if (flags & EB_UT_FL_CTIME) { - if ((eb_idx+4) <= eb_len) { - z_utim->ctime = makelong((EB_HEADSIZE+eb_idx) + ef_buf); - TTrace((stderr," UT e.f. creation time = %ld\n", - z_utim->ctime)); - if (((ulg)(z_utim->ctime) & (ulg)(0x80000000L)) && - !ut_zip_unzip_compatible) { - flags &= ~EB_UT_FL_CTIME; - TTrace((stderr, - " UT creation time range error: skip time!\n")); - } - } else { - flags &= ~EB_UT_FL_CTIME; - } - } - } - break; - - case EF_IZUNIX2: - if (!have_new_type_eb) { - flags &= ~0x0ff; /* ignore any previous IZUNIX field */ - have_new_type_eb = TRUE; - } - if (eb_len >= EB_UX2_MINLEN && z_uidgid != NULL) { - z_uidgid[0] = makeword((EB_HEADSIZE+EB_UX2_UID) + ef_buf); - z_uidgid[1] = makeword((EB_HEADSIZE+EB_UX2_GID) + ef_buf); - flags |= EB_UX2_VALID; /* signal success */ - } - break; - - case EF_IZUNIX: - case EF_PKUNIX: /* PKUNIX e.f. layout is identical to IZUNIX */ - if (eb_len >= EB_UX_MINLEN) { - TTrace((stderr,"ef_scan_for_izux: found %s extra field\n", - (eb_id == EF_IZUNIX ? "IZUNIX" : "PKUNIX"))); - if (have_new_type_eb) { - break; /* Ignore IZUNIX extra field block ! */ - } - if (z_utim != NULL) { - z_utim->atime = makelong((EB_HEADSIZE+EB_UX_ATIME)+ef_buf); - z_utim->mtime = makelong((EB_HEADSIZE+EB_UX_MTIME)+ef_buf); - TTrace((stderr," Unix EF actime = %ld\n", z_utim->atime)); - TTrace((stderr," Unix EF modtime = %ld\n", z_utim->mtime)); - flags |= (EB_UT_FL_MTIME | EB_UT_FL_ATIME); - if ((ulg)(z_utim->mtime) & (ulg)(0x80000000L)) { - ut_zip_unzip_compatible = - ((time_t)0x80000000L < (time_t)0L) - ? (dos_mdatetime == DOSTIME_MINIMUM) - : (dos_mdatetime >= DOSTIME_2038_01_18); - if (!ut_zip_unzip_compatible) { - /* UnZip interpretes mtime differently than Zip; - without modtime: ignore complete UT field */ - flags &= ~0x0ff; /* no time_t times available */ - TTrace((stderr, - " UX modtime range error: ignore e.f.!\n")); - } - } else { - /* cannot determine, safe assumption is FALSE */ - ut_zip_unzip_compatible = FALSE; - } - if ((ulg)(z_utim->atime) & (ulg)(0x80000000L) && - !ut_zip_unzip_compatible && (flags & 0x0ff)) { - /* atime not in range of UnZip's time_t */ - flags &= ~EB_UT_FL_ATIME; - TTrace((stderr, - " UX access time range error: skip time!\n")); - } - } - if (eb_len >= EB_UX_FULLSIZE && z_uidgid != NULL) { - z_uidgid[0] = makeword((EB_HEADSIZE+EB_UX_UID) + ef_buf); - z_uidgid[1] = makeword((EB_HEADSIZE+EB_UX_GID) + ef_buf); - flags |= EB_UX2_VALID; - } - } - break; - - default: - break; - } - - /* Skip this extra field block */ - ef_buf += (eb_len + EB_HEADSIZE); - ef_len -= (eb_len + EB_HEADSIZE); - } - - return flags; -} - -#endif /* USE_EF_UT_TIME */ diff --git a/Build/source/libs/unzip/ttyio.c b/Build/source/libs/unzip/ttyio.c deleted file mode 100644 index c755d1c5a37..00000000000 --- a/Build/source/libs/unzip/ttyio.c +++ /dev/null @@ -1,625 +0,0 @@ -/*--------------------------------------------------------------------------- - - ttyio.c - - This file contains routines for doing console input/output, including code - for non-echoing input. It is used by the encryption/decryption code but - does not contain any restricted code itself. This file is shared between - Info-ZIP's Zip and UnZip. - - Contains: echo() (VMS only) - Echon() (Unix only) - Echoff() (Unix only) - screenlines() (Unix only) - zgetch() (Unix and non-Unix versions) - getp() ("PC," Unix/Atari/Be, VMS/VMCMS/MVS) - - ---------------------------------------------------------------------------*/ - -#define __TTYIO_C /* identifies this source module */ - -#include "zip.h" -#include "crypt.h" - -#if (CRYPT || (defined(UNZIP) && !defined(FUNZIP))) -/* Non-echo console/keyboard input is needed for (en/de)cryption's password - * entry, and for UnZip(SFX)'s MORE and Pause features. - * (The corresponding #endif is found at the end of this module.) - */ - -#include "ttyio.h" - -#ifndef PUTC -# define PUTC putc -#endif - -#ifdef ZIP -# ifdef GLOBAL /* used in Amiga system headers, maybe others too */ -# undef GLOBAL -# endif -# define GLOBAL(g) g -#else -# define GLOBAL(g) G.g -#endif - -#ifdef __BEOS__ /* why yes, we do */ -# define HAVE_TERMIOS_H -#endif - -#ifdef _POSIX_VERSION -# ifndef USE_POSIX_TERMIOS -# define USE_POSIX_TERMIOS /* use POSIX style termio (termios) */ -# endif -# ifndef HAVE_TERMIOS_H -# define HAVE_TERMIOS_H /* POSIX termios.h */ -# endif -#endif /* _POSIX_VERSION */ - -#ifdef UNZIP /* Zip handles this with the unix/configure script */ -# ifndef _POSIX_VERSION -# if (defined(SYSV) || defined(CRAY)) && !defined(__MINT__) -# ifndef USE_SYSV_TERMIO -# define USE_SYSV_TERMIO -# endif -# ifdef COHERENT -# ifndef HAVE_TERMIO_H -# define HAVE_TERMIO_H -# endif -# ifdef HAVE_SYS_TERMIO_H -# undef HAVE_SYS_TERMIO_H -# endif -# else /* !COHERENT */ -# ifdef HAVE_TERMIO_H -# undef HAVE_TERMIO_H -# endif -# ifndef HAVE_SYS_TERMIO_H -# define HAVE_SYS_TERMIO_H -# endif -# endif /* ?COHERENT */ -# endif /* (SYSV || CRAY) && !__MINT__ */ -# endif /* !_POSIX_VERSION */ -# if !(defined(BSD4_4) || defined(SYSV) || defined(__convexc__)) -# ifndef NO_FCNTL_H -# define NO_FCNTL_H -# endif -# endif /* !(BSD4_4 || SYSV || __convexc__) */ -#endif /* UNZIP */ - -#ifdef HAVE_TERMIOS_H -# ifndef USE_POSIX_TERMIOS -# define USE_POSIX_TERMIOS -# endif -#endif - -#if (defined(HAVE_TERMIO_H) || defined(HAVE_SYS_TERMIO_H)) -# ifndef USE_SYSV_TERMIO -# define USE_SYSV_TERMIO -# endif -#endif - -#if (defined(UNZIP) && !defined(FUNZIP) && defined(UNIX) && defined(MORE)) -# include -# define GOT_IOCTL_H - /* int ioctl OF((int, int, zvoid *)); GRR: may need for some systems */ -#endif - -#ifndef HAVE_WORKING_GETCH - /* include system support for switching of console echo */ -# ifdef VMS -# include -# include -# include -# include -# include -# else /* !VMS */ -# ifdef HAVE_TERMIOS_H -# include -# define sgttyb termios -# define sg_flags c_lflag -# define GTTY(f, s) tcgetattr(f, (zvoid *) s) -# define STTY(f, s) tcsetattr(f, TCSAFLUSH, (zvoid *) s) -# else /* !HAVE_TERMIOS_H */ -# ifdef USE_SYSV_TERMIO /* Amdahl, Cray, all SysV? */ -# ifdef HAVE_TERMIO_H -# include -# endif -# ifdef HAVE_SYS_TERMIO_H -# include -# endif -# ifdef NEED_PTEM -# include -# include -# endif -# define sgttyb termio -# define sg_flags c_lflag -# define GTTY(f,s) ioctl(f,TCGETA,(zvoid *)s) -# define STTY(f,s) ioctl(f,TCSETAW,(zvoid *)s) -# else /* !USE_SYSV_TERMIO */ -# ifndef CMS_MVS -# if (!defined(MINIX) && !defined(GOT_IOCTL_H)) -# include -# endif -# include -# define GTTY gtty -# define STTY stty -# ifdef UNZIP - /* - * XXX : Are these declarations needed at all ???? - */ - /* - * GRR: let's find out... Hmmm, appears not... - int gtty OF((int, struct sgttyb *)); - int stty OF((int, struct sgttyb *)); - */ -# endif -# endif /* !CMS_MVS */ -# endif /* ?USE_SYSV_TERMIO */ -# endif /* ?HAVE_TERMIOS_H */ -# ifndef NO_FCNTL_H -# ifndef UNZIP -# include -# endif -# else - char *ttyname OF((int)); -# endif -# endif /* ?VMS */ -#endif /* !HAVE_WORKING_GETCH */ - - - -#ifndef HAVE_WORKING_GETCH -#ifdef VMS - -/* - * Turn keyboard echoing on or off (VMS). Loosely based on VMSmunch.c - * and hence on Joe Meadows' file.c code. - */ -int echo(opt) - int opt; -{ - /* - * For VMS v5.x: - * IO$_SENSEMODE/SETMODE info: Programming, Vol. 7A, System Programming, - * I/O User's: Part I, sec. 8.4.1.1, 8.4.3, 8.4.5, 8.6 - * sys$assign(), sys$qio() info: Programming, Vol. 4B, System Services, - * System Services Reference Manual, pp. sys-23, sys-379 - * fixed-length descriptor info: Programming, Vol. 3, System Services, - * Intro to System Routines, sec. 2.9.2 - * Greg Roelofs, 15 Aug 91 - */ - - /* SKM: make global? */ - static struct dsc$descriptor_s DevDesc = - {11, DSC$K_DTYPE_T, DSC$K_CLASS_S, "SYS$COMMAND"}; - /* {dsc$w_length, dsc$b_dtype, dsc$b_class, dsc$a_pointer}; */ - static short DevChan, iosb[4]; - static long status; - static unsigned long oldmode[2], newmode[2]; /* each = 8 bytes */ - - - /* assign a channel to standard input */ - status = sys$assign(&DevDesc, &DevChan, 0, 0); - if (!(status & 1)) - return status; - - /* use sys$qio and the IO$_SENSEMODE function to determine the current - * tty status (for password reading, could use IO$_READVBLK function - * instead, but echo on/off will be more general) - */ - status = sys$qiow(0, DevChan, IO$_SENSEMODE, &iosb, 0, 0, - oldmode, 8, 0, 0, 0, 0); - if (!(status & 1)) - return status; - status = iosb[0]; - if (!(status & 1)) - return status; - - /* copy old mode into new-mode buffer, then modify to be either NOECHO or - * ECHO (depending on function argument opt) - */ - newmode[0] = oldmode[0]; - newmode[1] = oldmode[1]; - if (opt == 0) /* off */ - newmode[1] |= TT$M_NOECHO; /* set NOECHO bit */ - else - newmode[1] &= ~((unsigned long) TT$M_NOECHO); /* clear NOECHO bit */ - - /* use the IO$_SETMODE function to change the tty status */ - status = sys$qiow(0, DevChan, IO$_SETMODE, &iosb, 0, 0, - newmode, 8, 0, 0, 0, 0); - if (!(status & 1)) - return status; - status = iosb[0]; - if (!(status & 1)) - return status; - - /* deassign the sys$input channel by way of clean-up */ - status = sys$dassgn(DevChan); - if (!(status & 1)) - return status; - - return SS$_NORMAL; /* we be happy */ - -} /* end function echo() */ - - -#else /* !VMS: basically Unix */ - - -/* For VM/CMS and MVS, non-echo terminal input is not (yet?) supported. */ -#ifndef CMS_MVS - -#ifdef ZIP /* moved to globals.h for UnZip */ - static int echofd=(-1); /* file descriptor whose echo is off */ -#endif - -/* - * Turn echo off for file descriptor f. Assumes that f is a tty device. - */ -void Echoff(__G__ f) - __GDEF - int f; /* file descriptor for which to turn echo off */ -{ - struct sgttyb sg; /* tty device structure */ - - GLOBAL(echofd) = f; - GTTY(f, &sg); /* get settings */ - sg.sg_flags &= ~ECHO; /* turn echo off */ - STTY(f, &sg); -} - -/* - * Turn echo back on for file descriptor echofd. - */ -void Echon(__G) - __GDEF -{ - struct sgttyb sg; /* tty device structure */ - - if (GLOBAL(echofd) != -1) { - GTTY(GLOBAL(echofd), &sg); /* get settings */ - sg.sg_flags |= ECHO; /* turn echo on */ - STTY(GLOBAL(echofd), &sg); - GLOBAL(echofd) = -1; - } -} - -#endif /* !CMS_MVS */ -#endif /* ?VMS */ - - -#if (defined(UNZIP) && !defined(FUNZIP)) - -#if (defined(UNIX) || defined(__BEOS__)) -#ifdef MORE - -/* - * Get the number of lines on the output terminal. SCO Unix apparently - * defines TIOCGWINSZ but doesn't support it (!M_UNIX). - * - * GRR: will need to know width of terminal someday, too, to account for - * line-wrapping. - */ - -#if (defined(TIOCGWINSZ) && !defined(M_UNIX)) - -int screenlines() -{ - struct winsize wsz; -#ifdef DEBUG_WINSZ - static int firsttime = TRUE; -#endif - - /* see termio(4) under, e.g., SunOS */ - if (ioctl(1, TIOCGWINSZ, &wsz) == 0) { -#ifdef DEBUG_WINSZ - if (firsttime) { - firsttime = FALSE; - fprintf(stderr, "ttyio.c screenlines(): ws_row = %d\n", - wsz.ws_row); - } -#endif - /* number of columns = ws_col */ - return (wsz.ws_row > 0)? wsz.ws_row : 24; /* number of rows */ - - } else { /* this happens when piping to more(1), for example */ -#ifdef DEBUG_WINSZ - if (firsttime) { - firsttime = FALSE; - fprintf(stderr, - "ttyio.c screenlines(): ioctl(TIOCGWINSZ) failed\n")); - } -#endif - return 24; /* VT-100 assumed to be minimal hardware */ - } -} - -#else /* !TIOCGWINSZ: service not available, fall back to semi-bogus method */ - -int screenlines() -{ - char *envptr, *getenv(); - int n; - - /* GRR: this is overly simplistic, but don't have access to stty/gtty - * system anymore - */ - envptr = getenv("LINES"); - if (envptr == (char *)NULL || (n = atoi(envptr)) < 5) - return 24; /* VT-100 assumed to be minimal hardware */ - else - return n; -} - -#endif /* ?(TIOCGWINSZ && !M_UNIX) */ -#endif /* MORE */ - - -/* - * Get a character from the given file descriptor without echo or newline. - */ -int zgetch(__G__ f) - __GDEF - int f; /* file descriptor from which to read */ -{ -#if (defined(USE_SYSV_TERMIO) || defined(USE_POSIX_TERMIOS)) - char oldmin, oldtim; -#endif - char c; - struct sgttyb sg; /* tty device structure */ - - GTTY(f, &sg); /* get settings */ -#if (defined(USE_SYSV_TERMIO) || defined(USE_POSIX_TERMIOS)) - oldmin = sg.c_cc[VMIN]; /* save old values */ - oldtim = sg.c_cc[VTIME]; - sg.c_cc[VMIN] = 1; /* need only one char to return read() */ - sg.c_cc[VTIME] = 0; /* no timeout */ - sg.sg_flags &= ~ICANON; /* canonical mode off */ -#else - sg.sg_flags |= CBREAK; /* cbreak mode on */ -#endif - sg.sg_flags &= ~ECHO; /* turn echo off, too */ - STTY(f, &sg); /* set cbreak mode */ - GLOBAL(echofd) = f; /* in case ^C hit (not perfect: still CBREAK) */ - - read(f, &c, 1); /* read our character */ - -#if (defined(USE_SYSV_TERMIO) || defined(USE_POSIX_TERMIOS)) - sg.c_cc[VMIN] = oldmin; /* restore old values */ - sg.c_cc[VTIME] = oldtim; - sg.sg_flags |= ICANON; /* canonical mode on */ -#else - sg.sg_flags &= ~CBREAK; /* cbreak mode off */ -#endif - sg.sg_flags |= ECHO; /* turn echo on */ - STTY(f, &sg); /* restore canonical mode */ - GLOBAL(echofd) = -1; - - return (int)c; -} - - -#else /* !UNIX && !__BEOS__ */ - - -int zgetch(__G__ f) - __GDEF - int f; /* file descriptor from which to read (must be open already) */ -{ - char c, c2; - -/*--------------------------------------------------------------------------- - Get a character from the given file descriptor without echo; can't fake - CBREAK mode (i.e., newline required), but can get rid of all chars up to - and including newline. - ---------------------------------------------------------------------------*/ - - echoff(f); - read(f, &c, 1); - if (c != '\n') - do { - read(f, &c2, 1); /* throw away all other chars up thru newline */ - } while (c2 != '\n'); - echon(); - return (int)c; -} - -#endif /* ?(UNIX || __BEOS__) */ - -#endif /* UNZIP && !FUNZIP */ -#endif /* !HAVE_WORKING_GETCH */ - - -#if CRYPT /* getp() is only used with full encryption */ - -/* - * Simple compile-time check for source compatibility between - * zcrypt and ttyio: - */ -#if (!defined(CR_MAJORVER) || (CR_MAJORVER < 2) || (CR_MINORVER < 7)) - error: This Info-ZIP tool requires zcrypt 2.7 or later. -#endif - -/* - * Get a password of length n-1 or less into *p using the prompt *m. - * The entered password is not echoed. - */ - -#ifdef HAVE_WORKING_GETCH -/* - * For the AMIGA, getch() is defined as Agetch(), which is in - * amiga/filedate.c; SAS/C 6.x provides a getch(), but since Agetch() - * uses the infrastructure that is already in place in filedate.c, it is - * smaller. With this function, echoff() and echon() are not needed. - * - * For the MAC, a non-echo macgetch() function is defined in the MacOS - * specific sources which uses the event handling mechanism of the - * desktop window manager to get a character from the keyboard. - * - * For the other systems in this section, a non-echo getch() function - * is either contained the C runtime library (conio package), or getch() - * is defined as an alias for a similar system specific RTL function. - */ - -#ifndef WINDLL /* WINDLL does not support a console interface */ -#ifndef QDOS /* QDOS supplies a variant of this function */ - -/* This is the getp() function for all systems (with TTY type user interface) - * that supply a working `non-echo' getch() function for "raw" console input. - */ -char *getp(__G__ m, p, n) - __GDEF - ZCONST char *m; /* prompt for password */ - char *p; /* return value: line input */ - int n; /* bytes available in p[] */ -{ - char c; /* one-byte buffer for read() to use */ - int i; /* number of characters input */ - char *w; /* warning on retry */ - - /* get password */ - w = ""; - do { - fputs(w, stderr); /* warning if back again */ - fputs(m, stderr); /* display prompt and flush */ - fflush(stderr); - i = 0; - do { /* read line, keeping first n characters */ - if ((c = (char)getch()) == '\r') - c = '\n'; /* until user hits CR */ - if (c == 8 || c == 127) { - if (i > 0) i--; /* the `backspace' and `del' keys works */ - } - else if (i < n) - p[i++] = c; /* truncate past n */ - } while (c != '\n'); - PUTC('\n', stderr); fflush(stderr); - w = "(line too long--try again)\n"; - } while (p[i-1] != '\n'); - p[i-1] = 0; /* terminate at newline */ - - return p; /* return pointer to password */ - -} /* end function getp() */ - -#endif /* !QDOS */ -#endif /* !WINDLL */ - - -#else /* !HAVE_WORKING_GETCH */ - - -#if (defined(UNIX) || defined(__MINT__) || defined(__BEOS__)) - -#ifndef _PATH_TTY -# ifdef __MINT__ -# define _PATH_TTY ttyname(2) -# else -# define _PATH_TTY "/dev/tty" -# endif -#endif - -char *getp(__G__ m, p, n) - __GDEF - ZCONST char *m; /* prompt for password */ - char *p; /* return value: line input */ - int n; /* bytes available in p[] */ -{ - char c; /* one-byte buffer for read() to use */ - int i; /* number of characters input */ - char *w; /* warning on retry */ - int f; /* file descriptor for tty device */ - -#ifdef PASSWD_FROM_STDIN - /* Read from stdin. This is unsafe if the password is stored on disk. */ - f = 0; -#else - /* turn off echo on tty */ - - if ((f = open(_PATH_TTY, 0)) == -1) - return NULL; -#endif - /* get password */ - w = ""; - do { - fputs(w, stderr); /* warning if back again */ - fputs(m, stderr); /* prompt */ - fflush(stderr); - i = 0; - echoff(f); - do { /* read line, keeping n */ - read(f, &c, 1); - if (i < n) - p[i++] = c; - } while (c != '\n'); - echon(); - PUTC('\n', stderr); fflush(stderr); - w = "(line too long--try again)\n"; - } while (p[i-1] != '\n'); - p[i-1] = 0; /* terminate at newline */ - -#ifndef PASSWD_FROM_STDIN - close(f); -#endif - - return p; /* return pointer to password */ - -} /* end function getp() */ - -#endif /* UNIX || __MINT__ || __BEOS__ */ - - - -#if (defined(VMS) || defined(CMS_MVS)) - -char *getp(__G__ m, p, n) - __GDEF - ZCONST char *m; /* prompt for password */ - char *p; /* return value: line input */ - int n; /* bytes available in p[] */ -{ - char c; /* one-byte buffer for read() to use */ - int i; /* number of characters input */ - char *w; /* warning on retry */ - FILE *f; /* file structure for SYS$COMMAND device */ - -#ifdef PASSWD_FROM_STDIN - f = stdin; -#else - if ((f = fopen(ctermid(NULL), "r")) == NULL) - return NULL; -#endif - - /* get password */ - fflush(stdout); - w = ""; - do { - if (*w) /* bug: VMS apparently adds \n to NULL fputs */ - fputs(w, stderr); /* warning if back again */ - fputs(m, stderr); /* prompt */ - fflush(stderr); - i = 0; - echoff(f); - do { /* read line, keeping n */ - if ((c = (char)getc(f)) == '\r') - c = '\n'; - if (i < n) - p[i++] = c; - } while (c != '\n'); - echon(); - PUTC('\n', stderr); fflush(stderr); - w = "(line too long--try again)\n"; - } while (p[i-1] != '\n'); - p[i-1] = 0; /* terminate at newline */ -#ifndef PASSWD_FROM_STDIN - fclose(f); -#endif - - return p; /* return pointer to password */ - -} /* end function getp() */ - -#endif /* VMS || CMS_MVS */ -#endif /* ?HAVE_WORKING_GETCH */ -#endif /* CRYPT */ -#endif /* CRYPT || (UNZIP && !FUNZIP) */ diff --git a/Build/source/libs/unzip/ttyio.h b/Build/source/libs/unzip/ttyio.h deleted file mode 100644 index 685e7ace66b..00000000000 --- a/Build/source/libs/unzip/ttyio.h +++ /dev/null @@ -1,186 +0,0 @@ -/* - ttyio.h - */ - -#ifndef __ttyio_h /* don't include more than once */ -#define __ttyio_h - -#ifndef __crypt_h -# include "crypt.h" /* ensure that encryption header file has been seen */ -#endif - -#if (CRYPT || (defined(UNZIP) && !defined(FUNZIP))) -/* - * Non-echo keyboard/console input support is needed and enabled. - */ - -#ifndef __G /* UnZip only, for now (DLL stuff) */ -# define __G -# define __G__ -# define __GDEF -# define __GPRO void -# define __GPRO__ -#endif - -#ifndef ZCONST /* UnZip only (until have configure script like Zip) */ -# define ZCONST const -#endif - -#if (defined(MSDOS) || defined(OS2) || defined(WIN32)) -# ifndef DOS_OS2_W32 -# define DOS_OS2_W32 -# endif -#endif - -#if (defined(DOS_OS2_W32) || defined(__human68k__)) -# ifndef DOS_H68_OS2_W32 -# define DOS_H68_OS2_W32 -# endif -#endif - -#if (defined(DOS_OS2_W32) || defined(FLEXOS)) -# ifndef DOS_FLX_OS2_W32 -# define DOS_FLX_OS2_W32 -# endif -#endif - -#if (defined(DOS_H68_OS2_W32) || defined(FLEXOS)) -# ifndef DOS_FLX_H68_OS2_W32 -# define DOS_FLX_H68_OS2_W32 -# endif -#endif - -#if (defined(VM_CMS) || defined(MVS)) -# ifndef CMS_MVS -# define CMS_MVS -# endif -#endif - - -/* Function prototypes */ - -/* The following systems supply a `non-echo' character input function "getch()" - * (or an alias) and do not need the echoff() / echon() function pair. - */ -#ifdef AMIGA -# define echoff(f) -# define echon() -# define getch() Agetch() -# define HAVE_WORKING_GETCH -#endif /* AMIGA */ - -#ifdef ATARI -# define echoff(f) -# define echon() -# include -# define getch() (Cnecin() & 0x000000ff) -# define HAVE_WORKING_GETCH -#endif - -#ifdef MACOS -# define echoff(f) -# define echon() -# define getch() macgetch() -# define HAVE_WORKING_GETCH -#endif - -#ifdef QDOS -# define echoff(f) -# define echon() -# define HAVE_WORKING_GETCH -#endif - -#ifdef RISCOS -# define echoff(f) -# define echon() -# define getch() SWI_OS_ReadC() -# define HAVE_WORKING_GETCH -#endif - -#ifdef DOS_H68_OS2_W32 -# define echoff(f) -# define echon() -# ifdef WIN32 -# ifndef getch -# define getch() getch_win32() -# endif -# else /* !WIN32 */ -# ifdef __EMX__ -# ifndef getch -# define getch() _read_kbd(0, 1, 0) -# endif -# else /* !__EMX__ */ -# ifdef __GO32__ -# include -# define getch() getkey() -# else /* !__GO32__ */ -# include -# endif /* ?__GO32__ */ -# endif /* ?__EMX__ */ -# endif /* ?WIN32 */ -# define HAVE_WORKING_GETCH -#endif /* DOS_H68_OS2_W32 */ - -#ifdef FLEXOS -# define echoff(f) -# define echon() -# define getch() getchar() /* not correct, but may not be on a console */ -# define HAVE_WORKING_GETCH -#endif - -/* For VM/CMS and MVS, we do not (yet) have any support to switch terminal - * input echo on and off. The following "fake" definitions allow inclusion - * of crypt support and UnZip's "pause prompting" features, but without - * any echo suppression. - */ -#ifdef CMS_MVS -# define echoff(f) -# define echon() -#endif - -/* VMS has a single echo() function in ttyio.c to toggle terminal - * input echo on and off. - */ -#ifdef VMS -# define echoff(f) echo(0) -# define echon() echo(1) - int echo OF((int)); -#endif - -/* For all other systems, ttyio.c supplies the two functions Echoff() and - * Echon() for suppressing and (re)enabling console input echo. - */ -#ifndef echoff -# define echoff(f) Echoff(__G__ f) -# define echon() Echon(__G) - void Echoff OF((__GPRO__ int f)); - void Echon OF((__GPRO)); -#endif - -/* this stuff is used by MORE and also now by the ctrl-S code; fileio.c only */ -#if (defined(UNZIP) && !defined(FUNZIP)) -# ifdef HAVE_WORKING_GETCH -# define FGETCH(f) getch() -# endif -# ifndef FGETCH - /* default for all systems where no getch()-like function is available */ - int zgetch OF((__GPRO__ int f)); -# define FGETCH(f) zgetch(__G__ f) -# endif -#endif /* UNZIP && !FUNZIP */ - -#if (CRYPT && !defined(WINDLL)) - char *getp OF((__GPRO__ ZCONST char *m, char *p, int n)); -#endif - -#else /* !(CRYPT || (UNZIP && !FUNZIP)) */ - -/* - * No need for non-echo keyboard/console input; provide dummy definitions. - */ -#define echoff(f) -#define echon() - -#endif /* ?(CRYPT || (UNZIP && !FUNZIP)) */ - -#endif /* !__ttyio_h */ diff --git a/Build/source/libs/unzip/unreduce.c b/Build/source/libs/unzip/unreduce.c deleted file mode 100644 index 4cfb3fec6f5..00000000000 --- a/Build/source/libs/unzip/unreduce.c +++ /dev/null @@ -1,230 +0,0 @@ -/*--------------------------------------------------------------------------- - - unreduce.c - - The Reducing algorithm is actually a combination of two distinct algorithms. - The first algorithm compresses repeated byte sequences, and the second al- - gorithm takes the compressed stream from the first algorithm and applies a - probabilistic compression method. - - * Copyright 1989 Samuel H. Smith; All rights reserved - * - * Do not distribute modified versions without my permission. - * Do not remove or alter this notice or any other copyright notice. - * If you use this in your own program you must distribute source code. - * Do not use any of this in a commercial product. - - See the accompanying file "COPYING" in UnZip source and binary distributions - for further information. This code is NOT used unless USE_SMITH_CODE is - explicitly defined (==> COPYRIGHT_CLEAN is not defined). - - ---------------------------------------------------------------------------*/ - - -#define UNZIP_INTERNAL -#include "unzip.h" /* defines COPYRIGHT_CLEAN by default */ - - -#ifndef COPYRIGHT_CLEAN - -/**************************************/ -/* UnReduce Defines, Typedefs, etc. */ -/**************************************/ - -#define DLE 144 - -typedef uch f_array[64]; /* for followers[256][64] */ - - - -/******************************/ -/* UnReduce Local Functions */ -/******************************/ - -static void LoadFollowers OF((__GPRO__ f_array *followers, uch *Slen)); - - - -/*******************************/ -/* UnReduce Global Constants */ -/*******************************/ - -static ZCONST shrint L_table[] = -{0, 0x7f, 0x3f, 0x1f, 0x0f}; - -static ZCONST shrint D_shift[] = -{0, 0x07, 0x06, 0x05, 0x04}; -static ZCONST shrint D_mask[] = -{0, 0x01, 0x03, 0x07, 0x0f}; - -static ZCONST shrint B_table[] = -{8, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8}; - - - - - -/*************************/ -/* Function unreduce() */ -/*************************/ - -void unreduce(__G) /* expand probabilistically reduced data */ - __GDEF -{ - register int lchar = 0; - shrint nchar; - shrint ExState = 0; - shrint V = 0; - shrint Len = 0; - long s = G.ucsize; /* number of bytes left to decompress */ - unsigned w = 0; /* position in output window slide[] */ - unsigned u = 1; /* true if slide[] unflushed */ - uch Slen[256]; - - f_array *followers = (f_array *)(slide + 0x4000); - int factor = G.lrec.compression_method - 1; - - LoadFollowers(__G__ followers, Slen); - - while (s > 0 /* && (!zipeof) */) { - if (Slen[lchar] == 0) - READBITS(8, nchar) /* ; */ - else { - READBITS(1, nchar) /* ; */ - if (nchar != 0) - READBITS(8, nchar) /* ; */ - else { - shrint follower; - int bitsneeded = B_table[Slen[lchar]]; - - READBITS(bitsneeded, follower) /* ; */ - nchar = followers[lchar][follower]; - } - } - /* expand the resulting byte */ - switch (ExState) { - - case 0: - if (nchar != DLE) { - s--; - slide[w++] = (uch)nchar; - if (w == 0x4000) { - flush(__G__ slide, (ulg)w, 0); - w = u = 0; - } - } - else - ExState = 1; - break; - - case 1: - if (nchar != 0) { - V = nchar; - Len = V & L_table[factor]; - if (Len == L_table[factor]) - ExState = 2; - else - ExState = 3; - } else { - s--; - slide[w++] = DLE; - if (w == 0x4000) - { - flush(__G__ slide, (ulg)w, 0); - w = u = 0; - } - ExState = 0; - } - break; - - case 2:{ - Len += nchar; - ExState = 3; - } - break; - - case 3:{ - register unsigned e; - register unsigned n = Len + 3; - register unsigned d = w - ((((V >> D_shift[factor]) & - D_mask[factor]) << 8) + nchar + 1); - - s -= n; - do { - n -= (e = (e = 0x4000 - ((d &= 0x3fff) > w ? d : w)) > n ? - n : e); - if (u && w <= d) - { - memzero(slide + w, e); - w += e; - d += e; - } - else - if (w - d < e) /* (assume unsigned comparison) */ - do { /* slow to avoid memcpy() overlap */ - slide[w++] = slide[d++]; - } while (--e); - else - { - memcpy(slide + w, slide + d, e); - w += e; - d += e; - } - if (w == 0x4000) - { - flush(__G__ slide, (ulg)w, 0); - w = u = 0; - } - } while (n); - - ExState = 0; - } - break; - } - - /* store character for next iteration */ - lchar = nchar; - } - - /* flush out slide */ - flush(__G__ slide, (ulg)w, 0); -} - - - - - -/******************************/ -/* Function LoadFollowers() */ -/******************************/ - -static void LoadFollowers(__G__ followers, Slen) - __GDEF - f_array *followers; - uch *Slen; -{ - register int x; - register int i; - - for (x = 255; x >= 0; x--) { - READBITS(6, Slen[x]) /* ; */ - for (i = 0; (uch)i < Slen[x]; i++) - READBITS(8, followers[x][i]) /* ; */ - } -} - -#endif /* !COPYRIGHT_CLEAN */ diff --git a/Build/source/libs/unzip/unshrink.c b/Build/source/libs/unzip/unshrink.c deleted file mode 100644 index 2b7e6f027f0..00000000000 --- a/Build/source/libs/unzip/unshrink.c +++ /dev/null @@ -1,301 +0,0 @@ -/*--------------------------------------------------------------------------- - - unshrink.c version 1.21 23 Nov 95 - - - NOTE: This code may or may not infringe on the so-called "Welch - patent" owned by Unisys. (From reading the patent, it appears - that a pure LZW decompressor is *not* covered, but this claim has - not been tested in court, and Unisys is reported to believe other- - wise.) It is therefore the responsibility of the user to acquire - whatever license(s) may be required for legal use of this code. - - THE INFO-ZIP GROUP DISCLAIMS ALL LIABILITY FOR USE OF THIS CODE - IN VIOLATION OF APPLICABLE PATENT LAW. - - - Shrinking is basically a dynamic LZW algorithm with allowed code sizes of - up to 13 bits; in addition, there is provision for partial clearing of - leaf nodes. PKWARE uses the special code 256 (decimal) to indicate a - change in code size or a partial clear of the code tree: 256,1 for the - former and 256,2 for the latter. [Note that partial clearing can "orphan" - nodes: the parent-to-be can be cleared before its new child is added, - but the child is added anyway (as an orphan, as though the parent still - existed). When the tree fills up to the point where the parent node is - reused, the orphan is effectively "adopted." Versions prior to 1.05 were - affected more due to greater use of pointers (to children and siblings - as well as parents).] - - This replacement version of unshrink.c was written from scratch. It is - based only on the algorithms described in Mark Nelson's _The Data Compres- - sion Book_ and in Terry Welch's original paper in the June 1984 issue of - IEEE _Computer_; no existing source code, including any in Nelson's book, - was used. - - Memory requirements have been reduced in this version and are now no more - than the original Sam Smith code. This is still larger than any of the - other algorithms: at a minimum, 8K+8K+16K (stack+values+parents) assuming - 16-bit short ints, and this does not even include the output buffer (the - other algorithms leave the uncompressed data in the work area, typically - called slide[]). For machines with a 64KB data space this is a problem, - particularly when text conversion is required and line endings have more - than one character. UnZip's solution is to use two roughly equal halves - of outbuf for the ASCII conversion in such a case; the "unshrink" argument - to flush() signals that this is the case. - - For large-memory machines, a second outbuf is allocated for translations, - but only if unshrinking and only if translations are required. - - | binary mode | text mode - --------------------------------------------------- - big mem | big outbuf | big outbuf + big outbuf2 <- malloc'd here - small mem | small outbuf | half + half small outbuf - - Copyright 1994, 1995 Greg Roelofs. See the accompanying file "COPYING" - in UnZip 5.20 (or later) source or binary distributions. - - ---------------------------------------------------------------------------*/ - - -#define UNZIP_INTERNAL -#include "unzip.h" /* defines LZW_CLEAN by default */ - - -#ifndef LZW_CLEAN - -static void partial_clear OF((__GPRO)); - -#ifdef DEBUG -# define OUTDBG(c) \ - if ((c)<32 || (c)>=127) fprintf(stderr,"\\x%02x",(c)); else putc((c),stderr); -#else -# define OUTDBG(c) -#endif - -/* HSIZE is defined as 2^13 (8192) in unzip.h */ -#define BOGUSCODE 256 -#define FLAG_BITS parent /* upper bits of parent[] used as flag bits */ -#define CODE_MASK (HSIZE - 1) /* 0x1fff (lower bits are parent's index) */ -#define FREE_CODE HSIZE /* 0x2000 (code is unused or was cleared) */ -#define HAS_CHILD (HSIZE << 1) /* 0x4000 (code has a child--do not clear) */ - -#define parent G.area.shrink.Parent -#define Value G.area.shrink.value /* "value" conflicts with Pyramid ioctl.h */ -#define stack G.area.shrink.Stack - - -/***********************/ -/* Function unshrink() */ -/***********************/ - -int unshrink(__G) - __GDEF -{ - int offset = (HSIZE - 1); - uch *stacktop = stack + offset; - register uch *newstr; - int codesize=9, len, KwKwK, error; - shrint code, oldcode, freecode, curcode; - shrint lastfreecode; - unsigned int outbufsiz; -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) - /* Normally realbuf and outbuf will be the same. However, if the data - * are redirected to a large memory buffer, realbuf will point to the - * new location while outbuf will remain pointing to the malloc'd - * memory buffer. */ - uch *realbuf = G.outbuf; -#else -# define realbuf G.outbuf -#endif - - -/*--------------------------------------------------------------------------- - Initialize various variables. - ---------------------------------------------------------------------------*/ - - lastfreecode = BOGUSCODE; - -#ifndef VMS /* VMS uses its own buffer scheme for textmode flush(). */ -#ifndef SMALL_MEM - /* non-memory-limited machines: allocate second (large) buffer for - * textmode conversion in flush(), but only if needed */ - if (G.pInfo->textmode && !G.outbuf2 && - (G.outbuf2 = (uch *)malloc(TRANSBUFSIZ)) == (uch *)NULL) - return PK_MEM3; -#endif -#endif /* !VMS */ - - for (code = 0; code < BOGUSCODE; ++code) { - Value[code] = (uch)code; - parent[code] = BOGUSCODE; - } - for (code = BOGUSCODE+1; code < HSIZE; ++code) - parent[code] = FREE_CODE; - -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) - if (G.redirect_slide) { /* use normal outbuf unless we're a DLL routine */ - realbuf = G.redirect_buffer; - outbufsiz = G.redirect_size; - } else -#endif -#ifdef DLL - if (G.pInfo->textmode && !G.redirect_data) -#else - if (G.pInfo->textmode) -#endif - outbufsiz = RAWBUFSIZ; - else - outbufsiz = OUTBUFSIZ; - G.outptr = realbuf; - G.outcnt = 0L; - -/*--------------------------------------------------------------------------- - Get and output first code, then loop over remaining ones. - ---------------------------------------------------------------------------*/ - - READBITS(codesize, oldcode) - if (!G.zipeof) { - *G.outptr++ = (uch)oldcode; - OUTDBG((uch)oldcode) - ++G.outcnt; - } - - do { - READBITS(codesize, code) - if (G.zipeof) - break; - if (code == BOGUSCODE) { /* possible to have consecutive escapes? */ - READBITS(codesize, code) - if (code == 1) { - ++codesize; - Trace((stderr, " (codesize now %d bits)\n", codesize)); - } else if (code == 2) { - Trace((stderr, " (partial clear code)\n")); - partial_clear(__G); /* clear leafs (nodes with no children) */ - Trace((stderr, " (done with partial clear)\n")); - lastfreecode = BOGUSCODE; /* reset start of free-node search */ - } - continue; - } - - /*----------------------------------------------------------------------- - Translate code: traverse tree from leaf back to root. - -----------------------------------------------------------------------*/ - - newstr = stacktop; - curcode = code; - - if (parent[curcode] == FREE_CODE) { - /* or (FLAG_BITS[curcode] & FREE_CODE)? */ - KwKwK = TRUE; - Trace((stderr, " (found a KwKwK code %d; oldcode = %d)\n", code, - oldcode)); - --newstr; /* last character will be same as first character */ - curcode = oldcode; - } else - KwKwK = FALSE; - - do { - *newstr-- = Value[curcode]; - curcode = (shrint)(parent[curcode] & CODE_MASK); - } while (curcode != BOGUSCODE); - - len = (int)(stacktop - newstr++); - if (KwKwK) - *stacktop = *newstr; - - /*----------------------------------------------------------------------- - Write expanded string in reverse order to output buffer. - -----------------------------------------------------------------------*/ - - Trace((stderr, "code %4d; oldcode %4d; char %3d (%c); string [", code, - oldcode, (int)(*newstr), (*newstr<32 || *newstr>=127)? ' ':*newstr)); - - { - register uch *p; - - for (p = newstr; p < newstr+len; ++p) { - *G.outptr++ = *p; - OUTDBG(*p) - if (++G.outcnt == outbufsiz) { - Trace((stderr, "doing flush(), outcnt = %lu\n", G.outcnt)); - if ((error = flush(__G__ realbuf, G.outcnt, TRUE)) != 0) - fprintf(stderr, "unshrink: flush() error (%d)\n", - error); - Trace((stderr, "done with flush()\n")); - G.outptr = realbuf; - G.outcnt = 0L; - } - } - } - - /*----------------------------------------------------------------------- - Add new leaf (first character of newstr) to tree as child of oldcode. - -----------------------------------------------------------------------*/ - - /* search for freecode */ - freecode = (shrint)(lastfreecode + 1); - /* add if-test before loop for speed? */ - while (parent[freecode] != FREE_CODE) - ++freecode; - lastfreecode = freecode; - Trace((stderr, "]; newcode %d\n", freecode)); - - Value[freecode] = *newstr; - parent[freecode] = oldcode; - oldcode = code; - - } while (!G.zipeof); - -/*--------------------------------------------------------------------------- - Flush any remaining data and return to sender... - ---------------------------------------------------------------------------*/ - - if (G.outcnt > 0L) { - Trace((stderr, "doing final flush(), outcnt = %lu\n", G.outcnt)); - if ((error = flush(__G__ realbuf, G.outcnt, TRUE)) != 0) - fprintf(stderr, "unshrink: flush() error (%d)\n", error); - Trace((stderr, "done with flush()\n")); - } - - return PK_OK; - -} /* end function unshrink() */ - - - - - -/****************************/ -/* Function partial_clear() */ /* no longer recursive... */ -/****************************/ - -static void partial_clear(__G) - __GDEF -{ - register shrint code; - - /* clear all nodes which have no children (i.e., leaf nodes only) */ - - /* first loop: mark each parent as such */ - for (code = BOGUSCODE+1; code < HSIZE; ++code) { - register shrint cparent = (shrint)(parent[code] & CODE_MASK); - - if (cparent > BOGUSCODE && cparent != FREE_CODE) - FLAG_BITS[cparent] |= HAS_CHILD; /* set parent's child-bit */ - } - - /* second loop: clear all nodes *not* marked as parents; reset flag bits */ - for (code = BOGUSCODE+1; code < HSIZE; ++code) { - if (FLAG_BITS[code] & HAS_CHILD) /* just clear child-bit */ - FLAG_BITS[code] &= ~HAS_CHILD; - else { /* leaf: lose it */ - Trace((stderr, "%d\n", code)); - parent[code] = FREE_CODE; - } - } - - return; -} - -#endif /* !LZW_CLEAN */ diff --git a/Build/source/libs/unzip/unzip.dep b/Build/source/libs/unzip/unzip.dep deleted file mode 100644 index bd73bc2bbbd..00000000000 --- a/Build/source/libs/unzip/unzip.dep +++ /dev/null @@ -1,191 +0,0 @@ -# Microsoft Developer Studio Generated Dependency File, included by unzip.mak - -.\api.c : \ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\version.h"\ - ".\win32\w32cfg.h"\ - ".\windll\decs.h"\ - ".\windll\structs.h"\ - ".\windll\windll.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\crc32.c : \ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\w32cfg.h"\ - ".\windll\structs.h"\ - ".\zip.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\crctab.c : \ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\w32cfg.h"\ - ".\windll\structs.h"\ - ".\zip.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\explode.c : \ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\w32cfg.h"\ - ".\windll\structs.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\extract.c : \ - ".\crypt.h"\ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\w32cfg.h"\ - ".\windll\decs.h"\ - ".\windll\structs.h"\ - ".\windll\windll.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\fileio.c : \ - ".\crypt.h"\ - ".\ebcdic.h"\ - ".\globals.h"\ - ".\ttyio.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\w32cfg.h"\ - ".\windll\decs.h"\ - ".\windll\structs.h"\ - ".\windll\windll.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\globals.c : \ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\w32cfg.h"\ - ".\windll\structs.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\inflate.c : \ - ".\globals.h"\ - ".\inflate.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\w32cfg.h"\ - ".\windll\structs.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\list.c : \ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\w32cfg.h"\ - ".\windll\decs.h"\ - ".\windll\structs.h"\ - ".\windll\windll.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\match.c : \ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\w32cfg.h"\ - ".\windll\structs.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\win32\nt.c : \ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\nt.h"\ - ".\win32\w32cfg.h"\ - ".\windll\structs.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\process.c : \ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\w32cfg.h"\ - ".\windll\decs.h"\ - ".\windll\structs.h"\ - ".\windll\windll.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\ttyio.c : \ - ".\crypt.h"\ - ".\globals.h"\ - ".\ttyio.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\w32cfg.h"\ - ".\windll\structs.h"\ - ".\zip.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\unreduce.c : \ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\w32cfg.h"\ - ".\windll\structs.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\unshrink.c : \ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\w32cfg.h"\ - ".\windll\structs.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\win32\win32.c : \ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\nt.h"\ - ".\win32\w32cfg.h"\ - ".\windll\structs.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\windll\windll.c : \ - ".\consts.h"\ - ".\crypt.h"\ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\version.h"\ - ".\win32\w32cfg.h"\ - ".\windll\decs.h"\ - ".\windll\structs.h"\ - ".\windll\windll.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - - -.\zipinfo.c : \ - ".\globals.h"\ - ".\unzip.h"\ - ".\unzpriv.h"\ - ".\win32\w32cfg.h"\ - ".\windll\structs.h"\ - "c:\program files\microsoft visual studio\vc98\include\basetsd.h"\ - diff --git a/Build/source/libs/unzip/unzip.dsp b/Build/source/libs/unzip/unzip.dsp deleted file mode 100644 index 51a1f2edbe1..00000000000 --- a/Build/source/libs/unzip/unzip.dsp +++ /dev/null @@ -1,258 +0,0 @@ -# Microsoft Developer Studio Project File - Name="unzip" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=unzip - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "unzip.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "unzip.mak" CFG="unzip - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "unzip - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "unzip - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "unzip - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "./" /I "../" /I "../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /FD /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x40c /d "NDEBUG" -# ADD RSC /l 0x40c /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ELSEIF "$(CFG)" == "unzip - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /MTd /W3 /Gm- /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "NDEBUG" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /FD /GZ /c -# SUBTRACT CPP /nologo /YX -# ADD BASE RSC /l 0x40c /d "_DEBUG" -# ADD RSC /l 0x40c /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo - -!ENDIF - -# Begin Target - -# Name "unzip - Win32 Release" -# Name "unzip - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\api.c -# End Source File -# Begin Source File - -SOURCE=.\crc32.c -# End Source File -# Begin Source File - -SOURCE=.\crctab.c -# End Source File -# Begin Source File - -SOURCE=.\crypt.c -# End Source File -# Begin Source File - -SOURCE=.\explode.c -# End Source File -# Begin Source File - -SOURCE=.\extract.c -# End Source File -# Begin Source File - -SOURCE=.\fileio.c -# End Source File -# Begin Source File - -SOURCE=.\globals.c -# End Source File -# Begin Source File - -SOURCE=.\inflate.c -# End Source File -# Begin Source File - -SOURCE=.\list.c -# End Source File -# Begin Source File - -SOURCE=.\match.c -# End Source File -# Begin Source File - -SOURCE=.\win32\nt.c - -!IF "$(CFG)" == "unzip - Win32 Release" - -!ELSEIF "$(CFG)" == "unzip - Win32 Debug" - -# ADD CPP /I "../" /I "./" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\process.c -# End Source File -# Begin Source File - -SOURCE=.\ttyio.c -# End Source File -# Begin Source File - -SOURCE=.\unreduce.c -# End Source File -# Begin Source File - -SOURCE=.\unshrink.c -# End Source File -# Begin Source File - -SOURCE=.\win32\win32.c - -!IF "$(CFG)" == "unzip - Win32 Release" - -!ELSEIF "$(CFG)" == "unzip - Win32 Debug" - -# ADD CPP /I "../" /I "./" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\windll\windll.c - -!IF "$(CFG)" == "unzip - Win32 Release" - -!ELSEIF "$(CFG)" == "unzip - Win32 Debug" - -# ADD CPP /I "../" /I "./" -# SUBTRACT CPP /nologo /YX /Yc /Yu - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\zipinfo.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\consts.h -# End Source File -# Begin Source File - -SOURCE=.\crypt.h -# End Source File -# Begin Source File - -SOURCE=.\windll\decs.h -# End Source File -# Begin Source File - -SOURCE=.\ebcdic.h -# End Source File -# Begin Source File - -SOURCE=.\globals.h -# End Source File -# Begin Source File - -SOURCE=.\inflate.h -# End Source File -# Begin Source File - -SOURCE=.\win32\nt.h -# End Source File -# Begin Source File - -SOURCE=.\windll\structs.h -# End Source File -# Begin Source File - -SOURCE=.\ttyio.h -# End Source File -# Begin Source File - -SOURCE=.\unzip.h -# End Source File -# Begin Source File - -SOURCE=.\unzpriv.h -# End Source File -# Begin Source File - -SOURCE=.\version.h -# End Source File -# Begin Source File - -SOURCE=.\win32\w32cfg.h -# End Source File -# Begin Source File - -SOURCE=.\windll\windll.h -# End Source File -# Begin Source File - -SOURCE=.\zip.h -# End Source File -# End Group -# End Target -# End Project diff --git a/Build/source/libs/unzip/unzip.dsw b/Build/source/libs/unzip/unzip.dsw deleted file mode 100644 index 43f75699e1b..00000000000 --- a/Build/source/libs/unzip/unzip.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "unzip"=".\unzip.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/Build/source/libs/unzip/unzip.h b/Build/source/libs/unzip/unzip.h deleted file mode 100644 index be12eda7d75..00000000000 --- a/Build/source/libs/unzip/unzip.h +++ /dev/null @@ -1,545 +0,0 @@ -/*--------------------------------------------------------------------------- - - unzip.h (new) - - This header file contains the public macros and typedefs required by - both the UnZip sources and by any application using the UnZip API. If - UNZIP_INTERNAL is defined, it includes unzpriv.h (containing includes, - prototypes and extern variables used by the actual UnZip sources). - - ---------------------------------------------------------------------------*/ - - -#ifndef __unzip_h /* prevent multiple inclusions */ -#define __unzip_h - -/*--------------------------------------------------------------------------- - Predefined, machine-specific macros. - ---------------------------------------------------------------------------*/ - -#ifdef __GO32__ /* MS-DOS extender: NOT Unix */ -# ifdef unix -# undef unix -# endif -# ifdef __unix -# undef __unix -# endif -# ifdef __unix__ -# undef __unix__ -# endif -#endif - -#if ((defined(__convex__) || defined(__convexc__)) && !defined(CONVEX)) -# define CONVEX -#endif - -#if (defined(unix) || defined(__unix) || defined(__unix__)) -# ifndef UNIX -# define UNIX -# endif -#endif /* unix || __unix || __unix__ */ -#if (defined(M_XENIX) || defined(COHERENT) || defined(__hpux)) -# ifndef UNIX -# define UNIX -# endif -#endif /* M_XENIX || COHERENT || __hpux */ -#if (defined(CONVEX) || defined(MINIX) || defined(_AIX) || defined(__QNX__)) -# ifndef UNIX -# define UNIX -# endif -#endif /* CONVEX || MINIX || _AIX || __QNX__ */ - -#if (defined(VM_CMS) || defined(MVS)) -# define CMS_MVS -#endif - -#if (defined(__OS2__) && !defined(OS2)) -# define OS2 -#endif - -#if (defined(__TANDEM) && !defined(TANDEM)) -# define TANDEM -#endif - -#if (defined(__VMS) && !defined(VMS)) -# define VMS -#endif - -#if ((defined(__WIN32__) || defined(_WIN32)) && !defined(WIN32)) -# define WIN32 -#endif -#if ((defined(__WINNT__) || defined(__WINNT)) && !defined(WIN32)) -# define WIN32 -#endif - -#ifdef __COMPILER_KCC__ -# include -# ifdef SYS_T20 -# define TOPS20 -# endif -#endif /* __COMPILER_KCC__ */ - -/* Borland C does not define __TURBOC__ if compiling for a 32-bit platform */ -#ifdef __BORLANDC__ -# ifndef __TURBOC__ -# define __TURBOC__ -# endif -# if (!defined(__MSDOS__) && !defined(OS2) && !defined(WIN32)) -# define __MSDOS__ -# endif -#endif - -/* define MSDOS for Turbo C (unless OS/2) and Power C as well as Microsoft C */ -#ifdef __POWERC -# define __TURBOC__ -# define MSDOS -#endif /* __POWERC */ - -#if (defined(__MSDOS__) && !defined(MSDOS)) /* just to make sure */ -# define MSDOS -#endif - -/* RSXNTDJ (at least up to v1.3) compiles for WIN32 (RSXNT) using a derivate - of the EMX environment, but defines MSDOS and __GO32__. ARG !!! */ -#if (defined(MSDOS) && defined(WIN32)) -# undef MSDOS /* WIN32 is >>>not<<< MSDOS */ -#endif -#if (defined(__GO32__) && defined(__EMX__) && defined(__RSXNT__)) -# undef __GO32__ -#endif - -#if (defined(linux) && !defined(LINUX)) -# define LINUX -#endif - -#ifdef __riscos -# define RISCOS -#endif - -#if (defined(THINK_C) || defined(MPW)) -# define MACOS -#endif -#if (defined(__MWERKS__) && defined(macintosh)) -# define MACOS -#endif - -/* use prototypes and ANSI libraries if __STDC__, or Microsoft or Borland C, or - * Silicon Graphics, or Convex?, or IBM C Set/2, or GNU gcc/emx, or Watcom C, - * or Macintosh, or Windows NT, or Sequent, or Atari or IBM RS/6000. - */ -#if (defined(__STDC__) || defined(MSDOS) || defined(WIN32) || defined(__EMX__)) -# ifndef PROTO -# define PROTO -# endif -# ifndef MODERN -# define MODERN -# endif -#endif -#if (defined(__IBMC__) || defined(__BORLANDC__) || defined(__WATCOMC__)) -# ifndef PROTO -# define PROTO -# endif -# ifndef MODERN -# define MODERN -# endif -#endif -#if (defined(MACOS) || defined(ATARI_ST) || defined(RISCOS)) -# ifndef PROTO -# define PROTO -# endif -# ifndef MODERN -# define MODERN -# endif -#endif -/* Sequent running Dynix/ptx: non-modern compiler */ -#if (defined(_AIX) || defined(sgi) || (defined(_SEQUENT_) && !defined(PTX))) -# ifndef PROTO -# define PROTO -# endif -# ifndef MODERN -# define MODERN -# endif -#endif -#if (defined(CMS_MVS) || defined(__BEOS__)) /* || defined(CONVEX) */ -# ifndef PROTO -# define PROTO -# endif -# ifndef MODERN -# define MODERN -# endif -#endif - -/* turn off prototypes if requested */ -#if (defined(NOPROTO) && defined(PROTO)) -# undef PROTO -#endif - -/* used to remove arguments in function prototypes for non-ANSI C */ -#ifdef PROTO -# define OF(a) a -#else -# define OF(a) () -#endif - -/* enable the "const" keyword only if MODERN and if not otherwise instructed */ -#ifdef MODERN -# if (!defined(ZCONST) && (defined(USE_CONST) || !defined(NO_CONST))) -# define ZCONST const -# endif -#endif - -#ifndef ZCONST -# define ZCONST -#endif - - -/*--------------------------------------------------------------------------- - Grab system-specific public include headers. - ---------------------------------------------------------------------------*/ - -#ifdef POCKET_UNZIP /* WinCE port */ -# include "wince/punzip.h" /* must appear before windows.h */ -#endif - -#ifdef WINDLL -# include -# include "windll/structs.h" -#endif - -/*--------------------------------------------------------------------------- - Grab system-dependent definition of EXPENTRY for prototypes below. - ---------------------------------------------------------------------------*/ - -#if 0 -#if (defined(OS2) && !defined(FUNZIP)) -# ifdef UNZIP_INTERNAL -# define INCL_NOPM -# define INCL_DOSNLS -# define INCL_DOSPROCESS -# define INCL_DOSDEVICES -# define INCL_DOSDEVIOCTL -# define INCL_DOSERRORS -# define INCL_DOSMISC -# ifdef OS2DLL -# define INCL_REXXSAA -# include -# endif -# endif /* UNZIP_INTERNAL */ -# include -# define UZ_EXP EXPENTRY -#endif /* OS2 && !FUNZIP */ -#endif /* 0 */ - -#if (defined(OS2) && !defined(FUNZIP)) -# if (defined(__IBMC__) || defined(__WATCOMC__)) -# define UZ_EXP _System /* compiler keyword */ -# else -# define UZ_EXP -# endif -#endif /* OS2 && !FUNZIP */ - -#if (defined(WINDLL) || defined(USE_UNZIP_LIB)) -# ifndef EXPENTRY -# define UZ_EXP WINAPI -# else -# define UZ_EXP EXPENTRY -# endif -#endif - -#ifndef UZ_EXP -# define UZ_EXP -#endif - - -/*--------------------------------------------------------------------------- - Public typedefs. - ---------------------------------------------------------------------------*/ - -#ifndef _IZ_TYPES_DEFINED -#ifdef MODERN - typedef void zvoid; -#else /* !MODERN */ -# ifndef AOS_VS /* mostly modern? */ -# ifndef VAXC /* not fully modern, but has knows 'void' */ -# define void int -# endif /* !VAXC */ -# endif /* !AOS_VS */ - typedef char zvoid; -#endif /* ?MODERN */ -typedef unsigned char uch; /* code assumes unsigned bytes; these type- */ -typedef unsigned short ush; /* defs replace byte/UWORD/ULONG (which are */ -typedef unsigned long ulg; /* predefined on some systems) & match zip */ -#define _IZ_TYPES_DEFINED -#endif /* !_IZ_TYPES_DEFINED */ - -/* InputFn is not yet used and is likely to change: */ -#ifdef PROTO - typedef int (UZ_EXP MsgFn) (zvoid *pG, uch *buf, ulg size, int flag); - typedef int (UZ_EXP InputFn) (zvoid *pG, uch *buf, int *size, int flag); - typedef void (UZ_EXP PauseFn) (zvoid *pG, ZCONST char *prompt, int flag); - typedef int (UZ_EXP PasswdFn) (zvoid *pG, int *rcnt, char *pwbuf, - int size, ZCONST char *zfn, - ZCONST char *efn); - typedef int (UZ_EXP StatCBFn) (zvoid *pG, int fnflag, ZCONST char *zfn, - ZCONST char *efn, ZCONST zvoid *details); - typedef void (UZ_EXP UsrIniFn) (void); -#else /* !PROTO */ - typedef int (UZ_EXP MsgFn) (); - typedef int (UZ_EXP InputFn) (); - typedef void (UZ_EXP PauseFn) (); - typedef int (UZ_EXP PasswdFn) (); - typedef int (UZ_EXP StatCBFn) (); - typedef void (UZ_EXP UsrIniFn) (); -#endif /* ?PROTO */ - -typedef struct _UzpBuffer { /* rxstr */ - ulg strlength; /* length of string */ - char *strptr; /* pointer to string */ -} UzpBuffer; - -typedef struct _UzpInit { - ulg structlen; /* length of the struct being passed */ - - /* GRR: can we assume that each of these is a 32-bit pointer? if not, - * does it matter? add "far" keyword to make sure? */ - MsgFn *msgfn; - InputFn *inputfn; - PauseFn *pausefn; - UsrIniFn *userfn; /* user init function to be called after */ - /* globals constructed and initialized */ - - /* pointer to program's environment area or something? */ - /* hooks for performance testing? */ - /* hooks for extra unzip -v output? (detect CPU or other hardware?) */ - /* anything else? let me (Greg) know... */ -} UzpInit; - -typedef struct _UzpCB { - ulg structlen; /* length of the struct being passed */ - /* GRR: can we assume that each of these is a 32-bit pointer? if not, - * does it matter? add "far" keyword to make sure? */ - MsgFn *msgfn; - InputFn *inputfn; - PauseFn *pausefn; - PasswdFn *passwdfn; - StatCBFn *statrepfn; -} UzpCB; - -/* the collection of general UnZip option flags and option arguments */ -typedef struct _UzpOpts { -#ifndef FUNZIP - char *exdir; /* pointer to extraction root directory (-d option) */ - char *pwdarg; /* pointer to command-line password (-P option) */ - int zipinfo_mode; /* behave like ZipInfo or like normal UnZip? */ - int aflag; /* -a: do ASCII-EBCDIC and/or end-of-line translation */ -#ifdef VMS - int bflag; /* -b: force fixed record format for binary files */ -#endif -#ifdef UNIXBACKUP - int B_flag; /* -B: back up existing files by renaming to *~ first */ -#endif - int cflag; /* -c: output to stdout */ - int C_flag; /* -C: match filenames case-insensitively */ -#ifdef MACOS - int E_flag; /* -E: [MacOS] show Mac extra field during restoring */ -#endif - int fflag; /* -f: "freshen" (extract only newer files) */ -#if (defined(RISCOS) || defined(ACORN_FTYPE_NFS)) - int acorn_nfs_ext; /* -F: RISC OS types & NFS filetype extensions */ -#endif - int hflag; /* -h: header line (zipinfo) */ -#ifdef MACOS - int i_flag; /* -i: [MacOS] ignore filenames stored in Mac e.f. */ -#endif -#ifdef RISCOS - int scanimage; /* -I: scan image files */ -#endif - int jflag; /* -j: junk pathnames (unzip) */ -#if (defined(__BEOS__) || defined(MACOS)) - int J_flag; /* -J: ignore BeOS/MacOS extra field info (unzip) */ -#endif - int lflag; /* -12slmv: listing format (zipinfo) */ - int L_flag; /* -L: convert filenames from some OSes to lowercase */ - int overwrite_none; /* -n: never overwrite files (no prompting) */ -#ifdef AMIGA - int N_flag; /* -N: restore comments as AmigaDOS filenotes */ -#endif - int overwrite_all; /* -o: OK to overwrite files without prompting */ -#endif /* !FUNZIP */ - int qflag; /* -q: produce a lot less output */ -#ifndef FUNZIP -#if (defined(MSDOS) || defined(FLEXOS) || defined(OS2) || defined(WIN32)) - int sflag; /* -s: convert spaces in filenames to underscores */ -#endif -#if (defined(MSDOS) || defined(OS2) || defined(WIN32)) - int volflag; /* -$: extract volume labels */ -#endif - int tflag; /* -t: test (unzip) or totals line (zipinfo) */ - int T_flag; /* -T: timestamps (unzip) or dec. time fmt (zipinfo) */ - int uflag; /* -u: "update" (extract only newer/brand-new files) */ - int vflag; /* -v: (verbosely) list directory */ - int V_flag; /* -V: don't strip VMS version numbers */ -#if (defined(TANDEM) || defined(UNIX) || defined(VMS) || defined(__BEOS__)) - int X_flag; /* -X: restore owner/protection or UID/GID or ACLs */ -#endif -#if (defined(OS2) || defined(WIN32)) - int X_flag; /* -X: restore owner/protection or UID/GID or ACLs */ -#endif - int zflag; /* -z: display the zipfile comment (only, for unzip) */ -#endif /* !FUNZIP */ -} UzpOpts; - -/* intended to be a private struct: */ -typedef struct _ver { - uch major; /* e.g., integer 5 */ - uch minor; /* e.g., 2 */ - uch patchlevel; /* e.g., 0 */ - uch not_used; -} _version_type; - -typedef struct _UzpVer { - ulg structlen; /* length of the struct being passed */ - ulg flag; /* bit 0: is_beta bit 1: uses_zlib */ - char *betalevel; /* e.g., "g BETA" or "" */ - char *date; /* e.g., "4 Sep 95" (beta) or "4 September 1995" */ - char *zlib_version; /* e.g., "0.95" or NULL */ - _version_type unzip; - _version_type zipinfo; - _version_type os2dll; - _version_type windll; -} UzpVer; - -/* for Visual BASIC access to Windows DLLs: */ -typedef struct _UzpVer2 { - ulg structlen; /* length of the struct being passed */ - ulg flag; /* bit 0: is_beta bit 1: uses_zlib */ - char betalevel[10]; /* e.g., "g BETA" or "" */ - char date[20]; /* e.g., "4 Sep 95" (beta) or "4 September 1995" */ - char zlib_version[10]; /* e.g., "0.95" or NULL */ - _version_type unzip; - _version_type zipinfo; - _version_type os2dll; - _version_type windll; -} UzpVer2; - -typedef struct central_directory_file_header { /* CENTRAL */ - uch version_made_by[2]; - uch version_needed_to_extract[2]; - ush general_purpose_bit_flag; - ush compression_method; - ulg last_mod_dos_datetime; - ulg crc32; - ulg csize; - ulg ucsize; - ush filename_length; - ush extra_field_length; - ush file_comment_length; - ush disk_number_start; - ush internal_file_attributes; - ulg external_file_attributes; - ulg relative_offset_local_header; -} cdir_file_hdr; - - -#define UZPINIT_LEN sizeof(UzpInit) -#define UZPVER_LEN sizeof(UzpVer) -#define cbList(func) int (* UZ_EXP func)(char *filename, cdir_file_hdr *crec) - - -/*--------------------------------------------------------------------------- - Return (and exit) values of the public UnZip API functions. - ---------------------------------------------------------------------------*/ - -/* external return codes */ -#define PK_OK 0 /* no error */ -#define PK_COOL 0 /* no error */ -#define PK_GNARLY 0 /* no error */ -#define PK_WARN 1 /* warning error */ -#define PK_ERR 2 /* error in zipfile */ -#define PK_BADERR 3 /* severe error in zipfile */ -#define PK_MEM 4 /* insufficient memory (during initialization) */ -#define PK_MEM2 5 /* insufficient memory (password failure) */ -#define PK_MEM3 6 /* insufficient memory (file decompression) */ -#define PK_MEM4 7 /* insufficient memory (memory decompression) */ -#define PK_MEM5 8 /* insufficient memory (not yet used) */ -#define PK_NOZIP 9 /* zipfile not found */ -#define PK_PARAM 10 /* bad or illegal parameters specified */ -#define PK_FIND 11 /* no files found */ -#define PK_DISK 50 /* disk full */ -#define PK_EOF 51 /* unexpected EOF */ - -#define IZ_CTRLC 80 /* user hit ^C to terminate */ -#define IZ_UNSUP 81 /* no files found: all unsup. compr/encrypt. */ -#define IZ_BADPWD 82 /* no files found: all had bad password */ - -/* internal and DLL-only return codes */ -#define IZ_DIR 76 /* potential zipfile is a directory */ -#define IZ_CREATED_DIR 77 /* directory created: set time and permissions */ -#define IZ_VOL_LABEL 78 /* volume label, but can't set on hard disk */ -#define IZ_EF_TRUNC 79 /* local extra field truncated (PKZIP'd) */ - -/* return codes of password fetches (negative = user abort; positive = error) */ -#define IZ_PW_ENTERED 0 /* got some password string; use/try it */ -#define IZ_PW_CANCEL -1 /* no password available (for this entry) */ -#define IZ_PW_CANCELALL -2 /* no password, skip any further pwd. request */ -#define IZ_PW_ERROR 5 /* = PK_MEM2 : failure (no mem, no tty, ...) */ - -/* flag values for status callback function */ -#define UZ_ST_START_EXTRACT 1 -#define UZ_ST_IN_PROGRESS 2 -#define UZ_ST_FINISH_MEMBER 3 - -/* return values of status callback function */ -#define UZ_ST_CONTINUE 0 -#define UZ_ST_BREAK 1 - - -/*--------------------------------------------------------------------------- - Prototypes for public UnZip API (DLL) functions. - ---------------------------------------------------------------------------*/ - -#define UzpMatch match - -int UZ_EXP UzpMain OF((int argc, char **argv)); -int UZ_EXP UzpAltMain OF((int argc, char **argv, UzpInit *init)); -UzpVer * UZ_EXP UzpVersion OF((void)); -void UZ_EXP UzpFreeMemBuffer OF((UzpBuffer *retstr)); -#ifndef WINDLL -int UZ_EXP UzpUnzipToMemory OF((char *zip, char *file, UzpOpts *optflgs, - UzpCB *UsrFunc, UzpBuffer *retstr)); -#endif -#ifndef WINDLL - int UZ_EXP UzpGrep OF((char *archive, char *file, - char *pattern, int cmd, int SkipBin, - UzpCB *UsrFunc)); -#endif -#ifdef OS2 -int UZ_EXP UzpFileTree OF((char *name, cbList(callBack), - char *cpInclude[], char *cpExclude[])); -#endif - -void UZ_EXP UzpVersion2 OF((UzpVer2 *version)); -int UZ_EXP UzpValidate OF((char *archive, int AllCodes)); - - -/* default I/O functions (can be swapped out via UzpAltMain() entry point): */ - -int UZ_EXP UzpMessagePrnt OF((zvoid *pG, uch *buf, ulg size, int flag)); -int UZ_EXP UzpMessageNull OF((zvoid *pG, uch *buf, ulg size, int flag)); -int UZ_EXP UzpInput OF((zvoid *pG, uch *buf, int *size, int flag)); -void UZ_EXP UzpMorePause OF((zvoid *pG, ZCONST char *prompt, int flag)); -int UZ_EXP UzpPassword OF((zvoid *pG, int *rcnt, char *pwbuf, - int size, ZCONST char *zfn, - ZCONST char *efn)); - - -/*--------------------------------------------------------------------------- - Remaining private stuff for UnZip compilation. - ---------------------------------------------------------------------------*/ - -#ifdef UNZIP_INTERNAL -# include "unzpriv.h" -#endif - - -#endif /* !__unzip_h */ diff --git a/Build/source/libs/unzip/unzip.mak b/Build/source/libs/unzip/unzip.mak deleted file mode 100644 index 9095da86f09..00000000000 --- a/Build/source/libs/unzip/unzip.mak +++ /dev/null @@ -1,369 +0,0 @@ -# Microsoft Developer Studio Generated NMAKE File, Based on unzip.dsp -!IF "$(CFG)" == "" -CFG=unzip - Win32 Debug -!MESSAGE No configuration specified. Defaulting to unzip - Win32 Debug. -!ENDIF - -!IF "$(CFG)" != "unzip - Win32 Release" && "$(CFG)" != "unzip - Win32 Debug" -!MESSAGE Invalid configuration "$(CFG)" specified. -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "unzip.mak" CFG="unzip - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "unzip - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "unzip - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE -!ERROR An invalid configuration is specified. -!ENDIF - -!IF "$(OS)" == "Windows_NT" -NULL= -!ELSE -NULL=nul -!ENDIF - -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "unzip - Win32 Release" - -OUTDIR=.\Release -INTDIR=.\Release -# Begin Custom Macros -OutDir=.\Release -# End Custom Macros - -ALL : "$(OUTDIR)\unzip.lib" - - -CLEAN : - -@erase "$(INTDIR)\api.obj" - -@erase "$(INTDIR)\crc32.obj" - -@erase "$(INTDIR)\crctab.obj" - -@erase "$(INTDIR)\crypt.obj" - -@erase "$(INTDIR)\explode.obj" - -@erase "$(INTDIR)\extract.obj" - -@erase "$(INTDIR)\fileio.obj" - -@erase "$(INTDIR)\globals.obj" - -@erase "$(INTDIR)\inflate.obj" - -@erase "$(INTDIR)\list.obj" - -@erase "$(INTDIR)\match.obj" - -@erase "$(INTDIR)\nt.obj" - -@erase "$(INTDIR)\process.obj" - -@erase "$(INTDIR)\ttyio.obj" - -@erase "$(INTDIR)\unreduce.obj" - -@erase "$(INTDIR)\unshrink.obj" - -@erase "$(INTDIR)\vc60.idb" - -@erase "$(INTDIR)\win32.obj" - -@erase "$(INTDIR)\windll.obj" - -@erase "$(INTDIR)\zipinfo.obj" - -@erase "$(OUTDIR)\unzip.lib" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP_PROJ=/nologo /MT /W3 /GX /O2 /I "./" /I "../" /I "../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c -BSC32=bscmake.exe -BSC32_FLAGS=/nologo /o"$(OUTDIR)\unzip.bsc" -BSC32_SBRS= \ - -LIB32=link.exe -lib -LIB32_FLAGS=/nologo /out:"$(OUTDIR)\unzip.lib" -LIB32_OBJS= \ - "$(INTDIR)\api.obj" \ - "$(INTDIR)\crc32.obj" \ - "$(INTDIR)\crctab.obj" \ - "$(INTDIR)\crypt.obj" \ - "$(INTDIR)\explode.obj" \ - "$(INTDIR)\extract.obj" \ - "$(INTDIR)\fileio.obj" \ - "$(INTDIR)\globals.obj" \ - "$(INTDIR)\inflate.obj" \ - "$(INTDIR)\list.obj" \ - "$(INTDIR)\match.obj" \ - "$(INTDIR)\nt.obj" \ - "$(INTDIR)\process.obj" \ - "$(INTDIR)\ttyio.obj" \ - "$(INTDIR)\unreduce.obj" \ - "$(INTDIR)\unshrink.obj" \ - "$(INTDIR)\win32.obj" \ - "$(INTDIR)\windll.obj" \ - "$(INTDIR)\zipinfo.obj" - -"$(OUTDIR)\unzip.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) - $(LIB32) @<< - $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) -<< - -!ELSEIF "$(CFG)" == "unzip - Win32 Debug" - -OUTDIR=.\Debug -INTDIR=.\Debug -# Begin Custom Macros -OutDir=.\Debug -# End Custom Macros - -ALL : "$(OUTDIR)\unzip.lib" - - -CLEAN : - -@erase "$(INTDIR)\api.obj" - -@erase "$(INTDIR)\crc32.obj" - -@erase "$(INTDIR)\crctab.obj" - -@erase "$(INTDIR)\crypt.obj" - -@erase "$(INTDIR)\explode.obj" - -@erase "$(INTDIR)\extract.obj" - -@erase "$(INTDIR)\fileio.obj" - -@erase "$(INTDIR)\globals.obj" - -@erase "$(INTDIR)\inflate.obj" - -@erase "$(INTDIR)\list.obj" - -@erase "$(INTDIR)\match.obj" - -@erase "$(INTDIR)\nt.obj" - -@erase "$(INTDIR)\process.obj" - -@erase "$(INTDIR)\ttyio.obj" - -@erase "$(INTDIR)\unreduce.obj" - -@erase "$(INTDIR)\unshrink.obj" - -@erase "$(INTDIR)\vc60.idb" - -@erase "$(INTDIR)\vc60.pdb" - -@erase "$(INTDIR)\win32.obj" - -@erase "$(INTDIR)\windll.obj" - -@erase "$(INTDIR)\zipinfo.obj" - -@erase "$(OUTDIR)\unzip.lib" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP_PROJ=/MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "NDEBUG" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c -BSC32=bscmake.exe -BSC32_FLAGS=/nologo /o"$(OUTDIR)\unzip.bsc" -BSC32_SBRS= \ - -LIB32=link.exe -lib -LIB32_FLAGS=/nologo /out:"$(OUTDIR)\unzip.lib" -LIB32_OBJS= \ - "$(INTDIR)\api.obj" \ - "$(INTDIR)\crc32.obj" \ - "$(INTDIR)\crctab.obj" \ - "$(INTDIR)\crypt.obj" \ - "$(INTDIR)\explode.obj" \ - "$(INTDIR)\extract.obj" \ - "$(INTDIR)\fileio.obj" \ - "$(INTDIR)\globals.obj" \ - "$(INTDIR)\inflate.obj" \ - "$(INTDIR)\list.obj" \ - "$(INTDIR)\match.obj" \ - "$(INTDIR)\nt.obj" \ - "$(INTDIR)\process.obj" \ - "$(INTDIR)\ttyio.obj" \ - "$(INTDIR)\unreduce.obj" \ - "$(INTDIR)\unshrink.obj" \ - "$(INTDIR)\win32.obj" \ - "$(INTDIR)\windll.obj" \ - "$(INTDIR)\zipinfo.obj" - -"$(OUTDIR)\unzip.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) - $(LIB32) @<< - $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) -<< - -!ENDIF - -.c{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cpp{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cxx{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.c{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cpp{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cxx{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - - -!IF "$(NO_EXTERNAL_DEPS)" != "1" -!IF EXISTS("unzip.dep") -!INCLUDE "unzip.dep" -!ELSE -!MESSAGE Warning: cannot find "unzip.dep" -!ENDIF -!ENDIF - - -!IF "$(CFG)" == "unzip - Win32 Release" || "$(CFG)" == "unzip - Win32 Debug" -SOURCE=.\api.c - -"$(INTDIR)\api.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\crc32.c - -"$(INTDIR)\crc32.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\crctab.c - -"$(INTDIR)\crctab.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\crypt.c - -"$(INTDIR)\crypt.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\explode.c - -"$(INTDIR)\explode.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\extract.c - -"$(INTDIR)\extract.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\fileio.c - -"$(INTDIR)\fileio.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\globals.c - -"$(INTDIR)\globals.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\inflate.c - -"$(INTDIR)\inflate.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\list.c - -"$(INTDIR)\list.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\match.c - -"$(INTDIR)\match.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\win32\nt.c - -!IF "$(CFG)" == "unzip - Win32 Release" - -CPP_SWITCHES=/nologo /MT /W3 /GX /O2 /I "./" /I "../" /I "../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c - -"$(INTDIR)\nt.obj" : $(SOURCE) "$(INTDIR)" - $(CPP) @<< - $(CPP_SWITCHES) $(SOURCE) -<< - - -!ELSEIF "$(CFG)" == "unzip - Win32 Debug" - -CPP_SWITCHES=/MTd /W3 /GX /ZI /Od /I "../" /I "./" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "NDEBUG" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c - -"$(INTDIR)\nt.obj" : $(SOURCE) "$(INTDIR)" - $(CPP) @<< - $(CPP_SWITCHES) $(SOURCE) -<< - - -!ENDIF - -SOURCE=.\process.c - -"$(INTDIR)\process.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\ttyio.c - -"$(INTDIR)\ttyio.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\unreduce.c - -"$(INTDIR)\unreduce.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\unshrink.c - -"$(INTDIR)\unshrink.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\win32\win32.c - -!IF "$(CFG)" == "unzip - Win32 Release" - -CPP_SWITCHES=/nologo /MT /W3 /GX /O2 /I "./" /I "../" /I "../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c - -"$(INTDIR)\win32.obj" : $(SOURCE) "$(INTDIR)" - $(CPP) @<< - $(CPP_SWITCHES) $(SOURCE) -<< - - -!ELSEIF "$(CFG)" == "unzip - Win32 Debug" - -CPP_SWITCHES=/MTd /W3 /GX /ZI /Od /I "../" /I "./" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "NDEBUG" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c - -"$(INTDIR)\win32.obj" : $(SOURCE) "$(INTDIR)" - $(CPP) @<< - $(CPP_SWITCHES) $(SOURCE) -<< - - -!ENDIF - -SOURCE=.\windll\windll.c - -!IF "$(CFG)" == "unzip - Win32 Release" - -CPP_SWITCHES=/nologo /MT /W3 /GX /O2 /I "./" /I "../" /I "../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c - -"$(INTDIR)\windll.obj" : $(SOURCE) "$(INTDIR)" - $(CPP) @<< - $(CPP_SWITCHES) $(SOURCE) -<< - - -!ELSEIF "$(CFG)" == "unzip - Win32 Debug" - -CPP_SWITCHES=/MTd /W3 /GX /ZI /Od /I "../" /I "./" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "NDEBUG" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c - -"$(INTDIR)\windll.obj" : $(SOURCE) "$(INTDIR)" - $(CPP) @<< - $(CPP_SWITCHES) $(SOURCE) -<< - - -!ENDIF - -SOURCE=.\zipinfo.c - -"$(INTDIR)\zipinfo.obj" : $(SOURCE) "$(INTDIR)" - - - -!ENDIF - diff --git a/Build/source/libs/unzip/unzip.plg b/Build/source/libs/unzip/unzip.plg deleted file mode 100644 index e35c65cb610..00000000000 --- a/Build/source/libs/unzip/unzip.plg +++ /dev/null @@ -1,30 +0,0 @@ - - -
      -

      Build Log

      -

      ---------------------Configuration: unzip - Win32 Release-------------------- -

      -

      Command Lines

      -Creating temporary file "C:\DOCUME~1\FABRIC~1\LOCALS~1\Temp\RSP54BC.tmp" with contents -[ -/MT /W3 /GX /O2 /I "./" /I "../" /I "../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "_WINDOWS" /D "WINDLL" /D "USE_EF_UT_TIME" /D "DLL" /D "UNZIPLIB" /Fo"Release/" /Fd"Release/" /FD /c -"D:\Source\fptex\texk\win32\unzip\win32\nt.c" -] -Creating command line "cl.exe @C:\DOCUME~1\FABRIC~1\LOCALS~1\Temp\RSP54BC.tmp" -

      Output Window

      -Compiling... -Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86 -Copyright (C) Microsoft Corp 1984-1998. All rights reserved. - -cl "/MT" "/W3" "/GX" "/O2" "/I" "./" "/I" "../" "/I" "../.." "/D" "WIN32" "/D" "NDEBUG" "/D" "_MBCS" "/D" "_LIB" "/D" "_WINDOWS" "/D" "WINDLL" "/D" "USE_EF_UT_TIME" "/D" "DLL" "/D" "UNZIPLIB" "/FoRelease/" "/FdRelease/" "/FD" "/c" "D:\Source\fptex\texk\win32\unzip\win32\nt.c" - -nt.c - - - -

      Results

      -nt.obj - 0 error(s), 0 warning(s) -
      - - diff --git a/Build/source/libs/unzip/unzip.vcproj b/Build/source/libs/unzip/unzip.vcproj deleted file mode 100644 index 151816c4ad8..00000000000 --- a/Build/source/libs/unzip/unzip.vcproj +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Build/source/libs/unzip/unzpriv.h b/Build/source/libs/unzip/unzpriv.h deleted file mode 100644 index dfac1528b2a..00000000000 --- a/Build/source/libs/unzip/unzpriv.h +++ /dev/null @@ -1,2387 +0,0 @@ -/*--------------------------------------------------------------------------- - - unzpriv.h - - This header file contains private (internal) macros, typedefs, prototypes - and global-variable declarations used by all of the UnZip source files. - In a prior life it was part of the main unzip.h header, but now it is only - included by that header if UNZIP_INTERNAL is defined. - - ---------------------------------------------------------------------------*/ - - - -#ifndef __unzpriv_h /* prevent multiple inclusions */ -#define __unzpriv_h - -/* First thing: Signal all following code that we compile UnZip utilities! */ -#ifndef UNZIP -# define UNZIP -#endif - -/* GRR 960204: MORE defined here in preparation for removal altogether */ -#ifndef MORE -# define MORE -#endif - -/* fUnZip should never need to be reentrant */ -#ifdef FUNZIP -# ifdef REENTRANT -# undef REENTRANT -# endif -# ifdef DLL -# undef DLL -# endif -#endif - -#if (defined(DLL) && !defined(REENTRANT)) -# define REENTRANT -#endif - -#if (!defined(DYNAMIC_CRC_TABLE) && !defined(FUNZIP)) -# define DYNAMIC_CRC_TABLE -#endif - -#if (defined(DYNAMIC_CRC_TABLE) && !defined(REENTRANT)) -# ifndef DYNALLOC_CRCTAB -# define DYNALLOC_CRCTAB -# endif -#endif - -/*--------------------------------------------------------------------------- - OS-dependent configuration for UnZip internals - ---------------------------------------------------------------------------*/ - -/* bad or (occasionally?) missing stddef.h: */ -#if (defined(M_XENIX) || defined(DNIX)) -# define NO_STDDEF_H -#endif - -#if (defined(M_XENIX) && !defined(M_UNIX)) /* SCO Xenix only, not SCO Unix */ -# define SCO_XENIX -# define NO_LIMITS_H /* no limits.h, but MODERN defined */ -# define NO_UID_GID /* no uid_t/gid_t */ -# define size_t int -#endif - -#ifdef realix /* Modcomp Real/IX, real-time SysV.3 variant */ -# define SYSV -# define NO_UID_GID /* no uid_t/gid_t */ -#endif - -#if (defined(_AIX) && !defined(_ALL_SOURCE)) -# define _ALL_SOURCE -#endif - -#if defined(apollo) /* defines __STDC__ */ -# define NO_STDLIB_H -#endif - -#ifdef DNIX -# define SYSV -# define SHORT_NAMES /* 14-char limitation on path components */ -/* # define FILENAME_MAX 14 */ -# define FILENAME_MAX NAME_MAX /* GRR: experiment */ -#endif - -#if (defined(SYSTEM_FIVE) || defined(__SYSTEM_FIVE)) -# ifndef SYSV -# define SYSV -# endif -#endif /* SYSTEM_FIVE || __SYSTEM_FIVE */ -#if (defined(M_SYSV) || defined(M_SYS5)) -# ifndef SYSV -# define SYSV -# endif -#endif /* M_SYSV || M_SYS5 */ -/* __SVR4 and __svr4__ catch Solaris on at least some combos of compiler+OS */ -#if (defined(__SVR4) || defined(__svr4__) || defined(sgi) || defined(__hpux)) -# ifndef SYSV -# define SYSV -# endif -#endif /* __SVR4 || __svr4__ || sgi || __hpux */ -#if (defined(LINUX) || defined(__QNX__)) -# ifndef SYSV -# define SYSV -# endif -#endif /* LINUX || __QNX__ */ - -#if (defined(ultrix) || defined(__ultrix) || defined(bsd4_2)) -# if (!defined(BSD) && !defined(SYSV)) -# define BSD -# endif -#endif /* ultrix || __ultrix || bsd4_2 */ -#if (defined(sun) || defined(pyr) || defined(CONVEX)) -# if (!defined(BSD) && !defined(SYSV)) -# define BSD -# endif -#endif /* sun || pyr || CONVEX */ - -#ifdef pyr /* Pyramid: has BSD and AT&T "universes" */ -# ifdef BSD -# define pyr_bsd -# define USE_STRINGS_H /* instead of more common string.h */ -# define ZMEM /* ZMEM now uses bcopy/bzero: not in AT&T universe */ -# endif /* (AT&T memcpy claimed to be very slow, though) */ -# define DECLARE_ERRNO -#endif /* pyr */ - -/* stat() bug for Borland, VAX C (also GNU?), and Atari ST MiNT on TOS - * filesystems: returns 0 for wildcards! (returns 0xffffffff on Minix - * filesystem or `U:' drive under Atari MiNT.) Watcom C was previously - * included on this list; it would be good to know what version the problem - * was fixed at, if it did exist. Watcom 10.6 has a separate stat() problem: - * it fails on "." when the current directory is a root. This is covered by - * giving it a separate definition of SSTAT in OS-specific header files. */ -#if (defined(__TURBOC__) || defined(VMS) || defined(__MINT__)) -# define WILD_STAT_BUG -#endif - -#ifdef WILD_STAT_BUG -# define SSTAT(path,pbuf) (iswild(path) || stat(path,pbuf)) -#else -# define SSTAT stat -#endif - -#ifdef REGULUS /* returns the inode number on success(!)...argh argh argh */ -# define stat(p,s) zstat((p),(s)) -#endif - -#define STRNICMP zstrnicmp - -/*--------------------------------------------------------------------------- - OS-dependent includes - ---------------------------------------------------------------------------*/ - -#ifdef EFT -# define LONGINT off_t /* Amdahl UTS nonsense ("extended file types") */ -#else -# define LONGINT long -#endif - -#ifdef MODERN -# ifndef NO_STDDEF_H -# include -# endif -# ifndef NO_STDLIB_H -# include /* standard library prototypes, malloc(), etc. */ -# endif - typedef size_t extent; -#else /* !MODERN */ -# ifndef AOS_VS /* mostly modern? */ - LONGINT lseek(); -# ifdef VAXC /* not fully modern, but does have stdlib.h and void */ -# include -# else - char *malloc(); -# endif /* ?VAXC */ -# endif /* !AOS_VS */ - typedef unsigned int extent; -#endif /* ?MODERN */ - - -#ifndef MINIX /* Minix needs it after all the other includes (?) */ -# include -#endif -#include /* skip for VMS, to use tolower() function? */ -#include /* used in mapname() */ -#ifdef USE_STRINGS_H -# include /* strcpy, strcmp, memcpy, index/rindex, etc. */ -#else -# include /* strcpy, strcmp, memcpy, strchr/strrchr, etc. */ -#endif -#if (defined(MODERN) && !defined(NO_LIMITS_H)) -# include /* GRR: EXPERIMENTAL! (can be deleted) */ -#endif - -/* this include must be down here for SysV.4, for some reason... */ -#include /* used in unzip.c, fileio.c */ - - -/*--------------------------------------------------------------------------- - API (DLL) section: - ---------------------------------------------------------------------------*/ - -#ifdef DLL -# define MAIN UZ_EXP UzpMain /* was UzpUnzip */ -# ifdef OS2DLL -# undef Info -# define REDIRECTC(c) varputchar(__G__ c) -# define REDIRECTPRINT(buf,size) varmessage(__G__ buf, size) -# define FINISH_REDIRECT() finish_REXX_redirect(__G) -# else -# define REDIRECTC(c) -# define REDIRECTPRINT(buf,size) 0 -# define FINISH_REDIRECT() close_redirect(__G) -# endif -#endif - -/*--------------------------------------------------------------------------- - Acorn RISCOS section: - ---------------------------------------------------------------------------*/ - -#ifdef RISCOS -# include "acorn/riscos.h" -#endif - -/*--------------------------------------------------------------------------- - Amiga section: - ---------------------------------------------------------------------------*/ - -#ifdef AMIGA -# include "amiga/amiga.h" -#endif - -/*--------------------------------------------------------------------------- - AOS/VS section (somewhat similar to Unix, apparently): - ---------------------------------------------------------------------------*/ - -#ifdef AOS_VS -# ifdef FILEIO_C -# include "aosvs/aosvs.h" -# endif -#endif - -/*--------------------------------------------------------------------------- - Atari ST section: - ---------------------------------------------------------------------------*/ - -#ifdef ATARI -# include -# include -# include -# include -# define SYMLINKS -# define EXE_EXTENSION ".tos" -# ifndef DATE_FORMAT -# define DATE_FORMAT DF_DMY -# endif -# define DIR_END '/' -# define INT_SPRINTF -# define timezone _timezone -# define lenEOL 2 -# define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} -# undef SHORT_NAMES -# if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) -# define TIMESTAMP -# endif -#endif - -/*--------------------------------------------------------------------------- - BeOS section: - ---------------------------------------------------------------------------*/ - -#ifdef __BEOS__ -# include /* [cjh]: This is pretty much a generic */ -# include /* POSIX 1003.1 system; see beos/ for */ -# include /* extra code to deal with our extra file */ -# include /* attributes. */ -# include -# include -# define DIRENT -# include -# ifndef DATE_FORMAT -# define DATE_FORMAT DF_MDY /* GRR: customize with locale.h somehow? */ -# endif -# define lenEOL 1 -# define PutNativeEOL *q++ = native(LF); -# define SCREENLINES screenlines() -# define USE_EF_UT_TIME -# define SET_DIR_ATTRIB -# if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) -# define TIMESTAMP -# endif -# define RESTORE_UIDGID -# define NO_GMTIME /* maybe DR10 will have timezones... */ -# define INT_SPRINTF -# define SYMLINKS -# define MAIN main_stub /* now that we're using a wrapper... */ -#endif - -/*--------------------------------------------------------------------------- - Human68k/X68000 section: - ---------------------------------------------------------------------------*/ - -#ifdef __human68k__ /* DO NOT DEFINE DOS_OS2 HERE! If Human68k is so much */ -# include /* like MS-DOS and/or OS/2, create DOS_H68_OS2 macro. */ -# include -# include -# include -# include -# include -# ifndef DATE_FORMAT -# define DATE_FORMAT DF_YMD /* Japanese standard */ -# endif - /* GRR: these EOL macros are guesses */ -# define lenEOL 2 -# define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} -# define EXE_EXTENSION ".exe" /* just a guess... */ -#endif - -/*--------------------------------------------------------------------------- - Mac section: - ---------------------------------------------------------------------------*/ - -#ifdef MACOS -# include "maccfg.h" -#endif /* MACOS */ - -/*--------------------------------------------------------------------------- - MS-DOS, OS/2, FLEXOS section: - ---------------------------------------------------------------------------*/ - -#ifdef WINDLL -# define MSWIN -# ifdef MORE -# undef MORE -# endif -# ifdef OS2_EAS -# undef OS2_EAS -# endif -#endif - -#if (defined(_MSC_VER) || (defined(M_I86) && !defined(__WATCOMC__))) -# ifndef MSC -# define MSC /* This should work for older MSC, too! */ -# endif -#endif - -#if (defined(MSDOS) || defined(OS2) || defined(FLEXOS)) -# include /* off_t, time_t, dev_t, ... */ -# include -# include /* lseek(), open(), setftime(), dup(), creat() */ -# include /* localtime() */ -# include /* O_BINARY for open() w/o CR/LF translation */ - -# ifdef OS2 /* defined for all OS/2 compilers */ -# include "os2/os2cfg.h" -# else -# ifdef FLEXOS -# include "flexos/flxcfg.h" -# else -# include "msdos/doscfg.h" -# endif -# endif - -# if (defined(_MSC_VER) && (_MSC_VER == 700) && !defined(GRR)) - /* - * ARGH. MSC 7.0 libraries think times are based on 1899 Dec 31 00:00, not - * 1970 Jan 1 00:00. So we have to diddle time_t's appropriately: add or - * subtract 70 years' worth of seconds; i.e., number of days times 86400; - * i.e., (70*365 regular days + 17 leap days + 1 1899 day) * 86400 == - * (25550 + 17 + 1) * 86400 == 2209075200 seconds. We know time_t is an - * unsigned long (ulg) on the only system with this bug. - */ -# define TIMET_TO_NATIVE(x) (x) += (ulg)2209075200L; -# define NATIVE_TO_TIMET(x) (x) -= (ulg)2209075200L; -# endif -# if (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0450)) -# define timezone _timezone -# endif -# if (defined(__GO32__) || defined(FLEXOS)) -# define DIR_END '/' -# else -# define DIR_END '\\' /* OS uses '\\' as directory separator */ -# define DIR_END2 '/' /* also check for '/' (RTL may convert) */ -# endif -# ifndef WIN32 -# ifdef DATE_FORMAT -# undef DATE_FORMAT -# endif -# define DATE_FORMAT dateformat() -# endif -# define lenEOL 2 -# define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} -# define USE_EF_UT_TIME -#endif /* MSDOS || OS2 || FLEXOS */ - -/*--------------------------------------------------------------------------- - MTS section (piggybacks UNIX, I think): - ---------------------------------------------------------------------------*/ - -#ifdef MTS -# include /* off_t, time_t, dev_t, ... */ -# include -# include /* MTS uses this instead of fcntl.h */ -# include -# include -# include /* some important non-ANSI routines */ -# define mkdir(s,n) (-1) /* no "make directory" capability */ -# define EBCDIC /* set EBCDIC conversion on */ -# define NO_STRNICMP /* unzip's is as good the one in MTS */ -# define USE_FWRITE -# define close_outfile() fclose(G.outfile) /* can't set time on files */ -# define umask(n) /* don't have umask() on MTS */ -# define FOPWT "w" /* open file for writing in TEXT mode */ -# ifndef DATE_FORMAT -# define DATE_FORMAT DF_MDY -# endif -# define lenEOL 1 -# define PutNativeEOL *q++ = native(LF); -#endif /* MTS */ - - /*--------------------------------------------------------------------------- - QDOS section - ---------------------------------------------------------------------------*/ - -#ifdef QDOS -# define DIRENT -# include -# include -# include -# include -# include "qdos/izqdos.h" -# ifndef DATE_FORMAT -# define DATE_FORMAT DF_MDY -# endif -# define lenEOL 1 -# define PutNativeEOL *q++ = native(LF); -# define DIR_END '_' -# define RETURN QReturn -# undef PATH_MAX -# define PATH_MAX 36 -# if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) -# define TIMESTAMP -# endif -#endif - -/*--------------------------------------------------------------------------- - Tandem NSK section: - ---------------------------------------------------------------------------*/ - -#ifdef TANDEM -# include "tandem.h" -# include - /* use a single LF delimiter so that writes to 101 text files work */ -# define PutNativeEOL *q++ = native(LF); -# define lenEOL 1 -# ifndef DATE_FORMAT -# define DATE_FORMAT DF_DMY -# endif -# define USE_EF_UT_TIME -# define RESTORE_UIDGID -#endif - -/*--------------------------------------------------------------------------- - TOPS-20 section: - ---------------------------------------------------------------------------*/ - -#ifdef TOPS20 -# include /* off_t, time_t, dev_t, ... */ -# include -# include -# include -# include -# include -# include -# include /* get amazing monsym() macro */ - extern int open(), close(), read(); - extern int stat(), unlink(), jsys(), fcntl(); - extern long lseek(), dup(), creat(); -# define strchr index /* GRR: necessary? */ -# define strrchr rindex -# define REALLY_SHORT_SYMS -# define NO_MKDIR -# define DIR_BEG '<' -# define DIR_END '>' -# define DIR_EXT ".directory" -# ifndef DATE_FORMAT -# define DATE_FORMAT DF_MDY -# endif -# define EXE_EXTENSION ".exe" /* just a guess... */ -#endif /* TOPS20 */ - -/*--------------------------------------------------------------------------- - Unix section: - ---------------------------------------------------------------------------*/ - -#ifdef UNIX -# include /* off_t, time_t, dev_t, ... */ -# include - -# ifndef COHERENT -# include /* O_BINARY for open() w/o CR/LF translation */ -# else /* COHERENT */ -# ifdef _I386 -# include /* Coherent 4.0.x, Mark Williams C */ -# else -# include /* Coherent 3.10, Mark Williams C */ -# endif -# define SHORT_SYMS -# ifndef __COHERENT__ /* Coherent 4.2 has tzset() */ -# define tzset settz -# endif -# endif /* ?COHERENT */ - -# ifndef NO_PARAM_H -# ifdef NGROUPS_MAX -# undef NGROUPS_MAX /* SCO bug: defined again in */ -# endif -# ifdef BSD -# define TEMP_BSD /* may be defined again in */ -# undef BSD -# endif -# include /* conflict with , some systems? */ -# ifdef TEMP_BSD -# undef TEMP_BSD -# ifndef BSD -# define BSD -# endif -# endif -# endif /* !NO_PARAM_H */ - -# ifdef __osf__ -# define DIRENT -# ifdef BSD -# undef BSD -# endif -# endif /* __osf__ */ - -# ifdef BSD -# include -# include -# ifdef _AIX -# include -# endif -# else -# include - struct tm *gmtime(), *localtime(); -# endif - -# if (defined(BSD4_4) || (defined(SYSV) && defined(MODERN))) -# include /* this includes utime.h on SGIs */ -# if (defined(BSD4_4) || defined(linux)) -# include -# define GOT_UTIMBUF -# endif -# endif - -# if (defined(V7) || defined(pyr_bsd)) -# define strchr index -# define strrchr rindex -# endif -# ifdef V7 -# define O_RDONLY 0 -# define O_WRONLY 1 -# define O_RDWR 2 -# endif - -# ifdef MINIX -# include -# endif -# ifndef DATE_FORMAT -# define DATE_FORMAT DF_MDY /* GRR: customize with locale.h somehow? */ -# endif -# define lenEOL 1 -# ifdef EBCDIC -# define PutNativeEOL *q++ = '\n'; -# else -# define PutNativeEOL *q++ = native(LF); -# endif -# define SCREENLINES screenlines() -# define USE_EF_UT_TIME -# define SET_DIR_ATTRIB -# if (!defined(TIMESTAMP) && !defined(NOTIMESTAMP)) /* GRR 970513 */ -# define TIMESTAMP -# endif -# define RESTORE_UIDGID -#endif /* UNIX */ - -/*--------------------------------------------------------------------------- - VM/CMS and MVS section: - ---------------------------------------------------------------------------*/ - -#ifdef CMS_MVS -# include "vmmvs.h" -# define CLOSE_INFILE() close_infile(__G) -#endif - -/*--------------------------------------------------------------------------- - VMS section: - ---------------------------------------------------------------------------*/ - -#ifdef VMS -# include /* GRR: experimenting... */ -# include -# include /* the usual non-BSD time functions */ -# include /* same things as fcntl.h has */ -# include -# include -# define _MAX_PATH (NAM$C_MAXRSS+1) /* to define FILNAMSIZ below */ -# ifdef RETURN_CODES /* VMS interprets standard PK return codes incorrectly */ -# define RETURN(ret) return_VMS(__G__ (ret)) /* verbose version */ -# define EXIT(ret) return_VMS(__G__ (ret)) -# else -# define RETURN return_VMS /* quiet version */ -# define EXIT return_VMS -# endif -# ifdef VMSCLI -# define USAGE(ret) VMSCLI_usage(__G__ (ret)) -# endif -# define DIR_BEG '[' -# define DIR_END ']' -# define DIR_EXT ".dir" -# ifndef DATE_FORMAT -# define DATE_FORMAT DF_MDY -# endif -# define lenEOL 1 -# define PutNativeEOL *q++ = native(LF); -# define SCREENLINES screenlines() -# if (defined(__VMS_VERSION) && !defined(VMS_VERSION)) -# define VMS_VERSION __VMS_VERSION -# endif -# if (defined(__VMS_VER) && !defined(__CRTL_VER)) -# define __CRTL_VER __VMS_VER -# endif -# if ((!defined(__CRTL_VER)) || (__CRTL_VER < 70000000)) -# define NO_GMTIME /* gmtime() of earlier VMS C RTLs is broken */ -# else -# if (!defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME)) -# define USE_EF_UT_TIME -# endif -# endif -# if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) -# define TIMESTAMP -# endif -# define RESTORE_UIDGID -#endif /* VMS */ - -/*--------------------------------------------------------------------------- - Win32 (Windows 95/NT) section: - ---------------------------------------------------------------------------*/ -#if defined(FPTEX) -#include -/* We don't want to use fpTeX's stat() version */ -#undef stat -#define stat _stat -#endif - -#if (defined(WIN32) && !defined(POCKET_UNZIP)) -# include "win32/w32cfg.h" -#endif - - - - - -/*************/ -/* Defines */ -/*************/ - -#define UNZIP_VERSION 20 /* compatible with PKUNZIP 2.0 */ -#define VMS_UNZIP_VERSION 42 /* if OS-needed-to-extract is VMS: can do */ - -#if (defined(MSDOS) || defined(OS2)) -# define DOS_OS2 -#endif - -#if (defined(OS2) || defined(WIN32)) -# define OS2_W32 -#endif - -#if (defined(DOS_OS2) || defined(WIN32)) -# define DOS_OS2_W32 -# define DOS_W32_OS2 /* historical: don't use */ -#endif - -#if (defined(DOS_OS2_W32) || defined(__human68k__)) -# define DOS_H68_OS2_W32 -#endif - -#if (defined(DOS_OS2) || defined(FLEXOS)) -# define DOS_FLX_OS2 -#endif - -#if (defined(DOS_OS2_W32) || defined(FLEXOS)) -# define DOS_FLX_OS2_W32 -#endif - -#if (defined(DOS_H68_OS2_W32) || defined(FLEXOS)) -# define DOS_FLX_H68_OS2_W32 -#endif - -#if (defined(TOPS20) || defined(VMS)) -# define T20_VMS -#endif - -#if (defined(MSDOS) || defined(T20_VMS)) -# define DOS_T20_VMS -#endif - -/* clean up with a few defaults */ -#ifndef DIR_END -# define DIR_END '/' /* last char before program name or filename */ -#endif -#ifndef DATE_FORMAT -# define DATE_FORMAT DF_MDY /* defaults to US convention */ -#endif -#ifndef CLOSE_INFILE -# define CLOSE_INFILE() close(G.zipfd) -#endif -#ifndef RETURN -# define RETURN return /* only used in main() */ -#endif -#ifndef EXIT -# define EXIT exit -#endif -#ifndef USAGE -# define USAGE(ret) usage(__G__ (ret)) /* used in unzip.c, zipinfo.c */ -#endif -#ifndef TIMET_TO_NATIVE /* everybody but MSC 7.0 and Macintosh */ -# define TIMET_TO_NATIVE(x) -# define NATIVE_TO_TIMET(x) -#endif - -#if (defined(DOS_FLX_OS2_W32) || defined(UNIX) || defined(RISCOS)) -# ifndef HAVE_UNLINK -# define HAVE_UNLINK -# endif -#endif -#if (defined(AOS_VS) || defined(ATARI) || defined(__BEOS__)) /* GRR: others? */ -# ifndef HAVE_UNLINK -# define HAVE_UNLINK -# endif -#endif - -/* OS-specific exceptions to the "ANSI <--> INT_SPRINTF" rule */ - -#if (!defined(PCHAR_SPRINTF) && !defined(INT_SPRINTF)) -# if (defined(SYSV) || defined(CONVEX) || defined(NeXT) || defined(BSD4_4)) -# define INT_SPRINTF /* sprintf() returns int: SysVish/Posix */ -# endif -# if (defined(DOS_FLX_OS2_W32) || defined(VMS) || defined(AMIGA)) -# define INT_SPRINTF /* sprintf() returns int: ANSI */ -# endif -# if (defined(ultrix) || defined(__ultrix)) /* Ultrix 4.3 and newer */ -# if (defined(POSIX) || defined(__POSIX)) -# define INT_SPRINTF /* sprintf() returns int: ANSI/Posix */ -# endif -# ifdef __GNUC__ -# define PCHAR_SPRINTF /* undetermined actual return value */ -# endif -# endif -# if (defined(__osf__) || defined(_AIX) || defined(CMS_MVS)) -# define INT_SPRINTF /* sprintf() returns int: ANSI/Posix */ -# endif -# if defined(sun) -# define PCHAR_SPRINTF /* sprintf() returns char *: SunOS cc *and* gcc */ -# endif -#endif - -/* defaults that we hope will take care of most machines in the future */ - -#if (!defined(PCHAR_SPRINTF) && !defined(INT_SPRINTF)) -# ifdef __STDC__ -# define INT_SPRINTF /* sprintf() returns int: ANSI */ -# endif -# ifndef INT_SPRINTF -# define PCHAR_SPRINTF /* sprintf() returns char *: BSDish */ -# endif -#endif - -#define MSG_STDERR(f) (f & 1) /* bit 0: 0 = stdout, 1 = stderr */ -#define MSG_INFO(f) ((f & 6) == 0) /* bits 1 and 2: 0 = info */ -#define MSG_WARN(f) ((f & 6) == 2) /* bits 1 and 2: 1 = warning */ -#define MSG_ERROR(f) ((f & 6) == 4) /* bits 1 and 2: 2 = error */ -#define MSG_FATAL(f) ((f & 6) == 6) /* bits 1 and 2: (3 = fatal error) */ -#define MSG_ZFN(f) (f & 0x0008) /* bit 3: 1 = print zipfile name */ -#define MSG_FN(f) (f & 0x0010) /* bit 4: 1 = print filename */ -#define MSG_LNEWLN(f) (f & 0x0020) /* bit 5: 1 = leading newline if !SOL */ -#define MSG_TNEWLN(f) (f & 0x0040) /* bit 6: 1 = trailing newline if !SOL */ -#define MSG_MNEWLN(f) (f & 0x0080) /* bit 7: 1 = trailing NL for prompts */ -/* the following are subject to change */ -#define MSG_NO_WGUI(f) (f & 0x0100) /* bit 8: 1 = skip if Windows GUI */ -#define MSG_NO_AGUI(f) (f & 0x0200) /* bit 9: 1 = skip if Acorn GUI */ -#define MSG_NO_DLL2(f) (f & 0x0400) /* bit 10: 1 = skip if OS/2 DLL */ -#define MSG_NO_NDLL(f) (f & 0x0800) /* bit 11: 1 = skip if WIN32 DLL */ -#define MSG_NO_WDLL(f) (f & 0x1000) /* bit 12: 1 = skip if Windows DLL */ - -#if (defined(MORE) && !defined(SCREENLINES)) -# ifdef DOS_FLX_OS2_W32 -# define SCREENLINES 25 /* can be (should be) a function instead */ -# else -# define SCREENLINES 24 /* VT-100s are assumed to be minimal hardware */ -# endif -#endif - -#define DIR_BLKSIZ 64 /* number of directory entries per block - * (should fit in 4096 bytes, usually) */ -#ifndef WSIZE -# define WSIZE 0x8000 /* window size--must be a power of two, and */ -#endif /* at least 32K for zip's deflate method */ - -#ifndef INBUFSIZ -# if (defined(MED_MEM) || defined(SMALL_MEM)) -# define INBUFSIZ 2048 /* works for MS-DOS small model */ -# else -# define INBUFSIZ 8192 /* larger buffers for real OSes */ -# endif -#endif - -#ifndef __16BIT__ -# define nearmalloc malloc -# define nearfree free -# if (!defined(__IBMC__) || !defined(OS2)) -# ifndef near -# define near -# endif -# ifndef far -# define far -# endif -# endif -#endif - -#if (defined(DYNALLOC_CRCTAB) && !defined(DYNAMIC_CRC_TABLE)) -# undef DYNALLOC_CRCTAB -#endif - -#if (defined(DYNALLOC_CRCTAB) && defined(REENTRANT)) -# undef DYNALLOC_CRCTAB /* not safe with reentrant code */ -#endif - -#if (defined(USE_ZLIB) && !defined(USE_OWN_CRCTAB)) -# ifdef DYNALLOC_CRCTAB -# undef DYNALLOC_CRCTAB -# endif -#endif - -#if (defined(USE_ZLIB) && defined(ASM_CRC)) -# undef ASM_CRC -#endif - -/* Logic for case of small memory, length of EOL > 1: if OUTBUFSIZ == 2048, - * OUTBUFSIZ>>1 == 1024 and OUTBUFSIZ>>7 == 16; therefore rawbuf is 1008 bytes - * and transbuf 1040 bytes. Have room for 32 extra EOL chars; 1008/32 == 31.5 - * chars/line, smaller than estimated 35-70 characters per line for C source - * and normal text. Hence difference is sufficient for most "average" files. - * (Argument scales for larger OUTBUFSIZ.) - */ -#ifdef SMALL_MEM /* i.e., 16-bit OSes: MS-DOS, OS/2 1.x, etc. */ -# define LoadFarString(x) fLoadFarString(__G__ (x)) -# define LoadFarStringSmall(x) fLoadFarStringSmall(__G__ (x)) -# define LoadFarStringSmall2(x) fLoadFarStringSmall2(__G__ (x)) -# if (defined(_MSC_VER) && (_MSC_VER >= 600)) -# define zfstrcpy(dest, src) _fstrcpy((dest), (src)) -# endif -# ifndef Far -# define Far far /* __far only works for MSC 6.00, not 6.0a or Borland */ -# endif -# define OUTBUFSIZ INBUFSIZ -# if (lenEOL == 1) -# define RAWBUFSIZ (OUTBUFSIZ>>1) -# else -# define RAWBUFSIZ ((OUTBUFSIZ>>1) - (OUTBUFSIZ>>7)) -# endif -# define TRANSBUFSIZ (OUTBUFSIZ-RAWBUFSIZ) - typedef short shrint; /* short/int or "shrink int" (unshrink) */ -#else -# define zfstrcpy(dest, src) strcpy((dest), (src)) -# ifdef QDOS -# define LoadFarString(x) Qstrfix(x) /* fix up _ for '.' */ -# define LoadFarStringSmall(x) Qstrfix(x) -# define LoadFarStringSmall2(x) Qstrfix(x) -# else -# define LoadFarString(x) x -# define LoadFarStringSmall(x) x -# define LoadFarStringSmall2(x) x -# endif -# ifdef MED_MEM -# define OUTBUFSIZ 0xFF80 /* can't malloc arrays of 0xFFE8 or more */ -# define TRANSBUFSIZ 0xFF80 - typedef short shrint; -# else -# define OUTBUFSIZ (lenEOL*WSIZE) /* more efficient text conversion */ -# define TRANSBUFSIZ (lenEOL*OUTBUFSIZ) -# ifdef AMIGA - typedef short shrint; -# else - typedef int shrint; /* for efficiency/speed, we hope... */ -# endif -# endif /* ?MED_MEM */ -# define RAWBUFSIZ OUTBUFSIZ -#endif /* ?SMALL_MEM */ - -#ifndef Far -# define Far -#endif - -#ifndef MAIN -# define MAIN main -#endif - -#ifdef SFX /* disable some unused features for SFX executables */ -# ifndef NO_ZIPINFO -# define NO_ZIPINFO -# endif -# ifdef TIMESTAMP -# undef TIMESTAMP -# endif -#endif - -/* user may have defined both by accident... NOTIMESTAMP takes precedence */ -#if (defined(TIMESTAMP) && defined(NOTIMESTAMP)) -# undef TIMESTAMP -#endif - -#if (!defined(COPYRIGHT_CLEAN) && !defined(USE_SMITH_CODE)) -# define COPYRIGHT_CLEAN -#endif - -#if (!defined(LZW_CLEAN) && !defined(USE_UNSHRINK)) -# define LZW_CLEAN -#endif - -#ifndef O_BINARY -# define O_BINARY 0 -#endif - -#ifndef PIPE_ERROR -# define PIPE_ERROR (errno == EPIPE) -#endif - -/* File operations--use "b" for binary if allowed or fixed length 512 on VMS */ -#ifdef VMS -# define FOPR "r","ctx=stm" -# define FOPM "r+","ctx=stm","rfm=fix","mrs=512" -# define FOPW "w","ctx=stm","rfm=fix","mrs=512" -#endif /* VMS */ - -#ifdef CMS_MVS -/* Binary files must be RECFM=F,LRECL=1 for ftell() to get correct pos */ -/* ...unless byteseek is used. Let's try that for a while. */ -# define FOPR "rb,byteseek" -# define FOPM "r+b,byteseek" -# define FOPW "wb,recfm=v,lrecl=32760" -# ifdef MVS -# define FOPWT "w,lrecl=133" -# else -# define FOPWT "w" -# endif -#endif /* CMS_MVS */ - -#ifdef TOPS20 /* TOPS-20 MODERN? You kidding? */ -# define FOPW "w8" -#endif /* TOPS20 */ - -/* Defaults when nothing special has been defined previously. */ -#ifdef MODERN -# ifndef FOPR -# define FOPR "rb" -# endif -# ifndef FOPM -# define FOPM "r+b" -# endif -# ifndef FOPW -# define FOPW "wb" -# endif -# ifndef FOPWT -# define FOPWT "wt" -# endif -#else /* !MODERN */ -# ifndef FOPR -# define FOPR "r" -# endif -# ifndef FOPM -# define FOPM "r+" -# endif -# ifndef FOPW -# define FOPW "w" -# endif -# ifndef FOPWT -# define FOPWT "w" -# endif -#endif /* ?MODERN */ - -/* - * If exists on most systems, should include that, since it may - * define some or all of the following: NAME_MAX, PATH_MAX, _POSIX_NAME_MAX, - * _POSIX_PATH_MAX. - */ -#ifdef DOS_FLX_OS2 -# include -#endif - -#ifndef PATH_MAX -# ifdef MAXPATHLEN -# define PATH_MAX MAXPATHLEN /* in on some systems */ -# else -# ifdef _MAX_PATH -# define PATH_MAX _MAX_PATH -# else -# if FILENAME_MAX > 255 -# define PATH_MAX FILENAME_MAX /* used like PATH_MAX on some systems */ -# else -# define PATH_MAX 1024 -# endif -# endif /* ?_MAX_PATH */ -# endif /* ?MAXPATHLEN */ -#endif /* !PATH_MAX */ - -#define FILNAMSIZ PATH_MAX - -#ifdef SHORT_SYMS /* Mark Williams C, ...? */ -# define extract_or_test_files xtr_or_tst_files -# define extract_or_test_member xtr_or_tst_member -#endif - -#ifdef REALLY_SHORT_SYMS /* TOPS-20 linker: first 6 chars */ -# define process_cdir_file_hdr XXpcdfh -# define process_local_file_hdr XXplfh -# define extract_or_test_files XXxotf /* necessary? */ -# define extract_or_test_member XXxotm /* necessary? */ -# define check_for_newer XXcfn -# define overwrite_all XXoa -# define process_all_files XXpaf -# define extra_field XXef -# define explode_lit8 XXel8 -# define explode_lit4 XXel4 -# define explode_nolit8 XXnl8 -# define explode_nolit4 XXnl4 -# define cpdist8 XXcpdist8 -# define inflate_codes XXic -# define inflate_stored XXis -# define inflate_fixed XXif -# define inflate_dynamic XXid -# define inflate_block XXib -# define maxcodemax XXmax -#endif - -#ifndef S_TIME_T_MAX /* max value of signed (>= 32-bit) time_t */ -# define S_TIME_T_MAX ((time_t)(ulg)0x7fffffffL) -#endif -#ifndef U_TIME_T_MAX /* max value of unsigned (>= 32-bit) time_t */ -# define U_TIME_T_MAX ((time_t)(ulg)0xffffffffL) -#endif -#ifdef DOSTIME_MINIMUM /* min DOSTIME value (1980-01-01) */ -# undef DOSTIME_MINIMUM -#endif -#define DOSTIME_MINIMUM ((ulg)0x00210000L) -#ifdef DOSTIME_2038_01_18 /* approximate DOSTIME equivalent of */ -# undef DOSTIME_2038_01_18 /* the signed-32-bit time_t limit */ -#endif -#define DOSTIME_2038_01_18 ((ulg)0x74320000L) - -#ifdef QDOS -# define ZSUFX "_zip" -# define ALT_ZSUFX ".zip" -#else -# ifdef RISCOS -# define ZSUFX "/zip" -# else -# define ZSUFX ".zip" -# endif -# define ALT_ZSUFX ".ZIP" /* Unix-only so far (only case-sensitive fs) */ -#endif - -#define CENTRAL_HDR_SIG "\001\002" /* the infamous "PK" signature bytes, */ -#define LOCAL_HDR_SIG "\003\004" /* sans "PK" (so unzip executable not */ -#define END_CENTRAL_SIG "\005\006" /* mistaken for zipfile itself) */ -#define EXTD_LOCAL_SIG "\007\010" /* [ASCII "\113" == EBCDIC "\080" ??] */ - -/* choice of activities for do_string() */ -#define SKIP 0 /* skip header block */ -#define DISPLAY 1 /* display archive comment (ASCII) */ -#define DISPL_8 5 /* display file comment (ext. ASCII) */ -#define DS_FN 2 /* read filename (ext. ASCII) */ -#define EXTRA_FIELD 3 /* copy extra field into buffer */ -#define DS_EF 3 -#ifdef AMIGA -# define FILENOTE 4 -#endif - -#define DOES_NOT_EXIST -1 /* return values for check_for_newer() */ -#define EXISTS_AND_OLDER 0 -#define EXISTS_AND_NEWER 1 - -#define ROOT 0 /* checkdir() extract-to path: called once */ -#define INIT 1 /* allocate buildpath: called once per member */ -#define APPEND_DIR 2 /* append a dir comp.: many times per member */ -#define APPEND_NAME 3 /* append actual filename: once per member */ -#define GETPATH 4 /* retrieve the complete path and free it */ -#define END 5 /* free root path prior to exiting program */ - -/* version_made_by codes (central dir): make sure these */ -/* are not defined on their respective systems!! */ -#define FS_FAT_ 0 /* filesystem used by MS-DOS, OS/2, Win32 */ -#define AMIGA_ 1 -#define VMS_ 2 -#define UNIX_ 3 -#define VM_CMS_ 4 -#define ATARI_ 5 /* what if it's a minix filesystem? [cjh] */ -#define FS_HPFS_ 6 /* filesystem used by OS/2 (and NT 3.x) */ -#define MAC_ 7 /* HFS filesystem used by MacOS */ -#define Z_SYSTEM_ 8 -#define CPM_ 9 -#define TOPS20_ 10 -#define FS_NTFS_ 11 /* filesystem used by Windows NT */ -#define QDOS_ 12 -#define ACORN_ 13 /* Archimedes Acorn RISC OS */ -#define FS_VFAT_ 14 /* filesystem used by Windows 95, NT */ -#define MVS_ 15 -#define BEOS_ 16 /* hybrid POSIX/database filesystem */ -#define TANDEM_ 17 /* Tandem/NSK */ -#define NUM_HOSTS 18 /* index of last system + 1 */ - -#define STORED 0 /* compression methods */ -#define SHRUNK 1 -#define REDUCED1 2 -#define REDUCED2 3 -#define REDUCED3 4 -#define REDUCED4 5 -#define IMPLODED 6 -#define TOKENIZED 7 -#define DEFLATED 8 -#define ENHDEFLATED 9 -#define DCLIMPLODED 10 -#define NUM_METHODS 11 /* index of last method + 1 */ -/* don't forget to update list_files(), extract.c and zipinfo.c appropriately - * if NUM_METHODS changes */ - -/* (the PK-class error codes are public and have been moved into unzip.h) */ - -#define DF_MDY 0 /* date format 10/26/91 (USA only) */ -#define DF_DMY 1 /* date format 26/10/91 (most of the world) */ -#define DF_YMD 2 /* date format 91/10/26 (a few countries) */ - -/*--------------------------------------------------------------------------- - Extra-field block ID values and offset info. - ---------------------------------------------------------------------------*/ -/* extra-field ID values, all little-endian: */ -#define EF_AV 0x0007 /* PKWARE's authenticity verification */ -#define EF_OS2 0x0009 /* OS/2 extended attributes */ -#define EF_PKW32 0x000a /* PKWARE's Win95/98/WinNT filetimes */ -#define EF_PKVMS 0x000c /* PKWARE's VMS */ -#define EF_PKUNIX 0x000d /* PKWARE's Unix */ -#define EF_IZVMS 0x4d49 /* Info-ZIP's VMS ("IM") */ -#define EF_IZUNIX 0x5855 /* Info-ZIP's old Unix[1] ("UX") */ -#define EF_IZUNIX2 0x7855 /* Info-ZIP's new Unix[2] ("Ux") */ -#define EF_TIME 0x5455 /* universal timestamp ("UT") */ -#define EF_MAC3 0x334d /* Info-ZIP's new Macintosh (= "M3") */ -#define EF_JLMAC 0x07c8 /* Johnny Lee's old Macintosh (= 1992) */ -#define EF_ZIPIT 0x2605 /* Thomas Brown's Macintosh (ZipIt) */ -#define EF_ZIPIT2 0x2705 /* T. Brown's Mac (ZipIt) v 1.3.8 and newer ? */ -#define EF_VMCMS 0x4704 /* Info-ZIP's VM/CMS ("\004G") */ -#define EF_MVS 0x470f /* Info-ZIP's MVS ("\017G") */ -#define EF_ACL 0x4c41 /* (OS/2) access control list ("AL") */ -#define EF_NTSD 0x4453 /* NT security descriptor ("SD") */ -#define EF_BEOS 0x6542 /* BeOS ("Be") */ -#define EF_QDOS 0xfb4a /* SMS/QDOS ("J\373") */ -#define EF_AOSVS 0x5356 /* AOS/VS ("VS") */ -#define EF_SPARK 0x4341 /* David Pilling's Acorn/SparkFS ("AC") */ -#define EF_MD5 0x4b46 /* Fred Kantor's MD5 ("FK") */ -#define EF_ASIUNIX 0x756e /* ASi's Unix ("nu") */ - -#define EB_HEADSIZE 4 /* length of extra field block header */ -#define EB_ID 0 /* offset of block ID in header */ -#define EB_LEN 2 /* offset of data length field in header */ -#define EB_UCSIZE_P 0 /* offset of ucsize field in compr. data */ -#define EB_CMPRHEADLEN 6 /* lenght of compression header */ - -#define EB_UX_MINLEN 8 /* minimal "UX" field contains atime, mtime */ -#define EB_UX_FULLSIZE 12 /* full "UX" field (atime, mtime, uid, gid) */ -#define EB_UX_ATIME 0 /* offset of atime in "UX" extra field data */ -#define EB_UX_MTIME 4 /* offset of mtime in "UX" extra field data */ -#define EB_UX_UID 8 /* byte offset of UID in "UX" field data */ -#define EB_UX_GID 10 /* byte offset of GID in "UX" field data */ - -#define EB_UX2_MINLEN 4 /* minimal "Ux" field contains UID/GID */ -#define EB_UX2_UID 0 /* byte offset of UID in "Ux" field data */ -#define EB_UX2_GID 2 /* byte offset of GID in "Ux" field data */ -#define EB_UX2_VALID (1 << 8) /* UID/GID present */ - -#define EB_UT_MINLEN 1 /* minimal UT field contains Flags byte */ -#define EB_UT_FLAGS 0 /* byte offset of Flags field */ -#define EB_UT_TIME1 1 /* byte offset of 1st time value */ -#define EB_UT_FL_MTIME (1 << 0) /* mtime present */ -#define EB_UT_FL_ATIME (1 << 1) /* atime present */ -#define EB_UT_FL_CTIME (1 << 2) /* ctime present */ - -#define EB_FLGS_OFFS 4 /* offset of flags area in generic compressed - extra field blocks (OS2, NT, and others) */ -#define EB_OS2_HLEN 4 /* size of OS2/ACL compressed data header */ -#define EB_BEOS_HLEN 5 /* length of BeOS e.f attribute header */ -#define EB_BE_FL_UNCMPR 0x01 /* "BeOS attributes uncompressed" bit flag */ -#define EB_MAC3_HLEN 14 /* length of Mac3 attribute block header */ -#define EB_M3_FL_DATFRK 0x01 /* "this entry is data fork" flag */ -#define EB_M3_FL_UNCMPR 0x04 /* "Mac3 attributes uncompressed" bit flag */ -#define EB_M3_FL_TIME64 0x08 /* "Mac3 time fields are 64 bit wide" flag */ -#define EB_M3_FL_NOUTC 0x10 /* "Mac3 timezone offset fields missing" flag */ - -#define EB_NTSD_C_LEN 4 /* length of central NT security data */ -#define EB_NTSD_L_LEN 5 /* length of minimal local NT security data */ -#define EB_NTSD_VERSION 4 /* offset of NTSD version byte */ -#define EB_NTSD_MAX_VER (0) /* maximum version # we know how to handle */ - -#define EB_ASI_CRC32 0 /* offset of ASI Unix field's crc32 checksum */ -#define EB_ASI_MODE 4 /* offset of ASI Unix permission mode field */ - -/*--------------------------------------------------------------------------- - True sizes of the various headers, as defined by PKWARE--so it is not - likely that these will ever change. But if they do, make sure both these - defines AND the typedefs below get updated accordingly. - ---------------------------------------------------------------------------*/ -#define LREC_SIZE 26 /* lengths of local file headers, central */ -#define CREC_SIZE 42 /* directory headers, and the end-of- */ -#define ECREC_SIZE 18 /* central-dir record, respectively */ - -#define MAX_BITS 13 /* used in unshrink() */ -#define HSIZE (1 << MAX_BITS) /* size of global work area */ - -#define LF 10 /* '\n' on ASCII machines; must be 10 due to EBCDIC */ -#define CR 13 /* '\r' on ASCII machines; must be 13 due to EBCDIC */ -#define CTRLZ 26 /* DOS & OS/2 EOF marker (used in fileio.c, vms.c) */ - -#ifdef EBCDIC -# define foreign(c) ascii[(uch)(c)] -# define native(c) ebcdic[(uch)(c)] -# define NATIVE "EBCDIC" -# define NOANSIFILT -#endif - -#if (defined(CRAY) && defined(ZMEM)) -# undef ZMEM -#endif - -#ifdef ZMEM -# undef ZMEM -# define memcmp(b1,b2,len) bcmp(b2,b1,len) -# define memcpy(dest,src,len) bcopy(src,dest,len) -# define memzero bzero -#else -# define memzero(dest,len) memset(dest,0,len) -#endif - -#ifdef VMS -# define ENV_UNZIP "UNZIP_OPTS" /* names of environment variables */ -# define ENV_ZIPINFO "ZIPINFO_OPTS" -#endif /* VMS */ -#ifdef RISCOS -# define ENV_UNZIP "Unzip$Options" -# define ENV_ZIPINFO "Zipinfo$Options" -# define ENV_UNZIPEXTS "Unzip$Exts" -#endif /* RISCOS */ -#ifndef ENV_UNZIP -# define ENV_UNZIP "UNZIP" /* the standard names */ -# define ENV_ZIPINFO "ZIPINFO" -#endif -#define ENV_UNZIP2 "UNZIPOPT" /* alternate names, for zip compat. */ -#define ENV_ZIPINFO2 "ZIPINFOOPT" - -#if (!defined(QQ) && !defined(NOQQ)) -# define QQ -#endif - -#ifdef QQ /* Newtware version: no file */ -# define QCOND (!uO.qflag) /* comments with -vq or -vqq */ -#else /* Bill Davidsen version: no way to */ -# define QCOND (longhdr) /* kill file comments when listing */ -#endif - -#ifdef OLD_QQ -# define QCOND2 (uO.qflag < 2) -#else -# define QCOND2 (!uO.qflag) -#endif - -#ifndef TRUE -# define TRUE 1 /* sort of obvious */ -#endif -#ifndef FALSE -# define FALSE 0 -#endif - -#ifndef SEEK_SET -# define SEEK_SET 0 -# define SEEK_CUR 1 -# define SEEK_END 2 -#endif - -#if (defined(UNIX) && defined(S_IFLNK) && !defined(MTS)) -# define SYMLINKS -# ifndef S_ISLNK -# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) -# endif -#endif /* UNIX && S_IFLNK && !MTS */ - -#ifndef S_ISDIR -# ifdef CMS_MVS -# define S_ISDIR(m) (FALSE) -# else -# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) -# endif -#endif - -#ifndef IS_VOLID -# define IS_VOLID(m) ((m) & 0x08) -#endif - - - - - -/**************/ -/* Typedefs */ -/**************/ - -#ifdef NO_UID_GID -# ifdef UID_USHORT - typedef unsigned short uid_t; /* TI SysV.3 */ - typedef unsigned short gid_t; -# else - typedef unsigned int uid_t; /* SCO Xenix */ - typedef unsigned int gid_t; -# endif -#endif - -#if (defined(WIN32) || defined(sgi) || defined(GOT_UTIMBUF) || defined(ATARI)) - typedef struct utimbuf ztimbuf; -#else - typedef struct ztimbuf { - time_t actime; /* new access time */ - time_t modtime; /* new modification time */ - } ztimbuf; -#endif - -typedef struct iztimes { - time_t atime; /* new access time */ - time_t mtime; /* new modification time */ - time_t ctime; /* used for creation time; NOT same as st_ctime */ -} iztimes; - -#ifdef SET_DIR_ATTRIB - typedef struct dirtime { /* temporary struct for holding directory info */ - struct dirtime *next; /* until can be sorted and set at end */ - char *fn; /* filename of directory */ - union { - iztimes t3; /* mtime, atime, ctime */ - ztimbuf t2; /* modtime, actime */ - } u; - unsigned perms; /* same as min_info.file_attr */ - int have_uidgid; /* flag */ - ush uidgid[2]; - } dirtime; -#endif /* SET_DIR_ATTRIB */ - -typedef struct min_info { - long offset; - ulg crc; /* crc (needed if extended header) */ - ulg compr_size; /* compressed size (needed if extended header) */ - ulg uncompr_size; /* uncompressed size (needed if extended header) */ - int hostnum; - unsigned file_attr; /* local flavor, as used by creat(), chmod()... */ - unsigned encrypted : 1; /* file encrypted: decrypt before uncompressing */ - unsigned ExtLocHdr : 1; /* use time instead of CRC for decrypt check */ - unsigned textfile : 1; /* file is text (according to zip) */ - unsigned textmode : 1; /* file is to be extracted as text */ - unsigned lcflag : 1; /* convert filename to lowercase */ - unsigned vollabel : 1; /* "file" is an MS-DOS volume (disk) label */ -} min_info; - -typedef struct VMStimbuf { - char *revdate; /* (both roughly correspond to Unix modtime/st_mtime) */ - char *credate; -} VMStimbuf; - -/*--------------------------------------------------------------------------- - Zipfile work area declarations. - ---------------------------------------------------------------------------*/ - -#ifdef MALLOC_WORK - union work { - struct { /* unshrink(): */ - shrint *Parent; /* (8193 * sizeof(shrint)) */ - uch *value; - uch *Stack; - } shrink; - uch *Slide; /* explode(), inflate(), unreduce() */ - }; -#else /* !MALLOC_WORK */ - union work { - struct { /* unshrink(): */ - shrint Parent[HSIZE]; /* (8192 * sizeof(shrint)) == 16KB minimum */ - uch value[HSIZE]; /* 8KB */ - uch Stack[HSIZE]; /* 8KB */ - } shrink; /* total = 32KB minimum; 80KB on Cray/Alpha */ - uch Slide[WSIZE]; /* explode(), inflate(), unreduce() */ - }; -#endif /* ?MALLOC_WORK */ - -#define slide G.area.Slide - -#if (defined(DLL) && !defined(NO_SLIDE_REDIR)) -# define redirSlide G.redirect_sldptr -#else -# define redirSlide G.area.Slide -#endif - -/*--------------------------------------------------------------------------- - Zipfile layout declarations. If these headers ever change, make sure the - xxREC_SIZE defines (above) change with them! - ---------------------------------------------------------------------------*/ - - typedef uch local_byte_hdr[ LREC_SIZE ]; -# define L_VERSION_NEEDED_TO_EXTRACT_0 0 -# define L_VERSION_NEEDED_TO_EXTRACT_1 1 -# define L_GENERAL_PURPOSE_BIT_FLAG 2 -# define L_COMPRESSION_METHOD 4 -# define L_LAST_MOD_DOS_DATETIME 6 -# define L_CRC32 10 -# define L_COMPRESSED_SIZE 14 -# define L_UNCOMPRESSED_SIZE 18 -# define L_FILENAME_LENGTH 22 -# define L_EXTRA_FIELD_LENGTH 24 - - typedef uch cdir_byte_hdr[ CREC_SIZE ]; -# define C_VERSION_MADE_BY_0 0 -# define C_VERSION_MADE_BY_1 1 -# define C_VERSION_NEEDED_TO_EXTRACT_0 2 -# define C_VERSION_NEEDED_TO_EXTRACT_1 3 -# define C_GENERAL_PURPOSE_BIT_FLAG 4 -# define C_COMPRESSION_METHOD 6 -# define C_LAST_MOD_DOS_DATETIME 8 -# define C_CRC32 12 -# define C_COMPRESSED_SIZE 16 -# define C_UNCOMPRESSED_SIZE 20 -# define C_FILENAME_LENGTH 24 -# define C_EXTRA_FIELD_LENGTH 26 -# define C_FILE_COMMENT_LENGTH 28 -# define C_DISK_NUMBER_START 30 -# define C_INTERNAL_FILE_ATTRIBUTES 32 -# define C_EXTERNAL_FILE_ATTRIBUTES 34 -# define C_RELATIVE_OFFSET_LOCAL_HEADER 38 - - typedef uch ec_byte_rec[ ECREC_SIZE+4 ]; -/* define SIGNATURE 0 space-holder only */ -# define NUMBER_THIS_DISK 4 -# define NUM_DISK_WITH_START_CENTRAL_DIR 6 -# define NUM_ENTRIES_CENTRL_DIR_THS_DISK 8 -# define TOTAL_ENTRIES_CENTRAL_DIR 10 -# define SIZE_CENTRAL_DIRECTORY 12 -# define OFFSET_START_CENTRAL_DIRECTORY 16 -# define ZIPFILE_COMMENT_LENGTH 20 - - - typedef struct local_file_header { /* LOCAL */ - uch version_needed_to_extract[2]; - ush general_purpose_bit_flag; - ush compression_method; - ulg last_mod_dos_datetime; - ulg crc32; - ulg csize; - ulg ucsize; - ush filename_length; - ush extra_field_length; - } local_file_hdr; - -#if 0 - typedef struct central_directory_file_header { /* CENTRAL */ - uch version_made_by[2]; - uch version_needed_to_extract[2]; - ush general_purpose_bit_flag; - ush compression_method; - ulg last_mod_dos_datetime; - ulg crc32; - ulg csize; - ulg ucsize; - ush filename_length; - ush extra_field_length; - ush file_comment_length; - ush disk_number_start; - ush internal_file_attributes; - ulg external_file_attributes; - ulg relative_offset_local_header; - } cdir_file_hdr; -#endif /* 0 */ - - typedef struct end_central_dir_record { /* END CENTRAL */ - ush number_this_disk; - ush num_disk_start_cdir; - ush num_entries_centrl_dir_ths_disk; - ush total_entries_central_dir; - ulg size_central_directory; - ulg offset_start_central_directory; - ush zipfile_comment_length; - } ecdir_rec; - - -/* Huffman code lookup table entry--this entry is four bytes for machines - that have 16-bit pointers (e.g. PC's in the small or medium model). - Valid extra bits are 0..13. e == 15 is EOB (end of block), e == 16 - means that v is a literal, 16 < e < 32 means that v is a pointer to - the next table, which codes e - 16 bits, and lastly e == 99 indicates - an unused code. If a code with e == 99 is looked up, this implies an - error in the data. */ - -struct huft { - uch e; /* number of extra bits or operation */ - uch b; /* number of bits in this code or subcode */ - union { - ush n; /* literal, length base, or distance base */ - struct huft *t; /* pointer to next level of table */ - } v; -}; - - -typedef struct _APIDocStruct { - char *compare; - char *function; - char *syntax; - char *purpose; -} APIDocStruct; - - - - -/*************/ -/* Globals */ -/*************/ - -#if (defined(OS2) && !defined(FUNZIP)) -# include "os2/os2data.h" -#endif - -#include "globals.h" - - - -/*************************/ -/* Function Prototypes */ -/*************************/ - -/*--------------------------------------------------------------------------- - Functions in unzip.c (initialization routines): - ---------------------------------------------------------------------------*/ - -#ifndef WINDLL - int MAIN OF((int argc, char **argv)); - int unzip OF((__GPRO__ int argc, char **argv)); - int uz_opts OF((__GPRO__ int *pargc, char ***pargv)); - int usage OF((__GPRO__ int error)); -#endif /* !WINDLL */ - -/*--------------------------------------------------------------------------- - Functions in process.c (main driver routines): - ---------------------------------------------------------------------------*/ - -int process_zipfiles OF((__GPRO)); -void free_G_buffers OF((__GPRO)); -/* static int do_seekable OF((__GPRO__ int lastchance)); */ -/* static int find_ecrec OF((__GPRO__ long searchlen)); */ -int uz_end_central OF((__GPRO)); -int process_cdir_file_hdr OF((__GPRO)); -int get_cdir_ent OF((__GPRO)); -int process_local_file_hdr OF((__GPRO)); -unsigned ef_scan_for_izux OF((uch *ef_buf, unsigned ef_len, int ef_is_c, - ulg dos_mdatetime, - iztimes *z_utim, ush *z_uidgid)); - -#ifndef SFX - -/*--------------------------------------------------------------------------- - Functions in zipinfo.c (`zipinfo-style' listing routines): - ---------------------------------------------------------------------------*/ - -#ifndef NO_ZIPINFO -#ifndef WINDLL - int zi_opts OF((__GPRO__ int *pargc, char ***pargv)); -#endif -int zi_end_central OF((__GPRO)); -int zipinfo OF((__GPRO)); -/* static int zi_long OF((__GPRO__ ulg *pEndprev)); */ -/* static int zi_short OF((__GPRO)); */ -/* static char *zi_time OF((__GPRO__ ZCONST ulg *datetimez, - ZCONST time_t *modtimez, char *d_t_str));*/ -#endif /* !NO_ZIPINFO */ - -/*--------------------------------------------------------------------------- - Functions in list.c (generic zipfile-listing routines): - ---------------------------------------------------------------------------*/ - -int list_files OF((__GPRO)); -#ifdef TIMESTAMP - int get_time_stamp OF((__GPRO__ time_t *last_modtime, - unsigned *nmember)); -#endif -int ratio OF((ulg uc, ulg c)); -void fnprint OF((__GPRO)); - -#endif /* !SFX */ - -/*--------------------------------------------------------------------------- - Functions in fileio.c: - ---------------------------------------------------------------------------*/ - -int open_input_file OF((__GPRO)); -int open_outfile OF((__GPRO)); /* also vms.c */ -void undefer_input OF((__GPRO)); -void defer_leftover_input OF((__GPRO)); -unsigned readbuf OF((__GPRO__ char *buf, register unsigned len)); -int readbyte OF((__GPRO)); -int fillinbuf OF((__GPRO)); -#ifdef FUNZIP - int flush OF((__GPRO__ ulg size)); /* actually funzip.c */ -#else - int flush OF((__GPRO__ uch *buf, ulg size, int unshrink)); -#endif -/* static int disk_error OF((__GPRO)); */ -void handler OF((int signal)); -time_t dos_to_unix_time OF((ulg dos_datetime)); -int check_for_newer OF((__GPRO__ char *filename)); /* os2,vmcms,vms */ -int do_string OF((__GPRO__ unsigned int len, int option)); -ush makeword OF((ZCONST uch *b)); -ulg makelong OF((ZCONST uch *sig)); -#if (!defined(STR_TO_ISO) || defined(NEED_STR2ISO)) - char *str2iso OF((char *dst, ZCONST char *src)); -#endif -#if (!defined(STR_TO_OEM) || defined(NEED_STR2OEM)) - char *str2oem OF((char *dst, ZCONST char *src)); -#endif -int zstrnicmp OF((register ZCONST char *s1, - register ZCONST char *s2, - register unsigned n)); -#ifdef REGULUS - int zstat OF((char *p, struct stat *s)); -#endif -#ifdef ZMEM /* MUST be ifdef'd because of conflicts with the standard def. */ - zvoid *memset OF((register zvoid *, register int, register unsigned int)); - int memcmp OF((register ZCONST zvoid*, register ZCONST zvoid *, - register unsigned int)); - zvoid *memcpy OF((register zvoid *, register ZCONST zvoid *, - register unsigned int)); -#endif -#ifdef SMALL_MEM - char *fLoadFarString OF((__GPRO__ const char Far *sz)); - char *fLoadFarStringSmall OF((__GPRO__ const char Far *sz)); - char *fLoadFarStringSmall2 OF((__GPRO__ const char Far *sz)); - #ifndef zfstrcpy - char Far * Far zfstrcpy OF((char Far *s1, const char Far *s2)); - #endif -#endif - - -/*--------------------------------------------------------------------------- - Functions in extract.c: - ---------------------------------------------------------------------------*/ - -int extract_or_test_files OF((__GPRO)); -/* static int store_info OF((void)); */ -/* static int extract_or_test_member OF((__GPRO)); */ -/* static int TestExtraField OF((__GPRO__ uch *ef, unsigned ef_len)); */ -/* static int test_OS2 OF((__GPRO__ uch *eb, unsigned eb_size)); */ -/* static int test_NT OF((__GPRO__ uch *eb, unsigned eb_size)); */ -int memextract OF((__GPRO__ uch *tgt, ulg tgtsize, - uch *src, ulg srcsize)); -int memflush OF((__GPRO__ uch *rawbuf, ulg size)); -char *fnfilter OF((ZCONST char *raw, uch *space)); - -/*--------------------------------------------------------------------------- - Decompression functions: - ---------------------------------------------------------------------------*/ - -#if (!defined(SFX) && !defined(FUNZIP)) -int explode OF((__GPRO)); /* explode.c */ -#endif -int huft_free OF((struct huft *t)); /* inflate.c */ -int huft_build OF((__GPRO__ ZCONST unsigned *b, unsigned n, - unsigned s, ZCONST ush *d, ZCONST ush *e, - struct huft **t, int *m)); -#ifdef USE_ZLIB - int UZinflate OF((__GPRO)); /* inflate.c */ -# define inflate_free(x) inflateEnd(&((Uz_Globs *)(&G))->dstrm) -#else - int inflate OF((__GPRO)); /* inflate.c */ - int inflate_free OF((__GPRO)); /* inflate.c */ -#endif /* ?USE_ZLIB */ -#if (!defined(SFX) && !defined(FUNZIP)) -void unreduce OF((__GPRO)); /* unreduce.c */ -/* static void LoadFollowers OF((__GPRO__ f_array *follower, uch *Slen)); - * unreduce.c */ -int unshrink OF((__GPRO)); /* unshrink.c */ -/* static void partial_clear OF((__GPRO)); * unshrink.c */ -#endif /* !SFX && !FUNZIP */ - -/*--------------------------------------------------------------------------- - Internal API functions (only included in DLL versions): - ---------------------------------------------------------------------------*/ - -#ifdef DLL - void setFileNotFound OF((__GPRO)); /* api.c */ - int unzipToMemory OF((__GPRO__ char *zip, char *file, - UzpBuffer *retstr)); /* api.c */ - int redirect_outfile OF((__GPRO)); /* api.c */ - int writeToMemory OF((__GPRO__ uch *rawbuf, ulg size)); - int close_redirect OF((__GPRO)); /* api.c */ - /* this obsolescent entry point kept for compatibility: */ - int UzpUnzip OF((int argc, char **argv));/* use UzpMain */ -#ifdef OS2DLL - int varmessage OF((__GPRO__ uch *buf, ulg size)); - int varputchar OF((__GPRO__ int c)); /* rexxapi.c */ - int finish_REXX_redirect OF((__GPRO)); /* rexxapi.c */ -#endif -#ifdef API_DOC - void APIhelp OF((__GPRO__ int argc, char **argv)); -#endif /* apihelp.c */ -#endif /* DLL */ - -/*--------------------------------------------------------------------------- - Acorn RISC OS-only functions: - ---------------------------------------------------------------------------*/ - -#ifdef RISCOS - int isRISCOSexfield OF((void *extra_field)); /* acorn.c */ - void setRISCOSexfield OF((char *path, void *extra_field)); /* acorn.c */ - void printRISCOSexfield OF((int isdir, void *extra_field)); /* acorn.c */ -#endif - -/*--------------------------------------------------------------------------- - Human68K-only functions: - ---------------------------------------------------------------------------*/ - -#ifdef __human68k__ - void InitTwentyOne OF((void)); -#endif - -/*--------------------------------------------------------------------------- - Macintosh-only functions: - ---------------------------------------------------------------------------*/ - -#ifdef MACOS - void screenOpen OF((char *)); /* macscreen.c */ - void screenControl OF((char *, int)); /* macscreen.c */ - void screenDump OF((char *, long)); /* macscreen.c */ - void screenUpdate OF((WindowPtr)); /* macscreen.c */ - void screenClose OF((void)); /* macscreen.c */ - int macgetch OF((void)); /* macscreen.c */ - - int macmkdir OF((char *)); /* mac.c */ - short macopen OF((char *, short)); /* mac.c */ - short maccreat OF((char *)); /* mac.c */ - short macread OF((short, char *, unsigned)); /* mac.c */ - long macwrite OF((short, char *, unsigned)); /* mac.c */ - short macclose OF((short)); /* mac.c */ - long maclseek OF((short, long, short)); /* mac.c */ - char *macfgets OF((char *, int, FILE *)); /* mac.c */ - int macfprintf OF((FILE *, char *, ...)); /* mac.c */ - int macprintf OF((char *, ...)); /* mac.c */ -#endif - -/*--------------------------------------------------------------------------- - MSDOS-only functions: - ---------------------------------------------------------------------------*/ - -#if (defined(MSDOS) && (defined(__GO32__) || defined(__EMX__))) - unsigned _dos_getcountryinfo(void *); /* msdos.c */ -#if (!defined(__DJGPP__) || (__DJGPP__ < 2)) - unsigned _dos_setftime(int, unsigned short, unsigned short); /* msdos.c */ - unsigned _dos_setfileattr(char *, unsigned); /* msdos.c */ - unsigned _dos_creat(char *, unsigned, int *); /* msdos.c */ - void _dos_getdrive(unsigned *); /* msdos.c */ - unsigned _dos_close(int); /* msdos.c */ -#endif /* !__DJGPP__ || (__DJGPP__ < 2) */ -#endif - -/*--------------------------------------------------------------------------- - OS/2-only functions: - ---------------------------------------------------------------------------*/ - -#ifdef OS2 /* GetFileTime conflicts with something in Win32 header files */ -#if (defined(REENTRANT) && defined(USETHREADID)) - ulg GetThreadId OF((void)); -#endif - int GetCountryInfo OF((void)); /* os2.c */ - long GetFileTime OF((ZCONST char *name)); /* os2.c */ -/* static void SetPathAttrTimes OF((__GPRO__ int flags, int dir)); os2.c */ -/* static int SetEAs OF((__GPRO__ const char *path, - void *eablock)); os2.c */ -/* static int SetACL OF((__GPRO__ const char *path, - void *eablock)); os2.c */ -/* static int IsFileNameValid OF((const char *name)); os2.c */ -/* static void map2fat OF((char *pathcomp, char **pEndFAT)); os2.c */ -/* static int SetLongNameEA OF((char *name, char *longname)); os2.c */ -/* static void InitNLS OF((void)); os2.c */ - int IsUpperNLS OF((int nChr)); /* os2.c */ - int ToLowerNLS OF((int nChr)); /* os2.c */ - void DebugMalloc OF((void)); /* os2.c */ -#endif - -/*--------------------------------------------------------------------------- - QDOS-only functions: - ---------------------------------------------------------------------------*/ - -#ifdef QDOS - int QMatch (uch, uch); - void QFilename (__GPRO__ char *); - char *Qstrfix (char *); - int QReturn (int zip_error); -#endif - -/*--------------------------------------------------------------------------- - TOPS20-only functions: - ---------------------------------------------------------------------------*/ - -#ifdef TOPS20 - int upper OF((char *s)); /* tops20.c */ - int enquote OF((char *s)); /* tops20.c */ - int dequote OF((char *s)); /* tops20.c */ - int fnlegal OF(()); /* error if prototyped? */ /* tops20.c */ -#endif - -/*--------------------------------------------------------------------------- - VM/CMS- and MVS-only functions: - ---------------------------------------------------------------------------*/ - -#ifdef CMS_MVS - extent getVMMVSexfield OF((char *type, uch *ef_block, unsigned datalen)); - FILE *vmmvs_open_infile OF((__GPRO)); /* vmmvs.c */ - void close_infile OF((__GPRO)); /* vmmvs.c */ -#endif - -/*--------------------------------------------------------------------------- - VMS-only functions: - ---------------------------------------------------------------------------*/ - -#ifdef VMS - int check_format OF((__GPRO)); /* vms.c */ -/* int open_outfile OF((__GPRO)); * (see fileio.c) vms.c */ -/* int flush OF((__GPRO__ uch *rawbuf, unsigned size, - int final_flag)); * (see fileio.c) vms.c */ -#ifdef RETURN_CODES - void return_VMS OF((__GPRO__ int zip_error)); /* vms.c */ -#else - void return_VMS OF((int zip_error)); /* vms.c */ -#endif -#ifdef VMSCLI - ulg vms_unzip_cmdline OF((int *, char ***)); /* cmdline.c */ - int VMSCLI_usage OF((__GPRO__ int error)); /* cmdline.c */ -#endif -#endif - -/*--------------------------------------------------------------------------- - WIN32-only functions: - ---------------------------------------------------------------------------*/ - -#ifdef WIN32 - int IsWinNT OF((void)); /* win32.c */ -#ifdef NTSD_EAS - void process_defer_NT OF((__GPRO)); /* win32.c */ - int test_NTSD OF((__GPRO__ uch *eb, unsigned eb_size, - uch *eb_ucptr, ulg eb_ucsize)); /* win32.c */ -# define TEST_NTSD test_NTSD -#endif -#ifdef W32_STAT_BANDAID - int zstat_win32 OF((__W32STAT_GLOBALS__ - const char *path, struct stat *buf)); /* win32.c */ -#endif -#endif - -/*--------------------------------------------------------------------------- - Miscellaneous/shared functions: - ---------------------------------------------------------------------------*/ - -Uz_Globs *globalsCtor OF((void)); /* globals.c */ - -void envargs OF((__GPRO__ int *Pargc, char ***Pargv, - ZCONST char *envstr, ZCONST char *envstr2)); - /* envargs.c */ -void mksargs OF((int *argcp, char ***argvp)); /* envargs.c */ - -int match OF((ZCONST char *s, ZCONST char *p, - int ic)); /* match.c */ -int iswild OF((ZCONST char *p)); /* match.c */ - -#ifdef DYNALLOC_CRCTAB - void free_crc_table OF((void)); /* crctab.c */ -#endif -#ifndef USE_ZLIB - ZCONST ulg near *get_crc_table OF((void)); /* funzip.c, crctab.c */ - ulg crc32 OF((ulg crc, ZCONST uch *buf, extent len)); -#endif /* !USE_ZLIB */ /* assembler source or crc32.c */ - -int dateformat OF((void)); /* currently, only msdos.c */ -#ifndef WINDLL - void version OF((__GPRO)); /* local */ -#endif -int mapattr OF((__GPRO)); /* local */ -int mapname OF((__GPRO__ int renamed)); /* local */ -int checkdir OF((__GPRO__ char *pathcomp, int flag)); /* local */ -char *do_wild OF((__GPRO__ char *wildzipfn)); /* local */ -char *GetLoadPath OF((__GPRO)); /* local */ -#if (defined(MORE) && (defined(UNIX) || defined(VMS) || defined(__BEOS__))) - int screenlines OF((void)); /* local */ -#endif -#ifndef MTS /* macro in MTS */ - void close_outfile OF((__GPRO)); /* local */ -#endif -#ifdef SET_DIR_ATTRIB - int set_direc_attribs OF((__GPRO__ dirtime *d)); /* local */ -#endif -#ifdef TIMESTAMP -# ifdef WIN32 - int stamp_file OF((__GPRO__ - ZCONST char *fname, time_t modtime)); /* local */ -# else - int stamp_file OF((ZCONST char *fname, time_t modtime)); /* local */ -# endif -#endif -#ifdef SYSTEM_SPECIFIC_CTOR - void SYSTEM_SPECIFIC_CTOR OF((__GPRO)); /* local */ -#endif - - - - - -/************/ -/* Macros */ -/************/ - -#ifndef MAX -# define MAX(a,b) ((a) > (b) ? (a) : (b)) -#endif -#ifndef MIN -# define MIN(a,b) ((a) < (b) ? (a) : (b)) -#endif - -#ifdef DEBUG -# define Trace(x) fprintf x -#else -# define Trace(x) -#endif - -#ifdef DEBUG_TIME -# define TTrace(x) fprintf x -#else -# define TTrace(x) -#endif - -#ifdef NO_DEBUG_IN_MACROS -# define MTrace(x) -#else -# define MTrace(x) Trace(x) -#endif - -#if (defined(UNIX) || defined(T20_VMS)) /* generally old systems */ -# define ToLower(x) ((char)(isupper((int)x)? tolower((int)x) : x)) -#else -# define ToLower tolower /* assumed "smart"; used in match() */ -#endif - -#ifdef USE_STRM_INPUT - /* ``Replace'' the unbuffered UNIX style I/O function with similar - * standard C functions from . - */ -# define read(fd,buf,n) fread((buf),1,(n),(FILE *)(fd)) -# define lseek(fd,o,w) fseek((FILE *)(fd),(o),(w)) -# define close(fd) fclose((FILE *)(fd)) -#endif /* USE_STRM_INPUT */ - -/* The return value of the Info() "macro function" is never checked in - * UnZip. Otherwise, to get the same behaviour as for (*G.message)(), the - * Info() definition for "FUNZIP" would have to be corrected: - * #define Info(buf,flag,sprf_arg) \ - * (fprintf((flag)&1? stderr : stdout, \ - * (char *)(sprintf sprf_arg, (buf))) == EOF) - */ -#ifndef Info /* may already have been defined for redirection */ -# ifdef FUNZIP -# define Info(buf,flag,sprf_arg) \ - fprintf((flag)&1? stderr : stdout, (char *)(sprintf sprf_arg, (buf))) -# else -# ifdef INT_SPRINTF /* optimized version for "int sprintf()" flavour */ -# define Info(buf,flag,sprf_arg) \ - (*G.message)((zvoid *)&G, (uch *)(buf), (ulg)sprintf sprf_arg, (flag)) -# else /* generic version, does not use sprintf() return value */ -# define Info(buf,flag,sprf_arg) \ - (*G.message)((zvoid *)&G, (uch *)(buf), \ - (ulg)(sprintf sprf_arg, strlen((char *)(buf))), (flag)) -# endif -# endif -#endif /* !Info */ - -/* The following macros wrappers around the fnfilter function are used many - * times to prepare archive entry names or name components for displaying - * listings and (warning/error) messages. They use sections in the upper half - * of 'slide' as buffer, since their output is normally fed through the - * Info() macro with 'slide' (the start of this area) as message buffer. - */ -#define FnFilter1(fname) fnfilter((fname), slide + (WSIZE>>1)) -#define FnFilter2(fname) fnfilter((fname), slide + ((WSIZE>>1) + (WSIZE>>2))) - -#ifndef FUNZIP /* used only in inflate.c */ -# define MESSAGE(str,len,flag) (*G.message)((zvoid *)&G,(str),(len),(flag)) -#endif - -#if 0 /* Optimization: use the (const) result of crc32(0L,NULL,0) */ -# define CRCVAL_INITIAL crc32(0L, NULL, 0) -#else -# define CRCVAL_INITIAL 0L -#endif - -#ifndef TEST_NTSD /* "NTSD valid?" checking function */ -# define TEST_NTSD NULL /* ... is not available */ -#endif - -/* - * Seek to the block boundary of the block which includes abs_offset, - * then read block into input buffer and set pointers appropriately. - * If block is already in the buffer, just set the pointers. This macro - * is used by uz_end_central (process.c), zi_end_central (zipinfo.c) and - * do_string (fileio.c). A slightly modified version is embedded within - * extract_or_test_files (extract.c). readbyte() and readbuf() (fileio.c) - * are compatible. NOTE THAT abs_offset is intended to be the "proper off- - * set" (i.e., if there were no extra bytes prepended); cur_zipfile_bufstart - * contains the corrected offset. - * - * Since ZLSEEK is never used during decompression, it is safe to use the - * slide[] buffer for the error message. - * - * The awkward "%cbs_offset" construct is provided for the obnoxious Solaris - * compiler, which wants to do macro substitution inside strings. - */ - -#ifndef ZLSEEK -# ifdef USE_STRM_INPUT -# define _ZLS_RELOAD(abs_offset) {\ - MTrace((stderr, "ZLSEEK: %cbs_offset = %ld, G.extra_bytes = %ld\n",\ - 'a', (abs_offset), G.extra_bytes));\ - fseek(G.zipfd,(LONGINT)bufstart,SEEK_SET);\ - G.cur_zipfile_bufstart = ftell(G.zipfd);\ - MTrace((stderr,\ - " request = %ld, (abs+extra) = %ld, inbuf_offset = %ld\n",\ - request, ((abs_offset)+G.extra_bytes), inbuf_offset));\ - MTrace((stderr, " bufstart = %ld, cur_zipfile_bufstart = %ld\n",\ - bufstart, G.cur_zipfile_bufstart));\ - if ((G.incnt = fread((char *)G.inbuf,1,INBUFSIZ,G.zipfd)) <= 0)\ - return(PK_EOF);\ - G.inptr = G.inbuf + (int)inbuf_offset;\ - G.incnt -= (int)inbuf_offset;\ - } -# else /* !USE_STRM_INPUT */ -# define _ZLS_RELOAD(abs_offset) {\ - MTrace((stderr, "ZLSEEK: %cbs_offset = %ld, G.extra_bytes = %ld\n",\ - 'a', (abs_offset), G.extra_bytes));\ - G.cur_zipfile_bufstart = lseek(G.zipfd,(LONGINT)bufstart,SEEK_SET);\ - MTrace((stderr,\ - " request = %ld, (abs+extra) = %ld, inbuf_offset = %ld\n",\ - request, ((abs_offset)+G.extra_bytes), inbuf_offset));\ - MTrace((stderr, " bufstart = %ld, cur_zipfile_bufstart = %ld\n",\ - bufstart, G.cur_zipfile_bufstart));\ - if ((G.incnt = read(G.zipfd,(char *)G.inbuf,INBUFSIZ)) <= 0)\ - return(PK_EOF);\ - G.inptr = G.inbuf + (int)inbuf_offset;\ - G.incnt -= (int)inbuf_offset;\ - } -# endif /* ?USE_STRM_INPUT */ - -# define ZLSEEK(abs_offset) {\ - LONGINT request = (abs_offset) + G.extra_bytes;\ - LONGINT inbuf_offset = request % INBUFSIZ;\ - LONGINT bufstart = request - inbuf_offset;\ -\ - if (request < 0) {\ - Info(slide, 1, ((char *)slide, LoadFarStringSmall(SeekMsg),\ - G.zipfn, LoadFarString(ReportMsg)));\ - return(PK_BADERR);\ - } else if (bufstart != G.cur_zipfile_bufstart)\ - _ZLS_RELOAD(abs_offset)\ - else {\ - G.incnt += (G.inptr-G.inbuf) - (int)inbuf_offset;\ - G.inptr = G.inbuf + (int)inbuf_offset;\ - }\ - } -#endif /* !ZLSEEK */ - -#define SKIP_(length) if(length&&((error=do_string(__G__ length,SKIP))!=0))\ - {error_in_archive=error; if(error>1) return error;} - -/* - * Skip a variable-length field, and report any errors. Used in zipinfo.c - * and unzip.c in several functions. - * - * macro SKIP_(length) - * ush length; - * { - * if (length && ((error = do_string(length, SKIP)) != 0)) { - * error_in_archive = error; /-* might be warning *-/ - * if (error > 1) /-* fatal *-/ - * return (error); - * } - * } - * - */ - - -#ifdef FUNZIP -# define FLUSH(w) flush(__G__ (ulg)(w)) -# define NEXTBYTE getc(G.in) /* redefined in crypt.h if full version */ -#else -# define FLUSH(w) if (G.mem_mode) memflush(__G__ redirSlide,(ulg)(w)); \ - else flush(__G__ redirSlide,(ulg)(w),0) -# define NEXTBYTE (--G.incnt >= 0 ? (int)(*G.inptr++) : readbyte(__G)) -#endif - - -#define READBITS(nbits,zdest) {if(nbits>G.bits_left) {int temp; G.zipeof=1;\ - while (G.bits_left<=8*(int)(sizeof(G.bitbuf)-1) && (temp=NEXTBYTE)!=EOF) {\ - G.bitbuf|=(ulg)temp<>=nbits;\ - G.bits_left-=nbits;} - -/* - * macro READBITS(nbits,zdest) * only used by unreduce and unshrink * - * { - * if (nbits > G.bits_left) { * fill G.bitbuf, 8*sizeof(ulg) bits * - * int temp; - * - * G.zipeof = 1; - * while (G.bits_left <= 8*(int)(sizeof(G.bitbuf)-1) && - * (temp = NEXTBYTE) != EOF) { - * G.bitbuf |= (ulg)temp << G.bits_left; - * G.bits_left += 8; - * G.zipeof = 0; - * } - * } - * zdest = (shrint)((ush)G.bitbuf & mask_bits[nbits]); - * G.bitbuf >>= nbits; - * G.bits_left -= nbits; - * } - * - */ - - -/* GRR: should change name to STRLOWER and use StringLower if possible */ - -/* - * Copy the zero-terminated string in str1 into str2, converting any - * uppercase letters to lowercase as we go. str2 gets zero-terminated - * as well, of course. str1 and str2 may be the same character array. - */ -#ifdef __human68k__ -# define TOLOWER(str1, str2) \ - { \ - char *p=(str1), *q=(str2); \ - uch c; \ - while ((c = *p++) != '\0') { \ - if (iskanji(c)) { \ - if (*p == '\0') \ - break; \ - *q++ = c; \ - *q++ = *p++; \ - } else \ - *q++ = isupper(c) ? tolower(c) : c; \ - } \ - *q = '\0'; \ - } -#else -# define TOLOWER(str1, str2) \ - { \ - char *p, *q; \ - p = (str1) - 1; \ - q = (str2); \ - while (*++p) \ - *q++ = (char)(isupper((int)(*p))? tolower((int)(*p)) : *p); \ - *q = '\0'; \ - } -#endif -/* - * NOTES: This macro makes no assumptions about the characteristics of - * the tolower() function or macro (beyond its existence), nor does it - * make assumptions about the structure of the character set (i.e., it - * should work on EBCDIC machines, too). The fact that either or both - * of isupper() and tolower() may be macros has been taken into account; - * watch out for "side effects" (in the C sense) when modifying this - * macro. - */ - -#ifndef foreign -# define foreign(c) (c) -#endif - -#ifndef native -# define native(c) (c) -# define A_TO_N(str1) -#else -# ifndef NATIVE -# define NATIVE "native chars" -# endif -# define A_TO_N(str1) {register uch *p;\ - for (p=(uch *)(str1); *p; p++) *p=native(*p);} -#endif -/* - * Translate the zero-terminated string in str1 from ASCII to the native - * character set. The translation is performed in-place and uses the - * "native" macro to translate each character. - * - * NOTE: Using the "native" macro means that is it the only part of unzip - * which knows which translation table (if any) is actually in use to - * produce the native character set. This makes adding new character set - * translation tables easy, insofar as all that is needed is an appropriate - * "native" macro definition and the translation table itself. Currently, - * the only non-ASCII native character set implemented is EBCDIC, but this - * may not always be so. - */ - - -/* default setup for internal codepage: assume ISO 8859-1 compatibility!! */ -#if (!defined(NATIVE) && !defined(CRTL_CP_IS_ISO) && !defined(CRTL_CP_IS_OEM)) -# define CRTL_CP_IS_ISO -#endif - - -/* Translate "extended ASCII" chars (OEM coding for DOS and OS/2; else - * ISO-8859-1 [ISO Latin 1, Win Ansi,...]) into the internal "native" - * code page. As with A_TO_N(), conversion is done in place. - */ -#ifndef _ISO_INTERN -# ifdef CRTL_CP_IS_OEM -# ifndef IZ_ISO2OEM_ARRAY -# define IZ_ISO2OEM_ARRAY -# endif -# define _ISO_INTERN(str1) {register uch *p;\ - for (p=(uch *)(str1); *p; p++)\ - *p = native((*p & 0x80) ? iso2oem[*p & 0x7f] : *p);} -# else -# define _ISO_INTERN(str1) A_TO_N(str1) -# endif -#endif - -#ifndef _OEM_INTERN -# ifdef CRTL_CP_IS_OEM -# define _OEM_INTERN(str1) A_TO_N(str1) -# else -# ifndef IZ_OEM2ISO_ARRAY -# define IZ_OEM2ISO_ARRAY -# endif -# define _OEM_INTERN(str1) {register uch *p;\ - for (p=(uch *)(str1); *p; p++)\ - *p = native((*p & 0x80) ? oem2iso[*p & 0x7f] : *p);} -# endif -#endif - -#ifndef STR_TO_ISO -# ifdef CRTL_CP_IS_ISO -# define STR_TO_ISO strcpy -# else -# define STR_TO_ISO str2iso -# define NEED_STR2ISO -# endif -#endif - -#ifndef STR_TO_OEM -# ifdef CRTL_CP_IS_OEM -# define STR_TO_OEM strcpy -# else -# define STR_TO_OEM str2oem -# define NEED_STR2OEM -# endif -#endif - -#if (!defined(INTERN_TO_ISO) && !defined(ASCII2ISO)) -# ifdef CRTL_CP_IS_OEM - /* know: "ASCII" is "OEM" */ -# define ASCII2ISO(c) (((c) & 0x80) ? oem2iso[(c) & 0x7f] : (c)) -# if (defined(NEED_STR2ISO) && !defined(CRYP_USES_OEM2ISO)) -# define CRYP_USES_OEM2ISO -# endif -# else - /* assume: "ASCII" is "ISO-ANSI" */ -# define ASCII2ISO(c) (c) -# endif -#endif - -#if (!defined(INTERN_TO_OEM) && !defined(ASCII2OEM)) -# ifdef CRTL_CP_IS_OEM - /* know: "ASCII" is "OEM" */ -# define ASCII2OEM(c) (c) -# else - /* assume: "ASCII" is "ISO-ANSI" */ -# define ASCII2OEM(c) (((c) & 0x80) ? iso2oem[(c) & 0x7f] : (c)) -# if (defined(NEED_STR2OEM) && !defined(CRYP_USES_ISO2OEM)) -# define CRYP_USES_ISO2OEM -# endif -# endif -#endif - -/* codepage conversion setup for testp() in crypt.c */ -#ifdef CRTL_CP_IS_ISO -# ifndef STR_TO_CP2 -# define STR_TO_CP2 STR_TO_OEM -# endif -#else -# ifdef CRTL_CP_IS_OEM -# ifndef STR_TO_CP2 -# define STR_TO_CP2 STR_TO_ISO -# endif -# else /* native internal CP is neither ISO nor OEM */ -# ifndef STR_TO_CP1 -# define STR_TO_CP1 STR_TO_ISO -# endif -# ifndef STR_TO_CP2 -# define STR_TO_CP2 STR_TO_OEM -# endif -# endif -#endif - - -/* Convert filename (and file comment string) into "internal" charset. - * This macro assumes that Zip entry filenames are coded in OEM (IBM DOS) - * codepage when made on - * -> DOS (this includes 16-bit Windows 3.1) (FS_FAT_) - * -> OS/2 (FS_HPFS_) - * -> Win95/WinNT with Nico Mak's WinZip (FS_NTFS_ && hostver == "5.0") - * - * All other ports are assumed to code zip entry filenames in ISO 8859-1. - */ -#ifndef Ext_ASCII_TO_Native -# define Ext_ASCII_TO_Native(string, hostnum, hostver) \ - if ((hostnum) == FS_FAT_ || (hostnum) == FS_HPFS_ || \ - ((hostnum) == FS_NTFS_ && (hostver) == 50)) { \ - _OEM_INTERN((string)); \ - } else { \ - _ISO_INTERN((string)); \ - } -#endif - - - -/**********************/ -/* Global constants */ -/**********************/ - - extern ZCONST ush near mask_bits[]; - extern ZCONST char *fnames[2]; - -#ifdef EBCDIC - extern ZCONST uch ebcdic[]; -#endif -#ifdef IZ_ISO2OEM_ARRAY - extern ZCONST uch Far iso2oem[]; -#endif -#ifdef IZ_OEM2ISO_ARRAY - extern ZCONST uch Far oem2iso[]; -#endif - - extern ZCONST char Far VersionDate[]; - extern ZCONST char Far CentSigMsg[]; - extern ZCONST char Far EndSigMsg[]; - extern ZCONST char Far SeekMsg[]; - extern ZCONST char Far FilenameNotMatched[]; - extern ZCONST char Far ExclFilenameNotMatched[]; - extern ZCONST char Far ReportMsg[]; - -#ifndef SFX - extern ZCONST char Far CompiledWith[]; -#endif /* !SFX */ - - - -/***********************************/ -/* Global (shared?) RTL variables */ -/***********************************/ - -#ifdef DECLARE_ERRNO - extern int errno; -#endif - - -#endif /* !__unzpriv_h */ diff --git a/Build/source/libs/unzip/version.h b/Build/source/libs/unzip/version.h deleted file mode 100644 index 763cc13078c..00000000000 --- a/Build/source/libs/unzip/version.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - version.h (for UnZip) by Info-ZIP. - - This header file is not copyrighted and may be distributed without - restriction. (That's a little geek humor, heh heh.) - */ - -#ifndef __version_h /* don't include more than once */ -#define __version_h - -#ifdef BETA -# undef BETA /* define BETA for internal beta releases */ -#endif - -#ifdef BETA -# define BETALEVEL "d BETA" -# define VERSION_DATE "27 November 98" /* internal beta version */ -#else -# define BETALEVEL "" -# define VERSION_DATE "28 November 1998" /* official release version */ -# define RELEASE -#endif - -#define UZ_MAJORVER 5 /* UnZip */ -#define UZ_MINORVER 4 - -#define ZI_MAJORVER 2 /* ZipInfo */ -#define ZI_MINORVER 3 - -#define PATCHLEVEL 0 - - -/* these are obsolete but remain for backward compatibility: */ -#define D2_MAJORVER UZ_MAJORVER /* DLL for OS/2 */ -#define D2_MINORVER UZ_MINORVER -#define D2_PATCHLEVEL PATCHLEVEL - -#define DW_MAJORVER UZ_MAJORVER /* DLL for MS Windows */ -#define DW_MINORVER UZ_MINORVER -#define DW_PATCHLEVEL PATCHLEVEL - -#define WIN_VERSION_DATE VERSION_DATE - -#endif /* !__version_h */ diff --git a/Build/source/libs/unzip/win32/nt.c b/Build/source/libs/unzip/win32/nt.c deleted file mode 100644 index 5f5572381f1..00000000000 --- a/Build/source/libs/unzip/win32/nt.c +++ /dev/null @@ -1,659 +0,0 @@ -/* - - Copyright (c) 1996 Scott Field - - Module Name: - - nt.c - - Abstract: - - This module implements WinNT security descriptor operations for the - Win32 Info-ZIP project. Operation such as setting file security, - using/querying local and remote privileges, and queuing of operations - is performed here. The contents of this module are only relevant - when the code is running on Windows NT, and the target volume supports - persistent Acl storage. - - User privileges that allow accessing certain privileged aspects of the - security descriptor (such as the Sacl) are only used if the user specified - to do so. - - Author: - - Scott Field (sfield@microsoft.com) - - Last revised: 18 Jan 97 - - */ - -#define WIN32_LEAN_AND_MEAN -#define UNZIP_INTERNAL -#include "unzip.h" -#include -#ifdef __RSXNT__ -# include "win32/rsxntwin.h" -#endif -#include "win32/nt.h" - - -#ifdef NTSD_EAS /* This file is only needed for NTSD handling */ - -/* Borland C++ does not define FILE_SHARE_DELETE. Others also? */ -#ifndef FILE_SHARE_DELETE -# define FILE_SHARE_DELETE 0x00000004 -#endif - - -/* private prototypes */ - -static BOOL Initialize(VOID); -#if 0 /* currently unused */ -static BOOL Shutdown(VOID); -#endif -static BOOL DeferSet(char *resource, PVOLUMECAPS VolumeCaps, uch *buffer); -static VOID GetRemotePrivilegesSet(CHAR *FileName, PDWORD dwRemotePrivileges); -static VOID InitLocalPrivileges(VOID); - - -BOOL bInitialized = FALSE; /* module level stuff initialized? */ -HANDLE hInitMutex = NULL; /* prevent multiple initialization */ - -BOOL g_bRestorePrivilege = FALSE; /* for local set file security override */ -BOOL g_bSaclPrivilege = FALSE; /* for local set sacl operations, only when - restore privilege not present */ - -/* our single cached volume capabilities structure that describes the last - volume root we encountered. A single entry like this works well in the - zip/unzip scenario for a number of reasons: - 1. typically one extraction path during unzip. - 2. typically process one volume at a time during zip, and then move - on to the next. - 3. no cleanup code required and no memory leaks. - 4. simple code. - - This approach should be reworked to a linked list approach if we expect to - be called by many threads which are processing a variety of input/output - volumes, since lock contention and stale data may become a bottleneck. */ - -VOLUMECAPS g_VolumeCaps; -CRITICAL_SECTION VolumeCapsLock; - - -/* our deferred set structure linked list element, used for making a copy - of input data which is used at a later time to process the original input - at a time when it makes more sense. eg, applying security to newly created - directories, after all files have been placed in such directories. */ - -CRITICAL_SECTION SetDeferLock; - -typedef struct _DEFERRED_SET { - struct _DEFERRED_SET *Next; - uch *buffer; /* must point to DWORD aligned block */ - PVOLUMECAPS VolumeCaps; - char *resource; -} DEFERRED_SET, *PDEFERRED_SET, *LPDEFERRED_SET; - -PDEFERRED_SET pSetHead = NULL; -PDEFERRED_SET pSetTail; - -static BOOL Initialize(VOID) -{ - HANDLE hMutex; - HANDLE hOldMutex; - - if(bInitialized) return TRUE; - - hMutex = CreateMutex(NULL, TRUE, NULL); - if(hMutex == NULL) return FALSE; - - hOldMutex = (HANDLE)InterlockedExchange((LPLONG)&hInitMutex, (LONG)hMutex); - - if(hOldMutex != NULL) { - /* somebody setup the mutex already */ - InterlockedExchange((LPLONG)&hInitMutex, (LONG)hOldMutex); - - CloseHandle(hMutex); /* close new, un-needed mutex */ - - /* wait for initialization to complete and return status */ - WaitForSingleObject(hOldMutex, INFINITE); - ReleaseMutex(hOldMutex); - - return bInitialized; - } - - /* initialize module level resources */ - - InitializeCriticalSection( &SetDeferLock ); - - InitializeCriticalSection( &VolumeCapsLock ); - memset(&g_VolumeCaps, 0, sizeof(VOLUMECAPS)); - - InitLocalPrivileges(); - - bInitialized = TRUE; - - ReleaseMutex(hMutex); /* release correct mutex */ - - return TRUE; -} - -#if 0 /* currently not used ! */ -static BOOL Shutdown(VOID) -{ - /* really need to free critical sections, disable enabled privilges, etc, - but doing so brings up possibility of race conditions if those resources - are about to be used. The easiest way to handle this is let these - resources be freed when the process terminates... */ - - return TRUE; -} -#endif /* never */ - - -static BOOL DeferSet(char *resource, PVOLUMECAPS VolumeCaps, uch *buffer) -{ - PDEFERRED_SET psd; - DWORD cbDeferSet; - DWORD cbResource; - DWORD cbBuffer; - - if(!bInitialized) if(!Initialize()) return FALSE; - - cbResource = lstrlenA(resource) + 1; - cbBuffer = GetSecurityDescriptorLength((PSECURITY_DESCRIPTOR)buffer); - cbDeferSet = sizeof(DEFERRED_SET) + cbBuffer + sizeof(VOLUMECAPS) + - cbResource; - - psd = (PDEFERRED_SET)HeapAlloc(GetProcessHeap(), 0, cbDeferSet); - if(psd == NULL) return FALSE; - - psd->Next = NULL; - psd->buffer = (uch *)(psd+1); - psd->VolumeCaps = (PVOLUMECAPS)((char *)psd->buffer + cbBuffer); - psd->resource = (char *)((char *)psd->VolumeCaps + sizeof(VOLUMECAPS)); - - memcpy(psd->buffer, buffer, cbBuffer); - memcpy(psd->VolumeCaps, VolumeCaps, sizeof(VOLUMECAPS)); - psd->VolumeCaps->bProcessDefer = TRUE; - memcpy(psd->resource, resource, cbResource); - - /* take defer lock */ - EnterCriticalSection( &SetDeferLock ); - - /* add element at tail of list */ - - if(pSetHead == NULL) { - pSetHead = psd; - } else { - pSetTail->Next = psd; - } - - pSetTail = psd; - - /* release defer lock */ - LeaveCriticalSection( &SetDeferLock ); - - return TRUE; -} - -BOOL ProcessDefer(PDWORD dwDirectoryCount, PDWORD dwBytesProcessed, - PDWORD dwDirectoryFail, PDWORD dwBytesFail) -{ - PDEFERRED_SET This; - PDEFERRED_SET Next; - - *dwDirectoryCount = 0; - *dwBytesProcessed = 0; - - *dwDirectoryFail = 0; - *dwBytesFail = 0; - - if(!bInitialized) return TRUE; /* nothing to do */ - - EnterCriticalSection( &SetDeferLock ); - - This = pSetHead; - - while(This) { - - if(SecuritySet(This->resource, This->VolumeCaps, This->buffer)) { - (*dwDirectoryCount)++; - *dwBytesProcessed += - GetSecurityDescriptorLength((PSECURITY_DESCRIPTOR)This->buffer); - } else { - (*dwDirectoryFail)++; - *dwBytesFail += - GetSecurityDescriptorLength((PSECURITY_DESCRIPTOR)This->buffer); - } - - Next = This->Next; - HeapFree(GetProcessHeap(), 0, This); - This = Next; - } - - pSetHead = NULL; - - LeaveCriticalSection( &SetDeferLock ); - - return TRUE; -} - -BOOL ValidateSecurity(uch *securitydata) -{ - PSECURITY_DESCRIPTOR sd = (PSECURITY_DESCRIPTOR)securitydata; - PACL pAcl; - PSID pSid; - BOOL bAclPresent; - BOOL bDefaulted; - - if(!IsWinNT()) return TRUE; /* don't do anything if not on WinNT */ - - if(!IsValidSecurityDescriptor(sd)) return FALSE; - - /* verify Dacl integrity */ - - if(!GetSecurityDescriptorDacl(sd, &bAclPresent, &pAcl, &bDefaulted)) - return FALSE; - - if(bAclPresent) { - if(!IsValidAcl(pAcl)) return FALSE; - } - - /* verify Sacl integrity */ - - if(!GetSecurityDescriptorSacl(sd, &bAclPresent, &pAcl, &bDefaulted)) - return FALSE; - - if(bAclPresent) { - if(!IsValidAcl(pAcl)) return FALSE; - } - - /* verify owner integrity */ - - if(!GetSecurityDescriptorOwner(sd, &pSid, &bDefaulted)) - return FALSE; - - if(pSid != NULL) { - if(!IsValidSid(pSid)) return FALSE; - } - - /* verify group integrity */ - - if(!GetSecurityDescriptorGroup(sd, &pSid, &bDefaulted)) - return FALSE; - - if(pSid != NULL) { - if(!IsValidSid(pSid)) return FALSE; - } - - return TRUE; -} - -static VOID GetRemotePrivilegesSet(char *FileName, PDWORD dwRemotePrivileges) -{ - HANDLE hFile; - - *dwRemotePrivileges = 0; - - /* see if we have the SeRestorePrivilege */ - - hFile = CreateFileA( - FileName, - ACCESS_SYSTEM_SECURITY | WRITE_DAC | WRITE_OWNER | READ_CONTROL, - FILE_SHARE_READ | FILE_SHARE_DELETE, /* no sd updating allowed here */ - NULL, - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS, - NULL - ); - - if(hFile != INVALID_HANDLE_VALUE) { - /* no remote way to determine SeRestorePrivilege -- just try a - read/write to simulate it */ - SECURITY_INFORMATION si = DACL_SECURITY_INFORMATION | - SACL_SECURITY_INFORMATION | OWNER_SECURITY_INFORMATION | - GROUP_SECURITY_INFORMATION; - PSECURITY_DESCRIPTOR sd; - DWORD cbBuf = 0; - - GetKernelObjectSecurity(hFile, si, NULL, cbBuf, &cbBuf); - - if(ERROR_INSUFFICIENT_BUFFER == GetLastError()) { - if((sd = HeapAlloc(GetProcessHeap(), 0, cbBuf)) != NULL) { - if(GetKernelObjectSecurity(hFile, si, sd, cbBuf, &cbBuf)) { - if(SetKernelObjectSecurity(hFile, si, sd)) - *dwRemotePrivileges |= OVERRIDE_RESTORE; - } - HeapFree(GetProcessHeap(), 0, sd); - } - } - - CloseHandle(hFile); - } else { - - /* see if we have the SeSecurityPrivilege */ - /* note we don't need this if we have SeRestorePrivilege */ - - hFile = CreateFileA( - FileName, - ACCESS_SYSTEM_SECURITY, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, /* max */ - NULL, - OPEN_EXISTING, - 0, - NULL - ); - - if(hFile != INVALID_HANDLE_VALUE) { - CloseHandle(hFile); - *dwRemotePrivileges |= OVERRIDE_SACL; - } - } -} - - -BOOL GetVolumeCaps( - char *rootpath, /* filepath, or NULL */ - char *name, /* filename associated with rootpath */ - PVOLUMECAPS VolumeCaps /* result structure describing capabilities */ - ) -{ - char TempRootPath[MAX_PATH + 1]; - DWORD cchTempRootPath = 0; - BOOL bSuccess = TRUE; /* assume success until told otherwise */ - - if(!bInitialized) if(!Initialize()) return FALSE; - - /* process the input path to produce a consistent path suitable for - compare operations and also suitable for certain picky Win32 API - that don't like forward slashes */ - - if(rootpath != NULL && rootpath[0] != '\0') { - DWORD i; - - cchTempRootPath = lstrlen(rootpath); - if(cchTempRootPath > MAX_PATH) return FALSE; - - /* copy input, converting forward slashes to back slashes as we go */ - - for(i = 0 ; i <= cchTempRootPath ; i++) { - if(rootpath[i] == '/') TempRootPath[i] = '\\'; - else TempRootPath[i] = rootpath[i]; - } - - /* check for UNC and Null terminate or append trailing \ as - appropriate */ - - /* possible valid UNCs we are passed follow: - \\machine\foo\bar (path is \\machine\foo\) - \\machine\foo (path is \\machine\foo\) - \\machine\foo\ - \\.\c$\ (FIXFIX: Win32API doesn't like this - GetComputerName()) - LATERLATER: handling mounted DFS drives in the future will require - slightly different logic which isn't available today. - This is required because directories can point at - different servers which have differing capabilities. - */ - - if(TempRootPath[0] == '\\' && TempRootPath[1] == '\\') { - DWORD slash = 0; - - for(i = 2 ; i < cchTempRootPath ; i++) { - if(TempRootPath[i] == '\\') { - slash++; - - if(slash == 2) { - i++; - TempRootPath[i] = '\0'; - cchTempRootPath = i; - break; - } - } - } - - /* if there was only one slash found, just tack another onto the - end */ - - if(slash == 1 && TempRootPath[cchTempRootPath] != '\\') { - TempRootPath[cchTempRootPath] = TempRootPath[0]; /* '\' */ - TempRootPath[cchTempRootPath+1] = '\0'; - cchTempRootPath++; - } - - } else { - - if(TempRootPath[1] == ':') { - - /* drive letter specified, truncate to root */ - TempRootPath[2] = '\\'; - TempRootPath[3] = '\0'; - cchTempRootPath = 3; - } else { - - /* must be file on current drive */ - TempRootPath[0] = '\0'; - cchTempRootPath = 0; - } - - } - - } /* if path != NULL */ - - /* grab lock protecting cached entry */ - EnterCriticalSection( &VolumeCapsLock ); - - if(!g_VolumeCaps.bValid || - lstrcmpi(g_VolumeCaps.RootPath, TempRootPath) != 0) - { - - /* no match found, build up new entry */ - - DWORD dwFileSystemFlags; - DWORD dwRemotePrivileges = 0; - BOOL bRemote = FALSE; - - /* release lock during expensive operations */ - LeaveCriticalSection( &VolumeCapsLock ); - - bSuccess = GetVolumeInformation( - (TempRootPath[0] == '\0') ? NULL : TempRootPath, - NULL, 0, - NULL, NULL, - &dwFileSystemFlags, - NULL, 0); - - - /* only if target volume supports Acls, and we were told to use - privileges do we need to go out and test for the remote case */ - - if(bSuccess && (dwFileSystemFlags & FS_PERSISTENT_ACLS) && - VolumeCaps->bUsePrivileges) - { - if(GetDriveType( (TempRootPath[0] == '\0') ? NULL : TempRootPath ) - == DRIVE_REMOTE) - { - bRemote = TRUE; - - /* make a determination about our remote capabilities */ - - GetRemotePrivilegesSet(name, &dwRemotePrivileges); - } - } - - /* always take the lock again, since we release it below */ - EnterCriticalSection( &VolumeCapsLock ); - - /* replace the existing data if successful */ - if(bSuccess) { - - lstrcpynA(g_VolumeCaps.RootPath, TempRootPath, cchTempRootPath+1); - g_VolumeCaps.bProcessDefer = FALSE; - g_VolumeCaps.dwFileSystemFlags = dwFileSystemFlags; - g_VolumeCaps.bRemote = bRemote; - g_VolumeCaps.dwRemotePrivileges = dwRemotePrivileges; - g_VolumeCaps.bValid = TRUE; - } - } - - if(bSuccess) { - /* copy input elements */ - g_VolumeCaps.bUsePrivileges = VolumeCaps->bUsePrivileges; - g_VolumeCaps.dwFileAttributes = VolumeCaps->dwFileAttributes; - - /* give caller results */ - memcpy(VolumeCaps, &g_VolumeCaps, sizeof(VOLUMECAPS)); - } else { - g_VolumeCaps.bValid = FALSE; - } - - LeaveCriticalSection( &VolumeCapsLock ); /* release lock */ - - return bSuccess; -} - - -BOOL SecuritySet(char *resource, PVOLUMECAPS VolumeCaps, uch *securitydata) -{ - HANDLE hFile; - DWORD dwDesiredAccess = 0; - DWORD dwFlags = 0; - PSECURITY_DESCRIPTOR sd = (PSECURITY_DESCRIPTOR)securitydata; - SECURITY_DESCRIPTOR_CONTROL sdc; - SECURITY_INFORMATION RequestedInfo = 0; - DWORD dwRev; - BOOL bRestorePrivilege = FALSE; - BOOL bSaclPrivilege = FALSE; - BOOL bSuccess; - - if(!bInitialized) if(!Initialize()) return FALSE; - - /* defer directory processing */ - - if(VolumeCaps->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { - if(!VolumeCaps->bProcessDefer) { - return DeferSet(resource, VolumeCaps, securitydata); - } else { - /* opening a directory requires FILE_FLAG_BACKUP_SEMANTICS */ - dwFlags |= FILE_FLAG_BACKUP_SEMANTICS; - } - } - - /* evaluate the input security desriptor and act accordingly */ - - if(!IsValidSecurityDescriptor(sd)) - return FALSE; - - if(!GetSecurityDescriptorControl(sd, &sdc, &dwRev)) - return FALSE; - - /* setup privilege usage based on if told we can use privileges, and if so, - what privileges we have */ - - if(VolumeCaps->bUsePrivileges) { - if(VolumeCaps->bRemote) { - /* use remotely determined privileges */ - if(VolumeCaps->dwRemotePrivileges & OVERRIDE_RESTORE) - bRestorePrivilege = TRUE; - - if(VolumeCaps->dwRemotePrivileges & OVERRIDE_SACL) - bSaclPrivilege = TRUE; - - } else { - /* use local privileges */ - bRestorePrivilege = g_bRestorePrivilege; - bSaclPrivilege = g_bSaclPrivilege; - } - } - - - /* if a Dacl is present write Dacl out */ - /* if we have SeRestorePrivilege, write owner and group info out */ - - if(sdc & SE_DACL_PRESENT) { - dwDesiredAccess |= WRITE_DAC; - RequestedInfo |= DACL_SECURITY_INFORMATION; - - if(bRestorePrivilege) { - dwDesiredAccess |= WRITE_OWNER; - RequestedInfo |= (OWNER_SECURITY_INFORMATION | - GROUP_SECURITY_INFORMATION); - } - } - - /* if a Sacl is present and we have either SeRestorePrivilege or - SeSystemSecurityPrivilege try to write Sacl out */ - - if((sdc & SE_SACL_PRESENT) && (bRestorePrivilege || bSaclPrivilege)) { - dwDesiredAccess |= ACCESS_SYSTEM_SECURITY; - RequestedInfo |= SACL_SECURITY_INFORMATION; - } - - if(RequestedInfo == 0) /* nothing to do */ - return FALSE; - - if(bRestorePrivilege) - dwFlags |= FILE_FLAG_BACKUP_SEMANTICS; - - hFile = CreateFileA( - resource, - dwDesiredAccess, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,/* max sharing */ - NULL, - OPEN_EXISTING, - dwFlags, - NULL - ); - - if(hFile == INVALID_HANDLE_VALUE) - return FALSE; - - bSuccess = SetKernelObjectSecurity(hFile, RequestedInfo, sd); - - CloseHandle(hFile); - - return bSuccess; -} - -static VOID InitLocalPrivileges(VOID) -{ - HANDLE hToken; - TOKEN_PRIVILEGES tp; - - /* try to enable some interesting privileges that give us the ability - to get some security information that we normally cannot. - - note that enabling privileges is only relevant on the local machine; - when accessing files that are on a remote machine, any privileges - that are present on the remote machine get enabled by default. */ - - if(!OpenProcessToken(GetCurrentProcess(), - TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken)) - return; - - tp.PrivilegeCount = 1; - tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; - - if(LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &tp.Privileges[0].Luid)) { - - /* try to enable SeRestorePrivilege; if this succeeds, we can write - all aspects of the security descriptor */ - - if(AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL) && - GetLastError() == ERROR_SUCCESS) g_bRestorePrivilege = TRUE; - - } - - /* try to enable SeSystemSecurityPrivilege, if SeRestorePrivilege not - present; if this succeeds, we can write the Sacl */ - - if(!g_bRestorePrivilege && - LookupPrivilegeValue(NULL, SE_SECURITY_NAME, &tp.Privileges[0].Luid)) { - - if(AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL) && - GetLastError() == ERROR_SUCCESS) g_bSaclPrivilege = TRUE; - } - - CloseHandle(hToken); -} -#endif /* NTSD_EAS */ diff --git a/Build/source/libs/unzip/win32/nt.h b/Build/source/libs/unzip/win32/nt.h deleted file mode 100644 index 0109c2b678a..00000000000 --- a/Build/source/libs/unzip/win32/nt.h +++ /dev/null @@ -1,28 +0,0 @@ -/* nt.h: central header for EF_NTSD "SD" extra field */ - -#ifndef _NT_H -#define _NT_H - -#define NTSD_BUFFERSIZE (1024) /* threshold to cause malloc() */ -#define OVERRIDE_BACKUP 1 /* we have SeBackupPrivilege on remote */ -#define OVERRIDE_RESTORE 2 /* we have SeRestorePrivilege on remote */ -#define OVERRIDE_SACL 4 /* we have SeSystemSecurityPrivilege on remote */ - -typedef struct { - BOOL bValid; /* are our contents valid? */ - BOOL bProcessDefer; /* process deferred entry yet? */ - BOOL bUsePrivileges; /* use privilege overrides? */ - DWORD dwFileSystemFlags; /* describes target file system */ - BOOL bRemote; /* is volume remote? */ - DWORD dwRemotePrivileges; /* relevant only on remote volumes */ - DWORD dwFileAttributes; - char RootPath[MAX_PATH+1]; /* path to network / filesystem */ -} VOLUMECAPS, *PVOLUMECAPS, *LPVOLUMECAPS; - -BOOL SecuritySet(char *resource, PVOLUMECAPS VolumeCaps, uch *securitydata); -BOOL GetVolumeCaps(char *rootpath, char *name, PVOLUMECAPS VolumeCaps); -BOOL ValidateSecurity(uch *securitydata); -BOOL ProcessDefer(PDWORD dwDirectoryCount, PDWORD dwBytesProcessed, - PDWORD dwDirectoryFail, PDWORD dwBytesFail); - -#endif /* _NT_H */ diff --git a/Build/source/libs/unzip/win32/w32cfg.h b/Build/source/libs/unzip/win32/w32cfg.h deleted file mode 100644 index 18a8e3f85c3..00000000000 --- a/Build/source/libs/unzip/win32/w32cfg.h +++ /dev/null @@ -1,222 +0,0 @@ -/*--------------------------------------------------------------------------- - Win32 specific configuration section: - ---------------------------------------------------------------------------*/ - -#ifndef __w32cfg_h -#define __w32cfg_h - -#if (defined(__CYGWIN__) && !defined(__CYGWIN32__)) -# define __CYGWIN32__ /* new versions of CygWin may not define this */ -#endif - -#include /* off_t, time_t, dev_t, ... */ -#include -#include /* read(), open(), etc. */ -#include -#if (defined(__RSXNT__) || defined(__EMX__)) && !defined(tzset) -# define tzset _tzset -#endif -#ifdef __MINGW32__ - extern void _tzset(void); /* this is missing in */ -# ifndef tzset -# define tzset _tzset -# endif -#endif -#include -#if (!defined(__RSXNT__) && !defined(__CYGWIN32__)) -# include /* mkdir() */ -#endif -#include -#ifdef __CYGWIN32__ -# include - extern int setmode(int, int); /* this is missing in */ -#endif -#if (defined(MSC) || defined(__WATCOMC__) || defined(__MINGW32__)) -# include -#else -# include -#endif - -#if defined(FILEIO_C) -# ifndef __CYGWIN32__ -# include -# endif -# include -# ifdef __RSXNT__ -# include "win32/rsxntwin.h" -# endif -#endif -#if (defined(ENVARGS_C) || defined(EXTRACT_C) || defined(UNZIP_C) || \ - defined(ZCRYPT_INTERNAL)) -# include -# ifdef __RSXNT__ -# include "win32/rsxntwin.h" -# endif -#endif -#if (defined(__CYGWIN32__) || defined(__MINGW32__)) - /* the following definitions are missing in their */ -# ifndef AnsiToOem -# define AnsiToOem CharToOemA -# endif -# ifndef OemToAnsi -# define OemToAnsi OemToCharA -# endif -#endif - -#define DIR_END '\\' /* OS uses '\\' as directory separator */ -#define DIR_END2 '/' /* also check for '/' (RTL may convert) */ -#ifndef DATE_FORMAT -# define DATE_FORMAT DF_MDY -#endif -#define lenEOL 2 -#define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} - -#if (defined(__RSXNT__) && !defined(HAVE_MKTIME)) -# define HAVE_MKTIME /* use mktime() in time conversion routines */ -#endif -#if (defined(__CYGWIN32__) && defined(HAVE_MKTIME)) -# undef HAVE_MKTIME /* Cygnus' mktime() implementation is buggy */ -#endif -#if (!defined(NT_TZBUG_WORKAROUND) && !defined(NO_NT_TZBUG_WORKAROUND)) -# define NT_TZBUG_WORKAROUND -#endif -#if (!defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME)) -# define USE_EF_UT_TIME -#endif -#if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) -# define TIMESTAMP -#endif -#if (!defined(NO_NTSD_EAS) && !defined(NTSD_EAS)) -# define NTSD_EAS /* enable NTSD support unless explicitly suppressed */ -#endif - -/* handlers for OEM <--> ANSI string conversions */ -#ifdef __RSXNT__ - /* RSXNT uses OEM coded strings in functions supplied by C RTL */ -# ifdef CRTL_CP_IS_ISO -# undef CRTL_CP_IS_ISO -# endif -# ifndef CRTL_CP_IS_OEM -# define CRTL_CP_IS_OEM -# endif -#else - /* "real" native WIN32 compilers use ANSI coded strings in C RTL calls */ -# ifndef CRTL_CP_IS_ISO -# define CRTL_CP_IS_ISO -# endif -# ifdef CRTL_CP_IS_OEM -# undef CRTL_CP_IS_OEM -# endif -#endif - -#ifdef CRTL_CP_IS_ISO - /* C RTL's file system support assumes ANSI coded strings */ -# define ISO_TO_INTERN(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} -# define OEM_TO_INTERN(src, dst) OemToAnsi(src, dst) -# define INTERN_TO_ISO(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} -# define INTERN_TO_OEM(src, dst) AnsiToOem(src, dst) -#endif /* CRTL_CP_IS_ISO */ -#ifdef CRTL_CP_IS_OEM - /* C RTL's file system support assumes OEM coded strings */ -# define ISO_TO_INTERN(src, dst) AnsiToOem(src, dst) -# define OEM_TO_INTERN(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} -# define INTERN_TO_ISO(src, dst) OemToAnsi(src, dst) -# define INTERN_TO_OEM(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} -#endif /* CRTL_CP_IS_OEM */ -#define _OEM_INTERN(str1) OEM_TO_INTERN(str1, str1) -#define _ISO_INTERN(str1) ISO_TO_INTERN(str1, str1) -#ifndef WINDLL - /* Despite best intentions, for the command-line version UzpPassword() - * could return either character set, depending on whether running under - * Win95 (DOS-session) or WinNT (native WinNT command interpreter)! */ -# define STR_TO_CP2(dst, src) (AnsiToOem(src, dst), dst) -# define STR_TO_CP3(dst, src) (OemToAnsi(src, dst), dst) -#else - /* The WINDLL front end is known to supply ISO/ANSI-coded passwords! */ -# define STR_TO_CP2(dst, src) (AnsiToOem(src, dst), dst) -#endif -/* dummy defines to disable these functions, they are not needed */ -#define STR_TO_OEM -#define STR_TO_ISO - -/* Static variables that we have to add to Uz_Globs: */ -#define SYSTEM_SPECIFIC_GLOBALS \ - int created_dir, renamed_fullpath, fnlen;\ - unsigned nLabelDrive;\ - char lastRootPath[4];\ - int lastVolOldFAT, lastVolLocTim;\ - char *rootpath, *buildpathHPFS, *buildpathFAT, *endHPFS, *endFAT;\ - char *dirname, *wildname, matchname[FILNAMSIZ];\ - int rootlen, have_dirname, dirnamelen, notfirstcall;\ - zvoid *wild_dir; - -/* created_dir, renamed_fullpath, fnlen, and nLabelDrive are used by */ -/* both mapname() and checkdir(). */ -/* lastRootPath and lastVolOldFAT are used by IsVolumeOldFAT(). */ -/* rootlen, rootpath, buildpathHPFS, buildpathFAT, endHPFS, and endFAT */ -/* are used by checkdir(). */ -/* wild_dir, dirname, wildname, matchname[], dirnamelen, have_dirname, */ -/* and notfirstcall are used by do_wild(). */ - -#if (defined(_MSC_VER) && !defined(MSC)) -# define MSC -#endif - -/* This replacement for C-RTL-supplied getch() (or similar) functionality - * avoids leaving unabsorbed LFs in the keyboard buffer under Windows95, - * and supports the +[0] feature. - */ -int getch_win32 OF((void)); - -/* This patch of stat() is useful for at least two compilers. It is */ -/* difficult to take a stat() of a root directory under Windows95, so */ -/* zstat_win32() detects that case and fills in suitable values. */ -#ifndef __RSXNT__ -# ifndef W32_STATROOT_FIX -# define W32_STATROOT_FIX -# endif -#endif /* !__RSXNT__ */ - -#if (defined(NT_TZBUG_WORKAROUND) || defined(W32_STATROOT_FIX)) -# define W32_STAT_BANDAID -# if (defined(NT_TZBUG_WORKAROUND) && defined(REENTRANT)) -# define __W32STAT_GLOBALS__ Uz_Globs *pG, -# define __W32STAT_G__ pG, -# else -# define __W32STAT_GLOBALS__ -# define __W32STAT_G__ -# endif -# undef SSTAT -# ifdef WILD_STAT_BUG -# define SSTAT(path, pbuf) (iswild(path) || zstat_win32(__W32STAT_G__ path, pbuf)) -# else -# define SSTAT(path, pbuf) zstat_win32(__W32STAT_G__ path, pbuf) -# endif -#endif - -#ifdef __WATCOMC__ -# ifdef __386__ -# ifndef WATCOMC_386 -# define WATCOMC_386 -# endif -# define __32BIT__ -# undef far -# define far -# undef near -# define near - -/* Get asm routines to link properly without using "__cdecl": */ -# ifndef USE_ZLIB -# pragma aux crc32 "_*" parm caller [] value [eax] modify [eax] -# pragma aux get_crc_table "_*" parm caller [] value [eax] \ - modify [eax ecx edx] -# endif /* !USE_ZLIB */ -# endif /* __386__ */ - -# ifndef EPIPE -# define EPIPE -1 -# endif -# define PIPE_ERROR (errno == EPIPE) -#endif /* __WATCOMC__ */ - -#endif /* !__w32cfg_h */ diff --git a/Build/source/libs/unzip/win32/win32.c b/Build/source/libs/unzip/win32/win32.c deleted file mode 100644 index c1d9a68f0b9..00000000000 --- a/Build/source/libs/unzip/win32/win32.c +++ /dev/null @@ -1,2390 +0,0 @@ -/*--------------------------------------------------------------------------- - - win32.c - - 32-bit Windows-specific (NT/95) routines for use with Info-ZIP's UnZip 5.3 - and later. - - Contains: GetLoadPath() - Opendir() - Readdir() - Closedir() - process_defer_NT() process any deferred items - SetSD() set security descriptor on file - EvalExtraFields() evaluate and process and extra field NOW - IsWinNT() indicate type of WIN32 platform - test_NTSD() test integrity of NT security data - utime2FileTime() - FStampIsLocTime() - FileTime2utime() - VFatFileTime2utime() - UTCtime2Localtime() - NTtzbugWorkaround() - getNTfiletime() - close_outfile() - stamp_file() - isfloppy() - NTQueryVolInfo() - IsVolumeOldFAT() - do_wild() - mapattr() - mapname() - map2fat() - checkdir() - version() - zstat_win32() - getch_win32() - - ---------------------------------------------------------------------------*/ - - -#define UNZIP_INTERNAL -#include "unzip.h" -#include /* must be AFTER unzip.h to avoid struct G problems */ -#ifdef __RSXNT__ -# include "win32/rsxntwin.h" -#endif -#include "win32/nt.h" - -#ifndef FUNZIP /* most of this file is not used with fUnZip */ - -#if (defined(__GO32__) || defined(__EMX__) || defined(__CYGWIN32__)) -# define MKDIR(path,mode) mkdir(path,mode) -#else -# define MKDIR(path,mode) mkdir(path) -#endif - -#ifdef HAVE_WORKING_DIRENT_H -# undef HAVE_WORKING_DIRENT_H -#endif -/* The emxrtl dirent support of (__GO32__ || __EMX__) converts to lowercase! */ -#if defined(__CYGWIN32__) -# define HAVE_WORKING_DIRENT_H -#endif - -#ifndef SFX -# ifdef HAVE_WORKING_DIRENT_H -# include /* use readdir() */ -# define zdirent dirent -# define zDIR DIR -# define Opendir opendir -# define Readdir readdir -# define Closedir closedir -# else /* !HAVE_WORKING_DIRENT_H */ - typedef struct zdirent { - char reserved [21]; - char ff_attrib; - short ff_ftime; - short ff_fdate; - long size; - char d_name[MAX_PATH]; - int d_first; - HANDLE d_hFindFile; - } zDIR; - - static zDIR *Opendir (const char *n); - static struct zdirent *Readdir (zDIR *d); - static void Closedir (zDIR *d); -# endif /* ?HAVE_WORKING_DIRENT_H */ -#endif /* !SFX */ - - -/* Function prototypes */ -#ifdef NTSD_EAS - static int SetSD(__GPRO__ char *path, PVOLUMECAPS VolumeCaps, - uch *eb_ptr, unsigned eb_len); - static int EvalExtraFields(__GPRO__ char *path, uch *ef_ptr, - unsigned ef_len); -#endif - -#if (defined(USE_EF_UT_TIME) || defined(NT_TZBUG_WORKAROUND) || \ - defined(TIMESTAMP)) - static void utime2FileTime(time_t ut, FILETIME *pft); - static int FStampIsLocTime(__GPRO__ const char *path); -#endif /* USE_EF_UT_TIME || NT_TZBUG_WORKAROUND || TIMESTAMP */ -#ifdef NT_TZBUG_WORKAROUND - static int FileTime2utime(const FILETIME *pft, time_t *ut); -#ifdef W32_STAT_BANDAID - static int VFatFileTime2utime(const FILETIME *pft, time_t *ut); -#endif - static time_t UTCtime2Localtime(time_t utctime); - static void NTtzbugWorkaround(time_t ut, FILETIME *pft); -#endif /* NT_TZBUG_WORKAROUND */ - -static int getNTfiletime (__GPRO__ FILETIME *pModFT, FILETIME *pAccFT, - FILETIME *pCreFT); -static int isfloppy (int nDrive); -static int NTQueryVolInfo (__GPRO__ const char *name); -static int IsVolumeOldFAT (__GPRO__ const char *name); -static void map2fat (char *pathcomp, char **pEndFAT); - - -#ifdef __MINGW32__ - int _CRT_glob = 0; /* suppress command line globbing by C RTL */ -#endif - -/* static int created_dir; */ /* used by mapname(), checkdir() */ -/* static int renamed_fullpath; */ /* ditto */ -/* static int fnlen; */ /* ditto */ -/* static unsigned nLabelDrive; */ /* ditto */ - -extern char Far TruncNTSD[]; /* in extract.c */ - - - -#ifdef SFX - -/**************************/ -/* Function GetLoadPath() */ -/**************************/ - -char *GetLoadPath(__GPRO) -{ -#ifdef MSC - extern char *_pgmptr; - return _pgmptr; - -#else /* use generic API call */ - - GetModuleFileName(NULL, G.filename, FILNAMSIZ-1); - _ISO_INTERN(G.filename); /* translate to codepage of C rtl's stdio */ - return G.filename; -#endif - -} /* end function GetLoadPath() */ - - - - - -#else /* !SFX */ - -#ifndef HAVE_WORKING_DIRENT_H - -/**********************/ /* Borrowed from ZIP 2.0 sources */ -/* Function Opendir() */ /* Difference: no special handling for */ -/**********************/ /* hidden or system files. */ - -static zDIR *Opendir(n) - const char *n; /* directory to open */ -{ - zDIR *d; /* malloc'd return value */ - char *p; /* malloc'd temporary string */ - WIN32_FIND_DATA fd; - extent len = strlen(n); - - /* Start searching for files in directory n */ - - if ((d = (zDIR *)malloc(sizeof(zDIR))) == NULL || - (p = malloc(strlen(n) + 5)) == NULL) - { - if (d != (zDIR *)NULL) - free((void *)d); - return (zDIR *)NULL; - } - INTERN_TO_ISO(n, p); - if (len > 0) { - if (p[len-1] == ':') - p[len++] = '.'; /* x: => x:. */ - else if (p[len-1] == '/' || p[len-1] == '\\') - --len; /* foo/ => foo */ - } - strcpy(p+len, "/*"); - - if (INVALID_HANDLE_VALUE == (d->d_hFindFile = FindFirstFile(p, &fd))) { - free((zvoid *)d); - free((zvoid *)p); - return NULL; - } - strcpy(d->d_name, fd.cFileName); - - free((zvoid *)p); - d->d_first = 1; - return d; - -} /* end of function Opendir() */ - - - - -/**********************/ /* Borrowed from ZIP 2.0 sources */ -/* Function Readdir() */ /* Difference: no special handling for */ -/**********************/ /* hidden or system files. */ - -static struct zdirent *Readdir(d) - zDIR *d; /* directory stream from which to read */ -{ - /* Return pointer to first or next directory entry, or NULL if end. */ - - if ( d->d_first ) - d->d_first = 0; - else - { - WIN32_FIND_DATA fd; - - if ( !FindNextFile(d->d_hFindFile, &fd) ) - return NULL; - - ISO_TO_INTERN(fd.cFileName, d->d_name); - } - return (struct zdirent *)d; - -} /* end of function Readdir() */ - - - - -/***********************/ -/* Function Closedir() */ /* Borrowed from ZIP 2.0 sources */ -/***********************/ - -static void Closedir(d) - zDIR *d; /* directory stream to close */ -{ - FindClose(d->d_hFindFile); - free(d); -} - -#endif /* !HAVE_WORKING_DIRENT_H */ -#endif /* ?SFX */ - - - - -#ifdef NTSD_EAS - -/*********************************/ -/* Function process_defer_NT() */ -/*********************************/ - -void process_defer_NT(__G) - __GDEF -{ - /* process deferred items */ - - DWORD dir, bytes; - DWORD dirfail, bytesfail; - - ProcessDefer(&dir, &bytes, &dirfail, &bytesfail); - - if (!uO.tflag && (uO.qflag < 2)) { - if (dir) - Info(slide, 0, ((char *)slide, - " updated: %lu directory entries with %lu bytes security", - (ulg)dir, (ulg)bytes)); - if (dirfail) - Info(slide, 0, ((char *)slide, - " failed: %lu directory entries with %lu bytes security", - (ulg)dirfail, (ulg)bytesfail)); - } -} - - - -/**********************/ -/* Function SetSD() */ /* return almost-PK errors */ -/**********************/ - -static int SetSD(__G__ path, VolumeCaps, eb_ptr, eb_len) - __GDEF - char *path; - PVOLUMECAPS VolumeCaps; - uch *eb_ptr; - unsigned eb_len; -{ - ulg ntsd_ucSize; - uch *security_data; - int error; - - if (eb_ptr == NULL || eb_len < EB_NTSD_L_LEN) - return PK_OK; /* not a valid NTSD extra field: assume OK */ - - /* check if we know how to handle this version */ - if (*(eb_ptr + (EB_HEADSIZE+EB_NTSD_VERSION)) > (uch)EB_NTSD_MAX_VER) - return PK_OK; - - ntsd_ucSize = makelong(eb_ptr + (EB_HEADSIZE+EB_UCSIZE_P)); - if (ntsd_ucSize > 0L && eb_len <= (EB_NTSD_L_LEN + EB_CMPRHEADLEN)) - return IZ_EF_TRUNC; /* no compressed data! */ - - /* allocate storage for uncompressed data */ - security_data = (uch *)malloc((extent)ntsd_ucSize); - if (security_data == (uch *)NULL) - return PK_MEM4; - - error = memextract(__G__ security_data, ntsd_ucSize, - (eb_ptr + (EB_HEADSIZE+EB_NTSD_L_LEN)), (ulg)(eb_len - EB_NTSD_L_LEN)); - - if (error == PK_OK) { - if (SecuritySet(path, VolumeCaps, security_data)) { - error = PK_COOL; - if (!uO.tflag && (uO.qflag < 2) && - (!(VolumeCaps->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))) - Info(slide, 0, ((char *)slide, " (%ld bytes security)", - ntsd_ucSize)); - } - } - - free(security_data); - return error; -} - - - - -/********************************/ /* scan extra fields for something */ -/* Function EvalExtraFields() */ /* we happen to know */ -/********************************/ - -static int EvalExtraFields(__G__ path, ef_ptr, ef_len) - __GDEF - char *path; - uch *ef_ptr; - unsigned ef_len; -{ - int rc = PK_OK; - - if (!uO.X_flag) - return PK_OK; /* user said don't process ACLs; for now, no other - extra block types are handled here */ - - while (ef_len >= EB_HEADSIZE) - { - unsigned eb_id = makeword(EB_ID + ef_ptr); - unsigned eb_len = makeword(EB_LEN + ef_ptr); - - if (eb_len > (ef_len - EB_HEADSIZE)) { - /* discovered some extra field inconsistency! */ - Trace((stderr, - "EvalExtraFields: block length %u > rest ef_size %u\n", eb_len, - ef_len - EB_HEADSIZE)); - break; - } - - switch (eb_id) - { - /* process security descriptor extra data if: - Caller is WinNT AND - Target local/remote drive supports acls AND - Target file is not a directory (else we defer processing - until later) - */ - case EF_NTSD: - if (IsWinNT()) { - VOLUMECAPS VolumeCaps; - - /* provide useful input */ - VolumeCaps.dwFileAttributes = G.pInfo->file_attr; - VolumeCaps.bUsePrivileges = (uO.X_flag > 1); - - /* check target volume capabilities - just fall through - * and try if fail */ - if (GetVolumeCaps(G.rootpath, path, &VolumeCaps) && - !(VolumeCaps.dwFileSystemFlags & FS_PERSISTENT_ACLS)) - { - rc = PK_OK; - break; - } - rc = SetSD(__G__ path, &VolumeCaps, ef_ptr, eb_len); - } else - rc = PK_OK; - break; - -#if 0 - /* perhaps later we can add support for unzipping OS/2 EAs to NT */ - case EF_OS2: - rc = SetEAs(__G__ path, ef_ptr); - break; - - case EF_PKUNIX: - case EF_IZUNIX: - case EF_IZUNIX2: - case EF_TIME: - break; /* handled elsewhere */ -#else /* ! 0 */ -#ifdef DEBUG - case EF_AV: - case EF_OS2: - case EF_PKVMS: - case EF_PKW32: - case EF_PKUNIX: - case EF_IZVMS: - case EF_IZUNIX: - case EF_IZUNIX2: - case EF_TIME: - case EF_MAC3: - case EF_JLMAC: - case EF_ZIPIT: - case EF_VMCMS: - case EF_MVS: - case EF_ACL: - case EF_BEOS: - case EF_QDOS: - case EF_AOSVS: - case EF_SPARK: - case EF_MD5: - case EF_ASIUNIX: - break; /* shut up for other known e.f. blocks */ -#endif /* DEBUG */ -#endif /* ? 0 */ - - default: - Trace((stderr, - "EvalExtraFields: unknown extra field block, ID=%u\n", - eb_id)); - break; - } - - ef_ptr += (eb_len + EB_HEADSIZE); - ef_len -= (eb_len + EB_HEADSIZE); - - if (rc != PK_OK) - break; - } - - return rc; -} - - - - -#ifndef SFX - -/**************************/ -/* Function test_NTSD() */ /* returns PK_WARN when NTSD data is invalid */ -/**************************/ - -#ifdef __BORLANDC__ -/* Turn off warning about not using all parameters for this function only */ -#pragma argsused -#endif -int test_NTSD(__G__ eb, eb_size, eb_ucptr, eb_ucsize) - __GDEF - uch *eb; - unsigned eb_size; - uch *eb_ucptr; - ulg eb_ucsize; -{ - int r = PK_OK; - - if (!ValidateSecurity(eb_ucptr)) - r = PK_WARN; - return r; - -} /* end function test_NTSD() */ - -#endif /* !SFX */ -#endif /* NTSD_EAS */ - - - - -/**********************/ -/* Function IsWinNT() */ -/**********************/ - -int IsWinNT(void) /* returns TRUE if real NT, FALSE if Win95 or Win32s */ -{ - static DWORD g_PlatformId = 0xFFFFFFFF; /* saved platform indicator */ - - if (g_PlatformId == 0xFFFFFFFF) { - /* note: GetVersionEx() doesn't exist on WinNT 3.1 */ - if (GetVersion() < 0x80000000) - g_PlatformId = TRUE; - else - g_PlatformId = FALSE; - } - return (int)g_PlatformId; -} - - -/* DEBUG_TIME insertion: */ -#ifdef DEBUG_TIME -static int show_NTFileTime(FILE *hdo, char *TTmsg, int isloc, FILETIME *pft); - -static int show_NTFileTime(FILE *hdo, char *TTmsg, int isloc, FILETIME *pft) -{ - SYSTEMTIME w32tm; - int rval; - - rval = FileTimeToSystemTime(pft, &w32tm); - if (!rval) { - fprintf(hdo, "%s\n %08lX,%08lX (%s) -> Conversion failed !!!\n", - TTmsg, (ulg)(pft->dwHighDateTime), (ulg)(pft->dwLowDateTime), - (isloc ? "local" : "UTC")); - } else { - fprintf(hdo, "%s\n %08lx,%08lx -> %04u-%02u-%02u, %02u:%02u:%02u %s\n", - TTmsg, (ulg)(pft->dwHighDateTime), (ulg)(pft->dwLowDateTime), - w32tm.wYear, w32tm.wMonth, w32tm.wDay, w32tm.wHour, - w32tm.wMinute, w32tm.wSecond, (isloc ? "local" : "UTC")); - } - return rval; -} -#define FTTrace(x) show_NTFileTime x -#else -#define FTTrace(x) -#endif /* DEBUG_TIME */ -/* end of TIME_DEBUG insertion */ - -#if (defined(USE_EF_UT_TIME) || defined(NT_TZBUG_WORKAROUND) || \ - defined(TIMESTAMP)) - -#if ((defined(__GNUC__) || defined(ULONG_LONG_MAX)) && !defined(HAVE_INT64)) - typedef long long LLONG64; - typedef unsigned long long ULLNG64; -# define HAVE_INT64 -#endif -#if (defined(__WATCOMC__) && (__WATCOMC__ >= 1100) && !defined(HAVE_INT64)) - typedef __int64 LLONG64; - typedef unsigned __int64 ULLNG64; -# define HAVE_INT64 -#endif -#if (defined(_MSC_VER) && (_MSC_VER >= 1100) && !defined(HAVE_INT64)) - typedef __int64 LLONG64; - typedef unsigned __int64 ULLNG64; -# define HAVE_INT64 -#endif - -/*****************************/ -/* Function utime2FileTime() */ /* convert Unix time_t format into the */ -/*****************************/ /* form used by SetFileTime() in NT/95 */ - -#define UNIX_TIME_ZERO_HI 0x019DB1DEUL -#define UNIX_TIME_ZERO_LO 0xD53E8000UL -#define NT_QUANTA_PER_UNIX 10000000L - -static void utime2FileTime(time_t ut, FILETIME *pft) -{ -#ifdef HAVE_INT64 - ULLNG64 NTtime; - - /* NT_QUANTA_PER_UNIX is small enough so that "ut * NT_QUANTA_PER_UNIX" - * cannot overflow in 64-bit signed calculation, regardless wether "ut" - * is signed or unsigned. */ - NTtime = ((LLONG64)ut * NT_QUANTA_PER_UNIX) + - ((ULLNG64)UNIX_TIME_ZERO_LO + ((ULLNG64)UNIX_TIME_ZERO_HI << 32)); - pft->dwLowDateTime = (DWORD)NTtime; - pft->dwHighDateTime = (DWORD)(NTtime >> 32); - -#else /* !HAVE_INT64 (64-bit integer arithmetics may not be supported) */ - unsigned int b1, b2, carry = 0; - unsigned long r0, r1, r2, r3; - long r4; /* signed, to catch environments with signed time_t */ - - b1 = ut & 0xFFFF; - b2 = (ut >> 16) & 0xFFFF; /* if ut is over 32 bits, too bad */ - r1 = b1 * (NT_QUANTA_PER_UNIX & 0xFFFF); - r2 = b1 * (NT_QUANTA_PER_UNIX >> 16); - r3 = b2 * (NT_QUANTA_PER_UNIX & 0xFFFF); - r4 = b2 * (NT_QUANTA_PER_UNIX >> 16); - r0 = (r1 + (r2 << 16)) & 0xFFFFFFFFL; - if (r0 < r1) - carry++; - r1 = r0; - r0 = (r0 + (r3 << 16)) & 0xFFFFFFFFL; - if (r0 < r1) - carry++; - pft->dwLowDateTime = r0 + UNIX_TIME_ZERO_LO; - if (pft->dwLowDateTime < r0) - carry++; - pft->dwHighDateTime = r4 + (r2 >> 16) + (r3 >> 16) - + UNIX_TIME_ZERO_HI + carry; -#endif /* ?HAVE_INT64 */ - -} /* end function utime2FileTime() */ - - - -/******************************/ -/* Function FStampIsLocTime() */ -/******************************/ - -static int FStampIsLocTime(__GPRO__ const char *path) -{ - return (NTQueryVolInfo(__G__ path) ? G.lastVolLocTim : FALSE); -} - -#endif /* USE_EF_UT_TIME || NT_TZBUG_WORKAROUND || TIMESTAMP */ - - - -#ifndef NT_TZBUG_WORKAROUND -# define UTIME_BOUNDCHECK_1(utimval) \ - if (fs_uses_loctime) { \ - utime_dosmin = dos_to_unix_time(DOSTIME_MINIMUM); \ - if ((ulg)utimval < (ulg)utime_dosmin) \ - utimval = utime_dosmin; \ - } -# define UTIME_BOUNDCHECK_N(utimval) \ - if (fs_uses_loctime && ((ulg)utimval < (ulg)utime_dosmin)) \ - utimval = utime_dosmin; -# define NT_TZBUG_PRECOMPENSATE(ut, pft) - -#else /* NT_TZBUG_WORKAROUND */ -# define UNIX_TIME_UMAX_HI 0x0236485EUL -# define UNIX_TIME_UMAX_LO 0xD4A5E980UL -# define UNIX_TIME_SMIN_HI 0x0151669EUL -# define UNIX_TIME_SMIN_LO 0xD53E8000UL -# define UNIX_TIME_SMAX_HI 0x01E9FD1EUL -# define UNIX_TIME_SMAX_LO 0xD4A5E980UL -# define UTIME_1980_JAN_01_00_00 315532800L -# define UTIME_BOUNDCHECK_1(utimval) -# define UTIME_BOUNDCHECK_N(utimval) -# define NT_TZBUG_PRECOMPENSATE(ut, pft) \ - if (fs_uses_loctime) NTtzbugWorkaround(ut, pft); - - /* nonzero if `y' is a leap year, else zero */ -# define leap(y) (((y)%4 == 0 && (y)%100 != 0) || (y)%400 == 0) - /* number of leap years from 1970 to `y' (not including `y' itself) */ -# define nleap(y) (((y)-1969)/4 - ((y)-1901)/100 + ((y)-1601)/400) - -extern ZCONST ush ydays[]; /* defined in fileio.c */ - -/*****************************/ -/* Function FileTime2utime() */ -/*****************************/ - -static int FileTime2utime(const FILETIME *pft, time_t *ut) -{ -#ifdef HAVE_INT64 - ULLNG64 NTtime; - - NTtime = ((ULLNG64)pft->dwLowDateTime + - ((ULLNG64)pft->dwHighDateTime << 32)); - - /* underflow and overflow handling */ -#ifdef CHECK_UTIME_SIGNED_UNSIGNED - if ((time_t)0x80000000L < (time_t)0L) - { - if (NTtime < ((ULLNG64)UNIX_TIME_SMIN_LO + - ((ULLNG64)UNIX_TIME_SMIN_HI << 32))) { - *ut = (time_t)LONG_MIN; - return FALSE; - } - if (NTtime > ((ULLNG64)UNIX_TIME_SMAX_LO + - ((ULLNG64)UNIX_TIME_SMAX_HI << 32))) { - *ut = (time_t)LONG_MAX; - return FALSE; - } - } - else -#endif /* CHECK_UTIME_SIGNED_UNSIGNED */ - { - if (NTtime < ((ULLNG64)UNIX_TIME_ZERO_LO + - ((ULLNG64)UNIX_TIME_ZERO_HI << 32))) { - *ut = (time_t)0; - return FALSE; - } - if (NTtime > ((ULLNG64)UNIX_TIME_UMAX_LO + - ((ULLNG64)UNIX_TIME_UMAX_HI << 32))) { - *ut = (time_t)ULONG_MAX; - return FALSE; - } - } - - NTtime -= ((ULLNG64)UNIX_TIME_ZERO_LO + - ((ULLNG64)UNIX_TIME_ZERO_HI << 32)); - *ut = (time_t)(NTtime / (unsigned long)NT_QUANTA_PER_UNIX); - return TRUE; -#else /* !HAVE_INT64 (64-bit integer arithmetics may not be supported) */ - time_t days; - SYSTEMTIME w32tm; - - /* underflow and overflow handling */ -#ifdef CHECK_UTIME_SIGNED_UNSIGNED - if ((time_t)0x80000000L < (time_t)0L) - { - if ((pft->dwHighDateTime < UNIX_TIME_SMIN_HI) || - ((pft->dwHighDateTime == UNIX_TIME_SMIN_HI) && - (pft->dwLowDateTime < UNIX_TIME_SMIN_LO))) { - *ut = (time_t)LONG_MIN; - return FALSE; - if ((pft->dwHighDateTime > UNIX_TIME_SMAX_HI) || - ((pft->dwHighDateTime == UNIX_TIME_SMAX_HI) && - (pft->dwLowDateTime > UNIX_TIME_SMAX_LO))) { - *ut = (time_t)LONG_MAX; - return FALSE; - } - } - else -#endif /* CHECK_UTIME_SIGNED_UNSIGNED */ - { - if ((pft->dwHighDateTime < UNIX_TIME_ZERO_HI) || - ((pft->dwHighDateTime == UNIX_TIME_ZERO_HI) && - (pft->dwLowDateTime < UNIX_TIME_ZERO_LO))) { - *ut = (time_t)0; - return FALSE; - } - if ((pft->dwHighDateTime > UNIX_TIME_UMAX_HI) || - ((pft->dwHighDateTime == UNIX_TIME_UMAX_HI) && - (pft->dwLowDateTime > UNIX_TIME_UMAX_LO))) { - *ut = (time_t)ULONG_MAX; - return FALSE; - } - } - - FileTimeToSystemTime(pft, &w32tm); - - /* set `days' to the number of days into the year */ - days = w32tm.wDay - 1 + ydays[w32tm.wMonth-1] + - (w32tm.wMonth > 2 && leap (w32tm.wYear)); - - /* now set `days' to the number of days since 1 Jan 1970 */ - days += 365 * (time_t)(w32tm.wYear - 1970) + - (time_t)(nleap(w32tm.wYear)); - - *ut = (time_t)(86400L * days + 3600L * (time_t)w32tm.wHour + - (time_t)(60 * w32tm.wMinute + w32tm.wSecond)); - return TRUE; -#endif /* ?HAVE_INT64 */ -} /* end function FileTime2utime() */ - - - -#ifdef W32_STAT_BANDAID -/*********************************/ -/* Function VFatFileTime2utime() */ -/*********************************/ - -static int VFatFileTime2utime(const FILETIME *pft, time_t *ut) -{ - FILETIME lft; -#ifndef HAVE_MKTIME - WORD wDOSDate, wDOSTime; -#else - SYSTEMTIME w32tm; - struct tm ltm; -#endif - - FileTimeToLocalFileTime(pft, &lft); - FTTrace((stdout, "VFatFT2utime, feed for mktime()", 1, &lft)); -#ifndef HAVE_MKTIME - /* This version of the FILETIME-to-UNIXTIME conversion function - * uses DOS-DATE-TIME format as intermediate stage. For modification - * and access times, this is no problem. But, the extra fine resolution - * of the VFAT-stored creation time gets lost. - */ - FileTimeToDosDateTime(&lft, &wDOSDate, &wDOSTime); - TTrace((stdout,"DosDateTime is %04u-%02u-%02u %02u:%02u:%02u\n", - (unsigned)((wDOSDate>>9)&0x7f)+1980,(unsigned)((wDOSDate>>5)&0x0f), - (unsigned)(wDOSDate&0x1f),(unsigned)((wDOSTime>>11)&0x1f), - (unsigned)((wDOSTime>>5)&0x3f),(unsigned)((wDOSTime<<1)&0x3e))); - *ut = dos_to_unix_time(((ulg)wDOSDate << 16) | (ulg)wDOSTime); - - /* a cheap error check: dos_to_unix_time() only returns an odd time - * when clipping at maximum time_t value. DOS_DATE_TIME values have - * a resolution of 2 seconds and are therefore even numbers. - */ - return (((*ut)&1) == (time_t)0); -#else /* HAVE_MKTIME */ - FileTimeToSystemTime(&lft, &w32tm); - /* underflow and overflow handling */ - /* TODO: The range checks are not accurate, the actual limits may - * be off by one daylight-saving-time shift (typically 1 hour), - * depending on the current state of "is_dst". - */ -#ifdef CHECK_UTIME_SIGNED_UNSIGNED - if ((time_t)0x80000000L < (time_t)0L) - { - if ((pft->dwHighDateTime < UNIX_TIME_SMIN_HI) || - ((pft->dwHighDateTime == UNIX_TIME_SMIN_HI) && - (pft->dwLowDateTime < UNIX_TIME_SMIN_LO))) { - *ut = (time_t)LONG_MIN; - return FALSE; - if ((pft->dwHighDateTime > UNIX_TIME_SMAX_HI) || - ((pft->dwHighDateTime == UNIX_TIME_SMAX_HI) && - (pft->dwLowDateTime > UNIX_TIME_SMAX_LO))) { - *ut = (time_t)LONG_MAX; - return FALSE; - } - } - else -#endif /* CHECK_UTIME_SIGNED_UNSIGNED */ - { - if ((pft->dwHighDateTime < UNIX_TIME_ZERO_HI) || - ((pft->dwHighDateTime == UNIX_TIME_ZERO_HI) && - (pft->dwLowDateTime < UNIX_TIME_ZERO_LO))) { - *ut = (time_t)0; - return FALSE; - } - if ((pft->dwHighDateTime > UNIX_TIME_UMAX_HI) || - ((pft->dwHighDateTime == UNIX_TIME_UMAX_HI) && - (pft->dwLowDateTime > UNIX_TIME_UMAX_LO))) { - *ut = (time_t)ULONG_MAX; - return FALSE; - } - } - ltm.tm_year = w32tm.wYear - 1900; - ltm.tm_mon = w32tm.wMonth - 1; - ltm.tm_mday = w32tm.wDay; - ltm.tm_hour = w32tm.wHour; - ltm.tm_min = w32tm.wMinute; - ltm.tm_sec = w32tm.wSecond; - ltm.tm_isdst = -1; /* let mktime determine if DST is in effect */ - *ut = mktime(<m); - - /* a cheap error check: mktime returns "(time_t)-1L" on conversion errors. - * Normally, we would have to apply a consistency check because "-1" - * could also be a valid time. But, it is quite unlikely to read back odd - * time numbers from file systems that store time stamps in DOS format. - * (The only known exception is creation time on VFAT partitions.) - */ - return (*ut != (time_t)-1L); -#endif /* ?HAVE_MKTIME */ - -} /* end function VFatFileTime2utime() */ -#endif /* W32_STAT_BANDAID */ - - - -/********************************/ -/* Function UTCtime2Localtime() */ /* borrowed from Zip's mkgmtime() */ -/********************************/ - -static time_t UTCtime2Localtime(time_t utctime) -{ - time_t utc = utctime; - struct tm *tm; - unsigned years, months, days, hours, minutes, seconds; - - -#ifdef __BORLANDC__ /* Borland C++ 5.x crashes when trying to reference tm */ - if (utc < UTIME_1980_JAN_01_00_00) - utc = UTIME_1980_JAN_01_00_00; -#endif - tm = localtime(&utc); - if (tm == (struct tm *)NULL) - /* localtime() did not accept given utc time value; as an emergency - exit, the unconverted utctime value is returned */ - return utctime; - - years = tm->tm_year + 1900; /* year - 1900 -> year */ - months = tm->tm_mon; /* 0..11 */ - days = tm->tm_mday - 1; /* 1..31 -> 0..30 */ - hours = tm->tm_hour; /* 0..23 */ - minutes = tm->tm_min; /* 0..59 */ - seconds = tm->tm_sec; /* 0..61 in ANSI C */ - - /* set `days' to the number of days into the year */ - days += ydays[months] + (months > 1 && leap(years)); - - /* now set `days' to the number of days since 1 Jan 1970 */ - days += 365 * (years - 1970) + nleap(years); - - return (time_t)(86400L * (ulg)days + 3600L * (ulg)hours + - (ulg)(60 * minutes + seconds)); - -} /* end function UTCtime2Localtime() */ - - - -/********************************/ -/* Function NTtzbugWorkaround() */ -/********************************/ - -static void NTtzbugWorkaround(time_t ut, FILETIME *pft) -{ - FILETIME C_RTL_locft, NTAPI_locft; - time_t ux_loctime = UTCtime2Localtime(ut); - - /* This routine is only used when the target file system stores time- - * stamps as local time in MSDOS format. Thus we make sure that the - * resulting timestamp is within the range of MSDOS date-time values. */ - if (ux_loctime < UTIME_1980_JAN_01_00_00) - ux_loctime = UTIME_1980_JAN_01_00_00; - - utime2FileTime(ux_loctime, &C_RTL_locft); - if (!FileTimeToLocalFileTime(pft, &NTAPI_locft)) - return; - else { - long time_shift_l, time_shift_h; - int carry = 0; - - time_shift_l = C_RTL_locft.dwLowDateTime - NTAPI_locft.dwLowDateTime; - if (C_RTL_locft.dwLowDateTime < NTAPI_locft.dwLowDateTime) - carry--; - time_shift_h = C_RTL_locft.dwHighDateTime - NTAPI_locft.dwHighDateTime; - pft->dwLowDateTime += time_shift_l; - if (pft->dwLowDateTime < (ulg)time_shift_l) - carry++; - pft->dwHighDateTime += time_shift_h + carry; - TTrace((stdout, "FileTime shift: %08lx:%08lx\n", - time_shift_h+carry,time_shift_l)); - } -} /* end function NTtzbugWorkaround() */ - -#endif /* ?NT_TZBUG_WORKAROUND */ - - - -/****************************/ /* Get the file time in a format that */ -/* Function getNTfiletime() */ /* can be used by SetFileTime() in NT */ -/****************************/ - -static int getNTfiletime(__G__ pModFT, pAccFT, pCreFT) - __GDEF - FILETIME *pModFT; - FILETIME *pAccFT; - FILETIME *pCreFT; -{ -#ifdef NT_TZBUG_WORKAROUND - time_t ux_modtime; -#else /* !NT_TZBUG_WORKAROUND */ - FILETIME locft; /* 64-bit value made up of two 32-bit [low & high] */ - WORD wDOSDate; /* for converting from DOS date to Windows NT */ - WORD wDOSTime; -#endif /* ?NT_TZBUG_WORKAROUND */ -#ifdef USE_EF_UT_TIME - unsigned eb_izux_flg; - iztimes z_utime; /* struct for Unix-style actime & modtime, + creatime */ -#endif -#if (defined(USE_EF_UT_TIME) && !defined(NT_TZBUG_WORKAROUND)) - time_t utime_dosmin; -# endif -#if (defined(USE_EF_UT_TIME) || defined(NT_TZBUG_WORKAROUND)) - int fs_uses_loctime = FStampIsLocTime(__G__ G.filename); -#endif - - /* Copy and/or convert time and date variables, if necessary; - * return a flag indicating which time stamps are available. */ -#ifdef USE_EF_UT_TIME - if (G.extra_field && -#ifdef IZ_CHECK_TZ - G.tz_is_valid && -#endif - ((eb_izux_flg = ef_scan_for_izux(G.extra_field, - G.lrec.extra_field_length, 0, G.lrec.last_mod_dos_datetime, - &z_utime, NULL)) & EB_UT_FL_MTIME)) - { - TTrace((stderr, "getNTfiletime: Unix e.f. modif. time = %lu\n", - z_utime.mtime)); - UTIME_BOUNDCHECK_1(z_utime.mtime) - utime2FileTime(z_utime.mtime, pModFT); - NT_TZBUG_PRECOMPENSATE(z_utime.mtime, pModFT) - if (eb_izux_flg & EB_UT_FL_ATIME) { - UTIME_BOUNDCHECK_N(z_utime.atime) - utime2FileTime(z_utime.atime, pAccFT); - NT_TZBUG_PRECOMPENSATE(z_utime.atime, pAccFT) - } - if (eb_izux_flg & EB_UT_FL_CTIME) { - UTIME_BOUNDCHECK_N(z_utime.ctime) - utime2FileTime(z_utime.ctime, pCreFT); - NT_TZBUG_PRECOMPENSATE(z_utime.ctime, pCreFT) - } - return (int)eb_izux_flg; - } -#endif /* USE_EF_UT_TIME */ -#ifdef NT_TZBUG_WORKAROUND - ux_modtime = dos_to_unix_time(G.lrec.last_mod_dos_datetime); - utime2FileTime(ux_modtime, pModFT); - NT_TZBUG_PRECOMPENSATE(ux_modtime, pModFT) -#else /* !NT_TZBUG_WORKAROUND */ - - wDOSTime = (WORD)(G.lrec.last_mod_dos_datetime); - wDOSDate = (WORD)(G.lrec.last_mod_dos_datetime >> 16); - - /* The DosDateTimeToFileTime() function converts a DOS date/time - * into a 64-bit Windows NT file time */ - if (!DosDateTimeToFileTime(wDOSDate, wDOSTime, &locft)) - { - Info(slide, 0, ((char *)slide, "DosDateTime failed: %d\n", - (int)GetLastError())); - return 0; - } - if (!LocalFileTimeToFileTime(&locft, pModFT)) - { - Info(slide, 0, ((char *)slide, "LocalFileTime failed: %d\n", - (int)GetLastError())); - *pModFT = locft; - } -#endif /* ?NT_TZBUG_WORKAROUND */ - *pAccFT = *pModFT; - return (EB_UT_FL_MTIME | EB_UT_FL_ATIME); - -} /* end function getNTfiletime() */ - - - - -/****************************/ -/* Function close_outfile() */ -/****************************/ - -void close_outfile(__G) - __GDEF -{ - FILETIME Modft; /* File time type defined in NT, `last modified' time */ - FILETIME Accft; /* NT file time type, `last access' time */ - FILETIME Creft; /* NT file time type, `file creation' time */ - HANDLE hFile; /* File handle defined in NT */ - int gotTime; -#ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ - char *ansi_name = (char *)alloca(strlen(G.filename) + 1); - - INTERN_TO_ISO(G.filename, ansi_name); -# define Ansi_Fname ansi_name -#else -# define Ansi_Fname G.filename -#endif - - /* Close the file and then re-open it using the Win32 - * CreateFile call, so that the file can be created - * with GENERIC_WRITE access, otherwise the SetFileTime - * call will fail. */ - fclose(G.outfile); - - /* don't set the time stamp and attributes on standard output */ - if (uO.cflag) - return; - - gotTime = getNTfiletime(__G__ &Modft, &Accft, &Creft); - - /* open a handle to the file before processing extra fields; - we do this in case new security on file prevents us from updating - time stamps */ - hFile = CreateFile(Ansi_Fname, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - - /* sfield@microsoft.com: set attributes before time in case we decide to - support other filetime members later. This also allows us to apply - attributes before the security is changed, which may prevent this - from succeeding otherwise. Also, since most files don't have - any interesting attributes, only change them if something other than - FILE_ATTRIBUTE_ARCHIVE appears in the attributes. This works well - as an optimization because FILE_ATTRIBUTE_ARCHIVE gets applied to the - file anyway, when it's created new. */ - if((G.pInfo->file_attr & 0x7F) & ~FILE_ATTRIBUTE_ARCHIVE) { - if (!SetFileAttributes(Ansi_Fname, G.pInfo->file_attr & 0x7F)) - Info(slide, 1, ((char *)slide, - "\nwarning (%d): could not set file attributes\n", - (int)GetLastError())); - } - -#ifdef NTSD_EAS - /* set extra fields, both stored-in-zipfile and .LONGNAME flavors */ - if (G.extra_field) { /* zipfile extra field may have extended attribs */ - int err = EvalExtraFields(__G__ G.filename, G.extra_field, - G.lrec.extra_field_length); - - if (err == IZ_EF_TRUNC) { - if (uO.qflag) - Info(slide, 1, ((char *)slide, "%-22s ", - FnFilter1(G.filename))); - Info(slide, 1, ((char *)slide, LoadFarString(TruncNTSD), - makeword(G.extra_field+2)-10, uO.qflag? "\n":"")); - } - } -#endif /* NTSD_EAS */ - - if ( hFile == INVALID_HANDLE_VALUE ) - Info(slide, 1, ((char *)slide, - "\nCreateFile error %d when trying set file time\n", - (int)GetLastError())); - else { - if (gotTime) { - FILETIME *pModft = (gotTime & EB_UT_FL_MTIME) ? &Modft : NULL; - FILETIME *pAccft = (gotTime & EB_UT_FL_ATIME) ? &Accft : NULL; - FILETIME *pCreft = (gotTime & EB_UT_FL_CTIME) ? &Creft : NULL; - - if (!SetFileTime(hFile, pCreft, pAccft, pModft)) - Info(slide, 0, ((char *)slide, "\nSetFileTime failed: %d\n", - (int)GetLastError())); - } - CloseHandle(hFile); - } - - return; - -#undef Ansi_Fname - -} /* end function close_outfile() */ - - - - -#ifdef TIMESTAMP - -/*************************/ -/* Function stamp_file() */ -/*************************/ - -int stamp_file(__GPRO__ ZCONST char *fname, time_t modtime) -{ - FILETIME Modft; /* File time type defined in NT, `last modified' time */ - HANDLE hFile; /* File handle defined in NT */ - int errstat = 0; /* return status: 0 == "OK", -1 == "Failure" */ -#ifndef NT_TZBUG_WORKAROUND - time_t utime_dosmin; /* internal variable for UTIME_BOUNDCHECK_1 */ -#endif - int fs_uses_loctime = FStampIsLocTime(__G__ fname); -#ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ - char *ansi_name = (char *)alloca(strlen(fname) + 1); - - INTERN_TO_ISO(fname, ansi_name); -# define Ansi_Fname ansi_name -#else -# define Ansi_Fname fname -#endif - - /* open a handle to the file to prepare setting the mod-time stamp */ - hFile = CreateFile(Ansi_Fname, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - if ( hFile == INVALID_HANDLE_VALUE ) { - errstat = -1; - } else { - /* convert time_t modtime into WIN32 native 64bit format */ - UTIME_BOUNDCHECK_1(modtime) - utime2FileTime(modtime, &Modft); - NT_TZBUG_PRECOMPENSATE(modtime, &Modft) - /* set Access and Modification times of the file to modtime */ - if (!SetFileTime(hFile, NULL, &Modft, &Modft)) { - errstat = -1; - } - CloseHandle(hFile); - } - - return errstat; - -#undef Ansi_Fname -} /* end function stamp_file() */ - -#endif /* TIMESTAMP */ - - - - -/***********************/ -/* Function isfloppy() */ /* more precisely, is it removable? */ -/***********************/ - -static int isfloppy(int nDrive) /* 1 == A:, 2 == B:, etc. */ -{ - char rootPathName[4]; - - rootPathName[0] = (char)('A' + nDrive - 1); /* build the root path */ - rootPathName[1] = ':'; /* name, e.g. "A:/" */ - rootPathName[2] = '/'; - rootPathName[3] = '\0'; - - return (GetDriveType(rootPathName) == DRIVE_REMOVABLE); - -} /* end function isfloppy() */ - - - - -/*****************************/ -/* Function NTQueryVolInfo() */ -/*****************************/ - -/* - * Note: 8.3 limits on filenames apply only to old-style FAT filesystems. - * More recent versions of Windows (Windows NT 3.5 / Windows 4.0) - * can support long filenames (LFN) on FAT filesystems. Check the - * filesystem maximum component length field to detect LFN support. - */ - -static int NTQueryVolInfo(__GPRO__ const char *name) -{ - /* static char lastRootPath[4] = ""; */ - /* static int lastVolOldFAT; */ - /* static int lastVolLocTim; */ - char *tmp0; - char tmp1[MAX_PATH], tmp2[MAX_PATH]; - unsigned volSerNo, maxCompLen, fileSysFlags; -#ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ - char *ansi_name = (char *)alloca(strlen(name) + 1); - - INTERN_TO_ISO(name, ansi_name); - name = ansi_name; -#endif - - if ((!strncmp(name, "//", 2) || !strncmp(name,"\\\\", 2)) && - (name[2] != '\0' && name[2] != '/' && name[2] != '\\')) { - /* GetFullPathname() and GetVolumeInformation() do not work - * on UNC names. For now, we return "error". - * **FIXME**: check if UNC name is mapped to a drive letter - * and use mapped drive for volume info query. - */ - return FALSE; - } - if (isalpha((uch)name[0]) && (name[1] == ':')) - tmp0 = (char *)name; - else - { - if (!GetFullPathName(name, MAX_PATH, tmp1, &tmp0)) - return FALSE; - tmp0 = &tmp1[0]; - } - if (strncmp(G.lastRootPath, tmp0, 2) != 0) { - /* For speed, we skip repeated queries for the same device */ - strncpy(G.lastRootPath, tmp0, 2); /* Build the root path name, */ - G.lastRootPath[2] = '/'; /* e.g. "A:/" */ - G.lastRootPath[3] = '\0'; - - if (!GetVolumeInformation((LPCTSTR)G.lastRootPath, - (LPTSTR)tmp1, (DWORD)MAX_PATH, - (LPDWORD)&volSerNo, (LPDWORD)&maxCompLen, - (LPDWORD)&fileSysFlags, (LPTSTR)tmp2, (DWORD)MAX_PATH)) { - G.lastRootPath[0] = '\0'; - return FALSE; - } - - /* LFNs are available if the component length is > 12 */ - G.lastVolOldFAT = (maxCompLen <= 12); -/* G.lastVolOldFAT = !strncmp(strupr(tmp2), "FAT", 3); old version */ - - /* Volumes in (V)FAT and (OS/2) HPFS format store file timestamps in - * local time! - */ - G.lastVolLocTim = !strncmp(strupr(tmp2), "VFAT", 4) || - !strncmp(tmp2, "HPFS", 4) || - !strncmp(tmp2, "FAT", 3); - } - - return TRUE; - -} /* end function NTQueryVolInfo() */ - - - - -/*****************************/ -/* Function IsVolumeOldFAT() */ -/*****************************/ - -static int IsVolumeOldFAT(__GPRO__ const char *name) -{ - return (NTQueryVolInfo(__G__ name) ? G.lastVolOldFAT : FALSE); -} - - - - -#ifndef SFX - -/************************/ -/* Function do_wild() */ /* identical to OS/2 version */ -/************************/ - -char *do_wild(__G__ wildspec) - __GDEF - char *wildspec; /* only used first time on a given dir */ -{ - /* static zDIR *wild_dir = NULL; */ - /* static char *dirname, *wildname, matchname[FILNAMSIZ]; */ - /* static int firstcall=TRUE, have_dirname, dirnamelen; */ - char *fnamestart; - struct zdirent *file; - - /* Even when we're just returning wildspec, we *always* do so in - * matchname[]--calling routine is allowed to append four characters - * to the returned string, and wildspec may be a pointer to argv[]. - */ - if (!G.notfirstcall) { /* first call: must initialize everything */ - G.notfirstcall = TRUE; - - if (!iswild(wildspec)) { - strcpy(G.matchname, wildspec); - G.have_dirname = FALSE; - G.wild_dir = NULL; - return G.matchname; - } - - /* break the wildspec into a directory part and a wildcard filename */ - if ((G.wildname = strrchr(wildspec, '/')) == NULL && - (G.wildname = strrchr(wildspec, ':')) == NULL) { - G.dirname = "."; - G.dirnamelen = 1; - G.have_dirname = FALSE; - G.wildname = wildspec; - } else { - ++G.wildname; /* point at character after '/' or ':' */ - G.dirnamelen = G.wildname - wildspec; - if ((G.dirname = (char *)malloc(G.dirnamelen+1)) == NULL) { - Info(slide, 1, ((char *)slide, - "warning: cannot allocate wildcard buffers\n")); - strcpy(G.matchname, wildspec); - return G.matchname; /* but maybe filespec was not a wildcard */ - } - strncpy(G.dirname, wildspec, G.dirnamelen); - G.dirname[G.dirnamelen] = '\0'; /* terminate for strcpy below */ - G.have_dirname = TRUE; - } - Trace((stderr, "do_wild: dirname = [%s]\n", G.dirname)); - - if ((G.wild_dir = (zvoid *)Opendir(G.dirname)) != NULL) { - if (G.have_dirname) { - strcpy(G.matchname, G.dirname); - fnamestart = G.matchname + G.dirnamelen; - } else - fnamestart = G.matchname; - while ((file = Readdir((zDIR *)G.wild_dir)) != NULL) { - Trace((stderr, "do_wild: Readdir returns %s\n", file->d_name)); - strcpy(fnamestart, file->d_name); - if (strrchr(fnamestart, '.') == (char *)NULL) - strcat(fnamestart, "."); - if (match(fnamestart, G.wildname, 1) && /* 1 == ignore case */ - /* skip "." and ".." directory entries */ - strcmp(fnamestart, ".") && strcmp(fnamestart, "..")) { - Trace((stderr, "do_wild: match() succeeds\n")); - /* remove trailing dot */ - fnamestart += strlen(fnamestart) - 1; - if (*fnamestart == '.') - *fnamestart = '\0'; - return G.matchname; - } - } - /* if we get to here directory is exhausted, so close it */ - Closedir((zDIR *)G.wild_dir); - G.wild_dir = NULL; - } - Trace((stderr, "do_wild: Opendir(%s) returns NULL\n", G.dirname)); - - /* return the raw wildspec in case that works (e.g., directory not - * searchable, but filespec was not wild and file is readable) */ - strcpy(G.matchname, wildspec); - return G.matchname; - } - - /* last time through, might have failed opendir but returned raw wildspec */ - if (G.wild_dir == NULL) { - G.notfirstcall = FALSE; /* reset for new wildspec */ - if (G.have_dirname) - free(G.dirname); - return (char *)NULL; - } - - /* If we've gotten this far, we've read and matched at least one entry - * successfully (in a previous call), so dirname has been copied into - * matchname already. - */ - if (G.have_dirname) { - /* strcpy(G.matchname, G.dirname); */ - fnamestart = G.matchname + G.dirnamelen; - } else - fnamestart = G.matchname; - while ((file = Readdir((zDIR *)G.wild_dir)) != NULL) { - Trace((stderr, "do_wild: readdir returns %s\n", file->d_name)); - strcpy(fnamestart, file->d_name); - if (strrchr(fnamestart, '.') == (char *)NULL) - strcat(fnamestart, "."); - if (match(fnamestart, G.wildname, 1)) { /* 1 == ignore case */ - Trace((stderr, "do_wild: match() succeeds\n")); - /* remove trailing dot */ - fnamestart += strlen(fnamestart) - 1; - if (*fnamestart == '.') - *fnamestart = '\0'; - return G.matchname; - } - } - - Closedir((zDIR *)G.wild_dir); /* at least one entry read; nothing left */ - G.wild_dir = NULL; - G.notfirstcall = FALSE; /* reset for new wildspec */ - if (G.have_dirname) - free(G.dirname); - return (char *)NULL; - -} /* end function do_wild() */ - -#endif /* !SFX */ - - - -/**********************/ -/* Function mapattr() */ -/**********************/ - -/* Identical to MS-DOS, OS/2 versions. However, NT has a lot of extra - * permission stuff, so this function should probably be extended in the - * future. */ - -int mapattr(__G) - __GDEF -{ - /* set archive bit for file entries (file is not backed up): */ - G.pInfo->file_attr = ((unsigned)G.crec.external_file_attributes | - (G.crec.external_file_attributes & FILE_ATTRIBUTE_DIRECTORY ? - 0 : FILE_ATTRIBUTE_ARCHIVE)) & 0xff; - return 0; - -} /* end function mapattr() */ - - - - -/************************/ -/* Function mapname() */ -/************************/ - /* return 0 if no error, 1 if caution (filename */ -int mapname(__G__ renamed) /* truncated), 2 if warning (skip file because */ - __GDEF /* dir doesn't exist), 3 if error (skip file), */ - int renamed; /* or 10 if out of memory (skip file) */ -{ /* [also IZ_VOL_LABEL, IZ_CREATED_DIR] */ - char pathcomp[FILNAMSIZ]; /* path-component buffer */ - char *pp, *cp=NULL; /* character pointers */ - char *lastsemi = NULL; /* pointer to last semi-colon in pathcomp */ - int error; - register unsigned workch; /* hold the character being tested */ - - -/*--------------------------------------------------------------------------- - Initialize various pointers and counters and stuff. - ---------------------------------------------------------------------------*/ - - /* can create path as long as not just freshening, or if user told us */ - G.create_dirs = (!uO.fflag || renamed); - - G.created_dir = FALSE; /* not yet */ - G.renamed_fullpath = FALSE; - G.fnlen = strlen(G.filename); - - if (renamed) { - cp = G.filename - 1; /* point to beginning of renamed name... */ - while (*++cp) - if (*cp == '\\') /* convert backslashes to forward */ - *cp = '/'; - cp = G.filename; - /* use temporary rootpath if user gave full pathname */ - if (G.filename[0] == '/') { - G.renamed_fullpath = TRUE; - pathcomp[0] = '/'; /* copy the '/' and terminate */ - pathcomp[1] = '\0'; - ++cp; - } else if (isalpha((uch)G.filename[0]) && G.filename[1] == ':') { - G.renamed_fullpath = TRUE; - pp = pathcomp; - *pp++ = *cp++; /* copy the "d:" (+ '/', possibly) */ - *pp++ = *cp++; - if (*cp == '/') - *pp++ = *cp++; /* otherwise add "./"? */ - *pp = '\0'; - } - } - - /* pathcomp is ignored unless renamed_fullpath is TRUE: */ - if ((error = checkdir(__G__ pathcomp, INIT)) != 0) /* init path buffer */ - return error; /* ...unless no mem or vol label on hard disk */ - - *pathcomp = '\0'; /* initialize translation buffer */ - pp = pathcomp; /* point to translation buffer */ - if (!renamed) { /* cp already set if renamed */ - if (uO.jflag) /* junking directories */ - cp = (char *)strrchr(G.filename, '/'); - if (cp == NULL) /* no '/' or not junking dirs */ - cp = G.filename; /* point to internal zipfile-member pathname */ - else - ++cp; /* point to start of last component of path */ - } - -/*--------------------------------------------------------------------------- - Begin main loop through characters in filename. - ---------------------------------------------------------------------------*/ - - while ((workch = (uch)*cp++) != 0) { - - switch (workch) { - case '/': /* can assume -j flag not given */ - *pp = '\0'; - if ((error = checkdir(__G__ pathcomp, APPEND_DIR)) > 1) - return error; - pp = pathcomp; /* reset conversion buffer for next piece */ - lastsemi = NULL; /* leave directory semi-colons alone */ - break; - - case ':': /* drive names not stored in zipfile, */ - case '<': /* so no colons allowed */ - case '>': /* no redirection symbols allowed either */ - case '|': /* no pipe signs allowed */ - case '"': /* no double quotes allowed */ - case '?': /* no wildcards allowed */ - case '*': - *pp++ = '_'; /* these rules apply equally to FAT and NTFS */ - break; - case ';': /* start of VMS version? */ - lastsemi = pp; /* remove VMS version later... */ - *pp++ = ';'; /* but keep semicolon for now */ - break; - - case ' ': /* keep spaces unless specifically */ - /* NT cannot create filenames with spaces on FAT volumes */ - if (uO.sflag || IsVolumeOldFAT(__G__ G.filename)) - *pp++ = '_'; - else - *pp++ = ' '; - break; - - default: - /* allow European characters in filenames: */ - if (isprint(workch) || workch >= 127) - *pp++ = (char)workch; - } /* end switch */ - } /* end while loop */ - - *pp = '\0'; /* done with pathcomp: terminate it */ - - /* if not saving them, remove VMS version numbers (appended "###") */ - if (!uO.V_flag && lastsemi) { - pp = lastsemi + 1; /* semi-colon was kept: expect #'s after */ - while (isdigit((uch)(*pp))) - ++pp; - if (*pp == '\0') /* only digits between ';' and end: nuke */ - *lastsemi = '\0'; - } - -/*--------------------------------------------------------------------------- - Report if directory was created (and no file to create: filename ended - in '/'), check name to be sure it exists, and combine path and name be- - fore exiting. - ---------------------------------------------------------------------------*/ - - if (G.filename[G.fnlen-1] == '/') { - checkdir(__G__ G.filename, GETPATH); - if (G.created_dir) { -#ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ - char *ansi_name = (char *)alloca(strlen(G.filename) + 1); - - INTERN_TO_ISO(G.filename, ansi_name); -# define Ansi_Fname ansi_name -#else -# define Ansi_Fname G.filename -#endif - if (QCOND2) { - Info(slide, 0, ((char *)slide, " creating: %-22s\n", - FnFilter1(G.filename))); - } - - /* set file attributes: - The default for newly created directories is "DIR attribute - flags set", so there is no need to change attributes unless - one of the DOS style attribute flags is set. The readonly - attribute need not be masked, since it does not prevent - modifications in the new directory. */ - if(G.pInfo->file_attr & (0x7F & ~FILE_ATTRIBUTE_DIRECTORY)) { - if (!SetFileAttributes(Ansi_Fname, G.pInfo->file_attr & 0x7F)) - Info(slide, 1, ((char *)slide, - "\nwarning (%d): could not set file attributes for %s\n", - (int)GetLastError(), G.filename)); - } - -#ifdef NTSD_EAS - /* set extra fields, both stored-in-zipfile and .LONGNAME flavors */ - if (G.extra_field) { /* zipfile e.f. may have extended attribs */ - int err = EvalExtraFields(__G__ G.filename, G.extra_field, - G.lrec.extra_field_length); - - if (err == IZ_EF_TRUNC) { - if (uO.qflag) - Info(slide, 1, ((char *)slide, "%-22s ", - FnFilter1(G.filename))); - Info(slide, 1, ((char *)slide, LoadFarString(TruncNTSD), - makeword(G.extra_field+2)-10, uO.qflag? "\n":"")); - } - } -#endif /* NTSD_EAS */ - return IZ_CREATED_DIR; /* set dir time (note trailing '/') */ - } - return 2; /* dir existed already; don't look for data to extract */ - } - - if (*pathcomp == '\0') { - Info(slide, 1, ((char *)slide, "mapname: conversion of %s failed\n", - FnFilter1(G.filename))); - return 3; - } - - checkdir(__G__ pathcomp, APPEND_NAME); /* returns 1 if truncated: care? */ - checkdir(__G__ G.filename, GETPATH); - Trace((stderr, "mapname returns with filename = [%s] (error = %d)\n\n", - FnFilter1(G.filename), error)); - - if (G.pInfo->vollabel) { /* set the volume label now */ - char drive[4]; -#ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ - char *ansi_name = (char *)alloca(strlen(G.filename) + 1); - INTERN_TO_ISO(G.filename, ansi_name); -# define Ansi_Fname ansi_name -#else -# define Ansi_Fname G.filename -#endif - - /* Build a drive string, e.g. "b:" */ - drive[0] = (char)('a' + G.nLabelDrive - 1); - strcpy(drive + 1, ":\\"); - if (QCOND2) - Info(slide, 0, ((char *)slide, "labelling %s %-22s\n", drive, - FnFilter1(G.filename))); - if (!SetVolumeLabel(drive, Ansi_Fname)) { - Info(slide, 1, ((char *)slide, - "mapname: error setting volume label\n")); - return 3; - } - return 2; /* success: skip the "extraction" quietly */ -#undef Ansi_Fname - } - - return error; - -} /* end function mapname() */ - - - - -/**********************/ -/* Function map2fat() */ /* Not quite identical to OS/2 version */ -/**********************/ - -static void map2fat(pathcomp, pEndFAT) - char *pathcomp, **pEndFAT; -{ - char *ppc = pathcomp; /* variable pointer to pathcomp */ - char *pEnd = *pEndFAT; /* variable pointer to buildpathFAT */ - char *pBegin = *pEndFAT; /* constant pointer to start of this comp. */ - char *last_dot = NULL; /* last dot not converted to underscore */ - int dotname = FALSE; /* flag: path component begins with dot */ - /* ("." and ".." don't count) */ - register unsigned workch; /* hold the character being tested */ - - - /* Only need check those characters which are legal in NTFS but not - * in FAT: to get here, must already have passed through mapname. - * Also must truncate path component to ensure 8.3 compliance. - */ - while ((workch = (uch)*ppc++) != 0) { - switch (workch) { - case '[': - case ']': - case '+': - case ',': - case ';': - case '=': - *pEnd++ = '_'; /* convert brackets to underscores */ - break; - - case '.': - if (pEnd == *pEndFAT) { /* nothing appended yet... */ - if (*ppc == '\0') /* don't bother appending a */ - break; /* "./" component to the path */ - else if (*ppc == '.' && ppc[1] == '\0') { /* "../" */ - *pEnd++ = '.'; /* add first dot, unchanged... */ - ++ppc; /* skip second dot, since it will */ - } else { /* be "added" at end of if-block */ - *pEnd++ = '_'; /* FAT doesn't allow null filename */ - dotname = TRUE; /* bodies, so map .exrc -> _.exrc */ - } /* (extra '_' now, "dot" below) */ - } else if (dotname) { /* found a second dot, but still */ - dotname = FALSE; /* have extra leading underscore: */ - *pEnd = '\0'; /* remove it by shifting chars */ - pEnd = *pEndFAT + 1; /* left one space (e.g., .p1.p2: */ - while (pEnd[1]) { /* __p1 -> _p1_p2 -> _p1.p2 when */ - *pEnd = pEnd[1]; /* finished) [opt.: since first */ - ++pEnd; /* two chars are same, can start */ - } /* shifting at second position] */ - } - last_dot = pEnd; /* point at last dot so far... */ - *pEnd++ = '_'; /* convert dot to underscore for now */ - break; - - default: - *pEnd++ = (char)workch; - - } /* end switch */ - } /* end while loop */ - - *pEnd = '\0'; /* terminate buildpathFAT */ - - /* NOTE: keep in mind that pEnd points to the end of the path - * component, and *pEndFAT still points to the *beginning* of it... - * Also note that the algorithm does not try to get too fancy: - * if there are no dots already, the name either gets truncated - * at 8 characters or the last underscore is converted to a dot - * (only if more characters are saved that way). In no case is - * a dot inserted between existing characters. - */ - if (last_dot == NULL) { /* no dots: check for underscores... */ - char *plu = strrchr(pBegin, '_'); /* pointer to last underscore */ - - if (plu == NULL) { /* no dots, no underscores: truncate at 8 chars */ - *pEndFAT += 8; /* (or could insert '.' and keep 11...?) */ - if (*pEndFAT > pEnd) - *pEndFAT = pEnd; /* oops...didn't have 8 chars to truncate */ - else - **pEndFAT = '\0'; - } else if (MIN(plu - pBegin, 8) + MIN(pEnd - plu - 1, 3) > 8) { - last_dot = plu; /* be lazy: drop through to next if-blk */ - } else if ((pEnd - *pEndFAT) > 8) { - *pEndFAT += 8; /* more fits into just basename than if */ - **pEndFAT = '\0'; /* convert last underscore to dot */ - } else - *pEndFAT = pEnd; /* whole thing fits into 8 chars or less */ - } - - if (last_dot != NULL) { /* one dot (or two, in the case of */ - *last_dot = '.'; /* "..") is OK: put it back in */ - - if ((last_dot - pBegin) > 8) { - char *p, *q; - int i; - - p = last_dot; - q = last_dot = pBegin + 8; - for (i = 0; (i < 4) && *p; ++i) /* too many chars in basename: */ - *q++ = *p++; /* shift .ext left and trun- */ - *q = '\0'; /* cate/terminate it */ - *pEndFAT = q; - } else if ((pEnd - last_dot) > 4) { /* too many chars in extension */ - *pEndFAT = last_dot + 4; - **pEndFAT = '\0'; - } else - *pEndFAT = pEnd; /* filename is fine; point at terminating zero */ - - if ((last_dot - pBegin) > 0 && last_dot[-1] == ' ') - last_dot[-1] = '_'; /* NO blank in front of '.'! */ - } -} /* end function map2fat() */ - - - - -/***********************/ /* Borrowed from os2.c for UnZip 5.1. */ -/* Function checkdir() */ /* Difference: no EA stuff */ -/***********************/ /* HPFS stuff works on NTFS too */ - -int checkdir(__G__ pathcomp, flag) - __GDEF - char *pathcomp; - int flag; -/* - * returns: 1 - (on APPEND_NAME) truncated filename - * 2 - path doesn't exist, not allowed to create - * 3 - path doesn't exist, tried to create and failed; or - * path exists and is not a directory, but is supposed to be - * 4 - path is too long - * 10 - can't allocate memory for filename buffers - */ -{ - /* static int rootlen = 0; */ /* length of rootpath */ - /* static char *rootpath; */ /* user's "extract-to" directory */ - /* static char *buildpathHPFS; */ /* full path (so far) to extracted file, */ - /* static char *buildpathFAT; */ /* both HPFS/EA (main) and FAT versions */ - /* static char *endHPFS; */ /* corresponding pointers to end of */ - /* static char *endFAT; */ /* buildpath ('\0') */ - -# define FN_MASK 7 -# define FUNCTION (flag & FN_MASK) - - - -/*--------------------------------------------------------------------------- - APPEND_DIR: append the path component to the path being built and check - for its existence. If doesn't exist and we are creating directories, do - so for this one; else signal success or error as appropriate. - ---------------------------------------------------------------------------*/ - - if (FUNCTION == APPEND_DIR) { - char *p = pathcomp; - int too_long=FALSE; - - Trace((stderr, "appending dir segment [%s]\n", pathcomp)); - while ((*G.endHPFS = *p++) != '\0') /* copy to HPFS filename */ - ++G.endHPFS; - if (!IsVolumeOldFAT(__G__ G.buildpathHPFS)) { - p = pathcomp; - while ((*G.endFAT = *p++) != '\0') /* copy to FAT filename, too */ - ++G.endFAT; - } else - map2fat(pathcomp, &G.endFAT); /* map into FAT fn, update endFAT */ - - /* GRR: could do better check, see if overrunning buffer as we go: - * check endHPFS-buildpathHPFS after each append, set warning variable - * if within 20 of FILNAMSIZ; then if var set, do careful check when - * appending. Clear variable when begin new path. */ - - /* next check: need to append '/', at least one-char name, '\0' */ - if ((G.endHPFS-G.buildpathHPFS) > FILNAMSIZ-3) - too_long = TRUE; /* check if extracting dir? */ -#ifdef FIX_STAT_BUG - /* Borland C++ 5.0 does not handle a call to stat() well if the - * directory does not exist (it tends to crash in strange places.) - * This is apparently a problem only when compiling for GUI rather - * than console. The code below attempts to work around this problem. - */ - if (access(G.buildpathFAT, 0) != 0) { - if (!G.create_dirs) { /* told not to create (freshening) */ - free(G.buildpathHPFS); - free(G.buildpathFAT); - return 2; /* path doesn't exist: nothing to do */ - } - if (too_long) { /* GRR: should allow FAT extraction w/o EAs */ - Info(slide, 1, ((char *)slide, - "checkdir error: path too long: %s\n", - FnFilter1(G.buildpathHPFS))); - free(G.buildpathHPFS); - free(G.buildpathFAT); - return 4; /* no room for filenames: fatal */ - } - if (MKDIR(G.buildpathFAT, 0777) == -1) { /* create the directory */ - Info(slide, 1, ((char *)slide, - "checkdir error: cannot create %s\n\ - unable to process %s.\n", - FnFilter2(G.buildpathFAT), FnFilter1(G.filename))); - free(G.buildpathHPFS); - free(G.buildpathFAT); - return 3; /* path didn't exist, tried to create, failed */ - } - G.created_dir = TRUE; - } -#endif /* FIX_STAT_BUG */ - if (SSTAT(G.buildpathFAT, &G.statbuf)) /* path doesn't exist */ - { - if (!G.create_dirs) { /* told not to create (freshening) */ - free(G.buildpathHPFS); - free(G.buildpathFAT); - return 2; /* path doesn't exist: nothing to do */ - } - if (too_long) { /* GRR: should allow FAT extraction w/o EAs */ - Info(slide, 1, ((char *)slide, - "checkdir error: path too long: %s\n", - FnFilter1(G.buildpathHPFS))); - free(G.buildpathHPFS); - free(G.buildpathFAT); - return 4; /* no room for filenames: fatal */ - } - if (MKDIR(G.buildpathFAT, 0777) == -1) { /* create the directory */ - Info(slide, 1, ((char *)slide, - "checkdir error: cannot create %s\n\ - unable to process %s.\n", - FnFilter2(G.buildpathFAT), FnFilter1(G.filename))); - free(G.buildpathHPFS); - free(G.buildpathFAT); - return 3; /* path didn't exist, tried to create, failed */ - } - G.created_dir = TRUE; - } else if (!S_ISDIR(G.statbuf.st_mode)) { - Info(slide, 1, ((char *)slide, - "checkdir error: %s exists but is not directory\n \ - unable to process %s.\n", - FnFilter2(G.buildpathFAT), FnFilter1(G.filename))); - free(G.buildpathHPFS); - free(G.buildpathFAT); - return 3; /* path existed but wasn't dir */ - } - if (too_long) { - Info(slide, 1, ((char *)slide, - "checkdir error: path too long: %s\n", - FnFilter1(G.buildpathHPFS))); - free(G.buildpathHPFS); - free(G.buildpathFAT); - return 4; /* no room for filenames: fatal */ - } - *G.endHPFS++ = '/'; - *G.endFAT++ = '/'; - *G.endHPFS = *G.endFAT = '\0'; - Trace((stderr, "buildpathHPFS now = [%s]\nbuildpathFAT now = [%s]\n", - FnFilter1(G.buildpathHPFS), FnFilter2(G.buildpathFAT))); - return 0; - - } /* end if (FUNCTION == APPEND_DIR) */ - -/*--------------------------------------------------------------------------- - GETPATH: copy full FAT path to the string pointed at by pathcomp (want - filename to reflect name used on disk, not EAs; if full path is HPFS, - buildpathFAT and buildpathHPFS will be identical). Also free both paths. - ---------------------------------------------------------------------------*/ - - if (FUNCTION == GETPATH) { - Trace((stderr, "getting and freeing FAT path [%s]\n", - FnFilter1(G.buildpathFAT))); - Trace((stderr, "freeing HPFS path [%s]\n", - FnFilter1(G.buildpathHPFS))); - strcpy(pathcomp, G.buildpathFAT); - free(G.buildpathFAT); - free(G.buildpathHPFS); - G.buildpathHPFS = G.buildpathFAT = G.endHPFS = G.endFAT = NULL; - return 0; - } - -/*--------------------------------------------------------------------------- - APPEND_NAME: assume the path component is the filename; append it and - return without checking for existence. - ---------------------------------------------------------------------------*/ - - if (FUNCTION == APPEND_NAME) { - char *p = pathcomp; - int error = 0; - - Trace((stderr, "appending filename [%s]\n", FnFilter1(pathcomp))); - while ((*G.endHPFS = *p++) != '\0') { /* copy to HPFS filename */ - ++G.endHPFS; - if ((G.endHPFS-G.buildpathHPFS) >= FILNAMSIZ) { - *--G.endHPFS = '\0'; - Info(slide, 1, ((char *)slide, - "checkdir warning: path too long; truncating\n \ - %s\n -> %s\n", - FnFilter1(G.filename), FnFilter2(G.buildpathHPFS))); - error = 1; /* filename truncated */ - } - } - - if ( G.pInfo->vollabel || !IsVolumeOldFAT(__G__ G.buildpathHPFS)) { - p = pathcomp; - while ((*G.endFAT = *p++) != '\0') /* copy to FAT filename, too */ - ++G.endFAT; - } else - map2fat(pathcomp, &G.endFAT); /* map into FAT fn, update endFAT */ - Trace((stderr, "buildpathHPFS: %s\nbuildpathFAT: %s\n", - FnFilter1(G.buildpathHPFS), FnFilter2(G.buildpathFAT))); - - return error; /* could check for existence, prompt for new name... */ - - } /* end if (FUNCTION == APPEND_NAME) */ - -/*--------------------------------------------------------------------------- - INIT: allocate and initialize buffer space for the file currently being - extracted. If file was renamed with an absolute path, don't prepend the - extract-to path. - ---------------------------------------------------------------------------*/ - - if (FUNCTION == INIT) { - Trace((stderr, "initializing buildpathHPFS and buildpathFAT to ")); - if ((G.buildpathHPFS = (char *)malloc(G.fnlen+G.rootlen+1)) == NULL) - return 10; - if ((G.buildpathFAT = (char *)malloc(G.fnlen+G.rootlen+1)) == NULL) { - free(G.buildpathHPFS); - return 10; - } - if (G.pInfo->vollabel) { /* use root or renamed path, but don't store */ -/* GRR: for network drives, do strchr() and return IZ_VOL_LABEL if not [1] */ - if (G.renamed_fullpath && pathcomp[1] == ':') - *G.buildpathHPFS = (char)ToLower(*pathcomp); - else if (!G.renamed_fullpath && G.rootlen > 1 && - G.rootpath[1] == ':') - *G.buildpathHPFS = (char)ToLower(*G.rootpath); - else { - char tmpN[MAX_PATH], *tmpP; - if (GetFullPathName(".", MAX_PATH, tmpN, &tmpP) > MAX_PATH) - { /* by definition of MAX_PATH we should never get here */ - Info(slide, 1, ((char *)slide, - "checkdir warning: current dir path too long\n")); - return 1; /* can't get drive letter */ - } - G.nLabelDrive = *tmpN - 'a' + 1; - *G.buildpathHPFS = (char)(G.nLabelDrive - 1 + 'a'); - } - G.nLabelDrive = *G.buildpathHPFS - 'a' + 1; /* save for mapname() */ - if (uO.volflag == 0 || *G.buildpathHPFS < 'a' /* no labels/bogus? */ - || (uO.volflag == 1 && !isfloppy(G.nLabelDrive))) { /* !fixed */ - free(G.buildpathHPFS); - free(G.buildpathFAT); - return IZ_VOL_LABEL; /* skipping with message */ - } - *G.buildpathHPFS = '\0'; - } else if (G.renamed_fullpath) /* pathcomp = valid data */ - strcpy(G.buildpathHPFS, pathcomp); - else if (G.rootlen > 0) - strcpy(G.buildpathHPFS, G.rootpath); - else - *G.buildpathHPFS = '\0'; - G.endHPFS = G.buildpathHPFS; - G.endFAT = G.buildpathFAT; - while ((*G.endFAT = *G.endHPFS) != '\0') { - ++G.endFAT; - ++G.endHPFS; - } - Trace((stderr, "[%s]\n", FnFilter1(G.buildpathHPFS))); - return 0; - } - -/*--------------------------------------------------------------------------- - ROOT: if appropriate, store the path in rootpath and create it if neces- - sary; else assume it's a zipfile member and return. This path segment - gets used in extracting all members from every zipfile specified on the - command line. Note that under OS/2 and MS-DOS, if a candidate extract-to - directory specification includes a drive letter (leading "x:"), it is - treated just as if it had a trailing '/'--that is, one directory level - will be created if the path doesn't exist, unless this is otherwise pro- - hibited (e.g., freshening). - ---------------------------------------------------------------------------*/ - -#if (!defined(SFX) || defined(SFX_EXDIR)) - if (FUNCTION == ROOT) { - Trace((stderr, "initializing root path to [%s]\n", - FnFilter1(pathcomp))); - if (pathcomp == NULL) { - G.rootlen = 0; - return 0; - } - if ((G.rootlen = strlen(pathcomp)) > 0) { - int had_trailing_pathsep=FALSE, has_drive=FALSE, xtra=2; - - if (isalpha((uch)pathcomp[0]) && pathcomp[1] == ':') - has_drive = TRUE; /* drive designator */ - if (pathcomp[G.rootlen-1] == '/' || pathcomp[G.rootlen-1] == '\\') { - pathcomp[--G.rootlen] = '\0'; - had_trailing_pathsep = TRUE; - } - if (has_drive && (G.rootlen == 2)) { - if (!had_trailing_pathsep) /* i.e., original wasn't "x:/" */ - xtra = 3; /* room for '.' + '/' + 0 at end of "x:" */ - } else if (G.rootlen > 0) { /* need not check "x:." and "x:/" */ - if (SSTAT(pathcomp, &G.statbuf) || !S_ISDIR(G.statbuf.st_mode)) - { - /* path does not exist */ - if (!G.create_dirs /* || iswild(pathcomp) */ ) { - G.rootlen = 0; - return 2; /* treat as stored file */ - } - /* create directory (could add loop here to scan pathcomp - * and create more than one level, but really necessary?) */ - if (MKDIR(pathcomp, 0777) == -1) { - Info(slide, 1, ((char *)slide, - "checkdir: cannot create extraction directory: %s\n", - FnFilter1(pathcomp))); - G.rootlen = 0; /* path didn't exist, tried to create, */ - return 3; /* failed: file exists, or need 2+ levels */ - } - } - } - if ((G.rootpath = (char *)malloc(G.rootlen+xtra)) == NULL) { - G.rootlen = 0; - return 10; - } - strcpy(G.rootpath, pathcomp); - if (xtra == 3) /* had just "x:", make "x:." */ - G.rootpath[G.rootlen++] = '.'; - G.rootpath[G.rootlen++] = '/'; - G.rootpath[G.rootlen] = '\0'; - Trace((stderr, "rootpath now = [%s]\n", FnFilter1(G.rootpath))); - } - return 0; - } -#endif /* !SFX || SFX_EXDIR */ - -/*--------------------------------------------------------------------------- - END: free rootpath, immediately prior to program exit. - ---------------------------------------------------------------------------*/ - - if (FUNCTION == END) { - Trace((stderr, "freeing rootpath\n")); - if (G.rootlen > 0) { - free(G.rootpath); - G.rootlen = 0; - } - return 0; - } - - return 99; /* should never reach */ - -} /* end function checkdir() */ - - - - - -#ifndef SFX -#ifndef WINDLL - -/************************/ -/* Function version() */ -/************************/ - -void version(__G) - __GDEF -{ - int len; -#if (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__DJGPP__)) - char buf[80]; -#if (defined(_MSC_VER) && (_MSC_VER > 900)) - char buf2[80]; -#endif -#endif - - len = sprintf((char *)slide, CompiledWith, - -#if defined(_MSC_VER) /* MSC == VC++, but what about SDK compiler? */ - (sprintf(buf, "Microsoft C %d.%02d ", _MSC_VER/100, _MSC_VER%100), buf), -# if (_MSC_VER == 800) - "(Visual C++ v1.1)", -# elif (_MSC_VER == 850) - "(Windows NT v3.5 SDK)", -# elif (_MSC_VER == 900) - "(Visual C++ v2.x)", -# elif (_MSC_VER > 900) - (sprintf(buf2, "(Visual C++ %d.%d)", _MSC_VER/100 - 6, _MSC_VER%100/10), - buf2), -# else - "(bad version)", -# endif -#elif defined(__WATCOMC__) -# if (__WATCOMC__ % 10 > 0) - (sprintf(buf, "Watcom C/C++ %d.%02d", __WATCOMC__ / 100, - __WATCOMC__ % 100), buf), "", -# else - (sprintf(buf, "Watcom C/C++ %d.%d", __WATCOMC__ / 100, - (__WATCOMC__ % 100) / 10), buf), "", -# endif -#elif defined(__BORLANDC__) - "Borland C++", -# if (__BORLANDC__ < 0x0200) - " 1.0", -# elif (__BORLANDC__ == 0x0200) - " 2.0", -# elif (__BORLANDC__ == 0x0400) - " 3.0", -# elif (__BORLANDC__ == 0x0410) /* __BCPLUSPLUS__ = 0x0310 */ - " 3.1", -# elif (__BORLANDC__ == 0x0452) /* __BCPLUSPLUS__ = 0x0320 */ - " 4.0 or 4.02", -# elif (__BORLANDC__ == 0x0460) /* __BCPLUSPLUS__ = 0x0340 */ - " 4.5", -# elif (__BORLANDC__ == 0x0500) /* __BCPLUSPLUS__ = 0x0340 */ - " 5.0", -# elif (__BORLANDC__ == 0x0520) /* __BCPLUSPLUS__ = 0x0520 */ - " 5.2 (C++ Builder)", /* GRR: assume this will stay sync'd? */ -# else - " later than 5.2", -# endif -#elif defined(__LCC__) - "LCC-Win32", "", -#elif defined(__GNUC__) -# if defined(__RSXNT__) -# if (defined(__DJGPP__) && !defined(__EMX__)) - (sprintf(buf, "rsxnt(djgpp v%d.%02d) / gcc ", - __DJGPP__, __DJGPP_MINOR__), buf), -# elif defined(__DJGPP__) - (sprintf(buf, "rsxnt(emx+djgpp v%d.%02d) / gcc ", - __DJGPP__, __DJGPP_MINOR__), buf), -# elif (defined(__GO32__) && !defined(__EMX__)) - "rsxnt(djgpp v1.x) / gcc ", -# elif defined(__GO32__) - "rsxnt(emx + djgpp v1.x) / gcc ", -# elif defined(__EMX__) - "rsxnt(emx)+gcc ", -# else - "rsxnt(unknown) / gcc ", -# endif -# elif defined(__CYGWIN32__) - "cygnus win32 / gcc ", -# elif defined(__MINGW32__) - "mingw32 / gcc ", -# else - "gcc ", -# endif - __VERSION__, -#else /* !_MSC_VER, !__WATCOMC__, !__BORLANDC__, !__LCC__, !__GNUC__ */ - "unknown compiler (SDK?)", "", -#endif /* ?compilers */ - - "Windows 95 / Windows NT", "\n(32-bit)", - -#ifdef __DATE__ - " on ", __DATE__ -#else - "", "" -#endif - ); - - (*G.message)((zvoid *)&G, slide, (ulg)len, 0); - - return; - -} /* end function version() */ - -#endif /* !WINDLL */ -#endif /* !SFX */ - - - -#ifdef W32_STAT_BANDAID - -/* All currently known variants of WIN32 operating systems (Windows 95/98, - * WinNT 3.x, 4.0, 5.0) have a nasty bug in the OS kernel concerning - * conversions between UTC and local time: In the time conversion functions - * of the Win32 API, the timezone offset (including seasonal daylight saving - * shift) between UTC and local time evaluation is erratically based on the - * current system time. The correct evaluation must determine the offset - * value as it {was/is/will be} for the actual time to be converted. - * - * Some versions of MS C runtime lib's stat() returns utc time-stamps so - * that localtime(timestamp) corresponds to the (potentially false) local - * time shown by the OS' system programs (Explorer, command shell dir, etc.) - * The RSXNT port follows the same strategy, but fails to recognize the - * access-time attribute. - * - * For the NTFS file system (and other filesystems that store time-stamps - * as UTC values), this results in st_mtime (, st_{c|a}time) fields which - * are not stable but vary according to the seasonal change of "daylight - * saving time in effect / not in effect". - * - * Other C runtime libs (CygWin, or the CRT DLLs supplied with Win95/NT - * return the unix-time equivalent of the UTC FILETIME values as got back - * from the Win32 API call. This time, return values from NTFS are correct - * whereas utimes from files on (V)FAT volumes vary according to the DST - * switches. - * - * To achieve timestamp consistency of UTC (UT extra field) values in - * Zip archives, the Info-ZIP programs require work-around code for - * proper time handling in stat() (and other time handling routines). - */ -/* stat() functions under Windows95 tend to fail for root directories. * - * Watcom and Borland, at least, are affected by this bug. Watcom made * - * a partial fix for 11.0 but still missed some cases. This substitute * - * detects the case and fills in reasonable values. Otherwise we get * - * effects like failure to extract to a root dir because it's not found. */ - -int zstat_win32(__W32STAT_GLOBALS__ const char *path, struct stat *buf) -{ - if (!stat(path, buf)) - { -#ifdef NT_TZBUG_WORKAROUND - /* stat was successful, now redo the time-stamp fetches */ - int fs_uses_loctime = FStampIsLocTime(__G__ path); - HANDLE h; - FILETIME Modft, Accft, Creft; -#ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ - char *ansi_path = (char *)alloca(strlen(path) + 1); - - INTERN_TO_ISO(path, ansi_path); -# define Ansi_Path ansi_path -#else -# define Ansi_Path path -#endif - - TTrace((stdout, "stat(%s) finds modtime %08lx\n", path, buf->st_mtime)); - h = CreateFile(Ansi_Path, GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - if (h != INVALID_HANDLE_VALUE) { - BOOL ftOK = GetFileTime(h, &Creft, &Accft, &Modft); - CloseHandle(h); - - if (ftOK) { - FTTrace((stdout, "GetFileTime returned Modft", 0, &Modft)); - FTTrace((stdout, "GetFileTime returned Creft", 0, &Creft)); - if (!fs_uses_loctime) { - /* On a filesystem that stores UTC timestamps, we refill - * the time fields of the struct stat buffer by directly - * using the UTC values as returned by the Win32 - * GetFileTime() API call. - */ - FileTime2utime(&Modft, &(buf->st_mtime)); - if (Accft.dwLowDateTime != 0 || Accft.dwHighDateTime != 0) - FileTime2utime(&Accft, &(buf->st_atime)); - else - buf->st_atime = buf->st_mtime; - if (Creft.dwLowDateTime != 0 || Creft.dwHighDateTime != 0) - FileTime2utime(&Creft, &(buf->st_ctime)); - else - buf->st_ctime = buf->st_mtime; - TTrace((stdout,"NTFS, recalculated modtime %08lx\n", - buf->st_mtime)); - } else { - /* On VFAT and FAT-like filesystems, the FILETIME values - * are converted back to the stable local time before - * converting them to UTC unix time-stamps. - */ - VFatFileTime2utime(&Modft, &(buf->st_mtime)); - if (Accft.dwLowDateTime != 0 || Accft.dwHighDateTime != 0) - VFatFileTime2utime(&Accft, &(buf->st_atime)); - else - buf->st_atime = buf->st_mtime; - if (Creft.dwLowDateTime != 0 || Creft.dwHighDateTime != 0) - VFatFileTime2utime(&Creft, &(buf->st_ctime)); - else - buf->st_ctime = buf->st_mtime; - TTrace((stdout, "VFAT, recalculated modtime %08lx\n", - buf->st_mtime)); - } - } - } -# undef Ansi_Path -#endif /* NT_TZBUG_WORKAROUND */ - return 0; - } -#ifdef W32_STATROOT_FIX - else - { - DWORD flags; -#ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ - char *ansi_path = (char *)alloca(strlen(path) + 1); - - INTERN_TO_ISO(path, ansi_path); -# define Ansi_Path ansi_path -#else -# define Ansi_Path path -#endif - - flags = GetFileAttributes(Ansi_Path); - if (flags != 0xFFFFFFFF && flags & FILE_ATTRIBUTE_DIRECTORY) { - Trace((stderr, "\nstat(\"%s\",...) failed on existing directory\n", - path)); - memset(buf, 0, sizeof(struct stat)); - buf->st_atime = buf->st_ctime = buf->st_mtime = - dos_to_unix_time(DOSTIME_MINIMUM); /* 1-1-80 */ - buf->st_mode = S_IFDIR | S_IREAD | - ((flags & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE); - return 0; - } /* assumes: stat() won't fail on non-dirs without good reason */ -# undef Ansi_Path - } -#endif /* W32_STATROOT_FIX */ - return -1; -} - -#endif /* W32_STAT_BANDAID */ - -#endif /* !FUNZIP */ - - - -#ifndef WINDLL -/* This replacement getch() function was originally created for Watcom C - * and then additionally used with CYGWIN. Since UnZip 5.4, all other Win32 - * ports apply this replacement rather that their supplied getch() (or - * alike) function. There are problems with unabsorbed LF characters left - * over in the keyboard buffer under Win95 (and 98) when ENTER was pressed. - * (Under Win95, ENTER returns two(!!) characters: CR-LF.) This problem - * does not appear when run on a WinNT console prompt! - */ - -/* Watcom 10.6's getch() does not handle Alt+. */ -/* Note that if PASSWD_FROM_STDIN is defined, the file containing */ -/* the password must have a carriage return after the word, not a */ -/* Unix-style newline (linefeed only). This discards linefeeds. */ - -int getch_win32(void) -{ - HANDLE stin; - DWORD rc; - unsigned char buf[2]; - int ret = -1; - DWORD odemode = ~(DWORD)0; - -# ifdef PASSWD_FROM_STDIN - stin = GetStdHandle(STD_INPUT_HANDLE); -# else - stin = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); - if (stin == INVALID_HANDLE_VALUE) - return -1; -# endif - if (GetConsoleMode(stin, &odemode)) - SetConsoleMode(stin, ENABLE_PROCESSED_INPUT); /* raw except ^C noticed */ - if (ReadFile(stin, &buf, 1, &rc, NULL) && rc == 1) - ret = buf[0]; - /* when the user hits return we get CR LF. We discard the LF, not the CR, - * because when we call this for the first time after a previous input - * such as the one for "replace foo? [y]es, ..." the LF may still be in - * the input stream before whatever the user types at our prompt. */ - if (ret == '\n') - if (ReadFile(stin, &buf, 1, &rc, NULL) && rc == 1) - ret = buf[0]; - if (odemode != ~(DWORD)0) - SetConsoleMode(stin, odemode); -# ifndef PASSWD_FROM_STDIN - CloseHandle(stin); -# endif - return ret; -} -#endif /* !WINDLL */ diff --git a/Build/source/libs/unzip/windll/decs.h b/Build/source/libs/unzip/windll/decs.h deleted file mode 100644 index fc11410771f..00000000000 --- a/Build/source/libs/unzip/windll/decs.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef __decs_h /* prevent multiple inclusions */ -#define __decs_h - -#include -#ifndef __unzip_h -# include "unzip.h" -#endif -#ifndef __structs_h -# include "structs.h" -#endif - -#define WizMatch match - -void WINAPI Wiz_NoPrinting(int f); -int WINAPI Wiz_Validate(LPSTR archive, int AllCodes); -BOOL WINAPI Wiz_Init(zvoid *, LPUSERFUNCTIONS); -BOOL WINAPI Wiz_SetOpts(zvoid *, LPDCL); -int WINAPI Wiz_Unzip(zvoid *, int, char **, int, char **); -int WINAPI Wiz_SingleEntryUnzip(int, char **, int, char **, - LPDCL, LPUSERFUNCTIONS); - -int WINAPI Wiz_UnzipToMemory(LPSTR zip, LPSTR file, - LPUSERFUNCTIONS lpUserFunctions, - UzpBuffer *retstr); -int WINAPI Wiz_Grep(LPSTR archive, LPSTR file, LPSTR pattern, - int cmd, int SkipBin, - LPUSERFUNCTIONS lpUserFunctions); - -#endif /* __decs_h */ diff --git a/Build/source/libs/unzip/windll/structs.h b/Build/source/libs/unzip/windll/structs.h deleted file mode 100644 index 39a908d3e16..00000000000 --- a/Build/source/libs/unzip/windll/structs.h +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef __structs_h -#define __structs_h - -#ifndef Far -# define Far far -#endif - -/* Porting definitions between Win 3.1x and Win32 */ -#ifdef WIN32 -# define far -# define _far -# define __far -# define near -# define _near -# define __near -# ifndef FAR -# define FAR -# endif -#endif - -#ifndef PATH_MAX -# define PATH_MAX 260 /* max total file or directory name path */ -#endif - -#ifndef DEFINED_ONCE -#define DEFINED_ONCE - -typedef int (WINAPI DLLPRNT) (LPSTR, unsigned long); -typedef int (WINAPI DLLPASSWORD) (LPSTR, int, LPCSTR, LPCSTR); -typedef int (WINAPI DLLSERVICE) (LPCSTR, unsigned long); -#endif -typedef void (WINAPI DLLSND) (void); -typedef int (WINAPI DLLREPLACE)(LPSTR); -typedef void (WINAPI DLLMESSAGE)(unsigned long, unsigned long, unsigned, - unsigned, unsigned, unsigned, unsigned, unsigned, - char, LPSTR, LPSTR, unsigned long, char); - -typedef struct { -DLLPRNT *print; -DLLSND *sound; -DLLREPLACE *replace; -DLLPASSWORD *password; -DLLMESSAGE *SendApplicationMessage; -DLLSERVICE *ServCallBk; -unsigned long TotalSizeComp; -unsigned long TotalSize; -int CompFactor; -unsigned int NumMembers; -WORD cchComment; -} USERFUNCTIONS, far * LPUSERFUNCTIONS; - -typedef struct { -int ExtractOnlyNewer; -int SpaceToUnderscore; -int PromptToOverwrite; -int fQuiet; -int ncflag; -int ntflag; -int nvflag; -int nUflag; -int nzflag; -int ndflag; -int noflag; -int naflag; -int nZIflag; -int C_flag; -int fPrivilege; -LPSTR lpszZipFN; -LPSTR lpszExtractDir; -} DCL, far * LPDCL; - -#endif /* __structs_h */ diff --git a/Build/source/libs/unzip/windll/unzver.h b/Build/source/libs/unzip/windll/unzver.h deleted file mode 100644 index d216ec225fa..00000000000 --- a/Build/source/libs/unzip/windll/unzver.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - Copyright (c) 1990-2000 Info-ZIP. All rights reserved. - - See the accompanying file LICENSE, version 2000-Apr-09 or later - (the contents of which are also included in unzip.h) for terms of use. - If, for some reason, these files are missing, the Info-ZIP license - also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html -*/ -#ifndef __unzver_h /* prevent multiple inclusions */ -#define __unzver_h - -#define UNZ_DLL_VERSION "5.41\0" -#define COMPANY_NAME "Info-ZIP\0" - -#endif /* __unzver_h */ diff --git a/Build/source/libs/unzip/windll/windll.c b/Build/source/libs/unzip/windll/windll.c deleted file mode 100644 index ced6d5d6b4b..00000000000 --- a/Build/source/libs/unzip/windll/windll.c +++ /dev/null @@ -1,744 +0,0 @@ -/* - Copyright (C) 1996 Mike White - Permission is granted to any individual or institution to use, copy, or - redistribute this software so long as all of the original files are included, - that it is not sold for profit, and that this copyright notice is retained. - -*/ -/* Windows Info-ZIP Unzip DLL module - * - * Author: Mike White - * - * Original: 1996 - * - * This module has the entry points for "unzipping" a zip file. - */ - -/*--------------------------------------------------------------------------- - - This file is the WINDLL replacement for the generic ``main program source - file'' unzip.c. - - See the general comments in the header part of unzip.c. - - Copyrights: see accompanying file "COPYING" in UnZip source distribution. - (This software is free but NOT IN THE PUBLIC DOMAIN. There - are some restrictions on commercial use.) - - ---------------------------------------------------------------------------*/ - -#include -#ifdef __RSXNT__ -# include "win32/rsxntwin.h" -#endif -#ifdef __BORLANDC__ -#include -#endif -#define UNZIP_INTERNAL -#include "unzip.h" -#include "crypt.h" -#include "version.h" -#include "windll.h" -#include "structs.h" -#include "consts.h" - -/* Added type casts to prevent potential "type mismatch" error messages. */ -#ifdef REENTRANT -# undef __G -# undef __G__ -# define __G (Uz_Globs *)pG -# define __G__ (Uz_Globs *)pG, -#endif - -HANDLE hwildZipFN; -HANDLE hInst; /* current instance */ -HANDLE hDCL; -int fNoPrinting = 0; -extern jmp_buf dll_error_return; - -/* For displaying status messages and error messages */ -static int UZ_EXP DllMessagePrint(zvoid *pG, uch *buf, ulg size, int flag); - -#if 0 /* currently unused */ -/* For displaying files extracted to the display window */ -int DllDisplayPrint(zvoid *pG, uch *buf, ulg size, int flag); -#endif /* never */ - -/* Callback function for status report and/or user interception */ -static int UZ_EXP Wiz_StatReportCB(zvoid *pG, int fnflag, ZCONST char *zfn, - ZCONST char *efn, ZCONST zvoid *details); - -/* Dummy sound function for those applications that don't use sound */ -static void WINAPI DummySound(void); - -#ifndef UNZIPLIB -/* DLL Entry Point */ - -#ifdef __BORLANDC__ -#pragma argsused -/* Borland seems to want DllEntryPoint instead of DllMain like MSVC */ -#define DllMain DllEntryPoint -#endif -#ifdef WIN32 -BOOL WINAPI DllMain( HINSTANCE hInstance, - DWORD dwReason, - LPVOID plvReserved) -#else -int FAR PASCAL LibMain( HINSTANCE hInstance, - WORD wDataSegment, - WORD wHeapSize, - LPSTR lpszCmdLine ) -#endif -{ -#ifndef WIN32 -/* The startup code for the DLL initializes the local heap(if there is one) - * with a call to LocalInit which locks the data segment. - */ - -if ( wHeapSize != 0 ) - { - UnlockData( 0 ); - } -hInst = hInstance; -return 1; /* Indicate that the DLL was initialized successfully. */ -#else -BOOL rc = TRUE; -switch( dwReason ) - { - case DLL_PROCESS_ATTACH: - // DLL is loaded. Do your initialization here. - // If cannot init, set rc to FALSE. - hInst = hInstance; - break; - - case DLL_PROCESS_DETACH: - // DLL is unloaded. Do your cleanup here. - break; - default: - break; - } -return rc; -#endif -} - -#ifdef __BORLANDC__ -#pragma argsused -#endif -int FAR PASCAL WEP ( int bSystemExit ) -{ -return 1; -} -#endif /* !UNZIPLIB */ - -/* DLL calls */ - -/* - ExtractOnlyNewer = true if you are to extract only newer - SpaceToUnderscore = true if convert space to underscore - PromptToOverwrite = true if prompt to overwrite is wanted - fQuiet = quiet flag. 1 = few messages, 2 = no messages, 0 = all messages - ncflag = write to stdout if true - ntflag = test zip file - nvflag = verbose listing - nUflag = "update" (extract only newer/new files) - nzflag = display zip file comment - ndflag = all args are files/dir to be extracted - noflag = overwrite all files - naflag = do end-of-line translation - nZIflag = get Zip Info if TRUE - C_flag = be case insensitive if TRUE - fPrivilege = restore ACL's if 1, use privileges if 2 - lpszZipFN = zip file name - lpszExtractDir = directory to extract to; NULL means: current directory -*/ - -BOOL WINAPI Wiz_SetOpts(pG, C) -zvoid *pG; -LPDCL C; -{ - uO.qflag = C->fQuiet; /* Quiet flag */ - G.pfnames = (char **)&fnames[0]; /* assign default file name vector */ - G.pxnames = (char **)&fnames[1]; - - uO.jflag = !C->ndflag; - uO.cflag = C->ncflag; - uO.overwrite_all = C->noflag; - uO.tflag = C->ntflag ; - uO.vflag = C->nvflag; - uO.zflag = C->nzflag; - uO.uflag = C->nUflag; - uO.aflag = C->naflag; - uO.C_flag = C->C_flag; - uO.uflag = C->ExtractOnlyNewer; - G.prompt_always = C->PromptToOverwrite; -#ifdef WIN32 - uO.X_flag = C->fPrivilege; -#endif - uO.overwrite_none = !uO.overwrite_all; - uO.sflag = C->SpaceToUnderscore; /* Translate spaces to underscores? */ - if (C->nZIflag) - { - uO.zipinfo_mode = TRUE; - uO.hflag = TRUE; - uO.lflag = 10; - uO.qflag = 2; - } - else - { - uO.zipinfo_mode = FALSE; - } - - G.extract_flag = (!uO.zipinfo_mode && - !uO.cflag && !uO.tflag && !uO.vflag && !uO.zflag -#ifdef TIMESTAMP - && !uO.T_flag -#endif - ); - - if (C->lpszExtractDir != NULL && G.extract_flag) - { -#ifndef CRTL_CP_IS_ISO - char *pExDirRoot = (char *)malloc(strlen(C->lpszExtractDir)+1); - - if (pExDirRoot == NULL) - return FALSE; - ISO_TO_INTERN(C->lpszExtractDir, pExDirRoot); -#else -# define pExDirRoot C->lpszExtractDir -#endif - uO.exdir = pExDirRoot; - } - else - { - uO.exdir = (char *)NULL; - } - -/* G.wildzipfn needs to be initialized so that do_wild does not wind - up clearing out the zip file name when it returns in process.c -*/ - hwildZipFN = GlobalAlloc(GPTR, FILNAMSIZ); - if (hwildZipFN == (HGLOBAL) NULL) - return FALSE; - - G.wildzipfn = GlobalLock(hwildZipFN); - lstrcpy(G.wildzipfn, C->lpszZipFN); - _ISO_INTERN(G.wildzipfn); - - return TRUE; /* set up was OK */ -} - -void FreeDllMem(__GPRO) -{ - if (G.wildzipfn) { - GlobalUnlock(hwildZipFN); - G.wildzipfn = NULL; - } - if (hwildZipFN) - hwildZipFN = GlobalFree(hwildZipFN); - - uO.zipinfo_mode = FALSE; -} - -int WINAPI Wiz_SingleEntryUnzip(int ifnc, char **ifnv, int xfnc, char **xfnv, - LPDCL C, LPUSERFUNCTIONS lpUserFunc) -{ -int retcode; -CONSTRUCTGLOBALS(); - -if (!Wiz_Init((zvoid *)&G, lpUserFunc)) - { - DESTROYGLOBALS(); - return PK_BADERR; - } - -if (C->lpszZipFN == NULL) /* Something has screwed up, we don't have a filename */ - { - DESTROYGLOBALS(); - return PK_NOZIP; - } - -Wiz_SetOpts((zvoid *)&G, C); - -#ifdef SFX -G.zipfn = C->lpszZipFN; -G.argv0 = C->lpszZipFN; -#endif - -/* Here is the actual call to "unzip" the files (or whatever else you - * are doing.) - */ -retcode = Wiz_Unzip((zvoid *)&G, ifnc, ifnv, xfnc, xfnv); - -DESTROYGLOBALS(); -return retcode; -} - - -BOOL WINAPI Wiz_Init(pG, lpUserFunc) -zvoid *pG; -LPUSERFUNCTIONS lpUserFunc; -{ -G.message = DllMessagePrint; -G.statreportcb = Wiz_StatReportCB; -if (lpUserFunc->sound == NULL) - lpUserFunc->sound = DummySound; -G.lpUserFunctions = lpUserFunc; - -if (!G.lpUserFunctions->print || - !G.lpUserFunctions->sound || - !G.lpUserFunctions->replace) - return FALSE; - -return TRUE; -} - -int WINAPI Wiz_Unzip(pG, ifnc, ifnv, xfnc, xfnv) -zvoid *pG; -int ifnc; -char **ifnv; -int xfnc; -char **xfnv; -{ -int retcode, f_cnt; -#ifndef CRTL_CP_IS_ISO -char **intern_ifv = NULL, **intern_xfv = NULL; -#endif - -if (ifnv == (char **)NULL && ifnc != 0) - ifnc = 0; -else - for (f_cnt = 0; f_cnt < ifnc; f_cnt++) - if (ifnv[f_cnt] == (char *)NULL) { - ifnc = f_cnt; - break; - } -if (xfnv == (char **)NULL && xfnc != 0) - xfnc = 0; -else - for (f_cnt = 0; f_cnt < xfnc; f_cnt++) - if (xfnv[f_cnt] == (char *)NULL) { - xfnc = f_cnt; - break; - } - -G.process_all_files = (ifnc == 0 && xfnc == 0); /* for speed */ -G.filespecs = ifnc; -G.xfilespecs = xfnc; - -if (ifnc > 0) { -#ifdef CRTL_CP_IS_ISO - G.pfnames = ifnv; -#else /* !CRTL_CP_IS_ISO */ - unsigned bufsize = 0; - - intern_ifv = (char **)malloc((ifnc+1)*sizeof(char **)); - if (intern_ifv == (char **)NULL) - { - FreeDllMem(__G); - return PK_BADERR; - } - - for (f_cnt = ifnc; --f_cnt >= 0;) - bufsize += strlen(ifnv[f_cnt]) + 1; - intern_ifv[0] = (char *)malloc(bufsize); - if (intern_ifv[0] == (char *)NULL) - { - free(intern_ifv); - FreeDllMem(__G); - return PK_BADERR; - } - - for (f_cnt = 0; ; f_cnt++) - { - ISO_TO_INTERN(ifnv[f_cnt], intern_ifv[f_cnt]); - if ((f_cnt+1) >= ifnc) - break; - intern_ifv[f_cnt+1] = intern_ifv[f_cnt] + - (strlen(intern_ifv[f_cnt]) + 1); - } - intern_ifv[ifnc] = (char *)NULL; - G.pfnames = intern_ifv; -#endif /* ?CRTL_CP_IS_ISO */ - } - -if (xfnc > 0) { -#ifdef CRTL_CP_IS_ISO - G.pxnames = xfnv; -#else /* !CRTL_CP_IS_ISO */ - unsigned bufsize = 0; - - intern_xfv = (char **)malloc((xfnc+1)*sizeof(char **)); - if (intern_xfv == (char **)NULL) - { - if (ifnc > 0) - { - free(intern_ifv[0]); - free(intern_ifv); - } - FreeDllMem(__G); - return PK_BADERR; - } - - for (f_cnt = xfnc; --f_cnt >= 0;) - bufsize += strlen(xfnv[f_cnt]) + 1; - intern_xfv[0] = (char *)malloc(bufsize); - if (intern_xfv[0] == (char *)NULL) - { - free(intern_xfv); - if (ifnc > 0) - { - free(intern_ifv[0]); - free(intern_ifv); - } - FreeDllMem(__G); - return PK_BADERR; - } - - for (f_cnt = 0; ; f_cnt++) - { - ISO_TO_INTERN(xfnv[f_cnt], intern_xfv[f_cnt]); - if ((f_cnt+1) >= xfnc) - break; - intern_xfv[f_cnt+1] = intern_xfv[f_cnt] + - (strlen(intern_xfv[f_cnt]) + 1); - } - intern_xfv[xfnc] = (char *)NULL; - G.pxnames = intern_xfv; -#endif /* ?CRTL_CP_IS_ISO */ - } - -/*--------------------------------------------------------------------------- - Okey dokey, we have everything we need to get started. Let's roll. - ---------------------------------------------------------------------------*/ - -retcode = setjmp(dll_error_return); -if (retcode) - { -#ifndef CRTL_CP_IS_ISO - if (xfnc > 0) - { - free(intern_xfv[0]); - free(intern_xfv); - } - if (ifnc > 0) - { - free(intern_ifv[0]); - free(intern_ifv); - } -#endif - FreeDllMem(__G); - return PK_BADERR; - } - -retcode = process_zipfiles(__G); -#ifndef CRTL_CP_IS_ISO -if (xfnc > 0) - { - free(intern_xfv[0]); - free(intern_xfv); - } -if (ifnc > 0) - { - free(intern_ifv[0]); - free(intern_ifv); - } -#endif -FreeDllMem(__G); -return retcode; -} - - -int win_fprintf(zvoid *pG, FILE *file, unsigned int size, char far *buffer) -{ -if ((file != stderr) && (file != stdout)) - { - return write(fileno(file),(char far *)(buffer),size); - } -if (!fNoPrinting) - return G.lpUserFunctions->print((LPSTR)buffer, size); -return (int)size; -} - -/********************************** - * Function DllMessagePrint() * - * * - * Send messages to status window * - **********************************/ -#ifdef __BORLANDC__ -#pragma argsused -#endif -static int UZ_EXP DllMessagePrint(pG, buf, size, flag) - zvoid *pG; /* globals struct: always passed */ - uch *buf; /* preformatted string to be printed */ - ulg size; /* length of string (may include nulls) */ - int flag; /* flag bits */ -{ -if (!fNoPrinting) - return G.lpUserFunctions->print((LPSTR)buf, size); -else - return (int)size; -} - -#if 0 /* currently unused */ -/******************************** - * Function DllDisplayPrint() * - * * - * Send files to display window * - ********************************/ -#ifdef __BORLANDC__ -#pragma argsused -#endif -int DllDisplayPrint(pG, buf, size, flag) - zvoid *pG; /* globals struct: always passed */ - uch *buf; /* preformatted string to be printed */ - ulg size; /* length of string (may include nulls) */ - int flag; /* flag bits */ -{ -return (!fNoPrinting ? G.lpUserFunctions->print((LPSTR)buf, size) : (int)size); -} -#endif /* never */ - - -/********************************** - * Function UzpPassword() * - * * - * Prompt for decryption password * - **********************************/ -#ifdef __BORLANDC__ -#pragma argsused -#endif -int UZ_EXP UzpPassword(pG, rcnt, pwbuf, size, zfn, efn) - zvoid *pG; /* globals struct: always passed */ - int *rcnt; /* retry counter */ - char *pwbuf; /* buffer for password */ - int size; /* size of password buffer */ - ZCONST char *zfn; /* name of zip archiv */ - ZCONST char *efn; /* name of archiv entry being processed */ -{ -#if CRYPT - LPSTR m; - - if (*rcnt == 0) { - *rcnt = 2; - m = "Enter password for: "; - } else { - (*rcnt)--; - m = "Password incorrect--reenter: "; - } - - return (*G.lpUserFunctions->password)((LPSTR)pwbuf, size, m, (LPSTR)efn); -#else /* !CRYPT */ - return IZ_PW_ERROR; /* internal error, function should never get called */ -#endif /* ?CRYPT */ -} /* end function UzpPassword() */ - -/* Turn off all messages to the calling application */ -void WINAPI Wiz_NoPrinting(int f) -{ -fNoPrinting = f; -} - -/* Dummy sound function for those applications that don't use sound */ -static void WINAPI DummySound(void) -{ -} - -/* Interface between WINDLL specific service callback functions and the - generic DLL's "status report & user interception" callback */ -#ifdef __BORLANDC__ -#pragma argsused -#endif -static int WINAPI Wiz_StatReportCB(zvoid *pG, int fnflag, ZCONST char *zfn, - ZCONST char *efn, ZCONST zvoid *details) -{ - int rval = UZ_ST_CONTINUE; - - switch (fnflag) { - case UZ_ST_START_EXTRACT: - if (G.lpUserFunctions->sound != NULL) - (*G.lpUserFunctions->sound)(); - break; - case UZ_ST_FINISH_MEMBER: - if ((G.lpUserFunctions->ServCallBk != NULL) && - (*G.lpUserFunctions->ServCallBk)(efn, *((unsigned long *)details))) - rval = UZ_ST_BREAK; - break; - case UZ_ST_IN_PROGRESS: - break; - default: - break; - } - return rval; -} - - -#ifndef SFX -#ifndef __16BIT__ - -int WINAPI Wiz_UnzipToMemory(LPSTR zip, LPSTR file, - LPUSERFUNCTIONS lpUserFunctions, UzpBuffer *retstr) -{ - int r; -#ifndef CRTL_CP_IS_ISO - char *intern_zip, *intern_file; -#endif - - CONSTRUCTGLOBALS(); -#ifndef CRTL_CP_IS_ISO - intern_zip = (char *)malloc(strlen(zip)+1); - if (intern_zip == NULL) { - DESTROYGLOBALS() - return PK_MEM; - } - intern_file = (char *)malloc(strlen(file)+1); - if (intern_file == NULL) { - DESTROYGLOBALS() - free(intern_zip); - return PK_MEM; - } - ISO_TO_INTERN(zip, intern_zip); - ISO_TO_INTERN(file, intern_file); -# define zip intern_zip -# define file intern_file -#endif - if (!Wiz_Init((zvoid *)&G, lpUserFunctions)) { - DESTROYGLOBALS(); - return PK_BADERR; - } - G.redirect_data = 1; - - r = (unzipToMemory(__G__ zip, file, retstr) == PK_COOL); - - DESTROYGLOBALS() -#ifndef CRTL_CP_IS_ISO -# undef file -# undef zip - free(intern_file); - free(intern_zip); -#endif - if (!r && retstr->strlength) { - free(retstr->strptr); - retstr->strptr = NULL; - } - return r; -} - - - - -/* Purpose: Determine if file in archive contains the string szSearch - - Parameters: archive = archive name - file = file contained in the archive. This cannot be - a wild card to be meaningful - pattern = string to search for - cmd = 0 - case-insensitive search - 1 - case-sensitve search - 2 - case-insensitive, whole words only - 3 - case-sensitive, whole words only - SkipBin = if true, skip any files that have control - characters other than CR, LF, or tab in the first - 100 characters. - - Returns: TRUE if a match is found - FALSE if no match is found - -1 on error - - Comments: This does not pretend to be as useful as the standard - Unix grep, which returns the strings associated with a - particular pattern, nor does it search past the first - matching occurrence of the pattern. - */ - -int WINAPI Wiz_Grep(LPSTR archive, LPSTR file, LPSTR pattern, int cmd, - int SkipBin, LPUSERFUNCTIONS lpUserFunctions) -{ - int retcode = FALSE, compare; - ulg i, j, patternLen, buflen; - char * sz, *p; - UzpBuffer retstr; - - /* Turn off any windows printing functions, as they may not have been - * identified yet. There is no requirement that we initialize the - * dll with printing stuff for this. */ - Wiz_NoPrinting(TRUE); - - if (!Wiz_UnzipToMemory(archive, file, lpUserFunctions, &retstr)) { - Wiz_NoPrinting(FALSE); - return -1; /* not enough memory, file not found, or other error */ - } - - if (SkipBin) { - if (retstr.strlength < 100) - buflen = retstr.strlength; - else - buflen = 100; - for (i = 0; i < buflen; i++) { - if (iscntrl(retstr.strptr[i])) { - if ((retstr.strptr[i] != 0x0A) && - (retstr.strptr[i] != 0x0D) && - (retstr.strptr[i] != 0x09)) - { - /* OK, we now think we have a binary file of some sort */ - free(retstr.strptr); - Wiz_NoPrinting(FALSE); - return FALSE; - } - } - } - } - - patternLen = strlen(pattern); - - if (retstr.strlength < patternLen) { - free(retstr.strptr); - Wiz_NoPrinting(FALSE); - return FALSE; - } - - sz = malloc(patternLen + 3); /* add two in case doing whole words only */ - if (cmd > 1) { - strcpy(sz, " "); - strcat(sz, pattern); - strcat(sz, " "); - } else - strcpy(sz, pattern); - - if ((cmd == 0) || (cmd == 2)) { - for (i = 0; i < strlen(sz); i++) - sz[i] = toupper(sz[i]); - for (i = 0; i < retstr.strlength; i++) - retstr.strptr[i] = toupper(retstr.strptr[i]); - } - - for (i = 0; i < (retstr.strlength - patternLen); i++) { - p = &retstr.strptr[i]; - compare = TRUE; - for (j = 0; j < patternLen; j++) { - /* We cannot do strncmp here, as we may be dealing with a - * "binary" file, such as a word processing file, or perhaps - * even a true executable of some sort. */ - if (p[j] != sz[j]) { - compare = FALSE; - break; - } - } - if (compare == TRUE) { - retcode = TRUE; - break; - } - } - - free(sz); - free(retstr.strptr); - Wiz_NoPrinting(FALSE); /* Turn printing back on */ - return retcode; -} -#endif /* !__16BIT__ */ - -int WINAPI Wiz_Validate(LPSTR archive, int AllCodes) -{ - return UzpValidate((char *)archive, AllCodes); -} - -#endif /* !SFX */ diff --git a/Build/source/libs/unzip/windll/windll.h b/Build/source/libs/unzip/windll/windll.h deleted file mode 100644 index a32623b5960..00000000000 --- a/Build/source/libs/unzip/windll/windll.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef __windll_h /* prevent multiple inclusions */ -#define __windll_h - -#include -#include /* required for all Windows applications */ -#include -#include -#if (!defined(__RSXNT__) && !defined(__MINGW32__)) -# include -#endif -#define UNZIP_INTERNAL -#include "unzip.h" -#include "structs.h" -#include "decs.h" - -#ifndef MSWIN -# define MSWIN -#endif - -/* Allow compilation under Borland C++ also */ -#ifndef __based -# define __based(A) -#endif - -#ifndef PATH_MAX -# define PATH_MAX 260 /* max total file or directory name path */ -#endif - -#define IDM_REPLACE_NO 100 -#define IDM_REPLACE_TEXT 101 -#define IDM_REPLACE_YES 102 -#define IDM_REPLACE_ALL 103 -#define IDM_REPLACE_NONE 104 -#define IDM_REPLACE_RENAME 105 -#define IDM_REPLACE_HELP 106 - -extern jmp_buf dll_error_return; - -extern HANDLE hInst; /* current instance */ - -#ifdef UNZIP_INTERNAL -void FreeDllMem(__GPRO); -int win_fprintf(zvoid *pG, FILE *file, unsigned int, char far *); -#endif - -#endif /* __windll_h */ diff --git a/Build/source/libs/unzip/zip.h b/Build/source/libs/unzip/zip.h deleted file mode 100644 index 5c079467f7a..00000000000 --- a/Build/source/libs/unzip/zip.h +++ /dev/null @@ -1,15 +0,0 @@ -/* This is a dummy zip.h to allow the source files shared with Zip (crypt.c, - crc32.c, crctab.c, ttyio.c) to compile for UnZip. */ - -#ifndef __zip_h /* don't include more than once */ -#define __zip_h - -#define UNZIP_INTERNAL -#include "unzip.h" - -#define local static - -#define ZE_MEM PK_MEM -#define ziperr(c, h) return - -#endif /* !__zip_h */ diff --git a/Build/source/libs/unzip/zipinfo.c b/Build/source/libs/unzip/zipinfo.c deleted file mode 100644 index c244c1e92f5..00000000000 --- a/Build/source/libs/unzip/zipinfo.c +++ /dev/null @@ -1,1912 +0,0 @@ -/*--------------------------------------------------------------------------- - - zipinfo.c Greg Roelofs et al. - - This file contains all of the ZipInfo-specific listing routines for UnZip. - - Contains: zi_opts() - zi_end_central() - zipinfo() - zi_long() - zi_short() - zi_time() - - ---------------------------------------------------------------------------*/ - - -#define UNZIP_INTERNAL -#include "unzip.h" - - -#ifndef NO_ZIPINFO /* strings use up too much space in small-memory systems */ - -/* Define OS-specific attributes for use on ALL platforms--the S_xxxx - * versions of these are defined differently (or not defined) by different - * compilers and operating systems. */ - -#define UNX_IFMT 0170000 /* Unix file type mask */ -#define UNX_IFDIR 0040000 /* Unix directory */ -#define UNX_IFREG 0100000 /* Unix regular file */ -#define UNX_IFSOCK 0140000 /* Unix socket (BSD, not SysV or Amiga) */ -#define UNX_IFLNK 0120000 /* Unix symbolic link (not SysV, Amiga) */ -#define UNX_IFBLK 0060000 /* Unix block special (not Amiga) */ -#define UNX_IFCHR 0020000 /* Unix character special (not Amiga) */ -#define UNX_IFIFO 0010000 /* Unix fifo (BCC, not MSC or Amiga) */ -#define UNX_ISUID 04000 /* Unix set user id on execution */ -#define UNX_ISGID 02000 /* Unix set group id on execution */ -#define UNX_ISVTX 01000 /* Unix directory permissions control */ -#define UNX_ENFMT UNX_ISGID /* Unix record locking enforcement flag */ -#define UNX_IRWXU 00700 /* Unix read, write, execute: owner */ -#define UNX_IRUSR 00400 /* Unix read permission: owner */ -#define UNX_IWUSR 00200 /* Unix write permission: owner */ -#define UNX_IXUSR 00100 /* Unix execute permission: owner */ -#define UNX_IRWXG 00070 /* Unix read, write, execute: group */ -#define UNX_IRGRP 00040 /* Unix read permission: group */ -#define UNX_IWGRP 00020 /* Unix write permission: group */ -#define UNX_IXGRP 00010 /* Unix execute permission: group */ -#define UNX_IRWXO 00007 /* Unix read, write, execute: other */ -#define UNX_IROTH 00004 /* Unix read permission: other */ -#define UNX_IWOTH 00002 /* Unix write permission: other */ -#define UNX_IXOTH 00001 /* Unix execute permission: other */ - -#define VMS_IRUSR UNX_IRUSR /* VMS read/owner */ -#define VMS_IWUSR UNX_IWUSR /* VMS write/owner */ -#define VMS_IXUSR UNX_IXUSR /* VMS execute/owner */ -#define VMS_IRGRP UNX_IRGRP /* VMS read/group */ -#define VMS_IWGRP UNX_IWGRP /* VMS write/group */ -#define VMS_IXGRP UNX_IXGRP /* VMS execute/group */ -#define VMS_IROTH UNX_IROTH /* VMS read/other */ -#define VMS_IWOTH UNX_IWOTH /* VMS write/other */ -#define VMS_IXOTH UNX_IXOTH /* VMS execute/other */ - -#define AMI_IFMT 06000 /* Amiga file type mask */ -#define AMI_IFDIR 04000 /* Amiga directory */ -#define AMI_IFREG 02000 /* Amiga regular file */ -#define AMI_IHIDDEN 00200 /* to be supported in AmigaDOS 3.x */ -#define AMI_ISCRIPT 00100 /* executable script (text command file) */ -#define AMI_IPURE 00040 /* allow loading into resident memory */ -#define AMI_IARCHIVE 00020 /* not modified since bit was last set */ -#define AMI_IREAD 00010 /* can be opened for reading */ -#define AMI_IWRITE 00004 /* can be opened for writing */ -#define AMI_IEXECUTE 00002 /* executable image, a loadable runfile */ -#define AMI_IDELETE 00001 /* can be deleted */ - -#define LFLAG 3 /* short "ls -l" type listing */ - -static int zi_long OF((__GPRO__ ulg *pEndprev)); -static int zi_short OF((__GPRO)); -static void zi_showMacTypeCreator - OF((__GPRO__ uch *ebfield)); -static char *zi_time OF((__GPRO__ ZCONST ulg *datetimez, - ZCONST time_t *modtimez, char *d_t_str)); - - -/**********************************************/ -/* Strings used in zipinfo.c (ZipInfo half) */ -/**********************************************/ - -static char nullStr[] = ""; - -static ZCONST char Far LongHeader[] = "Archive: %s %ld bytes %d file%s\n"; -static ZCONST char Far ShortHeader[] = "Archive: %s %ld %d\n"; -static ZCONST char Far EndCentDirRec[] = "\nEnd-of-central-directory record:\n"; -static ZCONST char Far LineSeparators[] = "-------------------------------\n\n"; -static ZCONST char Far ActOffsetCentDir[] = "\ - Actual offset of end-of-central-dir record: %9ld (%.8lXh)\n\ - Expected offset of end-of-central-dir record: %9ld (%.8lXh)\n\ - (based on the length of the central directory and its expected offset)\n\n"; -static ZCONST char Far SinglePartArchive1[] = "\ - This zipfile constitutes the sole disk of a single-part archive; its\n\ - central directory contains %u %s. The central directory is %lu\n\ - (%.8lXh) bytes long, and its (expected) offset in bytes from the\n"; -static ZCONST char Far SinglePartArchive2[] = "\ - beginning of the zipfile is %lu (%.8lXh).\n\n"; -static ZCONST char Far MultiPartArchive1[] = "\ - This zipfile constitutes disk %u of a multi-part archive. The central\n\ - directory starts on disk %u; %u of its entries %s contained within\n"; -static ZCONST char Far MultiPartArchive2[] = "\ - this zipfile, out of a total of %u %s. The entire central\n\ - directory is %lu (%.8lXh) bytes long, and its offset in bytes from\n"; -static ZCONST char Far MultiPartArchive3[] = "\ - the beginning of the zipfile in which it begins is %lu (%.8lXh).\n\n"; -static ZCONST char Far NoZipfileComment[] = " There is no zipfile comment.\n"; -static ZCONST char Far ZipfileCommentDesc[] = - " The zipfile comment is %u bytes long and contains the following text:\n\n"; -static ZCONST char Far ZipfileCommBegin[] = - "======================== zipfile comment begins ==========================\n"; -static ZCONST char Far ZipfileCommEnd[] = - "========================= zipfile comment ends ===========================\n"; -static ZCONST char Far ZipfileCommTrunc2[] = "\n The zipfile comment is truncated.\n"; -static ZCONST char Far ZipfileCommTruncMsg[] = - "\ncaution: zipfile comment truncated\n"; - -static ZCONST char Far CentralDirEntry[] = - "\nCentral directory entry #%d:\n---------------------------\n\n"; -static ZCONST char Far ZipfileStats[] = - "%d file%s, %lu bytes uncompressed, %lu bytes compressed: %s%d.%d%%\n"; - -/* zi_long() strings */ -static ZCONST char Far OS_FAT[] = "MS-DOS, OS/2 or NT FAT"; -static ZCONST char Far OS_Amiga[] = "Amiga"; -static ZCONST char Far OS_VMS[] = "VMS"; -static ZCONST char Far OS_Unix[] = "Unix"; -static ZCONST char Far OS_VMCMS[] = "VM/CMS"; -static ZCONST char Far OS_AtariST[] = "Atari ST"; -static ZCONST char Far OS_HPFS[] = "OS/2 or NT HPFS"; -static ZCONST char Far OS_Macintosh[] = "Macintosh HFS"; -static ZCONST char Far OS_ZSystem[] = "Z-System"; -static ZCONST char Far OS_CPM[] = "CP/M"; -static ZCONST char Far OS_TOPS20[] = "TOPS-20"; -static ZCONST char Far OS_NTFS[] = "NTFS"; -static ZCONST char Far OS_QDOS[] = "SMS/QDOS"; -static ZCONST char Far OS_Acorn[] = "Acorn RISC OS"; -static ZCONST char Far OS_MVS[] = "MVS"; -static ZCONST char Far OS_VFAT[] = "Win32 VFAT"; -static ZCONST char Far OS_BeOS[] = "BeOS"; -static ZCONST char Far OS_Tandem[] = "Tandem NSK"; - -static ZCONST char Far MthdNone[] = "none (stored)"; -static ZCONST char Far MthdShrunk[] = "shrunk"; -static ZCONST char Far MthdRedF1[] = "reduced (factor 1)"; -static ZCONST char Far MthdRedF2[] = "reduced (factor 2)"; -static ZCONST char Far MthdRedF3[] = "reduced (factor 3)"; -static ZCONST char Far MthdRedF4[] = "reduced (factor 4)"; -static ZCONST char Far MthdImplode[] = "imploded"; -static ZCONST char Far MthdToken[] = "tokenized"; -static ZCONST char Far MthdDeflate[] = "deflated"; -static ZCONST char Far MthdEnDeflate[] = "deflated (enhanced)"; -static ZCONST char Far MthdDCLImplode[] = "imploded (PK DCL)"; - -static ZCONST char Far DeflNorm[] = "normal"; -static ZCONST char Far DeflMax[] = "maximum"; -static ZCONST char Far DeflFast[] = "fast"; -static ZCONST char Far DeflSFast[] = "superfast"; - -static ZCONST char Far ExtraBytesPreceding[] = - " There are an extra %ld bytes preceding this file.\n\n"; - -static ZCONST char Far UnknownNo[] = "unknown (%d)"; - -static ZCONST char Far LocalHeaderOffset[] = - "\n offset of local header from start of archive: %lu (%.8lXh) bytes\n"; -static ZCONST char Far HostOS[] = - " file system or operating system of origin: %s\n"; -static ZCONST char Far EncodeSWVer[] = - " version of encoding software: %d.%d\n"; -static ZCONST char Far MinOSCompReq[] = - " minimum file system compatibility required: %s\n"; -static ZCONST char Far MinSWVerReq[] = - " minimum software version required to extract: %d.%d\n"; -static ZCONST char Far CompressMethod[] = - " compression method: %s\n"; -static ZCONST char Far SlideWindowSizeImplode[] = - " size of sliding dictionary (implosion): %cK\n"; -static ZCONST char Far ShannonFanoTrees[] = - " number of Shannon-Fano trees (implosion): %c\n"; -static ZCONST char Far CompressSubtype[] = - " compression sub-type (deflation): %s\n"; -static ZCONST char Far FileSecurity[] = - " file security status: %sencrypted\n"; -static ZCONST char Far ExtendedLocalHdr[] = - " extended local header: %s\n"; -static ZCONST char Far FileModDate[] = - " file last modified on (DOS date/time): %s\n"; -#ifdef USE_EF_UT_TIME - static ZCONST char Far UT_FileModDate[] = - " file last modified on (UT extra field modtime): %s %s\n"; - static ZCONST char Far LocalTime[] = "local"; -#ifndef NO_GMTIME - static ZCONST char Far GMTime[] = "UTC"; -#endif -#endif /* USE_EF_UT_TIME */ -static ZCONST char Far CRC32Value[] = - " 32-bit CRC value (hex): %.8lx\n"; -static ZCONST char Far CompressedFileSize[] = - " compressed size: %lu bytes\n"; -static ZCONST char Far UncompressedFileSize[] = - " uncompressed size: %lu bytes\n"; -static ZCONST char Far FilenameLength[] = - " length of filename: %u characters\n"; -static ZCONST char Far ExtraFieldLength[] = - " length of extra field: %u bytes\n"; -static ZCONST char Far FileCommentLength[] = - " length of file comment: %u characters\n"; -static ZCONST char Far FileDiskNum[] = - " disk number on which file begins: disk %u\n"; -static ZCONST char Far ApparentFileType[] = - " apparent file type: %s\n"; -static ZCONST char Far VMSFileAttributes[] = - " VMS file attributes (%06o octal): %s\n"; -static ZCONST char Far AmigaFileAttributes[] = - " Amiga file attributes (%06o octal): %s\n"; -static ZCONST char Far UnixFileAttributes[] = - " Unix file attributes (%06o octal): %s\n"; -static ZCONST char Far NonMSDOSFileAttributes[] = - " non-MSDOS external file attributes: %06lX hex\n"; -static ZCONST char Far MSDOSFileAttributes[] = - " MS-DOS file attributes (%02X hex): none\n"; -static ZCONST char Far MSDOSFileAttributesRO[] = - " MS-DOS file attributes (%02X hex): read-only\n"; -static ZCONST char Far MSDOSFileAttributesAlpha[] = - " MS-DOS file attributes (%02X hex): %s%s%s%s%s%s\n"; - - -static ZCONST char Far ExtraFieldTrunc[] = "\n\ - error: EF data block (type 0x%04x) size %u exceeds remaining extra field\n\ - space %u; block length has been truncated.\n"; -static ZCONST char Far ExtraFields[] = "\n\ - The central-directory extra field contains:"; -static ZCONST char Far ExtraFieldType[] = "\n\ - - A subfield with ID 0x%04x (%s) and %u data bytes"; -static ZCONST char Far efAV[] = "PKWARE AV"; -static ZCONST char Far efOS2[] = "OS/2"; -static ZCONST char Far efPKVMS[] = "PKWARE VMS"; -static ZCONST char Far efPKWin32[] = "PKWARE Win32"; -static ZCONST char Far efPKUnix[] = "PKWARE Unix"; -static ZCONST char Far efIZVMS[] = "Info-ZIP VMS"; -static ZCONST char Far efIZUnix[] = "old Info-ZIP Unix/OS2/NT"; -static ZCONST char Far efIZUnix2[] = "Unix UID/GID"; -static ZCONST char Far efTime[] = "universal time"; -static ZCONST char Far efJLMac[] = "old Info-ZIP Macintosh"; -static ZCONST char Far efMac3[] = "new Info-ZIP Macintosh"; -static ZCONST char Far efZipIt[] = "ZipIt Macintosh"; -static ZCONST char Far efZipIt2[] = "ZipIt Macintosh (short)"; -static ZCONST char Far efVMCMS[] = "VM/CMS"; -static ZCONST char Far efMVS[] = "MVS"; -static ZCONST char Far efACL[] = "OS/2 ACL"; -static ZCONST char Far efNTSD[] = "Security Descriptor"; -static ZCONST char Far efBeOS[] = "BeOS"; -static ZCONST char Far efQDOS[] = "SMS/QDOS"; -static ZCONST char Far efAOSVS[] = "AOS/VS"; -static ZCONST char Far efSpark[] = "Acorn SparkFS"; -static ZCONST char Far efMD5[] = "Fred Kantor MD5"; -static ZCONST char Far efASiUnix[] = "ASi Unix"; -static ZCONST char Far efUnknown[] = "unknown"; - -static ZCONST char Far OS2EAs[] = ".\n\ - The local extra field has %lu bytes of OS/2 extended attributes.\n\ - (May not match OS/2 \"dir\" amount due to storage method)"; -static ZCONST char Far izVMSdata[] = ". The extra\n\ - field is %s and has %lu bytes of VMS %s information%s"; -static ZCONST char Far izVMSstored[] = "stored"; -static ZCONST char Far izVMSrleenc[] = "run-length encoded"; -static ZCONST char Far izVMSdeflat[] = "deflated"; -static ZCONST char Far izVMScunknw[] = "compressed(?)"; -static ZCONST char Far *izVMScomp[4] = - {izVMSstored, izVMSrleenc, izVMSdeflat, izVMScunknw}; -static ZCONST char Far ACLdata[] = ".\n\ - The local extra field has %lu bytes of access control list information"; -static ZCONST char Far NTSDData[] = ".\n\ - The local extra field has %lu bytes of NT security descriptor data"; -static ZCONST char Far UTdata[] = ".\n\ - The local extra field has UTC/GMT %s time%s"; -static ZCONST char Far UTmodification[] = "modification"; -static ZCONST char Far UTaccess[] = "access"; -static ZCONST char Far UTcreation[] = "creation"; -static ZCONST char Far ZipItFname[] = ".\n\ - The Mac long filename is %s.\n"; -static ZCONST char Far Mac3data[] = ".\n\ - The local extra field has %lu bytes of %scompressed Macintosh\n\ - finder attributes"; - /* MacOSdata[] is used by EF_MAC3, EF_ZIPIT, EF_ZIPIT2 and EF_JLEE e. f. */ -static ZCONST char Far MacOSdata[] = ".\n\ - The associated file has type code `%c%c%c%c' and creator code `%c%c%c%c'"; -static ZCONST char Far MacOSdata1[] = ".\n\ - The associated file has type code `0x%lx' and creator code `0x%lx'"; -static ZCONST char Far MacOSJLEEflags[] = "\n File is marked as %s"; -static ZCONST char Far MacOS_RF[] = "Resource-fork"; -static ZCONST char Far MacOS_DF[] = "Data-fork"; -static ZCONST char Far MacOSMAC3flags[] = ".\n\ - File is marked as %s, File Dates are in %d Bit"; -static ZCONST char Far BeOSdata[] = ".\n\ - The local extra field has %lu bytes of %scompressed BeOS file attributes"; - /* The associated file has type code `%c%c%c%c' and creator code `%c%c%c%c'" */ -static ZCONST char Far QDOSdata[] = ".\n\ - The QDOS extra field subtype is `%c%c%c%c'"; -static ZCONST char Far AOSVSdata[] = ".\n\ - The AOS/VS extra field revision is %d.%d"; -static ZCONST char Far MD5data[] = ".\n\ - The 128-bit MD5 signature is %s"; -#ifdef CMS_MVS - static ZCONST char Far VmMvsExtraField[] = ".\n\ - The stored file open mode (FLDATA TYPE) is \"%s\""; - static ZCONST char Far VmMvsInvalid[] = "[invalid]"; -#endif /* CMS_MVS */ - -static ZCONST char Far First20[] = ". The first\n 20 are: "; -static ZCONST char Far ColonIndent[] = ":\n "; -static ZCONST char Far efFormat[] = " %02x"; - -static ZCONST char Far lExtraFieldType[] = "\n\ - There %s a local extra field with ID 0x%04x (%s) and\n\ - %u data bytes (%s).\n"; -static ZCONST char Far efIZuid[] = - "GMT modification/access times and Unix UID/GID"; -static ZCONST char Far efIZnouid[] = "GMT modification/access times only"; - - -static ZCONST char Far NoFileComment[] = "\n There is no file comment.\n"; -static ZCONST char Far FileCommBegin[] = "\n\ -------------------------- file comment begins ----------------------------\n"; -static ZCONST char Far FileCommEnd[] = "\ --------------------------- file comment ends -----------------------------\n"; - -/* zi_time() strings */ -static ZCONST char Far BogusFmt[] = "%03d"; -static ZCONST char Far DMYHMTime[] = "%2u-%s-%02u %02u:%02u"; -static ZCONST char Far YMDHMSTime[] = "%u %s %u %02u:%02u:%02u"; -static ZCONST char Far DecimalTime[] = "%04u%02u%02u.%02u%02u%02u"; -static ZCONST char Far YMDHMSTimeError[] = "???? ??? ?? ??:??:??"; - - - - - -#ifndef WINDLL - -/************************/ -/* Function zi_opts() */ -/************************/ - -int zi_opts(__G__ pargc, pargv) - int *pargc; - char ***pargv; - __GDEF -{ - char **argv, *s; - int argc, c, error=FALSE, negative=0; - int hflag_slmv=TRUE, hflag_2=FALSE; /* diff options => diff defaults */ - int tflag_slm=TRUE, tflag_2v=FALSE; - int explicit_h=FALSE, explicit_t=FALSE; - - -#ifdef MACOS - uO.lflag = LFLAG; /* reset default on each call */ -#endif - G.extract_flag = FALSE; /* zipinfo does not extract to disk */ - argc = *pargc; - argv = *pargv; - - while (--argc > 0 && (*++argv)[0] == '-') { - s = argv[0] + 1; - while ((c = *s++) != 0) { /* "!= 0": prevent Turbo C warning */ - switch (c) { - case '-': - ++negative; - break; - case '1': /* shortest listing: JUST filenames */ - if (negative) - uO.lflag = -2, negative = 0; - else - uO.lflag = 1; - break; - case '2': /* just filenames, plus headers if specified */ - if (negative) - uO.lflag = -2, negative = 0; - else - uO.lflag = 2; - break; -#ifndef CMS_MVS - case ('C'): /* -C: match filenames case-insensitively */ - if (negative) - uO.C_flag = FALSE, negative = 0; - else - uO.C_flag = TRUE; - break; -#endif /* !CMS_MVS */ - case 'h': /* header line */ - if (negative) - hflag_2 = hflag_slmv = FALSE, negative = 0; - else { - hflag_2 = hflag_slmv = explicit_h = TRUE; - if (uO.lflag == -1) - uO.lflag = 0; - } - break; - case 'l': /* longer form of "ls -l" type listing */ - if (negative) - uO.lflag = -2, negative = 0; - else - uO.lflag = 5; - break; - case 'm': /* medium form of "ls -l" type listing */ - if (negative) - uO.lflag = -2, negative = 0; - else - uO.lflag = 4; - break; -#ifdef MORE - case 'M': /* send output through built-in "more" */ - if (negative) - G.M_flag = FALSE, negative = 0; - else - G.M_flag = TRUE; - break; -#endif - case 's': /* default: shorter "ls -l" type listing */ - if (negative) - uO.lflag = -2, negative = 0; - else - uO.lflag = 3; - break; - case 't': /* totals line */ - if (negative) - tflag_2v = tflag_slm = FALSE, negative = 0; - else { - tflag_2v = tflag_slm = explicit_t = TRUE; - if (uO.lflag == -1) - uO.lflag = 0; - } - break; - case ('T'): /* use (sortable) decimal time format */ - if (negative) - uO.T_flag = FALSE, negative = 0; - else - uO.T_flag = TRUE; - break; - case 'v': /* turbo-verbose listing */ - if (negative) - uO.lflag = -2, negative = 0; - else - uO.lflag = 10; - break; - case 'z': /* print zipfile comment */ - if (negative) - uO.zflag = negative = 0; - else - uO.zflag = 1; - break; - case 'Z': /* ZipInfo mode: ignore */ - break; - default: - error = TRUE; - break; - } - } - } - if ((argc-- == 0) || error) { - *pargc = argc; - *pargv = argv; - return USAGE(error); - } - -#ifdef MORE - if (G.M_flag && !isatty(1)) /* stdout redirected: "more" func useless */ - G.M_flag = 0; -#endif - - /* if no listing options given (or all negated), or if only -h/-t given - * with individual files specified, use default listing format */ - if ((uO.lflag < 0) || ((argc > 0) && (uO.lflag == 0))) - uO.lflag = LFLAG; - - /* set header and totals flags to default or specified values */ - switch (uO.lflag) { - case 0: /* 0: can only occur if either -t or -h explicitly given; */ - case 2: /* therefore set both flags equal to normally false value */ - uO.hflag = hflag_2; - uO.tflag = tflag_2v; - break; - case 1: /* only filenames, *always* */ - uO.hflag = FALSE; - uO.tflag = FALSE; - uO.zflag = FALSE; - break; - case 3: - case 4: - case 5: - uO.hflag = ((argc > 0) && !explicit_h)? FALSE : hflag_slmv; - uO.tflag = ((argc > 0) && !explicit_t)? FALSE : tflag_slm; - break; - case 10: - uO.hflag = hflag_slmv; - uO.tflag = tflag_2v; - break; - } - - *pargc = argc; - *pargv = argv; - return 0; - -} /* end function zi_opts() */ - -#endif /* !WINDLL */ - - - - - -/*******************************/ -/* Function zi_end_central() */ -/*******************************/ - -int zi_end_central(__G) /* return PK-type error code */ - __GDEF -{ - int error = PK_COOL; - - -/*--------------------------------------------------------------------------- - Print out various interesting things about the zipfile. - ---------------------------------------------------------------------------*/ - - /* header fits on one line, for anything up to 10GB and 10000 files: */ - if (uO.hflag) - Info(slide, 0, ((char *)slide, ((int)strlen(G.zipfn) < 39)? - LoadFarString(LongHeader) : LoadFarString(ShortHeader), G.zipfn, - (long)G.ziplen, G.ecrec.total_entries_central_dir, - (G.ecrec.total_entries_central_dir==1)? - nullStr : "s")); - - /* verbose format */ - if (uO.lflag > 9) { - Info(slide, 0, ((char *)slide, LoadFarString(EndCentDirRec))); - Info(slide, 0, ((char *)slide, LoadFarString(LineSeparators))); - - Info(slide, 0, ((char *)slide, LoadFarString(ActOffsetCentDir), - (long)G.real_ecrec_offset, (long)G.real_ecrec_offset, - (long)G.expect_ecrec_offset, (long)G.expect_ecrec_offset)); - - if (G.ecrec.number_this_disk == 0) { - Info(slide, 0, ((char *)slide, LoadFarString(SinglePartArchive1), - G.ecrec.total_entries_central_dir, - (G.ecrec.total_entries_central_dir == 1)? "entry" : "entries", - G.ecrec.size_central_directory, - G.ecrec.size_central_directory)); - Info(slide, 0, ((char *)slide, LoadFarString(SinglePartArchive2), - G.ecrec.offset_start_central_directory, - G.ecrec.offset_start_central_directory)); - } else { - Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive1), - G.ecrec.number_this_disk + 1, - G.ecrec.num_disk_start_cdir + 1, - G.ecrec.num_entries_centrl_dir_ths_disk, - (G.ecrec.num_entries_centrl_dir_ths_disk == 1)? "is" : "are")); - Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive2), - G.ecrec.total_entries_central_dir, - (G.ecrec.total_entries_central_dir == 1) ? "entry" : "entries", - G.ecrec.size_central_directory, - G.ecrec.size_central_directory)); - Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive3), - G.ecrec.offset_start_central_directory, - G.ecrec.offset_start_central_directory)); - } - - /*----------------------------------------------------------------------- - Get the zipfile comment, if any, and print it out. (Comment may be - up to 64KB long. May the fleas of a thousand camels infest the arm- - pits of anyone who actually takes advantage of this fact.) - -----------------------------------------------------------------------*/ - - if (!G.ecrec.zipfile_comment_length) - Info(slide, 0, ((char *)slide, LoadFarString(NoZipfileComment))); - else { - Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommentDesc), - G.ecrec.zipfile_comment_length)); - Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommBegin))); - if (do_string(__G__ G.ecrec.zipfile_comment_length, DISPLAY)) - error = PK_WARN; - Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommEnd))); - if (error) - Info(slide, 0, ((char *)slide, - LoadFarString(ZipfileCommTrunc2))); - } /* endif (comment exists) */ - - /* non-verbose mode: print zipfile comment only if requested */ - } else if (uO.zflag && G.ecrec.zipfile_comment_length) { - if (do_string(__G__ G.ecrec.zipfile_comment_length, DISPLAY)) { - Info(slide, 0x401, ((char *)slide, - LoadFarString(ZipfileCommTruncMsg))); - error = PK_WARN; - } - } /* endif (verbose) */ - - return error; - -} /* end function zi_end_central() */ - - - - - -/************************/ -/* Function zipinfo() */ -/************************/ - -int zipinfo(__G) /* return PK-type error code */ - __GDEF -{ - int do_this_file=FALSE, error, error_in_archive=PK_COOL; - int *fn_matched=NULL, *xn_matched=NULL; - unsigned j, members=0; - ulg tot_csize=0L, tot_ucsize=0L; - ulg endprev; /* buffers end of previous entry for zi_long()'s check - * of extra bytes */ - - -/*--------------------------------------------------------------------------- - Malloc space for check on unmatched filespecs (no big deal if one or both - are NULL). - ---------------------------------------------------------------------------*/ - - if (G.filespecs > 0 && - (fn_matched=(int *)malloc(G.filespecs*sizeof(int))) != NULL) - for (j = 0; j < G.filespecs; ++j) - fn_matched[j] = FALSE; - - if (G.xfilespecs > 0 && - (xn_matched=(int *)malloc(G.xfilespecs*sizeof(int))) != NULL) - for (j = 0; j < G.xfilespecs; ++j) - xn_matched[j] = FALSE; - -/*--------------------------------------------------------------------------- - Set file pointer to start of central directory, then loop through cen- - tral directory entries. Check that directory-entry signature bytes are - actually there (just a precaution), then process the entry. We know - the entire central directory is on this disk: we wouldn't have any of - this information unless the end-of-central-directory record was on this - disk, and we wouldn't have gotten to this routine unless this is also - the disk on which the central directory starts. In practice, this had - better be the *only* disk in the archive, but maybe someday we'll add - multi-disk support. - ---------------------------------------------------------------------------*/ - - uO.L_flag = FALSE; /* zipinfo mode: never convert name to lowercase */ - G.pInfo = G.info; /* (re-)initialize, (just to make sure) */ - G.pInfo->textmode = 0; /* so one can read on screen (is this ever used?) */ - - /* reset endprev for new zipfile; account for multi-part archives (?) */ - endprev = (G.crec.relative_offset_local_header == 4L)? 4L : 0L; - - - for (j = 0; j++ < (unsigned)G.ecrec.total_entries_central_dir;) { - if (readbuf(__G__ G.sig, 4) == 0) - return PK_EOF; - if (strncmp(G.sig, central_hdr_sig, 4)) { /* just to make sure */ - Info(slide, 0x401, ((char *)slide, LoadFarString(CentSigMsg), j)); - return PK_BADERR; /* sig not found */ - } - /* process_cdir_file_hdr() sets pInfo->hostnum, pInfo->lcflag, ...: */ - if ((error = process_cdir_file_hdr(__G)) != PK_COOL) - return error; /* only PK_EOF defined */ - - if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) != - PK_COOL) - { - error_in_archive = error; /* might be warning */ - if (error > PK_WARN) /* fatal */ - return error; - } - - if (!G.process_all_files) { /* check if specified on command line */ - unsigned i; - - do_this_file = FALSE; - for (i = 0; i < G.filespecs; i++) - if (match(G.filename, G.pfnames[i], uO.C_flag)) { - do_this_file = TRUE; - if (fn_matched) - fn_matched[i] = TRUE; - break; /* found match, so stop looping */ - } - if (do_this_file) { /* check if this is an excluded file */ - for (i = 0; i < G.xfilespecs; i++) - if (match(G.filename, G.pxnames[i], uO.C_flag)) { - do_this_file = FALSE; /* ^-- ignore case in match */ - if (xn_matched) - xn_matched[i] = TRUE; - break; - } - } - } - - /*----------------------------------------------------------------------- - If current file was specified on command line, or if no names were - specified, do the listing for this file. Otherwise, get rid of the - file comment and go back for the next file. - -----------------------------------------------------------------------*/ - - if (G.process_all_files || do_this_file) { - - switch (uO.lflag) { - case 1: - case 2: - fnprint(__G); - SKIP_(G.crec.extra_field_length) - SKIP_(G.crec.file_comment_length) - break; - - case 3: - case 4: - case 5: - if ((error = zi_short(__G)) != PK_COOL) { - error_in_archive = error; /* might be warning */ - if (error > PK_WARN) /* fatal */ - return error; - } - break; - - case 10: - Info(slide, 0, ((char *)slide, - LoadFarString(CentralDirEntry), j)); - if ((error = zi_long(__G__ &endprev)) != PK_COOL) { - error_in_archive = error; /* might be warning */ - if (error > PK_WARN) /* fatal */ - return error; - } - break; - - default: - SKIP_(G.crec.extra_field_length) - SKIP_(G.crec.file_comment_length) - break; - - } /* end switch (lflag) */ - - tot_csize += G.crec.csize; - tot_ucsize += G.crec.ucsize; - if (G.crec.general_purpose_bit_flag & 1) - tot_csize -= 12; /* don't count encryption header */ - ++members; - -#ifdef DLL - if ((G.statreportcb != NULL) && - (*G.statreportcb)(__G__ UZ_ST_FINISH_MEMBER, G.zipfn, - G.filename, NULL)) { - if (fn_matched) - free((zvoid *)fn_matched); - if (xn_matched) - free((zvoid *)xn_matched); - return IZ_CTRLC; /* cancel operation by user request */ - } -#endif -#ifdef MACOS /* MacOS is no preemptive OS, thus call event-handling by hand */ - UserStop(); -#endif - - } else { /* not listing this file */ - SKIP_(G.crec.extra_field_length) - SKIP_(G.crec.file_comment_length) - - } /* end if (list member?) */ - - } /* end for-loop (j: member files) */ - -/*--------------------------------------------------------------------------- - Check that we actually found requested files; if so, print totals. - ---------------------------------------------------------------------------*/ - - if (uO.tflag) { - char *sgn = ""; - int cfactor = ratio(tot_ucsize, tot_csize); - - if (cfactor < 0) { - sgn = "-"; - cfactor = -cfactor; - } - Info(slide, 0, ((char *)slide, LoadFarString(ZipfileStats), - members, (members==1)? nullStr:"s", tot_ucsize, - tot_csize, sgn, cfactor/10, cfactor%10)); - } - -/*--------------------------------------------------------------------------- - Check for unmatched filespecs on command line and print warning if any - found. - ---------------------------------------------------------------------------*/ - - if (fn_matched) { - for (j = 0; j < G.filespecs; ++j) - if (!fn_matched[j]) - Info(slide, 0x401, ((char *)slide, - LoadFarString(FilenameNotMatched), G.pfnames[j])); - free((zvoid *)fn_matched); - } - if (xn_matched) { - for (j = 0; j < G.xfilespecs; ++j) - if (!xn_matched[j]) - Info(slide, 0x401, ((char *)slide, - LoadFarString(ExclFilenameNotMatched), G.pxnames[j])); - free((zvoid *)xn_matched); - } - -/*--------------------------------------------------------------------------- - Double check that we're back at the end-of-central-directory record. - ---------------------------------------------------------------------------*/ - - if (readbuf(__G__ G.sig, 4) == 0) /* disk error? */ - return PK_EOF; - if (strncmp(G.sig, end_central_sig, 4)) { /* just to make sure again */ - Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg))); - error_in_archive = PK_WARN; /* didn't find sig */ - } - if (members == 0 && error_in_archive <= PK_WARN) - error_in_archive = PK_FIND; - - if (uO.lflag >= 10) - (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0); - - return error_in_archive; - -} /* end function zipinfo() */ - - - - - -/************************/ -/* Function zi_long() */ -/************************/ - -static int zi_long(__G__ pEndprev) /* return PK-type error code */ - __GDEF - ulg *pEndprev; /* for zi_long() check of extra bytes */ -{ -#ifdef USE_EF_UT_TIME - iztimes z_utime; -#endif - int error, error_in_archive=PK_COOL; - ush hostnum, hostver, extnum, extver, methnum, xattr; - char workspace[12], attribs[22]; - ZCONST char *varmsg_str; - char unkn[16]; - static ZCONST char Far *os[NUM_HOSTS] = { - OS_FAT, OS_Amiga, OS_VMS, OS_Unix, OS_VMCMS, OS_AtariST, OS_HPFS, - OS_Macintosh, OS_ZSystem, OS_CPM, OS_TOPS20, OS_NTFS, OS_QDOS, - OS_Acorn, OS_VFAT, OS_MVS, OS_BeOS, OS_Tandem - }; - static ZCONST char Far *method[NUM_METHODS] = { - MthdNone, MthdShrunk, MthdRedF1, MthdRedF2, MthdRedF3, MthdRedF4, - MthdImplode, MthdToken, MthdDeflate, MthdEnDeflate, MthdDCLImplode - }; - static ZCONST char Far *dtypelng[4] = { - DeflNorm, DeflMax, DeflFast, DeflSFast - }; - - -/*--------------------------------------------------------------------------- - Check whether there's any extra space inside the zipfile. If *pEndprev is - zero, it's probably a signal that OS/2 extra fields are involved (with - unknown compressed size). We won't worry about prepended junk here... - ---------------------------------------------------------------------------*/ - - if (G.crec.relative_offset_local_header != *pEndprev && *pEndprev > 0L) { - /* GRR DEBUG - Info(slide, 0, ((char *)slide, - " [crec.relative_offset_local_header = %lu, endprev = %lu]\n", - G.crec.relative_offset_local_header, *pEndprev)); - */ - Info(slide, 0, ((char *)slide, LoadFarString(ExtraBytesPreceding), - (long)G.crec.relative_offset_local_header - (long)(*pEndprev))); - } - - /* calculate endprev for next time around (problem: extra fields may - * differ in length between local and central-directory records) */ - *pEndprev = G.crec.relative_offset_local_header + 4L + LREC_SIZE + - G.crec.filename_length + G.crec.extra_field_length + - G.crec.file_comment_length + G.crec.csize; - -/*--------------------------------------------------------------------------- - Read the extra field, if any. It may be used to get UNIX style modtime. - ---------------------------------------------------------------------------*/ - - if ((error = do_string(__G__ G.crec.extra_field_length, EXTRA_FIELD)) != 0) - { - if (G.extra_field != NULL) { - free(G.extra_field); - G.extra_field = NULL; - } - error_in_archive = error; - /* The premature return in case of a "fatal" error (PK_EOF) is - * delayed until we analyze the extra field contents. - * This allows us to display all the other info that has been - * successfully read in. - */ - } - -/*--------------------------------------------------------------------------- - Print out various interesting things about the compressed file. - ---------------------------------------------------------------------------*/ - - hostnum = (ush)(G.pInfo->hostnum); - hostver = G.crec.version_made_by[0]; - extnum = (ush)MIN(G.crec.version_needed_to_extract[1], NUM_HOSTS); - extver = G.crec.version_needed_to_extract[0]; - methnum = (ush)MIN(G.crec.compression_method, NUM_METHODS); - - (*G.message)((zvoid *)&G, (uch *)" ", 2L, 0); fnprint(__G); - - Info(slide, 0, ((char *)slide, LoadFarString(LocalHeaderOffset), - G.crec.relative_offset_local_header, - G.crec.relative_offset_local_header)); - - if (hostnum >= NUM_HOSTS) { - sprintf(unkn, LoadFarString(UnknownNo), - (int)G.crec.version_made_by[1]); - varmsg_str = unkn; - } else { - varmsg_str = LoadFarStringSmall(os[hostnum]); - } - Info(slide, 0, ((char *)slide, LoadFarString(HostOS), varmsg_str)); - Info(slide, 0, ((char *)slide, LoadFarString(EncodeSWVer), hostver/10, - hostver%10)); - - if (extnum >= NUM_HOSTS) { - sprintf(unkn, LoadFarString(UnknownNo), - (int)G.crec.version_needed_to_extract[1]); - varmsg_str = unkn; - } else { - varmsg_str = LoadFarStringSmall(os[extnum]); - } - Info(slide, 0, ((char *)slide, LoadFarString(MinOSCompReq), varmsg_str)); - Info(slide, 0, ((char *)slide, LoadFarString(MinSWVerReq), extver/10, - extver%10)); - - if (methnum >= NUM_METHODS) { - sprintf(unkn, LoadFarString(UnknownNo), G.crec.compression_method); - varmsg_str = unkn; - } else { - varmsg_str = LoadFarStringSmall(method[methnum]); - } - Info(slide, 0, ((char *)slide, LoadFarString(CompressMethod), varmsg_str)); - if (methnum == IMPLODED) { - Info(slide, 0, ((char *)slide, LoadFarString(SlideWindowSizeImplode), - (G.crec.general_purpose_bit_flag & 2)? '8' : '4')); - Info(slide, 0, ((char *)slide, LoadFarString(ShannonFanoTrees), - (G.crec.general_purpose_bit_flag & 4)? '3' : '2')); - } else if (methnum == DEFLATED) { - ush dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3); - - Info(slide, 0, ((char *)slide, LoadFarString(CompressSubtype), - LoadFarStringSmall(dtypelng[dnum]))); - } - - Info(slide, 0, ((char *)slide, LoadFarString(FileSecurity), - (G.crec.general_purpose_bit_flag & 1) ? nullStr : "not ")); - Info(slide, 0, ((char *)slide, LoadFarString(ExtendedLocalHdr), - (G.crec.general_purpose_bit_flag & 8) ? "yes" : "no")); - /* print upper 3 bits for amusement? */ - - /* For printing of date & time, a "char d_t_buf[21]" is required. - * To save stack space, we reuse the "char attribs[22]" buffer which - * is not used yet. - */ -# define d_t_buf attribs - - zi_time(__G__ &G.crec.last_mod_dos_datetime, NULL, d_t_buf); - Info(slide, 0, ((char *)slide, LoadFarString(FileModDate), d_t_buf)); -#ifdef USE_EF_UT_TIME - if (G.extra_field && -#ifdef IZ_CHECK_TZ - G.tz_is_valid && -#endif - (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1, - G.crec.last_mod_dos_datetime, &z_utime, NULL) - & EB_UT_FL_MTIME)) - { - TIMET_TO_NATIVE(z_utime.mtime) /* NOP unless MSC 7.0 or Macintosh */ - d_t_buf[0] = (char)0; /* signal "show local time" */ - zi_time(__G__ &G.crec.last_mod_dos_datetime, &(z_utime.mtime), d_t_buf); - Info(slide, 0, ((char *)slide, LoadFarString(UT_FileModDate), - d_t_buf, LoadFarStringSmall(LocalTime))); -#ifndef NO_GMTIME - d_t_buf[0] = (char)1; /* signal "show UTC (GMT) time" */ - zi_time(__G__ &G.crec.last_mod_dos_datetime, &(z_utime.mtime), d_t_buf); - Info(slide, 0, ((char *)slide, LoadFarString(UT_FileModDate), - d_t_buf, LoadFarStringSmall(GMTime))); -#endif /* !NO_GMTIME */ - } -#endif /* USE_EF_UT_TIME */ - - Info(slide, 0, ((char *)slide, LoadFarString(CRC32Value), G.crec.crc32)); - Info(slide, 0, ((char *)slide, LoadFarString(CompressedFileSize), - G.crec.csize)); - Info(slide, 0, ((char *)slide, LoadFarString(UncompressedFileSize), - G.crec.ucsize)); - Info(slide, 0, ((char *)slide, LoadFarString(FilenameLength), - G.crec.filename_length)); - Info(slide, 0, ((char *)slide, LoadFarString(ExtraFieldLength), - G.crec.extra_field_length)); - Info(slide, 0, ((char *)slide, LoadFarString(FileCommentLength), - G.crec.file_comment_length)); - Info(slide, 0, ((char *)slide, LoadFarString(FileDiskNum), - G.crec.disk_number_start + 1)); - Info(slide, 0, ((char *)slide, LoadFarString(ApparentFileType), - (G.crec.internal_file_attributes & 1)? "text" - : (G.crec.internal_file_attributes & 2)? "ebcdic" - : "binary")); /* changed to accept EBCDIC */ -#ifdef ATARI - printf(" external file attributes (hex): %.8lx\n", - G.crec.external_file_attributes); -#endif - xattr = (ush)((G.crec.external_file_attributes >> 16) & 0xFFFF); - if (hostnum == VMS_) { - char *p=attribs, *q=attribs+1; - int i, j, k; - - for (k = 0; k < 12; ++k) - workspace[k] = 0; - if (xattr & VMS_IRUSR) - workspace[0] = 'R'; - if (xattr & VMS_IWUSR) { - workspace[1] = 'W'; - workspace[3] = 'D'; - } - if (xattr & VMS_IXUSR) - workspace[2] = 'E'; - if (xattr & VMS_IRGRP) - workspace[4] = 'R'; - if (xattr & VMS_IWGRP) { - workspace[5] = 'W'; - workspace[7] = 'D'; - } - if (xattr & VMS_IXGRP) - workspace[6] = 'E'; - if (xattr & VMS_IROTH) - workspace[8] = 'R'; - if (xattr & VMS_IWOTH) { - workspace[9] = 'W'; - workspace[11] = 'D'; - } - if (xattr & VMS_IXOTH) - workspace[10] = 'E'; - - *p++ = '('; - for (k = j = 0; j < 3; ++j) { /* loop over groups of permissions */ - for (i = 0; i < 4; ++i, ++k) /* loop over perms within a group */ - if (workspace[k]) - *p++ = workspace[k]; - *p++ = ','; /* group separator */ - if (j == 0) - while ((*p++ = *q++) != ',') - ; /* system, owner perms are same */ - } - *p-- = 0; - *p = ')'; /* overwrite last comma */ - Info(slide, 0, ((char *)slide, LoadFarString(VMSFileAttributes), xattr, - attribs)); - - } else if (hostnum == AMIGA_) { - switch (xattr & AMI_IFMT) { - case AMI_IFDIR: attribs[0] = 'd'; break; - case AMI_IFREG: attribs[0] = '-'; break; - default: attribs[0] = '?'; break; - } - attribs[1] = (xattr & AMI_IHIDDEN)? 'h' : '-'; - attribs[2] = (xattr & AMI_ISCRIPT)? 's' : '-'; - attribs[3] = (xattr & AMI_IPURE)? 'p' : '-'; - attribs[4] = (xattr & AMI_IARCHIVE)? 'a' : '-'; - attribs[5] = (xattr & AMI_IREAD)? 'r' : '-'; - attribs[6] = (xattr & AMI_IWRITE)? 'w' : '-'; - attribs[7] = (xattr & AMI_IEXECUTE)? 'e' : '-'; - attribs[8] = (xattr & AMI_IDELETE)? 'd' : '-'; - attribs[9] = 0; /* better dlm the string */ - Info(slide, 0, ((char *)slide, LoadFarString(AmigaFileAttributes), - xattr, attribs)); - - } else if ((hostnum != FS_FAT_) && (hostnum != FS_HPFS_) && - (hostnum != FS_NTFS_) && (hostnum != FS_VFAT_) && - (hostnum != ACORN_) && - (hostnum != VM_CMS_) && (hostnum != MVS_)) - { /* assume Unix-like */ - switch ((unsigned)(xattr & UNX_IFMT)) { - case (unsigned)UNX_IFDIR: attribs[0] = 'd'; break; - case (unsigned)UNX_IFREG: attribs[0] = '-'; break; - case (unsigned)UNX_IFLNK: attribs[0] = 'l'; break; - case (unsigned)UNX_IFBLK: attribs[0] = 'b'; break; - case (unsigned)UNX_IFCHR: attribs[0] = 'c'; break; - case (unsigned)UNX_IFIFO: attribs[0] = 'p'; break; - case (unsigned)UNX_IFSOCK: attribs[0] = 's'; break; - default: attribs[0] = '?'; break; - } - attribs[1] = (xattr & UNX_IRUSR)? 'r' : '-'; - attribs[4] = (xattr & UNX_IRGRP)? 'r' : '-'; - attribs[7] = (xattr & UNX_IROTH)? 'r' : '-'; - - attribs[2] = (xattr & UNX_IWUSR)? 'w' : '-'; - attribs[5] = (xattr & UNX_IWGRP)? 'w' : '-'; - attribs[8] = (xattr & UNX_IWOTH)? 'w' : '-'; - - if (xattr & UNX_IXUSR) - attribs[3] = (xattr & UNX_ISUID)? 's' : 'x'; - else - attribs[3] = (xattr & UNX_ISUID)? 'S' : '-'; /* S = undefined */ - if (xattr & UNX_IXGRP) - attribs[6] = (xattr & UNX_ISGID)? 's' : 'x'; /* == UNX_ENFMT */ - else - attribs[6] = (xattr & UNX_ISGID)? 'l' : '-'; - if (xattr & UNX_IXOTH) - attribs[9] = (xattr & UNX_ISVTX)? 't' : 'x'; /* "sticky bit" */ - else - attribs[9] = (xattr & UNX_ISVTX)? 'T' : '-'; /* T = undefined */ - attribs[10] = 0; - - Info(slide, 0, ((char *)slide, LoadFarString(UnixFileAttributes), xattr, - attribs)); - - } else { - Info(slide, 0, ((char *)slide, LoadFarString(NonMSDOSFileAttributes), - G.crec.external_file_attributes >> 8)); - - } /* endif (hostnum: external attributes format) */ - - if ((xattr=(ush)(G.crec.external_file_attributes & 0xFF)) == 0) - Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributes), - xattr)); - else if (xattr == 1) - Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributesRO), - xattr)); - else - Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributesAlpha), - xattr, (xattr&1)? "rdo " : nullStr, - (xattr&2)? "hid " : nullStr, - (xattr&4)? "sys " : nullStr, - (xattr&8)? "lab " : nullStr, - (xattr&16)? "dir " : nullStr, - (xattr&32)? "arc" : nullStr)); - -/*--------------------------------------------------------------------------- - Analyze the extra field, if any, and print the file comment, if any (the - filename has already been printed, above). That finishes up this file - entry... - ---------------------------------------------------------------------------*/ - - if (G.crec.extra_field_length > 0) { - uch *ef_ptr = G.extra_field; - ush ef_len = G.crec.extra_field_length; - ush eb_id, eb_datalen; - ZCONST char Far *ef_fieldname; - - if (error_in_archive > PK_WARN) /* fatal: can't continue */ - /* delayed "fatal error" return from extra field reading */ - return error; - if (G.extra_field == (uch *)NULL) - return PK_ERR; /* not consistent with crec length */ - - Info(slide, 0, ((char *)slide, LoadFarString(ExtraFields))); - - while (ef_len >= EB_HEADSIZE) { - eb_id = makeword(&ef_ptr[EB_ID]); - eb_datalen = makeword(&ef_ptr[EB_LEN]); - ef_ptr += EB_HEADSIZE; - ef_len -= EB_HEADSIZE; - - if (eb_datalen > (ush)ef_len) { - Info(slide, 0x421, ((char *)slide, - LoadFarString(ExtraFieldTrunc), eb_id, eb_datalen, ef_len)); - eb_datalen = ef_len; - } - - switch (eb_id) { - case EF_AV: - ef_fieldname = efAV; - break; - case EF_OS2: - ef_fieldname = efOS2; - break; - case EF_ACL: - ef_fieldname = efACL; - break; - case EF_NTSD: - ef_fieldname = efNTSD; - break; - case EF_PKVMS: - ef_fieldname = efPKVMS; - break; - case EF_IZVMS: - ef_fieldname = efIZVMS; - break; - case EF_PKW32: - ef_fieldname = efPKWin32; - break; - case EF_PKUNIX: - ef_fieldname = efPKUnix; - break; - case EF_IZUNIX: - ef_fieldname = efIZUnix; - if (G.crec.version_made_by[1] == UNIX_ && *pEndprev > 0L) - *pEndprev += 4L; /* also have UID/GID in local copy */ - break; - case EF_IZUNIX2: - ef_fieldname = efIZUnix2; - if (*pEndprev > 0L) - *pEndprev += 4L; /* 4 byte UID/GID in local copy */ - break; - case EF_TIME: - ef_fieldname = efTime; - break; - case EF_MAC3: - ef_fieldname = efMac3; - break; - case EF_JLMAC: - ef_fieldname = efJLMac; - break; - case EF_ZIPIT: - ef_fieldname = efZipIt; - break; - case EF_ZIPIT2: - ef_fieldname = efZipIt2; - break; - case EF_VMCMS: - ef_fieldname = efVMCMS; - break; - case EF_MVS: - ef_fieldname = efMVS; - break; - case EF_BEOS: - ef_fieldname = efBeOS; - break; - case EF_QDOS: - ef_fieldname = efQDOS; - break; - case EF_AOSVS: - ef_fieldname = efAOSVS; - break; - case EF_SPARK: /* from RISC OS */ - ef_fieldname = efSpark; - break; - case EF_MD5: - ef_fieldname = efMD5; - break; - case EF_ASIUNIX: - ef_fieldname = efASiUnix; - break; - default: - ef_fieldname = efUnknown; - break; - } - Info(slide, 0, ((char *)slide, LoadFarString(ExtraFieldType), - eb_id, LoadFarStringSmall(ef_fieldname), eb_datalen)); - - /* additional, field-specific information: */ - switch (eb_id) { - case EF_OS2: - case EF_ACL: - if (eb_datalen >= EB_OS2_HLEN) { - if (eb_id == EF_OS2) - ef_fieldname = OS2EAs; - else - ef_fieldname = ACLdata; - Info(slide, 0, ((char *)slide, - LoadFarString(ef_fieldname), makelong(ef_ptr))); - *pEndprev = 0L; /* no clue about csize of local */ - } - break; - case EF_NTSD: - if (eb_datalen >= EB_NTSD_C_LEN) { - Info(slide, 0, ((char *)slide, LoadFarString(NTSDData), - makelong(ef_ptr))); - *pEndprev = 0L; /* no clue about csize of local */ - } - break; - case EF_IZVMS: - if (eb_datalen >= 8) { - char *p, q[8]; - int compr = makeword(ef_ptr+4) & 7; - - *q = '\0'; - if (compr > 3) - compr = 3; - if (strncmp((char *)ef_ptr, "VFAB", 4) == 0) - p = "FAB"; - else if (strncmp((char *)ef_ptr, "VALL", 4) == 0) - p = "XABALL"; - else if (strncmp((char *)ef_ptr, "VFHC", 4) == 0) - p = "XABFHC"; - else if (strncmp((char *)ef_ptr, "VDAT", 4) == 0) - p = "XABDAT"; - else if (strncmp((char *)ef_ptr, "VRDT", 4) == 0) - p = "XABRDT"; - else if (strncmp((char *)ef_ptr, "VPRO", 4) == 0) - p = "XABPRO"; - else if (strncmp((char *)ef_ptr, "VKEY", 4) == 0) - p = "XABKEY"; - else if (strncmp((char *)ef_ptr, "VMSV", 4) == 0) { - p = "version"; - if (eb_datalen >= 16) { - q[0] = ' '; - q[1] = '('; - strncpy(q+2, (char *)ef_ptr+12, 4); - q[6] = ')'; - q[7] = '\0'; - } - } else - p = "version"; - Info(slide, 0, ((char *)slide, LoadFarString(izVMSdata), - LoadFarStringSmall(izVMScomp[compr]), - makeword(ef_ptr+6), p, q)); - } - break; - case EF_TIME: - if (eb_datalen >= 1) { - char types[80]; - int num = 0, len; - - *types = '\0'; - if (*ef_ptr & 1) { - strcpy(types, LoadFarString(UTmodification)); - ++num; - } - if (*ef_ptr & 2) { - len = strlen(types); - if (num) - types[len++] = '/'; - strcpy(types+len, LoadFarString(UTaccess)); - ++num; - if (*pEndprev > 0L) - *pEndprev += 4L; - } - if (*ef_ptr & 4) { - len = strlen(types); - if (num) - types[len++] = '/'; - strcpy(types+len, LoadFarString(UTcreation)); - ++num; - if (*pEndprev > 0L) - *pEndprev += 4L; - } - if (num > 0) - Info(slide, 0, ((char *)slide, - LoadFarString(UTdata), types, - num == 1? nullStr : "s")); - } - break; - case EF_MAC3: - if (eb_datalen >= EB_MAC3_HLEN) { - ulg eb_uc = makelong(ef_ptr); - unsigned mac3_flgs = makeword(ef_ptr+EB_FLGS_OFFS); - unsigned eb_is_uc = mac3_flgs & EB_M3_FL_UNCMPR; - - Info(slide, 0, ((char *)slide, LoadFarString(Mac3data), - eb_uc, eb_is_uc ? "un" : nullStr)); - if (eb_is_uc) { - if (*pEndprev > 0L) - *pEndprev += makelong(ef_ptr); - } else { - *pEndprev = 0L; /* no clue about csize of local */ - } - - Info(slide, 0, ((char *)slide, - LoadFarString(MacOSMAC3flags), - LoadFarStringSmall(mac3_flgs & EB_M3_FL_DATFRK ? - MacOS_DF : MacOS_RF), - (mac3_flgs & EB_M3_FL_TIME64 ? 64 : 32))); - zi_showMacTypeCreator(__G__ &ef_ptr[6]); - } - break; - case EF_ZIPIT2: - if (eb_datalen >= 5 && - strncmp((char *)ef_ptr, "ZPIT", 4) == 0) { - - if (eb_datalen >= 12) { - zi_showMacTypeCreator(__G__ &ef_ptr[4]); - } - } - - case EF_ZIPIT: - if (eb_datalen >= 5 && - strncmp((char *)ef_ptr, "ZPIT", 4) == 0) { - unsigned fnlen = ef_ptr[4]; - - if (eb_datalen >= fnlen + (5 + 8)) { - uch nullchar = ef_ptr[fnlen+5]; - - ef_ptr[fnlen+5] = '\0'; /* terminate filename */ - Info(slide, 0, ((char *)slide, - LoadFarString(ZipItFname), (char *)ef_ptr+5)); - ef_ptr[fnlen+5] = nullchar; - zi_showMacTypeCreator(__G__ &ef_ptr[fnlen+5]); - } - } - break; - case EF_JLMAC: - if (eb_datalen >= 40 && - strncmp((char *)ef_ptr, "JLEE", 4) == 0) - { - zi_showMacTypeCreator(__G__ &ef_ptr[4]); - - Info(slide, 0, ((char *)slide, - LoadFarString(MacOSJLEEflags), - LoadFarStringSmall(ef_ptr[31] & 1 ? - MacOS_DF : MacOS_RF))); - } - break; -#ifdef CMS_MVS - case EF_VMCMS: - case EF_MVS: - { - char type[100]; - - Info(slide, 0, ((char *)slide, - LoadFarString(VmMvsExtraField), - (getVMMVSexfield(type, ef_ptr-EB_HEADSIZE, - (unsigned)eb_datalen) > 0)? - type : LoadFarStringSmall(VmMvsInvalid))); - } - break; -#endif /* CMS_MVS */ - case EF_BEOS: - if (eb_datalen >= EB_BEOS_HLEN) { - ulg eb_uc = makelong(ef_ptr); - unsigned eb_is_uc = - *(ef_ptr+EB_FLGS_OFFS) & EB_BE_FL_UNCMPR; - - Info(slide, 0, ((char *)slide, LoadFarString(BeOSdata), - eb_uc, eb_is_uc ? "un" : nullStr)); - if (eb_is_uc) { - if (*pEndprev > 0L) - *pEndprev += makelong(ef_ptr); - } else { - *pEndprev = 0L; /* no clue about csize of local */ - } - } - break; - case EF_QDOS: - if (eb_datalen >= 4) { - Info(slide, 0, ((char *)slide, LoadFarString(QDOSdata), - ef_ptr[0], ef_ptr[1], ef_ptr[2], ef_ptr[3])); - } - break; - case EF_AOSVS: - if (eb_datalen >= 5) { - Info(slide, 0, ((char *)slide, LoadFarString(AOSVSdata), - ((int)(uch)ef_ptr[4])/10, ((int)(uch)ef_ptr[4])%10)); - } - break; - case EF_MD5: - if (eb_datalen >= 19) { - char md5[33]; - int i; - - for (i = 0; i < 16; ++i) - sprintf(&md5[i<<1], "%02x", ef_ptr[15-i]); - md5[32] = '\0'; - Info(slide, 0, ((char *)slide, LoadFarString(MD5data), - md5)); - break; - } /* else: fall through !! */ - default: - if (eb_datalen > 0) { - ush i, n; - - if (eb_datalen <= 24) { - Info(slide, 0, ((char *)slide, - LoadFarString(ColonIndent))); - n = eb_datalen; - } else { - Info(slide, 0, ((char *)slide, - LoadFarString(First20))); - n = 20; - } - for (i = 0; i < n; ++i) - Info(slide, 0, ((char *)slide, - LoadFarString(efFormat), ef_ptr[i])); - } - break; - } - (*G.message)((zvoid *)&G, (uch *)".", 1L, 0); - - ef_ptr += eb_datalen; - ef_len -= eb_datalen; - } - (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0); - } - - /* high bit == Unix/OS2/NT GMT times (mtime, atime); next bit == UID/GID */ - if ((xattr = (ush)((G.crec.external_file_attributes & 0xC000) >> 12)) & 8) - { - if (hostnum == UNIX_ || hostnum == FS_HPFS_ || hostnum == FS_NTFS_) - { - Info(slide, 0, ((char *)slide, LoadFarString(lExtraFieldType), - "is", EF_IZUNIX, LoadFarStringSmall(efIZUnix), - (unsigned)(xattr&12), (xattr&4)? efIZuid : efIZnouid)); - if (*pEndprev > 0L) - *pEndprev += (ulg)(xattr&12); - } - else if (hostnum == FS_FAT_ && !(xattr&4)) - Info(slide, 0, ((char *)slide, LoadFarString(lExtraFieldType), - "may be", EF_IZUNIX, LoadFarStringSmall(efIZUnix), 8, - efIZnouid)); - } - - if (!G.crec.file_comment_length) - Info(slide, 0, ((char *)slide, LoadFarString(NoFileComment))); - else { - Info(slide, 0, ((char *)slide, LoadFarString(FileCommBegin))); - if ((error = do_string(__G__ G.crec.file_comment_length, DISPL_8)) != - PK_COOL) - { - error_in_archive = error; /* might be warning */ - if (error > PK_WARN) /* fatal */ - return error; - } - Info(slide, 0, ((char *)slide, LoadFarString(FileCommEnd))); - } - - return error_in_archive; - -} /* end function zi_long() */ - - - - - -/*************************/ -/* Function zi_short() */ -/*************************/ - -static int zi_short(__G) /* return PK-type error code */ - __GDEF -{ -#ifdef USE_EF_UT_TIME - iztimes z_utime; - time_t *z_modtim; -#endif - int k, error, error_in_archive=PK_COOL; - ush methnum, hostnum, hostver, xattr; - char *p, workspace[12], attribs[16]; - char methbuf[5]; - static ZCONST char dtype[5]="NXFS"; /* normal, maximum, fast, superfast */ - static ZCONST char Far os[NUM_HOSTS+1][4] = { - "fat", "ami", "vms", "unx", "cms", "atr", "hpf", "mac", "zzz", - "cpm", "t20", "ntf", "qds", "aco", "vft", "mvs", "be ", "nsk", - "???" - }; - static ZCONST char Far method[NUM_METHODS+1][5] = { - "stor", "shrk", "re:1", "re:2", "re:3", "re:4", "i#:#", "tokn", - "def#", "edef", "dcli", "u###" - }; - - -/*--------------------------------------------------------------------------- - Print out various interesting things about the compressed file. - ---------------------------------------------------------------------------*/ - - methnum = (ush)MIN(G.crec.compression_method, NUM_METHODS); - hostnum = (ush)(G.pInfo->hostnum); - hostver = G.crec.version_made_by[0]; -/* - extnum = MIN(G.crec.version_needed_to_extract[1], NUM_HOSTS); - extver = G.crec.version_needed_to_extract[0]; - */ - - zfstrcpy(methbuf, method[methnum]); - if (methnum == IMPLODED) { - methbuf[1] = (char)((G.crec.general_purpose_bit_flag & 2)? '8' : '4'); - methbuf[3] = (char)((G.crec.general_purpose_bit_flag & 4)? '3' : '2'); - } else if (methnum == DEFLATED) { - ush dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3); - methbuf[3] = dtype[dnum]; - } else if (methnum >= NUM_METHODS) { /* unknown */ - sprintf(&methbuf[1], "%03u", G.crec.compression_method); - } - - for (k = 0; k < 15; ++k) - attribs[k] = ' '; - attribs[15] = 0; - - xattr = (ush)((G.crec.external_file_attributes >> 16) & 0xFFFF); - switch (hostnum) { - case VMS_: - { int i, j; - - for (k = 0; k < 12; ++k) - workspace[k] = 0; - if (xattr & VMS_IRUSR) - workspace[0] = 'R'; - if (xattr & VMS_IWUSR) { - workspace[1] = 'W'; - workspace[3] = 'D'; - } - if (xattr & VMS_IXUSR) - workspace[2] = 'E'; - if (xattr & VMS_IRGRP) - workspace[4] = 'R'; - if (xattr & VMS_IWGRP) { - workspace[5] = 'W'; - workspace[7] = 'D'; - } - if (xattr & VMS_IXGRP) - workspace[6] = 'E'; - if (xattr & VMS_IROTH) - workspace[8] = 'R'; - if (xattr & VMS_IWOTH) { - workspace[9] = 'W'; - workspace[11] = 'D'; - } - if (xattr & VMS_IXOTH) - workspace[10] = 'E'; - - p = attribs; - for (k = j = 0; j < 3; ++j) { /* groups of permissions */ - for (i = 0; i < 4; ++i, ++k) /* perms within a group */ - if (workspace[k]) - *p++ = workspace[k]; - *p++ = ','; /* group separator */ - } - *--p = ' '; /* overwrite last comma */ - if ((p - attribs) < 12) - sprintf(&attribs[12], "%d.%d", hostver/10, hostver%10); - } - break; - - case FS_FAT_: - case FS_HPFS_: - case FS_NTFS_: - case VM_CMS_: - case FS_VFAT_: - case MVS_: - case ACORN_: - xattr = (ush)(G.crec.external_file_attributes & 0xFF); - sprintf(attribs, ".r.-... %d.%d", hostver/10, hostver%10); - attribs[2] = (xattr & 0x01)? '-' : 'w'; - attribs[5] = (xattr & 0x02)? 'h' : '-'; - attribs[6] = (xattr & 0x04)? 's' : '-'; - attribs[4] = (xattr & 0x20)? 'a' : '-'; - if (xattr & 0x10) { - attribs[0] = 'd'; - attribs[3] = 'x'; - } else - attribs[0] = '-'; - if (IS_VOLID(xattr)) - attribs[0] = 'V'; - else if ((p = strrchr(G.filename, '.')) != (char *)NULL) { - ++p; - if (STRNICMP(p, "com", 3) == 0 || STRNICMP(p, "exe", 3) == 0 || - STRNICMP(p, "btm", 3) == 0 || STRNICMP(p, "cmd", 3) == 0 || - STRNICMP(p, "bat", 3) == 0) - attribs[3] = 'x'; - } - break; - - case AMIGA_: - switch (xattr & AMI_IFMT) { - case AMI_IFDIR: attribs[0] = 'd'; break; - case AMI_IFREG: attribs[0] = '-'; break; - default: attribs[0] = '?'; break; - } - attribs[1] = (xattr & AMI_IHIDDEN)? 'h' : '-'; - attribs[2] = (xattr & AMI_ISCRIPT)? 's' : '-'; - attribs[3] = (xattr & AMI_IPURE)? 'p' : '-'; - attribs[4] = (xattr & AMI_IARCHIVE)? 'a' : '-'; - attribs[5] = (xattr & AMI_IREAD)? 'r' : '-'; - attribs[6] = (xattr & AMI_IWRITE)? 'w' : '-'; - attribs[7] = (xattr & AMI_IEXECUTE)? 'e' : '-'; - attribs[8] = (xattr & AMI_IDELETE)? 'd' : '-'; - sprintf(&attribs[12], "%d.%d", hostver/10, hostver%10); - break; - - default: /* assume Unix-like */ - switch ((unsigned)(xattr & UNX_IFMT)) { - case (unsigned)UNX_IFDIR: attribs[0] = 'd'; break; - case (unsigned)UNX_IFREG: attribs[0] = '-'; break; - case (unsigned)UNX_IFLNK: attribs[0] = 'l'; break; - case (unsigned)UNX_IFBLK: attribs[0] = 'b'; break; - case (unsigned)UNX_IFCHR: attribs[0] = 'c'; break; - case (unsigned)UNX_IFIFO: attribs[0] = 'p'; break; - case (unsigned)UNX_IFSOCK: attribs[0] = 's'; break; - default: attribs[0] = '?'; break; - } - attribs[1] = (xattr & UNX_IRUSR)? 'r' : '-'; - attribs[4] = (xattr & UNX_IRGRP)? 'r' : '-'; - attribs[7] = (xattr & UNX_IROTH)? 'r' : '-'; - attribs[2] = (xattr & UNX_IWUSR)? 'w' : '-'; - attribs[5] = (xattr & UNX_IWGRP)? 'w' : '-'; - attribs[8] = (xattr & UNX_IWOTH)? 'w' : '-'; - - if (xattr & UNX_IXUSR) - attribs[3] = (xattr & UNX_ISUID)? 's' : 'x'; - else - attribs[3] = (xattr & UNX_ISUID)? 'S' : '-'; /* S==undefined */ - if (xattr & UNX_IXGRP) - attribs[6] = (xattr & UNX_ISGID)? 's' : 'x'; /* == UNX_ENFMT */ - else - /* attribs[6] = (xattr & UNX_ISGID)? 'l' : '-'; real 4.3BSD */ - attribs[6] = (xattr & UNX_ISGID)? 'S' : '-'; /* SunOS 4.1.x */ - if (xattr & UNX_IXOTH) - attribs[9] = (xattr & UNX_ISVTX)? 't' : 'x'; /* "sticky bit" */ - else - attribs[9] = (xattr & UNX_ISVTX)? 'T' : '-'; /* T==undefined */ - - sprintf(&attribs[12], "%d.%d", hostver/10, hostver%10); - break; - - } /* end switch (hostnum: external attributes format) */ - - Info(slide, 0, ((char *)slide, "%s %s %8lu ", attribs, - LoadFarStringSmall(os[hostnum]), G.crec.ucsize)); - Info(slide, 0, ((char *)slide, "%c", - (G.crec.general_purpose_bit_flag & 1)? - ((G.crec.internal_file_attributes & 1)? 'T' : 'B') : /* encrypted */ - ((G.crec.internal_file_attributes & 1)? 't' : 'b'))); /* plaintext */ - k = (G.crec.extra_field_length || - /* a local-only "UX" (old Unix/OS2/NT GMT times "IZUNIX") e.f.? */ - ((G.crec.external_file_attributes & 0x8000) && - (hostnum == UNIX_ || hostnum == FS_HPFS_ || hostnum == FS_NTFS_))); - Info(slide, 0, ((char *)slide, "%c", k? - ((G.crec.general_purpose_bit_flag & 8)? 'X' : 'x') : /* extra field */ - ((G.crec.general_purpose_bit_flag & 8)? 'l' : '-'))); /* no extra field */ - /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ extended local header or not */ - - if (uO.lflag == 4) { - ulg csiz = G.crec.csize; - - if (G.crec.general_purpose_bit_flag & 1) - csiz -= 12; /* if encrypted, don't count encryption header */ - Info(slide, 0, ((char *)slide, "%3d%%", - (ratio(G.crec.ucsize,csiz)+5)/10)); - } else if (uO.lflag == 5) - Info(slide, 0, ((char *)slide, " %8lu", G.crec.csize)); - - /* Read the extra field, if any. The extra field info may be used - * in the file modification time section, below. - */ - if ((error = do_string(__G__ G.crec.extra_field_length, EXTRA_FIELD)) != 0) - { - if (G.extra_field != NULL) { - free(G.extra_field); - G.extra_field = NULL; - } - error_in_archive = error; - /* We do not return prematurely in case of a "fatal" error (PK_EOF). - * This does not hurt here, because we do not need to read from the - * zipfile again before the end of this function. - */ - } - - /* For printing of date & time, a "char d_t_buf[16]" is required. - * To save stack space, we reuse the "char attribs[16]" buffer whose - * content is no longer needed. - */ -# define d_t_buf attribs -#ifdef USE_EF_UT_TIME - z_modtim = G.extra_field && -#ifdef IZ_CHECK_TZ - G.tz_is_valid && -#endif - (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1, - G.crec.last_mod_dos_datetime, &z_utime, NULL) - & EB_UT_FL_MTIME) - ? &z_utime.mtime : NULL; - TIMET_TO_NATIVE(z_utime.mtime) /* NOP unless MSC 7.0 or Macintosh */ - d_t_buf[0] = (char)0; /* signal "show local time" */ -#else -# define z_modtim NULL -#endif - Info(slide, 0, ((char *)slide, " %s %s ", methbuf, - zi_time(__G__ &G.crec.last_mod_dos_datetime, z_modtim, d_t_buf))); - fnprint(__G); - -/*--------------------------------------------------------------------------- - Skip the file comment, if any (the filename has already been printed, - above). That finishes up this file entry... - ---------------------------------------------------------------------------*/ - - SKIP_(G.crec.file_comment_length) - - return error_in_archive; - -} /* end function zi_short() */ - - - - - -/**************************************/ -/* Function zi_showMacTypeCreator() */ -/**************************************/ - -static void zi_showMacTypeCreator(__G__ ebfield) - __GDEF - uch *ebfield; -{ - /* not every Type / Creator character is printable */ - if (isprint(ebfield[0]) && isprint(ebfield[1]) && - isprint(ebfield[2]) && isprint(ebfield[3]) && - isprint(ebfield[4]) && isprint(ebfield[5]) && - isprint(ebfield[6]) && isprint(ebfield[7])) { - Info(slide, 0, ((char *)slide, LoadFarString(MacOSdata), - ebfield[0], ebfield[1], ebfield[2], ebfield[3], - ebfield[4], ebfield[5], ebfield[6], ebfield[7])); - } else { - Info(slide, 0, ((char *)slide, LoadFarString(MacOSdata1), - (((ulg)ebfield[0]) << 24) + - (((ulg)ebfield[1]) << 16) + - (((ulg)ebfield[2]) << 8) + - ((ulg)ebfield[3]), - (((ulg)ebfield[4]) << 24) + - (((ulg)ebfield[5]) << 16) + - (((ulg)ebfield[6]) << 8) + - ((ulg)ebfield[7]))); - } -} /* end function zi_showMacTypeCreator() */ - - - - - -/************************/ -/* Function zi_time() */ -/************************/ - -static char *zi_time(__G__ datetimez, modtimez, d_t_str) - __GDEF - ZCONST ulg *datetimez; - ZCONST time_t *modtimez; - char *d_t_str; -{ - unsigned yr, mo, dy, hh, mm, ss; - char monthbuf[4]; - ZCONST char *monthstr; - static ZCONST char Far month[12][4] = { - "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" - }; -#ifdef USE_EF_UT_TIME - struct tm *t; -#endif - - - -/*--------------------------------------------------------------------------- - Convert the file-modification date and time info to a string of the form - "1991 Feb 23 17:15:00", "23-Feb-91 17:15" or "19910223.171500", depending - on values of lflag and T_flag. If using Unix-time extra fields, convert - to local time or not, depending on value of first character in d_t_str[]. - ---------------------------------------------------------------------------*/ - -#ifdef USE_EF_UT_TIME - if (modtimez != NULL) { -#ifndef NO_GMTIME - /* check for our secret message from above... */ - t = (d_t_str[0] == (char)1)? gmtime(modtimez) : localtime(modtimez); -#else - t = localtime(modtimez); -#endif - if (uO.lflag > 9 && t == (struct tm *)NULL) - /* time conversion error in verbose listing format, - * return string with '?' instead of data - */ - return (strcpy(d_t_str, LoadFarString(YMDHMSTimeError))); - } else - t = (struct tm *)NULL; - if (t != (struct tm *)NULL) { - mo = (unsigned)(t->tm_mon + 1); - dy = (unsigned)(t->tm_mday); - yr = (unsigned)(t->tm_year); - - hh = (unsigned)(t->tm_hour); - mm = (unsigned)(t->tm_min); - ss = (unsigned)(t->tm_sec); - } else -#endif /* USE_EF_UT_TIME */ - { - yr = ((unsigned)(*datetimez >> 25) & 0x7f) + 80; - mo = ((unsigned)(*datetimez >> 21) & 0x0f); - dy = ((unsigned)(*datetimez >> 16) & 0x1f); - - hh = (((unsigned)*datetimez >> 11) & 0x1f); - mm = (((unsigned)*datetimez >> 5) & 0x3f); - ss = (((unsigned)*datetimez << 1) & 0x3e); - } - - if (mo == 0 || mo > 12) { - sprintf(monthbuf, LoadFarString(BogusFmt), mo); - monthstr = monthbuf; - } else - monthstr = LoadFarStringSmall(month[mo-1]); - - if (uO.lflag > 9) /* verbose listing format */ - sprintf(d_t_str, LoadFarString(YMDHMSTime), yr+1900, monthstr, dy, hh, - mm, ss); - else if (uO.T_flag) - sprintf(d_t_str, LoadFarString(DecimalTime), yr+1900, mo, dy, hh, mm, - ss); - else /* was: if ((uO.lflag >= 3) && (uO.lflag <= 5)) */ - sprintf(d_t_str, LoadFarString(DMYHMTime), dy, monthstr, yr%100, hh, - mm); - - return d_t_str; - -} /* end function zi_time() */ - -#endif /* !NO_ZIPINFO */ diff --git a/Build/source/texk/djgpp/ChangeLog b/Build/source/texk/djgpp/ChangeLog deleted file mode 100644 index 53a911e5f32..00000000000 --- a/Build/source/texk/djgpp/ChangeLog +++ /dev/null @@ -1,69 +0,0 @@ -1999-01-27 Olaf Weber - - * config.bat: Update from Eli Zaretskii. - -1999-01-10 Olaf Weber - - * pathconf.c, xstat.h, putenv.c, stat.c, popen.c: New files from - Eli, updates of other files. - -1998-10-22 Eli Zaretskii - - * config.bat: Support build of additional packages: dtl, dvidvi, - gsftopk, lacheck, makeindexk, musixflx, odvipsk, ps2pkm, seetexk, - tex4htk. - * cfgdtl.pat, cfgdvidv.pat, cfglachk.pat, cfgseetx.pat, - cfgmkind.pat, cfggsfpk.pat, cfgpspkm.pat, cfgtexht.pat, - cfgmusix.pat: New files. - -1998-03-18 Eli Zaretskii - - * README.djgpp: Minor updates and cleanup. - - * cfgmain.pat, cfgkpath.pat, cfgweb2c.pat, cfgdvilj.pat, - cfgdvips.pat: New versions. - -1998-03-04 Eli Zaretskii - - * cfgdvips.pat: New version, fixes problems with "make check" in - the dvipsk directory. - -1998-02-16 Eli Zaretskii - - * config.bat: Configure with EPSFWIN pseudo-window support. - -1998-02-09 Eli Zaretskii - - * config.bat: Fail if patches to some of the configure scripts - fail to apply. Use response file when invoking the shell, to - avoid exceeding the 126-character limit of DOS command lines. Use - ${DJDIR}/share as the location of the texmf tree. - - * cfgmain.pat, cfgkpath.pat, cfgweb2c.pat, cfgdvilj.pat, - cfgdvips.pat: New versions. - -Wed Jan 28 20:16:14 1998 Olaf Weber - - * A new set of files from Eli, including cfgdvips.pat and - cfgdvilj.pat which are new. - -Tue Jan 13 12:23:50 1998 Olaf Weber - - * cfgmain.pat, cfgweb2c.pat, config.bat: New version from Eli. - -Tue Dec 30 17:54:29 1997 Olaf Weber - - * cfgweb2c.pat: New version from Eli. - -Thu Dec 18 20:43:39 1997 Olaf Weber - - * cfgkpath.pat, cfgweb2c.pat, cfgmain.pat, config.bat: New - versions from Eli. - -Tue Dec 16 18:56:03 1997 Olaf Weber - - * config.bat: New file from Eli Zaretskii. - - * cfgweb2c.pat, cfgkpath.pat, cfgmain.pat: New file from Eli - Zaretskii, edited to remove obsolete patches. - diff --git a/Build/source/texk/djgpp/README.djgpp b/Build/source/texk/djgpp/README.djgpp deleted file mode 100644 index 8579633b28e..00000000000 --- a/Build/source/texk/djgpp/README.djgpp +++ /dev/null @@ -1,207 +0,0 @@ -This directory includes files required to build TeX and related -programs with the DJGPP port of GNU tools for MS-DOS and MS-Windows. -DJGPP produces 32-bit protected-mode programs which run on all -Microsoft platforms. On plain MS-DOS they need a DPMI server (a free -server is available as v2misc/csdpmiNb.zip that can be downloaded from -DJGPP archives on SimTel.NET mirrors). MS-Windows have DPMI services -built into them. When run on Windows 9X, the DJGPP-compiled programs -support long file names. - - - Building the package from sources - --------------------------------- - - - The following tools are REQUIRED to build and install Web2c - programs (the parentheses list filenames of binary distributions - you can download from DJGPP archives if you don't have a - particular package): - - Bash (bsh1147b.zip) - Fileutils (fil316b.zip) - Textutils (txt122b.zip) - Grep (grep22b.zip) - Patch (pat25b.zip) - Sh-utils (shl112b.zip) - Sed (sed302b.zip) - Diffutils (dif2721b.zip) - Findutils (find41b.zip) - Ed (ed-02b.zip) - Gawk (gwk303b.zip) - Bison (bsn125b.zip) - Flex (flx254b.zip) - - All of these are available from the v2gnu directory on the usual - DJGPP sites, e.g. ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/. - - The above tools are IN ADDITION to the basic DJGPP development - environment that is required to compile and link C programs. - Consult the file v2/readme.1st and the DJGPP FAQ list in - v2/faqNNNb.zip, for details about the basic package. - - - Unzip the downloaded Web2c and Texmflib distributions from the - root of your DJGPP installation tree. If you are doing this on - Windows 9x, use an unzip program that supports long filenames. - - This will create the top directory and unpack the sources - into the relevant subdirectories. It will also create the - `share/texmf' directory and unpack the contents of Texmflib - library there. - - - At this point, I suggest you to read the file - `kpathsea/INSTALL.txt'. It includes a detailed yet very - readable description of the various options available to you at - build and installation time. - - - Make sure your TMPDIR environment variable points to a drive - with enough free space. Many DJGPP installations set this - variable to a RAM disk for performance reasons. Since RAM disks - tend to be small (a few Megabytes), a complex shell script may - fill it with temporary files, typically from pipes and `command` - expansions, after which point programs run by that shell will - start to fail. The TeX build process runs some very long and - complicated shell scripts which require around 4MB of free space - on TMPDIR filesystem (it failed for me when I had only 2.5MB). - If you cannot enlarge your RAM disk, point TMPDIR to a real disk - (the effect on the overall build time is insignificant, since - GCC will have hard time compiling some of the larger programs - with -O2 switch). TMPDIR is usually set on the DJGPP.ENV file, - but you can override it by setting TMPDIR from the DOS prompt. - - - The default 256KB stack size limit of DJGPP programs is too - small for compiling some of the TeX programs. Make sure your - cc1.exe program has at least 768KB of stack. Here's how: - - stubedit cc1.exe minstack=768k - - (`stubedit' is part of the basic DJGPP development - environment). - - - To configure the package for DJGPP, run the `config.bat' batch - file in the djgpp subdirectory. This sets some environment - variables and then invokes Bash to run the configuration script - with necessary arguments. (You can edit the batch file if you - want to run the script with different arguments.) The command - is this: - - djgpp\config - - - It is possible to configure and build Web2c from a directory - other than where the sources reside (useful when you cannot - write to that directory, like if it's on a CD-ROM). In that - case, you need to invoke `config.bat' with a single argument - which is the full pathname of the source directory. For - example: - - f:\gnu\web2c-7.2\djgpp\config f:/gnu/web2c-7.2 - - Note that you MUST use Unix-style forward slashes in the - argument you pass to `config.bat', or else it will fail. - - - The configure script will run for a while and recursively - configure the programs in subdirectories. - - - After running `config', just say "make". - - Building the full Web2c package takes a while (about 2 hours - on a 486/DX2-66, 35 minutes on a Pentium-166), so you might go - for a cup of coffee while it compiles. - - - To build the emulation programs in the `contrib' directory, - chdir into that directory and say "make". Compiling `regex.c' - triggers several warning messages about variables that ``might - be used uninitialized''; you can safely disregard these - warnings. - - - If you are building Texk more than 18 months since it was - released, you might see a warning message while LaTeX is built - which complains about old sources. In general, you can press - [Enter] in response to that message and let the build continue, - since the message is just a precaution. However, if you do care - to have the latest stuff, you will need to download the - latex/base directory from one of the CTAN mirrors and replace - with it the files in latex/base which come with tmflib74.zip. - - - If you have changed some of the programs in the package, it is a - good idea to run tests on them. The Makefile in the web2c - directory has a large number of xxx-check targets, where xxx is - the name of a program; you can run these one by one by going - into web2c and saying like so: - - make gftopk-check - - You can also run all of them together by saying "make check" in - the top-level directory. - - Some of the tests appear to fail (`diff' prints some actual - differences between the test results and the reference files - that come with the package. In most cases, this is normal - behavior (the programs were changed since the canonical results - were computed); the file `web2c/tests/check.log' includes the - output you should see for each test. If your results coincide - with `check.log' (except for the version of the package that the - programs print), you are doing fine. - - - Before installing, if you already have a previous version of - Texk installed, review your `texmf.cnf' configuration file (in - %TEXMF%/web2c directory). If you have changed it from the - original, you might want the installation process to leave it - alone and not overwrite it with the fresh copy from the - distribution. In that case, edit `texmf.cnf' and remove the - word "original" from its first line. This tells the - installation process to refrain from replacing that file. - - - To install the programs, say "make install" in the top - directory. This will create missing directories and copy the - programs and auxiliary files to their places. The programs - inside `contrib' need to be installed manually (typically, into - the same directory where the executable programs go). - - - Troubleshooting - --------------- - - I do NOT intend here to replace the various chapters in the docs - which explain how to solve problems and report bugs. Please read - the docs whenever you see any seemingly abnormal behavior. What's - below is intended to mention a few DOS- and DJGPP-specific - problems that you might see, and how to get around them. - - First, a word of warning. Web2c is a tremendously large and - complex package, with dozens of different programs, some of them - with many different options. While porting it, I've made a good- - faith effort to test everything I could, including using it to - generate printed versions of various TeX and Texinfo documents. - However, some bugs might still be there. Please treat this port - accordingly and report possible bugs to the DJGPP news group - (comp.os.msdos.djgpp) first. - - One possible problem you could see is due to insufficient number - of available file handles. `Dvilj' is particularly prone to this - problem. If you ever see an error message to the effect that a - program has no more handles, edit your CONFIG.SYS and enlarge the - FILES= setting there. (Don't forget to reboot so the new setting - is in effect.) - - Another related problem manifests itself by an error message like - so: - - c:\djgpp\bin/mf.exe: cannot open - - This usually happens when a DVI driver finds a missing font and - invokes the MetaFont program to generate them on the fly. Due to - peculiarities of file handles inheritance from parent to child - processes, the child process can sometimes fail to start because - the stub cannot open the .exe file. I think I've fixed these - problems, so you shouldn't see such messages, but if you do, - please report the details. - - If the font-creation fails, a file named `missfont.log' is created - in the current directory, with the commands you should issue to - make these fonts. Many times, invoking that file as a batch file - will create the missing fonts, so you could then invoke the DVI - driver again and it will work. - - - Happy TeXing! - - Eli Zaretskii diff --git a/Build/source/texk/djgpp/cfgdtl.pat b/Build/source/texk/djgpp/cfgdtl.pat deleted file mode 100644 index 23f01392623..00000000000 --- a/Build/source/texk/djgpp/cfgdtl.pat +++ /dev/null @@ -1,19 +0,0 @@ -*** dtl/configure.orig Tue Mar 17 12:51:52 1998 ---- dtl/configure Thu Mar 19 18:28:22 1998 -*************** -*** 2273,2279 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 2273,2279 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/cfgdvidv.pat b/Build/source/texk/djgpp/cfgdvidv.pat deleted file mode 100644 index e03cbf55b43..00000000000 --- a/Build/source/texk/djgpp/cfgdvidv.pat +++ /dev/null @@ -1,19 +0,0 @@ -*** dvidvi/configure.orig Tue Mar 17 12:51:54 1998 ---- dvidvi/configure Thu Mar 19 17:55:50 1998 -*************** -*** 2273,2279 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 2273,2279 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/cfgdvilj.pat b/Build/source/texk/djgpp/cfgdvilj.pat deleted file mode 100644 index 9300c9a5a8b..00000000000 --- a/Build/source/texk/djgpp/cfgdvilj.pat +++ /dev/null @@ -1,29 +0,0 @@ -*** dviljk/configure.orig Thu Mar 12 13:20:20 1998 ---- dviljk/configure Tue Mar 17 11:38:20 1998 -*************** -*** 2140,2145 **** ---- 2140,2146 ---- - s%@LTLIBOBJS@%$LTLIBOBJS%g - s%@MAINT@%$MAINT%g - s%@texmfmain@%$texmfmain%g -+ s, ln -s , cp -pr , - - CEOF - EOF -*************** -*** 2273,2279 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 2274,2280 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/cfgdvips.pat b/Build/source/texk/djgpp/cfgdvips.pat deleted file mode 100644 index 5e252a48fe3..00000000000 --- a/Build/source/texk/djgpp/cfgdvips.pat +++ /dev/null @@ -1,31 +0,0 @@ -*** dvipsk/configure.orig Thu Mar 12 13:20:44 1998 ---- dvipsk/configure Tue Mar 17 11:38:22 1998 -*************** -*** 2077,2082 **** ---- 2077,2085 ---- - s%@LTLIBOBJS@%$LTLIBOBJS%g - s%@MAINT@%$MAINT%g - s%@texmfmain@%$texmfmain%g -+ s, ln -s , cp -rp , -+ /^ -PATH=/s,^ -,&PATH_SEPARATOR=: PATH_EXPAND=y , -+ /^ .*testdata:/s,testdata:,testdata\\\;,g - - CEOF - EOF -*************** -*** 2210,2216 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 2213,2219 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/cfgdvpdf.pat b/Build/source/texk/djgpp/cfgdvpdf.pat deleted file mode 100644 index 58c716166b7..00000000000 --- a/Build/source/texk/djgpp/cfgdvpdf.pat +++ /dev/null @@ -1,19 +0,0 @@ -*** dvipdfm/configure.orig Sun Jan 10 17:06:32 1999 ---- dvipdfm/configure Mon Jan 11 10:19:58 1999 -*************** -*** 3320,3326 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 3320,3326 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/cfggsfpk.pat b/Build/source/texk/djgpp/cfggsfpk.pat deleted file mode 100644 index 2d24a48dce7..00000000000 --- a/Build/source/texk/djgpp/cfggsfpk.pat +++ /dev/null @@ -1,19 +0,0 @@ -*** gsftopk/configure.orig Tue Mar 17 12:51:56 1998 ---- gsftopk/configure Tue Sep 15 15:47:08 1998 -*************** -*** 2266,2272 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 2266,2272 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/cfgkpath.pat b/Build/source/texk/djgpp/cfgkpath.pat deleted file mode 100644 index c86f1f95474..00000000000 --- a/Build/source/texk/djgpp/cfgkpath.pat +++ /dev/null @@ -1,30 +0,0 @@ -*** kpathsea/configure.orig Mon Mar 9 08:23:38 1998 ---- kpathsea/configure Tue Mar 17 11:38:20 1998 -*************** -*** 2045,2050 **** ---- 2045,2052 ---- - s%@LTLIBOBJS@%$LTLIBOBJS%g - s%@MAINT@%$MAINT%g - s%@texmfmain@%$texmfmain%g -+ /^ sed -f texmf.sed/c\\ -+ sed -e '/^[^%]/s/:/;/g' \\\$(srcdir)/texmf.in | sed -f texmf.sed >\\\$@ - - CEOF - EOF -*************** -*** 2178,2184 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 2180,2186 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/cfglachk.pat b/Build/source/texk/djgpp/cfglachk.pat deleted file mode 100644 index 8820034379c..00000000000 --- a/Build/source/texk/djgpp/cfglachk.pat +++ /dev/null @@ -1,19 +0,0 @@ -*** lacheck/configure.orig Tue Mar 17 12:51:58 1998 ---- lacheck/configure Mon Mar 23 18:07:46 1998 -*************** -*** 2564,2570 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 2564,2570 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/cfgmain.pat b/Build/source/texk/djgpp/cfgmain.pat deleted file mode 100644 index 2c05e06246e..00000000000 --- a/Build/source/texk/djgpp/cfgmain.pat +++ /dev/null @@ -1,29 +0,0 @@ -*** configure.orig Wed Mar 11 00:38:40 1998 ---- configure Tue Mar 17 11:38:18 1998 -*************** -*** 973,978 **** ---- 973,979 ---- - - fi - if test "${ac_cv_path_install+set}" = set; then -+ ac_cv_path_install=`echo.exe "$ac_cv_path_install"` - INSTALL="$ac_cv_path_install" - else - # As a last resort, use the slow shell script. We don't cache a -*************** -*** 1986,1992 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 1987,1993 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/cfgmkind.pat b/Build/source/texk/djgpp/cfgmkind.pat deleted file mode 100644 index 12d931d012f..00000000000 --- a/Build/source/texk/djgpp/cfgmkind.pat +++ /dev/null @@ -1,19 +0,0 @@ -*** makeindexk/configure.orig Tue Mar 17 12:52:06 1998 ---- makeindexk/configure Tue Sep 15 10:43:52 1998 -*************** -*** 2285,2291 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 2285,2291 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/cfgmusix.pat b/Build/source/texk/djgpp/cfgmusix.pat deleted file mode 100644 index a038f612f39..00000000000 --- a/Build/source/texk/djgpp/cfgmusix.pat +++ /dev/null @@ -1,19 +0,0 @@ -*** musixflx/configure.orig Tue Mar 17 12:52:08 1998 ---- musixflx/configure Wed Oct 21 09:42:44 1998 -*************** -*** 2273,2279 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 2273,2279 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/cfgpspkm.pat b/Build/source/texk/djgpp/cfgpspkm.pat deleted file mode 100644 index 7614f4bc046..00000000000 --- a/Build/source/texk/djgpp/cfgpspkm.pat +++ /dev/null @@ -1,19 +0,0 @@ -*** ps2pkm/configure.orig Tue Mar 17 12:52:14 1998 ---- ps2pkm/configure Tue Sep 15 15:59:48 1998 -*************** -*** 2476,2482 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 2476,2482 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/cfgseetx.pat b/Build/source/texk/djgpp/cfgseetx.pat deleted file mode 100644 index adb42fbb7ed..00000000000 --- a/Build/source/texk/djgpp/cfgseetx.pat +++ /dev/null @@ -1,19 +0,0 @@ -*** seetexk/configure.orig Tue Mar 17 12:52:16 1998 ---- seetexk/configure Thu Mar 26 14:37:20 1998 -*************** -*** 2305,2311 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 2305,2311 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/cfgtexht.pat b/Build/source/texk/djgpp/cfgtexht.pat deleted file mode 100644 index 570de8147a9..00000000000 --- a/Build/source/texk/djgpp/cfgtexht.pat +++ /dev/null @@ -1,19 +0,0 @@ -*** tex4htk/configure.orig Tue Mar 17 12:52:20 1998 ---- tex4htk/configure Wed Sep 16 19:06:00 1998 -*************** -*** 2210,2216 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 2210,2216 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/cfgweb2c.pat b/Build/source/texk/djgpp/cfgweb2c.pat deleted file mode 100644 index e74d341f91e..00000000000 --- a/Build/source/texk/djgpp/cfgweb2c.pat +++ /dev/null @@ -1,38 +0,0 @@ -*** web2c/configure.orig Mon Mar 9 08:23:40 1998 ---- web2c/configure Tue Mar 17 11:38:24 1998 -*************** -*** 4271,4276 **** ---- 4271,4286 ---- - s%@zlib@%$zlib%g - s%@pdftexlibsdep@%$pdftexlibsdep%g - s%@zlibinc@%$zlibinc%g -+ s,\.gft,.gf,g -+ /^ MAKEMPX_BINDIR/s,^ ,&PATH_SEPARATOR=: PATH_EXPAND=y ,g -+ /^ -PATH=/s,^ -,&PATH_SEPARATOR=: PATH_EXPAND=y ,g -+ /\\\$(LN).*initex/s,\\\$(LN),ln -s,g -+ /\\\$(LN).*iniomega/s,\\\$(LN),ln -s,g -+ /\\\$(LN).*inimf/s,\\\$(LN),ln -s,g -+ /\\\$(LN).*inimpost/s,\\\$(LN),ln -s,g -+ /\\\$\\\$base/s,\\\$(LN),ln -s,g -+ s,pooltype-check,poolt-check, -+ /TFMFONTS=/s,tests:,tests\\\;, - - CEOF - EOF -*************** -*** 4406,4412 **** - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") > $ac_file - fi; done - rm -f conftest.s* - ---- 4416,4422 ---- - s%@srcdir@%$srcdir%g - s%@top_srcdir@%$top_srcdir%g - s%@INSTALL@%$INSTALL%g -! " | (eval "$ac_sed_cmds") | sed -e '/^default_texsizes/s,:,;,' > $ac_file - fi; done - rm -f conftest.s* - diff --git a/Build/source/texk/djgpp/config.bat b/Build/source/texk/djgpp/config.bat deleted file mode 100755 index d016366692c..00000000000 --- a/Build/source/texk/djgpp/config.bat +++ /dev/null @@ -1,272 +0,0 @@ -@echo off -Rem -Rem The SmallEnv gorp is for those who have too small environment -Rem size which will cause the variables we set to be truncated -Rem but who cannot be bothered to read the Out Of Environment Space -Rem error messages spitted by the stock DOS shell -set XSRC=. -if not "%XSRC%" == "." goto SmallEnv -if "%1" == "" goto inplace -set XSRC=%1 -if not "%XSRC%" == "%1" goto SmallEnv -:inplace -if exist .\kpathsea\INSTALL ren .\kpathsea\INSTALL INSTALL.txt -if exist .\web2c\INSTALL ren .\web2c\INSTALL INSTALL.txt -if exist .\dvipsk\INSTALL ren .\dvipsk\INSTALL INSTALL.txt -if exist .\dviljk\INSTALL ren .\dviljk\INSTALL INSTALL.txt -if exist .\gsftopk\INSTALL ren .\gsftopk\INSTALL INSTALL.txt -if exist .\makeindexk\INSTALL ren .\makeindexk\INSTALL INSTALL.txt -if exist .\makeindexk\INSTALL ren .\makeindexk\INSTALL INSTALL.txt -if exist .\dvipdfm\INSTALL ren .\dvipdfm\INSTALL INSTALL.txt -test -d %XSRC% -if not errorlevel 1 goto chkdir -echo %XSRC% is not a directory -goto end -:chkdir -test -f %XSRC%/configure -if not errorlevel 1 goto argsok -echo I cannot find the configure script in directory %XSRC% -goto end -:argsok -rem set SYSROOT=c: -set PATH_SEPARATOR=: -if not "%PATH_SEPARATOR%" == ":" goto SmallEnv -set PATH_EXPAND=y -if not "%PATH_EXPAND%" == "y" goto SmallEnv -if not "%HOSTNAME%" == "" goto hostdone -if "%windir%" == "" goto msdos -set OS=MS-Windows -if not "%OS%" == "MS-Windows" goto SmallEnv -goto haveos -:msdos -set OS=MS-DOS -if not "%OS%" == "MS-DOS" goto SmallEnv -:haveos -if not "%USERNAME%" == "" goto haveuname -if not "%USER%" == "" goto haveuser -echo No USERNAME and no USER found in the environment, using default values -set HOSTNAME=Unknown PC -if not "%HOSTNAME%" == "Unknown PC" goto SmallEnv -:haveuser -set HOSTNAME=%USER%'s PC -if not "%HOSTNAME%" == "%USER%'s PC" goto SmallEnv -goto userdone -:haveuname -set HOSTNAME=%USERNAME%'s PC -if not "%HOSTNAME%" == "%USERNAME%'s PC" goto SmallEnv -:userdone -set HOSTNAME=%HOSTNAME%, %OS% -:hostdone -set OS= -echo Updating configure scripts for DJGPP... -test -f %XSRC%/configure.orig -if not errorlevel 1 goto orig1 -cp -p %XSRC%/configure configure.orig -goto patchmain -:orig1 -if not exist configure.orig cp -p %XSRC%/configure.orig configure.orig -:patchmain -patch -o configure configure.orig %XSRC%/djgpp/cfgmain.pat -if errorlevel 1 goto PatchError -test -d %XSRC%/kpathsea -if errorlevel 1 goto DviLJk -if not exist kpathsea\nul mkdir kpathsea -if exist kpathsea\configure.orig goto orig2 -test -f %XSRC%/kpathsea/configure.orig -if not errorlevel 1 cp -p %XSRC%/kpathsea/configure.orig kpathsea/configure.orig -if not exist kpathsea\configure.orig cp -p %XSRC%/kpathsea/configure kpathsea/configure.orig -:orig2 -patch -o kpathsea/configure kpathsea/configure.orig %XSRC%/djgpp/cfgkpath.pat -if errorlevel 1 goto PatchError -:DviLJk -test -d %XSRC%/dviljk -if errorlevel 1 goto DviPSk -if not exist dviljk\nul mkdir dviljk -if exist dviljk\configure.orig goto orig3 -test -f %XSRC%/dviljk/configure.orig -if not errorlevel 1 cp -p %XSRC%/dviljk/configure.orig dviljk/configure.orig -if not exist dviljk\configure.orig cp -p %XSRC%/dviljk/configure dviljk/configure.orig -:orig3 -patch -o dviljk/configure dviljk/configure.orig %XSRC%/djgpp/cfgdvilj.pat -if errorlevel 1 goto PatchError -:DviPSk -test -d %XSRC%/dvipsk -if errorlevel 1 goto DTL -if not exist dvipsk\nul mkdir dvipsk -if exist dvipsk\configure.orig goto orig4 -test -f %XSRC%/dvipsk/configure.orig -if not errorlevel 1 cp -p %XSRC%/dvipsk/configure.orig dvipsk/configure.orig -if not exist dvipsk\configure.orig cp -p %XSRC%/dvipsk/configure dvipsk/configure.orig -:orig4 -patch -o dvipsk/configure dvipsk/configure.orig %XSRC%/djgpp/cfgdvips.pat -if errorlevel 1 goto PatchError -:ODviPSk -test -d %XSRC%/odvipsk -if errorlevel 1 goto DTL -if not exist odvipsk\nul mkdir odvipsk -if exist odvipsk\configure.orig goto orig40 -test -f %XSRC%/odvipsk/configure.orig -if not errorlevel 1 cp -p %XSRC%/odvipsk/configure.orig odvipsk/configure.orig -if not exist odvipsk\configure.orig cp -p %XSRC%/odvipsk/configure odvipsk/configure.orig -:orig40 -patch -o odvipsk/configure odvipsk/configure.orig %XSRC%/djgpp/cfgdvips.pat -if errorlevel 1 goto PatchError -:DTL -test -d %XSRC%/dtl -if errorlevel 1 goto DviDvi -if not exist dtl\nul mkdir dtl -if exist dtl\configure.orig goto orig5 -test -f %XSRC%/dtl/configure.orig -if not errorlevel 1 cp -p %XSRC%/dtl/configure.orig dtl/configure.orig -if not exist dtl\configure.orig cp -p %XSRC%/dtl/configure dtl/configure.orig -:orig5 -patch -o dtl/configure dtl/configure.orig %XSRC%/djgpp/cfgdtl.pat -if errorlevel 1 goto PatchError -:DViDvi -test -d %XSRC%/dvidvi -if errorlevel 1 goto LaCheck -if not exist dvidvi\nul mkdir dvidvi -if exist dvidvi\configure.orig goto orig6 -test -f %XSRC%/dvidvi/configure.orig -if not errorlevel 1 cp -p %XSRC%/dvidvi/configure.orig dvidvi/configure.orig -if not exist dvidvi\configure.orig cp -p %XSRC%/dvidvi/configure dvidvi/configure.orig -:orig6 -patch -o dvidvi/configure dvidvi/configure.orig %XSRC%/djgpp/cfgdvidv.pat -if errorlevel 1 goto PatchError -:LaCheck -test -d %XSRC%/lacheck -if errorlevel 1 goto SeeTeXk -if not exist lacheck\nul mkdir lacheck -if exist lacheck\configure.orig goto orig7 -test -f %XSRC%/lacheck/configure.orig -if not errorlevel 1 cp -p %XSRC%/lacheck/configure.orig lacheck/configure.orig -if not exist lacheck\configure.orig cp -p %XSRC%/lacheck/configure lacheck/configure.orig -:orig7 -patch -o lacheck/configure lacheck/configure.orig %XSRC%/djgpp/cfglachk.pat -if errorlevel 1 goto PatchError -:SeeTeXk -test -d %XSRC%/seetexk -if errorlevel 1 goto MakeIndexk -if not exist seetexk\nul mkdir seetexk -if exist seetexk\configure.orig goto orig8 -test -f %XSRC%/seetexk/configure.orig -if not errorlevel 1 cp -p %XSRC%/seetexk/configure.orig seetexk/configure.orig -if not exist seetexk\configure.orig cp -p %XSRC%/seetexk/configure seetexk/configure.orig -:orig8 -patch -o seetexk/configure seetexk/configure.orig %XSRC%/djgpp/cfgseetx.pat -if errorlevel 1 goto PatchError -:MakeIndexk -test -d %XSRC%/makeindexk -if errorlevel 1 goto GsfToPk -if not exist makeindexk\nul mkdir makeindexk -if exist makeindexk\configure.orig goto orig9 -test -f %XSRC%/makeindexk/configure.orig -if not errorlevel 1 cp -p %XSRC%/makeindexk/configure.orig makeindexk/configure.orig -if not exist makeindexk\configure.orig cp -p %XSRC%/makeindexk/configure makeindexk/configure.orig -:orig9 -patch -o makeindexk/configure makeindexk/configure.orig %XSRC%/djgpp/cfgmkind.pat -if errorlevel 1 goto PatchError -:GsfToPk -test -d %XSRC%/gsftopk -if errorlevel 1 goto Ps2Pkm -if not exist gsftopk\nul mkdir gsftopk -if exist gsftopk\configure.orig goto orig10 -test -f %XSRC%/gsftopk/configure.orig -if not errorlevel 1 cp -p %XSRC%/gsftopk/configure.orig gsftopk/configure.orig -if not exist gsftopk\configure.orig cp -p %XSRC%/gsftopk/configure gsftopk/configure.orig -:orig10 -patch -o gsftopk/configure gsftopk/configure.orig %XSRC%/djgpp/cfggsfpk.pat -if errorlevel 1 goto PatchError -:Ps2Pkm -test -d %XSRC%/ps2pkm -if errorlevel 1 goto Tex4HTk -if not exist ps2pkm\nul mkdir ps2pkm -if exist ps2pkm\configure.orig goto orig11 -test -f %XSRC%/ps2pkm/configure.orig -if not errorlevel 1 cp -p %XSRC%/ps2pkm/configure.orig ps2pkm/configure.orig -if not exist ps2pkm\configure.orig cp -p %XSRC%/ps2pkm/configure ps2pkm/configure.orig -:orig11 -patch -o ps2pkm/configure ps2pkm/configure.orig %XSRC%/djgpp/cfgpspkm.pat -if errorlevel 1 goto PatchError -:Tex4HTk -test -d %XSRC%/tex4htk -if errorlevel 1 goto MusixFlx -if not exist tex4htk\nul mkdir tex4htk -if exist tex4htk\configure.orig goto orig12 -test -f %XSRC%/tex4htk/configure.orig -if not errorlevel 1 cp -p %XSRC%/tex4htk/configure.orig tex4htk/configure.orig -if not exist tex4htk\configure.orig cp -p %XSRC%/tex4htk/configure tex4htk/configure.orig -:orig12 -patch -o tex4htk/configure tex4htk/configure.orig %XSRC%/djgpp/cfgtexht.pat -if errorlevel 1 goto PatchError -:MusixFlx -test -d %XSRC%/musixflx -if errorlevel 1 goto DviPDFm -if not exist musixflx\nul mkdir musixflx -if exist musixflx\configure.orig goto orig13 -test -f %XSRC%/musixflx/configure.orig -if not errorlevel 1 cp -p %XSRC%/musixflx/configure.orig musixflx/configure.orig -if not exist musixflx\configure.orig cp -p %XSRC%/musixflx/configure musixflx/configure.orig -:orig13 -patch -o musixflx/configure musixflx/configure.orig %XSRC%/djgpp/cfgmusix.pat -if errorlevel 1 goto PatchError -:DviPDFm -test -d %XSRC%/dvipdfm -if errorlevel 1 goto Web2C -if not exist dvipdfm\nul mkdir dvipdfm -if exist dvipdfm\configure.orig goto orig14 -test -f %XSRC%/dvipdfm/configure.orig -if not errorlevel 1 cp -p %XSRC%/dvipdfm/configure.orig dvipdfm/configure.orig -if not exist dvipdfm\configure.orig cp -p %XSRC%/dvipdfm/configure dvipdfm/configure.orig -:orig14 -patch -o dvipdfm/configure dvipdfm/configure.orig %XSRC%/djgpp/cfgdvpdf.pat -if errorlevel 1 goto PatchError -:Web2C -test -d %XSRC%/web2c -if errorlevel 1 goto skipXDVI -if not exist web2c\nul mkdir web2c -if exist web2c\configure.orig goto orig100 -test -f %XSRC%/web2c/configure.orig -if not errorlevel 1 cp -p %XSRC%/web2c/configure.orig web2c/configure.orig -if not exist web2c\configure.orig cp -p %XSRC%/web2c/configure web2c/configure.orig -:orig100 -patch -o web2c/configure web2c/configure.orig %XSRC%/djgpp/cfgweb2c.pat -if errorlevel 1 goto PatchError -Rem -Rem XDvi is not supported on MS-DOS -GoTo skipXDVI -if not exist xdvik\nul mkdir xdvik -if not exist xdvik\configure.orig cp -p %XSRC%/xdvik/configure xdvik/configure.orig -patch -o xdvik/configure xdvik/configure.orig %XSRC%/djgpp/cfgxdvik.pat -if errorlevel 1 goto PatchError -:skipXDVI -set CONFIG_SHELL=bash.exe -set INSTALL=${DJDIR}/bin/ginstall -c -set YACC=bison -y -set LEX=flex -set RANLIB=ranlib -if not "%RANLIB%" == "ranlib" goto SmallEnv -Rem Use a response file to avoid exceeding the 126-character limit -echo --prefix=${DJDIR} --datadir=${DJDIR}/share --srcdir=%XSRC% > cfg.rf -echo --without-x --with-editor='emacs +%%d %%s' --with-epsfwin >> cfg.rf -echo Configuring... -sh ./configure i386-pc-msdos.djgppv2 @cfg.rf -echo Done. -goto CleanUp -:SmallEnv -echo Your environment size is too small. Please enlarge it and run me again. -set HOSTNAME= -set OS= -:CleanUp -set XSRC= -set CONFIG_SHELL= -set INSTALL= -set YACC= -set LEX= -set RANLIB= -set HOSTNAME= -if exist cfg.rf del cfg.rf -goto end -:PatchError -echo Failed to patch one or more configure scripts. Configure NOT done. -:end diff --git a/Build/source/texk/djgpp/pathconf.c b/Build/source/texk/djgpp/pathconf.c deleted file mode 100644 index 71483684e04..00000000000 --- a/Build/source/texk/djgpp/pathconf.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1997 DJ Delorie, see COPYING.DJ for details */ -/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ -#include -#include -#include -#include -#include -#include - -#define TOLOWER(c) (isascii(c) && isupper(c) ? tolower (c) : (c)) - -long -pathconf(const char *path, int name) -{ - switch (name) - { - case _PC_LINK_MAX: return LINK_MAX; - case _PC_MAX_CANON: return MAX_CANON; - case _PC_MAX_INPUT: return MAX_INPUT; - case _PC_NAME_MAX: case _PC_PATH_MAX: - { - int name_max, path_max; - int e = errno; - char *lfnenv = getenv ("LFN"); - - if (!lfnenv || TOLOWER (*lfnenv) != 'n') - { - errno = 0; - _get_volume_info (path, &name_max, &path_max, 0); - if (!errno) - { - errno = e; - return (name == _PC_NAME_MAX) ? name_max : path_max; - } - } - return (name == _PC_NAME_MAX) ? NAME_MAX : PATH_MAX; - } - case _PC_PIPE_BUF: return PIPE_BUF; - case _PC_CHOWN_RESTRICTED: return _POSIX_CHOWN_RESTRICTED; - case _PC_NO_TRUNC: return _POSIX_NO_TRUNC; - case _PC_VDISABLE: return _POSIX_VDISABLE; - - default: - errno = EINVAL; - return -1; - } -} diff --git a/Build/source/texk/djgpp/popen.c b/Build/source/texk/djgpp/popen.c deleted file mode 100644 index 67250d6ed7c..00000000000 --- a/Build/source/texk/djgpp/popen.c +++ /dev/null @@ -1,218 +0,0 @@ -/* Copyright (C) 1997 DJ Delorie, see COPYING.DJ for details */ -/* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */ -/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ -/* - This is popen() and pclose() for MSDOS. They were developed using - Microsoft C, but should port easily to DOS C any compiler. - - Original author: pacetti@fl-ngnet.army.mil - - These routines are hacks, that is they SIMULATE thier UNIX - counterparts. Since MSDOS and won't allow concurrent process spawning, - you can't really pipe. I came up with this nearly stupid way around - piping because I wanted to have some portability between UNIX and MSDOS. - I'm probably not the first person to have this idea or implement it, but - I think I'm the first to give it away for free (no points?!). - - The functions simulate popen() and pclose() by redirecting stdin or - stdout, then spawning a child processes via system(). - - If you popen() for read, the stdout is redirected to a temporary - file, and the child is spawned. The stdout is reopened via dup2(), the - temporary file is opened for read and a file pointer to it is returned. - - If you popen() for write, a temporary file is opened for write, and - a file pointer to it is returned. When you pclose(), the stdin is - redirected to the temporary file and the child is spawned. - - In both cases, pclose() closes and unlinks the temporary file. - - A static linked list of C structures is built to store necessary - info for all popen()ed files so you can popen() more than one file at - a time. - - The popen() function will return NULL on an error, or a valid FILE - *pointer on a successful open. The pclose() function will return - negative one (-1) on an error or zero (0) on a successful close. - - The function prototypes are: - - FILE *popen(command, mode) - char *command, char *mode; - - int pclose(pp) - FILE *pp; - - Where command is a character string equivilant to a MSDOS command - line, mode is "r" for read or "w" for write, and pp is a pointer to a - file opened through popen(). - - A main() function has been included for testing purposes, to compile - it define the preprocessor token TEST at compile time. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -/* hold file pointer, descriptor, command, mode, temporary file name, - and the status of the command */ -struct pipe_list { - FILE *fp; - int fd; - int exit_status; - char *command, mode[10], temp_name[L_tmpnam]; - struct pipe_list *next; -}; - -/* static, global list pointer */ -static struct pipe_list *pl = NULL; - -FILE * -popen (const char *cm, const char *md) /* program name, pipe mode */ -{ - struct pipe_list *l1, *l2; - - /* make new node */ - if ((l1 = (struct pipe_list *) malloc (sizeof (struct pipe_list))) == NULL) - return NULL; - - /* zero out elements to we'll get here */ - l1->fd = 0; - l1->fp = NULL; - l1->next = NULL; - - /* if empty list - just grab new node */ - if (!pl) - pl = l1; - else - { - /* otherwise, find last node in list */ - ++(l1->fd); - l2 = pl; - while (l2->next) - { - ++(l1->fd); - l2 = l2->next; - }; - /* add new node to list */ - l2->next = l1; - } - - /* stick in elements we know already */ - l1->exit_status = -1; - strcpy (l1->mode, md); - if (tmpnam (l1->temp_name) == NULL) - return NULL; - - /* if can save the program name, build temp file */ - if ((l1->command = malloc(strlen(cm)+1))) - { - strcpy(l1->command, cm); - /* if caller wants to read */ - if (l1->mode[0] == 'r') - { - /* dup stdout */ - if ((l1->fd = dup (fileno (stdout))) == EOF) - l1->fp = NULL; - else if (!(l1->fp = freopen (l1->temp_name, "wb", stdout))) - l1->fp = NULL; - else - /* exec cmd */ - if ((l1->exit_status = system (cm)) == EOF) - l1->fp = NULL; - /* reopen real stdout */ - if (dup2 (l1->fd, fileno (stdout)) == EOF) - l1->fp = NULL; - /* if cmd couldn't be run, make sure we return NULL */ - else if (l1->exit_status != EOF) - /* open file for reader */ - l1->fp = fopen (l1->temp_name, l1->mode); - close(l1->fd); - } - else - /* if caller wants to write */ - if (l1->mode[0] == 'w') - /* open temp file */ - l1->fp = fopen (l1->temp_name, l1->mode); - else - /* unknown mode */ - l1->fp = NULL; - } - return l1->fp; /* return == NULL ? ERROR : OK */ -} - -int -pclose (FILE *pp) -{ - struct pipe_list *l1, *l2; /* list pointers */ - int retval=0; /* function return value */ - - /* if pointer is first node */ - if (pl->fp == pp) - { - /* save node and take it out the list */ - l1 = pl; - pl = l1->next; - } - else - /* if more than one node in list */ - if (pl->next) - { - /* find right node */ - for (l2 = pl, l1 = pl->next; l1; l2 = l1, l1 = l2->next) - if (l1->fp == pp) - break; - - /* take node out of list */ - l2->next = l1->next; - } - else - return -1; - - /* if FILE not in list - return error */ - if (l1->fp == pp) - { - /* close the (hopefully) popen()ed file */ - fclose (l1->fp); - - /* if pipe was opened to write */ - if (l1->mode[0] == 'w') - { - /* dup stdin */ - if ((l1->fd = dup (fileno (stdin))) == EOF) - retval = -1; - else - /* open temp stdin */ - if (!(l1->fp = freopen (l1->temp_name, "rb", stdin))) - retval = -1; - else - /* exec cmd */ - if ((retval = system (l1->command)) != EOF) - { - /* reopen stdin */ - if (dup2 (l1->fd, fileno (stdin)) == EOF) - retval = -1; - } - close(l1->fd); - } - else - /* if pipe was opened to read, return the exit status we saved */ - if (l1->mode[0] == 'r') - retval = l1->exit_status; - else - /* invalid mode */ - retval = -1; - } - remove (l1->temp_name); /* remove temporary file */ - free (l1->command); /* dealloc memory */ - free (l1); /* dealloc memory */ - l1 = NULL; /* make pointer bogus */ - - return retval; /* retval==0 ? OK : ERROR */ -} diff --git a/Build/source/texk/djgpp/putenv.c b/Build/source/texk/djgpp/putenv.c deleted file mode 100644 index efc0241ff07..00000000000 --- a/Build/source/texk/djgpp/putenv.c +++ /dev/null @@ -1,143 +0,0 @@ -/* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */ -/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ -#include -#include -#include -#include -#include - -/* - - This routine assumes that the environ array and all strings it - points to were malloc'd. Nobody else should modify the environment - except crt1.c - -*/ - -extern char **environ; -static char **prev_environ = NULL; /* to know when it's safe to call `free' */ -static int ecount = -1; -static int emax = -1; -static int putenv_bss_count = -1; - - -/* This gets incremented every time some variable in the - environment is added, deleted, or changes its value. - It is meant to be used by functions that depend on values - of environment variables, but don't want to call `getenv' - unnecessarily (example: `__use_lfn'). - - Users should compare this variable with their static - variable whose value is initialized to zero; thus this - variable begins with 1 so first time users look they will - call `getenv'. */ -unsigned __environ_changed = 1; - -int -putenv(const char *val) -{ - int vlen = strlen(val); - char *epos = strchr(val, '='); - /* Feature: VAL without a `=' means delete the entry. GNU `putenv' - works that way, and `env' from GNU Sh-utils counts on this behavior. */ - int nlen = epos ? epos - val + 1 : vlen; - int eindex; - - /* Force recomputation of the static counters. - - The second condition of the next if clause covers the case that - somebody pointed environ to another array, which invalidates - `ecount' and `emax'. This can be used to change the environment - to something entirely different, or to effectively discard it - altogether. GNU `env' from Sh-utils does just that. */ - if (putenv_bss_count != __bss_count - || environ != prev_environ) - { - for (ecount=0; environ[ecount]; ecount++); - emax = ecount; - /* Bump the count to a value no function has yet seen, - even if they were dumped with us. */ - __environ_changed++; - if (putenv_bss_count != __bss_count) - { - putenv_bss_count = __bss_count; - prev_environ = environ; /* it's malloced by crt1.c */ - } - } - - for (eindex=0; environ[eindex]; eindex++) - if (strncmp(environ[eindex], val, nlen) == 0 - && (epos || environ[eindex][nlen] == '=')) - { - char *oval = environ[eindex]; - int olen = strlen(oval); - - if (val[nlen] == 0 && !epos) /* delete the entry */ - { - free(oval); - environ[eindex] = environ[ecount-1]; - environ[ecount-1] = 0; - ecount--; - __environ_changed++; - return 0; - } - - /* change existing entry */ - if (strcmp(environ[eindex]+nlen, val+nlen) == 0) - return 0; /* they're the same */ - - /* If new is the same length as old, reuse the same - storage. If new is shorter, call realloc to shrink the - allocated block: this causes less memory fragmentation. */ - if (vlen != olen) - { - if (vlen > olen) - environ[eindex] = (char *)malloc(vlen+1); - else /* vlen < olen */ - environ[eindex] = (char *)realloc(oval, vlen+1); - if (environ[eindex] == 0) - { - environ[eindex] = oval; - return -1; - } - if (vlen > olen) - free(oval); - } - strcpy(environ[eindex], val); - __environ_changed++; - return 0; - } - - /* delete nonexisting entry? */ - if (val[nlen] == 0 && !epos) - return 0; - - /* create new entry */ - if (ecount >= emax) - { - char **enew; - emax += 10; - enew = (char **)malloc((emax+1) * sizeof(char *)); - if (enew == 0) - return -1; - memcpy(enew, environ, ecount * sizeof(char *)); - /* If somebody set environ to another array, we can't - safely free it. Better leak memory than crash. */ - if (environ == prev_environ) - free(environ); - environ = enew; - prev_environ = environ; - } - - environ[ecount] = (char *)malloc(vlen+1); - if (environ[ecount] == 0) - return -1; - strcpy(environ[ecount], val); - - ecount++; - environ[ecount] = 0; - - __environ_changed++; - - return 0; -} diff --git a/Build/source/texk/djgpp/stat.c b/Build/source/texk/djgpp/stat.c deleted file mode 100644 index 69fe270b848..00000000000 --- a/Build/source/texk/djgpp/stat.c +++ /dev/null @@ -1,935 +0,0 @@ -/* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */ -/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ -/* This is file STAT.C */ -/* - * Almost a 100% U**X-compatible stat() substitute. - * - * Usage: - * - * That's easy: put this into libc.a, then just call stat() as usual. - * - * Rationale: - * - * Many Unix-born programs make heavy use of stat() library - * function to make decisions on files' equality, size, access - * attributes etc. In the MS-DOS environment, many implementations - * of stat() are crippled, because DOS makes it very hard to get to - * certain pieces of information about files and directories. Thus - * porting a program to DOS is usually an exercise in #ifdef'ing. - * This implementation facilitates porting Unix programs to MS-DOS - * by providing stat() which is much more Unix-compatible than those - * of most DOS-based C compilers (e.g., Borland's). - * Specifically, the following issues are taken care of: - * - * 1. This stat() doesn't fail for root directories, returning - * valid information. - * 2. Directory size is not reported zero; the number of used - * directory entries multiplied by entry size is returned instead. - * 3. Mode bits are set for all 3 groups (user, group, other). - * 4. Directories are NOT reported read-only, unless one of R, H or S - * attributes is set. - * 5. Directories have their execute bit set, as they do under Unix. - * 6. Device names (such as /dev/con, lpt1, aux etc.) are treated as - * if they were on a special drive called `@:' (st_dev = -1). - * The "character special" mode bit is set for these devices. - * 7. The inode number (st_ino) is taken from the starting cluster - * number of the file. If the cluster number is unavailable, it - * is invented using the file's name in a manner that minimizes - * the possibility of inventing an inode which already belongs - * to another file. See below for details. - * 8. Executable files are found based on files' extensions and - * magic numbers present at their beginning, and their execute - * bits are set. - * - * Lossage: - * - * Beautiful as the above sounds, this implementation does fail - * under certain circumstances. The following is a list of known - * problems: - * - * 1. The time fields for a root directory cannot be obtained, so - * they are set to the beginning of the Epoch. - * 2. For files which reside on networked drives, the inode number - * is invented, because network redirectors usually do not - * bring that info with them. This is not a total lossage, but - * it could get us a different inode for each program run. - * 3. Empty files do not have a starting cluster number, because - * DOS doesn't allocate one until you actually write something - * to a file. For these the inode is also invented. - * 4. If the st_ino field is a 16 bit number, the invented inode - * numbers are from 65535 and down, assuming that most disks have - * unused portions near their end. Valid cluster numbers are 16-bit - * unsigned integers, so a possibility of a clash exists, although - * the last 80 or more cluster numbers are unused on all drives - * I've seen. If the st_ino is 32 bit, then invented inodes are - * all greater than 64k, which totally eliminates a possibility - * of a clash with an actual cluster number. - * 5. The method of computing directory size is an approximation: - * a directory might consume much more space, if it has many - * deleted entries. Still, this is a close approximation, and - * it does follow the logic of reporting size for a regular file: - * only the actually used space is returned. - * 6. As this implementation relies heavily on undocumented DOS - * features, it will fail to get actual file info in environments - * other than native DOS, such as DR-DOS, OS/2 etc. For these, - * the function will return whatever info is available with - * conventional DOS calls, which is no less than any other - * implementation could do. This stat() might also fail for - * future DOS versions, if the layout of internal DOS data - * area is changed; however, this seems unlikely. - * - * Copyright (c) 1994-96 Eli Zaretskii - * - * This software may be used freely so long as this copyright notice is - * left intact. There is no warranty on this software. - * - */ - -/* - * Tested with DJGPP port of GNU C compiler, versions 1.11maint5 and 1.12, - * under MS-DOS 3.3, 4.01, 5.0, 6.20 (with and without DoubleSpace) and - * with networked drives under XFS 1.86, Novell Netware 3.22, and - * TSoft NFS 0.24Beta. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "xstat.h" - -int __getdisk(void); -int __findfirst(const char *, struct ffblk *, int); -int __findnext(struct ffblk *); - -#define ALL_FILES (FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_DIREC|FA_ARCH) - -#define _STAT_INODE 1 /* should we bother getting inode numbers? */ -#define _STAT_EXEC_EXT 2 /* get execute bits from file extension? */ -#define _STAT_EXEC_MAGIC 4 /* get execute bits from magic signature? */ -#define _STAT_DIRSIZE 8 /* compute directory size? */ -#define _STAT_ROOT_TIME 0x10 /* try to get root dir time stamp? */ -#define _STAT_WRITEBIT 0x20 /* fstat() needs write bit? */ - -/* Should we bother about executables at all? */ -#define _STAT_EXECBIT (_STAT_EXEC_EXT | _STAT_EXEC_MAGIC) - -/* The structure of the full directory entry. This is the 32-byte - record present for each file/subdirectory in a DOS directory. - Although the ``packed'' attribute seems to be unnecessary, I use - it to be sure it will still work for future versions of GCC. */ - -struct full_dirent { - char fname[8] __attribute__ ((packed)); - char fext[3] __attribute__ ((packed)); - unsigned char fattr __attribute__ ((packed)); - unsigned char freserved[10] __attribute__ ((packed)); - unsigned short ftime __attribute__ ((packed)); - unsigned short fdate __attribute__ ((packed)); - unsigned short fcluster __attribute__ ((packed)); - unsigned int fsize __attribute__ ((packed)); -}; - - -/* Static variables to speed up SDA DOS Swappable Data Area access on - subsequent calls. */ - -/* The count of number of SDA's we have. It is more than 1 for DOS - 4.x only. If it has a value of 0, the function init_dirent_table() - will be called to compute the addresses where we are to look for - directory entry of our file. A value of -1 means this method is - unsupported for this version of DOS. */ -static int dirent_count; - -/* The table of places to look for our directory entry. - Each entry in the table is a linear offset from the beginning of - conventional memory which points to a particular location within - one of the SDA's, where the entry of a file being stat()'ed could - appear. The offsets are computed once (when the routine is first - called) and then reused for other calls. The actual storage for - the table is malloc()'ed when this function is first called. */ -static unsigned int * dirent_table; - -/* When we have only one SDA, this is where its only place to look for - directory entry is stored. */ -static unsigned int dirent_place; - -/* This holds the fail bits from the last call to init_dirent_table(), - so we can return them every time get_inode_from_sda() is called. */ -static unsigned short init_dirent_table_bits; - -/* Holds the last seen value of __bss_count, to be safe for - restarted programs (emacs). */ -static int stat_count = -1; - -/* - * Parts of the following code is derived from file DOSSWAP.C, - * which came with ``Undocumented DOS'', 1st edition. - */ - -/* Compute table of pointers to look for directory entry of a file. */ -static int -init_dirent_table (void) -{ - short get_sda_func; - unsigned short dirent_offset; - unsigned short true_dos_version; - unsigned short dos_major, dos_minor; - __dpmi_regs regs; - - if (dirent_count == -1) /* we already tried and found we can't */ - return 0; - - /* Compute INT 21h function number and offset of directory entry - from start of SDA. These depend on the DOS version. - We need exact knowledge about DOS internals, so we need the - TRUE DOS version (not the simulated one by SETVER), if that's - available. */ - true_dos_version = _get_dos_version(1); - dos_major = true_dos_version >> 8; - dos_minor = true_dos_version & 0xff; - - if ((dos_major == 3) && (dos_minor >= 10)) - { - get_sda_func = 0x5d06; - dirent_offset = 0x1a7; - } - else if (dos_major == 4) - { - /* According to ``Undocumented DOS, 2nd edition'', I could have - used 5d06 here, as for DOS 5 and above, but I like to be - defensive. In fact, the above book itself uses 5d0b, contrary - to its own recommendation. */ - get_sda_func = 0x5d0b; - dirent_offset = 0x1b3; - } - else if (dos_major >= 5) - { - get_sda_func = 0x5d06; - dirent_offset = 0x1b3; - } - else - { - _djstat_fail_bits |= _STFAIL_OSVER; - dirent_count = -1; - return 0; - } - - _djstat_fail_bits &= ~_STFAIL_OSVER; /* version is OK */ - - /* Get the pointer to SDA by calling undocumented function 5dh of INT 21. */ - regs.x.ax = get_sda_func; - __dpmi_int(0x21, ®s); - if (regs.x.flags & 1) - { - _djstat_fail_bits |= _STFAIL_SDA; - dirent_count = -1; /* if the call failed, never try this later */ - return 0; - } - - _djstat_fail_bits &= ~_STFAIL_SDA; /* Get SDA succeeded */ - - /* DOS 4.x might have several SDA's, which means we might have more - than one place to look into. (It is typical of DOS 4 to complicate - things.) - Compute all the possible addresses where we will have to look. */ - if (dos_major == 4) - { - /* The pointer returned by INT 21h, AX=5D0b points to a header - which holds a number of SDA's and then an array of that number - of records each one of which includes address of an SDA (DWORD) - and its length and type (encoded in a WORD). - While walking this list of SDA's, we add to each pointer the - offset of directory entry and stash the resulting address in - our table for later use. */ - - int sda_list_walker = MK_FOFF(regs.x.ds, regs.x.si); - int i; - int *tbl; - - dirent_count = _farpeekw(_dos_ds, sda_list_walker); /* number of SDA's */ - - /* Allocate storage for table. */ - tbl = dirent_table = (int *)malloc(dirent_count*sizeof(int)); - if (!dirent_table) - { - /* If malloc() failed, maybe later it will succeed, so don't - store -1 in dirent_count. */ - dirent_count = 0; - _djstat_fail_bits |= _STFAIL_DCOUNT; - return 0; - } - - memset(dirent_table, 0, dirent_count*sizeof(int)); - _djstat_fail_bits &= ~_STFAIL_DCOUNT; /* dirent_count seems OK */ - - /* Walk the array of pointers, computing addresses of directory - entries and stashing them in our table. */ - _farsetsel(_dos_ds); - for (i = dirent_count, sda_list_walker += 2; i--; sda_list_walker += 6) - { - int sda_start = _farnspeekl(sda_list_walker); - unsigned short sda_len = _farnspeekw(sda_list_walker + 4) & 0x7fff; - - /* Let's be defensive here: if this SDA is too short to have - place for directory entry, we won't use it. */ - if (sda_len > dirent_offset) - *tbl++ = sda_start + dirent_offset; - else - dirent_count--; - } - } - - /* DOS 3.1 and 5.0 or later. We have only one SDA pointed to by - whatever INT 21h, AH=5d returns. */ - else - { - dirent_count = 1; - dirent_place = MK_FOFF(regs.x.ds, regs.x.si) + dirent_offset; - dirent_table = &dirent_place; - } - - return 1; -} - -/* Get inode number by searching DOS Swappable Data Area. - The entire directory entry for a file found by FindFirst/FindNext - appears at a certain (version-dependent) offset in the SDA after - one of those function is called. - Should be called immediately after calling DOS FindFirst function, - before the info is overwritten by somebody who calls it again. */ -static unsigned int -get_inode_from_sda(const char *basename) -{ - int count = dirent_count; - unsigned int * dirent_p = dirent_table; - unsigned short dos_mem_base = _dos_ds; - unsigned short our_mem_base = _my_ds(); - char * dot = strchr(basename, '.'); - size_t total_len = strlen(basename); - int name_len = dot ? dot - basename : total_len; - int ext_len = dot ? total_len - name_len - 1 : 0; - int cluster_offset = offsetof(struct full_dirent, fcluster); - - /* Restore failure bits set by last call to init_dirent_table(), so - they will be reported as if it were called now. */ - _djstat_fail_bits |= init_dirent_table_bits; - - /* Force reinitialization in restarted programs (emacs). */ - if (stat_count != __bss_count) - { - stat_count = __bss_count; - dirent_count = 0; - } - - /* Initialize the table of SDA entries where we are to look for - our file. */ - if (!dirent_count && !init_dirent_table()) - { - /* Don't save the truename failure bit. */ - init_dirent_table_bits = (_djstat_fail_bits & ~_STFAIL_TRUENAME); - return 0; - } - init_dirent_table_bits = (_djstat_fail_bits & ~_STFAIL_TRUENAME); - if (dirent_count == -1) - return 0; - - count = dirent_count; - dirent_p = dirent_table; - - _farsetsel(dos_mem_base); - - /* This is DOS 4.x lossage: this loop might execute many times. - For other DOS versions it is executed exactly once. */ - while (count--) - { - unsigned int src_address = *dirent_p & 0x000fffff; - char cmp_buf[sizeof(struct full_dirent)]; - - /* Copy the directory entry from the SDA to local storage. - The filename is stored there in infamous DOS format: name and - extension blank-padded to 8/3 characters, no dot between them. */ - movedata(dos_mem_base, src_address, our_mem_base, (unsigned int)cmp_buf, - sizeof(struct full_dirent)); - - /* If this is the filename we are looking for, return - its starting cluster. */ - if (!strncmp(cmp_buf, basename, name_len) && - (ext_len == 0 || !strncmp(cmp_buf + 8, dot + 1, ext_len))) - return (unsigned int)_farnspeekw(*dirent_p + cluster_offset); - - /* This is not our file. Search more, if more addresses left. */ - dirent_p++; - } - - /* If not found, give up. */ - _djstat_fail_bits |= _STFAIL_BADSDA; - return 0; -} - -int _ioctl_get_first_cluster(const char *); - -/* Get the number of the first cluster of PATHNAME using - the IOCTL call Int 21h/AX=440Dh/CX=0871h, if that call - is supported by the OS. Return the cluster number, or - a negative number if this service isn't supported. */ - -int -_ioctl_get_first_cluster(const char *pathname) -{ - __dpmi_regs r; - - /* See if the IOCTL GetFirstCluster call is supported. */ - r.x.ax = 0x4411; /* query generic IOCTL capability by drive */ - r.h.bl = pathname[0] & 0x1f; /* drive number (1=A:) */ - r.x.cx = 0x871; - __dpmi_int(0x21, &r); - if ((r.x.flags & 1) == 0 && r.x.ax == 0) - { - r.x.ax = 0x440d; /* Generic IOCTL */ - r.x.cx = 0x0871; /* category code 08h, minor code 71h */ - r.x.bx = 1; /* pathname uses current OEM character set */ - r.x.ds = __tb >> 4; - r.x.dx = __tb & 0x0f; - _put_path(pathname); - __dpmi_int(0x21, &r); - if ((r.x.flags & 1) == 0) - return ( ((int)r.x.dx << 16) + r.x.ax ); - } - return -1; -} - -static char blanks_8[] = " "; - -static int -stat_assist(const char *path, struct stat *statbuf) -{ - struct ffblk ff_blk; - char canon_path[MAX_TRUE_NAME]; - char pathname[MAX_TRUE_NAME]; - short drv_no; - unsigned dos_ftime; - - _djstat_fail_bits = 0; - - memset(statbuf, 0, sizeof(struct stat)); - memset(&dos_ftime, 0, sizeof(dos_ftime)); - - /* Fields which are constant under DOS. */ - statbuf->st_uid = getuid(); - statbuf->st_gid = getgid(); - statbuf->st_nlink = 1; -#ifndef NO_ST_BLKSIZE - statbuf->st_blksize = _go32_info_block.size_of_transfer_buffer; -#endif - - /* Make the path explicit. This makes the rest of our job much - easier by getting rid of some constructs which, if present, - confuse `_truename' and/or `findfirst'. In particular, it - deletes trailing slashes, makes "d:" explicit, and allows us - to make an illusion of having a ".." entry in root directories. */ - _fixpath (path, pathname); - - /* Get the drive number. It is always explicit, since we - called `_fixpath' on the original pathname. */ - drv_no = toupper(pathname[0]) - 'A'; - - /* Produce canonical pathname, with all the defaults resolved and - all redundant parts removed. This calls undocumented DOS - function 60h. */ - if (_truename(path, canon_path) || _truename(pathname, canon_path)) - { - /* Detect character device names which must be treated specially. - We could simply call FindFirst and test the 6th bit, but some - versions of DOS have trouble with this (see Ralph Brown's - Interrupt List, ``214E'', under `Bugs'). Instead we use - truename() which calls INT 21/AX=6000H. For character devices - it returns X:/DEVNAME, where ``X'' is the current drive letter - (note the FORWARD slash!). E.g., for CON or \dev\con it will - return C:/CON. - We will pretend that devices all reside on a special drive - called `@', which corresponds to st_dev = -1. This is because - these devices have no files, and we must invent inode numbers - for them; this scheme allows to lower a risk of clash between - invented inode and one which belongs to a real file. This is - also compatible with what our fstat() does. - */ - char_dev: - if (canon_path[2] == '/') - { - char dev_name[9]; /* devices are at most 8 characters long */ - - strncpy(dev_name, canon_path + 3, 8); /* the name without `X:/' */ - dev_name[8] = '\0'; - strcpy(canon_path, "@:\\dev\\"); - strcat(canon_path, dev_name); - strncat(canon_path, blanks_8, 8 - strlen(dev_name)); /* blank-pad */ - canon_path[15] = '\0'; /* ensure zero-termination */ - - /* Invent inode */ - statbuf->st_ino = _invent_inode(canon_path, 0, 0); - - /* Device code. */ - statbuf->st_dev = -1; -#ifdef HAVE_ST_RDEV - statbuf->st_rdev = -1; -#endif - - /* Set mode bits, including character special bit. - Should we treat printer devices as write-only? */ - statbuf->st_mode |= (S_IFCHR | READ_ACCESS | WRITE_ACCESS); - - /* We will arrange things so that devices have current time in - the access-time and modified-time fields of struct stat, and - zero (the beginning of times) in creation-time field. This - is consistent with what DOS FindFirst function returns for - character device names (if it succeeds--see above). */ - statbuf->st_atime = statbuf->st_mtime = time(0); - statbuf->st_ctime = _file_time_stamp(dos_ftime); - - return 0; - } - else if (canon_path[0] >= 'A' && canon_path[0] <= 'z' && - canon_path[1] == ':' && canon_path[2] == '\\') - { - /* _truename() returned a name with a drive letter. (This is - always so for local drives, but some network redirectors - also do this.) We will take this to be the TRUE drive - letter, because _truename() knows about SUBST and JOIN. - If the canonicalized path returns in the UNC form (which - means the drive is remote), it cannot be SUBSTed or JOINed, - because SUBST.EXE and JOIN.EXE won't let you do it; so, for - these cases, there is no problem in believing the drive - number we've got from the original path (or is there?). */ - drv_no = toupper(canon_path[0]) - 'A'; - } - } - else - { - /* _truename() failed. (This really shouldn't happen, but who knows?) - At least uppercase all letters, convert forward slashes to backward - ones, and pray... */ - register const char *src = pathname; - register char *dst = canon_path; - - while ( (*dst = (*src > 'a' && *src < 'z' - ? *src++ - ('a' - 'A') - : *src++)) != '\0') - { - if (*dst == '/') - *dst = '\\'; - dst++; - } - - _djstat_fail_bits |= _STFAIL_TRUENAME; - } - - /* Call DOS FindFirst function, which will bring us most of the info. */ - if (!__findfirst(pathname, &ff_blk, ALL_FILES)) - { - /* Time fields. */ - dos_ftime = - ( (unsigned short)ff_blk.ff_fdate << 16 ) + - (unsigned short)ff_blk.ff_ftime; - - /* If the IOCTL GetFirstCluster call is available, try it first. */ - if ( (_djstat_flags & _STAT_INODE) == 0 - && (statbuf->st_ino = _ioctl_get_first_cluster(pathname)) <= 0) - { - - /* For networked drives, don't believe the starting cluster - that the network redirector feeds us; always invent inode. - This is because network redirectors leave bogus values there, - and we don't have enough info to decide if the starting - cluster value is real or just a left-over from previous call. - For local files, try first using DOS SDA to get the inode from - the file's starting cluster number; if that fails, invent inode. - Note that the if clause below tests for non-zero value returned - by is_remote_drive(), which includes possible failure (-1). - This is because findfirst() already succeeded for our pathname, - and therefore the drive is a legal one; the only possibility that - is_remote_drive() fails is that some network redirector takes - over IOCTL functions in an incompatible way, which means the - drive is remote. QED. */ - if (statbuf->st_ino == 0 /* don't try SDA if IOCTL call succeeded */ - || _is_remote_drive(drv_no) - || (statbuf->st_ino = get_inode_from_sda(ff_blk.ff_name)) == 0) - { - _djstat_fail_bits |= _STFAIL_HASH; - statbuf->st_ino = - _invent_inode(canon_path, dos_ftime, ff_blk.ff_fsize); - } - else if (toupper (canon_path[0]) != toupper (pathname[0]) - && canon_path[1] == ':' - && canon_path[2] == '\\' - && canon_path[3] == '\0') - /* The starting cluster in SDA for the root of JOINed drive - actually belongs to the directory where that drive is - ``mounted''. This can potentially be the cluster of - another file on the JOINed drive. We cannot allow this. */ - statbuf->st_ino = 1; - } - - /* File size. */ - statbuf->st_size = ff_blk.ff_fsize; - - /* Mode bits. */ - statbuf->st_mode |= READ_ACCESS; - if ( !(ff_blk.ff_attrib & 0x07) ) /* no R, H or S bits set */ - statbuf->st_mode |= WRITE_ACCESS; - - /* Sometimes `_truename' doesn't return X:/FOO for character - devices. However, FindFirst returns attribute 40h for them. */ - if (ff_blk.ff_attrib == 0x40) - { - size_t cplen = strlen (canon_path); - char *pslash = canon_path + cplen - 1; - - while (pslash > canon_path + 2 && *pslash != '\\') - pslash--; - - /* Force it into X:/FOO form. */ - if (canon_path[1] == ':') - { - if (pslash > canon_path + 2) - memmove (canon_path + 2, pslash, - cplen - (pslash - canon_path) + 1); - canon_path[2] = '/'; - goto char_dev; - } - } - - /* Directories should have Execute bits set. */ - if (ff_blk.ff_attrib & 0x10) - statbuf->st_mode |= (S_IFDIR | EXEC_ACCESS); - - else - { - /* This is a regular file. */ - char *extension = strrchr(ff_blk.ff_name, '.'); - - /* Set regular file bit. */ - statbuf->st_mode |= S_IFREG; - - if ((_djstat_flags & _STAT_EXECBIT) != _STAT_EXECBIT) - { - /* Set execute bits based on file's extension and - first 2 bytes. */ - if (extension) - extension++; /* get past the dot */ - if (_is_executable(pathname, -1, extension)) - statbuf->st_mode |= EXEC_ACCESS; - } - } - } - else if ((_djstat_fail_bits & _STFAIL_TRUENAME)) - { - /* If both `findfirst' and `_truename' failed, this must - be a non-existent file or an illegal/inaccessible drive. */ - if (errno == ENMFILE) - errno = ENODEV; - return -1; - } - else if (pathname[3] == '\0') - { - /* Detect root directories. These are special because, unlike - subdirectories, FindFirst fails for them. We look at PATHNAME - because a network redirector could tweak what `_truename' - returns to be utterly unrecognizable as root directory. PATHNAME - always begins with "d:/", so it is root if PATHNAME[3] = 0. */ - - /* Mode bits. */ - statbuf->st_mode |= (S_IFDIR|READ_ACCESS|WRITE_ACCESS|EXEC_ACCESS); - - /* Root directory will have an inode = 1. Valid cluster numbers - for real files under DOS start with 2. */ - statbuf->st_ino = 1; - - /* Simulate zero size. This is what FindFirst returns for every - sub-directory. Later we might compute a better approximation - (see below). */ - ff_blk.ff_fsize = 0L; - - /* The time fields are left to be zero, unless the user wants us - to try harder. In the latter case, we check if the root has - a volume label entry, and use its time if it has. */ - - if ( (_djstat_flags & _STAT_ROOT_TIME) == 0 ) - { - char buf[7]; - - strcpy(buf, pathname); - strcat(buf, "*.*"); - if (!__findfirst(buf, &ff_blk, FA_LABEL)) - dos_ftime = ( (unsigned)ff_blk.ff_fdate << 16 ) + ff_blk.ff_ftime; - else - _djstat_fail_bits |= _STFAIL_LABEL; - } - } - else - { - int e = errno; /* errno value from original FindFirst on PATHNAME */ - int i = 0; - int j = strlen (pathname) - 1; - - /* Check for volume labels. We did not mix FA_LABEL with - other attributes in the call to `__findfirst' above, - because some environments will return bogus info in - that case. For instance, Win95 and WinNT seem to - ignore `pathname' and return the volume label even if it - doesn't fit the name in `pathname'. This fools us to - think that a non-existent file exists and is a volume - label. Hence we test the returned name to be PATHNAME. */ - if (!__findfirst(pathname, &ff_blk, FA_LABEL)) - { - i = strlen (ff_blk.ff_name) - 1; - - if (j >= i) - { - for ( ; i >= 0 && j >= 0; i--, j--) - if (toupper (ff_blk.ff_name[i]) != toupper (pathname[j])) - break; - } - } - - if (i < 0 && pathname[j] == '/') - { - /* Indeed a label. */ - statbuf->st_mode = READ_ACCESS; -#ifdef S_IFLABEL - statbuf->st_mode |= S_IFLABEL; -#endif - statbuf->st_ino = 1; - statbuf->st_size = 0; - dos_ftime = ( (unsigned)ff_blk.ff_fdate << 16 ) + ff_blk.ff_ftime; - } - else - { - /* FindFirst on volume labels might set errno to ENMFILE or even - to something more strange like EINVAl; correct that. */ - errno = e; /* restore errno from the original FindFirst */ - if (errno == ENMFILE) - errno = ENOENT; - return -1; - } - } - - /* Device code. */ - statbuf->st_dev = drv_no; -#ifdef HAVE_ST_RDEV - statbuf->st_rdev = drv_no; -#endif - - /* Time fields. */ - statbuf->st_atime = statbuf->st_mtime = statbuf->st_ctime = - _file_time_stamp(dos_ftime); - - if ( ! strcmp(ff_blk.lfn_magic,"LFN32") ) - { - unsigned xtime; - xtime = *(unsigned *)&ff_blk.lfn_ctime; - if(xtime) /* May be zero if file written w/o lfn active */ - statbuf->st_ctime = _file_time_stamp(xtime); - xtime = *(unsigned *)&ff_blk.lfn_atime; - if(xtime > dos_ftime) /* Accessed time is date only, no time */ - statbuf->st_atime = _file_time_stamp(xtime); - } - - if ( (statbuf->st_mode & S_IFMT) == S_IFDIR - && (_djstat_flags & _STAT_DIRSIZE) == 0 ) - { - /* Under DOS, directory entries for subdirectories have - zero size. Therefore, FindFirst brings us zero size - when called on a directory. (Some network redirectors - might do a better job, thus below we also test for zero size - actually being returned.) If we have zero-size directory, - we compute here the actual directory size by reading its - entries, then multiply their number by 32 (the size of a - directory entry under DOS). This might lose in the case - that many files were deleted from a once huge directory, - because AFAIK, directories don't return unused clusters to - the disk pool. Still, it is a good approximation of the - actual directory size. - - We also take this opportunity to return the number of links - for directories as Unix programs expect it to be: the number - of subdirectories, plus 2 (the directory itself and the ``.'' - entry). - - The (max) size of the root directory could also be taken from - the disk BIOS Parameter Block (BPB) which can be obtained - by calling IOCTL (INT 21/AH=44H), subfunction 0DH, minor - function 60H. But we will treat all directories the same, - even at performance cost, because it's more robust for - networked drives. */ - - size_t pathlen = strlen (pathname); - char lastc = pathname[pathlen - 1]; - char *search_spec = (char *)alloca (pathlen + 10); /* need only +5 */ - int nfiles = 0, nsubdirs = 0, done; - size_t extra = 0; - int add_extra = 0; - - strcpy(search_spec, pathname); - if (lastc == '/') - strcat(search_spec, "*.*"); - else - strcat(search_spec, "/*.*"); - - if (statbuf->st_size == 0 && _USE_LFN) - { - /* VFAT filesystems use additional directory entries to - store the long filenames. */ - char fstype[40]; - - if ((_get_volume_info(pathname,0,0,fstype) & _FILESYS_LFN_SUPPORTED) - && strncmp(fstype, "FAT", 4) == 0) - add_extra = 1; - } - - /* Count files and subdirectories. */ - for (done = __findfirst(search_spec, &ff_blk, ALL_FILES); - !done; - done = __findnext(&ff_blk)) - { - register char *fname = ff_blk.ff_name; - - /* Don't count "." and ".." entries. This will show empty - directories as size 0. */ - if (! (fname[0] == '.' - && (fname[1] == '\0' - || (fname[1] == '.' - && fname[2] == '\0')))) - { - char fn[13]; - - nfiles++; - if (ff_blk.ff_attrib & 0x10) - nsubdirs++; - /* For each 13 characters of the long filename, a - 32-byte directory entry is used. */ - if (add_extra && strcmp(_lfn_gen_short_fname(fname, fn), fname)) - extra += (strlen(fname) + 12) / 13; - } - } - - statbuf->st_nlink = nsubdirs + 2; - if (statbuf->st_size == 0) - statbuf->st_size = (nfiles + extra) * sizeof(struct full_dirent); - } - - return 0; -} - -/* Main entry point. This is library stat() function. - */ - -int -stat(const char *path, struct stat *statbuf) -{ - int e = errno; - int pathlen; - - if (!path || !statbuf) - { - errno = EFAULT; - return -1; - } - - if ((pathlen = strlen (path)) >= MAX_TRUE_NAME) - { - errno = ENAMETOOLONG; - return -1; - } - - /* Fail if PATH includes wildcard characters supported by FindFirst. */ - if (memchr(path, '*', pathlen) || memchr(path, '?', pathlen)) - { - errno = ENOENT; /* since no such filename is possible */ - return -1; - } - - if (stat_assist(path, statbuf) == -1) - { - return -1; /* errno set by stat_assist() */ - } - else - { - errno = e; - return 0; - } -} - -#ifdef TEST - -unsigned short _djstat_flags = 0; - -void -main(int argc, char *argv[]) -{ - struct stat stat_buf; - char *endp; - - if (argc < 2) - { - fprintf (stderr, "Usage: %s <_djstat_flags> \n", argv[0]); - exit(0); - } - - if (stat(*argv, &stat_buf) != 0) - perror ("stat failed on argv[0]"); - else - fprintf(stderr, "DOS %d.%d (%s)\n", _osmajor, _osminor, _os_flavor); - argc--; argv++; - - _djstat_flags = (unsigned short)strtoul(*argv, &endp, 0); - argc--; argv++; - - while (argc--) - { - if (!stat(*argv, &stat_buf)) - { - fprintf(stderr, "%s: %d %6u %o %d %d %ld %lu %s", *argv, - stat_buf.st_dev, - (unsigned)stat_buf.st_ino, - stat_buf.st_mode, - stat_buf.st_nlink, - stat_buf.st_uid, - (long)stat_buf.st_size, - (unsigned long)stat_buf.st_mtime, - ctime(&stat_buf.st_mtime)); - _djstat_describe_lossage(stderr); - } - else - { - fprintf(stderr, "%s: lossage", *argv); - perror(" "); - _djstat_describe_lossage(stderr); - } - - ++argv; - } - - exit (0); -} - -#endif - diff --git a/Build/source/texk/djgpp/xstat.h b/Build/source/texk/djgpp/xstat.h deleted file mode 100644 index 5e10bb8ca1f..00000000000 --- a/Build/source/texk/djgpp/xstat.h +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ -/* - * Header for internal stat()/fstat() assist functions. - * - */ - -#ifndef __XSTAT_H -#define __XSTAT_H - -#include -#include -#include -#include -#include - -/* Some errno.h headers do not define EFAULT. Here the value is - taken from POSIX IEEE 1003.1. */ -#include -#ifndef EFAULT -#define EFAULT 14 -#endif - -/* Under MS-DOS, file access permissions are shared by all, except for - Write permission. */ -#define READ_ACCESS (S_IRUSR | S_IRGRP | S_IROTH) -#define WRITE_ACCESS S_IWUSR -#define EXEC_ACCESS (S_IXUSR | S_IXGRP | S_IXOTH) - -/* Macro to convert a segment and an offset to a "far offset" suitable - for _farxxx() functions of DJGPP. */ -#ifndef MK_FOFF -#define MK_FOFF(s,o) ((int)((((unsigned long)(s)) << 4) + (unsigned short)(o))) -#endif - -#define MAX_TRUE_NAME FILENAME_MAX - -extern unsigned short _osmajor, _osminor; -extern const char * _os_flavor; - -/* Bits to flag f?stat() failed to use individual undocumented features. */ -#define _STFAIL_SDA 1 /* Get SDA call failed */ -#define _STFAIL_OSVER 2 /* Unsupported DOS version */ -#define _STFAIL_BADSDA 4 /* Bad pointer to SDA */ -#define _STFAIL_TRUENAME 8 /* _truename() failed */ -#define _STFAIL_HASH 0x10 /* inode defaults to hashing */ -#define _STFAIL_LABEL 0x20 /* Root dir, but no volume label */ -#define _STFAIL_DCOUNT 0x40 /* dirent_count ridiculously large */ -#define _STFAIL_WRITEBIT 0x80 /* fstat() failed to get write access bit */ -#define _STFAIL_DEVNO 0x100 /* fstat() failed to get device number */ -#define _STFAIL_BADSFT 0x200 /* SFT entry found, but can't be trusted */ -#define _STFAIL_SFTIDX 0x400 /* bad SFT index in JFT */ -#define _STFAIL_SFTNF 0x800 /* file entry not found in SFT array */ - -extern unsigned short _djstat_fail_bits; - -extern unsigned short _djstat_flags; - -extern time_t _file_time_stamp(unsigned int); -extern ino_t _invent_inode(const char *, unsigned, unsigned long); -extern unsigned short _get_magic(const char *, int); -extern unsigned short _get_dos_version(int); -extern char * _truename(const char *, char *); -extern int _is_remote_drive(int); -extern int _is_executable(const char *, int, const char *); -extern short _get_dev_info(int); -extern long __filelength(int); -extern int _is_remote_handle(int); -extern void _djstat_describe_lossage(FILE *); -extern int _getftime(int, unsigned int *); - -#endif /* __XSTAT_H */ diff --git a/Build/source/utils/epstopdf/Makefile b/Build/source/utils/epstopdf/Makefile deleted file mode 100644 index 152ae6ec1f7..00000000000 --- a/Build/source/utils/epstopdf/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -# $Id$ -# This file is public domain. (Originally written by Karl Berry, 2009.) - -e2p = ./epstopdf.pl #--debug - -default: check - -# These are not comprehensive tests by any means. Mostly we're just -# making sure we don't crash. -check: check-help check-version \ - check-write-error check-gscmd \ - check-simple check-atend check-binary check-bin2 \ - check-binhdr-lf check-binhdr-cr check-binhdr-crlf \ - -check-help: - $(e2p) --help - -check-version: - $(e2p) --version - -check-write-error: - -$(e2p) test-simple.eps --outfile=/dev/full - -check-gscmd: - -$(e2p) --gscmd=true test-simple.eps - -check-simple: - $(MAKE) file=test-simple check1 - -check-atend: - $(MAKE) file=test-atend check1 - -check-binary: - $(MAKE) file=test-binary check1 - -check-bin2: - $(MAKE) file=test-bin2 check1 - -check-binhdr-lf: - $(MAKE) file=test-binhdr-lf check1 - -check-binhdr-cr: - $(MAKE) file=test-binhdr-cr check1 - -check-binhdr-crlf: - $(MAKE) file=test-binhdr-crlf check1 - -check1: - $(e2p) $(file).eps - pdfinfo $(file).pdf | grep "Page size" - -dist: epstopdf.tar.gz epstopdf.html -epstopdf.tar.gz: README epstopdf.pl epstopdf.1 epstopdf.pdf - tar chzf epstopdf.tar.gz $^ - -groff = groff -groff_opts = -man -t -pdfopts = $(groff_opts) -htmlopts = $(groff_opts) -Thtml -pspdf = ps2pdf -sPAPERSIZE=a4 -epstopdf.pdf: epstopdf.1 - $(groff) $(pdfopts) $< | $(pspdf) - $@ -epstopdf.html: epstopdf.1 - $(groff) $(htmlopts) $< >$@ diff --git a/Build/source/utils/epstopdf/README b/Build/source/utils/epstopdf/README deleted file mode 100644 index 9d96f254c0a..00000000000 --- a/Build/source/utils/epstopdf/README +++ /dev/null @@ -1,26 +0,0 @@ -$Id$ -This file is public domain. (Originally written by Karl Berry, 2009.) - -This is the README for the epstopdf script distribution. - -Primary distribution point: http://mirror.ctan.org/support/epstopdf/ - (list of mirrors at: http://ctan.org/mirrors) - -Home page: http://tug.org/epstopdf/ - -Mailing list for bugs and discussion: http://lists.tug.org/tex-k -When reporting bugs, please include an input file and command line -options so the problem can be reproduced. - -------------------------------------------------------------------------- -The test-binary and test-bin2 files were supplied by Akira Kakuto and -Reinhard Kotucha. They contain binary data. They are public domain. - -The test-binhdr* files were supplied by Martin von Gagern, constructed -as follows. They contain binary junk before the EPS starts. We also -use these to test different line endings. These files are public domain. - -{ echo -e '%Some\000binary\001comment'; dot -Tps <<< 'digraph{a->b}'; } - > test-binhdr-lf.eps -tr $'\n' $'\r' test-binhdr-cr.ps -unix2dos test-binhdr-cr.ps diff --git a/Build/source/utils/epstopdf/epstopdf.1 b/Build/source/utils/epstopdf/epstopdf.1 deleted file mode 100644 index 121ecd34427..00000000000 --- a/Build/source/utils/epstopdf/epstopdf.1 +++ /dev/null @@ -1,78 +0,0 @@ -.TH EPSTOPDF 1 "27 September 2009" -.\" $Id$ -.\" man page originally by Jim Van Zandt -.SH NAME -epstopdf \- convert an EPS file to PDF -.SH SYNOPSIS -\fBepstopdf\fP [\fIoptions\fP] [\fIepsfile\fP] -.SH DESCRIPTION -\fBepstopdf\fP transforms the Encapsulated PostScript file \fIepsfile\fP -(or standard input) so that it is guaranteed to start at the 0,0 -coordinate, and it sets a page size exactly corresponding to the -BoundingBox. This means that when Ghostscript renders it, the result -needs no cropping, and the PDF MediaBox is correct. By default, the -result is piped to Ghostscript and a PDF version written. -.P -If the bounding box is not right, of course, there are problems. -.SH OPTIONS -.IP "\fB--outfile\fP=\fIfile\fP" -write result to \fIfile\fP; the default is to construct the output file -name by replacing any extension in the input file with \fI.pdf\fP. If -\fB--nogs\fP or \fB--filter\fP is specified, write to standard output. -.IP "\fB--\fP[\fBno\fP]\fBcompress\fP" -use compression (default: on). -.IP "\fB--\fP[\fBno\fP]\fBdebug\fP" -write debugging info (default: off). -.IP "\fB--\fP[\fBno\fP]\fBembed\fP" -embed fonts (default: on). -.IP "\fB--\fP[\fBno\fP]\fBexact\fP" -scan ExactBoundingBox (default: off). -.IP "\fB--\fP[\fBno\fP]\fBfilter\fP" -read standard input (default: off). -.IP "\fB--\fP[\fBno\fP]\fBgs\fP" -run ghostscript (default: on). -.IP "\fB--\fP[\fBno\fP]\fBhires\fP" -scan HiresBoundingBox (default: off). -.IP "\fB--gscmd\fP=\fIval\fP" -pipe output to \fIval\fP (default: [\fBgswin32c\fP on Windows, else \fBgs\fP]) -.IP "\fB--res\fP=\fIdpi\fP" -set image resolution (default: [use gs default]) -.IP "\fB--autorotate\fP=\fIval\fP" -set AutoRotatePages (default: None); recognized \fIval\fP choices: -None, All, PageByPage. For EPS files, PageByPage is equivalent to All. -.IP "\fB--help\fP -display help message and exit -.IP "\fB--version\fP -display version information and exit -.SH EXAMPLES -Examples for producing "test.pdf": -.nf -epstopdf test.eps -produce postscript | epstopdf --filter >test.pdf -produce postscript | epstopdf -f -d -o=test.pdf - -.fi -Example: look for HiresBoundingBox and produce corrected PostScript: -.nf -epstopdf -d --nogs --hires test.ps >testcorr.ps -.fi -.SH BUGS -The case of "%%BoundingBox: (atend)" -when input is not seekable (e.g., from a pipe) is not supported. -.PP -When reporting bugs, please include an input file and command line -options so the problem can be reproduced. Report bugs in -the program or this man page to tex-k@tug.org. -.SH SEE ALSO -\fBgs\fP(1), -\fBpdfcrop\fP(1). -.SH AUTHOR -The script was originally written by Sebastian Rahtz, for Elsevier -Science, with subsequent contributions from Gerben Wierda and many -others. Currently maintained by Karl Berry. -.PP -Man page originally written by Jim Van Zandt. -.PP -epstopdf home page: http://tug.org/epstopdf/ -.PP -You may freely use, modify and/or distribute this file. diff --git a/Build/source/utils/epstopdf/epstopdf.pl b/Build/source/utils/epstopdf/epstopdf.pl deleted file mode 100755 index b850ae3b239..00000000000 --- a/Build/source/utils/epstopdf/epstopdf.pl +++ /dev/null @@ -1,582 +0,0 @@ -eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q' - if 0; -use strict; - -# $Id$ -# (Copyright lines below.) -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. 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. -# 3. The name of the author may not be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# -# ---------------------------------------------------------------- -# -# This is a script to transform an EPS file such that: -# a) it is guaranteed to start at the 0,0 coordinate. -# b) it sets a page size exactly corresponding to the BoundingBox -# This means that when Ghostscript renders it, the result needs no -# cropping, and the PDF MediaBox is correct. -# c) the result is piped to Ghostscript and a PDF version written. -# -# It needs a Level 2 PS interpreter. -# If the bounding box is not right, of course, there will be problems. -# -# One thing not allowed for is the case of -# "%%BoundingBox: (atend)" when input is not seekable (e.g., from a pipe), -# which is more complicated. -# -# emacs-page -# History -# 2009/10/18 v2.13 (Manuel P\'egouri\'e-Gonnard) -# * Better argument validation, from Alexander Cherepanov. -# * Use the list form of pipe open() (resp. system()) to prevent injection. -# Since Perl's fork() emulation doesn't work on Windows with Perl 5.8.8 from -# TeX Live 2009, use a temporary file instead of a pipe on Windows. -# 2009/10/14 v2.12 (Manuel P\'egouri\'e-Gonnard) -# * Added restricted mode. -# 2009/09/27 v2.11 (Karl Berry) -# * Fixed two bugs in the (atend) handling code (Martin von Gagern) -# * Improved handling of CR line ending (Martin von Gagern) -# * More error checking -# * --version option -# * Create source repository in TeX Live -# 2009/07/17 v2.9.11gw -# * Added -dSAFER to default gs options -# TL2009 wants to use a restricted variant of -shell-escape, -# allowing epstopdf to run. However without -dSAFER Ghostscript -# allows writing to files (other than given in -sOutputFile) -# and running commands (through Ghostscript pipe's language feature). -# 2009/05/09 v2.9.10gw -# * Changed cygwin name for ghostscript to gs -# 2008/08/26 v2.9.9gw -# * Switch to embed fonts (default=yes) (J.P. Chretien) -# * turned no AutoRotatePages into an option (D. Kreil) (default = None) -# * Added resolution switch (D. Kreil) -# * Added BSD-style license -# 2007/07/18 v2.9.8gw -# 2007/05/18 v.2.9.7gw (Gerben Wierda) -# * Merged both supplied 2.9.6 versions -# 2007/05/15 v2.9.6tp (Theo Papadopoulo) -# * Simplified the (atend) support -# 2007/01/24 v2.9.6sw (Staszek Wawrykiewicz) -# * patched to work also on Windows -# 2005/10/06 v2.9.5gw (Gerben Wierda) -# * Fixed a horrendous bug in the (atend) handling code -# 2005/10/06 v2.9.4gw (Gerben Wierda) -# * This has become the official version for now -# 2005/10/01 v2.9.3draft (Gerben Wierda) -# * Quote OutFilename -# 2005/09/29 v2.9.2draft (Gerben Wierda) -# * Quote OutFilename -# 2004/03/17 v2.9.1draft (Gerben Wierda) -# * No autorotate page -# 2003/04/22 v2.9draft (Gerben Wierda) -# * Fixed bug where with cr-eol files everything up to the first %! -# * in the first 2048 bytes was gobbled (double ugh!) -# 2002/02/21 v2.8draft (Gerben Wierda) -# * Fixed bug where last line of buffer was not copied out (ugh!) -# 2002/02/18 v2.8draft (Gerben Wierda) -# * Handle different eol styles transparantly -# * Applied fix from Peder Axensten for Freehand bug -# 2001/03/05 v2.7 (Heiko Oberdiek) -# * Newline before grestore for the case that there is no -# whitespace at the end of the eps file. -# 2000/11/05 v2.6 (Heiko Oberdiek) -# * %%HiresBoundingBox corrected to %%HiResBoundingBox -# 1999/05/06 v2.5 (Heiko Oberdiek) -# * New options: --hires, --exact, --filter, --help. -# * Many cosmetics: title, usage, ... -# * New code for debug, warning, error -# * Detecting of cygwin perl -# * Scanning for %%{Hires,Exact,}BoundingBox. -# * Scanning only the header in order not to get a wrong -# BoundingBox of an included file. -# * (atend) supported. -# * uses strict; (earlier error detecting). -# * changed first comment from '%!PS' to '%!'; -# * corrected (atend) pattern: '\s*\(atend\)' -# * using of $bbxpat in all BoundingBox cases, -# correct the first white space to '...Box:\s*$bb...' -# * corrected first line (one line instead of two before 'if 0;'; -# -# Thomas Esser, Sept. 1998: change initial lines to find -# perl along $PATH rather than guessing a fixed location. The above -# construction should work with most shells. -# -# Originally by Sebastian Rahtz, for Elsevier Science -# with extra tricks from Hans Hagen's texutil and many more. -# emacs-page - -### program identification -my $program = "epstopdf"; -my $ident = '($Id$) 2.11'; -my $copyright = < -This is free software: you are free to change and redistribute it. -There is NO WARRANTY, to the extent permitted by law. -END_COPYRIGHT -my $title = "$program $ident\n"; - -### ghostscript command name -my $GS = "gs"; -$GS = "gswin32c" if $^O eq 'MSWin32'; - -### restricted mode -my $restricted = 0; -$restricted = 1 if $0 =~ /repstopdf/; - -### options -$::opt_outfile=""; -$::opt_compress=1; -$::opt_debug=0; -$::opt_embed=1; -$::opt_exact=0; -$::opt_filter=0; -$::opt_gs=1; -$::opt_hires=0; -$::opt_gscmd=""; -$::opt_res=0; -$::opt_autorotate="None"; - -### usage -my @bool = ("false", "true"); -my $resmsg = $::opt_res ? $::opt_res : "[use gs default]"; -my $rotmsg = $::opt_autorotate ? $::opt_autorotate : "[use gs default]"; -my $usage = <<"END_OF_USAGE"; -${title}Usage: $program [OPTION]... [EPSFILE] - -Convert EPS to PDF, by default using Ghostscript. - -Options: - --help display this help and exit - --version display version information and exit - - --outfile=FILE write result to FILE - --(no)compress use compression (default: $bool[$::opt_compress]) - --(no)debug write debugging info (default: $bool[$::opt_debug]) - --(no)embed embed fonts (default: $bool[$::opt_embed]) - --(no)exact scan ExactBoundingBox (default: $bool[$::opt_exact]) - --(no)filter read standard input (default: $bool[$::opt_filter]) - --(no)gs run ghostscript (default: $bool[$::opt_gs]) - --(no)hires scan HiResBoundingBox (default: $bool[$::opt_hires]) - --gscmd=VAL pipe output to VAL (default: $GS) - --res=DPI set image resolution (default: $resmsg) - --autorotate=VAL set AutoRotatePages (default: $rotmsg) - Recognized VAL choices: None, All, PageByPage - For EPS files, PageByPage is equivalent to All - --restricted use restricted mode (default: $bool[$restricted]) - -Examples for producing 'test.pdf': - * $program test.eps - * produce postscript | $program --filter >test.pdf - * produce postscript | $program -f -d -o=test.pdf - -Example: look for HiResBoundingBox and produce corrected PostScript: - * $program -d --nogs --hires test.ps >testcorr.ps - -When reporting bugs, please include an input file and command line -options so the problem can be reproduced. - -Report bugs to: tex-k\@tug.org -epstopdf home page: -END_OF_USAGE - -### process options -use Getopt::Long; -GetOptions ( - "help", - "version", - "outfile=s", # \ref{openout_any} - "compress!", - "debug!", - "embed!", - "exact!", - "filter!", - "gs!", - "hires!", - "gscmd=s", # \ref{val_gscmd} - "res=i", # validated by Getopt ('i' specifier) - "autorotate=s", # \ref{val_autorotate} - "restricted", -) or die $usage; - -### help functions -sub debug { - print STDERR "* @_\n" if $::opt_debug; -} -sub warning { - print STDERR "==> Warning: @_\n"; -} -sub error { - die "$title!!! Error: @_\n"; -} -sub errorUsage { - die "$usage\n!!! Error: @_\n"; -} - -### restricted option -$restricted = 1 if $::opt_restricted; -debug "Restricted mode activated" if $restricted; - -### help, version options. -if ($::opt_help) { - print $usage; - exit (0); -} - -if ($::opt_version) { - print $title; - print $copyright; - exit (0); -} - -### get input filename -my $InputFilename = ""; -if ($::opt_filter) { - @ARGV == 0 or - die errorUsage "Input file cannot be used with filter option"; - $InputFilename = "-"; - debug "Input file: standard input"; -} -else { - @ARGV > 0 or die errorUsage "Input filename missing"; - @ARGV < 2 or die errorUsage "Unknown option or too many input files"; - $InputFilename = $ARGV[0]; - #-r $InputFilename or error "\"$InputFilename\" not readable"; - debug "Input filename:", $InputFilename; -} - -### option gscmd -if ($::opt_gscmd) { - debug "Switching from $GS to $::opt_gscmd"; - $GS = $::opt_gscmd; - # validate GS \label{val_gscmd} - if ($restricted) { - $GS =~ /^(gs|mgs|gswin32c|gs386|gsos2)\z/ - or $GS =~ /^gs[\-_]?(\d|\d[\.-_]?\d\d)c?\z/ - or die error "Value of gscmd '$GS' not allowed in restricted mode."; - } -} - -### start building GS command line for the pipe -my @GS = ($GS); -push @GS, qw(-q -dNOPAUSE -dSAFER -sDEVICE=pdfwrite); - -### options compress, embed, res, autorotate -push @GS, ('-dPDFSETTINGS=/prepress', '-dMaxSubsetPct=100', - '-dSubsetFonts=true', '-dEmbedAllFonts=true') if $::opt_embed; -push @GS, '-dUseFlateCompression=false' unless $::opt_compress; -push @GS, "-r$::opt_res" if $::opt_res; -$resmsg= $::opt_res ? $::opt_res : "[use gs default]"; -push @GS, "-dAutoRotatePages=/$::opt_autorotate" if $::opt_autorotate; -$rotmsg = $::opt_autorotate ? $::opt_autorotate : "[use gs default]"; -# \label{val_autorotate} -error "Invalid value for autorotate: '$::opt_autorotate' " - . "(use 'All', 'None' or 'PageByPage')." - if ($::opt_autorotate and - not $::opt_autorotate =~ /^(None|All|PageByPage)\z/); - -### option BoundingBox types -my $BBName = "%%BoundingBox:"; -!($::opt_hires and $::opt_exact) or - error "Options --hires and --exact cannot be used together"; -$BBName = "%%HiResBoundingBox:" if $::opt_hires; -$BBName = "%%ExactBoundingBox:" if $::opt_exact; -debug "BoundingBox comment:", $BBName; - -### option outfile -my $OutputFilename = $::opt_outfile; -if ($OutputFilename eq "") { - if ($::opt_gs) { - $OutputFilename = $InputFilename; - if (!$::opt_filter) { - $OutputFilename =~ s/\.[^\.]*$//; - $OutputFilename .= ".pdf"; - } - } - else { - $OutputFilename = "-"; # standard output - } -} -if ($::opt_filter) { - debug "Output file: standard output"; -} -else { - debug "Output filename:", $OutputFilename; -} -push @GS, "-sOutputFile=$OutputFilename"; - -### validate output file name in restricted mode \label{openout_any} -use File::Spec::Functions qw(splitpath file_name_is_absolute); -if ($restricted) { - # use the equivalent of openout_any = p - # (see opennameok() web2c/lib/texmfmp.c) - # Well, for now, be even more paranoid: don't allow absolute path at all - my $ok = 1; - # disallow opening dot-files on Unix - unless ($^O eq "MSWin32") { - my ($drive, $path, $basename) = splitpath($OutputFilename); - $ok = 0 if $basename =~ /^\./; - } - # disallow absolute path - $ok = 0 if file_name_is_absolute($OutputFilename); - # disallow colon on Windows. It could be used either after a drive - # (like "a:dir\file") or for an alternate data stream (like - # "file:ads"). - if ($^O eq "MSWin32" || $^O eq "cygwin") { - $ok = 0 if $OutputFilename =~ /:/; - } - # disallow going to parent directory - my $ds = ($^O eq "MSWin32" || $^O eq "cygwin") ? qr([\\/]) : qr(/); - $ok = 0 if $OutputFilename =~ /^\.\.$ds|$ds\.\.$ds/; - # we passed all tests - die error "Output filename '$OutputFilename' not allowed in restricted mode." unless $ok; -} - -### option gs -if ($::opt_gs) { - debug "Ghostscript command:", $GS; - debug "Compression:", ($::opt_compress) ? "on" : "off"; - debug "Embedding:", ($::opt_embed) ? "on" : "off"; - debug "Rotation:", $rotmsg; - debug "Resolution:", $resmsg; -} - -### emacs-page -### open input file -open(IN, '<', $InputFilename) or error "Cannot open", - ($::opt_filter) ? "standard input" : "\"$InputFilename\": $!"; -binmode IN; - -### open output file -my $outname; # used in error message at end -my $tmp_filename; # temporary file for windows -my $OUT; # filehandle for output (GS pipe or temporary file) -use File::Temp 'tempfile'; -if ($::opt_gs) { - unless ($^O eq 'MSWin32' || $^O eq 'cygwin') { # list piped open works - push @GS, qw(- -c -quit); - debug "Ghostscript pipe:", join(' ', @GS); - open($OUT, '|-', @GS) or error "Cannot open Ghostscript for piped input"; - } - else { # use a temporary file - ($OUT, $tmp_filename) = tempfile(UNLINK => 1); - debug "Using temporary file '$tmp_filename'"; - } - $outname = $GS; -} -else { - open($OUT, '>', $OutputFilename) or error "Cannot write \"$OutputFilename\""; - $outname = $OutputFilename; -} -binmode $OUT; - -# reading a cr-eol file on a lf-eol system makes it impossible to parse -# the header and besides it will read the intire file into yor line by line -# scalar. this is also true the other way around. - -### emacs-page -### scan a block, try to determine eol style - -my $buf; -my $buflen; -my @bufarray; -my $inputpos; - -# We assume 2048 is big enough. -my $EOLSCANBUFSIZE = 2048; - -$buflen = read(IN, $buf, $EOLSCANBUFSIZE); -if ($buflen > 0) { - my $crlfpos; - my $lfpos; - my $crpos; - - $inputpos = 0; - - # remove binary junk before header - # if there is no header, we assume the file starts with ascii style and - # we look for a eol style anyway, to prevent possible loading of the - # entire file - if ($buf =~ /%!/) { - # throw away binary junk before %! - $buf =~ s/(.*?)%!/%!/o; - $inputpos = length($1); - } - $lfpos = index($buf, "\n"); - $crpos = index($buf, "\r"); - $crlfpos = index($buf, "\r\n"); - - if ($crpos > 0 and ($lfpos == -1 or $lfpos > $crpos+1)) { - # The first eol was a cr and it was not immediately followed by a lf - $/ = "\r"; - debug "The first eol character was a CR ($crpos) and not immediately followed by a LF ($lfpos)"; - } - - # Now we have set the correct eol-character. Get one more line and add - # it to our buffer. This will make the buffer contain an entire line - # at the end. Then split the buffer in an array. We will draw lines from - # that array until it is empty, then move again back to - $buf .= unless eof(IN); - $buflen = length($buf); - - # Some extra magic is needed here: if we set $/ to \r, Perl's re engine - # still thinks eol is \n in regular expressions (not very nice) so we - # cannot split on ^, but have to split on a look-behind for \r. - if ($/ eq "\r") { - @bufarray = split(/(?<=\r)/ms, $buf); # split after \r - } - else { - @bufarray = split(/^/ms, $buf); - } -} - -### getline -sub getline -{ - if ($#bufarray >= 0) { - $_ = shift(@bufarray); - } - else { - $_ = ; - } - $inputpos += length($_) if defined $_; - return defined($_); -} - -### scan first line -my $header = 0; -getline(); -if (/%!/) { - # throw away binary junk before %! - s/(.*)%!/%!/o; -} -$header = 1 if /^%/; -debug "Scanning header for BoundingBox"; -print $OUT $_; - -### variables and pattern for BoundingBox search -my $bbxpatt = '[0-9eE\.\-]'; - # protect backslashes: "\\" gets '\' -my $BBValues = "\\s*($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)"; -my $BBCorrected = 0; - -sub CorrectBoundingBox -{ - my ($llx, $lly, $urx, $ury) = @_; - debug "Old BoundingBox:", $llx, $lly, $urx, $ury; - my ($width, $height) = ($urx - $llx, $ury - $lly); - my ($xoffset, $yoffset) = (-$llx, -$lly); - debug "New BoundingBox: 0 0", $width, $height; - debug "Offset:", $xoffset, $yoffset; - - print $OUT "%%BoundingBox: 0 0 $width $height$/"; - print $OUT "<< /PageSize [$width $height] >> setpagedevice$/"; - print $OUT "gsave $xoffset $yoffset translate$/"; -} - -### emacs-page -### scan header -if ($header) { - HEADER: while (getline()) { - ### Fix for freehand bug ### by Peder Axensten - next HEADER if(!/\S/); - - ### end of header - if (!/^%/ or /^%%EndComments/) { - print $OUT $_; - last; - } - - ### BoundingBox with values - if (/^$BBName$BBValues/o) { - CorrectBoundingBox $1, $2, $3, $4; - $BBCorrected = 1; - last; - } - - ### BoundingBox with (atend) - if (/^$BBName\s*\(atend\)/) { - debug $BBName, "(atend)"; - if ($::opt_filter) { - warning "Cannot look for BoundingBox in the trailer", - "with option --filter"; - last; - } - my $pos = $inputpos; - debug "Current file position:", $pos; - - # looking for %%BoundingBox - while (getline()) { - # skip over included documents - my $nestDepth = 0; - $nestDepth++ if /^%%BeginDocument/; - $nestDepth-- if /^%%EndDocument/; - if ($nestDepth == 0 && /^$BBName$BBValues/o) { - CorrectBoundingBox $1, $2, $3, $4; - $BBCorrected = 1; - last; - } - } - - # go back - seek(IN, $pos, 0) or error "Cannot go back to line \"$BBName (atend)\""; - last; - } - - # print header line - print $OUT $_; - } -} - -### print rest of file -while (getline()) { - print $OUT $_; -} - -### emacs-page -### close files -close(IN); -print $OUT "$/grestore$/" if $BBCorrected; -close($OUT); - -### actually run GS if we were writing to a temporary file -if (defined $tmp_filename) { - push @GS, $tmp_filename; - push @GS, qw(-c quit); - debug "Ghostscript command:", join(' ', @GS); - system @GS; -} - -# if ghostscript exited badly, we should too. -if ($? & 127) { - error(sprintf "Writing to $outname failed, signal %d\n", $? & 127); -} elsif ($? != 0) { - error(sprintf "Writing to $outname failed, error code %d\n", $? >> 8); -} - -warning "BoundingBox not found" unless $BBCorrected; -debug "Ready."; diff --git a/Build/source/utils/epstopdf/test-atend.eps b/Build/source/utils/epstopdf/test-atend.eps deleted file mode 100644 index fefac85888e..00000000000 --- a/Build/source/utils/epstopdf/test-atend.eps +++ /dev/null @@ -1,138 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%BoundingBox: (atend) -%%Creator: Karl Berry with ideas from code by Roger Hersch -%%CreationDate: 8 March 1991 -%%Title: RIDT logo - -% This file is public domain. - -% Forget everything we do. -save - -% Make definitions in our own dictionary. -20 dict begin - -% However, this isn't quite a true EPS file, because we use the -% setscreen operator, which has device- and document-dependent effects. -% In particular, if the document is being printed in landscape mode, we -% have to rotate the cell by 90 degrees. The dvips translator sets the -% variable `isls' to be true in landscape mode, so we test for that. -% -/screen_angle - /isls where - { /isls get { 90 } { 0 } ifelse } - { 0 } - ifelse -def - - -% Increasing this number makes the screen finer (it isn't the actual -% frequency). -% -/screen_frequency 10 def - - -% If you change these numbers, change the bounding box comment above. -% This default size is approximately 134mm by 71mm. -/logo_width 380 def -/logo_height 200 def - -% Besides changing the size from the outside, you can also change the -% scale factor defined here. Of course then the bounding box won't be -% accurate. -/scalefactor 1 def - -% We need a string to hold the gray values. -/fountainstring 256 string def - -% Put values varying from 0 to 255 into the string; these will be values -% for the image operator. -0 1 255 - { - fountainstring exch dup - 255 div 180 mul cos neg 2 div - .5 add 255 mul cvi - put - } -bind for - - -% This procedure takes the bounding box of a rectangle, and images -% /fountainstring into it. -/fountain - { - /ury exch def - /urx exch def - /lly exch def - /llx exch def - gsave - llx lly translate - - % Scale to the size of the rectangle. - urx llx sub ury lly sub scale - - % The source image has one row of 256 8-bit values. - 1 256 8 - - % Map unit square to source. - [1 0 0 -256 0 256] - - % Image the string. - { fountainstring } image - grestore - } -bind def - - -% Draw a line across the bottom for visual anchoring. -% -0 0 moveto -logo_width 0 lineto stroke - - screen_frequency scalefactor div - screen_angle - { exch pop abs 1 exch sub } bind -setscreen - -scalefactor scalefactor scale - -/Palatino-Roman findfont 100 scalefont setfont - -% Determine the dimensions of our string. -/logo_words (RIDT 91) def - -0 0 moveto -logo_words true charpath flattenpath pathbbox -/word_height exch def -/word_width exch def -pop pop % llx and lly are zero. -newpath - -/x_offset logo_width word_width sub 2 div def -/y_offset 15 def - -% Draw the background pattern, which is dark at the top and light at the -% bottom. -% -0 0 logo_width logo_height fountain - -% Make the clipping path be `RIDT 91', twice. -x_offset y_offset moveto -logo_words true charpath -x_offset logo_height y_offset word_height add sub moveto -logo_words true charpath -clip -newpath - -% Paint the pattern again, this time with light at the top and dark at -% the bottom. -% -logo_width logo_height translate -180 rotate -0 0 logo_width logo_height fountain - -end -restore - -% showpage -%%BoundingBox: 0 0 380 200 diff --git a/Build/source/utils/epstopdf/test-bin2.eps b/Build/source/utils/epstopdf/test-bin2.eps deleted file mode 100644 index 15eeb9a6ea8..00000000000 --- a/Build/source/utils/epstopdf/test-bin2.eps +++ /dev/null @@ -1,14670 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Photoshop Version 5.5 %%Title: 22.eps %%CreationDate: 10.01.2002 15:36 Uhr %%BoundingBox: 0 0 301 209 %%HiResBoundingBox: 0 0 300.5361 208.839 %%SuppressDotGainCompensation %%DocumentProcessColors: Black %%EndComments %%BeginProlog %%EndProlog %%BeginSetup %%EndSetup %ImageData: 1252 870 8 1 0 1252 1 "beginimage" %BeginPhotoshop: 5088 % 3842494D03E900000000007800030000004800480000000003320238FFF4FFF3 % 033E02460347057B03E00002000000480048000000000302024F000100000064 % 000000000003030300FF00017D00000100010000000000000000000000004008 % 0019019000000000000000000000000000000001000000000000000000000000 % 000000003842494D03ED000000000010012BF1AA00010002012BF1AA00010002 % 3842494D040D000000000004000000783842494D03F300000000000801000000 % 000000003842494D040A00000000000100003842494D271000000000000A0001 % 00000000000000023842494D03F4000000000012003500000001002D00000006 % 0000000000013842494D03F700000000001C0000FFFFFFFFFFFFFFFFFFFFFFFF % FFFFFFFFFFFFFFFFFFFF03E800003842494D0408000000000010000000010000 % 024000000240000000003842494D0414000000000004000000013842494D040C % 00000000126800000001000000700000004E00000150000066600000124C0018 % 0001FFD8FFE000104A46494600010201004800480000FFEE000E41646F626500 % 648000000001FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F15 % 18131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C % 0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E % 14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C % 0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108004E007003012200021101031101FF % DD00040007FFC4013F0000010501010101010100000000000000030001020405 % 060708090A0B0100010501010101010100000000000000010002030405060708 % 090A0B1000010401030204020507060805030C33010002110304211231054151 % 611322718132061491A1B14223241552C16233347282D14307259253F0E1F163 % 733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794 % A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797 % A7B7C7D7E7F71100020201020404030405060707060535010002110321311204 % 4151617122130532819114A1B14223C152D1F0332462E1728292435315637334 % F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F3 % 4694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767 % 778797A7B7C7FFDA000C03010002110311003F00F36A9FED733F708730CF89FF % 00C92D8AC36EC6A6F6BDACDC0020E87703E5FE7AC4A438D82068E0413DB5FA3F % F495CA1C450FACBB6B8980D8D4FD1F11F43DCEFA2E494CB32E7E6E58A838FA2C % 0048EEC64BB5D3E9FBBD9FF0990839569AC0657A389206D3C011F47FABF98A78 % EEF4A9BB21C087DAED8C681E1FA47EE6FF006EBD9FF169B0B0B373EDC9B316B0 % 46352FB2D7930D0DAABB2F76BA6EB1F5E3DAF657F9FE9FFA3F512522C26305DB % 5C4B1AF696870FA5C7B99581F9F6BFF41FDB5AFD1BA465DF9871B1E8F5EFB25B % 5D2D2486827DD6DAE877A55D5F43D6FCFB7F458FF6BFD22A1D3697DD631D4366 % DA9CD7B58D3EF76E7B6BA71E96FBBE9653FF00F04F53FC12F56FAB7F57A8C36F % A563465653DB5BDFB5F34DEFBEBDEF759757FD271A963DF57E9596D15617E8E8 % F56DC9C8F5529C6C5FF17A6FA9FBF283AC6BDA6D18B15D227DD63EEEA4F65EEB % DD5FFA2A3F3FFED3E37F388D7FF8BBC1B68F4B0333D7CB610E681905A5D1A1AA % BF57ED353BDCDDCCDECABFD1FA8BBDAFA4E316C660FB758D3B98C7347A6C11EC % AA9C6D31EB6B5BF47D4FD2FF00C228558583946CAEEE9F8A6B7C3C8606B9D3F4 % 439C3D367BBFE16BB1253E4DD63EA7E674BDCF1B32A977B6C6B5A6ABDB3BB6EF % C67B5BBECFF476D15FE93FC07DA9724FAE2B7BCEA781648DAE007B87FC67E7B3 % FD27F5FD8BE81CCE9D5D753C968CEE9E23D6C3C81EA9A9B1EFB719D77E9BD9B5 % 963F15EEFA1FD17F4BFA27F997D76FAA0314BBA9F4F701819794DC76B2C76F87 % B9BEAD593EA325BE85DFA5ABD47FEB1FCC596BEEB326F494F1153DF5C0B010C7 % 12D0E3C0708DDAFF006BDEB6FA5653E92D79262A3EED4CFA6637FB7F3BD077BD % 62E45FFA318EC9F45824349D379F7B9FFD6DBFA2FEA2BDD332696D3FA723692D % ADC098E4101D3FF12E733FF3E24A7AECAB36B4BA8A99E9B4389276C881EF977E % 76D72C5CFBDF4F49AF522ECDFD33F6E803ED0D6B1BA7E651558DFE5BECAD5AFD % A18F6F47CD1F6BA9EF6639686B9ED6973CB0B2C756D77E96CB1CF6B7D8CFF49E % A2AFD40E1D8CE9B533231DC7D5C76902C63835AC6BF77ABB5DEC66F7FBF7A4A7 % FFD0F302C0499E67451DBA46B1E08F563FAAE782F15B59EE73DC1C401219AFA4 % DB36FBDCCF7394AAAFA747E92D04ED1D9FF489F77E6FE6B52520A2836DCDADA4 % 3493F489D040DC5C7FAB0B7FEAD65E363E265E164E40C57E6E4D3539CE04EDA6 % CA3A8F4ECDBCB40DBFAA57D4BED3EFF4B7FA7FCE2C6C0716E6D6E026039DB7C6 % 1AE21AB46EF5310BB2B1480FB6A7E3BDBB4695DE2EC7786FBBDBB6AF67F6FD3F % E6FF00469299FD58C7CFB3A9E35DD3B18665F8F7D7552C70046F7FDA3218F35B % DF5B37329C7BAD66FB59E8FA7EAEF5EB5F55CBE08B06E3D381E9F6B185AC70F4 % 0B46357EEF4F6D766DAEB67B99F6CFF0BFABD2C5E79F562BB7233B2EBCC0F75E % 7A9635971B0ECB064D78DD5EDDB634EFFA398DFD37F23FE317738F918F6E6D97 % B1EDC9C2EB58E7697346D7E4E010C656F6B837D36E4D0CDDE8BBFE2FF49524A7 % A17BF1EEAC3B26327701FA0699C66BDB0ED9506B1B765FB9DB77FA391FF178FF % 00CDA83EBA1CF70BF09A58F734EE7506BD75F7577D7EA3EA756EF77A991E97F3 % 9FCFAB549703EAB9AD6596366CB0BB79DB1BC575BC359EAD5539FF00E07D1A2A % FF0049EA6F4D5DA3D7316325E46D800174B77FD263BDFEEF733FA4FE89252D8F % 70AADA9BEA3ADA2DF70F58CDB5EE835FA56B3FA5637E6BDFEA5CFAFF00C25F65 % 3FCCF21F594E63B7F4DC7C76595555D18BD4746B9948EA3656EB2F66EB2ADB91 % 8B7D345BD3ECAEAB9989FE87D3F4DECB3F5AFEB6FF00CDFCBAF11F8AC26F6579 % 2F77ACE630BDB73BD5AD8D662E437D4FD16EB3259E8BDFEAFE929AAEF4563E17 % 58ABABFD5BEAD9EE732BCCBB34E58A985EF2E6E2D982EADDEA3B637D1C6FB550 % C6D16D3FF08929F3AEBB8756275EEA7858ED8A71B2AFA6969D4865563AAADB3F % 9DEC62A429263491C02359F1768B4BAA5872FADF54CA20016E5DCE73A623D47D % D610DFEB35AE523D3EB662E3F53CD7018F6DF5D6DC4641B063C3DEFC8BB6BB76 % 37AADAFF0054AFF9CC867AB6FB29AE9F5D29CDF43F927F22714CB80006BDBC96 % 9750C2FABAFB2FB70BA857556C150AE8D97B8BC922ACA7D6FB6A6FB5BB7ED3FA % 577FC17D35472BEC6F7B5D88D0D6168DECF71DA48FA3BACFA5B5253FFFD1E3BA % 4E47D92BEAA5B8D75CDB6AAE92FC760B18C3B864ECBAD3FE02EF41FF00F1BE92 % ABD47A8E267755FDA355563DCF6BDF6B1D5346EB582CF4EF7B2B73AB76FA5B46 % 4E759F9F91F69FF8D52C3CABB1599A2B7564BEDAC9BB7BD85AEAC5AE65B5321A % FB3E93FDEEAFF44F5A76BFABB1B955368A3231D8D736CF46F0DA9AC73B750CAA % BBCB77578992CB3D1FD1BFF435FA5FCCE3A4A798C6D32191C807EF85BD4CBA1B % BC341686B5F04EC24E46DB0B581D67E8ECF7ECADBEA7FC1AC2C68F579FCD31DB % C16CE317FDA880601730103C49B0D7B7FAAD494EDFD5FBBACE566E5BE9AA9B3A % CBB2319B4B1DB05765A303AAB7ED25D3E8DDEB37F5A65DBFD1C9B6DAACFE66C5 % BBF552EEA2DE90FC6CCAEB16F4F733AB61BB1C8735D5075FEBD76B1BF45EDF4E % EA367F3DFA6F4FFC1AE3FA3E4DD67D67BEA65B63686D5976D6C6B8B436CA3173 % 2EC6BAADDECA6DC7BECB2EC7B3FC058F5E819ACB7A6F5C19FE8B1AD75C0E5301 % DA0B8B325EE63B7575B5CCEA5EAD79D5FB3F4597FB428BBF49E924A7A7C0756C % AC0AF60656436B7005DB8389FD2073BE95993BB733DFFCD7E91580FBDCFB83B7 % 1AC37FC234166A3747E8CEF731DFF81FFC22CBFAB544B6D658E360C2B5B8F876 % 388739D57A55BE8B777FC361BF1DF66CFA7FCD59F9EB7463540CB6B60DBF44B4 % 0047F5766D73777F5925383D7FA4E0750ADEC762D36653D8CC5C7BACA2BB6DAB % D67FA6CB28B6D63BF438ACFB4E5FD25C57D777E2605743FA7D0DE9B45395F63B % A9C7860B2A365C325D7D74ECF53ED6CE9D85BBD6FD27E817A0DCFAB1F29AFB2C % 3E96286DD6924B47EB07EC7458E706B2B6B1958CBBAE637E85BFA5FD12F30FAE % CE8E8B8F75EC35DBD4B38659718DF5D0C6DB56163B75DFFCCDDF6B7FACCF53F5 % 9ABFE136253CF51898F5E51C9CE6FAB49C8BDCEA4388F5852DBAFB59EBB3735D % 431F5D1559E8BFD47FAF6FA5FE0ED57FEB1D575DD631A8B296564BA8B6DA7575 % 539429B4566CA07F4666EF468DBFA4AB17D2C7A7F99F65ECBE9F897FD5EC3CD6 % D7395D6B2E8AF068ADB229C66BF2317EC953CD7FCF5AEDBF6AFD2D4CBF7D55FA % 4CAE9FD32EBD8B937F43CDEA2E6BEEB99918A72B22876CC5A2BA9ACC4C3A9AF7 % 39AECFCBFD2BBD6B71BED1555ECB2AF46AB7F4E94B751B2B16134FD5EC5BC64D % B8B6B1F53AC071CBB1B11EDC277A7E9D8CAEFAFF004F5DCEFE77D4C9F4FF004D % 45DE8657D616677D8309D9B874E1166465D743182CF59CD2F19B77A8EB5CEADD % 8D4599ADA719DFCF3FF49BD68E4E57436F4DBDEFC77F4EB2FAEA65591554E0E6 % 5F58636DA3736DF637D2AFF3FF00D2E47A7FCDAC2EAB87750CAADC8B6E36DAE7 % 7A34DACF6FA21C47AB4DBEA5AD6FE91BEFA7FF003B494FFFD2E1F1716ECACB7D % 545D5D6DBF24D6D73D85C0B9A1D7D2EFA2E7358EDBE97FD711A9B7AB3AA6B9B9 % 1416330F7349A86B55A5B8CFC773855B9F654FA377BFFC3FAD6FABEADD625855 % 643CD992CBF21B732EBED61A5D1FA6AEBB6CAF20D843DDEA7ABB77FF00C17A9F % E977B1EAE9B7FD872AC19392DA69658185836B36D237BD8FAFFD1DB9591ECFD2 % 7F81C8FE71EFFD1A538B8D1B898D36E9F7B1685177BF7348E5A4F8E8B3EAD379 % E21A34F8B9A8EC869DC34DB06279DA07B7FB4929D1E830EFAC19CE3DB13A8FE3 % 8B92CFFBF2F51EACDB2ECFBD97BBD5AEDAAD17BAB60F6B2BABA7DAEC86CBDFFC % DBAF658CF7EC65B5FF00C2AF28FABAF7BBADDAFA882F75396E6870243BF436BD % F5B855EE6EFAF77FC1FF00D6D7A6F55B6AB6FADC5AD3586DA6BDAF046E6D1D39 % 8E66F0C6B7F42EA5ECDAC624A753EAF5B70B2D6BDFE95D535949688BAB2DADA7 % 228B6AB9CE67F394E43FD2B3D9BF13ECFF00CDFA4BA0272C0937100E809A8013 % FE7FB7FB6B90E95662F4FABAB5989756EB7A6579193452456E6BC39B664D39B9 % 3E986D9E9E4ED67A7E9DBFCD5357A7E85767E99744E98E67523E94BB2F01D8F6 % 66F501FCFE455954D57647ACFB5CF665E1597D793FA1FF0001FA2FB1FE9B1BDE % 94EAF52BA31F22A6CE63EFB9AE7E307B683718167D9D9EB9752CC5FD9B856FDA % ABB3FA4637DA7FC32E0FFC683F38E1607DAE9F40FBAC00BABB0973DDEA5AEF53 % 1C6DF6D8FDBB7F9BFF0046BA0AB2F29F9F87EB3E9BB21A4FAF918EFADF496B71 % F25DBA96D2CAACA9F637329A1ECB7F9EF4D9FE0E8FD272BF5E7ED17F4DAC7E92 % DAB11CE631C497B1AD259B856F8FA15FD17EDF653FA1494C7A6D370FAB38996F % 2D6D7859F55D5C3839C7F59FB3BB654FDCDAF6FF00A57B7D3B7F46CFD2FE9BD1 % B9F59FAAE45BD33AD62DB530D8E6E33C7A6E15B595635D55343FECADDDBDD7D7 % 9356FF00E6BD2FFB6D8B13A7E4B2BFAAFD45AF70AECDD59AC090E2F664E3DDBD % ED6FD26D74E43FF4977E8D8ACFD61B9E6CCB6D4C06AB711E6EADAF02B6FE9997 % 51656C6B9ACF519B7D3DBFA4494CB0586975F462E653914B06DA69C9A716EAED % 6BAB36E2B6CF56E63BD5FA347ACCF7E3FADFF1CB37AFD4FAF1B1E9AF29B95894 % 0ADD8D35D4DB432DAD9EDB5F439FFA4AB6D745F53FFC254876750E936DEF7DB5 % 34B6C6343A296874BE96E3E4BB76CF6DD55FFACD367FA4FF008C7A865D1F565B % 8C4E05F9166586D7B05B46C613B76E535CF1759F9FFA5A1FB3FE09FF00BE929F % FFD3F3A2D2EF7491ACC0313BA773B42159EA3560B5B4FD98893894BADD96170F % 58867DA6B731E5DEFDDBECBAAFF4CAAB83679D7E686433C7F2A4A654C6DB6624 % 800498FCF0539744EAD9131A8F2FFCC94001BBDA44C1FA5C47CD11ADBFFC1B99 % BB67E6867D1D27FD7E9A4A49D2B32AC5EAC732D01CD68BCECDC1BB8BEBB2B6B5 % AF2D7B58EDCFFDD5DB57F5B7A7E73ED7656088BDDB83467E1B0D65CDD96BEAB1 % FF006777A97BFF004B6D9FF06B96AAB68A1EF73C5999EA96BEAA1D4B1FE9ED07 % D4AECAE8BDDF4FD565ACA7FC17F3BFA257BA49C805DF67AB25C7F3B6E4D4D113 % FF000DD36DFF00A2929E9EBEABD249CA706D55FDB5F9361232BA5EEABED548C5 % 7554BBF68D4E75747F3BFE0FD6FF0083FE711BA0FD62E95D22FB71406E4555E0 % E2514BCE574EAC8756739B7D8D79EA76D3BACFB4BDDB2AB5F650C7FA36575D1E % 87AC2C17FD6291F67C5C8983B7D5CDE9FC7E76CFB4F46FFA944ADDF597F695BB % 71AC197E853BE737A647A5EA64FA1B3FC8DE8FF3FF006ADDE97E97FD3FF80494 % 8067F4E6B9B67DA8BADAD8D00FDAFA500E7B28AF05963FFCA8F77F80AAD7D7FF % 0018B17A87D636D17E455631859958D6E28B1B9B45DE95775629FD1D7D32B750 % DAAB7B3D5FB1B1FF00A4DFFA5FD2FE9D7524FD7323FA3E50FEA66E04FF00E05D % 1772E4FEB257D54DC7F68FED163B6E832B22EB047FC11AFA5E351B7FAA929CEB % BA89AB073FA7C31A6DA69AAF739DB1C4D15E27B2BADCCBFF00ED461FB9FEAFE9 % FF00EEBAD2CF3E963751F46FA2D65D558D7B4F51C3B9C77116EEA2BAEAA5F66D % 78FE6EAFD25DFE06B58ACAEA38F7BCD844D30DAE936ED1157D2B3D1A4D4FDF57 % D3DEFAFF004FEA7DABD25D3E78FAD1FB3328E433AC8C6FB3DBEB0BF2329CCDA6 % B76F378C8E9B5EEAAAFCFAFD467A9FE9FF00C224A7846B5A7E9123C223F8A234 % 09D3F1510040D7545644A4A7FFD93842494D03FD000000000006020100000100 %EndPhotoshop %%BeginICCProfile: (Photoshop Profile) -1 Hex % 0000019041444245021000006D6E74724752415958595A2007D20001000A000F % 00240037616373704150504C000000006E6F6E65000000000000000000000000 % 000000000000F6D6000100000000D32D41444245000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000563707274000000C00000002464657363000000E40000007277747074 % 0000015800000014626B70740000016C000000146B545243000001800000000E % 746578740000000028632920323030322041646F62652053797374656D732049 % 6E632E006465736300000000000000174772617573747566656E202D2047616D % 6D6120322C320000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000058595A2000000000 % 0000F35100010000000116CC58595A2000000000000000000000000000000000 % 63757276000000000000000102330000 %%EndICCProfile gsave % EPS gsave 40 dict begin /_image systemdict /image get def /_setgray systemdict /setgray get def /_currentgray systemdict /currentgray get def /_settransfer systemdict /settransfer get def /_currenttransfer systemdict /currenttransfer get def /blank 0 _currenttransfer exec 1 _currenttransfer exec eq def /negative blank {0 _currenttransfer exec 0.5 lt} {0 _currenttransfer exec 1 _currenttransfer exec gt} ifelse def /inverted? negative def /level2 systemdict /languagelevel known {languagelevel 2 ge} {false} ifelse def /level3 systemdict /languagelevel known {languagelevel 3 ge} {false} ifelse def gsave % Image Header gsave /rows 870 def /cols 1252 def 300.5361 208.839 scale level2 { /DeviceGray setcolorspace currentdict /PhotoshopDuotoneColorSpace undef currentdict /PhotoshopDuotoneAltColorSpace undef } if /picstr1 1252 string def /readdata {currentfile exch readstring pop} def /image2 level2 {/image load def} {{begin Width Height BitsPerComponent ImageMatrix /DataSource load image end} def} ifelse /beginimage { image2 } def 12 dict begin /ImageType 1 def /Width cols def /Height rows def /ImageMatrix [cols 0 0 rows neg 0 rows] def /BitsPerComponent 8 def /Decode [0 1] def /DataSource {picstr1 readdata} def currentdict end %%BeginBinary: 1089251 beginimage     - -67.!*!"!!)).,"#'% )%#!#!"""!##&&#($&  "&""".#+5DIHHDB>BA?CGEAGGH>@AJFHGIFB>=?862@HFMIEG\XYYSTX\ahb[HCPPW]Zejkg_idbk{~kqndls~wuyrmsnh[9&(2MOMKNL?+'Ot{`IDF:$  $  %/69104794325:1-(0%*401880/35450058,*/00-*,2/'.15/.2&,0-+///*',+%-2((**+.%,)+(*  -         #!/.5621),""$/:?;?=8A=22,& $ &'  - !$%  &  #%+-$)7BF<@DC*.-06IUL@7&060#DW[VWLQGI@;7)$,;HGNJQISZJH9/'(#%&"4?B?95;6/87-)-0)*,4434/#&Pb\jiZ@03?F_emioqsjlgbL:6@X^_idooiiedbacaYYUQGAH=47714:8796*47.-3:+%*-32/443-,02201.31:B8AC>GSTWTNJIKHEK=&/88=QZTUPVQOH@<27;MLMOI@;B6!#%*#%+2761*(,5 !$!&&39B@<8;,%!19>@@IAFScj{pe\`gj^Wgq‚‹‰‚‹}men~‡‡ˆˆŠ‡ŠŒŽ‰„„Š‡}vƒ‡ˆˆ„„ˆ€yjeu‚|{vr|uop||~‚ysru{s~„yvworrvxwskppq{rpsxsmosrqposs{snhnpvrokoklovz|wmjiqtyknmvoihbjgdd`kj^Z^a[WWSSONKC:7<8DceUWm‚uWKafs†Š‘‡†Œƒxrpnmigooh`hrlcZ?03;7Nim~‚ƒ~\($ -    - !2=9,! #"#(+.*'.*&#%#" "#""++'$#&! ,*'"#!&*03;@ABK;7:9:FSSL313##2@@?AAGNNEEKICBCHBJDCB=A@;?PA=>D@CIE@DEH?A?:501/-)($&)/.477012315356/+1(-2-++//*/.2*$0.()*#'.)',,.%,+,1+# &!(')$  -  - - - %$'/-2*+/)"&29=5/;E<21 "  ' " - - &!"&" "-:>==E;'#,4;GMJ0$14-%3Q[W^SI_NE@>6,$.;TEJPWVYTTP=:31)$)$;I>A>>47JG?BIDA>A6(1&(2,'&$(+.,$"##''$"!&,28>BEJ;$*)*"28:@?@B>@>5-*,($11;951$')*72/4/+##     -  - $  - '& #!'(" #%#  !%%' "'(%&!! "%&(#$*'&&,(,!!')'%*)*+*"$"#'"$"-,'%,,0(#2EQ]bQ3# #=Obce]MMRKKJTSNHEE?D=BFRYWcikacineW]ox‡„…„ymkotƒ‡Ž’ŒˆŠŒ‰‹Š‡ŒŠ‡„…„ŠˆŒˆ€€ƒywnm€wvuzutquqzu|vxvnrrr|„ƒ~tsvxswymkrw{qtxpr{|sqoppw{zwqrpposqrrsogkrxsjmnpyzppwvqmjeghejdfhd`c\`\RLJMIFF>85;6KcaTb{{dJP`izŠ‰‰Œ‡‹‡ˆ…„wpllnkcnqkigb`ehN6177#   -   ,..%#$!#",1-,#$(&#"$ ""%$#%% &-+)$ 420=BFBBCCB:8>KQN@=8- 0@A::AJWXIGFIFA?IMJJC9?;;;84><9B=C@@?@GGH?:?@FBB<GOE6,/7'$+3+)3&*++2$)-/&&) !-($'-*$($-1'%(#' -  -  -   -  - - "# *7-/'&##%.<@;6D8;81%!$ !! - %)  - "+*'#!(*9899-"*%*(08<9!$&38'!&1BVQLb]SZTOA=5/!":RBN]UXSRQOIB=+)!$$8D@C?=:32531'$)&!%&7CMNc`]ZH8+724;Tglljb^]`PD9/)72-(# 4>@E@>@A=@;7& +300(%"$*+556.*'   - -  %$   *&!$&!"&",%!"! !)&#  "%% &#),%%$(%$'.,")#!#')#"%)%%'$(/0,)%02'+!*FWgv^<'"#1FTfk[LUXPUXZOC?H>99@AGWMPUgrkdcnj]Y^mu~„€|ytlkwˆŽŒ…ŠŠ‹……‹Œ†ƒ€…†Š…y~yrt‚ƒso€xwvwuutwlzysqtv€ˆ‚ƒwwx|xwxmkysxt{vzysrnr~vuutxz{ysqntpngdkrqpmrzvzvprwpmsnlkbegjfgfig`bZSMOGDBA<;?8=XkafuƒuWFdqp‹Žˆ‡‰ŠˆŽ‡~xuwwsojmqlncb_cfW85./6Kfsrm~„c- - -  - -  &,' "" !(*($%$!*,& "#$#!""$#)('" -#%%$#)0'5=AE=@HHHAKQMJILH?8-)-4=EBGGJZ\MFCCA8;>KFBBA=5>?:=>?BEGC<@KFFMNNADIIG>:7;>7>GKMECICEILTQTKTKMPU__Wee^`UJNLQX^ai^^]`cbhkblnixvrpkbN0!$9RKCAB;')HVR3(1)-   -  - -  (   -.42,+2826.75-434+$&%)236,.52++..26322,$%*0400)+%(-,15%'''(%'-/''%%.60'%)*"#%  -    -  $(23,3*"*,98>B<985--&  $   $% #()"$ (9=80$%7,% 0BID:1,*:EYV[^]a\]MB@3.. 3?OK`\VXRSLMF?% %/::8@?2'(-'$+"!"'3CIT``Y^I<=02&,1/>Uae_cd_WV64,-?@+)#%#$% ""&)1)2*,,//9;5ACDL@CAJBEECCLF>;GDHA@99)/'(;;@:=?==?EE;0 %-(% ! ),*:1/'"    -  - -   - $   !" '!'!! ""%#"$ !&$#!#%& &$$"!$$$##"!%'+%#$#'&&#""$$()"#)3*''-22.!&9StxhB0 "%.BYTIN^YSM`]PDHK99BNNOK?FM^ophdgfc[Wakw‚…†‚…pYg‚ˆ‡‹Š‹ˆ}~‹Š‰~~ƒ~u{…‚ƒ~€z{w}zsr|‚zvxwpwstw|vzt{†ˆ†sw}†{|xux}tz|{tzvss|yzztx~|~€upsuooqpqrqrvxquvqsqoqumleafhcfhfidaYYMMIHH=@89<@LflnuƒhKVmlu‡‘Žˆ‹Ž‡Š•vqt~yppj_gjdf`ah^F*$?:=Zluxu~zZ&  - -    ",'.!!#"%0+$)#"')! $$%"#*#! &$  '*')& ('&)3<;>:A=@BRRMMDOLFJD<46@OMLS\LJE?==EF;@A=8?EA@EAEA=CCIGIBA477;BKOPWJMEMOA>868<( -     -#" $#.*/?7(!$06$8IOUSH.-46FNYWZXSVTHD:;9,"/>SW^\SUS]ULE1$2/68972("'**# .:USUTXHH:2/+*784*)(BNNJQMSMUa[ZVM]WTXaZYURTXZTLSIQ]YUULLKK>C?@<48=6,),*%$  (*$$6ABMGKF?=?465+,0,/3;6:661,# #)"**#!""$,12+4A>AKNC:14./0;FD@CAQ\jvnf\ii\U[ey„‰†ƒjX\myˆ‰†Žƒ‡‚†ƒ{~†ƒywwwzyz{‚zvrrpx€||stprrow|‚z‚{ry„‡ˆƒ‚„Š{zysttsty‚}}yvz~}}zxyrms‚{‚ƒywxpxxxswvvuzyr~vtktyvuqgdf_cgdjkfef^T]SJDHGE?:7>FZijrx‡yW>agb’’Ž……ƒŠ‹œqovunph^ckegf`bbWDABY=HbllqwqdA -   - -,.$"#"(,&,-&(&'""!!%%" %(#(## #(*/-#))',37>?@GF=IFMOMEIRMQK;7GWUHOZKOKHCFMGCLFA@:@GJE@C?9=JKJLAACEIGGE<=H;@A=FHD?7663+%.58694212;G_``WRL>3+('()#$&,8<9:@CECICL_P\VPYZ]c^Q\Z\TW^^Y_OP^aYTSNTXXUSSWN]\_STQJWPRYTMLNKIJBCEA7;320.("):F@NJB85/13331()/41:=D?AC/((!#"#!'/36>>CNIB60*#.2?DLHD=?DB@83&-%!*.4$##'.-!"%-'     -    -"  -  -"&$#""&"! %&""" &" !$#""& "&.'&&"&%"%+#%$$)$ '+))..,2-++,+"*>ZghTI2)(7EFFWjskcVebQRDDO\NFA6;EIXkmrpa^f``Zcuz…z{yolebuƒ†‡ŠˆŒ„ƒ~~€Š{v{{tz‚‚{€~qqnz}vsyvotuw}x„‚{y€ˆŠ‡ˆ‹‡‹…qoqmtvˆ……xz~€xvx}ulu€x{‚€€vsyu{}|zwox€vsxt~wpomji_gegc`aad[[ZSVLJMEA;2:IZcgqˆlDDf`mˆ”Ž‰€‚‚‹‹|tv~vimjgjcchgafbN_@1B4Rb^clqcV,!  -  - -  "-0,/ "%#""&1037$,"!! #" (!'&*+('"(.)& *4()1A>?=EE@=A>HLFHQQTVMEFS[SLGTOcVCCQODBLMNDGIEHDBD>>A??GBADDDB=@LKLDEJ>BL>DA>>:>AHDIGHFOSGFTSHHVNRUVLZ^W^YT\YPWg\UYhotaYfplhhomhv‡la[J/$19HE>A;.&*FJ? .(  - - -   -    - - -7/002371)210,/4(%*)+./-01(73),45136*5.1.(,(*,-%'**))+(#&3&% $(&!))"#!%2((*&&  -   $/4-372(",;;024:=>@935" - !!  '  - !& - $9-(',@JWMMMITE++/DIVZKTP]bVNJD4&*+?H_XX[]ZZIKC3)(02.,'25'+-"'9EUVa[VB;31*5662:4@?CHGLHSVWG>3-%!"(4AF@@87ISTVQWb]fgaVYZ`d\^[R[_\UXY[LW\SQUZZ[TS]\UPTWSYYXWPX\]VPKYYV^QSTPVUQOZQNQFQQIEC0,!!#'(,.<;9433*"**'041.1)36B>@;B;0+# % *33?DLQG@2-+'06?>>DE@CKE>8.1731/27:3# -# "#$   -      -   -"("!!"#$)!#'#!$ $ #&%&*,%$%#*# $.$)&"'"!+,%,)%-*.,2*($'/:KSTM<;!%03BPbjlhZQUMLEHTVYKF78?B@P\bsxb]be]Wfh}ƒwr~|qonpx„ƒŠŠ‰‹„‚ˆ„ƒ‰|}ƒv{…€~xxxxtx{|x{}{vx…ƒ‰€€…„ƒˆ‰Š„†pmls{xƒŠ€v„†Š…~r€…{u‚{y„ƒzxsyz€||~{y|x}~y~{slrnmgeikhbcfb_\_VRPJJH@@:6?G]Uds…bC\llr‰‡‹ˆ„uv~|tmhonosZkiig\A1-2.=Ucgmoi`I !   - - - - -   +5/-)+!' !063,)(,!%!"% "/+('#! .('&"#0&(/<@@<>A@@9CD;B?<@?CGE?AGEBHACVWPNTLFLD=BVa^_aija]a`\Z_lykcdlocahbdinm`SF"8@AA:5:&7GXU7$!*($     -    #-5304..2$-6541/+-$*'++))/+(/-.03:)(5+%/0-$,)*$.,%(+)$#72),/," +-%)#*.+#&!     -  -  !.D749-3& (8;@;,+"$'(.5257512.*(+0-+-03;C=NL;3(0./4=HEDJ?FAA<>624;54DJ??8,% )4/! $*## - -        - - "$%! "" !% "$#"#(!(%!*$$%#$"%)'& *#(#"+'%(!"+('.*#'+.$%*/1% *4>RXOC6#)&?FADIIT]\]ZXURUFAIIORRHSWOPKCBIJIEEIHEB<863BB@ADEGEBAE@AJBBCIC><:JIEG?A@=CC4@?40.! '    %64+&&=MPLMQRZYIHH6+-9OO_WORQLWQNE60 =AHADET[LRPB>8*(!#!/.+5FNCD.&,AUXf`dfa`b`a___^ZWPVTUQ\XWY[aZVZ\YSSTJITUSPYZRV\RRRTOGLFQRPVYVRKUT\XUOTQU]VWVNV\TIC>:7==;5-*"  .+5==:777.-2/.-+,1=?<;/%*-2<:<<<>6/(# !( ! - )#" -    - -    -    - $"#' ! %%##%( &%%(&(%$.#'%%*'&*' %$ '!!**.()"%3,/0%<=&##$8^eiW6.$)3?PVXXICBBBX`aO>>8HG@@AKPa_jrc]ejfRU\plz†‰Šsa]l|„€‹…†‚„…„„…„ro‚†„ƒ‚…ƒ~€ˆ~€ƒ†Š…‡„€wx„†‡ƒ…ˆ‘…‚‚‰Š†‚„up€ƒ‚|„ƒ………|„†~~€‚…ƒ‚‚ƒƒzz}‚trƒ~~‚yqmjr~yuoolggjihuqhhkkgc[RONTIC:16AL]blowshMPnuvŒ‹Š‰„…wmr…ƒ{tttqlpjcsjegeP<606:]lfsrokR&!  -  -   &..3,#& */51+-(" !! !$!$'&(,'$ ((&,19>AA676?>=BAGEDL\aZQXR\\VXVRRSTO[\XSKDDINOA@@<>>;;JKOOKG>@FA>::AHMK=>?KGGGBKQLDHFAMNUVMMP]fkcY^chdS[ZUb]`fmib_YamdedfO5$*?OD>>9;:3(!  -!  ! -    -  ,)&! 3DJNKNQ^ZWPVTH:/24MQV_^^ZZZZL=C6,*/EYY_Z]aWVF;3(''&(1CIVTZUI:030459::?HOZUOPSJ?41+&++)+5CIU\[]dYLHA=5*.5C^_h\b``Z]`cY_W]_TSORMKRUKRUMLMEHKNLNMOLIDGOLDMIOSNKPOJFELQKKJJKKLQLTUVSNOZQPFP^ULURD<4.)(,'5;AA>?52"#"$*49<<:=641+45162205AEB71, #$2,'%11;@DJED>6,%.=MGELGFFIGFC9).041<><>:6792*" #! -     -  - - -   -##!#!&$!!"!! ##'!!&#$##$%'*'%'%&&&$#  "!#)/*$+'%.(32-,.' "&#%"6\jc`V=%$!;OabQQLI?FPMBGA:8CNPWSSSZ^jssgackcTVWl‚€†…zkddr‡Š‰‹‰‹‡‚††€|†ƒƒ‡„‚ƒˆŠ†ˆ†€…„…‚„††„Œ‡Š‘Ž‡‰‡„……„ŠŒˆ„…‡‡‡€}|€‹‹…‹‰„~{…w}rtƒƒˆ……y~|†€zƒzmgn|{qxxqnllpovumnpkf`[]VUVPB<32>D]hx~wr]A]pr€‹‹†‚~~}zt{xusvsomjheirkhcWC9/49@ammyvri7 -    -   - !$"*-!"#,42)'$'!$#!!&"%"! #&& +6-($#(-#'36?D=536;:;FF@B;7?7FGEAC@:76@?>=B@CCEDKRQDILHLBRULST\a\W\_WOSSfief^RYah_]aijbaaY>-.9DM@>>..KX>(2=61,&! -   -  -  - -  - %*355/-301&!)-1%&/)-,2011/3$0+//1*.5-+*.1)--/..&#%(*&'(''##$&(&"#&%"!# -  -  &  -)22:346+&-2887=D;741 -  -'! - - !  %&(%'  8CJIHDNEVZVPWWN@>*8KGOV\c\chRHK>=.-1CYcef]_^QK9%*!*8CVX]RJE81288A<<8;VOR`YFB=>(!&#"(*1>GFWb__cddg`^]OOMJXRUc__\^GU[Zd\JTOUWUTGDIKRLBCG@:G;7AABC>@>?9;@>@E@;?@AA?ECD@JB@AOEAMPRPGOVQKSRLEIQONWUOGB?//167DNLTXGK@25,#"".29;DB89512=:/,*0:CCBC>8,(#*# &(.??KLFA>40$9EM@LEGCBDGD@='&,57:;=?8+7:2-)   %%$& "    - - -#" -   -"!! #%!!" "! #! "(&#&(,+'*$)(&$! #&&#((!$""#')$%*2-*&(,,*$!(?`]fooS8'#/D[d]ZOJNKAFGNC8<@UcXPFDN^emsiY[ghZV^nwƒ‰Šrhe}‹Š‹Š‹†‰‰„„†††ŠŠ‘†~}ƒ‰‹‹‹ƒŠ‰ŠŽ‹ŽŽ‰‚‚ŠŒ‘’‘‘‡†‡‰…‚‚~}ƒ‚‚Š~~…u{znmtu„ˆ€††…ƒ‡„yx||uz~†u{}sqigirsusppjd]WR_[b^NC=-3:Gisx~~sODggrˆ„‰ƒyuwuqkprrophjckklmaG7727>GenuxxvR      - %() """"!!*220)*#!!&) %!!$$%  (20& %2.,.28>>>8B<;BEE=JYXUQUYYPOUJ79AAFOBCNL>?PNFEIGTD<:?>=;BDHD@>GF@FF=@?BC90198=?89DHEIJEA?JPSUNQOYbeQ^Y\caVHK[birsgdZU`T^fe]bceN*2CGFGA<)';]E0$18*#%  - -  -  -  -)-37*53-.+**+!)+%%! ()).0++-.+%/)+32*23+!,,)4-&,))$'('()%()$#%#&2*! $3*!   -   - $  - -%1811.0*!",31996?86/"  !%&   '1 '& *8BBDFN?IGSXUY[NKL5-<>BAIEB;FHFAETJJFANKSRRGMLHCDEHJTNPZKIKTQ958+-. )&$25=@B=:;9/2<409,6AEDA>4.%&(*9CJKMG:20/4EHHE=IGFCNF89*#(6;55893054)-'"$  "   $!    - -  - -   !" /#""!#!*'"#"#%&$$','*,"$+2 ##!#!$$"!$# (,.-+)*0)%5DQbntaK1*,7O`b^TY^MHPOKB?ANXMI>;ESUZ_mfaZehcZ[knht„Š~pfr„†Š††‡‚‡ˆŠˆ~„ˆŒ‡‚…‡‰‹z~Ž‡€}|~‡‹…Š‹ŒŽŒŽŒ’Œ„‡…†Š‡––’‹‰ˆ}€ˆ‡€„‡‚‚|€~ƒ„vs{~†‹„‚‚€{q€‚ƒ|€ƒ}|||wpehnvvxopjgeWBHS[^YJF1,:5Jis{‚„‚oEOjhxŠŒ„€„‚wsvxvtpotqsimmifkmljQ<426?>\ipspyb5  -  -)&'##"& ! "#$(-0&'&! !%# "'$#%'%$!  $+(%! #(-.,4;:=D>?I@>>=:8AGJKXRFGIIIVRNH?><@:/5HCAFORRW_]RMF06EPW\VZc]]OGJJ7+(2HT`_ac^VJ>'';?Q_]JAB1,88A?,?HQYZNLD=4/)%/*6@LT[XUf`bfadjgeeb]aZ[\_^^ejbYRLPPVOHLG>G>>50325-0& ! $$'G/!"&&$!!$%-&#&#$./++)*)&6-'/69015><:9CDHE?LLOJMHPUOJSTJIOLPMUURLSRNMOEA6<;11*&# 308ACE=;;69577/6456>E;:0""$*7DFJSE891,8@KKEGAICCLH=1.'",168?:043.)(&%#!&$'#" & - -  $ "   -" %$#" $""!&&'(!!&'%&! #"!%+-0%#"(*.'$%$*&#!&( &%(.1*,.2)'!$+QclzmR?-&-AYia^`\NHNOJEBLRGGN;>JTVGTimhdajnf]_fpvˆ‰‰‰€lix„‰‡…ˆŠˆ‚€ƒ‰‡‰ƒˆ‰‰Œ„|‹‘…„‹‡ˆ‹…„‚‰‹Š‹Ž‰Š“†ƒ††Š‹‘“ŽŠ…‰ŒŠ…„…‚ƒy‚„„…„|‚„…‡ƒ~~€soƒˆ€€‡‡|z{{wrkggkx|xrsi^`UEIYVXQE8106=Vm{z‚‰v_H^ll…ŽŠ‰€z|}xxtywwspifefhlsmegF66753HiotpnbF"    -  -  - &+$"  $"$'/&%($ $ -"$'%&$#"  "/)!%'$)',4=<@@@LC=<:8@EDADINJFHFJX\MJPUOIIINDCJM@>GEFKEDPG@>>CABH@=ACCIJ??;B?=9?35:CC>@>BORK<37.4-1>R^ac_WMRE($.8NWQNK;,(6:>?:FTKXUSMF86(7+7/-:FJ\cdj]adbidgjgejh`_e[ZZ`VV^dWN?8?>CA3:4090*("&"  #!"($ % ! %%!,! $# "&-10.;98<;@IIEF?JHHGFLFHJLMIPWIJRTTKHPQCMHE@31*$('##..5@E<@D?57/0/%,7<;C@9. *=FBNQ>71029ALJLKECDKBGDDIG<756=CIA>EAIMH@F@9567=AHA7?AKLOJ@DJHKNVTXZTPTMV^_\[acj^Z_fk_ccbh_`ccb[X;*+.7:>><'5@0"$#&))     - -   (+12//.,+%4.(')"*,/##/-121,+/,0*/.-'+0)(0,+!,-,#(,*')$'$((#,&( "*!)%&      -  - (/;A7630 +*54-+% "" #)     -  $# 0$&3;@5&!$1BBHWW[^[]^G85@TZ]`fdead[LF@;4+8S_\``YSSM2'5E\WRXL85953;@?E@RYWPLF6))+789CNMRhidfef`Zdd^bfm^^iZV_XVMRNMJ@BB2R60-,)# !!!"#&"!## #)"&(/-2><479BABD65221**77DFA10(+DKORUB=8726DJOMQXCGIG<;50,02=?>?:59/4%&#&'#    - -  - !"#! # -  -!" ##"#""&%#!"#&&"')#'#+&")*'!#"%%'*%(*'#)",,,(%%"&*0,2.&$+!!(Lj`\\L3&)/4JVW\gb[TONGI@;/..6AWflwxq_.  -    - -(#!"$!#! '.1)&"#   #$ ! )" ## '*.,.# $)0/15A9@B@A>A@=AC@N@BUTROD>CGROWVMKGE?GQPEHPRPLLD?BJBB?=<@AHAF?B?@>>49??=>ABC@@@:8>?EAGKP_`]X[QNa][ZQSW\TNY\`XO^jtmb^`f^XNRaXA)%8;;=@<.*95#2$%)$   -    -  /2.(+*23/(*1-'& ")4-%,.0*''.0*+.&34).)2!)2-*,1%'+))--+)+%" %,%"!& $())$  - -    ##/4<7<71+%+3/-" $  -"    '#&'- 1AC3*  #<>MULYV[]QHB@CK[^ccfdf`XOLD820<^^]\YaV\VE;X^VOC9.29A=;BJOSWWK<2../*07QUS^dhjimdfbeffi\bdegeXYVNRMC6><<<7/*#*&$)# #&" $#)# #%-1(-+782<=HGFKJAGMUPPQTXMR_OWLOJKNF<836/'$#!#99;=>@@9931+/'4=<=?@4* ,=GLJEG?7.0;@KKFQSRTMDA?5)03?D>8=74459+"!!('*  -    !   - "$% "'"'%%!!%$#$" $("-$!%'&&%' !-&%&"%2%%*!-,$%%*4.&)/5&&&-$!%&EZNIUQB+"*(8JN^eZSRLMDSK>HVQTJHP[RVgksxia\`\VWXMJg|‰ˆxdd|ƒ‡Ž‹|quƒ‰‰‰ŒŒ‰†ˆ‡Ž“‡s~„‡’’’•‰ŠŒŠ’…‡‡ˆŠ““’’Ž‡…‡†y€††ˆ‡‡†ˆ…‚}||‡†…€„„…‚†z~‹Š~~„‚zumprktupwusjhjf]Z[\XMF?468?\rrkhyr`O]klˆ“Š…‡ˆ‹zmv~€refnk^cbhqjik^A2--9E@@;FHIJ><>;<77CC@IBGB@=CICH<>JUYYUTPHYZ]^\YRXQIQT[YQ`inh]Za[U\IKKK0!-%3)"   - -    $*225/(/-1++$&)$#*"('0*'+2,%+2)+.-'7.2+',-'.%20,%&$"(.+%#(&!%#'#$!'-)(   - -    -   "$!"(<=527/34$(% - ! --+     --(  ,1+9;:/ - - 1=L\QRT\^YIC;@JSY`j\^b^NPKA<536J][a]`UXN[SSN:93=6>G?EHS\^QN>.2-&7FCJILMR[W[ZN^VOOOILGBGCK>82#()#%16?=A;551,0-038BE?=631:?JDEB<7728;DIHPWRQNHG7.+/7>E@?<52761" $+&"       "  -($!!'! &")%$# #!%% %%$!"!$"%($&"#)'&%)+00&"')-3'")-+)-,1)%$ !1@JIQ]Q2(+#/BHX\QS^]__d]V[MJ>BKSJNZppqws_QS^YVMJYtv‚Œubcoy‡Žˆˆsx‚‰‡‹ŒŽ‰…ƒˆ…ƒ‡Œ’}‰Œ˜•–”””Ž‹Ž‘‘ˆ†„ŠŒ‹““’“‘Ž”ŒŠˆ……ƒ…†Šƒ}s}‚x…†ƒ€‹„„‚„ƒ€†„ƒ‚yw~…‚{wtphmss|}zpcghcXW]WRFA2::6Edvyinvo`Wmpy‘‹|€uƒ‡sw{vrb]jqsmhgnklibT>3016?Uefr|xW3 -  - - -   ,55)%$!$5,1.!!#&#%#!?D1#,!&2,+,/23645;@>51Ebad^^[Xb\O;818D@=GFPb]ZSF97)"22=NUUWimdceibkfc_]`c_fb`UQKEJF<932(#  "!"!!!# $" ##'%,!$,,)62<@@E=KGPJJMPOSVNXWJNHRNIMJB744*'"!',5=9E;8747014;48<>LjqomwxpS]op‚Š„€€†xqrgkhjogiodinmmedX@B=:=EGE=:@?>B>>C>>EKF?D;>?GD@@=>GBEFHKHWRLKWZ[LX\MP^XUZ\ih_a_OSNX]Q/#*<@CAAGJWYXXNC6-146>HN]emgbhimejkYfda`^Z`]OYMCA:42//*%"##$  2!%!  &,,557<:>:5/6ACE>>:8364"  -))"$'""$%   -       - - -!%$"& #"#''!#$&((""$!#'%$!!"$&%%&(**'#!"%%*()('!#('"+/+'*,*(*-&%!(@LR`WH7,%!+>P]\]a\^XKU\\_RLMDJ?A68?=Rmpjrwp[M`nrƒ„…‚€vquumppqppzrmdlkngb`K-049;Peimvo\=>8E97?8=@?GUUUWVVQ@NNDEYXON[kYP]ec^]b_E(&68=@C>0:KI3#*+#  -   -    - -   "88253/0(3/112.,'&-,/1.0-,(),.0*,/.*(0-*+)*/-,#*+)#%!**$"#$ &')!'!!$$#    "&)2,($%% 139<48;%   ".%+(.2;78+% #$( '+  /A:+   -$,BOW_a\Q[eWZG4>PdebgfedbWZMI>0,>VdURQJ9-/5<8OKX_^^O64..665-.2/6785$ -  "! )! - -  "   -   (A  "$$% !"%$$ "##+##!#( !#"$ !"#)$')()& ""!$'%!&#!*)'&+-)+,.2,#'-E\icUA?2(&<7@A:2>@<=?BDBP`^KHLNJKPLMS^dUFQ^i`d_T0&;>@;86 @PA)%!  -  -   - - -  !(<636;84$33(*)'$%")(.*)00,(/,--!-**,.1*&#).'&,&+)#""()+&""&#&+# #"$  - -   -     -!*-01)$!#+4997783!   *4-1!$ !!/9>45=,!  !$!!%#/:B<% - "@/)05??NNca_lb`cknje[_^be[]WT@@?:94 #%$$  #!!%# #"!$ %!*!&#!"2)##$+"""&! !!"!!"   &!,010?DEMGIMHCGMONENUPKFMCC>3. #'1:B@B247>2'-3;:;;8.(#,8BNSNLQQKOJA74.76BK;EC@@785?VhjmhX`jj\\l†‡…‰Œyhcgv„ƒ…‡‹ˆŠŠ‰„‚„†‰’Œ‚x„’•”’Œ‹ˆ’“‘—Ž‘ˆ‰…|zŠ‰ŒŒŒˆŒ‹‡„ˆ†}~ƒˆ‹‰‚€yvptƒ‚{qx„€{xz‚zwttwqhkipswprplnpldZX[\WPD=:88=JafmqfcMA[mu…‰ˆ‡‡Š€w{trtjmjkrqkijnfgdcK6+(26Rdgfpp_>   -   - *0-# %#&.01/'&#!  "#&+"! (085'&#&).0/.219>4;FEJJIMMBOYXUKQVNQSMNP[[HFVQHBDMMFEPKMDFSSEB@FB:CDEEGEGN[E:9@>>?@=BF@<;FA9CI<<@<@>:??IOJIIHMHNYYTUa_`URSc_[\F'#+?=;@;*.;@3     -   -  - -  +1:8//8001.23+(*! &/$)',((/20.-1&*/*3,-*/2(+*&,*))!$(&&#&-"!!#! #&" &   - -    &(*//'"&"#%.>756.1+  -#(,08*!% #,.7<<:=/, $   .DF@%  - 3Q^U\dcig^WK;=HQZjgedhdb\XQD6,9R\T:2=D?JQOORFEB>>:,2+&&$0!!(!8.7@DIAGBINKMGRZRMUNNKNC8462+&+52;=@<:30214150340&97>MRUTUTRYR>8714:ATFFIDA?B9-%!  &#  "  ! -    "% %!&1$&#"#'#"$"##$*%&"#$#"# -%'%!###(!%!"$-0(,%'/00)$=ACKW^QA;:I_hlpsmaGMou|Š‘Šˆ‡…‚‚yttsxwvnoomlsheicZC/*25B^oqkmn^6     -    - - %-)""#""&0)-0'$##  "#"+31-# +:;2/#%**#/638?;?C9=KHJGDOMNUWYUMQSQHDFLQQHFMOLHGPWIHMJHECIOQI>LMEF@?JGA;7/2!"(#%!#$! ! %-,..?DCM]RWallnrkildkenhdhlgjrokx|upu{ƒ‰Ž‘Ž’Ž‡tkcWNB641 ""#  1 cI ,2;>>>CGDDGTTQLTKLIIFGFK>37,#(*47BA:5.6*0*$+44,:10-1;DOJGD9;?98)%'& " *  %%"""  $ )!$&'0(#()" $$!#!!!'$&')"&''$ ,$$&%!%&$'!&"'&))*)$(--&%8>E_sol]7+#=[hd`cVH;GNSOGA<2<<6@KMGS`gpnahpma{ž………†tjdk„ˆ…†„„‚„Ž‘ŽŒŠŒŽŒ‘‘Œ’—‘•”–ŒŽ‘Ž‘ŒŽ‹ŽŽˆ}„‹…€tm€‚‚…ƒ}…‰w~sv|{s{}„}~zut{}}nrsvwqiloqq|rk`eg][TRXNJM@12<9IbmkcbaTGdwo•‘‡„‹…Œ‡…{rsooolnggrwjnh[M9-345UlmeafhX' -  - -  - -  - "36*.407%'( !!!')(T'Q -51/'!/-(#45:89FG:9DKPJ=LNMIUOTUUUNJJIJKIHKKLCIC@OLDEFEEAHHJIJJJLFEHLFC:?EJD=<@DAA=@GFC98=KJIF=GJMGCDGOLKIMGIHDGO^dejji\G>>?*,2A>636>1 8KJ&#  A - - -  %    +251324072+.71)"!'+'-*+0,.+*-52:0-0+*)1,-4-,++4-)/,&!&(&($*'$ " $&##        /1-'!% *%15?340.' "6874&)"68=<<54',#.-"8CB7&$  !+:>/$*%$ 4?Nacegbb\bS=APXW`qfkhdc^YYJP?=OF???=FPbG:3#(;48I\djgiabiqmge`cTXPSN>9954*%) !%"("!! "$'-59>=NVTP\jckoytsnt‚vrtmoornxtpouuuny„‰„‚Ž”™™—¦¤©¥¦© ”Œ…„…mb[FE<4=71&.+"##%&42;33BHFMMMILNHHLQKLGPHE3/'&%3::;0.++&,*'06;AMOQYQMOGE=4397?LG?FA?GE80'/*''# $     %!# - )("  " ;   !! %( !%$ !!!!$&"*+ (!##%"&!%& !&"$)%! )&+*''.,((+()2#&9E]knnaL6(*.J`abTPRLVLEHBIC;@;CETTEL_jwo`[mxklŽ{tyƒ‰…|uroz‡‚‚„€†}†‘’“ŒŽŽ’’’ŒŒ‘Ž’“••—”’’Š‡ŽŽ‡Š’”‘‰ˆŒƒ„…ƒ‚‚xy‚~‚~€‚†{w…ˆ„}€‚~v|~rx}xuuqolhropwvfbcb\`WXXGEJN519:9KkkhbbaJImszŒ‹Œ‹‰Š‹ˆŒ~wxsjnnjbmjqlgh_WD5336;\h_deagF        - - //.#  # %31*+,,#( %$*+-"-.,)#4%11*) )1*#*6:5<@A>>EGFM?BMJJKOOSXMGJPSKBGALRKA=AEG>FKI?:==CF@67<@:B@LOTQOKRPOLQWMONQNJP^cef\UMG01 D3;@8;64%!AL1#  % - -     !5662:./945+1.%!(%*.*/.1.'*)+3586.-0+/332.3-*,)#0.!$$$""&("(! #  -  -   -   -  - &1/4'&*+'0582==0   .:;><-)!*9@HRLPMJPED:37=AGGGMF@>FB60),*)-*"  - #) !" - -"$2%* %3$&#  ! -. -  "!"!!%!! # !!$% ",$&%#)'($""(,%$ "+&*'"%%-+)#+(),2+-&'&2BYdacdK4))>WaVPV^YYNYTNRABFDCAFOJIQhtuh]mqh`[Wfx†|†phlq|‰…‚€ŒŒ‘•’‘”’’••—‘–’Ž‘••’˜•’ŠŽ‹‰Œ‹‹~‡‹‘‡ŠŒ‰~€Œ…‹‚|‚‚{€t|~„‡‚~uy~}t|yrw{vjkphgjqpsxpacf\\URVK^^emsk[E\sq‡‰Š‹‹‡……‰„vspionegmsmhhcd]LA206/B]dhlmrW, '  - - - - - - -  ('$"$$ +51630% #&$&&+*'$%)$#(41,#)*.$"+78:??:72=IF@IGLR\a^TS\UUSRLG?8TUFBDJGIE??A<=><:CIMI?FVXFKEBP[XTUVMJIXfc[TSQS?0&/??/+.'!,A@"++     - - -   ,6;<472032420)!#$,0'*4,$02.1&(1.50,014/8(,05*-1%'/.'"##!$"&&"&$!"&#    - -   '3//(,###((146;.  - %47;;<80&4%59?E@:94 !%0(5B:/) - - -6GEJKDA>/.+'6BO[chbc[ce\K?DO[cdclhddfldhliRHGMSXMF5.'/;@Qcecldfhikeif^_NYSPKA@7*-(",+""$# !! 2 "$'&%!!&0.@;FJORKPIMOPRQOEKGCJ-+*"(&1:476,##*.@GGVQQKLJKGF@1:79HJGDEHBDC4.3.0320'" ' #   ",*("&!")'#      -  " "'#"#!"!!(*(#$$-+!!#$%"! "!($.&#+'3(" &$'728/**#CP`mlX8)(1OUPUY`abYWVVMBJ=HEH]puogfekg]Vcuƒ„…†ohce…‰Š…‚…‰‰‘“’“–’’“–—™›—Ž‘“ŽŒ’—™’ŽŽŒŽŒŠŠƒ…‡‹‘‡‰‘Š‡„‚Š…Š…‡…}v|swzx}srxv}ttvxpphdedcjmsrnhcc^WJPVD@BD@KHKJS\^[Za[WUMHE68B;69>7:88@HDHGOMA<:@?>2. -0'5;72   - 65177161)%  ! #$  &,((! "##!     -   ###!" %$&"&)&%! ##$ $%&+&$!$+!'%$( "#$$,($+'#&((.2/,0-) @OboiU;*,>DNOW\c^RRMFC;;6@9>=F??FWeroi\bmh\[bs…ŠŒ†txdg|ŠŠ‰Šˆ…‹‘‘”••’‘“•—‘”•š’”–˜“’ŠŒ‹‰‹ˆ†}utzŠ†Œ‹‹ˆ‡‡‚„ŠŠˆ‚€„€€wx|vv~tvxr{‚zrwyphdff`chhqoigjfa[UYNF?>@;/720M`hjukZHPchn„Œ…}}snqtzqnoiijhmghkgWE5/)/5OhigvkV2 - - - -  -  $($%" #5=/-&(($!% $'!"#" #'$$'('.5,$"%4/(38=?AOF;FNBKLIJNLLT^]_^XTHKHH@CLOGIJLKF?;75>7:A>:B<@C=?:>90%)"3=>@@@C2  -&"!% !1?71 - ">N_dfd`hlofnogoib_SE8$&19N\ekmghgijkjf^`a]OEF692&!"! ##("" ##%+$&!&'*/9>FYZ]gopoqkpgmnuupnqzz|w|y‚tv|t{trwutwzwrszyv{rpwx‰„z‡ˆ„y|Š“˜›Ÿ¨­§°²±²±©œš’˜–”ˆvsvvonƒynrpm`mjiggecTsiKIIA@7+( !! $+2.6?<=?EJDJBIINMQKJIDI:;2$'*41194?NIUMGLQSNLKL;0;C?BKGGGAHEA71646:9+&'")%  !#""$ - +5.%),#&!         - -  !'"&"%% %0!$(.#()%'+"&#!%)(%'( $%-/'$,%.&#'0(&.35.7DQdiYH3*%,=?=4/56:QcbhkbMDScfzŒ’‰zsqw‚usrkgllqhhilaQA7..+6\h]ckaU+  -      -  )),%#!!,8=1-&(('*-"##!"$ %("#%3$!&(/4""00,4?:BFPO>?GIOV_ZULNZ\YY\]YNFEUXQPPUQSNCFEB>4;>;<=?=<>@=@BA4/4:@FB>AFC@D@FIA9;<@302;ELKJE:.,$(4EZ\`fgeed`L=W`fkjhkjbfeic^]WLEJ653%'*(') " &"(""$#&!!&'+(/>HVbhklnsloqqqovrtz~z{wx}†€…‚zz|z}v~xrz{r~~tuzuyy{‚yv‚‡‰ŠŒ˜››Ÿ¤¬¯°²±´­ªžœš˜™š—”‡vruvrwwqplpplpnnjkbdfb_e\URLKD;1"#!$ +!%$/305@>GDDOGGNLQQJLKGA51+$+24@KMKHPJPMTLK?9529AKFFDEIMG=<443GHGGFDEOVc`[XQY]WZRT]WVTXZ\TSQNUSH@CDKC<=FB9A>8@CHDEH>=BGAD=>ABBGLFIFB;839DHGHC:A553)"$ /;:GEB+/"(,  - 7=;8+  -AJ70%*,:JOKOJG0*%)4G[Y\fdh`\^P9:JN_ghjfqkfefcWC-$,4212BEGIGDIFEA<528<661/.-*'.&$ $ %#%  ".3(&+)/') !     -  -!! $#(#,'!((,!&' ('(((.!(&*''$&&*,/0($&(#"&%+1*+&*73,*#8LS^gl\E8(.IY\Y\QOFJORQTNLLSGHGMBJKHWmoj\`kfc_n{~…†€tzsfv‘•“–‘”‘“•“‘•”‘‘’Ž’”˜œŒ‹ˆ‘ŽŽˆ„‡ŽŠ‡†ŒŽ~„ƒ‰‹Œ‡|vsq€‚‚vv|tryxvzxsn{su‚{wz{pqlmhab]aaahfcXW^Y`ZJE=BAC84;843LTVbvyyTSpks…‰ŠŠ€~€{x}xolionrphcilkmg]NC4///@[_acnpjC    - -     -"(!#'463'&$! " &,$%!"' +60-,/,+2@6BJMIK??EGKS`^VUWSLXT^_Wab[RNOMCMSH@@GITL7:@>8B=>GBIJB<6=JHHE:=CKQNMNH@027GJKFFJENXKGMG9BHNVXTSKCOXULIACLI2$21!#,":M>*+ -         - 0441481.0*++.'!1'!323>),5'))521*.17821.-4*)*,.,!2+#&#$(($'%%"% -      "3<1.($$! %1" 2:418:;4:61"% .?;>DB71#$#*#:@=:' - 7@4&&$,,3BHKJDK8),,/8Y^hcgfkbdZ?5CSaejhklnaVTI3&'.AHZbnmjkhimfiie_eRB@340-)%%(&)!"%#!$##('($''-68IOcgmwv|rqo|{txv‚}‚~‚u}„}‡ƒƒƒŒ…ˆ‡‚Œ‡ƒ…€‚‚{x|ƒ††€‚ƒz~}ƒ„ƒ€Œ˜‘˜Ÿ”‹‘•š¢ ©ª¬¬²´²¯ª¤¢ ›Ÿ¡¡Ÿ ‘‰€‚‚zxrxystyvsqtjrnirqqlomkeegj_bhfZOLC7(%""$"!('37DKHKGDFJMMJTSQHC50)' 0@?GWTLXJDD@8/59=DIDHFHE;GJYOSXTVLSTX\[]`[SSPM>KPE@AEGVPE:9>>HC>CIMFHUJ?:7@38@;>F730$! .BIA?=69-+/ ! /FD<( - - "+(&  -  - -  .- %"+-.**$ &,*",>A;*%34*+179;;??>ACKKEJGJWVZYNSSMWWYW[UPNFCWQH>>=CHIF>??@BHM?3>@77BDF?HNG=>B>'"+37<=??A>:40%%%8FKEE520#  -B@5%# $:E>'(16/6FPZRN:%'..6PWebZdimb_I?>C\be]WTE:(%+,7Lehgdfojfhpa[_XIIG;1,0"%% ###%0+/&1-#$+"*-/FN]qt{xw}y~r€ƒ‡‹‚~‰ˆ…„}……Œ„†ƒˆ‰‰ƒ…Žˆ„‹ˆ‡‡††‡‰Š…†…|…€„‡‡„Šˆ‚Œ‰‡‹‡‰‰‹’‘–œ¡˜Œ~ibZuŒ¤¬­´·¶°®©§§£ž žŸžœ¤š’‰‚€z~|{ƒuu{uzutrmlvnuomozxoknqhhmjlic]ULD5,""" $ *06;:@MLHHNKPKKRIELB=/&!%+1?GDDhM344/<@CLJLIBQG9146?AD?/,&("$!'& #%  -015+$$/1-./')%&      -  !"  $"!'$!' )" ( &'%#$%' $%*' %,(,.%-++&+" DVetsg]P6"#0AR```Q3><329<3;6;Rht~ŒVGejqŒƒƒtpvuyvrm`bkjabb^[_cdbW9,+0,:SQ[bfbM," - - - %(!!!"'03,(+! ""! $!!!%%+' 8@=.,!(881+97==;?A>;E^ZXSNZY]YOQOKKUVSRMHNOHMQROK=?NQOJHHIBEC>9=?>@FDDALLGEAACEBUXMKJIDFVPHGFNONNE@MYSTZd^WKRe\^[XZ>(''.1+!"#&CYO-$+!  -    -   .<49=6<895;-5/.)$262045-,4/373.103,.67233-/21++(171&/&#!'% !& '%"-)(    -  - " -   & -"1=;31* -AEB52-3;32$!!".=J@B87-%;BC;( -  JQ]JD9-*$!!6MQerlmkjjgiffbQQRF;4<+%**( %,*-+/2/'*'"(/8AEJIQNKIOOMNJL:1& $!-/60‡¼/152=EDH935,(!&"$& -  %(## *.'%(29-'/2&##      -    ""$"&$" -#%!"%&'$%% # "#&$!/+%# '&"-'*/)'*16+**$!+KaflkdO7%'=J[`g^LGSQ[TFFA5;>8Ecs€Œ|QVfkw‡…}zpotxpopijoefncfdjpdYL3*:4/DZ`_daM;.#.#(" - -   - #%$$!##.70*-,"!&'&&#"$$*%&#+"  -"15:*&!(:B@-137=@FC?8=AFFCA7=@D>HMB>77,,-! 7@FHH;4+$8HI9   *=B3$,#-4A9.,EU[__L:'/9>PXgjkilmqgT??GYT<(& (3BRgqmuqtptionf\QKCB:7*/,,!&))()500273+%108R_ir~}…}€†Š‚{‡ˆŠŽ‰‹ŠŠŠ‹ŠˆŒŒ‹ˆ‰‰‘’”Œ‰ŽŠŒŠ‰ˆŠ‹ˆ‡‹‹‡ˆŒ‰‰ŒŽˆŒŽ‹‡‘”“™›–™–œ˜‘Žv_]]p‘ª«³³µ°¯­¨§§¤«£¢©«¬¬¦ ¤¦œ‡†…|uuqnotnpookrppwwyqrlreilmsmnnggjffec]D<6)% #"# %1435EJKPKOONWLKPZNH;-/&") E)09;=HPHGKFGDJ=<=C?EKG?,-."%'  - -"'*(#!'/3-%".9524/.)(%! - -  - -  -  -  ""!)!!!#'*#$$!"$%!## "!$'('*#!!'#$&)+..2%&(6(*)/)#3=UfjibH0)#/DWejeRYU[]L@FIA723HQRLPXW]gtaclkbYbyˆ„†ŽŠŠƒŒ‹–”“™”–š››“œšš™‘”–•“Ž”Œˆ‹ŒŠ‚~z}‚‡}snmtƒ†}xƒutuqtxksrvq‚vrpr|y„ƒ†|oo{ynynef^cnfcabf_a\\UPMMOPN@A;67;?Mhrz…†nQhpv‹Š„y~‚wtrqnhieblhlprnjrsri]E86-5;Qaxjd`]H +) $,)#! -  - - -   - - $#"!%0<62&%$&1 " $.1-2-% 18,,'%17A:,06@BIF<>=EHNOXPSJ@?KVXNLKMVJONONROPKFACF?GIKAF;9;?JA9:>833".H?4&  2CC&$ !'8>B1.'7KQXYN8-117FMhgikogidMC;@GD-#8Neglonpksgqj]d\E=60+++&%  "&/.'/-0//111DWbt~xu€}„„{ƒˆ‰ƒŠ‰ˆ‰‹Ž‰‹†‰‹‘‰ŽŽ‹‡ˆ‰Š‰ˆŒ‹„ŠˆŠ‹‡‰‡ˆŠ……ˆ…ŒŠŒŽ‰˜Ÿª§¥«¦¨§£ŸŸ–x_v–ª¬¶·¶®¬©¦¦¥¤¥¤¦§¯°«¨£§ªªŸ˜‡€€„~wzzwvsspsvqhirxlrpnqqhppnruoopvsgmjii`c\I;*%#$ %!& !%,318=CNPOUKIQMVVSJ:;-'!#2?HBJQOODEKGHA?FAX`mmX:*%%;KXai]RVKHJSOE=3.8MC710;XmwŒ†zcOkr~„‚€‚}x{ske``^bljkqkgakrrkYD1.)6>]hf`beP0! - - -  -  )(! !%8<1,&#$$)'"!#%(*2& %864.$!/03(.6?CB?EDCHCHLSSNJJNNNPPQJ@B>DHNHNQUQNMOKBAJHBFE:84=DBACA>F=:>?>=?<:C94=77>9AGG==BBQRIN]WMFGKKQ`WMR[^PL,$(14* 0EY=#%'  -     - -  -   -5+>?:>:820/.0-(-42+)04055)$/+/-+.(**(/2-(.-/..(!'1(+.%!$%#$&+(&'    - -   -!     & +./" (>DFA=F2(4:?=@@@C>>440#*7C>2)  +><6(  -.BF/)1@HJ?:81ELNXWD4*/2@OcdikpbhfH3%%62"/DYlsirhgruji_dXLD310*%#(*&$,+4-'+-)19IUaksz}|zˆ„…„†Š†‡ˆˆ‰’ˆ”“Œ†‹“‰†ŠŒŠ‰„ˆŒ’‰Ž‹ŒŽŽ‡‚Œ‹Œ‹Šˆ•‘‰Ž‘¦­«§¬§£««¢¨§£{{™¨°·±µ¯Ÿ¢¤£¢¢¦¨ªª¬¯««­©¥”“‡„‚†||y~xnxwxsqwpqrrsursiqrrsrsvsppprmimpjfi\\NH<(!"% " "$$A4>EDPOJHUVOTXNMGB1%%5688ATOLFIDA?@C764>DIH[crqiiji]V[m|€„ƒ†}a`—”’‘˜–“Ž”•Ž““†††…‚ƒ‚€…ˆ~}x{€‚ƒ…ƒ~€‚|zyxnu€€uxqgimpto|{rrnnsskbYdcbd_ie]^PMZXY`e`TTRKDCA>@A79:;18-2@bv‰„ƒ|qZUlw†Š†vzxsuj^X]h_ddfj_`^hoh]V<10/3@`aU_fhK"  -  - - !)'!,?=0/##'$ !$! ##'*""':0,)(,4'+07>GFA>EMLJQ`UTPRSSSULOYQOMHGUVPXaga_QFGNL@BCBA@?@==BCBBNLF<3/;>ADDBC>?Q_MPPOTRKVTMUZIMIHHC" */3>7?@71-+1$*89215116,'+1-/3.0('/3-0.*2.,)20%%&%0*+'# ) $*$#   -  -  - - - -    &) -",#4=KD?DJ8!$5@?DYemklkggggbZSFE>/+'" &%#(,*!*?'+''2;J[fvu}€€ƒ†…ˆŒ”“‘Œ‹‘Ž’‘“‘–’’ŒŠŽ‡‡‡Ž‰ŽŽ‰“Ž‡„”’Š“’Œ‹‹‹Š‹Ž““‘“˜£©±±¶µ´¬««ª«¦œ—®¶´ª¦¦¡ ˜”•“›˜¡¦Ÿ£¦¨¨ª¤œŽˆŒˆ}v€‡„ˆwwx{}ƒ~xxwzstrsmpnrspqqtqrnmolnttckngohd^UO=(,"%#!&( !%2,77DLELTWRLTHLMPG5#"/142=KTJIKF?B;FDGC=B>73-*)1&%$ - $'"*.-* $(1032/#--!!   - -      $%'%! )"(##(!+ #) ,& %  !*%$!&)"#))% &%*()'+)+/+*),'!'7P_glhY8'""1DSebWNLa_LA?ACEB>?9KB@FELRPURMTSWSUYSUZe]ISWFM]e_aXFFLF?DB=4@@C:3@?=GEDDH=FJDB@A?B@104?9ABAJHFPWLIKHNWJMY]WUMRM@;.(=E3(!1SO0!"       - "2A>::?<98@:552065651::^|€†€}w\Naeu‰‡ˆ†xrrplpuurilnkjkecqqgX;/02179LglibC$  -   -  #+(#$)108- "#""# # )#&"#-60,(#)2.''-2:==COG9488509>?>J>:HD;9..3834AH9/4:BJKICHLJGSZN@O\WQK@EC=& ,AB7*2B@% "  -     -  % 0=@79:;?=3:1;4,6299*27655651+11,;/,30565+52.36,0+/#%+-&'"*//$"("! - - -  - # -      -   -  !":9IFECHH:,#)4:?AGEF?G<114" $." #,D=1 -  0;.  #$&01<5)-...*AKKMOY<' +9C_jiee]D$!/RMD9Janmnome^ZD=@'*$$)#)&(*-2/"./02Xjh^aH$  - (7:'&$106.#$ !*"#" .-.% "24(%.0.7CMKKOOYY\PPQZWJT[P[]\XRGOWNAC@@HGMF@B?IGJG?8;362@>=;928;=>5(&465ACCFC3)4>>FAHKKAB64$"1/! !4:?%  8<5 ,*.08;CB=,#'-$3?QPXQ?))8@\ijX_J3)AJPD6D[pseebbUXF75'$(*0+%%''---)'1;ADZu{‹ˆ…‡‘Œ“‘“‹–”•™šš•™˜”›ž“’”’’™”“Œ’Ž“‘‘‘ŽŽ‰ŒŒŽ‘’“‘‘Œ‘”’—–›£­®µ¶²«²±ª¯±­²µ¥›š¥¸¶·µ°¨£¡Ÿ˜“Œ‹‰‰˜œ £««¢”‹‹‰‡t}{€‚…r~~}vuyp}xqwuszow{ry~v~y|npx{wvmkmrpqhk`NH9()% (&"#%$!($ (.3DFNKOUXUQOB;@>4" -BGGKOB@88:GAFE:7>6@>76:AI:<66<<4;A73=73>=LFC98IRRLTXW\R[PGDEEJIEHD>2".0/+2$;M7!#"   - -       1I;;:@:297;:20"',9:')64.45703=@9167-+2,0(1-,0&&*-),+#%#1&''%'%&#      -      27:C@DMG@A6%%/IQJJDC32 %#8=<.  3B4 0:@34<=:9)1&'HRXUE8 @TfaTG8')26-)&$ - - '  - ! $("%44287:/+#$""!$"   -      "&$ +'$!")$,#!!($!! ( -(#$$%.',&"+)%&./48*-1*%!(?@Xl~u[:/#*2Abkih`]\PKPMGAFJDB?:>BN]bjvjhqhf]]l~‹Š†‰‚fdjzŠ†…‘’‰ŒŠŠ‡ˆ‡‹Ž‘Œ†~tƒ€vtv}‚|‚x|{yz€~y|qsnkkpvwvsvtjkqtkegeb`__`aZv‚eb\aZHQWJPKW]RIHAA974980+)*117=9?AGB@=6CHBDF?GBA9677><8293530+/57))552<7;81:@1635-5/&00+"*.)*.%(*%"#'("'")-3"     -     - -   - %$.-8ACGIGKE=6&$/7LGRHMGE1! !?9..)  1C?# #"'8?5+*)49;' OPNIB*#+.=Y]L=&)5>FJQEBP`jjjdXVMB<7..',.-(),1&,5.1C/Mcw~~‰‹Š‰‘Œ—™‘’’•–‰“›š›—œ˜›™–Ÿ—›ž›œ™–™œ˜˜–—˜š’”–•š“˜’‘•Š‹‹ˆ„‹ŒŽ”““—•“‘Š‹““”‘‹‹’Ž›¦¨¯°µ³µ®°®¬¬¬®°Ÿž¬¶¾µ²°­©ª¢¡¥¤¤¢—“Œ˜Œ‡‡ˆ‰††~……ƒ‚ƒ{€{„€‚|ƒ„†…~‚€‡x|srrx{x|x|†x~wln}|vxslntkfdXF7*! 2$!"'%.;=QUOZQOB3-,%*!3B?C?>30;D?<>6)%'#%'+*#$ -  -  -  "-3109921.'* $$& !     -  - - -  -   ! &! &"#!$$!&,%#$!&"%(($,*+) !)).((&072+.,*72#*9]sxngP:((F[hjb^\bZ]XFIGQIA=5<:DOQ`iyqegsm]^ev„†ˆ‹‚odhu†‰–‘Žˆ‹†‰‰Œ‰„…vm}‚}ql|‰~|s}€}}ponknfmivvvhsnjspa`^fagbcc\Z`|t^W\UJYRROPGYRPDFA;788?451.734@EX|‚‡v`Nfot„ƒ~||ƒwpnmsollkfbe_^jppni`A340'+LYZ]kvf*  - - -&)%" .630.'("# #$!(!&%((#)'"+6'$+88CNPFJEMZY[`gfebidc]^abldU^[Z\VLSP\PAA<22>DF?588BBJGCFI@CD:GLNKIBDKCKUK=GOO@ABJD=C;6-$(4<5# 'B@#"'  -  - `+  -   +=6<876=@8<233-,,.395.1@7393;?<556.1./2/,5,520)#!**+-&!%%'$()('.-#  -    -  "   -  -    -2"&6:CDCKIGD9- %+3CNRIHKKMI?=9$  -3D=% -  3O<  #%.;;6& %6;4&$DQYB!).=LYL1$#&9Waead`gjfgj_^JN=)%,0(2*#62$&,3,4;>Jarz‹ŒŽ’””™’‘–˜•›—šžŸ›—œ˜›š ››žž—™š™–›Ÿžž””“˜Ž‘—Ž“ŒŠŽŒŽ–•’“‘‘Š’”ŽˆŠ‘œ¤®´²®¶´¯ªª¬¬¬­š›ª·¸µ²µ®­®«§¬¬¯°¬¡”Ž“”‘Œˆ‡ŠˆŠ„ŠŠˆ„~‚‡‡ƒ{}|ƒ€x‰|~ytxzu~}}vƒ‚syv|{~x~wy„‚ƒtsr{ƒvknmobZD7*#%-# $#.:8HHKMIJB2)%$*!'##)4A@5-.297:4*+0 !*2035++$ -   - #%-135722.)*#####"!(  -  -   -   "#$$$"$#$(''0$,&&$$ %& &(,*,&&$) #',+*'/&*-"++)/--%)@_mmqp]J+&;WgffbW[S]^OJMOHE8-4CEHEJ\sueamjd`flr€…‹‚roo–˜““‘Š‹Œ“œ‘‹ˆ‡„€€…|€‚…zt}„tvwt„‚}xnkthorsailxohsjknibemikimgk_\em`]_^LX]KUUNHMLFE??=4266+757<6:EBXq„ƒ€sn\Tjs|†z‚uyxsvwlppmdfdcjmjsrkhdV1.//+BabgoyoD&  14$6,53,(!"!%%#!!#)'(*!#1+'*0;@JUQAABW]Ya_ji`gjlj`gdihSMZYYYXW\Z\OISD>A@=<@>=?DB85735@C>:>@=9CMNMNFDBDSRD?KJIKN@hT]I9>JJRWF7-$!.<:(  AJ/&# -   -  !   - 4A;=9=93=8/--.4$*6/302-986<<:.  -7;62#*)5?6/7,)6.,;UOF! '')9KI:3"*3@PlgccjvljmcgT?GB5"!-.(-6(16!'334FQhhz†ˆ“‘’”š‘–š—˜š™ŸŸ¢œœŸžžž’œ¥¢œ¡žš ¢–Ÿ–—•—‘‘’”‹˜‘‘’ŽŠŒŠŽŠ†‰‰ˆŽŠ‘–—˜””‘™—š¥¬°··¶¾´°±¯±¯²®™±··¶¹´µ³±³³³±­ª­¢›–‡ŽŠŒŽƒŠŽ‰ˆ††ˆˆ~~„†{|ƒ…€|‚€xz‚~uvwsv|~‚u‚|ƒ‚y€ƒ~ˆ~€{ƒ€u|yunnqoooebWI64)'""#!%#!4%99EIMLKA>4133:2)%-24-.&$&6,%,+"*0881! -    ! #('+354;:7-)+ #*')    - - - -  -   $!!*" #(!$$&#$ "+$!&'! #"$#'1 $,-&&,&(&$*((#&#,5&!)=S]fnrl]?2$0R\ciZ\\Xaa^IMQEJ@0>655642/258EECUs†~wqdLZry„~wvwyuzskelbbgeblmopone[G;004;Wdov{uf8 + -   - -  -.9+%!",:;1' !!# % ,4""# ',"#%04*+178EY^LF>CLY][bicadbYZ`dhjW=HSYZORKHS\XZTNJH?::98?GH;8>20?@1/440//572/.-02)*(-('#*()!%*%**-("    -     -      "!   !4FLGFGSF.(7;LMWUNSWNUION7'0@;' 1@+%'435+(/:B&4'DOI5! %,4AHJ. 0>OXjjmmhiospc[TD*11,)#(#%,'./330-AQfty‹…‹Œ‹“‘’™•”šœ˜Ÿž›œžœ£¡Ÿ ¢Ÿ¢Ÿ›š›¤¡ž¤¢ ž¢Ÿœ–““Ž“‘“šŽŒŽŠ‰ŒŠ‹„‹Œƒ†‰…’•ž ¥¥®±¶¶²°°³µ¸¼¹¹¾ÃÅÉÈÂÄÃÄÃÅ»¥¤µ¾½¸¹¸¾½º·ºº¶²°²¤›Š‡…†…€„ŠŠ†„‡€‚Ž‹„€ˆƒƒŠ€ƒ|}{…{}{v€xƒ}}ƒŽ‰†„„†‚}„Šƒ†„ƒx†|zs|€wurqnoqgd\L=,!!"$""#*0AMLLOMGB>@DD@0"*)%'05#0<7$  (+-(' -  $()028B1-,20$*(%$"   - - -  - - - &!#&)" "$""!% %'(""#% ( ! %&%#.'*++'!'%&$"(/2*)'*33+' -JZcryugP3!+?H`fbid]Z`aWOKFD<43=H@8;ZiaZ\eoriTTiw€‰Œ……vqs‹’‘Œ‹Œ‹‹‘”‘‘‘‘‰Š€zuxyƒ„‚|yƒ}s{{ƒwnqikr{rgkplpqlggikfelonjgiflge^`^TOLS[[YNGH>?=>=6/01(.577DMG_}zlxraNcrw…‡…€}uwoqtnqonehgfgjeknmk`TA85535Rftqqtc."5    - - - - !0)!'6>6.' * !%"'3+$ &1(/32*,:=BIRQH;@O^[[Y``YYXNLT`ec]QR^bb^WMLQ`e\LNLPQND8=@CH@?>7?CC?@?NJD?:AJCEGCIKONXMUW_^a[hYYZY_ZULC1(%&,) "7L<@?;302./01192..*-('+04786:762-.,6<55400,1/,+)'(')"&-*#$#*'#)$   -     !       -#& $AGIEMfpgfrk[Sc|€‰ˆ‹‹‰‚qŽ–”•ŽŽ‹‹Œ’‡Œ‚€~€~~|}†ˆ†~y}yzxutpjvyrmqrgellhkinqgcdtlhc`knfgc^VTWZY`_RJHCEEA69500,.561;KCDbugrƒ{jXfny‡…~‚€}zqompurmkiicffhjlh``ZC7.03B\hepvwQ *A    -   *2'#"!(-1/.)% !#$'./$ -%/""%*96&#,9?AQSIABSZ[\[[WU^[U^TLK]b^YXQWedZX[X`WLLNLUJKBA@FNLLPMHLMJ>?IUQRNWRKKKDLTF=KX]N?K^[X\b`^[MWK/( -3) -?CC==4732/,)1713'--+,>0410+2239@56633071..2.&+5+1./!#%##"(+)         - - -   #   '9JGJLGJC$+?=IJIEMMKRNE/$,>@(  /9,!!% $ .4.'("")>PZB#*1/.HQJ8)#(IRaiiipjcd_e]M;53&&'-**-1(1+.1>N\Yo€†ŒŽˆ“”“‘˜›”—˜¡œ¡Ÿ¤œ¡¥§¤¥¥©ª© ¦©¥¤£¢¥¦§¥¨­ª­ªª«§¬«­±«£™–ŽŽ…„‡ˆƒƒŠ‹Žš§¬ª²´¸ÀÁÃÄÅÊÍÎÑÑÍÉÊËÊÎÐÒÏÒ×ØÝÜÛÜÝÝÜÝÝÔÆÇÎÑÊÇÄÁ¿ÄÉÉÉÈÇÊÉÉǾ¹³®­«¬£ ¡šŽˆ†€†€~…w…‚€€‚}wwˆ…††‹ŒŽƒ~t}ƒ‰‰‰†„ˆ€ˆŠˆ‡ˆ’‰‹Šˆ‚…„{x{„{|w{vurrqmj`PA4&# $!   #&*3?HNMKJMLNLI:5(!+*%&)%!!*-+" **3%&! -%  - $"5-#1/-28-)&&&40&"    -   - $  %% %*")'$!%2"#("$-$$,*#0/,-"*+*/'+/+'*-+(#"@clpe\:(#,7DGOZOF>A>FOPA3/??74879>?77350.5.+27;1%%$*889124+5.36643351+4.36.,*01%*0-!$((!7) -       - -  - -&#!   '=@FLPSM>$##6@MIOOVWMLG7 "::8, - 6E-*.$&')*(-42.! -:MRH+&32HMS@ +,&#6B55?@Kbvmbdpo\Vk{‡„ŠŠqrƒŒ‘Ž”Ž‹„‰‹‚ŠƒŒ…z~|ƒŒ‹…ƒ}}‚…‚}mfkqwtmjgttokijccl`gslijgdbddgekgcb][TX\[^\]USJIB8:?9451/129EGFcp†‡ˆ„}dfmpƒŽŠ‰‚‰‚|zsrurspmmeec]ie^_`[E0-//:\qzxsoQ$"4;I    $(1%"8@232( !# "  04+" %1,&#.2DOXX^YV\VWJhYO`^d^TOTNPbg[T`[IAKRPDJ]d`X^JYNBEKHMMS[MKR[VSOGJOKSa^Y=IOLX^^ZRY]UMXVHBFOOKQF0 %)+):8!$/JN/+"   - ## - - - - '28<78A93990/50,+9;&+#%'2;50;=153*1/5/36/-1)0*-3(,-%*+0%''%#'&    - -     -    - ! - -,.AJJJLSWC:*3;ELRMPUOHA!)@:5  ,TS>"$04HaefljrnmkdbX@?-/'+'$(/5',$3:3B]n‘Ž‘—–’š›—œš˜ £¥§ ¡£ž¢¤¨©ª¬ª¯©¬¬®¦¨¬¬®±¸·¹»»¾ÇÍÒÕÙÝâåèäÙÀž‹‰„ƒŽ‡„‘•ž¥©´¶¾½ÃÆÇÉÍÑÔÔÖØÙØÔÏÊÍÌÒÕÖÙÜÝàßâãáãàÝßââßÓÓÛÝÙÓÍÉÇžÀÉÎÒÕÔÕÍÉÇÆÁÀ¼··®©¥¤ ›š—‹ˆ}Š„€€z{€…Žƒ„ˆ†ŒŒ‹Ž‰Œ‘‡†Œ‹ŽŒ’‰Œ‡”‰ˆ‹ƒŠ‰„†…‚„€‚€|{{zyqlghbOH<2!% "!# /:>AGTQMIJC?B90$&&,($& (5.% #/##'   -   !$4/:?40.3% (-,(&)" -  -  - ! !#$!$&" $"$ !%!%&#%"$%")+'%1-,*+)$($'$(.1/1-15+)'7@ITOE9'++24KjlbYILCIA;C:=@Pkw‡Š†r]fl|‰Š{‡€ƒx||{zsqrpjeb]ehfbdVA301.:gzrjqkG ,3CQ      ''&(%5331!!'!!#$& - &02+!02(%,3?HRY\ZU[^^[_\^^\haYKQYVL\g\Y^_PJHKIPSgaRSWRNRPTZYXXcWNT\TFKULQCNYTOJCYNT]YSDMa]OS^ZME:@HE6 ++0<346&EWG/"   -  - - -!8>?@9?A@=8>:..,0636)2/564--17@<:8*/.78126/9:/)-1*(+,'+*"!"$$##    -  - -    - -  -"#!" - $,17HHGWWQI@, 2;GKBFLLFA23;74 *46,$$./40/651;.6QTB,)+(/CVE2')0Tew~‰’‘““’”’•š—š˜–œŸ ©Ÿ¦§¥¦¢ž¡¨ª§­««®®ª«¯°°³¸ºÀÃÈÎÑÔÛãèéëíïïðîíã¾’€†ƒ†’‰Œ—œ§§°·ºÁÄÅÉÊÎÒÕÙÙÚÚÜÛØÖÕÒÓØÙÙÙÜÞáäãâãäãâÞàáãÝÒÓÞàÝØÑÉǽÆÌÍÑ×ØÙÕÒÏÍÍÊÄÀ½·±¬©¨©¡š’Œˆ|ƒ~{|ƒƒ‰…†‹Œˆ—™””˜—––‘Ž–’˜ŠŒŒŽ„ƒ‡…†ƒ‡ƒ€‚x||xqojide`\M4*##$ '!)'.:AIPSRGMICE>8- !"## )&%+2+) '(+-$   - '-,21/+#"! &''*'.  -  -   - - " +"##$%%#' ",'&"!!*& #$/*+/+-'*,'&&+1,&*+381*,(99R^iS/#$.F]hpbZZVJJFGFH;AHBAFRWakmhgpl\Rjtt„Šˆ|p}†ˆŽŠŠ‘‘’ŒˆŒ€‚‰†‡‰}yur}xxrmjwwovy{wtmcbeebhnna_hccgkdhlhffj_di^URYUXUYSLLQTRF@=<956=@=@6<:Mj{‚‚†~h^_hyŠ†{vvu|rsw{vrnqohigdfadc_RC77300>amkoo`8,;NT        -  #.("!/8/("#!!"!" !) -%5.) 1400*3:>KPQILTWb`^VZ`gjh\T]b]KGTTLXZaYB?JD?MW\T^TVY[cdge^]_QN\X?BO\\K@IMQ`IQVOTROOOcbXTYND=DAEE0%12875'*FUA!     -   - -  (5ABCGB;;7:960.*0*18-23.,7;1711/>95510/69077004.#*1.&((%%#$$%&0,#     " - - -    -#!"""299@JNWWQSPA7%*2;INGCFRA3):C3  - &5%)42-/.6)*("$!CPZF.&-+/@MB0.,1=Scfcjihlab[KG>3(!(&'''&((/7/5Pdx…ŠŽ‰Š••”—“–™š˜ššž £«£¢¥¡£§¥£¥ª¬©©¬°®­­³¹¼¼¿ÅÇÏ×ÞäéìïïññòòññðíâÅ…|‚„Š‰™™£ª¬²¶¾ÁÇÍÍÎÐÖÚÛÜÜÞáàáÙØ×××ÜÛÚÛÜáâãäæãååááâããÞÐÒÛâåÞ×ÑÉÆÈËÇÎÔÙÝÝØ×ÙÔÑÑÌÆÅÀ¾¶´µ±©¥£ž“„ƒ…x€{…„„‹”¢§¬©ª§¢Ÿ¢¡ž ˜›—”š‘’˜–“–”–‘ŽŽŒŠ‡†‹Ž…‡‡‡Š‚€~xurqtpjficTA0% "!$! ##&+18EH]PIPLEE@8' &$%'# !042"%&'!$  - $/'2/0/'&%*-)9+ - -   -   - '"!%&)!"$%%(&+*"(! %."%&"#+##,+.++&&')--..+0202+ !!(8Gbqp`9)$-AGRcfidXPSMMFK@E?DI@CFGBJXnleajudWbm{†††~qs}‡Š†ƒ‘‘Ž”‘“’ŽŒŒ‡ˆ……{xxx{~€uwsrvytvvooujehlmkja]X^cgdgeehefifahed[TQSSS^VR]ZOQMA>D?6=>762:344Ss€„t_RUdt‹ƒ}tmmqjptssytlshgileX\aZNC590.,9\ou{iP) $6GIW  !  - -  -*0$ !#%62(&!"$ )+(05;-28;GD=A>DNQZ__[]cdc]TVaYI<98AS]]TI>HIAM\^chaWZc_cc`^]WRBGTJ:;R]VJDHR`\LQJ?LS\SX^MRQD59B>><-%$*2."&+@E)$+  -       /;?>AC>9?25172.*0594/3-/,674;@4/10,/4468.5+/(-/2)") !%",*"$%)-((  $"    -      #$# *8>;BEPYVWYRL;0)16CJCJKG3 #?@3& $76 -022$*-)*( 3QO>()5/-ENA2%10CWcghimkl^]SJ=3-%)*$'#4(%%09EQm|Ž’‘‰Ž•˜–œš¤ž›š¢£§¦¦¤¥¢¤ ¢©¦£¨«©ª­²°µ¸»ÂÄÊÓÙßçìïïñòñòòóññïîêܺŸ‰‡…ˆ„‰œ¤¬¯·¼¿ÀÃÈÍÒÒÙÙÜÜßâßããâàÜ××ÕÕÜÚÚÜáâãäèæææèäááãâßÓÔÝåæãÜ×ÐÈÉËÌÐÕÚÝÜÛÙÙÙÔÒÑÏËÇÉÿ»½¹°­¬ª£“‘‘Š€~wr€„š³ÈÔÒÌȾ¹±°ª©¨£¢¢ ™ž ™•–—™˜™••Ž†‰ŠˆŒŠ…ˆ‡€‚„n|xuvqkgffXI//*""!" &"%&*5FMJJOMAGGB5!$1+('115 !'+ '$! *'(/+*,' !/-5*+("     -   - -  # +) "!$%$!!%"!&! "##%'$+,%&*%+'*"))*"-5*11123-#!$9@JdpriB5%(-6Ofni]LQOPVT^MGAHG=?A=;K\irmhjpl[_s€…‹‹„oih~~€‰Š’Ž‹ˆ’—““Š†„…osƒƒy{}yuy|zzrzurlltxkigjjogYY`\^]aiedfdhb_ejc__]YWW\^\VVNMQID>?CJQXZeb^XXc^]XZ[L8-59E[TTLLRULKabVde\QW_^_ZVKQSJ=GPHGKIRTJIORQUNI@GOJGSRDELSG>D==5)&*/64&3+! - -     -  - -7;=@9AF=850&3/0./=<825496363::<30506332382068'01*&$'))$"#%%'/)+*     -    -   )" $06"16462-#&("8TV:.1DZ?'(.;J^mkfjhj]c^TC4,'$'#)**-./+0>Ueo}ƒƒˆ“—›”˜›—šœŸ¢£¢¡¦©¢¥§¨¦ ¦¦§ž¤£¤¤°³³·»ÀÇÊÒØßèìïñóñôóñóóñòñîéÝͶ›‹‡ˆ†‹Œ˜ ®®·»ÁÃÉÎÊÍÒÕÙÛÜÞááãáäææãÛÕ×ÙÕÖÖ×Ûâääçèæèçèäâááåà×ÔÞåçãÛ×ÑÍÊÏÓÕØÛÜÜÝÜÛÚØÖØÖÓÎÍÊÆÃÀÀº¶¯­¬¦¥¡žŽ‡‹€|tul~ƒ›¾ÜæçäâÛÓËļ¶¹´¬¯®ª§ šŸ¢¢š˜˜ŸŸ”—’ŽŽŒ‹‹Œ‹†…‡ƒƒy{~zstppllod\SB4+ $ "##)+=AKEKQEEID>5(!""&* **(.53$!'($%    - - -&"*4$),#,3',-%     -     - & '(#$%%'% $# #!!*(#&((-**(#%$#0$+(.5-15/()0-FgjtoS8*!9P`_RIQ[VT[iiYOKFHLCD?7Fbjtxggrpd[jq„…‰{cas‡Š‘”ŽŒ„†‘Œˆ‡ƒ‰ˆ†yy‚}uw‚{|||tyzqglwvpieflmiZZb_VWfeid\_db]]c`a^a_XVSSY[YRWVJH>;<:575.(0,30Nu‡ŠrY^emƒƒzvvtomxvuuhkigngprqrjh]K65,)/HSV -  -  - -  -  -"03,' &37('! " "  ,.10-+4:>>E><>?=1510*.+080=152;703?;9@67606-22,420:81-31(&,"%"+&!$ &%(   -  -    %# #    -&# ),9CE=FQL[UUURMG3))BKBE8!*  - -(F:990!&!,-+2,#! ?WZ=($/09MYL%)/:Shkgojmkf]WL6-0%!!%$().2209N\eotƒ‰ŒŽ”—œ›šš™¡¡ ›£©¦¤¥§ª¤¦¦£¥¦¨¥©¥§¬«±·ÀÄÊÔÜáçìíðòòôòóóôñóòñîèÚʺ¬šˆ‰•˜™¡¬°³¶¿ÂÅÈÌÓÑØÚØÝÝßâââäçæèçâÙÔÓÒÒÓ×ÛÞåçæèèéèçèæäãäæáÒÖáççãÙÔÌÈÈÐÓ×ÚÝßàßÛÝÝÛÚÙ×ÖÔÒÑÍÍÇÄÅÀ½¶²±¬«¤œ”Ž€‚zhyx|Œ¶×åêììëçâØÏȸ´³µ·²©§¦¨Ÿ š™—™’›•Ž‘‰‡{‚}~wvuzwrnsjmfbWF3#"!% !''.:AEIBAEKF?G?*!$,+$#$$&:.,% # -  - +-8(*#$+,-2-6+  - -   -  - - ! !!&#"# &$$&"!%!*% !)&('#'+%,,-*$'&#(-(/614.3'%IidmvgI,%8O\UOR`^TNYd_SVEFNJFA>AOYdwypfktk]ai€€ƒ“{kgr€ŒŒ•Š’ˆ‡‰††ˆŒ€ytzvz~~†xsy|ohcrwjghkirjc[[\]]^ebe_bc[UW^eec`XY]_RU^][T[XKC>E@>=<80,2225Vt‹‘Œm]akxz~~sstpt€~~mknggeilsroohWK=0-2.;DVgqv_$ $:@GGQ   -  -  -*/+) $.73,# &$ %%&-..('(1:A=:BCEEIOSWZV`[^_PEEWNE@=MZQG]hbQKXRYa^`c^TKRccb_Y^]PIMMRI?IOUQRKCEIIVOR_QXM?G\VRGHRB$ &0*"+G>3  -  -   -  ,>?>>8<>>;660-..*393337547558@@9/73..3542-81.+0,+,*//+%#%"!&)-$"+'  -   - - /' %    - -  - *5"! A=9;A9@JOSZgYWKD6!&AF=4(4FG:.  >BA>G;60##'!#,)&(?OX@*&-*>QPF1%6>Sifdmmlhc\VC9(&$$$!&$"!+-/7>Uspwx€Š‘‘“–™œ Ÿ¢¢¡¨¨¡¦§©ª«§¨§§©¨¥¦ ª¬««²Â¼ÆÒÛâêíïññòóóôôôóóóòñíäÖȶ§œ—•Ž“—£¨¯¯¯¶¾ÁÄÈÎÒÔÙÚÛÜàßáåâãåæçéççãàÛÑÍÎÕÛÞãçèççéééèçæããæäàÔØâçæâÚÔËÅÈÑ×ÙÝßããâááàÝÝÝÙÚ××ÖÔÓÎËÌÈÅÃÀºµ¯®¦¦ž’Ž‰ƒ~{yyz‘¥¾ÔæëïðïíèáÖÇ¿¾¿ÄÆÁ»¶´¨«¤Ÿ¡ž”—“’”Ž’‘ŽŽŠˆ…ƒƒ‰‚~|{|oosornnjl_L94# " '# ! &$57B?LLIF=LC=7,$2("" $.6/!  -  - -".3''#,+4//1*      -  -  )"% $$# '+&##&$&% !")$)*#**01/(%/%/(-1110-50&".JMPhwpP1'',>KPadeYONMPMSTJKC>@@IGR^ir|vf`qo_`ks€Š‘|gfmy‡‹’“ŽŽŽ‘’‘Œ‰ƒ~‚„‚‚tnsvy|„ƒ{}yrpjdjwhdhfkjkhddbbc]_`bYafg`^\_hfb`^`cWZdbbbYRIKJMA><>>?-/00/6Znx‚‡‡iTbhywtrtrjnxwvvijlidilekokmfaO5/.,/?SdkmkV 0HID@EHQVXPUVRTYY\UT\\OKTUNDLSXQSYOOPIRRXYRY^RLLQed^QNJTG>=HVaUTRQHDBYgeifZXVV[OCD/')*--& >SK+  - -   -   $6:68D;<;1/>6.*005/9:49184??;1;?>63672.17:.35-*./*0.-,%!! $&'(+./-,   -   - $"$    +#!  3MD>86;9BOWST]TWF4#(16"$6KK;*";DGOJHCC9!+''3(-JSJ3+568EPK1 ,A[fkjegmjhZSE<30''(+&'1+&+*3GXaj‚…ƒ‹‘’˜›—œ   ŸœŸ ¨«ª©«­®¨¥¨¥¤¤¥¦©©¬³½ÇÏÚåíðñòôõôôôôóôôòòðîæ×Ǻ¬ ž—–˜¢¨ª°³²µº½ÄÇËÏÖÙÚÛÞáááãæçææçèèéçéçãÞØÓÕÖÛàãåèèèèçæææäãâãäàÓØãèèåß×ÍÊÎÑÕØÝäääååäâãâáàÝÚÚØÙØÖÕÓÒÎËÉÄÄÀ»¸¶±¦¤™“‡ˆ‡…‚†–«¿ÔäïïðîéÞ×ÙÜÞÛ×ÑËƽ·±ª§¤ –”•––“”Š‡‰ƒ€ˆ†€„|yv{ysrlmljeRPB.(""!!$" "'#%-6GGGGCKIHC:3*'%&'"",-+&  " - "'!%#0-+,.1+&#%  - - -  - -$%#&!"#(&.$ $#")&$ !+-()(&%%,'-21.-*0/1+0%2332,")66C]qu\:* *@Zeb\[QQNO\OGJM>9>?A?JR\ipzociif^`l{Œ‰…quln{‹Š‰Œ’ˆ‡Š‡€€ƒ{mjlpw~y~ys}zuzyzymg`edhkniii`bc_`b\agfigkjghdad`]WWZfcaVSFGPUKC>:<52&0/),9^u€€zq]Zir{ƒxu|ur{}vyqghdecdg`beikea]F783/B_gnpkb> *.?NKNW -  - -  - - - %%'#&//'&$"!& " %% - #+&'-,# /600?DDHO]XR_f\Z`ZPUY]Y[ifdOIN^RPLOH[_PCJBFOTU[`UC@NPHP]UJ@DC>P_PYPJQ[QE?U__ke\WGPNL?7'"+654(% +CI?)!  - -  -     -9B>6A@<639005.+34g;.5926967928=943267./.2-(-*/00,1/-)*$('*/#%,31,  -    -  !     '  'UR>0#30CTP=,%)=Vlpkihbh\SE0/,$$%!)#+)'(.4;Bewxz€Œ’‹‘•——™›™›¢Ÿ¡¢¡©¨ª¬¬¯¨©©©£¥«¥©§ª°¬²ÃÕâëíñòóôôõôóôõôóóñðëáÓÀ´«žžœš—¡§ª¯²´´·¾ºÁÄÈÍÒØÛÚÜááãæåæèèèæééèèééçäÝÚÕÖÚÛÚàâåéæäâàÞßÝàÞÞßÛÖÙàçèäÞÕÌËÊÏÐÖÞããåççäääââäáÞßÝÛÙÛÚØØÖÓÐÏÌÅÿ¾°®«Ÿ›–Ž‰Ž‹Š†ˆ…¥¹ÑäëëçãèîñðíéæàÙÔÍƾµ¬§¨ž›ž›•‹’ŒŽƒy~†~}ntwtflih]ZJ5.(" !"! %!'.=AGGFFBD@C6%!)%)'.45.""($!)! &&/3(/--1"  -      #'!&"$ ))+ #"!'"% !%&1*'!(++*1%*3,+1./,024*.4483(,.>YmyiH&!2Tgfa[Y^[SS;8*31):.?_mz„‚u]dgu€„{}zwry|upolgbcce\^deicaaN>530.HimfrlU2#13DMIS]  -  - -    - ""'%*$# !"% "" 1.+%,0+$'2/2=BKEOXYX`fjdebc\`abfgieXX^YYdbTH^fbWXFAJV]Y[`bRTZE@KTW[NG=E`XHMIIPTGHR`KPf`ZSJ?=7&*0@=0'-'(NE/., -    - - 6@=;AD<=99;60:70-7(g038908<=7;=<91320732+),$(722*0+).,.!!$00)%!0-& -     -   -   - -    - -0EHF>5@?8=EKXYSWVR<;+*$ 0IMLE<,.,!13=$& ! !).,#"!   -&2-" ,-+((0<:?BCD@C]TQ]bW^`aig`^hc^fgdgZ_iaWS\fib^VEFN]XV]lc_\RIOS\e_KD:HOOLTMOLSXRYJ:AXT`H9:8!$1EC1$-/2LD***"     -   -6N9;5EC6<37328).245D\9,32=:=9?74;C4/6,/6/1),#*+-+'/0(,'"#'!'%,( #,(( -     -   %     -  -   - #8GMOG@==05BWRIRWWP@6 &% +;EHPDA0.' :LHHXWPMB>A3)('():YVB."-24HJ;$$.FZdgejfa^aZF82( "%'$)%(,)4Hgwns€‘—›œ £ž¢¨¤¥¦¥§«¬´®®­«¯²´¯®¯±´²°®¬µÊåìðîíôõõõóõõõòòîèÝÐÀ³¦§¢Ÿ£¦ª©²··¸¹¼¿ÂÃÈÇÊÏÕØÚÛßâãååèèèèçæâáââââåçæåàÛÖÔØÜÚÙÙßäâÞÙÑÏÔ×ÖØÓÐÍÃÌÜáßÜÙÖÑÏÓÖØÞâèéêêäâÞÝÞàÝâäåãâáÞàÝÜÛÚÚ×Ö×ÒÎÏÊÆÁ¾¶µ´ªª •—ŽŽ†„‰•£¦©ÎëïòôôóòóòðëêãÚÍÉÁ·¯§£¦Ÿžž™•Œ”‹Š…ƒ„‹„zw~†ykspnmhkl^R=0*- "'/4HEJNHFHJE8#! 6. $'+0'  $!'%)&  "  ! -33,,3($' #"        - -  -    $$%-# "'(+'! '(!%$(#((*,'+("31/.3''.(05:3=/1$!.9ShuhSE0 *,;S\TUZcgRROECRTCFI>7;@?HPfwrnpwui_gw€‹€…xdZ]u{y~…‰”Ž„†‰unywvwmys€ƒytqxupqtsvjjqwzoopnnogdgg__bfliff^acbhj_^`^VUUVZ[[\YTSTMKI:;77/(.4.->]ms~~ˆ|[\il†„…†{rlnqpffhnnlm`Y[iinhT=0+)16TRO`eG9  ! ,?LLIKX      "/ ! 31'#"!   &)$% +/7)$1@DGKCGECW\SSUS`bYc`WQ_aW[gf^b]ibW]Z`bUZ[UIJTVYQR[a_NI[NNc`QCBD>>VONPL_WLISG;=GSR:I>&2733$!$6QK6*, -  -  -   -  /59;><>?>8=;,*4",3786&/2346:7645==@;24442./,(-,$)+--'##)$&"$'*)!(/-  - -       -     -6BCPJ:6==8@KNNWQUN@"0'?SLKIC:31('@IV_UTHDAB-&8*2KOA'*1,5HB6-2B;=FTaqvilvwk`amuƒƒ‡xlg_iwx†ˆŒŽ‡†„zrvtrmrw|€xjqzsphrvxvhpr{tlkowriigqnmmgjjjeb`jikhba]ZTV\UV[ZXYRR[SKKC:;220-43).Fdtzz†{iRYep‰‹…ƒ„†oorpijwvtkajh\WcjlaR<81.*A[YZ]SC+,?IDGIS -    -!.  &5)+/!   $"##'11.&-9GLNLDRQRV^]`]hha_]Z\b^OSVRVX[ge\WOSbQNX\]WV[SICRagYV]UJQd\ZTIL?N@HO\]UVMZ_HJTILNH8!$3=5!!'$()DXF+%&  -      - 5<837<@<<167564'/89556:-5;87<911OE96452513(,$-'!'('%(%"  $%$+$#&")   -   -    -     -    $),@NPTA8DB:@MKVKHOK?*)'>LIJH@;<:4'9MSXNUKNC2#+% - ,LP4/(*2>G>').;Icbglkjf`VF1'!&" "'64G`mj„„›•–š›™œ¥¦§¨©ª¤ªª¬®³µ²¬­¸¼¾ÁÆÊÎ×ÚÚÒŸ°³ÐèëëõõôõôôòòïçÛÎÀ°®ªžž¡¤ §°²µ»¹¹ÀÂÆÆÇÈÎÊÎÑÕ×ÚÜÛàãàæèèêåãÞÛÞÛØÕÓÒ×ÛÛáäââÝÙÙÚÖÑÕÖØÝÜÜÙÚÛØÖØÚÜ×ÌÆÕÚÛØÎÊÉÎÔÖÛàãáÜÛÙÖÓÏËÒÓÕÚàæåççäãáàâãÜÛÞÜÛÙ×ÓÐÒÎËÈÅü¸®««ª¡““Ž‰‹Œ’”¢Ãßëðñòóôóôõóòòïèâ×Ëľ±«« ›˜–”‘’“ŽŽŒŒƒ„}xttqnjjonjk^RE5#" %5=IC??DEC8*".&%"+1! & (620/$%!+' &!#())#&()(!  $    -  -   - " !"! !&$# ' !,(* *)'*('#),37-%+*)/25.+26930! '.LmmugJ2&%&D[X_ZQY]XQLQECDJ=+&/@C2!(-%/EP:,-$  -  6?:6;CNPbntnfnpcZc|ˆ‰‹‰}wqhor{|„ƒ{wuwpeegsywls}rlj|tlquqrvtttsv}z{tvsrrvknokplhd`ea``YU[X[XUNNQZTOLLG@573/-&*!.Xlt~‚Œz_]b`q…~‚€rnro‚upvspjdbegckmoogN=2'$5=NZf^I0 $*27;@GL   - - - - - -&.("(28-# "%'"  -$" &02*(+7ALKMTNIQRafcX][V^cqtode^`mk_h`_i\KNVR^^VXU]]MPWUROTXVVBB^^UZIHSUPSN]VQFLXaTFHI=+%>9:0#"($.@@(&"  -  - - -  -      $9E?8@@<>;523.,,=3521753.-*.1:;2>743447./0)-+%*,0-(''1J#'(*(+(*#"%)%# -      -  -   &+  -  +) $7DQOH@CL=?GUUQSS3 - "&&>^UKQ\MH=0*,#/Q\TLYUXNB$ +GN>..'0;GF.!)<[\elfge_^E;2""*+*$#%-7akzs€‡›•”›˜¡¢£¤¥¦ª®¬²¯±³´¶´¹½ÂÈËÖäêïðñòòðæɵ¹ËèñóòóóòìãÕʸ°ªªž¤®¢¤­­²µ¼À¿ÁÂÆÈÊÍÌÐÕÓÔ×ØÙÜÜáâããæèééééäÜÚØ×ÙÜßßÚÕÒØàãäâßÔÊÍÏÑÒÕÖÛâããâàÜÙØÜÛ×ÈÆÊÓÔÏËÉÌÎØÚÜÛÛÚØÙÛÞàÛÚÓÑÕØÞäååèçççåããäåäáãàÞÜÛÛÙÕÖÔÑÍÉÃÀº³´¸±ª§™–”Ž‘”Ÿ°ÁÕçïòòôóõõôöôóóïëæÝÓ÷¯©¢œ Ÿ™—Ž•Œ†Œ†ˆƒy|yztqwlrqllgb_[LB2 +>A>II=DABA1,"#!"+,$ !*/2/0%%% )&!#*/.*0'( !% (*   -    - - -  #%# *&#$" !$#%"$'%*&%%)$"%.*(")'.6)..,)5/33/6474&-`z€kcK2+&4RWZZRMZb_JRRMVSPP@89GFDKYrxpdnsh__n…„‚€ojbhzƒ‚yu}€{qqy|noqrwypq}~jlv|zqorrsxtzyjgn~…wyynutquzsrrpvhhfiliXTX\\_YWKMLPYJILA:704111%9Xx‚€ˆŒ|_\cey…z€}}rqowxosrrwjefiihitut_H90*-0D^kiU@%".2/8AKP       %&"19,"#"$! &+#"(.,%$--8DS_YOTQV]c]Z`ZU]disqke\eoi`_bgk_\PLD_f^WJVb\ZVF?GHHOT;6?=Q`^YT]WQKQMIL=FTD;>??, $::2%! &6?2"(#   -  -    -6==A98??::8-,1,13>=64;49:6469514/5444592+-&+*/),&0())0%#$%,')(*,-$.)#    - -  -   1:#   - %''8GTPGHbw|‹ŽvXeif}x|‚ynp|ƒrsutqomjcgjijvwnYE71&.5N_c`Y@ - %-)(2=@H -    -   -#"'0/% ! ! /.#&-./('01=BLMPVUXd[addabfhijlqgYajf[[Wda\V]TDLVZUUV\]ZPNHC?EQ^VEGHLNHGEVD=HE99?8'(.786,,NG,(& - - -  -    - -  -";?BBD===7954/%371:<28638==99<6<78185457.+*+*&%0(%() $*%&,/,*"!%)-',' - -  -     -  7;3   -  !!BIKOEDDDBIIRSL7 ,",^_fbhd_OPA+&& &!'-*)4EUhq~€ƒ‡Ž“–œ–˜™œ¡ž¢£§ªª­±³µ±¶»½ÄÊÐÖßçîñôôö÷ôöõóñíÑ´³²½ËÖÙÑź°©¢¡¤¢¦­°³·¼½¿ÅÄÉËÏÍÏÐÒÖ×ÙØØÛÚÝÝáàâãåäæçèéêëêçâÙÔÔØÝäçèçåãßÛßâääÞÙÖÕÔÔÖÔÑÒØÛÜÛÚØÚØÚÔÀºÂÄÀÂÊÎÕÚÝáÞÜÙÖÜáãääãáÝÚÛÞßââæçèèèèèççäåèäãåäâáààáßÜÝÚÔÐËÇÅĽº¹µ±®¥¤¥¢š¡§«¿ÆÓâíïñóóõóôõôôóðéÝÔÉ¿¶¯¨¦Ÿ–”’ŒŽˆ„z~{p{omnrmrjhegYF2(# #%#')7?FGABF?<0$!'"*2713%),4(,/,'+4,* " *%  - -  -  - $!" &&!!'$#!#"$!#"'"+%"&0**/0,.-.*./02052??750(%Ogtup_D,%*:KO\fcdaQNFIOEB@?7-5::>FM^svhbkrgZ_or}ƒ„ƒ€m`gp{‡x€ƒ…{~ƒ€…||y€€x€|ux‚‰„‚rnonsrsqy||yqqm|vrxtu{v~vpoole`da[_edfdVZYSNEAA<6/,/3535Gm€|Š‘tZjjm{~ƒ‚~yzqosrsplpjfjhkprqgO<8.*7Ifkkn]8 $,,,019@ -     ,("&05(# " */!#-*,1%.47:<@JSLLPU[\]_^bhlecab^ccifXJMQ[\_YG;DNNMJLGQMBK=?G>;:@KHSJSR>6IOQRKKOSKQTI231$(9?9:(EO6/6*  -  -  - - -    .CCCCG@;7;97.-98<9@;>6?D7>;?8@24;?8;>5,2)%,!)*&'' !-&,#&+,(*-#.'#/)#  -       -   ":9=(     )2CLQSMCG@CKJK<# -85CCOcWV]^WQI83;2"8GOJX\PXB*>QH90/.7EG+$ $D[]_pg`aYL9+$$"%(.7Feo}w‡’Œ‘“–—œ›¡£žŸ¡¨©­¯¬°¶¶¹¼ÂÈÑÜãêðóôõøöõøõ÷õôòëϲ¬­«®®°ª¥£¤› ¦©®³¶½¼ÀÀÃÅËÈÊÎÔÓÔØÛÙÙÛÜÛáßáãäââäçæçæééêêéèãÙÙÖ×ØàåèèæåäááâääâßÚ×ÒÓÍËÈÇËÐÐÓ×ÕÔ×ÔÍÀ¹ÀÆÅÄÈÐØáâäãÞØØÞâåçåäáÝÙØÚáãäæææééèéçéçæéèåçååæããâãããÝÚÖÕÐÎÉÆÀÁÀ¹³®¬­­®¡ ¡”©©°¿ÍÞéðñòõõöôöõôòñëä×ÆÁº³¥š—–‘‘‹‘’‰…†‹ytoiqnkkigka[S:)  "*08?>BD@>C6&#((( -895+$!',6.*01&   -$#(/%"## )0*OY    - - - $"'(%$ ! #""#"%' !#"%&+/&)41*/+)23/35/*0,33AA?<2-!/TjppqoR?$$-:HbedebV[OUUDB?;949>::EF[nupfiupdd_w„…ƒ„ˆyc`k‚|‡††yz~ˆŒ‡~„†ƒ{y‚…ˆ…€†rq}~z|tu„z{pmxvqwxsw}vwwuw{uggj[U`lga\Z`[LJKC>730/1636?\sz†Ž‹kbilq{{„‹‹…wlqsyukombfhiiorogfJ840,4Tw~yc;   ()/,.7;?  -    - -  /7* #07,' & !"!  ,,"((#)$+687GCFNEAHRTMPR\flp^WPVccela[]TZfdfXMIGP]SM@JLPEKN;EE>90:I_YKRF>NOK_WKX\UWNB:G$)<;93"% &LM-(,# - -    -     - &:CD?ECAG=<=1'!38;:>845/5:;9889>>62@0A9951($#!)$,)"##,.(*-/$)0(!&,,0#  - -  - -  - -   -  -641.    $#".>GSNI>@5')9579DJEZb\]b\QJ;:5'!4E\U]YUWR5*KLJ5,.+5=4' 2JY^daj^[OB1/ ($&!)6Sdlq„ˆŠŒƒŒ——•™žš £¤¤¨¬§¥®±¯°¸»ÁÇÌÕãêïóôôõôõõôööõõõñìͲ§©¥¡¡žŸ¢§¥«¯¸·º½¾ÀÃÈÊÍÏÏÔÕÕÕÛÝÙÙÜÝßâääãåãääèççèééèéèèåâÝØØØÝãæçæããäàßãâáãÞ×ÓÐÍÎÐÍËËÎÐÐÒÑÓÎŽ¸ÀÆÍÍÖÜßäãääáÛÚÚßåäæäÞÜÔÖÜâãââãæèëéèèééèéèèéèçéåçææåäâàÚÚØÓÐÍÇÇÅ¿··´³°´­ª¤ž  ¤§±ÀÊáìðòóôõõôôôòñïêàÖË¿®©¡›œ™‡‰‚‡›ž“‰yxqpqoejhid]]R@,&!! !.461H@CGA;<.""  '&  05@9 !$*/13741+ '*)"&$$!%/3*! 0 - - - - -    -%#!"-!"$'(#($ %#%# $#$-%#1+&*-0('+1.662%+2/=;BH=692+5Uourxujf(%)3G]\YRMXXNVN>;>A=<<98:89Maxwjfkti_\}‚z†…‹yf_o…zy……u…‡ŒŒ‰‡€‚„‚‚……†‹Œ‰…vu{}†…†v}{€xvtvszxu|wr}y{vomkiigficc__YK@HNG;77,+4,/5Gcrs€ˆ†Y[inxƒ‹‰‹‰}qmmwyrkmhbbahjiqoj[@<.(/6Tny{s\7 ",.0)1;?F -       $15' -3-"#!$! $#!")*) #,3=C@>FHGPSUXSEJ\bd_\ZZeXbkegcdidc_QPLKDU\TFIONNXVFHUUH3-7HRND@DOYKTQEMVUIG=4*%8=.$4NC")) - - - - -   - -  -  3BB?AH<<;9<33,1-6;698328;7/4267?@@7:?538851-$%&*&,)% !*-(.1&.+.*%&/)!    -  - -  -     )765  - $#$6?KJE?2)/7;+ -%8E=6(:7'#):XV[^\X^D;PD/"*40F9!*7AY`bd`bTO;.&$"  ##!#'2%&$(.44576.,#  - (/*''& ',.$!       - -   - $$-$ ''%%$#%$""('$"*,3*"*)-,,*68/.08963>JE<56403NjuxqxoV6*#1F\]XQQUOBE9BH=J?:>6;?;AN^uwkbkrlaat~€{‡}nkn„†~†{„‹†ƒ…†…~†‹Ž€qvŒŽ„~sqƒv~€xwjxƒ‚ror„‚}uqppq~rntplif^N;=CGE966*$+..,Gn~s{‚sRaow€…‡zsofjvqhfhnllkijptqjW783% 1Nnuo]R3*+.+,54BN -  -   - - - $&$  #/1+!"!!!" !# )5'%&+7BBFGKIJNRX\KGKRPOW^USYiqgjodb_]VMRMEST[a`NCPWYTONM]N6,6?PXRIDJQGKZLHEIMFC2!-==1 )HS5(  - - - 32   $;><$ #4CZ^eiecZJH5("$"# ( ))C[erz€‚ŠŠ‹——•™œž£§¦ª¯®®±­µ»¼ÃÍÕÜåíòóôö÷ööõøø÷÷øöõôòîàÀ¦ž¤œš™¡£ª¯´º½½ÁÂÇÈÉÍÐÑÓ×ÙÙÛÝÛÞààãâäääåååæçèèèèèèæäáßßãäääãàÝÝÞââáàÞßâããããããáÚÖÖÕÒÓ×ÕËÄÇÈÇÄÅÌÈÆÓÙÙÚßâåççåçäÞÜÖØÞâáÛØÕÙÜàââââßßäéèééééêèééêééççèæççèçäãßÞÜÙÚØÖÐÉÇÅ¿¿¼º´³­°ª­£ž£¨«¯¾ÏÛèîñòôóóõóôòñîèÚÊ¿·«©Ÿ”“•Œ†Œ’Ÿ¡“wyspolnqkkab]XMA-#%!%-135>>BAA@>&!"#"-7?84$)$%"(1..6794;&  -  ."$$"'#(20"  -  - - - - #"!! ! $*!"'! "!!$'&%*("(0-%-(0:4-3.2,8GJ;01782,;bf`jzl`G-$-A??379.-(30/Ts„zsx{hVdso}‚|vjgikkljmrpffkpjms{ohL79/&&1Uruf\Y2 - '+-)(23NN@07FOX\PHECHTU[YF:@CA,$0>?3%)",CK+"      03  -  - +9=BDA>C=;41157.195:9@@;3593412855;:B::>780%((%&$)$#$!+53%(1*&     -  -    - *62 - - )-"4:NKD0++& ,;WYWR?!&2=QXbX[aVRMB3.$-EVWb[bZTD0+30@=%1L_a^hddXK71&))#!!$(Dder|…ƒˆˆ‘”ž”’ž¡ž ¤«­±««¬´ºÃÉÑÛåìñóôöõööõø÷öø÷÷õôôòìßÇ´¤¡žž¢¥£®±´¶¼¾ÁÃÂÄËÏÒÓÖØØÚÝÝááßÝââáããåææèçèçèêëèéééåââáÞáâäãàßÞÝáààÝØÛàäçæääããÜÙÙÖÖÔØÛÚÕÐÌÊÎÌÍÇÅÏÚÚÙßãççèèçæàÙÔØÜâÞÙ×ØÜÞäÞÜÞâãååèéêéééêèééêééêçèèçèéêçæâáâÝÝÛÙÕÓËÌËÉĽÀ½·´¶¹±§™™¡¤¤©±ºÈ×äíòóòôôôôóòòîâÙƼ¶©ž˜•Š‹Š•› Ž~uqsqqqgjigcj_[T;-! !#-:63?L@B>9' !'#.3@;2,#! $*4*/599?8'  !(##! (--  -  -  - %     $"!$+*#!$$$%&#%($$&12+3+263702=GB72019<-6PQ]owxnV9$!1@@?:JIQgskhnyyfcov|ƒ‰…x|lpv‡~~qv~Šˆ‚†‚††ŽŒ‰‡ˆ‹ˆ‚‡‡€ƒ‡ƒ†ƒ‚ƒˆƒ€}wz‚„{|ƒtt€|spmqmdhmjx}jhhPEA?<76<30+,0+;YtznooaIKgiiu……ugnvvmrsqrj]]ed]jz}s[A?7$!(EdtyooV  /0-'/+6=H  -   - -  - -#!  -30,"!"   - %)#,.''-)4?>FHLC9BQSLSVIOT\`[_b_]X`fgdd^_[cZ\YS\]PTLZZKTOB><>>BC=EKV]NB@C<>BJTP=9D?(5JG0 )%%13.#*" -      -  -  %>;>?40696@776=:>?9>:42/6829>==<861.#%!&)$/,  '/*.#$%),71'(#*& -  -      .-04 -  !"&2;NHC)# 2Q]eg\G2#&9CTb[Y\VURE,*##ENQaVYVT<(.**8<**M_f]fjcVI?!(" #1@]tuƒ‹‡Š‹‰’’”™”›š¢Ÿž¥ª¸´­³¸¿ÂÌ×ãêïôõõöö÷öõóöøõöõôóðïåØŹ¯¨¥¡›¦©¬¯¶¸º»¼ÁÁÇÂÆÎÓÔÕØÛÛÜÞâãáãããããäååçæçæèèéèéêééèèææäáÛÛßàÝÛ×ÛââÛÖÏÖàææãäãàÛÚÙÛÚÜÜÜßßÞÛØÙÚÚÖÊÈÓÙÛÞßâçææçèãÞÚÙÙÜààÛØÙÝàÜÛÙÝäãåæèêéêêéêêêéêèêéèèçéêêééèææãááÝÜ×ØÖÐÎÌÊÉÅÇÀ¼»¹ºµ­¦¢¡œŸ§«°·ÁÑåïñóôóõôôóòñéÞÏÄ·ª œ”Ž“Œ‡ˆ‰˜}{{trqjfghmla]b^YK6($#'-)/6CBB87:* !#&/8=42(!*+07=C>@?/)"   $,%'#&+$!! - - &"   - - !$!&$%%$"%%$##),"#%$*#!&('3&,-(66-00;AF;1?4-6A614G[mwsug@)$'5GZa_]^dc``[YJ=87,+4:?CLYr}qnpvu_erz€‡ƒƒ‚yiglxz|‡Š‹‰€~ƒ‰‰Ž‹|ƒ†ƒ…‹ƒ~„…ˆ„}vx€xƒ‚…‚ƒ{vr‚|~tpuffkkvvmojdUOI><@A77*(420=`qroso[ITlhs€„‰‡zuyyvyzuhkqiaa^d[fsunV@21*%*Li~wymK" -  ((&.2+98A      %*02*"!  !) -0)&*00?KJINJMMNONKQTNO\da`a`_TL_ZSVaUM_dWLRSOKIGOVF=F?IB618FAC>SWH@?HB0%5FJE=B=!.7A8#'/@>!((      +  .DGHY7/=A6<@E=<8?459>13-358:>?<:25/+%%$%#&""+*-')($&-95.-  - - - -    -  !)21 -      ! 4DG=  --AZedb`I2""/?Ucd__]URG312=PS^X\U9(..891 ?Lac\`daTEA,' #,L]l~€‹‰ˆŒŠ‘’”˜˜™›žŸ¢§±®¶¹»ÀÉÐßèðñõõõõøùööö÷÷øõóòðìãØÉ»½¶®¬¥¢¨®³··½»¼¿ÁÄÅÇÆÍÐÔÖ×ÚÜÛÞâããââäåäçççççéèèééééèèèêéèèèèåÝÙ×ØÙ×ÚÛâßÙÖÓÔÙÜââÞÝ××ÔÖÙÚßßââââÞÛÞâáÝÑÌÐ×ÚÚÜÞäãâáâÜÚÙØÚÞàáÙÔØÞÞÚÚÙÝáââåèééêëêìêêëêìêêèèéèéééêèèåääâáàÜÜÚÖÓÒÏÍÊÉȾ¿ÀÀ½¹´­§§¤¡¨¨ª¬°ÃÒßêïòòóôôôòðîèÚʼ­¤š“Š‰‚„‹u{v~mtlnshmocfdhZRK9%!!&+03@D@=@4/$! )&++621' #'10:C<4;-3(!*"  "#!!/,   ,$      !!!& !" ##'%,,%!'"#"&''-/)*,-/+39163:CB64772=:6..1=Vjxu]5-'5FMSij_Y\`]NLA==.-9@A67Cdsz€vqmhicmzƒ††{€yj_dvƒƒ‚‚ƒƒˆˆ‚x…†…‡~‡‡‰‡‹‚„‚~r€†|y€€y€„{~ƒ„ˆ|zvux{wttrrsqfloqrnd\YL?GH57++(10.8]vtuuss_\ims„‡…vmx|z€€yvvtpginkgknimo_H7/+*8Yp}upcC  -$&#%*29<8@ -    - $%!%151!  - - (!).-*&,57?IKLJLBIX[OIJMSWgj\^Z[_S[SRZ`UN]WTHSaLRJESQ_CKPQHCIHKFA:MV=@NTD3'&:IJ@@4#./2*1(B@ !      -  - -   1,#$1QWZVK8'/53G<0P^_[c`aU@5(   ,&$5Cdmz|‚ˆ‹ˆ’’”—š™ž¥ £§§¬­±º¼ÆÍ×âíñôõõöö÷÷øø÷÷ø÷ôõòêàÖ˼·³³¯¨ª²¯³¸·¶¸½À¿ÀÁÆÉÌÎÒ×ÛØÙÜÝàââãääãæçæçèêèèëèéêëêèêééêééçæäáÛÙ×ØÚÙÚÛââÞÛ×ÑÎÓ×ÓÔÕÑÌÉËÕÛâââââãâÝßàáàÚÐÏÓÔØÚÜÝÙÓÔÔÑÍÕ×ÚÞãßÚÔÐÙÞÜØØ×ÚßåçéèéêêêëëëëëìëëêëêéëëéééèæææäãâàÜÛÛÚ×ÖÕÐÍÈÉÈÆÆÿÀ¸³°®©£ª©¨¦®°¼ÑÞèîñóõôôóòðìãÔÁ­š•“”Ž‰‡ƒ}|xuvptsmotkgehfe`_^G3+"3-20@KAD>@4!#!$11/0'"%,3+90(Jkrvv_:)$,:1(1EVuzlk_; -*4/-244;>< -   - -   -   -   ---"/72%  %$#%++%)449FEGMGCFRSKJGIZX]h]aaZW]`\\b\XXPDECD[TNF@@I[Q?=:7AMNF?JOSPJESYH<:0?:7#""+-3,#*% .1:<>9;750**$&".1/& -  $' - -   )%#    -*%#)(/,$  ""%"$%%(% #'& ! !'#"&(*-%$1136.3>@412:CC@?71&'9LRir`C-#".G^ghc_e`WKPUKGKD8-,6JapvfgU+  )0-252-4AB   - -   -  !(,'31*# ''"*)" -06DAAA44HONF>AIHI@5=CDD0 *3%$($Y[`ZV\VMI8  ##*8Vl|xw‚ˆŒ‰Š‘Œ”šŸœ—–—™šœ £¦­¹ÂÊØâíòôõõõô÷ö÷öôöõóòðêáÓÈÁ¹´µ²«²µ¸»¹´¹¼·½¾¼ÁÂÆÇËÍÓÑÕØÚÙÙÝÞàâãäæççèççèéèééèêéëëêêëêéêêéêéåáàâáÞÜÝÞÞÜßâãááÝØÏÉǽÂÅÇÊÑÕÚÛÜÛÝßÝÜÛÚÛÜÚÐÊÒØÛÙ×ØÔÌÈ¿¼ÀÉÐÖÚÝàåæäßÜÚÜßãâßÜàæéèéêëêêêêêëëêêëêëêêëêêèéèéêéççääãáâáÞßÜÙÙÖÖÔÐÐÌËÉÂÀ½¼º²´®ª¥Ÿž¢¦§®¹Ç×éîñññòòòðàÆ«š•“Œ‡‡‚€€ur~xqvpqolmjlfege_WSI-$!&,-,::@@BC2 !+*5&*+!.9;5=0291/1Nkr~„Št_fit‚}~pkuyqxuoifoqnrrxvtsy€jJ?2+*6Rlsplb? -  %8?>B@3/;;? - -   - -  '   +.&!%.*   -&%$+'%-->@@:<>?;;KVZRQO\b`cbbVY`dh[NNOONH?FKMNJ>A73DNG@24748,'9BJQE98KUJ?=<<3$$/7&##7O<20  - -  - -  - ,>H>@=>LL886;3)/;JE>=E5-1168<2-<3155;8D9%! -  -( 21 #DMTJU^_cb^\I8)(;R\\]d`a[TE7/&(6JNF,F-=/!(>U`b[_YRI;2"$!$>Ysp~y‚‚€‹…“Œ“™• šš¡¢ž£¦©¹ÅÓáéñôõõöö÷ö÷õõõóòñîæÛÐû¹·´±®³³·»¼¸¸½ºº·½ÁÁÁÆÇÉÎÓÐ×Ö×ÚÛÝàÞâääææèèæççéééêêéêêêêêêéèêëéêéçãàáâãáßàáâàßãßàÞÜÛÔÎÊÅÂÄÆÇÊÈÅÈÎÏÎÎÍÍÍÍÑÓÔÓÇ¿ÆÍÐÑÕ×ÔÒÇÆÈÈÌÒØÜÛÞääããäàÝàããáÞàãåçèêêëëééêêêëëëëêêêëêëëëêéèêèçæåååääââáÜÜÛÛÙ×ÔÓÌÇÈÈÈÁ»¹¹·³¯©¤£Ÿ¤ £©²ÄÖäìïðñññíßÂ¥œ’Žˆ…‰„ƒ}qwƒxsulojordellc^^^K9$%(%*7A?BD;+!%"!,'&'*47:?;>:4460#'#&+/403& - #    - )36%  -   -  &&"'-40"*$  '+ ""+&!$- #)$,/(!!'$ ,6.1747?8788>>6<@A@=.-($2^puynN7&+.?Vkp^_^HMTOIIAHHJC>?CNW[z€{thrmbahyzz‚umYXfqo~„„ymu†„†{{|zˆ„Žˆ†ˆˆ†ƒŠ†…ƒ‡~uw‚‡Š‚v~€{y{ƒ†rupuƒ}ttvtjdmwrngbba^`fcU?=70,3317Xmt|„€l[``}ƒ~prnu}qiknhvurqlxyip|{yeJ;2(* -  ,>:=ALJ?MUR_]\YSaieZSW[[_NNQABKB2=CFMFA:27;EK>+4:?:38GKLMC?EOFI?;61 ,1&%*EN4.*!     -  %;AJC@CI5MW753/369BI<:;B548696.0870-/6957.6&&%'&##'"##! '')$!" ($    -'346(-+    !&! -*>>*    - -  *;#3NOKOLY`ba[[YC*)CUZ^ba[Y_WK=($&GX@0.4$6Qd^a^]TC4  &"6Zgy|ƒz…‚ƒ‡‰˜”–š›˜š  ž¥­­ÂÕäðòôõôôöõõøõôôôñïåØËÀº»»µ¯²·³¹··¹¼À¼½½¿À¿ÅÃÇËËËÒÖÔ××ÛÛßàâââçèæçéèèééêéëëëêêêêëéèéèêêêéæåàßâââáßßàÝÝßàÚÚÛ×ÕÏÊÆÅÀÁÁľÀ»½¿À¿¾¼»¾ÁÅÂÂÁµ´¶¿½¿ÃÃÇÄÄÃÆÊÊÎÑÔ××ÜÜÞßÞßßàâäãââäãäåèéêêèêêêëëêêëêêëêêéêëêëçèèéçççææäãäâàÝÜÜÚÙÕÔÔÐÏÐÊÇÂÂÁ¶»¶°«©¥ž¤¡Ÿ¥´ÃÐàêíïðïìÛ·¥š—‡ˆ„tx~sxvsrqppnlhni^][OC9* !%'+1=?<;7)"!#**74=?8=?<2/1,)%+*.59,*'  -      -02. -   "# )8<8:7-!%%"!  $*%' ! '!!/) #&' #$#& '*)5:4945<77?=D17DA>76+ D_q……x\8&+EWml`ecQRVTTLCHE?D?BEMK^ir~oknqgVcmtsqlf][^fs†„uw}~|‚yw|‚…€|‰†‡ƒ‡„Œ‹yw{…†‰‹‹‚zv}{snsxzqxtssplhkqymmechj^__UH>;24248.:Yhrz€ƒx_Q`gvv|{rnotorsrvperuki{ynpaI;1$/>Up~yqh@ - #3?DCGI@7:>@  -   -    --:3$  ",0$!   & '$'$"!(.438B:AIJKP_^^aZHOX[QYZMRXVEK?3:>787CFMOA>:6;DD?5>B<5:FKE?EJODCJD@9(!,.& 3ID/,(  - -  -  -  -  '=@D?A?@:4A@;5/2;><@@<;B>=414<<:;E=F=AAdmwŠƒxoLLghr{}xsuttxutrwwvvrqhmrx{xpiZ>4)(0Ee}~xw`4 "04;?EB<<=8>  - -  -   -  -  !.-'" '02+%  $'! )&'($--/552:8:AOOTcfUZ]ZPFPLS^PJGBKLPD;FPEED=IIQC=>;?5,9=8C><:>9:DB4 &.-%%(EE/(-*  -   -   - 5ACA?66A@;4---759B:9>A;HH9708?99022=42746,(.2%)1+  %$'((+% !-  $ /12#%%  &".  '/;   ",/ID56FOVV^[cdZU92.BMW_hd\WcT@+$&'0;608+BJUV\cYOF0"5/02=BG[l|‚ngmj`]fjjpgifjceiu|}zx~}xx‡‰ˆ|€‰Š‰……Œ†yww|‰„‡€|rtz{vtt}}~yxsswtqwoqstsj^_]WFIH82(-468.>fx‰‡ˆ~fHPkr|„ypsplxuquts{„€zwfnrtklplS;2')0Km}wnlQ'    ,.,4<>5::7B - - -  -  - "$"*!+1-""  ! !*+%!"+,-668578AG@>8*&/6E=9=EB4;7'"*(!%#=PL.%( -   -    - - *BBDGG<<:<::513138@<<<566=?26686832;46,-24*)*(!#,.-& - "!  - #  *+!   #& - "21  #" - ,! <:,&;HTQYbgfbZ?51;LV_efebaONB9G1);:7,$:=E:4,--+*)/+47.2'%    - #)("   -"  *04#)./-)#)23+" # - #%$$ !$&'&!+/*&("%*,*'(+-25879?KIDD9;>B9>=6%/b{€iM6)!2C`ptb[WVTRQMCFI92-0C@7EVix}zlmsn]^ahloqnpc\fsts{„ƒƒƒˆ|„‰‡‡‚„„……‡}z{„‚y~‰‰…~wxy~zrzovysxyuqsnlprloqsge^YULDD7.322,97-Bjsxˆ‡rbPanv…}xppswxnuvustpjuytmleiproL;7+ 2Xhqnrf>  '***5:919A>C    -  **& 04' .#  !$%$)%" $'#2>A83:JUV_^ba^TMMSTWT^ZQGMQHGD<7880//3A;?=5>F?5:@B<75-/6=657=22).&,&*2)#$++** -    -!$&!    -  % (%   , ,:& - 7L\ffcih_M;4' !&&/53>;<CBI  -      '%" *3+  -  $! '($&#!(3:=5EPXYSNLMMJHOMWUMVQFLLG@?I@83>>95ER^dh]ecgdhdljL>. AU_]U`]KB:'".Fbkpq}{ŠŒ‹†ˆ‡‘˜•š›’—–™¢¦²¿ÍÜæìêêñóôôõóððêÝË¿·°­®¨¦¥¬±´¸¼½»ºÀÁÁÈÆÇÇÆÉËÊÎÐÑÓÓÕØÕÙÛÛÛÜÝÝàãâääãåèæééèèééçèééçèéèèãáßàÞÛÕÎÈÈÂÃƽ¿ÂÂÁþÁ¿ÀÄ¿»¼½¼ºµ«¬´¬°¬¨¬©®¯¯²°¯¯­¬´¹½·®®´·¶µ¯°±µ±®²¯¯¾¿ÂÁ¾ÁÁ¿½ÃÁ½¿¼¾¾½¾º¾Á¾¿ÆËÒÓÖÝàáäææçéêèåéëêëêêééìëêèéìëëêêêéèèéåçæçååãããßÝÜÜÚØÖÒÏÉÇÈÀ¿¾·²°¬ª¤œ”ŒˆŽ†Œ¬ÅØãç×°“ˆ{vƒ}ƒwxyr{rsqumhimohhf[^\TB(#"&*16>C:<3! %331<=@A>@?<2+.++//=231,$     -  %!  #!!  %"$*<>C<47+.179* %!%$*))+%&!%&,%&,%'$%!%'('34200CEIF@G@?<5<287%)O[ovqgI4();LPPQPTZbf]PNJKEC@EB:AFZhlx‡zs{s_V[Zhilqsb_m{|ˆ†‰ˆ}voz|ƒ}†ŽŒ…w{…ˆƒƒ|‡‰‡ƒ€‚ƒ€w}ƒ…wp}€vlcfahmpuiYW`[O@?:5*"&139>5Mfrƒ†‡gYekkz~‚wwohfoxvytnnmpskjorkleJ4-)(:axwuwg;   %++(/0349@EJ -    -   +,(!#/7,  - "&(#-.!!&#$-4=@IEFIJMHHPRUR[PJOQBDJAA=>RHKOA5).7@KSKA975.7F>78BA<;E9;>;89, %&('1#"7RI+# -     - - -  #<@BBDD=78:603-488AC@=@DBB@A?844)12-.254',(*$+'"#01)$*++(% -   -  - -  '0$" - -  - 4 56"  >MZ^ojmf[E;;GS\ca`cli_bcheI0/QZh`]aOF2'"")H`mprˆŒˆŽŠŠ—¥žŸ••ž¡ª¹Å×æîòòðëíóôôóðçØÍ¿««¨¨©¨¥©®µ·»»½¼Ã¾ÀÅÆÇÊÊÉÊËÎÑÐÐÓÙØ×ÖÛÛÛÜßßàááããååååçæééèêèåèççéèæããàÝÛÚÓÏÌÈÃÂÄÄÂÃÁÁÁ¿¾¿½¼ÄÄþ¾¾¾¼·®¤Ÿ¡«§§¥¦¢¥¡¨¤¨¨§§£©±±©¦ªª­¯®¬««­¬§¥«±»ÀÀý¾¿Á¿¿¿º»º»»¿ÀÀ½¼¾¼½¹¼½ÂÇÌÏÕÙÞàãåèæåæèèêééêèêëééêêëëëëëêëëêèèèèçèæåääááßÝÚÙÙÕÎÏÊÊÅÃÁº¹¶¬°©¢žŠ‹Œ•”ž¶ÄͽŸ}…„}ttupruqpsrmqrpegd]Y`Q9($!$0188?=82& ,>@55=ID:::3-)850688//*   -   - - - -   #"3@GCIE@==>=6==1(  $"'()(&%""#1)&$&%)#$!(%+//60-8:@I?AFAFB;99>>9. "2Afz‚wf;",0AM[_c^_][\XQLKIFKF=@FGHUbr{ouwl_\ZY\fs€zrko€€„‰„†‚†}oqxxp{ˆŠŽŽˆ„‰‰„ƒŠ‡‰‡{}|ƒ~{||t{€‚„€|…nnmokiimmbY^`^XK>@<55;9;02/.'"'!(#7OW5#   -  -  - @ 1EEHBG>6:<52-0$,86999;<9=@@D8;8;11240753/(('+#$,."*/,)*! - -     - -  +,"#   - -   - - -4,-<' +8H^djdjibT?1CNYghfhhjccaaA'3O`^aYVOA6)2Nfoovx{„ŠŒŽ‹“’¡¯²£œ›–¥®»Ðäíñóôôòçáêçã×̼±­¨¢¥¥¥¤§®¶¸¹º½½ÁÀÈÆÅÉÊËÎÑÑÐÓØÔÔ×Ö×ÙÙÙÜÝàÝßßáãáäæåäåçæåççèèèæææãáàßÚÒÏËÊÅÆÇÅÆÅÅÄÄ¿Á¾»¸¶·¶»À¾»¼¿¼»»®¦­¯³²²´­§¥¢¢Ÿ ››žž¨°®§£«°²®ª«²±³²¬¨¯´¼ÁÀÀ¸¾À½½½¼¶³²°²µ¶¸·¼ºº¸»¾½¿Â¾¿ÀÄÊÌÒÙÛßßáåççççéèèééééêëëëëëêêéêêêéêééèèèèåäãââÝÚØ×ÖÔÑÎËÆÆ¿¾º·±­«¥™”‘ŽŒˆ”’Œƒz€uyyw|{}yyvr|vosrspojjjfcaUW@.$)#)+.<=>>4'  ,9>?>?KFAB8/'2451683132   -     - - - -  - !  8GPKJLKLA;<;AC?7. !'!&$*&#!#+++#'&(+"-.)&/-,+).3:>BADIIM?;AC@?A5'#Fk„…qC2&&:KYgghf\XYe]JHDB?:;FD>BF[hqpnjyxh[Z\_bx‰Š|mghl}Š‡„†ƒ‚ƒ~~ƒ{€†ƒ€‡ŽŠ~ƒˆŠ‹ˆ†ŽŽŒ‡ƒ…ƒ€ƒƒ€…„ˆ‰Š‚‰rqmoljhhg^^aXSLJ@7+,'-,.886Mly…~YQ_fvt{xu{}yyzsptossvqpvsvqqtjB9-$-Lkw‚tI   "%%')(/:>@B;7;CCHLF9:JSC>:652-(&47>9?>87><34<:26.#$#-),&(&%CWP0% - -    -    - )?QKGIB=?;;?211,31489<57:;?B:96972:81060.%-,),!!!$ -/2'#   -    -  -   - ($+$ - - - - &8 ,5E# &40GYceeec^RA5ELVhiadbgfe]I"2J^Z\XULH:2Nill„‚Œ€Š‹“—¬³© ž¡£¬ºÒéðóôôõòðæÈÆö°§ £¡¦£ ©©¯´´»»½ÁÃÃÆÇÊÉÈÏÏÐÔÔÓÕØÖÔ×ÙÖÙÙÛÛÛÜáßÞßááââãäããæçåçèèçåäãàÝÚÔÐÌÅÆÅÃÂÈÆÄÁÂÁÁ»»ºµ´²©±²¹ÂÄÁ¿»º½½»¸µ­¯ººµ¹»±©¡œ–˜š•¨®¨ž§©­§¤©±µ»·°¦²¼¿ÀÀÁ¼º»¾¾¾¹­­¦¬­­®µ®µ¶º»½¼º½¾»Á¿¼¾¼ÁÄÊÏÑÔÝßâãåçèèééééêëëêëëêìëëëëéëêêêéççæåæåãàßÝÝÛÛØÖÐÎËÊÅÄÁ»·±¯­«§”“Ž‡}sn€z{zv€{zyvvrumvnozyvsoidhkcbaZE.#$&0=:BC?2 #+8FCF?BAA@C=B9"#"$!)*'&-((##&('%"%"%+))&,'39:=JEHDD?*$Ah}‡|n\:&(0LejhllcZ[kgYIA><9=89>?DGRajjft|qeZ_ent…‰xq[^i‹‡|zvƒ‡ƒ…Šˆƒ‰†}~ƒ‹†{„Šˆ„Š…„‰ƒ†‹ƒ†ŽŒŠŠ€rjenqlpjb_ba\TOG;1+&*-2.)/8Tgo€mLUdsv{€sxrsuvrsuzvuyrmrpmooovu`@3(&4Kauƒ~nO$   #!/+&,4==>BHH - - - -       '2($+0*$   &" '&-$ 1%./+33>@>BBDFDD>FEADF==FA<7;@INNRK<;;<1,*(+35.24794A>:6>834,$17)(5+'/0"=QM1)! -   - -    0@MKFBC8>=9@64/*49<59767C<>1065;54/0-.(/44.%  )%%).&  -   &"% - -    "),*'  - - - -3*4=) 78:@Wbfeik_TH4;HO`bafiij`J**C[\WZUIC/.a]iix†€‚…†ŠŠ‘‘’¤°§œ™Ÿ§®ÀÒçñóóóóóòðß³­¤›ŸŸŸ Ÿž£¨¬¶µµ»»ÂÁÃÅÁÉÌËÉÊÎÓÔÔÖÕÔÚÙØØØÛÚÛÛÜÜÞáàãââáãââåäåäæäçåæäàÞÛÕÒÍËÊÊÉÉÇÄÇÅÁÄÁ¿¿¼»¸±µ±«¯®ª°¾ÅÆÂÁ¿¼½¿½¹¹³®¸¸¹¸¸¯© ™“””‘•›Ÿ«¯ª˜¢¦£¦¢§¬±·»ºº°´¼ÀÀÇļ¾¿Á¿½¹±±­¬²±°³«¬«³¹ºµ¾½¹º¼½¾ÀÀ¼¿ÂÃÀÄÎÓÛÞáãçåçèèèêêêìëëëìïíëëëëíêêëéééèéåçæäáßÞÜÛÚØÕÏÍÉÈÄÀ»»¹³¬¯«¥ž•Žƒ‚zypvvusyqv}ynoqvsnssop|rtchqi_]aWP8#  $"'+9?<=4/!,=>?@FEEE?,"  !%$ &$#%"'%""$$"#/)$" %-"())128>=?FEKKF+*,#*(##$3Zlw~~jUdmp|€~wrmonoxuqumnmirqlkjs{rV;6-'4Nlƒ„vbJ! - !'--0.4;=CDGA6.#*59A8426=@:9=@B;+ *(&$02($&/ +?@9).' - - -  -  - - -#2GFEG<8394030142788=35B=<>;85268673131,+..)("#!))% -   " # ! - - -    2%.$ -   '=#"'@- 349BS`jcdeg`\B@DKUadjjh`L+%Db]]feJ>0# /Miars~‚‚‰Œ‰‘“ŸŸœ› ª·Å×éñóôõóññîâ¿¡ ŸšžŸž¦¦­±­¶¶¸¼ÁÄÃÇÆÃÉËÏÍÏÒÓ×ÕÖÙÖØÙÙØÙÛÛÚÝÝÜßÞÞâââãããâæåããããâÞÞÛÖÑÑÍÉÉÈÆÉÈÂÃÅÁÀ¿¼»¶¸´µ´¶·¹»·³­·ÂÄÉÅÄÁ¿¿½º¾¹²°º¼½¹µ³¯Ÿ•›ž—œ ¬²³«¥ª§¦££¨°¶µ¶¾ºµ·¼ÁÀÃÀÁ¿½ÀÁÁ½¸²¶¶¸¶·³²°°¬¬®³µ³º··¼¸»½¹¿Á»ÁÀÀÀÈÐØÞãâäåèéèéëëìêëìííêêëëëêêêìêêêêçåéèääâààÞÛÙ×ÑÐÎÌÇÄ¿º³³²¯©£‘‚z€poultsornvurrtuopkorijjeai]W]C9"%&-3=<<:=&,39>FF3,2)(1,0.57>/0* - -   - -  -  !$!*FBDIOOISIEECDCDDF@=#$$$"''($%$%)(! #+*')%,(**$&.42::CFBQVFB>??31 &EbrztiY=&%9KZhuunf[KEFIKED?=95/-3;C\tqhqvk^chilx†u]]nr~‚|v€‡Š‹‹…€ˆ‚‹Œ…ˆ…Š‰‡†ƒw…€}~‚ˆ‡‹†ƒ€rt|rqursujme]WIB733'#'(()-Xtƒ†m_hfoyƒwwoninsorqigltqmijmn|‚nO;6),Eg}†vn[=      C3'-2:>CHF>F - - -    -*( $6+ !''()%!*.79@47>@A<>ERN@??:7EMMQ[YVLDC46?FMULONG998:=642435;8;7<8>:85<89A7<5212...02*+(.%(#'$)/)$   "(!&&  !     )+."      3/ 5=%  $10=C>Rbegdif`hS=EPQZiigmY5#D^ZX^\RG3%'E`jj{|…€€‡‰Œ•› «´ÉßêðóóòòïëäÓº©˜šœ™›Ÿ§©¯µ°²·»½ÁÂÇÉÌÈÊÌÌÏÒÓÔÙ××ØÙÙÙÛÛÛÛÜÞÜÞÞÝßâãàâãâáããààÞààÞÙØÖÐÍÇÊÌÊÇÇÇÆ¿ÀÁŹµ¶²¶³·¶¼¾ÀÁĽ¶¯¸ÂÆÅÅÂÁ½À½¿¾·µ¹¿½¿¾¹²« š™¡¢ª¥©¯²¶®®¬§¦¦ ªµ¶»º¼·¶·¿ÀÀÂÁ¿½½ÁÁ¿¼´³·¼¹¹½¾·´®«ª«®°­²¯´··º¹»½¾¾ÁÂÀÀ¿ÅÈÓÚÞâäæåèçéêêêêëìíëëëêëëìîîëêëìèçééçæååâßÞÚÚ×ÔÓÑÐÉÅÅ¿¼¹²°³¦¢—~‡‰|vtvzwz|uwrvsruqslinpokghkdeVYN0'&&038;=:+ +78E<944)$./67.6;2(# - -    -   1NJIOJNNSMK@?=?:GNK=+#! - #%##$#"("'+)'$!%&)"--/)+,,//678:ABHJNFFA@=AG;83&;ensyp_?!).E[dw{yq_XI>LQSB6;=30/9N[hosmn||n_Vgkr€Š}m_`wzzƒzy}ŠŒˆ‰ŠŠ€„‰ˆ‹‰‚…Š†‡‰‡†~‹ƒ€„ƒƒ‚…†…†„„‡ytyzojpwz}rke`]I::=2'%+/64%5]~€|…m\ipmx~xzx{qnmiqrnpfkpnpjdfq|wdG=)&-Db{llb=   !-.&+*7?A>>9;C    +    "+("22*"    & (#""!)+2B?B/4EIKIKFDEICMVZWTXP>7:?DEBAKRL<>A98:<940.3KF563940,-&&9<2,%EbO-! - -    -  9EKKGQNCB=:514099CA>>:?8A:8308:;06631-.-/(%"#)&%+$&.(-/  -  !#$"#   - - -$&     )0)9.  - -8A:F?ENZchhf`jjT=CKOYic^TA"<_fYXaUG;% 'Dajrovw{ƒŠˆŽˆ‰“’‹ˆŽ“ž¥´ÊáíòóòòîéßÒ¿© –”–š £©ª°°¶¹¼»¾ÃÆÄÈÊÍÏÐÐÌÔÕÕÓÖÙØÙÜÛÚÜÛÜÝÝÜàÝÝÝàâããâãâãââÝÛÜÜÙÖÔÎËËÎÈÉÌÈÇÅ¿»º¼º¸µ¸µ´³µ³º¿¾ÄÁ¾º·»¿ÇÆÃÁ¾À¼¾¿º¶¼ÂÂÀ¾º´¯¨££§©ª¬©«´¶®«­«««©¬¯µ¹¼¾¹³·¿ÁÁÀ¿½¾½ÁÀ¿»µ¶¸½¿ÀÀº­«ª¢§¨ª­®ª«¦®¶¶»¸¼¿À½Á¾¾Â¿ÄÇÎÑØÞâãäåæéêêëìíîíëëìíîìííêëëêëëêèççæåâãâàÜÜÚ×ÕÒÎÏÌÆÀÀÀ¹º¸±ª¥Ÿ—‰‡Š‹‹†}tt|yro~|tsouytnlmoogmlhg][W9(!#&$26@9<6(#26=?:42*+)2069231'!     - -    - .9JEIJPNGHCE?GEB?CDG=53  "'"" %%($'%$, ''+)'$+2/%(-2/789:>JDFMKRADD>:3*).69/)@b~~„†x^Phep„†wvy‚ujnssvvluggillknmnq_B2)$&8Yoqt}i5 $#)-.4;?C@=?JL     - - 7 $(' /.,"  - -$%'$!""',38?>11>9=?@??FLDIQOHHNOPLHEIAGJLD??CCC>AD;:54<;0749D?995.,%$"!,7?:(&N]@## - -    -  +DFVMLME>>>;33..25BE;<7:848;=244:.9<652*,1*('(# (,./%($   #'     -  *+'  - - 2/07'ORHEEIP\f`khcjeW@9HUPb`[J(/We_W^SK6"(Ebllwv{z„†Š‡‹‘‡‹‰Œ‘–§´ÊäîðóóðèÝȵ­¢•–•’•˜£¦±¬°³´»¹¼¾¿ÁÈÉËÏÑÓÑÒÕÖÔÖÙØ×ÚÙÜÝÛÝÛÜÝÜÝßÞâÞÝáßààäááàÞÜÙÕÒÍËÎÍËÎÊÊÈÆÆÃÀÀº¹¸³²´¶·²¯ªª¬°±·¾ÄÅÁ¼º¼ÁÆÉÂÂÂÂÁ¿ÀÁ¿¹¹¿Á¿À¹¹®«ª«©­«°®®»·¶³¬¬²¬¨¬¶¶½¾½¼¶¶ÀÄÅÂÁÁÀÀýÀ½±·¹»Â¿¿º¬¤ššž ¡¡£§£©±«³´µ¸¾¼»¼¿¾ÁÂÄÅÇÌÓØÝàâãåééëëìîììëîìîîììëêëëëëêêéêçææçåãáàÝÚØÖÕÒÏÉÊÅÃÀÀ¹·¯¬¥¦Ÿš‘‹…Ž‡vpx{{txystoonzpkozkmkkgoc[\MB,!(/0;=?67(*26?02,*0'/0783/&(#     -    -      2?HAEBKI@@?=>FC@<:6FI67#  -%"#$$ !&(# #)-$ & ))($'3,2-7:=@EEKTUCCB?A;A>5&3AXfmyx`:&3DSdwqgadYXPK@>DA<915>AFXettltuuf\]jvy†|mhfqzts„Ž€zwpw„~‚}‹Œ‰ŠŒ‚{~„‚†ˆ‰„}‡‘Ž†ƒƒ‰ƒ{pwpqnoisxrqqibbdOA>=3#*05<1-Fjˆƒƒ|oFOf`tŠ€ƒƒqx{~uumimnqlghgvr[@;1"'<]mpz}[#    '& 13<:>>BG?GC - -   - -  - "()-0"  )2/#! !#!(/253;2)54=AA=;EKJJKKTUHC@ILELLLJ5;F?>BE@G@5B?::949>:5+,+)$"--1*  ,SB+  -  -     5IISLSKDB;7:>.6/-5<=F>B?=:<7?:<8?534413/,((),-%'' '0+1&   - - - ! !$#!!"  - -  - - -/50"  -    !/+/6- >WSKDFAQS]jilghi\I:@QTXJC,/S]TYTTM7$&Nflmqrmv‚…†ŽŒ‡‹Ž’““´ÍãíïðïëÞů£™Ÿ™““’•¡®­®±´··½½Á¿ÂÈÊÉËÐÑÔÕ×Ø××ÚÚØÙÛÜÜÝÞáÞàààÞàáââàâÞßãâÝÜÛÚÖÎÌÉËÌÍÏÌÊÅÅÇÃź¸´µµ¹±«°¬­­¦¨¨¨ª¯ºÂÂÆ¿»¼ÀÉÊÊÇÆÅÅÆÇþ¹º»ÀÁÃÀ¼²°«­¬¯²¯°±¹º»´°±²®«¯¸¾¾ÅÀ½·¸ÀÆÆÄÁÅÆÄÁ½ÃÀ¸´·¹Á¹½º±¦  ž  ¡Ÿ¢¤­­«ª®²±´·º¼ÀÂÁÀÂÂÅÈÊÏÑØßâåèèêìììíììíîîïìíìëëëëëëêéééèçäããâÝÚÞÚÙÖÒÓÐÌÉÈǾ¹·±°ª©¢˜Š€‚ˆ‚|zxuv~yykqqzzsrtroilkjgfaaW?$)&&0;@<90*:9+2030-/572201*&  -     - -  -  -   "9CFFLA<=>AA=<<:=619ABE;2  -  '&!"%$!$"$*'**"')(%".%&,109378<=GRUQI<>EEAB>4($9^q}|w`9**,FXgjg\apfXZYFAC?;/58;8BRblopjs~lWV`p€†zto^owlvˆ…„‚‚|‡Š‰‹‰Š‘Œ‹ŠŒƒ€~…Ž‰ˆ‰…ƒ†‰†‘Š‚~ƒ„}souoirmjuqr€zoigdOE86-"*)0B2/Go~‚€u^Pbaar‚ˆ…~…w{~€ukproqrklppvnWF  -   - %&"/7# ! %)*$&##  10-2694606=>==:94@DIHEIOYWEA@KHFHEM7:ACAE79A@FHA>:6;@C84,%%!!46/'6R;      - - +/HILNLOFAB7357976>8@:;DC9@>@>;8763276286+,&#&!*.# )+#,%   - ) $$ !  - -  1+++)&)$   -  2)$@7 *G`]UOCJHH_jckfolcV8CROJ8)IY_ZY[U@*)Acojptsw„‰ƒ†‘Ž„‹’˜œ«ÏæîíîèÛǬ–’–’˜‘—œ£¨¬®¯µ»¼»ÃÃÄÆÈÊÌÎÐÐÔÖØØØÙÙÚÜÛÝÚßÞàâââãáàßßâàßâßàßßÝÚÙÕÓÇÄÉÍÒÐÎÊǾ½»¸²¶¶¶´¯¬§«¯©«¯ª¯¯­¬°»ÁÂÇÄ¿»½ÅÌÍÍÉÉÉÊÉÍÈÃÀÀÁÄÆü¼º»º¹·´µ³µ¸»¾º¸¹´´·º¾ÁÁÂÉÅÀ¼¾ÃÇÇÇÄÇÆÊÊÇÈÁ¼¹½ÁÀ¾¿º®«ª¨§£¢¤¨£¡¡žœ¥¥©®°¯®¬´¶´º»¼¿¿ÂÁÅÄÄÊÏ×ßãèìëëêëëêìíííîîìëìëëëêìêêéêééçåäâßÝÜÛÚÛØÑÍÐÎÇÇÆƾ»»¶°¬¬£œ‹‡~…}qswtzvsnmssvszumnljiijdaccR@,!#();=784+ 1/*+.46*52/-03/%"#   -   -  !)GCCDEHA=95:E:6<842:DDC?3#&!# #%&-$#% *10($$)+.($.+)'1;8DCBP[PMF>GKGD>5'%@dvvg^]E/#';<:621;BCHILFGKIHDGJ>GJHGAEA=IE6;?KM>;2/9@<5:6*'")>=*" &HW8         - "8ONKOJHBC<94/22D;==<=;;:98;D>?:>;5424.-*)($",(,+"&.*.-(  -  "'&!   -   $246422+  -  !7!2<)BL]`YOFCABPjkjhjkjcA9JJ;BX`_`WRA*+Fdiqrqvw€†ˆ‡ˆŒŽŠƒ‚ŠŒ’’œÁæèäÙ˵¥™Œ‰ˆ“›¡§«­¯²·¸¼¾ÂÄÆÈÌÍÏÎÎÓÕ××ØÙÚÛÝÜÜÝÜÝÞââããâââÞààâàÞàßÜÜÖÖÓÐÎËËÊÍÐÐËÆ¿»·µ±´·¶²¥¤¨¦¬¯¯¯±³´µ´¶³µ»ÃÇÇÅÂÀÀÊËÎÏËÌËÌÌËÉÆÁÂÂÆÇÄÅ¿ÀÀÁÃÀ¾»¹¾½¿Â»¾¼½ÀÁÄÄÆÅÇÅÃÂÁÄËÌÎËÊÇÈÉÈÈý»¾ÆÄÅÁ¼µ±««°§¨¨ª©¨¤¢ ¢Ÿ¥¥¨¬¯±°°²¯±¶º¼¿ÀÇÃÁÂÄÈÐÚáåçêëëìêìííììíêìëëëëêìëêëééëèçæåáàßÞÜÚÙÙÖÔÔÏÑÏÌÆÃÄ»¹´´­§£“Œ‡„{rsqyytypytswutnovrjmmfef__WB&$ $)2?:73# &,00-07<361*%!$&$  - -  - -  - - %@LKLABFB?A=FD=<515+7EHFE1'  - !'"$((&$&#")(.1*%'+.0'01-)177@>@MY\PMHDIB99887=BQ]s‚}tuzmadpw|€„{uldkw†ŠŽ‰‰‰„‹‡†ƒ‰‰‡…‰†…ˆ‰ŒŒŽ‡ˆŒŽŽ‹Š‰ˆƒxoxƒƒ€|trjionmpnjgijcXMK?8,%'+-(&-Lmuy~}fSXhowr~xyzrprvmknsujb^ltmjnrp_A9,%9Zoroph-   /@&'+276<;CBGH>DABFF@EBF>>?>6525/5A=;49=>8=:>60&16('!!""'0-)#'1'*).     " ""+* ( $   04;651%  ,' *6.  -)OKP^]XGA:FObfhgojleR=>@8!L^VZZF:,$/Oomityvt~†…‰Œˆ‚‰‹‹‘‹Šy›Ìκ©›‰†|ˆ‰Ž‹’›œžŸ©ª®°±¶»ÀÁÄÈÊÌÐÔÔÔÓÓÖÙØØØÛÝÜÞÞÞÞßàßßãäääâáâàÞÜÜÜÛÚØÑËÊÊÉÏÏÑÌÌÍÉÁ½¹µ·¶¸¼¹·®¨¢¨­´³´µ·´²²¶´¸¹²¹ÄÊÌÉÁÀÆÉÐÒÔÍÒÑÎÏÑÎËÆÂÇÇÆÁ¿ÂÃÁ¿ÀÁ½»¼½¿ÄÅ¿ÃÁÂÃÃÇÃÅÅÁÂÅÈÆÉÍÒÑÐÐËÌËÊËËÃÂÁÈÈÂÇÁº¶®«±¯«¬²´°°ª«©©£££¨¬®´¸¸°¬­¹ºÃÁÄÅÁÆÇÃÇÈÎÕÙâäèëêêëììîííìîêìëëëëêëêéëêêèæäääãâÞÝÜÛÙÖ××ÖÓÎÊÊÄÂÀÀºµ±« œ“‹}mmryyuxx|pz{xvtmmqlbk^ba_YG1$!&-8=?;1# '//,147::84'&1+ ++!  -    - -   -6GJOJ?=@CAIIA>8:/-$(%>CEG5/  '&("$ #%"&'(&+,-#(,+0.+)),0:9>EFG[[XGFGA>I@;,)27I]gosQ.+F[bleeg`MONRSIKCF8:@@HJPqv€ylw€zh\bov‚j^jqy‹‰ŒŒ…Œ‰‚„‹ˆˆ„~ŒŠ}|ƒŠŒ†ƒ“ŒŒŽˆzuv}„€{shaagqtltqgdgYLDDB9&5240&',Eh}„}TI]er}z{ƒ}wry|zu||yusg\eminvvvsP=-3Wjvsxn+  -  !+/+0,079=@HDLGL    - ,)'"    !'$# *%*'//++493683=E?;?FCFKHDAIBHPLBGBB><=FNF@BLJ9AEA6)()91++)#'4962"7MI&   -  -  - - - 6ISKJFE77792/*-59D@?A@?CB>?@>?<6DMXbonpnmeN=9701QUWUP6* (Xiiqtozsx†ˆ†ˆˆ†„…‡Š‰‹†ƒ‡‹‹wy‰‡ƒˆ…”™œœ¦¡¦­®°´¹¹ÀÂÅÅÆËÎÒÓÒÖÖÖÖØÚÚÚÝÝÛÝßâàßâäáâãäãààáßßÜÙÛÙÑÑÊÈÉÎÏÏÑÐÌÌɾ¸·¼¿ÀÁÁ¶¬ª¦¦¬²²··¸¸´¸µ¶´³µºÁÂËÎÊÉÀÂÌÓÖÕÔÕÕÔÖÓÑÎÉÇÊÉÈÅÄÈÉÇÆÅÄ¿ÀÁ¾ÀÇÊÇÅÈÄÆÆÊÈÇËÈÈÈÍÎÎÑÓ×ÔÖÖÐÓÎÐÑÊÅÆÃÆÅÅÆÁ¾¼´²±²²±¬³º´­­­­­§¡¡¦¯²¸·­¯µ»¼ÀÂÂÂÂÃÃÁÅÅÈÇÉÔÛáäåèêìííîîíîíìîìëêëêêéêëêçèçæåæäãàÞàÞÜÜÜÛÕÑÏÌÌÊÊÉüº·®¨¦”‰†qsw~vtxzss~y}rtnqmgdfgaa`RE7$ '':=;6' $85/6:5860/+%*'&)//  -   -%%!?IGNE@BHF;<>43-3(#+5845/ - #&%#()%2% * %)+0)-./*#*.19;<@HHX]PQTABNBB?*=eix^4"-7Ldmwrd\XLQZ\ZWFDAC<48BSi|ofq~gT_v…ŠŽ|dcbev‡ŒˆƒŠ‹„„Œ‘‡€ƒ‹Š†~x†‡‰ŽŒŽ†…ƒ|rq{‚zfWcupttpiiadVUHE>5/2/,*#!8Si~€„q[NU^quryxu~…}{skjlhfrklnsy|kL>-&4Wjpor\!  -  "$&),,4:77BAD?EI - -    -    "*--"   - % % &&&'),*215?GLBJCD=@D@BLKHGCB:;<;4+116/,%-84&$0BG7"$ -     - - %COLFECFB?8=4/->98<69?><;5;=:839>5+2-#)$$$'0")2*-***(" -  "& - .369.   -% ,*76 /:(>UXSbXD;>8)  !#*-&(  - -  *&$%#*"!-##'#*&+'&'2*#'#0647;$%3G`pvra_ZVfgWUPLMD@559CC_t„vkgx|k]k‚€ƒŒ…i]hnxƒ…‡†Š†„Œ†—’ˆŠ‘Žƒ†ŠŽŒ†ƒ…ŒŠ‰‡‰‰…‡…‚‡‚„‡q\_nssqnholmiYNA:A=646<:;::8837CC735==65.49<3/(',"$+%*$%*)0*+,)    !$#!!$!  - -   ,5<0$  -% -,# *9$  /8+5F_bc_Y>GHH^hnpml[612,EQM<1%!<\ghhlty…†ˆ††ƒ†‹‹ˆŒˆ‰}wjd_cfnt|ƒ…˜œ›ž¦¤¢§­¬°·¶¼¿ÀÀÂËÎÎÐÓÕÔØ×ÙØÛÛÜÜÝÛÞÞÞàáâãããâäãâåààÞÞÝÙÕÏËÉÌÌÎÐÐËÐÍÎÑÏÎÈý¸¼ÃÃÃÁÀ¸¶´³±´¹¹ºµº¹½¾ÅÈÊÍÍÍÏÌÎÏÌÊÍËÒÙÖÙÜÛÜÞÞÜÞßâáââãåäåæææåãÙÔÔÏÐÔÖÕÕ×ÙÛâåèçäææäåååæåãáãßààÜØ××ÑÊÅÅÃÀÃÂÂÃÅÅÁž¸ºµ¶´²³²®«ª¯­¯²·µ²³·¸»¾¿ÁÂÁþ¿ÁÀÁÆÅÇÊÐ×ßäèéìêëìîîíëíëèêêééëêéééçéèæçääãäãáÞÝÝÜÛÛÚÖÑÐËËÇÇĺµ³«¥¦¤zps}tvwvwpqs{pptnjdh^`TVSG$,&)1;70'&$(,09>36+ ,+//&%*+(!  -    '*+" "G[SLIIM?<88/) #'(+/  - - -#''!"& $%'3)+&),)##*'(0(-.,86<9@HR_ZOHPLCEEB*/Hajgv`A%/CUkysfa]ik_N?DJE>BC=<=?Rn€yrjy~thrv||ŠŠƒm\k|…ŒŠyw€~ƒŠ‹“”’‹’‘Ž‹‹Š„‡ˆ‹Š†‰„ˆƒŠˆˆ‹ˆŠ…}{pinrsumqeaba_OC;9:("%*&%(7Xn|y…zd\adkktw‚€‚~ogspoklkrtsumsss_F?3%.Ckjg_YJ - - '#%4038AQSRQVMJP - -     - $"$%(&! -   " $$$1(+-)-&-//7?@CCEA=>@IH?9EHBB?GLC=IMHCASQJ=37281<@<5.)*&;1-#1LD("!       7OTTIIH==@?=/28:=>D@<>0:JH<97263543=6/11'%(-).!%3*!1.*)$  -     $ #!    -"!781(  - +0  0 6+ -+95&&CSZbcYB=MCWerpkiQ0)0"1RIE<# "D[iqnryy€‰„…†ƒ’‹‰‡{ttZVZ_flyˆ‰’˜–   ¦¯®¬®³¶¿º½¿ÃÆÉÊÎÐÓÔÕÖÛÛÙÚÚÛÝßÝßßßààâáãããâãâââÞÜÜÛ×ÐÌÅÈËÍÊÎËÌÌÒÐÎÏÎÎÈÀ¼¹½ÃÇÆÁ¿¸º¸¸·¹»¹¸»ºÀÅËÍÎÐÏÏÌÎÌÍÏËÏÐÒØÜÜàââæçèèìîîïïðñóôóõóôôñéÞÓÎÍÑÖÑÕåêíóôôóõôòòòñññðîïíìêèçäááÛÙÐÉÇÃÉÃÄÆÇÆÃÂÂÈÁ¼»¹¸·µ²²±²¯µº¸·´²²µ»¾ÀÅÂÂÃÅþº·º¸»ÂÃÀÃÆÈÑÛãæçèêëëìíîìëëêèéëëêêéèçèéçèäæææääãããáÝÝßÚ×ÖÖÑÏÎÉÃÀÀ¹³°« Žtv|s{vqpqx~unuoqk_bcdc_\Q6#"" ! *-02+! "-97<@8-%---(+!)%+%    - ("!7NQSNPDBA80% #'/-(+    !"##(%+'&))-,#&'$)%0*)5.+12:5AEO[`SRNIFKEA;)"*=JXkrjH,(-4NbsvtfgqfOKJFC===9Serxrz„‚km}‚‰‹‰‰wf^gw„‰quxr~–•”‰‡‹ŒˆŽ‘Œ„ˆ‹‰„†ˆ„€„‹‰…ƒ€rrrpzxvnj[QL[\P@52,! ((#)@cqy}‡’bZgmrn{x‚tx~nolmpsriesmou|~yt_G>.&+SrqhkkP -  !%$ %487M\[\]_VMN     - !#!$'*"   #%%'/0'.)/-(0?FOHGHICD?<@?A==9>=<9CGB;BHH=::8;735=CCCKABDA=B@;8:>73330:4+00'$'-!)('#(.*(,(#"    %  ##$.  -   - -#76) -31 ,)(;%  593,,8IOUY\UKLHSavtkaD$<%9T?4&51Xinksq}ƒ}‰†ƒ†‹‰‰•‘…ype[\\[hlv•— œ¢¤¦©±°²´ºº¾ÁÁÂÃÆÍÍÑÐÓÖ×ÙÚÛÛÜÜÞÝßÞÝßàßããããâáââàÝßÝÛÖÓÊÈÊËËÊÉÇÆÈÍÎÓÐÐÐÐÊËÆÀ¼ÀÆÈÈÄÁ½ºº»º¿¾ÃÄÅÇÊÌÌËÐÏÎÎÌÑÏÒÐÓÖ×ßãææéíïññôôö÷ùùøøøùúùøøúùôìÜÈÃÁÈÎÉÔíô÷øúúùùùúúùøøø÷øø÷÷õóóðîëèâÚÕÑÏÎÍËËÉÈÇÆÆÆÃÄÃÅÆÀ¿¼¹µ±·¾»¹º·µ±¹À½ÁÇÄÆÆÆÁ¾µ°±±¸»ÁÀÃÆÅÇÎÕÚßåèëêêíîëëëêëìêêêìéèèêééêèèèèèçåãäãáÝàÞÚÙÜÙ×ÓÑÌËÅÁ¾´´±¥–‰uryƒvssvsxp|qpumedgd^bZVM/)!!#!,317!"%199?6*%+)10/)'#'%     -(#DYURGEH?B2" 1+!)/)2    "%!!#*-)$ ("(*.+&$++*#16.5-19;Sbq€ƒrp~‚wn|ˆ‹Šƒƒ‚xcVo…{…‡{{€…Š’‹…ˆ‹‡{ƒ‹‹ŽŽ‚‰ƒz…ˆ‡‚z€~||psqrpld[QJ_VN>64) %,'$"*Olurv‚pXdtltww€|~|~wswjflspnrsdcm{uxobC<-(-XhovysP    '))411TQJDGEB?;.467?=79;6:9/4.856+/.# $()!!')-4,)*"$   -$ $ !! -    -",61 (91"(.:  -+7$.>//BQ_bYNJFDLZjqb\74-/IS=,/Xfwvsvxt}ƒ‹Š‹ˆ…Š‹ˆŽŠ}rfQSU]Yjˆ’–œŸŸ¤«¨¨³±³·¼½¾ÀÁÇÅÈÊÐÐÔÓÕ×ÚÚÛÛÜÜÝßàÞààÝÞàáââáãâäâßÝÛÙÔÌÉÊÊÌÈÉËþÃÎÍÎÑÍÐÌÉÈÈž¾ÄÈÇÉÆÄ¿¿¿ÄÉÎÊËÍÍÍÏËÎÌÏÒÐÔÖØÜÛÜáåéìïñõö÷øøúùùùùúùúûùùùùù÷ôïàÎÅÀÃÈËÉÏçð÷úøùùùùùùúúøùûùùúúùúùùøõòëâÜØÚØÖÔÒÒÍÊÈÇÈÇÈÆÈÊÈÇÇÄÀ¼ÂÁ¾º¹º¶º½¾ÂÁÂÇÇÁÄÀ¼´ª¬­¯³·¾ÁÂÁÀÆÈÌÔÜâäæèëëëìëëëëìêêêéééêéëèééèçèçæèæâãäããáÝÝÛÙ×ÓÔÐÍÈÄÁ¿º¯« ‡€r~wrqnsttvkmlnlfh\bb^VZJ0 # &(:3 /68:3*#&+215*$%  - -   &# "C[WNGIF;.$  )#-2+)'" - # ')$%"*)#,'&&%%("&+*%/0/23+.087CEN^^UOJICNKB7 +JPbolm\7)!&9MgppghVLMOSPDMHFE739@L[ivz{nw†xsyvƒ~€„‚{bVn~„Š„ˆ†ŠŒˆŒŒŠ|}}€ƒŒ‹‹Š‚‚†Š‡…ˆˆ‡‰ˆ|……~vvprqpukVA@PZNG41*$%%"!-Pmwzƒ~`Ramjsvsxs{qjpfifdip|xoeilvkqmP@:+(0Lgtu„}N    %'%,1+1D]\c]Z_TIM     #% #%5''+ - " &'"+1**08:;7CGFGFLA/;;47,!":;B;6668/,*,""(/5& 7II9,   - -    #7QLIFAE@=@5)(4IKA;A@A?>@E=>73009572=81-7/#'%)(!(2/5+&91(  "($'   !(  -    - !#2%   (=;&(-<2 7,%/41&;W`]`bDNCRWdlgW2$40HV>& #Tporvuqxvz‡‹‹‡ƒ‡ŒŒ‰oeYMW^jt{Œ“Ÿ ¥¤¥¯®³³·»¾ÀÁÀÅÈÈÍÍÍÑÒÓØØÙÚÛÚÜÝÜÝÝßÝßÞÞßâãâáâãäáâßØÙÒÇÉÊÊÌÌÂÇƼ¶·¼ÌÏÎÏÌÐÍÈÉÊÁ¿ÁÅÌÍÊÆÇÉÌÍÑÏÐÐÌÎÏÑÐÐÏÑÕÕØÚÛÝßããçìïô÷ùúúùùûúùùùùúùúûûúùøõñéßÒÈÇÆÇÌÏÎÎÚäñøøùøùúúùùùùùúúúûùùùùúùù÷ñäßÞÞÞÛÚÙÙÖÒÑÑÌÉËÈÇÉÊËÇÇÇÈÇÆÄÁÀ¼¸µ»ÀÆÅÂÁÂÆÆÀ¾¹¯¯°«³´µ¸À¾»ÀÆÆÉÐØÜáæêëêéêìëëêêéêêééëéééééèéççèçèçäääããÞÞÞÛÙÖÕÕÔÍÊÅÀ¿¸µ¯£y~vqlyupsurhomhlocihf^\X@' $ !-/ &2D93)*'.890&"      *%!(Q^PJGC91%*3-% -2,).-"$ !%&#!"+$(-+ "%*''($'&40,1+)(,45:JO^b`VLLBRI=8//BWiqqlaA3'$6OaprlYOIQ`_MGKNON?>;6:>?KG9?RE9;?GD=?L<77:2@IEC2+323)""#$/22':NI/#   -  - -':NPH=>A=:=93-4=@@E>=DB?BA?@?56EO]MBHHC>IA52AED:688C?AG@@EC;'12*(%)%,.%$(6OI3$!   - - !  -  .@C@A6/78:F;-79>?;@NIC@@D=?E;842393710/(%(&/%""-,%),-()9;2" - ##)   " (    -    !@RL,".5*  %9/1(->83.B\e]hWHE>COVP.)AWTW\PX</Jfmuys~‰€…ˆ†Š‰“”’ww_^]ev€ˆ“Ÿœ ¢«ª°±®º¸¹»¾ÁÃÄÅÄÅËÍÎÌÓÑÕÕØØÙÚÛÜÜÜÝÜßáââÜßàâââßÝÝÜÛØÕÐÎËÉÊÆÇÄÁ¼·¶¸¹·¶¸ÄÎÐÒÓÏÍÐÏÑËÈÆÈÐÐÓÒÏÏÑÓÐ×ÙÙÜÞãääåçëíîððîîïó÷úúùûûûüúüüüûüûûûúúùøóíçáßßãçìïóïçãèó÷ú÷ôðññôúúûüúüûùúûúüûüûúúùùúøóöø÷õóñïîîíîìêçäâÞÛØÖÔÎÍÏÊÊÈÇÆÿÂÁÅÊÊÆÆÈÇÆÇ¿¹¹¹»¹½¹¸·µ¯±¸¹ÀÁÂÁÃÆËÖÝãæééééééìëëëëëíëêêêêëëëëééêééèçåååèäáßÝÜÜÝÙ×ÔÏËÌÊû³¥ƒsrtxuyrojonsshaf`ik`R?*! '2!/94$)1,)563($0%*.&!  -   - -+$  ")#B]^UJE<;EVTNDD=590$ ##'%%(% ")!$,+"!'*$%&%&('&)&*04-+3.1413EKOc`SMMMKKEG@2*@_pr{z]:$$%9FasijY^ZPQSMXPJL@898?M_kxrkmsvmnq{~rmuƒuj]dot‚rq~ƒ‚ƒ‡Šˆ{‡‡‰„}xoz†Ž‰‡ˆƒ„}Š‹ŒƒˆŠ‹ˆxpltwwvxni^cbMC636##%*+-GQ`z‚|jY\dhourrtjhl||}y}xrnryuvouzxundMBA+1Gco~tjW* - $+*5=BOX_da`bVMKM - H+  $)%"  - !)% "'.(%&480482>B?<SgJB;1=:618=B>=@GFCB9:8:<=?I>=3,04/43//$%%(%+)#+#'"$$&.6=+#%  -  % $  - -!""!!  -  - - %)!! - - 7PX@*  $( 16  *'#+ :A;4,AIY^faG>HGIC;##D^fm^RT=)*Nbjw}„…„‘ŽˆŠŒŠˆ~vskntsƒ‘–¤¤¨¬¯­´°¶»½Á¿¿ÃÅÇÈËÊÏÑÐÑÐÔÖÖÙØØÛÝÛÙÞÝÞàáãßßãâáâßÝÛÛ×ÖÐÌÎÍÌÉÇÃÁ¾»·¹¿ÂÁ¹¸¼ÆÍÑÏÒÐÔÑÖÔÐÉÈÌÓÔÒÓÔÏÑÕÙÞãäçëîòñòòóóóòïóõùúùúüûûûûûüúüúûüûüûùøúúõðéåêíòöøøø÷ñëïøúùûú÷÷õóóöúúûúûùûüúûüüûûûüûüùöùùúùùø÷óñòôòóòñðíéæáÞÙ×ÔÐÍÐÌÇÈÃÂÇÌÍÌÊÆÇÅÈÅ¿½¸¹¾¿À¼»±®¶±±¶º½ÂþÅÆÅÍÙàãæèééêëêëëëëëêëêëëëíëêëëëëéééèèæçæããßÞÞàÚÛØÕÐÐÍËÂÁº©}qrrvnjnwwvrqkgcdiaaaT6## &/0+&'$'2'$1,14/40$)$#,,! -   -1, !$$"*C^YOFGCPMKNEA;0./7)$  ! *(%#$ #$#&&#,51*%&),0'-&''*0(+-23-/0;DMYUOHJPILMKH4!/Vlsxt_>'%#3Mbjj`WkibXJGOFPC>8=?:Thnrtllnzsmnk`cl„‰xaW^ix{ttr~„y}‰†€}…‹x{{{ƒƒ‚Š‰~€…‰Ž‰‚…ˆ†…uqqtusvqjkgYH54)$"$$$4Tcvƒƒj]Yddktxyinuu€|qrzzqqy‚ztutx}tlQ?7'-Fhvƒzu\0  ",*1CFRZ][[cc_NQP - Q-    -    #(),#    !$ !'%)-'+/&4722.85><3OVC4378:366I>9*410-,04)"5N,80 *@OE.&' -    - - *DG;0 ;=1430769??;D?=FC?;A=95147163//!%"#/5/$'$$!'215( (.+$-" &$$! - - -     /J`P0 '(<* - - 0 &A7>-*3BZc`cNAH77="6Xcb_[RC+ !A`jsw~€…„…‹ŠŒŽ‰Œ„|wukpw†ˆ‘•‘Ÿ™§¬­¯°²³º¶»¿¼ÄÄÆÁÇÈÌÌÐÑÔÓÓÔ×ØÚÚÛÜÜÚÜÞÝÝßßßÞÞááâÝÜÛÙÓÐÍÊËÍÍÉÈÀ¾¸¶¼½ÀÇƽº¸ÅÌÑÔÕÓÔÕÑÑÐÌÌÎÒÓÔÖØÙÜßäéîñõö÷ù÷ùöôòððôøúúûüüüûüüüüüüúúûúûûüüúúù÷òîðö÷úúúùúúöðóúùûüùúúùùöôô÷úøøúüûûúúûüüûûûûù÷úùùúúùúùöõôóôö÷ö÷õñîéçäßÜÙÕÐÏÊÈÈËÌÏÉÍÈÇÌÆÄÁ½»½ÂÂÀ¾º±¯²³¯²·¹¿½¹ÀÃÅÃÌÖÝãæçèêìëëìììëëìììëîëëêëêìëëêééèçèéçåââßßàÞÚÚÔÓÑÒÐÇÁ¹©‰‚}rfupco€ttpkjdhh_YeYYF3$ $%5/).&%,))&--/6.,0!#+    %45  #&$! *M]SJFFPZI@>6.&&%'57&-  &&(0$("  -&! ((#43--$$'+0(-$**/32,3,)./-<>FT`VNIJIQMKM4.XpqnofE0*".AZltpenc\ZOKG@DB8?=9@Xglo~†rw{xn\RS^m‡‰vcZTcequv~}ypr„~~|x‰~wƒ…€…€wzˆ‚Š‡Šˆ„‚‡‡ˆ€wrpy~€|pijgjQD6)!)&!%(9Vi|„…xdT[dcor€xw}ƒwtmuvup}†zpuoo„€vkRG:'(Fd{…„xX& !/4:HOXZ_c\hgaQSX - E    -   - ##(1(! " ! "#$,4+,59/-75:;6>6=@D>914;>07969:274:46:C4'.=833191+'$!3W"!#!$&0C?5$" - - - -  -   6AD@("40/1/2C?>A>A@?EGH@5=?931.81224/"!$%"'/0)!$$1271'" 62. -  #$ - + .+$  - -  !   )H]O<+&'1 +*!$,72A3(4P\^_H1710'$C^^^[VJ2%8WipyzŽˆ‡Šƒ††ˆŠŒ‰ˆy~xusƒ‡Ž•™Ÿ›¤¤¤°­«°¸¶º¾Á¿Á¿ÅÇÆÈÉËÏÐÏÑÖÖ×ØØÙÚÚÝÛÝàßÞÞßááßãÞàßÞÛ×ØÓÈÊËËÍÊÈÇÁ¸µ·¼º¸¾ÄÆÃÀº»ÃËÑÕÔÖØØÔÔÒÑÎÑÔ×ÚÜÞäèíîôùùúùùúúøôñóöùûûûúüûüüüûûúúüüûúûûúûûúûùùôôøúùúúúùùùøùôôùùûûøûûüúúùøõõùùùûüúúûûûüûüüûúøøúûüúùùøúùøøõ÷öøøø÷øøóòîêçáÝÕÔÏÑÑÓÔÓÎÍËÐÌËþ¹¼ÂÁ¼¿¸«§¥¬­¯²µ¹¹º¾¿Â¾ÁÃÎÙáäæçêëêëëìëëëêëëëìëëíëëëìëëêëêééééåââáãàÞÜÙØ×ÔÑÍËɼ›Š„rwztnkpqrojmoqhijb^]]I,!$#/3232'%0"+((*9817-!,/ -     ".49 3Q^KBKEVRF8"*)/  +)(!" -     "&(5*)$$+()).*"+..0222,.*463@ROWNJHHGJIIO@)'J^linkQ=&!#>WglimmZSd_GEGJHC@65EWWamy~rqxvo^\co‰…xiU@L]mrvsttqsu†tmx‹†tt„„ˆ…}{‚‚‰}ŽŒ‰‰…‡†‡…ƒ„zrr„‚}pdbcaSA2,'""*,=Tdv…zrhS]fkv€†~ˆ‰‡xpxt‚qpoxzuqsuu{z~gKG7#,Ms‡‹uN"  $)6,9ET`c^bdag`ZSZ  -        -! /. "   "!$""*31+03834,-8=4;58>B:9=?7289;@984.863-62+*6<51,<84* I.$"$;>7-+# -    -  - -AID@,  023)3=GB<;D??HH9?2.285436@=:3''!.' '$#*/#% 17305"4:9( - -"  #$) -  -    - -!% -  #CVVD $!/%  .%0154$$@VbP("*.00W`dbaL: )Onpsx{ƒ†‰Ž‹ŒŒ‰‰†ŠŽ…wq‰‰”—™££¥­³±±³¸½¼¿½ÀÀÀÂÂÆÌÌÍÌÒÓÐÖØÙÚÚØØÛÛÝÜàãáßßâàáâáÛÝßÛÙÖÐËÊËÊÈËÆÄú¼»»¹­¯¹ÅÉÇÁ¼½ÅÍÖÕÖ×ØÙÙØ××××ÙÞâçëðóøøúùúûùúùøôðï÷úûüüüüûûüúùúùøøúüûûûüüüúüúø÷øúùùúüüüüúùûúööùûûûûúûûúûûûù÷÷õøùúúûûûúüûüúûûøúûüùûûúûúùúúú÷ööøøøùùúøøöóðëåâÞÙÙÙØ×ÓÏÎÏÍËÁ½¼¿¿ÄÀÀ·¬¤£›¥¨­²«µµµ¿À¾ÂÂÆÍÔÛáæëëéêëëëëêíîëíííîíìîëììëëëêëëêéçääåâããÞÜÙÙØ×ÔÏÌǺ¨sy|vvlpsrkjnilfgdib]_S;2# "79:A0& '(*.=4+*# '6)!    - *;C1  - -" IZ`[Yce]j_YQS -        #&%!(0)  -'! "!#*%$,1&*.,/3=4::8@@498A;15@>;?D<>6845$&&*0*)33+14851,"!G%&! $AI9&(!  -  - -    - -1BEM=. 4:7.3BJ>>AF?IGMB==@9>225;>5,'," ,!&&-.-% !&-/(1($%275- - $##"# -  - - -'"! (#&9WWL3(" $2  ,.+1'!"6U^4%,2.&$Jdd[\YD*:alry{‡‡‡Š‰†‡ˆ‹Žƒ„}ssƒŽŽ“•¡¡£¨§¯¯²¶¼¹º¾ÀÀÁÆÆÇÇÉËÏÏËÒÓÔ×ØØÚÙÚÛÞÜÝÝßààáàáàâáßÚÛÛÙÔÐÍÊËËÆÃÇþº¸´¯¨«¬´ºÆÊÇÄ¿»ÂÐÕÖÙÙØÚÜÜÜàßáæëîô÷øùúúúúüúùùøôñðöûûüúüûûüüúùùøúùùûûûüüûüüûúøøùüûüúüüûûüûüüúöõûüûüýüûüûüûûûúù÷÷÷øúûüûüüûûûûûùûûüûûüûúúúûùüúùøøøøúùüüúùúøöóïêæâÞÚØØÒÓÐÍÊž¼ÁÅÈÅÀ¸®«¬ £ž¢¤«¯¯²»¼ºÀÀÃÅÇÎ×àçæéêëêëêëííïîíìîìííììëêêêêìêêêçèççæãâàÝÜÜÚÙØÔÒÍɽ¯“|qzsrmngkonnjabiiaUSP@&%-5@=6/!%.,42" &!%.'"  #7=>(  -!!'!&>LMVINLI9  $/!$#&  !"(,+#$&$)$'/+4-*130.-))-1/)334DORSZOFHJKQJIH;*.=hzq`=$%--A]cj[[fc^QRUG=ED@7:=?AYhourkwubclt†€rpYEU^rka`lj`kru|ruƒ‰…‚‰ˆŠŒ’ŠˆŒˆ€‚Šˆ‡‚pnu{w{ƒŠ†upikhcYP7,'#+*)/MW_^_ffd]VTQN -   -      - - - -   -%1!"#,%"!  $(!""%***'&0%%)'23<8CG:8>:;<=8.-5D>>C@>8500*,"&,'#0:'&/50-.9U(-* )GG/$"   -     5PSMB5*$#(6505:  6Znkm€~ˆ„‚ŽŽˆ‚ŠŽ‚ynxˆ–žž£¦«¨®¯µµ»½¹¾¼ÂÂÆÈÇÊÊÊÍÐÐÑÐÓÙÙÙÚÚÚÜÞÛÝßÞÝàÜÞáàâááÝÙ××ÏÉËÏËÉÇÄž¸µ¹°¡£¤¦©®»ÈÈÊÇÄÂÃÒ×ØÚÙÛÞàââåêëðöùúûúúúûúûüùø÷øøøùúýüüüüüûúùøùúûüûûüüüüýûúúøøûüûüûüüüüûüüûüûúø÷ûùüûûüüüüûüýüüûúúùøöøúüûúûüýüúùúûüüûûüüüüûúûüûûùùøøùúùúúúûúùøöòìéåßÝÛÙ×ÕÎÇÃÀÂÄÌÊļ³¯¯¬«¦Ÿ¡¤«°²±¶¼¾À¿ÁÅÅÇ×àåäèéêëêìíìíîîîîííììëëìëëëêëêêëéèèèæäãàÞßÞÛÚÖÕÒÎǽ¦ˆ€vnukmmrofhmilge\Zb[G(#18<@4' "0?72%(/  -  - - -+35@?M]fmuww„|_btw~‹…€zdNM^^aVQ^dglntw{w~‹‹‚‚Œ„ŒŒ‰†Œ‰‹„…‡Ž‹‹ƒxxzwr~ƒŠ€vkhfigVF90%'%(->iu{‡~}lVgjrts}|~‚qv~z{zpiook‚|t|xpVDH8%8^uyƒŠM   ()11@K^^]_ecZTNGOY  -   -  - -$"!'")' !  !$%)**%)0,-85/665>B9339>>2587@?=7A??80341*&-.+45/%/--%M4"!,1NH-' - - - -   AYZK@923::743;EBGC4AB9673/&..'5/3267+-6''l!4G9%  -  -  # - - DO[QC>8BB>240;HK==:9@ACF@??;;;1+,6;<9))'+ $##"&)%-,!#!(*',21!&:?3,   -    #"     -!" 6))!$#>6;(!2.'  -  49?:  - #$!@X]QN>E3 -  (. - -):2&  -  $$-')##--6)3/0.10%-'/2/.*24<BN\]]kv…‚y|~rcfo}„ˆ…‡sfRKWWXTS]id\_igmsnfqtihkp~†‡{„Š’Ž‰‰‡utq|xz€pc\de^QC9)++,,>\{„ƒ€l_cbm‚}|qurztxyvzx€znmqklvqsw|gHG=("9epvup_6  &')1;KR`^T[`]d_VWQ     -     -#""J=  -!!"!!&.+'#&)-8918=:=>5:==31.7><68026/*%*577>=93021+)T8% &;E7$     -   -0JLPQGA<=>>039FEGP@<84:@EAA>8<>?;741=2++.'*#)#'.$&!',&**+&*3'/,8;0     -  !' -  !(%!05-%" =NRJL3,5 -  587-&+!AQ2./-$*A[hkdWB.5(I\hu‹ŽŽ’Žˆ‡€†Œ†€zrjx„‘‘š™—Ÿ ¨©­®´´´·º½ÂÅÅÈËÊÏÏÏÎÒÔÕÕ×ÚÛÚÚÙÛÜÝÞàÜàÞÞßàÞßàÜÞÜÚÒÎÍÌÊÊÍÈÁ¼·´®¤¡¢©¬®°¶µ®¯´¾ÇËÊÇÅÅÊÓÝááæêòöùúûûüûüüüûúù÷øúüüüýüüüüüüûûüüüüüýýüýüüýýüüüûüüüüüüýüüüüýûüüüüüüüûùùóóúûüúûûüüüüüüüûüüüüüüûüûûø÷õóñóöùúüüúüüüüüûûüûûüüüüýûüúúùøøúúûüûüûûûùôíæãâÞ×ÓÐÉÊËËÉÇÀ¼¶´²´¯²°®¬¥¤§«²µ¶¹¼ÁÂÃÈËÑÜáæééììîíìïíîîîíìíííìëëìëëêëêêêêêéææåããáßÝÚÙÚÖÐÇÁ¯Ž…}xostqrqimieffchf^\N6 $#49<<3$+.  "  - +?NB0 - -$!"%=PRIA>:# - $.'  - $::, - -  &*'($')53.+.-*2,)"'.,/+687>D@KJRW\OBBMWXUL='!1\|‰ƒ‚nR5(2FUacmlcaWT\WKOFA9=86/=JEEDIKB6:7AA=???9=B@?=>42,3-$-!!,,("*&)(13 *5-04,0-$ --43%(#    $  -""!$%& !;:>+& !/?KM?&&. " - .44%.2?XC '3%#?aedg[F/")!!Chqo~ƒ‘Œ”‹ˆ„‚~‡sdrŽ‘• Ÿ¡¥¨ª¬¯·¸¶»½ÀÄÅÇÊÍËÍÐÐÓÔÕÖ×××ØÙÜÛÝÛÛÝßÜßßÜÜßÜàÜÞÜØÓÉÉÌÌÍÈÿ¹´°©¡Ÿ¡©­¯®®³±´¼ÆÈËÉÉÈÉÍÓÞæééíõùúûüûüüüüüúùøùùûûüýýýýýüüûýüüüüýýýýüûýûüüûûüûüüüüýüýüûüüûüûüüüûýýûúúöïîõúûûüûûüûûüüüûûüüüüüüüûûûú÷ðìéìôùúüüüüüûüüüüüüûüûüüüüüüüúùøøùùùùúúúù÷ôñòñðêäÜÒÊËÌÊÊÊǾº´´´¶´«±­¥Ÿ¡¯°®³´·¾ÅÂÅÆÐÙßæéëëìïíîîïïîëëëëëëìëëëêëëëëìëêêèççæäâãàÜÚÚÙÕÐÍɳ•tw|rmpsllmnmhefhefcWF, ##'8;<:," &, - %(! :HL>.   )(!'>GN@::*  48  :C>)  - #(" *.252.34&"0(!$%*41,*207:BJKW]gWHKIYZ_RC4"*Ywˆ~}rT3,%3Sftqjkh`_a\XWN@9<5IZ\`lruuvsugfhz„Œ‡€†w[PV[c``jlfpmhwqqz{vx~ƒŽ‘—’Ž‹‘“•’‹Š‹†ˆ‡uk[L[opjgUKF[f_JQ@2!!"'.Naj}wvdJGaqs~…}vwrqp€€yuzsjjwqmns€zoLB8,)Mnym_jg7 $.+'1>>RY^[_aeYSVOW - - - - -  - -    - '&#',""#" %!  - -"! "+-,,+/)+279;4:ACBCC5351+=E757:7@7/,85-)30*0C<@9/(& %8('&$:H;)&    -        "9LRMNK=<@><:;FBGEELE?=6:;81>;9@;43@=1+&00#+& $"%%%##) !,'! ""'7101- !   .BCA8   "% #     %+# ,?<;7'"&!/@>6/ %< $&-& - - #=CK=% - ###&#:IM>@6"  *8# 6IG3  -   &%'--/,*+40').)"(-6++/324/6C=FW]]cUQV`XYWL;*-Vtstwu[8-'/MrzqkjdfegaOLB=AAMcdd`UB-!!!0Xz}ˆ~jUYdn}„‹Šwy†‚~ˆrrwtndmvppqs{ztcF;2!,[oqmjvk9 -     %*&.682/;1/445682>51&#,5, )"!#)!)%%+,$&-44047& -  -,4DK@0! - -  -##  - " -  !(&!:F;?>+%# "(5?@2$9 - ! &*71/' 9M7!.3(=^hje[A%BS!#1Xij{‚ŠŠ‰“‘Œˆ……ˆ‚€€po‚““”’œ–œ ¤©¯§®²³¸»½ÃÂÄÈÈÌÊÎÌÏÔÔ×ÔÖÖØÚÜÝÝÞáÞàßÞãÞÞÞÞßÜÜÜØÕÑÊÌÏÌÇƾ¼·±©œ—š¤±¬³±¯¶¸»ÁÈÉÉÊÈÉÒÝäêðöùúúù÷øûüüûúùùùùûüûüüüýüûüüüüýüýýýüûýüûýýýüüûúúüûüüüüüüýûýüýüýýüüûýýüüüûùôëçæéð÷ùûúüûûûüýüüûüûüüüûüûûûûüüùòðóõùùûüûüüüüûûüüýûüüüüüûüüüûüüú÷õ÷÷øøøöó÷úüúûùøòêßÚÕÐÏÍÎÍÇ»¹´´µ¶´±§¥¬±¶¶ºµ­ºÀ½ÃÆÉËÒÜäèëìíîíìíîîìíëìëêêëìììîêêéêéêèêèçæåáãààßÜÙØÙ×ÑƧ‡~zxpoupmrspikig\\T\Q;-,48:A/" "(0(#.  6AD7* ! # !'HTGD>1 "$ --DG8 - '-,'-*4.-41.-21.)?-%.51635<=@GSWXeZOZ^\\RSC3&B]jwƒz_;-#)F]amic_\`cVTP;@<:BHESVTZ_hpnr}sehp‚Œ†‡‹sYJIUPS`ejojkvglqtponuyŽ‰…„†Œ‹‹€ƒ~†‚‰ƒƒ†ymOKp‰xh]OQY\_adR='"!/VvŠ‰„~oW\eo|†‹w‹‹ƒ‚{||{zmegmwoquxxsfE;4%9eurmx€b- - &,).;?>@LY\c`UT]YZX   -  - - -  "$!"'(#$ !!$$%*29:,.151>>FD<6740).5/6-5/39?34;60*,00)&+2>& @A2!    - -  %=TTTLRGBB<:9;=AOMHOXPA9@757/,8<14:4/'%$.*$'(,"#$*!!%(/&*0- "*.67834  -   (%*# - - !'+(&',RR $5,(1S\ddYH/Qm%$\ehv€‰Œ‘‡‰€……zry…—™–™Ÿ›¡¤¦§°°´¸´»»ÀÆÆÇÇÇÌÐÒÐÒÕÔÔ×ÙØØÜÝÝÞÝààáßààÞÝÜàÜÚÛØÕÑÎÑÌÍË¿º¹¹¹·¨–›¥«±°¯°±ºÅÇÊÉÇÉÊÊÔãéïõùúøûûø÷ùùûúûø÷ùùüüüûûüýüüüýýûüýüüýýüýüûüýüüúúûýüûûüüüüüüûüþýýýüüýýüüüüüûùùöñêèïöúùúúûûûüüýûüûûüüüüüüûüüûýúúúúùøøøøúüùüýûúüüûüûûüûúüüüüûûûûüûúøøõóóðñöùúüúúùùöðéá×ÓÑÍËËƽº¹´¶µ´®ªª¯µ¹½¸µ³³½ÀÆÊÊËÓÜåèêëëëííîììíëëêìééêëëìëëêêëêçéèçæããáââáÝÛÛÚØÕÑ¿¤ŠŠzuxntil}lkpqd_ddc\Q4&#-3482-(# !   1>:3& (% /KWLF9)  - - -" +HN@% -  -  -   -%-,'2(',650$,292$#:0(/-32;?GIWTVZWLO^`[VZJ4#.Wo|~t^>) )AOdkf^b^`XMKG>@?=@?MLMRZfjppu}{khoƒ†ƒnYTINSRcelfbf__nttlptslƒ…}s„„€„‰ˆ…ˆˆˆ‚†u]\jzre[\c]SMU\N7'!#$*Hk{„soY\bbn‚{†’†}|v„{ggiikosqqpykGC8.?hojozwM   '0145?>CJT_dc[_^][W      -  -  %(&"#%,-&'! ' $ (3410.-79;BA=1/744+0-./2039:34+4*,1((0((4SC  )J?-&        &FPXVSBH?;=A-.28749187=2 )*',+)#+##&%")#$*-( '+4244&  20    # !  - -$#/,=IK?>+$$221'""-0CGYWW_\YMOY_]]H>+$Gy|xtaN,".7Uih`bge\PEHQJC>?=>GQMX_cmvz{x‚qjs…‹tk]OOV]flkgcf\cpslfts_lyqty€…€~„‡‹„z‹„„……yf^bgif\[^\RU_\I3'  $(Hgy€†zjLIHZnw}uyzzwslsqcdggdkqoqvzw`IC1,Efkw|zpJ    &*0.;??HGO\aea\V[TT -  -    -   ,/00!'0&+ - %" %- #'&75/13::I>:@46/692).0+/1242708/*-*&!%'#4--=!.I6-, -    -  - - - 2QRVMPE??B@:<5//EHGEG>440-.--,%-/*,,17DLIBA>H>A?@=705634;>:1,&)1,-$!!*&!-*"+0&$(3+/-"   #2-&!   * % -!)"%6JID:6+$3/!# "-,8S6*1() ,P\aa]F6 +^gkpz‡‘’Žˆ…ƒ‡|ro|Š•šŸŸ¢¬©¤§¯³±µ·¾¾¿ÂÃÅÅÊÌÊÊÎÎÑÕ×ÙÙÛÜØÚÝàßáÜßÜáãáÞàÜÝÜÜØÓÐÓÖÒÐÐɵ®´ÂÅÇĺ³°­³¶»ÃÅÇÈÌÈÌÓÝäéðöúùùüúùûúùúöìéêñ÷ûûüüüüüüüüüüüüüüüüüüýüþûüüúùø÷ûüýüýûüüüýýüüüüýüüüüüüûûûüüüüüüüûüûõð÷úüüüüûûüüûûüüüüüüüüüûûüüüüûûüüüüüüûüúùõôøøûüûüüüýýûüüüüýüüüüüüüüûùñèâçîôøùûýûúûùùù÷òíáÙÖÑÍÌÉÌÇÁ¹´´¹¾Â½º»Àº¿ÃÅÈÈÈËÉËÖáäéêìííììêììëêééêëêêëëëëëéêçèæääâãããáÞàÝÛÚÙÙÕ̺ž‚‚}ururmpqmjlcicZXYI6"/164F2 #&  -   -  .1!&# -/+%$!"! J\JF'     ") -!:NRJ   #%045)$-.+01'*44,*/711/(865>HIDRaaYJSVdV[UN2"Kl{ƒ}s\;&)BWjqxs_T[`dSXXKKEECUM?FQgwzsu}xlpuŠŽˆ|lZJEGNTWWbeecqtuqzkbhsi\osrqswƒ…~€zrunt††~~vvv]>DMieb_Q6&#$!*McrxtgTEJSbpwyw{~xs‚tuqrtnrtvpuuuqkS=B7%Dl€~…}sI"   "0-5=85640,3#!21)/+2-4437<83-,"((##+* CI3## -  -      &12;;1,+.?5/280*0*'&1*",&)))!%1,$#'% #*.+20  )$&  -   - $" #'   %!"'!-DF=@7-$!( # !!$#0&)RE.0/+(%6WbifR=)AG@:=6+1.2#'5.50,8363/3180+0.!! #'G@,    -  - *HTOKOPGKB@:6:JJILLKKC8704+).362.145/-&$+10'##! (!#+-%)% #%-)$  - '     ## "  -&$$"$%CQLGADICOZadb]URXX    -     - - #%  - $#$+*14/07=:=@<544374($'24762:;35663(!0.( '6-$ 4M.  -     - - 2OZRLRJOG<=>><:CJHKD;AA>4,,%1)(*,232*!+&#,1&$!! " $&"##`%W4!/)   -  - -    -"# -  "&**1ISNB:.+.+ $  ## $'+$$!)J8%,)#'@[df`I4%P^o~‡Š‡‘Ž‘’“‚„zxŒ•› ¦¨«®®¯±µ´¸¾»¿¼ÁÃÄÄÅÇÉËÊÎÒÑÓÔØÖÚÚÜÝÜÞÞàáßßàáßÝáàÛÚÖÒÑÕ×ÚÕÒÔÑÒÎÆ»³¯ÃÆÊÉÄÅÉÉÍÌÉÌÐØàèôøúùûúùúùúøöñëèçêîöûüüüüüüüýüüýüüûüüüüýýüýþûûüýüüüýüûûüüýûüûüûüüüüüüûüûüûúûûûûûüûüûüýüüúøíçí÷üüûüûþüüýüüûüüûüüüüüüüûüüüûüüüüûûûûüûüüüüýüûûùøùûüüüüüûýýúûüüüüüûùùùúüýüüûúùðòöêòùøùùúúöîæßØÐÍËÍÍÊÅÃÂþÁÀÃÇÆÆÈÉÇÆÅËÌËËÒÙáéêëíëëìëêêêëëêëêëêëêèêéèççæäãæäãââàÝÞÝÛÙØÖÓɶž††…ƒylqootqjnljgZZN= "072@=/!'$  -  "$&!&#+*!"&$N_ZD*     -  & !1PKA   '($'D9')301054/31(033048:7<:;BU^\`RGPUZ^bUK.?MNfˆb<,#)GXdibnia`XCGNPLDXZTIALafmoytqzshnŒŒŠˆziSPhlx~ˆ‹†„€€|‡…†‰‰ƒˆ‹Ž‘”•š‘Š{€€…ztjbOACSQE;85'(Cbszyzp^`_dltv}wql~ytrfgmkpy|syylYIH3-Gj|poaF' '0266<=E>FPV]^ZYTZV -     -  .!'$  *'!$()036158028=6-2+(/0/2(47;70;26835&&*##" %-2&!!9D4  -  -,  -  -   &@RXRQOKFAB8;BE>BEIH=>>94316/&%!42,/!,),%% "$"k$Z<+'   -      - #%% &#%)-1CIXM<1(%'!# &$*$!7Q%&-&#4[dhfW:% ;Oax„‡ŒŽŽ‘”’‹…€y€Šš¢£¬®²±²·´µ¸º»½À¼ÁÇÇÇÆÇÍÎÒÒÐÒÔØØÙÙÜÛÛÞÞÝßÞááààâÞßÞÚØÐÑÓÔÖØÓÑÒÒÑÏɾ²³¿ÈÏÍËÌÌÌÉÎÎÓÞçïôúùùûûûúúùõðêåàâèñøúûüýüüüüüýüüýýüüüüýýüüûûüûûûýüüüüýûüüýüüýýüüûüýûüûüüûüüüýüüüýûûüüýüüùùóíæìóùùüüüýýüüýüýýüûûûûüýýýýûûüüüüüüüüûûûüüûüüûüüüüùùúúüüüüüûüøüüüýüûûøùûûüýüüüüûôïööîîôúûúùú÷óíæÛÓÎÌÊÊÉÇÅÂÀÂÃÅÈÄÆÈÇÅÇÅÈÅÈÊÈÑÛäæëêëëëìëììêëêìëêêéêëêéçèççåæåããáàãßÜÜÝÛÛØØÒɹ›ˆˆ‚ztwsqyvqlplj^X[K1"   -7?;>*#$!   -  "+,$)( $ $%)G\]B#   - -)EVF -   %,.+&.45330.,451-(282.16=;HKb‡|hI(+,=Sbnhb__`QAKURK@KQaHELMalyugimjji{Œ“Ž†}r^Pcnzuzsxtm†ˆ}„Šˆ‘‘’Š‘ŒŒŽŽ†Š“š–‹„‚y{u€vn`SH=CQQ?A=3 "3I^pokvj]chksxvu|{~‚‰†‚†twpmnhptq}~oVGC3,Rv‚{iXI* - &*0:=:>HDHKX[\a\ZWZ  -     - -     #3"  -&%!'%*363,/469:G;4-,*02697110742/-3&0*#$& ##"$%%$$FH3   - -   -    - /HW`YUOG=9?@=;JIFCIOJHA;89883,%'3/)3&')%+,(.  ()(1     - -   - - -""(! -"$  - $)$$/;PRQD;0  )!! ( -,!AD$,.%+E^kjY@%9Pgr€€Ž‰Š’Œƒx€“•‹š¥¬«¯¶¶»¼¼½¿¿ÄÃÁÀÅÈÈÊËÊÎÐÒÔÓÔØ×ÙÚÛÜÜÜÛßàßßããâãáÞÚÜÙÒÐÑÓ×ÔÒÕÔÓÕÔÐ˾¹µ¿ÌÒÑÎÉËÊÉÒÚâêòøùùùúüûûúùóêäàãçëð÷úüüüüüüýýüüüüýüüýüûýþûüûûüüüüýüþûýýüûüýüüýüüüüüüüýýúûüýýýýþüýýûûûüûûúù÷ïåÞàèôøøúûûýüüüüýûüûüûüüüüûüûüûûûüüûüüûûýüüüüûüüüüüüûúùúûüüüüüüýûüüýüûøúüüüûüüûýúûðù÷óöùùùúúøúøöñêÜÔÓÍÉÊÇÅ¿ÀÃÄÂÇÇÄÈÆÈÇÿ¾ÃÉÇÆÑßãçéëëêëìììëëìêëìêéëêêèèêçæçæãããâãáÞÜßÜÜÜÙ××ÏʳŠ‚…|r{vusqrupri_ZR@,#!,>47/)$!  - '%'$*'% /P_S5 -  -   :S@%  '*)!$1+2,01-.0./*32*:57;>CAAKRNNc[GNOM_d_S?/7Qbu†…xM!((6YkusW][ZXTR]U?DNYRJLG@Xeosigcokjvƒˆ‰pUF]cc\V[a`uv€ƒ„„Ž˜‘Ž‹}‡‹Žˆƒƒxwwxvk_XC/8RP=A:2( ! 4Mftqr{gaqpmyx€}tm}ŒŒ‰‚z€wvzrtwlq€}…sRED70^~€ƒ}ygJ&   *08=:<@MFOU]^__YYV\ -      -& .2! )!!&331'(1*057?703.-3@:32:41+082>0+*,.*!!$%(*$ *KK$!^> -  -   -0Q`]VTSSHB;@>=DDIKHSNGC;6/-36(&*020,.)")0+*+*$#"&"!&&(*  - - -   - '$ !# "*&7OXUILA, - % !)(#*H6.*(*8_cjcT/Hbt|‡Œ‹‹‘•”‰Œy‚žœŸ®«­´·º½¼ÀÂÃÅÇÅÁÇÅÉÌÌÊÎÒÐÒÔÕÓÖ×ÚÙÛÝÚÜÛÝâÞàßâàáÞÞÚØÎÍÑÒÑÑÒÖÔÖÓÔÕÏÉÀ¿¾ÃÍË¿ÉÉÈËÒÜèñøùúûüúûûûøõïæãåèíò÷ùûüüüüüüüýýýûüûûüýüüþýûüûüýýüüýüýýýüûüüüýûüüüýüýýýüûûûüüýýüüýûüüüüûûúúøôëàÙÖÕÖáëóøùüüüüüýüüýüüüüýüüüüüüùùûúûüüýýýüüüüüüüüüüûüýüúúùúüûüüüüüûûýýùúûüüüüüûûýüüôôúùøõøøùùûúúúøôêÝ××ÍËÇÇÁÂÇÇÈÈÈÈÆÈÌƽº¸¼ÂÄÊËÔÞâçìêêëíëêêëêëìëêëêéêèæèèççæãäâãäÞÞàßÛÝÛÙÖÖÑÒÄŸŠ‹ƒz€~}zws~ysrre_XD-#+:;<4)"&'   -   %,! (")**$! $!.#":^bI.   3BA& - -*4)04/21,1,-12171679>EF>DDLWZ__YIQYcgcWG#.DMnƒŽw>""1>N_pshdZW]\LRIKNWWMKMHNNbt‚m`dtykhxzzveF;PZSJT_`bspy}{…–˜–”“Œ‰‹“Š†‡‡|rqrvskj^9.2JB541*&!'Nmpxwecqlr~}~rovzƒ‹Œ€q~tyxzypr|}~{fYLC44_{‚†wgH    &005978=BEPTU[\^[\X[ - - -   -   )* !" *+%   -(%&"+).,/%./&)0;=6=4-?<: " %$ =H-/(- -Mbdf^D("9XkvˆŒŽ’Ž‘‘‹‘‡‡zoz–¡ ’š®´²»¿½¾À¿ÆÆÇÇÈÉÈÈÊÎÍÎÒÒÔÑÓÒÖØØÛÜÜÜÛÚÞÞàÝßÝÞßáÜØÖÒÐÏÐÒÏÅÊÕÖØÕÓÔÒÌÅÁ¾ÄËÏÌÊÉÊÓÞìôùúûüûùüûøõïèäçíò÷úúüúúýüüýýþýýýüüüüüýýüýüüûýýýýüüýýýüýýýýüüüüüüüýýüüüûúúüüüýûýýûûüüüüüùôóðëã×ÏÌÏÐÈÎØåñ÷úúûüüûüýüüýüüüûýüûù÷ôòñ÷ûüûüüüûüûýýüüýýüýüüþûûüúùúùûüüüûüýûùùúüüüýýüüüüüüðüýûúù÷÷øøúúúúùôìåÚ×ÍËÉÉÅÇÍÌËÊÍÊÊÉż¹´º¼ÀÈÈÍ×ÛåçèêëîíëëëëëëëììëéèëèèèçèèæäââââßßßÜÝÛÚØ×ÕÓɲ˜‰ˆƒ{ww}u|zsonddbTM&"!*6;<:7&*!&  -  (+%* (&-%"(3*"'HhdM- - -    %@F.  "(.-%/-/0+,/0-.-.))==9=A?;BJN\e_cXLV_c`^a=+&1Cd€‚l@&"'3D[soig_a`c]TBTRUVTY]UINbu{rkokcny{xunXA=CRQXdcgnspytn‹”“•‘”‰’‹€{y„{ypo‚|vrjO#%5:9@41$# +Rcw………d]hhptonx†zo€Š„}ryv{ƒyihuƒ€weWFB03[jtvmfC  .6;689>?AFMRRPW[X[XW  -  -  -   '!()&  - -'&&%$(022:-*,%*7>:<>9AFCC>48<843=?=1*30)#'*6+.&  5C1   -  - -  - $'FYXWRJFCCC?@FEKJHCLPK?=@=?70372),-&#!/0)/)"+/*% #,# , "  -  - (+ #" DX55+ !'5L_TVXWC* !  "#&C='*-%,CVb`eK00Xanw‰‘‰’““‘‘ŽƒŒ“¡¦œ±¸¹½Á¾¾¿ÃÈÊÊÊÌÉÅÈÍÌÌÏÓÔÒÖÒÕÖÙÙÛÛÛÛÜÞáàÝáàßâàÝÙÕÑÒÒÒÏÍļÅÒÖÙØ×ÖÔÓÐǽÂÏÑÍÌÍÚåïöúúúüüúúúõíëëìðöùûûüüüüüûüüýüýûüüüüüýýýüûûûüüýýýüýüüüýüüýüüüüüýüûûýýýúøøúüüýüýüüûüüûüüüûöîâÙÔÎÌÇÇÐÎÅÉÍÔßëõúûûüûüüüüýüüýüýýüûøïéèôüüûüýüüûüýýýüüüüþüýýýüüüüüúøúüûüüüúùùúüüüýüþýýüýý÷ûüüýúûùø÷øøùùúúôïäÜÓÏÍÉÇÊÍÎÏÑÎÉÊÍÈÀ´¶²¹½¼ÅÈËÔÞãééìëìëëêêëêììëëééêêééèçèèãâääâáßÞÝÝÜÜØÙØÒÐÁ¨•‰Œ€‚|€€wtkib__E06>GD1('#!    '$$%"#--!0+'.Nf^;!  -  6=* - -  -  ')(-#$+2/--0.1&')(=A;<5BBCFYe`\faRQX^eg\:%*CdzzhS3)&->ZnlqvlSVc_KM[\USVULFJL[m€yrƒ|ncgpstsobPB>HTdjfhhopuso‰ˆŽ˜Ž’„†‹‹…ƒ{€‚ƒrstytskT;!0:EE=?5'$! 6Sk{‰‰d[cgiZosuv{{…{y„zuwz|tqpvvqsaMKA32Sm}xno_0 4BJA:9<:6*#25)#*%,(12&"%%*( $ # - -"  -   - - -  -!' #&   s -+(""**B[`R]M>!   - ##0?)2**&6HbfaT;! Blgs‚ƒŒ‰’•—Žˆ„„’ˆŠ £¡³½½ÁÀÀÁÂÆÈÊÊËÍÉÉËÎÏÐÐÑÓÔÖÔ×ØÛÝÜÚÛààâááàáàáàÝÛÙÒÒÑÒÐÊǶ³ÁÑØØØÙÔÒÔÐÇÁÃÐÍÍÒÚëóùúùüûüûøóëëíñ÷úúûýüüûüüûüüüüüüüüüüýýüüüûüüûýûýýüýüýýýýýýþýüüûùùüýüüüüûúùúüýýûýüýüûüûüüüûùñçÕÌÇÆÆÁÉËÌÈÅËÌÏÖßìóùûüüüüüýüüüýüüûûûôéçóüüüüüüüüýüûüýüüüýýýüýûûýüüûúùøùüùúøúùùüûüýýýýýüýüýüüüüüüüúøöøöùøùùöîèÜ×ÔÉËÎÐÐÏÐÐÌÌËü·³±·¸¸ÀÆËÍÒÞãæêêêêêêêêìëëëêéêêèêéèççåãâããäàÞÞÝÜÙÙÚÙØÔÐÅ«”ŠŒˆ†{|…Š‡…}mrsaagU5#)/6C?8  '   *5-#%%)#*&&+HlU3 - - &3.   )/)$(-11622+0+61499=:-8>AHYd[[b[H?Yg^bW>,#$4ax|c;(0&HFA<@FA=INPWY_\V_[  -    - -  - - !#/-" %$ !*+%(/$",725<<<;DI=>>>BJG=7979:0/:?A?/)(/(!!&*D@'#  -    - -,JUUTXK@>BTbi^N- .Qgj“‰‘‘‘‘ˆ„‰‡’“Œ’›ª©¤º»¾¿ÂÁÇÅÉÍËÍÉÌÎÌËÐÑÑÑ×ÒÖÙÕ×ÚÜÛÛÝàßãàÞããßÝáÝÜÚÔÔÔÒÑËÀ¶µ¶ÁÒ×Ø×ÚØÖÔÓÊÇÅÊÐÖÞêõúúúúúúùöïëëôøüûúüüüüýûýüüûýüüüüýûýýüûüüüüüüýýüüþýüýýüýüüýüüüüû÷÷úýüüüüüüüüýýüüüüüüüüüýúûøðçÙÎÆÆÆÈÇËÍÈÅÀÄÊËÈÎ×áîõùüüüüýûüüüüüûüüùíêôûüýýýûýüüüüüüüýüýüýýüüüüüýýýûúøø÷öôó÷úýüýþüýýýüýýüüüüüüýüûúûùöóõùùøôîçáÛÔÓÑÓÒÑÒÒÌÎÊ»¶¯¸¶¶·ÀÀÉÈÊÑÛâæèêéêêêéëêìëêêéëéééêêçãåâãããáßàÜÛØÚØÕ×ØÔÄ©’‹Œ‰“‹‡†‰Š‰†wrmgo^PB'!" "+>D=70.:F5267D]WMQYRXWRIKUN<+'.""0(3KB.#$ -  -     -%IZWUUFFEAA>9ALNMEA@=@KF;<9=4(.342,- !%$!!%&  #$   -  -   F3%    -  " %%'$*8]bZD - *>91,#/ - -$=5",0-*GekebJ& +Ido~ŠŒ‘—Œ”Š…†Š”¦ª§£—‘–£§§µÁÅÇËÊÊÈËÌÐÖÐÎÑÒÕÕÖÕÖÖØ××ØÙÝßáßÞÞâÞáâáßßÜÛÚÔÓÔÒÎÊƾÅÆÁ½¾ËÖÛÛÛÛÚÜÞÛÜÛâéóøúúù÷ñîêëð÷úüüüüýþýüýýýüüüüþýýþüüýþûüûûûüüýýýýþýüýýýýýþüüþüüýýûûú÷øùýüûýüýüüüüüüûýûüúú÷òìãÛÕÏËÍÏÉÈÇÆÆÊÑÌÇÆÇÇÇÃÂÀÄÆÈÓßëôøúûüüýüýüûûùñõüþüüýüüüýüüüüýüüýýüýüýüüüýüýýýýýýüûøóïõúüüýüýýüüýýýýýýüýüüûüüüüüúúø÷ôôõñïêãßÜÚÚÛØÕÐÐÊÀº¿¾½º¸³¸»ÅÇÆÇÐ×ßãçêéêèèëêêìêêêêëêéééçæäãâáßÜÝÝÜÛÚÛÛØ×йŸšŽ‚Œ’”’’…Š‘„yywkkfR1 "6<78+#"    $01*+&-& "!)5-$;V[F   -&    -!',--'.(24-30958,:A?BE<1=BMTOJDKXOQ^g_XSE2$1Zs‰‹\:'+BXlmhosl_W_ql]OEHD@RQUNR]mskswzqhgq{€z{iKCGXgkpvx…‡ƒ€ˆŠ’‘ŽŽ‡‹‹†ˆ€~sqtusszoiislbW;*6IOB/#%"Bkyƒ‹ƒpeckknz|y|utjhsvnv€tmkpqtww~}pbQP8UVY‚Š€rsU% & "3IVOWXVY]\_RQSRUZXSR - - - -  - -!  -   &!"., ! -"" #($ &%%.38449024(5=2277BYNNVRFQY`[VdZH<+0)##" *CA;+! - -   3OSNRWPI@=8<8>GJKF?C;BA=72;?9(,38/,/ (0$"&&$' #!  -     @C:   -  (*+. #1PiV= A[RF/&$ 0C%&2*%3\cj`Y<8\lw…ˆ‘’••”Œ‡‰ŠŽªµ¤­¦—’‘¨¤©¿ÅÈËÊÊÈÊÎÑÏÑÐÓÑÓ××ÖÔ×Ø×ÙÚÜÞÞßãáãààÞäáßÛÚØ×ÕÖÔÏÉÁÂÇÍÏÊÀÃËÙÝÜÞßÜÜßÞààéóøùøöðëéìñ÷úûûüüýûýþýýüýýüüûüýýýýýýýûûûüüüýýýýýüýüüýýýüýýüýýüýüýüüùùûýýýüýýüüüúûûûüûúúûöíãØÔÓÑËÌÑÕÑÍËÌÊÐÐÌËÌËÃÃÆÅÃÄÄÄÃÊÓÞèñøûûüýüûúú÷ðõüýýýýýýýûûûýüüüüýýüýýýýüûüýþýþýþýüýüúïïñùûüüüüýüýýýüýþýüüýýýýüüýûøüúøõôòñìçäààÛÛÙØØÒÉÃÂÿ¾¹²­´½À¿ÄÈÎÍÚÜäèçèéêéêëëêêëëìèèèèæåãâàâÝÞÝÝÛÜØÚÚØÖÊ®˜‘}€‘——••Œ’–‘†wpijcP- +4880&(  (."#%(%"*1&9[T=  - - -   &-*-,-;0N0/474;>ADAB<9;CJLHH@F\QJOYZWYH91(Ho€ybB&(22Pgprpihb_jxhXJHG?;FLJR^hpyzu‚ƒzjdsx‚†}kN7DZ`afoz~ƒŠ„€Š‘’’‹„†€€ƒ|€‡|rpukkoonumgjaWF55?EE:6'$Eet~‚zqWZg`lw~xypgxtqyvrwwsptpt}‚dVKB1>mŽŽ‰†xR+  -" - - (=HUNQWW]a_ZOTSW_TTRP -  - -    ")(-!  - " #!##  ".014:;34')-6940:D7ESXTUM@<) #. -<:6%     -  - 8RaTIRKB5663-;JHECJLIEH890.38006:0&%*/%#)%   % -  -5B;% - -   $ !%&($+&#+Fb]E -"GTUF*$?/ - H:&.*'=beg]E-$Nkg}‹‘‘“‘ŽŒ‰Á¾³´¯¥‘¡¥ ¦»ÄÊËËÊÌÌËÏÐÑÓÒÒÕÕÖØÙ×ÙÛÛÜÝÝÝáßßÞÜßáßÝÚØÖÔÖÒÕÒÌÈÂÈÍÕÔÌÆÈÍØÞàßáÝàßàáãíóôõïêçëòøûüüüüüüýüþþýûüüýüüüýýýýüûüùøûýüüýüýýþüýýýýýýýýüýýýýüüûùúüüýþþþýýþýþüûøõùùúùù÷ðçÝÖÓËÍÏÍÍÏÒÒÎÌÌÌÏÑÑÒÑËÅÈÇÆÂÀÂÅÁÂÈÈÓàëóùûûúûùúõìñúýûüýýýýüûûüüüüüýüüüýýüýüüüüûýüüüüýüüôíðóøúûüüüûýýýüüüýüüýýýüüûûüüüüûûøöñîêäãáßÜÛÙÛÙÑÆÃÁÅü³­¯´¸»ÀÀÆÉÏØâåæççèéééêêêêëëéåèéæåããââàÞÚÛÚÛÙÙÚØÔÆ­•’…~ˆ’“™““’œ“’Œyzpmn^A((-@4890+  -  02(#$&"$#""'*+('BVP3  -    - '))26)%-/53.338@@FEA=63)"Ff{wzxn[da`pv|ƒƒ…|uu}sokgozzspvuwzxfQDB5H}“‹€qX- '5OTLS[]^[`aYTPUZVUWX   - -    -   ""*')# "  #&%  % #")5>:30,5()15BFADGA;?B4>ANJ>72.)&"!6<6#*   -  =OQUNCHA5404<@JJOOJCGMJ735/+57&+611#"$,$'*%#* -$   4@82   - !" ! - &" $&&)/7XS5$  )IaPA,%,@3 -(F.4)"4Qhc[O;# ">chv†Œ‘’‘”˜“’Œ‹‡‹–ÁÒȽ³­Ÿ•‘œ Ÿ©¹ÊËÉÍÊÎÌÏÑÓÏÓÔÑÓÕ×ØØ×ØØÛÜÜÞÝÝßÜàààÞÝÚØÙÖÒÓÓÓÎÇÁÁÃÍÒÖÐÉÆÎØÜßàââãåèéåææåéäêñøûüüüûýüüüýüýýüüüýûûüýýûûüû÷ö÷úüýýýýýýýýýþýýýýýýýþþýýüüüùúûýüýýýýýýýýüýûóëñôôðëäÛÖÒÏÏÊÌËÌÍÐÐÐÒÑÑØÔÕÕ×ÒÊÊÌÏÌÇÄÆÆÄÅÂÃÆËÒÞìô÷ùúúùðéë÷ûüüüýýüüýüûüûüýüþýüýýýýüýýþüýýüûüüüü÷õøøùùùûüüûýýýýüüüýýýýýýüüýýýýüýüüûùóëæããàâßÜÝ×ÍÈÃÃƽ·«®­®·ÀÂÇÆÇÐÛßâåæèèèëëéêêêêéçêéççãâãâáàÛÛÝÛÚÚÚÕÑĨ“xt}…“›˜—’”•—’„ƒˆ|{qdR3!$*=>;0%#!*'*  -  )0' ,%!$ " -.&"'DRI- -    - -  -,233//*'-931373B?HKC74;DMORMGC@CI=N_\TQB24Ronrƒ{d<)-5:_uwhemg\W@=GTOYMDEGPQ]o{…xp‹giqvxtlNF?7_elsozyy‰Œƒ’’‡‡Œ‹……ƒ‚…†‡{ztrpjnqqlaeseWLQHDI;.3*Adnnsylecigovo~ƒ{tr~}tmmnquttt„v|}€bIL?1@rŒŒƒ†v[-   +^of[>+!Ngu‚‹““˜”˜˜’“ŽŠ“µÒØн²¬¢–‘™ª«·ÉÎÊÍÍÏÎÑÐÒÒÑÓÒÑ×ÙÙÙÙÚÚÙÚÜÞÞÝÝßãàßßÛÙÙ×ÕÕÔÑÒÅÂýÀÎÕÚÔÍÇÌØßããâãçíððæØØàèðöùûüûüüüüûýûüüüýüüûýüýüúøõöø÷øöøüýýýüýýüüþþþýüýþýþýüþüüüù÷úýüüýþýýþüýüþüýûðàãåãÞÕÑÍÑËÍÍÎÑÐÎÏÔ×ÖÑÒÙ×ÓÕÖ×ÓÍÇËÍÍËÍËÆÅƽ¾ÀÂÆÊÖãíó÷÷ôíäæöüýüüüýýüýýþýüüüüüþýþýýüýüûüýýýûüüüüüúûúúüüûüøùýüþýüüüýýýýýýýýýýýýûüüûýüûøïãâãåæçãßÙÔÍËÇÇÆÀ¹³¯ª«¯¼ÁÄÅÈËÑÙáäåæèéêêééèèêéêèççæãââáâÞÚÛÝÜÚØÚÖп¤mqw‡—›£š™–™“‘Œ‰…{xv_F/#!&5AA6'$&$% ## -  - %,)*&)1$&$'.1&JNC,  -  - -  -  *.+,166,052275;GFJGA?67BGKOME73@H>NX_^PE33AR_s†‚hD-.,6TptinaQSVXQUaUNKPKU[or‚}tt…mpnkieZBDJN`hpuw{jq‡‡‚•ŒŠ€ˆ‡‡ˆ†ŽŒ†~~z}|wmjmuqgohf\SXOJF82,$ ?_gr|k]^hhfkpuvrsqyzv{{xy€upq|~|yy|hMPB,>oŒ‹ˆ‡xX* $&?DKYZZ^`^haXXXZWV[ZP -     - - - - - *+*' ! -!$!$!%32)05/,.4,,2&+/0>;CTPI@FEA19:43%)( # !$ !385)% - -   -    -$>SZPIRS:=B4/8DH=GKNBA>?2000.5+=;.$("!!(&%"    -  $+- -  !#  # !"%'#%":D( - %  4O][VE-$&G3&+-,.M_giY: )`w€‡Œ™”’Œ‘¥ÊØÚÕÆ·±¨œ‘Ž™«²ºÃÐÒÎÎÐÏÐÏÏÔÔÕÒÐÙÚÛØÚÛÜÚÛÞßáÝÞááÝàÝÙÕ×Ö×ØÓÏÍÆÇÁ¼ÂÏØØÙÓÐÑÚàãããäéòðêâÝäîõúüüüüýýýýýüüüûýýþüüüýüûøôóöøúûûúúýþþýýÿýýüýþþÿýþýþýýýýüüúöøüýýýýýýþýýýþýüûùëØÕÒÓÒÌÌËÐÒÒÒÏÐÏÐÑÔØ×ÒÕØÖÓÔÕÕÔÍÈÏÏÎÐÑÒÌÍÇÅÅÂÃÂÅÆÍÔáéíèãàãòûüûüüýýüýüþýýüûúúüýýþþýýþüûýýýýüüýüüûûüûþýüüûúûüýüýüýþýýýýýýýýýýýüüýüüûüúõèæêìêéèãÞÖÍÎÉÉÇÁ»´²®­©´¸½ÃÈÉËÕÙÝääæçéêéèêèêééééäæäãââàÛÝÙÛÚÛ×ØÔÊ·’ŽzjmŠ’šŸ ›šœœ™”’ŽŒˆƒyzZ:(* &*3P[__E3$2L-!1,&:\khbJ&! GnxŠ‹Ž’™˜Žš»Ð×ÚÚÒ½²¨”“¨­·ÅËÐÐÒÕÒÎÌÒÒÔ×ÔÒØÙÙ×ÙÚÜÜÜÝÝâàßÜÞßÞÛØÔ×Ø××ÔÉÁ¿¿ÁÁÃÎÙÚØÖÐÕÜßåæåçêêæâèð÷úûüüüýüûüüüýýþýýýýýüüüúøôóô÷ûüüýüüüýþýýýýþþýýýüþþþþþýýþüûùõ÷úüýýýýýýýüýýýüüûõäÏÌÊÍÉÊÏÓÔÕÓÓÒÒÖÔÖÑ×ÝÕÕÙ×ÔÖ×ÖÒÍÍÑÑ×ØØØÓÍÊÉÊÊÇÁÃÂÅÉËÑÖÙÙÙãòûûüûüüýýýýýüüýüûúüüüýýþüýýüýýüüüýýýûûûüüýþýýüüûûüüüüüüüýýüüüýüþýýûûüüüûüûøðôöö÷òðëæÝÔÒÑËÊüµ¶³®©­²¸ÁÃÆÇÍÑØâåæçèêéééëêéèêéææããââÝÜÝÚ×ØÖÒÔÐÁ¬™‚nio‘”œ ž¤£Ÿ¡Ÿšˆ‰Š…‡oR/$"!" ')3=8?2" )1#" 5E< ,501-.0%#"!)*!%@I2  - -   - -  -$+,+)*.093-/72>9GMEAFI=AHQMGA?<@GBGV^TPG;'%8Xk…|jR<$$.Riwkkie\_ZeW_`XWFJOYR^iny{mn}€nfjnc_exxq_]bdt{~‡wzˆŽ“”’‹••’•”“Ž‰ˆƒ‡…}ox|rmhehmprjkcbWQJD=>4 $JcgkiueN[jdk{yuvykqwqt…xu~~ukm}„ƒ~}…ƒfXM=/9k‚vysdB  ,EKW\\\ckgegkhgc_`^[Z  - -    -E@ -     !  +/$" -#"   $&-11(&(439>=??7?AGJA=77>7;A2'$# !/2"$/G=' (!  - # -  4JVWOPL?>=B6?RIOF?=DQQF8/44#&%,,*$#&#!"#(%$!' -   -     -  %"# ! #!&,$%/7)06#"2FXcgV4# G?&-0#,HicbT:$1^o€ŒŒŽ‹’›”›’‘›°ÇÏØÛÚÒö§¡œ“¦®°»ÆÏÑÔÔÒÓÍÐÍÔØÖÔ×ØÙÙ×ÚÚÜÜÜÞàãâãàâÞÙÖÕÕØÑÕÌþ½¿ÅÂÄÑÙÛÙ×ÕØßåèçããâãèñùûüüüüüüüüüüýýþüýüýýýûüûúõñòöúüýýýýýüúýüýýþýþþþþÿÿüýýýþüýûüüûùúüýþýüþýûüüüüüûøóèØÈÆÉÈÆÍÎÒÔÖÓÒÖ×ÙÜÛØØÙÙØÕÙ×ØØÒÐÎÎÏÒÙÙÚØÓÎÐÑÎÏËËÉÆÄÅÅÆÆÌÓÖáòúûüüüüüüüýüýýüýüüýüüýüüýýýûþýýüüýýýüüýýüüýûýüýûüûüûüûüüüþþýýüýýþýüüýüþýüû÷öûûúûú÷ôïæÝÕ×ÌÏż·¹¶¬®²®³ºÀÇÈÌË×ÜáäççèèèèéêêêëéæçåãâÞÛÝÛÙ××ÔÒÎÇ»¥“‡€trm€‡”Ÿ¡ §¡Ÿšž–’–”ŠŠ‰d9%&# %*"!!#7:@A3*&+0"+?GF*  /-81110. ##$,&(1#'@A3    - +*710)0/..8046FJOMD=8FOONORVW>7)!,TnxeG+%1J`klnqn`[\_^_ROURSMDN_fluvwqv„qegdbmu~ucV[cax€‡y‚†Š””™“˜—™”’’‹„†…‚‚€qmiggpthgomc\LMD<76( - &HbdX]i\TSa^p{txpiosqst}{opjgegwxx…„‚w[UXC4?iƒƒytlH" -  4ENYZ[aij^`mmosc\bf_W    -     - - -  +$.,   %' !  !$'-21)(***15>@@==::3?IG<73B>2;9.!! ((.(1H>(!%% - -   - -  - -&:NUQNIPC?=;5;EDDA@;GP=73!#%$./051 '(  ! !,   -     -#"  !)$&35B0# (=L`ddG+8Q2('!1ZhebA   Ea~Š”Ž‘™š•’Š’‘­ÃÉÎØÞÝÓú¬¥˜£©£©ÀÏÐÒÑÒÓÔÒÓÑÖÕÔØ××ØØÛÜÜÜÝÞàÝââÝÜÛÖÕØØÔÓÌÂÁÀ¼ÂÇÆÊÑÖÜÛÜÜÜäèéèââèîöúûüüýüüüýýýüüýþýüüüüüüýøöóô÷úüýýþüüýüúùüýýýýýþýÿýþþýýþýüüýüþüýýüüþýýüþýýýûûûùóêßÙÏÇÈÌËÊÏÑÓÕ×ÓÓÔØÛÞÜÜÛÜÚÚÜÚÜÝßÙØÒÉÏ×ÚÙ×Ö×ÕÔØÖÔÏÌËÍÇÆÉÇÉÈÉÓÛíùûüüûüýüüüüüýûýýýýýüüüýýýýüýýýýýýýüüüüûûýýýýýýüýýüüüüüüüüûüýýýýýýýýüüþüüû÷øûüûüûúú÷ñêß×ÔÑÌÅÀ»¼µ²¶¬®²¸ÂÇÊÊÉÓÚãåæçèçééëëêèèèææáßÝÜÜÚÙÖÒÖÐËò¢‹‚ppq€‡˜¢ ¤¥¥£žŸž™š™˜–‘‚S)# #.%&!%,3==4/" *5%=NTN. -"2;IB010$# "$!.1*0"/EC# - -  - -  -    !5902-*/125478@?=9?AA>?;FG?A@AHPJELSULMA$-Mky}znK- 1DPqnuxceg`deSLDNYR@BSkdltx‚uq„r`\iintqv€^TVci{~}†‹Ž‰†Ž“—–“‰‹€xŠ€~rplstokpki`YZVV>>8- - !@[^M^kWIbbft{wwst‚}|yƒ‚m`mmqx|~v„Štg`V@/=q…|qM&  -3?R\UV`ebginnosiecc`Z -  -    -  - - -  '+(#' ! !  -  /! "(/281*0418ACEA<8=:3;;>FG9`B$%.71-("!"!&!!%($ - - - - -  - -  $&!  $" & #%!*)&*:C8-%##AT__dP6@G#*+)>^idS66`x‰Ž””•˜›™“˜•¡¿ÍÑÖÛÛÜÙȽ³° –’£¨žœ´ÆÐÎÏÓÕÓÑÕÓÕÖÖ×ØÚØÙØÛÜÜÝßàÜààÛØÖÖÖÔÒÒÍÉÿÁÂÈÈÊÍÖÝßààåëîðñðñô÷úüûüüüüüûüýýýýýýþýýüýüùõôññöúüüýþýüýýýûúøüýýýüýýþþþþýýýýüýýýýýþüüýüýýýýýýýüùõìäÛÒÎÍÌËÊÍÍÐÑÓÔÙÙÓÔÖÔØÝÞÜÜÞàâåäáâåäàÚÒ×ÙÙÝÝÚÙ×Ö×ÚØØÖÖÖÒÖÖÙÛÓÏÍÓÚéó÷úûûýüüýýýýüüüýýýýýüüýýýüýýýþýýüûüûýüüýüýþþüýüþýýýüüüûûüüüüýüþþýýýýýüüûøúüüüûûüûúùöìäÞÕÓÑÈÁºº·´®¬­®¹ÂÆÇÉÎ×ÚßäèèççéééêêèèååäáÝÜÜÙØÓÐÏËļ©Ž‚wksw‚¢¸¶ª¥¦ª¢¤¤¤  ž¡£›”—‘}F/'"$## +1@@:0*#/0" 6N^L6 -/==FE>?2&#'(,+6)(4%3C7  -  -     -   !'//,1+,1579868<@@IB>90<=;B/ @^U^myl[]jknqtrs|ƒ€€y„…€vmnrqz…€y€€wjeXF17?00>;45@AED5=1"&.240+$$%""$ "! '  -  -  ')* ' ""####)&*(0?A7.)#AL]igTN+L?+27/+Lad^@(/Rpx‹‘•˜˜š•Ÿœ•’œ¿ÑØÙÝßÜÚÚÑÀºµ§“”¥ Ž¤¿ÉÊÎÒÕÔÐÑÒÕÕÓ××ÚÚÚÛÜÜÝÜÚÜÝßßÙØØÙØÔÑÊÇÿÂÁÅÌÎÐ×Þãäåéïóöøúúûûüûüýüûûýýüûüþþýýýüüüýúõôðñ÷ûüüþþýýüüýýýüüùüþýýýýýþþýýýýýýýýýýýýýüûýýýþýýüýûôéâØÔÑÎÌÊÌËÍÎÐÔÖ×ØÜÙØÕØ×ØÝßàáæèéîîêçéèæáÙ×ÚÚÞÝÜÖÚÞÙÛÞÞàâååçéêèåâ×ÔÐÓßêò÷úüûüüýüûûúúüýýýýýýþýýüüüüüýýüüüûüýýýýýþüüýýýýýýýýýüûûúúüýüýýýýþýýüüûùüýüüûûüüüüüúòçßÚØÑȾº¼»¹³¨§®¼ÀÅËÏÐÕÛáäææéèçèéèéæåæãâÝÜÛØÖÑÍÉËÀ²›ˆyqij{†˜®Åȹ©¦¬«£¢¥¥¤ §ª¦ œ—a6$%#"#%)25A872 !).1+BOPI7!'5AEHD:41$")+)(/.*/(2<&     - - -  -413-051;<<.8=@:IHC;788ACA;;?JGGEKQNE>.-DZliaA')/?Uhu~tf]UY^_VJX^VPNTS_kks|zssztWN`qtyz}oJ54I[kxyw€‡‹‹„‰’”Ž‰‡†‡‹ŽŠ‡‚ˆ}olnmophrflia^WODC@>.  IbQ]r‚z[^gkmrrv{ƒ€wx€~‡}txwmv†‰……‡yj]YI,9f‰ƒr\5 -3IRSUZ\X`cgprtrmh\b^V -    -  - -  - -  +5,*#$   ! &#+*?MB&9>;BC??A?3/696627936?LQPH;2% +0"$&'8?,&         =QSTWUMKD?427@34.9A=7)'&# $&7/(&'&"!"#"## '#    &,!")56*    !  $##%**.0D>38)""5ASgl`Q1BD*/0,,5Tdb\2@bs~Ž“•“¡ž“š˜˜Ž“²ÍÙÜÛßÜÙØÙÓÅÀ·¨šœŸ›ºÅÉÏÍÐÕÓÑÕÖØÕ××ÛÛÙÛÜÝÞÜÜÜÜÜÛØÖÕØÔÑÏÈÁ¼ºÁÇÌÎÑ×Ýäçèëð÷ùûüüüüüýüüüüüüýþüûüýýþýýüüøôñïòöúüüýýýýýýþýþþýýüûûýþýýýýýüüýýýýþþþýýüþþýûüüýýüüùõíâØÕÏÏÑÎÑÏÏÓÒÓÕÖÙÚÜÞÚÛÜÚØÜââáäéìòõõòîîðìæÞÚÞÛÛÝÛÛÝãäâèìíîòòòñññïîæß×ÖÔØáèïöùüýüýûùùùýýýýýýýþþýüüûüýûýýüýýüýüýýýüýþýýýýþýüüýýýûûúúúýüþýþüüýýýüúüüüüüüüüüüüúøóêãÜÙÏÅÁ¾¼¸µ´§©¹ºÁÇÊÌÎØÜáãèçççèèççèåããáÝÛÙ×ÖÑÌÉÅÀ­™mrhev€œ¸ËÍÁ²«¬ª£¥¨ª¤¨¨¨§£¦£›F+$#!% $%%./5C41&!))71 =X[SL;&#3=;A@D<1-#%$%"$'*')36)   - -   -  - -  3747%J43>27<=@>@BBA><<:J@>;:ALHOGMMLF<+0?IHJC<-,* !C]jk}‹rX\ggmqr}‚…|}zƒ~ƒrmr{{€ƒ|€€ƒ‚|la]G5Hm„„‚nU#  - #=QLR^e`afgiqrwroihd^]   -  - - -  -    &50&#!  -'&# ""3:A\]2%FF<6>@D>616;6;;.9;>9;JQEC<>/%($!"!/<5$#       -  # -BT^]XVNMFC2.0/1-"".+& &%("#)&*!#$% ""#  " " -  -  "%&,*>=B7  -  # #  !!  ."$#(,!F@FA8-)%$:P]ml`LR8*,0%$Bc`S?#2Xkz…“•’—™”˜˜’‘ Ä×ÛÜÛÙÚÑÑ×ÔÅ¿·«›•¡—‘°ÄÇËÎÏÑÕÕ×ÕÕØØÙÙÚÜÜÚÜÜÜÜÙÚÙØÕÕ×ÕÑÍÆÅ»»¿ÆÊÑÔ×Þâæëîòùûûýüüýüüûûüüûüüüûùûüüýýüûúöðîñöúüýýýýýýýýýýýüýüýüùûüýýüýüüüüýýýýýýýüýýýüüúúûüû÷óëäÛÓÑÐÍÎÐÐÐÑÓÔÖÔÔØÛÞáßÝÞãÝÝßáâäèíñøøù÷ñòòñêçãâãÜÜÛÜÞâçêïòõ÷úõéö÷õóðíéâÝÚÖÕ×ßçïöûýùúú÷øúýüüüýýýþþýýüýüüûûüüýýýýüüýþýýýýþýýýýýýýþûüüúøûûüüüýýýýüýüüýüüýýýýüüüüûúõìãÚ×ÍÆ¿½»¹³°§®·¼ÁÄÈÉÏÕÝàäâåæçééçåããááÜÜÙ×ÑÏÌÉÉ°™Œxpn_qƒ›ºÏξ¸««®§®¬©©ª¨«­©±¶­£q8/*!" $#&&-?<5/!)! ,0AYTPRF*"$/>D=4>A78*(# ##('),&$ 5=#   -    - -  -   0/:85',:039=?9;?DIA@P\R\gs}}rywk[XhrxuehaWGWlq{{tn„Œ†ˆŠ‡ŽŒ‹‰Ž‰ˆˆ‰†‚v|{hlhnrnkcbQRRPFB76  "DfuvrtkY]hfluoy†~v‚zruw~€xsxx{qnk~ywh^T@;NoŠŒnH #JSLUbfi_fjhjrozokieg\ -  - -  - -  -  "! !,'!"" - /," #3GMW^]@':UG;.25B@>14774077CFDFJMJ:.,,$%*&!1;6&  -     -  - @V[RYPOL>><6:73-#,./&$ %0-" (-!"'" !  -  - -  %0IDA?:,  -  - ! #2&%##%*02?IIB8/)*6GWkmc[K-"(0,3\gnP0@nv}ˆ‘™˜™Ÿ™Œ“–”¶ÖÙÚÜÜÙÒÅÎÔÕÆ·®¥›Š‘–œš’§¼ÃÈÈÍÐÐÔÔÕÖØ×ØØÜßÝÜÜÛÚÚÙØØÕÔ×ÔÕÍÉ¿º½ÀÆËÒÖÚàåèêñöøûüüûûûûüýýüüüüýüüûõüýýüûùöòîð÷úûýþþýþýýýüýýýýýýýüüúùúýüýýüüýýþýýýýýýýþþýûûúúùõðêáÚÓÒÎÐÏÑÏÏÔÕÕÕÖØ××ÛÛßàßàßàààÝàäëíïôùùùùôòôñëæãææáÛÜÝÜßçëòöøùüðáûùøöóñðîçæãÞØÚÙÜèïöõø÷óóùüýýýüþüýýýýüýýüüûùûûýýýþûþþüüûýýýýüþýüüüüþûýüûùûûýýüüüýüüýþüüýüüýýüüüüûú÷íäÛÒÈƼ¸¶±ªª±·¼ÀÄÉÊÏÙÜáãããæèçæãããááßÞÛÙÑÌÏÏÎǸ£‘|wgf{z¢ÂÑÒÇÆ¿´°­°­¯®¬«¬®¯¶·Â¼ `6-&",$$" !-;?<1%'.&)6)+KV_TOD0+)18@::CF@/*!&&'28),6*(%68(  -  -  - +7838.54&0;;:73=DK=;86@8=;8A@FF85>BOVG2!2ALQOB.,%:L]hqpobPHMZ`XSTH:GFF:Peo~ss‚yjXYhqzumq^PET\\mokm†‡‡Œ…‰’‹‰ŽŽŠ‡ŠˆŠ„~rqr|rioh]e[PFAB:/, *YowvvxjS^hbk‚{€ƒ~y€phl}‡Š|}‚ƒ„yuwƒ€{ueSPJ7Lx‰‹‚P" )HQUXbae]bkhmpnoppginb   -     - -  - -# !#)'%#$ (&# 'GcurjeP@9H_J;20995713?=6616<:@MJE>0'!!!)*!&!8@7)$"   -   - - #FQPMJLNC;@5:CA=,( .8=7& *0-.$$" " - $ -   ((7CEDAJK/  -  !"  '"! &-%!#..8FJFL913,+?TaidVJ/++*'=bhbE*.Ujy‚˜–”š–Ž’’”¯ÕÝÜßááÞÏÃÈÉľ° ›‘ŒŽ“ž£’›­»ÁÄÈÍÓÑÓÕÕØ×ÚÜÚÝÛÛÜÚÙÙÙÖÕÒÔ×ÓÒȽ¶ÂÊÎÐÑÙáåèêðõúýüüüüüüüüýýýüüýüýýöúýüûøôïíîôùüþýýýýþþýýþþýýþýþýýüýûù÷úüûûýýýþÿýüýýþþýýþýûû÷òíçÞÙÕÒÐÒÓÐÑÖÙÓÖÕØÚÛÚÞÞÝßãáÞÝÛÛàããåêîñôúúûùù÷õôòëäàçéæâãâßÞåìôùùúûúùúùù÷÷ööóñðìëæãáÜÝáæìïïëñùýüýýýýýýýýýýüýýüûúûüþýýþýýýýýýýüýýþþýýûûýýüüüüüüüûûûüüûüüþýþýýüýüüüýüüüúùõìà×ÏËÅ»¸·µ­¤§®³ÀÁÈÌÏÖÙÛáäããååäæäâàßÞÝÚ×ÓÑÑÒÍÉ­–vhm‡‹¦ÈÕÕÎ×Õű©²°ª¬ª¯°³²³»ÅÉÁ•R6'*''##,87=4#**(+2/)@Y\SOQ?21463=8K>@A*"!"!#./*0" "47#  -   -  -  -13://-..98A<58>DB5:57=;:?:8A:538>JYG0 *CO^gdM0,*5TaivtnYF>HTTYOHJJF;3:M^kz€~zjXVepxoqseU9==45333;><9)%$#,BH<&&"*     9    (KHRXGKH==99>@70./'#)?3".' %/.+(" - "  -  -/=GJVR[hV%   -# -  !%%  #&%&32>LSHMI5,/";A_ekX=&#$-/EZgR)7[lv…“•›™˜‘’ËÛÜàååäàØË·µ³­¦œ‹‹Ž‹‰™’‹š§¬´ÀÊÒÓÕÖØÙÖÙÛÜÛÛÛÚÛÚÙÔÔÒÓÕÖÑÉÀ¼µ¸ÁËÑØÓÚãéìï÷úüüüüýüüýýüýüüýýýüûûôüûøôïëëï÷üüýýýýýýýþÿþýþýýþýþýýýþûøõùüüýüýýþþþýþýþýýýýýûûôåßÛ×ÖÓÖÖÕÖÕÖØ×ÙÚØÛßßàßÞàãááÝ××Üãäåæëïô÷úúüüúøöôñìååëìéåãåáàèïóúúùúüùúúùùùøùöôòñðîêèæáÞßââåèíøüüýýþýþýýþýüýüüýýþüýýýþýýûýýþþýþýþýýþþüýüüþýýýþþýüúùù÷÷÷üýýýýüüýþýýüýüüüûú÷éÞ×ÑÈû¹¸®¤¦°¸½¿ÅÉÍÒ×ÚßããääçæåäããáÝÝÚÖ×ÕÔÔÐÌù¦‚qlrx~«ÊÕÐÒáâÖÁ²²­¬§ª­°°®µ»ÁÒÑÁ“R-+!)!#(/;88.&+%&2B?Ra_XRE794>B8;@LE;5,#&#! &)&"( '40!   - -   - - - #.21)*058?;?',.&%$"$)<971("# 1FOXfa`TQC>8>?687HA?5*"&%###&& !3*      - -    -$*&(.4@@@9C:U~Ž|`<  6O\Y\`gcdcfke`hjklfjj -  -  - - - -     !0:92)  "#!&( -%,&(  - 'Vrxsk^[decaJ92;>9<<7687458;8@A==/3,,%"%#!2DA, #       "8NVMLMAF9875BPF3.3,*-"##$'+!) - $, )%     - ,FNfŒ‚hpw}xI   - 1#$$#! '.1-'7FS[ZTZH7,)->RY_P,"$,'>bgY5Hdp†“›Ÿ——––”Ž”¼àÞàãçèåáÚÉÅÙÒÎ˸œ‘‹|~€•–‡•´¾¼¿ËÓÔÔÕ×Ù×ÙÙÚÛÜÙÚÚÙÕÑÕÙØÕÌÃƽ¼ÁÇÆÎ×ØÝæêð÷ùüüüýüýüýüýýýýýýýþüüûñöïðòöööùýýýýýýüýþýþýüýýüýþýýýýþýýüýýþþýþýýýýýýüýýþýüýúöðåßàßàááááàßßàââáâãåææåççæåæäãâÞÜÚßåæéïñòò÷úùúøóòñðíàâêìëéãáâåñùûýüüüûüûûûúûúùúúùùøôòñïïïíéäÞÜßæïøûüüýýüüýýþþýýþýýýþýüüûúüüýüýþüýýüýýýýýýýþÿþüýýýýýýûôííôûýýýþþýýþýýýýüüüüüúòæßÙÔÌÀ»²²®¶¿Â½½ÀÆÌËÔÙÛàââãååääãÞÜÚØØÖÓÑÐÌÎɾ³{}q¥¼ÍÒÇÔçëêáË»¸´±¬²²´·º¹¸¿ÎÜÖ¨W85$$!#)>94>."&%(=Za[UVUA;A?=>66:C>;2&"('&(&'),' %-*  -      - !$1168A870.,$$&$'!% -  ! >  ?LXVoŒˆˆ™«¶¡C  ! ! ('"$%(2%#3FT[\ZMK832#-IMM;*0 )PfbM%+]luˆ—”›Ÿœ—•‘ŒŒËáäåéêëêäÝÂÁ×ÔÕϽŸ‹€‰‘’ ´À¸ÃÉÑÔÑÕ××ØØÙÜÜÚØØØ×ÒÓØØÒÊÃÇÎÆÂÈÊÍÕÝáæìñøûüýýýýþþýýýýýþýüüýýûùôïóó÷úüüüüüþýýüýýþþýýýýþýþþýÿüýýýüýýþþýþþýýýþýþþþþýýú÷óíèåäåêêëìëíìêèåæèæääæéèèèêéèéèéèããâÞáãæéíñòñóõõöõñîíìéÞâêíêèäæéíôùùûüüüüüûúûûüúûûùùùùøõöõóòôòïëåàáãéòöúüüýýüþþþþýýþýþþþýüûûüûýüüþýþþüýýþýýýýýþþýýþýýÿýýúööøùûüüþýýýýüýýýýýüýüýùòêáÛÓÊƹ·¶¶ÀÃÀ·»¾ÈÌÎÕÚÞããäæåããâáÞÛÚÚÖÓÒÒÏÐÈÁ¿°¤{ƒ©ÀÌÎÆ×êìîëÞÉÀ·­°°¯·º½»¿ÂÈÕÙÊN0)%& *26=?('%#5Q__^VFBCGF<=65B:=-/-#%+%#(+!'%,-   - - - - - - - #(0017<>C;9;4/860.23)'+.8AA;=778@HFD>#?aqogVD+)-=V`dag\_UNOUVOUXRGJSUX]_grtmrxiQHVhkkqjiSIJTWZkuo}~€‚ƒ……ˆ†…Ž”Š‚ˆŠvtpu}y{|xxmf^cc^T=82##Fl|yv}h^\fjtqvx|}uyzxx~y{ƒ€qlo|‡}~mgbT>]““‰oI%0E\b]acjfakhsldfjqurm - - -  - 0H -  -  -54-)"# #(! !!$)  ##*!!&//76ADIA:312.298;<9<83*/4@;65;DJ>75/""12##! 3E@0*!!  " # "ETIEEBC==5(:HAAA@H?0$"-,"$ #     - "EOXh€œš§Íäç׆'    ,$ !%+0-$(;Ya^\]R>7.&,2CD(!&"<_i`? )Sk‚Ž••–›ž¡›““Š”¥ÍãåèêëêéèÞÅ¿ÑÔÓÔ½¡“ƒ}‡Š’Ÿ©ºÄ¿¿ÍÒÔÓÔØ×ÚÜÛÛÜÚÚØÙÕÖÙØÍƽÆÍÓÍÇËÌÒÝæèëôùüüûýýýýýýþýýüüýüýüù÷õóöùúüýüüüýüüüýýþýýþýþþýþþýýüýýüûüýýüþþþýþþýþýþýýýüüûôìæâáêíïðóôôõö÷òðííëêêëëëééêìêêëììëêèääãááçêîððïîííííìêçåâÜàêðìéëñòòõøùüúûüýüüýüüüûüûûûùøùùùøùùøõóòðíêãÞàæîóúüýýýýýýýþþýýýýýüüþüýýýûýýûýýýýþþþüüýüýýýýýüýþýûüýüüüüûûûýýýþýýýýýýýüüüüõíâÚÖÎÅ»º»ÁÆÅ·³¸ÁÌÌÑ×ÚáäãäæããâáàÜÛØÖÓÓÑÎÎÈŽ°£¡““¯¾ÐÊÀ×éîïîêÙú±´´³¶¹·¼¿ÀÃÍÒб_2%+&"#'6BF6()'"3@Uc[VKPMGND:,3<;9301$#( %'#'&/*  - - -  - -  -  !'2.,9,'BbunaE3*5:I\idac_SKKLUKSX\UZ\WKY`dtvlvzmUGDU`igmpbRQZbclrpq{{†‚‚Šˆ‚‡ƒ’‡~†€tf]aq€~{~urk]\ZW`XHG5 "&A[q|„‹lU]gjs|„yw‚|xƒ€}urss€}nku}x{†…oheLCWn†‰†}gG# -@S^d``ekjlrrtjdomvsp -   )   - - &.:1('" # "!%$($$ -   &$&-,--,0/5+0-+31,3458234036/$!37.*/+#%+"%#!:C;    +EQIDA8?03-2111;KF@?EAerhaJ;//4K]ghfe[[QKVVJ\_SSPP\SYadnnlouh]G?P]adkd]VO^lgkqsu~ƒˆŽ€ˆ……‹Œ‹Œ‡„…Œƒn`fuy}|uxlgf]h`XSP<&?euyƒ‚m[^ilp€{~†x€ƒ}vlo{z}qq}xpz‡€kh]JASp‚{riM  8MQ[eiakp`lqrqjnvqjqq - - -   -      -%)22*(!#"""!#''&! ""  ‰! &$..$'630)"().&(),052/1*.!#,0( !) *%)'"#2CA/$!! -   -   4KML??:8@60,0>K84-+6-*-"&+*##(&"" #$# ! - Li+ F_p‚˜¹º»ßêéÕ-      %$ +!#'2QbbgaXQE<)%4=K3''3PbVK. Ck|‹’˜›ž˜—›²ÈÀÏäéëëïëëéÞѽ¾ÅÉÏħŽˆqm…“ž¨¬»Å½ÁËÑÓÖ×ØØÚØÙÚ×Ù×ØÙÛÚÙÒø¾ÐÖØ×Ô×Þãåêíõûýýüüýýýýýýþüýýýüüûôõøûüýüüüýýýýýüýýýþýýýýýýýýþüüüûüûûüýþþÿþÿþþýýýýþþüû÷ðêåæìïòôøøùøüûùùùùùø÷ôôóñðñððððîîïîíîííêãÝâæçêêëìëëæàÛßßáÞßØÖÖÙâêèæçîôóó÷ùúùùüúûüûüüûüûüûûüüúüýüúúùøùø÷÷÷òìéäãâàâèð÷ûüüýüýýýýüüüüýþýýýýýþýüýýýýýþþýýýýþþþþþýýýüüüýýýþþüüüûúüüüýýüüûýýüüúúôëáÚÔÉÇÇÇÇÆÀ»¸¾ÅÌÒÒÔØÜâãáäåãáÝÜÚØÓÔÐÏÐÏÊÈɽ¹¶¡¥»ÉË¿ÂÝíððòñìØÀŽº»»¼½ºÂÀÁÊÍÎÄ—R.' (( ##54/;Chproc<)/4=LZfkfac^XYXOJOLNDLPRSW^amnepk^FL^a[dgf^NUY^ilmqwƒ}‰‡ƒ‚‰Š‰‹‰‹Šˆˆ‰ˆ}zrt„‚}lkfa`_d\^RLA("GgvseX_bepsq}†zw{|rpkku{zuvtoƒ…‰nc_OBSvz{wskO $AOV_kihkmfhmunnttlgop       -   - -  - -  '+11("!##!!$" $%#" -  - A$#%%4+9?:9+'//+)$).3&#)1*(#,03( "&(#:C>'"##  -   *KNEAC>4..,&.`iec]VI58,!5G>3'%7XbZBNsˆŠ’Ž•šœ £—š©ÎÐÂÑãëììîìëêâÖŲ³ÆÎÈ©’‚}ƒ¡©«¯¼ÆÁÂÌÓÕØÕÔÖØÙØ×Ø×ØÝÛÝÙÕÐÄ¿ÃÒØÚÚÙÝãçèìôúüüýûüüüýþþýýþýýüû÷øùúûýüüýüýüüüýüýüýýýýýýýýýýþýüûüüüüüþýýýýþýýýüýýýýûõîèææèïô÷øøùøùùûûûúüúûúúùöõöóôõóñïîïîìíëìîéâÞåçæçèèçææßááâââãäãÛØØáäáÝÝæïñó÷ùùúùúøùûûûûüüûüýûüüüüüüüûûùûùúùùöõòðîèèáÞàéñ÷úüýýûþýûûüýýýýýýþýýýýüüûýþþýýýüýüþýþýýþüüüüýþýþþýüüüüûûûüüýüûüýüüüüúóêàÕÑÌÊÌÉĺ¹¿ÅÌÏÏÏÓÜÞáâãäâáÞÜÜÚ×ØÍÎÑÒËÌÉÄÀ¾µªªºÊÈ»ÈáêðñðñíäÎÁ½¸¾½µ·ÁÁÂÂÆÊÌÇ©j;( "$%*69=;-"%#*A[aZZcZKI@5777801#$')%')*''&$,!!%   - -  - - - -  $+26:=@KA:888=?@7'%*(6E<63,*148?<;:3C_pq}l9',+*9Rdgh^]P^bXPLMQA?GKOQMU_habnhYGGZ\bfke]LMS`lyyst…‡‰…Ž”Š‡Ž“‘‰Œ…‰‰Š‰€Œ†„…m__`^aZSa[N8$'?anqt]SZ_glls†t{}ƒyuohfoowvmjry‚„~pc_LL^dihikriljijfkiqknh   -  - - -   -      &,3*&#""!!!!!!! $$#  - - #!# +973)+;-.10646163,1)"%)0$%'3'&!"+##"9JB" *&# -  - - 2MOKJA=64,+'3D=/&/1-53+'#!$##("  -  - B±×•1 -'e…£·Ä¶©¡¹×Ú¿c     -)$'$"$19)%)Okhnh]G@>4*/>=+)*FZ]P5!/buˆ‘—‘›¡ž   ’ŸÄÜØÇÓçëìíïìëêãÝѲ¨¿Îɬ‡†©¯¬±¿ÆÈÃËÓØÙÕØÕÕ×ÔÕÖ×ØÝÜÚÙØÒƼÁÒÚÞÞàáåéìôúüüûüüüýýýýýþýýýüüûùúýþýýþýýüýýüüýýüüüýýþþþýýýûùúýýýýýýýýüýþýþýýýüüüùòìçäåéíñ÷õ÷ùùùùúüüüüüüúûüüûøø÷÷øøõñïêêéæèèëëéããåæääâæçååäããæåããæåàÕØâãÛÛÚâîñóôöøøöõôõöùûüüüüüýýüüüüüüüûûüüûûú÷ùøøõóðïêæááæéïöúýüüüúûýýýýýýüýþýþýýüüüüýýýýýþþýýþýþýüûýýýýþþýýþüýüûûúûûüûýýýýýýûûúõéÞÔÑÍÌÊÅ¿¼»ÂÅÈÍÑÐÒØÚÞáàáßááÜÚØ×ÔÔÎÏÌÉÇÏÇ¿¼°´ÁÉ¿µÌåìðòððïëÚÈÁ¼»¹º¾ÂÁÂÁÄÈÇɸ‚>+*"#$ )2938.-( '5Yc\]aRPJ;0;:=-2--.,,$+,&-'#%'&$       - -  -  -  -  $+/9:=??=>B74+5:@(+,++><9:(!.87G?5;;!:PhtqeF*$'+:L[]b\TFQfXMDEIG@BAFJQ[`gd[ga[MFPark`a`PNS_my}vx~|†Š†’ˆŠ‰‹‰|~ŽŒ‹Ž†€ƒ€l^`ccXLMXSD3'&<[guˆdX`ejir~}}x‚€|pusopptqlrrp{‡„„xleO>Gfvs|~h:  $=R_jhjbjmfnjinkelfhmk - - - - - - -    - -  - -     +-9)$%"%!#!#  $"$ - ""%$!$49-&,2130683=:28<7/'1*"'$*!!$/%%!7?2)&     &;KSJC@;9:3,-+10.(-0,(" -#)+& $#     -M¾ß¬F  -{¡ºÑÒÄ®¬­ÁÈ”=   !-*"))8;-&8_hij]ZLB9%1@9"),OiY9 Ruˆ’š–™ ££ Ÿš­ÖàÙÈÔèéíîïíëëâÞÔ½­ÂÍ˶—’œšœª²·¹ÃÇÁÀËÓ×××ØÕÒÓÓÖÖÔÍÕÙÙ×ÚÕÌÃÁÑÜßãããæëóùûýüüüýýýýýþýþýüûûûüüüþþýþþýýýýýüýýýüþýýýýýýüûûúùûýþþýýýýþþýþýýþýýüùõîæââçëòøøùùøûûüúüüüûýüüûýüüûøùùùúùùöîéçæááãäèèãäæäâáãáæåæèæâåãáàãåßÖÛââÜØÚåïñïððòòñïïïòøøûûüüüýüüûýýüüüûüüüúùûûùùùùøöóóñíåäããéð÷úú÷÷úüüýüýüýýþýýýýýýýùùûýýýýþþýþþýüýüýýýýþýþýýýþýüüýüúúúüüûûüüýüûùóåÙÓÐÐËɽ¿¿ÀÂÈÉÊÓÒÑ×ÚÞáââãÝÜÛØÕÓÏÏÍÌÌÆÊËľ¿¶ºÃżµÒæíðòñïðïæ×ƽ»º½ÁÀÀÆÇÃÆÇÉ¿—O*"( #" (,915*'0+(3Y`Xe[QXJ81:@@1,(/.&*&*)+'("+.""#   -    - -  "-:;18<@8@>,=š45.-1*,*1/8--&,37<@529.$7Xjh_I5-)0GMX`^^WPQLHGC;IL?>@BHMV]fdWY^P?BIWc^bb[PPY^hq{‚†‰Š‹‰‹ˆ‰‹Š}‰„†Œ†ˆ{€†yk^`c[PCOQPC52&Eeu|…zgSZZfiv…|vt{rlutxy~ytƒwp„„‰„qedK4=_rvumYA!  3P_hjbjhglkmhkmjpimug  -      -! -    - +-(/)"!&$&64')$" + - - - "# $!'*11,/,.4//0=02606<2.5.+%,*"$! %#"851'&      &?OFF<9,5/#*)/90-05), '+,+4#!#%    -   -PÀà³M -D¢ÀÆÒÓʼ²¯·²l#   -  )%"" .1.&0VhlbX]VA82-/>33ReW' -a}Œ“›› ¤™˜ ÀáåØÂÒéëîïîïíêäÞØÄ­ÄÔ͵ –¡£¡²·¶ºÀÊÂÀÍ×ÖÔÖÔÓÏÑÓÓÑÌÍÖ×ÙØÛØÏÄÆÏÛáââäèïøûüüýüûüüýüýþüýýúüüýüüýüüýýýýýýýýüýýýýüüýýýüûûûûüýþýýþýýýüýýýüýýüüú÷îæáàáêîòøúúúùûùúûûüûüýüüüýüüüúúûùüûøúöíçåÞØÖ×ÛãæææèåßÛÜÝãåäæåããáÜÞâáÜÙÕàäãÛÚáêíííîëëèèæèïó÷úûüüûüûüûüüüüüüýüûüüüûüýúúüùøöôòðíçãàáéîðïòúûüüýýýýýýýüüüüýýú÷øüüýýýþýýþýûüüýýýýýüýýýÿþýýýýüüûúúúûûüüûüûúøíßÚÑÐÍÅÁÁÃÅÈÈÊÊÏÐÐÒ×ÝãáâãßÝÛ×ÔÕÒÊÊÊÎÍÉÊÇÀ¼¼ÀÆĶ·ÕæíòñòòðñíÝÍÄÄþÀÃÂÂÊÇÇÉÉŨa3%("#'%!*2@>5.'1-G_fef\[ZB27=::0'&'-)&!%*'%).&  -  -    - -  #0:4>FC@IE:3;–E,,//*).)$K&79=7166''4VZ^cK1'5M]Z]WWQF=9CG;@@EH=.?CHP\YYOOKH;2EELZ_^VOJ^jejrqqv~†€|{…‚‚ˆŒ‰Œ…ˆˆ‰‰‚q`V\\NE=LXMB?-*Omux~zkRU\em|€„}yogjw~suz~qvw{uny‚}|}kYTH@<\nsrpeB   -6PZ]acjjllkcfljfiinlf - - -   - -    ! %''")1$""$$%  !!!# ! !# -  %!!&-24)',)-,4-1:/09434812-&-4&$ -- &$!<>""'   -  "BNGI97604--*5>C2.<+'!"!$--0"#   -  NºÞ¹N "ƒËÖÏÍÔÒÇ»·½¯c" -   ')#-4. 'QdljkbYH>;426.19dmG(5n‡‘›˜œ¡œ¢™›³ÕããÙÃÓçëïíððîëäßÞ˳ÁÎË´¤Ÿ£Ÿ¤¹·³¸ÀÃÀÄÌÑÕ×ÕÓÓÍÓÒÑËËÔÙÚÙÝÜÜÔÌÄÏÜâáãéì÷üûýýýýýüüýüýüüûüüþýýüýþýýýýþýýþýýýþýþýûüüüûúùúýýýþýýýýýýüüûüýüýûøõîäãààçìñöùùúúúüûûüûüýüþüýüüüýüüüüûüüüùùöíããÞÝÜÛÚÛäåçæâÞÜÝáåäââáäåâáââãÜÑÔÝáäàÙÜÛãèëêèèèëîíìðôøúûüüüüûûûüüüüüüüüüüüûüûüûüüúù÷öôòïëçãããæêï÷úüüýýýüýþýüþýþþüüûüüüûýýþýüþýüûýýýþýüýýýýýüýýýýüüüüúøùúúûüüüûú÷èÜÒÍËÅÀ½ÁÃÆÊÉÊËÏÒÕÔÜÞßàáÝÝÙØØÔÔÎÌÉÊËËÉÄÅľ¿ÉIJÀÚæíñòòòñññéÙÊÅÄ¿¾ÀÂÄÁÅÌÊÈʹ€<0'$)() .;::6(2:Lggedc\N?4;7-'&/+/(&'#'"#)()  -  -    - -  - - -77(# )GMLPE   #8KWY^ecikikhilkfsnidh -  -  -  -   - -      -  -#)&*'.*"# !!$ !"  %$ -  -" $+'&//5,*)'6.+/486785>905(-3' $!$?F3 10!   -  ,ENKGEJBB=3($(+'$!    -  K°Ù¹R 5¡ÜàØÓØÖÌĿ®]  - -  "'#!  /))"!9`kf[bfXUNF:1$-Nf]1Luƒ“š›”ž œŸ ÉàåäØÈÔçêìîððïêãáàÒº¼È̾£§¦©©¸º´¶ÀüÀÌÒÒÔÔÕÓÑÖÔÎÌÐÙÚØØÜÚÛÖÐÉÐÙàãåëöûüûüýüþýüüýüûûüýýþýýýýýýþýýþþþýþþþýþýþþüùöøûûýýþýýÿýýýýýþþüüüýüøñêãáÞàåêðööúúûüüüüüüûýýýüýýüýýýýýýüüüüüýùúõëâåçèéçãÝÞçèæàÝÛÙÞÞ×ÛÚâäæåãßâäÝ×ÙÜÛßâÜÙØàæìêçíó÷øøôñò÷úüüüüüûüûüüüýýüüüýüûûüüûûüûûùúúùø÷ôñìêçææçîôùüüüýþüýýþþýüýýüýþýþýýýüüûýüüûýüýþýþýüüýýýýýþüþüýýûüúøøùúûüûûùðãÔÍËÃÀÂÁÇÇÉÌËÉÍÐÔÑ×ÛÜÝÞÞÝÜÙÖÓÏÎÌÉÈÊÊÌÆÅÆ¿Âƾ®ÁÜåîññòôòòóðäÕÇÄÆ¿ÅÇ¿ÄÈÊËÊÄN2+*) &#%8><<78BUlpke^Q?55>;3*,,.0*'%*"! $*++)!  - -    -     /54=@DA89>=6876;2. %).-'&(/(-B, 6=LNC<) &6EB=:...5=<>>8:<7;470/&'!0+( "%*-2  $.8AD=$%-=I;A=;..4873..4?;HF=4?EIYca`SIELV^gqu~y|t~xz‡†{|~„‹‹ˆ€xqjjndP7!%0FHIH7/! %JaomhXJ==SXafpmm‰|~|{|€ƒvqjgpoqloqnlaZYNDOX_lrdV8# -   -COX_dfdpijkihntqijd]  -        - -    " &+)*$",)" ##!!!#"    #+!"/,,#&')-)*+*81#"&(.9;9:0!!&!&*%-<5#$%! - -#" 0IO=CDD:66)/%.30(-2&! ??   - - #f¦½5' -D°çìëëèäØÏÉÀš@  RÝL -  %! &)   (4,$"7^kljfihniK#PeSC ##Ly†•™œ™¡ž ››£ÉàãåæØÆÑçíîïðíííåáâÚì·Ä·©­³§®º»µµ¾ÁÀ½ËÏÓÐÐÒÓÏÐÌËÒÖ×ØÙØÝÝÞÜÖÎÏ×àéôúüüüüüýûûúúûûüýþýýýýýþýýýþýýýýýýýýýýýýüüûúüþýýýþþýþýýþþþýüüûøòíåÝØàçíðóööúûüýûüýýüüýýýüýýüýýýüüýüüüýûüýüüùøòìéâåèêëéééèçéëéáßßáß×ÏÒÖÛÕÔÕÓÖ×ÖËÊÔÙÞããâæèèåæçêðóöõòðïñöùùùûüûüûüüûýýýüüýüüüýûüüûýüüüûùùûúùøù÷óðìèæäãéïõøûýýýüüûýûýüýýþýüþýþýýúøûûýýýþýüýýþþýýýýýýýýýüþþýüýüú÷÷÷÷óìáÔÌÈÄÆÄÆÉÍÉËÇÂÆÊÏÎÐÖØÜÜÛÜÚØÕÔÑÏÍÎÍËÉÈÊÊľ¼®²ÍÞèíòõñòñóõôóíÝÓÈÁÂÅÇÇÈÊÊËÎÍÄQ450*&),#/4;JDE^ttpcf_S817BC278:91-*%"" %++$"#  -     -  %)7?=:>2/4?4157"#$&#%!*& "*2+" %+->F8+9A>ELI+)8DA?E:722.0176AC>4>KI<24>BXUSRQD=NZSdllvkafvr‚tx€|xzˆ|ƒƒ…ˆ‹„xjjnkhG)+ARXNH;1 #EYgiVIE8?EM]ipolŠ{p~zru~wsmqptnmkmtul_Y\VCAEUfePK7!  .@ELX`_bikieiipogkk]` -  -     -         ! $-&##!$!#*#" !#    - ((*)()42'#$&/+)'"$04044- "#431'" -  - ;NMHEC?955+-%)0.% # %!A !!  - - #j ¦h$ (mH¯æîðîëèÛÖÕÈ”;    ( '& ++#-\jlte_qna9,UZK3   -(]”š¢ž ŸŸ—–ŸÅÞâååÙÆÕèìïððñíëäââÚ¿ž«¾¸ª³´¨­»¾³²ÃÅÁ¿ÉÐÐÑÓÔÓÎÊÈÎÔÖÕØÙÜÞÜÞÜÚÓÐØßí÷ùüüüýüûûúûüüüýýýýýýýýýþþýýýýýþýýýüýýüüüûýýýþýüýþþþýýýýýüýýýùïçäàÝäêïõøùøùúüûüûüþýüýýýþýýüüýýýüýýüüýýüûüûùù÷óïëæãæééëêéêêêêéèããââÝÖÓÔÕÖÔÔÕÕÕÔÅÇÏØáâàæééééççèëîîîìíîîó÷ùùûüüüüüüýþþýüüýýýýýüýüûüüüüûûûûüüúùùùõóîìèååéëï÷ùýüüüüûüüüüýüüýþþþýýüýûûûýýýþýýýþýüýýþýûýýýýþýýýüüüüøöñîëåÜØÐÊÇÈËÉÌÎËÃÀÀÉÎÑËÐÚÙÞÜÛÛ×ÖÔÐÐÎÒÏÌÎÌËǽ·¬³ÏáéëñòôòòóöõóðæÕÌÆÂÆÅÈÉÈÈÈËÎÊ_:0&)12%*2>;E??Wnyvki`F:8=HA?>:<:2+'$&"'$%#*'&+ - -  -   - -  2:;9>:062840'-$!#! %!$',#! (1,DH6&"148?WY-->ME=@?70920'0078B6=???(2LPLR]`\FCKQQb]^bbdrqztwusp~…x€|ƒ‹‰ˆztvwj_M.&5ARJGA@2 !?_k_SSK8EIQ[ckrsuxxmunpvnjusursqlmrspjeg[E7AU]QL?3 -=GQV\^jmebbginlggda]  - - -    -   -   # %,($!$)"#*) $! - "  "'"',+$),),* ')/'$() #!%$)% # #&-+&!!! - -  -AAKB@B?>662)&$00*"##"(  1z¡\ J¯äîððïèÞÙØň1 - -   -*"'  - (('%#*Nekllmpn^,8ZdI" =dyŽšœŸœ™¥¨ž”Œ´ÙâæãÒÂÕéïîðòñðíåâáÛÇ ¦·¹³·¸°¯¹º¯¶ÀɾÁÊÑÖÖÖÖÓÌÇËÒÐÊÈÊÒÚÞÞÞÞÚÖÔ×âòúûüüûüùøùûýýýýýýýýüýþýýþþýüýýýýüüýýýüúûüýýþýþüýýüýþýýýýýüüûöîêâáâêîôõùúûûüüüûüüüýýýýýþþþüýýýýþýþýüýýüüüúùø÷óññëéæãèéêçèèêìíìêæââäãÙÙßÞÝ×ÔÕÙÚÙÏÍÑÕÚäåéëíêëèççéëêèéêéìðõ÷úûüüüüüýüýýüüýýýüýüüüüüüýüüüûüýüüüüùùùúöóðïëèæéìíòøúûûüüûýüýýýýýýþþýýýýüüüüþüýýýýüýþþüýýýýýýýýþýýýýüûüúòìææãÛÔÏÍÌÎÎÎÊú¹ÃÉÑÏÐÕÚÚÛÜÙ×ÖÕÑÏÏÎÎÉÌÌÇÉÁ½³¨ºÔãèíñòôóòòôöôóêÚÍÉÈÉÇÈÊÉÌÌÊÌË­m@,)))*%2/06:D456*,64-#$"&!  -   K’¦—H   A§åïðððíå×Ô¾r+  - $! $(  -&+*)(*J`tnpomnS"%@U\@$Rq|‹š™˜ž šŒ‚£ÓáäâÐÀØêîïñññïìçäâÛÄ©¢µ³°µ³­±¹¼²µ¿ÈÁÃÊÑÔ×ÕÔÒËÅÎÔÑǹÀÐÛÝáââàÝÙÚäòùüûûøôóúûüýþýýüþýüýýýýýýüýýýýýýüüýùúûüýýýþþþþþýýüþýþþýýüûöïéèèääìó÷ùøùûûûüüûýüüþüýýýýþýüýýþýýýýüýýüýüüüúøöóñïîëèææåçèãåçìîìííëéææäáäçäÞÛÕÖ×ÞÞÓÓØÜáèêìììëëéçäçèéèèèëëîñöúûüüüüûýüýýüüýüýýüýüüüüüûûüüüüüüüüûùùùùø÷öóñïìéèçåèîôøúù÷üýþýþýüýýüýþþþþýýýýüýýþýýýþýýþüýýüþüýüýýýýýýüûúøñìèãÜØÖÑÒÒËÉ¿¶¸¹ÅÏÊËÐÓØÚÚÛØÓÐÒÎÏÎËËÊÇÇÄÁÁ¶­ÁÕæêðñòôóóóôöõòëÜÐÉÈÈÆÉËËÌÍËÊ˺M5.,-.(+,3@=GC?F{™ˆoX;=LDH1*.5421*%,)"&)%     -   - - /0DBCH>83*0(#/+&#    5EH8"#(.8>9558<4073<6%$#"+%#-4259=:0>HLW`RT@4=HHOUY\^apkurhtruv}wvp|xuolqtlf`YB353>DC7?B/9WcdioiM=DKYahotnd^ajnrojowsurrtoqligXWUP;7HTXcaU@#  7HTZ]jifaikqkdgf^^g - - -          - -  '&$&(&#%$'#)+%&""$ -  - $ !(&-%))%'"$"'&,*# "'#0/'#   - !  -&7@>F?9.4<1-+246/ '&#&  - - &k¡¡5 - AŸßîððñïéÕǬa)   $ &   +)/47O\etpwnjC!+RbL, 1cy‚‚˜™žŸž ™‹xv–ÃÞäáÔÄÖëîïðððîìçâãܳ¥¦­ª¸¶¶¶¾¼·ºÁÉÂÄÐÑÓÏÐÎËÅÉÑÓÍ·ÁÏÜÞáââäãäåèíðóôðìëñüýýýüýþýýýýüýýýýýþýýþýýýüûúúûýýþþýþÿþþýýýþýýýüüúõðéââæéìïó÷ùùùúûüüüüüýýýýüýýýþýýüýýýýýüýüýüüýýüüûùøóðëëêçäåæçãááãëêìíìêéèééëîìæáààâåêçßÚâèéëìîîìïíéæåèèëêéçëììíòùûüüüýüýþüûýýüüýýüüýýüüýýýýýýüýûüûûüúùúúøùø÷õóðëåáÝßãéîíñùüýþþýüþýüýýýþýþþþýüüüüýüýýþÿýüýþýýýýþýýýýýýüüýüùõðêäÛÚÖÔÐÍÅ¿¶´¶¿ÆÌÇÌÓØØØÙ×ÓÐÏÑÏÎÊÈÂÅÇÁÂÁº°ÂØçêðóóõóñóõôóóìÞÐËÊÊÉÊÌËÍÐËÏÏÄ¡h:-4*)&')35===77,*-(1).'"#"! - &DI7"#12;28,!)06:625! !%) "%(,,076-'-9BECC5,2:GLLVYa_`dgkkpwkqxtpqu{lmfnxnkk][J2&,68=D=9.* -8XqrqumKBKCUgjcfjWRgkjckffgkxvqpxwmnh[XZQ4-Oecb\S8  2BMQU_dhkirvmifjbhb   -    - - -       "$&$&"*%%'&&+)!"!! !   - -()"%!%!!0&#! )!%$!"$"'+  /'   $ - .9<DB;2)23135*)#&,#  -  -   -       $9=<:16<8.046)&*$%!!  - !*:@0(./13;("#)('*+$ " ) +44'"(043+*!##.6-&1/6@wµ¨sn‘~]58HJN=35.24*/)$,!&%!!        -  -  - *8C=1551280'!%/($!      --/$!&2((-"", #%&',0+#!') &!&/?DQ]ccbbie_c_`eg`jeammckrqooke]^J5$;B;<+" /OallhYL>=?OY`[[^daagdpjjhnmejhldjpkhUJSD.%DcgbO7, %(&BLX\er|wsqg^[`]  -   - - -  - - -!!!(#*-'+#$#%#%(-)'%%   - -$/'""   !$"'#!"#  #$!.%  *6;53*+/'&$$# - - - -   '- $,&$)("*' '!&#$&$*3?DVZ]^[\WZTZ^bZ^Y`^bc`jjihppc_\SA&%<KNI<5' %:?FRcouxvicTQ]b  - -     !!#"#!"" "#$"#  ! #'!!!")#"#%&(%"""#%# """# +!&#.#   )"1DE=B614:6.25/(&%  -  -    0´½½­‡5 "IŸÖæëîñòóïìÔy4  -# !& "  - 6DRMFAQ^gk[6)YXE% MxŠ—š ¢™šž›xo~‹‚|©ÒÜÐÂÙëïïððïîìåâãÜÌú§˜¦¶¹³»ÅƺºÅÈ¿ÆÏËÎÎÈÄÈÏÐÇÁÀÄÀ¿ÃÙãåèêîô÷ùüüüüû÷ïîñùýýýýþþþýüþþýýýýûøôöúýýýýýýýýþýýþýýýýýûõñíêææèëðö÷øøùúúûûüüûüýþýýýüüýýýþýþþþÿþþýýþþýýþýýýþþüþþýüüüùõôóóðñòðîìéäÜÔÎÒÙàæêîóôöùøù÷÷õôóõöôîëòõôóîåÝØ×äîõùúúüûüüúúûüüúûüûýüüýýüüýýþþüýýþýþýýýýýýýýþýýüýüþüüýüüüûüüûûûùùù÷öôðêåçèéêìòöúüüýýýþýþýýþýþýýýýýýüüýýýýýþýþýþüüýýýüþýýýýûùôíéáÛÜÓƽ¼»¼¾ºÁÉËÏÍÍÓØÙÕÓÔÑÒÑÎÊÈÊÉÈÇÄÄÆÎÛçëïñóóôôóôõôñéÚÂÂÉÎÊÈËÉÎËÎÐÐÑÏÁŠL50.01/,3>^«Ì°k]XIDDJJI<5212(,0&'#')&% #  -     "68<;042'("# "$ - -   !#%!$&*'$ '  &'0898:MSKRGDFGQNQQNMEIQSOGNZ``VZZUN?0)'!-638,%4D?920'")'%1/+72-?@0''/5)-)*+)-1..&%&"   "#' "-38DIMSUVUPK@@IP   - - - -  -  -       "!" '$" '%")"%# &'& !""("( +&)$ "-(#   ! % -,5AB@;:-1;213-'02*'!   - "" -  -  !HÈÞáΞN&W·åîñòóôôòìØ„2   %(%!   .INND9BXheE'/YQ43l„‘“› ¥ššž•‹ntŒ„u†¼×ÏÂÚìîïðñðîëãàâÚÌþ´©§·ºµ»Åú½ÈËÃÇÍÌÉÍÆÉÑÓʽÁÊÉÂÀÂÕâæêðóúýýüýüüüùòìî÷üýýýþüýþþýýýýûúúøøûýýýýþþýþýþýýüüüüüöñçåçèéîðô÷ùúúûüûùüüüýüüüýýýýýüýýþýýþýýþýýýýýþýýýýüýþýýþýýýüûù÷öööòðíëèèâÜ×ÓÒÖÜáçëíîííïïîìíëççêìéàÛèêëìêæäâÜåïô÷ùùúùûûùùúûüüüûûüüüüüüýýýýýýýýþþýþýüýýüýýþýýýüþýýüüûýüüûüýüûúûúúùøöòíìíìéæäçîøúûýûýýýýýýüýüûüþýýüýþýüýüýýþýþýýýüýýýýþýüø÷ôóîèäÝÕÆÀ»»¾¼·¸ÄÆÍÐÍÍÓÓÔÖÓÓÒÍÎËÌÌËÉÄÃÃÆÐÚæíðñóóôóóññóïèÙ·³ÁÌËËËÌÍÍÎÑÔÓÌˤ`A:46+*)46M—ɹ|cVFFBTK=3%%'&'#)2,*3'!"%#!$) "$().  -   -R®ãëíìÙ¥R /wÍíñóôöôôóîÜB#  -3%   -"BDK8CBKWK)8PD Qw‰Ž™ž œ›–‡„qit„kk•ÄÀ¿ÝìîïðïïïëââäÞÎÉË¿µ±¼¼¹½ÁÁ¹·ÈË¿ÃÉÅÂÀÊÑÎÉÀºÁËÌÉÆÅÒåéðùúýýýþþýüüûøñîòûýýýýýýýýüüüüüýþþüüýþþýýýýýýýüûùøñìèéåèìñô÷ùùùúûûûûüüýüýüüýýýýýüþþýþþýþýýýýþýýýüýýüýþþýýýýüüüûúù÷ñíëæäßÜÜÝÛÛÜÝÛÚÚÞÜÜÛÞàÛÙÚ×ÚÚÙØÕÔÖÔÕÖÌÆÐÓÕÖØÛÖ×ÚÞàåææèëëëëíîñò÷øúùúùüûûûûüýýüüýüýýýýüþýüüüýýþþüüýýüüýýýýýûýüüüüüûüûúùùùøõôóñîêåäåæëïöúýüüüýýýýûúýýýýýýüýþýüüýüüýýüýüýýýûüûù÷öùúúòèÙËÁ¿»¼¶¬®¹ÆËÎÏÉÌÑÑÔÓÔÐÏÎÊÌÊÈËÈÂÃÌÓÞèëîòóôôóñððòñëÙµ¦°ÃËÏÉÌÊÍÑÐÑÕÕÒÁŽRF70*.+0/JPNC89+-0/%""" )%"*)       085)$'!  "       -    -  -    -     -    -  -  - -     -  -     - - " # $%($(..+0,&*##!$#&*+9IF60&" "*0/,(&"$%&)&#) #($%%#(%%!!%'(!!( - ! (++,),3%&&0(!'+,&1(%,,)-(*;62*'%*%)-("#.),*+!+3'3+%%''0. ((,(-)('% ((+-/#$)&(%*&#'% #+'")..2:91$  $  -    --yÈéïðíâ²]& +tÊîñòõõôôòîß I% )  "40   - - !@7>LG$(C22dx‡”›™  Ÿœ”“†~wae|}o†²¾ÀÙêíïðïîîêààäßÎËÊÄ·±¼¿¶·Åü¾ÉȽÃÆÞÌÕÎÅ´³ÀÍÎÌÇÇÐæíõûüüýýþýýýýüúôðñúýüýýþýûüûþýüýýüüüüýýþýþýýüýüûöñëèççèìîòöøùùùûüüüüüýüýýýýüýýýýýýýýþýýþýüýýýýýýýýýüýþýþüüýüüüû÷òîçèãßàÝÜÞáÞÝÜÞÞÜÚ×ÒÑÓÑÒÑÍËÌÊÈÉÆÈÈÉÇÃÃÄÀ½ÀÆÆÅËÄÆÉÎÕØÜààáäããààáäæêìñóõö÷úùûüüûýüûýüýýüýüüýýûüûüýýýýüüüüûýûüýüüüüüüüýüüûûúúùøùøöôñíêèãååçîôùüûüüüûø÷üýýýþþýýþýýýüûüüýýýýüýýþüûú÷÷úüûøñãÒÉÁÀ¿·³±¶ÁÈÍÐËÍÒÓÓÔÓÏÊÍÌÊÇÉÅÈÀ¾ÆÎÜæëïñóôôóñììòòìÛ¯«¾ËÏÏÑÍÒËÌÒÓÕÒÆ¥gB7873141>Z§Á \<6@VKG<521-'#+%#%*% !" %$    # -   - -        - - - -      - - - -  -  - -    -   -%  - -    -     -!  595>,&D>!   &'  -       +  -   ! $*# ")'*$&02"   - - - 8ÕëññðèÂp30mÅëñôôôôõóðߤF:!0-"  2OI??<8BI- 1?$ Dtˆ–žš¡Ÿ˜šnh‰{_gvŽ‰‡§»½ÚêíððîîìéåäçäÑÍÏĺ´¿¾´¾ÇÄ¿¾ÉȺ¾¿ÂÂÂÐÒƼ¯ª¹ÉÑÑÎÌÔèòúüüýýýþýüþýýûøññøýýüüýúüýüýýþýýüýüüýýþþüýüüú÷ðëêåäèêïò÷ùùøùûùüüýýýûýýýüþýýýýýýýýþýýýüýþýþýýýýýýýýýýüýýûúúùöóðìçãßÝÝÚÛÛÞÝÝÜÛÛÛÚØÑÉÁÀÂÆÂÁ¿ÁÀ¾¼½¾¾½À½¹··¹´¶¶´¸»¼¹ÀÂÉÍÑÓÖÚÝÛÛÙ×ÙÛÜÝàäèçêëîðóõùûûüüüüýüüþþýýýüþüýýþüüüüûýýýüûýýüýýýýüüýüüûüüûúúùøøöòñïìêæãßåìñøûüúøñóúüþýýþýýýýýýþüüûüûþþýýýýýüùùùûüûúøîÞÎÈÇüµµ´ºÅÉÐÍÍÐÒÓÔÖÒÍÌÍÊÆÉÇÆÁÁÅÍÛäëíóôôôôñçêòòìÛ³¡¸ÉÎÏÍÊÐÏÑÓÓÔÔεwJ;86404(:N†®”V>=KYO312340+**&)$''#!$*+      - -   -    - &$  - -     - - -   - - - - -  - -  - -   #,") - 4NK$ -   - -   -  -    -      - -   -  -7 -   -  -   - -  - -  -!,!  -  IàíññðìÖ”H 6h¼éñòõ÷÷õóïàŸJ  - /.! -->MK@8:9 $ Cwƒ‡›› ¢ š™zfXkˆvhs’‹¯ÃÜêìíìîììïëëëêéâÖƹÀÊø¿Æý¼ÃÁ¸º¹ºÈÐÏÈÀ®®¶³ÅÐÔÐÚêøüüýýûûüýüýýþüüøòîòúüüûüýýýýýýýüüýýüûûúùöîçäèêêíïóô÷øùúúüûûüüüýþýýþýýýýüýýþýþüýýýýþýýýüýýýüýÿüüüúùúöôòñïïíéçâÜÖÑÑËÈÈ¿¼»¹ÉÙÙÚÛÚÛÙÛÛËÉÎÑÑÑÍÆ¿²¤««¬ª©·½¯¯«¯®­¨®ºÀ½¼ÀÂÄÌÍÊËÐÑÎÌƾ»½ÁÁÄÃÉÈÌÎÓÚÛÞãçëîòõùúûýüüüþþýýýüþýýýýýýýýüýýþýþþýýýýüüüýýûûüûüüüúø÷ù÷õôðîêäÜÚÛßäêøüüüýýüýþüýýýüüþýüüýüüüüûüûûüýýüüûùùïßÒÅ¿ºº´´´·ÅÌÒÎËÊÍÌÏÎÑÐÊÈÆÊÊÊÇÀËÜæêëñôôôòíåæìé׺£’Œ˜»ËÑÕÑÓÔÔÕ×ÚÙÕ̬rL6>429119KdN018TK<80*:87((%$-+& $'+! -    - -   3    7   - -        - -     - -    -   - -  - -  -2uÄêñóôôòìÙ€:'.]´èñòóôóõóîÖ‡:%   !63+ &3JD:=687  - Uxˆ’ ¨  §ž”’†od^\}‡}‚‘š“£ÇÝëìêêêéëéççèåàÚÔÈ¿ÉÎÄ»¿Éº¾Ã½²´·ÀËÍÊÀ±ª²·¸ÄÎÓÖâòûýüüüýýüýýþþþüú÷öúýþýýüýýþýýþýýþýýýü÷óñíåÝßâèìðòöøùúûûûüüýüýýýþýýýýþþýýýýýþýýýýýþýýüýþýýýüýüûúøöóóñïîîìéçãßÛ×ÓÍÐÍËËÌÆÂÁÃÏÚÜßÞàäàßÞÔÊÈÍÑÏÊÅĺ¯­°­±±¶·´²³²¯­®³ÀÁž½¾ÃÇËÎÌÍÍÏÌËÉÄÀÁÇÅü¹¾¿ÀÁÆËÐÒÒØÛàåêïòõöùüüüýýýüýþýýþýýþýýýýüýþýýýüýýýýýýýýüüýûüüýûûúúùùöôñîæÞààáåï÷úþýýýýþýýýýýþýýýþþýýüüüüûüüüýýüüüú÷ëÚ͸¸µ°ª²½ÆÍÏÌÌÍÍÐÌÌÏËÊÊÉÅÉÇÃÐÚäéíñõóóòïçæéá˱žš““´ÅÏÓÕÔÔ×ØÙÙ××μˆQ;678734C^ZI6:MUC3729@10'&+-3'%! $    -   - - 6 -  - -  - -  - - - - -      -*    -  - - -    - >‘Øíðòóôóïã£P+/Q¨åðóõõöôñëÉr3  56-#  &!+FIJ;63B9"   (hwŒ£¤£ž¡žž™ulhZMcŽŠŽ˜¡žÇßéîïëìîêçÝáåá×ÏÏ˺¹ÂÀ½»ÂÄ»·¾¹®¯»ÈÍÌǸ¬µÀ½½ËÑÖßðúüýýüüüýüüýüüûúùûüýýþýýþýþýüýüüýþýüüúðäáßßâèíðóö÷ùùûüüûüüýýüýýýýýýýþýýýþýýþýþýþýþþýýýýüüüýúúùôìêêëêêêéçáÚÙÖÕÔÒÎÇÅÅÊËÎÎÅÀÃÎÛââæéëéæãÙÊËÏÓÐÏÐɽ³¯±µ´³·¹´´¯²±°³¶ÁÂÇǽÅÉÌÏÐÎÌÍÏÊÆÃÀÄÍËËȶ°¸¸¸¼½À¿ÁÉËÈÑØßåçêíó÷úûüüýüþþýþýýýýþþýýþýþýýüýüýýüýýüûüûüûûüüûüûúùùø÷ôïìêêååæêòùüýýþýýýýýüýýýþýýüýýýûûüüüûüüûüûûüöéÙ˾·´¶­©¶ÅÊÎÊÊÍÌÏÍÍÌÊÉÊÇÍÎÈÇÏÛãèìðóóõôñëêæÓ¼©˜Ž‰”³ÂËÑÔÑÒÚÙÙ×ØÙÔÈŸW;<7<61;Tg`FDOYW<;A8>863)0-/1#  Y@!%        -     -    -  -      .72 - -  -   %R¢àîñòóòòïä­]--Y£äðóôôôòíá«U+! 68- %-% :KE><;BJ& - 1t‚”¡ª©¤™œ “‰nskbQbŒ|ƒ—˜—ÅàëíïððïíèÞÞãàÑÎÐǹ²Áõ¾Äõ´¶±­²ÂÍÑ˽­¨º½»ÇÓÔÙê÷ûûýýýýûüüýûúüúüüþýþþýýüýýýýüýýüüüüûõîäáâåêíñóöùùøùùûüûüýüüýýýýýüýýýýýýüýýþþþýþýþþýýýýýûûûùôðíçãáßâßååàÚØ×ÔÑÍûº··¿ÁÇÎÌÊÀÁÐÜãåèéëèéæØËËÑÒÓÕÒÉÁ¼½ÁÂÀÀ¾¼¹¶¸·¶°»ºÂÉÍÅÁÁÄÉÎÑÐÎÌÏÍÑÈÄÅÅÌÎÉÅ¿·±°°´±²²¸ºÀ¿ÃÃÉÎÔÜÞäèìñôùúûüüýýýýýýýýýýýýýýýýýýýýýþþýþýüüýüüýûüüüûûúùùøöóòðîëææèíôøûüþþýþýþþýþýüþýýýýýüýûüûýüýýûûüúñàÏƺ·¸¯©¬¾ÈÍÑÐÊÌÒÌÏÐËÌÉÊÊÍÉÂÍÛâæíñóóóóñìëàÊ°¢˜‡›µÃÌÒÖÔÐÔØØØØØÔͱh85.559PmjV;MX]R>?>4<+174*-.2(,7*$' -     - -   - - -   ! - -     -   - -   -  - .5" -    -  -  -'Z³åðñôòóòíæ«W-'OàðòòóòíèÍ„?"   2>;1&&61'JM693:G5! 8|‰™œ¦¤¤ŸœŸ•€jpfhbk˜Š…Žš’¹áìïïðððïèÝÛÚÖÈÃÆÀ¯´Àº²¹À¿³µ¸°«²ÆÑÏô ¦¶º½ÌÓ×ãòûüüýüüýüüü÷÷ùüýýüýýýþþýýýýýüüýûüüúøñìãàæêíïó÷÷øùûùûûûýüüüüýýþýýýýýýýýýýþýýýþþþýýýþþýýûûù÷õîëèåÝÙ×ÕÔÕÜàÜÖÓÍÇ¿¼·¶¶¶³¸ÂÈÌÎÉÆÄÎÚáææéèèåâÖÍÐÐÕÐÓÎÌÉÉÊÍÏÑÏÎÊÂÆÄ»»ÁÆÃÃËÌÅÂÁÈÍÐÏÌÏÏÐÓÒÈÃÉÉÏÐÌý²°®³³¯³±±´·½½ÁÀÃÉÌÏÕÝâæéðóöùüüüüýýýýüþýýýþýüýýýþýýýýþýýýüüýýýüüûüüûûúùúúöõõñðîëìéëðñ÷ûúüüýýþýýýüýþýýüýýýþüüûùûûüûûúöçÖËÅ¿·³ª¨´ÂÈÓÑÊËÏÑÐÍÍËÉÈÈÉÉÃÌ×ãéìïóõóññîéÜê ‡Ÿ°ºÊÓÕÒÑÔÙ××ØØÖϼ‰K765989,+%*4.-&!,1!$"     -   -     - - -   - - - -      -!! -  - -  "&"0!7   -  (_»éïóóòðñîážM(*DŽÛîïðïíçãÎ8#  -  9EC@5  %5)BK::4:BB% J€¦¦§¨£ ž˜~rstkqo›Šˆ¢–”¬ÙîïïïïðïéÞÑÑÎľ»´¨ª´®©¯´¶¨¦­¦¨¸ÉÑÍ¿­Ÿ®¹½ÊÐÔÚêøûýüüûúûú÷ñíôüýýýýýýþýýþýýýüüüüûúöïééåãèíïòõø÷ùøúúüüüüüûüüüüýþýýýþüýýýýýþýüýþýýüüýüýüûú÷ñìææàÜÛÖÐÍÊÌÔ×ÐÌÆÁº´ºº½¾½¹³³¾ÉÎÑÌËÊÎØàããååããÞÖÎÏÑÑÎÌÉÉËÐÔÖÙÞÝÛÔÑËÄÃÂÆÉÅÈËÇÄÃÄÉÎÏÐÑÓÒÔÕÏËÉÊÑÑÐÎÆÁº¸³µ¹µ±¸¶²²³´¹º¾ÃÃÀÅÌÐÜàæëïòöúýüûüýýþýþýüþýýýýýýýþýýýþýþýüüýüüýýüüüüýûüûùùöõôñðïííìéíòõùüüüýýýþýüýýýþþüüýüûûùõùûûûúöïÛÓ˾¸»³¨«ÀÈÎÐÏÉÊÌÏÏËÊËÇËÉÆÈÏ×åèéíòôôôòìèÙ¿©Ÿ‰¤¯­¿ÑÔÔÒÕ×ÕÖ×Ù×ÔžU62?=R†—vYKQeUB88303/0/*,7,) "043.,$   -    .       - - -   - -       .-+,,$1  - - -  -  +qÇëðòôòñïèшB'":uÅâçéêèìëÛ?! - - 0LJ?;% -7-4NB;  -!'-$BE<@B:E1 -5m„—§ªª©£¦¥˜„spq~{{™˜‡‚££ ÉëíñïñïñëßÕÙÜÕÐÎĽ¼Ã¼³½Å¿´¬³®§ÊÍÊ¿°ª²º½ÊÍÑÛëùûûýû÷ôêäããàíóûüüüþýþýýþýþüýýû÷ðäáâçëìíóõ÷øøùúüûûüüýüûüüüüüýüþýýþþþþýýýþýþýþýþýýýýüûøóîéæáÞÙÔÍÄÈÎÏÌÌý³°¸¸ºº½¾»¼¹·º¼ÇÐØÛÛ×ÐÉÓÚÜâãáäââàÙÕÓËÉÈËÌÒ×Üßäééæäààßß×ÒÔØÕÐÏÏÌÍÒÔÖÙÙÙÜÜÛÙ×ÔÎÑÓÔÓÑÌǾ»¶¾¸¶·»¼¸µ¸¸±´ÀÃÅÆÅÄÁÈÑÙÝâèèêïôøúüüüýþþþýþýþýýüþüýþýýýýýýýþýüýüüýûüýýüûûøùúùøøôòòîìëéêëðô÷úûüüüýýýýýýüüûüûùøøûüûûùõêØÉÁÁ¼µ­¤±ÅËÐÒÈÉÉÈÈÉÊÉÈÇÊÊÊÓÙÞäæëñôôóóíâ˱¦ŸŽŠ˜°¢¡¬ÅÓ×Ø×ÙÖÖ×Ù×Õ̶l585D„©¡u^\ijMD9.*16-,*,/,1#'7@=2$  - -   -  - -      =-         - -   -    -   B  -?) -     ;†ÙíïññïçÙÐÉ9$"7cºæìñóôòðè¸V- -*GGB>0 -5$3B$0oÌìððóõóñê¸`, - "@DI?37*92#.?@@D?CH -Jx §­¬ª©ž‰Š…x~ynpnƒ—‘’›¦ª¼áìîðïñïêÞÖÚÙÍÎÐÆ·»ÅÁ¹»ÃÁ´®¬§±Ê;¯Ÿ±¼·´ÁÐ×æóùúõöõôïäÝÞÞÝãõúûüüüýýüüüýùóìäßÝâçëðñõõõøùùúùûüûüüûüüýüüûüýýýþþüýýþþýýýýýýýüüýüüû÷ñíééçäÞÝÜØÖÑÌÉÑÕÔÍÇ¿¹·²¼»½½¿¿ÃÇÏÒÍÕØÛàâãÜÚÙÝäååååäæèçééæãÞÝäëîñ÷úù÷îéçí÷ùùõîîëêëééêëíîñòðñóñðîìçäãßÛØ×Ô×ÑÈÆÉÉž¾¸¸¼·¸¶º¶ÁÃÇÆÇÇÇÈÌÏÐÖÖ×ÚÝãêìïòöûüüüýýýýýÿýýýýþþýýýýýþýýýýþýýýýýýûüüûûüùùúù÷øõôôòïïíéééìðõúûûýýüüýüüùùö÷ûýüüýüüùñäÔǽ¹±¡™³ÆÎÖÑÈÀÆÉÉÇÆÇÅÆÊÈÍ×áèíïòôóññé×¾¥š‘Œˆ ®¡˜˜±ÉÑ×ÙÓÑ×ØÙÜØÕÈ“F:Cv±²™sbz…eR;1..,($!#00-%!-/.B;((     - - -  - -   - - -    -    FœÙìðëéåéåØË’4$2wÌìñòôôôñé½d. -)"HJG><<$ #--%FGCEHHM1 $Y€Ÿ¥ª±®¥¨šŠ‹ŽŽƒ~zvsq…¡¢“…™®®¶×êïðïñîéÛÚÚÔÇÈÌɾ¸Ã½·ºÀ¾°¤¢­»Åĸ¡˜¬º´µÈÍÜèñóõöûüü÷ìÝÚÛÛÝæíøüüüýýþûøóìåàáÞâèïñôõö÷ùøùüüûûûüüýüüüýüüüýýýýýüüýýýýþþþýþýýýüüýøòíèæäâáàÝÚÜÛ×ÔÎÉËÐÐÎÈÁ¹¹¸»¿ÅÄÀÃÉÏÕÖÔÓÔÚàåçäæææééèçççìïñõøõïæÞáêõùüýýûðâäôûüüûùôòíèçãäéðöúûúúûûúùùöôòðîèåßßØÓÌÏËËÇÆÅÅÅÂÁº¹¼ÁÂÉÉÆÅÆÊÍÐÏÑÑÒÔÖ×Ýåééïò÷ûüýýüýýþüýþþýýþþýþüþýýýþýýýýýýýüüüýûûüüúûúù÷øøõõòïíìêêéêïôøüýüýýüüùøôùüüüüýüûûøìàÑȾ¹¢œ­ÁÌÓÑËÆÂÄÇÇÇÆÆÆËËÐÙãéìðóôóôðä槑ˆ™¬ªž–˜§ÄÓÖÙØÙØÚÚÝÚØÒ¦W=VœÀ±Œqy’‰cJ:3/'#% &+')'*1?A;/,"   -   -    -  - - -  -     -  -    -    - -   - HœÛëïîïòñì×Ày25wÇìðóóóóñê¾d*  &CC@FD-% - (2(5DFLMEHC 0i–Ÿ««ª©¥§œŒŠ‹‡Š†||xz}’¥–‰«³°ÅâíïððîêÝÝßÒ½ÆÊɾ¹ÁÁ¸´À¼­žŸµ¿Â½®››²¸¿ÅÒÜçìò÷ûüýüüûïßÛÝàãèçèìñõ÷õñçßÝáåèëîðòô÷øøùùúüüûúüüüüüýýýüýýüýýýýýýýýþýþýýþýýýüüûúöóìèâÞÚØÙÙÜßáãâàÞÖÎÍÕÖÔËÇÄÂÅÌÍÍÐÐÑÓÖÕØßÞßåçíñóööööôòñõ÷ùûüûûøìåäí÷üþýýýüïÝä÷ýüüýýüüùöòéàáçð÷ûüüüýýþýýüýüüûø÷óîåÞÖÓÑÑÍÎËÍÌÈÉÆÃÈÉÈÈÉÇÆÇÐÐÑÑÑÏÒÊÍÆÍÔßãåçíóøûüüüýüýýþýþýýþþýýýüþýüþýýýüýþýýüüüýüýüûüûùùùøöõóñðíêèåãéïõùûûúùù÷ôùûüýüüüüüúöëÝÑø°©±»ÄÍÓÐÈÆÃÄÁÃÅÃÇÇÈÑÜäéëðòóõòîàÄ®¥–‘Œ¡° –‘–¢¸ÎÕÖÙÙØÚÜÝÜÛØ·kUƒ¸À¤…‡š„Z94*1)##&+/$+7;CEA.& -  -   -   - -      -   -  -   - -           N±ãíñóôõóîܶx6 7sÄêðóòòóïê»^*  -  5C@FF7&   06+$#8OLFFHL* FyŽš¢¢°§¦¨§š†ˆŠ†‹ƒtz‚v|†§œ‰‹£²®´ÙéîðïíëÞÚàÝÇÉÍɽ¹Á¾´³Àº¤œ¬Àÿ´¦§³¿ÊÒÜêôùûüýýüûýûðãÚáîôõòìáÛáãàÚÔÔÛåêïðôõöùùøúúúüüüûûûüüüüýüýýýýýýýýýþýþýþþýüýýýüüüúõïêèâÞÔÖÒÌÕÚÛáéçååäáÒÏÕ×ÒÌÑÔÑÐÏÏÒÔÔØÝßäèéëëíóùûûýýüûûûüýýýýýúöðëêóûýýþÿýüúíÛáöüþþýýþÿþýüúòêååèñöûýýþýýýþþýþþýýüüôëèáßÜÚØÒÐÐÎÉÍÍËÏÍËËÅËÌÐÐÓÓÔÐÑËÈÁ¿ÅÉÑÖ×Ùãëôùüûýûýýüýýþýþþýûüüýýýýýýýüüýýýüýýýüüüüüüüûúúùø÷õôóïìæâââåçïóõøøõôúüùûüüüüûúûòæÖÊÁµµ¾¿ÀÊÑÔÈÃÁÂÃÃÁÂÇÅÆÖÝåêìðôôôðì׿²¥“˜¬¬š”‘Š—±ÉÒÕ×ÕÙÙÚÜÜÛÚÂyn¬Ç½‘y•­©„N:71021%!##.&!(:EKNF-#  -   - -  -      -  -   -      - - - - -      %qËëðòóôôóðäÀ}7#3eºêðóóôóðç±V( - =EKWB2)   '21,/ULCILK<-2 - -   - -       - -  . - -  !#  -  - -4=&   -       -  /‰Üîòóôõóòðé͇;,c¹èðóôôòïâ¥N"  -0BEG=8* -'67&#!'BIHEHHY,.h‡“£§¤¨¬«¬œl{Ž‹……y}s‚„š¦„’©¦›»àêïðíëÚÚáÞʸ¿ÂºµÀ½±µ¶¤ŸÀÊ·¶Â»©®·ÇÒàñúûüüüüýüýüüõäßîòñòíàÈÁÆËÑÙåïïóõô÷ø÷ùüûûüüüüüýüüüüýüüüûýýýýûüýýýýýüýýýüüýýü÷òìèçßÜÔÍÌËÎÍÌÓÞæêëìéëêàÕÑÕÖÓÑÐÑÕÖÞâåéíôúûüýþüýüûüüüýýüýþþýýýûùùûûüüýþýüþýýþý÷êÝãõüýüüýþýýýþþýüþû÷óíèêòöûüüüýýþþþýýýûûüüüú÷ñëæâÞÚÔÒÏÍÌËÈÈÎÎÒÑÏÒÑÕÑËÈÅÃÈÇÇÅÇÈÅÌÓÛåîôùüýüüþþýûüýýýýýþþüýýþýþýüýýüýýüüüüüüüýûüûûùùùøøøôðñëäààÞäææèðùúûüûüüüûüûùñä×ÌÀ¾ÌǾÁÆÒ×ËÄÆÉÄÇÈÆÆÌÕÞåéìñôôñòåÍÁ¹¬›•¦µ§’Ž•–˜ ¸ÎÕØØÙÙÜÙÛÞÜÑ¡¤ÌÈ¥€‹®Ã²pDA=;8:6-%!($!!,=JROLG-/ -    - -      - -        0 -  $('  "  -   "!   -&    =šâïôôõôôôñíÙŸG,/V³åïðòñðíÜ;  &5DJA<:' -(6:'-"?IHMKHZ>8zŠ• ¬ª©«¬¢“fex„‡ˆ„„Œ†z†œŸŠ™Ÿ¢±×éíïíèÜÙâàÒ¼¿¶³º¼°°®¡™¤ÈεµÊ̵«ÂÏÕåôúúûüýüûüýüûùéáéìåÝÏÁºÁÌÙáéïòö÷øøùûùúûüüüüüüüýýüýþüüýýüüüýýýýýýýýýýýýýýûýúóíèçäÞÖÏÉÌÎÑÑÎÇÒáåéîîîíéáÔÓÖÖÏÒÕÙàåèëðóúüýýýýýýüüûüýþþþýüýýýûúûûüþýýýþýþýþþþüûõêÞÞñüþýþþýþþþÿþýýýýýüùòíèêïôúüýýýýýýûüüüüýýüüûùõîëãÜÛÖÑÐÌÉÍÐÑÓÏÎÓÓÑÒÎÊÆÉÉÈÍÊÈÅÀÅÈÌÔÛâîøûüüýýýüýýýýýýþýüüýþþýýýüýþþýýüýýûüüüüüüüûúûùøø÷õôòîêèââáàßèõûùûýüüüüüûúõëÜÔÍÊÑÍÁºÀÒØÎÉÄÉÈÉÉÇÈËÔÜçêìðñöòïãź¸¨ ›²´ –’ªÉÓØÛ×ÙÛÚÝÝÜÓ°½ÒÇ£}š½È©iF=?=;=2*$'-8%*95*,  1DTPIELR Q…—¦¤«®­«¡‡]^sƒŒŸœ‰{yž¤’Œ’£®±ÌæíïìêÜÛåàÓÌÅ·µ­¼¿²¬§¡š³ÐÏ·µÊÌ¿¹ËÒ×ìùùúüüüýûûûûüùìÛÛÙÓǾ¾ÉØßæíñóõöúúúúúüûüüýýüüýýþüüýýýýüýýüýþýýýüýýýþýþþýýüøòêçãÞÖËÉÇÊÑÒÐÐËÉÓÝçêëíêêèáÛØ×ØÜàáäêëîóúüüýýýþþýýüýýüýýýýýüûúùûüþþýþýþþýýÿÿþýþýúôéÚÛêùþüýýþýþýþÿþþÿþýýýüúòëéèîó÷ûüýþýýýûüüþýüýýþýùõîçâÞÚØÕÒÐÒÔÔÕÓÏÐÑÑÐÊÆÉÇÉÌÊÂÁ½¿ÁÉÊÎÕßèñöüýüüþüüýþýýýýþýýþþþþýýþýýþýýýüýýüüûüüüûüûøúùùùøôôñîêæäàÛßçóùûúüüüüüüûùðá×ÓÓØÐÄ·¼ÌØÔÍÆÇÊÉÊÇÇËÔÜåêìðóòñíßÄ»»¥–ª¹±›”•Œš˜ ÁÑÖÙØ×ÙÛÛÞÝÙÄÐÖÀ–…¨ÆÌ™`JBBB; 8;8)') $BPJOJOY'![‡‘§£««®§¢u\Vm~ˆ“œ¦¤£¤‚}œ¨˜ŒŒ ¨Ÿ¿äìîîêÝÞåÞÔÍ˺ªª¸¶§š££¡¾ÓÇ«½ÐÑÇÈÌÍÙòúûüüüûýüýûùûùëÒÍÉþÃÕáçìððó÷ùøøúýúúüüüüýýüýýýÿþüýýýýýýýýýýþüýþýýýýüýüýúõðêåßÕÏÍÇÄÅÆÐØÔÑËÈÐÝæêëìêêéçæáàæèèêìðôøüýýýþþýýþýýþýþýýþýüúõ÷úüüýþýýýýýýþýÿþýÿþüùòá×ØäóûýýþþþþÿýÿýüÿýþþþþýûùòìççêîõûýþþüúûþýþýþýýýýûúóìæãáÞÜ×ÖÓØÙÖÓÓÏÕÏÉÅÊÍÉÌÆÀºµ¹¿½ÃÇÊÑÕßëöûüüýþþþýýüþýýýýýýýýýþþýüüþýüüýþýýüüûûûûúûûüúùùø÷õôòíêèãÝÝãëò÷úüûûûûûúôçÚÖÚÛÏö½Í×ÚÊÅÇÉÉÉÇËËØÝæêìññóòêÛľ³ ž­¶¬ ˜’“•‹˜»ÎÔÙØÖÙÚÛÞÞÛÓÛÖ·Œ™¾ÕË‘WAE9A=?9)*+"$%!:EKLRYXC30  - - -       -   - - -  -  -      -  -  - -  -   - -    -    J·íñóöööóôóðèÈv1\¹ØÝÙÌ­ŠO'   5CA<:1 -3<8)*'"0HKRPL[E$*gŒ”œ¢¢¨¦¦¡›oTVfŠ“£¬° œ–Š|¨ Ž¡£ªÙêíðèÛÚàß×ÐÎÀ§ª¸±¡¢¨ž ÀÔê¿ÓÔÑÍÊÎÛòüüüüüüüüûûûùïÜÅÀ¿¿ÇØäëîñóóöøøúùúüüüûûýüüýýýþüþýýýüýýþýýýüýýþýþýýüüüüúõïëéäÜÓÉÇý¿»¾ÏÖ×ÓÎÍÏÝäéëëíëêëíëêìììðôûüýþþýýýþþýýþýýþüþþûùöö÷ûüýýýþýýþþýÿþþÿÿþþýûøíÞÖØáëùüýüýýþþþÿýýþþþýþýýþýýùòëãâåìõùúú÷ùþýþþþýýýüýýüùòíéãàÝÜÜÛÚÚ×ÕÕÔËÈÇÇÍËÈƾµµ³µ¸½ÂÁÅÊÐÚçõùûüýýýýýýýüýýýýýþþýýýýýýþûüýýþýýþýüýüûûüûûûùúúøøøöôðïêæáßàáèïôøúüüûûôêÝØÛÛϼ¹ÅÎÙÛÑÇÃÊÇÉÊÉÍÔÝæëìðòòðèÔ¾¸©Ÿ µ³¦›‘“ŠŠ°Ë×ÜØÕØÛÜÞßÞÝàϪ‹©ËÖÂQF=E@E@FE;>9+&'?LRVRWUC3$ - -     -  - -  - -  - - - - - -    - - -   -  -  -  -  - -  - - -    -   #SÀîòôôôôôóñîÞ¦O'.uª°¬ Œg:   - -%;EGCRRSSWD5$ -  -      - - - -       -   - - -  - -  -  -  -    -  -  - -   - -   -    -  - -"YÇîòóóóñðíäɦp5    9;3.50+!'->LYc_bX@.(  -  - -    -  - -      -:&   - - - - -  -    -    - - - - - -   - - -   -  -   -   -"   - !]Îïñòððîëݼ˜Q. 9¢¡œ’N   -3??@?3" - /FL8&)*$ 'NbWQKOhu‘—Ÿ ¥§«¥¦¡Š‹{cn¥¹¼·§‰‰‰„€Œ¦¦“ £œ­ÖêìçÚÜâáÐÊÑ̺  £¤¤©­¶ÄÐȬ«ÃÓÐËÊÓÒÕðöø÷óîâÔƸ´¿ÊÒÝåéíðñóõõùùùúúûûüüýýüüýüýüüýýýüþþýûýýüûýþýýýýýþüýü÷îëåÞØÏÆÁº··²¼º¾¹·¹ÌÕÐÏÎÊÖäêììíêâÞÜãïøþüýýýýýþýýÿýýýýþýýúôñòúüýýýþýþþþþþþýýþþþþüþýüüüýþüüüôéôüüýþýþýüýþÿþýþþþýþþÿÿÿÿþýþüüþýû÷÷÷úüþýýýüýþýýýþýüþþýûýüøòéæãââÜÖÕÎÍÈÆÅÆŽ»¸¹··¶´®ª±¶»ÃÇÉÖÜåñöûýýüþýýýýýþüþýüýüýüýýüýýýüüýýýüüüýýüüýüûûûúúùùù÷óóóñîëãÝÝßâéëèéèà×ÑÌ¿»ÁËÕÜÞÝÔÄÁÀÃÂÅÅÍØæêìïñîèÕ¿¸­ž¦´± –‘”’Ž˜µÏÚÙÚÚÛÞÝÜãáÊ¡žÁØØ“R@>EE771*2>!.6OY]`[bS=)'     -     - -       -  -      -%!     -  - -      -      - -     - -   - -       #aÏððïíìäίŠzxW)  8ƒ§ª©¯›N  -   4??B=,  3BF4///#>ZOSIDk‹˜˜ž¡¥§§§¥ž“Œ…­³²®šŠ‡~w{ƒ|—¥—“ž§¢™Æçëæ×ÙáßÑÌÓ˸™«¦¤¤»¿ÇÑ˳¨½ÍÊÃÈÐÆÄâðíçÙÉÀ¶³·ÀÐÚäéìíïòñ÷ö÷øùùùûüüüüýýþýüûþüýýýüýýýýýýþýþþýþþýþýüûùôíéåÜÓÊû¯µºº´º»¼»ÂËÒÓÌÌÏÖãéëêæßØÓÔäôûüüüýþýÿþþýþýþþþýýû÷ðñùûýýýþþþþÿÿþþýþþþþþþýýýýýýþýýýýúóéóýýýýþýþþþþþýýþþýþþÿÿþþþþýýþþüýþüüúøùüüýýüûþþþýýýýýýýýýýýýøñìèåàÚØ×ÒÊÊÁÁÆÆÇÀ¼¸·¼µ³±¯³³¼½ÂÊÔÜâìõûüüüýþýýýþþýüþþþýýýýþýýýýýýýýýýþýýýýýýüüüúûùùùùø÷öóñïíëéæèéæâæäåÚÑǸ¸ÉÔ×ÜÞâ×Å¿¿Ä¾ÂËÖâèìíðîãα©š¥¸±–š–”ŽŒŒ ÉÙÙÛÜÝÝÝßãÙ¼›¦ËÜÖ»€O>B>A?3/445!""4BWYada^Y4'  - -  - -    -  -  - -  - -   -       -    - -  - -    -      - -  -  - -  - -  -  -  -  - - !hÐíìëåÖº—zkp„yA  8†µº¹½£R  -  - -  -&8><7/  8AI;-)$&3 6NTSPC_‰•™ ¡¥°¤¦£˜’–˜¢«¹¶§—‰…zro}y~Ž¦ž–š¤¨˜µßéçØÛáÞÒÎÒÉ´™š¢¦¤¯ÈÃÈÓ̸¨±ÃÈÅÌȹ´ÃÌÉ¿³©®³·ÎÛåéìîðñóçñ÷ùøùùùúüüüüüûûýýýýüýýüýüþþüýþýþüýýýþþýüüü÷ñíçÝØÍÇÁ¶¯²¹¿º·¼½¿ËÒÓÑÑÑÕÝäéìæßÖÒÔÙåóùùúûýþþýýýþþþýþþüùøõóóùþþþþþÿÿÿþÿþþÿþþþþþþþýýþþüþÿþýýýúðæñûýýüþýÿÿþþÿýüýýýÿÿÿÿÿþþÿÿþüýþþþþþþüûúùûýýýýþþýýýþýýþýþÿýýþýûôîçàÛÚÚØÒÍÊÆÆÆÇĽ¹¸¸º¼²±±³·½¿ÉÑÚàèöûüüüþþýþÿÿÿþþþþþýýþýýýþýýýþþýýþüüüýüüüüûüüûûúúúù÷öôóóñîìëèàÛÝ×áÞÔŹ¾Ë×ÜÝããÜÍÀ½ÆÄÁÀÊÖâëëîðëÝÊÁ®¡Ÿ´¹«£——™’Ž‰‡ŠŽ†’¿ØÚÜÚÞßÜááÓ¬š¼ÓÝТhLB=7><2;B3'*",=JT^cbe_ZB7!  -  - - - - - - -     - - -       -  - - -   -     -     - - - -  -  - -   -  -  -   - -  -  - -     -      - fÐéçØ¿¥•ˆoqˆœ˜P -   8·¿¿Å¯Z  -  - -.8741&  @KE>7*!+*#0JYSOKJy’‘ž¥¦©«ª§–’š§ºÄÆ»Ÿ‹„„ˆ|~z{tv…¦§–•¡Ÿ¥Óæã×ÛÞÛÑÎÒÆ°§š§»ÐÄÆÕÒ»¯¯ÁÇÆÉ¿µ±­®¨§¤¨²»Íãêíîïðóó÷óööøùùúúûýýüûûüýýüþýüýþýýýýþýýýþýþýüýþýýüû÷ïìéâÔÈÀ¾²¨­³º½½º¿ÈÐÓÕÑÒ×ÛåêéæÞØÒÏÖÞèõöùûûûýþýþþÿþþýýûû÷ø÷úúûýþþþÿþþÿþþÿþþþþþýýþýýþýýþýþþýýýüùíßë÷ûýþýþþýýþÿþþþýýýýýýþÿþþþþþýýþÿþþÿýþýúùøúýýþýþþýþþýþþþþýýþýþýúöëåãâßÞÙÓÎÈÆÇÊÇ¿¹¼»·¶¶¯µµ¼¹½ÆÐØÝèóûüüýýýüýüþýþýþýýýþýýýüýýýþýüýüýýýýüýýüûûüûúúûúùùøøøõóñðìã×ÔÐÊÖÞÙýÄÔØÜàääàÑÄ¿ÁÆÅÆÍÙâéëíîèÖĽ®¤¨¸´¤ ”’’Š‰…‹‡·×ØÛÚÞáßàÝÄ› ÆØÙÃZJ?:66718@6&"!$>JSZgenhiT>1 - -   -  -       -   -    - - -        -  -     -  - - - -    -   -  - - -   - -  -  -  -     -  !  "\ÇÛα™’Žœ¨¯ªc;™ÀÈÍ͹d - #/==85";POB50,)3#>Z_KTIhˆ—˜¢­¨©¨§ žª¸Áž³“‡ŠŠ€…uxtn|´›Žž¢š™Àââ×ÛáÝÒÑÒÇ© ª¥”£ÃÓÅÈÙѼ²ª»ÃÇdz±«¨¬§¥¦¯ºÊáìííòóóõõöøùøøùúúùûûüüûüüýýüýüýüýýýüüýýýýþýýýýýýýûùõîêäÛÔËÉÄ·«¬³¸½¹º¾ÉÒÓÔÔ×ÝãèêçÞÒÌÏÖãìôúüûýüýþýþüýÿþýýûù÷÷ùüþþüþýýþþþýþþþýþÿþþýýþýüýþÿÿþýþþþüúüúóâ×ßîøûþýýýúûþþþÿÿÿþýüüýýþþþÿþþþþþÿýÿÿýýþþüûùúýýþþýþþþýþþÿþþþþþþýýýûôìèèåâÝÙÒÏÌÊÇÁ»º¶µ»¸´±µ»Á¾ÂÆÇÏÛæñùúüýýüüýýýýýýýýþþýþýýýþýýþýýüýýþýýýüýýüúúûúûúúøúùøøõôñíÞÒÌÉ»ÈÝÚÌÁÆÕÙÝâäåàÑÇ¿»¿ÀÃËÙäéììêàÌÁ½¬Ÿ«´¨›”˜–’’ŒˆŠˆw|«ÕØÜÝÜßÜßÚ¯’ªÉÛÔµ~H=;<<:4<>=6)"$ 6OY[WmgohdPB/%   - -   -        -       -,  -    -        -        - -   -  -   - - - - - - -  -  - -  -   -        -    F¢µ”šœ££¯¼½­m'  8ÅÎÓÓÀt -   $/50>4 -  /LR=>4)%#1&-RZNJNXrš ž®§©§§©«ºÄò©¨{‹…ƒ…xq|p”®¢’“¢¡›°ØÞ×ÚáàÓÐÏÁŸ§¥¬Í×ËÏÙÒ¹°³ÄÊ­«§¥«¦§®¸ÒäìððñóõøøøøøùùøùüüûüýüüýýýýüþýýüüýýþüüþýýýýýýýýýýüûõíêáØÍÊÑθµ¸´¹¾¿¾ÈÐÑÑÑÚâèéëçÜÏÏÔáî÷úüþýýýýýýýþýþþþýø÷÷úûýþþýÿýýýþþþýýþýþýýýýýüýýþþþþÿþþýþþúöóìãÎËÓÛéôùúüþþÿþþÿÿÿþþþýýýýýþýýýýýþÿÿþþþþÿþþþþýýúýþþþþþýÿÿÿÿþþþþÿÿþþþüþûðçäææâÞÙÓÍÄÅ¿¾¿º·µ¹ÀÈÉÆþÆÓÛàîöûüüüýýýýýýýüýþþÿýüýýýþüýüþýýþþþþýýýýýûûûûûüúüúùøøù÷õëÛÐÏø¿ØáÜÔÒÚÜâãåãäÚ˾ÁÃÁË×åêììçÙżºª¤­³¡œ™—’ŽŒ‡‹xko ÏÙÛÝÝÞÛÝÒ¡“µÓÛÌ£cA73;>01;B:7! 'CaidnhokkfV85#    -    -  -  -   -  - - -  -      - - ! - - -             -   -   -    -            .vŒ‰–¢©¦§±¼ÆƼ, @¢ÌÕÙÕÂm -  - 32;>1  7GN958&&7(& LWRHKKjy„™¢ ¥ª¬«¹ÄËÁ¬•˜„u†~‚Š‡}€}ns‰¥­Ž•¡©œœÉÙÖÜâÝÒÏ̲™ ¨¤¢³ÎØËÌØÔÅÀ¸µÃʸŸ¨ª©§©«½ÏåíðòôõõöùøùùùùùúûüüûüüüüüüýýüüýüýüüüýüüýþýþýýýüýüûùóíëãØËÊÒÖÏĽ¼¶½ÀÆÐÌËÒÖÖáçéèçáØ×ØáíøüýüýþþüÿýýýþþÿýýûøõùüþýþÿÿÿÿþþþýþþþþýýþýùøúýýþþÿýýþþþýýýüöíàÒÇÃÅÇÈÏÙäòûýýýþÿÿÿýýÿþýýýüûýþýüüýÿÿÿþþþÿþÿÿþÿýýþýüüýþþýÿþþýÿþþÿÿÿþýþþýýùîçëëæäâÝÔÍÉÈÈÊÉƽº»¼ÂÉËÌÈÃÆÎÕÚáêöûüýýýýýýýþýýþþþþýýþýýüýýþýýýýüýûüýýüýüüüûûüüúùùùøùõçÓËʾ·µÍçêåàÞÞããÞÝáÞÑÅ¿¸»ºÇÚæéëìä×Å¿¸«¤¸¸¤š–’—••ŒŽtfe˜ÌØÛÜßÝÝÚʤÂ×ÙÀYB98:65=p~xtjjpotcS41" -   -    -  -    -   -  - -       -  -  -   - -    -      - -     -   -  "  -   -   - -     -   -        -  !_ŒŸ¤­¶»¾ÄÊÊÃ.  ;¤ÑÙÚÙÁm  ˜A.4.89  -   5PO>:8,14('";dMMVFXUFTP\uŠ¡µÅÌȾª‰oqpqv…Ž…|uy{›­“ž©¡—»ÏÒÚàÝÓÎÄ©§œ¨ª›¥ÈÖÉÈÚÔÅÈÅÅËƯŸ£­¦¤°·Éáëïòõ÷ø÷ùùùùùùùûûûüüüüüüüüýýüýûüýýýýüüýüýþýüüýüýüüùòïëêßÓÊÒÚ×ÐÈÁ¹»ÊÍÏÎÎÓÖáçëéçÝÕØàèóöúüýýýýþýýùûýüþýýúø÷øûþþþþþÿÿþþþþýþýþýþþþûúùûýþþÿþýýþýþýýýûöíåÔü¾ÄÇÄÁÂÏâðøýýýÿýþþýýþþþýýýýüüúûýþþÿþþþþýþþþþþþþýüüýüþýþÿþýþÿÿÿÿþþþÿþþýûøøúöóìèåÞÙÒÐÎÊÉÊÇǼ¾ÆËËÏÌÉÈÏÒÜÜâêóúûýýþýýýýþþýýüýüýþüýýþþþýýýýýýýüýýýüûüüüüûüûúúûøúóäÎÃÅ·®¬ÅåíìéããåáÖÓÜÝÕÈ»´µ²ÃÖãçèêàÏÁ¹¢¨»µ§˜‘˜›“‘‹‰Žjfn’ÈÔÚÛÞÙÕβ²ÎÛЬ|RE47>83@=1/  +g˜š‰vrx}m[N36       -  -      -    - -  - - -  - -            - -   -         - -    - -       - - -  -    Qˆ’ «·ÂÆÉÎÓÑÉ @  - >£ÒÜÞÚÁe$"9ƒ[*.-96$ -  BRP@6967+%%%+Y\RSF><0 +>Km„—ž®›\]_gvƒ‰Œ‡zq‚x|“¨˜ž¥¦œ¦ÄÍÛßÛÏǸ±©¥¥¬§¶ÃĽÊÙÓÌÓÖØÒÄ°£ž¨«¥¬ÆÛëñôõ÷÷øùúùûûúúúûüüüüýüýýýüüþüýýýþýüüýýþþýýýýýþýüûøôñðíçÞÏÉÕØ×ÕËÂÃÊÒÔÑÓÙÞåëêäÝÙÞèòöùûûüûýýþþþþþüýüùö÷øøùüþþÿÿþÿÿÿÿþÿþýýþþþýþýüûýþýþÿþþþþýþýýýûøóèãÞÑŽ¼ÄÈÀ¾¾ÄÎÖâîõùÿþýýýþþýýþÿþþþýûûýþþÿÿÿþþþþþþÿÿþÿÿþþþýýüüþþþýÿÿÿÿþþÿÿþþýüüýýþûùôïåÜÚØ×ÑÑÌÌÏÉÄÉÍÎÑÌÈÌÌÐ×ØÜàæñöûýýýþþýýþþýþþýýþýüýÿþþþþýþýýþýýýýüýüüýüüüýýüûúùóâ̽¹±ª¨¼äñïíèèçßÒËØÜ×Ìù·ºÆÕâèèæÛÈ¿»­¡²»­¨š‘˜™’Ž’‰qmfz’ºËÕÐÌÃÀ»—¸ÕÙÆ›eIE874166;:) $''J‘±¨Žƒw{~{niL94! - -  - -         - -    -   - - -    -   - - -    -    - -     -  -  -   - -  -     -    -  -    -  - - -     ,   I¢«·ÂÈËÔ××ØϯL  - ?¡ÔÝÞÚÃj #J7 B–l  -154/('DWJ;:883#%-&)@WTJE$ "+[–t\NUfu‰Œƒ€tys|££——š£˜“µÏÚÞÝ̵º¼¬¦¡©¯ÍÌ´ªÈÙÔÐØÝÝÐĵ§™¨¯¥ªÑèñõ÷øùùúúúùûûüüûüûûüüüüüýüüúöüüýýýüýüýüþýýýüýýüüùôðððíëéáÔÉÑØÚÔÑÒÓÖÔÑÔâèêéæãßåíøüüüýýüýýþþÿþýþþþûöïñ÷úýþþÿÿÿÿþÿÿÿÿÿþÿýþýþýýüýýýÿþýþýÿÿýýýýüúôìãÜÖØÔËÿÁÉÊÀÀÀÄÂÄÆËØèôúüýþýýþýþýýþÿÿþþýÿÿþþÿÿþþýþÿÿÿýýÿýþÿÿþþýûûüþþþÿþþýýþþýýýþýýþþýýüòæäáßÝÚÔÐÏÎÊÎÌÏÑÎÆÈÈÎÔ×ÚÜÞâëôûýüüýýýýÿþþýýýýþýýýýþýýüýýýþþýýüýýýüýüýüüûûúùúóÞǼ°«¤¦´ÙôõðïìçÞÎÉÒÚÙÏĽº¸ÄØäçäÝÎÁ¹°§¦·¸«£š™“•”“€kgy¢“~–™”Œ›’t›ÀØÒ²|QDA773/;DD>+$$5z¶»´ “ƒ€{toeJ85        -    -     -  -   - -   -    -        -    -   -         -   - -   -     -   - -       - '  -C±¹ÀÉÑÔØÚÜÛÒºX 9 ÖÝáÝÄn!  9ˆi! tA# $7<0'!  E\G9;>93#+0)2MUF8 N’{fQM\p……ƒ†|z„xw‘¬š—˜¥‘£ÉØÝÚȹÃÁ­¢¡¥°ÏѸ¦À×ÖÏÜÞÝÍû©˜¨¯¨°Òëñõ÷øùúúùúûüüüüûûüüûüýüûüýýûõýüýýýýýüþýýþýüüüüûùôññððïëèáÙËÑÛÚØØÖÕÕØÜâêêéçëðô÷úüüýýýþýýüýþýþýþýüøö÷ûýýþýþÿÿÿþþþþþÿþÿÿýýýüýüýþÿýþþýýýþÿýüüûõðãØÐÍÎÊËËÅÆÈÊËÉÅÈÅ¿Á¿¿ÄÏÜëóùüýýþýýýþýþþþþþÿþýýýþþþþþÿÿÿþþþýþþþýÿÿþüùöùüýýþüýþÿýýýþþþýþüýýúõõòïèãÞØÕÓÎÎÎÐÑÐÌËÏÏÏÕÝßààâéöüüüýýýýþÿýþþýþýýýýþýþýýýþýýþþýýýüüýýüûûüûûûúùòÛÇÀ°«£­¶ÔòõôòíçÛÍÄÐÚÜÓÅÀ¼·¿ÙæçâÚŽµª¥§¹³¢–“’•ŽŠ†rgn›°ŽTC?PII]_e£ÇÔÈœZHD=/028881%)FZM@=/%#"+X­ÏǨgC;9;/718<<1.)')M›ÊÔÏƹ ‡ƒqgG5(    -  -!    -   - -   -    -      -         -   -     - -  - -  - -  - -     - -   -  -      - - -  -    -   -    -   -,ŠÄËÒÙÛÞáäääßÏ„+  (ÔàåÝÃ^#  ‹Áºn, %  "37/4E $OS=7:4&  %JRH6;>7) %J—ÍÜÜØ̽ª˜‰€†qC5&  -       - -   -  -     -         -  -  - - -   - - -     -    - -  -  - - - - -   -   - -     -  -   - - -       -     -  -    -   -   -  j¼ÏØÜßâãåçæãÖ–:   {ÑàãÝ»V  --¿³t8  *5=, $PQ9/46=L6')/.)+)$*$  - *BJo—‘†qOEh€†Š‹ˆ}}rx…¤£ŽŠ œ˜ºÉÑÏÇĹ ¢¦·½È¾±¬£´ÉÍÚÝÚÕÈ»²§­ººÂÜðõùúûýûûûüüüýüüûüüüüüûýýýýüûùüüüüýý÷úýûúùóëéâÙÎÌÙëñññïíèãÛ×Ùåíðòõøúüüýýýýýþþýýþýýüûü÷óðöûüýýþýýþýþþþÿþÿÿÿþÿþýýýýþþýûúýþýþþþþýüüøñèÞÖÒÎÑÏÒÕ×Ò×ÒÎÔÕÔØØØØÔÒÕ××ÌÈÏÑÍËÐÐËÈÆÇÅÄÂÁÊÕâíõúýýýþýþþýþþÿÿÿþýÿþÿþýÿÿÿÿþþÿÿýýþýÿþþýþþýúûüýþýýþýþýþþþþþþþþýýûûú÷ôîèáÛØÖÔÖØÕÕÒÍÉÍÔÚãéóøüýýýýþüýþþþýþþýþþþýþýýüýýüüýýýþýþüüüüùõèÍù­¬²ºÍçðó÷øñèÔËÑÔÕÛÞÕÊÁ½ÇØæãÔÀ·¬¡˜ ³¦ £—œž™•’ˆjc¨¢mf4# =¢®‹P9+/1*)4;=:@0'!&^¶ÖÞáÛÔÁ¯¡–‹’‹j@7%         -   -    -  -       -    -  -      -   ("    -   - -  -   -   -  -      !      -     - - - -          - -S®Ì×ÜáãäçèçåÚ¡6 - - -}ÑáåßµX ‡¹«ˆM" -  - -,.%  (KR@6338;:8(,+*0& !%  - - 7PYtž˜‡r]UdyŒˆ}|‚}s‚£¨Ž‡‘¤©“®ÎÚÑËȳ›£«¿¾Â¼º³®°¸È×ÛÛÖϽ»·¨«¶ÁÅØî÷ùúüýüûûûýýýüüûýýýüüüýýüýýüúýüüýüüüüýüûõêæàØÏÉË×èñóððíéèççêòôøúýüýýýýþýþýþþýýþüü÷ôòïõùûýýýýÿÿýþþýþþÿþÿþþþþýüüýýþýþýúýýýýýýþûøðæÝÖÑÐÑÒÕÚÛÝÚØÛ×ÓÔÐÒØÛÙÙÙÕØ×ÔÑÍÍÓÔÓ×ÖÒÏÏÌÈÆÁÅÃÈÍÐÜèðøûýþýýþýÿþþÿþýþþÿþüýþÿÿþþþþþüýþýýþþÿþþýýúûüýþýýþþþþýýþÿÿþýýýþýýüù÷ðèáÝÙ×ØÕÔÏÉÊÉÌÑÛâèñúüýýþýþýþýþþýþþýýýþýýýýþýýýýýüüýýýüüüùôåʾ·¬±¶ÁÙìïïôõñéÒÎÛÙÓÙÞÚÉľÂÙæß˺®«¥˜¤¬¡™•˜œ—’Ž†qehš¯—v{L'0…‹e71+./*,/6=A<4.!1ÈÝãâÝÒõ¥˜–…mF;&  - -  - - -  -  -   - - - -  - -  -     -                 -! -    -   - -  -     -   -      -   - - -       -   - -     -     - -   - -7•Ê×ÛáåçèèèåÜ­@  - &rÎãåÞ´L - #{¥Ÿd@  -   1@6*$  BVC0/18=682%+$&'&  7NWj˜¤—Š…kRXrŠ…ˆ‰{|{|}}”¤“Œ”ª«™­ÒÝÔÐʳš¢±Á¾½»Â¹³«©¼ÓÚÛÙÐþ¹©¥´ÂÈÓêöúùüüüýüüüýýüüüüüýýüýýýýüüýþþýýþüüüýûûöëåàÕÍÊÏÏÖæòòñðñðíïñôûûýýýüüýýýþþýþÿýþýûøôíëîöýýþþÿþÿÿÿÿÿÿþÿÿþþþþýýýüýþýýýýýúùýýþýýüûòçÛÕÍÏÑÑÓ×ÜÞáâÝÝÜÛÙÓÓØÛÝßàÜÛÜÛØÑÇÏÔÙ×ÛÛØ×ÖÕÎÎÉÈÆÇÇÂÇÌÔáìöýýýûýþýþþÿÿÿÿÿþýþÿýýÿÿþýüûýýþþÿþÿþþþþýýûûùúûþþþýýýýþþþþüþýþýýüýùóëåâÚØØÓÐÏËÊËÍÕÚàêñùýýþþýþýþýþüýýþýýýýüýþýþýûüýýýüüýüüüùðáÊ»°±±´ËæðñêïôìâÔÓÜÚÔÙÝÜÐùÆÚäØô®§¢ª¥—”’“‘’ŽŒ†ym³«‹t‹’W!&UVE/(%//.2:3:>=-)2B ÖáæåßÕŸ¨Ÿ™“‚lE>*   -   -"  - -  - -    - -        - - -    -  - - - -      - -      "  -  - -     - -   - - -  - - -   - -  -     -       iºÕÝäçèéééåÞ¶O - eÉÞäÜ´K  )§­¼T  -  +44/%@W>0.448;77)!"& BNR_Šœ—ŒvVTdy†‹Œ‰Ž„upw†•§›•¤ªŸ¢ÁÓÊÊÀ©œ¤¸¾²¸¾½µ±¯©¯ÁÕÝÞØÌÀ¸¬©²¼ÇËãóøøùûüüýüýýþüüüüýüýüþýüüüþüýþüüüýýüú÷ïèãØÎÎÒÓÓÑÑäïñòðïòôöùûüþþýýþüüüýýþþþýüû÷òô÷÷øøýýþþÿÿþþýþÿÿÿÿÿÿþþþýþýþýýýþþýþýúöúýüøñëâÚÑÐÓÒÔØÙÙàâåäâßÝÝßÞÜÜâãåççáàáâßÖÍÓÕÓÚÝÜÜßÜÛÛÙÕÒÍÌÇÈÃÂÃÇÉÔâêíòüýþþýþÿÿÿþÿþþþþýþþþüùùþÿÿÿÿþÿÿÿþþþþþüüûùøùüýýþþýüüýýýþýþþýþýü÷ðëäàÜØÑÌÊÊÌÎÏÓÙÛãîùüýýüþýýýþýýýýüýýýþýþýþþýýüýýüüüüýúøîÛÄ»±²¶¾Õìóïæçðëà×ÛÞ×ÌÕàßÓýÆÙãÕ»¬ª¥™¥® ›•’“”ŒŒŽ|y¢»¢x™Ÿd-%.0'$*.-3/4:8;3.-2bÄÞåççàØÎô«›‰f;:0 - -        !  - - -  -  - -     -   - -                 -   - - -      - - -         - - - -   - - -  -  -   -   -     - -  -G£ÐÜäæçêêéçß¼X XÁÜàÝ®F 9‘¾ÎÛÀn - - -  -*22% 'GVE.*3-/2>9+% - Nc]^o––’Œ}cV`n‹Œ“›’†yus{ƒ£š—–«¬˜°ÅÈÉ°Ÿ‘™¯°§­®«©¥°¢¤ºÓÜÝÚÍƽ­¬±½ÅÇÚð÷øúûüüüüýüþüûýýýüýûüýýûýüýþýüüûýüûùíæàØÈÆÐÖÔÖÑÏÜïñòòóõúüýýýýýþþýüýüýþýýüüøôóõúýþüüýþþþþÿþþþþþþþÿýýþüýýýþþýýýýýýþþøìîðíçÞÕÏÎÊÏÖÖÙÛÝáäæçåââàâãááãçéèêéæããæß×ÖÙÙØ×ÛÚÛàââáßÝÚÖÑÏÉÈÃÂÁ¿¾ÅËÒã÷ýýýýþÿþþýþÿÿþýþþýüù÷úýÿþÿÿþÿÿþÿÿþþþýþýýüøø÷úüýüüüýûúûýýþþýþþýúòêåÞÖÒÎÌÍÍÊÆÊÔÕÛåñûûûüýýüýýýþýüþýüüýýýüýýýüýüüüüûüüûôî׿¹´¸·ÁÚïõìãâðíæÜàÞÕËÓÜãÚÉÀÆÚàÑ»¯¦šª­œ—“‘–•Œ‘‰qˆ¶²‘tƒ¦¡g- %"&,+4,0:2;4;8<}ØåéêèâÚÑÈ»ªž™’k:;-         - -     -  - - -   - - $ -     - - - -      -  - -      - -     - - - - - - -  - -       - -      - - -  - - -   -  -  - - -   -   6‰ÅÙâçèêêççâÄ[ - -B²×ßÛ©C -I©ÍÚáÊ* -  &36-  MP@6(1//.44$'! )TlgacŒ™‘‘†`S^j‡˜”…w}r}{£’ª›§ÌÛØ┘³Ã³§§¶°¶º®£¾ÍÛÝÛÒ˲­´¾ÅÄÓìöùùûûýüüüüýýýýýýýýüýýüüüüýþüüüüüûùðæàÙÍÆÃÍ×ÙØÔÊÖíòñòøûüýþýþþýþþþûüüüüüüùöôôøüþýýýýýþþÿþÿþþÿþÿýþýýüþüÿþýþþþýýþýþýýøåÞÛÓÐÍÊÊÍÔÖØÚÜâãæåççãáàãâäáâèéêêëéèææéçÙÕÞÞÛÙÚØÚÞãåæåäáÛÙØÏÎËÅÇÄÄÁ¿ÁÎâñúýüþþýýþþÿþýþýÿþýûúúþþþÿÿþÿþÿÿÿÿþþÿýþþþüûøööøûûüýûûúüþþþþüýýýøìäãÛÖÏÍÏÌÉÁ¿ÇÑØàêõùûüýüýýýüýüýüýýüýýýýýþýüýþýýüûûüûõëÔµ²¶¸ÄßïóíàÜíðéäãßÚÐÐÛãÝÑÆÉÛØĶ¯ž ¯¬›˜—˜‘’†yj˜¼«Œz¬¦g4%'!"!#%&.($(*26:5:>CHBPœßéëêéèÝÕɽ±§ž‰mI4 -   "#  -       -  -  -   -   - -   - - -            -   -  - - -  -  -   -    -  - - -   -   - - -  -   -  - -      -       ' (k´ØáçééêéçáÆe  +œÑÛש>  X¸ÜåçÚ˜3  49& 'UTA=/).4)//"" ')"+0Nqof\~™’“ŠrXSc‡š”Šxpr}}–¨¡”œ¢ ÆßàÍ©£Äϳ¦©·¶¿Á±ª¼ÇÓÛÞÙÍÇ»¬©µÁÀËçöøûüüûûüüýýýýþþýüýýþýýýûûüýüüüüúùðèßÚÍÇ¿»ÈÔÚÕÏÍ×éñóöúýýýþþþþþüýýüüüûøôóõöùüýþýþýþþýþýþÿþþþÿþþýþýýþýþÿÿþþýþýþýýüüúòÚÍÆÅÈÉÉÍÕ×ÛßáããèéééåäåãããåäéëëíìììéåçéèÞØàâÜØÛÙÜâäèèçéæäàÜÚ×ÒÐÎÎËÆ¿ÁÉÛêôûýýýýýýýýýþýÿþþþýüýþþþÿÿÿÿÿÿÿÿÿÿþþýþýýýýúøóö÷úüüýýüýýýýýýýýûòèãÜÖÏÐÏÌżµ½ÇÒÖàìöûüýýþþýûüýüüýýýüýýþýýýüüýûüüüüûøòçÒ¿³±³·ËâïðèÛÛëðëéæÝÔËÏ×áàÒÊÌÚн¯¤˜Ÿµ¬™™™’””Ž‰†v€¨´”x~—¯ f>2+.)((#$&!!*625916==[¶äëëêéçáÙÌÁµ©œgC6$ -   - -! -  -# -  - -  - - - - -    -  -     -   -   -  -     -       - -     - - -  -  -  -  -    -  -   - -  -     - -      - $  -HžÐàèçéêèèâÉv zÂÔÔ < oÍçêçâ´C'    3.!/M[N7.2.$$%! -   (*(,'..>uzg^y˜—šzbA]z‹˜’‹}|}u}“§Ÿ—œ¥¢“¶Øàή ¬Ç˲¬®¨®½½«°»ÂÎÛÜÛÒËÁ¯¨®½½ÂâòøüüûüüûýýýýýýýüüýýýþþüüûüüûûüúúóèâÜÒž¹µÂÕÙ×ÔÏÕéôøûûýýýþþþýýýýþüú÷ñïðöúýýþþÿþýþýýýþýþþýþÿþÿýýþýüþýþÿþþþýþýýþüú÷ñàËÉÈÉÉÌÒÖÙÞßääæéëëêêáâæèçççéìêîïðïíéèèêéßáäæãÞÚÛàâåæëìëèéçäâàÜÙÕ×ÒÌÉÆÁÅÈÎÝêôùüûüýýýýþþþÿÿýþþþþþýþÿþÿÿÿÿÿÿÿÿþÿÿþþýýýüûøöõ÷ùüþýþýýþþüýýü÷ëæÞÙÔÑËÉÃÀº¶¹ÄÌÙäëôûüýýýýýþýýýüýýýüýýýüüüýýüüüüüúùòåо¸±½¿ÏæñïæØØêïíèçÞÏÆÊÛááÕÊÒÖĸ«£–›§°¥–˜›”“’—Ž‹„v“µ¦ƒp†ª´‹]F:7+-)! "'*'")4?nÆåëìëêèáÚÒŵ©šiA4$  - -        -          - -  -       - -  -   - - - -       -   - - -  - - -   - - -     -  - -  - -    -  - -     -   -   4|ÃÝåèéééèäÍz'  -Q¬ÊÌ”,  0‘Ýëëåá´VG*   )0&-OOD:8*.!$ #+-*(/.7dyr`pž””ˆmKbi‰Œ•‡„~yŠ¥¡—™ž  ËÖË­œ°ÌË®¨¬£¡³¸¶»ºÄÏØÝÝÖÍ󪮵±½Üñ÷ûüüýüüþûüüýýüýüýüýýýýýýûüüüüùôéßÜÑø³¹¸ÂÖÙÚ×ÓÚì÷ûýýýþýýþþþüþþüøôððöûþþýÿÿýþþýýýýýýýþýþÿÿþýýýþþýþÿþþýýýþþýýû÷ïåÚÎÅÇÏÐÖÔ×ÝÞåçèèéèëììëçãææãáåèîðððñïíêêêìéßÞæèåãààãáèêìëêëééèæäâÝÚÚØÓÏÊÅÄÆÅÇÎÛèóùûýüýþÿÿÿÿþþþþÿÿýþþýýÿþÿþþÿÿÿþÿþþþýþýþþüûùõóøýüýýýýýýüüüùîèæÞÙÔÎÉÀ¾»´·µÂÓÛàèôùûüýýýþýüýüýýýýýýýýýýýüüüûûýù÷îáλ·´·ÀÕéñïàÕÕèïîêçÞÏÇÇÖßâÖÒÓÕ¿´¦Ÿ”—­±¦—–’‘”’š•Ž{€«´œws’­®rI>86--! ",(8W—ÔéëëíëéãÝÒĶ§š‹aF-$  -   -  %      -       -  - -  ,48)  - -   -   $,  - -  - -              -     -       -       - -  -  - -      - -   -       $c¦×âçêëééãÒ}*  - 1‡¯ÂŠ$  K¬åîíèØ­i^3 (0) .PM@/6. -  '**(.*,5Qwnan–—‘uYS]vˆ‘Œ‰ƒv{ƒ˜¨™’–ŸŒ¬Íȧ˜­ÒË­ž¡•Ÿª±¿¼¸ÃÊÖÞÝÙÒʼ¬«³¯¼ÐïöûûûüûûüüýýüýýüýýýþûüþýüüýýûúôêàØÎý¶¹¼¸ÁÔÚ×××äôûüüüþþýýþýþýýûøïïóúüýþÿÿÿÿþþþýþýüüþýÿþþþýþýþþþþþþþþþþþþýýúõïçÛÔÐËÊÏÏÖØÛßáäêééêíáçííëèãäâàÛãêïñðððððíéêìëâßçêçâßßáãèìíëíìêêëéççåãÝÛØ×ÑÍËÇÇÆÅÉÑÞèòùýýþþþþþÿÿÿÿÿÿÿÿþüüüþþþþÿÿþþÿÿÿþþþþþÿþþþûúøõøûüüþýýýüüùõòîìåÚÑÎÇÁ¹¸¼¹ÁÊÕÙáëôùüüýüýýýüüýýüýýýþýüûüüüüüüüùõëÚĺ±µ·¿×êðêÜÒÏäëíéäÕÉÆÁÌÜäÛÔÐ̺­ ”‘•­¯Ÿ˜•”™—y®¨‹v{˜¸¥fD378<:)#!&,;d©×êìíêëèæÞÓ¸©Ÿˆ_?/ - -    !     !      - "  -   -    -   - +   -  -     -     -   -  - - -    -  - - - -  - -  - - -   - - -  -   -   - -      (0+  ! VÉÞåéêêèäÕƒ. - "\˜´v  ^¿êððìÜ°tq9 S  .',, .NV?863+# (7*+(./-2Jop^]„Ÿ•—Š~\Lfj‰‡‹ƒ„y{€€‘«¢Š˜Ž…›ÃÀ¤³Ôʪª¦•¢³Ç½½ÀÁÒÝàÜÑʽ©¦¬·¿Ëèöùøûüûûüüýýþüûýýþýüüüüýýûüüü÷ìãÙÍ¿»¶·¾¹»Ç×Ú×ØåðùüýýþþýýýýþýùøôðóùüýûþÿþþþþÿþýýþýýüýýþüüüüýþþþýýýýýüþýýýúöîãÛÔÐÏÍÏÑÕÔ×ÚáäåèéêëëííïñîêéæâÝÝàåéíððððñïëçéììæâèëæÝÛÜßäéêíîîîîïíéêèèçåáÞÜ×ÓÒÌÏÐÈÊÈÍÎ×èòùüýýýþþÿÿÿýþÿþþýüûýýýþýþýÿÿþýÿþþþþþÿþþýþüùööøúüüýþþýûüú÷õðäÙÕÎ˾½¼½ºÀÌÕ×àëõûûüýýþýýþýýþýýýüüûûüýüüüüúùóé×Æ´³±¶ÊÛéìãÔÈÍåèëêãÒÇÁ¿ÊÚäÝÓÓÁ²¦ž˜›¢±ª¢˜—‘’œŽ‚€ µŸ}tŒ«¸–dI4>@8C?$ !&&$)15Cz¾ßííðìëèæàÕɽ¢–…\@:"         -    -  -   -   - - -      -  -  - -  -   ;     -     -            -   - - - -    -   - -        &+-18>:% !>|¶ØäèéêéäÙ“- -  %S†—P ,sÊíñòíçÒŸ‹K&A  #,")* :SbB561-!!  -?7../776?4/  $$!.9T˜ÐäììïðìéèâÛν§™ˆc?>  -  -%# - #       -   -        - -  -  - - -   -   -   -   -  - -  -  -  -  - - - -#  -      #  - - -    - - - - -    - -     -  -  -  -2;NVUNM;'  - - -3ašÍáæèéèäÙ™0 Ukn-/{ÐîòòñîìÏ¢^#  '10&?VdE5:4'  - /7E@<:4947?^lNSm’˜…ykdZK`m„ŠŒˆ‡‚{z€™³ŸŒ€}¨¹¨¥ÅØÁ ¡ªŽ”¶¼Á½¼¿ÀÈØÝàÙÍó«®µÃÇÖðøúúüûüüüüûüüüüüýýýýüýýýýüúôêÝÑŹ²¸¹º¼ÉÑÕ×Üçðöüüýýüüýüûùöø÷÷ûüýýþþýþþþÿÿþÿÿþþþþþýúóõûýþýýþþþþþþþþýû÷òíäÞÖÓÓÓÑÑÕÖÚÛÞààååèêëìîïîððððïîìéæåãååçìíëéæãäåâáæèáÝçêåàÜ×ÙßåêêêëéêêìíììëëêëæääßàÞÝÙØÖÒÏÊÊÈÈÍÕãîôùüýþýýþþþþþýýþÿÿþþþþþþþÿþþþþÿÿÿýþþþýþýýûùóðó÷úûüüüûúúõêàÛÖÎÇÄÄÁ½ºÀÈÍÖÝêöûüýýýþüýþýýýýþþýýüýüüüýû÷ïâν³¹ºÂÍÛàá×ƽÈâééëéãÛÍÆÊ×ãâÚÒµš”’‘–¬¬Ÿ”’–”Ž‡|˜¸¥q…Ÿ°œm@B?CJB897!&6g³ØäìîïîëéêçÜ;­œ‰[@9   $ -$     - - -     -     -    -      - - -        -       - -            - -   -           -  - T&8GGMB7( -!   -$RµÙæèèçåÙ 1LjY!/{Ôîòññðñç»i++  "9,&  - K`X56<6' -   - 7@ACA:EC9;6ANh]]e}’rj{v^ZZ^|ŽŠ‘Šƒ{}|§¯—†yq¦¦§ÇÖÁŸ §˜¥¼¾Â¼¾¿¾ÅÓÞâÞÏÁ¹²­¶¾ÃÈâñ÷ùüüüüüüüüüüýýýüþüüüüüûùòêáϲ´³À¼½Ì××ÕâíôúûüüýýüùùöóôõüýýþþÿüýþÿþþþÿþÿÿÿÿþýýûøòíøþýþþÿþþþþýþýúóêáÙÔÐÓÑÐÔ×ØØÛÞßãäãåêêëêìïðïíîîìêèéëéæäáããâèêçãßÛßßÞÜÜâÛÚàãßÞÜÞßáäæãâàÞßâæèììîïìííêéèççåâÞÛØÖÔÒÌÉÆÆËÏØáìòúýúûþýþýýþÿþþþþþÿþþýþÿþþÿþþþþÿþýþþþýýýûóòõõ÷øûúüüüû÷ôìáÚ×ÉÄ¿»·¼ÃÉÐ×é÷ûüüýþýýýýþýýþþýüüýûüüúùõìÙɼ²¾»ÀÑÚÜÜ×ÏÆÍâèèììêæØÈÈØáãßÒ¹™ŽŠ“ ¨¢–”’‘““…‡‰v¦®”rr«ªŠ\E@?I?BED:-)!BŽÆÞèëìîïìêêçÞ̺«~VC/ -   -$#      - -    - - -   - -   &  -     -     -      - -     -   -  -   - -  -     -  -  -  - -   -  --2+2?:0+# Es¦ÎÝæççåÛ¥5Gh\" 0uÐïñññòòìÇm"1  (&& @^S5/143  - - !6DCHKB@JD44>aooeaoŒ„~‰hYMXjˆŽ|ƒ†…€š²˜}vqu}œ¨ªËÕ¹¢¦ª£«»½Ãº¸½¿¿ÑÞâßн°¦±¹ÃÂËãòùùûûüüüýüüýüýüûýüüüüûúöìæ×Á³«³¹¾¿ÃÐÓÙÞêõûûüüüûúùôñòøûüýþýýþÿýýþþÿÿþÿÿÿþÿþýýýûôíïüþüýþþþýþýûøðæà×ÓÎÐÐÕÓÔØÚÜÞÜßââçæèêêììíðîëêéæääãçêêèåáßÝÝãæåááßãàÜÜÝáÚÑÚÞÛÝÝàáâááâÝÚÙÙÞÝßçëîîîïïìêêçççåãßÝÜÛÙÔÍÊÊÈÆÊÌÑÙæñùýýþýýþüþÿþÿþþþþÿþýýýþþÿþÿþþýýþýþýýþýùüüýúø÷÷ùûüüüû÷ïâÝÕÉÅÁ¾¸µ¼ÆÌÓÞïùûüýþýüýýýýüþüüüýýûüüûùöéÜɾ¸½¾ÂÕÜÙÔÔÍÇÎäééïîêá×ËÈÕÞåâÑ·œŽ‡Ž©¬š“–—™‘ŠŽ‰~ƒ®¢‚qyœ¬zM>>BRG@BGE9* '/NœÎßèíîðîïìéåÜÊ»©›~ZC4   )**   - -    -  -  -    -  -    -   -  - -     -    -           - -     - - " -   -    - - -   -  - -  - - - - - -    - -    -    (FNQ@LJIA>@Osrc_e~Œ…ŠŽ|d\Xf}ˆŽŠ‡„yq’­žykqw{—±²ÆѶ£§§¯´ÁÀÁ¹°¶»½ÊÛÞáÔÂÀ°ª®»½ÁÄÜð÷ùûüüýüüüýýüüüýüûüüûû÷îçÝÍ·©°º½¼¹ÁÏÖÝèóûüüýýüöòñòôøýþýýýþþýþþÿÿÿÿÿÿÿÿþþýüüûûýýôôûþþþýþþüüúðäÛÕÐÎÑÓÕÕØÚÛÝàââáâåæêéëëêêëîïëèèåàÞÛÙâçêéâÝÜÝÚÞàããàáâÚÚÝßß×Ì×ØØÚÛÛàäàààßßßÝÝÞÞæêíððððïïìêëêêèæåâÞÝÜÔÑÓÎÉÄÆÇÌÐÜæñúýýüûûþÿÿÿþþüþÿþþýþþýþþÿýþþþÿÿÿþþþþüüýýþüúøööùüüüüøîçßÕÈÁ¿¿¸¶»ÃÏ×äóúýýüýýýþýýýýýýýüýýüüúùôëàο¸¹¼ÄÕÝÖÍÊÊÅÓäééïðéÚÑËÈÍßæâÌ°‘‡–©¨ž•“–˜‰‹–‹~œ³—tp…°«’jNCETVMGAEB:-",Y¡ÐÞéíïððïíééÞÎÀª¡„G;- -  - (+ #     - -  -     -  -    - - - -  -    - - - -          - - -               -    -    -   -    - - -  -           &;NI>&  ",2ALLMNJNL>>CFbpnai‰ƒˆv^Tfp}‰‡Œ‘™—Œv‚œ¤ƒtŽ˜‹¨±Ë̬”–¥­²ÌÉÇÁÆÈËÒÙÚÜÝÕþ³¦£´Á¼ÃÚëôùüüüûüüüüüûýûûüûüú÷ñèßÔÉÀ­±¶½ÆÇËÑÚêôûüýüûöòîòøüüýüýýýþýþýþþýþýþÿÿÿþüúûýýýýþýýùòúýýýü÷ñæÝÕÍÌÒÎÏÔ×ÙÛÜãâáäçèèééêëëêíêíîïñìêæàäëêêèàÞæçâÚ×ÚÚÙÕÜáàääÛÙÚßÝÑÇÑÚÝÜÛâæèåâæêêììåâáæéìïñññòîððññíîîìêéçèäãßØÕÐËÍÉÇÄÈÊÊÓÜÜçùýüýýýþþÿÿþþÿÿþÿýýýþþþþÿÿþýþþþýþÿýýÿÿþýýüúùúûüüùðåÚÓÌÁÀ¸¶¾ÇÌÓßíøüüüýýýýüýüýýýþþüüüûùùôêÛÆ·»¿Ïáß×ÙØÕÕ×âèèïñìÜÍÇÄËÚÞÓı˜’¦©›–‹ŠŽŽŒ†~‘´¦thrœ°™qTMGIQOLLMZNA0&2W¥ÍâêíðððððïêäÕ¿°¢~U=/" -   - '/ - -      -  -# -  -  - -   -     - - - -      - - -  -     - -    -   - - -     ;  #"  - -  - -  -      - -  - - - -   -      -    '3JJ<6AY~qdae‰š•Ž…k\_j„ŒˆŒœš{t‹ …”—~¥¼ÈÉ£”¢¡®ºÓÎÅÂÆÌÐÔÕ××ÚØŽ¶§¤¦ºÀÅáîõùûûüüýýüüüüûüûûüüúôéÞÓÍÊĵ·¹ÂÌÑØÙæõúúüüùóîëîúýýýýþýþþþüÿþþþÿýýÿÿþþýýûýýýþþýýýùîóúùõïäÞÖÒÌÏÐÑÔÕÙÙÝáâåèçèèêëíííìííîîððñðìåÞÝäéíììèáäççãÞÝÛÚÕÖÜÝÞàÝØØÝÛÑÌÖÜàßáåêéãââèêêëäàÜãêëîïðððñïññððñïíëêééèçäßÙÙÕÓÐÌÉÊÊÄÄÉÆÔíúûþþþýþÿÿÿÿþÿÿÿþþþýþýþÿÿÿýýÿýýýÿÿÿÿþþþÿþýýûøúúúóëáØÑÍǹ¸ÇËÈÊÓãðùüüþþýýýüýüýüûüýüüûùùöïâ˶·ºÖèèßáÞÝÜÛäééïóïæÚÈÂÈØÜζ¥›—œ©©Ÿ—Š‡”‡…ƒž²•fhŠ¤¬ˆdQIDMTQMQQLF93 /Z¤ÑáêïòòññððëåÑô¦{G<2 - -  -  1)  - -!! -    -  -  -          -           -    -  -    -  -  -      Q"%    -  - -  - -    - -   -   -      -   -   - #0LJ;eD@E<+   - @_y¤ÑàåãÝ»Z  O™, -$nÌëííìîòè¶V' -&!.' -:B\\JE>50# -   38=MMKHQKKB>)# '   -   23         -   - -  -    -  - -  -  - -  -    - -   -  $ -      -    -  -    T##   - - - -   -  - -  -    -  -  -  -        -  !5=MJBM>HD:- 6`~ ÍÜããÜÀ_ Q§”+ - )nÒëíéæéïâ§N  #,, !;@\YIH6)*"  - )678>JQFIKBA>=BLeiXWjž–’Ž}eXenŽ–š†~tˆ£˜‡‚€®¸³”™¯½¿ÆØÌÄÇËÐÐÑÓÊÊÔÛмµ®Ÿœ¬·½Úëñó÷úûüþýûüüûüýüüûøïæÜÉÉÔÖÒ¾»Î××Úãêð÷õóñó÷úûüûýýýÿÿþýþþþþýþÿÿþþþüüýýþþþþþþýþýýüöâÓÔÒÌÌÌÊÑÐÔØÖÛÝàÞåçèéêëëëîïîïïðîððððïðððïìéãäæéììèççéëêæàÜÛßÝÛÙÖÔÒÖØÐü´ºÁÏ×ãéëìæâßäééäÜÞäæèéçèëïñóòòòññññðïïðíëêìéèãÞÝÚ×ÕÏÌÇÇÉÅÅÌÒÝê÷üþþýþþþþÿÿÿÿÿýþþÿþÿþýýþþýýýþþÿýýÿÿþþþÿþýýüù÷ñêçÞ×ÑÎÏÏÒÖÎÌÏÛëóûýüýýûüüýýüüûýýýûúùøñçÒ²²ÀÚëêéëêéåãèêèïóòíæÞÐÈÐÌ»±£ž• Ÿ›Œ‘‹Ž‹Œy•­ pb„¦°“mTLTWOPPQSOYK;*""$-a°ÒãêïñôóññîìæÖÆ´¤uGD8"  -   - -29"      - -    -        - -  - -    -  - -  #  - -  -      - - -! *  -      -  -    7A!   - - - - -  - -    -   -       -   -    /HNWOB>>F?@6       -&`Ž®ÎÛÞáÝÅd -U¬˜4  'vÕëìæÝèîÙŽ7  - %6+    -(>F[ZYJ7'-# - ,779?FSQMPSJC99GU€vXPT‚£œ–“i_Vjyˆ–™•Š†p|¡—|†ˆw›¸¦Œ¡¾ÇÅËØÍÇÇÍÑÖÕÖÎÇÕÛÒ¾´«œ›©²ÄÜéïòôøùûüýüüüûüýüû÷ñêãÓÄÍ×ÛÕÇÍÕØÚàèêììðõùúüýüüùúýýýþýýÿÿÿþþþþýýýýýþþÿÿþþþþþþþýüøëØÈÀÅÉÉËÑÔÕØÛÞßàâåééêëìîìîððððïïðððððïîíìîîëèååèêêæäåèìëêäÚØÛßÞÛØÕÎÍ賓šž¤³ÄÙæéêçàÝâæçáÞâæçææéêíïòòóòóóòòðñðñðïïíîìêéåâßßÝ×ÓÑÎËÆÇÈËÌÖãêóøüýýÿþþÿþÿÿÿþþÿÿþþýüúúûýþÿþÿÿþÿÿÿÿþÿÿÿþþýýúõðæâÙÑÐÒÕØÐÌËÒßíõüýýýüýýýýýüüüüüûûùøôîÞÁ¶ÆÝêéêìêçæåéëèíôóîæÝÌÊÌÁ¸³£˜—¡£š•‘ŒŽŽ‘Œ‡zŽ¤“f]¯©€^QKLSJILJTWWG2&"$,JHXTU[M@;@GTr|_Ut™¬¥™š‘{dT^f€•—˜”‘rt  †€ƒ}†´ª¢»ÃÇÌÙÏÉÆËÑÔÒÓÑÍÔÝÔò¦—•¢°ÆäîïïöùøúûüüûûûüüüûôéèáÑÅÌÙÝÛÛÞØÜçêêêï÷ûýýþýýýüôôûüüýýýþþÿýýüüüûýþýþýþþþþýýýüûöîáÒÉ¿ÀÇÍÏÓ×ÙÛÜáãæèçêëìíîðîðïñòòòññððòòñðîíëéêìëèçèçäÝÙàèíëèçÞÚÛßâåáßÔ¾­£¢šœŸ£¥¬ÁßåçäÝÝàåçåâãããáãèìððñóñóóóôòòóóòïòñðïïìëéææåáÜÛØÖÕÐÏÌÌËÇÌÑ×ßèòùÿýýþþþþþÿÿÿþþþþûúùúýþÿÿÿÿÿÿÿÿÿÿÿÿþþÿþýýýûöíáÙÔÒÖÖÏËÊÒÖâì÷ûûüýüýüûüýüüüüüûúùöòéØÇÑãæâæëéæçæèëèîôóîëàÏÑ̺°ª—¥¢š”“ŽŒ‹ƒn„vXh£®•vYQJGJHHOOUM?E;0* "(;j²Öâëðóóóññòíæ×ʳ¢wMFDDDRUZZHPTBDUh‚jiŸ¼º©š•…fV]l}ŒŒ™˜—”‰vy˜¥Œ}Š‹Œ±·œ³ÆÇÊÙÎÅÇÔÜÞßÜÖËÒÜØį —˜Ÿ·Óëñðñ÷ùúúüüûüüüüýúøîèèßÔÉÎÚÞÝÜ×ÝåííìóûýþýþþýýþýóêøüýüýþýýýüüüþþýþÿÿþþþýþýüýúöðãØÎȾ¾ÈÌÒÕØÚÞßÞåçèéêìêìïïñïïóññòðñòññóòòñðíëæäáääãæçåÙÔÛäæäàÙØÛãæééçåÚ¤¢¨¨©¤­ÑÛÛÚÙÛÞåèåáàâßÞâåèëïñòñôôóðòòñòòññðñôïîíìééçäàÞÚÚØÖÖÑÐÑÎÍÉÍÏÕÞèïöüýýþþþþÿÿÿþþþýüýýþýþþÿþþþþþÿþþÿÿþþÿþýýýúöìâØ×××ÎÉÈÓÖÛåðùüüüýýþûüüüüüûüüûùøóîâÕÔáâßæëéççæéëêíôôïìèÜÚз®¡™—¨¥ž—’’Ž‘Œˆso}†s^}«¦{c]ZJA;AHJLVTG@.7(#?o±ÕáëñôóóóñòìæØɹ¡pL=,      80"!   - -   -     - - -   -"  -  - -       -    -       -   - - -      "  - !     - - - - -  - -     - -   -   -  -  - -    -     - -   -  @BHEHRUVYNRLIHL]w|˜µ¾»°™˜”ˆq]Ykuƒˆ—Ž‰}ww§u‚†Ÿ´ £¼ÈÅÊÚÌÄÈÖßäááÛÎÌÚØŬœ”•³ÍáìðòõøùüûüüûüüüûýúöìéæÞ×ÍÏÜßÝÚÚåíñõøüýþýÿýýýýýýôåìøüûýýüüûüýþþþþþþýþþýýýýüøðâÛÐÊÅÄÈÇÌÔÖÙÛÞÞáåçèêëìíïïðññòðññóóóññòòòôòïðìêäÜÚàâßâééÞÔÓÖÛ×ÕÑÏÛêëìîëèÜÍ¿¸¼µ²³···ÃÊÑÕÐÕÙáæèæáÜÝÝàââäèïïññòòñóóòóóñóóññóñïðîëêééæçãßÝÜÚ×ÓÔÔÏÎÏÍËÐ×ÙäïøüýýýþÿÿþþýþýüþÿÿÿÿþÿþÿþþÿÿÿþÿÿýþþþþþýýüõêàÙÓÚÏÌÑÕÙÙÞêôúüûüýýüüüüýüüúúûúøöñéáÜãàÝåëëéèçêëéíóôðíêåâÒ´¡’’§¤™’ŽŠˆŒ€tk’Šj­›tTPJDA?:3+(    N¢Ç×ÛàÞÝЃ%  (" - -Y¾åëîïîè¤G - -   - +7  -!9PcnnfWD4% -  -@;?HFMSRUQMHNNIHRx”¬ºÁ»µ©œ‘Šz]]fw‰††‡€nvƒ†¡˜~}”š”–·²¨¶ÇÇÍÛÎÉÎÕÝääãàØÌÕØ̳¢Ÿ¦ÁÞéîðô÷ùúüùûüûûüüüû÷ðéèèáÙÐÎÛÞÙÙäïöùúýýþýýþþþþþýüøèãíøûüúûûýýýþýþýýýýýýýýûøòèÛÎÌÌÈÇÈÌÏÓ××ßáãâæèêêëïîíïïðððóóóóóôôòòôóòññðíéåáÞßÝßâãèéá×ÏÏÎÎÓÎÏÚêìëìëæÜÖÖÔÌÿÆÒÒÒÐÌÊËËÑÚåçèçãàÞáäãäæêïñóóóôòóóðóòõôóóòòòñðïðííëëéçååäÞÜÛÜÜÕÕÕÑÍÏÍÏÕÙæñ÷üüþþýýþþþûüþþÿÿÿÿÿÿÿÿþþÿþÿþýþÿþýÿÿýýüûöíáÚÙÑÌÐ×ÙÜÚâëõüüüýþüüýýýüýûüûúùöóëåããáÞèíëèçèëìèëôôðêêëåз˜Ž‰”¢˜’’‘’Œ†„ym\e……˜•zaWHFC9;?DOSOJ>:2-/ (;a­ÕãîðóôõöôòïéÙ̺¤eD8$! -   - 7C3 &               - *      -     -  '&# &$'$0%" "''++-(+)*%%6)).,*"&$*% "!"  - -   - - -  -  - -    -     - -   - - -   -   -  -     - -  - A[b\QE=97C?5.%% -  -P£Ê×ÚÞÞÞÓƒ#    - (`Éèîîíîæ‡2!  - -  "8  *CTewwg`I6( $C>EICFTZ`WKBAJF:Emš³ÄÉÀ¹®¤–…j\duˆ†‡Š‡xmxs—¡Œ†Œ“²¿²¸ÀÊÏÝÐÊÏØàâäæçÞÏÑÛÌ·§§¸ÔçíïñõùùûûûûüûüüûüøñìéèçãÜÒÌ×ÝÝãïøûýþþþýýýþýýþýþþûìßàëòùûýýþþþýþþýýþþýýûùñçßÒËÈÉÈÌÊËÑÕÖØÞááãçêéëìïïïðòðïïñòòôôóóóóñòññòðïëçâääãÞãåæèèâÙÐÉËÐÒ××ßãäçéèäÛÕ×ØÒÌÇÍÙÚØÓÑÍËÌÖÝáåèæåããäâäææëíñòðóôòòóôóôôòòôñðòòðïðïðííëêèéççãåáÜÚÜÙÖÖÒÒÐÐÑÓ×äï÷úüýýýþýûùþÿþþÿþþÿþýþþþÿþþüþþþþþþýýýüúõêÞÙÐÌÓ×ÚÛÛÝãòúûüüýýüüýûüüüüüûùøóîéäæÜÜéîìéèèéìéíòõñïììãα–€‚—£œ”–•‘…viafvŒ’–v]PKNEA<:=CSNLJ<707;+!%" #7_¯ÕæíñóõôööòðçÙÍ¿¤cJ4&" - !7B8  -#  -  - - -    %6+11<   -   -  -    !$ " $&* * !&(  !!$ +'!% *0&&#&""%'"$*%*("!%#&"  "    -  -  -        - -  - - - - -          "A[e\L:??=>:;.%(! -   -N¥Æ×ÚÜÜÜÏ„' -  /€ØìïïìíÜr+    $6  1L\hxodQ2.# -  -(@BKH?DOZ^NCE?DJHHfšºÆÈÇ»°¤š—u]`h‚‡„ˆƒqpkˆ£š‰‰˜•Œ©ÆÀ¾ºÅÐÝÏÉÎÛâããææãÖÑÙϽ°´ÌãëðïóöúúúùûüûúûüúùóìêèèæäßØÈÑÚàïøüüþýýþþþþþþýüýýýúíÜÖáòûüýþþþÿýýýýüýüù÷îåÞÔÊÌÉÇÌÏÏÒÔÖ×ÛÞããåééêììîïððñðñðñòòôôõóòòòòòòñïíìèáàãåããååæçäàÚÕÐÍÒÖÔØÚØÛÞÝÜÙÖÖÒ×ÓÒÐÔÛØÕÓÏÏÌÌÏÕÚÛßáããåããæçêëîðññóñóóñòôôóôñôóôõòññòïððîïíìííëèèæåäáàÛÚÖÓÐÐÐÌÎÔ×âëôùýþüý÷÷ýþþÿÿþÿÿÿþýýþýÿþýþþþþýþþþýüýûñæÝÒÏÒÚÜÜÛÚÜêøúüüüüüýþüûúûüüúúù÷ñêèåÜßéììéêééìéìóóóðìëÛÆ­—ˆ‰£¢•“™’’Žƒxgckwˆ”‘tU@7XK6C@5*).&)%!   - (‹ÅØÚÝÚѵZ 'Oªàíððíã¸D ) -21(5<<523,0,* " !(   -@»Š!—ɾ‘6!&/l»åëçÞ•'  -  - * - -*T_rˆ‹Š€fOA6  Ellfd€¹ÐÖ×Ó·±ÆÎÃËɺ°»ÈÉÐÎÊø²¥˜’‹]Vhs~ƒŽˆ|}uvwŽ­¢ŒŒ—•Œ¢ÆÕÚÕÚÆÊÔÞåææçêëéÔ½ÊÉØèëïðó÷øùùùûûúùù÷ñçÛÎÃÍÏßêêìïóøüþýýýýýýþýýüùûýüýþýþýýüüòëõùøõêÝÕÑÈÅÄÄÉÎÕØ×ÚßãäâäèééêêìëìììïðïïïíðñïïððòñðððïêçåáÝÚÛÚÜÜ××ÖÔÕÑÏÌÈÊÈÍÖÜÙÚÖØØØÔÒÑÔÖÖÓÎÁ¹·¹¸»ÀÉûºÀÃÁÅÁÈÌËÅÇÍÒÐÎÐÌÎÏÍƾ»ÁÀÁÁÄÅÅËÊËÎÒÓÓ×ÚÙÝãçìíïñòòóóóôö÷÷øøôôôóôóôòññððïïïííëéæãáÜÚ×ÒÑÒÊÌÎÏ×áî÷úýþþþüýþþÿþþþþþýýþþþûýþþþýþüûöíéäÙ×ÓÔØàìöüúüüûüüüüüüùøùôðëÛßëíðïíëêìíéèñôóìÕ½¡’‘ŸŽŠŒˆ‰‹rbdo’‘ž·ÎÛàÞÜÐÁÒåçäæÝÀœzik‡“_9)!%#%E‚­ÇÜéïóõö÷÷÷óïìàзŒ^N0  -   - ?(;G8 %"         - - -    -  -   - -$ -       -           -  -  - # !%#       -  -  - - -   - -    - -     -    - -   -  -   - - ?ZbdQ)#,8D:;113+*.-'$!    N¥¼›7 -yÂ¥] #,>ˆÍäãÌu - - " 4Rbq†Š†jW;.# - #Jmspu„¹ÎÙÚÙÁ©ºÏÇÊÍ­°ÈËÎÒÈþ¹ªŸ–ŽqW`fu†ŒŒykrtt¨ª’ˆšŽ˜¾ÖÜÖÛȽÌÜããåçêêèÚÁÀÍÙçíðññøùùùúûûúûúôëäØÍÒÒÍÝêéìð÷üýýþýýýýýýûùúüýýþýþýýýýýûðßáêæÞÒÅÃÅÅÆÉÎÒÙÜÛßàãäåèêéêìíïïîííïðïïðïïððîðñîðîîëëçáÝÛÚÙÙØÙÙØÍÎÏÎÎÉÊÎËÍËÐÚÜÜÝÙÚÛÛØÒÖ×ØØÙÑÇÂÃÀÄÄÅÌÊÀÂÂľÀÆÊÍÎÆÇÎÓÔÔÎÊÉÑÏÈÁÄÈÉÇÅ¿¿½ÅÂÄÉÌËÐÔÒÑÖ×Ûáæêëïïñòòôõ÷ùùø÷öö÷ö÷ôôòóóòòòñðïîìéçåââÝÕÓÒÓÒÑÎÎÒÙãëöùüþüýþþþÿÿÿýþþþþýüüýüþÿýýýýûòëæÛÕÐÒ×Ùåïøúüûüüûüûûùùùù÷ôîäåëïðïíëêêìçëñõôëвž‚…š’‰‰Šˆ~habr‹”– ½ÑÝáßÛÍÅÝèçåèÜɳ—€t”§lA,%P‡¬ÈØçîñö÷öõõóðìàѵVB( - .   - ->H@' - -    -*        - -              - - -  - -      -  -     -  -  ##"!#!! - -  -   - - - -  -    - -   -  - -  -   -   -    -% - -  -  - -  - >ZYbL%+?>>;:085/1.)*/(  -  -M§Á«N f±s3   - ',M—ÌÒ¥@  - -!"  ;Rgx‰Š„mW@-  -+^y{ry†²Î×ÚÛα®ÊÍÅÊÄ·°¾ÈÎÔÎÅ¿·¦›“vZXdt…„tmrn{®‚ˆ™ƒ‡µÓÜ×ÜͺÃÜääååéêêàµÇÞêïðòòô÷ùùùúúúùøòéßÐÏØ×ÍÛéìíòûýýýþýýýýûøùúýþþþþþþýýþýýúíÑÉËÌÄÀ½ÁÆÇÉÏÖØÛááãâåççëëììíïîðïïïðóñññññðïðîìêëèåáßÝÜÙÛÚØÕÙÕÏÍÈÊÉÆÊÊÍÔÖÖÑÔÚÞÝÜÛÛÚÚÙ×ÙÜÞÝÛÖÍÈÉÊÇÈÊÐËÅÁÆÇÆÃÉÐÒÎÌÊÌÕÖÔÏÐÐÏÐÌÊÈÑÎÇÇÀ¹¶·¹¹»ÁÄÆÍÍÍÒÖÖÕÚÝåêêïïòòóõöö÷öùùöôö÷óóôóõôòòñññðìêçççãÝØÖÖÖÑÒÕÑÎÐØàéòøüýýýýþþÿÿÿþýþþýýýþþýþþþýüøðçÝ×ÔÔ×ØÝçòúúüûüüûúúùùùø÷õðéèêððîîëêíîéêñôõåÌ«™‰Šš›“‹‘Œ‹Œ‰ul_j€‘œ©Ä×ÜáÝÙÉÎãèåææ×Å»±•Šœ¢£z?(%"&)TŒ¬ÇÚçíòö÷÷õõóñíâе„W;+  -  *   >G:       -   -      -                   -  -  -      !#$  #& -  -   -  -  -       -  - -  -   - -      -/      -3   -  A_XZL#$4@=76)*2,002+*)  P¦Ä´`@x9 -  “.&D”½‹*     ?Wmˆ†‰Žˆvm^I0  (b‚‰†~±ÉÖÚÙÒ¸«ÁÑÊÇÌ»°¶ÄËÔÑÆÀ¹®œ•ƒa\aqv{„qrrmtª£ˆ†„¯ÑØÖÛÍÊÈ×âååäêëëáǸÊâêíîòóöù÷ùùùùùúôìåÔÌØÝØÓÚæëòøüüýýþýýùøùúýýþþýýýýþýþýüúóÞȼº¼º¾ÆÆÈÏÒÕØÜáäåææêëêííïïððññðïïñðññðñññîìëèæáÞÜÚÜÛØ××ÕÐÏÎÈÆÇÅÅÅÄÄÉÐ×ØÖÔ×ÝáÞÛÝÞÞÝÛÛÚßãÜÛÙÕÓÒÓÍËÐÑËÇÁÆÇÎÈËÕÒÑÎÐÔÖØ×ÔÓÔÑÑÏËËÎÒËËÁ´¹´¶¶´¹¶¼ÁÃÄÉÎÐÒÐÖØßäèìïïóóõöõõø÷öö÷öõôóôôòöõòóòïîìëëêçåÝÚÚÙ×ÖÔÕÐÐÒÐÕáåï÷úýýýýýýþýþþýýýýþþþýþýþþüôéÚ×××ÔÖÙáîõúûûüüüüúúùùù÷ôïëêíðòñíëìíîëçñóñáȨ—Œ¡’Ž”‘’…jmds}Ž—¥´ÌÚÞàÝÕÈÔåèåèàÑÅÎ朣§¢r?)#" ,R²ÊÝçîðóõö÷óôðìâеzU=&! -  !  - - 4@@!%     - -  -   -   -           -       -        -  -  -   -           "$! # " #""   -    - -  -   -    -      -    - - - - - -  - - -         - Kcd_N0(7;600&-((17+/$# O£ÁÂy )  & FxM      -=Og‰ŒŽ’†wpjR0#  (f‰‹Ž™¶ÃÕÚØÕÆ«±ÎÌÆËÁ´±ÃËÓÖÏÄÀº¥Ÿ‘…jVbnrz{~pzsln‚¨¯‘Š’‹œÅÑÌÖÊÈÈÕáãåæéíëã̺Íæëíñóô÷ùùøùúùùøñéßÍÏßáÚÒÙæíöûýýýýüú÷øûüþþýþýýþýýüýýüùïàÇ»¹¶·ºÀÈÍÓÕÙÝÞàåæçêëêîðîîðððññòñòññðñðñððîìçäâßÜÛÛÙÙÛÖÏËÍÈÉÆÃÆÅÆÆÇÇÉÉÐÙÛÛÖ×ÞÞãßàããâßÚàäâßÞÝÝÝÚÙÕÓÕÕÓÌËÍÒÓÔ××ÖÕÒÔ×ÙÙØÖ×Ø×ÔÎÌÎÒÒÐÍÆ¿¹µº¹µ´·µ¹¸º»ÅÈÊÍÒÔ×ÚÜãçêíïòóõôõö÷ù÷õõõôôöõ÷ôôôóòññîëëìåáàÞÝÚÙ×ÖÖÓÑÐÑÍÏÙâîùüýýýýþýýÿþýýþþþþýýþþýüøíÝÓÖØÑÏ×ÚçîöûüûûüûûûùùøùõòîëîïóñìëëìíêéñóíÚ½Ÿ‘†ˆ¥›‘“—“”zgaez‹Žœ¦¸ÐÝâàÛÏÉÚæçäæÝÌÍØÈ°¤§¯ª~<$! $#-F’±ÊÛçíòôõõõôòðíáÍ°wQE+ -   -    :DK# &!   - - -     -  -  -    - -   -     -  - -  -   - - -     -  -  - -   - -       -"" "# "%"! $+  $%%   - - - - - -  - - -  - - - - -   -  -  - -     -  -       !A`hbL606462:0710%3/*(*'"‚¶ÁŠ  -  -#    $>Tk‘Œ†€qgW<   -)m‘¡»ÂÏØØ×ͱ¨ÆÐÅÇȺ¯¾ÇÑÖÐÇ¿¹«¤’ŽtU`fn{xuzzqkuwš²œ~–…¬¼ÁŹ²ÃÚäãæçéëëåÒÂÖèëîñóôöùøúùùúù÷íâÔÇÌÜáÜÔØæðùüüýýûøùúýüýýýýýýýýýüüúøôæ×˹¶¸·¹ÀÉÎÒÖÛÜßãæçéëîììïðïððòòïòòóóññðññòðïëåàÜÝßÞÜÛÖÔÒÊÆÄÂÀÂÁ¿ÄÈÊÍÊÈÇËÔØÜØÖÙÝßäåæçéèæåéèèææçççäããÞßÜÚÙÛÝßàáßßÞÚÛÚÞÜÚÙØÙÚÜ×ÑÏÐÑÓÐÌÈÅÀ¿¿½Ã¼»»º¹º½ÁÂÅËÍÍÕØÛÝàãêíïñòóõööùö÷öõöööõõõõõôóòñïíëêèåæáàÚÚÚÔÔÏÏÍÊÇÌÌ×åîöüýýýýýüýþüýýÿýýýýýüüúñãÙÔÔÎÈÍÛâéôúûüûûùüûúúøø÷öðîññóñïìíïîíéïðêÓ²Ÿ‘…“œ–’”’“”’‰}ejm}Ž«½ØàââØÈÌâëçèâÒËÚÝϸ«­°£v>!#&.O•¶ÈÜçîôóôõöõóòíãдyRE'  -!   -:RP'      -  - - -     -    - -     -   -  - - - -      -       -    - - - -  -      - - -  -     ! &!!''$"#&% #&&   -   -     - -    -    -  -   -       - - - :_bcR@&)2/15;<;0-"F5$138 0 Pž½¡5  -      -  +FYl“‹‰|peY4 -  'm“™œ¤½ÄÌÕÙØÒº¡¾ÑÃÄÈ»«¯ÀÎØÕÌú³ ›”v`Zgkt†‡yunps‡§¤…“†n”»ÊͽÄÙáåäæäêëëæ×ÈÕæíïñôôøùùúúúùúóæÜÊÀÈÛäÜ×ÖåôûûûøøøúþýþýýýþýýþþüýüùñçÜͽ¹¸¹»¿ÂÊÍ××ÛáâäæèçéìííîñññðòñòñóôôòòñððòñîêçâàÞàÞÙ×ÔÍÎÉÇÅÄ·¼ÆÄÊËÉÉÌÌÎÍÎÖÛÜÚÜÛáåéèéëîîðïñòóóóõöööóóïèååêîîðññïîñíêéééäàßÞÞÝÚÕÐÐÔØÑÑÏÊÆÅÅÅÅÀÄÄÀ»¹¶¸¿ÂÁÄÉÌÑÖÙÚÙÚáçéíðñô÷÷ù÷ööõ÷ôö÷ø÷õôôòñðñðïíëêéåäãÞÞÚØÖÓÐÌÉÈÉÏÑ×áëôúüýþüýþüüýýýþýûýýüû÷îâÙÔËÊË×ßêð÷ûüûûüûúüùùùøöòðñóòñíïïïîëêðñæʬ›Š˜›•Ž˜“‹tabm€’”¶ÊÙààÜÔÈÓåéèæáÏÒâáλ¶´µ q<)%.M’¶ÊÜçïòõõõõñóòîáбxOF'% - -  -  -675-0"//,/&!  -fª­O -    -    -+B[”“’‘ƒufXA   !e“”–š¨»ÅÆÑÙÙÖƱ²ÌÉÃÇÀ°¥»ÉÕÖÍÄ»´¬Ÿ{o[_fu{|„~zt}r’§‹y‚‚»ØßÎÓãääåææéëìçÚÍÖåìðóôöùùúùúúùöïáи¾ÖâÝÓØçñôõö÷úüýýýýÿýýüýýýüûôíäØΞ¸¸ÀÂÃÉÈÍÕÜÞàãåèéëëîîðððòòðñóòóõôóóòòðïðíêèåââàààÛÖÏÎÐÓÔÎÆÃÄÃÈÆÌÍËÎÏÔÖÙÚÜÝÜÝßßåéëïñöùùüüýýþýþþþþÿþþü÷ïóúýþþüýýýüûúûù÷óíêåäáÜÜØ××ÕÔØÔÔÑÐÒÊÇÁÉÇÅÂÁ½»ÂÄÇÉÈËÎÑØØÛÛÛÝßæéîðñôôõöõ÷ùöööõø÷öõóòôòññïïîìéèêæäãÝÜØ×ÔÏÌÅÊÌÌÍÑÙáîõùûüýýýýýýüýýüüýüûøïßÕËÊÇÌØáìóùûüúüüüûúùùùøóñïòôñííííïêéîïàÀ¢‘‰‡š•ŠŒŽ†‡‹ŠzoecwŽ”˜§¿ÑÝâßÚÌÎÞéçèæÚÊØéæÔÀ½»½¯|<#$%*O•·ÌÜçìòõô÷õôôòîâѬmL>)% -   - - - 2 - 8EC' - !' - - - -   -    -  -   -  - -   -        -  -   -   - hn   - -         #"$$%"#*&" "#"%%'!!( -       -   -   -  -    - -   -  - -   -   -      &IWbaJ>>(! $4=;43,40(-2((0')    `š\ - -       -  ):]‰™•”ˆ}eR?  &f‘››ž ¹ÉÅËÕ×Õͼ¬ÁÊËÉÈ»«®ÅÍÓÑȽ´£›v`\ist~€…‰vw‚vƒ›–yn„ŠŠ¦ÓÝÍÕãåäåäåéíìæÜÐ×åêðóôöøùùùùøöïçÖ»¹ºÊÝÙÕÜáâîøûýýýüþýýýþüüûüöñæÚÍÆþ½ÀÁÁÅËÊÎÓØÚßáäèçêêíìïïðððóóóóòóòòôõðñïîëêçääáààáÛÜÛ×ÏÔÙÚÙÔÍÈÉÈÍÏÐÎÐÖÛÛÜßãàààäèéíñôúýýþüþÿÿÿþýÿÿÿÿÿÿþþüøùþþÿþþþþþýþýþþþýúóíêæäãâàÜÜÞáâãßÞÜ×ÕÌÒÑÌÅÅÄÁÃÈÍÎÍÐÏÐÖØÛÚÜÙØÜÜàäëíïñóôóöööõ÷öõõõôøöõôòòñññïìíëèêéåáÞÜÖÓÎÏÎÈÂÃÇÈÎØäñøùûýýýýýýþýýýýüüúîÚÏÎÎÌÐÙâðøùüüûüûùúùù÷ø÷òñóóñîîêëîêçëìضœ‘ˆ‚–‡‡‰Œˆ‹ŠŽ…skdl~Ž“ž³ÅÔáãÜ×ÉÑåìèèáËÊãìéÚÈ¿Á¾­~=1#)&(Q–ºËÚæìñðñôõôññîãÑ©nL?*!  - - - -    - 3FL2  #  -           "     -     - -  -       -    5%#$$#$(-&-0+31,0)35444-//;43=-(,# )!!/-)($#%("()'-+'+"5-*   - -    - -  -      - -  -    -   -        - -    -   #LYgbG96:) .0.6-0/-.:20-10%  # +W< - -        - - ,;e†’“”“€‚{cN?&  -  h”šžœ ¯ÁÃÊÒÔÖÐð¶ÊÌÅÈIJ±ÈÊÓÔÏÆÀ½ª™“‚f`jitŠƒƒ‚ƒvr{“¤mƒŠŸÈ×Ð×ääããåäêëìéÞÖÚéíñóôõ÷ùöøùøòíâ˼½Ã½È××Øáßç÷üýýýüüþýýýüüûùñáÕÉžÁ¿¾ÃÅÈÇÊÏÑÔÙÚÞãâçééêëíîïîñññóóóôóóñóóòñïîêæäâáâààßßàÝÚÙÏÕÙÜÛÕÏÌÏÓ×ÙÖÔÚÜàãæëîîíïîðïôùýþþÿÿþþþþÿÿÿÿÿÿÿÿþÿþýüùþþþüþþþÿþþþþþýýþûøöðìèçèèêðôøöòíééãÝÜÚÔÏÎÍÊÊÎÔÏÊÏÏÙØÕØÙÙ×Õ×ÖÙÚâæêíñòóõöõö÷÷öôöööõøøóôòòñðñïìðîìëêæàßÛØÒÐÉÄÄ¿½ÃÌÕáêòúûûýýýüþÿýýüüüõäØÓ×ÐÍÍÝëöúûùüûúøùøøøù÷òñòòñîïîìíëæêéÏ©“‰{™–‹ŒŒ‰‡Štbjp}Œ–¦¼ÊÙâãÜÐÈÝèèçéØÊ×éîéÝËÂÄõˆG+#% !.T›ºÊÚäìñòóöõôòñîåαmJA&  -   - -   -9BI, %    - -  "!"              - -      - *$#! "*'"%+'&%+0++)2:3277;:67:6:F:DCFJBEIKDABFIEEBMIGABFJD18%$ -#(15//,+392**2:6  -      -  -    7Ca‹–•“‰‚w^F;  )k“Ÿ¢§¥š¥¯¼ÎÒÚÐ˶§ÁÎÆÉɶ¯ÄÅÐÔÏÊÃÀ®œ“ˆkc`dr…ˆŠ†z~…ynŒ¡…e€•–—¸ÎÎ×ääääåçëëëéãÜáêññõôõøøùú÷÷ðëÚÂÁÔÑÂÏØ×ÛãçðúüýýýýýýûüüùøïåÖȼ½½ººÂ¿ÇËÍÐÔÕØÙÙÞáâäéêëëìïîðððïòôóòñóôññññíëèåâãÞÛÚããßÞÞÜÙ×ÕÙÜÝÛÛ×ÖØÙÙÛÝßâéìñøùûüýûõ÷ùüýþÿÿÿþýÿÿÿÿÿþþÿÿþÿþÿÿþýýþþþþþþþÿÿÿÿþÿýýþþýþüûóîíìñúüýüýûùøóïëãáÝÚÖÕÖÔÔÓÐÓÔÛØÔ×Ú×ØÓÏÌÒØÚßãæëîññòóóöõööø÷÷õö÷÷öòóóññðññîíîêéæåâÞÛØÒËÌÆÃÂÀÁ¿ÆÍÝñúûüýýýýýþüýüýûïàÔÕÔÑÐÚãòùùûûúúùùùùúú÷õòóõñîîîìíêåçáÀœ‰~€Šž˜Œ’ŠŽŠ‰”‹€z`p€™¨ÁÑÜäãÛÌÐâéçæçÔËÝìîìÞÌÉÇǶƒ?%#",Sœ¼ÏÛäëðóööõôóòïåÏ«lI>,   -  -6FI#'  -  -  ##       $% %,%-(24*%+&'$/6.3.131278<89=4A=?@JDB;EICEGGDEIIDDDAJLHFB@=DCD>:=84AE15397.+0-73.!&0('$('$" %&0)/6-+3/-01//2+1*.0-**+&/=   -  -   - - -  - - - - - - -    - -      -  -   -     - - -   &  /I\d\KA5/+$ - -"304,/34434(,:0) $&       -  ?LlŒ“–‹†rbU@  - ,k¢­©£™“¸ÍÔ×Ðͺ ·ÐÈÇ̯¹ÃÊÑÑÍÊÅ· ‘’uhb`t‚ˆŽ„ˆ€ˆƒvœ’s{œ“¢ÁÇÓâæççççëëìéåáãêñóõôòöùùùú÷îåÒ¼ÆÒÈÄÒØÚßæðñøýýýýýýüûù÷íáÕËÁ»¼¼»¿ÀÇËÊÑÔÖÙÙÛÜßãäææêëìíîîðòñððòóóóññðñòîìëäàßÜÙÖÕ×ßãáàááÛÙÖÛßÞÝÜÛÙÙÜáâéìñ÷úýþýýýþüûüþþþÿýÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿþüþþþÿþþÿÿþÿþþÿþþþÿþÿýþþûøôöýýþýþýýýüûúõïëæàÞÝÙ×ÓÕÖ×ÙÙÜÙÚÛÖÑÇÊÉÌ×ÙÚßäæêîññóööõ÷÷õø÷÷õøöóõõóòððòðððïììëèåâÞÛØÔÏÊÊļººÅÖçõùüýýýýýüýýüü÷æÙÕÖÓÐÔÜì÷úúùûùùúùøúøùõñóóñïíìëíèáàÔ¯—†Ž™“ŒŽŽŽŽŽyjfm„˜ ³ÄÓßäáÕÇÖæêèéãÏÏåíïíâÒÍË˺‡Q-" !!(N‘¼ÏÜäëïòôôôôóóîæÒ¨mP>/#  -  - 2A6$ (!  - -   # " " $!%""!"2#&%'-).17,0/8<6-59<;=9:879=7<;>:HKI@DELEAHLMQFEFBCFJFELKCDIBFE@B?B@B>9=??7<;68003.1&&.+*#!  *+     -   *27<8849@C=@:59<=>:>GF?;      - -    -   -   -   -  - -  ,Lfb\A<333'# 2.41/.;8213./-,% !%"$      - CJ   -  *BPs–˜”‰‡‚vcT9'  - - -*q’ ©©£¢­ª¹ÈÒÖÔÒÃ¥«ÄËÅÇǶ²ÃÉÓÓÏËÆÁ©—~y^ZhzƒŽ‡Š~‡ƒr‘›}•‰•µÁÔåæäçåæéëìêåâáêðõõôõõ÷ùù÷òéÞ̺ÀÈÃÍÚØáâåõöøýýýüüüûöíâÔÊÁ¿½½¿¿ÅËÈÌÐÐÖÙÙÝßÞßáääèêëêíïïðññññòóòóóòññîìêæäàßÛÔÑÌÐØÞáááåßÝÛÖ×ÞàÛÙÛÛàçîòøûüýþýþþþýüýþþÿÿþþýþÿþþþÿÿþþþÿþþþþÿÿþþþüýþÿÿÿÿÿÿþÿþþþþÿÿÿþÿþþþþýýûüýþþþþþýýýþýýüùòîçâÝÙÚÚØÚÚÜÚÝÛØÎÌËÆÇÍÐÔÙÜÞåèëìðóôó÷öõøôöööõöõöõóóôòòòòïîïîìéêäáßÛÕÖÎÉÇüº¼¾ÎÝëõüüüýýýüüüüüñàßÜÙÒÑÙçòøúúúûûùùøùøù÷ôóòñíëîíëêàÙɦŽuv•’Š‹ˆŒ’‹Œyiek”¨¾É×ãâÝÏÍßéëééàÍÖêííìãÔÑÍÈ»‹L-*$ $*L•¸ÑÜãëîñõõôôñðîæУmR:#   - - ,8=- $/"    - -     ##'!"$)"#&!&*,,00'.483;69349=:>=C><@?AFL>?KGFGJMHHB@IM[POXMNJOKVRNOXUKTMEMJIDRGJDIDA;B6.?44?;92-,-,+'((&)*+   - -    8  -   -   -"*,-,/),,43.4046::7:?)  +#      %!  -#%)03KJJIBKPNOJSWKKURQMXTQQPRMKWYQUSQXPMVRMPIC=CDE=H><<;9DFKEA@=;237M`Š“––’“‹Š…oZ< - -,t”¤±°¨Ÿ±»»ÉÁ±«¸Áû¹ÄÊÇÉÉ®ªÀÅËÑÒÏËÀ¤š‘vb]j}ŠŠŠƒ‡v“—vr|Ž²Ôåææççèéëëêäßåîñóö÷÷øøööïäØļËÍËÔâîùûôãèêçèìéáÑĶ¶ÂÀ»»¿ÄÆÌÐÑÑ×ÙÜÞââåãæççèèèèêèêíïîðñòñòòðñòðïëæáàáÞÛÓÉËÑÚÙÖÕÖÜäââæèéééêîöùýýÿýþÿþÿÿþþýþþÿþÿÿÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿýûñíøþþþþÿÿÿÿÿþþÿÿþþÿÿþÿÿþþÿÿÿÿÿÿþþþþþþýþÿÿÿÿþÿþþþýûùóïíèååàÞ×ÕÖÕÒÔÐÈÀÇÌÐÔÖÙÜâèíðòôóôøø÷÷öõõôôøø÷÷÷óóõôòððïðîìéåáàÚØÒÎÌËƼ½ÂÇÑÞèõúýüûüûøïèéçÝ×Üèñ÷ùùúúùùùø÷öóñôôòííëëíêâΰ‘|{|‘Šˆ„‡…Žˆ‘sqol~Œ‘£³ÈÕÝãßÏÐáééçëâÕÕáéëèâÜ×ÕÏÊÚW+'# !1E“¾ÏÝäèíðñôóôòðìäÑ¥aK/   -    2>@) ) -    -  !-$! %( !    -    -  -          - - -    -   r  -  - - -    -    -     - -  - -  -   - -     -  - - -  3RUTG76.).6;1)313681;=084*($,&!  +‹Öß©L - 4šÜÔ†+  - -=NiŽ’”™˜“‘u`D  .o–¤¯¯¯¢³½¼ÈǺ·¿Åĵ¯¸ÍËÅǺ¨¹ÆÎÓÓÔÒÄ®—Œ}jdk|„„Ž‹‰†ƒzŸ€uq‹ƒ§ÓåççæèçéëíìçÞåïòõ÷÷÷øøøóéÞʳ·ÍËÍÛêõûùøáÏÎÆÁÁ¿¼¶³µ´½ÁÁÁÆÈÌÒÖØ×ÙßàâäçèççééééééêëéìîððñïññòñïïëéåàßÙÔÑÍÈÅËÔÜÛÖÓ×Þæååëîñó÷úýþýÿÿÿþÿÿþþýýýÿÿÿÿÿþÿÿþÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýûôëæäçòøüýÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýüüýÿÿþÿÿÿÿþþÿþþþýûùõñìæâÜ×ØÖ×ØÏÅÀ¾ÀÁÆÌÔ×ÙÞåêîïòôõö÷ö÷÷öøöøø÷öõöõôôôòóñðñîìêéçâßÛØ×ÔÊÌÈÂÀ¾¿ÃÀÉÔÞëôøúúúòçäæÛÒ×âíóøùúúùùùøø÷öòööòïïíëëëßǦ„v‚Š–ŽŽ’••—Ž‚shd€Š’˜¨»ÌÚáãÛÌÕçéçèèÛÊÎÜäãÞÚ×ÙØÐËÅš^0(*"# C’¾ÎÛáèíñòóôòòñíãÑ¡eL6& -    -B@' &)&    -   #  -        -  -  -  -   -  - - e7 -  - - -   - -  -    -   -    - -  -    -     - -  -   DX`XJ?5./!&7@A@,$"05<789/*)./-+09/$ !.!V»ãéÓz#  - -Jºææ¯K -   =JqŽ‘•™—–Œz\:  -.y“¨±¶³¡¬¸ºÆǾ¾Êʸ¬«ÄÍÃÊÄ©­ÂÍÔÕÕÕÌ·¤Ÿ‰qd]k†Œ‘ŒŠŠ‡‚—v‰„†—Íäååçççéìëìèáâëñó÷÷÷ööôîåÓ¼§³ÌÅÑáðùùùø⳦ œ£¦©®°·º¼ÄÅÊÌÎÒØÜÜßââåæçéêéèêêêëêêëëìíîïññðððïìëçåâÞÜÑÉÄÀÂÅÁÈÓÝÝÙÖÞåèìïòúüÿþÿÿÿÿþÿÿÿþýýüýþþÿÿþþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿþÿÿþýüúôìæßáÛÛßãìñúýþþþþÿþþÿþÿÿÿÿþÿÿÿÿüÿÿÿÿÿÿþýüüþýþÿþþþÿþÿþÿþþýýþüúôéãÞÝÜÚ×ÑÊľ½º½ÃÊÉÒ×Ýáçêîïòôóõôõù÷÷øø÷øøøøõôõóôôñðñðîìêéæáàÞÛØ×ÔËÆÄÆÀ¹»»¹ÃÏáðôõðæãäÛÑÐØçñõøúùúøøøööôòø÷òðëêìëêÜÀ…„Šœ›ŠŒ’Ž“˜yudl|‹—¡²ÅÒÛßßÑÊßêéæèãÒÆÏÙàÝÖÍÕ××ÓÏÀž`4*!$A†¹ÎÚâçíîñòòðïîéäÓ¡eE8$     -  2@A. .8&   - -"( ###!#  # - -   *        - -   -  -    - -   -  - - - -  - - - -   - - - -  - - -  -  -  - -    - -  - -    - - - -      -GX`VIB?2+'/.;- *19:29/221-&+0-+ ! $$ #sÌçêÖ~(  bÅèëÇf&  - EPl’”šš’”™‰ƒc/  0yœ©­¹´¢¤¹³½¼¶½ÈǺ¸°±¼ÌÈÇ˵¡»ÉÍÔÙ×о®¡šŽ„ibdy„ŒŽ„|“™ƒ{}ŽŒ‘Âãåæèåæéëìëéáàíòô÷øøö÷ôëßʬ£ÀÌÐÛèôøùöïͨš•›¡¦©ª²¼ÀÃÉÊÍÓÕØÚÝßäãåéçêêêêêéêëëëëëíïïððððïîîêèæãâÜÛÐļ¾ÃÈÊÇÈÒÜÜÚÛßèìõøýþþýþþþþÿþÿÿÿþýýþþÿþÿÿÿÿÿþÿÿþÿþþÿÿþþÿÿÿþÿÿÿÿþþýûõïéäßÚÞÛ×ØÚÝâëóúýýþþþÿþÿÿÿþÿþþÿþþþÿþþÿþÿÿþýþýþÿÿÿÿÿÿþÿþþþþþÿÿþþüôêçâßßÛØÎÉÆÂÀ»¼¼ÀÉÐÖÚÛâéííðòö÷÷ô÷øùø÷÷÷øúöøöõóõôòôñðñìéêéæåàÞÜØÓÑÈÅÈÁ¿½¹´·ÀÐÞêìçåçã×ÐÔãòö÷ùøø÷÷ôóóòôõôôîìëêëæÖ¸”…w‰¡“‹‘”˜‹’}mdhyœ­¼ÈØÝàÜÌÏåéæäçÛÐÒ×ÚßÜÑÍ×ÙÖÐÏÄš_0##(D‰·ÎÚâèêîñóôòòìêåÕŸiV2"  - -   1B@5&+   - - -&&!#$" "# - -   -   &   -  -   -   - -  "   -    - - - - -  -  - - - - - - - - -  - - - -  -  -  - -  -    -     - -   =[aYFAA6,'037?B@12.;A8353(.11(,S"&# &  +zÍçéÔ{%  tÒêêÍw- - @Nmœ™—˜š”ƒf= -  2p˜ª´¼¶¢§¸¯®°¦³Áº½Á½¾ÍÎÅͼ§³ÀÊÕÙ×ÐñŸš‰zjdu‘Œ‹ˆ…wq‹¡y€Š‡ˆ±Üãçåæäèêììêåæìòô÷÷÷ùôñé×À¨«ÆÖÙÛêñóíâб¡š“ §«°³¸ÀÅÅÍÒÒ×ÛÜÝâáãáæèçêëêëìèëëëîììëîîïñïïðíèåâáßÚ×м¾ÁÈÊËÈÍØÝÝáäêñøûýýÿÿÿÿÿþþÿÿÿýþþÿÿÿþÿÿÿÿÿÿþÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþûñìçãáÝÜÞÜ×ÖÚÛÞÞãëòúþýþÿÿÿÿÿÿÿÿÿþþÿþÿþÿþÿÿÿýþÿþÿÿÿþÿþÿÿÿÿþÿÿÿÿÿÿþþû÷óîèæâÜ×ÎÌÉÈ¿¸¼ÃÈÐÔ×Üàçëîñôõ÷õöõõö÷øøøöøùø÷ôôôôóñòðïííëêéæääáÜÖÒÍÆÇÆÀ¿¸µµ²¾ÎãçææäÝØÜàîôùùùøôóñðñðôöôóîíëëéãʱ–}v’¤—‹‘•”™“•‘ˆvmkt—ž­ÆÐÛÝßÙÊ×çéçæåØÕÞÞÜÝØÓÏ×ØÖÔÒƧ^--"#)B„µÐØáåêîðññðïîëæÒ—_N,%  -    %BI7(5/&  - "( %!&&"'*+!  -  -       -   - - -     -  - -         - -    -   - -   -   - - -  - - - -  -    -  -     -    -  -   - -  -  A]bWD;A61-.6BCID69( 5>:8>7(2.1,"+.($! # 8ŽÕèèÏp - - +‚ÕêìÕ(  C\r‹‘™™›˜˜–‚p@ - 2o—¬µ¹¹¤¥°­££ª¸¿½ºÀÂÀÈÒËÍÈ´¯¸ÅÏØ×Ñ˺«š•ˆ~lazŽˆ‰†~~†—ŽŠ}ˆ…ž×âæèèçèêìëéæèìòôõõõ÷ôïåϽ¯³Æ×ÛÝÞÜÓȺ«›••Ÿª­°¸¾ÅÎÍÐÕ×ÛÝáßãâææèèèêëìëëêëîìîîîííëíîïíëéäâàÛØÐÉÁ¼ÀÃÊÊÊÊÓ×ÚàâêôúýþþþÿÿþÿÿþþÿÿþþþýþÿÿÿÿÿÿÿÿþþþÿþÿÿþÿÿÿÿþÿÿÿÿÿþþþüùõíéæâáâàÜÝßÛÙÚßâáÜÞãëôüþýþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýÿþÿÿþÿÿÿýýþÿÿÿÿþÿÿÿþÿÿþþüüøòêåáÛÓÍÉÆÁÁ»»ÁÂËÑ×ØÝåèìðòõøõ÷øøøøøöö÷÷øø÷õóôôôòññïíìëëêéçääÝÜØÐËËǼº¶®µ¹×èæäãÞàæãêôùùùôóðííîïñõöóïìêééÝĤ‘˜Ÿ—‘’“˜›”yhak…Œ•¢³ÇÔÝààØÌÝèçæéâØÛâÞÚÕÓÑÒÖØÖÖÏÅ«m<%  %8†µÎØáåéëíîîîïìêäИZL)' -   -  - &:;!%94    ! "*" !###-$)'!" -   -   -    -  -      !"6    -      -   -      - " - -   -    -    -  -  - - - -  - -  -  -   -      -  -      - -  - -   -DZ]TJ?21.,2;>CIJ=8-! $<;=345110$#$!**&'!#" I¬ÕáåÄ_  -/ŽÚêêׂ/  E^o”——œœ™“v`E  .r”©¯»¼¥Ÿ²­“§®¶¾»±¸ÅÆÇÖÒÊ̼²¹ÂÌ××ÔÐĬ ’pfo}Š”ƒˆw’—†t{|sŠÏáæèæåèéêêèçèðòóñôõóóëÜÍɽ°ÆØÚÚÉ°©¥žŸ››– §©®µ¿ÇÊÎÓÕØÜÜßáâãéééééêìêêëéííîííîïîîðïïíëæäãßÚ×Ê¿½ÃÆÉÌÍÒÔÚÛàéðøýýþþÿÿÿÿÿÿÿÿÿþÿþÿþþÿþÿÿþþÿþÿÿÿþÿþÿÿÿÿÿÿþþþþÿÿþýü÷ñíìèååäáâããßááÞÛàãâáÞÜßãíõûýþþÿÿÿÿþÿþÿþþÿþþÿÿýþÿþÿÿþÿÿÿÿþýþÿÿÿþÿÿÿþÿÿÿþþýþüùóìãÚÔÏÈÉÇþ¼»ÂÇÏ×ÙÝäéíðóõöööööùõöøöøø÷õ÷÷öôóòòòðïïîíììêéèåàÜØØÔÏÉÄĽ¸®µÑåêçææéëèèôø÷÷ôðîîëïñó÷öóììêéåÓ» Ž’¡˜•™“’””Ž†reho„•®ÄÍØââàÔÒâèæçèÞ×ÛßÛÙÓÏÉÐØØÙÖÐǯyA!!$/w´ËÚÞäéëïñððîíëâÎ_N("    -  - - - -+;+'!     ("$"%"!"!#$!" - +  - -   - -    - -   -  - -   - -  !    -   - - -     - -    ,  -   - -       -    -   - -     - -       - -   ®S -  ;WfYG;;93./@CFI>?82! $782://,.-$*.%*259$   N²ÛßßÙ­G  M¯åêæÅe     -J`z‘–——–•–•ƒiJ %8NtŒ®¶£§š•“–©²Ã¹´¼ÉÍÄÇÔËÏDZ­ºÇÐÚÖÐĶª –e_n„€Œ”“’‹‚ˆ’mhw‰·ØäææéèéëëëèèîóóôõóñîáÏÏßØÑÚÛÜÆ£›Ž’™œžž§¦°·º¿ÄËÏÕ×ÚÛàäâääæèêééêëëîíìîîðïîîñïïîìëæääàÜÓÍÍŵ»ÂÆÉÈÈÏØÚÝãëöýþþþÿÿÿþÿÿÿþþüþþÿþÿþÿÿÿþþÿÿÿÿÿÿÿþÿþÿÿÿÿÿÿþÿÿÿÿþùôîëêèæåçèçèçåèçããæäáãçäàßÛÙÙÙØÞåëõúýÿþÿÿÿÿþþúûÿÿþþýÿþþÿÿÿÿÿÿÿÿþýþÿþÿÿþÿÿÿÿÿÿÿÿÿÿþýûõíåÝÖÍÎÊÄÀÀÇËÃËÔÙÛãêíñóô÷÷÷øøø÷ù÷øö÷øöõøööôóõóóóðïïïëíìèåãâÞßÜÕÓÍÊÆÇÒÕçéæìöøõìëõöôðîîïðòòôôôóëéçåÜÇ®›’Œ™ š˜•–”˜•{ichwŠ¦¼ÌÙÞãÞÖÎßêæäåÜÓÜæáØÖÑÍÄÈÐÙ×ÐÌÆ´zO42(!'1u³ËØÝåéëìíððîëëãÊŽXF& - -    &.+  -  - %&!&)""'%%&     -    -  - -   -   -      -  -  - -   -   -   - -    - -   +:     -   - - -   )   - -DDKG=@=:+ '8:@;494$!##&3.24+  .vÏäåà×­F - J¸åëÓ˜> - -  Jiy–›˜œ–˜˜ŒnG  - -T¡±£ž¬¨š”–ŸŸ¹³£²¿Êº½ÓÍËѽ­´ÀÈÓØÒÌÀ®¡‘„l_k„‚Ž‘‡€~w‚ƒpn‡‘¯×áåæçéëëëëééîòñóôòïëÕÁÛåâÜÚÙÙ㜗œ£ §¯ª¬²¶¼ÂÊÎÓÖ×ÛÝßããæåééêëêìíìëîïîíïððððïíêêæãââÛËÉÎÓžÃÆÉÐÑÓÚÚÞèïøýýÿÿÿÿÿþÿÿýýýþþþÿÿÿþþþÿþÿÿþþÿÿþþÿÿþþÿÿÿÿÿÿþÿþþüöñîéééèæèèèäæèçççääåäâæãâääáÝÚÛÙÙÝÞâêöûýþþþÿÿýúûþÿþþýþÿÿÿÿÿÿÿÿÿÿþýÿÿýþýþÿþþÿÿÿþÿþÿþþþþùóéâÜ×ÓÊÉÅÉÎÎÍÌÐÖÞæëïððóôõöú÷ñøö÷øöøööö÷ö÷ôôóóñððïïîïìêéæååãâÝÚÕÐÏÓÑÉÛëéëõù÷íèíôôïëíîðòóôõñïëçæä׿©œ“’ ™™–˜œ–“Ž€jdsƒ‹”¨ÂÓÛããáÔÊåêæåä×Ê×ÝÖÍÑÒÑÊÊÕÙÑ»±¨—wXGE:' +7q°ÌØÛâçééìïîïìêâƆ\E#    -  #',%" - -  "!#-/ $("$$ #)%     -  - -       -   - - -  -  -  - - -  -     -      -   -      -  -     -OL      - -  -    < -  ->X_WMA@7,776BHIDBB:6/ /8:;97,*$"%'-"4A:&  -  A ßêèÝÑ™<  U¿åé¿h*      L`v“—“›™—›œ—„jJ  - 7¨¤›«º¢““™°¤w}š¼³µÉÐÉÑ˸°ºÀÊ×ÖËÅ´ª™–”„ed{ƒŠˆŠ‡‚pt‡zŽš‘¦ÑàååçéëêëëåãëîðòòðìèÑÀÚäåàÛÚ̶© Ÿ£¤¥¨¯¯³¶À¾ÄÈÍ×ÙÚÛÞâãåææêéëìììííîíîîïïïðñðíêéçåæãàÓÈÐÓÔËÄ¿ÊÐÕÚÚÞäëòøûüýýÿÿþÿÿÿþýýþÿÿÿÿþÿþÿþÿÿÿÿÿýþÿþÿÿÿþþÿÿÿÿþýþþüøñíêêëêêçæéêêçæççèäáäæãåçããåçæâÝÚÜÚÛÜÙÜåð÷ûýÿÿþýûûþÿÿÿþþÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿþþþüüþÿþþÿÿþÿÿÿÿþý÷ñæàÙÔÎÊÎÔÒÔÑÐÒÝßáêìïñòôøø÷øööø÷øöø÷÷öôõõõôóòóòñðïðîìêêèèåãäÞÚ××ÕÌÀÏæéèöú÷ìæêóòíééïñõõôòñíêåæâѺ¨š’––”ŽŽ™•”“kfawŒŽ–¯É×ßååÜÑÐçêççÞÎÆÑ͹¹ËÓÓÊÇÒÔÅ’sYTK804/%%",l¬ËÕÛãèéêíîîìëéãÆ€TF% -   (+# "     +',--")*"%!+$    -   -     - - -     - -   -     -     -     -    - -     - -   - -  -  -    -  - - -   - - -   -   - -HYZLF8@B/26A=:-/# /0+4@<1  O¸æíéѦ`  -  "aÉçç¶X   Mc‘’”–˜˜š›•‚k@#  (nŸŸª¯—~š¤¯´|Ysš¹¶ÄÔÍÑÖƯ¯¿ÇÒÖÐʾ³¥œ—…h\h…Œˆ…‚sq•Š›•œÆÝåççéêëíëåäéîñóòîëçÕÃÑããÝÜÖ¿¯¯§¦ªª®±µ¹¸º¾ÁÈËÑØÖÜÜßäâäéééêíìîííîïîîððñïððíèæäääæáÙÏÐÛÚÖÓÏÓ××Ûáåìðõ÷ùùûýüýþþþýüýÿþÿÿÿþÿÿÿÿþÿþÿþþÿþþÿÿÿÿÿÿþþÿÿþþú÷ôðìëééîëëêåååéììêèéíëééìêëéåãçéæçæäååãâÞÝÞÛáêïôúùöïøþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþþýþþÿÿÿÿÿÿþÿÿÿþþýøóêâÜÖ××ÚÚÓÑÑÚßáåæêìðòõöùöö÷ùùù÷ø÷øõ÷øööôõõóòññðïððíîíìëéêæâßÝÛÍÁÐÞççñøòæãîõôïéêðñôõôóððìéæÝÇ´§’–š“ŠŠ‘’˜“‰ynlq‰Š›»ÎÜâåã×ÎÛêéçæÖÃÐצ¶ËÏÈÄÂËÔ·e5-.'"!e¬ÄÓÚáæééëîïíêéß¿~M9(    (5- !%   "(#$+%&##& "  - - -   - -  -  -       - -           -  -  -  -  - -   - -       -     ) -  - CTaWH?A@629=?EGGFDB?80+'% #DCGC4($*;>09DH8)   UºæìêÇv4 'lÍçå´S     Jf|’‘›šž ˜‘ˆd@  - 5`•¡—Ÿ±˜v~¢°©³ˆr†šÆ¼½ÒÔÍÕϸ¦¼¿ÍÖÑËÁµ©˜•’sXfw†‰‡ƒ|m„ŽŒ™š•¸ØãçèèëêîîèçîððóððîçÛÈÌÝàÛÜÊ®©±«ª«³¶¶¼À¼ÀÄÆÉÊÒ×ÚÛÞããæçêéëëëìïðïîíïòðïñïïîèæåâèæäáÚÐÏÛÜÚÛÝÝØÙäêñöøùúúùùúûûüüüýüþÿÿÿÿÿÿÿÿþþÿÿÿþþþþþþÿþÿÿÿþþýþþû÷òíìêêìëêïîïêèååêïîðïïññìîñòññççêêéèéêëêèéããâÛÛÛÝàååáá÷ÿÿþþþþÿÿÿÿÿÿÿþÿþþÿþþÿÿþÿþÿÿÿþþþÿÿÿÿþþþþÿþþýýúòåÞÞÜÝÜÓÒÔÙÜÞàáâæëîòôøø÷ôøøøøø÷õöô÷øøöööòñòòðððñðððïîíêëæãåÝÍÈÒÖáèïñìååóùùòììïòôõóòðîëêå×Á¬œš–—“Ž‘†umhw‡Œ ÀÓàääàÒÏáéåçàÒÈÙÞϵ¶ÌÌÄ»¿ÐÔ­U+!&"!&`¥ÀÐØßççèììíìêéݼvQ?,  -  -   %;*  5+% 8   #'./)+!%&#     -  -  - -      -   - -    - -   -  -  - -    - -  - - - - - -   - - -  - - )?   -@S\WBD>=442>JED>DDIB0,)/3 2EHE0$"0CFE=FKD/  - - SµáêçÅw) %qÎâà²U$  Fd|›š›˜™ ™–†oC  -!+5_¤›±¬—‰–¦šžˆ|™¯ÑɺÍÕÊÖÔ¾ª¸ÁÎÖÑÍ»ªš“ƒjag††…‘”Œˆ~jpœ˜’˜¡›¬ÓßãèçêìîîëìðñòóñòñëäÏÃÕÜÝÚ¾¬¥­«­¯µ¼½¼¿ÂÃÅÌÍÐÕÚÜÝßäâæèéëìêìíîðñïðïïïððïîêäååæåääáÜÔÑÛÜÜÛÚÜÜäîôøùúûûüûùøøúýýþþþÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿþýýûöñîëêêêêìïðïïïëêèçëïïóôóóòíðôöõñîëëêèëëìîîíëèèèåáÜÚÖÔÓÖÛóýþþÿÿþþÿÿÿþÿÿþÿÿÿÿþÿÿÿþÿÿÿþÿÿþýýÿÿÿÿÿÿþÿÿþþýþüóéãàÝÚÙÖÕÙÜÜßßáãçìòôõõõö÷÷ø÷÷÷öõ÷õõ÷÷öôõòóóñòñòððñðïïíééèèÞÎÍÓÎÛçïîèàæôùú÷îíðñõòòñðîêêåÖº¬ž–’›˜““”˜‰„qnkƒ‰‘«ÇÚáããÚÑ×æéæèÝÑÑáæÙµÇÉ¿¼ÃÍÍ¡L'$RŸÁÏÙÝäçèêìíììèÚ¹yJ8!  -    +2(,* -   $-)*+0  ##(!$%    -' - - -  - -  -  -   -    - - -       - -    -  -  - - >F  - -  %AUXM=375*,2?>GFIDB>;21150% *KC3))2.@JH=>HIC@@>713=13"7A3./4,EID?@OLG>)    `¸ÕÜÖ²m' -‚ÕÛÈ l- -   M`|—˜™š›Ÿžš—ŠlE   "78@DsŸ™¢¶»¯‹x’™œš ºÓÝÜÊÂÓÓÌÖѵ¥±ÅÓÖÓÊÁ·¯ ’”sgkx……ŽŒ†…}vjœœž¡š¼ØâåæêëîíëïðñôóööôðêÙÆÍÚÙÊ·±«´º¸»ÀÆÃÇËËÌÉÐÔ×ÖÙÜÞâãäççéêëëîïïïðñðîïîîîéåãáãäåååãäàØÓÜÞßàèîó÷úúúúýüúùùûþþþÿÿÿÿþþþÿþÿÿÿÿÿÿþÿþÿÿÿþÿÿþþýþþüøóïíçêèëíðððòòðòïïëêêíîòôø÷ù÷ñðñõøùø÷ôñìêëíîïòòóòïïíêèâÞßÚØÕÙæòúüþÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿþýûûýþÿÿÿþÿÿþÿÿþýüüòëåßÛÙÜÜÝÜÜÚØÝÝåìðñóõ÷÷÷õ÷øøùøøø÷øöôôóõôõõôðññððððîíëëèÙÍÑÌ¿½ÖìéáäïùûûùôîïóóòððïëçåÜÇ·¦‰”“–‘’–Ž…yeer„•£»ÎÝääßÑÎãêçéâÔÐâìëçÚÍɽµª¶Åº?=,7!B+&!-B’¼ËØÞäççéëëêëèØ´rO: -     #  +)"#$    -!!$%&+""!($# ! (!$$#$! ("  - - (          -  - >‡ - - -  - - -  -  - - - -  -   -  - - -       - - 1KZ^Q<52(,+,@=BKFFLFA1-47<:-"4;*,.+GPGHKGPMB8$  -  -!mºÑÙÈ£U  -_¸Ç¶šx0  Nb{”–ž¡ŸŸž–‘‹pJ#  - *=A:Ah—Ÿž°·©‚r“œ²·½Õßà×ÀÌ×ËÑϾ¦«ÀÕÔÔ͸±¥–‘wm^yy…‡†ˆ€|{n}¤£—ŸŸ“¯ÑÝâæêíïîëîñòóñó÷õòíáÌÅØØôµµ´ºÀÀÅÈÄÉËËÑÒÒÖÚÙÙÛÝâæèææêëëíïïïñññîïïìêççäâàÜãåããäâáÜÖÜâæêòùùúùùûúûúùúýþþþÿÿÿÿÿþÿþþÿþþþþÿÿÿþþþÿÿÿÿÿýüûúôðìíêëèéìîïñóóõôóòðìêéìñðôöøøø÷ôðò÷ùùøùøñîëëêëñòóôõôôñïíéåãÞÛÜÙÚàìóúüÿÿÿþþþþþÿÿÿÿÿÿþÿÿþþÿþÿÿþþýýþþÿÿÿÿþÿÿþÿþÿþÿþý÷îåáßÞàÞÝÜÕÊÏ×àéìðññó÷ö÷ø÷øøùøøööööóöõóóôòóóòðïðïïïììçÕÌÓͽµÌéëæêôùûüü÷ïíðóñññìêçäÖ½¯£Ž‚•““”‘”’’€jdj‚’’›§¾Ñáåâ×ÇØæéççàÓÖæîîèàÝÓ¿¨±½¤f0'& -B¶ÈÖßáæçéëêêêç×°lL8    -$  (5'#  -  - - $%'-)*($/$ $ !(!"!     - - -  @   -;     - -   - - - -  -     - - -   -  - -      - %N^aYA24)$)(@BEEHHGLC6527D@1. ,&%#/;MB?QGGHF:!  -  - - $}·ÉÖÇŸS ;…¨ªš‚E )Qhz‘œš žŸ¡ ™Šv@$  29C=5\›ž ¬¶¤Š|Œ“©½ÁÈÚááÝÃÅÕÎÍÓŬªºÏÖÕÍù®¦š“‡m]k{‚‹Œ„„~{‡¥¦ž  ’˜ÄÞãæéëïïìíïñðòôôôôïæÕÊØ×¼°¶½«µÂÂÆËËËÍÏÒÖÔ×ØÙÙÞßáæééèêìììîïðððñîîíëçãââÜÕÒáéçäãæããàáèïöúúúúúùøùøýüýþþÿÿÿÿÿþþÿÿÿÿþÿÿþþÿÿÿÿÿÿþþÿþýûòðíêéêêêëëíðððòõõõõöóðîêêìïô÷øùøøøõðñøøùùøùóðîêéëðóöõö÷÷óóòîëèäãâÝÚØÞãêòùýþýþþÿÿÿÿþÿÿþÿÿÿÿþÿþÿÿÿþþÿÿÿþÿÿÿþþÿÿÿÿÿÿÿþýþúóìæãâäßÝÔÇÈÍÚâèííñôöõ÷ø÷øøøøøõõôöõõóóôóñôòòðððððïïíå×Ó×ǹµÀåîîðøûüüüùñíðòòðïéèçÞ̳§Ž‹“–”Ž“•Œ‚ghkƒ’™¬ÁÚäåÞÓÏÜëèçæÚÎÜêîðìåÞÖƱ¦´°”Y-)*%7†¶ÉÖÜâåæééëêèäÒªiM* - -  - )3+   %!")-!'%%'*%#$""#)            J  - - - - -   - - -  & - -   - -  - - -   -        &E`\PD=8.$17GGCIGKQD9148A29%0>CEIMFKOIA74:AIHAG0"%2DJLJ@BMC=,  -! -.x¥³ÀÁœV$cš¬¤—X    Nd|šœ ¤ŸŸž”•‘kH% - ::4F=Kˆžž¬ª™£¶©¦¡³ÀÊØàäåÔ¶ÉØÈÈÕŪ­ÁÎ×Ô̾·« œ“{fZn’““Œ…|ƒ…šº¬™ž‹ŸÔÝãèëìêçãêïðïñóõõñëååßÊ·°³³µ²ÄËËÑÑÒÕ×ÙÚÛÛÜÛÜââçæçéêìîíïîðððïîîêéåâáÜÕÌÈÐÜæçêêêëîðõùûüûûùöøúýþþþÿÿÿÿÿþÿþÿþþÿÿþÿÿÿÿÿþÿÿÿþÿÿþþþüöìåçèçèëìïðòòòòõ÷÷÷øù÷ôóïîíëíñ÷øøøõõóñóö÷ùùùúõïêëìíðõ÷øøøùù÷÷õñðîéëéåãáßÜÜáãëóûýýýþþÿþÿÿþÿÿþÿþÿÿÿþþýþþÿÿÿÿþÿÿþþþÿÿÿÿÿÿÿýþýùîêååâÚÑÉÅÇÎ×àæíðóôõùö÷÷÷õóõöôñôóññóòñòððññðïíëëéÜÔ×Ѿ²¯¼äõõ÷úüüûûøñíìîðïëêçãÔÀ¯¢š“”‘Ž’‰xdhw™©¿ÓàåáÚÄÓäæçêÞÎÙéíïðìáÚÎËÉÂÁ¡g3'",-2u§ÇÓÜââæééèéêäÏž[?!  -   */*""  %%%"##46'(*,-(!(!"! !-%,*  -  % - -   -   -  08  -    - -! -    -      -      - - - -  -  - - -z?  - )IY[Q>60*)*/49DHIHNKE:89?IGHEI@' 0''FTJLIGJKB5  &#2w¥ª¬§Y   bŸ­©e! -    #Pdƒ¡¢¥¥£¡š‹h? #IG=C@Ns›£«®¾±¤™¥²·ÎÞâäÞÁÁÒÐÇÓе«»ÉÓÔÍû¬˜‘ƒi_iˆ‘”ˆ„Š”³³—’—’˜ÁÙÞéêëìèåêìììëèðóòìééÜǽ³¯¼½»ÊÐÏÓÖÕÙÛÚÜÝÜÝÞàáãççèêêëîðïïððððîëéåáàÛÕÒÓÒÒÜæèêëëîòøýûûúúùùúüýÿÿþÿÿþÿþÿÿÿÿþÿþÿÿþÿÿÿÿÿþÿþþþþýûùõðëççæêêëðñòòôôööõùùùùùù÷ñïïííñó÷ö÷õóñðíïóòöùøúôðíëìîòöùøùùúùøùøöôóññìëéèåäàÞáâäéñöûýýþþÿÿÿþþÿÿÿþþþÿýþÿþÿþÿÿÿÿÿÿþÿÿÿÿÿþÿÿþþþüøïëèâÚÓÑÐÌÉÍÙÞçìñòôö÷öõóôóóóôõôòòóòññððññððïîëëãÓÎÖ;¶´Åêøùùúûú÷öøóíìíïìêèçÞË·©¡–˜•“‰‰‡€nad~‘• ±ÃÕàâÞÏÉÜéëæçØÐàëîíìäÛÔÉÂÂĺŠS85(,8+"*e¥¾ÒÝàâäåçççæâÌ“UC"    "  !.,#     !#$"#-/&'-+$+' !+$"  -)0+   -       - -   - - -  - - - -7       -  -  -  -   - - - -  - -  - -            - -   )BNZQ<:0/+$/0;HGLWWKIA:BINMNNUH8-"-/1MSIHHBHB?,  % )$  -KŒ¡ –…wC  -V›¬®œo)  )Uc†¡Ÿ§¢¢¢¡ž™€Y?  ,SNGEAHZŒ ¦¸¨°Â¯ ž¨ ¼×ÞâáÒºÆÑËÑÕï´ÃÒØÓËÀµ©›–Žt\_z‘—™’‹‰ŒŽž²›š™”¨ÐßèèéêãäééèêâÖåòðìëçÖÆƺ°¿ÃÀÄÐÔÚÚØÚÛÙÜÝÜßãäãäèèêìëëííìðððïïîéäáßÖÊÐÚÞÛÖØçéëìíóøùûúùùûýýýÿÿÿÿÿþÿÿÿþþÿÿþÿþþÿÿÿÿÿÿÿÿýüþÿüúôîíëçèèêêêîïñòôôõöùùúøúúúùùøôîëìïóóóôñðìèçæèééîô÷õòïðëèíóùøøùùúùùøùø÷ø÷÷òïíííêèäãâàÝÜâåíöüþþÿþþþÿÿÿýÿÿþýþþþÿÿÿÿÿþÿÿÿÿÿÿþþþýþÿþþþüõíèãÚ×ÖÓ×ÍÃÇÒÝäëðñôõôòóõóóôóôðóôñññðððîîñðïëêç×ÇÍÑŹ´¹ÖðöúùùúøòïõôðîîîëççåÙ¿­¥œ•˜¢’Œ‘“‡ƒ‚rj`s’š¦»ËÛàÜ×ÆÒåêèëäÔÙæëæââÛÑÍÄ¿ÆÆ«kB>+:AVC(!(R ÃÒÜÝãâáäåèçßÊŒWB  - )" '-3( -    #$0$&%!#!+**&)$$*!%*--   - (/$   -   - -      -       - - - - -  -  -    -        -     -    -     - -     -    2GYTI6322*,797BJOSSND:DFKONLVMJ<0"-3&2HIGGAC@C1$  !%" j–•‚l; B«°žn1 "MfŸ¢£ž ¤žž˜‚V9 - 1V\NIMENw¢£´§´Æ·¡Œ ¤™³ËÕÞß×¼¾ÕÒÌØ̶¯¼ËÖÔÊƽ±Ÿ›~``q••œ•ŠƒŒŒ“±£—¡›ÆÜäçêæÝÜáççæÞÏßïññíæÜÍŹ²¹ÁþÐÔÔÚÚÚÜÛÛÛáâäâäçççêéëíéëîîððîìëæÞÝØÎÇÒÜÞÝÚÜäëìðõøù÷÷øüýýþþýÿþþÿÿÿÿÿÿÿÿÿÿÿÿþüþÿýþÿýýÿýùýùóìêéèéèêêêììïðñòôö÷÷ùùùøùúùùùøôïìíïîðñòòíéééçèêèìñóòïîíìéíô÷÷øúùùøøùùøùøöøôõòñïîîéèèäáÜÙÙÚãíôûýþýÿþþÿþÿþþÿÿÿÿÿÿÿÿÿþÿÿÿÿþÿÿþþþýýüýþûõðïêßÖÔ×ÔȺ½ÅÕÞäëïóðñôõõôôõóóññññòððñïîððïíëèâÑÇËɼ¸²ÄàöùùùúøòìêòõñïïìéåçåÓ¹ª¥—‘–£›ŒŒ‡‡Œ‰~njl‚Š–Ÿ°ÄÑÜÞÛÏÄØçêêìßÐáéèàÖÚÖÏ;¹Æ¼—c<55:QqY- %R—»ÏÚààáãääåå݉R:$ -  2! "72+%  - ()%$#$)/1$,*#"'#"!&/.% - #%$         -  - -  -     -       -      - -  -  - - -  -  - -     - -  - -  - -   -   -  - -  -  -   0GJSK;35)(,4:BJNLVWUNC@HEUIKVVK=6.,-/2#;Q>CFECC5(  )%!  .˜˜’„xM 0†¯°¥m/   -  - - -D\˜£¢š£ Ÿ–‚P8 4\cOJLEHl—£¯¦¯Â³Œž¦›­»Ã×ßÜȸÎÖÍÔÖ½ª¼ÇÑ×ËÆ¿´¡¢œŽn^h|‡—Œ”‰Š‡§¤‘¡š”´ØäæèäÚÖØÜâåÙÊÖéññíèÞÒÇ»°¶ÀÁ¿ÍÓÕÙÛÙÛÛÝÞâääåçèéêçéêëéíìîïîìëçßÛÙÎÆÇÔÜäàÚÜæêðõõöö÷ûýþÿÿþþþþþÿÿþÿÿÿÿÿÿÿÿÿÿþýþþþýÿþþýüùôìéçèçêééêêìîðòòóóöøùøùùùúúø÷öööôñïîìììðññðíííééìëîððïêçéëìïòóóòõôôøøùùùøùø÷÷øõòòñðñïëêæßÜÝÖÔÜãëöüýýýýþþÿÿÿÿÿÿÿÿÿÿþÿþÿÿþþÿÿþÿþþþþýýý÷ò÷øóéÜÕØÓÅ¿ÀÀÉÖßäëñòòôôòóôõóôôðñññððïïíïïíîíèß̽µ¹µÆéùùùùúõìåäð÷òðíëééæä϶¢ž•Ž˜¢™ŽˆŒ‹‹Žunjw‡“¢´ËÖÝÞÖÈÉàèéìêÚÒäëèÜÐÔÑÈÌÀ»Ç±„WC94?FCBA4  -%1/& ;œš–Šžh +¯² q2 - #N]ƒ›œ©¢ § Ÿ˜†c? 4hkYGOLIY‡¬­›Œ«°œ‡¥˜±¸µÉÝáÓ¸ÇØÐÐÕÇ©²ÄÏÕÑÈÁ´¡›ž”Zdp†‘‘Œ…‚€…—¥’’—ˆ¢ÖãçèåÜÚÕÓßàÓÊÔâïñíçßÐǽ²µ¼ÂÄÆÐØÙÚÜÜÞßáãååçæèéêèêéëêîìëëíëåâÝÕÎÅÄÆÏÞåáÛÝèîóôòðóüÿÿþÿÿÿýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþýýýþü÷ñíèæçéééêêêìïðñïóôöõö÷øùùù÷÷ôóñðïññððïííêðòòñîïìæèíïñòðíèäæëíîïîðîíîðô÷øùùùùø÷øø÷öõôóñòñîìéçãÞÙÙÚÛâëòùþþýýþÿÿÿþÿÿÿÿÿÿÿÿþýÿþþÿþþÿÿÿþþþþùõúûùïãØÓÓ̼¼»ÅÓÞèìïñóóôóòòóóóòòòñððïïïìîíëéåÙÄ¿ºµµ¹¸Ðî÷÷óø÷ðçãâíùôðíëèêêãÊ·¤›“ ’ŽŒƒŠullƒŽ”«»ÊÙÝÜÐÃÐåéçêçÓÚåëéÝÎÍÒÊʽÀ½¡lHD7GYƒ€B&$Bˆ¹Ë×ÛáãâáäæâÚ¾vH;    -*( -0-"   !$ "#!)5-"-,*)" #$!#     - -   - -    &;<=02"#'0*.1#"#!               - -     -         -     -      1HUPOCA<966ACBGUT_^XTE@FJOLCHUWE??93643/FD;FE<42( "6;) \®¬›ž—©²x r¬°£8 - !I`€œŸ©¢£¤žž—‚m@!:mmdQNRFX€£¯˜Žªœ†Ÿ¨”°º´¿ÚáÚ¿ÔÔÑÖÏ´±¿ÌÑÑÍȺ¡œž”~e\g‡Œ‘Œƒ„|‡£›‘”••£ÈÝåçåÝÚ×ÚÝÜÏÉÒÞîñìçá×ÌÀ³±µÂ¿ÎÕ×ÛÜÜÜßâãáäèççéèêêêëíííìééçâÞÙÈÄÀÂÇÏßãàßãêðòôôóøýþÿþÿÿÿþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýþþþýùõñìèèçæèêëìíìíîððôôôôöùõøøùøöôòðñîêëíðñðîìëêîðððíïëåêïïñðòïèåæëîîëëééèèìñó÷úùùùøøøùúù÷öóôóóñðììæáÞÜÛØÖÙàêòöøúþÿÿþþÿÿÿÿýÿþÿÿþþþþþþÿÿÿÿÿþþþüûúýúôìÜÕÔÎÿ»»»Ê×áëíïñòóôññóòòòñðñðððîïëëëêéãÔÁ¸µ´´¶ÂÛòùöîòôïåâåíöõñìèèêêãÄ®¥œ™˜Ž‘†‰}ndk…ŒªÂÏÙÙÖÆ»×æêçëáÒÝêëæÜÐÐÑÎξ¿±‹VDD>Mf”¦„E&$>z´Æ×ÝßàáãâãáÚ¹{L3"  - - "0& -/0#"#   !$#,,0)$#,#',36.0*#!))      -     '(     -'665*&#/EJHE<4(21584*'$&"(+#!%$%         - -    - -    - -  - -  -        -    - -  -  - -   - -6RUQLKB<528CCDHRSY^ZXGFPIMJBJLNE=@=-<>8#7=DBFA;4* -  >8#)²²¡œ¯¾†  V¤®¤x2    Hjƒšœ£¥§¥Ÿž˜ŠmE Av|d]YMKPh–°«¦ ¡˜u±¢©³´¶ÒáÞϽÎ×ÏÔÒ»¬ºÆÍÓÐÆÁ®¥œ—qa[rŒ„…‚œ¨”‹–š¶×ãèäÜÝáåãÜÏÐÔÜìíëèäÝÎù¬±Á¼¶ÇÔÚÜÞÞÞßãâãåäæèèéêëëêêììééèãàÚÏÂÀÅÉÏ×ßàßæëðôùûûüûþÿÿþÿÿÿÿÿÿÿÿÿÿþþÿÿÿÿþÿÿþþýø÷øóíêæçèééëìíîïððñòñóóôô÷÷øùøøùùõõòððïîîèêïðìéèéêìíììðíééðñððïîêææêïíêìëêéêëîñöùùùùùùùùùùøøøøöööóòîëçæäáÜÙØØÙÝáæóýÿÿÿÿþÿÿÿþþþÿÿþýþþÿÿÿÿþþþþýýþýýüûõëãÛ×ÒÆÃÁ½º¿ÉØäéíðñòóòóòóñòññððððîëëêêéåÞѽµµ­¬´ÆßõöóëìðèÞàëîö÷ñìéèêéÙº¯¨™”—Ž’’ŽŒ‰wf\lƒ‘•ž±ÊØÙÒȾÆÝèèèêÜÖäëéäÝÔÐÎÒÕƾ¥tOC=GL€¨±ŒX/ &7v¯ÆÔÜÝÜÞàááàÚ¹mL5 - -  - -&'  */+"  -  - "#,,'&!$,-(%,,.-.0--%#(   -   -  1""*54# 2:2.(':BAE>#+>5-+:>=BDTWR\[UGEGPTOPNFLG28?1:>2)'(#*79AGC85.  6E: (ƒ²®££§¯º“/ -Kž¯¤|4   Jgš¢§©¢ ž™–…mJ - H}vh_[SLKR}­´»¸Ÿ’r›¹²¨¥§²ÎàßÓÁÅÕÑÑÖÄ°°¿ÊÏÐÊÄ·ª˜•~[Sg…ˆ’’‡‚{€x•«—Œ—œ¨ÊßåãÛàèèâ×Î×ÕÚçêèçæßÑȽ®±½½¶ÅÐØÛÚÝÝßããäæèçééééêêêéëëèæåâÞÓÅ¿ÈÌÌÖÝäåéîöùûýþþýýþÿÿÿÿÿÿÿÿýýÿÿÿÿÿÿÿÿÿÿþÿÿþúðèççäæäæçêêîîðððññôóôóô÷öøø÷ùøùùøùôïïòôôòïîñòðìééèåéêìëìåèïïîíììêçæíîìëïîíïðíëðöøøøùùúùúùùù÷ùùø÷ø÷õòñíêéäãßÛØÔÖÖØä÷üþÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿÿÿÿÿÿþþþüùîèãÙÖÑÉÅÀ¾¸¼ÌÜäêìðòôññóòôðòððííîìëêêæãÞØǶµ®ª­´ÈåôôðæèëâÜäíî÷öóëèééåÏ´­Ÿ•’™ŽŽ“ŒŠ~skes‰™œ ¸ÎÚÞѽ¹ÍåèèèãÕÕçëèãÛÓÊÑÛÙ˸–mM<;Adšµ¶™]+"",o¬ÆÒÚÜÝÜßáåßÚµlR< - -    *% $49)"%  - $./+ &.3*-.))'-'$ !$ '%!&  -    $(63(16537:DB@9/-$ 7<&U”¨Ÿ¦³´¼œ;=”®©9 "  - Mhz–ž¤¬¢¢¢Žƒh@ B|r\\XOQIY˜·ÄÉ«q«¶ª”›­ÍßÞ׿ÎÕÏÕ϶«¹ÆÎÑÏǽ´Ÿ˜zdW^’Œ’ŽtŒªš–“š•œ¿ÙååÝßççãÕÏÛÙÖÜàäæèâ×Ê¿¸´º¼ÂÁÎ×ØÙÛÛÝßâãäæææééèêééëëéæãßß×ÈÀÉÏÒÕÝáçìñúûýýþþþýþýþþýþÿÿÿÿþþþÿþÿÿþþýýýþþÿúñèâààäçæêêîîññññòòõöõôöööøøøøøøúùùøóíîïóõöôòðòñîèêêçææèéèàãëíìêêèêéëïïîíðïñòðîìðõ÷øùúùùùúøùøùùøøøùøøõóòïëêéåáßÖÙÖÔ×ãòúýÿþþÿÿÿÿÿþþÿÿþÿþþþþÿÿÿþÿþÿÿþþýýùôîéàÜÑÏÌƽ¼ÂÏÛæêîïñññòñòðñòðïîìéééçãßÙÏ¿¬®©§¯¶ÉçõòéÝàëãßéðòõ÷òíéêéã̳¥£“•’‰‹‘’Œ†zmazŽ˜›«ÁÔÜÝÒ»¹ÖéææçÞÑÛêìæÝÕÊÆÔÙÒÈ°{MPC;N¯Á½™^3'/vªÇÓ×ÛÝÛáâáãØ®pW;   +%*6,"$! - -  ##(7.%!$/*++%$%!'!%(!  -     - $*"(=JUPPC=FNQ\K;AT`a]U>7G_^`^L;>=9@@?3(+<8+1>=@@>5-$ -#94  &T‹ ¬¼ÃÄ¡C  -±¢ŠA    - Kj{–ž¡¦¦¤¤›‘ze@ -Hƒ‰‚gYLKKJSˆ´Èѳ–y‘¯µ•Ž£ÁÙÝÚÉÀÆÔÒÒÔ½­°¿ÉÌÎÌ¿¶¨Ÿ”†p_ew‘“Š‰‚x{¡£™’–œ™¯ÑãäÛÙÛÝÞÍÍÛÙÒÔÙÞäèåÚÉø²³ÆÄÀÐØ×ØØ×Üßããäæåéêêêééêêèåâáß×ÊÅÉÑÖÛâæíòøûþþþþþÿþÿþÿÿÿÿÿÿþþÿþýþÿÿÿÿÿþþþýýüöïèâàæççééìîîñòóóôôöö÷ööööö÷øøùùøùùù÷õðìîòõöôòññòòìêêçäæèèäßßèéçäçèéëîñòñíîññïñðíðõõõøùúùúûúùùùùùúùùùøöõóòñðíêçäâÝÞ×ØÛáêðöûýÿÿþÿÿÿþÿÿÿÿÿþþÿÿÿþÿÿÿþÿÿþþýýýûøôîåÞÒÈÂÀ¼ÈÔÞçìíîñðñññòðïðîìëêèæåßÛÒÆ»²«§¤«·ÌæñïáÐÛëæäêððô÷ðëéêé߬¤žš›™‘Š‹‘–Œyhcjˆ‘’ªºÉØßàÕ»ÁàèæèçÙÐãììá×ÎÅÍÒÔÍ¿ lFFLGa¼Çìd1'#6|­ÅÐÙÛÜßáßáàØ®mT="   $4*$ ,2+$&!# - - -    #$$&+8/'!*-*+&$#""*$&(%    - -  -  !($$<0%-?N\\YI9;NW_ZOEVhgi_M?GWfh\YNHV]Zad7    !9KS[]`W>!+@JPTG?56643<84.'*+$" '%1,$  - -   #  -   - -  -  - -  -  - -    - "%#" $*1+ " #! ##&$!$ '  -  3DMQD>943-8CILJPKYW[XHIBMKLHGG?4@<,   ")9;"M„©¾ÅÅ£? 'r­§ŒK -   Aax›£ §ª§£˜š‚e@! Q’Š|pOGks“²ËÑ·²«œŠš¸®– ¿ØÞÝÚÿÐÓÎÕ˵ª¶¿ÎÓÍ¿º«ŸŸƒdao†‹‘‰„„z”´¤˜— œ¥ÄáßÙÏÂÏ×ÄÃÙØÓÒ×ØßæêâÏÈ¿°°ÆÅÂÌÒÕÕÖ×ÚáääæèèêêëêêêéçäâàÛÒÇÀÈÎÒÚåîõûþþýþÿÿþþÿÿþþþÿÿÿÿýýþþÿýþþÿÿÿþÿýýûôîèäââæëééëìðñòòóöôöøù÷ø÷øùøøøùøùúú÷õõôôóñðñòòòððòóóòïëçæéêéäÝàéëêæåéìïòôõñðëïòòððîòññïòö÷ùúùúùùùùøúûùûúúøõööóððíéèæåàáàÝÜÜãçðõüþþýÿÿÿÿÿÿÿÿÿÿþÿþþÿÿÿÿÿþýýüýýýüûùíßÏÆÁ½¶ÃÔÜåéííîïïññññïìëêéèâÝÚÙÎÁµ²¥™œ©¶ÑèîåÕÃÑèéêððïðòïêèêåÒ·¥¡–•¤›‰Ž’‰}qdeoˆ‘›«ÄÑÞáÝÓÄÏâæäëßÐÔçïëæÞÙÖȱÊ¿­cJIP|¶ÇÉƪi7*' B~±ÁÏÙØÙÜáÝÞÞרkM< -&3-.2+%'!    ! *#&(83,+ #+.1*(-!"!'$        -    -2?@=5>W]bdY89KdaaXMRbjflWIGVcqjfWPS\gd^J  -  - - 1AH[\]^H2"97CMPB<850'95/,+)(!&#(*%%!!    -)       - -   - -  -  - -  - - - %*#!"$(!!  %00)*&$%' % (!#"! #' 4  -   >38<9>=G7(7CL>&'>F>9<+&-# 2;1 *]·ÃÀ£> d¨ªŒL   Idw—›¢§¨¦Ÿ˜—‚j:# U–Œ€`h™©Ÿž³ÊÓ¸¯»µ˜­­£¥»ÕßÞßξÉÕÎÔϹª²½ÊÓÎú¯¥¦ nZgŒ‰‚…‰„“®¬–ž§Ÿ¸ÛÜÕÊÁÐÑÁ¼ÒÙÔÛÛ×ÝåêæÖÍÅ·¹ÆÎÂÁÎÏÔÙØÚÜáâååæèêéèëèéçáâÜÖȽ¿ÍÒÔâêõüýýþþþþþþÿÿþÿþýþþþþýþýÿÿþþþþþÿÿþüõðêæäääåçëëìíîñóóôõöõ÷øõøùù÷ùøøøùúùúøùõóòòôòðîïïïìîóñóóñëëêéêçåßßåêêëêêîðôõöóîèíðïíìíðïðïðôöøùúùúûúùúùùúüûùùøõöôóóòðíêéèçåãßÞÝÞáâêöüýþþÿÿÿÿÿÿþÿþÿÿþÿþÿÿÿÿþýýþýýýüüøîàÓÍĶ¸ÇÔÞçèììîïïïïïîëêèçåâÝÛØÐÁ°®ª£ ­½×ççÜ̽Òçééîîìíñíêëêàʵ¢™”¤™Šˆ‹…‰‡l`c€‘ž³ÇÕÜáÝϾÑââåèÝÌ×êîìæÝßÛʱÃÀÅƼ †ub–ÂÌÏ̯l0&! E³¿ÐÕØÛÝßàÝÞÕ¨eT6    - "3* --$ %$#   - $$+/(&*..- $/-+('**"-$ - - -   - -   -  -  -=@6/8Shii_?>*"(& %-1/,)      -  -   -  -       -    - - -     '+&$%)-#")*-11*%$-("%$#!$"!%&!".)%  (  -     ?PTNK510(/9;HOQNSQQWROIDPLKLEEB=0====D=(*@JK4,??;510(! '37 1€­¾¸‘3 Q£©N     G[v“˜¡©¦¥ œ•‰mD  U˜””Š{{Ÿ¯©¢´ÌÔ½¯·°™Žž¥¥œ®ÎÝàÞØÂÀÓÓÓÑŶ«¸ÄÐÐË¿³ª “b`o‰‘‹…‡ƒ„ˆž­›‘ž ¬ÓÞÑÈÄÌ;½ÊÓØßßÚÝäêèÔÊƹ¼Æ̼ËËÏÖÖØÞÞáåæèèéçèèèçæäàØËÀÃÅÒÛãíõüýþýÿþÿýþÿÿþÿÿÿþýýýþÿþýýÿýýþýýþýøñéççåçèçæééìîíòóñôõùøøøøù÷øùùøøøúøúüùùù÷óñîïðîîðîëèëòñðïîìëíìîìéããéìíëíëêîðóôòìèëííëëëêëîðóó÷ùùúùûýúúúúûúùúûù÷øøöõôóóòïìëìêèåããàÚÞÞåîøüýÿýÿþÿþýþÿÿÿþÿþþÿÿÿÿþþþýýþýýüùñáÙËÁ¼ÁÊÙâæéêíîïïïîìêêèçââÛÛÜÖƶªœŸ£±¾ÙääÛÎÅÕêêèèçèçïðëëéÙÁ¦“˜™¦¥–‡ŽŒŠˆ‹xpgh‚–Ÿ¢¹ÎÖÞÝÙȾÏÝâçãÖÌÝêîéßÛØÖƸÄÌËÐÈÎÓ²‘©ËÐÒ˸n1)7…±ÁÌÕÙÚÛÚÜÝÞסbS)  -  - - - 2+!*($('#  -      (#)&-%(*,,0+'1,+/"%.+0 * -  -   - - - );B<):Fgg_aC5L`[g]FIdebb`YOVkhee_[Zgikg[A  - -  - - - -"5  - .7ITW[VH;/EMWMGLA6967=:?01%&&)(//0)#$  -     - - - -   -     - - - -       -  - - - - -   - $0-*%!'&! )*00*-+"&+'%$(()%"$(& ++$'&"$# #   -  - - =RTSE:2&*17;IKJW\VVWXKEJQWHHJNE=;@><<53/+7@D;, 3E8806(  -)=3U£·³†( L¥©”U  Mcy™¢§¥£¤Ÿ™†kI" T——‘•Ž‰™¶¨¢´ÈÕ»ª¨§ª–””—‰ÃÝßßÜ˼ÎÓÍÔ̸¨¯¼ËÐȹ°£›š„p\f‡“—Žˆ‚Š„—®¢•–£¢ÊÝÕÃÁÊʺ¹ÄÒÙãÞÜÜáèèÙÍɸºÅȺ´ÄÉÎÒÔÚÜßáäååéèæçæææãáÚÔÊÆÇÍÚåíõýýýÿýþÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿþþÿþþþýûöðêæäæãèëéêêëìíïòô÷ôöøùøùùøùøøøøøøøùùøúùûùøôïëííííðîêèæëëìêêêëððððìçèïïñðîêèééëëìéèëîëéêééèêîñõöùùûùúùúúúúúûùùùøúùøùù÷öõóóðîîíììêèåãáÝßáæîõûþýýþÿÿþÿÿÿþþÿþþþÿþþþþÿÿÿýýüüúñãÖÆÁÄÄÊÙäçêëëíîíïíëèèåäáÜÜÜÕ˹¡š¢§¬ÀÚáÞÕÏËÚëëéåßßäìîíëãϳŸ™ž ¦Ÿ—…‡…ŒŽŒˆuhky‹• ´¿ÎÚÞÚÔÄÍÖÝãæßÌÑãíìæÝÕÔÎÄ¿ÌÖÊÍÒÜáÍ·»ÊÒÖÏ´x?%# 7ƒ³ÁÌÓØØÙÚÚÜÜÕ dP)     %3(%'(#'("%8*  $)%'(,&+)-'$+,'! +&-2 %'   - -          - ! ->EI82>R]d^VHGR_c\TTZ_amqgRUdjidfh`bcf\aF' -       -  - &9EKSY[WG($COUNPF<:5@B8344*&'(*'*06/&"  -   -    - -  - - -  -     -   - -  *,.*&"$# !!).54,.+%+,-.%#-+$%$'#$"..(',"&# !   -  - - -  &=ILPH8-"%,4=HIHSW`\XPD?IIUMBFIB;>EC;>98-/9FKD6.+;689:0  - - - &6>) (w¬°„# 9›¯šT " Ney‘¡¤£ Ÿ–„nH V”š˜œ’–“¯© ±Ëй¥¨¯œ–˜¢‰”º×ÞÞÞÔ¿ÄÒÊÓÒð¬·ÈÑÉý´­£˜tfcv‹’—’ŒŠˆ…Œ¡ª –˜¤œ¾ØÑÄÃÍù¯¾ÏÚáßÛÚàçêßÐËÀ¯·¾·ªºÅÌÍÒÖÚÝáãäåæçåæåâãâÝÓÔÔÑÍ×âíõýýýþÿþþÿÿÿþÿÿÿþþþÿÿÿþÿÿþÿÿþýýüùñêææåææçëëìïìíîððóö÷÷öøùùùúøùøùøøøøøùùøùúùøõðïììïïïñðíéåäæéçæêíïðòðîéèîïðñìëçæäßßããäíîìééééêèëðôõùùûùúúùùùùùüüüùùøúùùøøù÷öõôòññîîìíêêçåáÛÜàæëôûþþýþþþÿÿþÿÿÿþüýýýýþÿÿþýýýüüùðâÒÉÎÌÇÐÛäæçëííîîíëêèåâßÝÜÜÖ̽ž›› ­ÈÜÞ×ÏÍÇÖëëêéàÜÝçëìëÜÅ«¡œž¨¢š’„‰‡Š“’„xfj~Š’¤¸ÉÖÛÝØÍÅØÙ×àäÖÆØçìêãÞÚÍÅ·ÃÔÚÎÉÐÛãÚÊÅÏÑÓη|G&#! @‰³ÀÌÓØ××ÙÚÚÛÑž^H(    -%) "%''')-!";$  - 21-'("&%12&0?:-20)'$%"       - - -  - -""#:UJA2=[cmhePJVegdcZ\lnt|r^\fptvmmc_flhjU1         -  2KWYUa^I'/DGNVSB;=58;895-.)*..112-/*   -    -    -    -  -   -   -  -     -   /.0+$()* $&215112*'+,**$'02'/)(( *($,.*'$#%'  '2   -  AOIMN74(#-:=BJMT]\Y_KC;?MSUBLIC5AGC?@B8,5?FLN?;, 2:;661&  "#)<7  1|£~$*‘¯—Q  Cgu‡“Ÿ¦¤¢žœ™pK/  U”š£¢ž•Ž«­¤°ÈÒ»¢œ§±¨ ž¡•”¯ÏÚÜßÛÁ¹ÑÏÑ×з­²ÀÏÏÃÁº¬£Ÿ˜„kfq‡“œ’„~‚™«¥–“Ÿž²ÑÐÄÁ͸¯¸ÏÚßÝØ×ßæèÝÐÉ»ª¬±°¨¯½ÆËÐÓÚÝãåãããååæáÝáÝÖÖÙØÙØáêôüýýþÿþÿÿÿÿþþÿþÿýþÿÿÿÿþþÿýþþýüùòíçääåèéêëììîðïðïñóôôôøöøø÷ùùøø÷ùùøøùùúùøùøùôðïîïñòòñòðïëèæåæåæéììîíìëææéîëîìêæâáÛÖÝáçëîïëêêììëéìòô÷ùúûûúùùùùûüûúúúùùùùùø÷÷öø÷óóòñððñííëéäàßÜÝÛáëñùþýýüÿÿþÿÿÿþüûüýþþÿÿþþþýýüüøíÞÕÙØÑÊÕàäèêëìîðìêééåàßÞÜÜØÏñ ›œ°ÏÞÜÕÓÒÊØêêëëéäßåêìè×·¢¢œš«¨™ˆŠŒ‡{okoŽ—¬ÁÎÙÜÜÖÅÉÞÙ×ãßÐÉàêíêáÜ×õ¯Á×ÛÏÃÄÖäÛÑËÎÔÑ̺|9=´ÂÌÕ×ÙÙÛÚÙÜÑ”SE)  #   #!#(-&"",   -#%*&6))#%:<=14/-3/"&$"" -  -  -  -  &@NKF78^gnjcWFN`bhj__ppr||b\ep}zwudbrrroh?   - - - -       -&%?IW[ZkeL,-IOLPTED=G32CA7(+&%33+1275+- -  - -   -    - - -   - - - -   - -    - -  -#2)0*%-1($! !*3481,/-+40-&",62+.)'#!"#),(+-1!) %$!     - -  @RKVP7,##+:?BBKUbffaL9<=OTLIFA=??D?AFN=16CC=CIB5!1=:85, - - $/90 I{d ªQ  -  -A`tŒ’¡¢©¡ “nE -  X’¤¡¡§¦—‘­¯ž¬ÉÓ½¦¤©°«œ˜˜’®ÄÕÙáãʸÉÕÎ×ÕÀ«¬»ÈÍÇú²¥¡›fTrˆ—˜œ•‡€‡‘©¥›Ž™ ©ËÏ¿Äп²·ÄÓØßÛ×ÚâåçâÕʾª©­¡Ÿ«¾ÄËÑÒÚßßäãäâäââÞàßÑÌ×ÞÛßâéðúýýýþþÿÿÿÿÿÿÿÿÿþýÿÿÿþÿþýþýþüùòêççããåèêêíïïðòóóñòóóöõø÷øøøøùøøù÷øùøøùøùøøøøøóðððïññòñïïîìèãâààâãâãââáÞÛÜâââãâáÞÞÜÛ×ØÞæééìêëìììëêíñóóøùùùùùùúûûûûúúúùùùùùùùøøù÷÷÷öô÷óòñòððëååäàÞÜÚÞêöüþþþþþýþþþüûýýþÿÿÿÿÿþþýþýþùèÝÜÝÛÏÏÚäåçêêìîëêéæåâÜÚÚ×ÚÒȹªŸ™²ÓàÛÙÖØÔÜêìíìíêæéèëæѲš¡ ­”Œ‚‡ˆ‹rgiu‹œ´ÄÔÛÞÚÓÃÍâÝÚâÖÇÍåìíèßÔÍÀ§§ÄÑ×͸°ÐâÚÒÑÒÐÎÌ´q9>ˆ²ÃÐÕÙÙ×ØÛÚÚΉLG1 - -     -))"!!' * - -!!)! 05,'##(52+'-23%#)$/! &    - -   - - !$84D;>./+,&,'4204*   -   - -   - - -       -  - -  -  - -  -   - $)/++)'3.#!#! "$ # !"#595/22)/0<60-+/3,/-) !$-(%),,1+! #((!'      "AOTY_a^RC9==O\POI=533>?FIDA/1ABFJFNH1!$;:46*! -  "56$  FI -o¢‘N -"  -  Hau™ œ¢¥Ÿ“‰jH ]›¦£¦¥¯¥­­¢©Ç臘º¸¯Ÿš’…˜±ÂÒÞàá×»Á×ÎÓ×̬¨»ÃËÊÇÀµª¡™y_k„•––„~ˆ¤­¤–—¡žÃÏ¿ÃÍ»²ÄÎÔØÞÝÚÝâæãÝÔǺª¤¡œ »ÉËÍÕÖÙÞáããáããÞÛàâÝÔÑÙàãçéîôüýþþÿþÿÿÿþþþþÿÿþþÿÿÿþþþýþþúöìèãäæèæéììïñðòóôóôôôóóööùùù÷øùùù÷÷ö÷÷ùöö÷ø÷õõõ÷õòîïííîíëêççåãßÞÜÛÚÛÜÚÚÜÙØÐÓ×ÚÜÙÚÛÛÙÖÛÖÕÙÝáãçäæìèéçéìîðóõ÷øùùùùùúùúûûûùùùúùøùùøùùøùøù÷ù÷öööõòðîíéäãßÛÛÜâëôûýýýýýþýüüýþþþýÿÿÿþÿþýþþüôçáßÞÔÍØâãåéêêêêêçåãâÞÚØØÔÐÊĽ©¡¹×áÝÛÚ×Ùáêìðîíêêæéëá˧”• «§˜ŽŒ‹‡Ž…‚tmsŽ“¢¼ÌØÞàÚÎÉÚæàÜÜÍÅÓæîîéÞÑÅ·¦¶ÉÏÖ˲§ÃÔÑÌÒÎÒÑ̹{7 9~°ÃÎ×ÙÙÛÚÙÚÙÌŒYM- -   - */%""  - - -&(''!"/,("'!+./%&1#5%(/*0'($  -    -   -  -  - - %8GMQB>Ofpqtf^]fnrgkfequxrj_\l|}z€ueop~rq]2 -   -   )BOc]Wbb]9!$4GUXTXP@:;99;>>422))*.-%6,'     -  - -  -  -  -  - -  -   -       - )-,'+&(3," !$$!%#!,&+7=;2<546695.+..620-.% #-/((+*-) $%$%#      #ARNF;-02,/9>HTX\]^XLE>:BDECPT@,+=;7+#  -")8)   -!9 - e~E   CWnŠŽš›¢¢¡ž”ˆnC b™¢ª«¬µªŽ¨¯£«ÃиŸ ³¹·©•Š¤¶ÈÖÜÞÝÚĺÓÔÏ×Ó»©¶ÀÍÓÌĽ¯¤–‘„__z”“‰€‚‡š­¤–š¡ ¹ÌÃÆǽ¹ÈÒØ×ÝÝÜÜâÞÙÝÒÀµ¤žŸ¦ÁËÑÕÚØÙßääãÝÝàâáãäÞÓÐÝäæêïöûýýþüÿþþþÿÿýýþþþþþþþÿþþýûúõïéåæèçéëêíðïñðñôôõõôöøôòöøùùøøø÷ø÷øõõöö÷õõöôõôôóñðîëêçèççåääãáÞÛÚÖÕÖÕÔÏÓÒÑÌÌÊÒÑÑÓÖÓÒÏÐÒÓÕÕÙßàßßäââáááæçêíïóóõöøùúùùùûùùûøùúùúúùúùùùùøøùùùúù÷÷öôóïðìèæåáÝØÛÞêóùüþþþþüüýþþþþÿþÿÿþÿþþýýúòæáÞÕÎÔÝåäçæçëéèçäãáàÛÙÚÖÑËĹ²½×àáßÜÚÞáììððéêæçæçàÉž“œ±¬œŠ‹‹ˆˆxlnxˆ‘–§¼ÐÜàßØÈÄÜçßÛÔ¿ÂÜëïïêãÖŸª¼ÇÒÐŲ­ÀÁÂÅÇÍÓϼ>"  #<{±ÄËÓÕØÛØØÙÖˉPE$ -   - - -  13'# !    %%"$++&..(1'/( $')%")"!! -  -#  -  - -    9MNRF:H\mro\Y_pqpmbcxy€sxi`m€„ƒqfjtwtsgH -  -  -  .@JY[]ffb:!4EXZXSHA9:78CJ591.006.3-0,(*   - -  - -   -      -   - -  - -  -   -  - - !+71+*-4-!#%%%,+&+$3=<>824/3584/20110-*) %30-/',,'% $"""%! -  - - - -&DSQI@54/+23?FJRWVTUWJ8:  !_œ¢®¯¶»±£¯¥©À϶Š’¢µ­˜‰x¯ÈÕÝâÝÝÕ¹Ç×ÐÑÙȵ¯½ÊÕÏÊƹ¨›š’pej…‘“Œ‹ˆ„Ž¦ªž™Ÿ¡¨ÁÀÆƵ¾ÁÍÙÕÝàááâÞØÜÓ½ª›‘¥¸ÂÊÐØØÙàâãåäáßÞáãääâÙÔÝçèíøüþþþþýÿþþþþÿÿþýþÿÿÿþþþþúôîèæäåæèèêìïïñòòôñõ÷öøùøøøöô÷øø÷øøø÷÷õõöôôõôñòïðîìééæãäáÞÞßàãáááãàÝÚÒÎÑÒÑÐÅÁÀ¾¾Äž¿¾¼¿ÂÄÉÍÎÌËÓÚÝÝÝÜÝÛÙ×Ö×ÚÞÞãææëìíðôöööùùùøúúùùúùûúûùùùúùøøùùùùúøøö÷ôóòñîíèæàÚØÙÝàêóúüýûûýýÿþþÿþýþþÿþþþþýûóéÞ×ÐÖÝåèççæçææçäãáßàÚÙÙÕÍÉÃÁÀÉÚÜÛããáâåêìïðêäáãääÒ·¡’¦»­‰ŠˆŒ}spl{š³ÈÕÞâÜÓÄÊâãåÙÀ°ËåìððíèàÓÁ°­¿Á½®¥¬ÄÕŪ•š¹ÌϾ>&"@ƒ¯ÅËÑÔÔØÙ××ÕÅF?#  -    05*(#! )"$!#**%(+)&"'%&*$#*)'   -     - - - -  BPKNK?9UrqyudW\korm`^nzƒ}xh^h†‚nmrsuyqV3 -    9HY]YZ_ZN& 3CUXZTH@?;<<@?>30403<4549/(+$ -&   - -   -  -  - -          '*/0,)//*#!!#!%!(*#&'+.:@724407;83146814),' %34.+*4-)""+(&#$  - - - 3#(DLUNG81''8.8GKPX][`XJ78:JUONIECAB98.>EQPCDIMMD/%66''2- +$ H……[     D]w†”œ£Ÿœš˜‹q>b¦¨®¯·º¶š°§¬Áꋉ†£©›ˆ—¨ÄÖßãâÞßÁ¸ÒÕÎØн®³ÅÔÔÌü¶«ž›zle|’’ŽŠ†„‰« ’›˜™µ»Å´À½ËÚØââàããßÛÜÖ¿£Œ¬¼ÄÌÐ×ÚÚáâãäåàÝáããáâäÝØÜçîöúýþþýÿÿÿþýÿþþþþüýÿþþýýúóìåââââæéêìïðñóôôõ÷÷ùúùøøùùùøø÷öù÷öõööööóóòñòðêêèèæäáßÞÛÝÙÖÖÓÙâãâáááàÝÕÓÙØ×Ïƾº¾¾ÃÄÀ¾½º¹¸ÂÍÕÔÌÌÓÜÜÛÛÛÚÚÒËËÍÏÏÕ××Üààäçëìíòóõõøùùúùùúúøùùùùúúùúûùùùúùùùøøö÷õóñîêçåàÚÚÙÙÝéñôòùýüþýþÿÿþþüýþþýüþýúðâÙÓÙÚãèèççååäååäãâàÛØÚÖÑÌÇÅÇÍÙÙØåæãåçëëððëããßàÛɲŸ‘Ž«²Ÿ‘ˆ‡‰‹‘‹wonŽ’¨½ÍÙÝÞ×ÉÂØâÞÝÇ«¯ÕèìññïæÝØȼ±½·³ª°¼Ôßѵž‘²Ëʽ‡E%7°¾ÊÒÖ×ØÙÖÚÔÁƒOD$  - - -  *<-##$!   - - $$#!'31$*!--)%'4+(& )--&$  -         - - -   - 'DX\UQFEOpy€zse[_owjc`ct}wpaey†ŠŠ€|{puwvvh@ !!" #A67:12<925,(*"  -  - - -  -      - -   - -  -  -  - -   -   - $--1/+&),'!""#) $$"'*5@776;<;<675166-2-.1%'-320-0/('&'%$"$ - -   -  - -*>XPJF7/*'0<@GKPHT]_ZE?5=CSNROQAF<=;:6*)AKFEFJQKLE>.1*"(GG8* $" -*{™w6 VGPPG75746BF?/'(6B;735-*     - - - - - - -     - - -      - -   - -       -  -  %42',%%.2&!$ "&"("(,),7:<88>76;@=92;7445/1+!,625545*%(&%,*$%#    -  -  %ELCE;42)(7CHKNRIZcVEA;DKHPUREEE>FB5,!$BJMGAFJXVGI/ )BRG:- +  -  e‘O  Pff„“‘—š›—|\> #r¨±·ºÁ¾¾¤™¯­¨»Ë¾šš©—‘Ÿ«¹¹±¾×âäääãÞÒ­ ½ÔÔÕØɱ¶ÅÓÕÌÍÀ·¯¡ Ž}jq‹’”‹‰…Š‘£ —¡²½®¬ÂÑßãÙãéìííéÜÙØʵ«³¹¼¼ÄÐÒÔÙÚÚààÙÛßàßÙàçëìíîñøýþþýþþýýüþýýþþýýûòãØÙÜÝÜßäèéììîïñóóõ÷ù÷ùøøùúùúùùøùùø÷ùùõôóñðìêéæãâàÝÚÖÔÐÉÆÊÊÆÊÈÇÎØÝÝÚÚÝâçíîïðñïçäåäãâáÜÛÙÛÖÑÏÔ××ØØ×ØÛÝÛÚßåååäãâÜÙÖÙÛÚÙÓÉÀº½º¹¸¿ÄÅËÑØÜàßàæéíòôöõ÷ùùøùúùúúúûúûúúùùøùúúøøöõòñòðìèäÞÜÓÒÏÒØßíõüüýýýýýýþýþþýüüûõïééçßÛßãââáßÝÜÝÜØÒÓÔ×ÓÏÍÈÊÆÇßëêèáÛÐÁÀÌÑ˼»º³£–Ž•”“‡ƒ|ƒ}vty€…–¦»ÅÑÔ;²¾×ÚÕ׿¥±ÎäìïððìåÛÚàÞÕÎÊÒÓÌÌÛÝØÙÛÐÈÊ̾‰B(# :}ªÃÍÐÓÔÖÔÕÓÒ¹dJ> -  -  .=M3'  - &$$'*('.3'443.%$%0,&8-"' - -     'D:&   -  *9Nbdb\POinstqd[ijikf\cswzumchv}€„„|ortstteF -&-113)$+).,. (,$0.))-")'"')Be  :U^VTGRU=" -  0ORR]]NA789?@A<4-*';:3433* ! - -  -  - -  - - -  -  - -    -  - - - - -  -   -&,52-003+-0&""!%%#!!($"&,2;::@;>:7;@:4<<8.885/#(059<249/"$"##* "!$ -       &AOI?830.%):IBGEQ]XbUFEFHPKIPWREOGG>=5)# &;GMKFMMPORG4#% - +FE:58%  (&!f›_    Lej}ˆ–™–™•’g>$  +qŸ´´¼ÃÀ¹¥—®®¦¸ÌÁœ—¨“–§±À¹¯ÁÙáááâãÞÖǪ«ÏÖÒÚÔ»³ÄÍÑÏËľµ¬š›†tm|Œ‰ŽŽŠ‰‡„¬¦•—ž•š¶¶µ¾ÔáãÚæìììíëâÖÕʸ²¸¾ÃÀÅÉÓÖÙØÜÞÝÚØÜÛÑÏßéëîñôøüýýþþþÿýýýþýýýýüøïåÞÚØ×Ûâæçêëíïñòóõ÷÷ùùùùùùùùûùùøùùùøù÷öòñðìêèçåÞÞÛÙÔÑÊÇÆÅÊËÍÍÏËÌÒÜáâÞÚÞæëðòòñ÷õôóóòòïîéçæâÜÙÛãçãâåçëììëëíðîììëèåÜÙÛÜÜÛ×ÊÃÅÁÀ¾À¿¾¿ÅÊÎÓÕÙÜáççìðñóô÷ùùùùùùúûüüúùúûùùøùøùù÷ôóóòðïéæãÜÙ×ÒÐÒ×ßîöüýýýýüýýþýýüüüúóðéäÚÌÔÞãáÝÛÙØÚÚØ×ÏÓÓÓÒÌÅÆÄÊÞëéäâÝʸ¬²ÂÀ´¨Ÿ˜–Ž‹’£•ŽŒzz„sqv…‰Œ—¬ÆÔÞÜÔÄ·ÑßÛÙ׿®¾ÔãèíïíêáÕÙÝ×ÍÉÇÌÎÍÎÙÙÒÓ×ÏÇÌÍÄ”P' ;‚¬ÃËÐÒÔÔÔÖÑεeK:#  - 6;;#%   $ )7*!$ '),*.1.&!)',03*'!  - - -  - -  - - .N\O,  - - -  '9F_d_[OM]q~„eXeikseddu{twdds|ˆ„€ssx€t~mL( %4189/3.00.*+0.")**)32+*#'$! &!.BQRZSKRU:)GSa^\SB>@EIA>A;3.35:31.3+"!"  - - -       -    - - - - -       -  - -  )3541--00*&+)(''(("*&""#%),0;D=EA9997>;34;95198.#%.7;9C<880)''$+&1#  -     -  - +HFKD6.--)/;FKEKX_faZJFAADOKKRULOJD@;>6+%")0=?IHKMLSHI<7"!1DJHS@0&  -2#' - n¡¤q( -    J`qˆ“•‘šš“}i< %s£°¹¾È¾³§”³¯¦±ÊÀž‘§‘¦±¼©»ÙßÝÜÜÞÝÚÙ¿¨Ä×ÎÓØ÷ÃÊÓÒÍËÇ»«Ÿ—“‚mw†‰”‹ˆ„œ¥Ÿ’š“¬²³ÈÜææÚåêëîîíåÎÎɹµ¼º¾ÃÇÌÎØØØÛÙÙÚÛÛÓÂÊàèìñ÷ûüýþþÿÿþþýýýþýüüûôëâÜÚØÚÜáäééëïîñòóõ÷÷÷øøøùùùùùùùøúúùùùöòððìêèæçäÞÙÙÖÕÒÍÌÄÈÌÑÓÑÒ×Ô×ÚÞãáãÞãìó÷úûûüþýþüþþýûøù÷ðäáîø÷öòôúýüýüüúúùù÷öñíæßÝÙØ×ÓÒÌÌÊÇÅÃÅÁ¾À¾ÁÈÍÎÑÖÜÞâåçìîðóõ÷úùûùùûüüûøúüúüùùùùùø÷õôôñïìêèäàÛØ×ÕÒÓØàìõùûüýþýýýýýüüûúõìäØÆÇØÞÝÚÚÙÛØÖÕÓÐÔÒÏÎÍÄžÇÝêèäáØį¤½×Òƶž•’–žª¡–”†„Œ’Žƒ„ˆ„‚Œ˜¯ÁÍÙÓǵ²ÇÓÓί¡¬ÅÖÛßáäáÑ¿¾Å¾¶³¯°´±¯»Ä´°½·¼ÍÍË R& #.|­ÃÉÐÒÔÔÕÔÑͳfI6   - - - *)  - - (# !0() $+/4,+42,(!'/8+$'$$     -   K`bU'  -  $ &2BX_hdZM]v~pcYjmrjgirx‰„sies…‹‚‚€orw€~tZ5 - #09>>6<6954777%.,.234,*+,)(%#  - - 1FSUKPTSM4 1AUge[NGC8F@DI@7637400437-(!  - -  -  - -    -        -    -       -    +348*-310&--).'! ((''&(-# $&$./>AA>@=<<<4539>;;64.1#(6:=82&!#$($(62'  - -  -   -KLPMC41##$7AKQQT_jgYD?@@GJPOSUSJKE>=E>>-&&(?@DHDHSLKJKA&*GLMXL7/ ' 6oª¤o$ - -" L_h~‹Ž’“˜”—‚h@ &x¡¬¸ÀÆ¿µª˜®®¥¯Ç¿–’¡‹˜–£¢¼×ÛÙÙØÙÝàßΰºÕÖÒØ̯ºÈËÒÓÎȾ®šš†jl†Ž‘›•Œƒƒ„§¤“““¡¹ÀÖßæàÙäêìîïíåÏÌƽ½»¹¿ÄËÎÐÕÖØØÖØÚÜ×ÊÃËÜêëóüüýýþþÿþüþýýþýüùôïæÞÝÙÙÙÜÝâæëêîðóõôõ÷ø÷øøùùùøùùùùúùúúù÷õôðëêèèçæäßÖÖÛÜÚÔÐÌÊÎÒÔÖÓÚÝÞàããâäåçì÷ýýþÿþþÿÿÿþþÿÿþþþýúíèøýþýýþýýþþþþþþýýþýüøòëäàÙÕÕÕÓÓÔÐÄÂÇÇÉÈÃÀÈÎÒÑÎØÚáããçéèìðò÷ùùøøüýüüúùùûüüøùøùøøùôöõñðîëèçåÞÛØÕÑÒÔÚßåò÷üýýýýýýüûûûöïå×ËÂÍÚÞÞØÖÖÔÐÐÐÐÎÍÈÊÇÁ¹³ÃÙâÞÚÔͺ£œ¶ÍÑ˽ž‰†ƒƒ‰’€€pkwrlspkm`chj|…–œ ’„}†”›’‡rko{˜¥¤¨­¦š~x€{fchricgpwjgd|©ÉÍÊœL& .y¬ÄËÓÔÕÔÑÐÎ̱\H9 -   -#!"   ! (! '(3&"*113***%(!(-,) %  -  -   ?;88:6549100$-;><89<81($'$*'')-'  -HPVJ:7,"+8==CLSQX^ROMNLG::7488;9:698FŒÆÎÇšW/3u¨ÁÉÑÒÓÓÐÊÌɬXH; - - - -  !%$  " #$!$,*##-0&%)##-###'       - - 6epj]G4  -  - - -" !7I`hidYRm†‚nbfrzyvmm€Š‰‹€hguˆˆŠ‹Œ|v€ƒ~oO!  .EIJFF?;77<44=>661(03236454118 4>MTMXUXU> -3EOVZVMC@<=GJAB>64421476.## -    -   -     - - - - - - -! - -    -  -    - (15;84523,'%*)&$!$1,&-*-*"'*409?@;><@C?EGA>?870*99-%3<===>=96*+&%&+%')" - --JFRM>6* 6;BEMUZ_[TI?A>HMOQRQLK>C4-BEEBH@CBAJISQILMSG>9%#>SWKCA>1!   -  - - - 7V(!n»Á™M -D_fz†‡ˆˆŽŽ€a3 *v¡¨²Á÷ª±–¦´«±Â·‘¤£’¢¨·Èª ÇÍÌÍÏÓÑÊÆÌÕÉ°»ÕÔÎ×IJ»ÆÍÔÔÐƽ« žz`i}Ž‘”‚‰‹ˆ•£“Œ¢ž™³ÔàåèåÚçíðððîêÖ¾¼¹»ÂÀÇÇÏÒÒÕÖÕÔÔÕÛÔÉÎÔÓÚèòüýýýüýþþýýü÷ñìåÝÜ×ÖØÝÞãââçêêìðòòóõøø÷øøùúúúùùúúùøùùöôñîëèèäåæäæææäáÚÝãåäãâãâæèçìòóöòñóöûþþþÿÿÿÿþÿÿþþÿÿÿþÿÿÿþýýøéâóýþÿÿÿÿÿþÿÿþÿþÿÿÿþÿþýþü÷óïïìñø÷öòïëåâÝØÚÙÝÜØÙØÝàáââÞÝÝáäæêìïò÷ùøùúùúûúùùøûúùøøøøöõõòòñðíêëéäâßÚÏ»³±¬½ÅÔåéèçæâÞÔ»Ÿ“Š„vmodUakl_`_kef]X\`c[KV_jaWL7<;5A98EB>7;<55-1,0/+/)2-/**4)*/0.18?H>=<299447?>;84;2( - #6@O\UTRSB, /@TRRZPI>GA<@BH7-243.+561"! - -   - -  -   -   -  %  -  - - - - " - -   - - -   - /25659654*&,*2,!&).,/-*"+-05;;>;=@BAJAAGAA;<95266(.679<8>>=8))$&&&)(% -    ,FHWM>8% " *;GJKP^aVSK:7FKWKQTPMJ?=20AJKJI[^NKNEILLMLMPF;+!';LXOHC8?2 ! @X4.‰Îعf - (K_mƒ‡‰c5 -,q¨¬¸Ä·©¶š ³¬«¼¨™¯«¥ª±¾ÐÀ®ÈÌÉÊÐÏÑż½ÉϹ®ÍØÒÖÊ®³¿ÆÒÔÒË°¥œ“}c\v†Šš‹‹‹„‚ž˜Ž—¢¨ÌÞåêæÜæïïððîìÞ¿¹º¸¾ÅÉÎÏÐÔÒÑÓÔÔÚÚÇËØØÔ×æóüýýýýýýþýùðçâÜÚÙÛÚÚÞàãââçéëêíòòò÷ö÷÷÷øùùùùùùøùùùùøõóïëèæãÞßäçæèêëëçÞàåèçèæçìðô÷úüýüûûüþýÿÿþÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿýþûïßÜêûÿÿÿþþþþÿÿþþþÿÿþþÿþÿþþýüüûøøüýýýüûöóìåãßáÚÙÜÝßâãããàÙÖ×ÛßâæêîñõöùùúüûùúùûùùùøøøøøöôöóñòððíìèçàÝÒ°—–Ÿžª¼Á¿À¾¶±¦ •‡~Œ€kd[]TW[b\VOTY_QTSLFH@>CPNEA669433291035/0+&*##%&&"'(,7HTs¦ªž¥“…œ¡šœ²ÄÄÃÈÎÐÆÄż·²³²›‡§³­´¾·§»ÊȦZ1),i§¼ÈÍÌÏÏÊËÇɨXH5  -  (/&## -  "#!)0('*(&&&".6#"'1/)+-(  -    - -,iŠ†jcmxZ'   -  - - #7NZWeXX_y……zpert~xsspvŒŠ†}ji{€‚‰Š€†ƒ…‚xpB -GPRTRJNJI@ENOEG@;DD;<B?AIC=B?>8168690'/<=8@<9:0)&+*-)&,4(0  - !)BJLK>6.&$.?JLOMU^XHJ@?BLWW_VIJFD??8>DKLGV_JGHLPQOIKING;0:DOWL]Q@8 - -  6aE9ÞäÔy-   N\fx|‡‚•…‡‹~`4  +s¤¨®¸Ã´£µ™²£¤±§—¬®¯¯¶ÂÕËÀƽÊÓÒÍʽ¸¿Æ·¥¾ÛÕÑÑ´¬ºÅÎ×ÔÎÈ·¥ž•€jbn„“”•‹~x’ž’¢Ÿ¾ÚáëæÜèîïïðîïãÁ²¹»½ÅÈÍÑÒÓÓÓÓÐÕÞÔÂÍÖ×ÔÕäóüýýüýüü÷ðêàÜÙ×ÖØÛÜàãäæåèêêìððòóõöõ÷øøøøùøù÷øøøùùøôðíéæäàÜÕ×àåêîïñðêäåéçèìðõùýþþþýýýýýþþþÿÿÿÿÿÿÿÿÿþÿþÿÿÿÿÿÿþýüòãÛ×àñýþþÿÿÿþÿÿÿÿþþÿþÿÿÿþþÿÿþýþþüùúýýþþþýûøòìéââáâãäæäãâÛÕÐÓÓÚßãèìòòö÷øúøùûûúùùùùùøøøõöõõõõóòïïìêàË»©›–ŽŠŒ”œš˜œ“‘Œ†zubcaV^VJQE=FEF@;937=>>77631)+0..-%',*#0*.$ ""#" )! "' 5e­ÒÛ×ÖÕ½µÆ½ÃÏÜääåèéêäååÙÖÕÐǶ¶ÇÊÅÐÙÕÅÂÈÆ©]4)*g£½ÈÐÒÒÏÉÇÈƤQC* - - #) )  -  %$%%-!"" $$$./"/4*'),'  -  - -  -   -']‰ŽvfvŠ])   - -   -  /J\aa`Y[o€€udkuyytsn|…Œ„lf}ƒ‰‹‚…‡y|‚tW, - 7GNUMNROTPQJNSONJGLFGHI?BGCBA:44>RWVTOSVD  5J]bfc`OKEIE>D?@B>723409/#$ -  -  - - -  - - -   &   -  - !  -    "12882628@5,'(''')'+31* $%--75CE>A=AFGIA<=;73.4=;3&79?9=;@=6+.,*.,.*0'  -   - 0BLKMB>,#):BIKM\^`LMC@BIRUZ_KQFGE>@NMA1 %)HHTQMLB9)  ! -HgS - A¦àçÝ›4 &E\hw}~ƒ…†€d3-}¦¡°¸¾²¢¶Ÿ°¨£­­•–¥®¶¶ÆØÒȾ¹ÁÉÑÒÇÀ½¯ºÁ· °ÒÙÒÒê´ÂÍØÕÒɹ«œ—‡qcc{‹”‘ŽŠ†…ˆž‘‘¡§š®ÔßêçÜèíïîîîîåų¿ÁÄÆËÍÐÑÏÑÐÐÐØÚʳÈ×ÔÑÔàìøüýüûöïãÝ×ÔÓÙØ×ÛÜßäæèèéêêìîðññò÷öù÷øùùøøøùøùøù÷ôñîéçåâÜØ××ØÞçîòôöóíéèíîôúûþÿÿÿÿþýþþþÿÿÿÿÿÿÿÿþþÿþÿÿÿÿþÿÿÿÿþýøíá×ÔÓÔáï÷ýþÿÿÿÿþÿÿÿþÿÿÿÿÿþÿÿÿÿÿÿÿÿúôùüýþÿÿþýýüùõîêççèèæãàÚÕÖÓÐÔÖÛßçêìîóõøøúùøùùùùøø÷÷øøùù÷öóóóôòðèÆ¥‘‹‚€vy|€swslfb\_KRDIMB@@=?954;5.'(02(++-/&''&+ " "&#$!$!# #""( ,!$"!0lÄÝàÞáÛÄÂÉÇÈÐÜáçëììëìëëìäÛÜÙɶºÌÐÎ×ÝÜÑÈÈÇ^7$ ,h ÁÈÍÑÑÎËËÉÈ¢[I. #*'%$    % $"*$#,2!)-''"8=3--2+ -    -UƒŠ€ow‹—„Y'  - - -  -  (G[dic_Vbr‚~cdq‚ƒrhs~‡‹†qgn€‡’Š€vty‚ƒ~j7 -8ENSFELMPPWNENGFKPMJLOG?LLRPDF5# 5=X\NP[`S2 - - ';GVa^a^JMPIGKE@=:5592887+!%    - -   -  -  -        - -  $#      +8457322264,&($ (!'*)0*/'(%#577>=BDDBJEDGD=?7=24@;+,2A;::;:40+0*--*/71  -   9!   - -8EELH@3/!.A>;65>:3-/+(#++.***/#')2+)/$%-0/1<<% %.+8('2;=9=0)!.Z¤ÓàãáåØÄÉÃÂË×ÞäêíëìíïïîíèÝÛØͼÁÎÏÏØÞÞÖÊÊÄžd3'!'d ¼ÈÎÑÓÌÊÌÊÆ MH6  - $)*    -'% "*%!!",!%2)!(/52,+/ -     -   J€j~•’’…\(     B]epte[dv…Œˆmht{…„rfltŠŽzjhp‚‹“‡‚y‡ƒƒ€jC1IXQPLJMN[ZPPKEJPMSMOJAGNROLRQF&  +BFRYSUXYH,  -+9HR_\YVRAQN@DC@;1/88813-'%&         - -   #   -  - -      '  $%!!%$!%)53527<94/5)+6, '"'/.1,(%!('39;9CAFHIJBAEEA<69:?>4)06B7=>EA4-*6931..5.   -4   ?EFHF7/+"&38>DGRR[RID>8;DMLHKYXOQLK[OLUQHOP=>0&%))$AGSPLQQ?7' %2  Qxd%&mÃÝÕŒ/ ;&Pceey€ƒŠ…††Šzc2 --…ª¬«µ½·›°š–³¦¡®¯§–¬­µ»ÌÝÚɺÀÄÎÑÐÎ̹«®ÃÄ«¶ÔÑÎÑ·§µÃÑØÔÌÀ´”š‹halŒŒ…Œˆ†‚~œŸ”’›š˜¼ÞèæÛèîïïðïïãνÀÈÅÆÍÍÌÎÌÌÈÏÖÚɵºÂÑÐËÕßàâããÜÓÐÑÑÐÏÏÙÙÞáãååèêëíïîîïññóöööôøøøøøøøøóóóðñíéåáÝÛ×ÎÒÞßßÜâîóôòóóùýýýþþÿýÿÿÿþþþþþþÿÿÿþþÿÿÿÿÿþÿþÿÿÿÿÿþÿþöíåÞÓÏÏÏÐÏÍÕÑÙåðûýÿþÿÿþÿþÿÿÿÿÿÿÿÿþÿþþÿþüûýþþþþþÿÿÿÿÿþþþüù÷ñíçáÝÝßÝÖËÉËÐØÜãåëðõ÷ùùùøùøùùùùùùøù÷ùùù÷ôôð⨂sslyyjpv^jodhbc[PNT[]TLL?D>=:BIPOCC86516@DHGFBDB>>><=>B9..0<>:CA>MRUX\LEC?D>BMOKKHTWYSSWRNSMCDC>4& &$-(/JNKNILB7-! !25/"Rwb*'gÃáÝ?  -  'Y\imvƒ~Š‡†…ˆ|h6  -{©´·µ½³‘«™°ª¤«´´©«·¸ºÍÝÚʽ¿ÆÐÍÐÌÊÄ·¬«Äϸ­ËÓÐÓî¯ÂÌÖÖÏù§”Šodj‚’Š…‡‹z¦–Ž•›”­×èãÜèïïïïîïæÎÁÀÄÆÈÊÌÍÍËÉÆÏÚÔ½³¸ÀÊÌÎÊÅÁ¿ÁÄÄÇÆÍÒÌÏÓÙÞäååçèëìðíïðññòòóõ÷õ÷øø÷ùù÷ö÷õðïíëèæÞÜÖÌÌÍÕÝäßáäìïõøùûþÿþþþÿÿÿþÿþÿÿþÿÿÿþÿÿÿÿÿþþÿÿÿÿþÿÿÿÿÿýûòéãÞÜÔÎËÒÓÐÎÌÌÏ×ÚèôýþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþÿÿÿþýþÿÿþÿÿÿÿÿþýýúöñéäßÜÜÛÒĽÃÅÐÛáæéîôõøùùùùùùøúøùùùùùùù÷÷óò⢂qu|pagfidkqvvr`Q]cmnkkk_H>=HN`hoikT5)#%%'7ReK7% 0Ymh@%+CammojkN(*D\[D';`neda[B-&b²ÖßÜåßÍÇËÀÀËÝæéêíîëêíñòñìãÜÜ×ÏÉÊËÎØßãáÖʼ b/(+ež¼ÉÒÕÐÌÊÇÇÅ™OD-  -  -   #"  - %+%!( #%!#"+,(#+.715.'%   - -  -  - 7jv{fd€œ œ‘{P#   - -  (Odlkc[[i†~‚x`tki„tsex€„vlfguˆ†‰‡„„†pvqwb.  -;:E?771303)044##  - -  - "   - - -   -   -    - -   - "*( - '))$!&%"(0,$%'(.1,# ###"%##'(:4.59=::47@=11+#*36:/+,-!+337>;?=8=BD@@BAC@A=+-6=:=>?:@@=?8(.588<=B=<1*1>?;1-6'  - - - - #5EGJ;70(#+/3454>FA<54?9@KPGQ[LHKJ<:FHCLSKJRUJ\`VTRQELFC< "%-7=23CKQYSLJ@) -'0:  -(H8E¨ÛܧK   /Rdcsvw‚ˆˆ„‚xT/ -2€¬µ»¼Á²Œ§Ÿªª£¥§¬¹¶«¨¼ÓÝÙþÈÏÎÌÉÉÃÂü±§¸ÎÅ­ÀÓÐÕл¬ºÇÏÔÉÀ»®ž–ƒmh{…‹Š‘£‘‘’ Îà×äíïîïðïâÏÆÆÆÈÊÎÌËËËÆÒÕÇ­°»ÅÆʾª œŸ®¶¿¾ÄÌÒÔÖÝãççêêíëííðñòóòô÷ôõôõôôôõõ÷öõòíêçãÞÛÑÍÉÍÏÑÓÛãåéð÷ûýþþÿÿÿÿþÿÿÿÿþÿÿÿÿÿýÿÿÿþþÿÿÿÿÿÿÿÿÿÿþÿùõïêääàååÞÚÚÖÓÖÖØÙÙØ×ÛÚÜÚÙÛÙØÚßèïöüþþþþÿÿÿÿþÿÿÿüüÿÿÿÿÿÿÿÿÿÿþÿÿÿÿþÿÿþþÿÿÿþüõíæÛØÐËËÆÃÁÉÓÙßåèîñõöøùùøùøùùùúùøøùòæ¥t~a]\\\^x‹‡y^H^z‹ƒgf|zoF5>]ip`R^pmU3,+4YszsK5*6Vvw_5&GksfDCaqc?/LfoW(%8\g[5#2™ÖÓÎǸ«¨¹»½ÍÚâèèëìïíéêîñóðéÙÖÜÜÔËÉÈ×áããÚÐǧ`)! R—µÇÓÑÎÎÉÌËÔ??$ - -   - $&$ &% ""'$$!#$$*.4(/)&$   -  -    +Uxnjf’™•–zTE$ -    8Uhmjfa^q„Š…e`vx€qjt{ŠŠˆx_n|†Ž‘†v‡ƒy^&4Reemlojmkhgihbakfcegg```ce``]P@ - -';JW^ZTLTK9  - (.:DWXW`YMNNJ>IIB925,.77@>62/1,  -   -    -    )  - - - - - !-%  #(&+**))+''&,24,.))'&+(.(.+-+$)%!  $/1786:>87;56=:.&$483304+ #06866C?>AAA>9.&26;?>>@;-/ 3@4:5/0'#&       &   6JFL<6+*&0-.<7.?6071699BKRIQWQAEC:>DOKFJLPIEIN]YWTNMMTF.&"':*"1—ØÜßÝí®°œ¨¿ÔßäæèëìêéêêñóðèÒÌÜßÙÎÉÉØàáãÛÑÇ´j/$I™´ÇÑÐÎÎÌÍÊÂLE"     !$"'(%""!/')##( $)-'+0(#    -  Q|l`o€˜£ —‹xlZ@!  - 6 )Ibnqnk\nw†‹ŠŠofj‡{xgnwˆƒ‡|glx…ŒŽ‰u„…‚h4 #-Qhoqspqurkjojdikkeemqg_^^bc^_UM /EMZ_UQLWN2 B7EQS[ZNEJVH>?@B6,030212D:*$&$ , - - -  -    -  - -  - !,$  !$%)(%*&+)&"*/510/',3,(+())$"$!#$&$""1796>;==??4988."%0544/52*$ %'18>7>=>B?====;?A?>?:@86+&3E>:?=;82%)+3130/,#%" -  -     8LKE=:1( $4017728*71<<:=CMLPQXLBC@;>EGLKCKONLQ]]^\YXPKEC1$"#3%(7EW_ZVB41%#%-"   -4‘°z4"$%   /Qa_ouu‚†ˆ‡v\8 - - ,}¦±¸¿¾®‡¡ ‰ªª ¤¦¤µº¡~ÏÜÉ¿ÂËËÊ˹¢›µÃŶ«²ÎßȲÌÖÒ×м¯ÀÇÌÌÊ¿¹®£—“…qu…‘Ž‘‡{‚†“Ÿ‡y…””«ÕÒäîííððñäÒÅÅÆÌËÊËÈÂÀÑÔĸ¾ÀÀÈÈ·©¤ª©°»ÁÈÎÒÙÙÛäåèêììëïðððñòôóôõöôø÷÷õõóóóóïìéâÝØÐÇÄÉÓÖ×ÙàåíôúýÿÿþÿÿÿÿýþÿþþþþþÿþÿÿþÿÿþþþÿþþÿÿþÿÿþýûöïçâáÞàáãããáÞØÙÙÚÞâààáÝÝÚÚÝÞÞâäááßÝÚÙÝàëöüþþÿþÿþÿÿÿüýÿÿþÿÿÿÿÿÿÿÿÿÿþþþþýþþþÿÿþþþýúõíâÙÔÊ̾ÀÆÊÒÚßæíòôôöøùøùùùùùùùøó謂|‚‘Žy[YULGTw…‹yPCZq†‡kn††xF5?_{x_FFn„cC/(?d||x^6*2Ynp`6$Gd}vO>Zqf=5KhrY/5\jjl_\D+2’ÔÝãÜǽÑÁ£ ¯ÌØÙÚàêìíëéëðòðéÐÉÙà×ÏÇÍ×áâäÝÑʱf:  'E˜µÅÑÒÍÏÒÌÉ¿GB#   - - "!$($&#$+/",$ &*/'#$$+*0+. - - -  - -   5pvbf†š¤¤›•“ˆriU=-# - - -   #PbnlrpZo{……‡qfqw}z€pmzŠ‰‚}jdn~ˆ‰†…~|€…€tE 3Zmsttkp}rkqpokoljhjlnfcld]hc`gW  -#6?L`fUJMLL2 -"9DNU[^THFNJH?=>84-03.3.38(!&"$*  $        -    - %*& #(,$"$()*,1)-./31,##)1/*,)%$%')$$# "!!"1<77=:9A;96;50."&.571323(%(/9AA@AEB?>>7=A>BEH99@74+-7IA>JNMLMMOKQQ]a_[Q]SSOC)$#%6@CC4#1IV_`MFA5/ -0$ KvJ/ "    7Q`[ettƒƒ|‡ŠwO* - 4{¥±¼¸»ª¦¤Š©®¡¡¥§·¼¨˜¦ÓÜÇ¿¿ÈÌÐÌÅ°›ª¿Ã¹®¬ÇÜÔ´ÄÙÓÔÕÅ´¶ÄÈÏ˹¯£ž“ngx‹‘‹„‚Š¡†{‡–—žÅÑåëîîðððæ×ÅÂÃÉËÊÌǾÉÕÏ·¯À¾ÀÉƯ¨®±·»¾ÅÎÔ×ÜÜàãçéììêîðððñòòñôõ÷ö÷öõ÷ôôóôóïêéäÚÖÙÓÍÉÎÔÛÝßèòùýþþþÿÿÿþÿÿýþÿÿÿÿÿþÿþþþÿÿþÿÿþÿÿþÿÿÿþþüöîéåâàßåãääåäàÜÚÝàæçêèèêçäàßáâäâææåããÞØÚ×ÝãíõûýýÿÿÿÿÿüþýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿÿÿþüýúòçÝÔÒËùÅÎÔÖÞèêíòöùøùùùùùùøøùó範wƒˆ€bVQLDT}…ŽxM@_wƒ„~‰‹ˆlA;Cav|`DGqvb>,2Kntwz_I13Yquc8(Bn{hSPmzj8-Ijqa85WhklfbC70yÁÝâÔÃÏÜ͵·ÀÎÈÄÎÛéîíèéêíòóîÞÔÜÞÕÊÆÈÖÞãäÝÒűn=%G¶ÇÏÒÏÒÑÏÊÁŒAA&  -    - "!' ' (&!!#+(+ )'22$#.-..-   -     - - - !`vmc€–¢ª£Ÿ—}kUTJ9# -   -  -8dhfmm_Zq‚‚†‹ubnp{ƒsiozŠ…rhYgy‚ƒ‚€€‡xu|w|N0! -5\otyuq{‚yposxpxmlglofinjkiiebgI  '5=71)353205,#""  -    - - -    - -    -  -  -!#+$  $(*)((.)06.12/432/+&%-06../+,&(&$%,#"#,2;C<88482:;7/)'"&063+464$ 044JIUQRXKECAAGLRFKFGNQNV`a]Z[US]M@9%,@?LJE2!9U_WXPJE0   +),&  - 'B.!&" - #9S^\bk~Šƒ…ƒ„‰pR,  4†¦³··½«Ÿ¯—¨² œ¡¨¯»±»ÂÔ×Æ¿ÆÊÏÒØÔȳœ´Â½¶¬½×Ûý××Ô×з°ÀÊÎÌȼ¸®£›‘vks‹’Œ‰‚}}–™†˜–¾Ïâìðïðððæ×ÉÂÊËÎËËÂÁÐÒÅ®¬¾¼Ãʺ¯«®µ»ÀÆÌÑ×ÚÝãäåêìîíððññòñòòòôö÷ôõööõöôóòîëèæÛ×ÛÜÚÏÑÖÛàçìöüýýþÿþþþýýþÿþÿÿÿþÿÿÿÿÿÿþÿÿþþþÿþþÿþþýùòêèäãââäãæåçééæãßâäéïòñëïòðíëæâçäáäçéèåâàÛ×ØÙÞáêòûþþÿÿÿýýþþÿÿþÿÿÿþÿþþþÿþþÿÿÿþÿýÿÿþþÿþýýý÷ïâÙÕÌÄÊÏÕÔØáåëîñööøúøùùøøø÷óç¬ylˆŒŽ`PWNISk|tVE\~‹„ŠŒ„nT88Zw}iNWoo[929Lkuv}jM.2Zkyg1!Egx|gjzu_2$?<>CADA>CEFD:;:>=7))01,0,.'  -  - - - - -7JJJB31, ,1),33-%)$+5:PxŠˆ…ƒ`B:]€|palsrV5$9_srpxtU44Vz~a="==JG>4301.01+*$ !     - - - - -   -  -  - -  - -  -&0' %$+0144:88;<=:8:6;;3*160*0000/0-/1%*+)!!&&"$)-9E@=69;5495::,('19:40/7)&+36B?EDF>>?BBC??DAE=AFB3 '146:>;?9-#(2/48+*" !&  - -  - - - '@HKHC;2( $,1),26*2* .+3BJLHMQTJEEDFFPSWNTOHNTYZ_bYNMQ[TH4';BEGE<-"!0NUXXK=:/  - "86%"$*$   -"!  - -   !7Xbkdaa_jt{y|paarx{cvpmwvxpcbi}ƒ…‹ƒzqt~~ojD#8Vhkr~zƒ~xyu~syonsww|y|utkjlmm_7  &>KUU]VFQRG9 ):HWSSRE6;LC93=869:@9.#"+5832.2+)110=BFHDC?FDCG?=:+029?B?:8.,(,+,.5>2*""*!  - -  - (FFNE;:8)&0763291%!"&$->DWQNS[KB<>AIMTLHJMJNRV`ZTZSSRURG3 /@IIGHA72&AUZVHD?>(! - 1:1 -   -+*"% :\hiwqv‹‘”†w\+  -4ˆ«¹¾º½§t’°Ÿ®¥¦°³”…ªÂÄÎÈ»¹ÊÑÙÞÝÜÝÜÀ’¬À¼¬±ÅÜßÄ»×ÜÒÖϺ®½ÇÍÍËÀ»´¨™˜‚ryŠ‘‡„‚|Š–‰‹”š™ÂâëíìíïïæÕËÅÉÉËÊÄÃÑÓ´ª»ÆÏ˸³¼ÁÁÌÎËÐ×ÙÛàâæçéëëíðïñòðòöõõõø÷÷õôóòñïëéééæäßØàçéæèíóúýþÿÿþÿÿýýýÿþÿÿÿÿþÿÿÿþþÿþÿÿÿÿÿÿÿÿþÿýúðæâáàáâåèçèêíïìïðîëéåèíñôõ÷ôìêòôóôñìåäáæéêìíìëíêéèãßåÝØÕ×Üáàå÷ýÿþÿþþþÿÿÿÿÿþÿÿÿÿÿÿÿÿþÿþýüýüýþþÿÿþþüôíæßÞßÜÙÞâçèéëñòöøùùøø÷óè±zpyƒ}iNNEILc€„qYEUn„fM_t‰sP?_t}zw~wf=*)Ep|wYdvjG4Spv`9$?s{~xyzo;& Ifge@ )UtbC! #}ÕÜÏÎßäßÍÆÖÔ¿ËäëïóðïíëçêìðïíäÑÇÕÓÍÍÔÞãáÝÔɽ„4*?Œ¯ÄÕØÖÔÓÍÆ¿C9  - %.=5" $%&)! &  -$("!#%'!!*+,1*"   - -  -  -+QedpŸ¢Ÿž ž˜žŒubakoa@#     - -  -.K_feg_\nu†{zxd^iknp|qrqxugedpŠŠ‡‡{|zvzomR)5Xhqwz~}~y~„zrmjpyqwws€ysmngssf='FSUVXPMSSG&  $5HSSSPDFCH@926>5,/4($"!#   -             -  - -  -,4(  '(.8@@??<>F??==>?=;@CA>934319725701*,('*)-(#'158>:>73;=>;=@6*))01154*3' &1542;?@EFF@?@CC?;:92(777:====0%)04008:3)" $&$  - -  ,JFKF=22,&;;>F><1")!"4:ASMSTaS<<9>DJNSTHCRUIR]\RZV]ZPQI4! )=BMELO;5-"5PZSK?ID, - -$%5'  "+') - -%?^kkrtx‹”–†s^5 -8‰«³¾¼¾¨r«—¬¢¡­¶¯¶ÇÉÊƺ¿ÉÓÜÝÜÜÜÝΟ¤½¸«©½×ß˸ËÛÕÏÕÄ©¶ÈÐÓËǾ²˜‘tƒ‰‹‘‹†rˆ‘›¾àêíîîïîå×ËÇÅÊÍËÀÅÔȾ¼»ÉÊÒÍ¿¾¾ÇÍÒÓÑÓÙÙÝâäåæèëìíîïñòóôöõôôöøõôóóòïêêèèèæåáÚâéëêïùýýþþÿÿþÿþþÿÿÿþÿþþþÿÿÿþÿþÿÿÿÿÿÿÿÿýÿþüøðæáÝàâåççèêíîîðññððëèéëîòõ÷øôîíö÷õóñîëçåèêëðïðñïîîìéèæâßÝÚÖÖØÛëûýýýþþþÿÿÿÿÿþÿÿÿþþþÿþþÿÿþþþþþþýþÿþýýû÷ðéãÞÜÛÞåèèëêëîòôö÷÷ùùôë³|ot‚‰~`SHGLSfwƒmREVr…}gLVv…sP9]yz‚{qxjG*-Lfwl[f{sP:Zl}k@'>rƒujlvrI/@]phE,UrnF'$ƒÑÓÍØæçßÌÌÜÑÄØèìïðïïíèåçëïðìçÛØ×ÒÏÏÔßäßÝÕ˺L+!A€«ÁÐ×ÖÑÑÏÉ»}FD -   -++8B;/! %,"$*&! +%')%'#,!'1-1%" -  -  %IU`~¥¢œ¡Ÿ ›”‹ph_npiH  - -      %Jbgkoc^hv€†‰|hahorqncpxx{|sicu‚„†‡‡|yyupk\8!7Pilv†ˆ…‰€‚€wttrqwv‚~‚~€~umpvlh>  .IPR]]ZOMJB  ';KLPRQQ=:JSOD>FA:769<013/!$&'%    -     -     -    /8+""$).6;?DCEHFGGFBA:>==?>9>5)+348625+'!&//.6?C?@?9;>DEEA=;?=9880'(:=>?<;=9+08<:32663)(%#    (DME=636)# (68:+!)"!%37>JOXY\SGB=;@UPFEHBRRTQQZSY^[ZXI@9'%4C=CLSSAHB0 ;FEMHI?9$  -1%#.(*   &BVinnxŒ“›—‘‰wT; 0Œ¯¶º½½©uˆ¯“¯¦¥¤§µ¶ÀÇÅÿ¸¼ÌÖÚѺ¥¼ÓÕ¹¯¹®©ºÓßÛ·¸ÓÛÐÓÒµ¨ÃÍÑÐËÉ·£—™‚ts†„˜¢“…—¨×êìîïîïæÖÆÉÈÊÉÈÀÐÐÁËÑÏÓÍËÉÇÊÏÑÒ×Ø×ÛÞßààâæéêìëíðïðóóòõõõôõõôôòñíèæçäåæåçåâçìñöüþþþÿþþÿýÿÿÿÿÿÿÿÿþþÿÿþÿÿÿÿÿÿÿÿÿÿÿþûøóîêæâãããèéêëíññòòóóòñðêèèëðóöóññîñ÷õôóôðéãâçèìïññññððîîîíêéæáÞÛØØÝåëõûþÿÿÿÿÿÿÿÿÿþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿýþþþþþþüùñèáááæççèêééëïòôöøøóì³€pq}Š|cUGKHOj‡vYAPu„}gTWyvL?DG<8;2172319353,*' -  -     -         - -  -    ".=4) /236:?DGJLLIIHLJG@CDBA>=>:6:>?><@B>?;9BIAA>=<80(#+?7&/6>3%5981$ &,& -   -    -)DQE@838)(=@>:62(%-%%31DEQKPUVSNQPWXTRI5#'3F>BGPPLQQG#)>?LLIEA% .  )$'/* - !DU_lpt…–šwX1 - 5‰«µ»½Âªs‚­”¯©¥¯ª¬¹½¼½½¸²»Ë×Ô¸ˆwÀÒĤº¶¨¬ÎÝßÇ®ÆÛÖÑÖ¿ª»ÄÍÐÍƼ®ž¢“yq|‹‘”‹Š‡•ª—„˜ŸÌèìíîïïåÕÅÈÅÇľÂÓÌÃ×ÜÖÒϹÆÐØÙØÙÛÚßÜßàâãæèèéëìïðñòòóôóõöõóóòïìéâÞãäççèëêèì÷ýüÿýþÿýýþÿÿþÿþþÿÿÿÿÿÿÿþþÿÿÿþþþÿþýûùõëéçæçåãåéèêëìïðôõôóôõóôðìèçêñòðïïíêìðïñóòðêãâæèíñòñòóñðñññïðíêçãßÚÜØÚÜäêóýþýþÿþÿþþþÿÿÿÿÿÿÿþýþÿþÿÿÿÿÿÿþýýþÿþýüôëåäææèèåçåèèïòôõôó긂lv†‚hYSVKPez†}_BLn‡mhkn‚c68QplgI]yvb97^v{yz~tGZpxg81\msT7SqjB*9[hg? (Qhldd\T7#K‘±ÌâéçÚÉÕ×ÈÖààÔÌ×éîïêåãçëëèèæßÚÙÒÐÖäèæá×μ„O04~±ÈÏÒÔÓÐÑË·}@>   '5@:CO>$" &%"##( '(" ,# /20,$ -    - - -5Na{œ¥§¡ŸŸ”‡ˆƒ†tc`tvj<  -  -  &Kamgfa_o|Š‰‰~hfhvpro^furb[y‰Š‹‰zzv€s~€aD,2Sfgohgrwƒ„‚ƒ€…ƒ‰‚„ˆ‚€ˆzxmlr{zY*   7EMnkYOM`I, .5EHQSNH:6:;;@97/58+35-54B:,.! "   - -             -  -   "0;7,$*078>=DEIKJLMOCLJJOKJGGG?>@?CA?ECB>>=>97;3(.<>?GKIHHBC<;;-%4;@77<8)" $/210=CF@>CHG??7?@HEDB?<2##0@FAH?7<4*' &4;<.!+1/    --Q^LA>21((2:;6763) $(&*6EHSY]RJ><bjrmeUcw„Œ~obgwv{peip†‡~vg[l‚‹……‡‚us„mG0:\esouz{{v†…~x†|„†~x|ohddqovz\2(=P[]ZWMGM@'  -+1JZIMOB1*23;?:1.24.??//3A:/'$  (/  - -    -    - 3 -   -  -   -/11/)(368AGGLLKNHMLGNKKOHKGHHEGBBBGFCHLG?=95/0*  - 5=>BGGHFE=B<:8*#17>94E7( ./5+)/;>???JG=B>CAG@EI=<2 #/=FC=>86-&, 47:9.%/0)   -   .MSQKA82(,7=:CB:9+"&**+,CDT[^WJD>>=?XUJ@ABMVMOQXU^[RVYRD3$"8;?EPXJIN\UB,)9HH83!  $%" +2$  P_[l€‚…’Ÿœž”}Y.   7‹±·½¿Ã­s{§ž–¬¨¥¯½»·ÁǼ¯¬³¾ÏÒ¯xcfd|¶Ñµž¶²¦°ÂÕÝÝƶÉØÓÔÔ»«¹ÈÐÍÐÉú¢¡š‡x|‚“—•ˆ‹ŠŽ¢¦’“š—¯ÕèêìëìæÔÃÃÊÉËÅÑÛÈÃÓÚÔÌÈ·­ÍÔØÜÝÝßßàáÞáãåæéêêìíññññòóóóöôòñðìèåÜÕÕàèéêëïòúýþýüýýýþÿþÿþÿþþÿÿþÿÿÿþþÿþþÿÿþþþýúòëçãäãâãåçæçëêíîñòóòòôóðîòòòñïêëêéíïëçæááèçìðïíêçééìîïíììíîñõõóñòñððìéêèäààÝÜÞâãëôøüþýþÿÿÿþþÿÿþþýÿÿþÿÿÿÿÿÿÿþþþþüýýû÷ñïííìêãÕÑØáçêðòòóíÀzkr‚ˆŠŒŽ‰{hWdztU8Fit|ƒ{mE42ShtgI7UhhNKiofI2>[siRVgqf>#HbXC)$M\L1*DME,.NJOGD;#:t½ÞèìæÑÇÏÇÈÜÙǧ†’ÇéìêæááæäâÝÚÛÝÜÓÐØãéäÝØÑ»‡O0!6u­¾ÏÖ×ÓÐËǶ{:7 - - -  -&6BFMOA1'%" $"!//($!(5 )'" !# #'&(     #Gi…˜¢£  ˜š“‡~kll^`kƒz[1  -   8aipmbg\r„…„o_ijvxkebh~‚yulTf‚ˆ„ƒ~ntzƒnL:<[gy„†‰„|}‡„†ˆ……‚ˆŠ€}omlifrruscB  -1>DIQUMHOJ4-5KMM]N7$$,,+,$)12973,5884$ "     -    &?   - - -   -  - #+,2/*2;>CCGLHNNKKKLMMJKCEIIDEKHFHFIHHMNA421-#+68;BHBB?=B=89)&4:;9;8* +-6)$*6:;@?BA<8A:5$.87==:90'-13.$&88.+/-%   -  - ,GLMJ@1.* (7?>?DA<6.%(%+?CGSZ`[M>8;HNB1 !$-6'* &(!  - -  - -   +##!"%"    - - -    !#"&+129>?CFEFDEGBHIJIC@@>B=_VBIILHHPINI;(-..1,  ,45<8.+.72*(%103& "*,"  ,)-:7/'*(29<=0 %1;6771)26990*69,11)  - -   2JFG<1%"&',80)%" %$##(*-% *,"(!*-*'$ -   - - -;v—ž £¡œ™Ž…z~x…mj[`hyx`L>&     - GYY_WVKZktygP:6PU^O8;IRSOH+#;_inT?0C\d`OE3(0Gguv€{y†~v|{|~zvƒ…v|ztnmnlmgnpmX93  -,% *6L>$  "# '10,(  - -          0-*-/)/#%'#"!   -    - -#&2866;>BC@@GEC<0''*',&$  ' - - $    -   #-' !*1*%#/0."& (% -  - - -   - 1JM>1*%'("$/>G@NHGA;4--15=OQRWYUE?78FQZIEJJTIER`bkUTX^TN?10)0JG@INMTQS`N>7!1;5 %'*#  - -% 8fC !%--   G\hD_”—˜œŸ››€T+  - @‹­º¹½À«qj¨ª•¬¨¢ªµ±¬¨¦¯´¨¦»Ê¥j\]R[Uu¿Ä¥£·®ž¨·ÐÛÞÖ²ºÕÓÒ×Ĭ³ÁËÕÔÑÇ·«ž˜‹wi|˜“‰ƒ†—¢‘‡Ž•¤ÓæêëìéàÖÅÁÃÂÐßáØÉÃÍÍ¿»¾·ÄÕÝÝàãääæåâææèêëêëïïïïññòòóòðîëçãÝÖÙãáÝÞéîñòøúûýþþÿýþþþýþýýþÿûýÿÿÿÿÿÿÿÿýýúóíèéçããæäææçèééíìîïòóôóôôóðìçêìïíìîîîëéæçæéëéäáæççæåäåèèééççèéëèæêðòõöôöööóóòïïïïíëêèæãàÝÜÝáäìøýþþþÿþþýþÿÿþÿÿÿÿþÿþþþÿþÿÿþýûø÷õòíæÞÙÙÖÑÚàæçêè´~h[_cZXTFNH38EF?5:1/442(.'%+)'!+&$ !"%(&! !H«ÞéêçØÈÈÏÄÖØÁ™vsx…½ãéåâÝâìèÜØÚÜÙÕÑØáäáÜØÑ¿‘L% .v²ÇÔÔÑÒÎÊƶnA5     -!#7@BFIQ>-!&(&!"& '"*//%'(%$#(1*#$  - -  2jœ¦©ž™  ‘”ƒn|‡†riXflts_XZD2   - -   0=BE=:08PF>1)&4.0'#%,+&! )4/'!.49.+%7BOVUVWSOZPNRVTOULOZVHSE@?MGJII?( "&         - -  - -&)&!#%" -    -  %**').,,*'&%!'%+-('?/0ib&*-00.70,&*&& !   -     -   -   -   -  - -9MG94+%-'!)8>GLOKHD<43.8FBPWV\\L?:95EWOTDFLKIDGZ^bZS]\KRC:%(=GJ@ILKONV\SF0!(-!$0/3' :ua - &1$  - Lb_JA’–šš™››…^* =’«´»ºÀ©vq ­Ž¨©¥©²«³¯»Â²§ªÀÄ–h\`\VPg°É§¸µ¥³ÅÜßÛ¶­ËÓÊÒʱ¬ÀÈÒ×Óͽ­—‘ygnˆ’’‹‰…„”¬œŽ‘žÂâêëëéßÓƼ¾ÃÖâáÛÐÂÈɶ·»ºÀÓÜààáååçåæèçèëììëîñïðððñòññíééâÞÕÐÚäáââéíïôùüþýÿþÿþÿþÿÿÿÿþþÿüþþÿÿþýýýþúôìééæççääææèééëììíïðñòó÷ôôóôóëåìòóóñðïðîéçèãåééäàäèèääåèêêêêçèéíììéêïôõù÷÷øøø÷õóóòðñîêëêéçåââßÞßèñøýþýþÿýÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿýýýûùñêäàÝ×ÍÑÚßâåä¹{`SZYUDFJGA<>>89?5233/*.$##&"'$ "&$"'R¶ãèìäÖÄÉÉÅÛÓ¸Žvor|§ÝèåãÝâéêßÚÜÛÖÑÒÛáâàÛØБ>+w®ÄÑÓÓÏÍÊƹsDGUPB-(%+ /%! !#$%$$',$!$", &&#,+0$    - -.Z‹§¨¡œœ ˜ˆŽ€{€€qk_etrgPXkP4  - -  $ 1$#$%$*! "!"#"!$&'""('!( # '(+"""    -   -   -     -   /, -     - - -  - -  - - 3N"$ -   -  -           - 8HFE<,*-%"(8CBLHO?A;//&97™®µº»»¨vp¤ª’§¬¢©®«³°¼Æ¹µ²ÂºŠaTYZYV]Ƴ•´¸¬¨¯¾ÖÝÝÁ¥¿ÓÐÑѺ²¶ÅÎÖÕÍÁ¶¦›™{ji‚Š•‹Ž€ˆˆ¥¢†““’²ÜéëêæßÑÇÂÅÊÚäããØÎÎǺ·¶¿ÃÒÛáãâããææçèèëêìíííïðîðòðïðîêäáÚÒÌÌØäåäæìñöûüþýþýþþþþÿþÿþÿÿÿÿÿþþþÿýýþþûðéèèèçéçæèéæéêìíîîðððóòóöôôôôòìçéñõöòñðòñïëêæâããÞàåãäâââåêîïëææéííëçêñóòõô÷øøø÷ô÷öõóñððððíëéèâãáÜÞáèñøýþÿýþþÿÿÿÿüþÿÿÿÿÿÿþÿÿÿÿþþýýýûôìæàÛÔËÌ×Þâ߶v_WaJJQFF<=?9;:3;51*,/--%&1#'%!**! %!""!! ## E´ãêèàÒ½ÅÁÇÙή„ifku“ËåæàÛÞèéãÞÜÚÖÑÕÚÞåáÚ×ÑÅ‘I#)j¬ÄÌÓÒÍËÊƳr80   !(6@ACNT@,&(!"/-%!)("('$#&#&) %&"')     0bo’££¥¢¡˜Ž‘‹~†Šˆzle_dvxbWkva= -      "#:$     -      -   ) - -  -  - -   &! -  -     - -          -   - -    -  -  -  -       - -6KLM=03/$,9HBOPKJG@5*'/6EMQZaYRLA:=JQVKGMHFF>@KY_\ZXY[P?1"!$)5CGABHMNPR[QMJ8.#*1790! / #5:>* a}U?<(5!  -Eihfacƒ–ž šˆY#  :”¯¸·¼¾¦po«¢©¥¬¬¸¶ÀĹ°­À§p[^\XRY_†¾ºšªº­£°½ÏÝÙĦ±ÏÒÑÐȶ¶»ÉÓÕÑǺ¬¥˜{u~‹‘‹‡†—¢ŒŽ”ŸÐçëëéÝÖÇÄÉÒßæååââÝ;´¸ÀÀÍÛàäãäãåçèèæêéìíííîïïïïðìíêãÞ×ÏÌÍÏÚåêìñõúýþþþþýþÿÿÿþÿÿÿÿÿÿÿÿÿþþÿþýüùõîèåçéééìêêíììííîîïññóóõööôòññóôðìêîóôôñòôôòðíêèæåÜÛâßáäââäìððîéæéíêéçêïñðîñ÷øøøøøùù÷öõóôóòðïïìéèåãàÝÜáåíóõôûýþþþÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿþþþýýùóèâ×ÉÃÌØàܳy`a_NGPOBAD?<<98=43(2.2/#$)1,6.*!&'-.#$/.:?79(# #)'*& &%$.'5BE>@DB?#I¶áçäÜÎÀÆÁÍØÅ—thjjnºâæâÜÛæéãßÞÚÖÒÒÙáäáÚÖÓÛR.*d«ÂÏÐÎÌÍËŲp?2     - - -*6ABBPTD/)!###$ +&$%!! #"%!*$%  -*Xq„“œ££Ÿ“”‘~x„‹k`aluuWSr}f- - -              -     -    - -     -     -    -   -  -    %"3%1     - - -  -    -  - -     - -    - -  -  -          -    0JUGC5-+##.7?DKJENOE7,,56BKGTa\LD@7CJIJLAFLIL@EOQTQLZ_XP@0+"'8JIGNSJCLUSLVDAA<%%099=2+   +0#"'r~FUj1 "'  @eirwgmŽ—Ÿ£•†Y!  >­¹¼½¿¦lc“©¢¨›¢±®°³¾Á¶«¬¼UZ[URMW[t¬ÂŸ´¬¢°ÁÍÙØ̸°ÃÕÒÐб¸ÆÓ×Òͳ§œ”‰uvˆ‘˜‘‹ƒŠŽŸ—‹Š’»ÞèëçßÓ½ÃÏßæççèåÛÌÁ¸±¾ÂÈÙàãääåææèéêèéëìíîðîîîîíêéäà×ËÅÌÖÙæíõûýýýþþþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿûöïéæèåäçééëëîïïðóóðïñðòôñôöùõöõðððñòðíîððïíóõöõòîëëëéâÛáâäçãáæîððîèâæéèçèëìêîîòöøøøùùø÷øøø÷öõöóòòñïíëééæÞÛÙÜÜÝáõýüýýþÿÿÿþþÿÿÿÿþþÿÿÿÿÿÿÿÿýþýúîßÒÍÉÆÑÖ«}^_`ULJXUOBB=B>VQC;9B9@KemaC8I]d<1.Kd]_XR=/-R\9'72:DMGJTVFD=98DKQIBJWNJNGHb\HHKPYLB0'$.7BG8?ADCINT[`WN>=B- ! '.26?4.2*  1?97'C„jOyy?     ;Xhr€‚Œ‘’š™ž“~^'  3ˆ©¶¼½¼¥ke‹¤Ž˜©œ¢³£¡¤ª¸´®«©aAUcUUX\]`¿­—¬¯¢£½ÇÀÆÇÁ¸±Æ×ÍÐÓ¼´ÃÌÕØÏɬ£˜ƒq|œœ™”‘• ˆŠœ£ªÉåéãàÒ¿¿½ÐÍÏãçèæáÐƾ··½ÄØàèéæåçèèèçèêëìîðîëëìêçããØÏÈÍÖÞåîøýýþþþþÿÿÿþþÿþþÿÿþþþÿþþÿþýûöñêçåâäæçæçèìððïîïòóóôóòóóôóôô÷øøõööòîíëëéìñðëæêìîíêéëîïïêåéëîîëäàÜÝÝÞÜÜáèçäèêéêêîðôøøøúùùúøøùùùøøøøù÷óôóòñîìéêèäÝÜàæîóúþþþüþÿþþþÿþÿÿþÿÿþþÿýþÿþýýúðàÓÉÄŪ„jiZQW\unVA;;FPdprNDT]Y77?XVH=;>)1/FX?74YncH4GG/+Mg^J:DUA!!KUKC@:=8,>¢ÖÞÜÔľÃÃÑÆ£~eb\de_p¾ßÝÙ×ÛÝÙÔÌÑØÕÕÜáäà××Т[&! ^£¹ÇÍËËÍËÄ´o82 -  ",B@FONI6)&')% "!#"(#&$!,+#05   %Cbnq…’’ƒwƒ‘•Šwpl|gVV`i_UXoeA-# -  - ! -   -  -        - - %    5  - - -  $$"$)   - -  -  -   -   - -  -   - -   - -  -    -   - - -  -   4NK;959:/%279BBFLHJB?;>8:EKCHJQFF62;FGRLGBTKHIHEXZZNS_WNA5/,26>FB7:DGQFSZ]XH<8?5( - *1=8@>7=-  -GINHU‚_[Ž}I' -  -   7XhmwŒ’œ¡”€\'  5~¨¶·¼¾§uh„¤—©œš¯ª¢¥žª©¤°ŸS4LYRSSR]`´¸–ª°ž¢»Ä°µÂÁº¯¼ÔÏÏØǬÁÍÐÖÕÑÅ»ª¢šwv–•™›•‘¡“‹ž¨£¹ÞèæàÒ½¼ÅËÆËâæèéãÕʾ´´À¿ÐÜéêèæææçèééêîîììêêëéäâáßÒÉÎÓÚäñøüýþþÿþþÿÿþÿÿÿþÿÿÿÿÿþþýþþûöñéæåæããäæèééêîððòóóôöóóõôóõôóôôööõ÷õððîîìëêíðïìçãåææáèéëðíêåêìïîìèßÙÕÑÒØÛäçêçèéêëìññóõõøøúùøùøùùùùùùøøùõ÷øöóòðîìêèåâãâåæëôûýýýÿþÿÿÿÿÿÿÿÿÿÿþÿþþÿýýþüøîáÙÎŪld\[koovyN8;MVqop`HVmW@,G\J7-)-*'*OVA1-^kkb\X[H+ /RhfcMBLD,)KQUXTW]L,HbUMTHOH/ 3ˆÍÛÛÓ¾¼¿ÂÐÁœpc`WccZg¤ØÞØÓÕÔÏÌÊÒÓÑÖÚÞãÝÙÕÎÄ¥_'!$^›²ÃÅËÍÉÈÇ°p96 -#0=HDQPL3* $(%)"#&% %("%#')&,#&    -5Tlm|…Œƒ‚zkbt‡Ž‰ulkjwx_SYieNOdvuY=-0& -     -      -              (%"    - -  -  -  -     - -   -  -      -  -       -  -  :QNC=04:,!(15>DILHEGOA843EMLGYMEMB:98ECKKEDPPVJGKWX]O\^NME>1$&5?LLB>FHGQ^\ZLKB@74* - /A;Voy{Ue^I;+ 5aqrw…ŽŒœ ˜–€X&  .}¤­¶¼¼§md}¦‘’­¡›§­¤š—§ ›¯’I5GZ^WTKW^r©¼™§ª›¤¼Á°¬¾À·±«ÍÔÎÙ˱·ÊÎÕÖÑˬ¢ž–}w‹•’›™Žˆ…Ÿ¢•›¢¢°ÔèæÜÌ¿ÅÂÉÇÉßéèèâÛÐŹ·Ã½ÈÞäêèææååéèééìììëêêèæââÛ×ËÏÕÖßìùýüýþÿÿÿÿÿþýÿÿÿÿþÿþþþýþýúöðêäâãáäçåæèééëëïðòñôóöõô÷õôõøö÷õóóõõ÷ôðíïîîïíññðìéààààßáçëìêåãèèçççæÞÚÖ×ÒÔÛäéëêéêìððñòñô÷ø÷ùúúùùùùùùøùùøùùùø÷÷ôóòïîëêèåçãàáäìóúýþþþþþþþÿÿþþýþþÿÿþÿþþýýúïáÒβwieggtupqXFB9QhpmhT^k^;3T[B&"-+&$*MZ7#'Zn{scj^C&-TbNT]OSF)'IN@Q^deU,CYG>;;2.(#0zÂÚÝÓ½¿ÁÃκ‘fZWS\gZZ—ÓÜØÓÔÊÁÇÌÍÑÐÖ×ÝãßÚÔÉÃ¥\,[—´ÃÇËËÌ˱k?*  +09HIU\U5&$'"!!"%*%#+))%#-    /Ocgo€ŠwncZ^ix…wjcgilk`R_mdMVsiN8% -     -  -           -  #$,$     -    -  -   - -  -  -   -  -     -   -   - -  - @QPK>1044$+3??AHGELPMA9=:@DPLZTKFMC@9DKGFKGNMUOEGYQGPcbUPK2"&)AHNJZZWXSP@>??=- -#"394?>79,% +6Sy‘vOp’}fUL< 6- "2Tqqx‡ˆ‹“ ž™”tU)  1}Ÿ¬³·¹ maw¥”­ Ÿ¢¢œ”˜©¢£³ˆFGEYd[ZV]Vj¨¼¦ž¨›¦±¶°ª¸»·´©½ÖÏÕÔ¿µÂÈÔ×ÕÏ÷«œ’ˆw„•šžœŠŠŠ€’¨ž•¢§¥ÇáåàÍÂÅÄËÊÌÜçèèäßÔË¿¶¾¿ÀÙãéèääååèèêëìëëêéçåáÝÝÓÊÉÒÜáì÷üüýÿþþÿÿÿÿÿýþþþýþþþýýýüôíéåãáàããäçäêêíëîîòòòóöö÷ø÷÷ôôôöõôõôôôöõóòïðîëïïîíëéæãáßàÛÝÞãäáÛÛâÝÝÛÛÞÚØÖÚÙ×ÙÝßäåéééëììîîñóõöùøùùùøúùùùùùøøøùùøù÷÷ôóòñïìëêéåãâäæëõüþþþÿþÿÿþýüûýþþþþÿþýþýüùïÞÔ·Škap{~ll{pJ<=HbpZejijZ@ARVB(%)&'*PY?*+OglVKC9.#'LZ<4MWRM1#JK/8M_hP)CK8,'%"$\³ÓÚλÂÂÃήŠdZUV`]NXŠÒÜÚÓÓ˾ÄÊÍÒÏÔØÚâáÚÖËÀ¦a',[—µ¿ÈËÊÌÉí`@*   - %*78ELLR\D#%$"" $#""!2%! ! )0+%"   +Daion{Œ…hbW\[flcacdgfeXU[odRf†ubO0      -    - -   - -  - - - -     - 10.    - -      -   - - -  - - - -     >MI>489=)7@@@>HMNQO86;A:FKNLMRRE<8:=LHDMJTPWMBDJKGM\bWJF4$*'187=9$&Y©ÉÒ̾ÄÃÆÇ«xacXXc[IN€ÍÞÚÑÑɼÈÍÊÎÏÓ×ÚâÞÚÕÌÆ©W0 !$T’³ÂÊÊÊÊÆÇ«_A/ -  -  ,54FHSR[G0&$'!#!%&&)'0#"$% (!0K]_egknŠ~fdbYXWcQ\^^`h`WMWv]VmteVI4#     -  - -      - -  -       &*)2.    -   -   -   %+-&+& -  -    -  -     - - -    -8GI:-+09+ 0ABB>AKJLCN@728KKJZSNEJ<:=>PPIENNQTPJFQPHINQUF>2+&%/:8=EKIIEJGBGWI=@HA@;*486;:<679) 4Wp’yeŽ‡rl_b[P'cS $8Zmjƒ}…‹˜Ÿ˜•uG" - -?‹¦­¸¼»Ÿufy¤šŽ­¨¡£›•˜£¨±„eF6L^X^\WShŠ¼±—¥ž¡§ž£¬´¾¿ÀÁ¹ÌÕÒÖÔô¾ÊÒ×ÑÇ»±©¡™wo|– ¢œ‘¦¬ š§£§ÒãÕõ¹ÆÊÕÓÓÝáãéáÚÒÅ´´µºËØßàãåèèèèéêéêìêèäßÛØÒÎÌÒáëöûüýýýþýþþýÿÿýþýþýýüþûöîêäâàââáåçäæêëëëìðñðñóôõôõ÷õõøöôõóòòñòïîìëìéêèäææåååâÝàÜÕØÖÔÕÏÐËÈÌÍÔÙÑÈÄÊÌÊÎÑÊÏÖÝÛÜÜÛÜÝÝÛÚÚÛßãæêïðôôôøùùùùùúùùùøúûüûùøùùù÷õöóññïîìéèçáàäéñùþþþþüûüÿÿþþýþÿýÿþþýûúîÊŸ‡sur‡€ttqeTCI`_KAUoh]?/8VWA@Ž©¯¶¸½£m`£ ‘ª¦Ÿ¡š›œ”¢©€W@7G_][YVVf‚²¶•¢£ž§¡¥£¬¶¶¹À¼¾Ø×ÙÜκ¼ÉÒØÕÏûª£†kx™ ¤£‘‘Ÿ´§ž¢¢ŸÅÜÏ¿¹½ÅËÚØÔÙÜàæâÙÒŶ¯´·½ÉØÜßãåçèèéêéééçäàÝÙÔÖØÕÝêõüýþþýþþýþþþÿþýþþþþýûöïæâãáààáääæçèéëêííîññòóõôõõõôôôõöôóñîîîììçåäææäàÞÝááâàÝÞÜÙÒÓÕÔÔÌÄ¿¿ÂÇÏÖÆÀÀ¼ÀËËÊÈÇÕÛÜÚÛÙÚØÑØÕÔØÙÚÝáåêìñóôöõòøúøøøøùûüûûüúúùøøùøõõöóðñîìêæäãßáéïøýüùûýþþýþÿÿþþÿþþýýü÷ݬŒw€†sruksi`BG`jL7A`j]>20JXYKYT@00I]<(%E__effbD'9=1"!/9.3;.98!,/=9@45/'&R¤ÂÇþÅÂȾ˜gXUa\S??c¶ÚÙÒÐÄÅÏÔÓÌÍÏÐÑààÙÕÎȪe4  "M•´ÃÈÉËÏËĪeA7 - -+6@FOS^dP2&"#&(#+))(-,%$#)'( - (#   "Xwp^Y`ov…ŒŠi[d[TFEFSZY_VLLZghU`vsSKBI0     -  -     -   -  @8   -  (   - $   - - -.e‚ˆ‹‘‡vF   -   - - - -  - -   %?QK8,/>3-$&89>GLFDGHK>/-5;CMKPT?CLUZNFPVSNRLWYK=3& )4CEDLGKIKFEANNL?GONJ@+073' 083-3889;?0!7_††p‘˜~h``R9s_/*er/   4`jmv‡‡—˜—kD! -  ;Š©­¶»¿¦mb{§Ÿ®¦Ÿª¤£›˜œ˜¥¨vRD6@\^\XV[br¤·š¡¥Ÿª¡ ¤°¶²»É´ÏÛÖÜØÀµÇÑØÖÔÌÀ³­¡trˆ–ž£–‘Ž’¨±œš¢·Õɹ¹ºÄÓÝÚÔÕØÜâáÝÏÁ¯ ¬¯±ÀÏÛÞáâäääççèçæáÞßØÏÙàááê÷üüýýÿþþÿþÿÿþÿýþüúøõðëäßÝÝÜáàãäèéêêëéëîïòñòòóòôôôôôôõõõóðîëëçäãáàÞÞÚÙØ××ÒØâßßßÜÜÚÒÖÜÛÕÓÊÅÆÆÊÓÔËÇÄÁÅÍÓÏÎÍ×ÛÚØØÛÙÔÊÍÑÎÎËËÑÔ×ÜÝâæéêíðóöö÷úúùúüûûüüûûúùùøøùù÷öõõóñìêèåâááäéîìñüýþþÿþþÿÿþþÿþýýüîÁ•€|†wiaTU^o^GJUT?245FE;*(18==:8/$%//+$).48H=46) #"$JŸÀÅÂÃÅÀɸ•o`[NW]Q?7XŸÐÖÕÒÐÑÍÓÏÌÍÏÊÏááÜ×Òʯe.L¸ÆÈËËÐÉÅ°`9- -!*7DJMTd[N/#!$!#!!%"#,'*)"#$* ""  )Chyl\RNb~‹ygWSZPGGFQZ`bWVLbkdXozcHEHK:  -        - - -  % -     - -  -    - # - - -   - -   - - -6lˆ‘“•œ™‚U- - -    -             (AHC5*.<2#&.68CMKCMIPKA525>BLYVUOIG:8>DKPJHDKQTJF>IMPJITXK?+ !+-:ISPEDTKCBBGSF?GJKM<&*;;8#%6>416:>=D<+5gŽ{u•“qceYA+cœ’Y.Yp/#"  .^oqˆ›¡œ›uF"  A«±µ¼¾¨rfr¦‹¯¬¡¨ž ‘š —¡¢zY>:@U]^\Z\dlœ» Ÿ ­¤ž¨­©§»Ä³¿×Ø×ÜÊ°¹Ë×ØÕÑʹ¬©”{hw‘›£ –Ž¢²œŸ¢­ÊǼ¶¹ÀÍÚÖÒØÖÚÜâÞÑñ¢¡§±ÄÏ×ÛÝáâãäååæäãÜáâÔÎÚäçèòýýýýýÿÿÿÿÿÿþýþþýöìçãÞÛÙÜÛÝàããåçèêííììíðïññòôõóóòòöõòòòðíèèææáÞÚØØ××ÔÖÙÖ×ÔØàââßÞÞÜÚÚÜÝÛÙÙÔÔÕÒ×ÙÖÒÐÓÕÐÖ×ÓÕÙÞßÝÜÞÛÖÐÖØÒÐÊÃÀÆÌÏÑÒÛÝßàæêíðóøùúûûûüüûûûûøûúùùùøøøö÷õòðíêèçäßÜÚÚåöýýþþýýÿÿýþþýýýýòÌ£ƒuh\WOEDEFKG;26.*2&.-5-+(# #"!'($%    C‘³Å¾ÀÈÃʱ‡bW]VX_QG=OŠÉ×ÒÎÒÚÍÐËÉÊÐÍÓáÜÙÙÔÍ°k0 L·ÊÍÏÍÎÊç\?,   %-:GKTT`TF6 &$"#!*%!$! ! - 2PUfmZG?ESjzyqaMKMEDBFVZa`]XUik_apnUBDJJ>& -  -  -  -   - -  -  -     -  - - -         -! - -  -  - -    - - 4l‹‘“™š¢–†\@6002.       -  -   -  )HM?0)07(#%.9:?CG@HHEIC:5/7>JZX\LKI=;=DOQPIDKLOLMCELMKKU[G>3 "103GKLGKLHD?EFON;BIEE9.2=A@?"'<598812;B<$:q‘w~—…lhdiD!V”œy@Ra,! )\qv€ŒŠ’šž›™}EF’°°±·»©pfl¡£«©£¦˜Ÿ“Ÿ™ššuVB82SYXc[`]nµ œ£¥«¢“˜¡¤w–¿¼¶ÒÝÙÞ׿´ÄÑÚØÔο¯§›‡jp–œ›‘ˆ˜ª§“œ¦¦»À»ºº¼ÆÒÔ×ÚÙÙÛÞÝÑ¿²›¡©¶ÆÒ×ÛÛÞäãããååàßßäß×ÓÞæéë÷ýüþýþÿþýþþþýþýüùíàÚÚÛÚÛÜÜßãäççéêìîíîïððòòòõòóôõóóôòñïíêéæâÞÛØÖÒÑÏÌÏËÓÛÝÙ×ÚåäããçäåäâãâäçæçèèâàáÜÝâåãâáÝÚÚáâæääàÞÙ×ÙÜ×ÑËľ¿ÅÁÅÈËÐÑ×ÙàäèíñöúúûüûüûûûüýüúùùùøùúøøùöôñïïêéåáÝÛÚåòúýþýýþþÿýþþýýýõϤke]ZLODC9:370.4/0(,'!-),&,*--!#$"!(- ;ƒ©À½¼½Àʲ‡j]V[]`L:?PÃØÒÊÑÞÒÐÈÉÊÐÌÒáßÚÙÔβl6#N’ºÅÊËÐÌÇäX:.   - $&1;@IRW^O@&$" $#'%#)%##'%" - # 1\vj]OH77:QdtonbTHMDA9LUJ]eYXZikQhzmB>FHPA&          -  -#" #"$    ! - - -   -   -   %"!# -     -    - 4k„Ž”““˜‘‚_JUSNJC5! -  - - -   -  -   - -, - - - -  'DPC3$'$*##.9=?IGCBM@;>84+;GHLW\XFC>;BCS]QMIKGJJNOOXUJXS^L@/##358JINVVLNE;IQWTBMNPB>27<@CE0 ,>3323=BC:+05:0,`xŒwk`; -))   - '_jr}‰Ž’•Ž’~K    G“«¯´¶½¨uee‘Ž£±¨¦Ÿ¥±µ¡œ¤c^J>/H`_[WW[\„±¦—¨¥®¡Œ“›££Œ¤Ä˵ÀØÛØÚи¿ÏÚÚÚÕ̺µ¤š‚wyŒš•••—™—ª¦Ÿ¥¨®Áº´¹¾½ÈÕààÛÜÚØÝÕ¼£—Ÿ°ÂÊÑÖÙÚÛÝÝáâäááãäãæãÙÝëóûýýýýýÿþþýýüüúõïçáÛÛÝÛÜÜàäããäçéëíïðïðññòòòõõóóòðñïìíæåâáÝÙÓÉÇÌÊÏËÐÒÖÖÞãâæåàåñøúûûûüûûûüþþþþþýýùñøýýýýüüüøö÷ûûüûø÷ôïêçáÝÚÔÏÊËÄÇÈÄÂÃÇÊÉÒØÙßâçíïõùûùüûûûûûüüûúûûùýüúøùöóñðïëèçáßÞÝáèñøýýüýýýþýýù丕mhh^UQE8<83240-602*(,%)#%%!(* +'% #" ')),*(&!&i¨¸¶¾Â¾Á¡tYafab\I?KSk¬ÓÎÉÎáåßÑËÄÁ¶ÆÞÜÖÔÑζq.FŒºÊÌËÏÌË¡W=4 *:9=IROP? ## "" $$'$!%   $a‰‘sYTN63JfoibiVQPJ@??PVN[ZRWfqZ[|rRJCHQMJ,  - - '$ -     -  (%#$)%")*),)'     - - - -      '$   -!  1jŠŽ’—–™—†i]^__\Q<$    -        )BQ;&$)31"$4:?ELBGOKDB;.+6ALGPZNEBC>/CJEAJNLK;-7A;CFHC#&6=855AEH8(T[‚’u}˜‰wmhqqiLiŽ•“…va2/# - - -)]lhx‹‘‘–™“{F  K‘¥±·º¾§pgk–œ…¢­§¨ž´½»£•™ˆhdQ/2FVV`\[^ay§®š¬¨« ‰‘¨¡¢ ºÓѺµÒÛÕØÙùÆÓÙØÔÊö©Ž…~‚”š£¤Ÿœ•‘¨­žœ¯ª¶¾´±¸ÀÇØãßÚÙÚÒ×Õ¨¡§¸ÂÎÔ×ØÚÛÛßßÜÞßàåãçèæàæóüýüüýýýþÿþýüúöìæãÜÚÙÙÚÛÚÝáâåèæèêêìíïðññòñóóóôòððíêêéèâáÝÙØÕÑÌÊÎÒÒÕØÝàåêîñòðìòûýþþÿÿþýþÿþþþþýýýýûõüþýþþýþþÿþþüþþýþýýüúøòëèäßÜÕÑÊÎËÈÄÂÈÎÏÒÓÚÞàåéíñ÷ùûúûûüüüüúûúùûüüûùù÷ôõòòðíèæäãÞÙÚÞçóúüþýýýüýù輓paeZNKJA789;8)6@:1.)#%%$44:6:1$$$" *82>--0- 09596,&%,+$.% %6EDAB>=3# W–­®½¶·µ˜vhmZdlia`^[s¡ÃÅÄÇÝãàÐÅ·ª¤µÊÉÆËÐË·y4J¹ÈÍÎÑÑɾžW<+ -(*<6>DQRA, #! #(& # - -   - UŠ˜‘€lgSJ;Vfrp^VJYLH95=QSS`ZZ]inb]qhJFBDQMI5"  " -        #%&"%) '&'+,4/" -  - ,   -  -4        # #"  -     .mŽ’šœ œŒm`eda^X>&   0@:%     - - -(HZE'#)+*&-29AIPOXK=438EAKHHJVPUUER\_Y[_^[QM?*"(4?FBGUVQK>;<>EDLNXPE845;CEGIF?$0?75;EEG4*,C`ey–€rpfzTi—‘}f`<% +Qlqƒƒ‚‹”™m:   H—§¯·¾¼ªyhn”¢…¦¬¦§—®¾¶¦”„`eQ91DU\d]`bbn¦¥˜ª§§©˜Ž Ÿ ¦ÅÚÕŲÁÙÖÓÜ̶¿ÌÖÚÕËȽª¡’€n€—›¨©œŽž©›ž©©±Á¹³´ÀÌÚãÝÙÛÛÑ×Øį¬¶¸ÈÒÑØÛØÜÜÛÝÛÛÜáåçèèèêñûýýýýþýýýýýüøîéâÝÙÖÙØØÚÝÞÜáãæèéëíìíïñòóóòôõòòòðíëéèäååá×ÚÛØØÖÐÐÖÙÛÞãêïóùúüþüøúþÿÿÿÿÿÿÿþÿÿþÿþþýýü÷íôüýýþþþþÿþþþÿþÿþþþýþþüùøøôíãÝÙ×ÖÏÍÊÌÒÒÒÒØÝáßâçêîñ÷ùúúúúûûûûúûüúüüûù÷õ÷õôóðíéêæâàßÚÙÞèòúüýüüüù㸌~laYWJWWI*!(3CGILKPLFFE>DOAFGGD?5!#5;6;=A=:,1Et’ƒkˆ’yptrxˆPs–•]V[= , #Xgn€€ƒ‹”•ˆiA - R’§²»¿½¤qflŽŸ‹œ­§¥ ­¼³¡ ˜}Y_YN;=Tb`YWebc¥’©¥¨®ž~•£¥±ÊÜØ˹¶ÑÙÖÞÙ¾¹ÈÔÛØÐͬ¦›†u~«¤š” Ÿ™ «°Á»²·ÆÓÜåâÝßÜÕÚÙǵ³ºÀÍÒÔÙÛÜÜÜÜÚÙ×ØßãèèéìòúýýþýýýýýýûøñæÞÞÛÚÛÙÙÚÚÝÝáâæäèéêìîïïòòôôôòòòððîëéçæççåäÞÚÙÛÞÜÙÚÛßåèéï÷üþþþÿÿþüüÿÿÿÿÿÿÿÿÿÿÿþÿþýýýõëãäðùýýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýþýþü÷íçáß×ÓÛØØ×ÔÖÛÜßÉÛåääåêðö÷ùúúùûûûüûûúûüüøøøøöòñðîìéèçâàÜÚ×Ûåîøûûúøß®‰€zqeQQehbH?>NXY[MWTK;.09@OHGCHG:'"+GKCBB?E9$.B@3/&:=,!3FC4#"79'/DA/(% 7{œŸ¨Ÿo\_^`_^aWFQX]b~ž±¼ÖáÞÕÉÂÁ±˜—•š¯ÆŲh/8†³ÈÏÏÍÍÈ¿–MD0   %+5BLJFG:'+  ,.,'$ HWfP[heZowlbt|aED>:MMGD,  -    "   #! -   -   -     - - -!  #'#(+,044/:<*     - E - -     !!!#   -  -    0j™Ÿ¡  Ÿ“vea`gd^I0 - -  $ActoR' - -       -    0EN?.%,0(%$/7?ICGCJIB7.)/GH@EBGRSSL]c_a__b^YC?+)/CFVSNXMFIHJKRJFMOCH?76=?DJFFA=.%:6=@@??<:N|”vf˜–~x|xt—‰Lk’ŽjH=RU''" - +\gmy‚€‰‚’“ŒrG   S”¦°»¿Á¨pgfŽŠš®­¨¥¦µ°—–~Q[ZJ4;J__a\dfg•°—¦©§®™ƒ”Ÿ£»ÐÞÙÎÆ´ÃÜÙÛÜƱ¿ÎØÚÔÐDz£ž’yrƒ›  š”ŒŠŽ”¢™¢²²»À¹ºÎØÝáåäåà×ØÙË»¸¼ÈÉÍÕÕØÞÝÝÙØÔ×ÙÒÚèêìòùüýýýýüýýú÷ðèàÚØØØÚÜÜÚÛÞÞÞãäæèéìîííðòôõôõôòïñïëëêååååååäáÚÙááßßàãéïóøüþþÿþÿÿÿþþûþÿÿÿþÿÿþÿÿþþÿþüøíçâàØàêñùýýÿþÿÿÿÿÿþÿÿþÿÿþþýþýþþþüöïèáÝÛÝÙÜ×ÖÚÝÚ¾àâÝÚÛáåêîóøúûûúúüüûùúùûúùùøùùóññïïîêèåãÞÛ×ÕÚåïôöðÍ¡†ƒlX\lycG:=YXLCA/ -  -&4=ELOU7,*,!! %*0(#(  -  $hš¤ŸšŸ›“€qpeZfqvnODHG==L\]R_`[]nqi`zvI8FE@KIJ>*    !#  %# $  -   %#&.-36336234@>/ (&)1%'..$#$'  0   - -   - -    -    !  ,jŽš£¥¤¤ –vegaeaTB+   4MNOVj{vY.  - -      -  -   -  6IJ9*(+&%%6=??GEDFFB;485:ACLUVL:32/=JGGLET][PLW`^ZY]_]XSB.,5>GHLJUILMTQSLLOKXMF=277>GNKLOH9%%(;AB?DHE@dŒo€¥z}…‚‚ŽcyvL:@cZ&+"#Umq~„ˆ…ˆ•ŽqA L–ª°¹¿Ä®sge¥…•­¨¤¡ž¬¨—–}MT[B.0P^UT\fhj”³›¤ª§­œš«¶ÉÛÛÓ˼µÒÛÙÝѺ¹ÈÓÖÛØϾ«Ÿ˜ioŠ–œžš”“ž£³¸µ»¿ÂËØÜâççèãÙÏÔÍÁ¾ÂÆËÌÐÔØÜÜØÖÑÒÖÏÄÑæìòøüýýüýüúöïèâÜØ×ØÙ×ÙÚÝàÜÝàäâãæèéêëìïðñóôõôôóñîëççáÞÛßäååâãæßÜâãäéíñøûýÿÿþþÿÿþÿÿÿþüýÿÿÿÿÿÿÿÿÿþüúóíêãÜÜâÝÚÛÝäìóùþþþþÿÿÿÿÿþÿÿþþþþÿÿÿÿþýüúõñèâÜÛØÛÜÞâæâáÛÕÑÒ×Úàåëòõùùùûüûýúúùùùøø÷öõòóòòñïîêêçàÞÛØ×ÔÖÛϧ‹o|slknq]F=Q^X<51,;KU@+'QW;/-/>O='.JOOPTJLE+*E@3*,6E;$B@3;?6.=9%#BTJBA:=,=m{y‹‹”€jfXXW_b`S^bdbhs‘¤¶ÎÚÙÕÏÏÓÉÈÛÛÔÁÁÄ°n+ %=ƒ±ÈËÍÍÌÇÀ˜N?, -    - -"-=>EKB*'/& "$%++(#   - -,h“—•šžš•…nd`QXRdkiVWTILVTVUXcVWirt\`vgD238DHIF;.    !##!!!&+.'% !$! -   "%$%-!%+-+(6949<::>?FIB6) - -0?OKI`ZHPLKJKGE9.,#   !!   -   - - &")$!   -   -   ('  1jŒ˜¡¦¥©¢•}iib^\U@+ - - (Vkwvnn|ziD     - - -  -  -   *CI9%#! !"-75369CKJRRF;332,#?>-+;;=?8+(;H7+*#"#>nwp™™­Ži[GKHOUeƒbVK]`…¢Ÿ¯ÇÎÐÏÑÐÑÈÅÚÕ½®·Á°l.  ;‹³ÄÍÏÍÍƾ“H>- - -$'5BC::/"+'! !$"#   &jš¥ŸŽŠš•‡sYX[CLDHgi[\W\a`KOLVcZap~nYcva=./:CPM=?0, -   - !##!#&4*#$& '-.450/5.  " !!   !#$ #(*-0+//2+,7<>:<JED3,.8;DQPVRD:513:CKH=KMUYPTRZ\PVXc^[S?:(+BBGMIQOMV\QVWH>[\KE5*?@F<65* - - -    '%&%,*+!&$,5<8/37B<&  $   %# $$*$-70/:5869:@?BOMMRINQL/ (>U__a^cjbaa\PVSLHF@7,/-+1('(.#*     - -   *'(&-0#  -  )352*%%&$!3fŒ—Ÿ¤¨§£˜ngb^\UK6  $[ˆ…vnv~{gd^M6  -        - - -    - .B=1#%&"'%+0@CD@=F=GB6+.9:AHFTH<7-*+:IKEHDJTSMRP\]QY[X]]K65&3>@CKNLKMQ__WRDFXYKD7-9B>@SXNS_XE;$BFFDH_Ÿˆ˜‹ttytb_jŠššwMBR…ˆlI960  Ldq‡‘—Ž‹“›ŽnE  - G¢´µ¼Ã¬u^`€¢“°©©¤£”—”•wKBZ[E:Ic]_SV`_y¬ –§«­°»³—•£Ÿ¬¾ÚÜÕÉÀËÞÛÞÖÅ·ÂÑÛÙ×É·¢˜–uu…™  ”’ŽŽœ¬«´®®ºËÕÜÜâèèèéäÓÆÇÂÁÅÈÏÐÑÖØÙÖÑÑ×ÒÄÅÅÆ×éóööñèáÙÓÒÏÎÑÓÖ×ÙÝßâââåååæçèèééìììïïððñðïïíæãáÞ×ÖÛÞÞÚàåëéêìëîóøýþþýÿþþÿÿÿÿþþþÿÿþÿþýÿÿþÿþýü÷òîèçèæåçéáÛåææååââäáàßâèñøýþüýþÿÿÿÿÿÿÿþÿþÿÿþþþþýþüöîéæååçæáÜÚÖÖÕÉÂÅÌÖßèïôùùûûûúøùùúúúùøøööõõ÷ôòñïîìêæâÛØ¿q`nkfegfZebJ?BP^S63:DMF438GS;53BYQ:(0FTF5836/)NI;82E@, !4:'*5;=<$,=CC84460'R`¤¦™¬´¿yfifod_T46;AEFSi}|Ÿ­¶µ´¶µ´§«¶º®Ÿ±®p1 ?}°ÅÊÈÊÉź”E:67/4F:,(,'#   RŒž¤£nisŠ‘gNLOKI>G^o\UaavmUJ=Ocg`ln[UhkK38638@F:18(   "  %! !"! !*)%/2125:=B;/ -  -#&%+  #( !%(/++.723:A9BA=>LKPKGWOWVG-$;Qdcihkikhgea\bUME?460-*/+""2.   -   -   +, "('')0 "$/=KNPNPKMD5(9k‹•ž ¦¤¡›…jefc^SJ=('_ˆŒˆyttyruseI- - -  -    -  - - , -/D@-!(%"+/5>FJA>A??74602>=GEKG7*.)+>EKFCALPQPGRc_``bZ\TF0 #5@ECJNMCP^b[YSJNRVRF6.9FGAGTWPXbYF1#*;  - K‡£¬´¸¿°ydep§“¬«©¢›‘•˜–ŠhNGN\L9@^Y`Z]bd{§£–©©ª´¾«˜œŸ™³µÍÛÝ×ÃÆÜÛÙÙ̹¾ÊØÝÛϺ£™¡‘~q~  ”‹š­¬³«³ÇÕÚáÞãééééçØÄÂÄÁÆÌÏÏÎÔÕ×ÖÓÓÔÊÄÌËËÓáÞâßÕÍÉÊÌÎÑÒÑÕÚÚÞßáäææéèëééêêëëìííïîîðïíìéçâÝØÓÎÒÛÞßÛâèìííîóùýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþýþý÷ñíêëæêëëéèéãâäæääãáãèèäÞáààåìñòùþýþÿÿÿÿÿÿÿÿþÿþÿÿÿÿÿþþüøñëçææâÜÙÙÖÕÏÅÀÄÍÒÚãêñ÷ùùûúùúøùùúúùøùø÷öùöõóòððïëéåßǘdbfmaT]OHRaL>EMi{u…”••–šŸ›²¼¼²Ÿ­¬l- 2€°ÅÆÆÇÈ·ˆIE+ - - !2<=A.('!$,'-'   &$Jƒœ§«Ÿ…hfe{ŠtbJKaOJAEcmYTZhxqO;BWaaoxgMZnfF64/8=3 - -"!""!.' %#$$&/-.*&,.-2874<49?OOPLUTXYXXL/,@Pjsomrknkh`a_a]ZKA<:6-'*$* %!    -  '%' #%"     %DSdcaefig\MCGp’™¢¥¥¦¢ˆsghbfYJ?85('%$ '%.]„‰ˆ}u|ƒ}vri[9 -     -  -    -    /GD/#&)&)27:CNIBCBF?370-:FLNSF4--.6CJKOK@G\NSCQWedWXYbYP<+0??>FJOPOZaW^S?RYKGB:28AIKI[VSVY[K72'!7CCOu–‡yŽ•ƒtz…xbcŸž||…sƒˆ}Q+((.% - -  P`t•’Œ’’t< - C‰£³¶»¿³ƒlfo£•–¯¦£ž•–“•”‘gJ>F]E9A`e^eddci–£Ž¢¤¦°½¤–Ÿ™±¸ÆÚÝÜѽÑÜ×ÛÖ¾¹Ê×ÛÚϼ© ¦Ÿ‰wpŒœž–‘ˆ‹œª¨³±¯ÆÓÛâáäééèéçØÄÁÆÄÆÎÒÒÐÔÔÓÏÏÖÏÁÈÓÐËËÏÄÂÆÃÀÄÊÊÏÒÔÙÚÛÝÝâãçåèééêêêëëëìíëììíïììéçãÞÚÚÓÏÏØßßáàçìðíð÷üýýþþÿÿýþþÿþþÿþÿÿÿÿÿÿþýýýþü÷òíéêèèêêëëìëëçåêééææäæèêçãåãáßÝÜáðýþýþþÿþýýÿÿÿÿÿþþþÿÿÿþþþþùòëäãÜÖÖÓÒÔÌÅÆÇÈÐØÞäíòøùùøúùøúûùúùù÷ùù÷ö÷óôñóóïëèæË›ia`e\KMBDVXBB;DKR^YUGB6//2IIVORJA2&#)9GFILI>A/$,6)$23 %"$ %6>823%j­­³°²¹”vhgqnueQ;5@=7;7BLCFIJ0 - *'# )#"")#&"!6%  ("")##%++(*2510503-)588FVXT^]ZZ[T5*AWgsnv}ypfaf_][YUJA996$&+1.)%     -   -   ##   - &E^g_ehmke_ZW\r›¡¡¥££Špjjif]QE‰ ´¸»À³—rev’”®ªŸ™šœ••VF::HA;@Zh`^ab^a¥“£ª¨ ¢€ˆ¢¥¯½×àßÜÄÄÙÖÙØĺÂÐÚÜÏò°«¦›ƒt‰™›‘’‘„Š–¨¤ª²°¿ÐÛããæêééèçÛÃÀÄÉÇÌÔÒÒÐÐÎÉÒÒùÆÔÒÊź·¼À¾ÀÇËÌÐÕ×ÚßßáàåçççééëêëëëíïìíëìëëëêèåàÛÖÐÔÔÕØÜãäæëóôôñøýþþýþÿÿÿÿÿÿÿÿÿþþÿÿÿÿÿþýý÷õöòðîìëííìêèêêììíéåìîîêççèééêéêæãàÜÚÙãñûýþþÿÿÿþþþÿÿÿÿÿþÿÿÿÿÿÿÿþüøðæÛØÕÓÑÔÔÍËÃÄÉÉÑØáéðôùùüûùûùúûøùøú÷øøùõôñòõòïìéÏ›fb`_PIBQ>NG@<;86:.'58;D>;0#%(+/4/09207'!$(&# "!B-!&oª³±²¶¸rpijrpaKA3:<8Oe²®¬¶¼½¿ÂÉÅÃÒÔÇ«—›™c, 4y°ÅÆÈÃÂÀ²…>G. - - #1@>,)&'#"$"%$&+#!   - !2rš£«­ª–p_WWUflfRUccQ@I[caW^e]MAHQdbhffZSchI10.543>@815, ) -    - #%",/5649:47>AAABSVK?IMLKYKK>$&.(,263/,1-,)1/(-*-% $%+"') $!#".(("%&%)).00;EU[[_XU[SR8+E[mov‚y€|xsjkb_e\[K@>>/23/$"C  ! - -   #$"    - 1E^fY]fkmkfega€‘—›œŸ¢¥ˆtolkj]QI:BSU_\WZefnƒ‹‡|††{sxpiJ.  - -   - -    - - !#06103,/     8FM7"!(/&!(9>A==OYID?:;15;>BL]]G?7581FGIMW]\[^PGHZ[NE8/=AIHZYPS\ccWAC=),>Qx‚p‹—Žrn€‚skƒŸ¤ƒbxŽ—Žƒ|H$')85 Bev“š˜–ŽŠŽ’sD -  >ˆœ°¹¹À²›|k{£›Ž«¨ ™˜¤œŽ”‡S;ACE13>[`b^ddhi°–¦ª«¢Œ•„‡ª¬ž ·ÒáäãÍ¿ÖÛÙÝÎÀÀÍÙÜÔº³­¦¡‹m€Ÿ™’Ž’“¦¥¬µµÄÓÛæãåëêêêèàÎÅÃÈÉÐÒÐÓÑÏÉÎÔʺµ¿ÎÍɺµ»¾¼¿ÄÉÏÔÔÜÝßâäâäééèèêêëêëìîïðíììëêéæäâÝÛÔÏÐÕ×ÚÝãåëò÷úøùøüþÿÿÿÿþÿÿÿÿÿÿÿÿþþÿÿÿþþÿýûîêìéííìðñïîíëêëìððíèìîïïîêçèçêëìéæãâÝÜÛãïøüþþýþÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿþþûñæÛØÙÖ×Ø×ÍÇÌÄÂÅÍÔÞæíõúúûúùùúúúøùùùøóõöó÷ö÷óïñìÓ nYVUZNMMGHEF7??AA7G==6563-)63-5.5)04,/,+/,(&+)# ')'-)&'#!&!$!""+!!#)' COR)46aª¸º°±³’{oruhkfK9=65=Ne™ºµ¶ºÀ¾ÃÊÎÉÂÑÚʯ““”a%1z°ÀÆ¿»½´‡=@.    "&2<-$0*'$-# )3() #)`—ª¬¯±­j[POWcie]Zd]N?LWXbQEW`XICSe``pfQOg]:.%1411>;624'  - - %&#"*3.95>=@7DD>;@@788596;>?>A>@>DB@EJJLGGMSGKTONB77X{n8CIKh¥ºÃµ®±˜…{}iel`B:76>ARZš¸³´»ÀÃÉÌÒÊÁÏÔÈ«™”e)< ,o®¾¾»½º¸·†@6+  )68""!!!#'((#   "" X„¥±¯­¬¬”pW@B^lcale^XH4CejeSATog`N\j\bneMZgT:-06-4866484$ - -   - -",*-67?9:@?AIG>BIEQXSSU__RHFRN@&/M^_€—‘rss~|}‹–Ÿƒ\g‰’’‰sL-%(C‡žj' Ffv’™ ”ŠsB# - - Oˆ®½Àãwˆ„z œª«¯­Ÿž¡–—†\[\kmS92S`aacefo†§™›¦®Â¾¡‰~‹±³™©ÈßããÚÅÃÝÛÚÝÕ¿ÀË×ØÌÀ¼¶®¨œ€y’’–™Š‹ž«¬¹¿¹ÊáèãåééëìèâÖÌÉÅËÐÔÓÏÒÉÇÓÅ·¹ºÀÌǽ­´º¿ÃÈÍÒÖÛàâæçèèèêêêìííëíïðïððîììëèåàÜ×ÎÉËÓÚÞãååìñöùûþþþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿþþþýùöñëêèêîðóôôòïìíðññòñòîéíñóöôòìéëëëîïìíééçåâÞáäçìóøüþþþÿÿþþÿþÿÿÿþþþþÿþþýýüù÷ñëèâÜÚÕÕÒÈÅÆÍÔÛàèïõùùúûûúûùúùùöøøùøøùøõôò᫃s{yozuvxwpotrxsrpnposhfidiinfktpn|rkotptqpqurnrpkfmrtwtztqtsruyvvsuorpswshVDBWg:@AFKt¯»Á¹¾»’ƒ€oieYG;87@AQ\—²²µ»ÃÇËÏÔÈÁÏпš—š˜\% A9HDBCPSZ_YZdhilrs]1  -1=B<BX_a`bgehm_= &8Qhy…„‹}sxzpsqqor`WSOAHB83*,*"%!!    -     / (!   (  "198H[ixvunptr‹–œœ¥¦£„pmefgdVH?CNZa`_aiswˆ‘‘ˆ~{‚‚vd`cej\J@<=<'      )175?9>EKLE<=1 -  - -  - 9G<-"&$%*/5;B:@F?CH?9645@?C\bPI@2/$HIL\ZRYd_MHJQQS>+?B-.(",0730{QSSLJPTTLU`XUeeerndmlcA*! .Nj„‚€‰††Š‹ˆyt|}ng`SRJE@9:/..'%$    - -  $'!*" +5     -  -)*3Wqq‚}uqwpx™¡£ª¬¢ž‰odbde`TG>=HUdd^]doy‡Œ‹yr‚~r_X\epljry€v\2   - - - - - )827:;19A@>@52$   -   - -6?:' # %0:<8]r•›¡¡—‹ŒŒt? - -  R¡«´¾Åª_fœ¥š«©¯³¬ªœ—˜„j^hot]91A__gdgfdy¡¡˜¬«¾Ì¸ª°‘¢›“´ÐÞããÝÊÊÜÜÛÛϽ¼ÊÔÕ¾µ®¬£¢™}Š˜–œš––Ÿº±°·²¶ÔæàåëêêëëåÛÔËÊÑÓÑÍËÆÄÏÁ°±¼ÃÇÉÿÅÉÉÏÔ×ÝÞáãæèèëìíìíîñïîïîïòîíîììççåßÙ×ÛØØÛáâæëîõûþþýþÿÿÿÿÿýýþÿþÿÿþÿþÿÿÿþþþþû÷ðîëíììîïðñòóô÷óðîëîïóøöõóîéîññõõ÷ôòêêííïðïîìíîìëéçåäââåèìõùýþÿÿþÿþýüûþÿýþþÿÿÿþÿÿþýýùòëåàÝÛØØÙÚ×ÚÜâëñôúùúûùûùùùøùøùøùøø÷ôæ¾™”™—š–ˆš ¦  ›“œ•”›“““™™–ššž››¡¤¤š–š‰Š}{ƒ†…„ƒ…ŽŒ†Œ‘™—•ˆŠƒynf_fsou ÐÊÈƹÀ³znqgonZG' #)%""'#% *'%  -1m¡««›—••†rodMI[USSN^aa\``\_igLe‹—Œo[aa\_iSH[W8.#)+%(17-  "(# - - 4<=GD=8>=@IHLRSQKOZ``khozz~~„{i< (?N[`gka\ce[PSNTOVQYTUI;FFPQF:=EPC722:;>KZZSKY_``V[R[LA.##:GF]nHDIL[`TV[OTfVNJ9-:BDALa\[^_\RAH\b]R?;L|œ†rngm„yŽ‰oNQ‰“‰‹€RN_B:s§ª£Ÿy;;Yo’ž ž“ˆm= R“œ©±½Æ³tW|¡«ž‰¨©§¦©­˜’–‡msuxye<-7^deefggt¤¢—¨±Åε­±¦–•š‹¡ÅÚââäÓÁ×ÝÚÜÔûÇÑÓž²«¤£›‹–œ”›¸·¬­¤£ÇßßåêêéìëåÚÕÍÉÌÑÐËËÆÎϹ±¹ÀÊËÉÂÆÍÐÑÔØÜßâæèêëêëîîíïïðîïñïïñïíîëéåæâØÙØßãâáçêïôûýþþþýþÿÿÿÿÿþüýÿþþÿÿÿÿÿÿÿÿýûøôíêëìîîîððñõôô÷÷óðïìîîñôöõòíæíññôõöõñíëîîîððïïïîííîëéêèçâãããéóøýþýýþþûúýþýÿÿÿÿÿþÿÿÿþþýüúòíæâßßÜÚÙÜÜáæêïöúùúûùøùùùùùùùøùù÷ó韛 £¢¡ž¥¤§¥¤š‘“˜¢¥¡ž š•™™—™ž£­¬©±·º¶¬˜”‹ŽŒ‡‡‚‚„†„`{…•¦¥Ÿ®¹´³²££¶¿Á¸«Ÿ˜“¨¨§ÇÚÔÉÆ»Á¯‰vumgaf[QF@LI[^V…¨««¿ÇÃÄÈÌÀºÆŲ~`sZ* - %c¤¶´·»¸·«x<; - -  ,'&(" %'& !! -(d˜¨®¦™˜š’zabRDM[TSNI[og`UQ_c`bTkŽœŒjab[\f_OThP5.& $&#()2,*  *   ,7GIFHPKSR\UZ\bgcqmmnrpwz€†ŠŒ‡{F $.@_kmipojupnijhensijdeYUT[_^XNDO\OF;>:7?@ETWINRSQEDHSQIGIEOTUU]hqkJ% &Igv…Œ“‘‘ŠŠ†xytliZ`WTLGA9,##%$ -   -  !$*!#%%    +;BEK_owytyvx˜ ¤¥§©¢Šnedhmh_NHOX^``XR]gsw~‰sn€Šwidnyx‚Ž—¡œe9& -    36=?==CDEB832+  #    - - -?J>&% ,4876F=@=AD<0(1,69MXVXOB4/3=DLDIDQX`KQX]YTS_XXQC1$+9GIENKGGIQ_V\aJSaVPN3,;EACJR[]``bQIS[]ZSA5Ex™}ljbazƒ†xXKi“‰pBQeGA“¨¦¡™vA  ;Yo‘œ ›–Ž‡‹o@  -X—­¶ºÄ´‡Zj¯ªŒ¡¨ ¤§¯™–“ƒlzo}…gB.5Vacfefrlœ¨¥ªÃ詪ªœŸŽŸ¾ÕâãåܼÍÞÚ×ÚʸÃËËÆÀ¸·¨£™–—“¢ ˜“‘¨¶£šŸ¤¶ÜÞãêêçêëäÚÒÍÊÏÒÌÉÆÇÒ̺¹¶¾ËÐÅÆÌÑÔÙÚÜßãäåêëëëìîïïïïòïîððïïïìêåãæáåÚÖáæäæêðôúýþÿÿÿÿÿÿÿÿþÿÿþüýÿþþÿÿÿÿþþþüùòðíéìïññóòòòóõöøùøóòîëëïóôôóðêæììíñóóóððìêîïñññðñðñðïïíîíéæçåááãçñ÷üþþüöôúýþþþÿÿÿÿÿþþÿÿþýþþùóñéãààÛÜÚÞâçêïöùøùøøùøúøùùùøùùù÷ëdz»À»¾¾¾½ÀÇ¿¹±¥¤«µ°º»°©¶±ª¬­­¯½ÉÓØ×ÛãèáÌ«˜‘‘’œŒ†„ŒŠ€ro‰„Š•®µÂËƼÒÝÚÚÕ½¾ÕááÕÉ»¬­»ÈÌÈÖÞÓËÄ»À¯‰umffZ`SNMTY`aXUi“¢ªª©­²¢›§¬›uŠ’vV" - -'` ±³··¶¶¬{A0! - -  - ,(%#!&&$!    #!S‘¦°®«¦¡ŸŠpdaUIBNVTQWbvpjZM_\SWUl˜•m\^]]pYGclQ9(*!,.$3:.  " " 6@YXQU_cehurirrrx}‚Š…„‚|…‰Š‡xH - #+F_m~{tuv~vv{‚vv€„wxqnj_Z^a`aSSTdWCGFAENOPJFBBE9>:88>?79=CFNLJfjlhI!$.Kfu†‹‘‘Œ‰…†…€yxsm][YVLGA;0#)3,  -  -  -  &$(!! "    !.BQa]dkrrurpxu}‘š¡¥«©©£†nfdgji[LJZX]^b]VZlsr„op~‰}jbiy}y‚š§£˜zS:$ -    !;>?>?;DMTMC831!!$ -   =B=+ !%/445=E=@DFC>4/%-7>GQQQP=20.@KPBDNJLUJMW[YS\LOTJG2'(7EB?L@>COS^X]\PPidZJ6-=?F?JJTZ\ZVKJOU]WXA'-Z|eci_\xŽŽ{bRS•|~aAPS@c—¢šš’wF  ;Vp‘› ¡ž–ˆ‹rC  -!\¡¯¸»À²švU`Ÿ£ˆ£§¢©®²¤šg|~…\8/1E=?>CF>IMLYersiI" %')@`}ŠŽ—’ˆ|„…vvlbRUUWKA90'0-)$   -  - ##-'#$!"*"  #3F\cefortusmlhw–ž¤¨¨©¤‡m_bfif\MISY`dgcdcntx‹…wq‡€k[bpr{ƒŒ¢­¬žˆbB-# -     - '>@A>>AAS[WL=88&! - - - - - 3;0"#%1;98B=MFEA791(,7DPOONG<:6-:JPCFHLJUCLZU\UUOTSJ7-)HI<>KN\[^UWZ`^SC<,3CC9DLMQ^`SLILT_ZVD)2KZajoel‡_[Ua“‘morS=QYYƒœ‹‚ŽZ(  8br‰šž¤Ÿ‘‹Š‚e=  - V•¥±¼¼À´¥‘aRx™‹£©£°º·¤™”|dz~ˆŠ^929Wb`\hmgt©¦¯¿Ìº¥«¸¯Ÿ”¦ÃÜåçææÒ¶ÌØØÚÙŶÂÅÇǽª–œy•œžŸ—Ÿ­§š¦¥§ÃÑáêçêêëæÛÔÌÐÎÏÊÉÈÓϸ¬¿ËÌÊÉÑÕÖÙÞáàçéèéêííëîìíðïðóðîðîðïîëæãäæåäåáäêïõùýþþþþþþÿþÿþÿÿÿÿÿÿÿÿÿÿÿþþýýü÷ñîìíïðïòóóó÷õ÷ööôõôôóóòððêéìîïòòïèßéðïíðòíèçêéíðïíîðïñôòôöõòóòñðîêèêäßÝÜåäãßæõþþÿÿÿþýÿþÿÿþþÿþÿþÿÿþþýõðèèèãâãèæèîðóøúùûüúùûûúùùúøõñóððññïïðïëëêãáßÜÙØáçäÛ×ÙØÐÍÒØèïñòñõøöðåÆŸ˜¡¶®¡˜Œ’Žˆnbq…Žœ²ÄÑÖ×ÏØæçääÕÈÜåêëèÖº¨¨ÁÏÔÌÖßØÎǼī~plfboqR::O_M)#-8k–}R   W˜°³¹µ¼´¨w:6-   -",'$/"("! - "" ?‡¬¯´·¶­«¢—‚d[fONBJQU_fc`ufeca`KUVj‘ˆ{g`WecKLbc4<98F=<@EBDQENWuxzqR.#,1:^vŠ“’‘’ŽŒ‰ŒŠ‡ˆ~vj`^_VH?840+*()"     '!'%)(-%# - - -  - 3Ifofgqqsrqpss{˜Ÿ£ª¬©§Žldiimg]LEJQ]flea`jpt‰‹€pw‚…qXZnt}‰ ®®¦iG+"!  -    - -.>>>??DDO_XID?<+ - - - -5G7"3!#"&15<@H>EG3*)/6@MOMBE=365AIONSFHNICK[WSMUNQZH6."&-?@NPQXfWVJEUW^VF5!.)1Xnxnd€pYXSr—jfeE8_oŒ›  œ’‹‚j9 - -  T˜¨´·¿Ä¹ª |V^Œ’ §¦¸Å»¡—•…k‚…e?*3U`cT^dbrŒ¤“§°¾Ë¿®°¹²¤¢ÁÙåèçèݽ¿×Ø×Ø̼ÁÁÀÈÊIJ ¡‘~}‰™š¤™™§§ž ©ž²ÇáëèèêëèÞÑÍÊËÏÈÆÎÕɯ´ÃÑÏÎÓ×ÜØÜããåèêêëëíïîïïïðòóñððïîîêêèããäâæêèèìóùüýþþþþÿþþþÿÿÿÿþÿÿÿÿÿÿÿþþþýü÷óíìîîïðòôõõõö÷øø÷öøõòðïîíîîëéêéëïñðëäçíïñññìèèêëëíëèèììñôòõöôõôöôñòðîëèåãáÝØØ×ÞòüýÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿþýüúóíèæçæáÞãêïòùùùùùúúúøùøúùùöõõôòòñòòòðîíêçäàÜÔÞêæÝØØÖÐÑÐÙéðóôôøù÷ïݹ¢œ¥º°Ÿ’Šiox‹—»ËÓ×ÕËßèãåàÐÒâéìíéÞȱ²ÆÓÍÆÒÞÔÈŻĮjph``b]GFZcL" "&]”xK  - T˜¶¸º¶¸¶©x9<* - 3+"/6+#$& "! A{¤®²²¶·²®¡tecZTGWOPb_^egnla`TJUZt•‹pa^\c]IShT7&"##'1$  -  - ! %Fdglosx„‡„ƒ„‡‰‹Œ“•“‘—‘’•—š—’|Q' (7Pl„‡€ƒƒ‹ƒ†ŽŒ‹‘‰‡j^Y_`ZT]huicPOTVYP\QAE:@@KEBDDAJKOZ]a]lqz|lO(!/0>Vp‡Ž’‘““‘ŒŠ…|„tmib]WL>6,817+ - - - -  )#$(+*+#!"!  5Ujvkimsqqtv|~€Ž˜ ¥¨­ª¥ŠomnookbNGFGXdjfb_gqnu‡€vy‡‚oSMdvy~‚™¬¨£–sL0! -  -  /?><<@@GJSRF@>8'! (&    =L:%("!&325==8?CBCC0+#,6*4@@GH@DLHQKFGKQIJFKTMH,'6?CJAJJFSK\VTUPO]VPI4,4A=?KQ\XW[ZUOHQ\_UE0%3"6fˆƒkSN]r’—u]cW057Iv’ˆu\duujM 5Yq‹”šŸ ™“~~d@  [›¯·»¿¿³¬¬—p[c’ª§¦µÃÀ¡›•|n€‡Š[8-1E]bfefaV{¦—¡¬µÄ©“š¤­«¢ «ÃÝçèéèãÒ¸ÂØØÙØúÆÈÏÏÉ»¤–—Œn‚—œ¤¡›‰©§šœœ—¾âéééìêåãÔÏÌÐËÈÇÑɺ¹ÇÍÒÓÙÝàáãäæèéêìëîíîðññðïðïññïðîéèãÞÛÔÙåééíòúýþþÿþÿÿÿÿÿÿþÿÿþÿÿÿÿÿÿþýûùöòïííëêëîðòóöõ÷÷÷÷øøùúùøõðìììêççëíêçççèêëêäèíðïïìéèçéêëíîíëëêîóõöøõøøöõôõôôòñíëêäàÛÙÛÝæóúýÿþÿÿÿþÿÿÿÿþÿþþÿþÿÿÿÿþþýúóíæà×ÔÙàéîò÷ùùøøùúùûúúùøøùõöö÷ôóôôððîìèâßÛÙèðêãÙÕÓÒÕÚæòôóóöøïݽ£”—¹¸­¢—Ž‰‰ˆsio„˜°ÇÒÙÖÎÙææåâÕÔçíðòðíâÚÓÊÊÍÁ¸ËÛÒÍÀ¹Á£|niea_XKE[ymK% W - - "KnS8  Q–µ»»»¹·¤u=5   #!4/+%#-!&"# ! S‹¤¦¥¦®¯±¯¤šŽ„lgfcedSKVWZf`U\MUZKHa‡™†kfX\gb@ScJ. !#+,#  - - 0^q‚€~††Œ’“””—œ™›žš™™œ’œŸ Ÿœž“Y% 02N|–œœ™””“’’ˆ’‘‘’˜†a_Z]Whfr}skXZXKZ_bjhe^aceebfuvxwxxy€€‚…‹‰sa9*23=Mqƒ‹Ž“”›–Ž‘‘‘‡€{mhdZ[RB=52/1)  -   -  +'*5-0(+,')!)    (:Xknfgpstsu~Œ—¤©¬¯®¥‹shgmqif\WSM\cega\crrw„{t…ˆ}\@Gcrz}Šœ¡¤oK1"     - -!/8;@6;BDIFA=;6(  -#GL=-#*.&#24::B@?@?A?81.-7AMQSE;-&(4?CMCE@BIJH@LVVVINRVI<$)4HHME:>IMSQRUMJVb[HH9.:CAJJMQ[W[XQIHPX^W@2('0lrWPWmŽ›—gQZA.;V‡§®ŒmJ4=V[;  -/axŒ“œŸ™…x_?  !S–®·¸¼¾·®«¥“lW®ª¡¯À¹ —”m~ˆ’[:+2De]ecf`[z§› ª´Á£Œš˜  ³µ¶ÈÜààÞÝßÛ¯ÉÚ××É·ÀÇÌÐ;¸¦›š‚v’œŸžš–˜•§Ÿ’œ´ßêééëëæÜÓÌÌÍËÇÐÑÄÃÏÏÉÓÜÝâãåççèëêëîîïïðñïïðññðññïìèçàÛÚ×ÔØéïñõúþÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿþýþúóêçæèêëêíðñôö÷øøøùøùùùúùùùôïéìïîîííðíçåäæççåàåêëìêééëëííííîîñîîðòòôô÷øø÷øø÷öôòñððïêçäãÞßßãéïùüþþÿÿÿÿÿÿÿÿþÿÿþÿÿÿÿÿÿþýûõìäÛÙ×ØÜæëðô÷ùùùùøùúúøøùøö÷÷öööôòñðîìæÝßåèìñðéÞÓÏÓØÚéò÷óô÷øê̤”Œ¨¼·©™–ŽŠ‡xnoqˆ˜¨¼ËÙÛÔÎâçæèÞÒàíñðòñïçßÜ×Æ¿¼¶ÉÚÐËÀ¾Á zlfdbk^K=h„}S!5^ - - - 9SB* I˜¹¼¼¸¹²¬n51  -,/-27+# &$% !  @”‘–™¡¢¡ ¦©©¢’|lgkspr\Qa][_^_a_ae_T_|˜—ˆk\UXeSC[a@'!"# %.    " #,Wmƒ‡†ˆŠ‘™˜”œ™šœš  œŸ¢œ›š¥¦¡’a+ - )IWPG7!!%)EIKAAB>OQGJOQTKQKV\K5""&:CHOG:@KNUWRYMJW]RON:,=@FCDJVYQ]ZMHMMQ]^G5MZNH]}”–oYG.,=ƒ±°²‘xS*?O' 0_z“™ ¡™…v^7 - -  ^™®´¹½¾¿µ®ª¤^c˜¨£°»±’‘zo{Ž‰_<,-Djeaebdhp¤¦¡¥°¼­£ªž¡»¹¹ÎÚÙÙ××ÜÝж¾ÖÙØϹ½ÆÉÍÑŽµ¨‡pŠ—ž¡ž›œ’š¤š’‘›«ÙêéêìêçÞÓËÊÊÈÇÑȽÍÕÌÆËÛáäåçêêéëìíïïðñññïïñðòòòïìéäâØ×ÖÛØÞëõùüýýÿÿÿþÿÿÿÿþÿÿÿÿÿÿÿþÿþýûõîéçæçéêíïñóó÷øøøøøúøùùøùùøõôïéêïðððïîíéèææèååÝãéééèééëìðñíëîïñïïðòñòòóø÷ùø÷øöööôòññîìëèæçâããæêðöüþÿÿÿÿÿÿþÿÿÿÿþþÿÿþÿÿÿþûóëáÞ×ÑÓÝåìóôøøø÷ùùùúù÷÷ùø÷÷ùøöôñððïìáÙÜçññðóðàÖÕØÙÜêóøöõö÷éÚŽ¨¶±ž•“…„wnp}‘¢·ÆÏÙÛÎÖèéççØÓçîññóóðçàâÞÒÄÆÄÏÚÐÊÅÀ¿Ÿzqqi\gfPSˆzX" - Y -  -$;7% 9”¹¹¹»¶´ªd01# (=54=4%"))$!  -! -Afx‚‰‰’™žœœ£¬©›‚bjuwveaga[binnifgcU]u‘’‰i\VR_HB^d:("")2#  - - !"+Wj‰ŠŽ—š•˜œœš›¡¡Ÿ£ ©§¡Ÿ £¡¨¦¦˜c5 -,>Tƒœ¤¥¦¤£¢§¥¦ ¥¢ŸœŸœ›Š‚~ƒƒ{|€{xƒqfXX]Z_cehkeipipw{|}u€|s~~ŒŽ‹ŽŒuY+##.249[t””—•“—˜˜“’ŠŠŠŠ‚wthhiYTR<:70- -   -     ,,2**,3$&!&%&! !  !<^ljhqs~{rt||t{‹–¤¥ª­¬§’unmihkaY[`[]afd`\_lqs€ˆ…xox„xaE8Kkw€Œš  ›ˆ`=(  - - -  -04A=40;?JILH<80  -    EM9"&#3=)980>?BB9>2,'3?>==91,15BQQJ@5+.0<;INB8=>>ACLRSRUPQ\TK8.2@IK?bb{†–”••–”‘’—Žn`w€wi\Wmd\Z}ˆvneffVav—€g_W^]GLhQ-& ##$ -  !"!)[q‚‰–žœ¢ £  ›œ £¨©­¨®«§ª«®¬°°¤r7 +?V—£©¨««¨¥©­¥§¨¨§ªª Ÿ•||……„ŽˆtaXb`e`e\ahjiekqnbx|‚y}†ˆˆ‘Ž“ŠwV1 *53>Wz‘’š—”–™˜—‘‹‡†~rkd_]NB8;5-$     /-+'.')3,'%%#+&$$#%!  $9Xbhfjuxrqqu{{{ˆ–Ÿ¢¦«­©uc_]_YXSNSYWafca`itrt‚…zou‚pJ27]uux„˜œ¥©†^=#  -     - -$38>:7>DHJBBA:99/  -     -==) &)58=DA>>@<;7(4/8MU\TE;,,50=NM?<! d™®¹¹¼»·¿·©ž•‰bN{¥¤Ž†‹}z„[3)&7]jebcfkk–ž™­§³°¡¥—“ž£¥¯ËÌËÑ×ÖÊÂÅκ¸ÐØÕ̽´¾ÉÑÔĽ°«¡’‡ž ¦Ÿž’ŽŽš“‚†•¶àèêêìéßÔÍÉÉÊÙÞÏÀÇÈÃÀ¿ÈÝæççêìíííððíïðððñðïðïîìçâÙÓÉÌÏßæñûýþÿÿÿÿþþÿÿÿþÿÿÿýþþþýùôìêèåäçæèêìïðñôõõø÷øøøùøùøùùùùøùöñðíêêëîëééêìëíìëêêæáçêìïîêééëëêêêêëêììëëíñòô÷õ÷÷øø÷øùøøöõôôòðñððïèæêéèèççèíóùüþýþÿÿÿÿÿÿþþÿÿþþþþýüõçÔÎÇÏÜèìïòòøùö÷øøøøø÷÷õõóññðíëæÚÑËÕçðêî÷òéâÛÛäìöùöòòêɬ–¢¨¤ž˜‹Œ‡zpoq‹•´ÉÓÚÕÎÙééçâÑÏÛÙÞæëîîðëßÓÕÐÊÓÑÖØÏɾ¿»›whhfda`€Ÿ—lHI'    - - 8†´µ´º·¸ªk31 -   B)&$;4+,(#+($     - - @Vlz…Œ’›££¡¢ ›•Œ”œ‘vbk{xseYgg_em{oijhba~““wg[Wa^EShJ4&&$'$(#    "# /jŒ“š™ž¥ ¢ ˜Ž˜žª«®°°¯¬©«¯³°´µ§x3 (8Pš ¬°®®¬¨°¬«¯«¨««§©¤Ÿ”††‹Œ‘‰‹“ŽhZdjheelqtiinwxty~…„ƒ„ŠŒŒŽ‹’{S-,/)/Pl~‘”›š›žšŸ™šž˜Ž‡}ynjkfZK??:9/" -       64-301-'''*)(%0'%#! "*9Xdcdjuvtqssyw~‹—¢£¨«®©”mgdjf`QKNTP]de][`ljk{†„suƒ‡oN22Nksz‡˜¦­¬¥’lB*!   - -  (;@B<=CKQPKHE;40'     ->8-& &5;;E?=>?789++)7MR^VN=4411DHGC;:>JGLLVWZNDBTYJ2 "/UT[VKMaeYQF3:F?>KU]SZ`^]QAEFPYQ>%45//(!AhhZI98/"#Dgkz‡ƒzJUwP 2c•›Ÿ¥š–ze>  bŸ±ºº¹¸¦±¿¯ž ’zN\˜£”†Ž€y‹ƒŽ‘X30-?4"   -  - "7;0.6*+*&)')/*(('$    )CB<>::;8*#'9GISMG><<75AB>=;8CHDJPWN[T?CRVM9 6BLF?BCNHRTTZPHTfZE?<1B??FNYPP_bXNIGJOSZ+!($%"   -  5l„œ›šŸ££§««¯¨£««³µ¶µ·¹···¶¸¸»¹®‡H - *CYƒ¡¨¯¶´´µ²··¯°¯°­­¯­§žž–˜’‚jbkhmportmqz}tt|ƒ†‚…Š‘‹“›‘“”}Q*):38Cc’•šš–—–œœ–——š‰‡{pocaYJD891$ -    <:304+).0--(2"%0(!    .>\ddgis~€†ustps†”¤©¯®§’sifgid_UMSVX[ce]a[hqqy†Š…pr…Ž‚[7#3_mltŠš¬±­¢V/#    -  - *<>>JEJOW\RHNB?5!     #<6*"$.69AC?854482+.-;ETZQMC@:96AC@<;=AHGBIOUVPGDTUIC4"7BB??>DMNOWRZLKM[_QE7-?KKJFNURY[WISAJRb[>!#*(6.#A7;7$3hpp‰‚‚€\8A@% - -`{‹’˜š ™‚f>  - ^—­µ»½´–‹®·¨š¡kDp—”‘‰’‹x‡ˆŠh3*2UjbaeqgdŠ¡™¦±Ÿ™––­ÊÁ½ÁÎÖÚÞÛÍ¿ÅÎijÉÔÐÑοºÁËÏƺ²­ª–t‚›¡›”œ‘†”•Ž £ÁáæêìéßÓÉÉÇÙäæãÖÓÆ·´¼ÁËÞäçëíïïíìîïîðïïíêêíëäßÕÅÂÅÓâðûýþþþÿÿÿþþþþýýþýüüøôðëéèæçééêíîíïððôöøõöøùù÷ùùúøùùøø÷õôõôðíéêêéêëééçãâàááâáãÞÖàãßâããâßÝÝÚÜâèééìììííðïñôôõööøùøùùøøùø÷øùøõôöôôõöóóòñïìêéçåäéïöüüýùûþÿÿÿÿÿÿÿþÿýüóáÓÉÍÖäèëíò÷÷öôõö÷õõõ÷ôñðïëàÒÆøÅÛëí÷üýûòäâèï÷ù÷ôðÚ±›‰Ÿª¡•’ˆ…rnrŠ”¬ÎÝÝÓÅ×æçèÞÏÔ×ÓÒÜçêêéëëëëèØËÅÀÌÐËÊÀû–ywmfk §jck, -    - -     4}­±¯¹¹°¡s2-  (+!* &,(,)!  -   - 'Khcx…–œ¡¤¥ª¨§¥žœ¡™Œˆ™“|t˜£Žw…~{`bz~oin`GTr{m]Xi`VhW1)'*,"%  !7k“™ž¥«­°­±±²±µ¶µµµ·¼½»¹¸¸¹º¼º®‡K - (@Vy“Ÿ°°´²´º·º¶³µµ³´­³±¦ › œ™“”’–•ˆldgklrxpusp}uz|‚}„Œ‡‹Š‰Š˜–””zS%#!68?J`s‹Ž–™™—™›——žœš—’Š~kg`WWG<=4&  -  79/851/0233+"#"!(+%   -!/E]geflswz‚vqpqo„‘š¢§«®«•xd[Z\[XVLQXS]gkjc]erqw}„}ihƒ_4&Not{…—©¯±¦b9( -   -  -   -+9=>JEIWXVXTND=7)   -    -&<8-"!$ *-68C8:<:126)(38GSaSOD8542>EE7?ECGLHEOTSFIHSXH<*)DK>=JEFLPURTNKS^SJE67CAHNSNMRZ^SGNEQUa[A%%*6: "-9mŠ˜Ÿ¢¦§¬¯³´³³µ¶·º´··¹¾¾¼¹º¾¿»½»±‘M  !CMw•™¬²´³¶·¹··µµ´¶·´³­¬ ¡¥¢œ™˜’š£“xgmiisrlv~~‚|„ƒ‚ƒ…‰‹Ž‹‹‘”–˜“”sI$ %2;CL`nƒ’–™˜ ›—žžš˜˜–’ŽŒ‡|ppb[PECB1%   262641:22.0.%%$&$'$ *=[iiikutwwrlnrr‚Ž™ ¦ª®®–|ia^``XTMQQMZgij^]gkou~{~mc|Ž„g=""Bdqs~“¥°±©˜oB/! -      -  - -&2;@ECABLRNOSJF94$" - -     $?A8$%($-1:>;;:B>A5-*'/3DPWPIC:::9EL>=9@OMPIIWNQLINOLJ;'4>J?5IIJPOVWSGP_`VLE57@FKSPJEV[^XNOJKPWTC#(/.%"%&D8":rxpz„‡†tSD3# 2_~ŽŽ“—š™¡™Še> -  iœ¬µµ¸¯…Zdpnn\EE^iieceb\bV]^A+!*.?IHSQKPKWsnqqyuw|vv‡¢¢›©¾ÏÔÚÞÝ×ȺÂÕνÈÐÍÓÅ´·ÅÍËû³¯¦‚Š  š˜‘Ž›§”£¯ÑæêíëßÓÊÇÑàåéèèàÑ·®º¾ÂÓàäçëëíêêëêììììêêçâáÙÈ¿ÄÆÓæ÷üýþþþþÿÿÿþüüýûúöñìççççèëëìììïððñóòòóôööøøøøùùøùø÷÷öõôóïîíêæäâßÝàÞÝÞÚÖÒÒÒÎÍÎÇÆÄÇÒÐÅÄÄÅÇÈÉÍÑØØÙÚÚÙØØÛÞáååèëìïñòõõõ÷÷ùøùùõö÷÷ùùøùùùùøøøõõöòñíìèçääâàãîùýþÿÿÿÿþþþþþüùîäÑÈÑÙäèêîñôõõõôôõõñðïìèá×ÌÀ´·Åã÷úüýüüøéãèóúùùøïÖ°™”´­›Š~u|uƒ‹¢¾ØÛÖÇÑçèåâÒØßÙÓØãëëëéêîïðêâÛÒÅÈÌÌʼÁ·“ukgks†£žxs¦¯†?  -   -   - - - )|§®¶·¶²¡h6/'   -+.,+%##*41) - - "%   -'Uutmo‡š£¡¡¤©¡ ¡Ÿž¡ £’ˆ“—…’¥ŸŒu†}ncimmoeZes„ynijiq^XkR=3-,$'')$ -  % FGMLHKT\_ZZOMXSUVA& #*7 +GGZs{tŒ‹‹wH-"" -(WrˆŠ•””•Ÿ˜‹k7  #h¢¬±·²¬n%##"" "$!!%$*)(,=?LzºÍÐØÝÛÛϺ½ÖÜÀ½ÕÐÏ˾³¾ÇÉÈ¿¶³®˜„—¡¡¢š–“¦¢•¤¦ÁàìîêÝÓÌÇÌ×àçëêâÓó²¾ÁÉÚÞãêëïëêêèëëëèåäáÜÕǼ»ÌÓÚïúüþþþþþýþþýýòíìçäâáääèéììîïððñðñóóõöù÷øö÷øùø÷÷õõõóññíëéæãâßÜÙ×ÖÛÞßÜàÜ×ÐÓ×ÒÌȾ½ÁÍɾ½¼¼¾ÅÆÆËÕÕÓÖ×ÕÏÊÉÎÍÓ×ØÛàäêìîððóô÷õøùõöøøùùùøùùøùùùùø÷õôõòðëêçâÜÚÜéõþþÿÿÿþþÿÿÿÿþýùëØÏÏ×áçêíðóñòòóòòñïëéâØÍù³²Íêøûüýýûöêâåñúùù÷ìÔ­“­»´®ž–Ž‡}qkp~Œ­ÌÜÚÐÈÜçåçÝÒßßÓÖÚäêêìêêêîñìçÞѾÅÌÊŻõ“xnklky–ƒi–¼º›R  -    - "qª´¶²±¯¢e&0+  - +10'%#(/,!" -$&#   -   dŒ†op}‹Ÿ¢¡–“Œ’šžœ ¢¢”•¡œ™®£|xƒqhjjbdj][mnurjljlsbekS61213/&!$  ?x“¢¤ª­³¶´·³¸··½¼¿»¼¾¿¿ÀÀÀÁÁÃÂÄÁº”T - ASs–«²¶¹¸µ¸ºº·º¸·º¸´³µ¯¦ Ÿ¦£££™’¡¡•~tprsw€ƒ€|€Šƒƒ‰ŠŒ˜šžŸ›Ÿ›‘jA$""&&;9Yaihfn{€…wojps‚š ¨¯°©˜|e`ab_WRFJNRW[`baagpnq„€tenˆ†nO+&Okqp~—¦­ª£]4'   -    - - - - 1@>@;@;<;6?60'!#)7CZ\PG@8<.:EBHJRTQKELQVD8- &0;GNEFJL\VTULLJ]bQLA87@ADHIPPTX_WRHLWc[^G- $!2,2Ndtmyˆ‘m=151 %Pu‘”“’‘”“Žj4  -h¡­¯±­¢W  $)6v½ÎÓÐÓÙÚÕÂÀÌÜÍ¿ÒØËÑϾ·ÅÌÐ÷µ±¨“ƒŠŸ¬§ž¢›˜ž§œ¦¤¶ÛèìêàÔÊÄÌÊÓèëèä×¹ª¸¿ÃØÙàæêìëëéèéêèçãâßÔÉþ¿Ð×àìöüþýýýýþýýýöëàßßããæççéêìíïðñòòòôòôõôõùøùù÷ø÷ôôôòðììéåßÜÛÛ×Õ×ÕÐÖßãåêëéáØÕÙÕÖÑÑÏÉÈÏÐÌÉÅÂÅÈÉÉÊÑÔÖÕ×ÕÓËÇËÊÊÆÊÑÓÔÜßäãéíîïñôõø÷ù÷ùøúùùúùûûûùø÷÷ù÷ôòïìêèãÞÜÝåðùýýþþþÿÿÿÿþýþøçÚÕÒÛáçëðòòóòòòñðíéçßÓÁ¹´«µÑðúýüüúúöéàâóûøúöëЦŸ¼½µ¯Ÿ˜’ˆ}tu~‚ˆš¹ÒÞÙÊÌâäèçÚ×âÝÕÛÞãèêììéèîòïèÞÓÁÈÎÊǿ¶’zwikn†jf¬ÀÀ£S -  - - - - (n¬¯³²®©Ÿj/5) -5+"#+-# -! #)"  !R‰˜on†¡ –‹†‘š–™ ž•ž¢—‡˜©© ªª—ƒ|ˆqins^ff_cprqfnogmue`nQ675-1-'  " Ay’›¦¨®¯³µ·µ³¶¾¿À½¾½¼»½ÂÁÁÁÆÆÈÅĽ•Y 6Jr™¦°¶¸¸¼º¸µ¶·¸¸»¾¸¹·µ®¡œ¡œš™—˜Ÿ™xoqty€z‚†‹†Œ‰Ž‹‘–—š˜ž›œ˜——nA  &6@@Mh}‰•–›šžŸ™ššœ˜˜“Š}oxeg[KI@7+(     :86276556(*(/+,$&,-'" -   %=Xkkjlntyywpjlv‡Žš¡§­¯©˜ykdhig`UKELQ\]efb_drnn€†ƒuho‡vT-":dqrzˆœ©¨¥”g?'   - - -  - - - &57=@FIEPKN]]]VP\Q]^]F, ',- 4YbSlvˆsA/=0)Kp’—–™˜–’—“i- - - f «­°ªšI  - -  -   -   !")1yÂËÒ̽Í×ÒÇ¿ËÝÛÂÊÚÐÏÔȹ½ÊÎÆÀ¸°¬Ÿ…—ª«£¡ •œ¬œ¢ª±ÔçìèÞÓÉÄÈÇÑáèçåÛÅ»¬µ·»ÉÔÚåêìíìêêéèèæâÝÕÊËÉÆÒ×ÝêïöýþýýýýþýýøìâÛßáãæççêíðîòðñòóôôõõöøøø÷ùùù÷ôóòðïíèããÞÚÙÑÐÑÐÌÕØÑ×àçìïðíäÝÝÞÞßáÞÜÓÍÍËÊÄÂÇÌÑÓÏÐØÚÚ×Ù×ÑÏÒÒÍÉÀÁÃÅÉÏÑÕÚÜàãéìïñòôøùøùùùùûûûùùûùùùùúöòòñðêççàßßãêñ÷ýþþþþþÿþýþýõèâÝØáäëíîððññïððíêçâ׸®ª¹Óóúûýüú÷óêáæôûùúöèȤ®Ãµ¨¢Œ…†‚~€‚|ˆ£À×ßÓÄÓæåçáÔÛçÞØÙàäâçêëêêíññèàØÏÒÌÊǾÁ«‹usnsm„‰]k­ÃÀŸN"   - $k®±®¯®­Ÿl+8%+,!! ")! '#&2#   -  X˜‘xtz™–†x‚“›¢§¡¡—›ž™Ž“¡®««¬¤…}€uomefmq_nou_]nskrl[_cK;27/03( -   - -"#A~–¢¨ª®µ´·µº·¸¾¾¿ÀÂÂÁ¾ÁÀÀ¾¿ÃÆÆÄ»œT$ -7Cu—¢³¹»»¼¶½»¼¼½ºº¼¼»¼·¬¤££¢–˜–”£Ÿ˜sqy~z}†€‡‹ƒ‚‹ŒŽ‘“””œŸ›šžš›šŽd8!(:=7Iex’—›˜˜›™“›—’””‹‘ˆ|~vhcWMKD0"& -   -  <;=:50414,%-.%(&&$)%#   -   ,BVhojlq€}~prrx…Ž˜ž¢¨««š€qinsodZEEJQW^bcg\alpmz†Š~ihv{pU5+Wruq|• ¡˜kA+   -    - -   -  &9>=883"$'')/.77:=2?O02//)(09LWZ]HA:9<>=D?:E;BKEIFMKMMDAVWN?( /DDDDBCAV[\TQIPX_ZN@64>BAULGKO^]RSRSQ[ZTA& $#() =O>H^flfY>9@* -  &Ot–˜š›”˜–‘j; -  f§±°´¬•?     -   - - - "*x½ÌÔÔ¾¹ÒÕʾÆÙàÌ¿×ÒÉÒξº¾ÉÈÅÀµ¬›„š®¬§™™”Ž§«¥¯±ËãéçÞÔËÄÆÄÐßãäåÝ͹ª²³°ÁÑØâêííìëëèêéåßÚÎÉÔÑÔßæçìïöýýþþüýüùñëæÝÞâäæéêêîðññðôòóôöôõô÷øõ÷øø÷õôóíëèèäàÛÙ×ÏÏÌÊËÈÍ×ÚØÙåèîïïëéæëðõõòòíéØÑÇÇÄÆÍÛãçâàåçáßàÝÙÕ×ÔÓÍÉÁÂÁÅÄÅÅÉÑÕÙßäæëîñô÷÷ùøøúüûúùùúúúùùúùøöõòðìêèçãáâãèðúýþþýþÿÿþýý÷ëåÞÜåëêììîîðïïïíêéçÞͼ¬¤µÕñúøûû÷ôóëàäôüýúòãÀ¦¸Á°£”‹“…z€‡…|ˆ”®ÈÚÞÏÊÛãâåÛÑäéáÙÚãßØßêìêéìñïéà×ÍÎÏËĹÀ°Œmomqo|ˆcq´ÅÄ«U   -  - i©°¬¬±­ a*5%+"$% #  -'/-.1 - -  :‡¡¤z€…–›–†yƒš£©²²®¥¢ ›–žŽ’Ÿ­±®®¤‰€qnki\dildnumcYeklur[]cI38910--  - - -"  #% !Iz’¥¨©«²´·µ»ºº¼¾¾ºÀÃÁÃÀ¾ÃÁÀÃÈÊÇÄ»ŸT! - -6Jx–¤²µ¶½»¸¼¼¸¸»½º»º»º¶­ª¬¢ œ›••¢ªª–ƒyoy~x…„~Š‹Ž†‘Š’”—“œ›œžœœœ›a?# *;<8:Uz’‘’›˜“‘•–—Ž’‘”‘‹‡†ypcNHJG5& -    38;<66-63(*+1/-('&*0$    );Vemmotƒ‚„wnnurŒ—›Ÿ¤©­›‚skprpj[IEHK\`hkg`akiju}…}kcqtm\6Hlssz‡’Ž‹ŠtQ5%   - -  -  #/:?A?7;FKNLNF<58/    - -  -  /KE,$"&'1+07A:;A<66,4--78CQWaM<:<73G=;=I?ETIBEQLGKJJMSI=07?DDGJDBMQUOTFJZ]VO@43=?@NUN7*.-0%$ -"% --#Qx”£¨ª¬­¯µ´¸¹¼¼º½½¼¿½À¾½ÀÂÇÄÇËËÆ»¢T  1Lr™¨±¶¸¶´¶¹µ¶º¸»º¾·»¼·°©£œ•”˜™•©®ž…}upy€ˆ…‹ŠŠŒ‘“”š™› Ÿ›œ‘nC "%668:ZoˆŽ‘’ŽŽ“”ŽŠˆˆ€sie\J>:6)% - - - -    >?7672122*.0+/2-''$'*  $7Yfnklsyy‚tlirt€“•›£©ª›†tnprto[IBISWfipjd_kllqw‚€oaj{za<=GQOHD7:<=AA:>BCLLI?FMPME?HISI6(6?LMJHIOLTWRWKFTXLJ<536,     -  7556967244231./10.+%   (:Mffeiotxqejqox‹“˜Ÿ¢©¨…qmoqli[DFJQWXdjcYUgos|‚‹„p\k~€pJ'$YtpwvŠ£«œ‚a@%     -  +:?@AFBBEMKGF?913!      - - -=1#&&!+(19@B>;C83-#))4:AJOHF@6058;>GEGJJMQX_[TEEJRWa< -  )'66"  &Y{‡•Ÿžœš™’l8 - -  u¦­µ«žq3  -  -   - -   :|ÆÝãåäÚ¼¸ÈĺÆØÞÕ¶ÀÔÕÔÖÀº½ÊÏɵ¶©‡†¢®¯¯ ”•‘ ¤£ª¦¾ãçÞÍÂÀÍÚÕʶ²Æ×Ï©™¡µË×ÜâæèêëéææåãÞÛ×ÊÕëùûüüúæÇÄÆÊÑÖÜÛÞàæåèççêìïïðñññòñòòòôôóóóðíìèèçäãæÞÚØÝÞÝÚ×ØÛáéòùüýýþÿþþÿÿþÿÿÿÿþþþþþýøðåÛØÚ×ÓÌÑÚÕ×ßåæöýýþþþþýýööýþþþþýù÷ðèá×Ö×ÓÒÓÛÜßÝáâåèëðòô÷úùúüúùûùùùúúøööôòóôòðííëéçááãèîôüýþýûóçäèìííêëíîñïïìéæäÞØÍÅÃÙåèëîïðôöðçéöúùòݽµÚؽ«¥¢’–‘ŠŠ‰„¤ÂÖßßÏÖæåáÜËÔçíäÛÛÝÍÑçíòñêèæêïêßÛÞØÔËÊÄ¿³ŒppibkvŠXk³Ì˳j%   -   X•­¥¥±°¥h+2) '- $% )6AEB901' >ˆ™‹Š…z€—”†€’¤±®¢Ž„‚‘§²³°« ”™—”œ©¬«š€gl€qnrzb]hWUZ]`craUaG8$$+'( ;:!  %Bs“ §®®¶¼¹¿Âþ¿ÄÃÅÈÊÆÉÊÆÈËÌÍËÊË˾§c&  -'Clš±¹·ºÀ¿¿Â¾À½¾À¿¼¹º¹º¯¤–ŽŒŒ‡ˆ’œ¨¬§‹qtsy„‚‚†}„‚‡ˆŒ’—›ž›˜’˜™“ˆe6  &.66@_†‹‘Ž–“’’‘Ž‡†Šxpf[XI>;42% -     54998995944022013..*   #9Laa_anuuwnfkqp‘•ž¥§¬«˜‚pmppmeWCALQS_bbfYSgupz€‚„r[jy}tQ*Mnvusƒ˜¥«£lG0" - -  - -  - - "4>B@A78BJNQPE72,*$   -   291$")#"(-,2:D=C;=51,#&$-?KOPRGG:967CFD?:>?>=BCKOPNLJOPD8' )/AJJOLJCKPLOUUHZ[RM=25>CMJLF>FY^ZKECOTV\>' - '  ,*&-(*2  !W–žŸœšœ™“p4 - - n¥¯®¥œv0 -%   - -    -  - - 2‚ÊÜÓÍÚÜÇ·ÆÇ»¿ØÝÞųÍÙÔÓɹ¾ÊÓÍļ·®™ˆ—§®®¡˜˜••¢ž¦ª´ÚåÜÊÀ¿ËÙÚθ±µÎζ££«½ÏÚßåçèéèêçããââßÙÔáõûüüúðÚÇÄÅÌÍÒÚàããçééëëìíððñðññóóóóôòóóñðëçåãäæââããÝÙàäßßäêîò÷üþÿþþþÿÿÿÿþþþÿÿÿÿþþüøóçàÙ××ÝÜ×Õ×Û×ÓÏÏÔèøüþþþÿÿþüúýþþÿþþþÿýøóëäÝÚ×ØÜÜÜÜàÜÛÝáçëïóõøùûúùùûúùùúùùøøööõõõòóïïìéçäãáåëñôùøôëéëëíëëêêîñïíëéæåÞÛÓÈÉØÞåêïòõøöïçìõúûï×¹¾âÖ¿©¦£’“†ƒ„’°ÌÜâÛÑÜæãÞÎÉÞëëäÙÚÙÎÚèìððìèæéîíæáßØÑËÇÀ¿«Žuskfht‚]e²ËŲ`$   X”¦ª«³¯¢a)1(  -(6)($" % %'&,51 - --€—ˆy}•ˆ~ž¨¦ƒjVQ^‚˜ª¯¨¦Ÿš•—£«©€z‚|qkchgbaQ_]TQYmaUW@5"!&.!$ B=    -%"RyŒ¢¨¯²µ·¸¿Â¿ÂÄÃÄÈÄÆÊÊÌËÈÉËÊËÌÍÈ¿¦f$  !9.-'$ -    -;6728:98<424:62511*' +7L_e_^jrtrpgisx‚Ž”Ÿ§¬®«žŠsrsqpiaRCHNT]`ef[\fvuxx€xr[_mxqX19\osmw§«¨œƒX9# -   - - - - *8?3350$(0:P[[WK@=938A@?C8=BAD?EWXMIIMLLG<# )8AAJMNIDRUKKNIM_UKDC/;AAHPLF@I`ZSNIOQWWN:*   ,@F<* .    -  Xƒ’š™——“˜œ—h4  !s¥°«¢—g+  -      -   !0‡ÍЮ˜¸ÜÔ¶¸Ã¹¼ÑÜàÕ·¼ÑÒÑν¼ÆÓÔÉŹ·­“‰¢±²«£ —™£¡£³­ÊàØɺ¿ÌÙÙϺ³¸ÊÍ«£¯½ÊÕÙàåçèçèæáààáààßâìöúùôæÙÊÉÉÊÏÒÙßäçééëíííïïðñóñðòóññòóòððîëäáÛÝâææêëëçàççéòøüþÿþþÿÿþÿÿÿþÿÿþÿþÿÿþþüôíçÝÛÚÜÚ×áßÜÚÛÙØÓÒÊÆÓäïùþýýÿþþþýÿÿþÿÿÿÿÿÿþýûôëâÝáßÛÜÞÚÖÒÕÛßáæìïóöùùùøùúùùøúùøùù÷ø÷÷øóôóðíëååäÞÚÞããèëííïëçéççêíðîìéèäàÝØÔÍÙÜæïóöøøõìåì÷úõêͶÉßϾ¬¦ •“†‰†„Ž£ÃÕàåÜÓáåä×ÁÐçíìàÙÙÓÐââßêïíéåçìëêàÓÒËÆÅ»Áªyqebakxb\¨ÈÈ·k# - - -   '[—¢ª²¸°žn/4* -5'&(%#$"# & #-61=DHHF>70 !y‘‰†yˆŽ‘€¢©¡‘{cH?@>Gi’¡«©žš—¡©¨£‡‹ŠŠuTGLUiWVgi`]`eXUZA)$%2,/+ )DM -     -!&$G{›¡¨±³²¶º½»½½¿¿Á¿ÂÇÆÆÅÅÆÈÆÆÉÉľ \  -%;c–«±¹¸ÁÀº½ÁÂÁ¿ÀÀº¸½»µ²¤’†~}twˆˆ—¤¢„fdjlonz€yz€{€~„„‡…€}vqkl_P@#"'0!#&)04>;;@;@9?D@<@@A96;5*($  -  - -  '$%*1419;=7:359782.2+&   -&4Scb^^jquwpfhoyƒŠ•ž¤©«­ ‡roqooqjNBMSW[ccaa]cs|w}zynYcluq^:#+SmnruƒŸ¬­£Žh@)  -     08586/,/"&5AIYLNED90;AELLICVZJJPJR_SFJD.6HHIMLFCAZ^XLNKR^YLE$ -  3PF)%," - 1%"  "U•™˜—›•˜”m7 - - - (y¤®¯Ÿ‘c#      -  "  - -  - - $?ɹ‘„ ÑÙ¾°Ä¼·È×ÞØIJÀÓÑÎÅ¿ÆÓÖÎþº°˜‹—ª±«£žŸ•¢¥Ÿ°¬½ÛØÇ»ÃÊÓØÓ¾²¸ÌͶ¬¶¾ËÕÚÝãæèåæãÝÛÛÞßââãäëëæÝÒÏÉÉÎÎÕÚÝáäèêëêìðïññòñòòñññððððïíéçãáÞÛØßæëíîîêêîóúýþüþþþþÿþÿþþÿÿÿÿÿÿÿÿþüùðæåáÜÚÜÞÜÚááßÞÞÝØÕÔÑÑÍÎÚçòùûýýýýþþþþÿÿÿÿÿÿþþýüûóìçåâàßÛØ×ÙÕÓÖÜæëîñõöùøùùùûúúùúø÷øøøø÷õöôñðïììçáÝÛ×ÓÕæñññéàèêèèìîìëêåáâàÛÔÒØÜëñ÷úúúòëåè÷úñäÅ­ÌÜͳ¨® š”ˆ‹„›«ÈÛåæÚÕããâÐÇÙêîìãÜÚÍÔáÙÇÛìëçæçéêéÙËÏÉÌÅ»¾¯yxplbf{ZY¨ÅŶw2 -    -$^™§°²µ³Ÿh7:&  45 "()% "!369=98<9@FADD>?===B.*),%   - - -   -  :M;%"$#$#,-=98:5682.*/'%0AISOMHE?=:<@?9;=FLGJM?CIGC.'"#&287GFGEMMGAX\VXKHPZWKB - -  - #JU8.0&9?* $]‰›Ÿšœœ›™—f1 -  -%m£¬ª¡‘c"   -    -   -  3†¾œˆ†ÀÚȳÅÀµÁÎÜÙϵ³ÌÔÓÉ»¿ÒØÓËÁºµŸ‰—ª­®¬¢ž‘ž¨¡®ª·ÑÐÁ¼ÀÂÏÞÚų½Îθ²¹ÄÌÕÚÞâãåæáÞØÑËØââàÛÐÍÍÉÉÈÊÊÎÓØØÜáãåèèìììíîîððððñññïððîëêçâàÛÙÚÜÙÜêëìïðóöûýþþÿþþÿþþÿþÿþþÿþÿÿþýýûøðëåãâáÞÝßßßÞãäãäáÛÜÙØÙÓÐÕÒ×àçñøýüûýþþÿÿÿÿÿÿþÿÿÿÿýþùóëççäßÛÙØ×ÊÈÐÙÞâéïóóó÷øùúùúùùøøøøøùùù÷öõôòððìéäßÛÖÒÞìññèÙßéêåçéêëéæåáßßÖÒÔÝïö÷úûùïêâèõùîÛ»µÓÓ³«« •‰‡‡Ÿ¹ÔâèæÙÚàßÞÉÇâîîèâÛÙÌØàÒ³ÀäëëìæèêéÛÑÑÏÎǽ¹¢ŠtspeYivaW¤ÄĶt- -   -_¨±µ¸µ¥m/;1:*%$ ) !*6=4=GI@4;>;s—‰„Œ‚€›¦œ‰xXA?E>8<@Stœ§« ˜‰ˆ¤­¥•“‰‰e]V\khVUkhe_\hTV^8)#%*$'#/OS&    % %2,/8<=;DGEGHNPLGMULILPGGKVRNPGA*"/:;=:A@>?57688*)%#"$ %'(       !'.-158834:9602/&! - .F`gabktqtpdedlv‡“š£©¨ªžˆqjikkh^KFOTRQ\`b]PYkpv€r`^n~wiH+5enom}”¦¯ªœ\>0!  -    -  %:@@A<8;DSWWQD3#&1% -  -   3H>,$)',695/1883//*%#+7HKOLJEC9;5:?=:;7DFF;BIKSTMFFFKG2! 3@CF?LTKEKMPNNKKSYPFB36FILEGDCI\ZMQLTQRRJ: -  !0LC<99(  - - )bŒŸŸžšžŸš•j- - &n ¬© Œ[% -   -  -   -   0t¢ˆwt…«Õг¼À·»ÈÛßÔÁ´ÆÓÖÒ¼³ÊÖÔÏÄÁ¿­…Ž¡«®¨¥¡Ž°¦®¯°ÃÍƾÁÅÑÞÜǹ½Êϼ»¿ËÏ××ÚßâäãÞÜØÇ»ÐáåÞμ¾ÅÆÉÌÍÍÑÕ×ÚÞãåèêëìîïííïíïððñðïîíìêêäáÞØÓÕÚÛÚàêíðòöüþþþþÿÿÿÿÿþÿÿÿÿÿÿÿÿÿþýûøðìèææâãàßàâãäâçééèåßÛÚÛÚÙÛÙÖÕØØÝæððôüýÿÿÿÿÿþÿþþÿþÿÿþþüõóïêåàÚÙÖÑÄÅÆÑÖÝçíîðóøùúúùùùùùùùùúúùùøööõôñîìèäâÜÙÚæðïäÕÖßèæåçêééçåáÝÜÛÖÐÞòôùúû÷ïçãèòòèÒ·ÀÙÔ÷­§•‘Š‹“©ÆÝéèãÚÞÞßØÄÑæëíçÝ×ÒÏÝÙÁ¨¨ÔæêêååéêáÝÖÏÎǾ½ž‰orrjXjƒbX£ÁƸv0 U’¤¯·³°§g/3! - - '3%"  '# -6<<4\‚Ÿ¨£™“‡ž¨ž’Žƒ{lfZ\faPQkicbbgGOR<..#&,+# !HT)    - # "##($#"32&-,,#*+()+!' " (E5%%     - - -  - -    - %#'$273467<354.+   +Mdjcdir{zne]]dv„›¡¨¨ªŠnejijjdJFJUSSW\\YQ[ipx}€†t\_n…„rT- $Rnmoq‡ž¯­ ˆeJ7$ -   -  -   - - )7'!34)        -    #   \    - -   - -  - - -0; - "!/72268;624*$  - /Pgndbpx…ƒqb^egs‹“™ ¦¨©žˆohehmkhM@LTMUZZ\YOUbrs{†|`Vmƒ‡vX2 Ffrpo~—©ª¡’wV='  - - - - -  -  - - 4BKBA@:;JQMRC9-"!"2 -  -   -  -6F9""$ !-,*<@?627400' (5=@JNI><=342=:516=IL55LDGPKPDO\X[ZOSSUVWB  - -  ,%9F;#"1' "g›Ÿ¡¥š•™•j-  #m¦°¨ŸyY       - -     - Nppuy|’¿Ð¹²¾¼ÀËØßÚÑ¿²ÃÏÓͺÃÐ××̽±”‚Ž¦­¬©¦Ÿ®´®¶±±ÇÁ·ÃÐÛáÙÎÊÐÍƽÂËÉÑÕÙÝÜÚÜÙÙÕËÅÀÇÞÚȾ½ÇÉÍÓ×ØÙÛÝáßãäçéëîíïïîðîïïïííëëéæäßÙÔÑÍÏÑÚáãéïöûýÿþÿÿþÿþÿÿþþÿÿÿÿþþþþýüõîçåéèçêëèçäâææéììåêêêëðêäâÜÜáäåáááÛÙØÕÔÚèôûýÿÿÿÿþþÿÿÿþÿÿþþÿþþýúõëãßÙÐÍÅ¿ÄÅÕÚÞæéïóöøúùùùøùúùùùùúùøùøõôóòñíëéæåäæéßÜÜÜãæéåçêççæâäÝ×ÍËãóøøùùøôêäëðâѼ¹ÙäØÌÀ²§ “‹…–£¸×êìëáÛäæÜÒÕáêîëáØÚÊÎØĪ‰‡¬ÜçäáâàããÝÖÏÌļµ¡Š{yph^d|aTŸÃ˶~3/ - -  - -R‡£­·µ«¢k*.   %25$!+**  %2=26?DEC=5;>)e‰‡—Œ~‘£‡pXBFCI:-*+47Pm˜¢¥™ˆ|Žž›{q„ƒznh`di``[eeXPUhQMN2+%&+,' .N^3  -  #   -PsyrwW;9?ORR2   -      -              - -    - - - -   - - - -     -  ..3.05:603*" !! $7Ufqmfo}…‚y_^kpu‹’™¢§©¬ ‰upghkniO?LRSWY^]WNQequ}†Š‡eXk}‚v_7"6Yotoo‹œ ¡•ƒ`B,     - $8EA=<<4=KSNLC7$"#"*  -  ELGCSSZPHBGHFC2! #'>NSMQLMDKNTSWHQ`VOB>3=>B@@=OH3W‚|‹•…¢˜m\NH==C74.9ADJIi}£œ™‚no‚”v„„vpnima[fa^bNPaiV]M9-*$-)#$2Oc8  -  :O[N;$" 5E>CY}“›žž›’„‰•‘w> -     - -  -  - -   - -    -    -  - - -  -   -   - -  - .+   -  - 0034656860,"-Mgllfmu€}tdY^ep„Œ”žŸ¤¨¢†pjiimh`H:@NNNX\^[SQaqrx€†ƒk]bp|wcC'"Gejihs’Ÿ‘uYB.! - - -  -  - - -+:@A8%!' -  -  -     .35=542)!'14DD>GHKU9BJSI@0! 0@FPJHLMKGQ_YODP\\MB@5:@EKIPOKJY[RQOOT[`YR@, -  +10,.1  (cž™žžž›š™–b!   "q¢«¤™yN -         /[cgmqm‡¾Æ²»»¸Àó­¿¿³¼ÒÔÒȼÅÓÚØÑľµ†”¦¯¬¨§¤¦²²¬¹·³Ã¾ÄÔßÝÕÇÇÙÓ»ÂËÌÐÒÓÖÛ×ÕÕÕȽÊÕÊÅÆÅÉÏÓÔÖØÝàßÝßàâåæêëìîïïððïîïíêèèæáÝÕÎÈËÒÔÛæìðøýþÿýýýþÿÿÿþþÿÿÿÿÿÿÿÿÿûòåßàãæééìîïððñòðêèçéîòðîæìíïññðíçâãèêëëêêëéèäßâáÝÚÝÝáì÷úþýþÿÿþÿÿÿÿÿþÿÿþÿÿÿýüõîåÛÕÍÈÇÊÐ×Üãèïóôøøùùùùøùùùùøø÷ù÷÷õõôòððîëêåßÝÝÛÖßæçäååâââÜ×ÐÕèòøùûüùùðëïåÓÀÀÙéÜù·¬£Ÿ“‘•Ÿ­ÇæòóîãÜçæáØÕÚáåääÛÕÓÈÏƪ‹yl{¯ÙÝÛÛãäÚÛÚÐÍÂÁ¹›‚ytne\cufTŽ¾Ê½6  -  JzŸ±³¶°Ÿ^/9)  %6.,/(%((+$ $#:@;6;@AH?AOA1 -Fz‚{‹˜„†¥’e\PK>6:456>EHBSao’¥ž”†pl{••†bhvp`^_[X[^XR`eRQC74/+($!2Uf7 -  -   -<[kh[B6.&/::*$@PHJex‘›  ž–‹‹’•zR" ),         - - -        - +TbQ9'.*    )25556:6/32& +C]hhafnx{p]V_hpŠ‹’™ž¡œˆmhdcimeJ9?JXWTU^]ZQ\pptz‚j]ejrrdI0 4\gjghŽ ¨¬¢ŠkR9( -  - -  - - .?J=?71?GFE?3/$!# -      @J;$$,/&#,/.28<8648,5%!04BIKNJD>;69>?B@DFGILSQKGQNOP<-#0DGBMG( Ho{~„”¡€_SHBB@/0'5FONOENc„¤¢’}huŠš•odjrk^[PQU^VVUY^TQD7//2+-%! .Yc=   - - -   -!Bfssf^YF:C=:YQO]~Ž—›˜ƒŠ‹Œ\KahkxŒ•™~C &!% - /gŒ“—‹_8'OsreW^nlW<:C3   -  )..4202+,2'"    !5@EEM[intk[Wdotz…‹—ž¡›‰ofmlghgW:>OPKS^^URN[pux„…s`fw‚…s_9 >@=;AGIMMB7#!$( !! -     -&AD3!$$%-5<=922803/-+'):CQQNGDAA===G<:<96?EOHLNP0Giv„Š„ƒš—sc[?A7-6/0@BLLKBJduœª¥›‡qlq…ŠphchdWZcVT^^Rco`BYC---%).)!&6SeG - -   1Kgoih_bSD@@=0?SX[g¡š’{†Š‡hMctnwŽœ\     -   -!%  $  - =p• ž’tNAqŠ–‡|yqmMG?C5! -  - ! %&+'331-+**""6JOPWbp{}q^VZck}‰Œ–ž ¡œ…ldcnnldU>;JRTPY\\VHVnyv}ˆ‰vdau…†u_A',Pkjju–žœ–ˆl\D-$    -$>AEB>>?KKKJ@/! "%!#   - - -&BL0$!-657=624:-2/&!)9@OLLIJIC9:BMB@3=>BDOGMVMJHDJJJB9&",?GQRNRKJFXVJPFPWUIN61:G@B>GKKNW[ORKLS[ZTWYXRK@* ! "+//)!  'f™£œ¤ Ÿ›‘W -  $mŸ¥ ‹l=  -    -    - !#8[ilhj€»Â¬º»¼±¬´¸¸¾Ä¿½ÎÑ̽¿ÈÕÜÙ˸µ¡‡ƒš¦««£ž¡«º³¸º¶ÍßåçÜ×ÐÍßâÈÍÒÑÐÒÕÓÕÒÒÀ²¸¼ÂÍÐÐÕÖÖØÚÝßÜÝáâââæçèêêìëîíëèèäÞÜàÝÛ×Ýçêñøüþþÿþÿÿþÿÿÿÿÿÿÿÿÿþþþþüøóëééççèèêëììíðñòôòñïîìêëìèççéêìèßàçééæêååâäççèéèêíîíññðïïïîîðïîééèãààäëó÷ýþþþÿÿþÿþÿÿÿþÿÿþþþþýùïæàÞßãæåçëîòôùøùøùùøøö÷õöö÷øôõôññðîíêäÚØ×âæãââÞàáÛ××èôùùûýüýü÷ëÓÃÌäâÙ̽¶®¤œŸž¦»àöúúôççèéæÛÕÎÊÑØ×ÕÒÒÊÌÆ«“znmih’ÈÒÑ×ÞÚÙÕÏÌÃȾ¦…{tsgdhte@…ÂÎÇ–E - - -    8fŽ©®®¬ e/97 30(,4.0-53"($'!"),3*1@48C86;>IOMGCH2 Chu‡{ˆœˆhWOFD;.412>F?LATY_t›¦¤Ÿ‘xlp‡yiY_bVV[l_VTfQWhXGSB6/,2+"$.8Xj@ -    - - -6Zfqnhnc]NDD;-C\^cdlŠ•˜–Šxyˆ‘‘šmK^p|}ˆ˜™šq&   ( -      - - -"!$04 -  - -#Ly‘šštQYsƒ’Ž|yviNATJ2" - - -  #)!"$&!#$(&#((')%%  -)BT]\^frƒub[`dn{…‘›Ÿ¡¥›„g]^hiliT<=GPRQZ[aZLNhttz†‰we^q‡‡vaM/Hlspm|‘˜–’ybM8,"" -   )=@B??=@FLLJ@/!##    -   *EH/!,&&,,11344:;0--$"/7@KZ\I?GA?AGD@<9BFFCFKLJZXVYWTSUXc\Y]ZSH@%"(   -44#3/($  - "dšž¡ž£ŸŸœS &n¤™‡k; -  - -      - - ;VfprlqŒ´Á¨µº¿°¢¬º¯ ¬¯´ÌÑÐûÇÑÛÚл¹©”…£«¯©£Ÿ¥¸¹³º±ÈßäèÞÕÑÑÝßÎÐÓÒÐÓÒÓÒÒ˹µ¶ÀÆÏÔÔ×ØØÚÜÜÝßààâãæçêééëííìéêçäàÜÝâáÝÝãëõúþþÿþþÿþþþÿÿÿÿÿÿÿÿþýÿûöðíèèéééêêíîìîïïðòóóòîìëêéèëéååæçèèßàåéèèåäãæååååæçèéëïòóññññññóðñðíëêåãáÞáæðûþýþÿþÿÿÿþþÿÿÿþÿÿþýþûôëèäáèæåæéïô÷øøùøøù÷öööøøøõöòòðñðïëëéáÝÛßêæäãâÜÝÜØØéõùúüýýýý÷èË¿×êÞÕÉÁ¶¯¤ ŸŸ©ÆéøûúñçéìëßÍÄ·ÆÓÔÎÓÕÔËÎɧˆunkd_„¿ÍÏÕØØÒÒÍÌÄƾ ˆsxynkhtbE‹ÃÌǘG -  - -   - - (`‡£®°¨™b.6208)89'%(=0."(,%,75-7>A=4GEBDBGFQIJI.Dfsˆ‰{“ˆjSDNJ5,#+4;:;BIXZ_w”Ÿ££œwmtwulfXb_WYai`KOcham^KX@6-2)#)$".;U`E"    - 5_jtnnvfZQQEGEMhcbiw—“–’~‹—›šg9Lpyly”œŸŠD    -  - -    - -  $#! !   -#8i˜™˜oRkz…‹‚xrb?HOD/    !#)%#$&%#)&"(&  )E_b`]es€‰sc_hrt€‰–žžŸœ‚_RU]eibM9:@DNV^\]ZHG`nu}‡ˆra[m~tjW3 ?DGLOMB-! ##'%!  - -  ?B%*+$&/1047429811+'"-5GKUSI=?=;huqrnpg[QUIGECXb]bwˆ”•›‘yu‰—ž—‡l;:[phoŒ™¨›_!  -      -   &  %"!$ - 7nŒ—œœlXr‹“†{umWF[\C. -     $'&&$#  $)BVie\gow}v_Vgooqyˆ““ŠlQ@?KPTK=.49:?OXWQG8;Tkrt„mWOWlldfV5,Rkoke}™ ž•m]N@52*-" -   $8BA??87?AOVH<#!!!(()%    -  =C %)&+)1>C2.4=6-(&"5:BRYTO>??;6?HB@54?NGBDT[QIILPNG;7-"'(1>=DQUOFNTQGIJBUbYNEF5:?NSBLMQ]Z]WURN\]VPVdbb[XLN=#%  -&><2,*!  `‡ž™œ¢œžšT  $u šeG  - -  - - - -  -   %4Unrtsxs¢Ã°²º·¨  ¡£“½¸¾ÑÒÊ¿¾ÆÑÜÖÀ»³£ˆ‡¢§¯¦¡ž¯·¬®°µÝèèÛØÍËÝàÒÒÔÓÓÓ×ÖÑɺ»¶·ÌÒÕÕØÙÚÜÙÜáßßâääæèèêëëéêèèæãâÝ×ÙÛáèëóúþþÿÿþþÿýÿÿÿþÿÿþÿýþþûöðéçèèééêêíïðñòðïïññòñóôñëééíììëêéæááãâÙßåçååäåææèèéêëëêéêïñòôôòõôôõôööôóóïïìéåâÞßáëõûþÿþÿÿÿÿþþÿÿÿÿþÿÿÿýúìåãÛÔÕÚáéîóóõöù÷ôö÷öõõõöõöôññïìíìììëèÝãéåãßàãÞÚÝëõùúûýýýüïÛ¿ÈããÙÐÆ»»­žž¥ §´Ûóúú÷ëêíëè××ÖÐ×ÕɽÅÕÖÐνongbWj«ÄÌÍÇÂÏÓÐÌƸ ‰~rkfljG‰ÃÎÉH      'U˜ ¦¤”]04#  %9.55/ (+,!"%!(''(%1::5@=4:GHBFOZZVREG. DnzŠ‚{“rYIBI9975:F?>4/.,1&$8F^iN)  ! -   ?_l€}wqb[OSMB9CRgbbpŒ•˜‘‘‚xˆ‹‘’†e<0C[^cx’ žw3     -   -  -!!$  -?'.$  - - Lz‘œ™˜‡e`vŽ”’ƒziTITYR;*     %,!!1@LIFN[be\N@AQUWW^^bb\SD4*'**.1'".68=AC5,'DOSV[]H7-/6'(# !  - - +8<:9)&43:EC0 -    %<:$ "&,*$&'-352:2&+252'+%.==TKGCGN[YPUWPU^]OYad^c`WTH1!"  - - -1@:6(  - -&]Š˜šš ™›£X! -  -$qœ›š…g? -     -  -  - -  &0QdemqvxšÀ¯±¼²§•œ¥«¤¶ÎÉÀÊÕκ¿ÏÚÙÉ»·­“ˆ–¦­¨ž¡ž§µª¦¯´ÒççÛ×ÑÌÙáÖÔÔÔÖÕÔÒÑį»ÀÆÔÕÕÚÜÛÙÛÜÝßÝàáãåéèëëêìêêèçáÜÛÐÍØâèðøüþþÿÿÿÿÿýþÿÿÿþþÿþüüûõïêææèçêéëìïñññòóðòñòñóóóóóíêëêììëêëêåãåâÙÞããáããâéèêéêéììëêèîððôôõø÷õõõø÷öõõóñðìéçãßßÞåìõýþþÿþÿþÿÿÿÿÿÿÿÿÿÿýñêèáÖÑÕÜàçíñóø÷øøö÷ø÷öõôôòñðñîïìëëîîëãßèçãáâãÝÛßìõúúüýýüùëÒ¾ÔæÞÓü°®›¢£®ÁæøûúôëîìëæØáåÝÛÚËÀÈÔÕÎÓ¾—ymagb^j¦ÃÇÍÈÆÍÏÌËÄÁ¼ž‰€~~tpiofC‚ËÎÈœP    - %PsŸ£¢•Z-8/  -$5:73**,)*)" !)..5ADA75C5?BOBGVRSVD9C( -FfsŠvz•‘fZOC=E:-.BK>AIGKNbn„™£©°¦œŠm]Xf[E_^]\YQ@?X`NafURXB2+.3+'#:I]cN) -"  V^d_u“™’Š~u„Œ“Žg9*2Va[lˆœ—…H  -      -+ -(# !#<#""" !=P%'(  '_’¤¡—†mk†‘•Œ„tdQCOL=6' -  - "$"  -$" %*9;65+%+,+%)'"%"!'!'" *)% &:>0+4JMGB:ENJIE:.%$$&%)$"    )%)&   - -  -     ";5+#,0$$&()150.26236+&(*5>AJMNE:8<:AGKGKLY_UNNWPJ]X^dcbhfb\[F,'  - "9:8,%  -!a’—š™Ÿ¡ ž]"   -,r›š˜kA    - -   - -  - -  -  -  (5I`fhnsvŽ¶¶¶¼³¦¡®­®ÃÕÕÃÎØÑÉ·¸ÉÖØÊÁµ¯–©°§œžš§¬¦©°ËäèÞÒÍÌÛßÔÔÓ×ÖÑÐÎѼ§¼ÂÊÔÙØÛÜÜÝÞÝßßÞâáãæèêêìëìéèæâÞØÒÐÏÛèðùþýþÿÿÿÿÿÿýÿþÿÿÿÿþüóîêæãåæèééìîðñòñóóòñòôñôòôóóññðïîëëìëîîëéèåâÖÞãäâäãâçêëêèéëêêéèëìîñôõ÷÷öö÷÷ù÷øõôõõñîìèåäááàãë÷üÿÿÿÿÿÿþþþþþþÿÿýøöñèÜÔÒÏÙäèíóôö÷÷ô÷öô÷õôòñóòïïîììëííêéáçèâßáâÝÝáìõùúüþýûöåÄÃàäÚËýº³¢œžœ¤³ÌïüüùðíñîëãÜççÞÜÖɽÇÑÒÏÒ¹’xfha_[bÂÄÈÃÃÌÎÊÊÃǼ ‹‚ƒqw_oiHˆÁÐƘL     Nkž¨“k*6/ ;=/:)"$-1#)&!'399@KP@4>>„ž¨©¦—}`v‘–™Ž†w`OMPK@)  - -   )!%-$$!!!L   - -   -     -     " +26783/'%%*+'.($ "  - -   -  +>9'#%%"1205664772(*$/9;GQ[VH<><:AEF=68=BHIKJJRMIKQTMH;3/026@>FNW[UWSTQNNSLU^WUM6'5""'$ #&*1-25,-1/*)$(8=K^ZJDAI=AEEI=95>FELKKSXZNGIWQB5&(33:>DMIKYXQSMZWTVPR_RHB8,2FI?SMKC>B@;>;>GIKDO\XM]]akR! -@j{‰‰™y`WHFEC;1101.47PWhm—¿Å¯­¯¬¥‘vbdxˆv`UTZY\[gaZ_dcMPO337-210 /GR\XE=B;/ - - - *Uly…yueMWOIE@UX\Xf„–™œ”ˆx€›š™{C" 6E_`brŒ› ƒH  - -   "##'###&"&(#+*(&,'""'0%*0,!+! - -   -2q’¦¬¯¤Œ{‚–££š‡€kXM_eQ1      (.$$(-(''$#&#&"  - -    - -    - - - -   -    - -  -  )  - - - -  - -      -  $;1%)'*'%0/40,415.&&)/AAXdP@==@<6?C:558@JNJLSRXOLMVVA40/'28>AMLKRQWMLRRTPFN^^WE:*1AT?=FRKN[MNFJXZQWU^honllfbi_aVA'   42+ %lŽœ¢¡œ››†`- -  `Ž†skJ& 1ƒ  -   -7CWfllnv|¢¾«··¸¤–š¡°ºÌÜÛ¿ÉÖÊË»¹Ì×ÚÑÇÁ¹š€Šœ£­¨ž›š¬­¦¨­ÁÛÙÔÍÍÚÝÒÔÙ××ÒÒпÉÈÀ»Ç×ÜßâáàââäãâáäèæéêêìéèåãÝÕÈÂÉÙâîúýÿÿÿÿÿÿþþÿþÿþþüùòìãáãàãåæêêïïïïòôôòðòñòóõôõ÷ø÷ôôïîðïëíîìëêèèèæçèçßäêëìêéçåÝÙÛâçêèçæææäéïòõõöùøøùøùùúøøùùø÷ôóññññïíêåæääáèïúþýýþþÿýýÿÿÿþþûïâÍÆÐÚâèëðòôø÷óõôõõóññðíîìèêìèäìùùóòëãßàÜäîùùøûúøí͸¿ÞãÕÈÁ¿¹®£–ž¨©·ÎîýùùøúûõïâàçÜÒÉǽµÁÐÔÍÌʬmsllTFQ‡ºÅÊÎÎÓÐËÍÉǹš‰‚~snm^mnEˆÄÐÈ›M   -    - !Ji{Ž™•Œa*)-  7B7/74$,-%&.($+HUJFJD?:<<=7?GQM]^YKMckoV' ?gx„y…–wYWJCE?1-136/7@HZ^|¡Æʵª±°¥’ej|u`UV\Z]Zhl_W^XGIA7**384)' 9BIOO]SGC?2#  - - )Qp€†}lPPPUA>VYURe}——›y~—š ™„? +<"''#!+)--3612.42)#)'/6(-$!$%(#,/01+*'$"$ /=@Yfkqoz„œÀ²³»¸®«¥¡ª§ºÏÛÁ¿×ÏÊýÅÖÜÖʽ´¤‰–¦²ª§ —ªµ£¢§¸ÒÔÑËÍÝáÖÕØÕÕÓÑÊÈÏź»ÁÓÙÞãââáâáããäãçéèèéééåàÝÔÉÄÂÌÞëúýþþÿÿÿÿÿþþÿÿþüõïëèæáääååçèìíïðñòðñòóóòóóòõõõööõóñîîììêëêéèêèèèãßâßØàåèççæâßÛØÕÞçëëééèéçéíððó÷øöô÷øùûùùùùùøøõôóõõõòññîéêçáàáçîøýþýþýýÿþÿþþýùíÜÌÇÍÚäèìñôõ÷ôôõõõòñòïíëëééæßßêõøððîçààÝäð÷ùùúûöèǺÇáÜÌÿ´¸±œš©¯¿×òúûúùüü÷íàççÛ˾ÃÄÃÇÐÐÏÒ˨ˆrjck`JL~µÄÇÃÇÔÓÌËÈɺ—Œ{stug`uuUŠÂÍÄ–J    G[q‹•™c+'/.E90,2,$)=0$%4'4JXNALM@^bba]VI;B<-*   -  )Rfy}„sl[U\QFDSRWYc€™¡ž›’}ˆ˜•™›~9"2Ple_xš§žz?   - !(*%)'(((0,/7-.7+521../7.2367IE:)U‡Ÿ§¥£“urŒ“•—ŽŽ}bU]l^:     -)2::<830*'/+)!'!   - -  - -  -   - -  -        -  -  !   -   -  #84!&$!(..02+87/.46) &19EQUUJ782;5AIFD;@HHK>JR\QONZUYOA91010;BKSSUQXKS]VOHDO`WHM<)2CBAIIJSRTNPHJLSVY[^glpqqnfej^QNE-    -A=' -$n’™™ššŸŸž–†S(   fŠ~ku–ž ˜‰~n[bbIGS\YC?:?Cm¡—„„lP;GYQOPYTKVomp€…tjgabZJSB9Khgonp{š¼²±¶µ»¹¬¡§¥¶ÅØȹÑÑËÐÄÆÑÚÙÒ²«—ˆ’¤¯¯±žš¢´°Ÿ¦´ÅÓÓÊÍÞáØÖÕÖÕÔÖÄÄÌÆ·¾ÄÑÝßäääåäáâããäæèéçèèääÝÔǽÃÆÓçøýýþÿÿÿÿÿþÿþýü÷îèäåæåäèççèêêïðððññðñòòïòòòòòóóôóòðïìëêèåååâàÞßÞÛØÖÕÑÍÖÛÚÛÙÖ×ÕÕÕÒ×àæçèééåäæêìíññôõôö÷øøùùùùùùúùøöøö÷óõòñðìêæäåáâèïõúùúþþþÿþþþýøéÕÉÅÑÛâèíðòöôõõòòôôñïìêêèèâ×Úáõøññòîçàáâí÷úúùúõåøÍÚÒ½»³±¨š™¢¯Æáöûüøùüû÷ëâëéÜ˾ÅÌÎÍÒÕÐÒǪŠnnlf_GO~ª½ºÅÐØÑÌÎÅǵŸ†€†ynfj‹M…ÀÎÈ M   ;_t…’˜‘h+-8 GE212(+0,;5*-2DXRLLGA8@DCC@^jVYbWQ\hpr_1Dm€ywq_TFA9/!64>:25:PV`y¦ÓÖº±¶¶ª¡Štm|‘„je\VZTYe_\cT2"4>5)6L\b^QABD;B7%#  #D]gqƒyv]WOJE?OP\`\{˜˜™““„ƒ‹”™™…C#8]e]m’›¡•\'  -!,*0,/93./*49634.?<70-133-6/9=C;,  "ZŒ¦§¢Žkn‰ŠŽˆ…qb\flZ7    !(1:CJMCD:71/)(&$      -  - -!      - -   - -  - - -  -  - '33& %%%/-1533770+22+)-49?L^U706@HGGEFSVKNOS\WK?5(+.1;HBGPWROKRXYNOGSf^MH>39K<@ENRLXWQPLIXLY\ddjjkpsvnlaf[OF5$ -   - +A5 - )k–œ•š¡Ÿ˜“†M' - d‘‰‚|r¼»¶¹·°¤š‡ywobbswbYZ_a…¸À³¨™zWfˆ{tmplmx–“• ¥¦ž¢“…ŒvodL?Fa]ghq{™½°²µº¾ºªŸ¦§µÀÓÏ·ÄÔÎÕËÆÏÚÚÕÄ»±žŠˆŸ®°¨¤¤ž­´¢«¬¹ÍÏÈÉßâÛØÖ×ÒÕÜ̾ż²ºÂÈÛÝãããæçæâæææçèèèèåâàÙͽÅÌÒáðûüýÿÿþÿÿþýþþøîçåæäãæèéêêëêêîððïðñòñïññïðññòððïðïìêéççáÝßÞßÜÙÖÔÓÒÒÊÈ¿ÍÒËÇÃÆÇÇÉÆÆÓØÚÚÞÛÞÛÛÜàåéëíïòòôö÷øùùùùúúøùùùùøø÷ô÷ôñðíìéçæäâßÝãåîûþÿÿþÿþþþ÷éÚÌÈÐÝçêïñóóóôòðóðïîêêëéåÚÐÒÛïôïöøôîäßâîùøüúùòã¾±ÌÈûµ»­­¦“—£µËéøýüùüüû÷ìèîçÝÏÄ¿ÅÐÒÕÙÓÓŦ‰{wpobHEu­¸¸ÆØÜÕÐÏÈDZš…w~€z}ˆ~NŠÃÎÇ¥T     782)..*00%'!# 10@PQTHHCEBC?@NR`bbRT]ljngA<;/+'+&1/&,+&94:GFIB>BEHHDCIMMW^XPZaeegU6 @mƒ~†wfaP><6,-1-10+21Cckv“»Õʸº¶´«™ƒqit’xmf]deh_RT^S9  '))' Cv   /Xmƒ{~uhYTWN@:K_aecvŠ’‘‹vo†”›™‰M&%"4TbXhŠœœl: '(,006/+,2.+3458:71-6436=56EH?B7"   !N}˜—’soˆ‘†{xsebq}e4    -   /;GNW`[Z_`ZNGC>1'/%  - -   -    -    - -   3?:--.:5465-1.+#(&%-AJIHOF?:;:<=H>98>GGODENNIHLVTRNB:0'-.6?HTQRWaL[[UVIEUUNPA.';GFEDFNRXR\NBGPQYZQCO^jpluqrifhbbHI=% -  - #C2   - +r•—˜š—›¢š–M  f•Ž†¦ÃËÆÅ¿¶²¥“‰‰ƒf\_}xfdbbvŸ¾»­£˜_\z‚ur{l|˜žŸ§­««§•“|uuO9DR`ghgu„¯¶®¹³®ª Ÿ··¦¦ÂÙÓ¹ÂËÏÖÍÇÑÛÛÕÅ´©‹£¯±¤œ“”¦¬¨¤§ÇÙÐÐÞæÝÚÛØØáçâ×˼²±¸¹Ì×ÜÞáâäåæçæåæåãÝÞÚÍ¿¸ÂÙîùþýýþþþþýùôîåâãçççééêìíííîðòòðïïïïîîðòðñðíéêèââÞÛÖÑÎÌÎÏÐÐÎÚÛÜÖ×ÔÎÎÏÎÌź·µÄÌö¯·»¿ÂÂÃÊÏÑÓÔÓÍÌËÊɾ¼ÅÇÏÓÖÜáäèîòõ÷úùùùùùùúøøùùùùùùøóòñîêéçáàÝÙÜåñùýÿÿÿÿÿþúï×ÈÉÖãæëíïïòñðíîêçåáÚÕǼÃéöúüþþúðâåñùøúøðàÍ·ÅÇ¿¸±´°«§“ž©¹ÍêøúúúüýýûôñôñæÚØÛÓÌÑÔÙ×ÑÔŧ‹‚}yodZRg¤¼¼ÈÛâÛÔÑÉIJ—ŒŠ|‘vmsN‹ÆÌÌ­`      4G_xŒ•–n3,34E*4/-)1$42$*(+9:B:INIEBECA?F:DGW\HUcWWdY9 9e€|”}cYK>G;**'+2-,:=Eb}’³Ðɹ··¶¯™…uksƒ†tg`Vekh]S`]Q3)!   -  - /Wo|‚€tugWOSNJ:I_fcbo†‘“‚{„•”—K/=dc`zŽ”’€W  -#-1858=<6;?9<>A;=EB=?C;CEAH>JHNI@+  --c•žŸ¢Ÿn}‘‚~zpdlxuU$   - -  AHNWXY\^a_UMI=;0&()                 -0B4$!!%/4985353..)%% )4;HMKUN;4;8@KB=?=DJNOKIKOPILRQNM>7+)-1 -  &6$   .n‘“—›“š¢œ”M! - - j‘Ž„«ÆÐÎÉÇ¿½¸­¢†ˆxdbq{zh_cm¯¾µ«rZp†|u€u}“›ž¬©¦§ ’}otsP:>V^jqrr¢·­¶µ´­™•ª·«§ÁÓØĺÈÍÔÓÄÌÚÝÚ˸¯¤‹¡®®¦˜•–¢±¡§­ºÍÎÏßãÛØÙÕÜåèèæ×Ä´­²¸½ËÖÜãâæææææåååàÛÚÒŸ½ÑðüýþþþþþùòíèäßâããåèêêêìïñððññôóðïïîíììîíëëéèäâÜ×ÕÎÌÅÁ¿ÀÅÒÙÜÞâæèååßÓÇÇÅÈÆÁ¼½ÐÔÌÃÂÃÀÄÆÀÃÌ×àååäáÞÙÕÎÁ¹»»¼ÀÄÉÏÖÙÞèëîö÷÷÷úùùùùùùúùùûùùùöôñïíëççãÝÞÛßåîôùþþÿýýûìÚÐ×ÞâéííïîðïíëëèáÜØÌþ¯»Üõüýýþüôçåòøûú÷ìÚ°Á¿³«­­¬œœ£µÁÚòúýúùýüûùòô÷ïäÛØÖÊÈË×ÚØÔÖÀ¢Œ„saZYr¢·»ÀÔÞÙÖÑÇÆ´˜ˆ…‚‘cgjQˆÁÌÍ­d#   5M[w‹’“q3014K?0;48.//3, '"!+9DC@KJIKRE>F?CCEN_US]e]UR5 1Zuy‡’x`\LBC<2-.290/;GTw£™¯ÍÊ»½·µ²›‚qlws}qa]Y`eee]^^U7&  -  - - - )Qn}…‰{wjVPLUR>JWfa_qŠ•ž’‡~}’˜œ“S"(5P[[ax“£™t;! !##+4=>?A?=?A<;:A@BDINXYH3  - 7rœª­®¬“t‰–˜ƒuofwyg3   -    -  "OPQOMLVZ]VNJHE>20/*#      - -   -    1D:#(#"(-6685-/01,++%$.88@JQSI8/6@>LPEHFGILJKIPSRLQQOGF;2&,119?FHGHHJLGBOKPPUZfa\]<  -2^zt‚uZ[UK>62)/24637F^˜½· ²ÌÒËÈËȺ£–|gqppr]e`WX\bZ[aQ7#  $+3$   $Egz„|y}oQQ\TVAJTe_apš¡¢•†o{‘•–R&  (9XSZp—§Ÿ].!  ##%$/17:<67=;:6;>AGHKQJIIPTTPRLTQL?-),*0>DLVWPYZXabXRFCSdYQF5)ALG;MOOLZ_ZMSQINOJM19grioywtk^UELIR7%0$.l‘“’•š™œ •~L% ,i”›’š³ËÖØÊÆÇÁ¿»¸¥‰ƒ‡poq|€jgfjp¹·¨’nScŽ}Ž™˜¨«¥ —ŠrgkgT;9Qdaeuy}š¶«±·ÆÈ·´›š¡–§ÓÛÝÓÆÌÍÝÖÆÐÞÞÕɾµ­‹‘¡¬«¥˜’“£«ª­±¼ÍÏÜßÕÖÐÏÔÝçéäÜȺ«¦«¶ÈÖßãæçççåãäàÛÙÓÉÑÓ×æ÷ýüþýýûúïßÚÞÝâãåçëëêììîòñóöúùöôòóðëéêèæäãÜ×ÔÐÌÈÿ¿¾¾ÂÍÑÑØíúýýþýþýýóÛËÏÑÓÕ×ØÒÝßÜØÙÖÒÒÑÊÈËÖë÷üýþþþü÷êÜÕØÓÐÎÅÀÁÈËÊÎÕßæêëíò÷øùùùùùûùùúøøøøõóôñïíîìéèçáÞÙÙàíùýýúòæÛÛ×ßèêíìëíììèâÞÛ×ѵ©®Òñûþüûúõêçòúù÷ïÖ¼°»¿½»¹µ²¬¡”•Ÿ°»Öïûüüüüüúøñ÷ûúñÛÉÁ½ÅÍÞãÝÕÒι‘Ž¤¢•Žy‹²ÀÄÌÖÓÑÌÄÆ´šˆ}Ž–|\\xX{¾Ïͳj&   - ;J`l†”w:1IQZ=3;4+(87+)%! )59CJ=7ASJCDAEJSRYWXN[Xg^RK0  1_pƒŠpX\P##"  *29@B?@JGGIMKOJNFQPRTXQZYfbdd\bXE(  -g‹§­­¨‡ny‘‡„}jat€tC - -  - TKLQ]_`RLC92936=801#    - - - -   -   -   -  .@7% (&!'399,5812-,.*#&36>CIUK=2314BPOHLOKULJTVPXO=+.))2;HMQ\ZW[]Z_ZL@GWbUMI;)AIHFHOSNYaZOLNNJOGL5Kkrs}tiaOFR]VG*"(,"( :oŽ”‘’“›£ zG!  - 'oŽ———œ·ÍÓÔÊÊÇÃÁ¾Ãº…}„ˆjl„‚qmi^d‚±½±š†c[xŸ‰w|Œ•˜¥¥¦¥–x\be\B4TZiny||•¸®±·È˸¶°— Ÿ«ÖàÞÛÌÐË××ÇÍØÞÚÒÄ·´›Œ›ª®¥˜’œ°«¬ªµÌÔÚàÓÏÍÉÉÖäæßÚË·©¥°¿ËÙÝããæçåâäáÞÙ×ËÍÚØßõüüüüüøîèÜØÜââåéêëêêîïðñóøùúúøôóòóðêèçãàÞà×ÐÏÏÌÇÇÆÊÎÓÜæìììùþþþþýýþ÷ç×ÖÕÙÞÝßÛÖßãÜÙÚÛÛÜÜÓÌÑÑØèõûüüþþý÷ëêñññéãÜÓÒÒÎÊÒÚÞßßâêñóöùøúøøùùúù÷ùöøôöõóññïííëéçâÛØÖâìòóêßØÚ×ÞèééêëêêêæäáÝÙÏȶ«°Ôïùþüúøôíéôúúöêд©¿Â¿¿À¸µ± ”™¦²ÄßõûüýýûüûóóûýúñÙýÅÌÑÝãÞÓÍ˳™Ž‘¢¦¥š™–†…­¿ÅÊÔÓÏÏÁƳšŒ“’v\`}P{¼Ëɲh    - -@NVPDLYV]fmS.!  - +\xv‡ŒiYVLC72,1077)6CSxºÞع±Ë×ÜáãßÓ½¡ˆqdbgmffYOJT`XRXI;#  -$\veH1 -  -  $Mcx„}z~z\EPQDADP[aYjŒ”—›“Š€z••–f( - )D`Yc…ž¡‹Q*0(# +'% !$! $.6>KBJRLPTTVYRQQK[TZ^NWX\Y[meed`L% - 4i–¤­¯©¡„{Žš”†€€mdza5 -     MQW^dbYQC:,*/1679@=+  -    - - -   -  - -    -/;4& !&'&!$+;7,.=27200'+,.7@@JLI6+3777@QI@?DPSOHN_^TKMMV_L9("'3*;CHLNTQTQ]VZVHQ`dXOF8*ER?>?MPQY]]WKKENOOI7+'TfkxywpjN@XaWKE4!!'$ %.kŽ•—‘˜£œ—–}G -'e”‘”¤¸ÌÔÔÌÊÉÇÄÅÌî’ƒƒ‰|gu„~jjhk{©¾´¢—yYd’…| ˜¤«¨¤›–xclp`=:H^efqty—¸¯´³ÇȲ³ºš™™«ÑßÝÞÕÏÊÒÚÊÎÖÞÞØμŒ–£ª –—Ž›²¨§¥ªÁËÜàÏÍÈËÁËââØÓÈ·¤¨±ÃÍ×ÝâãåææäâàÙÙÓÄÉØÖæùüûùõîäÝØÕ××Ýäçëìïîîðó÷õøüýùøöõôòïëçäàÛÜÛÙÖÑÑÔÖÐÔÛäêðõúùüúüýþþþüúòêáÝÛÚÛâåâãÞáåâàßÞÜàâÝÛÙØÖÙâíõûþþýüôöûüýýü÷ñëâÛÖ×ÙÛÙÙÙÝãìòô÷ùùø÷ø÷øøøùùøøõôóôòñðîëìæãÞØÕÙÚÝÖÓ×××àèèéêèêéêèãáÜÚÕËļºÓëöûùõõõìêõúúôå˯©Å¼¿ÁÀº³®ž¡¯µÈéøûýüýüýùðöüûüôßƾËËÑàãßÔÍγ•‹•¤¬¥“•š…„¨¶½ÆÐÔÑÊÉÉ°œŽ‡Š„^_j|‚Z{¹ÇĬh'      !;GZj–™x:8ehLC;5+',- !*#  %)3F@H@DECFFGBGBRXSJMSb^ckE - )]{z‰‹i[_MF6,23.56-:FOÅßàȵÎÝåééåÜĨ’|pbieeeePFRaWVYRA1 -  #WjeR? - -   'Lbt|y~‹yaGV[J@BV_bWe™Ÿšy˜šc(">d\^o‰œŸ”m;1$#"'%-(,).'"+$& ,#!&""" &3>bLSOUTaVLVVRQTX]^]XT_da^dehmggI$  - @{› ©­¦—‚…•„„‚uqysU&  - -     SX[TNQGB6-.'&.10/25'  - -         -  - - 6?8)!"&%,/*.+41,207;/&%,.-9CDGKJ8-*%4>BJA@@CNcWOW]WVM>JTSQ@0()+-=@IUPPSUSYTSQRM`eWNJ31?=OCHFIQ[YYMFNOLOJK?7-3Sjqv€j^O[`[XSB9" #"" --fŠ““œž˜’yB   )kŒ“˜¡µÎØÖÏÊÇÆÅÉÐÇ·¡„lmy‰yjdnk‡²¶ª ‘nWe‰”ƒ›—¤«¬ª ˜‹kgy€a=AA]jnrrx‹²­«·Æ̸³µ¥œ—°ÏÚÜÞÚÓÐÐÚÍÊÑØÞÛ×Ë枤¥¡’‹—²ª¢¢ªºËßàÍÊÈÇÂÊÛÛÊÉɳ©¬¹ÅÏØÜÝßæäåãáÝÛÚÖÌÉÔÔåóóðæàÝ×ØØÚÙØÛåéìñðòõöøùúûüüú÷õóòîëåÞ××ÖÚÛÚÕÓ×ÛÝãêô÷úüüýýýýþþþýùòìäãäæâÝáåæåæåèéééçäâáäããâàÝßÜÚâïùüþûøüþþÿþþþþüøòíæààÜØÕÍÑÜäêóö÷ø÷÷÷ùøøùøùø÷ôõöõôòóðïìêçãÞÙÑÈÆÃÎÕÕßçêêèæéééèåàÜÙØÓÍÅÀÙëñõóòôóíìøûúõåɯ²ÈÿÂźµ¦  §®½ÔìúüüûþýüùñøüüüøæÊ¿ÃËÐáäÛÖÑȸ–Œš§±ž‹“œŒŒ§±·ÆÔÒÏÌÇÅ°—Œ’‹gTft†^|¹ÃÆ®h#  - -  -KIIDHADIQNEHUdfdV+  -+Yuz†‡d^`E?;/..0/>=@IL}ÉâäÌ¿ÏãèëìêáË´¡‘vgkikk^JLY]SVWHCF( -  -*SnaJLcaak‰šž•wŽšŸ™g$ 9M``^}—ŸŸ„N3++2*0-.-0/'$.(.N,110)*$+&"#!&!!1D`PRR`\^_\_]`ecY]]_^fhklhgtnoqiQ-  Z€ž¡¦¢›Šˆ”’†„Šum|e?  -   -PKI>NC;2'&)(')-)&''   "!$!',3990    -     - -  -9KB+%#&')*)+15:42./)(/, ,-3>DLC=A6)009B>;==DIVWLQ^SJMKQ\RMB8%)+1BINRSPMRMSRQRQL[d[LJ:,dq~ysr[NU_KFEJXd`h“˜œ›Š‰†Š˜™—i-   %:VVXg‡œ¢”f@6-)++6<43%$,)+08+1+045+(&/)*()!"3FXXTU\bfab^^`^`][]fZ]gaekrvowpnV- %aƒŸ¨¨¦˜Š…–ž”‹ˆxqk~[4 - - - -     FC<>EA3( ,861+#!   " /785ALLRD* - -  #&- -    -  -   - - -     6M:% "&!$,*+4962/1..122% ,1??GG<:1)050??;49;FLWVY\]WKNWSHE?."'(2>ELORSMHIKPNKLR^caMC6._\?@@PQKWTXRKKM[RSOKPF4#>pvuwkTQble_[ND>4(%" -  - 6j„‹‘š—š“v? -  $k”›©¼ÏÖÓÏÌÌÊÊÔÖÎÅ´¥Ž€……gmzvsohef{±¾³§kQZƒ•Ž¡—§¬ª¬“{r†pM:G]husoy‰¬³²¸Äι·¼µ«©·ËÕ×ÙØÔÓÓÖÛÐÎÔÚÜÜÓÄ«„›£¡ž’¡°©©©¬ÃÚÝÌÃÁÂÇÏÌÀ¸ÆËļ¾ÃÌÑÖÙßääãáßÚÜÝßÜÕÍÉÃÂÆÉÌÒÙÜßßáãååæìðóöøøùùûýüýüûôñìçäÞØÑÎÈË×ÞãåêðõúýþüýýýþýþýüöæææâææèêëîëèìéãßÙÔÖ×ÙâéíîéääëëìîëëçåáÜÙÛÝÜàöþÿþÿþÿþÿÿþýÿüùóéÝÕÔÔÏÑßåèññõ÷÷ùøùù÷õ÷÷÷ùùø÷÷ööôñïïëçâÜÔÑÒÚåèêíìèççèéêäãÞÜÜÖÕÒÏÜãéîñøøõîíøûûöæÍÁËÇÄËËǼ±¡ ¥¬ºÒèøûûüýüýü÷öûüúùøíÝÇËÉÇØÞÜÐÑÄ­•“¥°®”€Š““¡±¹ÃÑÑÓÏÇɳ˜’‘sfivo}~Pp¯À¾ªb%  3BTs†“’y[ZA8B.$'5:/.*3%$,3VaZJ6    -!=aqƒxqsnYG[_V4%"!#2FNB1(!  '/7:CBIPRVE3! - #->@>DLSVVOSLJMWSQJONG=0"Zvusm^Y`ho`[[KB;6+   1h”’’‘———“B -  *q‘•’•§»Ð×ÓÌÏÌÌÑÒÙÓËõšƒ…‡thhxoke[a¡Ã¼³¡‚YTv˜’¡™¤­®©¢•€}ŒŽ„K79Thoquw†­²¬·ÅÉ® ®®¶½ÁÏÔÚÖÎÑÏÏÕÜÓÓÔÖÜÞØÈ®˜Ž˜£¦ ‘“Ÿ­«¤¬¬¾ØÞÉÁ¾ÀÒÕÉ´»ÉÑÅÆÇÈÎÑØÚâââßÜÜÚÝáãßÜÙοÄÇÓÙÙáåæèçåçéîðòô÷ôúûýýüüü÷ïíäÝÖÎÍÌÐËÍÙåîóøýüýüýüýþþþýýùóéÜÚÜãèèëïññìèêëáÓÉÁÁÃÉÕåïñìëéêíîñððíèçåßÛØÒ×ëúþþÿÿÿÿÿÿÿÿÿþþýöîèáÝÖÌÍ×Üäéïôõõø÷øøõ÷÷øúùùùøøõóòòñïìçäÞØÕÚåìëëéèæååçèãàâßÝÙ×ÕÓØßêïðøúõííøýüõåÌÉÕÌÆÊÈÁº±£¦¯¾Öíùüüüýýüýúúúøúú÷îáÎŽ¿ÓÝÛÑÑĪ‘—®µ®…{’Œ‡¡²ºÂÑÓÒÊÉ˳›•„eamv…‰]{®¹¹§i+      -;EVj{‹‘€fO387+%141)#4+!&$1;GKGDGPLP]jm`S;  &\t|’‘j[YEGA94054K?A?]‚ÅãåвÇÞèìíëéØƽ¬ˆqf]otgORebXacPGN80""-12'":MXd_; - -  -  @gu‡xyto[GV]UIDHV^bdy”šŸ›”‡–›žs:  &+EUNJpˆ™ lI@?574617?73<55434941/3,0;A23$"0AY^a`h`bcgcifkkhb]d]cpyrsvnrtx|sX6 4…œ Ÿ¨¤€Œ‹ƒ€wcnˆn8       ?>@B>7'%(&2?OXRC8, "/6?>JMMSUH8""/8/(*),3<742/1CJIIPSTOKR_ZN?50& *9FGOMXSIGPPMQLUcd_TK9.AIFBAKRROZVNJKMLOPHMRSI;.%._qxjd\imso`ZTSG?, - +  ,bƒ—’™šŸ{E-rŠ”˜œ©¹ÏÚÙÍÊÐÑÖÙØÓÑÎÆ¥‹‰ˆg_{Žzmccd…ºÁ·¨’pZg˜œ™¨¬¯« ‹ƒ€‘Ž‚R2?]iniow…ªµ©¸ÅÆ©š£­¹ÀÅÎÑÔÌÅÐÍÌÔÜÙÔ×ØÜßÚͳ Œž¡§¢”‘©µ©®´½ØÜÆ¿½¿ÖÙÍ»ÀÇÏËÃÆÉÍÑÕÙÝÞÝÜÚÛÚÜàãâàÚÏÆÇÍÒÕÛÞäéìéææçèìíîðòöúüüýüúõñèäÚÎÉÃÂÍÏÏØåòúýýýüýþýÿýÿýüúòëäÜÚÝáèëìîðóóîëêêæ×ÍŽ¼ÇÙìòòñëéêîðóòññîíìçåàÚÖÛëõýþÿÿÿÿÿþþÿÿÿÿýüú÷íâÖÅÎÊÔÞåìïò÷øø÷öùøùùùùøøùø÷óôóòðîëæààÚàíðìäàáãääääâãßÛÜÚÙÖÖÝìñóö÷ðíëúüûóÝÊÚßÎÊËü»®¤©µÇßïûüüüýýýüûúùùùùöîäÙÈÀ»ÌÞÙÒÑÀ¤“œ²¹¨„‘“¥²¹ÅÓÖÒÍÊɲŸœwYjps}ŽŠ_y¸»´¥f+   -?:Qit†’‰n@8(-%+20+#"*#!&+/5AW[``]RLFJJNQTFJHJYgqna?+ -  $cw€f]XHE94*+2]szy}nWCP[NE?JT_gex—™˜›–…ƒ–œšy9 - (8EIP\x™¤œ‚[I>563@;9AECAT;87989>.112<954/%+BOajeillpqnqnjgdkdjgfmvrqlsv{u}vf6 -Cˆž¤£«¦Œ~”“‚}um‚†b$       $C@E=6)#!+-./7>DE:4  *7A?DLRSXP>-$0?PT[VPSgu†nXA%  - - -$-83  - - - -4@7# (&-2344--0,22+'$"+3;DPSH>,%-(05?9-$/8BDCORQQTUYTFC8)"(5;BOYTMIKTUONNRbb_UJ51GLHCIKNTQVTLLMHIVNPYVYVS?6/2]qobfgnvrieb\RG2   -  #( *X‚‘’”’˜–”‘vH   1i˜˜Ÿ¯»ÏÝÙÐÓÑÑØÚÛÕÒÑÊ·£Š‡‘xbp€†rjfcq¡½½³¤r[o›£–¡§ª°¤—Œ‚‚[<;Wjqooo~ ¶­´Áô³¦«¿ÃÇÓÕÕÏÇÌÑÍÐÜÞÙÕÓÛàÜÓº«šŠ’Ÿ¤§¢—•¡³«©±ºÓÜÅÁ»ºÏÙ×ÍÌÎÊÎÊÈÏÑÒÕÙÛÛÝÚØØÒËØåãÜÒÐÑÒÔØÜàâæéîíìííêêëïðñõûüûöòïêâÙÒȾ»¿ÆÑ×àñùýþþýýþýþþýûøòêãÞÚÞàãçéíîòóõôõñìêêìîìäÝÞäêîòôñëèêîóõøõôôôóðîëéãÞááçñùþÿþþþÿÿÿÿþÿÿÿýþûðàÓÊËËÒÝàéïòôô÷ùøùúùùùøùù÷÷öôöóòïëééåâêíëâØÙâããããââÞÜÙ×Ø×ÔÞîóöùòðëëùüùï×ÍãÝÑÈÇĹ¯¥¡¬ÀÕéõüüûýýþüüüûùúúùøíåÖÍÊÈÒÞÝÓѾž•©´¶©„y~‘“©¹»ÇÔÕÒÍÈǵ¤Œ^_n€‚‚Œ‹_y»¼¹¨e- -   )EK[m‹ˆ\86/+2A3.$ &  #!",3?BN^]e^`TBPROLPQBKFRdknmT/ Zw„Š„f\QFG:/%/8@MHLTVw°Úàв½ËØäìëæ×Çùœ~mlpq`][dYP_]IIN?./'&"&# (' >_quk8 -   5Zpw€wrlVEQ[RA6I\]`^{—žž”ƒ–Ÿ›w< - 4>JTUhŒ §”{]OJDFLJFMPM=ZPBC>9762=V`edlppoottuqjqqmgjkjpyuq‚€|thA - V˜£ª¬¬š‡ˆ™˜ˆmpƒ…O -     - HHF9.,$''2-)!9+,.0-!-??@FJU[_[N=91-.7DP[\URL\mƒo`L-      - -:?GIJ>' -  0=6$#&%,0892/-1*423*%%$,6;=HMOA0'-407@<,)-9?A?IORSTTTTMH=$ -;;KSXSKLKY\IPQQeg^YJ93CQG?GPLRTUTINMMOLHQc_`_Y[H8(6atgglkohjra_[K>*  -  -!-  ,Z{“˜“’‰pE    2j‘š£¬¹ÐÛ×ÑÕÓÓØÜÛÖÖÔÑÄ´›‹ŽŒrdq‡‚si_i…§¾·±œˆci”§˜¥£¨®¦–’„‚••‡XB?^jnwppuš·«·Àò²£°»ÀÈÏ×ÝØÍÌØÑÊÙÝÖËÐÔÜÞÙ­£Ž‘›£¦¤“’­°©´µÊÙÁ¾´»ÍØÙÒÓÖÉÈÍÐÐÔÖ×ÖØÛÚØØÔÇÁÑäßÙÕÒ×ÚÜßâãåéêððóöðëêîðóöùûøôïëáÙÓǽ»¼ÁÏÛçðôûþþýùúýýýûüøîçÞÚ×Ýâåçèçíðñôõöööñìëíëððíêìììíðôñëéêîô÷úõööøøøõñðìêçãâáäðúûþÿþÿþÿþÿÿÿþþÿþúïÝÕÌÆÍÓÛåìðñöùøùùùùùùùøøø÷÷øõôòññïêéëîëàÖÔàããàâßáßÜÞÝÙÙÔßñôùúõðéëøûôçÐÕâÜÒÌÇÀµ¬¤¥©°ÇÚíøûûûýþþüýýüüüúùöíàÔÊÊÌÒÝÝÖѺ£ž¬ºµ¢sy‘š–©µ»ÆÓÔÎËÈɶœ}bbr…{‹ˆ^|½Á¾§n'  -    EPZv…ŽoH47//>:*& %)!-(+<>HOTaqg[UHNZUSXUKHP`cflY9# - [}ƒ‚}iYHL@=).1B:HGKOWkšÊØÊ«¸ÆÊÚççäÓÅÀ· €ljsyeefeUO`Y;ME<--%$,"&#45,A_prj<  -   9auyxqqtW@FQHF@U[_YVs‘˜ ž“€‰š™—tA  *5BISZ˜¢ ‘k]YXMMW\WOYZJGOUMITUJJAAGMNBA,,BYgelppprrvutxptvv{u}{€}€‚†…€}zgC -*f ¡¥§‘}†‰…‰~r|Œt3        IGD8)##"+*##%0*'-/) %3?GJMX]knnmooiXC7?JTSQICSo|o]L6'    - -  .:BLU^\TD:!    -  .B3%(!&9:9370/.,-1,()"(29>AIN=,-577@;;0.3;A@CIIYUMNUWSG<$/;>HQR[JNLT_YSMSfl`UD7*@MB?CIMLVUQJHLIRIILV\ae[S]D36_\Ukkifdkcc^PI8$   %$  ,^{ŠŽ‘Ž‡n<  -,o’–Ÿ§­¸ÏØÒÑÑÕÖÙÜÜÖØÙÛÑĨ’Š‹xih{ŒvkffoŸ¼¼²©’lZ„¢›¤¤¯²¬—‘„‡’•ŠY@9Sotvqwxš·­·¿Æ¬§¨­·ÄË×ÞÝÒÊØÜÏÕÚÔÄÏÐØßÜŲ®’‹’§®§¡š• ©¬¯´½Ð¾¹ºËØ×ÑÖØÇÆÈÑÓÕÔÔÔ×ØÙÖ×ÏÉÆÐÞÛÚØØÚÝàãâåèëîñõùøóêìîó÷úù÷óëçáÚÍ¿»¼ÉÓãðúüûûþýûöðøûùöïçÝÚÚÚßãäéèëìîòòñôóôöñëëëìîîïðîìíìîðìççéíó÷öôöøùùù÷öóññíèçååáçï÷ýþþÿþþÿÿÿþÿÿþþý÷êÛÊÈÉÐÚçìíóóøøùùùúúù÷øùùøøøøôõòðîîííëàÔ×ÚáåãâÞÝßÞÞÙÚÙÕßðøúûùñêêõøìÜÏäæÛÎÍƾ·®¡©°´ÎáðúüúýýþþýýþûüýüøõîçÜÏÊÒ×ÝÝ×Ò½£¥¯¹±¢cšœ¨¶¼ÇÓÑÐÍÇÆ´žrlp‚‡‹‚}Wn¶À¾¨w+  - -  -"5ITr€‚^H?:/8:0!1'#! +&/A??ADXdtocXZP\VYSXKJW^hf_:% # U|Š~`[RF;8<-2/1>IQ]clŽºÎƦ¯ÂÆÑßáÝÎþº§…`ap‚{umgXUccCQR<5,%*/'!*9;$Ag‡rH(     CbŠ‹|mvpTEIX^QMQRfaXoŠ¡¡’…‚š–›x@   )7?TOd¥Ÿ™zfY]ZR]]XMXVKGQMPUNVNNPRPWQCE6-C[filstqsrpktuytxwxqzz}{z†ƒ†ŠŒ{fG 7uœ¥   ‰‹‰ntŒq3 - -      C?;."$()! *N45/   $3BY`jrz‹ŽŽ”˜‘|ZJ?ADHPMANhvyl\J@53& -  /@Pa`_a[J5*   -  /D9! "#&+-/2/1--/82&%#$+2<=EI@<34569?=4//4>D==CFMLSPVSOED/'6?KRXQFLOOYROJOfd_Q@5*?KI=IFINNS[RLKLVTZN]fb_b[YQB.7M\gddfookd]]RF@1  & )\z‘‘•Œƒg+  ,h›Ÿ¤®»ÑØÔÒÒÓÖØÚÚÕÔÙÜ×ƶ›ƒ‹Œnfu€‰vnmg†¯»°ªš~Zf“–£¬ª¸­œŽ‹•˜`A=Tprqrr{›´°¶¾Ã±¤¨º¾ÄÊ×ÛÝÔËÖßÖÐÔÖÉÉÍØÝÚɶ±Œ¤ª®£œ‘›ª£©°±Å¿·´¼ÐÖØÊÏÙÈÅÊÐÕ×Ø×ØØÕÕÚÕÑ×ÌÉÙÜÜÞßÞàâåçèêïñõ÷ùùõëêíñøùõòîåÞÒÇ¿³·ÁÄÚïùýþýüüüýûñéîòìæÞÚ×Üâãççêëìîïïòòñññóôðëêéêìííïîëíîíìèææéîðððòóôøúùùùø÷õóðïëéçäåçíõúþþþÿþÿþÿþÿÿÿýûóæÒÈËÌÕãêíðöøùùøøùùùúùù÷øù÷ö÷ôóòïïîéâÚÙÕÛáãââáÜàÝÜÙÙÕãóøûýúôëëôïâÓÔéçÚÑÍÅ¿º¥ž¤±·ÒåóúúûýþþýüüýüþýúöòðíãÖÐÖÜÝÜ×Ϲž¡³¸±zl‚“›£¶ºÈÖÖÑËÅų“mkq€‹Œ†||_q´À¸¤k+  - - -   "2>KOOQMPcxzjRA?@8,(*1<;,'"   - -%?V^_cc_N=* -  -  - -  /:5%" %%##,,)-16.+-/)!!&-06ACOF>412:<>@:056@A>AGFGKLIXPIK@2+8AGR]TGGL]\YPLMccbRC26CH?8GF>KPPQTKOLRQYOXdf`__b_S<' I_caigmrnegcYVLJ' - ( 0b{†ˆ‹Š‹‰‡c+   8s‹™Ÿ§¯¸ÎØÖÓ×ØÒÕÝÛÕ×ÙÚ×Ë»§ŒŽ“zlem~{rkfpš¸»²¡Šfb‰Ÿ¤ª¬¼³˜Ž“•‰a=ETjppvtu™·¯´»¿ª›Ÿ²ÉÍÄËÖÚÛÒÊØáÚÑÓÚÎÆÉÖÞÜѾ¬§‘£¤¬§ž”–¯¦Ÿ­²¾À·²¿ÔÖ×ËÏÚÊÆËÕÖÔÕÖØÔÔØÚÍËØÏËÕÛÞÜáâåêíëêìíðóøùùõîíîñõòñëãÖÈľ¸¶ÀÉÝòýþýüýýþþþùíÜÕÚØÖÕÙßâèéìëííîððòïðïïëîððìèèèêëëêëíîîðìéåäèêìïíîïñ÷úùùùùùù÷öôññìéæåãäêöýþÿÿÿÿÿÿÿÿÿþþýùìÝÒËÌØáèëðô÷úøúùúúùùøøøù÷öõôõñòñðîçàÝ×ÖÜâãâãàÜÞÜÛÛÚèõöüýûøíêòçÛÐßíæÚÔÉÀÅ·žœ¬±ÂÝêôúûýýþþüüýýýýüú÷ððïçÙÏÓÙÝÛÔϸ¤§¶¹¬“wl€’•¡³²ÀÛÙÔÐÃÁ¤…ljsz”“‡rwds´Â½£m(  -    -%6BVyqZOC75>8,3+& ")027#  Sƒ…”sb_RL@802.2=AENP`qŠ°µž¬ÁÃÃÊÆÁ«Ÿ³¸¤jo{…Œ‰scXR]`CIM-**1)-0&1EZPFPXr€ˆ€K* -  4Vk}yltt]EOU`U@FOXGPm‹›Ÿœ”‡u{‘–”ƒD - - ".COK[v›©§™y`cX^`[\]\W?KDBR^Zcjf`d]XTZYF>J[jptrpsprroouqpx{rrxqvuy|‡„ŒŠ€qN#&S‡¥®ª¦ ”—¡”‘{‰|C - -  - -   *)"! $-.!%'9CD6  '4Kev‡Œ“š˜œ £Ÿ”tR>AAKONJLaƒ‹‚jYHC=EHLZag_NA540-("  -   - #9R`aaY^^P>&       #2;1" +&!'2.+16421*)($#(39AIFC<302:;=<2087=BFEINRKMQ\QKMB)1JFDMPSRPIMXXVT\ibbdji^_N=-P`ffinqrmka]WPUF'!( /Wt€‚ˆ…‡ˆ†{f/  -5t”™›¤«®ÆÛÚ×ÙÚÖÕØÜÖ×Ù×Ô;°Ÿ‹ˆˆubju|plep„¬¿»«œz]w¢¬¤°¼¯’‚†—€]CBM`hnyvpŽ°¬¶º¸ ™¨¶ÏÒÆÌ×ÚÚÔËÒáÜÒÐÛÕÅÈÓØÝ׏«–›¤«¦—’«¨¬®ºÁ¼¯ÁÓ×ÕÍÑÜÑÌÎÖÓÕÕÑÐÓ×Ú×ÅÄÑÐÏÕÖÛÞáåëðòðïîííñ÷ùùøñðîïðîëæ×ÊÅÄýÅÓæóýüþþþþþþþüóâÏËÎÑ×ÙÞäèêìïðððîòðññîîììììðïêèäåæêêêëíîïéççæîïîñòððñô÷ùûûùúøùùùöôóñîëèæâæðøüÿþþþþÿÿÿÿÿþýýôçÖÍÏÔßèëñõöøùùúùùùø÷ùøùøùøóðòóòñîçßØÕÙàááãßÛÝÜÝÜßêôøûüû÷ïîïáÓÓêíåÙÐÊÅ𢨰·Íåïöüüýýþÿýýýüýýüû÷ñïîêßÐÌ×ÜÚÖζ¦­³·«’sgu—™Ÿ°­ÁÝÚÕÎÁ°dmou}•Ž}cp[w¶Ãº¥v,    !+F[wnOIE?>>;/"** /6A>6CCLM^mqkifaVEHN_SRP_keK1  Us’s]ZFJ?3*//+'6DS`ej†¤®²¤ºÃ¿Â¼² “¤®œ~dbzŠ‚c^MN^TIIH60/4..4/ .RbkmnqˆƒoC    - 5OuzzopvdLON]WAEQRG@d|”˜˜–‰q€“œ›…D   -%$3LRKg’Ÿ¢ž‹ha\bada]YTFFE9J^`_c^cia_]dbN?J`bnx€vr}woov{xy‚~{~|{‘ŽƒsX# 0c¥¤¨§—‰”¦«ž‘„‡e1      &+6?C.)6;AD4  $4KfpŒ“˜™™ž Ÿ—W=;APZQJJ]z‹ˆv_M>>EVmtyzn`IC?CC@:.    - -     -  - -  - -  - 7L^cd]^`TM7     -  4?1$''056/22750/)&'"!-2;DLND853>33>;4000:CIFEQNKOTQXLG="#-=LOMMQPBJ_]VVOVfaWSD6>DL@JLGCEUUZKPQNNRRR]cfgmghga[L(-OZgnqwvrpldZ^]Z;  -  1Tl„‚Š„‚w`* ?t˜¡ ¤«©µ×ÜÜÞÛÖÖÙØÔÓ×ÓÓÌÁ½®„Ž‡kdp{shhv“¶º³©beª«°»­ˆƒ‡–…]KCNlhmnko°¯·µ¹§¨µÀÔÐÇÏÖÑÐÒÎÉÝÜØÖ×ÝËÅÑÕÛÙɺ± Š•¢¦§—š–›ªž«²¹Åº´ÇÖØÕÇÐÜ×ÏÎÓÖÙÚÖÏÏØÚÍÁÁÍÐÐÔÙßèìðòõøõñîíîñó÷ùöòîííìçâÞÑÃÃÌÊÉÛìùûýýüÿþþþüúôãÕÍÏÒØÛàæèëðñòðòñóòññðëëìðñïïðîìåâáçåèéèììêçèêðîòóóôñòõøøüüûüûøøùúùøøöòðíêæäçìöùûýþþÿÿÿÿÿÿÿþúê×ÏÓÚßäèîóöùùùùøøøøøøøøøô÷ôóóóòñêàÚÖÔÝßàãâÝÜÛÜÜÞéóøûýüøñòìàÐÔíêßÑÉŽ³¨©­µ½Ñéñøúüÿþþþüýþüýþýûøòîîëä×ÏÕÛÜÕϲ¥§³¶¤”riuš– ±ª¼ÛÚÔÏ¿ tap}ƒŒ‚g[p[h¬»¶¢r.  -+Ev|YEM@>@HHHB[hsssh`WQKJXXZUccN2" -"  Gu€‘qYZLIH32/)+-9@Pc[pŠ¦¯³ ›·Äþ¸¯œ–£ŽvbavŽ“…]VPY_PFFI7003/49+! <]qt{ƒ‚pg<  -    +Eo}xnnpeI@NTR@?MMQN`”™—–‡x›Ÿ…H - - &CKRZ€‘Ÿ“ug^^ZXe]VVPQK:JU[mh_`eb\fdeR=?`hkztmqutv|yzw€x|€Ž‡„…‡Ž‹…‹ŽˆxT%;o“ žžŽ†”¡¡“‡|„‰~Q#- -      #-8CLL3 !#0?DE3 %2Ear†Œ‘•–›š—’z]>?BQ_ZSUXvŠ‰gO=;@Yo}{|tiSCHKJE><+       #HMLC624>;3<970'3MOOS]HKN_a_VLMbi_UD7=JJKJEGJOUVSGGFONEOPQ`cdkegg[dT34Sgkjsoqqog]]^]W7  .$ Pcgl¢²¯¡´Ãüº·§‹“ ‚gcjv‰‰q]VHI[MINI8.0+,/9/ -Jdpt|{ˆwtd?+ - ,F_mtnkxd@FNNK?BHX_RY„”—‘Š}vŠ”Ÿ‡X - - #&1FVNož£ƒna_]]ahaWQPD7N_cmhb^`abdc_UHB\inxwrzxy}}tt|wt}‰ŒŠ‰‘“ŒŽ“ˆqV. J„—£¡¦›‘Ÿž“Žƒ|‰–|C     -      )2?JOJ1#1ACF2  $0G_ow€‚‡‹‘–š—’Ž{bHEFW\]XSXv†ˆ~hV@39Omw|„„lYHGNQJD?2  - - - -     - - -3RjspI  (+-@cxs\="1J[^`aWQRK8  - -      -*<1&**'.014*,,0*)&0((#*4EDK>?:-06=7:452+1@@B>AENQNNKONN?- 4ALMRPSIEQaWPROK\cYTJ;7N\I@FJJNLWWJHIPRMKQU^^`iefghcX<"6_oghlpnsocY\f[K/  / -9eq‚ˆ„‰‹†tj*  9mŒ–›¥ª¡š²ØÜÚÚÕÖÙÙÒÔÚÛ×ÐËÇÆ©‡…‰mh}„vrceo´¶´­[]’¢£¨•‹Š‡‡”x]B8Jhprwt€‘¯µ¸µ¶­­²ÅÖÎÊ×ÛкÀÈÊÚåÖØ×ÑÑÉÈÔÙÞØɸ±™Š’«© œ–“§­«­®½½ÀÒàÛØÑÕßÚÍÎÒÕÖÑÌÌ×ØÊ¿»ÄÎÔÖÛÝèíóõ÷ùù÷ôòðñ÷ø÷öòðíæãÝÛÙÙÐÈÈÌàñùùúüþþýýùôìãÛÔÓÔØÚÝåæìîïññòò÷ööóôòòðîììíðñîïòñìéçåäååææççéíòóòïïñòòðô÷÷øùüûûûûüúüûúú÷÷ôôñíëêéäÞâòýÿÿþÿÿÿÿÿþýöéâÜÙÜÚáëðôöø÷øøù÷ùø÷ùùõòóõôõòñòíäÚÒ×ãââáááÜÚÜãëôùýüüüøóèÕÌåéß×Ëúµ«§¬¯·ÈáóõöùüþýþþýýýüýþûúøñìïìçÚÐÕÛÜÙϵ«°·¯™‡ndf~•š™¦¬³ÐÖʯ|anrwŒ…j^`e\e«»µ©ƒ;  -  "2""*,).0./.*'/(-.--,-58EFIA@82/406=7&.03;D?@?IKGKLLQRH5" -1BOTZYWULL^XNQOQ^fYSH7;KSD?EFJKPWRKOOVVPMQYbcdcmgigaXG2-HbhiprvsmhaabbUG1 -,' !?eu†‰‹ƒ}xk. 2lŽ–¢©©¨§¦ÂÖØ×ÕÓÖÙÓÔÚÝÜÔÉÌÌ´›‰’ƒlv„†sjagt¸¸¯—tXq˜¢ž’†‹Œ‘ƒVA9Ajns|{|³·¶¶²­¯¸ÉØÎÊÚÞÙÅ¿ÇÇÔâ×Ñ×ÔÓÈÌÕÙÝÜÒÁµ¨Ž¢¨¦žšœ¡±¯«®¼ÀÆÖãÜÙÒ×áÜÔÓÔØ×ÒÉÍ×ÕÀ»ÅÐ×ÝàääèíòòòòõôóôõøúúúõñìçÞØÚÙØØÓÏÓÞð÷üýýþþü÷ñéßØ××ÖÚÛÜàãèêíðòóòòôöùöõöôñîïïíëîíëîðíììèçèçèéèêêëïòòñíïðñðñóööùùüûýûüüûýüüûùúøùöôóïîìåãçïøýþþÿÿÿÿÿþýöìãÛÜ×ÔÞèíòõööøøøøø÷øøóöôôôõõòòïëâÚÖßäãâãáÜÝÚáëôùýýüýüõèÔ×ëæÚÏÉ»²¢¦³·ÀÓì÷ø÷ùýýýýýþýýýýýüüúöíìëçÞÔØÜÚÕɳ®´²ª–p_f~—§­¯ÉÏÉ·Žfgt€‹‹|d^\gZd«½µ¯‡7   -*ZkVOH;23BD05<.*'(-9BB@OON?FFMOTbjfjk]YY[`afrqM( !  Ej~’o`aYOH:,0&%$-AO]ix–¨³² —®ºÀ¾¿Ç»•‰“ŠiZ\`wtfXVOIYWGKG=8+(++1)?_q†‡€uzmjmpQ,  - - -  %?_€‚rqh]CHPTMB?ORYT_wŠ…€‚Ž––‹W1   $:BENs‘œŸžobhfhfbjf\gcinlmlkeghgjji^HM\msx€xw||€~|wvpqx~€…ˆŒ‹’Œ}b?87>B@:% %)), !/?LPHMTYhrŽ›¢pUPLWW]SNKbx‚sR>70:]owzvpgVGS^XPL=, +Nkzo^B24CILD$:U`^EE\vˆŒˆƒqS5,5FTfslg|“žš‘„eB$*E^dhhdc\SH, - -  - - %?B:*#"%11*02/-/0&(--+()338EJNH<;4050387*//-;C=;?CADIGIPOI: 4@HW[^c_TJMUVTLPdg[KD9?RRBC?IJLVSNNRMLHKOJWfbggkgkeh_LH@5" !Ccitrssk`]_fj[[M. .A+:bt„‡Žˆ‰‚yzvA :j…ž§¨¤¨¢¤ÀÓÕÓÔÖÙÓÓÙÞÞ×ÍÐÓ¿«—‚Žxiƒ‚qfkj…ªº¸ª“j\‰¤œŠ‹‰‹•†M8=Gkps}|ƒ†­¸´´¹¯­¼ÊÖÈÊÚâÜÍ»ÅÅÐàÜÊÑØÕÐÈÏÙÞÝÙÈ¿¯›†–¤ª¡ ˜™±°®´³ÆÒÝãÜÙÔØãà×ÖØÙÖÎÉÏÓƸ¶ÊÚàäêëëíðòñðîðôöùùúûüú÷îá×ÎÊÑÕ×ÛÝÞéóûüýýüùóèà×ÕÖØØÚÜßããèééîðóóôøõøùö÷öõóïìéèèêêêæççêèéêììêéëìíééìêìëêëííîðñò÷ùùùúüýûüüýüüüûûüùùøøôôòñîêéêðöùüÿÿÿÿÿþþýõèâÛÑÐÚæìðôöõ÷øø÷ø÷öôöóñóôôòððíéàÝÜææÜÝÞÚÛÜâëöúüþýþÿöäÖãëàÔÌËÅ»¦¢¦´½ÌáõúùôûþýþýûýþýüýüýýýøïíéâØÖÙÛÛÒı¯³±¥‘l\b’’“§«­Â̽¢phww˜’Žr^`bradªÂ·©ˆB - - -=j_WG<;652489+&)+5CAIF@9GRVQTs„’‰z‹Œ•…X+ -  -(05566;20.-3>===?@=D@FMMLR= 0>PTZ_dXNQQ\[ZQSb^VPD:=RHGCDJJJWVQLJKKMOKEQeegbheekhaPNB=,%$Kewosk\\\fbd]ZZJ)  !>7?ap‹Ž‡‡}yw|L -)b‰–¦­¢œ±Ÿ¨ÉÓÔÓÔ×ÓÓØÛÝÙÔÓÔĵ …Š”ˆok€†vhekz´º©™„an–›ˆ„Š‡–PA2Fhlvop~Š¬·´¶·®­µÇÔÅÅÙßÜÍ»ÁÇÍÜÝÌÈ××ÙÎÅÏÛâÛÏÀ¸¥£¨Ÿ¡’‘¨¶±µ²ÆÙßäÝØÕØäàÖÕÕÙ×ÍÇÔÉÀ¼ÀÎÝäéìííîïðïïñ÷øõ÷ùúúø÷óèÚËÂÄÑØÚßáíøûüüüøòèÜ×ÓÖØÛÝâàåçæèéêëïñôôöõ÷õøùù÷òñîëëêêëëéããàãçééëìééëëìèêæèèçèèëëëìïðóöùøùúûüüüüüüûýûüûúûùúù÷÷òñîìëèìóøýýþÿÿÿþüòêçÛËÍÛãìðòôöööøõôôôòòòóòññððïíéãÜãæÝÙÚÝÞÜáêóùüýþýýóãÙêéÞÔÒËÀ¶©£ª¶¿ÐèøûõöüýþþüüýýüûûýþþüöîêèÜÔØ×ØÛÓÄ°°±­Ÿ”peRpˆ’“¡¨­ÁƲ‰bj|„‘™“„hXdgwa`«Á¶¤;   T[]^B;@=4''0,+*).7EHQKNKSLNRNCFPThhkn[S\^mqxqJ' !"# "Fv‡„q_]JFD9'1%&)*GZfp€”¨¯®¡µ¾¿¿ÄÈŧŠ’Žz^HXkgZg`XYeEKRH04++03@+-3TkxxmgkwnR- -   -8_xvrpmdB5@AHF9AV\RRgƒŽŽŠyn‚Š„^' - -  -#4B8Jg£¥œ“trntxqlpruqelhhgkeghkjeePIagx|ƒ‰ˆ{†…ƒ|~„ƒƒ††‰‹Œ“’“Ž‡ˆ~u`>!/[‡•œ ”˜˜˜”’‹ƒˆ‰{T%  -    - - 3.0123-.#"/$  &7EXeju~Š“™š™˜”sOIKMSV\TJ\q}|r_L9,/QevvusrhTKZb[F3",Js‡…tcW]a]`VQUbhmqvsg[`nyzz…x_\[`\`jmdbz“›š•i;",F\gjjijfYG+ - - -   -<;+!$.157542*74.+.+ #+0:;HIJG223737@2+*./@@?8:?>?=CIHSC7$+Unmlb]X]`ghb\^R@ +C0Casˆ‹Š‡ƒyzqvV -  ,h—›«¬ž‹¦§˜³ÏÐÒÓÙÔÕÚÜÚ×ÔÔÔɽ³™‰•~bt‚…tsjs{¥º¬¢•rY†›’…‘‘Ž•xP9=Eipqus}‹¨µµ¶µ¶¶­½ÐÁÃÒÄÉѾ¾ÉÅØàÏÅÒØÝ×ÊÍÔÜÞÖĽ­— ¡¡Ÿœ•›³¯¸³¾ÖàåÝØÖÖâÞ×ÓØÕÒÊÈÓ´ÄÉÑÝæëîíëëëííî÷ûù÷ùûúöòñìâÏÅÃÂËÜâäçöûúùøñçÛÐÏÒÙÛÞâãçèéêëêìíðððòôôö÷÷õ÷÷÷óðêêëìíëëèåâããäçèèèççèêæååãåççæèêééëïðñòõøøøûúüüüûûýüûüüúüüøúøù÷øóññìêééðõûþýÿþýúùöïÛÍÎÖâêîôõõöööóöóôóòòóóðñððîëåÞâçãÝØÛÞßäëôùûýýýüðâæñëáÙÓÊÁ·©£«¶ÂØîøúóõûûýýýþþýûúüüüýúõëçæÝÙÙØØÙÒÅ´²³®Ÿš„pf\n†–£¨ª½¿¨z`oqˆ“—ygWbrxa¨Ä¼¨~<  - --bTVVG@H:5#.4-/0;HRNFQLTYLJMKIGQ[]dee]]a\jvpT4 ## %"# - - -  ?tv„m^YIH@:,.)-&)EWcn{­²°Ÿ¤½¿ÂÁÀÄÀ¤‡‹”zWQ^j[Qhh^Y\THHN?35$,09*(=ct{|rhcw€~~vX4    - !6e|~|nkcB7I>MB=BIMPVk†Ž•‘}n‘‘ˆd- -  -  #*FED=1.7437;7&(,8F?=A=<=<@>KJPI7$:FHK\a_bQQZ]RLSYa^QOB4:LNJB>GOUQPPRIGM^dXMTcg_jihcac_XPJJC@55VmkiZZccbdad`ZJ+ 7:7EXh‡‹‡Œ‰ˆ{}ƒ[(  /h‡• §¥—Š’¨ž¤ÃÐÒÓØ×ÕÜ×Ø×ÑÕÕÌʬ†Ž‡kl€„~{ois“²®©œƒbv”…Ž“’–~N;=>gpitztƒ¦¸µ³´µ¸­¶ÈÀÃÀ¦®ÏÆÂÆÅÖÜÔÍÔÚÝÝÎÇÎÜßÖǺ± ”¥Ÿ¡ž›®¬°´¹ÒâåâÛÕÕâßÖÓØ×ÎÇÏÔÁ¸ÆÓÝßçïïëéêìððóùúùùüûøóîíâÕÅÆÉÇÎàíòëòøöðæÛÔÍÏÔØÚßãåçêêëìïîðïðòòóõööööõ÷ôôðêçääééçæäàÝàÞßàßÝÝãæâÞÜßÝßàßàâáåãäæëëíîññôõ÷ùûúûúüûüûýýüûüúùùøúùøõõñïíèèèëöýþýüüþýüíØÉË×ãëïðôôó÷õ÷õôôñòóóïððíìëèâàççáÛÜÝÞæíöùýüþþýîåïôíâÚÐÁ¾¯«¨«¼Êãõûøò÷ûýþýüþþüüúûüýúôïçççäÞÝÝØÕÓǸ±·®œ—†vg]k‹‘•§ª¦¶°rfp€„–”p_]g†–ia§È°…;  - HYGIK9A=6((0% *>CV\^SXQYTIHJGNOQX^hga_bbmpudB "$#   7h~‰kXRJHE13%().>Wbi‚›¬²«ž®ÇÉÄÀÀÀ»¦ˆ’€bWe`GXigYbbRFQP@:/&-270-Eotvrobm…Š„d1  -   :^w|vzujB0DCID7AIAIOm†Œ–‘†lx–‰e.  - -$+5=;Qq“£¢•‹€rstpsuxqou{mvqrljljjqojf^eo{‚‡Œˆ…ƒ€„ƒp}~sx€ƒŠ‹‰ŠŒ†ƒ{l_:)@f‰™ž œ™™œŸ”Ž‚vx‚|_.  -        .+/2/,/.7*  &1D^jr~‚‡•œŸ¢ ˜O@ENU]`]OSdt}tfE1/(0Leqrvvp_TRXO<+! !9\‡’‡p_[PQZ`SLT`jsukaC6:Lgsy}zaKDL[`\`iqik•Ÿž›ˆ[6"/NborrmgbWH)   - +AF3 %)0871021290$! '%/9HNG83+75751.))0;E>DG@>>8;ABNQF3%1IKGY]]_URVaVXJQ_aMJA59DIGEBHRMVTNIIKJTWWZ^__cinkhaj_^MQQJFB0 2brmVT`ia`[]d]O= "+3%:=CPdx…‡ˆˆ€x|„i0  /g‹“žª¥”„ž¤“¯ÍÏÔÙÚ×ÙÙÙ×ÔÙÙÏÌÆ·›Œ€p|‰†ympsž²¬¤ti‰•†Œ–•—ƒSC>F^lmrk{‚¢µµ²²¸¾·Âʽ½¯ŠŸÌÊÄËÇÑØÔÐÖÝÞáÑÄËÖÜØ볨’ ¥ œ™‘«¯¯´¶ÎàåàÛÓÕâÞÖÑÕÐÌÈÒͽ½ÈÕÝåèìïííïïòò÷úùõøùøõðéäÖÇÂÌÉËÛïøøéàèãÚÑÊÌÔÔÛàâæçëêìíîðððóòòòòôøöõõõôóóðèáßÛÛÞããáÞÚØÖ××ÐÒÍÐÛß×ÐÎÕÒÔ×ØÚØÚÛÛÛÛßàæçéîïñòõöùúùúûúüýüüûûûüúûúùøùø÷õòðìéãéñøúøúþþýùìØÉÏÙâèíññó÷õõóóòñòóðððííîìçåäéîåâÜÝàâìöúüýþþúêèôôëàÚÐǹ«®®·ÆÔíûûøóùûýýüýþþýùùùüûóèæãåççâáÛÛ×Ðƹ²¬¤””veUn‡•¨©­¤€edu‰Ž‘‡„kc_{Œ…hg«Ä¿«Œ@ - -   0[NK9FI?2-%#-)#,=Q]be\c\TUVEBBBKQX]ljcbdtrvjX2" &&" !=g{‚pTPJNC;*,-/*$4M^s‰™¨­¯Ÿ²ÓÒɼ¾´Ÿ‡Œ“cRT[T[b`WX_MKKC94(./6235XwyspkbiƒŒ’Š[/     !6Xwy{yumI5=HM<9>IB<<]„‘–Œ‚u‚”“d3   ,8FKc… ž˜|lsvwzzyrnywrqxtrtorstzloallvz‚ˆŒ†‹ƒ‚…xy{|†Œ‹”Œ‰…‰zmcA1Q}—Ÿš•’”•˜~|‚|q?# -  -  -  - -  " $" $*640*%   !(1@Xhp|{‰’—›žž¡—U@DOR``_PLZr€tcP3.%*?\korrrf\TYXC3" *Fs•“…n`SSY]LB>HZhh[I>34D\jonun\RGEUa_^ctufpŒ›¡ž•sD'!5PmotldaYP;     1B>.&"# /76218+.3/+#$+.37ANGC3-66+.3,(/.:>@B?C@=979^Šœ£¥š“ŽŒ”™ŽŒ‚„…_- -      -%!!"!"**3578("  -%5?Uiyyz„Œ–šŸ —„M;BHQ\b`VM[lwxjW7(%+;XiprrokYRWYK4% %4e“—‘‰oXWTWSE<8ITRJLLF:7HagniidZMJM`kc^qyph}— Ÿ•zT7!"G_gkoieaXH  -  - -  - - -  +@<0!# "/3.15;6780.,&+&*<<;:F@BH8*>OPYgcZWM]WZTJQVZWLB3=NJKKJGMPWUTQJJFFLLMYadfd\bcjjca[^[de[J1* AXPJ\\aXZ[]WXN>+  - 5Yoxˆ†Š†‡{|†n1   KHGX€•š‘Œwl‚•””r=  -".@:@^| ž‚yxysvqwxxs|‚‡zw{ƒ{wmffrv}ƒƒ‡€Š‡‚Š†|ƒ~~~‚…€€„„„ƒy|wm`CIo›™ £—‘–•žœ”yP$    -    - -63-'+" #2?7/  );EZi{‚~…—œž ¡›ˆ^HCFObbc`KOjsxr\=/##1UfmquroZIT]SC-  *Oˆ˜™•…iWUSQD91<92;DBAD7( '=POTa_TSP^b]VKKVSSK?88KIFGLIQNKXMK>CFLRZJUecadfhgmg\\\d_`ibUC=(6AGT__a^RPbXSE8   +bil}€Š‹…‚uƒ~j8  - At‹’ž§ ufp„¡™·ÐÕ××ÙÜÙØÕØØÔÒν°™}‘{sƒˆyqqy—µ®©—‚dh– Œ–š—zTC>>Zqu~‚€‚˜´°¶ºµžÁż¯¨‡†Ž³Ë½ÂÄÅ»ÀÉÐ×ããâÛÈÌÒØÙËÁ·ª”›¢¡™‘–§³ªµ·ÒâÝØ×Öãá×ÎÎÉÎÑÑÔÓÊÅÁ×èêëèèèìîïïììêìííêåÚ뱫µÇáîïêáÕÈÀÇÌÏ×ÝßäæìììðñññóôôóôóóôòðïíçåáÜÕÒËÅ»ÃÌÊÊÐØÞáàßÔÕÖÚ××Ö×ØÞâÝÞÞÙ×Ö×ØØÖ×ÙÖÕÕÒÖÏÈÅÊÌÉÑÒ×Üãåéíïòö÷ùùûüúüúúúüýýüýùúúùùôñðéäßäï÷üýûðÛžÌÙäêíðòôðñòðïðîìéééáÕÒàðòóóîççãçíöùûüýúíÞìòèÛÓËÅ¿°±·ÀÇÛóüýûöùøûúüýýüüüûûúøïßÌÇØÚÝæàÖÙØÔ˾¯¥“’‹xjj€”“™¥©–zhru€‰Œ‰cfegˆ„owlTš·´¨…A  #WTC>K??40"*$-3:KPYccc]`X\`UKG=EKIPaglq‚Œ|iC&"+%!)$ $(D]Z+1^qwihgYQ?:/*3)'(:Udp„—¤ª®¦¥ËÕÒÌž´œƒ‚Š~aNGT`\W]ZT`XU^O47;04AIFQdfqzzem”’ˆ}hC$ -   0`wyxw{jO<7@KR86=CF=V~‘”’“‡r}’—’wC   - - #8>@Sp£šŒƒ~„€wu€{z{Œ†„Œ‡|t|€xvjipuwzy€‚ˆ…ƒƒ|zxzuty|z{syvt|zysgVBGpŠ”Ÿ•“•™›’‰„“’q>  - -   -  - -  AF<1/##%/3/"$ 31%%.OdmtrtpaNITWD=) $7r’™š‘€eWWOC6,0?Q^c_WF:5:Pgoti_PGER_nlhqynfw•”ŒuZ6$&F]gc^[VSV@  -  - - - -  *A@0)&" "!(3740412.)))%%#*0CLIQG=5:75:::51;5DE?;D@9878?@?7.,7BLSccZUU_cZQEJYTLHB5;NLCDHN^VXZVOCEIQQIKVcd`ephlkhd^]ad`dcYPA6%,?N\]UU]ZVVPN4  -   %Xieq„~wyˆ‚‚f1 -  -D{Ž™ ¢sahu©¤£ÆÑÓÕÛÚÚ×Ò×ÙÔÑÎÄż¯‹‡•„tsƒ…wqop…®²©š’w`|¢‘˜š“v]A9@dr~}–²²¶º·¯Âü´¤‰…Œ®Ê¾ÂÃÃÆÉÊÕÙããâàÊÆÊÕÛÑȸ¬œ™ ¢Ÿ›‘•¢®­°°ÃÙÛÙÖØããÔÏÎÊÙ×ÈÒÏÁ½»ÏâçççéìíêîîìëíîììåÜ͹¯­´¹ÅÔÚ×ÏÄÂÅÉÍÒ×ÚÜãéêìïðñññòóôóóóõóòîëçâÛ×ÓÊÁ¾ÀÀºÇÎÐÎÐÕÙÙØÝâèéêèçèéæäèéééèäææçâàÝÚÛßâÝÝ×ÓÓÎÏÎÓÏÈÉÒÔÚâéìïó÷úûûùüùøúüüüýüûûûûùøõóîìçâãçîôóíÜø¾ËØæêïðòðïòððîîíëåàÖÊÉÚìñíðòêäâæíöùûýüõæÛîîáØÐÊļª¯½ÄÑçõüýûøøøùúûüýüüüüüúõéÕÆÅÖÛÞââÝÚØÔÍÀÅ·¦š—‘Š|vŠ¦²¢—œ®¦€iju~‰“Žvbacw…ssjV˜¸®Ÿ‡F  - -  -IZ?BA<=<4()40(!0811)(3/##  +8F[hkgd^cms’•”šŽY78?GS`b`KIYnrucD5(&+?E?@;66;8:>>2,")4:3$DP_\YZYLNOC-  #JbegiZP`quzsf4   B|Ž“œ¨Ÿ‘†kii{–­¢¨ÅÐÔÛÜÜØÖØÙÔÒÎÉÈɼ¥‹Ž~ow……}qjwš´°¤”rgŽ–›˜pZ>7DADFAEJLNA>A@A>9><=>;??76;=9/7)'%!&.542,6:311/30' -# -   - GPQVLB3& (75)-*#"  - '7AU_VPLLJP`m‹‘˜[D>8BOU``OFSdoqjP3-#$,D]jswvr`NPZZE5& "8d†œ¡›‘zdWJI<0)3@Zfi\F<23MgwwpdZUGI]jf^]orlp‚‘ˆ‡~hH* %9T^ghhbaZA(   - 2HE;*!""%,16<221,.,1##$&,0:@=DD>96?B;:5<5065;@C=>@3.18>F?9$!!349HWVQHPXYPOJOY]UKHGFVOGINHIT\\TGIJ[TQLER[ckdeeeed]\_`abd^_WPJ>+"6KVb[XXTV]9& 3YfnbZcbhqpxdD - ->v“—¥£¡œ’ujio¢©›²ÎÕÙÛÚÙÚÛÚÕÖÑËÈʲ™‰“ˆnm…‡yii‚¦´¬ª¥‡apœœ—tY@=>\x{€„€}‘­¶´­´½½¶´° ‚…—½ÂÂÁÄÅËÉÏÙÙãâÝØÅÃÆÑØѸ Žž¢ œ‘•¥¬¢­©ÁÖßåçèá×ÍÊÓÞâÚÊ¿³®¶¾ÒÙÛáçêêêêêéêêêåÛͼ¯¬¯µ¶µµ¶ÀÇËÏÕØ×ÙááåéèëëðòóòñòõôôðëêçâàÕÏÉÉ¿»¿ÈÌÜéð÷úúû÷ñëíîôúüüüûùõøûúôõùûúöóó÷úùöôñíìïóùýýýüöðåÚÖÎÐÑÒÓÐÖÙÝâæëðò÷÷÷ùøúüûûüüüûûúûùùøõóòïìåÛÓÎÄƽ¸¿ÏÝæêìðïîïíïìçäàÚΰ»ÝîõúüùïæåîõüüýôæÕáéÞÒÊÅÁÀ°©¶ÀÊåôýüüûûøúòòøøùùøøúù÷ïà̾ÁÍÙÚÚØØÙ×Ñ»º¾¶¨—•«ÑÙÑÄ´ ™¡©ltw‹Š‰dcc}wgz‰”Žj—¸¤™ŽE  %MD1676=7+$",2+:ACVXSMXdkc`acbWWSGZMHHDf}ƒ‡w[E."+()"!(EUgqx|O(atwnb^PH;9-.))&+5Lgh|™«´±²©½ÑÏÊ¿¸°¡Œ‰Š…l_TSaSE[YW^`KOO5BG9-/0Gly‡ˆ‰‹|{zwq~vpP$  - -  -  -!1    -  - '# %! "'#!!!$$  - - -   JUTSE:5-*790'%&!  (2:L^VIKKFH[qŠŽ‘Že=36BPWY\WHL`mqlS8,$!$:QdqvwscWNZYVE:)Gq”œŸŽt\SJ?803;Kci]H==6>TovpikZLHN]ja]ksuktˆ‹‹}\6-CZdgd^\WK3   - - 4AA:.,%%,271./)(,0%%" )/7=?FC=7287C>?91541=A@?<>561:,"#&7N_isxof\^\\`Q@&  %:]Š™¢¢™‡eVND86/2>XdbQC@76Edttqj[MGEUjhbfoumo’”ŒuD' =Rcf[YVUMA+  -  -  /CG>1*)"*5305:,(+.,#'(:9?D?<3.3@;A;7')2?>@BFB=77766;A?2 .38=GEHCBBUY[QCGYTTLC3=JKGFGQSXRQKJOPPTJJO^eaa_`fikf_X^aaeb_`^ZTM3*!A[\XUOYDD;civ{y‚tp`'  M‚ Ÿ›™`bbe}˜©š³ÐÓÕØ×ØÝÝØ×ÕÎÐÎȽµ£’™’r‰ˆˆvqo§¸¯¤¤Š_f‘™kR;8E`lz‡ƒ€€“­±µº¿°¶»°«—~‚’·Ä¼Á¼»ÉÙäâÛáåáѾ»ÇØÚÐò“‹•Ÿ©£™•›¯©¬¯§ÉâéêéáØÎÉØæãäÝÀ¯§®´ÄÖßçêèèèçææèåàÖŹ³´»¾º½ÆÊÐÒÖÚÛàÞáãåæèéëîîïðïññðìéãáßèëíéÚÖÓÓÚãðøüýþþûø÷öõöøøûûýþýüù÷úüýûøøüýýüùøøúüüüûùùõòðïôúûýýýüúõñëæâÞÜÙØÖÎÓØßæëðñö÷ùùøúüüüüüüüúúùøöóôòïêãßÛÓÉÇÅÈÕßåèêëëììëèãâÝÔ¼«µÔíùüüüöêçîöùú÷ëÕ¿ØÜÒÈÂÀº°¦±½ÉÞòüýýûüýüöòùúûùøø÷úúúòáǹºÊÔØÜÛÛØ×ﶬžš§ÓèáÓ¸š—™—jy~“Œ~ofcozkrƒ˜ÁçÕ–ž·¨¢–T  - $PC-?8>6/'+*1()0CWaf^_WWdlncaa^XYOLOQDCXqˆ€T, $ &*'  &=Umu€Œe2 +Xkzuj^SMXK+)+,2O5I]pˆ™¬²²»«§ÂÍÈ¿¶´©’€†‡h\PRifZRVV]^YbV:(&)+,A`s†”‡uncchsvja:#      -   -  -     - - -  -   $5--,6@BEA?3/87>;=H=-,9:5?HH@@>OWU\IJK__R@9?JFFJONMPOSNLGMPQPHKY[]edhfekaVXckedeehg^YS?2!+LWTQRM>8 %Yemou~„yrV%  C¢¡Ÿš‹Œ†f\^fkŠ§¥ ÁÐÓÛÙ×ÙÜÙØÖÐÎÐÉÈÉ´‘žyx‡rnv•«²¨¢–n\Œœ’t^F<>]p~„ƒ…„«°¶¹½´¶¶²«•€´Å¼ÁÁ½ºÈÞæçÝÝäÞ×¾ºÅÒÙÒŶ›‘˜¡¤ŸœŽ“«­ª¦ ¿ãéëêâÖÊÌÞéææÕ¶ª§ª¸ËÕáèëéèéææèæãÖÅ¿½½ÄÁÀÈÎÕØÙÛÞãæåãææéííîðíððîîìêâÝÖÒáêîìéÞàåèïùýýýþüúûøøúúúúûýþýþþüûûüýýýøùýþýýûùùûýýþýüûùøöòðõøùüýýýüûùöñíåáàÚÔÕÑÔØÜâêïóúùùøúûüûûûüûùø÷ù÷öôñïìçâÚÔÌÊÇÍ×áåèêëëëêåæâÝØƲ¶Ñíøüýüùìåí÷ûøïåÎÅÎÒÉÀÀº¶§°ÄÑçøýýüüýýüõóùùûú÷öøúúøñàǵ·ÃÒØÚØØØ×ÒȺ¸©œžÂæéÖ²’‡€šŒmj}‹Œ“Š{ganˆnq‡ Ýëà  ¬«¤˜X! & - - @C=04530&#)&++*8N[df]g[]`ifd\`XSUVKJ?IPXx…|l5)+!",##8Sloz„’p0  'Yirm^[VSK=5132(B@Vpy‰–¬¯¸Àª »ËÈ¿´¶ªŒ{„ŽqZFNlmXL[Xb]YgY4(,,5AIl…•~s`Z`hgjrp]?. - - - -!    -          -     -    6Vy‰Š‚sL -    -  -    -  -$*(#",3>B=<-(  $7DN]\I@@EN^i‚‰k>17:?FY]SFCRcqrjM6-*$&9Sjnknh_OS^a`U> );\‚˜—‘wWHF@;4',B[d]VI>;;LI=7=67;6880*26;BA=<:85;=9;A:-#;947EJB@9-% *9CN^\OHFEFTeƒŽŽoD2/9;BWaWLEOiqrlZ7-)%"4IaeijjaXQ[be`K2 +@kŽ˜“ŽxeQDHB7+*8F[daRLA7>Seif_QOKHWdif_esuo€–›™‘y^F&=U`ffc_c\B -  - -       3@E;+""#$&"0;24310-&!"''-5?DJEA>97<>>:54+*6&(86/?JHA;KSW[SDQ`]WI@7CMIFF@CKRPSSJNKUWPOR]db]fhjih`]W^e_ajheec]XOB0 2OROH=   8>PlhkqbO% P“ ›Š•“q]Tdhn†¢¡”¹ÐÑÓÕ×ÙÙÚ×ÓÓÓËÐÐǯ‘Ž™’woƒ‹|kki„§µ±¦Œbg˜¦Šn[?8]{y~ˆ¨±²±³´­­¬©t{w€¢ÈÀÂù¸ÂÕæéèáÜÝØȸÁÓÚÚ먋Š—ž ˜’Œ›¬¤  ±ÒÞáèâÙÖÖÖÜåäǦ¬´ÂÕÏ×ÝäåãåèèçæàÚɽÁÆÃÇËÕÒØÚßâáååçèèêëëêëîîîîìéçá×ÎÑÔÓÖäîòøõñöûýþýúøùöøøûüüýýýýþþþþþüüùüüýýüùúýþþýýûûüüýþýýýýüüûúùøóòóöúüýýüúóðíïòïæÝÙÍÄÆÉÔäëïòöùùùøøùùùúùùøøùù÷ôôðíëäßØÐÔÙÛÝäéëëëêçæåÞÚ×ÈÁÙìöúöööîêòûùóåоÇ˹¸µ´¬§¨´ÈÞôýýýüýþüøôøøùú÷ðîõúùøíÞÈ¿½ÅÑÒÕØØØÓÍƼ®¬¬ÌàÙÌ£~fdˆšuku‹•—†vjfbo{j”ÆåëÞ™“°§¤ŠL! -K78,$-,%#/&!0#9F]_ih`^Z_lloka`PN\XOVT]ddw}f=*..#"'4IS`ioƒ’›„J $Rfqjg__\G>*)7:AAP^lx™«³·¿­‘ªÀ½º¬¨ž…qsˆyXTR\a[Z]^kgZQ?%3==CMj‰…tfMGRUfolimbP2!  -  - ;C\mY:2/IctvsighoK0%.2/AEL4   +IP`nvpfjkˆ€^QK^_cM/BWrqy‚L    -  - 1IjˆŒŒŠxq?   - -  -  - -   -  "0675*!    &6AL[aVJKKJPe€Ž””—sG4,5,+%"/B\gjljj[SSahkY?' - +Mo‰’‹u\LHA9/,4@LZ`]RIA 1T|‰‹’•‰‹–£œŒxtsvv_Pi‡–Ÿœ”g8   - -  %7Jcw‡‡€ƒ}kA    - -        ! -572"  ")3?KWbVNLLJWi€““–xK3-0?KPVZMBFZnupgM/)%"+/%"!%(%'.5)*).0*)"!#0)35@JJMD=;<:@IE3/1;A;>?:;?9428=FGF7"(>>4=<@?=>AJFHDW_[SM63EUP@?>IMNSUPHDSVTUOL\b_djd`g]ca^ehf]dfadaZ_YA8$  #0BG50Xjx~{lH - I‡™£¦¤›¦¥k\__egƒ££—®ËÑ××ÙÛ××ÕØ×ÖÙÒÊÀ°ž’š›~x„Œ‰tk†ªµ­¦’jp™šrU=?HU\jrtkS.% -  !>QVP?4HViŠ“˜—‹~ƒŸ©ª®­–‚ˆŽfX]`[]X\Q.*)(6:KXoˆ‹’›˜“‘£§¤–}z~wp_n’•œž|E    - &4?Zosw}††€yd<" - -   -    -  - -$&&#  '''"   %/1?I[\VOLJOZfzŽ’~L//0E;*!$',%*075..-)/1+)#&'.4CLLJA=;=9A==6023;A>?8=25878AAD@2-:??BAE@8;???CGOegXR>6@KLEDLNMUVSRJHNYTPGJWZ\egfadcc[\bgffcibb_a\SB6&#)  ,7-   ?emwrgD KŒ˜¡£ª¡« ƒwi_`_co¨¥›¸ÍÓÔÚÞÛÙ×ØÙØÚÕÑÉ°Ÿ‘–x††|tps’®³¨Ÿ‹ovˆ^C=Xx‚‹ƒ~ŠŽ¨«®±µ³¬ª¥—{wuz¹ÀÀÆŸ¶ÀÒäçààÜÏÑÅÃÊ×ÚË·«”š–”‰…†ž ™™£¿ÔäÞÑÇÓÞÛϳ¤¦¡¥§¹ÅÑÚáæèèèæÞÛÛÙ×ÒÐÓÚÛÜàààæçéééëêíììîííêèäßÙÍÆÇÓáð÷üüýýýüúóñòñò÷ùûüýýýýýÿÿþÿÿÿýýüûýüýüûúûüúóóùúúýùøûþýüûûüýýþþþþýþýüûüû÷ôôóñîñúýýþþþþüûôëÜÉÃÄËÕàéïô÷øøùøùúùùùø÷÷÷÷öôòïíèæçåáÛÝâåçèææãßÜØÖÔ×ÜéìîñóñìõúúïÜÆÎÎúº¶ª§¤¯ÀàõþþýþÿÿþüúúúøôõùøøøøùõçÓ¿º¶»ÅÊÎÁÈÍËÿ»¹ÁÀ´«¨“’ª´³¡kw—§wi\gfwzƒŒ§Ê×ØÖ¿yŠ«¡¤™Z! - :>+$!'!7GUg_W\`_gebcmjZ]][YFFHckqrcH0 *+&!!""1JS^\d}Š—¦«ªŽR Icpi][ZWM;/.7<@AE\iv‚“ ©²±¨•– š§©¦ŠgptxbZTVikaTH754=BH[_`a_Veli\VNF>@K[iurhZ9"  -  "":W[_UVixzˆ‹Š€w¡¬­®¤ŸŠ‚Œ„kfaaZaZ^]bip|†‰ˆv~Š–˜˜˜Ž’›¤¤”Š‚v|ˆ|dw‹™——˜„Z!    &2=Vdcgss{{zrd;  -      - - -  *(%"  ! - - - &-6?HW\]RRJVZbzŽ‘ƒT9,.=?KW[TI?IcproX3+'"'8Laglsj\SXblpbM5#0Fg„‡reOFG@83*,:I[`bUH;7@ZpywoYFJWcaWZiupp‹”“‹tK"9Vbed_a]TB* -   -   2@A6"$+$'//54%)5.'#"&+16GMQG@>;96>8:;+--78<96=;;165:HI<0 '9?>>@HC<<;FCAJP_eZMC;DWMJIMMNVRNOUGHVVHEGWYegbcbdih`Y^eekjceab`_X=96*'#  -(%   FcmliJ T“˜™ž¡¦¥­¦‹xj\Y_dy›®žžÀÐÓÚÞÛØØÙÚÚÙÙÔÏÍÀ¨‘’€s}ˆ„uprwš³¯ª£ˆiv–rIDVv‡ˆ‹‹…¦«²®°±§Ÿ¦ŽttusuŠ´½»ÆÇÉÅ»ÉßåäÜÜÔÖÏÁÅÓÜ’“š•Œ}€˜¡–œœ¶ÔãáÖÌÛåÝǬ› ž˜˜¥ºÊÔÝåééåÞØ×ÙØÚØ×ÙÜÞßããäçêééëìêíìííëëåàÙÌÄÄÍÝðüþýýþýþýûùñðñô÷üüýýþþþÿÿÿþÿÿÿÿþýýýýýþýûúøúúööøùùùúùüýýýýüüûýþýÿÿþþýýýþýüùùóðìíôúýÿþþþþþýýôãÓÆÁÌÑÛæíóøøùøøø÷øùù÷ôõøòöññíëèêèÝÖÚÛãæçæåàÞÛØ×××ÚêïðòôðéõûøíÜÉÖÎû¸¶®£ ¤­ÈèùýýûþþÿÿüüüûõòôûýúùùùñäÏÀº¼»ºÇÇÁÃËÆÂÀ¾ÁÉÉÁ¹­ž¨¼Á³”{w¦¡‚e\aft~rˆŠ™ÆÜßÞÖÀ‰ª§§žf! - -   -/@$ #$!=FOZ]PXj^nmggm`b]U\RHPPezroT2#"(-+1% !I[`WdnˆŽš¢©±­ŠLCbuieYYYM;,<@IA@DUms~”ª³·ª“™¦«©Š]gsƒm[U\fZK>8:@?FLUahbJCFZgidTI?AOYa]YZPRXeyŒ‘”†^:+29EJWYWL@Cbgpq]4*+3$'3JYhmmkeZX\grfVA-   :Wv~‚q_IME97/-2@H[`]O;7@Uht~xs`KEIY^\X^ntr{†––‚\/+B\cZ]`_UH3  -   -   /EC1($)/.*)+,-10('/10=EINF@@???>=854785<5=;:<2.<>=FH?4&9A<=:F@GNXXeocM16GUmh]KBBM[`hjrk`YB-  - 10+#&4/'*NgjNNhvŒ“™„†~‚–¤§ª°¦”„‚ze^V`\flpt„„—•—•ŒˆŒ‘˜Ÿ™Ÿ¢Ÿ”‡Š‡ˆŠyn…’–›Ÿ’s0 - - - -  #!';@@JTW^^_d]a]Y4   -       - - -     ""$'$-+$#$)"#  (7=@ISa_XMRSWe{Œ‘‘„c5-.:CJV^]N@DTgose>...+(.DWhmoldYXV_nm`T3  &>c‡Œ‰r\NGA=8*.28Sc`XK=;C]jmvueWHLO[^YYlvrs€‘—’†jB# $0HZ^]^^UI=&    -  2@D4  # +6.2&...5),',0-BA@0,:47@?8@A7304??6@=1 ':A9@??;:>@CBFFX\]PME4=KMDEBRUYWSGJPTT\LHLX_dcbg]cc_^aZgdc_fd[`]VVK>76A5"# -  !Vc]> -W˜¢£ ª¨ ¥ŸŒ†xpf`[\ez’¨¥›»Ñ×ÛÜÛØÚÛÙÛÖÔÖÔÍį›˜Š~Š‰€sy‡•­µ±¡’mizmGVl†ˆ†Ž£ª©³³§Ÿ§›ymvju‚¬À½ÉÕÐÇ˾¼ÚæåÜÑÏÕÛʺÇÔÕƼ®‰•–Œ}„‡šžž¥­ÍãáÙÍÕÜÖí ¨œ“›¤¹ÈÛäääÜÒ½¼ÐÙÛÙ×ÞàâãâæçêëìëìêìîíêéàØÐÈÅÄÉéüýýýýýýþú÷óóø÷øúûüüýþýÿþÿÿþþÿÿþþþþýüýýýþþýýüúõöøûúøûûýýýýýüýýýýýþÿÿþþþþÿþýþýüúú÷öõòô÷ùýþþþþþýýùòæÛÕÐÐÜçìóôõøøöööö÷õöôôõ÷óñïìêèÞÌÌÔÜääâäâáÛÙÙØÒßîòôôñìêôúöéÕÖÖ̾¾¸¯¦š ¦³ÖóýüüüþþÿÿþþýûùøýüüüùøøíßËÅÄÁ´¹¾ÇËØÙ̾ª ¨®§™—š¤«¤iq‹–­±‹pX`epxt~†—ÉãæéæáÑ¥§°¦q-  2S*#$1PYZSSLQbdifflkf]WWTZSXclfg@, -&2-).- 6[ld^fm“œœ¤­³§Q=c}qZ_RYN<47@?=NDPe{‹’¤©«±§Ž…˜§©¨¥š‚msz€mgSMI?6AEFMY_he]J6*/N]oeYDDIXb`goqoqfN(   '.0+#*5-(L[k_WZy…€•ŒŠ…~’¡¬°°¬™‡Š”ˆpc^b^dmrv‡„—ž˜™ˆ„”“ £¢••˜ £¢‹ˆˆ‰Ž{l}–™ ¤ž{7   "*'!475BBLIQMQTNLQA#    -       "$'$&'+$" "%$  -$3=DJQccZMPV^fxŒ‘Ž’‡]9,-6=HR\[RE>QelrnO7*%,+48Odjjie^ZZ^kqh_A- ,M~Ž‘ƒkRGKHB8($5JYZYRB;;J_gmyphWIR[`[Zemnqx…ŽŒ„wV/(@V[_PVUF>0    - -   -1CG1"%".2.-).*//+)(&%->KFDC<;>BACC<14.2>B=:98:3:28;>ARVFGCMVVYVRFMLNPF;FZeddhcfide_Z_f\`gef^_aXUI94872."  - 3NH7V£ ¦« ¦–ˆ…spnXUcs~›¯¥«ÈÕØÚÚÙÙÙ×ÙÕÔ×ÖÐʹ¤˜˜—€y’qqp‚¤¶´¨›~^p„cQn‰‰……‰•ªª¯±¶¬¡£Ÿ€oup{z¨À¾ÌÖËÃÉÇÃÓãæÞÌÏÛÜ×ÄÈÔÓŽ¯¤‘ˆ‘ƒ“ ž©©Äßá×ÉÌÒм¯§ •Œ“•¶ÇØããÞ×ȼ¾ËÙÚÚÝÞßâæäèéêêëìíîííéæßÛÍÃÅÊÐÞøýýýýþýûøôôóøùûúûüþþþÿþþþÿÿÿÿþÿÿþýþýýýýüýýþýýùøøûüüüüüýþþüüýýýýýýþýÿÿÿþýþÿÿþýýýüúûøöôòóøûýýýþýþüûõêàÖÒØÞæíñóöùõõ÷ö÷õôôôöôóñòïêçÝÐÍÐÚàãäââßÙÙÜ×ÖãñöõòïçèóùñäÔÙ×ÍÄô°©¡¡¨»ßùýýýüþÿþÿþþýüùúüüüûùùõêÛÐËÉÀ¯°¿ÈÎÜÚͽªšŽ„{}€~’¦•nk€Žž¹¥z[UkmzpmŠ³ßèéêèäÒ…|¢¯³«x0 H4" (=QUZPOO[ffrjegli_\OMW][dthQ7%,,"'(',. E?. -:?9?B?<<4;;@@CQ_]ZIA7CRMFGPLLS[USGHJNMIFOYgbggcf`ig_Vchc_g_]]chZQMB8<<2-&#/:3 L…ŸŸ¤¦°¦©™t‚Š}tlfXW_o‘«®š¸ÍØÛÚÙÜÙØÚØÕØ×ÒÍĶ¡——‰~‚Š„zogx˜»µ©£“yhyPo„‰‹Š‹“©­¯²²¨ ššrj|xt€…½ÀÐÕ²¼Á»ÊàéåÚÖÚÞÝÍÉÒÑÌĶ¤‡Š„w}ŒŸ ¡»ÛÝÒÈÈÑϸ£¦žŒ‡‘¦±ÂØÞÛ×ÑÄÁÂÈÔÙÛßßäæçççëìíïíìëíêèßÚ×ËÁÇÏßñúþýýýúøöõôùøùüüüûýÿÿÿÿþÿÿÿþÿÿÿÿþÿýþýþýýûýýþüûûüùûüýýýýýýþüüýüüýýýþÿÿþÿÿÿÿÿÿþýþýþüüûúø÷÷÷øøúüýþýþýûøïàÙ×Üáçìïóôôø÷úøôòööùõôòïïíèãØÔÐØÞááãáÜÛÛÙØ×æðøúõïèèôöìÛÜäÙÎÇÀµ®¥¡¦°ÂäúüüüýþþÿÿþÿýúõùùùüüùøóêÙÎÉËò»ÅÏÓÛÔļ´©˜|cehlkŠž}cƒœ±²—l`]bs‚qzŠÌãêìíëçÖŒ|¤­·³|2 7F%!"'-?O_a^LX_]komjfnhaOSJZ_iurY@0&3(''.+$"3]rtcqu}ƒœ¦¨­¬¬ª—Z  7]}o]_^VS2-52B:HN^gt‹¨·¯ª¡–Œ¥²°Ÿ¢¡—miqf]SJAFLHRU_col^I>+&)5Leel_YGXbhd\iw‚‹r^3'   ! -C'%6Q]c[Yili‚”‘’‰‡—Ÿ¤§›‰’yplf`nkjky†‘‘–•“ŽŠ‘—šœ›¡–“¢ª¬œŠƒ€…Ž€liŽ ›†I  - -  -"&.0,+-3,068?GFBB$  - - - -   - -   .11-*+.($&!     *4=CP[_^`cqy|x{ƒŽ‹lA-'18>AT]^RARirwu^=.%%)(/Daeglkf]\ZdjoiaF, - )Y~”˜’ˆmVMOLD;1(/@KW^SD<@K[hrombUJIW`_]^owsr}ˆŠsX:! :NUQMJME9( -  -  - :LF7" %#"/40(+292()))&-8;=AII;15>@@E=71653+473:;:=728@D<) $2=6        -     - -    45/),''%'%     -46HS]ceajvxyw„Ž‘oE()-18@J]_VDGbuvgB0*+()*<\hihiid\WblpmiS6  !Ai†’‘~cLKRM=5,,9CTbZGA<=Kbjqih^TKOY_\Zirtrq€Š‚{pI( 1CKGJNFB8)   -  - 7FF8,+('"23+7/,2/.,$"%2;0:CC:=?101322*6985--0*7@;<.#+;>@CJ>>61449ABK[_SH;2FKEGMCLMWVVHADDGMKAG\beedafcdd_^^beffmdedb\WN@85@203$ &* - -  O“š¨«®°­¸©\y‹~}l]GKPdƒž¬ŸµÒÚßÞÝÝÛÛÚÚÖÙ×ÏÎÊ»¤•{j}„|usxžº¶®¨™f[nnvŠ‹‰‚„…™¬·¯­¤Ÿ¢šndupwy‘·¼ÈØÔȶ±°ÀÜêèÞÔØÜÜÛÊÆËÑο° Ž†‹€u—¢œ›£ÍÓÈÅÎÜÖ´“—£†¥´¿ÐØÕÖпžÊÕÛÜáâäçéëëëëíîìééåàÛÖÑÐÐÙðùüýýüøóñõ÷øùûüýüýþûüþüÿÿÿþþþÿÿÿÿÿÿÿÿþþþþþýþýüüýýýüûüþýýþýýüýýþþþþþþþÿÿÿÿÿþÿÿÿþþÿÿÿÿþþþþýýüúúøø÷õ÷ùýþþýýýòèâáÙÔÝäéïòôôóõ÷öô÷öõóðïïìèâÖÎÍ×ÞßáâÞàÛÚÚØåð÷ùöðëïóìÚØííàÑÄ¿¹­«ª­¾ÔíùúûþýþþüþÿÿþúíéôûýýûùøëâÛÚÚÛÔÒÍËÍÍÉÁÂÃÀ½¢cl~ˆŠrasˆ–±³›‡eeo}}n‡Ž—Ñçêïïïíë×u–­¾°„9    &7  -+(3JTZ_[\^Vdtnn{pqvkiVT]ep‚uT:!"5;0()"!,Zwx{sƒŠ—™©°¯©«¬§—W 7[nqaW\XC80.7ADFLZfj„¡¯¥¦¢¤­«¤¯°œzn^PEIJWRWapxzoYC112*##+K]fmj\SWUYZil„Ž“˜qA&  "'".96"'.H^kh_fts|†“˜‹||’¢°°¯«š…‹…mbij_`fik{Œ—£¢œ•ˆŒ”œŸ¥˜Ž¤¢Ÿ‰ŠŒŽwdz”›Ÿœ—[  -  %(/-54=:A;2;;%   - - -  - -     $01/00)$)+#!  )39KVW`gagy~yrrŽ–š‘qF+'-22=EW_ZJB[syuoM4)&&&-4Rbefghb\Tajsuo\?%  1UsŒ‘‘‰rRELNND60+;K[_PG@;=Sgslgh_WLJ\^^cmxohvˆŠ|y]7':KIKHIE;*  - - -   #;JF;.(+*03(.)10,**(!(3:>ERPE@:>B>D=?.).982-6A2+21+9>4@A' )6F@>A?@6*257>@J\]MF:1ALMIEDGJTTWJ@FFGLM;DRcdehbgged]`ddhdicdfe_`^OB99;<88* -' L ¨¬­²­µ¶Žeg}‡~uc62>Mg‹¥§¥ÇÚÛÞÜÛÚÙÚÚØÙØÓÐÑ˶™—’xq‚Š†vk~’®»¯«¢‚gg~…†„†Š‰¡ª²°©²¯§•h_{zw~¶¼ÉÚÙѼ­ª¹ØããÝÓÒÚÞßÐÃÌÙÕȶ£‘|~‚ƒ†xy’¥›”ÃÐÁÀËÕÖÄ š§›’™§¶ÄÎÔÏÌȼ¹ÁÆÓØÛÝâäççêêêêìíîìèæßÖÖÖÖÔ×èùüüúøóòòõ÷ùúüüýýýþýýÿþþÿÿÿþþþÿÿÿÿÿþÿþþÿþþþýýüûúúúú÷øüú÷ùúúùûúûüýýþþýýþÿþÿÿÿþÿÿþÿÿÿÿÿýþÿýýýýýüüûù÷ôóöûüþþýøïìçßÒÓØãêìðóööö÷ö÷øöóñðïìèçÞÒÌÒÛÝãáÝÜÛÚØÚçòøú÷ñîòñáÑØïëÞÑÅÁµ®¬°¶Â×òûûüþÿþþüþþÿþúîêùüýþúùúðîëêçèâÝ×ÑÉÊÆÀ»¾Äͽ™um|Š‹kp†“˜·ª…sacquo}†Ž©àêëíîñïêÚs–¯¼´…9   - /@KUd`\a\emwuutsqxpcYael{{mA#-=6+'*(Ij€wvpy‹œš£°°«©®­¦”^  7WooZZ`WI7/.<7:?B[`k€‘›š¤­©–Œœª¬®¶²Ÿx\TQ[WTUWfnswf\A4*-+%(0.Ikqst`WYW`cmŽ•šœvH% -  $"1<9(B\ek^gyp…“Œ‹zy¡«°¯¬ Ž†Œ~pf_cbcXfpv…– ¤¦›Œ†šž¦¤Ÿ’˜Ÿ¥ž”‹…Œ‘Ž|s„“Ÿ¢ ›r' !#%)4<784;=>0:<1$ - -   -  - -    - -    !&*22030.*%!     )5LX^ZIBTmvwpY9"%)(-3G[bgeedZTaiqxteK2  - "Bd†‘”Ž|cHDKLLA2+0>V]ZMI:=IassppnfTLX`\\eprkv‚ˆ„~kM0+=EEFFE=.   -  -&7BA1* # /2/*+*/-0+)!&16@//328933;3(24/48;C?)!.?@E:7/2>;4?EUXQH7-9KM@FRKJTLQAHGHLHMJIO^beefgefjYZcojcefahac`\J;;?<==0-% ) - Y”¢¬¯±µ¯´²™ƒcm}~ucC207Wx“«¤µÓØÙÜÚØÙÚÙØÙ×ÒÐÖѾ¬——ˆ|r{Œƒzt}—¸º·ªšue|ƒˆŒ‹Œ¥®¯°¬´¬Ÿ‘c^qv•¶»ÇÚÛÏÅ·«»ÒÜàÚÓÏ×ÜßÙÈÎÛÙ˺¬žŠ}ŠŠw„žš¯Å¿¿ÃÐÒĦ–¡¢šž¥°ÁÌÐÏǹ°·ÃÔÜÜàãåççèëéëêêìëéãÞÓËÓßéçáæò÷öòòõõøûûûýüýþþÿÿþýÿÿÿþÿþþÿÿþþÿÿÿþþþüüúùù÷õôïïïïîêò÷òïïïîîîòòòõ÷øùûüýþþÿþÿþÿÿÿÿÿÿÿÿÿþþþÿÿþþýþüüúù÷ô÷öøúùõôùõíÝÓÍÕßæìñôõøöõööôôóñðïíêåÜÌÉÕÝÞßÜÝÛÙÚÚåòøúùõñôîÚÊàïä×Êù®§©²¹ÌßõûûýýþþþþÿÿþþýôîøýýýüùùòîëëêìëçáÙÕÏɲ²ÌÙɧ‡v|–~iŒ™­±—x_[eztq‚Š·ãéìîíïîéÝ•z—¨¸°‡6   -  - -):FE]]aaeVeos~|}ukssgdekx}vV((634--1)C^ouqlvŽ”Ÿ¦«°¬««ª«¡‘b -7auv\S[VH545988=E\dmn€ ©°®™‰Ÿ¨«°©’i\X\``X\ktno\GA./2%*+*/5Tw|yrc]Zplrwƒ”“žœ€N)  " (>>"#>]ij\Xrƒ{‚’”†„}‹›¬­¯²¢‰ƒ‹‰qggfecemrƒ–¡¥¨Ÿˆˆ”¥ª¢œ– ¦¥—‰‚‹ly’žŸ˜™x+ - -  !#&+286.43<<4705&       "$(21433-""$"  +28ES_aa\XWVT_dr›œ–{M- )-9BOY_`TFHet}vc>* (+'/=Nagffg`YYemtvl]E/  C/OvŠŽ‘‰uQHKNJIA5/8H\[WPB87NjyyxtndTPV[^Yfrnsw€†zdK4"5AHEED;, - -  -   ,:@C8#$'.0(.0-*30(*$!)-:CLLG>2EA=;<92-../.55;<749:62=EB* 0<9B?=@736=9/9DDTULC5*6MLA@IHMRNMCFLSJJOJOYeghgaeegjZWcnjfbfeccc`XQ<:=EC8--#  ^š§¨¬¶µ¬·©“’vdhyo\?GGPq„†˜°¥Á×ÖÚÜ×ÙÚÚÙØÙÖÕØÑɼ›˜˜‡{|ˆ‹|kp{›¾º²«Žbw‰‡Œ‘•Ÿ­°®°¬£–ˆcUmvxwŠ‹´ÁÈÙÖ×ÏÄ»ÁÐÜÜÓÎÍÔÜàãÖÎÙÜÑÀ²¤…‡l‚Žœ‹‰»¿ÁÏÕк˜ˆŠš¢¤­¸ÁÊѾ®°¾ÔÞââåèççæêëëëéççåâÙËËÌÙóùöìáåëïðöúúüýýýýþþÿþÿÿÿÿþÿÿÿÿÿþÿþÿýþüúúöõòñðíëëëèìêëëêéíóïíðìêêéììéèììííîòõùûüüþÿþÿÿÿÿÿÿÿþþþþþþÿþþýýýýüúöóòòðëòüþúðäÒÎÏÛåìðôø÷ôôóóõôòððïëæäÔËÔÜßÜÝÛÚÛÚÙåñ÷úúùöóëÚÑçìßÔÈÁ¸®ª±·½Ôê÷úüýýþþýþþþýþüöóúýýýüúøïçãââââèêéá×̼­¤³Ã½¢Œ‚…ŠvqƒŽ¡­–ta]diwfwŒŠ–»Öäèëìíìéá“l˜¡¶²€6 -    #;E@MPW`a_[`tuwophflqljjzzR/!(51:60*-%Cju{{rwŒš£±±µ²­¬ª¢›ši$ - 2Zmt_S]TH;02>=:GIPjbl€”§­³§•…‘Ÿ§¢Ÿ’u`bdeg]atug\S6)/2-0+*1):Ealw}jbfovw€‹’š›ƒG+"  )8C* .Oagc^k{wŽ•Š‡†w}–ª°°²®–…ŠŒ~nnhlfgpsr…‹›£¦žŒ€‡™  ¤¨™˜ž¥§¢†‹Œ‰xji‡—˜œ|7 -"!$""*$(5.2976265*0)    -  - - "   &-0532%""$ !#   -+6A^twsvwg_RV^\X]hruo{€|{qZ=)+AGC?83& -  -  1?IP>)#'.3210-*614))*.9;EOLI:3A@>=682.123326<@8*42279AK/$0;7>>A>95:C2679KHOF?5!3IHC@HHILVMHEHOUQKKP^ijjjjgcgh]Wbcajia\eoc\VO=:@@=64& - `ž¥¬®¶»¯¸¥“‚i`kpV=L[\ˆš§¦ªÍÖÙÚÚÝÝÚÛÛÛØÖÔÏËÁ¦—ž”~y†Ž…sp|Š³¹³¦žp{Ž‰Ž‘Ÿª¬´´¨ ˜„YRellt†¯¿Æ×ÔÑÐÊÌÍÕÚØÉÈËÎÜâãÜÎÓÛÖǶ¦‘„„’•~pƒ”‰š´ÀÈÜÜμ’€†—¨¦¨±½ÉÎ˺²·ËÛàèçèèéèééêëêéçäà×ÉÇÇËèöøóëåèìô÷úüüýýýýþþÿÿþÿÿÿþþÿÿþþÿþýýþüúôñîííííéêêìíìîîðïïïðôòòññïïîïðííìëëêéëêíðô÷ùüþþÿþþÿÿýþÿÿÿþþÿÿÿÿÿÿþýüûøöðíêíõûû÷ìáÏÃÍÝèïóôõõõöóõõõðïïìéåÚÑÔ×ßÝÛÛÜÜÚÚãñùûûúøóèÚÓäåÜÒɾµ­®¯µÇßïûüþÿýþýýýýþýýýøöùýýýûû÷íäÞÛØÚâììëá×ϼ«šž©«œ˜ŽŽƒjp‚Ž¥¡|bX]l€quƒ†ˆ¶ÌÚâèëëëìá™k’£µ³‹;  !,;:BOJX`Vaklr€uih_hlrrio}u\;&!#2437205#Acvwmw}‰‹Œ—§±´µ°¬¬¤™£§u/ *\pqeMUWI=51=;?=E[ehl‡œ®²¶¬›˜¡ ž‘…pfonmmdpsjWKE4+0+.'$,65>N`lssxptvx{ƒ„‹Ž–™žˆT0  - - - )>F- Pdij_f|€rŽ™‘Š‰ƒ~£­²²«š„~ztmfhcflpt‚šž›~ƒ‹˜ŸœŸ¨ž“™¥§¤’‡‹‚xwrm†–œ£‹F ""!!"!!#$*-.,82506-+,)   - -    -   !-1-,01" #"!" *:BDNZjmc]ZX[Zf|‹˜¡˜T2(+28?M^ac]IE\t‚zoR2"&(&$)?VcehfdZLWdnsrjX@"   -Be~ˆ‹lVDDJQOD835>U^[XHA9Jhx|wush]Z\`TS^lttw€€xshM1! 7>>;3*"    -  - -@GH7)!""#001551/&(.)(+3:6;2+,335958<54)%1;;B>2 %+6:8<=@748?:312=?JLE1);KHB@BLGSXLHA>OYSLNQ]`hdjefieeXZca]e`Zddae`XH>09=:52#  -Y ¬¯±¶·³¶£„|…[U_TDO^gš²£‹–¬¢´ÓÕ×ÚÜÞÛÛÛÞØÕÕÏÉö”˜Šxƒ†‹}mju˜´º­ ƒn Š‘«­²²©™–€\Kakmq‚„§¾¿ÎÎÄÅËÑÔÙ×ÕÎÆÌÐÚâäßÎÑÙÙν­ž†{™šŒw~‰Š“«ÀÎÝÜÒ½œˆ‰”¡«¬±¹Éп²¯ÂÛàæååæèééêêêêëêåàÖûÁÉÚíðòîììðò÷ùûüýýýýýþýÿÿÿþÿÿþþÿÿÿþýüúøóòðíêëíïïïîíïñòóòóôõôóóöõõ÷ö÷÷õõôóóóðððíìëèééîîòùúýþþÿÿþýýþÿþþþÿþþýþþþýüûùöóñìíô÷øóéÕÃÃÑßëðñòóôõöõñóñðïëëéáÚÔ×áàÝÚ×ÛÙÜåòøûüüúðàÐÔæà×Ïľ¶±ª¬ºÎæôýýýÿþþþýøþþüüûùùøúýüûüøìáÖÝáäêêéçÞÖͺ³¦ž¨¤“”qcs„ lUUjz|iƒŽ¤´ÄÍÙâæëêëàœs‰ž¶·Œ:   - -3>?>I[Xbp‹§°±±µ£Š– œ‡~{toprspyvmZK=;2)/:5',5:BI^bgv|„‚†w}‡„‰Ž“›‚]/  %AF."J]bg\d}xtˆ“Š‚{~¤¬­¦ž„‚‚nddgppdjjs‰”›˜—‡‘–ž¤¡ ˜¤ª¬œ„„~‚rl•™˜‹E " &":2#$" +&**21*23/(4/%0"  -      -       -#)*'())%!"     +9BEPZgkhZTU\]ar†•š—„_7%)-4FIS_b\H=Vr{|r_4#$'&$)9Nafed]ZMMYgprogQ.  - -  - -MrŠ’vZH?HP\TD;2;JY^YME;?\o|€{wpfXPW\XXapst€„wslcC%'1:<1+  - - -   $.DLG6( #%*1-,231-*$##(.3==DKHA76<:;<200/01712=533'0/6;/,5?=>A:.*?HB8>EIGP^RQGMSMNGLSXXcegbjlkbVZafcid^d^]f`PF5.7A@54( - eœª«ª³¸³³so{hNNKJXhv©Â¹™§¨¤ÇÔ×ÚÛßÞÚÚÛÖØÖÔËȼ£’šˆ|Š‡rgkŸ¶°§–n€›™’—ž®´­¯¥›‘ƒ^K\alp|ƒ£¼ÀÅÉÅÄÉÎÑÖÚÖÍÈÎØÙáãäÓÏ×ÚÓÄ´¡‹}‘—†y‚‹›¦¾ÕãßÓ»‹ ›œ¥ª±É̹°´ÑâãæççéêééêéêééçâÙʸµ»ÊÛçíïïñôøøùüýýýýþþýþýÿÿÿþþþþÿþþýûøöòïîïîííïðòòóôôöù÷÷ô÷÷øøöôøøùúøøùùøö÷ùøõöõôóïííéêéêíïõúúüþþþþýÿþþþþþþÿÿþþþýýüúùöòïîïðíé×ǾÃØâêîòñôôôôôòñðïëëèäàÖÔßáÝÛÙÙØßæòùúûûùìÜÎÝêÝÕÉ˺°®ª³¾ÖéøþýþþÿþÿþýýþýüüúöôùüüûûöíââéëéääãÚÖÓÈĽ°£ž¢žœ…ml~ˆ”‘p^GXgqs‰Š€“¨³ÃÊÐÙÝäéèÝ™v“¥°²ˆ2 -  - - +-?EUYKAEY]r{n{jjqpjdtxzvhG2%975,6&"*F]emuzy…„Ÿ«®°²·°ª¡š›±®1 (SnlZ[[\L<6/7?;ELWXayœ ³¼½«Œˆ‰{txpiptrll_I<707076.%6GJLTY\o€ƒˆŒ~{„~‚‚‹”˜–‘^2  -   $AE/)HWck\`x‚z€ŠœŠ{pqˆ˜¦ª­¬ƒz††sgf^a\^^ajz“œ•†‰‰’Ÿ¢£™š¨¯® ‹‚‰‡g{ŠŒ’†K& - "*(F% $( %,*$+*./75+/(*  - - - -   -         !!$##&##" 19FFX_cjgWPOXagp‚”“‚e@)',19HRW]`Q>Jguwqb>' "#$)3DYcbcdcOJWajsuu_> - - - -":aŒŽ}f[KGIY^S@01?U_ZVI>>F=678=6.7<@@;1!.DHC:9FMKSYTLDGNVXOOU_`db^dhfhg[acec\eiecb]^[H<47<73.'"   - -e›¦ª©²¹±·•cfn}rW;LMbv„«Éʱ˜®¨³Ð×ÙÞâßÛÚÚÙØØÓËËÁ·¢› ™t‡„~qdp¯³¥œ€hŒ —‘‘Ž›­¯®¯ªŸ’\GVfrsxƒ»ÄÐÉÅÄÇÉÏ×ÜÖÐËÏÚÛßääÖË×ÛÖ̼¦ …‹™¢›…w““–˜»ÜãâÕ½£’–’‘˜¤©·ÉƱµÂØãåæèçéèéëéçëéèâÚËĵ½ÍÕßëïòôõùùúûüýüýþýýýýþþÿÿÿþÿÿþýûõóìììíðïïòôõööõøøùùùùùøùùùùùõøúùûüúûüúúúúúúúùø÷÷ôõññííëììðòöúüþýýÿÿÿÿþþþÿÿÿÿÿþþýýüúøôñïïéá×ÊƼÄÑãêïñóôõôôðñïîëëæäáÛØÝãßÛÚÚÜÝåóúüüýúëÙÖéêÞÒÊÉ´©©­¸ÇßïúýþÿþÿþþþþþýþýüùóóûüüúùöîçéëëßÔÓÍÌÎÎÇÇĶ¤œ§µ´¡~_s€~xcOSdr†|€…†‡‘š¢¹ÈÍÑÔÛàâÛ˜i£²²@  /9NMWQLBDR]ekmwjnjrsohn…rQ0$(/86;@8,!>]cdnrƒ„Š˜ §³µ´²¯¤–œ±µ¨ƒ1'Mep`\NQL:/5BA=BEIVbt‰–¢½Éö˜ƒ|osqtsoqpf[LBB8>6323'2-CQNRPUVm…Œ‘‘…}‰ˆƒŽ––¡”\4  ! $=J/#/QklfYozq‰’Ž}m{˜¤¨ © ƒ}ŠŒ€iihg[gidn‡Œšž–‘‡€‡š¤¦¦¨›˜¤§§¡’‡‹ˆ„ƒnqƒ—œž‘d*  '*-&(%-%!&$&#*'+.+42/+:,&2&%     - -   - -       &"%%&$! .E]puoiM0"!"+?O^_gmdZOZ]fpuulM**Io…‹ˆubPLKITXI3/AQdzx€mbXSYZYVdlrtzƒuma@,!!%(*#       )87;:1978-,4<869736.+.6-.2@D. )26<15=E>8;>86-17CB5.'CE@@>CHNTWMHEBLXPKOT^\aa_fcdmcX^ee`\bifdd^ZYD=7;==-))&   - -`š¦¤¬¶¹¯µ’][bhn]DLXrƒ…´ÌÏǧ–¡¯§ÃØÙßâàÚÛÜÜÚÛÓÏÈ¿º«”›ƒl~†~vpe¡´ª —ph˜œ•“ž«²°´§›—‚VFYirwo}¡ºÇ×ͽÂÂÍØÛØÔÉÉÛÝÛääÚÆÑÖÖÏÁ±¨Šž ¢š‹•“—˜¸Ûäâ×ï›—Žœ«®¹ÈÁ¶¾ÍÙãäåçéçêéééèéèäÚʼÂÁÏÞæìðöøùøùùûýûüýþýþýýÿýþýþýýþýû÷ñîíêíïðòôõ÷÷ùùùùúúúúúúüûûûüûùöùúûüûüûüýüüýúûûùøúùøùõôôóñîëêëîñòõúýýþþÿÿþÿÿÿÿþþþýþýýüûøøôïíæáÛÌľÅÒâêîñðòñóòññîêëæäßÛááäæÛÚÚÙÛæòùûüþúè×ÙëåÚÏÅò«¬°¹Ñåñøüýýþýýýýþþýüüüù÷óúüüûúöðéëêèáÒÅÃÁº¶¼µ¹³ª£ª´©obwkcW^kzwŠ…}ƒ†‡‘®ÇÏÒÒ×ØÚÔŒ`ˆ¢´°C  - -2BGPT]OCCMZcgd`hlllsx|}{Y6 ,;<9;9=?0 6Xceluwƒ…‡ ¬··¶®¬¥›–£·µ¯Ž:   -+Jdq`SSQE:176AA@GOOit„™°ÈÒɶ‘khmqjopkje\ZI?6A4.112,,:@JWZPHP]t†‘’Ž‹…††€Š’›¦§“`B$    (KT8"'AYhg_l`hr‰”‘wlnŒŸŸœ¡¤ˆuw†‰jkiologlq€•™‹…|‰š›¤§¤œ‘™¦©©›ŽŒ‰‡tt„›žœ™s8 #*0(1,--'%)+ $$%,).-40*/4'0.&  - - - - -   -      -"  %$%'"$##,;GIJU`hgYQRX^fo‚•”Ši>'"$44GPZ[ZK@@UisujV6##"$$3JX\ckmdYUY_eljr_:  "7]}‰Œ{kZMLKLON?45=.'47;69:553543534@?- !31179@J:8;651476DC83)%6AD;?AGJTTQIC@QWKGFVe^]`celikg\``hh`cde^ca_TG94>F>82# ^ §§¬°·²³fRQZffMT^vŒ‰ºÑØÓ¾œ”ª«®ËÚÜÞÜØÚßÛÚÛ×ÏÈŽ·¡— ™tl|…€fd„¥­¡ž{_|˜™Œ“ž­±­¯¨–’{SOagolp˜·ÇØÓ¼·ÉÌÐØÙ××ÌÉÙÝÙàßÙÊÍÐ×ÓÈ»¯Š˜œ¥‘Žš– µÕãâÖ¿¢š¤™”›¬µ¼ÅÄÈÄÌØßãæççèêëêéééæßÏ»µ¾Ôãìñó÷ùùúùúüüüüýýýþÿþþþþþþýýýúõñîëííñîðõøöúùùúüûüûûýüýüúýûýþýø÷÷ûüüýüüýýüýüýûüüûûùùùùøøöóóðïííéçíóõûþþþÿÿÿÿþÿþþÿþþýýýüûúùøôïìèàÐÄ¿ÈØåêîïðòòðïïïíêèßÛÝçëéçÞØÚØÛçñøûüþùæÑÛêÞÕÐÅÀ²©­¶ÁÚìñ÷ûþýýýýýþýþþüûûüúôúüüúúøñðìçäÚžÁ±¡š™£©£™“•Ÿ‘zkktvxsocmo}ƒv‚‹}…~‚„¤ÄÑÖÖÔÔ×Ì…Z„žµ¶Š@   74CUZ[YRPSJYfim^[kwxsx}t[5+ :>==?:70#-F_`eu}‚„’“š¢¬³º¯±­—¡©´¹¹™;#OcqaWc[I>2*48EGOVVar‚»ÇÏŨ…g`d`mvnib[D?=AC@30,1'(4?L^_RGIZe|Š’š•ŠŒ†‡‰ŒŠ• §§–c7!   "?S:%&=Qindaegi‚’’‹xje€• ¢Ÿ‰~~Œwifllkljjw††z}~–š›š—Œ™¥ª«›Šˆ„wds‰‘›¡z<  ++2;7410,"#,(#')/..)3331-)#-$ -   - -   -     R!%#&&""   $:HNR]ekg[TX]dkoy‰‘—mE(%%26CM[`bXI=Rirup\8" #&!"-O_\`iqj`VU[[dgod?! - +Nk„…rdSGJNLME=86AO]UN@8?Ibqwxxuf\TZ][]ekyy}~ushH &.% -      'COL?2%" ")-1.%,+,+&!%')4?4/88:A=7:**BFD=BE?EMRNKFHQOUJEJTXcbdhnoda\[^dcge^fdfc`SM;7A@<80' -  -  !a›¨®®¶»¯´—`F=I[dQY`|’“ÀÖØÔ̬¢²¦¹ÔÙÛÙØÚàÝÜÞÚÑÉÇÄ¿³šm{Œ‚lhp“°ª›sij‘›¬´±®«›ŒzZP`monm~–¶ÇÚÏ»ºÍÖÕÛÛÍÎÏÈÙàÚÜäáÓÇÔÚ×ʾµ “ž¡–’™š©¯ÇßÞ×À­¤© •Ÿ³¹ÁÀÃÊ¿ÅÒÜáåçèëêëêêêåáÙô¿Óåïòöøùúûüüüýüýýþþþþÿþýþþþþýûøñîíëïïñõóôøøùúüûüüüýüþþýýþýýýþýüûúùüýþþþýýýýþüüüýýüýûûùúøøøöø÷ôóñîëêíîòùýýþþÿÿÿÿÿÿÿÿþÿþýüýýûüùøôîëÞÎÆÅÓÜçêìñòñññðïíìçÝØÚãíìëåÝÙÚÜçóøûüüóßÐßãØÑÌÁÀ­¬´¹Îåóöõüýÿýýþþþþþþüýûùù÷úüüûú÷òíçáÚÌ»¶»®•…‡™ž~w‡ž†lltqkspekmy‹‰…‚vr‡‰Ž¥ÀÓ×ÚÙ×ÕÉS†¤³´”H  9DL\_POVOQQ_mm_]fc|…oxyl?"5>:6799+"*>P^in|†‡‹˜ž¥ª¯²±­± ™–©·²¹¸”=YbkaW]WK?;4><>CS[ZYl‡£ÁÄȺk_`_inrlXI?;@>AD4)*1(5OS[`d\YYhq†”–””Œ‘Ž‹†˜¢§¦˜k/"  9^@("6Tfj]]jg_”„vmm„—£¦¥ |€ŠŒiijdefnqy†’˜™ƒ…‘˜Ÿœžš˜—¥­­¢Š…†‹†umxž¡ ‚C! *047<>663*7-&/-0#(,)**.0'(%/(1"  -     -  #$)$"!"&4GKY[_hj\]dmosst‹“˜tL-##(3@LU]bZM:Eduts`?+ +%!/=Obdipmd]WU[`evaF+  &3So„‚ti[JFHHRQI<84HSWUH=9;MfpvurjjX]^`^]duzyxzy^/ +& - -      --HNH;-$""&03)-2.('(!#',4=@KJ@87@A;40321/39?@@9?@2/4/6;JF' $09?6:?:33?B5,848??@D3%      - -bš­¶´¶¹¯¶“eSIKjmYkg{”¸ÕÚØÖš¯¯­ÈÖÙ××ØÜßÞÜÛÒËÈÆþ¦—Ÿ•{p~…„lhfx¦¬“ˆ„j{›ž’Ÿ¬³®®ªœ–}VE\hqunv³ÆØϽ»ÐØØÛÜÉÆÌÊ×âÜÛàãÛÅÌÖÙÏÀ¹§‘Ž£Ÿ—“ˆŽ¥®¯»ØáÖÄ«¤¢ž¢±µµ·ÅÄ»ÀÌØàäçéêèêëêçâÛÊ»ÁÕéðô÷ùúýýýüýüýýýþÿÿÿýÿÿþýýýú÷òðïîïðòôõôõøùúûûüüûüýþþþþþüþþþüýýýû÷÷üýýþýþýýýýýþýýþþýüýüüûûúúùùø÷ôòñðíììîóùüýþÿÿÿÿÿþÿýþÿþýþýýüûúúöóìâÖÊÒÒàçëïññòóñðíìéÝ××àíëèéßÚÛÞèôúûüúî×Øçà×ÑÌÀ¼°±µ¾Øíùú÷ûþþýþþþþþþýýûûùùøùüûûûøðêåàÚÓ¿ÂÆ°‘x‰‰{blŠ•objww€ldanq‚•‹„…‚‡¤°·½ÆÑØÚÙ××ÕÆŠR|£´±•N  $:;>Tdb[OVRKX_lkg_bh|‚xxnD%0?856:?2#$BI[`z‰‰›  ¤ª²µ®´®š“£¶¹¸À¶”0 ,Ieo^ZaZM=97688EPZ]fs‰­ÀÀ·¨–yb_einusNC97<568;@><94.16B@" &1;8207<78??66637@=83&)?JFBBGFERXSLCKNJMRTT_[_hcgfdi_[]]fhf_dbfibZVC>7>=><0$  - ^—®»¾»¶®³•aXV_yw`jo…•½ÓÜÜÚм¢¯­¬ÇÖ×ÙÛÝÝÝÜÖÐÑÍÈÄò¡™ —tou}m]Yj‰¥‘‰”|nˆž˜Ÿ­°«®¬›“u_MWgkfjt³ÁÑÌÃÈ×ÚÖÜáÙÈËÈÏààÖÝäáÑÈÑÖÕÌÀ±›Œœ¤Ÿ›‘Œ’¦®²³ÒÝÔ½¥˜“‘š§¬¬ª§Ã¼±³ÉÜáãææêêéèåàÙÌÂÃÜíõøúûüûûûûüýýþýýýÿÿýþýþþþüøñïìïñòõ÷øøøúúüüüýüýüýýýýþýýýüüûûýýüùøòðóøûûûüýýüûýýüýýþþþþþýýýýüüûúø÷÷÷óòòðíîíñöûýþþÿþþÿÿþÿÿÿþþþþýýûüù÷ñëâØÖÕâèìðññðóòðîìåØÒÙçåéíèßÛÞèóùûû÷äÐàêßØÏÊÁ³«µ»Èä÷ûùøûþþÿþÿÿýýýüþüûúùøûüüüûùñêçáÛÛÛÛÒ¼¢ššŠ{et}nmowƒ~aPcl{ŽŒ„‹˜­ÈÖÛßàááàâàÜÚÓÃ…Mw¤³¶–T!    =LPWcg`RSMQR]`_ZZiy…‡‚pD'/@:16:>5+ 5V_jz‰••£¦¬­°´°²®¦š¦´´¹Ä¼²—9  $P`j\]\ZZC;515@BHZ^`j‹¦¬¥–|sgjqpphX:242;>972/2>@S[[\g‹‹~w}…‰”˜™–”–›“‘’—›¡ªŸt?%   1\Q0+Bbpldbfom…“†vjx›¢¦®­£ˆ{‚Ž‘ujhcpqkorxŠ–ž¢™‡~Œ• ¡¢›šžª­«›ŽŽŒqyŽ• •f4(<@?>E>8960651.27730.8,1+'01-## - -      "%)%'&***+   0?GS`dhjca^`bdfwŒ–œ’xP-'+7GPWb_M87Wwxo\8&))&1AUcbhlkaWQSQT^[OC.  -!8BLLC5634>Vipxwqh]TS]Z\ajuuy|xX3  - - -  - -  -4FIB8*%% %14--452.,(.&'-36C@JF;8;=9036./869<6580029C?1$!$:GB?=AOIHSMMGHHQVKHQaa^ciie`jaZ]abjj`\d]bcTQF72c]=9]jmljf^l…‘‘|cn‰ ¬®­¬•ƒ~Œ’}gfjlorunq•¢¢›Š‚‹“ž¦¦•›¨©¨œ’ŽzuŠ‘œœ™p8-?B9?HD><@485292/3625301.2/23$!  $# - .   "+)*'(-"#!  (>DSafidYPLSZ_av‰’™˜uQ.#*;>KVbaRA:Ls{s_B&)'(&4R^\`jnd]RLGJPUN?2!  +_}†~hbQ=:CPZaXH<7A>>*"372.5B@78AD=.,869<.')(:F??BIEJKKOF>EKV\JFV^cdbefflj][^aZdegeccb[RIJ;5=@;1* - e¡´¾Ã½¶®´–nbdkˆ†qrk“—»ÒÕÒÉËÕʱœ©²¤¾ÔÙØÜÞÛÙ×ÑÒÒÎÉÈùŸ‘›‹b^_h\@@IeŽ—•qc†—¦¨¯°® ‹qX@Ugjot­ÃÏÎÉÐÚÚÙÝâáÒÇÈÇÚáÚÔÞãÝÊÁÎ×ÖƼ¬–˜¡£œ’•‘¤¨¥®®Ç̳ª™•– ¦¢¨ª­²µÃÐÖàãçèéççæßØÍÍÏèôøüûüýûûþýþþþþþýýýþþýüüûôðïïñòòóöøøøúúûüýüýýüüüýüûùøúúùùúùùùúø÷ùöðíðöö÷øøúúùùùúøøùúùùüüýüüýýüýýýüüúúùù÷õññïìíïõúþÿþÿÿÿþþþÿÿþÿÿþþýýüúøöïæÞÛãéìïîïòóòððíæÛ×ãîôùøïÞÛèõùúøîÝØãÚØÔÌ·­­·ÅÜôýüùùýýþþÿþýýýýþþüüù÷úüûø÷÷óíëéçææßÚØÖƼª –†z‘„mpou†v^TY]n‘Œ‡Œ´ÊÚÜâãäãæèæãäÛɳoHpŸ¶¶“L -  .>O`^cX\Y[RDG^]`bq}‰…†oM6+?=9/:32+ +>Og{ˆŠ•˜ ¦°´µ´´²­£ ¡­³¸¾À»ºº¤J -$LaeY]RVOQA7A?B=PZediyskokhpqyneVK=8,(40$*)7:AOY_m¤¡¤•”‰…~‹‘‘–“š™š’Ž”•›Ÿ¤¢{C!   -   -!9bb? 3Njoe\ddouŒŽ‚}if~Ÿ©®°²¡„z†Š†piijnjyms~ŸŸ‘‚~Ž•œŸ¦žŽ–§¬¬¡’‘ˆ{o…šŸ’y=&<>?GLHIC>?<=74895569656-*.91-  -  ! #&!      '+&!%'$+=KUaijbZJKJN\iu„’˜•€U-%5AJS[XTH9Oo‰vfG+)-()0BU^ahghUNKF?@A70% -  Egvse^R?5=EQUYH:47;LRIB42712::;6/7D=B:*#-94)14;73@>;683685/,"":G>>GGEHKQQG?CGOUQN`e`dbhidik\R]a_dYjw^d[S[LFB<@?21%    k¦µ»Á½¶¯¹™kcZp‰Œpqoƒ“”µÐÑÌÀÃÓѾ™—¯©ªÌØÚÜÝàÜ×ÕÐÏÍÊÊÊDz—–—mNOSM;88N‘ ‘‘yeu”©«¯°²£Žx]CR_jmxsŒ³ÁÒÑÈÒÛÖÖÜÕÖÓÇÇÇÖÝÜØàâÝÎÁÉØÛÎÁ¯ ›Ÿ§¡˜›¦¡¬­µÅij«Ÿšš ¥©­¹»²ºÂÌÖÝàåèêèçáá×ÌÐäðøùüüýüüýýýþÿþÿþýþþÿýýû÷óðîððóõö÷øùùúüûýþýüþýüûýýüùùøùùùøøùùøùúùùöñîò÷ùûùøùúúøùùøø÷÷÷øúüûúùüûüüüþýýüûüûù÷õõóñîìëóüþþþÿþþÿÿþþÿþÿþÿýýüýûøóíãáäçéîììóóôôòîêåàçôùûûñâàéóøøòæ×ßäÙÎÌÇ»±¬¯ºËæúýúùüýýýþþþþýþýþþüùù÷ùúøôîíëèéêéæâßØÐÌÇÀ»²«˜–•vqƒ|‹uaYTay”‹„¡ÃÒÚÝáäãââæåäáÕ¼¨lJw¹ºšU!   (FS_]cgZ^VPPLXicdg|ŒŠqW: #5CC<355%#5Ght‚Œ—š¥§¨°³´³¹³­­¦›¡®±·¿»²½º¥M !Ld\_[Z]RJD??>BB:24.954648740-510' !"%#%" ((&.-"!  -   ,*(,&%%'NOQI?4'3CNOL?2%->UhjcWI;>L]cYX\_bjksmU2 -  -  -    -  2EXO?0..$!)&+(,..*12%&'+29>LU@;<6555122/525>A7?>?74.@A;=<& "3;5'16/15D?JLIJEBBDRVOOObfhffffgeY[^d`\[ig`_U[XRDB>>>9)" - - j¥²¶»º¹°´glgi‹pzt†‘´ÍÎÓŶÉÓÆ££«Ÿ·ÓÙÛÝßÜØÕÒÐÏÏÍÒϼ›‘z\IDG5.;Q‚š—Œ{o‡Ÿ¥ª³²±¡‹kXISesicm‹³ÅÖÓÈÎÚÔÕÓ¼ÀÖÈÅÆÎÙÙÖÛââÙÅÆÓÚÔŨ ——¡ž™™‘¥Ÿ§§¨Á¿­¨›—¢¥¢±ÈÉ·¹ÈÍ×ÛÞãçèçãáàÛÕâïöûüüüüýýÿýþþþþþÿþýþþüúõïïðóòôõø÷úúûüýýýýýûûüüûøúüúùø÷÷øø÷÷ùúùúùùøóïîò÷ùúùùøøøùùøøø÷øø÷øûûùùúüüüüüüýýýüûüúøù÷ôòïîíñùýþþÿÿÿÿÿýÿÿÿþþþýþýüûøõíéææèíèíóóôõôïíëåêôùúúôçÝëóùôéØÒåáÖÇÈ¿¶®«²¾ÔîûþúùûýýþþýþþûüýþþüùöóöùùóéåÝÛàÝÝÛÚÜÔËÉÌÒÑÇ°­«’{{‡‘Ÿ¡~g__jw|ˆŽ’´ÍÖÜÛÝààââãäàÙÊ®˜oIr˜µ·žQ - - 3LT`cfbYVVLKMZfihqz‡…gH+#386725<*7Phq„ŠŠ˜¢¯¯®³¸»¶¶±°§Ÿ—¥±²»¿¶¸¿»¢K -  Aael^XZZVB;8:>>MXeaaXVW]dgimn`]lgZF.(#),4NU\pŸº¼»»´¯¥–Œˆˆ€‚•‘œ–•“•‘˜™—¢§wA(    :bmX1,Hblmbmvu}‰“‡‚ngr•­°´¸¨”}‡ƒzlqrjolnop†™¤žŽ„|ƒ™žœ “–£ª­ ’‡‡Š…ltœŸœ‰R$:LNMJKRQN@>F=4,*//5048241+(-/)& $,! %%*"!! &)(2,/43/%!!  -  -*+*('%" #8GJVXVVRIAGLLTYk…‰mH0&"#)'#4]olgV=)/.((,>R_O=/+&,"  - - 8WdaL4!6HKLA5"&8IOE@,&OgbK5+!;L`\U_WST\g_?(   -  -* 8DLSD0()#!+2)*/-'.5,%&&)2<6>4348/'/:9<:;:>7617<;BB;" !5;5./3<4CK>9*03;:;5+%7HI@DFFKIIODECM^ZOKW^c_gfafkfWR]d__dddc\^UU]E4:<90*&   - g¥¸º¾º¼¯²‘fliv‘’nmu‡‘±ÇÌÛÌ¥ºÓÇ ˆ•¨ª§ÍÖØÛÞÞÖÔÖÓÐÐÍÐϼœŒ_D:831ATƒ˜š”“‡t{ž®­±¶¸£‰fQKSbclir‰­Ç×ÔÈÇÑÍÒ˧¨ÉÇÇÇÉÊÍÕØãßÝÌÂÑÛØÈ®¦™—›ž”†—§Ÿ§¦©¼¶¢ ™›§¨¦œ¥ÂÀ¸½ÇÊÔÜÝâæåæåäãâæïöúûüüüýýýýþþýýþüýýþýüøóñíïðó÷ùùúúüüþýýýýýúùùùúüúùúù÷õöøøøõöúùøù÷øùöððõ÷ùùøö÷÷ùùøùø÷÷ùø÷øúùúúùúûúùûüüýýþýýüüúùöôõòðîñ÷üýþÿÿÿþþÿÿþþýþýþýþüüúóíéäáçâëñóôòóóðìéêòùûùóçàìó÷ñßÊÏæÛÑÉÁ»¯ «·Çàõüûøùüýþýþþýüýûýýûøöõôõúú÷îâ×ÖÖÖÕÓÒÖÓÓÍÖØн¬­¡ˆk€Ž” ykddfcn|‰Ž¦ÇÔØÚÝÝÞÞÞÞÝàÚм¤šuHn£¶·šP  4LX_Xif]LWPFK^jgl}…ƒgB7)!3@:57439*4Xa|„‰•› ¦¬±´´¸½½µ©¨§žœ¨µ»À»»¸¿¼¤@  - B_heUX[LNF?31>BE6$/:93('"%' -  *((+%#/76:>?;68852))3F]aU=*  H:3!#1?<4&*-8<6'7DC3 $@PUJD:86BD;" -  - -  -  -    "9JTV>2&"#$+20142-*5'&#(21=?JH@8<931574(*-69>8762658:25=F@& *6;4013?04<=921-4?;7/ &7HE@?HBGRRTMDBV`STGUa\gidjchkYPYbdiga`b__[TNF86<71,#    (t©»Àúº±µ”kkjv‘ŽrurŽ³ÇËÚÊ”¨ËÇšƒž®«ÀÐØÚÞÜØÕÓÓÒÐÐÎͼ¡“Œ‘q?501BDZƒ”¢ž“‚oŽ©®¯µ¹Ÿ‰r[QW]_ipy‰­ÁËÏÊÅÏÊ̾”–ÂÀ¿ÆÄ¿ÄÎØàáÜÑÃÌÙÛ͸¬›Œ“££œœ¤£¦£ª±ŸŽŸ§ “Š‹±ººÂÈÊÓ×Ùáãàâãåäêñöùúûýýýüýüþþýþþþýýýüû÷ðîïððò÷øøúûûüüüüýüûùø÷øø÷ùùùøùø÷ö÷øõô÷øúúù÷õ÷õññõøøùø÷øùúúúø÷öøù÷õ÷øùùøøøùøùùøúüýýþýýüüûùøøöòïïîóùüþÿþýýþþþÿþþÿÿüüýûú÷òíäÚÝÞèîðóòóôòïìíñ÷ù÷ïåâìóöïÙÄÐÞØÎýº­ª«¸Òêùúûùúüüýýýüýûüúûúõðóñóøüü÷ðæÛÕÓÓÓÌÉÉÍÏÍÍÆÁ³ª­™xv„Ž›¦’koqpau‹Ž˜ÀÏÕÚÜÞÝÞßÛÜÛÚÓ¾®©‚Lc—µ¸ŸV  -5HR^`]a]SWEGVadqt„€oJ4&46--5((+"5Tgx€Œ‘¡«®±·º»º»»±§¡¨›ž±´ÀÀ¹¹·¿¼§J @TdhYXVRJJ?:?EBIY\SEBOVdnji`YY\moT2."#$*36;>Rx™³ÄÇÄ¿¹´²¢–†……„‘‘‘˜››™™œœ¡£§¦x?*    "9ere<$#9\wuimtww|ŒŒ‡~hn„ž«²¸°Ÿƒ…‰‹ƒnofiekmkhx‰‹‹„mmzŒ‘Ž”›’¡©­ ‘‹Ž‹}s‘šŸžŒtG(BRVWY_[NOUIC:) )%$*7:84919:70.&&(430/0<7::68AETB=520560")+-*  -3+1)   $'$ )&$+,'' ! " "-/(& .0)#&-&$)))" .7;0-**%*+#  -   - -     -9GOO=-!% $.+--173),,/",.3=DF<36833:8**%-4:?553477=746>C= +0;517<>5:77A8,/5@:=6'!9HD>GDAEUPQCGLN[YPUVdfbhhjfgh^USaheb`]_d`\WJD<9==,*# &  -$p«½ÂÄ»¶°¸’n_n€–“„xqˆ‘‹®ÄÊÒ¿†šÇÇ¢{‘©±ªÉÚÛàßØØÕÔÓÔÑÒʼ¥“ƒ…}H827OMf—Žœ¤˜‰pw¡®¬µ±–Šl[PX^efou‡®¿ÆÇËÍÐÈÉ°…‹»¿¾ÃÆÀÁÇÔÛßßØÄÅÕÛÑÁ´ ““ ¢ž“Œ’Ÿ ¤œ¦µ¢‘˜¨¤™‘³¼¼ÃÆËÐÓÚàáÛÝàäéñöùúûüýýýýüþýþþþýþþþýûöñïðññôö÷ùûûüýýýüýüûøù÷õööù÷ùøùöøôòôöóõùùûüùùùøõññõøøøùüûüûýûùøø÷öõöóõ÷÷÷ø÷øùùö÷øùûüýþýüüþúúùùöòðîîôøûýþÿþÿÿÿÿÿþþÿýþþýüùøòç×ÖÔáèêîóõõóðïîðõôñíäÞëöôëÜÂÑÚÐÆ¿¼±­®¯¿Ùñûüüúüûúüüýüüûüûüöéêïïòùüü÷òíã×ÓÔÔÉÁ¿ÈÊÈÀµ¬¦«ª•‹“¡¦‘zmssyt‡ˆªÍÕØÝáàÝÜÜÚÛÙÖÇ«”¢¿ŽNd–¯·›P       (?L\X^c_cUIDFWov}hP4$(83/25-'$.Pgu}‚“ž¢¦©®¸ºº½¼º²©¦ª «µ»¾¹»¿¾À»©Q1MaaV[ZYOE;CE@@PZSH?D[aimhhY[S_rhU? $'!#*74.9Wƒœ³ÂÂÁ¸»½²£•ˆ†€ˆ‘” œ•¡¦®«¢‚U4     - -1]pi?!!6Zorplqpw„…wZe€›¨®´°¤ˆ„‹‰rckkehnlnsŠ“ƒyzŠ‹…s…›¨®¤”“„yŒ¤¤™xD 'FSOA9:2-29>;&(223"  10,$%!"(  *!#"!!"! " - - -   -        #9IUJ=-&&$...(.511'*)%&3136! - -'4=<26<:.27;.10.;=><4&0D\][d[WVI?>XpymO9+  &200/?, (;B6<=>8.153*+=68?P?39ILGQMMCJ?=31:>?2-+1/-!!$ 4,%!!    2            -  -   6JSP<-! ""-)*/--+,-.+%'37:DJG:434872:6+)+02687<9858;5>;:7 -*3<:6<966<9.#+AQMGJHDGPRICEAGLLJMSdgdc`hfnhb[Y_dc`[[Y[_]]VC=50) - -%v´ÃËÍý·¸qhjy˜Œo‚|Š†œ§²»²‡„µÃ¤|‘¦®¦½ÔÚßÝÙÕÖÔÔÔÑÎÁ´§ŒqmdXKRV^¦{‹™š–‹‹«±® €dVOHaihns‹¬½ÉÍÇÊƽ¸™vtž¼¼ÃÀÂÃËÎÙÞàÜϾÇÕ×Ï°œ˜ ‰{‰˜› ©§¡¬©¢¥®¶¾½¶»¾ÅÎÕ×ÚÙÕÔÒÜëöúüüüüûýýýýýþýþþþþýüúôïîðóòöøùûüýýüüüúøùúúùôõöõõõô÷øùùúûù÷÷ùúüýÿþþþýýþþúùüüþþþþýþþþýýüûûûûûýûûúúøøøö÷ôõ÷øùúúúüýýþýýýýüúø÷õòïîò÷üÿÿþÿÿýýþþýýýüûüüû÷êßÔÊÑÜãìñôóñïííóóîéãàïöîàÌÆÊÂƽº´«¥«¼Õíûýüýþýú÷÷ùûüûüüûöáÔÕâèîôö÷ù÷÷îåÞÛ×ÌËÖÎƱ«²°®¯Ž}‚„Œ•˜Š|ruo‚wfv±ÖçæççêæççãÛÛÔƦ‡˜ÁËŸ\e™®¯•O  - -4D\Zb`a[XMGBYisdI3,!/14.18(#*Chow†“™¥®±¶µ·¶²±­ª§§¥™œ®´¼½½¿ÂÅÄÀ·‰4  C[aX[a\WH=?BJTVVSNScqqodTPYSRVWaZF3/7.,."()Dk‰ž¨³º¾½½À¼µ¤—ŠŠ‰ˆŽ–š™¢¡¤¦ª ™K- - -   -  --[toS7 &Ijrrgpwus‹‚ƒsmj‰¥ª¯¯¬š„}ˆ‹znnlofjili‚““—–‰ƒ„„ly“š¤ª§Ž“•‡}†•Ÿª¤ˆ[,%EFC;<97:<4./1$-CHA=64:>2*-0591599=8456=:A>>?<78340/, -  % !))&       - -  -  - -  - -  - - -  -  -   -   -   -     -     -"3LTL:.(# '//02-+-(,'$)159>B8554@82*1==:C9,.APICCIEIJMHK>AVURLJV`fcciagdhd]\`dXY^cVWXXQIG>=>=.'#    -  6Œ´ÃÍËƾ´µ‘rkjw—™u€x…‘Š—¦·ÆÉ¢}¢Â¶¦’‰{‹¤²©²ÏÖ×ÖÖÕ×ØÓÕÔÐÁ±{h]YZX`n—{n”Ÿ›ž“s‚¥¬šŽ~n^QOYchmv‡©¼ÄËÍÏƾ²ŠwqŒ²¸À¾½·ÅÙåÞàßÜÑ¿ÈÔÖÏÀ¯¢’Žœž–ˆ‚Œ”•¡µ»¾¨š­º¶¼¿»ÃÁÃËÊÊÉÌÕÔÞîùüûüýýýýýüýþýýþþýýû÷òðññôö÷øùûýþýýûûøøù÷øùø÷øõóôóóøùüüýüýþþþþþþýüüýþüüýù÷õøüûûûüûýüýýþýþþþýÿþýýûüúùøôóõöôóõøùúùøùùûüýþýýüûøøøôóïôùýýýþÿÿÿýþÿýþüúùøøóíâÑÄÃÏßèíñðîìñøù÷ìßßîôéÙÆÌȽ¶¶²ª¤¥²Åéûþýýÿÿüúùúüüùøøùúñ×ÁÅÚæêðøûùôìäÙÕÒÍÅÉÈ·«¨¦¤¡ Šsr€’”‡ru}„uk_gšÏâìïîëìîîêèÞÖÓÀ”d­ÃQY”­°Ÿc( -4?IQUe^Z\QGLRbXD+!%-112674#!U]\fpg\NLQQNMNOSZlS6&05/&'*)Tx‰•¤¯º¼¿À¿´¨“Œ‘‹ƒŠ–žžœ™š¢Ÿ•wF$  - - - - !Ibh_D+&!!6D_hiikuyp‚}soge{“™£ª§œ‰}~xqojlcmilowŒ¡š”ˆ‰…Ž”’™—šž ¦®¥”™ˆ‹…„ž¡œ”rB0#.BM]cdhlj]b_TWOQ[K?AA@@J?G87<<7<3$"&>>@BCHJPPVV`X_a^TQODDBA>=9D@:2-.#   ! # **'% - - -  -    - -  - -   -  -    -    -  -   -    -   -  - -  -     &?=68>74<;<259:>5:2 *7<626;475>D?500=ACA;).=9>@5,,( !%)*#  -   - - - -  - - -   - - - - - -  - - - - - - -  - - -  - -  -   - -   - - -     - - - -  -   -  &CRTI5*'#  )+2,.*&(/'')&,14>DC?:8:<588-.).825209AB73=877@3 &;B636?73<=GA560;;?A5*6>GD@GFIEHMI@>ENWQKLYd_cahgdkje]b`gg_]Ya^\[LJC87<92)  -  - 0‡¸ÇÍËÉÁ¶·Žohm”–}‚z‰‰{•®ÂÓÙ¼„Ž³´­­™†|‰·­¥ÃÐ××ÖÚ×ÖÙÙØÓ¾¦‹‚tcklqŒœ‘ytnvŒ ™{„¥¤ˆuf]POYkmrr~ª¾ÊÎËȾ¾³Œrl|¨¼ºÅ¿¸ÀÑáäÜáßÝÊÄÒÜÛɺ±š‘‘ˆƒˆ‘‘¦­ÀÆ®¤¦²¸ÄÃÁÃÆËÉÇÈËÏÌÞôúüýüýýýýýýýýþüþýüúõðïðóôöøúúúüüüû÷ø÷öõõøõö÷øøõõòõ÷ûþýþýýþýýýýüûûùùùøùúùùù÷øûûûúùúûûüúúûùûûûûüüþþýýþýüúøôøùøøøùçäø÷ùøøøüýýýýüüùùøóòðóùýýÿþÿÿþþþýýüûûùõîãÙÑËÂËÕäëîìîòøúúôçáííáÏÌÅÁû²¬§¡­ÁÚõÿýþþÿþýúùüúöóô÷ùúðÑ»ÅØáçîï÷õòëÞØÏÐÑ̺›šœ¡¦­® }uŠ‘˜—Ž‹~w|nlaag¡ÌÜâèçäåæèëèÞÝ×Æ›gg†•vBX”¨³«a# - -+8EK]_TU\MQWB6*!%-,"*5.'(.Ndn…ŽŸ¤¥¥«Ÿž©¬¬°¸­¨—ž­¶»¾Á½¿··¹À»¼µ‡%  - 1FY]^_W`ZQLPQHT\ipa_SGDXSCJHDSTd[XB;007823AlŒ‘›¤®ºº½¾Â¹³¤•‹‹Š‘‹†ˆ‹‘——–Ÿ •†cE,  -    8geaH4;;46)'    '&# $%#     - - - - - -     - - - - - - -  -  -    -  - -         -  -  <<18<93:BG>895=:@87)1GCA?7)*"  -3‰µÂÊËȹ·Žnmgw›šy~y‰Š€˜¶ÍÙÝƇª¯µ¯¥š‚‚‘¨¸ª¬È×ÔØØØÕÚàäßÍ® }lgn‚š””‡w}~„š¢˜›ˆ{–‡tf\SI`slv~„¢½ÍÒÌÄ»¾­my ¾¾¿¿´ÁÊÛãÞÜàÝÓÄÍÜÜÐÁ¶¥‰”‡‚Ž›¢©¯Áɱ¤£®·ÇÈÂÅÆËÊÉÉÍÑËçùüýþýþýþýýýýþýýýÿüõñíñóõõøøúüüüüü÷ø÷ööõõöòôøøøúúûûüüþþýýýüüûûùûùúúüüüûüýýûùùüýýýüüüþýýýüûüúûúùùûýýýþþþþýüýüúùùùùöùöö÷ö÷úüüýüüûûúø÷ôòðñúýþþÿÿþÿÿþþýüüûùóíçÜÖÓÆÑÝèììïòøûû÷èçñíÞÍÊËľº¶©¥¥µÍçúþýýþÿþýüûúúöðó÷ùúêÈ»ÁÔáæêïóóñëßÔÔÍÑÈ´–Ž¡ ¢­©”z„Ž —‹ƒ|„‚vlcdem¥ÏßåæáããææçåÝÙÔ¼aa_r_;Yš®³¨u'  - ''2>NWUY\OJPM:+!0-0/'"-*"$)?fq|Œ˜¡¢£¡ Ÿ¢©²¯±®¬¥šœ«®¶¸À½½¼¯©¯­®ª”b  -,>NXY]d`\LHIJTdnn\@HHXNNFEEOWZdfbI60191:7UzŠ’©¯µ¹¹½¼µ®¨™‘‰ŒŽ’Œ†‰‡’’•–ŠƒpI(  -  - ;btgP:>:<.+/"=RXZ``]Z_etzutnec`fXHO\M@FCEHC>8+)   #,+%!(   - - -  - - - - -  - - - -   - - -  - - - -  - -   - 2  -     - -   - %:LTG1%&$ %")++14+#'-!*1-5<;:@>677,/7861$..4A339=;;429?>G; -76867<<77DEC9>?64,$     - 4±¿ÅÇÇÄ»¶qqkp“–~€x‰Œ€œ·ÐßáÒ–‚±¶¯­­¢†pƒ“­´§·ÏÕØØÚÙÝááàÔ¶‹wjdt‹—‡‹‡‚}}’¦¡šqs‰vmVTWfv|y}Œž¼ÎÔË¿½½¨‰it™·¹¿¾³ºÆÒààÚÞÝÙÈÇÙÝ×Ƹ­–‰ˆ‹†u…Ÿ¨ª§±Ã´¦¤¢®ÅÉÄÊÇÍÎÉËÐÐÔïûýýýýýýýýýþþþýýýüöðîòôóøøúûüýüûüûùøö÷ôòóô÷÷øúüûýýþýýýýýüûúùùùûûýýýýýüüýýýûøùûüýýüýýýüýþüýüüüûùùúúûüüþýþýþýýýúûúöôöôöõõ÷úüýüýýüýýûùöõòðñøüýýÿþþþþýýþýûúùôìæÞÜÒÎÞçêëîñøýüùììóëÝÎÎÎÅÀ··ª¦¬¾Ðíüýýýþþÿýüûøù÷ôò÷ùùëƹÀÏàãéíôññîáÙ×ÒÍÊ«‹‰š§Ÿ§ž‚mš¡‘~…‚‰‹~kemus¤ÕáéçæáåççåàÝÖǸŽeB@R_D]™±¹®q-  4DHT]NSOUHK*.!,;522++(",;VpŒ““˜ŸŸ£ž—™›¨¯±°°«¤¢¡®µ¶¸¼¼º¾²¥¥¬­°’P&  *ELMNMb^XLKV_oj\G@AOUMMGUVTf`cliKA<.9/:Ce}‹”¢«µµ¶º»¶¸²ª–‡‹‰Š‡ˆ‹‹—˜Ž„„ˆŒyR%     -=cmhI=6;;=Qmstnk‚“‡vleYMK^t“¢©¯¥ Žy„‰‡roiig`_]_ƒ—ššš™‰Œ–˜˜›•–™ª­®§•Ž|‚xš™‚_2! 5Qhhglfiqlj_dcb[LSHHMHGED=LA@EBC7>. -   - #&%$ -  -    -  -  -   - -      -   -  - - -    -  )?KKE/))!$$.))-.+&-%#%0-49@=:63:>76344-&11679549==96=C?A3 ,2=65?;:4:GF:889=>@B7'1?CB=EIGANUHFCFMTSRNZ^`c^_`ach`]ehc\_W\^__YLF=>=:/3&$ -"  34Œµ½ÆÅÆÄ»¶mlku™–ƒ{ƒ„Ÿ¹ÓâåÕ †·Æ¸«®­~{Ž—±°ªÆÕØÚØØßââáÖÁž{km‡™Ž€†‚|twš¥š•|j€Œ}eXS[q„|€Œ§ÀÑ×ÎÁ¼´¡xpm—·º¼¿·»ÄÏÜáÚààÚÒÊ×Û×˾²œˆŠŠˆ~uœ¤§Ÿ¤¾¯§¢¯¶ÈÊÆÉËÊËÌÑÍÎá÷üýüüýýýýýþýüýýüûùòïïóôôøúüûüüûøúûùõóôöóòó÷ùúüüýýþýýýüûúúøúüûûûýüýüþýýýüüûùóòõöùùùùúûûýüüýýüüüüûýúûúúüýýþþþýýýüú÷öõôöøõöùûûûüüýýýüúøö÷òðóùüýþþÿþýþýýþýüûúóìåáÞÙàäèéìñúûýúððóçØ×ÚÎƼ¸·©£«ÄÝôýýýþþÿþýüûøüüûùùúùé˼¿ÒàåæîòòïîßÖÓÕÒʧ‡•¤­©–|zŒ•™™‡‚Œzkfv‚|¦ÖäéçæåæççâÜÜʸ¬‰hCAijE`‘±º°t/ -  1CRW[XM\ZI;!!"&.1-...+!"4XszŽ’šŸ¢¦¥“š¡­µ°­®¨¤¡¬´¸¶µ¹¾¼¾À°£­°±:  (>MGIMgVFKNUijVMG5EOLNV\eeZdd`aii`\`__V\ZXX_WZNHAM9B:/)    - - 2¸¿ÁÆÄÁº·Žkjgy˜“x„…‘‹¢º×âáÙ¤ƒµÏDzª¬¨Š~…¤·­´ÍØÚÙÙÛááàÝ̨‘wx” ~‡Š€yrt¢šl{}miOZn~ƒ…‹¡¿ÐÖÑľµš€rpzŽ¯´½ÆÇÅÇÊÙãÞÞâÛÔÉÐÛÙÓų¥Ž~ƒ‚ƒ~u‘¢ Ÿ¯«Ÿ›¬¸ÉÌÅÆÊÍÌÌÏÇÔíøûýýýýþþýýýýýýýýúóðïóôôöúüüýüû÷÷øù÷ôôôóóóõøøüýþÿþþýýýûùúûûüüûûüüüüúûûø÷ôóòíççéççééîðñòöùûûüûûýþýþþûûùùüýýþþþþþýûùùöøöõ÷øùøùûüýüýþûüúø÷ôóòõúüþÿþýýýüþþýüüûøñëååæãæçèëñùüýü÷õñæØßÞÐǽ·³¨«ºÉãöþþþÿÿÿþþýüûýüüúùúùçÌÂÃÔÞâæíðððíàÕÕ×ÑÊ­Œ”§±¥‡h|Ž”˜‹ˆz‡‰shfƒ‹‡­ÐâèéçééèèáÝÕ¾ª£€\FLpm?\•´½¯u*  , 1:B@V[QNRP]dk_HD:EMIN@LS^_gkqrqjibK=GE@[~‘š ª¬²¸´µ¹¸µº¯—‹ŠŒ‘Œˆqpsˆ“•“{i@* - -   =mtvP*1RigpluŠŠxlh_VUQk‡¢§«§©‹p{€lc_]^]_``fz”  ž’yp…”‘ œ”¥ª¥•‰†‰€lƒ“¡£—r:##Fablnvpsda\abgWOKPTJFGG>>>=8:5081-$;Vd]bbfh]egce[a]^YYSVZ_OFOVSVNIDD:#   &%%#!!"# ",+.5741  - "&"$(,,9AE=1,,0'"" !'3/(   $*15( - -  -   -   - -  -  -(    &EHNC4#  '+*2-*.F8+$*0457<=AD=4(2AGHHBFC@OJI>E;JSNKS]cgbc[Ybfie[_ad^ZXTRXSSNL<;>;5/#"  "  <™¹¿ÂÃÇŹ·‹lko{˜™v}‡…¹ÔÞÚÒŸ€°ÒÖÁ­¬°›‹‡“©·¯¼ÕÛÚØÛÜÞâáÖ¶™‹~‰ œƒ{Š‹{tv˜ž–‘yo‡ƒi`KTn{‚„Œ ½ÍÙÌ»®’|rx¬µ¼ÃÎÌÉÇ×åäÞâÜÚÊÉÖÚÖʶ¦Ž{ƒ„zuˆ šœ©«£›ž«ÆÊÅÂÂÈÇËËÊÙíùúûýþþþþüýþþýýüûöðñòõôöùûüüüûù÷öøøõõôóññóøúüþÿþþþüüúûüüüýüþüûúúø÷õòïîëéééäàáâßÞàâàâäæççêíîðôöùüýýýýþüúüüûúüþýþýþüø÷õöóõøøùùùûúûüþýýûûùööòóóùýþþüýþýýýüüüûúóëåååççæèêñûüýýùõêßÙæàÖÊ»·®¦¬ÀÓéøýüþþÿÿÿþþýýþýüûùú÷åÇ¿ÁÐÛÝãêíïðìã×ÙÙÖÊ©Š˜¨ª“so““Œƒƒ}l^g“žŽ¤ÆÙáãååæçäßÚį¢Ÿ~SES~rGU­¿·~3  .;HXh[`TF.%(0&1((/"A`~šŸ¦©«¨£œ¤©®¨­®¤ žŸ¬¯¸Å½¹Á¼¸¾»´¢¡¬³³±šO8C;@RSSZ^]dkbMDA>CQAH;TeifsvwzxzvhZCKCKd€˜¢ ©¬³¹·¼½¸¼µ©”‹ˆŽ”‘‰Œƒshu|„ŽƒyqZ<*  -  =iorX/'D[kgej{„zzxqlf`cŸ¨¤¦¢’xk~†oc_\^V`Y`hsŽ—™™”„y‚’•“••”™¢¡•Œˆ„€yr†’š–€R/$.CTcklprppkabga_YZ\YUQJFDEE;8=7<9..#>LTRMGD=2,(& $&*/- (=DIFMNB6 -  -  - -  NC - '8FLB,!!0,*++)0%,'$%$356??:95471,:87502*/4+-4;A@><57B>3 0<;374:96@CF>829HEDB4%>BK\VJH_ffeb^ZcjjeY_c[a\XUUW`UGI@=7:7-'$ !  - @¿¿ÅÉÆÇ»´‰woj~™™{}ŽŠ‡œ¸Ï×ÓÌž{®ÒÚÒ½³µª™‡„†Ž¬µ­ÉÜÛÙÝÜáããÚ¿§„žµ©¡’ƒ{ˆ‘xow… –”Œo{‰oXIRr€†Š™¥»ÊÖʽ¶¥Œˆywzˆ«¹¾ÀÅÂÇÁÏâçââàßÐÄÌÑÕÊîy…Š€y{’˜”—œ©¨£©¯ÄÍÇÂÁÄÊÌÆÅÒéøüýýûýüýþÿýþüýùõòòôõ÷÷øùüûüúùöøõøøõõóñïôøüþýýýþûúûüûüüýýûûùôððïíéêëìíìíîñíëîìïõööõôñëææââáâåäéîòøûûûüýýüüúùùûüþþþýüùøöõ÷öøùùøùûûûüýüüûùù÷ñðòúüýþýýýüýüüüüùòëéææéëìêìòúüýþùòçÜäìÝÕÄ»­¬¦±ÄÚí÷üûýþÿÿÿÿþýûúûüüùùõâ¸ÂÈÔÝÞâéìíèß××ÖØϪ†‹™ª {j€—’ˆ‚…‰“ƒh]€£¥”¡ÂÓÚÙÚÜàÝÛÜÒ±Ÿ£®‘`M`vEM´À»0  -)P`\K0 - !+4:>?HRMGID<-(')"!''"  ,54,.KLSUTQL=% -    - - -  -  -  #>KH<.) "),'+*213-' $(197:GI2/143/2:71,0452-+47A<9<580<6 -->;:65:8=BKE7;59CEHC3"2;LJ@A@DMGEHA?BKY\GI``fa`ddbrq^[W_\]WZYRXYPTM@D4/50$  $G?  ?žº¾ÈÆÆĺµqngy˜›Š~‹‘†žµÏÕÒΡ~ªÔÛ×͹²³¬š†~‡œ³³¸ÕÚÚÝàâäâ׿¨œ•­»¬§Ÿ‰z…|pvƒ›œ’‘{j…}bOQt†‹’’ ºËÍȽ®¦‰~tvr„°¼¼ÂÁ»À¼ÈàèæàâÝÖÅÆÊÐ˶¦µzƒ†‡€}€›–•œ¦¨¦¯µÄÌÅÆÅÈÐÎÊÌÏäöüüüýþþýýýýþýùôðñöôöùùúüüûúöõöôô÷ôñòõõøúýþþþüüüûûüýüüþûûúöñìêèéìð÷ûûüýýýûùõôñõüþýýüýùø÷ôñðîëåâãèìðôøýþýüüýûùùûüüýþþüüúùøùùùøøùùùýýþýýüúúù÷ôòôûüýüüýýýûüüû÷ðçèææéëìììôùüþýüñâÛëìàÔɺ®«°µÇÞðøüüþÿÿÿÿÿþûø÷ûýûøùõâÅÀÃÅÓÚÚáëìíéß×ØØ×Ì­Œ¡«Œn{ˆ•¤š€‚–‰w^X‹²°Ÿ«ÎÞââÚÚÙ××ÕÆ¡˜¹½šcRa‡€HOŽ¯Åº‰< .?GTcoN8)/3)-,"  #Ns•Ÿ¬®¨¦ ž§¬ª­£œšž¢¯³¾¿¸½¿À¹±¸»¿¿®¢­§¥©®¥h - /JUHE[]fopiVNIB@FJEMZWks{|„ƒ‰ˆ†rkd[LT‚—™ž¥²°«¯¼¾ÄÀ©•Š††’–ˆwpfuƒŒoh]NETTT9%"   ,Rhi[59M^on[d€kinki\Ul” ¨§¢¢‰rrwpjce[Y^djjp‚‡•“ƒm~’“‘Ž—Ÿ¥¦“‰‚Š…€’šš›’d3""=T`kfirmceklgacbgaVXTLKEJC>@A>@@:6/:Rdiakkktusrjkfdgjbfh`\aebc_R[WI:C=* %$%'**).51)).,("%03-+:R^\P9  -$5;BEGKKDA@=*%'!!$''#! %!,8BHA8+  - -  - !  -     -  *?G?9,!"$1"!&*(11*#'*(084;7559220CNRFA4;GJDA:/1BG>=E=KJPPGHAEEMULT_fcbeifiijb^Z[`\SYRVTVNOJ>>102*$  #F  D¥½¿ÄÇÇźºleit’–Šy‹†ž¯ÌÒÐË©Œ°ÙâÞÛѽ·³¨Žƒ†¥·®Â×ÙÞäãâÜÙË«™¦·º´©©˜ƒ|…‡‡}x~‹ž–wxƒiZ]u„‹‘·ÃÂÀ¸¬‚}‚uxŒ¨µ¸ÃÁÁ¸ºÃÞèçáÞßÚÆÄÉÊÍĬ™|}ŠŠƒo•—“¢¬¯¨­«¸¼¼ÄÂÈÍÎÌÉÍÛôúüýþþýýýýûüû÷òñööö÷úüýüüû÷õôôòôô÷ö÷ùüþþýþüýüüûüýýýüüüùôðîêêìñ÷üþÿÿþÿþþÿþüøôôøûýþÿÿþþüüüýýýüúöíëèæêíòøüýþüýýüùùùýýþþþýûú÷øøøõ÷÷÷ùûüüüüüûùøõôò÷úûüüüýýüüüúöïåââäçìëîîôüûþýúñáÛëéÝÑÈ»¯ª­´ÍæóùûüÿÿþþÿÿþûõùüýúùùïáÄÀÅÂÍÔÔâëîðêÝØØÙ×̪•©žŠy‚ˆ• Ž†…‹–qab–µ»©»àìîìäÜÔÍÌȬ‰©Ä·˜`Fe‡xMM†³Å½‘= %0EIUkV7(+&+)"#$  OyŒž©­­¬£ž¢¨¦¨£¢š­±¸¿»½»¿º´±°·¾¼½¬¥¦ ¡®®«n'   4JIRY]chjf`EKMIPSIBOY`v‚…ƒ‚‡Œ‡ˆ‰}ttgZe’› ¦­¯µ¶¶»º°¡ŽŠ‹–“~mgq†ˆ„slUC:HPZbF./  - - 7OgkY9)DelnafwznlorucZjŽ¢¥¬¨ Œlqt}pegfffhpos~—”“…u~”‹’‘£§¡”‹‡‡ƒ†™œž‘h:*$=W^aleaibagalce`__ZRSUDMFGB@E<=@8236Odgjofuxhlmknoilihid]]aaigXb^[HA@B1    @@ACD@EDDJ@;?<6-*&#(-&)7R^^[E%%6:BIIJLLB?2.(%%"#%''(')&/FQSNVRD8<:9>LI@:6:FKHD8(0IDE>IA1!!   gedcca_`^ac\ZTG0%"# &2G\bZJ+#!!1BEGEFEA=>>3*'+'""(&,9Gc|ƒxqf`S@=@BPVX[`XN=7Kgu~s]/!&$  -         2DED?:-'&%%)'##(*2+'"&289<>=33178.5><0+4,872')1671;;7:E0 "-8:56;:2CMM@:6=DPeplZ/#   - )Rlsg: $6Yksc`fopo}yuqb^‚—Ÿ©ª¨˜uj~‹~rljtumnldn–‘whsˆŽ”ŽŽ–¤¥—ŽŠˆŠ‹wt‰ŠŒa7!#8O^ahlmmihkchmkgd]\UNSJHJNMM?CGDDJF?AC<4(&(' &'6H_~“}lj_J@=KTSSU[][\r‰—ž ’tR4..-45-! - - - -    -    3@FG@7.,!((#!$"/*')5(!('08<8?5:=254:DC@FLD;;ECNOKSScgb]^^`ana][\^ZLTV_VHWWP@9198)&)    - HŸ¸¿ÁÈÆÁ»³…ffcq‘•||…‰­ÃÉÌÅ®Ÿ¼áëðïìæƵ³±¦’ƒ„“®ºµÆ×ÜÜàèîâ¿­ÃÉÆýÀ®›‰~„Œ‹{{uƒ–œ–”~zŠXr†‘™š¸ÈÏ˶§”zy€ty°·ÃÊÌËÁÇÒÖÖÔÔÛàÙÈÃÇÄÉŨ„”˜Œ†‡›–Ÿ§¥œŸ¶Á¿ÄÈÏÎÓÖÛáí÷ûûýýþýýþýúõòòôõ÷ùúüýýüûùóóòôòñòóõúüþþþüøøûýüýýûû÷ôñòõúþÿÿþþþþÿÿþÿÿÿÿÿÿþþýúðëéîôüþÿÿÿþýþþÿÿþÿÿþüüüýüöïìêëóøûüüüüúûýüýÿýýýüùùôôõóóôøüüýûüüûùøù÷ôöúüþýüýûýúùöîçåçíîïðñõüýýüòèàéåÙÐÎ郞»Ìäñ÷÷üþýýþýþÿþýùûýýúøõíÙÁÃƼÁÐ×äïö÷ïæÚÜÛÖÍ­¡Žuu†Ÿ£†ˆ…ˆ–Ž{tiYv´ÌͺÉïùùúôè̶´•aty‡–VGXŠ}HT–¼È¾‰8 *5H[P7$#!/+(((  R‹™¥¤£¨ª­§¦ž™—°¹º¹¼¾¾ÁÀ¶®µ¶²³º»¸±¨««³º»¾Á¶•> -BJUgqrjiKOICD=JFW_eggp€‹”’‹’•‘“ˆx{|hh„”— ¦¬³³°žˆ€ŒŒˆ„npƒ†€rbC?>>>50.*$.H\ejrooxqttrtuqgksspsigha]Yb_WGEHD2! yxuuyuwtqlife\L4&,.$%.DVYROIMJ4# %5@GF?FJD>A8-#$$ !%6_b•—”†ukfUD=FOQWT[`cu’¥¦¨¥žfE968896,  - -      -+BLK>830&#'/)&*7.&&'!$*2:799=685.*-:@5%$0336.3)&67896::<1/9986:502BOME86AOJED1$.HJC=;;@=HIE78AJLINRU^f_TTZ]flcY^ZV`ZWWY]XUIGB/46-( -$  - Bžµ¼À·°‡jh_m‘“y‚~ˆŽ£°ÄÊÌÆ« ÅäììíìèÕº³·³œ‹Œ¡º¸¸ÏÛßéðñèƹËÌÉÈÃÀ¶¢–~‚„ˆ‹|x{”ŸšŽ}{Œl{…‡‘—˜¶ÁÌIJ«˜rx|tv…³¶ÀÍÓÖÌÐÕ×ÒÉÍ×ÝÜÐÇËÆÅƸ°›……Ž–Š‰˜›œª´«µÅÊÃÉÍ××Öãêîñøøýýýþýþýüõðòòôôùúúûüüüüùôòñðîðñôùüýýüýúûûüüûýýùõôõøüÿÿÿþÿþýÿÿÿÿþÿÿþÿþÿÿþýúîèáâìýÿþþþÿÿýþþÿÿÿþýúüýýüýýûóïìíôúüûýûûûùüýýýýýüøöö÷óòóùûüüüýüüúúùùøóøûüýýüüüûùöñìéîïïððñøûýþûïâãéßÚÔ̼±«¯ÀÚíõ÷øüþþüýýýþþýùùùúùöôéÖÆ¿¿½ÃÎ×äòùøòäÚÙÙÙ˯¥¢‚p„Œ—ž˜Œƒ~‰”ˆryp]€¶ÏÓÃÉïøúùñÞÁ¾¼—gWZlˆ[HV„FZ˜Áɶ†>  ,CECEM??<7.*$%! )2>:3% - -  -  - -        -5FFE81340!&.2+%)+&%,(#!1<9:C;0.22*+6=<,+0.2211%+27:05;;0( 0=9;9::,0HPO;34BPFBF1%4KB<@96=>EG=98?LLNe^[Zf\ZO_^ck]VX]\V]ZZWV^KGE@;24++&    -    Fœ²¸¾Â¾¶²Žnb^o™–q€‡‘Ž¢­¾ÌÌÈ­¤Èæíêêêèáθ¶·©—Œ‹—­¾¶ÂÙèðñïæ˽ÈÌÉÉÇĸ¬—ŒŒ~‰Œwyƒš¢˜–‡y†…{ˆŒ‘‘• ¸ÃÌŵ­”jfvuu€š´¹ÁÎÒÓÙÔÓØÑÈÆÏÜßÙÉÊÈÊÉÁµŸŠ‚‰™”ŽŸŸ©¸´¼ÉÈÆÆÐÛÞÞíóñôùûüýýýýþüûôòòôöøøúûûüúùúøôóîîíðò÷üýýýüûùúýýýüúøôó÷ýÿÿÿþþÿÿýüüýýÿÿÿÿþÿÿÿþÿþþóëäæõýÿÿÿÿÿÿÿÿÿÿÿþýúùýþþþþÿÿþûõîìï÷úüýüúûûûüýþýûù÷õóòóöùùøûüûüüýûúúöò÷úûüýýüüúù÷ôññòïïðïðöûýýúïààåÝ×Ïƺª­»ÊåõúøùþÿþýüýýÿþýùöõõóòñåÐÃÄÀ»ÀÍØéõùúôç×ÖÜÜÊ´ª“~}Ž™¦¢’Š†‹Ž”€mv‰xŠ¼ÕÚÇÉêöùöçÎÃÑÊ eAFh’ŠaD[ƒ€MK“¼Æ·~6  8HW710)$,' /q‘—–®«žœ‘‘™¢®¸µ·¾ÃÆÆ»¶°³²¯¶¶¸¬««­¥¤­®£—•Ÿ±¦\ +>YhnlbYKMWJPNIWT_gakn}–¢–”šš™›š—‘’†r}sfv‘˜ž¢«°« ‰…‰†|pi}‰xeVN::BFMW_^^ckkK2# - - -  $Kgpy`. ;Xll^Wfcoo€ƒkQ`ˆ¤ª¨¬§kay|qd`joqnjcZgˆ•——ˆ^_vƒŒ•Š‹•£žœ{†Œˆwo†”——~Z<&)BU]\^]b\Zacjf^aa\WNNMMOS\apnfU- 4Zzxvyuspmmjswrt{zwwzohbc_cID1  -llpimjnm`ebdXUB)'.21.0=GEHNTXNC. !0AHDIJAB@;94*$)#" #(3>Oj‹•™’†wlbL=>GTWSR\bp”¡¨ª –~XDFBB=;98%   - -   - -    - -  =IH621=5,22,%*104;:7,* /44446633L\P77:3M{‰Ž‘rHGl}‡‹€r_uŽŽjsuue[l‚~uc@&!5EBORLOV]YW]WVTPEEFGOROU]n…–žŸ˜‰v]H?@?@<790   -   -  -  -  -    -   %9CA>3'-2+".01.(0+,+(*(&$)224>>8/,/007=:=*+/9=8112/0,.47:62' "*=<1+57=7KSD=>7;KLKD4,7IFE@D?>EAA<97DGHOFQ[_ac`c]^ae`]Z\]VZV_YQPQMK?83,)    @”°¸ÂÄÆÀ·²‡jigt–—‡‡~Š’Š ¶ÂÎÒÊ®¦ÑèêéêëííçÔ¼¹¸µ¨–‰›²º¼ÛîïéÛð¶ÇÈÊÏÑÇ·¬ž”‰~…†ww€•¤Ÿ–“ƒ‘¢˜—–• ´ÃĽ²©—|zpr|­´¹¼ÀÉÏÏÕÚÚËÅÒØÛÚÖÄÁËÍÍŲŸ€—˜–Ž‘¦¥¦¬¸¾ÅÉÃÅÑÝÞäñøùøùúýýüüýýúöôõõ÷ùùúüûúöôóóóðððïò÷ûýýýüûùûüüýûøôôùýÿÿÿþþÿÿÿÿýúïçê÷þÿÿÿÿÿÿýýüýýøðñûþþþÿÿþýýÿþÿþþýñâãîùýþÿÿÿÿÿÿÿþû÷óïöüýüüüúùûüýýûøøôññô÷øùùûüüüýùúùùøöøúüüüüûùúöõôðîèéíðöûüýöèâêæÜÔËÁ·¯¶ÆáöüúúýýýþþþþÿÿþüùøøùóïìÝÇ»Á¾¯±ÄÔçôùûöêÜÜÝÚÒ¾—‡“ž›Œ‡ƒ…Š~royš§ŽšÆÛÝÌÈåóïßÆÈÞåÚµo@>@;:==53545+!*4;A;4=D=>NUVQJ=* ##2=ACCFB==<70.,-*'$"*38N|•—’†wk^E9@EJNMSYg{Ž›Ÿ›‰u\E>><=8=:3& -   - - - - -  - - - -  -  -  -   $15=94'5;0#".163+(3($-)%%&-6=>A9.-121:999*-7=63-,/553377774% +8=7112:9JRK>D9AKHNJ5+@KJF><7>?CE=>?>MROEK[^]Xab_Yfha]YX[^SPX]TRLFH=53/+) - - "  -  - 9Œ°ºÁÃÈÁ¸´kfa~•“……’‰¡¹ÍÜßÙ¸¬ÐæçêíïðîèäÑ¿¹¹ºªŒƒ“¤»¶Àáëèض¥´ÁÊÌÐÔÍÀ³§šŒ‚„ŠzswŸª–‹€—Ÿ•”šœ¡µÂÀ¾²­œ……wqƒ‹«°¸¿ÂÈÊÌÕ×ØÎÁÐÔÙÞÜÔÁÆÌÊÄ·¬–x“››‰‰¦¢£©±½ÃʾÀÊÚÜæñùù÷ùüüüüýüúõôóôøøùúüüûøöòòôóóóô÷úüüýüüúùüüüüùõñöüÿÿÿÿÿþþÿÿÿÿþöêãêúþÿÿÿÿþÿýýýüüù÷ùþþÿÿÿÿþýþþþþþÿþóãâïûþþÿÿÿÿÿþÿÿÿÿúòíõüüüüüûûûýýýþûúöõõø÷÷÷ùúûûûýûùùøøõùúüûûüúùøøôñðééëîöüüûòááéáÛÕʺ®²¹ÏìûýûüýþþþþþþþþýýüùøùôïêÖĸ¼»¯±ÃÐæòùúöëÛÛÜÚÔ¹{™š¡“Šˆ‚ˆlms‹¤¦…”ÄÛÜǾáìáÍÅÞëëݹqF^€ž“jBOy~XD{ª»¸<  $)3+!")" !% -"QˆžªŸ”Š£³´·¸µ»Ã¸°¸¿ÁÁ¾¾¾§˜“Ÿ§¡žœ£Ÿ ƒbmhZu˜_# - - *Rh^ZRLJTSUUMUacimx€~~„‘˜ ¦ Ÿž ™‹wgb`d`oŠŒŒŽŽ‹†€rƒ’‡lWI@?CM]fgeg`Za[bluxmF2   - !   &$#&    %   -   -7;8;934430015.*'.79=;9>?AEMXWWM>83("/;>CIHI@:3200,'*)!!#.5HuŒ“›”ˆvrgM;>FIKQWZauŠ–š˜Œu[FC<=9>>?5* - -      .BQWU4  $(& "  -    -  -  -  !2B<73*,6,"!&/7.*(0+&,,),(*27=C?:4./4.18A=319438972=98797633$ - 1<385103@HYP;=9CHDC@4*7KJ>==;;@A?;z§½»š@ #%*)"-"&  -#Yš›‹¤¯¶¶¸µÁÀ¸²¹½¿Ä¿Ã½µ›¤ ¡Ÿ ¦œ}eh^]jƒ`**HXR@JQSWPKRSaahcnx†y‹•™¤¤©¢¤¤Ÿ”†xdbcefgxy€Œ‘“‚{k~•Ž{lS=9@H[_hhceZ`fednt~†{Z5!  -   #  -       -           - -  /MO= -    67:51156312+/*#"")-/<=;76@EES__ZPKJOD5$ -9=DJLJG=682/)+--# #/4Gg„’’‹‚tdO@>AGMNU[ai‚•š“‹xgRDCF?<@?<1 -    6Zx…wL $/EMOJB.'782- %     - -     & !9I<81*373&"',305+0-.(,*#.4:@?A;-*-5/3:@9/+24516@@><41<>1'."-9:213978MWF>;6:CHJ?2-9GHD<>>=FJB<>>@EAFEEQfcg`]Z^fd[Z_VWTJS_YNHRKE<50*  <‹®·½ÆÆǽ³‡jc`n‹‹„†‚Œ‹¨¿ÝèèäÆ­Ëåèíîíìíò÷øòâȾÀ§…‡–°¼¹ÓäÚº¡¡³»ÃÐØÔÇÀ·©’†ˆˆ‰yz~¡¢˜ŸŽ…˜ž“˜™¡¹Â¿³©¤•Š‹…wt‰§²¼À½ÉÙÒÓÙÉÈÄÊÙÐØÜÞÓÂÃËÏÀ°¨x‚’•‹Žœœ›¥©»ºÆÁ¿ÉÒÝéôùøøøùùüüûøóðóõ÷ùùüüùùöðñðððóô÷øûüüüüùúüüüúöïðøþÿÿÿþþÿÿÿÿþþþþÿÿþùñøýþÿþþÿÿþþÿÿÿþþþÿÿþÿÿþþÿþÿÿÿÿþû÷üÿþÿÿÿþþÿÿÿÿÿþþÿÿþøïïõûüüýüüüüüþýûúùøøöóòõ÷øúüüüüúùùøø÷úúûúùù÷÷öôòîêéíóùúõáÛéâÚÓÊÀ¹®¼ÊâøüüüüüþþÿþþþýüþýüûûúòîèÚȽ¼¸©¥»Ìáòùú÷èÛØÙÙÈž|—— —Œ‰Ž‘…ukn†¨¸¥ˆžÉÜÛÄ®ÂǵºÝííçÔ«mHj‘¨•bEJq„XHu¨¾º•F  -!.'!"$,' -"[•†ŒŸ¯µ´³´¾Å¹´½¾½ÆÆÀƶ™‰– ”š˜›žŸs]\\`Wtp41DGC=FV\[STPVjdizo†…‡ˆŽ—œ§¥¤¨£œ ¡—ƒvk`ihfdm~†Š‘‰ˆxx{‰}]L@>=M]egkcVb`groi|‘“œaB&  -     - -   -  -     -    - -   - - -   - -    - - -   -  - -  -     - -?  -  -  - 695447321,6&+' "$)-3=?;5=HDGP_a[XPUa[E$(1@CEJID>7:86&+)%!#!d1B\{Š’“‰ynYF9;AKNV\`iu‹˜™|m[GFIG?AA=;#   - - )Tu‹…e6&C^gfh]O>*3IKF;,$       -   "?:7;<:91/$ -*590.6>ABRZI733@CBHB/'6FLH==JW[XVbeejmtzu‡‡‡ˆ‡˜Ÿ¦ª«¢§¢—›‘wtkk{n^eu‰ƒs}„’…xR?3C>3+#579;HGD53679;7;=<909>7060 &14:639;?GNZPE@7>JINB1,5CKH>:BAAA=;49?KMHENYZ_X__db^f^X^XYY[RMTXVHEI4)(#$    -;¬µÂÄÅżĶŽhlt•‘~ƒ~Œ‰£½×ààÙº´ÑçëêèæêóúûüûùðÛǽ®”‡‡™«·´ÆÕ·¡´¿ÊÒÔÚÙÏÅÀ¶­—„‡‡ˆ†‚|‡—¤›˜Š›¢š ž°ÃÈö¢œ‘‹‘‹€w‡¤µ½ÃÉÔÙÒÛâ×ÁÂÅÖÖÓÞÞÙÏÄÃÊǾ¯£‹{‰–›“—Ÿ¡¤®ÁÊÅÇÌÏÚî÷ùøøøùúúûùõòòö÷öúûüüöòððïîìïóôûüûûûúùûûûüùòð÷þÿÿÿþÿÿÿÿÿÿÿþÿÿÿþÿþÿÿÿþÿÿÿþÿÿÿÿÿÿýøøùûüýüþÿÿþÿþþÿþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþûóíòúüýýüüûýýþûúøõññññîïôúüüûúúùøùõõùùùùøø÷öùøñéèêðøóèØÜÝÕΞ¶ ¬ÇÝóüüûûýýþþÿÿþüüþýþûüüøòðçÓÁµ»»¦§ºÈáðùúöêÜØÚÉ©‘‘“˜ ™‘‹†Š‹‰|q€‘®ÁƯŒ›ÈØÔ½°®¥¶âìíèÙѸ€Up–¬¥nHV{ƒ_Es¤¾¹˜H  !&(!!-1 - Hr†œ¨²­®¸Â·³´¼½ÂÁÅÃü¹±§–˜“”‰Ž–ž™†`USWMWdf= )6:FMKKP\iepvtvwƒ„†‰ˆˆ– ¥¨¨¥¨¨ ‘Š„ooqpzsbi€Š}r|’‘‡qW?;=F]_djkgkfho|„•Ÿª°²¹½µ•d0 -&   &(&   -  -  # - -     - -   - - - -       -   - -  - -   - - -   - - -  - ;84:515523//0( !'06?@98<3&$3N[\L88ObcN3  ;PYZu—˜–ƒb9.EctrmdbV8$ :L\_VG6&      - - %9:A82'/88%#(30-(/3130,! '.047CF8+%,69=0 !5454896?HM[TD>3CGLS@3-;FJC==@;@F?93>AGHKPNWZ_^[^d`^`Y^ZSRSUMTXPXHF;2/&$    -:²ºÀÃÆƼÄÅ«Šox‰}…€Š“ˆ£¹ÏÙÙÔ¸²Òçéçäæîöûüüûùõé̼¨’‰Œ˜®¼µÊ·­´¸ËÏ×ÙÚÑ̹²«“Œˆˆ‰Ž„‚¡¥š‚ ¡˜±ÁÆĸ©™’ŠŽŽˆx…¢³¸ÃÍÓÚÎÖÛ×ÃÀÆÔÔÍØàÚ×ʽÄƽ·­—…˜¡“™¦žš§¾ÆÁÁÏÐØìöø÷øùúùúùôòóòöøùûüúøñîîîîëíðô÷üûûûùùüûûüûõðúþþþþÿÿÿÿÿÿÿþÿÿþÿþþÿÿþþÿþþÿþÿÿÿþþÿÿúñïóöø÷ûýþÿÿÿÿÿþÿÿÿÿÿþÿÿþÿþþþÿÿþþÿþÿÿþÿÿþûôïõúüüüýûüûþüüúöññïðîòô÷ûýûûùùùøöô÷úúùúùùøùúóëäéïòïàÏÕÓÍļ³£—©ÌèøúüûýûüþÿþþýûüþýýüýüûóïçÔ¿·¿¸£¤¸ÄÝïøúõëÞ×Õ¼‰•œ—”ŒŠ“ˆsw„¤¼Çε¦ÎÚ˼³¥¥ÐçëëããçÑ’Ur–­¨wMVv†\=m£»¹“P  - %! (8% Ekyžª±¬®»¿Ã·´µ·½ÂÃÁÀ»²¯¶¯© œ”‹˜œ•†eU[PPJY]=,9<@FOJ]eiqqv|y‚„ƒ‹Ž‹‰œ¢¥¥§£¡˜‡€zvoo~zq”{|…ŠŠ|jN??NV`fmebghr}yƒ‰›ª¶¸¿ÄÉËÃœl1 !  -  +:@*  - -%   2ALUT?!$3*DUJ7  - - -   - J-  - - - - - .%  -   -   -   <58631/662,-/*%&7?BC99>FOR[_b`[MKakU4 #+PVOSY_cr†“’„pZFGLKHFEF>;I^ksmg]dszueH37?Yiqh]nˆ””—ŽuE(B_rpoedXB+&7IYYTB9%        %BHC=2*7@0"!&*.,(-2.-()'##*43A<@;,)&5:8FL@135179:@<>@835438/ &663389<3HIHIB=1;ID>AA<@CG@82=FCISXW\[_\U`VabdZYRXNUURNMVMGC94-,( -   - - - - <“­½ÁÈÇÆ¿ÈÍÀ¢”“„‰zŽ†¥¼ÏÙÙ׸°ÖééâÞæñùûûúúùöðÜöŒ‡‡ž´°¼¹³¶³ÈÏ×ÜÙÔÏÅÀ¶­ ’„‡Œzx€œ¨š“‡…›¤›¢´¿Å½·©–ŽŠ‹Œ„Ÿ°¶½ÈÔÙÍÇÆÍÄÀÁËÎÑÔÞÜÚ̶½ÆÅ»²¢†ƒŽŸ›•”¢žœ£¸È¿ÅÑÒÛëøú÷øùûù÷õóðñô÷øúûýû÷ñîîììëëíõûüüüû÷ùûüüûöòøþþþþþÿÿþþÿÿÿÿÿÿÿþÿþþÿþþÿÿþÿþÿÿþÿÿþþüõó÷ûûüýþþÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿþþÿþÿÿþÿÿÿþûóï÷úüüüúúüüýüýöñðïíîðó÷ûýûúùùùøöó÷ùúùøøùøøúôìææëñçØÌÑËŽ·¯¥ ²Ôìúüüýýýûýþýýýûûýýüüüüúôðçͽ¶Ã¶ ¡¹ÉÜí÷úùëÜÕ˱‘Š“£——Ž‰†“‰zn€•°ÅÐ׿£»×Ôdz ®àìíåãðñá \jª¤tKK{‡X?q¤µµ“J  -  !! 1'7=  -!>d‡¦°¬µ¼¾¹¶´´¸½À¿¿¾º±­«¯¥œ›‹•›Ÿ›~^T\NGOM[> $9BDONVbnsryv}‚†ŒˆŠŒ“Ÿ¡§¡šœ”Ž…„uqhp†……„‚u‚ŠŠ‡s^K;B4 -!.3B>'<8@B9#(-1)9J`stnI,!$6BS]ID^s…‹`5   - - - - -   !#"%.*(.DLPG*!++  - -     - -  -  :78702366100.) ")!29AD@<=DJR\e^_VUN^i_@)$&1>IIIE>75986/)1..--..@`{“•–“Ž…ucRDAAJRR[ceh~’–‘‡tbMLHHLGGJJObowuvqlq}†‰ybY_r…pihz•›•}Z.#<[knqidcJ1#5IXYOJD/    -   !9@C<2.3<+#+.,0&+.)-*"!$/66@>?;/-.5;>.'& -   " -  =‰¬¹ÁÄÅÇ¿ÌÑο–‰˜–zy‚ŽŒˆœ»ÐÞàÛ¼³ÚíéÝÜì÷ùûûùø÷ö÷ïÊÀ¯”}¤²°·µ··ÁÑÕÚØÔÎȺµ¥˜ˆ…‡ˆ€‚|“£œ˜—ˆŒ¡¡¤¶¿Á´¤˜‰ŠŠŒ‰¯·¼ÄÓÖÌ·«ÃÆ¿ÁÃÆÎÐÙàÜÕÀ¼ÆÈ´§€“ Ÿ–š™£°À»ÃÒÑÛîùøøùùùøøôóñôóôöûûüùøöðìëìêéïöûüüüúùúüüû÷õ÷ýÿÿÿÿÿÿþýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûùýÿýÿÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿþýþþÿÿÿÿþûñîõûýüüûúûýýü÷õïëëîîóùüýüûûûùøøööúúøùùùøùù÷ðèæêéßÏÊÍÄÁº®©¤§¿Þóüýüýüüûýþýýüúú÷øûùùüúóíäÒ¿¹À¶¡ ³ÅÝëöúöèÛÒ»šˆŽ“¢š’œ‘’‹‹‚wzŽ¥¼ÉÖÜË¿ÎÛÔÕϸ¨Éëìçâëõòå¯[o–­¤sVFvˆ`Ct©·µ—K  -  -,";5 -@|¡¨¬¯½¿·ª«®±·»¿¿½ºµ¬¬§¨¡•—‹Œ‰’—™Ÿ–{_WXDORLL8  2FC=I[fcx‚{‚‰Š…†Œ‘Œ‹•š¢ž—˜˜“‡‚|ppmmƒ‰x~œŠ…idW4JOWlklkjt‰’—™¢§¶ÂÍ×ÛÝßåÞÖµw7  - - +3=B5 #>NTVU832EXfP905EF@?HLaxys`KEEPbhmg`qŠ–ž˜xL       .>LI7("*(13..;IMLK8:IShumfG7L^]W;   -     -  %:>65552843112(!*)16>><<=GLRS\^\XWTbkgD/%!!1>IJLHB938@90551/&*)/C\qˆ‘””Ž{jVH>BHRSQWdivŠ”“eWGKIIGECAKcowxwvonˆ‹~ogq‚ŒŠ…|pcm„‘—“‡jC! :XmqqljbP7*6RSSQGB4#      "4>?:/248,!-/0-/.('-+) %(6283./*8=MNF7)/7876:=AA833082& *5<<6ACJEWVN>@@5 $/CQ[gWC6=@VZXTEH_jYMFMYkqrodPKM^rymcqŒš›š†_* -    -  -  #>Pa`PF??@IB<;NX^k]KW`grw}whdqz{v_0 -  -  -  - -   -  D<747;:@A462)' #-8;A=8<9:Plvxtspsx„‚wk_gw†‡‚pdV]wŽ•œ“]7-MejmlhcZC,1HQPQGA9# - - -     - 9E=844;3,/'11.00//2-( )37:@@2.+,74CB;7;7333) %15;>BCCEIPSPH=4>HJRI99>@FCA9;DABD98:HPN[YRY\YPMPTYcdWRWVTNPKINKOM>B5/)'"  * - 6‹¯ºÁÆƸÆ×××ÊÀ±–‚†{‡”žÀÙáåÞ¸ÛêèíöúúúùóòòñîîòóÞÁ¿¼¡„st—¶°°­­¹¶ÂÔØÔÒÌÊÅÀ¹¯–Šˆ‹—~}‰¤£œ„|–©¶½ÂĹ£•Žˆ‡ŒŠ‹„œ¯·ÆÌÍÌ¿›‚—¾¿ÄÉÉÍÕÕÓÜÙÙ¿¼Ä»´©•‡”™’ƒ„”™¡©ÉÒÐÙî÷øøùøö÷òððñòöøúûú÷ôòîììêéëòøüýüùùüûüü÷ó÷ýÿÿþÿþÿýúññüÿÿþÿÿÿþþÿÿÿÿÿÿÿÿþÿþþþÿÿþþþþýüþÿÿÿÿÿþÿÿþþÿþþþÿÿÿÿþÿÿÿÿþþÿÿÿÿÿ÷êîùÿÿÿÿÿÿÿýøñùýüýýüúüüüùöïíììññòøûüûûøúùùøõùùùøø÷ùúùóìææÜÎÇÉŽº°£¥µÐõýýýýýûùùüýýûüúõæäìóúúøòìÞÇ»¼½´¡Ÿ³ÄÙéóùóèÏ­–Œ¡¥—‡Ž‹‡€}¯¿ÎÚããååâÚáéçÛáëìáÞòúú÷ì²gu–¯«vKGs†]Bnª¼·—V - -  !07 @† ©¶¸®©±±·½ÀÁÂÀÁ½º³ª žžŸ›—‡…ŽœŸŸ›¢‰nb[RGG=DL, -23;K]hnwwyˆŽŽ‘‘“‹Ž’‘‘Œˆ‡~zuwxlhro‚•–ysnX8+3H^u€xˆ¥°¸ÂÇÌÒÖØ×Ö×Üåéêêêèæܽ„;     #5:96#+->\af`I3/3AXfYXIZohTHHMZdste\Nƒ^ovvit•“•Œr57 -   - -  -  - - -  ?TZbl[RKOVPBAFUflo[J^moyxxoz{ˆ…{O'   -  - -  -     ??:6024-468.($ $,5;@?>:AOLKHLW[YPQipS.'".CEJF?>@;<8+%.3.)" &>Nat‰‘•’“ƒphUFAEEILN]ejy†””u_MD:@>:9>;Fcospqsrw}„pdZ_n~sd^TL\oŒ™›˜‰iA))B^gklmm_I0+7+*247@==<8665/2 .228£°°ª©­¶¸½ÁÅÉÀ»À¸µ¯ž™¦¢¡–€†— œšœ£‹ma_\IEHI?'   -);OXgmoz‡ŠŠ‘‘‹‘”ŒŽŽ†‰†rt|ript‚„xrst[:0E^q{†™¸ÉÒÕÙÜáâääâÚÚáçêêëêèæÞ»†<$  - 2DA<-95:TaiaT:23AWaYRGUjj^IAFTeqvjd_efhgukj„ˆ†Ž|H      -  - -  0Lblog_]UTTT?GSkqvfWagoxy{wsyƒˆ‡ƒg6 -  - - - -      -$>A652053/2./-'!! '1;=??=FQPKFHTZREG_lV1$"-;@A@@>=;=8/0)..($#)8IYgzŒ”‘‚wi[H@>?DHGWdgrˆ’}bJD<8;=?<=FSbmvtqoosrqdXYccZW[`fhmˆ˜›™‘}L'"=^alnuneJ4$2LXURE6-     -    #4@3%0276'$-2345+/2((''#/016:B7+&)'?HOQC8/3@814C<<7.206,.. - .3::A>DBGYWGBA=CLIRN:5CME=9>57CGC66=ERaa]X_bbXY\[\feXUKMPQGHGQKFB@4/)*"  ( - - -<±½ÅÆÈű¯°ÃÐÕÐÀž‡„{Œ‰¡½ÕÜÝؽ¹ÜìòùûüûûõîêäßáéïööíÑÁµ•cd‡ ³³¦ª¡°´ÂÕÕÕÏÎÉƶ¨™‹‹‹ˆ…‘¦¡™ˆ~—´½Ë͹¦–Š‹‹Ž‘Šž³ºÄÊÌĺ’rƒ­¹ÂÃÅÐÝàØ×ÛÙÏ»½ÇÈÁ±¥‡’Žƒ€ƒ’™Ÿ¨¿ÖÖÑØïùùøøøôðññññóøùúù÷òîíîíëî÷úúüûúúùûûüúøôúþÿÿÿþÿÿÿÿþÿýûýÿþÿÿÿþÿÿþÿþÿÿþÿþþþÿÿÿþÿþþþþýþþÿþÿÿÿÿþþÿÿþÿÿþÿþÿÿþþÿÿÿþÿÿþÿþþÿÿÿÿÿÿÿÿÿþÿÿúòøûýýüûúüüûüøõñðïïðôùûûûúùùøøõöøùúùøùùùöíèÛÏÁÂÄÀÁÀ²¬¦±ÉåýþýýþýûùùüýüùùúóæØçïóôòðëÚÅ»½¼¯™–®ÃÜéîòïᙡ§¨¥“‹‰Ž“‡|†—¨¾Î×áæèèãßåççâÓÝæÙÛîùùù÷ë¸fs“§¦{PLtŠm>e¤¶µ˜T - -  - - - 6>$  -9‹®«¨ªª³¸¾ÆÆÇÇÃÿ»´¢––™™™–‰Œœš–—žŸŠc^^XJ?DH@*  -.J]co|r|Š‰Ž“‘Ž—˜‘ˆ‰„Š„qz~ƒgddmt€„‚toy…€fB:Ed}‘§ÅÖáåæåæçêëêéâàáäéêëêéåÝ¿‚=   -  4>?C&!/79JYcbW>23;O_^ZFXlo`IKGWhrxug]WZjiohhhŽŠ‹‚a&  -  - - - - - - - 2Ghlvpg_XfV[H?Vfqwrd\exx‡}‚sz„‰‰†yX.! -  - -     - -$-   <:2222551201/0'! "#/9?@A;CMOIDKS[TCFZoV8%)9>BF@@><333-(&)*%%$6CM_p…‹‹ŠŠ{l_K;6>CHKQ^ci}ŠŽ|gYDA>?<:77CFUilmnnojmok\X^[^hr|{ph{œš–‹c57Yhnosn`R5)0HYYLG;) - 1  - -    - - ,62*-*021#!-,C31.,-% %%#'.118A;2(&"(>GQWC3/6<4258@?,,-0330) -"/3<=8=:=K[]J>=>IFKUK21APIC:A<<@HD97>EJZbUM``\]`^Y_igTPLXQIIKHLHHGA8.,#"    - 9‘²½ÄÈȯ©•§ÇÑÕÉ©Œ‹ˆ†µÊÎÏdz¹Üíõùüüüûùöóóîìïôúùöæ¼®£wuŸ©¦²¯µ¢¥¸¾ÍÒÑÏÑÐÉÅ»° “‚‡ƒ†zƒš¥£œŽwŒ±¿ÇÈ»¡’Œ‰Š’ž±¹ÂÃÈÅ­ˆh{§»¿½»ÍÚßÙÔÛÚÔÄ¿ÅÊƱ¨„ˆˆ‡…–›˜žÀÚÙÏØïøùùù÷õñòðñóõøúúøòðððñïððõùüüûúùùûüúùòõþÿÿÿÿþþÿÿÿÿþÿþÿÿÿÿÿÿÿþÿÿÿþÿþÿÿÿÿþþÿþÿÿÿþüüüþþÿÿÿÿÿÿþÿÿÿÿÿÿþþþþÿýþÿÿÿÿÿÿþÿþþÿÿþÿÿþÿÿþþÿÿýõòùýýûüúúüþûøõññòðîðöùûûûûøøøôóöøøùùøûûõðçÝÊÂÉÆÅ¿»²¨¨¸ÌïÿþýþÿýûûûýüûøùúòæØæïôùôïéÖÄ¿¸»¬™–¬¿Óäîñìײ—•¥®µŸŒ‰‘€~Š¡¸ÉÓÞáçéçÛßæåÜË¿ÔÛÑãóùøúõé³bg§ª‡PGx‰j9f£¶µ™O  - -  #96$ -<‹¤¦©­µ¾¿ÄÄÆÈÇÁ»·°¢Ÿš“’”šžž™~mcZPN>=CB"  =Yclo€ƒ‰Ž——–“‘“”””Žˆ†‡‚†‡‡|†~~vdhqnv€tok{Œ‘qQJ[U†¹ÑÝæêëìîëêìîîëçãßãèêéèèâÙ¿z4 -   -%49D<1*5<7/IX\^YD58;=UWXMRaegUKIK^srwf^\[`hodhh~ŽŽr2    -     .E\errf^be_]XKLbxxh_mx|{€{zlu‚‰‹vJ0" -    - -   ?67163425+/)''"%/:=@>:=LQL>?IOOHAWqj>)# %:?DKCDB40-0*)'.-%&%7;CLb|‹ŽŠ}rfVC9:@FGO[a^k‚ŽŒ„tgODD?B?:6=?J^hhssmkmvqd^W\n}„„‡zhyˆ—ŸšŒlA +VjlmrjeU='2CUTNL=(  -  - - -  -   -   ,42-#0,)#&*.)(*&%'$"#04?>>>9-%*.9FTV=-.36272:>;0*&1360' - 25/66>9AAZaZB>7GMLJ@20?FAFA=DGG/'3HR]K>=PS]WG4(.=IHRMR`cfgOEN_oszqh\\afplifvˆŒ? - - -    - -  - - #'     - -  ?:9;564/.-.*%"")059=<=2*-*!&.)$"$+39:UuŒ’‘Ž…uk_F;8:@>MW^]cxŠ|dTEDBB?<:??DVflsssnqxrk`Ycv…ŒŠ…}ru‚››ŽvP)$IcrsqjdV@(.@IOORA- -    - - -    &0-$"!*,"#!-#(10/,&! !#.,6==99-(206LSN=./04196;8<2%,50,*' *:337>AFN]c^_dZYXW[\ae]VOJEEA@<@?==;?7//)& 0 4³¿ÅÊÍź¼ž‰Ž²ÉÓ˳”~„Šˆš««¬¬±«²Úòùúüüüüüûúýýýüüüüûí¿Ž„‡•Á˲¦¡«·ª¥·¼ËÑÎÏÍÊÊǹ©¡šˆ‡†~w{Ÿ§œ—Žy–¹Á¿®™ŽŽŒŠŽŒŒ–£²·ÁÍÍ¿­ˆckº··²ÀÄÔÙÕÓÜÙË»ÄÉǽ¬˜‡ƒ’…‹Ž•¡¾ÞÚÔÙïùùùùúóóòóóôöøùøðîëìëëîîñöûüúúùüúüúøô÷þþþÿÿÿÿÿþÿÿÿÿþþþÿÿÿþþþþþýÿþýÿþÿÿþÿÿþþýüýøôôøýþþþþÿÿÿÿÿÿÿÿÿÿÿþÿÿÿýýýÿþÿÿþþþÿÿÿÿÿÿÿÿþÿþÿÿÿÿý÷ñ÷úüüûùûüüû÷óóðïòñó÷ùüûûøøøøøöøùùùúúûùøñáËÆÌļ³±¢¤«ÁßöÿþþÿþýýüûùøùöøøïÜÎàëñóóïèÖǽÀõšš¯ÁÊÝèèÞ»—–£®»®—‹ˆ‘’Œ~†Œ¥¿ÊÙÞâçêæÞáçäÕ¹­¤©©ÖïñõõôïÞ ]hŒ £„WMt‡h=h¦³®™R -    '6<(  .`¦ª¬¬¤¤«±´¹½Â¼´¨—––œ›™‘–¨¦œž‘m^]VLHLQG. Pv{u|…Š•›–ž›šš“‘“‚€|}z„y|‰ƒxacinpy†ŠŠ„‘Ÿ›œ›…dT_}¹âììîððòððïïïðìêåÞáåæéãàÛÓºŒL$   3GHI<,7Rb`TF:D\lfZ8#;8<;>=BQMHCCHLH?C]hM0#*:=BB?7=50-)%$%&!$ "%/KpŠˆyn`L>51AA?><7)%),6H[O<2113158@C<4-262//) *<;;;EGEIU[WE45ADHPE5-AJ@C@=9?HG@87AJSZd\a_^[[\XV_baWLJCMIB==8@AC<94,* . - 6ŒºÄÈÊÌÇÀĶ—ˆ’·ËÍÀšƒŽŽ‡›«¨«®µ­¹áôúûüüüûüüûûûûûüüüú쾓ŠŒœÆÜÑÊ«’¤°¦­´ÀÎÏÑÍÍÎÇÁ²§¥Œ†Ž’‡‚ŠŒ¡¥ž—…­Ã¼ªž’Š”ŒŒ”¡¯¸ÃÈù©€`dŸ³¹·³»ÀÆÖÚÎÖÞÑÂÄÈÉ¿²¡ˆ€““Œ†…†”›¶ÚÛÐÙðùúüüúôññðñóöøùóíëììêéììóùûúøùùúüüúôóüÿþþþÿþþÿþÿÿþþÿþþÿþüûüþýýþþýþýýþýýýýýýýüýúöôøûüýýýþÿþýýýýþþÿþÿÿþýüüýÿþÿÿþþÿÿþÿÿþÿÿÿþÿþÿÿÿþþüóóøúüýúûüüüùõóòïïððòöúùúùùøùöôøùùøùúùùùòåÑÊÈĸ²« ²ÍåøþýþþÿþýüøúýúøùôìÜÏÞìïóôíèÙÈ¿½°š¢±»ÁÕáÜË¢—ž«³¶ Ž‘—‰…t|–»ËÑÛáæçèäÞåéÝÈ®ª›—ÙðóôôòîÚŸ[fŽ£¨zNFr‚gFn¦µ´˜O !*9<*2]—§°¬§œœ¬ª¯¶¹Âľ²«£——š¡œœ—“™¬®£™’{`e[ZQKZYV5  - Vt‡ˆ‹‘•›œ›—œ›‘’ˆƒzz}u~Œ”Œ‚qacr|vow}– ¤ Že\u•ÃçìïîðñòñïîîîîëçàÝáââßàÝÞ×ÚJ)    - +DJF6.!A]^PE<>VaeYL01.CZa^OYcif`WLSa{ˆƒmZbcdjqohs„™“”b' -   -   -    -  #Dbksqwjkcef]SPcq€}zhbmx‚{„wq„—–‹ˆd9-&  -  - -   ,768:@:?84(#$$"$).;?FDA=DI@>@BFFC?TgN3!-5;?>@97520'%##$)""&4Jc‚Ž‹‰ˆul^N@955=FMSafq‡“’„s`K=BB@><>6=BUgorrstx}ynaWgx€Šˆ†tjm„‹„mB";Qcfhhf\L-(6@G:2*  - - -  !!"%$*+(*,(#+-*+&'%&*;38;9/*+/@IRO9266369==A;4059541) -%6@34<<;9;DGJ<89@P^g`\Z[]\^ZTa^^^QRJJME===BCD?6/'+$  )  >ºÇÆÊËǿƾ°‘…˜¶Ä¿ }ŽŒ¡¬²ÆÍÑÂÁãöúüüüüüýüúûúûüýüüù뾜”•¢Îáß㉒¬¸©µ¸ÄÍÎÐÌËÊƺ´­žŠƒˆˆ‚€y€“©¥›”‡¨ÁÀ¨”ŽŽŒŽ‘Ÿ¯·Àü¸§{`p˜°¸·°¯ºÅÕÚÏÐÜÔþÁÉÁ¬ž…‰”Š‘˜£µÖÙÓÜðùüüüøõóïðïò÷ø÷ðëèëêèêëðöûûúúùùûüûõïúÿÿÿÿþÿÿþþþÿÿÿÿÿÿÿþýüøùüþýýýüüüüüýýýýýýþþþþüûùýýþüýýþÿÿÿÿÿÿÿÿþÿÿÿýûüýýÿþÿÿþÿÿÿÿÿþÿÿÿÿÿÿÿÿÿþþýöðôúüüüüûýûûùõòïíïïìòùüýüûøùùöøùùøùûûúúòâÐÇÉŽ»§¡¬ºÓêúýýþÿþþýýûüýüù÷ôêÚÌÜìíòñíèÕËÅ¿¿®ž¯ºÆÕÞÒ²”™¤±¹®—‹Œ’†}ƒ‡¢ÅÔÚÛãæèèàáéäÒ¶¥¥ž‰”Úñö÷÷òîÜž^f’¤§{PGk`@e ¯°—R  $&3?& -%jš«±§ŸŸ¦°µ·¸·½¿½¯¤§©¥¨£œ£›“Ž ¯¬  šƒng`_JOYbjE(  - $S{”’Œ‘‘•™’˜š•—•Œ‰zt„xu‘ˆ†…„ojnysrps˜œ ¨¦Šie„ ÌéíïððôòñðíêêçãáÛÛÙÛÝàãååÝÆF)   9AKD-,#=::CD>5:?>:55DVH0(/52;49:2/0% #'# $'4EPk||zvsi_UG=;89>EGS^gsƒ‡ƒziVFEA>;6;886ASbjjkonoqlbY_oz{~rkao€„‰€iU2 1EW``aaUH5)/:<6-# -  - - - - -   -#""37%+))&+&('**'#-029:?@=7...=K[M:/0776:7;?:677;92.% *=C?68CHGMOYQC>@CIIOD)0@JDB8=67GMC=:?ENaea_`c^[[Z`aYXZKKJNKHH>7S_ibUB/*7CP]`[_fokSHM[syhbbdgsxldo€Š‘‹yM!      - -.Gesupmiffd[XTj‰’€nlxƒƒˆ‰}˜šœ•†YB7+    - <<6::<664((&!"1'24107=?7///2.*&*2=, !",(+,00,.*""#!!*5Ofuutqje]MC;7838?N]bivŠ‘‰zdMA>:?=:3450@R`glnmmjfaRL]mtvurrh`m€‹†nK-&IGKRVMA<>JJNO?-2>LFC=34<@I@468b¡¬£’N -  %(00/  (f£¬¢œ ´·½¿ÁÀÀÀ¾´µ¯«©°££Ÿ–˜–ž¯³ªž‘|ha`RNW]„`,  -'cŒ—•‘–’™—ŽŽˆx~trm}}ƒš£“‡|kqu~‚…†œ”ŠŒ”Ž‚jn ±ËæìïïïïíìéääÝØÙÕ×ÚßèéêèèçáË–I'  "2@AB3#&FVh\E@DZmdbU=)-9DY[VTekk_R@Ody|rfacejoujl|Š‘‚_)  -    - *9Shnmhfiekkec_f’‹xiq|ƒƒŠk|‘œš•rQ88.  -  -  9<798;87/'&#"!&./-3457@D=0*,())% -6, %&'+23-%$$!#-Egu„}}sgbZG:4888@LV[`x•“Œq\D<;97:97727Kcprpkkge]QFVfs|uvsjeoƒŠŽŠsZ3#5N[_aa]O=.+:DC>/ -  -      (*(+)!"  ,*+0-.)0*',''(*258E=3-,'*7ESQD7779913?>9/15568/( 7BG9.8AC@DLVNA:=LJHHB23BGB<>=;>75'!($   .qE <Œ³ÄÒÒÓÉÀ±Œ”°´§tSr†„’˜­ÓðôöóàØïøûüüüýûüýüýþýýüúùóಘ–¾ÆÔâÒ¦Žž³©¢º·ÀÌËËÇÈÇÀÀ¿¬‚Œ”‡{ƒ›©—ˆ…¡¢”Ž“’”¥±¼È¾±žvsŒª¸¿ÃÅÈÀÆàåÝÏÔÓÍÁÅÍÆ´¦•…’Ÿ˜’“—Ÿ§³ÃÇ×îøùù÷ñïïððñöøöïæãâæèèéëóúùø÷øúúûùðôþþÿÿÿÿÿÿÿÿÿÿÿÿþÿÿþýþþýýþþýýýþýýýþÿþþÿÿÿÿþþýûôìîöüýþüüþÿÿþþÿÿÿÿþÿþÿÿÿÿþþþþýþþÿþþþÿþÿÿÿÿÿþÿÿÿÿÿþÿýôòùûûûûùúüùòïíêéêéìñøûúùøùøùù÷øùúûûùïÞ×åÝÓÆ»µ¥®½Ùíùýÿÿÿÿÿÿþýû÷úüùôòç×ÎÙäëðõñëÝÏÇÇÁ®›£²¾Ê»Ÿ‘˜ª»¹©£˜”—“}x‰§ÂÖâéæçèçàÜãæϵž–§‘ÓîóôôñîÜ¢V]„¢¤„YKib@\›® ŠN  - - !#!->*  #f™¦œ–¢·¾¹µºÁ»¹¹´±´¯¬¨ ›œ™’œ¨«¦›“xnd^UKUe„—f)   +q˜¡™‘Ž’˜“‘—ŒŒŒ‰ˆztvy‚p€‡”¡¥Ÿ„vo„ˆŽ•¢~†ˆ„kx ²ÈæëìëéêéèæççéæáÝÜÝâéèéèèçàÍ™F0    .69;*$&)3TecS>MVNL^epl\TR`y{xwkX__lv{vlt‚ŽŠ‹n;    "*8GPanomrmnfkXSb{Œ•‘~mpz„Œ…|lv”š˜‘€^?@9" - - -   >58;7952*"!#$!#(/-+4537DK@4,/-+0*)8=6!#&)-,+))'&'@_v„{qjcN=1/38>NNX[i†•›}hM;8;9:;:5/1D\knnljeibTHNbq}|xnkmrxŽ‹ˆgA"(G^fde^WA/+2BC<3& -      - - -   "--$!%)&#)8)/-($--),))%0/96;=33203=GNND:6<85.3>>@,1::?9,%-EJ>5=H??AMMG>:6BDKLB5=CKC<=BEACF?40?DJch_a`f^\cYX\]YKJRS`XWG?G==?8.+'),    - :†³ÆÓÔÎÊÄ®Ž’«®ˆ_cu~Ž˜š´ÙïóõðÙÕòùûýûýüüýýýýýýüýû÷îЪ—•ž³¸ÇáÒ±ž £«¸¢ª¸ºÈÉÅÈÈÆÅÇô©Ÿ…ˆ“…„€ ¢ž•‹ ›’’‰‰¬¼Ã½ª›~sv„¥·Á½µ¸¹ÀÛàÝÓÎÕÎÅÅÍɼª’…Œ›œ”“ž¡«³½ÆÚí÷ú÷òïðîíîðöøöïçâããäææëõúùøùùùùúõîøþþþþÿÿÿÿÿþÿÿÿÿþÿþþüýüýýüýýûùú÷úûúûüþýþýýüüúôçÛÝêùüüûûûýüûüüýüýüýýýþþþýþüüýýýþÿþÿÿÿÿÿÿÿÿþÿÿÿÿÿþÿýøïòúüüüüùùú÷ñîééééëò÷ûûûùøøøøøøúùúüùîÜÜäÛ϶±¨µÀáòüþÿÿþÿÿÿþýúøüýù÷ïåÖÉÖäéïóòìàÎÄž±š’Ÿ®¾Â¦‘™§µ½µ ™ š‘ˆ‚”¸ÎÝèêéêèâÞäèÛ¾£‹¡µ±”ŽÍéñòòñìØšO^‹£ UDei?ZŸ±¨V -  #!)/8# ]š˜ž©¶³©®º½Á¿¼´´·µ¶¹µ«žš–˜”ž¦¨Ÿ‘tleXKMWbŠœk, ,o ¤ž“‘•—’””‰†ƒ‚~ov{vrlxž¡£žŠ„„‰‹–™œŸ‹|Œ’ƒyetž±ÄÝæèååçêëêîïîìéãßßÞæçéêèäÝË–G)  &9A:*%!,H\`\=>LjnpiI3$6=LTLUS`xs^XP^rywwm`c_knrkcl€‹•Q&     '08Sbkljersig]PVk„”Š…ymw‚tro{Ž—•‹jRG>/   -    ;2C83./1%$#$&% %)+-66+5?@@61243.'(9G8$! &'**(+&-!"(=Wozyyyunh\C5,.09?JPXh~“˜’ŠtYA:C=+      -     - - %/&%%"%#.'/&.2++2.#&/,28<@3.*%.CMKQC8::5115=@74/68?1' -4NM>5=B@BBMPGE8????@?60-7=Qjrb_c_`ZWNZ\[`UNZZ\YPH@?@C;,&+,-/   3‹±ÅÒÓÎÉî„jrˆ¥Ÿvdq‚‘‘–·Þôö÷ôÜÑìøúüüüüüüýþýýýýüûúòÒ©˜™  ­©¿àÓ®§»Â«µ¯™±¶»ÆÂÀÈÉÊÍɶ¯£„Œ˜„z—¤ž—„š›“‘’£»¿¸§‘xno}¦¶Á¾»±±À×ÝÛÑÆÎÐÊ¿ÈÏÀ·¢‡† œ˜›—œ¤´¹ÈÛî÷øõñðððîðõ÷÷øðéääãâáæïöùùøùøúúùñðûýýþþýþüþÿþÿþþÿþþþþþüüüûúùùöðïñòøøø÷ùüüýüýüúðã×Úíûüýüûüýýüüûûûûûüýüýýüüüûûûýýþÿÿÿÿþÿÿÿþþþþüýýþÿÿýüôòùüûûüùüúùôîéììëíñ÷ùûüûø÷öø÷øúùûúøêÜÝÝ×ÎÀµ¬®¹ÊåõüþþÿþþýýþýùùýüúöîãÒÊØãèîóõïÜËÆÁ¿³œ“Ÿ¸Á¹šœ¨·½¬Ÿœš£ †‰”«Ç×ãëêêéçààèçϬ”‹”ÀÓÆ£–ÌêññðïêÙWiˆž¡S?c†pG\™°¦ŒP - %&36(L‹™ŽŸ°ª¢¤¯»ÀÁÀ¿¹¯¸·¶¸»µ§žŸ˜™ ¨­ŸšŠre`^HOSfv= :}œž—•“‘’’†‚†yw€ƒzkfm~˜œž›…„‹†¡¦ªŸu‹–ƒrdx˜®½ÖàãæçêìðòñòñîêèÞÜÞâèæèæäÛÅ›P)    0CCA3!!*8S^]ABHdroeT:227>Y\\Sav€fTPPawwprh]Yddheagp‹“˜d7    &2T^^ed`poi]_ROeyˆ…vhpuqormlq‚—“Ž|_JA8  -  -  @5:>43/((*)*,&!"/),39--7BC<45264/.;LE'"%'%*''&(-$"" "%*6Jdsusrupk_L>*&+1762680/3:9:7*0:30* ?KLA;@@>?CKKCA;5;BIPJ;?IIB?=AUengbWX^\ZW^`a]TJMMWWWKLEH@4/*,-0(%   8¶ÉÓÕÔÍÁ¬xheeˆ™~q~š®ØñóõñÛÏèöùøúýüûüýýþþýýýüü÷Ú«˜›¢ ¬­»ßÕ¨§Ñ㻟±§¢¯¶»¾½ÄÇÉÐÍ¿»¨—‡™•~’ žž’…”—‘Ž‘Œ‰’—ª¸½µ§•vjo¢²½Ä½µ±¾ÑÙÔÆÄÎÒÐÅËËø«ˆ”›™—‘”¥¯ºÆ×ìôöóñððîïñõ÷÷õðëèéåäæëñ÷úùøùøüúõêôþÿÿþýúôôúÿÿÿÿþþÿþÿþþþúùùøøõòòôóõùø÷÷üýýþþþýû÷òéíùýýþþýýþþþþþýþýûüýþýýûüûûûüýýÿÿÿÿÿÿÿÿþÿþþúòôúÿÿÿþý÷òøüüüüûûýûöòððîïëòöùúüû÷øøø÷øùùûüôèÜáÜÐȾ¯§®ÁÓêøùýÿÿÿþýýýüùúüüùóìÜÍËÔâèñ÷õïßÍÇÅ阕£¶Ã¬””˜ª¸µª¥™ž¢‰~‰§ÂÕßçîïìêäàåèá¾›“”§ÒÛȤ—ÍëïóòñëÕšUY‚Ÿ£ˆ]>\€kAWª ‰S  "&:+IzŠ¢­œŸ±µ½ÃÄÀ¿¶¯´·½À¾¶«¡Ÿ”˜¦©© œŒlhhaQPWn™¤~7 - >}Ÿ¡¡›–‘’•”‘ƒƒ~zt€‚|opio“¥œ‹‹•’š›­³¬™vš¡”wjsš§³ÍßèëíïññóðïðïëçáÛÚàåæåâàÛʬX)  -  - -"29?<3!#&/QddXHCOfmh[L974@YeZUaoukWLGathtol[Z]glkegsŠ˜•~D   .B[ilmigkln`_Qcp…ŽŒ‚ffipqswshy‹’“†o[J=( -  -    :7:4442.//13*#%-*,/63,5DI>22;:32.>TQ8"(,*11+,))%"!#("!)+6J^rw}}sp^YP>-!,.0:HR[m‰—‘Ž†kV@;264792*$;YmnoqljkbXSWbu~{ysjbiy„‹Œ‹sH$$:N__]^\L7)/770(   - -   -  - !- #&)%'(((#($&'(*%)338=;:3+'(:I\S?-/5336:52>304988+" - =MNB;7=B?@KME=<6?AJRI:;MPACH;<:ADA1/7GQhkb]YYZTV\[[f`UTVQUNMNJFED80*(-*($   - :Ž¸ÆÕÕÒÏ­ud[Sbˆ~qŒ¨ÊßææÞÊÍêôôòùûüýýýýþþýýýýü÷ܯ—™¡œ«µ¼ÞÕ¯°ÕçÅŒ¤·§¦¹²·¼ÅÇÉÑÖËóŸ–”˜‰„—¤¢—Ž‰“–ŠŽŽŽŒ‹‰‘§·½·ª“xs‡Ÿ¬¶ÅŸÂÓÕοÄÏÖÓÏÉÌʽ¬œ‰‘žž–—“ž®¸ÅØîõøöñðïðïô÷÷øõïéèçåçìñ÷úøùøùúûùôêøÿÿÿþþûïéóýýþÿÿÿÿÿÿýýüùøùøóðöûûøø÷÷ùüýþþýþþýüúùóõýþþþÿÿþþÿÿÿþÿÿþüýýýýþþþüüüüüüýýþþÿÿÿÿÿþþûôìïüÿÿÿÿþùñöûûúüûûûúøöòðñðïñöùûüüøù÷øøùùùúùðáÜàÚÐź¬¬¸ÃÕëôùþÿÿþþþýýýûúüú÷òé×ÒÈÑßêñôõðáÎÆÇò›‘¦¾¹›’•ž²µ©¢ žž™‹ƒšºÓÞæêîîîéáåêç×®””š»ÚÜÉ£–ÐìòòññëÕžWX‚›¡[Ld†pFX˜« V!    -=,  -IxŒ”ž¥­»¿½·»¾Â¹«±¸½ÃÀ¹­§œ”–œ©¢œžŠjjg_QGRqž¥|6  9ƒ¤Ÿ•’““‘‡…zwˆz{€Š}o†‘‘–˜£ŸŒ‹”›¤®¹·®‡‚œ¥—‰vgŽ ®ÐçëîïòñðññððïìêßÚØÜßâááâàÕ·b, - - - - -/EMB=( +Lfa`LACclmf_C43:UX]OSfypgRO`fn{rid\^cljcfpˆŽš˜”d-   ):Tjxzvgnutqh^Wh‡ŠŒ‹wenyo…ocf„“•wdMK9" - -  -     @;<500/.034/+"  "..1/119HM?248>93.8PXB&**57//0-)+'#""&! %2;@Yqv~ysreZR=3/4/64AKUc’–“†nU=545002:, +LggimqmggaZX]kpvxvofcl“‘‡^/$3FU]]]VI8*.785&  -   - #( "!!/(!&+*,.+"')&%%*199-$'.:HUGA23=/68:9:885>><3*@MMA8?FKA@LFG::4??JME5;STFD>>?;AD<2-8ATfl^_[`YOW]Z[eb[Y[XLVNMKFJA@6/%)&&% ,  :’´ÅÔÖÑÉÁ©lcXJY†|p~…ŽŽ¨ËàßßÒ¹Êîôñíñ÷ûüüýýüýýýüýüõÛ´žœ›š­¾¿Ýа°ÔèÁ‰—··¨­±¯¼ÅÅÉÑÙÏǹ©–……•Žƒ~¡Ÿ™Œs‹•‡ŽŒŠŒˆ‰™²»º«“ƒ„…¢µ¹ÇÈÊÈÊÓØÒÄÇÉÔÙÕÈÎÍij ‘œ¡™”›Ÿ°»ÂÖï÷øõòíïñïóö÷õôîèååçêñòöùøøùûûúøíëûÿÿÿþþüñîôøüþÿþÿÿýýüúûùøøùöóúüýû÷öùüýþÿþþþÿûûýûøúýþÿþÿÿþÿÿÿÿÿÿþþýþþýýþþÿþüþýýûüüûýþþÿÿÿþýû÷óóùÿÿÿÿþý÷õúùùûüùúúùøõòòñïñ÷ùùüúùø÷ööøùøúôèÜÞàÙÑÁ´°°·ÃÚìñùþþÿþþýüýüüùúùöñéÚÎÉÒÜæðöóðâÎÇÆò•©¿±š•š¡µ²­¡™›Žˆƒ¨ÍÝæêìíîíçáéêàˤœž°ÕàÝÃ¥™ÑíñññðîÙ£U\ˆ£¢cJin@Z£ž‹W  - -/?2  @|ˆŒ¡¢±´¯¬ª®º¿º¯ª³¾ÃŽ®¥ ™•˜¨¥›™nejaRSSx•ŸD  2ƒšœŽŒ—“‘Ž‰…€yu‘…ƒ|zuŠ–•š“¦¤Š‰“¤¥±»¹²¦–†™¨˜‡yl‚¡¸ÚéïðîðñòñïïïîêæÝØÖÖÚÛßääâÛ½c)     -BA=1"+?T\T<>C^kpmZI;10UQ]VQaipkRJQbrtstf[[_lqldl€‘˜•v>## "  !#'-Bhv‡~mrmmngdU]x†‰‘{agwvƒxqcas‰”—„gWL:'   -     =@:<743)",4.0 ##&)00--5KT?6179=5,0JXE. &08640.)//+#"$$"!$-6JSay”Š†\A.022224,%>R\hmmjhqle_Zcmy~|tojp‚‹’Šl9#(9KX]]UL:,*774% -     - - &/' #''*#++%)&%.1.!($&+/36=;8*%*,7EII=21//5:9988. %ANSG=@@EBFOGD967>BFK=3>R[E>@94=646@VejaX\ZOUZ^[[_]XRWYWULGOJF) *2OQJA9D[dpoaN1.4Pbb`Y`hmkZOQ]o€z{i[WdgpwgdtŽ˜““~L  %+*!"&"#!"# &$! " ",?at‚|pecokli``i‰Œ‹‡lapm{vrq^b…˜œ—”|bM=6( - -   >@=<86/##)//."! $&&01-.;NXH8364<8-2O\M=#.54210+1/.('##'&*14Dh~z†xmg\J52-128+%+2/%  -   - -    *3,(!$.''.**,+4-($*"!*+/3553%-+*8GLI@3010725?A<34;A82!'EMSM?;@F@FOI?>55@BBH=1;X\D9=<0:CI968;CUhnf^YUNZ\WT\]cXOYUOOPMKHF;>9/-0,*!  B—Y    -8¶ÇÐÖѼ¨od^Ye……|ƒŽ‰Š©ÌåìéâÂÈêñòñôúýýýþýýýýýýüü÷Ú²£ ¡²ÇÊÛÒ³¸Ù์–ž¯¹¡ ¯³ÄÆÃÑØÙÑ¿«œ’Žš—”ˆ”¢ž›Šr‹‰‰ˆŠ‹ŒŽ‹‹¥¶µ£ˆ†‡‰—­¸Á¿ÉÐÐ×ÜÞÑÉÎÐ×ØÏÉÍË­›Ž‹ª¶¼º·±±µÑîõ÷ôññîëïòôöóñëçæäèïòöùøùøøúùùòëõþþÿÿÿÿþýþþýûùúúùöùûøøúûýüûûýýüüýþýýýÿÿÿÿÿÿýýþÿÿþüþÿþÿþÿÿþýþÿÿÿÿÿÿÿÿÿýýýþÿÿÿÿÿÿþþýýþþþþýüûüþÿÿÿÿþÿÿÿþü÷õøúûøúúùüüúôòñòóöúúûúøù÷ùööøøòå×ÒÛÒÈ¿¹¬ª´ÁÕìôóùþÿÿÿþþþýýûúùúùôíÚÎÊÒÜåïõõïàÏÊÌ¿¨–¦º­—•š£·±§ ¡”†ˆœÆßëëíðíëéæëêÞæš¡ÒêíîêÔ¯¡Óïôôñòïݧ]^•¡‹\>\ƒsJM‚£™Š[$ - ,55 - -Bp~Ž™›­£”‚qq†œ±´°¬¨±¿Â»¨¤žžŸ¦¦ŸŸžˆidcY?F\j‰Šj, - 6|žš•ŒŠ‰z~zpqyx”‡st•¡¡— ¨¦‹§®µ··²¥¥° ˆpgŸÀÛëïïîêìíëééççææåçéâÚÛáääåܹg.)  - )6B?4!!*)FVXLDX`e]ZlpjaQKNh‚ƒ|p]ZYZoyudnŠŸž˜Šc7 %&)&(!(#)$)&*-(%#""&8Shzyllglkleb\m†•ˆrdetvxx}lby’––“‡mMCG, -  $$ >;@87530)01/,$ &+560-5MYQ;@6@B=55FUV<% )2531426241)()*##  17@av‚yy}of_P921.66;DNWbvŠ“‘‹{e=57002+.(7K_hjkonlngXNWenz~ypqrƒŠŒ‹€[;./>R\^[LA6%'-4+ - -   -  - -  -   33+' $'#)*-()+)(#$$"#-528=9+"()15FOC:47:9857?AB67/481&#AUSOC:BBC@JQE<:8?FGH90@U]C>A@:8;F<579DYjoeb`SXVZYX^_]TSUS]YVUOJA<84(*.$&   E* <´ÊÑÔÔË¿¤nga^gŒŠ„ŒŽ®ØîòóíÑÔïùøøúüüþþýüýýýýýüûöص  Ÿž³ÇÃÕʱ¹Úßµ“›–” ž‰›¬½ÇÇÌÙÚÙÇ·¨™Ž†’˜“ŠŠž Ÿœˆ‰“‹Œ‹‰‹‹Š›°°¡‰x~„ˆ«¶¾¼ÄÌÑØÞÞÔÊÑËÑÙÓÉËÐÇ´­œœµ¸¸¸³´¥¢Åéôõòðïìíðóõôôðèåæèëñøùøù÷øùùùøðíûÿÿþþÿÿþþýüøøúûûø÷ö÷øúüýýýûûùüþüþþÿÿþÿþÿÿÿþýýýÿÿþþÿÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿþþÿþýþþÿÿÿÿÿÿÿþÿÿþÿÿýýüýüýÿÿþÿÿþþþùóøùüûûùùúúú÷óðïðóúùúûùø÷õôô÷ôíÜËÌÊÀ¾·¯©©»Îíøø÷úþÿÿÿþýûüûüúûûùøïÞÑÈÐÞåðõõòäÒÊÈÁ²®Ã¿¢š µ¶¯¦£œ‹†™À×çîïñðíêçééßŨœ¤Ãäïóóîݸ Òíôõôòîà¨\]‚œž‡_GZ‡tCI~£‹]&    *<8 ,Y|’˜› Œujkjtƒœ³°«§¨¸¿¸±¦žž¡£ ™š‹f``ODIM_ppY5   5~˜——‹ˆ„ƒ‡ƒˆtim‡‘’ŽŠsu•£¦¥«µ°”§±µ´´·¶«›Ž ®©wiƒ¦ºÔéííéèæääèëëíïîíííæßÛàäãâؼf1    - (7AK:%'*9X^[N=A\l^^S@8/7PfldW^lncSMOaw…|{h`Y`nupfl˜œš“‚F!#&02)-81:4331.,0$$('! !'3EbxvnbhjgfhY\wˆŒˆzqjswƒ‰zcb~’’aUD7 - - - - ?<<857;71/0-&! !)2971/7JZWB9>@EB?4;QYE/+.974715533)),*%'# *57Tq}z}€rjbUF;246:?DGU`k‘…oJ;<760-1, 9Pagfjmikh[KPam}ztjluˆŽ…jK2(:IX^]UF:*(,3'       -  -  -   -24+)!#' #$%'%&('+%"%-26=<5/(#&0>GKB=655428:8<9/23012+ $GWPH:;?=DFGH@946AEJI3-AVZE>B84-#(,*   3+ - <½Î×ÖÓÎÀ¢pe`bp‡‡x€ƒŽ‘¶àò÷ùõÜÕóùùùúüüýüýüüüýþüüúóÙ°œ›´ÅÁÊ°·Ø⺜”ŒŠˆƒŽ«ºÄÉÍ×ÚÚ̹°¥—Žœšˆ’¢ž‹‡•’ŒŒ‘Œ†’š­¬¡†~~€ƒŠ¦µ¼·ÃÍÒÕ×ÓÑÊÓÍËØØÍÆËÉÀ±°·»²¬ž¢¢˜ºâññðïíîïðòõôñðæáâãëñ÷ùù÷ù÷øùù÷îóýÿÿþÿÿþýýúùúûüýüúûûýüüûûúöö÷ùýÿÿÿþþÿÿÿÿýýþüúûþÿÿþýþÿþÿþÿÿÿþÿÿÿþÿÿÿÿÿþÿÿþþÿýÿÿþÿÿÿÿÿÿÿþýþýþýûûýýþÿÿÿþÿþûõ÷úüûûùùûùùöòïîïòöùúûûúø÷õ÷÷ôéÕÅÇ¿¶±­¥¦­¾ÜöýûùûýþþþüýùûüûüûüúøïàÌÆÌÙæðõôðáÓÌÆ¿¶ÊØ«Ÿ›§¸°«ªŸš“Š°Îäëððòñëéêêâѯš›³ÜêðóòïݸžÌéðóöõñåªaS€¡§ˆZN^r?DyŸ–Œ_#  -(<:"  'M|’Ÿ|jd_hkw‹«±®«¥±À»¶¬¨§Ÿ™š œžtfXJFJPUcbFA) - -3v””Œ‹„Š‰ƒ‚ŒmoŒ“‹yx‘®¸²³À»”«¸¼µ¹º¶ª›ž­¤xp‹¥¼ÒáççãåãáæíðòòòñðîìçßØÛàÞÝÕ¹i0 -   %5?B9$!&5M_^RBFJ^^_U?8,/Shgg`^hmlUJHXt{ˆpd]anwwmcl œ^6++4;39@?=82;<1/3..-*")%"! )1Ozƒsgfhhfe^]ozŠ„tkxw|}„}jVr•…n]NB*   ?A<;D=?86/46(#),7;501E_ZG;?CFB=.4KXF1 ,5230247554-*$+(& &,8Qmz‚‚~sf`TF6/4:?BBNZc{Œ’ŠvQ:323.0.*.ETbiicglf^RV_os{|ulqou…‹‰uU5+3JUX\VJ;0(+*'  - -    -  -    +6/($%''#"(+$"$#!&'*/4A@9,'&(,7JSA>;9911:<6@C?AHI?<7;GCCA62>]bHB66=;>A;5.>PZlibb__QOQJQSRWRUQOVSHFIC?B60(&$,'    .5   9¾ÐÙØÔÊÀ¥fcbgtŽ…l{Ž•¸áôøùöàØôúúùùúúùøù÷÷ùùúùú÷ïЧœœ˜š¯Ã¾ÆÀ®»Ùã¾”¥›‚|…Œ”°º½ÇÎÔÛÚÎÁ»¦¨œ“•—ŠŸ ›…Œ’’ŽŠ„—©©œ…}„‹¢±¶¶ÅÑÒÙÙÎÉÆÓÓÎÓÖÑÅÄÍÅ»Ãú°¬šœœœ¯Üññðíîïíñõôóïìçããåìòõ÷ù÷öùøùøôîõþþÿÿÿþüüûøùûûüýýýýþþþýýúöïðùýÿÿþÿÿþÿÿþÿüüûøúüþþÿÿÿÿÿþþÿþÿÿÿÿþÿþþÿÿÿÿþþþÿÿþþÿÿÿÿÿÿþÿÿÿÿþþþþüúýþüýÿþÿÿÿýùñöùûûûùùùúúöñðîïðòôùüüùööö÷öôçÑÃÀ·¯ª¨¢¦±ÅéúüûùùûþþýýûúüýüüýüûøîáÑÇÌÚäíôõñáÓÊÉÆÇàßĪŸ¢¸¹²¬©ž›–~¡ÄÙéîðñòðëéëéÛÁ¥œ˜Éíðñðïê×·šÅäìóöõòè²bR„œ¦ˆ[O]|tKC;)"!3Bag]HBCT\_ZSD4>>852+,/.!#! - -&-Hi€ngeegb\]W`w‘Žˆqot€„€|r^j‰‘’Š‹€\XD1  -  -  DA?@>9-++*)7A7*)! -&ESVC76<=BGMJA>8:JH@<42>`aFC<0=;;A>1/>MWhiae^]MT]STGIQNLTSXQNMI@?B<0.'))/& - - /8!    7–ÂÒÙØÕʺ£p^__w’‰xƒzµàôùùõßØðùùùøøø÷ôõõöõõõ÷öïåÄŸ˜žœ²Â¸ÆÀ®¸Ü囸´‘ˆŸ¯¶ºÃËÒØØÒÉÁ´®œ˜Œ›”Œ’šŸŸŽ†™•Ž‹…‡Œ‰”¢¢“„ƒ†œ«´¶ÈÓÔÙÞÐÿÍÔÊËØÕÊÇÎÎÍɼ­¨§¡œ’—¬Íéññîíëêóöóðìçããæçìïôøøø÷øùø÷ðéóûýýüüüüüüøøùûûýþýþÿÿþþýúôñõûýþÿþÿÿþÿÿÿÿýøöúýþÿÿþÿÿÿÿÿþÿþÿþþþÿþÿÿÿþÿÿÿÿÿþþþþþÿÿþÿÿÿÿþÿþþÿÿÿýûüþþþþýýýüûòíöúùûùùøøù÷õðïëîîðñöûüøóöô÷÷ôäÏÆŶ©­§ž¤³Óïûýúùøúýýþüùøüýûüüüû÷ìßÐÉÊ×âìóòðãÔËÊÇÔåØ»«¢¬Ä¾¯ªŸŸœ’„‡³ÒãêñóóñïéìëáË®—ŸÙïñòñðëضš¿Þìòööòê»j]…›¥ŽfQ\‚zQGj– Ÿt) -  (85 !O|’•¡nZZkdahr‘¨°¯¨£­·¸°¨ ™“˜£š‹qk`OJOTZddP1  V||}r‚‡ƒ‚‘‘™Šyuƒ‘“šŽ ÂÒÐÔØͲœ³ÄÂÁ¼¶¸³š©¥“{m|œª¸ÒâçæçåäçëðïòñïìêèãÙ×ÕÔÖÏħ]+  -  $2>B7(!).@SgcWCDH\`a[E64>A=565:3(. +@OUC8=?C>=IM?>;7CD>;52EcbC?==;47;79;?DWjk`Z[ULS^TKLVMJNMKWRRGFIB7872.+.+"   -=.  -  =™ÃÓØØÑɽ¦q_`\w“…r|‰–·ÞóùùóÜÕðøúøôôõõôõôõôòôóóðḢ™£Ÿ²Æ¾ËŪºÚæþġˆŠ’¬´±¼»ÆÐÔÖÏÊÇ¿±£ ‹•œ‘ˆŒœ¦ž•‰‹š”‘„ˆŒŠ’©§“†‚†ˆ„Šžª¶¾ËÕÒÜÞÒɺ¿ÉÌÎ×ÖËÅËÔÔ˸–—¡¡™”œ¦¾âîðìëêîòóòîçãàâãçéìóöø÷ö÷ùùõñæèðúúûüýýüûøøüýýþÿÿþþÿþýýùùüýüüþþÿÿÿþÿþÿÿýöôúýÿÿÿÿÿÿþÿÿÿÿÿþÿÿÿþýÿÿþÿÿÿÿÿþþþÿÿþÿÿÿþþÿÿþþþþÿþÿþýýüþÿÿþþýüúðëóùúùûúùùùöôòñðñïòôöúùùø÷õø÷ôâÎÆ´¥¨¤œ¨ÁÞ÷üûùøö÷üüû÷öøúûûýüûùöéØÍÅÌÓßêóôïâÔÍÅÎáàDz¨ª¿É¾«¤š•ˆžÄÙçíñóóñíêêæÚ»ž•ˆ˜Ùïñòôòîá¿šºäïóøôóå¸l^€š§kH^…xJ9l–šv+  - -  )8/ $Np‹ ‚jbbpafcj…«²§Ÿ¦¯µ²ŸŸ™–˜š žtm`QMMLXS`R1  Ltso~~x€’¥ª‡ouŠ‘–¢ …¥ÎááÞâØ»ž»ÊÆÄ·º¼±›‹šª§˜zil•¥³ÍâäääããçëíîîîíçæåßÖÐËÏÐÇÀ—M*  - - (37F8$')-@bcSG?OXacZJ:4=Kdpihflym_THXmwyql_Z[dpvjerŠššš†iQCPTDINSSPSPPSBLGDE?<811-,)***!"'.Xj{xkjjcNRRWp†•›‘†in~ˆŒ}aVfˆ”–•|jVC,! - - - -GA>>=AGC@:97,! +/,/:;4.@WUB% $.5<4*%'#%;ALD;4447294>=<40164--" (CUTI;>??JGIL<>7:>>@=37QcaE9<=7;DD>78ABTge]XTZYTWNX^SLJMKQQLCFNKGA>70* "&  -,:' -:œÆÑÖÙÓǽ na`e‚’€vwwŠ“–­ÚïòóêÎÎíôôñïñõö÷öõôõóöõòï㹚– £Ÿ³ÃÃÐÄ®ºÞå¿ ÁÉ«Žˆ–°¿®µº¿ÎÔÑÎÌÏÆ»© —–›˜©¥Ÿ™‹“›–‹†‰Œ§ªš€~}‚‡Œ¥°ÀÃÐÕÍÐÓÒÇ»µ¼ÆÏÔÕÍ¿ÈÔÙʶ—›žš“–š£¶Øèêêìëïòóòðíêèèêïïïòôôööøøùõìâèòùýþþþüüúùüýþþÿÿÿÿÿþþþüûüþÿþþÿþþÿÿÿÿÿÿþúøøúýþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþþþÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿþÿþýýþÿÿÿÿÿþý÷îôúùùúùùùù÷÷õóôõö÷õùùø÷õôôõ÷òÙÊÊÁ³«§›ªÅêúüúøöóóúûùôñ÷÷ôùúüûöñæÛÎÈÉÑàêîòîÝÐÊÊÝèÓ¹©¯ÉßÒº­ ›œˆŒªÔãêðòõòïììëßÇ«š‘Š«ãòõùøöñäÄ¢Áêòôõóïå¹b^y˜ ”dGZ{O9f“¡œ|-  - " ""!$&32. - Mr‹œidhkb\^ft–¤®¥¢¡ª¬°¨£¢™™kgaPBFNTR_U8 Cltx}tv‚ˆ“—¨º°Žxv”µ¹ŸŽ°ÜäçåäÛ½§»ÊÈÁ¿¹¸· ž©¯”xkp‡Ÿ²ËáäâãÞßãéêèëêæÞÚÜÛÒÅÅÆƼ¹J* -  - -  .05C3"*"1=_h^NIJ_cgaU>/;Yfnnllmprg\MWb{yrqbW`hmvmck‰——zcPWa]^]]c`SUOVS^YNNMB7<3/2/.*( $,.BavzojjrkcY]auš–‡tuw{Œ‹ƒsSXp’”‘“ˆm^K;' - -  HE>>9972)!)-$(*3<@<8>VcJGB>CIR]ey†“‘€cG810471+#.L]hhkpmigd^[bmstxvgfm€„{dD//JV[YQJ<0)%! -  -  - -  - - -    ):A6,##)-# ''% $!%+9A=7. "$)5@FD:1:?82547=:735695*"%EY^Q=7A=FNLPB225FHE<19Ud_J>=:7?CG;12@FSc[XYZ]YUTNV\QQJMMNRLICIJFA@:-)&# (  -  D£ÇÏÕÙ×ƽ¡ie`cynwwŒ£ÈãééݾÁáîíëïðôøùù÷øùùööõòã» ›¡œ–¯ÃÃÑʱ¶àæÀ ÁÍ°›”±»±ªººÆÑ×ÐÊÔÎ󪟓Œ˜›Žˆ†™¨¦ž“‚—ž‡‡†—ª¦’€‚…„ ¯¾ÂÌÒ˾´ÂÁ»µÁÊËÏÑÏÆÃÕßÕº¥Œš”’—¥²Êáêìêéîñïñðóðîïïñóôôôõõ÷ùøøóèåòûüýþýýüþüüþÿþÿÿÿþþýýýýüüýÿÿÿÿÿÿÿÿÿþþþÿþûûýýüýÿÿþÿÿÿÿÿÿÿÿÿÿþþÿþÿÿÿþþþÿÿÿÿþÿÿþÿÿþÿÿþýÿÿÿÿÿÿþÿÿýþÿÿÿþþýþýûòõøúúúùùùö÷÷÷ôööõööööúøôòóóöïÛÕÎø¬¡›£±ÑóýüùøóòõúúùôòõïíòøúùõðãÔÌÇÄÎÝèíðëÞÖËÔéæβªÁãìÔ¹¥ŸŸœ‹Ÿ½Üéîòôôòììíæѯ’™–³é÷ùùùøôçȦÅìñóòõñê¸iRv£§’hKOƒ|K=o’¡¢. - # ""$)24/$ CuŽ˜”xiikig[^go‘©©žš›¨­­¬¡¡Ÿ ¢¢ŸƒgmZNMQRP^_Y8 9]wqjq…‹’™¦µÄº›~€Œ˜¯ÉÏ·š½áèèéçÜƱºÇÇüµ´¶¥—°©“ƒkfž±ÊÞæáÛÚ×ÙäêéçàÖÎÌÐÔ˾»Á¿½²‹@'   %*Yl|…‚…raYQG=9:@>DNYal}Ž‘”†eQ=10141/(#?Rfejooieg_Z]gqv}pmhi|…‹„tR51:PX\VL@3,' -     - -  -  );E9/%)-)# " $#$+")++5>@>,(+2;C<89367465>?<22884,#3HYXQ63=9=AII?5/3CDF>8/!+/D^cSDBIZfndQ45@F\midcpsm^UQVipvtjVYabvtibp‹–››}nomnlcclkhdlmjebd_]ZMHB@;=87/&(9Sr|}|kjhqoe[T`t‘—’|pv|ƒƒ„~fIZw’™•€jMI- -    EFB@<;A?81//$!"%%$29::49Q^b;,146C=/2EZV;!%&2;=78>19JXZSJ?6-)  -   -  - -  -'CB>73,(,! ##"!%"--19A>*&&!5?BE984<;>>1/>GTcc]TSUYOVLRVPTHNPJPNIJKH?@35*!$ 4  - -F¥ÊÐÑ××;œga\`qynuvŒ‰†¦ÉßæçÙ´½ßìëëñöøúùúûûúøùøøôêÆŸ–œ•—°ÄÅÒÇ°Âäé£ÊÔ°•”“¦«­°©´¾ÉÉÉÌÖØÐ̾±¥”Ž””……˜©¤“¤šˆ†‡—§¥u‰ˆƒŠž°»¾¾ËŪ”§»¶³¼ÁÂÄÊÐÉÂÕãÛÆ®”‘œœ—œž§´Ñåìèåèêìêëéêêêêìîîîìîñôöøùïææñ÷úüýþÿþýýþÿÿþþþýþýþþþÿÿýþÿþÿÿÿÿÿÿþÿÿþûòõúýÿÿÿþÿÿÿþÿÿÿþÿÿþÿþÿÿÿþÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿþÿÿþÿÿþþÿÿþÿþÿÿýÿýúòñøúùúú÷ððñðïðïîîðííìíìîñôôðåÜÜÑ¿¯«£žÂëúýüúùôñùúùôîîîæåìöúúòêÛÕÐÆÁÄØæìïîâÓÍáßÈ´¦±ÜëâŤ¢¡”†Š¦ÂÝêìðñòòðîíäʨ˜ž¤Ÿ¢µêùúûùùõéÊžºáíðöõòêÄs^wœªžmHW‡‚TJmž¯¤‡7   - - -"%&"!,9/  -FuŠ”‡nijfhkb]`ez“££œ ¬°ª©§¢›œ“†slZ\TQTZ]gY: - =ajot€‘Ž”­»ÀÉ擃Ž­ÏâáÏ©¾ãëêëëá̽ÁÄż²µ³¢™­«™~c`ƒ™¢»ÏÛÛØÎÈÏÛÜÖÐÈ¿¶·º¾¶²·¼Â¶¥ŽL,    - ":A>;' ,ERi^LBIWcfe_>18J]ifeahwveYII^txypXX_by~rfk…’˜“’‰kntuocjqopmlnilfb^_WRHGDGA>;4( #5Lbkq{t`hnoig[Xo€‹}psxwƒƒpNIe‡Ž”‘ŠpYP=' -  GGDA==@;:86<*$!%# ""#.57:7@TdT>007AJUafn€“~dH9149444- 5P_djjmnph[Scpvrttjfm‹‡{hH:8DOPJH@50%     - - -  &*6C@5.((*%! &('#" !#$'004:;9-'''+7>EA844=<3123=<28103-* 7J]XG<9>BECKE@9/1=>?<75NlkKAA????D@48C?M_b[SVWUWNRVPHPPPGILMHFFE779/&&!!    K©ÊÐÕØ×;ŸgdY^x’{lxwŠ‰¨ÈÝäåÑ®¾àëíïõúùùûüùúùùúøúõéÅŸ•™˜™±ÅÂέÂäêÇ©ËÕµ™”–¥¨¢­§¬¸ÀÁÃËÕÚØÔú§•‘™‘…Œ¦¨ •‰—™‹„‰ž«Ÿ‚lz‚‡‹Œª½ÃËÌÀ¤‡ž´¶±¹ÃÎÊÆÎÌÄÒãàË´›ˆ‹—›•š£¦­Æßéèâáàâáâáãâããääæèæçíôøøõîåçòùýþÿþÿþþüþÿÿþýýýýþþÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿþþúõùüþÿþÿÿÿÿÿÿÿÿÿþÿÿÿÿÿþÿÿÿþþÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿþÿÿþÿþþþþÿþÿÿÿÿþÿÿÿÿþý÷ñøûúûúøñïðïïììëëìëìêëêëðñïèØÙØÌ¿°©¡ «Êïüýûùöòôùúøñïðëßßèöú÷ðçØÑÎÊÀÁ×åëííàÔÕÛͲ£¬ËææЮ›£›ˆ›¾ÒãîïòñññïíèÓ³¢£±¯ª¼ëøúùùùôçÊ »ßíñóõóëÅwcŸ°kIS‚„_Jn¡°¨‡9 -$&## $31# Do‚~neeehfZZ^_lŠŸ¡ž—œ¬®ª©§¥¡Ÿž”ˆxedURMJXgk`A   .Ylu{—¬¤œ±ÅÇÊů‘ŸÀÚæçØ­¾ßæèèèáÑÁÀÇÇ¿¼·³¶¨”¨­™{df}”œ«ÃÔ×ÕÎÄÈÔÕÌƸ°¯¯§«°¶¹ºª¡’V.  -!4?>:34%%+>SdjnpebqmocXPaz‡‹tpjhu~‚v\HTq‡’_OH3    CFJEC?C=>>:3*!+#$"%)',68:6IM[V>/,;Mgy‡Žˆpd\VH>;=ACIN\`hy‰—˜‡oUA1:4673.'+DVbggilljcWWaittvpcitŠ€skD:ACHGEA:-! - -   -      - +;E?2'%-(#!&&'!"!"'!  )/2464.++%),4]’‡lSEC3#   -  - -  UAGHEA@D?<61,#('! !"')(*28:76GWQF947DGD.*6L`Q/  &1:B;8?GG??.$!!"/=D]zŒŽ‰qe^cTH=9>FIJU^do‚‘’‚cF7543532+4Oddgjhmkib[_jmquodgn{…†xfJ=>DIMNB:/    -     -   0AD6+!&+)$  #!$ "%')2/29,'+%':>>804+.<:54>730/1314& /GRJ=B9?JDJD>8753?:=97=UddC7=>@<96:AG]YRHKSNLOKUMJLIQMGE@CEHD?AB-$$&(" - -H±ÌÓÔÙÖ̼œi_Z_y’€s}x†…ˆ«Îçê㩽âðñôøøùõôõôòñóôõóíพ•™—š°ÃÀÌÅ°ÁåéÇ£Ã礕ž¿Ä—ª«¥²·¾ÅÐÖÔØÑö¨¡’‹“˜Žˆ‹¥´¬£‘—‘~‡¨¶­‚fn„€‹‘ž±¿ÇËǹ˜z‰±¯«¬±¼ÅÆÃÍÒÌÙÝμª—†‹——’•š §Ëâéèæççééêéëíîïîïððñóøúøöìäïüýýþþÿþþþüüûûüüþþþþþÿþþýýÿÿþþÿþþÿþýþþúúýýþÿÿÿþÿÿþÿÿÿþþÿÿÿÿÿþÿÿþþþþþÿþþÿÿÿÿþþÿÿÿÿþÿÿÿÿÿÿÿþþýüýüüýýÿÿýüþüü÷ð÷ùúûüûúúøøøùù÷õööõõõóòððæÐÁȾ´´¨—Ÿ©¼Þôúüûúõñø÷÷öòóôìÚÕàðõòéßÕÐÉÄ¿¿ÓãçéëàÛж£ž¡¾Óɸ¦œ—”…¯ÊàêîñððñïïíæΩš—©½Ôѽ¹ÛíñññðìÞ¿›¾åëìíìëâ¶miºÀ¥~IX„‹VB|¦³±‰6  # (66&;p‚ljnlka_XYee{”¡ ˜¢¤§¤¢£œšž—€vp\TUQZT]stR*  -  - ,c€Ÿ·ÆDZ §¸¿ÈȲ“—ÀÙãçéÞ°°ÏÛÞßßÛÏÁ¼ÀÀÄÂÀÃÁ®•–¡ª¢…gajˆš©¹ÆÅ¿¾¾ÁÁþ³±«œ’–®­¬º´¯·­e$  - - /=>DFC?5) #".6=Uk}ˆˆƒxheb]SD==BPGOQ[fv‰””‰mN;103/277''BYcfihmlifX\fkorpidhw‚}zkXB:=INKD;,!  -   -   - 1B@:-&$&*#'' %#-1411,(0+$-8?@>24219>8;;88003;20&5IRPE?=E<7==CLUWWJPRKLJRSSSJPONRGKKI@A=?;-"$""  -  Y¯ÇÏ××Õ̾¡lf\^xpur…‰‚¢ÏæèܵšºãîòóöôóóóóòôõòòòðëÚ´ž˜š—š²ÇÀʾ®ÁåèÅÃÓ»Ÿ—ŸÀÍ—¦¢œ®´¶½ÍÔÖ×ÔÍ»²ª˜†œ’“¨°¦™Š‘˜€Ÿ³«„bpƒ‡Œ”¡®¾ÆÍųŽr~¬³®­ª¹ÀÅÂÌÑÍÑÕÑÁ´¡†‹š˜”•’ž­ÅÝçèçéêìíïîðòñññôòññõùùøöïéî÷úüûüüþûúøôôõöùüüüüýûýüùúüüûûýýüýûüýúôõúüüýüýüýýþýûûûüüýýýþüýýüýûùøüüüüýýýýýþþüüýýþþýþüüüûú÷÷÷õúúûûûûúù÷ïð÷úýüûûýúúøøùùù÷øøø÷õôòñíáƸ¿µ«©£Ÿ³Âè÷ûýüúôõù÷øúøõôëØÎÞïôïéàÖÐÇǽÀÖçèèçßצž®Âij£›™“©ÏáéïòôóðïðíëÛ·• ¸ÑáÙĶÒéêîííèغ´ÚéëëëêÞ±jv¡ºÆ¥xNSƒ„\Ft¨´°9 $!!$0." -@jˆŒ}rr„hfg`Q[agrˆ—š——žž¥¢ Ÿ£ ˜ƒ|raR^TXZdw{W2 - &^ˆ¯ÂÇÅ´ ¤«·ÃÈ°“˜ÃßæçäÛ§¥Ì×Ú×ÛØȺº¾ÂÈÇÁÂÀ¬’ž«¡ƒgbjˆ“§´Á¾¸¼·»½¾´®­ª›”œ¥¥°¸±´¿¯\$    01=DE/!",9O`^QGKQW_egR:1@M`gqnhgrkXYVLm{wmbX[hks]^v— ›•ˆƒ†‹„Šˆ‰‹„€ˆwtysgjjQ]`RNGD<* !):Vg}„|idfpkeZU^o‹‘ˆtsu}Š„shOFf‰’‹|aWS@'         KMIC@DDD@:84&!*-(""4/%,5848=JTG73DHPT>0'9NN4 +:><7>>CIB3-"$"!'2:Jfz„†ƒ}ka]VRD=;;@GKQ]gq„•“‘{`:2-2-*24,!8FYdhgkjijWX^enmllqcps~~wbMBAHLID8+%  -  - -    -  -AD6)#$$!&3+% !,7-43?(,)('+0>=82535823B<<<<8/<88+5JUNG<=CDMOND?600J99@/+G^aI849=?AD?05BFKQTQKOSNOTWRKRPKMPPNMMC><2@8+"!!  - -   ]´ËÔ×ÖØÏÀŸha\g|—ytsq†„‰¡Èâßͪ™±ÜëìïïïîïðòòôôóòðìëÙ°š™žœœ°ÇºÅ»®¼áæÄ£ÇØ· žÃÐŽ¡œ¡¦°´»ÌÔ×ÙÙÔŹ­ž„Ž“šŽ‰Œ¯¬Ž™…ƒ µ«‚eh|‹‹Ÿ²¾ÊË­Š}€¦²­§¦¯ºÊÀÆÑÍÅÏÒÅ´©ˆœ”–”œ±ÂØçëéêêìïîïðññðóóòñô÷÷÷ùøóïîöùùøúûûúöñïïïðöùøøùøøùø÷÷ùùùùùûùúûûùùóöøùúûúûúúûüù÷õøûüúûûüúûùùûúøøøúùüùûüüüüüüúûúûúûûûûùùøùöõõö÷øøø÷÷÷÷ñõùûùüúûúùùùøøøøõöô÷öôòòðèÙ¹±®­§¡Ÿ¥ºÏðüûüüú÷øùøúúøùõéÔÏßìñîçáÖÏÐŹ¼ÖãæéçÝÔ¬–ŸµÄ¶Ÿ”•™—Œ¦ÍèîðñóóòðñðìáÉ©“˜¯ÉáèÞƸÕéëííîêÙºœ­×èìîíêá±m†°ÃÁ§uIP…‚`Lo£²­‘<    *')23+@h}Ž~jkhlefaXXccn…•—–Œ’œŸ›Ÿ©¢˜ƒpjfZMW\]bzƒh:  -$Kˆ­¼Á¿®Ÿ—§¯¾Ã«’™ÃàèäßÕ©§ÊÓ×ØØÕÆ´´»ÈËÈÁÂÀ±Ÿš¥®¡‡kgbx…”¡­»À½Á·²¼º´³­§ ž«©®ºµ³¿Æ¯R&  -  @*5>G7 "&(+BaaZF=AK[[^P91>=D:86) ")+&!"+///4612@KTK94ALLPC/+6JT@% '3>85<@>C=9,"#'-6C\u„€…ƒn`]\QG<8?BDNZ`iq‚‘•”‚nH311))-+*,*FX]^dicbe_YV\fkikshlz‡~vkUD@HOO?8-!   -          -(8A1%$)+1-)!$!%()69@3.0.((/03?6-0/;66<=?GXiolbo|xi^UP[ry|ui\Uaaif]ZœŸ Œˆ’‹•’‹…‡ƒ‚~ƒ‚vy€yk]_dbUH>/ - #0DVh|wsd_ijfa]L^sŒŒ…kmu„ˆsYDC_wƒ†~sdMB;&      - JMHCE=>=FC:.0&$)&#"%-/,.2;..4:FJOA+&0HUE, - %,6::;>?@:9.$!'(.HTabk|Œ—“‰uW:-*.''(-13'*4;3=<<=?>9.,03(# (7LNM?=;BHKB=?<153B@5811K`]JC68?HLVefP9=AU`hmhjz‡meNCVjysuj^[]hol]`t•š™™‘‡’‘‘˜™›–—Œ‘ŠŽ‹Š‰†‡ƒƒmekgbaR>, ,3D`y}{i^ohkm_IQrŠŒ{hez†……wiF>LixwxoWE72 -    - - JKKF=@A@A:5- #',$  +)'&/3++:LWP>47AEPI4")BUP3 !%2??;?I>@80!# '%&5Gat‡ƒ„€kbbbQFA<92+28;538:==><0/53%!*8FMOD>:  -  - ")8.  ,Ywzjopgqib]epsv}y€”—Ž•¤«¤££¥¢™š‹zocUR_Z]bp{=  5qŽ–¦¬•†¢¨¸Â­“”¼ÚáÙÔÊ¢¤ÇÕ×Ø×Öɸ³¼ÅÈÁ»½¼µ£• ª¨’yb_eu‹°¹ÃÐÚÎÍ×ÒÅÀÅÈį§±»´°ÀÐĤv:    -%;GM. #&&$DYWM=1BTT[[T;# -.=Yuuti_dcff`VQf|…Š‹rjqx|ƒ~mP:B]p}{rm\E>3     -  JJII@>=;5:5.##*.)&#&%&!(+''8N]WB13AMSM8*0=OS> $29B=IU@E@4%"%$#(#1@Yr‚‚}rb\`XL@;689;AE;2:=FDUWNQOJRMLTQONHIITUSKKIG;083/"!   d¸ÏÒÒÖÖÍÁždV]]‘ystrŒŠ…ÀÚÝàÏ¥¯×çéìííïðìïïðîïñîëåÓ«Ž–›˜¯Ã»Ä¸Ÿ¬ÕÛ°˜´Ã¬ŸšŸ¼À˜‘renŒ¥©¶¼ÆÉÏÕØÓʵ—“‰‰’›”ƒ…”¨›“„Š”–¦˜dUt‰‰•¬º¿¿µ¨‰w€“©²¶¬±³ÀÍÄÀÒÐÈÌÓ˸¥~˜˜®¬·Öêìîðñðòóóòóôõõõõöø÷ùøøøùùøùùøùùüûúüüûûúúüúúúûüüüûüýûüýüüûüüûüüüüûüüûûüüûüüûùøüüüþüýýýýþýûüýýüüýûüûüüüüüýüüûüûûüûûüûüýûüûûüýüüûýûüüûûüúüûûûûûúùúùù÷øö÷öõöóîäÓõ®®©¢™¦¾æùüýþþüüúùøöúüû÷óéÚÍÓçîðîæÝÓÊɹ±ÅÖÝàáÅ£“¢º±š’‘˜™˜¿ìùûüüùôôòññíäĦŠŒš½àëíëãθÕêìïïïëàÀ—«ÛëîïïëàöÁÁ·³¥rPHsuQ5j¦¥‰G -&! ,:%#Y|yiopqpvkial~wy‚ƒ”˜’œ¥®±¥¡¨¤œ“ˆ~seXR]habz’y8 -  0b‚’¢¡Š…•¡¬»½§Š¹×ÝØÔͨ£ÅÖÙÖ×Öп²ÁÈÈ»»º´¡–ª«og\bsŠ›«·ÄÓÙ××ÜÒÈÅÈÌǵª±º²®Àļ°„@! -    +4?B7! #$$?ScYB4=BIO^XD29NdjepihrrgZLP^uorqhTS_qrlYgzŽ˜’˜ššž¡™˜¡ž——š—’–“–’‹ˆŠ€ukieRB+  "0Kfxuhb^efab^N[wƒ†ˆ{eowwxum\79Ohrslo^@A7- -   -  MJHD?@>>:::3"!!-,'%""%*&""'')9M]^K37GRRJ;(&4KQH% %,5<>98BC?>2( -'&'+8Kdx…{}ubaaWPE86;;?JOVc{•”‹sS7,)&))'*(  ->JW`da\\SQSY[efcg^_ioxyn_MDC@>;7*     - - -   #480(!%**"(.-$'%#! '+1465;2.,,*/29>72/4=9489>@;348<4+*"+8GNHDABHJHKKA;2067:9924WkhI78>:@?@927;HIOPLMNORNNNQOOFNFJURMQLC=<40,#     - f¸ÍÓÕÖ×ÌÁšie`d‚“ur{wŠ…¥¾Ùàßͤ­×åéêíïïïíííîïíîîìåѨŽŽ™–•²Ã»Áµ¤­ÕÛ²¸ÂªŸ˜›·Àž•vu“®«±¹¾ÇÊÐÓÓ̺£™‘ˆ”˜‘‰šš’‹Š• ™rWi„Œ’œ©¾Ä¼³£~z™ª´¸®©­¾ËÀ»ÐÓÎÊÏÍÁ°š|„’’¡«¯Çãìðññóóôóóõõöø÷öö÷ù÷øøøùøøøùúùúûùùúúûüûúûúùùùûüüûûüüüýüüüûüüüüûûùûûüüüüüüýûøùûüýüüüýüþþüûýýþüþýüýüüüýýüüüýüüûûüüüüüþýûýüûûýüüüüüüüüûüûüûûûûúúúùùùøøøøôóõòëßÕƵ¯­¥—–«Îïûüýþýýýùùù÷ûýûøðåÕÄÐäïñíäÛÑËʶ¯Å×ÞÛʹ–­±›Ž‚ƒˆ‘ ½åöûüüúøôóñòñìàÇ¡…ƒŽ¼áëíîäͺÔèîñðïìß¿›©ÚéëîîëãÖÍÄ·ª¨–nLKv|V?e˜¨©ŒA !!(4'(]{pnnssohednv{{“““œ©¬­¡œ£¢”wtdZNT]bh€™{?  9gžš”‰§²³Ÿ‰Ž´Ð×Ø×Ñ®ŸÇÛÛÛÛØ×­ÀÎÊƽº¿·ž‘ ª¥”wa[esŒœ°ºÂÏÕÔÕÕÏÇÅËÑ̺°±¶­«º¹¶¶‚A- - -  $4AK0"!&:J\`N?7ENZclzŒŒ†|gE-$$$$'-., 3BOYd^aae_\NX\]ZRQU_p{‚{eSIEB?96/"      -  - - - -4A>3'!11& *.##! "! !!'-359:6,+.*-3;55<:0/- ,:BEA=7LZgi\JDHJ`oskdqpmg_RSdiwxvaQJfske_dy‘’žŸžŸ¡¦£Ÿž¡¢Ÿž–’—”š›•›™‘Ž‰Šƒrf[D) 0GXXZLS`fhjfXQZm‚…vkqlsƒ~sW70=[w~zp_L<,$ - - -  jBHHEB@>A?@2)$(,+.)#&)('%,'$(4EXaR7/;ENOD5&*BYX4"-1/+.4BC=4($$"&/26Rn‚…„‚ueSI?3*)27>DLS^do„ŒŽŒsX<%%()).+ -':IQV]^dic^TWXXJNZcnr}ƒylcKBC@74($  -    .;B8.*%-/%%),,$$# ')068:8,)++)2:<>75348255=D@=3025/1&##+.5CLI;A>:8128;12/4XiYR@:7847BE:8:?LMDKLKRNLHSKNNHQXULLOFOG>>36/'## mÀÏÒÓ×Ö͹™j^^jxoot…‚„žº×àáÊŸ«×åèéíîìîííîîìììëêåΦ–˜›±Ã¼Ç¹¢³ÓÛµšµÇ®š—˜©´›•’Š”¬§ªµ¶´ÃÑÏÓÔʽ¬š‘ŒŒ’ydq‰Ÿ«ž’¥“`Qm‚Š‹‹‘°¼¼»²¨‹‚†¦²ÂÁÂÄÊ̸¼Ï×ÌÈÌ̾¦Šz‹—Ž–¡Ÿ­Êåíðññóðòôòôôôõ÷÷õ÷ø÷øøøøùùùùùûúúùùùùùøøûüúúüûüüûûûûüýýüûüüüüüûûýüüüüüüýüüú÷øûûüýüüüüûýýþýüüýüýüüüûüüûüüýûûûüûüüüüûûüûûüüýüûüûüüûúúûûûúúüøüúùùøøù÷ùøø÷õóíá××ÓÊ´£Ÿ¦¾åõúøü÷öþüøøùùúûùóèÚÉÄÐàëñîåÙÎË͸®ÃÓÛÔº¡˜¡“v][cct£ÀÚ÷úüþýúôððòîçÞη¦Žˆ™ºÛèëìà˽ÏèíîïíìÞ½’§ÔéëìííéÚ«ž´¨VPwwZ?K‚¢¢E    " $'0"Hqskcktyiahls€}„€€Š“›£©¥žœ ¤¦™”ˆ}qmLHX_]]q†b- 3Zu†“Žˆ€†ˆ•š¦ž©ÏÜÛØÕµ¢ÂÛßáßáßȱ½ËÎÆû¾¶Ÿ’›©§~hagv‘°ºº¹ÅÒÕÈÆÈÅÇÛÝÝÍ»¿´¥¸¯¦¬«e:" -  !!&=J: - !($,HZP?25KV_`bUF=JajnphlqqhZNBXgoqreZM[lph^]tˆ”“—– £¤žšŸŸ Ÿš”—˜—š™‘”‘‹„ttlU0 #8LXUWRUdnld[ONgŽˆ†rgmn|zwmI1*Jq~vo`L:84    WLGHFDGB><9." %*.*,$',,'#%%&&/=R[O9+.ARXI7((7.!   -  - -    - -  - - 2@?<0#.-!'/.'*"#""" )032721(&.,,/@7492242.4?HA7/2501-%"%.3?IID8:2.27685//NdkH9979;?A9629BEEtB@HJJLMMKLRLOSNMPPHED;:1-.)"))    - -  -u¿ÏÒÕ×Ö̾˜jcdk‚’skqpˆ…‰¢ÀÕÝÞÈ›©ØèééìïîðïîîïïííìêçЪŽš”‘±ÇÀÉ»¤±Öص–³Æ®™™˜®µ™‘’‹˜¨§¯¸¶²¸ÉÏÏÔÏÅ´¦š“‹‚|nn}Žœ¦§¡”™dVh†‡’’—«Á»­£‰}ˆ¨°¾ÁÃËÐÏǽºÊÔÒÈÉÊÇ®~’˜ˆŠ• ¢Ààëïðïññðñòôóõóõö÷ø÷øùùø÷ùùùøùùúúøùùùøøøùûúùúûûúúúüûüüüýüûüüüüüüüûüüûüüüüüûøøûüýüûüüüýýüýýþüýüûüüüýüýýýýüüüûüüüûüüûüüúûüüûûýûüüûùùùûûúüûúúüùùøøùùøùøøôõñêÞÔÓÐÉÀ³¥ ±Íéööøùýýüúøøøùùù÷òêÜÇÁÏàëïîçÙÑÍË»¶ÁØÚʱ¡¯‹`RLSXi¼äøüýüûúöïðñêÚÏÁ¸«›“ »ÚçêìÞÊ´ÐåíìîîëÞ½–¢×èëíðìçÔ´˜Ž¯¿±†OMw\:PˆššJ - !$'!4/ Lpxjjomtlh]ktx„€ˆ•¡ª§¥¡Ÿ«¤˜‘†€waYMPYa^ryi2 3YkŒˆ}‡’—Ÿ˜ƒ¡ÎÚÚØÖ¼¡¼ÙÜÜàáÞȯ·ÈÉÁ¸´¶¶¥”™£¤’zcWg~Œª·»¼¿ÌÒËÇǽÂÝãßÎÀ±ª»¯ªµ¢_/   - /ED?$  &DVUM9;GO[[_L;>H\ipwmfguqaSEL[gjo`VR[jiiaYb‘”’––˜žœœ˜šž› œ–—˜š•“™––Ž‘‘‰{ypZ;  !.GTUR[U\eejg[Od†‘’uhkz…}w`:+5apbg^N:7*# -     - GLJJGDC>:22.% +&,(&#-.#!(.+0:MWM;)+7JUN<'&;Q_I&).-++-;>95.$ " "$-9B\x}zwrX9%#*6?@@EKTfx†‘‹qN2)("')+& (A@HRYXcef_ZY^dllefpvz{qgMTB??4)    - - - -    /AC=3)&-+%'*(%%!## $)(/1-2.))&')1??;53370+3;;:5048:41"&-3@AD@?>FIHJ?@71,/1332)1OgY>52668>=9.2;FBTaC;@JVRTK9?JWfo~vnjuxnMJAVgsvhcN[ekjcX_wŠ¡Ÿ˜›¢¢   Ÿ¢¤Ÿ›ž™ššš˜™œš‘’˜”‘ˆ‡sL,  (8P\_aPWZdjcZIVt‹Šƒspuƒ†€~iF,$MijqcQA1#$    HGKNLLH?6,+? #%!!%#/-2#*-0(/@JC/#&3APP8%#/J_O)  #+,++-4/( """$/*47Hirph[C%*0;9:9;BF[vŠzR-%%#&(" 2BFORPV_db\[\dlnhdgmv{siTHDB:0-        - - 4BJC2!.+')$%&&# #"$'!#&+*054*&"&&)8=:5,787,036669636853#%16BD?;>=EDEE@:62),7430'2Rh_F5402@91#"!# -t¾Ð×ÕÖÖȺhe_l‹Œmjup~‰¡¼ØÞÞÇŸ±×æèêìîïïïðïïííîïíçѧŒ•œµÈ¾Ãº¥­ÔÛµ¢¸Ä¯Ÿ’•ª¶—”ƒˆ¡´²Ážº³»ËÑÒÕÓÁµ©Ÿp~Ÿ–• ¥ŠŒbPdƒ‘‘ŒŒ¨Á·¯ ‹ƒ}‡¤±°±»ÄËƼÁÅÍÔØÌÀÇÊ¿©‘~„‹Œ›¢°Ïäêïðñïðñòòóôôôõõø÷öøøùøúøøøøùùøúùùùùùùùúùùùúùøûùùûûüüûûüýüüüüüýýüüüýüüüüù÷÷úùüüüüüüüûüýüýýüûùüüüûüüýüûüüýüûüüýüüýüüüûûüüúüûûüùúúùúûúùûúùùùø÷øøø÷øùöóñêßÕØÍÈźµ²¶ÅÜìñôùøúüýùôîóøûúøõëÚÏÂÊÝëðïéÚÎÏͺ²ÇÓÆ­ ©Á¸‹bNIJO€ºäñúýýýýúôòòæÐÁù³ª ¤§³ÎÛßâÙÁ·Îæëíìêêá¿™¤ÔèìíííçƈgŒ­¯šfEGtw];F~žš‹A $#%,'&MsmkhrvhhkgauŠƒ€ƒ†‘¡¦Ÿœš¡¥¢˜’‰~xeWU\^bar~]2 *Ycp€…ˆxnƒ‘Œ“}™ÂÓ×Üß˧¶ÐÖÕ×ÚÕî±·º¸³´º·¤’œ£“xj^dvˆ¡¾ÀÀ½ÇÓÐÎËÊÒßèßÍÁ½°¹À¹µµ\*$  #)>B;  ,0DUI@9;KT^f\HHENcpporiikr`J;Qnw~ygOR[flnaYdŒœ¢ ¢¤¢¥§§¤ ¡£¤¥¡¡¡¦£¢¢ž¡Ÿ˜™Ž†€W,  -!.H`gbTTXgea\HOj„Š}ktz‚‰~qS((=BB=?@E54/),8965)852:DFIEEKINJHJLFKDJGUVVSOIG>>A:6.))$* -(xÃÑÕÖÙÔʾ–hb`f‡‹mqr„y‚ ½×ÝßƘ®ØæèéìïðïîîîìííëìëèЦŽ“žŸµÇ½Ä¶¢°ÕÛµ˜¶Ä®žš—®¶’—˜”Ž ¶´ÆÓ±ª´ÀÎÒ×Õɾ®£–}‡›ž“ŒšŸ ™‹‹kWg’Ž‹¨Á¶­£‹…|Ž¤¯¬³ÅÌÇÁ·¼ÇÊÐÔÏÀÃÌů~Š‹‘š­ÆÝëíîðîïðñðñôóóóôô÷õö÷úùùùú÷÷úùúùøùùùùø÷ùúù÷÷öùùùùøøùúúüüüúûûûûûüüüýüüüüýúõ÷ùúüüüüüüúùüüüûûüúùüüüûûúüüýýûúûûûûûüúûüüûüüüûüûùúûúùúùüùøùüúøúùøùø÷÷ôöôóòïèÜÓÒÎÆÁ¶³´ÂÑâíôùùøúûúöïïôøùùùõìÞËÄÊÜêððëÞÒÌ̽°Ìѹ¢¢¼Å¬…gMLIeŸÓéñúüýýüùôôîÙÁ¹¾¹²­¨¦©·ÁÍØÕ;­ÍäéìëëçܹŽ¡Ñçëíêêã¼kZƒš bKFfwa;/'%!!08:)"'0) #,74+&%"#"   "$Edn]># -  *32-%):J]WNMQSWRA55FV^G/-'1."   -   - -   KCC?:F==?><=1'+3/4216Le_C>66?>CI;45=AFQ?CEJIPJIKKNHFISOUPMPI7K^ehcZDQ_mljZalŽ˜ ¢¥¦¨¥§¥¦©¥£¬ª¢¤§¬¥§ž¢¦žŸœ“l< -  0U]eh]IYegaVMHe€‰Œ†rcn‚~|nd;"'?]lc\C,     PTJA@GA?3%    -  #!        )85& -  - - ##%6HB2)196* %25,",  - - - -    6FFE6*%)&$%-&(.# "&!),:4120/#+(),424*02563,38DDA@C??>C=892)-=11215N`TC<536@ABA73:<@C@:DJHLCINVOHMQXOHKLH@EF<60+"$)$!   &rÁÑØ×ÖÖÊ»“`_cu”pppp}ƒ}¡½ÙßàÈš¯×æççëëíííììëìêëìèãÑ¥Œ‰––ž³Å¾Âµ¡°Òض•³Ä«™–œ¬¬“•’‘Š¤¼ÆÓÙꫬ·¿ÏÙÙο¼¶¥‘‡›Ÿ•Ž‹”ž£¥ŽzgZ‚‘•–¬Á¸®œ‚Œ’¦±±¶ÉËÉ»¬±ÁÄÆÏÎÊÀÃËÀª˜†}Œ’—¢´Íàçéêêëéëëíëëìîîðîðîïîððïððñðïñññðóòðððññòóòòóöö÷öøø÷ù÷ùùùú÷ùùùù÷øøùø÷úùõïñôöøø÷ùøùùø÷öù÷ööö÷øøööù÷÷øø÷öõöóööõö÷ö÷öøööôöøõöôõôöõóóñóôóòòñòññòñðïíïíìæÚÎÊȾ¿»¯ª¾Óâîòûýúöôöðéäêï÷üýûöïãÐÄÇÙèðòêÞÐÎʼÈ͹¥®ÈÔÅ¿¯ˆgX^ÌãæðúýüüýüøòâÀ¤¡¸½¯±¨¨©­»ËÒÑʼ´¿ÒÜßÝÜÝÒ¸‘™ÆÞâåæáÚ©VKS_nw]FGh\:E~–¡’G #!$"+/- 9nnnqplfe\]l|Œ‡†|–¢š ¡££ž—…tcVRYchqom]B %Qhjz|~|u’’‡wŒ¯ÀÊÒÔÀ’—µ½¿»½¼®™šžªª©­«©Žš¢š‡pc[j€ ºÅÁÄËÒÖÑÎÉÈÙáØÁ½´²ÃÂÈŸ])# -  - *5EA&  - - /?ORF72>U[aVB:DWfqnhTDYhV=6ALRWXO;5Ccoqn^E_„›™–š™ ¢¤¦§§§ª£©§¨¦¤¥§¤¤£¢¡Ÿœ›—‘ƒsH   #AQb`EVVO.     NQKJDAG=;) -       - -    -  -   '/) "  -     -  - 4?FD:)$'&$($$%!!# #$ "*/1186+&(',)316520:;-,5??::001;;4' "(,6=B@<JD82.(,;45/';Q[N=8<6<@>B>48@;?>>:ABKIGJIQOMLVPVRRMMNE>:=.+&)$$ -"|ÄÒ×ØØÕÍ»f]ch~Žplns‡y »ÕÛÛÅšªÕááãèêêêèèèèèèêéæßÊ›ƒ‡”•œ¶ÄºÀ³œ°ÎÏ°–´Ã«•–¥°™•“¢µÅÕÙμ­¨°´È×ØÎÂÁ»ª™™¥œ’‹ˆ’¢¨˜€pr„‘œ›§¼¿¼ª™‘Ž…¤²²½ÉÊ¿³¬¸¾¾¼ÃÊÉÁÁÊŲ ‹ˆ‰–˜ªÂÙáçèååâãäåääæéêéëêééêèêéêëëìëìíêêììëëëíêêìíîíðïîïðññòðñðòòñòòòòîïïïñðïðíèçëíîðïðïðïïïîïíìììïïîîðñïïðííìëëìëîíííìíííëìíììììîìíëêêéêéèéèæèèæååæåææäãàÚÓËÈþ·¶®´ÃÚèìôûüüúøòíæáãëóûýû÷îâÔÇÈÛêññîâÒÔÐÉÑ¿´®¼ØÖËÓÁ˜hSl¤Õæêóüþýýüúöíظ¢ªÁ¾²²¢Ÿ¦°ºÇÉÍõª¶ÊÓØÖÓÖδŽ’¼ÓÙÛÜÚСU?CTmuaIs“ž”O"$#*$ "&60 Cqrosumpg]esƒ…ˆˆ†‡’›š¢¦ ¤¥š“Œƒ‚vm_LXfimnja?   &H]lw€ut›•‰‘Œv‰¬¼ÄËѹ’•¬·¶³¶»­”Œ  ¡¡ž§§œ‡Ž —lbXav–ºÇÇÆËÓ×ÓÎÉËÖÞÓ·µ§¶ÃÂÊÇ®”T2!  - - &5]H0*.3892*!"-NkwnO9Hp‡ƒ€ŠŽŽ˜—š•••“———Ž”’•†‚ypkbY8  3CIE7+2KQMA*%7YjoZA;LVWL8, 088.     NNMIHIDC?.  - -   -     -  -  - - - - - - - - -       -  -  - - - - -  - -  6JNC5&(" &$"#!&!%' &-/5;73+(%%##&061-004137:88;38174/'"*/9@D>:>AB?@A=4.)()3298+7M]Q;=9=<=BD758;:B<<>SwgD9fd8.k™¢œY  -   #&%"#%/3AiqplqunlfbdxŒŠ‚€‚‡’›ž£¨¨¨£›—‘†qnWFZeZP``hD  "Lfkn‚}‚—–‹ŒŒ‚‡¤²¹ÃɶŽˆ¡²²®³´¤‹‹’–œ‘––•Ž˜ ”‡gZ]kv–»ÄÅÄÂÍÔÖÐÏÓØØŲª£¾ÅÇÈ¿¢^4$ - - - %"   -  #*+",& .80=465/)(/037=>:<:?>98;732+,535+(6N\Q=57:;@@C:4246?9:;9CJGFIOJFJMKQRMNGBDHJ=>0#"  - +…ÄÓÙØØ×̹`ddh|ntqƒ{‰™£´µ¯›ŸºÂÁÃÈÎÒÒÐÏËÊÉÌÐÑÈò”†Œ‘–¡·Â¶·©•£º¾£­¸©”’¦©‘‘—”‹œºÎÙÔÁ¬§®¤«ºÅÕÐÊÊɾ¤ –” ¢˜ŒŠ–›œŒŽ™ ž–«Áþ³¤•Š‰‰ °´¿É­–˜ªºËÐƺÆÊÂÂËı£Š„ˆŠ‹œ­·¿ÂÈÊËÌÎÏÐÓÔÑÒÒÖÖÖ×Ö×ÙØ×ÖÚØØÙÚØÙÙÚÝÚÛÜÛÝÙÝÞßÜÜßàÜÝßáàÞàâÞàâàâäáâÜßàáßãããàØÚÝàææäãâââäâããààáâáàâáâäãâããããààáãáâààáâßàààÝßáàßÝÛÞÝÜÛÞÝÝàßÝÜÛÜÜÜÙÛØ×ÖÔÓÎËÍƼ¹·²­­¾ØéíìøþþüûõíäÛÙÏ×ì÷úùöíáÐÂÅÖäïñìÞ×ÔØãκµÐàÚÚäéÚ¸Ši‹½àîõ÷úüüüû÷è˳¢·ÊÒʽ±«£«°µ»½Â¾¶¥²ÀÇÊËÎÍÈ­Š‹¶ÊÐÖÔÐÆ›R?B`ŽfI?bj85iš¤žU  !'!*&)+)5. -=ejocinhhfaeƒ‘ƒ‰„zˆ’››¤£§¥§ •‘‰~}hQT[aWTblfK" -  Fdmsws}‚ˆ–˜‹‡~…›±´º½§‰…“§«­±³¦‰ˆ™–‡Œ‰‰’˜“†r\Whr“µÄÁÁÁÈÔ×ÓÕÚÛл·­«¾ÈÈǺ›‰\7#  -    -    $! "!"   -   KGE?BCA?9%"#s     - -     -  - -     -  - -  - -  - - $    - - -  -   - - - - - - -     -   4@B?5)$&&! '*+(% "##)"#)&,196-&&%"$)(61%*,./-*38?;8423334) .//8>=99:BA8?;0.))*:42.%6O[K:375@?<@<:>5<>=9?>AGJKBCPQOPLU[OGEJFB@66-/ $! - ,‰ÄÒØ×ÙÕÈ»“c]_g{Šrmpqyx…“¡®±¬˜…¹ÁÀ¼ÃÊÎÉÇÈÀÄÅÉÍÍÊÇ´“‡‹’’Ÿ·Â³¶§•¤¼¼Ÿ‹£«§•Ž—¤§–””•‹Šœ½ÐÙÐí¡¨«©±¿ÍÑÌÉÊĬ¤ª –™ ›ŽŠ‘—ž™†‘š–œŸ—©¾Ã¿º¬Ÿœ˜Ž¢²¶»Á»¥Š“£´ÅÏ˼ÆÈÃÀÊȺ§“ˆ†Š†¥µÁÂÃÊÌËÍÍÓÔÔÖÓÕÕØØ×Ú×ÖØÙÚÙÚÝÝÚÛÝÛÜÝÞÝÝÝÞÜÜÞßÞáßÞßÞÝßÛÞàÞÞáâââàßáßÜÜáÞàáßáÞÙ×ÛàââàáÞÞÝÝÝÜÚÛàÞáÞÛÜÜßßààßáßßßÜÜÝÝÛÝÝÚÜÚÚÝÜÛßÛÞÙÚÚØÙÙÖ×ÙØÙÛÙØ×ÔÕÕÔÑÒÓÑÒÌÇÆÃÀ¹µ±­©°ÂßìêìøüýüûóëâÙÔËÕéøúú÷ïâÐÀÀÒåíîêâ×ÒãæʼÆÝÞàçëëݽpˆÇæðóöûüüýûòáÁ¦¥»ËÑËÁ´¨¨«®´¼Çɶ®±º½ÁÀÂÈįƒŒ²ÇÏÒÎÌ–LEUi‡‹gE>d€qC:g—¤¢\ -     $%$"#+2 4golkihdnegk}Žƒ‡†ƒ‡’–¡¢¨§¤¡•Œxyc]WX\\\munB #>Qpzxy}~Š—•Ž“‰q€šª­´¹ †‘¡£¬¯°«”‡Ž™‰€†’‰†Žš™ˆnaWbw“³ÄÄÅÆËÑÑÕÖÙØƵ·¯±ÁÅÉȶ‹gA!! - - - -    - - - !     -  -    IBBAI@=;6"(/  - -  -     -    - -  -  -   - -  -  - -     - -   -        - -     7GJG8# '&%($#"'!!!#**..891,' !!'*..(,/+/.-5>DM522767(#"#+-56;9<76IOC-($'.**"&(# #!#0217?00( "%331&/1-0.7=:GH:685=/,! )+25>@<8=B=<@C5/+.*152*$.HRI@6663-.108<366:AIHHGJGGNTPKHMEBBEB950$$ "  1ƒÄÏÖÙÙØ˽’h``ey†u|‚x†y„œœ£Ÿ™Š¯º³²µ¿¾Ã¾¹½»½ÀÆĽ·¤‹‰™˜ª¿³­©™›²´£›¦™‘’“£ª››–‘Œ ÁÏÓѯ‹ «¨³¿ÉÊËÎű¯·°¡“–Ÿ¢•”•¢£—™¥š˜–§»À¼·­˜š¢š§¶ÁÇÆ»”†™§µÂÍÇÂÃÊÅÇÌů˜„yŒ ¨­´´¸¸¹¾¹½¸¼½½½½¿¿ÁÁÂÃÂÅÃÃÂÆÃÈÆÇÈÇÉÊËËËÊÌÈÉÇÌÊÈÉËÍÊÇÈÊËÉÉÌÐÉÏÎËÌËËÊËÎÎÍÐÍÍÍÉÊÉÉÇÊÏÍÏÌÊÍÐÏÎÌÉËÎÌËÌÎÏÍÌÏÎÎÍÊÎËÐÍÎÍÉÏËËÈËÐËÍËÇÇÊÍËÉÊÇÊÅÇÉËÈÇÄÉÆÆÅÄÁÂÁÀ¼Â½»º´®ª¨¢¢´ÔèìéðúüýýûõèÝ×ÏÂÈä÷ùùöïãÏžÐäìïêàØÜÜźÌááâïôöóêË•~”ÊåìïùýûýûôäǨ§½ÈÊÌËÀ¯ª¥ª­¼ÆÎÓ˽®®¸Â¾Â¿Á«‰ƒ­ÂÎÌÆÆ×UGNnŒ‹iF5dŠ|D5aš«¥d&  $-,())))  1^imquwk`]cp‹‡ƒ|„‘•Ÿ•Ÿ¤ œœ‚}ƒrie^_jnvnjE  -$@\~‰‡ˆ~ƒƒ–ž’“‹uq”«®°­š„Œ–£¤© Š}‚€€tprŠ‡xŠ••Š~hT_w†š»ÆÊÈÈÆÑÔÔ×ÏÃÀÁºÅÎÉľ ¦¥u=$  -  -  - -   - -  -    - - -  -  - - -      - -        - !       FCEEC>>;3#  - - - - - -  - -      - -   -   -   - -  *. - - - - -  - -   -   - -  -   -        )ENK?0 ""))*"%(!$! #'35780-- '1-)(-.,1148A=<95440*,%"$'-354776:?A55?053(3*/20-.HOB8502<<<>6/1.-;847;HE>GJJIJNKQSLDFJHFEC=5'*%  0ˆÆÐ×ÙÙ×ɼe^]g„okxuyq€˜˜ ›–’†š¯­°®®¸½¹´´µ³µ´»·¶³‹†…‹“˜±¿·´¤ª«š‹ªœ—Žž¢šœ“Ž‰Š¢ÀÌÓͽ©ŠƒŒ¦¢®¸ÂÉÊÏÈ´·¼¶¦••£œ’™©¥ž–ž¦™™ª¼¿Àº¨˜›¡«¸¿ÄÄ·“‚†œ¨«¿ÎʺÀÌÇÄÇƶ†“£©¯±µ¸¶¶º¾º»ÀÀ¿À½Ã¾ÀÀÀ¾ÆÄ¿ÄÇÈÇÇÈÌÈÆÆÌÌÅÊËÈÉÊËËËÈÌÊËÊÉÉËÊËÎÌÌÊÍÌËÎÏÎÌÏÐÒÏÌÎËÊÏÏÎÎÄÊÌÏÌÊÌÎÑÊËÍÍÏÎËËÏÐÑÍÊÍÏÍÌËÌÓÐÍÍÎÐÑËÎÍÍÐÐÎÒÎÌËÊÏÈËÈÈÊËÊÆÉÉÌÉÈÅÅÁÃÄÁÁÁ½À¹´´µ±­¦«·×èéëòùûýýûõìâ×͸ÀáóùúõíâÐÅÀÌßëêçÝÙÞÑ»¾ÞçäéñõöõìЦ‚“ÉäìñúýûüùïÛÄ©ªÂÌÌÐËÀ²±§ª²µÅÐÐËÁ¯­ºÂÁÁÄÃÁ«ˆ„¨ÆÍÍËÊÀ–S?QwŒ‘lC6_ˆ}B0k£§ž`   "$"#'#.8-+,\lrsywh`cds‰Š‰†Šƒ}‰•›šœžŸ›ž”‰ƒ‡vh_P][gtlhQ$ -;`…’‚}„–¢›”€z|Ž¡¨¦­˜~‚•—¡ª¢ƒr‚Š€wlg‘‰u‰•›’}j_aj|›²ÂÈÉÇÅÉÌÒÙÐÌÓÍÃÈÍÇø©«¦w@! - -  $'!     -    - -    -     -  - -      - -          - - LIDEB=83,  -   - - - - -   -      -    - -  -  - - -  (  - - -   -         -   - .HSI?2 #!&%,%"$!"*!#""#%*1861"( &+-.,'&/.1/+379:558:04+!$'"-06==2/7=::<:4:2.28234-4>KE<1578FGB700-9C42:@J?APQFJJHHLMLH?CHB@?40*-& ! - +~ÄÓÙØØ×ʽ”ge]a…–xkom|nz›“™Ÿ›”‰š­«¯§°¶º»¶°°³°³²´¶²Œ…‹•°¼µ¶«•™«¦”‘›§Ÿ˜‹œ¤›—–„‹£ÂÎÕ̾¬™ˆ¥ª§´¼ÆÌÍÆ´µÃ¹«£‘– ”Š”ª¬¤›—šžš§¼¿½¹©™–œ¥¬µ¿ÁÀ°•}ˆ¡­­»ÌÎÄÂÊÈÃÃƽ«š–¡¨®µµº¾º½¾À¿¾¼¿ÄƾÀÀÁÂÁÇÆ¿ÄÈÊÉÊÉÊËÍÎÌËÑÌÊÌÎÈÐÐÍÎÏÏÍÎÐÎÏÍÑÑÐÒÌËÐÐÌÓÒÒÒÓÖÒÐÒÕÑÓÔÏÒÐÐÐÑÐÓÏÎÑÖÕÏÕÒÑÔÔÓÓÎÐÒÐÓÕÑÓÕÒÖÖÑÐÒÓÐÑÕÓÕÓÔÓÓÓÔÒÒ×ÐÎÐÓÓÒÐÍÌÑÍËÍÉÆËÊÈÊÅÃÄÅ¿½¾¾º²­²ÂÜééîñöûüüúòëçÜÌ·¼ÜôùöóîãÒÀ»ËÞæéçßßÜʵÏëèëðôöøöîÔ­†’ÊèëðùüüûóäÒ³¶ÇÍÎÐÉÀ·¬§¨°¹ÇÔ×ÒÄ´¯½ÇÅÅÅÊÄ®Š~ªÈÍÑÐÎÄ X?Us“‘m@=jŒ‹D4m“˜•\ !(#%*4(ZjpnyufYZgp‰Œˆ‡„‡“’–—ž›šž˜ŽŠ‡ˆ‘bYZ[afxrnL! - - 9`}“’™›”‘ŠwyŒœ££¢˜ys‡•–¥ª¡ƒ|s{ohv†‘„x„–‘r_W]kˆ²ÂÅÅý¿ÈÒÕÓØÝÑÇÐÍÄö§®©|D# - - -  >TUTI1  - -  -     - - -  - -   -     -    - ! # - - -      OOFFHD>9&  - -  -    - - -     - -   -  -  - %+ -  -   - - - - -  -  - -  -  -    -    8M\JA* "!#&)# $%$#"*/+892+$+#($-0440//4./368:252594*$ )8H713:99BB3(42?95.3=@A:FJEPLMJNLIFC@BJE?:7((#" - -.‚ÄÓØÙÚÕʾ•fgbi„qorp€w€›š›Ÿ–‰š­²«ªµ»¼»¶±¸³³´¸ºµ®‰Šˆ™³À±µ¶«¢¬­œ–¢œ’“£ª—™—‹Š¥ÅÔÙ̾´£’Žž¦¦­·ÂÉÎÅ°¸Æú¬™““™›‘’¦®¬§—•œŸ©¼ÂÁ¹¨™˜›¦®µ¼ÂÁ°Žt‡¢µ³·ÀÏÏÆÈÍÃÁÈ¿¶«£©±±»¼»¼ÃÅÁÄÇÄÃÅÆÇÇÉËÉÍËÌÎÉËÍÍÐÓÔÐÐÒÐÑÕÓÕÒÕ×Ö××ØÖÔÖÕÕÖÖÓÒÓ××ÖØØÙÔÖ×ÛÚÛÜÝÙÜÙÚÜÜÙÖÔÓ×ÜÙØÙÛÝÙÛÝÞÙÝÚÚÙÙÛÜ×ØÙØØÜÝÙÚÙØÛÛØ×ÙÙÜÚÚÚ×ØÛÚÚØ×××ÙØÖ×ÖÚØØÙÔØÓÒÓÓÒÐËÊÈÉÇÆÅÇÄ¿À¹´¹ÈáæéîññøûûõëéäÚϺ¾ÛðôõóìßлÆÙæìçáÞÓ¿½âìêðòöù÷÷ñÞ±™Íæëñøüü÷ëÒɸ¼ÊÍÒÔÌô¬¨§²ºÌÙÛÖʲ°¿ÉÊÍÊÉųŠ«ÅÎÕ×ÑÉ Q>Os’”lC>a‹ƒF4k‰‹‹Z -  - ! %-5" -  )Wlkfv|h^^ow‚Œ„Š…ˆ’‘’“’˜¢ –’‹‹•wid`aifu|kO 3:[ƒ•“‘†Š–›•’yp‡•¡¡š…w…–““¡›Š€sssoswŽ”ˆ{‹“•ŠpcV[e|žµ¼ÅÉþÀÈÏÒÑÚÜÎÈÏÉÁ¾°¬­§v;& - -   'HjrxdG/*---.  $  $ - - -   - -     -!,4 031'-LUH'(4*#$.5:?:1&(056'!  -     OKKEED?0#    - -      -  -       - - -  - -  - -      - - -  -      - -  -  -    0PUL;, " "&&(#$"! ##!!(&&474,$'((%-062'0;55179=833643.)%".:<;45;>B=@822025;33+/4DLD6476;E@4. 4844-&15@DC@CCNNKMRQNFGCDDF:85+($!  -.…ÅÓÖ×ÙÔɼgdbf~Œspuvƒ‹œž¢¢¤“‰™²·²µ¼½ÀÀ¼½¼¹¹»À¾½µ›‡‰Œ‘›²¼­­¬¯°°®ŸŽž˜”‘ŽŸ¨—’‹Š¥ÅÓÖǺ²¥˜— ¢«¬¸½ÄÎÅ®¹ÇȽ¬¦™—››œšª¨¬Ÿ‘‘ª½Çö¡‘–•ž®µ¼ÃÀ®‡p‹¥¬­¯½ÏÐȾÊÉÄȽ¶²¶¼¼ÃÅÆÅÊÐÍÌÑÐÎÑÑÓÐÐÔÓ×ÓÒÕÓÓØ××ÛÛÙØÙØÙÜÝÜÙØØÝßÝÜÛÜÚÞÝáÝÞÞÞÝÞÞÜßâÞÞßßáàáãäääàåäÞÚÚÝÜÞàßáâãäãàââãåââääãááàßÝßãÞßáÝÜßÞÞáßÜÛÜÜÛÜÝÛÞÞáàÝÜÛÝÜÜÛÛÛÜÙÛÛ××ØØÖÕÓÑÑÐËÌÉÊž¹¹¼ËßãçííîøúúôêéáÜʵ·×ðòôòíÞÐýÆØäèæâÛŵÉâéïõøùùùøó໑¢ÔæëïúûúîØÎÒɽÀÌØØ×к°§¨¬¶ÐÜÝÚ͸³ÃÌËÒÒÌǯ†ˆ«ÆÏÑÕÔÌ£V;Ns’”uN:dL5R€ŠŠX    - !!!//"  UekmvtjaZh|‚…‰Žˆž““’–žš™˜‹Ž˜—whb`dhpvu^B!@]€–—”Œ‹‡š¡š—Š}r‚“£ª¬Šz}‹’–”“khlnlir‡Œ†v‹›•“|b]V^}®¹ÇÌź¾ÅÍÌÏÙÚ˿ȼ»²®«žp5 - -  - ,L`lzlS6?HKQB7#3CD>>6*0711#*463(/:G><2;CF9- %1 '1+*0! - '*7?-9DTcY<,6JdsgaoŒtQ@>IUcX979:AM[WG95-3<:64*"    -NNHJFG;.!  -  - -  - - -   - - -      -     - - -   -         -+  - -  - -  -  - -    3MULC5&"))$'   "$! '#072+*&'"!$020$)131..38>@2*,-0.-$"&-479579?>>@54-+.5512142BMC5789B?;;3,,5:-''2:;BFECGJKOQKMLKIE>BF=64//  - -†ÄÏØÙÙ×ɽ•fcak‰qoqwwŠž£¨ª©š ¸À»»ÄÆÈÆÃÁÃÃÄÅÈÊǽ§…Ž“±¾µ­ ¦¶¸³šŒ”¡š“¡£˜”’“¢ÅÕÕÀ·¶«Ÿ«¸¨¥¬®µ¾Æ½§±ÈÊĺ²¥œ›œ“‘ž¬¬©š‘™§½ÃÁ³¥š‘œ°³¸»º¨‰vŒ¡¯¬¬½ÍÐÉÃËÌÄÄ¿½¸·»¿ÃÅËÉÍÍÐÒÍÓÖÒÖÖØÖÔÕÖÙÚÜÛØÜÛÜÛÝßÝÜÛÛÞßàÝÞÞÝâååäâààääãäåçæäââååäãääæåäåçæãæçèèãÝÞáääåæäæèåææäåçéèééççåääãååçææçäãâæåääàáâáããáããåãåæàÞâáâÞÞÞÞßÞÞÜÛÝÚÛÝÚÙØØÓÐÌËÌÅÂÃÃÑâåëíëï÷ûüøïëæÚ˺µÒïòóñîàÏÆ»ÆÖäèçãÏ·³ÓáëöùùùúùùòåĨÓáæðúøðá×ÝÜÑÂÅÓÛÜÚÐŶ±©¥­·ÍÛßÞй²ÅÔÖÖÕÔÇ«‡ªÇÖÔ×ÕÒ®[;Mz’–rQ?gS:W{Ž‘V    ! +5-Seihtoj`cqz…‡Š‡”““‘”¢š’˜¢ ”hcfgtxkb[@! @`y–›š˜’ˆ–Ÿ‘wm}”¢¨¬ ‹o{‘‘Š‚ydYVgjgip}Œ†‚’˜{dYSSu•«·ÇÅû¿ÄËËÏÑÔǵ¿½»º±¯¦™m=.     .I_nsqWKJLVWQF1)6KRYZLGLMFA58>CB36;KQXPP`mfiZ8!!3UjmbR]f_MOcdR5!,74.*)+24/+**0FM<1/5=@A>>5*8@+-#!/<@=FDFIEIPHMOHHJC>EEH:66' !    +ÁÑÙÚÙØɽ™kacjwwsq„w‡™¨¬´®œŽ¤¹ÄÄÁÈÍÌÊËÊÈÈÊÍÓÒÍŪŒ~ƒŽ’œ±¼µ½²¤¦°±œ…™¤—ŠŒŽŸ¥™˜’‰¦ÃÓÕź¹¨¨´Ç¸ž¤¬¬µ»²š¯ÆËÉ¿º­¤“‘™ž’—¢©¬¥™˜©·½¼±¥›’˜ª´¸¸¶©}…¡²¶²¿ÐÒÌÆÉÏƽÀÆÁ½ÅÆÊÊÌÎÑÎÔØÙÙ×ØÛ×ØÙÛÚßÞáÞàáàáãåãäâãââåãääääåççéêçæçèèéêêéèèççêçéêéééëééêééêëëêçááãéêèëéêëëêêééëêëëêêêçééêëêêéëêèèêëêéèèèèèèééêæææçèççèæåæâåçæãââãâáÞáàÞÝÝÛÚÙ×ÕËÉÉËÖãéëîëïøûýùóíçÚ̲²ÑíòòñëâÑÅ¿ÀÔßäçÚIJ»ÙáñúûûúùøùôèʧÇÒãòõðâÞêìèÚÇÈÕÜÞÛÔ¶²­§­´ÉÞãßÓ»´ÊÙÛÚÙÚ瑃®ËÙØØÜÔ±j>Op‘œyM=b„zI7`y’b  - -! $"'6' ;Xjpqtnel~{‡‡‹ŒŒŽŒ’– ¡ œœ¥§’xfikwvacX? ?Uy—›•Œ“£¢Ÿ˜‚nzœ¢ª® Š…“…nbUEJVdadht†Šz€‘—”ycVK]m§³½Âú»¿ÇÅÈÌÍ»­Â¾¼¿´®¥—wD+$ -  - - -  !AfpvrlNDP\[a_F/+D^c`]KLZWJ>>HBG:;G]jgcbmƒq^MGPXUZh‚…{idky‹„|ƒ‘˜‘ƒj\^staIC4'%' ",&#"! . " !1,05.'"!#)4/)$.2300697576+01/2(!(*359=59;858:501'*5;/)105KN?<529DE?<72/-2,#'18@HL@CKNICELFDIGADAIE803*###%   (‚¿ÍØÚØÖɾ”he`c…Žp|qv‚z‰¨°¸· ‰£ÁÇÈÇËÏÏÍÐÏÍÎÍÑÔÑÎÇ©Š†€Œ•˜µ»¹Éį¢ª¯›‹¡«˜‹‹ž¦–•›‡¨ÂÎÕÁ»·©£¶Í¼”‘©¦±¶°¡¬ÆÍÉý´ªœ–›•‘—¦¯ªž—©·Á¼¯Ÿš§··¹¹¤Ž{‡Ÿ±½ÀÈÙÓÏÇÆÍʽÂÄÃÆÉÅÊÑÏÕÔÕÙÚÜÛÚÝÞÝÞÞáâãâãääæåâåèäçèçéçåçééçèèéëéêééèéêíëíëêëëëêëëìëëëìîìììíìíïïéçäçêëìíîïîïïïìîîîîîëìêëëíìíììîêêêêëëìëêêììêëêêêëéèêééêéèèèéèèèèææäæäæäáåãâÞÛÜÙÕÓËËÍØãêìëëôøüûøòíâØÉ°®ÎìóòôíáÑÅ¿¿ÑÜäàϸ²ËÚåôúüûúøùùõìΠ ¼ËçóðæÞçìðêÞÈÈÙàâß×ÇÁ¶®­¯¶ÉÜàßѼ¹ÐÛÙÜÛÙÓÄ—¬ÑÚÚÝÝÙ³aCW}Š˜LCbƒyK/Ru“a - (!#$5  -&Pmrvnegpt|y~ƒ‡‹Œ”‘‹Š’Ÿ ž¤šˆlmqutuj_dQ?% 6Rr”—™““¢¢¡›…~Š—¥©­ Œ‰Œ‰yoi`RDAOTafgv„‰{”“Ž‚oPG]l‡ °·¾»³´¹¸¿ÃÃų¶ÅÄ·«¢™wD.  -!1@[mt€hNEMZddcO<7DHBI:CFPVU`w…‰„pac{~ˆŠ…““”ŒjZaenxiLH=>0-'0550,..>;>-134-(-14>E@@GMKKGLJGEDEBJI@?724,&&! !  - -/‡ÃÐØØÙÕÊ»bi\e††qvvs„{‡—§·½¾§‘¨ÇÐÍÎÔ×ÔÒÓÓÕÔÓÓÖÕÓË®Ž‰‹“š´½¾ËÒɲ£¥¦™¥­œ’¥¢“˜•ŽŒŽ¤ÂÒÔ¼º½ª£¸Ð¾—¡«¬¯²¬­ÅÏÌÇÀ¹­ š•˜•’“š¯®©˜œ¹»¸«Ÿœ’•˜¥°º¹² ‰}ŽŸ±¼ÇÎ×ØÓÌÆÌËÄ»¾ÃÌÊÍÎÐÒ×ØÜÚÜßáßâãâãããâääèææèçèèèééçéééééèèéèèìíëíííëêìíîîîïîìëëëííìíìïîíîðïððîïíçèêîïððïðððòðïñðîððïîîíîîïîññîîîííïðïíëíïïîíììììíìììëëêêêëéêéêêéèåçéçæááâßßÜÝÚÙØÕÐÑÜäëîëëôúûüùóêàÖÇ°¦ÈêðòóíâÓƽÀÐÛÝ׿ª´Ò×ê÷üýûúúùùôíÔ««ÕìëßÌ×êîòëßÌÉÝãåâÙɸµ¯¬°·ÊÚàÞÕÀ·ÎÜÝÞÝÙÙÆš‹®ÐÝÝÞÞÚ°fISpˆ˜zP;Y||@/Kw‡’Y #&!#(42 Jktqodem~w~ƒ€~‰’Œ“‰‹’œ¡¥¤¤¢ Šrijv{qsd\bY4#  -3Puœ›š’…—¤¢ —‡rœ¦©£‹…†~o`e\L=>IYaljmƒ‹yŽ•ˆiTLZhŸ­´´µ°³´¶·¼¶µ³»ÇÆÊÇ»®¡˜v?.     -#*?XorujUPQhid\Q<8DXee`OJbgZ_I@ENI9F\eivwz…ˆ„t\Ud„”‡xv}syldgjjqŠ•‹siv‰ˆ…wkWA7>AFHK]s‚€‡sd^m„’“Œ‘‘Š}aYgrpaK?7=O]`bdS<9;LN@LE_eTDKONEEBE4   WNPRSK7&   - -    -    -  -  -   %      - -       -           - - - - 7GRRKI.#*$#*!! $*%-51'##%!&2-0004495235950*0673%$$"/;A>>>>;:=<;43-,2731+2AGLA662+6=>C8059:70/7;AACBJEGQ@=922#'# .‹ÉÒ×ÚÚÔȼgd\h„‰qtzwyƒ™®¼¾Á¬•­ÉÒÏÒØØØØØÙØ×ÙÙØÚÕÌ°‹…‹Œ‘›­ÁÀÏØ×Ƕ¤¨§«±£’“£§‘•–¢ÄÕÒµºÁ¯¡ºÏÆ¡– ¯¨«¯­­ÇÏÍÇÅ¿³¦™Œ—Ÿ•–˜¡­§¤™§²·µœ–”—£¯·²®ž‚‰š©¶ÂÍÔÓÒÌÉËÎȼÂÉËÌÏÑÒØÛÜÝÛÜßâáäåæããçèççèæèéééêéëëéééêéêêêëêêîîðïîîîìîîðñòðïîîîííïîïððññòñïðñññðéèîðñòñðòòòòðïóññòñðòñïíìñððñððñðîîïïïíððñïííîîîîìíîíëëêëìéíëììêèéééèæææãâáâßÞÛØØØØÛâìðêìñøûüüõëàÔ²­ÇèíóòëßÐÇÁ¿ÌÚÚDZ§ÀÎÚîøûüûúøøùöéÕ²˜±ßéÞĽ×èîñëÝÈÉÙäæã×Ŷ±¨¦­µÆÚßàÒ¿¹ÏÛÝáÝÛÙÀ•Š«ÌÜÞÞÝÙ»oGMu”tSCH='    YSQPOH8& -   - - -   - -   - )  - -  - -  - -   -  -  -   -   - - -  - -  -  -6IQWO;-!$+'" #+/(.31/#%& &.2&%.3267/39;=5+-/3)'(%(1:<;8;AA@?=<51--650)-/2EI:5289>=?D:4279<73<;@FHCGEGIFIMED?IHBHHD=0)+- !  -  6ŽÊÐ×ÖÙÓƼcbbg||{ux„zŸ°¿Ä¾«“«ÉÔÒÔÚÝÜÜÛÜÛÚÜÛÚÜÙα‚„’œ®ÁÁÑØÙÕͶ§«³°™Š†£¨’–‘Š‘¦ÁÕÌ«º¾¯§½Ðȧš›¡ª¥Ÿ£¨¾ÏÐÊĽº³¡’˜£˜•›ª±§™‡“¤²ž˜’—š¡²³¬ªœ‰~‡Ÿ©°¿ÍÏËÊÉÇÄËÊÂÀÇÌÒÐ×ÙÛÞÞÞÛáàâçæäççææçèééèêêììëëìêéêêëììïíìíïïñññïîîïñòñññòñïîïðïððððððóòóóññòóñêëïðñðôôòòóòñññòòòðñðòññðñôòòóóðïññïðïïïðîïïîîîïïíîïðïîîíìíîíïëêëëêêêèæçååæäàÞÞÜØØÙÞäêììëï÷üüüõìàÕȾÂÎäîñíèÙÉÆÁÁÌÚÓ»¥¬ÅÊáòùûüüùùùöòîÙ²š¿ÞÞб·ÛæîñìÜÈÆÚâçåØÇ»µ¥£¨³Ã×ßÝͺ»ÏÛáßÝÞ׿uªÏÛáâßÙ¸qKMqŽ—xO3d…zI6NrŽŽ_ †E 0# $(AF$  0Mfj`V[usjWPYhq‰Ž•‹”˜Ÿ¡ŸŸš›‡ckv€ygajijbeY1  /TqŠ• ¡–Žœ©¡Ÿ…{„’˜—†‰}wxoi_VSWKLIXZirx‰ƒyˆ™›uNFWam’›­®¯±°ª¦«¬«´µ½ÀÁǶ­«›–vL/!    &.2Vn€†ydOWgkqoiU=:KY\h_W[fslWGBJIADCVlw}€Œ’‘Œw\TRat€Ž€irthdaioo€ll{ˆŒ|o]K7<>>BLMWp…„ndbg}ˆ‘ˆŽ™•’tdgjpr^H:CDYimriR855GKJMT^fL@?H@=DGE1    ^UPTQK8(  -   -     -  -       -         -    -   - -  - -  - - 0EOOL<," $ !! !#!(./73-$!!!%'',.&,06:1139@92++23*(("1876::?@A>E9,.3.12.+&'7IK:71.6>8>>345<;:605CIF<@MJHJDKGCCHCF@EC::41)/$'    "3“ÉÔ×ÔÖÓÈ»ab_f|‡s}rtˆz}œ±¿ÅÀ¨˜©ËÕÕØÛÝÛÜÜÝÛÝÝÞÝÛØЮƒˆ‘“›¶ÀÃÖÛÚÛÖ̲¥°±‘Œ§­“’‹Œ‘«ÄÒƧ¹½«£¿ÓÊ©¡¦ž¢œ“Ÿ¥²ÉÎÎƾ¯•˜ ˜Ž¢©©™……ž¯¤–—“š£¬±¯©™ƒrˆœ­µÁÍÒÒÏÆÆ¿ÅÊÀ¼ÅÎÖ×ÙÙÜÞÞßâáââãåäåèèèèèèéëëêìëêêëììëêìîìïîííîïðñðñòïïòðñôñòòðïïðññòðññóòôôóõóñóóëëïñòóôóôóôóóôóñòóòóñðññòóóôóñòðòóñððððïððïððïïïðïïðîðîîíìíìîíëêëêëëêéçééèæáááãÜÜÙÛáèëêíìï÷üüúôíäÛÕÔÍÇÕæëíèØÊÄÁÂÒÚÊ­¡³½Ãéõùûýüûú÷ôóïÛ±œÃÛÎÀ­¶ÍáëîíâÈÁÛåçäØȽ´¦£ªµÂÓÜÛÓ½ºÏÛÝÞÜÞØ”}¯ÎÛâàßÝ¿vEGpœ~M;]…S4Ml‡h - -0. -.' 2ONFGOYSPHCFWizŠŽ‰’™›š œ˜†uczˆygbc`krq}k3 .Sk†šžœ–‘«§‰sˆƒˆ‹†ˆŽ‹ƒ|tlaaVYURGFPTjpx‰|…—–‚s_LN\o‰œ©­®´¯ Ÿ Ÿ­¨°º¶·²«¤–”~R3  -  - - )7To€woaPYis{viZ>7@Sic`V_dlojVEJJEEEJbs‚}‘’€dPFix…ƒŽ‡titshdilu~“‚tox‚„uhcU<43>GJV\fy‚pn]_k€ŒŒŒ›™‹ockil]HJBJV_ntjdI36062019DA=>.6B><839:ACDAENIHNHGJGGFFBJD<83/'+$%!  - - &8”ËÓÔÔØÐǾebdd~…nvtn‚z‰œ³ÂÉǬ•¬Ï××ØÛÝâáßÛÝÛÞÞÞÜÚϬŽ‡‡Ž’›´ÃÅÔÚÜÜÜÙÉ­§®¤”®®•‘—ˆ‰¥ÀȽ¥µ¿¨¢¾ÑǨ¥®›“““œ¤¯ÈËËÈÅ¿´©œ•œž•‰”¢¦˜„€š¶¬˜ ™›§©ª®¥™„v€•§¸ÆÏÓÕÊÄÁ»»ÄÄ¿ÆÏÐØØÜÝÞâááãäääçèèèèèéêêëëêêëëêêíîííìííðîîïíïððòòñðòïòññòòòððððïòòòòñòóòòóóõóóññíìðòôóôòöõóöôóõòóóôóòòñóóóñôôóòòòóóòòóòññòðððððïíîîîîíîïëîíìîïíììëêëêéèêéèæäãâÞÞÜÜÜáëèìïíñöüûøòíçÛ×ÏÉÁÆÖäèâÖÐÌÅÆÔÛį¥¸¹Ïï÷øúüüüøø÷õîÖ²¼Êô¤®ÄÝêïíÝÆÀ×äåæÛɺ®¦¦¬´¾ÑÚÚÓ¾µÉÚÜÞßÝÕ½’}®ÓØØßßØ·oDLw‘˜}S9[€O.DoŽ˜i -   - -&23227;?AF>DMkz‡„ƒŽ•˜™¢›†whmƒ~tceoifq…o5 - - -Wj‡˜¤™˜‡†˜¥ •Š}~„…‘”‘ˆƒw`b^[SKDGFDXs~…|n…—{nZXSZc}•¢¯¬³¨™˜‰•›•¥¯©¯ª¡•˜ŽvM1!   - - ,;Vkw|pbR^cr‚„o[I:9LeffZWgjjl\RIOG>GJbt…†€‰‘”’‡nMD`q†‹ˆŒ€s}{ndi{Œ––|ttw€wyq^;147JMSU_t€ymmlx…ƒ…“›œ˜“ubdhqn[IC:SfpqojU6=IRIEGM\fRF979>1#   TPVULKMB<-  -     -  -   - - -   -   -    -    -       - 4CPQA8/# #/1 #$*-//5(###)(,20-&,0-41*/25:8-320,$$2:6>99?A=?7671*/442))+:KJ:/.-37;=>=4872527=>CBEE@GJNEGJKFD@D@E@@=-*+" (  &8•ÉÐÕØ×Ô˼Šb_ah|‰q{ztsˆœ´ÆÈdz“ªÎÚÖÙÜâäâáßßÝßàáÝÝϱ‡‰œµÆÉØÝßßÝÞؽ¤Ÿ š”—«¯”–•‰ƒŒ¨¾Çµ£º¾¥£½Óƨª©€ˆ‘› «ÈÏÎÌÊÇĹ¯¥š•››‘…“–•‹}Œ¶¹ œžž£¨‘†v‚›«ºÈÈÏÔÎƾ½ÀÁÁÁÍÎÒØÜßâãââåæääèèççèééëìëëëìëëêëìíêîííîíîîïîñðòòóòññòóôðóòòñðððïññòòòñññòóóóðôòñíìïñòôôóôôóôóñòñòóòñòòðòòóòñòóðóðóòòññðñòðïðïïíîñïîíîííìëííìëíììêêëèëëççèæãââåßÞÜÝÛáéèíîðñöûùöòìåÖÐËÄÂÂÇÓÝÚÕÒËÄÍàÛ¿®­³¼Ùðôúúýýüú÷öôëÔ¬›¦¶´¥Ÿ¢½ÜéîéÝÆ¿ÖãåáÖÄ´­§Ÿ¤±»ÔÞÝÕ¼·ÊÚÝÝÜÜÔ»Žƒ¬ÐàÝØØÔ½s?Hsœ…L?\‡„R/;m‘—g  -&2,,59755:9DMm|†Ž…}‘“••|qjtx€vd`cffh{”Žz?  0PeŽŸ¢™†‹œ£ šˆy}Š“š˜“ˆŽ‰ysfc`VWHOIO[j€l–•~n[WPYfx‡›¤£ªœŠz|ŒŒ…’“ ¦—“ŠzK! - - -.9PjpwwrZWfpvbJ8;IdjlaXjiqs\SMJKJEKWv…†…•œ€W@Sh{‡Œ†s|zjjww}ŠŒ—‰tkw„Š}naC46=JHPMam…‰zrhkwy†ƒŒ’Ÿž•€i`muvkVF9=Sksql[@:BNFHGK[hXD9<<<<@C<* -  QPUVRNOLD5$)--("   -  $" #$& - -     - -  - -  -   - -       -        /CFFB8%# )2"$.*',070( $%'02/'%(1732.+3185+/..+$!07879;>?<89654,*02*,)-6HI>0.-08;>>33558755=FEHJDDIKKBFHG@EE@GA??<1.)" - !#AœËÒ×ØÙÔȼcbck€‡uyuy‚s†›¯ÃÅů˜®Í××ØÜßààÝÞÜÝÝàáÞÜÒ°…‹›³ÂÆÙÜÞáßÞÛι ––‘§”’’Š¨ÃÅ° ³º§¤¹Î§¤§’}…•™Ÿ¬»ÊÍÍÊÇľ¼²Ÿ’‘‰‚zz‡Œˆ ¸«¡›š¤¥šx‚˜¯¾ÈÀÆÒÏÅÇÌÁ»Â¾½ÆÍÎ×ÛÝÞàßáßáãåäçåççéèéêëêëëëêêëììëêëêìêíìëííîííîððîîïïðñðððïïïîîïðíîîïñññòñòñðïëëïíñððñïîîïîïïðïïïîðïíîîîïíííìîííîíîîíììëëìëìéêëëêêèèééèçèééçéçæçæåääââããÞßÝÞÛØÙÕÔáêéîîíð÷úöòðìßÖÍÈÂÂÁ¾ÆÑÒÐÐÑÎÝéÕÁµ¸ºÆÚìðó÷ùø÷õòòíÞÂ¥— ¥£šžŸ´ÙãæßÒ¼´ÍØÕÐŹ²®Ÿš ²¹ÈÑÒÁ²°½ÌÒÏÌÉĬ‚t¦ÈÓ×ÖÕбiHJp–›ƒR=[{Z2Ar›m    2GD3/?JD@AUgmh\bjtwr_MGHH>FTpˆ‰Š‰•™—ƒe=G]mƒŽŒƒr|{ohlns|†•‘|jtˆpmY;4;8:;A;5;9355./5-,//:LN>5,7;6:>8/+47>>84>F>B@IKJMNONGFCF@?B8<=:43(&#  )<šÊÕ×ÙÙÖ˾bc`g‰tpru|s‰ž­¹ÂÁ­”«ÈÓÒÒÖÙÛÚÚÙÙØÙÚÙØÕÌ°‘ˆ•“ž²¿ÃÔÚÙÚÜÚØÐÆ«Š‹“™žŽ™‹†¨Ãè´¹¦žºË¼£ £—‰Œš¤¨°­½ÎÑËËÉÇÁ½§”‰ƒ‹~w~ŽŒu…¯·¦™šŸ¤§§ Œ~…¬»Å¼¾ÌÊÂÂÐ˼¼¾¾ÆÊÏÒÕ×ÖÙØÚÙ×ÛàÞÞÜÞáßÝàâääæçåãäæååååâåçæåäçåäåæåçêêçéèèçéèèèèéëééèééçéêéëêéêëêêììééêêêíìééééêêëëèéêçêéèéêéëêèèèéçèêèêëêæçæççèéæåçèéçåäççæâåæçåæååææäååâàáâáÞàÞÜÝÚÕÖàçéìêæìõøòîíèÞÍÉÉÄÂÄÀÀÃÈËÓàìòëÓÀ¾ÃÀ½ÅÒ×ÚáççãÝÝÚÔ¼£–””“’”ž²¿¿»¬—“ž¤¤ £§¬©˜¤©µ¬«¬§¡¢¬²°ª£¢¥–zm’¯º¸º·²“Q@UrˆtT?TsyW2Fp™v -  'Jc\H;NdXVKKQUy„„‹……ˆŒ‹~qpzˆ†Šnlirgu„…‹”yE  .Rf†›ª¨˜‰‰šŸš–€prˆŠ–˜••Š‰……ƒ|dhf[QHFHN^jˆn}”’‡oYQZOWo‡”›„ƒxqlng[[mlhdhqvƒq@$! -  -!$&+Nk{z‚vg]gmy„ƒsZ=>CPiql^ZhyywnXNROM@Uat}…‹’™™’{W@Hfp€ƒxuzpgclot}Œ•‡tpyˆ€qpbM<7<;=DH_€‡†€sih‚Ž”“”¢•}`Yfmh\J=:>NgqpkiG;=EF===QmbIEIFEBMMH9!    TNLHGMHD?5( -583+%  -   %*-%%7RounM.&4:/  -  - -      -   -   - - - - - - - -      -/AG=60#! $" $$%2.02)%!(1./.073632/5:0-/-34*")$'0:>44;?B<897/36041-)%/?SN:4458/6;>3.6?C?6,9D?@==9.-& (  -%;”ÎÔÕØØÕνca_a€Šooqtƒœ¯ÀÃÆ«—®ÅÎÎËÓÖØÕÒÖÕÓÒ×ÕÑÐŨŽƒ„’›´¿ÀÏÓ×ØØÙØÖк‰kn™ ’‘“Ž¥½½Ÿž¸¼¥¡½Ð£¨¨™‘§®¾¶²ÂÐÎÍÌÇÿ®—Œ…„rv…Œtœº°ŸžŸ£«¥›”‹€Ÿ­²Â»·ÉÇ¿ÀÊÍÀ¹ÀÉÎÎÒÔÓÖÖØÚÚÖ×ÛÛØ×ÙÛÝÜÞáßâßàáâáÞäåæååäæåçååæææåèèçèéçççèèééèéêéëìëêêëìíîîîìëíìììåßßâêìïïïðïììîïïïðïîíîïíïïîîðïîîîìíîíïïíîíîîîîíìêëìëìììëëìíêìííëììëëêéëééèæçæææååáßÞáæêìçæëñõîêíèÜÎÇÉÃÂÅÂÁÁÆÏÞîõóåËÅÔÍÆ»®©ª´¾½Àº´·´¨œ–Œˆ‡Œ‡}ƒ‰}wpnyuk†¤¬Ÿ˜ž¥¬¡™–Ÿ¡ž¢š‘ˆ‡‚Œtj‹Ÿ­ª¢ „J:Gx‘{R=]w}W;GtŠw$ -  - - 30' 8ZdgRH`fb_]egj‚‰‹„yyupƒˆŠwhhiht|Ž“™˜~M*  - -&Pc–¨¥œƒš“yp„˜˜™”„ƒˆ’„qo`W\LJJQbkx}r““‰lWRKKXcr‚—‹†xtfbhh^Zd`_Y]grƒmG/   - - -  - -  *,Io†~thd`h~ˆ‘|]?60Kchsi`huvtiVONJFHJYrŒ‡Š“—’~`BAW]ixv€~ppoidot„ˆŽtox…‚vnbP<58;CMPTs€ŽˆsjfzŽ––Žž¡™‹l^_oebS:<=ManljlTBGR>2027:<:;58?>A<2->>@C?CCHFGJEFMB)" - - -  - -#13Cf}…|ula_ey†‹{\>61FVble^_pvts^LGLMIJZp}Š„yƒŠ‡‡qD:L^l{~„†wrptimp…‘ŠŽ‰~qt|€‚ogPE;64BGMMax†„}pgw„•––› ‹p\YdljZF=;C\jrdcYM>;FHHFGOgcLIJMGMPLB,   MJHED@FFB:$#069;432)"#02($,:^xŠ~k[MA5(&)5:2!       0*)..6CKSZQNLNKC;?=7+*-#$# " - -   -  - -  -    - +<=31$!!! "#",3032*$ %+)-/025820*,55//0**/.,*%(+3<>8969B;8?203/44.+)&-7JM>0-36:A?4777=>9219AEAHHCFEFHHFAA?FA@<;B:,+"#!   '<–ËÔÔØÙÒÌ¿cdag‚ƒivuq…x‰¢¸ÉÈȸ¦¹ÐÚ×ÔÛÝÝÜÜÚÛßßÝßÛÙΨŽ‡’’±ÁÁÙÞàäâââÝÚÚuy‚•¦––Š„’«¹©’˜¾Ã«¨ÁÔƧ­®Ÿ’–ž©®ºÅ¾­»ÍÍËËÈ層‹„zqv‡ƒtš¼·¨ž«±©¢‰ƒ’¯¼À²¥µÁºµ¾ÉÇÀÃÐÖÚÙÛßßáäãâäæäççèçèçèééêêëêéêêëëëëëîíìîîêìîîðîïïîîðïðññññòñòðññóòñòòðòôôóôôóóóóðêëíðòòõõôòòòòòóõõóóòóñòñóñòññòðòððòòïðñòïññññïððïïîîïïïíïñïïìîìíîðîìíìêééêççèçèçäèáÝåëêêèìòõíçéæÙÓÍÊÆÅÃÄÄÍÞîïïîÝÄÐäââÞ˯™ŽŒ‰‹ˆ‰‹|…Œ€ƒ‚tvnmjciyve\Z[RKJS{”«²£©²©‘—š£¢™’Štm“ydŠ—¥¥š‘‘xLDIi…“†W5U||M3Er‰™|*  -   - -2%!,!In‚yusektsz†€‰Šq„y€Ž‘†uvoeku|”–œœ“—›‡R& %E^|“›—‡w„‡Žui}“Ÿš“’ŠŠ‹’zhc`c`KU_aj~ˆˆnsŒ•‹q]SJLSbhirŽuqmafng\U^XXOMcttkD'  - - -  &+=c~ƒƒzqa`dv}{r]C89CShkic_owxvaQJIQRIOht†€zŠ”K;FWjƒ„‡€wnsh`d}‰‰‰…‚wop…€zl\R>5:8JONMB8-"&"%)%)1;6/ #(@e‡peYE8.+5:>7#  '7BIA6).-495'#(+36/  1=906>N\^cefba[LHMOJD>873# - - !"#"$(*)   - -   -    -;9:1*"#!##!$ !'..13'"!'*+00,)5786,.2502,)131.$!2-378145;C?=89/(*-67/*#4115:>A:51-8=52/=@@@@CBGGGEFLB83;AQRS_y„sn}•–”‰— ›‰bRWfg_YQ<=Q`\Z_aR>8CSNLFDVf]G>GDGECED2    LNIKIKHJM9)#$(2:>FZhg[SLD0**)))+/7509C>-!!*?cŠŒŠvdQB836;@C9&  "&4Nknk[HEGKJN@1.2:A>9$ - - - - - -7;5-D?1  - -    - - - - -    .4661,''#!! "+./)'"%-.,+'+..94281582%'27**#".+444939?==>;7-*./41$'"c“FF>3-+)8?BAA>9=92//-$(! 26*  %5‹ÇÍÔÒÔÔʼd^[hŠ…goqy‚v€˜®ÂÇÏÕÖÙÜÜßßÞßÝÝÞÜÜÝÜЪ†„Œ”™´¿ÃØàáãâßãâÙÄ›‚€Šœ°œ•‘ŽŽ©º©’š¶º¦ ¾ÑǨª±ž”™ª­°°¾¿³±ÃÌÊÇɹ°™Œ‰’|ot|‡~—¢˜¦®§ Ž~~~•©¸½¯¡§³¹·µÁÄ´µÌÙÚÙÜÝÜßßàãåâäääååççéêéèêéééêêééêêëìëííììíëíëëíîîïïîðñîïñðïðððññòòðññóòòððòóôòôóñòóñóñóòòðñðððïñïññòñðòóðððñðïïðñððïíîðïîííïïìêíîííëëêììëíëëêêêêëèêèèéäæääääãâàÞÞÝ×Õßêëäßäíñåáæã×ÓÏËËÊÍÒÑØéðõóåÉÍæèíîéؼ¦’‚‹™•ŽŽ‡Œ‘‰‡‰~x„oƒ„r^]Z_YIMq’¡£š™š ¯«™’¡¨©¤˜t“yj„šª©ž™‡M=Km‰”U=S|{_*6_ƒ”y. -$#*/% - "Cayu€qdknr{ƒ…yq{z†Œ…~vrtrps‹Ž“›¡œ˜š›‘‹\$  -)@[qŸ˜Š€zˆž£“yio™˜“—•Œˆsmodc[^\R[hlrxvjpˆ‹‚uVFHEIP_enŒthZ[`hb_^\h^YUamzqD+&  -  - - %/0=[|‰…}xga\ixt‚}U6*9C\fkf`_fhugHGIMJBDSmŒŽŠw~Ž•“sH;CQo„ŠŒ‹|sz|qgmw†‹‚sow{tj`YE818CRMUfr}†€ldu˜“‘‹iRVgnldVC>OZ]dmh]D4BOPOK@H]bQD=;=C>@F=." TJHHJIIMH4' ' .8>AO^mg]YQA30/1,2399<6==7+,?`‡’v]RA=7?GHC<) - %1Gi~rfXY__\TC528005BF?& - OKHFIKKLH5$#" "'1>?EYfom_[RA41/11522?82<9/& -@f†‘w`PC>?BD@F>(%.15:Ol„€xj\Y_eaYE815>A@@1  )243>CTknnmjiid]WUSKHECCB3+:A/""-:42(    - -    - -,.54-0*$&$#"&!#!!!$+/#$# (&-,-0&&/8603.66953531)$#-41653;:6==B;6+9*,21*+)1ANM<84506::/4347:E./8B>?DJFMGE@ADC@AA@261)( % -% -<; +>ÆÐÕÕÓÑ˾Œd_`fˆˆmsox‡nž²ÁÂĪ•°ÊÓÒÓØÛØÕÔÚØ×ÙÚØØÓƦˆŒ”£·ÀÅÖÚÛÚÙÚÜÙÕ½ž…‹œ©ª¥‘‰ƒ«ºª‘—·½¬¥¸ÌÀ¥«®˜—žª­«¡¸Æµ®¾ÎÐÎÇǾ¨˜‰|y‚qgn|„„v‚—¤«¦™‰x‰•­»º¥“«²´·ÀÁ¼»ÆÎÍÒÒÍÖØÙÚÛÙØÛÛÙÜÞÞÞßâäåååãáãããåäååæçåçãáááâãæåêéêêëêêêëììêìëíðîëííííëìíïìíïîïîîêçéëìëëììëìíïðîîíïìëíîíïíïîïïîðïîîïïîíîîííïïïîîïïîðïòñîïïðîììíïîêëëèçæââááäâåãÞáàÞÜÝäìíæãæêéàÜãáÚÒÊÏÚæèçà×ÕæïäÕÑßßëôöïàȲ¡š£¢Ÿ™–ž¥£ ›œšœŸ¡šœ˜”š¡œ˜“—‘t^l¤®£Ž’£¯£™–—˜¢ªª—˜œ™xb…¥°³¯«©UCLn‡–~\7OvuW/:]…•€.  " $,,5.! 'Lky~ƒqwkmvo…ykny…Œ‹|wqsxw‡¥ Ÿ¥¡š›š›œ•[& "8Rot„zqno¥¨•qdvŒ“•‹˜™‚„{sj`ff]\VRRhgkvxto„‚hJHLLOdpon|qV`_fall]^kf[S_yƒ~S-  -   #(23Xm‡}yh[`l‰ƒg@*&6CS\[]_bhon\FNFFIDHf‚„€it™”‡eA5@Ya|‰Ž‡ƒvsl_eu{|ulixurnd[B958GFOM]w€…‚tqˆŠˆ…—šˆgNXgtviNGEYmigpi[I=HMMJECKbaLA:@?@;CJF&  LKKHLNOKF7$# $(1( &9@>?FB7& "'1.3;FWporrppofYSSVQNG>FECDDE1*(/;@;.  -  -          -%6=76,"!"!#$!'%-*' # &--%*+54813<27668371,&!+561530:>;>;72.4,/10%&)1=OG;23-5:??53854<;578A@<>:9EGME@ID=ABAB>;:5-))"#! -  - $7>4 &?ŽÃÎÓÕÕÒǺ’b]^iƒkwmv‰vƒŸ·ÁÈǬ“±ÍÕÒ×ÚÚØÖ×ÚØÖØÙÙÚÖǤ~ŠŽ¶¿ÅÔÙÚÜÜßÞÞÖÁ‡…ˆ“š’˜”ˆ„Ž¨¹«’š¼½£¢ÁТ¦­¤—™­¯²›š§ÁÀ³²ÂÍÍËɾ­—‡|‚{wvy‰‰ƒ’¡¢¥¥ž—Œ‚‰šªµ² ™œ©³¹ÀÅÅ¿ÈÒÒÒÑÓØÙÚØÜÜÙÙ×ØÕÖÛãäææèêéêëèéèéçèêêëêééåßÝàÞáäèëîïïîîîïðîðïððññññðïðñïðïñðññóóòñìëìïðïïðïðñðññòòññóðòòóóóóóñòñòóñòóñôòðññòòðñðïðððñððòññññññïïïðííìèçåáàÞÜáãäæããäÝÞÛäììéçæéêàÛÞÞÚÒÓ×çòðëâ××ëæÚÕáäèñõöïáǯ¤£¦¤¤›”œ¥¤¥¢¡ž ¢ Ÿ¤œ¤ž¢£Ÿ™ŸŸ†]h“¥¨ “š¯«›™˜¢­ª¨¢žœŸ›~fŠ«µ·µ²­”X@Ai‰”[7Tvw[7>b„™|)  $ )(()84$  %Phv{vqkpjco€x{{„“”…y}r{qtƒŽž¤£¢œ ¤¥¡¡Ÿœ”‘‹\+ - 2SglmrvisŽ¡¤–nijyˆŒ•‘…}rrqf][ZSGVRfkmuuqtƒ‹zdHB9FP`ffptm]^\bdnjedidY_py„{U/  - -  - #/,6[s€Šjdcq†Šˆ€f?'*1BW]ZZVYfmibULBNKCBZ|‡ˆ{zˆšœoK63JatŽ‡†zy}q`_iy‚‡Šƒodpuvg[]S=5?@EICNcw~|r^RYa`_O@209?B@7'  -!,018>Kbtsqrtvtm]TQVWWNHJLY^[J0+>KPG6% -  -  -  -   -  )7:76/% ."*'*)*'#+*#'.'%36:920238413664+$*#13//56:@?9;:3//+03+*)(+=J>5310559=415D978*$&!  - -!38D;'  #>ÂÌÎÑÒÏǶˆe\_b‚nwp{wŒ›¬ºÀÁ§˜¹ÒÙØÙÝÜÞÞÜÞÞÝÜßàÞÚ̧…Š’œ³¿ÆÚÝâãâãäßÚÞ‰Š‹”’†ˆ•“ˆŽ«»§—¿¼ª©ÆÕǨ¨¨¡”•œª±¶££©¨¸¿´·ÃËÎÉüª˜Ž€{ƒ‹‡†Ž…› ›£ ˜‘†€Ž¦¯¶¤•š¥³½ÄÆÀÁËÒÒÏÑÖÛÜÜÝÚÒÏÍÊÊÍÓÞäæèéêëëêìëíîîíîìíìëéâæãàÛØÙâæêîðòòòññòóñòñòôóôòóôóòóòõõõóóõóóñîìïòóñññòòññóóóóóôôôöõöõõóóôóóòóóòòôõôóòòòñóñïìîïñòòòòôóòóñòòññññíëæâàÝÚÙ×ÞåæäãßÝÛÚÙÞèëçäâçêÞÕÝß×ÒÔÜåîïíèçëêÚÕãîëïôøøòãÆ­¦¬©¨ –’” ¡Ÿ¥¥¢™”™œœŸž£¡Ÿ¢¢¤t_m ©‘–¢ª®¢—Ÿ¡§¯¨¨¤”˜¤g µ¶´¯«’]?Bj—†];Tw€`45c˜|*  - %&(%%*0;*  - Yuxsuvmifjjmw†‹ŠŠ‡}|}q|ƒ’›¢¤¤¤¦§¥¨¦¤ž¡œ—•‰`,  --KU[o€vo  –wbgo‰”•‰|voih^[\NLU[fffpros|ŽfPH?COankhof]\`einpgde``^i€ˆvS/% - - - -  -%)2/Oq{€zl\_cu}ŠuN'*;P`a\UPbgimZDDKEFFPq{‰…~r~“—‚fB2;Mi„Ž‘‰zw†woflp{ˆŠ€ojqxyffXG>:7?JMUg€ˆˆŠzh{‹“‹“¢›…e[et}{nWBHVaprom`I*SVSNRTQPK6! ")07@AK\a[[]XE1,.3,+&$041.%#+@a~‹ud\K=4*-7GE3$ &:BIFI]rvcYRXabQA74=?@@=, - *./2," 2FNVN3  -       - -:;:9-'!"(%*)&""!!./#%'#$-15233.6:1-/244."'!*-1621/8A@=<;2-1112+%)+1COD324219379704826644CD==>AFABD@CADJA==@A95*"*%   -0CC#  ,AÃÊÎÏÏÐʹŠebhpŽ€nsqsw‹Ÿ²¹¹º¥š¹ÏÖÒØÝáãßÞÞãââáãàÜЫ‘‡Œ“•žµ¿ÇÚßãääääãÝÄ›ˆ†–›Š‹šœŠ’«¼§’š¼¾®«ÉÚÈ«¯²¢“–Ÿ¬²·ª¬±£½Â¸´ÄÎËÉȾª›Ž{‚„ˆŠ••‹w ™™›–‰†Œ£°²£˜™¥´¾Â¿¹¹ÈÆÇÆÇÐÚÛÞÞ×ÈÄ¿ÀÂÇÔÞåèêëêëêëíîïîïîðîëëëèàáäßÙØ×ÞäëðòõôóññóóòóõôõòóôõóóõõôôóóððñóðïêêíîîîïïððïðñòóñòóóöõôôôóõòôôôôòõõóôõôòôôòóñíëííïðððñïóñòòñòðïðñððîèââÝØÖÖÞæééçâÝÚÙØßåêéæâåçÚÕÚÛ×ÖÓÙÞãäçìñìàÓàñððòôùùòäÄ¥¥¡Ÿ¢™”Œ“–š–‘‹ŠŠŒ‰””•—Œ{f_j’ °¢””£¬¬ ¥­§¨«¦¢–‰”›€b‰¤¯°±¥¦X9Io„–ŒW:O~}`75[‡–}4  *'$' );-  Ur…~ytwodgv„‰’•Œ}zryw{†—¨ª¬¦¤¦ª©¨­¢£Ÿ ››”‹c,  4ILd€‹…yy}Œœ ’xd\t••‘‘•‘‰zwwtjd^^TKTX`bdlrqs„ŒŒ}hKFKAGZqmhpi`Yadjole\qkifrx‡~a3$ - - - - -60Iiotxpf]Xdr}|Y07Refh`OZgok\PIIHFAAarˆ‚ls‹Ž’zK5,?_uŠŽ‡†vwwtjju†‹‹Œtjmw€ufh]D83:MSUdrƒ†}ry‘“Š‹›ž•{\Tfv~w`G@GY`kqrhNBDAWvzqj]VZ^\TE317==@;+   -*.//>Piotwuu|to^MRPKHGFJTblj_L<2+*%4DNMA-   -  - -   - - - - -1>F[62   "! "$(0#"#")+(%&"%,',160//33111+,01-"!+-3572169<8=>63,*050&--4@QI>811-2;>92000<>987BB?ABCHBCD;=<SDVWc|…ˆ‚owŒ—›™’Œ“™”Š^T_qvwlPEDNbmwsoV:=HIKDBBNjmUJEBINNCC@0  [TXTRQNQM25!$"!)38;DJZ^XX\Q>.1.4-,4-()%*)#'8Y€‹yf]^`ku~{kWF=4.0D?C@Ro€vl[Z^eaWG5/3=>?9.   !14/5ARkqsrpwusm\RTRQJF@FO`lh`NA7-108CHC9') -    - -     - -  *7ON<* !!(..!&$ %"'(&..40,4449734/02/2&"!',2777612;=8<<3324344-%(3>HK=82/,27371..6=:04;B@?A@?B>A?HB>?BFB@B>22/*&%   -#7‘ÆÎÐÓÒÏźˆ][bq‰„ppkw†}Œ¢ºÇÉÇ«™µÔÚÕÖßãàÝÜÞáããâäáÜÏ®•…Œ“•Ÿ³ÉÉÙâãåäåääÛ›ˆŒŠ˜œ‹Ž•¨»¥’ž¸º£ ÁÑĦ¯¹¤›• ­­³¬®¬œ™£³¿¯¯ÇÌÊÆÆõ£Œ…ŠŽ”š›™„’œ”ŒŒš“ƒ£¯­”–£´¾Á¿´¯¹´°¸»ÀÆÓÜÝÝ×ùÀËÎÛãçççèééëëêëìííïïìììîëèåÛÕÔØÚÚàéîñðòòôôòôôõôôôõõóóñïëëêèêéêééêëéæäçèéêéèééêëééêêíððñðñõöõóõòôóõôóóóòóóôôóòðíðððññóñðòñòòðññññðòïïñïêäàÙ×ÖßéêëççáÙ×Ø×ÜäèêçàßÚØÖÖÛÖÏÍÏÔÙÞâçáÔËÞñïóùùùúúöè”…z~qmjkqkmqijmbfmj]_XMVa_\QHLVWc‹§ž”— ¨©¬®«¥¡£š‹|mlŠƒq~” £œŠV==dŠ˜†a?Nu‚i/&^–~5   -  - /! />.  - Bu~~vrqmts‰Ž„n{}|{…–ž§¯³¯¬¬®°¯ª¨­ª¦ Ÿœš’Q/ - 1GJa‰’†x…Ÿ œ€fez‘––—˜‰ˆ‰ysqng`[][Ped]ckr€ovŽ”†hRPGBHZimnpc`[Zcmprkdnxtkp~Šˆd6  - -  ,?/@cr{||gaOYpjjp|fA$-IZei`YM]jqe^IEIACEVhntrrftˆ‘ˆkI4-;WzŒŽ’‹w€{}ff{„‚†‡‡pej{yvidT<7B@HMTe|„ŽxnyŒ“—•ŒŽššraVgqvmXIDSdooqoaB9DEKEC?Hdn\HBBJOG78?0 `[\SSOMMJ6 % '4>?AO\a\a]S@2/57,0/,*#!#$(9a„‘Œ€f[aj|ŒŠmVKE=1-"!#1>A=>Ift~zn^[bgaVC803:<@9.% $494:AScsrurssrfXV]YSJEBGQcom`P@<522:=HI<$     -   - - -$;A=:)!  " $&,,%(& $$%( &'.2*-.26;4/)+./.+"!$04373-'1>;34:11=146/$%(-CRH:32(,8?944658793,:D?>>>BDAFEDA>:CA=?=>;..-!!# - 'B˜ÈÏÐÐÒÎǼ‹^[cm‰nqn}…~†£»ÉÆĪ›¸ÕÛØ×ßãâÝÞßãããäââÞÏ­Žˆ“˜›´ÉÐÛâãããåçâÛÁ›Ž…•œŽŽ†Š¥´¤”ž¶²¦¦¿Í¾¦°¸¢““§¯±·®¯²œ››¡°­±¾ÅËÌÈǼ°}–›—˜—˜’‹™•Ž”—‘¤®«’’¡²¾Äº­¨²´±¶·ºÂÑÞßÞ×Ê¿ÃÌÔÛâãèëèéêêëêìííîïîïîìëëæàØÔÖÜÜÞãëïòñïôóñôôõõóôðñïîìéçèéèéìîìííïðïéêéíïïììëëêëêééèéëëíïïñóõòòóõòòôòóóôô÷ôóòòñðïïðññóñòññðñññðñïññðïîîëåàÚÙÙÞéëëèäÝÚÓÒÖÚâæéæáÜÛÓÓ×Ø×ÓÑÐÖÚÛßáÍÀÌæíéóúùùøúöéÈ™†pmvplfprhgc^dd`h_d]QRMZXSUFGFLQd‰œŸ–•žªªª©ª¦£¢˜Ž„sl†™„i}—¢¡¦ŸžŒX=>^‡–ˆe?Jte96a–ƒ6   -  "&&5F.  Fk}uhisx„‰{~{{ty†”¤­¯²µ­ª©ª±±­£«§ › š‘„W1 /AOc}“|ŒšŸš‚jg•š˜™•‘‰‡wwlpd^bdUTX`dgh}wpx“l]JDF@Rjieg`[PXYjruplyuqne{‹‰c5# -  -  552Ac|‡‹}naVYjqjwwmL')D[`jl]LPdhcZMFIJDEVenjqtho…“—“{W<5COoˆ‘“‡tƒzmep„‡Œƒ|ln†|umZ@5?8CLM\p‚…‹xowŠ‘™˜–_Taovr`KFLVfispfNAEdmz{tcY[Z^WL3247@?>6*  17>:9B]pponmprg`YVYICEDRXhpicM?;:23=INP@)  -    - - -   - ,<@D6. )'$  !%( *(%!!#! !&+,/.29)'.492*).,,!$ &/53101-2;642<420-11/"($'>G>253+1679213<:>A63;BD?;=<=DFG;;<>HB;@:;<1,,   - +@•ÉÏÒÒÐÌŸˆc`aj…~luoƒuŠž·Â¿¼¥•»ÖÚÙÚÝãáââãâããáãâÞЪ…Œ•œµÃÏÞãââåæäàÙÞ‰‰Š¡¡’}ƒ ¯ŸŸ¸±¤¦Áʺ¥®·£“¡­´»«®¸§žŸ•˜¡¯³»ÆÉËǺ§Ž•˜˜˜•‘„’˜’—‘•¦¨£™““¥¯¼Á²£«®¶²µº½ÂÑÜÝÞØÍÂÆÎÖÛâåçééêëêêëëííìîîëíëåàÙÛÙÚÜÛàæëíððòòôôóóôõñðïìéèèéééëíìïïîïðñññðëêêïïñîìðîìîîîîíêêêéêêìíðñóóóóöóõôõõõôóôôóñîîíîïðññóððïðïðïïðñññðïðìçÞÙÙØáëêêæáÙØÓÑ×ÚÜáæåàÛÙÑÑÖÛÕÑÑÓÖÝâäÖ¿¾×ååî÷üúøøùõíÍ”qppplhuytsohpnfecdaW]VUUUTVROSPYsŸ§›ž¢§ª¤  ¢¦¡™”’zuš€h‡™¤ª¤Ÿž_@Dh†•‡R8Huƒc;8h‡“ƒ6  #$$!"!1=- -Ff{}owkr}‹ˆ{z|€uy‚–¢¬²µµµ°«¬«¯°«­§¥¡›ž“ˆ}^1  *DZlƒ‹ƒv~Ššž•‚og’š˜——‘ŒŠ}yskkms[TVUb`fjwpkr‡“ƒk]JF@HUakgmh\`]_flmrs|urigx„_A' - -   - 20+8ay‡†…w^VVcl}‚€pF!$3Obih\^Y]_b[MBE=IFIYmpqsol”˜”‰hH7;Hfƒ‹ˆ€y}tbm†‚‡ƒ…nlz‚zsdE=56@KGT^}‰‹„xr…•–™ŽŒ›¡›ˆfV[q{slZLEL_dgqfYE8BGLOKTVdhSAAMNF87A=< [XXSPQOTL0"!&.2;AHYff_Z[K=20211141+$! ! #):[ƒ”“ha`j‚–•y]KD?<0&))& (A<34?R]U@+           "7;?;9/#$$ $$$!$)*& "!"! #/+(,4702165641.,--&$(+*/:32-6756;;+,/4.-0++)*7B?658.3<9><0655;<976EF?=>==BC@>9>DGD=CC?<6,,($#  - I+(>“ÅÎÏÑÒÎÈ´Šc]Yo…yfwt‚ˆsŒ ³¿½»¤”¶ÓÙÔ×ÞãáààâáâãäåãÝѬ‘“–£´ÀÍÝââæääåáÛ›Ž‰§£’‹~„Žª³Ÿ ¼´ ¢½Ï¿¥°®Ÿ˜—¡­´º©­µ©¤Ÿ™”›ª­µÀÅÍÇÈÁ¯‰‰”’˜›–‚…‹Š|„”¦­©˜“—Ÿ°¿¼«£¦®³­¶¹¿ÄÎÖÚÛØÑÆÉÎ×áççèèéêêêëêëêéíîíëèãÜØÔÜãÝÞßãêíòðñóóôôñðòòííêéééëëìííïðïðïðñððïîëéëëíííîïíïîðïñîîïííêêêéëìîòôóôôóôóôôóñóôóòñïêéëïòôñðïîïðððððòðïðððïéåßÛÛáëéêæáØÕÒÑÕ××ÞäãßÜÕËÍÕÙØÑÓ××àéäмÅÚÜãñúýûù÷ø÷íÑ™~usorrŽ‘‹†„—Žzlqkhigyyngikr~‹©¤œ•—£°´°©¯ª¤Ÿ£Ÿ¤’“Ÿ©ŽiŠ¡®³´®«l>Ei„’„^EJyˆe=8jŽ“‚8'  - !!+"&$-<9 Ahndlo{…‰Š|vzqvuw„Ž›®°³µ²°¯«¬­¯¯°«¨¤œ™˜Ž„w^<   +AWi}ˆ‹‡k}…—šŒmc{“”š—”Š‚‰€yrjkdZYYZd]eopmk{Œ’„nYNEEDU[eefa[a^^hnuqs‚miftŽ^5%   - - - -,<71Ty…Š‚r^XTbu…‡‹xT(!.C\hafWS^gh`WHFFDEBNoyxuiuŒ“‘‰wI:7=\yŽŽ‡||…ycdx„ƒ‰ˆ…yaj‚tohXG64=DJKXr‡ŽŽ‚puˆ‘‘†•ž›p\Ufpsm[AAP\imvm_I>ACLOLUNZhbMCNO=63696, Y\WYUQRMH0$"")5>@JZid\YXP>313-462.'( !!"(:X~”“hbfi}—”y_MDB?6,"&)#! $;c[fmnnstqg]]_ZWVQKSaimd]NC:4319NSTA'  - -   -   - %8AD?A5# !#! "!)%$"!!*,&+1,,1.5:510+&(.10#%(/5960+4758B80/311//).*%9E@1'-./4;>=611B?@;<@=AD@BD@?A6-("    ƒL(@”ÂËÐÑÑÎǸˆj[Uhxogvwz…¤¶Äƽ¢“ºÒØÕÛßâáââããäåæäãÝΨ„‹”˜ ´ÃÐÜââäåäæâؾŠ‰ ›’Œ~†‹¦¸§¢¸´¡¢¾Ð諬¨“­µ¹©®µ¨¤¡™›£±¶°¹ÈÈÈËƺªœŽ“’““—–‰†{v•©­¬¡š˜°¹º§¡¤¬²·º½ÀÅËÔÙØÓÎÅÍÓÜáããèçééééëêíëìëëééæßÜÛÞäæåæéèíïðñóõôòñïïìéééêëêëððïíïíëîëìîîììëìëçéêééëëìëìëíïðððïðïíîìëêéêíòðñóóôôóòóõôôóóñðìééëíïñðïðïîïïïññïïïïëêéåâÜÛàæèêçãÜ×ÕÓØÔÐØàäßÚÒÉÊÔÜÛØÒÕÛâçÚ·ÊÖØèöüüüøùù÷îâ²”†qq€—´É̳­½ÌÔϽ©™–‘‡‰£¶¼¸¦˜¡«³¹¬ª§ª“°ÄÊÏÊ˺§®»¿ÁÀ¿Ä»—z«ÀÆÉÉǵtGEaƒ•†^=MyƒkA1kŽ—„8  $" '#%3<5 -  ;\hgk‚•wlop{ulxˆš¨¯µ´µ²®¯¬­µ°°«ª©¢›““‰ƒ~c3 - 6GUkqŽŒ†{q}•ž™‡ljw“—“‰‰ˆ}†v|njgdW[R_dckmnqt„‘~j`GDF?Qbdddid[aglp}|xˆ~mclyˆya:$  - - - 0947Syƒ…†yfVQ_x‹’ƒ^+"5?TdigWPYea\YIGGFGDNjwvzymk‡’‘‘{Z==7Hp‹‰‘Š…€odrƒ‹Ž„nbsxpkgP;17BKFTi‚’Š‹sk{„‘Ž‘š ›‡dW_hvsdQFQ[dlnriZIIXif\XVL>111./,..)("%:Uz“‘Žv^[cx‘“‘v\JC?>6+#**($$#4JBEDVh{ƒ{k_QU]bZH646:?@>6$ - $-538=ScmturwwqiXZ^]U`[GY`hpiZNC81/4AGMM:&        /=GN@?5&#%!#!))%#"!#!%(/-0'.6984/#%*.)*&"2:56703;5/:@?008702*,,).:E;&*1/0:>B74678<4/0;=;?8?@@F>?AAEC>BD40<82-/'' -  -"F•ÆÌÐÒÐÍǸˆ_[\eurgsr|}~“¦»ÇÈÄ –·ÍÒÐÛáãàßâãããåäääÞ̧‹‚“–¦¹½ËÝâãäåããßÖº—‰…Žžž“‘‹…†£®›Ž¸¯˜ŸÂΦ©´ –•¡±·¹ª¯±¦žžœ£¸À°µÈÌÌËͱ¦’Žš˜–œš’„‹x{Š’¢¯®£˜©·¹ž™ ¬±´¸½¼½ÈÑÖÎÎÈÅÌÖÚÛÙÜßâåæèêéêêêéèèéçâÞßáåéêëëëððïðóóòóóïìêèëêêëììîíììëìëëííïíïîîííëéìïïîîïïîêìíîëíìíîîðíïïíìíëëíðïðôóòòóôôðññðñíæåæéììïîñððïîíîíïìéçäáàßÛÚÖØÛáæãÞÚÙÙ×ØÍÉÐÝäßÙÓÉÊÒÙÚÙØÛÞâãÒº¹ÉÊ×í÷üüüûøùùóè½–ƒt’¶ÓäãÌÏàæéä×Á°«¦›Ÿ¾Ð×ÒÀ±ÁÎ×ØË»­¬› ¿ÒÕÛÛÑñ¹ÊÖÕÙÕÓÄž{¸Ó××Ø׃KKe…˜ˆZ?Ix†r?@:.&'&&'##%*EKHGTgv„r`RU]]XF:/38:@@8#  $-336?WeovtwwsmbV^\\WNGN[acidYQC70.5@HKI<)      - - -  *2&% #%  $('*$%,64/'(0361)(+-5-(' &0306990594;>=2-4561+..-.6@*'5I+/3:E<466::1,39?A<Bm’–:   &+&#*51  9Wq…—Žwikokko~¢©²±²µ´´´¯©«®®­­«ªŸš˜•“‰†ƒlO4 -  ,DV]yŒ„xsx“—”‹ynp…––•’‹…†„~romrpk]\Y]ghv{ru”ˆx[HF@Rs†’‡~}ibilnt…‹‚npw~zrl]K9.8EJQ\jxŒ‚moƒ˜”Œšœ–}ddpxwgXHARer~€xjWE>@KVNC>F]j_L?>B?4/-/, WRWWUPIIA1#&&%%092)($%#*5EJEMd|‚‚scXOU\[M>44;:>C:(  &0876AUcntolnnl^ZZTWOJMS[_cef[I=2.-2>JSNC&       - -     -  $>*  !  ($*(%%(-21+3258--(*-,-$%566-48475?<@6146./31')&3<>.1-+4058>7647??2&-1=><@CAIG;;A96>=8<@;:5570'    2—ÇÎÒÓÏΟY[Ycl^mrmƒx‹Ÿ»ÊÊŧ‘¬ÅÐÔØÞàÜãââäãâßÝÚ×ÀŸ‰…ˆ“’ž´ÁÎÜÞááÛÚÛÚ采Ž™¡™•‚‡Ž£´š„–´±š ÁÑ¿¤¯» “– «¯´®®®¨ §Ÿ¤®Äɹ½ÎÏÐÎÓÑÉÅ»§”“š™Ÿ¡©Ÿ’†Š‡‡’¦¯¯¦ž› ¨³°•©­¶»¿ÁÂÁÁÁ¿¼¿ÄÎÖÓÖÒÕÖ×ÙØÙÛâããáàáâçéåçéëïîíïïðïñññîëëèèêëîîìííëëìêìðîïðíêèæããáââáÜ×ØÚààááãæååçëìîíîïïîíìêììïîðîíìêêìððñòóñññññðîëèäçççéèçèçååææäåçáÛÜÙ×ØÕÒÒÏÌÒ×ØØØØØÕÕËÂÈÙÞÝÓÑÌËÓÚÛÝááäå×ÀÂÉÇÙëóùúüüúùù÷ïÛ±u|€ÇßëëÙØåìïíâѼ»®ž¦ÄÖÛØǺÌÚÛÛ嬬³ÃÒÛÞÝÜ×Ä´»ÊÓØÖ×Öɤz’¿×ÝßÞÚÉ‘X:Z}‘‚bDJslF;g’t/ -   - '' !%%+6)  8oŽ‹‚ypmlojlt†ž¦¶µ¶µ¶µµ±¯±­¬¶³¬¬§¢žž—••‘€ji^H%  -  0FQWmƒ‘Šurw‘˜‹yls‡•–‘‘ŽŽ‹ŒŠ†zqquplgbV`mq|~in‰ˆŒxgMA<>Mahnotlisuz…‹‰ˆ‡|ww}{|cB'   /=-$C^s†wsfYRbv€‚†rI$);W`^`dX\]`][WIMFDFFb||{p|Œ“—~aD77Hd”’‘’ƒ†ƒvgdkow‚‹}qm{}q]WE24>IRW`q„Œr|’ŽŒ•›˜x_hkjg`JAJ[osvrj_P=QhlUC?EC?9..2&RSTRRPLNH-$''"$/9@=DWcdZXRE8/,510-())# )5PvŒ‰g\Z`glltqYB=>B>3/,+!$)09BDCWkrvrm]TWc^T>3;?<=;5* (3669BVgqnpppmd`TVY[NGIQRbilh\P>2//66--9DGFIB<=963%.5&LQTLKLLLG.$'/%2;A?GVc`ZVLC802110./&)"$1Mv‡Š|n`bchhkssZD548A9-( ,(!"$/5@FCTcpxvm^TY_]T=35:6==7.  -!532AA>@=>796/+'"!  *EšÉÑÐÐÎȵ„`XVbnaanjz‰}‘¨ºÈÌÄžŒ¯ÎÙÙØÛàÞßßÝÙÚÜÜÚÕѾœŠ„…œ²¿ÇØÝÛÛÜÞÝÜи•„ˆž›‘”Žˆ‡Ž©±¥££³³œœ¶Ã¹¡®°¦—–¡«¯·­³·ª§¥¦¤®Êк®²¾ËÍÑÒÓÑŶ¢–‘¥¥£ ¡˜‹„ŽŠŠ’£©®£œ˜ž¦´ª’‰ž·¿ÁÁÃÈÅÆÇÂÀ¼ÀÆÇÌÎÐÒÏÑÖÕÕ×ØÛÝãåçêêììîìïïìîîîîìíêêçæèêíðîìêêêëìíìîìèæâÞâåêìîðïðñóóðëêðñññôòñðîïëèçãäãáæêíïíïîêêëîïïîêêëíîðòòñïîðïððñðíìèçáâááâàâàãåäáÝ×ØÙÕÚÖÓÕÒÕ×Ù××ÖÖÐÈ»¼ÐÚÚÔËÇÊË×àäããáÕÆÒÕÑÞéïóùûüýúùúôæÆ—…wj}²ÖåììÙÖæìñíäÒ¾¼±ŸµÒÜØɾÍÝåäßÒ»«ž¬ÂÛæêéêæÓ¹½ÑÚÜÙÕÏƤ|ˆ°ÏÛÛÙÚÊŒ[F]{•‰eEHn|lACCD:/$") $'&  - *-++2531)%")+.& +.&)()-7513;;3--2/.1)##,=@6.),/11895978525185666CF8<@>???CKI>@<::79.)+  )V¢ÆÍÒÑÎɵTQTcka`iovx}”¦¼ÄÊÃœ±ÐÛÙØÞãàÜÛÙ×ØÚÛÛ×Õ¡Ž}Œ’œ®½ÄÒÚßßÞÝÛÙϵ“Š†‡›¢‘’“‰ˆŽ¦·®«¤±³¢¢Â꧲³£ž–­´¹­º¾°¢¢§¥®Éл«¨±ÆÎÓÓÒÓϸ«¤¤šž¦¢Ÿ—‰Ž¤°­¡Ÿ©µ®‡»ÅÂÂÁËÎÆÅÂÀÀÅÇÊÆÆÆÉÍÑÕ×××ÚÞäçèêëëííìîíîíîîîîëêèèåéëííííììëêììíèãäÞàãéíòõöõô÷÷ôøõóððóõ÷õööø÷õõóïðïíéãâãåæéìíììëêìíîîîïêèíððïóñïïîïðïñîììëçáâßãßÛÝåãÝÚÙÕÓÔÙ×ÖÐÕÕÕÙÙØ×ÖÏǸºÎ×ÔÏÉÅÇÑÙâãâãàÑÇÛÖÜäêïôùûýüûúöìÕ¬ŒyikŠ¾ÞéííÚØäîñïæÔÀ½±¢™µÎÛÜÎÄÒåèéáÔÀ­¨­½Ûèëîíé×¾¿ÕâäãÞÜÑ®}ŠµØßãáâÑœ\<]~ŽhHLs…q?9dŽ™};  - %(("!%'/1 - -.Ubbolhhp|˜¢µ·»º¼¸µµµµ³µµ·°°«ª¦££¡Ÿ‘ƒ„˜©›‚qZ+ - - - )HRbpƒŠ‰{my‡”ŽŽ„kk€¡™”Š‹ŽŠ‹~sqw„vrmnosrt}sn~xaN@AAH^klgjqrsvz„“–Œ‡€vtŒ•h?$   &E<*/No‡†€|iPG]n{†Žƒf7"';PgkfXRUdnfdPFIHA>H]qw‚~om‰•’“ŒwF07EYq‹‘Ž‘‡€o`tˆ‹†~un~‚…{lZE69@CKJZƒŒŽ€|xŽ‘“‘šœ”q[Vkp{iWKCQapklpj`M>?PSJHDB`i^HFFA8-"(& RQMKIGJD;+#%#" +:?CDXe^ZYSD9123443145$$#0Ik{oaZ^bksoyw_=15=83.0)#!#$%;@@DPgx|un\Q\d`[J=36;>BA4$ - - "-46:Cepvquqttk^TY\ZLLLW^jrncWC32.12?PM@/     - -   -   - '=??@<-!! '$$"& ':02-( #+-,!"+'$!-0*1/391:7,/3+21+)$1=>1/&*0/0;<57>8?83/1186>ED<=ADCB@@GIC?;@;@31/-"$  -(W¢ÈËÐÑÓÉÀ²}\RPci`dlnquy•ªÀÉÉÇŠ³ÒÛÛÙàáÝÛÙÕ××ÚÜÛØÔÁœ‰‡’Ÿ³¼ÆÖÜÝÜÜÛÚÛÒ°‘‹˜£ŽŽ“‰ˆ“§´±²ª®±ª®ÊÙ ­°£œ‘£¯¬µ¬¾Ã¯¤¦¬©³ÉÍ·¦¦­µÂÎÒÖÙÜÕŹ¥˜¡£¡¥¢˜†‡ˆŽ¥«­¡Ÿœ¡²¼«’‹¡»ÅÄÅÈÎÑÉÈÃýÀÄÈÄÀÃÆÈÑ×ÙÕ×ÙÞåèëìëìîìëìïìîîííéêçæééììíëëëêëëìëèãÞàæëïññùùøøùúùùù÷ø÷ðñó÷øøøùùùùù÷õöõôñïëèåäâåéíðïëíêíïîíëëêìíïðòðñïîïññòññïíêçääàÜßãàÚÝØÐÏÕÖ×ÒÍÎÕØØÙÙÙÔÍƵ¶ÎÕÖÎÉÉÉÔÝàâäåÞËÎÛàçêíðôùüüüüøðᾟƒ€wm™ÉáèíïÝ×åïóóçØû²¡—¯ÌÜÜÏÅÕçêêãϹ¯¬³ÀÙçëïìèÚ½¿ÛåèèæãÚ¶†˜ÄßæèçèÚ«aDYhJIn…tC7g™˜w3 - $"!"#(53 - (JSfieiuŠš¦µº¼¸ººº¶³³µ·µ¶¶´©­§¢£¥¢ž™~x °ŸŠsR' ">\ek‹}unƒ””‡|rr|~ –‡‰“Š‹x{‡Ž‡quous|o~qj€ŒwdF=A>HTfdekopyz’ž›‹ˆŠ}pŠ“šr:%  - - - -#9=&(Gm„„†~mTCUl|‡Žƒd=#"7HYmf^R[__deVRGIEBEWq}{~nqˆŒ‘–”T/27Cg•”’‹…†z`kr†‹Ž‰{sy‡k`Z98???NWu‡‹Œ‹€~‹Ž‘Ž‹›£˜€b[krvg]I9M^kjrrun^I;GKNDB?2$ - 405:;@E_quxwtutl[QX]\NNNTcgmkcWB/.039>GGA1   -  - - -  -!2=?9."   &)"&& $)270- !-/(!,2, (0-155843--.,3.*)+(2=906-20*24@7598>?2/,1>@;=???GHGED<>B=?8;A=5-.('#  -:("    "E¢ÈËÑÓÏÉÀ®{WUUfskfle{{x•­ÃÎÓÊ …°ÔÚÙÛÞÞÜÙÕÔØÚÛÛÜÚÒ¾ }‰Œ±½ÈÙÝÞÝÚÙÝÛѱ‘‡ˆŽ £–‘Ž‹ˆ‹¦¶°³«²³´ºÓßͨ¬° ˜‘£­¯·«¾Â±©­¬©´ÊË·¢ª´ª³ÅÎÕÙÞÖÉÀ²¥¢Ÿ£¥§œŸ˜‰Ž•©­«¨£Ÿ¤­·©ž½ÅÈÈËÑÏËÆļ¶¾ÅÄÃÂÉÊÕÚÓÒ×ÚÝäéíëëîëééìîêííìëèæçèéëêêêéêìììêçâßâéìïò÷øøùúùøùúùøøùøøòòô÷øøùûýùùùøùùøøôôôððìæâããëîíîííêëëìíëêëíîðññïïññññòñïïíëçâààßãßÝÚ×ÖÔÖ×ÒÊÍÒÓÖÚÚØÔ×Ðõ¸ÄÐÕÑÍËÑÙÛÝâãäÙÊ×ÚçíïîðõøûüûúôéÌ£‘‚‰‡‚£ÍãéîìÚÕåîôòé׎µ£™¯ÉÛÞÐÃ×èëëãй©©¯¾ÛçêîíéÜÂÀÚæçéçæÛ´ƒ’ÃáêëééܪjDOt‘eFIkŒoH6m••ƒ>   2'!"(!*44 -Hggmiy’¡¨¯²¹º½¹º¾·²³²¶¶±¶²ª«ª¢  œ”‹u{¤­ŸjR-   5Ocr‹wjo†•“ŒnmuŠ˜œ˜–”ŠxsŽ’ƒyosqpq~tk†‹w\E?@;?Gefikmpnv€Ž–”‡}xˆ‰†˜Ÿ”sC  - - - - - - 81!Cj€ƒm\DJh~Š‹‰qK 0BOhidONacgf]EBAJ@FOjx€~tnwˆ“–“Œi7+05Rnˆ‘Š‰ˆ€mhsx‚…ˆ‘‚psv|vlZG;5=CKN^}ŠŽ‡„†“‡ƒ†”  ‘x^^mkeZOCAW`kutushI?>QVH??Oep]DDE94#"%%BGHI=<;66###" 3.A=?GTfc^UQ?:2315660(+$&4@Veb`NR[cmsw€w^:M21540/0''&'&($1>IKRZkuzyfTNYZ\TA;9==;:4# -<13:;>B\pxzuurph^TX[\SKJU^jkh]QC2/.27>4,  $$!  ##&!  ""$&.4(***2.&#(2-%&+'28>2/731//)/.,'(-7=8,2+11016?=8:;;;5++0=:@==?BAKCDFA@C?D>>772*-&##"!C§ÉÍÒÑÍÇÀ®TYUdtneljzy{“ªÀÍÏÊ£‹´ÖÛÜÝÞÜÙÖÕØÙÝÝÚØÚÒ»ƒwˆ‹‘­»ÈÙÞÝÜÛÛÛÔŦ†‹’žŸ•Š‹…©³²·­»·²ÄÞäÒ°»·¢“š¢®·º®½Â³¦©§¥®Ë˵¨¬±±²ºÉÏÞÜ×ÐÄ»©œ¡ªª§¤¡š…‡™ž¢£¨©žœ£´¦‘ŠžÀËÍÉÉÐÐÌÈÃÀº¶¿ÃÈÃÅÆÌÕ×ÓÓ×ÛÜäëìëêëëéììêëîìêêæçæéëìêéééìëêèâÞáèîòõöùøøùùùùùù÷ùùùùøùöôôùúúûüüüùùø÷ùøöøøùöòñíêçààæëëíììëëïîíêêëêíñðòòññóòñïðïîìêåããâßÞÞÜÚÙÖ×ÚÔÉÊÐÓÕØÙÝÚÙÔƹµÀÐÓÎÊÌÕØÙÜâåãÑÎ×ÝëðññðöøûüúøìÖ¯‘xˆŠ‰©ÐåèìêÚÕäîòñë×ÄÀ¶ ¦ÄÜÚÎÅÕèìêäÒ½­¦¬»Ôäêìëä×ÂÃØäèèçãݶ…—ÅáèêêæÞ©hEUz‹†fFDk‚yM5pœ~3 - -  $"& !0-+ &Fbdq‡š§¨¯µ¸¸·ºº½¾º±°´µ®¯¯¤¬¨§žŸŸ™œ£˜v{ž¬£€kY,  - ?M^t†Ž‡rlŠ‹‘€ofj˜–’’’‹Œ„y‚ŒŠ~sqpmmprpn{‡Œ}YJ@88A$(Hlx…‡oRFLarŽ’‘{O"$?Zb_aTRVgiebMC?JHARju„†|jpŠ•“uI1/6Hf{‰Œˆ‚Žv`_qxƒ†’ƒnhn„€|m_O;4;=CQ^t†ŠŽ‰}††‡Žšž˜…bV_^YTOCFN[_frtsjVFAOWKC=:36/)!"$#$%/6>luG.kœªŠ?   ##" !#"+26  !Dd|†–¤°­®¶·µ·¼¾À¸·µ´µ®ª£¤¦§¦£¥›š£­°¤ˆœ­˜„nT*   #=Y`pˆŒ|hs‚††„pmkxš•–š—”Ž‘‹~‰ŒŠ…wpnlnfepyln†‹vePC:C=Fdijgenn}ƒ…Ž‹ƒ„Œ“’Š}‰†{a7!  -  ,8)!BZs‚ƒmZMI\n‰ˆ_'"=R^^j\KKgmeg[EINE@GXs‡}wo}Ž’•”ƒZ248CPr…ˆ€|‚iain‰…ˆwkl{ƒzm\UC83ABNTc|Ž‚{‰•Ž—œ—†gGNa_bTLGITZ`iuvm^LAJTK>65Ggr^@;:7-& ") :970,,8)''!!$%1;D@LcifZXQMA710551/--" "&5CS_`QLKP]fr}„„gB4:A5;7./+1B<$%&,7AHHRevsbTV]cVF523;;?:)  /8:@=Lcnuy}xrqc]Z]ZZNCKQ\bgi]L<3-)+-MJAB1  -   - -    -    -'152)! "  !" ! !'&*252,*(%#))"#+.0+1524<8-'()./(--.2>:.30*.:48@=2533511578:?=5DE@DC?:?EB;;@8@9-72&$   "EœÄÌÐÐÍÇÀ°y[VZp}lfir€~x©¼ÉÈÅ¥•¾ÛßÚØÙØØÛÚÙÖ×ÙÛÜÜÕ¼š}vƒ‹Ž±¿ËÕÚÝÜÚÓËĶ¡Œ~‹•£¦“Ž‰Š¨¸··¸ÎÑÆ»ÆÓƯµ¹¡™“Ÿ©­³«´³¤ž¡£­Ëΰ– «²µ´½ÒÚÜÛÙÍƸ©¥§ª­«¡££“ˆƒut€Šžœ¥´¦‹‰¡ÂÐÒËÍÒÒÊËǾ¹½ÃÂÃÃÆÊÐÔÔÕÕ×ÛàçêëëëêìëêìëêééåäåççêééêëëçâÛØàçìðòõööö÷øùøøùø÷÷ö÷öø÷öôðïòöø÷÷ø÷õõóôôóòòññïññíðîìíçÞØÜâéëííêìëìëîìêëîñòñòññòóñññïìèäãßÞàÛØÙÙÖÓÔ×ÌÇÇÒØÚÝÞÞßØɳ¨¾ÊÉÊÇÉËÎÙÜÜØÉÓÝßìóõ÷õòõøúú÷îÕ£Štkk…Œ‘±ÏÙéððàÙáìñðæÔ»±™Œ¢ÂÕÜÒÂÑâååÞм¬ª©¶ÉÚßååâÖ½¸ÌÙäâàÝÖ²‡Ž¾ØâäãáÕ¬kEXtŒ‰pF:f‡xG.aœ¬‘H -    #",4  &S†’›¥®°°²¸´·¸½¾¾º²°°°¨¦¥¢ž§£— ¦³½¼¬Œ|›¨š…iR- -#@Wbn‹”Š}qrŠ„vjpzŒ˜œœ–˜‘Œ’Š‚†Š‹…yvbehahmqovŠˆtbWCBABM^fkdgltrq€ŒŽ‹„ˆ|€ykz…†l@  -    -)2#5\jz‚q]EDZh{}ƒ|c, /EYbgbVZedhjkRHGCEBWexvclŽ–”‡b<.3<>_p††|{yje^hoy}ƒripv|nebE8/:@MZjv…‰‡‹}o†ŽŠ”–ŽkNUa`bTPFBNSdiy}qeO:HMK?728ZpeD:?94.'.+*'%")% !'(! '5=BEH_jb[ZQD?61/55-/4/%! !#1C]gf^QNQT`p‹†jE24?>=;=GB;1%**-!   - CžÀÊÌÎÍËÀ°xZXYhxmiiju~~Ž£¶¿Á¿¡™Á×ÛÙØØÛÙØØÖÕÙÚÝÛÕĬ‘„yƒ‘Ÿ±¿ÊÙÛÛÔÏÉÊÍÂ¥Š‚ˆ›¡“’Œ‰€¤¼º·¿ÓÙØͼ¾¹¦²²¥š•¡°·³­±¯«¢¥¢¢²ËÈ«‰€Ÿ¬¯·¸ÃÒÚÝÛÓ̲¡£««ª¥ª®«”‰zzƒ›¤®²¨Œ‹¡½Ô×ÐÊËÌÊÈĽ¼»½ÄËÊÐÐÐÒÏÍÓØÝåèêìêêëêìêéêæåååæèêééèëëêåÚØÚÝäèêëîíïðïîîïîñððñðïîðîîîêåæéëîíîññïìííëëëëëìíìêéëêéêéæàßÝàåêíííêëîîììíîïðñòððòóòññðîêåÝÛÜßÙ×ÛÖØÚÙÓÎÌÏÔÛÜÛÝááÜɶª¸ÇÈÅÇÇÅÈÊÔØÊÎáäêðöø÷÷óõö÷öí×®†nhil²ÔåìñòåÙãìððèÕ¾¼®˜‘¢ÇßãÕÃÌâèèãÓ¼®¬¬µÎáæééçÚÁ¹ÍßæçãáÛ¹‚Š¹ØàâáâÖ«qI[}ŽŽtO=j†€N5f¤±œQ -    -  &11 - -l›¢¬°¯´³±¯´·µº¾¾»µ¬¨£¦¤Ÿ ž¢«­´»¿ÂÁ«ˆs–©ž…mV3   AWbwŠ”Ž}on~‘†qnq…’–ž•™•’Ž“’‡wg_efadfoptˆŽwcUCACEM_ihhhnoxov|~mvxzu~…–™}B!  -  -   *9$/Pn€‹r_RGMis‚‡~e-(?T_`dbTW^_ehXL@@BBHar|ƒ{ff˜™“{M4.6?Qm~„~‚ƒtf^[dhu€{mp|€ushR<27@FOclvƒ‚z|sz‚“ŠŽoKKQ^ih_M?DZfiswpdU>AED>924GhnR877:3&#   ')()(*(&!)('!*7>?BLbid^YOC61.0/13.32(%"!!%)0FfuwhVTPXay‹ŽˆkD368?IF4.,((&&##)9.19>@GKC0 -  -   -  -   -$-..*, '! !" -"&$$0!)%"450&'$% $" 064/7?80(,+65*(1.-=70.+.,25;8375573-;049<:==:E@GJ309?A:9<@?66*1++  "B)C›ÁÉÌËÎÉÀ¬|Z^[jujhigyuz’¥·º¾¸ŸÃÖÜÙ×ÜÛØÕÖ×ÙÚÙÖÐø¥|uˆ‹Š›±½È×ØÒÉÍÔÛÜѲ‰…“¤¤’’ŠˆŠ¨¸µ¹ÁÚäèåϾ·­´´¥–”£°´·ª¶·«¥£Ÿ¢¯Ìʱ‡h¥¬°¼¿ÌÙÛÜ×Îÿ®¢­®¯¯¬³µ¥–„sow™ž©°¨Š¡¼ÒÙÓÈÍÎËÈÀ»¸»ÀÃÅËÑÒÑÍÎÏÓÛáçêêêêéêêêéççäääæççèèéêêèãÞâçêìíïîïðïðòòðïîðððòðñðïïîïðìåæêìïñó÷÷öõóðííííïïðîïïñðîïïïïîêåááçëëëéëêëëëëìððñïññòññòñîëçßÛÝßàÝÙØÛ××ÓÎÊÌÑ×ÛÛÞáàÚɵ¨µÃÅÆȺµ¿ÎÄÁÜãèïõøø÷÷óô÷öíߺŒtaZikv†•·ÔæíóôèÛäïòðéÛ¹®“¤ÄàäÚÉÐäêëæÖÁ³©¨´ÓåëëëéàÁ¼Õäçéçæᆇ½ÝäèéæݳsOXv“qH@f„‚K5_ ³ R  - -  $",-0$ - -1w¤ª®­´´±°°µ¶µ¸½¼²ª§¤£¦¡œ¢£¸¿ÁÅÆDZw“°¤z\5   -6Tbm…“ng|“…xpw–›ž›˜™˜——’š“–”ˆ{jf^icgimfj„iOJ=HAAN]m|€{}Š‘”†Š}t_LQammi]HES]ckvqeUE=>FB<75B]i[A4<;1-((!)/*,,,/&%+$ #,.,*4:>FTbjh`VK@931+/4324/$ " "#%+4Gh‡‡wbYVVf~š‘rC/146:@2-,,,!&'4>?I[gp‚{j][``]TA6179@:3' ")427BUhpswrqrmb[[^ZVLEIO^kolcR:64228EUVN8!  -  -  -    (4327& %!%$("$ " "+& *42'! ! !2427?@:-.)(3/*-+/5?40',10,1841/39681.29B>678>=AEA7/8A?><>:6=343&#! -  !EžÁÈÌÌÍɬy[^]fxning€}z¦·¾Â¹˜ÃØÙÓÕÛÚ×ÑÖØÙÔÐÍÅÃÅ·“{v‚“ž«»ÃËÍÎÓÜäæäض’Š‡§¦“’Œ‚€©´³»Çáíðïæк´Á½§•‘¢¯°·®¾¿®¤£ž °ËɲŽlo‡ «¸ÅÌÖÚÛ×Íÿ¶«©­°¯¬¯²­›‰oc}›Ÿ¥°£”Œ ½Î×ÔÈÊÌÌÇÀ½¿ÁÃÆÅÍÓÔÎÍÐÐÑÙäéèéëêèëìéçæäåæäçèæçèëëçàÜäîóôõôõööö÷øøøø÷øöøøø÷ö÷ö÷øöôóïìðôöøùûüýüùùø÷÷ööõöööööõöö÷÷ö÷÷òíåáæëíëéèêíìêëîîððñòñññòðîêäáÝÞÝÛÝÜÛÛØØÓÑÉÊÍÔÚÜÜÜßÙ̹ª±½ÃÍÎÄ´·ºº®ÇäåíôøøùøõöòôðãÆ™th__]fx‰—¸ÖãëðóéàæðòñëÙ¹®››ÁßäØÇÍãêëèزª°ºÒåîîíìá¾Õåêèéçáĉ…¼Þèëêéâ·uJZu’qN=gˆzN5^œ¯£b  ".4  - /l¥««®´¯°­°·µºº¿²¬ª§¢¤Ÿ™š•˜°ÃÇÄÁÄÇ¿¦‰}™±©”{\4   5TWi“uo}‘‰{q‚—™™ ¡š•–—•”˜Œ†zmb`egbekhey…zcLIA>?J`bdheccjkqtŽ‘”œ££˜ŒŠ…h@- - - 5>0 $Bcq€…aJHAZn€‹tB +;KVg\\LN`ff]H@B??8Tcmx}v_dw’›’f@-$4=Roƒ‹ˆ‡ƒ{i\SZinŽ~mvxtvocR@21=AAYjuxƒ‡ƒz„‘‘ˆˆ‡ˆ€gMLYgprgP?FZbhzsjSF>@HCC<6:LgkW>1151#!(-21-&&/,# '*(%)1<@CRejg^]RD<93/,4<667+!!$)()-1HkŽ’„m\Wcl€’™•zG*'057<9' - -!'117?Rlvtopqqpc^[Z\VJGMN`irl^O=6402>IYWP>  - -    -   -  -   *=A97)#" ! !#& %  &#*.,'#  " '3369:7-.0(/-)+.)1=<,+'-629436925;;.)1<>8;=9A@><=:29>:5<><=A760&$ F ÁÇÌËÏÊÀ£v]\\j}ogplv}¢·Âþ›—¿ÕÚÓÔ×ÙÖÓÖÔÍÅÆÃÆÔÚÊ}†“–œ¯»ºÃÈÖàæéëéÞº”Š†©£Œ{‹ª¸´»Éãîñòðæ˴¾ª—Ž¢²®±°Âű¤¡¨¤±Èǯ‘g^d’¬·ÇÎ×ÚÙÕÎÄÀ¹°«ª¯° Ÿ§­¢ŒuŠ¥®¯¤—Œ¡»ÒÙÙÌÇÉÊÆÁ¿ÁÂÀÁÌËÍÒÑÍÑÏÒÖÞåçééêéêêéääççèèçæçéêêæÝÚâíõøùùùúúùùûûùùúúùúøûûùùøùùúù÷÷ôóõ÷ùûûüüýüüûûùùùøùúùøùøùøøúùùøøøóñèáäéëêééëíëêëíîïñðññòðñîêåßÛÝÞÜÚßâÞÚÙ×ÖÏÎÌÑØÚÚÛßÛɸ¤±ÀÎÕϾµ¹µ©®ÐáçòøøøùùùôòòåÊ£zd]``abx…—²Óâêñóéßçïóòë×Á¹²¥”ÁÛÝÑÄÍáêíêÙí­±¸ÉâêîðíâüÖæêêêèâÁŒ‹¿àêìêìã¾…GV|‰vS@d…wP7`œ²§i%  - $&"$'0$  0nœ¦¯¬°®®­®³µ·¶¶¯«¬¨˜—‰œ´ÆÈÃÂÃÁÀ°}“¬ªa5  3Q_gr‹Œ…sixˆ†‡~s{“˜›¡š–—˜™–”Œxskbm_[_dhkx…|k_HC>F@OTZeknbcfnˆš•“‘’Šyvzc="   -  5G2CfsŒ‹€iI<7Sk€Ž‚L$7EXhh]QVbdkgTMNA:8EWmu~medr™š˜}J/,57E_|…€‚ƒ„wi`WVfuƒ’‘Œzopxxsh_Q2'5EFQ[s‚ŽŠ‚€ŠŠ‰‹ŠŠŒŽnU=G_nleP>?IZh{zjYJAFFIB=87@\mhE9:40# !+:8510-6.*!!!$!*3:@ANckc]\SFAC4025665;*$  !%''&(5Hf”mYXaj}‘™”‚E)&*-2@=0(&!!!# '<@JENap~€y^O\Z^XL8547( !.218@Qeqrmmoqoc]]``\OMLX_cihZG?8245:W^XQ9$    -      .8AD<'  .$"&! $$ #+"$,.($'-# ! *543)281*.+'.3),/59=/&-/0333:=6159:2+-75>;8:>@A?:35=<<92:6"     !@½ÅÉÊÌƽ¢xX\[hmnjl}„†”¤¶Âýž˜ºÑÙÖÕÙÙ×ØÓɺ¹ÂÏÝâà˧‡{…‘‘ ¯»¾ÈÔàèëìëéß¿˜‡…¦¤‘”Žƒ­¹¶¾Ëåðóôñïâų±¤˜—¡®²´­Â­¥£¢¤µÈ«ˆh][~¦ºÆÏÔÚÙÖÏÆÈÅ¿¶©®± š©§˜”˜ž¥¨­±¡““¦¿ÒÛØÓÈÇÈÁ½ÁÀÁÂÅËÌÎÎÐÏÑÎÌÒÛâçèééëéçæâäççèêèæèèèäÝÛäîôùùùùùúûùùûùúûúùøùúûüùùùùùùúùøôõ÷úüûüýýûüüüûùùùùøøùùùùùøùùùúúùøùöñéááèëëéêìëëéêîïñòòôòññíèäÜÜÞÝÝÝÛÝàÞÚÕÕÐÑÏÐÔÙÙÛÝÚ̶§¬¾ÎÐɾ»À±£±ÊÜëõúùùùúøóïìÒ¬€a_Z[cdlq‹˜²ÔäëîñéàèðóóíÜÀ¶² ‘µ×ÜÓÂÈàîîéÚ¿ª¬¯°ÃÞéíðíâÃÁØçêëêëäÅŽˆ¼àêíîëåÃ…Z_q‹sMCg€qS>Q˜¶¨\! - - - $!!*2" +nŸ¤¨¬¬«®µ³®°­³°®¯¥žŸœŸœ¢ ‘ž¹ÆÊÇÅÃÆÁ¯z‘¥ Šud5 -  8P[nƒ‘’„rjj‚—Ž~m|‰ ›œ¢£“—˜——“’‰…stqld^bllnu‰t`DCB=AHNccgcngkm|Œ~rqtrmcp|f?)  - - - -   3>49_s‡ƒ{`F<;E_w„‰S -FajeTJKaijh^VF@@@>Qditvhaa{˜š™ƒW8+318Nh„‰‰…tufWVq|€†“ˆop||qoeO>-1BEJZo{‚ƒ€z†‡Ž†‡’‘‘{`?=L\dhXD?AK`vpbJCIDFE??30PeiR<16+&DG?8502-(# !%$,47=4( !,379CUhpqpppspa^_c^UJGJXdlpk\JA72/5=Qe`O:"    - - - - - - - -    - -+A?A8'",&(#!!#!$$& -&-'"#$%! -'*4922981/,-*-1-#,4:;4),,.1:773258673*4657397??><5475-" -  JÀÆÈÉÉù vXUZk~njpez„‘žµ¾Ã»™”ºÑÙØÔÖ×ØÖÌÁ³ºÏÝæçäЧ‰‚‡Œ’ ±»Ã×àèìëíìêßÀš…‡“¤¢’‘Œƒ†”©¶¶»ÊåðóôôñïÜ´¨ –—£³·¹­¿Å°£¨Ÿ¢³É¾¨‚g[[g“±ÁËÔÕÕÕÓÌÌÊį¬±¦’‹¢ª›˜¡«§¤§¯£•–£ÀÓØÙÓÊËʾÂÀÀÄÈÏÑÓÐÒÑÓÎÊÓÞäçêêêëéçåãççèééçæééâÜÝçïöùúúøøúüùùûúùùùúùùúúúúúúùúøûûùù÷õùûýýüýýüüûüüúùùúúúúøø÷øùùúùúúùùùø÷ñæßãèëëêëëììêëìïðñòññðîçãÞÛÛÙÛÜÚÝÞàßØ×ÖÕÒÑ×ÙÚÚÝÙʶ¬«¾ÊÎÎÉǾ¨¦·ÄÜíöùùùùú÷òíÜ»•hSNUP]oyŠ‘¯ÒãçìðéãèñôôîÛĽ³™ŠŽ¶ÚãÙÇÏãëíéÚ¿¯­­®ËßéîïëáÉÁÚéêììêæÈ“‹½àéîîìåÆXUq…oJ@dxwX7Qšµ¨a"  -%!!#")3 - ;l ©¥¦¥«±²­«¯ª¨¯®¤¥Ÿž—•¬´¥ž¢¶ÂÄÇÀ¾¿Á«ˆt¢œ‹wV-  >NXd‚„pr…’š’‡tu’Ÿ¦¤¢šœ–••ŠŽŒˆyvtfb``lkgn}|n\KH@<:GQdjfc\__ertsc[cnjdp‚‡cG+   -  (B6!5Zs|s`OC6D]pˆU -":OafYPTRdhfbPHC??;J]gntk_^mŽ›ŒpC(($5=[yŒ‰}pidZgpxƒŒ—‘~n}€|jZ@/.;?OTgr~}‹ƒx|Œ‹€‚ŽˆnO87Pbc_E4:F[q}yhNEABFIFA,*@_h`P20)#!#LIF=8750($! $075=APge]Z^TD?967A78633,&"!" &())0Ij€qWP[ey—”ƒO,"'103361*0"#%")>KQKXds€xbSS]Z[Q<26=;80'" ,479@Wiqyyrvtpfb_]VSEEKUfnkd[G<7./5;S^YN7   -  -  - - - -     -D?@8/ -%"%!(!&&("! " " "#)*"&'# ! "%,25/7;4.0(%10) ((.:10,%.12485.10360,''5:4657=@@G==9CJC@?<7@;0/50&# GÂÈÇÉÉÇ»žs\QZmyggnr{€w£´º¿¿˜ºÏÕÓÒÔÙÖÍɾÂÓÝåéêåÑ©ˆƒŠ•¡´ÀÌßæêëëíëêß½”†‹¤¤‹†Ž”©¶³¹Èäíòôóòò槠ž—§¯´·®½Á¯¨§ŸªÁ½¤Œic[x•«¼ÃÍÏÑÒÑÌÎÒÌÆ´ª®©Ž†—¡¥­©¨«­Ÿ”“ ¿ÒØÖÏËÎÌľ¿ÄÄÄÆÐÑÑÒÐÌÏÏÑÕÜåêëééçåæåäåêéççèéèàÛÝéðôúùùùùøùúùüúùûùùüùûûûûûúùùùúúùúøõõùúüúûüûûüûúúùø÷ùùúúùøùùùùùúùùùùûûùöïèààèêêêëìíêéìíïïñðððïëåÜÙÚÙÛÜßÞÞÜßÛ×Õ×ÔÔØÙ×ÙÜØÊ·­®ÇÎÔÖËů¢¬¸ÇàïøùùøùøõðçÍžr\CBDP]y“™¯ÐãéìòìâçðôõïÜż¸ž‹½âæÚÇÑåéëê×½®«¯·ÏåëðïïãÍ¿ÖæìíîëæË–Ž¼áêîïíèÁ‚UXr…rQBayrQ2M”²§d+ $( %+6 -$lœ¤¢¢§«¯®«©§¨¬¨¤¡›˜£«¸½°Ÿ¥³ÁÂÁþ¾¶§‡z‹—u_7 - 8PX[Ž‡|pr…š—lu†šž¥ žŸžžž–ŽŒ’xjkfYVad_am{„lVND>>>DFNaa[PRSLWbdTSdpcboŒ‰jA  -   -   (0<5(Zo€|ydMD/Bdu‡‹‡a" -3L]ff\JKZ^gaWKDB:@BWhq{pbYeŠ˜˜L*$,5NxƒŒŒƒsvm`ap||‚’–„gq…zpcP1$6?HOamu}‚||‚Š‹€ˆ‘•‰`:27D`_<88COfyzsUD=@JJIB.'1Oim^D/%#!LFE@<9:3)"""$-48>DLagc][QI=9<8>:9:820/# !#&'*/=a€‘ŒpRJGYs˜•„R,"$65465.'%##!"(=IQNS_qxhWZZ[_VC98=<@;0!!08>=E_msuzvrurib^a\QGFP\ghjeSA;:453381/<;/-+383159=@>@?59@C<@:785:61/'   I ÃÆÇÊǸ›s\U\qthfiqz€x•¥·¼¾º–¸ÍÓÓÖÙØÔÇÇÌÖßäçéêäϧ‡€„‘—¡³ÁÑãêêëíììêß½–‡Š¢›‹Œƒƒ”©¶³¶ÂßèíïïðïéЫšœ›œ¨³²ªº¸¬¡¦¢­¿¸¨†dgi’¬®¸¼ÀÇÈÌÏËÐÎËɾ¯¨­˜‚•‚’£­¥¨®Ÿ”—¥ÂÒØÕÒÌÊʽÀÅÇÇÈÌÊÊÒÏÈÊÎÑ×àåèéëèèåäååæéèèçççßØÜéñõùùúùûûùùúùøøùùûúúüùüúùúùú÷ùùø÷õôððõøööø÷÷ö÷øø÷ùúùùúøøøùùúùùùúùøùúùúúøöïçÞÞçìëêêëëêììîïðïïîïìéàÜÚ××ÜÛÚÙÜÝÚØØÖÓÓÓØ××ÛØ̺«¹ÇÐÕÒɼ ž§¸ÊáíõúùùøøöðÞ¾‹[XBKKC\„¯³¨ž±ÑâèïóìæêñóóíÚĽ° ‘§ÕæåØÉÏàéêèÚ¾®ª«·ÕèíïïïæÌÀÕèìîïíèÊ”¼áëðîêáÇWRq‰ŽvI;X~u[;W”°¢n'   &#(74% - 'iž¡£§©ªª©¥ž£¥¢šŸ“ªµ¸¹«” ¶¿¹»º··°¤‚tƒ’‡oma7  8O_e~‹„xnz„‡‘’‚mo~š£ ž›ž¢¡Ÿ™”’Ž‹qj[^XQ^eicg„„k[FB8:5=Qoˆ‘Žp2 - -&Icb\REDR]acVN@<>CFQetz~wa]z‘–ŒY- !(.Fe|†Š†{~oaMfow}Ž—‰oqv~~pgT9$.5CNMcr‚„}lcrƒˆ……‘•‰h>0'2BO7-5:DZpqiZF?AMQN:-#'8[j^K0/)'QJIE@?=8. &%%')1;ABPbid`ZK?>:775777752( """#%,:Y}’ŽlN@:Km†š™ˆU,*,/57,$(%!" !'9CJNP^k~l^ZY^`YLA<;8>@7 %2:8;G_qutwrutrg\]__WPLL[glg^RE=9:722171557289;AA<26?FF=67=6886/&   N¤¿ÃÇÉÈÀ´™t_^]hxjell}|’¨½ÀÀ¶”ŽµËÓÕÓÚØÐÇÏÚâèéêëêåѤƒ|‡’°¼Îäêëëêëíéܼ˜ŒŠ–£›‹Ž‹‡Š•«¶´¸ÂÜåééëëéåÓ±’‹˜ ©°±§´¶§Ÿ¤  ¨Á½¦‰glq Å¿±º¹ÂÃÃÌÎÏÎÉ¿·ªŸ¡—~‚‡yw£Ÿ « ’£ÀÒÙÒÈÉÎÌþÁÂÊÊÍÊËËÌÌÍÉÊÏÙàåçéêèåãâäçéêéèçåáÖ×éñõùùùùúùüúùúùúúùùúùùùúùøùù÷öôôôôóñðììïòóñòôòññóñðôôôö÷ø÷øøùùúùùúùúûùùúøùùôîèÛâêêéêêêéêëííððïðíïêãÛÙÕ×ÚÚÚØÜÛØØØØØÓÔÕØØØØɸ¹ÃÌÕÔÉ¿§•¢©±Îáíöúù÷÷÷ôéÒ·„`M?ABMg™Ç̺£´ÒåèìòîèêðòòëÚº¶’ÀâçÝÍÂÏÞèëèÙ¾°®®¸Ñåìððêå̾ÕæíðïíêÌ‘Ž½áêîîêáÉTPnˆŽpLCb|wX4R¯¦u0   " ,4"   ^•šœž›–›š’’ˆ‚©«­«™‹˜®¶ªª©©¤¥—t‚†~mnR/  - 4MZay‹Špe~ŠƒŽ‘‚koz”¡žŸ¡¡¦¥œ˜”Žˆ„ˆunn^YYUVcg`eˆl\L@6;?K?EIFJM@CH[[gcggimij‚”~I)    ')=fmxr]C@/>Mh€‡‰d= - 9U\ZI>@KLQcT>;6@?AF`s~}m`O_ŽŽ‚Y("#0X|‰ˆ…}|zx[IJ]mmo‚pahtqo[C(#2;=DKY]jdNBWt|llyˆc9)$(00( 7FOgjWG@;@FCC6,%*BVZQ40(%"ZTNHB>;6."$ !#(#,4=@DTgig[XMA@B;88131573+! $!"""$"*9V}ŠmQEESkŠ™™‰U-%!),.8:2/)'$%!!6@HNI[gyƒteYT^_[LA56??<0(&26;OYVD/   - -  -  - -    - -  3! -  !"*&(%&! " '6690.+*+,)&+:3.*+0*'15;7569472441657/69:E>729@CB=:?7/112/& -   "K¢½ÀÇÆÆÀµ›q^\_p}hgnm|x}“§½ÄŶ’ºÎÓÏÏ×ÒÊÎÜãéëìëëéäѦŠ†ŽŽ•¡°¿Îäéêêììêèܼ˜Š‹“¤¡”‹ŒŠ‹”ªµ±¼ÈÜèéêêëìèضzŒ¡ª¬­©¶º©£¤Ÿ¢­¾½§Šgfu©ÐÕ¹©°±»»½ÈÍÎǽ²Ÿ’Ž‹}oy‡~jw‘ž£«¥–”©ÂÕÚÖÉÁÉÍÆÁÂÆËËÎËÍÏËËÇÉËËÕßåçééææäåéçèæçèæÞ×Úçðöùùùúúúùûûúùùùúúüúùùù÷öõõòôôöõ÷÷õöóîïòôöõõõööõôóóðñðððòóööøøøùùúùùúúùúûøøøôñëàáçêëëêëëëíííîððïðëäÚ×Ô×ÖØØÙÜÙ×Õ×ÖÓÓÓÖÕ×ÚÙ̼¹ÃÏÒÏ¿­—Ÿ¦°Éáïöúúù÷÷ðÞÁ¹›iKN^cx†‹{mv‚‘|mo{›   ¡¡žš’Œx~nfcZW[Vad`ftteEF><67:GSSRNRJEMeqlnozykrŠ“ƒR6"   - - 8>9;0(-/&2IV_kS4 -  +?DC90('<==5+))58:-?ONJ@.%7NPSD,!!#1UstdTHKZK1-/:9+EYM6DUbS7$"##)),33-##+GQRF7CMA.! $ $5FVZ>57;8;=?:5*'350& _WQGA>:8*(* ! +5;=DWaid\SIC@?:97<5423.& ! !%+#$(*5S}ŒpWXW_n†–›ŽZ3%$-21-56$'(' !#4BNQJMbp|xeXX[^\K=54?><:+&,9D>Pdmuvvv{yqc]\[TKJRT`fdcZRE55021K<;72,2/    "Q¢¿ÃÈÉʽ¶Ÿx^W_szkhko|z‡”¡­¿Ã¾—•ºÎÔÏÓÑÊÊ×åêëëëêëéäÍ£†Ž•¦¶ÀÏäéêéìëéäÖµ‘„„“ž›”‘Š‰¥¯±»Çàëìîíîíêཔ¡««©¥»º¨ž¡  ¨··¤‘ofw­Î׿›—¤¨´»ÁÊÎÉ¿¯œ’‚yqn‚~lj„›¤®£š–ªÀÑÙÓÈÂÇÌÆÀÅÇÌÐÎÉÉÌÌÊÊÉÎÌÕßâååæäæååèæãäççá×Õäíñ÷ùùùùøùùúúùúøúùùùùøöõõòôôö÷÷öøùøøøöñïïòô÷õôøø÷ù÷÷öôôñððñóòóôõøøùùùùùøúùùùøùôïæßâæéëìëêëëêíïïïïíëãÛÚÓÔÕÚÚÙÙÙ×ÙÛÖÑÐÐÓÒÒÛØ˾¶ºÇËƾ¢’–œ¥ÁÝïöùøøøóçоÀ«rT>E63896.68<4&% YWMFAB@7, "#-9>>EVejh^VLE?;53=>:5660'"!"""&*&)/?X~ŒuZ[]bqŠ•—\6)$,3615(!*&%,8HMGI^jy{iXV[^\N?64:@@=)(09??Lcoyvx|€qb`d]QNKRXbbccXIE814235>BE8%    -  -   - - - - -  - -#:FB62  !#$ !"""$$&&&""! *"%,1201))(%,44.),0'*35:<216950%+38=4/1>F\cid\WLFB<47=B639:/( "#&&$$+3B]{Žx]VYcn‡“™`7$)2713-)! $$+6BLKMXgxyo\UX]ZKG:7?E?:4!$16C@LanzywzwwodZ^\VUVPX_d`^SLC40213?GMG6.        - - -  -     ;@@>- -"  "&&"&&##!"!##&#5333+))&" - (95.)--%036::59962,/.4345359C>=?79>?==A=>:3-10$$ -    7f«½ÄÈÆÅ¿³”pX\]mvjmur‚…‘”“©´”‘ºÏÓÒËÌÉÎáèëêëëëëêåÊŸ…ƒŽ”Ÿ°¿ÐâèêêêèäÙÊ®‘Š„¡™‰‡‹–®µ±ºÈßèëèèééçغ”‰Ž«´³¡¤¦ œŸ™ ¬´¬¥•††«ÐÜÈœ}Š™ ª¼ÅÉÊǵ«›Œ‚{wirqhcƒž§¤š«ÁÑ×ÔÊÉÓ×ͽ¿ÇÉÊÆÅÅÈÈÊÌÌÇÊ×ÞâçããââäççåçèçÞ×Úæïïðô÷øùùúøùûùûúúùùöóôö÷÷ùùùùöóøôóóòòóñêæèíððóóòóôñôôôóòöøøöõóõòóóõõ÷øúøøùùùùùùøõðèÜÝèëêêééìëêëëíîíéãÞÚÖ×ÙÜÚÙÕÕÕ×Ö×ÒÕÜÛÚÙßÝͼ´¸¼ÃÁ¶ ››ž»ÜìóùøôñàÈ»ÈÊ®|\KCE_’¾ÚÚÊ®µÓãåæëéæíñòñçØĺ³­­¹ÑÞãÝËÉÛæèæÚ­£¨°ËäêíîìåξÍåëíëëéИ‡µÝêíììåÇ‘]Nn‹rO@\vyP:U©¦~0 - ," ->WdY`ccca`ZVT^\luvu‡‡ˆŠ…z{ƒ‹Ž„†‹„zr{‰„yu`3 - - 2NU_x‰ŒŠ~pkp…ŒŒwtu}‹“‹†„‚‚wzvtyqjeYZSM@T`iabs€ygTBD::?=50(*.5?@Oaosywrorlf\\_XMRO]^bebWH=5/++5=FNF>&     -    -    - -  - -   :AA5-  - #"!!#)($$$ # ")%&".12/)((% /:/,)++/0174236164.,+622688@JC6655<;B@<>?:1.0) -4m­ÂÄÆÇÄ¿±–kVYaouksqqƒ‚~ˆŠŠ†‹”¶ÌÕÒÉÆÈÖàãèéééêééßÄ¢Šƒ‰Ž’²½ÑãçèèèæàÛÏ®‹…ƒ£ŒŒŠ—¬®°ºÈßèêéëêèæÙ»›Ž™ª³°¬«§Ÿ˜¢›«¸¯¡Œuvˆ¬ÏÜʧ~‰•œ±ÀÈÌǹ¯£„‡~sjhsigwœª£¢Ÿ¥ÀÔ×ÕÔÐÓÕ̽ºÃÆÉÄÆÅÊÊÌÍÎÊÉÖÝâãáâãååçääçãÞÚØàîôõò÷øøøùùùúúùøùøø÷õôö÷úùøø÷õõòôóòóòññîêçêíïíðððòòñòòóóôôõ÷øöø÷õòóóóóòöøøùùùùùùøõòîèÞâéêìëêéëëêìíîíçßÝÛØ×ØÜÚÙ××ÓÑÔÍÍØÜàââãÝϼ³²¸Ã𛜖š´×êòúùôêÓ³®À­}\MEFa˜¾ÛÚÊ­¯ÓãããçæäîòòñèÖÄ»µ¢¶ÔßãÛÉÁÔâçåÔ½°§¨²Éáéìíìå̹ÊãìñíëçÑ™ŒµÞêîìëæÆTPm‡yS;]yxW>L‰ž p1   -#0+  9\\_aagb]Y\SPZdimrs‚‰ŒŠˆ…u{…“‹‰Œ‹{ƒ‡Œy{a=  0IUepˆˆŠ…oks‰wnq{ŠŽŒ‚‚ƒ{moonnoa`[YRNEL^ne^r†}oUFG;:AUbetj`cagg|Ž˜“Ž‘Ž†›–m@!       - -  - - -    -  -   -  - - -      - -   - -#& e_W\SJB7$"&)"&$,9@BESksnsbNEBC>@:9<<71,'"!!#%$" )08Wv‡{W]`bn‡“™ŽgB(%442=7')"##!(4=EDCKbnto^XXX]REB39A;;4&/44<@Obotwvurpng_\YVKLPV\dh_NE<8.,04;LSJ:$  -  -    - -   -  -   $>EA/&  -!$ !##  "$#*3* !% #!0," &56:*'$( !/7""%)'!*5:8332133,,065/:7;AIB>72489AH<:=714)&% >)- - - .g®ÀÂÆÅþµ—jUUbkxijq|…Šˆ‚…‚š¾ÏÕÓÒÎÊ×ÞßáãéëéèçÜ™†ƒ‰‘’ž°¿ÎáçççæåáÝÒ·†‰‘œˆ…ˆ‹‹”ª³´¸ÅÜäãäáááßÔµ›—‘Ÿ©®¯¯¯¡¢ž  ™«¸¯¤„jn†³ÑÜÌ©…x€„µÂÈŹ²¤‘|‚xmfnpqz‘ª¨–š¨¼ÑØØÙÔÕÕÊ¿½¿ÁÃÃÅÃÍÎÐËËÌÍÖÝááãããåäææççß×ÖÞéðóõôö÷ùøûúùùøùøùõõõõ÷øùøóõöõôõôòïïìêëäÞÜáÞÛÚÝßßãçëëîðñòòóôôõöø÷øöõòòññõöúøùúùùøøóóïìãÛäéêêéëëëêêëëêæÝÜÜÚÙÙÚÛÚØØÖÒÎÇËÓÞåæåãÜÒ¸±·Ãº¥ œ•ŒŒ˜³Òêò÷÷ñá⦸Á©[LFNlŸÄÝÚŪ®ÎàâÜæäáíñòîç×¹®šžºÖÝãÙÅ¿ÈÑÖÛÌ»«¢¦³ÉÝçëëëåͼËäëìîìéÒž‰±ÜéìëìçÊ’ZLl‚‰|S6^yv]9Gˆ›•]#  "64   7Zbcja`ei`ZRNXdposl‰Œ…ƒz|†‘•˜—’‘––“€…ŒŽxuiC'  0TTat†‡Šnlo}‡ˆ{sv€†ŽŽƒ~pmkjmoa]WTT^WVamihuˆ~kPKA@9844(#!!$%! "*8UzŽz_X`^n‰–™‘oA/!-2265/% !'$2:FEEDXhspdXUZZOK>76:>>4% *657;Qduwtqrssob`UPKFDLW_fe^TI@550871& #" "#!*-%## !$##!!096/(('$$$/:$&*&,55>4,/75202477:A99==@@8923=<<95:437+(%  - - -  -c¨ÂÅÇÇÄ»±šrYZYkphjv’¸°–—‘ˆ„ƒ|{™»ÌÒÒÑÎÎØÝÝÜÝãäæåä×¹˜ˆˆŒŽ”¡±ÀÍÝâãäãåáÜв’‰‰ˆžŒŠ‰ˆ’¬²¯´¾ÔÙÖÑÑÎÎÊ¿¯š“•¢­¯®¥«¤Ÿ ž›Ÿ«³ª¤ˆdm~¬ÒÝΧ‹‚ƒ|‰¢º½¾¸¬Žƒ‚}mow}‚Ÿ¦›œ¦ºÌÑ×ÕÕÐÍǼ¹·¾ÁÂÂÄËÑÒÑÉÊÌÓÚßäãââåäæèæåÛØßêíñôóòøøøúùøùùøøöóôõöø÷÷÷õõõôõòòìèâÚ×ÒËÁ½Á¿º¹·ººÂÅÏÕÚâèîîòòôôôôöøõøõôôõ÷øùùùùøùøøôòòðéÜßåëêëëêêééêêéåàÛÙØÙÜÜÛÚ×ÖÓÐÉÅÊÑÚÞãåçßÏÁº²¸º­¡ —‰‡‘¬ÍæóùôëÓ«’¡·È¬„aKHTx£ÈÛ×ì®ÈÚÚÚäããìóñíäÔ½µ«œ¡ºÒÜßÖÀº¾½ÆÌų§Ÿ¡¬ÇØäéëéåË¿ÏàèêììéÏšˆ±ØéííìæË’UDg{H;Zu}b8J~“‹Y'    +,  -/Tcbeca\`f_a\ahr|uv}‚‡ƒxwŠ˜£¢ž¦¤¤›…‡Ž‰xh`=  *HP_mu…‰}wfxƒ„slo€Ž‘Žƒpqwricgfgkdc]_^aZahoc\nvh^A@=>DXionyhZehml~‹”ŽŠ¥¦}C)  - -   8B4   -         - -  -    -  -   - -        -c`b[XUE9)!$!%!!#08@BDQkpoh`UKH>CE?@<;68-&"  !)*# &3OzŽ“bScel‚‘™“q@""! ++-2.-#$!%#!4:@FGFRepme[RTWPL?457:81'%,30?Vdookkoxwk\UOTMFILYab^[NF::8546@JLH4    -  - - -  -   - - - -  (3! - %'&$%'!!& !%$,44+&*+# '((*&++(,)1619=/573-*'256306=EE<@;;99@B=;<730-!! !Q¢ÀÅÄÂÂÀ¯“kTW`knov¶Î³’•¦«‹‚‚˜¿ÍÐÄÂÊÑØÚ×ÖÚÜÞÞãäà߇|ˆŠ”§³¼ÈØÜáåèçäÛШ‘Šˆ‘¢ŒŒ‰˜ª­­°°²±°©­²®¨£ —‘— ª¨£™ž¡š ž˜£¥Ÿ‡kmlŒ­¸²–ˆŒoVT\s‚ˆ†Š„‹€†…Š‰Ž—–•”›Ÿ¢ žœœ §§´ÁÁ¸°ª«¬´¸¼ÃÐÕÓÎÎÈÈÎÙÜáããáááåæâÝÚãðõöôðôôøøùùùùøø÷ö÷÷øö÷öóõôòðéàÕƳª¥˜Ž‰Š…†ˆ‘‹}xz€‚ƒ…††••–¦°ÀÔßéïðòòôóõö÷ùùùøùùùùùøøõòôòðéáÜäèéèééëëìëæãÜÚÝÙØÞÛÞÜÔÎËÄ¿¹½ÂÊÖßååßÑÄ·¯®¢“ ¡˜’”¨ÄÝðïãƤ‡‹Ÿ¿Í¹jWTX€®ÌØÒ¿¬¤¶ÅÊÐÜÝäðòîèÜ͹¶¬£¬ºÍÛÜÔÅ·´«­­­©¡££±ÃØãçèéâǸÌÜæëíëéÑ™Š°ÜéìëíæË”UJiˆwX>Jnx]6175??61% ),-4=;<<><32+/#! E¢ÀÁÂÂþ°g]Y]gjlt•ÁÖ}–¬¹°œˆ‚œÀÎ̾ÃÏÙÚÜÙØÛààãåçáÉ ~„Š’ ´¾ÉÙßæèéêéãÔ¯“Œ†ŒŸžŒŠ…“¦«¬±«ª££Ÿ¥¦¤Ÿ¤¢™‘‘žª¨£““›ž¢˜œ¡¦¡›‚lnlœ©¢Š€ŒŽt\NKalsx}v‚„…‹˜•—˜”›œ¡ ž˜——š¬ÀÈÀ»²¯¯³·¼ÂÍÖÔÑÑÎÍÐØÝâãââááãäÞØáìó÷ø÷ö÷øùúùùøø÷÷öõøøôõõôóïëãÔ𣕉„}yzyvyvuƒvjkttvmqmquwyzŸ°ÁÑáêïðòóôôùøúùùøùøøùø÷øööõòèááåçéèèéëëèèàÚØÜÙÜÞÝÞÛÎËÿº·»¾ÇÓÜãåÝϾµ­¡‘™¨Ÿ“Ž‡¥³Èáíâǧ†›±Éϵj\UY}¯ÉØÕ«¤²ÂÈÍØÚåïñèÜÑÈÁ¸°¦ª¸Ê×ÜÖÀ¹¶­§§¯ª¥ ¦°ÀØâèæåâÈ·ÄØãçëêèÐœ†®ÚèìëêæÊ–THh†wSAYns]<;r˜™m0 $ +4  2Zeehmjmtljkbdivy‚{€‰‹Š…~¢·¼º´²´´®œ‘Šˆwmrc< -  - -+HQ[Z{Ž†thnwy€~ojmrnwtpotrx}xz}{ukgiidcenlhrˆ~i]F=>?CShkmqxtv€yqonx‰™§¢¦²·­†P% - -  - 2d‹”‚e6  -  -  -   -  -  - -     - -  - - -  -   -        -   - -  -"(mifheY[E0 )% !%07??EViked^PJB?BIHPH?>92-&"#'+,$"#2NxŽ’~ZSX\ctŽš—sD/$!!*4290+0*"%%*>KDSL\ktrdXNJFIA75:;;72.%&+,1;QfmornwstgWSLIHNQU^^]^XNB?;<313;@=9,   -      - -     !7D<0#   " $!#+#&!&' */80&(1'!%!"10#%$&*+/483630082-+(045675AAE>=6:<>8=<7<33,/.#!! -  - -J£ÁÃÃÂļ±‘oYR[kodzªÎ·np—¬¹½¯˜†™½ÌüÊÔÜÞÝÛÚÜâåæèéáȦ‡„‰’ ´½ÈÛâæèëëêåÙ±’ŒŽŽœ‘Ž‘Œˆ©«ª¬«¦£Ÿ›šž—•›Ÿš—¡¨« –šžžžž¢¤¦¥„hkj|£›ƒ‡ŽŠ}aJG]hnr{u}‡…~Š’Ž’‘™—›ŸŸ¡§§§¢ŸªÁÎË¿»¹»¹º½ÆËÔÓÐÍÐÐÓÙßáâââãããàØÚèòöøø÷ùùøúøøøøööùøõõôòòóíäÚ̶ nqmtoimrkoqn|xlekqkhj`jjjoepszy‰”ªÂÖåîòòóõøøùùøù÷õ÷ùøøøø÷öñéâãæéêêééêêèâÝÝÚØÙÛÜÛØÐÈÂÂÿÂÄÒÛáååÜÒÀº®–•ž¥—ŠŠŠ›´ÂÌÞÜÈ¢}±ÑÚ׸Žb[\[sªÆ×ØÇ«¡­ºÃÊÖØâìæ×ËÍÈÀ¼¶«©µÆÓØÓÀ³««¦«­££¢Ÿ¬¿ØáççåàŲÃÖÞåèéçÒ›‚§ÔäéèèâÅ–YHf„zUAWwr[=8i™¡v4  - $!$0.!  -)Scjoqomrnkte]jroz{†€‚ŒŠˆ“”§ºÂº¹¶¶´¬Œ‰…uki? - -  &JMZivˆŠ…wen€‚‚{rpnprsvvlu}}ƒ„ƒ„‡ƒ‚yuofdckpsquŠ„u\IGE@EYks{|„Š|qmlmv…ž¤«¥š–”h7"  -  - - - !%&5g†mQ'      - -       -   - -   - -    -     -  kkjiheXD1$%'!&/67=E[jmhcYNG@=?GLRIC@93,' %)2.#$*/4Is”€bRPRay—•tH,' )&/74-)*$&' !-8FIFFRlxsj\PLGJE:657193/+-./.=SgsuppusobRKEHFHM\\_ZVVLB=96116ADA<2  -   -   -   -  -  - - 5?:0  -#$"** !!# (/80))"#+&%*10# (-'"-4840948<2'#*278877BBCCA99859:<>8.//*)#   S¢½ÁÄÄÇ¿°‘jWS[qihŠºÐ¨^j–¨¹·²¢Šœ»Ä¿¼ÊÖÚÛÛÜÚÛãçèéêâÇ¡†…Ž–¢´¼ÈÜäçéêéëé×°—Ž‘›š‘ŽŒ„Ž¨±±®¤©£“–˜•¢“”¡®®¢’’–˜›œ—œ£¨¦¤‰lmiz”¢ž‰€„‡wfRK]ikplv‚„‚…‡•šš›™ Ÿ ¨­·ÃÀ±£ªÄÌƾ¹»»¹ÁÆËÏÒÍËÍÓÚÝáááãáããßÜØäîöøøùùùùùùùùù÷ôööõ÷ôóòòíßǹ†€ymgmikyijhjop„‡†ujkdbkcilwpgijghnp{xƒ–­ÆÜìñòóöùùùù÷÷ôô÷øøøùøùöïçàäæèèéëéêéæãÞØÔÕÛÙÙ×ÑÌÌÈÆÈÌÏØÝåæåÞÒÁ·«•“˜–Š™­ÂËÎÔÇ©‰~„œÈáåÞ¿k`Ya~©ÆØØË®¡¦ºÄÇÓÝæâÙÌÈÍÈ¿¸´¨©µÂÏÜÒÁ´¬­¢¨®¨¤¤¥©¾Øáäåçáƶ¿ÔÝãææãÏšŒ¢ÐäèæèâÅ•XDe†sT?WqxU=:p¡¡= " 33  3[hm{jgmrqqqjahrxu|‡……†‰†„“¨¹¾½¸¶·ª‹‘~vrlC - - (DMV]s€„€qni†‰‚vqmjpqy}x|ƒ„ƒ‹…‰‰‰‚xqtkkjluumn„„qdTCIHJdz‚…”—‘€mi`sˆ—“Œ†smynV:# -  - -)15n†‡r\:  - '%  -  -  -  - - -    - -       -         ikjeecUH0$",&$/68=D]jmof\RJD@FGJNGA=77,(! ),5+$#'*5Ef†}`NNQ`wŒ’vR-$!(0658*(*"*"$$4>GIHVeqqi^UNGJG@9533650)/302=SdqrpomsncPJD@CFU`baZTPKC960358ELME3       - -  - - -   - - # 6=;1  -'!!!!%%'$$$%   *-3*&($((%#+.) -% #,6:8274204&)8:9>=9>?@E;?;<:6?HHD/  (9AHA7'  - -  - - - -   -  -   -  -  -  -  -    -     -  -    -   b``\]_SC-  +*& &,1<;6/,% ""#+*#"&'1B_xŠy_TPVaqƒ‰‰qN. ,2154.)-$" ".=DEFRhnutaRRML@>;82:=:/00238@PhmtrmutldQHKDAGKU[`[TOHA:7765A=5 -""! !%#$#$''&&0+'/*%&'#"!")""$))455055114#(2779=<<9?HB;8X³¾¿ÈÞ›±½¼ÅÑÕÕØÚÙÛÜßåèêéáÇ ‹y†“¤·ºÈÛæêìêëêæس”Š‹‘¥—‰‘ŠŽˆ©¯¬¨ª¢›œ ›—™˜—‘˜¨­±¤˜š ­§’‰Œ›©§¥Œxupx”¤™ƒ~Š’ƒjWLbipstyt…†…‘•—Ÿ£¥§±¸ÅÑÑÍÎÊ»®ÀÈĽ¼½ºÂǽÅÆÊÊËÓÝââãäââââÛ×åíòöùùùùøù÷ùöõõ÷÷õôóñðíãη—ˆomnlrlllnnlknp}§ÚàÄ›npuvvoqknmifpwsuokoopz‘±ÏàëðñòöõöôòñóõõøøùøøõðçâäèéèèéééæçÞ×ÐÔÓÒÐÐÑÔÒÊËÍËÐÙßåääÞÐÀ­˜œ«¢’£¸ÊÓÕ͹„›®·Óæëéâ”i_XUw¦ÃÙÝͲ¢¥²¾ËÞÝÒÉÌÑÕÖͼ·®®¯·ÂÏ×ÏÀ³®¦¤¬µ´§œ›¬¼Ðßääåܽ®¿ÏØàäçäÍš…¡ÐãéêêäÌ”UJhˆxS7MozmEJ‚¢ ~7  - &"+/ - ",Akpdgqmktmnl]amptƒ}ƒ………ƒŠ ´¼¼¶³«™…‰Œƒ„}|tQ#  !FQWbt‰‹ƒpgsŠ†‹xrsntz||ˆˆƒ„Œ’‘†€‡†x‚{rw~rurxmi~{plrx€„€vxyn—š•kMRQG8B@2GlqQ3   - -   -!#)1XŠ‚j_[Y\b]^X: 6KX]\L@*  -  -      - - - -  - - -     -   - -       c]VXY\R=.!(,$*$*5;?AXnsnccTJFHCIQQLM:4.)(!$%$"-(!%*2E`w…}bWX\`m|ŒvO7# ,/483+(%)&!&9FKBJdn~}iSLFGD=78:8=6:82.04C^hs{rswskcRFPD=AHJ\_VLJD>5144/4ALI>* -     -   -    #@L?3  -  !  &"!"$(###--/-+)$!'% ! #%,.61.01/0/#)256:48<=>>:;56;9::46762.%$"   -#Z£¶»¿ÁÆÀ´šj`\]jju«ÍÆo7X²ÁÃÈÆ¡Ÿ²¿ÂËÙÚ×ØÜÛÚÚÞäèéêâÆ ƒu‚Ž” ±½ÌÞåèêêëêæÕ°—’“ŠŠŒ‹‘«®¬¬©¡›™œ¡˜šžš•”–¨®¬¤™”ž¦ “Œ™¦«¨}€|…™¥†‘’ƒjYQ`fsrww~†Œ‡…Œš¨·»µ½ÑÜÞÝÜÍÇ»¯¶ÂÁÀÁ½¹½ÃÁÁ¿ÀÄËËÌÔÜãàäãããäâÚÜëòöúøøùùùø÷öõôõõôóòòñéÚÇ­“unbglgpmmkmljjms‚¬áèÕ§‹zyuqnqidltohmghmhmimjksŒ§ÃÝëîðóö÷ôòóññóõöùùøöôëæâæèçéæèêéæÞØÑÒÐÔÍÎÒÒÎÍÊËÊÏÖØßâãÝÔÆ°š”¡¬œ±ÃÐÖ×̶–…»ÍáêìëäÁ”_^SY|§ÅÛßÓ²£¥±ÉÛãÒÀÏÜÝÛÙÓ¿¶µ®¬´ÀÏÖÐö±¦¨²©¤ž¯¹ÅÔÝÝÚɱ¦°¾ÌÝâçãÑ…šÐäêêèäËš_Aa…zU8Iwg=?j‘’q; -##"$* -$+1fhfggigrong]_ctuw‚‚„€~‡ˆ€†›®³µ«£œŽ†‹ˆ†…nC# - ALRak„Š†ojyˆˆ’‘€smkwz‰Š…ŽŠ–…z}v|„‚|ytuf}ŠŒ~zvrtldUO`a`[l¡|R?D9:>:9Ojrg:' - -     %'7V…˜‹wmhiiinld_J'  -%9Lc`_^S6        - - - -  - - -  - -    - - -        ]]SMSUK:*%"*)#$+*7==AUlwsg[RGFCKKOWMD??.%!# "#*+-&#-5Gc~‹€fZ\Zbl‹~Y5*".13841)%%#"$1ELFDbvzoUEDFE:7;=569854-7;Gfou~ysqrlaTPOO?>GLX\SMIC7-,$(//4;2/!   -   - -  - - - - -  -    - AKB) $%  & "("! !'&  %)X3#2"#&#  ,442410,&)&#163778;:8=;4368:?;7436,.)2' - !\¦¸¿¾Àþ°”oX\gkh‰¾Ò¼f7d‘²¿ÄËÆ™–°½ÀÑÛÜÙØÜÛÚÜâæèèéâÈŸ‰€†Š’¡´¾ÎáæéêêëéåÒ³•ˆ‹•¢—Š‹‘‘¥¬ª­¢ ™““ŸŸ›šžš•”¬«©œ’–œŸ•ˆž¡¨¡“†”‘Š“¢ž†ƒ“’…lXTfsznov~€„ˆ‡Š µÑÚÜÙÞèêëèßÖÆ·¬£¯½Á¾¹½¼ÀÄÁÀ¿ÀÂÉËÍÔàäáâãããåáÜåîô÷ùøùùøøø÷õöóöôõôñîè×»ž{lgbcjpgafjkfjeglr}¢ßìÚ®„upkledkihkgkdhihcafklijk~š¼Õåíñóôóòóññóòô÷ùø÷óîæääæçæççéêäÞ×ÐÑÔÒÌÉÍËÊËÍÉËÎÓÕÜâãÝØÑ·¤«¦˜‘¦»ÌÓØ×Ĭ}¤ÂÒåìíëäÛvdZY| ¿Úâ×»§¥¯ÇÙØÉÂÚæãßÛÑÀº³­©¶ÀÆÑÏÀ·­¦£¥°«  ¦¯°¶ÂÐÐ˽®¤ªµÉØâçäÒ €žÑäêèéæÌ›XC\{Š}S4As}kA>oŒ‰l8  # &0 ,3\hjgnmbklnh[_cuzv‚‚‚‚‡Œƒ~…™©¬©¢™‹‹“Š‡„g: -   HMNXk‚ƒ~|n{‰’‰†pfm€‰~…Š€Œ˜‹Š—˜†…wtxqxttqghqfnkdZQNMB?:LWN9Jz¢sVJC7A>;[q„h=& -  -  )14Tx“rfbjlmjikbN. -  &=KPV\dWF,*   -     -  - - - -   -          -  -   - XTTLKLI6& %$##%05:8?Rkupe[LKA@LOLPJF>>3)# $ .5++&--?f†’…h__]dlz”}T9 &36>71-%""$"'/AIHH`pvkZLC@?;97634<=/36:@K_qvv{rrg\UXSMF?IW`YNJD:/($,0<<8(   -     - -     !EM?&    !! - &% $"  %-*,.#)'%'! % "+*3810.-."#,33002879<@48545;375,0),#"    'Y¥»¾¿½Â¾²•nY\eqw˜ËÒ²cAc“°¿ÃÄÀœ•°½ÅÖÛÜØ×ÚØÚÝâæêéèâÈ ˆzŒ‘¢¶ÀÐßèêëëêèßа—Ž–£˜Š‰‡‚’©¬¥«§¢—‘””™’‘›’—¡¨±­œ”˜˜˜›’œžœ ŽŠ“…•¢Ÿ‰ƒ“xcSgvyvmq€€…›³Òáééëêïííìä×ɲ¥¡­¶½¼µ¹½¿Â¿½ÁÂÅÆÇÌ×ßáâãäãäåßÞçñøùùùùøùùøóöööôòòòïçÔ¸†}olihohjekaa`\V_ifoy™ÚéܱŠukhkemkkiaeibjeef`dchabfny¯Íåëðòòóóñññóôö÷øøõñëãâåèçäåééåÚÒÑÏÓÔÌÉÌÉÆÊÊÊÈËÏÔÙÛãÝÝÓ¸­±¬ •˜«ÀÏ×ØÏ·¢‘ªÇØçîîìãȘqb[^sŸ»ØâÖ¼§¢­¿Ã¹¾ÝèéâÜÕÁ¼³ª¯µ¿ÆÌÊÀ²­¤œ£«¤¢ž¡©¬®³»ÁÊȵ©±ÅÔÛáãàÑž ÍàéêéåÊ›S<\|{Y6Ij~oE@FD:=84;JfplbQKFE?ILHFDC82-)#&#(,-.,)30:]†”‡fYZ\_m•|U6 ! (4>?94''%#&&!,5@DHVluvndL>@=42434289430:;J_rvwuuwqf\QIKD?AJ[b[RGB72'$",=JH@0    - - - -   - - -   -  - -  -$BK>&  - !*&%#*!*.02/*$&!&!&#,/13-)(!-12-06=>@??7837>:6:/,1-,+&"    %V¤»½¾Àµœo]^er„¨ÐÏ«sZq–­½¾ÀÀ›š¯¼ÉÙÝÛÙ××ØÛÜâçêëéÞÂ…{’” ³ÀÒáåêêêêèáа˜Œ•¢šŠ†ˆˆ”§«ª®¥œ——•›—’š›š‘• ©±ª ™•š˜œ“‘šš ¢’†“ŽŽ—¡š†”Žr_Uezyvmn}vy{¢ÅÜçêëíìïíìëâÑ»¬ ž§¶¼¼´»¼ÀÀ¼½ÁÂÅÇÅÏÚßáâãääãâÝßìó÷ùø÷ùùøöóôôõóññòîåÓºœ€uopgedb_ccZYac\\addjt—ÖêÞ´ˆujckmmg`c`de`cfgcfgf`dbelfwŒ¤Ïäíññòôòóòòóõ÷ùõ÷ôíåáåçèçãçéçß×ÑÏÏÔÒÌÇÈÆÇÊÉÅÉÌÒÔØàßÝÍÀ¼¼­šŒœ²ÊÕØÒÀªž™›®ÄØæîñëäÅ–qcV`~Ÿ½ÖßÔ½¢œ¬´­®®»ÞéçâàÛ˾¶²²³¼¿ÊǼ°¯¢œ §¤Ÿœœ¤ª§¦©´Äɸª´ÉÖÜãâãÒž„¡ÍâèèèäËžXAXƒS:FlyeI9a‘š‘L -  - $#+4" -9[hqplokjkf`]ceo~€|‡†{~ŸŸ™“‹‰Š‹ŠŠ†ƒ|rnI   DLT\l‡Ž‰znoŒˆ‡oqi{†‚}yy††ŠŽˆ—ˆ~usrsqprmvnV;.'*5/696>;CCIKI9JxŸ¡aK@FDVx’‘vG'  -  &>A<\m‚Šƒhaipghfbc]QIGFD>:7><33BO]^YYYUIMa_M,0DNM<*$7K\P3.41.'#"!!"#&"$),)01WtƒoVHMKR]w‰ŒuJ5(!$)+672*%#*'" '.:AIObopaK9878-/03.43/-025=CG@>Z’©Ÿ{XNMM^wŠ~H%   &GWY\R@BNimi\V\h_aVVqŒŒR - -   -  -    - -   - -        PQKCA=4*"" $#(!,.4<91-*-+'+*+'*($"!$'#(6AE=83<<=ATYZK:8*!''(!&#'$'/' -942:>A;.&.!##%,1/6:6443+*% - -1_¦½¿¼¾À½´šp[\bv•ÃÔº”‹„ŠŸ²½¿À¹›™°ÃÎÚÜÛÚÛÛÛÜàåèééèàÄ}y…‹•¡³¿ÔâèêééèåÞÌ«’‰†“žšŠ‹ˆ¡©­®¥Ÿ–‘–—žš“šœ–˜–§¬¬«—‘™™›™¢ ¡¤•‡Ž„•«…‡Œ‡ueZl‚ƒplqs|Š ²ºÓèííîîíìèâÕÉ´¦™‘ ®¶³µ»¹¸¸¼½ÀÅÇÇÅÉÑÝâääãáäâÜÝëôõùøøøø÷öôóñòóññïâÄ¥‹tkclhg^dbba\_]b```ejcf[LxÐíæÆ—}rmgddbfc__`]_]acbedcccbiigjox—¾ßìïððñðóòñóõõøôóîèåçæèæææèãÝÐÍÌÎÌËÇÅÈÆÇÃÃÄÄÊËËÓ;ÄË»§ž’™´ÇÌÍ˸¦œŠ¯Ä×çíïëáß{`^ZpŸºÏßÜÇ«ª²³¦ž¤¸ÝêéææáÓû««°³ºÀ¼´®«¦ ¤ª¦¡›ž£§£žš•ž§£Ÿ«³¾ÍÙßß͆™ÉàçæçâÉ“[8Pwˆ}W6Cjye@:o—¡˜V ! "#0( &h‡Œ‚uqttpupd_hs|†‹ŽŽ••’‰€„‹‘Œ‘Œˆ„wv}…†rN$  CFG[h†“Šylmnv|Švibo‡Š‰’€Š‘Œ‹Œ‹†ˆ‹q`b[ZZ^d^U<#!)98339@A?:;@D=Brž§—uYLW_w“O) - -  %>IKOo‹ŽbZ`^\]_WWXM8;ENIOPOL=20=CKX[[]Z[agdUD>FIQJCE>G`trib`_de^P[††m:    -  - -  -     - - -    NKJGE=1*!%"!"!">$&,+&$#$!$# "$!$"! ""$"#%)-++,1,..21.+)"-'(,"%%#!$&.)"$."##!"( #""#))$"   -  -   - -  -  -  -  - !8?81 '*&!"&('&    *40,*')# &5,#')!*=!(#%2056=?:98;A645:;=57:3//.& -   - -]¤»½»»½º«fW]e|¨Íέ‰¥·ÁÂƾ•˜²ÆÔÜàÞÞÞßÜÞãäççèçßÁ˜‚{Šˆ“¢µÁÕåéêéëèåßΫˆ•š’Žƒ‡‡Ž¦«ª­ª œ”™œ—Ž˜¢›•¡­¯¬ž‘–•š›œ¥¢¡¤›‰‡„›®Ÿ…‡’—wkaw†wrtqrv±ÆË×åëîííëçÝÎÀ¶¦Ÿ‘œ¯¸±³·¸´µ¶¼ÁÃÅÆÅÌ×ÞààââáåßÚÝéôöôøø÷øôóñññðñðîçΣ†okj^cfaa``_`^^aa_a[ad^YWHeÈíêÍ™„snec^iffaddah^agcfec[`_igcdggu”ÅäîîïñññóñòõôõõõðèäåçèçäåææÞÑÍÏÌÎÍÈÆÃÁ¿ÂÁÀÄÉÊÊ̹¶Ä¼²ž™¢®ÁÌú¯¢–‰rz¤²ÃØèîìçáÇ¥}ff\p°ÇÜ×¾ª§¥ª¤ ¨·ÚêèáäãÔ嬬³¶·¶º®®­«¥§§¦Ÿ——¢¦¡šœ•–šžž£©®¿ÈÍÓØ€œÈÝãäàÙÁN:Qz…Q:;^|gN:f›¨œ\   #$"" %.%1h•’”Ž€‚‡‡}lfbbk|‹‘”—™¡•†z…‰‹’‰‡odn€ƒvnF !%@FLRf„”ƒnjnt‹š“€krqzƒŒ„ŠŠ‹‡x€s[Tbb]X]^YE+!)4::72?=?=58E>8>>35FNRlƒ—‡rlp‰¤¬¡ˆtxyƒ’Œ‰€‹Œ…wrshgde^^dbSLU<(08>899:=?;'-;>BZs™§¤ƒaW`z~X)"  -  - ":IJXjƒ‹Š{i`eed`^_^I5%.6=HRMQD:-5IUaaa`[ZaeXEB-+8HPMA?5?Uhjd\WTYWVL]t‡ˆn> - - -      $":;9<=:/$)## $!%!" !!"# ))'(('" # "%" %)!" """#    -      -   - -   -  -  -    6@3) "  ##%'# "* $!(0/2+"  )3,!%#!523& $*64:4744:=835994<:63,11%#  #)%   - &Zž·¹µ¯³·²šyikk‰·ÏÚ|„‰‘¦ºÇÃĹ’™¸ÉÖßãâãääãäçèéééæÞÀ¡}ŠŽ’Ÿ¶¸ÃÚæèççêåß˦‘‹–›•Ž‰ƒ…”«©ªª¦¥œœ› ”’™›“”¡§®«—‘”˜šž£¨¤¦«¦ŸžŽ…š¥œ€—‹ucTf~ƒqpprƒƒ™¸ÇÎÚßçççäØȼ¯¦ ”•™œ§«±´´³°®µ¹»¾ÂÆÇÎÛßâäãääâÝàâëñõ÷øøöôôññðïðíçÙ¼–lihbeg`_gb]cb^ad\YUZa_T[cQ?_¿ììÙ¶§£ŸŸ¡¢©¤« ”’‘Šwjlf\Y``\^_^]\cgfp¸×èíîïððòñññòõõñíææçääçãçèãÙÎÍÏÌÊÉÉľ¿ÅÆÆÅÆÇǼ¶£“—¶ÕØÓÍ¿¢Ž€pt‡£¸ÌÚæëìêãȃgdjx–­ÃÊ¿±•¥²¯££ªÔêéãáÚ̼«§´·°²·¸®­¯§«±ª žŸ«¥š•™›–›œ•–¢¦²¯Œp‘»ÒÔÍȺpE9\x„u^=>dymB9\£V     %#"'+" +m—–ˆšœŸtboigu{‚ˆ•—’ˆvnv‰…€{‚‚{srfs{}†wsO+  ?NLThƒ‘™Šrmžµ»¨Œucoyš“‹…ƒˆŠunorjg`gdhecbVQ@-'*;>99=@=?7)$4ADXdž¦–yecyŠŠxR*  - &-8 "@QFIe€ƒvb_bf_]^]aN/"'4;?OV[L>78=Re_\b_ZdeOH@4/9?NJA=6?cyiF-Z‹¢ŠS - - !$& !(+  (g‰‡ˆˆ¡Ÿ—‚kk_Yknw‚‹“›’‚{{v€x€‹xos{tklJ( >64CWCGC/"+CTadpŽ¡¦”qdtuS5 - -   %)9QQGh‡Ž…wbXemg^[cba6*9>?LUVPB?>ASXZXad\\laOF4",3LKM@59Eaoj]WRWVNESlwˆk]G' - - !$"#  %"!(%&!120230/#"!!( #!"$&     -   - -  -  - -    -  -      - - - -'"%#  - (),'# #! -)  %..-4.,** %%$2,"%'&''&(( +43566::89?71014@50:8/1)(%  **   -"M’¤±¬‹dPLL?72J–ËË©‰{ƒ€£¸ÇÂÁ´¼ÌØáãäããâääæéëééæݽ’…ˆ‹¡³ª²ÔäèèåæäÜÈ¥•‡Š’™‘‰‹Šƒ…£¬«¬¦ œ¡žŸ˜™œœ•—¦«¬¨œ–’’”š˜¦£§¡¢«©›™¦›€’Œ{aWuy~€|t‡“¦ÃÊÍËÊǺ²´´­­© —Ž ´Á¿¹¾ÃÀ¸¹¾ÀÁÇÇÊÖÚÞàããâããááåïóõ÷ö÷òòôñðîííäÉ¢gc]VSUa^T[bc^Wb^\[]]`^gqz€vYX¯ëíçÞÚÙÏÆÒÚÚÜØÔÌÉÒÐÊó¥‹yve`e]_daakfh£ÏâìîïððññïòõöôîêçããåäåäççÞÚÚÙØ×ÓÏÊÌÏÍÊÉÔÑÓØàÚʶžœÉêïìÞË»ŸŒ~ujo† ºÊÛçíííèΨ‚k_as’®ÀĽž ¼Ë¾¨£§ÏèéäÜÖÇÆÁ³¯µµ²³·³®¶© ª§¡Ÿ– ££™—’–›™—––•”’Ÿ¢|i€¢·¿¾¸¯–i@busO5]”¢Y#   - &%*0) %V~Žˆ‘ž‘zoik]W^oo|‹‰“”Šƒzrvpqx{~‡{u|…„€€sT&  - - AFJPe–›‘z{š¶ÅÅ­o^p‹”‘zywxrqrokkgfpx{zj_R6& ,4861=N@KI/":;@IKPP^\Y\`[HA-(/FNPI>43QkokXVYTQQOPo†ŠzfW/  #!"!#'%,&'"#-,$!"' %" (%" "    .%,)##4342331%" !  ""#!""  - - - - -   - - -  -   -      - - -   -  .  -   &  #&&"$!#$01% &'&'.1*%$&#" !+*$($!',,!  &.43649:89>90.0:81:9932/(#% - %( - - - !Jˆª©‡ZGD9,25Y­ÒÇ£…|‚‚”¡¹ÃÂÁµ‘¡ºËÚãâáàãââåçééééåغ˜~€†‹” ´°´ÓäééçåäÝÉ©”ŒŒ“›‘ŠŽŒ†‚’¦­ªª¦ž›–•  £œ“£¬®ª—•”’”—žŸ¡¨ª¥Ÿ›¦¥›¥¨š{„•‘t]Sn|„~z}Š¢¶¾ÆÍÌÅÀ®£¥«ª§© •‘£»ÄÆÀÀÇƽ¾ÆÌÏÓÓÑÙÝÝÞáãáäßßâéñõøøøöòòñðîîìéÕ¶…bbf^\`T\c]]ed]Y`^Qbedjp|”žª–c[«ìðêáÝÝÙÐÔÙÝÜÜÙÔÏØÞÚÖÒı –‹‚dnf_e___cao°×çìîðòññðñô÷öïééæãææäãååáÞÝÞàßÚÖÒÕÓÖÖÕÛÛØØßßÒ¸ ­ßóôïع¬˜„zggsˆ¤µÄØæîïîçʧ‰hZ]f‡¬½Ä²¢–©ÄÌ®¦«ÍéèáØÒÈÀºµ¯²³²±¸²©®¨¢¨®©¢Ÿ›ž¦¡˜˜”’™œ“œ›™”™œzcz¥²¹¼³ª˜oH6Jox^4@cyrO6]•¤\" - - - ! $(1,Kn‰“‘Žrrsm]VRhs‚€Œ‰||oovu~ˆˆ‹ˆŠˆŒ…‰•h<'  AJJWg—”}„¢ºÅÄ°”wf^ƒ‡€~uvzpqpklzrhq‚‡|dL@6&*;:66?FENH2 4Ykkgm‹¤¬¤‰m|‡}R5 -   ! =MKVl‡’Œtf_ekkgjijc?!$0>BBJXYTA47?LNTVbf`W]`ME8+*;MMK?64Eevrg_]^][LIk…Œ‚fUA   ()!!!'%'*1)(%*1/3,#$"$'!#*#""!&&!!! " !"#&"$'1-%4361461($"%!  #%" !!#"   -  - -  - - -    - -        -     -   -  - - #9$%1&"# $"  **'&.,!$#(+$!$&&!$,($0-(2597=>>93+/532?:511-)"" - &# -  "TŸ«¨…vXJEP{¼ÓĘ‚y‚£µÁÁ´Ÿ¿ÏÜâäááâáâáåêêëçåÓ·˜|{ˆ’˜ž®±¸ÓãçäççäÙŤŽŠ‹“›Žˆ‹„‚’¤¬ª¥¦žšš›¡§°¦œŸ˜”–¤²¯«˜Ž’–š¢žž¤¦ªŸ–š¢ª°ª•†ˆšž‘z[Qqˆ‰~}„‘§³­¶Éȼ°¡–š¤¦©¤ ’Œ”¢»ÈÎËÊÉËÈÉÐÓØÙØ×ÛÝÝáßàáßààäéôö÷ùöóòñðíîíêÞÄ™j_`a_[ZY^`\a__`R^]X`clƒ“§¸Ãȸ}]©éñìâÜÞÙÒÓÙÛÛÚÚÔÏ×ÜÞÛÛÓż¸²¤‡wihdc]`acjs—ÄÞëïïññòñðòôôðêççåäåâãäåãÞßáãäáßÛÝÝÝÞÛÜÛ×ÕÜÜ̯ÁéóöîÓ®’Œxd]fuˆ ·Ç×æíííäÌ¥ba][„£¼Ã·¥™¯ÈÐÌåéàØÎþ½µ®´¶°«±²­¬­¨¦­ª¤›¢ª¤š™’’•—™žš••””¢„_q£°·º³°™kL 8JCL[~—‘w|¤¹À¿°”rX_p€‘~zrpporuw}…ox†ƒwfQF3"%AC875=@AG'$+Cnphkv˜««™z†}W9  #2IUIh”“€fbfihhgfb\D&".@AFQ_\YG7.>PNYa[b]^^]ZJ=,,4?JNF=1;fyid]Zb[WPbr~‚{n`H& -  *$!'(*#'%+!)"(#%+**"!$"##)&#&)+("(**#"#!'!!(%!"!$  %$//*'#8626261*$ ! !!  -  - - -    - -  -   -       )  -  -   +( '"&! !&("# "  !)*--0( *, !*#,,+  !-@-3337=9;763.0428<6,0(#!  -  - .Z’¡¦¦¡«³w`[b’ÈѺ”yo…Œ³¿ÂòŠžÁÒÝããâßááäåèéêçääÖµ™‚~‡”˜³µ¹ÔäæäçäáϹ‰Šš‘†‹†ƒ¢§ª«¦ ™¢¨´»µ§¢œ˜œ¥«­§š‘’™•œ› ¡¢©ª¢˜•¥³µ›Š”¦¥•{]Tp—¥šŒŠ—¢¸»§¬ÁÁ±Ÿ“‹“ž£¤Ÿ™””ŒŸÀÊÔÓÖÔÕÐÒÖØÚØØ×ÚÝÝÞâãááâàåëòö÷õóòñññîîíèÓ¯|X]Z_]]a\]_T[[\bVX\\ap‡œ°ÃÌÐÒ¿ˆ^¤èòíâÝÛÙÐÎÕÚÛÚÙÖÏÓÚÜÚÙÓÈÇÇÄ¿¬”€vieadeghh‚¨ÕçíîïñòòððóõñìèåæãäâåäåáßáääæããàâãâáÛØÔÔÑÏͼ¦ªÐìóóðÖ¦Œ‚f^chxˆžµË×èíñìãΧ†ec^c‡£·Â¹§™©ÆÐÁ¬œ£Éåæà×Ê¿À½´«²·³®²±­§¦©£¬¬§ž›©£œ•‹’—–˜–™•Ÿ¢ˆku ¯·¹¶«˜iE8Howp]9H?KZp‰’yz›¸¿À»’ye{w€|wkinlrƒ…‰~n~‰‡Œ{maO3$-7<469>;=@3%?q{tsq}™©¥‡‡‹†]/ -   - !1IHNj„“~haehmh_a_\@+##>PI^^_ZF619FMW^_d_`^Y`YB2,.=FOK:35Uswqf]\bbb\\`ms}xlW;  $%$,&)*+/$&')$%$%',%'#! &") "(./-(+.+,,+)))'(),$!!$ !#%*30' ::5831*' !%!#"          -  -  -        -    -      - %3, "# #!%!#%" ".,$ !#'#   $+(/30'!(%$!"0)! $$0-+  -#,..163@=<940..:49515F)!"&#  - -    5`•¤ª¬¯¸»¹—m]n£Îͨƒwx‡‰ŠŸ¶ÀÀ½¬Š¡Ä×àäâßÞãâäæçèèççâÖ·™ƒ„ˆ‰– ²µÅÜåçäæåÛÅ­šŠŠ—œ‘‰‰‹‡†£­©¬©¢šž¨²ÀÇÀ­£œ–™£«¯§–”˜œš›Ÿ¢¥±º¸‚‘©³š„Žœ•}\Ws¨²­­¯³Âǽ¹¶­šŽ‰‰–›Ÿž“‘“’¡¼ÌÖÕØØÙ××ÙÙÛÛÙÛÞÝÚÜÝÞÛÜÝáçìóøôöóòòðñïíéÝ»‡]KLWZb\[^X]]_a_\[\jwˆž­´ÆÏÙÙÚÈ’b™àîìáÜÙÔËÊÐÖ××ÙÓÉÍÖÙ×ÕÐÅÃÇÌÏ̺­š‚pjgea^cm‹·ÛèíñðñòòñóõòïéåäãããââæääãããääåãäáàÜÒÌÎÒÎų¥šª×îõöðѬ›uffceuŠ ¶ÇØæíñîêײˆg\]d| ¶Ã½¨œ¨Áο«¢¤ÅâåâÑÇÁÀ¼²®³µ¯¯¸´­¯«¦¥ª¬¦Ÿš¡£¥—•™œšš™ž§­¬®«‚p€–¯··´¯›qI8Ip]46cypM:h‘£h#  #! (-  "S_hbjx‚{ppmg`^juvu‰…„qqfdƒ˜ŸœŸ¨µ»º­”‚Š˜¦±²—M $ -;EFCWl€‡„rw™³¿Â¹Ÿ|hgv‰ŠŽ‰~tspusrˆ‡}rvƒˆ‹m^P:,$.8770>;87=-(d…ztidy•¥‹T2   -  2LIL^~Ž‹|g]_dghgdh_C+%2N_[\_XLH7/3IRX`\df`^a_U<,7:AEL@63B]lmod_fdZXXQcx‚{qm]9 #.4.141/41-13.3302:41,!(&!$&5665?:533-01+*/---.*+&(&!&" #-,33(" <;>662$ "#" $        - -   -  -  - - -   -  - -   - - -  - *81"  #! $$(*"")+$"$ - %+&)/+%!%(##!,!%%%(,  !-*).,4:911/1+%/-8813<"$&'     4a §­°º¾¿¥vc~½ÓÁ”tzŠ‡¥ºÂ¿¼¬‹¥ÅÚãäãßÜßâáäçééçäâع”w‡‡”¡°¹Ïáæåâäâ×¹¦šŽŠŒ–œ‘‰†‰‰…”¦¯¬«§¢Ÿ¤´»¿ÈÁ«¥ —˜¤¬ª ™’”˜ž™›¨³»¹wz›ª™{~™›‘z][qŽ•§»½°©³½µ¬¤•‹‚ŠŽ–›˜ž•’””£¹ÇÏÓÒÒÒÔÖÕÖÔÖÔ×ÙÚÖÖÙØÕÙÛÞäëðôôòðððïðïìäÈ¡oFFHSZ\SVXc]^Zde`euˆ—µÂƽÉÓØÚØÈŠW‹ÖîìáØØÑÇÃÆÏÓÒÑÏÇÊÐÑÑÔκÀÉÐÐË¿°–‚rkgcX[aq›ËäëðñòòñððòñîèããááàÞÝàÞÞàáßßßãáßÞÝÚÓÍÑÍǼ¯Ÿ’¥Õïöõî˧–‡skum{“£¹ÇÕåìïîéËœud`^\}¤¼ËÇ°œ­½Ë¼¨¤£ÁÞçáÑÇ¿À½´¯¯°²³µ±¬¯¬¤¡«®¨™œ¢¦›˜–’œŸšŸ£¬¸¼¹¼±˜xŠœ²¹´±¯›mE4Cl€\:6_tnSB`‡šša" - (2  *Negdz}zvwtwmb_orz€‡{ynhij}™¢£§­³·¸®š‡Š”¥²°•Y' *;IJS_`oqplu‘°½¿¶“uRYu‚Œ†~qr€ttrw„‰}ru|‰ˆzme]@1#18=77BB6:% .Y…‡|ohi™©Ÿ—‡[2#     &6FJF\–‘Šl_\_alkjhgK2-ISYZZ[TK952?LUdf^fa_dbXD9139CHG;01F\inh]__Z[HK[o…€snV* !#,39542>;:623539667967;-) ."!-0:ACFCC98B:94,/+.6327&'0.*$#%-0., 6<:8485#!  ! $ $ #  -  - - - - -  - -  -  -  - -    -      -    - - .@3&$  "%#"&3!# &!#!!  %$$*(,..&#&#%%!! /(C  '.'(1323726/31&.5120.&'')%     - 1d‘Ÿ¥ª®º¼º¤wdÆг…`ax††Ž¢ºÅÀÀ¬‰¤ÉÛâããÞÝßáàãçèéèãß×¼”€‡‹– ²¼ÒàåæåâàÒ´£—‰Œ–”‰ˆ…‡“¥©¥©¤¢¡¯¹»½Ä¾®Ÿ›˜™¨¬­£”ŽŽ“™œœŸœ¦®´³£{r •……’‘za]r†Š“±À¶£¬´¦˜‰€„„‚Œ˜›—™’Ž• ´¿ÅÈÊÉÊÉÊËÉÌÈÄÉÍËÎÍÏÌÍÐÔØÞçñóòññðññðïêݶ‰_GAFUUWT`]^XVY\aeo„œ°ÃÊȼÁÐÓÖÒÉU„Òïìâ×ÑÌÁ¶»ÆÊËÊȺ¿ÉËÉÉÀ·±³¾ÅÇû¨¡š‰x`c``fn‹µÜëîñóôñïïíëéåÞÙÕØÕÔÕ×ÖÓÕÔÔÓÒÓÓÒÕ×ÕÎÐÏÆ¿·´«˜¨Óíòòæ蘋…zs~Ž µÅÖæìíêೋo^__j‹¨ÇÚÕ¾¤ª½Å·£šÃáæßÓýÀ½±­²´¯°´±®¬­¥¢¦«¡œœ™£¤œ•””žž—¡ª´½¾¿º“]qš²¸µ°©œmJ6Cge61[smL;T‚ž™c(   - "  /1 Jbjkltt{y~xt_ilp~|xsmrhfe‚ ¤¢¢­¯¶·©’‹‰–ž­®˜^#   2OJOY`_irlp«¾»±•o]\k‚ŽŒ‡‰{vwwqzz{€{us{‚‹~hh[I/$7<837=><:0!&(Op‹Œ~n`l§¬œ‹c;#    - -0LOC]€Ž†q]_flmkechW0&35<72+3# #$0;?BBF@===97<57822.,0&'')!%$%$+460*!$ 897763-&"" ! # "&%! !$# - -  -    -     -  -  -  - - - - - -  -   /?2" #!!!!($%('%""##(!% "! !$*,02*'&&$ %' -+& - -".--57291773+0..0210+,((.'"  -    6f“œ£­³¶¸²™sf¡ÈÌ©yULc‚‡¢»ÈÄ»§ƒ›ÈÜßäàÞßãâáãæééæâÝÙ¹•ˆŠ’¡´½ÒäççèäàÍ´¨–ˆ‹–•‹ˆ‡Š¡ª¦¦£¤ª¶µµ··¯ —–˜¡ª¬¢—”’‘“•œ¡œ¦¬«¯¤‚ƒ–œš”‘Ž‹zc^r‰‡ˆ—°¿·¹³š‡ƒz†‡Œ•™˜–‘“Œ‘˜š£°¹¼¸¹¼»º½ÀÀ½¿¼À¿ÁÀ¾ÃÃÃÆÉÑàíññïññòòððæЩuOB@HUPZ[dZ^Z\_Z`h€‹ž­¾¿º®°¸ÀĽ­|RÐìíß̽·®£¦²¶¹³«¬®²µ´­«˜¢¥­ª­ª™•ˆ€ojcckiv¥ÒçîðôôôñîæÝÖÊĽ·¸··¸¼µ³¶³²±²²°±±µ»ÃÊÈ··°¢“¦ÔìóëÙ¾¬ŸŠ†‡tw’²ÂÒãìëãÑ zf_WZl‡­ØäÝÆ«ª»½²˜™¾àæâÖù¿¿³®±²¯ª¶µ««ª¦¡§¢¤ž•˜¤©¡œ”—Ÿ¢›ž¡§ºÅżeq›®¸»¶¯™mG.=i|^75_rmH4Vˆœ’`0   -  #!&/- ,Qlkfgq|„„wnrnrvnoqrpmrjfƒ¦¤¥­²¶º±•…‚” «®žb* 0GLNX[[fkjq‡§½³§“p]fk}Š‰‡ƒ~vqr€~vnz~useZE&"6B58:E93 "$ #' "($ "$'#$,#$ %%)*+2.#&!#""#$)'$  "*1./4495846,.32.1330'-)!"  4e—ž¤®²³¬†i}±ËÞv`Wm„ƒŽ¦¹ÈŽ¦”ºÏÛââÜÜàáããèêêæââظ€‚‰•©µ¿ÔáæèçæàDZ¢Ž‰Œˆ˜Ž‹‰ˆ‚ƒ’¤«¦¡žž¤¥©¬­¨§¤™•— §ª¢”‘“—¡§¡¦«­­™€¬«š˜š”“ya]r‰ƒƒŠš¸Áº¢Žƒ‚ƒ…†’™—•Ž‘•˜œ¨«¤ª¬©«ª¬±­°®±°²°¯²³´´¶ºÉçðïñòñòòñîáÀ’cIACHQXP][XV\^\_n‰“š¥¢ š•œŸ‹cHyÌëíÞ¾«Ÿ–—ž™’˜–™¡–“Š““–“–Š†‡†ˆ…yqe\j]f’ÅãíðôóóñêÚĬŸ–•“’‹Œ‡‹Ž‡ˆ…‰€ƒŠ„„†Ÿ¯¹º¿½¸£—”¨Ñìïæ϶®¥“Š„{‘£µÂÔâêåÝÅ—qa^Z[f~²ßèäϲ¬¶¿³›œš¶ÚèáÖɼ¿¿±¬±°°³·³¦­«¦£ª©¤Ÿ—ž¥§¥Ÿ›Ÿ¥›™¢§¸ÃÁµvo–­º¹¹±˜rJ.Bhyx_<:`qjP5bœk/ -  - ! #(3-  Ljrnq}€ƒ€vxlommlomhopmjjj~œ£žœªµ´´¯˜ˆ„¦¯¯ `%  -2GHKRZ_^hjl…£¬¨ŸŒl^^i}‰‡ˆ‚€usplqx|}rtu~ttjO=+ !:>:5<>:;@6(!DkvŠ{jbf‹¢ª”l=%    ,FNT\}Š†hRYbcab`dfR7" 7LU_XVMC30/?J[[_bd]gVN>8/0/.>ID:55?ajqj^Y\\ULJKj‡Š}i\@# )3>BECE>=A>6:56/*$#4EKIJGCIIF:@A@83:9//(.'+)'$&#%+.-..," 7:;:>8-  ##'  $?$! (&   - - -    -  -  - (#   -           -  -   -   -,csmT:pŒœ–m+     !$+*7*  Ffvwtz‡zupibbabhmpjjnnfk„ž¥¢¢ª­¶¶°™‡‚¢¬¬Ÿa!   3GNETZ]gsgf~š§¨œiVYi€‰†~ƒvnvjitwtkw„„…wd_S;.#3?E:6?:??6%!MfmrŠŒrjg|›©¥~E/   %DKSUr„„‚w[akheb`bf]C&6MZ^ZZOE>57;IQVa_a^]WPI@4)$-EJAA@@HBCB>>;664/0&!%B]_YY[UOSPJHIG=A@3610..'/1''%$'084+ ?67:75,#!&"" !"&+'"!%  - - -   - -   - -   &%)(# '  -   -  - - -  -  - -    -      )6,## !  $&"$%"!"%,,$ +#" "+*'/2"'"+ $% #%$'  !*./&-786655*)422/,886)'(#   - :k–¢«¥«©¦ž‚z¢µ°’xaUi…Ž¢»ÇǼ¦Š¡¯»ÒÜÜÚßßâåçèçãàßÙ¼“‚Œ’—¤¶ºÊÜáäçâÛÀ¨Žˆ‡–š™Œ‰€‚¥¦¦§«­¬®«­«¤¢£›š’¤®°®žž¢Ÿ›¡šž¤¨¨¡•‰‹¤©sƒ•Œ|aYy‡ƒ‰ƒ—ŸœŒ‚~‹–™š—”™¢¢œ“Œ‰Ž–“”™—™šžž ™¡¢žŸ¥¢¥Ÿ¨©£¬¬¯·ÕêìðòòñòðëΟjRC>@LY[XQ^\Y[ai‡˜žš˜šž£¤¡ ¡ ¤žˆW@c¸èîáų®«¥¡§§«ª©¦©ª£§¨¦¥Ÿ¥¥ ¡¦¤¢ª§¤¤¤™‡zn`cošÍèñóóòðçÒ¯‘oeb]ddZ_XVZ^YXTYPXSZQ\w—©©§“‡ˆ¬ÓáßãÒ·®ž”Š„}qv¡¶ÈÚçéãÓ¶†kb_[\kŽ¿äïæα­ºº° —˜±ÙãÝÏÁ¹¼º­£«°­¯·²ª©¦©¥ª®¦Ÿžž¡¢¥¢¢Ÿ¨ªš—œœ¨¬«°­…el«¼¾À¼¨~G=Epz~d@8TsoP6Z”¤œi* #! #34"  Cgw}}~~z}pjff^Yabci}tjjdm†Ÿ®©¦«­¹¹®™„…¡®©¡l'  7GHFTbefnily“¡¤—‡sXU`u„‹„xzxq~rpu{„gwvuhcYG+/C?61G?:A, )Kgigz{omu¦«„G# -  -#@FKVf~„„{]Vccgjed``D+ '?NYZ\UI<;27@Q``ab[[Z\RC6.%*/DMJD>5:Up}se\a]]WOTqŒŒ†vm`:  "/CEGB@;34<>6016,+>\hekngc`fYVZIKDB;6>521.0;34&#!(7=1*$>88=44.% !"(  "#&% !' (-%$!# #'*(%% " !#"!     - - )( '0262& 7)'#  -  -  -   - - - - - -  - - -   /;3"" !#!'$"'&$# &"'$##&# "" &&$-/'%## !!$#$$ - %,-.167243/.*-/.,(24*,'   =m‘™¡©§¤©¯”¥ž‹ug]]`m‚ ºÈž¢ŠŸ¤­ÃÚÛÛßáßáæçâàáß׺“{‘¥¶·ÈØáçæâؾ¦Œ…‚› •Šˆˆ”§§¨¦®³±´²³±«¦ ›œ–‘¤¬±±«¬°¬¦Ÿžš§¬©¥–ƒŸ£ƒo{™—„hd‡—…z‚‡•«¨vw€™ª¯ª£¥­²­¢—„w{~……‰”‘•“•˜•–˜˜Ž“—˜££¦³ÖêíòóòññìåÀ’`J@c¤j) -  &71" @cy…€{suuqlfc`[elcgruwkphs†œ®±­¯±·º¯˜…ƒ ¬¬£j/*FIMQZdvummwŒœŽmVL]m†Š‚Šyyy{qlnxw~tqr|‚tojcgN+$8C?>@B97:;789*-0%,=Ukmolmgbjc]aWLIHA;>755427:4($" 18,*!$#<68420+! !.0!#! ()'A2    - -  -  -      7D2!( !, !+* (& #!!"##%"&'$'!!!&%$%20.('&   &#(' -#)62/533:8(,7)%+&$#"-**(" -   7g”š¤«œ†pipg[Y_fo‚ˆŒž¹Ä¹¤‚Œ›œ¨ÃØÛÝÝÞÝßåäãááá×·’zŠ™£°¸Ä×àåæãÖ»¦›‡ƒšœ‘‹‰‹‰•¦¥¤¥±¶·¶¹¸¸·¬¦Ÿ›–“¢­³·¶±±®©Ÿ—ž ¬¯®­˜Œ“£§yy™œvmŸ’|ƒ{Ž˜«¯–nr€ž´·³¯®³··§œ‰ur{„ˆ‰‰‘‹‘”•–’›™”—˜™–š–œž¡¬ºÙçíðñòñðïà®yVG><>KP[WWXX`^m‘¦³µº»½º·¸»¹¸¹¹½¼­rGb¬âíèÕÈÿ½½¼¾ÀÁÁý¼¶­©­´¸¾¼¼¼½½»¼º¹³¡‡nfl°ÞîòôóðìßÊ®ƒga_]OV[^]YWZLRWYNTIT[ZalŠ–™ ¹Ê×äàѸ­£“„„q‚¡µÊ×ãèáϳˆf_a_jŠµ×çàж› ·Ã¹£“¨ÏÞÜÔʺº½®§¦³¬¬²´©¬¯®¬²ª£ž‘–ž¨¯¨£¡¤Ÿš–žš™–¡¦…dlª¾Ä¿¼«ˆR2IjzwgA6`yrY?f §Ÿq0  #%,5&  =dwxqtvwddhiXZdkmtp|†yosr«­««®µµ­–‚”¦§°£l/ -  -)8CFK_hz‚vknˆ˜™‚mZTar‡‰„€{…~uwymnupkls}ywkdgJ-'86DS_df^dbTTMF:,.,9@OOIA4;Vhww_cle][W^t„to\8% '7N`bbUSNPNGIGIKHJDGMGB;:>881.(18Wjgqoirkfmfea[PSLJLD;:?4;72, '082&=<7:5.%"%)%'!  #!#!$( !/PdgX>0 #8O[WRD0%&#      !    =elfQ4$06:6. '>IE3 -  - -  -  - - -  -   - - - - - 8B3"#"! =#!$$ #%%!"$&$%' #!!! !!#!$)41''&  - %(-,&" ".534664:0-'.''+$!*23+#  -  -'GejoopkkhWG>Oc_XYghk€‚‡¶¿Á¿¬ƒž§¶È×ÜÜÜÜÛÝáãâââäÚº’}{‹•¤±¶ÅØàåæâÔ¹¥—Ž…ˆ–š’Œ‰…‚£©¡©±µº¼¼ºº¹±§ž™•–¡®³´´³®§¢¢››ŸŸ¬³³°š‹’«¯‚•œ—‰{—¤œˆ†’¯³—qw“¢¨§¨©°º»¯¤’…‰‘––—Ÿ££¦¦¨¬¥§«®ª¤©¬±®¬´´²¸ÊÖåéïðñòòðëÕœgNIA;;5%:]cgb^\`v…~ˆ~W2" - -  ! :RIJd„ŽŠ‚iXM[bemfgcQ0+;QU\^TXM<15HU[]a`b`WYRI;2'.6>HSPG<4E_uwb^bd^]WXf‚’{mfX7!"*6Ieklee`d`[^^TQRTUWPMJNICC>>3(*4Ohkwsuwppvmlmi\Y[QNL@=E=9:9+% ".2-*! 989520'"& &$"%$ "%+-&!" 7Ynj[F5"$$C]hfaNA<871*    #&%$&! - - -   -  +MjlgM30<<:1' - ,GF<.   - - -    -    - - -  -   -  6C9%!!'!'!$" #$ )(0&%! !%# " # $((&/1*&%(!#+0,%!  #-,*4+/52/--,,1*",,&(%!   $("**0;E?@?GX\TYbhlv}‹œ¬¹À½­‹“±ÃÊ×ÝÝÜÛÛÜßáßáááãÛ¸”‚Œ• ²³Ã×âèèáѵ¡™Š‹™¡’~~’¥®«¬®¬°·´¶·µ°§Ÿ™““¢ª®ª©ª¨¤¢ –œ¡ ¨µ²°‚¨°¢Š›š›‡™¥ Š‡”¦µ¹œqtˆ——ž¥´½³¨ž£¥¨¬¯¬´»¸º¼»»¾¼º¼¼ÂÃÃÄÄÅÃÅÐâêëëîðòòñïçÇ^NCD>>LML[_R]tˆ™«´³¶¹¸µµ»¹º²µ¸³°±£kCDÚíêÚƽº´­°­¯¯²«®³´¯¯ª¤£žª¯©«©§©¯¨¢©¥¥¤£’|pm‘ËîðôôóòíèàÉ£Š|‚Š‡Ž•¢Ÿ”Š–¡•ˆ‘˜—‹€€ƒƒ‚x€ƒªÇÐÈÀ¸´¥”‰‚}q{’±ÂÐÞåÚË´‡nd]apÂɹ´ ™§²¼±›““©ÇÒ×ÌȾ½»¯«®³ª­¼°¥«¯¸´¶³ª›š—›§§ ¨žœ¤ž™œ˜’ˆš„mk‹¨¶»¼·©Q>Jn‚‹o>-RssV7_ž­Ÿ|<    - #(#!//#1\sonorlk€thjedcfpurrrsvhcy”¦¨©ª¯³·­’‰…’œ¨®o1 -  -'BJKL`fxyyns†ž¡Y`jm{Š~x}|w€zurrwplnkoosljiY8%+::69@6;?=!;[^[dcVQ]v‡~kQ1!     ;UOKb|ŒƒˆoX`bgkjchcU4 .KWY[ZOJ?4,>IW_[`kge^PI@7+!./AMLHL;9Lozp_^ef]]TQrŠ‹wifK'"#)4Kdiuqikjjhlf`_a\[\]XUUYQPI;7-$4Dlssz|~{|tqqtoggX_VQKAFCE?;+,!01,*$?:8:56)""%*'$"%$(.'$)"$9Znj_F/$$@afge[X\^VD1,! -  -  #,.!$  - - - - -LmrnL8%.83! - -  7II6$      -    - -    -   -   - 8D3%"##$$"'%&# "!(&$"$ )""" $#" #&")71*% * '*,&%#  %+/94-752.*(.,'!"*'$&#   -/;?FRYt…oWIMLRUS_lpx~ˆ•£µ»¼­‰–µÈÓØÞßÜÙÛßâÞÞÞàãäÙ¸’†{„‘¡±´ÉÚäçãÞ͵£Ÿ•‹Š—šŽŽ~y¦¬¦¨¯¯´·¶¸··²¤ —“ ©®¯¨«°­¤ŸššŸ¢ª¯±¯ž„ŒŸ©˜„Œœ¤ž‘ƒ~ ¡™’‰–£·ºœvy‚Š”˜§§§¨±¼·­¥§ª®³³··¼ÃÁÅÆÇÇÄÃÅÈÇÌÌÌÎÌÌÌÌÙãçëìððóòðíäÂ}`YKKB>EOUYY\g‹–¢¨«««­¯®¯¯´²¤ŸŸšš™Š^<=ŠÔëìؼ¬¨¢¡™š˜–š–šš™žž••’™š™—“˜›”š••’•’’–‡~olŒÃëñõõôóïêåÌ«“Œ“ž£¨©¨ —Ÿ¬²³®¡˜™š‰–‘ŒrgtŽ¢³ÄĽ¸¯¢˜Š‡Šr{“­·ÊÜÝÖÆ´‡qb[cpž¯²©ª­¢˜ž³½³›–‘£¿ÒÕÎƾ½µ®¦«´²³»³¦§±´²µ­¦ž“– §§¦©ŸŸ¥ŸŸž’š‡lo¦²»¸´¡~R9Hn‡ŠrD:NrtQBUœ®›o3    ! !03%2Mfhchmspbgoj`bgkrssntqpkex“§§¥¦²´´§ŽŠ›¡¦—k2 -">OTL\izzumm†¥©£Š`\Yixˆ€„wvwwwux…‚|sutuwpij]7$)681.5>>D0!8QV^bbUFQ`qyƒyR/*  -    ,ITVI^€Ž€‡r[`\d^`fibRB)!/AUORWQYJ927BS`bedkf\JGA?2#!*:MTWJD<;Zvxn_bef[ZRb†•ƒsma=#%+0:Jbmsvvuxtqolqli^bhjg\]XSPH99-"/Fgyw}€‚ƒwsrsrkgc]\[UOHE@DC?:0(*/(($;==:87(!!!"#$! "$'! %*.%&))%#$!":^pqcC3$B^`fecjutiQ=4'!  $ ':6+ -  - -3YqsdH93;<OY``MA94@PZbgejf[W\YN=/$.9S_gaM;4Iitxg`da^dXZwŒŽ”{niT1#($0?Odqx{{}}xy|wrtrnllhgnfeaXIA<1%*=ey„‡„„}~vklifhc_UURGHLHFJCB4-%)3)&$#%"=>><70#!#!#!")101)*/,&&$?\pr_B1"#"A^a^fjrƒ~pU>2-!    !,?;1!   - -   - :dqm^I;3:AA?92)!4HPK=-    )( - - - - -  -    -  - - 8A1# !$#!!#!!#!+)$&("!" ""&&/0)#!&$""%#(**&!!%#  *1-/,060034-)0-!#)+#' -  -   -_‹””š•„‘‘tXKIUZIPcgkxƒ’¡¸ÉÌȵ’¡½Ð×ÙÜÞÞÝÛÜÝØ×Øßãåظ‘tt„”¤±ºÎßççåÚÇ°£—…‹›žˆˆ‡ƒ‡‘¢«¤¦±¹»½¾¿¿¼±¨¦˜–§­³¹ºµ¸´¦¡Ÿœ–¡®¶¼·¨›°¶¤”¨ÁÊŸsg‘¡¦¡‘–¢º¼zl³½¾¿¼µª®²´®­¯µ¸»ÀÑàçëêíìëêììíîëëëëëèçèçéèìïñóñðïêÚªeVSIHEABQKX]q¤³¸·¾ÁÀ½¾ÂÂÁ¹©¦¢£žœb=:qÌííßÁ°¨¦ ¢¡› ¢Ÿ¡œžš›™™¢ž™œ—š˜œ¡›™š›šš™–˜Ž~€²çïóõõõòíç×½ž–£²²³·²««§±·²¸µ¥œ™•šŸ¡¦¤ †zŽ¤¥¯ÀÁ·»¶©šŒ…z‰’£²ÀÒ×ÑĶm]YP`hm€‘¨µ§œ ·Ã¸œ‘Žž½ÎÒÐʽ¼¾µªª¸½¼¿¶¦¤­´¸»º°Ÿ™œ¢¬¯®­¦£¦›— ¡’‘’œmf‡¦¶¼½³©‹L;BoŒ†rK5Qvt[>W–ª¢{7 - -  "78  )TihhjqsilmhddZdqgiekf`eefv˜ž¡¦ª«¬¬š‰†“•‘•ƒT -  )HPBLclnuolxŽ™¦±©ŠZMadw‚‰‰vt{ww€y‚ˆ‡†ŠŠƒ‚xyusbC&(8:+)/67/0#3D_XdicUYQTdysM5# -    -YWVe„“ˆz_M^_cfb]]V=+ .AKJLQWZP942BGR\gjna_abT@51)*>YddeS?5Ntwlb_c\hcR_rŒ’ˆtlhP,%&)6B\oy~‚‚€ztzs|tuqwvrrmrjd^PG.)+3Nm€†‹Š‡ƒ€|tsomojb`XTRKIPG>B;.&%#&"" ?><4.)#%" "!$!#& !&%--(,.1=AF=:4(*(.(0Ghxm`P>0+"#%!*(0LchihrzuWC8/% " (?;6& -  -!$3ZpsbL=36,!"  !"!&$ % &%%,)%!"## %"(&$&*1/0-"!"%$ $-*'$"  (+,03344:?2/2'' !+/)( #"  1b“”œ–‘‹kSIR^^YXcgjx…Ž¤ÄÐÓϺ–¬ÆÖÛÞäåããââßÙÑÖßåäض~w|ƒŽž°¼ÑâççâÙƱ¢™ˆ‡›¢‘†‡Œƒ‡•¥ª¤¥¶½ÂÁÂÂÅÁ½­¤œ”“¤¬³¾¼¼¹·ªš™œŸ¢¶ÏÞß̲ÄÞãϽÒåëäÍn{”¡§¥˜¢«¼»žƒzˆžºÁÂÃÇÀ¶®¬­¯®­³µ°½Ùéðóõöõõôõ÷øùúúùúùùùúøùøôóôóóòñéÓ¥_PGA?8;>IY_z“§¸¿ÂÆÈÉÉÇÈËÎÊʸ°³²¯¬ s@:f¹èïåϺ´¬©¨°±¨«°¬®§¨«¦¬­¯°««®«ª­§¬§¦¥¤¨¨ª§¥™¨àîñõôòñíèÛ¼¡š £¢œ£¨¨¤¢¡¦ª®¤ž›ž Ž–±ÉÒÑÏÐÖÕÖÜÜÕØÖÓËÇļ¨Ÿ¡¸Ã¾ÁÍÚÚ̼‹j_\[VPf‡Ÿ«¸¨Ÿ´Á¸¤—ÀÒØÒȾº·««¶Á¾¾À³¤¥«±¹¸¸©ž›ž¤§ª¯¬¤ ¦™Ÿ¢œ”ˆ…•‰hh‹©¹»½º«ŽX:@k|‚uF5<7=:6&)FLMPf]]cmyq‚{Y1 -   -(?`XTj‚“ŽƒyeTWcbie[\YB( (BNNUUTYVI;8*!*@O]f`eJ;@esxk`d_d_WRe‚’Ž~ldY5#'0:?Tlyƒ„~utwx{xrwurmrytnhiZE9.)0Ok‚‡Š‡‚zƒwuwtpge[XQRRPIJD;/*'"$"%#! 55610(!"""#"( # '(.*)-28EUUPRLA==729LoxqbUIB<41/)*4;<9EKK`eknz}…yS4!   - ';Z]Nc~“†~lLV^^df]b[R7%5))"-%!! 45774,$#  &#$',/,,24>MYZ[YMG>=;=C^q{p``SKHAC@89=ELBDGYgihahsutiTB:+$#!!6ECC<6.+)&+(00'15@G:741+## - - :^momrvr^E=;;BBFFMXfjmnf^VQNU[VKRSYYQ8&"&     - -  -!   -  -    -$67%#"  $*%'!#$"&)'("(&!"!&&&0041."!" !$%$$!"!',(%##&3* %-,/1..699631,%(##--&#!  !8h””’ŒsXNGP]X]clmw}Œ¨ÆÍÓÔ¸˜ªÈØÜàâäæèäáÞÚÕ×Ýâãض{t{†’¡­»ÓããäáÖ¿¯¡œ€‡ž šŒŠ‰‚¡£¦¥¶ÀÀÃÆÇÇž³¦œ–™¢¦±¿À½¼¸¬¡ ››¥ºÕåáѹÃÞéÙÇÕéíëÔ§v\Xk‘«¬¦®Àº–{w‘¦·½¿ÈÌʸ««±µ¹¹½¿ÇÝìò÷ø÷ñéæìôúúûûûùùúøùùúù÷òñðññïæÍ£iSEA?;4FS`n’³ÂÅÊÍËËÐÏÏÓÒÑÕÑÊÁº¹¿¾¼²|G5V®åïë×ÈÀ¿½»º»»½¼½½¼¹¾½¾¹¸¸··µ´±·¸¶¼·¹¸·º¾·®¬¢°ßîñóôôòìéÙ掅}~x†’‘ˆƒy€ƒ{v‡ŠŒŒ‹—ÃÚåèééêêèèçéêåææãâà˶²¸´­¿ÔàßÑ¿‘ldRQNTm•š¨² ‘¶Ä¼¥– ½ÐÕÒÈ»´¸¬­»Ã¿¹¶±¤®¹À¼´­¡•”›¦®¯¨¡Ÿ™™ž£œ”Œ‰‘†deŒ¦·»»¸®ˆR==\€ŠvG9Wxt_;J‹§¦…J - '01#=`loca_\Waloh]bkcd_ahgfeYr‹‘™‹‹~rutwrstfN. - #KRXiopsvv€nO-  -  -  7IVQ_‚”‚‡hF[iiff]_cX2->GW]eXSG366@BP_bcdcZXTMO=,'-=DQZYUE5?csqc`Xaa]VXgŠfeO<42.>Lkz‰Šƒ}€z‚‰uttnqrmqoplm`SMD6(%AZt…†‹‡†„…„~mmrkhe]V[WPDAD<?53,-/101075AH:56432(" - $Mn}yuwslYA<47>>CETahmnmf^[VSRZWTMEIJA23>9'  - -  -X   - -  - - -  -   #62%!  !$#&$'"! !# $,.,E$%"!%,-!*2016-#& -.&%"#+-+&('%0-!',--21.343931,+'& %*+)%%   "9h••ŒˆnUOFT[U^_ant|Œ§ÂÑ×з™­ÅÒÚÜáãäääáßÜØÖßãäØ´zv‰Š®ºÔáçäÞÔ½¬Ÿ–‰†› —‹ˆ…‘ª¢Ÿ©¸ÃÂÄÆÆÂÁ¿±¢›“ž©³»Á¿Á»¬£šœ¥¹ÖåãÏ»ÎäêÝÇÑçìéج{bQX€ª¹¸²½»švnˆ¨»ÀÀÄËÍǽ±§¨³³½¿ÀÈßíóùø÷ðìéíöúüüüûúøøøùùùùøóïðñïíäˤmU<@>77BVf†¨¾ÇÌËÊÎÏÐÐÔÔÒÕÕÓʽ¾ÁÂÀ½²€K4T¦ßîëÜÌÄÃÂÀÀ½¿ÀÀÀÃÆÄÀÀÃÁ¿½¿»¾¿»¸º»»¼À¿½ÀÀº·´ª³ÝìòòññòíçÚ휕’‚‰Œˆ‡‹………‚Š‰†‡ ÇÛäèëëêêèçèçãáàßâäàϺ²¹¸²¿ÕâÞÎÀ“r^G‚‰Lj—¨°¢“›µÅ»£’ŸÀÒÖÒɽ¹·®¦²½¼´³°¥£­¶¿¿»­¢•“š¥ªª£šœ“–ž¢Ÿƒ†“Žnj‰¥·½º·°ŽZ71\wqJ6MpvcDE…ª¤ŽR   )33 -AUfd^`h__bmj_Wddae^Zih```jˆŒŒŽŒƒphmpyxsmW.  ?JM[Z^hhjli}›­¬ …dZZ^r…†‚x€xtsz{wr„‹~{rmnkeO2*299019974& #9BLNZ[_ikikoqM0       1&*4?ORWZN8<\pupa[[ceaUTv’Šug]L934MT]]ZJ>><@=F`ovrhWNMKNJJCB>FMHSLY`fdcagie_SB5+%.BFLJHF@9;??FB628?F>826512-'  -+Urxvttp_UD618;:=EPakjljfdbb\[\][][WN??EP>%    - -  -     - - - -   -   - -#89%% A ! $ !"#$%"""'..5'#%'($% !#+-+1.%$ '83-##$+1*( ",13+#*-0/().)-345/-0/""%&,)-*%   &>v•‘Ž‹ˆ“ŒjXKI_cQPZ_kx|¥½ÇÊDZ•­ÅÏÐ×ÝÞÝßßÞÝÜ×ÙÞààÖµ‹zy‡™ª·ÐÞââÜϸ£›’Š…œŸ’Š‹‰„‡–¨§£©»ÁÃÇÉÆÇÅÀ±¦ •“ ®´¿ÂÂý®£˜›¢¥ºÔææÔ¼ÕéëßÈÔçëê׫{eZVxž·ÀºÁº–ws~¶¾ÀÄÉÌɾ°¢˜¡§ª­ÁÜìôøøø÷ööøûüýüýûúûúøûúüúöîëççææßÇžlVGFC8=FVtš³ÂÊÊÍÎÎÏÔÔÔÐÓÒÒÑʽ¾ÀÄÅöŠN4D–ÚííßÎÊÇÅÆÈÄÂÄÂÄÅÃÃÂÂÃÁÂÃÃÂÄÂÀÃÂÁÀÀÄÂÁÂÃÀÀ½¼¾Üéìïîííéâ̬œ‚€{tvyyxuxwtrrxz{{„™ÁÙáææææäàÚØÖÓÑÓØÞãÞÑÀ¼¼µ®ÀØßÚÍ·i^ZV]Og‹™¦®¢‘—±¾¶ŸŽ‡›¼Î×ÔÌ¿¹µ­¦ªµ´®°¯ŸŸª³½Á¼¬š“™œ¡ œ™˜•’›¡”‡ƒ…hi‰£µ»¸µ§‹]<>Vx‚lC6Upi>E‰¤¦†Q  -%52"  '602?LOZ_gecW^ZVF6)(&0DOTVSA1Cgtvm[[`e^UUb„‘’…nd^J<;:2/+"" ! )E$$( #-.04>Mftvp_WOOPNKIFDBFKNWUW^dd^cdedaSD:,)$9FJMHFG>BAJKLD6;=DK@;55.0,-%  .KeknorlaL@7/8=<@DFPSZ[\dcH4 -  -  5JMB>Z}idMEV`\]d]bQ9#9NYRX_SC<26=@IO_hih^[VOL@)'-+AMSTWM7:Tmvsa^`ac[TYtˆ‘{ekXE?FQi“‘’ŠŠ‚Œˆ‹Š‹‹ˆ„Š‡y€xqgVB-2Dav‘“ŽŒŽ‘ŒŽ‡€‰xnjhc\^SVYOUA:7'-,%" ?@=3/*! %/"& $%"!#)'*.*/68:DTX^QJGGKCBPftuodXRNMMIKEB@ELRUX`_\W_cgbecRF<2#&,@FGMKFDEGIIKIA69>EH?@3.0/((!  +?LVeuxq_I9837>?CMampvslllhb]WX[`cjeUMDKO;(  -  - -   - -   - - -    &=?%# %'!(# %)'$'&&%&"!" %+(42,)&!$(6:/$ ),/'+--/2-*##/63/)+..00/531--030/-/'(& -  )Gt–ƒ€Š‰hXNHNbZV^_]v~‰¨±¶°‰”§»ÀÇÇÇÉÍËËÊÌÉÊÒÔÑɬŒto~‡ž¨­¼ÆÌÑÏÄ·¨ž’‘‹ˆŸ£•Œ‘‹‰‚Ž©¨Ÿ¢µ¿ÀÅÆÄÆÆÀ´¢–”¢©¯µ´µ¯«§™Ÿ¡¹ÚêìÝÇÙìïåÐÖéëëÙ«„od[Œ¢Ÿ®»¾¶rw„–®¼ÂÅÇÍÈ¿¶°°¦¨¬±·ÉßîöùùùüüüûüýüüüüüûúüüûüúõäÖÉËÐÔÒͽ™va[MD=C]‘°¿ÈÇÍÎÍÑÏÏÑËÏÑÏÏÌÈÇÆÉËÉŽ‘P0A‚ÏîïãÖÍÅ¿»¾·¹º¸µººº¹¶º¾¼º¿ÂÅÅÈÇÊÌÉÆÈÅÇÇÇÈÎÒÒÔÜÜÜÙÚÚÚÛѹœxeunmrrotptoopsuyxw|~†™¨±µ²µ²±¥ žŸ¤ž¦«¯¯®«£œ¡©ÀÖÝÙκ‹eXTQY\m—ª —’§²­“††˜¸Ï×ÖË¿·¸°¡§µ²ªª­¡¨´´³¸­‘–¤¢Ÿ’”œŸ˜“œ—˜“Œ…Žxh‡£¹À½º«ŠS<=ZwƒwH2Lp{m=>wž„:  "$%/2"  ?\kebimkh[biecck_dccieidig}’’•”ž§¨š„x{‚“˜Šk8   -@UZQ]ccknljz˜¦žŒ~gYP_q~……ƒ|xqttwom{…†x{rvvjdK4% -A9//00/) ,>6@]pzlba^b\]Vc€”˜ƒhc^RJEP\”“’‘‘ŠŒŒŠ†‡‹ŒŠ„‰‡ƒ„€rk]F43=Ym‡’”•”•‰„‚ƒ‡qplfe[[]aZO?82-,%$#!! E=;56%" !*""!&#' !+)*,)0/5>FRWaXQGEC@EOdtvn`YSOKKOIFC>DIKQS^a[Z\aiid^QD?5*- 2CHLLNIFGJKKKE>:;?GH@;62..-*!*>RSWiv|p]M@>=;>>GYktxvwupne]ZZX^`ikeUHHPP:& -    -  -    - - - -    (?A,$!!%%!%-('"##"#  !$!!(/%-..#)"!-<8+&$#'//)(-1,42(#*0;81,1.020/54-*34344,&((#   *Hy“Ž‘Œ€ƒ‡„hYVLWaXWdggpy‹œ¯¸¹µ †”Ÿ¯ºÄËËËÊÅÁÃÃÅÅÅÅĺ¢†qq|Œ–¤­¾ÃÅËÊĹ¥—Œ‡†ŒœŸ”‹‘Ž…„’ªª£¤¯¬°´¹¼¿½¸® —”•£¤ª®©£ Ÿ —˜›¡¤½ÛëíàÎÜíðäÔßíðìÚ°„iai’¤¢©®¸´Žoq›µ¾ÃÆÆÍËĸ¶¹·µ¸½ÀÍâïõùùúûüüüüþüûüüüüûüüüûúôäÕÊËÐÓÖÖÉ­‰paFA9Jo–¯¶½À¾ÃÅÄÃÃÃÄÄÃÄÃÿ¿ÆÈÈÇÆ¿L5>zÈìïäÓʽ¶¸»½º»¸º¾¹º¸¹¹½»º¼»»ÀÄÇÈÉÈÉÉÅÆÈÇÈÏÐ×ÙÙÚÙÔÖÛÝÞÞÅ«‘xx‚}|uz}w€}vsuxz‚}~ŠˆŒ‘™™š–›˜˜“–’—™’’’••Ž“˜šž³ÏÚÙÏ·‘ncMKU_g†•šª¡–—§²©—‡ƒ–¹ÐÛÚÒƺµ¯¡¨³­ª¥©Ÿ£©°³´²§‘™¢Ÿ œ™–˜š‘•—ŽŒ’—ŒygŸ³¼»¸®“a@8Rs†sJ6Lmwg?9tšžƒB  #!"!4- -  -%>[skdjsqi`foeXaia`fffgrigm‚“žš—œ¤¬¡…z…ˆ–˜“q7  >OPUZ_cmvpiwž–ˆyhYU_ewƒƒuutwxq|uv‡‰}sry‡†}fL7%1;>2+*'-*(397?:4IZ^Y[baZE& -CJPMTUKE;54=BHYghif\_bVL9((,:MSVU@.3Jf{{fca]b]T\q‘œslh]SJKby—˜‘“—”’‘‘‰“ŽŽŽŠ€q^PA.:Sl‡‘˜›˜•Ž‹Œˆ…„‚{splgceaVTOI<73,+# #75332* %*!%!'$/.0148=:@IG:89325/)!!$!(4B[llkr€ykXG>>B=>CM\o|z}vrofYRSWX[fih`PGO[N7'    - - - -   - - - -  - !-B>4" #%"%!#'&$*(% ""*-,",-"#"'88++&$-/3%$")/+2+&(,7<=733F=721450-2.226'%((   0Qy”•ˆ‹Œ~aWQIZd]_megr}Œ ©­¨š‚˜£§¯·ÁÇÈÊÉÆÈÈÈÈÆÁ¼®˜mrx‚’˜ž¨½À¿ÆÆÁ·Ÿ–†ƒžœ•‹ˆ‹ƒ†”¦§Ÿ¢­¥¦®­®³´¬¦§š”¡ª¬¬Ÿ’™™š™˜šž¥¿ÝíïãÒßíðãÔáîîêÚ®|c^k‘¡  —¤©vr†¡·¿ÄÄÉÑÎÊÀ¿¾½»µ´ºÉãïöùøùûúùúûüûùúüûüûûûûüûôåÒÉÈÍÕÖÓ͵‘qbQH@Jqž¬ª¯³´³º´·ºº¶¹»º³¶¶»ÃÉËÆǽŒM7c•™}B !%$'20# #2Lgh`dmpi_ajeYdkdfieihqlciƒ”›—˜ §ªžˆƒˆŽ˜¤œ”t>  -  =QXV^glnujal†–’†veSS\`v€†€xurswwsv†‰…xu}……~k_?(1@D7,'%!&%+7<95555AFJQG<# -  - 2OWE8KhtprlT@MVb]b[^]I*  %5BORW\SI6/516BQdhilc_][[H3""&5FMURB/.9cxn\^X]eYXlŒ›™€nf]WSYix‰‘šš˜™œ™–”˜••“–’“™“‘’‘‹€xqdJ,7PiŠ““—œ™”‹†ƒ‡}rvohro_ZXKD@80.(%  24/14& !!!! )'*31/1B>BEVgospdZSKOPOJHBDFEILT]_Z[_eljdbKC830,:DMSQOOJLMMNHF::9BJH;=:4642&# "+5Jbqw~‚tgPF>?=;;@I]svuusplc\MMVY`ghf]KJY_R4! - -  - -  - -     ,>@3$ # "$$"$+ *+ & "!#' *71+-*#!%%#&//)-'$,,+,# #.+1+%!"*)>>A?B:9923440210-3--*-% - - "+T{‘–’ŒˆŒ~eOMGXcZWd`eqq€ŒŽ˜››„­®±µ¸¹¹»ÀÁÿ¿¾º²­šjqw‚•¥¯·µµ´´­¡Žˆ†“˜Šˆ…ƒŽ¦ª¤¡¨§¢©©ª¬«£¢Ÿ—˜¤«¬ªž›šžŸ—•Ÿ¥¿ÝìíáÒÞîïãÑÛèéäϧua^gŽŸš”“£š}tƒ¦¹¿ÁÄËÍÍÌÄÁÂÁ¾¯¨¬Ãàï÷ùøùøøùøøùøóóøúùúûûüýüõâȽ¼½Ã¿À»ªŽm]SFDIq«®®¬´·¶¸¹¸´¶»À»¼·¶ÀÃÊÈÇȾV2>h¸çîèÕȾ»¾¾½¼¿¼¼¾½»º¼º¾¾¾»º»¹¿»»ÀÆÂÄÌËÌËÍÊÍƾ¹¹´¸±¾½ÀÄ´š…†ƒwwxtqvyrr|r||ƒˆŒ–Ÿœœ¥©¤¤ ©£¦¥žœ ž›£“‘‘‹¨ËÛØʹŠfWOORUi…Ž™§‘˜£¯¨—ŒŠŸÌáæåÜÊ·ºª¢¦«§¡§«¥¡£ª°µ´­¤—“§¤Ÿ—’‘•”Ÿ™•–‘™Œvd€Ÿ°¹·¶©Ž^E7ToyO2@hzmC>f’•{D  !(.66)1NddegendXekcZ\caeaZdmolkk€šœ’˜¨¬¡‰‚—¥ –uE 8NTRZbjnrqjj‡“yshYUYcw|{€~ywrpqwtvˆŽ„€„ƒ†‡…yl`:+0:7:1+/,'% "&;8:@::>=FJPOA%  -      *9JU==Gl~qim\FM[\ba\ZRL1 /?O\UYUBC>43;>M^dhjdd\^`X9#'/9KUUD8./JitxdW]\\^Q[€•œ‹fgc_XR[q””˜›•™™™–™™—•—˜–“”••“‰ƒ}sV0/>]}‘–˜›œ™™—“‰ˆ„yoknlpcc]SFB:2,)& "  32240&!!  #*382/27?DS\_VL@PH@GUhtuof\QLMMSECDCFHMLS\__W\dlokdO>63+"!4CEJPKMLNUQLKHA8=@GJD>78822/&!"# !(7FZi{ƒ…{zvfQFA;>>>AM]lowxqpod\YYRT^jlh_NL]`Q0  - - - -  - - - -   -  -   /C@+$## '!!#$'%%(*"$#%&) +150/-"!')/6-'$(,++.0& %.12-$ %-ACLE;;4.741/226223,&% - - -!-*Nw‘•‘‰‰‹…eSPLabVXa]hoq„‹–›Ÿ¢†™±Áľ¾¹µ±ª®±­««¤Ÿ¡’ƒooxŠ‘–¢¦°®¨¦£¦¡˜‘‰ˆ‡‘›œ’ˆˆ‰ˆ‡¥©¦¢¦¨¤¦¦­ªª¥¥Ÿ‘œ¥©ª®¤š›Ÿ—™—žŸ¢»ßìëáÐÞíïâÓÙáäÛÁ•i`\o• ”‹‰—Ÿ›…ˆ¥º¿ÂÃÈËÍÊÈÃÆÿ¶±²Æåòøùùùøø÷ôö÷óïðö÷÷øúüûüûôäɺ·±µ³·©˜|doXF?I|¢¦ª©¯¯¶²µµ¹·º¼½¼¾¿ÀÄÅÉÇÇÉÀ“V47X®äïêØÆ¿¿Àº¼º¼¼º¼·¸º¸¼¿¾¼½¼ºº¹º·¼½²¼ÉÈÌÎÍËɾ¸³³¯­°ª¯±»Ä±Ÿ‹‹‡|ƒ€{‚ƒ~y|}„|ƒ’™¢¦¢¥§©©¦¥¥©¨§§Ÿž£  ££œ‘ŽŒ­ËÝÚɵ‰e]SQVYd‰—¥Ÿ•¡¬®”ˆ©ÓèëêßÊ·¹¬¡¨®©«ª«¡ ¤®¹µ·­¡˜”š¢¢Ÿ˜”–š—š–”“r_€Ÿ´¸·¸ª’`>;\y€tP3=f|vH:eŒ‘I  ! "#1:! 1Qfdab`phadiib]e`chedhpsnix˜ž˜— ¥¨¡Š‚› ¡¢…G  3HP^\]mrxukhxŽxof\QPbn{yzŒ{srnxrx“”ŽŠ‰„†viY5"!#*86>830&'#"#$.3/7:B[_dfjcagfZA' (7NN\QNA17cxyhW]ec\QKj‡–”wcd`[W[n“›˜˜—–˜™››™—–šœ”’–•“Œs\:3?Xv‹’›Ÿœ™œž™˜”ŒŒ‚uvsqjcb^[MD80/*"2521.& "#$ !)'383324EKRWVVHE=BKKH?=9341-(&'$%& &%/@Xdq‚…}}r]JD@=C?AFSbfgqpolkg^ZUVU_hki]KRaaM2!    -     - -   -  -=<+#!$&!!!&$"")+*%!$""'01-;, ""18+'"!),/20-&&.4.)&  $2?GEDA9;31623;754/!  -)(Kr‘’‘‰ƒ…dRIS_b[Xadipu…“ ®¯—‰¢¿ËÍÌÌɸª«©œ•“•“‹qov†Ž–ž¨©´·±¦Ÿ¡¡–‰‡Š˜Ÿ•ŠŒ‡€‚ §ŸŸ¨¥¨§¬­¬¬¦ Ÿ–“¢­¬­˜˜˜›œšŸŸ¦½ÝííãÑÝîðåÕÙâäÝÁ’iecdŒž•’’ž œ‚Ž¦´»ÂÁÄÊÊÊÈÈÇÆÂÀ¾Êåòøúùøù÷ööôøôôõø÷øøùûûüüôæÔÄÁ¿¼¸± „jdeYJHWƒ«²®¬°´¶¸¶´»¼¾¼¼¼ÀÁÄÅÄÊËÆǾŸU=1P¢âîìÛÅ»¸º¸¹»·¸½¹±¬···»ººº¼¿¾¿»º½¯¼ºÃÊÉÉËÊÉø¸½¾ÁÀ¹µ¾Îν¥•ŠŠŒ‡‰ƒ‚‚ƒ…„ˆ•Ÿ¡ª¨§¦¤¨¥¤¤¦£§¦Ÿš£¡£¤£¡”†Š©ÌÜÚλl\UO[Zf‚›¡•‘¤±«•€ƒ®×êìëßȳµ¯¢¢­ª¬¬©¡ ¢®µ¶»±¢”•Ÿ¥¢Ÿ”–‘’™—™˜œ¢tb}¡´»¹¸§“d95Yt‚N1Ag{pJ@_‰”ƒL - """26   !8G_ea`ckiimd`ehfc]fbcrntii¤ŸŸ¥¨£žŽƒŒ™Ÿ¢Ÿ—‚@   (KPRS`hnxskhtŒˆ{uk]UV]hv„ƒ€€‚zzstry…Š‘‘Š‰„{~qdR;,'4<13)&&&")=9>8;;;CJJILB)!   -  +IQ?1<\~okl\HM[cf_[YWT>  #,FUQMJHK<,(-2DEC65681252*$')&!&3M^n{†ˆƒ|€~mXC<=?>;>OZeglnolmidZWWZ_`jkfXNZc\I4"    - - - - -  -     - -  .=:+!!#%""#" !(*$# """  #" %"+.*#%"'35(&$$))+,+./+0/,' - $5AA=A?<=<11822/1( - $&1G{”’Š„‰ƒjLIWac]]adfn{‡}w‡™¨™ˆ¥ÅÓÖØÙØÏò¶º§˜Ž’—œ™†oq}‚Œ—¤«´»¿½¶¨¡£•ŽŒ†…ˆŸš‘ŠŠŠ‡ŒŸ£œ™ª¥¤§­¯®¨¤Ÿ¡–•¢©¬«¢šœ¢ž˜›Ÿ¦ºÛìíâÓÞîðåÕÞèéæÎœpdci¤›–Ÿ©¥˜–‹Œ¥³¿¾½ÀÈÌÊÇÌÉÇÅÅÇÈÕçóúûûúùøúúùøùùúûúùûûûüûùöëÛÓÐÓÍÁª–sc\]VOQg·ÆÀ¶µ¸¹Á¾½ÂÂÁÁÂÄÂÀÃÇÆËËËʾ™]54H•ÜíêÜɺ³³³´³¹ºµ¶±®µ¶·¹µ··¹º¼¾»·¶¦°²¼¶»¹¹ËËþÆÍÓÒÑÊÎÒÚ×Å°ž˜–•“’ŒŠ‹‘—™œ£ª¤ŸŸ  œ¢¡¥  Ÿ¡¥¢¡šŽ„ˆ‰ŸÇÚ×ͺg\SWVS`„— —Š”¥°¬“‹°Úéíëßȵ°¯¦¦®©ª­©¤Ÿ¨­²¹Áº¨˜š¥¥¤Ÿ‘’˜‘’”•›šš™›vezŸ´¶·³¦‘c:7Ss„wO2>fwj=?Y‚”{J  -" *69& ,Haib`ckjcmle``deegichnsjpƒ›¨¢›Ÿ ¥’‡› ¡•’t= - -)CNMYbkjwtdf~†ƒ„qXOO_qz~„€„|}uupsst‰Š„€~{xnnaM8$ 3;7)'$'&$" 2> ! -@NVPNJF;)''0DQZjlllid[KD6 ,=DZXI<;@^w|aTX\ZVNRd…•Ž~dkkhdpŽ››šž¦¤¡¡¢¡¡¤¦¥ž žœ˜™œ˜˜~V<7E`z˜››žžœž›‘••’‹ƒ}utkkcdTHLC::3& /240$"$ ! (!!!#$/65108CDKhzymbUSRHMKMPHDGMORX]c[]`kt~viN>:/&  />IINJKNMU[]UMDA>;AE@8::8423&!! #! )8Sbo}ƒ‚€‚ƒxiTD;<<9>CQemqutpmoi^ZZ\^dfildXS_cW?(     - -   -  -   .?;, (#""# !"%'#!"! $% *)+'%%#%$! +2,)&)($(2),(,,/1,$! - !*)53OmypM3<[tjD8\„’}S -  - $/-",Odjbfbnodgnq`^kfcgbejvpmj€š ¡”›œ£—††–—•‰vH -  - 3ELKSV_buyjgyˆŠ€€mYOZ^p…€‚|xysnjnon…ˆ}ynmikl\U6'!'5<=)'$*(% "!+47;15=FN]cXI:& -   - -*HXN6>[uqec]GCIcc_gf^YH  -'9KMN[J@=+$**3BQdfcgh`\UO@'(:LPROH?4LfwkTRZXWVMMo‹†majiio”šœŸŸ¡Ÿ¡Ÿž¡Ÿ™¤£ž  ¡Ÿ¡¡¡›—“ˆoV=@UqŒšš›š”˜—•“’Ž’Ž†„vonieaXRMD=;6+# "!" ! ;=;4/($ 3 ! (!'%,40.7=CEIZabRDBHC>>Lgwrj[PRLOMGJIB@IFHLN^b\_^iqtwkP<5*! *:GRRNONPX`b\M;9>:AB@795235,%!  !-CVdqxy|v~‚ucL<:37:AJTgklnlgomf\\[Y^gsqk_LOadM9#  -      - -  -    - - - -  - 2D<)! !"+& ','! $$   $)**$')#%#(3-,-,'&(+*##(,11("  -167869:97+)  !/Ii‰’’‘‹•ŽiPMJWb\aidils~wgWLUa„¯ÍØÝÝßßÙƹÈÓÍÁ¼·¶¼±•xmp€ŠŠ—¦«¾ÉÎËź¶«šˆ†€„ŠžŠŒ‡€ƒ’ž¡š¨¬¦¨®­°¯¬«¢™–¤«®¬£¡¢ŸŸ œ ¡¡»ÚëíçÖÞîïåØäïñíÞ´‹her›¯£ °§{‰Œ‹’£°³»ÅÊËÊËËÆÇÉÑÒÜìõøùøùûüüüûýüüüüüüüûûüûú÷íæââÞÛͲ•i[ZeXEEh¢ÇÒÎÅÀÂÀÂÂÂÂÂÅÆÆÃÆÁÃÈÎÏÎÐÌ–X0+>ƒÏêíÜÈ»µ´³·´·¸µ´°¯µµ³´¶¶µµ²±³ªµ¾À¿²»ÀÀÇÊɾÄÌÚßáãââàâéãк¤œ•š˜œž›œœ“•—–˜—–‹‹ˆƒ„ˆ‹…ˆ‹†‰‹‡‰ŒŒŒ‹‹‹†~~y”»ÐÓÊ»‘mTMTUSf~š¢Ž—£²«•ƒˆ¯Úéìêãα³²¦©¯®°®­ª¥§²¹Â÷¤œ”¢ ’‘™”™œšš–œ|eq—¨­­§¢‰`?5PqzkM:857$%-$$" "+.3942=LT\[OF=# -   +F^O>=`|uXKC<;Ndc_emiaN. - $4DOPLBA8'$*04CScflifd_]L5$"#1HUTRKA7:TgjTIUZTRJIW…Œ‹y_ekjqˆ—¡£¡ ¡¢§¤žž¢¡ž£ž£¡ž£§©¤ž™•“‚`@GMO^`VD@B@@=Phvtb\LRMPHCEBB?>BMNNZ\WYYiqsthOB;+#"!0?ILQUQHP\b\UK<>>GH=<835414*'%#$&" :I_fgjiotxymYF<9;@AEHWmnljkhjhc`_]Z]krrncISd`I8"    -  -  -  - -   - /B=-  "!'!#'%)*-' %"#  #"%)&$&1/&&! $.-((%%&*,.%//++)'#  - - $0678471.# - (1Chˆ“’‘‘š”pQJQ`^a`cefmx}tcNMN]ƒ²ËÓÙÚÛÛÒÁ½ËÚÕÉÄÁ¿Ã¸™ƒry‹ŠŠš©­¿ËÑÏÇ»·«˜Œ‰„‚‘žœ‘Š‡…|~Œ  ››¤©¤§­­²­¬¯ª—Ž–¦©ª¬¢¤¡ŸœžŸ¢¹ÖëíåÓÝîïäÕÜêíêײ„fci–©žšš«¤inx}|¯¸¾ÆÏÉÈÌÌËÇÊÓÔÞìóùø÷öøûüüûüüúøûüûúúúúûüöîéäãâÛϱ•xd_aTLQo¦ÉÒÏú½ÂÁÂÂÃÅÆÅÆÁÄÄÆËËÎÏÎƺ—Y.-C€Éêíà˺µ¯³¶°±²µ²­¯°²³´¯®±°°¬®¤°¸¼½Ã¿¼»ÁÇÌÐÄÁÛäãåæååãéåÕ¸žŽ‘’•’‘ŠŽ‰ˆƒ„‰€ˆƒ|€‚~‚€…‚ƒ„Š‡ˆ‰‹Š‹‰}|{“¶ÍÎÇ·‰m`SQOL^z“¡ž•¨´µ ˆŽ®Úëíêáθ¶°ª«°³­®® ž¤°¹Äƹ£š•¢¥ž™‰Œ–Ž‘‘˜š•‘{eo ©© ŸŽa@8Tu{N3<_sqR8W‚šŒd)  @4& 1@^c[^`k_XeejcYdjfoeenqxurx“˜™—žªªŸƒŒ“”–wJ  $EQML\ckzkdw‘‘€ufYPQYp„}zywu{qpsrqsx{rghkic_Q=&%9;46*$%-*#E (./15<;@IX`]QOA0  -  - - - .L]I5Ai€x\OLC0D`[_]je[I* -.@LNMN=:0%%,0?T`ehle_Y\K7%+=LLTOH31CafbNHRTRNGGnŒ“g`dir}– ¡¡¡££ ¥£¨¦¨¦¤¦©¥£¤§§¨¥ ¡›‹nN;777235+$$#""" &5Qa^bhknqushPD=6>@>GN_npqomqtqh[]^\bjrqm^NUdVC-      - -    -  -   4E;. )%%  -%''#!!!  ""##!#+,%-1#$$)"#*&)&%)*&($!(,)-+0#  -  $'466/'$     .Dl‡“Ž‘•ž˜x[NLY``]cfiovzxdJBKT‚´ÈÊÌÏÐÎɸ»ÐÛØÐÉÈÇʽ u†ƒ†’¤®ÁÌÐÑȽ·¨–Œ…„‡‘¡’‹Š†ƒ¡¡”œ£¥§ªª¬±«®«£™‘¤¬±«¥¥ —˜Ÿž¥µÔçêáÐÛëïäÐÔæëæÏ¥zbac£–—Žžž}d]it‚š±½ÃÈÊËÉÊËÉÈÇÊÓÚèôùøøö÷ùüûüùùùúúûøùøøùûùöîèçåáÝϵ’tf[bTNUq©Ê×ν¿½ÀÂÄÅÃÇÅÅÃÃÄÆÊÌÊÌÊ´Q/-:qÃéíã˶²²´®±°­µ¬¬±¯°°·°¬±­¬¬ª§©³¶»¿À¼¹½ÂËÌÐÓàäãæéæèèêæÒ²šŠƒ‹ˆ‰Œ‹…†„ƒ…„‚‚‰†ƒƒ„€„„‚ŒŠ†‹ŽŠ†‰Š„‘¸ÈËĵ†fRTPKL\x‹‘¤™‹–°Ãë‹Œ¬×éìëàι¸²§¨®µ¬°ªœª°¹Ã½©˜›¡¤¢ž’ŽŽ“ŽŠ‘™˜š–—ŒwhmŽ §£ ›dB4Xk|‚O.>_~Y-"6KSLMH;20MblVFIVRRLF\z…oebbn{‘›£ ¥¦¥¤§¨¥¨¦¨¤§¦¢¤¦¥¥©«§£Ÿ•‰gKRc|‹’˜˜˜™”˜˜™–•ŽŠ‰{sjid[[VFC8/(#! "QOJ?5( ! ,,/,2<<9AH`aZQFF@CCBZjqoj[^SLDBEGC=<@CJUJ[ZXX]gswwgQH8)%"!)=GNJMVOLLSWSKG::GYcqstqptvlc\]a]^kqqhXOTYQ;+     - -  -   -   - -   - ->2.$  !!$#$ ""$+$"! ! #$$)*%.+'""&.+'3 &)**&% +/0*)' "   *100&*&  +Ge„‰‹‘Œ Ÿ‘qXQYcX]fdkqo‚eK4*!! "$%!IOIA4'' #"((//599=AKXViVHA>?:??DJPQ[\\Y^htvsh[F9," +AHMJOPMGKMSIC>;9;><:53461,+(#%$## &D\ckmmmquxiZK?;<98=J^ov|zusf\X[^]^jooh[PZZQ<)   - -   -   - - -  - - -4=;." $!!#! # !$$" #"$ !!%**)'%  &0-*)%%-0.&$-0.(.*% *  - )01+  -  !2Ed„ŽŒ‹‹Œ’¡ž “pa`]Z^ggmpo~|dK?EU„´Ä¿¹½ÂÄÀµµÐÜÙÖÓÑÏ̺›}rv~‚‰™«³ÃÓÔÑËÁ·¨“‹‡~‚Ž¡ ”‰ƒ~~Ž¦¤œ™¤¡ž§¬­ª¨®ª ™•™¡ª¯¯¨¡¢¦¢ œ›Ÿ£±ÊãèÝÏÙêìÙÃÏåëäÓ§xc^aˆ›•”“vd` ±»¿ÅÎÎÏÍÌËÆÅ¿½ÊØèò÷ø÷÷÷úüüüüùøùúùùø÷õ÷øùóíéåãäàÒ³…]bnl^LQ}¸ÕÝÔÇÂÁÂÅÄÅÄÅÄÈÆÁÂÇÆÉÌÍÄ¿¾¸–V2'5b«áëãе°¬°¬¯°¯¬¯°­®­µµ³°¬²¬®¯®¬Ÿ¡¬¸ÂÁÁ¾½¿ÆÊÕáãæèççèêëç×»œ•š ª¯¯®°¬©¡¤¯²¨¡•‘š”Ž“™•˜“Ž’””‘‘’•›œ‘‡|xvŠ¨Äȼ­Œe[QRMQYp”™˜—”®ËÛÕ³‘‡§Òçêëãж²¯££«¬ªª©£¤£­ºÃÈÆ°˜–£¢““Ž“’”•—‘šˆufrŒŸŸ ›—‰d9.W‡˜X4=h„}[9Wˆ¢”_( - -  !"%17) )CU][Q^][\]dab_\ahjlifltjl|ˆ‰Œ˜Ÿ£ž‚”Ÿ©ž‹qH? !>PWa^cj€ˆmdy„oppc\J\istv}srwtsrhfrvrneeZ_b[O8$$=E231%*++&(&?4:ABS]^PPO7     - - -  -5GPTILbd_cgZV="%3HLJAFE?1##*5:JWahgbe[Z^I/!):@GTWM?-6PfjYARZ[ZTQYu„}k^^jzŠ•–ŸŸ¡ §¦¡ ¡žžž¢££œ›šœš••’–‹{g\bn{Š‹‘’ŒŽ‘‹Œˆ~vqkia\_SLC;30$  LOGA7. !"! #(+/2344:ER[XgSFF>>;G[ixne_YRQMJFC?8Qhx†‚…ˆ{qhYY_][`lqmbQQ^`Q;&  -      - -     - -    -  5B?2% !#"! 8- "%#$# "!&&**% !(.,,,!$*--#+-3+&,/% %"  $*&  %4XYRJe[a_fji^Yace`hhjmzqls‡„‡’šœ•vu†’žª£‘}R   - 9JQZ]_h‚†mXk„~rtua\MOdltw…}uzwrsmfkvtqidYQfdR@/"$67:3,'/3('*#5LW\+:ACS_VLRG:'     !0?ML:AXim^`f`OGUflejh_^I0! " .,-+BOMMIJF0(#+-8@Lfglmj_bcW:.*(?KNVWSB32JireQHP]_YUYjstsh_bp„““’šžŸ¡ œœ˜”’’˜”˜—•‡‡†ŠŠ‚{s]LZbbuz|†ƒ}~ƒ‰†ˆˆ€~uica][_XTOD@B/"OIF@:.+"!!$ &+307327FPX]aWEABD>HTishe_VNPDGH?>9@FGIOJXce^chrwqjZG9*%!4FJKEGCBCNOOFC?68@CE><59:30+%&(%""'1Hahpstrtzx_JA::9C?BUk{ƒ‡‡‹‚ve\X^^`frslZILYWG2&   $ -   (   - -!    - .A<3( !#$%'%""""&#&*' # ! &,+'#&" -',*'"#)../.('%*1-%$""&#  - - ! - &*8c‘“’˜¥¶±©¡›†n_`aadir„™¢‹pko¶ÇÍÅÄÌÕ×ÊÂÔÛØ×ÕÍËɼ›†x€……š¨¯½ÉÍÍÆÀµ¦”†‡Š‡’¢Ÿˆ‹‡~ƒ ¡—›¡¦§§§¬°¬¦¦Ÿ™’—¥ª¯¯¨¤Ÿ¤ŸŸ›œ¢ ¯ÇàéßÎ×éìÚÈÜëíêÛ´‡fai£ œ—’~snŠ­ÀÁÂÁÉÌÑËÈÈÇŽ¼ÃÔæðôùùùùúúüüüüüüüüúùúúùùùñæÛØ×ÕÒŵˆ^NW^VLVÆâæàÓÇÄÄÆÅÇÆÊÇÇÄÂÀ½»ÄÈÆÀÁÁº•`.%/PžÛêåÓ»´®±²¬¯¯¯¯­­¯­®±²´·±³³³­³®ªª¤±»ÁÂÁÁ»ÀËÖÛØÙÙÙÛÝççÕ¼œ—±¹ÀÅÃÃÆÇÈÅÀÂÁô¡ŽŽŠŠŠ‹Œ“’’ŽŒ€†ŠŠŒŽ‘†€z{{ˆ§»½º®‰g^VUNO`u‰———²ÒÜÕ¸‡¢ÏçìêâѼ´­¤£¯®¨«­¤Ÿ¨«¼ÑÝØ»™˜£¥¢˜Ž””’šœ“†qbnŸ¦£’‹\AI{«±ž_7DqŠZ7Qˆ£ši,    ##&<3 &6TbXSUde^gplcWdddiihki|wnwƒ†„‡š“‡vr‡’ ¨¡“X  8MYV^er~}lXdruowqeTYZfp‚„‡€€€wyqlnlmrqoridZ`i_A* ?L0<2+,$+&# %#+*1>FEM\SJCE>'  -  -  - .?MMIJV`j^^eg_T\bbfefh^T<./+02(*668/>[OHPJI:71+,8FQ]_bfbc`^YK8,-7;MS\^dXKBNekia[[[[^X\ft{sf`aktx€†“”‰ˆwy€|}…tlvpkuqomgca``fmwwx{zx|„‰‚|urtrolkihcba^VT>$ OJJ@5*#!"! #+/3./07GQVahWLCD>@IWgqncZUJED>FA:;;EAJON[ddachmroc\H:,&(:LIFFHDA?IMLK;536=E@<979830&$&$#"""4O^dkrsstyp_K<;75&% -  -   -   -  -  - - - - - />=1'$ !"# !!""%!'(#!"#! &'&&''')!!"(20&#$&-.4.'')(*./# &!#"#! - - &7^Š’‘‘Ž’œ®³®£™–…o_]febet‹¢µ¶¨žŽ—¾ÎÖÓÕ×ÚÞÙËÖÛ×ÏÌÇÃÀ²”€zƒ†‘¡«ª°ÄÈÄ¿½µ¥’Š…„Š“¤ŸŠ‰‰ŸŸ™˜¢¥¤£©«¯ª©©¤›’–©ª«ª¥¡¢¡žŸž œŸ«ÂÞéßÏÕçëÞÎÞìíëÛ°„f\i’¢ž™‘™•Žws…§»¿ÃÀÄÉËÇÄÅÂÄÀ»¿Ëàíñõôøùúúúúûûûûûûúúùúùø÷ðáÒÍÊÉƾ±’hPR[\_aŒÀØßÛÔÈÄÆÆÈÅÇÇÆÈÅúºÂÆÀÁùœb2#3O•ØëèÑ·´°°·µ´µ³³²±¸¶¹ÃÁ½»·³¶³²´­¬¥£«´ºÃÂÀ»¾ÆÒÖ××ÚÖÙÞèèظžž±¿ÈÊÍÍÌÎÎÌÇÇÆÇü¦‡‡~~~~…ƒ€‰…~ƒ‡„‚‡‰…z‚v‡Ÿ³¹²¥‡i_TXUQaq‘›””´ÐÛÒ¶”‡¡Ðçëêãк·²¨ªµ¯¨ª®¥ŸŸ«ÆÝåÝÁ›™¢¥ ˜Œ‘Œ‘•˜œ›“Ž|cmŒ™ ™}_@@c˜ˆW:A`~uY9I‚¦˜m,  - - "&//3 $9ZhgUXjfefnvbW[`lmfdfv|vryŠ‡ƒˆ•˜‡luŒ˜¤¦œyT   - 5LUWUeq„}f__gvstrk\V[ezŽ‹Ž‚€|ooinhkoppsedfko^B5&7B;-/+$Y0,)014A?FSRHBI<<*  - -   #5MQVSPR]gg^ckf`V^`alkife\RQC?C@LHPEHNab]hdbYQQ[SWbhglnpmgogffXURUU]cklinkbjtonwruoqussvuv‚vuqj{zu~‰…‚‚ƒ‚|{tsuzytvvnomrnqvqnlkhjjkrqupklqeckbbcab^c`[NJIJPI??/ ) !!#$!PQSD;("### !"*.1-./AGA59>DFPNPZb`_adksoeXJ<+ +ALNGJIFHKKOKF9709810%"'(&# ")7Saiu}xvx{qYG?:;;:AK]jx}€|{uk_]\[]bjrsiQIX\P<'%     -    -   -     2:63(!"!'""$"#!!""$!!##$'&&#$#"%!!(-'(,"%(+0)&'&()),""'$%""# - - - -  #4X‘ŽŽŠŽŸ§«¨›’†o__aafkx‘¡­·¾¼®¬ÁÎÒÖÙÝÝáßÕÙÞ×ÏËÄ¿¿¯•…wu‚‰“Ÿ¬­ºÆÉÅ¿»²¤‘‹ƒ‚‚–¦œŽ…ƒ‚}Œ¡˜—¢¥ £¬««ª¨¤£™“—£¨¬ª¤¢¨§§¢ ¢œž¦º×ãØÅÍàå×ÉÖçêçÑ¥x^\b~–Žš–‹‡zmŸ¸ÀÂÁÂÉËÈÉÊÆÄÁ¸ÀÇÕÞãçêìðïðóóôöö÷ööôõóôôòðìäÚ×ØÖÐƸ¢}]LYjfjŽÁÛáÛÏÈÅÆÅÉÊÆÇÇÅÈÈÅÁ¸¹¸½ÄÃÀ³”W2)3F‘Ôêè×¼µ·¹ÄÍÐÒÍÇ¿¿ÁÌÜããàÛÒž¶³³¯­¥ª«¬´¿¿ÁÁ¿ÌÛßáàãáâäèçÕº Ÿ±ÅÍÑÑÓÔÕÓÒÌÊËÍÈ¿®•‹ˆƒ}y}|~ƒ€ƒˆˆ‹ˆ‹‘”‘‹„‚~Œœ«¬¬£Œt_[U]SWw‘‘—–“´ÐÚÕ¶† ÍåìêãÒº´³¬¥®®«­¯¤¤¥´ÐçìåÆ¡˜›¤¦Ÿœ•Œ’‘‹Œ›™ž—ŒŽrbrŒšŸœ•‘†c?4MlZ57[mlQ6D¢’p4   -""%/4/ "9bngbZgcarsg`adhec`blzwltŒ‹’˜‘„os‡”¢¤ŸtM   - -=UZYVeq‚|i^Ygsosoe]NQfy”šŽ‚€ynrkmidr}sjkdsp`K2 )4>D46/162-#",6/%$5FOMKHCHDETXN?939A?>7145442,%#(&&! 0CYeq‚…€{{}sUC@>;>>@Gbr}ƒyyqg][[Z_forseVYabTF. -  -    - - - -  -   -  -  - - - 0=7,! # ! " $#!$$!"$"! #&('&*#""!&&!"$).(&%"$+'),*$-(&,&!&'%"$! -    !5S„‘‹Š‹†ˆ‘˜¢«­‹u^__eik~­«­·»¿ÁÇÌÅÆÌÒÕÖÖÖÚÝÛ×ÕÍÇǸ—~os|‡Œ›¬³ÄÍÕÒƽ°¢–„~‘¢œŒ‰‰€|€ˆž¥™—ŸŸ¥®­¬«¨ Ÿ™œ¦««©§¨§¤šŸŸŸ¥³ÈÒɳ¶ÇÑõ¿ÓÙÔ»’cW]`’ƒ…‰™•“€i}¢¸ÀÂÂÀÂÇÌËÉÇĽº¾ÃÅÂÆÉÐÎÓÙÛÝÜÝáàâåæåçæææäãææãâäàÞЭ‚dPMhgj–ÈßâÛÍÉÆÄÈÉÉÄÈÈÆÇÄÄÀ±¯µ½Æĺ¯”\1,0EƒÎêìܼÄÔåìïîæ×ÄÀËàòøûøøöîáÖʽ´°­¬¯®«´¾ÀÀÄÑßåèæçèçæäß̵Ÿ¤¶ÇÎÓÖÕÕØÛÚÔÒÒÓÏʾ´²±¦ ˜Ž…‚€‡–¡«ª©™’–¦µ¹ª}v{ƒ¡¦¨¥‰te`UYO\p¡£¡µÒÛÕº”…›Îäëêà趮¥¢®®«¬ª¥£¬ºÖíïêÌ£žž¤¢›’•‘–ŽŒ—–››‹‰’oWkŽ–š••›•k>0Ir–˜b85LhfR;M¡Ÿz5 -  - +080 -8[khbekcWizuebea^[[aen€|ouŠ‹Š›ž–…{rp•¤¦—ˆqV" -  - @A?=@?AJgwz„€{z{paVX^_`imsteW^ffPB+2      -  - -    -     -  -1>80+!"#"!#)" $" """$!&$&!"#%'(("#%("  *0,'$ '0($)'*&"&*& "+((##!! - - -TŽ‹‡‰ˆˆ“—š¡¦¥ˆh\_ahoƒ ¯¯«¯ª°ÀÈÉ¿º¾ÀÄÅÄÊÎ×Ø×ÔÔÌ̾žzmw€ˆŸ®¶ÊÓÖÑËñŸ’Œ…~‡˜¡›‹‚}z‡Ž£–’Ÿ£¤¥¨«¯±¬¥¡›“Žœ©¨«¥¥¡žŸœ™•œ£¦³Áù ž²¸¯Ÿ¦½ÃÀ«[YVb•­“‡§¤œŠŠ£»ÃÁ¾¾¾ÂÊÌÇÇÅþ¾¼¼´±¹¹¸¹ÂÇÅÅÃÃÆÍÏÑÖÙÙÛ×Ô×àäãäåãÝÕ¯‡bUJYff•ÇàæÜÏÈÇÅÉÊÊÈÉÅÇÆÄÁ¼¶±¹¿Ã嬑`3,2>sÇëíâÌÆÒàíóóïéÜƾÏæô÷úüüûúõðå×ƹ³­¬©¨²»ÁÆÅÓßçéèééêæáØį¢§·ÌÔ×ÚÙÚÜÝÛÙÔÓÖÕÔÎÑÍÄŬ£‡ƒ‘¡¸¶¹¶ ˜²ÂÁ¯Žojkk™¦«§Šl_[TVP_rœ¶¹¯ºÒÜØ»˜ŠœÌåëêáз³ª¢£ª¬§¥¨¥¦«½Úîðê˦ž¡£¥Ÿ—˜”–’—™–•ŒŒsYf•–™ž–sI4Dq“c97QnqU>K}§§7    '*6,  3OjophhgXjx{h[W`fc_ikrvzpqˆŽ’¢¤šŽ€kn™¢¡˜‡pK :V[X]hpmtsdV`hnekj`UR`†¢™{mspnqgajipqqr``mqkY9&#2?<8549EC9+"$.3>COROLFLMCB*  - -  - -   "$ "##!" " !(!!Z^XD1'"!! (''18641.8CNXdgTE?=?>D[ntmdYWKGE?A>;?=IWm|{}xxnWW[a^cjrwpcWbkjM5%    -   - - -  -   5A72$$# " " "#'""!$& #"!$$" "%,%##$ !+/)($$'-+''!%%$#)& & ")&#)& (    !,R|Š„ˆ‡ˆ‹“‘’ššœ{f`]jr‚›©®µ²©§·ÄÁ¼±µ¶¸¸¸¾ÂËÑÔÔÓÐÏ¿¢}rr‚Œ– ®¸ÌÕÖÒÎÅ´ •Œ…ˆ›¡›Œƒ„„}}Œ›œ”“Ÿ ¢¨©ª°°­¬¡œ™–¢¥¬¬¦¡Ÿ›ž¡˜š ž¨¯¼¿²™”¦¬Ÿ’œ´ÅÁ¨€n\Xk¡´£‹¥¨™›œ¬½Ã¿À»³¸ÀÅÅÅÊʾ·´®¨§¨¯­¯·»¾¾¾º¼ÃÈËÎÑÒ×ÐÏÓßãääåäÝÔÁ¬‹i_PV\]„ÁáèáÑÈÅÂÄÊÊÇÉÆÈÉÈÀº°¯¸Ã¿¸¬ŽU2*2=wÃéîèÖÔÛéðóöðëÜÌÅÔéõùùüüüûûùõîßË¿¶°­ª®ºÂÉËÕâçééêêêæåØÄ®œ¥½ÍÔÙÛÜÜáâàÛ×ÔÕ×ÙØ×ØÐÉ¿·ª•‰‚’˜©´·¼·§œ¢³ÄÄ´‘oddex’¤®§j\V[YX[rš±ÃÁ²¿ÓÜÙ¾—‡¡ÍãêêãÒºµ¯Ÿ¡¬­ ¥¦¤§­¿ÜìîéË£—œ£¦¢˜’”–”‘šœŸž‘‹v\f’— ¢¡›vL7Ak}€W05ZqpY@Cz©§‡C -   %6. - -.Ngqvupa`jrydVYcggfrw€vmn‚’›§§–‹~im…‘•ŒƒlJ - - 7TVYc`qzrqd]`rqmmk\ZTb…£ž–„vssqtkebagljkc^er_L;)#9>:><=8ES92'0A@RUKHFLFC?-% -     - -   -      - "*#$\YMA1''! # $*345434>AKQMHLZ```[]ksumQA3( '4=OPLLCEKKUPMC>68:A?=<5/04.'$(%#$ #(@EF[vzsz‚~sgYW[W`horun^WdnfO1# -   - - -   - -  *   -!9A=2%!  "# #!!"!"!"!#"&&#!!$### !%(!#"! )10($%",,,"$&()(-*(#""!%& !"%' - ## !+S{†‡ˆ€ƒŽ”Š‡‰ŽŽŽ’‹}fZgmu’¥²º¹±¬´¼º³««¨¬ªª°·ÀÌÓÑÑÏÌÁŸƒyt‚ˆ“¢®¹ÉÒÓÓËÀ´ ’‰ƒ„•§ŸŒ…‚}z™š““™¡¥¥­¬®­°­¢ ™• ¨¬¬¦žžšš¡žŸ¡¤¦¯¾Æ»œ“Ÿ¦œ—¹ÕØ¿ŒgY^j¡³¡Ž‰ž£™—ž«¶»À¾µ¶¯±µ¾ÅÅÇÊËÀ´³®©©¥¤§¯·¼¼ÃÀ»ºÁÊÇÊÍÑÖÑÌÕßããåääáÖ¨ƒoWWYXZs¬ÝéäÖÉÅÄÂÆÇÆÆÆÉÉÄÁ½¯®ºÂÁ¹°¥‡Y2'->h¹êïëäàæêðö÷ôïèÝÔÝî÷úûüüüýýûû÷óéÙ¿¶³«¯´ÀÇÊÓÞåêêëêéçæÜƯ¨¾Î×ÚÜßáâãâÚÙ×ÙÙØÛÜÜØÎƸª›‘‰Œš©°·¼»§£¶ÁÄ°‹nebas•«±¨q]RV[Wd‰«¾ÌÉ»¿ÔÜؽ–†ÊâééäѸ·°¡Ÿ«±«©ª¤¦¯¿ÝìëãàšŸ¡Ÿ˜Ž•Œ•¡¢•~_c‡˜¦§£švH3<[nvT;8cw{\;G|¬­†? - #1- -'Dckltpd`apxhU_mnju|€|}rpr‡—¥««—ˆwio}Š„qjkJ   @[TS`hv‚wfb[ftnnopj]XcŠ›¤ž‹smqwnf_]ekkZW[kg]R809:9267IR=*!$1<3543-+&$&%$ 1BVly††~{tn[C<<=9CFE\syz{‚{w`TSVR[fpptm^\kncH0      *'  - $_    - - -.>=1) !6!%% $ !"!  )''! $ #!%-'"$$+3-('$-((--$&(+2+$$!!!!!%&! -#!$"   -  !,U…‹†„†‰€…Š‰}{c_fnlzŽ¦¼Á¸²¹¿¹³®¡Ÿ¢šž¯¿ËÐÐÎÏÎÁ£‰yyˆ’ ¯ºÆÓÖÒǽ¯ ‘„ƒ…†“¢™‘‡†€€…šŸ‘ž¡ ¥­¬­¯¬ª¤ •”£§«¬¦ ¦©¡Ÿ¢œ› ¨µÈÔÊ° ¢¤”‰šÃâæÓ¤iYYe“¤™ŠŒŸ¡˜žœ¡±¸¾¼·µ³³ºÃÉÁÂÆÈƾ¹¿À¿¼¼ÆËÏÏÔÔËÌÏÍÌÊÌÓÕÑÐÖÞãäçåäà×Á tfXafe\q²ÝåàÖÌÆÇÆÆÆÇÇÈÉÆÇŽ²±¾Â½±ª£…S0,-8i¸åîïìêëîñøùøõðéÝäóùûüýþüýûüüüú÷íÖ¾´±¬¯»ÄÊÐÜäèêéééééà̲¤©¿Ð×ÛÝßââåâÝÜÚÙÚÚÙØÙ×ÏÅ»©–Œ‘š®¯¶¾½­¤¶ÆŲkc`dt˜³´­“qeYTTO_š¿ÆÑ̽¿ÑÝؾ”‚›Æáééäκµ²§ž¬®¬­¬¦ ±ÃÞìëá¿Ÿ˜›¥£Ÿ•‹’‘”’œ˜’“•zam£¦¨«¦˜sD2=WkwT9Bg„ƒZ9I¬¨‹C - - %6/ - ):5.67FG=&&6=FTSXLMMH88- -  -   -  -   -  - - - - -  - - -   -  -    "% !#$%UQJC2! "#!"! ""$")445/38AIP^caQ>99<>A?<6443,*((&*) '2EZhv††z€xmZ@<>7:=EM^s{~zyvsm_PSSU[fntqfWdmo^@+"    -  -  --? -  %    - -4>C/& !!!#! "! %!$% +% "#%" "#"!&$# &-*%#%!#!/3*$$"#%#)+'&#'))3+!$ $%$#  +* ,Uwˆ†‡„‰‘––“‹tssmic[\judet–°¾À¼¼ÀÀÀ¸©œ›žœ”¡¾ÊÎÍËËÏéŽzv‚Š–Ÿ¬»ËÖ×Ñý®Ž†{‰”¢˜‡†}}„‰¡¡¢£ª®®±°®«¨ šš¢¨ª®¦©±¬¤ŸŸŸ¢¤«·ÎÞÖº¥§§–‰žÎéìݲwZWe¦™†Œ«ª¡¦ª¥¬·»¸¶¸»¸ºÂÆÁ¾ÃÌÏÏËÉÌÐÓÔÖØÚÛááßÜÛÚÖÐÐÓÑÓÓÑÙàãäääåàØÀ”g^dtzseºÝâØÐÃÄÅÅÆÈÊÉÈÇÆȹ²µ¿ÁÀ±© ŒX34.7i³åïëåãêíñøúù÷ðåÝçóøüýýýþýüþüýüüùîÚÀµ­¬·ÇËÒÜåéèéééêêá˱¨°ÅÔÛÞÝßâãæäßÛØÚ×ÙÚÛÙÔÏÈÀ¯œŒˆ’œ­±¶Àºªž£¶ÅÄ´kabi{›µ»±’gj_YZ]r«ÊÊÓ͹¼ÑÜÛ½“™ÄáèéãÔ¹¶³¨¦¬¬¬ª«¥¤ªÁßìêÞ»š––¤¦ž”’’•“šš–‘‹–”vaw“¦§¨£Ÿ˜oB32Wty[?An‹‡f:H{§¨ŠE  - - # .98 %6BVfo{wgcsxiYdr~…”•Ž‚|mfn†š¨Ÿ‹zjjjjmgmnghO"  -  - -5T^`_gurljg`danxrojbbjŒ¡§ •‰{volmjdSWagcRTS\jhQ75&/979769BP@-*3FKTXYMHNE@=+% -    -  - - - -  -   - - -   -   -   ! #"!SQKD6%" %- (+1222.47AMR^bZK?8>?>K\knj_[OFH@HB@?:<<>>CGYbd^ShjlmcKC.*$"*:FJILMNMMLOUKD>;:BB@=7333330+&*"!$#0G\k~ˆˆ||~ulVC@<=>=DRdwyzvushcZKN[XeptvrcVcqjY<'  -    -  - - - - -  -  -  - 5CB3%" !  #!!%#!$&%!$! &"!!! "!!#!#(&$%#"$%! +/&%!""'*)-+-&$(&'! %'%#!"! # !  -Kk~€‡…ˆ˜ ›¡˜wf^[YYX[jlhek‹ ¶¾Á¿¼¼À¾·²¬¤¤œ¢½ÈÏÎËÐÏÁ¥ˆqp–Ÿ¬ºÍÔÙÔż± „}…”™’…†€u’ Ÿ“Žž¥¥¬¸·³³°«¥Ÿ˜ž¨¯¬¨­°©£¢   ¥ªºÒáÛÁ¤¬°œ©Ùìíß·}]Ri™®ž‹•°­œ¥­®¬¹¸º±­±³»¿Â¿¾ÂÊÌÓÖÐÑÓÖÙØ×ÝÞááßßàÝØÖÒÒÕÕÎÓÚàããæååßؽ•k]h|Œ†{¾ÚÚÔÊÅÀÀÅÇÆÆÇÊÉËÅ»±´½Â½±ª¡‡X1-*5V§âîêØÎ×äñ÷úùôíáÛäñùüþýýýýýþýüûýü÷îÚ³®µÄÉÑÜãéêêëèêëã㦮ÅÔÛÛÝÞãääãßÞÚÙØÙÚÙÙÔÐʽ®›‰‰“ª±¸¿¼¬˜žµÂôŽkkkhy¡º¼´—qb^\_[|®ÌÊÔ˺¼ÏÜÙ¾y”ÅàéêàÕ½¶·¨¤¯®­¥¦©¦ª¼ÖââÓ¸›—–ž© “•’‹›˜”Ž‘™zgt¤¦¤›’…j=0:Yxƒc@Cm‰ˆ]8F}¤§E  -  ,42 $0BU]hlghctwj]bn~˜ž’Šsho‘œ££“…obhjnnnde_L  -  3OZR]gnxxtjjjjsvlstecp‚­£’Œ…€vsqh_US^blZWSYbdV5"-;=@;:+&3IR[YPJINJ?D3! -     - - - - -   -  - -   -  -   -  -    ! $ $!  ZULB6&"$"% $)'311.-24@KTZ_XK?9;864ETjz{vtqpjaTKR]`fqwtrdWfpeJ8,    - -  - - -     -  -  - 1DA8(  )! ! '! % $% ""!$"!# ''&#&(%! # #!)*$##%&&62/,,#$)(%# $$$  ###&    - 6`u€†ˆ—ž§zeWIRVUZhkolq‡š«µº¿¾½¼¾ÀÀ¾¶±¦©¾ËÑÐÑÒÏÁŸ„mpz†“®»ÊÕ×ÓÊÁ´ ’‡€†‘™Š„„}˜‘›¢£°¸»¹³­ª¡š˜ž«²µ­¥¦ŸŸ ž  ¡¨¹ÑãÚ¾§¯µ›‘´àíìá´y\[i›¬œ• ¹¸  ©¯­°´­ ˜¨¯»»¸¶ÀÊÍÍÖÕ××ÖÕÖÖÝßÜàâãäâÛÚÕÒÒÒÎÔÚáâæååãàÕ½™mUZ{•‘€“ÅÜÚÑÅÁ¿ÂÂÄÇÆÇÇÊÈÅÁº®´¾À»´©¢ŠX3.10KÝíéÍ¿ÆÖê÷úøñçÛØÜíøûüýýýþýýüýûüüüøíÙ½¯²ÁÉÎÚåéêêëêééáͶ ¬ÄÖÛÛÛÝâãäãÞÞÜØØÙÙØÖÕÏÆÀ®˜…‰–Ÿª¶¶½¿¬™œ³¿Ä´lgjk|£¿¿·–p]ZY[a„²ÍÊÒ͸½ÏÝÚ¼vŽÃàèéâÕ½¶¹¬¤¯²­®®¬¬«¹ÊÔÔdz¤“›¡¦ ”Ž‘˜““Š†‘|er”££¡“Š€e:)>\…‰^>8b…Z6O„©«H   -  -  ')8/  2CLNZ^djttudb_mž£˜~ndxv‰š¡£˜‹z`filhcefaL& -  2M_YQ\hw|qqihvƒvzzf`g{›®­™‹ƒzrqkh]\bgjeWWUbb\A*8=J?:<6BF;& %0;KTcXNPVTJNH7   -    -     - - -   -        !! !VSKD6-"%!%!-41/037>HKQ]^]OB;87=B\ptjcYQIFG@B?>;?>=9:523/-+#%##  (<>Jap„„yyssodXVZ^clqstpa[modM7*    -   -  - -  -  - - 1@A8-!$"!  "%!!$)$#!#"&&!!#'&(*)##' # ((#%!"+./-%'&%*00&!&"   ! #& -  - -)Vr‚ƒƒ‡‘›¦ ƒf[JOQT^glp‰˜ ª¹Á¿¼º¼¿ÁÃÀº¹ÃËÑÓÓÐѼ˜nqu“ ®¸ÊÖÙÓÍÁ²¢Ž‰|†Ž•‡‹ƒ‡‡”¤ª¡“‘ž¢¤¯µ¹¶²°­¢ž˜– «µº°§¢žŸ¡¡žœ›¨ºÑàÚ¾ªµ¾ ˜¾åïîã¶x[Xg£•™¥»¿±¥¦¥¨«£–•–š©±º¸­²¹ÇËÎÕÕÔÓÓÕÕØÞãÞßßâåäÜÙÕÓÔÓÏÔÙáäæäåäßÕ¼šjORs…’ŒÎãáÖÈÄÁÆÂÅÃÆÉÈÆÇƽ´¶¿¼·¶®£‰X5'*0D”×ìé˾ÀÑçõúöïàÒÐÚíøûüýýýþýýýýüýüýûöçÒ»²ºÇÏÛäèêêêëêêàв¥±ÅÓÚÛÛÞáâäãßÜÛÙØÙÙÚØÒËÆ°šŠ‹˜¢®²´½¿± ¤°ÁòŽpdhj|¤ºÃ·˜wiZ`^j…µÏÒÓϽºÑÝÚ¼xÁßçéäÕ»´²¬ª¯³®««­©¬¶¾ÄÈî›–¢££ž”‘–—Œ‹••’sacŽžš“ˆ}_A6@\Žb=6\|x\6B?7+!9ASacd`^_acac@! -  - - -    - -  -      -    -  !!]YQ@/' "))!'..034>?DKWY_^N>8;79BTkria[SGJKGCA:??DIJHI[ca^^anwlbM>3&'(?PVMPMLGHHAGB@:46<;97;5602/+$"$%#%.AWfx‚„{~zwiT@89@=7<>GLIHO`b\\ZapsqcJ=2'+7GOPOHHLIEB@E@:<5:??6:Z…”xMcŽ¤©šW - !$*2?C)  .FHHTa_^fx{h]V`qŽ—˜‘†~rqkopnq€{odYbfefjbbXK. - - *DVVSZeqtrifswxx|xzrohmŒ¨¦ˆ€„‚uptgf`ahig\V]e`O@*-FPLGG;C?EE@66C\m~‚‡’‰†…|[6   - - - - -  -          "!  ^VL>8&  #! !$*,7276;AIQWY[LB;>;=H]owmaYNEIKKG>6<=EMNLMba]^[dnvp`D=0(17BKKIGLKGGFCJF9146:<8;8<821/)&'%#"#(':P`l„ƒv~|n[G<9>@@::>FbsuoaTOLGICA><8AFMOMQ^cca\fktocI9-$,8EMKGKHPILSQRF>555:779<8566/.'%("$$*;Rdn„Šƒ}viYE=<7<=CPZfnijkpqgXMXbflnsvup`brziJ5.#   - -    - - -  -  +  -  - - #;HB/  %&"'$##'!#! !#! !""!!!"(," " !)!"(*,($"$0/,&!$%#*)$"&""#$+'   "  !(+410Zuzu}z}‘Ž‹Šˆv]Y[\ijƒ £©§¤›¤¦§³¸»ÀÇÄÅÂÃÆÉËÑѼš„t€|†’— ´ÈÓÕÍƽ°§Š‚x„–¥œ‚{†Ž•“‹–šœ ª´¸·®§ž™–˜ ¬­£š–“ œž›¢¨¸À·¥¬ÅÏ»´Óìòñ忆aZn¤±£—¤—ˆwhlk|Œ‹„}˜›–›®»ÆÍÍÎÐÏÎÑÙßáÝÚÙÞåâÝÙÓÎÏÑÎÒÙààáåäâÝÔº“hOA::AX™ÓæèÝÌÇÂÆÇÆÆÆÇÇÉȾ¹°®µº··µ°ªt;)')2oÁèìæáãæïøúöïçÝßæôùüýþþýþýþþýýýþþýüüùñâÎÊÑÙáçèèêêêêçÕ½«µÂÎÔÖÜÞÝÛÝÞÙ××ØØØÙÝÚ×ÔÌį˜£­·¹»¼¦šž­Áñ‘mknl¸ËɽŸ{h___c‚®ÑÏÒÏ¿»ËÚÙ¾Œn†¸ÛèèáÓ¹·²¨¨¯¯©­­¦ž¦¬¶ÇÍĵœ”• ¤£——“‘‰†‹’‡~—ee}Ž•¡›žšyT;=`…kPbŠŸ™{au ¸·œ`# -   "7GC1 -(0J[QGWc`isuquhigr‡Ž„vhfeeluhej]Z^a]aebWRU.  'HVX]^borxspkr|ˆtwpdecz‘Ÿ™‹†z|r{ykf_Z[Z]XPM`_]L/ !0FLJQRWYbfQ>>?C[z•‹ƒ€uyvysoU2    -  -    -    - -   -   - - -  -    -       ! ZPQ>0 "!$ #  "$'(35.5:JMVZd]H=><?=@KOKSVaig\Zfmrr]F9/).9GLHHGJMMNVTVF=;9;=6;::7641-/)&&"&!!.AS`q‹‹†€€yjS@;99;?ITervqrstpfTU]bejnnrtl^^txfB4. -  - - - -  - - - - -  -  -  -  "7D?/ - "#""#" $#"%"#! #%',!#" $!,2'#*$$'2)&%!%#'4%!!#"$ '$ - -#$    - +Zt{€|wy…ŽŽ‹…€zsb\\_lq†š¦¬­ª¨§¥›˜˜¡¨³¸ÄÈÈÇÂÄÅÅËÏÁ§“xy{‰’”›¶ÆÑÑÎǽ´¤›Œ€~„—«¡‘ˆ„|‚Š˜ŽŠ“”Ÿª³¸¶®¨Ÿ›•”¥©¦¡––•–¡ ›Ÿž¨ª²¼³¢©Ãλ·Ôîòðç½€a_q¢°§•‚oic]_q‰‹€z‰‘› —”˜¤°»¿ÅÈÎÎÏÍÐÖÝßÜÝÜÝãàÜ×ÑÓÒÏÏÒÙáââäãáÝѸ“lM?<3CEI[mrmd_NHHE@@;==BMMMQ[cee\YejpnbL9/10=GIHCDFIORUWVE9>@?;;;=:840-&,&#&!##'3H\g|‹ˆ~uyubL@4:49CI]o{zyrrgUOWagkmzzrk_cwsZ@1(   -  - - -  -  - - -  - "5B<1  !#>(!!#)&!!!""!$" ! !(%#$ !)/+'%%$ !*()'"%()/! $! "    "  -  /`qq€…z…ˆ‰‚~tbZ_[\ZisŽ¢­²®¯¯¥›—”šŸ¦¬·ÀÄÌÈÅÂÂÆÆÁ¶¦‹|z‰‘™ž´ÈÒÔÊý³¤—ƒ€˜¦žŽˆˆˆzŠ—š‰Œš¡§®°´±­ž˜‘“£¦¦¢’’™š¤Ÿš ££¦©©¥¡¬½Çµ¶Ùïñòå»|ft‡¦µ¬˜Ž‰wh`c^`s„‚z|ƒ‡“™–— ¬¯²´µ½¿ÅÍÒÔÕØÝáÞÜÚÜÛØÔÒÑÐÐÎÓØàâáâääÞй“iM<:6;ExÄÞãáÖÉÆÆÇÅÆÈÆÇÂÁÂÀ½±´·¶¾¾¿ÎÐ¥V3,+3]°ãëåãäèïóõóîèáâéðùýýýþþÿÿþýýþþýýþüûüúôçØÓÜâåéêêéêéæؼ§§³¼ÂÈËÍÎÐÌÍÈÌÉÊÆÊÎÎÍÈÁ¿¶ª—Ž˜¤¬²´¼º§š¢­¹»©ƒed^p˜»Íɼœo`dc_z«ÊÍÍÐÁ¹ËÚÛÀ’|‡¸ÛççÝϵ®±¥¥«®¯¬¬¤¡¦ª¸ÆÇòš”‘–¢˜“”’ŽŒ‹‰ˆ‹ˆ‹”fg†œ¤¥§¤¡‚T9?m—¨ƒWSn‹“Žª¸¨“tC - -   - !-G@)  0COSX`a\[Zcknljedmtqsrmkcadkfjhel`[]a^bY_cU, - -  !>V[`VVbrpfjdoy~Žˆzqm`fk‘™Š„‚y|tsm_a^XZ]OJRgheO9(*8HaSTcijidS?:7>Q`v{t~~…„‹‡^@   - - -   - -         -  -        !$$$ RUG?.$&$'" ""!!!" ""(+-.231@@J]pqg\]NIFEGA?;:ANJJLR`fb^Y\fqn`H5+-8@GC?>EIPSSTTNB;@CA877==33+(" %$!(/=Ndo‰„xuul_H;;0OP?Q`t|~{toaRP[`lnuƒudWcvnT;-    -   - - - -  -   -  - 3&:;6.%  " <%"! %& !!#! " !"$",($!""% .&&$$!"$,'(,0' '&# $""!$#"  ! - +bqs‚„~††{qqbWX[[Ykr}Ž–¨´¶²´©¡Ÿ˜’’–– «µ¼ÂÄÇÆÄÃÀÀ¼²¥†‹’¤°¸ÉÔÕÍÅ»¯¤”„|„“¤ ‘ƒ‚€‹š”†~†—¨±¶²®ª¨¡˜•“©§¢’’œ ›—Ÿ¡¢Ÿœš’ ¶»¯·Ûîòñä½€bq©¸®Ž‡rfbdbi|ƒ~x‚‚ˆŽ‘”—›¡¨­®®²¼ÈÖÜØÜáâååáâßÙÔÐÓÏÏËÑÙÞáâãããÝÒ»”_MB86:=\œÑåãÛÐÄÂÅÄÃÇÇÅÆÂÁ¿¼¯®·»¾½ÆÙà¼`1/-4S¦àëãÙÝÝæîñïêßÕÕßìøüýýýþþýýþþþýýþýþýýü÷íÝÔÜäæéêèéèèçØÁ¤–š©ª®±´µ²¹´®±±©®¶µ³±®§›“ƒ€Š›¦´·»½©˜šž®«š{hbbq˜¹ÊɽŸ€oacd`yªÉÍÎÏÀ¸ÈÚÚ™xƒ¹ÙççàÌ´²­¤£®¯¬§©¥¥¤¥´ÆÈÀ¯œ“”“Ÿž—•’Ž†ˆŠŒ††}…–†dk‹ ©©¨ ˜|M9b”°µˆYW{žª¢¢© {a8 - -     ""8EH/ 5?JTS^[VQP]dbfadmnmorihb`cflefdgfc]X`ajef\O*  - - #JQV`TS^fqhhilz}…‡}nfc[byŒ“Šˆ‚zotuc_^TRPMTTglc_=1-=Qd_^igjlcQ?5/4E_u„|†€„††ytU6   -      -  -       -      &"$ #WWQ;)!&)%%"! !)&&!&*01*3ALKU\[VF;47,(*Agv||zzoojd_H. - -   - -  -       -           !!TUS<,(*%$$"4#&%$(#""-.12+0>EKU``VE=78@DQcstqfXNMMMAD;2;BIIMORSVPR\ajqobL<3.5GOSHDFJJOVYLA98?HE<@>;<20)#&$$%#"$3I[hj|€pppmeK<74oL,9JYghivtmj[=*$'=^jpndda]XTU?$ -     -  -     -       -    $!  " VRK>1& $'&"%"!"&$%(,131029CGR\`XC;:839@GJOSKQXXM[_jnoaJ;25AOU[IHEDIQSRGA22=IE==>>960*$#&'(% $'7IYfq€zttm^E=4;FACJ]m{||tttobPPX]cisxywgQ[rq_E3(   - -      -   -  5?6(-"  $ G!!$""#!  #$! #%"$($$#%%+1% !%(&)*/0+((/)'#$ '!     :r†‡„‡‚€˜’ˆ€vlbW[^`lqy…Œ‘“˜›˜¤§©¨¨££¡ž››œšœŸ¡¦³»ÁÁ½­œ ­´ÀÌÒÓÍÉĽ¯—Œ†ƒ†”ªŽ„‚sxŽ˜•†–—˜Ÿ¨ª¨¤ ¥œ•”“¡§«¡••˜œš–› ™”’Œ…Š ­©ºáðòñç¾izžª¥›–ˆfYY\jurqx|stldbddl„’œ£®·¿ÇÏ×ÛßãåèééçßØÓÐÍÏÊÐÖÞÞßâáÝÛγ‘cXB83573T¡ÄÇÇÇÂÂÄÂÁÄÅÆÈÆÂÀº°®¹¹·¼ÖêíÒu;2,3GŒÓëåÑÎÖèôôîåÕÊÍÚìöúüýýþþþþýþþþýþýýüüùîà×ÓÛãçéêéèéêåÒ³Žrlliegie`dgcibgc_bgdbbc[ce^h{Žœ¦°µµ¥•’ƒe_][h‘·ÆǸ›zhbhh`w¥ÊÎËÏÀ·ÈØ×¾–yƒ´ÕæêãÓ¸°°®®­°©¡¢¡žŸ¦¯³¶¶«˜‘“™—‹…ˆƒ‚ŽŽˆ‡ˆ’ki{•œ§¶¼·’`Sj“¤¨«¬¯®©ž”Šxrpd[P3,''!!"    - '()+112@DO^N9 - 8GVa]V_c]VUTSMWefaaieadX_[_iihgk\S\ahr|~}e9    2(3AUZZeZXYVVXSB*%  - -  - -         &%  !XRK<1%#'%%"$ "&!!%#)/,+-4=BJWZZRC9317?I^srh^S@EHCFF?6=?DKOPOW]\VUbfmkZC;56CWTLIB@@AFCMC946>;<6420-$%%##! #-@JWey„…{utiXC=89>9)  -$%y:Y" ""!"&#! #-$# !"#! ! ! "&% !!!*+%+**'&*("'" ##%%   $ -  - - - E’Œ‰‰”Ÿ˜Œƒpf\Z_`tw|Œ˜™—‡|„œ§¯®­«¬§©¨§£š˜™ž¢¤°´º½²¡šž®·ÂËÓÔÎÈǶœ€z†™§ž‘…€€u}•™”„‰Ž‰‘—› —˜™“’“ §©£Ž…ƒ‘—›™œ˜›”Œ„y„š­¬µÞïòò蔎 ¢¤¡˜Š||`VNU]ejktmh}{qd^e`tŒ—”œ®µ¸»ÂËÑÒÙÞäååàÛÓÑÍÎÍÉÏØÛÝáâáÜÚκ’dLE<45;9Q˜¿ÁÆÆÇÃÁÅÅÂÃÆÅÇż¸²¬¸´²ºÜîñÝ…?3/.C„ÉèæÕÑÙéóòíåÕÍÑÝí÷ûûýýþþþþýþþýýýýýüúõçÕÏÒÛäæéééèéëçÔ¶•~nkjkehdfflgfiddZ`g`eid_be]c{Š–¢¦®¬¦‘‘’ŽŽ}f\]ajŠµÈƹ™|lbbsau¡ÉÌÉÎÁ»ÇØÚÁ–vƒ±ÖäéäÑ·®¬«¦©¦§«©¢Ÿž¦¦©µ«—“’’‹„‡ŠŽ…~‡‘…ƒŠ›‘hbƒ¤·»Ã¿­”jgŽ°¼»¤“›–”™~sqkeUSWHHD:+/*00(   - - $,699?3.=?RWK: - 8GP\YY\[\ZUVKNR_hdc`^\ed`^gmqiji\R_n|…‡ƒ|xjA - - -  6S[VXU\ekpebhk{‡€{sg^\bl|…ƒxvorvlhg`adga_gakgN42008QX[`\]WE=698AHZYWca_af`ZI4! - -   -   -    XVG>..'#!,#&  !"*.-0,6;CLMYZVB7:2:=Ecsqf_SGHFFFD?==CLPRPP^_^\`celg^A67:HRQRKB>C;=EA><9?===897241+("$'$ .3AQ_kx…€|tpfOA9;<@BHUdqtqoppnlaXU\abipvxn]Tl|kTA;,   - - - -  -         'DB91  -#"$M; # ",) !  ""$ #$ !# #%*))--(%))+*""$#$  "&!   -R„“’‘ŽŽž™“‡thdXZ]ipš§£–ˆt~•Ÿ¥­¯®­¯³¯°¬£žšš˜¢¨®´¹¸¬¢¨¸ÃÍÔ×ÏÈÄ÷¡Žƒ{‚œª¢‘ƒ€yw†“˜•ˆˆˆ‡‰’’”–”™—•“– ª¤˜Œ‘—œžœ˜š•Œ„|wu‘£ ¨ÒêðîæÆŸ™žš•…{qts_SLPU^ejf``glhaadeiz†‹š¦­¬¬¹ÁÇÍ×ÜÛÞÞÚÕÌÊÊÍÌÉÎØÝßàááßÙʵ’gP@;57?;Z¬ÑÓËÅÄ¿ÄÅÃÄÆÁÂÄÁ·¬¯¸³§¶ÝñòãC2.4?zÆèæÖÒÜëóôïçÖÌÓßìøûýýýýþþýþýýþýþýþüüõêÙÍÏÛãåèêèéêêæÖ¹–~mnnolmjpqonmdfjomindd_c_]ad|”›¡¬²ŸŠ|jX[_o¯ÈƸ›ydaa[\s¤ÊÊÈÌ·ÆÚÚÀ‘yz¯ÙåéåÔ·®®¢££©«§©¦ ŸŸ›š¡ª©›“‹‘†‹‹‹‚€†Š‡‰‡™§”}‚£»½¾»¸¬œ”¨´¸¸¬“u‹•”rd\QQ`^_N9.120'.'  -  -  19:5222=CHH=1 9LUYYY]X[[UUKKT\]bd]]^bb]`mrsnkhfee~•’Ž‡„}o: -   7QWNT\Z`gmliqr‚y{mib_dhtƒ}z}w}vpvnf`^elg_]`Y__J.))1CJKSYXRJ@<863@PXgbfonnymbU8" - - - - -     -            "TWM;.%#%*" "! #0*.)039DJPZ]PA9858=Qdqoc]UIHIHME@:=>>98;@B:7<86643-)#$*$".;L]ejszxtoaSC:5=ACIYlsrnoutph[PY`ahjwwseX[pkTC;+    -  -  -  -    - -AB8-  &!! !!!%#!  !" !"#"!&#" $#'!%&#*),((')'*% $&#&   (  -  T‡ššš”ŒŠ’ž¡ž˜Œ~l^PX`ko•¦°®¤z‚”™›ž¤§°³¶¶³¯«ª§¡›˜™œ¡§«¬¨žž±ÆÎÔÓÏÈÁ¿½¦“‚ƒ‡œ¨Ÿ“~ys}‹—™‹Š’•–”–œš™’“ ¢ž–ˆ}ˆ–ž¢Ÿ˜™™›–„{pr{‘˜ ÈæìëâÅ ‹ˆŠzifpsobTKKQ_jtib``bffka\bi{‰Ž™¥ª«³¾ÅËÑÙÖÒÌÍÄÅÄÇÊËÉÑ×ÞßßàáÞÚ˳aOD@9359gÍæä×ÊÃÀÀÀÂÆÅÅÁÅÆ÷®¯¹µ¬½àñòæ’@16>Ao¼âæÜÜãìôøóìáààçðøûýüýýýþýþýýýþþýýýûøîàÓÒÜäèèèèèêéäÒ´”umpz€{}…ŠŽ‰{{Ž”Šwjca_`_bw—ž¢­²¡‘‹…kYV_j±ÅÄ·˜}ifdW]m ÇËË͸ÇÕÙÁ‹m|°ÕäçãÓ´­°¦£Ÿ¬¨ž¡ž Ÿ¡˜™¡­§–“—‹„ƒ‰ˆ€…‰‹‘—¡§ª›’¦³³´¶¶»¹´²®µ³¯¥€fep‡Œ†}yqgo…~PCHKC7 - 1EMZW_]bYURMQNRSY_WVWTUY[fnspknohiz” ‹‰rgD - :SWOTU[]ccidhnz‚‚yih`bfjq|zrz€utriged[[aZX[^TG)#%+ANDKRUWPKD@2=AVfprs{€~ƒ|hZB$  -     -  -      -           - -    "#$!\RF6,&"#,!#!" &,0((23>/% #"!  """ !!""" &  $#"#&!%$' ! #& '%%+/&-*$" *(""%  -# -   =l‰”˜•‘Ž’ž¡Ÿ˜‹{l\S[eos‚šª·³¬œ††–›žœ¢¦¤®»µ¯¬¯²ª£—™™––™—‰Ž¢¼ÉÒÓÐÊ»½¨’†‚…š§žŽƒ‚uwvˆ™™‹ŽŒ‘”—˜”™¡Ÿš“ ¢œ™ˆ˜žž–“”Œ„wnmŽ”¦ÎæìêÚº’„zsqh_[ttnaZMKYc{|olgemhoma`wŒŽ‘¢¬±¿ÇÊÒÕÏÆ¿¸­¹ÄÇÈÉÈÐ×ÚÜÝßßÞÙʱbKA=78.0l×êéÞÎÁ¿¿ÀÄÂÃÄÅÆĽ¸±°¶³´Âáððä;-/5?mµáéèìïðöùôôñññó÷ùüýüýýýþýýýþýþýþüüüúñåÚÕÜäæèçèèèéäѵ‘xs€”¨¥¡¢ª¶»µ¨ž˜¢´¼Àµ£Œpbab^dwŠ™¤­±¡”’’‘‡j\T\k´ÄÄ»ž„micV^m˜ÇËËÌúÅÖØ¿‹h}®ÓáåâѸ±¯§ž£¦¡ž ›–œ œ—ž®¥š“‘’”Ž‡„„Š„…‹™ž¤­­¬œ˜§®«¯´½Ä¾´§ Ÿ¢ Ÿ{PHTk}‰ƒŠ‰‰Ÿ¯­¢ŠVGadjhjbD-  - ,6<<78=>@HPK=! - 1E><44:=?669::55/(!!&/@Yc__ejjpmhQ>677?>@L^qyrstwvo`PMW]`lx€rgag|~gG8,     -  -  -  -    "88-)!$#"! $$"!#%! $& !%$! !"#&$'2 !#!&$&!&&#'*&"%'&#$  - $% -     2[v‹’œ ¡›Žmb`]cpt‚˜ª´¶²¨Œ”œ¥¡Ÿ¡¥¥¬¬­®¯µµ¯¤¢˜‘Œ}|€†œ¸ÄÍÓÎËÁ¼»¯”†ƒ„–© ƒ|yƒ——ƒ†‘—–’˜›š“—Ÿžš–“ ¤¥›”‘“˜™œ•™š’ŠƒqsŠ’§Öçéą́nkifegeowxh^RQU_m~‡ˆpoppkbr™š‘‡‹Ÿ¬²»ÅÈÎÐËù°ª¶ÀÈÊÈÉÏÖÛÜÝÝÜÜ×ȱŽcRH;973;uÎççÝο¿¿¿ÂÃÃÂÄ¿¹³¬¬¹´»ÈßîîàŒD5209f¯àëîóöøøùùùù÷øùùûüýýýýýüþýýýýýýþüüüúóèÝÚÞãåçæêéççåÓ¹‘v{¬ÄÄ¿ÃËÕÙÓŲ®¼ÈÖ×λž€g`\^jzŽ˜™¡¬«£•—™–†jWZ_f´ÆÈõ˜~gc`_h—ÅËÇËļÅÔ×À”w~©Òßãßи°¯£œŸ¨ › ¢Žžž›ž±ª“Œ–—Ž‹†‡‹ˆ‹š¥ª«¯«š”žª³¸¿ÃÁ»¤Š~Œ•›šwF8C_x…Ž™¡¨¤“mLNbo}‚ƒuJ/(%$$ -  !+5CA;AIKHGXO>  .AOQSScge`[]UMQWQTOHP]^\ahhgdcegbbz—š—ŠŠ‡zwA -  - - -:W[UT[`bhcjhjto{|refdZ[gpw€ozquvidXY^YGTSHS]YE55AFV_ZPSY[_^YBEARiw{ƒ…€„p]?%  -  - - -  -     -  -       -       \QC6/'#+,   ! +0+,'/4;HJQZYO@5@;966>>B59::443/'!" # %(2G[_abhdilp_J;119?EJOerzxww|tn]INSY^jw€tb[lx]F8(       -  -  -   -    - - - $:B4, !"!! ""%*!#$#% !" %&$%!   "#% ##)!#"$") - -'  - - - .Ndr‰’• ¦£œ‚qfaigin‚–ª·¸¶¯™œ¡¢žžž¡ ž˜œ¡®··³°¬§¡~rwˆŒŸ·ÇÐÑËËû½±›Š€ˆŸ¨›}x}qz‰˜’‹“™”—š›š˜¢¡Ÿ–‘›¡¤‹•™œ ˜œ›œ“‡€yisŒ”¦ÎàâÚº‹fefhsyhenvulbY\abisw€ˆ~{yqr}Œ”›¡“˜¡«³¼¿ÅÆÈÊÄ¿±ª±ÁÅËÉÆÑÖÛÛÞßÝÛÚɲgSEA6/79kÉâà×ɽ¼¼»º¾¾»»º»¸¯§¬µ¹¾ÉßîðßE:615b°àïòùùúûûüûüûüüûûýýýüýýýüþýþýýýýýýüü÷îãØßäåèçéèèèãÕº“z{›ÁÔÜÛÞâäçàÔºÄÑÝßØħ…f^\_iwŠ“™Ÿ¬®¢—“—˜˜ˆgY\Zd‡²ÉÍмšnf]\k—ÄËÉÌúÅÓÕ¾‘w|¤Îàäßϵ¬¯¢Ÿ¡›–œ”•œžœŸ±¬ž„•˜““‰Š–¡§©¬­ž”£´½Âú®’xfy‹Šƒf@6>Y{‹•“‰Œ—œ™˜‹r`ftt…‰tN/+4/' - -  0AFJQ\\VTSLS>  (CSPVQetf\ZWSMJTLLVRR``a^gkjg_f`a\x’“ŽŒ‰wpH   <>????Hajd\XPKILJFE:59EHIKJL`d]_ajoriXB=7::5624,"$# "(G[fqvs|wpl`J@FOTW^cee\OZjvjP@3$    -  - -  - -    - -  - - - $8@3"" +# #$# #! "$##&$##!! %""!! ! !  $++'+   - -   - -5Phw‰š¤¦£œ“{cX`afisƒ™­·½¹°™—¬©§ª¦¡ž••Š}{‰œ¤®²²¶µ­Šs}“¤¯¾ÊÐÓÏÊ¿¸µ¨‘ˆƒˆ–§¡”ˆ~yvx‹•‘Š“‘“’““”™ž¢ ”’™££”ƒ‹“–˜——˜œ—‚}rjm|™¢ÄØÕ¼™gRQU`nqklk„‹‚ylsneb`Y^dnwz}‹…†‚}~†“•˜™¡£³³¼¼¶¸¯¨°¿ÇÊËÉÍÓÛÞÛÛÛÜÕʱˆ]O@93718G}§®§¡œŸŸ š¢žž¢žœŸš›ª²¿ÃÆÞìîâ”K7015UŸÜðóùûüüüûüýýýûûüüýýýüþýýýýýýýýýýûüûúòèÞÜãåæçåæèçáѶ“|¿ÓÛàãáÞÚÖȸ±¹ÄÏÍÆ·£„naX^_{˜™™¦¬¢•’—˜‰n[R`a­ÅÒÕ¤}dhb_k•ÆÈÊÉ¿¶ÄÒÕ¾‘{q¥ÎÝãÝÏ´«¥ŸœŸ¦ ›ž–™¡¦§¦®®Ÿ–‡–˜šŸ¤£Ÿ™”œžŸ¥¢£®¸¿Âþº²ª¯©–f@9FO\[@Im†Š†‘’“–“‘‘’•…hE862'*  - - %9EJTXfld\`aZB' 1GTZYY`jhZ]d[TJVSWV_`[YdbedaT\bdfct“–•‘ŽvN *HVJFIR[affd_nw{tnkie\[`ffinmmrhlfdd\VQTSTPKYX^THBLSevtlsqywrgWIT\frqvsouwqldJ.  - -  -   -  - - - -     - -  - - "   -     -     TNB26 #'! "#*,/0-.5@MRZcfU@=8=@=Nakh`ZRKHIHHC3.09@EKKPaca^agork[A<>?33>:940#$"%#!",DVgm{€‚ypmdQB550D:8BRdlnqnpkfTDCJJQ^cdaaQHXkrdHA3 -    - -  - - - - -  -  -  %=<3$ """$#& #%"%"$   !&$$#$"! !  !#$$% - (-4-&    +Hdr}‹”™œš‘~i__bdmr‚—®¸»º­—˜­³±¯«ª§ž“„vu‡—ž§§§«±±§~—¦´ÂÉÏÐÍÉÂÀ¸¡”…‚†›¥žŒ†‚xs{‡•”ˆ‰’’™ –•“›¢ž•‡‚Š“˜šš™›œ•…{pbhq„”¬ÔâßÈžlUTT[gi]_o‹‡qmrtmxtkbchruw~†xz…˜š£œ¡£¢­·½Á»·¶³¶ÀÃÇÉÆÌÖÛÝÞÞÝÝÖ©„ZH<9;;4GIU]c___bhjcO704@LPSJDHRXSD=:6:><<074580+%"!)"!4I]hnyworhWD:3=58856?IT\egjdTDAGTWY_mqlbMJftp]B8) -     - - -   -  - - -+  -  0771&# =&($$$% !""!$ $!!"" !" ''""%%!$$--)&  #)+10+  -  -.Jdorv„‹”•‘pcd_bts€˜±º¿¹®›™°¶¸µ³°«¨žˆs{Œ–¡ž£¦¤«©šŠ…˜­µÁËÑÐÌÊÁ¾¸£‘‰}‚™£›‘ƒtu‰“††‘“ŠŒ–˜˜“”  ž›””››š˜›œšŠvg_ay†“¼àèãУnVSUZ_]]_n„}ognszwoh^jsu}vuy~odp‡•—›ž¡¢ž™¢²»¼¸¸º¹¾ÃÃÃÈÈÍÕÛÜÞÝàÜÓÁ«‡cH=>658<@Qftwwx{zŽ“•—œœŽŽ§¼ÉÐÖåðòã–M4--2JÐíóúüüüýýüüüýýüüüüýüþýüýýýýüýýüýüüûûöíÝÚßãæåèçççâÒ¸•tm|–«¹µ´³º¿¿¾¼¶´²±­°¬„se]Rc{Œ——œ§¬žŒ•¥­¥‚faU_~«ÂÔØŸzh`b_cÃÈÆÇ»´ÁÐÔ¾“qw ÈÛàÜ̶®¨žœŸ¨¤˜›™—œ—›–ž¦­¡“Œ—Ÿ§¢¢¢¡›‘™ž ¢¢¯¯®­«¬§©Ÿ“tNCRPI>6=324=>*,51/2( ##%#5BIUdlmgag[N421*/21(##)1@O\[TB67@FMOTagg[CH`ngR7+     - -  -  -       - - -  -/76-!  # '"&$ "## !!!!"!$!%  "-%$$#0$',21%  $-421"!   'Jfqmltˆ’š“€md^Whzo|—®¹½¸®š›°¸¹¶¶´³¬¤Ž|‚žžŸ¢ŸŸ›‰ƒ“¥³ÀÉÏÐÉÉ¿ºµ¡Ž‚~Œœ¥ž‚~yvˆ”…‹››•‹‰‡Š‹”™–’”¡¨¤—’’™–™“˜ Œ‹vkgl…’•¸ÝçâÍ¢kMKST[bhij„|qrgqpqpa[ceu…€†zm\it}‡›Ÿ ™“™¡©°¨ª©ªµ¾ÄÇÆÈÏ×ÚÜÜÜÞÜÕÆ°‡`JA92/725CVec`ekhh}ƒ‰‚‰Ž…¬½ÇÑÕâðñã–J6/,3H†ÊíñùûûûüüúûýüüüüüüüûüþüûýüüýüýýüüýûûöíßØàãçéèçççäÓ¸štm•°¸¶³²¼ÂÂÂÁ»½¹µµ²­ ‹tcYZhmŒ”™œ¨¯£’‘›¦¯¥‡k`O[}ªÂÏÍ´“{f`]Zc‘ÂËÆŽ³¿ÎÒ½”uz¡ÈÛÞÚе®ª¢¥©¦œ’’–›™œ¡©ª”“£ žšŸœŒ‹™šŸ¡ ¤¢žª«¦›–‡‚rUH`~Žv[csz„Š‘–‰Ž•œ¡›“‘Ž˜š’ˆsVE91+)  -  - 1@@III>9642,1AXf]J@:7<<==:1'$*,./595--*+&'$!'**/&!$(.19ESULEFA1 %  !"/695+&$+49:9A?GC37HNF8'#      -    -   - -   6C7,#2@ 0$! #!"'!# #$" "#&!! !!#$+-&! "-/12+#$ - -   - )Qhqrrr‚š’{ha_Zcro~•®»¼·°¢´º¹¸¸¶´±¯š‰„‘¦­ª£ž›—˜‘~w…Žœ­¾ÆÐÎÌƾ¸±žŠƒŒŸ§œŠ€}~yu†”‡š›”ŽŽ‹ƒˆŠ˜›—””£¨¤•Ž•œ™—–™œ’Œ{qip€›˜¯ÒâáΤmJKPU[ghfn„{okbgiihb^_sƒ†‰Š}l_ggqpv‹—–—š—™Ÿ££Ÿ¡Ÿ¡¬¹ÀÆÈÊÌÕÚÚÜÚÝÜ×ʳ‹dLB>6,6-7E\jgksnjh€’‘‘ˆ…–±¿ÈÐÖàîðå—M40+2CxÂèï÷ùúúúûùúúúúúúûúûúûúúûüüüüýýýüûüüûùïáÚßäèççååæãÕ»˜up›°¹µµ´´¸»Á½¸»¿·¶´¬š‹qf_]eu‰–œ§¬žŽ–Ÿ§¢€eYV`y§ÁȤ…m^bZ^fÂËÆÈ»²»ÍÔÁ”wn›ÆÚàÜ϶­ªžž¤©¢›™••˜ž¥©²® •–›ž žš™‰‰™”š¢£ž™–”Ž‡Š‡Œ|`Tb€y_en‚‹‰‘Ž’”’•ž ›”–•“‹x[A>72* - - -  38GPar}vuvjP-  -0G\\[Q°Š\\Q^]SK]]VWecilrjoŒŽ–™Š‚u‘›˜—ŽŠ‡Z,  -  ,SkXJOO^fkgacahkiknjaYWZbjjmx|€{}ysz‰‘‘˜ ––¢”eZVguqpsonskfggjiu‚Ž‹Š‹ŽŒŒzhK-  -    - -  - - - -   - - -   - - -  -  -    #"  WG@9&"  "$)""$%45/041+(-*##'.n¹çìðóóôöôóôñòóõóõöôöõöõôöö÷øùûýýüýüýùïãÚàåæäååäåâÔ¹”vr„´»¶µµ³µ¸À¾À¼¿¼´°ª¡Špd]Xe}‘“š›¥®ž—¤±¦fWX^€¥¾¿¹ „h_[\`eŠÀÊÈŽ³¼ÑÕ–€{”ÂÚàÝÑ´«§œ™ ¤ž’”‘— ¨­±­¢”‘¢¡ŸŸ›‹‡Ž—–˜ ¥¡˜Š‚ƒ†Ž‹ŠŒ~bV`w‹‰s]dn€‰…–Ž‘–’‘™›˜‘‘’““–€aA:583$ - - -4HScxŒ†wnxrS+ .DUWSPW\WXYYWMLV]S]lkdhqps‡™œ›}•›˜–‰†Z+  0WcXQPMT^aac\clnjmloha]Zaow~x†Žˆˆ’”ŽŠ”–˜–› ›’’ƒobXXjstoqloxyrgeagt‰”’“‘Œ’‘…jS4   -   -  -        - -!" XIA4'%! !##$"$!-)"!(" "#! &$)*" '### #*'#$##!   !#! %)+&&%+,"##!!    - -  -    -    -     &4;:6( ! +!# '%##&%#$ #" "#"&$##  #''')'&$!$ $'"$)/,!& "'*+/5/23/#  - - 6Ganrrn{Œ”‚o`_\_ir‚˜¬µ·¶± º¿¿¼»·´µ­£®µµ³­£”ˆzrz‚‡Œ‘¬ÄÌÈÂÁ·¨£–ˆ|y„–©‹ƒ„woƒ’ˆ‹”’Ž„ˆ•–•‘’ž¥¢—ƒy|œ›•›œž–Ž‰pjˆ©º¦‘”¦ªžƒdRRZS[_^bq‘…paVZZY_W\v’ª±°£—„uneilskjq€‰ˆ”™™¡žŸŸž¡©¸ÀÁÆÆÍÒÙÜÚÝÜÙÒÁ«‰_F?@9530?]…“—˜š¢©£ª½Ä¾±¥ –Ÿ³¾ÎÕØäñòë£N5005>j³æêäáâãåâÞÜÞÜßáÞßááâááãáäåæèìõúüüûüüúðâÙßæåæææåäâÖ»—ƒryœµ¿ºµ¸»¾¾ÀÁÈƾº´¯§Ÿx`Z[g‚˜› ¨Ÿ’“°µ¦‡dbX`~¥¹À¹ m]\a[b…¾ÊÄÆ»°¿ÍÔÅ™}™ÅØÝØ˵¬¤žš¦¡œ˜“š ¤«¯«–‘ž¢ žœ˜“‰Š‘˜ž¡¥£œ‰}|‰‘Š‰w\Uh„‰‹oZ^x…„†Ž˜“ŠŽ’”˜”‘Ž’–‘’’’ƒdC=;5/$ - --7FWf~‡ztrtS1 -&@TLVV[`UJ\UYQMWUT`bdiq|y{Ž˜ ›˜™‰|Š•™™”’‰g( - 1Tf\TQLYZgpg_ceqnsjlb\]Yl€ˆŽ’—™’‘”—–’ˆ†“‘“ˆ†Š}d_O\jutvotvz~sfdbcq‹Ž‰ŽŠƒnQ9!  -   -     NF>4'(# $ "&*% $!#! !$#  ' "#&!"      - - -   -  #2=>71&## ! )B4$$ %"# %##')("!#'(+)'%#$)$ "%+.+$!$# % .082..+% -   - 5McmonpxŠ•}j_\Y^dl|”ª´»¹®›£ºÀ¿¾ºµ·µ°¡“¯¹¼¸´¯ ’…}‚Š’­ÅÎÉÅÀ·«œ•‡€|ƒ«¡Œ……wr‚Š„Ž““’”ŒŽŠŠ‘›™’’Ÿ¤ž—ˆ„„˜œš—˜œ˜’~u›ÆÔ¾Ÿ‹’–q\SLQOXcYfr‹ƒfZSYNU_^n‹Ÿ°¹¹²¦‹xkdfq‚„qjs~Š–š£¥££¡ž«»ÀÂÆÇÌÒÙÚÜÜÚÙÐÀ©ˆaM@6:6408Xp„Œž¸Ã¾ÀÉ˳ª›‘‘¢´¿Ë×Øåðòê¥Q931.5b±åé×µ±¶µµ°¯±°µ³³²¸³¶¶¸¶º»½ÁÎè÷úýýüûùñãÚÝäååããæãâÔ·“|m|œ´Â¿³¶¼¾¿ÁÂÅŽ±­¯©ˆw_ZUd‘’—šŸ¦˜ŽŽ±·¦‡a[OXv¦»À¼¡{mdW^af‡ÁÊÆĸ¯ÀÏÖÄžzf™ÅÙÞÚ˵¬«¡˜¡¥›š—‘œ¡ª¨§¥›“‹”˜ŸœŸšš“’‡ˆ—™ ¥¦¦œ‡ŒŒŽ‹ŠŒ|_Vc~‰‹x\]|‰”ˆ‰—š“‘’•‘Ž””‚jM986/   !-I^d{‹‹uw‡…f@  -'6JZ^ZX_cT]^][KGM[[ekjz“•†ŒšŸŸ£“‹Ž˜™”’Žj." - - - %UttbW`devtmmry€ˆldjqz}‚Š‡Ž„}tnpsk`e[U[VVZ\ea\QQUhr{‚ƒ‚‡‡nidntƒ’š”Ž’‘‰lu -    - - -  - %    -      !!NJ>-&   $$& !" $    - -   - -       &7:CD;, "  $& %$!!#! #"##! #%%## !"""%"&%$*+(" "#%$%)&'%#$2.+020-944-0&%  %Oijgmkpœ‘~ga`b_ckƒ—¯³·¸ª›¡¸ÃÃÃÀ½¾½¹©œ˜¢µ»¼½»·²­Ÿƒ†‘š›ž°½ÃÍÐÎƶ¡‘‚‚«žƒ{spz‰”Ž†‹””˜›˜™•’”Œ–¤¨£š‡†“œ˜•™Ÿ¡šœš›ŸÀßæÖ²“˜}YHOSV]admxŽ†ufSHM`€‘•£²½¿¾Á¼±•„rv¢²³¸¨•Œˆž­¶µ®§§¬¹ÃÄÇÉÌÒØ×ØÛÜÙÏ¿§‚`VG7/-2<:OY\`f€œ©²¬¦£™ˆƒ€{‡Ÿµ¼ÇÐÚçïóëªT8+..0G’ÛçÕ®Šsuowsv}tzuu€}ˆˆ‡‹‹Ž”ºæøûýüüøñãÙÜâäääçääâÕ¾ž†v~˜¯¹½µ±´º¾ÆÌÈÅ¿·³°©£Œr]YYgv‘˜œ¡¤œŒ‘¡£ž{\XV^|¥¸Â¾¢‚hdb\Xb†¹ÆÁÀ¸¬»Ëн’oe’¾ÖÝÜ⦣ ——•˜˜Žš›Ÿ ¨¥Ÿ„“ ž›—’Š¡³·»°‡_ez†‰ŒŽŽ`Waw‹’‚\_x}…Š“‘„ŠŒ–‘–‘Ž’’Š…y]H;11& -  -(.DN]kƒ“|s‰ƒjC! -'8G[^WUV]TUce^LORX[fhh’’†‹‘š££ž˜‹•›•Œ‹ˆc[  8 )Sph^TYgjsrqo{‚‚Œƒxncehfi|rmoqieZfeWQTTNKPSZb\c\TY[l|{x~‹’Šuhbjvƒ“•“•’—–‘ˆŠ‚4! -    -  -  -   -     -      "! " MJ:#&!! !%&         - -       -  - - -     ,:?FC;+$#! " !! !!"' !!#"#$#-'('#!! $ "$%)*0-% ! $$%'#$#))*/--+0-,324+("%$, -   (Pjlhhjn‰–‘|g`YU^dh~›°µ··¬œ£¹Å¾¿¿¼¸¥–”¤·ÀÁ¿¿¾¸³¥‘†‡‘–Š“£«´ºÁÄž²¡‘¨®ŸŽƒ{tmt‡—…› Ÿš˜šœš—˜•–¥ª¨™‰ˆ›—š›œœ›ŸŸ ©Ìçéײ—Œ‡y]JPXY^achw„l`UP[sŽ–™§³¿ÂÃÇÀ´ ‹˜¤²¹·­—†Žž®·¾·±§Ÿ«¸ÁÄÇÆËÐ×ÙÙÛÚÙÑ¿¤€^NA;92/4>HV\[X`gorngbd^YW^|œµ¿ÅÒÙäðòé«V8)()0K†ÖèÛµ’}~}{x}‚€ƒˆŠˆŽ•—“—œÅìöúüüüùðà×ÝâäãäæãäãÖ¿Ÿxo~¨¸»½½ÀÄËÏÓÐǾ´­¬¬£w^Y\er„‰“™ž©ž‰•¨®¤}]ST[z¥ºÂ½¥‰qb[[VaˆºÉÃÁº­ºËкjgºÓÛÙ˵§¤¥¡¡¢œ›š’”™›œ£££œ•Š› ›šŸ££¦«·º¹·«~W\r„‰Ž’‚`H^v‡u`cs‚‚ŠŽ–’…‘’”•••—‘‘“‘‡z]K?45/  - ! ,?LTe}’‹ut††kE% -  4GX`TPX[WZ_f^NOW\Yihmˆš•†Œ“œ¢¤¢˜†“›–„eB  -  +Sfea\jv€†„tv}}vrnibXPINNM[cc^\WQTTQNEFJHJLKQ\cmYNR[jzzx{~‡‹ŽveiipƒŽ”•–›š‘’d@! -A -   -      -         -  ! ! JJ7&#'   $ #$&             -  - -    - - -   - -   )9@CB@-##"! "!&$'$ ##"("$%" !#! "!%'..##())%#''% " %'+,-/1044460&##  -.Sfjegms‰–vk\WPZbi{®¸¹¶¬š§¿ÆƼ¾¿½¹¦‘Œ£¹ÀÃÁľ¾¸­—†ƒ“¢—†Ž–¤£ª´·½Â¼ªª±£}qqwŠ”Œ‚Œ›Ÿž™œšž–’˜”’“¥ªª ŽŠ–˜Ÿš›™˜¡ŸŸš ·ÛìíÞÀ¯¬«›_SR[^ch`htyhYMOeƒ”¡§´¼ÂÆÆ¿¸¬ ›ž¡©³­¤†Šš¬¸¾¹³¨§¸¾ÃÆÆËÐÖØ×ÙÙØÑ¿¢|fR?:0(-5;GQZWLMLJIWSRSQLPZyœ¹¾ÉÓÙæñôì³[=,(30IÓéÞÁ¢””’‘–ž¡£Ÿœž  £¥¥¦®¬¦©¹ÞõúüüüüùòãØÜâãääâáçâϹ™}o{Œ´½¼ÀÆÇËÑÒÐĽ³­¬«¤Žyc\\ar…‡‘–¡¥ŸŽ„–¨®¦ƒaOQ_x¢¸ÄÁ¤†pa`^^_…»ÊÇ»­¹ÈνŽhh¹ÑÚØͲ¤§¢ ¢£›œœ˜“˜˜š›¦Ÿ ž’ŽŒ“¤ Ÿª´¸µº¼º¸²rQSi†‚Š‘‘‘ƒ`H\w‹~b_n‰‹‹’’Œ”‘–š’‘‹ŒŒ‘“’‹wbK><0' - -%:ITh|†op‡l=$ 0J]aXU\Z[R\e_NMRS]krq…’……’œ¢£ ’ƒ}Š“™“‘‘‹ƒh5 -  /Qgfa`rz}~€lnrqlh^[VGE-*+2U—ÖêåÔÏÍÌËÎÑÑÔ×ÔÕÕÔÔÔ×ÖØÜÚÙÙÝáòùüüüüüúóäÚßããäãáãäÞÏ´“{sr‰—¯¹¼ÁÂÆÍÓÑÌƼ·®­ª¤vdYW^n…‹—¡¤žŽŠ”ª®¤‰[RRTo ¶À»¥…fbec[Yz¸ÉÀ¹²¶Å̽‘sg¼ÔÙÚϳ¤§œ–œ¢™¡œ”•–¡ ¢¢ Ÿ““œ§®¯°¶¹¼º¹´¯¤™ˆgQYm~}‡“‘’ŠkSZxŠ‘†hZq…‰†“”—††•’™–•‘ŠŽ’‘‹yaJD72# -  (:LYj‚‚osŒŽn># - - -!4G]_VOVZ\T^beRUZU^ksrˆ™‘‡†“Ÿ  ”‰‰•’‘…f; -  'Lbb_bosrvnhhie`]`YOE?=@B?AOWMSMGHJNJEIKNZMU[[^hbc_\k}~oy|~†tflil€—˜š”˜’“ŽvG(    - - -     - - -  -  - - - - -   - - -  - -    -  - -    -  -  ' KI5 0$"""!! $.    " -    -   -   * -  - -   -     ';DKF6,##%  +"""#)^0 " %!%!"!!&#$#%" &(#!!!(!$$0% ')%)*1-9733--,#   0ZpynijmŠœyjb\[cio€›°··µ§›¦¼ÅÅÁÀÁ½¾¹¯™–¬¾ÁÄÇÃÃÀ¾µ¡‹’›’€Žž¢¦¤¤¨¥¥«­¨ª°³§’…{ttwœ’‰˜ ¡›œž”“˜‘•¢­¸¹ Ž’›˜—™—”ž£¥žŸºãðòèáèîìຂ`WT\kgehlje_[_UeŒŸ«¦¦³¼ÃÈÄ¿´¯®©¤£«²¨™„‰ŒŽ›±¶¯¨¥¬¹ÁÅÇÇÌÏÓÖ×ÙÙÙ̼¦ƒ^MD8-*,+6AZe^`]WPQZdcg`U\cz°¼ÊÓÛéôóð¸f>/#*9|¾Úéêéîòòóññóôõõõôöõööö÷õ÷õøø÷ùüüüüüüùñãÙÝàããâãâáÝϲ”|pmƒ™±¹½¾ÀÇÐÔÐÍÅ¿·²¬¨Ÿsa[\dk‚Ž—¤ŸŽˆ–®´­’cQHRiž¶¿½§jdb_[YyµÉÂÀ¸­¸Æν”rh¼ÓÜÝж¥¥œ™™¢ šš™’‘ž¢§£›š•˜¥°º¶»À½»µ­›”Œ†w[FRk~Š“’ŠjTYs‰”ƒe_t„……Œš—Ž‹Ž’”˜™•’’‘‘‰‘”‹wdNI:4-  - -  -!%3DKU\xƒmn†ƒqG#  6QW^\YUYWV^kgSLPW`jnoˆž–‚’Ÿ¢¡ž“ƒ|Š‹‘ˆ‰xiG1 -  -Qcde^ieeib\\dbYaWPNA=@>;˜ÑÜæëñ÷ùùúùúüûûûúùúúûûûüûûüûûüúüûüüüûøîß×ÝâââããäâÜ˱’ukmž±»¾¿ÇÍÍÒÒÐÈŽ¸¶«¡’|`ZY]k‹‘“™žœ‹•°»µ”hTOXn™µ¾¸¢Šwge\^c{³ÆÃó§µÈ̼–rj‹ºÔÙÜÏ´¤Ÿžœ—¢£ž›—’‘‘š¤¦££œ¨¯¶¿Á¿Ä½±¨Ÿ“‹ƒ}qoZFKm|•’Ž”ŒlMZrŠ‘|c^n†‰‡™˜ŒŽ’‘•”—˜Ž‘ygOIA9& - -  -(@LP\uŒ|mn{‚nM# - 'H``^ZYS^Z[hfXOQ^eknz’‘v—œœ ¡€o†‰ŽŽˆ‚p@  - - 1L[XVRS]_a`V_]]]^RDHI:>??CFLIILDEKMKSNNVNVXXPV^_c`VS]t~uz€|„Œylmnny‹”™“‘’“”‰y`E#    - -     - - -   - - -       - -  -  -   -    -   " I@4+&"&"!%"!!%0&%              # -   - -   -      -  - #5EEE8+%0) &! &$#%"##!"#%! ##''(&#&#   !" #$'&-#)!+++**46455310%%"     -Oitworw’˜‹wcZXYbox†œ°¼»´¦›¨¸¿Á½¿»¯’”©¾ÄÈÇÆÄÁÁ¼©“”£’˜¥§®«®±¯­¬«¦¨¬°­ ˜•ˆ…‘š’‹˜«£›œ—›˜•™˜’Œ‘¡¨³½ª”–™›››šš™£§¡œ›´ßðòéåëòðåÂiYPZcckqx~q\Z`_o•«³¬©·ÁÃÈÆ¿µ°®©¢¨¯³°¨¦¤­®ª§­·¹µ¦ ¬µ¹½ÁÅÇÎÓÕ×ÖØÕ˹š|\N?4/*-/3H^gjmqrrpkrpkghbi}™²¾ÈÑØäñôî²c:0++B•ÒÛãêòúúúûûýüúüüüüúüüýüüýüüüüûüýüüýýû÷îÝ×ÚßãââãäâÚÉ°liwŸ´¼¼ÄÇÌÎÒÔÑËÈ»¹¬ ’v_^\Ym}Œ•’™œš‰Š™®¿¹—aUT`u›¶»·¦ˆnb__X^}³ÆÃÀµ¦°Å;•ne†¶ÑØÛͯ¢¢› ¦¤œœš–Ž•¥©¦¬«¯µ½ÃÆý»©š‹‚xyvqgdPDEf€ˆŒ’’”ŽrSZq‰ƒ_Xl}‚Ž”›–‹ˆ’‘”––”–Ž‘‘‘’Œk[P@7)  -  -  $COM`wƒnj}…tL*  '3%""$% )% ')*#!"!"!!       -         % -   - - -   -  -  -    - - -  -&5DGD:0"&$ %'!! '$% # "%$%#""$$"%"&& # "!%+)&)#! &%,/02.0512+&$ - 2    +Lkpzvty”Ÿ‘bUWYgkrŒ¯¶¹¶©–§»ÀÃÂÁÀ½¿º¬——©ÀÂÂÆÄÆÅ»¢‰•ž•…™¦««®°µ³±ª¨¬ª©«¯«¯°¥‘•œ™¥¦Ÿ›››Ÿš•—œ–Ž¡¨¬¶¤’•™œ™š›§¨¤—”µßîðéåíòðçÉd\U[cbcps~se``[m“«´«ª·¾Äɼ±¬¯­¥ª³³µ±±²´´´±µ¼º´¢«·¶ºÀÁÈÎÖ×ÕÖ×Óʺ cSB7/%003I`rtv€„~rs{pjdgr‚–¶¿ÇÏØäòôí±Z=3%,:}½Òåèíõúüüûüüûýüûüüüüýþýýüüüþýýüýüüüû÷ìßÕÜàãääãàâÚÉ°Œnjt…œ±ºÁÆÊËÌÏÏÌËÈþº®£’x^TS\mzŽ“”™£œŒ‹œ°¼·–fXP]p˜´»¹¦‚ie`ZU\u±ÇÂÁ¹©±ÄΕuh‚µÑÙÚ̬œ›™š¢¦¤›”™š§¨¶º¼¹¹ÀÁø°¡–~ibe\ada_LFJcy‡‹“”ŠuVXr„‰g^m}…Ž•™‘‘”—“•˜–‘’–“–’’‘Š„iZR@4( - -   'BNPet‰~hh€†nF& *@Sh^QV]XVXefWPT_^fov‹„tˆ‹’¡¡œ”‹r~‹Ž‘Œ‡‡uK# (()=JHCBMVbad[\`\[WVVPH?A:4+%.&' $#!!!!## %"!$& '&($%#!"&# #"%   #"###$# "'*+&$&664032,,,)    )Lfmw~€”Ž|iaa`aotŠ­º¼²¡•§¹½¾»¿ÂÀ¼¹ªš›³ÀÂÆÉÉÈÉǽ¦‘„”„Š—¥©¬¯®±´¯ªª­³°®±³½ÇÀ¬ž¡š£²±¦ Ÿ žž™”Ž“›£««¨Ÿ–•™ š˜˜—šŸ¦£ž ³ÙîîáÚèñîâÀŽj^WRX]bgxˆ~de]Zm’¦¯­¬ºÂÃÇȾ³­­©Ÿ¢°¶º¼½ÀÀ¼·´´º¶«¨£«²»½ÅÈËÍÕÕÖØØÔʺžy]J@B401)/9Sp‡–—”–””™’…ylgl{›µÀÆÌÔäñòí·`6')%.;RœÒÜØéõúüüüûúûûüüüüýýýüýüüüýýüüýüüüú÷ìß×ÛááãäãàáÝ̱“wjp€´½¿ÈËÎÐÕÐÏÏËÊÇÆ»©–gc]]fx‡–™¢›‰ˆ–­½ºšm``]l•¶¼º¦†p\SSZ]s±Æý¸¬³ÇÍšscƒ³Ï××ʯ£¦žš—ž™œ›¦³»ÂÂÂÁ¿Â»±¦”Š‹…|m[VUSZYT[[GJgz†‘“ŠtWYl…‘f_nˆ‰’™–Œ™˜–™—•“‘’–•‘‘“–‡l`TI<. - - ,HX`^rŠ€jl|‹uL)  ,@W_UAN\ZT\ei]Q[^[flp€Œ|~•›Ÿž•o{‹Š‚uxZ( - *BL@?AHS]`a[Y][`_d_VMMD>MKCI@BEOU\UTTVLIGOWTNZ[\cf`WUr|vrwz|xvffgbsŽ‹‰‡}{~yiM% -     - - - - -  -    - -  -  - -  -  - -    - -       " H=0""" "'#"" !  -(  W %'..1/2-'( "")*!   -      - - - - - - - -   %7/+018VvŒšžž˜•™–ˆ{oeo…›³¼ÄËÑáïóì·_4&&%%,?z«¶Âäôúûüûøóóøüüýýýýýýýüüüýüüýýüüûúöíß×ÚàáãåäàâÜÍ°”xkqœ°ºÃÈÍÍÍÓÌÏÑÎÏËÉ¿®„h_Z[buŽ“™Ÿ™‰…•­º¶—ll„ƒšµ¼¼¥‚i\WYYYu­Æ¾¹ª³ÆЙud…¶Ð××ɱ¥¦¡›£ ™œ¤²ÀÂÂÀ¼»·­ “Œuv†vcUT[Z[\`_]HFdy†‡’’‘’‰jS`nƒ‰‚e[h~…Š“—”‹‘—”™™—•“““••‘‘‹phVJA+  "CS\`s†zkn}qT' - - '?UYVLR[VVVdi_Y]]bgow—Ž}{Œ–˜›ž—ƒqz‹ˆˆ‰……ƒyN, - - #@NE?>HPVa]_ZbW]\df\VKHBLCIFCLJJUV\UZSLIJPUPJNX^`^WNOl~|uuu{}{qedbawŠ‘‰„†ƒƒ{~}lH+  - - -  - -  - -  - -  - - - - - - -    -  -       -E<.!#$""!" '! $      &@WeioquqfP:$  $(36;=7'    - -  - -    - - - -       - )6AG>3,))%" #!## ""'#)&$!!#!& &&&&%%!!$+%"!!  !$&%"%'#$,-' "'.2/4;5/-("#  -  ,Rjtx€„‰— “{a^a_ejm„™­··¯  ²º½½»»½¿µ¤˜›³ÄÇÇÇÊÌÈŶœ†ƒš‘}‹™§®¬­°¶´´±°¯¯±±³¸ÁÌ颰¤¢¶ÁÈÇø¯¡œ˜––Ž“¢ª¦£¥˜™—˜›œ—––ž¤ ›™°ØìíßØæíìà¿‹cZX[^fgp‰—Œn`__l–¯²­®¶¿ÂÇƼ¬«®©¥ ª»ÁÃÅÈÊÊÉÆȺ²ª¤©´ÀÂÂÃÊÍÔ×ØÕ×Õʶ|\PB83.+&,9ZpŒ–˜œ’””„rkl€›´¼Á¿ÄÜîðë´^1+$#$(1Okƒ§ÝñøúùúóéæðùýüýýýþüýüüüüüüûûûûùùôëÞÖØÜãâãäâãÞÓ¶”~nq|›°»ÄÊÉÇÌÍÍÍÐÑÐÍÌÀµ¥ˆnYWYey’”–ž•‘‡”­¸µ—io…„‡›²º·£g_W_[Wr®ÆÄ¿µ¨±ÇÍÁ wd‚´ÍÙÚË®ž ›ž£¤ž¡ª·º¿¾¾¹±ª ‹{zvsoyŠx^VTYTY^ddY?DbqwŠ’˜ŽlUWp‡Š{b`j|‡Š‰‘’ŒŠ–˜•š’——•’’‘’xzVLE0  "APU]m‚vfmx|rX< -4>KTSMUXVU[`fYVVW^dn}š•y|‹š›™‹vxˆ„‹“‘zU+  - - "3EHD=HNIU^XX^ZZ]]``PJH?RWaqvleyƒyY6 - -%ATXYHPYUMTcd`URX^in|—‘y‘™› ™‰wx…†‘™œ˜uZ/ - ,/HLG=HLQSW\QR^X]cdd]H<>>7=?GCFKOVRW]HJMSWOOLSLJUVNALjvvqtuqotq_PVfj„†‰‹|{†~xnL+ - -      -     - - -  -     1    -     ! D<,! !!#"*!!      !Gf‚’•˜™—”‰rX8& %84:A=?85%4  -  - - -  #   - - -  -   - - -  - - - -L9?F<)%,//("), " !" !$"# !$!" !" $%)%"%&''''" !"!# $!!!!&(##&"" &%01751-()( !    - -0Nkv€ˆˆŽžra^\^bgp‹Ÿ±·µ¯ ¡´¾ÁÁ¹À½ºµ¥œ¶ÃÆÆÈÆÉÇÀ¯™†€‘„’¢ª®¯²·¸¸º¸³¶·±­¬¶ÄÌžŠ°À¬’–¯¸½ÂÇÉÊĵªž“˜¡ŸŸ¡¢œ˜˜••š™•™£§ šš¸âððçäïóïæÆ‘lYNS`deo‰—ŒnbaYq–¯¸®«ºÀÆÅÀ»®­¯¨£¨°¸À¿ÀÃÅÇÉÆÆ¿»¯¨¤«¹»ÄÄÁÇÏÔÖÖ×ÔÓʵ‚gYHA0(10.A[o‹—–‹Œ‰‡Š‚}sy„—µ½»¹ÂÜïïè¬Y:-##$,2;H{¾æðñòòîììðôùüüüýýýýýüþûüýýüûüüû÷ïßÖÛáâãäââââÖÀžthksŒœ§«¯°¯®³²·¹··³­ªŸŠq]TX\f{“˜’”™’‡„‘ «¤’igYYf‹²¸·¢‹x`^a[\kªÅÁ¼³§®ÂÉÀ˜vj‡¯Ì××ɶ·¸³¨ªµ»¼¼¼½»º³¨œ˜”ˆ„€|ps€‡€i[a\ZVZ_bZBE[p~‚“•qSTh€‹ƒfZf|…ƒŽ–“‰‹“—˜——ŽŒ–“”“–˜–‘ƒhXBC1  -  -!AXX\h‚sgow‚~^5  !:V[[INOTQT\l^VS\[fr|Œ–Žtw‹“™™”wrŽššž˜‹xZ/   - ":BD@;CNQ[ZYZQ^^bcjcVJBA>>=CB=GIHOUUSKKMURMPLGILOJ@>Kbrvtqmsrnpb\V_e|Œ†…ƒ}}‡wqQ. -  - - -       - - - - -  - -    - -        #%*AE8*"  ! %# ! "     Dj†”›—›š’tY<')2/98D951-"/         - -   - -  0:EC9*!)-'$!# &)"&! '$)#!"#!(&" '# #! !&#$%$$!#!#$$$%&!(!##*"%$!! &+077203-.%  -  -/Mkt…¢¡s`[ZZbgo‡ž¬µ²® £´»ÂÁ¾À¼º·£•š¶ÃÆÆÈÈÈÇÀ°—‰‡”w¢©ª¯³´´¸º¸·¶µ²®­·ÄÎÞ“ºÈ±Œ˜±º¼¿ÀÂÃÉÈıŸ ž™œš˜›•—šš——¨¨¥›œ¿åññèæïôòèÈiWQP_cal•‹hd`Xo–®´±®ºÀÃÂÀ¸«ªª¨£ ±·¼½ÃÂÂÆÇËÉÀ»¶£¡ª¶¿ÁÁÂÇÍÒÔÖ×ÖÕƵ›{fRC;7+,..>UrŠ˜’Ž‡†††ˆŠ€ƒz†™²ºº¹Èãíìà£T3(!%&+01Gq¿èðóñðíìîòöüüýüþýýýýýýüýýýýüüüúùðâÔÚáâããáââàÖ¾ž{hhp”œ £§¥¡¨ª¬°«¬¨§¡•€mZ\YTc}‘“’–›‘‡‚Ÿ¡ h^ZMa‹ª¸¶Ÿƒla]WZ\jªÄÀ¹´¥¬ÁË¿œ{g€¬ÌÖÖÊ¿ÄÉÀµºÂÁ½»µ°´¸³ªž˜•‹‰‰ƒ}uty†vj_^ZQTZae\GKdp~†‹‘Ž“uRMl|‡h]e{‚€’‘‡ˆ‘•˜˜š”’–˜™•˜š–‘Ž€lWFE8!   #7[][k…xbm~Š‰i; - !6QYRKKQZY\bjbSQX^j}‡‘˜‡t}’’““‘Šz€…—šš•ˆ|^0    ?B><=>KPW]RW]\^fdklWBA@?>?A>N`=GHNUNJIKPYSRUNJ?JH<8?dttlfcgmhi[W^Zdx†ƒ„ƒ‚ƒ~hN9   - - -   -      - - -  -    -         @6' "!## !$ "(#$!"    -!Bk…’’™™—”‹rT6%%8535S:<3)#   -  - - -    - -  - -  -   ,BIC2-%#(%$# $"$#"!"!!&)"  $ "#"! #""&*"('&#$"!!  %""%& "#%$"&&   &057401.*$#  *Oeu}‹Ÿ¡‘yd_Z]cdn†œ­³¯¬œ’§·¼ÁÂÂÀ½½µ¢’š¶ÂÆÆÇÆÆƾ«’ƒ€‚‘s¡©¨°³¶¸¼¹¶¶µ·³°³µÁÏß–¿Ï¸‘–¯»Áľ¼º¼ÃÇÀ°¦žŸ•’•™š˜œœšž¬© ›ŸÄèòóêèïóòèÆl]RS^bbl~’…lg\]l—­¶±«µ¾ÂÁ¿¶¬¨ª«£¡¬·¹¼ÁÁÁÆÇÆƺµ£ ©¶¾¿ÅÆÆËÑÑÔÕÕÔÆ´šv`J?@7,+.,>Xr““„|€‡Ž‰……„z„›¯¹¼ºÅÛæáÏŠ?0"!$"()./=sÉéñóðîëéíóùüüýýýýüýýþýýýüýýûüüù÷íßÕØÞãáãââãÞÖ¿žzhdvŒ¡§®±²­¯¶¶¹¼º¼¶³²£‘z]VSTj”™…„’¢­§ŽfRPTf‚¦²²Ÿƒj^[U\_q©Ä½³¢ª¿ÊÁzkx©ÈÒÕÎÉÈÅÄÀ½¼½º¯Ÿ¢³¼¶§š””‰…~}|pyŠyifXTTYU]cY@Ibny†Š“Ž’}UQj€„†k[jy†„†“’‰‡Ž•—’˜›ž ™“œ›–“gLCC8#   - 8Teim}ck‚k6'9IXRFIXXQP_hdVSQdmƒ…Ž”„k~’””‡Š~‰’’™˜ŠwX+ - (9CBA::KXY\UVXZalpjkeOC<;?@BC:DJJDHLFPJGLQSKNQB>4<90/NnriedkifaX@HR^oy…zvxy‚}yjQ+" -  -      - -   -   -   - -     3 - -    -    ( !$H7)" !%"## "    #(@g€‘’—›™‹y^=*% "&38<7434)#      -     - - -   - -     -/FKE8),'A? #&$"""!#" " " %# !#"$"#+**&#!% "%$" #!!##"# !$+61215/,-% -  -  - -1Tlss{„œŸŽzea]]feo‡±¶´¨šŠ¥»½Ã¿ÅÃÿ¹ µÁÃÃÁÂÂþª’‚{„‹or¢«¶º½¼¸·¸¹¹¶±²¸ÅГ¿Ñ¹—´½ÂÄÀ»³²°µ¸´­°²±±«ž™››˜•™ž§§¡œ ÂçñóêéðôðçÆŽe]TWW[`fyˆ|f^UZl‘¨´¬¯º¿ÃÁ¾³¥¥«« §®²´´¶·´¹¼º¹¶®¥¢¨´½ÃËËËËÒÕÕÖÖÔƳ”yaVK6/0.,2=Zzšª©ž–ƒ€‡‹‘ œ ´¸µ°¸ÊË»ŸU8,' #&(,}Îíô÷òîëêîóùüýûýýýýýþýüýýýüüüüû÷ïàÏÐÖÚßàâàààÝÔ¼ž~kbn‚˜§³¸½¿ÀÁÃÄÇÈÄ¿»½¸©nZ^ZhxŽ””˜–’ƒ‡—­¶´–eYRQb„¥³«–~k[d^\Zr¨ÁÀ¸²¤¨½Ë½˜ufw¤ÆÔÖÊ»³«§œ”Š‡ƒ‚€“§·³§œ•’}womx‚o_LKSRORZaePE[tˆŽŽ”•zNUiz~f]f|††—šŠ…Ž”˜™œœž¢œœ™š—›‰pVB9=&  -  !>\c^rstil†‰kI# 5JWRKEIPWUal^TSW^iuvˆ“„ryˆ“Œ‰vŠŽŠ‰ulSB*  "/8OK;=FNCGIPW[`igdc_OFCA?J@7:@EYl„ƒzsyxrpW5   -       -            &&" " "G7, "" %-  !#" 'HnŒ–šŸ¡ž˜“|aA)$29:@?F950  - -   - - - - -      &  0EIC6"%'-)"#'% !$&* $! +()& !" "# #"#%(&#5E)$%# $,$!"" $%'$)2-/0/01)('%'&!  -  - 7Xlsty}€‚…~p_\^giiuŽŸ¬°¯§•Ž§¼¾ÀÁÃÅÄ¿¸¡‘š³Àþ½À¿·¥ŽzwŠ—‰hRRn¡®µº¼¸¶»»¶³¯«¸ÉÑÁ’¾Ë¹”œ¸¿ÈÉþ¹¶¹½À¹©˜Œ–¬ÄËÊÀµ¨œž™£§¦™š¼äððæåðôð㼃]\RXbcaiy…sghb\m“«³©ªµ¿Â¿¶¬§ª¦Ÿžž¤£ž¢¡£¨¨¨««§¡¥§³½ÆÒÔÐÑÓÔ×ÕÕÐÈ´•{aQG?52/,3;Sr–¨¦•„tmnqjv˜Ÿš£²¶µ¯¬±­ W7/"'$(*,:€Òîö÷óñìéðõúûýüüþýýüýýýýþüþýüûûõéØËÍØÛßßÜÞÞàßÔ¾™yjfny”¢ª²¹¾½ÀÁÀÁÁÁ¾¿»²¤m\^Vi”’•’‡Œ—­¸·šjOSPV‡©·²—zdVc_YZh£Âù³¢§ºÅ¼—sd|£ÆÔÖË° “‹‚{€zxz~“¤°°¦›•‡y{‚vst}ƒrZNPUXRZWdbQI]u€ˆ‘xUUht†jahu„‰‘•–Žˆ‰’•™œœ›žœ–™š—™œ‰n^H?8) -  5Xh\huofh„‹nE! #5BNULHGNOT\gfYRa]itx†’‰u}’š¡•“Žˆw€†‡|yldTA' -   0;I?@??;<56*   -   - - -   - - .DHD4#$&*&% "(!$#!+$!)"!"# ""  " %""#" #" !#! !%$"/@*!+*/-()$'""$ #"$,.+*/&+.,)#!!  -  - 1Xpwtyz|€qid^_^cjmm‰«®®£•‘©»½ÂÁÁÅ¿µ ’µÀÂÁ¿¾¾¾¸§‘z…’ŠdG;O€¥¯´¸º·¶¶¶·²°¬·ÉÖß•»Ê±Š™´¾ÆÈÇþº½ÂƶŸ’£¹ÏÔÕÑÌõ°ª¥ª®«œ¹âïïæåíòîá¼…dZMR[dghr‚uehbYi‘©¯ªª´¿ÂÂÁ¶¥¥¯©¢ £§¦¥¡ ¤¨¨ª¨ª©¨£ ©²¾ÇÔÖÔÒÓÖ×ÖÔÐŶ™{]LC;2+,$/>Zlvˆ‘‡€€€ƒ|y~‡ŠŒ›´¹¸±«±­¥”W5) ! $,0@yÐïõøôðëìñ÷úüüþüþýýþýüýýýüþþüüúóæÕÌÐÕÛÝàÞÞßßÞÔ½˜zlhi{˜£©®´½ÀÂÁ¾¿¿ÄÆÁº¯ž‹mVQUhs‰Œ‰““Œ‡’¤´²—fPMT]„¤µ´›ƒl^_ZZZiÂÀ·°£¤·Å½œwd~¥ÂÓÖƦŽƒvrortqt}’ ©ª¦—Œ†ƒz‚twu‚sZURQ[\`hleOI]uzƒŽŽzVMgŠgYb{ˆŒ””‡“š˜˜šœ™œ™œ™™™™™ƒlXI?6(  2Ze_gsn`k†˜—pC"  7HOWTMFMUV]kd[Z^it{{•u’˜›ŒŠ€xx|{tpk`aTC% - (;DE<=AE;;IFTV_bfdeb\F:6@@@@?:=EDKNNMJNXUSRQLG:44@2(>Ypj\]a^aeYNPSS^n„{xyyyrlY3  -   -    -         -   - -  -   "" "=;-"! ## "#!##Br“™ž ¡Ÿ›xaE7,#+5BC=>:/*!!<'(*&#&"    -  -   -   5DHE5,&''$#""% %%% ""#!"% ! &$#"!! # %"!# $# #&)'&$!""(*)'*-(&*)   -   3Tqx{‚ˆ…sng]\]^`ci†›©¯¬¦’‹§»¿ÀÁÂÅƾ²¡”Ÿµº¿¾¼À¿º³£Ž~}…“ˆ^C8H~£®µ·¹µ¶²µ¹¶±ª´ÌÙÉ¥–ºÌ¯Š—¯»ÄÇÇÅ¿»¼ÃÊƹ¤œ³ÊÝßÜÑÌÇÄÁĵ«¬©ž·Ûîíääìñì߸…m[MJU]afu…zieg]eŒ¤®ª­¶¾Âöª©®¥¤­¬³µ³²³¸·¶¸´µ·µ¯¤¨²¾ÇÕÕÓÒÑÔÕÙÕÑǵz^YB:41+$,DVcchq‚‚‡Šˆ‡ˆ‚„Œ’™²¶¶¯®»¼´ž]4'"%+.@{Ììôùöñíìð÷úüüýýýþüýýýýýüýüýüüùñçÙÐÎÕÛÞààÜÝÞÞÖ½›yghp‚–ž¡©­´»½·¶¹½¿À½º²šˆkXT^hzŒˆˆŒ‘Ž„ˆŸ°©dVRY`~¥¶³†o^^\XThžÁÀ¸´§§ºÅ½|fx§ÅÖÕÅ£‰€uphkrlw“š¢¦£–ˆ€ˆ}‚…|{s|~saMSX_^gllgKBZs‚“’“•b[dx„~fV`q‡‰‘•“–ŸŸ—––—•›š’Ž“••€gNC?4  - 2Xa^brohw‹˜˜sH 2ELTRRULKafgc[bkwƒ‚‘’Œu{‰‚ƒzppstrj^_b`P?$ - -:FMA?AB>;EGFO`hlmkd[K<:<>8@=;8;COILINOSTY\ORJ?;74**8XnkZ]\Z``d[OSW_hz€tuxqsmb[>% - - -   - -  -   -  - -  -        -       ! $?1'#"&# "+$Ew’žŸŸ¦£ž“dM=/*!!!%%2;@ABA:1# +)/3;=7605-%  -      -  - -        5CMJ70*'*% $"%!)(#  $"&  ""!!"!""&#!!  ##  -&*#)13.(')%   - -   - 4Zlq}…„‡Šnf[YW^cfp‡œ¦©ª¢•ˆ¢¶»½¼ÁÄþµ ”›°½¿½º¼»º±¡{†’‡^A6/.+,|ÍìôøööñóõúùûûûýýýýüýýýýüýûüüüøïçÖËÉÔÜÝàßßÞàÞ×¾›zgaqˆ“ŸŸ ¤«­°°­±´¶¹º¶­•fWWagxˆŽ‘“‘~€š¦£‹aOJ^d…¢±³ ‡maXY\[e¾Á¾³ §¼Å¾žjy¨ÅÖ×ƨuohccgpƒ‘Ÿ©¨‘†…„~ƒ}~x€‚{eTW`a_hjifND]s€‚‰“”‘f\av‚ƒgUcq†Š‘˜©­¯ª”•—™›™’”‹u[J<5'  - ,Wb]`nsix‹’ŒkD" -+HMRYLHQGr\fg]js„~ˆ’Š†~|{wwynfffaYNPb]SE)  #3AOGB>AA;>EBBETchnkeWJA=7=8?>C>BCHILKLLMNR[\[LF@91-+Ccnb\YRVZbeXKISZhwwwlrkkldM5  -   - - - -     -  -       -  -      ! =/# )!%! !-("!!!"&#"!#Eq‘›šŸ¥¢Ÿ‘~i[C@<;84/./.2=>@BA=9/' $$ -,9=@FG=:>=5( -  - -    %  0AHF8,,('"!! &! ! $ ! ' ## ! #""$! !! %%&$),+.)(#! -   -  1Vjqz€‡Œ’†mbZ\Z\bhr‡˜§ª§ž‘‡•©´¶¸½¿½½·£’•¯½¾½¼»¸¸³žŠ{z„•…\@BcŒ¢ª°¸¹µµ¹»´µ­«µÏÛÏ«–µÅ©•°»ÄÇÊÇÁ¼¿ÃÈIJ¤©¼ÓæêçÛʺ®®ºÄý¹¬£¶ÚëëÞßìñíܶa[XMRZWdu…ygc]Zg‰Ÿ¨¢«µ¼ÀÄ¿³§¬¬©©®µ»½À»´­²°´µ¸¼¸®¤§´¼ÈÔÖÓÔÖÕÒÔÖÐů˜~cTK@;3-)(9S[Z\^lt‡ŠŠ“›£¢ž ¯³°­­¯³­—\60!( ,4B|ÎîóøùöóõöøúûýüýþýþýýüüýüýýýüüøðåÓÇÌÓÚÝÞÞÞÜÞÞ׿¡~oiuŠšŸŸ¡¡ Ÿ¢¤ªª´¸µ¥‘~gY^_dxŠ’—„~‹’›¡†`OO_c„¦°²ž†h_VabYg–»¿»± ¤ºÆž€k„©Å××Ê©Žzqumjfkuƒ’¢«¥˜‰‰ˆ†€z|„yc_\aeedjihYMas|†Ž‘_U_s…ƒhWet~‰Œ’‘›®¶°£¢–’——–—‘‘“˜t[IB5+  (Rfb`spf‡‰„jA$ - 3FNZ`OFLSY]kf`hzƒ‰€ƒˆ„yoqpnjtmigaWUG=DL[\OD. - $.FNLAB?CBCGS_hnjf[D@<79:@BFFIEHJIJLNQX\Y^]LJ@5430?\ok^QMXW`\SPFOWgqsyulpofdR5 - -   -  - - -     -   - -         "%=4,+ !"! ! ! !$% "($%((#& +Kr’›Ÿ¡§¢”€g_RTSNJIE?A==?DJKNF<81,!.4FU\OF2  !(7EJC=6???ADJIKOKLRY[YUSVNIH;7,&6UnuhYT[`faXHDM[blpnniimd_U7 -   -  - -  - -   -    - -            ! !""@2)! " ##  + !!!%%#$!!" .Nu’Ÿ¡£¦ ž”~jXU]ZTWPNMIE@CJQVYTLH7)#%$-2,(*+$" ! "!!&%"! !$" &+ )+)*&$!"!!   !! #"*'!  - - 3Mdnsyƒ›˜nXRV[eos„—£¨¥›Œ~’ž¤¦¢§ª«¢’›ªµ»¹ººº¶®ž„y{‰“ƒ`HSzž§¬¬°·¶±´¹¹³­­¶ÉÕɤ‘´Â¥“±¿ÃÉÉÈÅÁ¼ÁÇ¿«“µÕæëéÞʳŸž¸×ÜϹ°ÀàíìÞÝíñìÚ®vaRQLWTT\jnpnkh^g†ª¥¨´½À¿º®¤£©§«§¤¥¡˜‘“ŒŠ“£§±±¦§·½ÊÕÖÑÓÔÓÔÔÕÐÁ±”{_VM@317616N`fbhq„Œ‹ƒŒ›Ÿœ Ÿ¬®±¬´ÅǾ£a7,""!"*2A~Ìíóøöôððò÷úûûûýýþüýýüþüýýûüûûøðéÝÒÒÕÚÞààâàÝÞØÄ£}eiwŠŽŒŒ‰€ƒˆˆŒ‹™©¯®¯…g_\Xgx„ŒŽ™–‹…ˆ”–€[PO\_zŸ¯²›h_YWSU^•¼¾¸®¤¥¹ÆÁ£‚{ˆ«Ì×ÚÑ«†tmktkikuŠ’›¤¡‘ˆ‰‹‰‡ˆ„~{}„xgc\^fhbils[FYku|‰”’~XL]p~eV_rŠ‹‹•¦¶¶§›˜™—‘’‘ŽŠucKD9!  - #@Yknpmc^emfT;  #Gdic^WZ^akwlehvrllsiibe`NOTZca^MD:A>DRY`WB9 6=HNK59?@=IE>GS^baid]PF94>=C:4?JGHMXSJVZc]YTRUKF<30'?Wlmh_]\adc[NLNZbhjghafa_`N6  -   -   -  -   - -    -   " !!#=/%! #! #'!"!"$*  $'3Tw˜ž  ž–{dX[\`XWUVNLHEALNPTQQA6$(!#-7>@HKMLE??7(!!!"!   2      $:LNI3'%.0*( !!#")(% # !#"!*+##'""%" " #&"(&#&1%      -/RdqswŒœŸ—}[NMWcpxŒ ©§¥œŠ€”¡£¦¥¢ž¢Ÿˆˆ‘¢°±µ¶¶·³¯Ÿ‰z~…†bPYƒ¡©­«°´·¹·¹¸³²­´ÊÒÆŠ¬¼¢‚“²¾ÁÈÈÈĽ¾ÃÈÁª“´ÕèëèÛȲŸ—¸Úß×ËýÅÞêéßÜìðíܲw^VTISUU`hjhljeah†¤®¨©µ¿À¿º¯¨§§¦«¦£ž—‰‡†‚€ˆŽ˜¡¨¬£ª¶ÂÈÒÓÐÓÑÓÑÑÒÎÀ±”x_SH@:631/;J`ruwyˆŒ‹‰Š˜Ÿœ§«°¬­¶´ª•U5.# ! #-7>~ÌíôöôòîïðõúüýüýýýýýýþþýüüüýüûùòíâÖÓÙÚÝßßàßÞÞ×À¡`euv{ttƒ€vv}}‡—¦¯µ¶£lYX^jyˆ‘Ž•‡‚‡’ž™€`SN]_z­°œ„qb[RNS^“¾Á¹³¢¤¹ÈÁ¥‹€³ÎÛÛΪpomqojpv†š¤§œ”ŒŽŠŠ‹‹†‡ˆ„{cd^ajjjqqs[FWprx‹’”€ZN\oƒ|jWdr}†Š’—¢³¯ ”–•‘“‘ŒŠ‘‘ŒŽ„zlQA2"  - ">Shgmng\`^bP5 -8Tilb^Z_gflumhqvsfbec`NFHFEQU`^]N><>CGSa^XL6 %1=DJH65;=;D?@ILHJE<8+)0#-7JQ[\e^Q=:<9BK]_YN4 -  #(3IPH;49=?HF@BU]^^efZRI@@A>@C?TKELRNUQRda\_Y\SFIG;4.0?[hd_aahb`YNPMJ\bhhdcda]\P1 -      - -     - -    -     #$  # ! !"##9*"$ ! & ! !!"# " "!#"! #"!##&(1Mr”šœžž¡˜d[W[XTWRTOHC@>ADJI915/%!*09?GICEHB?6$!# %  -    -  -  '% $CX:KKILOZ]^^b_aPHA;?GF@;=JLLS[\UPZdcb]ZQLNE;0-3BZieb_bdaa^JLQN]ijkfinhdjW<   - - -         -     ( !$!!%" 9)!  ! &"!!%'+)'''!"!$ $ %%!! "#%(6Ps–˜—Ÿ ž–~dWTTQLPKJID?73>@A?;42+#$$58?>@A=<=;0#!" "    - -  -       "9FF?6&*56,%"$%" # #&!$ "%#!$ #$!!! !"%&$"#" -  ##"    4Shhms€‚wlmaXUXact„•¦¬²·µ­·¿ÁÀÁ¼²«ž‹…Œ›¨©¨§£ •ŠyonŽ‡swŠž­­ª¯¯¯®²¸·¶­¬§¬¾Ê½•…¨¶v±»ÄÂÅÅÁ¿ÁÄÆÀ¯••²ÏåèàÔ½ª—•µÕÛÒɼ®°¶ÁÌÌÏ×ÝÛ̬cXOISXXbourikidj†ž¦¢©¶¾À¿¶¬¥§ª£¢™Ž‰‰…‚Š‰Š‹™¤§¢©µ¾ÈÐÏÍÌÑÒÔÕÕÑŲš€bWQE:6/.0=Jdmu|~z€~…‡……qheVDG]~—¡›tO3'  "#.7D~ÌëôöóïîîðõùüýþýýüüýüýýýýýýüüüúõñëÞÓÖÙÜÞââßÝÞÙßkcfw‹Šypf]RUl…š¬¼ÇÌÄ­‚cZZ\l†Ž’“•‘„‚‡‹‹ŠqYUTVd„¦´·©ŽpaZ[VYe“»Ä½¶¥¯ÆÓÔÈÄÄÁ¾½¶­‡tqklnaaemŽ˜Ÿ¦¢—‘‘’Œ‘Ž……~ylglrp|‡{n]GSlz{†‰‹Ž‹uWR_q|l\btƒˆ‘•’}`R`tŠ‘˜••‘•–“—“ˆ{iWH>$ - - - /MZied[\febN9"  2M\YOLT_bejljedf`ea\XH>?>;AW]a__TB?<;EP]c_W=   - #8Tb]PT[\W\]\^eddnfc]VVQFNYWPGCELRU[`a^^aib]WNKJHE7+4IV``XZZada_TLGIYjsuosppll]B# - - -  -  - -  -    $!"+231,-1,& "!! !#&#9*"! !! #!"#!!%"+/-**)+%! !##"!-" "  !++4WuŒ•šš¢ ¡’xcTTTRMNLKDF@;7BFCBE;/%$*.;:=A@ADD@;1' #!  - - -     -*9FA=0++75$ "$"#   (E#"$ ###%%!!!#" ' "!!%+*"##"  -%(,4;-#     :Teeou~…‹sp^WRS[f{šž¤«¯­·¾ÀÃÆÇÄÁ¼³¢¤¯³°­ª¤—‹}tkk{ŠyŸ«ª«¯±®®µµ¸µ®©¨¯¼Å¹‹ª·Ÿ|°ºÄÿÂÂÀÄÇþ®”˜¯ËäèàÑ»¥‘‘²ÒÚÓÇ´›™­À¿ÀÉ̱’vd[QX\^epsnmoqdh‚˜¤Ÿ«ºÀ¾´§¢¥§¢ ˜Ž‰ˆˆ‰†Œ””•˜¡¨¢ª³¼ÈÍÊËÌÑÑÓÕÑÎï›z_UL@9*,+0?Ubouwv~„…„‚uh[SGHVuš¡›ŽT2% "#%4>sÉìòöòïïïñôúüüüýýüüýüýýýýýüüüûúöñêáÕÕÛÞÝÞÜÞàß×Á¡‚jai„•˜’‰}rjf^Xfu£¸ÈÐɵŒfY\ao„”’–“ƒ€ˆ‹‡r]]Z]f…£µ¸©‘wd[Y^_b’¾ÇÁ¼·»ÌÓÑÇÀ¿½¹·²¨œ…}}rsmda_l€–ž¢—‘““Ž––’Œˆ„ziinwx€€€j\JWmw€ˆŠŠŠ‰}[PZnƒ{iYbwz‡•‡iC;Nj”Ÿ¢¡™™š›¢›‹}zcXL?&  +I[begbabg_V<% - ,@FLIFQ_]^bikieddif[SGAEBA>gcbc\SJEACH\nmllL' /?i„wyy…}€vy~{qs„eebcnmc\WPVZdaffffeglph_ZSOMK:.4BK]\Z\`dipeSGCANijttzspuqiJ& - -   -    - - -  -   - %(%$&,/-.($'(!" *58:9;<:35*# !" " !!! !##8*!##" %)! #*&)*,.,+'&$" #"   #" "!$)7Qr‹”˜™  Ÿ’oWOQWRMLHHIECA==@JF=41&!"39?>CCDIE=<4*#&&$" -      - - - - +:G?98"$,*!$""  !"$) #!!"!#$!!!#(    !!$!%&" - - "-/& - -613/ARcorzƒ€‚ˆ†‚ˆ}{l[UMQa‚ž¤˜P5*%%"*7h¿ëôøóññðô÷ùûûûýýýýýýüüýüüüüüûøóñëâÒÑÛÜÞÝÞÝÝÝØáziZe•Žˆƒtkklgbd…š©½ÉÁ­‡e^Y_w‰“““™’ƒˆ‹‘’{]TV^n†©¹¼´f[`[^f—¿ÅÈÆÇÇËÇÀº·»ÀÃÀ¸±¡Šwqieddi}‹›¢œ”’‘™™–‘Œmfnx|ƒ„ƒ…v_IRcvyƒŠ‡ŒŽbM\k~{l]bv‚†‡Ž“{Y90BYpŒœ¨¥££ ¤§§•„vmYJ;,   'GP_`fedhieWA$  4DKKTS]abenlmoklqpi[YTNOPTgkqyvpkggnr€Ž—‘‘s; +W‘¦©§©§ª¥§¤¢ Ÿ˜–•¢‰‹‡‹”—ˆ€z~||‚ƒƒ€{y~~‡€{sfc_VJ89?Whkf]gpzwiO@>CNdnxyysvsqhC'  -  -   -     (+)'#" !"0622:0-140,/!#%/2?:69B;611-"-*" #!"!""$7(!#!"! !%&(*11+.*("!   $%$*2Mnˆ’•˜Ÿ œrUIPZTQOMONEF?;=686./)(&)5:AADHEB@=:5("##,'($ -  '   #?H>6*!$)%!!$%    ! #$" !"# !$"# ! /#!3 " - - -  -  -  -7X\fnry††t_XOPfj‚Ÿ¥®¬©§§¤žœ››¥§¬´º´¦§³¼¾¿½¹³­¢vdhr†{jœ¬­®¯¶³¯¯µµ²°­©§·À´‘‹­¹¡…“­¼ÂÄÄÃÁÁÆÈÅ¿­—œ­ËáãÝζ£˜œ³ÐØÑĪ‰mzœ¸²§––£µ¹´¥œƒzyuˆ‡tilgbg–¦£©´¹¿Àºªª®«¢¤£œ™’‘–©°²®«¨¥ª¦Ÿ¦µ¾ÃÊÆÇÈÎÒÐÐÒÎï™{aZQF?7123?Qalt~…ˆ‹€‡‰‚‡|q`ZUSj…˜¤š…S1*%&!0dÂëóôóòðòóöøùûûýýýýýüýüýýýýüüúøóñêÞÒÓÚÜÞÞÞÞÝÞÖÀwg`fx’ŽŠ„zzzumg~›²¸®š{g\Zav‹”š‘–•…ƒ‹”Ÿš„]SY`jŠ«¼Å¾¥…ifbfeg˜¾ÊËÊÅÁ½¼¹¹¿ÄÄÈû² Œ„€zoljhlpƒ‹š¢ž—’•“‘™™šœ——‰ulcmz…ŒƒeOWdv…‡‹ŽŽ„dT[l}|wigy‚ŠŠ“”zZ9',@=>9,''"$( #!   -  -  - - - -     'W_djl{Œˆƒn]USU`h„ ©²²°®®«¢ š˜™˜˜›Ÿ¨¨¢£°½Á¿Á¿½·¯™fdotpl‚š«®¬²µ¶±®¶²±¬¨¥¨¶¾°‰ªº °»ÁÁÁÁÀÂÆÇÿ®˜œ±ËßáØDZ¢—™²ÒØÎÀ¥‡ktšµ°šƒ~®¾½µ®§›Œ“‘~olggg›§£¦²ºÁÀ¸§¥®¯¤ž¢¢¡›”–˜¢¤¥¨¨§¯­ ¤¶¿ÅÅÇÅÉÌÐÏÒÑÎó•zbWMN?3216CV_jt{‚Œ‹…‚‡…‚ƒ}qg^]Xb‘›˜‹€V2(  !,'0iÄêòõôñîñòöùúýüýüþüüýüüüüûüýúúøöñêÞÕØÚßÞÞÜÝßÝнŸ{fm{}‹’Š‰‹’Œ„z{™¤¬žŠscd``|‘•›–•’Š†˜¦¨’j_[^n¯ÇÌÁ¤ˆkdchgq›ÁÍÊÉÃÂÀ¼ÁÄÈÈÉÆÁÀ·¨‘‹…„upsry†“—ŸŸž™šž ¢¡¨ª¥ ”†~~‡“˜™˜Špdiz†Œ”•–•—winzŠŒ‹„{‘“—–†bN;6Jh§©©®±³¶»Á·ŽpaRF@.   - -$1FOdjiilsnjY= -#Mgsuokotwt|y€‚‡‹Ž‘”–šš˜ ¥±µ»»¾ÃÃÆÄÅÇÉËÍÍÆ°k( (J“ÄÓÖÖÖÕ××ÙÕÓÐÍÉÉÊÆÆÇÈÅÇÊÊÌÍÉÆÃÄÄÈÆÃÀÁÀ¹·¹º¹·²¯©¦›‹{{†‘‡‹–€lVPafhhqvspljpe_F'         -     *)&*'!%,,-//73)" '/17441111,,)!)+(0)&%*+.0155801388851/&"' ##"!$"6*! !#"%# !"&*-.*+0(/-#!"#)"!$"#%2X{šžŸ¤ ŽqYOX[UUUSSPG?1/* $,.,)&"$!"-82323664/#! ''"      &' -     /AK;2-%$-)$$$!"$  !$#"'$$  #"" $$!"#(# ! -  - - - - ?Ucciv‚‰k^ZY[]e‡¥­´²µ¶²«ª¨£¦¢žœ™šœ™–Ÿ­³´¶¶¾À»ªrgo€wmxŸ§²°±³³±°³¶³¨¢¤§²ºªŠ…ªº }Š¯»ÀÀ¿¿ÁÁÄÆż©šŸ±ÇÛÞÕ𣙶Ò×;¨†jr—³±–vl†¬»¿¼¹·¬Ÿž ž˜ŽxnjinŠŸ§¡©´¼¿¾¸¬©®°§£žž¤™‹’œŸ¢£©¨¡¦¶ÀÄÅÂÆÉÎÎÓÓÓÏŲ™€e[TPH?=>=IXdo~‡‡Ž‹ŒŠ‡ŠŠ‚xm`^^bcf~Š‡€T8(&(-gÀêñòñððïòô÷úüüüüüüûüüüüüüûüüú÷óðëàØÙÛâááàãáÜÒÀ§€~‡‘™™——š §¨¬«Ÿ•‰’£«ª}tqsy…“ ŸŸŸ•’›¤®®ž‚rkr†šºÎÍÁ«“†~w€²ÇÎÍÍÍÏÎÎÌÏÓÑÌËÊÉƸ§¢œ™™“˜œž¤§­³²¯®¯°µµ·¸»»º¸·°©¥«««±¶·´«¥ž¡£¥¤§§¦¥¢ “‹“–œ™˜•–—•’‹‡‚pc[[duƒ”›¢©¬¸»°‘ueTB>1 - - - - - - *=FKQKHNLKIB5  !7LIIIIKJMO[TVVV_]_gkiquy§¸“ª­¯¼ÃÇÉËÉÌÏÒÏÐʵo1  .F˜É×ÜÝÝÝßÝÞÞÜÛ×ÖÕÖÔÔÔÔÖÖÚÛÛÛÚÚ×Ö×Ø×ÕÔÐÎÎÊÌËËÈÇÁÀ¼³³¨¢Ÿ§©¤¥¥¢¦¢•ƒb[diqu‰ˆ†…‡tkQ& -     - - -  - !)($#&!),754'$!! *0+,(!#(+'&$$)2&&#%' '()'-/-4(+(')*,+(*-3*" %" " $!"! !#$5%#"!!!%&#! &  $&&*-/-+,.'$!$ # "!  !$-"& ")1Sy™ž¢£Ÿ™ŽqQNU]XRUXSLF=2(%%%$&)  !!"".312-1..'$*% "   -  G    -    - *@EB5/!%**&!  !  ## ## #!" !" "!#$##  -  - - -=U_clu‡ŽŒƒrga`cjqŽ¢°³²µ¸µ°´²°±²®«¨¦¦£¢žž¢ªª¨§­¶´®Ÿ‹~’‘}‚’£¬±´µµµ³±¶¶µ®¨¦©²¼©‹¬º£„“¯¿ÀÄÁ¿ÀÁÄÅƽ¯Ÿ¥µÅØÛÓÅ·«œž·ÒÚÐÁ¬y‚ ·°œƒzŽ­¼¿¿¾¿¸®§¤§¨§œ‹ˆ‚}ƒ™¬®­´½¿ÂÅ»´¯¶¸®«§§§¨Ÿ”“˜œ¡ª¬­«¨®¾ÄÅÈÅÈÌÑÒÕÖÓÒʺ¨–‡|pigld_dht€‹•šœ˜Ÿ ›ž›‘†|zx~ƒƒ}†‘‘–”kH7%"#"-`ºæïñïïïîðó÷úúúüýýüýýüüüüüýüúú÷óñìçáãåçæèèçæäÞÑĺ²±±¸ÀÁ½¹¾ÄÃÇÍÊÁ»¹¸ÀÃÂÀ¸¬§¨¦¯±³¹º½»»º´»ÂÅĺ°ª¨«°»ÌØ×Íź²±®²¹ÂÒÔÖÛ×ÙÛÜÝÛàÞÛÛÛÛÚ×ÔÍÎËËÉÉÊÊËÏÑÑÑÖÓÓÕÕÕ×Ö×ÙÙØØÙÕÖÓÎÌËÈÇÅþµ¯ª¨¡œ–‘ˆ…zvojhgllokibcggXXUNKFHHIGX^ZP_bp‰™˜„qfUE<- - -   $)))*.,/-51" &/,-6502/7A;@85>9=D@;?AJIQ`js|Œ™¢«³µ¶ºº¼º´ž]-  9Š½ÌÔÙÜÛÞÜßÞÜØÕÔÖ×ÕÓÔ×ØÛÚÝÝÞÝÞÞÜÛÜÜÛÜÛÚÕÕÕÓÑÐÍËÄÃÁ½µ®­°±°¯³³´«¤•p[[hzŸ¤¡¢ŸŸžš‹f/       -      . '(.1/&!"" ""#"(-%)*".60+& # ,*" &  !(#)0*,$ #!$" %!!! !  %4& !    !('&-6.,)+(.'& "!!'$"!$##!%$ !*,6St’›Ÿ£¤¡™‰jMGPZZSTTTKE9-$%%)'(!!!!..6<=>;73,$#"'$ %" -     -  -61AEA2)&!),*$6"#!$$#!!!   ""$""%"  - "'# "    :U_elz‡Š‹Š„tpieqp€“¡¬¬¬­¯¯°¶¸µ¸¹···º¹····¸º¹¶°°´·´®©¥¨²±¦¥¬µ¹¼¿¾À½ÀÁ¿¿º¶º½Â¹©¨ºÃ¶¥ª»ÄÊËÍËÊÍÊËÏÉ¿µºÄÐÚÝÙÏÇÀ¹¹ÂÔÜÕË¿¬¢§·Åö©£®¾ÇÍÌÍÊȾ»¹»¿¹²¯¬¥¬¶¿ÄÅÉËÎÑÒÎÈÄÈÌÈÄÅž·±¯¯´¹¸ºÅÉÇÆÅÈÏÔÔ×ÔÔ×ÞÜÝÞÝÜ×ÏÉÁ»¸¶°­¯­­­±¸¹»½ÀÄÄÂÃÃÄÅÁ½µ¸½¾¿½»¼¾À½ yN.!*Q°àíðîííîïòôøøùûùûúûûúûúùùúûøù÷óóðïîîíïððñïïíëéççääääãäãáãâãäããâààÝÞàßßÝÜÛØÙÝÜÞßÞÝÝÞÝÝÞáâáßÞÜÛÜÜßâääáàÞÝÝàââãåæåçééêìììêêêëéééëéççæççæçæåèæéççèêèçæèçèæåäæãßÞØÒȽ¸±¦›Œ€vpj^XSOKF?96645-002/4-*53//)"$&'$ !#%%)4Gn‚vtiYU?+ -  - -!(*)5.)" - -#('&))-%-2-.4,/1635415213@ACDV^gksw~|wfA# - 2l¦¹ÁÆÉÍÏÔÒÔÍÉÇÇÅÆÉÉÇÈÉÍÎÐÐÒÔÔÓÐÏÕÔÓÐÐÎÎÏÐÎÍËÊƽ¼º´°®¯°°³¶´´°£ŸYQ]r–¥«¯®«®ª§ž=    -     -  - !&-96-!$!" %$ ()%$#)09:-$!+1*/."!1+%" !"  !!"! ###3'"#  !$%((30,())+,# #"!$"#"&'&$'"" %" #),6O{™¡ ¡œ™„cJIM[XXYYPHB6+"!,$*#(# $06G=5)"%*/0#"$"   "#%!#!  !!#!#&% !"4!#%!    -  >Vb`i||yhcWSSKLX[et…‡‰‹œš›£¥¢§­°²··º¼¼ÁÁÄÃÂÆÇÅÅÇÇÊËÊÈÆÉËÏÊÌÎÑÑÑÔÕÕÓÓÒÒÑÒ×ÐÍÍÒÔÑÎÏÔ××ÙÙÚÜÜÚÜÜÛÖÕÖÚÜáäâßÜØÔ×ÙàäßÛØÓÒÓØÛÛÖÐÑÔØÝÞÞÞÝÜØÛ×ÚÚÙÙØÔÖÓÔÙÚÞÞÝÞàããâßàÞßáàààÝÙÕÕÔÕØÙÝÜÞßààßâääçååæèèççéèèåãàßÝàßÚÚÜÛÝÝÝßßÞßßáâàßàáâââÞßßâàßßßßßÝÞÙ˧d4!"! #K¨Üéìîïðîññòõöø÷ùùøøøùøøùùùøøøùõö÷õõõ÷õõöõöõõõóôóðñòòññðîîîîðîîîííîíëëììéëêêëìêíìëééêêëëíììììêëëîììîííììëìíììîíïñððñòòóññññðïððïîîïîîïíëíììììííìíìëêêèèáàÞÕÍÀ·¢”…znZPD>A:92..(')('$!   -Nu€yqg]H-  - -  ,).4;>@=."  "&##'(%$3.*,0.-.6//-+-,116465>;L=@>ACEGMA6-  - >fŒ’™žª¬ªª©¡£¢££¤¦£§¦©­¯®°§§©ª°±°°³³³´µ´´´²±«¨¨£Ÿ¢£¢¦¨¦¥­«§¤–vPA?R{ ¨¬­¯®®¨§‡D$   -          -  '1//+ "" $""'!"((6<3*0*)/++*!!"+3%   #"'&2'$"#!!!,%'++0/,,+11*+""$"&!$')%&#"!#$%  $%%!&0Pv’š Ÿš•…eLIPUY\ZULI>3(#$ )- $!!+59?=@B?<>>1$$ ! !     -  -AF@1$&&-/&!!" # "#" &&""" ! $&%#$!""!" %#"     - @Wadgioh>&&($&$)-17>@=?DGGJQRX]cckqtu|ƒ‰‹™œ ¢¦«­²¸»¿ÄÄÅÁÁ¿»¹¹¾ÇÌÏÓÒÓÓÕÒÒ×ØÙØØØÚÚÚÚÛÛÛÝÝÝÞßãáßÞßáÞààãåèçåãâãäâäæåããåãããåæåäååææççååæååääæååååæææçèèççéêèéèèåéééêèèåáßãäæçæèèééééêêëëìëìììíííììììëêëêêééêèééëêêêêêêëëìëêêëëêëêêêêêéééçååäÛ¾z7$"#%I¦Ûèìîððññòóõöôõø÷øø÷÷øùùùùøøø÷øùøö÷ùùøö÷÷ö÷ú÷øøõöööõôóóóòòñòñððïîïðïíîîííïïîïîïíîîîîîîîïïðïîïðïïððñññððîîðòððïðòóóôóòôóóóññññððñïïðîíëêêéèçæäáßÜÜØÐËĺ¹°£•ycVLH>30'''$#$"! ;]pysg^O4 -   -    /C>BBFDKC2"  #%)$&)%'*,1,*0,00+&'&'),0.//+1/(3365//036*! $.;BCKS_ijxogiighljie_gqroha_[\bdefkmkmrysx~trmdgfhdiks|~‚„ŠŠw]<318X‚‘•š ¡ž™|A# - -  -       #*/351-'!# $%$%(! #*,3777(%#'+/+&%')/&!!! !"#$/$  %#'2629;6:81+$"$ "!%   $!$!%+'%"#'(.&(#$!!!$!/Nt‘™Ÿ¡Ÿ˜„cLHVW\[]YNIA2-#&*'"',2:<9<><^mkeYN7 -  %0?W_[UQW``SD5 - *""# -$++) *./4/%,+#'+6%('***-13/+&')*'! -!!&".8@G[PQUQNGDHH>PKJMMA2/-,07:8896@FKKCD?=<:385467?DHLNQUMM>3+*:9DKHU`jlomY6      - - -         $*3;<70" '(($'&!"%7>1(,% %$ "%'0& %"!!"" $! &#!!5$"!!'+72:;<>92/%!!"###" $%#")4)&!" &&)" "$#(4P{”™ž ¢£œ„bNKTbWYVWPK@6'"&%!  '-5>>;=?>:;2&!!$'!  -         />A?:(*..(-",& "#!   #"#$! !* #! "   -  18Uf^lniN)  - $#$" &)/,,'(&*3,+-,1847DSU[UWYKDHQ\a\\]^acecfqyxvwttvtv}„ˆƒ„ˆŽ‹‘•–™¤£  ¤¦¦¨«§¥¥©¯°²²²´³µ¸»º»½¾¿À¿¾ÂÁÀ¾ÃÆÇÃÄÇÇÍÌÍËÉËÊËÈÅÂÁ¿¿ÄÂÿ¹¸ÂÉÊÉÌÎÏÑÐÒÒÒ×ØÙÛÚÚÜÝÝÝÝÝÚÛÛÛÜÛÞÜÙÜßàÜÞÝÝÝÚÜÜÚÛÜÝÛÚÚÚÛÛÛÜÙ×ÕÒÒÑÏÌÌÊÆ»œj?%%!& 6r²ÆÍÐÓÕÖÙØÚÚÛÛÝßààßßßáâââßÞÞÞàááãààãàâáâáâáâáààâàâäãßÛØØ×ÙØÕÖÖÖØØÖÕÐÒÒÓÖÖÖØÔÔÔÓÕÖÑÑÒÓÕÕØÕÒÏÒÓÙÛÚØÚÚÚÛÛÜÚÙØØØ××ÕÓÓÑÕ×Ø××ÖÓÏÍËÀº´®ª¤œ™‹€xtmkil^__TOJ?=>9:30,*)&     #2^ggd^K2 -  $/ATecefj`jnllmX& "' $-2&&,2..%)%'(/+$')&-+85++-% #),#!  - " )4AC?KNOONJEH@BTAHH>>1,%$&235016AEB@>9=F./,.-%')9<=96)#,0(,1337AL94& - (( - - - -      -  !.-84+)!!.2++&&%##(1A3!"$ %&$#  "!###0%!%$ #"'),.4=>:<2,$!"!"! $*& '(''! "# (2Ly”› ¡¡£œ‡fSRXYUUSQOJA6&'' # !*1;>>869=71$!#1     -  * /=@@6$&/))(##$!""# !!& !%""'! !    -   8Va]eohM,  - "#%($! !!$#!($!().2:>@F:7234=926689;758CFGD>DFC>DFHMHHIKPPOSV^aagcZ]da\dhgdafllsttuuvx|{|€|„~~ƒ€„†ŒŽŽ’‘—••–––•—Ž‡„„€‡†„|zw‰–—˜››œŸŸ¡¢¦§¬°¯¯³±±³·¶¯°¬±µ±±²°±¶¸¸¶´²µµ¯­¬®³´¯­­¬¯®®®«§¢ž™™˜—‘ŠƒhG0!#%@s”˜›ž ¨¬¦¨¦««®²´³²³·µ¸µ´³°¯­­­®²²¬²¯®±²³°­¯´°¯²´²¯¯°«¡ Ÿššš›Ÿ£ ˜–—˜˜šž  žž™–•šŸ£¡›——ž¥©¦© ¢§©©§©¢Ÿ£¡Ÿ¡ž––—›ž™˜•’†~}qmpkcb\TPKGEB:>A>58%'$$(%&(./20-$  -      - -   "'!)'(21.3)()04-+(!!!"! .#!!!2'-&*-287??3-( #'!"%&%#$ "( !!(2Rz•ž Ÿ ™‹iWQTVWTUUMGB7+'$   ",9;?957510'!!! ("  - -    *-?@?/ !!()!!!!%$  !"$"!"#'!  -     -8O__jmeQ- -     ""  ()*461*%',)'$#&))&#!+.+(-(.32&-+-&(,),144515<<==611468;=987;@BFFF@DGHHFJFIIHFEDHKMNSTWYUSUVRORUOSRPOOKINLJIKJPWWX]cihb^dgdbiijrpnpv}uokmpspnlmjswszxsvnminsuuqovrqvwqkhcf^^^]YRSQB;*#!,Icemks|zu}{{{~|€ƒ‹ˆ†€„†„}{vuwvwyztuwttvwrsoszwtyvvnshbe`]^]c^SYfg]^[X[[UZ_[[\X\VRWU[\^_e]b_cig`h_\_hiaddaecZdVbeX[\`_S[[YVOTMFDCKIHC85385.3.//01/*,($&($#&$!!!&     0e|zveF' 5EZdrvwttqqu{xyytjU-  7! #''1(()(*(+*''!$&(*..),.)'&).+&%%%.  - -!%,.=@;CHHDEDIM@77HNG?6+ *),32/)-<=@<>65/($"%.,*,31:>977=5/-%&$%$ %+./)'#"( -    -  - - -        1 #&,0--0*# -0& # #"&)"!"!# """-! ! & 00#+/2358?<4+#!%"&!#!$)%! " ,)4Sz”ŸžŸŸ—‹o\NMWWVYUUJC7-' ! )2<:<9:><64'*8$"-   -        .@F<2$##+%# "$( "% $$"()%%!"#  -   5Q_chkeN+   ''#!  !! " #' !$#!!"!"#*+&&(+13*+%"$*--(&*)01/0/)/1.1231353-+,030168857564/0-25372211220.6015::7;>>=>8=??;<>AGA?FEFMGBFCICB@BCEGAHNNJBGKJNHKDAJEEINHBDJE@EDB?7<4,+$!"&:NTRTW`_]`cdee^aflgc`_dfcZ\ZVX\^YNRWUPSRWOSOUYUZTNLF?>?DB=:?>8?G?DA@?@JFIC?:DF<AG8>FB@;<Tgkhgmsmjrnpwy}ƒ}h< - # ))3-)+/,)&/($(*!()+.-++(&&/+/(%#(*/ -  "+8:=@;1136"!$)052.2554<:612)'$)$$$%)+'!)     -       "&*(/62- &'%"""$%(!"#!"# *" " $ ),-/03;?=4*%"   !  !   "  !#"$"!$#+(9Q|—žŸŸ¡ —‹vWKNWVXVUNJD71!# !" &/2A:;=:;>;;*!$!     -   " -  2EHD.("&&"#)   -U*," !$$&%#$%!$$!"  - 4P_bgojK& - -   -   ""!"$!"( $'&)## $"!"'#''#%')+(#&(($( ((*#((&%0%!&!!"% %)*&(-&(("&&("+-'*9/-,0.-050-+.//49/3=9124720*0842128;997==<6458476:8888:>1478211)(#'8>FAIINQT[XWXVW]]_^WTUWWWRTHGMULFIGCCBA@B@GA=GEEA:9:642661./458>=:784402-366-2.54+423.2254:@434=:336:42755946<64819=;8:535446452.1/0-*((/+(*,-%*+%"$'#("%&!&) !     ?n™®­©¤—o2  -*;Hamqu{Š‡Œ‘’—‘”x<  ##,.-&((''"$&),*.1*--((*-0-'%##$    -"!-/4C>CKGEGGCCF@EIG>5+) -8551+225:71.701.*,.64015387>9:120+&(&" %&#& & -   -  - #  -  -   (,1.-"&"& &0%! %"%))-#"$.#!!!'+'%.26>9/+$!" & " #"#( !&$%$%)7Yz“œ  Ÿœ˜‰p\MIQUVTZRSH9+ "% )16=?=?;;<8* ##!""  -      .DD@5%#!&"#$&c*.(  !'$'! $"  $!%"  ;XhggneC! -   !!#  %##&% "'#  #!!! (.##%%!&"#""%# ! "!&!$)" 0( (!&%%)'(((($-.)%#+#)).0/0-,+.((+&$()/.0412263365+561100421256-+,1./,,& &.8@BGFAHNMPWMOOTYWXIJOMHINNHICCCDA??<9?C>;;>9;AC=4.:;1305-0/-14336631,//+,-22*025010'+344/034256652661/-;3321549?6<>=9746652573--*.(('%))')!$&&%&%$%$"+&$&%',(!"      - - --eŒ§´¯¯¤“_% - *BYm}‡’™—š”•™›“‘ˆ„f4 -  -!$""&-#"$&')")'!1*(/./*(,''&&).*((#!  - - !&059>DFHHIJA@HFEC?:8+" "0613*#,4/41+-0++*,1680.47<<>6)"$"#  -  - -  -    /@J?1%!"""!#  $#!'$"  -%%%$!" !" -  9WnjmnZ=! -   .""!"""!!# & !""#"  #!&% !)$&&'% %&"%%',($%+%)%'*.,%%+,! %*& ),,.0+-130/3/..10.,(12/-83/.61.1'*%# ",8;=AGBDGAGMMIJOOVNNKIGAELJBIC>AA>>967;7:B?,&14/1.2.-)'2-1/450--+(*,)&0*+/50-*,,157141032.949;101.6235017:=58661861953393**,''+-+//,)$)'&# %&(#"%,&#+%()$$"#  - - -  -/bˆŸ¦¥”v= - "@Rgw‡‰€„†‰„{x‚wvpd`XO. -#$!%(#,'*)'(&%()#('+).,%(+*%&'%#*'"$# -  "'0645@GFGCDIFGCCBD>23%$"*-*.-* '+21,'&%"%%$0318,,2<A>=:9<8?E=:7<:855.&023.)0+++-4/,(,10,6/,,---1.+,,,,(+/(/.32486254784/2136775311160862443152,3449/.1,/+(.)*-*'*%)$!##&$$+'$)&$$%2!  -  -!Ij…ˆˆ|mQ'(9K\cjhhfgfcfeab][UPPJ>(  -!% $!*).&&%&(#)(*!#+')'/*&'2-+&-)%(.!"2  - -  )97>>@KGDC@FIFCC?;1 $&%!    - -    -B;211&'#&-134,()'%'"" (%)*&&'--'/02:=;>=1+%,% !!*/10*+&' -   -  -    !$"!%4+ %"$ !04(&!!!$#*&)/.173-%&!#&(*/( "&$%&"#+&$!$&($$&&%'/;V~•›Ÿ£¤¢œ‹lYMNSTQNKKJB4+#!"!*8>@A@B3%&" !     -   !   ,8?0%$'$$# !# $$##'!!    -    ?_nrtjW6   -  - -  )V !! (!'#*!!% %#! " &$"#!#)&))&&$$%"!"$!#$$"-(*+,)'',,6).3**')'-,-.))&$'' !$/48>?=???GBBIJ<<9;<@=:>A?861155658:9714=51/'%##)&()-.2-,'&01*,-3./-.-/,--1/.13/2014/**(6500310.173005401.10255545+/520020+,0,,$.+'/.($'.,' % %&((+!$$!"$)#$'!    - -J`li]M. *6KPHIG<>ACJEMKLGC<::2/-)&&%&,31,)'#%( '*$(&.'$$(,*/4>BD?@7).+.&#!'/../-(" -  -    - -        "" !!!%+! !$ * "#!$&+-,..36771+%,+''$# # " "$* $!#$"##$*$/,9Y|–œ ¢££œ‰oVOOPPWTSRLD>/$%#(<;@CA>?>?6$#*!+ #   -  - -  -4  /@?1"/ #"#;  %"   #!!#(&#!     9^pytkQ- - -     !"" "" !$"# %$(&# #%#!$%'!!'+%,,)"#%% "#$#+$)+'(*.22/0.//*.*&0--.**+,+'*%# !#//16<<=@?@F@@?ALIGA>:;?<=?><9326413559;C625:0+.'''('.')'-0)/,+13,--.-$(')-,/11.,10731,2/./+4/-)(0.+260.322423236425300,35-1/-0141,?/1-;24,1/12))$%/.-*$$!(%$!#% &$"   - -  -  *E^itmY2 - "7>ADC@=:E=>EHJFA;7.+3+  - "'**+*-,''010//,/61)%,.85:502,! (+2160*&&#    -  ,:B>6:<?>B=66593112776364325,*)-01-'-'&)-6/+/,/0--+++&).27/221,*.0563613892,+,,80131,.01/2621343:3.*1621430(4/21-907;46522401,-*+3521+*)$!*-,(+%$%""!   -  -!E]hro`: %8=LE@??=B<;AEDFH;.++)' "-/,3.'(01.-031,*31,/7>@7;9,/*,(*--(1,&&%' !*6:A@<=>=MSPFHD=<:2+*('$&-#&)/5--(##!+.)054339565>=>D@>:/.,*% ''('**,)*!  -    -      ++  #""#"$#!(!  ! "$#/638:9==<3568,' &&###  !!"#!'$) &()05X—šž¡¡›ˆgYKIQMQNMRZLGD?=>>@CEBEG>>>><>DE?>A?<>;884176:582223+++%441--+%*!06352325-((//&-/2167757.2//163154233/&(-/43/+,22/(042245<72-010,-A000/60.2768592,-111*'*./303411+)-96-,+##') " #    - - - (C^nli`? - 18>?:==;;=<>AIDAA?15*,#  - #*,(+%&,5../-53-'//+-98.//94++)++'&'),&.)"  ++2@?AC=B?>IKKC@?I:3--%'%#'")#*/+)*)(%/.44;9<77;<9;>@EB<:431'*"%(')1-.)($  -       ! !! $" #!""#+' % (#   "",11587<<<:,(-%! !"%+(%')#! !$'#"))'/7W}•žž¡¡›…kUHINNONJJPNA3$ !).141825/,'"-"!      > ,>;-&(!!/&#"$$#&#" %'#$!"! $ !# "" -"&'+$$&'#%  -  %IixscB#  - .   ! % !!  #!$#$!'/&&&%$" ##**(+,1*$%.3%&.(-00650/<84+/467.114,).,/+&01'(&1. ! +711?>?@CADMFGCA@AA@@>@=<=:6788;:>8.263-)14731-)'-*1842551/05-15178588<4454636-1/+4,-41*,/2/44/',20,*/,1345432,*020370210-434778612,-020-)(//-3.13*()-9;/06*%"#'!"*$$"    - - %GcihlfE$ - -#-;:9::;>;=ECIB=>@CFHCCCA>H@4),*&)(!%&'%--1.*,./,/12>;=@>BLID>=?BCFCA=62+$&%')%*",(%     -       !%# " !""#"$!#!!$" !$**1./229670(",#" !!$!'&$$'$ !%!'#!%%&,./9V’ ŸŸ š…fQIIPLONNQLH9/#% #37<9:;7021! ! - -  -    %@>A7=@??@@GBEEEAEAA57765/2<9025**2/475/3.00.40/28?:87581443-346.*,..-0301-.-/411,0///,.563/2120'/,/T&5.2>641-3362))/2020//,,/-***3+)((07***/+() #"$'%" #"!!  -  &IdhjqeG" - -87947:87:BB@@?<7530+*  - "+-(&$,6*.1*-3/./*6$-*)+$('+*,#!# '.)9*)# - - !.35?BIGGGDGRNGFKPF7:2;AAEDHLOTLB;ELJMFE@;53(&'&''%&$'. -   -    -  $"" "! $ $!#*$%# >,6   !'')*,**330/*$ "!!"!%$  $"!!"!%#%($*,-/>[€”œ ¡¢ ™ƒdTHGLJOOQMOA7(%"!'"!$4>>;?:8997&!"    - -     "2945:3/&%,+$),*+#$& '' "*.-1620( ##!"#!'!!$'!!'% '!"#)%'*#! %+ )&&%%8"$ #    - )Xv‰‡|iC     !%"!# '"$"!  !!#"!!#$$%!$ %" #%!)(!!""!'&#('$%.0)*)(-.+2-/113-041.'-,-&+/,30,*$&%'#%$ !)4;9?>?9=78>=<>@>FAB>:6:;>C>>@C=B>7;;6;=>E:40'04;<20//+.25.-/560521/106:885434123.,130201,00./0/*-34300++40-3.33-,//-+,9K9+5444.--54/-../14/,+-,*++$#$-$.&+/5*((,,"!%&$&*$ #"#    (Iceiq`B(  - !)176.23978@GFC>72860/+ - $#!%!#*5,0&+-)*-0)*($,,.1/,-++%$+05110/'" -HRNQ[_`]X]^a`PTY[VMOOB:A@7566:?67>LE?CKSMNVNNQW[]\`d_[PCIOKHLOKGA<4010*0.-',%!     -       ##!$ !$$!! &##"&#&%%* !*2+%  "'%*)*%()533-'$$!#"$%! !"$" #%&"#)!(8?[}”šŸ¢£ž—„iQEEJMSRVQLB7%"'$"!06>A===>?:3)$""  - -      038=H@84774)%()"!#!!"#! %,+1671)#!('!"#$&0$')%$(%!"%$'''&%""  !$##)&$2,$     - - 'Vu„†xbB"   -   % !'%")#!$"!! "#'"""  #&$$##%%$! '&$%0-#('%*)0*'+())-3/**(+4-01-)13+,*-*)#$& ./+4;>;<606:59<:@A;>?9369B?9=?A>:678639:4?=.,+2513:22/.1123,/420,0725//12543,1/404/-/*.--.,039-4/)26+.*(*05/.1/2).0.2+-"qr313.-.1)/-1/.2/+1-0/*$83 &""%'(+*+'-'*,''(% $&!""!!  -  - - .Gfoqm]=  *-23./47:>?=>@>7<44+/0#   $+( !')')-+(.1*2050*/9?;:768>="&"$&* $,4><3% !!     -       -   ).8AA:6AH>2" !(/-)%$ %620+%#"&&!(!"&)%&# """"&! #&($""$'$ "%#'&&"-!## ! -    (Xp|‚z_9! -  !  "!"    !%""!"%!$ "#''&%$)(%"'**'%'((#*&'+-*)+())-*+('-)/1*%)*,)*)+)*! !!$"/*+.0651324747@:8:=<;4:77?I64=@998<77078870/01131510.--3*-20111+.04.233312.1201503320..24/*2/;406-00..36661014.,/-1.4/./F10532141//.3663401.110-17=(-'*/2.+/,,/3-**&*&3''##"$ "# +A`}ƒ{i? - - 1546239<<==C@;37>>5;9>8909;>93/3::66:10/202.2670454527055393769=0358798<526943;??@?;997>BHIK@=ADF>BA@<:;=>@BA>C?C:?P`CIBCNEBJMJDJGEMCKKLED@==CB?D>8@:;=739@6<9<7?G&  =T_W^Y[eiggipolmpsv}ˆ‡‰–’‹Ž”›ž£¨¦ª®±±µ¶µ¶©}7)k¥¾ÇÆļ¾ÁÁÁ¾¼»¹·¹¹·¸½½ÁÃÇÃÂÂÃÁ¼ÂÂÁÀ»¾À½¼ÁÄÂÂÂÀ¿ÁÀ¾¾Â¿À½½º¹²©­¬¬©¢˜’„ˆ†„~zsjJ-"    - -   - - -     %%"" "$"! '*&$'!"  #()'-.*043-,"# !"&%+%$!#$!"  '..!" $+:Yu…Ž’™œœ’‚gVIBIJGLOAGB5-# $- *8?B?@?=>9.!#"' - -    - -  -   - # )/87278A?-"$%'"$4FB2%& """("!))*-(%)'+)0'/'!  - -   - &Qm}xqV5   -   #  "!#&(&$ $#"&('&**&% %!!%$(&&))(%&#'"'1.&(),1.0/*/-+-333565;=327;76:;564@79>::==?G>??DCDA?@EBFAE>ABFHEHDBCECEEJIGLFJID?EBB@.!!;HUPQUSVRXQUZa`_`_X\_^Z_d]_cgebfdhefda_bXZZXYY\Z\WZYWSYWUZ][_ZSY_d^Y[YX\^\^b]]^ccmfhdhlfgifgjosptpnr|}‰‹‡ˆ„‡ƒ‡†„ˆ€~ƒ„‡‹‡‰Š„€Ž‡‚‰Œƒ‰ŒŽ‘Š‹Œ’‘•š“‘“š”’—˜˜˜–›œœšœ™™™š“’”ŠŒŽ‹†„„~|z|‚|vnnh^UKJQR]hqmcdlp|†ŒŽƒzZ3 - -  -)3/1:9A>><<@>>@98<7.0) -  3BELIKGNTPEMNUQMOXX`\Zbbjofiimu~Š•ŸŸ¢ªª­¡q0% $hªÀÊÊÊÇÂÂÄÄÅÂÀÀÁÀÀ¾¼ÀÂÈÊËÊÇÅÆÈÆÂÅÇÄÁÅÆÈÆÆÊÊÇÇÇÈÈÅÆÆÆÉËËÉÅÅÅü»½½»·¯©¡£¡Ÿœ˜—‡b8+ - - -       '#%!# %!$%$# $$!..)#)#!!#" "## " $'(&%+)15-3,#!""$*%"%'! ! ")0'&""'9Zwˆ‹Œ•žš“‚gYFAFCIGKHG@6) !!"-*"#(2:A<==@<:-"#$'"  - - - -  -   -  -  (*01902/9CC0"!"!$%$!'6CB,  ! $%##$'&%**%""%%#%(00"!     +Yu{€u^>" - -  1><>$" "!!#! "'$  !$#$'''&&(*$)'*,).*()-1,((&)(+-//4653465:86==:<:958<9<@<;7539,%( -  $++610204.35<34559<:8=;;AFC??ADBNX\_kjqyƒ{V. $j§½ÉÉÈÊÃÅÈÃÄÁÁÁÂÄÂÀÁÃÃËËÌËÉÈÇÈÇÊÇÇÇÇÇÆÈÆÆÅÇÅÃÆÇÇÆÇÈÈÉÉÉÈÆÂÂü¾ÁÃÃÁ¹µ²®®±­­¯¬§žO* - -  -    - $ "!!"" #'(+%(/+!##( !"#$%&)*+*)+-,01+( "&&#+&#&($#"!!#%&#&! !,5UxŽ’š¡›—gPGDCDAFJIKA<.&"#'',*#&1=8:=>><50 #"$  - -  -  -  - -(4;121-->GF3)  !" ##5C>(!"##$!#"%,++!$#"!!"8        - .Xt„ugRB6/+(*(&*29800168;@=?FCCAAJQNMMMSMSUWVWTT[ZY]^[ZY\_]ffea]bbggcglkmhmjjkhroqmmrtvvyx~}€‚‚„‡„ˆŠŒ…†„ŠŽ‰Ž‘•—™˜™›••˜™šœž¥£ž¥££ ž£¦¤§¨¨«®¬­¬¬­­«¬¯±°­°²±¸·µµµ¶´³µ·¶¸¹¼¾Á¿¾ÁÀ½¼¾¾½ÀÁÂÂÄÂÂÀÄÂÅÅÆÄÄÆÉËÊÈÆÊÊÉÉÊÊÊËÍÎÎÏÑÑÐÎÏÒÓÓÔÒÓÑÑÑÓÓÔÖÑ×Q)#9Q+&h·ÔÙÝßÝÞßÛÝßÞáàäãàÞÞÞàáàßàààààÞßßÜßâáãààÞÝÜÚÛÛÜÝÜÜÚÛÚÙØÚÙÙÛÙÛÙÙØÙÛÛÛÛÙÜÜÛÛÛÛÜÛÛÝÝßÜÞÜÜÜÝààáàßàáßááãááãæçéìíëêêéëçææçäççåääåäåäääãååååååäçæçåâáãâãâßààáßÞßÛÝÝÝÜØÚØÔÒÏʺ´°¥™Š†yrppnl`XWMEA<:9:652+& !#$!%"#%"!!" -  &06:=HCF@<;>=956314*4%  - ##%)'''),../,*2*-2/029011;<761.--36798:FD?5( - 'h¥»ÄÇÅÅÂÁ¾À»»¾¿¼¹»¼ÀÂÄÅÇÆÇÅÄÄÆÄÄÄÄÆÁÁÀ¿ÃÀÀ¿¼½½À¿ÃÄÂÀÃÃÀ»¾¾º»¾¾¿Â¹³¶¸¶±¬²¯°«¤‰Z4 - - -  -   -    ! " !! %('/1!"& $'!!"&#%!#*+26*('&-4,(&$!&"&#!"%$%$'%#$!&#$"""-3S|‘”˜›žŸ™‚bLJA?@>XFHL?8.'%#)),/%  (;><@@:44-#!!#% "      -  -    ,:8341009EA5*  ##( ! !%!"%' ",<:' !!  #!&.2&##!  $ "     - - -   -(HjtvrkbaUSSQUZU\ckjkfmoqt~|ƒ‚„€ƒ‚‡‡’“—˜˜––šœ›šžœ£¤¤¤£¥©¤¦©«ª¨ª®­¬¬­¯³°¯±±²±³²°³³¶¹¹¹¸º»¹»½¿º½¿ÃÂÀÁÁÄÅÄÅÄÁÄÄÄÂÃÉÉÉÉÇÊÊÊÈÌÊÌËÌÌÎÏÎÎÒÐÍÐÏÏÐÎÒÑÐÓÔÔÓÔÓÐÒÒÓÖ×ÕÓÖ×ÖÕÙ××ÙØØ×ØØÙÙÚÜÛÚÛÜÞÜÚÚÚÞÛÛÝÞßßÞÞÞÝààßàààâáßÞßáßâáâããæææèçèçèçèééèéçåååæåãâåàÔ±e+.Kn8,|ÅáèéëêìëêëíìíìëíìêììëêëêëìèéééêêêêëêìëëêêêêëéêêêèééêèèèæèéèèççåèçééèèèççééçêéééèèçéêéèéêéëëéêéëêêëìîíìîïïñïïîîìííìëìííììëêëìëìêëëëìêëêëëëìèèåçæææääãáàÝÞÜÛ×ÔÑËü¶°©‰{si^WJ@;523120-%&"#      &+27=E>FD?>@@:7::5222+"  -  "+%%!""!$"%$#)*120-+/+14566/,*$&+,0..30*'! - U¨³µ¶º·µ²´°²°°²°±¬­°°²´··¹·¶³¶¹·¸¶¹¹¹¶´³···±°²¯´·¸º»½º¹·¶¶¸³±´¸··¶­¯´³¯­««¥¤ž†Z6  - - -    -    !$!" #!"%$-&#"#"<5%( "!!"!!'*+,/+.(,-.00$%"#""%"#!#!# $#$%+!))%!%$ "(1Rv’—ž ›•~`IDC>BDLEEC@4.&'"$(,3#')9>A?A@=822550-0+"  !$ ''&#3! "'%%+.+-'07(0.595.*$"%"&$#+2,'%  0^u†Œ‘”’‘’Šˆ‹”‘Œ‰‰‹‹ŠŽŒ•‘—”˜š˜’•”•˜˜•–”– ¢¨¥§ª«¥¦¤¤Ÿ¢¨ª«ª§¤§¨¨£¡¢˜••€]4   - -          !& #/+ """%&'&% !! """"  $"#'**,,*&44//))'$#$ " #! $"$#!$1-)(+% % #$4Nr†“•š™˜r\HD@FIECFFA7.00.&&'(,% &.8A?<>;95.% !#(%%! !  -        $)#)-+*29<:3+)**($$$'!"$#$$%#(/-040/,3103*"**((##"# !!0.'&"(% !"%"#' "!$""(O&13,+*'&#%+*()//(.453$      -  , "'&%+$)'),*+0,.--69:=>BEHKMPQOLUPW`aggqvppkrkqts|€|‚ŒŒ•”˜¡¨ª¨¦ª°±­±²±±²²³µ¼¾ÁÃÄÅÅÅÈÈÈÇÉÎÏÍÐÒÓÑÑÓÒÓÔÕÕ×ÕÕØØØÚÙÛÙÚÜÚÛÜÛÛÜÝÝÝÜÝÝÝßÞÞßßÞáàààáßàááäãâàáääääååäåãäæääåæåèççæäåæçééççéåèæçéèèéééêçéëëììëëìëêíîîíïïðññïïðîïñðñîïîïíïíêììëêçܵh6-UwK,sÀÞæèêëëëëêêêëëëìëëìëëëëìëíìîííïîìëëëëêìîíìëíîîìëíìëëëëêêëìëìëëíëëììíììëììëìíììíííîëììîìììíïðïïððïðððïððòñðñðïîëìíîîíîîîëííííííëêêëéçèçææåâÞÝÛÖÒÍÅÀº®¨›„}zribYUH=40+$!$$*"  - -    -  %1:BA@B?@=A>6441402//#  - !&+.(%%!(+""#"!#%'(-*',.,-32/("! "#%%+.-," -  /?JUWT[_`[S^[b^^ge_ZSSOPRQPMOTTVUS\a[Y]][XX_\bccnw~€ƒ‡„„€tnzˆ†ŒŽ‰Šˆ‹ŒŠ’•Ž‚‚sV= - -  -      -   ! (+" " #&%''+'$!"" # #""!$$! %))(1'+)-2/2,&$ #&!#! '##%$# !!"!"% )"'"),-(%#%%((5RoƒŒ’“‘‰qZIB@JHIIFGC:111+$('16'  #%*/9BG==>:<3*#'*,,()*#$##    - -   %#$#(0/31%#&+& ##!%(,-.2768221-)'),.-,(&%%$$%"./##(&&%*'(+)%#&&&))-#+*()''.="$&"$3F3451)'"''-2::82;DE8'    -   -   $"%&((&&('#%3/049>5236677B>>GGHERVVLC>=>7;52221S?-678678:52988:>;>FPW\\gd^]YPHEYZai`\ZX][apoie^A,   - - -    !"%%#'%'#*!!  !! !!'% #&!%%#$'(+$&$$).+-3/-255732)&%***(&*++/)*&&"!!& *$%#&'&*%(''/>-*',./12?Qhx„ƒƒ}zjZLHJJIJHFIH?9;85227<91()&%,378=HID@@?@>7651365441/.+'%     -    - " !&8"%'$"%"  " "$&+(0-/-+"%#$ $&)&%% #$$#%%$ !!&$(**$"'&(+',(/1,+-$0&')&++.E,,+% !&$(583/7950    - - -     -    !&(##*/../23964644/56418@BEEGLKJHHNPFMSQRSX]^cgeaefcfjoqsoswxxv}~‚‚‚ŒŒ‰Š‰ŠŽ‘“•˜–›œœžŸ›œž£§ª©«­¬®°²¶ºº¼¹½»¿Â»º¼¾¾»¹¾¿¿ÂÃÃÆÅÆÄÆÃÅÅÆÅÆÅÇËÌÐÓÓ×ØÞÝÛØ×ÖÙßßÝÝÝÝÞÞÞÝÞÛÛÜÜÙÛ×ÚØÛÚÙÙ×ØÚÛØͪk5,JgE!L“¹ÃÈÍÏÐÌÐÏÌÍÎÏÑÕÐÒÐÑÒÔÕÔÓÔÑÒÑÔÕÖÕÓÖÖ×ÖÔÖ××ÕÕÖ×ÕÕÓÕÕÖÕÔÕ×ÙØØÙØØ×××ÙÛÚÙÜÛÛÝÛØÙÙÙÛÚÙÜÞÝÙØÙØÙÜÝÜÝÛÚÜÞàßÞÝÜÝÝÚ×ÖÔÑÏÊÈÉÍÑÓÒÍÊÌÌÍÊÍÇľ´­§§¡™”†{nld`ZSPLE;;72*%'++%+-( "   -     ,B?A@:4188?HDB=7666>EEDB4'   -      ! ! ##$*-*&'$('!"  ""'-0.1-147),0/.-.2.241422;===;<7513+...1423166/,*,'"#&&'&6002421981./69;9;9>C?AAIMYdehacbb\NJJLJHFHFDGDCFEABAB?B>;745;@AADFEIMEHLJICA99@@AF@8981,("  -   - - -    0##%!&*%% !+ $#%'! !!! #&(%$&'%%! !%" $!""$%$&'$#    - -  -   - -   -$   -   ""%'"%! ! # '&))0&'%'$-(!--*(+-))*,0-64/552:=779635;>?8>?:>DGEC@EEFDDFJORPKQTQIHHPWX]_ahb`fhhkktvruxwietvokqxuxxx|‚ƒ‚‡‹…ƒ€…ŒŽ”“–›¢ Ÿ™ž¤©¨£¡¡¤¤¥§¦£¢¡Ÿ ›˜™ ž ¡ š—šœ›“pA.'7C,'Hhyƒƒ„Š‹ˆˆ…‰‰‡‹’’‘Ž”“‘˜“–‘‘”Ž’ŽŒ’”—“–’‹‹Ž—””’–˜—˜—“˜—•—˜ž™œ ›•˜—š˜˜š›¡¡Ÿ¡š™™š›¡£¢¡œœ£¤¥žž››—›“ˆƒzxw‡‹‰~‚}|wxxncZ`ZYSQKIGEA@:96;8110,&))!#!'(*%!!$     - - -   1EPXTRIIGA:;@@97:9@C7/& - -  % #'%##'#&(')*02.#+-'%$7!#!&%*'$   !'&" $)/5A?@FAIKHA<-.,&..&%&,#$%#(+,+',-(&,')"$''&)'*&+314)#)-9@B@1+)'*)+.57'"     - -     !S=! !## &*&$!!""$ ! -3535:=79D:;@A685898=8:6=?CEECD>9:;;D;>CEBDAB@:;6.-126<896<>=>9<>?B=;;?<983;98<<<@;<>;>A<;77::==5/0.,+$      -  - !   %$! !! "(! ""      -%  -    " #!!! "#" (((&(+,$)-,*/*%,-./*+/*.2-/**-,++009850134:2009;5<<<>??FFDBBEIJLRKA>DEFGHIIJJSTU\[WW^c^`^XY^]]bdgegiropsouyxumkrtuqkpptqneeecahhkhebda^RF2#$25!,>HUTVX^ZV^^[YVVTW`d^W\_^b_[\\YYURONQSQV`Y[`ZUQTOLNXYXZVY^^YW[\]ZWW]\^_bfXYbZ\\a_hg`eZ\``aggfb^bfgda[^Y]^_YZWPLIHHPNWNSRLOHEGIAAB>??993960+0*-*.)-%%'#!%'% #   -   -  % +@R`gec^NGC>AH>994:D=0.( - -%&%$#)(*"%.*121+/.-.*'$$> )&!&%#& - - '($ &+(29:LCFFDBC8+%&/')&& !! (,),&$)''$# .*%!%!$'' !'(+,'#),59=>=376289=;:4:<9=<24626=E;?;9:=BB?=97589;?>>886/33.053F84/0001+)(+**-(**(''*)(",(')(('**&)+())#!      - -    -  ! ""! !#!!!   -   -    - - -   "#"##!""#$"#&'!&)'$'+$%)+%"!%%(&%'$$"(%)*0+/,'+-200$)1,+-+/-45389>34972964623856<==:?ABBABFKNENDACDCFNLLLMOVY[_\VZVUUQ[X[PRVUUXOGIHEBHMOOHCCDA:1)!"+,(4?BBC@HEEEGGEB>:>@DD?BE@EHIFFCCB<72549;AA>48?716<>?@B@95;:??CA=?A=;:??EE=?5:=ADB@CBBCEH@?>>BA@A?>?::::8;;==<:99<7849966754024110-,&('!*)+-%""&$#!$ "   - -   'Das{…‡vhXH><>::DB><>;;;F?>@BIFFKSLIEBA@CFIGFIB<@>>@<=@:=>74941*"'* 1/7;:><>?98@>93267568;@;99>98;<63*(*-)*00--/0254/732443361275:63/./)0132025455014034-*27643666;7:511/794542/-086617474//08875642634/.,1.22,4.''$"*,-) $% #&#"  - -  -   -Agƒ‘”‘bNJFDCBA<>73;371' $!"(&%%&#"#++-')%&#$*# &8# &($"%(# ,-'$&(/+.>A=?BCBFE@@>B=946<;85<965+3611' $*)10;D=9;764684--5306=8:9369746521,('*"'*,&#$%+:35333028-,/364400*-+%/,*-12/363,02,,2,.0/241*0686587*142255/,,08;55517<,,-:=;0./68671-1/31,444)*&#(*'& '!&""!%' -   - "*   - - +Pgwƒ†‹‚aEFEJFEB=A964:7-($   #%"%&) ! "(*")%1/)+!$)*$%# #"$  !&#&&%&',7<@C@HI:1%&'(%$ "#"(1(!"'$)%& ##"&$%(,,"!%)&"""'(5>@>80+(&,+),1)!    -   &  "!"#!$1##"! $   !$#& "#&$%()"#+'+)%((%!!$% '$&"&$)#"!$&$"!$!! "  !!"%!"" ""$"%! ## #  % #!!% +        - -  ""$"$"""  !       - - -      !   !""!!!:!!"#!#P#!$#$ &$#&###$3-%-" "$$#'(%,2+&&(%##$'(-'./*')/*,--&*00+(*./433216244>:72768=??>8<;=;;;?GB>>?9<<@=8?=<<33733>653/2/230,$*"'." !,426F757:54841425246=74326842+-/.*('%&-,%!"%&/,06*58454/(20--/2/,,*,2/*%%71,27-,-*).-4-0/002/35163/6052167//0668028>:jI644/0/.61541--*..,,,/.'"%"&)%%&""%'% $ !#   $  -  - -$AT`eegZ?(5CGD@@B@;94472-( !!&'&)%*$!%$#'&"+%#)+))+-(%##!#"#"&'..&   $#%%*)(-26:?:=GA?2'%&$'&!# $%+- &(& %*(!!"#*'*!!"%&$# *2/69;72)0-)(,2/-' - -  -    -  !!   " $&$!&# #""$+!%  %#&!!#"%)!"#$% "$"!!!# ! # ! #!#!!#""  )+    -  -  #$$! ) 6'!"   - -   -         -     ( !"# #" *( $&!''"%"$$"! $$&!#%## %#%3&#$#($#&$'$$++()(+-',.'-01.(#)0153334.478763535<>@>:7@;9?9=>??;<8><8:7@@A;651,.2132213211+!#+#1-38337I;3/22431.367404,/2046.),()(%('&&$!"$)0+10-/56/0(,*/.++(*0+,/-+*%,-'.5/'(&%/..0--)/1/082.--2-0.-0-,11171_67=3P5,*.2/).'-..3-,%,.*-11+&&($'&$$"! %)'&$%#! -  - - -  - - - - -  #0BSQPF9--<>>@?@>98;465/% "##&'!"%#$))&%$(&%%)&(*** #*## !!&#$,*,-%#  )+-1)--5857>:?C?:3.%$$ "#"$##%!'&!&2*%"$'$#$)-.) %&&(*+$$&,7=?;95'!+-!'23.#        "#  "$#$!  !% %&!"%$!! %"!" "!$$   $'"# $" ,.        -  )      "#  )%     -  -  - - - - - -   $!"$& # ""!!"!!!&!&### %&)?$$((##$$#"$"$$)'(&'*/),--*(%00/-/-,0234533971<;<<;89:958979?><=<86;<:;8872.21344432./0/+ %(,-/4501B@+%.36600343433/*++.0--.($#$!"$&$$!#*%+0*)04--,+,-1(.,/&'2-.(+,*.3551$$*(+//..,040+/38,-10*('+0'(-43/18020-0,&('.(+(%!%,,/,-(+0/013&*,### ! $$%'%  -  -    - - -  (6DDEA4!-8<<80- - -#"!(" !*+-$'$$#%#'-))('$(%#! #%'0*.*( -$0++--+,252:86112,))%"$$$###"'$%%'$'')(!#+#!',-4-'''+.'(*)"*6CA:;6(#**&(.7/%   -  -  !+      "$ #" ! !%""" !'%#!"  !#"&)%"" '"#"!%!)!#") !   !"'+#"#!!  -  - - - - -      -              -  (*&      - -        !# "! $ !#!! #! #'##!#! ""%#! &$%#!$#)'$" '**''(/$$+3111*02-0310363.289;6687441577;>>?985>:669;1373432214//2/.*)")( %)"'3./.?<+'20020./5311,*)%&%,)$*&&&!!#'%(#"+-/(%'.2-,1+)%%'&&#+..1-+-',,0131+'%'&/2-*3501474/./,*$#)&*+/33.2/%*.+3+*!&!'%"(,(-+0/+,25410,)'', $(#&"""% !!  -  - -  -    -  -  - %4@DC?3#,13:88;B<A971)(*!$23,& -  -   -   !"$ ""$###% !""### $ ""# !! !!"%"" #&""&!"#"!%!  $!! "! $  ! #  -         '*        - -     -(5,"   -  -   -          %!! "$%##$!#!'&&%!#%""" ""!%)# '&&'*+(%%'+/*-.,+-/0-/53.223:;;47694201:;98868542247>842111053,/20:.-'%###  &&**),25./.3/11+-,..,01''+$''.(#*"$ ")'&%# #(,1/-%)+/3,0+'$(&&"+-..-3/-+',01./" *)%*,).-++133122,/./*)+0.536143-(+,...)'',/&%((-%D7214033-0*),*)"%'$)$##%#&"!       -  -  - &+6@HCC0#(/32775<>:>5,))!  !'%##$()%##*$%,#*---,.-%%.&!'!#%%*,,*%$$   +)'+'$'(,./11'+**)'%&#%)-#!%&$'$&%$&'%%*+-),,)'+-1-/0-,,-+.&%+35=>44.*+(&*+-*%     #!!" !" !! & !!  !!! #!"#"# #%$"!!"% #(##" #$!#  !& &#)  "# '  - -     - -   - - - - -  -&B  -      -    - ,!)43'  -  - -  - -    -    !!!!"!"" !"%'%"!$&%$'%& "!""$)""##(&)**-((!%)03.41(%,.+/2+,11446232366<1544550483.-41562520//141.,234/(*$$#!$.%%+/,05,+-,/.'(/))-1,)%,)'*)&"-" &,)(('"$&'')))('22+.*'(('%,+.-$481.++(23)''$*'%$,++(,,+0000301,3*+12-/4318120)./-)0'4/*'(*'-/.31-.333/)(&(/)')+-,'%"#&&(&)#! - - -    -  - -,:?DCEHH;=;)".3084774583-,)  !" $%!&*,&#!",60(&$)% %$# !,'')'&"   )/+(1++++./1+/+ **&*.(,+-+2,)+**'*)"(+..+,,))(-654430,4,.2*+./68<<9*./,&('%)1$        #" " "!!!"!!!##"" #('"!"%"! !"  !!'! !    -   - -  - -  -    "&%$           ""&%!(3.'!   -     - - -  &$$ !" !#''!!# #"  !!"!#" &/''()*+"!)*/.211/8:4892+-42546495:5686579/.0.,)224/18;450,)&##"%!&'(.,(()'0.78178.)',00)(-0,($%%&'$$"(')%"!# "%'$#"!%+%"'-0-'(#!%()(*.*.+).0-*),1.214')(&#"*('.($('#/+'(-04304/.21-,%&(10',/.')*,*-,-')./*-,(' !%%'&$'%),')'-'##! $'!   -  - -  (?GJ?A?.)437<4533325/. - - - !"$ "&$#%"" ("#+-.('$# $! !'% %.+  '/ ,204303/-315-52.-,)%)0-/.-* &.0-,(*(+*-2/-)/3/35<:996234153',666?=;971/,.,,2+!      !"# #$!$!" " "# !)$$$&"&&$#  ! (! " ##  ! #!"!  -  -    -  -    $),)"   -!!"! $)#*6-         -     - -   #!!  "#$$"" """ !!"" ##)-(#)+)(*"$*/-10/32574630.-,2/.16135240285240,,+-1-2/-2142*#$!(+(  #),45'-,2/1<=--.,'+*-,,')1)$&%%""!!!,++'(&#''$)%!'"&*,,.-0.&'%#"#$&$& "%&&+'$%(13,)0,-++$%%'*+(&))'+%+*&/3/0-*+-1-+('',*'+*.)'"%#%+2)%(#%*(!#$!! !%#%$"&&#(')$!"#!!#   -     "@HMII@-!*06667557?9661 - !'$!%##"%$!%&"#"!"#(,($&%""! ")*0&&   -!6=BA?;=B;;::6:>94-012474*,'0-2.0248/32357209=7=A@CBC=:A>547/.7:;@>@>;67;4+,/1  - -     -!!#%"#$ $! # #!&&!  ! #*=+#(*&*$!!&&!  !)$!# !!(+ -    -  - - - -  -   - - %**4-$     #$"# #"$"$/)&')44*$"!     -  - - -  -     # "! !"# '# !$"#$.&&($&*+-&&%)-,0/),173//41/-03.,*2302530264.10.-,($+)'%$)-.+#"%).)  "%*10,+.50+.J.,*)+)0*(+#&(*&$%%(%$"&)%&(%+/*+%$'&%$%&(.+%,,*)#%"#%##")#%#'%$"%&*'*(')-,+&(*)(((%$('').(#*(**()*)(*&&&"$$%(()*# &##&(&&"$#%%%$##$ &!&""%""  #"! -     '695<;>>FBA??DB?8.2.+$     "  ! !&!#!#"#" !"" ! !""$&'$#+-#% "# "%# #%.!  #"$!"$!!!#      - - -    - -  -  - )'.21.!  "'(%$! $(1+'&*% *0,&$#    #!#"" - - - - -    # ! !#!"!!$"&!#&$#)&*)(+,*0)5*./553-/233/30/-./-01/032-.-*+0*0.*)*# #))'*#"*/0. - !$"%*/0)(),20)('+(*1+&)'&(1*%''&&& %'($##.*(')%&+&&&)0*!%&(*+$#$',%'"'##)'$!!#&(&+''$'.,)++,'$#$&&&(.-($( &,'(' !'"++#" "$&#&&"""&%"# " $+"!# !$ !"%" ##!""!  - - -BPZZXH3/29<:585765:@5 -"#!"'+&%*)&%*(+)/87/,164<:043=A9;>EIJISVT]]L31Vr‡Šˆ‰‹ŒŠŠ††…|€}wtsrmsmonqmmnmkbdcbc\^bhcaeekjknhd[TWIC?DMJNPMJJIOQE26;7."         "!!!#! ! " -#$%! !#&#*%!"'&&)%$ ") $" !!(!  " # -  -   -  - - -  -  - - -" .176,&     '..$&!*(.-(&&&" .%%"% ! $8%    ".3;9@85541*% - -  - &  -   -!!"%## """# "("%'''**)--,*"..14++--..10000-+-+0-,*./-'**/+*((*+)$$)&" ! %)*.'$$''($,(0'&((&%&()1'$(/*#-(*(%()(&*&-.))(()*-*+))((*0$!!'-.'''''((&'%"!())'%!#'%),'#($$%"+$#$"#()%',#)%%&,)'#$#&-&#%$%$&),#"$"&#""#%$'%"!#  "! %''#*&"%!#  !   &=V\dc_E4&-6;@=624356::/#@=3@EGFEILMSUPU\Wa_[Z`hjfkjmsww|€‡……„Š’•ƒR% >=:2%     $,01-45:A-!%U   ! ! "! "#""$)#"#'%!&(&*))*+12/,+60,2-8693*033943321023240/,+--,0+)*)))((*(($*($%$$'%+. !&(+)--13.)&)),..-01.'//-,.,/020/73162632-,44230211553348>865464873:76208;820.,1675054/.123437;377639>699773<=;<>>::=@=@@@:>B?ADFCABFFDCGGADFDBILHKKKLMSQUTSNQQTRMPQPOPNMOQPQTRMKNOMNMOLIJKMLLKNJOPPPUTOLMKIOJGCBEC?@?C@?EKVfuyywnV:('.5763255997:/  !@ekrqy|yyy~…‡„„Š””“‘Ž‘’•“•šš›™Ÿ¢¦¦¥¨¨¨ª§—`/ $Nµ½¾¼¾ÀÃÄÅÅÂÅÅÃÂÁÃÂÀ½Á½Â¿¼»¸¸¼½¼»º¶´³²³²²°°®«««¨§­²«©§¦£žšš™˜š‘’•–’Š…ŠŠ„}xpkZ?)      ! "# !!!  " !$""$$##!#$(&&+'*&#$'# $$(#! " ! !%#'"#  !!!$     -   - -    - - -  -   %10'"  !&4820)$#%).-./5224)/(# #)&%'!$%"'))#%  #   #%()020.-+  -  -5@HWbgkpojb[RH=0*!  J%  -  - !" $! !%!"##()($))*'+&$*.71,,1./1/96:?B?;>><9=@?A@=?BFEHEKOMFDA7--9AFKDDILIIFONTUPKSWROOOROPKHRSXXX^]WOUZUXVUQPQPSNPLMNIFJFCKFJFLIACA5(%&.1$ 2AHPOMNNPU[_[VRYVWY^^aa]]`cbdfaelnlppnmqsvsmjuy{uwsrttuyyy~…„ƒ‚ƒ~‚ƒy†„‚€‚„|||{|}}~}}‚}€†„ƒ‡ˆ†ŠŽˆ…ƒŠœŒ“Ž“”“’‘‘“–•™™™˜•› ¢¢¥¤¤§¨ª£§¨¤¦¥¥ª¬°¯°¯±²¶¹¸·¶µ±¶¶±µ´··¸¹¶¶³·¹·¶·¶µ´³±²°¯°­¬¬¬¨¦¥¦¤§¤¥¦¦©¥šœ—“–ŽŒ‡†„€||zwtttqvtv{rseG/!*3-034459739:3 - -=Ybfdfe`agfjkghktozzrqtjmmlljmmmmpv~€ƒ‹Žƒ…‡tQ1 U—ºÂÃÈÈËÍÌÌÎÍÌÍÎÌËÊÌÈÃÉÊÌÉÇÈÉÊÊÈÉÇÆÇÅÆÆÅÅÄÂÂÀ¾¼º½¿ÀÀ¿½¾¿»·¸¸¸º´³³¶·´´²°²«¦¤¤ •~U.  -    !"#! ! !"$%  '#%"!#%-&,(-',((/$!!$,% #"% ""!!! -         -         -  - -"%  $   !,110-,+*,,..-35744(&#$%('(/%#'$$++$ !   -     -  !&,5AOZbdmokicXOF=7)! $ "!!"# ,.*+)0//2475;:5<>?:60   ''"/23.175325'  &1466:775667<=;:9:FEA=7?8<:67;?AEHFOSLKHE7(Q“ºÄÃÅÅÉËÍÊÍÌÍÍÍÌÌËËÌÍËÍÍÊÊÌËËËÌÊÍÊËËÌËËÊÇÄÈÆÅÅÃÄÆÉÆÇÆÆÆÄ¿½Àº¼¼º¾À¿º½¶¶¹µ°¯¦”k8      ""%  "! $ "$! -("$ ! "!")0'*'+"'%"$#!! &$    % -     -   -  - -   -     - -  '(" #" ##"%0111-12.),/3.0653,+##'(*''"%('''(2% #!   - - -    - -!'''+377ABCDBEE<6763--$!%*++)**-++.++.3.60..4;6<CGIGIJKKEDDDA=:?ACHGJOSTUQSVY_^ahfeffd`afgilnkhgjxw€}€‚ƒŠŒŠŒ‘’“”——–š›ž£¦¨®®´¹½ÂÀÃÄÂÅÇÇÈËÉÈËÉÊÊÉÆÆÆÆÆÇÅÇÉÈÈÉÇÉÉËÉÌÎÏÎÏÒÐÑÑÔÑÓÕÔÓÓÖÔÖÖÕÙØ×ÚØÙÜÛÙÚÜÛÝÜÜÝÝÝÝÜßÝßÞàâààßáààÚÕÅÀÍÙÜàããåèéìíîîíïíîïííîíììêëìííëìïîïîïïîîííîìêêèéëêêêèççççææååäååææãßÔ³p=9^‡]* T¨ÐÛßâàââáááããååäâáãääâãäãåääââäåååæåéçèéèçèêêéêéêéêèèéêëìëìëìêêéèèéëêëëëëëêêêêëíìëìëêëìêëêêéëêéêëèêëèéêééééééêèëéééééçéèéèèéèéèææçèêèèêèééèèèéçææäåäææåãäåâàáàÞÜÚÙ×ÒÄ¿»¶¯©¤¡˜Œ…€wwrpjbSHC>;=;9600/.,'++,,(*!  - - $"$$(*02883422-  %%.#(%) & '(&(/,'4#&+) """$(.++2(!" 9+C‚«¶·¼¼¾½¿¾¿¾ÂÅÃÃÁÃÂÃÇÅÄÉÊÈÇÈÅÈÈÇÈÊÊÍÍËÊÊÊÈÉÉËÊÌÌÍÍÓÑÐÐÑÍÌÊÉÇÅÄÁÁ¿Á¿Á¾¶µ³µµ²ªœxC'  -    #" ! )!! !#(('#"$"!!%!"!      - - - - -        -  - - - - - '##%$!  - $%!!!!$$! !%% ! .400/2601340,1883-&,-).(&)*" !*,'*+/2))('%%*&%,,%$ -  -   #-07IMGU_ekrz{|ywywrmic^[Y^]^ifilmpqtvsy~…’”ŽŠ‹ˆ†urwx|ƒƒ€}y|‡’Ž––“›•’”—¢££¦¤¬¯®´·»»ÁËÐÕÖØÚÝÞÛÝßààÞÞÜÝÛÚØØÚ×Ø×ÕÔÖØØØ×××ÙÚÙÙÚÛÛÝÞÜÜÝÛÝÝÝÝÝÝÜÝÜÞÝßàÞÞàáããââäãâääåäääääãääççæççèææäßØÚàçèéêëîððñòóóòôðòñòñòóñòòòòññòòõôóòòòóóòòóññïïðïïïíëììííëëéëéëéëêéåÚ»|A:df/$X¬ÖàåæèèèèçèèèèêééçèèèççèèéèèéëëéêëêéëììëíííëíïîíîîëììíìïîîïîïîììììííîìììííîííìíïíïïíìííëììííëëììëëììêêéëéëëëêëêêêëéëêëêéêêêéêêéêéééêéêêëëéééæççååãääãßàÞÜØÔÓÑËǹ´®¡’Œ‚upd`\RJF?DD;<4:+(%""!#"% " "" !!   -'1,+.43>B:63+$ -  "''! "!!)'# $! $-)258b‘š £¥¥£¤¤¤¥§¨­ª¬±­°··¶¹º¸º¶µ·¶·¶¹·½½¾½¼½¼¿¿ÀÁÃÆÇÏÑÐÑÑÎÏÌÈÄÁÅÄÃÃÁ¿¾ºº¸²¯¯¯­­¨—pE)    ! !! !!'  !#%$$"$(# #!#""    - -     -  -  -     -       -   - "$$" !"#!!" #$" # !).(""""164201227795348<4.33274564350.5;;CILONOGJF=9>A@VSGC8,)#!!  ###((,166@KQVSgchkpruworxpic]YSSXRT]][ZUVVVWUWYfrwkhgdcXMMMLRVUUSLXaYY^_aa`hf[[^fvxyv‚ˆŠ‘”˜¡®¶¼¿ÄÆËÍÐÎÎÏÐÐÐÎÍÌÌËÉÊÊÉÌÉÇËÎÐÓÑÓÔÑÓÕÖØÙÙÙØØ×Ú××Ö×ØÖÖÖÙÙÚÚÛÜÝÝÝßßáâàâááâáãäååãääããåèèèççèéæàÛàèëìììðòñòôôôöôõóõôôôôôóôõôôôôóóô÷ôõôôôôõóòòòòñðññðïïîïëììíëëíêììêéçܽ|G=^‘o7"(]­ÖäçèèéêçççèèëëëééêéêëéëëëíììëìîíïíîïññðîðñïïðñòïïðîïðñðïîððïîîïíîîîííîíîñïîððïîîïîìííìêîîîëìëëìëëìêêëëëéëêêéìêëêéêêêëêéêêééééèèèéçèéèèêèåãâääáÝÙÔÑÐÌÈļ¹¯¨¡š“ˆ{ml`TQOVR;//-+,('(%"#&$$""   -   -#/121128<>873,  "!$$" "!&%"# " %%-%  $/26>?CBDFFIJQW[blqu}…‰“–—•—–Ž–—–”‘•—™˜œ£§§«­­­¯¯®³···µ·¹º¹¹¸¸¸»º·¸»¾¾ÃÃÇÈÈÉÊËÍÏÍÐÎÐÓÔÖÕ×ÚÙÖ×ÚÚÜÜàÞààßãáÜØßæéëììïðññôôôóóõóôóóóòñðóóóóóñôóñòòôóòòóòòñòññïððïïïïîììîíêìêêêéëëçáÔ´yD=a’n<$"Z¯ØäèêêèèççæèééëëêëêêêêëìëîîïîíïòñðòòòóóóññññòñðïðïîïðîîîìíîîííìììííìïíîíìîìíìíìëëììëëëëêëìêêêêêéëëëêééêèçæèèçÞçèæèççèêêèèèæäâáàßãâááßÞÚØÕÑÎÊÎÉÁ·°©¢–‘‰€wpf[TROID>?745)*-+& $! !!!  -  .189;;<=<<4221! - - ""%#!!$$*! "#&""#$" "$&&%!  %29=E@CCCFEEENMQJKKHJSZY\^`bd[^\`^cjjkrnlkc]`a]gqz€ˆ†Œ‡‚…ƒ…ˆ„‡ŒŠˆƒ†‡‹Œƒ†ŒŒgA""$!   !! #%&$$#&"###! " !#&'%$&*&-+(! x1!#'#!       - -          - - - - - -$*( - - -&($)#('"&%%%%!!$1.>H>2/)# %6;64567556<;DIOPTTVRPRRVTUPPQOX\^][_egecjnllistrosuv|‚{}‚€€ƒ‚…‹‰ˆŠ’–•—š››ž£ Ÿ £§ªª¯²³´±³µ´µ»¼¿ÂÅÆËÎÈÈÑÞäæéìîîñðïòññóóñððððïððïïññòññðòðïîïîîðïññññîíîíìììíìëìêêééçåääãâÜ×Æ¡j;4[€e5!)X¬ÓáåãâããâãâàãäæçæçåèèçèèëëëíííííïññòóòòôðîîíììííìëëëéêèéèèéêéëêéééêììëíëëéçéééêèåçæææçååçèèäåäçæååäæääããâáßÛ×ËÜÞßßÝÝÜÞÜÜÚØÓÒËÃÁÀÆÆÅľ¹´¬§ š˜•ˆ{tkd_]SSSJC@:56;35.'()&%" *!" "    -  1:?CD@>B??;3-0'  #! !%"#"'%)#%%&!"$!! !$#! !  (+066573;89;>8972467:EJE@HKPMKHEIQTZ[]]QPCGNMHOTQV\^`_^ZX][^c_ac\a\XX[e]WV\]ZG1"%      ! "$" !"!"!%  # #%'%%+**'% ! oA! % $        -  -      - -  - - - #,+#! ! )30)-,((..)-*&&(,8BB:+'&"  !#(#&")?A=::;@A@@AHHI>??79>BIME5' &7F[cpv|~|€qocdkr{yi_Wbifdinowy}|~‚„‚wstyƒ‚‡‰Š†{wƒ™¢§ª¬¤ž”™¢£—wJ$  "!$?%)$&/'()&++)0--.55462.3332044245427:8:;638@@<<@<>C>?>CDAABHHGLIJOPONNPVY]XTXZ\]\[cdfjnmonlljmt{€ƒ‡‰Š‘š£¶ÇÏÓÖÛÞÝÝÜÝÜÛÜÜÛÙÙ×Ù×ÖÕÕÕÖÖÚÚÚÛÛÙØÖÕ×Ø×ÛÝÝßßàÝÛÛØ×ÖÕÖÕÖÔÏÎÎÍÈÆÇĽ²­ž{R97DWC( =‚°ÂÅÃÀ¿½¿¾¼»ÀÃÂÆÆÂÃÇÅÄÆÉÊÍÌÌÌÊÎÐÔÙÙÛÛÛÛÚÔÔÒÏÌÌËÊËÌÊÊÇÇÆÂÃÆÅÈÈËËËÌËÎÏÑÓÑÐÍÉÊÉÈÉÉÆÆÂÀÀÁÂÄÃÄÅÁ¿ÁÂÅÁÀ½¾À¿¾¼½¸´¬ £¨¬²°­©ª¬ª¨¢™‘„yy‚~|{wkf]XWXVVM@A=857:72502-&'%*.+&$!'%" # ) ""  - 1HJHKNGMNF@522+ ! !$$"##"$+/!)$! $%2 $%%"%( $-*104005697305327489=A>=?A6FCA>?LOKQPOIF>@ADAEDGHMEHEEFCB?CMLJIIDBD@EQJ=:6;?7$! "!"""!&"$$ !"$%"%')#,+,+-()'"! ##           -   - -   &0+" !  #!"&   1;;<=986:46667;?<<=* !-6:HOQLL?23;DB;:/-;@=69<:ADJMFMKI@>FGLPQRQMD?O^gr|…Œ†~qt~w`<     +$-!((+"(*#%'+,*/*&#! &$%$*,/(**&*+,**&&)23+---.**-../,(,/22-/10--0//567/.35446944899=83/::27AAFEHHR\gx†’›Ÿž¢ ¡ ™——”•˜—•‘‹’Ž”•˜œ›˜—•‘•—šŸ¢¦¦§¢ž™šœŸœš•”Ž‹Žˆ‡ˆvh_TF<2164+ &FnƒŒŒƒ„|{€…‰ŠŒŒŠŒ‰‰Œ‰…†‡‰ˆ€‰Œ‘“”Ž—•”ŠŠ‹‹„‚€€€€‚zxtvnrwuqy}}{|‚‡‰ŒŒ‡€€ƒ}~~{z‚qrruvwzsqprokpllopttqpolhaXWX^dh]ZXY][UTQGEB<6<=><737=;=9496:?A?B<9;?>E?84,-;,# -  $'"!"#!  !&-+(0.0)*--46-(-$"$!##(# !"!       - -   -     - -   -.0,,(+%%&&#-+,*%*+244-&"):::;=B?9848203.-))+/.'  - - *,,+'"$$! " &'%#()%&##**//-%('(+4=BPMRRKGIJPG9%    -   %'(!%/$(%)* !! *+-%%$!! !%$*%$'&**$**/$%!!),+(**,)#(+,.1)'1-*2*,01*&.1/1.,.-/,0,++1.../92+/--,.464174=ADMOZ``^cbdaa]XV\^^[[T[Tba_]]abkjafc`^bgefikfoqpsrmllrrlgca`aaeeac`WEB:2.,12)!1O_gjgehfgicdgkskhnpjfmgacfib_SZZa^]\db`^ZZZTRQQOTSGGCA@DJFFKNOGNNRYTYRMNUUUQNNNOKIGBJJOHEFD@@@AAHHEFFOFFCE<<>?9@DDA?<;;<><7783*+221412,+/2-/-0711&()+$$" $($'''!#"("""!"!,!!  -  #Fmƒ†|umd`YUH;8/$    "# "!!%"&'"%)!!  0.,,..2/,34+)!(2354785><@>757549BD<@<92+44'   $#!  !#""!#$&#$ $$%$(/'))*/+.*3/../"  "-$%"!   -            - -  -   "4ECA78:987;@=978;=BB>;:611.2968DLW]a_cXTRPPNHKFDBD?;884014513847//'#.)+)($10++-0/0'&./.-..'.-&$"('" # -   !$++'-/''&&*(        #%#))('#"%'%%$&++) !--.'(%&),(,.()%%%+-)))%)'#!)/00.+3.**+./.*&+**1-,,,/,/,)'+(*,00/,-/''.1/2-.15;8>@:??=D@@?BA@?CEA>@:>DIIKJKKKIOHLRJPVUPRPSOMUVTSQX^[XRMJKLLOXWQPOE@6-*#$)0&.AT\_Z\`_a`\[]dicaed_`b`\\ZVSMGGIOFICLPGFKCJG=DB=?@8;513127;8<=689<;D::69896784?774106156=@4>C940426;457626445232:7.1.*,-0.(*('.0.0-+$.,&%#&'%")(&)((''%&& #""#%%$"&/     - 7aš›—~rjYJ930& - !$+$#%"$$#"+(%%%$!!&/1,'0///164) */1323;?:=>6349>89?=;;<>=656:=73;;830/.9283.*277>9849B>9;1443-1( , !$!!""""%%  "!$%$%*(&'$--,(,*,+!"#" "!$"!      -  -        -  - -  (EVZSPKKKHGJOLEABDEKJHHEB=@=@BFGLPUQOQhCCDBC@=>746363/-0,)$&%./2''$ ) &'$%"% $! ""'("$ "&%""!"      -    -     & $%$!!+(.##$%&#$+,,% ")*(./(,+0*16,$%%#),'#&&&(*)&*,11-)$2<1480'%)*++)-.-,-.'(,(-)--0,2+,-&*+*+(,37988:96659878=:=:5864389<>;>FEF>>C?FCFPRLHKGGFFIJKJDDNNLKHJJJIIQKLGCB7/)$ "&(%*CT]WVY^`^\XY[^^^_[b^^]YU\PIIDEFQDHA>AHEC=B?>98@79=494021251145244-468;:88282/,01/51394@5..,),-'.4385=62.+*.25154844222/2771.***/(-/)$'&/.++%&%"%( %'&%(&(*&'($(-(%$&%!##""**"(/%%" !"! - -  - - -AjŽ›§¥¥ —†leK7--)"   "))"& !$)''&*&$  ',571./0/-.1.)+,+375=;3=B79571:4;9;<;464409?68>=73/.22710/*-693751047;63/04/'# !$!$$!!! #!!#!"" ! $"&,(#&(%).-*%*% $' ##& !" #!&"      -     -    -       - - 1J_a\RPHC@DDEB?AA@A?B@>><<>9;B?8;>@BFGLLJIH@BEGIGKIDCEHHFCCLIEHIOLID<7,'#&#"$%"-BR^WWV\\^]YTX[Y^[]a_^\WXWPFBFC@JKH?>?@G@5=?=8426=982..,1-./321-)),,-822503323+0.0230-2;9)('%*-),-26532--.,+,.511654136,*5542/,-.*&,2)%)/-('&&#')($4&'$#$++&)&%%+*-'%%&$%'&!$&#*'#'$%  !    6[uŒ™ž Ÿ–w[H;2,)+ - !!!! $ $'%0*()% 2*0.-//0/+/541-.1324;9<53;:=45256867;:664/4736<<2/--,2/01-'+06-,2:85595/'*+)&!  (# !"! # " #"##&#"!$$)!&#&&*'#$)%'$ !! #$2#$   ! !   -       -  .GVSJF?=223547007:;650//,0/6/.-5465*%+&-).*#$$('&%%+*-(%(#$ %&-" !%# #"!!!#!! - -    -  -  -   !#"#$&& $''"'*)+,-+#'.-40(&+)-***/+"%%#&'--%&%)/,).)')&&+/)(%*6,+*+-/''$$((+))'(+,+)-/-'-)&+**1640285<53:9873;=66346.6=>>8CDHGFF?DABDHEBJD@DNOF?C@;2($$(!$) ,DU]YY\]^\YTT\]ecYZ^__bWWQNDDA@?FH>=7<@?@9796:8/366=1,*-00-,1..+,+(,1/2/.+4/10/+05713..34(*("'.++0454+/*0-+'*1434343,'0.)-10../-('%%+,%&,+'*'("&($ :,)&#!%&"##''%..&('%&$$%%%+%"""   - .B^oˆ‹uT=74/-,* -  $$%%$)*/'!!%).30/22./3510(+,33128>997896<;742089;=752215;B>3/-))//0-'&,+4@0*265135-#(%'+! %! #!% &#! !$" "!"$""&"')$)%$#(%$  !"!!"" "!  " "!  -      %4E@3--&'$('+)%'-01,++'$%'-+1"$..&$#!"$'((!4!%#"%'$%%$#!!%(#!"! )#"!%"   "   "##%#)**#&('#-**('-&$*/1+)((%&+*,+'" (#&+,"$"$(+'*)++)++('+###4)),/,(&%#"('*/,,*21/+,.''*'*-+(167524576<8@J739>85681.15?:<::559=CBHIKFJEB;;<;DKFC@DAAABEGE@@EGIB>EC:6/$*,#%')=LWW[\__aZMMR\ig^W`]^[WRRK@A@;>AA<7::>:<;874.112-15.0),-*2)+.0--.&/21-1-0/2,/-)-143021*'5*,(&-+(,163//00,++,.772063+('+.,-(,,*)%&')(-*),,+'+)+%&' "'(##""! &'%"'()&%($!'$#--'!  -  -  - (:TcemynT4+033,.(  * $!!#'2)"%.% "$%-22*20/0143//0-/53;><9995:5;B<73-3:>=778653;:;@EB=ABCACBEDBB<@D>2.$2("( !(=IUTTY^]\TOEL[ab_XV]]TLILE@A=?B@;;:K8=8;;75.,/-0+)04/(.-+)./*/'+----4/.5529)()*..110.),6/,(H %'(-./*.0,-/.0.,090213,(%&*-,)*'(',.*,---,))-++(("**($$## #$$"%(% %('&%)&$&&$%+-)&  !   - "DD50-*'),%+.)((*.0*&-.-30/,0-..(   "   $!"!" !!#!"$ %# %"!"!!#!'$,)'(%%)"$  % $! !#)!   -  $#!##!&! ! #%!!#$$ $%&++#'% '&"!$%!"%"'#&$!! %2*!#"!!"$ - - - - - ' -  #      % !(!""#!#(('!"""))+$,+&"(#$ &%(+($  !$$)+.$%&%#"%!$#&'%$$"#$!&$&#"%%&##)-32/*'.,/1-.%,)&*&#(**14/534411638631//,0,,-63633564;@?CDDF@=A=<:?=AECB=@CC@C?>AE@?<>?>=?:-)($!$'!*:KPSQ[Y^TRLIL^_]YTYSNMIMLKF@BA@><9>=967;;0-.65.+4.134)'*-')0/,'('#%.+1/725+))-+-,4-2*%*4-*'$%&"))//-/,+..1-.,2413.2/'),-++,,')'&-+)*,(**%+(%*%+0.%)($#$# $&&$%$&%&%%)% $%&),(*&$#  -  ;N\cd`N7"#211-) - )!  %&#$ $#$%-"!($%)(''-""&%02).+0780-2/+),'*317>996439?HD>7/9;=::<:?8>>>=2/1,)$$+&%(%&#'0+,,()*0**+'&0$  -  "!&%&'$!"!%#"!"$ !!#"$#$%,,''&*("" !!#""%" " $" "$    -     "!#%%"#"$%$ %$('"%'&'&$%$"# !##&"/8   - - -   -         -  ! !'(&"! #'%"%,%#"$&""$%##!'& !&**'&##)"!##$%##%),1('!#!#####++**'(04*,,,..-(<+&$$'*)&)*+110..+11700.-0.3..'$*13531,47:?:;@?>;;>?@;@=>?A<;BB?>>>?ECACD@B<<>72'%$$$"!';INYWXZTSMIKK^b[MQPNMEGHIGG:9@@<8=87963582,11,&)02245-*.,**'/3)&%$)),,0551-.,-/.047*+,,320*&)))*)-.,.2/10/-..140.14.-+,.163,21'&(,*,,*/+(-/,,--,)'&#"('&))&()+++'&+&'##!$&*(!&!"&%"!#"! "%  - $2GX^ZZC1$-*,**%   #"%""!!""#')('"$! $#&("'/"&,,031/)0112/0**'),)*388>;5458@HA@64:?@GB==:@BEAA<3.-#'#%%)" ')&()-,()**')'*'(&   !!!  !!"$$$ +!!"!"'#$&2162)&((!""%#$#! %$!$!$!" &        #!!!'"#! $%%()%#&!!###!! "    -  -  - - -     -      -   -!!"!  "!  "& !"$)'!&+()&& "" !$"(**("%%.('' *&'##$ ""((*$ #$$"###%*/,+(&%*&(*-,+1(AS,,*('.+.1.10')-2/341+'3)/.,($'.321-1448:6:=@?8:8=AA=;:@@<;>==>E=?EDABIII>=A2,"" &#! "7KMTXORVPJHNIXYULLIMLF>CDGA:9:@86<=9341544534,)+-04126/1.+'/9-.,(#)&-/11211/200253@>?<6>>B>?CE>=8>62$ $#$%6LINNNLOLMJCNSLHKLIKJF@@BA:?9<:92@9899:444844,,/3-.0035621-1/1).,)-.,1132.;23/2:775/-,3164-%*0(+-*.0140+*-//121.-/0-/2./60234612),5.)/.,*'++20''2*&*,1-',-/*&*&%.+&-&#$$& #'$!&',$##"""$"#%$"! "#"   5S[^QIJ+#+-+(" - & ! "&#%"$),.61+#+$ &'+&),0-" #'.-02)06262,)**)$*,33:>75757;??==>>@IEGC@AEKGGC90&"%&+")"")#,+**0-//&$)((()"     % *# ! !""#!&"$#" " %%&$*00(+22.($&!!%$#% (! ""!       -  #" &  -    - - - -  -    -          ''1476,%%'      "'"&!"!"'"#%"$"((!#! $*$)'$! '!""'+,'%$&%%*$$+"',$"#"$!*&&%'&#%"#&&&$"%#&""!&().,)+*&",(&**/../**$)+*+4000-+/.*+*,)(.0///1/327338;>987648;9<988<:8771  - #$$.-64-3482,-(#*,&'3855=>;8<>5??>@?@EFMMJE?EJHFH?3.'((#()&($!!&+/14620)',,.-.(#! -  $%   #" "!#'#" "!"!""!#(,7<1,))%+&+"!#%!"" %% !""  !!           -  $ -     -    -  - - - - -  -  -      !(9?EBFGBHOMLIA<=?FIF>:2-(($(,*+('),1579;298-10520+(  *&  ! !'"!"#!"#!"!!$"""% !'+1:>9-*+*&%%'"#'(-$! "(',' ! !  "!!   -     -   # - -  - 5  -   -   - -  - - -  - -  - -    -$05SafkaK8(' "&2(  -      $! ' %+%'$"!!"&' &$ " %)$$#%##$#$% %#" "$&#!!$&$'(%"#"""%)&# ""!!"%##"5'!!),')(.2/))10).-*-&$)(%)*,-,-41-&#$!'+---015186.524/.231357584414473:600464158532775510%!%")1<>JIFCB=C@@DECC@HDC?A@=:5660388..067::66240++.*+)&&*/-43/043-1./2/156.,0.0/--024881.,*++&&'(1/.,.011+-031-)-00+),-...,.//,+&/03/..,)-0)).,,&%++/-,(-.*)'($$(&$%(%,*$%$! %#""%! # ! ##     ,J]d`U@E!(,17.*   ! !!/,0883207-33:)$"!"*3;934.% "/469596842@326321..48:>=?AKD=>>GFHECKRNJJDC<=CDEB:4/,'/2250,-.58DFIJDEB:7:654)' $"!"##' "&&#$#$ "#!$$#%.90++*(&#$(" "!'%#!!"#%"$"!"$ "#!"+!! !!"!   -  -    -     - -  -     - - -    - -     - -   -   !#+?ThrlYD4)&(&(   "$!" !"$("  "'(" ''%)(&"!*!"$$$$$" #"%"  !!$%! "# &##"#$"+#$! !!"$$"(+$%)&+*+1.%%,**+)'0+%&*'-&-1/,$&',,.,.000624/3163.0/0226487./3;:0021.115/-132173520-+&""#!'2<=ACE=:;=>>?AFCDHC?>><<:813434560-39<96/2//+-0+(*&.),222,02340-06556412041+65.(576-+'+*,."(//-*%-+..,-/0/.,+/,*)+-3,))*-6+,,+,.-).,&,)(%)*$$&#)*),''*()#%(%)&!+'**($"'#!&$"#! ! "!! -.G^ebZL<& .12:5)   """%##$%0)+0773+02=E?A81)&(1;?>80-  ,:=AHGGAC>@?>>>16816//177460300../,,&,-*.-05./5/5.52764431491+1+(/,40/3/*').*(/)('*0,,..,.04204+0--)+2,)()*'*1-+**.&*(*)*+$#'&#'%#((-,)&'($'"(##$!"*'&)$$""'"!" "!"  "#  3J_gi`W;%"'04465$- "$%&"&&'(%%0023:8403:JVWVLB64;AQVTI@;0&AWdhoofcb^`aeb_`^WPNRYX\\`ee`cegee[YZ_Zkbb\O[\[RPPMJFEJKGEJFMRZek~Š‘Œˆƒ…€~xn^F,    )! " #%#"#&# !""&""'*%-.0&'# %$(&&'#$")%$' "!###$# "%##%( !$!#$#  !              -  - -     -  -  - Y    - - - - -   -):EYeifWB9,+,%$#   !"!   " &$# $""% $%!##$ ! !)! ! ! #! !$&$$%%##!'.1,/+--/*0-+,*))'+..+.%(+)&*,.2+(,.32.040.2/-/2-1///0,+(+0.'(,./0,," ",033544281-6=:>>9<@>:95:<R&.,,+)&,/-*)'+-.0.1/)*++1*8/-/+'*,(.+('%#)*&(,0&*1-,))&$"%%&!+(/'%(,' $*!%""%$&+%#$%!"#"" %! #%"&;Qbljg]9"!,66:;8% "%*-0/2059:567;=>@AMPOQWOJMYiy|xpha\fs~ztsmR3,^Ž’–™”’’‘‰Šƒ}{‚†„ˆƒ‡…ˆ†}~yxxwyohqmka_b]ZYVY[ZSQV[[\dt‰˜ žŸž¡žš’ƒ_:#  "!" ! #!'##!!$!$$!')%%/,'#%"$')&#$$#*&'%#$$ # !$""$"" %'"# $)! "! + - -      -             -  - -  - - - - -  - - -    +@P`flkYF910,.'# '   "$ !  " !#% (2# '%'.'%""$)/*//,/.223-02)+0,-024.0/,'(0-1-)0,2+/-0/*-42//120-,+...+,+-.+-*.40+&&$%''!  *//36573>7579842136:136675235./.+4/-//,-++,01../*,0.2./2461-014+>/3/0/21-/305020217853130347347666658:;991/453=?8<>:<::;7478784;<<<<;=8?B>;8<<:96;=>?B=@A@@AFDA@>BDACBFOHFHLCFJGJJMKIIHIILHGGGHKKOOKLJKNMKGFGGKWgpvy{n^A,&2;;?7( 2HWYbhjgiptstxxz~|€‡‡‰‰Š™¢¨¦¥¥ž›œŸ¢¡£¢Ÿš€L% 0uŸª«®²±¯®±¬¬­¯­­¬©§¢¤¥¨¥§¤¦¨¥¥¥¨§¥¢ ¡ž››™™–’’Š}}}x|}~„~{yy~ƒƒ› §£ª«¬¯­ª£•oD&! #!"  ! *% ! !!$" "!"(!$&$'-,+!$%%)''*/" %%!'&'!" !)#" %!#%%!%-' !#"!"! #'    -  - - - -       -7     -0' -  -  - - -     !1FWbirpZD702/.,"   &'!"!"$# #$$"%$,2&'),/-*,+*//-/,*&-*%./*().125641006:759569?<<;::8<9>8:;A;;A:98<9><8>;7?9:;9<>=;7?::=:8:7==B?A?>AC?CFEB@>DAA@<:+& ,:DHNRZVUS[Yabflrwsqoosnoqrj_]Z^WVYYYVRROTNMSMH@=BJJGEIGJHISPMNLNKLPMNQV\YVUXWVWZab]YX[_``cfcbgeeagnmkghijjprnztvvvxxx|xwwvy}€}‚‚ƒ…„ƒ††‡„ƒ„……ŽŠŠ‰‡ˆŠŽŽŠ‹†“™–”™™—““”™™™”—–—™š™–——˜›ž¢¡¥¢Ÿ ¢žŸ ¡¤ ¡¡¢žŸ¢¥¤£££¤¢¤£¦¤ ££¥¦¦¢£œ™— £¦ ˜tO2&1;G<80 (NvŒ”’—œž¤££¡¤£¦§ª¨¤¡©¨§¨¦¨¬°µ···³³²®®±±¯°®¯¨Ž[- 5€®¹»¾Á¿»¹»¸¼¿¼¹¼»¼¶³µ¸¶·´·»»»··¹»¸µµ²¯°®®¬­ªª£™›”•œŸ¤£¦¤£¤©¬«¬¬®°´¹»¾ÀÁÃÅÃÁ½­W1#2# !" !"#% !"###"! "&$$&+*2+($'+,+0*+# #!"!!.)!!!"!"  #'"!$"&!$ ! &(# #    -  -  -    -        w+ -     ' - - -   -   -     -!#5LVanunZB814-30" $(*!/./*'*+./'((*')($((&+*'*."(**%%*0..&)),.1000*,-3210...*.432534355659>=GD?CACBCDKJHLOPS[LRPSQMQMMNJRORMRUV[abifbbijgjfjijkkmjpspomolsopqsprppsninnjnstvprroqurkiljhnifimrtry|vz}|€|z|ƒ†~‚~~zR2%$.Mo†’˜›œŸ¡¤¤ª¬°´¸¼¾½¾¿¿»º»·´ª¨§ª¥¡Ÿ£¢¡™—™˜—–•’Š€zz†‹ŽŽŽ”•“”•”•‘“““šž Ÿžœžž¡Ÿ¤¥¨¥¥¤§«ªª«­«¬«¬¬¬¬°±±°²°®³µ¶¶µµ¶¸¹¸ºº»»¸º¹º¼¿º¾½À½¿¿ÃÀ¾ÀÀÀÁÁ¿ÀÂÂÄÁÂÄÂÆÅÆÅÇÄÂÄÀÂÇÃÂÅÉÆÅÇÇÈÉÆÈÉÈÉÆÄÅÇÅÅÄÇÅÄÄÃÆÇÇÇÆÄÄÃÃÃÆÃÃÁ¿ÁÀ¿¿»½¼½¹·¹¹º¼»¸»··´µ³±´±®­ª¥§¨©ª§¡zM+"-6?66/% Hm~ƒŽ‘˜™•—“‘–•“‘–•’•›Ÿ©©§¢œ–’”—’“”–ŠrL(#>‚¯¼À¿ÃÄÀ¾À¿ÃÁÀ¿ÀÁÁ¿¹¸µ·¸½¼¼¾À¾¾¾¾¿Â½¹¸´³²´¶²±®¬¨Ÿ›Ÿ¦ª¬°°®³µ²¶ºº¼½ÃÅÊËÏÒÕØ×ÕÓÆ«q9 $"#! %#" "!!&!!$$!$"(#$%&&#'%.3+*.-00/*,'#$$"!!$%*" !!!!"# #""'!$"! ! #+  "#%&!!     -         'C - ' -     - - - -  -  - - - - -  $9GVesvn^F>54472)&+)//.+0-,,+*++*(,.'')%%*-''&$'(+'"$')-,&)+..1-,,/4:49=CA@FFBCNX][[bdfjoe_fgbgc__YVYX[ZUSSXWZZWUXdbb_cba`ifggcdfppojlkkpokrqmquststw{}„‡„…„ƒˆŠŠˆ‰‘’‘’‘“‘“—›œ¢¥¥«°±´´±±²²³µ´³µ´²³·µ¹»¹»¹¸¼¼º¸¸¶¸¸¶µ·³´³²³³¶¹·º¹¹µ³²±­ª©¬©©©««¯±´µ¸º¹¸½À¾¿¾ÀÁÄÄÅÃÅÇý‰F-+B€³ÅÍÒ×ÖÖØÛÞãâäåçèéêêëìëèççåããáßÝÛÚÙÔÖÔÏÎÎÊËÌÇÆ»±²ºÁÅÆÅÅÅÇÈÆÇÈÇÆÄÆÈÆÆÈËËÊÍÌÌÊËÍÏÑËÌÎÐÐÐÐÏÏÑÒÑÓÒÓÒÔÕÓÖ×ÒÔÖÔÕÖ×ÕÕ×ÖÔÔØØÖØØ×ØÖÖØÖØÙØØÙÙÚÚÙÚØØØÚØÚÛÙÚÛÚÚÙÛÛÚÜÚÛÙÙÙÙ×ÚÛØÙÙÙÚÛÚÜØ××ÙÖ×ÖÓÔÑÑÐÒÒÐÐÐÍÎÏÍÉÆÄÄÂÁ¿¿¾¹¹¸¹·³²­­ª¨¥¢ ¢¡žŸ›š–—™Ž‹‹…€ƒ€ƒ|vreK3"%!-8/48+!4AKVTTV[^`__]\c\]a_ffhfb_hr‰‹ƒ~tc]fjh``ed_WJ9'!9ƒ³»¿ÁÂÁÂÁÁ¿¿¾ÁÃÂÁÁ¾»¸¸¸¹»º»¿À¾¾¾¾ÃÀ½¹·´µµµ¶´±°­¥¡¡ ¤¨¯±­¯¶±¶´¸¹·»ÀÄÇÇÎÑ×ÛÜÝÜÖÀŒG*& "!"!!!$)#$(" !"#("$(,.2/3/0..+*$'#"# #%%%#$'-#!&$# "  &#"#& " !!$"# !###    !          -      -          -        &>M]mwto]K?<85720:Tbfgchkgacaadbdfc`Z]]\\VX]^`^adc_b^begjhmknompnos|{~ƒˆ‰‹Œ“–œ¤¨ª®³µµ²³´³¶³µ±¯±®¦¥£¤¤¢  £Ÿ¡£¤¤£¦ª«ª­®¬ª¥§§§©¬­¬³´³²´²´µµ´¶´¶··¸¸¹½¸º»»ÀÃÁÁ¾¾ÂÁÁÁÂÂÂÂÅÆÅÄÆÄÅÇÆÃÄÉÊÊÊÌÎÎÒÕØÚÜÜßÞßââßßßàâßààÞàáßàááâââßáàÞÝÞßÝÜÜÝÛÛÛÛÚÛÜÜÜÞÞÝÛØØ××ÕÓÔÔÓÔÕÙÛÚÚÞàÞßáÞàâãåäæçèææçæåàµe6/PÏáæëéìîíîòóôöøúøùø÷ööõôóôôôñòííëèééèèæåãáßßÞÜÙÏÄÆÍØÝÚÚÚÜÝÜÞÞÜÜÝÜÜÝÜÞÜÞßÞàÞÞàÞÞÞßÞààâßßààßàááâãáâáâãâãââáääåãâáââäãâàãââãââáãâããááääæãäãáââãâãââââááâáâáãáâáàÞÞÜßßÞÝÝÞÞÜÝÞÝÜÜÚ×ØÔÐÎÍÈÇÆÈÇÄÁ½½¸¯«¨£Ÿœ•“Ž‹†‡~ƒ|urnigfged^a]_[_ZWTQOKGIEBA?D=>?4+&(/777'% ).*.*+,/475388>;FJGCFEAJWekniYVD@MMC@KHB<62%6€«·¹½¾½ÀÀ¿À½¼¿Â¿¾½¹¶´·¸¸¶½¼»½½½¾¿¾ºº´²³¶µ±´²±±¬¨¨¦¥¤§¨¬­­­®­®²±³±´¶¸»ÀÄÆËÐÕ×ÓÁM& #   !##"$"%&# " #!"),./40.-,'0-!!!) !#"$ $!(()"#!#%&$#!"$#"!# "% !#""% ""!!   -                  -   - -  - - -  -  "%AZamzyl^HB;9:77>X”šœ žŸ›•—ž™™˜˜šŸ¡™š ¢¡¤§¥¢«ª§«««®¬¬®¬ª¬¬©®®¯²³µ¸»¾¿¿ÂÆÈËÍÏÑÑÑÑÒÔÒÓÑÒÓÏÍÑÎÍÐÍËËÊËËÎËËÎÏÎËÌÎÑÏÐÐÐÐÌÎÎÍÍÎÍÐÑÒÒÐÓÕÖ×ÓÒÕÕ×ÖÔÔÕÖÖ××Õ×ØØÚÚÙØØÛÚÙÙÙÙÚÚØÚÜÜÜÚÛØÚÜÜßààãääåçèéèêëëëíìíëëìëííëëêêëéëéêêêéëëëëéééçèçççåççççèèçèçææçèéçææçæèèéëëêëíîîíïííîïïïîïðîîïíèÃzA4R¡Ôåêëëðððòõõùùøùüüúùööøø÷öõôñïîìëêëéèèéèçæçåçãÝÕÍÌ×ßàââââäææäääæãååæääåææææççåääååçæäçåçåååçææææåææåæææçæçéèçèæåèçæææçæçæçæåçèççææççæææææååæääåäæåççäãäããääãááàÝÞÞÝÝÝÞÜÙÙÖÑÑÐËÆû·²©¤žœ”’‰‹€xnjd_[RRNKNGHFCF=9;<649<63451333,)&$&%'#%&#$ "'3623& 1 $()#$+-5@:::588GUa`__T?8=C@8;B?91+&2sŸª°²²°²²´³¶···¸·µ²°²¬¯´²²µ¶µ··´µ¶¸¶³¯¬­­®¯¬®«¦¤¥¢¥©¦££¤¥¨©©§ª«®°«¬¬«°±³¶·¹ÁÃÀ«I$  $ #"!"  #%###" $#""%10-35/.11,+& % )&##"#! ""&#$ )!!&'(!""!% )$! #  " ##"          -                 - - -    ",F[bjw{n^KA=8998Be•¨­µ´µµ²°±²²³¶µ°±±±´¸³¶··¼½¿ÁÃÂÄÄÇÆÇÆÊÈÇÃÀ»»¹»¾»»¸¸»½¾ÂÄÆÆÈÈÆÉÎÏÐÎÐÒÓÒÒÑÐÑÑÓÖÕØÜÛÝÝÝÛÛÝÝÞÝÞÝÝÛÛÞÝÜÛÝÝÛÚÝÜÛÜÝÚÛÛÚÚÜÝÝÝÞÞÞÞÞÞÞÝÛßßàâàááàáâááßãââãââäãããáâäåäåäâåæçåçèêêëìëìíííððïðíîïïïïîìïíîííìëììïííìîîììëìëëìêéëéëëëëììëíìíððîìììíîîïððððñòòôôôóóòóòòñððñïìèÃ|?1X¡Ñäèêìíðñóô÷÷øøùùùú÷õ÷÷ööóóððïììêèêêêèéèéééééçáÛÖÕÛâççèçéèèèéèêèèçèèéèééèéçêêçèèéèéèçèççèçèééèçéêéééèéééçéééèéèèèèééèçèèèééççéççççèèççèçæåæèçãåããäææäããßßáàßÝÛÙÕÔÐÏÎÍÊȸ´­¨¨Ÿœ‘Š‚zpd]`e\UPOLFBDA<9/./1.+,1(+)(!' 1%#( #"%&'48653 & !#!&2;:;647>O_aa`TG;=>B=5@E>5)##"  ([}„Š‘”“–•˜™›Ÿœ™————–›Ÿ¡¤¦¦¢¦©¨¨¦¤¢£¢¤£¥¢£ž›œœ Ÿ™š—™¢¤£¥¢¦¨ª¨¥¤¨©¬©«¬®¯¨˜h=$ !! $$  " #"(" $ ##($$$"#" #%+16-314,,-1"### ''#%#%##''&%%##"!#%#""#$ ""%"%"## ## "#&# " !"      -      -    -  -   H)&/G\chqvnbSGA@@?7?\†š¤¨«©«§¨§©©««¬§¤ ¤«¯«¯¯µµ·»¹¾½¿Â¿½½¿ÁÀ¼¹µ°©¢›œ ¡š˜™Ÿ££¤¦¦¬­«©­±·´³¸¹¹¶·¸»¼»¿ÆÇÌÒÓÕÖÕ×ÙÚÛÛÜÚÛÛÙÚÝÛÚÛÜÜÛÛÚÝÛÙÜÚÙÙÛÞÞÞÜÜÞÞßÝßßàßßàâãããåãâãäââååäåæäææåæççåçæéèçæçèéêêëëîíîðïðððòñññðïðñðððïííîíîïîîïîïïïîïïïîìëëíìêêëëííîîíïððïññðïîîîîñðññññóóôòôôóôòñññðïïîíêã¾w@3PœÑâèçéêíïðòóòôôöõôôòðòòðîíîìëììêéèéëééêéêêéçèææâÚ×ÝãåçççèèçêéèéèèééçéèééççèéêèççèèééèèçæèèèéêéèééçêëèçéêêéèçèæèêêéêçéçéççèçèæææææåååäææåååääâßÞÜÛÜÜÚÝÖÖÖÕÒÐÍÇÁ¼¶°©©¤Ÿš“‹zyqkd_UQJEB979=94001200.**!"&$" $#$  "  %&=<3:2#('!$'059=528:FUad`cS=:>BB78!'(&"!&"&"#%&$"%#")$#%!&&"#&& !!"&$ !!" $!    -    -  -     -     N6(/J^egsyp`UPLKD=57DZku~~|uvx}€}wpns|€ƒ„‰ˆ‰Ž‘”˜”’•”–’’’Ž‹„{widd`e\\^affhnmoqrutw{€‚‚€„‡ˆ‰—œ¤«®­°´¶¸¶½¿¿¾¾½¾½ÂÄÁÃÃÄÄÂÃÆÇÈÊÈÇÇËÎÐÒÐÔÑÓÖØØÚÚÛÜÜÝÞàááßßÞàáåãääãäæâåååæççèééèèéëéêííïïðòñññòññññòñðòñðñïïîîîîììíîìëïììíííííîìêëëìëìëîðñîííîîïïðïîîîíìíîðñðññòóòòóòññïððîííîìëéá¼zB2M›ÌàæèêëëíîïíîðîïïïðïíîíìëìëëëëìêæéêêêêëêëéééçåæàÛÙÝâååççççééçèêêééèèêèéèèçèèéèèçæèéèèèææççèççéçéåæçéçéçéêèéèççèéççæâãâäåååããááâàßÝÛÚÚÙÙÙÙÙØÒÍÈÇÄÃÀÁ¿¶³°¬­§¢™–Ž‰€umkg^\XNLKGED=@74.+-.)%)*('(%**%(""#%! *!  +;=7:=<;7;@?7.,-,+&/679=>@??@EEECC@>>AIRPSRYXTQNMMIPWSTT^ciglmiecchdcfcZWVW\^`fhlpx~€ƒƒ‚ƒ‹‰Ž†uT/  ! L"    &)!"!"!"$'""%!$ $#$+,++*,03;201%$%"*(%%$"%%$&#'&)-##"$&$"!""%%"(!&!!#$!"!  "  ""%           -  -   !(3Rffhvzvjcgk_NA86759>DE?FECB>=BFF@B@ADHNOPPMTPNQYSQXXZXRRRNKC==:883*4766:=BA=:?>?CBHHHIFEFFHLOPX]cgedkqspns|€€xx|}~„ƒ†Š‡’’”—˜š¢Ÿ¤§«¬°·¸··¸½ÁÂÄÄÄÅÉÊËÍÏÑÏÐÑÒÔÕÖØØØØÛÞÝÝßáâäæççéëìëììíìêìíîíëíëééæçæåæççèçæèèéçääéééèééèçæççæèêëêéèèçèçèéééêêêëëìììììëëëêêëêêèèèçåæççåäâܵr>2HŽÄ×ÜââããââääããããâãâàâáÞßÞÞÞÝÞßáâÜÖÛÜÚÛÚÝÞÝÜÚØØ×ÔÎËÍÓÖÖÙÛÝÜÜÜÚØÙÜÝÛÜÜÝÝÝÝÜÞÛÙÛØÜÛØÙÚÛÛÙÙØÙÙØÙØ××ÖÖÖÖ×ÙÙ××ÖÖØÖ×ÕÓÓÑÎËÇÄÃÅÈÉÉÉÂÀ¾¿¾¸³±­ª§©©¦¦¡œ‘Š‡ƒƒ€{{vupkle^WSRPLFB:?97703010+).,(&!#!" #!$#)( ""#"$.?=:5<=@>2/,42+" (,,./03224347421416?CBCCGKD<:5378:75>IHKMTZRNNMNHKFF=89<=9899;EFJNLMQSOSYZ]]ZS?-!"%& ""!!#!! !!&#!!"$%$# ###! #$$"%#%',*,00.20-.5""$##&%%+ #&+$%"#'&($ $!$#!!""" $#!!$ %! "!!" (       -     -   "'5Seggu|yz‰ŽydN=3+)% &*%)#%&!#)$+'/+)(*2/*14./-/--5-/./02,,'*&(%"#" &%&%"%(+(2,,),*0233+.(+,0../233..65;=9=>:?>9:<7>=46?@?BAFIEEIIMIPPNOPUXaa_fjjhomty}{ƒ„‡‹‡‘Ž‘“—› ¤¤¥¨¨©­®¯¯°¸½¼½ÀÅÈÊËËËÊÊÉÌÍÌÌËÉÄÆ¿¿ÀÃÆÈÇÉÈÈÊÈżÂÇÍÎÐÍÌÊÊÈÉËÊËÌÎÉÊÊÉÊÉÇÊÎÑÔÖÙÛÚÜßÝÚÚ×ÖÒÍËÊÊÊÊÉÉÆÃÄÂÆÆÃýµ‰M2+;`“«´¸¹¹¹¶·¶¸¸¹··µ³´µ¸´®®¯¬¯¨®­°²«¥¦¦§¨¬­®°®®©§¥Ÿœ™šœžŸ¥­¯¯­¬©ª¦ª«¬¬®³²¯¯°®¬©§¨¬¬¬¨¥¤¨¦©¦§¥¢©£ ¤£¢ £ £¢Ÿžžž˜˜˜‘Šƒyz€‚‚xxwymhdc^Y[]WUQQJF=>=;:=@?89?:;1152/2.-*,*$*)'!$$%)$$!!#!"$!"##" #"   - "8DHGL=+  $%*(/3795/:CO[cd^UPC@@B:7;?==4..28<4&!'%%#&%))023/0,-.13419>?CIC?:82+/33+.;BDEEHLFFGDE>A>:4/+).-#''%%)'.,/5424./2168/(! !$"!! %"#!$!&"!%("%#&%""%"&$ %$!#$%(+.32+/,,*)("$*)%(%#&'$ ,$"%+$%$%!#"" $$"$(!$ !! #!""%$!"& !  #"# !       -      - -     *7Whfmyy{yŠ—–€kR=1%"#"!""$&&%'$%%&(*'&%#&)*($#'+/*(&%#!##+&#"$$&+&%)-*&,,$)&(',0-,00())//-746+1265#-()0)+,--1/28.356472/4143:B;7;@B@?@FJLJMPLSSTYWTWRT]cfgkjlojorvxxx}z|€ƒŒ“˜˜“•š‘”™™•–‰ˆ‡‡ˆ”•‘•—““’”—› œ˜—œ™š™——•›—–——••—œ¢¦¬±·º»¿ÅŶ·±ª§ ™™—–š”’’Ž‰‹Š‘‹‡~Y;)'(AYr€€„…z~}~z~~}xw|ytvprttrqxvtokkkkssvuosslkddcacclluvvswrnnkooqy{xsuvxuqpmsrtopmjlommjplggkkkfklnlhgefhlfe^ZWWWPHMRSTSOOJMQIHCBA?><;9896305--1.2/20..2/0.1)-2*,&''$).*$"""$'!""  !! "$! # #! ! # $      #2MZ_\YN8()  %13699842AG]epo`XMCHHBCB>=625.-/(.;BFEHBDKKJHCBB@92,(+'&"#$",&%&%-2..,'-00))% ""  ! "%!+$#"!!##!"# '$'''%#$# %##)$#$%%)**-1--0*(+&''(&!'!""(,(& &"##$"# $!"" "& &$$#!$%""%!%$%###!!"#$!! #!!!! %"   ! )( - - -   -##-A]mkpvrpnƒ™—‰k\C2(# !! $"$"%$"*.#(%""$%%(+$&(!!() !#"$" ()0&'&+*(%)+*.//.+))//),67*+1/)*%'/(#&'&/*('(%',--,-+.+&".,,+2047;6/532:;:<8878:;:6;;.'#-=IPRTWYSRSPLOOQPQRWSMJIJOKGKKHLHIBBDADILDGFEHCA:7<@>E_PNMQKICJJCDHKJIOLMMHAHFIJGIMKFGDJCIGJHDIEHAEMLEHCBFNKBE>?A<=;;7=@=>>:;<>:6;6684212/1.222..+,(),+'+,1.-/.*/*(''$"'('&&%"''&%# !## ! ""$!"! #&#!"  +Jasxtm[>/! !$$'14:=8536CUfjnpcWJDHIHABCFM>31+ "(')0,/11356432-)--/+5:>>C@?<8:51-(-6=EHGFBCJMGG@QR=824,')*$$$!$$#*))-4-,)#'...+"#&# #!!"  '!& !#%$#"!#&$"%* "#"$##! "%�*$%)*-),-.#%%&(+,(!)$0)*&&"#"%$"##!#$"$$ "$ #)&&!! '"#$'""$ "" #&#  # !       'R!  -  - - -   #"&0Gcmlqwulkzœ¡uYD7,#(# !! !"$%%'" $(%,'""$"#&%"!$$!!%().+')--'(,+,+32+-*()(,'+2*,(/%3$%/.%$&()**.,/'#'.,+-&&($((&(*+-23/*/+-1./1.,.3///110620:><7795:8;;::69AD=>@=@BFGIGCA<<>>?:<>BAA@@A;<:54>DEEA?IJKHJD?BEB@=@CBCA>=<70"% $48;89;:C<=<;>;::A@@??9?@;;<;89<:9978:89878752;51/52/FD?JH=95542AE3361:;=831379<<<@?;6;75:<>B<8?<;5:=::779?;<95;5634776775:5244>3/1234/.+*1-..0/-+-'+*,/,,+,0).*'/+*)+%&)-)&(&%%&##$ $*!  %## %'%%# ! 1Kgq}w_71  $$ &&,278=6/3ER_gkgb_OADJGCDGKGG?45>C=:63/,,55<>987,)*($ !" )(('-1/(''.2,'$%"!   !! "!"# !!""&#'&#"&+$"$$##$&$!!#$##&&$..-&#*-,%''%&&,'%%"7&%*'##%*$%'"#"!#"$ &!)#!#'!# !#$!$ #!" !! #$#!   !$ &   - - - -     +6Fbmmrwvne{¡­ž{Y@6,$' !""! ""%0%#$0.(+%"" % ! %%$!.'"&%$#(/.(-(*((&'+,/02.3++)/)(+.,,&)"**'-+'$*(**+.5'$',*,'&-&-,)#&&()//)*,*/.*)10,.1+**/)14-.650047153473/27878754;;??;:<96177;759::62052311/6<>867=;>@B;:;782299:><=D?CCD==@?=998;<;8;96644229>6:632+""!!%*2:627:661232647769=808;676547781453371223313-2...1((,6:85;5210,,,-/,2641/1319=<966435116498;707674554425536485327025402418-51-12////+5'+//*+,-.-*1'+++.)-0*+*+/*.+,,((('+)&)&/+&$! "%%)!##!$)&'$!!$ !*0(!-@N`ji_D/  !!#'4::655;MZbibc_UIBOKHEHLJLF@8:FJ[UH+(&"(-0+0//0.1,)+)'*12?;<7>=7:61.1,+0>BHOJLLLCGKA>??973.+&(&"  #&*))).'"&'+-$"  !  " " !#" !! "##$!#$$' ()'%&)%'% #%#")$&%*+&%)+,'+-($*%)*$# ""!$(($#!"*&*$$%% ''&!"##%#",*!".< "!!$!#" !)!#!  %  !$   - - -   !%"):N_hmuz{lcz¡³¤ˆbH4+#(" " $' !""&#*,$# $/)*'' "%'$#("'$" #-#2.,))02..))+,%)/&,11/1,-)0*(,/0+))$(.+*).)#()&,6-,3,.10)')$/.0'"+)+('#,**/,--0.+11/0.1020/162..599532/33151463716:775873410259389632.37742544;53=7:9>;;><;.[G/8;76;6:<===::57<67796358553235783:544+!# (16638@<6.11020/267<4676262+51.113972<25210/*(/.//0*),114620.)-+)+*(*.00003,5778714..00031/58501454346265300075321/1285/31,./-0310-/,-)6031),-+)%0.,-*,/..0-3**.-0.(%((&((#%'&-'&$ ####%"!!%))$!##%&%#!"$(  - (8ASSQ<*  ##$)0890466EUaiihb\UIGKIGFIMIE@9ACOTTZH/ '%%./),211/2,$")*&)5=?>9989=3110-&4=FIHIKKIKGHF>@=@42.*((#-# "'$$'"#(-+%*!#!#! ! "!$#!!!#"##!")&$$)'#+((,3" #($!%!'$)-'+-0'',-"'(%%& '&#%&'&#$)$''.'#(%!$(#"$ ! " "#'"##&"! #" $$!"!!" !    !  -  - -  $'$$!" %(-4LŠœum~wd_xž¯©‘lP7,$!% !!! $#!$%"! (''$&)$!(3/'$&!!#!!&#$$'+%& ;1(#&$'*--1.**++-..04/44///,..00-1-(()+,&,0+$()''-+)/2598%0.'+.,++-*+& %-++,,*/0.,.11/249-0/353306:88533564212585533663355830+14758410,.1965234-268:7>:@<==;;9647847:6469::==92Y913848301464347774/67' !%1141AA@<21;11003650<=20035,,.,6442746413/.+'(,.-332/1003013.,-+,*0+-10*,-+2./5450)(-/27/82/65102042/15498201576733:772212//421///023.,4.-0--(-)+)/1/)#-*..-'&'.0/)'#)(%,#%*%*$&&$!  #&#"""# %'&#*#$""" !&$!$6BJGC1" !&#',4;<557@M^hgfc\ZOFJPLGHJIKE=:@IPZXXO: $%#%+*&-/.0+/*"%%'%(08A==:==:5431-/2AKIFHNOHMLME>?C;51)./)*#("!! ! !#&-(&&" ! $"" !$!# $"#$ $ """( #%("%$('-)*$"$&!"$$&'$%$&*'&1.#$''"'''$$( %')$)%('&'((* $&!#"$ #$"! &$!!#$%&"#""# )! ! " "" #! !!! "  ! !  "$%     - !)'!!#$('8Nmt}xf\l–©¨šyQ8-+#!#%%! (! #!" &%!$"$#"")-('2"#!&!($#$+),,'&" %'(',+&+6572**34074'/5440+(/1172,4+-/**+)'1+#(+($),*24:8,%))/0-*11-*"#)-'+-),2621311044/3.,43464:689:654593345:48830?625;>404/635150-.-,33223511597736::>78:7<7957677588::<:::494844/-00592-2424)010&#!"&-2.5@=8>3640./36663,4//0443..-27435.1.32/-)*'*)/+-/13.032110.0,+1+,,.0-.),5./72-0+-,034:2041/31;32103459842354:5327;:1343/12125-2212/,/-/0,+'&*)+,..*&*'*,+(('12/-,#(*/+*(!%*&"! #"!!'#"#$!!"$#&$""$$&#$"!()"  !*2AEH9(!#"$,,49??>66;HW`hea^VPPMPQMGKING?>EJRZ_^[U7'%(-$)-.((++**%###%&18A=<99;:8454&.6=AIMSSPMKNL=?@<<73)+0,&%!"$*"&!'!"'*)&! +&"! !!""""  # !"""$! "!!!$#!'''(#$"%&%&'%$#%'"#"%%&%%&#&))($%*)***%,"()#(-,&&%#+'$'!"%*$)(%""##&! !"$"%#&# #" !"!!!!" ! !!%# "  !*"" "##$!!    ") !*#!'(4?Qqtsw|sbT`‚¢šY=.('$ " *&"!%!$&'##!%#)()*%*(%$))"'((*.///$'%'),(+/)&.8935&0:5/4/,46:1/)*,-38,.-,0*)-&('+0,1+%%).+1561/50/12*)*,,)$')('.-11055252266403.1016<;:89=<886:4=316832335?:56;7/44/2341363352/0017<8536456371:45447387247564567;487:8886316015/.//46.1+./-!  !),2.671397331/215.120/+0024340106453.0*.0.+,++,-,)+/.1..+02.10.3*'1.-,30*.-14-13./1.01584/-*)31122652/26343//2723;55<763350/13/245./22-1-/2/)($&)*)2,+()'),-,(*0+4&*'')+0/./#%&$#%$!#'$#""&'#"# $'$*&! %!"/!"")%#3=@B9*" $$%*,0:BKDC9;DUahgcaWURKOOSRQLLLFCCLT]_`ba]87!"*-&((%)&&(.2)#(! !$-;>@?9679377.&22:@LKOPPQLKJC;;=<60.1-(&"!%# &#&! !*'(*!!'"  !!  ! ! #' &!! !$##$%"%&#%"%&%##"%'%$#&(&%&'%&&')$()& "1#(7,!&.0-.)-%$'%+'(*!$$")''$*!!##$&#$%')'(&  !##. ""!!  ! !!##"# ! $" "  "'"!)  " !!!'#/*  && !!! "!%)4Hdvvt{ƒt`LOn“”€_C--($%' !!"&$####'%#%&#%%')&$#""$.'),)-*+*)&'%''**..+*3:922*.),*030367./,+*)1.+-(8.,++&&()*-0+%&/4+115.-:9/31-0&*3'('%&))-/0371522-3749203..6967:776635226340./3336988<8374+0001/.672/13-736963133463545623552676/0335322713364587.002530/,0121..43)&##)#%.0.040255,,5363050011+,39.1-001744/000,.0-),./0//.3/*,*+0.1001-.-,-++'*+))+33/-2423.2450/*/10155325514423462257854/21,-265821/-/13915/111/+-*)'(,/./,),(*)(-&$-&)(')'',*,(0('%&$&#%"((%$#$&&"'$""$$'$!#"&$%(#&!,3=??8&#%(-/375<2-0()&$ & "$%)%"! "!#  '!!"!,""& ""## %)$$+##$%$*$"&'$%$&$-.&$$"&#)*)(!"&(+'++,$#)(!$&0)00)+&''$!$*)''&#$ .0'%!"%!"%$!$&(&-"#$# %!##$$!! ! !$#"!## "#  ! ## " !  &"!  ! ""!##%%'# %$!!! "  #" )48Ljxvt}ƒs]IG]vŒ“ƒbE3)% " ""  " !$&&$ !&&#%"#!%#&"""!##*.*,0,*(''&(('+*'(&-1-00,+%#'-/-12130)&&-&(-(.'72/)+.-+%0.&(&(((*.-*)02@3,,10%*+**%$&(-+**42101-.3522576-063223133.0680(21613304418?>8574.00/..2483-/03552265043441243542272246351631335500340432-022200-/./,0312*&" "&-+++22/7532/043/22321.99/,,+/17484/--2('-+./+10+/6..0,-*,/1.-),/++*0,-(,*(.-350.5022.4502,0.-28531409303030:443/0..+/+,1856154,*,01/0/(*..*'-..,%*-,.---.'%(*)(*)-/+&)-1,*+&%$&%#% ''&$$##($%&&%'$.%#""%#(#')" $!)! )4=B@9%&-+238<<;=IRLE?=O_hnjcbdbZV\^USYVUOEGIUb]bbff]I6!'&/****),+*//0*,*&),*,8>A?A=:845413.27@EHPUSYRJFEGDA><7)'''+$!!"!!$ 4)#"! ##3 #! ! !"! "!%1%##!   "'""%!&!#$###%$&%"#&')&%##%"&*()%&('(''80$!%!)$(()),'(#%%#$')($'%*,((&"$%$ ' $$&"'*'"$/% #!""("!$%""   ! # %+! !! !"! "" !! %""%%)**("!   "-" ! !!"  !"#&+2:Ni~ƒz{ƒu_F@TkŠ•‡pI5+)!%"#!! ! "$ "$"#' $#!#&&!"###$&*-100*"#%%#%&(%&'%(+(%&-("!$&..0..-)'%#"&!-'((53)*(352+&'&2+%%%-.,/*.49H..0*((&(-%%% (/'.022/.+*.021216-00/+0/.43*'.6.+0.2634440118:A83/630/../0101//264-,4.13830111161/16512574024024242031201/*100/++./1--2030) !"(+()-2//1:8.-/06203033732/+,/.3584.,(&&+,/,..8/0107/14,*00/*1,.9+,'-1.7)-.3.634524305854544,,35763343//0./35703/0.,,3,2633/291./'.2/+/,,+*))))*))*,'-.-//-(%())*0,+'&-'.*+,)$#&(+(%(''%$"(&),&&#$'*/*!! #*'%""#$ #5>FG?&-556>BCFHNNTTMDDNdekjfe`]\Y\^XWYYRMCHP]dheaecXD5$&!#*/-*.-+'),00-+')*/34;2)$&$##"# !"# '& %# ""  ) #"!!!""## " ! #! # $#"#$$ $()%(%$%#&%##"!&&&#)$&)&%,-$,/$(%$)/'%+&)(%%%"#!'$('%$'$%'$'#%("&&# %$(''$!%&"" "#! !$ %"#""$#%#( # ! !#!"!#!!" #" !"% !#  !"!#!$#  +21-)     &'  " " #"'*/6Mk€€w{}nZ@;Mmˆ™sH0'" !" %%  ####" ""#" # %"#$'&'"*%&-1')#*%#%%$#$+*(*/)! ##! !),'-) !#!")/ ',.-+&,...-0%*.0.)&-/1,%+-11<*2,).-)'%'$$$-+*)-12/')%,*,,-/00-00-./-12,)),0411115//4/0316990/2302*+,/10..1/00&+/.2430/32145./21440431004232012/-3//11--2-**./01+*0,/.''##" '('.+,1/(//-/241560.,24051/2420/42,3)0')./0/.,'///4,10501051/62/0-+-.1+2+-,12651674832459762.2114245443.1.015271/,12020<64532400-),/1/.,+0+0-*++(.(,/3.611/&)*,*+../,*.040,-+(#(**)#()*-'(&)-'%#&''')(($%!!*,)%"$!!#!")$   3BDG@*3@EA?EGRYXRRTKRKS`c`_afZYUW\c^VXSRGHGQ^cfcdaaSD3&(2,,)$.'*.*,1)*),-/;;BCBC>>74*)0+).79>?HMOMKFFEEE@B>;/,&&" ""##&($!  &'!!&# $!"#!  #&" ! !!""! "$ ! "! "$"#"% $$ &!#'&%*%(($%%))'$#!# %"!%('/)++*),%'+&'&+$)**,+&#%%&$%$%*,%)'$(%'%$"#%$)'"('"#&(#! % %!$$"$$&$&"!"&"#! !# ""$!!    """ ""  " ! "" !#"%!  $#! -./-)# (* """""" $" #$(+2:Qm€~xwwpW@;Ggˆš˜xO1%"!!# " !" !#&"## " "!! '$'*$*%($%&#"6%)0&!#"#'+$*/*#%"$%O .*&)"!"#"" &*5.$.*+,.%'( (01)#06,,/''+3-,*,0-/+(($$()*+1,'-1.+&((&%#))052/10./.2/51*'++-033150/2,..45582..21301,455/0.**+)1011//3--1264/,2339622+.204/-//1.../02024,(+).+0++-10)0.""!"'0,+1/3,/),40311553//200468654/4250/40/.+..+/.*/..01337051561034,3335.*,-/.59<426:68542886:9411/2535336111/6495503-10835:9338120.+,2241-*/2-01,*+1(,4/,521/+)',0*-112+/+712.+.'('((0*+),,-*&,.-'($&)+).'*()(*(-&$"!"("!,5CFJB-% 0HKIDFIX\YLLLOOQZf`VTX\WQSXY^Y\SLKFGI_difdaa[JA0!')-('&*,)&).+-*&'),38>B@;;>@=3."--).5<=?HDOPEFGCFE?B@:0*&%!!$&"&+*)$ $"$!!$&' !  ! "!""! "  ! ##%  $$ !#"!"#!!" &"'+!($#&'&'()&&)&$$&!&($(++--+.+./+'&/')*)''.)''(%$')#%(%()(&""&&"%"#%$"%-,' '%  $"##"$##'"&#""##&% #&# #"!#$"!#!!&#""""#! !"!!! !!"#"!!  ! ! "! H "$)+-'#!#"$'$!$$$&"#%)-3=Vs€trukQ>5B`†žš~O5)#(,#$#! $#"#"!!#+#"!   $&$ "##&,*!$"(-/++,!! "/$#)*+$#$9#(X)+(&#*!#$($"0(*,/+')&*(%#','$//'./.,*)++,(%+,0*&)(/+()0-*)./+'%(-%%(&+1002./4+,0//.,++-3552640145512640-20832<364100,+/+-0230,.-.22701/20245265-01130+,.0--56/.2214)),+*(+233.14,&!#.-*,/40-1+(/110-1264710127;1344335.*1/-2)1=:,+,-,2.-181361./2214418561.02135=?6754995234<8>=563356446112375257461208,9128978421042//8/00-25220.+,/-,.,0.40&+6*)./011-,04.531+,4.&-1Q%)*,1()$*0'1*,(.1)*+-*&)13).)*'&#"+* !# 3HMND4/!7RYQF>DOKIIGMKPPYjdRNWOONPV\VTQQJFGIR^cfe``YOIA0#%()+*.*,(('2+'+,'+1:?A?;<99;443/0,3@C?CEFOOGG@@@FG??:6-!#$" #'(/&)" #&&$'+")!##!  "'  !!!" #"!$ $" """!$#$"##!$!"!!##($# $#$%$'$""$)%$'*.)%'%'&#*'#$)()..-.+.($/(&','%+(.)(&#+-$$%(*#!'))&"$%"$$*&"!&(,"&###! %" $$"#( &%%&"$"%"$!#!""#$ %&!"!"&"$ ! #%$"!!!!#"#"! !"!!  !   !!# ""  !"$#$! ! !%%%!"$$ !# $$.6A^v†ƒxsukT?;A^† ¢~V6-)'%("!!"*$$!)$#""%#" %$"%' ##!"&(!#"#&&% !$$&&'''$-1/)1%$#&#$&/,#('$)-(&#&)%',($#'''$+0)'"$'(%!$#'%%()'$.12-/-''-213,.+(+2.)&1-++0/&((&+++)'+034/3,.-/45011-*-,26435//1174531,2824531:5*+.,,+,--749*/,1/203.137/2149500/22/37///-.15124112.-'--,*/-3221,!! $"'..260/.14*/14241075615362533175620/00,,.2?=-.,-40*),..135822493703993/17716:>=84696542196:;753/11362444357559:4642260058:5401.045107133.01/3--.0/+-,+++4*(&(-*/1200-325285434-*-'* )++*.-)*,+,4-21,+,--..(3--)+)&)&!!/%%%# #2EOUJ1""8`f[JB:?;8@EGNINUhl]RYQLLPRSTPOPKIKKT]c]edVWLKF3!!"(*)-*+))'('-((,0-26<15649277652867431.//0145832367789:62255457662210230653/531.+,00./02+-,,-.5/)(#)'+133.-.764463/3**',)*-*-*(.--*'-,+/0,-,-),-)0*%('&'%$##'! $#5JVXP3#%*CcmgZL?8339>@CHGIbmeNQMNOPPSLTTTJHN[NYz~V[SKKKB5!$ &-.12/-,'),*/0.+/-3:>PJ?:=:4322065;?IJIUNVXQKGECIFC@F71.-0'"&*)27.,&"''+()-1-.*%#!!&$"#! !! $"! #!!" %!!!" ! %%#$$"##$$&'(#'+(,'"*(0)*)((),+('%))(')1('')'))/.$$()6*(&)'&"#&#!*$'($(.#&))('$&$(),$&&'#&#"!#! $# $&'%%$!!%+!"$""" " !$!""%!"" $ #"" ###!$%!!!"""#"!#! !!  !! "!! ! !!  #  !!! !$&'(&%(O."%%'.4Kl‡†xsqhTA:=Z†¢ …\@5*.,(&+(%(*$'%%%$*$&)""#(#*##)!"#&"#.-(' #&.+'),)).32,&#&#'&'..*(*/+()%'*,'&*)&%$$!13,-))#/"#!%##+''%$'+&+('.121-4,014.-13/)*2-('&%(+&*'#%#$))-+-0-+.-1)*315245.-.+-.-..26704243442035./04751<<+'0/.*..2423-2024200-0211.030/*./:PS<35641/-3-,12,/.3-,0201.+'($%*+22,11,,123232557642236266354=736404-11/95325<4/-,+)-,34624401:602.38113574246274893787457:562511.2069770/:94667457255225342-3020020/344//*221-/020-.12/.((-++*.12-0-6456431-.,)02,./*'(0-+-*(.,)+/+(&*&)+(('')'#"  $#!#$ "'4GR[QB.$!/8Ha}|tdJBA;@ADA@C>OnnSHKKVLTRRXUUNLNPMRP^VNHIFID1"&.66435.,,0038/-1.29CHDCA><;8;9548>HMMNS\STVLNOJCCIA>>4/34/$-0067144710-/5/232,#*"  #$ %   !"! !&"" !!#"!  !"$%&"!$ $"'"""($$'.,-+(%(*+.&*)*-)++*(&&,)4*-"&'())+(&$$$&),'''*)#"&$%&&)(&)++#,'+(')+()&%$#%#%%&&##'##%'"'&$#$"!#!#!&# $&!""'%! ! !"#! !"! " !" ! ! #" " !!! !!" "" #' ! % #  #'! ! $!!!!" "#*",*&$#% '&()1@U…¢¥cE5.0.*)'$!-*+'$%%(&($$$#$'++)&!!")(-0-$!%!"('&+1-')/.**)+*'+5+*&()-.+'')*+)$)*,"%&((',.(**)((&(-)+5$"$'((-$/,/6//33/,-*)++()./-++$&%%(+('&&*(-/0310.1/--*122734241+0286/30322353434422141014189.)IBTB:>97210.1340./.22193,//10/3:EE830.3.--/--15-,.03023/2,/%  !#&)*0/.-0..03305438324630133257<8262.1/4052101953/+&''+12231//0226/0+.33.,054116706:596578697110511511359:858<;6975954264064316/0141+0-01645-12024-./23310/*,1./.00-0/+2051162+,)(,1-+)*'&.)'1/(,++./)#&+6%+''(%$&&0!  !!! #2CW_W?0#)BZsˆ—›š–Œ~sjc[SMJLKCBZp`MGGOUTXUUXXQLRNOOQOOLFBCEA1"%1:@B>@B<=9?==>A>A:=EILJKFFHB@@BA?@CMNQZZ\\]ZVQRMEHUKGA9:599;=;B@;<3763481/12001549796>;55867644:424133/44//.2201-34<4101121/0167373/./-/1,040-2..24530/-+/02--&'(')()+-/.,,,.3,%9%))(*))(+(+)%%#$" &$("''$  ! !&5CWa[D4)%/Ffxˆ•¡¦§©¡—„zqgg^XQRj€uZTTX[ZRX[ZVZab^]bbb__^_a\@$"2DU]idfce_b\]^ZYW^XW\`b^]^`]\YPOUOPV\Z\ahhggb^_^ZXPPQYPGC@AADJPQJHAGFIGFGHDAD@;2%!"$!    #!  !#"  ! !!!'  !" ""&"$" " (&!#%!##'$"'(###&&'*(()%*-(',-+)(**,*#",/))-,)((%''''& (1*$"%%&%/)%&)###$&(!#(-$( &%$!(##$&"!! "$%%%$$$$"'$) &$""#&%% "" #!"# %""# "#!$  ""! ! ! "#!   ! !&"!"%!"$!  !!  " $!"!%! !!  #  !"$$+1++$!!!!$,07=SsŒ‚qtveVOYV\ˆ§¨‘jO8-)")$#) !')##$"!"!"%$ !%"! $%#  "# $&( ! #"#&%')($(((&%(-)+(*8%&*$','/+'-0)$"!$'%)*42?(++,'&.00,&+%!/2-21&&.//&(*+-,*,.)+()$'($,1+$)076-/)/2-4/./015130005001///233204/10.3/64422324<;4/4125.+246;-321730501564324547620+/--64.001512//134..////.0,,./23+-()#!$)*$%*--//)-47.0561411433-/--22/2663024660.,-,+//18-(+*-/1/1/4232/0.54/330.11,.*.14:585.//20<:4470222200132389=7559546447212155563445443459999977;74779;<=<=;88689:879;;;:7<888;9<7;9958876857>A?=;;8;;?::5;9@>;;995;78:>:=AKXhlhM5&+=Wkr~…ˆ‹“šŸ¤§¤ž›”Œ†zqnt—¦pddbabcgklr||~„…‡…‰†`.%5*:1/2.034267;/666988237235589654999;61533279<875363532.16975577:::99651744225<;89:7499<;>=>:>8969AE;=?;;AC>>>>;A=;?C>?ABDCEIEEFEHECFGJPMTQPTURYXXWYZZ\b]\^\^__^^aheac`a`__bhfd_chfhbehfhnlqonmpqonpolkqrtxwxvxuvqtruprqrqvvuy}yppooppprliklonqsqz‚‚„[B7@XnŒˆ‚{x‡Ž—˜—™ššœ—–•’“¦½¹£Šystprw€ƒŽ“™™žŸ £¦¦¦§¡v3!)EfŠ™›Ÿ¢ žœ¡œ——‘‘”‘‘”‘‰‰‰‡Š…ƒƒ„ƒ†‚‡ˆ‰‰€€|yz{tqolnmmlhejofbf]`]\^^WOPQRG7+%"$"  !  !"%!"&" # #%# """#$("!&&&$/&"&&%%'%%$,.'**&'-%"$&&)&,/,+%,"%#()*&*#&&'+)+()&&%&--"$+((%,++##&&'('-'*%"&%%& $'#"(%$&"" &$%&%%## #$$ #%%"'$&!!"$$ ! #!&/! ! #  !"" !#!" "!O5 !"   !"  "   !! " !" $"    !!"#!! ! "(01-'*4,0*)$,5:VxŒŠ†zwuhZYcaZ{˜‰gO:-#! ! ##  "!#$'"!#&$!%)$$''%#*)+.-(%,*-*),+)++,&(''#%('$"%**191&,1(-+,33)3)-',/54/(-*,/0.,/-.3-796/69.0852227255552715:986?><=<<9987<=:<<==@AE@=?@CBGG@EFDCEFCEJJECC>>DA@ADHDFEADGCEGJFHIEBHFIGHFFFD@BFCDDHEFJKKNKIHNNKKGFFIHIDFDDCBA>6/'&,%RI;<@CFDFGJQLNMKGKNUNJJKHLHHKOLJMOOTQTRQOMINORUURQPLOOMPNNPRWUYUV\]ZWUSLPRQQOPORWUXZWVZ]\`eedb]Z[[]^cededegjefdebggjidflmlkmprsuuvtvwz|„ˆ‰‡‹Œ‘”“•”“–—––›™˜šœœœŸŸ ¢¡¡ Ÿžœž¢£££ ¡££¦£¤£ªª¨©©ª¬¬¯­¬¬«­«¬®®­¯¯±°®®®¬®¯¯ª¬­ª¬®±¯¬«©§ª¦¥¦¥ª§¦¡¢¢Ÿ›Ÿ¡¡ žšš‘xbY`iu‡Ž’‰€‚zyz{‚…ˆ’–™˜ž¢¢­ÀÌè’…€~ƒ†‘–˜œ¡¢¢©¨§©ª£|;!,Ou“¢ª­¬¬¬ª©¬¨¡ Ÿœ¡žŸœ œžžœ˜˜šœš™š••—•‘–—•””‘‘““ŽŠˆƒ†Š‹‰†ƒ…zvx}xztoqkfcc[M=3%  $ # #)(($!  '$!#(""$""!"!## !#*) %#(3&$%)%%#"#&'&*.-'%#+)*'%&*$)+.+,'#'"(%(-"*)!)+(*%)&&$$/5 &(,$! $%)+"&&$&(*'!('#$!&"%&)'')"% !!!"#&#"$""$%!"$ %""%#$##!"! !! !!%'"$ "!###!!!' !"!9X""!!  !# ! !! ! ! "!""!#!" !!! !"",#" ""+00+##'4:+&(,1CYr‡‰…}{uj]Yf^[|œŸ‹kQ@/%"! ! $$ "" "!("!!%%&$!(*"$&%*/.,',/30272/3735874245..7.+*+3.(,++3120/.7;3//.36>00265796;:5;D>;@C:=>@EJGGEEEDFFLMIPLMMLPQSVY]]^enononiie`WPQV[gijhljklnquwsrtvxywqyxzyvxupqsruoutyyy{vyvwx||z{|yzz|{†•v}}zxzywzyz}‚†‰„…†ƒ†Š‰‰‰‡‡…†‚|{y{{€}zwZ=,-.;;9:=:;A=CKHHEHLRZZ]_^]acbgg]a[ZVSNOMIIJVJNQLOOLRVWUVZ]XZW[ac^[b__dbecdignkptoontutx{|}yyƒ‰‡ŠŠ‹‰‘”’–•œ¤¥ª®°¯¯®©¢œ‹€‰”›¨©¨©ª¨­±±²²´¶·³µ¶¹·¸¸¹º¹·µ´´²³±¯µ´µ¶´³µ¹¶´¹º¹»¸´·º¶¶¹º¸·¸¹º»·¸¸¶¸¶¹ºº¿¿À¿¾ÂÁ¿À¿¾½¼º½·¸·¶¶¶¶µ´­Š\90:S{œ«®°³´µ´³²°µ´¹µ¶¶±´µ¶µµ²®®´³³µ´¶··¶µ¹¸¸ººº·µ¶»»»º»º¹»¸¼º»»¼ººº»¾¿¾À¾¼¸º¹·¸´·´µ¶¹»½¿º½½½ÂÃÃÄÃÄÁÁÂÃÃÄÆÇÆÅÅÅÇÆÅÄÅÆÇÅÆÆÅÇÄÅÆÇÃÆÈËÌÊÊÍÍÍÎÑÐÐÐÑÒÔÔÕÔÖØÕØÙØØ×ØÙØÙÚØÚÚÜÛÙÚÜÜÛÛÛÙÙÛÙÛÚÚÚÛÚÛÛÚÛÛÙÙÜÜÝÛÜÚÚÚÛÚØØÚÖÕÔÔÔÓÏÏÎÍÊÄÿ½½¼º¶µ³¯¬©¥¢ ›—’Œ‹Š•‘‚{sqpqmlli]WSLINR[blq}†Œ‘‘‹……xpnrvtƒ«ÆÌÀ¯ž˜–“ƒ€}z||wvxtuvz|mY4$/Jyª³¶·¶·¹¶¶´±®«­¬­®¬­­®­­¬¬¨¨©­±®¯®¬¥¡£¤¥¤¥¤¥¤¥£¢£¡œ›Ÿž  ¢£¡£ žž™œšš–“ˆ„xiK5'      ! -& !$!"!"$&!!%% !###!%%&'!"%"&)($&+#*(#"'#/''(&&)+'&($'((-,("-)'#*(&()#$#$%##**)'$%$%)%')%$"!#"#%#'##%%#$!% !"#(%!!!! $"#"#%'&#$%!("#,#!"'#% %! "#"" $!#" " "#  " !!! ! !%#""$!!" """"!!" !!! " #" !!!  "  !  &.8!#  !"#).+%%%#%#'%01:Jby…„~xrqf[`e\bŠ¨¥rd[UPPSPUPOTX\a^[`\[\ZWYa``adhnponkqquxtsyvz||€†ŠŠ‹‰•šŸ¤¥¥§§ª©¨¤¥£˜•–’‹ˆŠ†‰ˆ‹‰…‹‰ŒŽ‘’•–™šš™™–™›œšŸž¢¢¡¡¤£¦©¬ªªª©¬®¯²³³µµ·½¾»»¿¿¿À¿ÁÁÃÅÃÃÆÊÍÎÑÔØ×ÖÖ×ÓÑǸ°¸ÅÎÓÕÔ×Ó××ØÙ×ØÙÙÙÙÚÚÜÝÜÝÜÞÞÝÜÚ×ÕÖ×ÔÔÖ×ÖÕÕØØ×ØÚÚØØÙØÙÙ×ØÙØÖÖÙØØÙÙÚÚ××ÙÖÖ×ÒÙØ×ØØØÖÖ×ÔÒÓÔÖÓÒÓÔÑÐÑÑÑʧlD3=fš¼ÉÎÏÏÎÏÏÍÎÑÐÐÑÏÏÏÌÎÐÍÎÎÍÊÍÍÌÌÏÏÏÐÓÑÐÏÏÏÑÓÒÏÏÓÓÓÓÑÓÓÒÏÐÑÒÒÔÑÑÒÔÓÔÔÕÕÓÒÏÒÕÓÒÒÑÐÎÑÐÐÓÓÓÓÔÖ×ØØÙØØÙØ×ØØ×ØÙÙÙØÙØØÛÚÛÚÚÙÚØÙÙ×Ø×××ÙÚÙÛÛÜÝßÞÝßÝÝÜÝßÞßàààâááàááÝààààâáââáàáááããááàâßàáâàáßàáßáßßßßàßÞßÞÝÜÜØÔÔÓÒÐÍÇÇÄÁ¾¸µ³±¦ž™˜’‘ƒ}{|ynkja]XUTUTOQSVPLHI>@<>99::330.3@IOTWbls|‚‹‘“†wmkkehzž½Ã·¢”–—”–‡ƒ~vniedcaaZH7()M|Ÿª²¶¶·¸º¹¶µ°®®­­±®°®±±°­¯¯®­¯®±²±±­ª¨¥¦¦¤¥§©¦¦¨¡¡¢¡¢¡ ¤¦©§©¨§¥£ Ÿž›œ–ŽŒŒ‰ƒmO5%"""#!!#  #'"" #$!## % #!# $#&%##"#%$('$#*)'% $#&%"&)+'%$$(&'(+&*,-',-'('+,-*('-&&(&)',,)$%(**$(&%%)('*(+%)$$$$"%#%#*+$&'&%$$&#$)#&%()($($$*$&!$$ !#$(%$ !#$#$'%#" $#$#&$(##$%"!#!$%! $$$"#$! !"###"  # #!""! "$!!%$"$!" " $&+! " '"$#& #' " #!! $!%$"!#!#  !#  !! "!    # "#!!"%" 5=!%&!""$!'/00/+'$&&'+/5=Ogz„€ypto`W`fdeª¨zvƒˆ‹ŒŠ‘““–™ššœ›™œžœ›¢ £¢¤¤§¥««ª¬°¯¯°°´µ··¸¸»º¾¿ÁÀÃÅÉÌÍÏÒÓÓÒÑÐÑÑÐÏÉÄÁ¾½¼¹¾¼»¼¼¼º¹¹¸»½¼¼ÀÀÁ¾ÂÂÂÁÄÃÆÅÄÇÆÆÆÆÇÉÅÇËÎËÊÌÌÌÐÏÏÐÓÔÖ×ØØÚÜÚÚÛÛÙÛÙÚÜÛÜÝÞßâæäæçèééèåáÜÔÒ×ÝâååæççéçæèèæççèéééêéêéêèéééçæäãäããããåâãååäãæåäããäååããâåáàáãååââäâáââßÙÞßàßßÝßáÝÝÜÛÝÝÜÜÜÝÜÝÜÜÛÜÔ²zJ8GtªÇÖÚÛÛÚØÙÚÛÛÚÛÚØÚÚØÙÚØÙØ×ÕÖ×ÚÙÙÙÙÜÛÚÛÚÛÛÙÝÜÝÛÜÝÞÜÜÝÝÞÛÜÝÜÝÙÛÜÜÚÞÝÜÝÞÝÝÞÜÝÝÝßßÝÜÜÞÝÜàßÞßßàáßáâââàáãâàáâáàááãááàãâáááàâààááâáââãââãâåäããâããáäææåäææçæçæççåææãåæåååäæååæåçææãâåääãããääáÞÞÝßÞÜÛÚ×ÓÑÏÊÆÁ½¹¶³ª¥¢›–‘Œˆ~sga]XWZWOKEGEB?=7934412012340/+*+*)&#&"!"#%&5HUMJNZ^ejqv†‘‰‡ƒudabt¹¹§‹ƒ‰’–˜›•”‹~tkjga]XB2#")Lyž¬³µ·¸¸·µ´°­­®­­°±²±²³²¯­®¯­±®°´³³°­©¨¦£¥¥¤¦¤¦¤£¡¡Ÿ  ¥¦§¨©¦¥§¨¥ ¡žš™™““‘‰ŠŠm[;/%" "! $" !!""!"! "  #!!#% "!''%)'&%%+)&%(#&'$"%"'"")("#'++++,**0-../2./1-,-,++/-/-,--..01%'.-,,+)1.1..-3,%(*-(')*0+-*-+.-++)*+'/*))-.*,)-&&),$'#%%%'.&**&*%&&()'$''+(#(%&'*'')+))$$#%"%&$#'*,)(,)&&"%')+&'$#%+('&#'(%%%&#%$$!"$&$$$"&('()&&+)#%%$)&(,'$" #"""$"#" "&$$"($+&'"#'$#()&"$$"$#%#!!!     ""$$ #"" !!"# $$!#$"#%#"$""$%$%%$$#""#!# "#!!!"!#$#'##!###"%%'%%%&%))& !!! &# #!!!!!'# "%!(! !"#$ #"$'((,38738-**)*/07>Ui{†ƒ{oqpc[emlq“«¨‘€…”¡¢¦ª­­±±°´·¶¸´±³´³µµ²²¶µ¶·´µ·¹¹½ÀÁÃÃÆÇÆÈÇÇÇÊÌÍÐÐÑÓÔÖÙÛÛÚÛÚÙØØÖÕÖÕÕÏÏÍÌÌÎÌÍÎÎÌÏÏÐÏÎÎÑÐÏÑÔÔÓÔÖÖ×ÖÖÙÙØØÚÙÙØÙÛÙÚÚÝÜÛÛÞÝßàááäãáåççèçèååæåãäææççéëêìíïîíîðîïíêåâæçêìîííîîîëëëíííîíîíîíîîíïìííììëììëêëéééééêëéééêêéééêêèéèéèèèåèéèçæææçèæßåäåäääåääãââãââäääããããàßÛ»T@N€´ÏÛàáààáàßááââàâááàáàááßÞÞÞßßÞàßßãâßàááààãäååãåããäåääâãåãåâäãåæååçæææçæåååæåææææççææèèææçççéèèæèèèééèéèçéçèçèèéèèééèéçèèèççèçéèéèéêééééééèèèèèèéééëéêêêêêéèèçæèææçæçæåääåäáßÝÚÙØ××ÓÑÎËÉÇÃÀ½¸´­¨¢—‡„~|ypkhb^^XRNLFCB=98::543.21/+,,,'(-++')1/&$(','# #$"$!#(5FIJJOOSX\ccku„‡ŠŠŒ†{zttˆ¢º¹¢zpqu€„Ž•˜––Ž‹‡wlT8)%%#"$&0Jp•¥ªª¬¯´®¨¥£¨§¦¦©©©©ª­®­¯¬¯°­®­²³³µ¯«ª©¦¥¦¥¤¥¥¥§¦ ¤ Ÿ£¤¦¤¨«¨£¤§¤£ ž››™—‘‘ˆƒv]B0'" ! !"" " "  "! " ##! ! !!! !"###&("&!"!!$ &$&(!$##$'("$#"!#$'$ "$'%'$#$&&&&%'.5$)**),/,*")(%&()(+)*.*,*--,(++./.-3- %%EndBinary grestore end % Image Trailer grestore grestore % EPS grestore \ No newline at end of file diff --git a/Build/source/utils/epstopdf/test-binary.eps b/Build/source/utils/epstopdf/test-binary.eps deleted file mode 100644 index c82441b7963..00000000000 --- a/Build/source/utils/epstopdf/test-binary.eps +++ /dev/null @@ -1,433 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: Adobe Photoshop Version 7.0.1 -%%Title: 118‚̃Rƒs[.eps -%%CreationDate: Wed Jun 16 2004 18:05:10 -%%BoundingBox: (atend) -%%SuppressDotGainCompensation -%%DocumentProcessColors: Black -%%EndComments -%%BeginProlog -%%EndProlog -%%BeginSetup -%%EndSetup -%ImageData: 823 533 8 1 0 823 1 "beginimage" -%BeginPhotoshop: 4604 -% 3842494D0425000000000010000000000000000000000000000000003842494D -% 03ED000000000010012C000000010002012C0000000100023842494D04260000 -% 0000000E000000000000000000003F8000003842494D040D0000000000040000 -% 00783842494D04190000000000040000001E3842494D03F30000000000090000 -% 00000000000001003842494D040A00000000000100003842494D271000000000 -% 000A000100000000000000023842494D03F4000000000012003500000001002D -% 000000060000000000013842494D03F700000000001C0000FFFFFFFFFFFFFFFF -% FFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800003842494D04080000000000100000 -% 00010000024000000240000000003842494D041E000000000004000000003842 -% 494D041A00000000033500000006000000000000000000000215000003370000 -% 0000000000010000000000000000000000000000000000000001000000000000 -% 0000000003370000021500000000000000000000000000000000010000000000 -% 000000000000000000000000000010000000010000000000006E756C6C000000 -% 0200000006626F756E64734F626A630000000100000000000052637431000000 -% 0400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000 -% 000000000042746F6D6C6F6E670000021500000000526768746C6F6E67000003 -% 3700000006736C69636573566C4C73000000014F626A63000000010000000000 -% 05736C6963650000001200000007736C69636549446C6F6E6700000000000000 -% 0767726F757049446C6F6E6700000000000000066F726967696E656E756D0000 -% 000C45536C6963654F726967696E0000000D6175746F47656E65726174656400 -% 00000054797065656E756D0000000A45536C6963655479706500000000496D67 -% 2000000006626F756E64734F626A630000000100000000000052637431000000 -% 0400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000 -% 000000000042746F6D6C6F6E670000021500000000526768746C6F6E67000003 -% 370000000375726C54455854000000010000000000006E756C6C544558540000 -% 00010000000000004D7367655445585400000001000000000006616C74546167 -% 544558540000000100000000000E63656C6C54657874497348544D4C626F6F6C -% 010000000863656C6C546578745445585400000001000000000009686F727A41 -% 6C69676E656E756D0000000F45536C696365486F727A416C69676E0000000764 -% 656661756C740000000976657274416C69676E656E756D0000000F45536C6963 -% 6556657274416C69676E0000000764656661756C740000000B6267436F6C6F72 -% 54797065656E756D0000001145536C6963654247436F6C6F7254797065000000 -% 004E6F6E6500000009746F704F75747365746C6F6E67000000000000000A6C65 -% 66744F75747365746C6F6E67000000000000000C626F74746F6D4F7574736574 -% 6C6F6E67000000000000000B72696768744F75747365746C6F6E670000000000 -% 3842494D041100000000000101003842494D0414000000000004000000023842 -% 494D040C000000000BC90000000100000080000000530000018000007C800000 -% 0BAD00180001FFD8FFE000104A46494600010201004800480000FFED000C4164 -% 6F62655F434D0003FFEE000E41646F626500648000000001FFDB0084000C0808 -% 0809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C -% 110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B -% 0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C -% 0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0 -% 0011080053008003012200021101031101FFDD00040008FFC4013F0000010501 -% 010101010100000000000000030001020405060708090A0B0100010501010101 -% 010100000000000000010002030405060708090A0B1000010401030204020507 -% 060805030C33010002110304211231054151611322718132061491A1B1422324 -% 1552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3 -% 743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F5 -% 5666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F71100020201020404 -% 0304050607070605350100021103213112044151617122130532819114A1B142 -% 23C152D1F0332462E1728292435315637334F1250616A2B283072635C2D24493 -% 54A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5 -% E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002 -% 110311003F00E433F3732CCDB5F6DF63DEFDAE7B8B8EA5CCADEE260A08CBCA8D -% 2FB40F27BFBFF6947275C879F10CFF00CF75A1C7E29293FDB32A3F9FB6071EF7 -% FF00E49239797C1C8B4FC5EFFBFE920C189EC60A4418D414949BED595FE9ADFF -% 003DDFF924DF6AC9E0DF691E1BDFFF0092428D13441FC12527FB5E50FF000F6F -% F9EFFF00C925F6CCBFFB916FFDB8FF00FC92081A71096BDD2526FB665FFDC8BB -% FEDC7F7FED27FB6E6C7F49BA3C3D5B393CFE7A018E536BA4FDC929B1F6FCEE7E -% D57EBFF0D67E5DE9FF006867CFF4AC8F0FE7ADFF00C9AAD3F82438FCA929B3F6 -% FCE3A9C9BC9FF8DB27FEAD38CFCEFF00B95903E16D9FF9355873E613A4A6CFDB -% 73BBE55F3E3EAD9F1FDF4DF6ECD827ED57CC73EAD9FF00934083DD3381E3B424 -% A7FFD0E2AD6FE95D3E00FF00D16A8861274D0AE85BD1058C16103DCD69E7F92D -% DDE1FEBFF03E8A89FABEE1AB4C13C024FF001F77B52538ADC704093C79F92738 -% DA1DBCF87F057EDE9D915121CC1E035D38FE4FFDF7FF006D95BC1E81D4336C15 -% E2D42C7BBF343C0EDDF71FDDFF005FB2FE91253846B2DE44FC1408D7F21D5759 -% 97F513EB1D35B9FF00650F02490CB18E3C7F5FFD7FE2D60DF81978CF7D79553F -% 1EC609D8F0771746E15B7FCEF724A68867FAFC9342339C47E6B84F03DDE1FF00 -% 91FF005F4D0C9F1040F133E1FEBFFAAD25310D1E7FEA1340235F253246B1DB9E -% 6385270731C5AE696BB4D24CA4A471E1DBC3E09069E4FF00AE88D551658D96B4 -% BA0F001F094518391A7E8889F199E3FD7FB0929AA19AFC7848000787FA957460 -% 64183B23B6A4C271D3EF3008F0D267B780FF005FF46929A31A78FCFC9270907C -% D5EFD997E87C8773DC7F27FEFBFF009E7F4893BA75B1AF878FFB5253FFD12B41 -% 6B58D3D869AF11EE993ECFCEFCF6FF00C25FFAB598EA5BA06A0870D08D41F31B -% 1DEF6FF6BF48CFF0AA66BD5D3A09D64F11163BF7B6EDDFEA7F23F9EFD27ABE85 -% 2ECA401046931E1C69FCADBB3FF03FF496A4A40E0CB3D8F6970E3FEFDFEBB7FE -% 33FA37A8B53A074FC3664FAFB9C03351076EA356876BFF005CFF00C13FA2ECA9 -% 64B9B16167247819EDBE23FB3BFF00F05FF815A1D32D632A797FB9CF04358491 -% AC7A9BF78FA5FBFF00F837FDD7494F4BD62EC7B70ADA7D7F4891A3C3C34B48F7 -% 176EFCDD8DFF00D48BCF3ADF4EB58C75F539CE6D521F2E25CE24C6FF004E4BD8 -% CFF8CFFAE2E8BA939C2A058EF525A58369EFF4BDCDFCE756D76FDFFCBFA166FF -% 004964C00435C7680D3B584C011EDFA3F99F4BF9BFCC494F281E660F6241075F -% C888DAC380F6CF88F01FEBF9DFFA2D1B3B05D8D74810C7196FFD5188FEB28638 -% F7B606874D4F649499BD3C169716810274ED21BF4B77D1FF005FCC49D875B009 -% 66D2013DF8F9AB9483CED691A409E02B6CC619192CA1A016BCC97364C37F389F -% E424A4DD2F1CE3E137DA1AFB65CE1E5F99FCBFA3FEBE8EF56C86910E60FF005F -% 74FF00AFFE7A44752048681B000D1E3D8FB87FAFFA4FF8252353A62369E6098F -% 33FEBFF5CFF8349481D43203C3001CF870A1F67A5D00B403A033F87D1FF5FF00 -% 47FE115B3498DA4011AF2A06910191A771F3494D5762308E3CFF00DFB7E1FF00 -% A4BF56FD1A1BF0591B8340FC783C9FF5FF00C095E2C8ED249E2791F4BFD7FCFF -% 00F82517896C08D38D79D67FF32FF5F4D253FFD2D435904804823E2381EDFF00 -% A5FF00A56BFD25AFAD436B9A3425A67B69A0986C3377D1FF00C0FF00C17AAAD3 -% C43882351224133CCFE6FF00DF3FEB3FA6F5156B099700383A798FCDFA1FF7CF -% FD05FF000C929CE798BE2342238FED442B188C9B4498131F1FCFDDFE79DFFF00 -% 82FF0039FA240793EA92E30635F057308BC1F5043606E04F1DBF35BFCAFF005F -% 5D2533EA736545CC66E78FA0D320363DCE7EF07E8B3F72A6EFFCFA7D5FE6EBA4 -% 31EFAAB6656406B6A7582AA8D836491FF07BDCEF4D9F9BFB9FE0BD65A771D803 -% F7924C4126759D236CBAB6EEFDCFFADFE97D559DEBFBAC36FE95EE036B9C6402 -% D33B9DB4FF002BDBB7FF0041BFC324A6AE7E28B6B823576AD3B4481FCB13BBFF -% 00305935F4FC86D8006C86F7FA223E973FC95D162D61EC982E11A8264E9F4BDB -% 3F9DFC8FF8BFE6D69E2620364B849E06BACB8FE6EDFCEFA2929C7E93D1B27206 -% C70DAD265AEDA76F97BD7438BD29B80C71692EB1D0DDC47239FF005F4D6962B5 -% B4B21BB5AE1EDE48F97FE4F6A1F507B48038D36B073FD6223E8FFAFA6929C72C -% 2F63ACD61E74F31E12906B808D674F977577D22E1B60CF7274FF003930AC0307 -% 58E3533FEBFEBFCE24A6A1692244E9DA0F64C6977606077E42BC5A267B6A753E -% 4A2EAE74D4C7C6525341F4BB8D75F9E9F0FEB20B9A47D2E40D0FE2B50B44791F -% BBFF003240B69DC0E92609993E47B24A7FFFD3DCB7F9C78F331CFC3C7FEA5557 -% D6413325A662099333C46DDDBFF336FF003BFE03D1F4EC57B269FD3584081247 -% 1AF27FEA9567F1C1EFC09E7FB5F9D1EEFF0049FF0003FE1129CDB6B0DBE0C907 -% B7CA3FABFF0093FF0006AEE0B3738335E3989E63CD01F5EEBB710759248D758D -% DCE9BBF7BFE13F9DFF008157F02B0E68006EDC07224104F7494BE5B5CD1FA304 -% 91A00DD41247EEB7DCB1AD682F1B41737812220FF636FD2FE47F3DFF0069F657 -% EA2DDCAAD8D16309DA04B771048D7F35B1B7F3565D95127592499D44933F4B5F -% 66EFF3BDFF00F04929262B4BA086EE6CB76F3DBE8BBFAAFF00F33FA8B6B0DAE6 -% BF71E64973A081AF76E8D58D435EC1CEF713F9BF48687E1B99FD75AFD3CB8097 -% 364320070322797FEE7E739253A58E1D2E2E31040669E5FC9FEAA0E5D3BF2186 -% 2401B88EF2793FBCD56AB87071DA1BAC911E435E53D9509DD1A9E4C44FFAEE49 -% 4D17340800EBACF914B6B1A0C8EDCFC0231A5C1F03B9D74ED1093EA8A9C5C247 -% 3A8D78494D535CEBC0EDDD38049DAEE0F878A3FA50D70333063FBB4556C377AF -% 5EC61752E8F54813A016EFFA3EEDEC7B68D8CFF847A4A66F6E80C41E75E15778 -% 68691A900724F804FEAE6B4169C7758002438889D590C6B2B1FCA77FDB49BD6B -% CBA2DA3657EF2EB082035ADF51E1EF2EF6ED77A6CFFB75253FFFD4E92F8DD671 -% C9FA5C77555F1B4C6CFA2639F0FCE9FCDFF4ABC412494FB35D1EB3FE872EF1FD -% FF00CEFECFD3FF0087FF008457B0F6FE8F8EF1B7778BBE8FFE8C5E16924A7DE3 -% 2FF9B746DE0CCFD1EFF4A565D912E8D91EF8DDCFE66DFA5FF4B7FF00D7178DA4 -% 929F681F4DDF4237FE77D2FA436EEFCED9B7FE9FF39FA45AD851EA8E79D66777 -% FE70BC052494FD28CEFF00C7E03FE8A21E17CCE924A7E9077F3A27F95CF1DFE8 -% C7E6291EDF47B73FF7D5F36A4929FA37C62787CFDDF9BBBF35673BD1EFB2773A -% 63D58E5DFBBEDFEB7FC22F0349253EFA7D08FCDFFC16557C9F43D1B7F9AFA0EF -% E73D6DBC1FE77FE0FF00D27F2178524929FFD9003842494D0421000000000055 -% 00000001010000000F00410064006F00620065002000500068006F0074006F00 -% 730068006F00700000001300410064006F00620065002000500068006F007400 -% 6F00730068006F007000200037002E003000000001003842494D042200000000 -% 01264D4D002A000000080007011200030000000100010000011A000500000001 -% 00000062011B0005000000010000006A01280003000000010002000001310002 -% 000000140000007201320002000000140000008687690004000000010000009C -% 000000C80000012C000000010000012C0000000141646F62652050686F746F73 -% 686F7020372E3000323030343A30363A31362031383A30353A31300000000003 -% A001000300000001FFFF0000A00200040000000100000337A003000400000001 -% 000002150000000000000006010300030000000100060000011A000500000001 -% 00000116011B0005000000010000011E01280003000000010002000002010004 -% 0000000100000126020200040000000100000000000000000000004800000001 -% 00000048000000013842494D03FD0000000000070000000000000000 -%EndPhotoshop -%begin_xml_code -/pdfmark where {pop true} {false} ifelse -/currentdistillerparams where {pop currentdistillerparams -/CoreDistVersion get 5000 ge } {false} ifelse -and not {userdict /pdfmark /cleartomark load put} if -[/NamespacePush pdfmark -[/_objdef {photoshop_metadata_stream} /type /stream /OBJ pdfmark -/MetadataString 4649 string def % exact length of metadata -/TempString 100 string def -/ConsumeMetadata { -currentfile TempString readline pop pop -currentfile MetadataString readstring pop pop -} bind def -ConsumeMetadata -%begin_xml_packet: 4649 - - - - - - - adobe:docid:photoshop:4783831f-bf73-11d8-8e60-a202ecfe555c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -%end_xml_packet -[{photoshop_metadata_stream} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT pdfmark -[{photoshop_metadata_stream} MetadataString /PUT pdfmark -[/_objdef {nextImage} /NI pdfmark -%end_xml_code -gsave % EPS gsave -40 dict begin -/_image systemdict /image get def -/_setgray systemdict /setgray get def -/_currentgray systemdict /currentgray get def -/_settransfer systemdict /settransfer get def -/_currenttransfer systemdict /currenttransfer get def -/blank 0 _currenttransfer exec -1 _currenttransfer exec eq def -/negative blank -{0 _currenttransfer exec 0.5 lt} -{0 _currenttransfer exec 1 _currenttransfer exec gt} -ifelse def -/inverted? negative def -/level2 systemdict /languagelevel known -{languagelevel 2 ge} {false} ifelse def -/level3 systemdict /languagelevel known -{languagelevel 3 ge} {false} ifelse def -gsave % Image Header gsave -/rows 533 def -/cols 823 def -197.52 127.92 scale -level2 { -/DeviceGray -setcolorspace currentdict /PhotoshopDuotoneColorSpace undef currentdict /PhotoshopDuotoneAltColorSpace undef } if -/picstr1 823 string def -/_rowpadstr 823 string def -/rawreaddata {currentfile exch readstring pop} def -/padreaddata { _topPad 0 gt { /_topPad _topPad 1 sub def pop _rowpadstr } - { _subImageRows 0 gt { /_subImageRows _subImageRows 1 sub def - dup _leftPad _picsubstr rawreaddata putinterval } - { pop _rowpadstr } ifelse } ifelse } def -/image2 level2 {/image load def} {{begin -Width Height BitsPerComponent ImageMatrix -/DataSource load image end} def} ifelse -/beginimage { -image2 -} def -/readdata /rawreaddata load bind def -12 dict begin -/ImageType 1 def -/Width cols def -/Height rows def -/ImageMatrix [cols 0 0 rows neg 0 rows] def -/BitsPerComponent 8 def -/Decode [0 1] def -/DataSource {picstr1 readdata} def -currentdict end -%%BeginBinary: 438671 -beginimage Õ¢¶®Ö㻓–£¬´³Øß¾©¶°±ÖÕÉÉÔÛØʹ«£ ©³­—‚€¢¬²¸½¿®ÉßÙƼÂÊä×ÙíöíëóèçõôÝÜêèÖÈÈÚÞÐÆÊÄÙíìäéíåïÙÏØßÝæ÷âÅÀÝîßÑÒÕòâçÞØøâçÜñÙÔëÞô×½½ÊâíÜÙÁØìåÌ»ÁÏÐÈÇÓàâÚÑàîêØÖäïôíßöØËâÆ»ÍÙÜãøüïéäÞúåãøãîâËȲØØÐíĨ»¥Õ¼ÛÕòÓÏÉÀ¿ÃÙµÅÔÀ±ØôÞÜÔÄÏƿͲåßîìÌÃÐÌáÑËËâ©|ðÝåÐÌàͺÔÅÀÀÊ××ɺ¡Ó«Ž¤Øþͼ¿ÊÉÀÍæîéÚ̶®ÒãÅÇÖÂÅòñØãÒÇαÀ²ÍÐàÈÅÊÃÅÅ´ž²ÚÇ¿¿§Ï箼ØÀÈìèй¿ÂÆÑ´ɮ¹ÚáßßÙâÎÇÑÔÉÅ̺®ºíðáøãææß×ÕÜä×ÜÛâãǶÈÓºÑÛËòÿÉÍáÛ¼­»ÑâÃæØ–ñìÍ°«êÕ×þÙééÐËÝäÝØ×áÌØêÖÉßõçìåÚÔÏÌÍÞìÅÛå²ÄëëÚõòÛͼÈÃÄÈÈÂÆÐÕ·âòìñíÜ×Ì·þïÕã¹Â³èôâéçȱ³¸¨ÇþáÁìüéïøíêñëÜõÞºáûÝÛëõõæÛÝåçÙÀÍêâÏÍÎèÏŸÕÿêïðçÞíæååÕëîóãÞòí̹ÔäæÛàïéÔñëîñèåñþíòôïæáåêôìàÿêÿëÚúûóæèõøñë÷åèæàïâëìãÙä÷òÞúúóñôñëêöïðïåàæëèñêçôñéóðæè÷üñåâëïîççðôñöûìßèðîðçèî÷úøö÷ç×òèãëØóîäÞ÷êÙõòóèòòäõþâñöïäëûùéôðóôæØéÿùóïíììðôéæêóôîîôîééëëïôñèùêÿÿØééÿøêèíêèîëãèòïêëíñììóôîîôÛÙøÿìêü÷áéðòñòñïôêóøëîúöëåëõñëíïçýéêþíáèëêôòé÷ÿïéíììñòñöèëîîëæäçúëãææáãëñåç÷ùêãêñèë÷öíõÑ4..):S\7100,-.*::@DA<9X[N:9ES^]RhMCXB;NM?:M`kvSNlen‰“M0:*=;:CL8H.UIA;J3WLVW?:C;44=/@=AGGA:Ba>0>ToNHGMKDLXWbUPB;VdKDK@R†‘}~AHGH=>>ERCDG<<@633H:CL.Dc8AT@BXRPIYRDFBCKJWm\frbZl{]b\QLGBCJ`F_wg€’sbvtb[P\PMPROQUS"h™‘pW€kMU9>Vy˜´»`[OSG[~fRu~s‚—š£±±¿Ã¡ow~\WŠ“€‚z†WOo˜œŒ†’€T†ÆÇɵ³•€]PUWx€–¡¯Ã´†hPcqrwyhOƒ“¯º§‹ŽsŽ³ÍÓȸ®¶¡„u˜¡§š¨±±²²¥”ž©ž¨²»ÕÒåϦx„‰ƒXj€›µ½º¹¦ªºÄ»­¤žzŒ“›®²³ÁˆƒŒ¥¸½¿ÅÁÄ»¦”Œ‡ª }]`u¢Œu]Wbs‚Œs}´¶¥’iu¢”„Žzdpczz†‰€…e‚“—ˆ‹“‘s€˜§œ‚vz–’“˜·°°¸»µ±²­¦£Ÿ–‘Ž†ž—}±Üɳ…‡Š“¨»¹¯­¿¬›‘Š‰‹Š’‹‹l^[†soj]k‹˜ÏϾ™sdju‰vroep…‰¥ ¡ž„{‡„‰“•Ÿœpowtlx€p†g^U\„t‰”|‚‘‰’¥¹¾±Ÿ•”Š‰“”Œ‰ŽhTHN[qšß,7R@8C>A<<<8:;632=?EHI9;977<@@<4/4;;617/4;9?E=;::<;744G74:506>2140-(=/,8*6D6:79<2:A;559:5/::<=9447DE?8856=>8K5.A322743:=:;E6D607):G)@894;2@6E*E1C6J476036H<0778<<22??>=;99;>CN59>6D8:676477.>6:81@I8:8/4FC.%6H@V6E3?F?EF86=96AN<=:,59"6:76>CDG'243+H3.33B60<53-09'$8>3/8*?=0<==2+'7?$<01+3=.'=?37?735/--)*@7<:RB1?8*;>/291,.+'F552$68+*88;8,988(!2<88*0469;4*+4GN>-+.441.*)+.640=(755(5=:9:4).3')++9531./375/=?<;>7+')*391*(%-A90156/<=642./81.4;<:8.'>4,2+E1+&310<.16506@@9%7>0'.8:9:<<84592003446:80-5:71/=8::42.''9,;=-=9830:E?31=71/495,3029<:;@2//36679G=0,4>>8+'5A<74(,1982495GC85(*8%77=92;A3)J>,705b,3=(.<+,/016=?=50-.///1418EE;<÷cMBC>9A62487;?;77<>:9;:6135/-2379::9:;=589;?A>89756;=;7==:78<:4702659;4:?@:67866<@95=?38:979=;6:=>:439@=;1?=2A;85D<9@6?8.524:5@??><::;<;<>?<96@97U>4890;>.455333474-1+4:36=504=@;9;:5@;D/71;<9?@63:<;6;16=0=;:77::6441?937198=@62AE45=:486557:;<6?<58859:56;97647404;7/18:4?6D7<:?<<77@6>;;96:90=79937=;:@>997115;167=K4>69:9:;A=9;<9:;6SG66BB;=426A<=H<3<:;<=8459<5;B?>>:<5@<??,=;:7987C;>63<@;:B92137=?=983437>A=99HC70466;E><948AE/9=>B=9=:218<:;?=DF?87658>>99AD15CA??:?=@>9=EF???<;?EFA;:;?A??A@<.799?A6)8:BIH=408?99EA6<8AGFA>;8H93318BC5CRA;43F?:F;-:;GGDIE?D=B=21:=6<><78<>;C>?EGFMÊP<-==1>7234122-/80)20+69248666422356630664233-&731122104;<52575;9;<9:<:3::2.0314>C:3;B:7970177306831466=50<:2:95295352:F;=66:17379842476336778;?704:66A57<2175:+/8>=;:9<5=>:4/:68=1@2<6.5>2849/=1:7298A95:>:<@::7<9578:;48:21772+36750749924<<0/7943>/7(5463685356227113-5182-8;5651:69?6=45:;888609=7221-,-79.,59A=9642.+A8,1A780;6-7%1>:/3854;6:<69;1958;:851>2AA87/330451470;=>;8=?;4>>>846888:45<=76:>549<@A<<84359;;A98389B@4=CA>>=923:=>>99A;89859A2534<;5598;;7:>;=<9:?>:9D?>@>868689:=?=:/0368;826:>;3/6BA5439?8925<62886SYB/8:8D:6019A=3.246>C;.98:>>:8957:<;9;?@;;<:=@<7:+.=B>069:>?87@8A:/4:5BDC7-4<8;I==@8959;<85893?967:=<80@=7>;4<@JJ?;?:/5;<88<<7@>?BC@BïRFC:5:A73586783-;2*52(07//67750;733565310-,19<;D>85338>17:62356.24432585994125551:D:.085897675136767:963*,3326853221037>47017.1532478409425765431/5<86=484132179100,/9<026:72253;6(9+:11574220-4+61,415;;:3-13+507/.3+3759:3069,97054170-46-*/04104:<94/74-1532/75/112730572/2460-049:73.B.E,;0743686348425994.15.)2512/2;224,:403;:.*006:85543>505BL<.,1454::29:9C:355683.071598==001269:986,64030=?3<@15=0&.45540,1-295.1<5<./2*10/02320.,425<=635/3>@85767533578861;4F:;0/4886630=39315-6237:81..587:@>6476::7;>8:3.05:96334650035213773.?88;:=<4338?A;2.+/577:@F67A74:5=/<:7>8,.77667888B=638>>9868;:52249=:4148=65402529=8259;@269<9.)1KQC2102>3589851.(885<6,/<3+.:C<121379511;9963:CA:D48>14<58745654?7>?26@:.+66*3>2:>8,*4:817;:99859889=CIÙ+*9--84,*.347:5/230/1.)4,-2234131/..///22/+,1216/+++*-21/0230.-*...100432221014:16@:01622343/./433333228175154644/54.350,5/192830-.131.52145201$+0483,,5;13:43761;C;2-$+310-+0,120)1*G-983;4615/)5.*403,.00038:708.08+600340,.13;40/-0*(1784..5.--0341.454,16-/-73.21-10133001032((46.-,*0/731+12024/+/30,2424)96225533038.01'5555:;2-1,-/22001/3.*00-2.0244333846:87867220**03:>:32/,/3E3G887/A1./.0/0,3BG;/*&020/20-0;=837731424124/4%;.16,3,0.11,.33/-...23-611..1..300561.10..13540141055222/4,/0(96156-,1.?=4,+-4>:.0236103>.47.812/25322/4200//15/162()25665432336-4!9*61740--0213&2,.6-;120/17<=650/7:9<:75208>:>744479623441.04644687656/37114.81-/33104<:81+002*4+.5*9-00.269<88:;856:313795/,323540./69:7324595698;>:327;C='!5427=86=+412=84B986448;<7:7259:9'6A>2-/4:964645=>5696564820C>,7:-10.1201*/8;75782185*4?5+2765664026974467776;CHÒ5/79<6)6246221+7+34&0:(5./2/057).341.,-+045441,1-/684//6-*283,(/1--22.01,,11-.2/11++79+60-.,)-46200-*,13/81,43435088/4343=3.2,3/230**06013652365:5-/138.4'-8..15'*1-/63*71.,/:33)1312\24/&6.3,6-)5/+63494483)*45,5*/9(5645773014'$62,9447/-64/4233321115/0,23&,,51.76-/+01//10-)50-72+5/1 5'=.227766/,3/327/+615--2210.4/-&39'.+10.33..4006610418,&34-4),0210123)*0-+./.*12+.50(1/+04322='A1*-,G-0,,5/8;,)03587/1/14/,2/2-*1533064&/:-.'A137-815024243-45851791.)7349+0.33-.66/23002106250-12./+27086$4.52/3/-9(/378/(-.0<1)356*8'/3(2(3,.0--.+1477653271000694*-0100122.<'@)60320132.)6*;66:(4155/-.*#01./54..-/33166-2/23.1652343016<33441.030,5:0085/2794./5/3,2745*?.5,29'7>983,-2092/3740/40168448201430.0121025532/24110)90/-472@310:C:,(78/2?6-<,04443/+21345<:.6520254//45670.56,/;;52/<)7XB*7+.20/443628-*882<3H;*66/<567633583249723:3555;DI×73;863,,-/1222100000011,-/010//21/.-./02-.0.02.04544651///00111--.01233430../234342-03-000/////00110/.-022.-/225432100/10/02332/4;9/.1../123321/001122230/010252210//13...//000/0110.,+0-,...03//024420/540/,-4110/0123124542/-/12/*+1802541//1/14442224.03/-/.41010..1-.//.-./.-./10.+.*+01--1011/,,/271,,131.3221100/0.,,.///1332353/.-,.021020010-/400011223211112101100/.-,000///..3/,-131/1/--385/152141.1//02331/322110002/-,/245000000003456542103322441/012210/3/-/46522,+275105451,13,+/21..3810.--./02./22.040110/0362210//.--../037;.010//010..12125000//...10144212-143.,/31/045458-0<+0:&2///3662.1/--.123,00-.330683020.2-01//1213,.542325/+/782*5202310041022/.066653469:675//2/2/-1683.43211357/./452//030/21/341/14775112234562H/5@04+456420017732/3N=+?>.965448<820451267335422676210001239956==646<=82258&6=:7205258753354666;DKæ@23-/42,-/01100.......--./00/..10/.....0-02./1.-01/./-*///00011////0122530.-./01021-/1*////////..//.-,+.12/-/103221100/0/..0110-065-.0+/0122210///001110.-00/022.++.0/-...///00--.///..0--//-,./..0220.-21-,))0--,,-.010123310...////12.022/-.//01110000+-0,+-,1.-/.--0,-.-,+,./../00.-.++./,-1/010.-/220/..///00////..1/--.//./110131-.-,.011020010-/4/000112220/0231/10/.--,,,,--.///-/111/.-.00./21/13/-0/-1/./1221/221110000.,,.122////////0000/.--011--/.,./0000/..,+,./.-1-,130/0212/+/2,0220-,/2//.-,,,,1,,13101./0/..02210/....,.000024,-..,+,..,-1200300///...101330/1.-,++,-.2//221250,8,-6)3.//1320.32112344/22/0330141/21/2.0/,,/101,062/101/./220-63145212--.0.,-1210//0014122-.1/22457765/132//250.046200030/21/21113552/111234550=-,8200/010//021673583))84+3943././363,+/1/155224300453210001226855;:5568731342%.0.0103367631014689=EKÎ/+4123.,-.///.---,,+***-..//.-,/////.-,--34..0.-//,++*&..///00010/../0132/-,,-...11,./(////////+,---,+*,02/./0.0000////1/,,-...++00,./)001110//....////-+,/0.-/3-)*030+....///0+++,-./0-,-00.-//.-.//-+,1/,,**1,,,,-/01.//00000,++.230-,.00.-,-//...../0+-0,+-,.,+--,-0*+,,+*+,1/-./0///,*,,+-0./110//0,/21.,,.,,,----.20.-...-.//./20+.-,.010/1001/-/3///000011.,.252/10.,++,-)*+,-/00).44/+*,).1.,.1113/,//.2.--/110.111000//.,,-/00/////////0/.-,+++120+*,-+-./00/.-,---+**+0../.+,00./.*.2-11/..../0000/-,+.++0430/-.0/.,--20/-,--.,.00/.././/.,++,,+-12/./0///....1/021.,.1-()-0.,2/.//./23'30*/-202321001--.////.021/.00.,0/.21/2.0.**-.--,260,.-.///--/041/23101+,/1/,/42/,,..-+0,./+.1/14774347,/22/.02/.045202/30/31.1013452-)00122333220&19.7////.036)3940/.+&*0/+48,*,-.241+)-003664132/.120210//01237548635541.042.472.487945641.--269;?FIÊ//:620),--..-,+--,+*))(-----,,+-.///.,+*-56.,/..00-,.-*-...////31/--./0/.-,+,--,-11-//'....////++,--,+*+/10.//----.....20,+,---+)+-,00(1100//..--------,+-01.-.20./2420--...///,+***,-/.++.00250/-...,+,0/-0/06..../134,,,-./01+++-/00/,-//..--1/-,,-..2-/3/.0/-+*,-,-0*,-,+*+,2/--.000/-***+-0,.0110//,.120.,,++,,-...20.--.-,-//./10+.-,-/00/1//0/-/3.../////0,*-252/1/,*)*,.++,-.//0,.10-*)*(,.-.243031/31/2-,,-/0/-000/////.--.010.////////430.--..230++.0/./0000/..242-*+.012/+),1/,..+/2/.-,-023323331/-+*,034211-/10.,++1/-,+,-../0/.-/01221/--.++.23/-.///...--0./10,*+20/1452/1-,...032%05++//35640/14+.021/.-///-,,+*,10031-/.//--/-)*,45-),+10/.-.011-,/0.-.2002311361-.12.*2-./-03023320/./--/1320--,/22//2/31/31-034443/+)./0122116-7(1@-:3321026:(162/034.262/32),/13685/.0356765242/.01/210///0105425316442./11.02,&(*(*12220.-,/48;?DFèE:8.+.,+,---,+*..-,+*)),,++++++,-./.-+**,45-+/.+..,-01/----.../21/.--..****+,..,-22.00(,,,--../+,--.-,,*.1/-..,,,,,----20---..-,)*,,11)00//..--,,,,,+++-,-11/-/,/21/.03---...//.-+)))*+50---.1610.../-,)-,,1228.---.012**++-./0+-.,)*/5-../0/.-30-,-..-1+.2..0/.++-.-.1,-.-,+,.1/-,./0//.,))+-.,,.010/.0..143.(,,--.///1/,,---,.00/020,.-,-///./../-+-1...-----/,*,131.0.+))*-.///////.2.*)+,+)0/-,153-)//030+,-,+,-..-...//////../110.00000000420.-.././-*+/22/012210//475.*+.0450+)-10,.0-/32/-,-02330111/-*)(/661/14/021/,++/.-,+,-.//.,,.250120.,,---/340.///...---/--/.*)*-0588520-++.0036/+/70*/+0231.,.10378632210//.,+,/32030+-,/1232-&*,43+*,+51--13201-,/1/./91-043/,51./22.*71120350940/00,'1-+0781)**-/.,-1.21030,.7642/-,,-.0110//5+8+0>*355310147.//,,0340=8084*-/255797212355322343//120210/.//0.31021052782-.027>=65326../000/.-157CG§&/1--,(#%''%%')'()))'%#$&('%$%'+*)))*+,(.,(&#")')(&&((%"%)+)(&&&(+($()!*)()*++*!&('')*)+,--,*('*&()&)-+'''&&)/4.)&()'&',+**+,./.,//*)+'"$&'''()$&(((()*$()'(++(!+-*--**',*&&$%,*%(-*)+*()*++*)(**)'$$%')(()(&(,,6-&10'+ )+))'(/%**&%(*(&$(*'*.-,-**-)&+)%%+-,,/,+*)(''')%'*),/++''+-*&#'/0)&+.-,+-1/)&(+./ 8((+.*')*)*,*"%'#)/*-'$')'&%$(**+,+(/*')*(&',*+..+*+,(+,&#''-++//*),(*+,+)'%**+++++++,,*'&(*#))')'%*)/,&(('**)((**)((**((**',*)*+,+*'0+'/1.2+&')'**%&%&),*$)*)(&&(**),0/*')&$%(('(+(&('$(,(,++,+'&()('())&$)(),,*)+#$%&''''$$&)*''*.-+)'&%%+))*(%',%+)'-0-+1--10)*1**,)$'*&*&'./*')+***'%*2()*+++++*(+,(*.-%$*/-./*70,-*%%)+,,+((*-,#+."&.')&&)++-1+.0.+*++*#(($19)-&+)02%/.'')()*'-,++-035'('+1-(,)+---,-.+'+/+),,+.110/01*-+()-.+./+)($'3,*&)0007-.-*'(+/---,+,.0)-)'*+-4-..+(')+)/)$,.*.)'+.++..(*++.220,()0420043210/..40*&)-+%0138@FH¿/).0'#."%'&$#%(&()*)'$"$&('$#%'*)(((()*(& ),((&((%$&%##(**(&%+!$,*$$$)&%'+-,+!')&#$%$-,++++(&&#&(%&)&(('$#%+0/)&')'&&((''(*,-7.+*(+-'!&+-+)()&&&&%'+.%**'&(&!),*--)(,-("#! %*&*/,+,*+++*)'%$***('(*,&%%'&$&+,7-$10&))---+-4$((#!%'%'',.*,23..++-(%*.)(.0.-0&'())'%$&"&)),.**+./+%$&(12)%*.,,)*-,()-+/.3$'.2+&%&(+/)"&$,3,,&#&))()"'*+,-+',+,,)$%(*)*..+*+)&*+$ ##(%'-.**-')+,+*'%)))******++(%#%("*++-*(,'.,&%%%(('&(*,+*(*)'&((%,+))*+*)$+&")(&0,'(*),-',+,.0-$*+*(&&(*'&*00*()+))++((*.,) $./)&(+)&%,&%+.*%$&%',,*)+)((''&&%'#"'++('+*(''()*.,+*&$)0%-+',.)&3-,0,$$+**,)!$*'( )0-'%%&)*'$(.()*++*)(.''**,,%'%*-,/30.-//) "*.//-*)+.+"+/#&/&.+*+,*,/+./,))*+'"**#2>0.(.*-, +''-/*()'),/-+-4:''&+1,',*+.../02+).1*')*,/220/01-.,),22-*,,,,'(4&%$*333;2440,,17-02-%#'-.0*%&&(.,-,*&%(+*2-*4503-)-/++0/,).63,2@1+)053//3210.-++,%",.*//06@HHÆ_&70$-"(,)%$$$)(&$##$$,-.,)%#"+-+(&'&##'&#'11)%**',43+,(#"'/0-!&)),0-&(#'+))-,*&)+$#)+#16+#(,)$+590$#(%2.%((&,-+)()*))&((+-2<*/1-(%#!&#$*-,.3#,.+)(,7*.,?*(&= 10*+"#9$&-2.% #%14-)'*2&(++'$%(&+:/#(,!%,.($.<(,3G*+'0(+%;/0/M.+&')%,=+&,3/+/21&&,)&,1/,,0/,/6.,,/-&$('&&&)-+(3.***((+00-4%(0?(*<9-'"30+18,#08$#24)%'=0*(%'-.>+'1/%A+0A6()3/-./,)(-)&)/1-(+1-,2*#*&((&&''$:1))15.#()*)'&'(6<'++!+&45-,.--83'$/50+)12*)0.%,'$*0(#)+-*).-*,%95%+4/))+-+)(+.)((+..,)(,* "23 &062+)+,+%2+7K((,.&"' ))-,%&-.5///,-/*&(.2-%%,%-54) #,&&(,11.*"!/0!#:&%%&&&)-!'(*/-)+&(*)((+.+'*1-#%0*'',,(&))(&&(*++$',/.,*)*+*))+,+--,+)'%$;/(-31+($&+00.05:*'45&&.**.*'2)0&3$*$)#+1,-.%;')1))*4'-".'4-R4(47/*)&+%#-,'-.0*/'/%))-53+)-1.,6:4/=>/'/0+/37.(22*+16!),=-14532:B;-,7(0)1#/$2))'!"2A-.1)4():*)+H4 $23%&68*(,+-8<502G804371022/--+(2(-3)'-+<*E=(#/0**-*0--54069*6()%8+#))*/-+..40,01+)67.)10)*1<6,2502*9-3,7*4,11-.54-)5*1'/#0&,'7'-%//@122*3*%'4,."1&+-,-22.(.-,2534*90-.1:/.00-+*(%-%+0(&+)#?4-1NÂj-+,'((+)%#&)& %%&'(*,-'(('%%'((**''((&"&'%(,*$,/,$"(+)#&('(*)%/-)$$()'*$'*'&)(),/)!&*%,,,*'%%'1( "(+,-%+($)+*,*)((()*+,-))//)*(,-+)*+)2-)(''+/('"!()$%/1*6"&$7*$'-)%!****'$&+(+'&-/(%!!$*+('()#$&%*,&(#"',,*)2+,&%.&4(* 0!$!&0-(,+%(-'"#%%%('%*-(+&$'*)()+$!%*)$ ,"&(%(0.)(,/+&".2./'6"'#(,''*),*!(2/($+1*%,0('#(+'&*+.'$*-+*-.1'!!"&++,//-/3+)(&&'()%('&'"",%'('(+-+*))('&%%()**)()+%),)$$%#'0.)-/,+#-.&#!%--$&01'&/*-'"&(%&%)-/0-(%$',.#(()*,-*&#*('')**)*!$,%#+*,,++,)$(,*,2,(/*!")'#$#'&**$%++*')' "((/)%&('&&)&&'&#"#,,+*()+-*.'&.-*#)-..--,-&!$%%+,*&" $'*..($&))()-/,'&)*('&((('+*(%#%(+('$""$&(&')**)((-**,,'#"$$&)(%&*')% #,,&#$5!#%8($#1'/+.2.)""-. #*+-0)&-3+/,,5#0!",+&).#*+,1/-23)4##5/-553424<+1/+--))02/.41))%73%*0..(8-62<,4(01)$)/1%0'/$,".((&B40&6+:0/0+0)#"3++ 4)%(02--2*21,.0272610&(5 132.,,)%+&*.)(,,.-C:<3EËv=00+"&+*&#$'&"$%%'(*+,''&%#$&('))''))'&*,+,.+&,00*'),,&+-+*++*.,(%&''&'"&+*+//*/2)!&*!0*'*)$#&)$"'-.("',,)((*.)))(((*,%(%$*+*.&)+**./-1.+)((*,",.*(%(1,1*5"'"/5#%* $* *+,+(')-+.+*13,)'%(.0+)+--*#!)-'$! %,.*&-, ,'$.&2&,$3(+"$%+3.').'*0+&'(%)-*'/1'-(%'+-*''$"%'(&$0%%02)+60*'+/-'$( 2+1&.+--)&*,((.,(+10*&)-)$),%4,,.+))&+%"&*))*./*(-,&&.)')+*)*++*'$$(+/,'')((++-,('))'4/)&$%)-()+*))*,(%,,"%(+0-*/1.-(22-+($&+'(/0++017/#%*)')*02/-+(&'(,/-)))*,031+&.-+*+,-.*#&-*'+.*-.,**(%*...0/-0*),+%&'#('*+&',+*(+)!"*,)&$$&),/*('('%%'(*,+)(*-(,'#(+*+$)+,,,*..'#&&',('&%%&)+#++"!+/,$(,-)%%&&%%'*-.-,+)&$%(+(&&''%%'()+,,+)(.032.'$#&$%'(&(+,*&$$%$"-&2!%"3$$$609&,)2)&+0.' *5.)0) ,<*/'5+3(2&'.+&() %)+,*)+)%4'+"0''-,*+)(.(+))13010//252,,"3. (2.+-2 -5F1/-22)#'/5%* -#.#(*+(@21&2-3*&+-,'$2$'(C2&,**-.--0-42.1213'%)3*4H1799522/+,***(*/25*/*B:D²Y0)-0$+(+*%!"%%$%%&&'''''&$""$&&()''**(&*--,,*'%+.-+*++),,)(*-,('')*)'&&!%*()-,&*/*$)-'1*&))&%'%&(*,+%*.30%")/)**)''*,).,(*,1;$')),00.*+,+++*)!+/-,)-6&.*6%+!'&"6D81-+0331/00'/.,//-.+')0/(&+-64(&/56$%&'()'$#-'3$+#.*/$0&.)<'/3671,0-&)0.*,,&*.+(/0%+(%'+.*&%(*(&&(+/'*88,*43,'),,*)'.4&9)&-/*$)/.)5,+0/*),0%%*'#$#?0)++,*$0)$',-*':,#.8/'-2)#&-.*',-,)%%)-9-%'+-*&-.,('))'7/))*(())*+*))*+1())$)+*-*(-/,-4745>=2*'.0,-33-391$$((&+)./((,(+-*$+:8''(*/32.).-,+*+-.--//2<=3)03.(')*,.60&4>/)5;/'16,*(,-)+.+,+/-&'/1&)*'%(.4&&((%"%*"&+-,*+-+-/56-,9"'*'&))''*&$'&%)'(*,..,+"+* ,0)$),,*(((&&&),...++,+)(())(*/.)%&+-./.,)'(/43/*)))&%(**-06+*31$ (D-4.4&2).(2*7',&7$19+#+6=1*40(0@$*/<%,.4)',+*)%,-24211/-+9.9.3'*,)).+$$,*%*7;770+,0/---,7.$2=6/14(.?-/22.(%(/3-+/(6)%(0+8,8.34/&+6.*'>/'&I9$/41''/2-0410781-612;04E-:<;7552/++'#$(.4/%(%C;D°F*,*0$)&+-'!!#%$%%%%$##&'&%#"#$&))''))'#&))('&'#(**)''()'%&)+*$#&,.*&%(#%($"%##$*,(*/./,)(()))*+)&%'(',,31#'-+,-+''),*0-'%$)4#&)*-0/+&*,++,*&%&$'12./ ,(5'0#$'%-2+),+!(..,+*(!+,'''(-)%(-*!"+!-,$%+19),,(%$#!,)5(.#//0"/"'#:#,///*(.)!%--+,,''**&()"%%%%(,*%&-0+&'+/)&,65*&+1,))*)*-,78$=.)(')" */--6&&0,$%*5&$,)""$9*"$&*,'5/*+/1.)3'#04%#53*$)131/*,,)'&*-7("&)+*"()(%&*,+,''.0)$#*++*('()3-'%).,$&)'%))(,/.),;?3*'23+,66,.2,##$$()$+, ")%(+(%;<%%%'),,+))**)''(*&')(-;;+)15/'%(,+.8/!3@-$.3("-4++),.+-/+,+//*+11'.0+%&*.!"$&# "& $*-.-++().76('8#)*&$((%!%#"&$!#*+.120+'(-+"!()#(+,+,..+*))*++)'(*--,*))+(+21)%',-/0/,)'&-.,-..+'%'+,/39,-<;*&3E*206#.(8*+* *(<(*3&$6-0)%,.+,9(/:'-.&$&'+,&0,04245/.,4'5+0'23/186-+1.(,7957.%'-)'*,.2'#4;2-/;)*!.&52/+'&(+-3.$5-;.&&/)5,=698/* .=0/)805)6-4085('35-02/0990)()*78>M=5884331-%*$"&)/-.=8H=JÄC.5'.$&(++'$$# #$%&&%$#"$&&%$%&'*)''))&#%'(&%&)#"#')(&%&&&&*.,'%#%,-)%%,&(*%#%#+%+1+$',+/-'&,/,,+'"$*-+.&*-#!''-//,(&),'+)%%"!&"&)+/0,&(++((*)%&(%(12--*&1%3(&$(.1) $#('%&&$'& !#%+'$(-'#1&#%&&0),*&%(($*!+&0$//5%)*!* &$#'))-*!$-,+,+,'),'$%$"&(')--)*/0+(*--')-0-'%&*)*+)&'+/16#3-4+$(#"*)'0,#&+&).*/-/,&'+'/&$%#%+,00.,-..-(%"'+%$/2.+-//14'()((()*/#$)&(,'()'$$(**%"&-,&(/++,*'&&'(/(#./*.&*)(*()1)+$!(,**+.0/011/)*'&'$&0)#.0"#*#$#&%%27))))'&&(*')+*(&&("!'(*+'+01,&&'('-1-)+,,0%"%#"%%*(+.+-.)(%*,)+.*&,.+()(&" %'%#"&&'*,,+)$)**+'$*(,((+*$&)&$&# #((*-00,(*+)%$&%!''&%)00+(('(('%"&(++*))*,'(-,%#('*,/.,)'%+**,.--'#%(),/3-.43++11%3*-!0(4*-))*5/##+'$/ "(($)-'-".*2",()'(&"(.++"&,-35+'*4$/")%&)'(--*--.,.2//8/%*1*'+,**!"//(,+:*+ ,'90/-+(&(+0-(8(5,&'(!7.7/:/*0$-<,0-/(;/.'>12222343,1.,23.,,2(/516,1442120-",)#)*'+-):2;7IÄ4%2"-)+**'&'(#"#%'''&%!$&'&'((**''((&&')*('*.+&$&))((&'(+14/'($%*,'$%.(+.+*-,8,/6+#)21&%/3-((%$*1/(.!($%(#.01-(&(,*-++0-&&"&),/0*#+.+%$'(%#.20.*+4*$-#5+)/4*(4/(3#+/,+./-"&"!%&*'%*/((9/0('0+%,&&$"(/0+( !1%/,:(%4&**%$.456-$&/.,-+3)*0+$&(#*.,-120.0-))..*)-0-)('%$&+,(#$(0#0"&)<)(-*)+"!2#$),'59+!-4++(++"!).'+.*&'+/&&(/*$111/($)1%%&'(((((!).%'0/,,(#"$%$(%%'#"0C+,,*'%$%/)#2/'5*//-.+.8380$ !(30)*33+*2'&%*-(+9*&48('-$"'0))1000.)%%)-),..+(()+%4/#'1-.,('(&#".(*4",M+ 01!&)&),*,,'# $('))$"&((+.*#(!&..'!,)&&)+*(*5/#(0,$'.,,0-%01,'(&#&"!#',0/.'&%&''%$#"$--&""#%''%#&'(('')+.&#'& ")#%),-,*($+/+*,+(.'""$%'*,/-&#')'$)>,+)=1*)6+1))'5.!(+#$&7:*.6,&*9&-)5&+.1* %./+"*-7:/$0@08%)(&,,*-/3<%+..,',;3(090+/.-,&)3-)4)2 ''8/9/131+').')(6*%#+ :0+ 3##3&*6$-2. 54;-90*.<>319)0.)+,,0"-%2,,(1442232/"00,20)*>*1'5>TÓN/)1/-(!&'#,()+&#&$#&'0.())&&+.,'&,/..0' *1*"+$),%)3/&)'+#.?(')-)$)-&*24,(,.*"/7-"'((380(*03.)*+&*6=%''%"#',2+5&,"+ &-13/%&3#*::,,1(..*%'+*#.*55%)4-4*2++!A'-*9(14K'"/Q4('=#$4!+1T* 7)"5&&3&'+P+# %&1/!#C*%(?/&*1,(.52*%'+-./*'/:&0 +'*'&+,+0*--/2.,2-))++),3.*&&()(&'!'53$".%'*++**+:,(25,(.7,(,03.!>2)+22,'0('2:7,&0&,A+)".(.C'%)4' ,6,#)-,,-/-($,' +>8*-5-0(,6,-#-2;+=6:05592*5=1+()*.=L¿;*'32-2&!%&")%&)&$'%#'$,*%&%""&(''+0.(,/(!(.)#)%+-&(-(#&#&'7 %(+(#),&+/0*&'(($&--%"%$"+-$#$-%%(&(..&),+'%&',%0#+"-#+,,..'%.$35010-285/,.2.&*#),$+2&.)5('-#'#5&-)80.-@)14A%(!*5&0*'1',#-(.!+'$6-%%&,%)&)-A*/*.2((0.'')/*&(**,.1*,7&2'%(&%+,,0&'%&*))1%##'&#$(-++-/.*&**)(&&*/&')++,-.6*&.1)',4)&*-/)94134.'"-%$,33/,2&/,<),&1%+*<$%(--('-,())((*,+'#**#'42,02,2+.7++.6.(/)"+/,,*&*,&(&%(-.)#+1/,22,(">-7.3++.+$"+64)%'*,+(%")/+%'((-$-1-+//+%2,%-*"''-/,)*)'&&) (=+11-''+,*+%-."(64)'&).0.+'")1) $+&),+'%&(!$%$&+%$%(,//.")>8&,(-3/=+.&2"%,44.*+,/!,"*!.!%%%" /'''%""%).)3('3(!",-$ &$*(8(3**6**2.)-3(+'(/,(0+3+&/+$.%%#$($!,**-.*'&""/!+!-,:2=.4/2+2$%-$3)'*(('#)%'6(&!0$"-0)+5/,01,**$8/050**-&.5>G>,"..*$%,0/4...+-/+8B&<773.(6-3'2(/&>-006"3=H$238*,''9Q$37B+'+#.0*7(6,)4;4+.-')-@8'/5-*$7-('%-&25;+?79.-,/-+58)7577742,>-3)--'"%,,))&1-%*,(%" 6A1*"-)+5,, **+.031+++2;@E?¼'0#+/($&%####&'*(&'#%%&*(',&(++'$$&'.-)*)(+,-+('&'*(/(-..7+')-*%+/)($%+)#'1)+*"),!+-)""),)(#&'"!'*%')(%%')(#/#-&2('('),(,:("$&#$$%+11,,4=1//.-00)*%''''(/*5$,&1!(&:-0'5$,)()&,3!$0")&6%+&8-/';"$,(/4&.'+(!3,2$%#'+%(:'(+*%!$+'%',,(),)'*'$'32..2.),%# $(++.,*+/1/-0,-33-,/,)%$%&%$(&&')((()%(,,.,%)$#).-($'()))+---(+))2$2,- 2'0/,((3:/%*.//.,*(((**&'00&0)/%&1*/,-+,10,++''''.3-/+(()*'%+.*')&#'(/%$!(&()'')++''(((((')-)%(*'(/0/,+*(%.+%#')*.('(*)'$"(2--�()+..+'&''-/+*1- ,)&$$&((()./067-/.-+*+,.#&)*+*(&"'*'""&##2/&.'))(#&9$'(%"%1)1$-$.*+))("$0$+) *,$'*21,!'*&$(*(.+%(,&+1-('%!#*0-'%%*'""()%$10+,0,)-.)&''&&(7$$+**)+<6F6/2&"*'$*'/''*&%'%+".(3"--5+)15/)()'*,()*'&54((*)*/30,-**/.+(%$&-3($&)*/30&736*9+2+4*2$+ ++.)$3&(;3'96A++,0-0.6'3*?/* 1&+24+6+>3+',,&&/1*"-1,('(,-)-202'5/1&=44*.010.*+02.16;CB¾9*(#$-"&##"#*(+'$&" %'&%& ")*,*#")&+*)+)&*13-&&" &%-%+.,3*#%)% %)"%&)+*'*/(.-"-,&)("#*-+"$%%*%&&$!#',,&2%.&1'%&')+(,;#",%(-%%,33-*3@,//+)))(',#-, &/(0(%0$)!3(*"7 '&/*-'!$ 1 $#8),%7)(!8&,#,2'3+."1)-*)-('("9()*)%"&-,,/1- )*-+)+'#%20,-2,%'2/*'),,(&).596.'7,(.0,.70,)(**(&#')))+)&*')-+-.**(+491%"%&%%'&#*$&)'/"3),&<.33,#$4<,"*/01/,**+(&(*(-,"-',!!,(/2-*,.0-(+*-+'*+&,($#$&$#,-)'($#*$45;5"))*++*+,-'&&&&'((*/,)..('/-+**)'%.&!"%(+.&$%*+'#"'1*.-(0)!).,'(,(1-"25,)'$"$(,0!(,&%24&/.,++,-.#()**'"#(,*%$(- %'74*.#&46@%).H032.,---%5.4$+!)'((+.+.;')%$$#!<#+)&!%$%''%!/!/()+(,1,'&" !-3+%%$)%"#$&%#-,)*.*%).)&'(&&(1 )-B-.*925#3.6*;&'%)"/)*,'&)(9 $&9+0%1'$-41+).+./+,.+)72)--)-01*%&(*2('&&$#'.-(()'*,(%672&>-59=-2"',8,27F+'&)4G-@481/82*2,A/&1&'/2'/'?6*)15*",2'"*31)&+0(D:)")<95/1&;/1*/21/,""/3/16;GLÌC*:*/&$ !",&($"%#!$&(&&' #'&'($ &$'%&*'#&)/*$'"$$-#)-(-&$&)$#& $*.+())((&'&&*'$)*%$*-,$ $($#%$'('$!"&*,&2%.&1&'%"&+((2 !&)&&+((++&!%.&+)%&'%%'7*0*4")(.$-)"'+$ - )#+$.%*%.&,)&..4'/#+"-#(* .5&0.7)1(-),0(&*0+)((&%)/((+.2$((,*),*&(/,&'-+%(%&$"$'##$)/32+&.,)),021+(&(,-*&&+**,)$,(**&(+(**-33,$!$%$"$('#+$+,"+%.$&?++*$%&+/(#(*,-,**+.&!',$"'$(#* *%++(*,)*)%%)10(''"((&#!!$'))&&'#%/&,) )*)('())))*&%$$$&')%*'&+-(&*'&(*+*)," $%&('&! $'%#$#-%,0*,$!!$*)%#%,/)!$+02('&%&)-0#"%$ &*%+,---+'$!&('()'"&&&')*****#+)%1)**7 #!4,+%"+.(5*/!+% $!$0/+&$%%$#'!0)3'(  $''''&& 1%3)'$!&*&##% (.'%'"&#$%#&)'))'(-("%-)'))'&',!+&42,)-)&1'2(*'$5 -')+&%((*")%-)#")-,)*1-/0+,/+)3+&/+$,#,39?:0- $-30(%'.))*(*,("(.0%9"325&- ("2"4$% 1%-/1'2 >070,:*,4)3!%"2)3/+ .#2-//+/.%'-(%'03,(-0#7*$4/3-/"3$'#/1.01$+=:<<:?@­8<"'," ,#%" $%$(%&&),&$+$!!&'" !"#!#(% #&$#*& '&/$).&)$(*-("&("#-1+')'!) +,& $&!"%$)#&--+' (**'#"$&+%0$-%1&*$#+($( * )*2,))&!$($!')%%!6"#%1"3,/#,!- 3%%&<((5!%%*&(9,'1*"1<*'5*''+) 29%*0?,) 0(2+.%%.!*,)''''+1'8()%*)).,)+/*##++)-"&(+03-#%!#'))+/(,83##!!$)+($$+**,)!-))'!"&$)''&#"'.))&"&-.),(2'/(('"<#)*!!$&'#&()(),/%'-")# )!!)"'!#+-%#&#%12)'($&+-(!'/$%#$&$'2*+%:+5$$""$%$#$&%###%')#%(%%&#"&+,,-+ !('%#&""#&!*!)1)(/'#&& .,)+,$".*++*(()*(!'"#)(*-0.)!'++'&*)%*$")+'!'' (&",#/*,#,!&%(%%)*')2"'."%'&#%'#$.-%!$%#"%"2'B+#(!&+**-,*!1&3(##!&*'&'#+!(#%( #!%'$'.-()(*.("$-)(**(&'')0.2B9#$--)1&#*$/,2F&+%')$"&&"*='&(<,&#$'&$$(/+--)*,(&,#!,&'%$%,07-,/2.)-4*%'**.2/'!+6-87$&*':-729$+%./-)#%M8B%0-(:%/941)%+31$1 $#40#0*$*.'%,2.+..(-$6;:)936'4#�-4:+ )&*4;>EH¼v#!)*$'($ &.*"&%&+)&(((! &(&)).*%'(%&$('%&&%"&))*)$!++$'*% $*.6 =1=++);(#-=9%$-*$&('%'.3$(-)#(,&)# #$#%*,&%+/.-/(1-$(,'& '($/+$-3##-*!$(*'$)0%*+% #*/ ,4*#)#'$-+#..'#'*&$''#'(&&'(&+12-).7&. 0++"B),'4",$$%&22"'%()%7##!7"$:,,(A%**+,'%,*,/-%"-=-*2# 3&#-&#+,9)"%""&8(!()!/))/.'&+.#&.,&#"3 %$$*$*##'CD*&$4*&++&'-7'%-9%&0( $,'!*%$*,(%%'##)*$!"'"%)(*(!.,(*1-&('&(.0,'%)+)&%'*+..%00&+&--'&-,&%$$%'*,+)(&!$..$$-",$."+")$(0(%&$*.%%!&&!)#'*#&,($+%-&#&&'$#+1,,(3)4%)!+$*,#$'#"/$)!03*%&'*#+)"## '%)+&&)'(&'"!&+6#&!3$(#3$)"-'!$'""+1'" '("6!/#*!)/#$(,,/.,)&(+)$$!##&++$#+!''&#$**(# "&(*.+((,,(),5.(&)+($6)(($).&('&1(4'%$'+*%$(!$2&,*,#&6$&%.2.)((&1&!%'$$*.*)&#*1/5'#%&/1".!(*8&0"1&410*$/&/"(&*;+$0K')/9%26(1!:0=&*+1#/+3"!%@-#/'%'(,,%!)(,<:+&0#%,-32$+<=+%12&,*,+,46-*)'+8HOÁb)5##A"')&!#*(%%$&$#("&"""#)),& #%$'"%'#"%()#&''()$ **%(+&##$,*$,1%1(5&(%5"%(20#$(!$$%&(('&!%)% &*%*%#%&$&)(#"'*(%&,/2,%''")#**%.)) (.##*$! !%&$&)--+().113'*4,().'-*#02%"',('**%(++**+-*,..*'+3)0 017)>''"4'/%($ &( #)%./):+.$.%"-"/'2%))*+%#*'%&)'%(/)%!%*%#+&%*(")/&9,$(,*),4'"+.&"'*%$*)#"(,"%.,'&%&"-#)$!,2-64(.*1)&*+&&+9+'+9*&**(.2)!$%"#*,)&%-*+01-**,(*,)+,'1.)*/+%%*" '00*$&''%$&''&*#+*!+*),(&)(&)##$'*+*(%&""()%&(!/&0$**& #,,%%' %*(-1+*"$%!&)!'.*&+.*&"$ 1#)%'&(''/503/8+5(1,-&()"$)$+.=/"($&!,,%&)((!)(#&(&'+())$&,+**00)')'!2$)"-)B&*%7*/$,$#(*%$.7&)'%('&*!,'!,".!**%"$0()'%%'%"" !$# $")$)"$$!(($&+%$&*)$! ,)(,+((+2*(+(!#+1*/0().'2'#0'.-+,.*"!)'1)8&$'#2&-#-#++($&++&-%#(($$)&$%$"(.*5---)/3('!)'3!'%6(/(-.16&)' ,1216+;&.)5 .&21*(6.,-?!*,* -#1+/)+%1!2)"'%(+(()$+0+-96)&("&+'*-%)03,&'('3242/11(//15>IN»v*&0 &)'!!&&""'&$%##*!'&"" #++-' #%&)%'% %*,%&&%&'%!!**%)+'%%(0(%(#( /#($2"+(*)$&%(&&*-+$"$'#'-(*''))'')'#"%(%! +*+)(//%&,&--&-'."$("$' $ #''&&*'##*1/*4#"10))+!$!)+&"&)%$(()*++**,.-+**(%(,'%)6$*'& 7,0$,+""&(.3.,0)8/8(%,#&3'%$'&')$"(&""',+&$&-)#%&%''-.# /2"0&!&*('),"!*/*(**%$('""&)!%-+((''7&,&%0'%#",#.(&**&%(2)$#5"1'"$%*+"$#!#)+)''(&'+,)'&)%&%!&%1,(*,)&'*%"&**('$$%&&%$$$*#*)"/0'+)&'%&,'''),-,*#&#!$%'-%!1'2&*1%'0(%/'%*,(+0-.$"$%)( %//)+,(&',$*''''-2-+)4(1$-*/)('"%+)*(4(&!!#)% %)&$"('$&'')-)*(#&--""(*%%&"#5&##+$$, ')#%)*%#*3%0-#%)$!(% -$-&-,%!)!&(&$$" "$')% 0$ ##)#($&-$,((+-+%"#,*)+*(')).0)! %+*(03(&*#1$-$,*"/./.)",%5'*"",=&'"2&-/-**,.-(%'+*$#(""&'%)-'*),*#&*%'+1%)3%#'8((!0(4*$2+5(.1%/='))*#:#,)*(-(02)"!3*(%-#&=!*)&#%-/)')&./+,31(&!!)*##((((-0*!#,--0.'&' ./59:AF½ƒ/"=),"&&" #''*+'%)('*%)'%'&&,,0+&)*)+%&$!!'++&'%"#''$%,*&)*&%'$-1((-'("/#,'5*1-+)((&!**,./-'"&'(%"+1,)*++*(()(&&(*)%"953-&'&%+$,-'-%/$$'#$'$'%$()(()%$""(.-("##$'&$%%(#!&'+$$$$'(('&%&(**'&()&%&'2%//@-*(+&E¼X')"&.)"%#!$),.,$#+,&&)(""+,''&-,)-,''"$%$&**(''$!#'(&).+')'##)/70'3;/,&/".(5//0.+($$'(+--*))*'&'$"+1+'*,+)()*(''(+-*&'',,)-20"' (+'-&,((($$)-&'*+'$','+-++.11'(%(%$*',%--$-*-%"!!+0('%$$%&&$"#)+($#) &.#/,=.,#:$(*+--,.#0(,/%#&.*;/-*#$"$*('-,,**+--,-)(..#$3+(&)-,,11-,./,)'$! %*,(%52.,)&%&($&)$"#!:'./-/(/7-"6<,)"+('()'%$&#+!2"0,(.72+-0.)%$'+-*+,-//,)0,,)!#+,/'),'&)%)''(&%).)')02-(&14(.207/41(&-,&$+**,--,*%&#%-/+-**$1-(()0,$)000(-.+&"#((&$%%!"'$.,!!$(/)0%5-5-*""&&*+&+)4)3'1-*++*+*)*,%1,)1++%,*$""(+(%'%%+'&+,'&($%$$(#)4' $+&2$#5'(!()###%&)&#7#)",&!('% *,'&"*/.+)'%%()'$#$%$&)- )1,/-***(')*+06+++)(('&-0/)&(+*, !&$())(4'0!/5%(**'&$#:2;*/(6+,)(6$'221.*'(+$',.,'&)+,12/0/'-/-*,-*'3?7.045/18'+(A5/,0&/-;5;+(+>'0?$0)"-.) *7&3!3=?';"8(,1@+1-''**..()&*00,+*'((*--++&15-*/0+0,-+%(14739;5@MÂ[*% " #!$%%%(++)! ((" '$)+$!'('+)#! #%'*,*%('%"#()'*-)'(&"$"+2(-8*+&-!.$.+(-+(&($'*($#',###! (,$$)+(%'*+''%%(,+&/-1/'%(&"&%)&-%++**(&*1$'**% $+%,/)$%+/--*13"2#)$//%*%+$#%#)4:+*('(('&"!#)*'$#'2+2#1((2-8+.%<",/-.)'.*6-.("&$)%;/*+((%'-+).+-+'%),.0(%.1##4'%%,0((5.-,,,*'$'&%&+/,&20,)&%$%(&)("!$!1(%)<(')(,",/()" #--#,G&)$0)"#&'&(')1&,0/.-+'#%$""$%#!39$%+-,*,&*%$%*+($#)+*(')(&;&"23""40!%'.0#6,,"8+,'(,-*&$",'8,/(5$/#(9&'H6&%-21-'),,+**++,00,..',0,(-.*+-6'(-+2-9:*2+>/'39)-("0.8!*B)(Q2))6*))3'#'<"+('=-(-;%(';3#(05/'(/0-)'*01/+),,+274)87.-,0>*-3?/73-,'8&0.6$2+2$00B8$(;&55O%!!K1!&41+!-+/E'$4#%%B('#9+0/E)*25102//!#' 1:#*&%.,&+<*#,1+).3)*0.*)%=-382AO¼R&$-.&$&#"''$&+)%&(!#$%&&)+'!!'&$,++($'.,&(&%"(0+%),+'#$'(&*+2/',-%+$*2+$'..()+&/)3$*!-$23!!'%$()-&(-*(,/...(&*./,*)*#05,#"!$"#(+)(()+&#'+09;($8)..+&!&,(&/&'L/$-&#)* "3%%*%/'$"5$$#<*#-%.*B'#&+&,""1$.:)+<'(%8%*(>,#<6!.=+"+)+* +,(+ -1)"#",0.*((-" (-/,#! #&$'%!"*.,+,-*)+)%(--& ")-*%))+,)%&*8 0(7.&.'/&2!%'(%#-72%*!%+&/%+"$*--(%)01*"+$&-12+#.0,+'!"& (22)"%3,'54)+"(,..-(#"&.+4'0(+('++*./3+3-()#(..*&%&"#&*,,*''+23-.0,&(/(&3/1%:/''"$(,20&$+! 1 )!&.$$"1/!2(%'/3, )-#*&$&!-+-.)$$)0'".,),*9%"!D:))+- !&1 (('/"$+*+( $+!/,3:0.))(36*&%-*2&%6--!%%,"K"1.&,0)&"!#'*+4&.$+(#3,0%1'/-",0/*+31(*2*$0882""!3($&&'#(#.%.%")&!0A0$60'%#.."4($$,'-#%(!<%2 '251/107%02@,/,0*54*21-.*)6+550*%-%=)&/< %1.(,.C6<07" '''',/(&0&0 %-5-7-0/).'-& %$!%+1,A4.&D##.3*''"00$!'.6I-%OP$"5h<(+"*/.,(%$%(*4(3).& 6),)@.+&1&+&&*%10339=/#(5''0-''(0)*--.+":(-*9$('&(.2000-?.():=+3(*(&+0,#0#",(?(4##)03/-.KJ/8:E,)&*#,,"+)3,'2+=*37:,84=+-)6.8.4%,04(4-9*('32.1.&'*,#('(1"*'.)06)/'<0&+6?00)8/2!02&,.(#&+-**600AC­(&%%$%("%!!&&#% +22."%!%(*.0-',,+'%'(%.,'(-)$'$/0+,,&#--)%%''$)*#'5.,$+6.#..0-%$$)%4(0&1'1")5*!)$!)6* ,+%$$#'+(+-..,,,-*+'"$*)#-(&''%$% &'(,+*.0!&"-+30++,&%/-,",/+-'/()-(!("*.').&%(%:0,04$-#,"/+(+1-$'2'))7'*&(!0#*"-(5)0)8)(#.#(0)))+%3"-%&-%"%'&(-%&(+,+(%+*13+%''!()&&$%,&)(#%++&+&#$&$##%*.,&"%)*('&#!&-0.''/6'*%0&/ **)),0/)(*&&4*7+.#+1+17.+*'#!#'+&(/0(',."&(*-0.*/+)((*07.+-,(,-%#'+,.11.(++%/"*)+'%)*+0%317",(1',(&,,,--,)'*(**(,.(1.-)'./%E(%5,*".+,+'),'-!, *)7$4$),&1&10#!)"++&$&%!%-)1@/"%"+(-1-&%+3" .,+10?-$&('#"&!$1(+'$05+:.*2,($1,")%(01/!A&'04/.-(:9 2,-1$($3)*-3.++)&"#&*4-:04#-',!$ 7'%&"'# '&+/67)" $.$%('-3221)0)1&2%+&.-2%,B3;-,+68'-%,0./2/).''4)6)>,+.12.--.1)+8%),0'/0(1./*-;0;'3-7*1,<,+423G.0,6<,'?,623*--15,"#)(!"#.!0+554-"4*>1(,39)0 ,*.'0$(*((*-,(1065:H¼-92+-"'"$!!&%"$ *//-$ %)**((*)&#%# %)('*($%*(%)02)),'"''&$'+,**0&*&!.0'%'-$-%*-"(-%.%<>4*+-,..($%&$&*+,2" -#266/$$1%*'.7-01:*.)8#/93$%.0.#&#(,*--$1'&)&)(/-'(,*%,#'**,,*))'02)1<5'-&&2/2'*%*/*# #%# !',("0%*)$(#('!&-1;-)4+*''(*)##("2>3 (( ",31/.).?',(3( )40(27&-+50+)!.%*-+.20*,/.:"&(H43332/.- .&3/8-=#'&)$.)".79%4&3#0!#3*)$*%3"("- .$#.+&&.2)"$.2-42/9...942/%3,.#/5*/0=&*(8*51()*+-.-+(7-<<:R¬%1)%*$"$!!&%"$#)(&)&"#++("!%((#)%"+.,.)(##'#!&,/&'+'"%&%$'+,)(!#0"(&),'")-%*%"#+)# /#)%-+*)*.-&%1"-1$(($&(&(*&)(''(((()-0.*(&$ "(*&" %'# #%'.$"5U.-#'').,+1+,&9++!1+(""'%"'!%*)*%3&&' )*8$*$.**,0.)).*+3(,$)"*#,!*&*"5.1%4- ,7(",,$)(7'2+-,)('&&(+ ")/.'& %%*12--(%**&(((!".1+)'%'-0.))*+*(&#"%&*,*%&*#.= -)3&,'(2)'/1)$&"$1#, )#3*')+.-(-*'(++(%0.0/)+11(#%&%,/'+&#$%&'*.$,1',5--/-)''%!$& *+'$(((-,!+$0"))++*+04520-,+*)'+&%$#)+$$((%%%&(5%023)3-,,'')'1.8', ,(!!,!0$+()-3%)5".+())'%$)(--&#%)-+&#&)1).(*2),0,& .%/+#""$,+(**,&,&0$$5.(*10+-1'(%4"&*(#)#!+1'!*( )8;.%###'/1+#%#!"'-0)3$) .)415%0!+.$*5$) 3/-,('*,#'*$$)$",2.,+&.0@6?.3+12(&.*$,-*93++%/()'&,53,24'4#*A232/.-+*+4(4-0)$)"*/.70#48.;-.!2(+%9//9'&(7&3/ $#/)) (+&&('-*2+&40'.7*.9-.,,!/7+/0+"''2$-,,.0.+(&3*;=;T¯>8*,+#$"%!!&&#%$($ %'#$&'$%+-#,& ''#(**$"$ $)*$')&$))(%&('#$#"&( %%'-#+&%#"*1-# ."'#(-#*1&#." *%!)%'*(*+&+*)*+,*)!&,.,)()!(+($#%&')&#&":^.(,*# &*-300$4''":&)(%!%;# #(*+.' 8'!.#):#)&/++-/.)(*)-6)&$*)%/)'4"%4** 41/@(+,(-+8'3.2%&('&%%&##%*/.("+ !$)-+*--072'" &&! %'$#$$$(-+',)&'(($ ')/20+*-22++:*A(-(1%-%$&%*47/#'&0!+!-)=2()..*(2/--.+$3..-)+/-(!###*!+(')*('(,'*-%#&$'**'&'&#(0"+&4'+01,'($ #"/ ('3#*).+"",0+/,)''''&*''%"'*$#)'#%$$+"*B%++/,7B('3(,+6(1$.-".$3%++*-=5#9J1*****(%"#(4&((2$&()(&%%$'5*#*)5$&4(+.N2-,68+(6(".%)*0%("1" 4/"&20).50 #D*$"2/.% "!")!$46+8[a&V^3(($!%-11(**(&%(+9/4#*#0'7/2(>1.#.18'!-)-2-./)'%eB087)%&-2.,,'C$+9L(!#+-)5B).!)()1'#+*'&.87085+%///*,,)()(%@=(8;A*.-4.7==D:16.& E2*/,7/<./"E-$-@,:)%(&)&#%""''#& ('"#%$&#&&"!%)+!-&# $&'#"&$$,(*&%)'#%()'%%'%!$&'$#&)('#!!&"+)++*-.&$!/#*(!)0&%/$&$" $%"+&&'%),))))+-,)&#"#&)('&$"#'*)()%'')&"$2'2&0#30&")+'&'.#+#1$-+#"%+2## !)*&&$$. & . #%6)'+&&(*($!!"4!3$&*&"*$. -'/) -#*'*$,1&"(*)-(2+(. $&%##$%(%$%&&$!*! %&()&&,,.1-%$!$&&$#$&!%&$%('"+(%%&&$"&(+.,()-$%"'+$.$/%!&-00.'(%-+#/*60)*.+'*.//.,($"0-.,%%)(+#'&"-%)*,-)%&+'*)() #$'(''('$"$"4)-.1-))$ 0 &$/!-&#!%&*'$"#%&&((*(#&)%') $"&3'141+&.:+'1,)%-#3%)%!#)2$'' $ #&$&''''&%$&5.'*&2-+***& "#.%$.*1!%2$ %% !-1#!1'+!/+-$))'"*"%*%'.,,)#:)$.)-'&-+%(%+*&#!*:O-/.) %&(+&!!+**)))*+($!(,&) 8-+ + $ ),$'+(*'?#-4-,0(&*.+,-)5 '+; 1(#+-"+*##$1(!$)+*/672-5,)45'$()'(*)%)'#'1%4#,%-338+40*,"8)2)$1(1'12##* 0$)"(%#"()#(.'4/$--+;8015(*3(-+6'$,-/ )!, ( /+.++-+&%(*".02@F¸p@'4$%$&#"''$&),&$#$)%*+($$$$%4.$*&!- ")*-71,%'+&!&$%%$%('$&#$!)/"3$")$ %:0&%-+%-#-#105.")"+#/(#().&$#"'-+%%%(**&"*"%%",'$&()+.%($!##$*-8!#(>)"!$$)67-&08*(+4)(8.!$"$+)  +&))%!1(&'()*+)%"!:&/)0"'+ *+ !&7,-%7(#".'$(%(')"*!%(+-+)*-.)% #$+)()''*'!! #+""&,,(*0#)+&$&%!((&$##$%"#$&#!$),#6%%-,(!+#1"'! +.&#(,+%"**#-'()'),&#*%).-)')-,+.+!%%0(.,&4-$*/-$#-",((/$)%)*)()&"*)%4'('+*)+(#$/ #(-,"%"'30-)(*,./'(,*#%)&2/!*(!%:&/"2!%-22'(13*,$:+'$!!-!!/(#/:(%"$##%()* +.11"%(%$)..(". ):+#-%!0"&))$(+))!)$%8*$*3%'4%$$' &.!'B/(#+"!,) "31 '82(1&!&"%%),'#)%$$&),--*"+!21;+&&,+"-/0.+-%,/$&+,56)037/"")*(#%((+-(.>!&%4(%$-!$22*!1.&111&-,-1316$5'07,#)+*+/.))2#*#%E$-'.324%+',7 @&*()(=33.;!&*;*&*>".I"&0.$*/#&&,(/#:26/,(1,&&. #&9!3")$*'(*(##(2"601FB¥E+7.+'# !"#$%%%!,.+,)%&*.-(*0,"(0/%#+*"&7$"#;+&$*-+*+' %+(!+,$""-*%(++#),!'*-,)%$#&%%%$#&+ (,'$* 3-!&&'!%'"*1(#"(*" '*)$%6!#'#$%&#%= $''$$)-(%(*#)&#""!&)&#,82#'))'')(&,+!$$,6.&"$./$"#%&" %+%,&-3'&//+-,&#),.)"#./ ',.(,"#)02+2%$+)$##(-+)-.)';4,*-121))$&01+)"%%(:&#,"#'(- 1+0+);'1$,$4,5+<,1.3(&/"+)9%+; 2: 4+/'$)#!&0/'%%*3.319/#*#,--+'&(+"40!#+/6!+;-<=LÁU+-"%)*"""#$%&&#+,*,)$$"&&$(.,$"))"$,+"'3%.*6(1*/1.--*$.*&'('(*,", &&!*++&&12%.+(())'% "',-*%#,2+'+)-%60!*+(%!$&").%&!%)&%''#(#4(+($,0.:P'*,+)()+("6,+"5#2$(3*()(+9&2.02-12((,&%(,+(%%'0)- .%+%%!$($ &*(0H*+*3(,-,+'+9,$-#*.)($',($)"$&&&&(***-%$-%!!$&%%&#)**,($'&"#(($#('$$'+++////($*&$!!"#$$ "!(47,&3$)#1#6.$!&,+'@$#0$*!441.++,,*)***(%#9-'&%))"*#"(*&&+#+"'%'*&)(!&-')!#((*.,*)(''())%%&++(*,2-'))%$#44&#"#**#,%3&'#%"#**%%(02+(+,("&'%$$#!&&%%(,*%-)+0)'-)-.$ %).1/*+,*&()'%')&!&%%#$&%&)&(!*'(,#(+)())'"%0"*',3*$*+"%8! (&-9:%*!L<*3H#.((5&(*%#4&+*# $*,%.#)(',(0%"$(%#"##!/&&02*'.*+*%#'+,+-$#%'1@)$12)'*' "*,*(%#&%1'&46%*5-.+0/,$Z,+).(/&$&'+,%H2(-00-(.3/*,,)*840..-+)(-/152+,+) 8**)/%)*&)13$/(1%.24#/1B1/07%3 %()+9.4+;03,B0**F6-(D03,>6$&& (+;71)*1*,-,**,..-,+*'',&+7*>@MªB!,(*'"%$###%'(%+*'+*#!!!$*(!$%!%,* (.&$*/11-++(%2%"*+##-3#,&/&(()(*55'2+$$),*'(&$%'*++/.+))+*(+ -')'$$"%%#')")"$*))($!,-,.*#""(-(-<+,--+)'&&(,,7)1*5&)2)*) &#(),/**+'()$&(*)&$&(#0%* /%*&$ #,+')%!"8$,+1')%"" *$1&2-4#,,+''+'#'%&'&%$%&(##),**.*'&*--,.%**)+)&*% %&#$)%##'--),,,-'#($&(&"!"$'&('!#*+ &2+'#!)(#5#%+'-!$&'*-1+)'(**'$?1(%&*+$'$%)'!!&"*%#-'($&,)!$*(&!&&(,+*)((()**''$+100-2/*,,((%34)#"%-!* ,$/$,"'(')&#&'/3.+,+()1.'$%'%%##'+*&/$%'5*&(%(,&#$"/&)+&+,'('%%()'3&&2 ++&%#"'+("+-$+(*-&('" #$"#-#"-(,1$!%,"! ('$( ,6/6'""'&(!!*%"0#&&" $)+'*&/%%"?,$+''%"!#$%$0+.4/#$/,.+#"*/+/*#"!$-8%$23+)+)# %+,,-&*!%0-1#!02$ *-?&$'E(/+1#(-'()&'($:-).,*)'*1/)***-.011-*'&&06881)*%0.0-1$' -2+0*51!2,0 *+/++:(&005% ","1#!$'7*&'5.9,/"1*%..)('(-.834/.7'(*,---.06#&3+!!,+4(>BNž: 1/.$'&$"#%(*'*'%**"""!!%#"&&#&+&,6+8//---+(&%#"+" $&"#)-%/#-%."#%*('./&/*%$'*)'$-0/,'#3&%//""-%("(%&$%&&&('!(#',*((%')- &*'#"%%)))*+($!%.', ;0*6+,.%-/.(3)5*()$"#$&&#$&'%""%((+#"4''()%'..*- *$#+,.*')&$)14!/5A+,00+()%!$%&&$! $$$#$'('"!#""#%)(&('&+(#"%&"$*#!%$'+*(*))+&"'')+)&###"!&'-2/.09%.,:0*-,)+12/&5$'341/12/,+*'$%()'%0--*#&/1%&(*& #$*)(0'&#'*($%(&& "&$%))*))(()**$.-&,330(,++//,/)01*&')+'+,")+%(&$&$"%"(*&#$%#"+2/(&)+$$"!%**&5*1+-* %)-)+$*'2##&&#$(-.,' **&/0+#%,+"/1&+()*70&"%)$%!+*18&+41()+&"5*&"+,'%"!!#%&(35*%*,&,/-#%+,-*$ "#$%"&34%(+-+"#-2/32('+(+)&"#*+$6U"- -,2#+3/%$(*&'*( 05'#('*'))*/%)..+(),(0346/''*.G%(#364*53"$,-$8+(4.;39+6.8)07+(%,36?,/!)%)'9*1*0%9,<,*(/"*+''&$&5*&>>-8>()+,,,--@,5@1.4(-,4(02+)()(&&($+) "/1(#0%(:-(+0-$%)&%')'# !#(.' !$$20(/!01:.',&/&+'$**&%'&,.$!'+,#8P#)#""+*(-$&(***)(-$C%" %-+/& 26%)4R7*!3-0+(+' !')*(&&*- 0*1!+*= ))#"!!%(/$))$, ""0%*&"7#)'#'*+/***(%##$**(%"!#$2.,--*))*.,)+)',0+),*$$("#))$%'!))%&+'#'-+**+*&"9,&'()$5')#7%)-$27-%'--I%&(1#,N:&!"#%)'((''&%%0$$*0,!&'((&%%%+"00+,"#(*$!),&$*%(*%$)*,+)'&&&&),)&(&"$&((*.*&+.(()(+-'07+3(/!(*'#%"#,,*&#%+0((&$&**($$$$'*'!!'2#+##&/+!$052)-,)***'"!$&$'1@%'(6%$'&##)-/"( (*'1-$,0-((+-(&1("%)-)(.-$,E$1,)524K3(.>(0&7 408%%$B<9631133%$%)*)*,(-.8'!*!:#%-&&%#! "%/"',%#(&+,&' $&,.(0#!))'+--$"('!1-((**%!F.-6)"(R!1!=(",B/,)#-"'%()%'+)0*)*')+( +.-/-)**++'#"',1/*+45.,7-,/6*(47-2."&!;6&837(327%*#4,3)A,614'#-7.:/6%)&E6/)6%,)I63$692).+(,,'%*75711=1)'%$%''&'*0(.:-()6)73F®G%-&(('&&%%%%&&!)(%((&'$!"'*++)-/+&%&')%!,#3)&'+,)),++(%&*+),*%0$/*,(('$'(",*&$"""!&)$$"*0&'1,%&.$%+!($+%!()%'+')*$#(*-(2F %'$*)#!$""#%((%%&)'2%1)** (&,&"1.!))5$"+%-+)-' %$&('%%'*$0(0"+&5!(&!#$"##+$1(*$+*$&)),'8-1$+#6"*("%)+/)**)'%&',(&'$")'#"$$"!!'+*'(%"&.))-,&%(#$(% %*&*)%&+($((**)'%%%)""%&+.* #)!!*,"#&!@(-)1%&/%"#"'0(+.-)&&'3%!'.,!&%$$%((&*"21**!''-&!()&*(%),((.0-,)'%###'%$*-%!)%&'+/*&,*%*,#%,*'6,2'2##$(%$'%"%,,,*''+1*,-,-//,$%&&)*%)4 0*#"(0-$&-++(%%#!('#!#''# /$*($%+/.+*#*#*,)1)%+(%'-11',&(-%*(!%'&;%)&%)%$.+**-!' ''&1!#8,'$ &#%*,)(*(&):'#!!#4%&%$&'&%$&)/"'*#"(%))%"""!#!%"(/+1&'.-*++.$%..%'*()..-/6$-;+!%4&2&%)!4&('#%'&*/-3)#"")+$&,+)-.+,***'$%(+)+)*11.///%!8'(#-%*+*4.14%2+6*3'.$,#+,: 21/%.() +&3,$%+&%9)*0*#&!#$**&+)%"!$'))&'$!$())(&1'84C¼T03'&&&%%&&&%%$ ))&'''*)$!$'('(#(,*%%*/+-/#!;%#%+,))-1&"(( (:$/< $&,!#(&5-# "%$!#%! %(49) &$)3&+#*"'($(0&$&$%)'0-#/#"-)*%$()(- #&#!%R0$;#$& )(%0&', 4+"$%,'")!##! "%-+&%1 "&*%")-($%,&)@20")%!%+17$-,4 %'/+"#%&)%&'&%$$&)#"&# +&#"%'%$&!&$""*&'--'%)$$% $.-+*%&,)%)#(,("#(.*+)!!&&%-)%-(&,*"#,+".E*)'1!-85++2)/42+&'),&$# &..$# $))'(!21)("*$/*"&&%/&#)-*+25.,)&$"!!&"#/5)&2 "$+1-+2%#.. +.0(-#2!(,++%#(&'()&$&+ '++))(&$&'(**$%",&'/(--'&(,2**+%(2*$ %,,(%)$0$,"3**6<3'")1).-',"&$!!&--)<%#)") 0-;4?(8 /9>#3&>62%!-/)&,-(% *.8-!/.($ $),-,$!-$$*#+$96B´5*14&'('%""&($'' 1#( -,*+*)..%"# #+''!#*,*(')(%%(('')%!###)*##%$',,)%*,'./!))4$(!!#%'"$.*"&,(""&5'" #$&, *6&**)'()&#, .4 !.'#%#$'#!'"''%""2,%0#*%%)%"&'%'$(.#+)>#( "/1'&%#$$#%')' $#$'&"5#0").:.!,0%$%'2)1! /+.5.')&'-"&**&#"$'"!') %94.((+-*%)"%"%$+,&)1,&)+)$"$'%'"0$'(!- #-1+" '*%!#--,..#+-'(1+%//!!/*1+*&/!,,&%,1/*(.)&&%!5.'$&('%6'*- "+%2-'$%*/1%($#**""#$&((&$"82#+.%&%;*'*.*%*#."'%&" %$"%&,"+)""&&#%*)$%03*&*( $%&+)%&$+.&#.1#*"(,##*'"')$ (%($+))$/,-0#%'#&*,1-!%#(*!!'0% 20.;-/+')(',!"))%##"$'%! .,)/'**)"&-"1+ ',/+"43 ,( !%##'"/)*)%,!$(%.0)&($-(!$(((+-"+'5!%!0&").+*.%$$%&$ !"0+!$,#$+.%,).5"$%.+))''+1-+*+)'&(+0/,+('.@-) %6+".+%'34,((4-"*, &'$&#)(4."-21%F' 0<,5 #)F#/$*!)(,/#.)<0- 3,!,0()4(-()-%"#&#!#&'+/+#" $% !# !,4-)6CÀU:$-+&#&%$%')'$%',('.,.//31&(,,')/.()$"&)(%$#&&%%((&%(%!#""'& !# *$&&!)-"# 0+!##/!(*%%+-)%*&"'+*)1.9/+831+++-1783(+,)%&(++'%%$#&)'% !&$!%((%&*'(1(4+:0+=))"!)+'&)**('<%(%&-++41+%! #,6%))$)3&&$')*.13*E1010)2$:.,.A#$ 5$#(3HD..O,*$$.!#!'**(''($#)+#(:-'##(*($*%")%"'* )*"!(!%)*($""%!-<`;*34"&+#.&-'(272./-$/%/(4))+'(/*$,,$"()"!!* (!%%.*(*+),0>1&(/0+%4/)(+./.5).2''.'*'%$&)*+-1,'($&&&''&$#)4+$25*()=*();%""",!) (%/,$(/0/-1%-,%**$#)+'&)(,+''+(! ! (*$ "$##.2('0("11%'(&"' 4,)*&)&2.,,$)/-#$(&(&-/&!%((,))/,1E'(" ')(+%&72 2$&&*7D&((/' *'$!*3'&""(,'&'''*&;.4*1/+%#*3/&.)"44$.55%!(% !#!*!()$+1*'())+/A-,%4!) &)$!#,+)(%!B01=4 **+3F)*1R10;S3/6*''((&'):0),34+")-/7?7)#<./'(6/+&'##+,*,?9)%/.(+690,41),-)#*99-%(?+--/889>0/X11, ).F76$;2,"B8),0&'63(/,2"%4,++0+%(*&%&)++.1.'0*'#!,/,+/22;FÀL:(&), %&'''')+"(') ($%(*.*&(# $'%+))*)$!!!$&%&('$#'%"$" %-%$&%'&/%#!#()).(&$5%'##(*'*&#&)(),*!'!0)%& ,-$(-)&&),+**+(%*+%!"%$#$-)#%.,&&$.!/*,5,( !,/)'&0$$*/'/+!/.("!*3%'&  .:,+"(1.&$) ;(# '1#)$0!)&'2+()+-)&,!%3%$'('%$&%#'*%(7($ "'*(%)% $+&"'*!!('!+##$&''%#7! 3%-5"%-$+ ($'04/+*%%&+'-&&)')-($)#()'&'$ + %&*)*,-)&*19-##()'%)%!"&+,,2)/4+),&!!"%'(&%&'&*+)*''''''&&%,((20*1 +*+3!#!3$)!,##"$#(2-.!)*%,/! ,-"!+)%!"&('$# $)$&$'-0,'+#!.,)'&()&*.#! &&40,+#*-0* &%('-/'"&' ,+$%$)9)( #%#&)%*3,"2(%#""$,5!%&,%'.'!)0' #'+,)'''-#.,3$2,.%%72)#)*'-6#"-'%"*$ **$'+'$""'?..".-((/2.*+.-,)% %$" !- 4 *24"'9 $%! $&#3,&(--$/.*-42,.1'.%!+&%#'%#()+2A6*+*-)/*'-%*+<2!&1*8(%!A&, < '$+$#,5/*5-"(&!(1%!3!.+$(+% #%""*-../0-(&(/0(&)'1)+139@±"'6'!1$%&('$#'-"+ %+ &!$(&'+,('*,,)*,-("!#')(((%!#(&$&$!%1++,,/,"2'%#"'5!')*.%("$!!$&%.##,,%%*0(/%!,()#.1141**1$#14,!'(&(,'"&)%'*'$$$-)"#*' '3()&!#,,(*0**/&!('$+'&')'#"#$ !(--*&/,%(,*(&;+0!13(9(%+-E$3#2).&>/"&( 1;0 &(*&)-&#$#""! $$"$(%'2)&#%)*)&'$!%*%!&#.0'$+-'*&!"'+,+$(&#9-**!((#)%&*,($$&$ 1#"%%'())&$%!)0-&$)0*"&)%*"'-.+'&('()& )# "&()1*,/'%'# !"%()'&!&&+.16%&'''()+#'++$'9*+&@5/&B'';,0&1+&&10"(B,-!,,&/,$"'("!'(""$#&+&#!!((5%!)+*+*1#!" ")'')+( E-0(1&,$%4/,/(05,'$#)) &%(' $%"+$$'%*00(""! %+/')+!3)"$(%#%$%!%:0&&&!#/+##-1*#!*$ 0$&22,'0?>2.9-)')0"(%'' !!")&$*)####"!)#-"*$%&""(+*)+(*+*&#""',+0AD51(*,-:-#)7$,)91+%#&)'" "(+(" !',12*%,0%,%!' (,*)...2*0*"+=)2/,0)#("%,%%!%%7#('8-*,4+9&>&'3/,3#(#1")%-5896,1E($'C-& 3/1,*0203),/00-($".2)#!12654*+#'+3#$.()*.33-&$&#"'/1-'))((("'7!7#&*,%.&(*&<(!/%0#$"""!&8#'&-.!#1,)%  "&(&%(()/)'%&((&$)'$(,'#*!.4-*/-%*'%)030+*#$/!(+#, ,(2.++,,,.4*'%@&!+%'*)%%%$5,*1.%)6'$.-$!%&''''%#'+0/' $,(&%%&(**5.+*%#$%&$$%(+++(22+'$"&)*)'%%(* !),&)6 $*!2#)';/4)1#%#  /-/&5)2+3)-*##+*#*'''$")4((+&'-%8&!))&&&1%#($#*&'(('%$$8#*"))'4.+1-72*%$%,-%)&&"&&"-(!).-3+0.)'&*4*0, !,+ '#"(./--$$! $,5/-,% $*.,&-(%+,-8.+!#!$%(,+! )&*,$"$!&&&)(#%),*'&')%*"1#)#,(%&'(*,&*,*&#$'%$'*),))602'$- "3$5.),/.+* )/*$$')4-$%++.:5'.+,3+*-/,-43,,!0;4'%'%084/2+$++.)$')'("% .0(#,(!,")-"*('1 (.-%8-2%,!,-&&*,,&2 4#$ &&$((+143-(%'$&##%*:D;7FN²Z71)+&### #-$-%,+"&)! $$&)',)%%)++*%&),)%%)+..+)(%!(,*')'&*++.,)..$( '&,3/%,;(')+#$%%$$&'" /,*.+*)8/"'*6''@F,*2!%'-1*!!($6C-(.%#18+&+($*)&))%%'.Z)!-8"$%()$'4,%J*$$0-19*&$&*-,**(+--*+05$"!&&(@+5$9.)#+*.1 ,,*(.P;.)I.**/,$1N"+#//!6**($!#*0*/+'+,+-&%$%%%#!,+(+.)'/&"(42&"("$*396-%6p=?2!'"4+3'.,)()-156(,*=##&'(,)"$(%H.!,4,'+)0-#"*(#$'&+'&*.+&#&%$#"#$$51+)(&'+)'%%(+,-.63+&""..,'#!$(/"'130-.6%#4*$)%8,1'0!<='#25-%'1%.%/*30$%23&,/0+$$-7(+1*&/&+$$$%$++%.5/&$(*($"&+1$2,1(92,(2+).)2#&,)"%-..+)$$+*()$$#,?(++.06B(*5?5"#2 %&"#/= !"-5$&05+&)*",#!#+$(8I&( -&&-,%'0)' /2%)&6$(91,"%'(()%&*,+*,-+6&'!9/)84/*()+-*/1,$ $8%(:5"(,&*2%P(%%3$*.($%'&&&#%$!$*)#1)'8H@-'. )*-6/2-.)*10)'+.-$"-.*3.&&"#)%!)-%(, (2&,9(%)!7$ +Q?.&2*/&;/(00*&0>6!)H,"<((//+,0-)-+-264/,-*&'& !%$/;40BN·U:!,("(%!!&2$*%1'!,! &#!$$#"!! #''&'*)''*)++('('%),)%'&&++/2,%)+#-# &/-+'2(&%,!!"#"!"%&!*$'/(('#$"'*!!"/-.0) "*'$-3+'($* )1)*/',0,'*+&$*A!!"/&%$).)*6--!5/.1(*0"# #&&&'&)++*,16!$"!##(4&-%0%.#"' 4%"2+$)$5$)+$/!&*($%-5*0+%(+('$$%&''%$+*&(+&%/(!$/0&"' #)/31*$-&< 52")"0'0'&'%#$(,..'1#+$-*).)$+&;.$'--(%'#!/,$/&$)*%"$&%(!"''""!!,+((+)(.(&%%'))(&.-()('+++*&""',0'$(,00*))+,&,)8','6/1#"()&$#+!*$0,.,&'/0+)/.$$*+)(/)'/ !!!$&#++&-0($%(*($#%(&+$(.(#*&',#(!))"$*).-.)$)-) '%"!!8"&&(/116'$0?5!6%%%%!#*! #/5"".4,()$.&#'%-$#%9$)"$"""#$%$"" '.&.+1"'60!!*%%)*)+*"%&$ "')&4')3*(((% !"-24-""-%)1.*/4>%/,0$61M"#*4 &$"#%%#"##&$'(#4+%.92+0)((&,*2+-(&***.;30) $+64-,#)!$),&#+).*$/)<%7%%# !(;'!3%"-&-!4--,# %,1)/$($4&&$',&!$.,-/.,/5+'*,))' '$*..6D³$-<%3%#!##+6#($3 #0"!*2-'((#%'& %.*'&()''*%''%%()')+'#%$%+#(+"7$%$>!!%)+ "(()+)(),0"%&","=()(,3#'#!-.&(B0$(.*%%*+" )&!)0 *&,2%57-&)) 1'8%+&#*2.-6#I&)A#'&%'-/,'%)&'+-*&$#%04.&!+' '% 3!'#1,(,?/*/0!.5#$#C5"&*)% %?&!''$!))#!(0&-( #&"$%(*,,++'%!"$ +%,+$'0-!%$##&(**#A&<("0#%())++(&())-/="#.@ ,*/)#-(*/&!',+&+*0,1?+'43+&"%%&&" #*&&&%##$% ##&,)'-$##%&&%#+0-'('%&#%%$"%-4$*1,!+..$O9%6(21=&**>) #2230-"3(2/=,%"&(&(-$*% ")$*&(- $$!%'"(& %)'()*)'$"!5!*$-#+!"'-!##&+(*,/,'+,$=3%%,"-/,%%-+"&#!"##&*0'#,76)! #" +..%*-%%')2%28,)5( "/:'0 ((#*73#$2($,8B/"(&%,-!''+-+..%,)"&*' ,&)'"%&%%')),14-!# 464=)'$7(*+: .1*+"1"*,043.,-&37* $-2!$(+%41(50&))5+/+%%'.:.+9>*"2B"12//($.$)3<2!.Q%*.)+0_)/4%"%<$.+>.*/[))%<--+B0(/:3)(,, ="2%&&-3.)--)&'&'/::-$&-+C+'784B©='-$/*"!$')))()#*+*+&!"#%(;,!$/& ,)&+'('! $$)-+$%,,&)*&+.'!'"!$ "Y"5 (%$2',2%18'(.-&&)&#*+!&3*.);%%!%#)-&"$#'**'"$,4 &$!! "*)+),. 1.-&")+&$ +6$+1(Q&+(%&),%,'6)0&+' .'1"',.#1!+07!53+-"%&/.)$'4)1* %3 +!*+'5" .'$%5>1&/.)3#"+(-0!'(&(#'- %'.%(."' '"%+'/-'*44*%&&$$(,*$7%)2#)3/'$&$"("()%)0.%&'1'5$*,,+))+)!-*--)*/."+4**2 4,*0&0#'! '!#1)&*(!!'8.# $)(&5(,70""'1151# &)&7"+ %)<&%%+.&%/&%*4&;+/#0&+ ,!&!&!&.)#  %*,,#+*&*-**$'&' )&*$6 (!!!. &-)6-+#&8"&'.&('"+!*+#"* )!7&.%*2(%)+''(#('.1&!'-',,%%+)2)-+!!*#0#!.5%$#%#")$%*$()@4&( "#')" %&##&%(+16 -#!.%)!#$"$)!/, +1)%$%#)*"($ ))()-23''+"9/, *""5!!$33"4+6&$**03/*)++2,'!%.-)&(-)#&14)1"(;'$+)(,23.)#'-.($*3,(&)$%*042,,5?,#,8$1= *:1*#!/+<)0$+/'($/2032+('=0.20)+0-+*%)(*,*&%'#/-##+173.-/17F³P)(/ ( %%%%$%&' &%$&$"'!,"&5)$(2)#*&& "+%(3#)+().,%&(&,0+',+'''%S%0 ,$,)6#')6"%.&//43*(*&''/ .&24(.D%))*/''+(%#$&('&)06#$&*'""#-0/, "6!$+,&&('#!!-('_!&)*,01/)1*4",)5&'4&.)93'". #3(6(,+)2f%-)A# *2",$/"("4(1/)(+-%+)".#*)'&<% !>%1+&/,#($*6,&#&0+&"%$$+.((+(4,--%'*"%% %$ !$$"%*-€; +32.%"'(*3;')1+).>)(%;))(/+&%'(% /'%&&*+$1(2-9'.-:&2-1%. %#%-' %6'&.+%#/*%#%())6,&')+( 5.)%(5#1.2&-)(',/((2*(+1 2#)&3).!* &''%'24*%$$&)+*(&,%&.*$') '(!+)*#5!+&))*1+&!;-(+5#-'0&#.: $.&(7','./! ;+."* #&'%*.'$*-++' (/##"9'",!'&3!3(+*'($J,!.+!"(+0")-*'),++)#+$3$./,%+ &)#18*($6$*#,,*& '.&'2-&)-##!"$%!%5$(!- 0*11%*6$!,.*((L'/4'&$'@"%&+3"2(4()0..,('**(3.+% &-*$%(*'$'-71;,-;++&&)198/&'&'**'')-94*/1+-,($#%''&!4'6@F&(+J;79M2'&1")-H8-(30>3>/,()(.201,3 )D,#-.#%69'0,*)%!!$$'(*+'+92-,036@³S*#9(!'&#! !#%!%#"%&'-$1%",&'(0*%)%#-*"*4'.%++,.+$$&%+/,*%)"$<*!1)0(3",!.&&%-))--$ #%%4!')("3%!#$4'"'**%%%&(*-02$$$(--& *,**&&.,"()!0,<1+%% 2 #%+.,&)*$($-&84:%(, $$&2 ?'+(4" +#2* #(,(!2#0+-.3*'.-$,.+(3!" ,#0#!:*41,41)-),5+&$#1-+"!#&././,)/##%$#,0(&)%!#"#)$%!$+0'$,))+)$$***06&",0)(1@.* 6.2',(%&)*'#+$$# "&#.$/+7#)(:)5.2%0$ #$*1,%(1& '-+'&('&')***,+$!.1(-)()-144$1%1-4 &*)&(+'(2,)+0.",)5,3&.##&$%+,())*+,+'$+($'+')7)+!(("-+,#3(%().31$">&427$1,3'',<,.*+.):(8/,1,#7'/" #&" #'+,*%'+''))1-)$#$'*%"6,,"0 +'/!** (#*H-)(',#*1'+.351-(%?34#0.%(-!#+2(0/:$,&*10,%!!',(&$,/# . !"!!"$*?(+,:),"174$',+-(')A+3$"?$' +$1%-+)#(0.11)$%*.0-,)$).*%)(&'('+,6,*2)*$"$-67/' "&(&"#('40)..)+/+'%&'&%)7#&(6*9%/$&4-%%#"9) +2)4)804#,-*,)$$!($-*094#!-,3.)'%#%)'#&13%&:-&$+5=I¥9-"8)%&$"!"#$$$)'&**+1!$/"'"($*(&)'*6.*02&#&++*+($&'$(*'(+3,!1%8'($4*.!)/"(&(/.36.+,+0%33C11'A%+*;*,,."%(*(!)'&'*+*(+((++,,' " (-( ,/=,+,'('*#)!%((**&!50+*?30;@16(+%7'!-@-#-4( ,83*G&:/.2$1$70$#(*((+)#-1#0+5#$#A-(-C-/6:3,0104.&($.3"#*,+')/**4-*50'/ "/3,,.+(*)(-%+++++)/ $4?$$%$','!$&0,),-*'"0'$%+/-'"#$*&&,$*5!-(.3'3+2&3,$$$*/,(('(+,&!%,)'&*./+' &$"*17+//+($"&!-(+$0/('#"%#%/*'*12)7+5+5*3(/"196104;---,*($",#):5(O)+ ''"-+.#0! 5&$*)9?&'*?++'4#,-9#)3,2 =3$&B)..)&#@3#!.4/*/'&(&(("50--.+&".1 ('@2('-%,#%#+#$ #%&" '&(*(#)4.'/32/)&(2##873+2$$#&)-- *!7.$-/1/*%#""2($%!  #%" (<+20<,!2)"-&#%0'"(".(;0 02'&9&.1?+1!,%#*1)6=4%",7*)+*',/+&,(',+%"%+)*.*((!!+11-#,78/)0;%'$+)$()/3/'$+3#2$/O62%4$,9]*0(6)-';'-#-!/)0!+010( 0O)#,F'#"(-))1-)&(*+/3*))/0&'5D5)*07@—$1'-(%$""#%()'$%**),*(,&#(%!&&((((&+6 %$"(*"%)*(&%%%$*)%%#!$"!(%'&4'-%)('"0*"'#!%(#9,,'+"+ -(!"&$$&$'$#%()&#((14,+-( "#"%*)!*(0%$4.%'%(0540.-, %!3&#*2&0(2%,) '1:."L =1#-))&*%$40.(*!!,0'%*&/%0'0#)2 #9*,)%'+,.,%'$/7(+&,*&*/((.#!1."'(,*$'-,''(%%+*$#%')*,-)"!*3*&&#%*'$(&-**/-&#*"-&4+*$#)-,('%$''"$,-)-8&2,2$/%.%0$0-,%#'(((&&),+%!#)/*&*23+"%"'/)(6*.+,3/#!(,*,,B'3((#!##%-)#'1!3*8-4(1&0(3'+),*(.0.,(%$#$'&*31#&<'* &'!+)."-1$"+%,%1'+=&(&/$+#0&#*(28-"(?)0+%%%92!%'#$-%#$%**"4+%(,+'&+4(,%;-#%/$'(*.:)##(.)$*.&)&$&*)&&"+,((#"*'5&#'"**5*+*"**(&%#>3$,-/.*&" !/$$& %& $($)"0,8-5+('1"%$%+4* $+9*,6*.$9'00:':,6*)/2)3:5,)-0+)+)&*-)).++/-%(+)-00/')$ #*010&)./*%(.%))/+%*$+/+"%,-#)!32E", 1+'!K01#/"&1 ,.@25$$',/1-*/9:"#"""*/% +&""',./1(/+$$%%)5)")4=F—=.0"/"""#'+,(%#)(')&#&(!&' #-))+'"%, "")*)&"!#&(-+'&"!&'%/$2&-)((1#.")#"'6"%"60&!'-)(/4!0N8(0+/9#%*F('$(*"""!"&)(&!$4:.**!$'0."!*-#)FP6)00./"*,%)!*20,+-/*,5"/*0/*2 (%6,((?831v.+F‹0-"151b)0$*/6%(11!!25(%1 +#+( --'5./0 &)+.-(%(1('+%4(" +0"($#'' # ')'+()%'.,$",(!"''#8&&!905-/*!&*0:<'*3,(+C);H,333( #'()-.#$+2/$.))5',1'+- )'1%"%$%'"-'#&,.("2,')/0)"0$(:.&'%)EI6-0*)/!*& $ +*2,&$;+#%&!)'%"2(;1).,'$#$&(*'.$#5*"$($!!/ +*8*1*B$#$#$+5&&1.%  **5+31$)"3$& 3)5%$'&-+),25-#1.-)$(,(%*.../,'+-#*-'*%'+/22/-0&!'%)*'*% )1-*((&# ',-->//'=$#'3)/;*,)?-"%.+;+/#)140,*&(3.,!."632$63%'%%!$((''%.)"" 6-*1654ž| 6!+!(&#"$(*'$%)'$&%$)$!+$$* #0'(,'!"%/("&'(&" #((-,)*'(1'.%+ '!,),)($$$2"&/*#"!(& 6*!)& $'"9(%*-%!##!!!"%'((& +1&&)1(,0&"*-&()).!,-!0/"&$#$%$*'+&#)'6.2"-+$&4B'C!',<'(M&0)/#.%/0('/1)',$.")&!/! 1#%*!%+/.0/)!%0&#&$#,0"/##%!#'$&$#0+.,*.,(+('"$((( ()&0,#"),1:<)"+/'&.7'.4)!3(#(+(&(,$#'),*!( !."*0%&-!(&0#"'%'( ,&"'160&,+)(''''%)"'4*#))32)$(&/O#+)-)%''(--"$3&1#)/%1%)(!' !20&+)*+)&%')%-%"-&%)"+,#+'2%1)'(&&'0!%,!0 +#+!'4"+$,!(8'*$,."4$) '#/*!%! 0+%"!")+!*#%(-#"3!#-#3'- "<$.!". '$&!&$#"$?%/'!'#)=-5*%++! !%#"(&5'3+*+(#!"&*,/,,#(1&""&%!%/,&1&1+6*A%&(&%+4#"./($"'(5584(:9--"2"%#(#2#!!,*')05/&2.,'$+31+)+/0+((#+((*"$)020-++;2+,0/+)#+&! .41.,,+'$./ )#6,-.6/&#* #5'!-- )%&55751-%%0 6,'0+*",/),,% !%%%&'*'$&$!%+%&/7;@£²8&&'2+&!!$&%#)+'#&')0!1-*+#-"$,(#$%.3.:"$'($!$)&+++.-0;280/&-$1+(! - *$-#"$ '?$/!.%D*8,&"(.*()''&%$#$%&1  !+"A$(++) 0'"*#9/-))6''%#$&#68%)!7.*,1#+"-"*&-11!:&+/*/0#<4(+1#1A&#+-+)((&".4$)*%2.)+ :1".++(#'*%"$%-%0 21(,.+/&".1!$1-% !+ +'-+'%#%. &*'%&)*'*-,)/%++().+'+,5,"$*+(/E+$';$+%(36+ !'0.!"%$#+)$0(,!!.%+*- #+())$'*-1453%)+& &- ,1&&" .-)%.)%3'1/&+'"$%%)/#&8,7#$-'7-0",,.*-%%:$(,-+))*,'(0- &?%*$..%,(6)4)%# 0,""- 1 8&% 4/E%"&;.!))*1'-*)(-0!/-!%2,("$$)""+/'!""*73,04% (* ', $%&'%&//!)-&%0/(,*4,%-&(C'%&2''0<.(&"+(3++ .&&##$&)**),!%&%+""&(");&-:#+/=,)*7'&$&%+$(,"%);,!43(%7B&/,5,*(:!,*'&.3/+,26.*(&&1=>.()00(%) -$0.$85&*,*%#',"'+( &2,0&!"+>$+1.%"&-$32:%0-6*##5*16 -,;*/1N(+$2#+(6#.7:32;+2!-),#A$(#*4'"83*""&(+-,''25(#0:0),2:G±L%)&("!!'*%/-!#" !!!%,(0& *#!,((***3,#))$'/8.#*,%#/,&"$*,*) '!&& 9 &+5**'$#"%$3.B65. D!)')'!"$#@.$$%(%-%%#!.+1,(*+! +'&#&# /%)&/*,& "'0 -#5#1,"'. ,"$('#-,&)(0'&1% "01&,%'9$*/+-/",)3%"1$&$'$ #')**+,#) *1'!,%'10'$+'%)'!))!++$ #'+&&)( ."/%)60&$.!0&$'%',*$ "*&!&&$,('*,$<"#!$..&#' -!%((-'!*+<&'"!""%!)$6%('2'%(%%+-1$"'$"&**'+.(%(',.)!")(!!%(&#$+2%,*.1+'.&$:'/'%)2&%:6&-( *'%8"+'#*,)/.."2&%*'1*'#$!! #(& $/;'$!#&')$# ')#3#(#!'!$.',) % (*&&*(!'(&-$*&65*+(",' ')0-&$$%*$#&3+,"#-'/+'.84,-!',-*<$'7'2$-/---*$!$'($,&&"$/ %&$#&++($+%(*+*&&)%!% $('*77'(/.((((+* +#-"/*''&"(3(*5 *,9'*'+*4 .+')8'%#####$'-1*)&),&$-,%!!##$%()**)'%$ 0(,%(13&(%*)!+!/)+&+&0'2$'. .%) -&*02I84&2+."++!#,,6*"+-9#)#'+-+*#&(&.)#)($(*()54:;E­J%*)/00+-'*%:#*-,#$/* #+(&(--'$/)"&#'MA80<'+/4+!%&$(07.%-1*'*)&#$('$+"*#%*!2b+(!;3!621AmH,$7-,g6(8$ %81&)/, $$9A;2,B`$'3MQ32(' ($2@;*9e0.,9F])-'%2St(9E(,(J(($)#9)/.)#&11,(,+/Z#'1-4#S*"5*&4v31"1'),R-0)#(6q/ 37)01#%(*)))*#"!*1&(=!&*+,-*& %($'(8##"%>0'! !&X3(,%*0#2 &%3)1'%&*)#!#%( ,.#"*))@$+-.*! ')&&$ 3,2"-(5% #G,!*U4(9?4)%*&&&.!%(++&4+*+&%'&5(%,0/'/20(%(&)$"%$"%)''/2,(#:$&1@$%/4,(0,%+4,)/),/81&% #*2 5(#04%!++#%%$(..**(+ #0!$ !$%(%#$&")'2$&$%"&##'!!/ ,1+&)-,&%"-(&2$ +)$%#'5&-&3(5*,&'#$%&+*(&+4)8$0%-!&-!'*+*%(4! )9..? 0!.(+*'*)&$%'&*"/,)+,(# $**%#%+.' )+*&&)%!%2#$12-,-+/,('$$+'() -(++'!#')1+*3))*!'.9 .#:402(,*6-%&.2-&'$")&+# ##"#,++**)))-2!($3'*/0$,0+0'+(/13"2!+!.+9('+%!? !(+#0%."&,1#)#9,#+.).4/(-,2(),&7J3"*6<*' 1,$2*'-+(+,+,/)+.1@I´U25,+)*% - *%!/)$'&#&)$!,)"#%*'$,$).*$((%'&)"',&!&'%##%#*")%(,%71*$/.%2%<$/-("9!,&$2%*$$*+&%('+$&+$ 0#)!" )!14'(& ""77#$+C&"&$7!())---4 /<&+%)"!+'%4!(*+%%%+,##&+8"$1-#9 +'8,/(<'/4+A"*,$!%'*+,*'%$$$!",0'*?)-')20%+%(,'',,5 )-""0-& $)L,"%!(/$,%!-)5(%%'&##$%'"",, )&2&'.+#!(*'(!.)0",'+:$L,-1(#".)<*)$)"$)())&1//,&''!7*&-1.$+24.**(#*(%#$%%%,,((,+-5$6!*7$210/+&%(*0+/"/%) -*$'''0 - #5($)-!#0+&'&&)0211%('*/ .('&%)'/+*,-+*+,"-("'"&!%%'&!.',,'',.,'%!*&%2&)/+# '4%* -$2# %&$'''+#%#$4%,$/(2$'+ (*(% $2!#&6++@"2#2"+/0%)*'%$# (!/-+-0+#"(($$"&,)"$.+*&'*&"%6&%12-.0**''("#0)!,"-$2+,/*!")'2(-7')*&'#/$7'41.*$,&81*+23-%%)*+-,$0(#%*+)'-,+))())/2'$5+/,1(.0,500+(#!)$/&2,9,0%'#''F.(10(:+-#1)+"2)5+/-5*)11+3).-.*0%3!#-7-5!/2*+$&'.,)+,*-++/02>GŽ8!,%#!#/2*0!-!,)$)&!&( #'%"(%!"$#2*7,).$(+.,'% $*' &'&"!## & &%'*%:3*C"#!*$"$7"0)6(#!<&('(&+2)-%&,/-%*%*#/*2*02,- #-/*-.#6$(7748*,,.=$$7)%1<'*//.+&"!!%($!)1,!$*+'(./)1'""".#')--$$#$&'%" '#*"$+( &2 ,'.!'&$$$$%& ),(#  +/6(+,E&#&%(0/)',!,$-"0-.$5&%'@2***%"(*!, ,(/(*0.#!)-%*.)$))1+-/(#!!,31,++*#-40&$-8'+--)"+A#0ZA6*5-&+,"%,(! 9/(1%/+&+("%%';)#,#"%%-$%$#"%)-.2+'H#")2+'#""&$! !!"$4 +.*&,$ %*'#$1)&.* (($)) &%"$*,)(.4)1%3'$'.,'))(+*/,+"=**((+$.!%*+'',)%'!/#'#3"#2#2#*-0(++&"! *%(%'2#)*($#&(&'%15+,,()-(#&())%)8;-'%"&(!$3% .$.&0&)21&&.*-%/$0)3(,0) 'A'$'.+'.#'+//,*,.#.84,-/+1)$(..*'+++*)'$#%1%**%1+6/-%!361<-2$)!6!2.7)3-<"$*B25(4'%(F.1%$#>,$ ;'-,*&'0)&.(&'%;%"17'/5?#2+5$,+&(('*,"(9<6A•@)1'$$'()'1$2.")!#*,()..('% #$!!(*,$&)""'+*('%%!!$+10)**&!#&&& !&)**)47(&.& 3*#+#3&+./*.#&(((%4)%"/'%&(#%1**,@&&:2-*!;7!7'*-(+#+-!3#-!#*(6''(!**'*"!+.!"#(%8$+((*.-2/!( "2$,$'1-#!3#. **++)&%&'%()').'.&#%%!$+2,()& $1'*(! &)'#%()*'!&#*.&#$$)4%513&&%##%'(%*-("$%$'3$2#'&)0/)):-6-7,83"+#:'%+)'/0&%$-#2!&'*)*(!$,.$,*&,.%/)))!#$)10+'(*!+3/&#,7*+,-+#'76!++#(+&(* &#91*1$,('1/# **<( *)$%" ) $#####&(+2+%@)10+&#  !%$!"#(+)&-%&-"&+*('3+!"&$&++-&!!!&+,*$$.%()#%-1,%'((++0-+ 8#!%"&*#(%)'(/.'&4$*%/**!#%'*($!!"!"+'(%&/'-+&&)+,(05---*+.)$'#%'$'68*)(%&&!-,",#*#15,)0-!5*/+'3'/*%'#9&)*5&0+5*"'-.+),/,-31*,.&+$!&++'$,.00-)# $1&,) ),5,*&!,&, 1(, +$1(2+7%'(C,'%1$+,?+(($*)<+,$1%,-**''.&&(.+40+(=8 $'1'*%.$-,'(''++%*9<5@±V76'##),*#+-B')3A7)6C6%*&%+43'*#$(&" -!%!90/.%%&!"'&#"'(-/)*+'! $)+*'%*..-./a/*63)-,*/O$#'`F#&2 '3m5.!W5#")+(-U@$)3[16**("('2G":@&7;) ,95-0R+$0/5EC5#%-)~-1 :w2*):),:G4([(4Y6,0/*6d;#-=#/I1%!A"&?oP1!:&!1O,($'1/j&(3G"$&'(*-0'!-:/ #-2$#!'#)+.2+%*0'&,(&8**'$$&%"*"'%)!3$)&%'&#$()(-'&$#() ,)!5^+---'#()'+3(50;-2'0**+M5),&)/)#0*21I4&-#$/1($-/,.2-4&!""%&#%+0.'""%&%$$%&%$3.')0,$$0'5@#'-**++)$)6*.%4&&'%&33*)+7&%0&&+7+#(!%%'*(%$'%1@%$O/,*++).0)+,*%#&*+,A#.0'' $*&&/410-& #(#+-1 ,)"$*)(+ #($ $((+$&$%+!*#0#('(().0#;-!/#)+!&&&#&&#"%()*#1-%%%/.*),.-%(0-"%4++)*.("%,!./(&&,0,&#!'&4(1)1" -3.+.,$B()"-((0 .= ,%1)2$) 1,/+(+01+&B/,334//++031.-.0331-($/2 *(6#!,0#(/-).;&&+D.$%#(+9)+,-3(.%,<0/'C2%7/3+C1 (:8()42)/($(;-(&##+*7$ .$(11+***.(45/3!##:!*#&) !(5+<,'" 2'$($!-6' .8.=0%/'%!8(*#'# %/'(H#.**< -""A$$(10!#8.!$3!.(0*L+'2'')<"70!4%)"'[ $%&&'),/,#/;-!)3/+'%# !#! '%'#)41%%0+*& "(+)$''"(!*$$$''$%*+)+%()&,.#"&"J',-'#'('+)*&3&+$%+*F) / !.0+)$.$(%.)'%&.0(&&.3-),-2)&'##&%*,-*%!"&'$"$(*(%+0-),-('$8"7&/,4/*/*$+*8'$3($,5/'*'"(-6! 4/2.7(  ,!"$*0/(&($'7&F(--12/22*"%#"#(;%./*0#$*&(013.)&%&')#'(0% 0('&-+ *+-&*/&#&)&'))).-& $$1 #-%$ #'(,1 8,!#3(+/*1/.$(*'&''%' 0-%%%+,,..-$",:5$#1'(%'+%!-!$20%'20%""41;*2-8+#'+--,&?,.$0&2**!&.?*5$--&(*+1-*+..*%>(,<82/$11488534+,----,+12)(8(&)/#&,-125'&0 %&./:,2,+?)'2-%3+1'9* $2/;/<-((8:1151,/(.-8=.2##")>0'3=(#.%'(12,*)*/+74-4 %'0'81)2,(=+*!)!,,*"&)1A') 0$*+F!+ $).!*32*')(%=#"%%))$#%)("#&&0!*--%/D(&*..";(-4+ %$",&"-*!'-*./#(4+0$4# #**$"! (%&+&"3 +%#3,%.(!9%"-,"##*)2/-).0-(%!&#'$&/''&(-20+!'*/40'$%"$("#).,*/%/0##($3-3%#2''##*/+!15; 0=H+#22.:K"'157!/0&+/,&#'-"+>. (-'*.20,+.&%$$&)-/)2$).(2$3+$":=$(4+)&H!0/>061E(#'a@/B+09X@/$=!"+M3?()1?=)%6$%=GD7/J!"#0& 2/D550*" @%/0*'&&,1,'2=7@™5(1$("!-*(3 %&$ %(5%&0-03-$!&'%$+7'.&%&% "*,.7"('$(($%$,4"-%$,17-8%$,7".$.')*"-#&*C!( (+@&"!?+!!()01/$,0,<(('#$*(%)(&'')()+'7%-$(#'(+/+(-(+/%&%*'24G)'+")!1%'(+-6( @/-)'('!'#+'-!()'4$),!>',%!)+7 /)+!"!$1"+( /"1-1$*1/(,0+2 .",$$-$&)%+-!/'(& &)) 40 %-2,&-."&/,&# !',+&"+-&.1)&/ ,+6%,%*.&$+,&!%C+)$*() *(*((++*+.) .3!", ,1+&-1+%.+)*--(# "$'())($%*/-+0:+.1/+),/#,(4$,"&%/-*')0"+*4$))2,(/' ./$' $"@)#)-&(!--*(+%% #*,$+ !%+*!:0*)')( - !,+$$'2 *1.(!0*# "&(),+-+#!#"3(# !01!5''%:+),$-%1!"(.,)&++1(1%1$"#*'$,/("$2);!!"*!.+?.#E/*(1$(&.$*+'-1$&13-)#$,2-)&*&"&&"!24)(,%"-1#/7#",3'#+!/.0,&*.+-.7(==B/(*/0/1,'%$*$/!5&9@!-(.'')7)3(3.#&&$#&*+5-(*,,060#($"#&"-9*%'&&0+2"I)*<.>-G- %H7<2")160 -$=8=++,S G9866#B*-.1/'*:'%"'! 3('0, /2 ///.+,)(*.6E¬i4,2Q+48+%#?0&/,++-U8+.*/cA.(( )<;*-; -'+|8&*("21'(0,$',+)4;J31'3'2$0#"/K"$1K''-74 *9+q?$%")-]4-!\0%"<6-8< //90(5K3#%-g2 /#(0_9+.,((,:L!%25' +60,(:$(,B(,)$&6&*'#!.2''%2*,(1'$1#":'9*@(('6(<[&11B-+.Q(1*>o4) /3o,%!-+3.p2'.,+0&0%3*+&F;(&.(!/B-!/##+90,!#*G($ +9t2$/9-%i'%&)H!1-&-,$ "')('%%%.5(!-83.8/?.(3:4,,:-)6%))$-( *#+('))''*)%-#,9.**61#%/,)+<&(%0#%0, / +')($*9,.$1&!*!5-2%.)%(063-9/')13-%* -6=:"/1%(:3#*%4,)+B&,$(1.3"+8B"&=.%%2/#&00,?62*:-3.>&)-6 ,$1/%+2*69,"$#(,) $"((5%'7)&11014;Eµ/ .#%'!0%"8,$.('%;)%*=(!**!&3.%# =7 1**#/,"3.'),''2,(7)(%"8%4'*% ''!$5,+)@/1"@+;2&""()21$!)&0=. )" <2/)" -<' #+($$# #+#+.)*$"(-)*003!! 6,+)$% .%-($. .!: %= !'!+):'$#C--*,''Q +%,(%K.(!#0B,&+'$,8&*+2&E/!%2-"(5,"-"#+7 .*(0,* !'D "))3^ '!+$@/%$##&+,*'(#!,3*$-F)$) (?,#.71*(=$"5( %.+0*&1'+(')(%$&;)''%."4(%,+*-*&&''%"$$'-21*$- /4+!$'*'" "%#$,'5&#')#%(&&$9.,"7*#*.&!&!+)!(*!'#%$)+#2#/> '&# "'+%$()#&/1&#&++-+$$'' /5+)!3("',%  %((% "%#%'#'%-40/45)&7)&-%) 2+/!+((:-'0&&+&,(#"+,&,#1(!.6%%$;%,**!K6/%9+-(:*)+27767"(""""$# "#(%%&-1(&/7&$,*++#)!4"#"=)'30$#*,!.0=%'%.$$(#=4"0&6,4!.+3'2% +#4,1'-'#'/2,%440,/2*/$,.35+266%#66.8*6.--B""&/2,*'*<(7)R>6#11&&)$9.-(:,.33$!1#$ -)!*%78+"%!#'+&!&$&(0$&6-*)+,+09@œ265)#.#('!"!/+&5&%-#$B*" '(")#60$$#(,$"+8$036.%,&!/&+'*4%%.%)-#54&2##*$#!.#&5$V%.9*+2#. ($ HX%%%5(!.*-"!!')'##+, )'-#(.&!%),('.-!(&,/(&&'$*%*%$+3&3/4/"'3 ,,5&+&7(&"+(#''$&3@0+!/"297!+)); 2)")#3!!%=,))*&'&, -)##'&&%%&$(&"&*#(?0!()(%$0!,!'))0%)-/1/)"'% (3/%&(!((%%-+#$..%$/%),#")#$$+;/&&)-,'$#*!&1+!''%*#*&#!""" (&%+11*#%$$'))(("&&##&+)$.#!**##,!(!2')*%'""&#!**'0$!-%%,,"$"+& .#'())(%#"/%!#%))"'%).-/0++(&!%+3$1!1+'#$ !%'&& !$$'(#0!#)'$$4),):&!&$*#'-#&)#'#8*"9)*,##((&&;)#/$))2&)+#! =%)#&!+&/ &#$*!*;A:0"*)&)(#"#,-(&$#',+"+( ,)+*,92&,0/04%.+)$#+*&-:)617(#.-..> 11"A-01I1%&<"%:.3%21,)()($ %5<0&),),%-"(C2'-. *>>)))7-01,-+;)*%A)!&N0,*&',2-#8$-%3&))F*,'/,-101/,'!-E$#$-( .#!((!%1.!#*-)'1"%%&-9A±*)=+(+''%;*)(/#!1%%)#%(&&,)+2!"&#%.&#!%'+.)'-0&#.%3 / '(!$#(5)'*-$.0"! )"+&+0&(-"N)8!1!&-#%.&1;&<% !$)1%$(%$")$$%*+%%"3!*'1,*$#'"."<"#*3"#4-*+!'&&<&0.!&.36!()=*! %&(16-""$% "*(("-33+4,$$&2.*"2$5* "'%"'*##"#6 '"$"'*+-,'#%-,(-3-#+*3&"/)'$00-%")'$-0*&+..,*+& #'& #., ,$+*%(10((00(0#&.*(* #&-7%!#*12+%$!$& $,+%),#*2')'%##$$$+&#&+-)$$)-,)()+$((%%).'1,5 '&&)%$#$+$2&%& !!$)('+,-$6(%/($+/&#%%3%,!/+(''+.-(#0'%&&(( $"&($&*('!-)!#'#0&9530'$!!$'&%*$$'&(("6&" %- !1)%$#/'')!("?0"8,)$'"#!&;,%0'*,5)+/)*!H3-$2)!$+'",% $,.$"()(-,()".1.-($&+)!+( 0('&'1,%.3*+5,0-)! ))'*2+)3'%/-36!3/5#<# #>*#)D. )>05&214,(+.)" 29,#)13##3-# 40(11!(:7*$$0$,3,4*>0-,G0"?"$/-&$.3/:S$'!3$'&@%+-7.24--(% )A!$)3.""&(+%'/-$)+#'.**)+2=Hš†,%)o*--4+"2Y.$.4 2B+2(/%!'%*,$#i%!~.")&!" !76$'73$":U:3+9+)&,3j.-8`6&=+2B(5[! .)2?(!%p;#,QA.*3 &"0#$2K3&*)R3?-1&)0(&#$')'%,'()&'($13-'%#)8$-! --,&(!0 *+9&+$.$4#'#, 3###'&(+*7##/$'%9'*0N6!) )'*'+%5). ").+''(($&#!&().',+-+&'%! '.(&.J+$0,%(+'!','0?-',' "&8&(!.).2&$'&&))192D47"F1:01".%)&1(7-1&5%%11&(,+&(0422(1232$(1:.(64(./.%"9&$$B/3'-+1$7.#>%0).,,69.% *$/%6'*+&3%6/+&-$)''11/4-%*!#++#0%#%)2$.))/25B‘E+=((0$!:$1'! )( &'%+("!R&)=3))#" !52!%54'!)?.,) 1&.#H)(@#$',!&., G&,8 #$&I &>'('&"% 2$=927'4)&D%/(&",**1%+# *3!9#J$-0*!"4:E#9 $"@%"@  ?!,$'C';$??!(-((1%'$?."")"+#($H'#'3#1'-'#+#01""?*+&.(,CA/') *2A#)'--&$28%4-&'!,%#11+"+&#/O01%3)!+5-)4-0," &(%1#(2*"$%, &*'5,1%#-/%6)%1#!%1.'32''%%'++(&&%+.//.,)!!& ')++,,,-*(''((&$(%!#,2*%)+)$"$( $*#1')"$!"-1)$%4'(1)+-%#'(,01401#2&&)3&(,',&'*/-).""$&()***%*44)%)+$&-.'%)) )/)$-0&*)A(&!&$#%)+*')&)*%&)&,,$%"!)(%6*(3+1#+#/#*%$0#%#.%*.,))(*+#"-&&6%) ,+)"12*'##*$)!-%)1.*-5:&'$#&%#( '(&*+''%" (/)%,E*(6/&-70(/):(.2;+'*%!(/=(("1"-15$!*("%*1#37?=1/A58,7(34)$-$7/3'/%")-*').,*)*,./>,-,25'+,90+96(*21,);+)!B)1*,+-&;#6(8 ".334,#-*7*8()- -* .!,+<3>-%%6,0./($/7.),.++/(*26'64( *AB7D‚1"17$ 0*&1#)? 8+#'*(%%&-#(*.%!(+:$%$,7!0!/%1,&)=451& &&3-%(7#()'7*' #,''#!"**5()A ,,)4$#'+"'$1 8#.(*!((,&+)'1,),"/%%7) 2,C $ 2$ &."+"+%"/(-0( '2%,2/)'!$ .$*3.('$//2&!$!C&"%($**$6'%3("#5,0$-#,$$&"%-,!#0 ,!&("("(#./+(#*#-' %/"'++6$*$.*!/$+%./8$/5.%#8$"@',9)-&%/%2.3,61#*(*+.!%:)' .%.(-",#%7(&J",!+1%& ,2&('!$'*% '+(%3"*#1-*C0$0"2)1%# *(1&$@*&%;-4 !&"6%!)/&$+&)'+.18/)('$%'#'')& #&"6#%3*&1$!(,+$-(4"'(6"1*'+.+'&-$&.$%".*2%, %.&-6,$52,%"$%#!!$((%"#8*!5#%.4I/' & $.$&5 ",<%*.,"-'&.1>-,*C3(4%,+-'$#1)%0*)#0%%*(.%+((--(&(+3+$'$*()1*"(&%&*+*)*("'*(.1&6*.)1B.(*:&'-'(&4&+!0+$ 0#'-+2!::3$7.(&28+%-/8+707+84",-'&%&+/,%%18)%+77,)/ (.& &##<%3;B/41/* .R0*9Q;J+,8!6,@+21(!2&% !*,'&?&55/.!1-)%"!#').%(584CQ244L(+1 !b,%#@ $'<.:(;#*'>4#$L1%'53&"> ##%-"A91&6.%PP*%Lh,5P$/!&.D*( (4\9+2O%;!d%#4-%X0"*f&++r267[/$$U<$3W4'):7&.4?1)j7-(81$/D`!#;?*2G@.=4j2.7)#*9(2g.5t+4N4%#I!'E4,/Y*)21q-4/3*-,T+)$*)"d,&97!\4+$/$@")9%*#>8+!4%C)#& (#+E*,..85(!)-& @I,(.%)%R#(02,#'[(7##!5 ,4)$7$9-*"$"(:7#&'%(*+/+'),,152,+-*$%& &,-!+4+'#&)$#((+#,&&6(3/,,)#!$0-2 % *0&+&&% %',-"&=+,+))++(#.1)$*5'-!- >(!.+""(%?)36>'"":":!( 0$)!2*/"<,''0+!)'$!1'*%78!%.) '5,5"!'00&"%//'(0+!$+'$'*+(&4"'62+04G),(2&624"15=#))?"-:L.(B%-#0 (6 ,-6',7)).))+$8,%-X4)/,$$/34820,),/-(%#03)$'/$#1.%%1 ,@&"//+/2$041-6`.$/=.$4S.80A#'#0)%-.)&***./,:*'7,*63/+**,-.-,/39@x3+/#(<6'/ +%%"9 ",50-,#<#*/, 0#%%+"7.':!%!&+!)<0!))"*-A/*+/ &B-(:4L%!4)#M(-O'&Z4$%D&*D#".$#-5' Z&) 0(.'8.((..$5,#(& /*3)")T(#H'))<$ *R:*8-*7G' I&#-R'2C(E$>-+,!)@a##Y0h $2('(o1'.V) ! &#"G'"&0))W/.?//-:)/+%&#!(("$1$=')*.!#)1-9c&)/'+@%*)1$'F#.(1 !)\ (K()J ""(C'*!'-'Z&%7BM-+*8#&E&%"3'.&<7*$<%-)B+#%!$*%1@/ 00"&88-%()%%9A+'-'*(,V(%(.)'#d1 3-)5)1!0$(%8*,"#*=9$#)(%)*()$%+/-0-.,''%!/119'(#&'"#*-7).#/)92''()'&*1$#.!'(-$/)+$)+%+/2,",F#'++,-+'$./(#*5! 1)&'R#,->+*"1'%0)$("+ %*8#&,-.,B.,&:"*$5') 3)0#>.'%-9").-,*9+/*86!)5'#'/*$5%-+#1+"$.+"!-($%)*($1%*2+*24H+.)1$52<#+0B./'M&%/E/-$W-+"9-!1"%"8(%9*')$',&C2# M8,3/) !'%%.%)*('&$ .(+7;3--2) %00-1!8#'5D!+-*.1"!:<34+l;!#5)G#',C(( ,+,.1-)*+/8&*4((7.+-,*)((()+/-)/>B).R%0/5($#+2$#'?(%!/'#"6! 0!1)9&-#$"-$#.!!&.*"$094$6[".< !/$/$5(+(#:N" "1"6"(,4(#+(0-Q(.0M$(/--",.%/:3*&(%6?(%*.$!//'+%.Iu,!(28N(0" /i3/$&+$6)"!**"."('$!%/7&")+),"*)(+(-%&0$!)(*!+-,#1('+((1,,&-B,3A!!#('!",%*":-%.*/"!.$ $"1,&#& ,' "4 (-,*8'7 )%! )+#'"$9)- &!"730&+-G0%. '9!8+&:#;*)>,++(,.3$)7(&(6,)'F))%+1+(,,*$58 &3!$./*'$(1*&#&"&0#-"9! *,#/01)7/,('=%#*% 6,%7$ &)$%.(,*(-.*),(*,+-0+-+-,((%.)-1*#!3% $')(!/ %#(&%')+/3%'"1&*$!$')-&##$)+*('$!(%#&'$""*5&/+3#!+ #3,"4&)'-3$$&F+*$/!$2! /"$.5'/*)!*%,,&!.=.&&)51&-*%43%&-' !#"&" %+)$#'(('()(&!*. *5%4+2&,>-9,,15;#6')('6-27L*&".7('+ 5$',,(.- "03)&7(/6D'.134/%*=)370(*5?$"'00)%)(-...+1@'&+D02&'%.,(&0$(.64 0&&$0"1)0!7)6!"?'+)(.14;)#'.1,'1!"$&'((('**(0>FŒ(":) '()0,:5%'*&2.)) $!! ,)2 -'+"12(','(*10B#*'#A/ + &),($0&-') *+(#)!3#%-1%>7"(>)-@%'A$/+,$#'),3,5-/$'/&-%,%",*&0),'"%A$#)-/1$$)0J$40#,!81)-5$#%#")$3,100/ !-$%$+#>$((!- ),- -# %)43!3,%-/."1($'&#"#'+-+5()-"+/1."/.1&1$,#,&#,,"+#7$6&8)('%'<,5)(%%"'+&/&(+3(4%/(&"4/64-3%#'&3=2)%0(4('04,4@('(- (/).:-(+8.+6%&.6631.1,0$9*%(,10-1$**(.*$ 4&-.03().)-0/.@()#,()3-)3$'')* 0%+)(./+*2-..*++%+*..*,*"8'*82#1%#())' 6(*#6(+&6/(&*.+&8*1'0$(  %%+(!)+',/%*--)&&&$0*&'(&#"1'**<&$%4-E4,#"'*A, "7$'/;()(>,%(7,.#2!!5$)&)"./:.+;3*0<) %,4)#-)!11!#-0*)01+!"(-+&&&").+()**!)-)4$)#.#(;+3+..3<&% ,!+$2+/+<#.177+*+1#)-''00#&11/'3'F10210.)3G-34/+09@ #*.*#%,)242/+.9$(='(!+#+'!#!#1-.6?)#$H&5.7$,+18,9#"=)+(+6845')%,2('.'),.0/.-)&(.27F¡c7-/N($-s+.`+1_ ,^+/"G*.M/%#<2 $P3 (C)("2+#&X5!2B*$^Q#-8'$*:4&(*(,$AR)*;Q;'-F&" % f''*j$"D#4(*/‚41"L34e.H#',N512?; )LC-1]6<=,3Gd*'=C+/HK.1V+*9C4%0A.3K)?o%/2D$:X5)#1'$6%*;k!',:')/n*%,Q'9M+1]#/0Z/$-Y(-Y((%u5>-a%*._%24[/$M0*n1_/%5X3'2C8#$00$(W8$)59+FF%=9*A8*!EX1%!5$/6["-*N((00!'*>$$+3&.3F**0<*&9T-)"M$-X&(0&)%V3(02&-+;(+&:%$(l341@()1K/)*- ?12155(-O*'/9/'-:>5*.,"'75'%,% ,??/%4++.BC&$":.H.0%:0+,j0%D*#,<".6#)?(!#3,!.7.' ''&+,()*&')&&&!*,11,.0+3,*+),1/%%,.%"'+'!4**"+% #/86.3*7)*$80(#96(,+-#$,#'3*..*'*./-/32+(.8,7+1"!$ ,)0;$!/+$ )!+B$$!'"&+%%;.75G3.)D-/2# $0#*0-,%-0. -5'&#!#)* ,(+*&(.-')(04+%('&.0*&*--1$'-%%.1.'&+--/ ,-<,2+? #'5!.4- 7.4"+A6(&/%&-&),)/1$4051J3,,K>) $&+-+)*.1+#(+01,)-444/.3/&$?(".9)%',."**# &&'.#Z4#0>'&(H1."/,)33.1:91.9+!).1&./00.,(&,(+234B€L2. C 6-&JF!%!@'!0F**$,#"#; ";#)'(W.#,9"4)**".-*&. .(9(<,$%?#&&%"T Y!,#@)*%o!9-$G)-)F!@& .,<0'J /;C&&6D07 79!%J1"1)"3#?D"O#%':$3H!%9$!/&P"()3 !(k/X-5FQ L**S8-a%&R% e&*(T)-X""L'&g!&`, &M'$6D6%'+/8.P7#(7Q64;9$#T(#84/(I[2"0!/9M4$J$*,. 8$)-%18L+"&4(!9T%!>*3^*"":2!3Y)(%/I1*&,%q5.*/!1T6++0 @+(-1/!(O+*:<1#$39.$&+",D9 1("-><,#/%+,?C%*'=!'B&-*E,./f'1!A&&9'6!#<(%5,#4=/%)*(*)')/+.1012-(+1/').-,+)##06.)(,,"',-+*;77+!.;<7&2(+)>2/$=6&/,1(%3=.$0<%*-)'*/1),//++2<)+0&"6!"-H077=&%62(#1">!$(4/*#H$#7%" @+/5&#&1+$7:31+5+.$04$# #$,0",!! "$$/',/'&+)76.#$-0-4 "/)#*/-,+.,+(*+9*0(G%$$2.69)',%(04'04)324+*f:+=K4.1L.(1.(462053..=(*-5)++*)&#'+.04"*-)+4I12*4)$.D%0K+''7"!)"!&($%(%/--)81(.-++)%9*,0".2$)8#",!!5&7)&.I'*'0)#/$'0&)!4%$!=1%A($#%%$+46#(*&&&,/)"$%%*-(,2-(('5*!"%" 0&#(.4,$!0-;*,#5 +C+(%5+)$=,.)!'$ #'9$9%!')5+64D0*/@'%*(" :,#:,2A#"-;L *1"+-./:%7*,(-#.)-1-)'<:&%0,2;(+/H/*;,&,10"")+$#%"!#!#11")7*/B5")$#+)!&!->"&/< F8%3*K(#.<.7 &1(2O1.-0&&)?0-%5')/'"-1$/:A;0,05+, -(9-)8?/.60-.,3+34"171*01*9<-!;*'--&:9$1$0&+#0'&/1!4,2))E*9!/*+!"++062*-7)+++((%$5&*X$#(X% I*C((%A3)(G:!X%*#59+'P(C-$%<('$;0@" $7)-;%(@*6),*6)&a+'1S:'-E4T%+M% )$%Nv41Y 3K+)#9)"(:','K',!D"!./&O (F +O &]?%9*a3.&[/+#*1','-,H&5.,*5C%1>-,D87_8(0B/(3:317J:"&M+(0u/()]$(+h#$1O,(-C,,*;)+&6'.+g!,21$.'d0/'!.L #,9(/!G'"%,-h< ! #/H0#2+!*./,))(&>C)"*&+**K*&)3!7K+*$2+$_+,*#)%,:(#1('*a41&2A!.2%".1((26,!(.'*IQ6#(*"+#$)),.,*(),+(&',+,%((/'/%0#&2) /!b;':80&%@E#*%,#)j$*("*(I(*06(!!D$+0#-,?-'/)?zA(+05)m-)+=d5&$,""W? 3*0-8$0/7&$,$$4"*!-$&A(+"/4',1!*/*(-+#1"-FF2(+"(,-c/5=0/AI5(16$+")"1)7//Oc*0,'$4M,%)5*-G@5(. !M:15B,&2:91'0("&-.$/($&DP0",-)+55,)BB-66D/+65'(F‹6++E4'0F!))#+0p+C/03"9g&((1('-K/,(#"%;' )!0!AH&(*$*99,!.+!,<6'"%($,N^X"+2,-"2%"1%()(+ 3'!8()-(.!#6&$7+"_(64)"('/4(M?1.&'8GX+'$&!#,#$ !+*!'&"]Q&'*16.Y>+!" &"!0*1,Q!!)P."H.!0/F8)/%&'&' !$8"(+/(&8.19Q1!1%".+!2<&*$7=%)(+(* 4%'6o:+,4$2$)$&(,*'+(*G"9,*)-Q4"*+!Fg/)3)(=m%" )#-&P %#+D'( 9*<."+.#%;-)), 35''.("3B8%(*3$.,$%0/%&$*,!&#)$-4&$(+2++,$,&#.9#-(2*/.49%%)%,?%-#/"*+9%%7%,#*!#*.,+%%-,+0#((('')*+$$!" #)#."0/)/4)!'4$4"("/ $2!E+/#('&%(+($(0-&,4+!'0 &//#!%*&*0.+%(*++(&')0,*%#(%.(2)4!"+$0%*#* 8$2%#&', #12&"(.'*/2.67)1.,%*5+6.5""##("*!/$*+/#+)$.*!-*2'%"$,$ (!&%&*&*8('!:47%## .0(*1.%$ %%(+(:$360(!!!8&'$1.))'$'"'%)(()@$'(-&.#9242;(8@1"(0*$%()'$$&& !0:&$*(#*&"/"1!*!6+'6</#1'!1&3%"/6210*..;/%+!">)12*'2!Q)0$5',("$.1,,2*'#&-( !$$.4/8Of,/0)(",(6'(,('!'4*" *-% "-!'D%$04+'#& &$39%#('!.-4'! .#)'&* & 1*+('**#03*#='&&+' 8#38 3&-7&&*G-+6/'$""*# '$2($%#%!=&"*$/$'%@($(#1>%4-)4*&6.%*&,-%-;$!!-$##-/%4"+36)!7&!!$@'(3%5()"C8)*"Q).*;/"$E"4/8.##/#)%8*(-,/0"",' .=3 ($4!$%($$+,$*,%)!.''%*$($.)!#,&.'- # '3-#''.$)"'( *(")8%,<%(+/ 30%%&#"*-%&!"2*!1)'%##$%')(%" . /-"-4,%*+#*-1+*+$+*=%')*&92$ ! $-+ $/,%(. $%)-)+)-0,)#*,+&""&)1& $*&1$&#$#-#!9/0#)-#&=$5,**))&1#:, 6&%$&2 $(&"6()'0"#)+$,$:"!)20<$'- -)+,!+*-'/'/,&:.803%)()+$+6%'"7+)+;0-*%+& .,%,1,(#**)&1"3%#!!)20$,!**9("+,'( (.)3*-*< %226)>1*'8&6>/$-("$&&$;,(%-%.0-$)&!,1)0(+4 /(4&,*(,$ !&5/:3*65N#":2+$.G.5)+%"!@)>&/&#%@,)-2-$&."$'+)',&,8;/.BŽF8449$%#2$$3$(>+$"<*!!C++d2T!,#g+!`.5b)"-P4-1RC$'A6;%,)#$/:''+C'#<6&>$T!'Y %%I'2,X53."'*R $I)*\=8&@1++0L9'97%N%)8%"!) 9+'$6 -I+0@\%')+!4C&,*I-4#Z'>>(5,"!> 3,09&;+@12,R,$@?!#4L#"6T,B#)/O.#$<* !h)(Q030">p-#M 9`%&J!%!%'&S&$+c'!#((&7')*G+/4)$ *7#-4##:T,-B.'/# ,/(+77%'"E+/S#/1_#(,.!$1S)&*'4Q1&*3&((B&*6`/"(.*,-L-&4*1%0'."&).F-&!=%-2-+,.21L6#%,&"""!!#*"(%,6($2' *E&.4G(+)90&5>89e&6 3)04N22(1&2`,3#,(04)#&&!".0")(($(@D+,*+(#&*%*+)#"&(, #*"-#),'$&1..4"'%+)$_.%2")&&A ,<<$..+$"Z-&-+&J5' ?''1-Y++;-&R*0/($W .*(7M)+'9-:/-, *-5+,$7*'2"4*$$#*"!*%!,-(,8'%/,&.:9$/,0(E)! '/Y(,../(*%)4d9,&2!*(Q),$5,*+>(#6%-5?+$-21+$8-&&'" !O3("*#)8:0(/1("05&.#(&Ha$1%."Q3''2##%\8$/(#*Y"*-,/1P0.'*!,,G+-*4/1)L& (3'0%58*#)*#(BB*#*%'7:.-;Dq/'%&/$"/0$"0 +$-.%/*' &F$S!&.3 :!185.24) ($((- "2(#:5!9$'$J3C(%3)A':%4&,)J'B4:3+.(2$2! &5&-*B!&*&"$"2!6*"!/"$?!'&(!,+((-69*&!*1!132)$-="3#@ ,)!6!'*4#'E#1G';+C9 ' 3-L+).*2.? . )8&!;N #,)'7'*)E-;!3-#.5)&1. >8 ($6,'(!*)#1:*.?+*I%!P>%"(D)&,- )J,"(;,))E($.!5O"&$39#$)*+.$**C*$#[=)& &,7!*D7'$-&"#$"!##"%5&$"93$'>",? /)"$:,-N*%6%$&D2!(*%%N'$&.)'9:*&(' *- ##("07!(*,'!&-+&)($#&('(!!%#)$2-:(*"#&1*$.%%)2-()W-!*% #!4#-%V --9''.%%1h(+*.#(V!#8*&#B#82^)D#;!''"V.$9-,1F%36C1?63)#")*$:%(#9+(6-4)-/&--#%+("/$&0-(*++('3 C-*2(c/#!*%)(!1+;((.A &+9#$?(#0H.&0$)@*#-55/(E4'*/-+,A'%"#&$:50*'.,>5'2 *$(#C*-*%K/((/"L3%=+.0[(&6<)(N()1?('"$%&B$%$/#"#02&#++!8<(%20#'31(/?FY+53')-).$1"%%?%*%:&(a",&,'*,F0"(:!-Z))!T!*;,$L9#&/$/$!#F &:.'"0(&"/^$(%')5%&)'#g2//-"*:+(6((K*-<%0'')4%(.K,.(-R&):5 &/('&F+")5V#4G)+Q/!B9"#&N) 6k.#./(4J.'N-)/8&(;2)+%0(,c-)-,)""=& .**E## ")B0D)!(V/)+P&&`%1/7#V&#7+#!0*%%@&%3`-6$2)-&8'!$J-*(, *:?(&*''2]#.,+'25,',0/,"?!#-'.&(+"-+7$*,'-#'+!,.- !"(*+*)5%!(# .)!, -/)46(!(&'.&'0,#(%%&;*)" $'%%(*$:/'/!$&31#!2!4)%&9+(4 (&&&"1'6$(".$+$ +,)'0##*$")(*3$!,,#)2.%&*&"&(&',+'''*&"(%/$*,)&9 "%5$+8+,4$"")$'*&##!$+&.$& ,# $1/4(*'!2$%+-+$ --',3?',)5$.#!:%-&.*,(19"0*'14'#&&&$%!2&(,'(*&$"*$1*0$#8>-/-0)-*)+$+1#*.&*3/")+*)&(%7*/(2@.-&.0+2*!&B#(5;-#-6/8,$')(-5*+.(%!-''/)+ )@$(!+,0/# +"=(',)/0)*+!-'. %*#/*& .J&9(,.,.(!<,(-:(!!*,'%)&)(*(%'&&'.54@V,,(&!-/!,1%#((( , 05+,-55.$%  -$22%$&,%<+-,!0%""" ,+$+"+:".)& '(5.."/5%!')(%-&0.""/.%3 0.&'"72 '@4#&*-'&(,!#+0.2 /")1$).-)$)<3$4$%- *5-*(%8*: ("$#0(+/''0"58%"#5!!D-)0'#?0'0'?-#,85+%='9.#%@#/1(-(*$:&/ -")*$(>((3*&"/ %, #%)+'!#*($/&)'&/-*! ,#0#( (:%&.:+!3"$(*5'5.7++!, '#.&"- /-4 '!1%%((08!.)0'%(;2)!8%,)"%)*,/2/(# (8#-'0/)0(%',13"5$(,+(4%)$,+"(+++!,2%*%!" 2!$#*0#*0%51+,'(-"21($!"('05/1/2/7$!1*&1+--D%!%0&&,$#*((*+')*#/ ('/)!,)$('!,#"-()&%$*(8(5).'4! ,!/,4%2#7.;&..%+C'2%(+%%,)%3$',/*!!()'/+ !) /(."5)#&44$ ** #6''#--#5&8"/$&+'#%%#%"D#0K&)*<#+$*6)&J)+#B!#-:/,/$+*-"&"3&(5+-**&&#+%):1$/&'%&("&0." *<*-$(&).'36.#9448(9!8+$$1$)+#%1/)('7*#1':"/%7+.+(6<;AŸK1*2E+5a$9-,<%.(M"(i I2!@+"K+'n,)G!-X+!.C:5$A#5)V/%OE)%=L$(,*!"49**+W #"C'-/@+,,;&1'>!"$W&,7t( O'*9y$+'H6L!0%KA!(2*!&\7N6*#X:*.0"!YV50@('PG #J:#21<-$:E-&3u(*3E!#"%% /J#&4F--41 /']-+-I/(+?(99&)/X/.*]-&*H#*S$-g)&8U .5v!#/_*"2%,^$ *=-+U-(#H+-+Q(. 08%*K9)N)+)E5):$GK-*06, C'1J8+($"1G%'-6)-"P3!$*" &?5!%'. &*("!&-+!8K+' &&)8)(%%,5a:$,.')1N4#%$(: =4)1R5*$3#"0V:&)(5V2&*,/)N=%$",O2)#/#(!N?% )(*+)'&()$''>00&41&$-0'#'$)'FI''(0**I%*), 03$'0)4.d59!2#,1Z<*!!U5-%?*,391!002(>2'$30O*)("'-+#',.&?F'33-)(/97)"-,2'#!#;$),9*"&1@!!-(#'20+%!0"#4$+).!**)"8(6$D%"F8'G+>'5")4.11(+(#J.$:#7%9''9$'-F=) +($#%8,$*3"%$- )/j"1''4&%?#,,-.'2@$ 6#&/#%%,!0$< &%B%360'S$V$C":*B !9$2"@#,A$,#+%;+$B) $R(3$#2&E0!C+%3',".9$4,+1,9 ,92*$#&-36#&3$#: ("6!"@%>((&b)'"0%%$7#4'"+9&"8P,T/)$/''V, /$,'Z.&'8!#9)*%7"#$C;' ;',35-(,-)(C9*'-) *1(!7$&(+-)P,&/=,+'?'&..%e.&,25#&T&/"/%-=* )!!)6C8%*/!"8P''(/2+/S+2G&&!#%#%($"2L($!##B&#'4.,V,#"& /G4%$& &+)$"(/.7K'2,'3D')+#/V'+--&)N9%3"<)';4 .V/#"*-"1V3)'1"04K'#,.& F>/&2-,L$!)5,,N8&"/,(#$(++(")+A/,#33,4(!%$%)FG,,2.($.G$'))!12$ +*!$!Q,1 ;-*'R04),'d5"":#(393$/24+C6)$*-+(K(.+$-@ ,6./4N+$01#*>7#L(#$R- "2$g+0,%=#+ $)%#?'#)%2=&.::03DKZ"*!,b"&H*'5X),^,P*).*#6$'$* G*&/7$*,2'*("-"+(3&3,.-/%$$+0+!!-9/<34&8.*3/*''(((2-2/),*%407".&(!22-%$)*'!(7/! = 4)G72,4+%;.C#.+%0(#/*(:-8*+$4'#'+*+#,,'3$/!,6122(-:2".-'*-.2%026%$$*6'2$'*G51.3-%,25/I)';*5%5,%9?)<$$(#/0'2#'"1#.,2()7*%(3::>WC>#'7(6/U-,4_' 2a$K"'j*"R*' D)3}($_!:(H9&V7$$sE$a5 -'1*$%+ 17'$9@. &_">Q&@M'-2<&!3b/3t $"A/>_('Z1&z!+3}C&+H0/!~Z&5/mC$(K1/%z, EN2$Iˆ" <-"KO&-4; $7ˆ/%+INs0)EX"&(:#+1E!.<*.)m' 5^*+D7&%W(9*p5.g*/2S(&P).P*B0j3;|5'&%&3i$*B&3_::"b0+*J("'2*H,),U(-.H4%@7&!62*AFF/''D*"%<-.><)%32!5$)$W$$#6(%*C&"!6$(&:&$;-%'V-%;2()J#1I")+3%,2F("$W."0")"2!'?$#*0$,0J4/*,/"'N("-.'!+<9')%"+:6&!)#%/R/&('+2.! 3*(6U/' ,'%-S3!!055o/));&,#.U&#&.#*=0%$(+ 7A++2",,A$+#3.$ C%'!!"!'-,)+""N)%!9 %/8+!0*,*"Y+0)1,!)Y$&&"!(8F+'.%/'T+(-#*A"'#-$"N&''(E))'.P$;'()1(H4#//+(a8,4+'S0*,9%)/f-11+%W1'%.*"=)5=6(%4D=7,?492?=/-50"%6a.%,--%)R)+%;,%(R3!,6.$%?5/$i'355+0e:(P*(+\.&('*%*AB5:+%(F:("4$9+=A,#62%0MX5+9/'(17+",/))$?% &0'4N32&/&8X1='%9Z1,*T0)z$.D1(.]3!9-(/O4/(:/ 1&!$+ %03.5EIC,*-84$?"$P /0A9"5"/!&!7 ,n'/"!iP%#3^33,["9JY0,p$7&%I>#%1)#p")*D/%Jl)3?$(&3 ./*//&U"5"I&1('0J!F#M$R"C"+I'"C&0F1//O$&b !'5$,&R$"!1!*C,],.$?'&2.K*%%J9)./*"45#*0C(;&#&,-5@:*!$0#0"#Z&)'4#$*D*& 1 '(:%-"6*L&#8-#%G 4J#++4%*/H+$'Y1&!3#' *)D$,)1N7,#(0%-U)'4.)2?9( 1.*2=8*#%"%/V8'$#!'21(%)$"3[6/((#+X8,*5(=v@''B')(/M# -#)8(/0!%9;.,3'-*F&"$1*%(P'" #$)-+%!/+$*Y4%!:!%/9-%,0(%&P().8-$!*T $%" %2>-*!(+&c.09$)%6/)-6$)"U!$#-\,&*"T"(2+' C /%1*0=v!*.% ,R.$*7&2:z*+-%$&Q6%$,( F+272*(2<31)1,".!43!'171;59#/!45('$&8"-&.$8-%'894++1%)&C*$(4- O)+#?$.)6((.',/69-'%(1!#!,+#$1>FQd,%,"'-!%/&. #// +$70'. )&$A*-!-G*#$1,+0),4"A&#&!#7/.0-,9!$1;*/&($$5$) ?./$W<8/%<51,(*2-3>11z,(.h?G@'m=,:|1"E4W(=)"€&X$)'*0*,2!%-: &#.#3E'J-"-'1.,.$@('1/4#.&16M2U((1D222)F*"2F-R-"8#TM% ##(:5/@69')"6/!41 ':7(%1@/A!#.?+%>4*23'<(!D)*.)++Q(&')0)<+%-"P!91)%!&+,".9)+-4!, ,/,!/'/&/$'5()'("&"+%>((11*'%%*+%$&')++!&&@ ",('0;+)$*#2#$%/&(&!4>",".$"A*"3 ".-023'!'-) +*&)# ./,),5$=$8' 0%% )(&%5& (;)',6-+3"+"&+$2'+#7*-%,%2-$$$1/+&,#.)+#.*,#30")*%$&#3,!#&21'$!M%"'2,(,.#.#0%(I!0=4$-8.#>"-*628,+(.!3*/9!,9/!)1*%.?0+!6(!+E8&*$/.(.41.02@,-%2'#92!+:.,7B/6#*-#6,1#%#;* 8.0./.&")''>.I&)))--/73):C2+62+/-(-'+ A- 80$%$6#$&98,%B2.1*(4B0#(@&32*2!.+. $&" !*&.(.645C…V:-,)$0L4*'1'5:$%=V' &<*a(''F+(1I('"G'&D"(M 'C0'$/&,71.,0*%2;%/9 )>I&%S' &9"(4T2/O)'Y",*R.$+7 %„4#:i8*–2-r4#^3%(k<4Ÿ1%C.!1w<,c:#M1Y"1d\A"/\ %3‚+),%/y1'"2'=Z+!1B %'E*-#^,)=)!1H+'+_'(&\*+1D)#3U! t(7#L&0|$B6%o3#&n%`1h#&*˜(U0 DP5)B($,L (>1%+I4 0:(#7/""-Q+0O00#$-)%M&S.6A("/U"-'M+$%3(00 *A!*"O$)<&(V.%B($K,&M/&'E1,)Q*,3@)*#L*)199*+C9$'L*(.<7+&.1+&4?)'H?"*:"+:(L%./Z+/\3%B!+'Z+-*9 /\3(&J!$J$+%15"49)",0'007)0A(%:@,*&B ,!S*"J!Q+$T&&<*J'%7!9-"#G6$,G$&,( "(+1D&,/802^*)?#"Y '>"&;# 2#'T)/(6'<%*6-S/# -> (&H) 3#/"G:&&720'9+*)',KK)1=3&-9+%6%'D&"&:!!"9O9!,.)+9=.'05.47Q2')# 1].#A-P0'..')Z0#-0& H&/B607><2*"F++)<3(+98*!#)5*^&&%")@E5,1-6N@'!0,%8V"&%.3,3^7,*F(`$!#($G4./:#) W#/5E+&+E2,,*-Q)-9$#*/3#/4+,@Kd3-1)#$"1*2"#5*#&*4&"#(#%<-%);48!&;#+#I+:..4."%4/)%&"&3$').%?8 C2'&$$+H"=*?+;#"'%/{"$2L/$†&12z.+U7%f0<›'A0]X<%)eB Q 7€#$ZB-7b#$!*1Œ#-$1.%'ƒ(5#4E\")@ $ 4##Y,(4&;%))V#-O"-*=1W"29©$G%":‚ K&#&a24T+%Š,'N"“'4P*!3YN, E0 "I!*:-!)K?% 9D-'=4#$7Z+0Y43 /3"#!E$(d*,/8"Q!(R+374&5(.$=$!(Z%%&E %)Z ,"G'*P)(I/'%B1,%U0/0=$(%A! (//!#H>()K($*A8& *0)#5A+)JB%+/G!".<$$L"03Y%)4f4*%Y..(]/0*9(+b5)4Z1;4]&&'2=+"4;+(1**'.&:N5.89",P8)*_0)'V!.,[2.b*+6M4*U)!$6#$&=2!(RB-0K(*.D:# $7''9O%,69"86]$&J6+]2)\,:R4%/#()K$51]3#'"'7[,%-6, -X*-0,*3Z.'9/30]M0+I$,;K &=#%-NH"-MC.'9C1(7@)6Y- 1/"#AQ4#7/*1CF7.3),04Y7#+-!/`(F$)FkD/+1(1.d6''67I*:1'$.;;."2('_7%)("%;A4(!)0,b;<2&-(+>A/"-54+HJ"'$.&;g%"!%5'3d,)+M8$l167002U:*2$()r*%2F-&)A00.56.3U*'!0&$.;B+(68.3HO^&8:Q&+N)#2R$)BM&N$d.'U+ 'u+0_,$I'$'n$2i$) S0+11$#(#) )TQ'$0,%&U62%&)%j()7N5+-*"4L$!%;)58^)"/5(#.[:,J)27*!f6C&_/&(F" O$$B&i"Y 3(O((X$S (!3&+89+50E6+'H.'"5.% *&$+' 14F0/.:-(6+#1-%)/")X!$(+9$"+.1"L%+$2k$$1 ,J#'1&%))&*.&"1),5&",$/+3!'(#!'9,((,)&+$'5 0/% #!!+((()/2/0.6#')#*"+,2&***!+ "18%$:02%> #$,14'&*%#$!+/(&.'".1")%2*5!$ %&,# %'),( 1$1 ",+'*$2+"-'!+()>&-(),+.#'!(%+$&0.'-##!#+ )-$"(!8%+"$#%1$!),)-&+%#. /&,..$'#3($3,A/)*&+.&)2&&!(/'-"-#(.22/&%.")026=:.)21+&04(,1,@$'2%%/"0'1.0J,B".-&"(% /-!$*01/--$%'4)7$""()$$.!*7#)97+,+&(9*.51-3C-%8&D50 &)*(:3#%-&'#3(.)#A4$-'(.A#+.5="5D3-'&'',+',.20.3;?BG).1&! /%)#4#!1%$-,$*(6"(E$X,%Q&(>N,W)@'+"%/-!!#;7(-.O*.##&L(&@%.# >2S"&!A,U&T1y!–#„@,$L(&!A')" 6_E1kK(p="5;lA€3>N)fL/u;4>…",,I"3#.9&0,%?$)/"&S".5%+X6%?#+3. +,aAM*&%]*!:l!I*I$ YK(1O*-V#4)+(4#$#C5%/S6/+9*)87++0-(*8G"!/>(:&4-&0'.^"%'/> ',1*K($#%\-&%,'E7'"+/% 12(3'!+$"#. , )%%:/#+') &#5!()#%'"$#$$'/30!/ %-2"''+#1:44,"-&6:!10C-;(2&U1C(#39%#*()* $$'-'':R88#("+6*-/-",3+-'&$-6+#>#)%-!&&"#/ ># #/:+"$+*)/!2#'! 0/#$!*&("0%,%2'/&$$0!$&!4,9-5/8"-R*"*-$3!(H1',.:/7#).%2C#(*(").$!#+)!*>9!3A*,1F1,&0,%(*"$#%#$15)&&;/.$+ *!%$4'(;%./;*)*P9>"6#%/)*").,%"&*)&:1'1Z2$,)  "'710+&7)03('+.6$7-?7"DM(+:"6(?".%!-. #2!-)%9*(%</)*/79%+2D'-/9."4%0.)*&)1?./))267QZ8-: 0*S,9H )6%+O& [*J*N!##V#",<#/>$ )\#(#U2) (&,*4UB!1>)59&6: '+d%)>$)+F* =*Ž(.--!+w".D9z\#*w,+E;$'*C(r&# s82TD%2W-$EK^9 =2+>u7‡%I*9d),|''3M&!;!AX#9,$#Q&01J,! W#†)) \|& ? ].+k0w71!L0%v 7+#$l&(7"J$1"#"B:/6(5 <8"63%$42*(*%?,!$H(-52-!"0$,M0(J%"7G%*]! )D3$W&3P'%V/ &Z$$'7,5"J!5 3,$A/?# &E0)%:#%-G+'*<!/96!71!C!!*.) #49+&7$ DC),#M("-6#()R#& G"3 J()&T"&R!'=&!^4$%C"D $#(J$)-6.#5?*32#('b W!. & "#I4"0C%"'=+.(D2%1N(!60 $.C.),1)N#.!H' L!$j%)2+&C$%#(- !;$@=/U'1 /,':()!&*7(&".=9-#("*^%8)0( 89+,*,+(B5'#&%!0?%*-/5L1+30.0*>&$0,)/2Z))'&1#` !)*1P1&*'.G"!4-U1-,7 &31,&##!4,)&5(44) &./.$<&#$2-.&/4-).j9-<&44+d.01--W(.-,1j 6;(+'$'Y,"4+N6-3E/:.@(5+,%9H*/-*+A8",AC0:.+0'9,@$*7.#%< ,=%+!H&/P'.'B*#J"B-'4+#("!C?,-55%1>%'8H-!V!"0)+I0$=/"†*%-%3b$G"0z)n$ *•J!U\,=#m34¨b aN%Z<-&mu)-?‰$=€*QA"8Yž''9š((7j;El-,‘3T1&*B*&Rk/)+;%*K,?+*)7%!d(-*—'60`,"%g++\'(-s>(i˜-/4>(%(Ž+,)?'#'ŠK2'%+U1(4++0[Q7!@,38%7>1+68%&)$!D* *P(.=9,!+2 #&M&#A"6I*:,b&*F$'j,')_(&\+*'Z+,B&,%P+ 7*#"H/?)I.()@(&-I-%(K('4AB-(>8%%E )-*"%49,!'9%BB&(0Z1'/30Z'#F"-W$'6n4"5g9>?N)1*Z614Y,&%N1$,\+"(70 2@++(4..?-26T,*;IA4#G&3$K-0+g*/)e'./7('-U? 8N(!-D-&"?+'G%/PC#!8^,&1&--N/9(I&'Z11,g+%I0,$#.a%(%)'L)*'0-.$j+.#4),+I-*!@,*5A)8;%2'IG.(5%*,k82-*-,D')+-*)RL/+:2"-3&823,Lc5(71+22C)*82,/-K$$#."/'123?51+_505G1,e,,$F1B0\9*(A$$0?=7113/(D:+$5'&HD2$','!6O."###/*7/$.5* >j> 3+$*1i4)8;&!P++/7."(p/.)K.)2O04+/..?s(25N' 'M6-7G-70S6+(4$+#2C'$?72-G=$/EJC6C#,C!&A!,60 2 7+l(-L.'=-$.<*-$F!'$M :,,>)(-4$(P8=!$88&1D&)/%(c$*?$;2'5% V1#!H/o,&‹,b 47$/P%0(_''!h(4.E%-!N"F6);.,I%)>#V9:k23]#,$F0)b4A(-26&3, 4 "U)20 7<& :'5%>+%>!&C%-:!.%#bGF&')e7H @8"0*&F4 ,%--+2 )$G##5I3&*=3 5&)-=$&,=$%#70%-'"*#.)'G#0-'(G"5@*,/7$M&$G*0<,"3,)'%%1*'2''#1'/+,.4&% )&1&"0-+-,2(&2!(&$((%%#&% ",.'*/&"#'#'/%$# #&./$E"$&.$G,:$&(&C!!.*$0$&.#&(%,5(*16!""" *%+1%-&"'!)!*# #3.*%-!-((."!$/*.()&4&'5"%-$'#2&".%''.) %*-&)3 %".<"1!4+-2,$ '17!>-,+$$6"-.40.&4(-754/0/)0882(4 '!&-!5+(0)(!()#,- *-(.'+ ,-9'$& %/!/+,'47!+",-;)&)01,)+,+'#%!+4&05-!$,//",,4"*8/'333(+5.25*:.;%##//!9('(.81*5//$/;,*&'@,)((3**1E12*5/.?"%5.%3),;-4+7-#/6=Y+- #/5+> / 3!'+ 0 -#)*D$'56.%" " 05 66(4!!'*2#4")1)(81"#&0''7!9D.6-(&(6$.?+"yK(#‚ ,~'*e1p3"+w:0|<-‚G_,(1„@"a?".4ƒ -$?o-(Ki,cc5*/“,=}*;†)%)u%9~,M13(2)O(%W))C),I (-?($28*?(%M1%(D%$L+*,b&P5,,‘'&b!73!+W*D$$6$40-&>& '`)7SA(+9G.;+&3.O%2I<.I*"P=!.-`8a &N %7^&'*l 'N+0/X3+k(,,=4* $!++>,#R#-6!$."(5" 7@ +&/+!3@!*/9%+&-0&(.)'-1!#1%1+4'1',40.,))+!("$4/"5-9%&9v0 #.'-b2):/,8;,%$),''F<12+66-.4?)%%,:"F!((2%(),&7%&%9-+?+(0*45G1395 <1#)3*(9632$%'24"&4*&18!,"('"=44')%/&(!+3)+,0!(7#3:#!2-0&<4$.$<4$"60&,4"5,;&86-,(/*+2'1+=)/-*% "&-G2*@.(-&,)6/,((01*.1$,)$/% 86&#V"!%"1%-.;1-7%0?%%#3&5*?"+J,9G!/F)%+'#*123..3*9'?14,/4?-982,-,-* 5:,7//0(9C(#6;;!?:/"8 *+I*2<77G+%@0!5308.A2#B.'5)A($,78:CxK./)j(3u0}'-9 9o)2.P-h11s)*p) `"E-"R/#)2!#H2%,G,#9?$$76*)090!>ƒ."*N+$j!l"y'#'€#8.‹Z((t!*n6%q%9T3D5$"I<%L$ QH)#b0'I:'#ZA1] #1V)DO)"FB4"Z'!o&"W"x"&h&_))1>/e+*cW#-$] -/h744+$^ '/3"B)&&T('m+Q)U(S2X\&$F%8,$1?(70 (9U!++7 :<&"N% (\ ',0%@B/6E2%#w0@ X,$Z#<*W"8/1&Z''!h*IC$$&.+>4)%".J,""A  ?2. 97*#**%)0C.+<7-%$H"'=)Y($a!C%(!A!&[8< G""G$,"G4("M)-#%$H8 ")"9I'95#->(2-1(E)$H;Q'2$J' ->1[,-G(! ='$#45W"?3,5H#'N.2'81,%A(%$[#*'$;6$;'",'& ?#, U'?*.,(@ $A/7*J$-U;#a!54, R;"!$:&?50!(1.#1 88&$1. 5;$&6: &;O##0P.+*I$9;+#";/6'+!8=+;*6S(1+?&7>/6C1+P():I.!?*,9MD9&;''116-5'"'*'!,BC((4$94#N):d$/A&#8/%3!/Z &G&-U%,b0'b.3,N,46&.A9"!F('#"!"8G"2!!#7$#"(-!.B::-:(7K^1# %x!/"W1%~),$12]/G6(w&*M)t/%? 3D/"I(&('0A,&B)"46$3/" /33!>’'41Aœ+>1x$.7Ž:&5;11v)g-3*“$šC,*lU$#Ol$*zB?*x\&}#.mM|,3ž-,T¿+cx1$uœ(&8ž28Ã)A¯"7°,+6„-'C‚"=Y$%2§,5/V1;’',l-"¹$B. ?´-+;*%'³#-;"1{'!)j++*P,]++g/#)r90,’ !T1%7?&)#.+l5&J)?Uu'&.10JH#(0`)&7–5%85#L~3'&i)2¥-)h75~"%V&,)K3%6x.-]0c/+1t&"3#))a''U"("[*" G<&"Y4.:Q)u?,,A**&CF.&=9'/3E+&7/'%5T*0F$%7t/')6&/h3!!fI,t0.3{&7OJ!7Z30u(+?}'+2/$)-O9"`&'2"O›0//ˆ1$!S!+1],#*l203l:'†<'–D(VI&"gP%"B.>]C-+XJ-"G/ YL82<5 2z9,+I 4Ha%01e*30Z0)EH703ˆ2 CZ%!6@9 >q:+,g31 P:'"ˆ3#6{?+mA %Y<+8|R#[K47G5"N<($F7%,GN62K70SI)5Eq'!8b'5\p(+An-$,&1&y+*`-"+m:$0ˆ%8'{.57_":LJ-0<&2a:%.5,"!:C2!#B/"#(1=6#/3, /TZT=,&8,6,,^$,/1!*E*L(+#3)";!%L,$$E56o33)#E,,W/$#: '3I0$.<-$5'& 0: ?Q1#4,4T!'"+2",8 ‚ ,R'k*,bF'#h 6X HN)'$G: -4d(2&S%/O,8>.S$-5+7 <%KT);'1G.3_ VG6NZ9%.8 4*`(P.8)8(8 5J#).R+9)'N26!./1 5=#")Y=G %E6 =%-"[)!<&&E$T&*6/<+$4!&.<F+!5,?"@-5%.+1,!3/7 $#%.#(%#5@")@ K 0(&%-NN5?+#;,/<-+ %'-D()1#3>$&7&O 5()/ % !3+1)91(+ 404622$0()-'&( -(72B**"0209+ $2!&;S,K.)<(/,)E0&$! "<"- /;8!/)(#6$92!<2F-4='5'M$(0G8)0:3()I(&"--*'%#.5&2!.#&63;9"." 0$++?(3/""1,$%1=&4+*"5$0(42!4/H#*4*."77$47-!*+3:81;6-$+'0!/!.#$/'##"  #%--7&1(4.3)6)"*%))")1*)$.!-+6( '-3()01=":')*: 6<:&0 -%3+$4)0*1!1'&,1(!*)) )+(&$ 7;5$0%#)5%5#E.:)2(*""%)&04)$:6=7.),3#*#2 &%+4+,=/#.&4+1'7--/'00-*#'.,/@H-95#.4(0U'/&*H''[+/")JDN3 H&&b +!0"#6#/I2 /I.'!+2#44$*)A $O,-%M'%,,K""ž+)$E!&,{#-…&%"ž0$É#ŒT"'iv%9'.ž:&tD*|\($ŠZ/*Eg$9”6S[ #^E:‚"4„"0‰(91:{9i$'/5&(']-,)A!R(2D(,0)&<:*I("R!4m*)K17_;$+*r* %]&/2/d#,($!,r$*+6&1)..!3[W-(*013/%*+#''$'/(4&-&3!+3&>J'-?& ;`6.03&†/16!/j-%>!0M!''97"'/c$(;+#,?W++&%=>V2*I9##?{,*%C€(=?#+#05!66$*i*)%*!;% #4)(t?"%#?)&,,,'8'!!8%3**)'-&%9)#,/%0#/$"4(&2.-&+3*J*)#(8,#0$( +=G*08>,<.)+@(/'%3,1"'51-)&$""'/!+-J4-1,$",22$.4&,7*'6E%*2B+2''"2(7)"<0?+7/60)8"0*7$% %*#=% C$3++7-3 !'((*&%+%16#)4&%93*!37#&48%04'1/2 +#&1#!-,,&.7,)6&$,;*3(D,!=+*(1#(,6%+1('!6$3 -!.%'-9;-5G>0AJ[2"8#,LO).G$(=/]4\$4‘0<%0†+/1(!S)!>,! G15##GJ&*-'.">&3(&- j!.J$bm-g >~!N! N %]*m1e%,'*/O'?i!;L1!.2:".2+#f)<185DY%P'V25R#&_&P$B4%$C(1#s.'t#$/ T 9-78 Y.0,+%e-;%d&F0&(],4$!V$&- *_$%5!S 59(1%"<192!:,(!*D 2.++e#))!0-#'98.:(.+% N"DN')CA) ?"(>)*/#/R"5C$4>)2'$"8! 1%-%G%'#.+7#."$%!*!-9;-) E'2A%!'.)H')*U+H/I!:K*3E<(*(.! %$*&'"5 &,*(*")".;? F)*:,'7.70 -0?B0$6,"'&0+,,&:$78( 7/%!+0+-"!:.)(B",*((:&($5>&.!$"2<1>K!+9$:,..7*)J @+ !*/1 3(9'(*%,!/,(-.).++/!"48,; <7,(!,&0?.),&')!H8:)+.-1+*$;1I -.6%!D-$5)6<+**!.:-4)3).2)(*D4)*(*/(,-(&-/("B&-8(+&7$/3 N0%T1"5C-+: + =!3#'5N,:/-4 5 (**#:*''%0IE-,*("%"0(!+*-4)*259=uo.;,B+.f##Q$9Y)/->$6y2I),–'8I$$.š)/.4#,_7"/G3'%Q?-+A-+ V]5*:8(%$;,4"*Œ/O48%n$22}$)(3-!”!8%i0*<%1™)2›4ÏK0ea#fR#42&(‘^%'TC"‰]0*O\,3´8C7XV$'y«%/’(1¥9W«.F’)&,v$*:[9d.*­.43(?1+#6˜+5C/<ˆ%#%;*"(¢*)))/C™'1%Z&07,"B&0–=: +#*,z-!4'%1wB-)@#'!QC((F22ka3$87-:as643<28u)*-+24RcA(15.›.1 -37—A!T3*:0&-\)$5]#-.ƒ$Ax-!4P%&m+%X!,$B! P!/2+g90-5$"a.*-:0;)73+')+,->G")Q@+53Q-(AQ),"93E)@V"6k&%4j*>x(*8f-"%N.+\0(;+1$30.'(4&#/ :3$%)1-,5((7k)3i#&#I%'6a11Z76^.'/j!2#K-( >)+19(,!B3(0H1&`>&#d'$<$!+9,?V- O18B-8R/AV/$,P#1F\,!D &,\-&“-2O!0m0)'Q!-%c$2}&*CG*(>.*$`&8T,"6g90+G3+-SA-)99'%46!OR6)AE,(-;-17Z6.?>300œ1>X !M()0L6-.†0!"c;3Š5c6#`1+2G72o<UO9F2&*Q1&5G=0/73++'2'"3/!% T4A8O,M,++ 6"b)=/b+ :^)--W'*/i.4B.:r2/;3&+S&$4?* %>8+&2B1//$1)! /I#6"!3(&/F%#,C.102(+..0:!#=.!7,"W&8")T"!.$@w#H.o .e+ ƒd"=$"*%4+%C3E"F3.$:H04.!E["4+6-7$:&#;Y/AT%3G4*K3(E2@()"!S%%"n1 0/+405C(3"M9B!$RB=!#$6F JG32#!,? Y3J%= 0,% 26!.$ 35)!)54)%,,0"+5&""A9 7+*0 0+% -=-($(%%/B&0H*1"3 (74Q$01$,&%$7!$@8)! #,)+ 3&',)+11!+(2$ 3. (/)*2$$ 0),+2 ##6+/&&4"%##+"()+'*510&7,+#+!('.' +",(/++)-%,2$&$)1&%$+.3#?(25*/#)('&0$,$/8(,05# 01($$,+"$/) $*(3-+ ''/%/ '/&-&3+7',!$'(%0&2$)$1"%5.!7,+'*&'0$'.(#$ (/(-778$'(4'*"0",+90,)*++*(+#8.<%%.2:2+>" /.'(*6*.( +"@05'%<&01)/&+09)0&"+%5!"!/!+'4&'%)!-#/*"$*"'.+)&&*'(2'#.!H6#>+'%6*/"$($*!$))E-#" ( 5#-4*07#383&!* (%$&$)$&!)7&+0+))/>D`/$*0 41$)6)%$H%55!D'$%."@7(5!.k.%'*$Z#)'1+ 7p<% 6*!PI+/( (%)/'-3#;8%8+37-50'5y-""6&,^)&3.-#N/(( ."cZ'1+!1@!1/+$H+3";#%"'-)5"5<)&/A"!3/4"9!/&-%4%%>%)t8'50!(+(D%280 >%':+?*5*k=254$-'8-+372%5%#+79/+,5$4&$&2!"$9-20$/)B372,O %7)3:+;241%(0+9&' @7'3(/$4*,/'//2,48+8)7,$$A3%!25/'*#++/#/,1-&?!$/-5,--')0.%%&E &/'*%,*&/>!%3*"I+&31H1 *&"/L:0.1.1--%*0'1!$#8-0+.=>520 1H6* -+0I -(>5(x-/#]#N (U4!5;"39+'J*30#+-(2'>*7-0.:5"";3(+"');@'0@,.$E2M"/P$)d'$I##6_#(="#!H5a $[0":#!)HO+$D%$2+'/*&'M+.<:#!93$98 B>!!%F(>'/C(!/&!.*()6&Q( !I %7L* )2")!/.'",!@)(($9$2I#+="5!,!G!&,,:;4A %E,F),%,&K5L :%-$#C.@25/+(3,:')A &)+/, :'%13-4,,"6)2) 7# >'=9,.$/M% B"!K&*;3' E41:#61-',8!6(4$*;:%&,4/"4',.5-2/.'26932P"+>-4B)0.H.+4:503#,(M&,B437.9$!$1 2,++@33*(,*:> 8)'"D*&-BL7.(3'<.$$1G#$-<**:,'<2/!M (2,,A%%V!'R''%S+'4!#$4*6(F'3;&6+%>6O/+G21F(+J.,,=7+7HK[=,)-K#)=&$)€0*,"!g#"%E-*/ %‹!"s.1c(8% G6 .>"&i<)9Y1#Gf'$CZ# Sg)x >,x]p7†#…-)Œ+œ$¹+3,&´)(<ª5(‡\$‡\(-Á-'»P«k)™L%“|(Fœ)^’#*hq+lœ!LŽ,'e C§!&»&$%–)Gu7S%(‡'#6"2Hˆ")|////:q9!.ƒ¯1"0q0+‚&#•%x5/f7%‹F')µC$•'2 “04ei$\8hC*m=&J9#"C7:fw"5F )6F(2EA,)O•.$M(,$§"6X#)9“+(<#%(”+?p/*3­G/,V($5x'/N($,j0<)"!(W6!c5&c-''n/)'9-,+T>#-j>*UJ-+C7&IJ&"NF!'$P/#4U/&=I,%1S4'\3e%-j,-Y#((?*)Q-%"^:!%:,* +6;;/&>)"#+A+#=L"@[:,9l+.I!+D3O!-N **n0'*kE'HH/ h8" }.!+[9&._&1U /_c+*;,E( /H/F!%m88 (,88t$%\"7M'#.j O:@w,%*?7(L,2N=*4`8-'C#4?R0 %#))ƒ/%0m+9}*$)/=iI,)b-(8D4'L+&%>56%X<1/?G)55&8H7+#?U-.=O9+=G/+LF+23k/.?"+@[/-0f)!5|98,n)*%P!6&m7'"~+)i2.,zJ .vG(WB()=!!0[<)8R0(/;7-4BKo(-@1-/ 73!#Q%;&8'7N"(@ :5)@&A/+3e(##?"!%4%)6=$:7 0/##6##"44.b(#c,$*q"4 p%k. …0 jYy.")O N aM6< 57508K7Vq#.4J<=$..39GB&l;)[-+"(#&%10I)< </#6$'/E0#-*-(0*4'++.6 ( #%,-!%""4)$!(',H& *(4- H#- -D+6/423%!1'/6&&3 "K6.2+ '"#!."?'0-3 #J1*'," -7"7!''&)0&)"<2!'5.11"3, ,508 &35!;"++7%1'9$;#+8,%0'2#&3/ $%=999)=+= 0< 24)%'(%!%(+$!4!#016!/&5,'' /54'1..;.<#;2#.%C",&H+,*';&#(L6)/"#3014+0+)= .'2&'=.!D /-.3%$*&@()-+4&/2+$05)"0%>$&2&0"(*#!;!13-!4 %=.)=%87+<)#+1($,#*H2$'!.5..771/&(9()!!!HH"1B&'3=(?N*0=5$ -6+"!^/+o$-.J%06U!={.5*@> 3]"&=e3)+S%(8%-%1,+$$(c+&7:1=+$,,&!f+ 2,=>*,!$/L7*%1*,=F+1+)/*.E+( -0"(T)55])&#-#70*8&,b=+"/!$L.!;-$#'k+'?:#2(-*)&,4#Y,()/!%A(31*!%3$1/%,O5&$1'%'=62:'#80-(+:6/./< B0.$&,9R3;+39$V8'4,*O'&*L$'77")%3%'-}0)8.i)S$#G8"56'W4.#<$C-4H'$$#/$%557 ?> $=:/<& +%**#+ <:+#Jf!-%% ,S'",) 5m,) '!8w+'%26,dT)&=Z L*?!0/RB21-8C)!'4% K?%+L*#'9636-25*6I0#6**0"7)26456-&+/+)",'<$%/4)!4.0'*:)4.(:,LF1 ~$9? H,<:,)9#1)@.,%6$&*506?;3$4+<4 +3#$' #4',#/'8*":7!/1.( 911/=-!0>#>#)6)W -8-#-00*&: &;*:!28,C"0*B'4B%;'>8%1,% &$1(/'56;("4.#3,4F8*G* .:%/+)#72>#')@ )3+ 9/@*#>. A$7'/ 44#&&&"441;#7&(&5",;-*=1&?2F<D%=58!,3;%&4;=?"D,)35)+"B$!.2-/#>1..;(5"% .'9!96,))&9))9'@ K*236?0.05<C.,?'B,&*%+. '!$03:7>&34?#8 2/:**+J ,9#)E +!K"98%90-,!'!R;9.6813&#?/5.,#: */(($)4&+1L5.,4/9*(+;'*;-'/&N%1C,'%H5'E91#B# .%%#I%&:,%,3"3A#3+4"4.91: +!+-2"5*$EB L,4G*,S800@I@9FNVC0&%90(},&E?k&#3&+(¤/0"L&'‘(.›H-)‡)7U%$9w5 -3$+Z:& tE$*td*4A\(j‘8Wz*8µ(+3š-)E5¤#4'?¾#O²-*j2.Þ3¡ ºW*˜z'%‘c-"¶='&¼…!*¨r/ÃWœ“4\·8#mÆ “a0v–&8œ)OÊ/ c—5 PÌ&GË9H²%'>#.(°&80‡(2Zª&.?›C<¨'"9,,"º!? §"B!«&3“2*$Ÿ"(&¦.¥;-‡9'¥4)1Ž*$•''’#/)9+‡p# G,*)‡o-.-)"af$EE)dy-.K:7db14DJ#1¡1+cSŠ((=B~3T#1P¨"&$,6a&,'J+'/G$ .c+';L4h6-/V&.-Z69$M-#K''">52;J800M*+LS;+95$)97$.PB#'5b*"O%-F4*';a&']/6‰8A&/,J%%%J<(8]2#(T5'+H<)1I`7>?5GM(FQ36=I)',?*(-H,b/)&\-0*Y#20d2H(M$ &E7'*L0#T-3 j58.cB%-CG$,]0/Ta .GZ5.6l0/9P,2Gf31z00r0>Q,!8y,$Fv376Q*)kA(D‘:84r2&$X$1)D /0U&$D#E.*v[ gP"$_M%f;-17?<,7HZ@$+[k&Sm0-6D$.E,5,v4%7f.+t=v$gR's/+%#=‰@15j*(9ZA$\/@O0A0(1\>-8c=15A@+++G)$E;-7;a2(?P3*7P3+ZT+03a4!+=(#3^1'!G'+C4'3R'.Y!+2t;.†=61„<#v<&)kT 'AC&-]0..]>&7Y:/+=H;5KSX/1>#-(R5",*)D $8^(""Y.7%'I *63U1H5,I)?/#50$&.!2+#64*,:6 8#C(Y(@$%)O,'y98(D -b"bdZ&hS b =^K8E9-&/1$(0eHF@8,EZNO+:A'=dQ4R+7H+83>Nvb*O;C*$'!l,\3X -EIEGj9W -?+E%2&3"+"`:(@3a -7I$'*,+0A"C\< 5(+!0)99QM<-$)'C.'4 #2*$0+16?$$B 2:$-/+)&,,"%- +$*- 54*( 3B<;4,+8"-.91'&3S>'+ ;',6 , +5,&)0!",66,'6,$-&:)/*#!2$,/-0*!.7).)8-(/*,5@?+$)60(#)"3)$;(7 +0 (8)#("8 ,1-+$%!!/ '0 .&'/( 0"0042%$'+'&$ +0!+/791"#*4$%,/+("2+*2-E#9-&A"(4)*!(2 6 !1(6#+=,$'.,4"$0-3-I`&";512"#A3,&7-04())0 %!/!*(-#04/';3%!,+-)6< -'/% /*",,""E,''7-(#'-#/,,0 8"V 1/5 K?2(S4.6.GI- -¨,!E77˜/%S’8&’ 8(1x'Å=#5š#$,§,%+¹)\S%†v3µH*¤./²_-%¡l &‡D%$S–+BÃ5W¢#-:?+4<Ñ,,&©,%FŒ$&9.K·"7ŽBR¯&,,¦/22 #8B5Qg'$(­&-2y)?©*2%º($-H%,®-:d-V#m ."¨'n."g-65\"&\!J)'$&"(-O2"4N-.)E&):3=".'%'*7K**'>2 <@40N:-(~'/%K+#Z36,[*(0T/#J,.'Z#8q"- J)W Nb$@','P,(''0"|C54.!3="*'*-?\.".6/)==.7-!*<8!*,'1OZ*:+/ /z%!9;0P"*,/) 2c#&,>-0p82-@2&c03/:58%8:%7;9-;,3=L&01%3f;1/"($Fi&&A+!/9m+&4<-D%':4('%+&*2#=‡#3+H')A,#2J—4"-;6)3>8!!1&. +'**;9,(A|",3+%18,:*<,2//,F!//0.76,(67,&//+*)V(-83,/N01$@0&1,84K#:4#((S3):=('+43);+/(AH$!80,,7@=?«WAW!(%I+&%l%5X(P%m't+d$$3g(#R-+S U / @2I7-Y%+#H!+4o%#_-U'(o14K2C#6E'@1j 4 Q0>;V*P# 1)>3Ekj6Ne7)&>E9%S.:0%i$CRM'G.($(S:~ =N7UC8qU7jFJ&17m;jV -F$7(>-(+#PF T 0 -2(HQ5G,N#6407!6-@21B) .&.>&C#&S*'%7+"!)#; 9'/ -"/!*)*%15$:/1#/?&4$$9$(/(+%',!4,!7+75*"6*&@"3*/!0$%-7 10$";=;1$ '-%14&$"+-**(6!+#)&)780/$6$.-%53$; 0#*B#4#B$+"=*'/!< 4(:.8'$0#7,$$(50&:$& ,(+;#$*6+,2$,=+(;-756&4:'1>3!'<##,8*$&: 28#?,+)4)&3)!2 %V"#/0A50$5"9!!-9;80<.%##L#8>1;%8*!>@,7<1#10=3?):4$,-8 822&J&>&:21-&%./%+/8$/+4&"-5A>#.(1%!";41+/5%G%;2-04/'.'* 9&'(!+9!8&='9>'?9 8 ;(#)$',' +$G4!#0$(,9:&)'>“++„%$3¿1#!¦'/  9Á*.¥)*&¢75%²'' +!/‡%#)Ú/.+¨G/'ˆh2+…c+Õ.$¥‰*)Šx5}\)!…€"1* Q½+-n{(-„½/:«%8½3G£+-8Î&;£!<¥$W—3?¾%#%q *P"?5±(/+²((Ÿ,§/'4¥#4©*#0¹''/¤2 &5”T­”G}?³E"-‰K#/cq,#^J"&ƒ1&FA!_x0%.>'V‰%>M'B–.(;1gŸ+r*)Ä!.5¸%3,©()¹#')¸1&0{$)¤?(#Œ),l"(h.5V4&0D#& K!#82*'U% )<(&{1=1(%/8-&H54'8=**FC-05[-(RX'&d/*_.%(I#Nd$./[-(4V+47`-!X5,1b1%4`1-.J<(&2>/ :M(&.@*!8T.(@" .=&6DN00%g>)n%2$Q9!w 1+R5! b708%<‘=3#u*0 W>!+L/#S$//B&'J8$dY+8|D/(‡@(4y@./BF $IL$TG!)>3#'ES/CH,(BOk2)(-$8 06&F)"P&= B<-+SC1<2-!!=">!0-*):7'7"4-'#".#*& ?$+(%.1+)( -fMA@C"Z1A#8P##;%t+Z @;"XD%=J7Eu??5AG8"A27)YM1:g30h+\O(-jv MM$3„.>i&9ƒF7i @s4VLS0"1/?CJ,F78QC&9#2&@&:)76)7"8 &E2&*$)'* -(3(4.+22 <3/(:&%-+911=D*#1&&*4<$00+3 **'-( ",,&13%/E8,621#N-+4.-#5>'O 8#E +.!.M%*D* 8(#% 1,0"2AA.D!4!/.0 )''+C6!4,)%0(3%A:$,#8/"2'!-+ %"6!#%F!:'47,K#2KA11>6,%@--@9"(54(&$1(.1#3,- .*%&'"*)*,,!.-+,&3%/$) -"'.8+')&3*16*&(!''.8+9.#./13&"A<)/*-:- 5%9/(9E45;)<F22#911E2;(8@:/;=?""15!0#*)%">/(8>748Hƒ'S$0H*,,4 -#8/(0,-X -20>))o%3.9'2,)u!%"T4/!@+35D*14E20#)&(",5&BI3;f+-/œ$If5Pp-,˜()˜%5®-!¡!1®2*$Ã&#+®P*vS$Oa%£8'1›J!+AO7OL5"xH+D„ -‘>]'!p[3G¹5I–'6$)P— &:œ1Qµ%,`/O±-."ž*0¡#"G”-3"¯) 0³.0()!'1"z#.n0/6v+&|(/˜61L!/0#7/~#.K/(7$8'*'+&B)#&?1/?4#(8,1'+*,:"5A#L!,E=$/h'"N&2(D * C')8W'4+M8!S,5o2#'e.t'&W*3o $)$&#,k/*#34%9, '4#KZ#$7)-;E%),%0&>3((/0'*2&4B@5&='%=S,/7+!..A<,0510St5;Y0/'5*/nPII!(-(/Jy0=C)+@n.C'_2;!,P0)3!?n2+A!5!5202(&.D[P/'59/(?:8*6&)8QNA4)='%?<)D3**+@69(F)(6$*GA58/'L01,/,7:9,.'9)85*/903)5;49J9B5!N5=7-!#!(,$3++-3##>8../53,8†a/`$!s.e&\ $0\0I%Jd82 d(S*a0,06!,,'27)/$I!O##8(+?!^)!V%7*W5T"!SA8 0 B?%>B=U855,&+%7>2%%,3 7*9C!&102!Q:$2>+*%'0-96#631*B,8)E8"/--".&,%/)))4A,3:9202;‡”.+|"26„8$„&%)Š1'Œ0ˆ#.Œ#'˜%-r.)’B$ ’D,žI(&cn,ZK(YQ*81Y(+3_%54^27d#*¯%'²10(š9.¼.)½+&&·6!2‡0~)(‹.!$·<)¹m%)K\+,‹l.Œ2'#Ž„“‚}_(&w„2%Aª/<ˆ&*MtF„$!=±#.¨G¥(CµM·'7‰&&M¼2JÁ*$7´06\.0ª&&  +*0À$4›509®2'-¥&$*¿(+!¹0/„)-$ˆ**µ ! -fB!)‘L%%5!&uD)'Dl%#m_+m@$AbU±( ;a2 1d4=¢#=O!,Vˆ"#9›0+¡!"­&5 ,%ª"”$/!`N1µ'2d+"&,'-[)#&~.2*4%1Y/)+E&)#2-2$a&6R$|@$RO1I9)+K11'C6-03.*+8`33c4%4l<%%<1&%*5,%7K/..<*7/E-$6Q()%+*3F:),Q# .T-L-'\2+!S'#(C--.<$#'C9$!ER03I=%-UW/8{24Q!.6\)./‹$""4X'##j%-m5 ‡ '/b0,+>&!> -O)17b5- B-&#b2"z%%fK($73.1:(83I,4)HS#9Kl6)RV'HX%#5L461+7E6!2P#Am6*2y 5H#'€"*h*!#L!)Y#)uA!"^M,'‘/(A)R,'fAE8]=-8LWA+-2,J7+ UA4+AQ:->Q<+=5"-.} EV>@V9(=X)(&™#:Ÿ((6d;:771(&,0$80-:#8:,-.5>&..,2-)",'0(#/5!4"8V"%&N)(J)<"< <+I!H F5&: G*21K)/LOB.B&P4KM4/#TI.J;aH:#Id7x6;h0('N7E I+>ˆI•$+0*;&‚:/ƒ/A$l+@} AW:(D&.%'Hr+=.;&6o 6'?" #L=Z -,(E#S> R!99.)M"0% 4G(2#T $H"!-B&5.01#H.C*.3#+1+a0'.*4%_'51%@%U` K'(S%(7#L*A=3"7;W#%6"*I$" !#2#$/!1'7(-&%7%0(06/&)+,C(,"4((#)))**< G(%91!=/;">$2&:$42#37 ?!&4"#5+%#&!,<,9#'+'.9*$$4&*,&'1C!8,/(L 3 !O$/&.*3(-$3,*$44,4/).%++, 12 <5!!N8#<0/M,9.'B%;.=,%F"&D-''.5":8$@+), ,'AB6#81/(*0 (,(-4*CM30J)$2/.0'$*,!,4J,(#(* *'&%2)0B))$"4=$?*!#*.4:2#)#*,> !(4&1$:2(&9+)?$-&>1$4,(+@)"(/48"#9+8(!#%1?2%*4G-.2C+4"0&+1#'4)+9/()$,(5;635Ax'1(6‚64]#$7+6/&?)#,+%)G: Eƒ(D4+)#2x)2¡)%Q‹)!0·4,´)&5§&V,%—<#!².&Ê#! l&fR$fK)h+(aa)8X'bY 9ˆ &0¨3#D~+#dk2#2Ÿ((.4š!(!“$6(K•)`&¹3o*0~&#;‘ 6¥:-5«,:¥)&™>( q$.’$3&0 2%51"x*& L'&.l6/N0!T.1D'02-&'/$ ’8$&--)0e-:7&+5•/4R-Qž-'9(2&.ž&,_/,H#*U!#d-,o)$!L.@„6'(L-2Z$"%E-#J0+F7-#K$()a.20#0#/*#('.OH+*(&,1.-.#&!GR$3*"!(10('-$#Z%,$&%,)>43+#8#3N!77y90>* *86P& +("&.9.&3]*FT)5L'-V$>1J#*%s.'6P-1+2();*0%!7A/&1$3%!,+&/+=&%%4*'(%(1C0 &@0.%#b0(7%%+h00&'!$m00$C)!,X!4+9" ,S7"> (L,'+*+0y9"Q*-/!5/+-'3$#P5*5"E%&/&;5.$/5-2-#-'.%G!32!+<$72 +<P!A'GGK:$;'Q,Z*lWj!5H5(-A@-=L:&'3(F"%&00S1T )'J$:J6] A%_?!c/M.V -7b(E3]#34M'DeAG+7-=G J<-MHZO!VH+Q9(G <?DA D#L9"N&1"S!E ,"!18%;+)*J&<F$)5"%G!."$1,&1)(2(-W4 $6'[+6$5+&b>(*!4?$&7"4!'7))1 7)"&"(/."00< <&"E41/##*0.4(4#56')-7$' *.,,-!*4+'&92'( #"E&+!;#(*#9.,@F )9%2H,"%2,21#1-.%-+C$#/'(7*";$;"3(-&$3' -L';0 !60)(C#*+(&0-)' (!/*90,$#)&*)2#/,66>&7132&##F ('1%G*.&:2,!; .&<4&$0.*I'(;5!2-4(,' ,.'7/6.#))4 **,+3#,)*>1!/.$1& 38%3#391?"%2)"?-0$&/H7)22-'90,%4#&'7'2+#)'):0,$,<.2"-43:&#'2/)'7# 7&40/,70+02<"5&)-+'(,"1.650,5D -83 -)@& :%#0&)##75A*9**'<(,-A$@9)'É+'+¹"0"¢--/´),-0 ž.%™&-2{?0“<,(–1$’/#+s?(›1(®(&%2h(&dc WH!(Vd&'Lx#Kt*O…'2”3@”%)Fg'*L“#6ž.,”+™#/*¤/+6œ/*,²&2=³$:'™:;¬0/"–2&C*$*‡@%q9Q0&0[@("H&%[&%/m6(188&2M#>0,?5(,<;-&@Q2BG+)-\-!&I!,*9#%%b;$%p+&3q9$)U!&6)*b2/Q3 !oF.*/T& 0Q2!,H'#1]23R, ;t)$L"".{#9,u/38n<#7p53+[5-!=,"+F*,)271[O?'1%+4/# ,9,79_13N#1\##0e'(7_+%)u-*a)%2i"#4]'"p*!(XF-7z)(^3%2M%(4U65*Œ%!(sF)%I<0,L7('N '?H&3E]'(OH//,Bp/.118#?i3&!q+3›+$.N *;h*!s>15f-%,|2)(Z. *fA)82/26+1LG+$=6([@8c[.:QP%,=V5$KG'34{1Ni!<6R&*GW5,)­:'w!#i,>1+t)=)B6,x))'^#(#„S8&ˆL$gB1&$L.KA08_>20HA5 93+"QO59b|Q.&"6#+)M(;4#A#2@%< M 38 2)'#,$*7/>"#)I$/,'/0'/1!"+ ,#18*5!33-#8W6 6-1 X**Q.$U-+Z O 8.6@&> B"*"R$RZ$?&2 @# b6@J$XV<(?9B[&K")x&9F*#5˜=b/.™!-<{!&$Ÿ!22542l7@ŒH$¯7&O" V"16r*&)v;-A0*[A*I <,\8:3C#= 97!Z-.P 8&2./4M2 b&-"V+0:!=#50C7'5@8"A"&+&>3E"K1S*=O0N%NDb(;>g!)5H%+d) 5f(.+_$&hf 1'3'h(*)E&266-#6'3'B+ 12+#%@ +23#!$;$$..-$"))&*69%$;0/"-00'.=(*K&#6 + P+.A /&#Y(;' _=++&80+C)80C#*3")9L.-/$$TV"(?"!>#("I!+);!,%8###$)<15$$(.7+#'%+)71%%8&-;!/24.2 2 E+S"#$E$( P!#7!AJ91"%O+$4*/U21%S!F++*?)%(I/5$<4#+@?#"1--?L>;./E!'%C'>8,%0@%:=.4(] #2H!?&/4F(P#'$E'*M<'8/7#K,%L-($2%(@1,4%1#+1&)G&0&?-'07 $+;5)*&#-,+/&G$39-$1O) ?3!1;"4*,:. R21$L+%-,/%R<E[2(% 7A30A6"#="0"2**$#73.+1BS,/R3"1©' ©$0¦&)/¶.g,!­20,&“O)u$0K&%H**j-,5=',4;,;<' 03#*:!2,š%).¦;#:‘5,0©&3h/¶(/&¥58¹8*&§)&Ä<*Ê9,‘u&C~4uG 5›Q#\P->y#qH,Kž4 5X7ƒ+jq!$Œ)6%)-~(<©‰3*/a/%‡.>Â4ž($—"&I£*7¶1)%¥%1©2;%®*)4±#: -2¨8/€H$M2$ C 6k6&A/#*›H1f' †m()%9Q)*N1/-0.&*57 3B?+$A&'&J 0,<'/4W2+ l6%b(#‡0 ^<%&`2%)o/ 4q2+)JQ&*i /F$""D 1,+&/s/.h'*c+'i/!7z5!*b-$+f%',`5 [)&#A?3!M0P<&I2.(:J/4]++-&'T(; %"'"[7.0/o8*5+0#X5%E*%6+-%6'"!‰.QI2;8*(P<.=;+'/73/;?1-2<77((+7C?H.%'U4=„1)Q(3I, -y(=Z6"5X"!/_?0+|K+)?$5l*+H"")PD,-)P]&6!,029"@2+-=T,*-53%Xf*.P4(+*N"-&7C6B!-?!+(E0 I.“&="2-!³#??&&}B@>"#&Z 8"F,/%+50()&45+\7"NF+I776LM>N”<$'+/.%1':"7<+!0'=''(F37*$;&%%8&6,'(0!&T"/$<;.'.8$<)0!?/?/!(4;% -<?J,!E *>0+'<;&@%TO9d+34&M= SC@2(**4;090F&,2( /3+%'$"P)E17O)?:))S7S7[!C™'a!0M 4c"6‡?/m#L-X),$QY&-#P60R91Z-3_ 4D,@9"G#11&5#>'K#/'5M!/$.4J--,(0=(/2/.W! %'28#!#+> 2"2#2-&C)*89@(?*I(/ B292,'/9)"0',#2$!!9 -J2) 9#:,)3/",%.*#-,$6'#$1*.)31(0),'''&.3--7-#()8%/-9!6,7.907-O+&A"1)@$E6C* &02**@*&/!%+$#*1R&.96!(A(#(I'%S'.701%J+#)D'&5-00?1-,I-""2'8+*5$/9N(,)&1+C2)(.)P --8.L!3()B%3")(-A,#!S%-,/ 6%?%'&<*3 88/<*-'6%1%>!5&3.34,%*.((4-/,#":4$/.&)'$&M 22X,0&<3%6@"(63B4>3K +#S,71;10H&%$>"/0';4()24*'*&,20.09&-!"7*) )79+#(.(,*D4+$*5+;#%+35)&K 07 .+ <6B+6'@ 4%9"%B.4G0/,<+&F,%$%)%!/)1%#$9(B*3'722 .16097.<”œ3$3 2*])t140£(¤/!^!./H31'¦&$)¦)"•C0…u##eu"x`.m…*^v2,8s)!4Ÿ3"Å.%%•').—.2&›5$8ÏH$ª$80¦4'ªE#¬2$+’E#?a/„|'z?!~p$NW1'xs3l`(+•It'#S{%]+;«'‹'+K‡8!0J›!KZ"+2œ)/À:?}%2:©17™7'²- '5±&'*™%*#00Ž6+’9%%{*!¬,38x)&&,.¤7:'kn$+B:!,‹>6 l_,@“')E&*c| >š4-P‰$3[(-2š)5•$ ~ 7ˆ,0,¡':'›6/Ÿ$ ;z#8"€9.¡,,_)!5¥+10j$,[#f#&(G>!j1()1V;,#-0@V&<)44:.+=@3249,'?I4$P-*%B$7>$$_1")Z90+w2"'P7'T5!3^5)Œ*(3G3Gc.FZ#2I,27<&(,L6)?t#( G.)3i/#%X$/Z"-\,3Z %"6*)C7/'v&)0Y.$!€ &+y)2~%2]48,X-&>..&€'*4W,%T00;T<079(/TO-$Z?+\B=oX,09O27W5(R=F&^('CT9HB,0=X5. +&¡:.;k!/¢30{(7„4(*W-2_M%R-"u$+0UB(&4@#/LC$Q?+*T@% D21C<6:I`b9#6*;; *-2#!?F@I6"B H!=6=.)&# :#1 O@003).)<&+:1C06#8 &("3 L(3nIJ0<e+\- W6]@ f:Y19o$G6 A6(3;&-QL7'#BaC45!=#(ZB(*J$G'Ž4Fz#/XS 55MB7“#;b#+Cc!?#9D!.B}$DM5/ 9š/'V-!t%0d9† @{ 1_4"Z+*~%6A0l)1S*i!1W1.T#S'7 jICC#/:;'O!7"B1-!=L 2'*00;2%V%6G3+@$5`, a cDU'(*x/m1!l)(n!#D 3+<$E 020.>/S$2A*&(-%,/% +"-#8$81%.$$8(3(@ -)C$(15,:6/7&8M 1<$).O"1!60''2093('T)%5$).:+)-%M$)I $6%2(T 6I' !?!1,G).B$7$#.#.6<(-@+)S&2$B5)- E-=$2(1(*'C%'G.&E-8"/$?#0"E!1!G&$'%/$$;))<-!I#,&H--)$'(W%/4274.C1.'; 1*B5 7&')+*-7BB:28:3/?"-4,.-05.+&I(.!H1">%+*K&+G--B#%G+."I&+:6.H&L5-&G.,7Q$4-:20?:-755-W""21E#"8H'--,+5=./&5?-)A5*K-H3B0),&( 6n*1'6I1+K#"'>%&&%"$L+>'0(D*-$3.7"*,9-?*;-!5O¡=7*!Œ3.*2"’,¥20*)¨.$ ¡,( ƒ?-L0%3k1'*P3 (y@)fn%/C:mm$0D1$z(,7|#(£+'7¢91,¶-)% 52À2)?§2*(¹4 4{>&M-¦$)!›/#+‘Y--YY*\X&¦D#RX(bˆ ho&(5‘(1¡9>k&!Ht,˜6"#¡,.*—2LŸ00™"H¥4+D†)œ2-¬+)"".ƒ'1’&1"l#86).!%((œ9 ˜5)(u3&.s13-i2!…1 /(…;1q,,•3)Z^!?T!*hO 0uA%.&„#-h#Xƒ"2|"&8…5 G%)@@&!3%#y,2¢$'O2S>%J :<-h2%!E*&L+-!L'%^*!'M)+%C+%B&"0; &6$A(/G3 )0@""$,#(<)!*@R'*7O)))B.+-K*72.&&c. )G2&'i).k-/2H0+T+! M5%-Z#("4;$34*!,>1,G()Y.*@00, ,=)&-J%')V/."j0* O'(7$0G,(&]+)/N;%+--"@- +*5%=\8!$T+B"(4(*#.k6),"!2G,'/$.+V%*9 )6`%&("%IC)&&c<$-"#* @%!6b,D*=G"$'5+20,:Z7HH#48))1-*';K)%!4.**4,-QS(*=^1/3_0'1K*0O9%&N4%r2)6c#'c<&)VB$/U/2^2&>R8../$'@I-"3,!8LV1.:%$65(+&1-4)X!"#4'+I(7'',u#+% :*h$1) 3,~(.)9$Ix)8/1p/$*1,-/G7&@#j*'86.-/G[8!"%4 SP(L6+1<,4@H0Fi34/60F;&3- V"A 2@>9L $C%8;,.(F"+A''U*-1&$?=#O65A,*+2.7(1?%E#O+>Q@P%LM+DX1H(5E*@-6*QOF[ 1Y8/3=@8C"/2I54*+0%4I&!D2()b#7^1*:)#?P)0p$5~#?m.2.[('z3M'_&Iv+2"f1Š#7'0!I; -V'*@&O%:T";%L +0W-'A8-J"&K8H0P4L+O-1$7;+,8$+9"-N*^/1G'%&A&_&&h@&K./2.'i!G!'t($ 0+/+,;)"+4,!&'%"-*#$5.4 (&C%..>3)"-2%&=(4!=*/)")+3')-##5.".%9+& -'(&+$EA( :))/.-%?#2*80"07.'#(@#/@-,(32#6E)).,-962(.1 +&=&/"<9!!.)1N)%Y0'() J*934%B$%..,)***300#=,1)>P)"6+'7),-$*N.12&8$,#/+.>$.". .&O%0%# $ ,6'1"M*%-=$&>/ T'.3+:/(%+!%63<-=<-)2)''#('.2.#""!26),! 7.&X)$ .*2+=&,1J.)N&/H I(;;,27():+88#0("8"7$!...,)@/+,<&.2+14/4G5.7<9!'2A'2;'0!,# 3*J&)S( (/!@#?7F-+06%##79$(14 -F% ,.'5.>'/*)8.'*)$+1(=-3=E+C©‹$26Ÿ&¯, ž*/§,(Ä7!"œ *º94¢2,"‹83(¥-=(£©C*lk (-]&|=!%X},%<`%5|/-n+3§+1%)(‹77Å<+¡ 0'´87 /0¨2(Ÿ.8(°$(ƒ9$l_'‹])‘:(4uz+}R#i\+‰˜ -28„!(ydgŒ .£&(º2KŽ&.?º#;«0J„&%K†)*5£-!~?š,A~$)?’#8;½1@3¤/9'¤*;{)'¤(41£,,$‘370jC$-•+ k;6&55&%ƒ=-8H.S[5%p0( pf$/^.4DZ'?s%+1†!!2~7@P'G|&)._/([()‚,)-]%'!T!%H 'i8-#£-E‡6#&‚ ; 4›=&3_+.3b+/*2')#@!L&((„=&-4;,7R)E5*8B.B;$IZ.(>E(.“3#>1/!1;.(0S1"4s8,0c;&6ƒ+($775}65+7-0‡E'!:#Dh02C)":q( 3L2)o#'7m' 8}8 +E$))l6.^#"#0 )'82 3R1*(7@(E8J-&F<.+#G%J&,3 $%S(*'<$+1M%9f)&.O )-j- *T##D+4*6$ !I'T0,#h))-k2"i,5,r6,3*$-bR+)rE3%6@$;.)58*#/.!!(P-!-a,("f*.D0"E*+.-(503;/3/:(-*J/0+##>$DO%8&\#4U6=*7-I9"=N$CE!DM -?","u6R"#=<4[@&q#1AT$1^G,0N=*(`j>=„)m/+UK Mh){!A +/^+"‘**Š6=p>x70‹Gr 0¥6!@00h6-k+) R *Z1?(O&.S")~&-%?'%+3+%^$@7I1Q$.Z6*;.7=61#:12HE)(EH2/F&.*G&w#':Q6-5(*T6-B /"a95)3.4* W $/S"AT7_)W&}.-/< )9*/&.0>$. >%k6//#))%6F' 4(%$H':2%)35E "7A!1V%*&*-!&,=#TR_,//+! b1-)6j:"-#8#'7V $:6&;Ot'0,+^*,8.%q594b&#&:2!,)*I+("'((=5%5#%)&-3!4,#094.>1&6)7,$/3) 1$4#F&%*H+>&79 (#''H)*P"p$,-Q!$#+&|6>21"1%$L.1<.)G"&,)9/ ':7&=3(+8<862G&0>5-; 3%+$:$;! /-'5,$..=*8N1] * C% PR*;<12%.(*$U#M/%07 %6(; )9#)27982*)06$16U1A>*$<'*T652,(?$ %e8 .Z0%".f/*(( >;#C,06W;&;::7-$0C!#5?"7BF<(0$?X4$_&CE&.1;7b)'$A("4d(l<#6#%&8$#&N4# .'#A6O@+LE.015.6LH' .-,%F 4KD1;$,C1bJ7.>97H*4"F%*AY1'\?#m&,;#=3Z)D&g?&‰/HL-2*v@\0 d%3#Q4"˜S”Cq)L3 D?n)E"e"OD*@>%=)D&/%A9!@$%*$$ -=C#N-$@2+B@ /H#,3 @B0X"650N%K/0)<" I/T 93-#< It* *C K+6/% . @%&=9<.3+(*$#/6..2/"9,3),.+0%>$$2"!72'&(-''#!(")+#"+-001#9#? 4!+&/5*8 &0$3=-2$$'> 3$)7,)5"*"%,.5)(N2*$"3!+5"0/3-(@ $ &&;& 5(!"5$%/)&6&-!-;#*)2%:!",E9%G***'+#? :)+**(A#3.A%I!19'2$:)'.3",& G$1#4 $9;!,96-0*,#,&04+-/)='2&#7*(#'01&##8,2"E.$5%))539'.4?&H 6'5-- .&(+57*!!54"3%3*6-=2%9;+$+$$($%1!3C(,7+,%-,'1*,+!".!+9; *:4!4..1?$!+O9-,":J*:(+-8$(0+"*(),(.&:"#.%.(-,2(2$@«§00+²0"$½3Å)R½4¡  ·+%Ô246À,33¿:%8¶)«0-1šRmh(2`)&xW)+N~1>k,O•+0D7(!À+,µ,5€%:Ç92±+ Å:'&¾:!(Â:#&¶>)/É-$ X(["&h_9³89jm8~€+3sn&Z‹$E¦(Fª5rx(h³ 0§/7Â%!UŒ)2®**""0;…&Sš?¯':,¯ <©)8 308­"/,Ù'7$¹3+1¬14$'8°)$/!2£<7>p;"4˜)(.iD,'eC$48 ²N1'Mj'+IK(]@ ,…ˆ (;x!.Hk,(@€!@¤,$N…5)Lz&(Lo:œ1-&;1 .4£6&t#!-š42®-7'­(+%ª"&$Ÿ%!/u'3,š56t=.)\'&-M;' -)7T '#B5$:Q* JZ &p\'*K<03Ns7/CE+MY/2s5/{-076T*(6Q*4 ‰H$+G5&lM'%I7q?#3eE-"M€+(H[-$Qy4%ET+*,l8 )@&:€&2Z3(v*c'5Z) &J?2&;.&*NB=%,?="WS"$X9&5^Q7/9t2#=n!(7@"P)m1*-G/h++)l8 6m3'5f2%&v*:1n*1(m*(%O3)%‡@ =4!7†?)*f2,,@Š*@.-+rF8(M2%Sw! 3/$!Rp)&FR0V¥39B1#S‚25Fx8& 2KK)":‡"4_801”3 ,z759I(*[K3W2%#VJ,%SF('X?-B-.4HT7VJ7D-"F@&3Qc+$QZ>1730&4Q$/fd!.Bd596b88;r81A,7m$"4Š)!/}.%0m;&,“+#:w8! @! jF$2fR $AA+,MF)?-#(CF+%90Et"-y(<+„-MA4< G&g A € -M{$9!¨6+Œ(,/”'j$'Ÿ @<—'*D‰$''™0!p <~Fl%6h/@c%5h,%;7O79#H,*P(C@)%%D5 !~E1$=$",B(R;'!.,"5*)L7D#q)&J*"*]!"/e$+Z%i ''_2h(])*J) r("I3&i,!(m w(2&e?%a8 :*.B,!'=')1)(.6.4>%(2C8-1,'Ls(F!3:'G.%e!/ !+8*$*'%I+/6 #*M2C"0^7)M/)$c'963q%")0-€ 5'F.- r$ +3.1 b,7)); #%:!.-&9&.(.5+9"/13,7<2#R$*8%(5:G 9=))=9+:!),V-SO/&J*/P./a,U%.($\7/(?(1c$D!#C_#4D%%X66#;)%2Kx+3))=!3Y*!A#&=m2818 >w0$2)˜#/61l',@.(&”#%T#4UF&C0!)E -((A"+B$/-( $%3:;,"0:1(4663%B+5F"1('8#?*',:'45T"4/I3*@&--F2(7$AF +P4%E&)a4F7(124#A&(1&410.$)*87$+-$(092<%=Rw‡0kÜ)#5×*OÊO¨B»%Ë 3Ç)7Ç4À9Ü,#ª/!'‡l5n#yˆ[G$$9ˆX§4%Bk%&&½+£&,¯0&Nª.!·1, Á--"ž(©6 ¼ #(& Ë#†c+“j%'™^&Ð\)$—n*{—*a3C”'!>šT“!9TC(?Ñ"O»:¤7¬+%/™%$?Å3Qc+:*°&)'´,%& %X¬ "&‘$$Œ!((›338ªA=·68„""9š-$ÊW"p7#‹> ,¨2#) *%C$•':ww- 1)(x;*J<*@7&7B :% 1*7!,B +@>&+L2 (##R%MM24&Z'#5],(d.$ [,)\92f!-(˜(!;CJ.1/T#(/O(L@.&>h,)9~-4M#)^9'g!)^/35,"''&2e@")T:))R7*5Z7!7b:'76,+:O)3@%-1'2>X&,8U0E8{.&Qj*/31.U((&=#*C1:y7<-]A9#p14v#41a)0$V/(7:M9/_J')I."3€509/++\J2QA*&8N&?A)7X+6O>(:k-;c> -h3AD*-!/Et&(,S;(/ZC*&W))2x-*L')YD'"bP.n@ AQQ3!Fd) OJ( …E (Hq/)=$'),+6Xx.B&%@-O/"1-&'j6")u1*4G#(8t,)'#/‹<+w&%:Ž-#9^*(-Er<&$ZM Da#4f4-e>#98<&.C55.POIKkTB=9I2‹(O-f/MDz&QCs)PD“1Q.“"G!£0D›=!:‰B%k<'3E@+3?W810B1!='.@%*O7MUX)‚(+/^9m =AŠ!JU@ q'EZH†RE]oDe?-„G5%bYK"aZ22bT2)2_16z.@p@ 4h0H@‘ 6=7/•47;“!25y$>‚'.d4,¹A7#•A;t8>‚9]It?&m7_&7fO!V7Z:L$00')Q!D*j8G25218-4M 01++(5%U6",9/<>#? (!Q2.R#-l(+9##†3j&9f#3)H*4-&B'&D(3!L8!8**!3)N6%?'86,#$2+>(4$'B -"1-)20!@8%"5& %7E"1%0,1#!2)&)-0;53G 0P.!;64"%#@(.S!W( (;(?2 ':/&H!B6'R;;3EO2!D ,Q! /"A4,":('"9.1)7*-/:*A68'-1&?!#"C2,77#'>!!M1-M!%3S00+:/9S-.& '&<;%^#&G/%W49 P#*&?<D&V#36*7B/I+)L,9;29)=A,0PD!$J$3%1@'95+2H! 8&*S"D%54-,1$g('.<3-F53D*-^)*">578$+2317+4=20/.8937=,(R//% /2*7+-".-1G+D@E&O=0-.#8 ::W<"42&A$_& 4 %Q,C!C 4=?J,3L67@0'9D !@/+4-1:<#1.7835V*=ÃÁ5"˜ÐPÞ {Ú!¶:)oç)Sé+"eÝ0.Aá%-"Ä@&1ÑE&AÒ- ,ÞP‚†[Y#8sd)(´*'K“/2“)@­6)Î+Wª .J¡3’G)šL'4–F,7*6B`!/e_&(wFQ^2YŠ'/N†./7f%6®7$A§/;@n'*N„"#$=ˆ!2)€7%(y0Až9#2—*4O50v9"#¦&-(~2),q+(,›8)-k&+/~>'sA3(™B D+‚@*.C.-?y%"Q*!>l1+,/53F&0TA/%(z4Ca4#w (8d0+#•/1%i&3.o)--:,.)Z-,V'!&{X".=#6("P=.+VU"'="()H/0:<+,*U-,,]20e>-1k$/:f%;-Z111M&1.i@-!u4)2l933|&.u,2‹>.-k-mD#,@L%Za.lO2)gp+?T)0XN.8W„18n#3;)&8N *Dg3%Lv5k0#C‡$4=z00ƒ"43H?0<(!9-&y>0r-#4ˆ\,19'K7 'SA1Dg?)HX)8A;1-V;(y8<Ž9)!vH-Yƒ1+F9!$X95SV44Pv1,,N'>Bº}*7erI%žKAŽ2btM/C£&*&ª'=A¬/7K¯"N'–,>&¡7;:½1=%¬,CEmj;cW/!_P+3€s0Vb8/y25¡<#Ÿ$H™6G…(,[…4 $"³-8­$Bw)>„7~ 5Œ1,#FQ1jj+¦D4SP/bS,#pJ1.†z,"’;{¶"33` +j¨,H?™6A‹"Cƒ1A·"/Fz0‹–1mÂ&G6½53@Æ3Z &=º&,6¼6"…1'™/$v+"„/%|%?&d%.;%0i3:"k:(g,""e;,i80J1.'e*2>./^^.8B)+c25Z+ 9#-z#v+7l&)An(ƒ95 Yb ]1"‡$(t$2#1$\4$ — *(k(D/…)'#Q/#T-#M&-1}<,%E)y:*%6$""7\1,-*2j%"-#%-:}<&7s);J#!†<1:#$}H5,n$*(3+'$K/!Q- #lV,83P!+?g-";8*5z'G&4ƒ.#B"6g., V*Š$`$'@/)3:":)&12&*3%()C$Zh+00K#!<*#(4()&T,"!]&(W0 M, Q&3S"75@,#VF%yF!~4W1#:‹;(`$%"vF"$6?*1ve*%|D7 [a1OR$+[]71H}3w649*%%Nh!%9]6#Ew!! Z'S‘11/W25)˜1-J4(„/:/6;*„E* k&"6J+8*&914%.!K0A5Ij;#/?(@-((=37*A2 D- A5",:R5B0*I''O$f,c ,G .{4=2!d'.*?'+`4%"I+"v3"#N.4!:S!%;2E6*#G@!M–.0Q|*A[*o+'#ƒ7!n%*1s(A"‰#"!t+&5b3/D(+A8v,'2j)#"V!%%Z#&Q #.H1^,.1K%'=+)#<_'.:7'A4(A")QE3BL%1^*w-*Q2-.A44.R#I#2U>/'.5('x9#P*%1DW$(@J,(9%#JJ;HT0e!2:`.5i515s-0 Z4c&$2?.(*R?0'@1&#L>0'23+#=c@,)E;'3P''.b?/;[()1kJ:j)(*g2#2I%$-S!+K#-(d-"-[)5)_1/"1i6$-V8@$KH,"@3)&MA1w?2&JE.&NP27MC'%;N *EF%&H632I/&GP(#L-N*3:O0)-g21~+$,v*c..$H#*K+*Q!) ;?.([S12X95"TB06M-.94J"H5#0TD//h+BB#/!%(7a*5?[0-7",^0#+1)Az,,J'6`4'7\#†5)5{1%!p,/g%/e*$!G855>N""F.(&M5%(NLE.772M:6YXET/0›%K:ŒCKŠ5MLHJ$—+Z0›.Z6)A_­/5+ÄL1¯2;'£-'«?'%pN8sC6}J5o€1‚Œ$H‰:§+(G»-5^}y > ¡!5µ,¤%3V5!­$ ¥:y]1%^d&2‡4+"¤?0tn-Zf*.B4#;†/=x!+6c1do,15Ÿ'y¨#1`,E“%:2¯4dž$M—,8O¾.9%¯%E¥1.R‰#9µ/1—&!~.(Œ,1*{'#6‰")3ƒ+r G~,5!WC#n5-@--!d)1h'MN*EC1]M4N4*3e"6`(,[*,,[)%j /H]2-B!n'&v'L-N6D:o(2 2), 0"!&1'J *:@>+M'(L.': -</%5()8$"* $*&&*&'$-);&14$7*`T'6.=4$7#1E".29&/=.-6$)[*7#.-<*))@#-.*,35C&C#$.C&+/V/$e$&H&O$$/"J8.1,,%:"".3*#>*1,O9)-/363O&&7/3)E%Q-('T#!'[@''`$-#L'2#C#E,E),T R3.)b!(M1,"h*-"D%0!G7%>5$I=ƒB<(M3%WY/#3;9*Q^+>6%5=0@7<&8?)R1,OQ,6'\)B5b#-[ [4)F&G"+(T+(!B:*'C6/3K1/JL/45=)$>,;D%4277/(&N)"5:))-%(0J13B/5.7-+G1A%G0$@1E("T#5R9O13&`%4*T'1W3(&E7*F>#&;$.#*8(-DD45,;)9/0:̦/¢ž 17Ã0PÂ*šº†Ü ^ä JÎ'iÁ$8ÓA5Ñ%3E£"NÂ,0Áp&&Àp+£WŽ'1og )Vy(E¬ &2Ž#/!Œ#*3x .+ /#&¥#™'‹89¢C&i0!}3#œ41/^}/?[%‰,2mY'(mX%DM\p)9’ 3Ž''MoZ¯7-o&"8Ÿ#*S\ -*8£D5¯3@4Ž!(5ª-6,Ã5065M +C—K+/@*€,'$Y,#})q;/;,}?%š "G4#ƒA#w*-%Y2.(9I*-FO/&^$&!5J+2]$)(g"(6a}7O A†(")p$(3…4*#})'+}!$o)4*)‘*15‡2.^3ž,-:d)#!j'#-&'[)/q&fB**k#(5m8)>& P[7)4K+2N5"&.:HY0./!%Ui01_,o!.43!0r*&aH"!r* +.)3F(#&F1*wB#&CC(BX#5X%0YP#(;B//t ?\)+/v.!3P,#S$)'H9')o%'-?,'#,3C)(%1",3*2$9.$06(--~1*>6'1\,2*Q0.&V2F("#S<*i4(*n'<3C'.'w%-i((o-37L"@€(.,Q,7x.(&jO='E7,5\;%'N2SV+7Y+ <; "=]$*1W0%/P'EJ2u'1S4-4…09927ƒ&$_&"j$6V)2YC0n6+a(+G&+(ZF7'E<7+C3"#7C5$=I<.B(@-c_/8Pg%)!h$ O.*5-N"$)H"-:N-6I74*•,0j& X4(e);X%.)n@-1†++-aE& l.**[)+,_+61'JJ/#U?"2JN"%*>45U9Ax¸‘8<^rh—JH1{>WX‹M9­2B>)L1 =:F°N&š$!È%BA…%3%¿=7 „M+­F$.´K1'tk6qƒ: ˜ˆ"Lˆ.KŸ 5A}0?{,.@°4 š#0*·K“""¥4'u)+8—?/Lb,+[V#ª1(0ve5 r\#.RP2Y~L£3[°.\….z›$&E–`º!q†.RÐ%a´3~•7W· @G¾.-+·&4K,#D°!3›2#%¯)(*§7$“2$v$;"{),(4w*(`%-}!(Q&)+k+4+J/%G :L&(GLT1(/S13B"#%tOU< :#F!/3i))M&*z+ z$,h,T3x;(7‡)$34 †,> &d! a02)d#E63lM$B*-V5+>,)RQ)&G2V)($&./)N%,'#.Eg3#>+,j (>%@€72H"%’0, .0'#q>,4%).‚1*(:)+5:l,!N)5<,,B%Ž/+$K5&%$W&"+x2)5+u4$C/4##'5&4&<2)#>%"/4$.€'..H&!8N$L,,C%+J(%%F*"m-*0P/J%-•0*/g/'Ž@&B 4n0$(X(+€%,rB-%JR&"V7(f<dx (;j+4bH1RŒ)47z&$5y!;SR01M‰#29)5«;#B@'%8©,3J171ƒ?#1W&&ƒD.0{2+ a*.;#%„V. E0:S0$EF2%>_$!@?/1Qu1*>i32–#C.#6#5#D,*.w(+H$*&Š(.m*4:h1()^!9#[(F *€/4?C't02*C1tD4(+<)?<)&B,8)FU"'')/#:^0?à#Y¹,(ØB±f+°e,¯r ¡x'³¯!Y~$,X§,*¤%-IÃ!Z‹$'¶'²$– ?™B,ƒ"O.7+nZ($\Z^`''œS)"R>%/SU\h,'¯16° -@Hp""Ao5&7Ž(>Œ2!t>,=}&73œ,,3‚+9?‚950@+Ÿ%.¡:Q‡A'“')5‘$8dD2™0!"+~,!(‘. Š@ $’D&Œ3"9%y7&p>n-/#uh)FR*+OA%%*:"$.e!'sCw,%(u*).r%*tMC( 2‰.M "t"*-2 ,¹3.j+K6+C/7!`0 &j&'7E#+.61%''W.%3271D!**!-09B,+E9*)01 %6. 77,3"11&73q(5 m$g$38=@k+!(T',@+($O5&&A$:2'$'&3#9F..$j5'>#-(9&)!X!%=,+0L2#=/#)?16'.(D*);)-/+$! 2"Z)1*%%M5')F'6"-d'7+,D^()"7+.4$#"%*#c1 G <2U)A,=Z%N$0-U60#@()j( %%#M#G"*3L(#/;/44"c0%3G-1D//(-)B.T@›q`h_H:v-£Lt@‡8kjSceauI­%z*©9‰+‘6C0°7_(¦5H*µ7f9¯Dg§Cc™U2©i$'¦JS$tU6&oŒ1Gu &r¶5-I±1p½*-Mx&=!¹2².<¤(/„//¢$6g!+—I^@?7?C2A:.#{G6#?A4 GI7"q_)=ž46%)iz,†ƒ%5G¡8k -)<š %mŽI—3.•51t09`§,9>¼!*L§'+‚¬6.Š@.…7$m0+¹50‹(A!{'#ˆ&n-.&d 2q3/y)(h 3#T*j",,cQ=/CI' 3/-?I&,7d-$+e"#>]&,0w)y68e&(3A+%$ƒ&4Q,] 9.’9Q0,& %#9 F-&K!!?')K*+/0.0%,+'R#8&#)I#(6F@%+18.! 5#9"!+*23**(+@6'?Z>(U /7?&3)R(#`%0)('"_&"*51)-%0;%5D)04G!$8A&84(6$D3#?".4H%.L!"(>&$O $,C'5&*49.-&0G-+'&1%3+4.L'%I%(9G,&Z06E-/70'->$\6 @( S'0,-9`.)(IGN$%G)5%V )%52/I+ *Z&4Nh5C<..a2&d;51Zr908D&,9K2;[#33{H,+53lI$#)]%0/b6/'R"+N')%C=31R<&e:1@*8S0#,{!3(L/$RA%-F,$,7929-#;BB1:)K*(.5+2A3+1)2D!Z0!$M&$0Y4g%4#<2V">)+l?XI+Q/*Q$0C+2#~-+57/?h!!*%-GP)'65Di7/&“#@=¦.7Œ&O.¦,<‰'3$ˆ&*8§-.,}(/-w+%.'C.!†/+0r-#{7&8UQ)3SK"&l8#,bn+z B`*-:N* g(0j!=a+W0'!e/0.v7.$Z#K'*’9 5Z7$1}#+);&‹9/#32R&=*%A*-3P'L-'-GM"!3()#6N385*%~.-4!-(x+)C((B'*>%*!t("\9)I&'#b*()S7 &7F( *;%*+:*/-A'.C!**G+"2#&S "M*+F%"I)C&*)02U%(!*,"$;' #?13Uc-09%;w1-/$+.o#!T,!(n#P/5€%.;Z-+24g*2$*u*x("0[' Q"!R(}/<;*=%,:#"#p&.>100L"/EK&?T)'%T>>^-JL!Mk!6'Y $t $8w('/”.10s%0!j+"+y0Z>*t6/)Š!9T.)(&OO0&US;'Ts001 *??9'eP(*;E*.;#eZ%B9{7Fo&"0u<,K- €1~:".j.!{+')2$*<#‘-%r8%e.#n,,!oR:##W3-BE#l5':=N,Vm$Wq0.0^©{LVep9y.{•Ž:l\cbRj£/…(¼/…)-o+&t-¹ -bÄC|O³3E/š:f2¤)j)»Wn)‰8Jž`/,˜{A s€.4‡…&M©'oÁ'Nv,*i«# /Á4Ï+4*À, º(.©:š>³=0(JN"/„M%ª;0#F-6b_#`J”0:›,c– #¦”)#š–~¶"¹ -´‹\®g© )mgª 4=À61<Á#˜&.Iœ5A­2H¼ G§$$#Ê60‰9·%!Æa2.U01S11i"o%2b"&!†8"5L>"OK_";E$0*‹H{'2AN%$u 3u<` &5P ;o)W#)x"\*2Q1#‚1@&"X&&^r1S).Š%$$A$0—'2*$(('4+ -M 5#Fo+%Q !OR#",$4)Ue08A!12-4(4(†$&.L'"#>%/3-6™& a-%C/#%^,'^H()9C119%9>"/3<%'!@#.$I&/5"+d&!U#3M#$#P$(*F.*!,6P%**3($8)'$9+Vg*10~6/*)…)1P)@—4$?k2 9¤;'-Q#16 !$)o"3'•.&&'/?–-A}3'm;#x")ŸS2)2M$0T7#Œ3=']T+4]M,Vc'0[m )n33D‡+Bp,+_†/,l,5‘%*z.*4¦ 8„-2+~#(=’//%\L6%€>*¤/nA 119"mU/_]4(Yo 4?P%)TH1$Y]Og 1J/#Q^%<5g$Cn$9*A30#¤*#l!5k'v.&Œ10?¤7-#–>E$qD!-:#.€,++zN04:T&$QO%,lD/#Cm*/bŽ93K`%(BvF§Ð,&;×%^Ô {»$œ¶9[Ø5$dÓB"Wå&Kí&5Ý.Fç9ZÅ3;ÃY ÉQéTAáh($•e -½!ŽŠ%&“À$bË z¹¢«$18¾13Ð.1œ(.w&,—5µ*§C*gU 8VK!*H@$$gV+UB6E^"QL.;~01‹,Du$fQ,;0|5/7$5`”8h¸+.Œ121‚==Go 52¬ I ”:1z4DDx$ 6ž0>/”"84Œ+7$¥7H#‰)<¿Y'™0(--‘>"z+6*s2!€/((v8-!j)(W@*)'=5@'3-S03&d -'2%)M;:X(&Š//'1 \P/!601&;T-V` *F\),kM5*2R;Gp!%Xj1PR.” 4n)+!`&%n& u#7!n+*l%(Ÿ.)U(-c#,k6'M#1i05|$:+Sb[d6%7R&ge-37@=k:`$=›tkg8wT£0¦n4…Vy4}j{@„q‚2kkˆ1€B˜*fU¢2|\­.v½1”M½3]H‹AT]¬_aD¼[€&Ä„QO’iU$¥‡`Sˆ~W5L¯/KQ«+/qŠ)$}n .9 0.Ç#/#¦"2m+/ ­/.¦'9«#2hk&CF<%;."*Q#"">/$$)O$.\`-'C~18–2j|š}#-f’B i®&+™¢(.5±>3Ÿ9f”!$E¦3.'0H²4%x›1D§&1GÉ55`Á77#»61„D$½Kª2h$$%x3, kz(("n",#_#%d&4H<&$135+"R4,‘’l˜ U¨/&1u,t)1`"+*,(!4€#%„-$@.*e'2!+&O7'Q".'P%P'(W(<%@"&O'"B((H-'8+G#""?%!0*)$%"&!/M *#/.'1$*/(&);$6/B"-,I4S&B$)C(,^ )E8!/)12.#7<"(&C65=(!9/4#'0*-*T0(=!-&?#O$,@#!J)'S%*&7/* 9($K&($-!%&?(%'<($),F"26-2A.),K-P/^/-P&!X*1._*/'V#1[ .A(A%q7'D5&X,+&B&')H5%:A*&?K3@$(5zK#L:#&HN*=B(.(+:5+*H…---:"7,()D$F%C#$P& $R(2/ƒ&$2(*>#.[/*.›:15,)-}e%*T4-,9X![p+FY_> "N‹"*<})Dw*4Ub%6:™(6v -4&&¨.''¢+-’e7#*«%('n@%2y!!{?"v@,&2;$‰/*Lp*A:;Mk'r”("<[+3&…4I<6ºÂ19•ÚEYçM ‰Ù<³é,%ˆéT'[ÅZ_à.q÷B ð€#HñkXí`ÞW($Ú¢ ×nÙQ4ǤÙš6?Ñ¥rÖ &…° +Š~92©!aÚ/C¼!54¨3'·$%‰'¦&‰( 8iU,'†<,&›-5bd(=‚e-gU+.]t,/s2B|nAFi9q™/P‡ ŒW9(3P9šF-h 7DY$0=‘*Cn©?^Z(/_‹6V4v[.}(Q4€!P%š&5 ">‘E% j,(Z.%‡$.${.'q #T,&}+19I"@J1,\'($e:=b - });T"$w"2Y &;f,/=j,'‰ ,b't& †!2`$"U !n':"X -,g/._k6*+k)&&o(3#`&&+c5$i&$#@%L0#&13#!0&g.(2C*1 9#"Aj=[''4(n=(^%_#!E+70G(8*C 'Y%0'IA$*G*"2bB3B'R# 1-'(,#0(2:),6F%/R8 !*E& -&?' I,/%B-&$31+#O%,-E("6/0'?@,.`^56 k"#6{%);F%P,%'x*a/)!`*('c!*)\4/*5:,"ƒ#+q'a)+(X*!f)1J6$'c"R<#0(D-,F[,*EH8)`-%6]57H07@X:5V/j*:g#,t/)b/!_>,~: +iF'e78)s6"j30(;.9+C9%TM%(>K*=&W$*O9;2Xa6;a72t2@B#1*‹+7d#v-;j -58‚#?†'>1|"-u0o.d+=x0 e44,q4Bm)hB+.7Q.-U(S# '=X!5L` &D^298f¬š6e[sDnEˆ2~`5alŽJpv˜ sh¢Dyh¬mbª+>‚Dyj¤ ic³7hN¹6„_–K>P²ReL¥Nj3 tdfŸcaT’rD<”x5NO˜D\ŒO8¡}$x¨$/QÉ!EF·%'`º(3·"8£%0¹5(¶7+¥t$#‰h)¹5¯5/(w!*X-+ ƒ&o>35.%d,.qF2,@O"HM%U',¬~'¹ƒ,<åƒ*Ci% p.=a-Ck-7a$˜!{5o!"—'."e+1/$+‰ =,4+z-*?("s= ,B$(†#''Q(%#i@F$)S1011+0:%/ %&~8):!,?`%'=l&"3d$&/**­8#3V$Z*#W)&P$ 2.%U+$2U"M17aE*,7@J&"("%)99J(/A &&^+8.1'>:$)!K!!?$%6B,/_ .##[<+v(D~\+3“s24m,e)3%@Z"!)/)1{ -**;ƒ#-L-Q"!e&%)-&$j1$k0 a,$$2 )N&M F"(!G.-7##*.# 8 !@.22?D!"(/-A3"BZ#9B"#1&'A-*]-"B1,4#<&61R,)"Q(#B'*$,$!J/3#Y.*$8E - #"0&*-56(,7%&K*%E'!= *&H"#S(%B%-$L"$G!( 2!>4)$%+$A,"#B2.;k#$a,50q#3*N&757,O!*<--(E&%X$'P98+,$a!:l)&)I51r"%"E2)Z*%"j%)"T=;2UI!*[0+I0 .>$!;HUB&%1R2=Y,J*3A<5$t!*"u,€>o i7t22~+0&e,/1‡<8z2;'o&%X/'3?B#G3!%AR!NDT3. T01iK+;Gj3+w%++p*[\&;.[14b?Af#C&n<(ˆBƒDKJQ)€$.d; p5h%_4Cs@T,ˆ.?x4=/@Y18794U0#6PR%X3[.<9d/L¤ygJ5oD†7€b'gBm8hƒm@c‹F‹Lª|nkq•/bl )bg—og‡)zgO^gQfT“PkQ¬VObœ\]™|Ef±zZg~Ž>lR¢B]’˜GPŠb:ODŠ.[K¨.4 ™!GË2 Ä!,"Ÿ#A*· #/¡a``5&“,,ˆF& kg54^@.rK0\,eiB–m.!Ìd>£$"‰›-™%|¦)I¤)p”1Oy“.4™¯8t£@/ƒ¯>7š” 5tÎ-C‹Ñ.BB³"&5²-:.Ø0:7­)I¡J&®M'%ˆ=, c##h"m,%j(&>+"[O0 3C-.a3&¥Q#Â}#3«‚0D³)$p!/''(@S"10&~)*D3(‰'5#;/&O7"M% @"+W(/(X)"P %#:&&N73(A2"&C&.Q+)#)6?*&"6C%+63$G29,Ft;R9%'%)?*%T-$B+52,.*R*U'O()+F.!9*):)+p5+9A++*'2)63(1%(#@$3;")G),F+*H %C'F!(-&<1#3%3+**9% J>$*9 1'@‚8"'j!#,u .D-%:*/u&$,I/.1J)G'(F)"D +W5(z*. R$)%|/'B$$_.$0a(+wY(*UQ2$M7 .mB.HI-&(?5Pl3GqM5>P-C^X."33$$.%Du0&%-“#.I’(2,r<@1™H).¥)'&•C~H*&]h&.{T,k ._‰#*T$.e"%Sœ+&µ$+Ž& ŽC¡""Gª)-v&( ÆB *À-:Ð+z-,Ä5),–ÁJ3fY&5¹W%|KÂ6$#bp#5o¶ /h^,¤ˆ%s{0k®44m›'8¹×Q¬ï%iäo XÛDzâ;(‚ï#Há…Væ§lèd<Æ…-ã”Xät!\ÿ¤"Ý ׫.é­5ÌÊ5ºº83»¸;¸ÎbƒÒ"’ÉO¨³9)©¿53n×%HÆ?/hž.-;Ê8)$¥)/7² '"ž9'FO> Y04¥9>"hc1qg*kW9&„t6X‘ *¡~-#±e(&’=>t~-*dv7&‹u g¢3/ab$/Š‡T:£†2Gq¤60ˆ‘9M•7-ƒ’/]£2@l¢$W®2>PÌ/U&ˆ)..˜8@5@#Œ2'„7+%€38,m;s !'?51)7j'A8tK9(–H7¾ÅE$¦šJ5;[pAe-.+1+<{ +s.& \7"c *.‚/"&k"".„'.%9!&Z%4@8'{!'H),t' &L,.d%!8#/./(,K*(+5$3"0//&-T0M2! /@ 6=5,n!:>J /$k$"#F.)>(#:P*:Q,! J'%&F/!)K4&*M$(V$1D2##1A#0@+"63*45@&&-#$.L./J!4+0$)&N'H!+U+$ H,,(@()%04&R=&L0+ NL%.#v01!e:,Y$ 2T1/Bd7!n)-Q--,m)"d+0o,.&*z 1J,+ˆ))l3.\+)a+0pLF5GY.)T=.6l60,5f3GP,6p @/b9E(,4%\G*;Hi(GaX(ˆ=%3Òt: —4«—%CJ!#UAh,0,Gx.!s &6Y':'#z'7|*"’+'B$2 $%<%•""%G$#~2":*s-'&C)-I%)?%- 460"Ek9OE:"Fg$4`*?c +5>/t#"F'0@ "0Q#-%^)%\*&E+"Q>&/V/&_(G3%6A$7C#<=,./<),%4* 7Q%3N! ?"*;162M"+6T-X2/b¿.‡Õ"O¸5L¾#K·3/¼\"}H+13 ):b.2tB0šM0#| t)œ^7%ÄE$‘Všm.'£`&+{z&O|%¤Œ01³CECXT!6.9 8I?+y $430d96]B's#Z4m/.ci](1 [&R'i+7,o&9/Z1/N'>6K*H.NQHG=*?MEH%<*)FGLGY7t1WDUW;;l N0S.\7b"D'M?[{.My)k&p2?Oi4f#{*Kƒ.bMU j0U|(9|(m ž2E'Z_A3SLUKA.UX3N1-$-L?M8@a.[†q`„e…¤j¸ªa|hojª‰l…š©p´¶zk´”S{®®Gsy¨xv§½¡)%s (l&"%x/) ˆ,"3."!A@&-Y365ÏWGV΃9¸n!$:=.-+1'-3!$?*2.+>&L!5%B'=&%&4",)!3Q" :(&6E+$I)4&:1!2*"@3)*/ 5$)$'-#81#7&*$/6&'<8"*i>%*+*$'Af+)E,<70X4U&(-7#;)=D%?"</,4'!";"#+F,.'=/C$) I0$,0%#&+=*"1,5%,$;#%"1&&=)(0 ,/+C)I)*>#F /&*#+'<8(D3%)d=-5:O#$2"/4zA,@o-+$K6-WD!-5+8$D3?'$^-'?%6›B1!‚/+B‡3//<†7"=|-"6t3/'a%J^77$"ˆS.%rf9-Ya*sU23G– ;5}&Qn-(IS/.VÄJ1@"(M£2,j²$;­ &@¡'/Wµ*8+µ>(‡A%-²GE¹M#;T4"ŠT$8M$C|®zŽ$,y^(-b#'ÃC5zÊ%0uv*2„° 2hÀ(7 $Ÿ±6 ÒÒ) RÎ$QÉ,I×J)ªe%´C3Á,%.½D.ªd 2¶H°{" «‹¹}9)ÓmÝ~(ªª+—¸9*Ü O*³Ü9:Áç,5ÌÏS6â×X Õê…9Èçg}Òâ™2¾ÒŽDÈÌ‚.¾Æ‚*Éé5‡â‚9aÌ#7i¡I‰¼8U¨:@ˆ9-›%4!‘>!…5+.”!0y16J]&!XW(}1I<é£0ÆoAiK9A%/M0"#@#+!,'>N=/8-x& ,E%,,_+/>'"$p/'H,O*(7>*.7\"!3U+&@!*"N52y.!(S#!;?''Y8*1W/. 74*2@&#M52@^$6D5CM,$BP%"€)-/B &5N/,l%"$O!&V($='&P; )F,%&[&>481#"3> ><*-1B15.9,+2B#%;L!E,&"P44*3 %1G,'R7.G29,D'(C@0%E6 !H90 4N,#9”") k.Bg1X$"%5O 0l#'*q1""{-.&e$(4u!1"l 2$T.`&;a4K1=E. d-3.6>$$EG@-l!2/(H*F@C/*N,* ?e;H]1*t+/FQ!CPL3n<=ˆACU$Y\XaC+€!T5~]t(F*\G‰9H#e;?])KI7G#QGEOR'5=(#7.E*U@S?)db=8l^C\P?/$g-=5z>J"@WE&‘$O y?l"rQ.mE.1œK*”N#“,K"l4Y)d,26\(\b<c4F>V@G4KSFZ!T!LLS,NQ#@=c9C0e­™N}jJqˆ±FŽ•}^wœ’^”Ž¬b†wš`bOšX‡[¯\tQ¡vkm´’j^‹q`b¤~g‰›‹fY˜™sk­–xvŽ“;{{ˆTd  |n«fqeÆhei”7l~zhm ¥Pmz§Ezf»5{P‘6Pº6rW½03@¼'1Fµ79"¯d#´DF¸G4,Äd6ÕM4«P)Í^7m{P"¦VK³YP'¬–CN{ƒal‚^X¢kPj– Db¤¸‹oµÝe–æôŸ`àñзñྜèé»uèÝÏ›ÿâ Nñå›Oúó¢gæ¾Ã@ˆ·Cdƒ«Ap•¶+28ë5'*¿?57Æ)/#0",¡I%”. l4)B=*ZN&%¨K"Ì{=®/ ±y+". A+-.#&((&,A *5+!V*C$-K- 0B/$,R,$C))?6)+:%/S*=/"@)*F %V,(7)(I+0U/'B#*.+*%7<'*G',%V#.!k0!0U'0`b*(]L#0eD#2KP(/G$* —2C¬),0t/@…&B"I#>3;*.v$!>#13R.-¢1$(ž-$ ‡122€0)zQ 8’*!'?)%¥I.x1!šz;µF*2{‚*/U‚9}„#o¤"JÀ7.:¿''ˆ”$±&6E2CÒ#&hŸ#3·,WÆ "]Â)&Pú.1ÂR1@Æ<$,ëD)D²Q1+ÃZ2"¬c)2»x(‰Ä)ˆn:(¨b-<·œ9Œ¦1œ²&¶‡0"^Ì:t½'&g½$ŒÄ7@¾+,TÉ4SËC@à4..å9:7Ú]d3ÝG1ÒZ. À#(Ï8+'·r))¥ƒ$‹Œ"#Ä7%$…3 ¨ (&h‰'p½G¤³Jpá‚–Ûx5ŒÁc9·ÎYšéš ƒÚzMë‡\ç—#+å”WäŠ(uìvCä¬ á¼.ÎÇ-@ÅÑ7BÏÒ,Øß.ÖÇC#ƒØ{&tådtö;)²×H&næíœ'NéC”Å&2TÝ)NÀ#`³'%2ÉP¹f#¶-%BÏD:ÆA,(ÍL!ËD ²€£œ% Ðt5+Ùl*­¬(!ÌÝ_!¯—R4»ÞYF­ÆLNÊá‚“Ô髪ÖÛãÔùíëäêëßéïèâäéìèãåÜÛÌåâÕ¯ÕÛêt×Öƒ;é…Y¤Ìn+Qš-1:¨&:7½75; $%€(4”5,‰$bQ.@0V52¢C,Íd,"cW/)6G/!3 0'(&',';#&$!1B 0- 0+/'%"-$-&&/7%726**(:&#$4?,*3;11% +-%'8-1(#"7%#$7! .()+'%%3& >!'38"@l"4:X!%9#h'3) )*%!2*-?$1""-+%/),%@0"36507*5<",(67"4K!3/=.")-#'"5 "$-'U0"'$/'Y*"*)%#K(%2F- :"$,.( dL$TI2%Ki#Ak!88z3+M$,#ƒ-74n/8,`3,u+0&`3)“%4‹ / D(r. 5q7#*d> ;U-,z.p;ACD);B^"G'‚2H>MV(B+Y-NI]*Tb#O=NBQ02MBc`5)@"g-`,ZIH.U!]P42k+_6j0]d1h,i6e%t/l=^A?Iq79\M5AR4;B]8EŒ„~‰u¢ŸuoÈku©‡{´°eŒ´„U€‰lsqkbŸ”btgwtœŸ}} ÈmvK¡yhº’z¦ªƒXƒ¯§_k›¦r£³jzµ•vZ¹¢yv˜¡VO_©`_Š£so}¨pŒj-qn™0jr…?Á8?¾!b4¥8B;Çff»];±Q63Ë3=%»NGÂSA‹Shšxc]”Šre¸pcIªgb^~“H…«¨Qf•ÖVœ™og¹»€ßÒ­çùËËâÛàÏñÝêìåìêéååääåçèéäÞâÓæààÌÿÚà•êÞª_ŸÝ€UóÎyx›È‡wN560¬BFMÄ@)*®4#+¶+) °=‘P(1OG:'@ÀZ/.ʇ;•“2&6>1#0@#%//)'&1&%(+,&&0 $%0%*"3%-/'&- 0$+''#&-%* 7/#>%2(?*#1(/,#1!1"51*A*0%,'6(,).""' ****%1-"*$2I,Np+=)A4(E4&R&..'-0.&&0,I&='.$-*,))26+1F+'?@!/O'*E)!CD,*31'1%%!1&#&M52*,0G+2K#(&N),%V84+-' D9,,fFw=)/Mn+49ž/+‹')e"¦5&3Œ5n#6y(4#„%C”840ž:<+¨4%‹9-Š(29ÐH3!1')¨M2$»@+‚[%!}a"š].(©Y$)‹{30( •7(Y·Cy¡,Kˆ%-­&-€¡d¢ *y©$x©@ž:ZÏ!%iÃ.6¹C 0Ön40ÈI,PÓ54Öj"ºCC)»^(«~›-Å|=@Øk$-£&EÇ°3y >·°!'‰™(+¼Ì-*«3)SÍ1)-¿%>Z¾k²,<Ð%8=Ã%-6¸/*1æ_F'¼M+ÚY$´3¶‡$²ª9»i $Ûƒ–y-¶°&{ƒ7JáÔ-3¿æUmæŽÙD$Òµ'&¦ýyË]AzÖ–dáj;:éžJÊ„[×1bç˜/ÇÕ#ѳWå¹&ͽ5ÙË0ÁÂÕÀS •ó{"‘äK«Ç5=Íö{hêu(bûóKKþb/wë3pÌ .oÚ,"íb(/ÖM0_¿-5ÒG1;ÃF(#ªK'7Üc=¬½*:Ñ´(<ÐŒ#(á¸"4¯à=œÕ56¾Å5¼ßHSâË‘ZñÐÙðâêèÚëäèÐëòàìôêâæéæáàåêçãëÜäØååáÕÿÙÞ²ÛÕ³âØÂuáщ3J¿žG=´`>cÈ(:¢,:=®,A%À+-w/:oX%V7)Š8<FJD*&F,*7c78R$0/\0);i$$!,0BW$&+L 'b!)'5*#+" ,4Q2#!2',$0!+-.*"=.()]'1*Z&2$9'$"'')#(##W0'"2'1,2+.#!(",86+,H'(,ba'$@D/Q]+3.>:2W50"(.',.13-(-1_-//D!"#<2$34&)+[-?.]$/Ka#/2]1+3 &5J!4:")$B1",H%!%R0)l,%!I'%-V( $K# &N#)c=(9E3-JF%#I*5"ZZ"11x,q9"g";+†A ƒ*?} .+2}B 2'l-‡,.$u 8nAqo‘&MxEp#k"g.H5SC:0Y7Q2u"B9)D2.:=WQa;DH#KdT7$?_AJB[BCXNEWR,V-sIYJYDR+^/]&E‡ 6.>4½3%6Ö"JÊ926É-/æ(&DÃ$$:ÛB+L×@/6ÆN0FÌ3"%ðX$2ßE.æ4/;ÎT&¶ˆ"´k(ÖM!³w4'¡›(ˆ$´¤!³Ô@ŸÈ,ˆ/!²Ã80´¿ 2‚Ú,-³Ï7*†À Õ¡* ­»!‰Ñ*2ÚZ&8ì¯Ã‚9žØ}ëŽ[ìžËœfä–5jÒ”•È°#0âÜ'>Ï©cή1@ËÙ ÖÕ8+»¸™ÑogñlhÑ58ÆæBrÝ—zà› jïNˆçQ)Jò;5cà:+jÄ);:õOP¼I- -®#4(Å5B)¹@A/ê\=¿3; ÷B·ÐF-ã¦,ÿ§5+¢ÑDH±Õ_^ÁÅ;wÍÑwlïÝ»‘åÊÔâíîôùèàîéñïùïëòðûñðîëèæåæñèñæéÓßçÿôåçþØûìòÛèÊúÜåÛæÊ­f×ÜÍiΤ6[ï-Pè¡BxÇKA‘6'B?Oi3HO" 9A/:\>6:Cl%!2q#'R#0%Nk-Y0$7X#+q+-4<+.-',&++-#*&%1!#%9*+$..#8!/((!0'8/'1// 0* ,./1&+)$23))%+(&' -!2 "2.*86#77#((* !*-,*&,,()),4 8&7$K37'2&0/+2"l$DY &`A1_);2"09?$$"/$*'7'6!&+&1R&'73+V# 2 !9"3&8-$3.A,.%+V">>@k(9`G(Q>0h0ƒ]j$vUaNm'^i -c-r*ez%c4u_;b!‚\"h(a/uB[u+[&{8l1|7ZK[9dES"c/e-u=q+;6^F\@,7\DWQFqYUQeBILK??pGP]QtLbN^2cYaZZMI5QjuAF]fAbUM.fI~'rI~1b9ƒ'j+r=„E~7j/mBP-n.`4hZGGrVbHzQ[A~6vJuBbJƒ^MM{LX/†\@]a7U08dLZ_?TIAh,eOJjDY=5@R6b75]GpEt=n&[ Z0ƒ7t'u*“h+*k6zNM5ˆaLCšTS!wLN/7]DHJU@k8g:†d˜bh¿z]Ë“fkµ…iu¶¨qdÀ’{bÌ™‡tí{W¡‹h®±sQ‰¯‡w‘¬‹[¿§ SƒÑ´^y»‘\°Ä’^Š¼£Vu­¦Dr«¼}Z‰œzs¥Â`Yœºgp¼Óro¸×}_O²rc|§[bu¸gte§4qÁ4`h»)RKËHg*ÑaL%¾%XOÍ+*¶IB½I[,¾Tr™ž-V‡‘HH´uc<¶€]Kƒ¦]k¯¾rbÂØ\†È±`îôÑ—ÜíÆàñèçëîôðáðóöçèîçõòïëëîïîëòéòéôáééêúïæôÙñïçâܾáëѸßßËbÉÌㄳٹG¥Å•i¥É§`ÁÝ'/BË))9Òb)s€4 WVÎB(!F\8-2^)6W 28o*7h&!"62Hq: %P%*"T;#*-)2(8**5#,%2-4%:2-%4 %*,2&+%'/8#1#4--((') /5":-++9&0.#&%)%%)".&9!.)';$'#,1)-0*'&!0&4)--(0.)*,084/;3.+00,"1*A),"T$F'(y»/-;l+&B?..3;0,% /$-(5(2'*'-$P&-";.#Q*.5" ?&)M."$;<%(D (t-2-P‡'*™%2¡M#H²#'7ªOÉ.!L¯)#-¹;3=Á=.F¾/'LÆ'3/Ï7"+¿J.;Õ(('½1">Ø/3$Å&18Ê2-- „)+½w)ÂW@ÛW1:Æ„*¿n.:òz)>·Í'$“³%.±œ-<ß+ ‰Æ )’¯!™¡+/¿ËC›Ø;¥ÒC%œ¾; bÛP49Øj%EïH$dë= Dçj%2æV$/ßK""ë‰ Ñv) ßu8/ðY!Îœ%#Ǩ##´”%Ɖ"5ªœ=µÁDÔ•!HlÂ*lá}Õ+º/$]ï%1yÝ00CÚ?:DñV94ãR(Kúc'?ñ?-#Øv %ÖŸ-"Ør/%Þd)ã‡+6âœ''â“;'ÌÚJ"ÈÑTsÎw‹ÒI¯²#¶Ðp•Æ -¹Üx#׋% ÐžiÓ–fҀ˟Dȵ2ѽ3QÁÆÔÚ4ÒÒ&S·¾@óäJ–Ña3›ÔD<ÇÔ@B³×{4„ïisÑt#¤åw'…ॠ}çr&“ÙP#nìk>+×k44×G<,É)95Ä8+5½J?¯8=.ó„,(Œ¿MHÓÉ50ø¤)2ɽ$6ª³A=ÃÍw<êÉ(bÜÞÅ—ð×¼âééÔàííõÿøóõðûñêôòóòðííïððïñëóèöêñëëñìèùôûóíÙ÷êðòëÛìÈòÈÝÝÏÃ/«ØÇ5¥È´ŸáÅM8¼N9°+=’VG) *$….a]HF[0L‚G\0u16$e1Y,F€,,r.0{'%(w&$.U(''. 1-H",9G// :#,1@),*A/++v,3%M(2'V.5*b/.0P/5--0-$F0&,P-,*%,'#./*-I36,A71JA"(65;C%B3'(8#\<8%dJ%G+ˆ#L&v MDE'[&i6]4}+c%J*[:ao+gncvSi_€YZ_‚9YQphQ9RbERiNWcYY‚MY/iE`CTn[Y_l-(*X"+,b-)(^*'.c,1W&1¡S)tª-'„³Ail&*;;.4)D((&M3,Q& q%P6(,Q'$$E*(I'11N' 8*" &rM/3* 'C‰X+/”r+AØ!5Iº)f•4"eÏ'{¸ J #qÓ1%5Ä0%Œå0 šÃ'žÒ=7gè72ÿD …Ú"nòH#^îDWñ.vìg=ð+ÖB9>ÇS)Þg+ùŠ'áŒ'á+å™%9Ń"-Á~èÃ* ¹.½-ҺЫ­.$¼—*#´Ú'EÙS(ß+jË9YÞS,àT;ég#0Ü-Ûíp"ÙI,Û(Ð¥*2иô‘2Æ“Àœ+ųPʼ&sÝ1’Å'"²–'¶ã+!x÷%/[Ø1cÃ-5KÛN/3Í9 Zè5`ôY';Üx'Ðp,)Ð^΀#"·›$ ÝŽ.ÎÊIÇÜT¿Ô—ßÕW6©ÙA4ÈÚN5¦¸”ÑÞœ£ÍhÌР°ÒŠª¾†=–Íx^®®zÌÍßÁRÞÏ;áÉ&`Á¹,X×Ú%T­Ìk «ÔRÏ¿BEÃÑB…ßq Ÿì€~ãg;wÞB0ß”*]óh#qÎd$9å@+ÒP7Ï-:DÍB7"Ì/;#¬MD0ÍK0&Æ‹]§¨:!½™?1áB. ÚL?­µx]¹Ç„­ÎàÛ’âÖ¹ÀúÜÿäàñðñìèôîòðîíîðñòíðòòñïïïïïîííîïïíïêëðééúìôïèãîóÔìÔõº¿ÚÉ¢êÐî¨Ïμ3ÓËß®½ÐˆH/ÃL{*I©ONˆNL`:C9G/C'><'.3aK%P)2%j"IF'C1~:6s$$f !~+X/B*%$\'C#W/'$#(x#(b!f4$E8"F.&-=%4,A=@')#L7')2+1:-.'?% 59!0?#'3A(&5#)V0.$) 4.& 73.D'@*+.# T'86((#=$)+L42H]Q]qbWg89%9#%"232%2%!%9*.#'()A*+)'7:2 "01)*>?!4**E0#0<!7+86B/E81c.|aKx_bFZ^]2oFg1kQ`8QPF[„3ss5|-q&“0p-|>Š2hDW"gJ‰+lQ[1f<€"o4Z,HKkTZHg=zPs]d]VPa;lSWPa0TW3c4€"d:ZAWGEW`R.cp1{?{#m)u4‹{7y=Œ<ˆ#~-n"v+h9g5ŽJBEk”/s6I6k.@>eCoFn:ulfjЦWcƶ{QÄhZÁ§^u¿°KIĸy1ȳp7ѱ€Qͽ•A®¯TË«—]¯±]‚™”>Š´³h­­P¦¨¸Zw̯:{Ó¼PqÉ®-e«¯rT¹¨ZMÛÃ>ZÑ¿\`ÃÇ€>ÏÉGÉσEÂÑ/EE³q^e²AScª+FH·PWWÆXD:¬O;1æGGÛh,"ØS6"ÌS?+©›;<™B)˜‹:9ÀPXU˜“L_áÉTR¸Ò@aèæz"çÏгåáõþù÷çðúøõàöóððòòñïîðòòñïïðïïîîîîïïëïëëðëèòéíìòñâÉ©çåàŒ­Õô‹ÛßߢîÈЊêåÎp¬Ñ¿)0å22Z¹“;(Ï}80òb$Üa-‚›) Un9VŽ"€Ç&X“ 9“&&Tb&',¸.,*ž&"(k*.…&l&$i!+“3,w70o#O$&?›;k$4%n%$M0/Z.9+D&/.4+-!-(/1)6%7.+34,'((%4)-')0/?1V $-/+*6/4-'Q$?"9[&'@!+Y""P!%#X7')A.&-YY5/^c!/~S%$—H<^°*%>Äž¸4¼Å;Å7–¨3œ³;4VÑQ:`ÁJ(`¸$#©²0#qæMOLé,+HØ`Û'$GÍ_%HÙF)Lá51$ås5/½n#&ÞX#5Ðm:!Ï…,&Ó‡$-ßn%"»´¬µ Ìw *ßj ¸š ¥£("¬%‚)#“¨**¨½!¶Ç-`ÌE(&Õn>ÄQè94êa((âw1/åv4á˜á˜%«ˆÅ`Ì›$¼œ* Ó¨'#å²– (¿ =Å«/•Ð>rÎœ·,"Ì¡9 •Ð!oê9[×<%Xôv#=ð[ JîQ&eä#01Üe%Í“ -4Ù„àzÔžèŸ)%ä¥1ZÎì\RÓÐfµÕ{»ÁvÊÃ3)¶¶¯¼q#³Ì¤ -²ÒnbÓ‘¢Ø{Ò}žÈNÔÆgä±cãÔ EÖµ3Aðâ-GÚÍA@°Êj§Õq -ª×^K¿Å@.ž¹…jú}&hÖŽ"uä~ISê$Kçˆ%>öo_΋?îÂ-0ÇG"0°!S8ÒO+ËH9'Æ]5(Þ#¡£1,²Š./Å{IËÇ63£Â`H”ÉchÖÎf¥ÑÕÛ†ôç¹ÁìèÖåèðèÞï÷ôðíîòôòîîðòòðïïðïïððððïïæìêèíîééôîåêôïéîíßßÒÉxáçêÛÜðÕ¬óÙã‘ÔÖØ…2¥„OVΔ;rÕ˜XÃqU.™XC?,RDE/)X]0UKKWJ3(p7'MJEd@%]0{&%q3 q'3X((!i(in%0i!!*X $OMv&1,u)X2+(t($z %y5#T<#22)$<'/*+7)'>;,8:;/"uC˜4xS•3…=›5}Y¡,‚^ªO‡L¿1u=Ä7u:¾uh§:|@£?—V¦FvM¥cf[šcqVŠ,P+j#]\bX|xWdˆESPfL5LtgH~jM[v†0‰OŒ6”/Ž7š2œ¯$¢?1yÆ\›@«wN‹?pB{ nVÊ?t5ÂXcd§ta_—Zvj’O{_‡dMc¥oqbaFYY”m0sBp1WN=hrP^Y`O\`er,u7v:‘Hˆ)–>~‡&˜/|4}~K€,xQv&YAugP°%ha4P;i5[n3zYNY¢¸IzÅÃ|A¢¡€KÀ¯m[ÑÁ]fÄ®ŽAÀ³TRݱkO¹›Q5¥¼y1½·~s²¾‰CÊ£R¹ªWŸºK–¼š;ŽÆ¶`€ÊÈduĸ_@¥»k]±³q2ªºh{É®JkƸ‰-’ØqT£§ƒU¦ÆdSPÜL…ç‡<\åzPa¶kV8«—EY¿9KRÇ#BØd@ÒR%!Û`- àxG2ƒ‚1›¦3În3+Æ°/Z¤ÖPWÀÑ_eãÏ8nÇöÅXÝò¾¿ñîÅÞéîÙËêÿðëæèïóóñïðññðïðñïïðññðïïåëéåêðíåçíïèëæÞðåã×âÏiµÕÞ˜ëïÖ.ÚáÝ;½ã½aØy GÒa,|ÙŒ)âe#4â?Íj+³…"$­•,Ñ¡%M¡ˆ»Z• 6V¼(¸$=¾&#M­»@! %¦!1 Â%,"›@'(ª6"8V(&8B+)"tB'› ,»40C%–9))¥)2(”F#(cW3"93*"6(22+#*83%!+.++LP+(09/,Z(+B*#(8!|8:l),-/$i5'*~3!7™i2+`™$Y‡$Sc3)66)7=)&R%)@L "„25”)CŒ#4}!$4:*0s6$#Ž74€q!$ƒx9±U,ÈZ1)šÓ?“®U"ÆŠ. ¥º.¤´B“*R Ï4>bé/;lÔ,|µ!1¤Ò9Té,TÜ;6oÞ:"Tè;2_É9>Sé1måO3(Ü…9ÄR72ñ.<ëw$Ûz>5Þ_#5Ñ0ÇšÞÐX#'È”.*ʪ$ˆ½F-½’('¥´/?º¬@Ÿ¹#¢Ò 3%Á9)<ä)#WÛ!2;Ð? /üWùb(áO,ï|;àr'àQ+èŽÙ­#Ô&ò‚ ¸ª$â¨3,w–3̾/bä0%„Ý('¸'4§×,%xÒYñ,$WßB9æY$BÛ9!SÒ*#;ß`! ×y'ш!ì8!ÏŽ!Ô-é\-Õ#:ÕÛ8 ÕÖn¦×]7¹Ì[NÒÞ+#ÕÂU­Ïe'‹Ðf§±¤§×š¬àŽ)èÔt ˜Ó¸Vç¼sÀºf»Ÿ)q¸Ô.]¿±X;¦¶>*ÓÑq.ºád¶Õ>IÏÊH1ž·eU˜Ï8•×‚”Ñ‹>Ù¢/cØq2‚Ï>.Ü–Dݬ,=Þh;<Ö%I5Á0?7¹GFäE<6¾+2ŠzKIÏ•A5ÕfEB‘Ì8U­ØbjÍÅS§ÜÓÜ|þάòßÛÿôðáéíçïêòíèèíòôôïðñðïïðñððððððððïñïêêñïåìòûçèðßæáíßáï×àÝÉáß›ê³äÕÎÔš¤Ó¦]Uü[a<½Ê`6§­N8Ç*S|a2‰=\:TM+,:BdC4c>AC?+De**)u>G%_,Q+i43 g $h)r)@*^7m+*`2&\!'1f4:c*<X .7h+8 N(/l6"2!,.60$)1$'#-%5&13^"8-V(+*LC#L'@$3!"K)/@CF]QQ_B5'7,&#3';V4a1&h.31>\/$6)F_/*K,0 W*I@"A,F<59/[*N!ƒ4w@epkch¦Ÿu3£¹ucŽ³b[ˆ•i‰~^zQ€„Q´…O³k^ž³]mI·BtFÑu}LÊplfµ>€P¹Q•5®-›OÁ€cC¹XhM·Pl%­-”Lž/v;x`~J¨H’F¯dV’wkZ˜\^aw6kX‘;_5ŒƒUV€hdoŠyQi§N}„‚ep~w_c€WoV±>’@µ8{)¼,‚[Â1y'“'Ž§I!³Nj=¥di=¬8i5³O6¶<ŒTwiZƒaf_„VmQ,gfƒXS^‰KfpƒPmjL{/ƒG^^m^]qdqJg…NgBqs}-}b8T¢5v6lGˆ,n7Ž=wvFo"sCL<[Bw‰ o1wNd&pGšIw,{/SUq¹µpz»kq®¶\UÔ¼TZµ¸RTÑ¿bh¼pO¤ÓYEÍÊ”=¯Ñƒ:ÑÊ•CǶoH¹ÅÊI“¼¤I¢¹»T¨Ç¯HnÛÄkmŧMc·¶fp׺vXƽp]ã§QoÚÏTPÞªn>©ÄŽ:Á¼Teͼ<Òæ8—ÓLWÕ3U¼JCæ“IX¯#Ô:ßV+aÓQ#"¿Š$ʉ$8Õ‡ Ä«B#à}&ºl.4Þu,¢¥'+Ë«)Cº²/ פ "•¥)¾©%¼¸.7zêO<ÏNGö1}Ñ+0'êS.Ón1Ód)ØŸ à}=׈! åc%Ñž¼«.Á“åˆ* ®¥("·´'Ì{?ƒÎ!F„Ü£§ͨG*V‘&Ey¿6>×,Xìh/5ÙO(7ÄF9a÷1'ãŽ-Õˆ3ÔbÓ†@ºt9ó¬Å-¿Ì?JÂÝQ°ßg&±a$ÝÑLRßÀq‚Ñw¬É´Çt’楊̒ v¿kŸ½‡RÁÞF«¯j×Å"wçËCÙÂ2JÈÐ)YÑÆP*°×t Ñôb=ȹ5XƯk*xëhCræ‹“Î|$LÄŠbâ'iÓg?]Û“-8ÀÌ;-á”,3èjEAà˜S÷3E2çZV-æsF(™Œ'CÑ„5ëw1š¡=9£ 6QŒÍ:SÄÊ7oÝÏ“®êÊ®’Ùð¥ÔìëØÔòýåêïòòñññðññïîîðòòðíëëíðòäáìöðìíèëÍêâØïâàùìåíÜàé‘èË´–§ÄÇ—GÀ´QTÔ”0=¿JÙ”d:¼£Z'©*J&¼]55q'c—CI&H; Z*>$'P@-]+O95b / I%=2S'@+9*S2;(RE‹KU-hh“̃TeÂYv°poª³xbŠº‚}v—‚y¾Ž}k®™~u¢nhœrolŸ{xj¥xpLˆxq¼n…U°‚e½„’L¹zMŸ“Šd°ˆ{T¼•˜P¦‰a2–‹t^Ÿ„ob©u‚M|uvŒ©mbµ¸}J°u‘Z‘bUs¤wvƒx«ljµji|eˆU\uŒhfw¶x_s f•H¼†‚.£JTªgv9ÁT¤K·„ŠFÃ…„B»qro›q{OĨ‹Q¬>ŽK±IUYœg^mŸ€k[£X‡a¤hal¦jZp–usBŸ›7U·Vh˜W{”gieptAd€¸?^E¤–Kš)™D›#‚1Î9qE¨_®Arr¸Qf1À5.¬2™]¥UdB§8qM£Œf\Œb°´xp³¦—[ųy[ÉÅMf³Î^xÓ•X¨â€@Ç°<Å¿¢-誊H²¼¥BªºtTÑÑS£È¹8’©ÎH®±´5¢µÇCŽØÉ2‹»ÉB‚âàdnùg@äßE_ÀÉaiØÓy>¢ÌaWžÚweÉÀhbÌä„?ŸºI@¥ômHh» D;Ó«B.á¬-f®%J9ÜV1.à8=ÙPJÝi*¯Š1&ÉzE.ÎSH'Õq$+ –A¡Ç7sÛÁ,pæßKDÚîyÚòÍðêÌÄâîÐÛéòóñðññññïîîðóóðìêêìðóËÉÞòïéìêÔ¶ìîÎÖÒàÅ6ÃÔÕ'ÈâÕOØØ`.RÏ«BMä•;âœk׶%*ĢʅÖ<:¯REÜhΈ *æz#{˜."\²&£}} ?M¶!AÅ+A£ 3É(»(W¿5Q¦(§-.µ; ¾"3;¹(%¯4(#‘@(œ9)K/(z%-=³61†E!%]=(]R%wC&Yo0pj%%X\/[h0/9h.&1‰/#;j$.Tƒ0(3—(ª+¬:.•D%'–9 (Œ2).Ž-!5I’&@…!b^.S‰+!Pˆ#>z020¥.‡82œ&.-¡%#2©"*,»I80«T!¿68±_!=›U!#¡F#,ÆfA2ÈÞa0¢æP8˹60ÃÇwWÂÖu£êFYÂÔ-në‡/‚Üu,¢ü=6©á”§Î¡jî£%‡Ò‘Sç¤nñ“&X횤ȿ'*ê£1'߬%?æœ+;Ò–%Ö™5¾.&â’J ®Ç@+·º*!çw-$Ñ’,ȵ%;¼À!>ÍŸ?· ¾Å#@«¬3½Î04ë‰-Cð@+rà&*wÒb<Ã]8án#Sðx$1´…!Ó¯"<èD1<Ï{1%â­3Õµ"ôz)(Ó±H(Ö¬-Û¿&Ö¹'q½"±Ê#®˜·³ ¦ÜE}ö*"‡Ô2PØKTå?{ë3pÕZ7%ÞŒ"ù‰%/ð:,(ñ‘)ô^!ÙŠ/)ܶHBè¹(CÑàr'ÕÞY8ÄÎbs¯°5!êÃMñÅu ÞÊz?ÍÍ«Ãg¿à‚'Óän![Ú¦-^͹)”àÓ—Ó½'nÔÚ(?ÛÌ5bÙº eÏá`,ÕÏoUÔÙ6DËÊ>#¸ÌBµÃƒ8¯Ñ‰<£á¡7rÚ¤ ‰ÕpMåbFX¤¢-BÈŸ>I´“WÇ:C,­/U-¼EI/à5IÁ`E"”IA$Ùi56ÕLH#ª¢>EÏÂQH²¿WŒÅÊn­ÏÞ¹»ßðÀ²Õèÿöîäýàôïøðîõîóðóíóðìøðç÷éíøëí÷ÝïôíîïèãâóäèÝ÷Ï©÷³Ó’ÔÁã¤ÞØÌ´½°nrÝÄS]c´U`W•HcRË\»Tfœ0\$sT&[+V,C4bABEP)hGAL6QFC#/H5T%6I%^@C)b0W O`7[_jL"^3c"MT!j+y>T<1G,Ic?(o/)3@4R$]4f?[.D!c)>K!..B5BE1'.4.0.3&!@?'<+\"8/J 8#\$S*)6!Q%0$;+2 B&:!V.6/[01/?#5#6 +'B3O;/E#*#=/%9$; 0%G9*HVWKI/B& Oa HC T%[\h#T&b,E*dFWs:ECx3[7‰R™§|–ž¤œ˜¶r~œ¯°…¨µ„‡¨p›¯§‰›‡„…‘xp_©‚…°—vƒ„­¿•o¾qˆ‚§v‘sŽ„Š”v‰`«…ƒ€ªk~5„~—^‹•{h‘p{c¦‹o@šjx< _9´‰|F¡•ƒoš’„X¢kl¼‡€V§|eœ¶{|‚ˆˆI¦›}tŒ£uršªaQxla©C‰_µ1žI¶{j›V‚Bvk.»i•!•V—@Ÿsp7´’Š8©€P«swKŸƒ|b‚xk­< 1£v…W}_~]tu\—celO‹5pLhI}‚nN6ifkvJ“G‹8LÂJ–A¥5›^£$‘?–;nu,|NœQˆ"‹I DuXš#lIw2zH¿KhZ :ytXmÊ™;TdzšCЩŒaÒ¶k\¼¥FL¿ÇQJǬg(µ¸I4Ü»&ɹ”"¹´},Ó¬q?~å—R‡Ã¶0«Ê“I§½²S°ªGhŠ·%Çž6hÛ³\|áÃQpÀÎVSÀ×Q2ãÅ{IÊă+ÞÒmiÍ„A­§w>»ÕbYÃÍ`@áŸ>yÝÀdAÌ¥BeÞ>LHè+A8²LOÊ7/!Êy6΄BÑw@É=: ²‡E5®ª=º•9’ÐÑ4dÛÛrXòñ}óâöéúêÎÀðôöìô÷èôêîêôòî÷ìòðæëééõéüâàíðïáÅÞÙß¾á抺ȚÉæš®ìhVÒÔm%Ï?"HÑTÊ3&3ô@2#Ä#è;$2éV5¹S1°p"'b@5 ª¤&n‰k:8·j "O¾3 K·AÄ"y’Y¹7¼++0¥,"ª33Ä0&Á0#M›++¾'´'–'$´&¯-6µ0&A³!1*yL)1W:,VFi(Nj'"C> 0?J&-N“*-+ˆ"+=ª+AÎÊW'¸ÓR,ÐÍJ*›æz$vÖsšØ^ÜÔKP½y”ÝŽ;iÃy”Ù…hȪ!‰ß¢$Š«s0ØÀ,ÒǼ½>ߎ-&áÅ7#ãÉ:+Ñž5#ÎÄ!+Ä¥:#Ù‹$.è’N)Ú¥EÈË;*®ŸEã·:¿à6.´»@¬°'R‡ë;4-À-2Sí= zØ\ Aåw&'Òa'"ÃJ/'æ&àžØ~,>Ý`<,Ä CF¬¤5(äz"Åœ-«¨«Ÿ4%Õœ8µ×"xÈ3¬ÄFÌš::ƒÃ‰ß&1r£%;]ÿ?(7Ú,Yÿ&c»6/#Õo7Ëf0ÔB'-çd0-Õw6É„$èa*<ÑÔ4׺FÔÎw¹ÉoPÏÇX:ÁÓÔäv©Æy£¸k#ŸÒ”¦Én­Ît¼Ëy LÏ¿"\Þ¾!bÊÈ(ѹ)ÒÕ4H¼Þ.ZßÑ\!¯Ö\5¤×aK­±8FÂÀ‚3µÒ+lä–9À­t1…¿–0­Án5£Ìp4tǦ>`ÈÑTEÒ¦=9³“M;ä§I3Øk:.Ä+GJÂb6,¹‚3/³i7>»Q\-ÈdD&ª¨4Q¡ÕG4°³e»²K‘ê½£¬æÊÔ™êõâìôòæå÷ñæëí÷çðîòçàñïüòòôÞæÿêðØìÿåÞïìÕ¿ñáß À±É‰Òª¥†Ó¼‰:ƒÊ”T=Ï]g8Û>FI»qB8Ã+b»—Z°#^&kj@ K#W'M8\<#A¼\_V>?#Z7871=W0VM%]g[Jq(?RH`"O%W SHW`!H tEY 3'O<e acTR3 H82b%N+S$G7X :&=#M3"GS+J%;F%:6C%"7%0.+A$_+?">Q0-RCx ,c ;T#,/L*6W>h=$B4(8B:+ H:>6C83=.-=*^P%??jP!`HU<]:"NƒD(T1Os15%aII/‰@q.…6 ‡—¬”o•—’mœ³™Œ®°l——¡€¦–¨œ£•‘Œ…­‘}”§Œ—~‹mž“q—¯†­{|¥©h_¥»†~œÂ“s™§sw¢vw^u”t¾¡‰| oƒR˜Ž—{‰‚uG˜¨ƒ`˜jgq¸œU‡†‹G˜€6Ÿxb‰•y{†‹m¥–ŸQg’uio“vhhpTyŸfu<¬~‰3·v:¦|‰\³™q(½Šl4° ˆ5¡””Bª{ƒ–:¿Š‡3±}O £uWxˆ†H¦bK”—oi¡£yp¤m`_„mS‚Z°_kˆ°urnrb]’°_lK•NxgÆe„9¶L”F¶;{J´G›F«lP­L‰:°Jg2©tz<³SŒ@³]|B¤g[[¨q‹Y­uÃÆk]½È“WÆʼnE™¼y`´UjÈžW*º½l'¦»‘C¬¶U3²ÌC’ÈbNÉÄ=VȺ£eœÁ¼6‹¸œ'ѦL†ä„Zcä»^X²¡8}¾µ?Tɳ„`ºPHÝ×Itç¹rBϹmn‹ÖrBß­c3ĈYÄÌh>¦¯qTƒ¸•HvÐÅEª±?NÕŸC,ÑbR4ÜK1,ÒC!¼['¾›.Æb< ¥ZOσ#E‰QV¥ÕX[ɉWÖÅXXØÐ5[ðÞ¦ƒÞÿøôóâÏÀæèÃÐéëíùöñÛÓìõåçïëËÑòâÓÏèïÎÆåøË”çõz0Þà‹¿÷‰&¨Í‹·»åI$¼R+¸Œ$Ð’1ÝsM‰$ÈŠ ‰ œJÎCÃt¨$XÖ)B·8* $2Å8à.; Ç%Î"<Ü)%»/7 ×-%"£8"ÉI% *2¢#'šC ¤f‰!E'lr Yb'Oe//X`)%§)"ˆ/$(-T›#)&¹"-†",'­-+$™24y"&’&8'ŒO$"W€+"M¢(%^e)i–.\+:ªN‡!%%Í%!®H­1/HÏ6-EÆ4!µU*¶>Y!(³`0ç>.Iä¿,9ÄÍG/¶ÝWDů"IÝÆg>ݶaEÖßHMÙË|,dÕyI‚Ó„¤ÂB•¤~+€Ã£¼“m¼—c®©wÌ•"mÅ‘YØÇ,½È/%ºÃ3Ü£'<ïÏGÚË<-Û¿+%µÏ5C¬ßD.Ò´Cæµ9=Ø¥D5³×D¦ãR4ÄÓC³£ +°Ï<3«ÑX$µì>/̲$NÒ¦OÞwÔ§2ê‡ê-2¾ŠÓ­5æ¿%ã¶5íP7¡ OÍ°&&à²BÁ¥D.´±M§¯°·&vª)Ÿ¶7<¶¨1ºË'!‚Ïmæ3%p»8"Jä_Eê<[ç[¼\)1Ô„'ø‹20Ü?43Ý…"ßu6Ûs+V¨Ï]jÓÞiÙâA4Þ¶23ÊÐ5?˜ÄZÂÞc ÀÜU·ÍŒªÜe¤×oM³Á{©Ý¬)¶Ñ­?ÂÂĄ̀ *à°8[ÆÎHØÃV¶Ò`;æÒ`9³Ú.HÓ»+(ÊÛ`-²ªt/­Í9CĹo0ÅÐj"ˆÚwŸ¤oSפ':Ë£$>Îœ4hͬH)é‹1.ÜH)6Ø867´m6IܘE,ÒaW:ç[M(¶˜7=©/,«°,i²¼ZpÙ¡o½ÅÅ—²óÝ ‘éíÞåêÙíîßë÷ýòúööèàòòí÷úùåæýòøòìëíêáÙßöí½Ã¯±›È°‡F®¨wE9½©LkÊWZL­XGYÞqFW|,H;¹_10i2A$%V83HC4-GJ.C9=H?OBAE\'b s2LZ_#EEr\#XAHj>a+z-G,q G2fN aws"a je -j#c2d"]1HN%$S(uF)`$62V)<(PM#1E!M+A(Pk0-%3>-&L3,72U 9*+RRg g+Y&k?]xOi E‚5Aƒ*A#{+S%€=JŽP¤wyƒ˜–y²•±Ì¬‡¹ ¦¨“¿¡Ž…·…†–¥–t³žh‡®‹[“¯–” Ÿˆƒr³©†ˆ¥]r‡ªª„’¨§k¢ €y›P|²„†šƒ„_‘–ŽŠ„±…†™}|Š¥†d…–¦‚‚o]’„…e’sƒvƒ‰qdv^‰Ÿh”¦´zu|{€`owˆy¡ˆ˜o“S’€_–f~©a^ˆŒu‰K§€U²ˆq?¢¤~T§‹dS©€Ž]³j‡}Ÿjm_p§|N¨ ri£tkW–zPy¨’ca’˜/gm­qzss\~Ÿxqip™TšR«#=·6‘b¯?˜G¦…;µ.†MÌd‰RÅcGžOq<9iNÄWƒ@¶Œ;¸LlO>‡u{]µÔSvÇ®vYǸ`a®®2uª›Ir²¶[UË«k@ǵ=LʧzJÒÏcM¾µVyÏÆk<Áºœ.µÂ@°¸°.²À HŽÀ¾;ŠÌ¹7‚´ŸPn½×aiÓÃXwÇ°czÈÁS@Ò³_EËÀdBÉ»GeÕ©€iÒÁ^>ªÉtMȽ`=–á£Ymäž)êŽ0•.14ÓJUXÎ?5VÄ%D@å8@¥vJ@ÞE5GÔMAEÂw=9™•2g§®JŸÒŸR`¤é4JÖÒzì鸰õìÜÅíäÚØòöáñìðíûüöúêîëêôìêøèìïçæñìÕÆþø¢IÜ×&Çå‘—¬[&kÊ_)xä]TÖ)3b½ŽLà"%CÛ5CæY%AÐ5-4$gU*ž`8My*J\=–#š\7e$I®[É' {® 2… 9º"\¶1¶1-¥'(Ï)+8˜(Œ-” 7Å1#´'* «2&7¬!%0ž$²P/)¨zŽN$'†7 'r`7 \T(%^^"+:’,#Á*>².&OZ1'œ#.‰,*2š0¹)š29£5*2Ÿ,!%tG'C‰14Q&"’|--Z„`¨$He(*Ê, ¸&º?­# ±).®4*ˆ%»;#¨:,ÕKC@önQ|Ô·5X¹½/KØÍHˆäñK6Ãç8CâÚ*[ÝÂ=µ×„¡º}>¯ºA.ÜÄi/ÝÖƒ#¸ê†N¨ßy(´ÙšÈ“ŸÙ—šÁg*ƒæ¾O;§¿+8½œdܳTPÅÆHXÇÇH[Öª"Kμ")¿Û)ÕÔ3ÚSƾ:Jº±9,·Í'G¼ã>(«»'1ÂÜE¨Ã=šÞ Gî˜Vïs{ßxWäž+Fé£2'Ä™"&â)Ø0@ׇ!,éy(¯°@Æž'ò¬'?é¥[?ËŸ@/È£*(ÚR&¿Æ&ŒÔ-²² MƤ:,ÉŽß'&|ÈkÕ:6Î5.pò '†à.&J××yþ](6òU*ñd&ëˆ,'Ö\67ÑÆ6\Ó¼5ÔãJÁë<2ÃÕOãÊm@¾Ð` -¬å“˜Ó\ Œâ‰aÒ‚sêv2¦Íž"‹Ï½ Tݸ ›Ú½vÐÎeÒÖ7;ËäEÜÆ;)¦ÊdQ¾âa ›¾13ÔㆤÍu$Bç‚Lнs)—Ñ‚¶ë{ œÜ&|Æ› NÕ³Tʺ>RÉ¡:*àÂ&-ò¤2,Ü™>"ß±±´*(­’'3ÍC ¬®?§¬=ªägfɾN,ÀÁg¡ÐÑW¦áÞµëæÅÅíÜéÛáçó÷éïÛæêöñêõîôáíÿåáüéãæõùèÜäïÝ„ÎÀ·Š¼Õ²„ʼh=Œ¸˜*NŽ1>×p'AÁ3QYÊ-HBë`_²W]‹_JÁ,DE!0%R<-B':8;%?F+A-PL5Q.=>OYpV8W+K | 7'\r!]4A:W$8+7+$@1)37%0HH?_D%UU$_"$0k -M$W@g8dH)^B\>m@J)4N9$S(B EFK+/$M4$§KŠ ’EµÍ„ŠÃ¤x‘žƒ˜©À Å¦Ÿ›Š¸ŽuŒÂˆV€¡«a™‘³N¬¡€«†„‘—¼Š™¯l¤¾uŠ©¯h_¦ÅŽn“¯{\­¸n_™Ã°m«Á€j¹Ÿ‚k­¼Žf©ÀœŒ‡½ˆv§Àˆ|Šw‚šx}¢„zŸŠ-±tl§¢p„ˆ–…ž™qpm¦l\~»§Ž~€dfªœ·{a¯ˆ†F¯‰ˆIÄyŒJ¤Ž„tž§|\«_]’‹ƒ8±¡7‡Œ}/¡f€8¸µ|hˆ©C’2““€g›“V+¬—ib€u*Ÿ—iU\ÎsTj°y\›jmš¦^Whµk{^®Z…N¿yqH¿V‰_Ç~RªOr=À“‡=¥qw4“q™SÃe„1°h”NªzŒX—Wc+¨š¬àbx®¡mNÀ¹œxƤXh ºWt´«UDĵ\]²¾uE¸ÆuYÀ½~_¤œGº£ZTÒ®VN¬Â“\’’–9–ĉPµÆ³cnØ´ShÀ½X€©¬MVÊ°yQµ­rHÉÇ@\ίjAº¡IN`sUÒ·]B¾Éž3ÇËvg×ÖdFÖÄŽbt×ÂOsÕ°a@ª†O)²“L1×¥S5ÆnJUÒ•BHž˜P@ˆ‚EQ§rFB”‹+_¼¶VV¨\VÙÙ]VÔÝT\ºÌGíã[hêòÇÄßóÖ·ëÿÖâùéËãîíÔÊêùáÈèÿüîàðÕãïÏÅáñàzÕï±0çß»H±ÚU'­êŠ:|³(ISÝ©,ÊI0ë*^Æ!*!³i ã^!4á ' „_!r{ ¨Š&µsJ»&h‘.Q‚"qy$%;».Ü3%P¸&+¨..‹.JÉ pÑ*Ã5&Û,&£)"8™2,&“0(Å&6Ø-.Æ8)4‰’*)!’1+2D0+|….Mc`5x€&!j›™((*²+!5¸,;›:qÍ".{(È!%/½0"!ÁM$<¹86É?*/°L&+’#Qš9¢l$Jwl¡(&@±W¨#¿76¼ $ZÐF¡$#Æ8+ÈQ'0×8 *ÌSžL$þG9AäÏk×½T%ÔÅ;bÞ¿/còÊg-áÍTCÕÆ@MÙÔ‘0Ä·–@ÖÄtHÌÔ:6¯à• Áæ€+Íϧ3Ò¹‹[»¥TóvU}Æ$²Ô·Þº=0ÕÃ/GקLß»àº*$ʺ\ÉÀ7DÒ»HѼíÊЭF½Î5G¬ÒHÚÅ3µïO,¨áQ<»ì5/­×ƒ9<îÅ!AÕ­"cÖ„gïÂ5áÏ(8ß»7à·&?ÚÇ&¦Æ#åÇ'+ÙÅ#®ÃH&¿¾7؃±¹?$¿³HV£¶!ÒÜPtá/¤Â%#¨º0µÕ"„æ:(Oæ2ráv5ÝY&NÚ‡^Û>%LÝ~)؇ãˆöI/6ͦ%ÒŽ% ¬s;ˤ0TÒ·)k¹ÀƒZÜÊ^HËÖ/0Þ¹¡Íx>¥ÍoµÍb0çÛy怱äf½»‚1£Ü§-PÒº\âÁšØ·PÆ¿?ÉÉ>JÚ¸)%­ÙkNÞÑU`ÙÉrδ:!µÙk Ón,Áá[*Òµ—9ÙЂ²Ë”TÇɈ!lÖ¹$AÎÐ(WØ03:G7Oa)L/K(:,K$GN8(ZI{YP)N;T2k>p-d,V>f"fIsh`4 J(/W%>i)A#sg+m#W l%€,3‡ >Q).)@L3<7=-^")7@6A6G4A>,M\gVj:$i+<9GPqw%2 ^bx!_w^(C(h+p-],cLFE;hXD%Z1NfSECN+cM`)M+TG*gbzhia2r'd'pP(}Kr+Y4w$LtE2#e,gBqD»¡thŒ¼‡È™™ ¶©w˜¯²ŸwΑ–t¤¨P²—ƒŸ¸Îo¨±±q®¯¢‹žž¢yà¨mϲ§|̦Âu¶¡’If±­i•»ª„y··vŽ£œ}‰©Å†s®³uŽž»Žm}u§¢ƒa¶³t€­²eŠ¶Ÿ~…‡žuv˜•|r’§x«§o‚–  `Š®a}‰®o’˜¡Ÿ‚‘½frp°”ƒx—Žb‹À…pªaˆ|‘yr£„~\›`g±xv²“`\²‘ƒyĘsf˜‹YR†˜€|¶”{?É£{p¦™}Nœ©`l¡›ZaƒejT±mpkµVp{†K‰f·cka¦c„G·}‘]Éh…Aº†g3µˆcÇoÁm}?Дf.¾E‡OɯoT¹Kb¥”UQ»{‚egW¢„kfµ“dTÒžZMǸUj²£ApÁ¨Rlħf=»¢JM»ËZz¼ŸaV©£%sÁ¹ih¼¢¯Es¥™;°¼ž@·­¤G—Ù²:bµ–@k³»m‚»ž;,³»hmÚÅQ…¦Ÿ[VݽtgÙ´YIÇɉEÁ¡4<Ä´‹Nä¸`B\²ÈX ÐCµ·ƒ4œàjFŠÏœ?X¿¥\RÄœoA²,F¤‘_RÃm>R¿c9A‘°\J¹·:>¨ð>ŠÂ³>gÎÖ…|éÞ¹£çîÃÏùöåÆçêëðõìèóðñÊËëâʽöåíôäßÜÉ÷áÔÉïëÒ¦æñàêéÓHØÁf88¼{JAÔv.‰ÁRÉÚ,(9È?QhÀ$#FÊN",ÞhC¼)(" 2"%·x$,€‡.#mk)*¥© &?^%N…+1U@'(Cˆ"0³$?©0I+%…"A£/&l/¨(/%£++ˆ'-+u/('‡0(”"1)£+&¨+Ç 13ÇL/¶/ †4"/iX&pQ=¶R+Nd%/TV)+R^!I›2"Ÿ&3Š4'O…!/¶!.31É07»1+Ž' ±F#º!zo(S™8l„'•t#.X¶4&s½%-O„ ,Á:, 5(Â)§Ý€BÃÔeNÉß-ÉÁm Ìáo)¹Ô‡?ßÍP$s检Ԉ1ävÀ¸'HÄÞ1&áÈ/3Ђ-8ÒÏ,OÁ²O.¢µH5Ñ°V ¡æ0#Å´7$Û©-"ÒÐ5D°Ÿ@LµÐB†ÓÌ9;±¿5‰êÝ —êöÅéîòäãúàæáíøðïùû×ÿöìóíðõòìúÿðíóëìÛìíðßïìáÅÓþÍ™ËÜ~*R¬.@aÖ‘QXÙf+GÞ¯E'ÆVLIã–7j¿"T ®@d»+) !@#QG6C-,)7A-*K7NE[!0*)A9GcM/7S*W *c Z$1C"b.'mC{8f.%s. v7b#3Z+m82U/[cCdEmS Z%-!@95*3T+cM&,RB!>I9YDI6[='U/KIX;"jM h6X2]gZD^LV)e.l)FF@66J2FHZ:ZN˜ª¸†•“•…”¯ªžuª¯nR¼ƒriÀª_d§Ž‚u“šv{ƒ—‡lÀ©†n™yhË›sF·Œw^¶{‡wˆ¥iV™cW°¨dP‘¢}ƒÃ©s^²QdŸšbt5®STg½`T—¥xR‚²hsY½hyYÅ‹yiÍrm;Ø}lOÊ–h)†oc]ÆŸ`3®¼XC·¬U4½vgR¬³l3¸´K5ª¢b?ž¹Ž¬keÀ™u¶½ˆnš´|{¢±es¨¶ƒXÆ´tJÌ´“]½Á _º«–H œB±ÏI°Ñ¢z™Ö£G³·ŒPg©BÀÁWÓËr{ÍÂD–Ò«ea£¨UWáÐuc¾ÏKhÄ©a8¿CKÖ½mO»ÂET£³_¿Ï…>¬À\eµÆ‹9«¢Nµ–3G±ƒ>ƒÏ¥:gÆ›=gË»*@ØËSa­ÄM6¤³XWÓ²N:­£9KÃÃEPºÜT_ÁÏXX×ä?•îÜ¿²Ûó®ØçæÇÆõñÜÃÝïÕàúæ¾òøëÞÑãùÐ×íðÚÔäìɸæéɹéíÚ¼âçÁFóÊ”<‰Þ89aÒ—C½ -CÅN<7ê.%k´Â2{ì$+÷n)*ó=,Þ44¯U<{s(v‰ŠXŸ[`.[u#7™™)Dº ”/&@­0E´#-®+œ,"PÀ&Ø:!É3]È%DÈ +%‘4;§0¨êPTäÓF#ÌÛ|)È°F»â^EÎç‹2mÓŸ?dÜ®uä+eÅÔ"ÕÔ>"·£(4Á¹:/ÞÔB ÐÝA,θ&BâÆ'+ÇÄHDͨNϼG¾áUà±<*Ô©*6ãÂobôxŸßg'ÐÖC³Ôf"•áz0‚è‰sí˜62æ–.Mß™Xª‰nÔ—ÙÚ)£!/ò/<¶ª Ó®+ê¹¹Ô5;ä¼/&×Êsàäc!Ø×kMÙÔ'4ÝÕ$®Úk$Éêr2Ó¸žÊ^ÂÜh ÛÖ[«Ü©NΫ|à¸,½áÌ`×´7tÑæ*LàÇJNãÊoR¯Æ\*Ö·C]ÍâQ:¼ÖjØ6…ãj0çŽèÛy 0ùk¢àjC]ÀÊdÔÄQ¾˜QsÇ›-Kâ©!TÍÔ7G¸²GNµ»71²ŸMJÌÕ39Ñ©:M§±8EÁÓIcµÅJÍÌű ÙØŸåêÇÜèòÞîúòøâðàìöçîüïìðÙÞïëðõíðûúçàêðÿéóîñæïÙêøÕ‹ø»çlÂÄŒ9WåQf²ßžÏÙu(:Õ5[J¼‚Wçª^&¬—RC©j-N3V"V9:P( ]C-DE+:2N#4$Z-222'6YD7H1b.&*“ AQ%4%bD(g!&(j2V3%‡ c~W uNYn+SzW`44\!3o**_`N&Zl1i,u*i#76W>76+z/O>FCF7V4VJD:Ia-X b_P(Z3FS6`#w#b!T&} OaQl"d(x(e2R+…*@+WS*S/KFRr?? b_(POW5FVl0HWy!O$Œ];b/T<\N{¾Î6M¾¥_Qɼ^cÊ®SLÄ¥[nÇÙ\a׳eC³³sM¨ÈjMÔÔŽ8úz3‡Ü…=ÖÅwG’;Z¡½˜+¥¾£9²ÓpLb½¶E\Þ£qÜ­KiÓÞTWè½PVÏ»*wØ£@OµÉ[rÍàM^ÆÈ.…íïrPïã–`èëšÛòóÆÎìëôîëõíæîéãïúìÌÕìïõö÷îíñòòòîíïàÌòàÌÅêòÍŒëã–KÄѪ*mÖ|@ÒÉÑß~=OÜO7FÚ‰6ÄÏ<Öo(ãoÆM¦ ¾›!žƒz‰ Ku@|+Ð) ?º3Ä5'9Ö3.%Á8*´0.Ü?Cªx.1© 6 ‚/£g;l²7nª-%i†!1Á.$;Î1":Ìo·!3PÙ119Ê+)'Ö<'8ÚR2!°Z'6íd4Kç¸Fyâ½?)Éê7GÈËLâÄ=\ÒÍ[!ßÂSÇ´Z­ï}ÏÕŒE¼Ók=ÊÑfµÜ‰¯ß‡!Z܈,ÉݱÆá¤ÀǦ!¤¿„uÖ°"oã´(jã­JËÉ¿}ÐÎ6gмKTÚºhׯCÏÎ"[»Ð :ÓÒ ÏÅ45ÏðVÂÊ8%¿¶D-»ïCÍàU/Ù¶Q -‡ð¶ Zê™uÌ”6Ь4fÙÑHHå·DIÙÁ-cǼ%DÀîE.¤Ñ\Ù»<Úí+hú-K½¿"J¨Ø/3ÄÉ;-Ÿ0%Ñœ8µÉm„ÕBžàCß´Oép%•Ñ_/eÒelÛyWæ#Mû‰!Tå•.+ú®1ÔE(ä~)BÝz4ç *®­ Τ/ÜÈlØå;±ÙYÚæH/èÄCRèÝp$«ÄsÃÌzC£ÄpÄÈ{¾Öh(ÊÀq$½ÉµBÃÈ{æ£7NÕ¼+6ÈÜ0XÇ»1DÁÊ&NÔ®b/™Å|8ºÒ,4ÙË7Y»ÃdÇÎ]-Çأʀ$ËÝ‚-‘Ö_AÂÙK9±´¢+WÉÀ3@˧+\è¦,VÃmã­/W¸°J8½ÅFK¬Ù`N½¸Gb·»)TÇ¡NZ¬ºEh¬¾TXØÈ{ ìÚÙ©íØÈÞäë£Þíûùæðéêðöñçèóúëüñìéãíïóëèîõùø÷áëøéôÞæòäÒííâ¿×Ýš`èÁ‚Qs±˜C˜¼‚U^ÕsG\Õ€X£²¸[g£bt-f+r,R1^?^J93UET9=179D/0[#&G6<%T&:/81`T&c0BZN.q76o1U0#bGGg j NWDV'd*I#c"H'^ /z=b6€%:n-ryD6L9J'A?6U\/Jv$__!S;~PPBM1T!w0Kmam6H.˜3cv+]aU8~Es#fGP-qN)B\JX-kFH8Yl?HFg<=J_BS;~ WA€4]4w%:Lz.N=¡6m:ˆ3n*Œ-\2|Du&ˆHL%Žf™‚s† »‚Œ³¤¥—r¥–‚x¾žŸ™€´§¬z£¾Ž¦œ¹y²¸t®¢¨­™Ž·›±„£Ÿƒ€€œ”¹®|£›¿†ˆ¦¯y‰žºw—›¼zœ¤¸u¡›«“ƒ˜®€¬ ¹‰‹£Á’y¨››°•Š´Ívn“À}_Ÿ©„”¡–…³»”˜–¤“­§•ƒ”žœ——¢‘ƒ™•‰£”t—Ò‘n³½’v’žž~¢¸…•¬ Ÿ€¬ž{¥¾|ŠÁ¿oƒ°¡Œˆ©žŒ‡·¶— ’À‹À¢n‹¿k˜¡v“¤°{Yo¤_^˜´_ªpdˆ™abª¡‚>ª±u…|±xxºƒ‰aÑ“€RÇ…“Q®ˆ†]¾‚„J¸ŠdV¾‡rX®ŒK§`s7®Ža:Œ¤US–p;¥—ÂÑ-b¼¸d<Ô«{hĬroœ­8yƯtOÑÀ|:˪g]׿V â¾¥:ÒÂs.Ö£a]ظ²(¼¥Á1©ÕœO‘â™D§áÌK‹×ÀWŒÄÎ3‚Ú­R?·¯^9¢ÀV_ïÀÌ$"KÉ4-;­()SÞ4:'Á,%\À)%aìe.Ù}ls(>Âl!'¨ˆ-˜©*“–.¤½&#!º&${´ Ž³+‡½"/^ß0(JÕAJÛJ'WïeBéZ,XÕ·E}·¯1OÁÏPGʪHAäÍ)@ÁÎN4ÉÈW;óE_ʼk¯½„F½ÁVTÅÂ-¾Úˆ ¹É† Ó†DâÀz'«ã3¸ãL‰ØƒB¶ÍªrµÐœâÄEqÚ©0žÎ¸ZιkÒÇcæÎ#BÍ¢/{¼ÜR<˲z´¿ÔÎ<_ÂÄB3ãÎ12·×S1ƺCO·ÒpÜÕ‚k飂×Ê€Ъ oÖ¹MQ˦MÍ»0ü$;ÍÓ;@׶5ÓÁZι+º3 Ω"ÄÓ:ÄÝTÅ«R2«Ôr(ƒïd¾ÞSÐÖ6#ÅÑ{®ôz+â„ ƒê³0\ì§Záš^íxSç 2å§1ÚÛ2Ñ£ 8ÌÝ3â±>Læ¬.îÃKFÓÇ1LűlíÃc'Ð×RO¶ÜR,¨ämAËÞ_àl!«È—-ÓØ‘£Ùq-­Òp7ܲÇ!™ÎÊsá¨8KĹ9eÂÒ*[ØÚZlÒç>HÍЊ4·©m(¸¹B7ÎÕA ²Åk*°¾j%ÐSCÏÊ—#p×’/ŒÕ„9“ÚvERÛÉ!E»È%lØ¥-œ¶¨,YÎÈL_ʾM^¾¯5G½ÌES¢·MOµ£A;ÆÚ9j£µ`}ßÍssÅÇcËÇéȲßåÄËèðÊèïõàìÞîöóçôññëûéýùøñëîö÷ñïøîèôòë÷ýçÿîéåõõðÞïåòäâéà»ÏgFÖ²E~¸™Vz¦f]9»rvêºÆ´ÉÎwE{¥bXN}qp'L49 `?9Q0(]2?2>`B9H*.>3$+/O9ZJ"kKXg0T*d4V')1B%WNBT‡eL~'IK~ T E<odkS~0S$i"Z9^#S>!I![DHEPP@*X7H%eKJAqF;6>99.xL-9Hi;Ut)Mw[6PaM:1˜J0ŒK&‚'V5¦/P,tH2,SI¤IZ.‘]B6]W>B’NA6_cEka3tb0{o,/3u&8O™?jkYk„FXBž?I>ž:V3œ.C+ºFE9™M£ ƒ‰ Â~’²¡©¦ƒz{Ÿ“„ˆÏ¤€¯¨~–¨…›ž—‹Ç}²º†x“­„†ª¦¿¬®vȀĒ·¢«ƒÇƒ¯‰ˆ‘Á˜xª²‡”·Œ™§¼—‰Í˜e§¦ƒ}˜³|ˆ†¼˜‚’Ê’¢†Ã’»‡°£‘‡¼¢®²Že—Úrˆ¬•‚žƒ‘¬Ÿ‘¡£ŒhŸ—ˆy¡ŸŽpÉž‡V“°{…›º•>¥¹{v{¼š‰Ž½t—’µ‰g³ˆ†“«—\Ž¹……Œz‚…|Ž¸|‡•‡Ž–{“…‘ƒ|ŠŸ{uqª˜}‚©†Ž‰Œg}|—~xa¨”™˜”}šˆªh§…®Ÿ€¹‹¥‹±y@¡c“^¢‚€d¬tˆV‘œ„Q‡„|e—…nI¦›{^—|~e‚}Y…|-z¢Ó\SÍÆ`(Û½x6Ó¹Nr¥­UEÑÖg\º±tV°Îƒaá²t/êmQЩ`A¾Æs<³´)—£¬(|è«,¢½Ú=}ÀÄQs¼•;tÑÍ;eäÍG:ÅÁ^^Úª8VÚÊVJËÆt^¿·m¤§gLÛؘ/ÇÙ”6´Öj$¾éj“Õ8ŒÍ¶0£Ê©%Ñ·Å£é«/–Ò½)Ô´vÞÊ=DÁ­GVÛÀ.”ÞÆ6\Á—Nk߸LaÝÝŒðκƒàݾºêñ£Ûòôáòàåíð÷íîôåþòóñøúòìïòò÷òôöïæÙËìáõìøâåûóÝéçîæêÇÜñ¦3ŠÑ8³Â„³Ó‚LÔÈI+©ê‘L²ï}-Íé]KÑêN(ÑÄŒ0ÄÁ’!ÃØ‘CÃô‘ñ‚2¸è™E¬ò}/¶Ä£Aײ0;ê¶M¬À×–ÏÖ|Õ½ƒèۊ̼GdÃÚ$CåÅbɤ0]оZpÞÓPYÖ°0WèáOZÍÐ3VÌÏ]H¿âD;³ä¸M˜åŸTVÛ‘ ã“,Ö°}À©>€ß¥ zƶ+'ÑÁ!CкEÓ·FÍÝ.¼¾;CϹ(S¯Ø5¿Á%6ÞÉ%5ÒΩޕ §êe­ô[ßÃI‚åS'®â• ‘á¡2uϧ#Còœ!Wä«%vî‘;ñ¾3ØÁ*Þ«9ïÃ2"¾« ÔÀ$Ó¨$'Äó#cлZ#µ×S-¿Ð\À¤0±œZ"ÉË`¹¹W½Æv!jÌÂm6®Ø]'ÐŒ9A»³$tÒº2_Þ²)­ÌÕ%\˾?RÏÇ0c±»m3¢½]8®Òy#ºÔBPǯ{&µÏi)±ÀŒ)©Ç€8uÛŒ9yÀP’ÍX+˜Ç›FUѽA=Ö­8~Ö§UѲ¾RN¨»+ŠÊ”IbÈ»FV§§QA£­_ZД=_ÇÊHYÀ©Pnºß¯ÈÉÃ¥¹ïØÓµïíÂîÞùîúéñßíóíóãñþÞ÷ñäêó÷òîðñîüìóòÜáðæòßùûÿâàõëØâêÙÄéÆà ß°cŒ¨¢Qh°5X^¿nNÒ¦«wµ¯œešÈµgfœ\Y>ÌvU.AH<(L$H6Z85HS/N&/8.<'v8];$W)<p Y]!J -C*5^#.5Y!X*J&=JrY~0,6"S{ Vo -N 2U@#P4&c C4NL"=T A13/219Q(/)c]O$IJBK@.$yS4“K+]^CvY7H†K0D'‹IO’FJ,™0G5œ1F+ŠCO4‰g-!s^E8oFM7”Qc5ugA5SpIGu]LBO‘<2¢4=•=Ep}+EULKQ“2/B§:NA¯V&4›;‹Tœ‹—˜‹…Œ½ ¤ Šsteƒ“™Š¥›ŽŒŽ¨ •¬“‡™…‚—´c–¯’„•­©“’i†°pƒ{«•„a¾‰‹|³±ƒ¶¯xr­™™Žª¸pz¿†²“«”‘—¨¥ž¬t—s—Ÿ‹xµ‹—Œ³€š}²“xv–‹¿x¬~ž†«Žš˜’”{›œzŠ¡…–“€ ¢k¨±‹y‰­«€‚¸y‰¹v›Ÿs†ž‡‘z¬Š‡Ì™~”º¥x³Šœ¡¬~”ƒ °šƒ•š— z’«˜–¨¬”¾“™•˜«}’°¦q†§›Ž œŒ‘š®‹j«£|Š€s–kgy­d¶œ–¡§¶›‹œ~[Œd„‘‹`…HwˆWŸŽ|[eyR[‘T¥ˆŒ_Žg~fŽ}{VŽÈÒDT«ºS,º»Xy»°Mjô—aNÖ¿\TϲYAÓÃ…e×ËnX¨Ïa]ÏÆ`TÄÉQMÛÇ…'©Ÿ0¯Ü±=kÈ© ©µ´>×Í\‚ÔÆT–ÒÀ\5ßÉX ²¡M_ÏØ=rì±eGé´ZNÄçv9œÊA3–Å‘T¢Ç´éO$°Û…(]ÑÈTlѾ9§Æˆ½Ý­,_ר:©Ù«6xК?R½·1dê¼P?«¬J¶Í»;aäã'qíÞB`÷Æ<‡Ú籎áéÏûç»ðôä·ËéñüëîëÅäðøÂãûîÒËßõ÷íïà¿ÄâìÔ¹áíñäííÄÖé캉ÙçÄÎÅ‹Yªã¢JÃÇp3¯Øj>Üó{ ¯±B£Ìœ$/׶A(×P$Ç)%$½e)*Åf" ša(š\,ªÇ –4 i u8&6‰!!6¹ M¨+*5§29±)9¸1)G¦7&2Ÿ7(#5>¨*Gº'($À"&!Ú9 GÉ9/9ÐU/)Ë-+Ø%25¨6.#ªQ&+‰b«C!p œn#&U'›{4Aµ.jµ!,Å€+-ˆ“)B¿#bÏ#58´%(AÕ/)FÄ?3]Ü= uÈ< «p ƒŠ!ÒY-.Ï}%-c){)DР$6OÂ!%£0!¡&u$%të()2´G%SÍ+57Ã6 9ûh!EË¢"^ê«%1Ï«KRÀÊ.h×®&QÐÑS\èÁk&®ÉBLÕÔˆˆÒ„—ÛzLÄÊB-ÀÒ€ˆæv@¦Ê‘/¾Âw£ì¡‘Üm‹å~G”å *—ÉÆ+‹·³RÃÍš ¢áÌXÙæPݱtéÊ4OÊ»"kØÈ~ä‹¢Ó=<ѽ)>ÀÞ6,ÐÈ(;Õ¿6RÕÃ''ÄÀ6IÓ×h'|Ú¨(q×›(­èeµå”iê±Aåª6à¡(×Ç"Eà»$Ø©Sĵ9ÛÄ(ÌÓ'.ÏÀ1)ËåbÉË3ȵ ÑÞ>„Ùk °àOÊ®EMßÛ^šÌVdáˆ1‚⪠_Ô›">ê£)eéwâ¨%GËÇJÔË5íŽ -!ÚÍ0ÚÌ(ìÊ)$éÖAGȼ SÝÇK$²¹q8”ÕP6Ø¿#ŸØ€$‡Äk;É×Z?ÍÀ’6‹Ë–¹Ñ(µ¿z)e̤)ÑÏ/®·0pàÌ F·¼:ŽÆÓ4qäÉG|ÇÅXÉÉYÐÒC‡Ï¾VF¬´£GœÍ\C–Ù€3¾¹d¤Ã‘ZnÓmS•Ò‰#œ¼È1€Ö¶m·ºµ]¤¨±2…¬ 3ŠÒÜQ^É´Tn³ÃT^­ÏjC«ÚV€¸»A~»²\»ÅçËÒÅÑÎÚØÕºîäÈÛßöôéèôÞäÙóüñîïöøáôèðíô÷òïóõôðøþöæáêôîãùïûôñëåìÚàîÔëÃô²ÀFÁ¯rYÝ¢±»ª‹Q\¯ž‰Ç¤«oY²˜ejÍ‹bXŸu³‚S#i&8Š>]7p:-*Q*@\c -.&?%0XO&4]cN%eJq-1b*?D 0#GJ 0,FdG43E=n'aR+w=y Z‘Z2¤C.„"4(Š".w=v>E+d(&,~03žA/DwC=:aC3$Ž[I;¡ ,\z!A…U-5\e+4‹9e£[/‡+V-œ-VMœ7J¤*LϺ![¶ÅWjçÙBAÅÔUCÏÒ\Ož\ßÔr0ªà`@ØËJ(ÃÑ«-œÑ¶5ÉÍ©¯ê@¼ ;³º¯>®Ë¶+†èÓ:gÆÊSlƲ§ÅÔ -lêãuìÛ[^ÒûRŸúÝ»Šéë¤ÊóáÍßùèÍêæïññùôñõëÿóøìòòëèëêçßäéíðîêêÝëóÚûõêøô齯äà¬7ãÐsÕÚŸÅßwGÑÖu)ºè…‚Ï™7ÂÜ…·ÓÈ&8Þ{$ê/#¹-'ƒE&%Ín -†piw,3S† #?h#YM,'9¦(?¬0—'¢¹"+–% =Â(Ap(%:´=*%^43….:)Y1&%Ð/-)‚¹+#Ñ/ ¾)5Ó5¥"0'ª0†K"5' ž9'Šv$)†M.tC*D¸(*„''hjfDa¸.iÄ&&4¼#%iÎ-4]Å/99±(+9Ë(2¬o­‹!ºh-ÓZ—*§Š'©w! -ŠÍ67µ&1X&es%*rÇ(%>¯(&(Á,4%ˆ@-<ÀM"GΠ=[ß±§ÒË/YÊÃBKʺFiÓ×–ÉÐNëÊ2GÑÆ1ÖÇ7WÝË?`Ì´@Sê¿5NÍÆ%F¼ÖÉ oÞ_’ч¬ÙŽ_À¯SˆÑœ‘ó£'…¼±YáÑ€ØÉU«Ø—SùOØÁ,)ÓÎVgéÇ2?ÇÆ"bØÞ ?ËÎ4ÞÞ‡ žÇ\œ»> ÌË6¤Ë{E¦Þ›dÚxܼY»¤ZØ–Y߉"6ÛÀ ÞÄ4"Ò¯ @Å¡)Õ ¹»àÂ>#ÃÈ.IÊÃp(ÈÐ_™Ñb9 ¼"EºÞu#¯Ôm)²º‚,é»s9›¾“ {¼w-«ßknÈ‹5Ó¾=>ËÇ0.ɾ'-ËÒ/_¬ÑNNÀÁ1bÈÙl[®ÔcfªÑoQ­´P£¸sXpÂy9’Ä“'„Ák-RÓœIuÂ]{ÀP6ǃ=V¾Å7RÓ¹Q—ÂBL³¦>‚²¹;v¿¬V¾ÓµFh«ÖiYŸÓRQ»¶a½¯œc¾ÃÔƯ½Ã}»¿Ìº¸ûåÍÚ×÷èçðÿëëÖìåóöñäàòÿäûóïñðììôùðâòéñòãäíåîçÿííãìôÚëÿèìîè±Ñ©®¢dЋº½Ã«z}o¦«Eˆ”Žg‘ž¤ki©Èdt°Écy±#xFuf'e21j!8/K7+#'1'F/P5<,B=(5">/O*4#L%: Q:\[26K"I"E4":!_&EI(_@O45I L"NT |YN R s,Y'F0—.ScB7#VEp#B$MC< QQ4W@9&V–!;p4Vi"3X]JWO—$5d¢ ;1‡.5J”(MI#UE›0TC¥>4†\)2˜YTˆNQ,®OM+wO"0_kK!nO`;]¦%JBŸ0,LyB/aM%-H—)F0†7’#Ed>C8§S‰~™Š§©›ƒµž›ƒˆ£r­Ÿz¦„˜p‰§†z“¨‡{q“}q‰´‚i„œŒeŽ°•s™–n€°˜ot¨|qp¬pvÀ˜yx´šŠw¾uŠ|«¡}Å e°•–ˆÄ›Wx¸yt¤ ‘ˆ¹©|z§œˆÂ¢§m•¥™q‘¤y‰·x|gˆ±”z–¦’ox¤Ÿ’ªÃ¦\…ªš¬}„·‘_„¸ƒ–šÒ¨a¶œj‹Á’Ž…¤‹v~¶²‚o°™]‚‰ªŠ°Â‚у‹Â„Ÿ§§|ªÅ—‰‹˜wx´Ál£˜u²¤‰\Ž­¤Š¬Ð—r•¾™€’u½™m¤­“V¢Ÿ‹sži~yƒžu“¬¡„x“™‹ZšO™ow]†gqy›bˆt‰u‘k’y‰Y„tŒ{o{’e‹t±Ñ\ŠÃ·YLËÏ{fÚ¤YYÀŸ0u­Þ|V×¾S?ÏȈåÃd'Ú»†!¨ë‡(ĸEMÙ¸V!YĆ*lÆ·8TϦU®Î¹7¸1~×ÐN{»£#5³§4:ÕË:q¨¦.wÖãV7²ÍNMÏëf#ÍÑB6œåf%§ÙR1¨äK+µ±wT@«™]Ôœ!Žz3šË—­Ì¿›ÅÅ ¿Ÿ±_ÞÜipá×#ˆÐÊžäµ']ã»UPéõ_tàðŠSðâ›ÄíéÉëìñ›å÷ä±ÉìôÙÏîôºÙôúÓéúöëèîóËÆéóÎÓñçà¯ðùÈÇùêÑÁîßÈÇèé¥9·ö„ÇøÄÝëm;²à,³Ò¤†Ý…$ŠÓ†$$˵$ ÒS'ß97è8$¡A2š[#3hm(-g’"GV"®|"$“ '1§}'S—"”Ë!E¨%34Ÿ!I§,=ÎC.$Ñ$)7 7(>¡ 3´! AÆ9#Õ,,*Î0Ì 5¿( ˜* ñc6“@(™)7¶f2­b,šm!„K6;Ï$C¤4';IÕ¡#*e†"ˆÒ+Ç :ZÕ"%VÇaÜ1a¦ !ºs!Åp!*Ð=!¼w&6¢Š((ÏË•"K°#ŒÉ<.sj'—¥+6Ë'»'/¤& ;íJ0?ö©.=и?ˆæº'8½Ð@^ËÔ8N¸ÇUǺQ1¸ÊV<þ*2ÆÝE¢Ãz' ÐR/ÄÉ'ÇÑe&¹ço•è(¹±jŽºˆ¯Ø”7•±D…» OØÒ—Τ?ƒÐ–®×Ó&bË®.QÓ§@xÒÌ'^ϧfϾ'0Ò² -8в'1ÛÙ;BÎÆ=ç²"ZÛÑOEܽ3ؼ3ÌÔq¸Û¬ šÚ”„ßi ÂÈ­xßžBØœlá·zã³(ì©zê´BÍÅNpç·#¼ÎKâ¯$%ÔØ;MÒÃ+%¿»"ßÂ;3z¬Z@®ÕFºµf+ÉÔR!úƒ&Ó"eåv#;é©FZóŸ'VüŠ+ˆÞºT/ÎÕ3+Ê×&-ó&)ãÆ,+ܾ.±¶0!îÞ3tÑÉ&_¿ÉkkÚÕp*ÏÍ3MÁÅ8=ÐÆnH¿·s;Ù½h"½Î”_ÚuGÕ‰:¢Õ`[¾‹}Ô¹#©Ä¢Hĸ´0“ÄÑ;9ÎÂ7‰¾Ø8\”Äo-ÞT±¸FHÆÒ::ŒÒb8´¸’K€ËmE”»uG~º¢L†ÕqY§ÌŒmš@Kµ™JdÀ±E†É®<€¡¥E½¶À]¿Ð£?I­Ñ`•»Æ2Ï©ÊNÔ¶æ¿ÍÇЂ¾Í®¡³¶×ËÇåÁ¼ãåÛßýìõôøñãîäÿæëèýêøõçñùÿôÿèõî÷ñíëíðìåêðìõèèéãéïçèåóìäãοßÀÈÂÆ®ï°è»ß¾¿¯b–²£{Õ®[˜·ƒx_°‚}h¤¸^Mq^ƒ*W3w"I@B17@ 0I@)J)'/88mFBQJ!U@S(6A/,@..`‚>)P;)LA})]X?#=!BwSTw:”I RšB v&S™HˆK¤A4-l)E'e'\%”B<(x5;(€I4%mA-@C=^…4SO<6‡z,Uic`˜,HF>[G¬)HEˆ C5¨"=Kž0K!“]&%nQOv8J+da1CkI]ÁÑ¥$”Æ©†Çà-ŽÚÉ&oµÇKLÎÁFYɲDeܽ0]¿ÂU8ÔÝ](âçM)êÖ…³ðT6ÂÖ`*»Ø^<‚Ô° Œ¶«.ÃÌ„%Áמ™Ó‘ ±É¬©Ý»4nÌàM^ÔÙ$‹ã¿%£å¹+hÛÍJpâÝ–fòïŠÇöñ­»êÿËÐõß«ÞãôöôèæÛÚôâòõî÷ôïí÷ëûãäíóâìéäèëéíáêò÷õâȹëìòêéÕžƒéä±O¿ÌÒ=ÀÞË2èÞvÇß…×Öž®áƒ"Jæ¢JÒ™ 9¨7O¿*;åT'¯r:‰LEœ:'P]"9š31{&0]€*;‡8!­&!!’&J˜/6®87»$'-¹)«'>9-$Â%!,Æ$ ¦I2)’b1š?$%¨H%ž](¬Z"!_:* f³(\•!M„#:¬g""‚ Œ·y¿5s»% iá/(!±,<à.-ÛS‘{%Îl1$ÅQ/3´|*¢˜(3Át5l®$!…ªD“&.É”'6VÐ4$)È3- Œ71 º8,@ß46Bñ¡,©Í¢/ŽÒ­.HßÆ50©Ò2LÍËRFÓÊO3Ÿ8CÖÀI&Âá{B³Ë=­ì6@ÌÇ+(³ÇjPÊÜsôÑo)ÁØy$ÄÚm&iàwM»®{W´Á¦ܾKkÙ Ö–$‡Æ¼lɱ‡×³!‡È½)rÞ±!TÍ´*{Я >ÓÏ*GÌ·9VÉÅ2XÓÄF/ÛÂ+5ÏË4[á½6DÑÌ•$¹Ö”?ÊÖ„Íä“•Ü¢¢Þ…$~Ë¿J‘ÊÉ+bÕ±V”ξ)ƒ¹ŸkĪ^×Î!UÄ̓ØÈ+Û°/Oר@ͼ$²Ù{ ÆÓ>¹Ø>7Æ×(!µ¸^¤Ü`9†²a7|ëŠAö§)yÝy}èJWÏÒ(ãÌ=WÕ˜2EÔÅ$!Æ¿3ÇÊ0FÚÍ/1è².]ûS5ÚÑg5§Òc6ÊÍ=„¾Äv,€±mC¥ÉŒžÈr,ÍÓ‡.žÍy&uÙ\AÄÙŽ:\¸»4Ï×»3‹¹œ6rËÐ@C¼Ï/‡·ÓF‡ÁÌOM¢·hM½ÜSCÄÀAN©ÓCã\U€Úƒ:£Èz4_Ï™Y‹¶’\|èrKkÈiTXѵ)fºµJ^ƧPŒË§/[ÅÈ\u»®sÖ½À|µçÎx¸ÄÍU°±¹“Æ«Å¢ÀÚáľô¾Â´Êÿ­ÄÛýàóßêöúåýÓôíöÛûêèêßô÷ïùöñêøìúçñïáëîøôáàêçëäèéàè÷øçÞìèãïæÛÍ‘ÙµÒšú˜ù™ãÇޭ;ϱɣ ’Dz¶iW™Lm5–»‚<Ëip*‘&b$LŽP®:`>a*G'E6G%8.2/-*I--M*=-5c744n5#l"/2W"^I)N#9 -6&D5QWNE'N$L =*D1O}C{H2Š)>nSŽE/Œ!W _,@(P83H*Um8X8{QT'd@?.c6E8ps6THvL[Cm"7ŸjJ9$~6Qt‚FIT†U†^BMU #K)‹I7£:Q3´IK3tqF,šky3˜Tv>ad=abyq‘TI!d›:?nWBs~PR“kOOF°2<+¬-I(mA.B_I©V§}¦fÂœ„ٚŎJ˜’‹o„›|W«y˜©š•² Œ‚¯¢y…±™g °•a¥ —mº‹{Å ™Á–k™²™}‡Ïªs–ˆ·t‘²“p‰Á¤}¶ˆ‹¢œtÁ˜„‰¸ª‰z½“—T¬˜Æ‡¬•¢xª£ƒk°˜„ÃŽŽ~µ•wšÇŒm“•|£´t ®€‹¬˜ˆ¦À—y›À‚kdÀ‹x€Ã‚wgÀ©w’°ž¢sÉ—TyÀ”iŽÄ¤œ…³¬•¢¨Ÿƒ†¬™€u¹¥ro—ªžŒÀ¬”xÈ–™ˆ}¶}e›®œ‡™’’¤˜¢˜m‡Ú…€ ¿œtŒzº‹–‘ºq›±™x‡ª«v“•t·‡Žr¶k—»¥•–µl}¨‘ggŠ‚|w‰†€]sƒ“©œ€‹­ÃC€·À{9¿ÇWS½Ê`p¸©R}¿ÆbYŸ¿W<¢Ë%»Ém0ÍÎWж[AÖÜ^0Þ½s%«¹¢ºÌ£Áª–¬ÍÍŠÌš‡Í¾*“ϧ(7ÔÑJA¸À>eË®.U®³`FÛÛN%ÙÖUÒÒf'“âk9™¼k¬¿Q&·ÎŽGJÉ´#_Ø°‰Ãk½Ý “Ñ©¡³´,ÄÜÎ0XÒé1‚ÖͱïÚÛÍ![êã\HçØvUåòž´âêÄÓêñÆæ÷ç·âïæ¿ÕçûÑÏèãÒÞçë“ÜêéÐÜæîÍÅèðÇÏðäöÝéçÂÌéÛÀ´àåÃ×ëÜÓLÔòÃÓÇWáƘÉÜ£Ò×{ ³ÜŽŠÊW'2ø¸1ò`Añ+(AïU&æo%ÛJ /­j(&|®"&o¹7S$‘|!!f’%³):7€.©F™ Kº&R¢ '¼),$Ú-%8É*+O¢7'.º(«$®"‘).È*4Á1<¬!ŽO'™??Í"QÕp*7åj5Äc'2Üo0…«»¹ cV,/½‡*‰Â#!›Ò ÝlÜ$!=Í2#RÌ2O®0!#ß&½Ž +êW7ÉlÆ(Ÿx%'¶z4$h¸ jœ0%²•!̼0$H» &¾C <Ä>"DÐH%Mä YÚŸ!…¾ªy×Èi ÃÞ4QÉÇ#(¶êE6ÍàRRÈÐ6M˸~·ñe#Æål¿æ&¹åz1¤Ñ6µÃ},¨ßr·ÑP¡Ùf9ËÏxQ­©¯…θs·»J™Å…R¿¬ÓŒÍÂ"RÙÄ©Û²-SÙÄgøÚ-gͯŒ¾´/GÔÃ*(Ó¼+\ÛÃ(=ÍÁ>)ǹ25ËÅ22ØådxÝžÞ„šÊ}mľ¤Ö›2nܬ0Gå³$:àÕ„¹-Ûž*×Ç,-Ö¬.DÌÁ>~Þµ,>È«)SÁÇ -.Ó´lÎÆU -‚ßt«Î$?Ê«'ÀãmnÝ-zÿƒ(‹Ì—/غYߦ|Óˆfå½EÏÁ!3ι%IÝ™6(â×('Þº ÆÆ)(ÛàD@ÒßZeÙÓd£Éa<íµEBÅÌ2KÏÐP?ÝÙt0ãÓv'ݹŽ.ÎÌ~.½°IôÁnDaɪ7Z»±0CÇ£#´·.RƹR;ºÆ2lÁÁ>_«¡yU’­PHµ¹1\ξK[¤Ñ~H¦“„>nÖjg•Ñ|yÂP3kÖ~J”·DTk½„a‰Í±a\º§T¢¸³c^É©XMÁ¦GXĸ*ª±½fÁÉÀXÍ»Q͵ӕÌÒÓĺäÁɶֲ¶¾ïñÑÝÜöæäáðäñøñúçíèùíæåûòàîõóËÿòóóñßêîåöøÜÚèÞå×ÝæáèìÝçØïîÝèäÏûÁØÌÖ£×ÍçÜØåÑÂô£Ð¤ÙÀÁ¦™¹›•‡,»ufIµ‘z ²bt8v‚ATž)…{5@:zGMJRt")5HB!+;9@(>Zt9&z"2 -W$@#NL&M='u/A>cH~&:E QR@†'+a[RnI„&E(eE-—Wu!5#Š!J&MOM rE87&E3ŠD8'J;$“0E7…>D7QqMEtg3AgQ2„[-,W72A?]ax7`7“R*™0FC/“R11­@E0™p=#sKr;o^@u3BW¡AJKc.8ˆi&5‹m(E>¢$2/­#5I­/8=«I‰mhVŸ¡sÅžšp©¦²¦ž¦ž|©j„Ž¨_‘¬žl‡©–t‰¦£Š¹Ÿ¡~ž~Y‚™ŠŠˆ§q…¨qwt²wš¥ªn€³£†ª¥Á|Êšƒ­––y•‡wÄ©w¹­_}¦™Á…½’´ž…œ¯y¶Š¼’‰k²£Á†ÃŠ sß´}–”¨|–¹¦•«Ÿ›†™»–’™§‚™¬’~‹¯“ƒ¤¨–„Ï‹uºªhŠ›¬ŸpÈŠjx¸§”‰—š†w”°¬P°«›ˆ¨žn„±”žu†ŸŽz•ª›r¬º¤€¦¨£m©š¥|ª¢¨z©Œ‘…–¶†{‹¢e‡·©|Ž¯¤^‹˜›€“r•}’¸‚zˆœ…ª’‹«|kª»€~w‚”¨„_–‘‡€–‡}”†}”} “ˆu™-g¬šAi´µ‰dÃãzGدLw¿ %8ÔµO`عS(ÓÞS4تo@ÄÀW)ÒäJ4ðÉ`O¹×­3žÊ˜GŸÒ‰ÆÈŸG†âÁkÄÏ*rÞ·5väºP,ŸÁMQÙ²G…æº4K¾Åb?àÌ]ÁÓ$.À¶?½àd#ÇßjK·àG4¼ç¦³ê°,¥úuÅƗᤞԴ%§Ë°)‹ÅÕ!tÃÅŒðijβoÙÇa_âÂ\=Öã†Âäס»êçÄØóüãûòêÿëõâøæíéüóæõðáêá«ÉñðÆÂæéÞÞìæÚàæåÊÆèèÔØëãÛÖíå©‹ÕçȈÞæ»uõÔÅ­äÆÚ,¼É²ÉÈ…°Ü}JòÌ"Aº§V§KNÖ2$+ØnùR(©g,'X†CQ ;_#*O!Êa!<ÖW+¢n(Ùx&œe £´0#x¡?sx˜…).…º'@Æ.=È/:@«0E9Ú€ <ï²1ä !“å¶:jãÊEQÒØ&qÞ®B1¿À?PúH4Ç¿3)½Ù|[¬Êp%¢ÿÐÆCcÀÁ`RÃÃbUª»aJÈÜFG¨·}@|ÜlR‰Ðp\’ÎcV_ÐVFnÓqR¼Åxju²žJi»¹V]§{U¿ŸIK·^º¸žUTÀ¾J°šd¹¹ÃV£²Ã…ßÂ܈ϨɊ¨»Ã¨¼Ä¯ºÆÄé¼äãîÏÓØëÚíîìÚâôéåòÿêæêÿóàñõíïûéøééääòíìëâÛÜÞÙäåçîæÛÞîßÞÙãôçÜé²êĘ̀ãËѾÛÌÛÂã©”ŒÄ„tp³œ™zH–^t`¯e‡ºÃvƒÈRqH¸IoC,‹49g:B+!O&0)692'=#90L%2(O 8B+ I#LW"$#l/?!=?'d @#KH(m GN$Kf:#vC@|?/œ@ MTH(n%L|&GO==NAR ’=%dAR]X"=ˆB–Omz[HkhqHem;7“RfPi2.swYEq‘)BYo>n>‘-GI«3Ab‡EG/¡=D •]?"¢PH=¨UU)Ž[`)‘oyº/L3¼%HOªPˆol€¯’‚ˤlǦŠl¤´ a­¹•f¼Â€h•±Œ~°£™‡¦¤|‹®µ„“«s}“©Z•š˜…‹³–iq¡©™vÌ‹f{§«}h²~au³Špi­¦†ˆÂ¸€zª™”lÀ“€Ž  ¦u¡±Œc´‰Ã‘£œŽo¶¡¾‰¢®•Q«¢Ÿd½¥sm•”Ÿsªžcˆ¦®‚ž‹ƒ‡·_±Ÿr¦©„rŸvrˆÀ–‰vÈO‚µ”†Š²±ƒ^Ë£\t§…ƒ}À˜•x¬´}i¤gÕŒ}Ò¬²p·¡žuw§sb¹ž|”·|•£»’‹•²—Ž‘š²ƒ…¨¡§_ b®¿®m­²³f”¸ ˆ“¿½|Ž¼‹x{ž›it•‹Ñ™x„¸¦š—¤ƒw•±y|“­–„–´™˜ kv€£eŒ~ÄŠZbÖÄ*)ÜÄMQÅÏOTÑÑUO®Î27•ÄK5¯´f[ÎÕiî91/ðj+¹UÚk& s§!hg!Q- †]*/]#7–'#o%/SÇ%V“#Bs%!F™ 7¤*&?É (.’.S°$!­ 22Ž'58º,,ã""&È3;¹%#7ª1žD/ˆb),´-7žO."›C"“3,)çw. ˆ‡1Ëœ0|ƒ/é‚ 8gŠ.&Ž¶1r­BwÑ-bÆ#y§+*t§*#&Ä[&"—r#Ò>0ØZ0 Äp-*¼Š"$¿v_¾0'w¥,¿…#‡™ *cÆ(AÃ3'X½$+NÚ†#L½Ç=]Þ‹:¬ÓªrÀ¶?.Öá>UÚÑ2@ËõJEÞÎM:ÀÄ0SÊÓVšßŠ5±¸>'Æ·%UÔäsU¢àaA¨Þƒ¥ÞRâ„qÖ~ ¾ÛWZžÂŽ*SÛ­šÈ®˜ÑŠËÓÅDâÁ$–æÈwíÔ7^åÉ&wàØaìž#7ßÌ'Mâ¥.GÉÍ2`ܶ1ÌÏE -¼Ð.Ô½(3ÖÌN%–ܧ7”ÉŽ.©Îc>ÆߣJ‰ê¡gå‡ {å¹Fܸ"ià¿`æ ­ÕÊÏÈWÝÉORá³(Õ·6ÛÎ@Ùã!_ѳ<€ÙC¾ÊKÅÍ(OÆÛW@—äa,}Ý}D|¨ƒj˦*_í‘ åxŒÎ¨NÙÁGÒÆNé.HÉÏ<¼Ä7,ÔÇX0äÓ7R®¡\Yã°cXÅ­bm¥·dxã©?_¨ RRÂÇj#ÛÐ[Q¾ÍtCŸ¿n5·¾m\ÎÅ]0^«–0O¼»0Oب'§Ï²$e»®+Z¯Ë9v©ž.b¸²mp¸¿q.¬£KLÀ CKÈv5¨ZPuÚeq˜Âv+a¾ˆ'Å„;¡ÊwBm­³CT¾§VLĤhaØicÄ·=MÀ”Qx±£.¤­Ì`Á½´Q–½ÂÁ á®Ë°ÉÀ»šÌÁ§›ß³ãïÜÇèáíàéäðãééóáøÙñÌîØßæïäøæëÚôéõæëçãßàôõÛØãÝïÝäÞØìÊÌúÒßìÑí©²ê¸ÈÐãÏÐÒç¬ÞµäÜЪÄHK¥«_y´Žb.¤u{s˜Ç€Ã¨Âpx¿½| ¥75,œ8(—5",;I6?3#<@26##(!C0"DO EYd#1/~K/\$*)_<)U!7$);|-=KBh&F!‚J<‡LL‹,C'¥+C‘R6ŽC5w /hF7^81!sZ’54',+d9X¡AUCct,=o|<.fO8˜UUL_zBA]‰#OQ‹bNO¡(9Q¬Ezd–GgRm,_*LR~9‡-‰<;!ž?L1yWf:vgHr<}\6'›/GSŽ&A9¯+KU˜9a5e/ˆr“tŠ”ŠpxËŒŠx°œ‰kŒ³šf_±pw‹ž¡kŽ—w†É†zž¬–rŒÐ‹z¶“oˆ°¤’®¢n³‰Ð•tª‘zˆ·¥x{®¥®ˆ²”pvª‚Šr²™y°ž‡ƒ¼—v¾Æ{¡Êà~³£¼»•Æ…¨¡¡°©·~®–ª®–[Ÿ–‘{…‘‡|”®‘¸¥u‘„škm›Žv©žŒ—ŒÄ u¿’‡†½‡Q}©”j|Ø¢`ƒÄ‘I…Á£š]¼žx΢¢“ždz²˜É‚¤­‘~µ¥„½¦{³¢z}˜~˜ –‘Ÿ¹Ã¬µ‘r†©‡‘‹‘i‡“U ¨Šv}¥™…{‡·u‰½¤y—¼±š»“jŽ¾–^…®zŠxŽ«Š¹šv\¦…jtq‚}zˆŒbœ¹˜)^lj'oËØdOÐÐHJ¿°Mo´¨>7Ô«NH·µ=7ØØH_ÔÀoWÖÈi(Ī=>á¾C/³Õ>›´‡EÃך³Æ–A±Õ³,…ÒÊ‚¿–WâÉcl»Æ9[¹{ò–HjþºRI¿À=ÕÚP8ÐÈY0þC+ÛÐI?ÀÖ;#ºÖ¢ –Û¦‚Þ†Çáz¾Ì›F‚Õ¥ÉÁ Œ¾Ï)_ή1Šð¬/¥Ê§|ÝÒVãÒy/öÌt·óÑ€ÅêضÖúØèÐÞ¾âõïçÇãñééèñÓçêç»ÕïôØÐìòÌÆóêÃÌÖ×ÔÁþØž¢áä½ÖÕð”|äÞËÄçئáÕ½iËê ÇÕ‚ÜlÑÑJ!wÞ¬Ù±–Ï6H¹ç¦5ûjÁm#’:UZ.Tc#'g`%)J*/"PŒ1(6m+Fƒ*?i'R¯[™0"Os''‰)*&‚&73¬3!R‹-.½7%•-+º&-/ª,&$"Ÿ#¤*,‡D,6YG!w:%¦).2’_#+¿E( ù70*Â¥7†˜( —eÇZ*̇7<Ê*Ar¼’Ø2TÂ%dÏyÀ#*M°;> Ï."Ö:0<Ë9> ´e*"¿“&¯p%–*~©/.’x.§›1+lµ1.TÂERÇ),‰Ó85-â²—â$ƒæŒ(ßÈ#2ÔÜ1D×Æ?GßÚ+áÉ)A¼¾TQÄÍ/1¹¿M%³ÀU0ÇÖ[;½¾I ™ÞWf¼×ƒ9Û»gIÃㆼïuK¿ÎgN¸É€±¾ËvÖ©4£×£OžÁž!¦Ô¥¬ì¿ °Ø•§Ö¾5xàÀ"sа ŽÊ•uÇÐ/YÓÌBIØ®+n˲4cÓ±dù>cÆÏ21Üí˜0ŸØ¡L¯Øg ¾±UÅŸzܳ6Ù“O°ÃÅO~èÃ8‘ãœ'®Û“#yÐÌ^Ù©.kÓ¹#“ÿÄ,LáÎ=xÍÃ"fÚµ*VÛçp-Éÿ»AE¼£KUÁ“.9Ò¦1gȹ>Lª»P‘²´5zÁÅ[l¯¶V·¥œX̨¼¡¯¢á¿¦Ë¹µ¹Ûì¹âÕíäØãçÇÑÍó¤ïàèΕèÞÓßáçàëÙóì÷ÜèãëæèÔÐàðèàÝÔÙÅñÛíÀáÛÜÐÚî·ÈóÕß½çãðÎØÕç¹Í¢É›Ñ£Õ³µwr=U©“Ŭ©g€™²•v–³wG´è”l¨qs?®5j- ="<,,*B!,><+H#@6?#>,O#>:,#.Q,l$)T=$D@Y0#B"S3%]+GƒH` 3%xJ"vOoDa lKx=r-*,6%:Q#O*r!A%V<<+™<†¬)J rr4HdpbhiR&‘0wMyn&-a‰@V™XHc€@o!{?ˆ=ž “@•PhO~?†.‘edrv+‰,N\7db/ŠiX1€OB7TnFYQn?>R]3rm:6\œ=DB«.VBžTeG—.Ž]£˜|À—¯ˆ½‰ll¸˜µŒ—¡¤˜—‘s–…£g“´™Œ”ª¥z˜±¸‰œ©xb‡º¢†‹³£p…žyv‹¾€„z®˜z{¶‹x¿‘pt®’bŠ¯–v‚È’xVÆm¡Sª‘‰{¯„uq½£€r´‘—tºž¬p¼‹e’‰•z¶¨Œp¢ Š¨¤£q ›ši‘—q’¶zp­}™®yP¡ž§z¤¤–w˜Í¥`}¸“uŽ»Ÿl‡Í›z|¥¬šxÇœ}¹˜€‰Îš¢ˆ°Ç™“·šŽdÒ™{pÄ¢”…¿¹hœ¼|qÌ{“l›±‘˜k’—sj‡—kz²ªj‚«…v¦¡˜}£Ï¦f±O˜Ä‡ešçœ—³²|¤ÏŒ„›´–uˆÅ”¥¡}‘­›Ž†¼ˆt«·p¨£Šz’ xºÎä`zÄÃ~X¬Çl7¯®fVáEvΩbEÏ·XF¹ªka©ØNcÃÈtBš²mZ¨«O]¸­|,®â¶/›ÌœI¥Õ¦XŸÉµ!šÆÄ'cä’?ŸÇ®XaÓÆNVá“5QÌ 2_±±IPµÍZ$ÂámE¿ÙWP¨ÛpÏÅH-­âZc¹ãsBJö—![¸‰!qÃ3ÈÔI˜Ð¡*†Ú£˜¢ª"XÎÍ+nèΚÅÁ%¯âÁ&WÏÌ9JÌ÷ˆÚõ˜ÈÙÚ³Èãå¨ÐôÓsÓÙò¶yÛêÊÉÜìÔæäóÆæêíÆÛõôº®ìÿ¿èØ­ åã˱êѺ›ëé uÞܱ„ÚâàÅîÓÃ4ÉÕ? ¹ê-¤ÌršÚLWÞÂŽ*{é¿=#Ö¬pÅ¡Cä§#ãH*¯L5—t/0ƒ›'(~‚*–X(.fy)(@ˆ+#?¹ -%½})K— >‹!#GŒ)7F¦=¾10-½#-7¨3 +LѯLÌÛ.HÚ©BQɼ<2ÊÐh%¿Ðm2ÉÎI3•âmRÑÜm"ݪT ™Ôn>˜ËqxÏ€šå~*¯¾Œ;µÄ“ x˲_Ï ;ŒÁŠ%?Ư)„ÝÉâ³"†Ô½7iÑÆ9ÖÄ“éÄ·ÛÅ)GĹJÁ¼aN¯¶/YÍÎB@´Õ=`ÔÈKJ×ókKɬ&°À”çjô”‹ß¸šç¯!Õœ'sçÂBŒÙ±“Þ’w¸Ý/FçÌ:|êí%Xé¾H¾Ä@WäË-XÛ¯!*ÕÄ1¤Ü].ÕÛM<·ÉXkÍël½»_•¸yz¼•OÕ§ŸÒ‰kvá†Dg⸠ݢ[$òÎ=Ö‡1Ö¦-ÆÉ@¿º7ÖðYsç¾+cÌÌYMßÛXE§ÔnDÚÆKPÉÓa¢ÊJãÅk<¶†,ÊÎ_&ÔÃm3À±F-[Ìž2䯓â )Áµ·1\Õ³IˆÅÈP\ݸh©½DO…¼bI¹Å$@·®,ªØL:´Æq8¿u3†¯g*³ÂY1¯Ë?Dªµ\Lnߢ(+Ò4YÜœ:’¿¯=W³¢R0´»:†Ã4¥ª¸AjÍÇ_ÿ 2º¶Ä È¼ÐÁ¡·Ãµ£Õá«¿Ôé½ÖÚ䕹ããçëàß«ì×ÝîÞãßÞçßðÛàìûÞèèîÞÔìéßÛßßàêÛí×ÎóñÉÈÒÎÑÉหßåØð£ÊÀÍöÄ׿ª©zc¹‚;}¬ÊGƒœ†“ə˹¶Z¼´¾È«Ñ\X-©zp(Š6p7Z8:@AI(1)&_:/`>£g]W:VPqYjTŒS=Hf\`TŒ6½m{=Y2ŽR‚>’2U*{O6`ws8ŠB'ŠMI1LtGz>Z=kkSVGnCEMkK?ypD1ƒzJ2…(=5š%A>›BŸU€s‚;˜pŽ©–‡ƒÒ”µŠ”š”±”£š¬±…}–¡h’·šŽrœœr|¿“©Œ­ysŽ‘‘Ÿ¶™d¢š™|z¨zy™Ž‚«ªyzµ›ŠzÁ˜€Ã—qu™‚kv­„}°žr‰‰šm¡z¸‡¹±“¶m˜ ¶‹—ª¢ˆœž®Š¹Œ¾Ž¡¡”g¢¨§“˜Ž“w‹¯›ƒ§‘£Œš¥‹’•}w„£~ˆš¦v–¦’ˆ¨’œz¨§·yÌ‹h»›z¼²›wÉŒ™p¯“sxÙ‹^Ž“{—‘¢½}–ŸŸœqzž‡¶ˆžŽ†’ˆƒ”®‹ƒžª›††’£Á•i–á|˜¥~‰š–„¤¼— ºƒ¥›ª‰‹ˆqŒ“šY|’uŽt¦‹~•£‡Š¥|lƒšs‹ ž/x¹Ž?qĺgBȳJpøH†¢½C5Þ°IU¶¼{¾¶M`Àº€BÑÚd#лS1δE:«ÂŽ1¹‹?²Ûƒ4Ë»¡:€«¥#—À°B‚¿¿5sÔàM0¥´JT¥Ã-dÀ®%H¼ÈM)ÃÎk^›ÒC7¾ÖYAæàPG¸ÇJU©ÏB7uçz*{è‘oÒ†ÊÆn/ŸÜ¨™Ýœ9ÉÀ™Éµ3kϬiÒ±°Ðœ4€ÜÞ]ZáË‹AüÚr£ëé Éèè´ìèâïêÔ¯øÞôЯïõÛØìÿÛâãýÇØýå±ÈâçËÁáéÛâÍÞÉÀéñ¨Ôè¸ËÞÝ|¡Óç¼>Ðê¥*·âKËÞY"¤Ê‹¯ØË@ÀÎW*®åÀf¨¿²°Ú™ \·e({ìt&áZ%¸Y0#‡'$_t ºƒ9e=()Y“- ;u%"Mr"9M$"K‡ *(_!T5/C© 4ž")£"%cœ"6À%2f!-*Õ""´%•#$;¿**@¹.ˆ?6,«F-¯E0`¸K~QµQ·5,1³Œ/)š’ &¤u!Ôk07˜°E‹¯%p¿1,’Ô"1\ç\oÊ:$pÁ59®N5âu,Ó`'@Ó@.—O%·œ3 Å}&/”Å''…±(!Ž%%n-3}È):N¸+5.³'GuØo!3ÙA¡Ì¯Tºë .Ÿâ¾AOëÆ9WÑÀ,'Ú¯7 ÐÇKLÑÊ:FÓÓ1$¡¼aRäÒUB¿ÃM?ßÞL$¥ÌAU¶æn2ÀÁW&½Ýx-sÎx?¢×†K·ÆoU¬Ý§9yÈž*‰¦ë–7¥Ïµ•ÞÄ!§â®%†Á´6yÔÇY€ÊÄÈ͹|ÑÌ:Z·¸,RÍÄ.gãÃNUËÝ2eÙ¿D]ż56¸Ð’!£Ó¥ ®å‡к›¼¥VÏͬ”µ™9¡×ÅF†Õ­-Ö­8¢Å›-nÍÄ-ãÌ"HáÓ ˜¿Ë"BàïØ>tãÆ;VÒãe5±ÛDPÏÂD)â·*½ÛwA«Ê‹9 ÕS9ÅÒ¢«Ó›ÎÚs"ȵwK™ØÏ|×½,Éž.„è´Kyî°.RÐÆ[âµ'¼Ä'pÚ«2ÌÚdÃÙL̯…Õj?;¾µLFÔ‡;oÍw,^Ñ°M;³¢BCòR¢ºÀB\¾½Kj®Ä=Ⱦ¢KÑÈÄ µ¶»Á±ó½°Îïê°èßàÁ»áÿÚõûÞ«ÌÜöºÄèéàãáÙÉòîëžçßçïçÚÿÂÊåâÇÚôåاíãÐãÚèÜË×ë·±Üãó²Ý³è¯¹‡Ï¬žË¡Ã–¢›¾°ä˜áÄ—’Ì·¼ÚD²¯ê¯Ý–«iSºÞ¶=¾s|#V!R(o%IG)93@1hƒp”).)24?35F1*2EV3J0B9*;lRG3 EB'`K N(1 R!‰ -IxH)aJ/‹4k/tL'W ;+‡7>;{.YI‡7\=ZBLv@nˆGXkh|ƒd4REcn¢g˜@žKƒ{‹PjKWH‹VrV|[ƒI…Cs˜D‹@•Lh:ˆT…9]{@†J†'„B¦ft<Žol`K:{@A-Nn7CHuJJ_xKEn\O@R}=(”BX/§_—H–a„`uŒ{žzŠ½˜§‰¿Ž”‡„„m‡ƒ‰’•‘‘Ž²Œ•œ”ƒ‰†œv—½‰g§yh“±‰Šœ“t•´q‹…¡ŠcŸ¤–zu®‘z‹ ¡v‰­¦…±{[‡Ã’…«‰‹†µ“Œz”z­„Ä™³™¸~¸Ž—{®‘ƒ¤‹‹‹ ‚³~¸¡o­£¿«¢sy‹t¤’‚ˆ™™dŸ¨Ÿ}©”’y–¸˜£†Ï›}`³¤‚°”„†…Ž„yÏŠŠ†ËˆmyÈžˆ}³Ÿy“«Žœrņ‰‘È¢€{½˜‚‘°~¨Ä‘Œ©˜uÆ‚©‰««‹ˆ¡¤‘€ “† °››«¯‰£‹ˆ©«ƒw ©ƒj°±v£¯“Xšß˜K•Èyž½›€ŒÄ•n’{t›¤Ž°¨‹ ¥{‡®ž†€—ØÎe’ªÚm‚¿mM£“qnÊÃ[ Ï§NbãP`×µLB͸e`ÕÍoP¼™gaÒ¨X_·²rG»Þ¥[¤ÈÆ5§Ášb´×³S »Ä+¼À"“ŸÑAFÁÜ2KÔÄ\?Û¼H•½7MǵKTØÄc(à©<6Ä|+iÒjPºÐGYÓ:’¼ 0yÁ2§²pF‹Þ™'´Ã«¸œ ÃϨXÞªUyÓÌ+—Þ¬»ËÈ1QîÙ`oôÓ[bÜî‹ÔÜê®tÒð¢ÒãêŠÆëá« òãØÉôéÅøâyÕ÷å³Ðëá¶ÄåÓ¢¸ãتWêéÔÍÚܯ‚ßÙœ7áÑÔEßØi8íݵ'×ßÍhÊÉvTÇÚž&ÄÇPJŸÒ¬Ù¢¤×Ýd¦çš{È«6"ã}2Ño*ìg&l+!~tØj)h*&:ˆ!G«",6’*P­45•%FŸ"5;x%)!Î%%#Ž!,R¨)E¦),#Ð!-3¥"Ï)°5&$Ë3eà*NÉ)#$¯7˜hUÛ?Tä])!¥R)0Ïu(¾i;F¦“*>„+Ŧ9Ù”,!£È †¤* ¹*5„ÐA mÏ 'zÐ0'…Ö:10ÙŽð|9&ÝC()ûˆ,Ï•-°!ªl"µ$ #9¶™"Ó·)PÆ*/iÔ:'pÈ6Cײ"zת$ ÑŸÕݽ%RËÒ=j˾SLÙ¶iɾt^ßÕf3Õ¿.LÌÁ`¯Òz7ÂÇ\*Ó×(PËã…'¤½rЈA´ä^&§Ü‘o·|(«ãe±Ï~sʧ*xÑž1ˆÛŠªò˜ ¹ÞÈ5¦ê¶{îÎ#[Ó¼MàǯϦ—ÚÎ){ãÈ,Fã¸Z^ÜÅ>¾½/6º×>m×ÞDYËæt2»·‹,†ßŒB²ãb4ŸéHÛ»bÎ¥VܘSÙ´ lÞ¹ ©Êž•Ò²4ËÑ>gµÁU¤ÈÃ(QÝÁ -â¹+%ßÂ*!ÎÇ<.»ÉN;ÖÍLHÎá_·îVdÓÄnKÕà‹PÀ§vŠÍ•6¤ášTm觲«Cæ¬4ؽBÛ˜cå¸:Ψ&á¶Xéê\sçÎ;rÚÂs>âÜS/ÛÐ@¯Ó*¥®cP¹Ís.¶Ík6µµ’­Ñu¤ÎeCÊ®}/›Ê²+£½ºZDR*Ÿ?dDŽ=a.zCL+…CY%…Rr˜mb†~TW?|`“7™l’_eLRgT™`‡f®N’A7™4š6®XI‡@]*žb”^‹QO't8ŸLZgrei>]Q\fQSzKv>?[jGD}lL-l~,MA…6D:*ŒDgV¢z…€‰²‹¨†¼¨Å‹Ò‘Ï• µœ”®…ž­¢j„º¬„‚®£‹­t›š—§…ÁŠ‰™¦©½Ž©‡¶˜€ƒ²šuˆ¶‹Š¤¤º™­À…‰bŠ§©€£ ´”£•žgÙ‹„­ynq­Žov×̒ř½y¼°Ü£¥¡µ§§£ž~½”µ̬™£™¦ª¯¢€‘”‘Š«ª¹ƒ¢”|ƒ¾£ˆ˜ª™~‰Ázv‚Ÿjˆº¤yŠ«ˆ}b¥Ÿy£—™“­|š»œŠœÀ£œf»™‘›Æ“Ë´Ÿr‹«¡¤„À–œ‘·š®Ž½¢žˆ¯š…„°€—¹­cÀœ§‚¨®–œªˆˆ¡¶¤}«±”–Ÿµ–´’™›³£q£½•¤–Çs‘ ¯Ž¦™°’z¬‡„‹Ä‘wž™z˜s¨–¤¬ššV„ÊÙ6kÌ·x[Óabè§`c¦œ8DÒ¨VKȸY.ÕÅdQÊÈv=ÀÆTX×àWPÁÂdNÛϘ1µÈ²$®È³#ºÛ•4ŠÙVÕ»#ä¢8‚Ú·dH×Ç:@¾¬Yg·´%ZØÀYWÕÖdB ©w:ãßt"ÐÈ[Dß®Q5·ÙX8’ì¥@ŒÞŸ+ÌÏ|ºäš¦¸‹.bÒžÃñ© ™×³:cËÕ-jðÊ%›¼©+}çÓšcæâ“DæÐ_nÓÙivèà‹´Òï˜ÎääÂÒêìǼôðÁµôáªÝåÞ¿áÜÿ°Àßç¬ÎÏÒ”g×ñÐÇÍسHÐãp@Çäv,ÌòÉUºÖ°½Ù—2íÕ²7®Øl¼Õ—Ö½m,뽦ÓÍW™ã–À½”^îº,,´J&&ÉY((°v%"{'pj*.^=*"Z3-E‹=!760Vy6=$i0Lš(&Hp#!4¯5-¼$:)&U¯#?¶%(0¶(,»3})kÍ,.J±5 ³Y³B&¾M1hâD52Üc<ÖT'@á^>+ÈÊ[2œ©-­¢0Ô~–½0¡·;‰à(°Ò0)Kè;eÖ&"‰Ó,,C×O'&Í•2¿m53õw6Á†+%²’0¾o%°£?*t 0{›)Œw*9m¿(-iÐ26Hç8(~Ó¤#Gá©+ Òª!Öè(‹Â±-<Ô¾BZÊ©3ŒßÑ+3ÈÁEV×ëfIÔÆG&ßÔ{¯Îf_ÖÄI8ÂÊW3½äu ®Ô‚W²Ñw;ÔÏs+ÒÌŠ|Äv ÒáŠ.²ÕÀ7ʧ5ŸÌvIšÉ‚Cá°!¢Ö·¢Ï¼/—ÚÑ?[Ⱥ'Û¶±Õ³^ß×EÀÇ1;ÌÃDˆë¾:\ÒÊHKíÛ @ááCFËÙ˜ŠÙš#ÈÂ&ÆÜ…ŠŸœ<…¿Á ¤Á 3æ×3rÝ͌ڦ%µä®’ÊÃd¿0sçÞ?”ÁÒAeÕ·@eÑ´Q¹ÙEeÝáy Éê\LÕÂ0`ÛÚ7.´Î}CéÁ…EÏÑŠ¿Û–/¸¶©\¸³—LÍÉk¿Ýž(ÎÀ.iÕÄL~÷-O׶IËÕ/ŽæÂ%:×È,…ÏÞc/¸áZ&·¾>7¾½@(®«T?µÆ^F¡Â2ºËt2ŸÈ,~Ô}6Õv3°º™1{Ì© 8ͺ*PÅ‹:VÈÊB8»Á/FÇÊ8NÓÂZTØ¿n:’ÄWAĶ5;¶ÛyFŒÎ|<…ÈrBŒÄa=hÝ€<|ÐzL‡ÏmAˆªŽ@\ƺVTÁ¶TMÁ˜K_»±O›»ÇO?±®`NÒ¼Uh³ºVs¬Åv˧¡X±¸½² é¬¦ÂçºÐη¾¯­£»Õ§åðŸ¨ÈôÄõèóØæãðßÄçâÉÊÍ÷²ïÚÑǘîòÐÊØÜâ¥ÙÆÓµÓçÚ áÍѸ˦ۧ¸«ã˜ÙÄË„Ï•³¾ÀÚÀæ–šƒ©¯ä§ÒªÛ£¿¢¤©Ü®½†Ô¼©ŒÒ°Õ•x¶‚cž•p@Ul;LUn?M.,O24)L4B;"9>!88A M B!-<'[2+L)I)P57ZA#ƒB!YJ4U -YEX+zC€Cu(MJ9>› <<Œ-R‡:E27=™7GM›,T4šH=2ŒDD#¯I¡8’‰lwtnV4okf†E?5Op[zx~Xf?u\—oK’$¦F‚=—RI§;…/¥>•A…jxEšY„x£OŸi…jg%|fe1…_W'^z_c.È­bM¶ÕDußÉQ?ÇÔ`Zª¸S4 Åg+ ±H7¯ètC¿ÜmGÀÐRM›÷ˆ)ÏÀ.bº™x×k)£üŒ<ŸÛ˜0‰ç¤0VËÌ"_̽]ÕÓÕÅ«åÄ2PâÍZäâ™™ÕÑTZÊë—HÝÞnƒÛÛ£äè茶ß츒ãêäCÐÕÑ¥Aâݪ¦ÚШQÎå´!ÖêÁ7åÙ•-âÒÍAÝëÏHÊçnÇÎh1ÎѪ'Îè”§ê” ½Ö‰%ÖÓ“šÄ¢~Õ£)Ààž$RÂÍOаÛpÕ‡Þ<ªŠ'$eQ/s‘) G‰.-#£*+;w*)H˜0"E–, H´!@‹"!•)?Ÿ.T³:&Ú!%KÏ-5Æ&)Ý9 ]Á0A®$l»C, Õ[,-¸W.;Þ/ ?¼F!Û\!:ÄJ'HÃo/‘Ý>©„, Ìu( ºˆ9˜µ#™×!xÈF!dÛE3Aõ&dÃ.`Í<%4è΀-%íž'Ô(Ìe# ¹u?.±†H4z°1œ•8Å”²°#*\Ã<'gâ;(eôŽ4½Ä¸G«Î®Æãª&®·ß`¿¼¾DÒ %OÑË'ËØ$lêÓAì·naÙÄv6³ØapÞ£]DÀÃfOÐЗ1»»sq»µ“N£ÃyWÃÂhRÅÄr@¨ØLv¼˜+o˹hPךC\ÎÃJ\¦ÇqF¸¥Dgµ¿ycæÈZgšÈJI¸£]`ª­’\¨´i3°Írb¡°{O‚Ç—Y{ÇX‘©…NmÑÂ^B­°Ieº§MfÆ©Xc·Â/sDZUa¦•^¬«Öik«Ål™·¯WÔ£ÆnβÊÎ˪Æà¶ìÖ²¯¼»ÏÆÁ´ÍÁªÐ«ÎàëµÇÌëã¶éæÒËçîÍ·¤ùÂëåßÍÁæèÉðÐÄÎÀßœü‹ÿ±éÀЬá·é¤°©ãÊÒ¾º‹”i<ˆ¿Áðµ»”¤}©›Ãˆ¶Œ¦™«ž³’ÄŠ†iš¿’Ѷ®}o›’vN®LjCn(e7Q0pd(BqRB#6/.>94<B/">?&5#S>,C/Q^$<#P(SJI_W,h(2*—1ƒJ<Ÿ R10C˜.*P›G7Š@g‰5T2Ÿ157™(-;§A8ž<<(“OUˆ2˜d‘JzGg˜8(]iq_~?xH£^?#eƒ‘›’S‰M”MY¾K–m©/z0‹^lK„6¨,ŠBxMvWtO¯g€mtfv.rW…f¤Z?–xB4q‹UVXŒ^!k<7ˆ:&_%GS¦J™ƒ¦…’´˜nĪ”w·±|vÖ”¸sµªŽ~†È €»›…©Â¯’‘³¢|‹Å•r±³“~¿‘v…¹¦y‚Îo«±§ªj•¬‰…½¬•ž¿ª©Ž¸¤{£¤p}”Œyqœ¸}Ÿ«š|­¡ºd¼°¦{²Ö[»–ζ§ÓrµÍÖs´ÅÄu¦¸¹x®£Ìu¼°Ÿx±¬Áˆ»„e¢Á¥Ž° Šv™ž„d–»Ä„|› …ªœ€{ ˜{„º©{¸£™…̨…ijŠ­°ˆ{¦¬›^Í™˜|¾™ —Ë¥¨p²µ„j­±«yæƒ`¬¦‹_}šµ_™²¯z›šÊŽƒœ£a‹Ì‰z‡…‘¦®š˜¬Ž‚°Æw¨’yp±žÎ`£µm†ºµz‹Å£Œ{ƒÈ—x¯§–z¯š‚©Žšv›­Œ£•‡¡Æ’=WŬ8k´NDÒÂPMË 2b΢1»¢4Qá¶\+ͬc6­³`LáÉ`SÕÄf<¸¾hLÓ³£, çŸ ¿Ñ—ƒÐ›@zêáEzÉ©=FÆ•h¸ÂHEÏ›7bijL€àª8YØÉsUëÒhCâ®S>ËÂR ÕÂE¹ÂhD¼¼EW‹Ï%‹Õ”'´ÖŒ-¨êmQiÍœªÐšŸÝ¡£ë¾6f¾« gϱ±¾ºƒçЊvðÑ›8ô×€…ñß©vïå©tØá„‘ëÚ‰˜åèÍ‹í춛ëó”…çèb†áã£mîà³»ß׋;ÍðÆêá­†éà†EÅã~`Íåa­ÕuQÍKäÛ·fµÍBÅÃc#ÒɃ ÒÕ²D¦Í¸SñæuaÑÒëY³U%"½k'ED,"eY0}5$):l'6€'%Bp!1M~3.<|/!=|"#8q!$I¯*'’(%´ &Y§""£%ž%//®!©%&† («0 ,¦D3PÓO5‰M0±;?·9$‹@A×S2!Íg+)Ê¡*]-7xÐ]$¡ž+˜ÍRž¿ƒ-º±](…—)£¿v8µËy3³­Ž!¹®­GZĪ9Rߊ\º·<”§ÆR:²´)\ºÁi]ºÂlNÈÍfH¤ËKX²Èw@´…9»•Y|ÌVD^ϦVnÇ€bÌj@‚Ï“-U°ÉYOƯeZÔ•[t¶™oJ°¿V`»´dį\/œÄQ\˜É]­‹§TǙǕ‡½·ÍÅï¿ÞÑÓÑͽöÔ̼ë±Ë²Ú×Å×ßÜé¹öÝñ«ñßÍÿÒÌÔ˳µè¨Ü§Ú¥ñÎڨ×õÉõ°Õ˜â™’‘¾Šƒ¯×âÒ°´œLw•@[IŠ‚Áµ‰˜c]’˜cS‘†Š¼ž¤DV·Y|¨ib°eœ^›°‹ÉŒ„f8²žyE¦1p1@G$$9=.':.6%36 =?T&JB“*<9RX\Nv*S%†T„.3$t0#‚&)pPO¨:U'e+I9ª2DK–36#c,E)ŒH{%‘3†-{RahNl]`]hD-‡Iubv}j˜d‰g‡Qcgh9–TÀ;^Œ6e7ƒK¡ƒ~\¥P¦y}x¯G‡x«R—lˆd`$Ž{cd•V|4[–8RH‚rOl”<6˜l?NIŽDTš\œkz{«Ÿl¬¥½i“”x¸©vn¯ˆ†eœ¿‘k•—„oÆ“˜Uš‹ež­•j‡«†w•É•xm½x¸žv¿ o|¿t‚¼¡|f»ˆz…£–b±š^ˆÇ¯°¦¶msĦš¤‘|l ˜ƒIÆ•Ÿp¸²ŸXÀš¾n§›Ã`º¯Éj®¢«a«”«pʲÐrž©­t—£²‹¤¢‡ª£‹p€º±‚š¤Šq˜µœl‰ª‡L¼¡…rÕ˜wuåy}§’n£x°ºyˆ¢ |O¬­—¢¹ŸvÕŽ†k¥–b¡¢¡|©ª„UÁž”[r“w–¯ŽŒ™³Œ^¡¾ª„ŒÚp°¹~™«§—¸®_™Ê£Š…¦…Á­~k¹¤„o׺~vÈ®{sÍ¥„Fº°|Á¥tp¼q£»‹o«¡¬yǯ«Š›ÐæK~ÉàsZ²Â<0°ÁSh·ÖWoØ·iM¶ÕlNæÈrN£¯JZºÏwbÖÄMSÕÏVNÓÓ€U¿Í >:¼HsÙn9sκ#§½Ì*S†¿ GËÖcPĸMiò»Rs¬­$pÁ»dNÃÉO[Ïßt´Ë9:¢ã_'ªÈe«Ê_;”݃"~Ù¬\ã¯$oîu6ƒà«#jшÛ²%¦Å¥:Û½"^Í•ŠÓ«œÚÖ8KßÝ5QÄêh‚ëì}`ñàš‹ñõæßN}ôé<äîÀ8îèƒÝÞãmYùàsbÎò±Mìâe5ÃïцðÕ¼îà*5ìÚTÖÑ[ÂÕv"ÊÅ'oö3'ÍÈaÙX"sÚjËÈi™¹Á##à¦W¿‰Hùˆ›ºÒÛ¾6&ãh#¸š!,\–''«Œ7GJ'&>“)3$E$$BŽ'<†+$8‡9U£8 —7)³(.+*OÆ+µ&DÑ(8Ë'*(0©'.®&&Å+/AÔFËG<Þ8),­h.+ÒI'7âH!-Ê|)²%¾¸ ÀZ#.Ò”+žÚ^%˜Ùt'¹*-Wß=$YÌ>iÆ%$„ѱ!%Ú†%ç„$ò¡)$ß“) ½r¼ âm//’¬Î8!–|$ž®&+e¶,*[å†)FæŒ!^ߣ §Ð§'°À•rÐÉ.AÂÑ`¼ÚrF²¼dF¹Ëv`Ü´.hÄÜb “â}-–ã†T»Ðd,¬¿†<‡Ý@ïÕ˜C²Û¦'W㾂Ê;½Ä†$ÁÀ¢"ŠÜº’àÁ' áÔ3ÔØ(qÜÚìÊ›ÛÙ-]ãÁiÙÓ9λ+WØÉG<ÞÁ3 À¬8E¿Ök0iÕ³VÝVœèu"ž´¥„Ð"m÷%o¾¤JàÁ"fÕ±&tá­ˆÖ±E…¹Ñ,bëÁ'vÚµ>ÎÂ%ZØÈ1Câ¸RŠ¾à?*ÃánÉÒQJ̶BLÙÞ|TŒçr:ºÂ™ÃÉ&wõ– ×š›ø}0œêŸ#ò7ÚÌ oÓ¨:ËÑ ;ß®Mò¦TèÏMjäÀJ©å×~9šÐUt˽9nÀÆA_σRå´?ØÂ[Q“Á‘CÒ|F¨Ð{+€ßj4aÍ­O7¼ž4RÅ‹8E¹¡<;Õ¾M)ÍÖ::ɶft˪p4¯Æl_ºÅm-ÂÊMH–Çrf’ÍgSƒÅi:´¤œmmÔE‚Õ|E„£{Pn²«oF·½ScĉjsÁ¾es¯ÀFF­½`ίÀOz´±`gÌ“^Zœ¹Kš´’fÀ¼¤Ï°µÁ¹³ÃÔâ¼è¸çÙͼßæœË°ÉÐÅà¿èºè±ÒÎàí²ÆØÄäñäÊÀëÝÞÙ¯¸¤à±êšè”ô£¦¹§®¿¾©­¢Ð±»¶kRÀ`‚AŽ–Œ±¡n_`­ÅĹ—¤uz•´pÍ¢•tÚ–ȱ\ˆ_‹Î‹q™B}[Œ&–Q‹BeME:>V3)mQ%#-2%GO,K"D'1(A#<#E&3-L;;l8!o"<uTG*)q~Y– L0£B.£Cw<5‹<‰ CK;ž@A#‹N40˜5@(—T;&™¢ Îm0 -ƒ± +Š³0‚°5"z½$4¼#WÛ'-y¿ÝÍn-ËËH[Äâ?I¬ã}ôÒˆ Ö| -ªÔŒ®Ì¦¤ß† üw¨Ü· ‹ÂÑE…æ¡–ê»nÁ¹5€ÔÔHbÝÅ.Ö«'OÑÒX!ŠØlF´ÚT_Ä¡[´¦^7©×J<«×x*¬½j2pÒ}~Ì;©Ä\Q¥®v0Pس7uѵ*S½š(vÜ¿K-ÒÅWBƹ@M°°k*šÉ`6˜ÎiI§ªRI½£‘]‡Å~N‰ÓŒIš¹iT[ЄkΗMqÇud[¼ KU¥£TCÏÂc^±ŒGE¾ªTaÄÄdNÀ¬sQ½¬8m§¯]D¯ÊXpª°Kr²¾Â¥§´¬ùÒÕѲèÁ¹åÄÄ­ûƾŸÃ帵á¶Ù¢ó§Õ´ÓÞÈĸ¡šßÙ³ÿ¸ãÍë¨ç¨Í­¨¢ºÄ½–Œ¼È»Û¨Ü¬…¤£žÄ¥×‹”`H2^”Cp‰›–h‘´‹v¶—½x¶¥žrEy®bdƒ¦‡zœÀv*v}ki¯Æ‡O°§‚LÄf„N£¥`\$ mU:..&@<@c*P)RY7$K69JF$1'J.(K9OOH=#rI8j GNC†JlLt#M$Ž"K)I 2X€OC—;0 A;4H q'I'£G10…CY@ˆ!W!ŠvpIe`z—‹k“UŒ5e=ewg–\rL™d”61R“ZY…Ey;¨BštƒOŸ{ŸSŽn~V…s‹fpEzFsmŠTƒXšR”f‡?c…S…S›i‹Qˆs“jHŠ‚R=C‡'VG‘A”{«h~¸Œ€j¸—~¡¤}”Á¥‡r´«œ|—©|…›­”Á tŠ–‚€¤ˆP„ŸŽ}‹«’‘m˜…}x³ªƒ„¿j©–„e­Z†Ä²y‚Ä¥n•¥©¯†¼–Œp¹‘Ys½¡›c“”Ž{™˜yxÆœ™tµª¹‹ÃœÄ†¨µÆc½½Çl¬à‹¤¢pž{ž¢¤“m“°µ“Š£ˆf• ¢Š‡Ä¡‚©b…Ȫ•„»šZd¶¤ˆ}Ž¯v€Ç¢‚Á½sI¶‘~o»•tmª“…œž u²»U¼§—u±žÇ‡…«–n•žŽt¼•”„¡µ¦‚—¬§ˆ¢¼”„”£œ‡–Æœˆºš\•¾˜cŽ«ƒtË©eŽ£¯llÀ•d]·œo¼µ‡—Ѩfn¤–«ˆ½ªx ¥ptº­™Y ‡ƒe§’”‹¨¡‹p‘°¹NW¼¼WBÃŒYqÚ¸bb¨®8qÁÖvQÆÁgdÒ¬ŒAЩAC¢ÍahªÆr-¼­R]×Ô‰-¤æ¥!Ù²•§w/¸Ö³AhÇ·N{ͺSqÁµZ>Õ³gZàËEfâÆ3•Ç®f1¨äPE—Út3µÉ9Zhêt˜Ý$¡¡Z8—è”#nî¿"Uׯ(KªE@쬲Ù4F²u8@º¶#VΩDVØÈ+‚Ù´ŸÄé(„ßÑ#6ããŽOàÌvUèìˆPãÍJNÕÜUZãô:Ø×7âø¥Gæß"nâî²Gä÷®1Õó\#ê×Q äáC5ÏÌÉ7ÐÌ2HÉÆi-©ée5ŠÄ5»²*1LŸŽ‹É„.›Ê¬ÊΗ}ä±%"äº;Kì—9AÖ½> -ªÅ ÞÃ87ë»+·ÜC$|t#,„R-ka+-L­"%¾&M—&K¥"&9(ˆ)3™(Ì+- ¶5;¯/'®/.!¦7º #$Ú&«222¿$¨).È%'°/%±T5¸(*/²_8µXÇ|%à„ªÐ -˜ÀC5º“/În+‘¿,+•æ7R,)qâXdÆ-&ƒæcnïx-#ч ³¿#åa'Òº8Ñž1Í¢- ź/%tÚ15—Ð"&Â’ )ÁÊ!YÀ03Qî#:ëx$;Í›{Ë©4nÒ¢IHÀ‘//°¾UVÊÉ-kÓÃ,[ÜÐDhÓ²/Q­Ð3LÕ²}'¬ÒiEÀÒg;·Í]*ÈÈ‚ÁÞ‘œÜž@Ëâ{"rК©ç¦!—Õk%…³¥ Ê£(뼘ڟ€âÁ9Žßίí¿!§ÝÎ>xØÛ)á»vâ­"ÜÓDLÊÌ]Øî<'§ß]'ÀÔM5ÅÌb3¿âxóh ‡Ô‡#Ÿà•€Ý¶P®Å«›Å‹Ö¢|ÓÈ*MÚÃHÞ¡H­<ѳ1×É,áó'F·§cÚÐY<­ÁepÎÌ<;¿ÉFNÃÂVU¶Ãx6ÙÍ`º¶d.œ¦n4£×a3ŒÂm*vÈ« V¿°)Ï¢a¿Á:bο:JÂÉNgú:S¶—jR–ÈDn«­^dͼJ2•ÅqU N;ÑWR{¦’\p°‰L]Ìg3·‚m°¿b4¸¬EŽ¥Ç§ÆœÃŸ¦Ó­ÈÀſų¾£¸¿»Á¸À¨É¸½Èª¼¦Ã½è¤ã¡ã¹ÈÐÐËìÂå¹Ù¼Ë°­ŸÔž¸¥º¹²¤—ÁÔ±¸‹­ÄϺ¶¬ŽQ• {;+³Gcœ,ž¬§¤L[™‰¿¥Õœ²Á¯bÏÁ’i£¶U{‘’€išcey’€u}·±†]„‚t~‚!kV+BrC7/&1J@[EF0K Lš\}8}*œQœ^Šwˆ6„pŒAdWZpa;¢,}k„fr‡Soj“r„\‚c_fS•=L[|B@UMP&p¢7HE—Os6ŒW‰w•w…„q½wƒr«xz¢ƒ˜~‹†¡ª‹¨ª …œ´¡~‰ž’xŽ‚©Š¥•«‘´†|‚°¡ƒ‡Ç²‚µŽ´„–´ªº¥¸Ž¦žyŒ—”cЙŽe¾‘–Š£¶¨‰²¢ŽŠž‘¯l¯–o†»’]©’j»À‚±šÏtŠ²Ýo¯¹Îf¨¨ƒ[´µ§ps¨¸{¥…„–¡™h†¤ˆy¬³Šw­…U›¬xv¥¡‰›œ”k¿Ÿ~rÆ–Ÿj»§ˆfÁ‹rž´Žeº›Z©š¡pŒzsƒª¤rŽ§Ì˜š®¯‰„§¾€Ÿ¬¨l›Š®„¤°Ÿ€¤™ÈŸ–¥œž…¶Œ“°™„‹†…â©’}ŠÉ„•o¹¢…Ư‡²²s„²“ƒ—©³ƒ –±q‹Õ„¡¦’p–¥‹ˆ­ª˜u™¥LgÉ«!nʵfU¢¸+bµ¼3wâ¨gÌÃxU¦ÖTFÔÂ\AÙ¼VBʵ€&¶ÊNOÝÄ:?ÄǸ2£ç4±Í²<›É¡/з1Ì¿TËÀPέdD½³E_·Ò:ˆ»À,C¬ÈS1ÑE5ÒÅCD°àj$€à ÂêH1§ÓUSbÎ’?a̱#GÜŠ,‡Ò[<1І,bÛ¥$iÛ£³ÕÃAWÑ£Lv¯·(sÚ¨!9è½&vÈÝ)RâÕN`àî¨6åÔhbÌÇTgæíakßí¡uÓë{.Ùë¢iêï¯vÛã´MÑÊŒ?Ïë”bÙ¶œXøИWßÏ^EÖæ’fЬuWÓe&ä*}É)žÕ’@`ì†DϾ©µÔèÀ¬$;Ù–£Ë‰ ÕŸ'Bá¦$¶ ' Ô¶3&[/h[& [C+;c$#„!.e+a“B™-EŠ/"<ƒ/,9‰6#·/)¹826ƒ#&-²&)-Å%&'®("4™%%Á/-²1)Æ!7:§C*0ÎM!)±6>2Á;/:²o2±P)¾J1̤(›!5«Ä )Â{%/¦Â08…›*'uÇ/3”µ$CCæ0+WáE+oÖP8DûŽ1Á™Î{6ìt/"°¯G ¬ž0Ɉ)Ç5€·£˜'%°ˆ'5r¤$@rç25Kä&ÏÊ·.”ħ™Åœ"vÀ•AŒ×´Hc³C^ÔºRƒÅ¹GIÚÂEEÅåPCÂÀM<¿Ò3ÈÈa7ÁÛ'fÇÁOIÈÆiáÆ•.ËÎZ4ò­4¬Í’²É—Á¹€#ËÕ©}תI£å“F¹¼£4†ÐÀÑ£"‹é¦*’×¼5‡ÀìK{ÑÉjÔ¯\Ù®%VËÊ)9Ѻ/mßÃ*'и?LÚ¹ OÁº4Z·é”,{Õ›<ÌÕ€¶æ‡Yß®A¡Ë®!ƒÈ }·£@åÔ^Ý×Xá¦UÕ¸ nÓØ5Yܶ%¢ÌÅ0SÍÏ4LÎä>kÔ°"EÔ»aHÏÞ;K×Ä+iÏÆ%/ÆÚ|è½y ³ÃŒ4°à¢C»í’¬ávOϹŽ–¼º»º6OÄ‘ÁÌÂ-r½¶]àº)PÔÀ/ZÖ»N\¶¿X¿Íg­½dIàÕFV¬äf3©ÔeK’½g<½Îg)uД –Ì`O~¶65‡Æs{Ѭ=Hب5_ìš&e¿ÇL2ÊË;_ÀÉ4_ÁÓH<”ÂAa¼ÐON¬¿IoÌÆgm‘ÓlOƒÔrR»qX[Ðtb…Ÿ‡UjÉ{Bj½ŒHN¥¤QMÊngaÎŒZtÓ•gKÆhJ©ŒVg®²A4ž•I,–ÀSC»”m®®©:²¸¢H§¼Ô˜ÓÊ°Çšó·Í¾ÇÉÕžÁ±ÓÌÔÀ­äîí·±ºÒ®·ÔžÐÿÉáªä³ñ˜È¤Á—µ{£ºªÊº½¢›©·Ÿk¨ÏžukO ttUº¥iu¦yZh¥žƒ®—•‹Éª§¬¿©´j䬮cÂw–¸¤Æ`P°›^7±¦€AŽ‰dX©iDb…‰|4H*230&6 9?3,`M#J0.8L)PQ F"O\,3JA2NcJ)^1=0`R(ŒZ n?g.Uš7+}#.s'+ ^ 4(¬85;—B‹@–F/(}9A!}DNŽ8…+‡€]Dx_oQU\L'vP„˜p_ˆlƒ}};tPplc¨v–C}4’5rM|i†a«aˆe}@zIG‹j¢A…|„ƒr„m|eM‹‰t}%ÕŽ"9ÑaRБ °—1‹O#,hv)#h¹!%’(%O‡ '9½ ',ž ".ƒ(&8-3'¾."­#'#—+4ˆ$/® 4,» -$¸(,¿*"´%$,.$­--´P$ƒe&M×61ÈM0 »K,ÊE=$ßl-AŠÃ0­‰">®n+"вB3—Ó1#‚Û.‚Â!@yì´ ]Û1 ZÖY,sÖ\"Ò‹Ò{Ú^!ι@;®—4-•–'Þ‡#u›1)°¦#$Á«14tÇ &Né’%rÞr)_Ù¢#Í£ŒÙ¡,¢Õ´0SËÒ?SÉÛ6iæÀ,cÝÌBUÆÌZ^ÐÓ4eÑÍf*°Õp1¬ôs,á¹*/Ƚ„R˹|=£á˜ £h*~¼†(¢ë~#ÏÎOÁÝš…ØŸ*qÌ­!ŸÑŒŒÑ“!Ô¿.‹ÛË#ià¬`êИÍÉ‘à­ÙâG/µÉ(GƽikÚ¾79¯Í:IÅÄJOÄÈhRȽz/ÊÎp?ŸÐg+ŽÍ\ ›ÇJN¤µe*uÑ 5B×·BSб?>Í´JÎÂ1b¼ÃJLÂÜ.Þ¹h_ÆÚ[9ª¸Rbÿ0€ÆFZ¡¯t@Á‚Q‡®}Gp½iQ†É]¡Ê…D_¾{C@Ä‹BZÞ_;m§…LL§¼fX¼¨hYǘIJÅÂwG±®u0µ·5‡°ÃlºµÂq×­¸tÀ´Ô¥ÐÝÓÒ­¼¹¹°­¼Â»®Á°Ç¸¡îžÅ¹Ð¡Êã¡ÎªÞܲãÈİǣˢ⼾½š¾µ¾©Ï¾”¶¯toª¸ˆL˜¨{b¢šzµ¸vÁªmD¶tQI¹“k`¬˜mZµÀ_[²€b›mdc¡ˆgC—xcXŒ¦^&ž¶x0§j‚F'{UE/YC;3()!M4T-<8$2=(1c -/) 9":;;< Ui -R… OE#QP:E'N$‹3Vu…W†9]8—7Ÿp a”œu”»§’w¾œkv¹•bƒÂ™r„‘i—™sš™À‚«–ª’–‹™|‘³‡£«—¥ŠÃ~xy®¥tµ‰„¥†²¦«rs°—Äw•ªsŒÃH‰¹™­uªŠ™‰µ³‹~ª§‚k¹¥‚Èš}¹Žxv®¦¹w§ ¼¯›°Ž—›Á²«¬ƒ¹©Îˆª©†Œ‰£žœžŒ¥˜™|Žº¡f|ªœh‘¥©Š¤¸Ž‚y³œ—fÉ}‹‘õ\u•z‚³•¸sÁ¼zÀ“‰p–††k’†qÃ~œ|Æ{¤’•‹]”’ d¿¦g¢¨Å‚£­¥v³žˆ‚¶’«„·±|x¯e¢““„Š“¡_‘¿nmt¸’kpǃ…Ï´œcÍš‰mµ•s‰¬®yŸ·ˆšuÆ£˜”œ Š|Ÿ–›’¢²y‚³•~£›£^n»ºYt·¶brÉÊ/j¿¾CâbEجePÓ±m2ݾPeجhZÁ§_>Õ¿_B´ÂhF¦Æ‘G§Ù®8œÆ“0~£4PÛ”Iˆ¾Ê3w¿®,o×·HNÄÃR]ÜØTqÆ©]ÁïVPÐãnB—ÌHY¹âa,vßMB Ûe7²ÍV>rÖ¢%PÙ—,NÀy*Üi.[Ř1iîŠ/°Ë”@Æ´OUÓŸDLÊ–2¡Ë¯zàáY´½lðÖ\wÝÔ€|îØebí×\cßÄAXâÑž@Üä–E÷Á.kòßlVÝæ<ãæ‚7ÕãcJËÉf^ÓÙ|"ÓÌN7ÞÒ7BÚÅn¨Æ‘ÃÞjßÒwK~Ïj+…Ñ]œÍiVÙ®MJÝQ/ âC(Cå‹9Kº°$0ÈÀ+"ݶ/ßš?AÔp †Œ¡K',e™,7v93R#//H(3x2"èK[Ò)%sÓ"!+äY6%Ø‘#å{2Õ^Ç‘-×”'¤˜#œÌ 4n"…•/4»7;Å+.rÙ’wÉW¹å®AƒÛ£$nÖ³*PΞ$8ȶ@½ÌHNúSŠÑÓ?OÛÆ1GÊÒM2ÚÄ,AÝÕ‹&ÂÅ^ °¬2MÒÔ>*ÒËy;ÀȈ'ÓïmE¾È2»c ºÜ‰0ÌÓm™ÖÁ'°¨L¯ÏœMÀÕ¤'„Ò««Û¤:‚ߪ£ÌË5…ä¿ `ìÍ Ú¤kı$YãÚZpÖ´#tÏÉ:'ÈÎ8MÑ×/iãÇT.°çš-œÛ™zÇl£³fÍ—!µÐ¥<ŒØœsÏÏ(Uæºaǧ2®ÄŠ‰¹©(PÍ°qÒ­†ÉÅ1rèÆ@X×Ñ[eÑ©IØÔm<¨áIEÌ´&aÔÃ"Êe^µºw9ŸÙ‹\¾ò©Q´ã’>²Ã}9¦ÂmA‰¾©dÓÌ'ŠÜ˜xʽ wÔ¶GåÈ)^̼(`Âœ(RØÁ1&°¿m¨À^ÄÏ4<εe.¡Øk$š¿}+¯Îl/­×w/šÑvªÒhd¤Â|2vź!ÛÁ2ŒÅ,tϨ1.·»7Y£Ø;^¾ÑsEš±V:¤¶@P¿Õ@U£¬M8³ÄmFˆ¸8¬±`__ÇdIpºkFŽ¯|E€ßp\ZųLRʃ@k¼ˆKGÊfI¾¨Ddº›IEdz2q²¶Z]¢·A~³¦>¿¹³d¬«Ë@£ÎÆ»¾Òµ³´ÏĵÌÕ¿­ª¾³Ã¯¯»¢Ç®¯œÊ Õ˜«½½ÀØÌ×±ÑÁž¼ªÂ±¹™A`½À”Ѫ“Á²®Í²±¹|Ä¥“k£›V»¶œ[£–‚SU|y[k¯]aƒ”AHX¢€x0­Ê{)®t]x“œ}[®Š\Pš„^J®’d.—‡C©†N@>%‘7R>B]*@[ )1M)(?GH 6#J,0B"[JwU,Q&\G*Y5 -_ -bJ4Z/$6!]$Z6VU+M!u%>%‹APgD`DwH­{zDx>„!’%œl™f1Ef{D1lE‹7\ToqhURh\kR\>oVmNA§gšM9~H¨v}I¦…˜1šƒ˜bsz—9Ž`ŒM‰ƒ…Bvt„`~„ˆpvfaˆCY:o`j^btn‡qZIMY\nˆ‰±‹x“±¡˜Žš™k­™½’²–q‡¤Š‘žm‰—…s¡—Œ€’‘’w —†—’|ÆŒ®›Äˆ{„ „RuŒžvw®’ }º†›l¾‘‡r ƒW‘¢}_”£ž|x§wŠ¦Ž‡bŸ£z¥•Š†³•‚^Ÿ{~°£“r’…ƒw¬–¿|•‹lŸ´r´‘¡|¬šœ€—¥¡Œ ™®ìʲ¨{›§‚«——®¯—m¿‰‘‡¨cwÃ~yƒ˜Xo­ˆ‚€¶šs‡¹©™~Ž¯xy«…{w´{kÃ¥Œo…¾v«Æšp­©«s§«~‰™ ˜u–¥†¨¸¡rŠÉ n˜Ÿ…r§™ ™¸§ˆ»£nxÖzt‹Å‰Ì|‹¼ „†Äž`x‹‘œQª™~lºŽ–rŦ…´¨†‚Áž„x¬ÁV”¬ŸW<¿·^_ËÕfd¶¿-ƒÄÊjm×Ñsk¨«zLÏÍsRÑ¿ja±¦XSÂËVe¹”n#Ƥ—.¶ºšS¬½„9¸¼¼?ˆ´”5€ÄÌLƒÁÍU5˜º^O×æKtÍÌ)[½¦::¸ÆiV«·P?Á–@4JÒh<¶èZ0¤ÐN4pÒuU;¾‘7qÚlcËh&›ã¨'Mѧ9Š¬~1xØ vÀ§UËÔ#Í 0®Ã¸&p¦Ò1y¾ÑgßëQaÐÞfßìqäÖ“§éÄFAÎÓ4,Öë€YöÛy~øä¥Oêã¿ÜÈ­O߸-DèÒ0/¿á¦Q¿ÓR|ÜÍZ<ÖÊQ=ÅÐw2ÊÍ`SÏЄ3ZÁa$r²p3u¹?,AÅw$:âŸ#:Ýh»Ñ‡0Ó£#ߦ),ì£7ÀÀ.ñ©*œJ)&¹q/-0r& +Cl'+9£-:>’.;=’4#C€$0¯4'):­(Ež$*¾ 6¸(.ª+"ž3"°+B¬?]²0Ã84¹n&E¸5 1ãq(Ì=,·\4'Ýz)o¯""²&Áj6Ù“69r¥6œÅ*$ˆË+\µsSßF ‹äs,fæy/2ØŠD"¤ 5 ÏK*,Ѫ2"±1%¹½3¥—)n§ !£Å&.½œ!)Ǽ"4qÝ^M»—BšÐŠ$˜ÎžR§¾± ­ÉŒ,hÉÂ#`é¼WRÄËLfÅßBaÇÁXoÁèE5ÂÈ,aæÈl1ãçvZÖË83ÆÀ8BÖÆnB¾Êb¹ã™AÉÄS;’Ëv'°Â‰Ì݃—Í•™Ë¡Ezâ«, åt1—äÆxâ¿(„ËÔ!ä¬6râÖ-{ÖÈ…Ò¢ —Ñã3NÍ· ;ÎÌ7hɼ"yåÝ58ǾCÝÏ;JÁ¾X­Ú¨O¶Ø«¹á½³› Oí…äž_Þ¤#4èÊ@xɵ‚Ú—€Ì£@[Þ°/*¾¸Kyì–'CÐÁ&FËÉ-\ظW„®¹I|ïj2ÇÇaG̶aÏÇHSÒØc«Ç„%ˆÓ™&ŽÏ¨-‘ê€7ŠÌ…$‘Õ¦+Û£Uxà R?î˜gåÒ&Ô» 5ÌÝ*Ïì„ÛÔ>¨ÅV9¹×CƒïÂ7]äË*;ÐÁm_×¼o-ÐÊd.Ú¿-ÉÂuGº³}]µÖV5¬Ñ5}Ú­&’º¹kÀ·[ÅÔ,jÀÀ*gÄÍ_¢ÝÜ=IÛËLZÏÒH…ÎÈ\I`ÝVF­Ð…TÞU2•­O+kÉC‰Üa<ƒÔiGq¦‹<Ùª?[È’TvϪ<jnB1Z Jo+G'z"XdiXe -f"S¢>IpM$y,L3˜A)9i'U#Š"G7w=qyk0N9y?Ix6CohQDU>’,ˆO†dKxd¤v©X¨{^®(kIžs‡:¼cŒe}HwI†”‡<™f‚r…1˜xŠZo…Sƒqz˜}kTv{=kDXSrWClgZ@nzQBŒ%¥Z–sÆÆ{ވƬ€®|²}–yÅ—‚¦˜†¨š£k…¨ŽÀ™Ž«Ÿ„‘§™q‰–uo‘Œ®–Ë}w€¿¼ivª—“¿©‚¦¥¢‘ªœ²’Ž¦¸‰Ì•Œ›ŸºÀz©˜ªŽ›˜lnÆvudª‰ ‡Ã{{u²–ʚǟšqË¡Êx¸’y|­¬½ˆ¸ŒÄ{‘¼zŸŽ©†š¢­“•ˆv‘¡–ˆ¯¢}{‹“˜ƒ¢¦µ ³‚uÉ«ŽÇ’µ‡Ì¨vŠÁ•É›‡cj¯›˜~²ž‘„Ž‘yÂŽŒ‘»–ŽŒÀ¢€rš¥—|‚£®‹Ÿ¬‘¤‘u„¼’·ž¨²ž¨Â¢µ©¦´›£Ÿ‹€’Ÿ–—¸˜Œ}Ì¡v„µ›}‚ÒžŽ”²©ƒ®ª¼Šµ“ˆ”­‡‰¤œ£™Ž‘z‘­°ŸŠ‡s‘Ž¤wŽ†‹Gt¬ÜNÃ¥sX±¨vi²²YmÑ3GÑÌsaÕÄa=×±hNتuBƨk8ÂÊ]^µŸx=º™x:–½‘E·Ï“9–Í•rtÉ®,®¿U©»œ,`Ô½ftŬ\pÁÃJ{¿­3C‚¢5L³°PE²ÅN;³·W6žj>ÉI>ÕM-ŽÌ—V€Ñ¨;OÉe7oÕ~.‚Τ%¬·%‚Ö›4Ư:hß¡4eÒ3˜Âx-nÑÓDtȲ>âÎ>nàìµuÜá¿ŸßÙÉäÎikáä¥3äÑ8Cçñ¥|ëñ†©áé²fÙðR<ÉݨlØÄt-lÅ?5ÜÆ@QæÆG(ÇÌ|-pðs$˜³G+×]#iÍ1?‹Õv0ÝÉU9P7,ÒO2)×f,:Ù/Yɾ+‡ì)#áº?,¼n-µ"ã„7½]$68n,)8t-.R -BY%S,&g!+C,=€(&4%¸.B‹!:µ..|#² %Ë&0£Å,3¹-³=/³`#(§C ^È?!8×UQ÷@-bY1É›?%j–(%«”.!ÅS? ¨!¹¼FoÖa8‘Ñ.7W¾*4XÁC*q×G3Zå´0²©-Û™#6Þ²7!°³1"°&/¨“4ŸÕ(r¬$)œˆ1@º12pá,fÜ,ZÏœ6×î#¡áš"›Ô-¢Ð˜:_Ø¿+IËÈe¿¬!uÕÁ80ݸD5Õ¼?(½Á>0ÃÝ•»ÓxAºÉ\jÓÇ92ÉÈ\HÁÔ†YÖÚdº²•H‰Ø;ÈÍŸI¶Ìb˶ϳŤۑ'¶Ì®¦É±H¥Ó¯ ÞË4˜ÐÆnÝÀ#ƒèÌ+¶î¸tÛµbæ½0cؽGU¿·9)Ⱦ3^ÉÂAmݼ80»Í¡Œûy'ÕÊÄÈÎÄ©$†Ì+¿š@àºä¶/ã›<¢Ù–+˜ÓÒF×ÖCnÉ·O’¹!<Ò»5W¿¾.dÓÈ=@ÌÁaH´áDMîÔV;ؼh(ÈëŽ.Çãs\ÆÉvL³è”)–ç£I¸´–:ÅÁxƒº²5~¾®  Ö¼"¨ëº\Ê°RÐÇFyƵ?lÍÑS Í¬.*²Ò@3Ìá@V¼¬+RÍÕZ,Ÿäb6£Ík*¿ÀT)—Ír)¤Ài/“Úg6»Ãqvä²=JÛ²4gÎŒC7ëÏ7nÄÎ(pÒÉuÓÁG5º×V5¼ÑDdÒÈ5Ož½Z@¸ºJ,ŽÀ}/³´[9Ø{9ŽÜw=‡¸u^ˆÔ=;×±).¼‡&Jr%G -D<~H|fR(iw c>Š0\‚0V6wLF2‘Kr7mFc(sI£­ƒg¥\\Eƒ …uZ;I`Y5lŸo‚C“Lf]{QTlz¢dpJœp—H¯†`ËjqU¸dl©¼’Y‚€Qhxr/bbcb‹xl‹†^qŽ{m¨‡gŒWmHenwyH,]iˆ}I’C¥[œ§–}¬…€¯•”t¥”„q苧¿“‹‡»¤«­‘­|y­›¤‚‰´ƒ–…¸ŒŽ‘„ˆŒŽªŽ­ƒ¶Œ—“sŽ˜„œ´ƒ˜µ‡˜—°h˜‹Æw ’©¥œ‰©¦~mÁr”Ž¹”iÁ„c‡¬‰ËzГ£«žÀ‹Ê³Àz© Ð’±Ÿ“j¤‡©‚¾•¥o¢¯¦w¡³“l‘®½žª•¦Ž—¯—…°•ˆŠŽ¢‘…›½“—„Ä¢ƒŽÉ—O‚Ï–~‡Í–‚t§…{¦‰‚€Å˜šfƪ—˜¥’€É›‘ƒÏšÔ”·°—–™ „¯|Žƒ£»ŒªŽ‹°š™Ž©ž‘±”{–§²¯’£‰¨†ºy‡³—Ÿ ¹““è‹~Â¥«†É˜¥Ç¥qÖa»ª¥j²·˜„²™ƒ…¬‰‡·†¢‘¹Š‚Š­ÃÎF¼¬:=¿¹wbǧUsÀÍ<†½ÛŽj¶ÒhhÍ°ae°Òr:¥ãŒDIJ‡S©bl×ÈU@±µw<£¬¤_ŽÃ/µÃÜ-“Ç»DxÕ¯LÀÙJoµÐ‚_ÀÙkm³­OqµÓLJÅ®cY§ÖjX–ÆOB†Æ[BlÛj8³ÇpJné‰Ky¾‘WP½…k½k5ת,:ö„^I¢Œ$žÐ¡.3½©/Îœ%’Þ™X­ÁÔLaÅä/sóÜ<ìàp—ÛÖ «ìɯàßåy¶ßåu4ÇÊLNÜÝ’Xçâ,cåä¹<Ýßn7ëØ9yÌÖFcÒß|4©äs)ÁêT\Ãäª^ÎÎl,VèN”ÙX6ÍÖŒ)˜ë~Em¿^,^èM!3ÚÆ:ʽQÓh24¶’8È®$ã„*4ËÁL<ÑË4Æw(j%w-2I†C©%$Zq,H›*)–­.$@‹-a‘4+(¿/"¾("†$"G¦-"¬/¹,(8Ä$+µ**`Î%1•3c¾+.ÍU ¢U'$Ö$'Aãe=,Ò¤'Êt)Óg-.t˜3¼r89ͳ5 Òš!'š‡/›Ö#+„ÌR8gâb4uÜ`,cøp+œØ²:-¶µ$ ´.éw9)ÊÍ@9³«6¡¶ ÜÌ=ŽÓš¼&*–ˆ00ÇË6&nèf;kΞ;µÜ‰ Õ»Ö\¯ÌžHµà¨.`ÖãFAÃ×<ÝÏ)|¹h8ÈÌXFËÑ);Èåq-ÐÎeTÐÀC4ÐÑ76Ýàb$»æƒ³Ö…#®Òy¥Ý¢ÎÔ~;ŸØxÌÀ“,‘æœbá§K´Á‹ÔÖ¶1€ØħÄÅ4½Áª&káÈ"{ÏÍÕ¤“ε/mèÂ/PÛÅ4qÎÆnÑÌDGÔä7=ÇÉLe¿Êr±Ý®9Íá‘ ˆõj-Êà¢'qß“yß“%w¸¤aÅÌ¡ÅÖŸ¿«‰Ô°”ÐÁ#|âÓ1€Ê«%KÕºQiº²!kܶ0‹æÛkHÈÒLEêÔXfÛÃ%eÖÃb»ã`ÃÅ|G¼Úz'²Ì˜W¾Ó—]–ï8Ó̳ƒ×«ÐЯ” -cÈŸ!2ÚщÔÀOßè)xÒ­A;¤¾nY÷ËYYÒÜJu§·*_ÏÏvgÞ½h8žÙOpÞ¿kTÓÈa?ÍÊc4¤´s?£ÄŒ#HȺ-—Ͷ#nѦ;£ÏÎ$°ËÇ6½ÉC~ÅäguñÈNg¿ÖA\ÊÆ5b¯rbθx_“Õ7J¬¬ol³WEŒ¿k`ª JPxÈ«6S§›[`ÇvX€³†A=Õ}_]¾’4`¾·4d´¤f6”¿C>Ãœ`{ÀµL§ÉÁo½ºÍ¯½ÄÛ§ÅÃõ¸ÓàÖ«ÁÞ÷³µç÷­³¾ÀËžÊÃŽÅÓ¶ÅιÄÈÂâÆÓ¨¸«¦³Ü·Ù·ºµ…„ͬK¢Ä¢w»º±Ï³Ë»wmM›cidUh’¨ŠPbž^…²j_rÈbVcÄvdm´jnb£i^S¹kg]¦Ž[ažww@·go¨Ô‡TšVzJs b;_-C8&CHVQ?6C+J28 7MXI3E%(6C=XZ E_ 1 B*IXoo]nA(~#D'¡ SE…)0+xe*• I2–B>%‡GP~PšNŠDy5‰c–;Š=–H‰F&=/s$CTeR>dn“U’\m_Kƒl›mrS©…ZjÉH¹S«c…QƒO^¥¸““§’›€’ƒk™u‡U›{nz‹€Wyp\Rk}{ohFWQPOcT)bgN=~ŽpqvsŠ«x¬|ËwÊܴŠzÀz•†¿}‘€›˜€–¬µ’ˆ‡Àœ®¦ŸŽ‡ž¢›‹–¢œ‰‡´‚‚†­š«“¸¡§” Á¶|³£Å€©•u‰©š¶µŽÁyº¡r|±”¬¸‘ˆ‡° ƒo³ƒ …²Ž†›À‚¨†“›¹¸¡n€¶Š}¨‹º‹¹‘Ô¢qØ’¾¶¸ «Ÿ¹Š›±Ò–¥·“d´‰¤‹Š˜º“ƒŒ†|§…žŽ…·Ÿ¿™¾¯Ñx£¤t—Å–Á˜»¥”{Г‚gº«½¨Á„º‘”­­‹ŒÈ¦‚¬»¥¯ œz¸”¿™«¢Ÿ…•—™Œª¨¬†²¨Ãr›§ŠgÍœ˜Ÿ¾‘„ ¢…„¾–„•´ ~’£žŒ†Ç›pm¬±‡—°…–žÅŽÌ‰Æœž…¸¨Ÿ•¸}ˆ“¡|„†‡“½§—§™–D“±†*uƺftÖÅUo¤»>uáA\صaoÛÃYeÂÜgHÕ°[HÑÈ~RÑâ\cÑÅVJÎÈ“<Ìš+ŧ.Ÿ©‰.Ù¹6œ¼·Kã°V„ÊØgXøJcÓÊu‚¹ÂGrä¶n\æÕH/ǧ:YǪ_>ŽÞ@:¥°bé‚&Hÿ©RfÖv58ß™1 ×°: õŠ&&èˆ-$½81!\Š%?¦69o) 6R$&1c,(Gp1N+>¡/'’-›#G•64»+!4¸#%!,¹9'Ã+‡-#&¬ C´?6(¡=',ÔI ^äN(:»g#2Úc"ÔJ/±Ž •%"Á‡'Øn'Ù¿68”À1“âgªÔE&dÜ8+mÍ&:‹Øn@èÇC)ͱ+%á£5 Þ˜ -®©C%ª†DE«·E*¶¹7²:)»”!(­’>?‡×k:tÓ‰.•Ð'Èʬ*³Í­7“ÕŸžÐ¢DgÚ±+BÔ½BZÙ£!}å­>8ÓÎ9BÐÀQUØ°6CÇÔj˜Ôx9ÛãUvéÇHHÄÜc[óذуEßØ\ØÕi'lÈ‹R³ÆdÖµpѸµê§˜Ë›Ö«à²=¢Ô°ˆØÞƒë½!Ÿä¿¶è¶ŒÙ»/rÐÃ?mâº-tÊÃ,HÖË9aǶDV¾¬IB­Ø«M»ÖÊÙ„#Á¾x³Æ¡9£À’7±Õ¢O¢Ò½zê¯Q¤Ý¦Dæ¢+†ÖÄ0p¿Å!mÀ»¤òÄ8tÙ¿,mÝÌ!V×¹,›Èu"Âé[`ÒÃ8jÙ¾%=½½v7ïÛ‚,ÂØx(µÞ£ ‰ß¨žÇ˜6Æãy¼á€ÑÇ8È­7q³¬d»±JÓ² Sε'V˽5`ºÕR-¼ÐP±»2\ÑÇ=UÈÐd9ºÜnH½Î^vÛÌd"•×j?°Ì€^£³TSš¿ˆ0`Ç·-^ð»+vÑ}'‡Ð¾5iÏÕ<]Ë×=SÎÐI\ÛÄ^~áÇI|æÓAyÆÌ{:ªpG›¸wV½¼SÁ€:o§lO“È{[€§ƒRi¾ÅHg½ªUy·–;b´Ÿ?z¸—ISË bRÕ¾`X®W2¦ÉCg³·]}Ñ^5¶¢W®·Ö¾Í¸ÏóÝæÐÃÆÿº«ïæ¾ÍîãÚ©ø¶Ö¾ÒÁ’¥ÇÅ™ÙÓÖΡԵÔÌÅ¾Ç´í¤‚W‰žX¹­š£ÌΪ»¢Œm©³iSs¦žYq¢nk°a¯³µ:Ž[jƒƒe7‹Šc´Ì],¹sgr«Í‡k«¯‰<”–k[žmI u}I¨mtK0AV!H(=*S.o\{'OlA‡J‡%JCLY G1w'K$}'H%—=T9~<ŽfŠB•4”<§~ˆ4v-jBb.f`Z3}Q‹@JV(s\UP^r{‘g•p¥s‰b˜:¢T¦V•Uª|•‹v•‘ŸuhŽ–[ry9qy‡`€~–^x‹~hpwO‹d…pI~ge`s]‚—x§^•cŸs‘¬y‹u’®§t°ŒŠyǣÆ¡„z™¡©€x·’ƒ «ƒ®‹°¥|¨™™†ƒ“ˆx‚ž~|·¢–¨¦x£“Š‘­£†˜¹œqƒ¾‚}‚¡¤|€½ª…‹žj²–”‘ºŠ‰~³vŒyƴȆˆÂŒpÀ¦¡t»œåŠ®tÕÀ±·ˆ²š¢y·”žƒÁ¶²–„Žx€›‰®©§gŠ¥¤ƒ¦ª–p˜št‰µŒvŒÇ“ˆp͇mq²£…ƒ¿¤w}± y¸«ˆ†¼¤Ó‰œ¢k[¿´„§˜eq¾ “\¯•Œ‚½¥‰eÆ®œ…§¤—ƒ¢¨­œ¢·œkˆ£¨j‡Å•„œ¨™†š§¥†¦²„¬Ÿ€v»‘~€ËŸÂ~¨“¤Ä©y¡ ŸqvÅŽ›¿—Ÿr½˜sv”Š‡·Ÿ’wŠ ~¦¢–Z£ß­S›Í·djã¯rKØÁqR¸Ä8gËÑdf¼µegÔÅWGÏ—D`ÃËa>¶¸OHÝÌBMʯ`Nˆ¼±5ˆº¯R¾Ä”=¿ß¨MœÍÆ?‹ÁÒ5ƒÁÓBIßÖciÀ¾f†ÍÄNŠÊ¼e,¢Èj0¥Úg4¹Èd9£¹x7¢ÓgM§ÅMEžÚlb=Ä8d¬ƒfÂ`-í©˜Ï•U]» /lìC,¹³eZÛ.“Á‹.XÚ½2@ÍÐ'aíÁh©ÞÕ‚`çÜ«˜ÎðxtæàK‹ã×xHØÓŠ?ÞÕ-^Ö´%}Îïm?ÝÚ‹PËæpKÖÒPeÌÈlFÏÚNVÜÔpBâËq'×K"vÜ{ˆàL:žèr!ɇÚ\ÔËP8-Û¬.,ìk8Ý$]꣛åÈBAåÄ%=ÜÂ#"̓ ÚŒ3ÂY0Ä„+m¤*e¾'*:o:=š$M²,*A‘2+\É)#*™,6£ 3s& MÀ+<Ó(3³ --­.Ä&DË) !ªxÅ!3%¨62¾E/Í!?¯z&)ÝW6ë˜)Ák<¶œ ÞÔ|"1²$0’€O:ª»./nÇ.+nî5hÀ5(áˆ,äÄ(ÚÇA.Ï™! ØÌ*.±™«ž*Ä<:ŽÌ “™/<®12ÄÉ10yí€Á†¾Í’ ÉͶ¶ß§,ÀÙ¡_¨à¯%CÔ½)qâ½0}àÐcËØI3ÄæEOÀ·1k溅ÌØm0ÙÝLèÛ:>ÕçŠìÈ"•éŽ{ÚW]½Æ–OµÖ}±Í~0£Ê“]ÝÄ‘ã *¸Þ4Žß¢”Å°™èȶÀ»ìÆ'—Ö¬wبK¡É·7oÚ¿NØÞ#~û´hãÚHmèÇ3[ݪ2YÛϴ#‡à¥¼ÐhMÙë]ߦDÞˆŽæ™’ò¼CÛ¯'VÒ¨.Œ´ªkÏä)/Þ»$JÒ½"‚ÍÙ9.ÓÊ5Oæ¿.fÇä:|àYâÔfcÛÍ<3ÉÍX³ñ.eÃꄮñ«Ö Òl?›Ñ°oÎÌDͱQì’eÍÑX‡ê¶påË8x¿ûbhÕÎ.Rá¼F4»³V2ª»&`Ʊ1FÔ½XqáËi5¡ÄQ/š¯™5¾Âh"µÛn?®»„$ƒ¯™3ÔÈŸ'“Ŭ!–Öº8lÚÆ•ÔÏ3—äÎ1‡­Ø€oÐÏ_kÞÁ]‹ÈÊUfȳg_¶ÀYL‡ÍjKšÁ”OÁp\‰´ym“ÀzOe§•NEÇ¿cJÛvYiË—I:Ñž2T·³]EÑ›ab¬™BN¡ÐJo¸Ê(U½¥D[—¶R¾°Áu¬­ä½°ã³Ù§ÚÒÅ·ÇÆ¿Å´Ò¬¼¼¨Ä©ÁÂÝ ËÀ”ܬµfš½²Ý»Â¸ç·Ãµ¸Ï°²¢ž·Îĵȸ´©¼š¹¦Å±o_ZÃVv·–cm«•ul‚™j¨™w‰Á³YM»~n°qv'¨YzWÁm‡u¨¸šw ½…oŸšle…'¦D_A/…2n"i/rE>GpB6i+S/B;-J R/g)IQ"YC`]R=-A2-?"R*sX ƒ&anQ"‡YvJ1’8X\ZšD;;,†4K0€-n0ˆl¯:£0=$•j†{‹mS.Og[AoXUuuQC!KfB/[]Y6_{Q˜J‘,W3‰?D“;–L‚[ˆlƒZsqO–~€Œ‰“lvqtgŽWOgfJd›m’sgZgˆizgUuic8f•hž‚œk’£›˜‘íœr¯—¥ƒ³”­zǤˆÆ«®y•¦……’œ¤”¥¶˜²œž‰œƒu’¶­“¤²—¯•­ ‘–¨£¯½®™’ª£«„µ½³È…´•Ÿo‰³•¼¢»l¥™‡³Žµ’¸§•u±«ÆŒÃ‘z€­¥¤~ÊÃlºÚ€Ê«¾~­¹Þ·œªw¯£ˆ|´„ž‡¥£µ¥¥ÃŒ ¢Ä£°Ã¤‚­½ †¤š£†°É¬k¾®Æs£©Å}¨£z–®´Ç„——‡†˜ƒŠ´‘—t±’Šª–y€°Ÿ¡mÇ•cÀšÅ’°±s¬µ¤zÓ³´‰›³ ~³³º‹­³™›²“œ³ˆ›—µª‰ž¯µvÅn®¬›±Š¿¢¦¡¹ŸœÔ“Š†Ã§‡Š§šp_Ф‰–•„kœŠ‡Â˜°X{‘]µ“”}¼‚žN‰ÐŸTÛ©oO¥Ï\dÁËNs´½Mhо>GÏÄkPÔ¸V>«Ë¶—^PÔ³gcÕ¾]N·ÜšAÃÒ¨/¼ªœÎÈ›RšÝÆ*Œ²–:ÜŸ-t·ÌK8Âäyiµ¾AËÀC_×ÄFD·ÉFM£ã^B­Ì{=³áU5ÑQD¾½MEƒ½µnÙ°„ׇ'§×˜&ˆ¹¡+‰Ü»'æ‡9KÛ–?qßØ8•´q?yך1ƒÒÎ!ƒÔÔ0Xäã‚îÛíÄåÚ±‘åÞš“åÒ‰ÀâØ°SÚó™>ÿÉ%äÐ+NÀÇ•aûã•KßÈXwàñY<ÕÜNZîÏJdƹH>ÌÏ_;OÊb,¯Ô\*–ÚoµÌzߥi·×}.RÛ”)Ýq(1Ý?#rÊ‹EAäÓ*2½Ð;7¾¤DÈèJ(Ýg(×bäV6·ž)и25ƒ3!dƒ54E”9.X¥,)6€:,:‘+*+¦$0Ÿ(Z«3.'¤'6Â#">¶#5¤¬%4%!B°; &’50¥U.,ÊF)[Ì46àp$jH+Ûp!!³‰(œ…+Á«$µY'Œ‰5"ž1ŽÕ-&{«/iÒ'gá*†Í1ϵhUÏÌ‹Sä¾un«»mV²ÐaJqÝŒ0´”@«¤š0´ÍÈc}á“]{ØÉ%ŠÄÓ)NËÇksÇÇmhÜã:~á¿m1¸ÆRt°»_hɦW6¥ÇH+ÄV4Öj"¥Í^I0ì§7%ÑŠ*°ænV?¤•IJÞ›45åj9{˧T<£¸>5±Ó+qêœ6¥Úž=mǾðÝ*‹ææ}|ã×™­äÜŒWÓç-–èÕœE½åX)äÛ~…çË•ïãCiÚäCZØæiFã½N`Íé~8éݦ=Ù¹TÔÏeA£Þu)aæ†C°ÏF MÖp ®°€&Vî`3Ø΄%Câ­(+ê¦"„܇2Tëª!²ÞËG0ݨ$/®ºFwß›,1°ª<ÒHGÆ­=BUp$>s1&G‚& `œ*#Q\"-<„)I_ #; 'Ž &:±Ç° ¿'7®$*6Õ.'½3!©'X¸$,¶O%/¿H%9Í#)IÈE.ã]-&ÝX0)àn"/ÅC±ŒÝY/Æ•4%¥°0áG%”µ0"jã3&_Ë@(Ð „æu?'Ó¦50ÈÀ+<Ƨ-1Ï‘7#ã¢$ Ó†3ÑÊ!&bÛšÌC(Úž%'«ÄA'YãŒSœè®±ô•J­Ó°<ÍÄ”"™¼‘$^­3Û¼\@ÀÖ-nå¾t»ÆTOÓµ9SàÓ#HÓ»†½äxSÖ½n]íÅÜÒ*mÖÖ4"·ë`4Ú²<)Ò¾3bïÂr`¹ãn+¶:ÁÍz#™ß®O Ç8ÍÃyGÈݯ9ϸ;ˆí¾6cð•5‘ÍÎ ˆ¾± Qê¡9ÎÿFmàÎC\ÄÒ}^¶µdJÙ¾5YÑÈEIÑÓjpáÀu1µÊa^ã¿zLÝÇ{3¾Íu7ÄÊh5±¡M“·²*¬Ï %Ïˤ6žÙŸ8<ÀÃFš¸©/µÄzjÁÍ\x³ÒT¿Ê·Sdæ¶TÆ·{<·öR@‰Çs8xÇzGˆÕgo ¤qPpØyaFÜš6j¤’WsÊlAg·ŒMGÂŽ_j­®Ia½«]cÃ>c®²RJ̯W_¼µHu¢Ê¨µ¸ÛÉÌóÕ¿®á×·¿ì˽ųݭÍμ汴¢ß¡Ê¼†Ã·ÅƹҬ¾®¸Ì¿À±²¾ÃÅ©†œì¹ç·ÆÀƒ¸œTj‰Å”[l¥=iŒ±žYr’Dlm¦l™°…{v¢¨pp–Ž}^¨’k•¤¶?«2~^Àˆt²“„] ”ldŸt|[¨£y„±Gz6ƒ~O![.dF!<%H)5-G)4)X+m4>ud"R][(ˆZ€ I1™'R€?‰$NJ‰#N(†@Z*ˆ/?+X0z)M:§=CO_BI5]‹LLsoT:~9/.iPt„_j®|}WrIhecBG˜K‚P H‚YƒQ™O§`†dŠsƒvƒf—^—6ŽE…z‰er{‰[w:oTe`MmR~kƒ[Hsh€¥~‡^Œ…•ƒ¹‡Äƒ½Öº‹Æǵu¤§„±«v‹…‰tŒ¥©˜™§š›‡Ã©™”Šµ–jª¦§ –´¬¹…´ ¹š³š›¦­Õ¢‘m¨•°pÁŒs\°«|Ÿ±¡”µŒ€‹Åš¬’¯‘†v¦r€³ ´Š™¯­uª§omÊ¥àlƘsÃŒ¾} ¦‘€¢¢Àr»yy½¾àœ¤»ŒŸ½Ð• ¨¼ˆœ©®uš±Œq¢Ÿ¹”²š¹½¡Ç•ºŠ¬¨¯|¹«£{Ì›´~Á¡k¼’p|Ñ‘Ÿ‚ª©‘qº©qÓŒ|Æ—Œ†¢¢v£§±š›Êºµ´ŽÃ¬±„ªË¸¡“~Á颳¦s†¥†…­Â£„„½®É¡l¥¦¡…ÆÁ‹ÁœzÕ•Šx¶”œr”€†¬¯¹¤§¤ug¦¾†_‚™žnˆ­™y™¥»hЪB|»]ràËPYÆÓYy̪5W˨\mÚÂlNËÌcNÓ¯w8ÕÍu=ÐÀ[f³¹bNÂÅNª»¿ZÇÉ’,½®‚=›ç–af¿×G‰Ó¨2ˆÓÇY]ϼ0kÕÉ5‹Ç¹>nèÉTZÂÓgHÁÄrIËÛq1¬ÐdPŸãM;¶¯8NOÛ£7Κ#Ã}$£Ó@ië2xã®=yØšFL×±CBÕÊ {Ä­–ÞŽNxо2„ê½?aððQ”ÙÖ¡}ÒâŸwÎØfŽßµ8gÛÔ€:ÜïªE뻀ÎÊHKéÒr>îç_eÑÔ6WÎåX+êÛ¬2õ¼JGäµ?-ºÚ~B¦µ13°ëi ’í~.pÍ}Ëq2~Ô`K‡ù«* í«"¥Ô¹5[ÝC9-Ì©)&в%LÁ»WË€, Õ¹1³x4â:+/C„E--”+Q„.\v!.8L3L#Lz*3X’'!/s33w*/J•@)= /+,®$-·/5/À3"•&5)Ã04Â!5¿Y*HÜX34¶K2Ú.'1¼I$,³9."¼R&-Æx*‹%¸’µa3/Ñ°ªØ*—×-)¨Ê*jÝ92cç:.iÑ17Mä„-¨ŽD.Æy5/ÝW9¼£<#­–+¯d £Ã.—Ú-'­¤**›¨*@£ÝŽ8·¼ª³Þ™=ºÔÀK¤Þ's­ª °é§4/ÑײٷQÆ¿º€Ë´5lÔê,aÜÀ#›àÝ*uÎÈ~Ù½o…Ò­MÃĆ@ÍÛi>ÄØW…Õ¿E#¸Þ•ÐÉr ¬à…»ç¬*Ã×’¤ß’UÓî{-’Ï©Nf¸À<®Á¯8©ó³oËÈ9t»Ô!‚Ô¬:*ì•DjÖÏ=<¤Ïf$¢ÕZhÞÅLUÙÈh`µÅq3¶Æ%¼¹R*Ÿ¾‚EÂÊ…B»ÖOZÎÀ5£É£&jä°B…Ç%‚ɽ=jÛÂ;•Õ¾@R¯¿\=®¬So¾ÎVN¹ÚKt¬¼c4£Û^O··u]ÆÂnR‰½z8~Ïnh™«yEŽ»w`[ÉŽ`f¼²`v¸€X^º±\qÒ®bl“·]K¯X\Í£W\»¶D\¸¨UhɶT»¯¨Á¨٦àËÏáܺ¡ÔÙÒƶܧ¹¬Že¨Ì¨ÌÖßÈÝ«µµx©­×¿ÁèÂä¬É£p^n²j¢¾»ó¨Ýªxg›Œ‹I‹¿¡»Â£]aŸ”paÇ\µ»»]gb’vmm’msZ§œ`Š®yy§ÂfÀ´]qO»—Ç…d…‹m¨´É~b–MNU¿\S¶E~p(\VLI,\$E)M=#>$Q!*O+@!>0J#I J/@,C('Mf8c7[-a:OL%U#Œ;%ƒb!}8cRžBI0…;D(ž*5'†Mlš0jpAN ufUQg]i4iaW/Š6\)dtnzi[mZ7†HKO–-r4•LŒ?ŸLŠHZ¢€™6°xƒZžp‡B‚>Œ4Ž[Nvq}cv[‘UqNocˆdšuhyx{ƒœ¸”¤‰µ¬¸‚Á¿Às·ºÍg¢°Á‰½¦sxÄ oŒ“‹Ë‰–¢•Œ¯»˜µškž—‡¦}„ªª‚‘º•Ÿˆ¿£‘x«™p–¤·‚ƒµ¬švÆž‚’¶›qŠ¾•Šoº«‚Š’’jÀ”tiªž—W¯šÃz—…|n£–t‡­³‰|±§·‹ŸÀ\£¢Öˆ§©Æ€§ lÄ£~»¬©sœ–yƒ¨°Œ·Àœ‰¡Ê“‘²­‚š©ÃŸÀ«Íˆ¼”y‰®Š½º„x¿‰¿‘Ä•d¢‡az±­šƒ«›†„¤•®ŠÖ”™{¬¶k“Äž}¯¹¬c¬§·~©¢²Àµ©Œ «¢ˆ”™•Š‚Ô¾µ™¸Š¥¤Â”Ö¬®•Æ²j“ȱ¢‰¸ªoË“Øx£„w¸¬”u´£œ|‹–¡o²»“yœ§P£ˆ…y¼®­x¼¹¡~ߢg|ºÌQZ¾ÅqgåÌRsÓ™Q‰Ã™OEÄÌ{AçÓŠJ­ÆO!˜×ŽO·É‚M¬¸~^кo%¶ÂG¦Î¤<δ„H©¼Ä7¨»Ë)—ÜÐX†ËÂLfʽE[Óâ=ˆÉËD’ÜÙmSÂÑdQðÀfY¯®>>‘Ñd0“ÙQH£¾`N£äz,Fâ”2—Õ•—­>B‚ε:?Õ¤2Y¥’@R°ž;3å­-0ꊌޞ>¾ÖÌ0™èÆ/oåÆyç¿UdÎábfßÕh`èÍ4ƒÛ¾jêÙŽ5îí~¢÷É.™ÐãRSÐåFßïKB¸ÖBE欘>ÜÉ?8¶»M ÓL#¨Ó]4wÑ~•ì>/†×k:TÞo)iÞU!kâŽ%—Õ‘1JÆž$ƒïg+Wõµ>ÈÃLÒ­wÖ²=aå>(à§+!ò\+0Ød%)¹–($<ž0YŸ#$Fœ$"[—-(Or209o#,"³04(ª(*/:+­*ª(@›*Æ33Æ$ !ÁLÀD+!ÑM!1¿M.7Á)¯B'.ñj/"ÂH:.ÕZ&®Ÿ$1£’2+Él(Í”U½Ñ>)˜Ó+˜±%5gÛ#gìI ‚Ñ=1Ô”,&éÖC7Ï”1!á)7M܆3Ä´7#Í"Õ§<5‰Û%/ª·3·ÙDQËÒe:ÂË‚©à¬CºÐj-¬Òªº¯©KóŒ4hÕ»/™¹ÃIBéÆ^LÐÇ&YÜÐp>¯¿OXÕÄCnÉÄZ,ÔÃX<ÐÁs«ß7{ØÃyIÏÖ]S¼ÒŠCÈÒr>‰ä“C´Íp$½Ýy.µÉ‚Bvʯ$·Õ™U­Íu ŸØ°Q ¿É-¬ÔŸÐÈ°–Ë«%ÒÎ>{êÁ"ŒÏÃ0cÜÛ%9ÕÔ>ã³IxÔÛ/läÄAXã¿8rÕÛN)ÆÓˆ6£ñ`ÖÞP9¥äÆÍ“!¬å“iݦ˜¸ÁI–ÀºñÃÅ®$m¼½)ÀàRÏŸZÕÊ3nì×'IÎìA‡Ö¬->´ÛQºâWI˶1xÅÔp&ÀÛS3åÌ…¶Ý… ÊÙ•$ÈÀ‰<ÈÒ†)´Ò£ƒÎ­I‰ë¨mY߃iÌ·'È´;ÅÊOä½>CÅÜ)e³ÄRIãåPAÞ«&b¾ÐLf¾À|TÑÐEÈÓoVÕ±pSç¹ywèºk\Ó¸‚D¨Ó¦.„ÔŒ‚á•?—¿«6¯Å¼&²ÃÕC—Ò¾?ž×ÇQ}Ý·^“Å«A¥¾ºŒ¶ÉÌfZ°»}A¥¸r9˜¾{*d³sF]¾q`ª©mazÙ~ivÇkC³lq²™[a§uKÅ‚arœlT3ܳuGɨ'pǯV—¤­„²²Å¶ËÇÍѳ²¨Â¹¯½Ê­ŸÃÃØƳ»áª¾‹Ã«¥­Æ¶ºÜ¶É²½É®ÜÇå·ÅÞµ¹Âx¿¾Ãc|­¯}|ƒ°c£·Ÿw’½ƒEaƒ§¥hSIy¹§€y}¹SaD•Fi ®^dnm,‡i•ËxO‰†j§wiK…Mjp£›Vt¢ŽeV–±‰x ‡Uµ„H™Os=h-y:R@\9YMMa2 V2A,;>?!?H%7$E"EE*L#A >= 5&NRe T/}+1+‚Dq^%˜P*L=’+H%’=Bq&B.W/Ÿ6L#‰Rl‡*X.ˆ@]2KpFIve/:ˆO`6„~RYk„_ZE~)JTdxZP…RcF¨Q˜@‡Bt£Z„.–Ÿ”ƒ”fmB¼2•i•Yp7sp|u›\gK™dSVL9:f‚Y•ˆx{w˜™·Ã© Í²n²¢‚ÇÐƃ«žp~–bw†Ž”X¡›aŽœ³‰‘‡¾~‹›¸‹’£˜e–±†Œ“Ž›|¦¾¥“±Ø®v‡•©u¹o–ºŒ†µ°¨‡º‚¤t¢›´k©¥°~Ĉp‰¥¢†U­Œ±t•®ÂjŲ–`¨šw]½—ÄU·ŠÝO”²à‡¯Ÿx„–—ÀŽÃ–Æ‹‘–¾†Š·‰ƒ®Ÿ›¤™ŠŽÆ¨ƒ¦³|¡µã¹ƒÃž‡Ç°}f´´¤rÀ¹qq¨¡”Z¸œ·‰£¬ª‡ÆÀŸiª‘£[¶©žyÄ‘™u”»šzš¸£h¬Ät›”ÁŸ¸§¾}¡»]¦–ŒlwȸŠ€£¯„¨››½¾“m¾²o‚ƪÃm¼¶n½Šgµ{‡¿¨[α¦jºŸ”už¥™Ž€¤§ƒ—¦ŽwŒœd‚·uoŸ½J‹Â¾;|©¿rd»´lDηÁ§ƒ@ÆÀ‹7—ÏŸ+Œ½¡&Š¶®$ˆÄÎZkÖÒ;Nàå<“Ô»/[ãÑS]ªäXTÁ¯1,¶ÌX2˜åT2˜áF7®ËDNGá°)\Òª@L¼-¥ÛŠF_âš&dÌ­@VÕq5æµ3Ü£zàkœà—%’âÑfdÊÜ«{Õª4œåÒnHïÆ3€ÍÝ€ãÅ(…ÝÀNJÞ׸YêÜE~óøf_áézMÙåE\ÚÉKkÙÎo6ÖÙ5TåÒQ^Ø°+I¸Öi!nÒDOƲ[.¯½q.`Û[)«Í>)oÏ'#t¸¸æ•#FåI8pÜNKT׈*ÿ­;&Ì®:7»¾AÒ’2/Ò&@ÝQ;'ÂŽ#,Í™<'U‰7/bsC•3.;…3+I‚,D-±'0 …!Hq%%7³(-‰6+Y4$“&%¥":$²/(;¹%7"²U3“K#.˜6-/µ&#ÃU 2ËJ%3ÈN%#®c?‘„02¥k0"½U(¡¦"5‰;*\¸/)´Ò..e¿56cÖ6$eÛ6/Q×YÊÇ?!À@.:í0Óž4#Ó£6 -”W9(‹¼iÑÊ7GÖÀPUÒ²?7ÓÛt+ËÓ_1ÄÕHbá¦M/Ô°m:ÄÏ~/©çp*Þ·r,ÍÊkAÍÛ…)ÜÒsÖ¸/‰×¾ªÅ’Ùו"Ú˜$‰Õ«µ×´1ŠÑ ܷ Wؤ$£Ö½/ƒÝÄ5‚ЫD>åÉwæ¿0?ß»^ÙÃO_àðBkÞÀ™¬Û•©ÐŒ<ÏÕŠ4­â”¸Ñ¤ «Ø¢™Õí®Ô¸“Í©4·½«'Ã×.…ÀÆ-GÄÅ·ÅÉ&{àá-ƒØÀißÈ7MÁç‚QáÈB8ÎÄV_ë­C*ÀɃ¹Ò\Ú܃ÂÒ§&¢Ó•JžÖ>ñÚaŒÆ¯!yȨuÝ›9©Ò¥"\À¶ƒÐÈWÒ²3\ÍÊ5}ßÐ5EÂÎV/äÙ_4½É0MËßcr¢Ík=­Âg- ÍYJÃÛf<©œ~4¿¾TN¶³.¿¨"B½ªWÏŸ,‘ɳ-e¸·CcÂË&[±ÑWGÄ¿QˆÄ¦m„Á¿Gǹq.«×SX}Â}_†¬eBwÐfTa·~e…¥iQŠ¯igiͧlSÇ“[vÄ›qd°¢Ujº’Ua¦X;¢}\Y XG¼ºH`¦µUç Åœ³ÃÓÑÄÞÃÈ̙ؾ¹©«¼Í¦¢jÇ£åÃÛª½~¨¢³¯»æÈͳĺËÒÙÆÒÌ·šï°È®â¨º«j¢Ï““³ÃÂŽ°Ç¥rDrÁ•…|hiu›šac´dfoŠQq‰¡¦sO‹^h’¬Qhœ‘bI•UfBµ‘X¼¤|H ¸ˆV®ƒ—‡‘veœ‡ˆN¨—nE¥”—>¥sV5_5bd1WLuj0AO/CT2DK"I F1/ Da POJV"LY vR4K -D.FiYYIuN7‚Zn-Rg53(h+b-~(sF—E^;“CƒHŒAehm?8fW„szUsJ‘AT b{T\ovI/Cu19Q”0p;Hw3•@vI–L™…”T™ ›‡“qj}˜Hl ew[‘m~Z‚HvNQ„XyQn]†„–j‚œ‘ž¬›¸ÏïjÁ¹ËμÂf´ÊÌz³–pu°ŒXx¢¤’p £q‡§™z§¤¢„’—€|¯Š‡†–ž†™´’•U«–¥—²¸‹–½“³¡³­Œ­y¶™³½‰Šh®xbŸ¦¦]¹£sj° ©e¨œÃx²~¹sºš“h°§ƒ¬¤Âc²˜¦k¬È³R¡ —••s¬•¶Š¦¶Å‰¥™˜’zµêz˜‘ÁŠ‚À¾’‘™º‹ ½g„¹¡¥mÒ©±uÔ˜Št¬¬„RÍ‚XÒ ZºŽŒQϱ g½³„›¨½pÍ«˜Žº±«c£¼£~Ž˜«SÖŸ·tœ¸}«¨·€¤·œn…«¼}v»‚m}ħnn¦¥Šo´žgtºÂ^ƒ²”wÅ‹i°œn‡©‰‰i½’vlÅ©¯b¯®¥s’³œt¬¢’m¬Ÿ dŸ‹—j†©˜iÓÞJ‡ÆÕiXÐÂ|c©®FIº°Eq¢°QF±àks²æzZ¿×UBÈ·JQÁÚtHÎã‚]ÙÈ€-¯¶ŽO¡Ëªi©áQ¿ÊÄ5£ÖÊC†Ë»GqÑÐWsÓÝLLËãmfßÂ*zºÊWFÁÆlD‰ÂiS϶j1«ðM.mç^-ªV.yÖv0Nݧ2Hߟ/vÈxQ£Â¡/7â”Q5ÌŽ+Jij?(·Ç$u´¢ŒÍ§ËÅxìÝlhßÖDkþÍ7mëáDfÝË8eúÖdÚÞ0†ÄáFFÙÑX\óàu’ô׶­×ã›PèÓ–eÀÈK.ÂòZFæØ@NÛ½E!·Ø\*„çm&µÄfL¢ÜVdoÓL%®æ{/sÍ/)¡ßvODݼ"3ä-Sñ¢rØÉ03±µ â´2"µd#2Ö¹EÙ‘6 ô©-'Þ–5»‰-€™!=°n4)SÊ0_ª3@./"5x##©42  )Q±>@Õ,/Â0$E0*» 2±3'¶!´('-°*$Ÿ?5!œ=2EÐ(&4åW6,ÇH+ÛT)×]%#QÞÔ34ÕÔ"iËÎXeÈØP>Ï®.u»µm0¶Ý`WÊÐs<æÑ'OÉÑ`&»ÊtÛßp9ÉÒo(ÂÅ’@ÊЋ±Ìp1­ê‹#ˆÒ´$¢Þ§ÒÑœ$¸Î¶.‡×ͺÅÒ”ÑÃ5cÕÔexÒÀ0ƒÞ¯+’Û¦)„óÏ4ZÌ×5‘ˈÚÖeZâÒ#YÍÐpîÕI2¯ÝŸ*àÜ"ÎÑ€µÞ¨„Ë¥²Ö´9²ÙÙÔÁ•×Ç$–䎲½¹sÑÍ@xÒÄ ŒÙ¹jÕÛ=eãØ5iåÇjÅÃT<Ï×F%ÏÜ5ÀÒ+zݾGPÃØj!ÖÆŒ/¦â‚—Ò¡ˆå -³Åz6“âµ›Óº:ì¶# Åˆ&QË´Yì­Oç»`ÓÂB¸Ö$vʵfhÒÅRLÀ¤-~¯²'AwÜjtÓº{g×ÇbN¸Ât3‰ÅuSî½iRáÂi>ÙÀ4šÖ¬;¡ÊŒD~ËœGŸÃÈFsµ¸W«Á©Yœ¹¹g‹Ì™RtÕ³I‰Î¶@c¸ÎmuÝÆo_ʼcZ¯¼jq} TZ‡¨K6«‹/R’°”]jÒƒ/tÙJB‹Åž+²=&QЖ#^Û€'l®ã iȯ"+±r)5èÓ#¹Z,1îq'1»AÆ‹%¸v!xx+™}#1:ƒ'>0b*#Ae*3?‰93n/*z0,J##–&5­.>·4«-'µ %½ )¨% Ž*Ê_ $°KlÉC:8ÙS)ÓF(½79/¤x#ƒjAp%ÔO/ª©Žš*Ž³,,”Î( OÊ,&€çSyóm%Lã¶5(Û´-õc-*ÀŒÖ*̘)1È0!¨Ã™¤&ÁÛ0kåá9BÎÑŠGÁí—&Ää†fÄã’?½ã¨&¿×©+«ò‹Oáµ+CÚÊ-jÜÍ-‘ÎÓ16ÍÏ?zÅãJE׺-BÒÙvµ²\IÔÎ;qÍÃBdä×DUÁÄqÇÍgZÇÕmNº×ŠÝÖ¼à‚,¬´ž,½ñµÂפÊ䙪⧡蹷˕ˆñÔ(ŽÐÊ!™óμá¨%|õ%ŒâÀ4]ò΋մ'cÕ±FzÞÖ,Ö´&;ÅÊ&¾Ó‹)ÞÖ`#Úäc©Ú™ºÙ¥"­Ù¢¨Ä¨*«ïº¶Ï²1 Ü—&’ë¬ bÒàJGéÒ7cÐÖwعŒÙÈU’é³8vÃÉfqÁê2i¿ÙLˆÕÐ?iߺBÂØtAÇÍlNžÄ«+~ÛŠ0Ùê|¿q®Æ§´ÅÈ[®Ì£ -„Þœ ‹ï¯ -_ñº)Ô´UºÇ94½Ê6"½ÑhĬWMÔÓ…8ß¼sP¯Äj`ª¸b8°»_3¶Î‰pÄÑm(–Êk5ºÁh._º´.€®“$¹¤8‹³È@£ÍÌQq¶Ê?¹½ÎdšÓ·lkÐêm|ñPpƶyd»´`:¡¿ƒR®É~I|®iˆ¶†V°R/‚·ˆ[h¬’CR¶°OMÏyH[Í´m`Ã~qe¹‹PS›‘k\Ÿ¾_L¤¿n[½¹Dr¦·‚ºªÄ­ØÞº¢Ô¦Å£Ø§¿È®ë¡x©·¾©±º¹Æ®µµãµµ®ÒÉÄìÚΣ×Ô¼ï°á¿Â¼Ê¾·¢fCÔ­Žyµ—k‹·Um‰±–mf§7qC¶"K8F+,LFM$; h<*U*F$YMH}O`%EmQle7|4!aR%X(N‚D=&¢:w^—5I0„1Z+Ÿ:œ\™I›ny\EÑç¾{ðôššîÝ™¬øÒq<ßà QÍädWäà@,ÔÊ=3ôÏS>Æ®+Ë×`&ˆÖ ,YÑ(1eìAyå0dÐc8bÙ\ ÌÌ|™ßµ¦Ô¦1hç…^Э"™Øµ6¾É!—éÎrçÊ+ßÅ4"ðµ&ãu¾"­™Ž…?ý(O!/2†,%U‰(3œ(Ã,J¡&R»+o"†0g˜$ ÕWÉ!( À)5¸$7¼K.ÈJ(ô-<7ÅO&Þ6/Ý€)Càp1.ƒŒ4/•§!ÃQ*Ο;|¯'Ò°¾"1cì1!kçl2Háy‘×°5±§0•!1å°0ëÆWÛ(Á¸8 Ñ©+pÖ>$—Þµá4aâÛb7½Ñˆ±ò§Æáu)µÏĘθ±Æ¥=}ÚÍ/ˆÖÙ<_ÖÒ>ƒÛ¹UÙÞA,è·>ÎáWÓÌg»ßm!´ë`'ì¹EEãÌo%ÙÏy0§Ö˜^¸Ül´Ô‘+×à€ -Ñä{-ÂàŒ'ˆã³“鶩î#©ìÄ‚Õ½”ßµŽ¶É"råÆ ëޥ豃ÕÛ/„ç¿VÃÝ@xÔ²}ÙàU]Õ½#VÝè0UÅÚbÛ飢äêëŒÃË«¦Í¹GÁò«8¹â› [óÍ@ ×¯Pè“' ÖÏ%ŠäÀ ~µ½*5ݲ ‡æÂ$^ÜÓ 1áÖ{ÉÀ1-ËÑ[?¹×M=ñ¾)QÞ¾@XÙÛ~ÚÊx*›¼…Ú¹'ŠÑ•7¢ím@ͺ¡/“Ï×÷ ‡Æ‘†áËuà±WÔ»^Ìß2u´»—ϼsHçÈC5ÍÄ;hÉ¢mxê¿~a»ÁnFÃÖhGÍ°g0Þч{ݽggÅÂW7Ç¿ŸsÕÙÍ5ƒËÃ+œä¯*±ÁÆ7¢ÂÆ*üÅ9|¸©mlÕÁ`…¾·rŠÉÎ}ÎÌq…½´j,ζ`l´©‡K~Ó„<{Å]B|´RSlŃ<<É£/D½€J€ÆœkIÓ—DDΕPT°]3H¹ÇW>¬žIRÇ ;X¯N·³Ö”ÀÉ°¶³ÃªÎ«Ô­¥ÞƬȯ¨GƫžáêÛÔ™ãÞÊÎêßÖÈÅÊ׽ȱ´Ó©Ìº—Ï™Œ³¼¶…M®£nbƒ¬†[Ž3fIØum€¤Yac¼<_¨p_›¦–Yx•¾_`œfE1£¡klšaj½¤íjh®¥eb¯Îqy§¾ºˆœŽwXµtpÆTšfaOf1Y_aB:BqBr]TK.G(X#50N8D[2~"b4dk&d"=N"d&J 1"AU]J#ƒXO„(L2f?uRš,2&“?;3¢>x7‘4G*Ž2ƒ/‹LS/}2k)Bo|nƒ‹qt5‚8YhboCen¢GiR‡L‘rTC…>u5ˆU‚E}`˜ }~‹°šzy}v]zr˜Œw ˜ˆƒŒm‹€zgkˆc~i?oMj@kqts¬»¡¦Á˜Æ¨Æ³¦Æƒ»°»| Â‰°¡‡”³’‡™¤Œ·©”άŠÇ¡¡˜§–À“œ¬¡¤§›«¦˜¬„£…¶·¢¢®ˆ¬“ÎØ•«“‰ËŒÂ£»•²¦¨ž°‡ÄŸ°›²Ó±ž¹­Ä‘¶”±‘¤§¡¢~ɽ–”Á‘۞Ø´†Á–¿~­‚¯r¡”Ä„›ƒã‡½•Î¡Â›ÍŸ±™Î¡ª±Âœœ›Ù• Ÿ¤›—¢ÂŸ¦Â™žµ«¿Ÿ¾€Á¤­‹Ì”ˆ½~ |°w”t¼ƒt¿‚†|¯¿Š³™}Á¢dš´d²’Èx«­©†–¦Ì™Â¦È›¡}­‘”¶‘q°žÃ”l˜ž{zœ¾ž¢£ Œ¾£¤¡¹±wz§xxp¹§ºƒ½ªkqàƒ|„·£ž••­½y°£b•‰®¬—i¦„žš†‹v¢ à7{«”9yÀÅsuËÁX{µÀ‰½ÉG`Í¿KHÊÇqKÍ¿wbÏ°{DÜÁ`ZßÃS[ÓÆp9Ù¼ƒN¼ÅžD«³zP²Š@»¯¤C°×Ú+§¶Â>q²¸^Tº­OsÈÂKŽAb¾¿pR¿Ì]9´¿ZPÑÂyM£¦gC†È\;†­0EmÕ…O€Ù¥4iÛ4˜íˆ4ƒß–;Žä™7JÈtA^ÛÂO@À¤=zå¥.‡ËŸ2™ÓÊbêÃÿæ¦SÞÞJÜÂT1ÖáDFäïbÌ©8­Ñ}%¹¤35_à^)‹ÊI2ªØ€8n¼y/°®Y?`ÔU}·W(3á–xÓ‰$ѹ³O\¡ÆqÏ«VrÁ 15ãy;4έ>BËl(1ËŒ!$Æ%­Š#CÖ˜8$¥©8+U›'*8n3#D¢01&#(0©2)EŠ"•5/$½$3‰:(œ!)²!$+°3%·/2€#7 …6)Ÿ9DYÐC5(®J56ç[;À0E¸€)9 ’/ʦ$×E#’£(’˜&.ˆ¬ ;‰È(G]Ó&/rÎ=*€ç‹(KÓÄ0±”#-Ú©68ÝÀ@?Éœ$#Òž#)Ò–:ž°* ‚•'-¼±(tÙÏCP¼âœH¿ÝŠ+¦×˜.°×4®Üª,¢Ø @¯Ð¥+ŒÅ³2oÕ¾7bÛÀ7“ÒµD4ØÔ:yÌÒDZìÉ7@ÒÓs?°×l/ÇÙ[—ÏÂ.8Ãë}Z³ÏwààkmÔÏg*ÂÕ{7à݉5áào4ÎãÇ(—ðÀ¼×«Óβ¼ÙÇ!›ÞÆ%²Êª'—ÈÈvÒË/‡Ð¼¦ÜÇ/™àÈ%‚áÍDzåÀ2žÓ³3JàÊ=ƒëÁEjæ¾@I¿çšÊÚŸ"¬Ï}0ÌÕƒÉÇ¥ À⨠‰Âžž×¬(ŠêÄ,rѸ‰Ú³ßË%ÖÆ,_ê°LÆé·0ˆäØsìÑTJðµ5ÀÉr&Ò¼NuØÎ=Þ¶.(ªÁo^ñÏiGݼ:0×É}6ŒÐz!ˆÆrQµ³‘=˱?‰¼«"KͶ)ŠÂÄCŒ¾©:™ËÁ'“ÑÄ8W½ÀZYÉÇF|¿ÙZ¼ÕÁ\MÚºO@³Åd9À w@—¸|5•Ï_6‡¥D>àc[i¹ÂQa®«?nµsJlÍ›IE¸·^[³‡GQ±²^Mµ 1H–ÑTLßTPÅÑIiÎÈ©ʈÌÆÍ¡À°Î§ÑÀÖ˜ÕµÁ£²£Å„šÛ±Ø°üÍϹãÍžÜÉ®íÁéñ¸Ú¾å¬Ñ²mV°Àϵ¦µƒ‰ÈÅoU‰Ä†|Õ¨oUrº^Su‘SRi¨œKËj<…´“b™¹vˆZÎãS'Ðg~I³xn¨³m:·Ðbs®·zC±©h/š¦k!°fo°¨ok±½}FS\NzTuc†y^%=xhRO.^T.2@#XO'>#e-N#+4Z2^j -t K]!gR$lO;oM"u$N!?*Ha-;-ŠD›WŽ3X+†2]v&ŸJ‚2—3rTNAWMƒ<‡h›…ˆA®‰ƒsz´«Ts|ic\µq~Oµ=~?±L‹Q¯[—i¢ªœ¨‰…T«Œ~Xt‡s—ˆPˆtgˆ‰ pœoft]wiYz—…y‚Ä¢¯®¶¦­µŸ´žÍ ÃsÁˆ¿¶ÊĸÁš½±y˜ÄžÀŒÂœË•£ŒÅˆ‘É‘Ï —­‡¢ˆ‹£˜†¤¯º¢„ªŽ ¥•”ˆš£’œªš—¸³žš‹Â~°–Š©©™‰”ºŒŠ¹©«‰ªÌµ§È˜æ¶¨Òˆ­»|̆̋ňÊ{ƠƉÉÀ…¬Ë“°—ºe§ Æ»‘ÝÆ Á˜¶©Ã¤¤š³†˜Ë…©ºŽ¢·»¦Ÿ®¢’«¾´¶Ô“´Àªª‘¾•||Ŷ‚׬¼–Ìu‚Å•±¬–Ž˜Ä¦¹{±Ž€qª£ÇŠ¿›šƒ¼·•Ð”£ ³–Åœ½¦Š~¢ƒu±¶¤Ž§³ª‹—¡Š}«‘¿›‰½¢—›Í¢€ž½¡y‹ÇŒz{Àvƒ†Â‰{˜¾ oËŸÄk¡µˆ†¼·”}­Ž’|¶™q_Ç‹–{±£­o¦ÄäIÈÕcjÇ®t^Í»RrÙÚ0…·ài^ÏÐ`_ÌÐoPÍÖóÊRHÖê­\Ð×H.̳B¼ÚU9æÏ14xì_*§ÏB#åzDšïv&„Ü\gÌÝŸ,Fµ#7Û…{ç†XÜ·u¼¿!Fæ¾4iÛÈ5*ÇÓ_åÈ20¬É1h×´;"Р ÌÁá”!'Fz= Ž*9-,e—#¢,aÅ:,^!-?¦!14Ò'6Ë*)2Ã0'*Ñ0#.±#/;½.&Á4:É>°mLÙB,CÀ96$ÖO66Ø| YÛ]7,¤Š!Ô‚#%Òß ÊÆA ¥Úp-’¸> ­äa,zà;0{Õ<$’ðe/ƒãœ)*ä±0Ü«2÷»%Àº!( €+Ú¬&!Ø›(|Å"+›âW&Æã1gÚÈ`5¾ìƒ&ÑÕ›ÉÈ›5ÆÎ¥(ÆÔœ.|á•,©Ã¼,žÍÌ/ÕÜÙÐ!ÊÈ2TòÕ4TäÍ:ÝÅbÊÎU$ÉÛv_ú½7\Õº&ËÈ’!åé‹iéÑY/¾ï€¸è‘.ÝÖq|Óã–'¶å½¯éŽÑó˜#Èܸ ¹áÂ$¦ã´0²ÖÅLwÖÞ+“óÝ1Žð¿"ÈÑÙ/wïè!KäÞ.xݦ ‰¾Ú2sñ¹@qÎÎ1tÛßeëÝ”Éã|>ÜÛ€ʲ£Æ噲êž/ª×›"”Ò°¥ÆÂ:­Ø–ŸÌº¯Ûà&wæÜ›ÎÃ(“¿Î.wøÊ*_ÌÉ ‚ÕÍ;8åÉ]&òÅ>UÞÍoòÎ}(Öä~:ÚÛ”W¸Ì|ª½†—݉äÁ–ªØ¤€ÚÈ]æ´[ÁÕ‰ Ù¬ zÓ½:…˹VÔÿSžÕº¢ßÄfHËÉQiÏÊVŸ·Á#oÈÌQƒÔæRGÙÒeO¿²qnØ®v[ÐÖM‘ØÃdMÓÏŠ=ÖŸ3µÛ?Ïʦ%’¹ÅJ ÍÌ>pǼ:“´=—ÛÍ-¨ÂÅp½¹F£Åºz‘ಆc¨´{i®³†-Œ¹iX‡©bbžÍ9q{×X[³Gj¾v>yÀ¡VeÒBqÇŸkR®¨OP˜”@F²ÀOT̶KK½­9V·ÏjÉ®Ïq·Å·XÌ®¯j£µÊ[¹³ÛœÊªØ¢À±¥ž¯¾³Ð³ÜåËÍÂÎÓÒ˾ڶÎÌæ«ÈÄÔ¼ÇËÊÄÂÃm®¼©S"ƒbz‡²ŠV`ÉGdo¸at‹šUD’»i›]blÁèÅÕ¦–`8¹€uOªžn_šzs_ª¾†Ê©¶‘m²¼~q«©zίo[¾šz—Äwª†cTšQfS¯irZJE5f8I>J->#)+@!IQ)@Laa=$*2S ZV#ŠX#|Lƒg ˆ"h€%^5ŽH&{V(|0j†Qf40NA{4“8ŽD«^8X+Š`OffC;fW”ic–4yj^D†ypgt`~bŠp™D—A¢X~QNwl™z“~{”a—Š„ƒ‹~™t‘{tm¡{‚S“f~_œW X}mRnmŠzyˆn˜±³Ê¹”¾¼³‘»yƊǾ~Ê©Ï…¶‚q—²™¸…ùՀÁÍØ–­›æ–±˜Ö­ž’x±§«ˆŠŒá“©¥»²¬­Ÿ™£›ž{¡¿ˆ®›­³Ÿ®¥´˜· ¦²°§ŸÂ´˜­›˜”Å“¨§°•ËŠÀ™º‰½¿ »³Åu­¹ìƒ·§ÕÏiÆ|µ©Ä‰œ¡ÄÆŠ½}¶´Ô‚Пܑ­Ä‘©œÎ”¸ƒ³œÂ«·ˆ›”Ë¡·¯¢›’½º†¾v~ƒÀ£žÀ¢f¸«¸‰¾‡Ž„Ä” ‚¶—ÞŽÍ®’ˆÆz³¢o`Ìœ²‰ª²Á•³§’h­›Šq­Ä‰®ž¬hµ´¦Œ¢Å·š§£¯‰ž±ÎzÁ²Ä©®º¡£³²–˜¹³q‡´¢‘¿¿{Æ·®œÀžt’½‘}…´¢¯sÑŠp“«‘†¶§™€¶¬«ƒ«°FuÁ 8…ÖÍeiåÍ1ZÈÕ2qµ³>cÉ´_a˸ŠPؾc~ÕÀ?<¿Ó\`íe^ÇÆ}\ØÉ€J¯Ð»·Â†;Ò̦:©³›;©×Ó_³Ù±6§¹ÉNNâÏOtÏá!™ÃÌ;jàïXSèÄK=ÐãdݽnV”­\?ŸëV)·Ú:A©ën,fÞ¨3‡Ý7Þ‘h€É¢-KØ¢ ¬ÞyRÇ¥9á¦%lô¼Eج3 Ù§%&¼¡"Ì©).Iz30tœOŠ6$:£;1(~25š˜2E“+-1¢""±)?,‹$#Ë-¿.*(«)0˜4'=ÍJ8'ºc4CÞ"5fÀ@.:äU8?ìi-ÝC.;Ê•¡£+ Ë­èb1¸¨4?´¸ŽÖ$'½É:/pÊ;‹×;­òl*Jì¸%'غ8.¬‡Zן%)È›%Ø‘(+ç{F›½¦ëB0§Ö5wêÖHfÀØ6ÍÊž$¶ß.Ü×E®é¬,¤Ø¡'ÀÐ ªãÎYzçË3{Ò¼<¡äÎ@MÙÕ,`ÈÎS‚Ô¶8n´Ód+ÝÊ5=ÞÊM UmCnX‡,N!y9G@£(;q5¤9QOy)T?´QG/¥Gf6°;X:—rqRbjˆq†X)?ˆ8{v‹{‰u4E]’hbtŠ\zG‘I}iœ[z¡q’I¶t¥{–g~šb•ˆ‹bexe}SˆirZ›P‚NnQn‰kŽ{‰…¥ƒ¡¹å“ˆÆ½¼ƒÄ°´~Ÿ¥~Å¢™x¾¢†~¸¥µÃ®Åo°É狩׊…¨¼x›™Ì’›ªt‡¨‚‘“gƒ®¬­Ž¶È­€·Ü—™¨»Œ¬»²Ž·œ¡‹Ç¦«‹µÒ«Ë±ŽyÔȳu©ª°{·²ë{ÌÍÛtÓßÃrÀµÍw¶£Óv¡ ÙgºÂÈd½¢Ëw¢²Ïr«²Úp¿¾Ðw¤«Ý{˜Éµ¬pª™æu’¶ä‘¯à£žÉwÓ·ËuÀ˹fˬ¦|²šcγq¶¶´x¯ÄÀpÉž·tÆ´Ç…»É”ŠÕ¤w¼¬¸t½¢œ`«µ©Uª¸˜uµ•¹n®´aœÇ¡q‘ª¶|ƒË´•µ®‡°¾©n‡Ä¼Šy¶£ƒkÄ°–jΘ­zǹtpήc…ÏÈd×­z¾°­v¸±œ]иÁy«¡_Ò¬™t©·´{­ÏÃN–¯Å.QÓÍBTÒß=wÉÔ2”ÛÞ?PÔ°h^àÙiVÙÛ>IÖǃd´ÙJJÁÔm[×Ê(Á²³"ÄÚ˜5¬Üx:ýº.žÜÑ$¥ËÊ)ÄÍÎ;RÜàAtàê2{ÜÇ,§ÐäHSåÍVWÛë[_ÄÇ>K½Ü=X­ÀD6«ÒRN¹Ëw)¢×¤Dsö­¬Þl6¼Ï¯!Ö‡&ɳF(¼-"³Ã2zé =…à+$¡Ú55Ê@"Aà˜6'ËÃ$RØ{,3â€)'Ý5Í#*Ú‚&)¬Ë&7ÁèIMàÔ6‘æÂmVãÚYK·ë“>ÁÌn(±Ï£€ß2ËòÑã¡$¨Ö¼.‡ëº!yä¿ÁÅ!YݯB\)@[…+9]\'>+•@cU:b,.!X,U—)U -I@#›!2_’#NV—;$ˆ%:w”)L2©)<#i/%IœrO<µ723¤122¬`[!µZ†p‘oooŸgC'•#7.”ecC‰|x\\‹ancw`iU‘6pL¡V\R“i„€ž:—C©@Œaœ|ƒh¹Á´Y-³É9*—ÚR)ÕÝv“ÌxI{èK;+ìV*FÊ'~Ã'Ceâ­&*J(´"*xË@74¸J67ÀS:0Ð8+FÝ¢-š¢0,¯r-¶9%Ø›)-µ´%>¾#"ŸÃ/6gÑCÖ;‘Ë:;aÎQ;$ÁÁ./Í*9èG,ÞP3Úž'(ׇ.3›Ü?2¥íaXÀÃ?å¾FxÉ׶aâÖ~CËØfßß‘.¶Ð"¾×ŒÝ̉'ºá¹Q‘ÚË>sè¿HµÖÄHPÉÇ1yÞÂe|çÒGoãÃ…‡ãÞ®zÕÊm§ìËURÖÌ‚kìÆs=ÚËeaÕ¿w4µÙtvÏÛrXåÚŽJÚѸ1ÂÚËUÛäš;âѪCÓßÆ'Ë×¹5ÊÓ¯&ÂéÊ,¡Û¹6¤àÊ%¼ã¼:àÒ3ªèÉE›ÌÇ0¦êÂ.rêêA‚ÑÆ5{ßÉHÆÜ–4Ôå„.á¼]+ÂÍV"×Ì¢'Þã·%¼Î¤#­Ú×*›Ñ¿¦ËÊ!º¾±)ºÒ¸/ ãÊ7nÚ׳ÔÓ8‘äÏ, ÆÇ)ŠåÀ%}Ľg9ËÔMLÝç*KëÔ5]³ÇWS±Î€,·Ù‰K²ÏˆæÞ¦$½Ð}MøÔˆ-kÊ®™ÅÏ"”é“(Ðј­È°@e×Ä&½ëÃ/iÃØH[¨Á4wÌ»i]ËÅVs¶ÔT‘¼­?g¼¡mx¥¼m?ÃƆh¶•|ȯh¡±©zg­\‹§¥C|½¯C‘´¢fɵ\®µ§m¨Áa§º¿]f¬ÐhM³ÑUwÁ­cКËv¿ÇeŽÈÁ€aœÅg‰•—v„•^W¦IJ~²ZrY£¶jišyPy·{fsª¦weʃeNÈV|~²«m_¡£b…œËykŽ·‰n§µ€N¤ºg¸¸±r}­¿™½€Ó¤Ê°à®ÍÇä™±²¸¤–ѽ¾uv{ɾˠ¥–°ŒºÕØÛÝÓÉ ž•º²…Ò¨¯‘u°‰Xˆˆ–§Àº›ƒ¢¹Y†˜„mb”ŠŽu£²‡†©€€‘™Z{9T£N“m”VP{X¢«’‘d˜R’›‡Lžn˜žq}b™pŸ¡·Ê¯J~‰Œl•¶šs‰ˆ‚€|­YQ]cv726R"5)G1+r‹4L9YK94RT!9 G$I\02$z -~ÆÙXsÒÐ@ƒËÆ%§Ð¼-IÃÒ-bÜÇO[¬Ì 3¬»ZœË8¨Ø59¯é_1Xâ˜Jã}´ÃmP{ô—, ì!‹Îy)gæž@-¨˜7­Û´6NØ¥!ªØ \cö›(•ÑÃ=„äÀ~ÍÀл2‘é­/±æ¶sôÎLoòÊCqú¬%Ÿä×(]ÍâLaöÒ{}ñß2hçé/rá¹:>æ½%PÈ +8ËÛW`¹ã}PÔÄMC‘äJ.¯Ô~.˜ÛZ6¢·/>iíU*Eûm%dÞ1'â®hïA04âž11å‡%eߨ=3̲6÷®"bϪ?¼Ã"`ÕÍ[FÕ•#?ÖŸ>/ZŠ+2z .9$‹´$+8’1"JŠ8#Kw"-(›F&=˜1@°I).³0(Ã.3:1´&3/Â?A#¦??OÈ5)OÍ,3 âEBËF:4Ò@=¡Š1¹l< Üg.-Íb&"¾“J<²Í!š5AÚ("‘Ì"3¥Ò58ÇG*$´ƒ-.ɳ5/óq=(ðª6½ž6%Ò—+7Ó¹<$·ïVR½ßO|Ñès çÑZnßÛ¡XÑÏœ3Ä×¢,àȱ)Ù·³»Õ€,ÅÓ¬;¯ÔÂA™ÒÛ3¬Ø®µÆÆÀ㬼ÓÂ&ÉÐÀ"iÚÅ'˜·É;¥ÖŸ&ÈÖ×3¦îÆG¡ÑàCŒÑÓDŠÞÛV€ÔÜ9gßÏ-ƒï§@,ÝÖ¤ °Ôp'Ý×`:¼Ö˜6×ÔŸ#±æµNÇÙŒ+­Û¼ ¯Û».àΉ:¶ÙÀ)£ç©'eçÕ"»á©%eÕ×7yÄÇCKÅÒ“ÍÙ6>µÍ`V¼¸4RØê*ÐÀ};½Õ@9°¿w5¯Ù_4±á„/‡ì†8ÅÎkX»êš2|æ·"TÍÈ#½áŠ%ÁѾ :Üϔ֮‘ÃëN³Ã®9±¨NÀ›H¬Éºf²ÈÈH®Ë°ez®ºs™ÌÅU¤Å¦csÀµtfÀ«tw¶Y®Ã¹Jª¤¢RÛ««_£¼®GaµÖ[»Ä½W­À²|аÇxˆ¼Çtʲ³T¡º¶n„È·qp±·ƒ†¼Æu^°‹h¨bfn«YY“¦FŒ]¤c{o™vyi£ ‚€³ztm¹–|p± qf}[zj™ŠlM™¶Œa†žur¬Äs•ª´x‰«º‹¨›¢‰½±É{§«°s«¹Â¾Ä”õ̠ªÃÜȧ¯Ñ²Ô¸Â¤ª¤Å“¥†Ê¤¸ÂÕ¡¾ÅÖ¾¤¥µ¡§¶ˆr¢†‰ˆcu†š²z§Åq°Œb“w‹b~o•¡Ž‚©kžt›±tq²›5˜.”i‡TœQ–m gŒi/œc–ƒ€oŒP}iŠUŠL{a‡h¥o¦x‘hwy‚jxˆ£dXœRA@¡s<6CxRˆf3.¤pHFx<]:P#-E=S5&† /2’2<«JŒ8*n( !€?4¬B?.”?@“/2A°/>+•>T E<(®7…h{\&~qhG²]>ªULy}sq€XisndHO´Hsq°Bšs®QgF™)zpŽ=oT¬kyXÃXjK¸qRdxPde‡W~=žddyeÐn£¹è••ÎÇb™àÜrÞ̨b®ßºs¯Ý¨oÅ¥Å`¼¢¾cÌ°³Yɵ¸`£ÀØowÖÜe¬ÔÚqžÁÌm¡ÙÎx{ÐÚl{ÐÊ“zÂ݃oëí„›®×}“ÎÏŽnж“vêÙ™p¥Î“„ºÑ™€æö›uØÚ„»°•R®¼^»Í±aÀÃ¥g¿ÀÇ]ÚÚÉY«ÕÔW¼¹ØB¬²ÒQ¯Âî[¿·³_Ç´Üd–ÂÝ`“ÅÖi¡±ÆgŸÄÊŽ Ñäd˜¼Ûf©®ënGÖÉ¢sÓ§ €ÖèŠ}ÐÆ£A˳³D¬¶Œ`дÊ^¬Â¼RʲÉGƼ_sË»Ìh­ÓÌ`¨­¿bµÏºb³ªÖc§¥ÕUƒºÌc¯Ó¼Š‘Ô¤‰cË›j…§Õcª´³ˆvöjdⳇtªÌ…RÀÁ‰^«·syÓÀpƒ±ª¥=Çš¦J¥ÃÏRÊʈW¼ÆÕy§´7›¾U¸¤§3‰ÏÖP×ÕU.ÌÅ@HÒÝG˜Õ®;lÂË\cÞÝHWË»JaÊÜVWÌÆj.½ÌB7½½S\»Ïm3ÛЮ0ÎÝT²Ç—6¨Ï—^¥Þ¼:Þœ6‹¿Á6bºØFf̪8£ÚÇ)s¿ÀG[ÚÀ=QزNL¨¯SJ«ß98œ¼/1±©8œåˆ-Oå„*kÉg+ÁÍ}=¢Íš=ŠâªŠÉQ0Zà¦?;ϱJXÀ¬YÈŸ"tÏÈ)q»ÏkѳX½Ø±}ÛË †Ç;¡ÝÇ“áÝNLâÃ9pæÕn°Ù­5yàÙ=oÜÌCzïÂ@€ëËhuæ¸;8ÖµF^´­4%ÄÞfæñ—9׺V"ÈÕX)²²šU¿Øf-†êWß®&Eå./LÙF"zÏ)=îH1*ç¤+Ô² /á¸1*í¬9"ä„!1Êg)&À»-'À«="­˜#Üp-2`d88Ml$)ZQ4 ?±!*5‰1$+©2Ty('€%(|,0“34©:*À)/7¯/'4|&0,´<!¤I36¥7)I¤%"CÐJ$:ÌW&²97'ά&4É(4¡†1"ÏO4À1,¬Á)”×C9¦×#A\é,5‰Ë{%}Ç7Qí´&#Èw1;Éh=4Ò5#ʲÔ¦$òŽ*²ìnEÈÏnrçÈ“…Ûá¥sÌÉÃ×צ‚¹Ü“cÍߘ ½Ô·+¸Û“ÃÁ…F·ÔÂAŠÄÔzw×ÛX²ÂÐOtàÉU‚˺syèÓUƒÖÕ‡léÜŠŒïÌjÜä}ˆàÍg2ÏáŽnÇàupÅÅŠ(Êæ“ŒÒàKÓËVE¤Ó¶"ж¨@ÌÀpX¿ÙŠ8Äà²d³ê¶?ÆàÁ?®ÔÈNÜØÍ7¯éÆBáä¨/©ÖÍBœÑâqÒÆ„ÕÑ<„Ü´M´Ì¿Kžñ×C…ÚÁ…1ÊÖ/áÚ]Rìçv-ÍØŸ Ö׋ŸÛ§$ÄÈÃ/©êº,Î߶DªÎ”*ÁÝÈX®ÆÖ6‘Ö²1ÍÞ½.€ÑÌ&oÍå'±ÏÌ$˜ïÒSeÌÔ5`ãäŸs†^•_”q¡uˆuƒŒ€aª€€QšttC‹™‹Ÿž„‘paijR6If*F#M [*O\+>"\#KU:$…E4}D‡$A1™C;T,Š-<{C9,†EG9¤T¤\©C?D»BE5¦-F/¨rt€ŠgpoiCxQšZt*|s_Te€ˆv¨VTl¡Q†g«Po]¬Leh}2¸§3µªL'¤ £È¶"8Ö¬)*ÞÊ8SÎÂ3têÁ˜Ò–9ŽÕ»#ªí¶;}Ó¿4ÏË3ïÕ? ðÑ+“Ø´-†äé;pëÐ&7íÜ*YÌÊLpÚÑRá¾H¢ÝX_æÆj›·:7é¿S3ÅË{~òWÇES=â“ JÝ~;TëGä–&&Û»".æ´1ðŠ3>®À:7Ò›9ÿŠ$A×Æ9uÚ“D8²ª½s)Ц:@¼'Vx&,¾w0&•D»!"0P)106Â#!1›3+¥) ¿#*%À)Á)MÅ'"¨5,%±9(SÀ"?têj8(ÕF#8ÏF#/Ô$)#ª·2 Ф(Óx6Óe4®KC¤¼=(‹˜=5‚ÅP*cã*'„Ì.-…ÝuNÉ¢5'Ì–"=â¢16Ú«+1Ô­-؉* ËÞC5‹ü]ˆÝá8‰ÖÍU…ÐÔ¡SØÖ§JÐæ˜;Ñ¿§4ÆξÂߦ´è…@Óد(šãÙ;háÎ9‘ÒÓ.ÝÐD{ʽ)GÚÅxÐÃzrÞÓrrÉØevÒèf›ÚãX)ÐÒ€iÐЈ„ÛÖMJ¿ç„QÖÖ_+×áp€áÙž>ºÜ¥0»ê¢NÙãz2æÔ˜?Èç¯2ØÛ½.ÒÒÃ^×¼,ŸÜ¹dìª%ªåÂ,‰ßÉ'~×Î`œÌÆ-}ÖàVå¿*èÂ[«ÕÈh5¹×}>æÙu(Ãß7%ÈÛ… ¸Í˜‚ù›>ÑË”4¸Ý·yÒ®%«Ä‡.¢Ù·%‹ÔÀ4GâÌ~ß ¯Ò½%ŽÜÁuÛ 'íÃ?5¼ç@eÓÙEiÑ×&tÉØi ´Òa3ãÛ‰N¸îy"ÀÞ‚7Ïé“F³Ët'ÁÊ‘ Kæ¡®á°%§Á|¤Ï°ˆÛ­)ЯõÒL…η@j¸Û˜\ɵelÄ«0pºÒTiǺPœÍ­UжFd¼¶TrÐÆsK°ÑYb³µlI͵ƒF»¹°8ßà”PÔ¼ŸU®È¹8º½MµÇÃG¥µÄx¢ÈÃd«¾µmÁ¿¸ˆ´Ï´fJ¢Ô‚^¬¦db»¹c`Œ­OQ©˜ME¬™YVgºiR[Ò‘XiÈai»|Nm¹˜R^¨œnWÍt]p·v0@¿¨_q·v{MĺZ€·¡=‚ª’ns ¯dÁ¢Çs›¼¦RŽ¥Ëiר׳۱Ñ·´ª Ã»Ï­Ñ­æÇѦ¬ѢÇÁÙ©ÊÕ¹—ª°’µº{•­®Œu¦Á­’£¤zWi²¯‹c›Tr¬»¯p€˜o‚;fvµ‰lcª|{£¸kjj³W{e¡ˆv[­>•j’0w^œ‚{L˜¹zrŠ¥;´¸„J­©€€ƒºM‰{qAŽŠ…FV9wi=Eq]%B;[rN…H(4x\Iq-L'AD9!NE~2As#MnDw [‹F ‘MI™"W$[*c˜B4:¯TpVE[1œBP(•NW,©0W8nia0•d_,›ef9’n}`xxE,g¡]L_TJKZgTKDŸP]{3[Z¬f¦RW¡d’Nœu‰>‹Y‰~†yjwY _z„‰špe©Ÿ‘ºÄ°™ÜÕrªâݵyêÏ´dÚÕ´eÿº°nǧԇ½È‚¢«¹m¸ªËi”«À~œÐƹ³È„µ¾Ù™‘¤Ø~¢Ûš«¥²|Š¤¥˜„³²™˜¶Ûh|ÊÜ’ŽÜØŸŽ¸Ú¯˜´‘·µ­}¦¤rÆÁŠváײ_±Ö­Z¡¸Êt¹Î¥fѪ¿hª¾Ê{ØÊÝxº®Ô{§¿×{˜°Ø™¢Ã¶g³·íw¤µÈq°¼Ìˆ¤®Ñf ½á“–¦Ðv—ÁÄt»§ä­}¾µ½ŒÉ¡¦w¼Å—Œ°¦µZ¼Ë¹l®Ç¸‰Õ·–m¤Ð~¼£ÑrÀª¶tÂÆÖo½¾§g§­Êu³º¿u©µªh»ª§^Ÿ¹Ð‘•¸Õ“ŒÓº‹]»¹‰‚©Öu¾¶¼ž„»–kvÑ´¦v²£m`Á½–`РŒ‚µ’uOÕ ¥i¦‹oÀ¤Äh°›¦e¥¤–xá©{¸‹œh—¥¼Cwͯ0k£Å><¹°yÓ™BŠ®ÏNk»»J[Ý«?Oݽ=oÇÝysϽPcö/oƬƒ\ÝÁ7¸Å”3½°KÓá“6«µÔ=¯ÝÉ>¨¿Ó&Ÿìã5…ĸFg¶ß#~Ñž2fϵnb¹ÂKF×Ã\NÀ±5A’Ü@@¿ÊJ9²¯W(pÛ‚B„áž4Šçk¤ÈiQYÓoZ›æ¤&˜È”—Ó¤5.Ϭ=Xî›$cß+¦ÐÂ,‹Æ²K[ê®.°ÆÄQ|ß“dͶ#¸ñ©+‡åÒ0^ݽElôâI¦áäCrâÐ:`õÎMëÔMmÎÕi?À­(IИ,9×¹TP¶ÆF)˜ÝT%ØTQðºQ -€±F «-4™ìUzÏ”DP×E(Eé8+“ão?Eè2/D¶Gi¼’aÐÅ@KÌÓ%'å­!=߬B9ÍÒ5.Éš.ª±5(Ðe~Š%`–.*Æ(0;º)-˜((A„:3I[*C˜,$D,9¤#(/ $¤(4«$?¹'*1ÅG/²@"q:vÛ027ÇU.>Ä:13×6#>Éz&(Ï‘>Ÿ]#/ÝM5¹”8=§ŸE ®=™–+gÆ!Ë8–­"-UÕ^(9Û},?Ìž>^Þ¤*<ß±:,΄,ÇÀ SÃÚfIãÊ`cîí›yÛÝzJÙôÃPÑíÍT»äªCÙá˜6»Ü›*Áç~LÚÚ‚1µêÏ;ƒÔ؃ŠØÁA¯éêhŽç¼LŠàÔ:oãÕ/CÏÚrgëÖ‰UÿË=‡âÅlxÝëprÏêiOÞìJAØâ†)ßâi3Ôâ2áÃiÊð¢I¯Ç¶³Û„5ÑÞ2³è¥9Êá»iÀä”+ÌÛÊ0Ú»!´ç§LØÖ 5¹éÈ(“ÛÔ?ç¼2µÔ¸"ŠÚÆ*àÎ&çä0•ØÖ“0ºÎ›>âÐMBáÚd#ÌË|:Ýá•(ÆØ¥6«¿»(ªÙ»"µÒ¥ßÒ:ÎáÌ-~Ó×#œò·¸×¶+säÖcزQ¯Ý¹R¢éÂ_L³ÊB‚Ïß -zåËHTÁä`?¾ÞiNçÇ7ÅÞ 6À×*×ÛºËv0¾Ð›ß®ÀÔ•ν¥X•Ý®$•ÅÃ!˜Ñš'tÙÅD–¿æF_¯Ë/T´á+xËÄA²Á½O9¾¤^dÞÃurÅÛgrʧm9µÔgA¡ÓlgÖ³‰?ä¿­K›Æ›-ÙdžPâų#·ÏÇX¤ÁÐH¼¸ÃXœ®ÞSuÎÀ;¥³¹;‚¹ÊvpÖË\W²·kj£”pd“À†HšÚqX«]Iš°=Hbͪt[²—jzµrO‚¸¢E´¼md·“@l­ÇZk¾]u¸§]f³™mN·ÃV`»¶\e¯¤h²ÅIU°È^r¨³_w«µi±¹¸p]›Õ‘¿®½½Í¢Àžë¹Ë¿Ø²Å³Ç³¤§á®»yVpšƒg‡¹r]~„†l¡Çy|œNikª^\‡›ª„ËÆo‹²lv“©†…œŸ{em–t9¬tp>¿[w—²‡w;ª…m.¾²`£É‡n²¯qz¢‡fH„‹rZ—ƒ|d†¤|=~ƒWxŽG|EgCNInV^`5/s_Og3m*^-I1V$%#A$aT8€4Oi I+uU`!<Q#9p!3,O'f!Mi9Mœ0NIƒ?¦r‡?„J[)Šua7‡m„sGx0~>šz|nfhr{†¥‚Žf•|x[‰Q9”EwLzQ‡y”n—9ŽuVu‰L› †_‚‘Žd”¥T‰ƒ|‹ŠÈ­—ž“·È˜›ÙÔêÏÏĶ“ÛÍÅzïØ¿`áÓ¯ŠÚÄË“®¢¶z¶˜‡ªÄº†º­Âj«ÞΛ›»Ó~²žÉ•¥¶’¦Íç«­¢Û“«Éº«¡ÄÀ°‚¹Í‘­Â¸~£³Ä¥Ú³˜~¤ï¦ˆ´ÀÁ’¶È¹„°³¿‘ÀÛ’µ³§m¼‰¼j¶Æ±uÑÝÆr¤¾»Q¼¤ÄÇÔËzº«íŒ²§æe¡´Óq·«Ê Íès™˜¼‚ŽÌÄh¸±Þœ®˜Â¢¨ÁoŽÁÖv¥²¶Àp¨«Åq¾¬”ƒÀ³ŸrÊ´¡iÚ³¹_Ò¥ºrʤÀz¸šÀxƾãlá¡qyÎœ³q¼Èd¢¯©kË•›o¢¬…¤¸ªs£ ®Œ“²”hˆ¯ªs›¯w«¿¶™©Ãº€Š¼¤xhÀƒ|Éž¦oŨƒcÌ›»{Úº~zؤ“f¼°“\Ì®‡rÍ©ˆt«¢–wЦ—h¦•¬~¨ÐÐL›¿½Eh¯ÕK^Üæ-uãÉ<‡éÓtQèßIm¸ócLÁàM\ØÄŠ?ºÑxtÁÏe€Ë¸Š/Ò¼³'ÆÕœEÁàž7Ã˯/šÆ½2˜¿«#œÚÔGjÑØBƒÚÙ8“ÚÐ0¤¥¾dT±¹XK­¨.;·¬N;žÅDC•×B2»+Ož«PMYá—*E¯|5‰±GJ†á¢#×x1Kªx<8Þ'2ØÈ3^Ü¢,GÝšiã¥&ߥ#@ö(™Î¸-zÕÅž·ÉA‡È¿¸ÄÍlôÛ=~Ýß!bîÎ'žæÝ/rÛä>aëÎi¸Ê:HÂÞRR»+8ë-6Áª+1˜à(,tå[)¹Æ>5¯°[­ã{>½êi(ŒÀ^$€ØœQ͆!jä,nÇ¥(*ñ´!6î“'7ªE,¼´5>Ū1CÞ­#1Ø«2Éá> -­».ä†#4Ùž@&È„;,k‹)j”"(Â)6d½*2E‡/Z™$;C© ?Ê %K¨5BÕ2"'¨*:¡%+IÌ,'"®B,Ã=*¡5&bÊC4BÜD)5âN/$Ó8»s'*Ö²Óc";̬K®¡GE»ÑC.›ž 3sÞ/jë.“Ì,(¥ß&9Ùª1(é©#6д79Ñ­$9èŸ#ÕµWÔìV?Îì_aæÛ¯eÙñ…§ÖãÚFÚëÒJÞåßDÉí™JÆÛ¶ºÙž#–ëz>ÄΧ˜ïÙk‹ã³,©Ý¨!†ÞÎ*[Ìã„tâî)šÑÌP6×ÚDKÎähŒíÏ6šæÊM=Ó×µÒìdUÛîLaáÍ”HÒ¾o)çèp”ÆÜž ºé³#²ï¤ZæÔtMÛæ° ºâ¥$ϽÉKÒߪŸæÓ¾Ó¯"Æê¯!¥ÏÌ/“ౄàá[™ëÊÓ½,~ÜÈ/nÞµïÕL°Û|#ÇØ~ ¸ÙM<¼¿|½ê„éËž¿à– “ÜÅÃÝ´ÒÚ†—ѽ‘ï®1{ðÌ,˜é¤œØÓ>z÷Ê$nѯ¨ÝÍE ÐÕjÔÏ*PäÐ+‡Àº`/ØÔH#ßÈy_Òâr&¼ï˜¾â‡(êáp"©Î—!–β †ì¿1ë]ŠÆ¹>Ý·!‰Û›&žÜÙ8¤íª' µÍlHº¶T“ÑËbÆÕ¼g¥ðÇ—‰Ó³VwÙΣšÝªlwÒÔlpßÄrj¾·OIêÛ9ÖÍ©>±É¢aäÆ¡(·µ®:¦Ì½6¹ÈÃN©¿¿p˜Ïßt¾µ¾qÑÁ¿Fe×ÐH^ªÆ‚9œÈh\¥Íucš­e^‘œO^‘ËU2z”_cmºw9nÒ]”¶vcm°­G\»•R^»UajÁ¬~[¨ ?V¥sQfÍ~?F²›bb£ŠtV¨ËcÒ²³Q»¶ÅLŽ·µHºÅ¯wÀ³¾ÙÇÄdzӤ¾¢Í¥ß²ÌܾҾµØÛµ°­c˜¿´…`’°vK{£dU¯”OM‰RRy‰Qn€¼}Z„ŸqYq¹l Ë¶Ä™“°uekŽ”yW´>rX·vqG·[~²n‚y«‰wq§‚„b·q~¤»ž€l¥ž‡j¦•nh¬Žor”q]¦e~\°lrŽ³x]889:Y1KK_\d:I,PN'E@'Dcb ^FKBOƒ:O;ž6Q%25A‰,J(† c ‡(i/‚)R=’,i.“?Y,›<[6p2A8jQ9xo|1“Y•CofUnv’yvxpmzm¤Ce [RŠf–k›v“l‰qš^}o‹rŠn”z‰y…^ŸjŠK|z–‰À¥Ó¯«ÜÙ°µÚ㪘ãäÙ½ê¸à‚äÆë‹ìÓÕ}æ㶑ÁÑÕ‰¾²Â‡²{ªŽ§°Ër°¦Ö•ž¶Ó‹±´Áo¦›ïž˜Î™‹¥æŠ¹¤¤‘Çñ}÷Á„xÄÊu²Ô哃ÏÃÈ}Ò³™…©ç¨‚ÉÌ£ƒåÔ¬†»Ä¢…´È§wÇÂס¶¦¯™¡à§eàÌÕ|º™¼«ÃÓnª£Ò~½¦ÕŠ¹°Ãp¼·Éi¶ÀÔs¬®Õ•°È–¾—£Ó¤½«’¤¸Îy›¨Ì“dγ›ˆê¹ ¤ƒŽx¯ÀŸ…¼¿®o̶•}ÂÀ©w¸ŸÎrÀ´‡j˪șºœÌvÅ«³y¹±Ù¸´¬·¸Ç“²¯Ô¤·¯¾rË»”|˜À¤z—³Ç|˜¸ÆV´»žl”¼ÂŸ˜·Â‡|·Ã ˆÄönسÇyä­®‡¿¶’uºžk¬°±j•¯ÂŪ¢sĺ¡tŸ³\±­¶_ˆáÇW„ÐÏ}VÌ»)kÎÙ3“ÞÄBgëÒ_nãÏCSÔéCSÓÆ\P¼Å[ZÖÑteÀÌiWÓ¿y>Å¥y¾Ï†*Ì·”3¸·š˜ÖÆ6®Å´5 ØÚ9`Ô¶7{Þ°7ªÝÈ6và³Ka»½bMº«DQ¼ÓOD¨àR&–ÑB1°×U6‰Âœ'UÊ•=¡Ðv4¯¼…6€±x"vÞ{‹ÛŽ2oÇÂ0o¬«0#å­DyÞ­@fÖ¹0l±»QJÓ¯Ⱥ½uæÃ0r´ŽU½°™"¢æÇ&ˆÙÄD€ß¾:ªä×ZeíØh}÷Övƒöà qÌ«QLÉ·P$ MDí­A¦®C"´ÓY#£åp@åÅC4•ÒjLÕË‚T·¸a6—èu!(Ã',hÜX/ÊS2Ë×o3,íºCÁ‰nß~*KÂÁd_ÌÎ*ðz58Ê°:HÒ¬'Ö}?DͦH3ÃÚL,z}B*˜p$=Ѹ,2@”!'=h,\r1N¡24l"/ –-ž”%$"´5!*—&":º$:‘53+¿<,6ç.2…Á!"ÅI7*¶l%>Ý<35шµr2 Ì…*AÞO6/¡›!8¥ÝU,µÈD šÒD”àP)ŠêZ$ä-*oÝ’0#á€/)ì©6nîº5(á51ÔÕ WáÕ6‹Íï“LÖḌÜêjôò“PíÚæMßÜÌGâÍ¡WßÒ¢N³Ô–(¢ã¬/Îã…6Áå½;‘ãË8žÙÐ1£ë¹P‹»À6lØÏF•è¸6=¾ÍrkÖÏ}péÄ0œáÓDnÏÆr~÷Ù\ÉßQnØ΄bÎÏ|ÎäƒrìåFPàܲFÂà¡8®Ö‡qÕÔ‘PÅÛ ãÔ”FÜ¿½#·ÊÎ5¨êÝ,˜Ýµ&×Õ•.»ÑÂ4£Ù¶2â¾$­Ã±7‰ÓÇ3}àÕ%—ݾ#hÚÏ-ïã•$Ç¿f)ÆÙd4ÖЋßÝÜØ™,ÃÛÄ,«ØÄ'²Ø³@»Å 2¨ÒÔ+žÓÁ#“é°¿ï²’Ü·×Ü0†ßÐsâñg:Éò'pß¾‡Éã-AÁÓjláìhU³Ê_>ÓÞ‹1ÚÛ$äça0áÒU"ÂÖ¦ª×ÂEµµ¡UØÀ¥ˆÁ¢$Œã¯*¼Üº!OãÉv½Ìì–]Ï·hhÌÉU”ǺhÁ»Ð™m¿»dPª©jtÅ»oTĽpRÈÉo5¯·mp´€R©Ë·+”Á§H‚°•2È×¢G|·®@ÅÎÒ=”´ÁL±ÌÐr\½¹L¾ÙT•­±fe²¶l\£º{W¾Ômb’¨wVªÇh]¦ÀfN†©>Inº}Y|¬“G€¿wFÀ§Š4x¤‡jc¦“p°±vj¢Æ[3žo_Mœ¦oZª¶}X–±g\¼Àh~ªÍ„‚³ÈªÛ¾´lc—˜Xc­­wЦÄx­¢Å»Ó£Û¾Æ¬³¸»¥»¹Þ¬©Šu•¼|‡ª¨’]–t+†ŒpD¯Ldu·~ld­Œt“ŸŽ=gj{õ±€…•ž†¼]v\’ot4¤tzY—xqH¥¼ƒ?¢WxX¬±zGª¹ˆV§º†vž²q{•~‰x˜Ë“m•¤Œiž˜Œlœ¢V¨¯«|X:k_g†„YF6‡q@O0r!@/@)R RF"RWFS”mzŒL6T,“P!o5F+› EyP%…O¦8™0?~Aj)†+[3‡6P"š(= et@t5…fˆ?i.°J¦t¯wqv}yY‚nokvEo~ƒYqo…om_~`Šy§oœ3“U¤‚j‹¯‘o‡{¨Z‰yˆw†±§³r¼ÐÖºŠêÈ» àËØÉÑÈÛ³ïÍæ‹öΰ]ÜÒ¨hâÒ¿k²Ñ¿w­¤½v°”½ˆ®´ß{Ž«Þsž¨ÍU©¸´¨³™h‘¢¾„–¸Ð¯†³™š‹Äš£§ù’¤´ïŒ¾­o‹âÕ²—º¹‰‚³À²‚ÆÌ™}¥º›·Áy‡íËß·ÉÅ|Ìáªr«×¡b¹Ê×tÀ¶ÇgµvË[¯±èz·ÇãoŸ¤¸eʪ§Y¶ÎØW¥Öè…£¶œg·«Ï›»Ös´µésžÍç~›¿Â·uÔ˜³kÆ£»†»²yN份q³¹Œjµœ©o˾Øj¯³ÉzѧœxÖ£‚nɺ¼mײ­l°Ã¥]Ë ¶g¶´žX­»·{µ²¨b³¶¢i„°´k•–ª[®¯²o…ŧ…vÁ¢f~Õ¢uvÉ£šaΪœoÚºbp×£znË‘Á~·©ÆJ—Š—TÀ¥W«Ã{hªÂ«Uº°Ïll¿²>´ÕÙDLÚÐqwâæELϺU…ÛÅwBÄÛOIçÞWXÍäc;Úço>Ñäz[ðÕHU½Û‡;ª¼™$Íã<¶Ù6³½­+¡®Ï2¸Ìµ-¢Í¿>l×ÐA_æØ5„ÌÑ#“ЪT\ÎÛjYÈËOHÁÉCI­Èt:µëQ#§Å8‰ÒMNCè›5‹°•-’džCÍ׎)‚׉0Y¼~"|Û˜6À¤EØ­%D²ˆVaÓÄF%¾¬W"¹§>œÜÎ-~ÙҚȭK‰Ê¾BžÃÂ4WîÙvëê<™Úº<¬éË,oøÓ@môÅ)u¼±,hÚÐ\&Æâi!ÐäCÕŸ&A¸Ør2šäMšãQ#©ÊA ©ÅOH·vUÒÒ6#[æ€9ÛEjô|4}è•;éS,nÚº^ݵ2BçÌ%6àª3äŒ žÜºA;¿ÄL$¶¯S9Û¾)1ª½D5¾jµ‰ÄŠE>x±'J¦"$N£"@J•!.%Ì'1-»!£¼x×.03Í*"DÁ#2³%1¾-(\²78;¤5qçM6/âJ4>Ö>0I²?&Ä™6¾”1ÊY5;ÊØ="œÈB¬äh/›È6rÏ/'ƒÆ&Î!$…â¤'JÚX/0×´BS¶‹WHì¨A:Ú©E¾¯!ÎÕwYÝü½‰Ùõ¹tæé‡yéä×^Êè³t»ä¶V¹ÐŠZÊÝ¢HÃÛ›ÇÝ~.Ãç»8ž½É&ˆæÆ6›áÌ(š·Ä7rºÚ/Wã¶6šñºLßÔLXÈ΂šúÏC•ÌºF:ÂàˆHÚÞvEçØe^àÝŒdÒÉk=»Ýw\ØçÀPË׶K»ÜœjÃËx]ÇÀ¹PØÛ­@Øå¥&Íâ¬,©ÚÔU­Ø½­ç¢#¶×ÃP¬ØÌV ÇèVvꯎÇÅAˆåß#—âÚS«äØ<=Üá’'ÅЃ7ÑÐ\6ÒÍ¡.ÑГ5¾ÐŽ"Ýï«A±ÞÃ&´Þ¥(¡Ïš;½Ê¶%xÚä$sâÏ.‹é»ÀçÌ#QÍÈ/\ÌÐ&~å¹:AÎÖacàëDXãÂFàÊj/éÇm%´Î“Òìx6Çç—%ÕÛnžÛv%ÈÉ­%qÓ­œ×ª+ÍžjϽ-`Þ¶߸¹ãº4ˆ¼Êƒºµ¿R‡¸ªY³¾¡>Á¶Ä=£ÐÖ±Í×}”ÎÈr’ÓËd†Ýµi‚Òºd¤Ý¬vŽÖ»•OÑÍ™/ØÅ©MÔÄŽ_Í×¥[Ô©ªf¹Ã¦P®ËÅŒž¶¿V›¿²Wн»p‡ÄÚ}È°jmÖºmf¿vkš¶bsš”BE—¬=JcÄ€nw¿o~{ª>s‘Á¬n_¶Ždhºbm×foj–¤aa±•e}ÈŽn†‹™„b¯¬\h¨AtŸµ|´³¸—Ö™¸Sz²ÂTΠ§mרʼ¿´¹¦É¥Å¦Ë¦Ï«Ü»±µÓ·ÊÒÑ­¤~p™¶Š‘ݪ”´šrz¸›sRŠ«T}˜’Dca¬rtŒ\}fštje¦„t”™} vˆh­zhaŒy‘–\ƒ8²jˆA‡o€k’±„—‘“sx§·™Ñ ©’l¼¤Y™›~|¢€k‡Œ¯«Šžp|oK"pId5gia!~Ng„hŠ*Aˆ%6Nh*%%u7|Kˆ43t†s´!:&‡)U"ˆ(&1’B †#G;„=8…CL,©HM&¯)4*˜TN.†AJ1yeXŒrG%[§+‚µ‡|{etxh—mpb|JO;teŠn‹\H‰`jVŸ˜M´<žž‚€£¥{‡u¨ki`žˆspŒ£~±®Ó…ƒÚÍÀ²ãÕ½ŒÐÍ„ŽäÔÂq×Òr•ºÅj´Ñ–cÊà¼z§´zĪ£©¦ÌgŠºŠ’Êèt˜»Ì\ª¹×”˜¸×“¯œz™ Á–}Ê“€­Ï¥u¼Û~›¸Ý±€½Õ£sÍ°¤ŒÀÚ§„°Í®yÌݱwºªžÁѺ^¤ÅÏdµÎ·p·¼ wêÔÞp½ÉÃQÊ×»p°Ç¿d¶¾âtªÌÏrµ©ºc²°Êg±ÒÈP¡ÏЋš×Ådµ°Âx´×_›¼c‹¨æƒ…Á­«|¹Íšp¸¶¢æÆ»eÕËÂM´Â°[¶¨¼p™§Ø^·¹·g¼œrMÉ©§\¢®×e¦»Ñp§Ÿ½_¾²ÖtŠ»Äk©ÅÙs½Ë¶‰’Ĺ…¸Ø†¾³j‘»©§‚º·šwÒ¹«s¬}|Á°ždСng¡É¥ŠÄ²Çpƒ §lœ¦›Wº½y±¯Û>§®×]¶Ê·W¼·ÂA¤Ç¾9£½à^oÇÜ+rÃÇ6³àÎ>oÎÄfïx8Îy%©Öƒ-jÖÍ'bÓ¦4)î•H}àŽ3OÛ¯]¶Å1_Ì¡,¹Ø°C©Þ½3…ÞŸŧ2²ÒؤSëÏ>|îÎC»íª:•ñ¾'œêʤƒÓÓ0}Ô̳Õ.:å96œÖB'«·cF¤õ‘,YõŠ)­é[*Ê_bÚe2R¾}‹¿ÅÀÝÅ-6¼ÆSÄÐÃ/NÒ¤ CóĹ·&α<4ÜÁ-;¼~--Ås6ËV1&ËÕ+37¬+ ?b<'|h5@ƒ 0/—(/;¬2-0À#@ž3.À !T”'0·('+£,&!œ3*r«)+7«0@B¿-&I¹-I2Æy3(Ór! ±H:0èdm¹µLS™" ¾¡<(±/.†ál!“å(™¿%9}ÌUL6Ô§FDÌ¥7åµ00Ý™>i̽(eàÕ=ŠÁÕÇYÖÔ¾bÒà ¥ÑÙ›ÜãÈqÛÈwDèà„SÜƲ_ËÔ“7ÍߘLÑË’+ªÌ­BrÝÆC®ÖÅ:ÄÞ³ŒÃä2À®cÂÑbÔÊAd¿ÞZ£×ÍM•ÄÝvâß‚jÛôQšæØtmØÛz{ØÑi=ÙÐ>rÈá¯0ÏØ©Vì̈?Üà©SØñ¤ZÎÕÒcÉÞ”JÌÝÉHÐÅ¥]§ÑªÁÈ™&ÁÕ·K½ÜÈ1‰æ©;ÀÔ².zå¹7±á¿1Ÿîº(—Åæ:É߈Ýà€^àÎv9ÛÅŽ‰ëÃ’sÚÞy#ÃΧ!ºÛªÃÚª"˜É›!©ËªªÄ»&–Ô² ËÒÈ“Ó§!â¾/¯íÁ/‰ÉÈ`rÂÀ<{»Ñ‰ÏÎ;XáÖ8qîÔWOäÏJBÄÍš)¶Û‚>µÐ:BÃÎT@Òº£$Êž¯Ö¥-¸Ãœ½Ä©ºÞÀ#­Øš)—²<Ö¿É=q¹ÁM€Á¸CœÈÆPÀ³ÉcF±¿Fs¶»pu¸·[ŒÊ·mT±¾tp¸Ù|xÆÒ‚lÀ«£DºÇ·D”šW̼¤1¢½®Db³¸Qz©¾J_£½^k¨×Y{¤¿Fu³bhÄÃsn£ª‹Y¥¸ki†”oq•ÓwP”£Xf‰°^]/Özxe±{e[Ä€bv±yn„®š]|½Ÿiu¤¬x\ ²_²…mOª©‰Tœ˜rS©ÄskŒ‰tg­«1¾v¥©¿–”ÂSƒ™ÊÞâ¾¹Úå¬ËÐّ̽Ρ“wË ÈØѦ™¿°¾ºÂ¢±Š›–ºŒs‘Œ{n¦Š•mªŽl_yY|~¿’›‰—”šfŒihR„iy†Z‚„vugˆÀ›eˆYsY‰…ƒQšg€d¤´ƒ¸¶g‡‰žŠ|ŒÅy…”³’…Š™µ€˜“~‹” ŠˆZšY}VŽ]5$}cgF”Dk720 "*LSBSL^DDCk,>Š&G9™@ }"F.?‚,>œ%J"€. y!.p— HH³FO1¬-4/ŸV‡2˜KD8“L]C¡Dh& [|r›‚pwªkc›ž{o{„q8 {“ni~ŒJu‘xT”€²(ˆTœƒnaŒvÊ·Š‚q–`v« ‰•·®Ã|¼Ö½×yæÑÝ‹çÝ«¾ÖÑ‚ßÏ¢UáÍ­kÉÙŽYÌÃÂb¾¹µxÊ™‰iª¾­Q»ÐÁr§Õæs°¸ÏY¸²¥}¤ÃÈq¥³Æƒ˜·Ý‰…¸Ì‡•«Îv‘·Ù\ŸÍ×`¼ì€±¼qc¶Å‚¢¸Ð«Óå³´j¼Î„™¸ÂÌGÑÒ±QͶ¥_Åݹgµ½©hÐÓÌaÈÀ°KÓÁ¹UÙϵ^¨ž¶^´¦²L²¹¦I©Íék°ÔÃ[ØÎÆhˆ´Ñ[¹¼ÐpžÀÞh°¤·›aÐÁ‡‰ÚÅtƒÆÛ™uâ¬RΫ£Dε—f»µÐ]·ÄÁgÒ¬«oÒÅ~]Ö½º`´®g¼´ÃK½—ÉOž¬—IºÎ\³²¦wÏÀ£“‡ÂÇV”¿¿T±®ÌzšÍ¼IˆÂ®]{âºh‹Ô°ÄpÂÄ|nɳg|ÓÄqe潤SÆ¥Žjß´´zÞ°™DÃܶ\µÍ•FÔɉB´ÚÍ+¢Ö¿PiÕì:TÊÌ cظ*¢ØÏK/ÇÒ8uÚÇ[uÕÐ0NÂÆbLÑÌETßàOwÒáAJÍÉw#ÅÅ–!ÀÚ3³¾ žÑ£<™¬¢n£º´1`ÓÇBaиU‰Ò£/™¹Î.Fæ¿PoÑÃ1;²³0O½³);¹Ó'3»±G1´×E,~Øœ-gÄ|ˆß-Q™æ”(Ö„9fæv:‘Õ—8à§Y^ä¯&o¹tˆçŸ&#ß$=ïE_Á¢8ÕÔ+žë¤(¢øª%°½¾#„ñÚ‚•ØèY°Þ¹0˜ÚЉêÆXrÔÜd“ÞÈYyÏá"mÂ×T5¸W-Ũ.B¦àE–£1°Û8MÊÐe+šäI4Š°/J´ÁQa§é©_×páMŠÕ„zß>Úª)ÂК1‰Ë°.@Ú™až¬ª=;Øl@"ÃÉJjÛÃ<"Ñv5+â£'/³y+9Æ¢5&êd (g0I™9´Š7FÈ—)+, +(²0-_£94²8.,…!41M®$HË(B"žJ@°/!V¹<1<×,58°M3OÂ=)¦€+3Æ|8Π8JÞ²$'É·6šá=0§¢H$|ûK5„Ð:8‘ëS?±Î@AGçk/>Ñ¿*XÆ¡;ë®?V̵6pÙ¨,¨ÜØw‚åÓÑ®úק«Úç‘žÓѽbåܤpÉÎ¥U¿ÔkRåÛŸ/ãáœ/½Ø“`ÞÒ´K¸ãÓ‘âàM¢Ü­%‡çÞ>ˆúÄ?nÚÎ5­½ÅSqܼWºÎ\nÖ½E«éÑ[ƒ×Ì_QÁºN7ï­PmÛÞŸzÚÙxNÚË_{é¹@ÄѨEÉÙ™FÛ΃RÓëÉMÖµ¶YÒݳ)àÕ–PÕÕÈsÓܼ0»Ù”3ºÐ5Ó¹:³ØÐJ·Æ¸HÈÞÝ$­ÇË-­Ñç'ÁÕßJ=âÐ-¾Úu<ØÎo–ÕÒ‰&ÊÙ|5¶Ø„Ä×–EÅß½5Öä¯-ÎöŽ9ÍÙ­$µßº8oÚÞ+¼Ç¾ÔÍ:nÜÅ:‰èÆ2žæ½ZUÄÌZYÊÏ=nÒ³ ”×ÒlJÐÜKZßÍ`AÀÌdAÕ݉(ÊLjAµ½n5¼ãz±Ü¥'ZÂ.Ò×n)«»¯-À˜*“å¸&£ÜÚjºÏ}MÀÐÖ_¤»½U´³§M¹Ê¯R±Á´‚ž¿½a‰ÎÇoÎÄÂn_¼ytÇεÀDzq•Ô½†W±·¡MÊÉ’YÊÉŸ›º¢³J¶ºB“·¼>™¤­[»Ãhw¾ÅC†¿µg‡»Ái^¬¾rV“²pc–½yl‡°iU”–]e‹Á[zh¦‰qq´}jt­jpwœ—ˆe¨€mf¼€{}«›|_›zm¨Âd¯µyh±‹€}Ÿ›„ŠŸ®{m›Âf~·yº³¹yµœÇ“·¥³©ÊÆÑÆœÑÂ׳پԣÚÕÏ•Ï¡Ó¢ÀÜÓ®©áȦ™Œ¼—¢•†«°ŠŽ„©{‚“ƒow ]FOŠyˆ{™–wwež^‡g`zš Žwâ­iˆtmq”TŒl~ay]൲©¡‹‡šÅ¡ÉÈͶ“²—Xˆ¶‹lžjƒ!tu|‹·˜V“Y‰?žnb+©F”¤º‡V '™lk*²[„S®H[R“]vJg[‰¦wfl™Rnu˜Dxk¥hw†…Fze¥)up¦‰mH•zn™‹c¡¦¦tŸ²¨i¯ÃÜzqíÜœ˜ð眒ÍÜ™áÒ¸dÝÛ„e×ÞœYÍÌhÙ§¸_½­döפêÆ¿h¨ÁÜ|ÏÜW¢ÈÑh™±îx³®¶o„ëÙmž½Útl¿tÐ⋈ټ[¥Éß{ƒÌ㢀ªå„jÌ¿yfäÌœ{ÃïŸ{ÒÎmò×£`ÈÖµVÈÕ¶[ÐÜœl¸¾ÌIÀׯUÂéNÅÔ¿_£«¸W¾ÆÏr¸Ü´eƯÌT¢ÂÕPœÆéX ÉÌV¶·ìktœÛD…µå` ËÛy`Õ¾“bÄ߈|ãâ|u±¾¤GɦŸ]ØпiÐÚ¨L±ÐÄ:ÇƶEÅݨnÓ£É=ǧÂQ¸ÅÑP¶±ÊU³ºÌZ¤»Ê\žÓÓ`½Â¼ƒ‡ÖÙqƒ£Èj˜ÊÄKªÂÄa{¬±S{륈zÄ­}`¿±OÍÌlhϲ‹sIJ¥Mͪ¸j¸¼¿Ù¨¦cÇ¿¢L¿Ë–8ÀħGå½I™ÎŒ)Œà¸5d¿à#m¹Ù!¦ÈÍ#™ÓÓ3Qã¾INæµ*aÑÒ\9Ý·JWÊÝGuɸ6`ËÐy7±Û„2ËÏ{FÔ×’%Å͵¦Ê¢B­Î¶1™­ÂPÌÎ4‘ƘD“У*w½¼8eÊ­KB³ÁHlÍÅ76ĤHD°ÖN¥²(2‡àb@càu!híq!ÄÞr7Œåc'‘Ü'“ÎfSUÞ¸5`ížP5°¢ß{#žÔÏΠQ„Ʋ&¥Ã¬šÈ¸M•áâ$ èœ&«öÄL‡ôôt§òÉN°ßÍs~çÊ-ˆòëx›ÝÞœcØæASâÇ(VÄÀXt¿¼<`³Ü6/«ìu ¾NHã¸@R‘îF,™³5¬Îm Ì‘B\Ú‰?È3–Î_)Ïœ]¾À²"¥Ü²=ÕèÝKoå¢28½ªVá—1(Ê·KSÌß2)½*Û~!Ý…60Úº@!Ì{)(£† uŠ(S¢7&bi28Ž#(3‘'+s1#[´*#05'*§-0• @¡>.&šL70Â2)¡6;8¬JKC³Q;>Ä;&7¾ˆ%)¸t?É}59êL5 Ú¡.œ’9;§£0FÍÌ]1‰­#C‚ÓF„ž¹±ÈI¬®«N¨³¯„uÊÙkq±½S›½¶V{ÉÈtvǵ{qÖ¶“ZÏÁŒN×¾rjÊÅz…ÒÇYY½ÑšfÂÏÐhÅÖgYÅÁ«<¸ÆÅL©Á­]˜ºŒS•ÛÈ<¿ÂÄ5@ÒÏ)Q¼É0†ÚÆ!¾ÜÅE\Äø/mÒè/rÜÖ5HÍÕSwÎá2Zêº)_ÝÛe(¶º€7¢Ã›2ÕÍ;ÊÖ¦)ªÍ•7¥Ç°7¼Á¶jÝÚ"hÝ჌ºÕ7ÌÖE4ããa`ÐÍyQÖÁ,=ÆÝe ½ïO7Ÿµ%\Þ›;gí—RÝ’x÷D;óŠ)]Ï™K@¼³PpÀ¢J¡ÄÄ>Øh,«§nܺ4!´´?oäÀ.IãÉ;0ÏÎ'*ê»6'×—+8Ëa.1£Íe‘*$^_+4^y)"C¡"'@¯# L³#.S·*$0—+"³#<œ(1«325“(+S¹&aÄ (1§=Q2Í6.VÒ7;Á–% Ñk)æŒ1.êW2Ö“&Á«I6³áhL¾Ëj0–Ä!-®çM-£ÚX37ÕŸ26¾Ä2fĆ=£ÐÉe¤æÅC‰ûµµóЋ[åáÀtýྀÞ⤦ÔãÒeÚÓÒKëç½yãä‚eÞݤ&‹Èy/Ãâd4ÚÛÂ]ºÝÜ4ëÕ0 Ô«|ÚÀ[¡Ø¯):ÔÉ$ÏÖYP±ÞW‘ÚÔ)máé–¥âÖeuåÕ3ZñægoÁ¿~äÕk=ü×gxÂÈt~½å²:ÖËŽ+·Ü‹ÂËc:×Ü¥/ÀÅ~ ËäŽ%Èà§;±àÇNÆÒ·VÛÆ¢¹à¾!Ž×¼vÙÀ/ŸÕ°1¼ÚêF‡×Û7¥Ø¯S¶Ë£//¼ÜW1ÓâxvÒÚlK³Ú…*õçƒ0äÔ€+Î΃Œ¿ª½ÙŽ$ÓÛ„Zàø´Íܲ!«ê²/±ê‚&¿ÓÚ%‚ÖÀ2’Õ³3¤áÏDD×Ì^ŒÅÌÑStЦ¬Ô’^ç¶+Yø¨;>Üš>ù#Й>\Á« díÁ3N½š1-ÍÊ2åm()øL:2Ö¾Š¬/:—‹12b91#†g15?‘'6 #2Š'.(y!4U§$,D #¤.w¦/Y¾-$¨‰UÈ39T¼9/DÝF&WÝq#®s<àª%8ÓH"'Ô¥).Ñš04Ž¿:·àd2˜É:-žî?OÄÍAF^ç–;IιL-È›:ªÕ¡Y¬ÖÉ…¨èÁ<£ößp£ÃÈÊXàõ¤xê鲶ÝäšzãåÖ\ëæÄCÝÛÇfÿÇ‘Ì×~PËÙ~AÖØ_ÔÔÁZªçéTiÚÃ-´å¼4~ñ¹/‡ÎçT¨×­@kèÞ€dã»^ÅÕ$µÊÈ:‡ÒÐcmÙÀ…‘âÇw„ÓÃmÔÂ…fìÜP‚Ö׎kÇè§`½æÊkèêwEàè¯ZÆמ@ÖÙ¨:ãΟLÛÝäI½Óž+ßÔ°7èÓ¦X¼ÜÇ+¨ÔÇ-¨äÃ8ÉΪ#˜ð×BÈáØ;©Ü×hÙÆeOèÙyjÖÖZpìÍw[áâ|)äÔ„&Ò½voàÍ¢¶×—@åê–GåÄq+ÉôœA¸ÖÁ+žÑ¯!¶Þ½%µâÒLÅÌÑPÎÀ*³·ÍKdȵ=w×É%®Û¯GrÅÑ_bÄÕ?rÐÓjxÇÀ†#Žòv9ÀÇLN·Ù{<Øݪ0ÇÒ² ã‡RÝÖ™"ÅÏ’$´Çº'Òì¬7¶ÕË?ØÑÃ?‡Ã¸V›ÆÇG„À±ZÅ¿²[‘¼Äz¾½°_~ÀÈ™»Ð£pƒ³ÃkkÖ¹[ªÅ¢ekÒ©„S˪L̲ŽbÀǤY½Á©Y­¹Ãc½©¶MlË¿b^¡µ[gµØRŲ«cq·¶m\ »K«³_]‘¸uh—”VP„‡e)©¢Bhg¸‡db¤dkÉlo¼vqq±ˆeS³ŠvŠ°©ibž”\a«£b9š…yn²³|e®¯Ur¹³~O_>£¶c^ ¿~Á«Á°Ì˜©…õ«ºÇ™ÄÄìÇá¶Ä”ËÌÅž³—髸ÈЦ«Kb£„¥›¼àÃ×·£Xs¶›‘ƒÃ”zV­«ƒœ}jiNhw~†potpmt…YƒC°°zbŒocC–]‚g–¦„—š‘}{̓l“ÇâÝ©‘q‰g¨e«Tœ†•¿n:w¹ ~„¹˜Zv‡}j”hf€€SmIT¢:£q¤†-Mhm8?k_-.C+J@JW 7%|D/m$E"]Hc‡!1Zr91’=e&eA…%­\.O9E`ž@_%›;=6œT;2‡W|3³vr= Hˆu¤zxt l…}lS|~{e‰xˆhg~£kžáã{UzNn}™œu«y‚¦¹k±Ñ㿺·Ñv±Ò鎧ÜÑÆ„àÓ…|ßã¸Ûîì¬wìÚÇdâÛÌkçØ«KìåÆYãm¹°¥cÉà—X·¼Æe¡›Î”•¯ÇpÀËÚ{³Ø€—¸Üqµ¼ÈwšÇÎ’ÂÍ}zÎÖGª´ÔW…¤ê…`ÅÆUµË†Äê¸|ÎÒŽ‰ìÍ‹j½²Šu´Ýµg­Î¹SÒÆ_±ØÄnËݱf¸¢°U·ÁÓ\°­ÎH±Ë·W²ÐÔ]ÏÔ©N®ÂÐY¸Ä×q¢ÞÇ5·ÑÎN•ÏÖ]²²Õb}¸În‰­·ˆGÆÓ«Š´¹€b£ŠƒÇÀžNÍÀ¯Uɱœ}·ÓaÁĦP¸¨dØ­‘g·Î g¶µ©d¢¥ÄEÀÇËM¼º¾_»¥ºn§Ã§@º¸Å…s§²z È¸M÷`«Çx~º¡oydz‚v¶Á—R¬æ¶‹Ç¶{~¶½aaÞÀŽH¹¶a¸¯m\ÊΡOÏÀ…Rɺ‡,θ”UÀÍÉÄãÀ@_ÖêInØÒ,’Å´/°Ïà-IèÒ%„Áã?G½Ö1rÏìV>ÃÏclÃÅ3pÕØc5ÙÒwÓΆ"ÕÉl Ñ­®+ÁÉ©,¢è¶%Æ¿–.‚ÍÄm|ÔÉa~ã¾ĽºWlÕÏZoÓ°]oÉÁe¶,/Qß3&PÚ<+PÌ(+¯~µO&ÙY>>Ò¢$%ª¤BÊÍe$¶Ü4>„ç-?šÞc.›á…K¡Ær(Dê´ 1ܱI`æHÁÍ爪ÝÂt×ÓY¾ÚƲbïæŒtÕÞ¦ÚímÿμTÞìÍSéã™JÏÕx^Ê݆Äâ›!ɾqHãÔ 2«ãÔ?€ÔÂ8­Ø´G«ÒÎ,œÍÊ/‘Э(¸¶ÑTàÖ<‹ÑÎfê´+šÓÁaxÃåxeÐɆÍÒHvñÜzöÈ’hèÑaBÝçw4ÑÉ’8ÈÒ‘CÖ×xUìÓº_Òà¨'À׊?Ú¾”¨ß©&·ÖÅMÎߎXËÚ·4¥ØÆ9¢ÕÈ?­Ò¤3ÃÔ´6¤çÆ.±Ó¶,šåÄ68ÚÓ{OÒÓMNäÙDBÝÐn@ÕÞu*äÍz ¯Î7Åק%ÓÔ§/ÒãcºÞ¡'Û½…Ìø̔3ÐÖº ¿ê£,v¿Õ âÂE`ºÚX}ÝÐ,}ݽ€ÎÑOiéÕx-ç¾x(×ëpbÀ×nJàç|+¯×y:ÉÛ~!²á¤*³ãŒ"¬ÜpÊ⨢窌ӷžäÐT¯º¿t­Ó¿d›ÚÈm¼Ê¶¾º¿Ÿµ·¿f†¿Ôr¤Ï¿r«¯¯TŠÑµ^…ÃÁd~«Í`žß§‰L´¤¡`ÍÁ€:Ô®|M¢Æ¡=Ÿ¾=õ­My¬¶b€½Æ_£©ºiÍïh[¸Åv³¸zd†°`‚—¾QM§¢Z`›®_g¬¦JTp‡^s`®‡_y¾]q˜Ïymv¬zgs‘DUs¥‹‰g§nj¼«rs©¶kc o\U¤±E:¥¥mg Ç\wžpt½¾g¸›¦t§ÑÁȳÀ»ÀœÍÎÖ¯á½á¤ËŸÒ¨»ÉÙ£¸†Ì´‘sNuA0nF6_3<…(;A{ %es#-4{"K=¢8O;©(=&F2e–2|[ª*J0¤'8(¢V%tXC&t?J"›:w)ŠR{eu~‡dr€`€o‘{uY•M˜²˜q‡i£q‚v…w†”ªÃy©Ù€“›|¥µÎ|£ÜÊe–ÓÈv»ÕЬ‚ïÚšˆà䬭ÖÓ¼£äÈ£páŵ`컢xÔæ•cÁ²¾i¶«°‡¶–}¿µÆx¿Äãt˜ÖÍ|«ªÅe–ÃÌa¸Îq‘¼Ìb ¿ÛŠzµè£Ž¬ã{š¯Ïo²âáŽÂÀ pÛÅ•‚Éíˆ}ÖÏ’}ÝÅZôÏŽv¹Þ‡eȧ¥R¥­¬kÖ¼”Òè¶`ÔÓÊfý·\ÔÈ¿V±ÀÂ`²œ²`¾Ô¯t´¸¼b¼Öd›ÊÕq´ÆÄ`­ÐÊl˜ËТµÏb¢³ÛwÅã¡xíÚ‡£ÍàˆVƽ¨aÍÔ©[Ê¥‰k±Ñ¨kǽÂN¼ÂÃhË›¡jÌË»iÉÈÌjÃÁ½Y»¯®k½Ç¾_°°Ñq•ÅÞZ½ÅÚx²¯s|³Âc‡½Ó>¯°¼x{µÆÅĘ_Çìa¶«‡[ÕÇthÛºžmѵ´>Á²ÕW®²»[ÒºxVͲ£Lʹ¯X²Í¯Bš¿ï-€Ýª0‰ÑÙ“Ã5¬×`uDW>_rsPiU…žih¦tT|M±j~Y¥vzŽcsˆl}ƒˆŒ|4rf„Œf•Äli–§’x‰rŠqšbA£‹ml‰„ˆ€ ‹·¹§yA†wqx“N‰F¥Žšo4M#fMAdXm9|O,-‚oEM5m!>,WIPJ}TM+‚"I.r@X[hWVD™'8;˜4%‡€Ð­¬Þé?XÙÞRhä×@XÜØ@`ÛÓI@ÐÇEkÃÍAsÀçQ!ËØ…G­À“9ÖÔ{7ÐÕ¿$ÓܱAªÕ±%ÅÒ¤&r¹½;pÌç5g°¡J­ÀÈ;D±¼I_±¬Mi©¥9=¤Ë3N­ÃNI°ÇKX’±E#|ê‚5sÞŠ& ÒMnÜq/†Üv.uéswÖP,бF:ÇŒÜc1{ÓŸ-b϶(=¬§¨¸‡‹×ĥϱ0œÍ¬A³ï¢yéÄ2‰ÒÒC çÏ2“ܺ/¥ç×/¢äÆ-^½¹K>Èù¤tÞÛ<(ÅÊ)>ä½F.Ž«²‰9.¼…+'»”7>Ž$#›¦K˜¤0lÞŠ+Qü[%Žå]$°âŽ:QÕ˜dî”'‡ç«QEѸ†´³.>òŒ|Ѧ/"Þ»78¹¾8%³¼2CÉ¿-ÕÀ4+ÅŠ6<Û“F-…$(¿‚(Ùl'Žj#=µž$^£!²“q® 5O¤3Ÿª;;¶¢+0,¦#2³7?F¼%|¿:@IÜ03AÒB(]Ö?7-¶–0áU.ø4GBß•<¹ÇAÃÐ2!¾×[9¿Þy$ˆéo0¼ÉnO²â4«ÙªŽïÇ †æ›¯Óž5¥÷Ñ_ŠÚÐØ¥qÑäÀŒÕ楛×ÕnžÕÜ´^ÝçÂ_ÖÕÕGåÔsMÉËsNèÛŠäåwÁÓŸ9¶ØáAŠå±B¿âµ+¥ÛÖ9†à°!„àÃA¨ÊÔE*ãá1sºÌ0‹ÓËI¥áænyÎÊ@VºÒPhÛÕWjÑáz9ÑÚ†`ÌÝNsÒÖo?®â”GÜÜ‚9ÖÍYkæÙ›AÐÞ³!ÑçŽ8ãÖŸ(­ç¥¹àÂ*ÎÖ<ÔÄ3¡Ö¬"Žà±&²æ4ÄÐ×PµÐÈ1¡ÛÉB¹åÖEfÎ×^TÙà’{ÄÔNCÁã_5âçp.Ðφ8ÛÞ)™³¦1ÔÒ~-¾èr7Ûáª*½ïÀ+{Ñ¢Çá‘?ÔêÆ/¡ßµ“ؽ$¹Ù¯$KØØ'”Ù»/‘àÀ-»È93ÑÀ-0ÎÑj<ÇÒp?µÎˆ5ο‚1°Ô†HÓÏ|›Ï²,ÇÍ’#è×cGÍÔ©%ÅⷌҟÒÄZ½Ã‡YØ΂uÍÖ®©ÉØcŽÃÛ†¯Ú¹p ÓÐh£Ì¯S¿äÁ^•½³c‰Ç­`›ÏÁs‚ÑÇ—bÚÂoÒÕ‡^Ó¹£mܲנʹ»TÁ¿®#d¨ËZ†´À…Å»¶5tŸ¥< ¹È_^³Ïsn¡³Sd «n\±UZ£²SZ§ŽcV~¢?Ux´\t¼]z“”34a±…mo»^do¬xDH„‰tU¢‰VY¿ž\k”†vKš˜q^‡’l\¦²dš¯¶M³¦½ä”›ڲ§”¿¬°¹Ì£´yȺÒØΗÒÂÁŸÓ­ÁÈ•¡µ¹tª¶†Á៙³£ªƒÔ©Åmy‡dXzDGa,:vNžthd˜‹bgs~`l`HJ]y®‡}`£^™f‹u…‹|­\›mxv¬˜•fzhiƒ£›¬È—µq—‡”„q§ž|t•n…wš —{†{¥‡b‹w…i~}š‡…m}T‘–¥MIDŽV-(ƒCB|X ?sP/ASv/%„v.?YŽ/X0z70yu0C~A-‚!I/F84RSª5K(—J‰:‹6R:«;wHˆuA-ŽOR®S¨hwˆ~rzx…|c—¯z¥Šœˆ‰‹n‘¹“‚€kžŒxÓÃňËÛÏ—¦ ³nÌ°™®ÎäsÍâ±ØÑÝÕÏõäáÄÜÆ› ÄÇqœÏÒ˜rÕ׳jÞÔ»bÒŸˆÃ¿³t±¬Çp·¤ ‡àżu¶­×ƒšèÝl¦½Íp°Ãéx§áÂi ÝËiÁÁÕ¦Ýá‚È߀€²Þr¥¾Ò—ÌïÛÈ”ˆ»ãŒëÇ«ˆÕÔ wÎß™½Þ­‚ºÉ¯_×ñn¿ÕgØϹhàÌÔcÇ·»`¾Ì¾q»ÏÏ^ÌÅÒGÖ×·HÈËÍe»éån¶ÞÜp­ÈÏg¨ÄëU•´ã\¤¾õa²ÊÕìñÒ”Ç匇ÅÓ–yÕħwùÚ®v¼Á¬i©œµSÇÒ²h»Ð•`½¿Ñeµ³»ežÃÔXÊϵn·¾åt¶Ô×\´šË^¹©½p…¡Öjµ¶Ïu™¬ÌA³¹½l€¸ã‹zÖÏvÓ˘…Å­ƒnÅË’hѦkm°°hǽ²b¼¬ÃdÁ¹”h®µ¨Hʨ”Q›Á°X·º×1 é9ÌßHCâäb…òãH¬Ò²(uËØ8rÆÊ;lÁÐ.nÕÞEzÐÎH]Îì8s¹ATÏÉ„=×ËZjÐÝy6¸Î^%¼Ñ«c·Ô¿8¹¿œ7˜ÁÇ-wÑ´0…ÖÁ? ÉÃ&zɹO\½°3\ʶFsãÐK/¿¤ \¬‹Íü© ]ä«&¨Í®AiÔ“*QË…$(Ž4]êÍB%àħ(*ݼ,&å¨)"ÍØD5©$ ~g#œH,.m{."ix8'hp"/Cˆ!L¬'89£+4Ex0,6œ)-‡.:#u $_¶/1;¬&(Qó7)'Â"/Dà'³R.ÅS1>ôš09Ǻ9?´ÓXQ¾ÝGeè¿n'Ìåi5¶Ô_)ÁÜM^¼Û·T¾Øè œí¿B»Ì¼2ƒøÏj¾ä㌵ä×{ªæâÇlîë®^âã’Ÿß안×ؤpÖߤ\ÜÙ–\ÆâŽRÑÒ€5¼Ü|6ÑѦZÓà·W±ÙÔŽ Ö©;ÇÙÛe©ãÎr›æçp›ßÑVˆÖÞ†uÈÉ`tèÕnžçÐ<ŒËèƒ~ÚÂc´Çoã˪wËà’ÂÕ€cÝÏh{éÌ¢ZËȵQÅêu…Ìʘ^ÉßÃcÏÝš'®Ô^ÝÙÏQËÓ¼P´Õ¯`ÈÆ}L³ÔÓ^¹ØÏRŸÐª.Äç¹@¨ÑÅ;¸ÝÊ;«èÓ<±ÜÎ{gÕÝ–rØÛ_ãíwGßßuSæßÈpâ×lMÒÝÃ9Ëß‘LßÛ›NÕÞŽ'¿Ì²¢à¾7ÄÎ¥2Þé§+±ÙÑA»ÔÄ&—ïÀ2™ÔºRÁ³@†èÍ?ÀŽ1RÓßWƒ¼«IgÝÓA;·ÑhTÁÓ„HÏä^?ÔÌ`5¼Î•4¹Î›,Ëìo/ëÖo®Í£!ÔŸ?ÍÝ™2¯Éȉĸ»B‰Í®f ÝÅ`ÃÃÅCËÿ0|ƸTØÒp˜ÂÞˆžÞ¸J˜³Ñ[›¼Í4~ÆÇuXÚȤS˜Í’ZƲc@ž¯¬d—«KÕ·´AŸ¼ÐB§ÁSr«ÀB ÁÄB½ÃÅT\¿¾[`¥Æm[¶È~^ŸqX—š?Oœ¤C'’¤Y]{ÊQO¨ms„­ybkɪ|r¦h|«„na£š]Z˜´ei•»Re·ŒqM¼ª|_ªºqw§µnKÌ©dP°È}“Ñ`¼¦Ã²Ýž¾Ø±¨¸×¨¾¡Ò»¬”ʳä¾Ç±¿oš¨µ±Ó¤Á˜­»ÚÅu¯š{Y‘¼§‚¤ÀOrAT;Cu`J•žqI‰Ë•OŽÆˆx‚XWorRed‹JƒB||uvÄm‰b›n‚eŸ~t†±„U¦¹ƒ‡nlp£Äƒk Ÿ‹º”‘f:‚to£›‘‰‹m„™oJxw‹o„r~ƒ`m}p}`pYWN@c2{>=1UaKKZOaIr{$;3v%70`4M$ˆQ.\$)3ƒ%V+r;J.i%bY†/19šGj8©5MŒ'=5`I{/\8•PH”“r£nŽ‹ƒˆœªœ‰ºöϸꛉÄÉ«£´–Ƹ•öÙçÝÍÎâ­Ö¼ÎŒ§Ø؇µËäÀÞáç»àôÞþ¹þÏ»‰ì岡ÑË~èПuÑÑ[çÞ¦€³º­v½Ÿ¥}¢Ø±w®Ô±qÔÐϪàà™½¿k×Ð×s¾Ù|ˆºÄq“¶Áj™º²£Œ§Çw£…——ÇvŠ«¸Ž€ß¿—t·ÆvƒË¼—tâÊ–ž×’‚¼Ó†Éµ¯‚ÚÓÃq¡µ‹x«·ªqÌÈ®[³»¿mÁà²wÕ½ËkÀ¨²g¾Ï®w¹Ø–S¡¯Ådœ£º_©ÍÔS‰œ»k‡ÁÆU©ßÝhu·ÒQ¦¼Ä–féÒ‰k¹Û•„»´‚[äÔž:ÔܯRÊÆ“a²¯ÍbÆÁ™SÒº¯_ÏȵqÁ¢ÄdÄÃŽ9«°¿cÔÁ[¯ÁÞa¶»Ãr¡Î¿S›´£lƒ·¥v~±Òl½Æ×j¾µz“¾·amÀ¢iƒáÁjpº©fa̸Œ²®}gåÀ¬Uм™Oµ³}KÑ´}FÄøfƸˆC¸¯œd¿ÝÂ7æÀIwÞÐ:~ÈÛ2–м1¬½Ä4]ÚÐ>cîßEbØË7SííF^Õ÷RAÁÕ9nÈÆFGÚáA®Ï…7Óú~EØç›_²Ý•8Ïؤ2®¶Ç6läâ kãУҾ,±ºÃ-UÍÅd}¼ÄaHؽB3ÅÖ9P–ªJK©¿J7ÁÒ^CoÏ|4_ái*›¶HO—òs4 ðk@‰ð^1 ØŽVQê’0Hå§,yÚt#‹î¡QOÀ¸>U¬¸WFÚ,}ç¥%ªÍ½³ä¦$¸í¤;‘èß.€ä¿(±Ý%»åÐ@‰ÞÆ'†ðÁ@¨ãàuYòÛ.AÏè<+ßÅO“ÎÄD¹‡68–ÕW@®»37¶×m®àoG¤ªEA¼º/6uÙX'eã†2ŽÎ=/²Õƒ&]å™#Àäš/`¾-!ݪ,fä§*B»šdÍݬ/)á®5E¼ÃK1³Ã':¿Ï.5é­#&ßÆ5Ë…š£F+С('¸]$8¹x'<ªJ1¿¡=2E*#,­2­¦4)A®"2Y|1,¨=;¯ 'C«.5Mš#1[è)7+·C&PÄ?-ÅvB µ‚80èz8Wç…C1Ä×C.ÓºLuÜØ—ä߀LèßUX»ñNLÐà9ÌÜØd¨Ñäj²ë“?¶ëß³Ûß^‰ýïxÅñÝ¥{åû·hÉí–càÍ€ˆíлwÁÉ•YÅÕ¹lÁày7Ûá”-¹í€iÌç~Ì×ÍP®Øé°šÛÀ5œçæi˜áÕ7˜ÚÂo‹òÇ%©ÑÇRƒÀÌE]ÙÊ4{ÚÀ-›ÑÕ„IÆÍ€ãÊÇÒfpÚàÍnÈÀ}Ž¸ßvqÓÐ|xÏã¶qÀ×/ñÕ…MÞÉ·MÐÏ¥*ÅκXÀç¹~¹ÕÑ:²ÏÐ*¸ò€[ãÁ¿ˆé¸âÑIªá±#ÛæW’åÌk­ÛÙ)¯ãÖF]âÞ©háèhjÔár;ÉСRÝÕ‰dêÏ/ÖÈ‹CÈÞ´/ÙÙÁFÓÓ›>èÅ·%ªÙ°.dÕŶá'ËÕU°Û½3©ÌÉ5®É¿6;Ó²4PÖÍ;ó¸'·íèNoÏÅGLÓËb(Ýäv2Èßh,½Æ„1ëÞ:QÛÀ‹àβ(ªÚ¶­Ðx&šÍ´3Û姒Ԝ+ÉíÒaÐÅQÆÃÛ¼µ½/°Ó·v׳¯Nº½Àq±¾Í¢¡à¹R¶Ã¸‰§ÄÅX©Ï¯]«§ØC¿Å‡bàÄ \Ó¶§•Ï¸¡X–ɯRົ^¯Ò®A¯³Áo»²ÈxźÅn¦·¨SÃĹWo´Ñks§ fi± dsƒœiIž­lY¡šN\‹¬xUX¬tk¬huŸ®`a—µ†btµ™}Âc^ º€DÀ¥\·¬oy°Ÿƒo§®pjÆ·‡aŸ¦wa®ªjrŸ½tâ ·–³‰ÔÂƦ·ԸΨҜŪ͞нà Ô²´ºÉãïÆÇÙÄ°ÙÕ¬®”ѱ‡z‘’Ì|UŒtYi`K|–™zf¸Ž‚—„u{˜ˆ~eŠ²jjz’{~dŽ€†}–e}|±u`ª±‘}“ßq–š}m–ow[‘”͈µ¦fŸ½’c…‡•oŠ¼–˜“€‰¦ª™ºÀ¥¡Q¬|>ji™¢s‰aMyyM/}OK¡ÂɽBÑĺV³ó½[ÉÌï:µØ±(™¼µ/x¿Û—Ô³-¨ï¹'}ãè;zØÁ@cÏÙ%›ñ½>lÒ¸W_ÅÔ"‡ÙÃ6b¸ÊfBÝÐ|3Ù݆gâÕ{A¸Õ˜>ö¯+Â̓8§ÜÎ3ÖÁ5¡Îg´Ä£,˜ºÆ6b°3sÝÃ7wÒ¶]=¶ÑCKÈ®,º0+žÛS2žÓQ1­ÅK?¹ÐV5´Ü‚G°Éj+¹åWDŠâ—*RùŠ"Ï„4uÞx'vß´FGð<º€(fç°AŠÕª0­Û«ÌØß>©áÔDŒÈÀF“Ûº(¡ß¨*¬ùÌ9|×îz¡Þº+ŒçÒ¨¿ÖÍ4•ÔÆX˜Ø±/ǵ='Ö· G½áY'ÔÓ?§s+&ÜE1/¶Ž-µv2Aw+4·—':6o4!8˜*dfP";È6G`À/?§)4Q4!V¼3)1£P>WÌk,4Õo*<à·(:É$*?âÊGvÍÒ6CÉîM™ßº\>ÃׄÞâ¾™õË]làéël¶àè[¶åÑbßØùtŸãØáÇðûÕÀðàã¿vÕêzòø•˜óÒ¼„ÞÛ¤ZëÕuaÆÎLÒĘJÚåQáÞ­mãØ»l£á°:¥â¦UÍß³>ìÇ/yÖ퓧ÕÕZ†ÏÚŒ‚ææ­ÛÞOÃ̾S«×уîÉŸ™ÞÐŒwÑÄYfïÖwrÉÎQnâÙ}ÙÓ¯oÚÚ¡dóÏnÅÜtRÝÌšSØߘ2×Õ†NåÑÑKÒß¿O¼×ÀiÜÞ¡]ÁÁÂIÃ×Îb¬ÁÁJÛÂÐlžÐÓ]àÊ×c³áÛL·âÐwNõË‹æ»HOïÛ_möݱ”ØÙfoãЄqÔÔ¼OË߯\ëάyØòtáÕÃ-»Ñ·XÆׯIçÑ»hžÕ¾9Ãé®Õݨ!ÂìºO˜éÒi å×*Á×·-ÏÎ=pÖÔi‡ïÖ^‚ÞÞt=ÝÏz@¶ÀpkÜ×pFÙߨ5ÏϤ1ÆÛ’PœÓ &Â夺æ¶JÖá‰:ÊÓ©päÒ§Pš¨ M¹ÆÎg©É˒ΩӦËÃÅ£Ž¹Âuµ¼¼oº«¾r|³Î§¿¸tή¼ec¸ ‘aÁÇŸ_Í«ƒoÒÅ©U˵Nµ¾°L—“¥ZÇ¡°\°¥¹S|¬¢UÀµ¿l`°À[z«¿}mÆ·U`¤˜ni–“Q8›ŒV_–•cf€¥pMl¸{o’Ò€mƒÆ¢ŒŠ­£wa¶‡x…®ƒ~e¸{|h¢¯gk¤•u··€bª¡qk”‘j“’qo˜±t›¹}Ö—Ú¤á‰á½Ó˜ºÆË ¡~Ó–³‰Ò›°•Ë˜—’Õ®½ÒžÜÓÏÈèÙÄÙªš’‰§”`m0m[]?]`f”…™œ‘†ˆtsj|a‚Š‘R\8]‚aše™h­“– †€s‹{›…”p—}ˆ‰l‡†—ª‘|¼Ž‰’y’…£¨s‰·”‚“²ƒ†…„ˆÂw‘Š™˜¦zj˜M~±·u€‡tql‰§h#œ0I(}l>šob@-LP:h>$k8"Œ1ff%/U—OO=¸ºÄÙDÔѾB¥³ªH¾§¶C©ÐµF±ÔÚ@³­²?¥ÄÜcvÄÑlºØ_¶¹Æ\¹Ãz|»Û‚~ÒêloÏÊŸWÇÁ‹AºÓkeáèLÊÄKã·²1Î؃pÎÌ‘3¾Ê™>ÅÈ¿5Èß›QÏÜ¡0¶ïÀ:yÝË(‹âÒ0”×±9³ÖÑ,cÌ´^tßÄ*îØ&mÉÚ?méäG{ÛÀFÅ«C*ß [6¬½Z7Šä&œÚu˜½J)¨Ïr&²ÂeI’ä~žÔž7YܲiÙœMƒ«X0kׯ[׬2áÁ1KòqX=ݲ&”Τ¶ä”/»Ýº/‚ïÏ7„áµÄÙ©.»æÕ@§Û±!˜åÒkŸöׄÕæÆ•õ¹ ¸Ê2ºN(-¿Ÿ*3ª¿0-ÄÒ3LżODĤ2)±¹A3¥ž'‚ïp>íˆ-ãÙHA²ñ5(mð”;ià•2ªë¡DIÇ«ƒÝ›ŸÐŸ%ÁΡ*>»¤&[ϵ!*ĺA¿ÔÈ5hÝÁ4 Ó®>0ïc<1ÊØ&&¨¼Ié`'0Íq97Ò€(G¿‘8/Â*2]²2=²>e‡ *Yˆ)cÉ02oÔ)(?"ŒÆN2oÀ3,mØ;BuæE*/ÉV9)ä‡-+ê‡/Xñµ49²UyàܘÄÍÉCHäø¹Ïå¿ŒÈßy•ìóÒsÌíèf±äðXÍêÜuÜåËw³ÚÅjÈüáwÓðß«y×ò¢qìû«Œäà“¤Éαt»ÚÄ×Ï’SïÕƒ‚ÙÔŸ4ðÓusåÏ´”ðÑÂmÑî홟ÙÕcÊØÄ7³ÔÌŒ·¯ìa˜×ÒP°Ï $UºÓi”ÈÐx¦ÜÉd²ÌЂˆÕÑ„±ßç“šûÁ|ßÖb˜ÇâqÔÞ>ŽÏÊ“fãä™MؼÐrßêjˆìÓ¸bÆâÀˆáÙœxÌØ•>¸ØÚßãºlÍÎwÛåÂaÓÙË_¶ÏÖ<´àòTÒÞÊS¯íÇÃß¿OÊÚê¬ÐÞLj÷âLgöÈS\ÜÓz‡ß×}“»íx}æõ|T®ÛÇ[½ÏŽeèÏt›éÖ®?ÚȾAÈÞ¾2ÌÜ}2ëÎÓ.œÑÈ5Ý׿2 ÙÉC¢¿Ñy—ØÖ>¤ØÍOÑÏßSjÜà‚]¹(T’\Ž?˜}}i hw¬–‰iµœn…¶àÓåÏì„yËáÍ·öÄ»lÂÀ‡Îæâ°ïßéÃÔØßlßîïŠêàøÌÎÕÌOÝì»þÔì÷éáº~èÔ’©áæ”®×Ø¡nùÈ~g±ÄbÍ䘂ÄÁµwÖæ¦gÀÒ«åè´D¶Îêx±ÿçZÌá¾g¿éÏV•«½R¦ÖÙx­©¯trËòUsÆòp ÉêVÕßçy€ìÚ†”Öátˆã×qyùÞ£Õ摆ääy–ÒÕ«“ÕÉÍZìÛ¦Uñê‰[ãà£vÔÖ®UÃé•€ÝÕ¶X¹ÕÇrÃì¿YÖîœcÍÌÅHµàåY¦âÑL©äàS»âÖJ»××Q©ÌëcÀ×ßj„ÔÈš`Û¾‚Qèßu€ÜÕqtÌð•mâφZÓÙ™cÙÛ¥OÞå…tÍç‚IÓò©5ÉÅ­2ËÄÓOÚí¡FÈÞÔQßïÒ?¹ØÒJÐË8‹îÛp|æàS®ÔÅDÀÄ×GoßëR‘ËäZuÈÌalÏò~pÛÕ_o¼æmwå¶s@´¡KÑʯ6°ÐMÐÆœGÀ»’9¿Æ°J´ÃÇcø¬?µçÀX˜¡¾G¶ÑØQ¼Ô™%’¯ÖR§ÛÞB€ÖØe—çÂny¹ÐBy ´Q’¹È8‰¿Çgd»ê|mÌÃXWÆÏf[Îݧ:±·œW¿¸—S¸ËÎF˜»ÃJ¤Ä¡k³Á§9¦ÅÁRŠÇ¤G‚²¢6˜Õš[O¬:ËÂ.KÏw'5™ 3BoÕRD±ÀZ;Ñ»\H¼¹X(§¾r:¾Â:N¹Ë¡5‹É~CÎi.væEG·êœ4¹Ìš'¦Ò“/»¨,¿Ê†^¾Ù™"Äâ­6ÌÕª5Ÿí˜IºË“+áâ©%²Ú¬a¥Ý¬#ŸÕ£. æÜeܧ#Ÿå±=f§23=ÔlA0´“O1õ]PÃÅkzÅ¢>/È»24¸|8#Éç`C¼àn@åê×wëÇCHíF(xÐTõÙu$ü¶3¨ÎœC_Ïv*•Õ²WÅÉœ<„¾œH¦².ÇŠ&EÒÁ70¾f'HÆ‹"Dà›-!¹Í92¬g$#³x&•v*NÃf':É™ œœ'Ç36s†"4¦o$§¡-&-“$7‘0)“¢,Z("‘ì(&“Ý:xÓY*6ßlCL£x2]ç…7'¼¥5ÌÚ*bãànŠáî1FìåÇláÞCOîêb­úâÔµëïá¤ÒáØCÆèÕ¾åêÙ¢Øãꑺðë[Àãç¨òë¦kñâ…­ÕÏmŠØî°cåâ52ÀßM‡Þá|8Ýã}^ÌÕX=ööl9áå¨AÁî½P­Û¿yÅäÊ`¦â¤$Ûår§ðªÑÜY€éÒ1ñ±0¾à®GäÉsëÎŽ^óÞe¦ÜìŸZíä„}ëЗƒáÖl‡Çù•_ÈÞFÐâŠ[ýß}dÌõ{4ÝÝ^âîHäÈ¿\Êé‘8àßAîÞvBÆÙßQ¼ÛÉ;Ãå¢&É÷Ý_ÄÚ½AÁÛ°¤Ò®,¢Öé}UîÉ_Nß×hvàÍ'`êÄGhÙîlhçíJ[úÒŸSâò|]âí‰jÑä;IÍä¬>æÖ Üæ«PûÛ~.Ùèž4¿èµÊã±6ÁÒå;‹ë¯j¯åÏEÛâ9¬ËË|ÏÈ5†êã1NçÂeOääSFÏâEmáÐ;0ÈÚc.Ü܈ÝâRTç×u­áy"²â‰Ôíz(ÂÛ»^ÌÁ°„·Ñ¬‰ÃËZ¾Ô˜[Ü·²?¯âÜyÅË¡cË׫yýÄm”¶ÕFTÒÌ'²ÂE_ÒÎgpÜÍq:´Öyeϸ~CíÂt4×Õ~=Ô· 8Ʊ¥=°¶±7ÐÇŒFÒ˳@ Ì°3nÖÚMYµ³FWÁ«WK¬ÍdMŒžG?b’Z?‹½Z_¢ê`SÀÖQW˜Êyj§©HP‘ÖaS§Ó~i¹™Y}ÓO}ËPN{¿WMº°;¡¶¸SÂ{O¥Î®/ןQÏÄ€¦àžŸià±ÍŸÉ¼­[κŽuÞ¸Ú¡ÕÀA¼É³–ÈŸ«g׺ `ϵ^fÌŒc:¦M$®“T3œ¥P{Ķ{ˆ­¸ra¹ž\e„taA»¹qp¶Å”¯ÇÚÔ¾Üë{w©Ãša^¯7v}¤¡m³¾sÞœ³Xd¼jwm–wv¾°œb‘¤­`…¶œsŒœhy_й|W§rrA½™}eŒŽmZ}ŽdV‡p>¦ˆiQGUeœWHšwbW‹ecNAJuLg6Hi™UVJ\_Oo‡BŠ>UtnS_lBR&hG—R‰ATNˆm£sv8†*wN¸ª‹L«}}®w3†pzŽŽÃÎݤ¢ç°³ßÈÏçÚËÁ²—ÝÒÈØÔçäõ½ßÙ׸ù¤õÅóãÜÖüÕçÖèÙ÷¸æÒÿ¸ÈóåÍÐÙ¸×êÖóÈЗ«ÝØ´“ÚÓ—¤º½¢Ã¶×ÏŠ­¶¨Ÿ—›®¡·½°ŠåÎ̉ÇÃã•ÅØÎïÎÒ“·ÂÍ‘áÏÒ¦·Ó˜™×Žž¿Üw®¾Ò|¶éɎñϑœ»Ä¥‘¹ß“¼ÉÞš‚Á┄Ñâ¡•·ßŸ‰·¦’¦Ô¬¤ÍÚ¨ªÚ©¤Ä·€µÛÉ·Ñ«âÍÆdžÓΊ×ØÈtļ¤{Æ›½}ÞÌÒ”»Ù€÷ÓØw±ÙÂw›ªÅ†ÑÜ}¿Ù~¨â£¤«ÿ…Œ±à{œ¬q´Ö¢s¨Öª²¾È‚ºÚ¥‰½ÍÀ¼¶‰µÚÈl´¸Ñ½®Òk¼ÀÖc¹ªÀ²Ã渶ÎoŮЂ™°Øq–§Ás¹³²o²·ß”ž®Ýv™Áʈ™£àˆ•®ÂœŸ±¿›••Â}—¥°ˆµ¯»Qµ¬¢™º¨¼]¦Ç§{¼Ÿ¿]¸fhñɱD´°I¡ÐÐJ É¹=±ë¥m®ÆÆNnÁÑfšÂ»Qžé°DsÉÔUv×ËdvÄÕKšÃÆRhÀÎkX¸®~`ÁÉj‚¿¸¤?ÓÎ{>Úµ§OÕG¦ÙÉ/¬ÌÂB¿Þ¡:Áî@‘·›A…¦‘H€º“Jj·§S#ËšR%¹‘8;‡ /,‹¢MGw²XD¬´X:ž­QMµ«WT¦´db·ÑgJiËž#Ös9dÓ*9žÄŒ-?Ýi1žž2¿²klؼ±3¾Ì—:°ëx3Âëw"¾Õ¼+´×§(»×‘,ÛÞµ,£à’-¾ÚªÑÆ™#ŸÏ㠬ʻ90ÅŠ3FÍCF7Û ?2­•'A²§A€áÆ5ЙF;¯‹34Õ¿BO×ãŒiçÔruãÆ9Dιn)ˆ¨6vÙC/~Ù "Ôܬ8žÕ=dýR6­¯…›æ¦D¢ÓÂ+-é/Qá­'0éZ*4ëm0/Ë& §¦A/ª¯*í‚$^¼eÊ’#å›#݆%[ŸDÍ4çŒ0À’;0Œ¹.yÎ#†¦2·)0{Ô'}É-#˜Ñq:5à\W:ë¤M\뛎¨#.“JqϸM|é¹-vÚÙ¤­àêÇ_êÝPxêåÙÆéå·DÈîÜfëäÏ`öàäÎåéãV¸âÛXãïÌršØñvmÍài‹èÖC®èЩ‹íßxqßÚS=áÑdÙÕo>×ã:5à×Q`ëΡFÄáµV«î¶DÖô×TÂè¯<«Ê´6ºÝ¸l¼»-âÓ/£àÏ7¶ãÀ0Ç×ÒSzÛÖ#•ÜÇCƒôÚ_‰ßÄ#‰å×:‚ÔágšÙÞ85èÜW_ÒÔblëØ/xÌàt0ÙÖª{ÑÞlhÁÕ“>¨ñ{(ÏÜ”-Ççu@ÏÜŸ!µæ¿?«Õµ·âÒEíÚªE½ì¨!Îà­2¸ã¹AÏÕa€ÕÕ)™ÝÒ5”Ö¼?4ÎÂEnÉó<^Æï4`ÖëˆQÐéwcÉåF6×àzE¨â†.ÖÛ±%ÜÖg/ÀÞ°"Þá½É F½Ï¨ £ÚÅÅâÓ±Û”#Ûë½£ËÔ&žÝ†æÔ ’ÇÏ=]ÞËTËÍoâÌJ&âÝ€#àÒƒ$èÑ82µèƒ#Úð{!»ëwÑƦ5ÏÙ£-ÂÎÎ{ŒØº2«á»{ÐÖ‚X³Ö¥?¶ÎÐ9xÜÑq¡â®:“ÖÍZ¨¿ÂWÊá¿A‡ßÑcdà¿7C¾Ó\_ͳUeÓÆh³ÄˆgÏÔ†5®Í¸8ÂÁ¥3ÉÌ›`×Î{0ÀÃÇ2x̯4W½´DWÂÀ\VÆ·NKº£84Ñ•;9´Š)8…À/>¯²C\¸œ57Ž¯RLÇcH›Îsd‘ɈQpË›eq¹M?‚™?L¡·q@²¹¤D“Æ‘PÁ´OÀÁ¬0àÆmݺ¤¿ÅÓf®Àᶻž|À­ËªÉ»œW}©È‘Á¯÷~Vª·qÈĤwª¦‘b=¥}a!À›ch™™L=ž«D'´™eJm%dG²¶/;»dR–¢€µáµš½Ç†l½{W¥µrER“NVIŽ¨FkVuNd/[6TI`žÁŽ\‹¢¡V}ȤY˜Ä˜UJº¡V]¹Ÿ@1¯UN>ª‚)Nj¤1<Œ½[@¾‚B!¨Þ:C®³:N¹¦0X­¾EYºf-}¹i=£–A0ÁÓ§EØЯ§êž_Ú¼™;¸Ò«/»Ê–&¼è7¿ó·F­ä¥D±Ø¤^ÐÈ*©ú¸B”Ë£;¬ÖàYšÁÖ†ÜÀ'®×2:Ù™Ÿ²^iÃŦU̧48ÖŽ7×58¸T)+Ê`5?߇:8Èx/Ⱥ,(èsLà—2!Í/Ö…/,‹r(݆(!­œ-Á™4Ì}%‡¼I$–ÍC-t«-±Þd!Ñ!mÂ(kÙ]0¾ºg=%Ò]0Bµ§(TÆ™+<Ù¿9€áÙ9w×ÐEãø…tÕå©síìáÀÊèóÕzÄéÜ~ÆàëY×èÎhÍòÎZ¹âÒŽÑåÕ`¤ìí‹pááxeáÓdªàÓQÙÞ—‡ÚÖ\SáÂTuçÏPD·ñ†PÔÅ„sãÔ}?×УBªßãR¨èÖ8×Þ¬1ªå¦-¸ÞÊ[²ïŸÓÚAÀ×&™à×,¹Ó´.¤áÌW¦áÆBxãË,pì¼ApÕ¸LqäÃJfØÁ0jØåwJÃÞ…cÒÑlsôÂxFàâsZÒî†aÕÝ‚?ÇÜ»0Âê®K¿ô¬XÉâ‘5¼á¶=¶Û5½ê«(Ìä«E³ß¼@Æס'ªã´6ªßÖkÝÒ7BßÚdaãâ0cÓßPdÊßlj×ÜsHÛê†/ÈÕšMÚ¼†yðÚÆvíà¨HÌÏ Bµß¥EÑÑr&Òݯ=ºÜ¨CÌÇ”2ÂÓ¸0}ËÕ< Ú²%Ô݈¤Ù³(‡Ï»*^ßì jéÁFr×Ö¼ÁMV¢Ã{V…ΉC‡ÎsBˆº]I–Òz9ɼlhǼ¯ãÞ{>ÍÜ¥%̹›3®Õ–PÚë•-¯ÕÁ8®á§+³ÑxN¦Â¬2¨Ò¯)Åߪ'ÇÔ¶)Ø®YªÊ­@^™¤$‡ÐÆN‰ãÅ_1²¨KeÔ³2Ú5 ·¤;@««Kl¿»F6ªöœ2äÜ›OÝàÀ¿ðÎ]SœÂ`.‚Þr8åÓ‚/½È·8Jœ’2~¸[EºÓnDmɯ/´×¬PkÑx0bÓ®7$­E6'åœ1Kçw>#¾‰Ë´7&Ó\0,Åm2DÈ 2!Ï­=@Ÿ^$µ‘$Ñ{8'Ã5³ƒ*A¯Ù\;“É/LžŠ'@²¸99°À)4h¢1?•Ò @VÝhB@â[4>¿(çÑŸA”Õª<œçË{köÄ:Uéë©LèðõÜý롳àê¸ÛïáUÇíÚrèêÊQÆäÛgÌãÉDÜñïˆâæÝ|jðÜ›Šàî§çÐH®çÎw@ùÁNZë»~=×Æ <ÛÐ]+åÍ@âÓLSÉá†MÂÛ­E¯íÎ%Âí“Æç´=¬¹¤!¢Ü¨+¶ð³3rà¾.”àº2‰ë 3˜èÔ2€÷ÍE}âÙ(ƒéÁ9”ÖÙVUçÓ%~çÌ4xÞì”_ÜÝjEÓÕ}uÆÑ:gÎæÈïÝj<ÛÕ]8èâ€4Àßœ7äê­HÍ×S/ÎÙ“-¨á«Q¬ÜÁ-µïš5ÈâÒC­ã«2«à³+¹ë¨7sÖßKaíÚboâàYoâäPfæÆ?$ËÒO_áì}BØîB¹Þi&Ø¿“~ÉæjÔ×p ÃÛÙjÇÎnGÚê$·é™¹Þ‘%¾×°*wÐÏ'¡Ø»½à²ÿÀ;šçßD‘áÒ,rÕ×&DÄÏ-yØÌ2sãâ$uÓÓJçÒ„#ÖàrÏÅ/3âÎsðá{¶þN3²é‡/§×½¨×Ó>¡ç¼) Ú¨'ÙÒÙj½ßÅ-§ÝØfž×耮×Ûz¦Í¾!£Ú¿+§Ö´3˜ÇÔxÍÔkwÎÂr’ÓÓeeÜãyS×ØŒLÃÚGɽ¶AÎßµ%±Þ²=ÚÌrC±± Bfɽ2vÖ¶2~Ì«kL±ÆI?¿·E.¾ŽY,·º><…ÖeL™ÇVHÀ©QLÂQ<½p^¯É4‡¹‡cktSXÆ|B“§wOŸ½˜'”¶œ@®É¤ à·¦5ÏįHºÊh¼ÉtŽñÆÕ¥Ö¿Ö½Á¢{ƹ…>»½´r;ԙåÎÒoü¨Ya¸±A_É3Ëž]ѻĉ¤Ð¦n4“ÒxX¦ÌR,\XLÔÄ^^¸°]}Á¹¼ªÛÙç—ɶ½Î×ïÅw”ÅWtÅ[X‚¦Ú«Ç®oеoTn­•R\°Zr¯°U¶¾°n~³¦odž‰Ca´™['ÕP\o¨wY\¿xOFeB\q¬—V/{`nB£…Y,^;qS¬˜o6a7FAuLY|kfN¦[XDn^Mryjlq•c^‡gjz«àgb´ob¾b†^ªÌ‘*²Ÿf`Å{[“Žº_[šÇw¯ ÕÅÓίÓËž·ìËä±ðèèãÑÎêçíêäØݶðÙéæâÑäïâ×õ”Øæî Ð­ÙÄáÙñäñ̳ؿÔÀ¾È©Ó¼äµÑÂÕ­ªÔ¹Ç¬Ô²·¨t”µ¡¨¼ÀŽÍ¦À˜äÎ¥¸¬˜§¥ÁµÕ“ÇËáççĞ̢߯§yÔ‰›™Ø­¸¢ËŒª–æš¹¼Û’«¨Ã|©Ï•Ÿ²ÍšªëÆ®µÇ֫ĩǨœÔØ ¿Ãà•Ä¨Ê¹³¼¯–äб°–Тv½Ë‚Ä»Á–Ê®½º¨¥¯ÌÖ¼›Î®淣›ãĹ˜Ø¹w›ªÇ¾­·‡Í´ÏɻɆËÑÒŠÖÃÒš¢ÛÖ«£½³›¬ÇѤ¹áØš•©º²œÒ·™—£°µŽ°¢½‘ÃÈŒ°¼™˜ËÊÇκŅ´™žmØÅ¢¡çÃÚˆ¬ÄꆳÀÄÀÑÆ€¾”Ó|À á€³˜Ä‡¿ÃÔŒ¡£Þˆ¶¢Ë˜«®âŠŠ­¶˜—Ž¸“ž‰Ù†šŒ¨±”Ä—¯x­˜»…£¯¥˜È½»o´ªµy—«‚ŠÀ½æN™³Ã@«¼În§Ñ¾HƒÁÅC²Û¿f§²ÓM¥±ÕEhŠ¾M¦æÆQ××M“¸ÒR”¯¿<Ž»Þnl¯»a¶´fe«Âm{ÁÍ›X«½Ÿ_¿ÊƒK¸ »!¤ÂÆ4®»ŽBż‹F¨Ï¶c‰»£D‚¹”UªÐPN¸QW¸¤I9µuRK« LC­GG¡¸NQ ‡i;Ž½8I¡ŸKI¤Ín\{ÕŒRuÀpE‡ÕdB¢²\YȽB¨Òj'ÈÌ %ɤ#¸ÜˆH·Õ™>ÏÔ€QªÜÁ3›Ë´)¢ìžP¶á“!¼Û«/Ÿà£1§Åµ6šÍÍP|âÄ¡Ä»?ÈÊÎ8¯ÜÇAR¹§KA–Ÿ;]À¬T-­_@/¬¤K?ÌÇn‘ÞØΚÐêÔ”ÎæÀÇâÜ@‚§P*dÞ-Stî­7­Àš@¤Ò~ ï‚*Œ»SR„êÈ.ªÖÇK é²;qÖž>GÁÁN/ñrSFŹ0?Ú¹?J¥q#<Ǿ'^Ú–9*Ú–;»u8Ì’+)·d4/¤™-0áµ7%Ù~,$—–A?‰Îg&™Ç=:«©:9×ç¯:‚à‡,~ðm&ŒÊÊ8Úµ(få·6²å‚>7ÒÍ'¨Ôä©ÇäëQ£æí¯bÖØñêåî©vüÿÝÖêòÏwÊð÷¡ÿÝÖ£ðÜÌ_É÷Ô]¾êà‚´ôèÏöãí…_íñvwúÛ—ÖãëŸÁÛÛšgÉÏf;ÑãHaðÞUPÒÉtJèã‹TëÜ“IÞòÇN³Õ¼N«ðÑyÊß³8¦ÚŸ –ç¤:ªå›*–ÓÅ.†ìº^‘Û¬%¨é§:”ÅÛ†ñêšuåËUœîÉ_cáÙoléßBNçÛˆÛìvAÕã¹rÑ×Ipà²G>ÀåDàõ†CÌàfBÉÜÅ?Ùè¤CÊÚÁLÝê=ÁÕÂZ»Ü £â¬¹æ°0¦èädËà¾>µáÀM°ßÞ’_ÞÑZ`Ö×N„äÛloåâdUØä“Ußéi6ÏÚy5Úä¦oÖ×¥QâãHÎ߬?Òáž±ã9ÇÛ£/Æç°3Ëí±$Éå1¼è³$ŒÕÅ.§ä°ÉÞŸ!´îÒ1£çâjÖÕ7|àÆW5èÔ)GâÁvî¹&;Ñàx*ÃÛsÐïoYÊÕv;ÈØf%»Þ‰.ÙÂ…&ëÍx3ÕÈ’,®ÛÅc°¾¦cÈÓd@Èç«=¯âÆAùÂ8¿äÅ\ĵuœß·'ŒçÊ<šÏÂCƒÑÞ{?éÏhWËÄErÁÍlRçÊ}4êÇ…TÑÅ“2ª±±2®Ã´“×”4ÆÊÁAw¸½;fÆ¿7U¹¤=.•ºJ9²±IFÀŸ6´½fMµ»X1ˆÊU/ ¼:7ÅÆZ?ãkK—ªWT¨Øx4ZÄž@lÀsZŒÀkSŒÖ™7žÑˆAvÊ›=ÒÖnR±«ÀMŸÆŽHá–ʶƒ^ÚÑ×…àÀ°‡ÙÁ€CÔ³UÊ´»\ÅÁ±QβšPq²¬]×ȯ:OÀÄjØÏÆŸ…ɾK9˜¤CKÁfVŦK:±«P<£žW†ÂÞÃÉîÛÖ¨üîÑÆïݧñ}XQ#`PÓV á¬‰Uc ‡Wr¬¬Oƒ®’_|¤s“ÓºÓ’ì·¿W¿¶jU§¤]¬â˜]O´œPž™nq¦†IEª­dgªžoe­so+”rjQ²‘r=x0eB ~ULq6g]žer^³E;‰¾rk‹…Jj§~t¦°ÂZuµ[j²m„š¦œgT“‡sr¡a•µÕ‡ƒ¦sr]–ÅŸÉóë©Ù±ïÚÄãªïÓðÝȼñµÖ×ÖØÑÖû×ÿâì›Û½æ×êÔåáù°Û°ÙÏùÍéÊ×ÏóºÊ¿¸ßÛÓÄÔ×êì›àÔÑÆÔµšª¼¸šŠ¶¿®¤Å½ªÜ­À¬‰É¿žòÁݧӻèÊÌàš¼ÄÌ£´§È”Ŷנ°Å§¡ÍªÄÁÈšŸÐù¨¬ãœ³»Þ± ›ç¡œ³£¦Ê ¼¹Ì¶¡®â­Çߪ™¡Ï€ÒÏȵ•ÒÄÊ•¿¬š”•²±˜‡¸ªÔÒ»¸Ï¬Ö²·Š¿Ò¹ŠàˆÞÊ¿„ÁªÎ©¹ÒŒ··Ão¹»ÈsÄ´Ò|§ãÔÇÖ—­žÀ˜¡ÓÉ¥ŸÄÙª¦ÔΫ«ÞØ®§ÅÉÆ×ι®ä͸|¦x|áæÃ}ŸË£”ȼׅ¹¯Í–ÚȺ›âÄÕ†¶¨Û‰ÄÑˉÆÂЉÒÏÒ”¶ºÔsœ¤º”¸Á̉¬Ô‘ÄÂ☒͕¯Ì¬y©•Ÿ‰ÎŠ|°¥’~ª«¸ƒÈÈÉ­™™vy‘²z¶Å´w¯»ÌsÀ€À‰ìܤZØɯK²ÝÕI²ÓÐB΢rÚļn„ÈÂZÖë>¨ÁÓP£ÎÌ\¼à[ƒÈÑ\³ÀÚOs½Õ…ÑÓ‚¯î}x¾Å™|¶¥DÝÂ’]ž A‹ÉÁTµÅªQŸ´¨P¹ÇÁC‚½Ç\‘³ŽV…±¤QOž—PRŸža\¨‡K:¯žS0…£SOÑd\±YT”ÃmKÌhR‰£tiˆ¨h\£ÛŽTr¡oN¯ÂL±~<ºÇ”@­é¸%žÉyWÉ°“5žÃ—6·ï‰K½Õœ0³ä¸EŸß¼4¡Çœ1Óέ6ÈĶ7§ÐÂ,®Ã³B>Ϥ7ŠÈ¡eKäª8ÏÐÉJQͨS1ŸÀ.VŦ=LÓžFZ³¯Y8²™8„ñ⮼ÔøÃœèâÁ¸ÜÛ~ÊÄhAlÓ$2uîb4½×†MhãŽ/]ÆŒ4°Â!ˆÕ‰-ÀÁ 7ˆÀ¹'…Ù”-RåšXÁã­;„ȼF¹¶²8&É“-8¿µ++°¥RîK&ʳ-=Þ«7EÆ~5.ÌŸ0Ò“;#Óo-\Ù…8*ñm#˜Ø0-žÕkK±Ë®:RÑ2Dl¶”(²¹Ž*C¾Ä6O̪&®×Ë7×Û­Iqâ¬CƒéÖNoàáobúâÌNÿÍÄfðï¹ãíð¾¥ìÞèªîðç<äëÀ„åøÖ`ÏÞã¦ÞïÜ_ÍÜ≷äî¤våæœâÔQ¯Þפcà×H^ÖÝjbн9TÛá–ZÈãTHãàª`ÊäSÃà¸<¶Þ«<¶òŠ5¾Ú¾NµÇÁ4°Ý¨0¯èÁGƒäáA”èÉ)ªÍÌ#¿Åà}oðÃoåæ4~Ü»8ŽÐÚUzÑÙZŒñÐ/¢èÝ•HØë›TÇÉ|:éÛ3o䯉/×Î’1ÏåŽSÊÓ²Z´Þš;Éã¿*ÓåžWÒ׌B¹ÙžH¨à¸0·èŽ'»ß¶7»í›,¸äÂA¼æ³7iáÕy€ñÍNuåÙ‹æÎlkåßpXÞÒŠPÜÓ†EÇÜy¸ÖËQÅçqSÖß”%ºêš1Ôß­AÈç’_Ì׳*»è’7­å‘$Ñß³6£â¼-½Ò¹(¨å¶)À×±*‘äã_„Ë×(ˆ×Î8uÃàXaáÛg€ð«3zÚÃg0ÎÈ;ÈÎz Í×K+ßÝw)ÈÕw(Ìåv3áæÁ[ßÝ”\ÜÛÅO·Ô®:»ÑŠ€ÇÓ³_ÈÉØk¿Ã­P Þ¿.ÓÙ曕åÄ5´äÁ7±ì®2Á»fŽæÕ`…ãÅcÖÅKnÌÇqZáÄ«^ÊÙv'ÙÂ¥;ºÓ®AÀÜ„+ÓÅx'°Í 3µÍ¯7FÓ¡x´ª,FǸ4SÛ?I“c?а<>ªÖJBœ²;EÏ·H[’ÃLT§¤gOÊ´WU‘Ñ‹9€ËU‰¯—I¼ÄI]­ÅžRtÉŒSȼ{F‰ËŸG}À 8»¼ŠnáÒØŒñÀÖ¥Îˤ{ÝÖIÚ½j{Ó¨Ä=ºÃ¡DÞ·™€ÅºŸLgÅ«,]Ψcäµ±hÏèZe°›_s˜6š°k3œœeiÏ–EƒÒÓ¿éâÚãØéàúÓéðǵúygŽ½GkWŽ*nr§Fd–Âgµ€]»šn¢™H©Ö¬¤a]µ…ph±¨r`ÈZwg©°‰wÉk^·ŸWo¦Za:Ž>\k¹bq¢GD¹pX[¶œ{gÈšu9­’„\iFd_ª¬qW¡v{BšQ`{Ž£Bgw¬|¡µ£{`h‘4b{«vÄ žF®§wQyœ™¢Íº¼¥èºâ‡Àı‰—¥»·Ãª®³à¾ ÙÂÚÅßêõÛùõØóßÊèôéëëÙòÁæÖ×êÕãÿÛÉÚÅéäìËúÇö¨í×êÖßѾ¼×¤ÍÄѯÜÕÚ׸ßͦâÀÅœ€¿ªˆ±·È¨É㼶ãÆÄ—ßÖϧåÁֹ̑ŒۼÀ’×ßʨ½ÃÚ¥¿ÊÞ‰ÙËã«´ÑÚ ½ÏÓœ§Œê“Ÿݤ²ÏÙ¢©Ý੨»É ´ÞÊ–œÆÝ’¡«é¬µ²Ù²…ÞÓÅ£»Ê¨¨ÓÚš¢¥ÃÈ“Æɲ¨Ð°ÃÒß»‹¡‘¼Õ×ΘßÌ·ÞÌÅ‘Áɱ”áÍÒšÙÛ³ŠÎÈà†ÆÅÔ…¾ØÞ’ÓÝØ“ÂÚÓ§™¸Ø¤¥ÔК°Ìñ¨£ÚÙ¥ªãΫžÛС{ÝÞÁ†çÏ¿ˆÞÏ”˜áÞ¶ƒ·Ý£ÅÄÐŽçåªâÕÙ‘×ÃÆ|‘Ë´”ÂàÒ´½Ï€²ÈÙyÄÝ݈±ÆÔ…ªºÍ{£®Þ†ˆ˜à‡‹·à›š¹ä“{ ÍŒ«Ñ¥Œ½Á˜Ȇ§Ÿƒ¾á«yƾ´l¨¬À‘ÃßKÛÓƒH¶·ÅR¡ÆªA›Ì¶R¯¿ŒA¡¾ÁO…ÅÍ4©È¿I¹Ù×j«îV«¿ÜB®Ç¥1 Á¾Ti°É„ʱ\o¼àngÅã dÌØ—YÆÈ„HÑ¥“KÄÊ·S¼È¬QÕÌ…8Ï»§?ªÄ°m•³¤c¦¢‹SnΛQIÄTˆÎUU[¾™F[„±Nb›“=]ʽSoÑãCFк\B–·JT´ÌmU¤Òw<—ÁzU½°IXÕÄk5 ÏxAÁ¹h=«ß‚@«Ï€Iʽ—RÆÔ´2ÒϸB£Ð¢T¾Æ TÞÔDÇϯ(ÅÓ¼,Íð 9«Ö‘R ÒÇeŒÝ½OÐĘ;Âß©ZsȹTEÔšc™Ð¶2=®Ù=uÃÝ9×ï®ÔãàÈ»ÝÚóÅßáµ]Õ§7P’ß'c¢%8{›$˜ÚlAN¸_1ÚŒH½åX3ÜÂDlߢ6\Ç ;[ÊJI'ìHSµN6šË|QŸÍi15Ë…4,Ï«HæÚRJÊï~OäÛ…$âï|?Öæªyà×:­Ù¼,ºÞ¼&°Ýµ<ÙÚ¹C·Ó«6´àÖ2®â·[¶ÊÂ5›Óўϯ¹ÙÁ.UÛæ]VÓ»VFÂÈm}ƽŽwèÇ…f×Ì’8ÌÉ–5}˽&¸Î­2Å›BÇÁÀ0p½Ê9l¶ÄTxÅÈ,/ÉÂTTʹU5¦¶K'Ò«U4œÛ]=¡Õ_<Ž¬Vc©Ò}E—ÁbXŒµGLŒÙ>P¯©K{ÅI—Ð5š·’:¡Àœ@¨Ïµ?–Å—9zÉ·:ª¶š[èÇ‚ƒÏ´±}ÏÐÁJ»À­Iµº…HÔÇ·`ϲFЪۥӰ¸]³Å¸X«±ÃvÚ¯¹Tœ©È]_°¾c}¢°\c£½UM§¦q„¡ÔvŸ¾ÞϱÜíÇÊéÒÛ¶×Øê·×»‰G{Ÿ]aU‘!4j¯G;s¨xXz²\i¯›]r´ h{»ÂlpÀª^q«´Ñâ©kgK®že\ª„J9´ÂB”Ö|9¨¾}\·dH¹Ý}@·€g±¢iµXd:}GvO…Ÿ|Lš™[a®‘~]“ŸŠVŽ´{kiz}ÎѲ•n†“tpiµqf_˜‰…p¾µw{¢Á…³‘ŒߦÖÎÞ¯å½ÍªÑìïÊâíêÄÁÃéëÈãÄÌëÏöÛ÷ÓÌÚæïÚìåéâÿ»ùåìÏïâéÝæÉèÛðÞíßâÔçÚöÛξ£ºãÐæÎÛÐß·ÕÈÙæÌÚ¨ÈÜ“£‘{’•¶­›ªÓµžåÇØšØÔ¿‹íÉÔ‘ìξ…ÛÄÁŠÔ¬Â‘ªÀÁŒ´¬Ï…ÕÏÌ–ÈÌË¢¯µéƒÐÇëÏÓÅȩӘ˷Δ­ÄɖӾணµÑ˜±ÇËš±Éà”¿’ѱŽÃãʯ§Ú­³×Ü”‘º¯§ƒãÐÀ™ÏÜ¿“çаxµÀµ˜Úæ¼u»Ä¼w´ÀÓƒ¾ÂÀ~¾µ³~ºªÂÛÙÖŽÐÈÀzÞîÏš²Ö–•äÇ•”ÐÅu«àÛÉ”ÈÕ¶£Ö¾œ¤Ã™”ïË»„ìÞŸ~àמŒÐؤ™Øå¼hÞ̽ƒÆÏ»uǤ·€µ¥Á†Êܸ‹ºËèp´Ø×eÜç¿YϾzÈ®½}³»Ùw¯ºÛ•®­‰z¡´²ž…±y›µÁxª»¬”ºŸ‚sЯˆ”Ŧ{¸Î¬{¸’šwÑ­¶‚Èê¥gÈÖ³`®ÀÑBµÎÄ1¸ÌÐ@ÐÛÇ<ŠÈÉ7 ÐËUŒ¿ÅKžÅÀR_»ßN«ÈÆJºÍÛnyµÔ‹nÆ̃dÁÎwmǸ\ÈÖ“M¾Ð¤7ÑÓ›]¡ÑËDÀɼS¾Í­Eʺ±J°¼ E¦¦Œl°¤‘V]ƨWT¨ÁF2ÞO'É©S;¦ÒU]‚›\k§žDZ«¸a.®ÕWF‰¼eYŠÜfY…›—BU¼vP¯Ñf8¥§Ž2ÀÆ‘6ÀБ;Ǽs]˜¹À#ÅDZG¹Û–fÄ¿Ä-Ìâ½0¨Á´4·ãˆ.ÕÞ¸5¾Ò§ÍÓ¶4Æí¯Q’Ðß'œÑ¯¶Â®5²Ú=XÎÊ7ÎÒcI¸ 3WÁÏZkÓ覑áÚ¢Tèܲ­öçØÚì–HÝáE-«ÎA9kÍ3uà94“ÌM+§Æ…7†²“J›Ým,¦êˆ1Ë»6ëÂÇÝË’==ãŸAkçˆ!HƯ,>Ù°)"¤ÐP[à¥;Ó«)?ÎŒzÜž7KÍ€- Þ`'4ÑÇ='¶ŠW, ‰+;ÍÐU=¯ÏTÌÖqsèÍ“LÙÓ’aζÀFËÚ«kï»:ÎÓˆ0¼ÌÁ*ÉÊ@UÄÅB_Ë›GH©à@ZË«N6ÚŠRD§”>B’£.9–´PTį}R©¸N/ gG§ÑQ[‚Á©*aÍzU™²ŸlšÈw/­Ä©@¦Î¸KgÏ¢Pˆ¿‡jØ¿¡CÆŧ’ì°£ Ù˼¥ÓÑÃU©ºÇ–Ê°¥_ÌÍÀR¹Âú­å£˜e¸¹ÖڵݶĿhµ¶­bu¸ÚÇÈÁØoNßkzÓ²‡®¹ÂÆàíÇËѹÌÅìÝÕ¯ïéťȨԣ¯­HWRÄ8R]£6W]˜A_q™{T‚±žaš¾mª®‹G©vS—ÀÖzb™½‹bqb¯¤oq¡†X`ŒHi˜¤˜kw´Ê}P¯‰b®Á%hf®¿‰JžpgAU>r9”—so¢¥|Pl6¿ŸÇ© ~vq–~„v¾‡f}¹˜Šb uˆ¨Šbvª†€¿™«ÂÃö¾Ì¶ÝÈâ˜ÜàìØëÎäÑÓ½ÔììÉúÙÛÎÓãÌòõÚ×ÏÉáÏÝÍæÜåÂôâûß÷ÝãäûáÿÁñßìÜýÙøçæðáÇßåéÓâ­»èÖŸ¿¼äËÞÈÙá¼ÔÀ™·¡¾±–ίŽ¹½¿¬é·ÒzݬÂÏÕÒºÞìÑàÕÝ”ÜÇÇ•ßÊϛŮГ³·ØœÚ²ØÁ¢ÛŠ¼´ÞŸ²ÔÒˆ¾¼Ó›ÆÙÑ“¨ÔÖ¨´ÂÙº©Çã—¬œÅœ°ËÔŠ¾ÛÛ¢¨ÊÕÐ{é´±¦ÙÂŒ¥ÜÖ¸wí¹µœôÙ°šíÆÅ…ÀéÍŽÒÙ€£Õ¢¢ÔÛÎ~ÙåÎzâÕá{ÝÚµwâÆïvÌÓ½xƽÊwËäÙ¥Îĵ¤îÛ¤œÊجäÓž™á鶯ãѦšëÔ«”ἯŽá׫ÁÊ¥zãÄŸ…Æá·àÎɃÝÜ­ÌÂã…ÀÑÎ}ÂãÄ}·Æ³tžÎ߆¸ÒÓiÂÍÓb²¯Öp®¿Ôu£¿à‚£ÕЦŠÓÕŸ‘°ÑŠ°Ö¥«Ë¥Œ­§¯tÖÔÅ‚¦‰uš¬¿˜»ÀµS«ÆÀtļíP»¿•[ÀÂÇZ—Ò¹C‡Ä©C¶Ç™[¦ÑÉB£ë¹H–·ÁO³òÐcx¼ßZžÊÓHŒÎÇX®·ßvtÎÄuƒÄ·u‰»Á`dÉňjÃȉD¿ÂŒYÓ¼¯EºÒ·C®ÀŽ;ÚÁŠH³°¡9ªÇ­Z†È—XΘKa©¥^]ÇŸCZÂ~Y[±¤`MŠž9D”°MN¾œ_H°È?:«¹WA¸ÕK^ ØeIŽ¾yK±ÄzO«±OF̼zFÑÂnL§¼rAšØOǽŒ6¹ç¨7Õè|)ÊÚ°8’Ò¤3»æŸCÚØŠ7Ëê¸.ÐìÏA¶ß¿UÓáÅ4ŽÐ¡5§Çœ^ÁЛ-\×ãq…¿Úfa͸Q‰ÞȨtÆÜšäÒØÇÞWäî´1×Õ\FÇÚHâÑ^Y“Ó&7É'7Z¬+5rËA>RΊ4¸Ò‡CëP-º×1¦Öœ"E‡)gã›+EÅ¥ ^ܤ1VÕ31œÍÅ7XÉÊ5%Åœ—ÚF+ŒÒÑ0Ò€5B¦u:VÔª5]ÏÄZQÊ¿-,Õ„-—ÛÍ9?±û‚^~ëi_Ÿ«Jsín1³ÄI@kä[`Ú²¨!£éá^ºôÒj×ÑÛXáÓéo˜Üím{éö˜ÃóâÈìñÇÅìâ­ åè›âèÕ…ÛîÔ¹ßìÚÅèìãzáëè€éïêªëãã\³ãàl˜ÚËwˆíï’»âÌY|ßéžkÚÞ8_ÅÐ*_ØÍ`Dßï¢BçÔ©XïÖ­?îØï^ÇÙÇY¼ä®FÓäÁ?©è­-°ì±'³ì©A§æÁ)§ø·CŸÚ¹M³á¨@Ú½axêé–oßÏKšåØY~ôÞKsçØdŒçàk–ÕØsEÍåŒZÑñ^Vç×…HíײPÎé¦HÙÝ›UßÚ¾QßÉÉjÇÏ‘LÖÙ˜TÒç×dÚÙÖ[ÅâÄ?Ôß»@±ÞÕH´äÄ?ÉäšH´Óâh\ÒÖ¸tÐÚ?„Üð¤‡ñÜpTäñ}iäÓxnÖÚ”Mâè¢NÃÐxÝЃ=Ïâ®/âÜÀUÞÕ¨e×Ü~#àÜŽ3ÏÝ™AÕÖΰÛàW°ÝÚaÄʲ=Ëç<­ÝÎ*”ÜΉÛÒ%˜Üê…pÜáO{ÐË:‘â¯$fÕÝ`?ÔèŠ=ÅéL]ÐÖSµÚaAÑÚ–Îâi<ñÝŠhéÜ“D¨Î·>µÄ¤*§Ðˆ1ÑÔ¶A·ËÄe©ã·-·ÕưεJŸÐÎJ¸äª4¿ØÍG’ëÄsƒÜÊeUÓÊK;ÅÒe;æá‡4Û¼x:ȹ¤B¦Ì¾AÇÁ¥?ž­«FÚܱ4w¿À-zÑÈFHªÃCU®¶?&ƬO9–¨CFæ^T¯Âk+›ÅRI™¤UZ¸Ç^L‰ÊUZÈ_^žØkdBǪ3…½ŒCˆ¯B›ÆŽ •Äž+^ĺDwÉŠ7¤Ê­Gæ͇RÌÃë°ÆÅ­šÞÓÅ>±¼Ä‹Ð·â’ßÄ­]áÒèžâ¸á¦íÈÝ£½¾Å^~¶¿Ln¬µd²¸µË»Ìeˆ³ÔnbÀ¿eÊàÇœÚÍèȺ·ºc´²ÔǨ좑Ug¡g¨ð®¶vÀ°‹P^®6^]š*Lr¼N`4Ï}j‘·Ü«Ý¯”t¡°¨h¡«½a^««\;«edŸ‰i·¯wd³­k1›uΘÂh`™X@›„N1´Ês{““~=¥²{8’¬€b“Å•ºµsb†qQ©À–€®‰ÇÌ©s˜°µT€½„Z{¤¡xgd³r}q¡µ`—‹ÑšÙªØ°Öœ²©Ð›åÏàÊØÅΨÄéÂÞØÈìôÐæÖâÛóþØÕÖåéÜïÜûÁûØò÷ëÞïëòñòßìúñÑòÕÛêí¸üÆÜש°Ó߯ÂÍÚßëÎùöߴɨÔФ´Ó¦°¥•ÊÉÝÌÊíÁ»õÊÛîÏçŽàÎÑ’ÚÊÇ‘îÒÙŽÒÄÙ”ÑÊÏ{̾ÙÅÐÓ™ºÀÕ­§ªÜÈÄÚ„¶¥Ñ¯’g¢£µÕ˜Ã¾çªÝ⢜¯Ô›¥×ßž¹Ó»¸˜ÞѬ®ÔÖ—œÑ¶–nÿÓÀ™å߸~忉ÞÜÊ–ßÐÎÞ㮑¯×·—àáéÛÀÚyÀÉÁ[ñ×Âo’°ËtÕÚÌ€±ÛË‚Ò×âšžèÁ½£áÔ¤®âØž„åݧŸí褜çÍ‘ÜÔ¸„Ú±ƒâÞ¿ˆÚê zÔá°uûãÈvê̹ÞÚ´|îÔ»nÔØÆaªªÓm¶ÒÝ–´ÊïŠÑÊÊ`ÆÈÒm³­Ëx›®Ôb¥¹¾{·½Á–«è‰š¾á‰’¹è|­¸¨}¹Åºr Å—½ß®y¶¿¥±±Í{̯£c·Ñ¤sÍÓªT¤ÒËX³ÛÈYÈÁ[ÅÿN•´¾MÀÁÅo±ÄÏY”ÆÚXžÊÝ@ž³ÎP¢ÊÕgxÂÔ€…ÄÁ“}¸¿ƒ³ÖŠZ¹ YÐÉ„Fн­9«½ÅH°ÈÈ:±­“H̯«;šÛ¸W¯¸´b}¨Ÿ;ˆ±¯`CÈ¥/7©˜Q6Ï¢bP˜ºO.ŠµHF®ÀR[¶ÄNDh³IJyå(Z®ÈS×ç—QÌÛ†TÔÖÓK¼úËVÕæ¨6·ÿgOÙÚÛIÁâ¸4Æм.µæÌ9»è±3´÷Ýn¿Þ«<Æð×fsÜä\VôÂŽŠæÔˆ|åìÃ’Ñál[ÖèŠ]Ëß“QÏï¥LÔë…?Öá–ŠÊæ‘9ÐñÄ5ÖìémÂðžSÞõ»AÄó·K¶à¡$ÜÝ«8ïÆQ£Í¬:¸á· ÚÑÜ–Ó½%€éÎ"gïÎ,{çÛo}ðÎB€÷»3êÎ;>åÓEÔíŒnÝÊ7ZÆÛˆ2ÇÜqÛçzâì¯IÁä®>æÑ؉¤ÖÃ[¹Ô¼Z¼Á„8Í¿À'¿àÇwˆéÔNå·É?§²ÃI¨ËЩÕÅ?³æÍP‰âÞd|õÑzæÁPcìσVÞÓ—HèƇp˾,±¿ª.ÁÍ¥,ÔÄ@‘¸ÏJ°ÎÖAi¾»)ˆ²¯=P¢»61ɦ8PÌ¥N2¥ÆbU¿j6’´UP˜ºXh¡ÍFFŽ¨KP¡ÕXBŠµ€@ZÙƒP{Ät^¾´‡wÖ·»5®Ò¡RœÇŽkª¶¤]ÒÁ¥mϳūØ̱شݩÇŵtÍÌì—öÃæ¦ÍÊâ“ÓÇÚ»Ò³Ú‰±µÆFÊÏ_¨»cĸ­n¹¾ÊgÅÎÂŽÄâÍÍÝÓ÷µ»µÐ¥Ùʵtr®Õ±¾ä¼†G°nHoÌÓ´Ô½g‚x´OY^¹9Bm¦CdtÀF{W½ˆ^q©whk¬å…¬ª’~S¾žbU wA›¼¨tk¼Ï›R­Žpn£€lx©Šg_¢‰nPµˆ‰HÐx­¶²’r™·‡¬¼“ˆ±°¶ µ²¿Žo „b¹«Ex˜¾Ã•k¯¢®Ô·•È¢Æ³€“¡ƒgz§ÀjlΑ€¦©Þµç ¸uÐÞÁΙðÂáÞܠا¶ÖüØÞàðÜðìêäîõçäóéøæñÛäæâõÐøÎÿíîæëñèåôÌøóçêëÜíÈë®í¶Ø©ÂÒϯ¹ÁѨÓÀè¯ÒÈÛ˱åÑ‘·ç¾´¦âº¹±ìÆÆåϹ›ÎÏ© ãÄ®„èÁ܈áÊÚŒÏÑÉxÒËÕ“àÎמвÆÕ×Ä›žÃã•ÀàßœÃÜÆŠÞ½Û²¶ä™­åà—£²Ù¸äÇ ¨Þž¿ÎêŸÀÏÚž‘èÎÁŽäͶ¥Òߦ¦ëâµ™ðΪ‹ñì‘ãÁ»‰ÔÌÓ‚îÖ„ҿ½•çÍ֎ո؋ÊÓÙ•ÇÍÉuÙÖÙ€ÖÚæÊÏÐŒéÕÛ„ªêã®ñǤ©ÞÝ™ à׿ŒéÇ••ßÈŠËÝÀŽíÝ·ÚÔ·‹éÌŒˆá̲}ÝÔÃxÞÙφÖóµ€æÍá~êÔ¯™ÉÅÉzåÚÍ–£ÔÚ~˼ÈcÍÌÐtÚÈÛ…·ÌÔy’Ö⚨¶è²³©›¾çšƒªà£•µÌ¥‹Ì¾ŸŒÃ¦»°Ëœ“»²±~Ì˼k»Ä¶d°»÷nÆÆg®«È]•­ÆY¹ÃÃ[ÄÖ§=´¯§e£ÐÚ9rÛáW¯ÍÁ:“â¦C“Ïß>´Ô¯J‘©Âu„±Å“vÍßjtÉßvl»× ]¥Á¦OÈÃŒR½¸°H°¶‘<¸Å™EÄÁ3œÑ¿<¹È§E–¸ŽVžÑ§W|ÅšS8¾FOÛ}RR·Äb[‘ÖVK¡ `h®±^Q€ÒdVœÐ[N¤Ø_KšÎ„D—¯jCg¸ƒPÀÉV?ÊÄ›/±ÁŒ9»Ä–TÆÂp,×Ø 2¯×’/ÐúxEÊö¯8£øÅ?²ìÀ+ÉÝÎwÜí¡,½íÁ8¨ì–V™Ê³?\ÂÈ4§Ã˜;«Ï³¸Çï0œÙÕ=–ÚÜ ÁöÐDp×çhgàÀDFåætRë¯NIÕâVOšÐ‰fÎÈ9L¢Çl6áiÚÔ¶}ùÍØAÊò²MÖà‚Iìì«F¾ïÉK«éÖP¹ê±E³Ôå`¢íÒMºæÒLžêÚT§ßÞS{èê…„ìçw¬áÎfšßÆQÝÚ{ÓÈe›åçšœÙÏ6„å×_œÝËiƒâÓ£EÃæâRÑè¿zÞ܇SÏÚ¼MÎÕ×qÊÇ­V¾àãB¼ÛÀ[ÝÞ¯BÑä±C½êìQÇçÚd­á¸AÌéÅB®ëìM¶ÛèpÃéÚmÄÎ盌ßÙ“yáÔItäÔvnÛì¥Z×ÚmPÙæ{yÙÖ›NÈî’GàÖ’RÙã¨`ÆÔ·]ÞèÙ/ÂõšLÓÓµGÀÔ¹KÉä¼O¼Ó£:¸ËꃲßØqµÕÓ)³è¹<“àÚN‘ÝÆ}ŒÛæ:šà½(OÿÐ?ŠëËBqÖÖ#xÕÞX&Ôîg2²ÕROÕÊl!¸×pGÝÚŠ)ÝåyCäÍ°eØ‹@¹¹¨3¿ÔÏfÏà UÓÖ¢4|Ú§QÊÅ°U¾Ù·E¤Ñ昕ÇÊk­à¨0¸Ù¿5dÇÏlUÆÁq×Íc×ÕŠ‹ÜÃw`ÎÄ‚:ÒÙ5±Ë¹?‡Ã¾4°»˜8~À¹5½ºÌB¼À>J׫@PÅÃh@ÒH.ÁŸV;µPP«½UMŸÏhJ´°Xp»ÏPO˜ÄlNŸËrWžË€2ƒ»{מ66È¥6Q·™ABžE=±ºIO¨šeO±ÑTL·ÖMZ±Áj_©±[/¬ÕlY{Ü(œ˜iqËâpBÆ»Ÿ4غ’bÁÓsi¹ä¤-¶ñ›Ôâ¨$Ù÷ÊI¶ã©6ÀÖª!Èæ¹Zßߧ3µÚ»;µÜ¼c¤½Ó9H½º<ƒÒÍ9¯Ï¡Êѵ0‰ß¿3~ðÉ=¡âãs˜ÖâNM»½DN¹ç?ŒîÊS)«ÍDµµ2_òÀo9ßÔ8J‡ßn$›òT9q°HGÑä*LŸÛŽ#Œ×=,¤È‚8 Ó­,v©¹ºò~8—Þ¯K·ó¯10è­+¿ç­…˹Q‰ÝÊ15É¥ÄÖÉS…ãµ!@ËÆb*¶À<5ÇëM9ÓÉPJ¿Ð;¼§1IÉã?TÑßlX¾ÚMM˼w,âñ³*Íå›*Í׆'ªÛã_µïÝJµâÒ]Îðê²áÒàh‡ìë´îøÔêðÛÀÔéåÔå÷ï Žðò¼§ôÙÈyÿêèÆîêáÏæùãgÿââZ¾ôÖDÛíÒf|äÔs êàw£óÒ@ªñë˜uÍß=täÞ°fáÉ”[èà¨DÕÓÂTéÞ®OÖéÔTÌüÀ>·æÍ?½å®@ÅïÀ.µã¹I¬ï¹%¼Ñ³H~ÓìZ•ôÄ*¦ä²R¾ÉÐLŸÛÓOƒÜÞ8¦÷¿$öÐ:{åà&€ôÑ6Ûæ©^ÆáØ_åëÁiÚàOkÎݯYèÞ}MÔدcËí§W¿ëÛOÎ÷>Øñ°^Ìå¼IºäàF™î¶AÙíŸTÎì»:¸òÞT¹Ú¸\ØÙ¶Q’ÚödMÛæ–‡ßÑIˆÍç}ZÒâ­ˆÎÞœ~ÜßêÍÖ—òÏÆ`õÝœ_ãá¢LÙñ›5ÚáŒ_Õåé]Éì¤VÆï¡`×Ô¾a¦×ÅO¸ÓÉD¾ô™Ðâ¿KäÜU¢ÈÏCšÙÆ6xèàDæÌ,‹âÏ7™ÚÞMÓÚh9ËÙ{-Û×.FÕÙoâØhËÞ…+ÜÚ§`ºá e×ÎÍ;³Çª?©ìÁ™ÉÂØnºÔͶ¾éŒ´ÓÑ•Ùé‡×Ü—±Ñ¾xÏϾq§ÈÎWƒÜÞZoçÏsÞºƒ„Ú¿[ÂÄ:ÏÓdÚµ¾9ª½ÁNÁÇž=¼ÒXZ²ÌH|ÊÇ>pÜÅ^`«·F>µ©EC´¶/FÍ—^U¸¼ME† l?ÁhW´ªgP‹±SI³½‚VËr:¦µ@`Ä‹HyÒ\S†ª€b¬±¸KÁÀY~Ö£S®²·]ßȘ꺮i׸ò›éÕÖœ¡·¸oÍÀå¢Ó§ìªÍ­º•Û±Çªß­ÃWÊ°Êlb®²eÓÐÄb‡´¤p¹ÃÀk`ÆЭ¿ÚÙ·éØɯʼ£fm”³y˸ÌÑνœL’§—VˆÁ³¸¸„t€¯}‡…hs™‰T¬´Îi]È®wh¦™bu˜rvaž”ƒ™“´t”«Í{P°³‰e”¯~zŒ‹l–¡æÀ»ž¹“q‹ºo}”šsP°¯jB¨Ìr¨¼‹m¥ž‚x«ÂrΞ¿€‰²¬”µ¿“…yŠ·¤„W™µ«¸x‰šÅཞ¡±Ñ’­À¯’ªÂ¥ÏÚŸÏÇç­èÈè•áËʬÔÒמ½ÌäÔìÔóÚóþçÎìëêèíàïßîèóÜÇêÍ÷ÛýÚïÓùëøëòÏçáëÃð®ÖÎá“ïÅÔ£²àѨÑàÛ±Å×ÖŽÌËÖ¡«áÁ”¬àɶƒÏ褦Ø䤚æÖ½œÙÆÈšòÇÜžÍÉß™ÉÕç‚ØÙƀɻΒÙÆÕ¿Ê͇Ԭق¶àÞ›º³Ò~ÄμŠèÔÎŒ¬ÖàzºòÓ¬—¶ÞŒ²ÖØŠ±ÛÞ‰¦Íåu°Úħ}áÊÆ„ßÛ²’àį¥ëÜÅyöÎÀ‰äÍÑâèªßÙÌwñÚÃy뾘ŠÝµºmßÞÜt¿Ñ»bÝË¡…äÌÈrÑËÊzÛÓÎpÐÊËw§àÙ” ÞбŸëáy­²Ò²˜àÙ£ÙØ™„Ø¿‡“Ûä´nèÕ´dÖĺZüͧjØÚ´bâ׿ZÞΡÞÊÖi×ï¹oÓß¿’èÉ»oµß×sÏÍÒdÓÝÝfÊÐ×j©éÜk¢®æz³ÈÛ†•ÒÕšÊãŽÊÒq—³Õ¦€Ëϯ’Éü|½Î‚…ÄÑ·såêÄzÆ¿«_¯¿ùU£Î›HØÊÑK¡á¾4œñ´?ÅÛ±7¥ÄÃ3²ÖË>yÌÖ8“ÝÚH‹ÌÓEvŸ)ˆ±ËF’ÐéfpÇè{XàßwpÖ¹/OÌ­€IÊÛ©6Êå•@ºÓÉ2£»Ê3±Û¤9ÁÒa:¬Ê·^¤Ý®G±µ<€ß´PsзDO¦²/ZÁ~CA¬§/:™½`>²ÃSnÜÇr]°ÆcI¤´OSË°W^ËíŽF›ðvB¥Å`2¥ãV_Ùݤ3çÔž>ÅÏxX×À,Ëï‡7ÆÜš5ÖÜÏBÄå㈖á±1½à¹Iµâ¬1¿é®V½º´*¬Í·¹Ôß;ŽÜË/ÔÛÒ ¥Ùš­È¹EiÛÆBUëäh‰ç¸,eÝÇ04Êç-…õÂ4…ÆÕs(ËßZ@¢ó%[Ý×[8’¼ATÒu+¯Ú…À˨‘ç| éh0yÜP(bç‡S5±jé¤NsÕƒ#*ã¶>UÁ¶’Ü¢9_µµ%C¬¸K¿°>-º±TÆ»3xáÐ/DÂÉ/@ÁÁ-|ÓÝISÛ»)LÝÊ?µè²5ˆÙ0ÅÓ…:ãã˜lºÉ§XñËžWÉÃV#Øͺ9œèÓƒ¥îçrÜܪHÇÜä¨Ðê÷œÀîî¬ßáìÝäçÖï¿ÛìíÙÛôîË‘êïí½öãëÅððÝ•óéæ„êÝÜnÙêÍR¾ÝÖ ãî€ê݃µîçb™ÕÈœvàÐweÕ×›yì˵;ÆÏÇLÇÙÜUâæ¥N×ߨW¸èÜg¯çÍSÑÊ­>¤áÓ]©Û¹\µäÆ:¢Ï䘓ÝÄ;«âÙR±ôºNuùÍ}¨Øï›~ôß|™çàeäî‹€áØhŠæç zìØÃBÅã«dÞç¦háݲZêÖËZÎáÔf×Û²Zßìð\ÎèÎ`ØàÖJ¾Ûž>×ÙäcÄÚÚa¯ÝÒUËäÂ`µèÛ>¶ÚÛb´àÈRµÌèž}ØÓskå؉–Ýèioß㊑Üç«€ÏÙ˜SÖиcÇ؃FìÝ–KðÓ aßà¦PÛÛÄMÙæÑ]áíâ\ÆåµKÛåÑ×å QðÚÒs©é×U©áÓRÞê°[³àÚe–ð½7Žååz”ÐíºrõÜ|å݇‹éÊ(|¼Ñ‰`àáŒgÜè^SÓÒqVàäŽZÛí¡"ÀÔx6Îå’QÙÉð~¹æÂ}ÆÌÝ—ÎÁ¨h»Ç¶IªÀÞÌÆ®8ÈÊQººÑG˜Ù¸<…ɶÌÇËc‰½³qÖÁ““Ý·P?¸À‚MÍД8Ù¾–]Õ±™Oø¯<¸¼ºB;§E¦ÊÅIu¶µNg·¸-]± hdÑÓpX«¡>KŸ®<1·­I;²gD¤ºp\«½ed·Ñ†R¦Ä}gˆ«…0«ÝulkÂŒ{¿¤I}Øb˜Î™Uk´¦\xª¢S£Ë{L º—…ƯÜðʾ®é¯û¦Õ¹©O·±ï¦Ø¢Œ|Ò©µ_•¦¯R¼©ºRøÉ~Ë©ÂbÒÃíæÚÁÊ^’»³`n´Ày–Á¯ÏÅ¿®h‘³qH˜¯¹°Ì±„šeŒœª…ou’SŠ‹¸Œ|²nxzÄ©r‘¨¶lƒ· tÍ´Ìna«„u` \}‚¥|x]ªkxnŒ“Rc¦œ`>£’]»Ÿe¾Èy•¥¡‡•”cªÂ‡p²‹—™´ÆŠv†’xyzÀ§Û¡ªŒw£§Çx™²†s’ ””—¨š y¡“˼‡¶ªßŽ»¹À¯ŽÄßÚÈ€|¡—¤{±èÖ׌ÂØÞ˺ßùÈßÆÛœäÉÛâñÓáÄïûûÝûÜÙÜíÜÌñàìùÛõïçíìîî÷ÈüåûßûÇóÒìéîèîÐèèçãþ¡éÓ׌ç×Þ¹¶Øî¹ÀÔØ°ÁË抺à̦“¦Î¢¡ÒΠ¾Ñ¼yÿꥅüÓÓ×ƨƒ×·Ë¼³å‰¡Æ×nÚɈ¸©Î‰™¹ÉÍ¿Í}¢ÖÚ¢ªÏÙ²×ÜsËäÁºçÔ²¿ØŸœÐʈ¡Úá} ¹Å¡ÃÞ¥­àÌ™‚éÇÙwÅϱ{þÕ°ŽÜÔÓpôѽlîÕÌtÛçÓräÏÛnßÖ¾rÐÅäzËɤqëÐæ‹çØÐl½ßÑrл¹~ÎÔÖhÏÉÐs¿ÓÄcÂÔ둆õݬ”Êߢ¡Õè¢æË’ZÌßœ€ÔÎ…näÎßsÛݱoØеwåÙzêå¶fã×ÂlжÉwíÖÈkÎîÂ_æÖ¼kËÚ·lïØÄv¯äÔdµßÔg½Î½m¿ìÕ_Ÿý»i”Ï懫ÆѨzÏï†wÂî{¸ãX›¤·§wÈÇ‹~¹½‡sµÇŽmÑΚ\®®·[ÅÂ¥W¸Üˆ@ÇåF©ÛÐDŽ¿È4¾ß†5¦ÖÁ8£áµ0°Îì2£ã·<¥ßÓAÜÑK…Åç6¶ÕÚJqÚÅ]xÏãeVÒãMMÃêLËà~>ÌÜ›\Ú¶¨5¨Ö»@­Ø³.¸Â~*Í¿³B”Ó¼DXºÃ0C´i8®»K!ª¤C7¤¤9*ÏÑ\L©ÀVF¥±.4ų48ÅÎ[C¾¶;J¤ª`-ºÓq`ß’@Š¤v:ªÇPW§Ø‚.WÝ‚F¥ÜŒ$¾¾c@»âª"¼ÆŒ"Âߊ4äØÀ1¾åÆÁܺ¶Ïd)ÊÊ¡%žÚ«&³è©¶ÖÃ.©Þ­)©òä§ßâ±´àÉILóÁ@Hï؂ù5»Îc:ÞÌWˆÇË;6È­(O‘»I”µBÁÝ6[ãÎQ9ÚÊ+¶ÇyC¹l<ÐνM~Ñy[Úy}äc%M¦¶<-à±!µÓ€2%Ü}41ß’W˜Ó·¯Ê¥;Ç×:TË´?:ºÃ¸Öào[ÐÄ0UÊØÇÉ.IÙÖ¡-ÌÍ54ÀÀaÛÊG-ºæmhÙÕ}'ÙÜIrÔµdmÂß|2ÑÖ‚L}ñÙ¢ðåÞm®æß°ÿçÏYÆæâŠëùÑñäáÎïæå‘žèú·êïÒÍÝïÎãåö·—ñää²ëôÓpïîßÐíìÒ‰ÝÿÞµñèÎZÖØà‘zÛÔý¿LÄ×ʉ}ÏÐErãÝ•SÝÔVUÂæÀXààÄMêȺPÒÕ“LÞʵQ»ß¸IÒÙ¹O¹Õ¶7¾å·5´ÑÆP»Þ½SžÜÍV™×ÂQœÛÓVÁì´e–ãÊ5…àÝqÞè]–Ùækr××rŒÛ÷™‹ÔÞµ[ÞΊUÙÔÃhèÞ¯uýÔÉuÖà·RÝê¥fÝ×—R¿ÞÏbÞÛµMòÐvgàÔämÖâÕg¿ØÒyÎÚRã×æS¿âÁRÉÖ²EÏæ¾T“ËáÏßÇa–ËÍd ëÚÌ{ßæŒbÒà\BòÈ™ZäÖîoæädìÕŠ†ÜЗQÕë³JËÝãRçÜ©kÏìÙcÌôÇdÈä³PÚܸ}¢ÓÖa»ÙÛVÈÛ»bÛÎöœåö‹‰õË îÁašÕä;‡Êâ9ˆçÒ$˜å¼K<ËÔ}7´Êƒ2ÆÇ5Iǽž_ÎÑŽÛæ;éâªpÄΰpÕØ͇®æ“9ÂÊâuȾqiÊÉÔƒ¾ÐÉK¬ÅÏlÂÈÕŠ‰ÐޡγRÐÂÅ;дÑg›Å¹\žÂÖr°ÄÈ[ŒÍÕ±ˆÞ­‹hÎÙ|ZÞ¸»kɲ¶2Ò½­D°È™GºÆÂD¿¬¥P}±£:[ןYE¼¬DaÌ™R]º¢3W«Æ^[˜³WVŸ²QW£¢ol°‡UŠ´|Z­²^h‰¯³S¤½˜o{ÁŒZ†µw[¨›•>‡»¦E^³˜hª©ÚÁÔ¯ˆdҶƯ˻ݡÊÂÓÆ·ê·Ú°¬rž•˜Ê¯Çg‹¶´‘Ë­©MʸԡüѨÒÜæ¦à«œ|W¬Õ‰m˜Óּίm¢¼§o„¾ÁkǤԗu¤aI‹Cn‹}k„¥xǾ¶…mo¦ˆÒ£´kª¯„bo¥ßÊȧ¯zC[7n|ªNRF›pEš xoi¨ÉhH‰`s5Œˆmž™Àl`®µ¨«§Ÿs~ž‹}|¡}z¡²Ð¦’’¡¸¶±¬‰€™¶Ëͳ—sššŽŠ œ§×¸²’¯ ²…Æ‘ÃײŸ‹u€¥°q³ŸØÀ¸¢ßåÐíÐÕ¶ºÄŬíÓàÕÚäÌÖÈìíèÔ×ïýÛÌÚÕØàÓçíÑíâáØÚõééØÎôïìÌóÖùØüìÚãøôíÊü×õÌí¹Ø„ãÃæ±®ÊηºÖЭ²ÝÀnÎ×Ò’Œ˜¶˜˜÷¹£äÊšŒáЮ}æǽmÝËÌ’æŶvéÂÝ|ÌËÃ|ã̼„½ÂÑ…ÈÙÂu¼°ÖhÒ½²ˆªÑÇl¨ÏÛšÃÏÓxÂ×Ç„—èÚ‰¤³â“«Õܘß╪ñˆ±ÌÌ•¬ÆƪpåÍ°†äÊÞŒìÚŽ©ÞÜ®€èÉ£oâí¤€Úâ«sÐã¸ZÖÜ­fáѪqáÖÅ‚Ê̽kÉÑàu½ÏÀ|ãØÕnÃÙÀa¿ÙÀjÊ×Óˆ ÕÚ±~Þèf›ÐÊ\—÷é ˆÜϘ„ÎÎljÓΛN¹Åª`äáŠQüÍpƒâÖ”féǹiØÙÓbÜñ’câÛÁZÚÖÖc¸Þ¼QáÏ´\¢íÅi¿Þçf³Ö½FÅÍÛwŽÓÜ|­Áåk‰Âè‚zëÝ_xÐäƒyÂïn„›Ø¤…¼Á¸R¶Ó¡qÑÃusÆ×µP¯î³[·é´Q¯ÁÖNÎÓš[¼Çå^”¸ÃN¹ÅÑ`±½‚2ÌÚ¸_—ÞºOŠÎÒ@­Ñ¿4ƒÄÊ?tâÄ/ιM‘â×UPÆÃubÒÐQ^Ѳ…n´Ð xÙÀ†tÁ¾pAÀ¶5ºÊ†<·¶¢<­¿‚4·ÈÄ@©·3‹Åª8‚ɳMA¬LZ¸‰16¯ŠUX©Æ>D‘’7J¦ÀKKƲWY«µdS©ÜTFµª?L­ÓŒ[̪‰Sš©bEµÀLaÀ×y"¿œv#•çP7ê«‚¹Úª'ÕÝ­4Ä×È'ÌâÏE—áåJ¬àžDÀÜ‹>ÀÑ•<¦Ì¦!ÁØ™A”ϯD™å²1˜ÚË_³æ–‰ß¤]ƒâÈ¥€ÍÈl†à®>O¶ÍF}κB'ÅlKEÅÄ=,ÒÖk/°ÀSIèÍV.ˆÝv;æʉY¹ØZ:‰Ù«;µ½r(G¬'@ÈD7g¹š5¸ÑŒ1=»™,iÅS2QלFFÔ¸DÇZSÒ±DKºÇ`‚ϯCƒà‘^´Á̆ÍÜ{s¼¶%ZÔà@sÌÑ*\ãÂ3XßÌ3’ѹREãÛm>×ñОÖÍW*¹Ò†<ÏÒ?ÌÜ“¡ìÙÌh¦âÓj»éâJ¤ÚÍkÏïì±Ñå÷”ºäâ¹ùèªÁõõµéðŒ˜îåÁãøîïÓçíåœñïÕÒùæñ½àêØ€×ðÖM¾ãç[µëײ³ëߣ®ÔÜZ¹äÝŠŸÀº?uÙã—äΛìÝsI×ÕÌeÜï¼PëÛXØÚÛm»òÔ_±íÝ_ÆÒ­5žì·Q·îËWÉÙÝd©àÁP}ßÂLžèË^®ê¸J®ÙÖ’ƒÞå`sÝÜ‘§ãØ‹{ØÆM‚ßÙo‚ðÒpŒÚâ¡RÚņpïåLJÚá„VØ׺LÑæÒ‚ÜⶀéÔÇ^ÐáÁw¹ê²`Êè¥nÇçÍRÁéÙM¢àáÙÓßU±×Ü]®ÙÛT°îÆM±ØÛ›Öû„†ïÓ~”åäwØû”RÒÉb^ÆÒ‰•ÅÚËRØçªl×Û³{öð¬ÞíçjáÙÐg½âÚ\ßé§aÖÚíiÔÔêšÝå¦[ÀØâì[¡ïÑRêë§M¬âÆzŸçÌS¡ëÙP…æןnìÆz|ÕÚJŠÕÈ6oâÒƒ[ÑáuMØáKØß|aÖêfmÐП_ñÏP:ØÜ•d×Ü›F¯Õµ#Ãס4µÐu3¿ÉÒf¯â²N«ß´C¶ÞÔq¼ÊÂ7‹¹ÂRÁÕÉ2·Êµ@£Èémyݼ‰hд€ZÎËVÞÍv@ÛÕuX Ã“2ž¹¯JwÒ¹2Ǩ˜7¸Â@¥ÌÃ8‡ÁÓEOÁ¸\9°·Z=¬­I6¥—Ká3PœÆK&šÒ_W¡œQ\ËÔlI¤Ë{R•¼hI¬ÄM„Õ´M|¼Xy²wQ‘¤¤3i¬¤:—»·UŒÅR>—²®UÛÈÀ˜Ùª‘…乪Ÿ½¼ÌZÐÒم˹šṶI‰´±SÀ»¥OQÁ½B‰±±lº¸Ì³¾³’M»º³p@ŒÎĮ龎l³½[Hž¢wž«¶q^®Ÿe>µ°|sŽ¿wd”˜´£uj•ÃŽmyÖqµ¿Žkv¶‚m”š¾`L8|2!uz—LX·¿c'žsk¦–jH£´}X–Êd‚±…ui˜‹‚¨»˜p£­Ç‡§®«fP¹vªÆÖ~¨žs|Š¶É¿´¥x~tË¢µÀ¶ŸØ±µ‚–礗ÇöªÍµ‡Š±°ã¸Ã‰ ©Ù±Ï±ÔÚç¢Í ÂÇýÉê¸Î—´§Å·óÇÌ×ýÇðÌóÓë»òØÉåëäÎá¾ËòèéÿçÛèåÕéâðÝ÷ÊüæèÛìæèÌòìñÇú¸Ê¦ë»åÎÔÜìÞêÙÊåÈÙ–ØÄÕ¥³ÑÓŽ°ÂΔ–¤¶À¢Ë®”޷ˆéÏÔä˳zßÔùš»¹»ŠÉÁß°»¿x¹ÇÀ‰¼¿ß‡¿µØ€²½Ê¡³ÁÅÇÎÛœÈǺy¾ØЯž¹Ü šÁࢨÕÍ™¦Éµ{›Üά¹ÝÍ™«Þá sñ㢊彽—åÚ–uëÑˇÚÛÈ~ÜѪ{ÓØßtÏÆ­‚çÒ­ˆÅǦqÝÑÐÒÌÊq¶ØÉ”×­Û}²¿ÈuÔÛ×yÔÙÈ€ÐÑÑ …ÕΛÚÙ™Žäˈ—Æϱ—ÛËŽÍÈ”›ÚͽrâÇ zçضŽæϹƒâãÛtêÛÔeÙÝÑ^ïÈ’VÐÈâvΩ½sÎá¬sÐÒâ¦ÜÔ`ŽÄ×\Ü׶r¬ÑÖi–»¸|›»ì´¾Ì‡ƒÄ·„µ»ƒ ØÔoˆÛ㪎³Á±[è²q«Ïzv°ãŽ|³È­~Á¡¡‡ÍÜ`ÐÝ¿d•ÇàN»ÛµXÁà¦OµÛÄE¬ÉÅI™ÚÙM¯ÐÉNÐÑOªÞß;­ÒÛM·ÈÚAhßåYRÚÝŠe¶¼€xµ¦a¬Í¤UÄ̇J§Ç±C ÎŒV›¹±NÁ«§fʼ§Eœ¹¦BŸ®žKp¢§U1Ö¨\h§EP»›FN³ŒET¢ÉKL‰´HI«ž.?¹ÃsT”°TP«»XI»Ö}R°‘GȇQ…Â[?ÁÅ9~¿ƒaÆÄ•J´­…lÊÈ°8¹âB¶ã‚GÏÀ¡6ŸÉÜ6¡ô±#ÍϘG¼¸Æ@¢×­'—¿®?œÉÂH¦,£È¹4¤å£-²×Õ?I¾ábfïØj[¿®N0¨àFrÑßUVá¬>6¨Á4,†Ë[;ƒ·jKÆÇUuÃÃYH¡ó:ÚÙˆ3¨Ôw"{Ï„49›%5wŽ-0¸Ó—;TÓˆWAÝ°9AÍ)F½…-d£°«²¥1TϧAˆÍË@}Ï­)|ȲfuÛ¡*{Ùà >¸³,DÚÍ€g×ÃNT«¹ExØÂ;žæÞBF¾ã²AÒÛ²5ÛÛ9Fì̾uÈƉS¿ô‰BÜçÐo¿ØÛòùÐJµÛºL¾ï˘Õñ»éó¦Òæúöج˜íêž¾öÞÉî÷íθåøó¶ëååºøìÛÞÝéìºðéÙA–Öæ^Æç畆ïᳫÞë^‘öâhÂÝÒ}|ÛÍQkÔÚQCãÛmJÛì²OÝóÍ<Îá±TáâÀQÓÙÚ4ŸâÈ9Ëá@µæÅ?®è©#±Ò´;ÁÞÅGÙÈ=•Ü¿?§ÞÃA£ÞÏ^åÕFèâN—×ÕvŒÒÞm}ßÐlmå×›¥æÃOÃÙ½˜ãÔÇNßê¡|ÒÞ©KËÞ¼ZÐÝ¢\Ãϧi¼ÛÆ`Ïß«FÕæ…,ØåáR½ðÀH¯âø‹¾Ý¶DÆܾM¢ßãc¯íÔ\ÁçèuoÐêÍqààRwÐÝR~äÊeRÆìhVáÔyaØί\ÈÝš5ÛܲKÙßrZÜÞÉnÚØ¿YÈÑâRÜÚ½I¹ÞÝVÂÛÊDÀ×ÎTÒѵN™×Úl«ÖÁ1´åÑOÖÞµB—ÖçUˆÛá@—èÒK|ÍòI_æÛP>ñÛp‡áæpjÇñ‡O¹á ØÐ86Óâs]áä€&ÐÙ}4ÎÞ°fÄОK¾×Ò[žËÕe¿ê­ƒÒÕ`ÇÏÏ}¢ÝÍuºæÏ€°ËÊf”ÖÞv¸ÒÔœ·Ê©DÁÈÐN~̽cœÞÅwl¬ÔW@ÔÜ”‰×Ý‘_и‚3Õž5pÆ©C¾À¬F½Ò—OÌË·(mÄÌEaÔ¼GOǼPo¨?C¬’AMÖ¥>.¿ÑZK“ÎQY™aÐívS±·0D½æ~NÍÄ)iâÑ;œêÕ|ŠÈðµkÈå©=áã°;Ðä“MÖàÎ;ËæÂHÉ×Þh¾çámÇÛáw´ëìvÃçðÎçõíÎØùëîïçõ°”æÜóêâò©ÙûåµÆåèÛ»ã÷úÛôçêÆéíó¿äíÌb¹ãæj°çØc™áìÁ¡çá„šÛïY±âÎe‘æÍ^Ý×pìê·‚àâxEÜа^ëòÆaâë¹AÆãÕ`™æÇS§Ø³>Äã¿C¡æ±P·×¼]°èÄZ©Þßy’æÊT¢àÀV­òÇS¦ßáw•òâ‹yÝÄu–ßäVç̘†àÕ²|ê×\}ÅÔ»LÛí­jßÔ™SÜáÆPÉØÖHåäÛ^ÖÛÆ`åÚÔW»á¾JÍãŠZØøÂ\ÕíçX¼çÒvÆâÙE´Ü³Y¾ÖÔ]ºíñh¹åècªçí´nÌâªtáÖ‚—ßâ‰lÔðkgÖÙ‘YÜÔÂ{ÀêÜOÄݵ+Úð¥aåì½PìØ·V×åáU³Ï½CíÕ»8À×ÜPâßµU°Ýž?¸ã剒äÏS©ä¼7¸Ý×y¨Ýä_ãÄ6äê}ò̈fú횎éÒ_‰ÒÏ"e×Çœ>ÔÊ .ËæSäÞR%ßå|'äï)ÖñSãìv9Éå²X©åÊ]«Ð»dÅâ¢{ÒÙ©P¬Ø¬+¤äÈ:¼ÜºNŠÊš7»ÍÍJ®×Ë@¶ÙÒ)±×ÏG_ìÅZXâ¶D@¼×‡CÚÐr[ãÂošÏè–/¯Ï¾(¶Îª4ز—'·Â*DÉÄ8jĸK>Ψ`3º¶F0¼½HFÊ¥/+ã£EH§ž)#°¨B[›¬JB²ÃPH¼·I,°¸bYªË‡UmÆšN]´’m•ÉyE›z3`Ñ¿ÙšŸ½¾“x¿Ñ§‡ÀƲŽçµB–½™WضªOÝ®À?ʸ§…ÌЪVÄÈÈd…¥­XU´ÆS¶º¸M¦°¾g”·¸qg¨¢i­ÓÏsC—xgVŽ­[`©¸~aŽÂma‰Ë˜pµyŒÉ¶}xØÈԱ㼠b ½ŸQeÁ_yÈxns±M´Ò«›je©“lqÀªP’¡ÁDy¥›™å»d[´´^FŠ£c„§Ì€ƒŸÄzµ«¾dn²½l…¨Àyd «ˆÆ¹­dh˜™•{©·}¬Ä½ÌÆ·Æ¿ÚàÓÂäÕõ¼Ö²æ£ÍºÂ¨öÝغâ§ÙÔ擵 ÚªÖÕâÏõÛöÓåÝõÇöàøÜóÌàçøãèñöÀÎóæçÝäüíúÖôÕìâÝääíß÷êìïçÉúàêëïàêËÛ±èÆæÆÒ³ãÐÞàÕìÓÌÔ¾ÃáÛ¡ÚÑö­©èÕ¥§Ð¸‡}¦ÎϬÐóšßÁÆ—ï½Ó‹¯Àì¤ðÐß¡ÔÆ–áËʆØÒ̓Å˽ÌÊÖŸÉÓÊÂæØ£³Éê«­ÕÑšÊÆמ·ÎÜ“·â׺¨èÕœ²ÏÕ±Ÿî¿¦´ÖÔÙ·àØ’µßÞLJàÎÀâÛ·˜ÛÕÙpÛÎä„íÝç€øÞÑ‚ÎÀæÎÕÓŠßа³åÖã²ÔÏé€ÊÒÉ“ÉÅÖ‰àÒÀyůÀÍÕçŠÚÀêžÁÞë°™èÆÑ©ÜØ­óߧ®ÙؤœæÕ©|溾“×ÛØÛÉÀ‡íÓ¥‚èÆ‘{òÍÅlÞâÔoÇÛ·móÆÀ|ƼÙeíâÁiÈë´nÚ×¼­ÜÂ{ÄÞØxÕÛì­ÂÒÝœµßç‘Š¬öl¦ÕÍ’ºÒ™—ÙÍ}°³å‹–ËÀ­kÂì‰Ô㘧«µm½¶º~º³½¹°ÂˆªÃ¥W¡È­RµêäT¬©±YžÔ¢FŽ–´Z°Ú¶Uò×e­Ù·`™ÂæM–ÁÙXÒÎ>¶ÞßitÆÇlpÆÓbƒÂÜm„ËÉ™]¸Ê£RÉÍ£MͲ¨B«¯œaº¤´6ÈÃ0¸°‹C“®‡hœ¯¤4g³›X„Ì«U3µ«CA †W?Ø‹]H•½FU¦¡d]ÄFc•²eeÌ­4Q·h[²»{]¢¸˜WyÒvQ–·jIµÓaT‚¸­B‡×©VØуAÏå°)¿ÍVËÎr=ÊÌ£(ÆDZ0²Ó¶<«³ˆ5àÔº+À±¬0¸Á Áê¤2ÀËÔm‹¾¾A_ÊŸ=ϽÐ=‰Ñ¿-UÓØCnßÌD’Ä·eÃvMQÁ°IʦG.™ÂR[²±scÇÍNK×êbDåà°=ɹŽ*Çˈ?¢é‹2ŸÓz3`¨`@²¨„.‡Ø¿I¢åÄ"¼Ï¢(¼Ú¦7…Ô©)é£>AÓ‘\Õâáë´Còæ†BâØ¿KËíáZ­çë`ÃÜÐL¼ÜÐiµßÖ_¡êÜT§îÎq„ßÛ=åÊ\´ÝÀG¸òÓ?§Ùê’ãë”ÕÚRtåã¡›ÑØxxÚéÙÒ‹NÅìÖMÜÖ¹cÐê¦QÝݵHÚïµ8Û÷ËPÓìâKªø¼@ËÜå|Öò´GáÞÏ>Æè½tÇÖågÄç©LÔ×Ç>®óÉI²äÏ^ÖÛ×nÑÙ¨aäð¥~æÿ‰•âázYåÛyPÎαYÎã…Báå‹/ÓìÕcÔäž„äè©,ÌëÅhÉä”BÉç«]Æל*ÍÝÂJÄÞÌ@Äëå[wÜÍZ¦íø]µÞäSÀÛÊSŸæÂ,ÚÙ7‡åæ†qÍÖ4lìØ’“Üâ/‡ÝÔDNÉí`FÂæ¹cëÞ*1Ù׊1ÊÞk&Ïøƒ&Þá“pÚÏe;ÔÎéˆÅ×Ñ9ÂΗSÂÈ 3¶äß ŸâÓq®îɈµÒØS™ØÇH£ÞÀQºÁØj¾åÂw[ê½j—ÒÙT’dzrvÝËYàʃTáÌ`aÉ϶&Çȳ(ÊËœYÔÈ“!…±Ë3hÅÕ$Q¹¯&]ÉÀOE¼¯EP§»F;О:8à`0“Ñp_¸¯OY¦ÑG>–¿q<¨ÞXM¤½oK¦ß°;Ê¢QÂÏzf´ÒV[q½’eಧS˜È”Aླ7Ͳ¥Aʺ–”ÔÅ•¿Ó¼dË®ÔD˽¿Y¤´è¥ßǶJ¼Ã¸Tˆ´Äa¨ÃÊqªÏÁ;…Ê¡miƹQ¿Àδœ°¬l¿º¼s[ƉtD°…^=º¸sb³¥\b£¡__‚»“j•ºŸÈÁ‰¶Ø³é±Æ±¤]£rÔ¤¿dr¼«vi³uKX¿¤`j³Ê»ÄÀ‹a³½P\‚´­š]ÄŸ¿€l™…hh´Ê™Äª¼x±Âª½²‡v¥È†fžÄy”Ë~e•ÈÁ±™§—˸«¢‰”¤Ÿ¼Å©éÁÕáìÏÛÀÞ˜ßpÏ“åÔèáú¦ïßäÊÅØãÅàÚóÌäØóûàèöÕé×äñçßéñðÛüÜéíêöëõÜîòßíïïÛðïðêãôïøÛüéðÞñÙëÚæÍâÖëÆîÕýÎå¼­èÈäàÔÛÇÃÎÚ ÜÏÓ£¦ÙÍ¢µé¹·›ãǼ›äÌÄŽñ¼¾’ãÓ¼ð¾ÈŠÜÐáÍÐêœÛÅÛ•âÊÝ¡Õ½ÚŠ¼ÓÛ×ÆϵœÎÝ™³Ìá’¾ÑØâÃè­­Ò즧ºÇÂÁÇÍ›»ÞÌ¥¸ÇÒ‘¦äÒ™±ÙÄ«–çÑø‘ãÊá›ØÝװ󻯃ÕÛ½•ëÎÚ™ãÙÜ•À׿uÍËÒéÙâ‘æÞÙ—ÔÉ¿šÕ×Ô„êÜÒ–ÒÕÃ{×ÂêÙßЂÔÔí£¢ðÕ ›çí© ÅÌ¢µØÕš÷ݨ‰ðÜ°”ìÖ»•êʹ‰èÆÍ‚ó΋—ìÕ¹fÞäÀ{ÒÔ²œÒ姑ã䵌â˼…×Ó×mçáÐ}ŸÎÖmÌåÝ|ÅÐØ|âÎÕt¦×Üo¥ë㘋ßÊxŽÊÙ†xÎ䆞çà‚¨éÝœzí龆éÔ°v¶Ú¡mÐÀ¸j¸´¼x«×¬µÅÉP±ÏWãÖÎg¸ãÀa±Ô½VóÐ~cÍËÛnœÂÏEy ×P—±ÁPx¼ö\‹¿Ä:®Û«C‚ÌÓyqßÕemÈÂvv·Ë€dàÕxC¹Ô£?ÀÆ[T¼µ²N¾¿•I·{>Ö³c`®Å™=Í9‹Ç¨W¾Ç­H|­SQº¦F-¿‚c3»£fB~Û[K±ÄN4ĘST›¸a8«Ìtn¯°g^±Ö8¼¼‰HÐÐiU¶±6V£Ø˜PÕÒ¢9ËÉcÖɆ!­Éž:Ôä“RÏÍx>çÁ™*¸Ô !˺Ÿ-×ܱ:ªÏµ>Íà¸I´Æ­5³ãÁ<Ý”E¨Û³/¨¶œ/ÌâÉ'“¹Í=wñçIJÔyC)£âSHãäU(À—E#»­45ª¶dKÕ­BhÒÑJpùâ¶/óÖ‹.º¯]IÍ×’7†×‚%\ØA¹ßs?’Ú¡OeÅ $TÏ#v¯&6¯éœ5­Øº1OѬ%FǦ3ز2r¿›Q“Öœ%pƲOH§Ð0jȽ7O¾ÏarÙÖ:GÙÂ:¤öÅ=UèéP;àè¹LÍð¯ö׫<éÜÉ)Àà¾ÛåÑZÈàÝšèßpÎòæfÀüíææúè}Ýëí¹çìç¹æîí½»ÝèÒØðïÄãÞ÷ÓãíùÔÊåöèÕôåëÒóìíêÿÙyÑéÚxØÙÎfÍàÞ›mêì—ÛÞXµîÃQ—Ùèn{ïÚwZØõ{aÛê½UÑéØsÐó¿RÝì‡@ÝÔØVÄòÉ`¾éÎa×ô¬T¦Ûæ[¹Øê^«æÎWŒââ}ëÐU¨Þ¼K¾óÜr´Ïà<™ðçy—ê×q°òߣKìÝgváåž~øÛtÑïÅMáßÌFÞöËdäçÅLÆëÈBÎÍÆHçáÃAçÜÔxÙÜÎ3ÉóÚNáóÏMÂÙêS»ÞÙCÂìÌQÒîðS±íø_Áèâ\²Þ×ZÛäIíÙ¶büÛƒ}ßô‰‰ëà¥oêݧ\æÝ»VÛÙŸ+ÇÔåUéìÞqðà»háìªNàççB²ßªZÂé³_ÙáÍVàâã]ÑܾBÈÛên€ãÚn´ÛÚrÔâ¸F‰ÕóŸ­ÚâOìðƒ‡ÚÎva×àikæÒ˜‚ÕÁ‰‰ÔÝ“WÍé›RØáWeÙÍWBÔÆi:ÎÜkÒéa6Ð×vmÞ×Æp¯òÁYÇѧF¸È¨lÕÈÊ€³×ÅQÀ»ÏUÁÆ¥0âÎr¹Ó¸®ÞÎS¿Î¼;«×ØXž×¼nU×ÀGqÕ¼‹V½Ï‚k×ÍŠ.¬Ô}.ŒÖÅodÀ¬@¢É†6ˆÑµ5Q¸Õ<-ËÃBsÀÓ>+¾×^X¸£dDÁ•I)ß’DM®Ã57‘±JX½œkQ«ËxU§±Ngª_h´É‹ci¦›Z‡Ã‘?ÃÑ€@ˆÁŽPeÑšXšÙ¹A”Ïp5«ÌJÕÁIÖÈh¹Ø JÁÁFŠÄ¬lÕ¸–¥Û¼ÁkзƇÀÚ¯I¤Ä­X¦ºÍfhѶkm¾¹k³½Ô¹Ð±ÌPNªÅŸÊÁÊe –˜d–¼¤yQ—¦_GÄŒ_M©pS£kŸ¹¼¸Ê«ˆË¶Í ×¦£Ly¦‘we¤’p—?o€Á…u|¾‘cV ‹oY…¼aAÄ›[L­Ãme½Âf’¯²|¾­œJ‰­¸Šˆ¢©v†–“p–‡¢r†’<µ±Î®—– evœžk€¥ž–´á®Ü¹­˜¥Ö¡¾°å ó³¶©ÃÏ»ªì®¿³‡±ÎçèÂÙ ïÙæËÌÑùÜÿ¾îÅÕÕððîÉèÒöÇñÉòÊÌÏðÔÅíìïÒèýÌÝìÿ®ïìöåâìñõæïÙòàì×öìøßìÝàÓäÍîÞóÓèËÛÃü ãäÎÐÁêžÃÁà˜©ÒÒž²ÝÁ±¨ãß³¯âÕíŸãÙäËòÉà›êÙ¤’àÕá“ÙâÓ’ÝÔÉ‚îÄ·ˆ¨¥ç¶¦ËÔÛã¨ÎØܼ¹Ú×”ÄÕô˜ÅÆÙ¯Ôè‹ÌÅʤ²ÚÏÁÑÖÝ£ßá©æÓº»âÚ· áÚîšâÌæƒæÚלãÞÔ†îäÚ”æÃÄ–ðÚÕòÍÓ¯ÞÖÃÐâóŒíÛã”äÕé–ßÙÖˆÝÙÖòÉã}ÉÐÒˆÖèê•ÚÐ׆¹ÊÔ•ßÝÂœÖÌ‚ ÐÛ‘æܦ’áﲑÜÞæ‰çì |îßèççÖçãÁ€²ÊªmóÉìàÓ¾ïߺqô×ÔeîÅÙ€ÝÛÏfßÏÆ©¤ÞσÍàÙ_§¼Æv©Óá–ŸÂÜxžÒÓ‹…ÇÚ—‚ðÊŒÐÇ‚¤ÒΚµß®uêá·„Óߧ—Ñø±vÇäŒéÒ®y­¿²xØéŒ\ËÛ¬E¢êÐWÏÑ»G¦Ñœ>ïܹ6¢Î¼=­·ÙN¦ãÉK–Ú¹OâÒK¤â¼A°ÖÖJjíòeP»¿igÇëL}Ç܇A©ÓwQÀ˜JµÜJ­³œn¤É 8ÁÐs_º­¶P‡ÊÉ>sÙ˜J{®TB¥‰=.ª D)»¤2*ÈžOI…ËSQ™´IFÇ°38¢»Y6±Ò:A±²mb£³R5K»MẽVÝÃfHÅÖ„SžæPjÃã /¸ÍFXÉÚÁ(Çצ7Óî†9ãÒ†L°³É1¯ñµ¹»‚-ÂìµÕ÷Áº»Ÿ0Í¿ÀÞÂ2oÚ¸7­Ü§2ÆÍãu¡Ù«_6ÜÔL†ÅÌ8GÓ·H.ÓÇaF¬«;»£89¢½<8¸³3båß:gÚö`.ÔÚq6ÊÐzI‘ªV2`än1D¹/2›¸tK³Í„Qî¡70·²'6íf<šÒÇMg×®"ã»FLÝ{6pÎá(AЧCšÌµN½è¼(xã½,€Íˇ޴0[ÓÂ3QßÃ<]ìÌ;¤Úè‘<¼à¹aëí½=íá4aÔìÂ=àØX8äë‰AÛò»G¤ìèŸØïâ9½þÕæìærÂþçŽÎåé‘Š÷Øvmñë¸]ï褾øî…Ìßíº¡èúÙ©üèéÌðáì×ãðå[ÝêìvÚáábêèænuêÜ–€ßØF¢í¬3¿Ü°b‚ÛÚ{uæÛ³„ìâ«dÓÔ¡VÐý¼5Þî—YöÖÌDßäÛY¬êâK¸Ø¾?ÄçË7¸ö·H¤õèOÁßÓ‚yç×9…éÑ:­ê­*Æææ|÷áZ‡çÌi…óõgäמ™âî‚qÞΗï×®VëàÄIãð¸XÑòœ{ßæÇV¸îÜSæâÒEÆûáWÛßãS¾ÿ©Eßô¬EÚì¹;ÓÎò9µññNÔìÝJ¯íåd¦öÈ\µõÝJ¹åÝb^×èDdÊøLvÂÐb’þÜ`[èÙVØÐÄfçÙQÕÛÕHØÔvSÔír‚Éál>ÇïÔLÙåÉMÏîÆPæäÎbÛáÐHÅóÓLÕíÙwšÇÝ_µáÂIª×¤:ÔÝÊV”Û±:‡ëñœãÇD}Óä¯oì¾nxô¶@’ݳ?GÐÔ×rçäVñÑLmÜØLÑÝ›PÎçƒ ÐçœRóï“iåÐÍ’ÁÔç˜ÌךkÊ¿Ì~ËÁáÆÁ¶4µßÁÅk±Ï½Š¼á»ËËâ’Á»ÚW‘ÕÄZNÀß[ªÊÕtsÉâwpÛنݿ„ŠÜÁ²0°»¹C¿›5¼Ð~FÖ¯«N®±;[Ä·A]²·PY£EV¿©6K‹B%‘ÁP\‚Ë]]±šRm¯™aJ–©MD˜¶dQ¯¨DMˆœ\•ÂiY»OU½»ikƒÃsL}Í€}´¸Ü¼ÄÀ¬¯½©¦[nȇad”u€e§JJ:µzº²Xn‘™¦‡k°Šefªhpk—’zŒ·”bР´ct¨Kg»Ç¦Ýºd‚¢¿{²ë¤ÑµÒÄd©ÍÏÐÖµÏ̵¿“™Ãټغ¾ÁÓ ²“ÊÅ«ê¹Ê¤ÙÐÛ¢ÄÌħܩ·«Ü¨±ÀÞ½ÐÑÂÔŠÌÌÜÁÙ®ñ˜ÏãøßíàÿÍÿÝôÍÉÖëßÙìïÎÅæÃçÉè¸å÷ÖÔØàãûñÒóéðÚÿÜïàìÔïâúÐîÖÜÍòÉù¸æóèÀΕ·ØÁ´ ÉÌÉÞ™ԬП¯ßÙ¡šÖº³™Ú»²›ðÓ¶›Þ¸Î—ÞÊ´—æÉÅ–ØÛÞ†ËÙ×~êܺ‹ÓÂæÊÝІÍÙØ‘êÊÛ¨²âψµÆÀ‘®ÆÌnɾã¤öÌš¨Îߢ©å܆ºê棢æè ”÷Õš²ÛÞÀ„íØ߀ëÒÔšåÔ âàè£íÖÖ„ÞÏ»©éãá“ÛÉЦɿÊ|îÙÀò±ª€ëÙäÕäénÙÌÏ|ËÎÍÑä¤fÆÈÏwÞÊÏŠ{ØÇ„šêß±ôÔœµÔÁžœÙ؃‚â矀õ׈ÜÙµ‚ñ碄áðŠšÜÊŸpÝÚÈtÐÒÕqèΩFæ̵rÕæÈjÚÜætêëÖ…¹ÎÖ_¼ßÉcÄØÕzëÒÍs¹ÚÅa¦Â¿¡{Éårê⪾딧ÓÕX­Ûð‡ßÈÆdãÄ¥‘àσ€§Ï¶ƒÙÙ¥uâźrÎÏÓSÓÖ—_ÖÕÅN«¶Â_»Û¨=¬÷©=ìÓ]¥åÏG¡ÑÂF®æãW’ÌË:}¯±+²­¼9€Ç¯dFÕënÛÆYf¹àX_¯Í„Y¾¼ˆ>§ÈuSÀ¼¹K¦·ˆ,¦Î@´Ë˜+º°ªTºµ¡<}×’N}Û™Nf¨§UR ­FS ˆA4 Ç;7³×aB¯ºW_¯š[[¯¼]T¿¬4BÐÀ3BÀËW4‘éxJ’ÒnJ¯¿cRÌÊI§Ñ;±ÂxJ­É{+¿É­#Åâ‘mÚÑ-¨¿œ²äªº÷™LÕÕ’-Äèº9Âë­*¯Ó¾5¶ÔÏ8›¿Ð!–ű?ÍÝ=ß½F~ÅÇ@[ܤOGÁ´@SÖÍA0Ä·iTÕ§'AÁÄQ9‹Ý^O£ãRhÉìrKÔäš'ÐÑ‚:yÜV$·½Y06£H6g؈ÒÐo4ÌËŸ!L¹=:Ì–)X¸GŽî­/ÂÐñiªïªÕÏ,^èÁ:€Û´4®ß¿Q ÛñRÚÏvxÞÉ;ÕÓ)3ÜëU€ÛÜL}ä×DžïΫìâÓBçä^HâÛÀIÚæÜ,ãÛÜcæÜ’?ÙæÕŒÆíó‹äçð¯×þßÐàìç¹åýûÙÎëø¹ÙïïlÚíž|áç­ÊÿçÐÎòåÚµêëå®æðÒªçìÖräßîdÍãÚ`ÊáÞ\ÅâÛ|eÚÞ››åÉp•ÝÆ6˜ÔëhvøãoOÚä|aÝô´CÚè¬Fçö¦hãÚ¦YßÐÞOÃæßc¤æÙZËáÆP¢ãÐJ¯íÖK¶íÌc¥Þê—“øß_êÄK¹ã·I›ÛÓ^†ëÕoŠæá‚šÝÔ“|äÕƒpìÑ¢mÛå^×ô¶EãæÈKïåªlâÙªhêãÏTíÕàAÛäÀFèÝêFäèæDÁàÇGÞîÁ2ÌáøHÝéðbµæ݆Þæã`µ×»W´ñð:Ëðð^©æמlòê£tæ㈈ÔòœàÙ¨GÙÓ›6ÙÜ•fÅÕÄ/Öã¬NÓåœHèäÃeÚáßyÓݱGËÓÌRæâ»PÈìÃeÊßâVàèÄXÜÐÈ—‡ßêŠÅÖ¾BËôËd±àÐL¨Öíx‹ÙÎUåé½…ÎÐ[xú×¢’òÂJÒÔ_àÙ—JÊÖÔhXÃâŽpÅÒ¦^èñ€QãäœnØÒ³r°áÆ:Çʺb¸í…IÍå…BµÒº‰ÄÜùž—ßÉu½ÚØzuÅÍ1¦ÉÉÁÚ®(Y×·\å×qLƳ\‰ÎÃs>×Éy/Ø͇^×̆C·Ì¡=yÀ¬6¨Õ~MàŸNaº¿1mÀ·P<±P*ÎÀU[Å›E]Ʋ9AµŸS\˜¡m7–¬VV¿À\TŸÆmP£¥h,ªÕ^+Ž·~GpÒ—kl¸†HŸÀhX—¹“HnÁŠ(ZߤY‹¾‰8®Ò¡'׸bÛÕp{ÄËvJ·¹\ÉÌä®ÂÌ—¦Ê¹ò¨Ý·ï²Ðз^¸Ä¯Œ×ľE¹Ÿº`dÞ“fc·Ñ£š¯¸[­Ò§b]DzhU®Ôyt¶©y5§¾_J ŸNE–DZ{ T„­q²Ñ ›¸×¨‰m†¤c[„«•VO°saf«|orcµx^Ê°’GK·‘P£rZ‚©Ï}x´ÁN¾ÄÓ}i¯¡ZS‚®q|§³\^½Æ†ƒ½¾™ßȲ¨³›r¿©t«²Ÿ†ˆ¾§³½¬ÕÈ»˜‘¼•š¿è¦ô½Ì¿Òêó¸Þ±Ï£è¨á¤­¯é¨ëÝöÞôÎêæú×êùå¶ÞãàÅÓñå¼î仪ïêî·áÞÔÿòðáóóãñÔÑìÚâÐøÛûêñÒøõôÒúûõÒóÈÿËåÅÔÓçÀïÊÚÒÊ«žßã­ÎѤżؗ¼ßÂœ£Ð͵šæº¢ÏÇЃéɲ„çÀ¸—åÇÀ£ÖÅÞ‰ØåèŽÇÚÖ|êÅ×çÇÖËv×ÎÆ•ÇÜѪ¦ÆОÑÔä…ÃÈÇ}¹Õ¿±ÌÇ«½ÚѾØѳªÜÒ¦’ëÆDZÆã§áÚÝ’øÚÝ‚ùѼ¤èÔªîÉÕ‘ùÌåããÂŽçÊÛ„Ô¿é‰ÉÌÅgáÁµtâÒÕƒÆÞÛ†ÀÚãÃÔÔ䈾Õ؇ԹÞ{ÞÖæ~ÁàέŠíÖŸšðÞŽ«Òט¥äή۳”ƒá狉ÝÔ¸ræô™eëïÂkÿζ‘ïØò³ëÖÃjÒËÁjõæ¬äêàxÝØìuÝɬYëâÞ éßwªÇÔuÔÞ¾k»ÞÃlºÜÎ…œ¦Ö†¤àÔ®“×Øœq¦Ü—ŒìÒj†ÍÒ±‹ÞÒ»ŒÔÑ™–ÄÌ—{½Ø’s¶Ø¾q¶Ý±x°ã­nÚë¯Ož×ÇG±ô«Q¨Î›:åÃÀM­ç²NšÇåy˜å¯6‘Ü×u‘ÖÏF|û²E²ÜÎiLÃÚ_SÖøZ_ÞÜ9Z̲…)ÅÒ“WÕ¿š~ÒÄ,ªÀÍ5ÃÄÆ5¿×“C»Ú€@d²”G…ͧR2»”:e¿šM2Á’PB´GA»§cI§¿KU„¼cCºµJ4¼ØA=¼«hCŸ³:>ÏÄG!wÉ›3•Æ`K–¹<@®ÔY+ẪTŠ½ŒE°Ûm<Ÿ½¢1Ðܤ3½Û¥cÓ¸ª*ŒÇ½4ªÏâN¶àˆnÚæÀ-µÕÞ7¹Ë’!Èá»7¬àÊA¹Î«<‹Ì€I¢Ý¾0ŠÇÈ+|ÌÃ/då§GGζSMƹ1V»É>'ЭJ7–ÂP%ƒ¶<_½Ð)qæöoGÙД1yêy+ÀÔx5FÛ„/wéx8›¿i8Âߎ+Á¼ƒ#XȽ.»àŠ'^ǽ0:Ç”&¬½°$[Ñ”04ȬAwÑÎfiÖ¡1Fí·2‘×Ç:ÎØ'‹á¸.vÞÀFUÞÞ(Pïî@nàÕ`IÒÙ@<ßæÙƒâà­Âîל?ÖåÑZÆã|TéÞÙ¡íáãyšíå¿óáÚFÕåõp ñèl¹îÔxÖÜÿ‡­ëãÍÔõà»âäç‘·Þ罉øîäÃæñâºÿôãÐìß×IÉÙ×2¦ñÜ>½ðáf|ë磞òÝ“ÐçKŸõ׌\ëÏEcï×±çÚžZÞð½oÝè§LæצTäέ5ÈçÙh©äÙBÌò±5Ìßã[±î½9£ßÃA¾ÚÞgmèç]¥ðÅe¦Û·(²Úç”rþ¼YäÒ©}åÞB{ÖÞ§rÓÛ†oÿá•çä·;íçÚIßê±lìꦓÚåÜzáè×Fèá²cÐçÅLÔáÃ0ÝÚÓ[ÒÞ¦>Êã¡8Èû¹R¹ßâH¹þt_ÊàØd¯ßä;¹èÙRÛìæ‘yÞ×­†çܦæÙzŠåêyV×Õ›:ÙÚxVÈá½DÖøÊ€Üö®WÛë¥lßØÆTÄõ»LÇ×¼\Èã¯Våç -Õ׸2ÅìÞYÙçÄcÕÙ?›æÉG¶æÀUßãÞr«îƘ¢ÔÕG„Ý×ÒäŠzËóvyÊØŸnõäLØדRÙìŸQÈÞ‡‚ÒÚiK×ØdJÖÒuHÛÿ‡qÈѶTÌÚÖT¥á²RÉå´0ÙÍ´qÏÓÌx­Þ´7©ä»e¼ÌᘙÔË€´ÝÒs»ÓËmÀÄÅWzÚÐ^…ÔàIyIJtDÁÊoLßˈJËÎw-ÂÀÁ4µÄ·4½Ì­Ͷw8f›,b¾ž.V͸;\§²6>ËÆM6Ë®J*Ê»HRÓª,O£ÅC4ÁÅVe­§=/ËkW¡ËY:žÆmC´~V}Ðh€È[ÇaGaǨ7qÕ–9ŒÏšaÝË ZÛÀ›RÊÌoèÅ^oÈ´ÏS±¿­Nó½”OÑÈ•oÝǨ`ܹµ\»Å¼mßÄÂW¶ÄÄU\ijYǺ>ÎǯvGºÏ_e± Cf¹HD¢¸[FžÕqSÇ·@p™–HPzµIbœÂ†h˜Æz˜ÖžÇ´Ä´im°®e_uŸ:l^·xam°›L¶žwʤÁP@¶‹bg»´Niº‹|–¼ Pe¹Æ_m¦ŠhÆ»«}}®Àh¥³e€³sª™Î’ҠɲZ¢áÄÖ»Çsº¨ÄŠÏ°ÇÄÕľ×Á̳x·¶±àÀàÜÝ¿¼ÙËkÇ°ä¸çÛí°áÖìö»ÌæÏÅÒÔÖÝðã÷àÕëù÷ÖèôèÂé¾ùÙîåÿæìîöçâÑÍÜúÓðÉúÙöíßõðÿÖíüåÕ÷Ðñåíîå™ãÂԠ̹ҚèÈÞÚíÙÊÍÕÖÒÎĶݚÎÍƶŸäº¶¦Ö¾Â íÉ°˜í¥Î§àñƒöÙ®¦ÞÍÇ‘éÅæžÌÏì‘ÚÕËŒæ½Ù”ÌÏ¿ÌÒ€ÄÅä­²îá™»ÅÖ°ÊÐÕŽêÈ᪦Äܦ½éÙ¯±Å»´íDz—ìÒ™–èá ºààÚäÙë—äÉ©ŸõÖ½›íÔóˆìÛà¢×Õ­ŒÔÓáçÀêªäÊäyúÊŇæÙÓìÒå’ÔÃÜ}ÊÖÖµîÑÄ…ÏÆæÉâ܌ݺќŒÝͲšïÛ“ºÚÐ|­åÙ§‡êÏŸq÷Ù }⺶sêǬ…èܬé㚟ê鯃âÙÉqçÓÛ‹âß¡›âËÂ~ýɪ€ÜÒÍqóØ¿‚³ê±°ÅÏnÈêÂ^ÇÀò—©äÍ|²ßÒ¥äæ„œÜ锇çÑ©ðᥛéÝ‘áܱláÓ¾wÛ³šÜ϶~êÌšÒͱvÊËÞg³¥”SÉÍÙM×ÇU³ÙÁNäÍ¡N¿×Ì<£ÁÈF½ÐS‘»ã³µ²G©ì‹9ͬ}kÈÍ’7˜èŸM‡Å£L~ǪU;ØQv¹¤HZÄ\\³¦M]“¥un®¤GOª«T\¡¦AM¥Ð\7¦Öc2Ëp2´ä‰4­­\P²ÐHH¬È”9ÑćXÕÇ‚XÄÅ;´‰4Íìª,æà—(ÉÞ…2«ÆŠ$ÀèŸ6ðó“4ºà±AÁﯻ߿=Ëã¢9¤Õ¥X‘ϾI³ÖˆK³ÁÂo…ÓÜ@Sʤ;RªB/ŸµS-¼ÇM(Þ¶LT¤ÈZ>¤›=<Åça,¾«-;ÑÒŒÄÐf*©\-ÛD0|Ï—=nä†1ÇÕ€-ÕÒ{só»9<É¢9×’$TÌš+”´`{¼¬Ää¹2|Ͼ/’í§N¡í­3ªØ¹epÙêZsßê”ÝâË@ˆäß-oæÈ6oøÖr‘ÝÜM_áèÓ4äð«HýéÓ8ÓáåõæÎbÚáÓ¬ÝîÝpwþßk¾ìæ¹ðþ÷àìù׿Îäí–ÛîìÍéñøïýçì¿›Õõ»âéêÈÓâïæºíÿؼçãßèáî¼òìÿ•½åÚL¸øß^®çЭÅúØ‚‰Üµ;½ì¥8†Ñã§MÔå¶jáà¬pÖà»NÏàÃ]ÑÙ±Låê¼J¿úäm­ìêf±ðÎVÓõßW§þàD¯íâz­à´;¤êÓh~ôçZªáÀM´×»M…×ÂaéÛ°^íÔ€ŒéÞ‡SÏÛ”Pàä”|æÞŽfçòáJåìÅPØíÕwèÞÀNßáå<Îâ¼5ÉäÉIÏÛÄ=ÄîÞAÜâß?Ýè¸GÓèâTÂêá;³ãÄJÁóÒJ´íõ^ÁÞäbÎôáLžéëªUêÀÀ|îÖ„óÞŽtÄè“9éÞ©FÜ׳/òçÈC×èÜ\ÕĽnç×¾‚ÒëÅSÉÖìTÂ×ÖáÓä>ÑëÞNÂàÏIÄäÒH¿ÏÜ”›×ÉE¤ÑøbÑì¾T¥ÙÕx­äë“–ÖꨂÞÚ_RÙ̯yØ쟊ÌáHyÅå«uÎëš@Ñ内ÙÝ‘CÜó„CÃÖ•6¸àtAíãx7ÈÓ¿a¢äÀg¯Ü»`ÑЫjÞεs«ÛÜ3·ê´/ÉÀß[¸ÖÚ‚¬ÓÆmÊÃû”ÈÉÇjŒÞÑEC²ÏK_ϳ<:ÍÉŠWåΊ5èÊ„,»Ã¡(ʾ½¬ß›*“¾™.¶Î´3FÇÉ0Sϼ9*àŒ):¹»PVÉÕ<:ÊÆ*,˺@@¬ÒzG°Î\@·¹7eÅàlLŒªYV‘­u]®¿`Ut½¶K’¿•;ŒËŽ\’Ý%gФ]|ϸ=…Þ|W¬º­0‰ËŸ^ÔÐÄV駤F|¾À5‘ÀÊ¡éÂ؛ȷÁ‚ÔºÁ?¼¾D”»¹J}¯ºk¶²LÀµ½Jj»Æ_y­Û‚¯Ã¸sT¥³[/É­ph·”SZ®VNºÄjd‰Ë˜4t©‰‹¿®t`ÉÓ¸Ô·©qbÇ\dk®†bJ²Åtª²…ci¥ˆS¶»ªY.³ÆŽÄ¥‰c[º¬…z§‘x^»ÂnzƶL–¢Ën…¬¬‚`¶¹{´¸ÑªáµÅƒ|ªÃ`¤¿¼‹Òì⌊”¶Â̲¼ur¨¸Í¿ԧf“²ÏÁاϻΒ߷êÀý·ëÐÿ¨ó¼äÂéµ×¹ãÏɳîàîÉêÝòº×ÿ×ÔèÆàÓÒÛøÛíÖò×åêïà×ÝÝáÀåñÒÒßéíëìÚêµØþðÑóìñ¿ìØÿ¯æàïÂÒ¤äÌôÄèÙ×éíÜÍÄÂÃΚçÙÒ™½ÕÀ­¦ÜÓæ¹È×µèËÓî˹“ÚáÒ©ëÁàŸëÖìÆÑÆø±ÔËÔ‰ÏÎé¡ÇÈÔyÇÐÕ¶ÝÅÒ ÒÖØ”¡Ãß‚®ÂåžÜÔÔ…§áÑŒ¯ÔÄÊšÄÉ–¢áΛ’æȶ¢ðа¹áÛ½©íÔð‡áÀņÿÎìºßÎà’ðÀî‹ðÈÙ™ÚÔãïÌÒãÕé—Ü¿ï…â»Á„ȺÕ|ÍÄÛv¸àÊwßÉÔšÐÔëˆÞÕçŒÉÕÜÉÝÓ®uß⟠ÛÛ®Èß éÎÀ’éبŒä̸Š÷Ø»ƒØåïzìæɱÚá²€¾ÊÃvèÞâ€ÙÑÔxè·ï‹ä×ÖzÝËâiÑÖÌfäÙÔ”¥ÓÑnÅÎÜ…ÑÌƈ»Õäu¦½Û§¾È›™ÌàŽ™éì°‘éÓ“žÉÌ•†¡Ëžs»‘£zéâ—››Ä¤kÉÌ©l²Æ®½¸­kËá•kìÒ¯[¤¥ÅMj­Èd²Ï›HÈÚ°GŽÇÕH·Ô¼YœÊÙO¥ÝÇ]™ûÁ2šÓÒBžâÏhÖ˜,Äp-‚ÎPOìÂx.(Øž$±ÙË.†ÑŸ2jç´Cˆì½>µÑ¿*²ÇÍ"Õ·UMÚÕowÏ£-·Û°'WÉÇ2sÚ½C…äÀ<^áÈVTÞØ/SþÁ[wåÝ>/ÑÖ“/ÜßtBîô¨™õî¹LÏÛÉ:ÈÝPÒíÕpºßã:žìÈdÜñêMêÙæêÿ襩õå©Ûãï¥ÕùïÔòï¯iò랇ôñâÒåîßgÂåátöÞÛjéäæS´ùße¯ôàFÀïÚ„˜åÑxìÏ[¢ßÉ@²óÎm]ìÚ˜<ë×SãÚI×ÍÄDÖáÎ?ëó§GâñÁB¾ðÑ3°íÙC¹éÇ:ÈàÙM³ýÖPœðÕ1¦ïÌe‹åðJ˜ÚÙ1“ãÒQÊÔÖq}áÕu{Óàeáâ}Íв_Ôõ£‰ìé””ßá˜SêæÖ?ÊëÊHðæ—YÚïÞLÖðÔ6ðæÑ+ßÔÍXÁå×SÁùÔBÔçÇLËì©?»åÑL¹éÜ‚¾äÔ<¹íØZºèê^»ñÁSÇÛÝvhÙè‚fèÐ…vðå=„ÜÕ¸NíæÃxíû\Ûú¯(ÚÕ»Pçã´SÇÑ^nÈã˜NÐìÂR½éÜ{êåºRÓç¸UÎõÖOãáÔQÔíÚušìÒz£àèp·ëãaÑØÌ_£áÔT©ÏÛ\hÒåooáßn\âÛ¤dÖàrpÛÓ<>ã܉âì¤UæèBBÔÝ‚)ßÒe8ÃÛ{&ÕÞUßãŸDØâÌ,­ÛÅ0®äÍ7äߥfݼ $ÄÜÞŒ¾Ô¸OÂßÙ‘ªÉÔ‡¥ÓÍK¥ÚЗ¾ÅÊP~äÏdÁ¦FkÇÔcláÕ_Ñ͈4ÆÝz5×ÇÄ/´¸¿(®Ò—'ŽÜœÁ¥H¼´7NÍ°Ig¥ž.6üA¾¸K"رL:·ÅPL“¶\P•ºj=¨Œ>E–ºYOœâeF¥¶N6ŒÚŠ^QÔ„H”Èu[ˆ·dD{àœ6ŠÆ <ÕÐŽ6§â™[ÕÇmÌÕþʇ…ÕÃÊUÅ˹XéÔÎäÌõ Ð×Ó~Ì¿ç¯ÃÅê¼âÐÕŠÔѶ`ÎÊçÅÁɹAÑ°ÙoG´¹U–°nG§˜Vi£¯V]  M)¸–Y>›¹†gœÐhiˆžyhª²bnÌ»§f|Ä\_PÈvjq¸ŒUkÍ®_`º£]o±•C7±nCs³×rh¿ÁuhÉ‹hY¾À†T²ÕUZ²µ˜ªÅ¹ºÑÈãÕ¸–r´œºa®¬³€ÈÀÄn«×“­®²§œÂ¹âÆε·ÈÇÀһǡè¶Ò¹Þ¯Ç«ùÌçÝà¸Í¬Ü ë¯ãÅÄ´âàòÌøÊÜ´à´ïŸÜÇðÚÿ·úÙìØÄÝöëéèöÙØÜøËÜþåòÁéÎèÏðÒøãäîåËóÞúÄô÷çÁôÍï¥åÃïÁËÍâºá²àºéîÜãÈ«ºÑ˽Ӹ̘ÃÆÜ©šåË–µðÍÚ°ë³³ŸõÊÝ¢öÓ´žÜÍ¢³ëÅͩߧٛäÅԜ̽ýží¸Ý¦ÏÈǘÏÕÓ”ÖÐá¡®Ï퓬ÁશÕõ›àÀÛ”£æÀ¢¬ÔϯªÒ×–ªîÔ­¬ñ˳¼ñ׉²íÑ©†ÿÏë‚ãÈàŽÿɪ”õÐÖwëÍÛ¢øÇëœíËè’ÙÊâšãÈÉ“ð·Í~×ÑƆáÐÜ“áÆè¬ÞÏâ‹ùÎÙ™éÒÞ†ÔÔÕ‚á´°ŽžèÔœ“ã̵µôÝ¢©÷Õ¿˜èŸÜѨ…ßƪ†áÙÆ”à碉Äæs–ÚÓ¸yåæ·gíÏÈŠÔß¹zßÜÖ‘ÖÄÎræÎäwèâÉz¶ÏÕ—¹ÔÞ¿Éô‚×Ïàƒ£Û΄ÂâàœªâϧŠø϶–ïÚ¥‡öÛx·Äœ¡ÒɾXÕ²«~àÆž…êÔÃyÇÁ¤i–æуòÜÃM»Ë²TÂËÔ?¬¹ÎS·ØæTÅϧHÅÌÂM°äÈDš÷ÎP¤éÂ?zåÞYàÓLŽÂ³GŽ®Ýb^Ëæ{{¤¿]`ÆÒr]ÆÊŽR¾¾zMÑ΃KÖ¸µ:­¶ÀIÇÇ•c³¶Œ?¸œ9†ß«H}ߦ*‡Ð¥@qÌ¥J@’´>;áƒ0CʾHY¦ÑR2‹´oT £TU§ÍbW³×qU¬fY—ætI‡áJÐã^RªËR:¤Ò–.ξs@ÃË°,ÔÂ’7»É¬0ÆК9Ëèq9ÆéÄ7¨ÇÊ%¾ÖºH×çÓP³å­<­ÝëN¿äÊ$±Ìº;ŸÛÂ4ºíèš¼Ô¢.¶íÅ>}ÌÊM³Ëe^ÙË=gÀíJFÂÀBDУ7AÈÕZ/¢ÄR:w¶YsÇÞXNÜÄ{)`ßz(žÜ]'³Ùw6>®['iÞ‡ {Þx!báœ,yܶZS׳/ɧ-—Ñ­)m°¿RkѨ"ŸÒ×Uoܹ…¿É(±Ä¼'˜ÌÔGméºDZî×=wÐÂ:CÚÓ¢XçÊ?~ÝÔg|Ôë’5áÜÓ‚ßò |îðÎSÝÛ£aßÞÛcÊòåŸÕè騽ÊðZ¶äãláïÜyñßßx¡âð·áïã~oêúŠºèð¢_ÓïªzêìóïöòËšÚ÷ìôÞÝuóéÂnàîÞ‚ÇõåsÍêÚm»î⯨á曎×ÚW¨ñÌOÝè¦v÷Ý®PÚìº[Ñé·VËéÔSØÜÆväè•TÑå´5ªìïT›è®,ÒèÙuÆò×XÁßßx¡ãÚZ—éÖy„ÞÕ‚”äÈT¼çÈZœàñ™oêÏ›oï·™ãÔŠYíì§cåëœoîàŒlíãÏPÍä½:ýݨëá»DØÚåMÍÛßðÚÚ9ãØÄOÑíäWÁ×Í9ÌÚÎ>½ááQ½âäT±ðçPÓÜìX¯éçJ·ÙÚWÉÝãa›àï£KêÕ føÞy|ôç¥`ÙçÀ>ãÝÃJßà­BÑßÅ)áÞ±QÌÜÏV÷¸‹JÔâÏxØáï]ºæ¤bÒáéQ¶ÖÎCÉàÓNÏäËQÍÑÙ`—ÙÚ^½ß»AÉà↢Ýô—žíÝ‹çÇŒ{ÜßštäãáÖ”‹ÐäGjÎëŸÙת:Çé¤hðñ˜@àño;ÏÚ}LÓó–QäÓzSæÖ¯R”ÛÊ3¹â®=Øׇjê͹n¸Õ±P¹ìÔrÇÑÝt•Ò×­ÔÓ}¸Ó¸?ÒÉJ‰ßºWiÌÏJ4«Ø5ŒÓ·qCξ€!ÒÓ“=ÙÑ™*m¸Á*~Õ¼1ŽÚ˜<ÐÐÈHKÕË1dÓ¸Ocи@9ªÔXÇà?A§šA<»Åb4†¾nHŽ°nB£ÇFM¼Í]a¤£E[¡µ_D¶ÚpCWÊD~»°m‰É‚S—Ë‘aeÌRYÛ±0ÁÒT ¾±–ßÊ›iÜÊqμ«dÔÕÆYÚ®§eÞÊÔïÎߘʿËàÙà›åǶN®ÃȖέծãÏ·ƒØÊÅkd¡ßO] ²Fu³Åjf¡Ë_ªÑÌ}l¬³kS¶knzÐic¢À[`¿y²ÎÌ°c†·crsªpi´—SUÅqLP£j[i´~]y¥VSŽ¶ª|iªÉŸ´Ÿz|§Æ`W¨Ä‚] Âm“ºÀz±É¹¡À§¹zi½»qÌ¥À„Ï»Ëpu°§•Ãªž¡É®·ÑºÐ¦’»¶b§¹Íâ·ÀªÛÊëáÓ¼±ÂÓ»ð˜ÚÁÔÖкðíÿ¾üÝøÔëÚÉlåÚàáä¸ØÁÌÛðêÿÚûÒÔËøÍïÙªÏóÔÿùÍç¯ÀÙôÖ÷ùàóîàâÖûéöÛû·õÞúÄêßÿÊÝÊø¼æËô¼ôØïÏãïßÒâáÑÐÙ¥ÊÖ뙸ÃÊ™«Þµ·§íÎç¨êÕÉŒàÖÉ„ÙÝå×ðÇ·œí·½—ÚÎìšÐÛà‘æÔóÐúÓޘٸٯÆÐú¶ÍßÈ­§çêãÇÐéÆÆÌ‚±ÞæÌ­ôIJŒæã°²ãÞ¿°ùÕÉ©Ú»¬±øו’öÈîÑéÜÕuýØš¡õÜÜ…è¼ñåÇçŒâÎé{ä»Ê€Ö¿Û‘ܽòœÜ¾õ‰áÙñ‘ßÓðœ³Äì|îÍò¥àÚå†èÛì›ØÈà˜Òâݤœðá¹ÕÍ׫žÇìºzúÉìšæ¾ÐŸÍص‰èà·näÐÆ|ñ×ÂhüÌ•uçÜÕßÏÍwÚçÛ–ç×ì„áßÿ¢èÒÌn¼ÆÐeÙÓÒ¸ÒÜzÏî݊ӷ滬¾ã¨©ÕÝŸµïÈ’›×Þž”ÖËŽ Û̉ŽèÓotíñƒrÌÌ®~éÞ¥z½æ¤fÑÕ¢rÉÓ¶—ÙؾçÝždÔȨDˆ½ÏAµÏ´AµØ˜UÊÞº?›ÝÉC¡Î×B¡å«-˜ÅÍRwÔÕ=…¾ÔH¸ãÏOZ»ÛeLÊätNÈÁZUÇè†)Ë»s@¬É1ÒÉ›LÒ®+iÔx6«ÊsMØ¡¨7n¸ÃWmƵDb£–7©œI+µ–0/Ø­DBÊÅT;Ä[<ž¶tF‘¸C*ª×dT¤°?\žURŸ¬lFOàfg©‘B…É_2™ÔŠ\Oëw;˜Ë™(ÈáwO×ß±.Äè6ÔºœJÏÅ—2²ÛË@ªå­3ÈÜ¢+ÅèÍ>¬Ý¯-±Ð¾!°ÕÁ5Þ«L¡ÏÆ,¡â&§ÇÇ4VÀ¨5F°³@{ÓÏ2.ÁÄ1`ÙÆ4&ÑÂ;$·Ü5f…Î+D£ÄH(ÁßChùm6~ÛO0¯æ\@³Øt7YÞp1}Ó€UcÙm(†Ì`8›ã°\]Ô°2jäCNÚ« G¤½MOáÀ#®Â®*œÔÍ1vÜÄ>‡ÐÆ0¶ÍÃ,ƒÚÕUpÕÙA…éÁ@xÎ݆mÖÜ8hÁÖ1’àÉ­ŒÙ÷ž:Øêµ=ìë¯U×íuLÚèhoëàÌ1ÖðØxèèÁK¬ÿÒP´ð¯VöâëÊãîÞ‰Çßä‚ÆæñÖùÛ´eêê¨ìë×ÜùôÕÎíáéÄæåëeñï×JÓôá|åìäzØöãXÅíØpvúòy†ñàt¡åÒ\³ãÏH\ÞâŒ[ñÄ•VåצRÐܾCêä¿KÌï«hêÉ¡D·æà^±ÓÌIºÛµIÈÓÝeµÝ±Q±èÌX¼ãÛjÖÜrëÛt¥äØH¼Öâ‘^óÏhdÙÞ¦ëÖl…îê•mØÑ}kØ혛àð³JÉàÖ@Öæ± ã×±jääÀBÜä¸DáíÅGÜäÚWÎîÀB¿ãÆBÏé¹>ÖÔÛTÅíÐRÀÚáKÒÛÖSÎäðU·îßM·òìcÑàÙˆ‡ÚÓÆZÙ䞃òß_‰÷ÏÅXëáÈXõß…jàÖÏcÌôØFàè×DêⳊÈê¿YØí£JÕÝÑ9àïŸOàá÷[¼å°CÑßž3äߨZŸßÛ|ÀôÆZÁÛìDÈ÷ÉLŸÙÐR­Ïõ„”àÔ¶mÔö^ëÓjtÞ°…|óߤsÛëv%Êâ©HÃò]OÑÝš>ÞçŠ7ÕÙ PÑüÛYæÝÄrÌȹ8³Ì‚½Õ܉ËÛÏkÎÍÚŒ¾Í¹B¾ØÛvÇÓÆq§ÌÒUÁÖ½1¢ãà“·Ä´ZŽ¿ÒššçÄS‘Ë¢r|èÃt\ß΀tÛ¾AÔÐÀ<º±¤RFÓ©A¾Ë¬D`ĺ3^̺;RË´I]¤µ:B¯Æ)G«·DbÊšCWÂÍB=”£P7®Ä=`ž¨\{©¬`Z¥ÛhK§ÆGH§¿ƒaj°sGoÓ{2‚¿DK{²Ža‰ÀŽOšÍ‰jæÄ´™æƱŽá¿¥ZÌ»‰¨íйOÃÅ¿]ï·Ñ£ÝÁΪإ¿qæËÍ–ÅÂà¢ÜµÅ_N¶¹eÒ«ß´Í©º?Ê°«k[£Áhn¼ÃEÁÁ¨pw§Áw…£…dd–ŸI’µ•Hq|‘@dŽ¡c‚“Áv|‰µZzt½˜f‡¯¢wŠ¹bh_Ép¡’}yw¤bqj±•…rª ‹dµžl®mdœ¡ˆ{§§oÀ¶´rq¨½~{¬by¥Á´Ô³·w¸¬®¸e§Äy¨»Ã®Ì ¿œ½’kȼ¨‰Á¿ÇŸ©ÃÍÙ϶¯ã±ñ“æÆÒ–ò½ÃÓÙ»»ËøÉëœä¬ñÛðÕøÕåÒâ£ÐàÜ¿óîöëñÙÐæáîöÐòÕôÐÿÎêÛÖãåéãééÝïæÙñÞïÔéãùÑòçùÓç›íÌêãóÐêàíÒïÎÿÐíµ´ëÒ¼ÉÎÈ¢®·ÕÁÌÕ›µÛØ°¦ÍÍ©Ÿã梯ÒÖ¼—ëÕËðÒ¯°ËÍvàÇÙ˜ÓÄãŠßÄÅ•ÛËÌŒÑÛņ­Òê—ÕÝåÓ¨âܤ¤ÞØ«ÂÞÙmÚÓ×£©Ü” Þщ¼ÐÔŠ„ìã¤èΞ­áןßØÎwíÚ¾nê̬†ãð¸£ôÔ¸¢ëã¶{ÝÉÀ‰éÍûÄûåÕqéо¨ÞÕ¨¢Ø¾ÞuÔáÞvÖåè×ÏáfçÌòËÝÝwÂçñÚÙá–áèÕ’ðÖ¨sÜÉ£æÒ±˜îæ͇뾣oîÚ¼{ëÚ´qæÝ®Oè݃ðׯeÓÓËdÚå°iÈä¨néÛü|ãØÌeàá¿kø׺}™ÖÞtëÖÓkÌààtÒÚðy©ËÞPµÉ׎ŸÕᵇÔØ“{ñÑ©‰ÑÐqŸä݉~ÝаlÚÚ»z×Óš‹üÍ·i÷ÒÐf²Ú¯bËåö_Ò‘BÑãÌ7¨À”_­Õ´$µå±6¶¹š6žÌÒ-´¾¹)•³ÑO‚§ÛBÅéJ§éÖj¾ß`SžãjZÆÌfe¿áUM»Â’\ÅÅ^ÏÁ…=ÔÕÌ=¸È¢Srlj@̲nC¼ÆŸ9v¿›T‡Ð¯;“ÀÂ2}Ì¡Ai··7JÊ”0E£½NBžÅ4a®¤3-¾½WYž¶D7¸ÒDEµID¶çj)…Ïm4®Îi@¥¿Q@ŸÖ† µÉ—'¾Æ^@ÄæG¸î§RÈÞ¥3¶Ó{WÆÙ©,€éÓ5ÕØ™,ÆÓ‘0Ðá•$ÑÁ¼,´Ñ˜EÉâŸE‡ç¬7§ÅÊ¿è§2·¼ÀXVÜÔIÞÔ=‘è´&OÂÐOEÒ˜GS½±ZÓ¢%?‡–+-®²:IJCD²äh?»¢Z)¬çs&ðN+…ÛY!’æm,ÒQ-wÑ…;TÖ¸[aË :„ÒƒJà¯5‚͎DŽË©@7°º>[ÃÑ=¥Ø¢2–Êßy>»Ó. àÀU~×ÍRA»À5‰ÙÓ,aÑëufÊí°fÑþà,ååÆEáï£HÊôÁKßü»XÞÔ±ÓÛé¡Øôä`³ïé«Ìñôÿòî݆¾àûïÜßø„äìå˜Æðí´ÎóßÀÏæø¡ÈáêÛåøè‚çóßuÿÞ×bµïà†ÍÛÌeÀð×cÊëì½¥êë—¡àÔAÀï¶H‚ßÓœŽ×Ú‰wÓܲQÑàºWèܱ[Ùõ½XÏÞ¥nÞíÉIªâÀPÁáÏWÃç¾g¤åØ]ÀíÎ`¨ýåV˜ôïœ}øÒqŽâÛP°ü×Q¥ÚÛ¡ŽâÙ¡ióÖœ°éåª]ñ櫉çßž ÔÙ•|ÜûÜQåðÉ4Îë°_íÚÁiíÖ½ƒÐÕÏ@ËÛÏ-ÆâÎgèæ×@ÅÚÄ<ÜãÂ7¹èâQÉëñ~¾ñËhÍëçS¸àßY­äê_¤ôèT¢Õסhøá¤sá秜âЛÅæÊdãß­VÎÕ·ZÌÞÐ^ÙãÀ3ÙéÈXéîÕ|ÒÜÒ\ÕØæG¿ãÙjÁÝê\ÃàüQáÂ×NÏó¤aÖï͉¸ÞÐ@£ùär¼ÙቬÏñŒ¬Ï홉ÒÕl–ÎévxØÅ®§ÈÞm›Ðà~|Ìà_ÙÛàƒÞâxØáÄgßç¿JÎÏ…Ï×Sùä›UÉéär¸ÜÑ/žÜ½>ÅÄ­pÊδ+KͧEÒÅÞY¤½©.¸Æ­6œÐÌ€ÈÆÆ|ÆÑÀLÚ̓yËÀ^Œ¼¼J‡ÞÅt?п…:ÇÂ?Éá¶.·Ñ¨ ‹É 2™Ï8Ñ™@=ÚÏ2sã»QV½Æ@YÁÙf7´º/I¦›H1ÉšGP‡ßmRmÚF®®[VšÈmV™°fc“²8;£´ŽWbÓ–TlÏ¡sy³kjƒ¶’G`¹“2xÆ”.‘ÑŽÕ¿¥vËÇ­[ʹ¢ƒÔÁ¯ŽÚÁÄTÒ¯á’å¼´uÝ«±kÊ»·Qº²¦W…»´dl¹ÊT¯É]ÓµÂbVÀºWvœ‰o¸ÈɛӦá©q¹Â€l—œtJšŽ:a«È_uºh=…£eQ“’JM‹¦{g€ª¿@^¼¶j`²ul]ºn‹{vp¬pWi™xsf±›{m£¯Wš¡¬j¨Â®Xd§·q}±Âqg¶¿wš¡zd®h‘£wjƒ™Êuœ®™wѨ¯Ãˆs–²²¬¨©Ï¢¤½~ʘ¬äÁθò½Þ¦ó¿ð¨Í»è˜ç°æö·×˜æÓÙÙèµôçëÀë·Øàâ›ÔúðþãÓøáÿÃìûàêïéûÓÑàåâÇçæóåÜçæèÝ÷ôñûÇýÛÿÓúÙîÔÿÂó¯ôØôÇÿÎè²ÑÌÿ¾ìÜòçÒéáºÁÀÓˆ¿ÄÜ”¬èÁ°«áئ”ÛÔ¼–Û³·“ëͶå¾Æ¡â ²ÝÂË–ÙÏܘßÍâŒàÌÆœÆÊÒ‹ÛÊÙœ¼Ñ放ÌÙêèÇ—·Î݈ÓÜØ„²ØÖ”–áÍÀœëÉ«²Üç»—æЬçшèᥘââ×åÄ߃éáéµùП‚çÓ½°ædz}ãàÂcðÏÊ€ìÆɆÒàú~æÔãxËÔÕnãÜå›ÈÛÍŽÝÓÞ„¿Ôë…ÁÖðŽÏåèwÇÛÁ©†Ú½½ïë¡´ëìÌÒðÉwïç£rÙæÐißàÚuèЪsäå·’ôå²¹çÎÞƒÞÈÞ|åÉÇ_ßâó¥Ñçî~àÏÈ\Ýâ§ØÖ釒°Ån¾î×p×ñÔm°ÜÌmØЛ—ìßb”Çû‹™äÒ‚ˆÕóµ€ï⇆æߨkóÔµsßæ†_Æغ]²¸´\ÐθaÌÝ›kàð©i·»¿J’ÑðG—Ç·6Áè˜;Çç¬9 ÝÊB¦ÕÛO¤ÜÎ0’ÒÎEŒÞÏFÆÅA“•×GeÜã|VÈØQjµÕER¾Æ•J²¯4Ù¹…8·Å¢R¯Ý¤J´¾®EÑÁsb‰Ò£cº£O’Ý¥1\´Ž=gɬBKµ²Hh»•>ߘ3<çN;¦Ç,F˶P`¾ÙP:¹â]B§Ç?Kº±T5`¸”*–Ñp-”°eSÇÅr.±Ñ‰6¿ÁV±ÿ<ÉÜ›-¹é±,ÑÜf'ÃÞˆ1ÃåÏ%´áÎÈó…)·½œ+Îà«%ÎÙ¬ ¸¾ÍG”åÂ;©ÚÄ%®Ô·z¢â±?{ë®oÔÆšÏÊN- )U©°UB£¿<_³·_;«WR›°\>Žã*Q¸ÉH1rºf:\ãx?‹Ýp7>¨q-mäu<„Ò55Íy.@Ø 9;§À -žã–—á $“ç¥F¤ÞÊD?ѹ>¢ãÂU@¾¶4qí·^²È«6kÕÅ#âãPdËÚA_ÌÜ[äÈ‚7ñæ0ˆëѤ>ÁßÃ?ÓéÔRÉÚˆ=âèÔQêçÆKÛôÚ‹ðÞÏG®ðÜfÈÿç£ÅÜí¿èåØi’ãè„ÄöëÓÂãèš|éóÈyÿäÒÚôêÆÎôãÛ®âñ߉ð÷ÝoÎÿÁ^ÔÞÍ>Ëââ^¿ìãçææ”äÛ¤¤àÞhŽé¥;Áëè}Hèë|^íãtYÒÞ¬5åìÊHÂä¸=ÞûŸJßã»A¯æâe»îêMÐáËSÊÝßr¨æåq»å¾>«âÙYlíã{ƒêök•éÝ1²ßÑ\†Ìé‘]à÷ž¹èÒ{†âý»–ëá‡ßÔ¢’èÜ°DÒçÕCÞóÂ^áã¡]åØÇ@Ïò»<¿ÖãNÆáÃB½éÛY¹ðë>ðáÙ2æÕÍC²ìàPµèÖR¾ÞáHÏëçnÃðÚ^·ïÕFÓèÖmVÓó§kãý{éÈ—ŽÃÖ’[ïÛÀÒîVÒèÌWÒؽJÇÝÓJïíÀ|ìéËXÆéÝdÊÞÍ@ÐØáXÒîå6ÎÓ¿KÅáæNÛã¶A¡ãÃ: çífÄêÂJÉÑ놑ÜÞŸÔà€âàvÏÝ€yàìuwÞÞ¬€ã߸mæÓØPàÕgÏÌšuàÛ–:ââ½[Ãê{3ØëÈ‘ºÏ¨6ÍÛÉ`·Úš\«ð¹aÔÚÆeÏØÀ_´Å¿x±ÈÚ¢ÅÃ܆®Ì਷¹¶IÁÓ»´ÏÞ‘’ÆÖWf×Ã`ZÌ¿nPÛÕ\7Ú͆+­Ïc<Ò;;zÓ›=˾­(ŸÆŠ/ŒÄÄ=YÀ·2Eο:H¤±0jÁ¼^`·¥<8¾©C;§ÔWF–Ìc^›²c_ ÏsQ—ÍeR¬ÊQ<ÄE-~Ï‚TYà”aŘqqÎlVrϹHkͤB¾ÉŠÑ¹à›¿»ŽbáärÍÇ•‹ÎÀΆ¿½¤pà­£Ú¶}-œ¹ß†ö¾Ë»Ëª©•ß¼ÓMXºÎUд«`ŪÄcjÁÂf?”¿ˆË¶ÜµT™“8B’°Yd’¯XH¶Ãnf¹¦ˆ`Ž§_Rr-SŠÇrRr¿igg°I}i´€‚Ã…SŠšH{b¦rg^_V¡’~c£ˆA·²Ôe€´Çv à‚¥·Ð‡d©zÁºêʪ·šugŸÕÎË©Ù§À­«½­É«©®ˆrҭʺ»Ê§ÆÀɭ᪶¯ÚÏÔ­ú¶é•à¸ì¶ä¸À¯à®ï¿ùÃÙªÏÞô¿üÖÿáØÿÊì¸ÓçïêýÖõÅë³ÉêþØõÔéÚÉÕûòÊïÑñêÙÍáîêàÜôÞÛïÑòñÿÞÿÞôœä¶ôÑæâê…öÌìÐðÌöÝù¾õ×áìàéáÔÔ©­¸¼–·ªæ˜‹å˨™åħ¢äÚŸ¢Ü³Á”û̯†íÕךõÂÚ¢ÇÁá¬ÀÃéæÃÛ‰ã±ÚÃÇÅè˜ÅÁ׺ñÇɲÉûϬ²ÔÒ§°ÇÚ}ÖÍò ±Ì溔êÑžÅÈÉž£êβœêÖˆ”ÛÉ¡õϹzôʹƒë¸ÛŒæÙØ¢âÓ°ƒéÆÄ‘áãÌ•ÚÒÄwÞÖìªæÄÐwåâ¢yîÄÁg×àÐqÓÌÍpÔÇææÅð‘ÁÈÛ…ÁÐÖ_äÙݶžÛåɘÑÜ™ßÞ—¶îÕ»¤ñÑ­‰ÖäŽmóÕÌjê×ÑhÛÉÍzÕè«áÖÅvöêÀjè­Äa÷ÔêqèÉå|ÏòªzäÌÞ_éÐÞ‡¾ãê…°Ñåq·ÑÊfáËÔŽ¸ÝË—‘âÜ ‡æÓ¡~ÿ؈…ÍÉ‹–úÛ‘‡×Ú»vèÇÐ]âÖ­‡Þ×±z¥Ó¿kÝÙÅwÀ¦Éƒ·Ýê]ľF«¹ÄB¢ÉXŽÏÃQæݨAµÕÌI©äÀWŒÞÙ5ƒÅ¿:}×Ñ4éçA©ØåQ”°×vp±ÒqjÁÒ‚`Æ×qaÃÆ“UÄ׋X³ÏqN̦¢LžÞ¥C·¶x=½¥DJÃÏ«KØ¥L~ÔIN¶²DlÕªWd¾”=3 —EB¡ÌXBˆºTD½Y?Ûš`_°Ñ`X¦¿gKŠš8PžÚw4€Ã~9‘°M4´»H3…«•6¯í§!¿¯Š[ÄÖ¥#¤ð˜?àçšXäìxE¿è¹:¢ßº?­ä¦<Þå¢C©ÑÚB«ûÂÂåš0»ÚÓ9`ËÙ4”Ö¦§Ê†2¨Êº;:×ßLsñ¿qD®¨Ii½åOU¯ëSE¶¶6:¼Äl6¿¦0>Šª#?¦º*'yÎA.¼=EUàtJÎÃkW¸N8ÁªÛ³ž,¤Èƒ>ÚÚÄ*¶Ú¸AÉÁ¢$΂:\Ȩ8_³C8âµK`ÍÏ9@ƪ)=µº19ÕÀ0NËÏmKžÞe*ºÄ,B§·C&ª¥FN•Ì^WŠ¯FN‘Ï‘A^ΊglÔ|I›ÙyC’Á©U×ÆŸ0È¿géË¡kÐÁÞŸØОSܽ¦WÍÆ¥b¼¼ÑÅÀȱ—ÙÑã«Å¾ê˜ÕÇðÂÙÂß–âÂÏ|¯Ôµ@Ù¬¾kᤙ\tàLc½²iKª¸bš±¶sDšžk[²È}e«®g]Ÿ²ft³»vV›ÈZj«dls›;l»SI€µul«£¦P=ª`kºªmE©Zl|²˜lZ—ª•Â·¿`^¨ˆNƒ¨Û›¦­Öx¢”a¤²Ìƒ~ȶd¦µÀyi½Ç§Ì¥¹ Õ­À“¾²­|r«³ì°Ç¸Î²Ý©ã¹ÏÌÇÅ·Áƺæ´çÄåÕÛÂÌèå«Ý½ü›ÎÉû¬ìÐû½ñÍù¼ðÛê°ÓÌÜÝå´å¤çæñÖùÞÿßõáòÖçîçæÒìëüêÛòÙ¾ìáËäóÎûÎóÔüÈßØíÁù›ôáû×òÄââð½ã¼æÁÔ í¹¹¼¯ç©Ã«ËÕÁ×·§ÜÓѶ֭ͯн¹°âÀĤíÊè¬ëÞÇ©ç¹¼™Ò°ÉŽ¾ÍÔªÚ¶óµÐ®à¶ÒÕßÑâÉÞÌÒÔãÎÿÉäÁÞ¨µÍâŽèÅȦ©ßÕ™ØÔ¾ªäÏõÐêЮäÀ¡¢ÝÎήÅÅÊåÖÔŒÝѳ곎çÍåùÀóŸé×ç‚Ö·ÖÎøÀ̃íÏòÈõܸ†ÕÇßÛÅäÁ½Õ’ÏØÈ¥ÈÞÌ™ÐÓÑ—¸ÔÞ»ðµ×¬±¦ÅÕ èÙßáϯ‹¹†²’¨Û­ƒüâÖÕåÙºˆâßÀäÓÑ‚ðã³…òÍÂtÉç²–ÑèÄŠãÜІßÏä¥è¸Æ…ÏîØqÝÔЊ§ð½¯±ÚÜ“ºÐÕxÊÏч›Ûá¥Æ˨“åé’†èÛ¢–áÞ„åØ’“ÏΗs¹Ê¿nÝÕ®“ÿÙ‹uÞØ¿_ÜÆÅrãÌÇoöäÞT»ÁÇgÜîÉ`·çÇS¯Ý¶HÄÆ®A§ÃåA¢Ãßy¦ÞÙP»ÛÄLËÍ}•×ÕO´¶ÕPŽÏÚ[]ÏåsZ¯Ã@o¸µp_Ý«¡<ÇÍ™MÆΉNÜÅÍ8¿Ò½C³È§L´Å‚hÅÇ´Q§Ð¤@•ÔªW˜â¨H}Â¥AhÆM@¨¬RG¦™?N„ËnJ©ÆM;Á¬]>¬¬?C£·^B˜]^¦Ê‰EwÃeI«ÓyHëÉzwÉÓeÀljK´ÉsÛÏ '¶×Å)±ÀpGâìŠ'ÖÄÙÀâò„“å¥?ÚܵB»÷ÏW³åÉH¢Ý¼D¯äÝJyܯ1¦ì¥8ÅΛ#’ÑéA{£×FWÈØSqеWKƹpbÇÌ^8½¸L0ŸØe/Ù¸_D¨²Y)«©<5šÃoG•áo?¶Üp)àÅrJN¾/5PÐu'ƒÇX:”às+IÈÀJ¥Á¬(±ÍÑh…ÐÉK¬ÔËA¦Æ¸?¢ÄãŸQоŸ´Å'_áª,‘àƆèæHa×àL}âì¸èÛˆtàá—oÐÚrbàì§oØìÃ_îê¼ZÿØÀ3ÙñÖ+Ü÷ß^ÑÝÖìáÏmÏâÛuÂñÛ®ñÚèxÒâã§àñÜÌåûà Ôëî¸Äèãëïëá°›ìþ©«êô݇×ôßyÌå×wÿéìÉÚäÙe¸òÙtÇæÇU¶×êœmÔÌHˆâ¾I¤Úâe˜ËÍ®<Úì¯<Ëê¶QéÓ½BÊä´MÖ÷¬M×ìºEÉæÇJ¬éÖpœñìeÉ×ÑX¯÷×{¸ñâv¾öÏ_¢ãú…`åép–ëÜc¹èÝgÞê«‹ÜèµVã版Ðï¦IòÓŸ‡õá•HäÞ|‚ÛËÇIÙíÈEçæµUÛå³IÜð¥?ãÝÔFÝ×á?ÖîÊPÍëì,Íõ¿8Ìݾ@ÖãñiÍëãX±ØÏhÐçÍd«ÔÉF¿òáE æÈN ÍÕ”Bçæ´AìâµCæèlqò×D*æïÒGÜð•8ÔÞÏ<àÞ¶,ÔÝ׈ßãÊKàäÃY²ãéTÞÛºIáÝÜ<½ÛÒD½àæIÊÙÊ@ÑÐæ‘¢ëÏSµÜãw·Éòo«ÞÞohäØ¥nØç­ƒÓÎ×zÎòÂjÜ䛊íÝ®vâÝ"Äàº>ËÛœ†ÚªNÌæ¸4¹ï™cÜä½Séà£'ëê¾gªÝÔy½çÃmÓÙ—BäѺI™áÂ;ÎÕ_©åÚ”¢ÛáÝÈP–Þ½"§ÐÂS¡ØÑ\ƒÙ³v@ÏÃPRÈÁŒTêÕ”)àËFØÑ¥4¡ÍÖ+¹Í­,ËÏ’8±ÊÁ4GáÁ-PÈËH*¿Ï6DÈÌ3)ÓË\,Çž-QÖ§G6“ÛV@˜Ø^2´µQZŸ¯€Y—ÄgD“°jH­ÒƒLQ¸®-€Ú—9‡ÙHªÈ°W`Ù¨KcÏ©9¹ß—Cܾ¸[ð̦V_ÐœsËÛ¤VÃÃÆMÜÛ¢[ÊÁÈ“å¼â­×ÈÉQÐѶyӺݼ¹ËÍb„ϹR¤Á³e¢Êp³ÕÝQ€´»}ºÃ·iy¹›T]ÀÆeh˜Vg—¥`ZŪa˜Ç•E“¨DH‹Äw^} ŽYuµ¦W{²›[KÔbqgËskl¥‰^“ ~g1¸ bnªÀ‚f»®ƒ¿µ¼yº°Àr©Äc‹¿»™ÈàÉWµÌ~‚§ÁQ|µ¿p„²ÙÜÍÄÊÈÐƾ›¸Þâ­°Æ¥u¢µÀÉÊ´¿ÜÑæËÚÃÐÑÆÃÍîݳíºÙÈßÂì¶ã¼ÚÑìÔ麩·ô¹èáòãøÔÓÑòæÞëùâüÛýçñ×åÞþçüÛõå­÷õàÔÛÈîëïòÚôÑèôÑøáåÙè¹Ù¯÷çöëÿÈï½ÜÐäÁáÈÊ°¸¤¦Å±ÎÐÔŸÞÃÙ›¼¬ºê•êºÔ©Þ«¹šÛ½Æ“ëÃ˦ãÉç´ïØä±ÙÝÅŠËÔܾʼöÂÙ»ñ±ÑÍìØí¹ÛÃäÂØÃôÖæ´¬Ýß±ÄÝÏ“ëÐÛ§¿ÑÔ«³ìÜÚªîΩÅèëà Òײ¢ô×ͯíä¢ßéÒÈžëÌÊ”ØáÅ–Þ³½çàÑ’ðÕÚ™å×÷¡èÑÜ–Ù¼í…ÐÜ¿”å×ͨàÃû°ëÏà‹ÈßåÏñçÙª´Öÿ­ñ¸ç»ÕÏŒÆëÙÌ›ìй¦ÜÌà´æË»ÕÞÄěݤÀšçÜь轲]ÚÌÇ“ÿʵ}ÚáÞ‡ÔáƤÝæÑŠÝÕÁŽæÎÍkÜÙÜ|èåîˆÖÞЈÛ×䉓¹Ú~Ì¿ßdɾ݈°¾ã©îÖÜ“ôÉ¡–ýËç¢âÚ°„õÊš¡ÞÖ¥…ÜÓÆxëÛ±˜Öá¼—Øà¦tåÐÁvßØÔ³ÁÄ]ìñ´PÍÚÁF±Ò¿U®äÂEŽá­VÛÖ¼?rÖÌ;’êãB¦äÈ[tÝÂ]Ëâ?fÖä?wâÅTlâÉr^ËäŠ]ºð|y;~=ǶBºÂŒ:ÏÆ£P‡¼Â2´µ¿IÄ°v?æȸX•É™]…â½VSĪ<ˆÜµQJÄ’Q=¨®Z"±f`ŸÕ^Viµd.´ÁDP¾Z£×[Gœ=1Ém:T¦¡G¯Î‘X”ÈcrÙÃŒ/¯´9¬­Ã-ʹ€FÖÚÈ?½Þ¦1`܈UÊÖ¯4ÅÜÁ:¯Ø¿*Þë™3Òë½9·ç¾0¬ñ®,ÉÞçF…à»K|ÛÖA§é«2™¹É:_ݳ:ZóÅ<‚ÉØ4aÙ»<<«±:N¶ÎBtÌÅHH“Ý’.}Éu2ßM#˜ÞF3•Æ?”Þl;žÒ}L7Ù7BdÖb'låb,¯Û{>9è¤EO··9fך/ÅÏ»%˜Ó¬(¯Å±.›ÚºšÚ³|Õ»m.éÆ:¦Ò±LZöæbÜØkmÙÉDkðãOZäß/]Ýõ–yÜÙ§¸÷ä¯^ÑëÑ8ØâÈVÏéØúçè[Þô̦äöÃ}™îØDŸíä¶öòΆãìÝ­ììë˜ãïì¦Øòð¿ÙòèÆ„øäÇÆÿêäÎëôÝ¥ñøô|äïé|üÖÑXåâð·îöÙ=§ñÙqÚ×Ü{cÚÐ2iåÛGžèã;ŸßËIhèïªVÂò×LÓå«8ÒÚ¬`Äñ¾Bäï¬9ÚãÉ6½ÔèWòîP»ÜŠ?È÷ã`³øÞq£áÙPÀýÔ˜dÑà™yåÎhŒçðMÃìꜚÑä}RÜí±YåÜŽcÜéZ‰Ýáš^Öë®süåÅUÈùëIéßžNÝظZåüÌ;êÜëRâëÓ.ÚèáY¼îÒRØõåFÁêØ=Ìàß?¶éÏK·ìê[Ôâ¿=³àðd¢éã8°ÚÎQ¶ïÞªkÙòÇOÖèÆcâë«}ìä³gêÞ»"îä×DÄìÍ'ÉÛÔ@äñÈRÓèœUáà”<ÜÙ³GÔýÍKèãâHÁÑæzÏæÒ\ÍêÚ:Ûäêx˜ìÝvšãÞT©›ÐY£ßÌX“í߈häýŠ×ݧWÝâ™oËÍ—èÙ]sØÝ]*Ìì¥Jëà®nÆôVBÙضEãתRÂÖ‚àÿårÍå©iÜÍÒŸ°ÕòL¯ÔHÕÜ·}±±+ÕÄÉ„½åÉxÌÛߟ­ÈÅt²ÓãZ´Ó¯.ٽ̉µÇÌKÊÕk’½¾S-ËÂhCñÏŠFÐÚ{2ÌÅÁ6¡Ð©%ÖÃ¥"ªÙ£#£ÔÔ,hÉÔ´;7£©9;Ç£NH²Í29žËN#”]A‰Ò‚7wµS¶…%©¿‚ZuÊ™oÞÅ’QÏ»…tò´§•ä½¦vñ³™B½Ø{rËÍÄP½ÆñÈÀò„Ø¿º‚ÅÊä”ֺƖλå³ÜÄ hY´¸mÉÆЫ˸lLª¦¾ztµ×½½¾ÃYª¿²fj”cY³¤Rl±Áte¸ËuƒÐµlQ‡¨b½—aZy {|­}q£yfmÈbj:Ï„Z[ÅeyÁ{dhœ•x¿’b{²˜X­Ø{i¨Ör¡¾cÆæî®~–¦‘c]§§žåŸÏ‚{»»`À›ib¤¤g˜§ÌϬÀÅѽ´ÑÕÆֹ̻ºáë¹Ä›è³ü¬©ÄàºÂ´¼æïÂè×ø³ãåæÖäØèÞß—Æ°Ýéç»èïæøçëîêÿãÚøýêé×Ùêðð§ìîàÈÞÓç¿êðÌßæãà¾êóî½ßáÝËúÒíãìåøµá©ÔÀõÝí²ì¶ ˆÃ­ËÑÖ¨µÄàãàÝŸ’ãÒ¢êÀð³ÖÛ¯žǪ́ä׿ŽùÇÄ£ÑÒÑ›¿Ï¶è¿ìɽ°òËá¯ÀÄêåáÂЫæÔòµ¤èá×¢ÒáÄÕÕä¾Þ©ÀáÏ—žþÙã¢ù×´©éÒ™°ØÞ̘ßÎĵîѶ³ÜÏê¤ÞÈ©«äÒ¹£îÈîŠýÍê…ÒàÎ’öÎé…ÓÓã£úÅÓ}ÒëÇŽïÌßuÓÏÞ˜áÉåŠ×ÏÆÂéßë¥ÃèÚ„ÝØá×èéÌêÕ§’ÚÚ®°×ù·¨ëÐÓ…÷àÒ{àÕÛœðÜæÍø½séâÔ‚÷Ý’iøäìÒõåÓÃÑ̃ÌÇÏ€âØÛnÈããpÆÎéƒÇÍÆ “Ãò¾£ßÙ~­ºâˆËÔÔ„ Õäz°ÒÕ‘–ë΢”ýÍŠñ뤛ÏÚ „éì“uäÖ©}ÐׯˆâÔ—~ëÜÔcÙŲyÜØÇgüùîGÝñ²h³ØÞ.È×-­Ù°7ãî†IÂáË6µÛÈ>w¹ÍB¬ÌácŽÑæIÁÌ;£×ËAžÄËa[Õ¹ZF®ã_Y×ÛbKÈåRÑPÌÙ”Hʼ”5–ÊÍ*ºÜ‚K̯†fÃÕº4§é˜K|ƱKxΦ8hÉ­{Æ©YK¼FYÑÕR8—Êt=¨ÜbI¹¥68©Ê&8™™EP–£NDlÛ?‹Ü{0êyWÓÁVU¨È¢WÏÀ˜9ÅÐN¼Ì #ÃíŽIØÜ°¾Ýb'ÚÀ„!¤Æ´2¬ÜÁ5×î4µïÕC›Ü¯&ÆÜ¡{¶½­URáÍ%®ßÒwŸÌiLzĨ>m¶µ\YÇ·@ŒÅ³U:È›HM¿ÂV:ÁÀ<"¯×O4Íç‰M›Ï=>á‚1C¸\4Žæu3xÕP¨ÑE8?í’0mám-pÞP:rÖ¶0HÀ‡;:¾³)´Ú²9ݽ œâ³/IÓàpòÞ¾B€æÍ%sÚÁS®ó¬2›ñÙEyÔ×IGÕÉ+{ÞúŠ\ÕÉhoÝÛŒ€ãácæÿ«EÅû»<ÊÞdMíäbÕ÷Ô[ñúæzÕæΓßïäÁéÔÍw½æðwÜâû³öìàÆüñèÁßæãÁ¾ñà´NÛôèçÏÁ›çôêð|çëá‡ðåÞxêõíòàúèZÑìÓnÌïÐM›Ìã.ƒÞÎZó¾K­ÝÖ\ ÝÜ‘YåêÍBøÝËVßÚÚNÔØ«]Úî¦Gîâ©8ÍÝÂK»äÕh«ðâ…ÚéÚg¼ñÍqáØ…¶ñãg¾ìè•yÜæ}™ÔÙ_³åÊR–Ð㨇ââž^ÞØm“ØáfîÚu_õ沇ØãŒqääÑ_Îß»=åÖ¾kÞí¿SÜé¤IìáØIï×àIÚÕËPÂáÝHÚåáNüâÛ=ÉáèQµÜãk¬Ê×.ÜðÖj‹âÛ‚¼èá_­ôÚT­öÄÉIßפNÛí‹­ÚæupëàÆŸíËæWí×¾L×éÙgÚåáVâáÒqÖîËeÜÏÙQââÞVãÒçHòÕìgØæß]ÐååiæÞâ6¹ÓÓW‡èá–±ßÒSÕÛßo«×úŽåËJšÛà¢~ÖÞ°_Ìé­‚Öð¹uÕÕyhæÛŸOçäÙUõÎă¿ñÞ^èæªF»ß¶`òá NàÔ«KÝãŒU¾âº5¯×ÕV±ë»tÕãç’«×®n¼¾ÏD³ÑËi¿ºÃPÕ´O¢Ë¹QÎÏÂ?–ϾcS×ÆN•Ç×YàÊryÍ×|0êωEçÖ™(x¿º#ÐÌ£6ˆº  ‘è²RAÕÆ5?Ч¦®.*§Ë87¨é-A“Ü:WˆÙbWsÍ­BjÖœA¢ÙnvÅ»KŽÑœ<{¸¯=ª·t9Ы²5 Í¦uÀ½†Q»Í PM¾¦[ÇËÁeϱ©¬Ì¹Ö™Þ½¹~㪪G·ÆX^¦±W°¼Ù°Ë½š_>¨¼H>¡ÄlV³¨We«lrÒ—]KŸ°_jš‰ol‰Ÿj^}Ìr•ØÍ}j|¤™>ŒÉca‹±jv–qfj»‡pUÃjs…¯]m¨jt~Á lx¢Èwc©z|s©žš®­šgm²Áel¬š’ÝÒ¼x«ñ°m¨«{€¥©£¬©Ù½Îÿ‰ÐÇÏÓÄ£¯“DzŸ–œ§¸¿©¶»˜Ï°½¾¹Ì¡ÒÖÅ«¥½º¨ÂÃàÚíÐÞçéËïÑè¼êÍé·ÚÈâ¾ÖÌç¼ÿæç±ßØéÈÕØ÷½ïÔôÅØùéÓÉْظëÖè¹ùÙéÚïÜëôíÞýºßÚôÆðÕÞÇêûëÇæ®ðÝâ¼ìºñ¹¾Ì֓˻Ҥɿã™ÛËÓˆÀÒ¸®–ì¸äæÉñ¤ÒÕÞèÏö¶ëÍÌœçáÙÙÜɈɿÿÖêÚæ·àÓí¯ÜÏçÍÔÞâÄÓÊ÷­ÉÍËìÛâöª²×ÒãÒÍ»ÔͳíÔ˜“àà‚ÉÆËŠ“ìʘ†çǤœÉà…±Õ¿ÉœâëÇ鸷‹ØÓÙ•èб~ßØÐïÐØ‹ýËÉqÜØÜxÍÔèìÂÙ‰Ï×û“ãÏÙ•Àà»`ÛÆà½ÂÔñ£ÔÖò«µèÝa¾ÝÎØ—ëаµÒܳ¦ØÑ› éêÆÞéÕ„ÛÚLjÞíÿ¸÷çåyìʽzÛÒŸpêÙà‡ÓãñŠçÕóŠóËíˆáßçwááÜ~ľÓp¶Øå©œÀꩽ×é„êÖá~¨¼Þ„žÑºo¥ëÐ’ÕÞz绦Ÿé˯×çtvïÚ¶yîµÌNåñ¢W¹ÎžUã¿«‡çÓºWÐñÕ`Ýå¢Aè̦O“Ó¹9ºÔµ6¿éœ<ÝÙºB“ÓÙ-¥ÒÞ-žåÃ=£ÉØ!“Ôž3šäÂ/³ÜÀDnÜÜhUïÔ[K´ÖKpÙÛˆMÎÀ{5Ñߘ1ÎÕ¤3¨®Í%µÓ¥4ÈÀ–U¡Ò>¤ç­;›Ö·B{Ъ&Tº¸V>Å•eK¶ª6/п@7“"LŸ¥A/ž¶Q8·Ò>F•×O6—×67¢ëM-†Ü†/pìƒ)·nnâÇ“7ÐÕz&´Â®!¹Á€ÀÝ®'¼Ç¡=°ïmB×Ï™6–²¹)Ââ–,àÜr2Ïܬ'±úÔ3¼ß¦DÆ¿¿1`´À&¤êâ\¨ß—@SÔ®(@Á¸7@ιCS½™W%Ê´FYµ«@J¢ÇKP¬¯"?¡ÂD1ª¾H(±·%¥Ø[NŒÝX”µD/–ÑIIMå|(jä{(€åjqØ…1uÒºcÌ’jÖ¤£ÎØi„ëŸW‘ε-Áã¹A^Øê <Ö½-MΪX»áè•€ÝÂ'˜ã÷ª®ðÓ3‡×Û=`éÖ{ÞÚ%¢ÛÅSZÖæ¥MÍì¤ÈáX€îÌð½òñÉ–èèÛpÜùÖ\ÉêÑŠ¯ØãÙáÑVËóìd’ëäÞv[äåzˆÿêÇwïó¸bÿ賫èõãÕëíÜ}ßðáiâôÒaêßæiºóÎŽÆäëH³è¬C‚â×2¢éÌA³ìÙE½åÆaXÖÚ—lâéÒkëå”_äá¼9öÑUèì¬bÒìÔIÀëä^ÅÚÈkÆïÝHÌéßo­çí`žóßS¹äé”GöÖz“éòvªéßVËÜß}néØ{‹Ýó¥ŽäóY‡Ñé¢kÚè\Å÷›”ìÚšBØ鸌ÖïÓ[ßå[gèÝæYãñÓdÙà×[ââÇUËáÑiÌàÒ?Þêµ9íÒÖWÂæíxÅá˃¸ÝîGÝÛÔ8¼äÊD¸âÓRÄÜëwvìé¬gÙ六ÑÚ¡Z÷ë­•éã±_ÕïªKåÙÎCÔåÐJîáÅSÔíŸMÐÚèRÚÞ¯OÖßà\ÞÇØQìèØiÛùÝaËàíNÓÜÁz•ÈÓažäÜ_§Ù¤MËÛæ ™ÛÞˆ‘çÌF”×÷€ ¬äÂbôâ¨~¾â“£ßåƒaäé²râ쳎æÙ%^ÒÛÝaíÖ”XØéœBñÖÉ}Äܨ`ÁÑÊ?“ßµBÀÕÂlÇÉÁc¶ÇÒR½ÀÂx®½ØŠ¿ÅÛL¯ÉÑy¶¾×s°ÂéxÀÃÖdÒȪ¢È¿]tÊÀdlÓÚYfËÊŒfÛËBÚ˱9›¿Æ.wȨÈÑŽDBÑÀPIÍÕ:W»½JXÆ´GQ¿¿)R§À5RÞII£·Q)‚ª]R¶ÂV+¯ÒI_™Õm]‘Ïo8‹ÈFY†Áq?Ÿ¸ˆM|È“A±µ…VÆ·Äp¼¶­bħžOß¹µ™èÆï“×±«M¿Â™^ÍÀÀO©ÄÅ]v¶éÇ´”‰¿ºÎ­á«Ô‰ÏÊ»I¿¾¥q§¾ÄlÒ»¾df´Žk¾ªÄgŒÈ†}ž—h.§Œ^^ ¸aP¦¦Yk”¶R\‹¦{[o£i|jŸF^‰škš¥|[šplZÑa€Y½j}Zªhwe¦¨Yw¦ol°¬v±žµwR¤‹i¸“œŸÍ¾º†]ž² Ð‘áµëµÈÊÀ½™}£ªÄ¨Å½ë»Õ¬¦‹§”ãÜé‚©¨³–¸´×Á«Äãµ×Ú¼º£à̶£ØöÁݵÁÎøõäâòïâÝïÎòÅçáÝÚõÊÃäâÀîáë»Ï¨ïÎôÏÙáêèÕ觜Ž´Ó•ºëÖêÖÝßåìêòÐõÕÐÞéïÇêØè¼óÓÿßîÝô»ä‹ÝÕîØã¾ÒÒÌÙš¸Û՛ɾâ‘ÇÖÎÀÂèšêÞœýÝâÒóÉŠëÙ¾„øË¥‹òÍä áÍˈÖÓÝŒÎÕÄŸöÖä¢ÿÒí–ÂßÛÂáÙÓ¶ãÍÓœœëÞ»äçÉÚÆà‚ÚÏêÁµÔÍ‹ñÚÁ¦ìÕ®áÙݺÛͯïÝÕÞÕÙžuòÜÚÂÚÐâˆÿ¸d™þØä‡ããÐnðÀç_ùãÀhâÑälÈÑã…ÔÔ¦pÑÃå†ÔÓý§ÑÃÆ–ÑÉÒsáÎÚ…ÉæÂu®âÑÐÌᶙïìÐkôì„žéͺrñÍ«ÐêøéÂøͳ|ÖåéµâÞ¼dáÞº|æÙ¡xåÕàtÖÍÒmßåúƒÜÛÚlæÝêƒäîÃwÖÛÊdîÈÉd£ÜÕc¹àßj±ÛË”çÊí¡§ÒÌ•âÆ~~ÜìŒxÞÝ™aõ鲌ãÖ}†àÈ¥méÏ™Vìç åÝ‘šÏÕÒhÖå¦aÙÔÁqñáÂGÁÙ…7½àÕ9­éÂC±Ý¿>½ï€3™ÎÔ0ï¼,téµ?•¿Ì@nåÉ0„ÐÔ.¨æ²1wÜáN`ÎÐlFÁЀmëÕlUÄÆ„=³ïœ ÉÊc:ÂÝÝ'ŒÙË9¡Ç¢ÉÌ_æµ9ß­GdØ¥œÖ’J¼—Aq×½H>¸ªU^ÀÇZ9‘ÒF<¬­\Q±ÏHC“ì_>±Å50“°&BŸæŒ9­¾¬:­º‚4ÏÎb#ÙÇAÎ̤§Í“%Õç°Ãæz#àè–9ÓáŸ"àÅ®'•ÔÐE¤âÃ*·¾šE’Ü©7¯á±9¬Ô½<¸Ýîf’èÏ›×™L”Øv8¢Ü¨+DÇÎGFDz5É—'UÄÚwPÚ—/Y¼£*¬ÖY*ÚM.‘¡:V¤µ@7›´V"oÖa1n¤$%aán=;Åq3}¼q ‰}6_wÚ£.­ò´VZ°—?¯Ï’G¦¹,BÀ¬:¢ïÐB£ÁºJfÿÁ=ŒæÞ3­êÎOšÜàHoàÓ)´ó¾&oßë7DÃæ¸ÎÖ¤Ñí†fÝÛ¸wÚêÜF×ïºaÑß×ÑæïãÓçæãcÙíÒŽèÑà¡—ÚÚƒÎðâ;¿÷çp»øû¾¿óÓ†íÞp¡Þÿ·ï䬾èÿõÿÚäš™ùÕëëáÝmÆÙñ¡öáÜIÅíÛY³ïàrÉäÐRžçáfðâK ãào¡ååk¤ÕìÄ`íãÄeîú¼“éêËÒòÆbÐóÁU×íÊlÞáÞp­æׂÅíá“ÝõÒrÁåàj³îâl†ïçm«ùë©fï뎎ðâ[¬Ú×{‰æátƒÕô¤XîÛ‚~ãܨWîÒoíâ¿HèÞ…˜òÓÃQÛä¶LèÜÁ[âá¾NíéÄjâÙ·kæßÆZÆëäe¶èÕL°áãZâïÑ=ÙßÛWËÞÜ{š×¬4ÌÔÖ]¼Ûó›Âàá—ßáÕu¤ÓáÑ_ôä¼’ãá¡{Ìí¡Ròí»VÙå¼aäعEÒôÌkæÝæGßé¾gÝüáaäâÕFÎÛÞFÁÛÊNáÍî_½éêxÚÈÎv·êËQÁ×؇{Þäi¥àí¡ÄÝرêЧåí·€Öæ¹…ÁßÝ{Õî½köÇÆvåé—|ïßÒHáåÏdÅßÙ‰ÊÉÏJÌÜÜeÜÒ¤:ÈÜ”Tè纎ÙɳvÁÈà‘ÃÑÍ–Áà¸Á¯o¿Ñ¾q¾ÄÇ’¼ÈÁ\ɾ׶¥Û»gÀÇÄyÁ²Ù—¼¼¶M~ÜÀd‰õÇzÆغ|~Õ¾u_×Ѐ=¸ÇœXÉÕ­:½ÂÁ8ÜÈ—:·ÂÈ+NÃÎV\¹ÄD:Ñ¿KW¯¦šñ¸>£é±D©ÛŽBÕÙ¼?«êÇ ¨òÁ0·Ú´B°¾×Pdͽ/Žæ¸0¸¿ÅAFôäXJÙÓTgÉÌLqÊÇlaÈì}.ÕåwE»Ò™&µó­#º¸¯/¼Ñ€2櫯A“½›ANªÇ,Nµ&YȽ1)¯‘k1á±W?®©73²Í[?…µO2³Ü_0¹èJ2­Ï@.‘ÓJ5›Óh@èMËÔb4ĬQ=ØÙj>±Öm0³Ñ ÛƘ%ÛÚ£!Öër-Öäm4×Ù™°Ý¬2¾·(ÉÜ…#Æé›#¹×£$©Ô».Àά¬ßÕÆϸ%¥ÐXÇÞ±ƒú´3_ÁÈA9Õ¯AÀž0 ÁÂ=AÞÇ"6»³,V·Æ6'¥é@,¸¦$6±éI'ŽÌ=†áo9¢èw'hÿy@‰èŽì#B¨ÛŽ=O®©WLá­ ÑŽàÕ­V•²´BFÛçx®×¡5ÒÚ.SäÇ!ט(ÅäÒ{zÚÓ3îàU{ßà0‚ùÒGxÚÝz`Þß{ ÚÖTGÙÛtXÚçÆa×õÈpæâè×äæïÁîñÃ1Ûô×y±ãì Æ÷åxÈèÌ?ÔëæW¤éë{€ðÛ¾ÔÛãÎÈð㪦éæÞèïÞ¤ÓâßϬûØì¿áæøRæûÀMÆóÔWá×ÂXËæÌPÔî¶>{Õ®(™áßëÞO¹êÌžsëâ®mæà¼Råï¦QäòØTëò»Uãð­léáÍ@ÏÛÒV®ëßeËùÖ]ÃïâUÅíÎ^šêßlÀöÚ§zÉðv«íÞ—Œðåb¯ëÍ`}åƯrôö•àÕ†‰åò—éí£hîÿ£§ÔܨZØÛÊdÏöÇZó߈Hìë»dØê¼`Øßâ`àëãnÕàì\Òî¸;ÏݲHáâÔjÉÔ×_­ÛÑaÍØž@àäÜnÊæËmºàËbÇÚÙ àãÞlòìš×á©ëßµlÞàÕhæÞÚ^ïÜžNíÖÖdðÕÐuÛÊ¥kñåÚbÓáçjÃâï_óï¼oããßaÞäÓm¹êÅM÷è슫ôâ@¸èÙ½çægÔÝؘ©ßÓl³Þó©«Õ×ëë¬uðÔ³çâ§Úëž|òÕß^ßÙŸ`Ý謈æÃ}RäåÏdÙÕº`éæ»tÖÇÕˆÅÀñ•ªÎàŠ¼·á ä©æ“ӼߛÇÌã–ÀÕמÀÒÇd¦Ë½~©Âþ¡Ì¸´@¯·ÏW¢ÝÄO–æ±m”ÍÕt„ãµwfÕÞ”rÛȈ¢Ò¸¨?¤Íž&ÄÁ—=ẪF‡ÁÁ¬ÅÄ5§6£òÈIœÅãC™ÍË*¢ÃáLÕÁ8‘ÒÒ+’ÑÁ!ÏÜP<ÌÜ]WÏéIk¹Í[Ö´jd¼ÄŽ'¿íg2·¹´#šß­%¾Ó¦,íÚu/¬Ý³2›ô«P„鸇ЖM5Ñ´=dšÆ%oѲ<"¥¯3=›Ç:E’¦!>Í©77´®7? À/# ã\^¢Ù‹*tÕ„PʳqAäãb'ËжÎÜ…ÀÕƒD¼Ðª Áè—,³ë™6Éå˜&çÍØ šÒ¼$·èŸÔÜÏ;°óÓG®Õµ7§Ù¶)´Å¼!œçÉ(²ÛÀg¨Ü¥$¤âÚUjØÐG…ØÚM¹»FzÓÃVgÒ´39Õ»D+ÎÜr1œâq9–»b¥»xtjÒ£gpÁ£Q ž”ŠÌÁ‰_Êê\’¾ÆX„ÁcÈ° —䮿‘ҥκɴ§o­ºÆ‘¼¦špÀ¹Â¸Ü™å±é³ºsÄ°ºmʧ»l´ªê½Û¦¾¾©±ÒˆÇª¸ˆ¼§·{Ūɞխ¹}~™È”sªÄ”|¡˜]Z˜vhq´{”»­vw—eb…šrwyœ§……ŠjyŒƒ‡ž¾¡£yk“mt•¨¯È˜©‰}‚…¦¿Ó´« •Ÿ„„œ»¤¸‹²•Í§©h©“¶ŽÃ‚ªu®¥¸}ˆ‹Ä¬˜¨¤å¹žÇק‘½·ÍÐÖÁÁØØâÊ㿱¿ùº×…çÔöÞêÛåêõõó±ë½ðŒ×ÉÿÐüåöÖÿÇàšÊ¿üøîÍõÜéâëÙùÕÿ×ÎúïÖíïèäàãçàÛõïÈíèéðãÖóòè÷ÜÜÿèÁí«ßÙõšâÍÿÍîØÿ²îÍ€­’Ë{‰¡Ú|ŠÆã­ËØê’¼Ôé¼ØØó¬‚ñÝç‘ÞÎâˆóÕÚyØÔ¹’ñËî¼áåç«âÊî¼·ÙêuÝÆüÀÝÚà{ÅÕ主ÕÿÒÐßã·Úà੧Ôä’È×Ç]§åàÇß¾ßé–¢ÞÉî¿ðãÃ{áêÒ—éáΓìÂï¼ÿÕàañ÷¨göêÞtÜØé‡áøájãîëoíåËÕÎÜfïÙ»bãѺgÖÙëtÓÙÑ_ªÝínÖÈÊ‘ççðqãçû´Üãä•ÄÛãè¾ÿÕ×yÚ¿Ý›àÖðÁðêéÁßåéuæöãwãçºbâÚãróÛìvûæÊ]Ýâä\ÝäèyÜøïdïÛï†ÖÚõSåÉÖ`Øܹ_ÃèôÔ£èÚW¦éߢËáè¦ÊïÛ¥ÚæÀwÕ؉ÙȤhÙÐbõÍÐo×ô°`õÊ«Sß×HîȪHãè«T½ÄÀ(Âó±@Èä¥dçà²%É⢆öÃ0•ç”(²æ£"ÚÛ½”Û¬ ¤Û®1šä¾8„ßµ/ί'ݪ(®Ù¥5lØÐQHåºNP»ÕL_Å܃3¿·],È·‹ÏÜŠ¾Û´²ÒŸÏÏrIÞÏ„2‰ÍÈ"PÊ hZËEa¯±Q!³°L8¨µ8#Õ¼?SÑáQ3—Ô'›ÛD0ÍÍ_C¾Ë@-¤ã #´ÀK`ÞŒ1ªÆsëÊk4ÛË~Ó߉:ÁÇ®*ÄÉ[#Òà‹LÇÁš×Øt$àͼ弤ì´$Úã-èâ±Ç笶ë¶Ãæ¯%¯ìÀ/²ð¨§îŸ¿Û³'Õå -ŠÓÙ"˜ß‹K;¦Œ('Í¿8!¿¼V­5QÃàZ(°ãRËÇ4'®Ú7,“á}'„ÄiŽÜd#a°Ž$s×x ˆöh’à‹†Þ´§..×¼*cé’(Ðؾ`¤ÖÉ&?äª ½ç/žÈÆ-…àÈ ©íÃ'¸ó³6oîÓ#žÊØ(„ääSoÕÙ.fíÎ]|áî“vñÖnCóãÀQÛàÌFßþ˜AíãðÊðêÔdôÚãFæéÜ­ñìâU±â×mÚÝíeßÞùyÅ÷ìŒÖõòúóåÝÍàñåÁ‚ôçÝëöí³ÔèèÍÿÜë®õìÞfèôÁnïàáOÉîÙ€åëßjÏܧ!oäÒ$ìÉ:£ë±MÈÝ×zàôâáÍOöä®Iìáçqç×Ú†éõ´dàðËMÍìÙ_·ëØz×äâTÔÓãdªôéy®ìØj¿òÚˆäìåÜ› ëôWÙÜ埕áü£öâ©‘Þü xâì¯oÝ⫃êò±ŒãßÇUÓíÛXÜòÔuÚâÍpõÇŽ^áäœ[áìãhâéà€ÙÜÖKâäÜiäÜÛmèÚÑeÍÜÜpÃâÿnÖÚ£6¼èäoÚâô€ÏÞß_ÃãÔ„yäãßg÷ݲtãÞ–›âáàxçó˜líç¹óäÌŒÕõÝxçä×^ñãÕrôÞÜpãæãn×ÜÝvçßÜrÞÝÖFâÐëˆÞâúbàÓê©åã‚ËÔâÖÖ½pÍÐ슖Îõ¡ŸëæÊ•ÙÆ~•åË­¦ÄÚ²“îÓ‚µêáÑ}ÍÞÙnÞÍØ|ÒÖÐuÛÞ^5éËÇèÕ·jóâ³hԴ„㱕ÊÇÖcÒÇpϹƗϹíœÏ¿Ã¡Ç½Ö˜ÎÆÊ{¹É¹U§·Ø©ÂËĦ¼Õ¨l¹Ùªm–Ú¸\¡Ñ¤w‘ÌÄrqÀÂ’=âÆ€gÜéYȽªA—±³9®¥žLDÇÂW·Ò\eªÄQqÀ´wg½“iV³¡eVʉHZ¶Ç„k½^bªÀ.»¦xe‘µea–Ãd ”]^Œ®tWq¬‹c˜›¥~Ѧu ­°qÔÈŠnò¡i ÅWƒ°°\Ưö§Ñ¯u›Ø­Èpá¥äÆÀ¸äÅƟߨàœ×ÈϧºyÕ¹ºÚ±èÃҙήɞ¶„°²ÙáË©È}ЬÀ„m€º¥Nš…l@w—j•±žk¢Ž†v•±Ž…p«\‡‰˜|^…b}YŠbŽˆ’wy‹?pu–xˆœ£wd‹¨–q¥ÍÀÖŽ›Š…—”•«ŠÁŒ¶ÉÈ›ž†ŠìÌΫä̘®èܪ¿¹ÚÛ¬¨•³ËÛš°¿ÅŽ®À妎ÇË«¦â±¤›®çÝÅîØÞ¤òÏæ§ÝæÒhãíÏ…ÞÕÞåºÆÙÈñãàŠÞÆùÆéÖØ‹¬×òÔðÝù³åÏù¼ëöàÈì×ÜûÿÝëØåÞìéáíùæèéõßèìïßÛóìó¼ðáâÏðîßÖçÖÝl×Öä¿åðæ…áÛÚ–¨¿ÚÃÂç…¹ä»vÌÎÛzpÅÎœ“íÎ܇äâ¨ëÎßxÝâßžÝçã»íÓÝ»ò穸Ýÿ¨ðÕópÓÞð‘¦Íø‚ÍØì¾ðÝ틉Úèn™Ëݨ¢äù€ÈÛì¡´ÏÚ¨¦õàÀ Íö«’×âÒÇÚè¬ÛæÐÙð¾Ý•õï×bââïæÞ¹züÎÒzëãÒrçϺaéä»XÖÔÐ`æÛâ\íà¤JåèÓ[ÑÜßt¶ìãkÍñÂwÒãÞeÏàüÀôìŠËÙÒTlçÙÛBää›Öá–‡ÞâãuäײeêÒ˜Më×Ë;èÞåWõìÔˆáÚÖkåÞØUåÓä•ÕéóNãà™SáÕÄIÖÜìÖÝÃBßÞÌf’Âÿ[¼ÀÌ]´Íà|ÓÛßd{Ûä„ÊïáÖè{{ãèZßà’e͵JŒØåœCïÈ¥8Õä®PØЇ^Û¶¥/ÐâxHÚä¡IÔÕÔD¶äe'ºÉ²'¥Ù (£Ú©¼Þ©+®ÕÃœÚÍ/Ƴ'œÒÎ5‚àÆ*‰ò¹"£Ü·#ŽØæ/+ÌÂQOàÆ6Oãá@VÝáQ+º×ˆ"ÝÍr0Ô¿¥%µÚµLºÄ¤'ÅÞl ð¼)žÄ¸h¸½-ŽÒÓ,­²+¶‹"5á¾E8Í¿"=½¯@7Ä×.+ɤ/D±µ!´ð&¶Ã=>¡Ð_nŃ.×χ5ÃÄD!·ÞÉÏz Ýû€&Ôi ɽ‡.éÊ¡=Ûç`(×Û£ÀîÊ<šöÁLÇè—6Îü·ÙÖ¡(šçG©âÅ#©óš4ÃÒ¦ÍÛÑ4½ÎÑ5‚î»/<ÖÝSFë‹@Ÿ·4QÒÆB,âÀUPϼ=3žÈ-%²àGB—§.A•Ì91¡ÒW¼2ão±Óe ÍÔz" à_<ÁÒ°D]Ð¥VL§¬(¥çj”ᴪ̪—Ôé9±ÃÏB^ÌÊk´àÐCªæ»:«èÜ~ŽÚÔMŽêÇ<”ÔÊK[åñjÊÐEqóît‡ëäÆTØõèÂôîáÿÐÙvdåðqKâõáðþÛÓhÅðÙlÈìÚ›×èãYÍêàÔöçð¦åäåéó©ÜìÜœµäêÑêçïÚéìåÌÞçéêÔûôëçëÔÞìÝTÑÞ¾iÜêÛ}åÿÑZµ×Öj¢äØK›ñâlÂÞ晧ÚÚ‹¥ææ·Pìõ³‚Þë¼bæÖÑ^ðÞÃ_íç¤`ÔìâdµÜÖH¢ÿáNÝîàc­êØ„¯èàj»ùÞ| ñç”Üçx„åÞ‡ÑðËf‹ðä}¥áæjÓ䑈õ럮áø­Ûó´Œóè ‚Òðâ`ååÔ\âèŒwôØÁvâôÃ>èîÝTàÍÆfäߪaÝòÝ[ÛÕØXàÕÔ€ÞÙðjÑëÛr·Ñó‘ÜäìŒÎÔêfÕãÊoÈàíw³ÐζpíÛ®œÜ৞àÓœ‡äâÈpñíÕlîܱxìÉçaîÒàcëðÙ|úÞË`ïØÝbÚëËwòÑðoØæ¿yÖàÜ~ÖñÚÝÝîxñ××Á™ØæuÐä×iáØâwö»­­äì·àÕ£àÔ§‡ëÊ»Œôά¥îæ®zåìÆ`íâÞoÒäÑãÀʛྫྷ„èËÔŒçÎŒa÷ÍȧֹeRĹٖÑÍÚˆ½¹½ÜÌؖ½§i嬮_¬¶ÌžÎ¾¾’»¹Á¨Æº­T¹´¾0 ³½_بX~ë¿sÆÒ·‹uá¼–dÆ·Žc½Á§U{®¸NÕ¦…oÒ¿‰0„«µ@M¾ÒhÀºYKÓnf¸°Q7œ›`9 —OcÄd^•ÀWH“ …^ÁžjPŸÎ€L‹ÃSYžqgÇu]e¬qj®˜ŠØ¬p£¬šaÁ­«f•´hëžtƒ»§d”ŸÚÃÄšº ×±¡ªÚ¯äÉø®Ö±àŸ£Œ´¬­kâ´äÁÆ«¿­ÏŸã¹Ù¦¾hŽž×¬·šºsÍ™ºqÓ¼µš†–²ÙÜзEšœdk“±–§n^†±’‰¤pw†²|~yjtk™bZGª¦of|eoFŸhˆI£»‡_©×¶x…„{1¥†qxnˆw—‘ªu“¹vÃ’³“½ÕºÇ¦–Ç…½{›Œ²”±…‡ͳȭëæñ±¢¡ÌªÕ¹–¥µ¬Ñ•¤ÁŬš»Ñž´¹ñ¤±òÇÛ¹óÌìÔõ×õõÈÿÄÑÏÍ«ÏãÞþúõËÚáßÛìäèèèÄóÝéÎðÍÐÙâÆëÈÿÕä¹²û÷ÑðóôÒæìÐÙíÖîæèíçÞèåâêÖíÒïÏõÊçÈëèú·õÏù±âÛñ¿ûÝÕ„ÆÐÖ…˜ÓÉ}«Ùï}ÞÛÞ£™ÄçÂßòãé”ôÐÜÇí˱xîãæŽòàö®çÍä¹ôÐí`¿ÓÛ{ÉÝï²æÔØq²ßæ©ÈÖÚuÉåÚ½çàÝÞÇî⬪ÍꑸÞñ¨Àë¼~~æØÛºå×­˜ÊíÞäçÛÞ¶ÕÕÅ»ðÞÑÖåËÕyùÕÝyÕߨ{õÞ½sßëÕwæèÝaîØÐpÉê¶jÝßÕ]áÖÖXà̸UÌÔñjÆÜÖkÏÐð„èâîoÇÑçh×ëà‡Ë¶Ø\¤ÙÀÅ€æðË´ðåÊÎíá©°åæ×oèäÂJÙâ¿VëÚÁHëäË`ìØÆlçáÍOçïãvØç¿—ëÔÝSàåª^ØéÞ€ÌÛËcÔÛØPÕÚòȇòÔ]¶ÜÂFÏÞÿ¢ÃqIP–ëÚžˆäÝzŠåבfÙ˧eÝΆˆæ̱cÕߦAßáã~Íâ”^Ù׬XÌÌzAçêš<Ðä˜XíÔš%ÝíŽ8ŸéÌ$¸·Á%£Ò}¾ñ¡$Ÿä ¤íÂ'“é©2ƒïÌ%‡ÌÆ'wá¯"¢ÏÑ"GùÓAS×åC^Æï6DËÉkÛËz!¹ÒlÞÓ™‹Ûõ⣠Åßn"ÑÒ!«â |Û³->£¯"7ÍÅ+%Ú¹-#ƪ6×Æ3—×N(½ÄMáÑ3#ÆÎO0Ÿã±JO»âNHê”ÌØhQÓÊpJÂÞ†ÇÈ’nå¤ÈÁi1Â˸Úï¤Ûã‡ôí‡ÜÖß7¶ÓÌÌä[NßÜž"ÃÜÅ.¯è˜"Êݾ/ä³±Ñâ@—éŸdÂç´"—å×.`ÛÆ{Âÿ¨=A¥Æ<4Úá"`ë¸'BÂÙ11Ŷ-'’÷E1¹˜B8˜íU'jéw"x¬ -oÓ?1\ìoæ”lá~ŽÞŠ2Râ“QJ¯¯2LÚ¹ÛǦï™LqÍ°#§Û›#)ÐÖJ„æÂ#éëG»êß¼ÜÐÆ6†æönV×ÖH}Ûða~êä‹àç3®íÛ¹cÎð¶bæêÎcä絯ÜåÇ’ééÊ{ìéÃ\ÿÖÝ]ˆöÙ¾äùå|¶ò×~Üáás—ìæ¾êÞÛÛöâ¶Ôçä«xåé®ÒìÞÐ×øè¿·ëò×nÊõèNïáÏ•ëîà]ÒçàhÄòÖK¹àÜy‰íÚŒàߣâÔZ´äÌaÕá©ãß¾iîé“`ïâ´TðñÄUÚæ°iéåÏsñßàsÇààcÉêÑaÎéâp¸ôçs±Íál°öï•hñæ}ûãƒììiÂà쥓ñÉœaðúºvÜðqïݳŽöâ¶ß㨑áͪZèÜßPÙëÉNá͹}éÔëpÝëàuñçËdàÒ’oÞÝÞMÙÔÔSäçÉjåÖºaãíÖ`¼íÿnáèájîÕó{×âéq¸èÓ^íÔ练íÖ×}ëÙ½…Òâ«´ÔïÐôâÁzïÙØŽàÖßtÐÜÙvæëålÜâÊ„ñØÑÒæÕ™ØôÆfíææsÐÔõvçèÚ[ÎéåfçÖØÌíè—¯Üë¤ÃÛí{ËÙÚg™„Ú••Ñ쵦âø–à诔ÿÇxŽÖ玲çʤaôÔËvÚä‹nÓñ¿‡ÌØePø¿×‹ÐÎë˜êÖÄ°Ù¿Â|âÄÌTϺÞ8ÌÀءղș۹‚ÆÇᮽ©Ù©Ø½Ï¥Æ¯Å€¶¯ÉvǸ¹5ǘ…ǤeºÌÊ`¾µ²Toæ®q`ⶂªË‹qй·P¼ÁÁk¼»Â„ÅÈ—VÀÃÀETÔ“pUŸ–XE¿‰pV½”zU”ŠcZΖVLšje€´uY¨£UX²{nœ»`g¨ ]U¢µViš–šmbÉ‘u™°j¤¾†uÄ’­PÎŒŠ‡Ä¬ºN£º•“ຩ›½­¯°Õµ¤¸Ó²¨sײ¹uáŸÍ°¿„Æ­ä©íÅԜҷޚ—dѵ»ÊÚ‰¾‰ÉÅU\¤°`¼·‰â±Ä¶¹¡ÂÀƒ—§…o‘†q˜½Ÿnˆ±~qyt‡~«goˆ„v>€€r–Ÿ m‰´ŒFRs€;€bž(¡S›r“~’dœƒ¤–~€Š}§y£‘as—’¯žÆ¿Ô®ˆY™v‹ÄuÀ‡¤¬”¤¦³ÑªÀ×Ò‘æÑîÛÕÌÑ~½ÃÔ¦ˆ¡Î¦º¼Ý­ÖÍîÙϸÓxÀ¹ÝÇÔÏéÇØÁóØïóÇÎûÌâÛÙãÙÆîÀóÈùàñ¹ÍÓæãß×ô·ãæöÉö»ùÊÇâíÔäïñÜîõçÐêàëçÖíöÎçññèçÛøõáìèó¹èîäÌÜêÓÏßâåŠìÈçÉæÊå ÌÂ݆œÞ¼¦ÙDZÿÚrÈßå~Â÷ÒœƒÞéíÃ黡†ëÊ oøÂà…õÏíÄðèë¹ðØ埯Òö‘ÙÑìtÕÙÚƒÄëÞ…§Øõ©ñêᨉØÁ ¨ÙÐo óãcÑîãÜÂÝ׳ÎÇÔŸÉíÅËîê˜Îðèâ¼åÕÕªâØÃ[ÚäÙƒßÕåbÜä‹sòÕÑQÖëÇaâ×ÂlïئrÜÙâZáàÂQÔÑÆfÝå®RÐäÌQ¶ãËUÍÑÁCÞÝò×äáa°ÛÒIÉçóqðçÀlúí½çä„wÞòÛpóÙâ¦ùÔê«ïøÏaäé¶I×ÒÓbÝëËuÛçÑyËêÞ™ÞѲT×ÜÓZâäôdÔØÄHËìÏBÕÙÒfƒÙãt ûꢯàápÎáàbÞè{–âÚ‚qâÛlyæõ¡cËߎšÚÔeÔÊ¢Lë΢<ãà˜SÑÚ¤NòϦOÙà«<ÑÔ¼CÐ÷Ä Îß|4–ÞÕ ²ìÉ5»â°Ôæ‘%¿Ï›&¬é³DÔöÒÊ.iÜ·"å­ ½º§™âÁl6ÃðFMÒÆ&WÙÍ6?ÎÊ\&±»bJÄÚx ¬Ï¬«çš)¾Ö†4³Íb ¹Ôš*¡Õ¥ gà¶0YÍÖ!3µ€»—%-߬&%žŸ2=À»;>·»-P¹#T¹»áÒƒSæÇ|£×i"ÏÓ‡Ôâ—#Úæ¡+ÚÙj1ÎÓÂ,´óÐAØê€,Ôù´/¨öñVÈ圼ß!ÈÕÅ-Ÿî›%ÒÓ§$ ÜŠ½îÔ.¢Ü×c}ëÝ9<Ù·_˼\NÜÀO/ͯ/@Ö·:)ÎÆ=&¾´*´˜1@ÀÕP2ÇÂ. ÀJ(”Þ5"AÉ|)qµ_¢¼WRià(@Û¸BÝ™\Íɲ2¯çˆ#LÉ8ªÐ{-£ÖÃ;ÓÁpœçàžþêH’ß选ÅÖGîÃ0 ßÑ[ƒÞíwãìÝN×Ö–—×Ж[Ïñ¾CÅûñÛáà¼ùõâðëÜAãÝìÉýÔåè¯ïëáøôíÅj³úñƒÂóáºèòüåëòñ°ÊöêËåïîÓïðçÑäêæèÖùéí¨ëòé¶äêÿ±üíÙiÓãÕf¼ßÐlºÉÛ™èØ“žëÛÆÜÚu¡ØॖÑã¿mìó±wßÚ³…äïÍ~êÚº„ãåǸç÷ËXºáë•¿ëÖHàÑánªâ×Çôʆ´àÜ^³Ùض›ðãŒÜ߈ÇáÉv¦ØÚ ŽþÝŠv÷ðõ椤ðþ‘¾âå—ZÕÞ±˜ÔåÙZÙîÐXÖðǘÔÕ·vÙååjææÝZäÞ×_ÙóÖxÔÙÙ’ÊßÉFÿñÖžààð‚Ûäõ~½ÙÛqâÍéwÇÞñ|Ùá÷–ÌØã†ÂÜðÏ×î´ŸúÛ«©æÑ¿ðßÊ’çÕÎkïëÈ|ìÛÜ[á϶`ïÚÓ‰üè׆ïÝ¿jãéÞlàÔÏ[ßÖëràèè”ÑÚázÜÚÞaâÔÙ¦™ë䯵ñÖpÙÜóx¾Ãщ¡ÙصžéÕ¤’áߦ„òЛ³ÜË©¯Þæ­xìѶuìã×bîÚÕ‹óº©Æß߃æݦoçÓgã»ÔyÎÖlp»Ü׺ÊÉŒÁÕ¼}ßÈšDÖÈ€Àµ°t½»Ðx³»Ëu¬¾žÊ±È2¶Æ³Dg¸ÂU—¸Äy8ª±lgÇ bnÖµqBÔ¶mwÅ»ƒF»¾:¹Ç³O»°~*‚°¾N±½B$Þ`<`èf(¡çmhî‘1[Ã)fóv"£Ûz/[Ú°HžÑ«$èuBÐÔ¤O¥À¶']â¬gDZ'gï¹7‚ÞÆ9¥ÝålÆÜÖyˆ×Â?†çÆU–ÝÇG…Úë¨OýÏ{b×ájŒéØ\NàÝr[ÐëÙIçÙøçîñÞ}ØàÒìæÑM×ðàeÈàåsšñèœØéÐqÙñïƒÂòÝi–òâ½éðè–ªêí¾Êõç° èê‡ÜñòàØîæð¼âßèïåÖ€Ñô×TÎäí_Æî×^ÓæÓuyí猬×Ñ’œäÙU¶ëÕƒmèñ¨^Îò²Vßæ¯cÝî°iéêí»q÷ØÙPÃñáS»çí[¹ëÒWÂëçf´úÞoÎõÜ`·ì╆àòm àèc˜ñÞQ·â퀧ä倵ãå ÁØê…líð¬xöãÀ•õß•€ÔØÌpìçÔgÒàÉBîíÃräèÒEãáÞQÖð×`ßÜÖJáÝÝnÉÖÛCÙâºhóÕä\¹ìä\ÄäÆŒÆîÎ]Çëé{ËÛÌI·áèuéãà™ŒìÛ¶Kïå³›øÞl™ÝâÁ–øèºdîä²^ïçÔNõÐØWêÞØŒäàÇXð÷ÕaçæðiÍÚêmÚ×Çb×ÐôyÜÕãl½ÐîtÞÓ쎕ÙÂY¨òåg½ìËsåÛí–ªÑÍ}«ÜØ£›Þì”–ÙØyÙÎc©ÙÑx°ßËËhßØËlÝæÆØålÞÚš`êãÞ`ÛܺtèðÿŸÝÚ¢làÍÓˆÅÔÝ–ËàËxî·¹_ÅÛ×—ÎÄ؃À¿Ù”ÒÀ̤ŒÀÈ‘¾Ê·ƒ¼«TÏÂУ‘ï¶XƒÐ³Z¨²ÏkwÖ¼|“èÉ‚WàÄu8ƹ¼EÁÛÇ"‘È›¢Â…@º»Ã3zÁ¶A@¶­;q¼¢M4¥¢:GÄœL@Ú£QXʸIO~ªW^“e[®¦bd ¾if®ÎfUž²kQ›Å¥JZÒ¦E…Éw\¦¬„\pÆŽWËÀ·“ÅĈ~ÍÏèÜÀxÏÀ՛߱˜\Ü—ÅX·ÅؤßÙü–̾À¯ç¨á«É´¶t̸± å«ÇaÍ”À5Œ®Òmm±·hƒ§¨É§¯†h‘¬KZŸ˜h]’ºwÔ¶¢…e›©vk–œglq°?oq™D„—¢OJj®w€‡¶ezm©˜{lžcŒd¡[Ó“–Ó£YªÖ¡¸†Ê¢‚|›kŽ°m™¦Æ¾Ì¿—«º„rˆ™“·áӱܠ趥滹٪«mšžÂ±‰Ÿ›¯ºÍ³×²³¦â¹«Ãä½·¤ØÅÚÖÖÇï¢×øäæèËàßïÆßßîÀÝ“Þëï£ÕØÛ›¸Åä¬æÛÞœðÓÿ½þÕÏÔØíïÒñâÚØæõáéâÜíäîéñâíàßêéöôâÞìíéáïæïÔè´ëÃîÆ县ÛֆШá{·Úè´¦ÐÕ°º¶Ü¿ñÍÝáÑßÎÉëÂΉã¿àžìÒ¹¿éÁ÷ÂêÊÝÐñâʧáÌÞ{ÈÙ÷‘Ççà¸ðØê³ÒÃÌyµÝïˆÒÊéÖÕç× °çÙÆËðá­ÌÐ×ØïÚàËÝêÓ̶Ñï·¼çÕâÎåÜàªãÜ«ŸåÏÓzæâç¶ßË×yèàÕxÞÓÛŒßÝ»[éÔö‰âîÁißÕÕuåÚÑoäפWßØÜcÑÄÙdÉÝÞ¨ëÖÈ[ÏàäÚÓ׉Ý×Ý€ÒÞï¼ÚÆЮíå°³ÙÍ›üʧ™ð¾ÜhåÜÅZéëÔ†àϺ]ñöé¹âÚßuëåï~çÜÌPÃÛå˜ÛóÌnËÕâkÁßãIÊÝЀéÍöÃÀØÁ‡ºäât²çØvÑßë›™ÊÝc§ÖϤ”ÓÒyçÖ¤gìäxòÔY¤ãâ¦mæÔ²RÖéµo×â“ŠËוjÜÝÃZ××±båÏÿ9Ñû™JàÒ¬(°×ÎA®ÙÄ6ÞâzA¶Ð¹O§È¸0©Ñª$¤Ú¸7ŽÒÛ—ÓÅ<§Ì¼ªÍ¾aXÊÙWTËïDjÅáF:âÓfcÞËŽOæÃt.ÝÏ™¸Ï/ÒÞ“)˽[Ö¶˜=¯Å©GŠÒ2·ÍÀ>²¯O?â™ Tד82´¸?S½Í-Á¼;Z¼²/8¸ÚQE°îHF¸³[`¾ÎyJ€±iC¨Îk.ÏÊA]ÂÖ“cÌØ¿íƒIÏЂ6²½$ÏÔ‹;ÊƈÞñ©Àâ¼>¹ÔÅ>ÜØ“'ÉåÒAÀê®<ÄÕ›!´Ó¨%²Ü¼¥æ·.¨æ¨2¾î«a’ÛÅZ Ä«  Ó¯?1·´Jyã¶60²ÓtÜ¿IÓ&¬Õ*@Í¥N? ßX%qÔ?J™ÒV9ÛL2oºH0¶¹/ÏÃX3ÈæÐ:sðXATá•%~ñ +‡Â»D»ß¤h¶Â˜VRÔÆ6\ç㊞à»(ºá§5³ßÄl©Ú¼.‹ÉµVZéçZ…èÕ‰~ëÒŽíÙ™’ÆÝžSÕÎYHøå¦ÛâãÏbíöÁdÝðÛ{ááö×øÝ≮ÙÉF±ìÙPÃôÖ…áöÞ¯ãõòÿìïžÌëûãüôþÈÜæïÖççå±ÆßÙé×ôûèÏúäãŸåóÏLÛñ×kîÝÒm°Éº5¸àävçÜ…”åÑUÀá×x“úêÂŒÙݼfóé¬|íáÍnëáÔBôÚÊHãó®¿çÛÍR¼èÉOéâæ†Ûáêfžöæt±áç`ºç·K¡éá„öÛŸµëØDÒóÜZ¥óÝ‚žã䤋ãû‹ßûéuéð §ë긭ãå©yÿÖÓLÜìÂMéØÅ‘Êí½SÜîÎ…ÓÛçEÛåàKÜÝçaÒÙéhÚçÕTÖîÓ:Éì¬NÃçôsªëÛMÆãíc¼ìõjÚéÚeÅæói·ùísÿá¢vÝß®ˆÝ×¥ƒáתNîáßfÍàÆ^êê½`öéäWÚíÈpãÝÔQèéÛˆÜÎìq×ÛÊyËÓÝr¿ÔíaÞßòqËê×GÄ×ñ¡¤ÞÕˆ¢éÚ‘ÍÑêl½îÔ~¦Úð±˜ìÖ›~öåÏðÙ¬oçë´šæç•‹øßß^ÚðårÎê‹ÏÅŽaíê­LöÞ¼màí¤\äØžŒÜÍ°M™ÙÝtֽтËÖšnßιXÆÕăÎÃÖ˜ÆÖÏ~¹ÈÖQÅÑÅ_²Ì¯[×ÓÃAgÕÍ•§×ÁT‚ϹY‡Ò×EqáÖz<Øȇ`Úʆ/’ɼ!½¸¤:ÇЃ6…»+lÒËT‡ÛÀHKÈ£W8Õ“C<è>-¬‘NHÖºGP¶Ëi:Ÿ¡Q>¥ÊKS¯Ïo^˜¸|WœÀ}k¼¿nbf¼™3…Ï{)®ºsa´»f¾ÉtyཥH±¿€‘ΰ‹jѪŒu¾°sOзˡäÂÅ»ÖÌñ¿Ø¶è¯ÑÂá½çÂê½ÕÆ£~˱» £®²Sž¾^«·³ž¹®»ZUµ½xiŸŸX|«È^k£—hb¶¨k_—Îwj’³vcol?a••^qŠÈ†dŸ”Ywr›Ox„¶Ò”‡ bxt§Œdm¦¬~ ¨’\r²´¹ÒÄ~v6¥v^«™²i®Äyv’Àb„›Þ¹ˆÂŠwÔ¥´³Ü¯ ‹µ•ÒÄÇØ ˜ º§Ö¤ª‹«žÆÂ몴«ÕÉ®ïÇ·¸ÑÒ¹ºÛب‘â´µ—öÆÕÖöÑüÍòǾÓëÍäÇÿÉðÍÿÏØááÌÌ{¬·à‹åãðãûÒìäçëõæëÓäÊûÍéÝÿÞØëëÛåÝîìøåóïÖÿÖúÎðßêâýÛæÁöÈøÛçÍÿÑšÆ…˹ޡ§Ìß²¹ÏãŒÑÇ÷ãÜâêãËéÐë­ÒÏѯâÚîŒáÎé¸ñßˤìß×ëãÅõ’ÞÐâ€ëÌÿ¹úèí¼éÉÞÎëÖó”ÌÇÓÂíʱ®ö×Ðâ×Úaݲý¿èçäÒñéçæîÜô¿ùÒìÜâéèâòâåãÅüâÏ—ùØìÓòÜÓdóíÚ½æîÐËðãåËâÜìnðÞüxöæôxÝØêgçàåƒèÕÎfßÝ°|Þ×æ´Õè‡çÔÝs±ÞïvÝÝã†ÒÈéo¼ÈÒzuöܹŠúÞÃÑâܱ‰ëãÏnðÿÑí÷ë‚èÚËrç×çµÿÚÄtÙìßÀöíîÛóÛç¨ôãô»üÞç¦èÜùâËå‘ßäàuÜÍô”®áò¨²ðÝœ×Îäm±×Ìe£äÀs…ßÔ¦ôÞ¯mëÔ¤Œëº‹”çà´ŒæÞê~æÙÖkßñ’€ÞÖ©_Þà·_óƪcâã‡S¯×VÈÝ›4Çé¸0¿ç³@ÂÌt,ÅÅÊP¢å«*£è³1§â£F¥Õß@–õ5–Þ°-©ÏÃ)fçÁIJÐÏK\ÐÇ4UÝ×YU³Ôc>ÇÔƒ(ùÉD¨Ì¬!Ö¿’/Ùä€DÂâ¡E¢¶¿¹¼V…æž=M¾¾>3μ05Ñ‘I7ÝÂ8?·ÃCH§¬0<º­Y^ÂÔ[V¸ÆIEѾ$7¼³[X¦Ø‡Q›¶u`¶¬PnðÅ„FÏÅ~?Ðã‹.ÎÎz5åÞ¢#´Á‹åÍ…;Äç”%¬à±(¶ÑÍÏã¾6ÜõÔÒîÑK¿Ú¾Å×·#{Í—d¥Ï¤¯Ô•;ÉÜ­2=Á½>jͺ_ˆö¹;˜àœ?*·®2V½³L"׬3¶W&¶Û*L­ÊYl¹°%G‚ÍF(•å—8”̓P¥ÜDË‚»ªz=·Ôk2ÚÚ61Þs"méˆ6kÙ»%\Òª)¼í¹2¸è’ ŠéÒ0£Ô¾&’à±ZÀáÉCfåÇ2‚×Ä;yÕÖFˆáÕ@nÞà°ˆôØm¬éÛÄ Øî°_íßÝyæíÅKÝøÊMÚè°AëÕÕ`ÝÒÞe¢îÖh¦êÇTÅçÇ>ÆòßmëçÜÂïðמ½öù‚¾õò±sóçºÎééËèôÙ§šÿ×çoÿäãvúÏÏGâøòGáìî\ÄëÛ/µà»<“ëÛf•ãán‘ãÞtÏóê†ÙÜÖ¹wÜà®Jí׉YåëÇGäîÔcÚà·gîâ´màäÍeÑüåbÅíËwØéÍXªçè_¯îÙKÎîØŒsæ꧕êÛs§ïæ\ÚÿÛ‚ØðkƒÞÕ†uæä}¶òë”xíð¢ƒõå‚–ÒñÈTáïÄUÛç×|ÒåÀoïæÕLüâ¡OÛåØOòó¶GÐåàuéßèXØó´PßæÎ,¾àÌ6±ÖÑXÄë×\ÑøêwÔèÎSËðì_ÍÝãñ®ˆÝÒ®ŠñòàÕºmãë³ÐééË^ææ¸Yßè¿ZâåÄnçòÆ|ãñÀ5ïÛáTÔüÖWË÷ÏbðÝÒ^ÚéØ_éÞÓ\ØîÛoŸÌËg¼êæwÌáãnÆí到ÐÏ€¡ÜúªÞà«ŽÔëÉ„íÌŽÜáª÷妅áðÉK×àÉoÑÛ«ˆÝÜ næîÆkäÝÀdê爂ÙÐœ|زÛsÍØå¡Ë÷~ÐÊ«t¸ÇÔ‚ÐÆц̾̃ÒË͜ζۉÊÁÄqÑϾ`À¹â®Ù°JÖ½s°²ßl¡áÂ…DìÈxr¿á|YÌÓ¹…ê¹/šÐŽ>츈EÚ·°AlÒÄ8…ËÖYu½¼^O­]MÕ—6ZÇŸ`S·¼OO—žOl¾¼Z@¸Øa\£±bo¨á{S§×g.£¼‘q…ª‰p±ÌŠD¤Æƒj—½©?ǹ¸H„É—ŸÆÄ¡šÊ¸©œÄ¹«ƒâɘξ·Ï¬ãºÎ½Ûµ×¶ÝµÔÃâÈò¯ä°½³£ŽÍ©µL©Å…bÃÆ—IÉѺȪªx«Èƒ‚œ²…³¦ÄgNœ¯w{»Ã}e¤”N{«³Šqˆ’jk{¥B\ˆ×|w½hhy™Y}‚°‘Ì¢¥ŠÏžmnÁ¡¿}v©›±§•½rÃœky>˜kœx¬‘ñ•³œ¼¯ÒÉÓð Í‘±žÑ‘°Ç©w“«gªª¿ÂÉ­½£á«´ÚÁ¸¿¯É«®ÛÌɹʬÔÉàëÎèÊÁ¶êêÖÔÿãÖ´ðáСÐÀ¶ŸêÄú¾ÿæ׉ÎÙß ½Îñ·ìÏÝ‘òÀÔ˜ÊÚéÎéËßÚÿßêÚåìÜáÕÙæÖìùø×äàëß×ÿ²ûÓéçøÏíÑÛ–áµÞ¿ÒÓÿ¿ïÍí„×ËÄ{ºÙß »Ã橳ËÚ¸ïÌë×æëÕÖÇë×Û‡ôñÉ’ÛÙã…æÑÞ»ðÖÜ“óÂÿÛñØÖÆßØäŒÑäü¢æß×ÃçîÔìÔÒ‰ÙÌÿÁ´äÔÎÆãñ›½ßåÐéÎå™Úë©äí—˜ñüÌçæåæÇãÊݾãæíæÑÔÎÿ×ß…éìã€ßâÔÆíÞÈfÔð§vòÖ×eòÔ®WÖâô‰èÚÐkæÓ˜aõÖÎNÞ×ÇbâÚÚtËÑç˜äÑívÃ×ÇVÍ×ñ–Ù×Ô ìÛ‰‡Ïóª˜ðàèÉÛðÚˆìí ×ôåÅx÷¶é°ÿßÁsìéߤê϶síÕ¾mÎÙý¹òæé…ßȳ`çëÁWãäñŠÑÞä„ðàÍv§Ñ»k´ÙöfÌÛúŒÏçß…­Ôô¬¡ÆØó­‹ØñªZÛò‹hèçf‘ÐÊ‹tÌìÃJßØ«Nâã•_õñ \ßã©_çá¹Qó×»AÃâ~1ÖÛ¸2«Ô¸i·Ï—*Ï×’.ªË¾,”ĸ.£Ë¦.¢ÒÁ1ˆÙË'¨Þ³´ñµ6£Âæ=H½Á@RÒ²†×áB/áÕ[>×Ë€iÞÞz9èÚ›"¸Ö°+Áê+ïÚ‡"»Î¸K´ÉÇŸÇ«B¾½%fÙÃF1Ö³47ãª=3ËÙC?­ÚaE¼½Zr½µU{àÑG^ÚÐOP¿ÃM5¦ÐsIšÉX8Ùµc`ÑÉ]>²ç}hßô† ¶ÏmBßÌo$¾â—$äã¥YåÚYpñïš(µåÃ)ÈèÒWåÔÃ@Óß×Y¼ææAÁÞ™-ÓÌÄ/<î·7¿ê›8wå£0¥ÛÜG}á¿-Wܺ%…ÓŸ2 §¯9]Ï·R7¥|-zà¢h'­ÁATÌÎM·Â)]ÒÐB#¥ópD¬ÞYFŸÄ£Ñ¢kͧƒ'Ÿ¾])Çù‡7È«)YÞ$œÈ‰ÂÕ¯H«ÝÙr¢Ú—o¨×í*åÛJEÎìk’Õ&ÎË6ŽÝÅ'ŠÝÂJ’×Ýo„Ü߆yÐÖP~ðÎhyêëËžæî½äîèÍýßíéÿÙßDçÛŒIÑÿêÔâçà©Óåæ•áæà]ÚìÞ‘Ëïã£èåàƒ¼Üç‚óçÙðòóºßéìÙïíî¢ÔíäÂRÆÿû«÷àÓgÚèÍAÏåÒPÝéî>Àà¯H¼ÔÉa‘ÜÓUªáàa¿ìÃS˜ôÛŒvçü zßାöñÆbÕ×ÂxõÚÊ‹âܧHÖåÐlÉáÎTÑäïiâëàd¥ëà…Æíéd¼æÊg¨ÙΞ™è⎯ôòc¸ûÙuÇë诳è㚺éÝ‹áäé—sòÝœ—ãû©âð ‘ìáÞ\ÏéÎgùÖ°bÝó±UññØxãåÞYõÞàXËèâVçßÅ?ÓëäbÒàÜhÓâÀ~ÙâåQÛèÖOØîÙqÀãÕgÝçòaÂïÙ½êë¾}Óô®Òæå©‚ùÍœ‰åþÓ}éö¿§äÓ»vÿåÂaâåÒZÝüÏnòéÆnÏÓÍSØïàpåæàSåòàxàÏÝQÈÝáxËçâdÞä÷‘ìêÕÐâ]Úéã]­ãä‘ âÖ¥ªÚé ¦íÙ¹œêÔ´fÒÙ¬˜èí¦–ãçÓƒÚÒÖkÛßÉ•áÖÞ‰ìÐÂmàÚá}ÛÞÖfóä†z×ÁÅ‹ÏÈØÒȦiÇÀÄœë­âˆ»¸­yÒÄȉÃÀ´JÄ˺kÓÌ·yÒÇÌ”ÜË°F³ÖÐuÝÏgZ²ä©¸É•Ù»yxÐÎxƒÒÀ„$¸È¹Cä½¢PæÈšcÑÚ GtÉÐKµÍÇLàž_HÍÊ`i̧BaÛ…`B½ MqÈÌq`²¥cZ§ÊoW¼Ïgj¯½riš»qK¥Àr]eª˜S±‹o”À†vÇœœ_†¿|uÁÅ N­¹‘Ô¶¦’௢êÔf¬ËœWͳ½°Ì èËä³²®ìÎï²éÍ´sز¥›Ð¡¡³×±¦ŠÐ®³g’« ¦Ú²¸r» »Ÿ{»zš¤˜dk¨ti¥Å‹d£va"±´|@„…kYpª–‹Ã–|•¹ŸTn•|•·–¬…‹™v„˜µÞ¶ÁaA¡~ ³em’Œ|¤±vZ–¯„‚¶‚|¢½`®¬¡w‹—ƽθ­Ÿ×¬y‰ù«½—ȪÚÐÌ™¡¨â’’©Ñ…º‘çÙÓ·Ø¡±ÜÚ¹ÙÔ©­çÔÚÚéÂîáòÞõ²êëéíåÈî’äÙ¿–ÞÎÙÎîßäÞîÍçÏèÅÿìÖñÚèãòÍÿÖôÁæáúØæçÛáñØîÚõÓÏãôáþçï×àóÉôçüÆæÿë¸äåó±äÕé¥ÓÀÖvæÓ­eÛÔºŽ¸ÎÙÍÏý˜ÌÖæ·ÜâåÏÂçëÜÝ÷ø¸¿Óàó©úåÜãðèÏåçݼíÔÿ—ÚÑîŒ×Èõ{×äå¸ôßëÑîÒ÷®íßøÉÚóéÒÙ×ÿÓîÒö–àÎøÄéÚïàÙáá½òÞþÈÿÚÝϹ÷ÖÝßÖòÒ¦ÖáÙÍößßÁìääs÷íΑÿÞ¾´ñฆñÇÙg÷ÚÝqàìébèß×]ÞÖ¿`ôéÈ_ÞܹêÍÄMÑÒëèÞÜžÇñê‚êãî]Úèê«×Öç´{ÜÙœ¹äûÁ»èäסàæ¼g÷ÙÕßÿݾeßÍå˜ôäÖ©ýÙ»cÙèÁ½áßã¯ìôîoÛÑìwýÛ¸>ÞÖ÷–îØé­æçàmàÐاŸéã^¾ÜémÔààU¡×Ók¢ï㤜Öß°œâÜŸx×ÚŠuëÙ«—×Ób€àâ½nØù¹Tää³pÝç›Tì×¢Qçð·]ÈØŸPóáuXÔÍ&µé®¹êœºéQ8Éê¯,ªß£ ¦ô«œÒ¦ºÑÀ!¤å¬(¥ê¥$¯ä»${æèEYØÒ=fíÃ6ˆÐ¶\CÌÓ\DʼOWá·u(ÍÅœƲŽ ÌÕw0ßעΫãÑŸC“§–7só¨J:ì±:=Ê£:ä¦ 4´·H¯Ç8CʶYlÊÁPrȼNw®¼U?ÅÖS>žÔs=ŸµQÁåsHÆÍ_3ʹ’Ï×…YÙÁF ÑØ„#ßñ‚#çÃa1ÛÕj&ÞÖ©Êß²Ùï`6ÆÞÉ'Ëí#¿èš#ÔÔ˜/¨ïʹæšW¾Ãš)ãÌ©¡î¹('Ê»Râ® ºÙÁ=4е6$ÝÇ@/¿­4<›æ=4­µ4%¿Ì+$Í«V!®ÌX4¿ØT-°ãW)zì‡(Õ¹c\ß>3¶Ïz2gРZ³·ƒ»€H¾Û®? Ü© uã§LÂÛÉ9©ç×4¢ÁÀÎÐŒ$ÌÈÊŠdá¹0›òÓ`¦ß¼5™ËÞ5€ÜÞ©‘çÚK­îÐ|sæû«UåîØÔâáµÑëê¸LìêÈSØÞÆLé×Ó]¾èà~¸ïÃN¾ùÑYæÝæ±ëñÚ[¹ìåŸìÜþS‹êá±Òêñžÿë™Ùåâ¡ŸÚöÚnëúðÊòêÏ{ÖÞÒS×ÝËEÌïÑDÔíÏB~ïòr³Ïðp¦÷ÓwÔã쌂èðÄËî俹àà›{êóÁ]ïã¶rêå®±äâßXâáðs¹âÌ]ÊÚÍ=ÖìÆqÉèá`¸ë×ZÐåéz™Ùê}ÝçíyÁðÝXÑìì‹Žîìp£ëéœÚöÓˆ›ßñ¢uéÕ“ï딫Üç¢{êçÍBðìćÜìºvóÕÑsÞíºQü×¼dç×äjàéÙ_ÔÛ¼vïäÅvîêÖ\áÛÕZËÚëgââ¿jÔâÓoÑÿæ\Þãé~èÚÙ‚¶ÞÙ¯á÷±³ë䦨ÏßÐmðë¹…ù梂÷ÖÚwðìÇyæâÄdúñ§…îãØbêßßiæáÝ`ääÙaóØïzêÖ½fÝôåsææÕ{°ØÜâÀïËßÝuÌßÛ®áä|ªÝÕŠ³ì䦸ÑÝ­’àÛ¬¡ÝÞ–½Éô¥‰Ðõ»fðÜÛzñбŽø×ÃÞîÈlëàÆŽæÿÁdÞ¦å Ç¾æ ÓªšÂ»ì™ºÂÛÏÃڧҾьؼ°¼¿Ï³ºÐƒÀº¦†»ÀÆvÑÀ΃¼ÌÆ‘ÇÂÏavȺn>›µrŒÉ»rnÆ«•F¯À­=л}Â͵XÕ®³:ÔÄ eV«¦2}¾¾md»•sYÁ^T¯d> ­Yuƒ¼J_¥Tiʺ€q¯Ìuv—½dX¢µ…[¦­U`¬|Ÿ¨oŬ…Ƹ‡†Ñ­œOˆ«‹„ÅžÙÆÉ«óÍâªÙ¹Â±§ÒÚ±ÍÂÖ´ÜÂÃñȵ¦Ñ¯è—ÿ´Í–¤‘Ѧ”Â̯¼¥Ê®Ìc‰¬³ÅĬҚŨνޑoq„²x|ªÄ«”—ˆ‰ž†„“¦ye‚—j…~Œhy}xh†‘”xgx‚v‚rˆ‹œ‚t€bcœ}©…Œz“Œƒ…™xuŒ§„­¤£¥‰—¨Éœ§œƒ¶žÏ¨–¡ŒÙÍ„ÒÝÖ–ÀÉÚÅ­ÀxÀ í“œ”ÕˆÈÝ柹·Ç…®î»~ªà骻ÀÀ¿ÝÒ·ÂñÓÜ‹ïÕéëÜÜÅóåçì§÷Îè›ñÍñÂðÏÛ‡ÈÐû¡ÅÊÅf²¡Á”ÙóëÆãÇòÉîèáÓðÖéÄÛóçØòïïÊòçÿÞïæãÛÚõÞàÔôïóÝìóÔÒôäéÆñÄËlÚÞÛjÛãæy¥ðãÀàÉp²äؤöÝíÍÇóõÒÖõðУîÍðÊò×òÇÿæÙzãôÒä÷Úñ£ãØçxÀÉÉfãáÌfÓúå¢åÑäo³é° ÜâÐ^‰ÚèÖÿìýÃôäå·ûØÿÆØã俾ÄôÐÕóì×Öï眑Òõ§¥òÔì­ƒïÜÆkèÔÅzëäÛ­øâÔuãÓÌ[ôΣMëéÚfâã¶LâŵgäâŒrëܼPÏÚÏ=ÉÝÜRóÉ°BÖÛåSÖèí€ÜäãKáåÚX‘ãê„oÑãšÐî–¯Ìá¡_ðÞ¹uîå£_ôèÓkÙîçÞìÏ®øߪ†ååÞmÒòë|äæØ íõ±KßêäQæçŸDêäØZåìÔ‡¦ÚÚkÎÍÛV¸îòiåáÍNµæÒg˜Îða‰Ú씋Éñ|cÔätiîØe¨Îë„MÛý¶>æäÆbÒæ¥TÊñ“Oáí¸HÞè¡4ØðÔ&Èíf.Óñµ!¬Ú§%Îï+àá†ÒѶ³å£¯Þ¢¿Õ´ •ÛßѬªäšíÆ?qܼ%^íÁ6rá³*IÆÐM2ÔÔSAºè>'èÉ“¬ëœ¾ë{ðÒcÜϱ¾Ó¡…Ý¢5 ì™NÁ½^Æž(h㯠TûD­À$I²®(FÕÅUMÆÍ 4ɺ;aéÃ9*¹ÒF&¸ì>#ÇäL2äÝ;̯‚IÍãtÎÞCÑÏU ÕñÍEÏìx&Öã]8ÞðŸ¶êÈKžë¦1áòÈ5ÉÙ·8Ìç¦$­ëx)Àõ¸"ªê“ ­ë¥ãÜ•+ÏÆü`ºÎÊ5‹Í¼!PéÄ5ÙÐ(³ä­œ SÍÌ95¥í+!«ì3%àÄ,A§Ö>žäW¡³2$ŸÖUŒÃo.Íâ]GÉÖP9¸ÆˆÍš3GØ™FÒî‡2MÜ­´Ï˜W—î"Áö×€iô肧æ±v¾Íƒ<²Îª,™êåZ­ëÃ0žïØb~ßÖ©ÖчŸåÛq ÝíÆAÿåÆgÒãœsíä³¢çøÊjÊîÙRèäÁsîÞô˜ÖàâvÚçÇ2ÅäøÊååæsÂçòÊñçí~—ÿð¤‹êæÎúãËåõê¦ÓÝÚåÐòîñÎèëì÷÷ëÝÉöåÓ?ÓðèhÄæáaÁëæ ²çÕ·ÜØ€Ïíì…¢çì¼ÊúêÅÔøì°§÷ß´gÓîË@öä¼Íâä±lÚæÞw£Üç€ëêÕ^ÿíÈ_×âÞYÎÚëlºßà€¨Ý祒Øã…¢øämÄíæYÊöÖ²ÍàÒŽßó‹§ñôˆ±×ç‹ŸôõÁíßè‘—îÙÄuÄݲsúí „ñë¿gîÔÊ[èÑíjëÞÎZíÛànãÖÞ[äÑˉÝìÔ„ÛéØPàÊÝ{ÃÍÖ?ÖØÙgÈÐçW×ðïqÒóêsËß䶚âߣ‰ö库áñ“èàÍ”ïâÑãÚLJñßÒiÔÔÞuìÖË‚òå·xÐÑÛsîõåkÚêÖ}äÕâ|åÑïrØäõnàèèxåØÃY£ãÝc·ääãâÝÞãܨ§ïä« ÏÔ¤™îÏtÖ๠â×®¨ÝÛª†âØÍ~æÛÞ„ÓÓÅŸØÞ­ŒÚÎàsÝϸ„÷Ïâ{ÿÃΤæЖ„ÄÉљѯĒƴ®¬¿¾î±Ø±Ý©Ïºà©Ð½ãŽÚ®Èy¼³žXÅÉǔܼ™hÀ̽Sü`ÃÏ{ÁÚ¼~w¼–ƒ¤ÔÄl‘ݪžV»½ÜÇ.˜ËŠ¡Ù¹ÅU·«¹Ki¨ÞQX«¼h¾¥{N¦Êd?¶§xm¿Âf\ª¦WQ±ee™§yn©ÍŒpªÔm^ Å‹y»Ã\w¤’a„²—Y‰ªeu•¯\¬‹WĤºG”´‚´º¬­ªß¢Ð¾ÏšØ׿©ßÂÒ¨æ»èÖÐÁ¯ÿÖö–úÃ͘޹åÒ·Í’ç·Ú•Ä Ì²³ŠÍ‡¼¦¦¶«™¼‰ŠŸÇ—žŸe}•¥‡ŠœÊµ_wµ¯§­b}¡—¦t‡g±“‡xƒ}™hsd¡dœ”˜`wh„j`˜š†u”ŸˆN³v˜¶‹yª“}šwˆ›¡Ë™gtŸ£¿zÐœ|©³{ËÐÛ¬»‚À•Œ¹ŒŒ”ŹֆµºÝž§–¿žÇÅã©£ØíÄÜÎᦢœ½Žµà×ËkñÁÝ£òç°…õìÆÌìÖáÆñÞåÂíîÔÕðÚÝÀðâÿÀÛ¹Ø{ÒÂëÓñÞá½ß÷ïÃëÑïÖÄüîâçÿðàöæéãòäóÃðÝÝõÞúÎø×òêèæíØíÐø¾ðnßÝã‡ßäéyÆÑ뜯éã´ÖÚÕ¡çÙç¾ÞñÕÝãÙÎ×åçàÈÕñèÕ çÑæqèéÚÎòõÑ—æÛð«ßàÚœÜæׂÖàêÌüÕâ¢ÎëúnÓØü‘­àù²§ç÷ÂáååÁàáî»åðø©¥ßØ•¯úøÄãÜðËêïÝ’’ããØòìêÂÉäØì™îòÝœóðÓ»ëÜ´béÙÞoïåÐ[åÜæeéßä]ØÚî—õÔÕ¢îã±OÏç¿2ÙÞõ¦ÐðÒNßåÖ[¹ËÚDÇèóuÕîÍl½äÍ—zÅヮíè–™ÛòuhÛÛºfÛßÆpâæРïßî–ÿáÁMîÓÙ`ÎÜÍ£èãåbÑàÔ\Ûèçuúæßo×Þâ`ìëç~Üßí}×ÍÑ\µøÙ^µèáÅéÙQžÑö¡˜éÝ®’éÑ»”ãÊ©aåá¬fÕÚ£‡éÝœlëæ¶WÍâ©@Ëé¢rÕáf1Åß½IßàAëå¦3ïæ•$¼Ü\¡î¡)ºè‚Æá_#çÌ àÁ6¡Þ¿=²ðŸ£ëºšîª%µêŠ«Ü½#‚áÓZÛáNÛÊzÆ´B$ÍÅ6VÕÝaVäßÙÖ–)²ÞwÊäm?êØ”ÍΰižÄÊAð„!3»£J:Ǹ#Gß!*Öš&.©Ú¸À3FĹBDÓ¿+]̲%"¼É"%½ÐC&‘Ðp'³ÛWF·ç:ÑáG×Ï_·ÉsÙÓL%êàz Âå}ðÜj%ûÖ¹ãë­#ÈÜ‹Üõ¼*äï³Öí…*ÚࣿÎîT™Õµ·å–ÇÖ¢ŸËŸ~û³"9ê½91Ö»%›éÓ2rÀ¼Vì£&oЯ8&Ê×I¬Ê$7ĽJÄ",¡ØP/ÍïB!®·†à!ŠÛT4gÑl0—Øk+dñ¢KE¼“/ŸÔxCŒÖ›ÀÞ£`Å•I±Ê¢Eœï×™Êà#•ë¥¨ÒËAŸãÕ6uÙº „ø½D¦ðʃ¬äÄK§ÓÈ=Ÿåߧœßè­aä⪈çè˜ÃùðÚsúôÉbáîÀ˜öߧbÏáî‚Ó÷ºHÙë½WËåÌx“ëãÅéñâŸ×ççÌâßñÂêåéžîäðŸÞöä§öåÔcëáçÌìâßÇãÔÑGæà®=ÌäÖXÜëÛc…ÙÔ€¡ëêw´üÎ\ºàìqãÖy•ç湧æäÐÓåêÝbÿë´¬îåÃÀçâÌaÍÕØA¾ÚëGáâÛ\ØôÉÆáùY¼èÞ^ÜÞßiªÕÝž¬Úæ\¾ÛéHÕîÙ‚ºñôœ¢Ùò™‡éèrŠû㣖ðë´‹óî„Ñì佄ÎòÖsõà»lìì³éîÙ~óÒ†ÐáÌ^ÿÝáméÙÓváãÞiäú¥ñÛÝ‚ÒÙÜ_ÉèÚŽÜêÉnæÞínÕÑÐdÔÚámÛâëØãéæÁŠâ瓦êÇsÅÎÏÁsÛé̆ïïІîìÁkææç•êÚÄZðÙ¾ íñÝyâåÕ÷Ï݈üÐÓkààÛˆßÕãaßâìiÞèÝŽ¤âø’ÈÔánÉÓ¼sæÃôƒ³ÙÛ‘¹ßÔ±Àâã“ëÒ½©íغåÓ¬ŸÑâÔªäÚ¨wï×æ¤ÝͲ‡ÜË¡ƒâÖÌ—ÝÇ¿âå÷–ÖÀ͑Ƶ§qÒÏÒ¼ÙÐØƉ´¼º?ÇÈÓ~ìɺÆÈÖ•·¸Û–¾¬ÝœÕ¸›<ÔµÞ¼¦ëÀs§ÞÄb­ÔºDêZ‹Í¯}¥Þ³–×¼»NÅÉ‹Ë¥i¬ÔÂ…eÈ´¼H±µ­VÓÅ»Oƒ¼a^U¹žjUÌttl³g=M–žhj ªYVµ®TU³Á~i”ÄuhºÄS_¬ºfu™©yuÁÌŸSt…r¦ÑÖ~À¿¶‘£Ò£šTÉ‚ŽÈÍ̲˲â¨À¨ä¾Ø¥õ³È£ë±Ø¢É§À´îÁå¨Ñ²ÑŸè±Ï¥xtò‡ûÐäÄßÃß¼tq³äÁ¼§plŽ¯Ã|¿¬n{€ˆm\œÝ‹oª¯³pŽ’>™—°y‡¢žžŽjB‚—€…¬€K†u[zt¼¨®‚ŒLQ_·c‹\™}ub‚Qt‹ƒƒ…gŠ’„~œœÂ–¯€yŽ•©·‰à„¸†—§“®—m{¼”˜“´ÅÑš²¨·…»{Ê…´ÜÇž›Æ¤®è‡•¬ß¡¬êÛ§ÕÔЦÙÓáÉÕäÖØ´áµÊ¶ùà­Ï×Úæ“ù×í·þïÝëæÙ±ÂÿÒÿÑðÍÛšÎÌÓŒæÏåÁáÛýËìöê¾ÙçêÝÿäúÓêÐñÂôáÿÈääôÁÓùÕí¶ÿæëÒô×ëÚèíèwÛÒ¥nîɾgÚÙñ¨§ìÂiªòá|½Ò±‚àËãÌ×øäÍàÝÓíËôàÍÙíݲyßãÏæÜø»µØÞî©õÇÒsÒâÞ¥ÚÐþ~ÙØïlÑØßk¾ÎÜrðÛëu³Üó¾×ëÁèåõÏìåëªÏôÆ¿ÓÕª¬èìÃÍ÷ÙÔÇÙêØÅæãÀäèæà³ÖÖ§nÕËÿ²êṂáÞÊsòàÛ“àäÒ]ÊèÆ\êåÉgæá³UÑÜ‹rïâÞbÀîØ]ÉÛã›íóÄ]ÔÒäcÈÙÞaÓäØVêàÊ^–ÞÞ¬fÓÓÐ}ÄßìÂiáêÃ}çÕ©kéåÃmÞàñ§øÖ¹fä⪦òßð‰ãóÜmãáèsìÒÄYâ×Û‰ÝÝÞHÜÓÈJàñÈpŸàÎc°×ÇR»ê¤=áàãS“ÙÝf©×뜪äñlˆåì˜páÕ”–íÏ{¥âÊtIÂÙ“@æÞ¥IÑÈ}dåÝvAìÜ‚KÏÒ~I×ä®Ñß~ÅØ™ ¯Ü­$®Ñ›"åÚ©*ÈáÇ*´ãà"ªÚÚ.¿ÚÆ;wè£ ˜äͦó°¹ÉÇ/dòÊ?qÆÜ3‚ÄÑoÂâ22àÐI:ÝàGNÐÒ•¼â’XÄäq)ÒíT ÖÇ‚«Ý£$£ëªÞǾ.¤ä­1lÒ¤qÔ§4Zи-&Ĥ-;Í£IrÜ´Mέ)Yã°VÙ¼-qÅåR1·¾s?¿Û;SÖÓ.X×ÓŒ0½ánÔÜr6÷ÈqØì¶%×ÚL)Íð’3ëÜç'¼×®ÔÛÓ3ãðp%Îõ©/Òä¡3ÖÝÃ.ÈØäí¨TÃÊÆÔ¹–V­ÐÁ)¡Çº?&ʸYܲG0ÏÓINïÈI|ÊÂ6–ÑÊF]ÁÆ+ËÙ,VŬA´*ák¯¢*-¢Î;@’Ä|.®ÔNEÀÅ[G Ø”&Èð‰(·Û¤,‰Ïy8Âȼ×ÞŽ<Ûq1„ÒÍg_Ç—o¥ö¾0 ×“*–×ä„¿Ü¡0—ÝÖ(¯çËGžßí”õÜ…÷å…†èÙNâÜÊSìâÁièÞªWàèô×ôçä¾ëÚÉuà×Â}ÝíÎH»êãXäÙÖg×ðàtééîÑöøà·ÞìòØÕêð’¬àéêßîç–ßêãʘàúÝÊÿíÇ„ÞóàÖïïÛa¸ìÛWÎïÈVÏàß±«ÐÙ§áÞzÄâÚjŽäêÛ‹—ì݇žõÝcäå±ÆæùÁÎÛå»ÙéÔfìÝÔTÊàçUÐåßjÑöÐZ±ÒðSÞÌäpÙÛ癡èÓ§ìÜjßáÞk¤íñ‰«ÿÚ‡–î╶Òï®·áö®âäîªÁóïÞÕãÙÞœÙç©Xäð«€èéÇt÷ÒËhÝÐÐbÿñ†ŠüÜÑeÜÒáOØßÚŠÞ߶gò͉âÛÙ^ÀíÞ^ãßÖjÞîènðÞåréðêUÓÕ垆Üì–³Ù寧ëì¥ÞÐÆ·ëÏÉ~ìéËŸúÝÇ`ààÌŠêι‘Õæ©}ýá¾_ãëôyôÎå•îÍÜ`×æßqïÀàuá˸ZÚÛئ«àÞšªÕça½ÉÕy¹Üð’µÛ훨×塾ÚÛ»¥à놚ÏÚ¢¶Ì×›ÜáÕnÖÖÖ~ÖÛÈŸáóÓÖ¿ÊtÜáÆŽïéÏ€÷°Ì•Û²©kƶ¸~ÌÀÉ×Á²›Ý»³ÐÂŽ4ÓÄáà¼Ë}ÖÆê»Å›[Ǫ{ÈÕ›LÀºÝ˜É¯ÖrÍ¿¯&²ÐÂRŒÊ­c>»«ƒ‰à¼nR¼´¤3¼»‘@Ög¶Ä½NnÀ´]ÆÀze°®bdǯF\µ¡[P¸x[¶µ‡Z²¿bK¦Ã_eš–oc¹yy–ÑpWˆ±ŒFÊÅ€p¢Í€z½ÂË·Á±—tÑœ¢kϾƒÍ½Ô´å®ÿï¬èϼ£è´é¬Ø¯Ë¥ã¼ç¯ô­Ç¯Õ²â»É˜Ö¦Ý«ä‹¯xë©ÞÊ㺘j¡|ÿÓÇ°µxƒ•ÉqH˜ˆn‡º€j¤¬•Ö°¾‚´´œirƒãÃÅ£¹™bgŠwe®h^”UR\¦h€†ªwiiªp7¡“›¡’€n”š™£–il¶•_’¼n€›¯”‰–«tÆ„áš¹wt¢³¥ß–Œf›šµ§ØŸ½¸»–¬­å¦Ü­±‘œŸíºÅâÁá»í®ž½×È¿Ú×¢¤â½¥‹Ì´ðÄøÄï¤ëÚãÁÿÆæúê½ì×àÏàÁðÎЭæÊÕ‰¿´ÚhàÄôªøÞà»þóíËçàòÕúÊäñëéÕâÚûßò·ÚõÕìÞÓèØíÖøÊïçûËÿÈæÎäÚàpäÑòïÖ¯aÛÓ绾äì¯ÀÚõ»ýæÛ—²Ïî×âëȲÉâ峩âÖìµôãÓïçÀÞÕÛôÞ¶óãÓgÞàݪåØø½úÑð½ÙÙÝÊëßñfêÜòˆÓæᯣÏàŸºäõÂïÔàÆÒÚÜÉöáÕåÞãàÏüÚìĺìßÄíÐÝÙÝÙ转íåΪèàá¬ëæÉ“ÒÞ·fýåí¥üÛÏWØÝÚêÜzïÊè_åãÇyâß°wéÙà¬ïèÜYÕÛæWëÞÕb´ÑËUàÔÜ_éßÍfÛßà²éáаäÇ~œßã»ÂîóϹþðà€äæμÿÙß–ýÌ¥­ÿÛÑšõß©eääÝzíãÚzîàì éâßtâèîÿâíæßì’ïÖÖ©»óܱÞäqÊÊõ—·áæ™›âÞ˜£ÖÓ´µïÕ¹—ÖખÞç«ÉÓ¢‚ÓðÜm÷è»Xáó¢qÔÙ¤UïÛ™=ËË…<ÆæŸKæÞ’ Òã‘0¬áªæ’ÀßY,Ö˱ج¸Û¶¦á“¥Þǣ䨙éž&¸Ú¨%wâºF\éÛ5[ÎÙ5sÚÕP0Àï>=¼Ë\OäÒeÆÛ ßÓ†"¶Êk>Ö܃&•ã°»Ï¾ ÷”4QÎÎ2Jµ³E:â (w×¥ ,³À8Ë´[_Úµ0V¾Ã-Mι71ÃÒGz½ÐG<¬ÐoË¿]@ïÒ[ZÅÒƒ ÖÛf4Þ͇ÌÒK]í×~È÷Š#éØ‹òäÐA¹ê®®êÁ*Èê»1çõ˜±ö¨Æã°&ØഴðªÂñ²ZÅÏ®RŠÎµC$ÓÌErÒ¯A•Ô¼ƒÞ¶rë§#CÞ¶@AÄÊZ ÀÒE%±ÔP$Ѩ=!¢Úa%™îZ4Îl0bÖo,¿åg0žØIX¾×x4<À9#Dì¯*è†I«Ù£!ÊÕ»*§Ôœ+~Âœ+©ÏØ—Ó»:§ê¢8Áμ+îÈN†Ûµ9°àè}ŠÕä<˜ßß7–â÷mÁâÕsqÌèrPËã¹aãðÑååÞÒZéÙ¥`Ýá²SÌÞÙc½øÑV°åÙh´ßÇMëúØ|òúÙ·íþÕ‡æðÝréáò³eúç¡ðݘˆîã¿­äï×”ëåõÍÿ××oðéãUÄÓÿZÎììpáãÔ]öçw•îðy´õËdÂÝæ‰îô•…Òè¹zÿÙ–TÜç»TïÓ΃ãù„Âàá·`ëÝá{ÓäÚGÕçÕ\ÖßðfÁáßL¥ôégÎæàxˆïÚl¶îçuíçÚ\¹êõ‘ºâì~îÞìÞ€‘éØ‹}íé­ôè¨îç™ÝíÊSáéÅbÞ綠óâÜpã÷ºfÕïºqØúÚàäÙOñéÌvÛóËÙäÞgÉö¢FÌåóWôßÛhèÞÛtÎãòoÚÐëlÞöÑ ßÜ’t÷öf§çê~›óóª“çè‡üëÁ‚òóÉbâîÍlìó¿qýÛÍ€êìÝwáíÙsåñÞ‰ãܧïîÞvèéìuâìäMÉåÒx™ê醱òävÊåÞMìàçž·ëË®¹Ø櫼âẗãØž›óÜÁ–öÕ®«æÒizäáàeãÖÈãÚ±áêÈÚÒ©ŠàÏ€„íÛ¦¢â¾Û§ØÀ؛ش؃ÐÃÇœãÂÀ¡ÔµÕÓ©¼Œà±à Ü´å¬ÏÄ֛¬Ì|ֻҫγ¼YÉ£×±ÎļFº°Ñae½»v¨Ï­t‹Ü¿p¢Ö²ŽeÅÀ«pÖÈ”RнŠcÆÆ­eؾºVÁ¶ÈGÓëgGýcMµUiÉ­YIÀ¾Zw–¤^`“¸‚Z¤½[f“³q¯Äln©Ð‚k³ÁpmÖš‘˱ƒˆÂ­m‡Á®Þ¹Ï´˜z¸»”œÅ¥Ÿ¥Àªô²ËÂÌÔ¸›ù¶èªä°¼§ç²ß¤í¯Å¦áÊâ—î¶Ô ²¬Ì™å¶À¢¥„Ö£¾³ß®·nÇ¢¸ˆv¡¹|o’a‰ÂÌÈ®„›¥¦§¯ÙŒ¼‡}¥­žy‰Œn¶“in„g‹£„[Šb~q§‡…“u™H‘Q¸ª•ožã ‰­wor†e^°}Ÿ\†Ç‹¼šž‡Œ‡Ö–€Š¾Ž–Å餓·°¯Ð–¬½¹š³ÁÖ–ºÔÊ£Œ±†ÏÐÍ›•Ñá“ž­ÞšâµßÊçç–›ãᨉµ¯É”çìÔàãáúºûÙÅÄß涅ÝÛÙ{Ãëܾ×Åí„Ûξ…ûãèÉðçÿÉûñùÐêçò»ðöðØáÞæâÏý÷ÑÌßçÕèñàéáé÷äâæõÛÎóæàÕææàšÆÛû´óÀæÄÅÍÿÀªîÚÄáåè”ÃÇô¬¯ßùÃÛ×ãÝÈðÚÇÍîààÅêãØßäòšÕçðÃuäÓѳüÈÿÁèÞû¸ðåùÝßñ²çäç ãÀè·â÷mÔäóÑóÚ׬áäõ‹ÊÝôÌÒÇíÎÃíõ¦«Üݤ¤åýÌÂòØÅ×íàÇ’ÐëØ·ÖûѦøëljßì·wÜ×Ù®îÛ—Yòß©gàÄßWßðë¸äè¦ÁãÝì¡çÒ²˜ëäõ´ééÁMÏîÚ`ÔÒÿrÕÐÍ]ÜÜ댉Üß¾~íáU™ãò‰¨Ñå}sìßоæê»jåàÑ©ðæ÷¥ìæÇfØáè°ùäÉdáÝÉNÕîÞ³æö‹påÜÛwÛðë|Óôæ~ØÝÛa•áà`´ßÆ>ËàÑBÐÝêl¥çàˆ±ì溔Ìã™|Üßgqòì[|ÝßByáÏfOäßÚdËïˆUÉç]åñè~Ü×3áÿ‘UÞñ½éäŒ8ÎáÇ5ºÊ®¯Ý¬ÖÞ‰ÆÒ´Æë¢ ÄëůéÄ2œÈÓ Æª¹Ü±ªÆá!tÇÏ8dåØ,€ÐÊ2¸â)jÀÇ^Z±âZFÓÐŽ±øŽ¿á‹0·Ùp$Ëß²/ÃÕ™»áŸ7Õ¾ŽUŒ¬°2—Ѥ+ŸÑŸ –Þ¯Dþ9[ÀÇ=€µ·'CßÆ+qôÄ'Wͳ)·ÐC%áÄ^@ØÄMUÚ¿-GÓÙ îíuÒãbTÛøo%ÖÕ·"Øï}$éõ´;ÍÿÄ-ªõÁÆä¸-òÞ‰ Îé¸(ÀÕ›7µàš ²è¯«ÿ©-ÑßÅ ð͹#ÂѸRä«6UÛÑQxÞ½:‹Ý­G¦ØÎ :ݹ41ÜÃ$6é¶:*ä³#®¼H!ŸêK/¯ÐP)¼Íb¸åg?’ÕtKŸò¿_£¸G+‹Î•)ÆÛ¯#8ÐÇ4ê°yQªÖÆm‰à°b±Ô‡C¸ä£#cÛìióÀ,¿Ùž@¼÷Öd³ËÈQŽÍôz«ßÔv™èÓc­Úë•éæg®æì´cÓã²X×ëñþëàÆhëãÖÅÛðÖªèëĵåçôíáîÐFÊáÜ‚Ößûà÷ßöÂðåê§ëóëÂïåðÄêóãÅÝõâìòíî¦ÖâðåÎâãôíêñêøöèÆjÕïÎtãÓíEÂøÛLÕÒóP”âÖ«¼åè‡ùßØu¶æãžãëã—fÿø®ŸèÞ½½òñ¼ ãí§Èåö¯ßæËgÎèßOÄë܃ÛóÅNÝéájÒßêqÇæÃb¨îð˜Ôêú}¾õìuÓÜãqÆßljÁéá—«ßóÁíØè ²îÛ˜Òäã’Žäè‡ÉäæÙ{ÿéª|åö°™Ðê³nößÆÌçðÚ`×ØÏŒÜâäƒÓÕÚTæíÖyÙüуÜäîRÖÜéÑìÒzëÝÜ^¸ßårÐÙé¢Ë×僽ÌÓë¹›Ù剰èä ¹î÷͇âçȤÛÊÉŽëïÅ^äïζàú³xéí¸“éßæmïæð…øååñãÎxÕÝðƒâÚÕzìàÚ~ôèÜ®¾¿îÚÛí^áÄïoÑãõ¤áì롲îÕÉ»ìÆ»ŸÖؾ¢áÿ¤©ÑૹàìÚëì¹xçÕÏ‘ìÑÚuðäׂááÙŒ×Òâoî·Å¢ä´¸ŒËÂÅuѨŸoØÉ„JݵË|ó¬{ؼ؉Äк•Ö±ŸL¹¯¼…ƪãžÍºÀsѳÀ„½ªÌ„¯ÂÖ`µÀºscÜÁy«Ê§{^¤²G0ͱ¶vÄ°¬XÊÏbÌ¿¹P¾±·LÔÁ¹Br§³^ËÆdƒºËReœ¼[l§Êmk–Ñll£®™ašÄyr³Ð‹PuÃ}v’ÎjQ£§g]‚º¡T}­„ªËÀ”w«_¿ž²yÉ®®^Ó°“²Â³Öººæ·É´æDz©Ú¶Ö¥Ø³½œïÂÕ°ôÑ°µéÓΚ‘|Ô™¦”É’¡v詾ÃèžÀ‘ÎáŸÀ’Àƒã´¨Œz¤¹‘nž}ƒ™«p—Š¿†Ê”¡’–‡|…eb½©x– ´b‚Š|Wbw€cab‹JŸVŸ„“CsXžš¬•“§“Ÿ…‡–«œ€È}„ˆzšÅŠ¹Œrš»Œ›²“ƒÅ}¡£Æµ¥Ís¯|«™»Š³º»ÑÑÖª­áó€žÀá–»×݃œÜ׺ÕæÚʳÝÿÊÚåÑÙˆçéì¶ôâé÷ÇäѧôäÝàÙíâÛõÌÙßçÚùìøȺhÃÍùÆ÷ÜßÿôïãÐ÷ïò·íÙâÈïíïÄôõêÇÝïéìíçÿºçêðçÛðìîóöïëòíÙê»íçë¼ñ¿Ó‚Ùû׃Ý×Ïn¯Üö½ÖÙàºûÚâÏÓÖçÆùÜÐÓâÒÍÑìÙâàåÌßÏó÷ÏåïáÚÊõå݇Øàí€ÞÝè¬÷Øè¸æ×íµÔÓìŠÜðë©ãæôÇôàÿÄØîíŽáÑ÷¥åèÚ¼éãìÑêÖöÒóÑúÏÞôéÂôêò¿Ïæê¦êááÞióÏËëÛÖÓíÜ´uëÛ«†æÐá~éä™jöéÕ„íáî›ìÏÈ^êÛÆfâÏÅOÓáßÂèúŸðÔòÑßð–ñêêËëî°÷ÌÚ„Îì䟥æÚ³°ÜÃnsÜàÈtâéײöúͬëßê‰ÚéàÈäó·|ß渟öãáeæÕÚ@ÝêØsÙìëÝêÿàÙåïØã†ãÞ÷¥Äð^Äàæ‚ûÊä_ÂåØr¿ÙÔx‡ãæØžkÝëdÐç—’ÖÉH]ÁÖ<ÏÙm"ÜãÄEÈâ¹PèÖË]Ýߨ5ÞÛ°+ãð^áÙu%¿ä¸%¶á„ ÂÕf*ÍË!œä§)«Ùª °ù’›ä³ Žç¤œÍ¥$¿Ò¼-ŒÝÊ%XîÐ"pÄÞ]éâ74×ë;%õÎHLÕÒc'ÀÖ‹Òáˆ$ÙÒ`5Ð̈ ¿Ö¨ÏØ¥Ä̉ ¿Ý½:­Ú¥ ¦‡?<à¸Ì» ,ÅØUëèҽ+NÖ´д`c¢é8R·²}'ÓÐV@ÙÖE=ÓãB*Ýé^-¸ã|%ÄÞ:6ïÚ‹$æã¡ðØ|*åî]*Üë«åáÉ,êâÚ&çé†(ÔÙ¡ÍΈ¿ë–"Èã©,Å졷dz ¸ßš'¥Öª@ø³/&À¸=´ˆÑÁ á· 3§³/+§åB §ØQ¾À7.Ä×Q%¨Á ¾Í^ÅÓ,2ˆê†EÚÞl|ÌZ1§ó€V¢ÿH\è² -ÜÐh8Þ¬(¹Öœ5–Ò¬ÄÙ{6tÓÐ& ãÈI·â–B¯åÓR˜áØ»ßÛߊ¢ãã¡­Ñߎˆáãäáa¨êé¡pÓäõ¼çñ¬dæð¬äßò§nÛã±°çéÒ[ßéÒq¶æów½ÜŸ0²ÝØFæßÿßøíî¹äîì˜ÜìéÆçîýÒèæçÖâ÷ëÇòâèÎÛéáãÌéíÜËôð´oôðìyôßÛMÀÛïpüÜã^|åØEµëÎ6°ëáMàëñsŒïÝhéê¸qïåèÀmðëÍÊæ㤈ÙöÁlèêÑdÆÔòqÑäËPèØêzüÚél»êåwßàá{ªìö\¸úè|¹æÚpÌùÎ|¶ëèz¦ÜèŸæÙoœõ噇Þâ‘æ׌œîì™|èÞ­iÿéÒRöí¥~û﯈ÝÙêRõÙËpØõ¹gëØå`ëæÎræàæŠìÚã^à¾Ö^ÞÛÙjÏåÛbÚÚÿSÓë÷_ÜÚá{×ß爭ÛìƒÎìž¹ýø“¹çÒÅ}ÿ縘ðå´ïÙ¾ië÷Û¤òîÞwñÞ±ÿöÝkáéÝ_åÜçîáÊ„ïÚÝíøÙmçãáÞîñ}¾äÜ‹ßÚç†ÛåînçäÛÞ˜Åèˬ§àׂ¨ÚË»ŸÑã°“ìω­ÅÆeÉ»ÉyßÄÌ›Õ̲‹ãÑÝtõ×ÍdýÎß„áÚþ×Ñ՜خډԶ휿¯ò«ÎÊ·²Ó«Ó‚Ò¸¼pͭʙӶۓ½»×¥Ø°µiÈ ¦Ý¤ñ¯¥½Ãj¤½¼~º½·H¦Ë¯c¤Ç¸u¨²¸¿¼Â¹º}âÃ¥vɵӱ„Øá15æäFRéÐAtÎË–%Èæ‰"«÷`TÌÐ@/³´¬ÄèŸ ¬Ñ˜¸Ö†$­Ð¦$’’œ ’ï¾ZáÇ0'Ó¹%"Ñ´B`»©)B×ÁIÑ6IÈ´%cÃÐtIë¿N)æÁOTÒ½7MÊÜg(ÌÂ:ÔáPnèÉfRõݸdØù©<áħ5Ãñy%ÉäØ°æÖ0ää³0Éð•*Ïäz#Íý¦/Ïú£AÒß®jÊâ0²ÉŸK{Ù¼SlÅÆ#žÜ«$ˆÚÑ[sáµYŒÊ«/Aɨ:2ÂÐ2LäÀ5ά2"šŠ.£Ò,3§ÉG3ÁÃW$’ÙdTÖÉ],µÇ7$¢à•Ck¯›1Åá™9˜è€6ÁÕ}1Éå³^½Ó†µÜÈ$„ÛÚÓêåÍ3ÇÓÙLÄß׆àìÓi“íÌdïØ„™×ét¬þÑŸ£àå_‘àîyÝñ²_ÞåÆ€ÿ˹ƒõÛÚ^áäÍpòæ¶jÚà¶Q¼ÛØW½ìÜuÎñÍ‚ïêê¹äâñ¡éúÑÉïÝ÷ÌáðåÛêîöÊîåóÌæáîçÓêñùÌëéìÑòâñÚÿíÔØïÜOÙôÑEÞÞð‰­èë{¯áñUÊÚÝR™ãÔ¢¥öל«Õܤ¢ìáÁºãêºuâ妡ìñº†æìÃ|ÞßèzÓæÔfÛÜÏ^ãÞÛd×îÔ[ÕÿÕvÈñð“ºêÕ•Êñãyæä×cÀØà©ìò˜ñôžËÚðž¾äÖž¼âúšºÜâ„ÃÚàÓkÜÞ¿Ê씡ð㽑õݾpìâÇkãÚÕ}âáÖ{ÝÝÜaÎжœéä½hÓÑ×dÍàà{ÏïñPêÞâp×êðxÈßéqÎÓîÒãÚ›ˆç×´ºàô¡ºÙј™ëØ­‘ÍùÅŽûḑøêÖ}åêÉméó³šïâ«£ïÓÝoçÛýwîÎû‚ðÙì}á×Ý€êâärúçËrìàÝŽÆÜóoØèô{ãÙÓhÂêášËÓÞ¢µïÔµîÞ­ÿÑ¥žÝí—®Þè¦ÙÞÊ{Ñã¾däÜ‘†ÛÑŠxÌÙË‹ÞéØzíÀÌpÿÐ˟ɸۆÃÃÏŽà²ÌœÊÂw‹ÆÅ´ƒÅɈA½»Ö‡ÌÀÒŒÍÆˈĵџ׶í¡È¶°£º·Çr¡«ÕpÁ·ÏpÄÏÔ‡ÇÍ©fšË¸{¡ÁoRÚ©”=ÂÉ<µ¯xDz—XбµI¼¦»]Ǫ£P\¢Èa=”´:c¦TX­ÃpJŸÂjV–¶QZšÚDU¢œV^‹§PDˆ¬GT²·k[…¯šV‰ gx˜“uj¯“e°´œNƒ£š‹»¥˜£Å¦|¾¿¶é¾Î»¿Èµ•ÿÆܹà»æ¦ÞÊù´ãÖÇëµÆÀÜ´¿¬ê¼á»ìÂÕ›À‚¥’°}¦Â”ɶº¾‚±©¨€y«ƒy’Às¿Š—š…ŠY~‘N–££•l‚¹› £¡|™ˆŠz†JePQ‹i|k°§Œ~š˜‚b—¤£gz­‘s–lToŒ“tqÁ¥tu¤ÙÍŽ—«~kÅŠ£»±‹Ä©ê‘³Àß÷àÅÓpÆ·é~àÙòÐãÙ×—ÖÃŽ¹ËÑ¢²È—ëèÓ«™¦Ú­ÆØéÑìÐÍnèëÜ°ÿØÄžöØâ‘ðéôÇÿÛÓžðÈÊ|ÑǽpÕÙâÉéëÈÂôúåÂö×ú»èùÍÒñÃõÕÝûæ×ìØéÐèÇòÞòÙØâæôÞëÜõÚñËçèÞñíÑì×ìðâÁÊÝ íÝÎk˜àèÅÞÚç€ÓÝæÈéòìÌÆÕáÁÑîÅÈÎåÕäßÙÖë¸÷çãÞíÕëÉðÓÇ–ã¾îšÛÝÛtãÀïÌüÕà¦ÚßÎcÏìߣìÕôÊÖÔåáèñôêåö™ñÛìÀØâç·Ôäï¯ÝÚùÄìñêÊßâóœÀêò¢èðáË_àâê»îø–ìÙ•tãßò¢íÿÙ®ëû½häè¶VãÛÚœìâ´”ëðÇYßÞå•õÿÝiÝÙÞDêäíqÍãê|ÛãÏGÝÜ«IÕÛåߢùÎŽ²ÞÖ¯£ØÜ“›ÖÞ™xèÿ¨lãÌrpÌàç•òçæè竃ØÎx]ÔÜòŠþØÝ“ðãé¡ëçà“íÝéìàêSÓÙîò×èu¶ÙìS¶Õî{Öëíä×ÏI­ãñœŸÝÌBŒîÙ£}òítÙ楥äшpí÷’HÐ×ÅFåâœpÐÁñå»K»Ë¬O×á«EúàoAÛã¥,§äŸ»Ö„Áä_HÔÜŒ(ÀÕŠ#Áå¬"«èˆ"¥ß­Šèª$¨ØœÂߺ$jå¹&Nã¿lè½*wÊÜG5ËÆYFßÆWEÚç]:Òé·&Ìß{*´ôXGÐ˫ø"¾Ø½ Õ¨1¤Ô³ á‘#€árIcåŸV1Ƕ0UÁ«BÙ¥DøIϵSGÖ­Dx»´++°ÃeÔçWKÔÄ58×êHQÒÞ\]´ß…RëÜ5.àà€>æã³ ÝÑB<àù±ØÛ¼åÞ®&ÉÏÒ1äÞÀ&Áß¹)µöÂFÞÜ›£à¾¥ë¢Ñ×u3ßÛ—ŸÕµ0OÖ×07Ú£ßÏl\Øæ«)ÉÚ¡_ÜÑÃ'¿ä›?»èÀ:Ûæ.²Õ²¼î¦µÍ´EÀæ¾”Û² ¾Ú³!Óá«*£ÿ¹#Zóß8LÂÌ„ØèhoÿçLLä¸eHÛÂ=9ÝÛª*Êß›.²Òy«ìJ Ø̪*ØÔ¥ºÊ@Æç ?ŠêÀô—,jÍ™B”ÔÆ:ÁB3ÙÒ‚ºƒ7pκ9K½­2NäÊ@AÕßb'ÊÐBE¶çEE׺/9ÀÏHFÚÏh4ÓãKNêõn.ËÑ¡ßä»)ãêƒ'Þ÷¦ÅäÐ ÝëÐ/Ýì”(¾Ý•8¼åßGÄà˜Úײ+¤¬²+ØÙ3Ê㉯ϯž¸ÂzøÍ,Ž×¯8<À±.E²¾==Ù¨$XÜ£).Ÿ“"=¶·:Q±wQ?¼¶;¬Ë`±¥92š½[3yÀYFÈ´B*ÐØn2šÙyvÕ†-ÉÜœЦyOÞÚ$ÊLJ ^ÖjO®Ï™ˆÊ½$ñË_¾å¨1®Ôäl¦èÂ;‚éÚôÂuuòÏZŸéæ‚„ÛÅ0·àæÃeÚí¿máÿ…„ÓëûåôàÒ»ðÖàÕáÿÏŠ×êãj®ÔöŒÞøÒTîâæ‹çèýáöÿõuÜÿÞ²çèê±×éäÖØìòÁäéè€høöãÎèùØ}åÿßÇíßë½îãèr×ëÖcð×ÉAÕÞ͈¢ôÖh¸õÖPÄÛãažîï†øÛÒØáôŸyâö£lëêÎÍö잃éã±aÓÿÜTÆäÛBÊø×TæèäJÃÛï›ìçýKÁèÍEÈêítÖçá`¾íÛeÅìåhßÞÝŒÓÑæ¡žãÚœÙꎂöﳂìÓŠùÞœ ÏòÊ…øÖ·_ÚÜ päìµbèó³TñãíØçÀ‚óØÙmÏß¿MçÞ¹kÚÛÑYèìÝLÔÝáiË÷ðTóäìbÈèàMÙ×ÑbÒÚÌtæÞå¦zÛè¯ÑÞ—¿àá’†èõ¡kÜÖ·sÕõ®}ðÜÉcöؼdñåÜ…äãÑvìßÓaöàÎPÓò»EîêÔAáÛºMìæôbèÜÔ7ËçÜ…©ÑÜh¾ÕßmÜäìcÀãô™¹ÛØ«Ÿã暨èÕ¨vÞè•”ãਖþÇœ¢ñßÝbæãÜ|Ëß»¥ãؤmÕ׬ißÓÑOÎÍŒkûÖ‡iØÝ™hÝÖÕ†ÖÈ~XÖÙ¹ŽðÜ´†ÆͲcÚÂËtéŪ‚ÔÊè–¶ÖÉsâÈø…âȾ‹›àÚœ«ÈªhšÆ½O¼×ÑvŠßÖ­´ÇÉ€:µÖ»•æÊžJÜÊleñ¹L–ÂÄvVâÏ–8Ùµ)¢É˜,¢Ç¡2YÕ¬;ZÓ…AUÒ¼@X­Ê,3±­OIÁÀ?Q¡ÇCDÁ¾B_­ÎN'§¹aP¯´€[£µur°ÉJVŸÉU1™»ƒZƹ—A¶×P€Í®o®ã£È§Ô¯ä¸ÑÆÐÀܼÿ³ÌÇëËìêިЪç¬Ò¬yžâÆϲڮپ͵ˆa«¦·kÉÃeZ½¦œTa¿·m…°Êg_÷nmœ›^O•‚f_®ve­¶mhŽ `lŸ±dt”ŠU9²¨ˆK„ÊŠƒ˜§oL‰©qjržtz‰lžˆ±Ï¨‰dµ––”¬¨|x™c\‘¬³°ÄˆÌe‰ ‹ŠP«’ž¾¡|—«¤ë¦¼¦Ô—³£Ø™°‹³™…—Á£¯ƒ¾ £Íœª¹Á©›¦Ý¶çñÔçÉúÈÃÍãĘ¼ËÍáñïÄóîöçóçÙÏÛÖûÇô§ÏàêÕáÓó¥ðÆëÞïôøõåâòÕÿéèÁöñöÈëôðåúÞñÓìÉýÀŒñõèâøíüÑø×ßÛáÆðßÜëãÒñÓì×ñºñ¬ËÍÝÙéåÔ«ñÐÜØÖëúÁÿÈßijåâëÛìÚÙ×ÓÚ×Ìé×ÞáîäâÔÿíá×ÚÌÚÄùÎÚŒÊÜí½óÌî¤ÕÓîÕö×ÞÔëæÐñàäÖîÖ÷¿ñíÛÍïÏï×êÝì˜àÅÿÐãîå¼âÑøôÌèæÖ²ÝÙ¹¯ÑçØÌàûÕ¹ìÍë„éáÒ¤ëìÛœôîêÆ÷òäéõù¾yæÕú£ÿàÝfèÄ°ƒñÞá•ñÔå|èØêvÈåô‰éæÒ{ÒÛëiØÚÿ³êâÅIÞÓóѨÞíÄÖùð‹èó圓ìø²„ÙåË‚×êÔ¿÷íæÄèîå}ÿÓõÃæßÀtôëã®äàÿ©ëôØnøîÐ[ñÕ±OâÑínêÛêlÙà퀥úõ«ÆÚæuÙÚçdÁßí¦´è䯞Öï•ßÝÂÚÈ©zÍË¢×ÕxƒâÙÔ^êåÛŠ»é¶ÐÚ´[ãòDåÚºQãéœkÿÝgIëØh!°à§.Íæo3ÚæŽ:ÈÞ~-¤à!Éí¬(²Î¤2â»,˜Úž)ªêË%Ðå´‚ÛÄ'jÁËBTØÑŒìÛ6[ÜÌN:ÝÝfHûêd$ÎÖŸ1Ñá’jãÚrDÎØš9Çàœ3ÚÞºQй„1«¼Ÿ&¹ô­‚Ü 2‡àª$¸?d‹Î3W½¤-…ÐáUSÕÒ3b«ËS?½ÌFMËÞuUÓÏfP¾ÒŽÓ®/µà+‹ã–­ÜÖM5åÅ/­ë²3Çî ;´èБîÑ'‹ï¼&³Æã1¯è×hˆó¼(‘ûåªsÝè°häߨAÙ뤪äñÁˆáëÒÆùñË9Úç¹FÊèï—ïóåQÇíÒ*ßðâ±×ñç‡ç×özùñî¿ìîñÓäèüÏéüÝ€ºÿîÞã÷àáŽêöÑŒóù¸ëîéªíîÖAååÑ-ßæåRŸåóižìÝT³ßánòÜès‰ññ¿áÙ²hæ÷}Zíþž~ãö©sãóÄàáÖÅ;ÔñÞ:Ïáë8ØöÕLåáëMÝìÛiÖôÐJÙããp¡óç@¦æê}âáÏ=Ñåñk²Òâ}Àäí™Úßßráá}ˆøú‰–ñåš ðÛ—YÍõWJìî®u÷䛆Üý´^ëßÀiÝè´dÖÚ»LÒâÙXèèÏšòز~éØêQÙÿçkìîÛDôâÝYÑÚã^ÒåßkÞÝâ½ô×ÿt˜ìÞ˜žòሟîÞT‘ûü”^ïðš¯åÛ„~Ýô«c×âÀeõìÏ2åü§¸äâäJçøÏKÔðäZþã°LÏáÐgÝâÞhëð×fçóÞn¿âÝAÕÚÜ^ÓçÞnÝîØa¦ãÛŒ«ÑÉcíø˜îí¨ƒëØMžÕᬿ×Þ¥jìäœ_ãÙ—cóÚ—ŒçÓ»‚ðÔÀdÜî‘zåÝé„ǸÖê»ÃxÐÍów´ÝÒ}ÞоŸÜ±¹{ÉÛÛ‡ÇÒÆsÐÀÜ›ÊÅð©Ù͘uÜÆ؀»ÖM¶ñèÅ”ÇÙSªÖ䃴îÝÀ¤Õ¶_šÐÝʧÁÄ…z×£›l×Éz Ð³QtèÑ®Iè´œ*¼Ã¬D•°¬#sγAN×£X[Ë®H6¯ ZQ³Á|;°ÆUSʸHM­²\„º·NbÀ¼PpŸ¶huÒÃ}kÒ¼km¹ÈaZ±×‘h¼ºH̆rÒÈEªÅ³x}´Ëü±ÙÙÓÇÕËÃû®Õˆæ®ø®À«óÁ½¥×™Ú·å§ì×´žÞ²åÂßÌÊ}ïÌ·]ÊT•³±Ô®¿ÆÚ«¾wRÊ¢Q`”®ogŽœ]a¬ŒSQ¿ epœ«t{½‘]e±wSk¥˜a~²„sr¯av…ŸQ“¿œm{}“lxŽ‘O‰p¦v™—©³€qšÁŒ|žœÂî ÄÁ֚“€¡¸hÒœÈs«ª«–ѵµËì»Ë ¿¸É³Šå§¾ÕЯƬӨ¼ä⻹ÅЗԿÚÉÂöÆäÑñçåŠñæÏìéÍ÷âîß÷Üâ¿é’÷µÈ–ÖâèãñÐíÅçÓÝ™ÓÏÑåùßíßíÌøÒïùïÉöéëÛï×ÄØîòáÇÇÜóäíêÚÿÛòáÿëõÐãðíÛÔäÔìðÊÞ×Û¤ÖÕíÏâÓð¿øÚÙ¼ÍêìÒöÓìâáÞíÆÉÐôßÞðÑãÉþØìãóÞßÃõÙÜßÕÙ×ÑüÒ¶­ðÎâÈéÐæ¾øËáÖøÔïØîÙáyâÔôÇÝóâ̽ÓäÚçâîÎòâ÷ØíÕÑ„ÈÖè¢ÞÙë ´èç·µÍãÌÙïâ´²Üñ½gã埘ð宓ÖÏ¢¢áÑ”uÿÄÔ}ì¿Ínïãæ‚êâínêé°|àãè±ôÞçqÞÎÁrîÊë|ðâÚÂÿé×mßâÝdÑÛâÊöá늧ÿΗüÛ¤œàé¿åéìÅôÜ{žàóʺë첶îö¦{æâ܉ùç×ûæãÓ€ÓåèÁâåÿcàæÉzýؽkñèãvñáÂqÞÚú¼ÕêÄQ¯çæ™çßøšöðÚrÀïé™°ÒÓo•××q€ãæ“]çÚ\¦ÅË•–ËÓUíê™]ú³KòØ”aêå„1ñÞ—GØæhïÐÒ5Ì—-Ü̱&ÃàÂ#Áè…'½ì{ÈЧµçŸ%ß»-ÄÞ«ãÁ¨ÿ”1Áò¡&¡ÚÅ+fÍË>RØä#‚ÐÍ%-ÉéRLÎÞDcÓæH;ÄÇŠ¸îž%ÊÚt,Öà\#ú×¼.Áȸ*çÈQÏÙ¤B¿Æ½#eИ%ç›KQÜÏaÈÂhj¿«œà¦J`ØÈ@qÍ´]jÇÑBn¾ÙOJÜÖ^FÑÅMPØ¿fgÎápCÙêv6¶Òh*ÇÜi\âÐg9ÜãÁ?éî[-ëݶ3ÇîëÚÚ¿èû¡FÇë™ÚçÀÇõçkÑÓÓJµéÃÕé¡"±´†E¤Ý½»Û¸P‹¿ß"˜Ø̶ŸW)º¨0*¼èy0ÌÛ³;vÚª%¦½”7ËÞ¶@¶ê®0wä‰Éá×D‡Ø»"©ó³(»êïXºêÄDéº2–øÍpˆåÆHVñ䟤òãwÁáÒ?‘æô¾bß÷ÔÕúá·Éêð¥aàóâÅõáÍ™èá–YÉëíÁóàùaáÞç¦ßÛäjéàç–ìëñkâõðÊíëõ·ÖîóŒŸêòëîöß¿ÏøÿÕÆïóó¸æëÒ±íëÒ”ííàŸïåÞcâïÌbêòÛ·ÜâáhÄÜõÀïïê_îäíŒðíØÆßê³tòìšBåèÀ›øêµyòæ«oïòÒcÝåãCÍîÌKñêÙ[æïßN¾åÿVèñëJ¨æýnÁÚõg¥öãVºîëRÂìã†ÍÍÿšÄ×átŸôó‹sæõ±¿ò棜çÛq¯ëäØlÜóÊYÆñ„Œèã¹gØíÄ\äâÑgòؽ]çìàfò×µBÙõåhÜòÁGëâßYÙæèVÕçû7àãÊZ×åÞ\îä×dÈßÒm¶êܳyÞÔ¸€ÝÛ§“øꀔêåÁ¤ãø»jìð¬ŠìÝÄDÖûÒiðé …õóº]ëàáQâçÔdÙïÖžÞÜÛléïæcçàìbßóçmÃé쉞ÞÛ\âåØXÝêàP¸ÜࢬáÖ—Ð܆œèá¹…æéµð䑨ð홟æÔâkàÍÎKÿ̵‚ñÔÌ‹éé¿zãÇÄVåÝÉfü×zóDZrÎÒÌ€ëúlÑÑrÝÁÖǮ뙽Ðô°¾ÃžuÔÉß—À˵ÑؾŽÏÊ摾߭=”ɽqŽ½¾Q¾Ä¸|šÕÂLŒè×~­ñ¶ruؼ €ìÀ‰jߧ^ŽÝ·{NÒÌ¡BÒΟNà³~>ãÊÈGPÞ…!zוky»ÄEO®ÄXo®ž:TнVa²ª>\ÊÓJM¬Åk¦ÇÆoE§º}WµÉƒ‰À¹~\²°^|èº`B°½›cÅ°G”;ɸپ߭ÿÍ»ÖÆßß å¼Û¡ê²­‹Ã¼à²Ò²Õ§ÝºÙ‰Ó½£yò×ݯßÆ–«ÙºßÉÒ¿²fŽ°¶nŠ½Å„\¼¿__®¬sƶÀ†P£n[À‘hf¼vqŽ³­}{ž­‹X£¨in©ªnEs¦‚œ¥bov˜ssn ³}ƒ¬}]y•WmŽ—€h©Çy¨³‹Œ“r¬Ü‘À~¬‘ª”¢Ç¸´Â®Ñ¤Ü­ž¥Õ’§uݖԽ뒡ªãšÈ½Ü¹»ÅÖº¿³ÔŸ›ºÞóÔå÷¥ÏºÎžÁÛÄàÐøÃÔÅÝÙØóÝ×åÊøÆôæ×ÛïÙæÏ­ªäïëÖó¼ùÑîÃìëÛÀðÈúóçÒõÌÝãñìÚÔõÒßÐëàåÇéñìïößùïçÎâÚÝðßßÝêØúä÷ê÷ØùÎÝÜï«ôÕáÓùÓàÛüÆÜÙènÇØõ¡àÑãÈâîÞéÔìÙ®éÄîÏãÞÇŒêÔêËìÇà«Öä×Ìà×ñÍñËÛ…ÈÒâ®òÅäÏÿÒÕÖîò«íÚëÈÏÛêÇÞÒÿÉæãÚÀêÔò¼ÆÏÝËÿÜ÷¨ÀïÙÅéÐò͘äóÕêÚä̪×óÄæëàÚwäÝè†èì‘’ßèÌøãÓÉìëÝïçä ñáÔhãñÆhÎÌó¬ùäÁkéÇÙ€øÝâpÍÞñyâßܧØåâ[ÞÝ÷§ôÜï‹Ðéæ§~ßê–Öߨ°û냊éðÀ…çó¹iÐìãÍáÕÖ|ÐÐÇvïÞÃÓõ×æ„âàæ«éÆá±ãäíÍöïânôðàgéØê‹èÐá¼ïÐÓ†›òÄjÐíîwÞÛãdÉä誰Ûí´œçí™îñЙîçµ²äÔ zé狇êâÒeòШLïÅ“QÑ̤TÜã€HïÛ¿C澞RùðqDÒÐj.¾é¶1¼Ð†ãàBOÖè°«ï»ñ¨(Çîz4¸à±#¯Ü¨ŽÍ~»Û± pÈÜŒÕÙT`ÕÕ&„æèƒ0ØÛ@QÜßLVÚÚb¿È–H«Üo3ÎÔL@ÏæuÆÓ«ÌÊÅ»ñ”ÉÁÎ#sÞƒ‘Õƒ-gå¢A#ªÐ> ªÑ%GÒ¸9bºÅ=cæÁ+R·¶wÜ°-TÁÅmKÛîOOßÔGPÝÖS5àÜg,¹Õ…;àã4&Õåo(èæ¸,×çXAåõz&åÒå8éÇ„Þê¡#ç÷©%¼å†"Ïåt"ýÊÔ*Äï±ÎÛ°%Àò­VßÆ‹ˆÖž"{éÑ1Rÿ9¬æ»'&ä¼%-ØŠ9<Ø„[yµðL]ÎÌD!·1¹Â;»¾M#´ØS'³¡0ºÈj%¤×E&“ÑC ½ße9t­“-Œá± ÍÔl-ÎÏ—"¹ß„)fÑ¥&ËÓˆ1®ÙÁ%¯ÍÄ=Åó§>Àé˜%°âÌ9¨ãÅ+îÜžÊÑÛlt÷ç›ìèÓt¶ÞáyTêè•TÜãËqéëƒh×á¶EÔû¹ÄæêŸ\èæãíêìí\ÛëàsÒàÊCìøÛÖññév·ûìÖòëÙiöð’¨ðêÁèëù¿êÜú…¬èÝÎzþ。÷ÞØßîîãcãîÏJÌîÍZÔúÞn½åêH¯êîj°õãZÙõár¬âÕ‘Õõã­uäí‘“ìä·WâòŸ7Ûá”{Þö»TÏßÞ5ÈÓÂ>ÕðÄLÓìØKÊÔ×rÛÜë<ìÕÝ\tñçm¶ÙÿbËéÒUÑêèhˆû×m¡ñÚ{­æÒcªÝÜsÔåg“ó瓘ñã†aïØÖZÚÛ±wëé‹¥ÚàÇpßíªiõÞ²QãôÑTÎñÖœÖéÛ_èõ°wìíãXßôÓ`åàé\éä¿\ëâèpâìà\Ïæãgààæo¹ïôš•âä§ìàÊëÙ²‚Î䶧àózmêÞ¡‚òØåQìåÁxûòu™óî¿wóåÉUÜçäUçó¬{ôêßvèçÓMÎÚÕ‹ßòÕ‚³ÐÞpÕêðmÝèÚoäèÁZ¿éÜsÌûÖŽ¡Úî””à渨çÖ”îÌbÀíÚÇ–æíÆcÙÚ¬^ôΫ‘äã¬\æϲoÚÞÇ{ñèé¬ëÛî»ÛƒÈÉ—KÙ»ë|ɾrˆÄÀ¹ˆàÉÊ€ÑØåÞÅÑ­Á¿ÇŒ×Á•fÛ´×¥½¿¯N¦Ñë°â·s¼ê¸²ÐÈ]«åÒ¨·ÙÎZ±ÈÇs†ÆÏ’*ÝÈ…‚¾_•ÎΣGãѦEíÁ±5麂(ƶ§;_±½8v¦wPE›ZW¦zO®ÊzX½©z¡ª¸`ª»ÒDF¿ÆYR›¨€M±Ár}Ñ£iˆ¿ÁZV·²p£Ñ¬{iÓ¹WšÉÅô®Å¿Òºå±å¹ß¾Ö½Ä³©ãÖÕ›ÒÈì¶Í«ïÂܲö¶¶®ÒÃÜ™ç´Ð¥îÇ̯¬’ƱÓËÎÊœ]˨³X„·ºhuš¢rkžŽ`tžƒkq |]=¢d[Q¼ˆ¬¦Ån}•špv‡ŸZ‹–ˆ}…–bx©±~m†»“q^žj|ŠŸWmº{\”yk ¨±£ÍÅv®žtx¿¨ÅÄŸ¨MÊ¢¦‚©Œ©©Ù‡¢¦áÐçƺ ‘ÇÃŽÉÔ»¥¹ÊÇž½Â×ßéà΢¤Ò¯ãäØ´µÏߨôÒÖâÝâ»éÓ¥·Ù¾Ó‹ôÆåÞêÈè¥ÎÒúâìî×Ó÷ÑôÂì¾õ¹ÿêèÜôÄøÙáåÖÕìÑí¬ÁáúÖçÿñ×ëÝõÛéíôßéîãéÐïéñÙêßÛæíäðÞôäâÆýÖïÎÿÔå¸ÎÔáž·èõ‰ÎÐàÚÚ×ñÒàáΊ®ãñãÌðÞÖÛóÝÙÕÅÔ·‘è¼®Þãá}îÚßÛ×чäî׎ÜÕêmäÌîÓÉÿ»âäèy¤ÛîŽÇâìÔìçæ…×ôçÌ®ëᎽØݧÚÐâ…©ÓëÈðÐפ¥êëÅÛîב†ÜÝêÀîБvÒãÛÙèêÏ€îßÅÇãßÍlôÞñÀÿÚà²ìçå`úÞ¼vßìËUØæ¿YáäåPðÔ®lÝÙÓsÞîÙ`ËñìWçèÈk¯ÉÚ˜ŒíÚ™©ÞÉw¦ÞÛâ­èæ‚ïð”°ôå Åôí°mßÞÈ}àìÆÅâèÌgïàÅqàÛå¸óÞ×oîãàyíÌò£ãáØjíæࡳæÐWÎÝÞL×ê¿RßÃÌ\®îÒmÎÙÚ]¤Üê¦äðt‚Ù½§jÖÕE±ÓÚ|‚Õâ°bÙݱOìÄnXçáWîÙ:Úâžlñç²/æçP7ÐÇìï€"®óØUÙÆMßßœ!ÓÝœ*žÄÒ%À镛꙯âº'­à¬ Þµ(‹ÓÑ5RÚËsÌÙQ1Ëè1zÒßQ-ÒÉw@ÛÁz½ÿzåÖ†CÚÛ>1Ñئ¯Á¬·»—¹Ò¼¤Ï”5Œå‚.måx1PÑ—!/™·.)­Ì*Wõ¹"[Þ§uÙ¥"IÊå-ÒÞVNÙ¿TK¡ä,Yã¸=Þèh$ÚÒ€çF=ÜÀ’,ÐÒÌ/ÊçÇ<ÛôvHòÝ…OÍôµ$²ëº=Ùêž ×ïµ0ÊöªÏã¾Ãé¿ÉÜ¡¾á¯Ò×6*ªßÄ!}ÕÞmé¢RfÞ›;4ªÅ?@½©IKή/.ÑÏ>aÏÈ.<ÌÐ4Læº,.ÛÛ9B·ç: ¿ÕCZºÆJŠíP*¡ên?À¢(7Ìàz+šÒ”*¿Ûw-«ÆbZÞâ¦?³à„òÎqâƹ'Ïß…ÐæÂPÈÛ9·áäZžêÚtœåá`›àÇ„vâÄ<¶ç㑨͹E®ÿç´háâþø霊æâ³dçë¿Zæâ¿dðê¬fÓóûäÿöÕzÚêÝ{æáðùñþâh¯áî‡Ðÿà„§Û銿ìäÉÝóïôðäß¾âåïåÓçáçÉðêÒÆèøâÎíúÌfÒÞÒeØæÂQÉã܆–èß’ìâÜœàßÕZ¸êߨäôÅÒîê®»ìò·lßå²›êÛ¦~Úã³MùÒËTÁßûPÎáãCעsýÊã;ÃãÛXÆèçðÍ×l±îã^ÂêãQÙæàSàÝÝ‘Ù×ëš”ñÊxÑßΈ™èÒl“íéŸîÞk¨ß߆fìð¨r×â›”ßí·`×òºgù꾃ÿ×´ZñÞ½fáàÀjßèáfâã¥Sèèä`ØùöTäÃé[ÍàÚ}ååÐ\×ØØ~Óáê|ÝÚñ¢ŽëØ¡¢ÛÞ¤®âè‘“ßæ£sãã´™ðÿ°©áöÌläÚÝ£ÓΰÞé¸záðÕ—Ùáèzßö»–ÛÞåeñóÌzâöÜfôÜØmÑäÛ©¢ààuÌÂÿ~ËÍåpÜÑíž«ë眡ÐÒªÀÒÚ´‹òÜ«ªØæ°Óê–“èÖÎtîÝÙjÝâÁ†ÚÚÔnëÑÌéØÑkÜåÎqÿ¿Â¥Á·pÊ¿·—Ö³OVæ½oyËÖçžËÄÓ}ÆÊŸJÍËÆ”ÓÃÍ©¾°È„庺³»±è›¸Ìí¹ºÓجȲ¿_³ÌÐO‹ÐÀ”¥Úà«Ìå¬}Ë°¦aÖ»„9κoo¿Ð‚XÝ°¼bꨯ4¾¿WÕƱ>n¿½?[¾qlQ¾>J˜^h®½mq“¨SW¶­UY¹Ëgm°µ?¢ººja¾Ÿfª³…f˜§t£Ê­v^©¥^rÊÒ™¿¼¨v¿½·àÊçŒò´òÀÌÌÅÆÜËûÚÞ½äÄÖÀ¾¢âÁÛãÕҚѧà«ã¯º•ç¹È¤ÐÐÇ™Ÿqáœâ£·°´•´§¬MÌ«Ò¿x±¬gI•am£”‘†µÂjk©„‘b›¸ŒgŽÂ™Äµºps¯Ÿ–€x©Šš£€Œ†¤Šrs xŠƒ–œsx’»‚Ž–´wl“§uŠ¥Ê»À¦xœ·}É©Þ¥ÅËÜƺ’Ç|´’ÃÇïÎòÅÅÎÀãzèÅðŸ·ØÜ¡ÁÑãŸÊÕÙª‘Éè°ÚÝÞÉ×Àâ§ÞâÇó¿ô÷ÝáèÛ­ÑÅÁ’äÔ‡ùéèÎûÞȧìËëìçÎû×ñÏäÃöòÜãîßëâÞíñàßÞðÆÙõÿÒ÷àæâòÖæõîÊçÉèâêèÞñêñÎòìØÐâÔäÔß½ÙáÇßÂæÛå½àßëÞÏçÿÃôÚè¿ÙÎè­åèìÉËÒ×ÎîáÚâéÚçåšàÍÝÙáÓÞ¯õÐàæÜñÁþãÞ¡ÔØå¹ó×ÑÏÿÕáiÉÔð¾ÝßïÍÝÝѧ¸ßýÒæÜñ«û»ûÀôñêÁÞÚêÕÃÕèÀîÑåÏèÝؽ½Úî¹Éààß²ÇääÇvàਸ਼ãçÙÎíÙÝZîÂœqõÜÂi÷äã¦ñÖë¯õãâ…üØÀ[ÝÞÔŽÜàÔˆÝðÿiõöîÇåìàlâé÷¦Õâ×^ÍÑðºè⤩áè°¯ñÖŽzæíÒ»öÒ̸ùàÙ¨úÚËMÿõÜ·é÷ç¡ÜçͳæçÖ©ÛÍýlÖïÚ¶éíËCØéð²áÔè}ñÜÊhÞåòǽïó™ùÝò«ÇÜÏN¹Éë îÛ¦£ìå¼ÎÿØyëÜŠ„ÊÕ¤ì䛈òÐÈVèÔáiçê¬kÒÙ£NëÊœ\ÞãªCÓà¡DùútLæ×V/ÄÙ˜ÇÖeÝÎ^8ÐÓ©ÆÔ”*»ô•»è‡·þž%¶Ù¨©Ô“`ÅܽråÓ]gå×gïÛ63ðë84ÕçPÐåšÞßj!æàF?¾÷{%²ÝŸ¸ä¶ÈÝ}"»àµV¯³¨*rÛ€%tÄ’²À%1˵:*¸ ˜ä qÚ³E_ÐÑ&bºÅAUÑÉYNÓÂM<Õ¾ jÙºkIÒ¨ibÒÃu.ÐÜ%:êìt%ÞÛf&ÝâU9âã¡#ëÏÐÅçÁ ×ó¼/èá¹#ÕÄ”Ïïš(¶ô•1ÂÞ¦¿íŠ5Ûß~äñ˜¦ý ¨âÄY’ÑŸF’éÄTØ°¤â½=,ݳM7ÌæN!¶ñ Vʵ)MÑÖ,¥Ë=8¸¼(“íh*wæD'¾ço#‘ÆY'®½t%ˆÞ{0¥äÔDßÆS>Å౯æ¬3ÄÐÄQæÄŠ·ëÇL—çÏVªèÎOÕÕáM¦Ë패âï~¬áÎj±ÊÛb£æíwŸíäi¯îÝvåæõåñì¿™üäv„àæÍvÛèâÈÿçÔÏÿå¸UÉóȇÛûÁLÄçÔÕüßãe®âè¬ýÿìqäçõßèø÷™Öæì‹éáíÍßî×åõâÍ¢ìäð×êà­nóéÉAïàÆPÔåÒPôêÕlæÜóÎåêÙqåÛÞzößó‡ééž´æò¢~øÜîÜ¥VüÜ­ŒâüžŠØåÄoÎìÜ^ÜñàaìçÄHäßàNæÚãIÆ×ÚGÛóÚtÎÝå{îçã\ÉÜíPÒèçj­÷ßÏìÚô—Ðâ×c±åã–—ìÂ`·äç_´êë˜cÅç”_þ×¼ŠÏàh—Ìÿ½iâ꺜ÚæÂgûóÈnÛÿÍqëæÐsèØÑ]õáß|æðÜvÙßÔVû÷ÓtßÕâsÚîàsÜðá`ßâå}°êòš©òé µäÚŠÉÆòµ•âóÌíÛ®vÿê¶eÿØÏ€ãÿÂiâ뤬úõÁyõîË@ÛÝÙxéÝȓ׸ÝjéðçrîìÍ•øÝÚvÍÔï{ÚÝ÷zÚæ{{èÕÐ|ÇñìŽÁïÔ~³èæ°åÝ£³âß«µãÛp¿âÔ¤“èÉÉ‚ããÙ~õÙµ­Ü貂àÕÆ‚ÚÊ°ÝâãpÀáÕ‹µÀº~ɤ¹…ÙÂÓ¨ÐÅO”ÌšÄ涃VØÌߦ۬­tͲ½zλ֗àÆ–k·ؘ½ÔËϺÄ͸ÎÊޫºС¶¿Ï¹¦¿¸b±Ó¶tà°Ç Ò³Á¬Á±u^ÒÌ ‘ÏЧ‡È±ªGÓ±¾H¸Á£QŒÂamªž0JÙ§Qk³Ÿj\¤‘mf·¨Jo™¹Kr¿°c‰Ë«Hj¼¼‚M­½ph®±n‹¸ºw„ËÅrTζ„’»¯}°µ×Ôª·°ËÁ·¸ç¦¹ÃÙÎŨުԼټµÜÈÓ«ç»Ç²È¥á Ú“Ù²ä´Å¦Í¨×¬ÐÄ러ŠÝ¸šÄà©ÍÅÓ¥ÕÒ̯©Å¥º›Ô°°‹N‘Äj¡yx~—¼rË»›\Œ•}~§®y¯¼­“p†Žml—m~‘u€—†|¡r—‡„£¸‰Ž ¥ ¸‹¹ˆÃgvŠ² Ä‹²­‘âË¿²Ã•®©‡¿„¬ºÆ—ؼÉxàÉЇºÀÜž£òÇáÆɘټڅ±Ùì´·é¼ÕÙðÞÚÕÁøßãÄñÅÖ•­éíïµç×ßÏçðçãéÃåŸæÈóßÔÉØvÓÕßÓúÜàÅèàÜçæÿØëÙÙïñËöÐáèû´ÿÐûÑóØðÚáñéèÒëëíÉæöçÈîÙÞbùÐÒkðÅÙÉÛÕîÂîÜ׺ëãìÛêíÞÞããàÆÆÝÜÁÐÌßÜËíÜÎÊèÞÛ·êÔ¶àÖÎ×íåÝsòÎâÆïè÷—òØÛ¶øíòÁêàêÔÞçÊáÓúÜÚèñÍÝßôœÜ›çU÷Óå´¼Óõ¸ùÍ諵ÀòµÞÛèæçµôèÙ®ÊÝ몋ëؤ_àà±ÖÝŸ­çðÏ¿äëÛÄòìÞ„ìÑþŸíì¿pã糪íÖÈ‚òëÌ]çÐîjìàïqÔÒÿ äãÞbÉðú•éßçaÜãë}¥Üé~™âó³Çìä”±ÜîÕŒÛÞ¸‹îâ͆âõß~éãÜŸëáÐzÔÓ†íéݨõÎßtæêïtÞÞ“íæÙWæäÎ]Ûî¦[ÐØâpÊêÂ@ÙÑ©:ÚÇytÙÖÆT›áÿ~¼ÜÕd¨ç²P{èívŽëÓÆøËe°íÎ\nææžBÓéÌUÛȆ_ÒÑ|KÕÖ ;ØÇŒ]×íË=¶Õ~>ÏåÍéy8µ×‹1àæ>2åÊ¡Îà†.¹¼Ö?È䣠˷§Ü¨ºÞ¨çÕCŒÝÖNgæÖFpØÅ9uÄè+@ÙÔ`:ðÈG-Íê!¶àhØÝ^UÏý9#äÌ“iÎò€@Áô‚ÚÒ’ ©Åž$Üé %Ì×€9Uã¾EOÆÆ7jÖÇ=Y͆#€¸ÊL†Ö¿%DÕ²7\×Ûe8ÝÙS]À×7^Ñ·>gâ¯x4âÒc9îÜIXëÙp#ØîJ6îØ¢<áí‹WÿÚ”)¿Ø€âòŸ7úî¥/åÖ›!ÀÖ2Ñ÷Ž6ÑéœÇÙ¦8È܆&½èaWÅÛÅ#¦îäRœÔ¬+Î윱àµ$Ì­O€òu2<±Ñ)bÊ´"aË®ETà${æ×"´¸*ÐëEP×Îg °æR/¹×]KÙ¿Ymåõ{<ÀÆf)žèŒD¨³fBÇÚ‘&¸ç©7áÏqBÄÓ/ Ø´S¹êç`ÖØÙƒÕæ«I°åÎK¶ëôoÄåä’’ÔɤÞÛÚT±ââ™Ääê”yà×Â_æòâÁêôï°váèæÖáß«hêèñtÌõÐ’öÓÐ^ÖÞáïëððòûÏæxñèèŠÀþàwÉîæºäèÜ–¾úáŒÒãëåÓéòÓ×ÿêÝÕæëÆ¡ðÕÖMãÕ«Oßò×ièôû„ŸÿÝgÏçêÂòîÔÔÜé’³èÞ˜¢Ûú¹ùá¤pÙÔÆ{åò´³òá™–íçÍYÞÞäpÝâãGÞóÌ|éíæYßáä‰êáÑZÓ×æ|Ïÿë\ÏíæPÙøõ[Úéû—ÅúÑx½íà ÐÞÜ~§éÔ—¦éß‹¼ôÒW²Üá¯dâà¥Èë£áÛ®¿åçÆrê߸`øñ¶pàáè’òáÄ‚æÿºŸÈäºqâçÚzßñÛcìÐÑcõçÒdÕÛßwêèÛdâçÐ`ÞÑÙ£³Øç·ç݃ÑÛÝe¢ÅÜ’|ëìµxìÞ…—ÿÞªúá‘ñí½“ÚÍ®ÎïôÅxßðãv÷ç×Ìäêà~óÞ»yâéÌyÚßãðÕÿª¹çé~ßÞÙvÎÖµaÖÊð~ãåà˜¹Ø䓺âƧ’àêž­ÜéºÎ茪ÜàÓ~ÌàÇ{ëÓÁ¥éÀÃrñȈãÐΊôÚÅÿ¾|ƒÆÂѤҵå¤ÍÇslÇË ›µÁ¬ˆÄ¿ÃŒÍϳMÞ©¡uÖ­Ô‘èËʔжңܵÀ”µȡÇÉˬÇÌÀ“¿ÃÖ±ÁÚo«Ð±€ªÆ·z˜Ë¯’Wª±}¾ç„¯ÑË=ܾ¤fÊƹEÌ˧?wÆ»=Y»¬bY¿ Z]š¡oG¶ÚrUšÊ^Y©¹Y…µÀEgš«|b›©FU¥Èl^¦°—f©~n²ÊaQ¨v[™±š³°«‹¢ÁÔ’³Î±Š§Í±Â·ý¯å²Ã²¸¹È¦žfĺòæÌ駶›æÄݹîÀ·°ÉØÆ«Ø·¹¦ÎÔÁ ™z¾¢‘ŽÂ¥îÔÕžÔÊ©Ì›½›Ëg¢ŒµsË…–·¹…/Ÿ|p“ŸfVzÆžµ­}{€²cx¡y`|¥ps˜¸®”ƒ‡ty¤š|˜ Ÿ`‘©º’eÒv\§ÃŸ€Ž£ž¨‡³˜»}­±Àƒ³¨†¤~lŽÄ˲ƒÐÏè––”Ç©ÃŽx·ÊⳫê«ìÎÈÊÌÿʬçÌØÉ¿õÞçßÍ”ŒìýÒÌéÌ”–éäÌåÏÜ×ÁíÈÞáÞáí·ñÊÜÍÜ´áÄáÑê™ùõòûèÙßàýÖúÂÒÆöÌðÖÒÇùéëÐõõðÞÖúã¿ùôìäÓåíÞÜìÖâÚÝéäÆýØÒaåĨœÝÕçÁêÛßöÑã²öÜìßêÛáÛÿÜð¸åÝáçßêçÒíìÖÒ¢âñíÐäÖÛ·ãÛßðÝäã¯øñáÚêÔâ¹îèÞÂâêë©þÅàØþäê­âñêÙñàëÈæÝå´äØöÃÙÜêàòüáàôØðÏæàóˆçá…§ðãºÞâêyÈâתlåùÓ²àÔ–§×ß[Šéêé²Þãâ†óëßÊìÅËoáäŸIìÍÏæþñ½VëãÝ¿ãßÒ¦ìòéhøâé±Ðäô…èèðŠàéç‚ôÜᢗÂꑼçàˆ¼Þìö¶¾îØĤÖß |ïÛ¢îÔ¥lÉÛ¯pÎçÈÛæ×à²ìç×{ãÝȳØâÜlßáä¤æß×ýâÍtÜÅÙZ ìäiÙðèeäØÃ[åÜôuÉßÌ…œÖÀn£áá蟭èÛž–ãÓMxÒĶ[Õí»RÒÛ¹ŒäÕ¤KãÇQÑæ”dãÓEïçVWÙÏp'ÇÊÆ!ÃÍP%¹Ïg=ãÄa­é€2·ÎŒ Ó݆¸Þ³«Ì‰²á‚!È쀗å¼>‰éÑ-qáÇ-êØBSÖÎ*AìÐ4IíÍI$Àâ ÎÙz#ÞÛ5>ëÓƒ´Ëž Îɯ%ÀÔv3ÐÔ‘"©Ï2™Ü}4RÍ™'5¸±G$ÃÃ=9ÚŸ°Ü¸Ftß´JkÏÍ sÑÒ2IÛàWJîÚKa¸ÈTpæØH0ÜÇZ*åÖmBìÇm1óäh1àäI=ÕÖl>ÝÏQ"¼ÝyÝÙ€-ÞÙ”5ñã™)ÓàÐ<Ðí9ÝÙ›-ÑÙ°"ÈØŒ ÑÔ7èÝÒEžô­&ªÕ¶"¬Û´#žÖÉTVË°!§®³(:ݪEyÕÆB0¾ÙuÞ¹$”´¾`±Ö9D°ÜHWÉË;w÷ µ³ZBѶZÍÓq'‰áG«Ó¡ ÃàaDÜÁ’$ÑÙKÐÝ°¤ÒšR£ÝØk¥îÉ\ÇÖ“(±ø®“àæl¸Ò»<³ßÜn¦æÕ’œïöy¨ØïkÉãÜy~ãäÆÝåå™iÒçÓããð½‡Ðì¨~ÝÕÀ§îß»d³ñÞPÊðˆ[Òæ̱åÞã€äÞåuÝåï˜ÃïÛ€»õã¥ØéÞzÀûݸëÝö×ÞýøëÎè帑äè° éæÌPØìØRÐÞÃQÓëÝrìéÃyÈõØméëÙzñÛÜ€ÕìôoŽúß³uøç…€äç¼kÖæ°wÞ䘅âô·U×ëÙI¾âØEðÚÈ„ãìãpÑûÌgÌàÌfÕØòt«ßéqÀâëMÃÚæjãíät¨òÞcÑì뎮ÞÞj·Ùí—ÊÔæ— ðÔuÈÜ䩉ôß½|ðÚ¾qëè{–ÛÐBbâòÄÜà»içãÏ^íßÄ¢ßëÊpèÝÊóßßbòàÜgñÎî^ÖÞÉgíçâhÐêß}áÜ÷bèòào¬æ¹S§æþ­Áãâ{ÕØë ˜ÞÞÁ‘Øêš Úí¿ŒíáÎÝÒ°ƒòÕ¢´ÐßÓgåè݃èôÔ€ëØÈŒæáäiïéÓbãÞå’èÛæŒÇÓñqàÔã†àÎ؇óÆô•ÉÚè¾ë⯯ÛÞݦÉÞ­£ÔÇ–¶ÕܱŠåÇÊ~ùÐΑô·”›òÃŒ…âÄÅœÚ亃æôðšìÈx§ÂĺoѾÐδá›ÅÄŤ׳užÒªéɲҎǶ´žÃ¶íϽ܎áÈרÿÀ¤Ó»ê¶Ç¼Ê²¶¸äÁÅսεÁδ¼ÉØÕªÖ¸á¸×¾˜˜ÕËƧѰWªËÛ¦šÜ¦Ÿ‰ä°£°Æ¼—G]²žEJĵbXÄqTV¸Ÿjj®¤LV° kJ¿·gK©Êf{µÂw°­ÁZ›¿Ç‘¨³²‚ ¾³pf•¿m¼¼²}¦²µàÆúššÅ—°Á̵ÄÖºªìµ¹Ç¾ÕœªŒqq¼†·ËªÕ­¼´š¶Ã…èÇî¿õÇÄ´ÜΧÑÀÔ•­}ÖŸÁ«‹Òº¤’†¼°¡rwžÜ©ƒ’ºtu¬d£º~‹µP•i˜¾—„‘—jt€zˆ£{}›‰{p…“‡–€¥–Š‰_ÐÂŒ †¨˜¡ Ž”Ĺ•–l’Ÿ™l¨’“u£ÄÄÉ~ÕŽ’áÒÅ¢ÒàÆÔØÒТÂß̤µ}¨™ÉÜm’¼¸ã¯Õ¶Ê}ºÓö¹ÐËΙµÝÖ„µßá’ÕÙô”ªÑÈãÍéÛ¦‡ÔÿÍðàÐØå×ŃîÓÜØèìä½ÞëØtéȾ¨ñàð’ÍöñßòçðÚððãÊñèíÌîÈçÓïèì¹ÿÔÿÐòÏðßäòææÖòæçÒðêÙÔðÛáÅóÙãtÙåÑmèçÚ»õàÞ·ñãå½í×æÄïëÛÍâå苹èïÈÈçî¯ÝÑÖÉà飆¸îËÌÕýÍyæÏë¯òÛºjïßäÀûáéÇà×õ¿ïÚÛ¸øÊìy­Ýä¾àæñ°öËÿ~ÿÑîÁÛÎù¹þÎúËÞêãšÁÅÿºåîà­Æáÿ€´çöˆlãëËqÿÌʪæçvžÙÔ‡}îÚÝÉñë¶eèôÊZßå—zïÝä¡öðÍŠßåëlõæåfÌàòqÊêÍdäôó~çÎæmÜÐáMæßé_¹ÏÐx²Ä禩×ô™¼ìé·‹ÓëȺæâ‚wäá¿®ûã²pÛå­áîaèôÀbåÝç”èÞà™íì˯äöΕñÞÚ£ÞéØXöâÐ\ÜîØ=ÙÖàLÑÊÍ^îÖÆ>½âÝð §íÝ›‰áÊgåÌouàØ¡ÌÐä¦Ø×y<ëÜÒXåãPgæÙ|4ÕÑ‚DÏÕ?Ó¾¯.ÛÏtSÑÒ¡)µíŒ+¶ú¬LÒã\!Ð׌&¿âz)½Ó¡ºÚ•³ÊË¢ÚÊ&¸Þ©¹°Æ]ãÊ0s×ÝxÞÉ%ZÖÔ7EåáQ<ÔÊR)îà›$Ç×` ÛçU*Ó·,Wßá‹;©À¨Ï–^ż©¨Ê})Ñ{Ìßj!¢Õ;¾¾@_ä«~¦¢R]Ѫ@~ฌ¼£Ž¼Ç89àØ@KíÁMaÃË!wçÌNâí &¹ÑfNØåqÛÚd4çæªZíÕMNàãPFÓº{àâL:å̶~èß‘0×íÂOäë+ëÙª/·îÏÚ€9ÖàfEÛÒ±*¼¤¼#Åê}ÄÜÜ$êÍJÓ¾I•Çr9B°¶2ÍÈVaɈ+Ñ%¸¿<*ÅæH3ÈÍ,/É×TDÓàdRÙ¶>JÜÅ-tãÝf5xÖ9ÏwD˜ßxB×àŽ/Ü̹mØÀ–IÕè·]¾àÃY´Ú“"ÈÙÑ3´Ù×D«ÚÐD¦äßK¦åù‹¨ÝÆU¯Ùñp«ÝËÞÝÔefèó¿ÈïÚÄáê픥æò½«õÛГéÞåñúðëXÃûÞœáäÔ®ýíúßîíü¶ñôïÕíáç˜çñâ}çð¤ãÙè¦éÙÚ’×ëäÐÔ÷èÛÄðèÕÓéÞ¯›ðÙÕ„÷ëßY×ç±VÜøßh­äÿ²êòñ³øàíÆïÞôpÂàý¢Ïð鉒ÖÔµ¤ßéŒvÌâ “ÚÁž×ÙáÒdìÕÕ£ÎêͨëñÍOíéêtàéÊaÿååYðãñ¢«íÓs¼ßßYä×ìPÔãêz½ôïv¡éÙTÑéìtöÈn¶íÌt°èÉdçרWúó­ô燿Ú㜂×åñòãÖ½r÷×»ÖãäãgïêÝžÛöÍÉõèÆ„ëÚífêÚÑhÍç½\ìÛâ{ðÍà†ïÙálâÃægËÔæžÌÕç}®éß‘Øàð«©ðÚÀ¡Ý߬©Ð̤–ÞèÉ›ìѹ–ßü¾¨ÒÞ©ËåÆÙéßÏsêÏÖÍøãÉlãÞÇêÝÛO÷ÖÚ–úÓãŸ÷ÅâvßÃìnðÝàxÛÊï¢ÅÑÛ~»ï觬Î߸®×뢪Þߢ¬ÙÍ«±ÙÕÓŠÔÚÕÿÔ«®Êݵ‰ÜìΘØØÆ“æÐè€õÕ£›È°„ŒÌžŒÏ¿öÀ|›ÚÅŎܽ‰ÏÇË‹Ò¯µ}¾“Åmزx8Áº×›Ôº–,Ë¥žt³¾§gɳז½©¤g»ÜÕÅ»¹Ù²»Ô®dxÙ·—²´¯Ä·»ÍË}®¬Œ±ÕµŸgÊ­Ÿ@Ô¼rT°¸ÐS7¥²WXžfe¢Äm[šÇ_L“Çf\›¬OV®´v\«Ë_cŸÇis Àds­”„a¬Ä•§Ã¿x°¬¼{ ºšuµ©Ÿ»åÄÀÒεëÆÂÊÕǹ´¡À¾¯Š’~­±Ï«í±×³ÒÓåÔìÍÊ·wÂõÊà¿Ãª–ÇÙžä¶Ð¼ÂÂÒ³p‡šËƒÕŽ¹yY³­¡Ó‰Ð­nÍwØ’‹y—Ѐ:ªuyN•ž‹{ˆºœE‚qpdŠŒ‚ŽŒu‡’š„’t{Žb~©^ ¹fq©¢°›¡°™u‹ˆsÐxiŽžº‘Œ½™kpª›° Â™Ÿ™·žÃ¯ÅÀ¾r»’~ÜÇÙ‹´ÀÝ}š¤Ò‹¿¿ÖyÂÍ꨷ËÊ‚ÃÐì˜Ï×ÙÃíÚן¬âɶ‘ÉêæíÏßäåÜùÕåéíÝÇöãæíÜÀîŠÎÝãÊúÇ·ÆìæôãöÓîÊüçêÜô×êË÷Äû¼àþâÌõÚØÃùíóÆðõéÎÖüãåÌäÜß×âåؼüÌë‘ê¿ÛfÜÝèšüçíËÙÜéÓäÞÓÊõÝÓÕîßñ±ÿæÕÇõÛè±åíÑÁïÒǾïÕ½«Ýî…ÝøÙòÒäåÙÀýãÒãðäâ¹äïìÉþàÚªãäÕÙàæÍçãå¸æãðÄöåò¯íåè¢Ùéô×ÍÝû‰âßý¯ÜÕÿ ÁßÜm¬Þï” ãÍ¡]òé‘ìá}¯æé®–õè©’ÚòÄjþàÙžôØÖSõãç“æòÚÂçñÊ‘ÿßåtïÚæçéÅfàÚ»OÙÚÏ‹äÛ¿nÉàÎP²×É¡²ÉÄW‘ÛÍ|ÈÒÙÝÔ»ÖíÚ“ƒËÝšzÏἕéÔ¦^Ï̘néë³ÂÒÒÂi¸áÊ[ÑÍÑÅçØÄYÐÖÁ‘ßʶWÆÌØŸÚÕÖœãá×aÆÚÐgÍØ·XºÙØ‚»ÓÎq¥Ûׂ±ÐÚž‚ÆÞ¨°Ù½oŽßãdpàÙ½TÀͨAÊÏim΂SÐÙjXÙÈ&×Õ´3ÿêST×ÕQ:¨äŒÆç~ ÊÚDSêÐ\§ädËÙ«+ÄÝ‚#­æ×2­ãž$Âè¡&Ã㉧۱ÛÇ {íà •ßÒbÜÇ)HåË@:êîH-ÒêrßÆxìånH»ôRÈö¡»á  -ÎËľÀ#Q눴Ës#ŠÜNH°¹>dż*8ÔƒVƒÛÉUt´­"\¿À¤¾¥$7ÎÏ_2Òð3tçÒgÕÚKQíÉ:<ãöY8éÑ7PÞ݇*ÞØSOÝÓ‹OöÓ_6â׌ÃþƒÿÝbSíÒ¿(×ÏR/ÖÛ´"ßÚQ+ÐÝ¡-ÂáŽ#ÐÛ¨$Ýð¿!ªñ®(NÏ ¸äµ9+ô½©ÉÞ -}á¼A?ÛÊ=Ýçi&¨ÍGëÈ=ŒØ°"/¼Ó@cÑÆ2I¼Ä24§ëS5 æj­é*[Û´S.‹Ün(zÛš0ÇToÙà˜ÁÑt(­Ã7­Ä‘·Ûéw³Ñ´œæ©I×Ö£(ÄÔ¨.œÝ¶-ŸòÃa«íÚ€¦Ýâz£íÖO±íî†xÛåµ|ÖâÄÌíóŒáêÜßßõ½×ïíº¾Ôß®`ìãçgòäÏtÁïÅ´áðÚi”æöÂðöÝŠ¶üêvõÛîÅîÿضõüÉßòñÚêòàÔ©ó⹤ïÝ´ÏåäÕ”ÿâÌCäæâZëäí®óãðq·áþ[ëãÜkïáØyãøØ€söå’«ØÝ„™åß³{åå©iîòž…æâ xÉßÛ[âîáeÔëÈ¢øôÔlðòÊ>ØòÞ]âðð| çòuÃðÜpÏåÔ7ÓôâP›èãköÜp¾îà¥öäÓiËääVÃáÛUºåÛŽñáÄ~ä鱊ßô¤¥çéÜÛéÕ·…åòÚoûé½oõàÐnåÝÇYåàèãïØ»ZßìÍZÌßå±×ÔÈÑÔßÐàäåÅÏÜÊÅÞÔàÆ»ÓÖÆƬÙÖÊÑäºÈËËÌ¿ÜÕ»ÈâÞÚÚÌ×àÀº¼¤ÅÇÞÊã³Ò¿ÐÛÊÍâÌËÑØÆÞÆã×ƸÎßâÅåÏáÇÜÐÏÁâââÕËÞäÎßÂØÇÎÙÔÃÓÊÍÉâÌçÌÕÇÑÊÑËâÆÊå×ÍÏÐÒÐÏÑÌÎÛÚÌ¿ÆÍÅÚËÔÈÓÃÛÈÊÒþìÔ¹¾â³Ò¯Èïóÿ¤È¿à¢Ë¥×Ô®½ˆà±Ÿ«ÔǽŸÆª©bհЗà«Ð¯²ªª}ĭΘذ̓¬ã£Ù·å´»¿Òƶ©ß¾¨—Í°ÂÁÅdË¿®ÏÔ¼³w¾ÂΧ„׸΅㮿ÁÕ¹qºÌ°Œh»¹ºvŲ¢S¼¹³N»¹¬Tk³¢.{¨ad²•eO©ÃtXΡm“©¾UUvÆ\h}ºgm©³vv“«~ÆȲÀ­š¹šÅ°Ì­¼’®Ÿ‰ÇäÑܱ¬Äϼ½½å·¼ñÎœÇÙزÈì²Ö¸ð¹Â¬˜”βïãíäи¨×߲ϼ¾Š—’Ë­ŒÈ£äº¶¡³»Ð¯½œ~ŸŠµxçТ‹»Šºz|›ž|ʥϟ˜Ü©Œ¤•u}…ŠÉ’tšš¨É¶¯ž‡Ž‹x[eŸ•V‹e„zl…¢’¡šª‘ž±‡s™²›v‰»œ¥·¦p¥¦[†„›†³Áë•¿ž»€Ñ˶“µ§½ÎºÃwµ¾ØÊÒäµäßÔ¢¬¥Ë•±ËÀqÓËÝ·™çÎð¾ôÑãàÊÞ½¾áåÛ×ÕÝñéñâÒßÞçÌ{êÞ÷ñÅ÷¿æÿÜâê×î¥ØÝÿÙÿèüÌöâç»ÿôì¾ùàçÓîîäÐûä÷×âúéäÞÿíÒ¿ûéÌåÙôÚ¼øòØ~óÙÜrçáøÂìöêÅããØ¿øçÚ¶ùòòÈÚû䜎ðèÑÙòö‡•èúĨÝÛÐÞâÁ›èÚä‹çéæÆïïØUÙÓ—Ãéæî¡èÛñ¶óÌÓyÓÝüÁíÚãºûÝðœÅìçÂèíé®ÙòÛ­ÕßöºØïí»ÿñéÛ×ÿÄ÷Îô ÕãÄ\gîìŽDðãÞÀ÷宧ãåÚÛóêÛhêçÚ­òæä©ñèãŸëáÉjûæèÝæçä™÷Ö£`àÔܨ’à¾ÉÄÞøÄÕ¿ÅÐÐظÁε¿ËÒÇËÌ¿ÔźËÇ°¿¿¾Á´ÀÎÁ¾Èƺ¸ÃÄ̵¾Å¹ÑÖÊ·¿¸¿ÂÖÍʼ¹ËÒÎÍÍÓ¾ÊÑÖÓÚ¿ÒÌáÉÓÁËÊË¿ÇÚÆÆĺØÄ¿Ï˲ÉÒÎÆÇÜÉÄÙÛɽӾÀÑÐÃÂ×ÍÃËÅËÔÃÂÏÌ¿ÁÌÄÝÁÎÅØÆÇÌ»ÉËÁÄܵÈÌļÖ·¿¾ÖÃüÒì7æàd+ÚÊžºä^ËóQ(ãÏAÁÚ‰ÞÝa½â‘·å„,±Ó¡Áà¡Çؘ -»ã³díÖ!{ßÉDkÀÇ"[àÙ“ÞÞ-'èº03ýÊr ÕÓ§+ÞÛF-ÓÌ1Gãω'ºìˆ¸åŒ,ÜÃÈÓŠ¹Â'°×ˆNʶ+fÈ·,⮢Êzf·¿*pÙÀ#vƦ„èÞFG¼â6Bã×)héÏhÕÊULóÜJQ×àFaëâJcèÜh/ìÑÉ<äè‡\ÚÇÆ>×â¹RÒóHAîáž2òÔ«õÙh4êÆ1ßÓ‡*·ï èì®KåÅ]1Ó̾#«Û¾6¡Û¼*ÏÍ£-µÁ· LѵÉê¢*ÎÔÊ%€Ç×%RÊá>ŒÑ¢.7àÊ7ZÏÍH¹£8B£Ð·Ê7AâÓ9CÛÁ:iÆß‚6ªÄl&lß‹.¬ñ°*Êé‹BÔÆ‚*³°Wªä£%®¾ª ®ì»uÔÊ|#»ßÈ3¡Ö¼9½ïÓN½ëê}­äÁJ±æÞc©Ýà{§áѵtðÝ«eÛÿÖèí躠Óú°oòà¿žùçÅÑóåòÈôèÚkàèàîäôµtÛÕénÔäò£øòñÐïÿãÙäñíÉ÷öò½ôõé’èîéëÖâõáÊðéÙÒìñÜØÝôÕ¶ßéÛ«ÿáΖÜàîn¾ÚÛvÊÒ׉÷áÞ]âòò‰ÁÞðž·íó±íêУËôï°™ò᥅Îà©„ûÛçgßßíÝéë»zïêÏuæââdåíÕSæÙÛkÐßê~·ìåd¼ôшðåéŽâóìÉåêÏoºææ€úçääéå‰Èâ牻áÓ“¿ïÔ¬OÑËÉtæ振ô壑îÛ¨©ðÛ¼páüÇyëôÕ}ÏáÕcùëÈ¡àú¯zÜèäãÞÕ^Ëã~Ë°ÂɲÄÈÀÉÇÒ¹ÈÊÇʹÏÍ»¹ÌÆ·ÀÊľÂÂƯ­ÇƼÀÕͽÄÇÄÍÍÍÁ®–¨Í·ÄͳËÊÈ®¶ÆÍÊÄÒÒÇÂÊÉÂÃÆÀ¹°ÒÒÉ´ÑÑÊ·ÅÃÆײºÏºÔÍÃÅ¿¸Ð½Áν¼½ÏÇÀÃÇÏ¿½ÒÇ̸ξ͸¾ÂËÇÀÁÀÂÍű²´Á»Á¼ºÄ¹¾Ä¼ÅдµÀÌʾ¼Â¿ÆÉÜ ÿ©¥²ÌÁȣߵ­›¾±§žÏǵ¡ËÎÌ“¿½º”Á¾½‘È®âœÎ´ѿãŸÓ ®oÀ¾¸y¿¶Ï¬Ù«Ü²Ì¹’`ƮǸÐÈä Æ Ð®±ÄŶ®Ø¯¥¯Å¼…Ï®„t̼•Ž×«µ‹Èª¹Xκ^¿½UPÂœg‰­¸Vl±¡r`wÕcR´pq—·WK¤Õ}^¨¿h\«¶ha™¯‰\†©yŒÂ«‰Ç¥²¸Õœ¿w°°¬hѧ¶˜Äµ£w »»}¢²²¼£ê­Í¯®ìÅÛˆÙÄéÔë°·›Ì³¨Ð²»šì³²¦Ö¯Æ¡¬ºÀ“̦½šèȽ˜–½Ëª–€™{­x·[Ì‘½w^©{i¡œjsŒÂ–@xÉ‹‚ƒ§Ùœ¬ŒœˆÆ¢„‹ˆmf¤’q‡|o“‚wˆ§˜kŸ°nŒŒŽ¢°©¤ŸÏ›€Š¡©µ zˆŠç±gžÒ¾œˆ¿ˆšËÉÅ·‘e­¢¤‹Ø̇ÌÄsÀÈÈd°½Ú˜âÑçÆêæÌŠ²ÏË|Éàí¨ÓÈØÄ“ÔùÍÅñæßòÔëÛõãÙúÎéåíÒÿÓÓÛßßïÝޠˣúÑ÷éàíÛ¾ÿ×ôÀøÜý»ûßøÇõëòÝâá×ØùÔê¸òÚëÂõçáæÙãäçÚîÜâÝçîí×ÝêãÌöÚêËòßßÓóóï¿æìäÂïïè¬èäñ¥øßö¸ÿÜê¹äÕÉ æç蚪âèÕØ÷êÀ¿òõÕ»ñÃÍ_îáèÙóÞÀ¬ùéëÓØê¾|åÙðÅóíÐÁÿÜèºýÛå’ÓìíÐöÖïÃëÞâºóÛüÎ÷ëóŠôßî°îÏ÷¶¾Ûë°ÛèÿÄÔòÜÚ°ë轂æð“§êõÇÄþÈ •áïɽæÙØÈçÒÞ ôäèUçåæÑÞëОçïï¶óÉ°BØ·“ãźÔÁÉÌÌÕйÆÄÑÇÆ¿ÁÈÂŽÉÇÎÎÌƺ»¹·½ÁÆ·ÃÁÂÎÈÀÌÆÃÆǹµÚÉÍÎнÓÉËÅÆȾ̵ÂÄØÆ¿ÐÒÓÃÀļ¿ÂÒÎÒÅ»¸ÒƸÄÂĶÐǽÏÇÁ¸ÉÓÁÇÉÄÄ͵ÎÆÀÔÆÀ¶¿ÊÆÃÕÐÂÛ¾Ò½¬ÅÎÁÆڶʷ̰ÌÓË»µÅ½ÄÈÈÈÀ¼¼«Â˾Ϧ×˽V÷çN5üÆjÒÜwÉÓg ÖØA6ÁÓz ¹ð“3Ïâ¡ ÎܱÄß‚³Þ—¹äˆÜؼ#«ÞÑJ‡êË~äÁéÍ!GãØ2@âïVÍéC)ßÌw3ÓäYUß¿-CØìL"¶ÝÂÛš×âbÓÓ¤¸àœ ÓƈG’Ì}$5Ç®"(ä¯$EÞ¢UÚ²1 Ó±0^â¸(ç¡MžÐi6Ý»7VóÅ,‹Úå-/ïØ&YðÖWPàËHØÕ3#éæ-áä,Qôì›éäÀ"ÅÞ¹0Þì4fîåR8×ê•#îÝ”;Øã’+ßÑ-¿óÏ$ËäLJÚÊ–%«Ú¶žé¿¬Õ‹YƯ&pÜŸ&†×®UÇÚ$“¼È)oéÈÛ²K¸·$»ÃRFµ¶_PÆÔ*¶Ü^ÁÜTB®Ñ'KÝÝJ'³Õq\ͺ†¡Ýr!ŠâÉ#…óY—Ïh,ÒÅtJÏâÝeVì¡ÉÚŽsËÒ©3¾å¨3·÷¾A²âëL‹èÍc¢øØš­åÜrÜÙÉP–ßà²óôÒοèÕi ÛÑ¿fêõ‘¾âý¡‰êý¯ƒéÜù7ØíßXèñÆ°åöÆgÚôÐpæöé‡âêé`ïäã—¾íÝ„éìãˆâþÛ§ÈóæÈ”÷üºöë¯ÊàíÜ¡âç×JÚåäÈâðÒ·åÞì›ÔïçWáõèsýÚàlëãê›æò–¹éæ~ÝôÑ®Ïí윘åø˜¨èð·aæóâùãÕsîù·¨äâë‰øÕü‘öÙçLÖ÷âwµßúqÚóùnèâÎgæÙæ÷ââvÚòä¸îÿÊmÐíöŒ¦îèq¬ùÛiÙÿèˆ~éì«ì礼êב¨æö¡yéî¼oâÿ•¸ëíÉ}êãáYêÿÕRíå~îêÏñå’\éÞÍZ“ÏÓ¿ºÐÃÂÑξÂÐÆÃÊÂÂÌÇÇ»ÀÆÁϺ¾Á¸»¯·ÆļºÁÅÆÃÇÑÑÊǻɷ³ÍÂÔÈÉÇÃÆÍÀ¼Ë¿×¶Â½ÕµÃÉÂÒÁÅÅźÁ¶¸ÉÈÆÇÍÏÇ·ÆĺÃȶżÊÄÖÆÉÆÊÆÊÐÑÈÉÇÄÄÂȽÒÉÇɶÊÌ»ËÄʾÂÅ¿Éͻǻ»®Ï½˸·¹ÁµÊÅÁÀ¿·ÒÒÁª¾¼Ó©ÕûÙèŒÆ×ΞȽ֑״ϦҪϓ۳‡Ž¾ºÉ¬àÅ—¿½ä£Û¬Ä¥ÀµÌ¢½ËÇ˳ˑà§ç¨ºÈʗĴÃÑÀØ´½»õÎɽ̫»ºÅÙ¸Ô¹¶k׶»²n”Ϊm­¸·—ɬ™dÚ±¨aÀÌotœ«uV¾±d™¬”PŠ«¯bB¯ÂmCœÀVY™§v§½¬xU±¥nf¯»[?j”xyÂfd•›€Ö²ÕÁ¸ÒÏÈ»¸¶Í¥É¸¬ç²»¦Û»Â«Ý¾¦±Ú«ºËâÁДö³·¨ö®ÀÅÌѱ¥¦v½§Ü¿à£óÐͣʳͩݵՑá¹Æ¡›Ë˜»`±µ­ˆÐˆ°b¼£¶‚gÀ¬¿”¼’V™ ×©Å¦~”œ‚…ŒˆvŽ‘©‹U‹uftz´ŸŠu{…‚¶ªv““¡§œk–šŽ~›®…Ÿ¥§¹£µ†“‘™Ÿà„ ›©—~—lœÊ•ZŸ®Œ»}¨É¶‰¶Êº€Ð¬²€ºÊÊ…àÃÓ…°©ÆªÇψ¤ßçÒÒÒÇ•ÂÌÓªõ¾´ææÒÔÛâ§}¦ÌÉÛ‚îêÑáÜÜØÔîÿÜØìíëvóæú¾éâõÏãëê¹óåæÆÿóýÒñÚôÉíõáÑëçâ×ðØÿÂèçñÏäÿçàâÿçâÕáçÓìäßåÞéæå¤ÜÈèÎæßâÁìÓçÍÞÚðÃõìéÔÞäô±äâó¶ÛììÕîÙßÑåãßØíÜáÛæåæËÏñãÕ~ÝùÏfõÚÂ{éÞÚÝñèé”ÒéìfèäÖlÝïßošèópÎâôaáÙâiôïô¢äããvÊòë½ææä¢ØÞîÔ÷ø¶ÌæçOàÄ߃äáªpò긡ã銆ñä¨Fôé˶ÝâIgïìɨùòâhà÷ÚÁçäºÀßãßÐöäoNÖݱˆÞÑÕÀÑÍÇÉÇ¿ÆÏÉËÆÆÇÄÇÉÅÉÈÁ¿ÅÆÄÆǾ·Ä¼¥²ÅÂý¾ÆÃÄÓÃʾ¿ÃÇÓÊĶ¸Ø×½½ÀÈ»¸ÅÆ´³ÈÉÊÏÏÉÈ÷½¿¼½ÁÂÄÌÃÑÒÉÇÈÄÃÆÉÎÊÃÆÉÄÊÄÃËÎËÇÈÅÃÁÁÂÂÁÀÇÌÍÉÅÅÆÅÀÀÀÃÅÅÁ½ÏõÇÐÂÿº²¸ÄÈÇÄ¿ÆÀ¾Áÿ¶±´ÇÀÆñÝÍ7ÕÍyEÓÓ¬¿ÜŸÏæ<Úñh7âÏÌêuÉç²8ßÛŒ¥ò¢šÖ«¾ã‚ ·å±{ßÈ {âÍ~ÑÃ[çÕ*1éÝ4Xíùj3×ܵÉðt.´Ñ[FöÕD'ÎæÆ÷|#ÅÜ$àµx<•×‚¤åh$¢Ý}·ï QYÖ‰WM·°‹Â– ¡Øº,ŽÁ·2OãÉ0SÖ¿/;ÔÃ9IêÌ3mÌÐ^èÙnPÐÒP&áÓ)v×ú‚&ÔãTèÚyDÝܪRýד1ËÝ×.äÿ˜0êàPRìË'Éó›'Ôâ’,èë—(ÈáÆä‡/ØêOèÕ¹¹Ã¸EŸ¹žÉݱ&JåÒ%®É©5Õ¿^‘à¼0½ÁHbÛÈ<Žî·7píË(»ÎF;ÛÃ7QµÌœõ¤R‹ß»A;ì·)ã5VмHe×Ý(“ÖÄ"*Ó´,A´±4>î¼/B­·:'¹å[=»ÓF7ÃëZ<È»"- âr- à‘)·µX=ÙémaÞõÆ=Óè›.ÈçnKÜÚ¬)©ë3˜Ë•[Üä€(¸ÔèLçÚoµá»*³áÇS¢æ¯'tÚë“»î÷ôñßë­|Ðá÷úêé¸ãÜë’ÕìÜÇ·ÚúÚ®ì÷ÖãâòéÆßÿçÝÚÿàÍìãÚ¿ûéß´ïíé¹ðêä}äôêÇàóÞ¸îøá€ÜõàƒÜäÛâÜëíÚÅïïÖçèãßÒçëΧÕæÛ¯âäêÕôðê»êÒáŸâ÷îÃåóÌPÕõóæüïÛ“½Ûád‡þÞªfíàŸ{ÙÚ™zßóŠ«æâÝQííçóÐÝkòäãXáÚÜPÓåámÙßÜFÖÙòU®öéJÐìÚiÞæÔfßßÞrÞßô¡îìߺìäô`Äèàãáé|ÑÛÕƒ»å㦔Þÿ±ûä™ËðÕ±ñÒ±ŒÙê®eïâ©©ìåÇmñàÞyùÕÆ¡ûà¨møíÛkéàÝmáÖž¸×ÅÓËÇż»ÈÎÈÃÌÆÆÅÂÃÅÁÁÅÃÀÂÁÀÅĹº”Š£¡±Äº¹È̽½Ï½ÍÅÁÅÍÓ¿µ½Ì»ÉÕ¨™µÂ¿¸ÅÔͼ‚žÂÍÄÆÍÈ¿ÏÈ´¶ÆÈÂÇÄ¿ÂÉÇÁÄËÈÌÏËÌÓÖÒÉÅÈÉÄÁÂÂÂÃÅÇÇĹ½ÀÁÄÆÄÀ¿¾¾ÁÅÈÇÅ»ÌÊËÆÂËÄÌþ¼½ÄŽ¿ÀÄÈÈÄÃijÁÃÊî}ÿı±Óµ jÞÀ¸„ɨw’λ²Ü³•”à¾Ó—Ô³Þ—Ý¥¿“ÏÅšưܾ̈¶Õ±¡tÕÁÆ“Ö´¾ˆ¼±Ïˆ½¯Ùp¤ÄͨºÁç—´´ËmœÓºÖmÛÀw‚¶±¢Õ§vpìÉBÊÊœO´ªnaz¼¹@±¹4|Ç DŒÅ¿FZ·²UQ†ÀG0IJTl³Õ>j­´m[‘Ä`x«ÚGf™¶e:Ž¾n«ºÅu»·ÇŠª¤±˜Ê϶’¸æµçÂ×ɹÆÓÝÈã´ÏÉ麼Ðÿ»ú´æ¢é»Ã½Ç°³Í‰²·ÒºË–ü¼à£ë¹Ï¡©¡Ø³ÓÏÏ¥âÊÖ«¬l¿¥Ÿ“Ö¦¨yo£˜†°Äz­·‰aq®«fŠ¶wˆÀžÀ‡œ£¨’‡™Ã‰‰ ÈŸi’¡ž|™…€‹Ž©™€›ƒ€p‡£¬¨ƒc²rQ·¢Y¢¤¨š˜¶²Þ¡¿„¶‰®¤‹¼|½ƒ¿Ÿ­­‰š…Ö’¤²¤Ö‡ÐÎØ‹±´ðŸÛâÔƒÂïÕ}š¿úÂãÜíëöËÖÛÃãÓâãàÝäñÆõÎÚïóûäóÏêëîÓæïéáìÛíÌôóðæïÐåÚÿÛàáîÑìÚÿÙçÏüÙðÏõËëõñÃøçù²îÿãÉÿùìåßïæíÙäÙÙæßöØÛíëçÖóåðÆê×ÜÏìßìÍï×æÕðÁÞÜãíÿÀëÝåÞôêèÄ÷ìæ°ÂÖíõ¬îùäÛìÐœ áàÒóæÈétðëèÆÿîÚ„þáæ‚ÞÛá…ìõõ½üãë´õèí¿×ÛíŸÓ×ߺåäîÐÿÞëÁëÏîàðßðÓþõÛ¿ùØòÙÿÕÿ»ýÏ÷ÂòîÖ£yíÑáÇêÕÁÃðã¸ÎÍøÚÏô߶ÏåæÕÒåõÞiçÓìäîãÚÀùøÒµéÝõ¤ñöâ¡çÙ¬¹Ó¹ÊÄÅÉ¿ÉËÆÈÍÈÈÉÄÄþÃÅÂÀÄÃÀ»PCguWFŽ´ËÌËÒ´ûÉÅÈÈÆÌÀ¿ÂÕÄÈ´Y6cƒ–™£¢…dD²¾ÁÃÁ¿ÆȽÁÄÁÁÈËÆÂÇÈÄÂÆÄËÒÎÌÑÓÐÆÂÈÎËÅÄÄÃÃÅÇÇÆÅ»¿ÂÂÁÃÄÂÅÅÃÂÁÂÄżÉÆÊżÇÅÅÃÿ»ÂÊÇ¿ÁÆÉÆÃÆ˺Á¾¿ÕZíÑT<æÌ¢#Éã3ÁøG0ÑÙK)Üþ]·à—!ÜШ¼îL7ÄÝ•ÊÏ µìo1¹èv¦íÁ‹áÌ3ƒäµœëòt4ÛÛ/FóÕ6_Öç1/ÞÞÏÉZ,èÈ6RÅÝS"Óñ€ÖÊ–%ÖÞs1Áæ“Y¼º£&­³m&ÁØŒ$UË×"O”™êš'ºÞÆdt¯%$ÐÄŒÙÂ/8ßÜiIäÒ$eÐé&„ÔÍ'OÖð]GÕå<9÷Þ\WâàdqÄî)âíŠcßêR0ÌæÃÇä³8úÛEXøÁp4Ð÷x+äæÞíÕ(Éä—ÊÓ‘-æì‰;ßóŠËÏ¢¹¹Á!‘é?½è¬!·Óª-UÕ¼ zéÃ"†º·0DÖÜ‹ÕÑ%#ÎÕ91íB$Ê«_ ÆÇ1ÌÞY?Ñ¿D9§Ð=XÎÛ\$–ÔeNš°a+°ÉI\Îç€pÖÌŽ1àÚŠF©Ñ‚2»ØÆ1©Ù¢+§ÁÁ:•Ñ—$»äÉ<¹õ¨(ÊÙÙÍìÔ¶ÙßC¹èé›ëêáw‚ë樎èë³ñë“Ìððß»göä±–ößâ×ëùÞòëáÊâåÉ}ÕöáÈàïï„õåèyãçÖ…ðÞõÍíìÝväôáÓâõæÈÞëÝÓ¦ôíîíç§ÏãïáÕöâãàòàИßùËkßÚ÷‡ïàÝJÎâëÐäêôÆåôã¾ôðá§äø†åäà¶ÙåÝŠ„á÷~šíå«}ëÚæ¡í÷ÌDíâ½Yê×Ë8âäÜÜâñaÙùâp·ñå[ÎØçYâî½aÜôápÜâÞdÁâçvª÷×UÓåæzìàv¹äèFÌèæ‚«û߶hæ㬕áíŽÅé×jÜæ ëèÇu÷æÇoÛìÄ^ìêÁ…Öùª¬èÜÓDûÞÛïôÕ‰¥¼¾·¿ÈÀÌÊÆÍÍÊÑËÈËÍÈÆüÈÉÄÃÆûºWt»ÄÈÁuQ·Ã¼Ï˺ĻÄÄÏ˼ÃÃÁ­ÂÇÒ­K9ED=9;746{ÁØÇÊËÇÕͽÈÍÀ¸ÁÆÍÉÀÃǾ½¼ÆÎËÇÊÌ̾ÈÑÏÉÆÇÆÄÅÆÇÇÆÀÅÇÿ¿À¿Æž»½ÂÈÉɼÄƽÀ¸´½ÈŽÀÈÇÅ¿¾ÄËÍËʾƾÇëÛ÷«ÓÀÖª¿É¹ªÌÍЇѫғι¨•Ç¸Âĵٟط»—¾ºäžØŤ…µ¿³•á¿Ï£º®ã±Ö©Ø¶± ì¬Æ®Ó©Ð±µ›ÄÈÄÃʬR˜Ö¾¼¤Á©°¯ÊȼԿұªÌ¾×©Ô¸¦qÔµ¦HÔ´ž\˜Á¯M½¾¯W—©©P{§¬V_›ÂRi«ÕxK¾½Udº¸7RÆÅZz¾½m‡©Ávx¾Ò…Û»ÚyÁ©¼…Ô̦í©Ë¯»Á³¶óϤÍâÓɬ³°Ä¹ÕŬ¯Ûв¤ö¸¹‹ëÙ§꾫¹ñÎϲÀº»«òÎü§è­·ŽÝÔΉ¹¾½™¹Ê³¥Ï¿Ñ¦Î†Å’°‡Š›³z°­¶ˆnŠº¨j’§¯Æ’» í’¸ˆ€–­°º¢¦¹lˆsš•©v{˜‚h—‹…ƒ°±“l·z¡¨›’œ¡wŽ‹p‡ gHÀ‘„›£“j‘楿•Ú¦„}‘ˆ¦‰ÝÄ̇³§ƒ…Í•|‡ŽwˆÌ¼Æ»Ý¸”ÚâåÀçÇÿÈÜÉçƒÛÎã‚ÑÚíÍÆéÌßÔëôÛãóàÙèçåÏìÖ÷Ï¿óÔæåäõÚæñãôÑóðãÝêÚêÕêÿáÕõì÷ÔòòøÕõîæÒóßÿÄòåèØßðõÓðÝöÑãææàÙåÔëÚéóÇéïïãÎóðéÜàúßÎòãéÏ÷àûÃýáô¶èòçÏîéßÖóØÿÆôòåÁÑõí×ïç䮲åà×ÅæãÎèÞÞáÖùÍïÐïâê¯îäÕ¸åìÔgïÞÿÕúåæÏëèè¹êãûµíÐðµÿäηõÖóÉÿâõÁÝâýªõæö·øäøÐÖÛù¶Ùåð[Ûëâ×ÜõèËÔÿÑÒîÔ~¸Øá«wï×ÕÊïàØ­úåç¼æéé®çâîÒùÙÞ£åÛÔµáÔåxüØ㨫¸¾Á¾ÂÅÑÕÎËÏÎÆÐÄÇÂÆÎÃÄÆÕÈÂÒ»¿:Dû½Ì»¾-pØ¿»Ì¹³ºÈÒÎÃÀƭȱǻ»849;;LGE·¼ÏÌÃÊÉÈÕÇлڿËÆÉÅÍÁ¿ÂÀÄÀÁÀÅÊÇÇÈÃϽÆÎÌÊÌǾÇÅÂÈÂÀ¿ÊÃÀÊƾÇÉÌƺ¶¼¿¹Æ¾½ÂÃÅÆÂþ¹ºÀÅÈÈÐÅ·ÁÓÇÀÌÇ¿©òäæ=ãôi9ëßm¿È¿áu/ØÕD,âÝ‘ʆÍàlßÙ‡ÃÒ•Èìy -âÜaÓØ°"‘ëϊЯ žç¹vÞôEqàÇ8ÍÄ2UàÄKéìE%ãìP<èÍ*<âÉ–ÞË~0ÐÛ|4ËÈfN»Î˜NÞ½•$´âw5ÚÅÌQ·Û*ŒË‘RfÖ£Œê¥KÛ¶X|­´YôÉkeÜ×6TæÞ3vÑÕiß×vÑæ:.Üá‚rúÛe3Ôê,AÛÛx6Ýã*$ôô±FæóÁ;Ùù—:è÷=ñâi#Òè¾=Ôô¹:ÏÛÙI©Þ¸Râì€`Üía0ÙÖ¿¿Ä¤ž¼¢U¾ÂŸ!…²¸,x®2¨Ô±ÊÃÇ2eªÔRbû¶5AÖ®0\Ó½5IÅÆ+KÔ·+8ÎïKl½Õ?9­íg?×¹28µÝi.‹¹Z'~Át&Ò¸<6½×±)»ä¸ÁÕU(ɶ¬R¹Õ­;©î™nÞŠ'±Ô¹NÑå®T±ãØqÑîºVŠêÛ€­éço¥ÖÀPËîÕ¢ãàÈÂôéÅÒíÖ¡ÝâÿÌÚßÝÜÜìçÌÞïíÛjó÷Þ¦ÝîݳÚíÕ½éùà½îìçÁ÷öì‰ñóï©ãôý„åêûÈåçô›èéîÛßçåÑ·êèÝòâõèÑéå×ËîððÍóäÙ×éüá“ãçÔ|×ó܈ëû¼jÓèÙ}Ñê
ýçš®éÚ­ÛÖß’¢äà¡ìé×—¹à׫yëâ¦NÐö·ŸöÞÉQÚóå–ÞæíjÔêÇ äéßÆëãpÈïðJôïÞoÖô߃ÖõÚˆ¬öØ~Ýöì…¾ãÔcËÝêo®ãÖkËç㜚ëÙª†×ס«×ðœµéѶˆÿל|ëäÈŠßýÕœÅæÊtúࡘåÝ©¢ÙðÙ‘âæãoãפªÊ¾ÍºËÊÈÈÏÕÑÇÐÅÈÃÇÎÃÅÅÏÈÉĺ|3žáÉÃËÃÕ»[J Ä¸ÃÁ¹ÉÎÄÃÊƹ²Á³È¼¸@{Œ¨±¹¼½Ã³…¾ÕÆÄËÊ˸ĵ϶ÁÃÈ¿ÔÏÄÅÌÑÉÌÈÇÅÄÊÍƲÃËþÀ¸¨±±¿Â¿ÆÎÙÇÉÅÄÇÅÈÕÄËľÆô®¾ÂÍÐÆÀÂôºÀÀ»»ÂÉ»ÂÓËÈÐÉËÔÇÏÅÖ¢çÚ«Á×Éê¤ÜÉÊh°¹ß¶È­¤µÜ½­„Ö°½ŠÉ¸Ø£Ì±ÎªÃ¿Ì§Ð²»²ÅÆʩβǚέ¹{¾«½ŠÁ­ÕªÙ¾Û„Áµ¢m®Ë¾yµÁÀnÅÄžˬ®³¥¾·Ó¦v˪}JÄ®©„߶‡Fo¸ºUy¹§Kª¦My¬µJgž´Bc¥µGuÇ n¸ Ôpd´ÁZcœ¸i›¯ri‘¡c³µjÈ£¨€Ï¥°{—®¥Ú⳦­ÌÈ̱«œ¢À¡¦ë¾¬¥ÚÅ«ÃßÐîÒèÏâ¤íÚ¬«ëÈͪøÑ­–íÌÚ‘ì½³‡óØƪªª·«ï¾œ­¹œª¤Æ¤Ëe–”ªŽu‰Ä•q‘Ï}f~²ƒ]ŠÁlŸº‡“t®Ž[]®©u“°œˆ¶ž‹i§`xw«¡™ŠŸÁ•u”Æt^}qcŒ¬•ˆ‰j™šR—´…\~¥Œe£ÖÎæ}²ª¶‘¸¿¯¢†µn¯ÇÍîׂ‘«ÎÒº¡¾|ÅÖÎt¼¿Ð{¿×ÇŒ”éðÄÒæÛ†¸ÈÃ}ÊÚßÊ´ëèÍÔòЪ´ÐâÚåâúâèîîÛÍäìÖäâÆí¥öÈóØñÔôÔéöáÊðÝàÆëçêÅóòð¶ÿÒÿÛâìíÎÿæò÷äòéÄøâãÕàèßßÆïêÛèÖáØÁçðâ×ñÞÔ³éåÜàæØë½úáóÁûáïÄéáÝÆõèì´÷éò½ÏÖâ²ÌòêÍöòÖÑ™çÒÅââãÓâÒìÚÀòâÀ~½à·¥ôðÝ~ÜÖéªÿíøpòééµûàñ±ìòñ—ñÕýœûëêµìàê¾ÿïá®Ïùï®ýïéŸÝóö³ÿØÿ¹Ýßíªùáâ­’ñåÓ»ìëµÁãî„žÚå™zÎÕÚ¶óàÄ°ïÿáÍÔÿØÊÄëéÉ×ÿÝòÂÿÔåÂíÐ¥¨Í¾Ì²ÍÇÅÊÏÏÌÌÑÆÊÄÈÏÄÆÈÊÇɸ«:GÆÐÃÄĽÆÄœ,]ĸ¾ÀËÅÍÊÀÁËȺ»º¶Å¼²>ÄÂÔȽÁÊǤ•ÆÙǾ¾º¸ÇÒÄѼÃÌÐÁÏÐÇÄÅÅǼÃÈ¿¶¹º°¼ÉʾºÀ¿´ÅÀ¿¿»¶ºÂ½°´Âþ¸³¾Ä¼·À½·¿¯½Ðλ²¹¿°¸ÀÁ»·¹½²½ÓÎÉÐÊÐÀºËÎΓÚûGOãèˆ-Üå}+ÉØsàÙ>&×ØY"¹ÐqËë(ÁÀsÎä°&²ä–'Òä‹"Òã'Õ´!¢è¸‰ìµ™ÜïJÕÛ"\ïÏ)…Ñã*<íÚy#ñÅN íÕ'SËÜd$¼ìlÀᓳÕo–ˬ:´é~eºÙz'¯Ö—ü¥'bݪX•³¡?Á½´FÛº+mãÖ€ÝÌ"?ÕØJF˽)mÃÁ†åÀ,1Üå?7Õ÷4&üÇŒ8ëì(ìßs1ÔãKTïÕ—5ÙêË'ëèÁ"á÷¨X÷à¿èç£ÍñÑ\êçk<åÌ¢Úé±ÖÔsdËÛ†#Áô›Ü¿ Pøˆ:³á¨0Rà’T;Ô®-=Ú†2;Ö°E<®ÚNDÀ»S"¾¦7ÀÐ?CÓ¿'6ÞРÉ_JÀØM+´á7DÐ¥N9•ð|YxËÑŠÀfBÛç®]ÞÅk'™ë|IñËC1ÁÕ©A„Ûâ_oê’6ÄØw9¹áº_Îæº@¿Ýº\¨ØÖ‡ªÝß_µÛë_Âè營ëÔ·ÄêõŽî膛éëÒÔîûâäòåïëâæ­bÂéÍR×òÏzàóãÌäòÊj¾öëÂîðèÄôøì…ãúëËáðêzÝçñ²ÝíåµØëçÇ öéíÛçæ½ÎïæèØíéÕ èôåÕçÚÅhÒåá„ìñß{àñê\ñÕð¾ãçÝZ™îý’çÚ‡°ÛÞ½}ã嬛âøz±íî­ÔÜëÜaÊ÷{UÚàÐiØíÕMØìÚbäëÚ_òìÚsÄåð‰ÛÝéVÚíËUòíâ`Ãñãe³íõpÌÝÛmÅÝè‡È÷àe¹ößv¿èØ{“óؽ¨èغ™ø݇Éêé±±Èë›èݳ«ÙïÂgãàÖlòÞÃpòß­ŽäêÍnúØÝgñäÛ€¡¨ÈÐÕÐÉÉÐÔË¿ÂÐÑÇÌÆÈÏÅÈÊÌÆÀ»†({ѾÆÎËÈÂÅÇ16°¼ÅÃÐÏÅÂÊÌÅÅ̺½¿¼±/ÝÉÉ»½º°·±ÃÄ¿½Á¿Âϼù¿·ÀÒÐÌÆÉÈĹ¯½¿ËÐÁ²»ÈǺ¼ÈÍƾ¼ÍÁ³Áʽ¹¶²¬ÁÒÁ¶¾ÁÌÊËŶ²¼ÅÐÁ·¹ÀÅ»©»ºº¼¿½¶°ÀºÁ¼ÃÐÇÈƸ¸àâøµÔÕ̸ڱã­ÞÀ¸sѼµ£Ç¸Ô·Á½Ò°ÄµèªäÁ²¬ËÄÔ»³ŽØ—ÍÀÄ°³¿É±¿žè­Ê¾Ò¹É Ù¶Ú®ÎŸÉµá€Á¶º˜ÖÁ±›Î¼¼ÚÁö³ÉƲ}»¤²j¯Ð˜™{Ø–­œÅ±™—Á¥”F»¦ŠBVœ¡\Œ˜€_e¸¢io´¾`³ÊV€µ§T§¼u·£¾…{¦«‚‚«•x¤®r¢¢°ŠÄ‘Ç×Á´Æ×˶ȭ¬Å¼ã²¶æÆέ槢ÿ«œÁÑË°¯âÏå˜â±žèÀõóíÊÞ‹ÏÍÖ´ò¼à¯Á¨°ú¾¬©çÂߦßį†‚±”¨Ê‡º~½‚­”…‘Á‡‘srS–N‰W´¡•°rƒt‘‰xŒ¯ª{Ÿn¡€wƒ—›°€w§¶ŸŒs‰}p—QŽ ƒ¶Ð˜iƒ}–•ƒd¥È•¨°mª–lVÀž†r–š¡t¾th}ÀÊçž¡Ôï¢Áή|—À¸­åÔÔo°··\ËÚ¹pÆÕܪÛÑr¾Â×yçÝò ±èïËÈãÄ”ËçÉØÙÈëÙåîåëõèûöåæó·êÜÿªõâé²ðçæØèÖÊs´ìêÂåæçÃëá÷ÑñÚÿØÙØáÒéããÊíõìÁæñïÞÄìåä×çëÑáæäáÆÛãâÀæìàÜðéð³÷ëú·ôÏ߸òÚèÑÿ×àÓîáúªÀÔê’™ðù·áýçÂ~óå‹êÞÂÝáÖ„ÅõêÕ_Óì‚sòÚÞbîÅâÝüʬâíü£üçè¨ÞÖé°ÿæë³×îÓ´ùñúa¿îù¨ìóîÂýèí îãã©íäשàßê¤ÎöòvjÜí“¡óç»”êöƒ³îââÔãê·•ÙåÉÍßÛÉ…ÿæËmÿóâ“ÿåÑ»òཅýέBóéê’· ÃÃÆÈÆÆÏ×οÁÏÑÈÍÆÈÎÅÉÅÏÆ»ÇT4¤ÛÀÊÈÄÐËÌÉK,„ÀÏÇÏÍÆÇÐÎÅÆÑÁ¿Ã¾Ã¼'Òľ³¿¼®¾É×Ⱥ¹¿ÁÆÐÂÊÉÇÇÁÊ·ÛÎÍ¿ÂɼÈËȾ«¤µÇÈÆ»·»¼·¶»Á¸£¹Æµ»ÁÄ©ª¹¸¹º°¶ª½Æ±¶Æºµ¶¼½¼¿¿¶¾¼º¼ÀÀ¼·Ë½¼¶¿ÌÀ¿ËÌ»ÁäíÙ*ùäJ>ïã…(æˉ(ÇÞG#ßåf-Êê¡Ñø¢ËêŒ%Ôã–Ö̧æÜ•%Æု穖ÅÉŸêÅ—߯'}ãã„êÒ,_Ûè(xïÙ†ÝâA&êÕEAßâGçí†7Ïé`/Æà€aÎÉyÌÏŽR¥ìˆ8êH5¿æ¤(3ÝÃ#]ÕšK§Û¡@ÔÊ)Ÿã¹Ø«!{ªÛ*[ãÅ}ÞÞ€òÆ*@ÚÒ;>àîN<øÚŠ†ÞÆÇOáè¨DÓë‘8ßðSNæãÅ*ÌôÄKÙÙÌ-ÿì3ìÌ’1íêŸ7Öà\9èßÚFÚ̹<Ï߆`ÐÌSNæÁ›T´è›­ü¢OnÚ¯¸ß§*Pë»0Îðxq¾»=4ÄË8.ã¾4eí­,GÅÉBfÝ»+½µ,kÉäF0­Ñ*/ÀÓT7ÈÛk5¸áS(Öáa1ÍÎ~1ϽU)Áј7®Ì|Cœ×±VÉÔ¨;¿ô§fËÕÃcÖÖ6CÃéÜcÇá­A¿ÙÕ~Óáãw§å±Q¶Þ˼ÚáhÃãà¤ÐòÔŸj×ʱÎæàœvóæÑÎé渮èí±zàçÕ{ïæõ´÷úíÛñè½dÓéæ¼òðã»÷øêèõýà…áéöÝêô{ñãïÐõââÁÈèñàÔèåÕãíòßßÿíÕÉêåͤàæο×òë©ûïÙ’åÞü©ÿæÕ^Æëã”ÚîÝžßÛãŸÈîëÓåëÜ‚ùÁì‘ßÞé{¾Üó½oáÑÐ_¼ûÊpæäìlÓêÐ|üÖÖèèÌ•êðô„¿õñwÛíçVòÙÜ]Õìï´äòá…ÈïÑtÔñåˆ×ëç‚çæès¾íÜ›øÞîŘðÞ°ŸÏî–×êí¸‘ûࡃèÛûßæ·ŸÕýȉöñ¼yìçϳìï²±Ûìß®ÌÏáyãÔÈμÏÈÈÀÂÎÔÏÊÌÐÈÎÇÇÎÅÊÀÎÄÂÆ1;°ÏÃÉÃÁËÅÀºc2UÄÌÈËÇÏÑÊÆËÌǽÃÆÃÌÆ/ȹÀµ¸¼¾ÈÀ¾ÊÍüÁ»ÒÔнÅÃÝËÌÊÓºÂÚÃÁÌÄÂÃÈÐÎÁ¹ÊÏ»¿¼²½Ç¹ÒÓ±ÁÖÀ´µÀÅÆùº«¶¿¶Ä˱½Àº³½ÍѶ½Ãþ¾ÄËÆÀÉÃÁź¾ÎȼÕ×Ýÿ½Õ«ºÏâ´à»ó”Üþ­Ì¤‹©ÐÃÝ©Ý®¼šã½Ì©ï¿½¶Ô»æ±Ó ÐžÑ¸™¼©œ§Ì©ÇU¯½Ð¢Ò¨ÄѬèÌÓÙ£ÉËÈ}¤°Ø£½Î§Æ½»ÇƵšª«vÆÁÆ‚ŸÁ§’u­ž‰n¼©Ä`†²¥ia©’Ra¤£`_ ˜[I¤¹ai¤¯e|¦¼g¬š¿a©¼µy}–•^«¼¯tšº¹€Åˆ·ÙÛµÀµÊ¨®×º»¥àÙ§ÅÆ×֓ðëñÅ£˜åÅ„¥ÚÖÚŽåÇé¿ôÂë–㹸£ÔÛÍ›ö°Ï›ÙÉÀ¦‘«ñŽÎÂÇ€ùÙ¾¢§’ƒv­dZª®|ŒŠº‹Æ¢z¥Ä”ªž‰c¢ÿÄÙµY”Œ‚„’¥n†´ ˆž–Š²¢—†®›Ÿ¡¤q§™\x©` µ‹o…””h„~^ó}†·™„Š “tˆ¹¹¦…®Š„¢§Ú㕧™Åy¨¡€lºÁ¿oš‘k’âÌÍf¢¯Œ`Äѽx¡¨êw–®ªeÅâáÀôâÙjÑÜÖ·çè²kóëÄÌÜæ®›ïÒíìù÷ÆËóåÒ’ØëðÂöÞøÙîæØÑíÜì¦ðñóÀñòïÄöøõòßæú¾øÚñÍÿêñ±úùðÍôìùØ×êéàÚìèÓÛêìÍÖïãäÜíæÝÀóîàÒÜðë¿þÛéÂÿÙܽÚãßÉáÚøÅïêñ¾óæü§ÎìåÜëßüÂèÛü´Ëãï»èñæë±îÖÔVèÿÔ}ëæÝ¡ÝÒÓ_ÿöõ}ôÝÊoØÙúªÙîí‰ìßÿ£ôãä‹èÔéÃïø÷¬þòê¨ûòê¨ûõõ¹ÿ×í¦Úáÿ¸ëÔûÔ¤üäÈÁÕô–Ðë蔉éò¢óñËÔéⳌëèÖ×÷ãÞ×çñÚËñáÄÐÿåÔØêèÓ¸èèÔÕ½ÁºÊ¿ÇÐÓÑÏÏÈÎÇÇÍÄÊÇ̽ͮ-6³ÈÎÎÑÒÌÈþs>9Ë»ÃÅÇÊÈÃÅÌÍǼÅÄËÌÀ9̶ÎÍËÊËθ¤·ËÍÈÌÐË„”¦—«¨Î¾Ú²¡~š›ÁÐÏÔÑ·˜€p‹¡·ÂÍÒÀ¥Á·€~v^–ʺËǨ‡uxˆ±ÅÐÍËéŽbam†§À½§¹ÁÇÇÂÁÆËÁ¿ÌÇÄÄ»Á»½»ÞÌÏþízWáù†2Õç€Ïáu+äç@qÞ½o ½×`ÇÛ€(½ßp!ÁåÃÞˆ$ÝÚpbÔÞt°ì¾5…àËjà³™ßÐ6DìÚ/MßÜ3ûÖ).ÞÖeäÜ]1ÒâeÓãMCà½z,¶Û‰6Åác ´Ù>ÆÄš­w¿ÐšXð¸eÏŠ>Ÿá²¾Ù¾ƒÛÒ ‰Ò«kÏ·[ØçA5òÏ$ZæÍf•ÓÅ.5àÇBAöÜÀDÝánQËås6Öã¨6ÝÖ€b÷ߊ8Ìí±ëéÀ.õ祉ãäƒ;àæ‘8ÖæÉ„ØÛG'çÔ¼)ÔÝÐ?Äïg0Øål%_Õ²¨ß×ÎÚyÞÓ¨!=ݵUÌÏÍ96Ñ£,)Íâ$CÛÂ_æµ4CßÏ#%Õ¿,Bá°%K͵IÌÍR*»Ú1Wʾ3¿·,.›ñÓǖ0¼àI<ÊÅ,Šàw"ÝwYâÐg0³Ù®%â¨|ÝÚr@ÓÞ·r¶Ç¼VîÚ{¹ß ØÃÈ*–ÛéƒÈÜâhã×é„­ÖãÆâàñ°…àსÐãµmÜçÌßéå¿ÛãÏ«íäÕÐÿìÐûìÒxäôÆñêâÂöñݽûçãÈû÷ù˜çé}ôìöÄøòÖ¨×èðíÙÜèáÙäãÛèáêÃœàîϱÛ÷ѵèñð¼ìñÞ‡îßéÍëèõÖîêÎt¾ïþ»óÝâ³ÒìÞ}žéÞ¡¬òÖ˜ªäÜŠ˜ûé£oÕýÏwéÓè}ûÖÌpÞæÒOÐçÛXìãå\ÿÎöqÊíñ’÷ïÛtÆêÆsêÏâkÄîÚ‹êðõˆÙìäkÏìà‚ÝõÍoÁçÞ…Ýóß••âê×àï°±òéÑß뢮àîåÚæùŸ”Úâµ¢áâÕ˜ÞæÎŽáëÏ—þìÍŒíïÒÇðòتՆÙÔ½ÇÉÉÉÇÆÉÐÕÎÇÎÇÆÌÄÊÓÌ´Ó“91»ÆÐÀÈÍÀÊÑÐ}H3Ò©½¿Ì¹´ÃÌÇÉÓ¾ÅÀÏDZ<ӿDzž˜»ÇŽÈØÔÇÊÓ¨–u4=S®Ãªt~„{\>u«·É™wy‰‚fYrž¼ÅÆÈ¿…ƒm2E^˪jMm‰‚z4ˆ¸Äѱyg‰‚aHd£ÐÇÅÄÇÊÉýĺÁ¿ÂȾÃÇλÏËìÿ°ÌÃÔÀ˱ç¶Í¤ØÜÆäµÂ¾²¯¾¤Ó¥Ì¦Ø²Ì¥á¬Û¬æ¦ä¾Î´Ò¸Å¼Ç¤ˆ¬Ï¦ìºÍ¯½˜Õ¤º¼Ü£Ê¬ç§ÊËҩͻӽ²³¯­®™¯²»ÜÌÀ´ÙÆŸ³{˜°°·Ÿ»­[ʬt˜¾¥£zÕŸ•}Ä©|rq¦eÒžŸ„d¨°DŽ¨°‰º£È{é¥ÆGh¡¿|¤ªÇfŸ©¢‹Ó¯·¤Ø”˜‰Ð©§µÐ®¡àÇ°âçƘáÍ¢½àî›ëÏÑšØבªìߧ•éƸƒîÄä~湟§ßƱ¡áκ’çèòÆý¿µ•ë¿ÉrÔÉèˆæÒ·¤ãе™œ…ÀyÅÍé…Ô›¸ŒË¨»˜¦¢–šÞÛω^¢Ë’k|«{ªÊ椦Ɔ·’ŒW‡—ŽŽ«nNW“ŒÉˆ~|˜p“­‘nyybq¹ÈÆw¨Å¯¡¦¥‹É©¹zy»¹x°æ®ÁÞ§‹Ð¶Él¹ÈˆlÀ¹gvÀÃÊm§¥¾t—ÀÜm´©¸j»®ƒ©ÏÜs°íîÀëÑî¿Æä맭Þà½çç‘ŸäçÃvéäÍÜíæljÓäÕÕèßê´èêÚÞãèåÒòÓù¼ÿÞí·üïç«üãüÉíâüȽØüÇîóݽéñêÃÛêóâÛçõÕÝÞèÝ×ðÜÌÃïíßÆëÚçÛûÔï®ëëè°ùéã·éìçâÜÿÚÄÞñêºÝñáÒèâêÀ²èõÆßå׆ìô¦µôæêèìê¦þáí°çßÖsæóÏKÛë݈íèè`áðî¡÷áÚ­ÿäè¢ßÏô¦ïÚìÁàÝ÷·ôäÿ¢üáì—Üîï™ÑÞþ§Õèî§ôçñ´¹íãÖ¼ïæÖÃíЈÝÞê±ÔçÍÑì뇫äîäâäÒ¯ÜùÕÆøÛÉ}ðèÞÀøàßËÿÚè¬âˆÃÄÃÇÁÂÆÇÅÃÉÑÊÁÄËÇÃÇËÔÍÊƘ/3ÊÁÄÄÍÔÉÄÕˉ26Å¿¹Ä¿ÀÈÄ·¿ÍÌÅÉÀļ²=¹¥ˆƒsRFrœÜÑêÙ¾ÇÇÂÉÊA:W¦š’¾º½Ç¾“9&½¬a{»½ÉÍÅs9KεÃÂÊÊË·4Œç¬ ’òÈŸñ¬‚Üä$[ÉÔ0aáÑVõÜ`OéÝ:/åâ@CòÍGÕÑ}Uö¸q"Îùw(íÆo)Åä’æÌ]7ÉïX!ØØ´pØ©=‚Ô¹Íí‘#²ËÓÀÀ¹¤Ù±nÐÞM÷ÒOêå!cê½yóí©>ãåj(êñ›xâ׎'àéœHÝö‘léÕ‡OÝãµ5Øó°CðâÃ,ñé´AÍàÈcçÔÒIåâÑ8âî©=çßÃ.ÒêâBëا1òöŸ8Ðã¾W¾æ° ÚÏÁ:¸Ã­±àçºä¥ÚÓ¾ ^ÕÕ:œÍÕLKФAÄÑ,-ËÐBg‚´ÉºÂÒÉ®76QMÈÙ¼·¾Â¢76©ÂÄÄÇÊÆÀÀ¼ÇËÈÄÀÂ˼ÂÈÓºÿíÉÔ©¿×ܛɾدۥ¡‹Ã´«¬¹´¯•Ô³½žÞªÁ Ï–v»Å¨Ö¹¶‘œ¢Ì¾´±µ¯–ì°Ó®ã¶Îι©s槫„̱¡‡É·¸±Ç²ÂÎÄ×—ŽÅÅÃÃÈÄÅÖß½±jfʦ‰€º³ƒtƦMlšµ¥eÏ«¥wd œ[½¤o`¬¼t_´¥ze¢±uŠ¥ºoÓ‡Ÿl½ž¿)„¥Âvœ¬¦Ÿ°®ŸœË¤¢Ú¡¸ˆ°³¤Ù΢«èÚÊÀÞÃð¦ê®Ò©Ì¹­«Ùá¾´ÝÒߗܾ±’۾ܜîÌÅŸ÷½˜íÚì´ãèä©ëÒƨÉ×i¸ÆêïÓ·°qi‰·pˆ¿¦¥x«mª~¬z‚v£“Щ˜xzu®‡™Ž¢v}{º¤‹Œ–›Å—° nž€tj—š† ÍŒiaf”—°}‹—†”³‡x‘ ŒƒÍ‚‚²£•m­”u‰­Ãmuǵ”Œª°¶g¬–€¹Óƒ…’Í‹®‘‚ßún»§£O½ q‹z¬ï•ºÖâƒÆâîÇèÕу–ÑÝÛ³ùçÎéðåÞ¼ÜÊÆØÛøÖ¼áÔ¢êäÍà¹èëÝpïæÿèÚïÛÕüâã¬òçõÆþåíºþÕàÄíßü¸ôíýÞôëïÇíâáÏáëðáÜêðÝæÉÛÑéùçûôðßÓ®öäØÔñàÙ¬êèè·íãÞÁÿËíÇùÙõ¸ÙúÙ±Áãä¼Ëóç½æáíÊÚêÌäãÎú¬èÕçÓÄû÷ظúÚÛÖïáÖ£ðÊüÁóÆÿ¡÷ãá°Þæà–âèô¶ÿàï´åÿÝ—ìêø«æÿë¼öàä´çäô•êÞù‰Àëù±ýêùîÝ窑çãÄ«ïí¨ÚÞÓ‡–ÜïÀÓäã¨ìÞÑõçîÔÝëëÖÐíüÝàìÿ¾ãÿÚÝÇçìê¢þíÃeßÎÉÉÔÌÇÉËÉÅÄɾ¿ÉÌËÉÄÆÀ¿Â75Á½ÅÉËÐÌÄÈ89ÇÌÇÅÅÇÍÎÉÌÐÊÂÉȶ¸Kj®ÖÓÕÂÂÇn3rÍ×ÊÔÏÈƽÇaD0¦¿Åº¼³¼½q<5|»¾¼ºº½Â97²ËÄÀÀºÄÄE><˜¹ÎÀ³¾Â²®>AF†ÁÞº¹º»¼³B8ÅÇÊÍÌÅÂöÅÌÈÁ¹»Æ¹¶¶À±÷ñÿ[ïñk´ã¦ÛѯXñéF=Ýìb*ÈâeÒã}(ËõdæÖ¶½å‰ÄêcÕà` -œçÀˆå»ƒß¨ žÚÍ'déÍ,nñÖ*NëÔ)èßnêÝZââ&ZíäB(³â|ÚݬÉâ' ÉÌ®ÈÆœ¨ðo:¾µp 7ªÅ|¸´-•÷¨³Ù²}Û°vßÓ±ÞÖ(8ßÑ"RçÌbι"ÓÏ3JñÙ/>ìóª&õ×)BÛå£)åÔB+áýrWáê]&ÆôÃßÛÐ+ñïg9àäË*àá¶,áï·(ÍÞ\ÉádWÔ礄Ú庇Àðw*ŽÊ©¤é¯¥ó ÎË£M¨âŽÎâŸSã«{ÎÛ"1ÙÐ0Ô¾S¸áÇ3GÔÝB=ÕÕN\íÏ"oÙ½mVÇè@ZßÎ)gÐÓ=@ÏÒd;ÌÑ&Óò_E×ì+Ãéi,±äx?ÎËR]»ÛÀ,Œò‰>wÜtYÀÕv$kíÂSÙò -Ë«"=ÁÄ2±ßÂmžëæiÜíà€·å쥆ÝæÌÜú覴Ùá¤]ñç—žòôȯæýÂk×ìØäóæšäé×ÄüÞÛ„×ùâîÝã–æñîƒÅûç˜äñí»çðà¼÷ñçÇßäíâÚòôìâêÞ¶ðà¿£ÞîºbçãʾéâÙ‡ÜîÙ‡æõØ~èåÒfíóßzìçætßò슋åñÑìÙ᛹õÜŽúÞŒÊà猒Þ÷ÅióéÚ[ëìÕÕöîáUáóÐyÝæÞrÞéטõíç“óößuäëÄ»îéïyøÛè\Ôûç~ãòØ…þñÚ]­ÜæôöùåzÛÝÞ¸øÞ¯‰êå”Ìïí±çñÀÙâ⛕ÑÛ¿¸òû±‹óÝÆ°øñÕ¼ãÒÏðÜÕ‚èûÒ‡äáφˌÊÅÅÎÕÏËÌÍÊÇÅ»¾ÉÏÇÄËÐÉÄÂÁš79È»ÄÈÉÌËÁ¸¿†74¿ÊÉÂÄÄÆÇÇÉÉÅÊ»»Â¸À“ÂÙ®»ÓÍÀ´º:H‚ØÆÏÁÉ·¼^HA¸ÙÌÈÅι¿Æu;<¹â¿¹ÆÃij“>2ƒ½ÃÁùÁÅE<=ÚË´²ÇÏú»C8AÉÉÇ¿Äĺ±¹A6‡ÃÁÅÉÄ¿ÁžÂÂÂÆÁ¸¶ÆËÉÁ¸ýöµÏÌËž´ªÑظެ¼¶¾«²Ã̿«۲įà̳À¦Ò²Ä¯Õ˜à¬×´Ô¶½³ëžç¥ß»Õ¼ªaںњè¸å¹ÅµÓ¡È±»“ÓÀŨ×Å­¾¿Ñ¬rµÎ²»ÔÒÁ¡±ílƒÖ•»n䪬cǺ•|ᬡR~¦{©ž™jo ›ms¦»j~¬ÀwØ‹­¡êŸhÙš£næ·vÒ²¾©ƒÈ¦¼Ì©Ñ¿ï½•‰Ò€Êл­±×Ê«±ÛÎ¥ˆØÌ«µÖÆ°¤ðŸ³ìÄËzåÏìÌãЧ£öᣛ×É®ø¹¸ŒêËÆ•z»¤»ËéÖÿ½¸ˆ›±Þ Þñ¼¯¸ÓÞ¡¹°y¢˜ƒ{¬Œv§©ž•fŽ®œ®~Ž~zzÂ}Œƒx²•Â£™©œŒŠ”ç…Ž–Ú›áéØw¨›œª˜y™‚|‡£”°¬¹½‘̯¡œ¶¤x}ÍǪk¶¬µm˜Š†whœ©ÓÁ€¡á¼…»˜¨“¸º×r½ ‡aµ–£ˆš«g¿±–x¢»ä’õÔö¿íâåØÃéêÍßöõÄãåäÎÅó̸‰ãâÙáñåщÏâä˜ÍùíÃöãßÏÿèò§ÿóîÆúÿí¿õôÞ«÷èæÆíßãÀåïðÅõ÷íÐèèñêàßâßßô÷¶ëâïîÏåãغÞøäÖêèê¸îíá©ùãßËüáìËñáñ»òäæ»Øééʺúå®ìîÿÃÝìàÃÊìÜÔåæîÛÆôàà¿÷âË­ÜÔìˆèãèêÑë½úäê¸öÖèµïÒùºëâñ§óúØ»ïðÞJàêà°äÿæÉýáø¤éôò²Óññáçÿìêê⇕êí­YêçκôñŽ«ßä°ÔéíåÁÞÿÁÒîÛ¹SçèÛ¹îòÞÝøú’²ëõèùÜì•ñáçœâžÑÅÄÇËÉÉËÊÆÆÈ¿ÂÌÐÇÄÉÌÍÈ»18˽ÁÅÆÇÈ¿²Ã…63»ÈÊÂÅÃÀÀÄÄÃÄÍÀÄÎÆƳÍÎÄÆÀÄÄ´¼748Ö¿ÎÄÏÊļS>EÅÒº¶¹Å­²·a78ÀÎÁÎÓÄȵ <4k¿Ä¼Ä»ÀÂB?JÎÆ»ÃÓÉÂÐÀ79Uê½²½ÆƼ®À>5jÁ¹½Ã¼ºÂÇÃÃÀÄÎ̽ɿ¼ÃÒÿåDéýƒOðæt-ïå½ÞèLNçñS3Öè¥ßôŒ!ÚêŽ<ÖÝpÏÜ”Ýé¨-Ýæˆ"¾ÓÆQ±ÛÆ—Îѯٰ‚ëÎ!‚Øá&•ÑÁ dÊòAØàW;ÔñWÙ«('ÅóU%ºÆ^pìÓi<îÙY.•ÒxgâÐj$¥Ôq(»çŒD{ç—?×߬sÑÔh½Íº@×Л-¾é¿'ÉèBçÄ8•ÜÛAÏæÓˆÑáé‹çë°”æôÎðêð„Ëøã–°ãæÕèäõ³×÷îçðîâ̲çéÙãèöÏÅðàñèäÿéÿãúìÌøëÿ¿õ÷çÃöûèÃÿòéËïììÌÞòóíàèîÛêÜýåçñéøßäðÛÊèÝËãèïöÍûíóÂïçäÑëí¼œ×åðzÞÚåˆââîÖæÝø¼îäè¡Éñá£éç•ÆóÚÏvßìÄgãÞÕs÷õÂfßîç€îåç“Üõù×ÿõçtÝúÚáðË¢èîíÈðßö“üðÿ¹òòÑhâþó»ôïÚŒáàñÃðïÜnàÓܧ”àØš­Éø£âå⦲á箬äâµÖç쫨æÞÆu×þ¿Îßö©îêíÛùèÓdñâÚ}æ×¾fÖÆÈÄÀÀÃÆÆÄÅÈÐÈÇËËÌȾËž¶Œ.4ÄľÀÆÆÆÀ³Çƒ79¾ÈÍÅÇÇÁÁÆÃÁÇÈÊÇÄÅĹ­²ßÉÑ×ÅжKL8ÍÁÑÎËÌÑÃT?OÏÂÂÃÂ˹ÂÅn>7ÊÅÂÆÆÍÉƵ2:kÑŴžÁÂABWËÏÊÄýºÂÇ2Glܻ¼¾ÀõÇ=9OõºÃ¼»ÅÈ´¼¿ÁÅÅÅ˸ÀÄÂäÿàÊÃïÑʤíܢۥÊÌÁÖ±¬ÆÏױ˱ӔƾÔĹv£Ñ¿äÂÓÅĶÁ³‡”Á˜‘įÊnÒ¸»NƳ¥=˳ˠ¾½»rÇ¥ä§Ë¼±f’Ų™ª¿Žž¼ªl¬ºÅmYÌ—eƒ¶°v̵˜Ä´¥l…º”m}­‡`xµ§bwƬk` Èpa´°j°Œ”]E´ž^ºŸÇe]·Êd‹ª®s²´«z¶£Ëwͦ»wg«ÆŒ²·©Ø»©°åÌó£à¬ ËÜÁ£·ÐðÀÑß¾áßîèþÈççܨÛåÀ³úʹ•©¼Ð¦ßÕ¸˜Ÿ¶Í˜ªÏª¨àĸ¢ÇÛ¶—ÿÝéÊðÒÉ–¶³ß¦·”g¥§‚v¡ÇœËÓ½˜Î²†”ŽŒ‚µ£‘zñºvÏ”¿vª•‚}¡£xp¨¢«†¨›|l¢«·‚Ÿµ©”•ž×¢‡ª©ˆ”¾«‹ƒÌšˆ‹—r{Î˯ž‘x’Ä…r†¦£¢nàÊÅoºÒ”|É­Ç}ÁоqÅ­É‘ÖªŠµ ²v¾ÊôxçÏÄ«ëÖÕ¦³ÙìÓÖñÑÂúàý…®æÔÔéÈÖÙÞÌâÌèØÝøûéÅøÑëÓ°âÞíÕÓõâþýäðêöÜëë¼ÿáèÂíßí¿äìݵñæêÈëëëÇÙïñåßàïÓàçôÎ×çâóßäíâÚôèÇÞçÿÚ´îëî±êüåìëÙÑËñÝî·øáâ¹ñëìÎüåþÅíàë·åØñ´×ðô¶äÓÜè›ñæî¥ÍïÔsãîí»úËÿÂçó¡ÇúÜìŽÒÀä‹Úäì½ñî߬îÕòÍøéÒ©íâñÎíãè¡èàëµöÛí¤öÏõÂðÝé•ÿâ黩ÔóŨæþÏîæö§²äçËÕêùØÐå×µÊéàGáå»Ýì÷¿äìâ~×òîÔ¡÷á̯óéÑq×ÇËÂÁ¾¿ÆËËÉÉÔÊÆÉËÏË¿ÆÀ»¸–82¶Î¾¾ÈÇŹÂz3?ÃÈËÅÆÉÅÆËÄ¿ÈÅÌľ±·¯ºÊ¸ÑγÌÀ[<<™ÄÍÒËÇÐÁVCWÝǼÇÀ¹ľeC8ßÏû»ÑÏÌ·)C`ͶËÅÆÅ@?UÑƼ¸»Ãľ´,@jÇ»Á¶Á¾Ê¹Æ7?@ųºÇÀ½Ä¯¸»º»¼ÂÌÍ»ÁÂÄÚÿäYHëÔIÍÒÎ+ÈÔXñÈ9DÙØ^2ÂÜ}'Óé…)Ñç6àØ·ÒÝsÖÊ\Ðè~¬÷¸ŒÍµ¡×´ŸÞ¶*sôÏ…îÖ^Ýê??Îåk%ûè?aáÞ)?ìÊ\Ðê„MÕÑ“&ËÖZ#ÏÓžÂÇv ÐÒ[ÃÚ˜ ÃÓŸ -v¨»ƒð˜ Áä„AŸÍ´à¶I{à» gìÎ1RÜÁ"}ÞКÎá$EâÞ0uÓëe=îóhVËê»+íò>`ëæ€oÖßo.ðÌÚ$ÿåͤÿ×Geíܼ?ãÝ°)ùß½=ëÙe4ÛÛ‡4åá‰(ÈàHEïó¸5ËäÃ0ºÑ¶3Âûd+zÚGžÜ•'¼õŽÃë¶8ŠËÉ"HÖ»&jã±ÂǨ'mÐÜJ8Ó»7+˶*,¹Ú2Þ¾MmôÕ)wáÌXZÝÝt:Â×{X§´hVÙÁd0ÕÌ’NºÐo7¬æ…Q¹·!¸×µ]áâŠ^¬ÛdMÏÙ¡aÆí¦(¿ßÒF•Ùµ¹å¨8ÄîàTÆäâ…ÒÖŠ¢ã꣗êémäéàŒèÝ¥høè¾®ðå³’åàáL×æÞËØåÌ´úèÖ€ñâôÌþßåºóöÒŽãòÿ×îñÝÊóíâ«êúî×ðåïîâãòÚëæãÖÙãðïÒêçÓ«âö¾ÃßïåÐïÿÝßóõÌîÎÎÊêèçtëîÚ^ñóà—ãåävÈåç’êëí~àèûÊáìö›Ë÷äéÙêæàqëà¹iÝòÝ[ÞìêöãîË„åäádÙãó{ÂíÛóèÈ`äîÞvéúÝnáèëéüíÝèãîpÎçÝj¹ëætåöåžöãÀ¦ë즑äósÌàê®­æð®«ðè²ìá·—ÝÌÒ|ü⢌íôìöáÿÄÅéýÛåøéЖéšÀÁÌÇÉÂÀÉÓÕÐÌÉÈËËÈÌÐÌýº¿¤E5®Õ¾½ÊÉÅÅ¿ºp.AÆÆÇÂÂÈÇÉÎļÆÈÎÍÓΙ©½Å³ÊÍÀÎÕÒ…0DoÐÆÌÊÇͺP;MÚÇÂÖÌÊÅ̼^@%ÒÅÊÏÅÄÚÅ«&KI¸½½ÓÌËÈ>7KпÂ˹»»µ;3[ÅÁ¼ÐÍÃϸ½/D;ıºÊ½À¹À½»ÀÂÄʾºÂ¶¿àÿ¯ÇÇԜɫâxØÆð£É¤ã¤·¼ÎÁ¿á›¸»Ü¤Ê¶¬¥Ù»Ï˜Ñ´Ô¢ÁÃ’ŠÄÊà¢ã“µÇ´H¾¼ÄjÉ­§|Á§¾[«¼Ö¿º±µ‚¹Ù®×®æ³˜ÀÑŽÁ½Ä_§Æ¼“X½ÉUΛ֯•VƯ­O¾¶N‚¯}Wˆ˜Äp;™Ã]Y¦­‚¯¯ªQl¢Åwc¯Êwwªº™Ë¨±Š°²Á…¹²»uÍ­¸¢Ô¬œ’ÙŲ¢èÓ³¼åÆá½Õ·²‡ôÉ­»âŸ¥¢å²Þ©íÆåáîͺæع¦êØí¬éǺ¤“©¹œûÓÌžåƵ󽥻éÓ¿ŠßÇÇšÈÇÒ¦ÎÞÁ›§‚q“³šµ~Ù¢»ƒ½³±ƒª„š—n•Â§¸¹¢q{´˜§–Š¨§}v††´x—Ÿ›œŠÍ’·ž“nµ£åœš‚§­H”‰}¤¾¾êÔ›¨¤n™Ã¸¹‹[±Þo¾£jv¶‹qm›‹{†¶§»€³½Í~ÔÒÍs¾©áiÅãÆÁéÆsØÔâ§î×´®öâÅÕÙìÂôËÍÞÒíÓ¥o²ÅØ×ûðÀÙíÝöjç÷ÍvñìÊÞàØìÂôáõ¿ÿÎÝhÝáÿÕìíæÅíïîÀëìÑÌìî÷ÊèöíãèðóÙèìæÎçéÕéÓ×úàÔóïÌÑïëÛÎïëßÃèçÞÁßäÒÙòâ÷ËûÛðÕßåâÑñÕ÷»ÿÔäÅïìò´äØè¿áÓÿÈãòßãÔâíö¤ÿÜϦõÚñƒñÕùßîèó¿îâ÷´éóÐsÁìÞ¨õ×ù«ë÷߯ñèÿ»øáëíÿ×ì¸ñäý´×æ÷†ÒÞñ£úêñ¨¢ïìŽíð»ÒÝÿ¶èØËÆÉâìË×æñÂÀÐìÎÞÒßwmâáÔÒêÚÿîæìÖÂðæÒÞ÷ÝÕ¿î—ÅÀÐÅÊÂÄËÍÐÑÌÔÅÅÇ¿ÀÉÊÄ®·Äª63¼ËžÁÖ¼É`0RÕÂÐÂηÍÂÐǹι±Ïΰ:K¦Î»¿¹ÃÄÑÄ€85jÌÀ¿ÉÅų@A`ÍÀÈÐË̹»¶a5=ÃÔ¿Ô¶¹Ë¸£6?O²Ã¯¹ÀÇËH7KÚÌÅÄÀ¾½¸½+6gØþ·ÄÒÀ¾ÉK@GÏ»¼ÇÄÀÁ¿ÁÁ¼¼ÃÄÀÁÉƾ¦¹á·BØÙn<Þà©Öæ *ÓãÏ<åà†FÍÚ´(ÎÙ“&ÞÜo%×Ëœ4¼á~*ÎÜp&ËÖ-ÅÔ©ÝÓ£ÞØ<º×¸*‡ÀÛ.‚ÍÝ1†ÇËlÞür,èÓR>ÝÙ]QÚÐ-4Ûèk5㯀+ìÀM9½Ç‡-ÀÉ}.Ì×u^ÆÀJEÁÕ®)Z³Ÿ 6ůKØÅ–-¡ó¼¨í¼.§ë°G™ÌÂRÒÕ3wÕÕvϲsÔ÷7câñ\#ùé”täíš@ÔܘmäëFóÝ›këÏÑ?Úô¿KêíÿçÜ™`ÀçŒ9ÒßuBÖÂB4ÕåÂAÓÙÝv×î£Vçç GÛ鼩ÐëUÆÞ¬JËê‹ £Þ« Ç¿´U‰Ä¥?ÂÑÇ)t­Õ@—ÓϺ蹌ÞË3a¸Ù)`ÑÌ%G»Ï51Ô¿DgÍÏ/mØÜITìÖJ]ÕÑa,½ÊS>ÚËN5ÔñÕ€ÛÖvT}ÛvoØÏ5ÂÚ '¬ÖŽ/¼¹iT¼ßÇ5åí§,µèáPÑׯ9¨ìáU¯ÞáfÒÚÆkÀßÚ˜”áÕ¸tñì„…ôÛc˜æã™–ðÃHáöÞíéöÚyê×âÖöãéËòÛ¾¶áéð•ßÿÝ~äñû~×çöÕôìäÔúääÑîçßrÜôýãáëòßéêìÍàèé‘£éòîÿéâÙÞéôÞ×ìàß¿áäãÓ÷ïçØÛåÏ´óêáÄëØáëôÕå™ÞÖÿ}âï”ÂçõœÒÿ܉Þà뺇äôæ•æøÑiñåÔ‘îÿ¾ZíæÃkâÛñßñá÷ÜýêöÒñûÉGÒæÐæðõÃöàâŠÕìësÐñèqÚðæŽãïÚ}ÅõåpÀîÒ³×õíÁ¼êç¡ããøš¨óݼÒèá·Ðñë»ÉÝïÌëîÖÇîß´”óëÒöíêÙ~ððôäãæÔwÞÙÍÅÆÂÆÍÏÐÎÇÌÄÌÕÌÇÈÄÂӹú@>nÐÃÊμ¼Ä´µM7dàÊÇÃÄÄϼ½¹ºÅÊÊβ]/8R¼ÄÉ»ÀÀúK<<ÔËËÇÄÓÍM=aÙÉÆÊÂƺÁ½e7<ÉǺËÊںƺ@EbÈÅ­¾ÆÁº;7SÎÈÊÎÉý¶°.:X¼²Â˽ÑÇ¿;:QÓ¿¾ÉÈÈÌ˼¿½¼ÀÀ¿Äž¹¼Ý÷ºªÇÑÙœ¢¾Àص٠ê¶æ»Ñ´Â¾å Ó¯ã³¹Â֤ųûµçÅҲȩ®sÅ£Þ­±ž„•Ì¥¼\ʲÁŽâ¬­uЪ«a¹½Åϲ­_ľ⚰̶†ÇÀ·n…¥˜c—¡¹’·Õ®f•¡³s¿»[Irªgq¾«I—ćdu«±‡r‰¢oIš§ca¤®Ue½±ŠQ¬Ãil¢ÁrZ ª`r”®€º¯ºw¥®¾}ê‰ڷ´|³®œÃÒ¨®Éë§ØÅ«¢ÃÀÐÀÚÊ»°ãéû‡ïììÍî¾øÇ׿š–ëܬ‰ëá „›Âž£ñʶ‰ôàÔ°ðÀ½ ‹Á¾‘Øʯš”݇¯„²sŒÈɖĆ@…°§k‚­QvƒÁ°Œ¸~‹¼¦ pǔԉ½¢Âª§¡ o­…“w•¤“~¸‡œ™“o—´ô£«’”prïȯ‹À“€£ÓÚ’§æÕ܀¦nµ©…ƒ”Œ‚}®Oˆ½­t…Áž‹Ž¾ÈÝ[ÕÌÂvÑÙâs·ª¯_Ÿ¼ËaÚßáSÔÔÛŒÅÜÚ‰‡å鲨ÙÛ¥£àÕÄËæùÐÈ×Âl¢ãùÜþÜÞÙ\òñº”áÛÝÒÿìÕÑéâðÏôõëÄøÜ÷ÕÿìðËçéïÎÿóéÑ÷çÿÑÿæàÔáðóãæáåÍåêèÒÙéÞíõÚíáßäèÐÒôðêÅìäâÐñÍâ×ÝéâÈøòåÈìâöÝëíóºúÍô‰…ùûÇìàðÂëßðÃýèïäÃûâ݇æûò¦óéÚÉÛðÒ³ðÛç¼õøäßßíÿØêÊã¾Üãä“ÿÊìÆóßï²íÜõ¾èéì¾ìïå¹ùáî¥ùù߇Òâü«öñÚ³ëêÊÆèô¾ëßñ‡£åáȺçêÑÚÛÙºÀëîÜàêéåÌô彚áëÑØñíÜ«ãêêó÷×Æc¹Å³¿ÄÂÈÏÏÏËÂÙÉÈÉÁÅÓÙÈÓ¿¾Êc8QÖÆÅ°£Ãζ»/EŽàÍÉÉÎÑÁ¾ÉÒѹ¸ÈÚÂ88G<ÈÉÄÅÏÍÀºDF@¿Ê¾ÇÉÃÈÉO5UÓÃÊÎÄó»¹d78Õº¾Â°»¤)5ZÈÁ±»¿¹±8;XÕÈÁ½¹»Âĵ5>]ÍÆɱÅÃŽ45NÔÀ¾Æ¾¾¹¼ÂÁ½¼º»Ãµ·ÁÉßøÎOCÿÓ9%éÿ”AÙÚž'ËÜ\\ØÙ’ÔÚ´4ÑÔ¦(ÑÑv+ÁÚŠ%ÜâmòÊS(×àf ÆóŸ+¶ã¬!§Ø£¥Ë¹jïº"Žâµ„ØÁ#<áé9-ê½=\Ǿ~Ãô42àÍ<Ù¼uÈÝHT»ê…_çÕj»Á_E¤µ…“¬¨@dÌ´$ÌÝ™±ï¼yÞ©?ï°)˜¹Á"hÙÃnÒØ9cÓ±§çÔ'pûâ)UéÐ-Rö¾=Ôß¹KôÞ7IâÙe~ðÖ“¤ÿæá ÷ñ½L÷îq{ÉÖ¢kÞâFåÐ@&ðÝ¡RÿãjRÌäÀ:òé`^ØÙÜ}¿ä‚äÍŒáâSHÇé–OˆÞDÇÖš*™Õ‘ÒµFØÑ]õ¯2¾½Æ–ͽ?>ÇÈ<ÞÏ!6ÉÐ"KߤG0ÅÅ@Ïå¹/ZËεjÌÒŠGçÏ…}êÊ~nþÉi.ˆÍdC¹µ5CžÜ¹.MÄ‹æ³DÌØgLÖàßaÆá?Ìñ–*Èæ×FÏñâuºÜàoæáÛ_£ôºl•ì웽ÜØs¤á㔢äín…ãÛ´Êâþ›™Ö×ÄeÛãÑXØçÖâäæÚ™çöÏ~ôÿípÓïÜØíàÁòäëÏïèá˜åúØœÔöçűøìÆØìïÓäæ㹪è姻ÿæ¼ÈêẌîåùÐùê×~êã¾³çåæÏúììÃÿåå×âëìnÂíÕ‘Ôüù†ÁêãjÍààÏàðéËuïÚÎsÜüÏëäòÆœßþË`áåçŸüÏá‹ÚÙÅiÑæÚŒÿÓÃiÿùà‚ôàæ|Òÿè€Ýßðgæëßáðéè‡èÞÓV×éô}ÔÜÕ·²î找ôëyÙâùã’­Þá’®ßášçíÇÎñݺíѯÈçß¿ˆÜýª¤çíҗ梱ǵÃÆÅÊÎÌÎÌÃÇÁÌ×ÎÊÎÌϪȷ͖4@ÉÍÁ¿½ÀÉ·¸e»ÒÉÓйν̾½ÍÄÔÁÓÅT\™®Ê¾¼ÑÅ»ÀH8SÄÉ´¿Ïп¼T>WÑÁÒÛÒ˶½¿lB<áÆÕ½½²Åº–3H`ÏÍƹ¶¾ÁGD^ÉÃÇÏÎÉÀ¶¹7AeÖý¸¿Ã¸¾¾GèÖ==ÚÊ{KËÈt$ºÊ\2ºÛ€)Ç×dÌØqÄË~BÀÕ©8Žáº'ã£ÊÔ•"¥¾Ä™ÈÁ@{ƼtÛá:]Üæ WäôTÝÍ màØ@.ó×>7âñlpîÏ…"ÕãŸpÞî‡oôÞ…ŽáæÕ{äãÊ>ÿà¢PëÏxUðÞ?#äß[FÚÛ‚6ÓØ{(Æ÷~;Ýã©(ëÑ´W¿Ô“"©ËšÄ×y?ºÖyçž1ËÙ©Çãž>©ÅÄ4FåÂ4‰¼±8»×Èc,§¶D»Ë:1»­!jÄË1A§Ù`BÊÇItêÏgPÅÄG<Ý߃EÕÃq8âÕb>ÊÙhíét.™Õ8=Ëܧ%gì+Èà¨eÃïÑeÛáÅQÜιUÌáÅbÃ×ÊX¥ÕêŽÐÝãu§Øª[×ÙêÛö¬yõàêðç盘äóÀµØäy©ÛúŸ€àíÕ‡áìÁrÓñÑ´öëÐÈçæöÅðþìÛôöãÅþñä¶ìùéÉûç܇äáìÀúóöÚÞëãàéêíÏáççÞæ÷ôÜÓàëÛÞîè±®åíéÁÿîú³íëôÓêêØÍóóÞ¹öêù¸ÿñôéèãðÄõåü¼íö×ð€¨ùì¥YÏÐÇ`Úï̘ñì¾eÖöÔdÕåØ{íÞóÕðÞÜwÎÔÙ„ëçÝnÌÿÊNËñøÒêåû…ïèÞpáëßiÑØì×õâï~åÙÎb¶Þû¯£îëËÝðõÙéíã‰ÉÞê°±ÓãÇÜòß°ÏÝïÈyÖë¹~ûùÂÀäß©ØùàݬêæÂ|×ý¸kš²ÉÃËÊÉÃÀÈÏÊÔÊÍ;¹ÀÁÀÃʽÃÀ«B^ÂÓľÀɦoÇÊÆÑÂÌÄÓÊÎbH{×ÃÅäÁ¥jŽ­Æ̹Ưݲt=`Õ½ÅÉÈÊ»ÔÐI7^ÔÀÕÕÄÆÂϾT27Ö¿º³½È¹È 48IÎËȸ¼Á³13MÒľÅÊÍÉÀ»7:`׿ºÄºÅÃÄ·68@ÑÇÊÈ»¸¿¾ÃÁººÃÇÅǼËÁÉÉØÿ±—ÃàÒÙ®÷³á§ê²íÅ©·Ã´Á¡Ú´Ð®ê©áµÓ”íºà·à¦½›Ã°Ü¤Å¡ù±µ£Óª×²¹‚Ï®«p˱ܦ۷ͲÀ°ÀÄÖ¸º˜Ê¤¤”²Ã¥„¹¼ÌÃÌ·¢|šŽª•œË³€±Å½ˆv»´}­¹®Q‰£‹NÍÀ eœ¦˜ek›¹ps…ÐVg ½u‰´«cu˜ºT»©es˜°yg£¾“Ú¶¶™Î¬¿ŒØ°¶œ´º½Òή–ÜŸÏßѦšèÈ­ ë³ÑçæóºãÖèü×úÔõ§ñÚÒ–àÌ»¤åį•‘º®ÌÊŽú㬕¾µ¯Ì®ƒÛǧŠßÍÄÜá·šÃl˜¡¤º¡©b¡¨®ÜŠ«qzzš‘ºœ ’y{¹ª€‘µŒqƒXLy†¦˜wn~s¢¶˜{¬¤£•’Ÿ¥z®ßǧ˜’›rrÈ´Ÿ~Ðw£Ä蓲͛k‡¿å Ž‹v„ÄÀfš°™’²Šh§ÜÕ^ÌÔÞ‘öÌÀd²™yÄÏÚ€­°Ø°àÑäe§ÔÓ¡Õàëp”ëÿ´‘ìßóôßêÚÁïÙÑÁÞýßØéíÀ›÷Øæ¾ùãñÆíïÝÄêèçßïéõÁöôæùõì÷ÀúõñÀíòݧðÙú±òäóÅöçêÚïûåàçåèÌâééÎÞèêàÞïöÝË×ïßæýÛîÊùÍð¯êéß¼ìóÔÌõíà¼îâÿªïíïòôÚÞÃçîñÑÿæé¾îäþºáéÐÙ‘îõê®ÿÚÔÀÿéÙ§ìÚýÃ÷åõÎÿèÜâäÜñ§ýâû©ñìóÂã÷ÓšòäðÃêäÿ­ÿøä»ÿíزþåýµäåö¬ûöõ’ÔíÖ¬¤ãáºÑâÚËóßð¸åèÿÁßþñÃÔïî´¥ÝãäÄÿçÌœþñÀÉÞìÀãçéÞÌëûέëòÙ£³ÕÙÆÇÇÆ¿»ÅÍÈÇÄÑÙÊ¿¿¼ÅÒÊÄǺÌVƒÇÄÅÝ®rR§ÏÊÃÎÄÈÂÀ¹²7*P¼¹»½Áб^¢Ç¶ÕÉÚƒR‚ªßÀ´ÃÁÊÂÔÅICUÀ¸ÉÊÎÄÐÇg>?ÇÁ³Â½ÊÄÍŸ>FMÒÎÌÊȶ§?GMÌÂÁÆÈÌÏÍ£38RÍÄ»¶ÂËźCD?º¾ÏÕÆÀÄÁÁ½»ÀÃÄÉ¿Ä´ËÏÔÿØ2`ÝÙl$ÏÓ¾(ÒôŒ;êÞ@kåØ£Îã¥ÓܘØò_-ÊÊ|Çê”ßä½'é猿틣ᣯݦèÃ!Vñ·)aàÃwÛÙ(8ÞØA%îÉ4HîÎ*váá#)Ýß]ßÎd'É×i%è݈&ËØ[$ÎÔ{]µèi ­Û³%}Ö¼ -Çè£EØÙ¾‰¾¡!}Ú—>‰¹Ì cáÕ'uçàŠ×Á›ë±']ßÒ,héá]?ü¯&WÖæŽ7ñÓˆSåÕtœôß|B×ôÅFÒùž>äòŒfñð¨såÞU5ñãDBõÞ\>ÕÜq&ÒæK9ËêHZíáa3Úò™=yëž­ìnß×›™Å”ÍÒˆ3ĺ„&ÊÌÄKÜ¡%<Õ‹Y´c-²Â/Dߟ&CÖÔ=Q¿ÎUGÆãDRÜÙq¡Ì°21Èáf'ÍÚv.Ø×?¦ÓÒt$¸ë&†ÞÈiTêÛ2M¸Ñ¶ˆÜ†%·ÚtMÿÙ°×éÝ]Ë͉.£Ü”EÝ×¹*µßë]Êß¿EÒñ²L«æ匹ý×ÌêäÑt³Üâ¹xçö¢Œá쎉õâÉfÚóíWÛîÊ{ôü¬»çäОîéúÒüÝÞÆôôé¹ïõïÑïøågÎäó²ïôìÇêìêéÞõêÃÔçíÔèïò¶ªãîÞæëëâéèáãÕîæÛ{æ×ì¾ÿßìÝâéëÇëõÑsøïíæôã¡ÜÿÞ˜ÙñꃽÞ・ïî•€þÜÁaîëº_íøµÑñëåœçáÜY×ðÄwîìÓ‚àâæYäõà”âÿÔÁõðÏ}óÞáh¸þçlÜëëŠîëß~íñÿ†Ì÷ØdØéè¡ÿᤨÞ÷“àòƒËìê‹äßê‘°í䀫ëݦzÓñËŽðóÙÛöꃴäð¿†ó걉ìôÔsÞÄ‚ÈÍÈÁÃý¹ÃËÅÏÅÈÊ¿ÀÐ×ÓÂÌÇ̸¸#U‹Ž‚@YÆÆÀÔ½ÄÒÈÊÈÌÁBC[ÈÀͺÑÌ×®§k¤„‰WN2~ªÆ¼Ð¾É½Ï·¥ˆ,7)†£–ºÆºŽ†‚/4„‹‰¾ºÊ‰~Y%;!ˆ|¬® |09'nƒªÇÅ°–h&=/~ž»À­…sz"73e{¦À½º¼·ÃƼ»º¼Å¿È´ÈÎÕþ¸²¾Ôªß®á˜À®ß›°žß®²ÄǸÀ±ß˜ÊŸé¦Çšó¾¹´Ü¥¯±Ö Ó³É¾Ù´Â»Ö·±§É¥ë¬Ö¢À”Ó‡¾ Ä©¿°™žÌ¹À¹¯¨Ö¹»ƒÊ§}ß®¯‡¾´¨~ÐÍ­á«É‘Í·¡z@·’¦dĬ“Lö–r‡®–B_¯¨^KŸÁVˆŠ½^˶­Ù™·Jc±Ä[c«•z·œ¬Œ¸¡±–ūԴ尹ܦ»æË ÀËÕ®™¡Ü •—¥­›ñÀÀ¦éÜ–Òô½¤’èÅÁ“ÿÉïªÞéѱÞç—˜³š“ôÕº¡ÿØ°Ž­âµv³¶¤‘éÚ¬¨é⧋¬É ±cn« µyùž‘¤wš†½¥|‰¿”½‚Âr|°qobpdp’™¯Ç–˜›žŠ¢Ÿ‚»ÜëǨ™šx‘¤ž…¢ÐŽj®”w¯”€„Ê·¯ÑîÂÑá汊ÈÊ}†²½ ŽÀÎs„©ÊŠ›×¿s°«šƒÛòdÖÎÌhÎÕŒY×wcâ´µ|£Üñv¶äÊXðÔÁÎãñ‹²ÙäįæÒ– æñÄÔðèèÀïÎvÑìðÒªðÚõmþïß¾ûîÓÝèàÛáôôÞ¾ýûá¼ú÷ç»ÿíñÐìïïÆçïê²ñìòÊáâèíæìôÞìåéâèêñã×ãëãÝèãáááãÙÇëãèÑþäØ»ëðåÖïãÞ»êÝåšþßõÔûçè½ûáìÔìåêºÐøð°òç뽓òäßGïäÐRéêÊÞñßäÄìçç¬óãÞÝêéã¹íûð¹úêâ®ë÷Øàîýå²ôÖýöÝò¡ÕôõÆê÷ðžÿäÿ‰ÖââœòÙöšÊàçj„úÖ•Ñàö¯ëõÙÑÕìì©îÞâ³ÃßõÀªðçÓÜá×æðß²ÑÿåËÆýìÆÝñäݵóÁˆÙÚ¸É˾ÄÉÄÊÎÉÅÎ͹´ÁÉÁÎÕØÖľÎÕ£{qpz—³ÇÊÊÆÃÅÊμÌÙº–£ÇÄÈÆÌÔËÆÓÅ«Ž^lš²ÁÆÊÊÆÄÆÉŠ{uuu{u^†ÅÒ¦kj€|qv˜¶½¹…€Š‚t“ªr‰Š}z}‰°Ì¬|q~mr‹}|¦µ´±no…•‹ƒy’ºÉÇÆÃÁ̸±Ì¼Ä¹ÊÉÊÁÉÙæ:æñ9;êïƒ%áßd$Õë›Cü¸D@øÛwÒÚ± -Öà¦øÝ°¸Ôœ<ëàs"òÝE.ØÇ©„ñÛ6Ÿìµ§Òˆ‚߶póÁƒéÎsÈëHºÍK2åÙDMßÃöãÄ èÚ–pßæc3éë[Bçà¤R×îuKæôªJÜàdIãÚHIñÉŠJ×Êu+‘ó™ÆÑ%¨ìΠ¿›Y¾‘,ѾÀ³¿+`î¸+…ߦd¼ÛÍS{µ»_oõÙÎÉ÷º)4òÍYtêå4ƒáÍA7ÙËd8ÛÂV+ÌòsaãÛqcÝÜk<¤èbÉàRvËÊ|6»å•$Ôæ­áÓy[×æÀFÏÛ¯f°è»†áÖ#œåÁCÔâÉ9ÆâÜ‘ÆíðËøÔí–|íÞ¢©âц©ñÜ–ÿå–ƒÓíßòúäÁtñáÉbáÿäÛéìààïõïÕÿïíÜõßöÍöâôÄúðìÑÿôë­øëô¼ôéêÎ×ïòéáãùÖãïçÎëóçâãçñêéëçâçíéíÃìïç¾èëôÞåá×ÒÿöáÕèæò”ïêâ–Õçã¨ãß÷çôóáÚéÜèÂûÔÌŠ×ÚÕ¿ùìÒ½ßë컩ÛÖÜ•ëáÞ³ôëÞbÒñàeèìðÎíêãÖíæÏyêóè’öñÜÔÝþðååïéŒëéøçìäÚ|éêî»­ìÍž¸êøèóñè‚ÀõÿÉññäÖ®ëæÅÙñÞœ”ïܲùà‡…ïãÍ‹ä鹇çÖ½““Ì˺¿¿ËÓÍÑ×ÔÐÆÅÌÇÀǾÇÉÌÐÇÀÇÊþ½¿ÇǼÉÆÁ¾¿ÄÉËÇÐÖÎÄÇÆ»ÊÈÃÈÑÊÃÌ¿Ç˽ÂÇ´³ÂÆÊËÉÇÇÈÒÉÈÅÁÆŶºÛ×ÀÂÆÈ×ÈÑÍÆÊÑÑÑÁºÂź½Â¸ÇÚʼÌʽȸ¿»¾ÊÁµ¾ÆÄÈÍ´«½°¸Í»ÇÔÆÍÊÆ»ÄÑÊÁ¿½ÁÊÈÀ»¯ÄÂÊÂÍÏÃÆÿÄÀ¯¸·Ö•Òªå·Ó­éµÆ±ØÐÓÃñËÁ—èÀËåÀÙ³á£ôœØ«Í¥£µË¥¸µÁ­“là¨áªã«µ¾ÎÀ¤‹Á“Ÿ€´¸º©Ï®Ä—Ì”³r±Å“u½Á¥ÎÂ¥½šÃ¬°~©Ë™”´±ª¯ É¡ƒsŒ£•^_¯ŸŠ‹¢£[‰¢–‹q™§^®•°[О¶žÇº{}­­Ì•®N_¢Î~z˜Kˆž½½ŸÐÐÖs¾¶´¢—µÛ ªáÓ…ÓÖÌ­”ïÉÙ³ÚÝÈ âàÈÎðßíèÎúÍÿÚÙâÕÝÕ™ Ø£žÛÍ•‘ÿÇО˶“¾Üä¢àˬ†¼¾‘Ù¢o~©ž[ŒÉ”„Áƒg†ª‘¹‰×š¡ŽZ•‘Úĵ‡®¦‚c–‘{Â¥¨|¤ª—x¶§ a§ÈÊȸ›Ì¶ž«¸s®¨µv‡’‘Ž‚È£Š€À´•áœŒ‰ÕÓ¤r”•t‚ñô}›z^º§ÌcÕÆèlìÿÌv½´”Â¥Z©¨¹uÌÐÁjÈÅÙ¤çÖã[ÃÛìÈãëà£âÕÕ‡sìꟚÞù¯ÛüÒÓãòΧ|öØ¿Øåãê½íÔÂYæàõðÙãÒâòÙÿ³öðöëÿçìÂúëøËöâ÷½óÝø¹ÿÝö¹ïåéÎÕìòëßáô×æêäÑìóçããçóéæåâßæìèãºëíåÐÿîÔÕïéÑÃñçñâãëå«ÿñôÀÿÿí³ïçõäÕäîÊâäÿÀÔïæå¾ÿßäÊÖóÏÍ÷ãØÉýßåÊßùêÂø÷ÛÀåÕñ­ÿäñ›Éäë¾þôñÊïçÿ½äçïµøôçÁüäùØøêí®ôôñôöçä…õâÞ¼¢Òø·ÏùÖºõÔùÂõÙПÛÛéÙÎêê¶öëòÑ×ÙúºÏÿäºÈïê§ÌäéãŠéÖϺÿÜѳ›ÑÆËÉÊÍÖÙÐÏÚÓ×ÃÀÙÔÃÎÈÍÊÊÒÓËÇÐƼ·»ÊÓÎÌŽ»ÁÇÊËÃÑÒÂÄÚÔ´ÐÊÂÅÎÊÃÇÙÝÊ¿º¶ÈÕÆÈÊÌÌËÉÈÆÃÄÁº¼À¼ËÒúÌÔÐØ·ÇÍÉÇÄÀÀžÃÇÀÄËÅÉÎÉÆËžýÌƹ¼¾¾Æ®½ÆǺÀͯ³ÂÁÀ¸°µº¸½¿¸ºÅ˽¿ÈÄ°¯¾ÄÓ¼ÁÎÊÆÿõ_Tãߣ)Íôª:ï×1ÝårGíÔÂÒá®Úè»!ÞòRÇí·)¿îjÞÙ„+ÙßnDÇÛÊ -~í±´Ë¿”äÜ8rûË+„ßß1eàã:êçO(ðèB=èß21ôâ+%äÚe)æào2ãÝnãÈ~L°ÿx?ÕèM ¼Èq&¶Ã°§Ë¹ Ç梵ݿ!•è¶«Â½;šÈ£NÙÞ]â×tåÁŸìÍ<æêPg×ò VÞÔFkâá­Oëÿ€ZõítZïþ›;ÉêÏ,õéÇTîëhPí¿\2ßä¨ éä´=èõ>Rðæ±#âáÖFå×iYÅω/šÂ‘/žã§9Æïh@ÌÛ‘ÁÞŸëš±ì–>DìÑhíǘçžQŤ.6óÉ%oàÕyÎÓ*HêéHmóÅ3kçÀ,xå¶.2Öèh;ÍöÑãŒCÝê®|ëÎY<Îà„€éÖo$¿Ï²ÎùÉZêâŠxîÐy+ié¹áÁ¼å¢BÄòÇX¿ðÍaÔåÉhßéÞ²ÿß휄ÐÒ¯«ÞןÌßò˜uìÿ™zðç÷îîä¡`ßñÅcÞÒåaüõ«ÕÛíÐ|àôðÌôóîÉïíÖŸèþûªÚôð’éØçƒëæèÅåçæèäïïÜãæñÕãôôãØåëâÞðãÝàåçßÎëåøÔìçÓuðíÕÇñêÆ{áåéÎôýÖ}ëíß–äåÚ•¡øë“êöëV­ñÚÕîëßÞ]ëüÙÒùß·qèÞÍ}øíÙÁèõâÍêõÛmßéâ¨×ããUçðÊ©ï÷îÕøèئíõåláìéeÝçá‚ÚìæŒÌáØtæàÿ‹®ðÛ¡¥ØêšÌðð{Áçà˜­ßìÖêàä»÷àêǪãåÇæâÝ«šäê†Äçñ×ÑÿäïÌòâÇvßÛuʽÄÆÀÄÆÊÇÀÍÉÏÅÄÓÑÊÓÏÒÎÉÏÖÑÈÑ»¶ÂÄ¿ÂÊÍÈÃÄÇÊÍÐÄÅÉÇÃÇÊÄÐÊÄÅÉÇÅȻȺǿ§»¿ÌÊÉÊËÍÍÌËËÊÇÃÅÉÊÊÐËÉ͸ÀÆËÉÉÏÍ¿¶¿¹½Â¿ÁÄÀÔÌÊÊþÀ¾ÆÃÀÅľ¾ÀÉÈÇÁËÚÁÎÅĽÇοļÀÁ»¶¼ÆÊÏËÌÎÉйÆǾºµºÆüØ­ºÕÝÕ¾í±â¯ç¿ÂôÕ’ÀñÅí¤Û§È¦à¼Ù¬ÝÂŦáµã}èÃͯÅŵª×½È›Ë¬Õ¾mØÀÞÅɌʺ٫¬ŠÔ¼ÂÀܶÎÔצ³~Ç®ۢÑÙͯ¤ÃÀ™‹ŽÊ²ÇÌÀ™»°†Ñ«“Ä”¹‰Ñ¦–|µž|¦¼hÄ‹³t±—¢tؘ¾w—²“v„Šw¨ͱ–“ݘ«“לÃÃ稴ÊÖš’­Ä¤›õÝšºåÌÒéÕ˪–áìºÕäÕã³óåíºãßïÕÖçÁ›çö—èÖ¬‹ÿÌä‚ÒÍš»åÒÀ‰ÚÚØy¦‰¨žu¯Ž’¿ē“ªwÇ‹ÐŽ´¥ÈmƉ›Žñ«Ñ›”¨Ìržƒº½rŠ®wmj¸¶w˜µ™œ”¼Š‡¥äšž—xˆ¾Á—©¿ÖŠ°ª¥z¨Ã«~¶ª‹ÐÑ…j°Ñ„c²ÖŒÄÙɆ¼ÏÈw·»·j­á”vÅàº_•ÛÌ[ɾÔ^æ׿`Ø̯h©Óñ°òÒñ´÷Óí¸ÿÔé±™Ûåõæ怬ØÝÁÃæéǘëõÖêÛר]Õßö¡ßòÚqñÛÌãäòÛ´ÿãìÎòííÍöêÖ¸øïñ´ïíó±ÿæÿ±üíìÈîóíéäíðãâäñÒë÷õâÙåéßÚôæáæêìäÖñàç½ßòú°éåÎÀîôå«÷ìäÅèùò»àõñ¤îôô½¼ßý¢ÿÑìP™ðãÂÖèöθïðæãôíϤãâÚ¦âæéÅößð¾úßñŸïêå½÷ðݸöôÓÐàòí¿ëãÑœìüç¯ßêé³òýëºééø¢ÿÞûñ×äS†ÜÞ´ÀÖð·æáâ«ÖÚñÊÞæì¸ôËÿ½îÝÿЧáñÕëëõ¼Ûõ–âõóÖÏèä×ÌêâЉìø†ØÉÓ»ÈËØÝÄÅÊÃÃÆÆËÌÅÅÉÉÄÅÎÐÉÐÁÃÑÑÆÃÄÈÈÊÍÌÉËÑÑÇÈÎÆÁÉÓÈÆÆÄ¿¾ÄÈÉɶÈIJÌÐÑÍÈÆÈÌÏÑÍÊÅÄÆÇÇÉÄÏØßÞÍÅÏÈÆ¿ÀÌÏÇÁÍÈËÒÒÎÊÇÊÂÄƼ·»»ÎÉÆÊËÅÈÔÑÌÁÄ¿¾ÌÀɾÀ½ÆÊ´°ÊÏÌÃÁÂÀ¼ÌÏÅÃÉË~Ø˾½ÔÝê;öñ—V¿ü¬àîSAÔì•%øã‰:õß¾%ÞâË#àÕ¦ìâk!Ðå˜ÞÞ»NÜÜZ åÌq%Šß¨«â¸¶ô¦¥ð½ “ãè"|åàQtèúA=çÑF7óã,Xç½BåácâÖN!Ìå^0âÔcåËZJÄåŽÚÐaKËè¢&ÈÈ¥ºÑ“+ÐÛpÂÁ¯ºâ·AZ¼9¤éÇfÞÁ zôå)Ÿé½1€ÔæVòÅ$Yùø™¨ñã‡IÝéh`àú˜éዉæãÅaåå²sÿ梅øøzLïàŸ2ÞÙšJëÚ¸OëéÁ_âשHÓÝ;+ëÜ1+Óד(½½šZÜÚ Èñ|Í»ˆ[Ôê¢ -ÏÖ¡/Ô»¢—ܵPã°I»ÆœJnæÊ|ßÀ#iß¿>zÆÃ+pÜÕ)Uç¹2‡äË'fÛÔg=íËbY­Ø'_ÀÙ~ƒÔæJ}áÔBsãÐE~ã×DÇÞ{QáßpHÕÔR^íÊ¿bÓ׌AÚæ±QäÖàcÈÜÚõæäíYÐñÏcÖíÿœ¸Ëé¸|ßάóÕÂgêûåÓäï铲×ÑÐyåþÕãåÚˆóëàåâûã…åíçÓýçíÔéìñ¼ÿìóÆ÷îéxñõåÈòèüèåðòéßïïÑéà÷ØìñêçáàìçâåæâäíñèÄøúìÐüêããüîƱêòïÞéùߊãéø¿ëæöÐüáø€ÎÛûn×Éâ‹¿ôðµ¸õÿÁÉÝó²ÙëæºÉáþÚçôëÖ®êðÑáîݘîÏÿ³òîÞÝê÷ØçìÞÿØïÞöÉýÜüÝìÚéÎöýÒ…ÜÆîðéì¤ø×èÆ¿éضÿ×æíüèöŒïçè‘ïÝÿ˜îñæ–ÎðçÍêàÙŠ®òãÃ÷ðð•»åï¾´åé͸õèÈ×;ÌÖÊÐÀÁ´lIÒÀ¾ÂÃÌÊ´ÃÃÈÈÆÎ×ÔÎËĹ·ÆÍÃÄÄÉÎÊÃÄËÓËÆÄÃÉÍÈÃÂÆù¹ÁÄÏüÌÌÆÔ×ÑÎÉÅÆÊÏÓÓÏÆÆÌÊÄǾÂÈÑÕÌÆÊÃÇÄÂÆÉÎ×ÌÈÈÏÑÉÁÀÃÈÑÔÐËÉÆÁÀÈÎÄ·ÀÓÐÉÀÏÏÆÑÎÈÉÆĽ¶´±¾ÄÂÁÈÈÀ¼¹Ä»²«£1aÿÀÃÿ¸ñ´Ô¯æɺªøÓ¼ºÙ¡œ­à×âÛáÛíŸõÊå°è°×šö¶º¯ÓÉʱê½ð©x´Ö«{|ËÒÎÈ˭¿¯¯å¥Ëг·l߶«ŽÝ½­ Ç¶›œÄ±¦ãÁ‘˽؄ž€¦ÄŒ’ß¡œ‚£‰ƒ®Ä¥¢cp»ž’®¥¯Š¡ u‹»Šu˜¼dÕ™\¿s±z³J™€\“¡`–Šmi{ŸƒÅ©­‘É”ÒÇÜŽÇââ‘¥¿½•«äá«©Ôãà£ïÈÀ³Üò·ÅïëçØÙÑù›êÌÔÃÝêçìêòçéÍžzøÍÈ’óÊö‹õÕÁƒÀë¤lÎÖœ–éÒ–´¶¤š¾¨}‚¤“}ƒÃÁ”¬½’Yoµ²À‚­«yãÅÛ|¤°„zÓ¦vp­šnd¬›»¬åàsº¢Åo•¡ªpœ¬Æ†–°×“¦ÈŠ’­¸£€Ä‘ox¨>¢“kz³ïpZªÄszÔŸuœÚΤRð~“̽¡{Üê„…äÈö´äБyàÔŸa­ßútÀÊ̺ݹñ¨í××jÑÍåµàÞð¤òê¾ò×ö®Çëã·³òßÍßéø®æãúÛÁðôäßìÚÔÄÿåÚßÛ÷ÙªúîÚÁëÜè»ïúè«ïÔò¶îøé—úýêÊëÜòååñõëÛëçÐíÞøÕéñîíçåñáßäçàßéñëÆññã·âèéÓãåÔÂðîâÜõôÿ õçî½òèä­çêö©ôïñ·þÙû¤ÖèòÍÅïÖÍäéçÆêíØÑÔÞÜÛÛÚóÑÇÝ÷Û¼òñÝ™ùíÙWùÿÕÊþöãÞØëò°ÿëó¬øåò¾öìá¬øîó£ñïä’öîæ¢èÙõ­¬ßéºùë÷ÀèÚñ•üàñ–ÙìðÃç÷ëºÏþé½ÒêܱÅÔâ­á×ä°ïõèËÇÿíÆçø¹Ï›ÐÏ×ÎÂοÍÊk1ËÈÂÀÈÍƼÍÄÉÏËÏ×ÖËÎÍÃÀÊ˽ÇÃÄÉÈÂÁÇÌÈÅÂÁÉËÂËÇÊȼ¾ÄÀÆ´¿ÇÈÍËÎÌÌËÈÆÈÍÒ×ÖÍËÑÉÁÇÇÇÈÌÎÊÄÃÇÌȾ·°³¿ÍÈÅÊÎƾÀºËÐÌÏÎÈÇ¿ÅÏÑÇÂÄÆÌËÂÌʾ½½È»Ã½¸ÕÒËÎÉÉÏȾÁÁÂÿ©¦$Rǽ¼ÄÉÁûÿ^càã^#óâ½0Ûå¸0éó€PÎîháç­#Òñ¸%ÄÚ­&èä¨ÓÚÉ%ËäJ>æá™$»ï¿­æÉ­Ý©#­æÆ+‚äÕŽÝÎ#„ÜÐ,CÏé79åÙFGö³CaøÏH,Ôê]ðàƒÝÎNRÓÞ|ÑÕbÇæg*Ûë’ÀÛ»:ŽÝ®ÉÑ°ÑݯžÏÄtÀ¡¨×•RfÒÏ+{àÐ#€ãÉ:©×ÞS\òÝ)fíë²JýÔfqîÙ”Nßꥵåñ€zñÞ˜oïïåyêù§TÉéqxü߬WÝíÅDÜ̸5æäÉCêáiBÐæ‘SßúžgÚæ]/çÑ ÄÍ åg ÐŸµá« ÑÕ•ºÌ¶aÃÜÚ–Õµ8—àŠ¢Øµ0YÛÊ<†é®˜ËÊP1µñDaÝÓk|ÆÅC\ÔÔ+CØÞfÊ5*°åFGÑàƒlÝÉW%Õä;úÔ¼‚ßØ©(mäŽKÏÕÇrµì²p×á¹*”ݳ\ØÕƒ`ÝãÀpÍÐÝs¸îëvôÊÝuÅèõ™«ëç«©ßßeÆêû­îñµ¬çí¤ßÙÿŸ­íôéóàãuà÷¼µÝúâÊóëðÓûöïÉñïûØñ÷ÿ¦óúýÌìýö¸þóݬÛïðîëñèÜÐàúÍóñîáâôöéäìåéñîéäßõìíÐüéíÜòæÏÄæâîÝüôì‹ûòó¤ëôê§óèòàôíðª¾ôì‹Ùòê³æìäÈ~ØÛÛ¯êÙ­”óåðéßôäýëÃ|îõéáÞÿß—ñÙç›éçÊÛóÁyãåóxóôð¶èõ×îíéä„ÿçùì÷èæœîóêŒàÝí»¸æêöÝü‘Î×à|Æôõ›§ÿÙœÄÿ뢢ùòá¢òïÀÛßÿ–ÓïåÔ²ñãÍ—÷ØÔÑÝò}ËÒÈÒÄÏ¿×ßz5¹ÐÌÂÍÊÅÔÓÂÃÌÇÆÊÈÜËÅÆÁ¼ÀÄÏÄÀÆÉÄÂÆÊÆÍÓÊÃÈÐ×ÏÐÎÅÇÊÀ¯ÊÍËÖÆÊÇÊÍÌÈÇËÏ×ÙÒÏÒƾÇÃÊÒÓÐÍÌËÅÈÅÄÆÄÅÌÑËÄÈÎÆÀÅÀÕÐÂÉÌÇÌÐÎÈ¿¿ÎνÇÎÅÈÈÄÊÂÀηÉĴѼÃÆÁÂÉÁ½ÉÆ´½Å­¹2SÉþÁÉÇþέ±éÓ¯¬ç¼äžÖ¼ñ«ÕÁãëò”ðŸÉ–ÿ®À”ñ·Å•øȹê¯ÊŠö¹Ë–ŽËàҩٜ¢¬Õ‹©ƒÏ™ã í©¸»í¤ÅÈÍ®¬šâ§­äÈ°£¹À±±¼ã·¬ÜÅ¥•©É¼Ÿ«­Ê¥¨å µ›†Ñ—¦u±–”¹©§¢Å¨Á†€¢{Ê“œbÅl¦yÖˆšÇ‘¥Žu†¨khŠ—™Ö”Û””ZÚžÁÒš–èÔ›äÏ“ž´æw³ä̈–òëØóÙàÓáìä߸éâîÉéÖ܉Ùâ’¨ìÜš†ÝÑá„åó‚|íÞÜŽ¥à¨¬àÕž¤â¦†ÊŸ°}Ä”µwÁ·¹]¸”ªvŸ±µsÉ°§i³°Òiš‡s©™äq®Á¼p•Žn{·˜l­ž´@„ßÜ}•¬•†Z–Ú}”²¸Œ„Û¯n’Ÿ`‡æÁ‹y¢Š0Du³s»±Yh¾¦pmÅÂKŠÝÒœO³Á¨Q¾äÃSºÃ’Yű¨Z¾ÛÀR¯³¼>Ý ¤c×ÐÈV°ªÆ4¦Ôí_Þçèc¯×Ýhwæ强çä«áÝÿ³ËæÿÃÂÝëÉòÝóÄÖÝåàºýìÔ™ðÞàÜ×ëãÌèü¾qìüÞ·ô÷âÊûøì¼ðüë³îìæ¸ôòÖ£ïðä×êëëäÚíùºãëìÖâêøßÚêðÞßûìÍÒõãÿÇæôߺòäØÅÿÏÿ¼ïêÜ”âîôºáëÚ²áïá·äíñÅõàñ Ýäà}ŒèýÍ•àì¶\ïôËÉâëÚ®àúèãöâÝ´ýçÛØïõ߯æøà²àìÒ¾çáãžòëì‘äêá’øáõ¶öîë—èòá­ïç×üâî…Øåᳺ÷ËmÅóñ‚ÖÝû£åíÛåËÝóèªYæäÆÍôꈂõù«­óäÀÇðãØíåÌ¿òòÁÓÂÈÈÈÓÉÀp>ÆÑÐÆÁÀÇÒÊ»ÄÖÐÇÉÌÇÃÂÂÂÀÁÄÅÌÐǿö¿º½ÊÈ´²ÇÐÊËËÄÁÃÂËÉÌÒÔÐËÉÃÄÁ×ØÀÆÔÞÕÎÊÆÈǾÉÁ½ÊÖǼÈÔËÅÇÈÇÇÊÖȺÀÎÍÁ¼·ÁÍʾ¿ÅÄ˾·ÂÊÀ¾ÌÌÎÊÇÉÅ¿À½½½¿ÃÅÇÇ̵ºÉÀº½·¾Ë²¾Ìš9KμºÇÇÚêAöùqeéé¤#Ôß—5Èæš.þÞq@èâ®ûÜ£!áâ°ïÞ’Ïæœ -Öé¿.äÔ:Yôã‹%Ç䭳ƻÄßv‡ÑÅ›çÕ%pò½#¤Åêt6ÜÜZGêÒ ƒÞÓyîÇ5<ãÓ@VÛî78è·Oâäyêñn4ÞÊE+ÂçŸS¾ÎºY¾ŒÊíuÜɬP²Ñ¼¥Ò#†ÊÎŹ0•ã·"µìš•áç4mñßEYêÛ3˜Ùêƒ{ÍÞx„ìçn\ùØŠ‡Ìä´LåëºOéÝt‚ýÚ{èãoXêÛ`Uåð±aÝÚ†WÔç¬PèÙ`sõÉ>Käè|1ËÓsVàÖDÙÀ˜GÕ×£4±ê(ØÙ‚!»ñ©»×ÂLªó¢3¢âŸ$ °Ú(fÍÿ™‰Ø±#YÒÇdkÐÐhŽÔÀ*hßÙI|×пœêâ_(’â5@Ãò>:¦ÕiSôÉ[±Åšš½×—ÍØŠÙÒƒ[ÞÓ…BÚÉÈRÛá:×Ú¶4¼ÊœaÙßš/ÓÎÔGØΰ„Úàî€Â×ÓÝòïÙŽÂñ׈´çí¬ÜçìÉçââ½éÝá÷òüëÏbÿóבêòåæãîç‘ÚÍúáÿææçüÿýÎúöÿÏêèáÒâèõÀöáõÖêïíÞíþïÕúî÷ÂñôîßòäâæÜïóÙßôíí³ùòïæöèëÚõÞÆvèçõ¾÷çô¹øó÷åòÚâæÿõþÕòïð¡ÞíõÄûèÙÎÆðäÞÌðãÄÖéäôêæÙ÷óèû¼–ÜÙ̽íêâïÿÎæôñÿÞîèîüèõèfØòóÒîùçlËùíËÝéàòï¬òéØŠÛÛü›¤ÿÕªÉ×ñÞñðë‰Ùïñ©ëÞà®ÉðçºêÿÌçÚóòäýåتäÝ넽ç××ÐïýƼù÷ÆÓ³¾ÏÍÊÎÄÁÁÎv)ÈËÉËÔÒƾÔÆÌÙÓÉÊËÆÃÁÂÁ¿ÀÂÅÅÆÄÁÆĹºÇËÈÈÆÄÆÌÊÎÍÄÁÅÅÊÇÈÎÑÏËÈÄÖŵ¶ÂÔÏÎÇÆÉÌÐÍÂÇÐÉÁÉËÃÁÈÄÅËÏËÇÆÈÇÄÆÊÄ¿ÄÃÈÏËÂÄÈÆÆÁ·¶¿ÂÃÇÃÇÅÂÃÂÂÈ¿ÀÂÅÉÌÍÎÄ´¾Íû½¸ÁľÅÅœ=UÐÂÂËÄÍì¥åÚ´»â´£¬ë¹”«ÝÞȵÕÝž¿â³¸¥ÅËͦݼֻ嵟•ê¦®¦´ÅÉ{œ¾¾•¶®Ð—Ò±Ö²•Ü¥ÈΪ¬šÉËÃߣ¼ÏÇ›¾tdzo­º³Ÿä˨µ‰éŒ˜n¦¡¢ñ㺢’všŸ‘ˆ§’£­¢¢os˜£|‚žª‹a‰¶g^…»ʇ¤²b»Ždz”£»qÅun•¶ƒyr¨à€¶…Í…ºÉÂkÕÓ䜩²±Ÿ“áå†ÄÅÊ„¢×ã™ ëϵ›èêßëäÜâ‰üÞñšêË«­Ãу®àÔŠ–òß}–äçÏÅôÞhíɳaíåÛ˜­Ò—™èÁ u¦˜_b»ˆ‚{´¡¬ZÜÖœşyÈŽq{{Ñ·’§—‰W»®LgȬwX¹”ªožyÅŽ”¥®`Šµ“\pµ›]Á¸q°´Â„´­³¬€Ÿ¿g{_¤mm~Ïyjœ¦{ÌϨmŸ×°ˆ´á¤dµ®_yÀÚ”lÕÏeéÒÖ`¿ãº]çê°UÑè¤SÊâÇÓáà_ÝÚˆ5ÁÎêƒÀÞ×µñáלÖðà¦çìлÿëíÉéíæÖîìáÿóèàÙU÷âèÛôæÛðñäç¬ÿìèÌõÝòÊëíÝ®êêë³úòäÀíéú´ùäêÇæëÝÆàïè¿ÝéâµçñïáõíðâÓëìÈ×õàÖ›ãëîçýåçÒîéÚ“íçÔ¡ùãåšññçÈíæßµáñÿæöåñªàõå¼òðàÊÓúêßÂêìÐÝïìçÝðèøïíîÒ±èúÉÉëñÿŒïÿßòõêîÅóïØÝÛßøÿïÚ¿ïÚïïôÚëçÿ„ôäà—×ÖÝ”ïðàvzêÑ‹ÆèúàëèàvÃßê«òåø°ÊÛâ­ðîåÔ×å躼ßøŽìèú ÊâõÏßèÛÔÄÿëÇß¼µÒØÑÔÈÄÅÑw)ÕÒÈÈÕÛÓÌÑÆÇÏÊÂÁÁÌÈÇÈÇÄÄÇÊÂÁÅÇÊÉÁµÂÆÃÆÇÄÅÇÇËÉÀ¿ÄÅÒÍËÐÓÒÎ˯ÏųµÃλƾ¾ÄÈÎÏÇÊÔË¿ÃÅ¿¿À¾ÁÈÍÌÉÇÉÎÏÐÒÌÊÐÅÆÉƾÀÿÄƹ¯¹ÈÉƵ¹·³´µ¹Á·¹¼¾ÀÁÁÀ°©·Å½¶·´´®½¾»Ÿ9]ÓÆÂÈÆÇäè\hõÞ^Håܪ0âظ/Øëg‰æÙž3ÚáK7Ûе-ÞØh,ÓÕÌÔãSÜä•EàîM(Ôà›¯ø¦Á죦֯gçØ;”çÄbîÇ$tÛÚ9AåáICÍÄ„×Ógæè_HïÜg!ßêJ<©Ù†1¼ïO'Ëá5)áÀuÈɼ ŠÎ—Ò׊ÔÁ™ \ã ®ÔŸÇʱfÁԙܦ! ñ°)±ÝÔ6wÛæ#”ßØg„ìÒ;•â×>lÝØ¥bçô„›ØçœaàéÉBÚî©Yáß~Úü›lÛ쪂ÕÙ½Pë鞆ÎóØ^äçœUïÒ?òׂ2ÓÞn*¶ÙŽ&¦ÚE;¯ËïŒáÎ~BÏÝ„;³é‡;Ãð®RƒÂ·'IݨOס8pÙß,‡ÖÅrήT϶;[Ëè0-ÛØ-‰âÄ.væÖKe™ßaS¾«8dÊÓh$ÌØL†éÔacúÏXUÞÖµ:Šá{SÍÜswðÔ”víÕµWäк^ÕæÙåvÝàÇpÏì¨XÓß½R»Ø°_ªîõõ|Áäæèïïã™Öáä¬ûâž“çâôÚÿÓÙ‡ïî»ÞãèÂÙÙï«ãöâžïìïÔëêþÖõíÝxõèõ‘óñôÄñéñåáçýíúìêâãáæÖæë÷ãçõõíçïôäÍÿñÿÜñîÚ˜ÚíöåÿØöÖýâð™óàñ–ÿñùÑýßèÓïïäŸáÝÝœçðç¡¡ÕøÊ ãá¸xýß­ÜñòߺäçÃzäçÌáßõÔqïñç´íôêëúõâÌåÚçœïìÛƒéèè{æëó¥ñçèŠùãôææÜwñáÿÜöõé¶íêì±êíæ¬óæïŒØíò¬ìáìž×Õõ¦Øëõœ¼×Þ§ºìÿ°ÙûìÑ¡øòéÜçìΕæù“žÌÊÎÊÇÒÊÁk6ÄÊÇÁÄÈÍÔÒÌËÍÌÉÇÅÇÄÃÿ¾À·¶½¼»»¹¼·¸Åʾ½ÍÏÌÌÉÄÈÎÌÌÆÃÆÊÉÆÅ´ÄÃÏÓÆÇÂÔËÉÉÆÊÑÒÎÊÃÅȹ´ÅÅÁ¾ÁÆÊÌÌÃÁ¼¿ÉÊÄÂÃÅËÊÁÀÄ»»°ª´¿¿½ÆÇÂÀÄÄÃÈ·¹»»¹µ³±³°ºÆÄ¿¿³À·¾¡$RÕÇ»ºÈÌÔÀªÈå˽£×³²¸æ»ÙŸïßšÒÃ˨šâÙ©ºØö’íÆ›½ý¾Èó¡¨ÍÚ¹£ß¢®šÎ«Ò’»¬¹™®¸Áž®äŸ­ŸÖ˜¯ ×œÄÍå­§¢è¯±Íà­­àÕœ®š‡™«¥¤Á»Ã¥ßžšŽ²Œ¤º’Œy§¦ªš±©‰Ó|Çm„…Æ›¯Žµv¸’Ǝѽ¢oŸ°¤Â‡‹“€¹é¿ÝÙ‚ßÕÔ}ÁÚÆ¡«Á’šºËvÄåÐn–×ëë‘ÚíÀžÖÿÅ{íøêúÕ–…öÄŽÄóѱŠïÖëÁôÔ¢‹ä馉ÞìåyóेÑõ˜}®Ð|lº¥¤vèʪx´®dq¦öz½ªƒuº…+~ÛÜ°lÀ®Žw±µ†l’²±m—²‘{¼–¯lÁÁ´p¥³›h•¶œhušÕ„ÌÁd°Êãp•¦ªZz·Ý¡]¯¾‰Ã¿”wη[ƒ¨Ä”]´˜amåâÐZ„Æ‘…àÏŽhÇÔWÚïÄIÝÙ¯]À¾À¤ùؼ9½× GÀêœ\æß×S­ÞÉ}Ãíç¦ÁêðxÅÝ÷ñêêùÈ÷áçÌ×÷ãÓËðéù¹èöŒUéçÂëéñÞ¨üðæ°òùë©ïìâÇìñúËïåò˜ýßú ùíå¶ïçä×ÞêóÛîéêÞÛ÷òØäèð×ØâòâÙðîÐÅëßôÏëçà«åòåËñãè¶ßìñ“ñêð¥ûççªîìÿÐìÙî¾îéí©óÜ쥯ÞØ×ßêÎÿܸ¯íï̸ñïʆðñÕäØîÙŸòñÛªÿàò·åïØËøãÒ±ÿóåªÿèê”ëèç üíç”æÿå”ìéè•ðëâºôèæ“âôê­êÇôžäìú‚Îíå°ìå÷©àÛõ·ÞÐõ³ÖÜߣ‚ÿêªã÷òÏ”ïóÑÙêÜЛìí—¥ÔÄÂÁÂÐȽf/»ÌÕÓÐËÈÌÉÊÇÆËÎÊÆÐÎÍÍËÇÆÇÇÀÁľº¼½Å½»ÅËÃÂÐÌÆ¿¿ÈËÄËÇÇËÏÐÑÓÉÆ»Ê̺ÂÍÍÉËɽ¹ÂÉÉÉÄÈ̾¸ÆÊÈÅÅÉÍÍËÄý½ÆÉÆƺ¿Ê̾ÃÄÅÁ»ÀÉÆÃÊÂÁ»¼Äž¼ÄÆÈǾ»º³¯±µ·¸·²¾·¹´Ò¶.dÐÆ»«ÀÒÏQëõ^]ûè¯-Óï‚#ß×·:êÚƒGÙó¦éÕ¨&Ñç›íÜ­Õár%çä‚êÑ<.éÖ“"¸ÿ½µê°ÆÔ–%¤íËœçÁ)ŠØ¹%”ßàFxåÓDSèØCzÛÃ]ÅÜ;3æéOZÞìV5éÄpÞÔSÑåQ%ÃÖ.%åÔ  -ÀÚ+›ÉœhÔì…šà¯3·Õ°’ú¥G»Å´)xï»i‰ó·=²êÆR¬ÓÝ«‘±Õ'jëÑ+«åÐgoÀÁA{ÿâ«xÖëdðõ¼HôíÆpë顈ìÏaèåºXþñ¬<ôå¤XàÐÀRöæËNèêheìë2wãÒ|3ÚÞ§AÍÖ«XÔÊo5èÍ¡-_ÌŒl¬¦wí«¨'&ã¦+W빋ؙB“Ù¾*kÐÞDPÛ±Oƒã¼7mäÊ?ÄÅ8¡ÙÓ?¡ìÛRU¸¼{aàågsóÞAaÂædRÉÓ]=ÖÄK=¾ò¥‡ˆîn¶ß†[³ËsqåâènÏÜבÇÛ‰%Îç kÙÜÓ€ØÑâaÈüçƒÐÙï—ÃÜë©áâï…Ïàç—èÿê³êâ㪴ÔåßüùÖ×yñðá÷ñäÑ¥éóØßìêèâÿòê®õïûÜæéôÎöêóßëÛùßóäüÈûéÿâìðõééêñØöûïËíêèßòåçÜéõòèéïïíÎøù÷ÑöôüêïïõïÿØõãûãÿÛéÜÿÈÿòí•ßûë›ìüè¦ßìñîñþÓƒÿàÚ¿öø®¯ð×áÑï÷Þ¿ìîáÁìò±±èãí¯ÿèÔšîîã¸öûáîúßýžîðÑ–öæÿÏÿîâ–ûûéÖòøåÅòêñèìÿ£ÜãøÅæïú…òèã¡õæóÇúïøºáìï¸ðåÿ¸ÜëòÅøòØ«Üçמ¡äòÛÿÛõàüêÈ·½¯ÕÄÃÍÊÊÊÒu&ÁÇÇÅÊÉÃÁÂÊÆÁÊÐÊÃÎÌËËÉÄÂÃÁ¿Ãº¹¼ºµ¾º²¹Â½¶ÊÇÆÄÄÌÍ»¼ÀÆÉËÐÖÓÙÈÆÇÁÉÇÆÆÎй¿Æ¹ËǺÁÇÀ»ÁÄÆÇÊÊûÀÉÊÄÄÄÇÎÂÄÏÔÍÊÎÐÂÀÀÈÌÿÉÁÀ¼¿ÉÉÂÀ¾ÁÄÿ»»»ÉÉÅÁÁÂÁ¿µ¯©«Ç§2cËÃÄ­¸Ò׶ÚÕŸ³ö¹µšèç¾èľ­ã¾ÂÂÖÀºŒÞ²ã¤Ò»¿•à“·´ç¼¹ŽðÊÊ•Ú˲˜Î´Þ‘¶´ÇšÌʾ ¯Ã¢ÌÅç“ÉÂÚ“·ªÅ’³¬Õ¦©²Á™œå݇Âɵ–½™¡µ‘ÐÈ¥§ÃÂÁ™¡²§ˆ›² ‹‹–r¨€‹¡¾…¼€—ž­‹u¶j¤a¯~¾}ª¶}w‰•‘’{££Î‚ËÎЊÖÏʀꩀ´Æ×jÃß昋ƒÎmŸãùéªÑÖ}¯ÛØØrüâä±÷ØâÕÓðÒ¤éÓÒïÓÙŠÚ½›„ÀÔÞjâäãpܾ¡„°ÿŠ®®§wÄÔ¾oåÅÃwƈŒ_Äœ~t€kv¤¯n|«¤}‘•´˜l¡ÉÔr¹¦†i©²pvŸŸnƒÊŠ…¢µÙ†›£ÖqŠÂ¿K©°Ø[~©jm¼´“ÁÕ’‰›i‡¶íŽ~œ°rªªu‚©¹HLͧmÀÖ’iÓÝdiÝØïŸçõÇ|µ×ŸRåêàØvÔØîSÐæå¤ñíÜw¿ñúœæäðxÂÌÔ~´ñ÷«ÛðõÇÛñúÅëéìô™êööçöãËÒýѶÓëñÖ¶èñë¬öéó×éïõÈïèó¸íÿâ»ãøì»ïÜ÷ÙéììããòðØîÞï»ãèëâôéîÛÙìñÝàïëí×íæîÂæóÕÐçîÜÌêðØÏîùíÍãüߢõñòæÿô°øñçµäíó¥ëéÿÏuðóà·çß„ˆáæÊÄúòÕÊùëåÉïãÚËÿáì™öäê¿ùèäÂýðÅÑçæâ–ÿÿé¨ïãñÀùêåæêèÀøíçƒÅìèøöèî®íìé¥ßÑé—éÜé˜âäç¨éïã¹ÙëܾðàïÀÕéÚ†•åìˆæîÔ¨©÷øëøÑø„Dñ俤¶š¿¾ËÖÑÎÉÒy.Âü»ÆÎÎϽÊĺÅËÀ¶ÏÍÌÍÊÅ¿ÁÆÄÂÈÊÀ¿ËÉÂÉÎõ¶¾ÇÆÁÃÁ¶¹½ÄÇÅÄÉÑ¿ÐÅ¿Á¿Â´ÉÂÃż·½ÄÉØÑÃÌ×ÑÊÊÎÐÐÒÒËÂÁÌÎÊÊÉÇȺ¼ÃÃÄÇƸÂÅ¿½ÁÀÃÀ¾ÁÀ¾ÂÄÇÉÆÁ¾¿ÁÃÎÏÅÂÃÆËÐĽĸ‘Ei͸ȽÂ×ÚÝ[|ìÓqKåä–üÛ_+éÙ‘vêך0çå“0ÚÓ¹ ÕÖy2ÝæœÜÝÅ&Ôä‹*åæI#Îé¡Èó²3ºñŽSÏ欔î»-¡ÙÅø«3Zìæ,uîÝM[üÉi äá9/íÕA;óåm&ñÜA1ÍèXÍÕoå¦jDÝÉj-šö—°ßª:¿äNÜå‰"œæuÆØ´ -·Ý‹oÈÈ,lÀ®€ë´ ¸èã~œòÁU†ÿÐMvöÈBšÍÏ%}ÜésrÑàŒ¨Ñð†@ïò²KïþŒJëÐ~“Ýç‹Iãë™NúÞÂRáÞ^Sèáx@ðìJKÑã(}ïÌGBíéa^êÏ—ÜÝ6××s’Ü8…ÃŒ(£°o3¤×±!ŒÙ©Éæ~%²“,7ßË1XÝÀ7%Ó§^¯ÊÐ3¯ËÕ5u亵ݶ$&¹µVUÆÕauÏÄ{NÃÀQuÚâ:fÍÑPoÅ·c(¾Ú„YÓО^éã}•×ã—hÕêácªÃ°q×ÓÚyÂãáeìÎçpÒÑÞ`åìã|¹àî¹íàâ¤Ë×ïvÓÜç­Úïé‘¥åå¦Ýïð…›ÙäïÕýçܨþããèêéƸòòïÖÿïî¬ñîïÜúñõÌøëòÏöß÷ØôçÞ¯íðóäæãäêììÜžÝéëÜíëêÐÕöèäïõñãÖëþå·ôåèÝýêÈÆéëáã÷ûâ×çÿïÓ÷èï‰Þèÿ äåð’Õõã‘ÜôÖ’ÕóÓÏšÞåÚ™çÊãÒåõÓ’Þý¶‚óô¾ößÁnéæÞæÖÆvØ﬎âòäîêíé†ôëçšçîÙ†öêë•õãælàãáªçàÒ˜»ûÿàûåÿ€Ïèätèàçàâú±¸å諸íô–ºíë¶ÎÎͲŸíö¨åÔîÀìéïÉÀõåÕ¯öئ“ÃÑÉËÌÑÀ³e9n|†—œ›œª£–Ÿ¥—Š•“’“Š‡‡„‡‹‹œŒ‰†‡’˜‰xwy‹’Ž‹…Š‡€„ŒŒ”††‹ˆŒ­šŽŒ‡‰”Ž‰~Š†‹‚ƒ€}ƒ{€ƒ€Œr€y€‡‹ˆq‡Š{x{{vqmpz€€{topr\rzqkmu€repŠjO4SÓ¬ÅÎÔßÕ¦©ÌÇݾ­ÞÜ”¨ôÀ¬æοµÏÚ²¨æÀ»¥âѲ{󵤓øг¡ãÓÀ‚ö²ªŸó»µ’ž¬ÛœØÌÄŸ¬ÍͬÙÎΓÀÅ¢ØÄפʺլ«Ï½£¬ÜÔ¼ŒŸã•—ʲ ô¸¶¤á´Êì³®–ŸŠ»Ž™r¹ž•Ž®™Žwɸw€‰›x}®Ž»„–±¸h‚¥”¸t²—¿Š«˜Â€”˜Ý~²ÌÒ…ÛÓ┥æÜ…„¶â–¬ÌÞ›µÙ왥Ïøœ¤ÞßÉ«ãꧠñÜÖeùâÇ›÷ù·´âɳŽýβ“ÒåÓ†÷·™çÜ‹yåèŽzïÝ–¿æ¥†ëÖ¥f·šozáÒª‡Ò£œÁŸ–s’–‘Š©³L‹µ¼ÆfÀ³ÛaË¡³cǬN€…ÃÀvš¥sZL¤ƒZ±¹ºt‘¹Úe»àÌnÁÒºcp¦u’Äoy´Ô—”ñ×zoβ‡`Í®svº²}OÂÚ©^èæ–qËâ¯s¿È—\ÀêÎ[~é~U¶Îºóã×VÞ¢Å9êãÈ<éÛà­Ôìì¸ññ×¥è÷äjÂÛô½åõÐl¤öåÆÜãíºãõñå½ÿãÑ”íéÕõàÛÛÂÿôçÌúëõ³òæìÀÿåí¶èèä¯õïÛÙóíâµåóîÂíôá×òçá¡ãíéÁÕïêÃ×êôÚçôõÌÊñïÞ¿åõé¼êîÖÊçößÉùíìâùûºêëÿžÐôú´îíâãÝðŸøåÓªîçÝàÂÿÞàÄøÛ¿™ÞßÙ}îßÂéñÉÇÿÙÞ¡ìÜÑ8äìÒ¡õåÏÃêÙí³äîÚ˜ìÙܘéëÏ‚ïéõóèÞyåéí£ÿÙï|ÄòïÁáòé’åçè^Ôäò²Þæ÷€~Þÿ‘Ãäÿ¸ÑÞò¹ÜàÞš“ðú•äñá“êïÚ¬¹ßôϾï颊ÍÁÍÀÅÏÀÁ©P120-+-..7*)01254/.(2.&1-4'*66/.057,496;26,,+(37*5/2308:,'3)08,.19367036+1+-1..1143/,-0/+/64,*1530220120,132362.3.142176)(+03/,.3470+29761/4920Ijà¹ÃÕÓÔX×Ì`ãìVÿç‰wëê£9æôˆ[çõ®JÓð°Þò­$õú–Wéßw"ì׫%ØášTßË…·ãµ=¸Û´PÄÙ»¸ÓÕ!}å¿"ŸÞ¼èê.2×ÜAYßêšâÍ ^áØ‹RåÊ™0Ùâ¢OîÀb'ºÜz2êÛ\CØÆ?4Õâ†?žÆË/—Õ­VÒÏaOÕ³Ž.«Ú¨³Þ¤'ÌÙ¸(uÛ×$€ð¼S­à·&žóÕc߸1zåÜC¢í¾AgíÍ?váò~šÜÝSªÜæ»1îñ¡>ÿé tÿÿ}yÛõ•SÔãQTîësп—^ÚøÀn×ë½]áÛ6…ôÞÀeÈíŒ!°à¥míàb0¤Ë~&¬ä:¦ÒnG‘Ä’0j×É-»î¶Øë™+¦æ¾DÍåÝ&IÊ®,ÖÜ+eÇÄ< ðÈ©¦ÞÜ‘¡ÉÈ[PÂÎLFÊÐL…Ñ몆Óë uïåU/ÀÑ%YÚ¾P<Üí²|óÌsŠëÏPuÒЛRàíq\­ß‹cÈá¿áÝÔQ×ÐÜzÙÔÚmÝèçf¯ù÷|¦ëé‰ÛÉà °ðïµØà©ÙôÿÚöäéÇ|âÿ¶†Øë·ÍëÞÀÏéçÙ¥äëæ¢âÞñéô×â–àêíãøëïËûûôÓóïüÖðèôßìóîÐÿÝïßîìòÞïíòïîëòÔåðùðØôøóéÿîØâéëèáçøÿÒÿé÷Ææïî›ãîõËïáìœØòðp¼íþƒ»âð¶”çîÆ£þçʵéâÃÌåÜÿôÜÛãÔåâÔ¤ãèð•ò¾áÕüîõÙñÝ·˜Ùöï‹õúçãéìç×þìôëñ߇ÙÞû²êóäŸâÎõ»óâøÃòäñ”Ü×ÝÔôâþ¶àÚí§óâÿ¤àêòĪ÷íÕïÿÕºÞõôœââäÊäÞáÞÓãÿ¿ÌÒ‹Éû¼ÇÃÐÑš–Ž‡‰‘˜–ƒ’Ÿžœžq„w‡Ž‰Š‹Šžœ‹|~‚ƒ’•Ž‘’£™¢š—…Ž›—‡©§ ¥¨¬Ÿ¤——š•™ œš££•ž¡ˆˆ‡†‹‘“‘Œ“”‹‘–”œš‘zƒ–¤ˆ—›˜‘¡Œ˜ •†Š™‹Š‹Œ˜¡••—¡¨£   œ›ª½ÈÀÈÌÐÍÕ©È׬¼À¸«§ô§·§²ÍÀ¢«Õê¶èºê˜ÎÌó·â¦µ¯ßÄÏ ÞаºËÑ­š½·‡±” ³ÜÝ庤¾¯œ|Ƙ¿pÞŽ¬°à|”£Ù•Ïçݪ¢Ý̦ª«Ù§¦›î¯»Òì´†¨Ô©z®Ç·”‹‰——±ªz¬º¥­«—†²ˆmu¤‡²‡¯˜…©‹lz«koŒ¹¸‹µy}‘Óx±~¤ªÝ“ËÑè˜ÊÊÄmÍéÙ‹¹ÎqœÂÈØÚ—ŸÒ‰œ«Òx³ÅŠÀã÷ÝtîàÿÖãâÝÔÕÝÖìöÝ°ã퉠ðÕ‹‚ºÖ–x±ÇrxúéÁwûá¯ìÖâ±zèê¨gצ‡{¿³sĹ„hÈ°|r»°ox¾«•w¸¶ÙpƾÄ[ÎÎdlÝÅ¥n›˜Ð€¤«ÌuŸ´Õn½ß•G‘¾Ï]±åÑaš®Ð}u°žJdزf©Öö£y骚Œµ¬qŽÛÕY”ÃÍrgÕ¹[UÃÙ–^°Íw‘Ýà¥CæãIµÛŸšèÊ—P¿ÔÌYßÛµAÅçï—øÕñh¯Òë·ÈöÛ€íæó©Ç÷ä†ÁêïºëèòÎéÙïé²çðºªæçÊÓì׺Õýýé´ÿðä®üÿøÌáæþ·÷ñÎâîëÝÂúâûÊíëúÖóéñËéêáÈøÝöÔæêîÔåéïÓÚçøÙåêíàÈëúï×ìäéáåãÓÔçñõÎýíÿÀÜ÷ê¦õõåºöñò­ãâè™çæèz·æà¨øÛÌ»öÙÖÏáèËÛìáùúòìÞÑòõÔ´üìé”óõàÉÿçßÏøùÔÀÿïä¢öãÚÐñíØÒñêæ€ÿøäáîò¬üêܬøëüµòñÿÄÚêÞŽÛüé¶äñü²ÿÔú¬ùäïëäÿµ®çûÀØáÝÏñÿæ’ñòöÂÚõ㶾ôÿ»ÕߎÌËÎÎÅÈÅÌ×ÂÁ¼¸»ÃÉÉÇÈÒÚÕÑÔɱÙͼÆÉÁ¾©ººº»ÄÔÔ»Á¹ÀÁ¼Å¿¾º¼¾ÀÉÎÈÚÕÓȹÁÓ׶ÙÛ×××ÜÏÒ¿¿ÇÂÀÆÆËÒѼÊο¸¹¸·¼ÂÆźÂÅÀ¾ÂÆÅËÌǽ¹¿Éϳ´ºÃĸ¸ÉµÁË¿¬­»Â¶³²µ¸¼ÂȾ»·¹¿ÀÇÕÉÆÁ¼º»½¿µ»ÌÌÎÎÖÝ?˜îÜiFÜÞ“5åÞ&;ÿÑ7Üצ4Åß±ÝéÄ ïó¨VßÞc2ìæV,ÑÞ>7¿Ò[ÉÙÕص¶Þ§Àǧ'¢Ù¬¡ÿ®5©ñÌUrÄØN6îÛ4ˆøÐ6‡ïÒ8?ÖÓ/uÉàEMÜÑ74Õ¶aWÝÇlÝÑX-½Èd/Åö²Äß©ºË‰¿¨ÀÌ»¾ÕÀ%ØĦ(„êÒ aÚò,¡ç¹'ªÜÈ@‡í¿zÞÄ(‹ø±"ŽäÂ1†õä!šâãP€þì}yíê¬Pêí­_ãàr‰ôÕSèÖ@qËç‘_ÜàWCêØ+lØ䛄åì´níÏGDÆúßãØ„1›çh2ÉËŸ-¯Þ’&£Ù‹4Ü}%pÜÓ¾æÀÈê'aæµ&KñÁ3•öÔ*”áÈ0°×á¯XÄè2cãÈa¼Ö²dßÜL0ÐúÆÿ™žçé¯+ÍØd9ËÕ‡_ÊÂ:–ãkïp^åâ>UÒ¹vgÛáµ…üÕ™ŽïäŠ=ááÌWÜÛâyÞÆä{ìäéyàÕô„½áü«ÒáßmÊëíªîü†Ÿùì«Ôîëš®Ú÷ÆyÖæÄséꜻèò¹…ãÿÚ{Ü÷æ¶ãïß»èàöÜòòèÍòùÙˆÔûõÅìôë´ÒíÝ«Ðôö¬ÝóöÚë÷õÙîìïÖãîýæêðììßúíÛÀñâçëèðÖ—ñòà‡ØåðæìîëÏïâkêäÿØÿàãwåìݳ¸åæÖœÚãÔ¨Úã²¹æåÔ’êçÖ ÖßÏ×éàë°ãíܽéÞêÊðéÖÜéÝÛ©èûæŽâííç÷õÙ¹þÕø­ûíå¦êêÿàÿ×é ÖïèŸÕôåÔëìãyäå÷§Éäé¥ÂòÿµïîöÒñÞá·ÿûéÀÊõíœáðò½óïïéìà÷æªáùµ‘ÐÐÂÌÄÉÍÊÓпÄÊËÆÄÊÒÖÈÆÍÊÄÆÊÁÇÅÎÉÁËÄ¿°±ÀÅÃÅÈ¿ÉÆÏÍÂƾÄÃÃÄÄÇÉÇÇÄÊÇ»¾ËËÄÎÎÜÙÈÍÍÖÀÁÎǽ½¼ÑÆÅÉÅÃÉÍÎÎËÆÄÆÇÅÀÈÌÉÆÇÉÉÅÂÀÅÎÐŷǸ±¾ÊÁ¹Á½Àź¸·¯¶¶»ÄÇÿ½Ã¾¹½½´·ÈÊÍÉÀ½À¼´¸»ÄÂÎØÖè”ÒÍØÍ©ìƦšôºŸ»ÍÕx¹ÀéÂâÐÖ›ôÑݢ㽧–ùȨŸè©—üÜ¢žÜÄŠ³ðغ—ÛÛÓšàÏ·’ÅÒÈ›ÃÇÜŒ¦¾Ú™ÈÔÙ‹“–Л¨è㡶՚º¹ÍšºÚ¤¡æÌ”›Â왘À¸‰…±¯“›Ò£–¥‚–‡¯Øz¥{’³¢¼—™ij«·„¦Š´‘³¸Ðt¢Ú‰–Ìq¨ßä†ÝÎ΂†¾ä}¬É܇–ÿÚd°åÝi¢ÉI¸áè ´ÇâŒyïåóÀñçÝœÓÏ©³ßéá‹ïÔ™¡ðÜ»„ëÔˆ{óåõÑm…òéŒ}å‰bóàšfij£WƒÆ—c²“£tæÛœ„Ú³yg’Ì bŠÆ¿aŸËrÊÉ¿}©²Åw’®Ëk¢³ÄuººÕZ•ÙÂtQ¶Í›·»GQºæsŽê¤of¼®veÞÕoŽÚÐÕ¯â¢nèè…wÐÓlcgºyh§ÿ¢ˆìêˆpØÑjÕãœ[ÍÙ–‰ÕÖ:ǹ®FØè¦GÐäò‚è×´D¦ÓïKœÓÞtªãõŒåóå¨ÀØä¡ÃíïÉîëùÀÈìçÙ©ëÙÑ–ôé½Úâìݸÿáö²ðêàÅüèà¾íúîÆñãâ¯àôÖäààµÝêì¾ÞêçÃñüä©ëíìÐáíïÓâëæÊ×áðØÕðñêÑìêزèÙâèàèÐÞóì“çöðÊæüÛtÉêížþâå§ëæù‰æñé®·ÞãÊ’èöÁšÞï¢ÒîèÖ©òåÌ äïÇÑìïÕßÿÖ¬âèؽéïÍÕêìÛŸïåÛ—êûÞ½ìùê´ãñð¤íîÖ”ëøàªèèã~·òõ¯ÞåøÂóòèöéÁ<›ýܸÿã‘ûîÖd¢û✥åܦ»òî”âúÜ´ÓîìÄãîæÃrÚñœŽÆÉÁÍÄÊÐÇÉÇÄÈÏÐÉÂÅÌÎÂÇÓÐÆÅÈ»ÈËÑÇÀÎËɾÁÊÆÀÆÎÒ×ËÌÈÂÌÉËÍÍÌÍÊÉÌÆ¿ÄÈÂÄÉÃÐÎÈØØËÑÎâÊÈÓÍÅÆÆÖÊÉÏËÈÎÔÖÖÒÊÄÁ¿¼ÂÆÉÈÆÅÅÄÏÉÃÅÏÔÍÁÔĹÃÏÊÅÌÆÃÆÈÇÇ·º¼ÅÏÒÌÄÀÈÄÁÄ´±¿»ÃÄ»·¹¶®ÄÄÇÀÎÛ×ðØO†öÛd*Ûô˜aÞÔiŒÞåO‘áì™ÔÚÂòêj@ý÷—UÜÔ|0ïÒ¥0ìáqcèÔ2Ûò¢!Öå¾(ÉâB§éô}©Üª öéQœÞÎ-mËØ.bÜÛ%¤à½:›âë†wäâ©|äÉmZëºw3ÎàVVìËN_ÚÞ7;×ÓyÏÞƒS¿ÎŽ,àçf8¹Ý©ÓàŸÑÞ„ßØ¢+–äº ”åÆc¹×©3´õÐ*šîÊ7˜òèu¬óærŽáÌ-¦íér™åÓQžöÙ£_Öòš–ÝçmréØn³î廀óÒ¢cèÙ¨~ôß»€âõµuìö˜lÔ߀VýìÖ‹äð' ËlEæÌh2¶æ¨‚ßß<ÁÔ€WðÝ•UÂé¼:Åé‰:ãÓ…TÜçÁ$©ÓÑEÃݸ,ÄÅÃlhÈÓ#œÚ·4kȺ·ÝिÙFRÏÕZ”áÀc§ÛëX5Ú昗ãÔ^žèãQU©Ñ|‡ôÖ—…ÞËt«ãË»ùÕp~Òà}ƒêÒŒ@ËæÙwÚÝÐ’àøÜtÝÒÅjÑáúwµÓÔ’æÕö´÷êìÓÿõæ·àøòŽÅôÿøóöô¶ˆÖþÞÞõñåñõçßÁòØóÒýïúÚñòýììÞéëÿëè×þïôÌúùùÎòïôÞëáþåøàâÛèïôÔíõìîæðÿÛéïäôãüõêäúäêáòô×ØòøòÜÿÞõÐêéüèõãû¤ÉëòÐÿêÙ”ëâò‘âãê½²èí¿¾òæ´ÇíöÍììòÒÝçäçäáõÞéæâôÎþúçðúéÜéêïËÖìðìÖôáñ¯ûð×»ûÿçÝ÷øîÔøçóà÷þãçþãì¬ÌÎçŠüáÿªðéá“ÁØä›ÀÚï»ïÐúƒÚÍÚ×ààåÜçæõáúóé­ÖìðÉÅäó¾ÈÿâëöКÿÍÔÈÉËÆËÂÏÆÂÈÌÈÃÂÐÓÖÐËÑÑÇÒÕÎÐÊÃȹÆÎÒƼÅÎÈÑ×ÎÓÐÆÊÁÀÆÇÈËÅÄËÙÊÊÎËÎÒËÉÑÊËÍÕßÊãËÄÉÆÈÏÐÎÑÐÆÂÌÐÆÊÌËÅ¿¼º¶ÁÁÁÂÄÃÁ¾ÃÈËÊÉÊÉÆÅÄÁÃÅÂÆÔ¾¾ÄÅ¿ÂÉË·¸½ÃÆÅÄÆ¿¿¾ÀÁ·²¹ÁÊÍÇÃľÆÍÔÈËÕÙ¤ÈÀ–³ÊË‘˜ÕÕÒ¯çÔžÇÚàªØѧŸéÓã­Ùì¸âÃÍœÙˬ«íÖǹç×Á£ØÛÍÜÓÉ¡´È­mÍÃݘ¼¶É¡ÅÈã’ÇÜÒš¡½~µÆÍ“ÇÅÒ‚~q¾Ž’Ðæ—{¹¾“ˆŽŸ§œ­ºŠ‡³Ñ›¬¨Èš½–ª®~p©z~º”¥»²«†À›Î}Åü}º–¹„¶¥®l¯”ÁË×Óv½´édºØäv´ß䘻ÙᛪÂçg«æâ¥Ñê☫ëÕ³¤ñåñØûßÆšáù˜·î빈ðÚ²{ãöÚ¼õâ©ìáîÏÙËŽˆÎ·¢ÜÙ¦kÇÄ£l»­mù¿½—ËÊx\µ» w˲˜hÔª…Zù¶h¿ nX½Éy~Ç©¯Y ¯ÒdÀ¶¦X¿ÔÉ•‰‡ÌK©º¢m“ÃyV®¾æžBÃÿs‰ÃÉv“ÕØc•ëÖŒxÀ™Z˸n£Öä•`±ÉrNèòª]â¬Aõç @·É‰kÃÕŸhÁà›PÞëå‚éóÔŠÑóÈVæäë–ÑÞÒj˜èíÿçÙûàâÄíðð±òæ÷­ÏñøåïçéÓÂëä¿Õ÷îÑÞöòä»úïëÅÿåëàïöùìõñé¹ãòìÒÿÚÚ®äêê¾äãéÏéæøÍòóèÐàìîÆßìäôçëóÄÙïñåÏíïã×õïÃÍèïÙÑâìñÐÿê÷ÌêçæÝöåãƒÅÿä´óöþ åîÿœõÝÿ¸¯ÝèĽàè»Ïòæ½âÞè½ÐãíØÕáùÍæìäçªïè×ÔïîÏàäì¾ÐæåÒÐêÚ×x÷ÿÞÂæïɹîùáÇøðØÀóíØÖãæá›ßìýááè¡îÝ·;™õÖlÇïôçä×oÏáèÂòàì»ÔçêÀïÿÝz—æì«£êõ¬ÚßîÌÝΑÕÈÃÊÇËÊÑàÒ×È¿ÅÍÎÌÎÖÓÏľÈÐÌÊËÁÈËÌÒÀ¿ÆȽ¶ÁÉÃÃÌÊÖÖÈÄ´¼ÄÆÈÌÄÂÎÔÅÅÌÉÌÐËÎÔÐÒÏÖãÏÝÌÇÊÈÍÒÊÌÏÐÉÄÎÑÇÅËÎÍÊÉÇÄËÆÃÈÏÑÍʲ½ÈÌÉž¹¿ÈÈÄÄÄÆͽÀÈÊÂÃÍÒ¿¿ÁÃÃÃÈÎÁÄÂÁÆÅÀÂÂÄÅÄÂÁ¿½¿ÇÑÈÉÐØÞ0u÷É7WèߎEÓð‰nóøG’çÖl-àâ¸@ÃðšMçÍ¡^ÙÔl:Ýæ¯5Ïã [ïãI3éñ 8Áõ›9¼ìjÌ÷«,¯ß¸£ãÁA—êÌP|ê¹,Vçó@†êÃL–ïÌ"BÒÕIYçÛULÜßuçÚe`ÓÍohêÐBiæÉZ&¯Õ‰"…·£:´´†[ÛÙšÓâr Íî§Ûæ¡ ƒìÌàÞ$¨í¼:ÊÛª-Ÿïð5¬íòœ‡ÿÅd½ØÇOù÷‹ ÞàuœæñŒtãÕ¶mæñqƒóÜYŸÿæ¶mîú pÝñ°Žãÿ˜pïæÝMê̇—ÓÊv‰ßäsdïß~>Þ߀"ËëÁ*ÿß]/ÖägFäÚ”#ÁÛq*¢èÀ%¾ç¸‘߇ƒÖÈ+ÔØÁá8„ãÊSÝ·-›äÊ3›ÕœŽÂÁ(ŒÉÓ;~ÉÈH5÷µJ¶ßضvò¿sK¶ã}pè¿wŠêÔ’äáÓ—Üò¸×Ø¥‰å׊DÜÒ†.òÛ¤‘ÞÑúüÙÜÝÚÖ‘íÔÊ~Øí᧻çïèý×ç€Ìøà€¸ñëµåëû€Íøé¼ÙóèÜ•Ùêá”ûõµÙøõ¾‘ðïÞ»óëÓ‡êòÖ¿Úùöåïûèíïäò¨úíüÙõôñÁàíå¹áåþåäóøæòíïÝìëñéöëñßÝñèèßøîïêíñðëñÿõ×öåâ’ÏæþÜíø͉çîë’¾ðò}Éã÷„ßçÿöÝôÌ¿îîÉÖäùäêêàÎÊüïÓØêòÝíÖùãÕ÷ìé³õçôçêûÕáÜðغÿÙþäôçÿèíöÐÏøîóéøñøâóëí°ñîîçñãù±ëïîöëïá“ä¾ï¶Ëóíšþâó¦±ëí½Áíò¿¹âî©Çâó±ÛõÿöçãÚÊëäûÝååî­{Ü¿Ï××ÖÇÊØ¿ËÁ»¾¿ÁËØÔÄÄÏÊÀÅÑÕØÏÐËÉÑÂÎÀÀÉÇÄËÓÏÒÈÏÒÌÏüÅÇÈËÁ¾ËĺÂÍÊËÏÊÖÎÍßÕÆÕÔÑÈËÏÌÎȶ̿ÂÏÍÆÊÒÀÈÏÐÏÏÎËËÄÀÇÒÖÓÎÈÈÈÌÒÔÌÂÄÉÅÀÇÊÁ¹ÁÀÈÐÍÊÈÃÆÈËÌÈÄÆÌÇËÆÁÈÎËÉÍÈÅÇÈÅÁÀ¹ºÃÁÊÑÖ¸†»¬À{»Ü˱¡çÛžžìÚÆÀã¡éσðÈ ‘îߟ§ß奔ØʨìÍ ‚ïÙ¯£Õ×¹žÞÕ¿ŽÍس®­§Ã’ÿÍ{·¶Ðƒ³½Ço¡˜ž™Ž“ê™±ÕØ¡£ÒØ©…ÝÑ’³Ô§Œä᜗–͈y§ž¨•±±©¢¦™‚wÁ™}…°«xgÀ¦”¯Ž‚^»œ¯„¹•³~«©Ð†°±Ýr¯†ß€Õ³ÇpÎíÊd†²Ýz¿Øâ¯ðÇk«Ýµi™ûÍkžðÙ§ªøóž™ùó¸¶äÞ¢æÉ^µÖ祔öíäÂïÞˆÖãœjÓåªyÄÚ–”ÚÅ‚ê~céÁ¨xÝÒ¢síâaéÖ–bÆÀ¯N¬¼ŸZ¬Ã\]º²–[¢×¨n·Êhmºº^ħ§_ÍÉŒ]´Æ¿OOš‰Z¡Çº]®ÁÎ~Õ×Õ[Z«‘XX¸àsÅà[ ÓÌŸ„ĺLvéá…‚ÍÏa}æÓšÛãÀXéê¼|×ãgI±»kWÎÝEÖÂ’4âêãAÑñ¤LÑð±7Éï”jáÕÎ_ÈîçìüîÒB¸ñÍD‰éë§ððè¯øÐŒ–ÿçׂåê Mâã¾äöðÚ¿òòÚÇíõΤèæݯêéíÀòõçÑúâõ™ïìâ¥æúï°îóñÁÙþé¿õòåÒÜÿê¿Þöîçèíçзäö×ÇòþßÓòáÓÜô÷Ô«êýì˜ãñè§ëèÛãùé¶ïêÆôì—çïè•èàõÌ¿ýâËÓéô±çëáÖÃçí×ÖæåÙÝçæßÃõÙâ´æçëËùðÈÖùìʘèÝÖ²ñåíÂêêȺñíæÐîÿ¤§ì÷ë§ïì×­òòä–Øäö·öãÌ|ßðô–ÕÛö‹îéÏ’ÎòÝ ÄèÞŸÉï⇩õßtÎóîÑìÛö¥Éíð»Ùî÷œzÒËÎËÍÍÈÈÉÅÅÏÆ»ÃÊÉÌÔÆÀÈËÆÅËÖËÊÑÓÑÎÉ¿ÂÅÆÆÈÌÏÎÊÊÏÐËËÏÓÆÁÊÍÆÃȾÃÀÃÏÍÈÑÓÇÑÉÁÍÏÐÆÈÊËÊÊÌÎÊÊÐÐÉÈËÊÉÏÍÈÆÂÁÈÎÃÂÐмºÏÊȾ¼ÇÌÅÀÏÐËËÎÁ¸ÄÁÁÂÆÉÉÆÂÌÃÁÊÍÆÁÂÏÉÅÆÆÁ»·Ïü½Âƽ¬»¼»ÁÉÇÑKù¸«Ùâ‡Eéó[UýßaŽäã` Úæ¯?Òú˜;ÝÑ­aäü¢=Îä©#èÙ‚aãÝxXâÚfCÎݶ(ÍÏ .äÝ®,¨òÃ0½ìµݼ-®óØCZçí0zÎí& ßÒ:„ÖåffÞé5hêÒfƒÔíCgÂÙ{YÌÅISËÏ7KÄç‚G¥ò£6¼ÓDÖÏb.³Ì•IÁè–³án,Ðѯ'ŸÍÀ&¯áµ­ùÈi¶Ô´9¡ìèx²ßß²ûó¥°ÒÔ ñÜ€•ÿçªàç˜êý¸úák˜úüj§öܦjüõœ™ë㉋äÍsYæÞmÞèjÚ³@•èËÓ˜îÖ”_âÜÏ™ÌãÖØ»…Läì~1êßPP¾å„3râ§JÀâŠ(±À~fÚ䧊áÛGuÖ©1¬¨[:uàÍ%cÙÉ:²ÿ×Vr¸¬6MÉÅ[¨ØØd§ôÛjrõÕ[GÄݘ•òÆbŽÕÝå£ÞÙ¦‡ÊδçЃ–ðÔ¦W¹Ò}dÞÞ•1ºòî„æìÒ{ëäåƒßÜÝéìÖŽÆíå‹´ÿô‡ÔÙóÔâçöéôÿÁÿôÎïùÙÃÄûúÌ‘þÉêæÿìëôëîÐñÜíèöÿýåÿóÿØüèì¨ÿÿÝ¢ÿéíêùéÿØýóþßëïøáõùúßóüîöýíö×áïöóîëëóãóûçîüéåìîëëîîéòÜÿèíÕÿêþ’èøÕ’úùÿwÓÿÕŸÿíá¢öÝîÀÕåí¼©èè±ÉõÛ±¼äêÕáõõìèïðáÞíôجïãîàúãÓÎæóÚÕùòòÆìßãºÞ÷ìÕçõó×ÿñùèÏîé¹õàô¾üëî§ÝîçÁãòãÃöë×–ëîÛ”ßåü¬Þÿÿ¸àèðÞíòùãîÍíìÿïê™ÜãïÅêÚè¾¼ïòÍæÓ›ÂÞÝÍÂÁÄËËÂÉθÂÉÄÄÏÎËÉËÎÏÌÐÇÇÍÎÎÍÉÄÅÅÃÁÁÄÇÎÈÇÌÏÏÒÙÝÑÊÌÎÊÈÊÃÈÆÉÐÉÁÆÐÃÌžÊËÎÐÐÐÎËÊÉÉÃÁÆÊÊÑÜßÊÌÉÇÅ¿¿ÉÇÖÒÄÄÍÍÈÅÉÅÂÈÌÊËÁÌÉÃÈÉÄÅÉÉËÎÑÑÏËÇÂÁÇÍÌÊÉÕÑÎÍËÊÎÓÖÍÈÄÂÇǾ·¼½ÀÅÁͨøÉvÕÁÆ’ãÚœ™ëØ›»Ôé­ÝÚÑÛœ÷Û¿‹ìß•Úà›œêß»ƒï½¦œà妘Կ«‘âÐÙ}¥Þ›‰×ÏÓˆ±ÎÙÙÔŠ˜˜ÁŒÌÑÏ’‰µØ„¢ºÐ|¢œêi¡ªÎ„¦Ô›‡©ß”œ¨×‚„©­€s²¹ˆ£ª–¡²¥iz—•ƒª°ŠžÉ¸ˆp³œ|§¼u¨¶»{µÅÐr®«Þ~ÁòÈw×êߟº¶Ôl©åídŒùç¼Áæó£¢á㎗éè®®Úì³áØÞœÆëàíÅÿåo²ïÞ^ ù㺃ôãÍËâ× ™ÊçŽç¹zµñ{˜¹œdìí´rÝè—LéãÅ“ÑàžS¿¨€Z³½ŸVŵk‡ÃÀ‚_”¼ÀeÁ££TÆ¥iaÁļk¼ÛÓ^¨áÉI“˜‰n•­Çk£ÆÏK¥®…s~¨šT€Ì«7bÁµ\‚Öû•lÀ«bqÚÔwYãÀTÜÌ.×æ›aíö_YâÙså̺:½ÙuKñÛ‰OþãÐ6ÈÕäRóܺSãö³HÚé½e«ÿû“ÃõÖrÌìð˜ÚôñöñÞöïñÂõâåÔ¾çù»WÚèØ•ñõÚäïðá¾ìã×ÑêâãÁðèîÒñãï—çðášóûèÍîòê­âòèÄÕðòÀäøáÏæþêàñïêºÌçùõçäê׶ßýÔÖúîÕáçáÛàêðÚ±êóݯãìÚ™øæÒ}ßäðvÐöÜ’ñìå\Óéå•’äè¼ÇôêÉ×öé°ÄáûËÝïîâÛãäÓÏàå¿šéëæÒèïÚÖîðÍÍùÿÌžòùÆ›ôîÌÃíðܺãáêÍâôÞ—íëÄiÝæꃹúâ˜êíÝ–åñæžÝëÚ’Ôôâ‘Öæ݇áæóÛèìÛºØñó±áìß_¤ÿå¸Úèö«ŸýâžÂ߬«¸Ñû¼ÀÇÈÁË̽µÀž»ÔÜÙÊÃÈÆ»ÐÊÌÑÐÑÔÒËÊÈÅÂÃÅÈÊ¿ÃÇÉÎÖØÑÉÆÉËËÉÇËÍÐÓÊÁÃØËÒÊÇÒÓØÓÕÔÑÌÈÈÉÊÈÌÍÇÅÄ¿ÑÍÉËÊÁÁϹÍȱ²ÄŹÀÉÉÄÄÅÆÌÀÑÐÄÊÕÒÊÉÉÊÍÐÑÏÍÂÁ¿¿ÅÌËÆÆÆÇÇÃÁÆÎÊÊÌÈÀÁÅÁ¹ÂÃÄÆÁÎÓW¬óÎKuÖíœ`öïj‰èÝN§åÙi?ÐãRRâæ’EòÙpm×ù^:Øüo:ÜÞ]cûàb?éäŠCÄþ@ÞÏ×@ÊäyšûÇVµú¨A±ý¹D‘òÏ;açÑ`‰öÒ*¡èÆ_ùÔ4`ÿà8eúÑ5hâ×c'âÆK1âÑSXå×W%bÈ’U´î‹Üèv ÑÖ"½Üg(³ü˜¿ê†#œâÉ£óÏi¸á¯BÇõ™+¦óÊ9ªþÀ9–ì¾d½ðÖ¾€ÿÿœüäwÇâép…ãÿ”XùñÜäìô…¼ãᬑïñ§ƒüípqÙãšdõ÷£BÐÌDÜÒ;Uéí³”ñç›xé×ÈiÜÞ‹…øà–F·Ú}MóÙ|8¦Ôh?¨Ó¦9Îئ%Ôæ¤3”ì¿F­ÜÜ…ÈÑä”ùÛ“-¤ÕØ-ˆéÈ3­ÐÔ+P×±MVÕº>'¡Î=XóØO·ìá;LÂÞlkÍßg}ƶp™áàËuÛƬ£ÓÃy™Äå•põИâ»ë§õÄÀÿèÈmôêÝ’äÜþâñæáÑèøœØéÝŸÎèÿÜöþý­Ùáïšÿáôçíðó‰ÃáçЫðÍÁÄèæñëôÿñéùîéöèòäéÙæÃáóÙ±ðïõâÿåòïäïÿõõæõéúñ÷ñøàäÙÚõêòóõðÞãìåçððàÑÍ÷áêúíáãàóíåæóúíÚùéóîÿåëë÷Þà†ùúÿ–Óíù£üëï¸ýÌÿ¶ÝñÐÕÒã÷λòûÌùçöÊíáúØçôïÞâîëâÀæãöæøïàÒÿÿÖÐîñÚ¯öçØÜûìÿÿåã×­ÜðêÊïêöÒøÙûùïÎýÏþîþÿîòûÿïèèÍÿùøÉòíüææëÿ­âÍò¸ÍÛæÍãèç«ÐÑî£ëßÿº·êûºÓßúàóðñ¾—º¾¸½ÈÎÉÉÌËÎÑļÅÇÁÂÉÒÕÎÉÍÏÌÇÃÆÉÈÊÏÎÐÎÌÉÉÌÐÒÍÄÀÃÇÇÊÏÎÍÈÅÉÑÐÉÈËÎÓÔÏËÍ×ÊÎÇÇÑÏÙÕÛßÚÑÌÐ×ÕÑÒÑÌËËÇØÑËÏÏÅÆÖÌËÇÇÉÅÄÌÇÏÎÇÆÄÃÇÁÉÈÀÃÊÈÁÆÆÇÉËÌÌÌÆǼÁËËÂÌÎÓÖÒËÇÈÈÏÛÜÓÐÎÇÂÈÇÇÌÉÑà„¹á볶âʼ„ÙˇªÇÐuÄàÒ¬•õô›¢êæ¸w÷Û¨ ò¿£”òºŽ”¹°–•ìðŸ‡öä m×ίáקmØÕ·…¹êáœÊÜÒžËìÖŠ ÉÝ­ÿЀ¥Ç®~ÈÓÑš”Åל ßäí–¬äѦŒÃÔ¦‡íà™£µÃ£¦–­Œ±¿ªr×Ê©zÝ̹~Ùç–r»É°}ÌåÄ|¼ÊÖ‹ÍèÈŸÍ¿~Éغ ¼ÛÐk•ÓÌ|¥Õ¾q£àÔ‰„ÛÍÈØ×ØÞܤ”ÜïÁ¤ñÝÀÑàÌ„ØÝØáÃÔË rÚà”ÞÑ“€ßפmèâgyº³ŸàÀ•qÑÞuAÍÓ‘[×û‘bÓã’Z¼ÕuQÔ˦V°Û‹\¡ÐºYÇÔž`ÍÚ§cÂô´X¦ÊÓU¶áÔY²ÎµEœ¸ÛL›óÑM®èàb‡×Á\qòÕhcÒãYÐÁTžÒâvwËÏYSµÒJdàÓY}ÚÛKÚáYKêðgŠÉݬˆÝî›SÚâ«KáøtAçÉògæèÍmÎÛÛÓñÔÝ‚ÊìÞ‰ÌáÓ|ºèéÊåèߤóåìµîáØÊäáÄfÆëÔØ®õñº±ñùÀÒæåØÃæéÈÓÞíÐzãêÛ·ÛüÕ±îÉÚ¸æåòîÚæèÏàôãÄßàâÏäìîÚðèÓÊÒçÕ³ÅíÖÅÍßèééæãØ×âÜÊÄãÖÉÌÞåеêñßÊîîÛÌñÎÞœìßÙbÏåÝëæÖ—åïèÅõá»ÀÏìÓÁæÝ©ÎÙæžÇÖñ¸ÈâÝÂÈáßÈ åïÛÇá⾘à꯫ã꼇ôõ¹¸ìèÝãâäÁ×òÖ¬Ùßâ§éæãÜäðÕ¢Ñõ×Ûéáóºêèâ½ÒÞæ²ÚêæàÛåääíጷâß¼å늹ÛãrÅàØäæ‘®ÛíÆé㣗ÍʸÁÒÚÔÑÔÓØßØÐÕÔÒÚÛØØØÎÂÁÉËÉÌÎËÏÒÏÑÎËÉÊÍÑÓÓÊÇÌÐÏÏÒÍÏÎÍÑÖÑÉËÊÌÐÎÍÒÕÝÐÒÌÐ×ÑÞÕßæàÑËÒÜåÜ×ÒÍÒÛÝÕÎÈËÍÅÅÓÒÈÇÔØÈÃÓÙÝÙÕ××ÓÒÚÔÓ×ÖÔÔÔÓÓÔÔÔÕ×ØÕÖÑËÏÚÚÒÓÑÒÖ×ÐÉÆÄÉÓÖÑÐÍÄÇÉÃÄÎÎÑ -%%EndBinary -grestore end % Image Trailer grestore -grestore % EPS grestore -[{nextImage} 1 dict begin /Metadata {photoshop_metadata_stream} def currentdict end /PUT pdfmark -[/NamespacePop pdfmark -%%BoundingBox: 0 0 198 128 diff --git a/Build/source/utils/epstopdf/test-binhdr-cr.eps b/Build/source/utils/epstopdf/test-binhdr-cr.eps deleted file mode 100644 index e8f215bd32d..00000000000 Binary files a/Build/source/utils/epstopdf/test-binhdr-cr.eps and /dev/null differ diff --git a/Build/source/utils/epstopdf/test-binhdr-crlf.eps b/Build/source/utils/epstopdf/test-binhdr-crlf.eps deleted file mode 100644 index a13d4efd4ce..00000000000 Binary files a/Build/source/utils/epstopdf/test-binhdr-crlf.eps and /dev/null differ diff --git a/Build/source/utils/epstopdf/test-binhdr-lf.eps b/Build/source/utils/epstopdf/test-binhdr-lf.eps deleted file mode 100644 index 4325ef5c334..00000000000 Binary files a/Build/source/utils/epstopdf/test-binhdr-lf.eps and /dev/null differ diff --git a/Build/source/utils/epstopdf/test-simple.eps b/Build/source/utils/epstopdf/test-simple.eps deleted file mode 100644 index 10a06d16543..00000000000 --- a/Build/source/utils/epstopdf/test-simple.eps +++ /dev/null @@ -1,12 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%BoundingBox: 0 0 100 100 -%%Creator: Karl Berry -%%Title: Simple epstopdf test - -% This file is public domain. - -gsave -0 0 moveto -100 100 lineto -stroke -grestore diff --git a/Build/source/utils/xz-4.999.9beta/ABOUT-NLS b/Build/source/utils/xz-4.999.9beta/ABOUT-NLS deleted file mode 100644 index ec20977e060..00000000000 --- a/Build/source/utils/xz-4.999.9beta/ABOUT-NLS +++ /dev/null @@ -1,1101 +0,0 @@ -1 Notes on the Free Translation Project -*************************************** - -Free software is going international! The Free Translation Project is -a way to get maintainers of free software, translators, and users all -together, so that free software will gradually become able to speak many -languages. A few packages already provide translations for their -messages. - - If you found this `ABOUT-NLS' file inside a distribution, you may -assume that the distributed package does use GNU `gettext' internally, -itself available at your nearest GNU archive site. But you do _not_ -need to install GNU `gettext' prior to configuring, installing or using -this package with messages translated. - - Installers will find here some useful hints. These notes also -explain how users should proceed for getting the programs to use the -available translations. They tell how people wanting to contribute and -work on translations can contact the appropriate team. - - When reporting bugs in the `intl/' directory or bugs which may be -related to internationalization, you should tell about the version of -`gettext' which is used. The information can be found in the -`intl/VERSION' file, in internationalized packages. - -1.1 Quick configuration advice -============================== - -If you want to exploit the full power of internationalization, you -should configure it using - - ./configure --with-included-gettext - -to force usage of internationalizing routines provided within this -package, despite the existence of internationalizing capabilities in the -operating system where this package is being installed. So far, only -the `gettext' implementation in the GNU C library version 2 provides as -many features (such as locale alias, message inheritance, automatic -charset conversion or plural form handling) as the implementation here. -It is also not possible to offer this additional functionality on top -of a `catgets' implementation. Future versions of GNU `gettext' will -very likely convey even more functionality. So it might be a good idea -to change to GNU `gettext' as soon as possible. - - So you need _not_ provide this option if you are using GNU libc 2 or -you have installed a recent copy of the GNU gettext package with the -included `libintl'. - -1.2 INSTALL Matters -=================== - -Some packages are "localizable" when properly installed; the programs -they contain can be made to speak your own native language. Most such -packages use GNU `gettext'. Other packages have their own ways to -internationalization, predating GNU `gettext'. - - By default, this package will be installed to allow translation of -messages. It will automatically detect whether the system already -provides the GNU `gettext' functions. If not, the included GNU -`gettext' library will be used. This library is wholly contained -within this package, usually in the `intl/' subdirectory, so prior -installation of the GNU `gettext' package is _not_ required. -Installers may use special options at configuration time for changing -the default behaviour. The commands: - - ./configure --with-included-gettext - ./configure --disable-nls - -will, respectively, bypass any pre-existing `gettext' to use the -internationalizing routines provided within this package, or else, -_totally_ disable translation of messages. - - When you already have GNU `gettext' installed on your system and run -configure without an option for your new package, `configure' will -probably detect the previously built and installed `libintl.a' file and -will decide to use this. This might not be desirable. You should use -the more recent version of the GNU `gettext' library. I.e. if the file -`intl/VERSION' shows that the library which comes with this package is -more recent, you should use - - ./configure --with-included-gettext - -to prevent auto-detection. - - The configuration process will not test for the `catgets' function -and therefore it will not be used. The reason is that even an -emulation of `gettext' on top of `catgets' could not provide all the -extensions of the GNU `gettext' library. - - Internationalized packages usually have many `po/LL.po' files, where -LL gives an ISO 639 two-letter code identifying the language. Unless -translations have been forbidden at `configure' time by using the -`--disable-nls' switch, all available translations are installed -together with the package. However, the environment variable `LINGUAS' -may be set, prior to configuration, to limit the installed set. -`LINGUAS' should then contain a space separated list of two-letter -codes, stating which languages are allowed. - -1.3 Using This Package -====================== - -As a user, if your language has been installed for this package, you -only have to set the `LANG' environment variable to the appropriate -`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, -and `CC' is an ISO 3166 two-letter country code. For example, let's -suppose that you speak German and live in Germany. At the shell -prompt, merely execute `setenv LANG de_DE' (in `csh'), -`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). -This can be done from your `.login' or `.profile' file, once and for -all. - - You might think that the country code specification is redundant. -But in fact, some languages have dialects in different countries. For -example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The -country code serves to distinguish the dialects. - - The locale naming convention of `LL_CC', with `LL' denoting the -language and `CC' denoting the country, is the one use on systems based -on GNU libc. On other systems, some variations of this scheme are -used, such as `LL' or `LL_CC.ENCODING'. You can get the list of -locales supported by your system for your language by running the -command `locale -a | grep '^LL''. - - Not all programs have translations for all languages. By default, an -English message is shown in place of a nonexistent translation. If you -understand other languages, you can set up a priority list of languages. -This is done through a different environment variable, called -`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' -for the purpose of message handling, but you still need to have `LANG' -set to the primary language; this is required by other parts of the -system libraries. For example, some Swedish users who would rather -read translations in German than English for when Swedish is not -available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. - - Special advice for Norwegian users: The language code for Norwegian -bokma*l changed from `no' to `nb' recently (in 2003). During the -transition period, while some message catalogs for this language are -installed under `nb' and some older ones under `no', it's recommended -for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and -older translations are used. - - In the `LANGUAGE' environment variable, but not in the `LANG' -environment variable, `LL_CC' combinations can be abbreviated as `LL' -to denote the language's main dialect. For example, `de' is equivalent -to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' -(Portuguese as spoken in Portugal) in this context. - -1.4 Translating Teams -===================== - -For the Free Translation Project to be a success, we need interested -people who like their own language and write it well, and who are also -able to synergize with other translators speaking the same language. -Each translation team has its own mailing list. The up-to-date list of -teams can be found at the Free Translation Project's homepage, -`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" -area. - - If you'd like to volunteer to _work_ at translating messages, you -should become a member of the translating team for your own language. -The subscribing address is _not_ the same as the list itself, it has -`-request' appended. For example, speakers of Swedish can send a -message to `sv-request@li.org', having this message body: - - subscribe - - Keep in mind that team members are expected to participate -_actively_ in translations, or at solving translational difficulties, -rather than merely lurking around. If your team does not exist yet and -you want to start one, or if you are unsure about what to do or how to -get started, please write to `translation@iro.umontreal.ca' to reach the -coordinator for all translator teams. - - The English team is special. It works at improving and uniformizing -the terminology in use. Proven linguistic skills are praised more than -programming skills, here. - -1.5 Available Packages -====================== - -Languages are not equally supported in all packages. The following -matrix shows the current state of internationalization, as of October -2006. The matrix shows, in regard of each package, for which languages -PO files have been submitted to translation coordination, with a -translation percentage of at least 50%. - - Ready PO files af am ar az be bg bs ca cs cy da de el en en_GB eo - +----------------------------------------------------+ - GNUnet | [] | - a2ps | [] [] [] [] [] | - aegis | () | - ant-phone | () | - anubis | [] | - ap-utils | | - aspell | [] [] [] [] [] | - bash | [] [] [] | - batchelor | [] | - bfd | | - bibshelf | [] | - binutils | [] | - bison | [] [] | - bison-runtime | | - bluez-pin | [] [] [] [] [] | - cflow | [] | - clisp | [] [] | - console-tools | [] [] | - coreutils | [] [] [] | - cpio | | - cpplib | [] [] [] | - cryptonit | [] | - darkstat | [] () [] | - dialog | [] [] [] [] [] [] | - diffutils | [] [] [] [] [] [] | - doodle | [] | - e2fsprogs | [] [] | - enscript | [] [] [] [] | - error | [] [] [] [] | - fetchmail | [] [] () [] | - fileutils | [] [] | - findutils | [] [] [] | - flex | [] [] [] | - fslint | [] | - gas | | - gawk | [] [] [] | - gbiff | [] | - gcal | [] | - gcc | [] | - gettext-examples | [] [] [] [] [] | - gettext-runtime | [] [] [] [] [] | - gettext-tools | [] [] | - gimp-print | [] [] [] [] | - gip | [] | - gliv | [] | - glunarclock | [] | - gmult | [] [] | - gnubiff | () | - gnucash | () () [] | - gnucash-glossary | [] () | - gnuedu | | - gnulib | [] [] [] [] [] [] | - gnunet-gtk | | - gnutls | | - gpe-aerial | [] [] | - gpe-beam | [] [] | - gpe-calendar | | - gpe-clock | [] [] | - gpe-conf | [] [] | - gpe-contacts | | - gpe-edit | [] | - gpe-filemanager | | - gpe-go | [] | - gpe-login | [] [] | - gpe-ownerinfo | [] [] | - gpe-package | | - gpe-sketchbook | [] [] | - gpe-su | [] [] | - gpe-taskmanager | [] [] | - gpe-timesheet | [] | - gpe-today | [] [] | - gpe-todo | | - gphoto2 | [] [] [] [] | - gprof | [] [] | - gpsdrive | () () | - gramadoir | [] [] | - grep | [] [] [] [] [] [] | - gretl | | - gsasl | | - gss | | - gst-plugins | [] [] [] [] | - gst-plugins-base | [] [] [] | - gst-plugins-good | [] [] [] [] [] [] [] | - gstreamer | [] [] [] [] [] [] [] | - gtick | () | - gtkam | [] [] [] | - gtkorphan | [] [] | - gtkspell | [] [] [] [] | - gutenprint | [] | - hello | [] [] [] [] [] | - id-utils | [] [] | - impost | | - indent | [] [] [] | - iso_3166 | [] [] | - iso_3166_2 | | - iso_4217 | [] | - iso_639 | [] [] | - jpilot | [] | - jtag | | - jwhois | | - kbd | [] [] [] [] | - keytouch | | - keytouch-editor | | - keytouch-keyboa... | | - latrine | () | - ld | [] | - leafpad | [] [] [] [] [] | - libc | [] [] [] [] [] | - libexif | [] | - libextractor | [] | - libgpewidget | [] [] [] | - libgpg-error | [] | - libgphoto2 | [] [] | - libgphoto2_port | [] [] | - libgsasl | | - libiconv | [] [] | - libidn | [] [] | - lifelines | [] () | - lilypond | [] | - lingoteach | | - lynx | [] [] [] [] | - m4 | [] [] [] [] | - mailutils | [] | - make | [] [] | - man-db | [] () [] [] | - minicom | [] [] [] | - mysecretdiary | [] [] | - nano | [] [] [] | - nano_1_0 | [] () [] [] | - opcodes | [] | - parted | | - pilot-qof | [] | - psmisc | [] | - pwdutils | | - python | | - qof | | - radius | [] | - recode | [] [] [] [] [] [] | - rpm | [] [] | - screem | | - scrollkeeper | [] [] [] [] [] [] [] [] | - sed | [] [] [] | - sh-utils | [] [] | - shared-mime-info | [] [] [] [] | - sharutils | [] [] [] [] [] [] | - shishi | | - silky | | - skencil | [] () | - sketch | [] () | - solfege | | - soundtracker | [] [] | - sp | [] | - stardict | [] | - system-tools-ba... | [] [] [] [] [] [] [] [] [] | - tar | [] | - texinfo | [] [] [] | - textutils | [] [] [] | - tin | () () | - tp-robot | [] | - tuxpaint | [] [] [] [] [] | - unicode-han-tra... | | - unicode-transla... | | - util-linux | [] [] [] [] | - vorbis-tools | [] [] [] [] | - wastesedge | () | - wdiff | [] [] [] [] | - wget | [] [] | - xchat | [] [] [] [] [] [] | - xkeyboard-config | | - xpad | [] [] | - +----------------------------------------------------+ - af am ar az be bg bs ca cs cy da de el en en_GB eo - 10 0 1 2 9 22 1 42 41 2 60 95 16 1 17 16 - - es et eu fa fi fr ga gl gu he hi hr hu id is it - +--------------------------------------------------+ - GNUnet | | - a2ps | [] [] [] () | - aegis | | - ant-phone | [] | - anubis | [] | - ap-utils | [] [] | - aspell | [] [] [] | - bash | [] [] [] | - batchelor | [] [] | - bfd | [] | - bibshelf | [] [] [] | - binutils | [] [] [] | - bison | [] [] [] [] [] [] | - bison-runtime | [] [] [] [] [] | - bluez-pin | [] [] [] [] [] | - cflow | [] | - clisp | [] [] | - console-tools | | - coreutils | [] [] [] [] [] [] | - cpio | [] [] [] | - cpplib | [] [] | - cryptonit | [] | - darkstat | [] () [] [] [] | - dialog | [] [] [] [] [] [] [] [] | - diffutils | [] [] [] [] [] [] [] [] [] | - doodle | [] [] | - e2fsprogs | [] [] [] | - enscript | [] [] [] | - error | [] [] [] [] [] | - fetchmail | [] | - fileutils | [] [] [] [] [] [] | - findutils | [] [] [] [] | - flex | [] [] [] | - fslint | [] | - gas | [] [] | - gawk | [] [] [] [] | - gbiff | [] | - gcal | [] [] | - gcc | [] | - gettext-examples | [] [] [] [] [] [] | - gettext-runtime | [] [] [] [] [] [] | - gettext-tools | [] [] [] | - gimp-print | [] [] | - gip | [] [] [] | - gliv | () | - glunarclock | [] [] [] | - gmult | [] [] [] | - gnubiff | () () | - gnucash | () () () | - gnucash-glossary | [] [] | - gnuedu | [] | - gnulib | [] [] [] [] [] [] [] [] | - gnunet-gtk | | - gnutls | | - gpe-aerial | [] [] | - gpe-beam | [] [] | - gpe-calendar | | - gpe-clock | [] [] [] [] | - gpe-conf | [] | - gpe-contacts | [] [] | - gpe-edit | [] [] [] [] | - gpe-filemanager | [] | - gpe-go | [] [] [] | - gpe-login | [] [] [] | - gpe-ownerinfo | [] [] [] [] [] | - gpe-package | [] | - gpe-sketchbook | [] [] | - gpe-su | [] [] [] [] | - gpe-taskmanager | [] [] [] | - gpe-timesheet | [] [] [] [] | - gpe-today | [] [] [] [] | - gpe-todo | [] | - gphoto2 | [] [] [] [] [] | - gprof | [] [] [] [] | - gpsdrive | () () [] () | - gramadoir | [] [] | - grep | [] [] [] [] [] [] [] [] [] [] [] [] | - gretl | [] [] [] | - gsasl | [] [] | - gss | [] | - gst-plugins | [] [] [] | - gst-plugins-base | [] [] | - gst-plugins-good | [] [] [] | - gstreamer | [] [] [] | - gtick | [] | - gtkam | [] [] [] [] | - gtkorphan | [] [] | - gtkspell | [] [] [] [] [] [] | - gutenprint | [] | - hello | [] [] [] [] [] [] [] [] [] [] [] [] [] | - id-utils | [] [] [] [] [] | - impost | [] [] | - indent | [] [] [] [] [] [] [] [] [] [] | - iso_3166 | [] [] [] | - iso_3166_2 | [] | - iso_4217 | [] [] [] [] | - iso_639 | [] [] [] [] [] | - jpilot | [] [] | - jtag | [] | - jwhois | [] [] [] [] [] | - kbd | [] [] | - keytouch | [] | - keytouch-editor | [] | - keytouch-keyboa... | [] | - latrine | [] [] [] | - ld | [] [] | - leafpad | [] [] [] [] [] [] | - libc | [] [] [] [] [] | - libexif | [] | - libextractor | [] | - libgpewidget | [] [] [] [] [] | - libgpg-error | | - libgphoto2 | [] [] [] | - libgphoto2_port | [] [] | - libgsasl | [] [] | - libiconv | [] [] | - libidn | [] [] | - lifelines | () | - lilypond | [] | - lingoteach | [] [] [] | - lynx | [] [] [] | - m4 | [] [] [] [] | - mailutils | [] [] | - make | [] [] [] [] [] [] [] [] | - man-db | () | - minicom | [] [] [] [] | - mysecretdiary | [] [] [] | - nano | [] [] [] [] [] [] | - nano_1_0 | [] [] [] [] [] | - opcodes | [] [] [] [] | - parted | [] [] [] [] | - pilot-qof | | - psmisc | [] [] [] | - pwdutils | | - python | | - qof | [] | - radius | [] [] | - recode | [] [] [] [] [] [] [] [] | - rpm | [] [] | - screem | | - scrollkeeper | [] [] [] | - sed | [] [] [] [] [] | - sh-utils | [] [] [] [] [] [] [] | - shared-mime-info | [] [] [] [] [] [] | - sharutils | [] [] [] [] [] [] [] [] | - shishi | | - silky | [] | - skencil | [] [] | - sketch | [] [] | - solfege | [] | - soundtracker | [] [] [] | - sp | [] | - stardict | [] | - system-tools-ba... | [] [] [] [] [] [] [] [] | - tar | [] [] [] [] [] [] [] | - texinfo | [] [] | - textutils | [] [] [] [] [] | - tin | [] () | - tp-robot | [] [] [] [] | - tuxpaint | [] [] | - unicode-han-tra... | | - unicode-transla... | [] [] | - util-linux | [] [] [] [] [] [] [] | - vorbis-tools | [] [] | - wastesedge | () | - wdiff | [] [] [] [] [] [] [] [] | - wget | [] [] [] [] [] [] [] [] | - xchat | [] [] [] [] [] [] [] [] | - xkeyboard-config | [] [] [] [] | - xpad | [] [] [] | - +--------------------------------------------------+ - es et eu fa fi fr ga gl gu he hi hr hu id is it - 88 22 14 2 40 115 61 14 1 8 1 6 59 31 0 52 - - ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no - +-------------------------------------------------+ - GNUnet | | - a2ps | () [] [] () | - aegis | () | - ant-phone | [] | - anubis | [] [] [] | - ap-utils | [] | - aspell | [] [] | - bash | [] | - batchelor | [] [] | - bfd | | - bibshelf | [] | - binutils | | - bison | [] [] [] | - bison-runtime | [] [] [] | - bluez-pin | [] [] [] | - cflow | | - clisp | [] | - console-tools | | - coreutils | [] | - cpio | | - cpplib | [] | - cryptonit | [] | - darkstat | [] [] | - dialog | [] [] | - diffutils | [] [] [] | - doodle | | - e2fsprogs | [] | - enscript | [] | - error | [] | - fetchmail | [] [] | - fileutils | [] [] | - findutils | [] | - flex | [] [] | - fslint | [] [] | - gas | | - gawk | [] [] | - gbiff | [] | - gcal | | - gcc | | - gettext-examples | [] [] | - gettext-runtime | [] [] [] | - gettext-tools | [] [] | - gimp-print | [] [] | - gip | [] [] | - gliv | [] | - glunarclock | [] [] | - gmult | [] [] | - gnubiff | | - gnucash | () () | - gnucash-glossary | [] | - gnuedu | | - gnulib | [] [] [] [] | - gnunet-gtk | | - gnutls | | - gpe-aerial | [] | - gpe-beam | [] | - gpe-calendar | [] | - gpe-clock | [] [] [] | - gpe-conf | [] [] | - gpe-contacts | [] | - gpe-edit | [] [] [] | - gpe-filemanager | [] [] | - gpe-go | [] [] [] | - gpe-login | [] [] [] | - gpe-ownerinfo | [] [] | - gpe-package | [] [] | - gpe-sketchbook | [] [] | - gpe-su | [] [] [] | - gpe-taskmanager | [] [] [] [] | - gpe-timesheet | [] | - gpe-today | [] [] | - gpe-todo | [] | - gphoto2 | [] [] | - gprof | | - gpsdrive | () () () | - gramadoir | () | - grep | [] [] [] [] | - gretl | | - gsasl | [] | - gss | | - gst-plugins | [] | - gst-plugins-base | | - gst-plugins-good | [] | - gstreamer | [] | - gtick | | - gtkam | [] | - gtkorphan | [] | - gtkspell | [] [] | - gutenprint | | - hello | [] [] [] [] [] [] | - id-utils | [] | - impost | | - indent | [] [] | - iso_3166 | [] | - iso_3166_2 | [] | - iso_4217 | [] [] [] | - iso_639 | [] [] | - jpilot | () () () | - jtag | | - jwhois | [] | - kbd | [] | - keytouch | [] | - keytouch-editor | | - keytouch-keyboa... | | - latrine | [] | - ld | | - leafpad | [] [] | - libc | [] [] [] [] [] | - libexif | | - libextractor | | - libgpewidget | [] | - libgpg-error | | - libgphoto2 | [] | - libgphoto2_port | [] | - libgsasl | [] | - libiconv | | - libidn | [] [] | - lifelines | [] | - lilypond | | - lingoteach | [] | - lynx | [] [] | - m4 | [] [] | - mailutils | | - make | [] [] [] | - man-db | () | - minicom | [] | - mysecretdiary | [] | - nano | [] [] [] | - nano_1_0 | [] [] [] | - opcodes | [] | - parted | [] [] | - pilot-qof | | - psmisc | [] [] [] | - pwdutils | | - python | | - qof | | - radius | | - recode | [] | - rpm | [] [] | - screem | [] | - scrollkeeper | [] [] [] [] | - sed | [] [] | - sh-utils | [] [] | - shared-mime-info | [] [] [] [] [] | - sharutils | [] [] | - shishi | | - silky | [] | - skencil | | - sketch | | - solfege | | - soundtracker | | - sp | () | - stardict | [] [] | - system-tools-ba... | [] [] [] [] | - tar | [] [] [] | - texinfo | [] [] [] | - textutils | [] [] [] | - tin | | - tp-robot | [] | - tuxpaint | [] | - unicode-han-tra... | | - unicode-transla... | | - util-linux | [] [] | - vorbis-tools | [] | - wastesedge | [] | - wdiff | [] [] | - wget | [] [] | - xchat | [] [] [] [] | - xkeyboard-config | [] | - xpad | [] [] [] | - +-------------------------------------------------+ - ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no - 52 24 2 2 1 3 0 2 3 21 0 15 1 97 5 1 - - nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta - +------------------------------------------------------+ - GNUnet | | - a2ps | () [] [] [] [] [] [] | - aegis | () () | - ant-phone | [] [] | - anubis | [] [] [] | - ap-utils | () | - aspell | [] [] | - bash | [] [] [] | - batchelor | [] [] | - bfd | | - bibshelf | [] | - binutils | [] [] | - bison | [] [] [] [] [] | - bison-runtime | [] [] [] [] | - bluez-pin | [] [] [] [] [] [] [] [] [] | - cflow | [] | - clisp | [] | - console-tools | [] | - coreutils | [] [] [] [] | - cpio | [] [] [] | - cpplib | [] | - cryptonit | [] [] | - darkstat | [] [] [] [] [] [] | - dialog | [] [] [] [] [] [] [] [] [] | - diffutils | [] [] [] [] [] [] | - doodle | [] [] | - e2fsprogs | [] [] | - enscript | [] [] [] [] [] | - error | [] [] [] [] | - fetchmail | [] [] [] | - fileutils | [] [] [] [] [] | - findutils | [] [] [] [] [] [] | - flex | [] [] [] [] [] | - fslint | [] [] [] [] | - gas | | - gawk | [] [] [] [] | - gbiff | [] | - gcal | [] | - gcc | [] | - gettext-examples | [] [] [] [] [] [] [] [] | - gettext-runtime | [] [] [] [] [] [] [] [] | - gettext-tools | [] [] [] [] [] [] [] | - gimp-print | [] [] | - gip | [] [] [] [] | - gliv | [] [] [] [] | - glunarclock | [] [] [] [] [] [] | - gmult | [] [] [] [] | - gnubiff | () | - gnucash | () [] | - gnucash-glossary | [] [] [] | - gnuedu | | - gnulib | [] [] [] [] [] | - gnunet-gtk | [] | - gnutls | [] [] | - gpe-aerial | [] [] [] [] [] [] [] | - gpe-beam | [] [] [] [] [] [] [] | - gpe-calendar | [] | - gpe-clock | [] [] [] [] [] [] [] [] | - gpe-conf | [] [] [] [] [] [] [] | - gpe-contacts | [] [] [] [] [] | - gpe-edit | [] [] [] [] [] [] [] [] | - gpe-filemanager | [] [] | - gpe-go | [] [] [] [] [] [] | - gpe-login | [] [] [] [] [] [] [] [] | - gpe-ownerinfo | [] [] [] [] [] [] [] [] | - gpe-package | [] [] | - gpe-sketchbook | [] [] [] [] [] [] [] [] | - gpe-su | [] [] [] [] [] [] [] [] | - gpe-taskmanager | [] [] [] [] [] [] [] [] | - gpe-timesheet | [] [] [] [] [] [] [] [] | - gpe-today | [] [] [] [] [] [] [] [] | - gpe-todo | [] [] [] [] | - gphoto2 | [] [] [] [] [] | - gprof | [] [] [] | - gpsdrive | [] [] [] | - gramadoir | [] [] | - grep | [] [] [] [] [] [] [] [] | - gretl | [] | - gsasl | [] [] [] | - gss | [] [] [] | - gst-plugins | [] [] [] [] | - gst-plugins-base | [] | - gst-plugins-good | [] [] [] [] | - gstreamer | [] [] [] | - gtick | [] | - gtkam | [] [] [] [] | - gtkorphan | [] | - gtkspell | [] [] [] [] [] [] [] [] | - gutenprint | [] | - hello | [] [] [] [] [] [] [] [] | - id-utils | [] [] [] [] | - impost | [] | - indent | [] [] [] [] [] [] | - iso_3166 | [] [] [] [] [] [] | - iso_3166_2 | | - iso_4217 | [] [] [] [] | - iso_639 | [] [] [] [] | - jpilot | | - jtag | [] | - jwhois | [] [] [] [] | - kbd | [] [] [] | - keytouch | [] | - keytouch-editor | [] | - keytouch-keyboa... | [] | - latrine | [] [] | - ld | [] | - leafpad | [] [] [] [] [] [] | - libc | [] [] [] [] [] | - libexif | [] | - libextractor | [] [] | - libgpewidget | [] [] [] [] [] [] [] | - libgpg-error | [] [] | - libgphoto2 | [] | - libgphoto2_port | [] [] [] | - libgsasl | [] [] [] [] | - libiconv | [] [] | - libidn | [] [] () | - lifelines | [] [] | - lilypond | | - lingoteach | [] | - lynx | [] [] [] | - m4 | [] [] [] [] [] | - mailutils | [] [] [] [] | - make | [] [] [] [] | - man-db | [] [] | - minicom | [] [] [] [] [] | - mysecretdiary | [] [] [] [] | - nano | [] [] [] | - nano_1_0 | [] [] [] [] | - opcodes | [] [] | - parted | [] | - pilot-qof | [] | - psmisc | [] [] | - pwdutils | [] [] | - python | | - qof | [] [] | - radius | [] [] | - recode | [] [] [] [] [] [] [] | - rpm | [] [] [] [] | - screem | | - scrollkeeper | [] [] [] [] [] [] [] | - sed | [] [] [] [] [] [] [] [] [] | - sh-utils | [] [] [] | - shared-mime-info | [] [] [] [] [] | - sharutils | [] [] [] [] | - shishi | [] | - silky | [] | - skencil | [] [] [] | - sketch | [] [] [] | - solfege | [] | - soundtracker | [] [] | - sp | | - stardict | [] [] [] | - system-tools-ba... | [] [] [] [] [] [] [] [] [] | - tar | [] [] [] [] [] | - texinfo | [] [] [] [] | - textutils | [] [] [] | - tin | () | - tp-robot | [] | - tuxpaint | [] [] [] [] [] | - unicode-han-tra... | | - unicode-transla... | | - util-linux | [] [] [] [] | - vorbis-tools | [] [] | - wastesedge | | - wdiff | [] [] [] [] [] [] | - wget | [] [] [] [] | - xchat | [] [] [] [] [] [] [] | - xkeyboard-config | [] [] | - xpad | [] [] [] | - +------------------------------------------------------+ - nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta - 0 2 3 58 30 54 5 73 72 4 40 46 11 50 128 2 - - tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu - +---------------------------------------------------+ - GNUnet | [] | 2 - a2ps | [] [] [] | 19 - aegis | | 0 - ant-phone | [] [] | 6 - anubis | [] [] [] | 11 - ap-utils | () [] | 4 - aspell | [] [] [] | 15 - bash | [] | 11 - batchelor | [] [] | 9 - bfd | | 1 - bibshelf | [] | 7 - binutils | [] [] [] | 9 - bison | [] [] [] | 19 - bison-runtime | [] [] [] | 15 - bluez-pin | [] [] [] [] [] [] | 28 - cflow | [] [] | 5 - clisp | | 6 - console-tools | [] [] | 5 - coreutils | [] [] | 16 - cpio | [] [] [] | 9 - cpplib | [] [] [] [] | 11 - cryptonit | | 5 - darkstat | [] () () | 15 - dialog | [] [] [] [] [] | 30 - diffutils | [] [] [] [] | 28 - doodle | [] | 6 - e2fsprogs | [] [] | 10 - enscript | [] [] [] | 16 - error | [] [] [] [] | 18 - fetchmail | [] [] | 12 - fileutils | [] [] [] | 18 - findutils | [] [] [] | 17 - flex | [] [] | 15 - fslint | [] | 9 - gas | [] | 3 - gawk | [] [] | 15 - gbiff | [] | 5 - gcal | [] | 5 - gcc | [] [] [] | 6 - gettext-examples | [] [] [] [] [] [] | 27 - gettext-runtime | [] [] [] [] [] [] | 28 - gettext-tools | [] [] [] [] [] | 19 - gimp-print | [] [] | 12 - gip | [] [] | 12 - gliv | [] [] | 8 - glunarclock | [] [] [] | 15 - gmult | [] [] [] [] | 15 - gnubiff | [] | 1 - gnucash | () | 2 - gnucash-glossary | [] [] | 9 - gnuedu | [] | 2 - gnulib | [] [] [] [] [] | 28 - gnunet-gtk | | 1 - gnutls | | 2 - gpe-aerial | [] [] | 14 - gpe-beam | [] [] | 14 - gpe-calendar | [] | 3 - gpe-clock | [] [] [] [] | 21 - gpe-conf | [] [] | 14 - gpe-contacts | [] [] | 10 - gpe-edit | [] [] [] [] | 20 - gpe-filemanager | [] | 6 - gpe-go | [] [] | 15 - gpe-login | [] [] [] [] [] | 21 - gpe-ownerinfo | [] [] [] [] | 21 - gpe-package | [] | 6 - gpe-sketchbook | [] [] | 16 - gpe-su | [] [] [] | 20 - gpe-taskmanager | [] [] [] | 20 - gpe-timesheet | [] [] [] [] | 18 - gpe-today | [] [] [] [] [] | 21 - gpe-todo | [] | 7 - gphoto2 | [] [] [] [] | 20 - gprof | [] [] | 11 - gpsdrive | | 4 - gramadoir | [] | 7 - grep | [] [] [] [] | 34 - gretl | | 4 - gsasl | [] [] | 8 - gss | [] | 5 - gst-plugins | [] [] [] | 15 - gst-plugins-base | [] [] [] | 9 - gst-plugins-good | [] [] [] [] [] | 20 - gstreamer | [] [] [] | 17 - gtick | [] | 3 - gtkam | [] | 13 - gtkorphan | [] | 7 - gtkspell | [] [] [] [] [] [] | 26 - gutenprint | | 3 - hello | [] [] [] [] [] | 37 - id-utils | [] [] | 14 - impost | [] | 4 - indent | [] [] [] [] | 25 - iso_3166 | [] [] [] [] | 16 - iso_3166_2 | | 2 - iso_4217 | [] [] | 14 - iso_639 | [] | 14 - jpilot | [] [] [] [] | 7 - jtag | [] | 3 - jwhois | [] [] [] | 13 - kbd | [] [] | 12 - keytouch | [] | 4 - keytouch-editor | | 2 - keytouch-keyboa... | [] | 3 - latrine | [] [] | 8 - ld | [] [] [] [] | 8 - leafpad | [] [] [] [] | 23 - libc | [] [] [] | 23 - libexif | [] | 4 - libextractor | [] | 5 - libgpewidget | [] [] [] | 19 - libgpg-error | [] | 4 - libgphoto2 | [] | 8 - libgphoto2_port | [] [] [] | 11 - libgsasl | [] | 8 - libiconv | [] | 7 - libidn | [] [] | 10 - lifelines | | 4 - lilypond | | 2 - lingoteach | [] | 6 - lynx | [] [] [] | 15 - m4 | [] [] [] | 18 - mailutils | [] | 8 - make | [] [] [] | 20 - man-db | [] | 6 - minicom | [] | 14 - mysecretdiary | [] [] | 12 - nano | [] [] | 17 - nano_1_0 | [] [] [] | 18 - opcodes | [] [] | 10 - parted | [] [] [] | 10 - pilot-qof | [] | 3 - psmisc | [] | 10 - pwdutils | [] | 3 - python | | 0 - qof | [] | 4 - radius | [] | 6 - recode | [] [] [] | 25 - rpm | [] [] [] [] | 14 - screem | [] | 2 - scrollkeeper | [] [] [] [] | 26 - sed | [] [] [] | 22 - sh-utils | [] | 15 - shared-mime-info | [] [] [] [] | 24 - sharutils | [] [] [] | 23 - shishi | | 1 - silky | [] | 4 - skencil | [] | 7 - sketch | | 6 - solfege | | 2 - soundtracker | [] [] | 9 - sp | [] | 3 - stardict | [] [] [] [] | 11 - system-tools-ba... | [] [] [] [] [] [] [] | 37 - tar | [] [] [] [] | 20 - texinfo | [] [] [] | 15 - textutils | [] [] [] | 17 - tin | | 1 - tp-robot | [] [] [] | 10 - tuxpaint | [] [] [] | 16 - unicode-han-tra... | | 0 - unicode-transla... | | 2 - util-linux | [] [] [] | 20 - vorbis-tools | [] [] | 11 - wastesedge | | 1 - wdiff | [] [] | 22 - wget | [] [] [] | 19 - xchat | [] [] [] [] | 29 - xkeyboard-config | [] [] [] [] | 11 - xpad | [] [] [] | 14 - +---------------------------------------------------+ - 77 teams tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu - 170 domains 0 1 1 77 39 0 136 10 1 48 5 54 0 2028 - - Some counters in the preceding matrix are higher than the number of -visible blocks let us expect. This is because a few extra PO files are -used for implementing regional variants of languages, or language -dialects. - - For a PO file in the matrix above to be effective, the package to -which it applies should also have been internationalized and -distributed as such by its maintainer. There might be an observable -lag between the mere existence a PO file and its wide availability in a -distribution. - - If October 2006 seems to be old, you may fetch a more recent copy of -this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date -matrix with full percentage details can be found at -`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. - -1.6 Using `gettext' in new packages -=================================== - -If you are writing a freely available program and want to -internationalize it you are welcome to use GNU `gettext' in your -package. Of course you have to respect the GNU Library General Public -License which covers the use of the GNU `gettext' library. This means -in particular that even non-free programs can use `libintl' as a shared -library, whereas only free software can use `libintl' as a static -library or use modified versions of `libintl'. - - Once the sources are changed appropriately and the setup can handle -the use of `gettext' the only thing missing are the translations. The -Free Translation Project is also available for packages which are not -developed inside the GNU project. Therefore the information given above -applies also for every other Free Software Project. Contact -`translation@iro.umontreal.ca' to make the `.pot' files available to -the translation teams. - diff --git a/Build/source/utils/xz-4.999.9beta/AUTHORS b/Build/source/utils/xz-4.999.9beta/AUTHORS deleted file mode 100644 index 63a9815bc03..00000000000 --- a/Build/source/utils/xz-4.999.9beta/AUTHORS +++ /dev/null @@ -1,27 +0,0 @@ - -Authors of XZ Utils -=================== - - XZ Utils is developed and maintained by Lasse Collin - . - - Major parts of liblzma are based on code written by Igor Pavlov, - specifically the LZMA SDK . Without - this code, XZ Utils wouldn't exist. - - The SHA-256 implementation in liblzma is based on the code found from - 7-Zip , which has a modified version of the SHA-256 - code found from Crypto++ . The SHA-256 code - in Crypto++ was written by Kevin Springle and Wei Dai. - - Some scripts have been adapted from gzip. The original versions - were written by Jean-loup Gailly, Charles Levert, and Paul Eggert. - Andrew Dudman helped adapting the script and their man pages for - XZ Utils. - - The GNU Autotools based build system contains files from many authors, - which I'm not trying list here. - - Several people have contributed fixes or reported bugs. Most of them - are mentioned in the file THANKS. - diff --git a/Build/source/utils/xz-4.999.9beta/COPYING b/Build/source/utils/xz-4.999.9beta/COPYING deleted file mode 100644 index 43c90d0598c..00000000000 --- a/Build/source/utils/xz-4.999.9beta/COPYING +++ /dev/null @@ -1,65 +0,0 @@ - -XZ Utils Licensing -================== - - Different licenses apply to different files in this package. Here - is a rough summary of which licenses apply to which parts of this - package (but check the individual files to be sure!): - - - liblzma is in the public domain. - - - xz, xzdec, and lzmadec command line tools are in the public - domain unless GNU getopt_long had to be compiled and linked - in from the lib directory. The getopt_long code is under - GNU LGPLv2.1+. - - - The scripts to grep, diff, and view compressed files have been - adapted from gzip. These scripts and their documentation are - under GNU GPLv2+. - - - All the documentation in the doc directory and most of the - XZ Utils specific documentation files in other directories - are in the public domain. - - - Translated messages are in the public domain. - - - The build system contains public domain files, and files that - are under GNU GPLv2+ or GNU GPLv3+. None of these files end up - in the binaries being built. - - - Test files and test code in the tests directory, and debugging - utilities in the debug directory are in the public domain. - - - The extra directory may contain public domain files, and files - that are under various free software licenses. - - You can do whatever you want with the files that have been put into - the public domain. If you find public domain legally problematic, - take the previous sentence as a license grant. If you still find - the lack of copyright legally problematic, you have too many - lawyers. - - As usual, this software is provided "as is", without any warranty. - - If you copy significant amounts of public domain code from XZ Utils - into your project, acknowledging this somewhere in your software is - polite (especially if it is proprietary, non-free software), but - naturally it is not legally required. Here is an example of a good - notice to put into "about box" or into documentation: - - This software includes code from XZ Utils . - - The following license texts are included in the following files: - - COPYING.LGPLv2.1: GNU Lesser General Public License version 2.1 - - COPYING.GPLv2: GNU General Public License version 2 - - COPYING.GPLv3: GNU General Public License version 3 - - Note that the toolchain (compiler, linker etc.) may add some code - pieces that are copyrighted. Thus, it is possible that e.g. liblzma - binary wouldn't actually be in the public domain in its entirety - even though it contains no copyrighted code from the XZ Utils source - package. - - If you have questions, don't hesitate to ask the author(s) for more - information. - diff --git a/Build/source/utils/xz-4.999.9beta/COPYING.GPLv2 b/Build/source/utils/xz-4.999.9beta/COPYING.GPLv2 deleted file mode 100644 index d511905c164..00000000000 --- a/Build/source/utils/xz-4.999.9beta/COPYING.GPLv2 +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/Build/source/utils/xz-4.999.9beta/COPYING.GPLv3 b/Build/source/utils/xz-4.999.9beta/COPYING.GPLv3 deleted file mode 100644 index 94a9ed024d3..00000000000 --- a/Build/source/utils/xz-4.999.9beta/COPYING.GPLv3 +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 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. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/Build/source/utils/xz-4.999.9beta/COPYING.LGPLv2.1 b/Build/source/utils/xz-4.999.9beta/COPYING.LGPLv2.1 deleted file mode 100644 index 5ab7695ab8c..00000000000 --- a/Build/source/utils/xz-4.999.9beta/COPYING.LGPLv2.1 +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/Build/source/utils/xz-4.999.9beta/ChangeLog b/Build/source/utils/xz-4.999.9beta/ChangeLog deleted file mode 100644 index 15102ef62eb..00000000000 --- a/Build/source/utils/xz-4.999.9beta/ChangeLog +++ /dev/null @@ -1,7041 +0,0 @@ -commit 682efdc1f9492fdd76c9ce82e7c00ca0768067e8 -Author: Lasse Collin -Date: 2009-08-27 18:36:59 +0300 - - "make dist" fixes - - Makefile.am | 13 ++++++------- - 1 files changed, 6 insertions(+), 7 deletions(-) - -commit c8c184db1c95bf70f78256ec6237845a57f342af -Author: Lasse Collin -Date: 2009-08-27 17:08:33 +0300 - - Update xz man page date. - - src/xz/xz.1 | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 9756fce565e98b8fa5fe6ead296d84e7601ec254 -Author: Lasse Collin -Date: 2009-08-27 17:00:22 +0300 - - Fix the debug directory. - - 6a2eb54092fc625d59921a607ff68cd1a90aa898 and - 71f18e8a066a01dda0c8e5508b135ef104e43e4c required - some changes that weren't applied in debug. - - debug/Makefile.am | 5 +++-- - debug/full_flush.c | 1 + - debug/known_sizes.c | 1 + - debug/memusage.c | 1 + - debug/sync_flush.c | 1 + - 5 files changed, 7 insertions(+), 2 deletions(-) - -commit 77007a7fb20187fcf3d1dd9839c79ace2d63f2ea -Author: Lasse Collin -Date: 2009-08-27 16:36:40 +0300 - - Add missing files to EXTRA_DIST. - - Makefile.am | 11 +++++++---- - 1 files changed, 7 insertions(+), 4 deletions(-) - -commit 04dcbfdeb921e5f361a4487134e91e23fffbe09d -Author: Lasse Collin -Date: 2009-08-27 16:21:22 +0300 - - Bumped version to 4.999.9beta. - - src/liblzma/api/lzma/version.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit fd7618611a22f42a6913bc8d518c9bbc9252d6b4 -Author: Lasse Collin -Date: 2009-08-27 16:17:47 +0300 - - Updated THANKS. - - THANKS | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit c29e76c0f910fca0a90a50b78d337f6c32623e9d -Author: Lasse Collin -Date: 2009-08-27 16:12:52 +0300 - - .xz file format specification 1.0.4 (probably). - - Thanks to Christian von Roques, Peter Lawler, - and Jim Meyering for the fixes. - - doc/xz-file-format.txt | 26 +++++++++++++++----------- - 1 files changed, 15 insertions(+), 11 deletions(-) - -commit 696d7ee3953beaf4f0ed18e78917ccf300431966 -Author: Lasse Collin -Date: 2009-08-27 15:43:54 +0300 - - Require GNU libtool 2.2. - - configure.ac | 13 +++---------- - 1 files changed, 3 insertions(+), 10 deletions(-) - -commit 4c3558aa8305a8f8b6c43b8569eb539717ca9e8d -Author: Lasse Collin -Date: 2009-08-27 15:34:45 +0300 - - Add "dos" to EXTRA_DIST. - - Makefile.am | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 35b29e4424ced5a3ababf132283e519080c7b298 -Author: Lasse Collin -Date: 2009-08-27 15:23:27 +0300 - - Updated TODO. - - TODO | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit 23414377192c21f3f34c84cdfe0ef0fbd06a1dea -Author: Lasse Collin -Date: 2009-08-27 15:17:00 +0300 - - Some xz man page improvements. - - src/xz/xz.1 | 78 ++++++++++++++++++++++++++++++++++++++++++++++------------ - 1 files changed, 62 insertions(+), 16 deletions(-) - -commit 371b04e19fc9051dbaeec51ec0badec6a1f0699d -Author: Lasse Collin -Date: 2009-08-27 10:41:01 +0300 - - Removed doc/bugs.txt. - - doc/bugs.txt | 46 ---------------------------------------------- - 1 files changed, 0 insertions(+), 46 deletions(-) - -commit d88c4072b36d3a76f839185799fb1d91037a1b81 -Author: Lasse Collin -Date: 2009-08-27 10:40:25 +0300 - - Updated README. - - It now includes bug reporting instructions/tips. - - README | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- - 1 files changed, 55 insertions(+), 10 deletions(-) - -commit 92e536d8b8d33a6b12d0802bcd7be4437046f13e -Author: Lasse Collin -Date: 2009-08-27 10:21:18 +0300 - - Fix a typo in FAQ. - - Thanks to Jim Meyering. - - (From now on, I try to always remember to put - the relevant thanks to commit messages.) - - doc/faq.txt | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 3e2ba8b58585743e59251e69ad2783eb08357079 -Author: Lasse Collin -Date: 2009-08-27 10:13:46 +0300 - - Updates to liblzma API headers. - - Added lzma_nothrow for every function. It adds - throw() when the header is used in C++ code. - - Some lzma_attrs were added or removed. - - Lots of comments were improved. - - src/liblzma/api/lzma.h | 20 +++++++ - src/liblzma/api/lzma/base.h | 48 +++++++++-------- - src/liblzma/api/lzma/block.h | 38 +++++++------- - src/liblzma/api/lzma/check.h | 22 ++++---- - src/liblzma/api/lzma/container.h | 36 +++++++------ - src/liblzma/api/lzma/filter.h | 81 ++++++++++++++++++----------- - src/liblzma/api/lzma/index.h | 97 +++++++++++++++++++++-------------- - src/liblzma/api/lzma/index_hash.h | 14 +++-- - src/liblzma/api/lzma/lzma.h | 87 ++++++++++++++++--------------- - src/liblzma/api/lzma/stream_flags.h | 12 ++-- - src/liblzma/api/lzma/version.h | 10 ++-- - src/liblzma/api/lzma/vli.h | 7 ++- - 12 files changed, 275 insertions(+), 197 deletions(-) - -commit 8e8ebc17c535a1f8846718059b48417409c37050 -Author: Lasse Collin -Date: 2009-08-18 00:30:09 +0300 - - Install faq.txt. - - Makefile.am | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit b198e770a146e4a41f91a93f0b233713f2515848 -Author: Lasse Collin -Date: 2009-08-18 00:26:48 +0300 - - Updated faq.txt. - - Some questions worth answering were removed, because I - currently don't have good up to date answers to them. - - doc/faq.txt | 239 ++++++++++++++++++----------------------------------------- - 1 files changed, 73 insertions(+), 166 deletions(-) - -commit fe111a25cd788d31b581996e4533910388a7f0a9 -Author: Lasse Collin -Date: 2009-08-17 22:45:50 +0300 - - Some xz man changes. - - src/xz/xz.1 | 88 +++++++++++++++++++++++++++++------------------------------ - 1 files changed, 43 insertions(+), 45 deletions(-) - -commit 10242a21e9abda0c5c6a03501703cc40b8a699a5 -Author: Lasse Collin -Date: 2009-08-16 22:15:42 +0300 - - Updated THANKS. - - THANKS | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 3ce1916c83041113b9cad9ead5c97a527cf8aa1d -Author: Lasse Collin -Date: 2009-08-16 22:15:13 +0300 - - Fix data corruption in LZ/LZMA2 encoder. - - Thanks to Jonathan Stott for the bug report. - - src/liblzma/lz/lz_encoder.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 66da129c8ec33dd66acc92f113f7c1ca740ca81a -Author: Lasse Collin -Date: 2009-08-13 15:15:37 +0300 - - Updated INSTALL and PACKAGERS to match the changes - made in --enable-dynamic. - - INSTALL | 20 ++++++++++++++++---- - PACKAGERS | 11 ++++++----- - 2 files changed, 22 insertions(+), 9 deletions(-) - -commit 8238c4b2402f952c4e492e5b778aa272e57b6705 -Author: Lasse Collin -Date: 2009-08-13 15:03:46 +0300 - - Link lzmainfo against shared liblzma by default. - - src/lzmainfo/Makefile.am | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 71f18e8a066a01dda0c8e5508b135ef104e43e4c -Author: Lasse Collin -Date: 2009-08-13 15:00:21 +0300 - - Make --enable-dynamic a tristate option. - - Some programs will by default be linked against static - liblzma and some against shared liblzma. --enable-dynamic - now allows overriding the default to both directions - (all dynamic or all static) even when building both - shared and static liblzma. - - This is quite messy compared to how simple thing it is supposed - to be. The complexity is mostly due to Windows support. - - configure.ac | 77 +++++++++++++++++++++++++++++++++++++++++++--------------- - 1 files changed, 57 insertions(+), 20 deletions(-) - -commit 5aa4678b2342dcfc1d2b31aa9fa4f39c539e4b61 -Author: Lasse Collin -Date: 2009-08-13 12:56:47 +0300 - - Fix xz Makefile.am for the man page. - - install-exec-hook -> install-data-hook - - src/xz/Makefile.am | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit e51b4e49e800bd84e6d589dca2964d3985e88139 -Author: Lasse Collin -Date: 2009-08-13 12:55:45 +0300 - - Add lzmainfo for backward compatibility with LZMA Utils. - - lzmainfo now links against static liblzma. In contrast - to other command line tools in XZ Utils, linking lzmainfo - against static liblzma by default is dumb. This will be - fixed once I have fixed some related issues in configure.ac. - - configure.ac | 1 + - src/Makefile.am | 2 +- - src/lzmainfo/Makefile.am | 29 ++++++ - src/lzmainfo/lzmainfo.1 | 55 +++++++++++ - src/lzmainfo/lzmainfo.c | 242 ++++++++++++++++++++++++++++++++++++++++++++++ - 5 files changed, 328 insertions(+), 1 deletions(-) - -commit a4165d0584376d948c213ec93c6065d24ff6a5e7 -Author: Lasse Collin -Date: 2009-08-13 12:42:36 +0300 - - Sync some error messages from xz to xzdec. - - Make xz error message translation usable outside - xz (at least in upcoming lzmainfo). - - src/xz/main.c | 4 ++-- - src/xzdec/xzdec.c | 6 +++--- - 2 files changed, 5 insertions(+), 5 deletions(-) - -commit df636eb4e066b4e154ce8e66e82c87ba1db652a6 -Author: Lasse Collin -Date: 2009-08-13 09:37:21 +0300 - - Add xz man page to manfiles in toplevel Makefile.am. - - Makefile.am | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 180bdf58ea5bb07941e0a99b304d9aa832198748 -Author: Lasse Collin -Date: 2009-08-13 09:37:01 +0300 - - Fix first line of xz man page. - - src/xz/xz.1 | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit e1ce2291e759b50ebfcf7cbbcc04cd098f1705a4 -Author: Lasse Collin -Date: 2009-08-10 11:22:31 +0300 - - Added a rough version of the xz man page. - - src/xz/Makefile.am | 15 + - src/xz/xz.1 | 1206 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 1221 insertions(+), 0 deletions(-) - -commit e71903fc6101f1c039d702e335b08aad1e1b4100 -Author: Jonathan Nieder -Date: 2009-08-09 13:41:20 -0500 - - “xzdiff a.xz b.xz†always fails - - Attempts to compare two compressed files result in no output and - exit status 2. - - Instead of going to standard output, ‘diff’ output is being - captured in the xz_status variable along with the exit status from - the decompression commands. Later, when this variable is examined - for nonzero status codes, numerals from dates in the ‘diff’ output - make it appear as though decompression failed. - - So let the ‘diff’ output leak to standard output with another file - descriptor. (This trick is used in all similar contexts elsewhere - in xzdiff and in the analogous context in gzip’s zdiff script.) - - src/scripts/xzdiff.in | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 1d314b81aa5b0c4530638ffabd4e0edb52e5362c -Author: Jonathan Nieder -Date: 2009-08-09 13:22:12 -0500 - - xzless: Support compressed standard input - - It can be somewhat confusing that - - less < some_file.txt - - works fine, whereas - - xzless < some_file.txt.xz - - does not. Since version 429, ‘less’ allows a filter specified in - the LESSOPEN environment variable to preprocess its input even if - it comes from standard input, if $LESSOPEN begins with ‘|-’. So - set $LESSOPEN to take advantage of this feature. - - Check less’s version at runtime so xzless can continue to work - with older versions. - - src/scripts/xzless.in | 8 +++++++- - 1 files changed, 7 insertions(+), 1 deletions(-) - -commit a7f5d2fe4826ac68839d00059f05004fb81d5c69 -Author: Lasse Collin -Date: 2009-08-09 20:57:46 +0300 - - GPLv2+ not GPLv2 for Doxyfile.in is probably OK. - - Doxyfile.in | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit b735cde20cc14857136ae65a0e5d336ed7ddc862 -Author: Lasse Collin -Date: 2009-08-02 00:27:29 +0300 - - Added a copyright notice to Doxyfile.in since it contains - lots of comments from Doxygen. - - It seems that the Doxygen authors' intent is to not apply - their copyright on generated files, but since it doesn't - matter for XZ Utils at all, better safe than sorry. - - Doxyfile.in | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 0fd157cc008446adfc8f91394f5503868025a642 -Author: Lasse Collin -Date: 2009-08-02 00:11:37 +0300 - - Updated THANKS. - - THANKS | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit b198da96ff9ac8c89b466b4d196c5f3fe1c7904f -Author: Lasse Collin -Date: 2009-08-02 00:10:22 +0300 - - Updated TODO. - - TODO | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 669413bb2db954bbfde3c4542fddbbab53891eb4 -Author: Lasse Collin -Date: 2009-07-30 12:25:55 +0300 - - Updated THANKS. - - THANKS | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit dbbd8fb870ae789d96497911006c869d37148c15 -Author: Jonathan Nieder -Date: 2009-07-28 17:37:24 -0500 - - xzdiff: add missing ;; to case statement - - src/scripts/xzdiff.in | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit adbad2d16cb5909f85d4a429011005613ea62ffe -Author: Lasse Collin -Date: 2009-07-24 13:15:06 +0300 - - Added history.txt to doc_DATA. - - Makefile.am | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit e0236f12569eb36f9b81ce7a1e52e0f73698ac27 -Author: Lasse Collin -Date: 2009-07-24 12:00:40 +0300 - - Updated .gitignore files. - - .gitignore | 36 +++++++++++++++++++----------------- - po/.gitignore | 3 +++ - 2 files changed, 22 insertions(+), 17 deletions(-) - -commit 2f34fb269265e3aba43a2a9c734020a45268826d -Author: Lasse Collin -Date: 2009-07-24 11:34:02 +0300 - - Minor improvements to COPYING. - - COPYING | 11 ++++++++--- - 1 files changed, 8 insertions(+), 3 deletions(-) - -commit 0db1befcfbc120377df4b89923762f16d25f548a -Author: Lasse Collin -Date: 2009-07-23 19:10:55 +0300 - - Fix incorrect usage of getopt_long(), which caused - invalid memory access if XZ_OPT was defined. - - src/xz/args.c | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 8f8ec942d6d21ada2096eaf063411bc8bc7e2d48 -Author: Lasse Collin -Date: 2009-07-20 15:43:32 +0300 - - Avoid internal error with --format=xz --lzma1. - - src/xz/coder.c | 16 ++++++++++++---- - 1 files changed, 12 insertions(+), 4 deletions(-) - -commit 99f9e879a6a8bb54a65da99c12e0f390216c152a -Author: Lasse Collin -Date: 2009-07-19 13:14:20 +0300 - - Major documentation update. - - Installation and packaging instructions were added. - README and other generic docs were revised. - - Some of the documentation files are now installed to $docdir. - - AUTHORS | 35 ++++-- - ChangeLog | 7 +- - INSTALL | 327 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ - INSTALL.generic | 302 ++++++++++++++++++++++++++++++++++++++++++++++++++ - Makefile.am | 11 ++ - PACKAGERS | 278 ++++++++++++++++++++++++++++++++++++++++++++++ - README | 263 +++++++++++++++++++------------------------- - THANKS | 17 ++-- - 8 files changed, 1070 insertions(+), 170 deletions(-) - -commit ef4cf1851de89022cba5674784f1a8f6343c15b0 -Author: Lasse Collin -Date: 2009-07-19 11:09:31 +0300 - - Added missing author notice to xzless.in. - - src/scripts/xzless.in | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 4c9c989d45b188667799a7a1d6c728ed43f7bf77 -Author: Lasse Collin -Date: 2009-07-18 18:54:55 +0300 - - Use AC_CONFIG_AUX_DIR to clean up the toplevel directory - a little. - - Fixed a related bug in the toplevel Makefile.am. - - Added the build-aux directory to .gitignore. - - .gitignore | 1 + - Makefile.am | 1 - - configure.ac | 3 ++- - 3 files changed, 3 insertions(+), 2 deletions(-) - -commit 366e436090a7a87215e9bf0e3ddcd55f05b50587 -Author: Lasse Collin -Date: 2009-07-18 14:34:08 +0300 - - Updated the totally outdated TODO file. - - TODO | 117 +++++++++++++++-------------------------------------------------- - 1 files changed, 27 insertions(+), 90 deletions(-) - -commit 64e498c89d8b9966e8663f43bf64d47c26c55c62 -Author: Lasse Collin -Date: 2009-07-18 11:26:39 +0300 - - Added public domain notice into a few files. - - src/common/common_w32res.rc | 9 ++++++++- - src/liblzma/liblzma.pc.in | 7 +++++++ - src/liblzma/liblzma_w32res.rc | 7 +++++++ - src/xz/xz_w32res.rc | 7 +++++++ - src/xzdec/xzdec_w32res.rc | 7 +++++++ - 5 files changed, 36 insertions(+), 1 deletions(-) - -commit a35755c5de808df027675688855d1b621a4fb428 -Author: Lasse Collin -Date: 2009-07-14 21:10:36 +0300 - - Allow extra commas in filter-specific options on xz command line. - - This may slightly ease writing scripts that construct - filter-specific option strings dynamically. - - src/xz/options.c | 7 +++++++ - 1 files changed, 7 insertions(+), 0 deletions(-) - -commit 98f3cac1ad31191c5160a7e48398bf85141e941c -Author: Lasse Collin -Date: 2009-07-14 18:04:31 +0300 - - Accept --lzma2=preset=6e where "e" is equivalent to --extreme - when no custom chain is in use. - - src/xz/options.c | 80 +++++++++++++++++++++++++++++++++++++++-------------- - 1 files changed, 59 insertions(+), 21 deletions(-) - -commit d873a09e956363e54bf58c577c8f7e487b6fb464 -Author: Lasse Collin -Date: 2009-07-12 19:08:30 +0300 - - Add dist-hook to create ChangeLog from the commit log, - and to conver the man pages to PDF and plain text, which - may be convenient to those who cannot render man pages. - - Makefile.am | 31 +++++++++++++++++++++++++++++++ - 1 files changed, 31 insertions(+), 0 deletions(-) - -commit cd69a5a6c16c289f6f8e2823b03c72289472270f -Author: Lasse Collin -Date: 2009-07-10 11:39:38 +0300 - - BCJ filters: Reject invalid start offsets with LZMA_OPTIONS_ERROR. - - This is a quick and slightly dirty fix to make the code - conform to the latest file format specification. Without - this patch, it's possible to make corrupt files by - specifying start offset that is not a multiple of the - filter's alignment. Custom start offset is almost never - used, so this was only a minor bug. - - The xz command line tool doesn't validate the start offset, - so one will get a bit unclear error message if trying to use - an invalid start offset. - - src/liblzma/simple/arm.c | 2 +- - src/liblzma/simple/armthumb.c | 2 +- - src/liblzma/simple/ia64.c | 2 +- - src/liblzma/simple/powerpc.c | 2 +- - src/liblzma/simple/simple_coder.c | 5 ++++- - src/liblzma/simple/simple_private.h | 3 ++- - src/liblzma/simple/sparc.c | 2 +- - src/liblzma/simple/x86.c | 2 +- - 8 files changed, 12 insertions(+), 8 deletions(-) - -commit eed9953732b801f6c97317fb3160445a8754180b -Author: Lasse Collin -Date: 2009-07-10 11:33:21 +0300 - - Look for full command names instead of substrings - like "un", "cat", and "lz" when determining if - xz is run as unxz, xzcat, lzma, unlzma, or lzcat. - - This is to ensure that if xz is renamed (e.g. via - --program-transform-name), it doesn't so easily - work in wrong mode. - - src/xz/args.c | 22 +++++++++++++--------- - 1 files changed, 13 insertions(+), 9 deletions(-) - -commit 6f62fa88f4ff7ba78565c314c0e6e71c498fa658 -Author: Lasse Collin -Date: 2009-07-08 23:06:46 +0300 - - Updated THANKS. - - THANKS | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 1754b7e03e2aa7e2e0196807fe8b0f3f5a637b0e -Author: Lasse Collin -Date: 2009-07-08 23:05:29 +0300 - - Portability improvement to version.sh. - - version.sh | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 3bdb53792c0e3e3febe9370e56eda5b08f89410f -Author: Lasse Collin -Date: 2009-07-08 22:50:16 +0300 - - Remove --force from xzdec. - - It was ignored for compatibility with xz, but now that - --decompress --stdout --force copies unrecognized files - as is to stdout, simply ignoring --force in xzdec would - be wrong. xzdec will not support copying unrecognized - data as is to stdout, so it cannot support --force. - - src/xzdec/xzdec.1 | 5 ----- - src/xzdec/xzdec.c | 5 +---- - 2 files changed, 1 insertions(+), 9 deletions(-) - -commit 5f16ef4abf220028a9ddbcb138217597a9455f62 -Author: Lasse Collin -Date: 2009-07-06 10:36:04 +0300 - - Use sed instead of $(SED) so that we don't need to - use AC_PROG_SED. We don't do anything fancy with sed, - so this should work OK. libtool 2.2 sets SED but 1.5 - doesn't, so $(SED) happened to work when using libtool 2.2. - - src/liblzma/Makefile.am | 2 +- - src/scripts/Makefile.am | 28 ++++++++++++++-------------- - src/xz/Makefile.am | 6 +++--- - src/xzdec/Makefile.am | 6 +++--- - 4 files changed, 21 insertions(+), 21 deletions(-) - -commit 96e4b257e101d72072d43e144897d92920270669 -Author: Lasse Collin -Date: 2009-07-05 22:25:17 +0300 - - Major update to the xzgrep and other scripts based on - the latest versions found from gzip CVS repository. - - configure will try to find a POSIX shell to be used by - the scripts. This should ease portability on systems - which have pre-POSIX /bin/sh. - - xzgrep and xzdiff support .xz, .lzma, .gz, and .bz2 files. - xzmore and xzless support only .xz and .lzma files. - - The name of the xz executable used in these scripts is - now correct even if --program-transform-name has been used. - - configure.ac | 14 ++++ - m4/posix-shell.m4 | 63 +++++++++++++++ - src/scripts/Makefile.am | 24 +++--- - src/scripts/xzdiff | 67 ---------------- - src/scripts/xzdiff.1 | 58 +++++++++----- - src/scripts/xzdiff.in | 172 +++++++++++++++++++++++++++++++++++++++++ - src/scripts/xzgrep | 123 ----------------------------- - src/scripts/xzgrep.1 | 85 ++++++++++++-------- - src/scripts/xzgrep.in | 196 +++++++++++++++++++++++++++++++++++++++++++++++ - src/scripts/xzless.1 | 66 ++++++++++++++++ - src/scripts/xzless.in | 51 ++++++++++++ - src/scripts/xzmore | 74 ------------------ - src/scripts/xzmore.1 | 64 ++++++--------- - src/scripts/xzmore.in | 78 +++++++++++++++++++ - 14 files changed, 766 insertions(+), 369 deletions(-) - -commit 25cc7a6e8c2506a0d80084a4c1c67d33e7439100 -Author: Lasse Collin -Date: 2009-07-05 19:26:53 +0300 - - Use @PACKAGE_HOMEPAGE@ in liblzma.pc.in. - - src/liblzma/liblzma.pc.in | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 18c10c30d2833f394cd7bce0e6a821044b15832f -Author: Lasse Collin -Date: 2009-07-04 00:40:44 +0300 - - Make "xz --decompress --stdout --force" copy unrecognized - files as is to standard output. - - This feature is needed to be more compatible with gzip's - behavior. This was more complicated to implement than it - sounds, because the way liblzma is able to return errors with - files of only a few bytes in size. xz now has its own file - type detection code and no longer uses lzma_auto_decoder(). - - src/xz/coder.c | 213 ++++++++++++++++++++++++++++++++++++++++++++++--------- - 1 files changed, 178 insertions(+), 35 deletions(-) - -commit 0a289c01ac821ea9c4250aa906b0ae3cfa953633 -Author: Lasse Collin -Date: 2009-07-02 14:30:38 +0300 - - Define PACKAGE_HOMEPAGE in configure.ac and use it in - xz and xzdec. - - Use also PACKAGE_NAME instead of hardcoding "XZ Utils". - - configure.ac | 5 +++++ - src/xz/message.c | 4 ++-- - src/xzdec/xzdec.c | 4 ++-- - 3 files changed, 9 insertions(+), 4 deletions(-) - -commit 5cc99db5bae8633f85559e5cdaef4cd905a4ee9c -Author: Lasse Collin -Date: 2009-07-01 12:21:24 +0300 - - Avoid visibility related compiler warnings on Windows. - - configure.ac | 20 +++++++++----------- - 1 files changed, 9 insertions(+), 11 deletions(-) - -commit 7653d1cf48080e63b189ed9d58dea0e82b6b1c5e -Author: Lasse Collin -Date: 2009-06-30 17:14:39 +0300 - - Use static liblzma by default also for tests. - - tests/Makefile.am | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit f42ee981668b545ab6d06c6072e262c29605273c -Author: Lasse Collin -Date: 2009-06-30 17:09:57 +0300 - - Build system fixes - - Don't use libtool convenience libraries to avoid recently - discovered long-standing subtle but somewhat severe bugs - in libtool (at least 1.5.22 and 2.2.6 are affected). It - was found when porting XZ Utils to Windows - - but the problem is significant also e.g. on GNU/Linux. - - Unless --disable-shared is passed to configure, static - library built from a set of convenience libraries will - contain PIC objects. That is, while libtool builds non-PIC - objects too, only PIC objects will be used from the - convenience libraries. On 32-bit x86 (tested on mobile XP2400+), - using PIC instead of non-PIC makes the decompressor 10 % slower - with the default CFLAGS. - - So while xz was linked against static liblzma by default, - it got the slower PIC objects unless --disable-shared was - used. I tend develop and benchmark with --disable-shared - due to faster build time, so I hadn't noticed the problem - in benchmarks earlier. - - This commit also adds support for building Windows resources - into liblzma and executables. - - configure.ac | 34 ++++++++++----- - src/liblzma/Makefile.am | 79 +++++++++++++++++++++++++++------- - src/liblzma/check/Makefile.am | 47 --------------------- - src/liblzma/check/Makefile.inc | 51 ++++++++++++++++++++++ - src/liblzma/common/Makefile.am | 78 ---------------------------------- - src/liblzma/common/Makefile.inc | 67 +++++++++++++++++++++++++++++ - src/liblzma/common/common.h | 16 ++++--- - src/liblzma/delta/Makefile.am | 28 ------------ - src/liblzma/delta/Makefile.inc | 23 ++++++++++ - src/liblzma/lz/Makefile.am | 29 ------------- - src/liblzma/lz/Makefile.inc | 21 +++++++++ - src/liblzma/lzma/Makefile.am | 51 ---------------------- - src/liblzma/lzma/Makefile.inc | 43 +++++++++++++++++++ - src/liblzma/rangecoder/Makefile.am | 26 ----------- - src/liblzma/rangecoder/Makefile.inc | 21 +++++++++ - src/liblzma/simple/Makefile.am | 51 ---------------------- - src/liblzma/simple/Makefile.inc | 47 +++++++++++++++++++++ - src/liblzma/subblock/Makefile.am | 26 ----------- - src/liblzma/subblock/Makefile.inc | 20 +++++++++ - src/xz/Makefile.am | 11 ++++- - src/xzdec/Makefile.am | 20 ++++++++- - 21 files changed, 417 insertions(+), 372 deletions(-) - -commit 89dac1db6f168d7469cfbc4432651d4724c5c0de -Author: Lasse Collin -Date: 2009-06-29 22:19:51 +0300 - - Added a comment about "autoconf -fi" to autogen.sh. - - autogen.sh | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 6e685aae4594bc0af1b5032e01bb37d0edaa3ebd -Author: Lasse Collin -Date: 2009-06-28 10:04:24 +0300 - - Add -no-undefined to get shared liblzma on Windows. - - src/liblzma/Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 73f560ee5fa064992b76688d9472baf139432540 -Author: Lasse Collin -Date: 2009-06-27 22:57:15 +0300 - - Make physmem() work on Cygwin 1.5 and older. - - src/common/physmem.h | 77 ++++++++++++++++++++++++++------------------------ - 1 files changed, 40 insertions(+), 37 deletions(-) - -commit 7ff0004fbce24ae72eddfe392828ffd7d4639ed1 -Author: Lasse Collin -Date: 2009-06-27 17:28:01 +0300 - - Moved the Windows resource files outside the windows directory - to prepare for building them with Autotools. - - src/common/common_w32res.rc | 46 +++++++++++++++++++++++++++++++++++++++++ - src/liblzma/liblzma_w32res.rc | 5 ++++ - src/xz/xz_w32res.rc | 5 ++++ - src/xzdec/lzmadec_w32res.rc | 5 ++++ - src/xzdec/xzdec_w32res.rc | 5 ++++ - windows/Makefile | 35 +++++++++++++++++-------------- - windows/common.rc | 46 ----------------------------------------- - windows/liblzma.rc | 5 ---- - windows/lzmadec.rc | 5 ---- - windows/xz.rc | 5 ---- - windows/xzdec.rc | 5 ---- - 11 files changed, 85 insertions(+), 82 deletions(-) - -commit 449c634674f35336a4815d398172e447659a135e -Author: Lasse Collin -Date: 2009-06-27 13:05:03 +0300 - - Added missing $(EXEEXT). - - src/xz/Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 792db79f27ad9ab1fb977e23be65c7761f545752 -Author: Lasse Collin -Date: 2009-06-27 12:32:40 +0300 - - Create correct symlinks even when - --program-{prefix,suffix,transform} is passed to configure. - - src/scripts/Makefile.am | 80 +++++++++++++++++++++++++++-------------------- - src/xz/Makefile.am | 21 +++++++----- - src/xzdec/Makefile.am | 9 +++-- - 3 files changed, 65 insertions(+), 45 deletions(-) - -commit 0adc72feb84f5b903f6ad9d3f759b1c326fafc6b -Author: Lasse Collin -Date: 2009-06-27 10:02:24 +0300 - - Silence a compiler warning on DOS-like systems. - - src/xz/file_io.c | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit ad12edc95254ede3f0cb8dec8645e8789e984c4f -Author: Lasse Collin -Date: 2009-06-27 09:35:15 +0300 - - Updated the filenames in POTFILES.in too. - - po/POTFILES.in | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit b2b1f867532732fe9969131f8713bdd6b0731763 -Author: Lasse Collin -Date: 2009-06-27 00:43:06 +0300 - - Hopefully improved portability of the assembler code in - Autotools based builds on Windows. - - src/liblzma/check/crc32_x86.S | 8 +++++++- - src/liblzma/check/crc64_x86.S | 8 +++++++- - 2 files changed, 14 insertions(+), 2 deletions(-) - -commit c393055947247627a09b6a6b8f20aa0c32f9be16 -Author: Lasse Collin -Date: 2009-06-26 21:17:29 +0300 - - Updated THANKS (most of today's commits are based on - Charles Wilson's patches). - - THANKS | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit da0af22e4b4139b8a10710945f8b245b3a77c97d -Author: Lasse Collin -Date: 2009-06-26 21:00:35 +0300 - - Updated comments to match renamed files. - - src/xz/coder.c | 2 +- - src/xz/coder.h | 2 +- - src/xz/file_io.c | 2 +- - src/xz/file_io.h | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - -commit 65014fd211dfbd4be48685998cb5a12aaa29c8d2 -Author: Lasse Collin -Date: 2009-06-26 20:49:54 +0300 - - Rename process.[hc] to coder.[hc] and io.[hc] to file_io.[hc] - to avoid problems on systems with system headers with those - names. - - dos/Makefile | 4 +- - src/xz/Makefile.am | 8 +- - src/xz/coder.c | 488 +++++++++++++++++++++++++++++++++++ - src/xz/coder.h | 57 ++++ - src/xz/file_io.c | 716 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - src/xz/file_io.h | 86 +++++++ - src/xz/io.c | 716 ---------------------------------------------------- - src/xz/io.h | 86 ------- - src/xz/private.h | 4 +- - src/xz/process.c | 488 ----------------------------------- - src/xz/process.h | 57 ---- - windows/Makefile | 4 +- - 12 files changed, 1357 insertions(+), 1357 deletions(-) - -commit 5e1257466dcb66f1d7a3f71814a5ad885cba43e8 -Author: Lasse Collin -Date: 2009-06-26 20:43:36 +0300 - - Rename process_file() to coder_run(). - - src/xz/main.c | 6 +++--- - src/xz/process.c | 6 +++--- - src/xz/process.h | 5 ++--- - 3 files changed, 8 insertions(+), 9 deletions(-) - -commit cad62551c5fa9865dbe0841a0b3bc729c4fbe8fc -Author: Lasse Collin -Date: 2009-06-26 20:36:45 +0300 - - Ugly hack to make it possible to use the thousand separator - format character with snprintf() on POSIX systems but not - on non-POSIX systems and still keep xgettext working. - - dos/Makefile | 16 +++------------- - src/xz/message.c | 17 +++++++++-------- - src/xz/process.c | 30 +++++++++++++++--------------- - src/xz/util.c | 34 ++++++++++++++++++++++++++++++++++ - src/xz/util.h | 20 ++++++++++++++++++++ - windows/Makefile | 13 +++---------- - 6 files changed, 84 insertions(+), 46 deletions(-) - -commit fe378d47074b16c52b00fe184d119287c68ce2e7 -Author: Lasse Collin -Date: 2009-06-26 15:40:40 +0300 - - Added missing source files to windows/Makefile. - - windows/Makefile | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 390a6408563067613b29de895cb40e4d0386d62c -Author: Lasse Collin -Date: 2009-06-26 15:37:53 +0300 - - Basic support for building with Cygwin and MinGW using - the Autotools based build system. It's not good yet, more - fixes will follow. - - configure.ac | 7 +++++++ - src/liblzma/api/lzma.h | 7 +++++-- - src/liblzma/check/crc32_x86.S | 7 ++++--- - src/liblzma/check/crc64_x86.S | 7 ++++--- - src/liblzma/common/common.h | 2 +- - windows/Makefile | 16 +++++++--------- - 6 files changed, 28 insertions(+), 18 deletions(-) - -commit 1c9360b7d1197457aaad2f8888b99f1149861579 -Author: Lasse Collin -Date: 2009-06-26 14:47:31 +0300 - - Fix @variables@ to $(variables) in Makefile.am files. - Fix the ordering of libgnu.a and LTLIBINTL on the linker - command line and added missing LTLIBINTL to tests/Makefile.am. - - debug/Makefile.am | 12 ++++++------ - src/liblzma/check/Makefile.am | 4 ++-- - src/liblzma/common/Makefile.am | 16 ++++++++-------- - src/liblzma/delta/Makefile.am | 4 ++-- - src/liblzma/lz/Makefile.am | 6 +++--- - src/liblzma/lzma/Makefile.am | 8 ++++---- - src/liblzma/rangecoder/Makefile.am | 4 ++-- - src/liblzma/simple/Makefile.am | 4 ++-- - src/liblzma/subblock/Makefile.am | 4 ++-- - src/xz/Makefile.am | 21 +++++++++++---------- - src/xzdec/Makefile.am | 19 ++++++++++--------- - tests/Makefile.am | 12 +++++++----- - 12 files changed, 59 insertions(+), 55 deletions(-) - -commit d45615c555e250209ebb55aa3649abe790f1eeac -Author: Lasse Collin -Date: 2009-06-26 14:20:02 +0300 - - Allow to explicitly specify autotool versions in autogen.sh. - - autogen.sh | 12 ++++++------ - 1 files changed, 6 insertions(+), 6 deletions(-) - -commit eaf8367368a329afa48785380f9dca6b681f3397 -Author: Lasse Collin -Date: 2009-06-26 14:18:32 +0300 - - Add version.sh to EXTRA_DIST. - - Makefile.am | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit b317b218e2d383dd27a700094c0de4510540ea18 -Author: Lasse Collin -Date: 2009-06-24 20:14:10 +0300 - - Support HW_PHYSMEM64 - - src/common/physmem.h | 30 +++++++++++++++++++----------- - 1 files changed, 19 insertions(+), 11 deletions(-) - -commit ae82dde5d9cc60c80cc89601b6c51cc1611d48e7 -Author: Lasse Collin -Date: 2009-06-24 13:01:59 +0300 - - Cast a char argument to isspace() to unsigned char. - - src/xz/args.c | 11 +++++++++-- - 1 files changed, 9 insertions(+), 2 deletions(-) - -commit 1735d31ea347210e914df038eeea4b2626e76e42 -Author: Lasse Collin -Date: 2009-06-05 13:46:26 +0300 - - A few more spelling fixes. Released the .xz spec 1.0.3. - - doc/xz-file-format.txt | 12 +++++++----- - 1 files changed, 7 insertions(+), 5 deletions(-) - -commit 8ed156ce894966103e895aa08f2a9fb912f6fad5 -Author: Lasse Collin -Date: 2009-06-04 23:42:12 +0300 - - Added xzdec man page. - - src/xzdec/Makefile.am | 11 +++ - src/xzdec/xzdec.1 | 173 +++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 184 insertions(+), 0 deletions(-) - -commit f6df39afaa84f71439507178a49b2a5dda6e824c -Author: Lasse Collin -Date: 2009-06-04 23:26:47 +0300 - - Harmonized xzdec --memory with xz --memory and made - minor cleanups. - - src/xzdec/xzdec.c | 74 ++++++++++++++++++++++++++++++++++++++--------------- - 1 files changed, 53 insertions(+), 21 deletions(-) - -commit 1774f27c61ce294a56712ca2f4785f90a62441bc -Author: Lasse Collin -Date: 2009-06-04 22:59:55 +0300 - - Fix purporse -> purpose. Thanks to Andrew Dudman. - Released .xz spec 1.0.2 due to this fix too. - - THANKS | 1 + - doc/xz-file-format.txt | 8 +++++--- - src/liblzma/liblzma.pc.in | 2 +- - windows/Makefile | 2 +- - 4 files changed, 8 insertions(+), 5 deletions(-) - -commit cb613455642f48fb51059e22018615f64c59b70f -Author: Lasse Collin -Date: 2009-06-01 14:53:57 +0300 - - The .xz file format version 1.0.1 - - doc/xz-file-format.txt | 29 ++++++++++++++++++++++------- - 1 files changed, 22 insertions(+), 7 deletions(-) - -commit 083c23c680ff844846d177cfc58bb7a874e7e6b9 -Author: Lasse Collin -Date: 2009-05-26 14:48:48 +0300 - - Make the raw value of the Check field available to applications - via lzma_block structure. - - This changes ABI but not doesn't break API. - - src/liblzma/api/lzma/block.h | 17 ++++++++++++++ - src/liblzma/common/block_buffer_encoder.c | 1 + - src/liblzma/common/block_decoder.c | 34 ++++++++++++---------------- - src/liblzma/common/block_encoder.c | 21 +++++++---------- - 4 files changed, 42 insertions(+), 31 deletions(-) - -commit b4f5c814090dc07d4350453576305e41eb9c998d -Author: Lasse Collin -Date: 2009-05-23 16:57:21 +0300 - - Remove undocumented alternative option names --bcj, --ppc, - and --itanium. - - src/xz/args.c | 3 --- - 1 files changed, 0 insertions(+), 3 deletions(-) - -commit b1edee2cdc7ef4411b1a21c07094ec763f071281 -Author: Lasse Collin -Date: 2009-05-23 15:12:23 +0300 - - Add support for specifying the BCJ filter start offset - in the xz command line tool. - - src/xz/args.c | 36 +++++++++++++++++++++--------------- - src/xz/message.c | 14 ++++++++------ - src/xz/options.c | 40 ++++++++++++++++++++++++++++++++++++++++ - src/xz/options.h | 7 +++++++ - 4 files changed, 76 insertions(+), 21 deletions(-) - -commit 72aa0e9c5f4289f10ef5bf240a9448d3017f1ceb -Author: Lasse Collin -Date: 2009-05-23 14:51:09 +0300 - - Updated THANKS. - - THANKS | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit dcedb6998cefeca6597dd1219328a3abf5acf66d -Author: Lasse Collin -Date: 2009-05-22 16:40:50 +0300 - - Added support for --quiet and --no-warn to xzdec. - Cleaned up the --help message a little. - - src/xzdec/xzdec.c | 76 ++++++++++++++++++++++++++++++++++------------------- - 1 files changed, 49 insertions(+), 27 deletions(-) - -commit 5f735dae80aa629853f4831d7b84ec1c614979eb -Author: Lasse Collin -Date: 2009-05-22 15:11:52 +0300 - - Use the 40 % of RAM memory usage limit in xzdec too. - - Update the memory usage info text in --help to match - the text in xz --long-help. - - src/xzdec/xzdec.c | 10 +++++----- - 1 files changed, 5 insertions(+), 5 deletions(-) - -commit b60376249e0c586910c4121fab4f791820cc1289 -Author: Lasse Collin -Date: 2009-05-22 14:43:00 +0300 - - Add --no-warn. - - src/xz/args.c | 8 +++++++- - src/xz/main.c | 17 +++++++++++++++++ - src/xz/main.h | 6 ++++++ - src/xz/message.c | 4 ++++ - 4 files changed, 34 insertions(+), 1 deletions(-) - -commit b4f92f522d4b854c0adb7c38be7531e1a6a7b008 -Author: Lasse Collin -Date: 2009-05-22 14:27:40 +0300 - - Fix a comment. - - src/xz/main.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 4dd21d23f22569285ae706b58b0e5904b8db1839 -Author: Lasse Collin -Date: 2009-05-22 14:21:20 +0300 - - Remove the --info option, which was an alias for --list. - - src/xz/args.c | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 8836139b63ce774bdd62abf17ab69b290e08229e -Author: Lasse Collin -Date: 2009-05-22 12:27:43 +0300 - - If xz is run as lzma, unlzma, or lzcat, simply imply - --format=lzma. This means that xz emulating lzma - doesn't decompress .xz files, while before this - commit it did. The new way is slightly simpler in - code and especially in upcoming documentation. - - src/xz/args.c | 17 ++++++----------- - 1 files changed, 6 insertions(+), 11 deletions(-) - -commit b0063023f8adb06ea735ec4af5c6f5b7bdb8e84d -Author: Lasse Collin -Date: 2009-05-22 11:29:50 +0300 - - Make the default memory usage limit 40 % of RAM for both - compressing and decompressing. This should be OK now that - xz automatically scales down the compression settings if - they would exceed the memory usage limit (earlier, the limit - for compression was increased to 90 % because low limit broke - scripts that used "xz -9" on systems with low RAM). - - Support spcifying the memory usage limit as a percentage - of RAM (e.g. --memory=50%). - - Support --threads=0 to reset the thread limit to the default - value (number of available CPU cores). Use UINT32_MAX instead - of SIZE_MAX as the maximum in args.c. hardware.c was already - expecting uint32_t value. - - Cleaned up the output of --help and --long-help. - - src/xz/args.c | 28 +++++++++++++---- - src/xz/hardware.c | 86 ++++++++++++++++++++++------------------------------ - src/xz/hardware.h | 10 +++--- - src/xz/message.c | 28 ++++++++--------- - src/xz/process.c | 18 ++++------- - 5 files changed, 82 insertions(+), 88 deletions(-) - -commit 071b825b23911a69dd1cd2f8cda004ef8a781fae -Author: Lasse Collin -Date: 2009-05-21 17:22:01 +0300 - - Support special value "max" where xz and xzdec accept an integer. - Don't round the memory usage limit in xzdec --help to avoid - an integer overflow and to not give wrong impression that - the limit is high enough when it may not actually be. - - src/xz/util.c | 4 ++++ - src/xzdec/xzdec.c | 6 +++++- - 2 files changed, 9 insertions(+), 1 deletions(-) - -commit 03ca67fd37dd43fa7f590de340899cd497c10802 -Author: ABCD -Date: 2009-05-20 17:31:18 -0400 - - Install lzdiff, lzgrep, and lzmore as symlinks - - This adds lzdiff, lzgrep, and lzmore to the list of symlinks to install. - It also installs symlinks for the manual pages and removes the new - symlinks on uninstall. - - src/scripts/Makefile.am | 16 ++++++++++++++-- - 1 files changed, 14 insertions(+), 2 deletions(-) - -commit a6f43e64128a6da5cd641de1e1e527433b3e5638 -Author: Lasse Collin -Date: 2009-05-02 16:10:14 +0300 - - Use a GCC-specific #pragma instead of GCC-specific - -Wno-uninitialized to silence a bogus warning. - - configure.ac | 13 ------------- - src/liblzma/check/Makefile.am | 5 ----- - src/liblzma/check/sha256.c | 5 +++++ - 3 files changed, 5 insertions(+), 18 deletions(-) - -commit f6ce63ebdb45a857c8949960c83c9580ae888951 -Author: Lasse Collin -Date: 2009-05-02 14:46:50 +0300 - - Removed --disable-encoder and --disable-decoder. Use the values - given to --enable-encoders and --enable-decoders to determine - if any encoder or decoder support is wanted. - - configure.ac | 48 ++++++++---------------------------------------- - 1 files changed, 8 insertions(+), 40 deletions(-) - -commit be06858d5cf8ba46557395035d821dc332f3f830 -Author: Lasse Collin -Date: 2009-05-01 11:28:52 +0300 - - Remove docs that are too outdated to be updated - (rewrite will be better). - - doc/liblzma-advanced.txt | 324 ---------------------------------------------- - doc/liblzma-hacking.txt | 112 ---------------- - doc/liblzma-intro.txt | 194 --------------------------- - doc/liblzma-security.txt | 219 ------------------------------- - doc/lzma-intro.txt | 107 --------------- - 5 files changed, 0 insertions(+), 956 deletions(-) - -commit 0255401e57c96af87c6b159eca28974e79430a82 -Author: Lasse Collin -Date: 2009-05-01 11:21:46 +0300 - - Added documentation about the legacy .lzma file format. - - doc/lzma-file-format.txt | 166 ++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 166 insertions(+), 0 deletions(-) - -commit 1496ff437c46f38303e0e94c511ca604b3a11f85 -Author: Lasse Collin -Date: 2009-05-01 11:20:23 +0300 - - Renamed the file format specification to xz-file-format.txt - which is the filename used on the WWW. - - doc/file-format.txt | 1127 ------------------------------------------------ - doc/xz-file-format.txt | 1127 ++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 1127 insertions(+), 1127 deletions(-) - -commit 21c6b94373d239d7e86bd480fcd558e30391712f -Author: Lasse Collin -Date: 2009-04-28 23:08:32 +0300 - - Fixed a crash in liblzma. - - liblzma tries to avoid useless free()/malloc() pairs in - initialization when multiple files are handled using the - same lzma_stream. This didn't work with filter chains - due to comparison of wrong pointers in lzma_next_coder_init(), - making liblzma think that no memory reallocation is needed - even when it actually is. - - Easy way to trigger this bug is to decompress two files with - a single xz command. The first file should have e.g. x86+LZMA2 - as the filter chain, and the second file just LZMA2. - - src/liblzma/common/alone_decoder.c | 2 +- - src/liblzma/common/alone_encoder.c | 4 ++-- - src/liblzma/common/auto_decoder.c | 2 +- - src/liblzma/common/block_decoder.c | 2 +- - src/liblzma/common/block_encoder.c | 2 +- - src/liblzma/common/common.h | 4 ++-- - src/liblzma/common/easy_encoder.c | 2 +- - src/liblzma/common/index_decoder.c | 2 +- - src/liblzma/common/index_encoder.c | 2 +- - src/liblzma/common/stream_decoder.c | 2 +- - src/liblzma/common/stream_encoder.c | 2 +- - 11 files changed, 13 insertions(+), 13 deletions(-) - -commit e518d167aa5958e469982f4fb3a24b9b6a2b5d1c -Author: Lasse Collin -Date: 2009-04-15 14:13:38 +0300 - - Fix uint32_t -> size_t in ARM and ARM-Thumb filters. - - On 64-bit system it would have gone into infinite - loop if a single input buffer was over 4 GiB (unlikely). - - src/liblzma/simple/arm.c | 2 +- - src/liblzma/simple/armthumb.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 31decdce041581e57c0d8a407d4795b114ef27ca -Author: Lasse Collin -Date: 2009-04-14 11:48:46 +0300 - - Minor fixes to test files' README. - - tests/files/README | 17 +++++++++-------- - 1 files changed, 9 insertions(+), 8 deletions(-) - -commit 4787d654434891c7df5b43959b0d2873718f06e0 -Author: Lasse Collin -Date: 2009-04-13 16:36:41 +0300 - - Updated history.txt. - - doc/history.txt | 123 +++++++++++++++++++++++++++++------------------------- - 1 files changed, 66 insertions(+), 57 deletions(-) - -commit 2f0bc9cd40f709152a0177c8e585c0757e9af9c9 -Author: Lasse Collin -Date: 2009-04-13 14:49:48 +0300 - - Quick & dirty update to support xz in diff/grep/more scripts. - - src/scripts/Makefile.am | 38 +++++++++----- - src/scripts/lzdiff | 67 ------------------------- - src/scripts/lzdiff.1 | 51 ------------------- - src/scripts/lzgrep | 123 ----------------------------------------------- - src/scripts/lzgrep.1 | 61 ----------------------- - src/scripts/lzmore | 74 ---------------------------- - src/scripts/lzmore.1 | 55 --------------------- - src/scripts/xzdiff | 67 +++++++++++++++++++++++++ - src/scripts/xzdiff.1 | 58 ++++++++++++++++++++++ - src/scripts/xzgrep | 123 +++++++++++++++++++++++++++++++++++++++++++++++ - src/scripts/xzgrep.1 | 77 +++++++++++++++++++++++++++++ - src/scripts/xzmore | 74 ++++++++++++++++++++++++++++ - src/scripts/xzmore.1 | 66 +++++++++++++++++++++++++ - 13 files changed, 489 insertions(+), 445 deletions(-) - -commit 02ddf09bc3079b3e17297729b9e43f14d407b8fc -Author: Lasse Collin -Date: 2009-04-13 11:27:40 +0300 - - Put the interesting parts of XZ Utils into the public domain. - Some minor documentation cleanups were made at the same time. - - COPYING | 67 ++++++++++++++++++------ - ChangeLog | 2 +- - Doxyfile.in | 8 ++- - Makefile.am | 13 +---- - autogen.sh | 9 +++ - configure.ac | 13 +---- - debug/Makefile.am | 13 +---- - debug/crc32.c | 13 +---- - debug/full_flush.c | 13 +---- - debug/hex2bin.c | 7 +-- - debug/known_sizes.c | 13 +---- - debug/memusage.c | 13 +---- - debug/repeat.c | 13 +---- - debug/sync_flush.c | 13 +---- - doc/faq.txt | 38 +------------ - lib/Makefile.am | 18 +++--- - src/Makefile.am | 13 +---- - src/common/bswap.h | 7 +-- - src/common/cpucores.h | 7 +-- - src/common/integer.h | 7 +-- - src/common/mythread.h | 4 +- - src/common/open_stdxxx.h | 7 +-- - src/common/physmem.h | 7 +-- - src/common/sysdefs.h | 13 +---- - src/liblzma/Makefile.am | 13 +---- - src/liblzma/api/Makefile.am | 13 +---- - src/liblzma/api/lzma.h | 38 ++++++++----- - src/liblzma/api/lzma/base.h | 20 +++---- - src/liblzma/api/lzma/bcj.h | 18 +++---- - src/liblzma/api/lzma/block.h | 18 +++---- - src/liblzma/api/lzma/check.h | 18 +++---- - src/liblzma/api/lzma/container.h | 18 +++---- - src/liblzma/api/lzma/delta.h | 18 +++---- - src/liblzma/api/lzma/filter.h | 18 +++---- - src/liblzma/api/lzma/index.h | 18 +++---- - src/liblzma/api/lzma/index_hash.h | 22 +++----- - src/liblzma/api/lzma/lzma.h | 18 +++---- - src/liblzma/api/lzma/stream_flags.h | 18 +++---- - src/liblzma/api/lzma/subblock.h | 18 +++---- - src/liblzma/api/lzma/version.h | 18 +++---- - src/liblzma/api/lzma/vli.h | 42 +++++++-------- - src/liblzma/check/Makefile.am | 8 +-- - src/liblzma/check/check.c | 7 +-- - src/liblzma/check/check.h | 7 +-- - src/liblzma/check/crc32_fast.c | 30 ++++------ - src/liblzma/check/crc32_small.c | 7 +-- - src/liblzma/check/crc32_table.c | 7 +-- - src/liblzma/check/crc32_tablegen.c | 7 +-- - src/liblzma/check/crc32_x86.S | 21 +++++--- - src/liblzma/check/crc64_fast.c | 20 +++---- - src/liblzma/check/crc64_small.c | 7 +-- - src/liblzma/check/crc64_table.c | 7 +-- - src/liblzma/check/crc64_tablegen.c | 7 +-- - src/liblzma/check/crc64_x86.S | 14 +++-- - src/liblzma/check/crc_macros.h | 9 ++-- - src/liblzma/check/sha256.c | 23 +++++--- - src/liblzma/common/Makefile.am | 13 +---- - src/liblzma/common/alone_decoder.c | 13 +---- - src/liblzma/common/alone_decoder.h | 13 +---- - src/liblzma/common/alone_encoder.c | 13 +---- - src/liblzma/common/auto_decoder.c | 13 +---- - src/liblzma/common/block_buffer_decoder.c | 13 +---- - src/liblzma/common/block_buffer_encoder.c | 13 +---- - src/liblzma/common/block_decoder.c | 13 +---- - src/liblzma/common/block_decoder.h | 13 +---- - src/liblzma/common/block_encoder.c | 13 +---- - src/liblzma/common/block_encoder.h | 13 +---- - src/liblzma/common/block_header_decoder.c | 13 +---- - src/liblzma/common/block_header_encoder.c | 13 +---- - src/liblzma/common/block_util.c | 13 +---- - src/liblzma/common/bsr.h | 7 +-- - src/liblzma/common/chunk_size.c | 13 +---- - src/liblzma/common/common.c | 13 +---- - src/liblzma/common/common.h | 13 +---- - src/liblzma/common/easy_buffer_encoder.c | 13 +---- - src/liblzma/common/easy_decoder_memusage.c | 13 +---- - src/liblzma/common/easy_encoder.c | 13 +---- - src/liblzma/common/easy_encoder_memusage.c | 13 +---- - src/liblzma/common/easy_preset.c | 13 +---- - src/liblzma/common/easy_preset.h | 13 +---- - src/liblzma/common/filter_buffer_decoder.c | 13 +---- - src/liblzma/common/filter_buffer_encoder.c | 13 +---- - src/liblzma/common/filter_common.c | 13 +---- - src/liblzma/common/filter_common.h | 13 +---- - src/liblzma/common/filter_decoder.c | 13 +---- - src/liblzma/common/filter_decoder.h | 13 +---- - src/liblzma/common/filter_encoder.c | 13 +---- - src/liblzma/common/filter_encoder.h | 13 +---- - src/liblzma/common/filter_flags_decoder.c | 13 +---- - src/liblzma/common/filter_flags_encoder.c | 13 +---- - src/liblzma/common/index.c | 13 +---- - src/liblzma/common/index.h | 13 +---- - src/liblzma/common/index_decoder.c | 13 +---- - src/liblzma/common/index_encoder.c | 13 +---- - src/liblzma/common/index_encoder.h | 13 +---- - src/liblzma/common/index_hash.c | 13 +---- - src/liblzma/common/stream_buffer_decoder.c | 13 +---- - src/liblzma/common/stream_buffer_encoder.c | 13 +---- - src/liblzma/common/stream_decoder.c | 13 +---- - src/liblzma/common/stream_decoder.h | 13 +---- - src/liblzma/common/stream_encoder.c | 13 +---- - src/liblzma/common/stream_encoder.h | 13 +---- - src/liblzma/common/stream_flags_common.c | 13 +---- - src/liblzma/common/stream_flags_common.h | 13 +---- - src/liblzma/common/stream_flags_decoder.c | 13 +---- - src/liblzma/common/stream_flags_encoder.c | 13 +---- - src/liblzma/common/vli_decoder.c | 13 +---- - src/liblzma/common/vli_encoder.c | 13 +---- - src/liblzma/common/vli_size.c | 13 +---- - src/liblzma/delta/Makefile.am | 13 +---- - src/liblzma/delta/delta_common.c | 13 +---- - src/liblzma/delta/delta_common.h | 13 +---- - src/liblzma/delta/delta_decoder.c | 13 +---- - src/liblzma/delta/delta_decoder.h | 13 +---- - src/liblzma/delta/delta_encoder.c | 13 +---- - src/liblzma/delta/delta_encoder.h | 13 +---- - src/liblzma/delta/delta_private.h | 13 +---- - src/liblzma/lz/Makefile.am | 13 +---- - src/liblzma/lz/lz_decoder.c | 17 ++---- - src/liblzma/lz/lz_decoder.h | 17 ++---- - src/liblzma/lz/lz_encoder.c | 17 ++---- - src/liblzma/lz/lz_encoder.h | 17 ++---- - src/liblzma/lz/lz_encoder_hash.h | 13 +---- - src/liblzma/lz/lz_encoder_mf.c | 17 ++---- - src/liblzma/lzma/Makefile.am | 13 +---- - src/liblzma/lzma/fastpos.h | 17 ++---- - src/liblzma/lzma/fastpos_tablegen.c | 17 ++---- - src/liblzma/lzma/lzma2_decoder.c | 17 ++---- - src/liblzma/lzma/lzma2_decoder.h | 17 ++---- - src/liblzma/lzma/lzma2_encoder.c | 17 ++---- - src/liblzma/lzma/lzma2_encoder.h | 17 ++---- - src/liblzma/lzma/lzma_common.h | 17 ++---- - src/liblzma/lzma/lzma_decoder.c | 17 ++---- - src/liblzma/lzma/lzma_decoder.h | 17 ++---- - src/liblzma/lzma/lzma_encoder.c | 17 ++---- - src/liblzma/lzma/lzma_encoder.h | 17 ++---- - src/liblzma/lzma/lzma_encoder_optimum_fast.c | 13 +---- - src/liblzma/lzma/lzma_encoder_optimum_normal.c | 13 +---- - src/liblzma/lzma/lzma_encoder_presets.c | 13 +---- - src/liblzma/lzma/lzma_encoder_private.h | 17 ++---- - src/liblzma/rangecoder/Makefile.am | 13 +---- - src/liblzma/rangecoder/price.h | 13 +---- - src/liblzma/rangecoder/price_tablegen.c | 16 ++---- - src/liblzma/rangecoder/range_common.h | 17 ++---- - src/liblzma/rangecoder/range_decoder.h | 17 ++---- - src/liblzma/rangecoder/range_encoder.h | 17 ++---- - src/liblzma/simple/Makefile.am | 13 +---- - src/liblzma/simple/arm.c | 17 ++---- - src/liblzma/simple/armthumb.c | 17 ++---- - src/liblzma/simple/ia64.c | 17 ++---- - src/liblzma/simple/powerpc.c | 17 ++---- - src/liblzma/simple/simple_coder.c | 13 +---- - src/liblzma/simple/simple_coder.h | 14 +---- - src/liblzma/simple/simple_decoder.c | 13 +---- - src/liblzma/simple/simple_decoder.h | 13 +---- - src/liblzma/simple/simple_encoder.c | 13 +---- - src/liblzma/simple/simple_encoder.h | 13 +---- - src/liblzma/simple/simple_private.h | 13 +---- - src/liblzma/simple/sparc.c | 17 ++---- - src/liblzma/simple/x86.c | 17 ++---- - src/liblzma/subblock/Makefile.am | 13 +---- - src/liblzma/subblock/subblock_decoder.c | 13 +---- - src/liblzma/subblock/subblock_decoder.h | 13 +---- - src/liblzma/subblock/subblock_decoder_helper.c | 13 +---- - src/liblzma/subblock/subblock_decoder_helper.h | 13 +---- - src/liblzma/subblock/subblock_encoder.c | 13 +---- - src/liblzma/subblock/subblock_encoder.h | 13 +---- - src/scripts/Makefile.am | 7 +++ - src/xz/Makefile.am | 13 +---- - src/xz/args.c | 13 +---- - src/xz/args.h | 13 +---- - src/xz/hardware.c | 13 +---- - src/xz/hardware.h | 13 +---- - src/xz/io.c | 13 +---- - src/xz/io.h | 13 +---- - src/xz/list.c | 13 +---- - src/xz/main.c | 13 +---- - src/xz/main.h | 13 +---- - src/xz/message.c | 13 +---- - src/xz/message.h | 13 +---- - src/xz/options.c | 13 +---- - src/xz/options.h | 13 +---- - src/xz/private.h | 13 +---- - src/xz/process.c | 13 +---- - src/xz/process.h | 13 +---- - src/xz/signals.c | 13 +---- - src/xz/signals.h | 13 +---- - src/xz/suffix.c | 13 +---- - src/xz/suffix.h | 13 +---- - src/xz/util.c | 13 +---- - src/xz/util.h | 13 +---- - src/xzdec/Makefile.am | 13 +---- - src/xzdec/xzdec.c | 13 +---- - tests/Makefile.am | 13 +---- - tests/bcj_test.c | 7 +-- - tests/create_compress_files.c | 13 +---- - tests/test_block.c | 13 +---- - tests/test_block_header.c | 13 +---- - tests/test_check.c | 13 +---- - tests/test_compress.sh | 13 +---- - tests/test_files.sh | 13 +---- - tests/test_filter_flags.c | 13 +---- - tests/test_index.c | 13 +---- - tests/test_stream_flags.c | 13 +---- - tests/tests.h | 13 +---- - windows/common.rc | 2 +- - 206 files changed, 866 insertions(+), 2021 deletions(-) - -commit e79c42d854657ae7f75613bd80c1a35ff7c525cb -Author: Lasse Collin -Date: 2009-04-10 11:17:02 +0300 - - Fix off-by-one in LZ decoder. - - Fortunately, this bug had no security risk other than accepting - some corrupt files as valid. - - src/liblzma/lz/lz_decoder.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 94eb9ad46f1fded6d8369cf3d38bb9754c1375af -Author: Pavel Roskin -Date: 2009-03-31 12:15:01 -0400 - - Fix minor typos in README - - README | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 9bab5336ebd765ec4e12252f416eefdf04eba750 -Author: Lasse Collin -Date: 2009-03-31 21:52:51 +0300 - - Add a note and work-around instructions to README about - problems detecting a C99 compiler when some standard - headers are missing. - - README | 11 +++++++++++ - 1 files changed, 11 insertions(+), 0 deletions(-) - -commit a0497ff7a06f9350349264fe9b52dfefc6d53ead -Author: Lasse Collin -Date: 2009-03-18 16:54:38 +0200 - - Updated THANKS. - - THANKS | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 390e69887fc5e0a108eb41203bed9acd100a3d76 -Author: Lasse Collin -Date: 2009-03-18 16:51:41 +0200 - - Fix wrong macro names in lc_cpucores.m4 and cpucores.h. - Thanks to Bert Wesarg. - - m4/lc_cpucores.m4 | 4 ++-- - src/common/cpucores.h | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - -commit 0df9299e2478c2a0c62c05b1ae14a85a353e20d6 -Author: Lasse Collin -Date: 2009-03-01 09:03:08 +0200 - - Test for Linux-specific sysinfo() only on Linux systems. - Some other systems have sysinfo() with different semantics. - - m4/lc_physmem.m4 | 28 +++++++++++++++++++--------- - 1 files changed, 19 insertions(+), 9 deletions(-) - -commit cf751edfde3ad6e088dc18e0522d31ae38405933 -Author: Lasse Collin -Date: 2009-03-01 09:00:06 +0200 - - Added AC_CONFIG_MACRO_DIR to configure.ac. - - configure.ac | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 63df14c57dee7c461717784287056688482a7eb9 -Author: Lasse Collin -Date: 2009-03-01 08:58:41 +0200 - - Fix the Autoconf test for getopt_long replacement. - It was broken by e114502b2bc371e4a45449832cb69be036360722. - - m4/getopt.m4 | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit fd6a380f4eda4f00be5f2aa8d222992cd74a714f -Author: Lasse Collin -Date: 2009-02-22 19:07:54 +0200 - - Add a rough explanation of --extreme to output of --help. - - src/xz/message.c | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 68bf7ac2984d3627369a240ef0491934d53f7899 -Author: Lasse Collin -Date: 2009-02-22 18:52:49 +0200 - - Fixes to progress message handling in xz: - - - Don't use Windows-specific code on Windows. The old code - required at least Windows 2000. Now it should work on - Windows 98 and later, and maybe on Windows 95 too. - - - Use less precision when showing estimated remaining time. - - - Fix some small design issues. - - src/xz/message.c | 483 ++++++++++++++++++++++++++++++++++-------------------- - src/xz/message.h | 28 ++- - src/xz/process.c | 53 +++--- - 3 files changed, 351 insertions(+), 213 deletions(-) - -commit 47c2e21f82242f50f18713a27d644c2c94ab3fea -Author: Lasse Collin -Date: 2009-02-18 13:00:10 +0200 - - Added files missing from the previous commit. - - src/liblzma/api/lzma/container.h | 33 +++++++++++++++++++++++++++++++++ - src/liblzma/common/Makefile.am | 7 ++++++- - 2 files changed, 39 insertions(+), 1 deletions(-) - -commit 489a3dbaa0465f04400804e956a1cfbbee3654a2 -Author: Lasse Collin -Date: 2009-02-17 10:43:00 +0200 - - Added lzma_easy_buffer_encode(). Splitted easy.c into small - pieces to avoid unneeded dependencies making statically - linked applications bigger than needed. - - dos/Makefile | 6 +- - src/liblzma/common/easy.c | 128 ---------------------------- - src/liblzma/common/easy_buffer_encoder.c | 34 ++++++++ - src/liblzma/common/easy_decoder_memusage.c | 31 +++++++ - src/liblzma/common/easy_encoder.c | 87 +++++++++++++++++++ - src/liblzma/common/easy_encoder_memusage.c | 31 +++++++ - src/liblzma/common/easy_preset.c | 34 ++++++++ - src/liblzma/common/easy_preset.h | 39 +++++++++ - windows/Makefile | 6 +- - 9 files changed, 266 insertions(+), 130 deletions(-) - -commit 7494816ab08d82f4d6409788825930c4e43cfd0d -Author: Lasse Collin -Date: 2009-02-15 15:48:45 +0200 - - Make physmem.h work on old Windows versions. - Thanks to Hongbo Ni for the original patch. - - src/common/physmem.h | 31 +++++++++++++++++++++++++++---- - 1 files changed, 27 insertions(+), 4 deletions(-) - -commit 11ae4ae35fd70182c713f2d914b7cb1143bc76f0 -Author: Lasse Collin -Date: 2009-02-14 20:44:52 +0200 - - Fix microsecond vs. nanosecond confusion in my_time(). - - src/xz/message.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 3084d662d2646ab7eb58daf0dc32cf3f9a74eec7 -Author: Lasse Collin -Date: 2009-02-14 00:45:29 +0200 - - Cleanups to the code that detects the amount of RAM and - the number of CPU cores. Added support for using sysinfo() - on Linux systems whose libc lacks appropriate sysconf() - support (at least dietlibc). The Autoconf macros were - split into separate files, and CPU core count detection - was moved from hardware.c to cpucores.h. The core count - isn't used for anything real for now, so a problematic - part in process.c was commented out. - - configure.ac | 89 +----------------------------------------------- - m4/lc_cpucores.m4 | 57 +++++++++++++++++++++++++++++++ - m4/lc_physmem.m4 | 74 ++++++++++++++++++++++++++++++++++++++++ - src/common/cpucores.h | 52 ++++++++++++++++++++++++++++ - src/common/physmem.h | 21 +++++++---- - src/xz/args.c | 4 +- - src/xz/hardware.c | 50 ++++++++++++--------------- - src/xz/hardware.h | 11 ++++-- - src/xz/message.c | 5 ++- - src/xz/process.c | 2 + - 10 files changed, 235 insertions(+), 130 deletions(-) - -commit 9c62371eab2706c46b1072f5935e28cb4cd9dca8 -Author: Lasse Collin -Date: 2009-02-13 18:23:50 +0200 - - Initial port to DOS using DJGPP. - - dos/Makefile | 261 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - dos/README | 113 +++++++++++++++++++++++++ - dos/config.h | 150 +++++++++++++++++++++++++++++++++ - 3 files changed, 524 insertions(+), 0 deletions(-) - -commit 0dae8b7751d09e9c5a482d5519daaee4800ce203 -Author: Lasse Collin -Date: 2009-02-13 18:02:05 +0200 - - Windows port: Take advantage of the version number macros. - Now the version number is not duplicated in the - Windows-specific files anymore. - - windows/Makefile | 2 +- - windows/common.rc | 16 ++++++++-------- - windows/config.h | 15 --------------- - 3 files changed, 9 insertions(+), 24 deletions(-) - -commit fdbc0cfa71f7d660855098a609175ba384259529 -Author: Lasse Collin -Date: 2009-02-13 18:00:03 +0200 - - Changed how the version number is specified in various places. - Now configure.ac will get the version number directly from - src/liblzma/api/lzma/version.h. The intent is to reduce the - number of places where the version number is duplicated. In - future, support for displaying Git commit ID may be added too. - - configure.ac | 3 +- - src/liblzma/api/lzma/version.h | 70 ++++++++++++++++++++++++++++++++++++++-- - src/liblzma/common/common.c | 2 +- - src/xz/message.c | 2 +- - src/xzdec/xzdec.c | 2 +- - version.sh | 23 +++++++++++++ - 6 files changed, 95 insertions(+), 7 deletions(-) - -commit 1d924e584b146136989f48c13fff2632896efb3d -Author: Lasse Collin -Date: 2009-02-13 17:30:30 +0200 - - Fix handling of integrity check type in the xz command line tool. - - src/xz/args.c | 9 ++++++++- - src/xz/process.c | 4 ++++ - 2 files changed, 12 insertions(+), 1 deletions(-) - -commit 96c46df7deb231ea68a03d8d1da9de4c774e36d8 -Author: Lasse Collin -Date: 2009-02-13 17:29:02 +0200 - - Improve support for DOS-like systems. - Here DOS-like means DOS, Windows, and OS/2. - - src/common/physmem.h | 12 ++++++++++++ - src/common/sysdefs.h | 4 ++++ - src/liblzma/check/crc32_x86.S | 6 +++--- - src/liblzma/check/crc64_x86.S | 6 +++--- - src/xz/args.c | 13 +++++-------- - src/xz/io.c | 39 +++++++++++++++++++++++++-------------- - src/xz/main.c | 23 +++++++++++++++++++++++ - src/xz/message.c | 3 +++ - src/xz/suffix.c | 5 +++++ - src/xzdec/xzdec.c | 5 +++-- - 10 files changed, 86 insertions(+), 30 deletions(-) - -commit b6a30ee8c2de60ecd722cd05223e4ba72f822e33 -Author: Lasse Collin -Date: 2009-02-11 20:02:32 +0200 - - Remove dead directories from .gitignore. - - .gitignore | 2 -- - 1 files changed, 0 insertions(+), 2 deletions(-) - -commit 1ec5b0027911d94cb6f98892cbc690f818d8a861 -Author: Jim Meyering -Date: 2009-02-11 14:45:14 +0100 - - .gitignore vs. Makefiles - - How about this for those of us who do srcdir builds? - - .gitignore | 22 ++++++++++++++++++++++ - 1 files changed, 22 insertions(+), 0 deletions(-) - -commit 154f5aec2de201c674841de4fcc9804c2a87af07 -Author: Lasse Collin -Date: 2009-02-10 21:48:35 +0200 - - Removed Makefile from .gitignore since not all Makefiles - in the repository are generated by Autotools. People - should do test builds in a separate build directory anyway. - - .gitignore | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit e605c2663691b0a4c307786aa368d124ea081daa -Author: Lasse Collin -Date: 2009-02-10 21:48:05 +0200 - - Added resource files for the Windows build. - - windows/Makefile | 37 ++++++++++++++++++++++--------------- - windows/common.rc | 46 ++++++++++++++++++++++++++++++++++++++++++++++ - windows/liblzma.rc | 5 +++++ - windows/lzmadec.rc | 5 +++++ - windows/xz.rc | 5 +++++ - windows/xzdec.rc | 5 +++++ - 6 files changed, 88 insertions(+), 15 deletions(-) - -commit a3bbbe05d32b1f7ea9eb98805df4dda2e811b476 -Author: Lasse Collin -Date: 2009-02-09 14:54:31 +0200 - - Let the user specify custom CFLAGS on the make command - line. Previously custom CFLAGS worked only when they were - passed to configure. - - configure.ac | 58 +++++++++++++++++++++------------------- - src/liblzma/check/Makefile.am | 2 +- - 2 files changed, 31 insertions(+), 29 deletions(-) - -commit 53f7598998b1860a69c51243b5d2e34623c6bf60 -Author: Lasse Collin -Date: 2009-02-08 21:35:11 +0200 - - Fix aliasing issue in physmem.h. - - src/common/physmem.h | 19 ++++++++++--------- - 1 files changed, 10 insertions(+), 9 deletions(-) - -commit 0e27028d74c5c7a8e036ae2a9b8cecb0ac79d3a6 -Author: Lasse Collin -Date: 2009-02-08 18:24:50 +0200 - - Add a separate internal function to initialize the CRC32 - table, which is used also by LZ encoder. This was needed - because calling lzma_crc32() and ignoring the result is - a no-op due to lzma_attr_pure. - - src/liblzma/check/check.h | 1 + - src/liblzma/check/crc32_small.c | 10 +++++++++- - src/liblzma/lz/lz_encoder.c | 4 ++-- - 3 files changed, 12 insertions(+), 3 deletions(-) - -commit ae1ad9af54210c9a2be336b1316532da5071516c -Author: Lasse Collin -Date: 2009-02-08 18:17:05 +0200 - - Make "xz --force" to write to terminal as the error - message suggests. - - src/xz/main.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 79e25eded48d2fe33f31441ab7a034f902e335f8 -Author: Lasse Collin -Date: 2009-02-08 10:37:50 +0200 - - Support both slash and backslash as path component - separator on Windows when parsing argv[0]. - - src/xz/args.c | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -commit bc7c7109cc4410055a888c1c70cbd1c9445c4361 -Author: Lasse Collin -Date: 2009-02-07 23:18:13 +0200 - - Omit the wrong and (even if corrected) nowadays useless rm - from autogen.sh. - - autogen.sh | 28 ---------------------------- - 1 files changed, 0 insertions(+), 28 deletions(-) - -commit edfc2031e56f8a2ccda063f02936b3a848d88723 -Author: Lasse Collin -Date: 2009-02-07 21:41:52 +0200 - - Updated THANKS. - - THANKS | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 880c3309386aac58fc4f3d7ca99bd31bcb1526a3 -Author: Lasse Collin -Date: 2009-02-07 21:17:07 +0200 - - Make it easy to choose if command line tools should be - linked statically or dynamically against liblzma. The - default is still to use static liblzma, but it can now - be changed by passing --enable-dynamic to configure. - Thanks to Mike Frysinger for the original patch. - - Fixed a few minor bugs in configure.ac. - - configure.ac | 39 +++++++++++++++++++++++++++++++++++++++ - src/xz/Makefile.am | 8 +++----- - src/xzdec/Makefile.am | 5 +++-- - 3 files changed, 45 insertions(+), 7 deletions(-) - -commit 3f86532407e4ace3debb62be16035e009b56ca36 -Author: Mike Frysinger -Date: 2009-02-06 23:38:39 -0500 - - add gitignore files - - Signed-off-by: Mike Frysinger - - .gitignore | 32 ++++++++++++++++++++++++++++++++ - m4/.gitignore | 35 +++++++++++++++++++++++++++++++++++ - po/.gitignore | 12 ++++++++++++ - 3 files changed, 79 insertions(+), 0 deletions(-) - -commit bd7ca1dad5c146b6217799ffaa230c32d207a3e5 -Author: Lasse Collin -Date: 2009-02-07 17:07:52 +0200 - - Assume 32 MiB of RAM on unsupported operating systems like - the comment in hardware.c already said. - - src/xz/hardware.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit d0ab8c1c73ae712adb0d26fbb9da762d99a63618 -Author: Lasse Collin -Date: 2009-02-07 16:26:58 +0200 - - MinGW support: Don't build fastpos_tablegen.c as part of - liblzma. Build both static and dynamic liblzma, and also - static and dynamic versions of the command line tools. - - windows/Makefile | 92 ++++++++++++++++++++++++++++++++++++++++------------- - windows/README | 10 ------ - 2 files changed, 69 insertions(+), 33 deletions(-) - -commit bfd91198e44a52bd9bfe3cd6dcae5edab7c6eb45 -Author: Lasse Collin -Date: 2009-02-07 15:55:47 +0200 - - Support LZMA_API_STATIC in assembler files to - avoid __declspec(dllexport) equivalent. - - src/liblzma/check/crc32_x86.S | 4 ++++ - src/liblzma/check/crc64_x86.S | 2 ++ - 2 files changed, 6 insertions(+), 0 deletions(-) - -commit 3306cf3883492720b3c34baa02f4eb4227d91c73 -Author: Lasse Collin -Date: 2009-02-07 11:11:50 +0200 - - Introduced LZMA_API_STATIC macro, which the applications - need to #define when linking against static liblzma on - platforms like Windows. Most developers don't need to - care about LZMA_API_STATIC at all. - - src/liblzma/api/lzma.h | 31 ++++++++++++++++++++++++------- - src/liblzma/common/common.h | 2 +- - 2 files changed, 25 insertions(+), 8 deletions(-) - -commit b719e63c5f4c91d2d5e2ea585d4c055ec3767d0b -Author: Lasse Collin -Date: 2009-02-06 16:55:45 +0200 - - Another grammar fix - - README | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit fe5434f940f75fec3611cf9d9edf78c4da8ac760 -Author: Lasse Collin -Date: 2009-02-06 12:30:23 +0200 - - Grammar fix in README. - - README | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 3dfa58a9eedf5a0e566452b078801c9cbcf7a245 -Author: Lasse Collin -Date: 2009-02-06 10:06:32 +0200 - - Some MSYS installations (e.g. MsysGit) don't include - install.exe, so don't rely on it. - - windows/Makefile | 12 +++++++----- - windows/README | 11 ++++++----- - 2 files changed, 13 insertions(+), 10 deletions(-) - -commit 975d8fd72a5148d46b2e1745f7a211cf1dfd9d31 -Author: Lasse Collin -Date: 2009-02-06 09:13:15 +0200 - - Recreated the BCJ test files for x86 and SPARC. The old files - were linked with crt*.o, which are copyrighted, and thus the - old test files were not in the public domain as a whole. They - are freely distributable though, but it is better to be careful - and avoid including any copyrighted pieces in the test files. - The new files are just compiled and assembled object files, - and thus don't contain any copyrighted code. - - tests/bcj_test.c | 2 +- - tests/compress_prepared_bcj_sparc | Bin 6804 -> 1240 bytes - tests/compress_prepared_bcj_x86 | Bin 4649 -> 1388 bytes - tests/files/good-1-sparc-lzma2.xz | Bin 2296 -> 612 bytes - tests/files/good-1-x86-lzma2.xz | Bin 1936 -> 716 bytes - 5 files changed, 1 insertions(+), 1 deletions(-) - -commit 094b1b09a531f0d201ec81f2b07346a995fd80b9 -Author: Lasse Collin -Date: 2009-02-05 21:21:27 +0200 - - Add the "windows" directory to EXTRA_DIST. - - Makefile.am | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit e1c3412eec7acec7ca3b32c9c828f3147dc65b49 -Author: Lasse Collin -Date: 2009-02-05 09:17:51 +0200 - - Added initial experimental makefile for use with MinGW. - - windows/Makefile | 253 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - windows/README | 164 +++++++++++++++++++++++++++++++++++ - windows/config.h | 180 ++++++++++++++++++++++++++++++++++++++ - 3 files changed, 597 insertions(+), 0 deletions(-) - -commit 75905a9afc0ee89954ede7d08af70d1148bf0fd9 -Author: Lasse Collin -Date: 2009-02-05 09:12:57 +0200 - - Various code cleanups the the xz command line tool. - It now builds with MinGW. - - src/common/physmem.h | 13 ++++ - src/xz/Makefile.am | 2 + - src/xz/args.h | 8 -- - src/xz/hardware.h | 10 +--- - src/xz/io.c | 93 +++++++++++++++++++------- - src/xz/io.h | 12 +-- - src/xz/main.c | 132 ++----------------------------------- - src/xz/main.h | 22 ------ - src/xz/message.c | 65 ++++++++++++++++-- - src/xz/message.h | 6 -- - src/xz/options.h | 8 -- - src/xz/private.h | 18 ++++-- - src/xz/process.h | 10 +--- - src/xz/signals.c | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++ - src/xz/signals.h | 51 ++++++++++++++ - src/xz/suffix.h | 5 -- - src/xz/util.c | 5 +- - src/xz/util.h | 5 -- - 18 files changed, 399 insertions(+), 246 deletions(-) - -commit d0c0b9e94e0af59d1d8f7f4829695d6efe19ccfe -Author: Lasse Collin -Date: 2009-02-03 12:15:17 +0200 - - Another utime() fix. - - src/xz/io.c | 9 +++++---- - 1 files changed, 5 insertions(+), 4 deletions(-) - -commit ccf92a29e8c7234284f1568c1ec0fd7cb98356ca -Author: Lasse Collin -Date: 2009-02-03 10:41:11 +0200 - - Fix wrong filename argument for utime() and utimes(). - This doesn't affect most systems, since most systems - have better functions available. - - src/xz/io.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 99c1c2abfae2e87f3c17e929783e6d1bb7a3f302 -Author: Lasse Collin -Date: 2009-02-02 21:19:01 +0200 - - Updated the x86 assembler code: - - Use call/ret pair to get instruction pointer for PIC. - - Use PIC only if PIC or __PIC__ is #defined. - - The code should work on MinGW and Darwin in addition - to GNU/Linux and Solaris. - - configure.ac | 6 --- - src/liblzma/check/crc32_x86.S | 84 +++++++++++++++++++++++++++++++++++------ - src/liblzma/check/crc64_x86.S | 82 +++++++++++++++++++++++++++++++++++----- - 3 files changed, 144 insertions(+), 28 deletions(-) - -commit 22a0c6dd940b78cdac2f4a4b4b0e7cc0ac15021f -Author: Lasse Collin -Date: 2009-02-02 20:14:03 +0200 - - Modify LZMA_API macro so that it works on Windows with - other compilers than MinGW. This may hurt readability - of the API headers slightly, but I don't know any - better way to do this. - - src/liblzma/api/lzma.h | 6 ++-- - src/liblzma/api/lzma/base.h | 11 ++++--- - src/liblzma/api/lzma/block.h | 22 +++++++------- - src/liblzma/api/lzma/check.h | 10 +++--- - src/liblzma/api/lzma/container.h | 22 +++++++------- - src/liblzma/api/lzma/filter.h | 28 ++++++++++---------- - src/liblzma/api/lzma/index.h | 40 ++++++++++++++-------------- - src/liblzma/api/lzma/index_hash.h | 10 +++--- - src/liblzma/api/lzma/lzma.h | 6 ++-- - src/liblzma/api/lzma/stream_flags.h | 10 +++--- - src/liblzma/api/lzma/version.h | 4 +- - src/liblzma/api/lzma/vli.h | 6 ++-- - src/liblzma/check/check.c | 4 +- - src/liblzma/check/crc32_fast.c | 2 +- - src/liblzma/check/crc32_small.c | 2 +- - src/liblzma/check/crc64_fast.c | 2 +- - src/liblzma/check/crc64_small.c | 2 +- - src/liblzma/common/alone_decoder.c | 2 +- - src/liblzma/common/alone_encoder.c | 2 +- - src/liblzma/common/auto_decoder.c | 2 +- - src/liblzma/common/block_buffer_decoder.c | 2 +- - src/liblzma/common/block_buffer_encoder.c | 4 +- - src/liblzma/common/block_decoder.c | 2 +- - src/liblzma/common/block_encoder.c | 2 +- - src/liblzma/common/block_header_decoder.c | 2 +- - src/liblzma/common/block_header_encoder.c | 4 +- - src/liblzma/common/block_util.c | 6 ++-- - src/liblzma/common/chunk_size.c | 2 +- - src/liblzma/common/common.c | 16 +++++----- - src/liblzma/common/common.h | 2 +- - src/liblzma/common/easy.c | 6 ++-- - src/liblzma/common/filter_buffer_decoder.c | 2 +- - src/liblzma/common/filter_buffer_encoder.c | 2 +- - src/liblzma/common/filter_decoder.c | 8 +++--- - src/liblzma/common/filter_encoder.c | 12 ++++---- - src/liblzma/common/filter_flags_decoder.c | 2 +- - src/liblzma/common/filter_flags_encoder.c | 4 +- - src/liblzma/common/index.c | 32 +++++++++++----------- - src/liblzma/common/index_decoder.c | 4 +- - src/liblzma/common/index_encoder.c | 4 +- - src/liblzma/common/index_hash.c | 10 +++--- - src/liblzma/common/stream_buffer_decoder.c | 2 +- - src/liblzma/common/stream_buffer_encoder.c | 4 +- - src/liblzma/common/stream_decoder.c | 2 +- - src/liblzma/common/stream_encoder.c | 2 +- - src/liblzma/common/stream_flags_common.c | 2 +- - src/liblzma/common/stream_flags_decoder.c | 4 +- - src/liblzma/common/stream_flags_encoder.c | 4 +- - src/liblzma/common/vli_decoder.c | 2 +- - src/liblzma/common/vli_encoder.c | 2 +- - src/liblzma/common/vli_size.c | 2 +- - src/liblzma/lz/lz_encoder.c | 2 +- - src/liblzma/lzma/lzma_encoder.c | 2 +- - src/liblzma/lzma/lzma_encoder_presets.c | 2 +- - 54 files changed, 177 insertions(+), 176 deletions(-) - -commit 8dd7b6052e18621e2e6c62f40f762ee88bd3eb65 -Author: Lasse Collin -Date: 2009-02-01 22:40:35 +0200 - - Fix a bug in lzma_block_buffer_decode(), although this - function should be rewritten anyway. - - src/liblzma/common/block_buffer_decoder.c | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit 55fd41431e61fb8178858283d636b6781e33e847 -Author: Lasse Collin -Date: 2009-02-01 22:39:07 +0200 - - Added initial version of raw buffer-to-buffer coding - functions, and cleaned up filter.h API header a little. - May be very buggy, not tested yet. - - src/liblzma/api/lzma/filter.h | 84 +++++++++++++++++++------ - src/liblzma/common/Makefile.am | 2 + - src/liblzma/common/filter_buffer_decoder.c | 94 ++++++++++++++++++++++++++++ - src/liblzma/common/filter_buffer_encoder.c | 61 ++++++++++++++++++ - 4 files changed, 221 insertions(+), 20 deletions(-) - -commit 3e54ecee5cad30a5ca361a88a99230407abc0699 -Author: Lasse Collin -Date: 2009-02-01 00:11:20 +0200 - - Fix missing newlines in xzdec.c. - - src/xzdec/xzdec.c | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit d64ca34f1b6f34e86adefc7f735b4eff8e6d4a35 -Author: Lasse Collin -Date: 2009-02-01 00:10:07 +0200 - - Use __cdecl also for function pointers in liblzma API when - on Windows. - - src/liblzma/api/lzma.h | 18 +++++++++++------- - src/liblzma/api/lzma/base.h | 4 ++-- - src/liblzma/common/common.h | 18 +++++++----------- - 3 files changed, 20 insertions(+), 20 deletions(-) - -commit 6a2eb54092fc625d59921a607ff68cd1a90aa898 -Author: Lasse Collin -Date: 2009-01-31 11:01:48 +0200 - - Add LZMA_API to liblzma API headers. It's useful at least - on Windows. sysdefs.h no longer #includes lzma.h, so lzma.h - has to be #included separately where needed. - - src/common/sysdefs.h | 2 - - src/liblzma/api/lzma.h | 17 ++++++++++++ - src/liblzma/api/lzma/base.h | 10 +++--- - src/liblzma/api/lzma/block.h | 25 ++++++++++-------- - src/liblzma/api/lzma/check.h | 12 +++++--- - src/liblzma/api/lzma/container.h | 23 +++++++++-------- - src/liblzma/api/lzma/filter.h | 24 +++++++++--------- - src/liblzma/api/lzma/index.h | 47 ++++++++++++++++++++--------------- - src/liblzma/api/lzma/index_hash.h | 11 ++++--- - src/liblzma/api/lzma/lzma.h | 8 +++-- - src/liblzma/api/lzma/stream_flags.h | 10 +++--- - src/liblzma/api/lzma/version.h | 4 +- - src/liblzma/api/lzma/vli.h | 10 +++--- - src/liblzma/common/common.h | 13 ++++++++- - src/xz/private.h | 1 + - src/xzdec/xzdec.c | 1 + - tests/tests.h | 1 + - 17 files changed, 131 insertions(+), 88 deletions(-) - -commit d9993fcb4dfc1f93abaf31ae23b3ef1f3123892b -Author: Lasse Collin -Date: 2009-01-31 10:13:09 +0200 - - Use _WIN32 instead of WIN32 in xzdec.c to test if compiling on Windows. - - src/xzdec/xzdec.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 2dbdc5befb33c3703e4609809101047c67caf343 -Author: Lasse Collin -Date: 2009-01-31 10:02:52 +0200 - - Fix two lines in lzma.h on which the # wasn't at the - beginning of the line. - - src/liblzma/api/lzma.h | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 4ab760109106dc04f39dd81c97d50f528d1b51c1 -Author: Lasse Collin -Date: 2009-01-31 09:55:05 +0200 - - Add support for using liblzma headers in MSVC, which has no - stdint.h or inttypes.h. - - src/liblzma/api/lzma.h | 70 +++++++++++++++++++++++++++++++---------------- - 1 files changed, 46 insertions(+), 24 deletions(-) - -commit b2172cf823d3be34cb0246cb4cb32d105e2a34c9 -Author: Lasse Collin -Date: 2009-01-31 08:49:54 +0200 - - Fix # -> ## in a macro in lzma.h. - - src/liblzma/api/lzma.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 1aae8698746d3c87a93f8398cdde2de9ba1f7208 -Author: Lasse Collin -Date: 2009-01-30 18:50:16 +0200 - - Updated README. - - README | 30 ++++++++++++++++++++---------- - 1 files changed, 20 insertions(+), 10 deletions(-) - -commit f54bcf6f80d585236bc03ce49f7c73e1abaa17eb -Author: Lasse Collin -Date: 2009-01-30 00:29:58 +0200 - - Remove dangling crc64_init.c. - - src/liblzma/check/crc64_init.c | 55 ---------------------------------------- - 1 files changed, 0 insertions(+), 55 deletions(-) - -commit 982da7ed314398420c38bf154a8f759d5f18b480 -Author: Lasse Collin -Date: 2009-01-28 17:16:38 +0200 - - The .xz file format specification version 1.0.0 is now - officially released. The format has been technically the same - since 2008-11-19, but now that it is frozen, people can start - using it without a fear that the format will break. - - doc/file-format.txt | 84 +++++++++++++++++++++++++++++--------------------- - 1 files changed, 49 insertions(+), 35 deletions(-) - -commit c4683a660b4372156bdaf92f0cdc54a58f95ee6f -Author: Lasse Collin -Date: 2009-01-28 08:45:59 +0200 - - Updated THANKS. - - THANKS | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 3241317093595db9f79104faafe93cb989c9f858 -Author: Lasse Collin -Date: 2009-01-28 08:43:26 +0200 - - Fix uninitialized variables in alone_decoder.c. This bug was - triggered by the previous commit, since these variables were - not used by anything before support for a preset dictionary. - - src/liblzma/common/alone_decoder.c | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit f76e39cf930f888d460b443d18f977ebedea8b2a -Author: Lasse Collin -Date: 2009-01-27 18:36:05 +0200 - - Added initial support for preset dictionary for raw LZMA1 - and LZMA2. It is not supported by the .xz format or the xz - command line tool yet. - - src/liblzma/lz/lz_decoder.c | 35 +++++++++++++++++++++++++---------- - src/liblzma/lz/lz_decoder.h | 9 ++++++++- - src/liblzma/lz/lz_encoder.c | 18 ++++++++++++++++-- - src/liblzma/lzma/lzma2_decoder.c | 9 ++++++--- - src/liblzma/lzma/lzma2_encoder.c | 12 +++++++----- - src/liblzma/lzma/lzma_decoder.c | 10 ++++++---- - src/liblzma/lzma/lzma_decoder.h | 2 +- - src/liblzma/lzma/lzma_encoder.c | 9 ++++++++- - 8 files changed, 77 insertions(+), 27 deletions(-) - -commit 449b8c832b26c3633f3bec60095e57d2d3ada1f3 -Author: Lasse Collin -Date: 2009-01-26 20:09:17 +0200 - - Regenerate the CRC tables without trailing blanks. - - src/liblzma/check/crc32_table_be.h | 1008 ++++++++++++++++++------------------ - src/liblzma/check/crc32_table_le.h | 1008 ++++++++++++++++++------------------ - src/liblzma/check/crc64_table_be.h | 1016 ++++++++++++++++++------------------ - src/liblzma/check/crc64_table_le.h | 1016 ++++++++++++++++++------------------ - 4 files changed, 2024 insertions(+), 2024 deletions(-) - -commit 850f7400428dc9c5fd08a2f35a5bd2c9e45aede2 -Author: Jim Meyering -Date: 2009-01-19 21:37:16 +0100 - - remove trailing blanks from all but .xz files - - debug/known_sizes.c | 2 +- - extra/scanlzma/scanlzma.c | 5 ++--- - src/liblzma/check/crc32_tablegen.c | 2 +- - src/liblzma/check/crc64_tablegen.c | 2 +- - src/scripts/lzdiff.1 | 4 ++-- - src/scripts/lzmore.1 | 6 +++--- - tests/test_compress.sh | 4 ++-- - 7 files changed, 12 insertions(+), 13 deletions(-) - -commit 667481f1aad34e1ed15738e7913a9c7e256b4cf5 -Author: Lasse Collin -Date: 2009-01-26 14:34:10 +0200 - - Add lzma_block_buffer_decode(). - - src/liblzma/api/lzma/block.h | 41 ++++++++++++++ - src/liblzma/common/Makefile.am | 1 + - src/liblzma/common/block_buffer_decoder.c | 87 +++++++++++++++++++++++++++++ - 3 files changed, 129 insertions(+), 0 deletions(-) - -commit 5fb34d8324d3e7e0061df25d0086b64c8726b19d -Author: Lasse Collin -Date: 2009-01-26 14:33:28 +0200 - - Add more sanity checks to lzma_stream_buffer_decode(). - - src/liblzma/common/stream_buffer_decoder.c | 7 +++++++ - 1 files changed, 7 insertions(+), 0 deletions(-) - -commit c129748675a5daa8838df92bde32cc04f6ce61ba -Author: Lasse Collin -Date: 2009-01-26 14:33:13 +0200 - - Avoid hardcoded constant in easy.c. - - src/liblzma/common/easy.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 1859d22d75e072463db74c25bc3f5a7992e5fdf6 -Author: Lasse Collin -Date: 2009-01-26 13:06:49 +0200 - - Tiny bit better sanity check in block_util.c - - src/liblzma/common/block_util.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 2c5fe958e4bbe9b147b10c255955dfe2827fb8e7 -Author: Lasse Collin -Date: 2009-01-25 01:35:56 +0200 - - Fix a dumb bug in Block decoder, which made it return - LZMA_DATA_ERROR with valid data. The bug was added in - e114502b2bc371e4a45449832cb69be036360722. - - src/liblzma/common/block_decoder.c | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit c81f13ff29271de7293f8af3d81848b1dcae3d19 -Author: Lasse Collin -Date: 2009-01-23 22:27:50 +0200 - - Added lzma_stream_buffer_decode() and made minor cleanups. - - src/liblzma/api/lzma/block.h | 3 +- - src/liblzma/api/lzma/container.h | 51 +++++++++++++++- - src/liblzma/common/Makefile.am | 1 + - src/liblzma/common/stream_buffer_decoder.c | 91 ++++++++++++++++++++++++++++ - 4 files changed, 144 insertions(+), 2 deletions(-) - -commit 0b3318661ce749550b8531dfd469639a08930391 -Author: Lasse Collin -Date: 2009-01-22 12:53:33 +0200 - - Fix a comment. - - src/liblzma/common/common.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 9ec80355a7212a0a2f8c89d98e51b1d8b4e34eec -Author: Lasse Collin -Date: 2009-01-20 16:37:27 +0200 - - Add some single-call buffer-to-buffer coding functions. - - src/liblzma/api/lzma/block.h | 57 +++++ - src/liblzma/api/lzma/container.h | 56 +++++ - src/liblzma/api/lzma/index.h | 70 ++++++- - src/liblzma/common/Makefile.am | 2 + - src/liblzma/common/block_buffer_encoder.c | 305 ++++++++++++++++++++++++++++ - src/liblzma/common/index_decoder.c | 83 +++++++-- - src/liblzma/common/index_encoder.c | 59 +++++- - src/liblzma/common/stream_buffer_encoder.c | 138 +++++++++++++ - tests/test_index.c | 24 +++ - 9 files changed, 768 insertions(+), 26 deletions(-) - -commit d8b58d099340f8f4007b24b211ee41a7210c061c -Author: Lasse Collin -Date: 2009-01-20 13:45:41 +0200 - - Block encoder cleanups - - src/liblzma/common/block_encoder.c | 28 +++++++--------------------- - src/liblzma/common/block_encoder.h | 25 +++++++++++++++++++++++++ - 2 files changed, 32 insertions(+), 21 deletions(-) - -commit 0c09810cb3635cb575cb54e694d41523e7d0a335 -Author: Lasse Collin -Date: 2009-01-20 10:35:15 +0200 - - Use LZMA_PROG_ERROR in lzma_code() as documented in base.h. - - src/liblzma/common/common.c | 24 ++++++++---------------- - 1 files changed, 8 insertions(+), 16 deletions(-) - -commit 2f1a8e8eb898f6c036cde55d153ad348bfab3c00 -Author: Lasse Collin -Date: 2009-01-19 22:53:18 +0200 - - Fix handling of non-fatal errors in lzma_code(). - - src/liblzma/common/common.c | 9 ++++++++- - 1 files changed, 8 insertions(+), 1 deletions(-) - -commit 4810b6bc25087be872960b9dd1d11ff07735dc88 -Author: Lasse Collin -Date: 2009-01-19 14:00:33 +0200 - - Move some LZMA2 constants to lzma2_encoder.h so that they - can be used outside lzma2_encoder.c. - - src/liblzma/lzma/lzma2_encoder.c | 13 ------------- - src/liblzma/lzma/lzma2_encoder.h | 14 ++++++++++++++ - src/liblzma/lzma/lzma_encoder.c | 3 ++- - 3 files changed, 16 insertions(+), 14 deletions(-) - -commit 00be5d2e09f9c7a6a8563465ad8b8042866817a4 -Author: Lasse Collin -Date: 2009-01-19 13:52:36 +0200 - - Remove dead code. - - src/liblzma/lzma/lzma_encoder.h | 8 -------- - 1 files changed, 0 insertions(+), 8 deletions(-) - -commit 128586213f77c9bd82b7e9a62927f6d0c3769d85 -Author: Lasse Collin -Date: 2009-01-17 14:24:25 +0200 - - Beta was supposed to be API stable but I had forgot to rename - lzma_memlimit_encoder and lzma_memlimit_decoder to - lzma_raw_encoder_memlimit and lzma_raw_decoder_memlimit. :-( - Now it is fixed. Hopefully it doesn't cause too much trouble - to those who already thought API is stable. - - src/liblzma/api/lzma/filter.h | 4 ++-- - src/liblzma/common/easy.c | 4 ++-- - src/liblzma/common/filter_common.c | 2 +- - src/liblzma/common/filter_common.h | 2 +- - src/liblzma/common/filter_decoder.c | 4 ++-- - src/liblzma/common/filter_encoder.c | 4 ++-- - src/liblzma/common/stream_decoder.c | 2 +- - src/xz/process.c | 6 +++--- - 8 files changed, 14 insertions(+), 14 deletions(-) - -commit b056379490be5c584c264a967f0540041a163a1e -Author: Lasse Collin -Date: 2009-01-15 14:29:22 +0200 - - Updated THANKS. - - THANKS | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit dc8f3be06d54ef6e6cfb5134dd3d25edd08cef89 -Author: Lasse Collin -Date: 2009-01-15 14:27:32 +0200 - - Fixed a bug in 7z2lzma.bash to make it work with .7z files - that use something else than 2^n as the dictionary size. - Thanks to Dan Shechter for the bug report. - - extra/7z2lzma/7z2lzma.bash | 47 ++++++++++++++++++++++--------------------- - 1 files changed, 24 insertions(+), 23 deletions(-) - -commit 8286a60b8f4bd5accfbc9d229d2204bac31994f2 -Author: Lasse Collin -Date: 2009-01-07 18:41:15 +0200 - - Use pthread_sigmask() instead of sigprocmask() when pthreads - are enabled. - - src/common/mythread.h | 6 ++++++ - src/xz/main.c | 4 ++-- - src/xz/private.h | 1 + - 3 files changed, 9 insertions(+), 2 deletions(-) - -commit 4fd43cb3a906f6da2943f69239ee984c4787c9a9 -Author: Lasse Collin -Date: 2008-12-31 20:01:00 +0200 - - Bumped version to 4.999.8beta right after the release - of 4.999.7beta. - - configure.ac | 2 +- - src/liblzma/api/lzma/version.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 061748f5932719643cda73383db715167d543c22 -Author: Lasse Collin -Date: 2008-12-31 18:59:02 +0200 - - Disable Subblock filter from test_compress.sh since it is - disabled by default in configure.ac. - - tests/test_compress.sh | 22 +++++++++++++--------- - 1 files changed, 13 insertions(+), 9 deletions(-) - -commit 9c45658ddc8bd4a7819ef8547d3e7ccf73203e78 -Author: Lasse Collin -Date: 2008-12-31 17:44:20 +0200 - - Disable both Subblock encoder and decoder my default, - since they are not finished and may have security issues too. - - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit b59f1e98f50694cf6a8f1b342fd878feebdb2f88 -Author: Lasse Collin -Date: 2008-12-31 17:42:50 +0200 - - Update some files in debug directory. - - debug/full_flush.c | 2 -- - debug/memusage.c | 2 -- - debug/sync_flush.c | 2 -- - 3 files changed, 0 insertions(+), 6 deletions(-) - -commit d1d17a40d33a9682424ca37282813492f2cba6d0 -Author: Lasse Collin -Date: 2008-12-31 17:41:46 +0200 - - Prepare for 4.999.7beta release. - - AUTHORS | 4 ++-- - README | 34 +++++++++++++++++----------------- - configure.ac | 4 ++-- - src/liblzma/api/lzma/version.h | 2 +- - 4 files changed, 22 insertions(+), 22 deletions(-) - -commit 88d3e6b0b18e24142b6d3b41dc1b84b00c49fef3 -Author: Lasse Collin -Date: 2008-12-31 17:15:03 +0200 - - Cleaned up some comments in the API headers. - - src/liblzma/api/lzma/check.h | 23 +++++++++++------------ - src/liblzma/api/lzma/container.h | 2 +- - src/liblzma/api/lzma/version.h | 4 +++- - 3 files changed, 15 insertions(+), 14 deletions(-) - -commit 322ecf93c961e45a1da8c4a794a7fdacefcd7f40 -Author: Lasse Collin -Date: 2008-12-31 16:29:39 +0200 - - Renamed lzma_options_simple to lzma_options_bcj in the API. - The internal implementation is still using the name "simple". - It may need some cleanups, so I look at it later. - - src/liblzma/api/Makefile.am | 2 +- - src/liblzma/api/lzma.h | 2 +- - src/liblzma/api/lzma/bcj.h | 94 +++++++++++++++++++++++++++++++++++ - src/liblzma/api/lzma/simple.h | 94 ----------------------------------- - src/liblzma/simple/simple_coder.c | 2 +- - src/liblzma/simple/simple_decoder.c | 4 +- - src/liblzma/simple/simple_encoder.c | 4 +- - tests/test_filter_flags.c | 8 ++-- - 8 files changed, 105 insertions(+), 105 deletions(-) - -commit 7eea8bec3abfed883efba66264a1452a1c04f6b0 -Author: Lasse Collin -Date: 2008-12-31 00:57:27 +0200 - - Fixed missing quoting in configure.ac. - - configure.ac | 38 +++++++++++++++++++------------------- - 1 files changed, 19 insertions(+), 19 deletions(-) - -commit 28e75f7086dbe9501d926c370375c69dfb1236ce -Author: Lasse Collin -Date: 2008-12-31 00:48:23 +0200 - - Updated src/liblzma/Makefile.am to use liblzma.pc.in, which - should have been in the previous commit. - - src/liblzma/Makefile.am | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 7ed9d943b31d3ee9c5fb2387e84a241ba33afe90 -Author: Lasse Collin -Date: 2008-12-31 00:30:49 +0200 - - Remove lzma_init() and other init functions from liblzma API. - Half of developers were already forgetting to use these - functions, which could have caused total breakage in some future - liblzma version or even now if --enable-small was used. Now - liblzma uses pthread_once() to do the initializations unless - it has been built with --disable-threads which make these - initializations thread-unsafe. - - When --enable-small isn't used, liblzma currently gets needlessly - linked against libpthread (on systems that have it). While it is - stupid for now, liblzma will need threads in future anyway, so - this stupidity will be temporary only. - - When --enable-small is used, different code CRC32 and CRC64 is - now used than without --enable-small. This made the resulting - binary slightly smaller, but the main reason was to clean it up - and to handle the lack of lzma_init_check(). - - The pkg-config file lzma.pc was renamed to liblzma.pc. I'm not - sure if it works correctly and portably for static linking - (Libs.private includes -pthread or other operating system - specific flags). Hopefully someone complains if it is bad. - - lzma_rc_prices[] is now included as a precomputed array even - with --enable-small. It's just 128 bytes now that it uses uint8_t - instead of uint32_t. Smaller array seemed to be at least as fast - as the more bloated uint32_t array on x86; hopefully it's not bad - on other architectures. - - configure.ac | 29 ++++++++-- - src/common/mythread.h | 34 +++++++++++ - src/liblzma/api/Makefile.am | 1 - - src/liblzma/api/lzma.h | 1 - - src/liblzma/api/lzma/init.h | 85 ---------------------------- - src/liblzma/check/Makefile.am | 29 +++------ - src/liblzma/check/check.c | 10 ++-- - src/liblzma/check/check.h | 25 +++----- - src/liblzma/check/check_init.c | 37 ------------ - src/liblzma/check/crc32.c | 88 ----------------------------- - src/liblzma/check/crc32_fast.c | 88 +++++++++++++++++++++++++++++ - src/liblzma/check/crc32_init.c | 55 ------------------ - src/liblzma/check/crc32_small.c | 54 ++++++++++++++++++ - src/liblzma/check/crc32_tablegen.c | 55 ++++++++++++++++-- - src/liblzma/check/crc64.c | 75 ------------------------ - src/liblzma/check/crc64_fast.c | 75 ++++++++++++++++++++++++ - src/liblzma/check/crc64_small.c | 54 ++++++++++++++++++ - src/liblzma/check/crc64_tablegen.c | 55 ++++++++++++++++-- - src/liblzma/common/Makefile.am | 3 - - src/liblzma/common/common.h | 1 + - src/liblzma/common/init.c | 39 ------------- - src/liblzma/common/init_decoder.c | 31 ---------- - src/liblzma/common/init_encoder.c | 40 ------------- - src/liblzma/liblzma.pc.in | 12 ++++ - src/liblzma/lz/lz_encoder.c | 6 ++ - src/liblzma/lzma.pc.in | 11 ---- - src/liblzma/rangecoder/Makefile.am | 8 +-- - src/liblzma/rangecoder/price.h | 16 +----- - src/liblzma/rangecoder/price_table.c | 2 +- - src/liblzma/rangecoder/price_table_init.c | 55 ------------------ - src/liblzma/rangecoder/price_tablegen.c | 51 ++++++++++++++-- - src/xz/Makefile.am | 5 +- - src/xz/main.c | 3 - - src/xzdec/xzdec.c | 3 - - tests/test_block_header.c | 1 - - tests/test_check.c | 2 - - tests/test_filter_flags.c | 2 - - tests/test_index.c | 2 - - tests/test_stream_flags.c | 2 - - tests/tests.h | 2 +- - 40 files changed, 519 insertions(+), 628 deletions(-) - -commit 5cda29b5665004fc0f21d0c41d78022a6a559ab2 -Author: Lasse Collin -Date: 2008-12-27 19:40:31 +0200 - - Use 28 MiB as memory usage limit for encoding in test_compress.sh. - - tests/test_compress.sh | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 050eb14d29e2537c014662e83599fd8a77f13c45 -Author: Lasse Collin -Date: 2008-12-27 19:32:20 +0200 - - Revert a change made in 3b34851de1eaf358cf9268922fa0eeed8278d680 - that was related to LZMA_MODE_FAST. The original code is slightly - faster although it compresses slightly worse. But since it is fast - mode, it is better to select the faster version. - - src/liblzma/lzma/lzma_encoder_optimum_fast.c | 23 ++++++++--------------- - 1 files changed, 8 insertions(+), 15 deletions(-) - -commit 4820f10d0f173864f6a2ea7479663b509ac53358 -Author: Lasse Collin -Date: 2008-12-27 19:30:19 +0200 - - Some xz command line tool improvements. - - src/xz/args.c | 23 ++++----- - src/xz/message.c | 4 +- - src/xz/options.c | 2 +- - src/xz/process.c | 133 ++++++++++++++++++++++++++++++++++++++++++----------- - src/xz/process.h | 3 + - 5 files changed, 121 insertions(+), 44 deletions(-) - -commit e33194e79d8f5ce07cb4aca909b324ae75098f7e -Author: Lasse Collin -Date: 2008-12-27 19:27:49 +0200 - - Bunch of liblzma tweaks, including some API changes. - The API and ABI should now be very close to stable, - although the code behind it isn't yet. - - src/liblzma/api/lzma.h | 8 ++-- - src/liblzma/api/lzma/block.h | 63 +++++++++++++++++++++++- - src/liblzma/api/lzma/container.h | 76 ++++++++++++++-------------- - src/liblzma/api/lzma/lzma.h | 41 +++++++++------- - src/liblzma/common/alone_decoder.c | 36 +++++++------- - src/liblzma/common/alone_encoder.c | 22 +++----- - src/liblzma/common/auto_decoder.c | 2 +- - src/liblzma/common/block_decoder.c | 54 ++++++++++---------- - src/liblzma/common/block_decoder.h | 4 +- - src/liblzma/common/block_encoder.c | 37 ++++++++------ - src/liblzma/common/block_encoder.h | 4 +- - src/liblzma/common/block_header_decoder.c | 41 ++++++++------- - src/liblzma/common/block_header_encoder.c | 51 +++++++++---------- - src/liblzma/common/block_util.c | 3 +- - src/liblzma/common/easy.c | 45 ++++++----------- - src/liblzma/common/stream_decoder.c | 3 +- - src/liblzma/common/stream_decoder.h | 2 +- - src/liblzma/common/stream_encoder.c | 3 +- - src/liblzma/common/stream_encoder.h | 2 +- - src/liblzma/common/stream_flags_decoder.c | 2 +- - src/liblzma/common/stream_flags_encoder.c | 2 +- - src/liblzma/lzma/lzma_encoder.c | 2 +- - src/liblzma/lzma/lzma_encoder_presets.c | 53 ++++++-------------- - 23 files changed, 294 insertions(+), 262 deletions(-) - -commit 4d00652e75dd2736aedc3a3a8baff3dd0ea38074 -Author: Lasse Collin -Date: 2008-12-18 13:42:52 +0200 - - Updated Makefile.am that was missing from the previous commit. - - src/liblzma/common/Makefile.am | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 634636fa56ccee6e744f78b0abed76c8940f2f8f -Author: Lasse Collin -Date: 2008-12-17 21:49:53 +0200 - - Remove the alignment functions for now. Maybe they will - be added back in some form later, but the current version - wasn't modular, so it would need fixing anyway. - - src/liblzma/api/Makefile.am | 1 - - src/liblzma/api/lzma.h | 1 - - src/liblzma/api/lzma/alignment.h | 60 -------------------- - src/liblzma/common/alignment.c | 114 -------------------------------------- - 4 files changed, 0 insertions(+), 176 deletions(-) - -commit 4fed98417d1687f5eccccb42a133fde3ec81216a -Author: Lasse Collin -Date: 2008-12-17 20:11:23 +0200 - - xz message handling improvements - - src/xz/message.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++----- - src/xz/message.h | 7 +++- - src/xz/process.c | 28 +++++++++++- - 3 files changed, 146 insertions(+), 14 deletions(-) - -commit 653e457e3756ef35e5d1b2be3523b3e4b1e9ee4d -Author: Lasse Collin -Date: 2008-12-15 23:26:43 +0200 - - Fix a dumb bug in .lzma decoder which was introduced in - the previous commit. (Probably the previous commit has - other bugs too, it wasn't tested.) - - src/liblzma/common/alone_decoder.c | 29 ++++++++++++++--------------- - 1 files changed, 14 insertions(+), 15 deletions(-) - -commit 671a5adf1e844bfdd6fd327016c3c28694493158 -Author: Lasse Collin -Date: 2008-12-15 19:39:13 +0200 - - Bunch of liblzma API cleanups and fixes. - - src/liblzma/api/lzma.h | 122 +++++++++++--------- - src/liblzma/api/lzma/base.h | 174 +++++++++++++++++++---------- - src/liblzma/api/lzma/block.h | 211 +++++++++++++++++++++++------------ - src/liblzma/api/lzma/check.h | 28 +++-- - src/liblzma/api/lzma/container.h | 155 +++++++++++++------------- - src/liblzma/api/lzma/delta.h | 12 +- - src/liblzma/api/lzma/filter.h | 27 +++-- - src/liblzma/api/lzma/index.h | 97 ++++++++++++++--- - src/liblzma/api/lzma/index_hash.h | 26 +++- - src/liblzma/api/lzma/init.h | 2 +- - src/liblzma/api/lzma/lzma.h | 12 +- - src/liblzma/api/lzma/simple.h | 4 +- - src/liblzma/api/lzma/stream_flags.h | 46 +++++--- - src/liblzma/api/lzma/version.h | 6 +- - src/liblzma/api/lzma/vli.h | 17 +-- - src/liblzma/common/alone_decoder.c | 47 ++++++--- - src/liblzma/common/auto_decoder.c | 29 +++++ - src/liblzma/common/block_util.c | 52 +++++---- - src/liblzma/common/common.c | 58 ++++++++++ - src/liblzma/common/common.h | 9 ++- - src/liblzma/common/easy.c | 33 ++++-- - src/liblzma/common/filter_common.c | 2 +- - src/liblzma/common/index.c | 11 ++ - src/liblzma/common/index_decoder.c | 46 +++++++- - src/liblzma/common/stream_decoder.c | 47 +++++++- - src/liblzma/lzma/lzma2_encoder.c | 6 +- - tests/test_index.c | 10 +- - 27 files changed, 863 insertions(+), 426 deletions(-) - -commit 17781c2c20fd77029cb32e77792889f2f211d69d -Author: Lasse Collin -Date: 2008-12-15 14:26:52 +0200 - - The LZMA2 decoder fix introduced a bug to LZ decoder, - which made LZ decoder return too early after dictionary - reset. This fixes it. - - src/liblzma/lz/lz_decoder.c | 33 +++++++++++++++++++++++---------- - 1 files changed, 23 insertions(+), 10 deletions(-) - -commit f9f2d1e74398500724041f7fb3c38db35ad8c8d8 -Author: Lasse Collin -Date: 2008-12-15 11:20:22 +0200 - - Added two new test files. - - tests/files/README | 7 +++++++ - tests/files/bad-1-lzma2-8.xz | Bin 0 -> 464 bytes - tests/files/good-1-lzma2-4.xz | Bin 0 -> 464 bytes - 3 files changed, 7 insertions(+), 0 deletions(-) - -commit ff7fb2c605bccc411069e07b9f11fb957aea2ddf -Author: Lasse Collin -Date: 2008-12-15 10:01:59 +0200 - - Fix data corruption in LZMA2 decoder. - - src/liblzma/lz/lz_decoder.c | 17 ++++++++++++++++- - src/liblzma/lz/lz_decoder.h | 8 +++++--- - src/liblzma/lzma/lzma2_decoder.c | 15 +++++++++++---- - 3 files changed, 32 insertions(+), 8 deletions(-) - -commit 1ceebcf7e1bd30b95125f0ad67a09fdb6215d613 -Author: Lasse Collin -Date: 2008-12-13 00:54:11 +0200 - - Name the package "xz" in configure.ac. - - configure.ac | 11 ++++------- - 1 files changed, 4 insertions(+), 7 deletions(-) - -commit a94bf00d0af9b423851905b031be5a645a657820 -Author: Lasse Collin -Date: 2008-12-12 22:43:21 +0200 - - Some adjustments to GCC warning flags. The important change - is the removal of -pedantic. It messes up -Werror (which I - really want to keep so that I don't miss any warnings) with - printf format strings that are in POSIX but not in C99. - - configure.ac | 8 +++++--- - 1 files changed, 5 insertions(+), 3 deletions(-) - -commit 8582d392baacd2cdac07ca60041f8c661323676d -Author: Lasse Collin -Date: 2008-12-10 01:31:00 +0200 - - Remove obsolete comment. - - src/xz/message.c | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit b1ae6dd731ea3636c3c2bfc7aefa71457d3328f1 -Author: Lasse Collin -Date: 2008-12-10 01:27:15 +0200 - - Use "decompression" consistently in --long-help. - - src/xz/message.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 1ea9e7f15afd5d3981e2432710e932320597bca9 -Author: Lasse Collin -Date: 2008-12-10 01:23:58 +0200 - - Added preset=NUM to --lzma1 and --lzma2. This makes it easy - to take a preset as a template and modify it a little. - - src/xz/message.c | 1 + - src/xz/options.c | 8 ++++++++ - 2 files changed, 9 insertions(+), 0 deletions(-) - -commit bceb3918dbb21f34976bfdd4c171a81319de71f7 -Author: Lasse Collin -Date: 2008-12-09 17:43:31 +0200 - - Put the file format specification into the public domain. - Same will be done to the actual code later. - - doc/file-format.txt | 24 +++++++++--------------- - 1 files changed, 9 insertions(+), 15 deletions(-) - -commit 6efa2d80d46a38861016f41f0eb6fa2ec9260fe6 -Author: Lasse Collin -Date: 2008-12-09 17:41:49 +0200 - - Make the memusage functions of LZMA1 and LZMA2 encoders - to validate the filter options. Add missing validation - to LZMA2 encoder when options are changed in the middle - of encoding. - - src/liblzma/lzma/lzma2_encoder.c | 5 +++- - src/liblzma/lzma/lzma_encoder.c | 44 +++++++++++++++++++++++++------------ - src/liblzma/lzma/lzma_encoder.h | 2 +- - 3 files changed, 35 insertions(+), 16 deletions(-) - -commit f20a03206b71ff01b827bb7a932411d6a6a4e06a -Author: Lasse Collin -Date: 2008-12-09 10:36:24 +0200 - - Updated THANKS. - - THANKS | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit ef7890d56453dca1aeb2e12db29b7e418d93dde4 -Author: Lasse Collin -Date: 2008-12-01 23:04:12 +0200 - - In command line tool, take advantage of memusage calculation's - ability to also validate the filter chain and options (not - implemented yet for all filters). - - src/xz/process.c | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -commit ccd57afa09e332d664d6d6a7498702791ea5f659 -Author: Lasse Collin -Date: 2008-12-01 22:59:28 +0200 - - Validate the filter chain before checking filter-specific - memory usage. - - src/liblzma/common/filter_common.c | 14 ++++++++++---- - 1 files changed, 10 insertions(+), 4 deletions(-) - -commit c596fda40b62fe1683d0ac34d0c673dcaae2aa15 -Author: Lasse Collin -Date: 2008-12-01 22:58:22 +0200 - - Make the memusage functions of LZMA1 and LZMA2 decoders - to validate the filter options. - - src/liblzma/lzma/lzma2_decoder.c | 7 ++----- - src/liblzma/lzma/lzma_decoder.c | 14 ++++++++++---- - src/liblzma/lzma/lzma_decoder.h | 5 +++++ - 3 files changed, 17 insertions(+), 9 deletions(-) - -commit c58f469be5bb9b0bdab825c6687445fd553f4f3a -Author: Lasse Collin -Date: 2008-12-01 22:55:18 +0200 - - Added the changes for Delta filter that should have been - part of 656ec87882ee74b192c4ea4a233a235eca7b04d4. - - src/liblzma/common/filter_decoder.c | 2 +- - src/liblzma/common/filter_encoder.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit cd708015202dbf7585b84a8781462a20c42a324b -Author: Lasse Collin -Date: 2008-12-01 22:50:28 +0200 - - LZMA2 decoder cleanups. Make it require new LZMA properties - also in the first LZMA chunk after a dictionary reset in - uncompressed chunk. - - src/liblzma/lzma/lzma2_decoder.c | 95 ++++++++++++++++--------------------- - 1 files changed, 41 insertions(+), 54 deletions(-) - -commit 656ec87882ee74b192c4ea4a233a235eca7b04d4 -Author: Lasse Collin -Date: 2008-12-01 16:30:11 +0200 - - Added lzma_delta_coder_memusage() which also validates - the options. - - src/liblzma/delta/Makefile.am | 3 +- - src/liblzma/delta/delta_common.c | 28 +++++++++++++++++------ - src/liblzma/delta/delta_common.h | 19 +--------------- - src/liblzma/delta/delta_decoder.c | 2 +- - src/liblzma/delta/delta_decoder.h | 2 +- - src/liblzma/delta/delta_encoder.c | 14 +++-------- - src/liblzma/delta/delta_encoder.h | 2 +- - src/liblzma/delta/delta_private.h | 44 +++++++++++++++++++++++++++++++++++++ - 8 files changed, 75 insertions(+), 39 deletions(-) - -commit 691a9155b7a28882baf37e9d1e969e32e91dbc7a -Author: Lasse Collin -Date: 2008-11-29 10:03:49 +0200 - - Automake includes the m4 directory, so don't add it in - Makefile.am separately. - - Updated THANKS. - - Makefile.am | 1 - - THANKS | 1 + - 2 files changed, 1 insertions(+), 1 deletions(-) - -commit c7007ddf06ac2b0e018d71d281c21b99f16e7ae0 -Author: Lasse Collin -Date: 2008-11-28 12:00:48 +0200 - - Tested using COLUMNS environment variable to avoid broken - progress indicator but since COLUMNS isn't usually available, - the code was left commented out. - - src/xz/message.c | 14 +++++++++----- - 1 files changed, 9 insertions(+), 5 deletions(-) - -commit ae65dcfde27014e4d811e1a1308aa5d0fe8debbd -Author: Lasse Collin -Date: 2008-11-27 19:28:59 +0200 - - Cleanups to message.c. - - src/xz/message.c | 47 ++++++++++++++++++----------------------------- - 1 files changed, 18 insertions(+), 29 deletions(-) - -commit a8368b75cdcd5427299001cc42839287f27b244d -Author: Lasse Collin -Date: 2008-11-25 02:37:47 +0200 - - Remove the nowadays unneeded memory limitting malloc() wrapper. - - src/liblzma/api/Makefile.am | 1 - - src/liblzma/api/lzma.h | 1 - - src/liblzma/api/lzma/memlimit.h | 207 ------------------------- - src/liblzma/common/Makefile.am | 1 - - src/liblzma/common/memory_limiter.c | 288 ----------------------------------- - tests/Makefile.am | 2 - - tests/test_memlimit.c | 114 -------------- - 7 files changed, 0 insertions(+), 614 deletions(-) - -commit 69472ee5f055a2bb6f28106f0923e1461fd1d080 -Author: Lasse Collin -Date: 2008-11-23 15:09:03 +0200 - - VLI encoder and decoder cleanups. Made encoder return - LZMA_PROG_ERROR in single-call mode if there's no output - space. - - src/liblzma/common/vli_decoder.c | 15 +++++++++------ - src/liblzma/common/vli_encoder.c | 31 ++++++++++++++++++++++++------- - 2 files changed, 33 insertions(+), 13 deletions(-) - -commit 4249c8c15a08f55b51b7012e6aaafce3aa9eb650 -Author: Lasse Collin -Date: 2008-11-22 17:44:33 +0200 - - Typo fix - - src/xz/process.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 6d1d6f4598d121253dbe1084c6866b66e95c361b -Author: Lasse Collin -Date: 2008-11-20 22:59:10 +0200 - - Support NetBSD's errno for O_NOFOLLOW. - - src/xz/io.c | 8 ++++++++ - 1 files changed, 8 insertions(+), 0 deletions(-) - -commit f901a290eef67b8ea4720ccdf5f46edf775ed9d7 -Author: Lasse Collin -Date: 2008-11-20 18:05:52 +0200 - - Build xzdec and lzmadec from xzdec.c. xzdec supports only .xz - files and lzmadec only .lzma files. - - src/xzdec/Makefile.am | 7 +- - src/xzdec/xzdec.c | 311 +++++++++++++++++++++---------------------------- - 2 files changed, 140 insertions(+), 178 deletions(-) - -commit 86a0ed8f01c8ed44721223f885e679c71b7bb94c -Author: Lasse Collin -Date: 2008-11-20 11:01:29 +0200 - - Minor cleanups to xzdec. - - src/xzdec/xzdec.c | 20 ++++++++++---------- - 1 files changed, 10 insertions(+), 10 deletions(-) - -commit 54f716ba8905d09752dcd1519455a40bd21d5317 -Author: Lasse Collin -Date: 2008-11-19 23:55:22 +0200 - - Added missing check for uint16_t. - - configure.ac | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 1880a3927b23f265f63b2adb86fbdb81ea09eb06 -Author: Lasse Collin -Date: 2008-11-19 23:52:24 +0200 - - Renamed lzma to xz and lzmadec to xzdec. We create symlinks - lzma, unlzma, and lzcat in "make install" for backwards - compatibility with LZMA Utils 4.32.x; I'm not sure if this - should be the default though. - - configure.ac | 4 +- - po/POTFILES.in | 21 +- - src/Makefile.am | 2 +- - src/lzma/Makefile.am | 72 ---- - src/lzma/args.c | 500 -------------------------- - src/lzma/args.h | 56 --- - src/lzma/hardware.c | 122 ------- - src/lzma/hardware.h | 45 --- - src/lzma/io.c | 658 ---------------------------------- - src/lzma/io.h | 97 ----- - src/lzma/list.c | 477 ------------------------- - src/lzma/main.c | 402 --------------------- - src/lzma/main.h | 60 ---- - src/lzma/message.c | 892 ----------------------------------------------- - src/lzma/message.h | 132 ------- - src/lzma/options.c | 352 ------------------- - src/lzma/options.h | 46 --- - src/lzma/private.h | 52 --- - src/lzma/process.c | 391 --------------------- - src/lzma/process.h | 70 ---- - src/lzma/suffix.c | 213 ----------- - src/lzma/suffix.h | 40 --- - src/lzma/util.c | 199 ----------- - src/lzma/util.h | 71 ---- - src/lzmadec/Makefile.am | 29 -- - src/lzmadec/lzmadec.c | 492 -------------------------- - src/xz/Makefile.am | 74 ++++ - src/xz/args.c | 500 ++++++++++++++++++++++++++ - src/xz/args.h | 56 +++ - src/xz/hardware.c | 122 +++++++ - src/xz/hardware.h | 45 +++ - src/xz/io.c | 658 ++++++++++++++++++++++++++++++++++ - src/xz/io.h | 97 +++++ - src/xz/list.c | 477 +++++++++++++++++++++++++ - src/xz/main.c | 402 +++++++++++++++++++++ - src/xz/main.h | 60 ++++ - src/xz/message.c | 892 +++++++++++++++++++++++++++++++++++++++++++++++ - src/xz/message.h | 132 +++++++ - src/xz/options.c | 352 +++++++++++++++++++ - src/xz/options.h | 46 +++ - src/xz/private.h | 52 +++ - src/xz/process.c | 391 +++++++++++++++++++++ - src/xz/process.h | 70 ++++ - src/xz/suffix.c | 213 +++++++++++ - src/xz/suffix.h | 40 +++ - src/xz/util.c | 199 +++++++++++ - src/xz/util.h | 71 ++++ - src/xzdec/Makefile.am | 29 ++ - src/xzdec/xzdec.c | 492 ++++++++++++++++++++++++++ - tests/test_compress.sh | 29 +- - tests/test_files.sh | 4 +- - 51 files changed, 5498 insertions(+), 5500 deletions(-) - -commit e114502b2bc371e4a45449832cb69be036360722 -Author: Lasse Collin -Date: 2008-11-19 20:46:52 +0200 - - Oh well, big messy commit again. Some highlights: - - Updated to the latest, probably final file format version. - - Command line tool reworked to not use threads anymore. - Threading will probably go into liblzma anyway. - - Memory usage limit is now about 30 % for uncompression - and about 90 % for compression. - - Progress indicator with --verbose - - Simplified --help and full --long-help - - Upgraded to the last LGPLv2.1+ getopt_long from gnulib. - - Some bug fixes - - THANKS | 1 + - configure.ac | 48 +- - debug/full_flush.c | 6 +- - debug/known_sizes.c | 2 +- - debug/memusage.c | 2 +- - debug/sync_flush.c | 10 +- - doc/file-format.txt | 260 +++++---- - lib/Makefile.am | 10 +- - lib/getopt.c | 14 +- - lib/getopt.in.h | 226 +++++++ - lib/getopt1.c | 8 +- - lib/getopt_.h | 226 ------- - lib/gettext.h | 240 ------- - m4/getopt.m4 | 64 +-- - src/common/bswap.h | 15 +- - src/common/physmem.h | 4 + - src/common/sysdefs.h | 12 +- - src/liblzma/api/lzma/block.h | 47 +- - src/liblzma/api/lzma/filter.h | 8 + - src/liblzma/api/lzma/index.h | 20 +- - src/liblzma/api/lzma/index_hash.h | 4 +- - src/liblzma/common/block_decoder.c | 59 +- - src/liblzma/common/block_encoder.c | 41 +- - src/liblzma/common/block_header_decoder.c | 31 +- - src/liblzma/common/block_header_encoder.c | 69 +-- - src/liblzma/common/block_util.c | 45 +- - src/liblzma/common/common.h | 8 - - src/liblzma/common/filter_common.c | 4 +- - src/liblzma/common/index.c | 259 ++++---- - src/liblzma/common/index.h | 33 +- - src/liblzma/common/index_decoder.c | 31 +- - src/liblzma/common/index_encoder.c | 16 +- - src/liblzma/common/index_hash.c | 68 +- - src/liblzma/common/stream_decoder.c | 9 +- - src/liblzma/common/stream_encoder.c | 6 +- - src/liblzma/lz/lz_decoder.h | 4 +- - src/liblzma/subblock/subblock_decoder.c | 3 +- - src/lzma/Makefile.am | 9 +- - src/lzma/alloc.c | 106 --- - src/lzma/alloc.h | 42 -- - src/lzma/args.c | 531 +++++++--------- - src/lzma/args.h | 42 +- - src/lzma/error.c | 162 ----- - src/lzma/error.h | 67 -- - src/lzma/hardware.c | 75 ++- - src/lzma/hardware.h | 16 +- - src/lzma/help.c | 170 ----- - src/lzma/help.h | 32 - - src/lzma/io.c | 757 +++++++++++----------- - src/lzma/io.h | 51 ++- - src/lzma/main.c | 392 ++++++++---- - src/lzma/main.h | 60 ++ - src/lzma/message.c | 892 ++++++++++++++++++++++++++ - src/lzma/message.h | 132 ++++ - src/lzma/options.c | 42 +- - src/lzma/options.h | 6 +- - src/lzma/private.h | 28 +- - src/lzma/process.c | 525 +++++++-------- - src/lzma/process.h | 40 ++ - src/lzma/suffix.c | 52 +- - src/lzma/suffix.h | 17 +- - src/lzma/util.c | 100 ++-- - src/lzma/util.h | 43 ++- - src/lzmadec/lzmadec.c | 36 +- - tests/files/README | 12 +- - tests/files/bad-1-block_header-1.xz | Bin 64 -> 64 bytes - tests/files/bad-1-block_header-2.xz | Bin 64 -> 64 bytes - tests/files/bad-1-block_header-3.xz | Bin 68 -> 68 bytes - tests/files/bad-1-block_header-4.xz | Bin 72 -> 76 bytes - tests/files/bad-1-block_header-5.xz | Bin 0 -> 72 bytes - tests/files/bad-1-check-crc32.xz | Bin 68 -> 68 bytes - tests/files/bad-1-check-crc64.xz | Bin 72 -> 72 bytes - tests/files/bad-1-check-sha256.xz | Bin 96 -> 96 bytes - tests/files/bad-1-lzma2-1.xz | Bin 64 -> 64 bytes - tests/files/bad-1-lzma2-2.xz | Bin 424 -> 424 bytes - tests/files/bad-1-lzma2-3.xz | Bin 424 -> 424 bytes - tests/files/bad-1-lzma2-4.xz | Bin 408 -> 408 bytes - tests/files/bad-1-lzma2-5.xz | Bin 408 -> 408 bytes - tests/files/bad-1-lzma2-6.xz | Bin 68 -> 68 bytes - tests/files/bad-1-lzma2-7.xz | Bin 408 -> 408 bytes - tests/files/bad-1-stream_flags-1.xz | Bin 68 -> 68 bytes - tests/files/bad-1-stream_flags-2.xz | Bin 68 -> 68 bytes - tests/files/bad-1-stream_flags-3.xz | Bin 68 -> 68 bytes - tests/files/bad-1-vli-1.xz | Bin 72 -> 72 bytes - tests/files/bad-1-vli-2.xz | Bin 72 -> 76 bytes - tests/files/bad-2-compressed_data_padding.xz | Bin 92 -> 92 bytes - tests/files/bad-2-index-1.xz | Bin 92 -> 92 bytes - tests/files/bad-2-index-2.xz | Bin 92 -> 92 bytes - tests/files/bad-2-index-3.xz | Bin 92 -> 92 bytes - tests/files/bad-2-index-4.xz | Bin 92 -> 92 bytes - tests/files/bad-2-index-5.xz | Bin 0 -> 92 bytes - tests/files/good-1-3delta-lzma2.xz | Bin 528 -> 528 bytes - tests/files/good-1-block_header-1.xz | Bin 72 -> 72 bytes - tests/files/good-1-block_header-2.xz | Bin 68 -> 68 bytes - tests/files/good-1-block_header-3.xz | Bin 68 -> 68 bytes - tests/files/good-1-check-crc32.xz | Bin 68 -> 68 bytes - tests/files/good-1-check-crc64.xz | Bin 72 -> 72 bytes - tests/files/good-1-check-none.xz | Bin 64 -> 64 bytes - tests/files/good-1-check-sha256.xz | Bin 96 -> 96 bytes - tests/files/good-1-delta-lzma2.tiff.xz | Bin 51312 -> 51316 bytes - tests/files/good-1-lzma2-1.xz | Bin 424 -> 424 bytes - tests/files/good-1-lzma2-2.xz | Bin 424 -> 424 bytes - tests/files/good-1-lzma2-3.xz | Bin 408 -> 408 bytes - tests/files/good-1-sparc-lzma2.xz | Bin 2292 -> 2296 bytes - tests/files/good-1-x86-lzma2.xz | Bin 1936 -> 1936 bytes - tests/files/good-2-lzma2.xz | Bin 92 -> 92 bytes - tests/files/unsupported-block_header.xz | Bin 68 -> 68 bytes - tests/files/unsupported-check.xz | Bin 68 -> 68 bytes - tests/files/unsupported-filter_flags-1.xz | Bin 68 -> 68 bytes - tests/files/unsupported-filter_flags-2.xz | Bin 68 -> 68 bytes - tests/files/unsupported-filter_flags-3.xz | Bin 68 -> 68 bytes - tests/test_block_header.c | 16 +- - tests/test_index.c | 42 +- - 113 files changed, 3462 insertions(+), 2946 deletions(-) - -commit 3c3905b53462ae235c9438d86a4dc51086410932 -Author: Lasse Collin -Date: 2008-10-09 11:12:29 +0300 - - Fixed the test that should have been fixed as part - of 1e8e4fd1f3e50129b4541406ad765d2aa1233943. - - tests/test_block_header.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0f295bf7a3ece01f667caae318cc3e3424085886 -Author: Lasse Collin -Date: 2008-10-07 16:42:18 +0300 - - Fixed some help messages. - - src/lzma/help.c | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 1e8e4fd1f3e50129b4541406ad765d2aa1233943 -Author: Lasse Collin -Date: 2008-10-07 09:40:31 +0300 - - Made the preset numbering more logical in liblzma API. - - src/liblzma/api/lzma/container.h | 20 ++++++++++---------- - src/liblzma/api/lzma/lzma.h | 2 +- - src/liblzma/lzma/lzma_encoder_presets.c | 3 ++- - src/lzma/args.c | 8 ++++---- - src/lzma/args.h | 2 +- - 5 files changed, 18 insertions(+), 17 deletions(-) - -commit 5e4df4c3c09c82bbbb1a916784e3dc717ca4ff81 -Author: Lasse Collin -Date: 2008-10-03 19:36:09 +0300 - - Removed fi from po/LINGUAS. - - po/LINGUAS | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit fcfb86c7770328cfffa2e83b176af9a1ba2d9128 -Author: Lasse Collin -Date: 2008-10-03 07:06:48 +0300 - - Fixed suffix handling with --format=raw. - - src/lzma/suffix.c | 28 +++++++++++++++++++--------- - 1 files changed, 19 insertions(+), 9 deletions(-) - -commit bd137524f2f50e30ba054f42f1f6536cd3cee920 -Author: Lasse Collin -Date: 2008-10-02 22:51:46 +0300 - - Initial changes to change the suffix of the new format to .xz. - This also fixes a bug related to --suffix option. Some issues - with suffixes with --format=raw were not fixed. - - src/lzma/args.c | 67 ++++++++++++++++++++++++++++++------------- - src/lzma/args.h | 13 ++++---- - src/lzma/help.c | 4 +- - src/lzma/process.c | 24 +++++++++------ - src/lzma/suffix.c | 74 +++++++++++++++++++++++++++++++++++++++-------- - tests/test_compress.sh | 3 +- - 6 files changed, 133 insertions(+), 52 deletions(-) - -commit 4c321a41c482821aa3c4d64cdf886a6ed904d844 -Author: Lasse Collin -Date: 2008-09-30 17:43:55 +0300 - - Renamed the test files from .lzma suffix to .xz suffix. - - tests/files/README | 128 ++++++++++++------------ - tests/files/bad-0-backward_size.lzma | Bin 32 -> 0 bytes - tests/files/bad-0-backward_size.xz | Bin 0 -> 32 bytes - tests/files/bad-0-empty-truncated.lzma | Bin 31 -> 0 bytes - tests/files/bad-0-empty-truncated.xz | Bin 0 -> 31 bytes - tests/files/bad-0-footer_magic.lzma | Bin 32 -> 0 bytes - tests/files/bad-0-footer_magic.xz | Bin 0 -> 32 bytes - tests/files/bad-0-header_magic.lzma | Bin 32 -> 0 bytes - tests/files/bad-0-header_magic.xz | Bin 0 -> 32 bytes - tests/files/bad-0-nonempty_index.lzma | Bin 32 -> 0 bytes - tests/files/bad-0-nonempty_index.xz | Bin 0 -> 32 bytes - tests/files/bad-0cat-alone.lzma | Bin 55 -> 0 bytes - tests/files/bad-0cat-alone.xz | Bin 0 -> 55 bytes - tests/files/bad-0cat-header_magic.lzma | Bin 64 -> 0 bytes - tests/files/bad-0cat-header_magic.xz | Bin 0 -> 64 bytes - tests/files/bad-0catpad-empty.lzma | Bin 69 -> 0 bytes - tests/files/bad-0catpad-empty.xz | Bin 0 -> 69 bytes - tests/files/bad-0pad-empty.lzma | Bin 37 -> 0 bytes - tests/files/bad-0pad-empty.xz | Bin 0 -> 37 bytes - tests/files/bad-1-block_header-1.lzma | Bin 64 -> 0 bytes - tests/files/bad-1-block_header-1.xz | Bin 0 -> 64 bytes - tests/files/bad-1-block_header-2.lzma | Bin 64 -> 0 bytes - tests/files/bad-1-block_header-2.xz | Bin 0 -> 64 bytes - tests/files/bad-1-block_header-3.lzma | Bin 68 -> 0 bytes - tests/files/bad-1-block_header-3.xz | Bin 0 -> 68 bytes - tests/files/bad-1-block_header-4.lzma | Bin 72 -> 0 bytes - tests/files/bad-1-block_header-4.xz | Bin 0 -> 72 bytes - tests/files/bad-1-check-crc32.lzma | Bin 68 -> 0 bytes - tests/files/bad-1-check-crc32.xz | Bin 0 -> 68 bytes - tests/files/bad-1-check-crc64.lzma | Bin 72 -> 0 bytes - tests/files/bad-1-check-crc64.xz | Bin 0 -> 72 bytes - tests/files/bad-1-check-sha256.lzma | Bin 96 -> 0 bytes - tests/files/bad-1-check-sha256.xz | Bin 0 -> 96 bytes - tests/files/bad-1-lzma2-1.lzma | Bin 64 -> 0 bytes - tests/files/bad-1-lzma2-1.xz | Bin 0 -> 64 bytes - tests/files/bad-1-lzma2-2.lzma | Bin 424 -> 0 bytes - tests/files/bad-1-lzma2-2.xz | Bin 0 -> 424 bytes - tests/files/bad-1-lzma2-3.lzma | Bin 424 -> 0 bytes - tests/files/bad-1-lzma2-3.xz | Bin 0 -> 424 bytes - tests/files/bad-1-lzma2-4.lzma | Bin 408 -> 0 bytes - tests/files/bad-1-lzma2-4.xz | Bin 0 -> 408 bytes - tests/files/bad-1-lzma2-5.lzma | Bin 408 -> 0 bytes - tests/files/bad-1-lzma2-5.xz | Bin 0 -> 408 bytes - tests/files/bad-1-lzma2-6.lzma | Bin 68 -> 0 bytes - tests/files/bad-1-lzma2-6.xz | Bin 0 -> 68 bytes - tests/files/bad-1-lzma2-7.lzma | Bin 408 -> 0 bytes - tests/files/bad-1-lzma2-7.xz | Bin 0 -> 408 bytes - tests/files/bad-1-stream_flags-1.lzma | Bin 68 -> 0 bytes - tests/files/bad-1-stream_flags-1.xz | Bin 0 -> 68 bytes - tests/files/bad-1-stream_flags-2.lzma | Bin 68 -> 0 bytes - tests/files/bad-1-stream_flags-2.xz | Bin 0 -> 68 bytes - tests/files/bad-1-stream_flags-3.lzma | Bin 68 -> 0 bytes - tests/files/bad-1-stream_flags-3.xz | Bin 0 -> 68 bytes - tests/files/bad-1-vli-1.lzma | Bin 72 -> 0 bytes - tests/files/bad-1-vli-1.xz | Bin 0 -> 72 bytes - tests/files/bad-1-vli-2.lzma | Bin 72 -> 0 bytes - tests/files/bad-1-vli-2.xz | Bin 0 -> 72 bytes - tests/files/bad-2-compressed_data_padding.lzma | Bin 92 -> 0 bytes - tests/files/bad-2-compressed_data_padding.xz | Bin 0 -> 92 bytes - tests/files/bad-2-index-1.lzma | Bin 92 -> 0 bytes - tests/files/bad-2-index-1.xz | Bin 0 -> 92 bytes - tests/files/bad-2-index-2.lzma | Bin 92 -> 0 bytes - tests/files/bad-2-index-2.xz | Bin 0 -> 92 bytes - tests/files/bad-2-index-3.lzma | Bin 92 -> 0 bytes - tests/files/bad-2-index-3.xz | Bin 0 -> 92 bytes - tests/files/bad-2-index-4.lzma | Bin 92 -> 0 bytes - tests/files/bad-2-index-4.xz | Bin 0 -> 92 bytes - tests/files/good-0-empty.lzma | Bin 32 -> 0 bytes - tests/files/good-0-empty.xz | Bin 0 -> 32 bytes - tests/files/good-0cat-empty.lzma | Bin 64 -> 0 bytes - tests/files/good-0cat-empty.xz | Bin 0 -> 64 bytes - tests/files/good-0catpad-empty.lzma | Bin 68 -> 0 bytes - tests/files/good-0catpad-empty.xz | Bin 0 -> 68 bytes - tests/files/good-0pad-empty.lzma | Bin 36 -> 0 bytes - tests/files/good-0pad-empty.xz | Bin 0 -> 36 bytes - tests/files/good-1-3delta-lzma2.lzma | Bin 528 -> 0 bytes - tests/files/good-1-3delta-lzma2.xz | Bin 0 -> 528 bytes - tests/files/good-1-block_header-1.lzma | Bin 72 -> 0 bytes - tests/files/good-1-block_header-1.xz | Bin 0 -> 72 bytes - tests/files/good-1-block_header-2.lzma | Bin 68 -> 0 bytes - tests/files/good-1-block_header-2.xz | Bin 0 -> 68 bytes - tests/files/good-1-block_header-3.lzma | Bin 68 -> 0 bytes - tests/files/good-1-block_header-3.xz | Bin 0 -> 68 bytes - tests/files/good-1-check-crc32.lzma | Bin 68 -> 0 bytes - tests/files/good-1-check-crc32.xz | Bin 0 -> 68 bytes - tests/files/good-1-check-crc64.lzma | Bin 72 -> 0 bytes - tests/files/good-1-check-crc64.xz | Bin 0 -> 72 bytes - tests/files/good-1-check-none.lzma | Bin 64 -> 0 bytes - tests/files/good-1-check-none.xz | Bin 0 -> 64 bytes - tests/files/good-1-check-sha256.lzma | Bin 96 -> 0 bytes - tests/files/good-1-check-sha256.xz | Bin 0 -> 96 bytes - tests/files/good-1-delta-lzma2.tiff.lzma | Bin 51312 -> 0 bytes - tests/files/good-1-delta-lzma2.tiff.xz | Bin 0 -> 51312 bytes - tests/files/good-1-lzma2-1.lzma | Bin 424 -> 0 bytes - tests/files/good-1-lzma2-1.xz | Bin 0 -> 424 bytes - tests/files/good-1-lzma2-2.lzma | Bin 424 -> 0 bytes - tests/files/good-1-lzma2-2.xz | Bin 0 -> 424 bytes - tests/files/good-1-lzma2-3.lzma | Bin 408 -> 0 bytes - tests/files/good-1-lzma2-3.xz | Bin 0 -> 408 bytes - tests/files/good-1-sparc-lzma2.lzma | Bin 2292 -> 0 bytes - tests/files/good-1-sparc-lzma2.xz | Bin 0 -> 2292 bytes - tests/files/good-1-x86-lzma2.lzma | Bin 1936 -> 0 bytes - tests/files/good-1-x86-lzma2.xz | Bin 0 -> 1936 bytes - tests/files/good-2-lzma2.lzma | Bin 92 -> 0 bytes - tests/files/good-2-lzma2.xz | Bin 0 -> 92 bytes - tests/files/unsupported-block_header.lzma | Bin 68 -> 0 bytes - tests/files/unsupported-block_header.xz | Bin 0 -> 68 bytes - tests/files/unsupported-check.lzma | Bin 68 -> 0 bytes - tests/files/unsupported-check.xz | Bin 0 -> 68 bytes - tests/files/unsupported-filter_flags-1.lzma | Bin 68 -> 0 bytes - tests/files/unsupported-filter_flags-1.xz | Bin 0 -> 68 bytes - tests/files/unsupported-filter_flags-2.lzma | Bin 68 -> 0 bytes - tests/files/unsupported-filter_flags-2.xz | Bin 0 -> 68 bytes - tests/files/unsupported-filter_flags-3.lzma | Bin 68 -> 0 bytes - tests/files/unsupported-filter_flags-3.xz | Bin 0 -> 68 bytes - tests/test_files.sh | 6 +- - 116 files changed, 66 insertions(+), 68 deletions(-) - -commit 8e60c889a2816a63013a35c99ce26bf28f5b78eb -Author: Lasse Collin -Date: 2008-09-30 13:57:44 +0300 - - Fixed Stream decoder to actually use the first_stream variable. - - src/liblzma/common/stream_decoder.c | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -commit 3bdbc12c054d1961133ee19802af7dd3c3494543 -Author: Lasse Collin -Date: 2008-09-30 13:56:57 +0300 - - Added one more test file. - - tests/files/README | 15 +++++++++++---- - tests/files/bad-0cat-header_magic.lzma | Bin 0 -> 64 bytes - 2 files changed, 11 insertions(+), 4 deletions(-) - -commit a6639022fdc536e5659b070a465221b4cf7c51fa -Author: Lasse Collin -Date: 2008-09-30 13:34:07 +0300 - - Fixed uninitialized variable in Stream decoder. - - src/liblzma/common/stream_decoder.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit ed3709000a3f17ecefab29b2235d7e2221b00003 -Author: Lasse Collin -Date: 2008-09-30 13:27:28 +0300 - - Added two test files. - - tests/files/README | 6 ++++++ - tests/files/bad-0-footer_magic.lzma | Bin 0 -> 32 bytes - tests/files/bad-0-header_magic.lzma | Bin 0 -> 32 bytes - 3 files changed, 6 insertions(+), 0 deletions(-) - -commit ea560b0ea80525752bdcd0074d24f8dc170bbe29 -Author: Lasse Collin -Date: 2008-09-27 23:49:24 +0300 - - Fix conflicting Subblock helper filter's ID. - - src/liblzma/common/common.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit ad97483b6e55142fd8d5c041db057017a891cd95 -Author: Lasse Collin -Date: 2008-09-27 23:37:13 +0300 - - Changed magic bytes to match the updated spec. Filename - suffix wasn't changed yet. - - src/liblzma/common/auto_decoder.c | 4 ++-- - src/liblzma/common/stream_flags_common.c | 2 +- - tests/files/bad-0-backward_size.lzma | Bin 32 -> 32 bytes - tests/files/bad-0-empty-truncated.lzma | Bin 31 -> 31 bytes - tests/files/bad-0-nonempty_index.lzma | Bin 32 -> 32 bytes - tests/files/bad-0cat-alone.lzma | Bin 55 -> 55 bytes - tests/files/bad-0catpad-empty.lzma | Bin 69 -> 69 bytes - tests/files/bad-0pad-empty.lzma | Bin 37 -> 37 bytes - tests/files/bad-1-block_header-1.lzma | Bin 64 -> 64 bytes - tests/files/bad-1-block_header-2.lzma | Bin 64 -> 64 bytes - tests/files/bad-1-block_header-3.lzma | Bin 68 -> 68 bytes - tests/files/bad-1-block_header-4.lzma | Bin 72 -> 72 bytes - tests/files/bad-1-check-crc32.lzma | Bin 68 -> 68 bytes - tests/files/bad-1-check-crc64.lzma | Bin 72 -> 72 bytes - tests/files/bad-1-check-sha256.lzma | Bin 96 -> 96 bytes - tests/files/bad-1-lzma2-1.lzma | Bin 64 -> 64 bytes - tests/files/bad-1-lzma2-2.lzma | Bin 424 -> 424 bytes - tests/files/bad-1-lzma2-3.lzma | Bin 424 -> 424 bytes - tests/files/bad-1-lzma2-4.lzma | Bin 408 -> 408 bytes - tests/files/bad-1-lzma2-5.lzma | Bin 408 -> 408 bytes - tests/files/bad-1-lzma2-6.lzma | Bin 68 -> 68 bytes - tests/files/bad-1-lzma2-7.lzma | Bin 408 -> 408 bytes - tests/files/bad-1-stream_flags-1.lzma | Bin 68 -> 68 bytes - tests/files/bad-1-stream_flags-2.lzma | Bin 68 -> 68 bytes - tests/files/bad-1-stream_flags-3.lzma | Bin 68 -> 68 bytes - tests/files/bad-1-vli-1.lzma | Bin 72 -> 72 bytes - tests/files/bad-1-vli-2.lzma | Bin 72 -> 72 bytes - tests/files/bad-2-compressed_data_padding.lzma | Bin 92 -> 92 bytes - tests/files/bad-2-index-1.lzma | Bin 92 -> 92 bytes - tests/files/bad-2-index-2.lzma | Bin 92 -> 92 bytes - tests/files/bad-2-index-3.lzma | Bin 92 -> 92 bytes - tests/files/bad-2-index-4.lzma | Bin 92 -> 92 bytes - tests/files/good-0-empty.lzma | Bin 32 -> 32 bytes - tests/files/good-0cat-empty.lzma | Bin 64 -> 64 bytes - tests/files/good-0catpad-empty.lzma | Bin 68 -> 68 bytes - tests/files/good-0pad-empty.lzma | Bin 36 -> 36 bytes - tests/files/good-1-3delta-lzma2.lzma | Bin 528 -> 528 bytes - tests/files/good-1-block_header-1.lzma | Bin 72 -> 72 bytes - tests/files/good-1-block_header-2.lzma | Bin 68 -> 68 bytes - tests/files/good-1-block_header-3.lzma | Bin 68 -> 68 bytes - tests/files/good-1-check-crc32.lzma | Bin 68 -> 68 bytes - tests/files/good-1-check-crc64.lzma | Bin 72 -> 72 bytes - tests/files/good-1-check-none.lzma | Bin 64 -> 64 bytes - tests/files/good-1-check-sha256.lzma | Bin 96 -> 96 bytes - tests/files/good-1-delta-lzma2.tiff.lzma | Bin 51312 -> 51312 bytes - tests/files/good-1-lzma2-1.lzma | Bin 424 -> 424 bytes - tests/files/good-1-lzma2-2.lzma | Bin 424 -> 424 bytes - tests/files/good-1-lzma2-3.lzma | Bin 408 -> 408 bytes - tests/files/good-1-sparc-lzma2.lzma | Bin 2292 -> 2292 bytes - tests/files/good-1-x86-lzma2.lzma | Bin 1936 -> 1936 bytes - tests/files/good-2-lzma2.lzma | Bin 92 -> 92 bytes - tests/files/unsupported-block_header.lzma | Bin 68 -> 68 bytes - tests/files/unsupported-check.lzma | Bin 68 -> 68 bytes - tests/files/unsupported-filter_flags-1.lzma | Bin 68 -> 68 bytes - tests/files/unsupported-filter_flags-2.lzma | Bin 68 -> 68 bytes - tests/files/unsupported-filter_flags-3.lzma | Bin 68 -> 68 bytes - 56 files changed, 3 insertions(+), 3 deletions(-) - -commit 7a57069167e9e63394e2b095ee3a63253fcb51c7 -Author: Lasse Collin -Date: 2008-09-27 23:16:09 +0300 - - Remove po/fi.po since I'm not keeping it updated for now. - - po/fi.po | 446 -------------------------------------------------------------- - 1 files changed, 0 insertions(+), 446 deletions(-) - -commit 018ae09df8f2fee5a7374f307df4cb42fad0b81e -Author: Lasse Collin -Date: 2008-09-27 23:13:54 +0300 - - Fix also test_compress.sh. - - tests/test_compress.sh | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 3a62a5fb85d2eebd8666e64ed5d364d095062858 -Author: Lasse Collin -Date: 2008-09-27 23:01:15 +0300 - - Fixed compilation of test_filter_flags.c, which was broken by - 1dcecfb09b55157b8653d747963069c8bed74f04. - - tests/test_filter_flags.c | 16 ++++++++-------- - 1 files changed, 8 insertions(+), 8 deletions(-) - -commit c6ca26eef7cd07eba449035514e2b8f9ac3111c0 -Author: Lasse Collin -Date: 2008-09-27 19:11:02 +0300 - - Updated file format specification. It changes the suffix - of the new format to .xz and removes the recently added - LZMA filter. - - doc/file-format.txt | 125 +++++++++++++-------------------------------------- - 1 files changed, 32 insertions(+), 93 deletions(-) - -commit 1dcecfb09b55157b8653d747963069c8bed74f04 -Author: Lasse Collin -Date: 2008-09-27 19:09:21 +0300 - - Some API changes, bug fixes, cleanups etc. - - configure.ac | 18 +- - debug/full_flush.c | 7 +- - debug/known_sizes.c | 6 +- - debug/memusage.c | 22 ++-- - debug/sync_flush.c | 18 +- - src/liblzma/Makefile.am | 2 +- - src/liblzma/api/lzma/delta.h | 8 +- - src/liblzma/api/lzma/lzma.h | 230 +++++++++++++++--------- - src/liblzma/common/alignment.c | 7 +- - src/liblzma/common/alone_decoder.c | 11 +- - src/liblzma/common/alone_encoder.c | 9 +- - src/liblzma/common/chunk_size.c | 2 +- - src/liblzma/common/easy.c | 20 ++- - src/liblzma/common/filter_common.c | 4 +- - src/liblzma/common/filter_decoder.c | 4 +- - src/liblzma/common/filter_encoder.c | 4 +- - src/liblzma/common/init_encoder.c | 2 +- - src/liblzma/delta/delta_common.c | 12 +- - src/liblzma/delta/delta_common.h | 2 +- - src/liblzma/delta/delta_decoder.c | 2 +- - src/liblzma/delta/delta_encoder.c | 6 +- - src/liblzma/lz/lz_encoder.c | 30 ++-- - src/liblzma/lz/lz_encoder.h | 26 ++-- - src/liblzma/lz/lz_encoder_mf.c | 30 ++-- - src/liblzma/lzma/Makefile.am | 4 +- - src/liblzma/lzma/lzma2_decoder.c | 10 +- - src/liblzma/lzma/lzma2_encoder.c | 27 +-- - src/liblzma/lzma/lzma_common.h | 26 +-- - src/liblzma/lzma/lzma_decoder.c | 37 ++-- - src/liblzma/lzma/lzma_encoder.c | 51 +++--- - src/liblzma/lzma/lzma_encoder_optimum_fast.c | 10 +- - src/liblzma/lzma/lzma_encoder_optimum_normal.c | 20 +- - src/liblzma/lzma/lzma_encoder_presets.c | 50 ++++-- - src/liblzma/rangecoder/Makefile.am | 4 +- - src/liblzma/subblock/subblock_decoder.c | 2 +- - src/lzma/args.c | 33 +++-- - src/lzma/help.c | 17 +- - src/lzma/options.c | 92 ++++++---- - tests/test_block_header.c | 9 +- - tests/test_compress.sh | 4 +- - tests/test_filter_flags.c | 2 +- - 41 files changed, 482 insertions(+), 398 deletions(-) - -commit 5cc5064cae603b649c64c40125c7dd365de54c9d -Author: Lasse Collin -Date: 2008-09-27 11:28:49 +0300 - - Added 7z2lzma.bash. - - extra/7z2lzma/7z2lzma.bash | 114 ++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 114 insertions(+), 0 deletions(-) - -commit f147666a5cd15542d4e427da58629f4a71cc38e1 -Author: Lasse Collin -Date: 2008-09-17 22:11:39 +0300 - - Miscellaneous LZ and LZMA encoder cleanups - - src/liblzma/api/lzma/lzma.h | 14 ------ - src/liblzma/lz/lz_encoder.c | 8 +++- - src/liblzma/lzma/Makefile.am | 1 - - src/liblzma/lzma/lzma_encoder.c | 64 +++++++++++------------------- - src/liblzma/lzma/lzma_encoder_features.c | 59 --------------------------- - 5 files changed, 29 insertions(+), 117 deletions(-) - -commit 13d68b069849e19c33822cd8996cd6447890abb1 -Author: Lasse Collin -Date: 2008-09-13 13:54:00 +0300 - - LZ decoder cleanup - - src/liblzma/lz/lz_decoder.c | 5 ++--- - 1 files changed, 2 insertions(+), 3 deletions(-) - -commit 13a74b78e37f16c9096ba5fe1859cc04eaa2f9f7 -Author: Lasse Collin -Date: 2008-09-13 12:10:43 +0300 - - Renamed constants: - - LZMA_VLI_VALUE_MAX -> LZMA_VLI_MAX - - LZMA_VLI_VALUE_UNKNOWN -> LZMA_VLI_UNKNOWN - - LZMA_HEADER_ERRRO -> LZMA_OPTIONS_ERROR - - debug/full_flush.c | 2 +- - debug/known_sizes.c | 2 +- - debug/sync_flush.c | 2 +- - src/liblzma/api/lzma/alignment.h | 2 +- - src/liblzma/api/lzma/base.h | 4 +- - src/liblzma/api/lzma/block.h | 28 +++++++++++++------------- - src/liblzma/api/lzma/container.h | 12 +++++----- - src/liblzma/api/lzma/filter.h | 28 +++++++++++++------------- - src/liblzma/api/lzma/index.h | 2 +- - src/liblzma/api/lzma/lzma.h | 4 +- - src/liblzma/api/lzma/simple.h | 2 +- - src/liblzma/api/lzma/stream_flags.h | 20 +++++++++--------- - src/liblzma/api/lzma/vli.h | 16 +++++++------- - src/liblzma/common/alignment.c | 6 ++-- - src/liblzma/common/alone_decoder.c | 2 +- - src/liblzma/common/auto_decoder.c | 2 +- - src/liblzma/common/block_decoder.c | 12 +++++----- - src/liblzma/common/block_encoder.c | 6 ++-- - src/liblzma/common/block_header_decoder.c | 16 +++++++------- - src/liblzma/common/block_header_encoder.c | 24 +++++++++++----------- - src/liblzma/common/block_util.c | 8 +++--- - src/liblzma/common/chunk_size.c | 2 +- - src/liblzma/common/easy.c | 4 +- - src/liblzma/common/filter_common.c | 22 ++++++++++---------- - src/liblzma/common/filter_decoder.c | 6 ++-- - src/liblzma/common/filter_encoder.c | 14 ++++++------ - src/liblzma/common/index.c | 24 ++++++++++------------ - src/liblzma/common/index.h | 2 +- - src/liblzma/common/index_hash.c | 13 +++++------ - src/liblzma/common/stream_decoder.c | 4 +- - src/liblzma/common/stream_encoder.c | 4 +- - src/liblzma/common/stream_flags_common.c | 6 ++-- - src/liblzma/common/stream_flags_decoder.c | 6 ++-- - src/liblzma/common/stream_flags_encoder.c | 4 +- - src/liblzma/common/vli_encoder.c | 2 +- - src/liblzma/common/vli_size.c | 2 +- - src/liblzma/delta/delta_common.c | 2 +- - src/liblzma/delta/delta_decoder.c | 2 +- - src/liblzma/delta/delta_encoder.c | 2 +- - src/liblzma/lz/lz_decoder.c | 2 +- - src/liblzma/lz/lz_encoder.c | 2 +- - src/liblzma/lzma/lzma2_decoder.c | 6 ++-- - src/liblzma/lzma/lzma_decoder.c | 14 ++++++------ - src/liblzma/lzma/lzma_encoder.c | 8 +++--- - src/liblzma/simple/simple_coder.c | 2 +- - src/liblzma/simple/simple_decoder.c | 2 +- - src/liblzma/subblock/subblock_decoder.c | 6 ++-- - src/liblzma/subblock/subblock_encoder.c | 17 +++++++-------- - src/lzma/args.c | 2 +- - src/lzma/error.c | 2 +- - src/lzma/list.c | 6 ++-- - src/lzmadec/lzmadec.c | 2 +- - tests/test_block.c | 8 +++--- - tests/test_block_header.c | 30 ++++++++++++++-------------- - tests/test_filter_flags.c | 2 +- - tests/test_index.c | 2 +- - tests/test_stream_flags.c | 8 +++--- - tests/tests.h | 2 +- - 58 files changed, 220 insertions(+), 224 deletions(-) - -commit 320601b2c7b08fc7da9da18d5bf7c3c1a189b080 -Author: Lasse Collin -Date: 2008-09-12 22:41:40 +0300 - - Improved the Stream Flags handling API. - - src/liblzma/api/lzma/stream_flags.h | 84 +++++++++++++++++++++++++++-- - src/liblzma/common/stream_decoder.c | 5 +- - src/liblzma/common/stream_encoder.c | 2 + - src/liblzma/common/stream_flags_common.c | 28 +++++++--- - src/liblzma/common/stream_flags_common.h | 9 +++ - src/liblzma/common/stream_flags_decoder.c | 3 +- - src/liblzma/common/stream_flags_encoder.c | 10 +++- - tests/test_stream_flags.c | 8 ++- - 8 files changed, 129 insertions(+), 20 deletions(-) - -commit ec490da5228263b25bf786bb23d1008468f55b30 -Author: Lasse Collin -Date: 2008-09-11 23:10:44 +0300 - - Simplified debug/known_sizes.c to match the relaxed - requirements of Block encoder. - - debug/known_sizes.c | 14 +++++--------- - 1 files changed, 5 insertions(+), 9 deletions(-) - -commit 16e8b98f2659347edfa74afdbbb9e73311153cb9 -Author: Lasse Collin -Date: 2008-09-11 23:09:24 +0300 - - Remove a check from Block encoder that should have already - been removed in 2ba01bfa755e47ff6af84a978e3c8d63d7d2775e. - - src/liblzma/common/block_encoder.c | 5 ----- - 1 files changed, 0 insertions(+), 5 deletions(-) - -commit 5a710c3805bdf6d7e3c92e954e4e4565b27bcb13 -Author: Lasse Collin -Date: 2008-09-11 20:02:38 +0300 - - Remove bogus #includes. - - src/liblzma/common/Makefile.am | 1 - - src/liblzma/common/stream_decoder.c | 3 -- - src/liblzma/common/stream_encoder.c | 1 - - src/liblzma/common/stream_flags_decoder.h | 31 ----------------------------- - 4 files changed, 0 insertions(+), 36 deletions(-) - -commit 01892b2ca5f69bed0ea746e04b604030d57806bb -Author: Lasse Collin -Date: 2008-09-11 10:49:14 +0300 - - Updated THANKS. - - THANKS | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 962f2231d49409fe6852e44ffe8c5dbabb04bc7d -Author: Lasse Collin -Date: 2008-09-11 10:48:12 +0300 - - Fix a compiler error on big endian systems that don't - support unaligned memory access. - - src/common/integer.h | 32 ++++++++++++++++++-------------- - 1 files changed, 18 insertions(+), 14 deletions(-) - -commit fa3ab0df8ae7a8a1ad55b52266dc0fd387458671 -Author: Lasse Collin -Date: 2008-09-11 10:46:14 +0300 - - Silence a compiler warning. - - src/lzma/process.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 9373e81e18822db4972819442ea4c2cb9955470b -Author: Lasse Collin -Date: 2008-09-10 19:16:32 +0300 - - Bumped version to 4.999.6alpha. - - configure.ac | 2 +- - src/liblzma/api/lzma/version.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit cb072b7c8442ba68bb0c62c0abbbe939794887a3 -Author: Lasse Collin -Date: 2008-09-10 17:02:00 +0300 - - Check for LZMA_FILTER_RESERVED_START in filter_flags_encoder.c. - Use LZMA_PROG_ERROR instead of LZMA_HEADER_ERROR if the Filter ID - is in the reserved range. This allows Block Header encoder to - detect unallowed Filter IDs, which is good for Stream encoder. - - src/liblzma/common/filter_flags_encoder.c | 7 ++++--- - 1 files changed, 4 insertions(+), 3 deletions(-) - -commit 123ab0acec435c9e9866a99e30482116cfbd9ba5 -Author: Lasse Collin -Date: 2008-09-10 16:44:32 +0300 - - Filter handling cleanups - - src/liblzma/api/lzma/filter.h | 133 +++++++++++++++++++++++++++-------- - src/liblzma/common/filter_common.h | 3 + - src/liblzma/common/filter_decoder.c | 80 +++++++-------------- - src/liblzma/common/filter_decoder.h | 5 -- - src/liblzma/common/filter_encoder.c | 82 +++++++--------------- - src/liblzma/common/filter_encoder.h | 4 - - 6 files changed, 156 insertions(+), 151 deletions(-) - -commit 9cfcd0c4f2f865d8fbbb46ea28344a9be0dd8ad1 -Author: Lasse Collin -Date: 2008-09-10 00:33:00 +0300 - - Comments - - src/liblzma/common/stream_encoder.c | 6 +++++- - 1 files changed, 5 insertions(+), 1 deletions(-) - -commit 2ba01bfa755e47ff6af84a978e3c8d63d7d2775e -Author: Lasse Collin -Date: 2008-09-10 00:27:02 +0300 - - Cleaned up Block encoder and moved the no longer shared - code from block_private.h to block_decoder.c. Now the Block - encoder doesn't need compressed_size and uncompressed_size - from lzma_block structure to be initialized. - - src/liblzma/api/lzma/block.h | 3 - - src/liblzma/common/Makefile.am | 1 - - src/liblzma/common/block_decoder.c | 23 +++++++++- - src/liblzma/common/block_encoder.c | 92 +++++++++++++++++------------------- - src/liblzma/common/block_private.h | 47 ------------------ - 5 files changed, 66 insertions(+), 100 deletions(-) - -commit 07efcb5a6bc5d7018798ebd728586f84183e7d64 -Author: Lasse Collin -Date: 2008-09-07 10:23:13 +0300 - - Changed Filter ID of LZMA to 0x20. - - doc/file-format.txt | 4 ++-- - src/liblzma/api/lzma/lzma.h | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -commit 32fe5fa541e82c08e054086279079ae5016bd8d8 -Author: Lasse Collin -Date: 2008-09-06 23:42:50 +0300 - - Comments - - src/liblzma/api/lzma/base.h | 81 +++++++++++++++++++++++++------------- - src/liblzma/api/lzma/container.h | 6 ++- - src/liblzma/lz/lz_encoder.c | 3 +- - src/liblzma/lz/lz_encoder.h | 12 +++--- - src/liblzma/lz/lz_encoder_mf.c | 2 +- - 5 files changed, 65 insertions(+), 39 deletions(-) - -commit 0a31ed9d5e3cde4feb094b66f3a8b2c074605d84 -Author: Lasse Collin -Date: 2008-09-06 15:14:30 +0300 - - Some API cleanups - - src/liblzma/api/lzma/base.h | 314 ++++++++++++++++++++++------------- - src/liblzma/api/lzma/check.h | 10 + - src/liblzma/api/lzma/container.h | 40 +++-- - src/liblzma/common/auto_decoder.c | 18 +- - src/liblzma/common/common.c | 7 + - src/liblzma/common/common.h | 18 +- - src/liblzma/common/easy.c | 2 +- - src/liblzma/common/stream_decoder.c | 31 ++-- - src/lzma/process.c | 2 +- - src/lzmadec/lzmadec.c | 6 +- - tests/tests.h | 72 ++------ - 11 files changed, 301 insertions(+), 219 deletions(-) - -commit da98df54400998be2a6c3876f9655a3c51b93c10 -Author: Lasse Collin -Date: 2008-09-04 11:53:06 +0300 - - Added support for raw encoding and decoding to the command - line tool, and made various cleanups. --lzma was renamed to - --lzma1 to prevent people from accidentally using LZMA when - they want LZMA2. - - src/lzma/args.c | 17 +++++++++-------- - src/lzma/args.h | 1 + - src/lzma/help.c | 24 ++++++------------------ - src/lzma/process.c | 42 ++++++++++++++++++++++++++++++++++-------- - 4 files changed, 50 insertions(+), 34 deletions(-) - -commit 2496aee8a7741a8a0d42987db41ff2cf1a4bdabd -Author: Lasse Collin -Date: 2008-09-04 10:39:15 +0300 - - Don't allow LZMA_SYNC_FLUSH with decoders anymore. There's - simply nothing that would use it. Allow LZMA_FINISH to the - decoders, which will usually ignore it (auto decoder and - Stream decoder being exceptions). - - src/liblzma/common/alone_decoder.c | 1 - - src/liblzma/common/block_decoder.c | 2 +- - src/liblzma/common/filter_decoder.c | 2 +- - 3 files changed, 2 insertions(+), 3 deletions(-) - -commit bea301c26d5d52675e11e0236faec0492af98f60 -Author: Lasse Collin -Date: 2008-09-03 17:06:25 +0300 - - Minor updates to the file format specification. - - doc/file-format.txt | 105 +++++++++++++++++++++++++++++++++++++++++---------- - 1 files changed, 85 insertions(+), 20 deletions(-) - -commit 9c75b089b4a9e0edcf4cf7970a4383768707d6c8 -Author: Lasse Collin -Date: 2008-09-02 19:33:32 +0300 - - Command line tool fixes - - src/lzma/process.c | 21 +++++++++++++-------- - 1 files changed, 13 insertions(+), 8 deletions(-) - -commit bab0590504b5aeff460ab4ca8c964dd7c1bad9e4 -Author: Lasse Collin -Date: 2008-09-02 19:31:42 +0300 - - Auto decoder cleanup - - src/liblzma/common/auto_decoder.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 689602336d126a46b60d791a67decab65e1e81f5 -Author: Lasse Collin -Date: 2008-09-02 19:12:12 +0300 - - Updated auto decoder to handle LZMA_CONCATENATED when decoding - LZMA_Alone files. Decoding of concatenated LZMA_Alone files is - intentionally not supported, so it is better to put this in - auto decoder than LZMA_Alone decoder. - - src/liblzma/common/auto_decoder.c | 87 ++++++++++++++++++++++++++++++------- - 1 files changed, 71 insertions(+), 16 deletions(-) - -commit 80c4158f19904026433eb6f5d5ca98a0ecd4f66c -Author: Lasse Collin -Date: 2008-09-02 14:56:52 +0300 - - Stream decoder cleanups - - src/liblzma/common/stream_decoder.c | 57 +++++++++++++++++++--------------- - 1 files changed, 32 insertions(+), 25 deletions(-) - -commit fc681657450ce57be1fe08f7a15d31dcc705e514 -Author: Lasse Collin -Date: 2008-09-02 11:45:39 +0300 - - Some fixes to LZ encoder. - - src/liblzma/lz/lz_encoder.c | 56 +++++++++++++++++++---- - src/liblzma/lz/lz_encoder.h | 18 ++++--- - src/liblzma/lz/lz_encoder_mf.c | 95 ++++++++++++++++------------------------ - 3 files changed, 94 insertions(+), 75 deletions(-) - -commit ede675f9ac1ca82a7d7c290324adba672118bc8d -Author: Lasse Collin -Date: 2008-08-31 11:47:01 +0300 - - Fix wrong pointer calculation in LZMA encoder. - - src/liblzma/lzma/lzma_encoder.c | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit 3b34851de1eaf358cf9268922fa0eeed8278d680 -Author: Lasse Collin -Date: 2008-08-28 22:53:15 +0300 - - Sort of garbage collection commit. :-| Many things are still - broken. API has changed a lot and it will still change a - little more here and there. The command line tool doesn't - have all the required changes to reflect the API changes, so - it's easy to get "internal error" or trigger assertions. - - configure.ac | 356 +++--- - debug/Makefile.am | 5 +- - debug/crc32.c | 45 + - debug/full_flush.c | 14 +- - debug/hex2bin.c | 54 + - debug/known_sizes.c | 135 ++ - debug/memusage.c | 8 +- - debug/sync_flush.c | 20 +- - src/common/integer.h | 26 +- - src/common/sysdefs.h | 42 +- - src/liblzma/Makefile.am | 17 +- - src/liblzma/api/Makefile.am | 6 +- - src/liblzma/api/lzma.h | 161 ++- - src/liblzma/api/lzma/alignment.h | 6 +- - src/liblzma/api/lzma/alone.h | 52 - - src/liblzma/api/lzma/auto.h | 36 - - src/liblzma/api/lzma/base.h | 61 +- - src/liblzma/api/lzma/block.h | 38 +- - src/liblzma/api/lzma/check.h | 41 +- - src/liblzma/api/lzma/container.h | 252 ++++ - src/liblzma/api/lzma/delta.h | 36 +- - src/liblzma/api/lzma/easy.h | 121 -- - src/liblzma/api/lzma/filter.h | 74 +- - src/liblzma/api/lzma/index.h | 40 +- - src/liblzma/api/lzma/index_hash.h | 12 +- - src/liblzma/api/lzma/lzma.h | 222 ++-- - src/liblzma/api/lzma/memlimit.h | 15 +- - src/liblzma/api/lzma/raw.h | 60 - - src/liblzma/api/lzma/simple.h | 2 +- - src/liblzma/api/lzma/stream.h | 53 - - src/liblzma/api/lzma/stream_flags.h | 17 +- - src/liblzma/api/lzma/subblock.h | 4 +- - src/liblzma/api/lzma/version.h | 10 +- - src/liblzma/api/lzma/vli.h | 131 +-- - src/liblzma/check/check.c | 128 +-- - src/liblzma/check/check.h | 67 +- - src/liblzma/check/sha256.c | 29 +- - src/liblzma/common/Makefile.am | 51 +- - src/liblzma/common/alignment.c | 4 +- - src/liblzma/common/allocator.c | 58 - - src/liblzma/common/alone_decoder.c | 49 +- - src/liblzma/common/alone_decoder.h | 9 +- - src/liblzma/common/alone_encoder.c | 13 +- - src/liblzma/common/auto_decoder.c | 38 +- - src/liblzma/common/block_decoder.c | 67 +- - src/liblzma/common/block_decoder.h | 2 +- - src/liblzma/common/block_encoder.c | 42 +- - src/liblzma/common/block_encoder.h | 2 +- - src/liblzma/common/block_header_decoder.c | 6 +- - src/liblzma/common/block_header_encoder.c | 9 +- - src/liblzma/common/block_util.c | 10 +- - src/liblzma/common/code.c | 203 --- - src/liblzma/common/common.c | 298 +++++ - src/liblzma/common/common.h | 237 ++-- - src/liblzma/common/delta_common.c | 66 - - src/liblzma/common/delta_common.h | 44 - - src/liblzma/common/delta_decoder.c | 61 - - src/liblzma/common/delta_decoder.h | 28 - - src/liblzma/common/delta_encoder.c | 98 -- - src/liblzma/common/delta_encoder.h | 28 - - src/liblzma/common/easy.c | 18 +- - src/liblzma/common/features.c | 66 - - src/liblzma/common/filter_common.c | 262 ++++ - src/liblzma/common/filter_common.h | 52 + - src/liblzma/common/filter_decoder.c | 236 ++++ - src/liblzma/common/filter_decoder.h | 35 + - src/liblzma/common/filter_encoder.c | 308 +++++ - src/liblzma/common/filter_encoder.h | 38 + - src/liblzma/common/filter_flags_decoder.c | 185 +--- - src/liblzma/common/filter_flags_encoder.c | 261 +---- - src/liblzma/common/index_decoder.c | 14 +- - src/liblzma/common/index_encoder.c | 16 +- - src/liblzma/common/index_hash.c | 8 +- - src/liblzma/common/init_encoder.c | 2 +- - src/liblzma/common/memory_usage.c | 112 -- - src/liblzma/common/next_coder.c | 65 - - src/liblzma/common/raw_common.c | 127 -- - src/liblzma/common/raw_common.h | 30 - - src/liblzma/common/raw_decoder.c | 116 -- - src/liblzma/common/raw_decoder.h | 29 - - src/liblzma/common/raw_encoder.c | 111 -- - src/liblzma/common/raw_encoder.h | 29 - - src/liblzma/common/stream_common.c | 23 - - src/liblzma/common/stream_common.h | 31 - - src/liblzma/common/stream_decoder.c | 238 +++- - src/liblzma/common/stream_decoder.h | 4 +- - src/liblzma/common/stream_encoder.c | 35 +- - src/liblzma/common/stream_encoder.h | 2 +- - src/liblzma/common/stream_flags_common.c | 40 + - src/liblzma/common/stream_flags_common.h | 31 + - src/liblzma/common/stream_flags_decoder.c | 2 +- - src/liblzma/common/stream_flags_encoder.c | 2 +- - src/liblzma/common/stream_flags_equal.c | 36 - - src/liblzma/common/version.c | 25 - - src/liblzma/common/vli_decoder.c | 29 +- - src/liblzma/common/vli_encoder.c | 23 +- - src/liblzma/common/vli_size.c | 37 + - src/liblzma/delta/Makefile.am | 34 + - src/liblzma/delta/delta_common.c | 66 + - src/liblzma/delta/delta_common.h | 44 + - src/liblzma/delta/delta_decoder.c | 82 ++ - src/liblzma/delta/delta_decoder.h | 32 + - src/liblzma/delta/delta_encoder.c | 119 ++ - src/liblzma/delta/delta_encoder.h | 30 + - src/liblzma/lz/Makefile.am | 35 +- - src/liblzma/lz/bt2.c | 27 - - src/liblzma/lz/bt2.h | 31 - - src/liblzma/lz/bt3.c | 29 - - src/liblzma/lz/bt3.h | 31 - - src/liblzma/lz/bt4.c | 30 - - src/liblzma/lz/bt4.h | 31 - - src/liblzma/lz/hc3.c | 30 - - src/liblzma/lz/hc3.h | 31 - - src/liblzma/lz/hc4.c | 31 - - src/liblzma/lz/hc4.h | 31 - - src/liblzma/lz/lz_decoder.c | 547 +++------ - src/liblzma/lz/lz_decoder.h | 308 +++--- - src/liblzma/lz/lz_encoder.c | 780 ++++++------ - src/liblzma/lz/lz_encoder.h | 334 ++++-- - src/liblzma/lz/lz_encoder_hash.h | 104 ++ - src/liblzma/lz/lz_encoder_mf.c | 780 ++++++++++++ - src/liblzma/lz/lz_encoder_private.h | 40 - - src/liblzma/lz/match_c.h | 412 ------ - src/liblzma/lz/match_h.h | 69 - - src/liblzma/lzma/Makefile.am | 37 +- - src/liblzma/lzma/fastpos.h | 8 +- - src/liblzma/lzma/lzma2_decoder.c | 318 +++++ - src/liblzma/lzma/lzma2_decoder.h | 35 + - src/liblzma/lzma/lzma2_encoder.c | 406 ++++++ - src/liblzma/lzma/lzma2_encoder.h | 34 + - src/liblzma/lzma/lzma_common.h | 208 +++- - src/liblzma/lzma/lzma_decoder.c | 1306 ++++++++++++-------- - src/liblzma/lzma/lzma_decoder.h | 21 +- - src/liblzma/lzma/lzma_encoder.c | 576 +++++++-- - src/liblzma/lzma/lzma_encoder.h | 38 +- - src/liblzma/lzma/lzma_encoder_features.c | 2 +- - src/liblzma/lzma/lzma_encoder_getoptimum.c | 925 -------------- - src/liblzma/lzma/lzma_encoder_getoptimumfast.c | 201 --- - src/liblzma/lzma/lzma_encoder_init.c | 228 ---- - src/liblzma/lzma/lzma_encoder_optimum_fast.c | 193 +++ - src/liblzma/lzma/lzma_encoder_optimum_normal.c | 875 +++++++++++++ - src/liblzma/lzma/lzma_encoder_presets.c | 52 +- - src/liblzma/lzma/lzma_encoder_private.h | 174 +-- - src/liblzma/lzma/lzma_literal.c | 51 - - src/liblzma/lzma/lzma_literal.h | 71 -- - src/liblzma/rangecoder/Makefile.am | 10 +- - src/liblzma/rangecoder/price.h | 111 ++ - src/liblzma/rangecoder/price_table.c | 84 +- - src/liblzma/rangecoder/price_table_gen.c | 55 - - src/liblzma/rangecoder/price_table_init.c | 33 +- - src/liblzma/rangecoder/price_tablegen.c | 56 + - src/liblzma/rangecoder/range_common.h | 17 +- - src/liblzma/rangecoder/range_decoder.h | 209 ++-- - src/liblzma/rangecoder/range_encoder.h | 92 +-- - src/liblzma/simple/Makefile.am | 12 + - src/liblzma/simple/simple_coder.c | 8 +- - src/liblzma/simple/simple_decoder.c | 47 + - src/liblzma/simple/simple_decoder.h | 29 + - src/liblzma/simple/simple_encoder.c | 45 + - src/liblzma/simple/simple_encoder.h | 30 + - src/liblzma/subblock/Makefile.am | 4 +- - src/liblzma/subblock/subblock_decoder.c | 20 +- - src/liblzma/subblock/subblock_decoder_helper.c | 2 +- - src/liblzma/subblock/subblock_encoder.c | 28 +- - src/lzma/args.c | 35 +- - src/lzma/args.h | 4 +- - src/lzma/options.c | 14 +- - src/lzma/process.c | 88 +- - src/lzmadec/lzmadec.c | 157 +-- - tests/Makefile.am | 1 + - tests/files/README | 303 ++--- - tests/files/bad-0-backward_size.lzma | Bin 0 -> 32 bytes - tests/files/bad-0-empty-truncated.lzma | Bin 0 -> 31 bytes - tests/files/bad-0-nonempty_index.lzma | Bin 0 -> 32 bytes - tests/files/bad-0cat-alone.lzma | Bin 0 -> 55 bytes - tests/files/bad-0catpad-empty.lzma | Bin 0 -> 69 bytes - tests/files/bad-0pad-empty.lzma | Bin 0 -> 37 bytes - tests/files/bad-1-block_header-1.lzma | Bin 0 -> 64 bytes - tests/files/bad-1-block_header-2.lzma | Bin 0 -> 64 bytes - tests/files/bad-1-block_header-3.lzma | Bin 0 -> 68 bytes - tests/files/bad-1-block_header-4.lzma | Bin 0 -> 72 bytes - tests/files/bad-1-check-crc32.lzma | Bin 0 -> 68 bytes - tests/files/bad-1-check-crc64.lzma | Bin 0 -> 72 bytes - tests/files/bad-1-check-sha256.lzma | Bin 0 -> 96 bytes - tests/files/bad-1-lzma2-1.lzma | Bin 0 -> 64 bytes - tests/files/bad-1-lzma2-2.lzma | Bin 0 -> 424 bytes - tests/files/bad-1-lzma2-3.lzma | Bin 0 -> 424 bytes - tests/files/bad-1-lzma2-4.lzma | Bin 0 -> 408 bytes - tests/files/bad-1-lzma2-5.lzma | Bin 0 -> 408 bytes - tests/files/bad-1-lzma2-6.lzma | Bin 0 -> 68 bytes - tests/files/bad-1-lzma2-7.lzma | Bin 0 -> 408 bytes - tests/files/bad-1-stream_flags-1.lzma | Bin 0 -> 68 bytes - tests/files/bad-1-stream_flags-2.lzma | Bin 0 -> 68 bytes - tests/files/bad-1-stream_flags-3.lzma | Bin 0 -> 68 bytes - tests/files/bad-1-vli-1.lzma | Bin 0 -> 72 bytes - tests/files/bad-1-vli-2.lzma | Bin 0 -> 72 bytes - tests/files/bad-2-compressed_data_padding.lzma | Bin 0 -> 92 bytes - tests/files/bad-2-index-1.lzma | Bin 0 -> 92 bytes - tests/files/bad-2-index-2.lzma | Bin 0 -> 92 bytes - tests/files/bad-2-index-3.lzma | Bin 0 -> 92 bytes - tests/files/bad-2-index-4.lzma | Bin 0 -> 92 bytes - tests/files/bad-cat-single-none-pad_garbage_1.lzma | Bin 65 -> 0 bytes - tests/files/bad-cat-single-none-pad_garbage_2.lzma | Bin 65 -> 0 bytes - tests/files/bad-cat-single-none-pad_garbage_3.lzma | Bin 65 -> 0 bytes - tests/files/bad-multi-none-1.lzma | Bin 54 -> 0 bytes - tests/files/bad-multi-none-2.lzma | Bin 53 -> 0 bytes - tests/files/bad-multi-none-3.lzma | Bin 53 -> 0 bytes - tests/files/bad-multi-none-block_1.lzma | Bin 66 -> 0 bytes - tests/files/bad-multi-none-block_2.lzma | Bin 66 -> 0 bytes - tests/files/bad-multi-none-block_3.lzma | Bin 58 -> 0 bytes - tests/files/bad-multi-none-extra_1.lzma | Bin 54 -> 0 bytes - tests/files/bad-multi-none-extra_2.lzma | Bin 54 -> 0 bytes - tests/files/bad-multi-none-extra_3.lzma | Bin 55 -> 0 bytes - tests/files/bad-multi-none-header_1.lzma | Bin 57 -> 0 bytes - tests/files/bad-multi-none-header_2.lzma | Bin 61 -> 0 bytes - tests/files/bad-multi-none-header_3.lzma | Bin 59 -> 0 bytes - tests/files/bad-multi-none-header_4.lzma | Bin 59 -> 0 bytes - tests/files/bad-multi-none-header_5.lzma | Bin 58 -> 0 bytes - tests/files/bad-multi-none-header_6.lzma | Bin 59 -> 0 bytes - tests/files/bad-multi-none-header_7.lzma | Bin 59 -> 0 bytes - tests/files/bad-multi-none-index_1.lzma | Bin 51 -> 0 bytes - tests/files/bad-multi-none-index_2.lzma | Bin 49 -> 0 bytes - tests/files/bad-multi-none-index_3.lzma | Bin 51 -> 0 bytes - tests/files/bad-multi-none-index_4.lzma | Bin 51 -> 0 bytes - tests/files/bad-single-data_after_eopm_1.lzma | Bin 55 -> 0 bytes - tests/files/bad-single-data_after_eopm_2.lzma | Bin 56 -> 0 bytes - tests/files/bad-single-lzma-flush_beginning.lzma | Bin 53 -> 0 bytes - tests/files/bad-single-lzma-flush_twice.lzma | Bin 63 -> 0 bytes - tests/files/bad-single-none-empty.lzma | Bin 19 -> 0 bytes - .../files/bad-single-none-footer_filter_flags.lzma | Bin 30 -> 0 bytes - tests/files/bad-single-none-too_long_vli.lzma | Bin 39 -> 0 bytes - tests/files/bad-single-none-truncated.lzma | Bin 29 -> 0 bytes - tests/files/bad-single-subblock-padding_loop.lzma | Bin 43 -> 0 bytes - tests/files/bad-single-subblock1023-slow.lzma | Bin 7886 -> 0 bytes - tests/files/bad-single-subblock_subblock.lzma | Bin 26 -> 0 bytes - tests/files/good-0-empty.lzma | Bin 0 -> 32 bytes - tests/files/good-0cat-empty.lzma | Bin 0 -> 64 bytes - tests/files/good-0catpad-empty.lzma | Bin 0 -> 68 bytes - tests/files/good-0pad-empty.lzma | Bin 0 -> 36 bytes - tests/files/good-1-3delta-lzma2.lzma | Bin 0 -> 528 bytes - tests/files/good-1-block_header-1.lzma | Bin 0 -> 72 bytes - tests/files/good-1-block_header-2.lzma | Bin 0 -> 68 bytes - tests/files/good-1-block_header-3.lzma | Bin 0 -> 68 bytes - tests/files/good-1-check-crc32.lzma | Bin 0 -> 68 bytes - tests/files/good-1-check-crc64.lzma | Bin 0 -> 72 bytes - tests/files/good-1-check-none.lzma | Bin 0 -> 64 bytes - tests/files/good-1-check-sha256.lzma | Bin 0 -> 96 bytes - tests/files/good-1-delta-lzma2.tiff.lzma | Bin 0 -> 51312 bytes - tests/files/good-1-lzma2-1.lzma | Bin 0 -> 424 bytes - tests/files/good-1-lzma2-2.lzma | Bin 0 -> 424 bytes - tests/files/good-1-lzma2-3.lzma | Bin 0 -> 408 bytes - tests/files/good-1-sparc-lzma2.lzma | Bin 0 -> 2292 bytes - tests/files/good-1-x86-lzma2.lzma | Bin 0 -> 1936 bytes - tests/files/good-2-lzma2.lzma | Bin 0 -> 92 bytes - tests/files/good-cat-single-none-pad.lzma | Bin 64 -> 0 bytes - tests/files/good-multi-none-1.lzma | Bin 75 -> 0 bytes - tests/files/good-multi-none-2.lzma | Bin 53 -> 0 bytes - tests/files/good-multi-none-block_1.lzma | Bin 66 -> 0 bytes - tests/files/good-multi-none-block_2.lzma | Bin 58 -> 0 bytes - tests/files/good-multi-none-extra_1.lzma | Bin 51 -> 0 bytes - tests/files/good-multi-none-extra_2.lzma | Bin 79 -> 0 bytes - tests/files/good-multi-none-extra_3.lzma | Bin 55 -> 0 bytes - tests/files/good-multi-none-header_1.lzma | Bin 58 -> 0 bytes - tests/files/good-multi-none-header_2.lzma | Bin 66 -> 0 bytes - tests/files/good-multi-none-header_3.lzma | Bin 59 -> 0 bytes - tests/files/good-single-delta-lzma.tiff.lzma | Bin 51409 -> 0 bytes - tests/files/good-single-lzma-empty.lzma | Bin 21 -> 0 bytes - tests/files/good-single-lzma-flush_1.lzma | Bin 48 -> 0 bytes - tests/files/good-single-lzma-flush_2.lzma | Bin 63 -> 0 bytes - tests/files/good-single-lzma.lzma | Bin 44 -> 0 bytes - tests/files/good-single-none-empty_1.lzma | Bin 18 -> 0 bytes - tests/files/good-single-none-empty_2.lzma | Bin 26 -> 0 bytes - tests/files/good-single-none-empty_3.lzma | Bin 19 -> 0 bytes - tests/files/good-single-none-pad.lzma | Bin 32 -> 0 bytes - tests/files/good-single-none.lzma | Bin 30 -> 0 bytes - tests/files/good-single-sparc-lzma.lzma | Bin 2263 -> 0 bytes - tests/files/good-single-subblock-lzma.lzma | Bin 50 -> 0 bytes - tests/files/good-single-subblock_implicit.lzma | Bin 35 -> 0 bytes - tests/files/good-single-subblock_rle.lzma | Bin 118 -> 0 bytes - tests/files/good-single-x86-lzma.lzma | Bin 1909 -> 0 bytes - tests/files/malicious-multi-metadata-64PiB.lzma | Bin 51 -> 0 bytes - tests/files/malicious-single-subblock-256MiB.lzma | Bin 30 -> 0 bytes - tests/files/malicious-single-subblock-64PiB.lzma | Bin 45 -> 0 bytes - tests/files/malicious-single-subblock31-slow.lzma | Bin 1233 -> 0 bytes - tests/files/unsupported-block_header.lzma | Bin 0 -> 68 bytes - tests/files/unsupported-check.lzma | Bin 0 -> 68 bytes - tests/files/unsupported-filter_flags-1.lzma | Bin 0 -> 68 bytes - tests/files/unsupported-filter_flags-2.lzma | Bin 0 -> 68 bytes - tests/files/unsupported-filter_flags-3.lzma | Bin 0 -> 68 bytes - tests/test_block_header.c | 28 +- - tests/test_compress.sh | 4 +- - tests/test_filter_flags.c | 51 +- - tests/test_stream_flags.c | 4 +- - tests/tests.h | 8 + - 294 files changed, 9768 insertions(+), 8195 deletions(-) - -commit 57b9a145a527f0716822615e5ed536d33aebd3fc -Author: Lasse Collin -Date: 2008-06-20 17:16:32 +0300 - - Fix test_filter_flags to match the new restriction of lc+lp. - - tests/test_filter_flags.c | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit eaafc4367c77ec1d910e16d11b4da293969d97a3 -Author: Lasse Collin -Date: 2008-06-20 16:19:54 +0300 - - Remove some redundant code from LZMA encoder. - - src/liblzma/lzma/lzma_encoder.c | 15 +-------------- - 1 files changed, 1 insertions(+), 14 deletions(-) - -commit 0809c46534fa5664fe35d9e98d95e87312ed130e -Author: Lasse Collin -Date: 2008-06-19 16:35:08 +0300 - - Add limit of lc + lp <= 4. Now we can allocate the - literal coder as part of the main LZMA encoder or - decoder structure. - - Make the LZMA decoder to rely on the current internal API - to free the allocated memory in case an error occurs. - - src/liblzma/api/lzma/lzma.h | 10 +++++- - src/liblzma/lzma/lzma_decoder.c | 57 +++++++----------------------- - src/liblzma/lzma/lzma_encoder_init.c | 13 +++---- - src/liblzma/lzma/lzma_encoder_private.h | 2 +- - src/liblzma/lzma/lzma_literal.c | 39 ++++----------------- - src/liblzma/lzma/lzma_literal.h | 13 +++---- - 6 files changed, 43 insertions(+), 91 deletions(-) - -commit d25ab1b96178f06a0e724f58e3cd68300b2b1275 -Author: Lasse Collin -Date: 2008-06-18 21:45:19 +0300 - - Comments - - src/liblzma/lzma/lzma_encoder.c | 7 ++----- - 1 files changed, 2 insertions(+), 5 deletions(-) - -commit 6368a2fa5901c75864be5171dd57a50af7adbb41 -Author: Lasse Collin -Date: 2008-06-18 19:19:02 +0300 - - Delete old code that was supposed to be already deleted - from test_block_header.c. - - tests/test_block_header.c | 30 ------------------------------ - 1 files changed, 0 insertions(+), 30 deletions(-) - -commit 7d17818cec8597f847b0a2537fde991bbc3d9e96 -Author: Lasse Collin -Date: 2008-06-18 18:02:10 +0300 - - Update the code to mostly match the new simpler file format - specification. Simplify things by removing most of the - support for known uncompressed size in most places. - There are some miscellaneous changes here and there too. - - The API of liblzma has got many changes and still some - more will be done soon. While most of the code has been - updated, some things are not fixed (the command line tool - will choke with invalid filter chain, if nothing else). - - Subblock filter is somewhat broken for now. It will be - updated once the encoded format of the Subblock filter - has been decided. - - configure.ac | 41 +- - debug/full_flush.c | 16 +- - debug/sync_flush.c | 15 +- - src/common/bswap.h | 44 ++ - src/common/integer.h | 167 +++++ - src/liblzma/api/Makefile.am | 5 +- - src/liblzma/api/lzma.h | 9 +- - src/liblzma/api/lzma/alone.h | 32 +- - src/liblzma/api/lzma/auto.h | 7 +- - src/liblzma/api/lzma/base.h | 15 + - src/liblzma/api/lzma/block.h | 304 +++------- - src/liblzma/api/lzma/check.h | 18 +- - src/liblzma/api/lzma/copy.h | 29 - - src/liblzma/api/lzma/easy.h | 61 +-- - src/liblzma/api/lzma/extra.h | 114 ---- - src/liblzma/api/lzma/filter.h | 5 +- - src/liblzma/api/lzma/index.h | 204 +++++- - src/liblzma/api/lzma/index_hash.h | 94 +++ - src/liblzma/api/lzma/info.h | 315 --------- - src/liblzma/api/lzma/lzma.h | 2 +- - src/liblzma/api/lzma/metadata.h | 100 --- - src/liblzma/api/lzma/raw.h | 20 +- - src/liblzma/api/lzma/stream.h | 157 +---- - src/liblzma/api/lzma/stream_flags.h | 146 ++--- - src/liblzma/api/lzma/version.h | 2 +- - src/liblzma/api/lzma/vli.h | 83 ++-- - src/liblzma/check/Makefile.am | 1 - - src/liblzma/check/check.c | 55 ++- - src/liblzma/check/check.h | 47 +- - src/liblzma/check/check_byteswap.h | 43 -- - src/liblzma/check/crc32_init.c | 2 +- - src/liblzma/check/crc64_init.c | 2 +- - src/liblzma/check/crc_macros.h | 2 +- - src/liblzma/check/sha256.c | 53 +- - src/liblzma/common/Makefile.am | 31 +- - src/liblzma/common/alignment.c | 5 +- - src/liblzma/common/alone_decoder.c | 77 ++- - src/liblzma/common/alone_encoder.c | 99 ++-- - src/liblzma/common/auto_decoder.c | 18 +- - src/liblzma/common/block_decoder.c | 298 +++------- - src/liblzma/common/block_encoder.c | 228 ++----- - src/liblzma/common/block_header_decoder.c | 400 +++---------- - src/liblzma/common/block_header_encoder.c | 207 +++---- - src/liblzma/common/block_private.h | 51 +-- - src/liblzma/common/block_util.c | 73 +++ - src/liblzma/common/common.h | 44 +- - src/liblzma/common/copy_coder.c | 144 ----- - src/liblzma/common/copy_coder.h | 31 - - src/liblzma/common/delta_common.c | 4 - - src/liblzma/common/delta_common.h | 4 - - src/liblzma/common/delta_decoder.c | 55 +-- - src/liblzma/common/delta_encoder.c | 7 +- - src/liblzma/common/easy.c | 122 ++++ - src/liblzma/common/easy_common.c | 54 -- - src/liblzma/common/easy_common.h | 28 - - src/liblzma/common/easy_multi.c | 103 --- - src/liblzma/common/easy_single.c | 37 -- - src/liblzma/common/extra.c | 34 - - src/liblzma/common/features.c | 4 - - src/liblzma/common/filter_flags_decoder.c | 384 +++-------- - src/liblzma/common/filter_flags_encoder.c | 120 +--- - src/liblzma/common/index.c | 773 ++++++++++++++++++++--- - src/liblzma/common/index.h | 67 ++ - src/liblzma/common/index_decoder.c | 252 ++++++++ - src/liblzma/common/index_encoder.c | 222 +++++++ - src/liblzma/common/index_encoder.h | 30 + - src/liblzma/common/index_hash.c | 340 ++++++++++ - src/liblzma/common/info.c | 814 ------------------------ - src/liblzma/common/memory_usage.c | 1 - - src/liblzma/common/metadata_decoder.c | 578 ----------------- - src/liblzma/common/metadata_decoder.h | 31 - - src/liblzma/common/metadata_encoder.c | 435 ------------- - src/liblzma/common/metadata_encoder.h | 30 - - src/liblzma/common/raw_common.c | 178 ++---- - src/liblzma/common/raw_common.h | 5 +- - src/liblzma/common/raw_decoder.c | 19 +- - src/liblzma/common/raw_decoder.h | 3 +- - src/liblzma/common/raw_encoder.c | 101 +--- - src/liblzma/common/raw_encoder.h | 3 +- - src/liblzma/common/stream_common.h | 3 + - src/liblzma/common/stream_decoder.c | 458 ++++---------- - src/liblzma/common/stream_decoder.h | 28 + - src/liblzma/common/stream_encoder.c | 282 ++++++++ - src/liblzma/common/stream_encoder.h | 30 + - src/liblzma/common/stream_encoder_multi.c | 445 ------------- - src/liblzma/common/stream_encoder_multi.h | 26 - - src/liblzma/common/stream_encoder_single.c | 219 ------- - src/liblzma/common/stream_flags_decoder.c | 260 ++------- - src/liblzma/common/stream_flags_encoder.c | 56 +- - src/liblzma/common/stream_flags_equal.c | 36 + - src/liblzma/common/vli_decoder.c | 68 ++- - src/liblzma/common/vli_encoder.c | 59 +- - src/liblzma/common/vli_reverse_decoder.c | 55 -- - src/liblzma/lz/lz_decoder.c | 6 +- - src/liblzma/lz/lz_decoder.h | 10 +- - src/liblzma/lzma/lzma_decoder.c | 13 +- - src/liblzma/lzma/lzma_decoder.h | 10 +- - src/liblzma/simple/simple_coder.c | 29 +- - src/liblzma/simple/simple_private.h | 4 - - src/liblzma/subblock/subblock_decoder.c | 106 +--- - src/liblzma/subblock/subblock_decoder_helper.c | 5 +- - src/liblzma/subblock/subblock_encoder.c | 8 +- - src/lzma/args.c | 22 +- - src/lzma/args.h | 2 - - src/lzma/error.c | 6 + - src/lzma/process.c | 26 +- - src/lzmadec/lzmadec.c | 8 +- - tests/Makefile.am | 5 +- - tests/test_block_header.c | 411 +++++-------- - tests/test_compress.sh | 65 +-- - tests/test_filter_flags.c | 116 ++--- - tests/test_index.c | 504 ++++++++++++++- - tests/test_info.c | 717 --------------------- - tests/test_stream_flags.c | 134 ++-- - tests/tests.h | 14 +- - 115 files changed, 4845 insertions(+), 8155 deletions(-) - -commit bf6348d1a3ff09fdc06940468f318f75ffa6af11 -Author: Lasse Collin -Date: 2008-06-17 15:03:46 +0300 - - Update the file format specification draft. The new one is - a lot simpler than the previous versions, but it also means - that the existing code will change a lot. - - doc/file-format.txt | 1794 +++++++++++++++------------------------------------ - 1 files changed, 508 insertions(+), 1286 deletions(-) - -commit 803194ddd26f01ff60ba4e9924c6087a56b29827 -Author: Lasse Collin -Date: 2008-06-11 21:42:47 +0300 - - Fix uninitialized variable in LZMA encoder. This was - introduced in 369f72fd656f537a9a8e06f13e6d0d4c242be22f. - - src/liblzma/lzma/lzma_encoder_init.c | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 0ea98e52ba87453497b1355c51f13bad55c8924a -Author: Lasse Collin -Date: 2008-06-11 15:08:44 +0300 - - Improve command line integer parsing a little in lzma and - lzmadec to make them accept also KiB in addition Ki etc. - Fix also memory usage information in lzmadec --help. - - src/lzma/util.c | 23 ++++++++++++++--------- - src/lzmadec/lzmadec.c | 31 ++++++++++++++++++------------- - 2 files changed, 32 insertions(+), 22 deletions(-) - -commit 436fa5fae96d4e35759aed33066060f09ee8c6ef -Author: Lasse Collin -Date: 2008-06-10 20:36:12 +0300 - - s/decompressed/compressed/ in the command line tool's - error message. - - src/lzma/main.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 369f72fd656f537a9a8e06f13e6d0d4c242be22f -Author: Lasse Collin -Date: 2008-06-01 12:48:17 +0300 - - Fix a buffer overflow in the LZMA encoder. It was due to my - misunderstanding of the code. There's no tiny fix for this - problem, so I also cleaned up the code in general. - - This reduces the speed of the encoder 2-5 % in the fastest - compression mode ("lzma -1"). High compression modes should - have no noticeable performance difference. - - This commit breaks things (especially LZMA_SYNC_FLUSH) but I - will fix them once the new format and LZMA2 has been roughly - implemented. Plain LZMA won't support LZMA_SYNC_FLUSH at all - and won't be supported in the new .lzma format. This may - change still but this is what it looks like now. - - Support for known uncompressed size (that is, LZMA or LZMA2 - without EOPM) is likely to go away. This means there will - be API changes. - - src/liblzma/lz/lz_encoder.c | 113 +----- - src/liblzma/lz/lz_encoder.h | 18 +- - src/liblzma/lzma/lzma_encoder.c | 551 +++++++++++------------- - src/liblzma/lzma/lzma_encoder_getoptimum.c | 59 ++- - src/liblzma/lzma/lzma_encoder_getoptimumfast.c | 4 +- - src/liblzma/lzma/lzma_encoder_init.c | 9 +- - src/liblzma/lzma/lzma_encoder_private.h | 15 +- - src/liblzma/rangecoder/range_encoder.h | 383 +++++++++-------- - 8 files changed, 532 insertions(+), 620 deletions(-) - -commit e55e0e873ce2511325749d415ae547d62ab5f00d -Author: Lasse Collin -Date: 2008-05-30 11:53:41 +0300 - - Typo fixes from meyering. - - doc/faq.txt | 4 ++-- - doc/liblzma-advanced.txt | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -commit ed6664146fcbe9cc4a3b23b31632182ed812ea93 -Author: Lasse Collin -Date: 2008-05-11 14:24:42 +0300 - - Remove support for pre-C89 libc versions that lack memcpy, - memmove, and memset. - - configure.ac | 2 +- - src/common/sysdefs.h | 15 ++------------- - src/liblzma/common/allocator.c | 2 +- - 3 files changed, 4 insertions(+), 15 deletions(-) - -commit b09464bf9ae694afc2d1dc26188ac4e2e8af0a63 -Author: Lasse Collin -Date: 2008-05-11 14:17:21 +0300 - - Improved C99 compiler detection in configure.ac. It will - pass -std=gnu99 instead of -std=c99 to GCC now, but -pedantic - should still give warnings about GNU extensions like before - except with some special keywords like asm(). - - configure.ac | 24 ++++++++++++------------ - 1 files changed, 12 insertions(+), 12 deletions(-) - -commit 11de5d5267f7a0a7f0a4d34eec147e65eaf9f9cf -Author: Lasse Collin -Date: 2008-05-06 15:15:07 +0300 - - Bunch of grammar fixes from meyering. - - doc/liblzma-security.txt | 8 ++++---- - src/liblzma/api/lzma/memlimit.h | 6 +++--- - src/lzma/help.c | 2 +- - tests/files/README | 2 +- - 4 files changed, 9 insertions(+), 9 deletions(-) - -commit dc192b6343ae36276c85fcf7ef6006147816eadc -Author: Lasse Collin -Date: 2008-05-06 13:41:05 +0300 - - Typo fix - - src/liblzma/api/lzma/init.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 944b62b93239b27b338d117f2668c0e95849659b -Author: Lasse Collin -Date: 2008-05-04 22:29:27 +0300 - - Don't print an error message on broken pipe unless --verbose - is used. - - src/lzma/io.c | 15 ++++++++++++++- - 1 files changed, 14 insertions(+), 1 deletions(-) - -commit 8e074349e47ea6832b8fdf9244e581d453733433 -Author: Lasse Collin -Date: 2008-04-30 22:16:17 +0300 - - Fix a crash with --format=alone if other filters than LZMA - are specified on the command line. - - src/lzma/args.c | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -commit 2f361ac19b7fd3abcd362de4d470e6a9eb495b73 -Author: Lasse Collin -Date: 2008-04-28 17:08:27 +0300 - - Updated THANKS. - - THANKS | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 3be21fb12f4cec2cf07799e8960382f4cb375369 -Author: Lasse Collin -Date: 2008-04-28 17:06:34 +0300 - - Fixed wrong spelling "limitter" to "limiter". This affects - liblzma's API. - - doc/liblzma-security.txt | 14 +- - src/liblzma/api/lzma/base.h | 4 +- - src/liblzma/api/lzma/memlimit.h | 10 +- - src/liblzma/api/lzma/stream.h | 4 +- - src/liblzma/common/Makefile.am | 2 +- - src/liblzma/common/memory_limiter.c | 288 ++++++++++++++++++++++++++++++++++ - src/liblzma/common/memory_limitter.c | 288 ---------------------------------- - src/lzma/list.c | 6 +- - src/lzmadec/lzmadec.c | 12 +- - tests/test_memlimit.c | 4 +- - 10 files changed, 316 insertions(+), 316 deletions(-) - -commit beeb81060821dfec4e7898e0d44b7900dcb2215e -Author: Lasse Collin -Date: 2008-04-25 15:39:50 +0300 - - Prevent LZ encoder from hanging with known uncompressed - size. The "fix" breaks LZMA_SYNC_FLUSH at end of stream - with known uncompressed size, but since it currently seems - likely that support for encoding with known uncompressed - size will go away anyway, I'm not fixing this problem now. - - src/liblzma/lz/lz_encoder.c | 9 +++++++-- - 1 files changed, 7 insertions(+), 2 deletions(-) - -commit c324325f9f13cdeb92153c5d00962341ba070ca2 -Author: Lasse Collin -Date: 2008-04-25 13:58:56 +0300 - - Removed src/liblzma/common/sysdefs.h symlink, which was - annoying, because "make dist" put two copies of sysdefs.h - into the tarball instead of the symlink. - - src/liblzma/check/crc32_table.c | 2 +- - src/liblzma/check/crc64_table.c | 2 +- - src/liblzma/common/Makefile.am | 1 - - src/liblzma/common/common.h | 2 +- - src/liblzma/common/sysdefs.h | 1 - - 5 files changed, 3 insertions(+), 5 deletions(-) - -commit d3ba30243c75c13d094de1793f9c58acdbacc692 -Author: Lasse Collin -Date: 2008-04-25 13:41:29 +0300 - - Added memusage.c to debug directory. - - debug/Makefile.am | 3 +- - debug/memusage.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 57 insertions(+), 1 deletions(-) - -commit 8f804c29aa8471ccd6438ddca254092b8869ca52 -Author: Lasse Collin -Date: 2008-04-25 13:32:35 +0300 - - Bumped version number to 4.999.3alpha. It will become 5.0.0 - once we have a stable release (won't be very soon). The - version number is no longer related to version of LZMA SDK. - - Made some small Automake-related changes to toplevel - Makefile.am and configure.ac. - - Makefile.am | 7 +++++-- - README | 29 +++++++++++++++++++++++++++++ - configure.ac | 4 ++-- - src/liblzma/api/lzma/version.h | 22 ++++++++++------------ - 4 files changed, 46 insertions(+), 16 deletions(-) - -commit c99037ea10f121cbacf60c37a36c29768ae53447 -Author: Lasse Collin -Date: 2008-04-24 20:25:39 +0300 - - Fix a memory leak by calling free(extra->data) in - lzma_extra_free(). - - src/liblzma/common/extra.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 22ba3b0b5043fa481903482ce85015fe775939e5 -Author: Lasse Collin -Date: 2008-04-24 20:23:05 +0300 - - Make unlzma and lzcat symlinks. - - src/lzma/Makefile.am | 12 ++++++++++++ - 1 files changed, 12 insertions(+), 0 deletions(-) - -commit 17c36422d4cbc2c70d5c83ec389406f92cd9e85e -Author: Lasse Collin -Date: 2008-04-24 20:20:27 +0300 - - Fixed a bug in command line option parsing. - - src/lzma/options.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 283f939974c32c47f05d495e8dea455ec646ed64 -Author: Lasse Collin -Date: 2008-04-24 20:19:20 +0300 - - Added two assert()s. - - src/liblzma/lzma/lzma_encoder.c | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit eb348a60b6e19a7c093f892434f23c4756973ffd -Author: Lasse Collin -Date: 2008-04-24 19:22:53 +0300 - - Switch to uint16_t as the type of range coder probabilities. - - src/liblzma/rangecoder/range_common.h | 25 +++++++++++++++++++------ - 1 files changed, 19 insertions(+), 6 deletions(-) - -commit 6c5306e312bcfd254cf654f88c04e34ba786df3d -Author: Lasse Collin -Date: 2008-04-24 18:39:57 +0300 - - Fix wrong return type (uint32_t -> bool). - - src/liblzma/lz/lz_encoder.c | 2 +- - src/liblzma/lz/lz_encoder.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 712cfe3ebfd24df24d8896b1315c53c3bc4369c8 -Author: Lasse Collin -Date: 2008-04-24 18:38:00 +0300 - - Fix data corruption in LZ encoder with LZMA_SYNC_FLUSH. - - src/liblzma/lz/lz_encoder.c | 16 ++++++++++++++++ - src/liblzma/lz/lz_encoder.h | 4 ++++ - src/liblzma/lz/match_c.h | 23 ++++++++++++++++++----- - 3 files changed, 38 insertions(+), 5 deletions(-) - -commit bc04486e368d20b3027cde625267762aae063965 -Author: Lasse Collin -Date: 2008-04-24 17:33:01 +0300 - - Fix fastpos problem in Makefile.am when built with --enable-small. - - src/liblzma/lzma/Makefile.am | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit 7ab493924e0ed590a5121a15ee54038d238880d3 -Author: Lasse Collin -Date: 2008-04-24 17:30:51 +0300 - - Use 64-bit integer as range encoder's cache size. This fixes a - theoretical data corruption, which should be very hard to trigger - even intentionally. - - src/liblzma/rangecoder/range_encoder.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 641998c3e1ecc8b598fe0eb051fab8b9535c291b -Author: Lasse Collin -Date: 2008-03-24 16:38:40 +0200 - - Replaced the range decoder optimization that used arithmetic - right shift with as fast version that doesn't need - arithmetic right shift. Removed the related check from - configure.ac. - - configure.ac | 1 - - m4/ax_c_arithmetic_rshift.m4 | 36 --------------------- - src/liblzma/rangecoder/range_decoder.h | 53 +++++++++---------------------- - 3 files changed, 16 insertions(+), 74 deletions(-) - -commit ad999efd279d95f1e7ac555b14170e8e9020488c -Author: Lasse Collin -Date: 2008-03-22 14:39:34 +0200 - - Take advantage of arithmetic right shift in range decoder. - - src/liblzma/rangecoder/range_decoder.h | 52 ++++++++++++++++++++++--------- - 1 files changed, 37 insertions(+), 15 deletions(-) - -commit 03e0e8a0d7228b6ff1f0af39e2c040a4e425973d -Author: Lasse Collin -Date: 2008-03-22 14:18:29 +0200 - - Added autoconf check to detect if we can use arithmetic - right shift for optimizations. - - configure.ac | 1 + - m4/ax_c_arithmetic_rshift.m4 | 36 ++++++++++++++++++++++++++++++++++++ - 2 files changed, 37 insertions(+), 0 deletions(-) - -commit 7521bbdc83acab834594a22bec50c8e1bd836298 -Author: Lasse Collin -Date: 2008-03-22 01:26:36 +0200 - - Update a comment to use the variable name rep_len_decoder. - - (And BTW, the previous commit actually did change the - program logic slightly.) - - src/liblzma/lzma/lzma_decoder.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 63b74d000eedaebb8485f623e56864ff5ab71064 -Author: Lasse Collin -Date: 2008-03-22 00:57:33 +0200 - - Demystified the "state" variable in LZMA code. Use the - word literal instead of char for better consistency. - There are still some names with _char instead of _literal - in lzma_optimum, these may be changed later. - - Renamed length coder variables. - - This commit doesn't change the program logic. - - src/liblzma/lzma/lzma_common.h | 69 +++++++++++++++++++++------- - src/liblzma/lzma/lzma_decoder.c | 47 ++++++++++--------- - src/liblzma/lzma/lzma_encoder.c | 14 +++--- - src/liblzma/lzma/lzma_encoder_getoptimum.c | 34 +++++++------- - src/liblzma/lzma/lzma_encoder_init.c | 5 +- - src/liblzma/lzma/lzma_encoder_private.h | 8 ++-- - 6 files changed, 107 insertions(+), 70 deletions(-) - -commit e6eb0a26757e851cef62b9440319a8e73b015cb9 -Author: Lasse Collin -Date: 2008-03-14 23:16:11 +0200 - - Fix data corruption in LZMA encoder. Note that this bug was - specific to liblzma and was *not* present in LZMA SDK. - - src/liblzma/lzma/lzma_encoder.c | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 7d516f5129e4373a6d57249d7f608c634c66bf12 -Author: Lasse Collin -Date: 2008-03-14 21:32:37 +0200 - - Fix a comment API header. - - src/liblzma/api/lzma/lzma.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 748d6e4274921a350bd0a317380309717441ef9c -Author: Lasse Collin -Date: 2008-03-12 23:14:50 +0200 - - Make lzma_stream.next_in const. Let's see if anyone complains. - - src/liblzma/api/lzma/base.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit bfde3b24a5ae25ce53c854762b6148952386b025 -Author: Lasse Collin -Date: 2008-03-11 15:35:34 +0200 - - Apply a minor speed optimization to LZMA decoder. - - src/liblzma/lzma/lzma_decoder.c | 85 ++++++++++++++++++++------------------- - 1 files changed, 43 insertions(+), 42 deletions(-) - -commit f310c50286d9e4e9c6170bb65348c9bb430a65b4 -Author: Lasse Collin -Date: 2008-03-11 15:17:16 +0200 - - Initialize the last byte of the dictionary to zero so that - lz_get_byte(lz, 0) returns zero. This was broken by - 1a3b21859818e4d8e89a1da99699233c1bfd197d. - - src/liblzma/lz/lz_decoder.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 5ead36cf7f823093672a4e43c3180b38c9abbaff -Author: Lasse Collin -Date: 2008-03-10 15:57:55 +0200 - - Really fix the price count initialization. - - src/liblzma/lzma/lzma_encoder_init.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit d4d7feb83d1a1ded8f662a82e21e053841ca726c -Author: Lasse Collin -Date: 2008-03-10 13:47:17 +0200 - - Updated THANKS. - - THANKS | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 0541c5ea63ef3c0ff85eeddb0a420e56b0c65258 -Author: Lasse Collin -Date: 2008-03-10 13:46:48 +0200 - - Initialize align_price_count and match_price_count in - lzma_encoder_init.c. While we don't call - fill_distances_prices() and fill_align_prices() in - lzma_lzma_encoder_init(), we still need to initialize - these two variables so that the fill functions get - called in lzma_encoder_getoptimum.c in the beginning - of a stream. - - src/liblzma/lzma/lzma_encoder_init.c | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -commit 596fa1fac72823e4ef5bc26bb53f9090445bf748 -Author: Lasse Collin -Date: 2008-03-10 13:44:29 +0200 - - Always initialize lz->temp_size in lz_decoder.c. temp_size did - get initialized as a side-effect after allocating a new decoder, - but not when the decoder was reused. - - src/liblzma/lz/lz_decoder.c | 11 ++++++----- - 1 files changed, 6 insertions(+), 5 deletions(-) - -commit 45e43e169527e7a98a8c8a821d37bf25822b764d -Author: Lasse Collin -Date: 2008-03-10 13:41:25 +0200 - - Don't fill allocated memory with 0xFD when debugging is - enabled. It hides errors from Valgrind. - - src/liblzma/common/allocator.c | 7 ++++--- - 1 files changed, 4 insertions(+), 3 deletions(-) - -commit c0e19e0662205f81a86da8903cdc325d50635870 -Author: Lasse Collin -Date: 2008-02-28 10:24:31 +0200 - - Remove two redundant validity checks from the LZMA decoder. - These are already checked elsewhere, so omitting these - gives (very) tiny speed up. - - src/liblzma/lzma/lzma_decoder.c | 23 ++++------------------- - 1 files changed, 4 insertions(+), 19 deletions(-) - -commit de7485806284d1614095ae8cb2ebbb5d74c9ac45 -Author: Lasse Collin -Date: 2008-02-06 13:25:32 +0200 - - Tiny clean up to file-format.txt. - - doc/file-format.txt | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 1a3b21859818e4d8e89a1da99699233c1bfd197d -Author: Lasse Collin -Date: 2008-02-02 14:51:06 +0200 - - Don't memzero() the history buffer when initializing LZ - decoder. There's no danger of information leak here, so - it isn't required. Doing memzero() takes a lot of time - with large dictionaries, which could make it easier to - construct DoS attack to consume too much CPU time. - - src/liblzma/lz/lz_decoder.c | 7 +++---- - 1 files changed, 3 insertions(+), 4 deletions(-) - -commit 7e796e312bf644ea95aea0ff85480f47cfa30fc0 -Author: Lasse Collin -Date: 2008-02-01 08:39:26 +0200 - - Do uncompressed size validation in raw encoder. This way - it gets done for not only raw encoder, but also Block - and LZMA_Alone encoders. - - src/liblzma/common/raw_encoder.c | 90 ++++++++++++++++++++++++++++++------- - 1 files changed, 73 insertions(+), 17 deletions(-) - -commit 7dd48578a3853e0cfab9f1830bc30927173ec4bc -Author: Lasse Collin -Date: 2008-02-01 08:32:05 +0200 - - Avoid unneeded function call in raw_common.c. - - src/liblzma/common/raw_common.c | 20 +++++++++++--------- - 1 files changed, 11 insertions(+), 9 deletions(-) - -commit b596fac963c3ff96f615d4d9b427a213ec341211 -Author: Lasse Collin -Date: 2008-01-26 21:42:38 +0200 - - Updated THANKS. - - THANKS | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit e9f6e9c075ad93141a568d94f7d4eb0f2edbd6c2 -Author: Lasse Collin -Date: 2008-01-26 21:40:23 +0200 - - Added note.GNU-stack to x86 assembler files. It is needed - when using non-executable stack. - - src/liblzma/check/crc32_x86.S | 9 +++++++++ - src/liblzma/check/crc64_x86.S | 9 +++++++++ - 2 files changed, 18 insertions(+), 0 deletions(-) - -commit 4c7ad179c78f97f68ad548cb40a9dfa6871655ae -Author: Lasse Collin -Date: 2008-01-26 19:12:50 +0200 - - Added api/lzma/easy.h. I had forgot to add this to the - git repo. Thanks to Stephan Kulow. - - src/liblzma/api/lzma/easy.h | 174 +++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 174 insertions(+), 0 deletions(-) - -commit 288b232f54c3692cd36f471d4042f51daf3ea79f -Author: Lasse Collin -Date: 2008-01-26 11:09:17 +0200 - - Added more test files. - - tests/files/README | 11 +++++++++++ - tests/files/bad-multi-none-header_7.lzma | Bin 0 -> 59 bytes - tests/files/good-single-sparc-lzma.lzma | Bin 0 -> 2263 bytes - tests/files/good-single-x86-lzma.lzma | Bin 0 -> 1909 bytes - 4 files changed, 11 insertions(+), 0 deletions(-) - -commit c467b0defccf233d0c79234407bc38d7d09574d3 -Author: Lasse Collin -Date: 2008-01-26 10:47:55 +0200 - - Added more test files. - - tests/files/README | 6 ++++++ - tests/files/bad-multi-none-block_3.lzma | Bin 0 -> 58 bytes - tests/files/good-multi-none-block_2.lzma | Bin 0 -> 58 bytes - 3 files changed, 6 insertions(+), 0 deletions(-) - -commit f9842f712732c482f2def9f24437851e57dd83f8 -Author: Lasse Collin -Date: 2008-01-26 00:25:34 +0200 - - Return LZMA_HEADER_ERROR if LZMA_SYNC_FLUSH is used with any - of the so called simple filters. If there is demand, limited - support for LZMA_SYNC_FLUSH may be added in future. - - After this commit, using LZMA_SYNC_FLUSH shouldn't cause - undefined behavior in any situation. - - src/liblzma/api/lzma/simple.h | 9 +++++++++ - src/liblzma/simple/simple_coder.c | 8 ++++++++ - 2 files changed, 17 insertions(+), 0 deletions(-) - -commit e988ea1d1a286dd0f27af0657f9665d5cd8573aa -Author: Lasse Collin -Date: 2008-01-25 23:50:35 +0200 - - Added more Multi-Block test files. Improved some - descriptions in the test files' README. - - tests/files/README | 34 ++++++++++++++++++++++++----- - tests/files/bad-multi-none-block_1.lzma | Bin 0 -> 66 bytes - tests/files/bad-multi-none-block_2.lzma | Bin 0 -> 66 bytes - tests/files/good-multi-none-block_1.lzma | Bin 0 -> 66 bytes - 4 files changed, 28 insertions(+), 6 deletions(-) - -commit 4441e004185cd4c61bda184010eca5924c9dec87 -Author: Lasse Collin -Date: 2008-01-25 23:12:36 +0200 - - Combine lzma_options_block validation needed by both Block - encoder and decoder, and put the shared things to - block_private.h. Improved the checks a little so that - they may detect too big Compressed Size at initialization - time if lzma_options_block.total_size or .total_limit is - known. - - Allow encoding and decoding Blocks with combinations of - fields that are not allowed by the file format specification. - Doing this requires that the application passes such a - combination in lzma_options_lzma; liblzma doesn't do that, - but it's not impossible that someone could find them useful - in some custom file format. - - src/liblzma/common/block_decoder.c | 37 +++++++++++---------------- - src/liblzma/common/block_encoder.c | 32 ++++------------------ - src/liblzma/common/block_private.h | 50 ++++++++++++++++++++++++++++++++++++ - 3 files changed, 71 insertions(+), 48 deletions(-) - -commit bf4200c818fcf9102e56328d39cde91bfa13cfb6 -Author: Lasse Collin -Date: 2008-01-25 19:21:22 +0200 - - Added test_memlimit.c. - - tests/Makefile.am | 2 + - tests/test_memlimit.c | 114 +++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 116 insertions(+), 0 deletions(-) - -commit 7b8fc7e6b501a32a36636dac79ecb57099269005 -Author: Lasse Collin -Date: 2008-01-25 19:20:28 +0200 - - Improved the memory limitter: - - Added lzma_memlimit_max() and lzma_memlimit_reached() - API functions. - - Added simple estimation of malloc()'s memory usage - overhead. - - Fixed integer overflow detection in lzma_memlimit_alloc(). - - Made some white space cleanups and added more comments. - - The description of lzma_memlimit_max() in memlimit.h is bad - and should be improved. - - src/liblzma/api/lzma/memlimit.h | 35 ++++++++++++ - src/liblzma/common/memory_limitter.c | 97 +++++++++++++++++++++++++++++----- - 2 files changed, 118 insertions(+), 14 deletions(-) - -commit e0c3d0043da2f670cfdb1abbb3223d5a594ad8db -Author: Lasse Collin -Date: 2008-01-25 13:55:52 +0200 - - Use more parenthesis in succeed() macro in tests/tests.h. - - tests/tests.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 1fd76d488179580d37f31ee11948f4932aed31fd -Author: Lasse Collin -Date: 2008-01-24 14:49:34 +0200 - - Added more Multi-Block Stream test files. - - tests/files/README | 23 +++++++++++++++++++++++ - tests/files/bad-multi-none-header_2.lzma | Bin 0 -> 61 bytes - tests/files/bad-multi-none-header_3.lzma | Bin 0 -> 59 bytes - tests/files/bad-multi-none-header_4.lzma | Bin 0 -> 59 bytes - tests/files/bad-multi-none-header_5.lzma | Bin 0 -> 58 bytes - tests/files/bad-multi-none-header_6.lzma | Bin 0 -> 59 bytes - tests/files/good-multi-none-header_3.lzma | Bin 0 -> 59 bytes - 7 files changed, 23 insertions(+), 0 deletions(-) - -commit 6e27b1098a28f4ce09bfa6df68ad94182dfc2936 -Author: Lasse Collin -Date: 2008-01-24 00:46:05 +0200 - - Added bunch of test files containing Multi-Block Streams. - - tests/files/README | 53 +++++++++++++++++++++++++++++ - tests/files/bad-multi-none-1.lzma | Bin 0 -> 54 bytes - tests/files/bad-multi-none-2.lzma | Bin 0 -> 53 bytes - tests/files/bad-multi-none-3.lzma | Bin 0 -> 53 bytes - tests/files/bad-multi-none-extra_1.lzma | Bin 0 -> 54 bytes - tests/files/bad-multi-none-extra_2.lzma | Bin 0 -> 54 bytes - tests/files/bad-multi-none-extra_3.lzma | Bin 0 -> 55 bytes - tests/files/bad-multi-none-header_1.lzma | Bin 0 -> 57 bytes - tests/files/bad-multi-none-index_1.lzma | Bin 0 -> 51 bytes - tests/files/bad-multi-none-index_2.lzma | Bin 0 -> 49 bytes - tests/files/bad-multi-none-index_3.lzma | Bin 0 -> 51 bytes - tests/files/bad-multi-none-index_4.lzma | Bin 0 -> 51 bytes - tests/files/good-multi-none-1.lzma | Bin 0 -> 75 bytes - tests/files/good-multi-none-2.lzma | Bin 0 -> 53 bytes - tests/files/good-multi-none-extra_1.lzma | Bin 0 -> 51 bytes - tests/files/good-multi-none-extra_2.lzma | Bin 0 -> 79 bytes - tests/files/good-multi-none-extra_3.lzma | Bin 0 -> 55 bytes - tests/files/good-multi-none-header_1.lzma | Bin 0 -> 58 bytes - tests/files/good-multi-none-header_2.lzma | Bin 0 -> 66 bytes - 19 files changed, 53 insertions(+), 0 deletions(-) - -commit db9df0a9609c01a00a227329fb96e983971040f5 -Author: Lasse Collin -Date: 2008-01-23 23:43:00 +0200 - - Fix decoding of empty Metadata Blocks, that don't have - even the Metadata Flags field. Earlier the code allowed - such files; now they are prohibited as the file format - specification requires. - - src/liblzma/common/metadata_decoder.c | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit 765f0b05f6e95ed9194fb90819cee189ebbac36b -Author: Lasse Collin -Date: 2008-01-23 23:38:18 +0200 - - Fix a bug related to 99e12af4e2b866c011fe0106cd1e0bfdcc8fe9c6. - lzma_metadata.header_metadata_size was not properly set to - zero if the Metadata had only the Metadata Flags field. - - src/liblzma/common/metadata_decoder.c | 13 +++++++------ - 1 files changed, 7 insertions(+), 6 deletions(-) - -commit 3a7cc5c3dec7b078941f961b0393b86c418883b6 -Author: Lasse Collin -Date: 2008-01-23 23:35:49 +0200 - - Fix decoding of Extra Records that have empty Data. - - src/liblzma/common/metadata_decoder.c | 13 ++++++++++++- - 1 files changed, 12 insertions(+), 1 deletions(-) - -commit e5fdec93e273855c1bcc2579b83cfb481a9a1492 -Author: Lasse Collin -Date: 2008-01-23 22:02:38 +0200 - - Add the trailing '\0' to lzma_extra.data as the API header - already documents. - - src/liblzma/common/metadata_decoder.c | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit ed40dc5a2c28a8dfccab8c165b3780738eeef93e -Author: Lasse Collin -Date: 2008-01-23 21:21:21 +0200 - - Added debug/full_flush.c. - - debug/Makefile.am | 3 +- - debug/full_flush.c | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 107 insertions(+), 1 deletions(-) - -commit ae0cd09a666a1682da8fc09487322227679e218d -Author: Lasse Collin -Date: 2008-01-23 21:05:33 +0200 - - Return LZMA_STREAM_END instead of LZMA_OK if - LZMA_SYNC_FLUSH or LZMA_FULL_FLUSH is used when - there's no unfinished Block open. - - src/liblzma/common/stream_encoder_multi.c | 6 +++++- - 1 files changed, 5 insertions(+), 1 deletions(-) - -commit 0e80ded13dfceb98f9494cbb5381a95eb44d03db -Author: Lasse Collin -Date: 2008-01-23 20:05:01 +0200 - - Added bad-single-none-footer_filter_flags.lzma and - bad-single-none-too_long_vli.lzma. - - tests/files/README | 5 +++++ - .../files/bad-single-none-footer_filter_flags.lzma | Bin 0 -> 30 bytes - tests/files/bad-single-none-too_long_vli.lzma | Bin 0 -> 39 bytes - 3 files changed, 5 insertions(+), 0 deletions(-) - -commit 8c8eb14055d8dd536b1b1c58fb284d34bb8ed1dd -Author: Lasse Collin -Date: 2008-01-23 13:42:35 +0200 - - Fixed a typo. - - src/liblzma/subblock/subblock_decoder_helper.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 980f65a9a10160c4d105767871e3002b9aaba3e0 -Author: Lasse Collin -Date: 2008-01-23 13:40:45 +0200 - - Fix a memory leak in the Subblock encoder. - - src/liblzma/subblock/subblock_encoder.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 99e12af4e2b866c011fe0106cd1e0bfdcc8fe9c6 -Author: Lasse Collin -Date: 2008-01-23 13:36:07 +0200 - - Fix Size of Header Metadata Block handling. Now - lzma_metadata.header_metadata_size == LZMA_VLI_VALUE_UNKNOWN - is not allowed at all. To indicate missing Header Metadata - Block, header_metadata_size must be set to zero. This is - what Metadata decoder does after this patch too. - - Note that other missing fields in lzma_metadata are still - indicated with LZMA_VLI_VALUE_UNKNOWN. This isn't as - illogical as it sounds at first, because missing Size of - Header Metadata Block means that Header Metadata Block is - not present in the Stream. With other Metadata fields, - a missing field means only that the value is unknown. - - src/liblzma/common/info.c | 13 ++++--------- - src/liblzma/common/metadata_decoder.c | 6 ++++++ - src/liblzma/common/metadata_encoder.c | 11 +++++------ - tests/test_info.c | 4 ++-- - 4 files changed, 17 insertions(+), 17 deletions(-) - -commit 58b78ab20c1bcced45cf71ae6684868fc90b4b81 -Author: Lasse Collin -Date: 2008-01-23 13:15:55 +0200 - - Fix a memory leak in metadata_decoder.c. - - src/liblzma/common/metadata_decoder.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 4d8cdbdab44400fd98f0f18a0f701e27cd1acdae -Author: Lasse Collin -Date: 2008-01-23 13:13:58 +0200 - - Fix the fix 863028cb7ad6d8d0455fa69348f56b376d7b908f which - just moved to problem. Now it's really fixed. - - src/liblzma/common/info.c | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit 67321de963ccf69410b3868b8e31534fe18a90de -Author: Lasse Collin -Date: 2008-01-23 00:21:04 +0200 - - Take advantage of return_if_error() macro in - lzma_info_metadata_set() in info.c. - - src/liblzma/common/info.c | 24 ++++++++---------------- - 1 files changed, 8 insertions(+), 16 deletions(-) - -commit 863028cb7ad6d8d0455fa69348f56b376d7b908f -Author: Lasse Collin -Date: 2008-01-23 00:18:32 +0200 - - Fixed a dangling pointer that caused invalid free(). - - src/liblzma/common/info.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit cf49f42a6bd40143f54a6b10d6e605599e958c0b -Author: Lasse Collin -Date: 2008-01-22 22:49:24 +0200 - - Added lzma_easy_* functions. These should make using - liblzma as easy as using zlib, because the easy API - don't require developers to know any fancy LZMA options. - - Note that Multi-Block Stream encoding is currently broken. - The easy API should be OK, the bug(s) are elsewhere. - - src/liblzma/api/Makefile.am | 1 + - src/liblzma/api/lzma.h | 1 + - src/liblzma/common/Makefile.am | 5 ++ - src/liblzma/common/easy_common.c | 54 +++++++++++++++ - src/liblzma/common/easy_common.h | 28 ++++++++ - src/liblzma/common/easy_multi.c | 103 +++++++++++++++++++++++++++++ - src/liblzma/common/easy_single.c | 37 ++++++++++ - src/liblzma/common/stream_encoder_multi.c | 3 +- - src/liblzma/common/stream_encoder_multi.h | 26 +++++++ - 9 files changed, 256 insertions(+), 2 deletions(-) - -commit 1747b85a43abc1c3f152dbd349be2ef4089ecf6a -Author: Lasse Collin -Date: 2008-01-22 21:16:22 +0200 - - Fix Multi-Block Stream encoder's EOPM usage. - - src/liblzma/common/stream_encoder_multi.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 0ed6f1adcea540fb9593ca115d36de537f7f0dc6 -Author: Lasse Collin -Date: 2008-01-22 00:15:11 +0200 - - Made lzma_extra pointers const in lzma_options_stream. - - src/liblzma/api/lzma/stream.h | 4 ++-- - src/liblzma/common/stream_encoder_multi.c | 8 ++++++-- - 2 files changed, 8 insertions(+), 4 deletions(-) - -commit 305afa38f64c75af8e81c4167e2d8fa8d85b53a4 -Author: Lasse Collin -Date: 2008-01-20 20:15:21 +0200 - - Updated debug/sync_flush.c. - - debug/sync_flush.c | 26 ++++++++++++++++++++++++-- - 1 files changed, 24 insertions(+), 2 deletions(-) - -commit d53e9b77054cfade6a643e77d085273a348b189c -Author: Lasse Collin -Date: 2008-01-20 20:14:26 +0200 - - Added debug/repeat.c. - - debug/Makefile.am | 1 + - debug/repeat.c | 43 +++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 44 insertions(+), 0 deletions(-) - -commit 107259e306bcfc2336a0fb870fb58034c28faa52 -Author: Lasse Collin -Date: 2008-01-20 20:12:58 +0200 - - Fix alignment handling bugs in Subblock encoder. - - This leaves one known alignment bug unfixed: If repeat count - doesn't fit into 28-bit integer, the encoder has to split - this to multiple Subblocks with Subblock Type `Repeating Data'. - The extra Subblocks may have wrong alignment. Correct alignment - is restored after the split Repeating Data has been completely - written out. - - Since the encoder doesn't even try to fix the alignment unless - the size of Data is at least 4 bytes, to trigger this bug you - need at least 4 GiB of repeating data with sequence length of - 4 or more bytes. Since the worst thing done by this bug is - misaligned data (no data corruption), this bug simply isn't - worth fixing, because a proper fix isn't simple. - - src/liblzma/subblock/subblock_encoder.c | 170 +++++++++++++++++++++--------- - 1 files changed, 119 insertions(+), 51 deletions(-) - -commit e141fe18950400faaa3503ff88ac20eacd73e88c -Author: Lasse Collin -Date: 2008-01-19 21:16:33 +0200 - - Implemented LZMA_SYNC_FLUSH support to the Subblock encoder. - The API for handing Subfilters was changed to make it - consistent with LZMA_SYNC_FLUSH. - - A few sanity checks were added for Subfilter handling. Some - small bugs were fixed. More comments were added. - - src/liblzma/api/lzma/subblock.h | 29 ++-- - src/liblzma/subblock/subblock_encoder.c | 263 +++++++++++++++++++++++-------- - 2 files changed, 214 insertions(+), 78 deletions(-) - -commit 23c227a864a3b69f38c6a74306161d4e6918d1cc -Author: Lasse Collin -Date: 2008-01-19 15:19:21 +0200 - - Revised the Delta filter implementation. The initialization - function is still shared between encoder and decoder, but the - actual coding is in separate files for encoder and decoder. - - There are now separate functions for the actual delta - calculation depending on if Delta is the last filter in the - chain or not. If it is the last, the new code copies the - data from input to output buffer and does the delta - calculation at the same time. The old code first copied the - data, then did the delta in the target buffer, which required - reading through the data twice. - - Support for LZMA_SYNC_FLUSH was added to the Delta encoder. - This doesn't change anything in the file format. - - src/liblzma/common/Makefile.am | 14 +++- - src/liblzma/common/delta_coder.c | 189 ------------------------------------ - src/liblzma/common/delta_coder.h | 31 ------ - src/liblzma/common/delta_common.c | 70 +++++++++++++ - src/liblzma/common/delta_common.h | 48 +++++++++ - src/liblzma/common/delta_decoder.c | 102 +++++++++++++++++++ - src/liblzma/common/delta_decoder.h | 28 ++++++ - src/liblzma/common/delta_encoder.c | 97 ++++++++++++++++++ - src/liblzma/common/delta_encoder.h | 28 ++++++ - src/liblzma/common/raw_decoder.c | 2 +- - src/liblzma/common/raw_encoder.c | 2 +- - 11 files changed, 387 insertions(+), 224 deletions(-) - -commit 61dc82f3e306b25ce3cd3d529df9ec7a0ec04b73 -Author: Lasse Collin -Date: 2008-01-18 20:18:08 +0200 - - Added the debug directory and the first debug tool - (sync_flush). These tools are not built unless the - user runs "make" in the debug directory. - - Makefile.am | 1 + - configure.ac | 1 + - debug/Makefile.am | 30 +++++++++++++ - debug/README | 17 ++++++++ - debug/sync_flush.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 5 files changed, 165 insertions(+), 0 deletions(-) - -commit 0ae3208db94585eb8294b97ded387de0a3a07646 -Author: Lasse Collin -Date: 2008-01-18 20:13:00 +0200 - - Added test files to test usage of flush marker in LZMA. - - tests/files/README | 12 ++++++++++++ - tests/files/bad-single-lzma-flush_beginning.lzma | Bin 0 -> 53 bytes - tests/files/bad-single-lzma-flush_twice.lzma | Bin 0 -> 63 bytes - tests/files/good-single-lzma-flush_1.lzma | Bin 0 -> 48 bytes - tests/files/good-single-lzma-flush_2.lzma | Bin 0 -> 63 bytes - 5 files changed, 12 insertions(+), 0 deletions(-) - -commit ab5feaf1fcc146ef9fd39360c53c290bec39524e -Author: Lasse Collin -Date: 2008-01-18 20:02:52 +0200 - - Fix LZMA_SYNC_FLUSH handling in LZ and LZMA encoders. - That code is now almost completely in LZ coder, where - it can be shared with other LZ77-based algorithms in - future. - - src/liblzma/lz/lz_encoder.c | 34 ++++++++++++++++++++++++++-------- - src/liblzma/lz/lz_encoder.h | 1 + - src/liblzma/lzma/lzma_encoder.c | 27 ++------------------------- - 3 files changed, 29 insertions(+), 33 deletions(-) - -commit 079c4f7fc26b3d0b33d9ae7536697b45f3b73585 -Author: Lasse Collin -Date: 2008-01-18 17:21:24 +0200 - - Don't add -g to CFLAGS when --enable-debug is specified. - It's the job of the user to put that in CFLAGS. - - configure.ac | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -commit 61d1784d8f1761d979a6da6e223e279ca33815e6 -Author: Lasse Collin -Date: 2008-01-18 14:17:37 +0200 - - Set stdin and stdout to binary mode on Windows. This patch is - a forward port of b7b22fcb979a16d3a47c8001f058c9f7d4416068 - from lzma-utils-legacy.git. I don't know if the new code base - builds on Windows, but this is a start. - - src/lzmadec/lzmadec.c | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -commit c9cba976913e55ff9aac8a8133cc94416c7c1c9c -Author: Lasse Collin -Date: 2008-01-18 00:50:29 +0200 - - Added test_compress.sh and bunch of files needed by it. - This new set of tests compress and decompress several - test files with many different compression options. - This set of tests will be extended later. - - tests/Makefile.am | 30 ++++-- - tests/bcj_test.c | 66 +++++++++++++ - tests/compress_prepared_bcj_sparc | Bin 0 -> 6804 bytes - tests/compress_prepared_bcj_x86 | Bin 0 -> 4649 bytes - tests/create_compress_files.c | 164 +++++++++++++++++++++++++++++++++ - tests/test_compress.sh | 183 +++++++++++++++++++++++++++++++++++++ - 6 files changed, 433 insertions(+), 10 deletions(-) - -commit 33be3c0e24d8f43376ccf71cc77d53671e792f07 -Author: Lasse Collin -Date: 2008-01-17 18:56:53 +0200 - - Subblock decoder: Don't exit the main loop in decode_buffer() - too early if we hit End of Input while decoding a Subblock of - type Repeating Data. To keep the loop termination condition - elegant, the order of enumerations in coder->sequence were - changed. - - To keep the case-labels in roughly the same order as the - enumerations in coder->sequence, large chunks of code was - moved around. This made the diff big and ugly compared to - the amount of the actual changes made. - - src/liblzma/subblock/subblock_decoder.c | 272 ++++++++++++++++--------------- - 1 files changed, 139 insertions(+), 133 deletions(-) - -commit b254bd97b1cdb68d127523d91ca9e054ed89c4fd -Author: Lasse Collin -Date: 2008-01-17 17:39:42 +0200 - - Fix wrong too small size of argument unfiltered_max - in ia64_coder_init(). It triggered assert() in - simple_coder.c, and could have caused a buffer overflow. - - This error was probably a copypaste mistake, since most - of the simple filters use unfiltered_max = 4. - - src/liblzma/simple/ia64.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 8f5794c8f1a30e8e3b524b415bbe81af2e04c64a -Author: Lasse Collin -Date: 2008-01-17 17:27:45 +0200 - - Added --delta to the output of "lzma --help". - - src/lzma/help.c | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit f88590e0014b38d40465937c19f25f05f16c79ae -Author: Lasse Collin -Date: 2008-01-17 13:14:20 +0200 - - Fix Subblock docoder: If Subblock filter was used with known - Uncompressed Size, and the last output byte was from RLE, - the code didn't stop decoding as it should have done. - - src/liblzma/subblock/subblock_decoder.c | 6 ++++++ - 1 files changed, 6 insertions(+), 0 deletions(-) - -commit bc0b945ca376e333077644d2f7fd54c2848aab8a -Author: Lasse Collin -Date: 2008-01-16 16:33:37 +0200 - - Tiny non-technical edits to file-format.txt. - - doc/file-format.txt | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 7599bb7064ccf007f054595dedda7927af868252 -Author: Lasse Collin -Date: 2008-01-16 14:48:04 +0200 - - Plugged a memory leak in stream_decoder.c. - - src/liblzma/common/stream_decoder.c | 20 ++++++++++++++++++++ - 1 files changed, 20 insertions(+), 0 deletions(-) - -commit 0b581539311f3712946e81e747839f8fb5f441a7 -Author: Lasse Collin -Date: 2008-01-16 14:47:27 +0200 - - Added memory leak detection to lzmadec.c. - - src/lzmadec/lzmadec.c | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -commit 5b5b13c7bb8fde6331064d21f3ebde41072480c4 -Author: Lasse Collin -Date: 2008-01-16 14:46:50 +0200 - - Added lzma_memlimit_count(). - - src/liblzma/api/lzma/memlimit.h | 10 ++++++++++ - src/liblzma/common/memory_limitter.c | 19 +++++++++++++++++++ - 2 files changed, 29 insertions(+), 0 deletions(-) - -commit 19389f2b82ec54fd4c847a18f16482e7be4c9887 -Author: Lasse Collin -Date: 2008-01-16 14:31:44 +0200 - - Added ARRAY_SIZE(array) macro. - - src/common/sysdefs.h | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 9bc33a54cbf83952130adbcb1be32c6882485416 -Author: Lasse Collin -Date: 2008-01-16 13:27:03 +0200 - - Make Uncompresed Size validation more strict - in alone_decoder.c. - - src/liblzma/common/alone_decoder.c | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 01d71d60b79027e1ce3eb9c79ae5191e1407c883 -Author: Lasse Collin -Date: 2008-01-15 17:46:59 +0200 - - Free the allocated memory in lzmadec if debugging is - enabled. This should make it possible to detect possible - memory leaks with Valgrind. - - src/lzmadec/lzmadec.c | 7 +++++++ - 1 files changed, 7 insertions(+), 0 deletions(-) - -commit 8235e6e5b2878f76633afcda9a334640db503ef5 -Author: Lasse Collin -Date: 2008-01-15 16:25:38 +0200 - - Fix memory leaks from test_block_header.c. - - tests/test_block_header.c | 19 +++++++++++++++++-- - 1 files changed, 17 insertions(+), 2 deletions(-) - -commit f10fc6a69d40b6d5c9cfbf8d3746f49869c2e2f6 -Author: Lasse Collin -Date: 2008-01-15 14:23:35 +0200 - - Use fastpos.h when encoding LZMA dictionary size in - Filter Flags encoder. - - src/liblzma/common/filter_flags_encoder.c | 40 +++++++++++++--------------- - 1 files changed, 19 insertions(+), 21 deletions(-) - -commit e5728142a2048979f5c0c2149ce71ae952a092e1 -Author: Lasse Collin -Date: 2008-01-15 14:02:22 +0200 - - Revised the fastpos code. It now uses the slightly faster - table-based version from LZMA SDK 4.57. This should be - fast on most systems. - - A simpler and smaller alternative version is also provided. - On some CPUs this can be even a little faster than the - default table-based version (see comments in fastpos.h), - but on most systems the table-based code is faster. - - src/liblzma/common/init_encoder.c | 3 - - src/liblzma/lzma/Makefile.am | 4 + - src/liblzma/lzma/fastpos.h | 156 +++++++++ - src/liblzma/lzma/fastpos_table.c | 519 ++++++++++++++++++++++++++++ - src/liblzma/lzma/fastpos_tablegen.c | 63 ++++ - src/liblzma/lzma/lzma_common.h | 3 +- - src/liblzma/lzma/lzma_encoder.c | 1 + - src/liblzma/lzma/lzma_encoder_getoptimum.c | 1 + - src/liblzma/lzma/lzma_encoder_init.c | 22 -- - src/liblzma/lzma/lzma_encoder_private.h | 21 -- - 10 files changed, 746 insertions(+), 47 deletions(-) - -commit 10437b5b567f6a025ff16c45a572e417a0a9cc26 -Author: Lasse Collin -Date: 2008-01-15 13:32:13 +0200 - - Added bsr.h. - - src/liblzma/common/Makefile.am | 1 + - src/liblzma/common/bsr.h | 61 ++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 62 insertions(+), 0 deletions(-) - -commit f3c88e8b8d8dd57f4bba5f0921eebf276437c244 -Author: Lasse Collin -Date: 2008-01-15 13:29:14 +0200 - - Fixed assembler detection in configure.ac, and added - detection for x86_64. - - configure.ac | 32 ++++++++++++++++---------------- - 1 files changed, 16 insertions(+), 16 deletions(-) - -commit 54ec204f58287f50d3976288295da4188a19192b -Author: Lasse Collin -Date: 2008-01-15 12:20:41 +0200 - - Omit invalid space from printf() format string - in price_table_gen.c. - - src/liblzma/rangecoder/price_table_gen.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 01b4b19f49f00e17a0f9cb8754c672ac0847b6e1 -Author: Lasse Collin -Date: 2008-01-15 09:54:34 +0200 - - Removed a few unused macros from lzma_common.h. - - src/liblzma/lzma/lzma_common.h | 8 ++------ - 1 files changed, 2 insertions(+), 6 deletions(-) - -commit 19bd7f3cf25e4ff8487ef7098ca4a7b58681961d -Author: Lasse Collin -Date: 2008-01-15 08:37:42 +0200 - - Fix a typo in lzma_encoder.c. - - src/liblzma/lzma/lzma_encoder.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 9f9b1983013048f2142e8bc7e240149d2687bedc -Author: Lasse Collin -Date: 2008-01-15 08:36:25 +0200 - - Convert bittree_get_price() and bittree_reverse_get_price() - from macros to inline functions. - - src/liblzma/lzma/lzma_encoder.c | 19 +++---- - src/liblzma/lzma/lzma_encoder_getoptimum.c | 16 ++---- - src/liblzma/rangecoder/range_encoder.h | 76 ++++++++++++++++------------ - 3 files changed, 56 insertions(+), 55 deletions(-) - -commit 78e85cb1a7667c54853670d2eb09d754bcbda87d -Author: Lasse Collin -Date: 2008-01-15 07:44:59 +0200 - - Fix CRC code in case --enable-small is used. - - src/liblzma/check/crc32_init.c | 2 +- - src/liblzma/check/crc64_init.c | 2 +- - src/liblzma/common/init_decoder.c | 2 -- - src/liblzma/common/init_encoder.c | 2 -- - tests/test_check.c | 2 ++ - 5 files changed, 4 insertions(+), 6 deletions(-) - -commit 949d4346e2d75bcd9dcb66c394d8d851d8db3aa0 -Author: Lasse Collin -Date: 2008-01-15 07:41:39 +0200 - - Fix typo in test_index.c. - - tests/test_index.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit d13d693155c176fc9e9ad5c50d48ccba27c2d9c6 -Author: Lasse Collin -Date: 2008-01-15 07:40:21 +0200 - - Added precomputed range coder probability price table. - - src/liblzma/common/init_encoder.c | 5 +- - src/liblzma/rangecoder/Makefile.am | 9 +++- - src/liblzma/rangecoder/price_table.c | 70 +++++++++++++++++++++++++++++ - src/liblzma/rangecoder/price_table_gen.c | 55 ++++++++++++++++++++++ - src/liblzma/rangecoder/price_table_init.c | 48 ++++++++++++++++++++ - src/liblzma/rangecoder/range_common.h | 4 +- - src/liblzma/rangecoder/range_encoder.c | 46 ------------------- - src/liblzma/rangecoder/range_encoder.h | 21 ++++----- - 8 files changed, 197 insertions(+), 61 deletions(-) - -commit 362dc3843b373c1007a50a4719f378981f18ae03 -Author: Lasse Collin -Date: 2008-01-14 13:42:43 +0200 - - Remove RC_BUFFER_SIZE from lzma_encoder_private.h - and replace it with a sanity check. - - src/liblzma/lzma/lzma_encoder_private.h | 6 ++++-- - 1 files changed, 4 insertions(+), 2 deletions(-) - -commit e22b37968d153683fec61ad37b6b160cb7ca4ddc -Author: Lasse Collin -Date: 2008-01-14 13:39:54 +0200 - - Major changes to LZ encoder, LZMA encoder, and range encoder. - These changes implement support for LZMA_SYNC_FLUSH in LZMA - encoder, and move the temporary buffer needed by range encoder - from lzma_range_encoder structure to lzma_lz_encoder. - - src/liblzma/lz/lz_encoder.c | 138 +++++++++++++++++++++++++++----- - src/liblzma/lz/lz_encoder.h | 17 +++- - src/liblzma/lzma/lzma_encoder.c | 74 ++++++++++------- - src/liblzma/rangecoder/range_encoder.h | 117 ++++++++------------------- - 4 files changed, 206 insertions(+), 140 deletions(-) - -commit b59ef3973781f892c0a72b5e5934194567100be5 -Author: Lasse Collin -Date: 2008-01-14 13:34:29 +0200 - - Added one assert() to process.c of the command line tool. - - src/lzma/process.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 9547e734a00ddb64c851fa3f116e4f9e7d763ea7 -Author: Lasse Collin -Date: 2008-01-14 12:09:52 +0200 - - Don't use coder->lz.stream_end_was_reached in assertions - in match_c.h. - - src/liblzma/lz/match_c.h | 2 -- - 1 files changed, 0 insertions(+), 2 deletions(-) - -commit 3e09e1c05871f3757f759b801890ccccc9286608 -Author: Lasse Collin -Date: 2008-01-14 12:08:02 +0200 - - In lzma_read_match_distances(), don't use - coder->lz.stream_end_was_reached. That variable - will be removed, and the check isn't required anyway. - Rearrange the check so that it doesn't make one to - think that there could be an integer overflow. - - src/liblzma/lzma/lzma_encoder_private.h | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit a670fec8021e5962429689c194148a04c3418872 -Author: Lasse Collin -Date: 2008-01-14 11:56:41 +0200 - - Small LZMA_SYNC_FLUSH fixes to Block and Single-Stream encoders. - - src/liblzma/common/block_encoder.c | 4 ++-- - src/liblzma/common/stream_encoder_single.c | 1 + - 2 files changed, 3 insertions(+), 2 deletions(-) - -commit 3599dba9570a6972a16b6398d6c838e9b420e985 -Author: Lasse Collin -Date: 2008-01-14 11:54:56 +0200 - - More fixes to LZMA decoder's flush marker handling. - - src/liblzma/lzma/lzma_decoder.c | 52 ++++++++++++++++++++++---------------- - 1 files changed, 30 insertions(+), 22 deletions(-) - -commit f73c2ab6079ed5675a42b39d584a567befbd4624 -Author: Lasse Collin -Date: 2008-01-10 17:13:42 +0200 - - Eliminate lzma_lz_encoder.must_move_pos. It's needed - only in one place which isn't performance criticial. - - src/liblzma/lz/lz_encoder.c | 6 ++---- - src/liblzma/lz/lz_encoder.h | 4 ---- - 2 files changed, 2 insertions(+), 8 deletions(-) - -commit 382808514a42b2f4b4a64515e2dfb3fc1bc48ecd -Author: Lasse Collin -Date: 2008-01-09 20:05:57 +0200 - - Define HAVE_ASM_X86 when x86 assembler optimizations are - used. This #define will be useful for inline assembly. - - configure.ac | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -commit 0e70fbe4032351aab13a1cd8e5deced105c0b276 -Author: Lasse Collin -Date: 2008-01-09 12:06:46 +0200 - - Added good-single-none-empty_3.lzma and - bad-single-none-empty.lzma. - - tests/files/README | 6 ++++++ - tests/files/bad-single-none-empty.lzma | Bin 0 -> 19 bytes - tests/files/good-single-none-empty_3.lzma | Bin 0 -> 19 bytes - 3 files changed, 6 insertions(+), 0 deletions(-) - -commit 379fbbe84d922c7cc00afa65c6f0c095da596b19 -Author: Lasse Collin -Date: 2008-01-08 23:11:59 +0200 - - Take advantage of return_if_error() in block_decoder.c. - - src/liblzma/common/block_decoder.c | 23 +++++++---------------- - 1 files changed, 7 insertions(+), 16 deletions(-) - -commit 97d5fa82077e57815dfad995dc393c2809a78539 -Author: Lasse Collin -Date: 2008-01-08 23:10:57 +0200 - - Updated tests/files/README. - - tests/files/README | 15 +++++++++------ - 1 files changed, 9 insertions(+), 6 deletions(-) - -commit 3bb9bb310936cba6a743b4f06739a397dec7c28f -Author: Lasse Collin -Date: 2008-01-08 23:05:40 +0200 - - Added test files with empty Compressed Data. - - tests/files/README | 6 ++++++ - tests/files/good-single-lzma-empty.lzma | Bin 0 -> 21 bytes - tests/files/good-single-none-empty_1.lzma | Bin 0 -> 18 bytes - tests/files/good-single-none-empty_2.lzma | Bin 0 -> 26 bytes - 4 files changed, 6 insertions(+), 0 deletions(-) - -commit 7054c5f5888ac6a7178cd43dc9583ce6c7e78c9f -Author: Lasse Collin -Date: 2008-01-08 22:58:42 +0200 - - Fix decoding of Blocks that have only Block Header. - - src/liblzma/common/block_decoder.c | 37 +++++++++++++---------------------- - 1 files changed, 14 insertions(+), 23 deletions(-) - -commit 753e4d95cd1cf29c632dfe1a670af7c67aeffbf4 -Author: Lasse Collin -Date: 2008-01-08 22:27:46 +0200 - - Added good-single-subblock_implicit.lzma. - - tests/files/README | 2 ++ - tests/files/good-single-subblock_implicit.lzma | Bin 0 -> 35 bytes - 2 files changed, 2 insertions(+), 0 deletions(-) - -commit faeac7b7aca75f86afed1e7cc06279d9d497c627 -Author: Lasse Collin -Date: 2008-01-08 18:50:30 +0200 - - Disable CRC32 from Block Headers when --check=none - has been specified. - - src/lzma/process.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit a751126dbb656767ed4666cf0e5d3e17349d93d1 -Author: Lasse Collin -Date: 2008-01-08 13:36:29 +0200 - - Fixed encoding of empty files. Arguments to is_size_valid() - were in wrong order in block_encoder.c. - - src/liblzma/common/block_encoder.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 9080267603b1006c4867c823307dca9df8be0d20 -Author: Lasse Collin -Date: 2008-01-08 13:35:36 +0200 - - Added a few test files. - - tests/files/README | 21 +++++++++++++++++-- - tests/files/bad-cat-single-none-pad_garbage_1.lzma | Bin 0 -> 65 bytes - tests/files/bad-cat-single-none-pad_garbage_2.lzma | Bin 0 -> 65 bytes - tests/files/bad-cat-single-none-pad_garbage_3.lzma | Bin 0 -> 65 bytes - tests/files/bad-single-data_after_eopm.lzma | Bin 55 -> 0 bytes - tests/files/bad-single-data_after_eopm_1.lzma | Bin 0 -> 55 bytes - tests/files/bad-single-none-truncated.lzma | Bin 0 -> 29 bytes - 7 files changed, 18 insertions(+), 3 deletions(-) - -commit b4943ccf73b64fc93a90a23474509c316f55eb2b -Author: Lasse Collin -Date: 2008-01-08 12:29:58 +0200 - - Avoid using ! in test_files.sh, because that doesn't work - with some ancient /bin/sh versions. - - tests/test_files.sh | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -commit e2417b2b9134f3f65e14b61e23cd3644d8954353 -Author: Lasse Collin -Date: 2008-01-08 00:48:30 +0200 - - More pre-C99 inttypes.h compatibility fixes. Now the code - should work even if the system has no inttypes.h. - - src/common/physmem.h | 11 ----------- - src/liblzma/check/crc32_init.c | 5 +---- - src/liblzma/check/crc32_tablegen.c | 7 ++----- - src/liblzma/check/crc64_init.c | 5 +---- - src/liblzma/check/crc64_tablegen.c | 7 ++----- - 5 files changed, 6 insertions(+), 29 deletions(-) - -commit 5d227e51c23639423f4ade06aabb54e131f8505e -Author: Lasse Collin -Date: 2008-01-07 23:25:32 +0200 - - Updated fi.po although it's currently pretty much crap. - - po/fi.po | 12 ++++++------ - 1 files changed, 6 insertions(+), 6 deletions(-) - -commit c7189d981a1b27c63da0c1ee80d9b5cd8ce1733d -Author: Lasse Collin -Date: 2008-01-07 23:14:25 +0200 - - Test for $GCC = yes instead of if it is non-empty. This - way it is possible to use ac_cv_c_compiler_gnu=no to - force configure to think it is using non-GNU C compiler. - - configure.ac | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 3dbbea82b74bb841c995ad332a3aeca613015e10 -Author: Lasse Collin -Date: 2008-01-07 21:49:41 +0200 - - Added test_files.sh to tests/Makefile.am so it gets - included in the tarball with "make dist". - - tests/Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 2fd2d181543feab1b4003f3ac6e85625fbee04f0 -Author: Lasse Collin -Date: 2008-01-07 18:22:24 +0200 - - Cosmetic edit to test_files.sh. - - tests/test_files.sh | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -commit 9a71d573100a990ceb30ce0bec6a9a15d795605f -Author: Lasse Collin -Date: 2008-01-07 18:09:44 +0200 - - Added tests/files/README. - - tests/files/README | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 files changed, 108 insertions(+), 0 deletions(-) - -commit 47f48fe9936ed72617a60fbd015df7e0e47a1e43 -Author: Lasse Collin -Date: 2008-01-07 14:20:57 +0200 - - Tell in COPYING that everything in tests/files is - public domain. - - COPYING | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -commit 3502b3e1d00251d3c8dda96079440705c28d8225 -Author: Lasse Collin -Date: 2008-01-07 14:19:05 +0200 - - Cleaned up the tests/files directory. - - tests/files/bad-single-subblock-padding_loop.lzma | Bin 0 -> 43 bytes - tests/files/bad-single-subblock1023-slow.lzma | Bin 0 -> 7886 bytes - tests/files/malicious-single-subblock-loop.lzma | Bin 43 -> 0 bytes - tests/files/malicious-single-subblock-lzma.lzma | Bin 505 -> 0 bytes - .../files/malicious-single-subblock1023-slow.lzma | Bin 7886 -> 0 bytes - 5 files changed, 0 insertions(+), 0 deletions(-) - -commit 908b2ac604b9940369d7fe8a45e9eb6da5d2a24c -Author: Lasse Collin -Date: 2008-01-07 13:49:19 +0200 - - Added test_files.sh to test decoding of the files in - the tests/files directory. It doesn't test the malicious - files yet. - - tests/Makefile.am | 4 +++- - tests/test_files.sh | 40 ++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 43 insertions(+), 1 deletions(-) - -commit ecb2a6548f5978022a8fa931719dc575f5fd3bf6 -Author: Lasse Collin -Date: 2008-01-07 11:23:13 +0200 - - Updated README regarding the assembler optimizations. - - README | 10 +++++----- - 1 files changed, 5 insertions(+), 5 deletions(-) - -commit eacb8050438d3e6146c86eb9732d3fb1ef1825cb -Author: Lasse Collin -Date: 2008-01-07 10:58:00 +0200 - - Updated THANKS. - - THANKS | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -commit 1239649f96132b18e3b7e2dd152ecf53a195caa8 -Author: Lasse Collin -Date: 2008-01-06 21:47:17 +0200 - - Cosmetic changes to configure.ac. - - configure.ac | 14 ++++++-------- - 1 files changed, 6 insertions(+), 8 deletions(-) - -commit 88ee301ec2e4506a30ec7ac9aaa2288e2dcadd0e -Author: Lasse Collin -Date: 2008-01-06 19:46:38 +0200 - - Automatically disable assembler code on Darwin x86. - Darwin has different ABI than GNU+Linux and Solaris, - thus the assembler code doesn't assemble on Darwin. - - configure.ac | 17 +++++++++++++++-- - 1 files changed, 15 insertions(+), 2 deletions(-) - -commit c15a7abf66e3a70792f7444115e484c7981c8284 -Author: Lasse Collin -Date: 2008-01-06 19:45:27 +0200 - - With printf(), use PRIu64 with a cast to uint64_t instead - of %zu, because some pre-C99 libc versions don't support %zu. - - src/lzma/help.c | 13 +++++++------ - src/lzmadec/lzmadec.c | 6 ++++-- - 2 files changed, 11 insertions(+), 8 deletions(-) - -commit 4e7e54c4c522ab2f6a7abb92cefc4f707e9568fb -Author: Lasse Collin -Date: 2008-01-06 16:27:41 +0200 - - Introduced compatibility with systems that have pre-C99 - or no inttypes.h. This is useful when the compiler has - good enough support for C99, but libc headers don't. - - Changed liblzma API so that sys/types.h and inttypes.h - have to be #included before #including lzma.h. On systems - that don't have C99 inttypes.h, it's the problem of the - applications to provide the required types and macros - before #including lzma.h. - - If lzma.h defined the missing types and macros, it could - conflict with third-party applications whose configure - has detected that the types are missing and defined them - in config.h already. An alternative would have been - introducing lzma_uint32 and similar types, but that would - just be an extra pain on modern systems. - - configure.ac | 13 +++++++- - doc/liblzma-intro.txt | 10 +++++- - src/common/sysdefs.h | 59 +++++++++++++++++++++++++++++++++++- - src/liblzma/api/lzma.h | 40 ++++++++++++++++-------- - src/liblzma/check/crc32_table.c | 4 +-- - src/liblzma/check/crc32_table_be.h | 2 - - src/liblzma/check/crc32_table_le.h | 2 - - src/liblzma/check/crc32_tablegen.c | 1 - - src/liblzma/check/crc64_table.c | 4 +-- - src/liblzma/check/crc64_table_be.h | 2 - - src/liblzma/check/crc64_table_le.h | 2 - - src/liblzma/check/crc64_tablegen.c | 1 - - src/lzma/private.h | 1 - - 13 files changed, 106 insertions(+), 35 deletions(-) - -commit a71864f77dfb76b5d78a270641539947c312583a -Author: Lasse Collin -Date: 2008-01-05 19:57:00 +0200 - - Fix typo in comment (INT64_MAX -> UINT64_MAX). - - src/liblzma/api/lzma/vli.h | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 072927905a3b66281c6311b4b351caa501d8b73a -Author: Lasse Collin -Date: 2008-01-05 19:42:04 +0200 - - Rearranged testing of GCC-specific flags. - - configure.ac | 33 +++++++++++++++++++++++---------- - 1 files changed, 23 insertions(+), 10 deletions(-) - -commit d160ee32598c6d1cd9054ef019e8c9331208b188 -Author: Lasse Collin -Date: 2008-01-05 01:20:24 +0200 - - Another bug fix for flush marker detection. - - src/liblzma/lzma/lzma_decoder.c | 10 +++++++++- - 1 files changed, 9 insertions(+), 1 deletions(-) - -commit fc67f79f607cbfa78c6f47a69dec098d8659b162 -Author: Lasse Collin -Date: 2008-01-04 21:37:01 +0200 - - Fix stupid bugs in flush marker detection. - - src/liblzma/lzma/lzma_decoder.c | 7 ++++--- - 1 files changed, 4 insertions(+), 3 deletions(-) - -commit 0029cbbabe87d491fc046a55a629a6d556010baa -Author: Lasse Collin -Date: 2008-01-04 21:30:33 +0200 - - Added support for flush marker, which will be in files - that use LZMA_SYNC_FLUSH with encoder (not implemented - yet). This is a new feature in the raw LZMA format, - which isn't supported by old decoders. This shouldn't - be a problem in practice, since lzma_alone_encoder() - will not allow LZMA_SYNC_FLUSH, and thus not allow - creating files on decodable with old decoders. - - Made lzma_decoder.c to require tab width of 4 characters - if one wants to fit the code in 80 columns. This makes - the code easier to read. - - src/liblzma/lzma/lzma_common.h | 4 + - src/liblzma/lzma/lzma_decoder.c | 217 ++++++++++++++++++--------------------- - 2 files changed, 104 insertions(+), 117 deletions(-) - -commit bbfd1f6ab058a7e661545205befcb7f70c5685ab -Author: Lasse Collin -Date: 2008-01-04 20:45:05 +0200 - - Moved range decoder initialization (reading the first - five input bytes) from LZMA decoder to range decoder - header. Did the same for decoding of direct bits. - - src/liblzma/lzma/lzma_decoder.c | 42 ++------------- - src/liblzma/rangecoder/range_decoder.h | 87 ++++++++++++++++++++++---------- - 2 files changed, 66 insertions(+), 63 deletions(-) - -commit 5db745cd2a74f6ed2e52f5c716c08ed0daf17ebc -Author: Lasse Collin -Date: 2007-12-14 11:15:21 +0200 - - Added a note to README that --disable-assembler - must be used on Darwin. - - README | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -commit 44b333d4615b5aabc557a0e1b6bb0096da3fae24 -Author: Lasse Collin -Date: 2007-12-14 10:07:10 +0200 - - Use the filename suffix .S instead of .s for assembler files - so that the preprocessor removes the /* */ style comments, - which are not supported by some non-GNU assemblers (Solaris) - that otherwise work with this code. - - src/liblzma/check/Makefile.am | 4 +- - src/liblzma/check/crc32_x86.S | 217 +++++++++++++++++++++++++++++++++++++++++ - src/liblzma/check/crc32_x86.s | 217 ----------------------------------------- - src/liblzma/check/crc64_x86.S | 203 ++++++++++++++++++++++++++++++++++++++ - src/liblzma/check/crc64_x86.s | 203 -------------------------------------- - 5 files changed, 422 insertions(+), 422 deletions(-) - -commit ec1c82b2e82f395f6e8e19ac212a639644330cd7 -Author: Lasse Collin -Date: 2007-12-14 09:59:05 +0200 - - Fixed wrong symbol name in crc64_x86.s. - - src/liblzma/check/crc64_x86.s | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 2881570df6803eed2fe550af34574e8e61794804 -Author: Lasse Collin -Date: 2007-12-14 09:53:24 +0200 - - Use .globl instead of .global in x86 assembler code for - better portability. Still needs fixing the commenting. - - src/liblzma/check/crc32_x86.s | 2 +- - src/liblzma/check/crc64_x86.s | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit 698470b8f33fc0e5f27dafa93b39b6dd5dde5a66 -Author: Lasse Collin -Date: 2007-12-13 20:14:37 +0200 - - Fixed a few short options that take an argument. - short_opts[] was missing colons to indicate - required argument. Thanks to Fabio Pedretti for - the bug report. - - src/lzma/args.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 918bcb0e0728d2d976621e9f35b56f224f11d989 -Author: Lasse Collin -Date: 2007-12-11 17:08:04 +0200 - - Removed uncompressed size tracking from Delta encoder too. - - src/liblzma/common/delta_coder.c | 21 +++------------------ - 1 files changed, 3 insertions(+), 18 deletions(-) - -commit 3e16d51dd645667b05ff826665b1fc353aa41cd9 -Author: Lasse Collin -Date: 2007-12-11 16:49:19 +0200 - - Remove uncompressed size tracking from the filter encoders. - It's not strictly needed there, and just complicates the - code. LZ encoder never even had this feature. - - The primary reason to have uncompressed size tracking in - filter encoders was validating that the application - doesn't give different amount of input that it had - promised. A side effect was to validate internal workings - of liblzma. - - Uncompressed size tracking is still present in the Block - encoder. Maybe it should be added to LZMA_Alone and raw - encoders too. It's simpler to have one coder just to - validate the uncompressed size instead of having it - in every filter. - - src/liblzma/common/copy_coder.c | 25 +------------------ - src/liblzma/simple/simple_coder.c | 29 +++-------------------- - src/liblzma/subblock/subblock_encoder.c | 38 +++++-------------------------- - 3 files changed, 12 insertions(+), 80 deletions(-) - -commit 5286723e0d1ac386d5b07f08d78e61becf895a5a -Author: Lasse Collin -Date: 2007-12-11 14:10:53 +0200 - - Get rid of no-NLS gnulib. I don't know how to get it - working with Automake. People who want smaller lzmadec - should use --disable-nls on non-GNU systems. - - lib/Makefile.am | 10 +--------- - src/lzma/Makefile.am | 2 +- - src/lzmadec/Makefile.am | 4 +++- - 3 files changed, 5 insertions(+), 11 deletions(-) - -commit ce8b036a6c7a43b290356b673d953f6d76b2be64 -Author: Lasse Collin -Date: 2007-12-11 14:09:35 +0200 - - Fixed a typo in tests/Makefile.am which prevented - building the tests if gnulib was needed. - - tests/Makefile.am | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit 7c1ad41eb611ed89e5bb8792a3beb533b7aa59f4 -Author: Lasse Collin -Date: 2007-12-11 11:18:58 +0200 - - Fixed wrong type of flags_size in Subblock encoder. - - src/liblzma/subblock/subblock_encoder.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -commit ce64df716243fdc40359090d1f6541f3a4f5f21a -Author: Lasse Collin -Date: 2007-12-10 20:44:16 +0200 - - Bumped version number to 4.42.3alpha. - - configure.ac | 2 +- - src/liblzma/api/lzma/version.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit b499a0403ea5c41d6a25b40275eb6c57643052ce -Author: Lasse Collin -Date: 2007-12-10 15:02:50 +0200 - - Disabled some unneeded warnings and made "make dist" work. - - Makefile.am | 9 +++------ - configure.ac | 9 ++++++--- - po/fi.po | 47 ++++++++++++++++++++++++----------------------- - 3 files changed, 33 insertions(+), 32 deletions(-) - -commit 2ab8adb5165a0b77114a7eb21f9ff1e6a266f172 -Author: Lasse Collin -Date: 2007-12-09 21:43:15 +0200 - - Added LZMA_SYNC_FLUSH support to the Copy filter. - - src/liblzma/common/copy_coder.c | 92 ++++++++++++++++++++++++--------------- - 1 files changed, 57 insertions(+), 35 deletions(-) - -commit 329c272d501e88793dda5540358d55c12428d194 -Author: Lasse Collin -Date: 2007-12-09 17:14:07 +0200 - - Added missing LZMA_API to the C versions of the CRC functions. - The x86 assembler versions were already OK. - - src/liblzma/check/crc32.c | 2 +- - src/liblzma/check/crc64.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit c90daf86ce683fa8cf80491d624ffb158dfbd9d7 -Author: Jim Meyering -Date: 2007-12-09 15:34:25 +0100 - - * tests/test_block_header.c (test3): Remove duplicate initializer. - - autogen.sh | 2 +- - tests/test_block_header.c | 1 - - 2 files changed, 1 insertions(+), 2 deletions(-) - -commit 07ac881779a8477f2c1ab112b91a129e24aa743c -Author: Lasse Collin -Date: 2007-12-09 17:06:45 +0200 - - Take advantage of return_if_error() macro in more places. - Cleaned Subblock filter's initialization code too. - - src/liblzma/common/block_decoder.c | 22 +++------- - src/liblzma/common/delta_coder.c | 8 +--- - src/liblzma/common/stream_decoder.c | 17 +++----- - src/liblzma/common/stream_encoder_multi.c | 68 +++++++++------------------ - src/liblzma/common/stream_encoder_single.c | 8 +-- - src/liblzma/subblock/subblock_decoder.c | 33 +++++--------- - src/liblzma/subblock/subblock_encoder.c | 45 +++++------------- - 7 files changed, 63 insertions(+), 138 deletions(-) - -commit 41338717964f510ee61d70b25bd4c502ec9f77cf -Author: Lasse Collin -Date: 2007-12-09 12:13:01 +0200 - - Added a bunch of .lzma test files. - - tests/files/bad-single-data_after_eopm.lzma | Bin 0 -> 55 bytes - tests/files/bad-single-data_after_eopm_2.lzma | Bin 0 -> 56 bytes - tests/files/bad-single-subblock_subblock.lzma | Bin 0 -> 26 bytes - tests/files/good-cat-single-none-pad.lzma | Bin 0 -> 64 bytes - tests/files/good-single-delta-lzma.tiff.lzma | Bin 0 -> 51409 bytes - tests/files/good-single-lzma.lzma | Bin 0 -> 44 bytes - tests/files/good-single-none-pad.lzma | Bin 0 -> 32 bytes - tests/files/good-single-none.lzma | Bin 0 -> 30 bytes - tests/files/good-single-subblock-lzma.lzma | Bin 0 -> 50 bytes - tests/files/good-single-subblock_rle.lzma | Bin 0 -> 118 bytes - tests/files/malicious-multi-metadata-64PiB.lzma | Bin 0 -> 51 bytes - tests/files/malicious-single-subblock-256MiB.lzma | Bin 0 -> 30 bytes - tests/files/malicious-single-subblock-64PiB.lzma | Bin 0 -> 45 bytes - tests/files/malicious-single-subblock-loop.lzma | Bin 0 -> 43 bytes - tests/files/malicious-single-subblock-lzma.lzma | Bin 0 -> 505 bytes - .../files/malicious-single-subblock1023-slow.lzma | Bin 0 -> 7886 bytes - tests/files/malicious-single-subblock31-slow.lzma | Bin 0 -> 1233 bytes - 17 files changed, 0 insertions(+), 0 deletions(-) - -commit ff946ceb7975d4f11950afd33f6315b4d20d1a03 -Author: Lasse Collin -Date: 2007-12-09 11:24:48 +0200 - - Re-enabled the security checks in Subblock decoder - that were disabled for debugging reasons. - - src/liblzma/subblock/subblock_decoder.c | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -commit 2bf36d22d2c24ac3f488e63b35564fa2f6dab8d1 -Author: Lasse Collin -Date: 2007-12-09 11:03:28 +0200 - - Fixed the tests to build with -Werror. - - tests/test_block_header.c | 2 +- - tests/test_check.c | 2 +- - tests/test_filter_flags.c | 2 +- - tests/test_index.c | 14 +++++++------- - tests/test_info.c | 2 +- - tests/test_stream_flags.c | 2 +- - 6 files changed, 12 insertions(+), 12 deletions(-) - -commit 5d018dc03549c1ee4958364712fb0c94e1bf2741 -Author: Lasse Collin -Date: 2007-12-09 00:42:33 +0200 - - Imported to git. - - AUTHORS | 18 + - COPYING | 24 + - COPYING.GPLv2 | 339 +++++ - COPYING.GPLv3 | 674 +++++++++ - COPYING.LGPLv2.1 | 504 +++++++ - ChangeLog | 2 + - Doxyfile.in | 1229 ++++++++++++++++ - Makefile.am | 38 + - README | 151 ++ - THANKS | 23 + - TODO | 109 ++ - autogen.sh | 38 + - configure.ac | 611 ++++++++ - doc/bugs.txt | 46 + - doc/faq.txt | 247 ++++ - doc/file-format.txt | 1861 ++++++++++++++++++++++++ - doc/history.txt | 140 ++ - doc/liblzma-advanced.txt | 324 ++++ - doc/liblzma-hacking.txt | 112 ++ - doc/liblzma-intro.txt | 188 +++ - doc/liblzma-security.txt | 219 +++ - doc/lzma-intro.txt | 107 ++ - extra/scanlzma/scanlzma.c | 85 ++ - lib/Makefile.am | 40 + - lib/getopt.c | 1191 +++++++++++++++ - lib/getopt1.c | 171 +++ - lib/getopt_.h | 226 +++ - lib/getopt_int.h | 131 ++ - lib/gettext.h | 240 +++ - m4/acx_pthread.m4 | 279 ++++ - m4/getopt.m4 | 83 ++ - po/LINGUAS | 1 + - po/Makevars | 46 + - po/POTFILES.in | 13 + - po/fi.po | 445 ++++++ - src/Makefile.am | 16 + - src/common/open_stdxxx.h | 50 + - src/common/physmem.h | 77 + - src/common/sysdefs.h | 100 ++ - src/liblzma/Makefile.am | 47 + - src/liblzma/api/Makefile.am | 39 + - src/liblzma/api/lzma.h | 122 ++ - src/liblzma/api/lzma/alignment.h | 60 + - src/liblzma/api/lzma/alone.h | 82 ++ - src/liblzma/api/lzma/auto.h | 41 + - src/liblzma/api/lzma/base.h | 410 ++++++ - src/liblzma/api/lzma/block.h | 409 ++++++ - src/liblzma/api/lzma/check.h | 128 ++ - src/liblzma/api/lzma/copy.h | 29 + - src/liblzma/api/lzma/delta.h | 49 + - src/liblzma/api/lzma/extra.h | 114 ++ - src/liblzma/api/lzma/filter.h | 166 +++ - src/liblzma/api/lzma/index.h | 84 ++ - src/liblzma/api/lzma/info.h | 315 ++++ - src/liblzma/api/lzma/init.h | 85 ++ - src/liblzma/api/lzma/lzma.h | 312 ++++ - src/liblzma/api/lzma/memlimit.h | 157 ++ - src/liblzma/api/lzma/metadata.h | 100 ++ - src/liblzma/api/lzma/raw.h | 72 + - src/liblzma/api/lzma/simple.h | 85 ++ - src/liblzma/api/lzma/stream.h | 178 +++ - src/liblzma/api/lzma/stream_flags.h | 142 ++ - src/liblzma/api/lzma/subblock.h | 197 +++ - src/liblzma/api/lzma/version.h | 59 + - src/liblzma/api/lzma/vli.h | 244 ++++ - src/liblzma/check/Makefile.am | 64 + - src/liblzma/check/check.c | 160 ++ - src/liblzma/check/check.h | 102 ++ - src/liblzma/check/check_byteswap.h | 43 + - src/liblzma/check/check_init.c | 37 + - src/liblzma/check/crc32.c | 88 ++ - src/liblzma/check/crc32_init.c | 58 + - src/liblzma/check/crc32_table.c | 22 + - src/liblzma/check/crc32_table_be.h | 527 +++++++ - src/liblzma/check/crc32_table_le.h | 527 +++++++ - src/liblzma/check/crc32_tablegen.c | 55 + - src/liblzma/check/crc32_x86.s | 217 +++ - src/liblzma/check/crc64.c | 75 + - src/liblzma/check/crc64_init.c | 58 + - src/liblzma/check/crc64_table.c | 22 + - src/liblzma/check/crc64_table_be.h | 523 +++++++ - src/liblzma/check/crc64_table_le.h | 523 +++++++ - src/liblzma/check/crc64_tablegen.c | 56 + - src/liblzma/check/crc64_x86.s | 203 +++ - src/liblzma/check/crc_macros.h | 33 + - src/liblzma/check/sha256.c | 203 +++ - src/liblzma/common/Makefile.am | 94 ++ - src/liblzma/common/alignment.c | 118 ++ - src/liblzma/common/allocator.c | 57 + - src/liblzma/common/alone_decoder.c | 197 +++ - src/liblzma/common/alone_decoder.h | 24 + - src/liblzma/common/alone_encoder.c | 167 +++ - src/liblzma/common/auto_decoder.c | 113 ++ - src/liblzma/common/block_decoder.c | 405 +++++ - src/liblzma/common/block_decoder.h | 29 + - src/liblzma/common/block_encoder.c | 375 +++++ - src/liblzma/common/block_encoder.h | 29 + - src/liblzma/common/block_header_decoder.c | 373 +++++ - src/liblzma/common/block_header_encoder.c | 211 +++ - src/liblzma/common/block_private.h | 46 + - src/liblzma/common/chunk_size.c | 74 + - src/liblzma/common/code.c | 203 +++ - src/liblzma/common/common.h | 271 ++++ - src/liblzma/common/copy_coder.c | 143 ++ - src/liblzma/common/copy_coder.h | 31 + - src/liblzma/common/delta_coder.c | 210 +++ - src/liblzma/common/delta_coder.h | 31 + - src/liblzma/common/extra.c | 33 + - src/liblzma/common/features.c | 70 + - src/liblzma/common/filter_flags_decoder.c | 382 +++++ - src/liblzma/common/filter_flags_encoder.c | 359 +++++ - src/liblzma/common/index.c | 140 ++ - src/liblzma/common/info.c | 823 +++++++++++ - src/liblzma/common/init.c | 39 + - src/liblzma/common/init_decoder.c | 33 + - src/liblzma/common/init_encoder.c | 44 + - src/liblzma/common/memory_limitter.c | 200 +++ - src/liblzma/common/memory_usage.c | 113 ++ - src/liblzma/common/metadata_decoder.c | 555 +++++++ - src/liblzma/common/metadata_decoder.h | 31 + - src/liblzma/common/metadata_encoder.c | 436 ++++++ - src/liblzma/common/metadata_encoder.h | 30 + - src/liblzma/common/next_coder.c | 65 + - src/liblzma/common/raw_common.c | 175 +++ - src/liblzma/common/raw_common.h | 31 + - src/liblzma/common/raw_decoder.c | 127 ++ - src/liblzma/common/raw_decoder.h | 30 + - src/liblzma/common/raw_encoder.c | 124 ++ - src/liblzma/common/raw_encoder.h | 30 + - src/liblzma/common/stream_common.c | 23 + - src/liblzma/common/stream_common.h | 28 + - src/liblzma/common/stream_decoder.c | 454 ++++++ - src/liblzma/common/stream_encoder_multi.c | 460 ++++++ - src/liblzma/common/stream_encoder_single.c | 220 +++ - src/liblzma/common/stream_flags_decoder.c | 258 ++++ - src/liblzma/common/stream_flags_decoder.h | 31 + - src/liblzma/common/stream_flags_encoder.c | 75 + - src/liblzma/common/sysdefs.h | 1 + - src/liblzma/common/version.c | 25 + - src/liblzma/common/vli_decoder.c | 69 + - src/liblzma/common/vli_encoder.c | 81 + - src/liblzma/common/vli_reverse_decoder.c | 55 + - src/liblzma/lz/Makefile.am | 63 + - src/liblzma/lz/bt2.c | 27 + - src/liblzma/lz/bt2.h | 31 + - src/liblzma/lz/bt3.c | 29 + - src/liblzma/lz/bt3.h | 31 + - src/liblzma/lz/bt4.c | 30 + - src/liblzma/lz/bt4.h | 31 + - src/liblzma/lz/hc3.c | 30 + - src/liblzma/lz/hc3.h | 31 + - src/liblzma/lz/hc4.c | 31 + - src/liblzma/lz/hc4.h | 31 + - src/liblzma/lz/lz_decoder.c | 462 ++++++ - src/liblzma/lz/lz_decoder.h | 214 +++ - src/liblzma/lz/lz_encoder.c | 481 ++++++ - src/liblzma/lz/lz_encoder.h | 161 ++ - src/liblzma/lz/lz_encoder_private.h | 40 + - src/liblzma/lz/match_c.h | 401 +++++ - src/liblzma/lz/match_h.h | 69 + - src/liblzma/lzma.pc.in | 11 + - src/liblzma/lzma/Makefile.am | 43 + - src/liblzma/lzma/lzma_common.h | 128 ++ - src/liblzma/lzma/lzma_decoder.c | 844 +++++++++++ - src/liblzma/lzma/lzma_decoder.h | 41 + - src/liblzma/lzma/lzma_encoder.c | 413 ++++++ - src/liblzma/lzma/lzma_encoder.h | 35 + - src/liblzma/lzma/lzma_encoder_features.c | 59 + - src/liblzma/lzma/lzma_encoder_getoptimum.c | 893 ++++++++++++ - src/liblzma/lzma/lzma_encoder_getoptimumfast.c | 201 +++ - src/liblzma/lzma/lzma_encoder_init.c | 245 ++++ - src/liblzma/lzma/lzma_encoder_presets.c | 34 + - src/liblzma/lzma/lzma_encoder_private.h | 225 +++ - src/liblzma/lzma/lzma_literal.c | 74 + - src/liblzma/lzma/lzma_literal.h | 74 + - src/liblzma/rangecoder/Makefile.am | 28 + - src/liblzma/rangecoder/range_common.h | 68 + - src/liblzma/rangecoder/range_decoder.h | 189 +++ - src/liblzma/rangecoder/range_encoder.c | 46 + - src/liblzma/rangecoder/range_encoder.h | 317 ++++ - src/liblzma/simple/Makefile.am | 46 + - src/liblzma/simple/arm.c | 76 + - src/liblzma/simple/armthumb.c | 81 + - src/liblzma/simple/ia64.c | 117 ++ - src/liblzma/simple/powerpc.c | 80 + - src/liblzma/simple/simple_coder.c | 306 ++++ - src/liblzma/simple/simple_coder.h | 68 + - src/liblzma/simple/simple_private.h | 86 ++ - src/liblzma/simple/sparc.c | 88 ++ - src/liblzma/simple/x86.c | 161 ++ - src/liblzma/subblock/Makefile.am | 33 + - src/liblzma/subblock/subblock_decoder.c | 681 +++++++++ - src/liblzma/subblock/subblock_decoder.h | 29 + - src/liblzma/subblock/subblock_decoder_helper.c | 80 + - src/liblzma/subblock/subblock_decoder_helper.h | 36 + - src/liblzma/subblock/subblock_encoder.c | 841 +++++++++++ - src/liblzma/subblock/subblock_encoder.h | 28 + - src/lzma/Makefile.am | 63 + - src/lzma/alloc.c | 106 ++ - src/lzma/alloc.h | 42 + - src/lzma/args.c | 566 +++++++ - src/lzma/args.h | 64 + - src/lzma/error.c | 156 ++ - src/lzma/error.h | 67 + - src/lzma/hardware.c | 99 ++ - src/lzma/hardware.h | 31 + - src/lzma/help.c | 178 +++ - src/lzma/help.h | 32 + - src/lzma/io.c | 664 +++++++++ - src/lzma/io.h | 60 + - src/lzma/list.c | 477 ++++++ - src/lzma/main.c | 254 ++++ - src/lzma/options.c | 346 +++++ - src/lzma/options.h | 46 + - src/lzma/private.h | 55 + - src/lzma/process.c | 458 ++++++ - src/lzma/process.h | 30 + - src/lzma/suffix.c | 145 ++ - src/lzma/suffix.h | 25 + - src/lzma/util.c | 182 +++ - src/lzma/util.h | 32 + - src/lzmadec/Makefile.am | 27 + - src/lzmadec/lzmadec.c | 515 +++++++ - src/scripts/Makefile.am | 24 + - src/scripts/lzdiff | 67 + - src/scripts/lzdiff.1 | 51 + - src/scripts/lzgrep | 123 ++ - src/scripts/lzgrep.1 | 61 + - src/scripts/lzmore | 74 + - src/scripts/lzmore.1 | 55 + - tests/Makefile.am | 43 + - tests/test_block.c | 59 + - tests/test_block_header.c | 352 +++++ - tests/test_check.c | 90 ++ - tests/test_filter_flags.c | 326 +++++ - tests/test_index.c | 43 + - tests/test_info.c | 717 +++++++++ - tests/test_stream_flags.c | 191 +++ - tests/tests.h | 148 ++ - 239 files changed, 42513 insertions(+), 0 deletions(-) diff --git a/Build/source/utils/xz-4.999.9beta/Doxyfile.in b/Build/source/utils/xz-4.999.9beta/Doxyfile.in deleted file mode 100644 index fa3c1e1ddc6..00000000000 --- a/Build/source/utils/xz-4.999.9beta/Doxyfile.in +++ /dev/null @@ -1,1234 +0,0 @@ -# Doxyfile 1.4.7 - -# Copyright (C) 1997-2007 by Dimitri van Heesch -# License: GNU GPLv2+ - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = "@PACKAGE_NAME@" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = "@PACKAGE_VERSION@" - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = doc - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = YES - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = NO - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = @top_srcdir@/src - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py - -FILE_PATTERNS = *.h *.c - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = YES - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentstion. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = YES - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = LZMA_API(type)=type \ - LZMA_API_IMPORT \ - LZMA_API_CALL= - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a caller dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/Build/source/utils/xz-4.999.9beta/INSTALL b/Build/source/utils/xz-4.999.9beta/INSTALL deleted file mode 100644 index ec757202c98..00000000000 --- a/Build/source/utils/xz-4.999.9beta/INSTALL +++ /dev/null @@ -1,339 +0,0 @@ - -XZ Utils Installation -===================== - - 0. Preface - 1. Supported platforms - 1.1. Compilers - 1.2. Platform-specific notes - 1.2.1. Darwin (Mac OS X) - 1.2.2. Tru64 - 1.2.3. Windows - 1.2.4. DOS - 1.2.5. OS/2 - 1.3. Adding support for new platforms - 2. configure options - 3. xzgrep and other scripts - 3.1. Dependencies - 3.2. PATH - 4. Troubleshooting - 4.1. "No C99 compiler was found." - 4.1. "No POSIX conforming shell (sh) was found." - 4.2. configure works but build fails at crc32_x86.S - - -0. Preface ----------- - - If you aren't familiar with building packages that use GNU Autotools, - see the file INSTALL.generic for generic instructions before reading - further. - - If you are going to build a package for distribution, see also the - file PACKAGERS. It contains information that should help making the - binary packages as good as possible, but the information isn't very - interesting to those making local builds for private use or for use - in special situations like embedded systems. - - -1. Supported platforms ----------------------- - - XZ Utils are developed on GNU/Linux, but they should work on many - POSIX-like operating systems like *BSDs and Solaris, and even on - a few non-POSIX operating systems. - - -1.1. Compilers - - A C99 compiler is required to compile XZ Utils. If you use GCC, you - need at least version 3.x.x. GCC version 2.xx.x doesn't support some - C99 features used in XZ Utils source code, thus GCC 2 won't compile - XZ Utils. - - XZ Utils takes advantage of some GNU C extensions when building - with GCC. Because these extensions are used only when building - with GCC, it should be possible to use any C99 compiler. - - -1.2. Platform-specific notes - -1.2.1. Darwin (Mac OS X) - - You may need --disable-assembler if building universal binaries on - Darwin. This is because different files are built when assembler is - enabled, and there's no way to make it work with universal build. - If you want to keep the assembler code, consider building one - architecture at a time, and then combining the results to create - universal binaries (see lipo(1)). - - -1.2.2. Tru64 - - If you try to use the native C compiler on Tru64 (passing CC=cc to - configure), it is possible that the configure script will complain - that no C99 compiler was found even when the native compiler supports - C99. You can safely override the test for C99 compiler by passing - ac_cv_prog_cc_c99= as the argument to the configure script. - - -1.2.3. Windows - - Building XZ Utils on Windows is supported under MinGW and Cygwin. - If the Autotools based build gives you trouble with MinGW, you may - want try the alternative method found from the "windows" directory. - - MSVC doesn't support C99, thus it is not possible to use MSVC to - compile XZ Utils. However, it is possible to use liblzma.dll from - MSVC once liblzma.dll has been built with MinGW. The required - import library for MSVC can be created from liblzma.def using the - "lib" command shipped in MSVC: - - lib /def:liblzma.def /out:liblzma.lib /machine:ix86 - - On x86-64, the /machine argument has to naturally be changed: - - lib /def:liblzma.def /out:liblzma.lib /machine:x64 - - -1.2.4. DOS - - There is an experimental Makefile in the "dos" directory to build - XZ Utils on DOS using DJGPP. Support for long file names (LFN) is - needed. - - GNU Autotools based build hasn't been tried on DOS. - - -1.2.5. OS/2 - - You will need to pass --disable-assembler to configure when building - on OS/2. - - -1.3. Adding support for new platforms - - If you have written patches to make XZ Utils to work on previously - unsupported platform, please send the patches to me! I will consider - including them to the official version. It's nice to minimize the - need of third-party patching. - - One exception: Don't request or send patches to change the whole - source package to C89. I find C99 substantially nicer to write and - maintain. However, the public library headers must be in C89 to - avoid frustrating those who maintain programs, which are strictly - in C89 or C++. - - -2. configure options --------------------- - - In most cases, the defaults are what you want. Most of the options - below are useful only when building a size-optimized version of - liblzma or command line tools. - - --enable-encoders=LIST - --disable-encoders - Specify a comma-separated LIST of filter encoders to - build. See "./configure --help" for exact list of - available filter encoders. The default is to build all - supported encoders. - - If LIST is empty or --disable-encoders is used, no filter - encoders will be built and also the code shared between - encoders will be omitted. - - Disabling encoders will remove some symbols from the - liblzma ABI, so this option should be used only when it - is known to not cause problems. - - --enable-decoders=LIST - --disable-decoders - This is like --enable-encoders but for decoders. The - default is to build all supported decoders. - - --enable-match-finders=LIST - liblzma includes two categories of match finders: - hash chains and binary trees. Hash chains (hc3 and hc4) - are quite fast but they don't provide the best compression - ratio. Binary trees (bt2, bt3 and bt4) give excellent - compression ratio, but they are slower and need more - memory than hash chains. - - You need to enable at least one match finder to build the - LZMA1 or LZMA2 filter encoders. Usually hash chains are - used only in the fast mode, while binary trees are used to - when the best compression ratio is wanted. - - The default is to build all the match finders if LZMA1 - or LZMA2 filter encoders are being built. - - --enable-checks=LIST - liblzma support multiple integrity checks. CRC32 is - mandatory, and cannot be omitted. See "./configure --help" - for exact list of available integrity check types. - - liblzma and the command line tools can decompress files - which use unsupported integrity check type, but naturally - the file integrity cannot be verified in that case. - - Disabling integrity checks may remove some symbols from - the liblzma ABI, so this option should be used only when - it is known to not cause problems. - - --disable-assembler - liblzma includes some assembler optimizations. Currently - there is only assembler code for CRC32 and CRC64 for - 32-bit x86. - - All the assembler code in liblzma is position-independent - code, which is suitable for use in shared libraries and - position-independent executables. So far only i386 - instructions are used, but the code is optimized for i686 - class CPUs. If you are compiling liblzma exclusively for - pre-i686 systems, you may want to disable the assembler - code. - - --enable-unaligned-access - Allow liblzma to use unaligned memory access for 16-bit - and 32-bit loads and stores. This should be enabled only - when the hardware supports this, i.e. when unaligned - access is fast. Some operating system kernels emulate - unaligned access, which is extremely slow. This option - shouldn't be used on systems that rely on such emulation. - - Unaligned access is enabled by default on x86, x86-64, - and big endian PowerPC. - - --enable-small - Reduce the size of liblzma by selecting smaller but - semantically equivalent version of some functions, and - omit precomputed lookup tables. This option tends to - make liblzma slightly slower. - - Note that while omitting the precomputed tables makes - liblzma smaller on disk, the tables are still needed at - run time, and need to be computed at startup. This also - means that the RAM holding the tables won't be shared - between applications linked against shared liblzma. - - --disable-threads - Disable threading support. This makes some things - thread-unsafe, meaning that if multithreaded application - calls liblzma functions from more than one thread, - something bad may happen. - - Use this option if threading support causes you trouble, - or if you know that you will use liblzma only from - single-threaded applications and want to avoid dependency - on libpthread. - - --enable-dynamic=TYPE - Specify how command line tools should be linked against - liblzma. Possible TYPES: - - yes All command line tools are linked against - shared liblzma (if shared liblzma was built). - This is equivalent to --enable-dynamic (i.e. - no =TYPE). - - mixed Some tools are linked against static liblzma - and some against shared liblzma. This is the - default and recommended way. - - no All command line tools are linked against - static liblzma (if static liblzma was built). - This is equivalent to --disable-dynamic. - - This option is mostly useful for packagers, if distro - policy requires linking against shared libaries. See the - file PACKAGERS for more information about pros and cons - of this option. - - --enable-debug - This enables the assert() macro and possibly some other - run-time consistency checks. It makes the code slower, so - you normally don't want to have this enabled. - - --enable-werror - If building with GCC, make all compiler warnings an error, - that abort the compilation. This may help catching bugs, - and should work on most systems. This has no effect on the - resulting binaries. - - -3. xzgrep and other scripts ---------------------------- - -3.1. Dependencies - - POSIX shell (sh) and bunch of other standard POSIX tools are required - to run the scripts. The configure script tries to find a POSIX - compliant sh, but if it fails, you can force the shell by passing - gl_cv_posix_shell=/path/to/posix-sh as an argument to the configure - script. - - Some of the scripts require also mktemp. The original mktemp can be - found from . On GNU, most will use the mktemp - program from GNU coreutils instead of the original implementation. - Both mktemp versions are fine for XZ Utils (and practically for - everything else too). - - -3.2. PATH - - The scripts assume that the required tools (standard POSIX utilities, - mktemp, and xz) are in PATH; the scripts don't set the PATH themselves. - Some people like this while some think this is a bug. Those in the - latter group can easily patch the scripts before running the configure - script by taking advantage of a placeholder line in the scripts. - - For example, to make the scripts prefix /usr/bin:/bin to PATH: - - perl -pi -e 's|^#SET_PATH.*$|PATH=/usr/bin:/bin:\$PATH|' \ - src/scripts/xz*.in - - -4. Troubleshooting ------------------- - -4.1. "No C99 compiler was found." - - You need a C99 compiler to build XZ Utils. If the configure script - cannot find a C99 compiler and you think you have such a compiler - installed, set the compiler command by passing CC=/path/to/c99 as - an argument to the configure script. - - If you get this error even when you think your compiler supports C99, - you can override the test by passing ac_cv_prog_cc_c99= as an argument - to the configure script. The test for C99 compiler is not perfect (and - it is not as easy to make it perfect as it sounds), so sometimes this - may be needed. You will get a compile error if your compiler doesn't - support enough C99. - - -4.1. "No POSIX conforming shell (sh) was found." - - xzgrep and other scripts need a shell that (roughly) conforms - to POSIX. The configure script tries to find such a shell. If - it fails, you can force the shell to be used by passing - gl_cv_posix_shell=/path/to/posix-sh as an argument to the configure - script. - - -4.2. configure works but build fails at crc32_x86.S - - The easy fix is to pass --disable-assembler to the configure script. - - The configure script determines if assembler code can be used by - looking at the configure triplet; there is currently no check if - the assembler code can actually actually be built. The x86 assembler - code should work on x86 GNU/Linux, *BSDs, Solaris, Darwin, MinGW, - Cygwin, and DJGPP. On other x86 systems, there may be problems and - the assembler code may need to be disabled with the configure option. - - If you get this error when building for x86-64, you have specified or - the configure script has misguessed your architecture. Pass the - correct configure triplet using the --build=CPU-COMPANY-SYSTEM option - (see INSTALL.generic). - diff --git a/Build/source/utils/xz-4.999.9beta/INSTALL.generic b/Build/source/utils/xz-4.999.9beta/INSTALL.generic deleted file mode 100644 index 2550dab7526..00000000000 --- a/Build/source/utils/xz-4.999.9beta/INSTALL.generic +++ /dev/null @@ -1,302 +0,0 @@ -Installation Instructions -************************* - -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, -2006, 2007, 2008, 2009 Free Software Foundation, Inc. - - This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. - -Basic Installation -================== - - Briefly, the shell commands `./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. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. Caching is -disabled by default to prevent problems with accidental use of stale -cache files. - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You need `configure.ac' if -you want to change it or regenerate `configure' using a newer version -of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. - - Running `configure' might take a while. While running, it prints - some messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - - 6. Often, you can also type `make uninstall' to remove the installed - files again. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. Run `./configure --help' -for details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c99 CFLAGS=-g LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you can use GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - With a non-GNU `make', it is safer to compile the package for one -architecture at a time in the source code directory. After you have -installed the package for one architecture, use `make distclean' before -reconfiguring for another architecture. - - On MacOS X 10.5 and later systems, you can create libraries and -executables that work on multiple system types--known as "fat" or -"universal" binaries--by specifying multiple `-arch' options to the -compiler but only a single `-arch' option to the preprocessor. Like -this: - - ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CPP="gcc -E" CXXCPP="g++ -E" - - This is not guaranteed to produce working output in all cases, you -may have to build one architecture at a time and combine the results -using the `lipo' tool if you have problems. - -Installation Names -================== - - By default, `make install' installs the package's commands under -`/usr/local/bin', include files under `/usr/local/include', etc. You -can specify an installation prefix other than `/usr/local' by giving -`configure' the option `--prefix=PREFIX'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -pass the option `--exec-prefix=PREFIX' to `configure', the package uses -PREFIX as the prefix for installing programs and libraries. -Documentation and other data files still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=DIR' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Particular systems -================== - - On HP-UX, the default C compiler is not ANSI C compatible. If GNU -CC is not installed, it is recommended to use the following options in -order to use an ANSI C compiler: - - ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" - -and if that doesn't work, install pre-built binaries of GCC for HP-UX. - - On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot -parse its `' header file. The option `-nodtk' can be used as -a workaround. If GNU CC is not installed, it is therefore recommended -to try - - ./configure CC="cc" - -and if that doesn't work, try - - ./configure CC="cc -nodtk" - - On Solaris, don't put `/usr/ucb' early in your `PATH'. This -directory contains several dysfunctional programs; working variants of -these programs are available in `/usr/bin'. So, if you need `/usr/ucb' -in your `PATH', put it _after_ `/usr/bin'. - - On Haiku, software installed for all users goes in `/boot/common', -not `/usr/local'. It is recommended to use the following options: - - ./configure --prefix=/boot/common - -Specifying the System Type -========================== - - There may be some features `configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, `configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS - KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the option `--target=TYPE' to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -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: - - CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash - -`configure' Invocation -====================== - - `configure' recognizes the following options to control how it -operates. - -`--help' -`-h' - Print a summary of all of the options to `configure', and exit. - -`--help=short' -`--help=recursive' - Print a summary of the options unique to this package's - `configure', and exit. The `short' variant lists options used - only in the top level, while the `recursive' variant lists options - also present in any nested packages. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`--prefix=DIR' - Use DIR as the installation prefix. *Note Installation Names:: - for more details, including other options available for fine-tuning - the installation locations. - -`--no-create' -`-n' - Run the configure checks, but stop before creating any output - files. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. - diff --git a/Build/source/utils/xz-4.999.9beta/Makefile.am b/Build/source/utils/xz-4.999.9beta/Makefile.am deleted file mode 100644 index 79cf1954f28..00000000000 --- a/Build/source/utils/xz-4.999.9beta/Makefile.am +++ /dev/null @@ -1,80 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -DIST_SUBDIRS = lib src po tests debug -SUBDIRS = - -if COND_GNULIB -SUBDIRS += lib -endif - -SUBDIRS += src po tests - -dist_doc_DATA = \ - AUTHORS \ - COPYING \ - COPYING.GPLv2 \ - NEWS \ - README \ - THANKS \ - TODO \ - doc/faq.txt \ - doc/history.txt \ - doc/xz-file-format.txt \ - doc/lzma-file-format.txt - -EXTRA_DIST = \ - extra \ - dos \ - windows \ - autogen.sh \ - version.sh \ - Doxyfile.in \ - COPYING.GPLv2 \ - COPYING.GPLv3 \ - COPYING.LGPLv2.1 \ - INSTALL.generic \ - PACKAGERS - -ACLOCAL_AMFLAGS = -I m4 - -# List of man pages to conver to PDF and plain text in the dist-hook target. -manfiles = \ - src/xz/xz.1 \ - src/xzdec/xzdec.1 \ - src/scripts/xzdiff.1 \ - src/scripts/xzgrep.1 \ - src/scripts/xzless.1 \ - src/scripts/xzmore.1 - -# Create ChangeLog from output of "git log --date=iso --stat". -# Convert the man pages to PDF and plain text (ASCII only) formats. -dist-hook: - if test -d "$(srcdir)/.git" && type git > /dev/null 2>&1; then \ - ( cd "$(srcdir)" && git log --date=iso --stat ) \ - > "$(distdir)/ChangeLog"; \ - fi - if type groff > /dev/null 2>&1 && type ps2pdf > /dev/null 2>&1; then \ - dest="$(distdir)/doc/man" && \ - $(MKDIR_P) "$$dest/pdf-a4" "$$dest/pdf-letter" "$$dest/txt" && \ - for FILE in $(manfiles); do \ - BASE=`basename $$FILE .1` && \ - groff -man -t -Tps -P-pa4 < "$(srcdir)/$$FILE" \ - | ps2pdf - - \ - > "$$dest/pdf-a4/$$BASE-a4.pdf" && \ - groff -man -t -Tps -P-pletter < "$(srcdir)/$$FILE" \ - | ps2pdf - - \ - > "$$dest/pdf-letter/$$BASE-letter.pdf" && \ - groff -man -t -Tascii < "$(srcdir)/$$FILE" \ - | col -bx > "$$dest/txt/$$BASE.txt"; \ - done; \ - fi - -# This works with GNU tar and gives cleaner package than normal 'make dist'. -mydist: - TAR_OPTIONS='--owner=0 --group=0 --numeric-owner --mode=u+rw,go+r-w' \ - $(MAKE) dist-gzip diff --git a/Build/source/utils/xz-4.999.9beta/Makefile.in b/Build/source/utils/xz-4.999.9beta/Makefile.in deleted file mode 100644 index eef55e610bf..00000000000 --- a/Build/source/utils/xz-4.999.9beta/Makefile.in +++ /dev/null @@ -1,887 +0,0 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ -@COND_GNULIB_TRUE@am__append_1 = lib -subdir = . -DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \ - $(srcdir)/Doxyfile.in $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(top_srcdir)/configure ABOUT-NLS AUTHORS COPYING ChangeLog \ - INSTALL NEWS THANKS TODO build-aux/compile \ - build-aux/config.guess build-aux/config.rpath \ - build-aux/config.sub build-aux/depcomp build-aux/install-sh \ - build-aux/ltmain.sh build-aux/missing -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ - $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ - $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ - $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ - $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.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 = Doxyfile -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -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__installdirs = "$(DESTDIR)$(docdir)" -DATA = $(dist_doc_DATA) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir dist dist-all distcheck -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ -DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GETOPT_H = @GETOPT_H@ -GMSGFMT = @GMSGFMT@ -GMSGFMT_015 = @GMSGFMT_015@ -GREP = @GREP@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTLLIBS = @INTLLIBS@ -INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBICONV = @LIBICONV@ -LIBINTL = @LIBINTL@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBINTL = @LTLIBINTL@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -MSGFMT = @MSGFMT@ -MSGFMT_015 = @MSGFMT_015@ -MSGMERGE = @MSGMERGE@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POSIX_SHELL = @POSIX_SHELL@ -POSUB = @POSUB@ -PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -RC = @RC@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ -STATIC_LDFLAGS = @STATIC_LDFLAGS@ -STRIP = @STRIP@ -USE_NLS = @USE_NLS@ -VERSION = @VERSION@ -XGETTEXT = @XGETTEXT@ -XGETTEXT_015 = @XGETTEXT_015@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -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@ -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@ -lt_ECHO = @lt_ECHO@ -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@ -xz = @xz@ -DIST_SUBDIRS = lib src po tests debug -SUBDIRS = $(am__append_1) src po tests -dist_doc_DATA = \ - AUTHORS \ - COPYING \ - COPYING.GPLv2 \ - NEWS \ - README \ - THANKS \ - TODO \ - doc/faq.txt \ - doc/history.txt \ - doc/xz-file-format.txt \ - doc/lzma-file-format.txt - -EXTRA_DIST = \ - extra \ - dos \ - windows \ - autogen.sh \ - version.sh \ - Doxyfile.in \ - COPYING.GPLv2 \ - COPYING.GPLv3 \ - COPYING.LGPLv2.1 \ - INSTALL.generic \ - PACKAGERS - -ACLOCAL_AMFLAGS = -I m4 - -# List of man pages to conver to PDF and plain text in the dist-hook target. -manfiles = \ - src/xz/xz.1 \ - src/xzdec/xzdec.1 \ - src/scripts/xzdiff.1 \ - src/scripts/xzgrep.1 \ - src/scripts/xzless.1 \ - src/scripts/xzmore.1 - -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -am--refresh: - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign 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; \ - $(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 -Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in - cd $(top_builddir) && $(SHELL) ./config.status $@ - -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|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(docdir)" && rm -f $$files - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -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: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - 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: ctags-recursive $(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 - -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 - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -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)" - @if test -z "$(am__skip_length_check)" && find "$(distdir)" -type f -print | \ - grep '^...................................................................................................' 1>&2; then \ - echo 'error: the above filenames are too long' 1>&2; \ - exit 1; \ - else :; fi -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 -9 -c >$(distdir).tar.bz2 - $(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 -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) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - unlzma -c $(distdir).tar.lzma | $(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) gunzip -c $(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" \ - $(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: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { 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 -check: check-recursive -all-am: Makefile $(DATA) config.h -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(docdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -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-recursive - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-hdr \ - distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: install-dist_docDATA - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-dist_docDATA - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ - ctags-recursive install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-generic \ - clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ - dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-xz \ - dist-zip distcheck distclean 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-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-dist_docDATA - - -# Create ChangeLog from output of "git log --date=iso --stat". -# Convert the man pages to PDF and plain text (ASCII only) formats. -dist-hook: - if test -d "$(srcdir)/.git" && type git > /dev/null 2>&1; then \ - ( cd "$(srcdir)" && git log --date=iso --stat ) \ - > "$(distdir)/ChangeLog"; \ - fi - if type groff > /dev/null 2>&1 && type ps2pdf > /dev/null 2>&1; then \ - dest="$(distdir)/doc/man" && \ - $(MKDIR_P) "$$dest/pdf-a4" "$$dest/pdf-letter" "$$dest/txt" && \ - for FILE in $(manfiles); do \ - BASE=`basename $$FILE .1` && \ - groff -man -t -Tps -P-pa4 < "$(srcdir)/$$FILE" \ - | ps2pdf - - \ - > "$$dest/pdf-a4/$$BASE-a4.pdf" && \ - groff -man -t -Tps -P-pletter < "$(srcdir)/$$FILE" \ - | ps2pdf - - \ - > "$$dest/pdf-letter/$$BASE-letter.pdf" && \ - groff -man -t -Tascii < "$(srcdir)/$$FILE" \ - | col -bx > "$$dest/txt/$$BASE.txt"; \ - done; \ - fi - -# This works with GNU tar and gives cleaner package than normal 'make dist'. -mydist: - TAR_OPTIONS='--owner=0 --group=0 --numeric-owner --mode=u+rw,go+r-w' \ - $(MAKE) dist-gzip - -# 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/Build/source/utils/xz-4.999.9beta/NEWS b/Build/source/utils/xz-4.999.9beta/NEWS deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/Build/source/utils/xz-4.999.9beta/PACKAGERS b/Build/source/utils/xz-4.999.9beta/PACKAGERS deleted file mode 100644 index c5d375ab270..00000000000 --- a/Build/source/utils/xz-4.999.9beta/PACKAGERS +++ /dev/null @@ -1,279 +0,0 @@ - -Information to packagers of XZ Utils -==================================== - - 0. Preface - 1. Package naming - 2. Package description - 3. License - 4. configure options - 4.1. Static vs. dynamic linking of liblzma - 4.2. Optimizing xzdec and lzmadec - 5. Additional documentation - 6. Extra files - 7. Installing XZ Utils and LZMA Utils in parallel - 8. Example - - -0. Preface ----------- - - This document is meant for people who create and maintain XZ Utils - packages for operating system distributions. The focus is on GNU/Linux - systems, but most things apply to other systems too. - - While the standard "configure && make DESTDIR=$PKG install" should - give a pretty good package, there are some details which packagers - may want to tweak. - - Packagers should also read the INSTALL file. - - -1. Package naming ------------------ - - The preferred name for the XZ Utils package is "xz", because that's - the name of the upstream tarball. Naturally you may have good reasons - to use some other name; I won't get angry about it. ;-) It's just nice - to be able to point people to the correct package name without asking - what distro they have. - - If your distro policy is to split things into small pieces, here is - one suggestion: - - xz xz, xzdec, scripts (xzdiff, xzgrep, etc.), docs - xz-lzma lzma, unlzma, lzcat, lzgrep etc. symlinks and - lzmadec binary for compatibility with LZMA Utils - liblzma liblzma.so.* - liblzma-devel liblzma.so, liblzma.a, API headers - - -2. Package description ----------------------- - - Here is a suggestion which you may use as the package description. - If you can use only one-line description, pick only the first line. - Naturally, feel free to use some other description if you find it - better, and maybe send it to me too. - - Library and command line tools for XZ and LZMA compressed files - - XZ Utils provide a general purpose data compression library - and command line tools. The native file format is the .xz - format, but also the legacy .lzma format is supported. The .xz - format supports multiple compression algorithms, of which LZMA2 - is currently the primary algorithm. With typical files, XZ Utils - create about 30 % smaller files than gzip. - - If you are splitting XZ Utils into multiple packages, here are some - suggestions for package descriptions: - - xz: - - Command line tools for XZ and LZMA compressed files - - This package includes the xz compression tool and other command - line tools from XZ Utils. xz has command line syntax similar to - that of gzip. The native file format is the .xz format, but also - the legacy .lzma format is supported. The .xz format supports - multiple compression algorithms, of which LZMA2 is currently the - primary algorithm. With typical files, XZ Utils create about 30 % - smaller files than gzip. - - Note that this package doesn't include the files needed for - LZMA Utils 4.32.x compatibility. Install also the xz-lzma - package to make XZ Utils emulate LZMA Utils 4.32.x. - - xz-lzma: - - LZMA Utils emulation with XZ Utils - - This package includes executables and symlinks to make - XZ Utils emulate lzma, unlzma, lzcat, and other command - line tools found from the legacy LZMA Utils 4.32.x package. - - liblzma: - - Library for XZ and LZMA compressed files - - liblzma is a general purpose data compression library with - an API similar to that of zlib. liblzma supports multiple - algorithms, of which LZMA2 is currently the primary algorithm. - The native file format is .xz, but also the legacy .lzma - format and raw streams (no headers at all) are supported. - - This package includes the shared library. - - liblzma-devel: - - Library for XZ and LZMA compressed files - - This package includes the API headers, static library, and - other development files related to liblzma. - - -3. License ----------- - - If the package manager supports a license field, you probably should - put GPLv2+ there (GNU GPL v2 or later). The interesting parts of - XZ Utils are in the public domain, but some less important files - ending up into the binary package are under GPLv2+. So it is simplest - to just say GPLv2+ if you cannot specify "public domain and GPLv2+". - - If you split XZ Utils into multiple packages as described earlier - in this file, liblzma and liblzma-dev packages will contain only - public domain code (from XZ Utils at least; compiler or linker may - add some third-party code, which may be copyrighted). - - -4. configure options --------------------- - - Unless you are building a package for a distribution that is meant - only for embedded systems, don't use the following configure options: - - --enable-debug - --enable-encoders (*) - --enable-decoders - --enable-match-finders - --enable-checks - --enable-small (*) - --disable-threads (*) - - (*) These are OK when building xzdec and lzmadec as explained later. - - You may use --enable-werror but be careful with it since it may break - the build due to some useless warning when the build environment - changes (like CPU architecture or compiler version). - - -4.1. Static vs. dynamic linking of liblzma - - The default is to link the most important command line tools against - static liblzma, and the less important tools against shared liblzma. - This can be changed by passing --enable-dynamic to configure, or by - not building static libraries at all by passing --disable-static - to configure. It is mildly recommended that you use the default, but - the configure options make it easy to do otherwise if the distro policy - so requires. - - On 32-bit x86, linking against static liblzma can give a minor - speed improvement. Static libraries on x86 are usually compiled as - position-dependent code (non-PIC) and shared libraries are built as - position-independent code (PIC). PIC wastes one register, which can - make the code slightly slower compared to a non-PIC version. (Note - that this doesn't apply to x86-64.) - - Linking against static liblzma avoids a dependency on liblzma shared - library, and makes it slightly easier to copy the command line tools - between systems (e.g. quick 'n' dirty emergency recovery of some - files). It also allows putting the command line tools to /bin while - leaving liblzma to /usr/lib (assuming that your distribution uses - such a file system hierarchy), if no other file in /bin would require - liblzma. - - If you don't want to distribute static libraries but you still - want to link the command line tools against static liblzma, it is - probably easiest to build both static and shared liblzma, but after - "make DESTDIR=$PKG install" remove liblzma.a and modify liblzma.la - to not contain a reference to liblzma.a. - - -4.2. Optimizing xzdec and lzmadec - - xzdec and lzmadec are intended to be relatively small instead of - optimizing for the best speed. Thus, it is a good idea to build - xzdec and lzmadec separately: - - - Only decoder code is needed, so you can speed up the build - slightly by passing --disable-encoders to configure. This - shouldn't affect the final size of the executables though, - because the linker is able to omit the encoder code anyway. - - - xzdec and lzmadec will never use multithreading capabilities of - liblzma. You can avoid dependency on libpthread by passing - --disable-threads to configure. - - - There are and will be no translated messages for xzdec and - lzmadec, so it is fine to pass also --disable-nls to configure. - - - To select somewhat size-optimized variant of some things in - liblzma, pass --enable-small to configure. - - - Tell the compiler to optimize for size instead of speed. - E.g. with GCC, put -Os into CFLAGS. - - -5. Additional documentation ---------------------------- - - "make install" copies some additional documentation to $docdir - (--docdir in configure). These a copy of the GNU GPL v2, which can - be replaced with a symlink if your distro ships with shared copies - of the common license texts. - - -6. Extra files --------------- - - The "extra" directory contains some small extra tools or other files. - The exact set of extra files can vary between XZ Utils releases. The - extra files have only limited use or they are too dangerous to be - put directly to $bindir (7z2lzma.sh is a good example, since it can - silently create corrupt output if certain conditions are not met). - - If you feel like it, you may copy the extra directory under the doc - directory (e.g. /usr/share/doc/xz/extra). Maybe some people will find - them useful. However, most people needing these tools probably are - able to find them from the source package too. - - The "debug" directory contains some tools that are useful only when - hacking on XZ Utils. Don't package these tools. - - -7. Installing XZ Utils and LZMA Utils in parallel -------------------------------------------------- - - XZ Utils and LZMA Utils 4.32.x can be installed in parallel by - omitting the compatibility symlinks (lzma, unlzma, lzcat, lzgrep etc.) - from the XZ Utils package. It's probably a good idea to still package - the symlinks into a separate package so that users may choose if they - want to use XZ Utils or LZMA Utils for handling .lzma files. - - -8. Example ----------- - - Here is an example for i686 GNU/Linux that - - links xz against static liblzma; - - includes only shared liblzma in the final package; - - links xzdec and lzmadec against static liblzma while - avoiding libpthread dependency. - - PKG=/tmp/xz-pkg - tar xf xz-x.y.z.tar.gz - cd xz-x.y.z - ./configure \ - --prefix=/usr \ - --sysconfdir=/etc \ - CFLAGS='-march=i686 -O2' - make - make DESTDIR=$PKG install-strip - rm -f $PKG/usr/lib/lib*.a - sed -i "s/^old_library=.*$/old_library=''/" $PKG/usr/lib/lib*.la - make clean - ./configure \ - --prefix=/usr \ - --sysconfdir=/etc \ - --disable-shared \ - --disable-nls \ - --disable-encoders \ - --enable-small \ - --disable-threads \ - CFLAGS='-march=i686 -Os' - make -C src/liblzma - make -C src/xzdec - make -C src/xzdec DESTDIR=$PKG install-strip - cp -a extra $PKG/usr/share/doc/xz - diff --git a/Build/source/utils/xz-4.999.9beta/README b/Build/source/utils/xz-4.999.9beta/README deleted file mode 100644 index 3544938e8e4..00000000000 --- a/Build/source/utils/xz-4.999.9beta/README +++ /dev/null @@ -1,217 +0,0 @@ - -XZ Utils -======== - - 0. Overview - 1. Documentation - 1.1. Overall documentation - 1.2. Documentation for command line tools - 1.3. Documentation for liblzma - 2. Version numbering - 3. Reporting bugs - 4. Other implementations of the .xz format - 5. Contact information - - -0. Overview ------------ - - XZ Utils provide a general purporse data compression library and - command line tools. The native file format is the .xz format, but - also the legacy .lzma format is supported. The .xz format supports - multiple compression algorithms, which are called "filters" in - context of XZ Utils. The primary filter is currently LZMA2. With - typical files, XZ Utils create about 30 % smaller files than gzip. - - To ease adapting support for the .xz format into existing applications - and scripts, the API of liblzma is somewhat similar to the API of the - popular zlib library. For the same reason, the command line tool xz - has similar command line syntax than that of gzip. - - When aiming for the highest compression ratio, LZMA2 encoder uses - a lot of CPU time and may use, depending on the settings, even - hundreds of megabytes of RAM. However, in fast modes, LZMA2 encoder - competes with bzip2 in compression speed, RAM usage, and compression - ratio. - - LZMA2 is reasonably fast to decompress. It is a little slower than - gzip, but a lot faster than bzip2. Being fast to decompress means - that the .xz format is especially nice when the same file will be - decompressed very many times (usually on different computers), which - is the case e.g. when distributing software packages. In such - situations, it's not too bad if the compression takes some time, - since that needs to be done only once to benefit many people. - - With some file types, combining (or "chaining") LZMA2 with an - additional filter can improve compression ratio. A filter chain may - contain up to four filters, although usually only one two is used. - For example, putting a BCJ (Branch/Call/Jump) filter before LZMA2 - in the filter chain can improve compression ratio of executable files. - - Since the .xz format allows adding new filter IDs, it is possible that - some day there will be a filter that is, for example, much faster to - compress than LZMA2 (but probably with worse compression ratio). - Similarly, it is possible that some day there is a filter that will - compress better than LZMA2. - - XZ Utils doesn't support multithreaded compression or decompression - yet. It has been planned though and taken into account when designing - the .xz file format. - - -1. Documentation ----------------- - -1.1. Overall documentation - - README This file - - INSTALL.generic Generic install instructions for those not familiar - with packages using GNU Autotools - INSTALL Installation instructions specific to XZ Utils - PACKAGERS Information to packagers of XZ Utils - - COPYING XZ Utils copyright and license information - COPYING.GPLv2 GNU General Public License version 2 - COPYING.GPLv3 GNU General Public License version 3 - COPYING.LGPLv2.1 GNU Lesser General Public License version 2.1 - - AUTHORS The main authors of XZ Utils - THANKS Incomplete list of people who have helped making - this software - NEWS User-visible changes between XZ Utils releases - ChangeLog Detailed list of changes (commit log) - - Note that only some of the above files are included in binary - packages. - - -1.2. Documentation for command line tools - - The command line tools are documented as man pages. In source code - releases (and possibly also in some binary packages), the man pages - are also provided in plain text (ASCII only) and PDF formats in the - directory "doc/man" to make the man pages more accessible to those - whose operating system doesn't provide an easy way to view man pages. - - -1.3. Documentation for liblzma - - The liblzma API headers include short docs about each function - and data type as Doxygen tags. These docs should be quite OK as - a quick reference. - - I have planned to write a bunch of very well documented example - programs, which (due to comments) should work as a tutorial to - various features of liblzma. No such example programs have been - written yet. - - For now, if you have never used liblzma, libbzip2, or zlib, I - recommend learning *basics* of zlib API. Once you know that, it - should be easier to learn liblzma. - - http://zlib.net/manual.html - http://zlib.net/zlib_how.html - - -2. Version numbering --------------------- - - The version number format of XZ Utils is X.Y.ZS: - - - X is the major version. When this is incremented, the library - API and ABI break. - - - Y is the minor version. It is incremented when new features are - added without breaking existing API or ABI. Even Y indicates - stable release and odd Y indicates unstable (alpha or beta - version). - - - Z is the revision. This has different meaning for stable and - unstable releases: - * Stable: Z is incremented when bugs get fixed without adding - any new features. - * Unstable: Z is just a counter. API or ABI of features added - in earlier unstable releases having the same X.Y may break. - - - S indicates stability of the release. It is missing from the - stable releases where Y is an even number. When Y is odd, S - is either "alpha" or "beta" to make it very clear that such - versions are not stable releases. The same X.Y.Z combination is - not used for more than one stability level i.e. after X.Y.Zalpha, - the next version can be X.Y.(Z+1)beta but not X.Y.Zbeta. - - -3. Reporting bugs ------------------ - - Naturally it is easiest for me if you already know what causes the - unexpected behavior. Even better if you have a patch to propose. - However, quite often the reason for unexpected behavior is unknown, - so here are a few things to do before sending a bug report: - - 1. Try to create a small example how to reprocude the issue. - - 2. Compile XZ Utils with debugging code using configure switches - --enable-debug and, if possible, --disable-shared. If you are - using GCC, use CFLAGS='-O0 -ggdb3'. Don't strip the resulting - binaries. - - 3. Turn on core dumps. The exact command depends on your shell; - for example in GNU bash it is done with "ulimit -c unlimited", - and in tcsh with "limit coredumpsize unlimited". - - 4. Try to reproduce the suspected bug. If you get "assertion failed" - message, be sure to include the complete message in your bug - report. If the application leaves a coredump, get a backtrace - using gdb: - $ gdb /path/to/app-binary # Load the app to the debugger. - (gdb) core core # Open the coredump. - (gdb) bt # Print the backtrace. Copy & paste to bug report. - (gdb) quit # Quit gdb. - - Report your bug via email or IRC (see Contact information below). - Don't send core dump files or any executables. If you have a small - example file(s) (total size less than 256 KiB), please include - it/them as an attachment. If you have bigger test files, put them - online somewhere and include an URL to the file(s) in the bug report. - - Always include the exact version number of XZ Utils in the bug report. - If you are using a snapshot from the git repository, use "git describe" - to get the exact snapshot version. If you are using XZ Utils shipped - in an operating system distribution, mention the distribution name, - distribution version, and exact xz package version; if you cannot - repeat the bug with the code compiled from unpatched source code, - you probably need to report a bug to your distribution's bug tracking - system. - - -4. Other implementations of the .xz format ------------------------------------------- - - 7-Zip and the p7zip port of 7-Zip support the .xz format starting - from the version 9.00alpha. - - http://7-zip.org/ - http://p7zip.sourceforge.net/ - - XZ Embedded is a limited implementation written for use in the Linux - kernel, but it is also suitable for other embedded use. - - http://tukaani.org/xz/embedded.html - - -5. Contact information ----------------------- - - If you have questions, bug reports, patches etc. related to XZ Utils, - contact Lasse Collin (in Finnish or English). - tukaani.org uses greylisting to reduce spam, thus when you send your - first email, it may get delayed by a few hours. In addition to that, - I'm sometimes slow at replying. If you haven't got a reply within two - weeks, assume that your email has got lost and resend it or use IRC. - - You can find me also from #tukaani on Freenode; my nick is Larhzu. - The channel tends to be pretty quiet, so just ask your question and - someone may wake up. - diff --git a/Build/source/utils/xz-4.999.9beta/THANKS b/Build/source/utils/xz-4.999.9beta/THANKS deleted file mode 100644 index 426a2ed089f..00000000000 --- a/Build/source/utils/xz-4.999.9beta/THANKS +++ /dev/null @@ -1,47 +0,0 @@ - -Thanks -====== - -Some people have helped more, some less, but nevertheless everyone's help -has been important. :-) In alphabetical order: - - Mark Adler - - H. Peter Anvin - - Nelson H. F. Beebe - - Anders F. Björklund - - Emmanuel Blot - - David Burklund - - Andrew Dudman - - İsmail Dönmez - - Mike Frysinger - - Per Øyvind Karlsen - - Ville Koskinen - - Stephan Kulow - - Peter Lawler - - Hin-Tak Leung - - Andraž 'ruskie' Levstik - - Jim Meyering - - Hongbo Ni - - Jonathan Nieder - - Igor Pavlov - - Mikko Pouru - - Bernhard Reutner-Fischer - - Christian von Roques - - Alexandre Sauvé - - Andreas Schwab - - Dan Shechter - - Jonathan Stott - - Paul Townsend - - Mohammed Adnène Trojette - - Patrick J. Volkerding - - Bert Wesarg - - Ralf Wildenhues - - Charles Wilson - - Lars Wirzenius - - Pilorz Wojciech - - Andreas Zieringer - -Also thanks to all the people who have participated in the Tukaani project. - -I have probably forgot to add some names to the above list. Sorry about -that and thanks for your help. - diff --git a/Build/source/utils/xz-4.999.9beta/TODO b/Build/source/utils/xz-4.999.9beta/TODO deleted file mode 100644 index 6912943b5d9..00000000000 --- a/Build/source/utils/xz-4.999.9beta/TODO +++ /dev/null @@ -1,56 +0,0 @@ - -XZ Utils To-Do List -=================== - -Known bugs ----------- - - The test suite is too incomplete. - - If the memor usage limit is less than about 13 MiB, xz is unable to - automatically scale down the compression settings enough even though - it would be possible by switching from BT2/BT3/BT4 match finder to - HC3/HC4. - - The code to detect number of CPU cores doesn't count hyperthreading - as multiple cores. In context of xz, it probably should. - Hyperthreading is good at least with p7zip. - - XZ Utils compress some files significantly worse than LZMA Utils. - This is due to faster compression presets used by XZ Utils, and - can be worked around by using "xz --extreme". However, the presets - need some tweaking and maybe this issue can be minimized without - making the typical case too much slower. - - -Missing features ----------------- - - "xz --list" - - xz could create sparse files when decompressing. (Some prototyping - has been done.) - - xz doesn't support copying extended attributes, access control - lists etc. from source to target file. - - Multithreaded compression - - Multithreaded decompression - - Buffer-to-buffer coding could use less RAM (especially when - decompressing LZMA1 or LZMA2). - - I/O library is not implemented. It will possibly be named libzzf. - - -Documentation -------------- - - Some tutorial is needed for liblzma. I have planned to write some - extremely well commented example programs, which would work as - a tutorial. I suppose the Doxygen tags are quite OK as a quick - reference once one is familiar with the liblzma API. - - Document the LZMA1 and LZMA2 algorithms. - diff --git a/Build/source/utils/xz-4.999.9beta/aclocal.m4 b/Build/source/utils/xz-4.999.9beta/aclocal.m4 deleted file mode 100644 index 09162f8a4cf..00000000000 --- a/Build/source/utils/xz-4.999.9beta/aclocal.m4 +++ /dev/null @@ -1,1027 +0,0 @@ -# generated automatically by aclocal 1.11 -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 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. - -# 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. - -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],, -[m4_warning([this file was generated for autoconf 2.64. -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'.])]) - -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 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_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' -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], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_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])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# Figure out how to run the assembler. -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2004, 2005, 2006 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_PROG_AS -# ---------- -AC_DEFUN([AM_PROG_AS], -[# By default we simply use the C compiler to build assembly code. -AC_REQUIRE([AC_PROG_CC]) -test "${CCAS+set}" = set || CCAS=$CC -test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS -AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) -AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) -_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl -]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2005 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. - -# 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/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# 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 -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -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. -# -# 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_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 -# 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 10 - -# 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 -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# 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 -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -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=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # 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'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > 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 - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # 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 - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # 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 - break - fi - ;; - msvisualcpp | msvcmsys) - # 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} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# 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 -]) - - -# 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]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# 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 - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # 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 - # 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. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # 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 - 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 - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# 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 -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# 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. -# -# 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. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# 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 -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -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_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_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 - -# 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) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_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 -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - 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_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_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 -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. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001, 2003, 2005, 2008 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_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST(install_sh)]) - -# Copyright (C) 2003, 2005 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], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2009 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. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# 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 - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# 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_PROG_CC_C_O -# -------------- -# Like AC_PROG_CC_C_O, but changed for automake. -AC_DEFUN([AM_PROG_CC_C_O], -[AC_REQUIRE([AC_PROG_CC_C_O])dnl -AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([compile])dnl -# FIXME: we rely on the cache variable name because -# there is no other way. -set dummy $CC -am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` -eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o -if test "$am_t" != 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 -dnl Make sure AC_PROG_CC is never called again, or it will override our -dnl setting of CC. -m4_define([AC_PROG_CC], - [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# 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], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$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. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# Copyright (C) 2003, 2004, 2005, 2006 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_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 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_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# 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)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -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) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# 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_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=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; -esac - -# 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 - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# Copyright (C) 2001, 2003, 2005 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 -# 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 -# 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 -# 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'. -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 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_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004, 2005 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'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# 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. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} 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. -_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 - - # 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 - -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 - -m4_include([m4/acx_pthread.m4]) -m4_include([m4/getopt.m4]) -m4_include([m4/gettext.m4]) -m4_include([m4/iconv.m4]) -m4_include([m4/lc_cpucores.m4]) -m4_include([m4/lc_physmem.m4]) -m4_include([m4/lib-ld.m4]) -m4_include([m4/lib-link.m4]) -m4_include([m4/lib-prefix.m4]) -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) -m4_include([m4/nls.m4]) -m4_include([m4/po.m4]) -m4_include([m4/posix-shell.m4]) -m4_include([m4/progtest.m4]) -m4_include([m4/visibility.m4]) diff --git a/Build/source/utils/xz-4.999.9beta/autogen.sh b/Build/source/utils/xz-4.999.9beta/autogen.sh deleted file mode 100755 index f0195ecadd3..00000000000 --- a/Build/source/utils/xz-4.999.9beta/autogen.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh - -############################################################################### -# -# Author: Lasse Collin -# -# This file has been put into the public domain. -# You can do whatever you want with this file. -# -############################################################################### - -# The result of using "autoreconf -fi" should be identical to using this -# script. I'm leaving this script here just in case someone finds it useful. - -set -e -x - -${AUTOPOINT:-autopoint} -f -${LIBTOOLIZE:-libtoolize} -c -f || glibtoolize -c -f -${ACLOCAL:-aclocal} -I m4 -${AUTOCONF:-autoconf} -${AUTOHEADER:-autoheader} -${AUTOMAKE:-automake} -acf --foreign diff --git a/Build/source/utils/xz-4.999.9beta/build-aux/compile b/Build/source/utils/xz-4.999.9beta/build-aux/compile deleted file mode 100755 index ec64c622026..00000000000 --- a/Build/source/utils/xz-4.999.9beta/build-aux/compile +++ /dev/null @@ -1,143 +0,0 @@ -#! /bin/sh -# Wrapper for compilers which do not understand `-c -o'. - -scriptversion=2009-04-28.21; # UTC - -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 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 -# . - -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 $? - ;; -esac - -ofile= -cfile= -eat= - -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 - mv "$cofile" "$ofile" -elif test -f "${cofile}bj"; then - 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/Build/source/utils/xz-4.999.9beta/build-aux/config.guess b/Build/source/utils/xz-4.999.9beta/build-aux/config.guess deleted file mode 100755 index e792aac6080..00000000000 --- a/Build/source/utils/xz-4.999.9beta/build-aux/config.guess +++ /dev/null @@ -1,1494 +0,0 @@ -#! /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 -# Free Software Foundation, Inc. - -timestamp='2009-09-18' - -# 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 -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# 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. -# -# 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. -# -# 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 - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -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 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." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -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 - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:[3456]*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - EM64T | authenticamd | genuineintel) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`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 - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - 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} - 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 - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-gnu - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - 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 ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - 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 - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - 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 < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/Build/source/utils/xz-4.999.9beta/build-aux/config.rpath b/Build/source/utils/xz-4.999.9beta/build-aux/config.rpath deleted file mode 100755 index c492a93b663..00000000000 --- a/Build/source/utils/xz-4.999.9beta/build-aux/config.rpath +++ /dev/null @@ -1,614 +0,0 @@ -#! /bin/sh -# Output a system dependent set of variables, describing how to set the -# run time search path of shared libraries in an executable. -# -# Copyright 1996-2006 Free Software Foundation, Inc. -# Taken from GNU libtool, 2001 -# Originally by Gordon Matzigkeit , 1996 -# -# 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. -# -# The first argument passed to this file is the canonical host specification, -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld -# should be set by the caller. -# -# The set of defined variables is at the end of this script. - -# Known limitations: -# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer -# than 256 bytes, otherwise the compiler driver will dump core. The only -# known workaround is to choose shorter directory names for the build -# directory and/or the installation directory. - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -shrext=.so - -host="$1" -host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - -# Code taken from libtool.m4's _LT_CC_BASENAME. - -for cc_temp in $CC""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` - -# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. - -wl= -if test "$GCC" = yes; then - wl='-Wl,' -else - case "$host_os" in - aix*) - wl='-Wl,' - ;; - darwin*) - case $cc_basename in - xlc*) - wl='-Wl,' - ;; - esac - ;; - mingw* | pw32* | os2*) - ;; - hpux9* | hpux10* | hpux11*) - wl='-Wl,' - ;; - irix5* | irix6* | nonstopux*) - wl='-Wl,' - ;; - newsos6) - ;; - linux*) - case $cc_basename in - icc* | ecc*) - wl='-Wl,' - ;; - pgcc | pgf77 | pgf90) - wl='-Wl,' - ;; - ccc*) - wl='-Wl,' - ;; - como) - wl='-lopt=' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - wl='-Wl,' - ;; - esac - ;; - esac - ;; - osf3* | osf4* | osf5*) - wl='-Wl,' - ;; - sco3.2v5*) - ;; - solaris*) - wl='-Wl,' - ;; - sunos4*) - wl='-Qoption ld ' - ;; - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - wl='-Wl,' - ;; - sysv4*MP*) - ;; - unicos*) - wl='-Wl,' - ;; - uts4*) - ;; - esac -fi - -# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. - -hardcode_libdir_flag_spec= -hardcode_libdir_separator= -hardcode_direct=no -hardcode_minus_L=no - -case "$host_os" in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; -esac - -ld_shlibs=yes -if test "$with_gnu_ld" = yes; then - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - # Unlike libtool, we use -rpath here, not --rpath, since the documented - # option of GNU ld is called -rpath, not --rpath. - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - case "$host_os" in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - fi - ;; - amigaos*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we cannot use - # them. - ld_shlibs=no - ;; - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - : - else - ld_shlibs=no - fi - ;; - cygwin* | mingw* | pw32*) - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - : - else - ld_shlibs=no - fi - ;; - interix3*) - hardcode_direct=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - linux*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - : - else - ld_shlibs=no - fi - ;; - netbsd*) - ;; - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - : - else - ld_shlibs=no - fi - ;; - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - else - ld_shlibs=no - fi - ;; - esac - ;; - sunos4*) - hardcode_direct=yes - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - : - else - ld_shlibs=no - fi - ;; - esac - if test "$ld_shlibs" = no; then - hardcode_libdir_flag_spec= - fi -else - case "$host_os" in - aix3*) - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - else - aix_use_runtimelinking=no - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - fi - hardcode_direct=yes - hardcode_libdir_separator=':' - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct=yes - else - # We have old collect2 - hardcode_direct=unsupported - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - fi - # Begin _LT_AC_SYS_LIBPATH_AIX. - echo 'int main () { return 0; }' > conftest.c - ${CC} ${LDFLAGS} conftest.c -o conftest - aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` - if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` - fi - if test -z "$aix_libpath"; then - aix_libpath="/usr/lib:/lib" - fi - rm -f conftest.c conftest - # End _LT_AC_SYS_LIBPATH_AIX. - if test "$aix_use_runtimelinking" = yes; then - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - else - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - fi - fi - ;; - amigaos*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # see comment about different semantics on the GNU ld section - ld_shlibs=no - ;; - bsdi[45]*) - ;; - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - libext=lib - ;; - darwin* | rhapsody*) - hardcode_direct=no - if test "$GCC" = yes ; then - : - else - case $cc_basename in - xlc*) - ;; - *) - ld_shlibs=no - ;; - esac - fi - ;; - dgux*) - hardcode_libdir_flag_spec='-L$libdir' - ;; - freebsd1*) - ld_shlibs=no - ;; - freebsd2.2*) - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - ;; - freebsd2*) - hardcode_direct=yes - hardcode_minus_L=yes - ;; - freebsd* | kfreebsd*-gnu | dragonfly*) - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - ;; - hpux9*) - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - hpux10*) - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - hpux11*) - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - ;; - *) - hardcode_direct=yes - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - irix5* | irix6* | nonstopux*) - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - netbsd*) - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - ;; - newsos6) - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - openbsd*) - hardcode_direct=yes - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - else - case "$host_os" in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - ;; - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - osf3*) - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - osf4* | osf5*) - if test "$GCC" = yes; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - # Both cc and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - hardcode_libdir_separator=: - ;; - solaris*) - hardcode_libdir_flag_spec='-R$libdir' - ;; - sunos4*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - ;; - sysv4) - case $host_vendor in - sni) - hardcode_direct=yes # is this really true??? - ;; - siemens) - hardcode_direct=no - ;; - motorola) - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - ;; - sysv4.3*) - ;; - sysv4*MP*) - if test -d /usr/nec; then - ld_shlibs=yes - fi - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) - ;; - sysv5* | sco3.2v5* | sco5v6*) - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator=':' - ;; - uts4*) - hardcode_libdir_flag_spec='-L$libdir' - ;; - *) - ld_shlibs=no - ;; - esac -fi - -# Check dynamic linker characteristics -# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. -libname_spec='lib$name' -case "$host_os" in - aix3*) - ;; - aix4* | aix5*) - ;; - amigaos*) - ;; - beos*) - ;; - bsdi[45]*) - ;; - cygwin* | mingw* | pw32*) - shrext=.dll - ;; - darwin* | rhapsody*) - shrext=.dylib - ;; - dgux*) - ;; - freebsd1*) - ;; - kfreebsd*-gnu) - ;; - freebsd* | dragonfly*) - ;; - gnu*) - ;; - hpux9* | hpux10* | hpux11*) - case $host_cpu in - ia64*) - shrext=.so - ;; - hppa*64*) - shrext=.sl - ;; - *) - shrext=.sl - ;; - esac - ;; - interix3*) - ;; - irix5* | irix6* | nonstopux*) - case "$host_os" in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; - *) libsuff= shlibsuff= ;; - esac - ;; - esac - ;; - linux*oldld* | linux*aout* | linux*coff*) - ;; - linux*) - ;; - knetbsd*-gnu) - ;; - netbsd*) - ;; - newsos6) - ;; - nto-qnx*) - ;; - openbsd*) - ;; - os2*) - libname_spec='$name' - shrext=.dll - ;; - osf3* | osf4* | osf5*) - ;; - solaris*) - ;; - sunos4*) - ;; - sysv4 | sysv4.3*) - ;; - sysv4*MP*) - ;; - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - ;; - uts4*) - ;; -esac - -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' -escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` -shlibext=`echo "$shrext" | sed -e 's,^\.,,'` -escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` - -LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. Submit a context -# diff and a properly formatted GNU ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -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 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." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -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) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | 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 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nios | nios2 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12 | picochip) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ - | tron-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze) - basic_machine=microblaze-xilinx - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - tile*) - basic_machine=tile-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -kopensolaris* \ - | -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* \ - | -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* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/Build/source/utils/xz-4.999.9beta/build-aux/depcomp b/Build/source/utils/xz-4.999.9beta/build-aux/depcomp deleted file mode 100755 index df8eea7e4ce..00000000000 --- a/Build/source/utils/xz-4.999.9beta/build-aux/depcomp +++ /dev/null @@ -1,630 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2009-04-28.21; # UTC - -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 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. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - 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 outputing dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -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 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# 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 -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # 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 -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## 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). -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - 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. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## 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 -## that the space means something, we add a space to the output as -## well. -## 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" - rm -f "$tmpdepfile" - ;; - -hp) - # 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 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - 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 - # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> "$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" - 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" - fi - rm -f "$tmpdepfile" - ;; - -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 - # 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$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - 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" - fi - 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 - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - 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" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # '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$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" - # Add `dependent.h:' lines. - sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" - else - echo "#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" - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # 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. - "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$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" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no eat=no - for arg - do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - if test $eat = yes; then - eat=no - continue - fi - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -arch) - eat=yes ;; - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix=`echo "$object" | sed 's/^.*\././'` - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - cat < "$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" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - 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" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - IFS=" " - for arg - do - case "$arg" in - -o) - shift - ;; - $object) - shift - ;; - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - 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::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvcmsys) - # 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 - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# 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/Build/source/utils/xz-4.999.9beta/build-aux/install-sh b/Build/source/utils/xz-4.999.9beta/build-aux/install-sh deleted file mode 100755 index 6781b987bdb..00000000000 --- a/Build/source/utils/xz-4.999.9beta/build-aux/install-sh +++ /dev/null @@ -1,520 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2009-04-28.21; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# 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 -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -no_target_directory= - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - 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. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - -*) prefix='./';; - *) prefix='';; - esac - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob set +f - IFS=$oIFS - - prefixes= - - for d - do - test -z "$d" && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# 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/Build/source/utils/xz-4.999.9beta/build-aux/ltmain.sh b/Build/source/utils/xz-4.999.9beta/build-aux/ltmain.sh deleted file mode 100755 index b36c4ad366c..00000000000 --- a/Build/source/utils/xz-4.999.9beta/build-aux/ltmain.sh +++ /dev/null @@ -1,8406 +0,0 @@ -# Generated from ltmain.m4sh. - -# ltmain.sh (GNU libtool) 2.2.6 -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 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. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print informational messages (default) -# --version print version information -# -h, --help print short or long help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.6 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . - -PROGRAM=ltmain.sh -PACKAGE=libtool -VERSION=2.2.6 -TIMESTAMP="" -package_revision=1.3012 - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# NLS nuisances: We save the old values to restore during execute mode. -# Only set LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" - fi" -done - -$lt_unset CDPATH - - - - - -: ${CP="cp -f"} -: ${ECHO="echo"} -: ${EGREP="/usr/bin/grep -E"} -: ${FGREP="/usr/bin/grep -F"} -: ${GREP="/usr/bin/grep"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SED="/opt/local/bin/gsed"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" - -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - -# Generated shell functions inserted here. - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - -# The name of this program: -# In the unlikely event $progname began with a '-', it would play havoc with -# func_echo (imagine progname=-n), so we prepend ./ in that case: -func_dirname_and_basename "$progpath" -progname=$func_basename_result -case $progname in - -*) progname=./$progname ;; -esac - -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=: - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname${mode+: }$mode: $*" -} - -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 - - # bash bug again: - : -} - -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` - done - my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "X$my_tmpdir" | $Xsed -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () -{ - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac - - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac -} - - -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "X$1" | $Xsed \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac - - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac - - func_quote_for_expand_result="$my_arg" -} - - -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - - - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} - -# func_usage -# Echo short help message to standard output and exit. -func_usage () -{ - $SED -n '/^# Usage:/,/# -h/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - $ECHO - $ECHO "run \`$progname --help | more' for full usage" - exit $? -} - -# func_help -# Echo long help message to standard output and exit. -func_help () -{ - $SED -n '/^# Usage:/,/# Report bugs to/ { - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ - p - }' < "$progpath" - exit $? -} - -# func_missing_arg argname -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - func_error "missing argument for $1" - exit_cmd=exit -} - -exit_cmd=: - - - - - -# Check that we have a working $ECHO. -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell, and then maybe $ECHO will work. - exec $SHELL "$progpath" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - -# Parse options once, thoroughly. This comes as soon as possible in -# the script to make things like `libtool --version' happen quickly. -{ - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - esac - - # Parse non-mode specific arguments: - while test "$#" -gt 0; do - opt="$1" - shift - - case $opt in - --config) func_config ;; - - --debug) preserve_args="$preserve_args $opt" - func_echo "enabling shell trace mode" - opt_debug='set -x' - $opt_debug - ;; - - -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break - execute_dlfiles="$execute_dlfiles $1" - shift - ;; - - --dry-run | -n) opt_dry_run=: ;; - --features) func_features ;; - --finish) mode="finish" ;; - - --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break - case $1 in - # Valid mode arguments: - clean) ;; - compile) ;; - execute) ;; - finish) ;; - install) ;; - link) ;; - relink) ;; - uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; - esac - - mode="$1" - shift - ;; - - --preserve-dup-deps) - opt_duplicate_deps=: ;; - - --quiet|--silent) preserve_args="$preserve_args $opt" - opt_silent=: - ;; - - --verbose| -v) preserve_args="$preserve_args $opt" - opt_silent=false - ;; - - --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break - preserve_args="$preserve_args $opt $1" - func_enable_tag "$1" # tagname is set here - shift - ;; - - # Separate optargs to long options: - -dlopen=*|--mode=*|--tag=*) - func_opt_split "$opt" - set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} - shift - ;; - - -\?|-h) func_usage ;; - --help) opt_help=: ;; - --version) func_version ;; - - -*) func_fatal_help "unrecognized option \`$opt'" ;; - - *) nonopt="$opt" - break - ;; - esac - done - - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_duplicate_deps - ;; - esac - - # Having warned about all mis-specified options, bail out if - # anything was wrong. - $exit_cmd $EXIT_FAILURE -} - -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -## ----------- ## -## Main. ## -## ----------- ## - -$opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - test -z "$mode" && func_fatal_error "error: you must specify a MODE." - - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$mode' for more information." -} - - -# func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case "$lalib_p_line" in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test "$lalib_p" = yes -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - func_lalib_p "$1" -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_ltwrapper_scriptname_result="" - if func_ltwrapper_executable_p "$1"; then - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" - fi -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $opt_debug - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$save_ifs - eval cmd=\"$cmd\" - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. -func_source () -{ - $opt_debug - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $opt_debug - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - case "$@ " in - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi - - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T <?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - removelist="$removelist $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - removelist="$removelist $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - command="$command -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test "$compiler_c_o" = yes; then - command="$command -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { -test "$mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to building PIC objects only - -prefer-non-pic try to building non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode \`$mode'" - ;; - esac - - $ECHO - $ECHO "Try \`$progname --help' for more information about other modes." - - exit $? -} - - # Now that we've collected a possible --mode arg, show help if necessary - $opt_help && func_mode_help - - -# func_mode_execute arg... -func_mode_execute () -{ - $opt_debug - # The first argument is the command name. - cmd="$nonopt" - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir="$func_dirname_result" - - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir="$func_dirname_result" - ;; - - *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -*) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file="$progdir/$program" - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_quote_for_eval "$file" - args="$args $func_quote_for_eval_result" - done - - if test "X$opt_dry_run" = Xfalse; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - $ECHO "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - fi -} - -test "$mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libdirs="$nonopt" - admincmds= - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done - - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || admincmds="$admincmds - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - $ECHO "X----------------------------------------------------------------------" | $Xsed - $ECHO "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - $ECHO - $ECHO "If you ever happen to want to link against installed libraries" - $ECHO "in a given directory, LIBDIR, you must either use libtool, and" - $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" - $ECHO "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" - $ECHO " during execution" - fi - if test -n "$runpath_var"; then - $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" - $ECHO " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - $ECHO - - $ECHO "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" - $ECHO "pages." - ;; - *) - $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - $ECHO "X----------------------------------------------------------------------" | $Xsed - exit $EXIT_SUCCESS -} - -test "$mode" = finish && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $opt_debug - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - $ECHO "X$nonopt" | $GREP shtool >/dev/null; then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - install_prog="$install_prog$func_quote_for_eval_result" - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - for arg - do - if test -n "$dest"; then - files="$files $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - case " $install_prog " in - *[\\\ /]cp\ *) ;; - *) prev=$arg ;; - esac - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - install_prog="$install_prog $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "\`$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - staticlibs="$staticlibs $file" - ;; - - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - dir="$dir$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking \`$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname="$1" - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme="$stripme" - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme="" - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - $opt_dry_run || { - if test "$finalize" = yes; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_silent || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink \`$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file="$outputname" - else - func_warning "cannot relink \`$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name="$func_basename_result" - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test "$mode" = install && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_verbose "extracting global C symbols from \`$progfile'" - $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $opt_dry_run || { - $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" - func_basename "$dlprefile" - name="$func_basename_result" - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - $ECHO >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -" - case $host in - *cygwin* | *mingw* | *cegcc* ) - $ECHO >> "$output_objdir/$my_dlsyms" "\ -/* DATA imports from DLLs on WIN32 con't be const, because - runtime relocations are performed -- see ld's documentation - on pseudo-relocs. */" - lt_dlsym_const= ;; - *osf5*) - echo >> "$output_objdir/$my_dlsyms" "\ -/* This system does not cope well with relocations in const data */" - lt_dlsym_const= ;; - *) - lt_dlsym_const=const ;; - esac - - $ECHO >> "$output_objdir/$my_dlsyms" "\ -extern $lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; -$lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - $ECHO >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) symtab_cflags="$symtab_cflags $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - - # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -func_win32_libid () -{ - $opt_debug - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then - win32_nmres=`eval $NM -f posix -A $1 | - $SED -n -e ' - 1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $opt_debug - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib="$func_basename_result" - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` - done - - func_extract_archives_result="$my_oldobjs" -} - - - -# func_emit_wrapper_part1 [arg=no] -# -# Emit the first part of a libtool wrapper script on stdout. -# For more information, see the description associated with -# func_emit_wrapper(), below. -func_emit_wrapper_part1 () -{ - func_emit_wrapper_part1_arg1=no - if test -n "$1" ; then - func_emit_wrapper_part1_arg1=$1 - fi - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='${SED} -e 1s/^X//' -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - ECHO=\"$qecho\" - file=\"\$0\" - # Make sure echo works. - if test \"X\$1\" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then - # Yippee, \$ECHO works! - : - else - # Restart under the correct shell, and then maybe \$ECHO will work. - exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} - fi - fi\ -" - $ECHO "\ - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` - done -" -} -# end: func_emit_wrapper_part1 - -# func_emit_wrapper_part2 [arg=no] -# -# Emit the second part of a libtool wrapper script on stdout. -# For more information, see the description associated with -# func_emit_wrapper(), below. -func_emit_wrapper_part2 () -{ - func_emit_wrapper_part2_arg1=no - if test -n "$1" ; then - func_emit_wrapper_part2_arg1=$1 - fi - - $ECHO "\ - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` - - export $shlibpath_var -" - fi - - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} -# end: func_emit_wrapper_part2 - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=no - if test -n "$1" ; then - func_emit_wrapper_arg1=$1 - fi - - # split this up so that func_emit_cwrapperexe_src - # can call each part independently. - func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" - func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" -} - - -# func_to_host_path arg -# -# Convert paths to host format when used with build tools. -# Intended for use with "native" mingw (where libtool itself -# is running under the msys shell), or in the following cross- -# build environments: -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# where wine is equipped with the `winepath' executable. -# In the native mingw case, the (msys) shell automatically -# converts paths for any non-msys applications it launches, -# but that facility isn't available from inside the cwrapper. -# Similar accommodations are necessary for $host mingw and -# $build cygwin. Calling this function does no harm for other -# $host/$build combinations not listed above. -# -# ARG is the path (on $build) that should be converted to -# the proper representation for $host. The result is stored -# in $func_to_host_path_result. -func_to_host_path () -{ - func_to_host_path_result="$1" - if test -n "$1" ; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - case $build in - *mingw* ) # actually, msys - # awkward: cmd appends spaces to result - lt_sed_strip_trailing_spaces="s/[ ]*\$//" - func_to_host_path_tmp1=`( cmd //c echo "$1" |\ - $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_path_tmp1=`cygpath -w "$1"` - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # Unfortunately, winepath does not exit with a non-zero - # error code, so we are forced to check the contents of - # stdout. On the other hand, if the command is not - # found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both - # error code of zero AND non-empty stdout, which explains - # the odd construction: - func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - else - # Allow warning below. - func_to_host_path_result="" - fi - ;; - esac - if test -z "$func_to_host_path_result" ; then - func_error "Could not determine host path corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_path_result="$1" - fi - ;; - esac - fi -} -# end: func_to_host_path - -# func_to_host_pathlist arg -# -# Convert pathlists to host format when used with build tools. -# See func_to_host_path(), above. This function supports the -# following $build/$host combinations (but does no harm for -# combinations not listed here): -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# -# Path separators are also converted from $build format to -# $host format. If ARG begins or ends with a path separator -# character, it is preserved (but converted to $host format) -# on output. -# -# ARG is a pathlist (on $build) that should be converted to -# the proper representation on $host. The result is stored -# in $func_to_host_pathlist_result. -func_to_host_pathlist () -{ - func_to_host_pathlist_result="$1" - if test -n "$1" ; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_to_host_pathlist_tmp2="$1" - # Once set for this call, this variable should not be - # reassigned. It is used in tha fallback case. - func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e 's|^:*||' -e 's|:*$||'` - case $build in - *mingw* ) # Actually, msys. - # Awkward: cmd appends spaces to result. - lt_sed_strip_trailing_spaces="s/[ ]*\$//" - func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # unfortunately, winepath doesn't convert pathlists - func_to_host_pathlist_result="" - func_to_host_pathlist_oldIFS=$IFS - IFS=: - for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do - IFS=$func_to_host_pathlist_oldIFS - if test -n "$func_to_host_pathlist_f" ; then - func_to_host_path "$func_to_host_pathlist_f" - if test -n "$func_to_host_path_result" ; then - if test -z "$func_to_host_pathlist_result" ; then - func_to_host_pathlist_result="$func_to_host_path_result" - else - func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" - fi - fi - fi - IFS=: - done - IFS=$func_to_host_pathlist_oldIFS - ;; - esac - if test -z "$func_to_host_pathlist_result" ; then - func_error "Could not determine the host path(s) corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This may break if $1 contains DOS-style drive - # specifications. The fix is not to complicate the expression - # below, but for the user to provide a working wine installation - # with winepath so that path translation in the cross-to-mingw - # case works properly. - lt_replace_pathsep_nix_to_dos="s|:|;|g" - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_replace_pathsep_nix_to_dos"` - fi - # Now, add the leading and trailing path separators back - case "$1" in - :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" - ;; - esac - case "$1" in - *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" - ;; - esac - ;; - esac - fi -} -# end: func_to_host_pathlist - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -# define setmode _setmode -#else -# include -# include -# ifdef __CYGWIN__ -# include -# define HAVE_SETENV -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -#ifdef _MSC_VER -# define S_IXUSR _S_IEXEC -# define stat _stat -# ifndef _INTPTR_T_DEFINED -# define intptr_t int -# endif -#endif - -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifdef __CYGWIN__ -# define FOPEN_WB "wb" -#endif - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -#undef LTWRAPPER_DEBUGPRINTF -#if defined DEBUGWRAPPER -# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args -static void -ltwrapper_debugprintf (const char *fmt, ...) -{ - va_list args; - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); -} -#else -# define LTWRAPPER_DEBUGPRINTF(args) -#endif - -const char *program_name = NULL; - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_fatal (const char *message, ...); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_opt_process_env_set (const char *arg); -void lt_opt_process_env_prepend (const char *arg); -void lt_opt_process_env_append (const char *arg); -int lt_split_name_value (const char *arg, char** name, char** value); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); - -static const char *script_text_part1 = -EOF - - func_emit_wrapper_part1 yes | - $SED -e 's/\([\\"]\)/\\\1/g' \ - -e 's/^/ "/' -e 's/$/\\n"/' - echo ";" - cat <"))); - for (i = 0; i < newargc; i++) - { - LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); - } - -EOF - - case $host_os in - mingw*) - cat <<"EOF" - /* execv doesn't actually work on mingw as expected on unix */ - rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); - if (rval == -1) - { - /* failed to start process */ - LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); - return 127; - } - return rval; -EOF - ;; - *) - cat <<"EOF" - execv (lt_argv_zero, newargz); - return rval; /* =127, but avoids unused variable warning */ -EOF - ;; - esac - - cat <<"EOF" -} - -void * -xmalloc (size_t num) -{ - void *p = (void *) malloc (num); - if (!p) - lt_fatal ("Memory exhausted"); - - return p; -} - -char * -xstrdup (const char *string) -{ - return string ? strcpy ((char *) xmalloc (strlen (string) + 1), - string) : NULL; -} - -const char * -base_name (const char *name) -{ - const char *base; - -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - /* Skip over the disk name in MSDOS pathnames. */ - if (isalpha ((unsigned char) name[0]) && name[1] == ':') - name += 2; -#endif - - for (base = name; *name; name++) - if (IS_DIR_SEPARATOR (*name)) - base = name + 1; - return base; -} - -int -check_executable (const char *path) -{ - struct stat st; - - LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", - path ? (*path ? path : "EMPTY!") : "NULL!")); - if ((!path) || (!*path)) - return 0; - - if ((stat (path, &st) >= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", - path ? (*path ? path : "EMPTY!") : "NULL!")); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char *concat_name; - - LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", - wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", - tmp_pathspec)); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - char *errstr = strerror (errno); - lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal ("Could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp (str, pat) == 0) - *str = '\0'; - } - return str; -} - -static void -lt_error_core (int exit_status, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s: %s: ", program_name, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, "FATAL", message, ap); - va_end (ap); -} - -void -lt_setenv (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", - (name ? name : ""), - (value ? value : ""))); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - int len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -int -lt_split_name_value (const char *arg, char** name, char** value) -{ - const char *p; - int len; - if (!arg || !*arg) - return 1; - - p = strchr (arg, (int)'='); - - if (!p) - return 1; - - *value = xstrdup (++p); - - len = strlen (arg) - strlen (*value); - *name = XMALLOC (char, len); - strncpy (*name, arg, len-1); - (*name)[len - 1] = '\0'; - - return 0; -} - -void -lt_opt_process_env_set (const char *arg) -{ - char *name = NULL; - char *value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); - } - - lt_setenv (name, value); - XFREE (name); - XFREE (value); -} - -void -lt_opt_process_env_prepend (const char *arg) -{ - char *name = NULL; - char *value = NULL; - char *new_value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); - } - - new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - XFREE (name); - XFREE (value); -} - -void -lt_opt_process_env_append (const char *arg) -{ - char *name = NULL; - char *value = NULL; - char *new_value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); - } - - new_value = lt_extend_str (getenv (name), value, 1); - lt_setenv (name, new_value); - XFREE (new_value); - XFREE (name); - XFREE (value); -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - (name ? name : ""), - (value ? value : ""))); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[len-1] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - (name ? name : ""), - (value ? value : ""))); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - - -EOF -} -# end: func_emit_cwrapperexe_src - -# func_mode_link arg... -func_mode_link () -{ - $opt_debug - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module="${wl}-single_module" - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) deplibs="$deplibs $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# moreargs="$moreargs $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file \`$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - weak_libs="$weak_libs $arg" - prev= - continue - ;; - xcclinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname '-L' '' "$arg" - dir=$func_stripname_result - if test -z "$dir"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" - else - func_fatal_error "need path for \`-L' option" - fi - fi - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - deplibs="$deplibs System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; - esac - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" - linker_flags="$linker_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - # -64, -mips[0-9] enable 64-bit mode on the SGI compiler - # -r[0-9][0-9]* specifies the processor on the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler - # +DA*, +DD* enable 64-bit mode on the HP compiler - # -q* pass through compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* pass through architecture-specific - # compiler args for GCC - # -F/path gives path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC - # @file GCC response files - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - compiler_flags="$compiler_flags $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_duplicate_deps ; then - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - libs="$libs $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; - esac - pre_post_deps="$pre_post_deps $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs="$tmp_deplibs" - fi - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - case $lib in - *.la) func_source "$lib" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` - case " $weak_libs " in - *" $deplib_base "*) ;; - *) deplibs="$deplibs $deplib" ;; - esac - done - done - libs="$dlprefiles" - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - compiler_flags="$compiler_flags $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - dir=$func_stripname_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - $ECHO - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because the file extensions .$libext of this argument makes me believe" - $ECHO "*** that it is just a static archive that I should not use here." - else - $ECHO - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - ;; - esac - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" - fi - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - dlprefiles="$dlprefiles $lib $dependency_libs" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" - fi - ;; - esac - func_basename "$lib" - laname="$func_basename_result" - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" - fi - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - newdlprefiles="$newdlprefiles $dir/$dlname" - else - newdlprefiles="$newdlprefiles $dir/$linklib" - fi - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in - *"$absdir:"*) ;; - *) temp_rpath="$temp_rpath$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc*) - # No point in relinking DLLs because paths are not encoded - notinst_deplibs="$notinst_deplibs $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" - break - fi - done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then - $ECHO - if test "$linkmode" = prog; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname="$1" - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc*) - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - func_basename "$soroot" - soname="$func_basename_result" - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from \`$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - $ECHO - $ECHO "*** And there doesn't seem to be a static archive available" - $ECHO "*** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - elif test -n "$old_library"; then - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - $ECHO - $ECHO "*** Warning: This system can not link to static lib archive $lib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - $ECHO "*** But as you try to build a module library, libtool will still create " - $ECHO "*** a static module, that should work as long as the dlopening application" - $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - $ECHO - $ECHO "*** However, this would only work if libtool was able to extract symbol" - $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" - $ECHO "*** not find such a program. So, this module is probably useless." - $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - *) temp_deplibs="$temp_deplibs $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - newlib_search_path="$newlib_search_path $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - case $deplib in - -L*) path="$deplib" ;; - *.la) - func_dirname "$deplib" "" "." - dir="$func_dirname_result" - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" - path= - fi - fi - ;; - *) - path="-L$absdir/$objdir" - ;; - esac - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" - - path="-L$absdir" - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - tmp_libs="$tmp_libs $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "\`-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - objs="$objs$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" - - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" - else - $ECHO - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - libobjs="$libobjs $objs" - fi - fi - - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" - - install_libdir="$1" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - shift - IFS="$save_ifs" - - test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$1" - number_minor="$2" - number_revision="$3" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - darwin|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - esac - ;; - no) - current="$1" - revision="$2" - age="$3" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current" - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; - - qnx) - major=".$current" - versuffix=".$current" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - - *) - func_fatal_configuration "unknown library version type \`$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - fi - - func_generate_dlsyms "$libname" "$libname" "yes" - libobjs="$libobjs $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - removelist="$removelist $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - oldlibs="$oldlibs $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` - # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` - # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) dlfiles="$dlfiles $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) dlprefiles="$dlprefiles $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - deplibs="$deplibs System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - deplibs="$deplibs -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $ECHO - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $ECHO - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ - -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` - done - fi - if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | - $GREP . >/dev/null; then - $ECHO - if test "X$deplibs_check_method" = "Xnone"; then - $ECHO "*** Warning: inter-library dependencies are not supported in this platform." - else - $ECHO "*** Warning: inter-library dependencies are not known to be supported." - fi - $ECHO "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - fi - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - $ECHO - $ECHO "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - $ECHO "*** a static module, that should work as long as the dlopening" - $ECHO "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - $ECHO - $ECHO "*** However, this would only work if libtool was able to extract symbol" - $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" - $ECHO "*** not find such a program. So, this module is probably useless." - $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - $ECHO "*** The inter-library dependencies that have been dropped here will be" - $ECHO "*** automatically added whenever a program is linked with this library" - $ECHO "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - $ECHO - $ECHO "*** Since this library must not contain undefined symbols," - $ECHO "*** because either the platform does not support them or" - $ECHO "*** it was explicitly requested with -no-undefined," - $ECHO "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - deplibs="$new_libs" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - if test -n "$hardcode_libdir_flag_spec_ld"; then - eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" - else - eval dep_rpath=\"$hardcode_libdir_flag_spec\" - fi - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname="$1" - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - linknames="$linknames $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" - delfiles="$delfiles $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols="$export_symbols" - export_symbols= - always_export_symbols=yes - fi - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - func_len " $cmd" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' - fi - - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - tmp_deplibs="$tmp_deplibs $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - linker_flags="$linker_flags $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - output_la=`$ECHO "X$output" | $Xsed -e "$basename"` - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript - func_verbose "creating GNU ld script: $output" - $ECHO 'INPUT (' > $output - for obj in $save_libobjs - do - $ECHO "$obj" >> $output - done - $ECHO ')' >> $output - delfiles="$delfiles $output" - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test "$compiler_needs_object" = yes; then - firstobj="$1 " - shift - fi - for obj - do - $ECHO "$obj" >> $output - done - delfiles="$delfiles $output" - output=$firstobj\"$file_list_spec$output\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test "X$objlist" = X || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - eval concat_cmds=\"$reload_cmds $objlist $last_robj\" - else - # All subsequent reloadable object files will link in - # the last one created. - eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext - objlist=$obj - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" - if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" - fi - delfiles="$delfiles $output" - - else - output= - fi - - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - fi - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - if ${skipped_export-false}; then - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - fi - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "\`-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "\`-release' is ignored for programs" - - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - compile_command="$compile_command ${wl}-bind_at_load" - finalize_command="$finalize_command ${wl}-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) dllsearchpath="$dllsearchpath:$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=yes - case $host in - *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - *cegcc) - # Disable wrappers for cegcc, we are cross compiling anyway. - wrappers_required=no - ;; - *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - esac - if test "$wrappers_required" = no; then - # Replace the output file specification. - compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' - fi - - exit $exit_status - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - - # Quote $ECHO for shipping. - if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then - case $progpath in - [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; - *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; - esac - qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` - else - qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - oldobjs="$oldobjs $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $addlibs - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - $ECHO "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase="$func_basename_result" - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - oldobjs="$oldobjs $gentop/$newobj" - ;; - *) oldobjs="$oldobjs $obj" ;; - esac - done - fi - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - newdependency_libs="$newdependency_libs $libdir/$name" - ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlfiles="$newdlfiles $libdir/$name" - ;; - *) newdlfiles="$newdlfiles $lib" ;; - esac - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlprefiles="$newdlprefiles $libdir/$name" - ;; - esac - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlfiles="$newdlfiles $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlprefiles="$newdlprefiles $abs" - done - dlprefiles="$newdlprefiles" - fi - $RM $output - # place dlname in correct position for cygwin - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -{ test "$mode" = link || test "$mode" = relink; } && - func_mode_link ${1+"$@"} - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $opt_debug - RM="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) RM="$RM $arg"; rmforce=yes ;; - -*) RM="$RM $arg" ;; - *) files="$files $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - origobjdir="$objdir" - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - objdir="$origobjdir" - else - objdir="$dir/$origobjdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$mode" = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates - if test "$mode" = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" - - case "$mode" in - clean) - case " $library_names " in - # " " in the beginning catches empty $dlname - *" $dlname "*) ;; - *) rmfiles="$rmfiles $objdir/$dlname" ;; - esac - test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then - rmfiles="$rmfiles $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then - rmfiles="$rmfiles $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$mode" = clean ; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - rmfiles="$rmfiles $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - rmfiles="$rmfiles $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - rmfiles="$rmfiles $objdir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - objdir="$origobjdir" - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -{ test "$mode" = uninstall || test "$mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: -# vi:sw=2 - diff --git a/Build/source/utils/xz-4.999.9beta/build-aux/missing b/Build/source/utils/xz-4.999.9beta/build-aux/missing deleted file mode 100755 index 28055d2ae6f..00000000000 --- a/Build/source/utils/xz-4.999.9beta/build-aux/missing +++ /dev/null @@ -1,376 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2009-04-28.21; # UTC - -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, -# 2008, 2009 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 - tar try tar, gnutar, gtar, then tar without non-portable flags - 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. - ;; - - tar*) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; - - *) - 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 - ;; - - tar*) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case $firstarg in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case $firstarg in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - 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/Build/source/utils/xz-4.999.9beta/config.h.in b/Build/source/utils/xz-4.999.9beta/config.h.in deleted file mode 100644 index 0e31e37e4c3..00000000000 --- a/Build/source/utils/xz-4.999.9beta/config.h.in +++ /dev/null @@ -1,404 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define if building universal (internal helper macro) */ -#undef AC_APPLE_UNIVERSAL_BUILD - -/* Define to 1 if translation of program messages to the user's native - language is requested. */ -#undef ENABLE_NLS - -/* Define to 1 if using x86 assembler optimizations. */ -#undef HAVE_ASM_X86 - -/* Define to 1 if using x86_64 assembler optimizations. */ -#undef HAVE_ASM_X86_64 - -/* Define to 1 if bswap_16 is available. */ -#undef HAVE_BSWAP_16 - -/* Define to 1 if bswap_32 is available. */ -#undef HAVE_BSWAP_32 - -/* Define to 1 if bswap_64 is available. */ -#undef HAVE_BSWAP_64 - -/* Define to 1 if you have the header file. */ -#undef HAVE_BYTESWAP_H - -/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the - CoreFoundation framework. */ -#undef HAVE_CFLOCALECOPYCURRENT - -/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in - the CoreFoundation framework. */ -#undef HAVE_CFPREFERENCESCOPYAPPVALUE - -/* Define to 1 if crc32 integrity check is enabled. */ -#undef HAVE_CHECK_CRC32 - -/* Define to 1 if crc64 integrity check is enabled. */ -#undef HAVE_CHECK_CRC64 - -/* Define to 1 if sha256 integrity check is enabled. */ -#undef HAVE_CHECK_SHA256 - -/* Define to 1 if the number of available CPU cores can be detected with - sysconf(_SC_NPROCESSORS_ONLN). */ -#undef HAVE_CPUCORES_SYSCONF - -/* Define to 1 if the number of available CPU cores can be detected with - sysctl(). */ -#undef HAVE_CPUCORES_SYSCTL - -/* Define if the GNU dcgettext() function is already present or preinstalled. - */ -#undef HAVE_DCGETTEXT - -/* Define to 1 if decoder components are enabled. */ -#undef HAVE_DECODER - -/* Define to 1 if arm decoder is enabled. */ -#undef HAVE_DECODER_ARM - -/* Define to 1 if armthumb decoder is enabled. */ -#undef HAVE_DECODER_ARMTHUMB - -/* Define to 1 if delta decoder is enabled. */ -#undef HAVE_DECODER_DELTA - -/* Define to 1 if ia64 decoder is enabled. */ -#undef HAVE_DECODER_IA64 - -/* Define to 1 if lzma1 decoder is enabled. */ -#undef HAVE_DECODER_LZMA1 - -/* Define to 1 if lzma2 decoder is enabled. */ -#undef HAVE_DECODER_LZMA2 - -/* Define to 1 if powerpc decoder is enabled. */ -#undef HAVE_DECODER_POWERPC - -/* Define to 1 if sparc decoder is enabled. */ -#undef HAVE_DECODER_SPARC - -/* Define to 1 if subblock decoder is enabled. */ -#undef HAVE_DECODER_SUBBLOCK - -/* Define to 1 if x86 decoder is enabled. */ -#undef HAVE_DECODER_X86 - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if encoder components are enabled. */ -#undef HAVE_ENCODER - -/* Define to 1 if arm encoder is enabled. */ -#undef HAVE_ENCODER_ARM - -/* Define to 1 if armthumb encoder is enabled. */ -#undef HAVE_ENCODER_ARMTHUMB - -/* Define to 1 if delta encoder is enabled. */ -#undef HAVE_ENCODER_DELTA - -/* Define to 1 if ia64 encoder is enabled. */ -#undef HAVE_ENCODER_IA64 - -/* Define to 1 if lzma1 encoder is enabled. */ -#undef HAVE_ENCODER_LZMA1 - -/* Define to 1 if lzma2 encoder is enabled. */ -#undef HAVE_ENCODER_LZMA2 - -/* Define to 1 if powerpc encoder is enabled. */ -#undef HAVE_ENCODER_POWERPC - -/* Define to 1 if sparc encoder is enabled. */ -#undef HAVE_ENCODER_SPARC - -/* Define to 1 if subblock encoder is enabled. */ -#undef HAVE_ENCODER_SUBBLOCK - -/* Define to 1 if x86 encoder is enabled. */ -#undef HAVE_ENCODER_X86 - -/* Define to 1 if the system supports fast unaligned memory access. */ -#undef HAVE_FAST_UNALIGNED_ACCESS - -/* Define to 1 if you have the header file. */ -#undef HAVE_FCNTL_H - -/* Define to 1 if you have the `futimens' function. */ -#undef HAVE_FUTIMENS - -/* Define to 1 if you have the `futimes' function. */ -#undef HAVE_FUTIMES - -/* Define to 1 if you have the `futimesat' function. */ -#undef HAVE_FUTIMESAT - -/* Define to 1 if you have the header file. */ -#undef HAVE_GETOPT_H - -/* Define to 1 if you have the `getopt_long' function. */ -#undef HAVE_GETOPT_LONG - -/* Define if the GNU gettext() function is already present or preinstalled. */ -#undef HAVE_GETTEXT - -/* Define if you have the iconv() function. */ -#undef HAVE_ICONV - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIMITS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 to enable bt2 match finder. */ -#undef HAVE_MF_BT2 - -/* Define to 1 to enable bt3 match finder. */ -#undef HAVE_MF_BT3 - -/* Define to 1 to enable bt4 match finder. */ -#undef HAVE_MF_BT4 - -/* Define to 1 to enable hc3 match finder. */ -#undef HAVE_MF_HC3 - -/* Define to 1 to enable hc4 match finder. */ -#undef HAVE_MF_HC4 - -/* Define to 1 if getopt.h declares extern int optreset. */ -#undef HAVE_OPTRESET - -/* Define to 1 if the amount of physical memory can be detected with - sysconf(_SC_PAGESIZE) and sysconf(_SC_PHYS_PAGES). */ -#undef HAVE_PHYSMEM_SYSCONF - -/* Define to 1 if the amount of physical memory can be detected with sysctl(). - */ -#undef HAVE_PHYSMEM_SYSCTL - -/* Define to 1 if the amount of physical memory can be detected with Linux - sysinfo(). */ -#undef HAVE_PHYSMEM_SYSINFO - -/* Define if you have POSIX threads libraries and header files. */ -#undef HAVE_PTHREAD - -/* Define to 1 if optimizing for size. */ -#undef HAVE_SMALL - -/* Define to 1 if stdbool.h conforms to C99. */ -#undef HAVE_STDBOOL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if `struct stat' is a member of `st_atimensec'. */ -#undef HAVE_STRUCT_STAT_ST_ATIMENSEC - -/* Define to 1 if `struct stat' is a member of `st_atimespec.tv_nsec'. */ -#undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC - -/* Define to 1 if `struct stat' is a member of `st_atim.st__tim.tv_nsec'. */ -#undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC - -/* Define to 1 if `struct stat' is a member of `st_atim.tv_nsec'. */ -#undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC - -/* Define to 1 if `struct stat' is a member of `st_uatime'. */ -#undef HAVE_STRUCT_STAT_ST_UATIME - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_PARAM_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SYSCTL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TIME_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if the system has the type `uintptr_t'. */ -#undef HAVE_UINTPTR_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if you have the `utime' function. */ -#undef HAVE_UTIME - -/* Define to 1 if you have the `utimes' function. */ -#undef HAVE_UTIMES - -/* Define to 1 or 0, depending whether the compiler supports simple visibility - declarations. */ -#undef HAVE_VISIBILITY - -/* Define to 1 if the system has the type `_Bool'. */ -#undef HAVE__BOOL - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#undef LT_OBJDIR - -/* Define to 1 to disable debugging code. */ -#undef NDEBUG - -/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -#undef NO_MINUS_C_MINUS_O - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the URL of the home page of this package. */ -#undef PACKAGE_HOMEPAGE - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -#undef PTHREAD_CREATE_JOINABLE - -/* The size of `size_t', as computed by sizeof. */ -#undef SIZEOF_SIZE_T - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Enable extensions on AIX 3, Interix. */ -#ifndef _ALL_SOURCE -# undef _ALL_SOURCE -#endif -/* Enable GNU extensions on systems that have them. */ -#ifndef _GNU_SOURCE -# undef _GNU_SOURCE -#endif -/* Enable threading extensions on Solaris. */ -#ifndef _POSIX_PTHREAD_SEMANTICS -# undef _POSIX_PTHREAD_SEMANTICS -#endif -/* Enable extensions on HP NonStop. */ -#ifndef _TANDEM_SOURCE -# undef _TANDEM_SOURCE -#endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# undef __EXTENSIONS__ -#endif - - -/* Version number of package */ -#undef VERSION - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -# undef WORDS_BIGENDIAN -# endif -#endif - -/* Number of bits in a file offset, on hosts where this is settable. */ -#undef _FILE_OFFSET_BITS - -/* Define for large files, on AIX-style hosts. */ -#undef _LARGE_FILES - -/* Define to 1 if on MINIX. */ -#undef _MINIX - -/* Define to 2 if the system does not provide POSIX.1 features except with - this defined. */ -#undef _POSIX_1_SOURCE - -/* Define to 1 if you need to in order for `stat' and other things to work. */ -#undef _POSIX_SOURCE - -/* Define for Solaris 2.5.1 so the uint32_t typedef from , - , or is not used. If the typedef were allowed, the - #define below would cause a syntax error. */ -#undef _UINT32_T - -/* Define for Solaris 2.5.1 so the uint64_t typedef from , - , or is not used. If the typedef were allowed, the - #define below would cause a syntax error. */ -#undef _UINT64_T - -/* Define for Solaris 2.5.1 so the uint8_t typedef from , - , or is not used. If the typedef were allowed, the - #define below would cause a syntax error. */ -#undef _UINT8_T - -/* Define to rpl_ if the getopt replacement functions and variables should be - used. */ -#undef __GETOPT_PREFIX - -/* Define to the type of a signed integer type of width exactly 32 bits if - such a type exists and the standard includes do not define it. */ -#undef int32_t - -/* Define to the type of a signed integer type of width exactly 64 bits if - such a type exists and the standard includes do not define it. */ -#undef int64_t - -/* Define to the type of an unsigned integer type of width exactly 16 bits if - such a type exists and the standard includes do not define it. */ -#undef uint16_t - -/* Define to the type of an unsigned integer type of width exactly 32 bits if - such a type exists and the standard includes do not define it. */ -#undef uint32_t - -/* Define to the type of an unsigned integer type of width exactly 64 bits if - such a type exists and the standard includes do not define it. */ -#undef uint64_t - -/* Define to the type of an unsigned integer type of width exactly 8 bits if - such a type exists and the standard includes do not define it. */ -#undef uint8_t - -/* Define to the type of an unsigned integer type wide enough to hold a - pointer, if such a type exists, and if the system does not define it. */ -#undef uintptr_t diff --git a/Build/source/utils/xz-4.999.9beta/configure b/Build/source/utils/xz-4.999.9beta/configure deleted file mode 100755 index 317cb88a26d..00000000000 --- a/Build/source/utils/xz-4.999.9beta/configure +++ /dev/null @@ -1,19363 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.64 for XZ Utils 4.999.9beta. -# -# Report bugs to . -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software -# Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -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 - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -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" - 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'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -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. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: lasse.collin@tukaani.org about your system, including -$0: any error possibly output before this message. Then -$0: install a modern shell, or manually run the script -$0: under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - 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; } - - # 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). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... 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'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - 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 - -# 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'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$lt_ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` - ;; -esac - -ECHO=${lt_ECHO-echo} -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat <<_LT_EOF -$* -_LT_EOF - exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$lt_ECHO"; then - if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if { echo_test_string=`eval $cmd`; } 2>/dev/null && - { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null - then - break - fi - done - fi - - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : - else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$ECHO" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - ECHO='print -r' - elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - ECHO='printf %s\n' - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - ECHO="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - ECHO=echo - fi - fi - fi - fi - fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -lt_ECHO=$ECHO -if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" -fi - - - - -exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='XZ Utils' -PACKAGE_TARNAME='xz' -PACKAGE_VERSION='4.999.9beta' -PACKAGE_STRING='XZ Utils 4.999.9beta' -PACKAGE_BUGREPORT='lasse.collin@tukaani.org' -PACKAGE_URL='' - -ac_unique_file="src/liblzma/common/common.h" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -gt_needs= -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -xz -DYNAMIC_LDFLAGS -DYNAMIC_CPPFLAGS -STATIC_LDFLAGS -STATIC_CPPFLAGS -AM_CFLAGS -COND_GNULIB_FALSE -COND_GNULIB_TRUE -HAVE_VISIBILITY -CFLAG_VISIBILITY -GETOPT_H -LIBOBJS -POSUB -LTLIBINTL -LIBINTL -INTLLIBS -LTLIBICONV -LIBICONV -INTL_MACOSX_LIBS -MSGMERGE -XGETTEXT_015 -XGETTEXT -GMSGFMT_015 -MSGFMT_015 -GMSGFMT -MSGFMT -USE_NLS -COND_SHARED_FALSE -COND_SHARED_TRUE -RC -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -lt_ECHO -RANLIB -AR -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -SED -LIBTOOL -OBJDUMP -DLLTOOL -AS -PTHREAD_CFLAGS -PTHREAD_LIBS -PTHREAD_CC -acx_pthread_config -EGREP -GREP -CPP -am__fastdepCCAS_FALSE -am__fastdepCCAS_TRUE -CCASDEPMODE -CCASFLAGS -CCAS -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -LN_S -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -PREFERABLY_POSIX_SHELL -POSIX_SHELL -COND_SMALL_FALSE -COND_SMALL_TRUE -COND_ASM_X86_64_FALSE -COND_ASM_X86_64_TRUE -COND_ASM_X86_FALSE -COND_ASM_X86_TRUE -COND_CHECK_SHA256_FALSE -COND_CHECK_SHA256_TRUE -COND_CHECK_CRC64_FALSE -COND_CHECK_CRC64_TRUE -COND_CHECK_CRC32_FALSE -COND_CHECK_CRC32_TRUE -COND_DECODER_LZ_FALSE -COND_DECODER_LZ_TRUE -COND_ENCODER_LZ_FALSE -COND_ENCODER_LZ_TRUE -COND_FILTER_LZ_FALSE -COND_FILTER_LZ_TRUE -COND_DECODER_SIMPLE_FALSE -COND_DECODER_SIMPLE_TRUE -COND_ENCODER_SIMPLE_FALSE -COND_ENCODER_SIMPLE_TRUE -COND_FILTER_SIMPLE_FALSE -COND_FILTER_SIMPLE_TRUE -COND_DECODER_SPARC_FALSE -COND_DECODER_SPARC_TRUE -COND_ENCODER_SPARC_FALSE -COND_ENCODER_SPARC_TRUE -COND_FILTER_SPARC_FALSE -COND_FILTER_SPARC_TRUE -COND_DECODER_ARMTHUMB_FALSE -COND_DECODER_ARMTHUMB_TRUE -COND_ENCODER_ARMTHUMB_FALSE -COND_ENCODER_ARMTHUMB_TRUE -COND_FILTER_ARMTHUMB_FALSE -COND_FILTER_ARMTHUMB_TRUE -COND_DECODER_ARM_FALSE -COND_DECODER_ARM_TRUE -COND_ENCODER_ARM_FALSE -COND_ENCODER_ARM_TRUE -COND_FILTER_ARM_FALSE -COND_FILTER_ARM_TRUE -COND_DECODER_IA64_FALSE -COND_DECODER_IA64_TRUE -COND_ENCODER_IA64_FALSE -COND_ENCODER_IA64_TRUE -COND_FILTER_IA64_FALSE -COND_FILTER_IA64_TRUE -COND_DECODER_POWERPC_FALSE -COND_DECODER_POWERPC_TRUE -COND_ENCODER_POWERPC_FALSE -COND_ENCODER_POWERPC_TRUE -COND_FILTER_POWERPC_FALSE -COND_FILTER_POWERPC_TRUE -COND_DECODER_X86_FALSE -COND_DECODER_X86_TRUE -COND_ENCODER_X86_FALSE -COND_ENCODER_X86_TRUE -COND_FILTER_X86_FALSE -COND_FILTER_X86_TRUE -COND_DECODER_DELTA_FALSE -COND_DECODER_DELTA_TRUE -COND_ENCODER_DELTA_FALSE -COND_ENCODER_DELTA_TRUE -COND_FILTER_DELTA_FALSE -COND_FILTER_DELTA_TRUE -COND_DECODER_SUBBLOCK_FALSE -COND_DECODER_SUBBLOCK_TRUE -COND_ENCODER_SUBBLOCK_FALSE -COND_ENCODER_SUBBLOCK_TRUE -COND_FILTER_SUBBLOCK_FALSE -COND_FILTER_SUBBLOCK_TRUE -COND_DECODER_LZMA2_FALSE -COND_DECODER_LZMA2_TRUE -COND_ENCODER_LZMA2_FALSE -COND_ENCODER_LZMA2_TRUE -COND_FILTER_LZMA2_FALSE -COND_FILTER_LZMA2_TRUE -COND_DECODER_LZMA1_FALSE -COND_DECODER_LZMA1_TRUE -COND_ENCODER_LZMA1_FALSE -COND_ENCODER_LZMA1_TRUE -COND_FILTER_LZMA1_FALSE -COND_FILTER_LZMA1_TRUE -COND_MAIN_DECODER_FALSE -COND_MAIN_DECODER_TRUE -COND_MAIN_ENCODER_FALSE -COND_MAIN_ENCODER_TRUE -COND_W32_FALSE -COND_W32_TRUE -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -PACKAGE_HOMEPAGE -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_debug -enable_encoders -enable_decoders -enable_match_finders -enable_checks -enable_assembler -enable_unaligned_access -enable_small -enable_threads -enable_dynamic -enable_dependency_tracking -enable_shared -enable_static -with_pic -enable_fast_install -with_gnu_ld -enable_libtool_lock -enable_nls -enable_rpath -with_libiconv_prefix -with_libintl_prefix -enable_largefile -enable_werror -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CCAS -CCASFLAGS -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information." - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -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 -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -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 XZ Utils 4.999.9beta to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/xz] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of XZ Utils 4.999.9beta:";; - esac - cat <<\_ACEOF - -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-debug Enable debugging code. - --enable-encoders=LIST Comma-separated list of encoders to build. - Default=all. Available encoders: lzma1 lzma2 - subblock delta x86 powerpc ia64 arm armthumb sparc - --enable-decoders=LIST Comma-separated list of decoders to build. - Default=all. Available decoders are the same as - available encoders. - --enable-match-finders=LIST - Comma-separated list of match finders to build. - Default=all. At least one match finder is required - for encoding with the LZMA1 and LZMA2 filters. - Available match finders: hc3 hc4 bt2 bt3 bt4 - --enable-checks=LIST Comma-separated list of integrity checks to build. - Default=all. Available integrity checks: crc32 crc64 - sha256 - --disable-assembler Do not use assembler optimizations even if such - exist for the architecture. - --enable-unaligned-access - Enable if the system supports *fast* unaligned - memory access with 16-bit and 32-bit integers. By - default, this is enabled only on x86, x86_64, and - big endian PowerPC. - --enable-small Make liblzma smaller and a little slower. This is - disabled by default to optimize for speed. - --disable-threads Disable threading support. This makes some things - thread-unsafe. - --enable-dynamic=TYPE Set how command line tools are linked against - liblzma. TYPE can be mixed, yes, or no. The default - is mixed. - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --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-libtool-lock avoid locking (might break parallel builds) - --disable-nls do not use Native Language Support - --disable-rpath do not hardcode runtime library paths - --disable-largefile omit support for large files - --enable-werror Enable -Werror to abort compilation on all compiler - warnings. - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-gnu-ld assume the C compiler uses GNU ld default=no - --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib - --without-libiconv-prefix don't search for libiconv in includedir and libdir - --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib - --without-libintl-prefix don't search for libintl in includedir and libdir - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CCAS assembler compiler command (defaults to CC) - CCASFLAGS assembler compiler flags (defaults to CFLAGS) - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -XZ Utils configure 4.999.9beta -generated by GNU Autoconf 2.64 - -Copyright (C) 2009 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - return $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - return $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( cat <<\_ASBOX -## --------------------------------------- ## -## Report this to lasse.collin@tukaani.org ## -## --------------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - return $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - return $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_func - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_type - -# ac_fn_c_find_uintX_t LINENO BITS VAR -# ------------------------------------ -# Finds an unsigned integer type with width BITS, setting cache variable VAR -# accordingly. -ac_fn_c_find_uintX_t () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 -$as_echo_n "checking for uint$2_t... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ - 'unsigned long long int' 'unsigned short int' 'unsigned char'; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(($ac_type) -1 >> ($2 - 1) == 1)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - case $ac_type in #( - uint$2_t) : - eval "$3=yes" ;; #( - *) : - eval "$3=\$ac_type" ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - eval as_val=\$$3 - if test "x$as_val" = x""no; then : - -else - break -fi - done -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_find_uintX_t - -# ac_fn_c_find_intX_t LINENO BITS VAR -# ----------------------------------- -# Finds a signed integer type with width BITS, setting cache variable VAR -# accordingly. -ac_fn_c_find_intX_t () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 -$as_echo_n "checking for int$2_t... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - for ac_type in int$2_t 'int' 'long int' \ - 'long long int' 'short int' 'signed char'; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(0 < ($ac_type) (((($ac_type) 1 << ($2 - 2)) - 1) * 2 + 1))]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(($ac_type) (((($ac_type) 1 << ($2 - 2)) - 1) * 2 + 1) - < ($ac_type) (((($ac_type) 1 << ($2 - 2)) - 1) * 2 + 2))]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - case $ac_type in #( - int$2_t) : - eval "$3=yes" ;; #( - *) : - eval "$3=\$ac_type" ;; -esac -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - eval as_val=\$$3 - if test "x$as_val" = x""no; then : - -else - break -fi - done -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_find_intX_t - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - echo >>conftest.val; read $3 &5 -$as_echo_n "checking for $2.$3... " >&6; } -if { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (sizeof ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - eval "$4=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$4 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_member - -# ac_fn_c_check_decl LINENO SYMBOL VAR -# ------------------------------------ -# Tests whether SYMBOL is declared, setting cache variable VAR accordingly. -ac_fn_c_check_decl () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 -$as_echo_n "checking whether $2 is declared... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -#ifndef $2 - (void) $2; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_decl -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 XZ Utils $as_me 4.999.9beta, which was -generated by GNU Autoconf 2.64. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -gt_needs="$gt_needs " -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -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 - - - -ac_aux_dir= -for ac_dir in build-aux "$srcdir"/build-aux; do - for ac_t in install-sh install.sh shtool; do - if test -f "$ac_dir/$ac_t"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/$ac_t -c" - break 2 - fi - done -done -if test -z "$ac_aux_dir"; then - as_fn_error "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -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. - - - -ac_config_headers="$ac_config_headers config.h" - - -PACKAGE_HOMEPAGE=http://tukaani.org/xz/ - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_HOMEPAGE "$PACKAGE_HOMEPAGE" -_ACEOF - - - -echo -echo "$PACKAGE_STRING" - -echo -echo "System type:" -# This is needed to know if assembler optimizations can be used. -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - - -# We do some special things on Windows (32-bit or 64-bit) builds. -case $host_os in - mingw* | cygwin*) is_w32=yes ;; - *) is_w32=no ;; -esac - if test "$is_w32" = yes; then - COND_W32_TRUE= - COND_W32_FALSE='#' -else - COND_W32_TRUE='#' - COND_W32_FALSE= -fi - - - -echo -echo "Configure options:" -AM_CFLAGS= - - -############# -# Debugging # -############# - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if debugging code should be compiled" >&5 -$as_echo_n "checking if debugging code should be compiled... " >&6; } -# Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then : - enableval=$enable_debug; -else - enable_debug=no -fi - -if test "x$enable_debug" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - -$as_echo "#define NDEBUG 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -########### -# Filters # -########### - - - - -enable_filter_lzma1=no -enable_encoder_lzma1=no -enable_decoder_lzma1=no -enable_filter_lzma2=no -enable_encoder_lzma2=no -enable_decoder_lzma2=no -enable_filter_subblock=no -enable_encoder_subblock=no -enable_decoder_subblock=no -enable_filter_delta=no -enable_encoder_delta=no -enable_decoder_delta=no -enable_filter_x86=no -enable_encoder_x86=no -enable_decoder_x86=no -enable_filter_powerpc=no -enable_encoder_powerpc=no -enable_decoder_powerpc=no -enable_filter_ia64=no -enable_encoder_ia64=no -enable_decoder_ia64=no -enable_filter_arm=no -enable_encoder_arm=no -enable_decoder_arm=no -enable_filter_armthumb=no -enable_encoder_armthumb=no -enable_decoder_armthumb=no -enable_filter_sparc=no -enable_encoder_sparc=no -enable_decoder_sparc=no - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which encoders to build" >&5 -$as_echo_n "checking which encoders to build... " >&6; } -# Check whether --enable-encoders was given. -if test "${enable_encoders+set}" = set; then : - enableval=$enable_encoders; -else - enable_encoders=lzma1,lzma2,subblock,delta,x86,powerpc,ia64,arm,armthumb,sparc -fi - -enable_encoders=`echo "$enable_encoders" | sed 's/,subblock//; s/,/ /g'` -if test "x$enable_encoders" = xno || test "x$enable_encoders" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none)" >&5 -$as_echo "(none)" >&6; } -else - -$as_echo "#define HAVE_ENCODER 1" >>confdefs.h - - for arg in $enable_encoders - do - case $arg in - lzma1) - enable_filter_lzma1=yes - enable_encoder_lzma1=yes - -$as_echo "#define HAVE_ENCODER_LZMA1 1" >>confdefs.h - - ;; - lzma2) - enable_filter_lzma2=yes - enable_encoder_lzma2=yes - -$as_echo "#define HAVE_ENCODER_LZMA2 1" >>confdefs.h - - ;; - subblock) - enable_filter_subblock=yes - enable_encoder_subblock=yes - -$as_echo "#define HAVE_ENCODER_SUBBLOCK 1" >>confdefs.h - - ;; - delta) - enable_filter_delta=yes - enable_encoder_delta=yes - -$as_echo "#define HAVE_ENCODER_DELTA 1" >>confdefs.h - - ;; - x86) - enable_filter_x86=yes - enable_encoder_x86=yes - -$as_echo "#define HAVE_ENCODER_X86 1" >>confdefs.h - - ;; - powerpc) - enable_filter_powerpc=yes - enable_encoder_powerpc=yes - -$as_echo "#define HAVE_ENCODER_POWERPC 1" >>confdefs.h - - ;; - ia64) - enable_filter_ia64=yes - enable_encoder_ia64=yes - -$as_echo "#define HAVE_ENCODER_IA64 1" >>confdefs.h - - ;; - arm) - enable_filter_arm=yes - enable_encoder_arm=yes - -$as_echo "#define HAVE_ENCODER_ARM 1" >>confdefs.h - - ;; - armthumb) - enable_filter_armthumb=yes - enable_encoder_armthumb=yes - -$as_echo "#define HAVE_ENCODER_ARMTHUMB 1" >>confdefs.h - - ;; - sparc) - enable_filter_sparc=yes - enable_encoder_sparc=yes - -$as_echo "#define HAVE_ENCODER_SPARC 1" >>confdefs.h - - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - as_fn_error "unknown filter: $arg" "$LINENO" 5 - ;; - esac - done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_encoders" >&5 -$as_echo "$enable_encoders" >&6; } -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which decoders to build" >&5 -$as_echo_n "checking which decoders to build... " >&6; } -# Check whether --enable-decoders was given. -if test "${enable_decoders+set}" = set; then : - enableval=$enable_decoders; -else - enable_decoders=lzma1,lzma2,subblock,delta,x86,powerpc,ia64,arm,armthumb,sparc -fi - -enable_decoders=`echo "$enable_decoders" | sed 's/,subblock//; s/,/ /g'` -if test "x$enable_decoders" = xno || test "x$enable_decoders" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none)" >&5 -$as_echo "(none)" >&6; } -else - -$as_echo "#define HAVE_DECODER 1" >>confdefs.h - - for arg in $enable_decoders - do - case $arg in - lzma1) - enable_filter_lzma1=yes - enable_decoder_lzma1=yes - -$as_echo "#define HAVE_DECODER_LZMA1 1" >>confdefs.h - - ;; - lzma2) - enable_filter_lzma2=yes - enable_decoder_lzma2=yes - -$as_echo "#define HAVE_DECODER_LZMA2 1" >>confdefs.h - - ;; - subblock) - enable_filter_subblock=yes - enable_decoder_subblock=yes - -$as_echo "#define HAVE_DECODER_SUBBLOCK 1" >>confdefs.h - - ;; - delta) - enable_filter_delta=yes - enable_decoder_delta=yes - -$as_echo "#define HAVE_DECODER_DELTA 1" >>confdefs.h - - ;; - x86) - enable_filter_x86=yes - enable_decoder_x86=yes - -$as_echo "#define HAVE_DECODER_X86 1" >>confdefs.h - - ;; - powerpc) - enable_filter_powerpc=yes - enable_decoder_powerpc=yes - -$as_echo "#define HAVE_DECODER_POWERPC 1" >>confdefs.h - - ;; - ia64) - enable_filter_ia64=yes - enable_decoder_ia64=yes - -$as_echo "#define HAVE_DECODER_IA64 1" >>confdefs.h - - ;; - arm) - enable_filter_arm=yes - enable_decoder_arm=yes - -$as_echo "#define HAVE_DECODER_ARM 1" >>confdefs.h - - ;; - armthumb) - enable_filter_armthumb=yes - enable_decoder_armthumb=yes - -$as_echo "#define HAVE_DECODER_ARMTHUMB 1" >>confdefs.h - - ;; - sparc) - enable_filter_sparc=yes - enable_decoder_sparc=yes - -$as_echo "#define HAVE_DECODER_SPARC 1" >>confdefs.h - - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - as_fn_error "unknown filter: $arg" "$LINENO" 5 - ;; - esac - done - - # LZMA2 requires that LZMA1 is enabled. - test "x$enable_encoder_lzma2" = xyes && enable_encoder_lzma1=yes - test "x$enable_decoder_lzma2" = xyes && enable_decoder_lzma1=yes - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_decoders" >&5 -$as_echo "$enable_decoders" >&6; } -fi - -if test "x$enable_encoder_lzma2$enable_encoder_lzma1" = xyesno \ - || test "x$enable_decoder_lzma2$enable_decoder_lzma1" = xyesno; then - as_fn_error "LZMA2 requires that LZMA1 is also enabled." "$LINENO" 5 -fi - - if test "x$enable_encoders" != xno && test "x$enable_encoders" != x; then - COND_MAIN_ENCODER_TRUE= - COND_MAIN_ENCODER_FALSE='#' -else - COND_MAIN_ENCODER_TRUE='#' - COND_MAIN_ENCODER_FALSE= -fi - - if test "x$enable_decoders" != xno && test "x$enable_decoders" != x; then - COND_MAIN_DECODER_TRUE= - COND_MAIN_DECODER_FALSE='#' -else - COND_MAIN_DECODER_TRUE='#' - COND_MAIN_DECODER_FALSE= -fi - - - if test "x$enable_filter_lzma1" = xyes; then - COND_FILTER_LZMA1_TRUE= - COND_FILTER_LZMA1_FALSE='#' -else - COND_FILTER_LZMA1_TRUE='#' - COND_FILTER_LZMA1_FALSE= -fi - - if test "x$enable_encoder_lzma1" = xyes; then - COND_ENCODER_LZMA1_TRUE= - COND_ENCODER_LZMA1_FALSE='#' -else - COND_ENCODER_LZMA1_TRUE='#' - COND_ENCODER_LZMA1_FALSE= -fi - - if test "x$enable_decoder_lzma1" = xyes; then - COND_DECODER_LZMA1_TRUE= - COND_DECODER_LZMA1_FALSE='#' -else - COND_DECODER_LZMA1_TRUE='#' - COND_DECODER_LZMA1_FALSE= -fi - - if test "x$enable_filter_lzma2" = xyes; then - COND_FILTER_LZMA2_TRUE= - COND_FILTER_LZMA2_FALSE='#' -else - COND_FILTER_LZMA2_TRUE='#' - COND_FILTER_LZMA2_FALSE= -fi - - if test "x$enable_encoder_lzma2" = xyes; then - COND_ENCODER_LZMA2_TRUE= - COND_ENCODER_LZMA2_FALSE='#' -else - COND_ENCODER_LZMA2_TRUE='#' - COND_ENCODER_LZMA2_FALSE= -fi - - if test "x$enable_decoder_lzma2" = xyes; then - COND_DECODER_LZMA2_TRUE= - COND_DECODER_LZMA2_FALSE='#' -else - COND_DECODER_LZMA2_TRUE='#' - COND_DECODER_LZMA2_FALSE= -fi - - if test "x$enable_filter_subblock" = xyes; then - COND_FILTER_SUBBLOCK_TRUE= - COND_FILTER_SUBBLOCK_FALSE='#' -else - COND_FILTER_SUBBLOCK_TRUE='#' - COND_FILTER_SUBBLOCK_FALSE= -fi - - if test "x$enable_encoder_subblock" = xyes; then - COND_ENCODER_SUBBLOCK_TRUE= - COND_ENCODER_SUBBLOCK_FALSE='#' -else - COND_ENCODER_SUBBLOCK_TRUE='#' - COND_ENCODER_SUBBLOCK_FALSE= -fi - - if test "x$enable_decoder_subblock" = xyes; then - COND_DECODER_SUBBLOCK_TRUE= - COND_DECODER_SUBBLOCK_FALSE='#' -else - COND_DECODER_SUBBLOCK_TRUE='#' - COND_DECODER_SUBBLOCK_FALSE= -fi - - if test "x$enable_filter_delta" = xyes; then - COND_FILTER_DELTA_TRUE= - COND_FILTER_DELTA_FALSE='#' -else - COND_FILTER_DELTA_TRUE='#' - COND_FILTER_DELTA_FALSE= -fi - - if test "x$enable_encoder_delta" = xyes; then - COND_ENCODER_DELTA_TRUE= - COND_ENCODER_DELTA_FALSE='#' -else - COND_ENCODER_DELTA_TRUE='#' - COND_ENCODER_DELTA_FALSE= -fi - - if test "x$enable_decoder_delta" = xyes; then - COND_DECODER_DELTA_TRUE= - COND_DECODER_DELTA_FALSE='#' -else - COND_DECODER_DELTA_TRUE='#' - COND_DECODER_DELTA_FALSE= -fi - - if test "x$enable_filter_x86" = xyes; then - COND_FILTER_X86_TRUE= - COND_FILTER_X86_FALSE='#' -else - COND_FILTER_X86_TRUE='#' - COND_FILTER_X86_FALSE= -fi - - if test "x$enable_encoder_x86" = xyes; then - COND_ENCODER_X86_TRUE= - COND_ENCODER_X86_FALSE='#' -else - COND_ENCODER_X86_TRUE='#' - COND_ENCODER_X86_FALSE= -fi - - if test "x$enable_decoder_x86" = xyes; then - COND_DECODER_X86_TRUE= - COND_DECODER_X86_FALSE='#' -else - COND_DECODER_X86_TRUE='#' - COND_DECODER_X86_FALSE= -fi - - if test "x$enable_filter_powerpc" = xyes; then - COND_FILTER_POWERPC_TRUE= - COND_FILTER_POWERPC_FALSE='#' -else - COND_FILTER_POWERPC_TRUE='#' - COND_FILTER_POWERPC_FALSE= -fi - - if test "x$enable_encoder_powerpc" = xyes; then - COND_ENCODER_POWERPC_TRUE= - COND_ENCODER_POWERPC_FALSE='#' -else - COND_ENCODER_POWERPC_TRUE='#' - COND_ENCODER_POWERPC_FALSE= -fi - - if test "x$enable_decoder_powerpc" = xyes; then - COND_DECODER_POWERPC_TRUE= - COND_DECODER_POWERPC_FALSE='#' -else - COND_DECODER_POWERPC_TRUE='#' - COND_DECODER_POWERPC_FALSE= -fi - - if test "x$enable_filter_ia64" = xyes; then - COND_FILTER_IA64_TRUE= - COND_FILTER_IA64_FALSE='#' -else - COND_FILTER_IA64_TRUE='#' - COND_FILTER_IA64_FALSE= -fi - - if test "x$enable_encoder_ia64" = xyes; then - COND_ENCODER_IA64_TRUE= - COND_ENCODER_IA64_FALSE='#' -else - COND_ENCODER_IA64_TRUE='#' - COND_ENCODER_IA64_FALSE= -fi - - if test "x$enable_decoder_ia64" = xyes; then - COND_DECODER_IA64_TRUE= - COND_DECODER_IA64_FALSE='#' -else - COND_DECODER_IA64_TRUE='#' - COND_DECODER_IA64_FALSE= -fi - - if test "x$enable_filter_arm" = xyes; then - COND_FILTER_ARM_TRUE= - COND_FILTER_ARM_FALSE='#' -else - COND_FILTER_ARM_TRUE='#' - COND_FILTER_ARM_FALSE= -fi - - if test "x$enable_encoder_arm" = xyes; then - COND_ENCODER_ARM_TRUE= - COND_ENCODER_ARM_FALSE='#' -else - COND_ENCODER_ARM_TRUE='#' - COND_ENCODER_ARM_FALSE= -fi - - if test "x$enable_decoder_arm" = xyes; then - COND_DECODER_ARM_TRUE= - COND_DECODER_ARM_FALSE='#' -else - COND_DECODER_ARM_TRUE='#' - COND_DECODER_ARM_FALSE= -fi - - if test "x$enable_filter_armthumb" = xyes; then - COND_FILTER_ARMTHUMB_TRUE= - COND_FILTER_ARMTHUMB_FALSE='#' -else - COND_FILTER_ARMTHUMB_TRUE='#' - COND_FILTER_ARMTHUMB_FALSE= -fi - - if test "x$enable_encoder_armthumb" = xyes; then - COND_ENCODER_ARMTHUMB_TRUE= - COND_ENCODER_ARMTHUMB_FALSE='#' -else - COND_ENCODER_ARMTHUMB_TRUE='#' - COND_ENCODER_ARMTHUMB_FALSE= -fi - - if test "x$enable_decoder_armthumb" = xyes; then - COND_DECODER_ARMTHUMB_TRUE= - COND_DECODER_ARMTHUMB_FALSE='#' -else - COND_DECODER_ARMTHUMB_TRUE='#' - COND_DECODER_ARMTHUMB_FALSE= -fi - - if test "x$enable_filter_sparc" = xyes; then - COND_FILTER_SPARC_TRUE= - COND_FILTER_SPARC_FALSE='#' -else - COND_FILTER_SPARC_TRUE='#' - COND_FILTER_SPARC_FALSE= -fi - - if test "x$enable_encoder_sparc" = xyes; then - COND_ENCODER_SPARC_TRUE= - COND_ENCODER_SPARC_FALSE='#' -else - COND_ENCODER_SPARC_TRUE='#' - COND_ENCODER_SPARC_FALSE= -fi - - if test "x$enable_decoder_sparc" = xyes; then - COND_DECODER_SPARC_TRUE= - COND_DECODER_SPARC_FALSE='#' -else - COND_DECODER_SPARC_TRUE='#' - COND_DECODER_SPARC_FALSE= -fi - - -# The so called "simple filters" share common code. -enable_filter_simple=no -enable_encoder_simple=no -enable_decoder_simple=no -test "x$enable_filter_x86" = xyes && enable_filter_simple=yes -test "x$enable_encoder_x86" = xyes && enable_encoder_simple=yes -test "x$enable_decoder_x86" = xyes && enable_decoder_simple=yes -test "x$enable_filter_powerpc" = xyes && enable_filter_simple=yes -test "x$enable_encoder_powerpc" = xyes && enable_encoder_simple=yes -test "x$enable_decoder_powerpc" = xyes && enable_decoder_simple=yes -test "x$enable_filter_ia64" = xyes && enable_filter_simple=yes -test "x$enable_encoder_ia64" = xyes && enable_encoder_simple=yes -test "x$enable_decoder_ia64" = xyes && enable_decoder_simple=yes -test "x$enable_filter_arm" = xyes && enable_filter_simple=yes -test "x$enable_encoder_arm" = xyes && enable_encoder_simple=yes -test "x$enable_decoder_arm" = xyes && enable_decoder_simple=yes -test "x$enable_filter_armthumb" = xyes && enable_filter_simple=yes -test "x$enable_encoder_armthumb" = xyes && enable_encoder_simple=yes -test "x$enable_decoder_armthumb" = xyes && enable_decoder_simple=yes -test "x$enable_filter_sparc" = xyes && enable_filter_simple=yes -test "x$enable_encoder_sparc" = xyes && enable_encoder_simple=yes -test "x$enable_decoder_sparc" = xyes && enable_decoder_simple=yes - if test "x$enable_filter_simple" = xyes; then - COND_FILTER_SIMPLE_TRUE= - COND_FILTER_SIMPLE_FALSE='#' -else - COND_FILTER_SIMPLE_TRUE='#' - COND_FILTER_SIMPLE_FALSE= -fi - - if test "x$enable_encoder_simple" = xyes; then - COND_ENCODER_SIMPLE_TRUE= - COND_ENCODER_SIMPLE_FALSE='#' -else - COND_ENCODER_SIMPLE_TRUE='#' - COND_ENCODER_SIMPLE_FALSE= -fi - - if test "x$enable_decoder_simple" = xyes; then - COND_DECODER_SIMPLE_TRUE= - COND_DECODER_SIMPLE_FALSE='#' -else - COND_DECODER_SIMPLE_TRUE='#' - COND_DECODER_SIMPLE_FALSE= -fi - - -# LZ-based filters share common code. -enable_filter_lz=no -enable_encoder_lz=no -enable_decoder_lz=no -test "x$enable_filter_lzma1" = xyes && enable_filter_lz=yes -test "x$enable_encoder_lzma1" = xyes && enable_encoder_lz=yes -test "x$enable_decoder_lzma1" = xyes && enable_decoder_lz=yes -test "x$enable_filter_lzma2" = xyes && enable_filter_lz=yes -test "x$enable_encoder_lzma2" = xyes && enable_encoder_lz=yes -test "x$enable_decoder_lzma2" = xyes && enable_decoder_lz=yes - if test "x$enable_filter_lz" = xyes; then - COND_FILTER_LZ_TRUE= - COND_FILTER_LZ_FALSE='#' -else - COND_FILTER_LZ_TRUE='#' - COND_FILTER_LZ_FALSE= -fi - - if test "x$enable_encoder_lz" = xyes; then - COND_ENCODER_LZ_TRUE= - COND_ENCODER_LZ_FALSE='#' -else - COND_ENCODER_LZ_TRUE='#' - COND_ENCODER_LZ_FALSE= -fi - - if test "x$enable_decoder_lz" = xyes; then - COND_DECODER_LZ_TRUE= - COND_DECODER_LZ_FALSE='#' -else - COND_DECODER_LZ_TRUE='#' - COND_DECODER_LZ_FALSE= -fi - - - -################# -# Match finders # -################# - - - -enable_match_finder_hc3=no -enable_match_finder_hc4=no -enable_match_finder_bt2=no -enable_match_finder_bt3=no -enable_match_finder_bt4=no - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which match finders to build" >&5 -$as_echo_n "checking which match finders to build... " >&6; } -# Check whether --enable-match-finders was given. -if test "${enable_match_finders+set}" = set; then : - enableval=$enable_match_finders; -else - enable_match_finders=hc3,hc4,bt2,bt3,bt4 -fi - -enable_match_finders=`echo "$enable_match_finders" | sed 's/,/ /g'` -if test "x$enable_encoder_lz" = xyes ; then - for arg in $enable_match_finders - do - case $arg in - hc3) - enable_match_finder_hc3=yes - -$as_echo "#define HAVE_MF_HC3 1" >>confdefs.h - - ;; - hc4) - enable_match_finder_hc4=yes - -$as_echo "#define HAVE_MF_HC4 1" >>confdefs.h - - ;; - bt2) - enable_match_finder_bt2=yes - -$as_echo "#define HAVE_MF_BT2 1" >>confdefs.h - - ;; - bt3) - enable_match_finder_bt3=yes - -$as_echo "#define HAVE_MF_BT3 1" >>confdefs.h - - ;; - bt4) - enable_match_finder_bt4=yes - -$as_echo "#define HAVE_MF_BT4 1" >>confdefs.h - - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - as_fn_error "unknown match finder: $arg" "$LINENO" 5 - ;; - esac - done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_match_finders" >&5 -$as_echo "$enable_match_finders" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none because not building any LZ-based encoder)" >&5 -$as_echo "(none because not building any LZ-based encoder)" >&6; } -fi - - -#################### -# Integrity checks # -#################### - - - -enable_check_lzma1=no -enable_check_lzma2=no -enable_check_subblock=no -enable_check_delta=no -enable_check_x86=no -enable_check_powerpc=no -enable_check_ia64=no -enable_check_arm=no -enable_check_armthumb=no -enable_check_sparc=no - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which integrity checks to build" >&5 -$as_echo_n "checking which integrity checks to build... " >&6; } -# Check whether --enable-checks was given. -if test "${enable_checks+set}" = set; then : - enableval=$enable_checks; -else - enable_checks=crc32,crc64,sha256 -fi - -enable_checks=`echo "$enable_checks" | sed 's/,/ /g'` -if test "x$enable_checks" = xno || test "x$enable_checks" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none)" >&5 -$as_echo "(none)" >&6; } -else - for arg in $enable_checks - do - case $arg in - crc32) - enable_check_crc32=yes - -$as_echo "#define HAVE_CHECK_CRC32 1" >>confdefs.h - - ;; - crc64) - enable_check_crc64=yes - -$as_echo "#define HAVE_CHECK_CRC64 1" >>confdefs.h - - ;; - sha256) - enable_check_sha256=yes - -$as_echo "#define HAVE_CHECK_SHA256 1" >>confdefs.h - - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - as_fn_error "unknown integrity check: $arg" "$LINENO" 5 - ;; - esac - done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_checks" >&5 -$as_echo "$enable_checks" >&6; } -fi -if test "x$enable_checks_crc32" = xno ; then - as_fn_error "For now, the CRC32 check must always be enabled." "$LINENO" 5 -fi - - if test "x$enable_check_crc32" = xyes; then - COND_CHECK_CRC32_TRUE= - COND_CHECK_CRC32_FALSE='#' -else - COND_CHECK_CRC32_TRUE='#' - COND_CHECK_CRC32_FALSE= -fi - - if test "x$enable_check_crc64" = xyes; then - COND_CHECK_CRC64_TRUE= - COND_CHECK_CRC64_FALSE='#' -else - COND_CHECK_CRC64_TRUE='#' - COND_CHECK_CRC64_FALSE= -fi - - if test "x$enable_check_sha256" = xyes; then - COND_CHECK_SHA256_TRUE= - COND_CHECK_SHA256_FALSE='#' -else - COND_CHECK_SHA256_TRUE='#' - COND_CHECK_SHA256_FALSE= -fi - - - -########################### -# Assembler optimizations # -########################### - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if assembler optimizations should be used" >&5 -$as_echo_n "checking if assembler optimizations should be used... " >&6; } -# Check whether --enable-assembler was given. -if test "${enable_assembler+set}" = set; then : - enableval=$enable_assembler; -else - enable_assembler=yes -fi - -if test "x$enable_assembler" = xyes; then - case $host_cpu in - i?86) enable_assembler=x86 ;; - x86_64) enable_assembler=x86_64 ;; - *) enable_assembler=no ;; - esac -fi -case $enable_assembler in - x86) - -$as_echo "#define HAVE_ASM_X86 1" >>confdefs.h - - ;; - x86_64) - -$as_echo "#define HAVE_ASM_X86_64 1" >>confdefs.h - - ;; - no) - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - as_fn_error "--enable-assembler accepts only \`yes', \`no', \`x86', or \`x86_64'." "$LINENO" 5 - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_assembler" >&5 -$as_echo "$enable_assembler" >&6; } - if test "x$enable_assembler" = xx86; then - COND_ASM_X86_TRUE= - COND_ASM_X86_FALSE='#' -else - COND_ASM_X86_TRUE='#' - COND_ASM_X86_FALSE= -fi - - if test "x$enable_assembler" = xx86_64; then - COND_ASM_X86_64_TRUE= - COND_ASM_X86_64_FALSE='#' -else - COND_ASM_X86_64_TRUE='#' - COND_ASM_X86_64_FALSE= -fi - - - -################################ -# Fast unaligned memory access # -################################ - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if unaligned memory access should be used" >&5 -$as_echo_n "checking if unaligned memory access should be used... " >&6; } -# Check whether --enable-unaligned-access was given. -if test "${enable_unaligned_access+set}" = set; then : - enableval=$enable_unaligned_access; -else - enable_unaligned_access=auto -fi - -if test "x$enable_unaligned_access" = xauto ; then - case $host_cpu in - i?86|x86_64|powerpc|powerpc64) - enable_unaligned_access=yes - ;; - *) - enable_unaligned_access=no - ;; - esac -fi -if test "x$enable_unaligned_access" = xyes ; then - -$as_echo "#define HAVE_FAST_UNALIGNED_ACCESS 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -##################### -# Size optimization # -##################### - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if small size is preferred over speed" >&5 -$as_echo_n "checking if small size is preferred over speed... " >&6; } -# Check whether --enable-small was given. -if test "${enable_small+set}" = set; then : - enableval=$enable_small; -else - enable_small=no -fi - -if test "x$enable_small" = xyes; then - -$as_echo "#define HAVE_SMALL 1" >>confdefs.h - -elif test "x$enable_small" != xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - as_fn_error "--enable-small accepts only \`yes' or \`no'" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_small" >&5 -$as_echo "$enable_small" >&6; } - if test "x$enable_small" = xyes; then - COND_SMALL_TRUE= - COND_SMALL_FALSE='#' -else - COND_SMALL_TRUE='#' - COND_SMALL_FALSE= -fi - - - -############# -# Threading # -############# - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if threading support is wanted" >&5 -$as_echo_n "checking if threading support is wanted... " >&6; } -# Check whether --enable-threads was given. -if test "${enable_threads+set}" = set; then : - enableval=$enable_threads; -else - enable_threads=yes -fi - -if test "x$enable_threads" != xyes && test "x$enable_threads" != xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - as_fn_error "--enable-threads accepts only \`yes' or \`no'" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_threads" >&5 -$as_echo "$enable_threads" >&6; } -# We use the actual result a little later. - - -############################################ -# xz/xzdec/lzmadec linkage against liblzma # -############################################ - -# Link the xz, xzdec, and lzmadec command line tools against static liblzma -# unless using --enable-dynamic. Using static liblzma gives a little bit -# faster executable on x86, because no register is wasted for PIC. We also -# have one dependency less, which allows users to more freely copy the xz -# binary to other boxes. However, I wouldn't be surprised if distro -# maintainers still prefer dynamic linking, so let's make it easy for them. - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how programs should be linked against liblzma" >&5 -$as_echo_n "checking how programs should be linked against liblzma... " >&6; } -# Check whether --enable-dynamic was given. -if test "${enable_dynamic+set}" = set; then : - enableval=$enable_dynamic; -else - enable_dynamic=mixed -fi - -case $enable_dynamic in - mixed) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: mixed (some dynamically, some statically)" >&5 -$as_echo "mixed (some dynamically, some statically)" >&6; } - ;; - yes) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: dynamically" >&5 -$as_echo "dynamically" >&6; } - ;; - no) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: statically" >&5 -$as_echo "statically" >&6; } - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - as_fn_error "--enable-dynamic accepts only \`mixed', \`yes', or \`no'" "$LINENO" 5 - ;; -esac -# We use the actual results later, because we don't know yet -# if --disable-shared or --disable-static was used. - - -############################################################################### -# Checks for programs. -############################################################################### - -echo - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a shell that conforms to POSIX" >&5 -$as_echo_n "checking for a shell that conforms to POSIX... " >&6; } -if test "${gl_cv_posix_shell+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - gl_test_posix_shell_script=' - func_return () { - (exit $1) - } - func_success () { - func_return 0 - } - func_failure () { - func_return 1 - } - func_ret_success () { - return 0 - } - func_ret_failure () { - return 1 - } - subshell_umask_sanity () { - (umask 22; (umask 0); test $(umask) -eq 22) - } - test "$(echo foo)" = foo && - func_success && - ! func_failure && - func_ret_success && - ! func_ret_failure && - (set x && func_ret_success y && test x = "$1") && - subshell_umask_sanity - ' - for gl_cv_posix_shell in \ - "$CONFIG_SHELL" "$SHELL" /bin/sh /bin/bash /bin/ksh /bin/sh5 no; do - case $gl_cv_posix_shell in - /*) - "$gl_cv_posix_shell" -c "$gl_test_posix_shell_script" 2>/dev/null \ - && break;; - esac - done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_posix_shell" >&5 -$as_echo "$gl_cv_posix_shell" >&6; } - - if test "$gl_cv_posix_shell" != no; then - POSIX_SHELL=$gl_cv_posix_shell - PREFERABLY_POSIX_SHELL=$POSIX_SHELL - else - POSIX_SHELL= - PREFERABLY_POSIX_SHELL=/bin/sh - fi - - - -if test -z "$POSIX_SHELL" ; then - as_fn_error "No POSIX conforming shell (sh) was found." "$LINENO" 5 -fi - -echo -echo "Initializing Automake:" - -am__api_version='1.11' - -# 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: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # 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 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. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -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=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -esac - -# 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 - - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -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;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# 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. -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. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - 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 - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - test -d ./--version && rmdir ./--version - MKDIR_P="$ac_install_sh -d" - fi -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. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='xz' - VERSION='4.999.9beta' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - - -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# 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 - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -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 -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "no acceptable C compiler found in \$PATH -See \`config.log' for more details." "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - rm -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -if test -z "$ac_file"; then : - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "C compiler cannot create executables -See \`config.log' for more details." "$LINENO" 5; }; } -fi -ac_exeext=$ac_cv_exeext - -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out -ac_clean_files=$ac_clean_files_save -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of object files: cannot compile -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* 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); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -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 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # 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'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > 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 - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # 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 - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # 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 - break - fi - ;; - msvisualcpp | msvcmsys) - # 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} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 -$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } -if test "${ac_cv_prog_cc_c99+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -#include - -// Check varargs macros. These examples are taken from C99 6.10.3.5. -#define debug(...) fprintf (stderr, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} - -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - your preprocessor is broken; -#endif -#if BIG_OK -#else - your preprocessor is broken; -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; - -struct incomplete_array -{ - int datasize; - double data[]; -}; - -struct named_init { - int number; - const wchar_t *name; - double average; -}; - -typedef const char *ccp; - -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\0'; ++i) - continue; - return 0; -} - -// Check varargs and va_copy. -static void -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); - - const char *str; - int number; - float fnumber; - - while (*format) - { - switch (*format++) - { - case 's': // string - str = va_arg (args_copy, const char *); - break; - case 'd': // int - number = va_arg (args_copy, int); - break; - case 'f': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); -} - -int -main () -{ - - // Check bool. - _Bool success = false; - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - test_varargs ("s, d' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' - || dynamic_array[ni.number - 1] != 543); - - ; - return 0; -} -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c99" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c99" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c99" != xno; then : - -fi - - -if test x$ac_cv_prog_cc_c99 = xno ; then - as_fn_error "No C99 compiler was found." "$LINENO" 5 -fi - -if test "x$CC" != xcc; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 -$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } -else - { $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; } -fi -set dummy $CC; ac_cc=`$as_echo "$2" | - sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; 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. -# We do the test twice because some compilers refuse to overwrite an -# existing .o file with -o, though they will create one. -ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' -rm -f conftest2.* -if { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && - test -f conftest2.$ac_objext && { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; -then - eval ac_cv_prog_cc_${ac_cc}_c_o=yes - if test "x$CC" != xcc; then - # Test first that cc exists at all. - if { ac_try='cc -c conftest.$ac_ext >&5' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' - rm -f conftest2.* - if { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && - test -f conftest2.$ac_objext && { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; - then - # cc works too. - : - else - # cc exists but doesn't like -o. - eval ac_cv_prog_cc_${ac_cc}_c_o=no - fi - fi - fi -else - eval ac_cv_prog_cc_${ac_cc}_c_o=no -fi -rm -f core conftest* - -fi -if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h - -fi - -# FIXME: we rely on the cache variable name because -# there is no other way. -set dummy $CC -am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o -if test "$am_t" != 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 - - -# By default we simply use the C compiler to build assembly code. - -test "${CCAS+set}" = set || CCAS=$CC -test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS - - - -depcc="$CCAS" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # 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'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CCAS_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > 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 - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # 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 - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # 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 - break - fi - ;; - msvisualcpp | msvcmsys) - # 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} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CCAS_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CCAS_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } -CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then - am__fastdepCCAS_TRUE= - am__fastdepCCAS_FALSE='#' -else - am__fastdepCCAS_TRUE='#' - am__fastdepCCAS_FALSE= -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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -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 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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 -# 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 -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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 -# 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 -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - - ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" -if test "x$ac_cv_header_minix_config_h" = x""yes; then : - MINIX=yes -else - MINIX= -fi - - - if test "$MINIX" = yes; then - -$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h - - -$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h - - -$as_echo "#define _MINIX 1" >>confdefs.h - - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 -$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } -if test "${ac_cv_safe_to_define___extensions__+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -# define __EXTENSIONS__ 1 - $ac_includes_default -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_safe_to_define___extensions__=yes -else - ac_cv_safe_to_define___extensions__=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 -$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } - test $ac_cv_safe_to_define___extensions__ = yes && - $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h - - $as_echo "#define _ALL_SOURCE 1" >>confdefs.h - - $as_echo "#define _GNU_SOURCE 1" >>confdefs.h - - $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h - - $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h - - - -if test "x$enable_threads" = xyes; then - echo - echo "Threading support:" - - - -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 - -acx_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 -$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_join (); -int -main () -{ -return pthread_join (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - acx_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 -$as_echo "$acx_pthread_ok" >&6; } - if test x"$acx_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# ... -mt is also the pthreads flag for HP/aCC -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case "${host_cpu}-${host_os}" in - *solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthreads/-mt/ - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" - ;; -esac - -if test x"$acx_pthread_ok" = xno; then -for flag in $acx_pthread_flags; do - - case $flag in - none) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 -$as_echo_n "checking whether pthreads work without any flags... " >&6; } - ;; - - -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 -$as_echo_n "checking whether pthreads work with $flag... " >&6; } - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - # Extract the first word of "pthread-config", so it can be a program name with args. -set dummy pthread-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_acx_pthread_config+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$acx_pthread_config"; then - ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_acx_pthread_config="yes" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" -fi -fi -acx_pthread_config=$ac_cv_prog_acx_pthread_config -if test -n "$acx_pthread_config"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5 -$as_echo "$acx_pthread_config" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test x"$acx_pthread_config" = xno; then continue; fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 -$as_echo_n "checking for the pthreads library -l$flag... " >&6; } - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - acx_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 -$as_echo "$acx_pthread_ok" >&6; } - if test "x$acx_pthread_ok" = xyes; then - break; - fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$acx_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 -$as_echo_n "checking for joinable pthread attribute... " >&6; } - attr_name=unknown - for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -int attr=$attr; return attr; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - attr_name=$attr; break -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 -$as_echo "$attr_name" >&6; } - if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then - -cat >>confdefs.h <<_ACEOF -#define PTHREAD_CREATE_JOINABLE $attr_name -_ACEOF - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 -$as_echo_n "checking if more special flags are required for pthreads... " >&6; } - flag=no - case "${host_cpu}-${host_os}" in - *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; - *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 -$as_echo "${flag}" >&6; } - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - # More AIX lossage: must compile with xlc_r or cc_r - if test x"$GCC" != xyes; then - for ac_prog in xlc_r cc_r -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PTHREAD_CC"; then - ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_PTHREAD_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PTHREAD_CC=$ac_cv_prog_PTHREAD_CC -if test -n "$PTHREAD_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 -$as_echo "$PTHREAD_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PTHREAD_CC" && break -done -test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" - - else - PTHREAD_CC=$CC - fi -else - PTHREAD_CC="$CC" -fi - - - - - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$acx_pthread_ok" = xyes; then - -$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h - - : -else - acx_pthread_ok=no - -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 - - - LIBS="$LIBS $PTHREAD_LIBS" - AM_CFLAGS="$AM_CFLAGS $PTHREAD_CFLAGS" - CC="$PTHREAD_CC" -fi - -echo -echo "Initializing Libtool:" - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.2.6' -macro_revision='1.3012' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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 -# 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 -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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 -# 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 -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test "${lt_cv_path_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$ac_tool_prefix"; then - for ac_prog in "dumpbin -symbols" "link -dump -symbols" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in "dumpbin -symbols" "link -dump -symbols" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if test "${lt_cv_nm_interface+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:7302: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:7305: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:7308: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - 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` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$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 - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru - - - - - - - - - - - -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. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - - - - - - - - - - - - - - - - - - - - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 8499 "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - 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 - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - 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 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if test "${lt_cv_apple_cc_single_mod+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - -# Set options -enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. -set dummy ${ac_tool_prefix}as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AS"; then - ac_cv_prog_AS="$AS" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_AS="${ac_tool_prefix}as" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AS=$ac_cv_prog_AS -if test -n "$AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 -$as_echo "$AS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AS"; then - ac_ct_AS=$AS - # Extract the first word of "as", so it can be a program name with args. -set dummy as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AS"; then - ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_ac_ct_AS="as" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AS=$ac_cv_prog_ac_ct_AS -if test -n "$ac_ct_AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 -$as_echo "$ac_ct_AS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AS" = x; then - AS="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AS=$ac_ct_AS - fi -else - AS="$ac_cv_prog_AS" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DLLTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - 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 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - - ;; -esac - -test -z "$AS" && AS=as - - - - - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - enable_dlopen=no - - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if test "${lt_cv_objdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - - - - - - - - - - - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -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 - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag=' -fno-builtin' - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:10059: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:10063: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl*) - # IBM XL C 8.0/Fortran 10.1 on PPC - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 -$as_echo "$lt_prog_compiler_pic" >&6; } - - - - - - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:10398: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:10402: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test "${lt_cv_prog_compiler_static_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:10503: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:10507: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:10558: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:10562: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld='-rpath $libdir' - archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - whole_archive_flag_spec='' - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo(void) {} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - archive_cmds_need_lc=no - else - archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 -$as_echo "$archive_cmds_need_lc" >&6; } - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - 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' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - 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 - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - 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 - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - 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' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - 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' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - 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 - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - 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=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - 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 - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - 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 - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line 12925 "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line 13021 "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -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 - -CC="$lt_save_CC" - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. -set dummy ${ac_tool_prefix}windres; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RC"; then - ac_cv_prog_RC="$RC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_RC="${ac_tool_prefix}windres" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RC=$ac_cv_prog_RC -if test -n "$RC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 -$as_echo "$RC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RC"; then - ac_ct_RC=$RC - # Extract the first word of "windres", so it can be a program name with args. -set dummy windres; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RC"; then - ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_prog_ac_ct_RC="windres" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RC=$ac_cv_prog_ac_ct_RC -if test -n "$ac_ct_RC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 -$as_echo "$ac_ct_RC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RC" = x; then - RC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RC=$ac_ct_RC - fi -else - RC="$ac_cv_prog_RC" -fi - - - - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -objext_RC=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -compiler=$CC -compiler_RC=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - -lt_cv_prog_compiler_c_o_RC=yes - -if test -n "$compiler"; then - : - - - -fi - -GCC=$lt_save_GCC -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 - -CC="$lt_save_CC" - - -# This is a bit wrong since it is possible to request that only some libs -# are built as shared. Using that feature isn't so common though, and this -# breaks only on Windows (at least for now) if the user enables only some -# libs as shared. - if test "x$enable_shared" != xno; then - COND_SHARED_TRUE= - COND_SHARED_FALSE='#' -else - COND_SHARED_TRUE='#' - COND_SHARED_FALSE= -fi - - - -############################################################################### -# Checks for libraries. -############################################################################### - -echo -echo "Initializing gettext:" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 -$as_echo_n "checking whether NLS is requested... " >&6; } - # Check whether --enable-nls was given. -if test "${enable_nls+set}" = set; then : - enableval=$enable_nls; USE_NLS=$enableval -else - USE_NLS=yes -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 -$as_echo "$USE_NLS" >&6; } - - - - - - -# Prepare PATH_SEPARATOR. -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Find out how to test for executable files. Don't use a zero-byte file, -# as systems may use methods other than mode bits to determine executability. -cat >conf$$.file <<_ASEOF -#! /bin/sh -exit 0 -_ASEOF -chmod +x conf$$.file -if test -x conf$$.file >/dev/null 2>&1; then - ac_executable_p="test -x" -else - ac_executable_p="test -f" -fi -rm -f conf$$.file - -# Extract the first word of "msgfmt", so it can be a program name with args. -set dummy msgfmt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MSGFMT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case "$MSGFMT" in - [\\/]* | ?:[\\/]*) - ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. - ;; - *) - ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$ac_save_IFS" - test -z "$ac_dir" && ac_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then - echo "$as_me: trying $ac_dir/$ac_word..." >&5 - if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && - (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then - ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" - break 2 - fi - fi - done - done - IFS="$ac_save_IFS" - test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" - ;; -esac -fi -MSGFMT="$ac_cv_path_MSGFMT" -if test "$MSGFMT" != ":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 -$as_echo "$MSGFMT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - # Extract the first word of "gmsgfmt", so it can be a program name with args. -set dummy gmsgfmt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_GMSGFMT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $GMSGFMT in - [\\/]* | ?:[\\/]*) - ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -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 - ac_cv_path_GMSGFMT="$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 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" - ;; -esac -fi -GMSGFMT=$ac_cv_path_GMSGFMT -if test -n "$GMSGFMT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 -$as_echo "$GMSGFMT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; - *) MSGFMT_015=$MSGFMT ;; - esac - - case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; - *) GMSGFMT_015=$GMSGFMT ;; - esac - - - -# Prepare PATH_SEPARATOR. -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Find out how to test for executable files. Don't use a zero-byte file, -# as systems may use methods other than mode bits to determine executability. -cat >conf$$.file <<_ASEOF -#! /bin/sh -exit 0 -_ASEOF -chmod +x conf$$.file -if test -x conf$$.file >/dev/null 2>&1; then - ac_executable_p="test -x" -else - ac_executable_p="test -f" -fi -rm -f conf$$.file - -# Extract the first word of "xgettext", so it can be a program name with args. -set dummy xgettext; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_XGETTEXT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case "$XGETTEXT" in - [\\/]* | ?:[\\/]*) - ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. - ;; - *) - ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$ac_save_IFS" - test -z "$ac_dir" && ac_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then - echo "$as_me: trying $ac_dir/$ac_word..." >&5 - if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && - (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then - ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" - break 2 - fi - fi - done - done - IFS="$ac_save_IFS" - test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" - ;; -esac -fi -XGETTEXT="$ac_cv_path_XGETTEXT" -if test "$XGETTEXT" != ":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 -$as_echo "$XGETTEXT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - rm -f messages.po - - case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; - *) XGETTEXT_015=$XGETTEXT ;; - esac - - - -# Prepare PATH_SEPARATOR. -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Find out how to test for executable files. Don't use a zero-byte file, -# as systems may use methods other than mode bits to determine executability. -cat >conf$$.file <<_ASEOF -#! /bin/sh -exit 0 -_ASEOF -chmod +x conf$$.file -if test -x conf$$.file >/dev/null 2>&1; then - ac_executable_p="test -x" -else - ac_executable_p="test -f" -fi -rm -f conf$$.file - -# Extract the first word of "msgmerge", so it can be a program name with args. -set dummy msgmerge; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MSGMERGE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case "$MSGMERGE" in - [\\/]* | ?:[\\/]*) - ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. - ;; - *) - ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$ac_save_IFS" - test -z "$ac_dir" && ac_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then - echo "$as_me: trying $ac_dir/$ac_word..." >&5 - if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then - ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" - break 2 - fi - fi - done - done - IFS="$ac_save_IFS" - test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" - ;; -esac -fi -MSGMERGE="$ac_cv_path_MSGMERGE" -if test "$MSGMERGE" != ":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 -$as_echo "$MSGMERGE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$localedir" || localedir='${datadir}/locale' - - - ac_config_commands="$ac_config_commands po-directories" - - - - if test "X$prefix" = "XNONE"; then - acl_final_prefix="$ac_default_prefix" - else - acl_final_prefix="$prefix" - fi - if test "X$exec_prefix" = "XNONE"; then - acl_final_exec_prefix='${prefix}' - else - acl_final_exec_prefix="$exec_prefix" - fi - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" - prefix="$acl_save_prefix" - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -# Prepare PATH_SEPARATOR. -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 -$as_echo_n "checking for ld used by GCC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | [A-Za-z]:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the path of ld - ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if test "${acl_cv_path_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - acl_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in - *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break ;; - *) - test "$with_gnu_ld" != yes && break ;; - esac - fi - done - IFS="$ac_save_ifs" -else - acl_cv_path_LD="$LD" # Let the user override the test with a path. -fi -fi - -LD="$acl_cv_path_LD" -if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${acl_cv_prog_gnu_ld+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU ld's only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$acl_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$acl_cv_prog_gnu_ld - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 -$as_echo_n "checking for shared library run path origin... " >&6; } -if test "${acl_cv_rpath+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ - ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh - . ./conftest.sh - rm -f ./conftest.sh - acl_cv_rpath=done - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 -$as_echo "$acl_cv_rpath" >&6; } - wl="$acl_cv_wl" - libext="$acl_cv_libext" - shlibext="$acl_cv_shlibext" - hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" - hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" - hardcode_direct="$acl_cv_hardcode_direct" - hardcode_minus_L="$acl_cv_hardcode_minus_L" - # Check whether --enable-rpath was given. -if test "${enable_rpath+set}" = set; then : - enableval=$enable_rpath; : -else - enable_rpath=yes -fi - - - - acl_libdirstem=lib - searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` - if test -n "$searchpath"; then - acl_save_IFS="${IFS= }"; IFS=":" - for searchdir in $searchpath; do - if test -d "$searchdir"; then - case "$searchdir" in - */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; - *) searchdir=`cd "$searchdir" && pwd` - case "$searchdir" in - */lib64 ) acl_libdirstem=lib64 ;; - esac ;; - esac - fi - done - IFS="$acl_save_IFS" - fi - - - - - - - - - use_additional=yes - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - -# Check whether --with-libiconv-prefix was given. -if test "${with_libiconv_prefix+set}" = set; then : - withval=$with_libiconv_prefix; - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - else - additional_includedir="$withval/include" - additional_libdir="$withval/$acl_libdirstem" - fi - fi - -fi - - LIBICONV= - LTLIBICONV= - INCICONV= - rpathdirs= - ltrpathdirs= - names_already_handled= - names_next_round='iconv ' - while test -n "$names_next_round"; do - names_this_round="$names_next_round" - names_next_round= - for name in $names_this_round; do - already_handled= - for n in $names_already_handled; do - if test "$n" = "$name"; then - already_handled=yes - break - fi - done - if test -z "$already_handled"; then - names_already_handled="$names_already_handled $name" - uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` - eval value=\"\$HAVE_LIB$uppername\" - if test -n "$value"; then - if test "$value" = yes; then - eval value=\"\$LIB$uppername\" - test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" - eval value=\"\$LTLIB$uppername\" - test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" - else - : - fi - else - found_dir= - found_la= - found_so= - found_a= - if test $use_additional = yes; then - if test -n "$shlibext" \ - && { test -f "$additional_libdir/lib$name.$shlibext" \ - || { test "$shlibext" = dll \ - && test -f "$additional_libdir/lib$name.dll.a"; }; }; then - found_dir="$additional_libdir" - if test -f "$additional_libdir/lib$name.$shlibext"; then - found_so="$additional_libdir/lib$name.$shlibext" - else - found_so="$additional_libdir/lib$name.dll.a" - fi - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" - fi - else - if test -f "$additional_libdir/lib$name.$libext"; then - found_dir="$additional_libdir" - found_a="$additional_libdir/lib$name.$libext" - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" - fi - fi - fi - fi - if test "X$found_dir" = "X"; then - for x in $LDFLAGS $LTLIBICONV; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - case "$x" in - -L*) - dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" \ - && { test -f "$dir/lib$name.$shlibext" \ - || { test "$shlibext" = dll \ - && test -f "$dir/lib$name.dll.a"; }; }; then - found_dir="$dir" - if test -f "$dir/lib$name.$shlibext"; then - found_so="$dir/lib$name.$shlibext" - else - found_so="$dir/lib$name.dll.a" - fi - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" - fi - else - if test -f "$dir/lib$name.$libext"; then - found_dir="$dir" - found_a="$dir/lib$name.$libext" - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" - fi - fi - fi - ;; - esac - if test "X$found_dir" != "X"; then - break - fi - done - fi - if test "X$found_dir" != "X"; then - LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" - if test "X$found_so" != "X"; then - if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then - LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" - else - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $found_dir" - fi - if test "$hardcode_direct" = yes; then - LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" - else - if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then - LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $found_dir" - fi - else - haveit= - for x in $LDFLAGS $LIBICONV; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-L$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" - fi - if test "$hardcode_minus_L" != no; then - LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" - else - LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" - fi - fi - fi - fi - else - if test "X$found_a" != "X"; then - LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" - else - LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" - fi - fi - additional_includedir= - case "$found_dir" in - */$acl_libdirstem | */$acl_libdirstem/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` - additional_includedir="$basedir/include" - ;; - esac - if test "X$additional_includedir" != "X"; then - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - for x in $CPPFLAGS $INCICONV; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" - fi - fi - fi - fi - fi - if test -n "$found_la"; then - save_libdir="$libdir" - case "$found_la" in - */* | *\\*) . "$found_la" ;; - *) . "./$found_la" ;; - esac - libdir="$save_libdir" - for dep in $dependency_libs; do - case "$dep" in - -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then - haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - haveit= - for x in $LDFLAGS $LIBICONV; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" - fi - fi - haveit= - for x in $LDFLAGS $LTLIBICONV; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" - fi - fi - fi - fi - ;; - -R*) - dir=`echo "X$dep" | sed -e 's/^X-R//'` - if test "$enable_rpath" != no; then - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $dir" - fi - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $dir" - fi - fi - ;; - -l*) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` - ;; - *.la) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` - ;; - *) - LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" - LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" - ;; - esac - done - fi - else - LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" - LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" - fi - fi - fi - done - done - if test "X$rpathdirs" != "X"; then - if test -n "$hardcode_libdir_separator"; then - alldirs= - for found_dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" - done - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" - else - for found_dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$found_dir" - eval flag=\"$hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" - done - fi - fi - if test "X$ltrpathdirs" != "X"; then - for found_dir in $ltrpathdirs; do - LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" - done - fi - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 -$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } -if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - gt_save_LIBS="$LIBS" - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -CFPreferencesCopyAppValue(NULL, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gt_cv_func_CFPreferencesCopyAppValue=yes -else - gt_cv_func_CFPreferencesCopyAppValue=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$gt_save_LIBS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 -$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } - if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then - -$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 -$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } -if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - gt_save_LIBS="$LIBS" - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -CFLocaleCopyCurrent(); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gt_cv_func_CFLocaleCopyCurrent=yes -else - gt_cv_func_CFLocaleCopyCurrent=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$gt_save_LIBS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 -$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } - if test $gt_cv_func_CFLocaleCopyCurrent = yes; then - -$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h - - fi - INTL_MACOSX_LIBS= - if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then - INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" - fi - - - - - - - LIBINTL= - LTLIBINTL= - POSUB= - - case " $gt_needs " in - *" need-formatstring-macros "*) gt_api_version=3 ;; - *" need-ngettext "*) gt_api_version=2 ;; - *) gt_api_version=1 ;; - esac - gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" - gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" - - if test "$USE_NLS" = "yes"; then - gt_use_preinstalled_gnugettext=no - - - if test $gt_api_version -ge 3; then - gt_revision_test_code=' -#ifndef __GNU_GETTEXT_SUPPORTED_REVISION -#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) -#endif -typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; -' - else - gt_revision_test_code= - fi - if test $gt_api_version -ge 2; then - gt_expression_test_code=' + * ngettext ("", "", 0)' - else - gt_expression_test_code= - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 -$as_echo_n "checking for GNU gettext in libc... " >&6; } -if { as_var=$gt_func_gnugettext_libc; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -$gt_revision_test_code -extern int _nl_msg_cat_cntr; -extern int *_nl_domain_bindings; -int -main () -{ -bindtextdomain ("", ""); -return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$gt_func_gnugettext_libc=yes" -else - eval "$gt_func_gnugettext_libc=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$gt_func_gnugettext_libc - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - - if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then - - - - - - am_save_CPPFLAGS="$CPPFLAGS" - - for element in $INCICONV; do - haveit= - for x in $CPPFLAGS; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X$element"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" - fi - done - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 -$as_echo_n "checking for iconv... " >&6; } -if test "${am_cv_func_iconv+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - am_cv_func_iconv="no, consider installing GNU libiconv" - am_cv_lib_iconv=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -int -main () -{ -iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - am_cv_func_iconv=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test "$am_cv_func_iconv" != yes; then - am_save_LIBS="$LIBS" - LIBS="$LIBS $LIBICONV" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -int -main () -{ -iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - am_cv_lib_iconv=yes - am_cv_func_iconv=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$am_save_LIBS" - fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 -$as_echo "$am_cv_func_iconv" >&6; } - if test "$am_cv_func_iconv" = yes; then - -$as_echo "#define HAVE_ICONV 1" >>confdefs.h - - fi - if test "$am_cv_lib_iconv" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 -$as_echo_n "checking how to link with libiconv... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 -$as_echo "$LIBICONV" >&6; } - else - CPPFLAGS="$am_save_CPPFLAGS" - LIBICONV= - LTLIBICONV= - fi - - - - - - - - use_additional=yes - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - -# Check whether --with-libintl-prefix was given. -if test "${with_libintl_prefix+set}" = set; then : - withval=$with_libintl_prefix; - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - else - additional_includedir="$withval/include" - additional_libdir="$withval/$acl_libdirstem" - fi - fi - -fi - - LIBINTL= - LTLIBINTL= - INCINTL= - rpathdirs= - ltrpathdirs= - names_already_handled= - names_next_round='intl ' - while test -n "$names_next_round"; do - names_this_round="$names_next_round" - names_next_round= - for name in $names_this_round; do - already_handled= - for n in $names_already_handled; do - if test "$n" = "$name"; then - already_handled=yes - break - fi - done - if test -z "$already_handled"; then - names_already_handled="$names_already_handled $name" - uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` - eval value=\"\$HAVE_LIB$uppername\" - if test -n "$value"; then - if test "$value" = yes; then - eval value=\"\$LIB$uppername\" - test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" - eval value=\"\$LTLIB$uppername\" - test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" - else - : - fi - else - found_dir= - found_la= - found_so= - found_a= - if test $use_additional = yes; then - if test -n "$shlibext" \ - && { test -f "$additional_libdir/lib$name.$shlibext" \ - || { test "$shlibext" = dll \ - && test -f "$additional_libdir/lib$name.dll.a"; }; }; then - found_dir="$additional_libdir" - if test -f "$additional_libdir/lib$name.$shlibext"; then - found_so="$additional_libdir/lib$name.$shlibext" - else - found_so="$additional_libdir/lib$name.dll.a" - fi - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" - fi - else - if test -f "$additional_libdir/lib$name.$libext"; then - found_dir="$additional_libdir" - found_a="$additional_libdir/lib$name.$libext" - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" - fi - fi - fi - fi - if test "X$found_dir" = "X"; then - for x in $LDFLAGS $LTLIBINTL; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - case "$x" in - -L*) - dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" \ - && { test -f "$dir/lib$name.$shlibext" \ - || { test "$shlibext" = dll \ - && test -f "$dir/lib$name.dll.a"; }; }; then - found_dir="$dir" - if test -f "$dir/lib$name.$shlibext"; then - found_so="$dir/lib$name.$shlibext" - else - found_so="$dir/lib$name.dll.a" - fi - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" - fi - else - if test -f "$dir/lib$name.$libext"; then - found_dir="$dir" - found_a="$dir/lib$name.$libext" - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" - fi - fi - fi - ;; - esac - if test "X$found_dir" != "X"; then - break - fi - done - fi - if test "X$found_dir" != "X"; then - LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" - if test "X$found_so" != "X"; then - if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then - LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" - else - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $found_dir" - fi - if test "$hardcode_direct" = yes; then - LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" - else - if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then - LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $found_dir" - fi - else - haveit= - for x in $LDFLAGS $LIBINTL; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-L$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" - fi - if test "$hardcode_minus_L" != no; then - LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" - else - LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" - fi - fi - fi - fi - else - if test "X$found_a" != "X"; then - LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" - else - LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" - fi - fi - additional_includedir= - case "$found_dir" in - */$acl_libdirstem | */$acl_libdirstem/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` - additional_includedir="$basedir/include" - ;; - esac - if test "X$additional_includedir" != "X"; then - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - for x in $CPPFLAGS $INCINTL; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" - fi - fi - fi - fi - fi - if test -n "$found_la"; then - save_libdir="$libdir" - case "$found_la" in - */* | *\\*) . "$found_la" ;; - *) . "./$found_la" ;; - esac - libdir="$save_libdir" - for dep in $dependency_libs; do - case "$dep" in - -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then - haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - haveit= - for x in $LDFLAGS $LIBINTL; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" - fi - fi - haveit= - for x in $LDFLAGS $LTLIBINTL; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" - fi - fi - fi - fi - ;; - -R*) - dir=`echo "X$dep" | sed -e 's/^X-R//'` - if test "$enable_rpath" != no; then - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $dir" - fi - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $dir" - fi - fi - ;; - -l*) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` - ;; - *.la) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` - ;; - *) - LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" - LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" - ;; - esac - done - fi - else - LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" - LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" - fi - fi - fi - done - done - if test "X$rpathdirs" != "X"; then - if test -n "$hardcode_libdir_separator"; then - alldirs= - for found_dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" - done - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" - else - for found_dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$found_dir" - eval flag=\"$hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" - done - fi - fi - if test "X$ltrpathdirs" != "X"; then - for found_dir in $ltrpathdirs; do - LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" - done - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 -$as_echo_n "checking for GNU gettext in libintl... " >&6; } -if { as_var=$gt_func_gnugettext_libintl; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - gt_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $INCINTL" - gt_save_LIBS="$LIBS" - LIBS="$LIBS $LIBINTL" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -$gt_revision_test_code -extern int _nl_msg_cat_cntr; -extern -#ifdef __cplusplus -"C" -#endif -const char *_nl_expand_alias (const char *); -int -main () -{ -bindtextdomain ("", ""); -return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$gt_func_gnugettext_libintl=yes" -else - eval "$gt_func_gnugettext_libintl=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then - LIBS="$LIBS $LIBICONV" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -$gt_revision_test_code -extern int _nl_msg_cat_cntr; -extern -#ifdef __cplusplus -"C" -#endif -const char *_nl_expand_alias (const char *); -int -main () -{ -bindtextdomain ("", ""); -return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - LIBINTL="$LIBINTL $LIBICONV" - LTLIBINTL="$LTLIBINTL $LTLIBICONV" - eval "$gt_func_gnugettext_libintl=yes" - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - fi - CPPFLAGS="$gt_save_CPPFLAGS" - LIBS="$gt_save_LIBS" -fi -eval ac_res=\$$gt_func_gnugettext_libintl - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - fi - - if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ - || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ - && test "$PACKAGE" != gettext-runtime \ - && test "$PACKAGE" != gettext-tools; }; then - gt_use_preinstalled_gnugettext=yes - else - LIBINTL= - LTLIBINTL= - INCINTL= - fi - - - - if test -n "$INTL_MACOSX_LIBS"; then - if test "$gt_use_preinstalled_gnugettext" = "yes" \ - || test "$nls_cv_use_gnu_gettext" = "yes"; then - LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" - LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" - fi - fi - - if test "$gt_use_preinstalled_gnugettext" = "yes" \ - || test "$nls_cv_use_gnu_gettext" = "yes"; then - -$as_echo "#define ENABLE_NLS 1" >>confdefs.h - - else - USE_NLS=no - fi - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 -$as_echo_n "checking whether to use NLS... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 -$as_echo "$USE_NLS" >&6; } - if test "$USE_NLS" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 -$as_echo_n "checking where the gettext function comes from... " >&6; } - if test "$gt_use_preinstalled_gnugettext" = "yes"; then - if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then - gt_source="external libintl" - else - gt_source="libc" - fi - else - gt_source="included intl directory" - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 -$as_echo "$gt_source" >&6; } - fi - - if test "$USE_NLS" = "yes"; then - - if test "$gt_use_preinstalled_gnugettext" = "yes"; then - if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 -$as_echo_n "checking how to link with libintl... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 -$as_echo "$LIBINTL" >&6; } - - for element in $INCINTL; do - haveit= - for x in $CPPFLAGS; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X$element"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" - fi - done - - fi - - -$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h - - -$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h - - fi - - POSUB=po - fi - - - - INTLLIBS="$LIBINTL" - - - - - - - -############################################################################### -# Checks for header files. -############################################################################### - -echo -echo "System headers and functions:" - -# There is currently no workarounds in this package if some of -# these headers are missing. -for ac_header in fcntl.h limits.h sys/time.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -else - as_fn_error "Required header file(s) are missing." "$LINENO" 5 -fi - -done - - -# If any of these headers are missing, things should still work correctly: -for ac_header in sys/param.h sys/sysctl.h byteswap.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " -#ifdef HAVE_SYS_PARAM_H -# include -#endif - -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -# Even if we have byteswap.h, we may lack the specific macros/functions. -if test x$ac_cv_header_byteswap_h = xyes ; then - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if bswap_16 is available" >&5 -$as_echo_n "checking if bswap_16 is available... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -int -main(void) -{ - bswap_16(42); - return 0; -} - -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - -$as_echo "#define HAVE_BSWAP_16 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if bswap_32 is available" >&5 -$as_echo_n "checking if bswap_32 is available... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -int -main(void) -{ - bswap_32(42); - return 0; -} - -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - -$as_echo "#define HAVE_BSWAP_32 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if bswap_64 is available" >&5 -$as_echo_n "checking if bswap_64 is available... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -int -main(void) -{ - bswap_64(42); - return 0; -} - -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - -$as_echo "#define HAVE_BSWAP_64 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - fi - - -############################################################################### -# Checks for typedefs, structures, and compiler characteristics. -############################################################################### - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } -if test "${ac_cv_header_stdbool_h+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#ifndef bool - "error: bool is not defined" -#endif -#ifndef false - "error: false is not defined" -#endif -#if false - "error: false is not 0" -#endif -#ifndef true - "error: true is not defined" -#endif -#if true != 1 - "error: true is not 1" -#endif -#ifndef __bool_true_false_are_defined - "error: __bool_true_false_are_defined is not defined" -#endif - - struct s { _Bool s: 1; _Bool t; } s; - - char a[true == 1 ? 1 : -1]; - char b[false == 0 ? 1 : -1]; - char c[__bool_true_false_are_defined == 1 ? 1 : -1]; - char d[(bool) 0.5 == true ? 1 : -1]; - bool e = &s; - char f[(_Bool) 0.0 == false ? 1 : -1]; - char g[true]; - char h[sizeof (_Bool)]; - char i[sizeof s.t]; - enum { j = false, k = true, l = false * true, m = true * 256 }; - /* The following fails for - HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - _Bool n[m]; - char o[sizeof n == m * sizeof n[0] ? 1 : -1]; - char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; -# if defined __xlc__ || defined __GNUC__ - /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 - reported by James Lemley on 2005-10-05; see - http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html - This test is not quite right, since xlc is allowed to - reject this program, as the initializer for xlcbug is - not one of the forms that C requires support for. - However, doing the test right would require a runtime - test, and that would make cross-compilation harder. - Let us hope that IBM fixes the xlc bug, and also adds - support for this kind of constant expression. In the - meantime, this test will reject xlc, which is OK, since - our stdbool.h substitute should suffice. We also test - this with GCC, where it should work, to detect more - quickly whether someone messes up the test in the - future. */ - char digs[] = "0123456789"; - int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); -# endif - /* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - */ - _Bool q = true; - _Bool *pq = &q; - -int -main () -{ - - *pq |= q; - *pq |= ! q; - /* Refer to every declared value, to avoid compiler optimizations. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l - + !m + !n + !o + !p + !q + !pq); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdbool_h=yes -else - ac_cv_header_stdbool_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -$as_echo "$ac_cv_header_stdbool_h" >&6; } -ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" -if test "x$ac_cv_type__Bool" = x""yes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE__BOOL 1 -_ACEOF - - -fi - -if test $ac_cv_header_stdbool_h = yes; then - -$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h - -fi - - -ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" -case $ac_cv_c_uint8_t in #( - no|yes) ;; #( - *) - -$as_echo "#define _UINT8_T 1" >>confdefs.h - - -cat >>confdefs.h <<_ACEOF -#define uint8_t $ac_cv_c_uint8_t -_ACEOF -;; - esac - -ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" -case $ac_cv_c_uint16_t in #( - no|yes) ;; #( - *) - - -cat >>confdefs.h <<_ACEOF -#define uint16_t $ac_cv_c_uint16_t -_ACEOF -;; - esac - -ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" -case $ac_cv_c_int32_t in #( - no|yes) ;; #( - *) - -cat >>confdefs.h <<_ACEOF -#define int32_t $ac_cv_c_int32_t -_ACEOF -;; -esac - -ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" -case $ac_cv_c_uint32_t in #( - no|yes) ;; #( - *) - -$as_echo "#define _UINT32_T 1" >>confdefs.h - - -cat >>confdefs.h <<_ACEOF -#define uint32_t $ac_cv_c_uint32_t -_ACEOF -;; - esac - -ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" -case $ac_cv_c_int64_t in #( - no|yes) ;; #( - *) - -cat >>confdefs.h <<_ACEOF -#define int64_t $ac_cv_c_int64_t -_ACEOF -;; -esac - -ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" -case $ac_cv_c_uint64_t in #( - no|yes) ;; #( - *) - -$as_echo "#define _UINT64_T 1" >>confdefs.h - - -cat >>confdefs.h <<_ACEOF -#define uint64_t $ac_cv_c_uint64_t -_ACEOF -;; - esac - - - ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default" -if test "x$ac_cv_type_uintptr_t" = x""yes; then : - -$as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h - -else - for ac_type in 'unsigned int' 'unsigned long int' \ - 'unsigned long long int'; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -cat >>confdefs.h <<_ACEOF -#define uintptr_t $ac_type -_ACEOF - - ac_type= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - test -z "$ac_type" && break - done -fi - - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 -$as_echo_n "checking size of size_t... " >&6; } -if test "${ac_cv_sizeof_size_t+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_size_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "cannot compute sizeof (size_t) -See \`config.log' for more details." "$LINENO" 5; }; } - else - ac_cv_sizeof_size_t=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 -$as_echo "$ac_cv_sizeof_size_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t -_ACEOF - - - -# The command line tool can copy high resolution timestamps if such -# information is availabe in struct stat. Otherwise one second accuracy -# is used. -ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_struct_stat_st_atim_tv_nsec" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = x""yes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 -_ACEOF - - -fi -ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = x""yes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1 -_ACEOF - - -fi -ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_atimensec" = x""yes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1 -_ACEOF - - -fi -ac_fn_c_check_member "$LINENO" "struct stat" "st_uatime" "ac_cv_member_struct_stat_st_uatime" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_uatime" = x""yes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_UATIME 1 -_ACEOF - - -fi -ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = x""yes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1 -_ACEOF - - -fi - - -# Check whether --enable-largefile was given. -if test "${enable_largefile+set}" = set; then : - enableval=$enable_largefile; -fi - -if test "$enable_largefile" != no; then - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -$as_echo_n "checking for special C compiler options needed for large files... " >&6; } -if test "${ac_cv_sys_largefile_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF - if ac_fn_c_try_compile "$LINENO"; then : - break -fi -rm -f core conftest.err conftest.$ac_objext - CC="$CC -n32" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_largefile_CC=' -n32'; break -fi -rm -f core conftest.err conftest.$ac_objext - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -$as_echo "$ac_cv_sys_largefile_CC" >&6; } - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if test "${ac_cv_sys_file_offset_bits+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=64; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_file_offset_bits=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -$as_echo "$ac_cv_sys_file_offset_bits" >&6; } -case $ac_cv_sys_file_offset_bits in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits -_ACEOF -;; -esac -rm -rf conftest* - if test $ac_cv_sys_file_offset_bits = unknown; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } -if test "${ac_cv_sys_large_files+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _LARGE_FILES 1 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=1; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_large_files=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -$as_echo "$ac_cv_sys_large_files" >&6; } -case $ac_cv_sys_large_files in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _LARGE_FILES $ac_cv_sys_large_files -_ACEOF -;; -esac -rm -rf conftest* - fi -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; - -int -main () -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h -;; #( - no) - ;; #( - universal) - -$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h - - ;; #( - *) - as_fn_error "unknown endianness - presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; - esac - - - -############################################################################### -# Checks for library functions. -############################################################################### - -# Gnulib replacements as needed - - if test -z "$GETOPT_H"; then - for ac_header in getopt.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" -if test "x$ac_cv_header_getopt_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GETOPT_H 1 -_ACEOF - -else - GETOPT_H=getopt.h -fi - -done - - fi - - if test -z "$GETOPT_H"; then - for ac_func in getopt_long -do : - ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long" -if test "x$ac_cv_func_getopt_long" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GETOPT_LONG 1 -_ACEOF - -else - GETOPT_H=getopt.h -fi -done - - fi - - if test -z "$GETOPT_H"; then - ac_fn_c_check_decl "$LINENO" "optreset" "ac_cv_have_decl_optreset" "#include -" -if test "x$ac_cv_have_decl_optreset" = x""yes; then : - -$as_echo "#define HAVE_OPTRESET 1" >>confdefs.h - -fi - - fi - - - - - if test -n "$GETOPT_H"; then : - - case " $LIBOBJS " in - *" getopt.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS getopt.$ac_objext" - ;; -esac - - case " $LIBOBJS " in - *" getopt1.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS getopt1.$ac_objext" - ;; -esac - - - GETOPT_H=getopt.h - -$as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h - - - - -fi - - -# Find the best function to set timestamps. -for ac_func in futimens futimes futimesat utimes utime -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - break -fi -done - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to detect the amount of physical memory" >&5 -$as_echo_n "checking how to detect the amount of physical memory... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -int -main(void) -{ - long i; - i = sysconf(_SC_PAGESIZE); - i = sysconf(_SC_PHYS_PAGES); - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - -$as_echo "#define HAVE_PHYSMEM_SYSCONF 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: sysconf" >&5 -$as_echo "sysconf" >&6; } - -else - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#ifdef HAVE_SYS_PARAM_H -# include -#endif -#include -int -main(void) -{ - int name[2] = { CTL_HW, HW_PHYSMEM }; - unsigned long mem; - size_t mem_ptr_size = sizeof(mem); - sysctl(name, 2, &mem, &mem_ptr_size, NULL, NULL); - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - -$as_echo "#define HAVE_PHYSMEM_SYSCTL 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: sysctl" >&5 -$as_echo "sysctl" >&6; } - -else - -case $host_os in - linux*) - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -int -main(void) -{ - struct sysinfo si; - sysinfo(&si); - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - -$as_echo "#define HAVE_PHYSMEM_SYSINFO 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: sysinfo" >&5 -$as_echo "sysinfo" >&6; } - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 -$as_echo "unknown" >&6; } - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 -$as_echo "unknown" >&6; } - ;; -esac - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to detect the number of available CPU cores" >&5 -$as_echo_n "checking how to detect the number of available CPU cores... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -int -main(void) -{ - long i; - i = sysconf(_SC_NPROCESSORS_ONLN); - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - -$as_echo "#define HAVE_CPUCORES_SYSCONF 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: sysconf" >&5 -$as_echo "sysconf" >&6; } - -else - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#ifdef HAVE_SYS_PARAM_H -# include -#endif -#include -int -main(void) -{ - int name[2] = { CTL_HW, HW_NCPU }; - int cpus; - size_t cpus_size = sizeof(cpus); - sysctl(name, 2, &cpus, &cpus_size, NULL, NULL); - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - -$as_echo "#define HAVE_CPUCORES_SYSCTL 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: sysctl" >&5 -$as_echo "sysctl" >&6; } - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 -$as_echo "unknown" >&6; } - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - - -############################################################################### -# If using GCC, set some additional AM_CFLAGS: -############################################################################### - -if test "$GCC" = yes ; then - echo - echo "GCC extensions:" -fi - -# Always do the visibility check but don't set AM_CFLAGS on Windows. -# This way things get set properly even on Windows. - - - CFLAG_VISIBILITY= - HAVE_VISIBILITY=0 - if test -n "$GCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 -$as_echo_n "checking for simple visibility declarations... " >&6; } - if test "${gl_cv_cc_visibility+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fvisibility=hidden" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -extern __attribute__((__visibility__("hidden"))) int hiddenvar; - extern __attribute__((__visibility__("default"))) int exportedvar; - extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); - extern __attribute__((__visibility__("default"))) int exportedfunc (void); -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_cc_visibility=yes -else - gl_cv_cc_visibility=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$gl_save_CFLAGS" -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 -$as_echo "$gl_cv_cc_visibility" >&6; } - if test $gl_cv_cc_visibility = yes; then - CFLAG_VISIBILITY="-fvisibility=hidden" - HAVE_VISIBILITY=1 - fi - fi - - - -cat >>confdefs.h <<_ACEOF -#define HAVE_VISIBILITY $HAVE_VISIBILITY -_ACEOF - - -if test -n "$CFLAG_VISIBILITY" && test "$is_w32" = no; then - AM_CFLAGS="$AM_CFLAGS $CFLAG_VISIBILITY" -fi - -if test "$GCC" = yes ; then - # Enable as much warnings as possible. These commented warnings won't - # work for this package though: - # * -Wunreachable-code breaks several assert(0) cases, which are - # backed up with "return LZMA_PROG_ERROR". - # * -Wcast-qual would break various things where we need a non-const - # pointer although we don't modify anything through it. - # * -Wcast-align breaks optimized CRC32 and CRC64 implementation - # on some architectures (not on x86), where this warning is bogus, - # because we take care of correct alignment. - # * -Winline, -Wdisabled-optimization, -Wunsafe-loop-optimizations - # don't seem so useful here; at least the last one gives some - # warnings which are not bugs. - for NEW_FLAG in \ - -Wall \ - -Wextra \ - -Wformat=2 \ - -Winit-self \ - -Wmissing-include-dirs \ - -Wstrict-aliasing \ - -Wfloat-equal \ - -Wundef \ - -Wshadow \ - -Wpointer-arith \ - -Wbad-function-cast \ - -Wwrite-strings \ - -Wlogical-op \ - -Waggregate-return \ - -Wstrict-prototypes \ - -Wold-style-definition \ - -Wmissing-prototypes \ - -Wmissing-declarations \ - -Wmissing-noreturn \ - -Wredundant-decls - do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC accepts $NEW_FLAG" >&5 -$as_echo_n "checking if $CC accepts $NEW_FLAG... " >&6; } - OLD_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $NEW_FLAG" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -void foo(void) { } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - AM_CFLAGS="$AM_CFLAGS $NEW_FLAG" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$OLD_CFLAGS" - done - - # Check whether --enable-werror was given. -if test "${enable_werror+set}" = set; then : - enableval=$enable_werror; -else - enable_werror=no -fi - - if test "x$enable_werror" = "xyes"; then - AM_CFLAGS="$AM_CFLAGS -Werror" - fi -fi - - -############################################################################### -# Create the makefiles and config.h -############################################################################### - -echo - -# Don't build the lib directory at all if we don't need any replacement -# functions. - if test -n "$LIBOBJS"; then - COND_GNULIB_TRUE= - COND_GNULIB_FALSE='#' -else - COND_GNULIB_TRUE='#' - COND_GNULIB_FALSE= -fi - - -# Add default AM_CFLAGS. - - -# Set additional flags for static/dynamic linking. The idea is that every -# program (not library) being built will use either STATIC_{CPPFLAGS,LDFLAGS} -# or DYNAMIC_{CPPFLAGS,LDFLAGS} depending on which type of linkage is -# preferred. These preferences get overriden by use of --disable-static, -# --disable-shared, or --enable-dynamic. -# -# This is quite messy, because we want to use LZMA_API_STATIC when linking -# against static liblzma. It's needed on Windows. -if test "x$enable_static" = xno; then - enable_dynamic=yes -fi -if test "x$enable_shared" = xno; then - enable_dynamic=no -fi -case $enable_dynamic in - yes) - STATIC_CPPFLAGS= - STATIC_LDFLAGS= - DYNAMIC_CPPFLAGS= - DYNAMIC_LDFLAGS= - ;; - mixed) - STATIC_CPPFLAGS="-DLZMA_API_STATIC" - STATIC_LDFLAGS="-static" - DYNAMIC_CPPFLAGS= - DYNAMIC_LDFLAGS= - ;; - no) - STATIC_CPPFLAGS="-DLZMA_API_STATIC" - STATIC_LDFLAGS="-static" - DYNAMIC_CPPFLAGS="-DLZMA_API_STATIC" - DYNAMIC_LDFLAGS="-static" - ;; -esac - - - - - -# This is needed for src/scripts. -xz=`echo xz | sed "$program_transform_name"` - - -ac_config_files="$ac_config_files Doxyfile Makefile po/Makefile.in lib/Makefile src/Makefile src/liblzma/liblzma.pc src/liblzma/Makefile src/liblzma/api/Makefile src/xz/Makefile src/xzdec/Makefile src/lzmainfo/Makefile src/scripts/Makefile src/scripts/xzdiff src/scripts/xzgrep src/scripts/xzmore src/scripts/xzless tests/Makefile debug/Makefile" - - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - -if test -z "${COND_W32_TRUE}" && test -z "${COND_W32_FALSE}"; then - as_fn_error "conditional \"COND_W32\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_MAIN_ENCODER_TRUE}" && test -z "${COND_MAIN_ENCODER_FALSE}"; then - as_fn_error "conditional \"COND_MAIN_ENCODER\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_MAIN_DECODER_TRUE}" && test -z "${COND_MAIN_DECODER_FALSE}"; then - as_fn_error "conditional \"COND_MAIN_DECODER\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_FILTER_LZMA1_TRUE}" && test -z "${COND_FILTER_LZMA1_FALSE}"; then - as_fn_error "conditional \"COND_FILTER_LZMA1\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_ENCODER_LZMA1_TRUE}" && test -z "${COND_ENCODER_LZMA1_FALSE}"; then - as_fn_error "conditional \"COND_ENCODER_LZMA1\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_DECODER_LZMA1_TRUE}" && test -z "${COND_DECODER_LZMA1_FALSE}"; then - as_fn_error "conditional \"COND_DECODER_LZMA1\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_FILTER_LZMA2_TRUE}" && test -z "${COND_FILTER_LZMA2_FALSE}"; then - as_fn_error "conditional \"COND_FILTER_LZMA2\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_ENCODER_LZMA2_TRUE}" && test -z "${COND_ENCODER_LZMA2_FALSE}"; then - as_fn_error "conditional \"COND_ENCODER_LZMA2\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_DECODER_LZMA2_TRUE}" && test -z "${COND_DECODER_LZMA2_FALSE}"; then - as_fn_error "conditional \"COND_DECODER_LZMA2\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_FILTER_SUBBLOCK_TRUE}" && test -z "${COND_FILTER_SUBBLOCK_FALSE}"; then - as_fn_error "conditional \"COND_FILTER_SUBBLOCK\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_ENCODER_SUBBLOCK_TRUE}" && test -z "${COND_ENCODER_SUBBLOCK_FALSE}"; then - as_fn_error "conditional \"COND_ENCODER_SUBBLOCK\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_DECODER_SUBBLOCK_TRUE}" && test -z "${COND_DECODER_SUBBLOCK_FALSE}"; then - as_fn_error "conditional \"COND_DECODER_SUBBLOCK\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_FILTER_DELTA_TRUE}" && test -z "${COND_FILTER_DELTA_FALSE}"; then - as_fn_error "conditional \"COND_FILTER_DELTA\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_ENCODER_DELTA_TRUE}" && test -z "${COND_ENCODER_DELTA_FALSE}"; then - as_fn_error "conditional \"COND_ENCODER_DELTA\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_DECODER_DELTA_TRUE}" && test -z "${COND_DECODER_DELTA_FALSE}"; then - as_fn_error "conditional \"COND_DECODER_DELTA\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_FILTER_X86_TRUE}" && test -z "${COND_FILTER_X86_FALSE}"; then - as_fn_error "conditional \"COND_FILTER_X86\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_ENCODER_X86_TRUE}" && test -z "${COND_ENCODER_X86_FALSE}"; then - as_fn_error "conditional \"COND_ENCODER_X86\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_DECODER_X86_TRUE}" && test -z "${COND_DECODER_X86_FALSE}"; then - as_fn_error "conditional \"COND_DECODER_X86\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_FILTER_POWERPC_TRUE}" && test -z "${COND_FILTER_POWERPC_FALSE}"; then - as_fn_error "conditional \"COND_FILTER_POWERPC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_ENCODER_POWERPC_TRUE}" && test -z "${COND_ENCODER_POWERPC_FALSE}"; then - as_fn_error "conditional \"COND_ENCODER_POWERPC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_DECODER_POWERPC_TRUE}" && test -z "${COND_DECODER_POWERPC_FALSE}"; then - as_fn_error "conditional \"COND_DECODER_POWERPC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_FILTER_IA64_TRUE}" && test -z "${COND_FILTER_IA64_FALSE}"; then - as_fn_error "conditional \"COND_FILTER_IA64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_ENCODER_IA64_TRUE}" && test -z "${COND_ENCODER_IA64_FALSE}"; then - as_fn_error "conditional \"COND_ENCODER_IA64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_DECODER_IA64_TRUE}" && test -z "${COND_DECODER_IA64_FALSE}"; then - as_fn_error "conditional \"COND_DECODER_IA64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_FILTER_ARM_TRUE}" && test -z "${COND_FILTER_ARM_FALSE}"; then - as_fn_error "conditional \"COND_FILTER_ARM\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_ENCODER_ARM_TRUE}" && test -z "${COND_ENCODER_ARM_FALSE}"; then - as_fn_error "conditional \"COND_ENCODER_ARM\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_DECODER_ARM_TRUE}" && test -z "${COND_DECODER_ARM_FALSE}"; then - as_fn_error "conditional \"COND_DECODER_ARM\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_FILTER_ARMTHUMB_TRUE}" && test -z "${COND_FILTER_ARMTHUMB_FALSE}"; then - as_fn_error "conditional \"COND_FILTER_ARMTHUMB\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_ENCODER_ARMTHUMB_TRUE}" && test -z "${COND_ENCODER_ARMTHUMB_FALSE}"; then - as_fn_error "conditional \"COND_ENCODER_ARMTHUMB\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_DECODER_ARMTHUMB_TRUE}" && test -z "${COND_DECODER_ARMTHUMB_FALSE}"; then - as_fn_error "conditional \"COND_DECODER_ARMTHUMB\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_FILTER_SPARC_TRUE}" && test -z "${COND_FILTER_SPARC_FALSE}"; then - as_fn_error "conditional \"COND_FILTER_SPARC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_ENCODER_SPARC_TRUE}" && test -z "${COND_ENCODER_SPARC_FALSE}"; then - as_fn_error "conditional \"COND_ENCODER_SPARC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_DECODER_SPARC_TRUE}" && test -z "${COND_DECODER_SPARC_FALSE}"; then - as_fn_error "conditional \"COND_DECODER_SPARC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_FILTER_SIMPLE_TRUE}" && test -z "${COND_FILTER_SIMPLE_FALSE}"; then - as_fn_error "conditional \"COND_FILTER_SIMPLE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_ENCODER_SIMPLE_TRUE}" && test -z "${COND_ENCODER_SIMPLE_FALSE}"; then - as_fn_error "conditional \"COND_ENCODER_SIMPLE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_DECODER_SIMPLE_TRUE}" && test -z "${COND_DECODER_SIMPLE_FALSE}"; then - as_fn_error "conditional \"COND_DECODER_SIMPLE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_FILTER_LZ_TRUE}" && test -z "${COND_FILTER_LZ_FALSE}"; then - as_fn_error "conditional \"COND_FILTER_LZ\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_ENCODER_LZ_TRUE}" && test -z "${COND_ENCODER_LZ_FALSE}"; then - as_fn_error "conditional \"COND_ENCODER_LZ\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_DECODER_LZ_TRUE}" && test -z "${COND_DECODER_LZ_FALSE}"; then - as_fn_error "conditional \"COND_DECODER_LZ\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_CHECK_CRC32_TRUE}" && test -z "${COND_CHECK_CRC32_FALSE}"; then - as_fn_error "conditional \"COND_CHECK_CRC32\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_CHECK_CRC64_TRUE}" && test -z "${COND_CHECK_CRC64_FALSE}"; then - as_fn_error "conditional \"COND_CHECK_CRC64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_CHECK_SHA256_TRUE}" && test -z "${COND_CHECK_SHA256_FALSE}"; then - as_fn_error "conditional \"COND_CHECK_SHA256\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_ASM_X86_TRUE}" && test -z "${COND_ASM_X86_FALSE}"; then - as_fn_error "conditional \"COND_ASM_X86\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_ASM_X86_64_TRUE}" && test -z "${COND_ASM_X86_64_FALSE}"; then - as_fn_error "conditional \"COND_ASM_X86_64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_SMALL_TRUE}" && test -z "${COND_SMALL_FALSE}"; then - as_fn_error "conditional \"COND_SMALL\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then - as_fn_error "conditional \"am__fastdepCCAS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${COND_SHARED_TRUE}" && test -z "${COND_SHARED_FALSE}"; then - as_fn_error "conditional \"COND_SHARED\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -if test -z "${COND_GNULIB_TRUE}" && test -z "${COND_GNULIB_FALSE}"; then - as_fn_error "conditional \"COND_GNULIB\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... 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'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - 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 - -# 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'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by XZ Utils $as_me 4.999.9beta, which was -generated by GNU Autoconf 2.64. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_version="\\ -XZ Utils config.status 4.999.9beta -configured by $0, generated by GNU Autoconf 2.64, - with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - -Copyright (C) 2009 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -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 - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' -macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' -AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' -DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' -enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' -pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' -host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' -host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' -host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' -build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' -build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' -build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' -SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' -Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' -GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' -EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' -FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' -LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' -NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' -LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' -ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' -exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' -lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' -reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' -AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' -STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' -RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' -compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' -GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' -SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' -ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' -need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' -LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' -libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' -fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' -version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' -runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' -libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' -soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' -old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' -striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' -LD_RC='`$ECHO "X$LD_RC" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_cmds_RC='`$ECHO "X$old_archive_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' -compiler_RC='`$ECHO "X$compiler_RC" | $Xsed -e "$delay_single_quote_subst"`' -GCC_RC='`$ECHO "X$GCC_RC" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag_RC='`$ECHO "X$lt_prog_compiler_no_builtin_flag_RC" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_wl_RC='`$ECHO "X$lt_prog_compiler_wl_RC" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_pic_RC='`$ECHO "X$lt_prog_compiler_pic_RC" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_static_RC='`$ECHO "X$lt_prog_compiler_static_RC" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o_RC='`$ECHO "X$lt_cv_prog_compiler_c_o_RC" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds_need_lc_RC='`$ECHO "X$archive_cmds_need_lc_RC" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes_RC='`$ECHO "X$enable_shared_with_static_runtimes_RC" | $Xsed -e "$delay_single_quote_subst"`' -export_dynamic_flag_spec_RC='`$ECHO "X$export_dynamic_flag_spec_RC" | $Xsed -e "$delay_single_quote_subst"`' -whole_archive_flag_spec_RC='`$ECHO "X$whole_archive_flag_spec_RC" | $Xsed -e "$delay_single_quote_subst"`' -compiler_needs_object_RC='`$ECHO "X$compiler_needs_object_RC" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_new_cmds_RC='`$ECHO "X$old_archive_from_new_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds_RC='`$ECHO "X$old_archive_from_expsyms_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds_RC='`$ECHO "X$archive_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' -archive_expsym_cmds_RC='`$ECHO "X$archive_expsym_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' -module_cmds_RC='`$ECHO "X$module_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' -module_expsym_cmds_RC='`$ECHO "X$module_expsym_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' -with_gnu_ld_RC='`$ECHO "X$with_gnu_ld_RC" | $Xsed -e "$delay_single_quote_subst"`' -allow_undefined_flag_RC='`$ECHO "X$allow_undefined_flag_RC" | $Xsed -e "$delay_single_quote_subst"`' -no_undefined_flag_RC='`$ECHO "X$no_undefined_flag_RC" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_RC='`$ECHO "X$hardcode_libdir_flag_spec_RC" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld_RC='`$ECHO "X$hardcode_libdir_flag_spec_ld_RC" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_separator_RC='`$ECHO "X$hardcode_libdir_separator_RC" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct_RC='`$ECHO "X$hardcode_direct_RC" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct_absolute_RC='`$ECHO "X$hardcode_direct_absolute_RC" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_minus_L_RC='`$ECHO "X$hardcode_minus_L_RC" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_shlibpath_var_RC='`$ECHO "X$hardcode_shlibpath_var_RC" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_automatic_RC='`$ECHO "X$hardcode_automatic_RC" | $Xsed -e "$delay_single_quote_subst"`' -inherit_rpath_RC='`$ECHO "X$inherit_rpath_RC" | $Xsed -e "$delay_single_quote_subst"`' -link_all_deplibs_RC='`$ECHO "X$link_all_deplibs_RC" | $Xsed -e "$delay_single_quote_subst"`' -fix_srcfile_path_RC='`$ECHO "X$fix_srcfile_path_RC" | $Xsed -e "$delay_single_quote_subst"`' -always_export_symbols_RC='`$ECHO "X$always_export_symbols_RC" | $Xsed -e "$delay_single_quote_subst"`' -export_symbols_cmds_RC='`$ECHO "X$export_symbols_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' -exclude_expsyms_RC='`$ECHO "X$exclude_expsyms_RC" | $Xsed -e "$delay_single_quote_subst"`' -include_expsyms_RC='`$ECHO "X$include_expsyms_RC" | $Xsed -e "$delay_single_quote_subst"`' -prelink_cmds_RC='`$ECHO "X$prelink_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' -file_list_spec_RC='`$ECHO "X$file_list_spec_RC" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_action_RC='`$ECHO "X$hardcode_action_RC" | $Xsed -e "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# Quote evaled strings. -for var in SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -deplibs_check_method \ -file_magic_cmd \ -AR \ -AR_FLAGS \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -SHELL \ -ECHO \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_wl \ -lt_prog_compiler_pic \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ -hardcode_libdir_separator \ -fix_srcfile_path \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -finish_eval \ -old_striplib \ -striplib \ -LD_RC \ -compiler_RC \ -lt_prog_compiler_no_builtin_flag_RC \ -lt_prog_compiler_wl_RC \ -lt_prog_compiler_pic_RC \ -lt_prog_compiler_static_RC \ -lt_cv_prog_compiler_c_o_RC \ -export_dynamic_flag_spec_RC \ -whole_archive_flag_spec_RC \ -compiler_needs_object_RC \ -with_gnu_ld_RC \ -allow_undefined_flag_RC \ -no_undefined_flag_RC \ -hardcode_libdir_flag_spec_RC \ -hardcode_libdir_flag_spec_ld_RC \ -hardcode_libdir_separator_RC \ -fix_srcfile_path_RC \ -exclude_expsyms_RC \ -include_expsyms_RC \ -file_list_spec_RC; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec \ -old_archive_cmds_RC \ -old_archive_from_new_cmds_RC \ -old_archive_from_expsyms_cmds_RC \ -archive_cmds_RC \ -archive_expsym_cmds_RC \ -module_cmds_RC \ -module_expsym_cmds_RC \ -export_symbols_cmds_RC \ -prelink_cmds_RC; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case \$lt_ECHO in -*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` - ;; -esac - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - - - -# Capture the value of obsolete ALL_LINGUAS because we need it to compute - # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it - # from automake < 1.5. - eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' - # Capture the value of LINGUAS because we need it to compute CATALOGS. - LINGUAS="${LINGUAS-%UNSET%}" - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; - "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; - "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - "src/liblzma/liblzma.pc") CONFIG_FILES="$CONFIG_FILES src/liblzma/liblzma.pc" ;; - "src/liblzma/Makefile") CONFIG_FILES="$CONFIG_FILES src/liblzma/Makefile" ;; - "src/liblzma/api/Makefile") CONFIG_FILES="$CONFIG_FILES src/liblzma/api/Makefile" ;; - "src/xz/Makefile") CONFIG_FILES="$CONFIG_FILES src/xz/Makefile" ;; - "src/xzdec/Makefile") CONFIG_FILES="$CONFIG_FILES src/xzdec/Makefile" ;; - "src/lzmainfo/Makefile") CONFIG_FILES="$CONFIG_FILES src/lzmainfo/Makefile" ;; - "src/scripts/Makefile") CONFIG_FILES="$CONFIG_FILES src/scripts/Makefile" ;; - "src/scripts/xzdiff") CONFIG_FILES="$CONFIG_FILES src/scripts/xzdiff" ;; - "src/scripts/xzgrep") CONFIG_FILES="$CONFIG_FILES src/scripts/xzgrep" ;; - "src/scripts/xzmore") CONFIG_FILES="$CONFIG_FILES src/scripts/xzmore" ;; - "src/scripts/xzless") CONFIG_FILES="$CONFIG_FILES src/scripts/xzless" ;; - "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; - "debug/Makefile") CONFIG_FILES="$CONFIG_FILES debug/Makefile" ;; - - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\).*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\).*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_t=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_t"; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - 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 - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # 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 - # 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. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # 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 - 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 - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="RC " - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Assembler program. -AS=$AS - -# DLL creation program. -DLLTOOL=$DLLTOOL - -# Object dumper program. -OBJDUMP=$OBJDUMP - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that does not interpret backslashes. -ECHO=$lt_ECHO - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac - - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - - cat <<_LT_EOF >> "$ofile" - -# ### BEGIN LIBTOOL TAG CONFIG: RC - -# The linker used to build libraries. -LD=$lt_LD_RC - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds_RC - -# A language specific compiler. -CC=$lt_compiler_RC - -# Is the compiler the GNU compiler? -with_gcc=$GCC_RC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_RC - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_RC - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_RC - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_RC - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object_RC - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds_RC -archive_expsym_cmds=$lt_archive_expsym_cmds_RC - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds_RC -module_expsym_cmds=$lt_module_expsym_cmds_RC - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld_RC - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_RC - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_RC - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct_RC - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute_RC - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L_RC - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_RC - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic_RC - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath_RC - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_RC - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path_RC - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols_RC - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_RC - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_RC - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_RC - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds_RC - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec_RC - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_RC - -# ### END LIBTOOL TAG CONFIG: RC -_LT_EOF - - ;; - "po-directories":C) - for ac_file in $CONFIG_FILES; do - # Support "outfile[:infile[:infile...]]" - case "$ac_file" in - *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - esac - # PO directories have a Makefile.in generated from Makefile.in.in. - case "$ac_file" in */Makefile.in) - # Adjust a relative srcdir. - ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` - ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" - ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` - # In autoconf-2.13 it is called $ac_given_srcdir. - # In autoconf-2.50 it is called $srcdir. - test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" - case "$ac_given_srcdir" in - .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; - /*) top_srcdir="$ac_given_srcdir" ;; - *) top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - # Treat a directory as a PO directory if and only if it has a - # POTFILES.in file. This allows packages to have multiple PO - # directories under different names or in different locations. - if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then - rm -f "$ac_dir/POTFILES" - test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" - cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" - POMAKEFILEDEPS="POTFILES.in" - # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend - # on $ac_dir but don't depend on user-specified configuration - # parameters. - if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then - # The LINGUAS file contains the set of available languages. - if test -n "$OBSOLETE_ALL_LINGUAS"; then - test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" - fi - ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` - # Hide the ALL_LINGUAS assigment from automake < 1.5. - eval 'ALL_LINGUAS''=$ALL_LINGUAS_' - POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" - else - # The set of available languages was given in configure.in. - # Hide the ALL_LINGUAS assigment from automake < 1.5. - eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' - fi - # Compute POFILES - # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) - # Compute UPDATEPOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) - # Compute DUMMYPOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) - # Compute GMOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) - case "$ac_given_srcdir" in - .) srcdirpre= ;; - *) srcdirpre='$(srcdir)/' ;; - esac - POFILES= - UPDATEPOFILES= - DUMMYPOFILES= - GMOFILES= - for lang in $ALL_LINGUAS; do - POFILES="$POFILES $srcdirpre$lang.po" - UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" - DUMMYPOFILES="$DUMMYPOFILES $lang.nop" - GMOFILES="$GMOFILES $srcdirpre$lang.gmo" - done - # CATALOGS depends on both $ac_dir and the user's LINGUAS - # environment variable. - INST_LINGUAS= - if test -n "$ALL_LINGUAS"; then - for presentlang in $ALL_LINGUAS; do - useit=no - if test "%UNSET%" != "$LINGUAS"; then - desiredlanguages="$LINGUAS" - else - desiredlanguages="$ALL_LINGUAS" - fi - for desiredlang in $desiredlanguages; do - # Use the presentlang catalog if desiredlang is - # a. equal to presentlang, or - # b. a variant of presentlang (because in this case, - # presentlang can be used as a fallback for messages - # which are not translated in the desiredlang catalog). - case "$desiredlang" in - "$presentlang"*) useit=yes;; - esac - done - if test $useit = yes; then - INST_LINGUAS="$INST_LINGUAS $presentlang" - fi - done - fi - CATALOGS= - if test -n "$INST_LINGUAS"; then - for lang in $INST_LINGUAS; do - CATALOGS="$CATALOGS $lang.gmo" - done - fi - test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" - sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" - for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do - if test -f "$f"; then - case "$f" in - *.orig | *.bak | *~) ;; - *) cat "$f" >> "$ac_dir/Makefile" ;; - esac - fi - done - fi - ;; - esac - done ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit $? -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/Build/source/utils/xz-4.999.9beta/configure.ac b/Build/source/utils/xz-4.999.9beta/configure.ac deleted file mode 100644 index d125a6936da..00000000000 --- a/Build/source/utils/xz-4.999.9beta/configure.ac +++ /dev/null @@ -1,706 +0,0 @@ -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. - -############################################################################### -# -# Author: Lasse Collin -# -# This file has been put into the public domain. -# You can do whatever you want with this file. -# -############################################################################### - -# NOTE: Don't add useless checks. autoscan detects this and that, but don't -# let it confuse you. For example, we don't care about checking for behavior -# of malloc(), stat(), or lstat(), since we don't use those functions in -# a way that would cause the problems the autoconf macros check. - -AC_PREREQ([2.61]) - -AC_INIT([XZ Utils], m4_esyscmd([/bin/sh version.sh]), - [lasse.collin@tukaani.org], [xz]) -AC_CONFIG_SRCDIR([src/liblzma/common/common.h]) -AC_CONFIG_AUX_DIR([build-aux]) -AC_CONFIG_MACRO_DIR([m4]) -AC_CONFIG_HEADER([config.h]) - -PACKAGE_HOMEPAGE=http://tukaani.org/xz/ -AC_DEFINE_UNQUOTED([PACKAGE_HOMEPAGE], ["$PACKAGE_HOMEPAGE"], - [Define to the URL of the home page of this package.]) -AC_SUBST([PACKAGE_HOMEPAGE]) - -echo -echo "$PACKAGE_STRING" - -echo -echo "System type:" -# This is needed to know if assembler optimizations can be used. -AC_CANONICAL_HOST - -# We do some special things on Windows (32-bit or 64-bit) builds. -case $host_os in - mingw* | cygwin*) is_w32=yes ;; - *) is_w32=no ;; -esac -AM_CONDITIONAL([COND_W32], [test "$is_w32" = yes]) - - -echo -echo "Configure options:" -AM_CFLAGS= - - -############# -# Debugging # -############# - -AC_MSG_CHECKING([if debugging code should be compiled]) -AC_ARG_ENABLE([debug], AC_HELP_STRING([--enable-debug], [Enable debugging code.]), - [], enable_debug=no) -if test "x$enable_debug" = xyes; then - AC_MSG_RESULT([yes]) -else - AC_DEFINE([NDEBUG], [1], [Define to 1 to disable debugging code.]) - AC_MSG_RESULT([no]) -fi - - -########### -# Filters # -########### - -m4_define([SUPPORTED_FILTERS], [lzma1,lzma2,subblock,delta,x86,powerpc,ia64,arm,armthumb,sparc])dnl -m4_define([SIMPLE_FILTERS], [x86,powerpc,ia64,arm,armthumb,sparc]) -m4_define([LZ_FILTERS], [lzma1,lzma2]) - -m4_foreach([NAME], [SUPPORTED_FILTERS], -[enable_filter_[]NAME=no -enable_encoder_[]NAME=no -enable_decoder_[]NAME=no -])dnl - -AC_MSG_CHECKING([which encoders to build]) -AC_ARG_ENABLE([encoders], AC_HELP_STRING([--enable-encoders=LIST], - [Comma-separated list of encoders to build. Default=all. - Available encoders:] - m4_translit(m4_defn([SUPPORTED_FILTERS]), [,], [ ])), - [], [enable_encoders=SUPPORTED_FILTERS]) -enable_encoders=`echo "$enable_encoders" | sed 's/,subblock//; s/,/ /g'` -if test "x$enable_encoders" = xno || test "x$enable_encoders" = x; then - AC_MSG_RESULT([(none)]) -else - AC_DEFINE([HAVE_ENCODER], [1], - [Define to 1 if encoder components are enabled.]) - for arg in $enable_encoders - do - case $arg in m4_foreach([NAME], [SUPPORTED_FILTERS], [ - NAME) - enable_filter_[]NAME=yes - enable_encoder_[]NAME=yes - AC_DEFINE(HAVE_ENCODER_[]m4_toupper(NAME), [1], - [Define to 1 if] NAME [encoder is enabled.]) - ;;]) - *) - AC_MSG_RESULT([]) - AC_MSG_ERROR([unknown filter: $arg]) - ;; - esac - done - AC_MSG_RESULT([$enable_encoders]) -fi - -AC_MSG_CHECKING([which decoders to build]) -AC_ARG_ENABLE([decoders], AC_HELP_STRING([--enable-decoders=LIST], - [Comma-separated list of decoders to build. Default=all. - Available decoders are the same as available encoders.]), - [], [enable_decoders=SUPPORTED_FILTERS]) -enable_decoders=`echo "$enable_decoders" | sed 's/,subblock//; s/,/ /g'` -if test "x$enable_decoders" = xno || test "x$enable_decoders" = x; then - AC_MSG_RESULT([(none)]) -else - AC_DEFINE([HAVE_DECODER], [1], - [Define to 1 if decoder components are enabled.]) - for arg in $enable_decoders - do - case $arg in m4_foreach([NAME], [SUPPORTED_FILTERS], [ - NAME) - enable_filter_[]NAME=yes - enable_decoder_[]NAME=yes - AC_DEFINE(HAVE_DECODER_[]m4_toupper(NAME), [1], - [Define to 1 if] NAME [decoder is enabled.]) - ;;]) - *) - AC_MSG_RESULT([]) - AC_MSG_ERROR([unknown filter: $arg]) - ;; - esac - done - - # LZMA2 requires that LZMA1 is enabled. - test "x$enable_encoder_lzma2" = xyes && enable_encoder_lzma1=yes - test "x$enable_decoder_lzma2" = xyes && enable_decoder_lzma1=yes - - AC_MSG_RESULT([$enable_decoders]) -fi - -if test "x$enable_encoder_lzma2$enable_encoder_lzma1" = xyesno \ - || test "x$enable_decoder_lzma2$enable_decoder_lzma1" = xyesno; then - AC_MSG_ERROR([LZMA2 requires that LZMA1 is also enabled.]) -fi - -AM_CONDITIONAL(COND_MAIN_ENCODER, test "x$enable_encoders" != xno && test "x$enable_encoders" != x) -AM_CONDITIONAL(COND_MAIN_DECODER, test "x$enable_decoders" != xno && test "x$enable_decoders" != x) - -m4_foreach([NAME], [SUPPORTED_FILTERS], -[AM_CONDITIONAL(COND_FILTER_[]m4_toupper(NAME), test "x$enable_filter_[]NAME" = xyes) -AM_CONDITIONAL(COND_ENCODER_[]m4_toupper(NAME), test "x$enable_encoder_[]NAME" = xyes) -AM_CONDITIONAL(COND_DECODER_[]m4_toupper(NAME), test "x$enable_decoder_[]NAME" = xyes) -])dnl - -# The so called "simple filters" share common code. -enable_filter_simple=no -enable_encoder_simple=no -enable_decoder_simple=no -m4_foreach([NAME], [SIMPLE_FILTERS], -[test "x$enable_filter_[]NAME" = xyes && enable_filter_simple=yes -test "x$enable_encoder_[]NAME" = xyes && enable_encoder_simple=yes -test "x$enable_decoder_[]NAME" = xyes && enable_decoder_simple=yes -])dnl -AM_CONDITIONAL(COND_FILTER_SIMPLE, test "x$enable_filter_simple" = xyes) -AM_CONDITIONAL(COND_ENCODER_SIMPLE, test "x$enable_encoder_simple" = xyes) -AM_CONDITIONAL(COND_DECODER_SIMPLE, test "x$enable_decoder_simple" = xyes) - -# LZ-based filters share common code. -enable_filter_lz=no -enable_encoder_lz=no -enable_decoder_lz=no -m4_foreach([NAME], [LZ_FILTERS], -[test "x$enable_filter_[]NAME" = xyes && enable_filter_lz=yes -test "x$enable_encoder_[]NAME" = xyes && enable_encoder_lz=yes -test "x$enable_decoder_[]NAME" = xyes && enable_decoder_lz=yes -])dnl -AM_CONDITIONAL(COND_FILTER_LZ, test "x$enable_filter_lz" = xyes) -AM_CONDITIONAL(COND_ENCODER_LZ, test "x$enable_encoder_lz" = xyes) -AM_CONDITIONAL(COND_DECODER_LZ, test "x$enable_decoder_lz" = xyes) - - -################# -# Match finders # -################# - -m4_define([SUPPORTED_MATCH_FINDERS], [hc3,hc4,bt2,bt3,bt4]) - -m4_foreach([NAME], [SUPPORTED_MATCH_FINDERS], -[enable_match_finder_[]NAME=no -]) - -AC_MSG_CHECKING([which match finders to build]) -AC_ARG_ENABLE([match-finders], AC_HELP_STRING([--enable-match-finders=LIST], - [Comma-separated list of match finders to build. Default=all. - At least one match finder is required for encoding with - the LZMA1 and LZMA2 filters. Available match finders:] - m4_translit(m4_defn([SUPPORTED_MATCH_FINDERS]), [,], [ ])), [], - [enable_match_finders=SUPPORTED_MATCH_FINDERS]) -enable_match_finders=`echo "$enable_match_finders" | sed 's/,/ /g'` -if test "x$enable_encoder_lz" = xyes ; then - for arg in $enable_match_finders - do - case $arg in m4_foreach([NAME], [SUPPORTED_MATCH_FINDERS], [ - NAME) - enable_match_finder_[]NAME=yes - AC_DEFINE(HAVE_MF_[]m4_toupper(NAME), [1], - [Define to 1 to enable] NAME [match finder.]) - ;;]) - *) - AC_MSG_RESULT([]) - AC_MSG_ERROR([unknown match finder: $arg]) - ;; - esac - done - AC_MSG_RESULT([$enable_match_finders]) -else - AC_MSG_RESULT([(none because not building any LZ-based encoder)]) -fi - - -#################### -# Integrity checks # -#################### - -m4_define([SUPPORTED_CHECKS], [crc32,crc64,sha256]) - -m4_foreach([NAME], [SUPPORTED_FILTERS], -[enable_check_[]NAME=no -])dnl - -AC_MSG_CHECKING([which integrity checks to build]) -AC_ARG_ENABLE([checks], AC_HELP_STRING([--enable-checks=LIST], - [Comma-separated list of integrity checks to build. - Default=all. Available integrity checks:] - m4_translit(m4_defn([SUPPORTED_CHECKS]), [,], [ ])), - [], [enable_checks=SUPPORTED_CHECKS]) -enable_checks=`echo "$enable_checks" | sed 's/,/ /g'` -if test "x$enable_checks" = xno || test "x$enable_checks" = x; then - AC_MSG_RESULT([(none)]) -else - for arg in $enable_checks - do - case $arg in m4_foreach([NAME], [SUPPORTED_CHECKS], [ - NAME) - enable_check_[]NAME=yes - AC_DEFINE(HAVE_CHECK_[]m4_toupper(NAME), [1], - [Define to 1 if] NAME - [integrity check is enabled.]) - ;;]) - *) - AC_MSG_RESULT([]) - AC_MSG_ERROR([unknown integrity check: $arg]) - ;; - esac - done - AC_MSG_RESULT([$enable_checks]) -fi -if test "x$enable_checks_crc32" = xno ; then - AC_MSG_ERROR([For now, the CRC32 check must always be enabled.]) -fi - -m4_foreach([NAME], [SUPPORTED_CHECKS], -[AM_CONDITIONAL(COND_CHECK_[]m4_toupper(NAME), test "x$enable_check_[]NAME" = xyes) -])dnl - - -########################### -# Assembler optimizations # -########################### - -AC_MSG_CHECKING([if assembler optimizations should be used]) -AC_ARG_ENABLE([assembler], AC_HELP_STRING([--disable-assembler], - [Do not use assembler optimizations even if such exist - for the architecture.]), - [], [enable_assembler=yes]) -if test "x$enable_assembler" = xyes; then - case $host_cpu in - i?86) enable_assembler=x86 ;; - x86_64) enable_assembler=x86_64 ;; - *) enable_assembler=no ;; - esac -fi -case $enable_assembler in - x86) - AC_DEFINE([HAVE_ASM_X86], [1], - [Define to 1 if using x86 assembler optimizations.]) - ;; - x86_64) - AC_DEFINE([HAVE_ASM_X86_64], [1], - [Define to 1 if using x86_64 assembler optimizations.]) - ;; - no) - ;; - *) - AC_MSG_RESULT([]) - AC_MSG_ERROR([--enable-assembler accepts only \`yes', \`no', \`x86', or \`x86_64'.]) - ;; -esac -AC_MSG_RESULT([$enable_assembler]) -AM_CONDITIONAL(COND_ASM_X86, test "x$enable_assembler" = xx86) -AM_CONDITIONAL(COND_ASM_X86_64, test "x$enable_assembler" = xx86_64) - - -################################ -# Fast unaligned memory access # -################################ - -AC_MSG_CHECKING([if unaligned memory access should be used]) -AC_ARG_ENABLE([unaligned-access], AC_HELP_STRING([--enable-unaligned-access], - [Enable if the system supports *fast* unaligned memory access - with 16-bit and 32-bit integers. By default, this is enabled - only on x86, x86_64, and big endian PowerPC.]), - [], [enable_unaligned_access=auto]) -if test "x$enable_unaligned_access" = xauto ; then - case $host_cpu in - i?86|x86_64|powerpc|powerpc64) - enable_unaligned_access=yes - ;; - *) - enable_unaligned_access=no - ;; - esac -fi -if test "x$enable_unaligned_access" = xyes ; then - AC_DEFINE([HAVE_FAST_UNALIGNED_ACCESS], [1], [Define to 1 if - the system supports fast unaligned memory access.]) - AC_MSG_RESULT([yes]) -else - AC_MSG_RESULT([no]) -fi - - -##################### -# Size optimization # -##################### - -AC_MSG_CHECKING([if small size is preferred over speed]) -AC_ARG_ENABLE([small], AC_HELP_STRING([--enable-small], - [Make liblzma smaller and a little slower. - This is disabled by default to optimize for speed.]), - [], [enable_small=no]) -if test "x$enable_small" = xyes; then - AC_DEFINE([HAVE_SMALL], [1], [Define to 1 if optimizing for size.]) -elif test "x$enable_small" != xno; then - AC_MSG_RESULT([]) - AC_MSG_ERROR([--enable-small accepts only \`yes' or \`no']) -fi -AC_MSG_RESULT([$enable_small]) -AM_CONDITIONAL(COND_SMALL, test "x$enable_small" = xyes) - - -############# -# Threading # -############# - -AC_MSG_CHECKING([if threading support is wanted]) -AC_ARG_ENABLE([threads], AC_HELP_STRING([--disable-threads], - [Disable threading support. - This makes some things thread-unsafe.]), - [], [enable_threads=yes]) -if test "x$enable_threads" != xyes && test "x$enable_threads" != xno; then - AC_MSG_RESULT([]) - AC_MSG_ERROR([--enable-threads accepts only \`yes' or \`no']) -fi -AC_MSG_RESULT([$enable_threads]) -# We use the actual result a little later. - - -############################################ -# xz/xzdec/lzmadec linkage against liblzma # -############################################ - -# Link the xz, xzdec, and lzmadec command line tools against static liblzma -# unless using --enable-dynamic. Using static liblzma gives a little bit -# faster executable on x86, because no register is wasted for PIC. We also -# have one dependency less, which allows users to more freely copy the xz -# binary to other boxes. However, I wouldn't be surprised if distro -# maintainers still prefer dynamic linking, so let's make it easy for them. - -AC_MSG_CHECKING([how programs should be linked against liblzma]) -AC_ARG_ENABLE([dynamic], [AC_HELP_STRING([--enable-dynamic=TYPE], - [Set how command line tools are linked against liblzma. - TYPE can be mixed, yes, or no. The default is mixed.])], - [], [enable_dynamic=mixed]) -case $enable_dynamic in - mixed) - AC_MSG_RESULT([mixed (some dynamically, some statically)]) - ;; - yes) - AC_MSG_RESULT([dynamically]) - ;; - no) - AC_MSG_RESULT([statically]) - ;; - *) - AC_MSG_RESULT([]) - AC_MSG_ERROR([--enable-dynamic accepts only \`mixed', \`yes', or \`no']) - ;; -esac -# We use the actual results later, because we don't know yet -# if --disable-shared or --disable-static was used. - - -############################################################################### -# Checks for programs. -############################################################################### - -echo -gl_POSIX_SHELL -if test -z "$POSIX_SHELL" ; then - AC_MSG_ERROR([No POSIX conforming shell (sh) was found.]) -fi - -echo -echo "Initializing Automake:" - -AM_INIT_AUTOMAKE([1.10 foreign tar-v7 filename-length-max=99]) -AC_PROG_LN_S - -AC_PROG_CC_C99 -if test x$ac_cv_prog_cc_c99 = xno ; then - AC_MSG_ERROR([No C99 compiler was found.]) -fi - -AM_PROG_CC_C_O -AM_PROG_AS -AC_USE_SYSTEM_EXTENSIONS - -if test "x$enable_threads" = xyes; then - echo - echo "Threading support:" - ACX_PTHREAD - LIBS="$LIBS $PTHREAD_LIBS" - AM_CFLAGS="$AM_CFLAGS $PTHREAD_CFLAGS" - CC="$PTHREAD_CC" -fi - -echo -echo "Initializing Libtool:" -LT_PREREQ([2.2]) -LT_INIT([win32-dll]) -LT_LANG([Windows Resource]) - -# This is a bit wrong since it is possible to request that only some libs -# are built as shared. Using that feature isn't so common though, and this -# breaks only on Windows (at least for now) if the user enables only some -# libs as shared. -AM_CONDITIONAL([COND_SHARED], [test "x$enable_shared" != xno]) - - -############################################################################### -# Checks for libraries. -############################################################################### - -echo -echo "Initializing gettext:" -AM_GNU_GETTEXT_VERSION([0.16.1]) -AM_GNU_GETTEXT([external]) - -############################################################################### -# Checks for header files. -############################################################################### - -echo -echo "System headers and functions:" - -# There is currently no workarounds in this package if some of -# these headers are missing. -AC_CHECK_HEADERS([fcntl.h limits.h sys/time.h], - [], - [AC_MSG_ERROR([Required header file(s) are missing.])]) - -# If any of these headers are missing, things should still work correctly: -AC_CHECK_HEADERS([sys/param.h sys/sysctl.h byteswap.h], - [], [], [ -#ifdef HAVE_SYS_PARAM_H -# include -#endif -]) - -# Even if we have byteswap.h, we may lack the specific macros/functions. -if test x$ac_cv_header_byteswap_h = xyes ; then - m4_foreach([FUNC], [bswap_16,bswap_32,bswap_64], [ - AC_MSG_CHECKING([if FUNC is available]) - AC_LINK_IFELSE([AC_LANG_SOURCE([ -#include -int -main(void) -{ - FUNC[](42); - return 0; -} - ])], [ - AC_DEFINE(HAVE_[]m4_toupper(FUNC), [1], - [Define to 1 if] FUNC [is available.]) - AC_MSG_RESULT([yes]) - ], [AC_MSG_RESULT([no])]) - - ])dnl -fi - - -############################################################################### -# Checks for typedefs, structures, and compiler characteristics. -############################################################################### - -dnl We don't need these as long as we need a C99 compiler anyway. -dnl AC_C_INLINE -dnl AC_C_RESTRICT - -AC_HEADER_STDBOOL - -AC_TYPE_UINT8_T -AC_TYPE_UINT16_T -AC_TYPE_INT32_T -AC_TYPE_UINT32_T -AC_TYPE_INT64_T -AC_TYPE_UINT64_T -AC_TYPE_UINTPTR_T - -AC_CHECK_SIZEOF([size_t]) - -# The command line tool can copy high resolution timestamps if such -# information is availabe in struct stat. Otherwise one second accuracy -# is used. -AC_CHECK_MEMBERS([ - struct stat.st_atim.tv_nsec, - struct stat.st_atimespec.tv_nsec, - struct stat.st_atimensec, - struct stat.st_uatime, - struct stat.st_atim.st__tim.tv_nsec]) - -AC_SYS_LARGEFILE -AC_C_BIGENDIAN - - -############################################################################### -# Checks for library functions. -############################################################################### - -# Gnulib replacements as needed -gl_GETOPT - -# Find the best function to set timestamps. -AC_CHECK_FUNCS([futimens futimes futimesat utimes utime], [break]) - -lc_PHYSMEM -lc_CPUCORES - - -############################################################################### -# If using GCC, set some additional AM_CFLAGS: -############################################################################### - -if test "$GCC" = yes ; then - echo - echo "GCC extensions:" -fi - -# Always do the visibility check but don't set AM_CFLAGS on Windows. -# This way things get set properly even on Windows. -gl_VISIBILITY -if test -n "$CFLAG_VISIBILITY" && test "$is_w32" = no; then - AM_CFLAGS="$AM_CFLAGS $CFLAG_VISIBILITY" -fi - -if test "$GCC" = yes ; then - # Enable as much warnings as possible. These commented warnings won't - # work for this package though: - # * -Wunreachable-code breaks several assert(0) cases, which are - # backed up with "return LZMA_PROG_ERROR". - # * -Wcast-qual would break various things where we need a non-const - # pointer although we don't modify anything through it. - # * -Wcast-align breaks optimized CRC32 and CRC64 implementation - # on some architectures (not on x86), where this warning is bogus, - # because we take care of correct alignment. - # * -Winline, -Wdisabled-optimization, -Wunsafe-loop-optimizations - # don't seem so useful here; at least the last one gives some - # warnings which are not bugs. - for NEW_FLAG in \ - -Wall \ - -Wextra \ - -Wformat=2 \ - -Winit-self \ - -Wmissing-include-dirs \ - -Wstrict-aliasing \ - -Wfloat-equal \ - -Wundef \ - -Wshadow \ - -Wpointer-arith \ - -Wbad-function-cast \ - -Wwrite-strings \ - -Wlogical-op \ - -Waggregate-return \ - -Wstrict-prototypes \ - -Wold-style-definition \ - -Wmissing-prototypes \ - -Wmissing-declarations \ - -Wmissing-noreturn \ - -Wredundant-decls - do - AC_MSG_CHECKING([if $CC accepts $NEW_FLAG]) - OLD_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $NEW_FLAG" - AC_COMPILE_IFELSE([void foo(void) { }], [ - AM_CFLAGS="$AM_CFLAGS $NEW_FLAG" - AC_MSG_RESULT([yes]) - ], [ - AC_MSG_RESULT([no]) - ]) - CFLAGS="$OLD_CFLAGS" - done - - AC_ARG_ENABLE([werror], - AC_HELP_STRING([--enable-werror], [Enable -Werror to abort - compilation on all compiler warnings.]), - [], [enable_werror=no]) - if test "x$enable_werror" = "xyes"; then - AM_CFLAGS="$AM_CFLAGS -Werror" - fi -fi - - -############################################################################### -# Create the makefiles and config.h -############################################################################### - -echo - -# Don't build the lib directory at all if we don't need any replacement -# functions. -AM_CONDITIONAL([COND_GNULIB], test -n "$LIBOBJS") - -# Add default AM_CFLAGS. -AC_SUBST([AM_CFLAGS]) - -# Set additional flags for static/dynamic linking. The idea is that every -# program (not library) being built will use either STATIC_{CPPFLAGS,LDFLAGS} -# or DYNAMIC_{CPPFLAGS,LDFLAGS} depending on which type of linkage is -# preferred. These preferences get overriden by use of --disable-static, -# --disable-shared, or --enable-dynamic. -# -# This is quite messy, because we want to use LZMA_API_STATIC when linking -# against static liblzma. It's needed on Windows. -if test "x$enable_static" = xno; then - enable_dynamic=yes -fi -if test "x$enable_shared" = xno; then - enable_dynamic=no -fi -case $enable_dynamic in - yes) - STATIC_CPPFLAGS= - STATIC_LDFLAGS= - DYNAMIC_CPPFLAGS= - DYNAMIC_LDFLAGS= - ;; - mixed) - STATIC_CPPFLAGS="-DLZMA_API_STATIC" - STATIC_LDFLAGS="-static" - DYNAMIC_CPPFLAGS= - DYNAMIC_LDFLAGS= - ;; - no) - STATIC_CPPFLAGS="-DLZMA_API_STATIC" - STATIC_LDFLAGS="-static" - DYNAMIC_CPPFLAGS="-DLZMA_API_STATIC" - DYNAMIC_LDFLAGS="-static" - ;; -esac -AC_SUBST([STATIC_CPPFLAGS]) -AC_SUBST([STATIC_LDFLAGS]) -AC_SUBST([DYNAMIC_CPPFLAGS]) -AC_SUBST([DYNAMIC_LDFLAGS]) - -# This is needed for src/scripts. -xz=`echo xz | sed "$program_transform_name"` -AC_SUBST([xz]) - -AC_CONFIG_FILES([ - Doxyfile - Makefile - po/Makefile.in - lib/Makefile - src/Makefile - src/liblzma/liblzma.pc - src/liblzma/Makefile - src/liblzma/api/Makefile - src/xz/Makefile - src/xzdec/Makefile - src/lzmainfo/Makefile - src/scripts/Makefile - src/scripts/xzdiff - src/scripts/xzgrep - src/scripts/xzmore - src/scripts/xzless - tests/Makefile - debug/Makefile -]) - -AC_OUTPUT diff --git a/Build/source/utils/xz-4.999.9beta/debug/Makefile.am b/Build/source/utils/xz-4.999.9beta/debug/Makefile.am deleted file mode 100644 index 23834f4fcac..00000000000 --- a/Build/source/utils/xz-4.999.9beta/debug/Makefile.am +++ /dev/null @@ -1,30 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -noinst_PROGRAMS = \ - repeat \ - sync_flush \ - full_flush \ - memusage \ - crc32 \ - known_sizes \ - hex2bin - -AM_CPPFLAGS = \ - -I$(top_srcdir)/src/common \ - -I$(top_srcdir)/src/liblzma/api \ - $(STATIC_CPPFLAGS) - -AM_LDFLAGS = $(STATIC_LDFLAGS) - -LDADD = $(top_builddir)/src/liblzma/liblzma.la - -if COND_GNULIB -LDADD += $(top_builddir)/lib/libgnu.a -endif - -LDADD += $(LTLIBINTL) diff --git a/Build/source/utils/xz-4.999.9beta/debug/Makefile.in b/Build/source/utils/xz-4.999.9beta/debug/Makefile.in deleted file mode 100644 index e8d6418c238..00000000000 --- a/Build/source/utils/xz-4.999.9beta/debug/Makefile.in +++ /dev/null @@ -1,580 +0,0 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ -noinst_PROGRAMS = repeat$(EXEEXT) sync_flush$(EXEEXT) \ - full_flush$(EXEEXT) memusage$(EXEEXT) crc32$(EXEEXT) \ - known_sizes$(EXEEXT) hex2bin$(EXEEXT) -@COND_GNULIB_TRUE@am__append_1 = $(top_builddir)/lib/libgnu.a -subdir = debug -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ - $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ - $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ - $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ - $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -PROGRAMS = $(noinst_PROGRAMS) -crc32_SOURCES = crc32.c -crc32_OBJECTS = crc32.$(OBJEXT) -crc32_LDADD = $(LDADD) -am__DEPENDENCIES_1 = -crc32_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ - $(am__append_1) $(am__DEPENDENCIES_1) -full_flush_SOURCES = full_flush.c -full_flush_OBJECTS = full_flush.$(OBJEXT) -full_flush_LDADD = $(LDADD) -full_flush_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ - $(am__append_1) $(am__DEPENDENCIES_1) -hex2bin_SOURCES = hex2bin.c -hex2bin_OBJECTS = hex2bin.$(OBJEXT) -hex2bin_LDADD = $(LDADD) -hex2bin_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ - $(am__append_1) $(am__DEPENDENCIES_1) -known_sizes_SOURCES = known_sizes.c -known_sizes_OBJECTS = known_sizes.$(OBJEXT) -known_sizes_LDADD = $(LDADD) -known_sizes_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ - $(am__append_1) $(am__DEPENDENCIES_1) -memusage_SOURCES = memusage.c -memusage_OBJECTS = memusage.$(OBJEXT) -memusage_LDADD = $(LDADD) -memusage_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ - $(am__append_1) $(am__DEPENDENCIES_1) -repeat_SOURCES = repeat.c -repeat_OBJECTS = repeat.$(OBJEXT) -repeat_LDADD = $(LDADD) -repeat_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ - $(am__append_1) $(am__DEPENDENCIES_1) -sync_flush_SOURCES = sync_flush.c -sync_flush_OBJECTS = sync_flush.$(OBJEXT) -sync_flush_LDADD = $(LDADD) -sync_flush_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ - $(am__append_1) $(am__DEPENDENCIES_1) -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = crc32.c full_flush.c hex2bin.c known_sizes.c memusage.c \ - repeat.c sync_flush.c -DIST_SOURCES = crc32.c full_flush.c hex2bin.c known_sizes.c memusage.c \ - repeat.c sync_flush.c -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ -DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GETOPT_H = @GETOPT_H@ -GMSGFMT = @GMSGFMT@ -GMSGFMT_015 = @GMSGFMT_015@ -GREP = @GREP@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTLLIBS = @INTLLIBS@ -INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBICONV = @LIBICONV@ -LIBINTL = @LIBINTL@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBINTL = @LTLIBINTL@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -MSGFMT = @MSGFMT@ -MSGFMT_015 = @MSGFMT_015@ -MSGMERGE = @MSGMERGE@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POSIX_SHELL = @POSIX_SHELL@ -POSUB = @POSUB@ -PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -RC = @RC@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ -STATIC_LDFLAGS = @STATIC_LDFLAGS@ -STRIP = @STRIP@ -USE_NLS = @USE_NLS@ -VERSION = @VERSION@ -XGETTEXT = @XGETTEXT@ -XGETTEXT_015 = @XGETTEXT_015@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -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@ -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@ -lt_ECHO = @lt_ECHO@ -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@ -xz = @xz@ -AM_CPPFLAGS = \ - -I$(top_srcdir)/src/common \ - -I$(top_srcdir)/src/liblzma/api \ - $(STATIC_CPPFLAGS) - -AM_LDFLAGS = $(STATIC_LDFLAGS) -LDADD = $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ - $(LTLIBINTL) -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign debug/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign debug/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -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 -crc32$(EXEEXT): $(crc32_OBJECTS) $(crc32_DEPENDENCIES) - @rm -f crc32$(EXEEXT) - $(LINK) $(crc32_OBJECTS) $(crc32_LDADD) $(LIBS) -full_flush$(EXEEXT): $(full_flush_OBJECTS) $(full_flush_DEPENDENCIES) - @rm -f full_flush$(EXEEXT) - $(LINK) $(full_flush_OBJECTS) $(full_flush_LDADD) $(LIBS) -hex2bin$(EXEEXT): $(hex2bin_OBJECTS) $(hex2bin_DEPENDENCIES) - @rm -f hex2bin$(EXEEXT) - $(LINK) $(hex2bin_OBJECTS) $(hex2bin_LDADD) $(LIBS) -known_sizes$(EXEEXT): $(known_sizes_OBJECTS) $(known_sizes_DEPENDENCIES) - @rm -f known_sizes$(EXEEXT) - $(LINK) $(known_sizes_OBJECTS) $(known_sizes_LDADD) $(LIBS) -memusage$(EXEEXT): $(memusage_OBJECTS) $(memusage_DEPENDENCIES) - @rm -f memusage$(EXEEXT) - $(LINK) $(memusage_OBJECTS) $(memusage_LDADD) $(LIBS) -repeat$(EXEEXT): $(repeat_OBJECTS) $(repeat_DEPENDENCIES) - @rm -f repeat$(EXEEXT) - $(LINK) $(repeat_OBJECTS) $(repeat_LDADD) $(LIBS) -sync_flush$(EXEEXT): $(sync_flush_OBJECTS) $(sync_flush_DEPENDENCIES) - @rm -f sync_flush$(EXEEXT) - $(LINK) $(sync_flush_OBJECTS) $(sync_flush_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc32.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/full_flush.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hex2bin.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/known_sizes.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memusage.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repeat.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sync_flush.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -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) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - 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; }; }'`; \ - 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) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - 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; }; }'`; \ - 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 - -distdir: $(DISTFILES) - @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 -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) -installdirs: -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: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -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-libtool clean-noinstPROGRAMS \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -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 -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: - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstPROGRAMS ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am 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 - - -# 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/Build/source/utils/xz-4.999.9beta/debug/README b/Build/source/utils/xz-4.999.9beta/debug/README deleted file mode 100644 index 749610d77c0..00000000000 --- a/Build/source/utils/xz-4.999.9beta/debug/README +++ /dev/null @@ -1,17 +0,0 @@ - -Debug tools ------------ - - This directory contains a few tiny programs that may be helpful when - debugging LZMA Utils. - - These tools are not meant to be installed. Often one needs to edit - the source code a little to make the programs do the wanted things. - If you don't know how these programs could help you, it is likely - that they really are useless to you. - - These aren't intended to be used as example programs. They take some - shortcuts here and there, which correct programs should not do. Many - possible errors (especially I/O errors) are ignored. Don't report - bugs or send patches to fix this kind of bugs. - diff --git a/Build/source/utils/xz-4.999.9beta/debug/crc32.c b/Build/source/utils/xz-4.999.9beta/debug/crc32.c deleted file mode 100644 index 0fe46511f03..00000000000 --- a/Build/source/utils/xz-4.999.9beta/debug/crc32.c +++ /dev/null @@ -1,38 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc32.c -/// \brief Primitive CRC32 calculation tool -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "sysdefs.h" -#include - - -int -main(void) -{ - uint32_t crc = 0; - - do { - uint8_t buf[BUFSIZ]; - const size_t size = fread(buf, 1, sizeof(buf), stdin); - crc = lzma_crc32(buf, size, crc); - } while (!ferror(stdin) && !feof(stdin)); - - //printf("%08" PRIX32 "\n", crc); - - // I want it little endian so it's easy to work with hex editor. - printf("%02" PRIX32 " ", crc & 0xFF); - printf("%02" PRIX32 " ", (crc >> 8) & 0xFF); - printf("%02" PRIX32 " ", (crc >> 16) & 0xFF); - printf("%02" PRIX32 " ", crc >> 24); - printf("\n"); - - return 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/debug/full_flush.c b/Build/source/utils/xz-4.999.9beta/debug/full_flush.c deleted file mode 100644 index ce0d2e8940e..00000000000 --- a/Build/source/utils/xz-4.999.9beta/debug/full_flush.c +++ /dev/null @@ -1,102 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file full_flush.c -/// \brief Encode files using LZMA_FULL_FLUSH -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "sysdefs.h" -#include "lzma.h" -#include - - -static lzma_stream strm = LZMA_STREAM_INIT; -static FILE *file_in; - - -static void -encode(size_t size, lzma_action action) -{ - static const size_t CHUNK = 64; - uint8_t in[CHUNK]; - uint8_t out[CHUNK]; - lzma_ret ret; - - do { - if (strm.avail_in == 0 && size > 0) { - const size_t amount = MIN(size, CHUNK); - strm.avail_in = fread(in, 1, amount, file_in); - strm.next_in = in; - size -= amount; // Intentionally not using avail_in. - } - - strm.next_out = out; - strm.avail_out = CHUNK; - - ret = lzma_code(&strm, size == 0 ? action : LZMA_RUN); - - if (ret != LZMA_OK && ret != LZMA_STREAM_END) { - fprintf(stderr, "%s:%u: %s: ret == %d\n", - __FILE__, __LINE__, __func__, ret); - exit(1); - } - - fwrite(out, 1, CHUNK - strm.avail_out, stdout); - - } while (size > 0 || strm.avail_out == 0); - - if ((action == LZMA_RUN && ret != LZMA_OK) - || (action != LZMA_RUN && ret != LZMA_STREAM_END)) { - fprintf(stderr, "%s:%u: %s: ret == %d\n", - __FILE__, __LINE__, __func__, ret); - exit(1); - } -} - - -int -main(int argc, char **argv) -{ - file_in = argc > 1 ? fopen(argv[1], "rb") : stdin; - - - // Config - lzma_options_lzma opt_lzma; - if (lzma_lzma_preset(&opt_lzma, 1)) { - fprintf(stderr, "preset failed\n"); - exit(1); - } - lzma_filter filters[LZMA_FILTERS_MAX + 1]; - filters[0].id = LZMA_FILTER_LZMA2; - filters[0].options = &opt_lzma; - filters[1].id = LZMA_VLI_UNKNOWN; - - // Init - if (lzma_stream_encoder(&strm, filters, LZMA_CHECK_CRC32) != LZMA_OK) { - fprintf(stderr, "init failed\n"); - exit(1); - } - -// if (lzma_easy_encoder(&strm, 1)) { -// fprintf(stderr, "init failed\n"); -// exit(1); -// } - - // Encoding - encode(0, LZMA_FULL_FLUSH); - encode(6, LZMA_FULL_FLUSH); - encode(0, LZMA_FULL_FLUSH); - encode(7, LZMA_FULL_FLUSH); - encode(0, LZMA_FULL_FLUSH); - encode(0, LZMA_FINISH); - - // Clean up - lzma_end(&strm); - - return 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/debug/hex2bin.c b/Build/source/utils/xz-4.999.9beta/debug/hex2bin.c deleted file mode 100644 index 73246244746..00000000000 --- a/Build/source/utils/xz-4.999.9beta/debug/hex2bin.c +++ /dev/null @@ -1,53 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file hex2bin.c -/// \brief Converts hexadecimal input strings to binary -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "sysdefs.h" -#include -#include - - -static int -getbin(int x) -{ - if (x >= '0' && x <= '9') - return x - '0'; - - if (x >= 'A' && x <= 'F') - return x - 'A' + 10; - - return x - 'a' + 10; -} - - -int -main(void) -{ - while (true) { - int byte = getchar(); - if (byte == EOF) - return 0; - if (!isxdigit(byte)) - continue; - - const int digit = getchar(); - if (digit == EOF || !isxdigit(digit)) { - fprintf(stderr, "Invalid input\n"); - return 1; - } - - byte = (getbin(byte) << 4) | getbin(digit); - if (putchar(byte) == EOF) { - perror(NULL); - return 1; - } - } -} diff --git a/Build/source/utils/xz-4.999.9beta/debug/known_sizes.c b/Build/source/utils/xz-4.999.9beta/debug/known_sizes.c deleted file mode 100644 index cdee26dfd8e..00000000000 --- a/Build/source/utils/xz-4.999.9beta/debug/known_sizes.c +++ /dev/null @@ -1,129 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file known_sizes.c -/// \brief Encodes .lzma Stream with sizes known in Block Header -/// -/// The input file is encoded in RAM, and the known Compressed Size -/// and/or Uncompressed Size values are stored in the Block Header. -/// As of writing there's no such Stream encoder in liblzma. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "sysdefs.h" -#include "lzma.h" -#include -#include -#include -#include - - -// Support file sizes up to 1 MiB. We use this for output space too, so files -// close to 1 MiB had better compress at least a little or we have a buffer -// overflow. -#define BUFFER_SIZE (1U << 20) - - -int -main(void) -{ - // Allocate the buffers. - uint8_t *in = malloc(BUFFER_SIZE); - uint8_t *out = malloc(BUFFER_SIZE); - if (in == NULL || out == NULL) - return 1; - - // Fill the input buffer. - const size_t in_size = fread(in, 1, BUFFER_SIZE, stdin); - - // Filter setup - lzma_options_lzma opt_lzma; - if (lzma_lzma_preset(&opt_lzma, 1)) - return 1; - - lzma_filter filters[] = { - { - .id = LZMA_FILTER_LZMA2, - .options = &opt_lzma - }, - { - .id = LZMA_VLI_UNKNOWN - } - }; - - lzma_block block = { - .check = LZMA_CHECK_CRC32, - .compressed_size = BUFFER_SIZE, // Worst case reserve - .uncompressed_size = in_size, - .filters = filters, - }; - - lzma_stream strm = LZMA_STREAM_INIT; - if (lzma_block_encoder(&strm, &block) != LZMA_OK) - return 1; - - // Reserve space for Stream Header and Block Header. We need to - // calculate the size of the Block Header first. - if (lzma_block_header_size(&block) != LZMA_OK) - return 1; - - size_t out_size = LZMA_STREAM_HEADER_SIZE + block.header_size; - - strm.next_in = in; - strm.avail_in = in_size; - strm.next_out = out + out_size; - strm.avail_out = BUFFER_SIZE - out_size; - - if (lzma_code(&strm, LZMA_FINISH) != LZMA_STREAM_END) - return 1; - - out_size += strm.total_out; - - if (lzma_block_header_encode(&block, out + LZMA_STREAM_HEADER_SIZE) - != LZMA_OK) - return 1; - - lzma_index *idx = lzma_index_init(NULL, NULL); - if (idx == NULL) - return 1; - - if (lzma_index_append(idx, NULL, block.header_size + strm.total_out, - strm.total_in) != LZMA_OK) - return 1; - - if (lzma_index_encoder(&strm, idx) != LZMA_OK) - return 1; - - if (lzma_code(&strm, LZMA_RUN) != LZMA_STREAM_END) - return 1; - - out_size += strm.total_out; - - lzma_end(&strm); - - lzma_index_end(idx, NULL); - - // Encode the Stream Header and Stream Footer. backwards_size is - // needed only for the Stream Footer. - lzma_stream_flags sf = { - .backward_size = strm.total_out, - .check = block.check, - }; - - if (lzma_stream_header_encode(&sf, out) != LZMA_OK) - return 1; - - if (lzma_stream_footer_encode(&sf, out + out_size) != LZMA_OK) - return 1; - - out_size += LZMA_STREAM_HEADER_SIZE; - - // Write out the file. - fwrite(out, 1, out_size, stdout); - - return 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/debug/memusage.c b/Build/source/utils/xz-4.999.9beta/debug/memusage.c deleted file mode 100644 index 93fe0b2ca79..00000000000 --- a/Build/source/utils/xz-4.999.9beta/debug/memusage.c +++ /dev/null @@ -1,49 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file memusage.c -/// \brief Calculates memory usage using lzma_memory_usage() -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "sysdefs.h" -#include "lzma.h" -#include - -int -main(void) -{ - lzma_options_lzma lzma = { - .dict_size = (1U << 30) + (1U << 29), - .lc = 3, - .lp = 0, - .pb = 2, - .preset_dict = NULL, - .preset_dict_size = 0, - .mode = LZMA_MODE_NORMAL, - .nice_len = 48, - .mf = LZMA_MF_BT4, - .depth = 0, - }; - -/* - lzma_options_filter filters[] = { - { LZMA_FILTER_LZMA1, - (lzma_options_lzma *)&lzma_preset_lzma[6 - 1] }, - { UINT64_MAX, NULL } - }; -*/ - lzma_filter filters[] = { - { LZMA_FILTER_LZMA1, &lzma }, - { UINT64_MAX, NULL } - }; - - printf("Encoder: %10" PRIu64 " B\n", lzma_memusage_encoder(filters)); - printf("Decoder: %10" PRIu64 " B\n", lzma_memusage_decoder(filters)); - - return 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/debug/repeat.c b/Build/source/utils/xz-4.999.9beta/debug/repeat.c deleted file mode 100644 index a00bde2cd38..00000000000 --- a/Build/source/utils/xz-4.999.9beta/debug/repeat.c +++ /dev/null @@ -1,36 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file repeat.c -/// \brief Repeats given string given times -/// -/// This program can be useful when debugging run-length encoder in -/// the Subblock filter, especially the condition when repeat count -/// doesn't fit into 28-bit integer. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "sysdefs.h" -#include - - -int -main(int argc, char **argv) -{ - if (argc != 3) { - fprintf(stderr, "Usage: %s COUNT STRING\n", argv[0]); - exit(1); - } - - unsigned long long count = strtoull(argv[1], NULL, 10); - const size_t size = strlen(argv[2]); - - while (count-- != 0) - fwrite(argv[2], 1, size, stdout); - - return !!(ferror(stdout) || fclose(stdout)); -} diff --git a/Build/source/utils/xz-4.999.9beta/debug/sync_flush.c b/Build/source/utils/xz-4.999.9beta/debug/sync_flush.c deleted file mode 100644 index 1dccbdaacbd..00000000000 --- a/Build/source/utils/xz-4.999.9beta/debug/sync_flush.c +++ /dev/null @@ -1,133 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file sync_flush.c -/// \brief Encode files using LZMA_SYNC_FLUSH -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "sysdefs.h" -#include "lzma.h" -#include - - -static lzma_stream strm = LZMA_STREAM_INIT; -static FILE *file_in; - - -static void -encode(size_t size, lzma_action action) -{ - static const size_t CHUNK = 64; - uint8_t in[CHUNK]; - uint8_t out[CHUNK]; - lzma_ret ret; - - do { - if (strm.avail_in == 0 && size > 0) { - const size_t amount = MIN(size, CHUNK); - strm.avail_in = fread(in, 1, amount, file_in); - strm.next_in = in; - size -= amount; // Intentionally not using avail_in. - } - - strm.next_out = out; - strm.avail_out = CHUNK; - - ret = lzma_code(&strm, size == 0 ? action : LZMA_RUN); - - if (ret != LZMA_OK && ret != LZMA_STREAM_END) { - fprintf(stderr, "%s:%u: %s: ret == %d\n", - __FILE__, __LINE__, __func__, ret); - exit(1); - } - - fwrite(out, 1, CHUNK - strm.avail_out, stdout); - - } while (size > 0 || strm.avail_out == 0); - - if ((action == LZMA_RUN && ret != LZMA_OK) - || (action != LZMA_RUN && ret != LZMA_STREAM_END)) { - fprintf(stderr, "%s:%u: %s: ret == %d\n", - __FILE__, __LINE__, __func__, ret); - exit(1); - } -} - - -int -main(int argc, char **argv) -{ - file_in = argc > 1 ? fopen(argv[1], "rb") : stdin; - - // Config - lzma_options_lzma opt_lzma = { - .dict_size = 1U << 16, - .lc = LZMA_LC_DEFAULT, - .lp = LZMA_LP_DEFAULT, - .pb = LZMA_PB_DEFAULT, - .preset_dict = NULL, - .persistent = true, - .mode = LZMA_MODE_NORMAL, - .nice_len = 32, - .mf = LZMA_MF_HC3, - .depth = 0, - }; - - lzma_options_delta opt_delta = { - .dist = 16 - }; - - lzma_options_subblock opt_subblock = { - .allow_subfilters = true, - .alignment = 8, // LZMA_SUBBLOCK_ALIGNMENT_DEFAULT, - .subblock_data_size = LZMA_SUBBLOCK_DATA_SIZE_DEFAULT, - .rle = 1, // LZMA_SUBBLOCK_RLE_OFF, - .subfilter_mode = LZMA_SUBFILTER_SET, - }; - opt_subblock.subfilter_options.id = LZMA_FILTER_LZMA1; - opt_subblock.subfilter_options.options = &opt_lzma; - opt_subblock.subfilter_options.id = LZMA_FILTER_DELTA; - opt_subblock.subfilter_options.options = &opt_delta; - - lzma_filter filters[LZMA_FILTERS_MAX + 1]; - filters[0].id = LZMA_FILTER_LZMA2; - filters[0].options = &opt_lzma; - filters[1].id = LZMA_VLI_UNKNOWN; - - // Init - if (lzma_stream_encoder(&strm, filters, LZMA_CHECK_CRC32) != LZMA_OK) { - fprintf(stderr, "init failed\n"); - exit(1); - } - - // Encoding - - encode(0, LZMA_SYNC_FLUSH); - encode(6, LZMA_SYNC_FLUSH); - encode(0, LZMA_SYNC_FLUSH); - encode(7, LZMA_SYNC_FLUSH); - encode(0, LZMA_SYNC_FLUSH); - encode(0, LZMA_FINISH); -/* - encode(53, LZMA_SYNC_FLUSH); -// opt_lzma.literal_context_bits = 2; -// opt_lzma.literal_pos_bits = 1; -// opt_lzma.pos_bits = 0; - encode(404, LZMA_FINISH); -*/ - // Clean up - lzma_end(&strm); - - return 0; - - // Prevent useless warnings so we don't need to have special CFLAGS - // to disable -Werror. - (void)opt_lzma; - (void)opt_subblock; - (void)opt_delta; -} diff --git a/Build/source/utils/xz-4.999.9beta/doc/faq.txt b/Build/source/utils/xz-4.999.9beta/doc/faq.txt deleted file mode 100644 index 48c4ec711b8..00000000000 --- a/Build/source/utils/xz-4.999.9beta/doc/faq.txt +++ /dev/null @@ -1,122 +0,0 @@ - -XZ Utils FAQ -============ - -Q: What do the letters XZ mean? - -A: Nothing. They are just two letters, which come from the file format - suffix .xz. The .xz suffix was selected, because it seemed to be - pretty much unused. It is no deeper meaning. - - -Q: What are LZMA and LZMA2? - -A: LZMA stands for Lempel-Ziv-Markov chain-Algorithm. It is the name - of the compression algorithm designed by Igor Pavlov for 7-Zip. - LZMA is based on LZ77 and range encoding. - - LZMA2 is an updated version of the original LZMA to fix a couple of - practical issues. In context of XZ Utils, LZMA is called LZMA1 to - emphasize that LZMA is not the same thing as LZMA2. LZMA2 is the - primary compression algorithm in the .xz file format. - - -Q: There are many LZMA related projects. How does XZ Utils relate to them? - -A: 7-Zip and LZMA SDK are the original projects. LZMA SDK is roughly - a subset of the 7-Zip source tree. - - p7zip is 7-Zip's command line tools ported to POSIX-like systems. - - LZMA Utils provide a gzip-like lzma tool for POSIX-like systems. - LZMA Utils are based on LZMA SDK. XZ Utils are the successor to - LZMA Utils. - - There are several other projects using LZMA. Most are more or less - based on LZMA SDK. - - -Q: Do XZ Utils support the .7z format? - -A: No. Use 7-Zip (Windows) or p7zip (POSIX-like systems) to handle .7z - files. - - -Q: I have many .tar.7z files. Can I convert them to .tar.xz without - spending hours recompressing the data? - -A: In the "extra" directory, there is a script named 7z2lzma.bash which - is able to convert some .7z files to the .lzma format (not .xz). It - needs the 7za (or 7z) command from p7zip. The script may silently - produce corrupt output if certain assumptions are not met, so - decompress the resulting .lzma file and compare it against the - original before deleting the original file! - - -Q: I have many .lzma files. Can I quickly convert them to the .xz format? - -A: For now, no. Since XZ Utils supports the .lzma format, it's usually - not too bad to keep the old files in the old format. If you want to - do the conversion anyway, you need to decompress the .lzma files and - then recompress to the .xz format. - - Technically, there is a way to make the conversion relatively fast - (roughly twice the time that normal decompression takes). Writing - such a tool would take quite a bit time though, and would probably - be useful to only a few people. If you really want such a conversion - tool, contact Lasse Collin and offer some money. - - -Q: Can I recover parts of a broken .xz file (e.g. corrupted CD-R)? - -A: It may be possible if the file consists of multiple blocks, which - typically is not the case if the file was created in single-threaded - mode. There is no recovery program yet. - - -Q: Is (some part of) XZ Utils patented? - -A: Lasse Collin is not aware of any patents that could affect XZ Utils. - However, due to nature of software patents, it's not possible to - guarantee that XZ Utils isn't affected by any third party patent(s). - - -Q: Where can I find documentation about the file format and algorithms? - -A: The .xz format is documented in xz-file-format.txt. It is a container - format only, and doesn't include descriptions of any non-trivial - filters. - - Documenting LZMA and LZMA2 is planned, but for now, there is no other - documentation that the source code. Before you begin, you should know - the basics of LZ77 and range coding algorithms. LZMA is based on LZ77, - but LZMA is *a lot* more complex. Range coding is used to compress - the final bitstream like Huffman coding is used in Deflate. - - -Q: I cannot find BCJ and BCJ2 filters. Don't they exist in liblzma? - -A: BCJ filter is called "x86" in liblzma. BCJ2 is not included, - because it requires using more than one encoded output stream. - - -Q: How do I build a program that needs liblzmadec (lzmadec.h)? - -A: liblzmadec is part of LZMA Utils. XZ Utils has liblzma, but no - liblzmadec. The code using liblzmadec should be ported to use - liblzma instead. If you cannot or don't want to do that, download - LZMA Utils from . - - -Q: The default build of liblzma is too big. How can I make it smaller? - -A: Give --enable-small to the configure script. Use also appropriate - --enable or --disable options to include only those filter encoders - and decoders and integrity checks that you actually need. Use - CFLAGS=-Os (with GCC) or equivalent to tell your compiler to optimize - for size. See INSTALL for information about configure options. - - If the result is still too big, take a look at XZ Embedded. It is - a separate project, which provides a limited but signinificantly - smaller XZ decoder implementation than XZ Utils. - diff --git a/Build/source/utils/xz-4.999.9beta/doc/history.txt b/Build/source/utils/xz-4.999.9beta/doc/history.txt deleted file mode 100644 index c97492e81a0..00000000000 --- a/Build/source/utils/xz-4.999.9beta/doc/history.txt +++ /dev/null @@ -1,149 +0,0 @@ - -History of LZMA Utils and XZ Utils -================================== - -Tukaani distribution - - In 2005, there was a small group working on Tukaani distribution, which - was a Slackware fork. One of the project goals was to fit the distro on - a single 700 MiB ISO-9660 image. Using LZMA instead of gzip helped a - lot. Roughly speaking, one could fit data that took 1000 MiB in gzipped - form into 700 MiB with LZMA. Naturally compression ratio varied across - packages, but this was what we got on average. - - Slackware packages have traditionally had .tgz as the filename suffix, - which is an abbreviation of .tar.gz. A logical naming for LZMA - compressed packages was .tlz, being an abbreviation of .tar.lzma. - - At the end of the year 2007, there was no distribution under the - Tukaani project anymore, but development of LZMA Utils was kept going. - Still, there were .tlz packages around, because at least Vector Linux - (a Slackware based distribution) used LZMA for its packages. - - First versions of the modified pkgtools used the LZMA_Alone tool from - Igor Pavlov's LZMA SDK as is. It was fine, because users wouldn't need - to interact with LZMA_Alone directly. But people soon wanted to use - LZMA for other files too, and the interface of LZMA_Alone wasn't - comfortable for those used to gzip and bzip2. - - -First steps of LZMA Utils - - The first version of LZMA Utils (4.22.0) included a shell script called - lzmash. It was wrapper that had gzip-like command line interface. It - used the LZMA_Alone tool from LZMA SDK to do all the real work. zgrep, - zdiff, and related scripts from gzip were adapted work with LZMA and - were part of the first LZMA Utils release too. - - LZMA Utils 4.22.0 included also lzmadec, which was a small (less than - 10 KiB) decoder-only command line tool. It was written on top of the - decoder-only C code found from the LZMA SDK. lzmadec was convenient in - situations where LZMA_Alone (a few hundred KiB) would be too big. - - lzmash and lzmadec were written by Lasse Collin. - - -Second generation - - The lzmash script was an ugly and not very secure hack. The last - version of LZMA Utils to use lzmash was 4.27.1. - - LZMA Utils 4.32.0beta1 introduced a new lzma command line tool written - by Ville Koskinen. It was written in C++, and used the encoder and - decoder from C++ LZMA SDK with little modifications. This tool replaced - both the lzmash script and the LZMA_Alone command line tool in LZMA - Utils. - - Introducing this new tool caused some temporary incompatibilities, - because LZMA_Alone executable was simply named lzma like the new - command line tool, but they had completely different command line - interface. The file format was still the same. - - Lasse wrote liblzmadec, which was a small decoder-only library based - on the C code found from LZMA SDK. liblzmadec had API similar to zlib, - although there were some significant differences, which made it - non-trivial to use it in some applications designed for zlib and - libbzip2. - - The lzmadec command line tool was converted to use liblzmadec. - - Alexandre Sauvé helped converting build system to use GNU Autotools. - This made is easier to test for certain less portable features needed - by the new command line tool. - - Since the new command line tool never got completely finished (for - example, it didn't support LZMA_OPT environment variable), the intent - was to not call 4.32.x stable. Similarly, liblzmadec wasn't polished, - but appeared to work well enough, so some people started using it too. - - Because the development of the third generation of LZMA Utils was - delayed considerably (3-4 years), the 4.32.x branch had to be kept - maintained. It got some bug fixes now and then, and finally it was - decided to call it stable, although most of the missing features were - never added. - - -File format problems - - The file format used by LZMA_Alone was primitive. It was designed for - embedded systems in mind, and thus provided only minimal set of - features. The two biggest problems for non-embedded use were lack of - magic bytes and integrity check. - - Igor and Lasse started developing a new file format with some help - from Ville Koskinen. Also Mark Adler, Mikko Pouru, H. Peter Anvin, - and Lars Wirzenius helped with some minor things at some point of the - development. Designing the new format took quite a long time (actually, - too long time would be more appropriate expression). It was mostly - because Lasse was quite slow at getting things done due to personal - reasons. - - Originally the new format was supposed to use the same .lzma suffix - that was already used by the old file format. Switching to the new - format wouldn't have caused much trouble when the old format wasn't - used by many people. But since the development of the new format took - so long time, the old format got quite popular, and it was decided - that the new file format must use a different suffix. - - It was decided to use .xz as the suffix of the new file format. The - first stable .xz file format specification was finally released in - December 2008. In addition to fixing the most obvious problems of - the old .lzma format, the .xz format added some new features like - support for multiple filters (compression algorithms), filter chaining - (like piping on the command line), and limited random-access reading. - - Currently the primary compression algorithm used in .xz is LZMA2. - It is an extension on top of the original LZMA to fix some practical - problems: LZMA2 adds support for flushing the encoder, uncompressed - chunks, eases stateful decoder implementations, and improves support - for multithreading. Since LZMA2 is better than the original LZMA, the - original LZMA is not supported in .xz. - - -Transition to XZ Utils - - The early versions of XZ Utils were called LZMA Utils. The first - releases were 4.42.0alphas. They dropped the rest of the C++ LZMA SDK. - The code was still directly based on LZMA SDK but ported to C and - converted from callback API to stateful API. Later, Igor Pavlov made - C version of the LZMA encoder too; these ports from C++ to C were - independent in LZMA SDK and LZMA Utils. - - The core of the new LZMA Utils was liblzma, a compression library with - zlib-like API. liblzma supported both the old and new file format. The - gzip-like lzma command line tool was rewritten to use liblzma. - - The new LZMA Utils code base was renamed to XZ Utils when the name - of the new file format had been decided. The liblzma compression - library retained its name though, because changing it would have - caused unnecessary breakage in applications already using the early - liblzma snapshots. - - The xz command line tool can emulate the gzip-like lzma tool by - creating appropriate symlinks (e.g. lzma -> xz). Thus, practically - all scripts using the lzma tool from LZMA Utils will work as is with - XZ Utils (and will keep using the old .lzma format). Still, the .lzma - format is more or less deprecated. XZ Utils will keep supporting it, - but new applications should use the .xz format, and migrating old - applications to .xz is often a good idea too. - diff --git a/Build/source/utils/xz-4.999.9beta/doc/lzma-file-format.txt b/Build/source/utils/xz-4.999.9beta/doc/lzma-file-format.txt deleted file mode 100644 index 21fcb19fdcd..00000000000 --- a/Build/source/utils/xz-4.999.9beta/doc/lzma-file-format.txt +++ /dev/null @@ -1,166 +0,0 @@ - -The .lzma File Format -===================== - - 0. Preface - 0.1. Notices and Acknowledgements - 0.2. Changes - 1. File Format - 1.1. Header - 1.1.1. Properties - 1.1.2. Dictionary Size - 1.1.3. Uncompressed Size - 1.2. LZMA Compressed Data - 2. References - - -0. Preface - - This document describes the .lzma file format, which is - sometimes also called LZMA_Alone format. It is a legacy file - format, which is being or has been replaced by the .xz format. - The MIME type of the .lzma format is `application/x-lzma'. - - The most commonly used software to handle .lzma files are - LZMA SDK, LZMA Utils, 7-Zip, and XZ Utils. This document - describes some of the differences between these implementations - and gives hints what subset of the .lzma format is the most - portable. - - -0.1. Notices and Acknowledgements - - This file format was designed by Igor Pavlov for use in - LZMA SDK. This document was written by Lasse Collin - using the documentation found - from the LZMA SDK. - - This document has been put into the public domain. - - -0.2. Changes - - Last modified: 2009-05-01 11:15+0300 - - -1. File Format - - +-+-+-+-+-+-+-+-+-+-+-+-+-+==========================+ - | Header | LZMA Compressed Data | - +-+-+-+-+-+-+-+-+-+-+-+-+-+==========================+ - - The .lzma format file consist of 13-byte Header followed by - the LZMA Compressed Data. - - Unlike the .gz, .bz2, and .xz formats, it is not possible to - concatenate multiple .lzma files as is and expect the - decompression tool to decode the resulting file as if it were - a single .lzma file. - - For example, the command line tools from LZMA Utils and - LZMA SDK silently ignore all the data after the first .lzma - stream. In contrast, the command line tool from XZ Utils - considers the .lzma file to be corrupt if there is data after - the first .lzma stream. - - -1.1. Header - - +------------+----+----+----+----+--+--+--+--+--+--+--+--+ - | Properties | Dictionary Size | Uncompressed Size | - +------------+----+----+----+----+--+--+--+--+--+--+--+--+ - - -1.1.1. Properties - - The Properties field contains three properties. An abbreviation - is given in parentheses, followed by the value range of the - property. The field consists of - - 1) the number of literal context bits (lc, [0, 8]); - 2) the number of literal position bits (lp, [0, 4]); and - 3) the number of position bits (pb, [0, 4]). - - The properties are encoded using the following formula: - - Properties = (pb * 5 + lp) * 9 + lc - - The following C code illustrates a straightforward way to - decode the Properties field: - - uint8_t lc, lp, pb; - uint8_t prop = get_lzma_properties(); - if (prop > (4 * 5 + 4) * 9 + 8) - return LZMA_PROPERTIES_ERROR; - - pb = prop / (9 * 5); - prop -= pb * 9 * 5; - lp = prop / 9; - lc = prop - lp * 9; - - XZ Utils has an additional requirement: lc + lp <= 4. Files - which don't follow this requirement cannot be decompressed - with XZ Utils. Usually this isn't a problem since the most - common lc/lp/pb values are 3/0/2. It is the only lc/lp/pb - combination that the files created by LZMA Utils can have, - but LZMA Utils can decompress files with any lc/lp/pb. - - -1.1.2. Dictionary Size - - Dictionary Size is stored as an unsigned 32-bit little endian - integer. Any 32-bit value is possible, but for maximum - portability, only sizes of 2^n and 2^n + 2^(n-1) should be - used. - - LZMA Utils creates only files with dictionary size 2^n, - 16 <= n <= 25. LZMA Utils can decompress files with any - dictionary size. - - XZ Utils creates and decompresses .lzma files only with - dictionary sizes 2^n and 2^n + 2^(n-1). If some other - dictionary size is specified when compressing, the value - stored in the Dictionary Size field is a rounded up, but the - specified value is still used in the actual compression code. - - -1.1.3. Uncompressed Size - - Uncompressed Size is stored as unsigned 64-bit little endian - integer. A special value of 0xFFFF_FFFF_FFFF_FFFF indicates - that Uncompressed Size is unknown. End of Payload Marker (*) - is used if and only if Uncompressed Size is unknown. - - XZ Utils rejects files whose Uncompressed Size field specifies - a known size that is 256 GiB or more. This is to reject false - positives when trying to guess if the input file is in the - .lzma format. When Uncompressed Size is unknown, there is no - limit for the uncompressed size of the file. - - (*) Some tools use the term End of Stream (EOS) marker - instead of End of Payload Marker. - - -1.2. LZMA Compressed Data - - Detailed description of the format of this field is out of - scope of this document. - - -2. References - - LZMA SDK - The original LZMA implementation - http://7-zip.org/sdk.html - - 7-Zip - http://7-zip.org/ - - LZMA Utils - LZMA adapted to POSIX-like systems - http://tukaani.org/lzma/ - - XZ Utils - The next generation of LZMA Utils - http://tukaani.org/xz/ - - The .xz file format - The successor of the the .lzma format - http://tukaani.org/xz/xz-file-format.txt - diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xz-a4.pdf b/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xz-a4.pdf deleted file mode 100644 index 0b6805432e5..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xz-a4.pdf and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzdec-a4.pdf b/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzdec-a4.pdf deleted file mode 100644 index 92e52eec78e..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzdec-a4.pdf and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzdiff-a4.pdf b/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzdiff-a4.pdf deleted file mode 100644 index 80aad7a9df2..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzdiff-a4.pdf and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzgrep-a4.pdf b/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzgrep-a4.pdf deleted file mode 100644 index 2c928946d92..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzgrep-a4.pdf and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzless-a4.pdf b/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzless-a4.pdf deleted file mode 100644 index a6374692f4d..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzless-a4.pdf and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzmore-a4.pdf b/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzmore-a4.pdf deleted file mode 100644 index b36a5fdfe6d..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-a4/xzmore-a4.pdf and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xz-letter.pdf b/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xz-letter.pdf deleted file mode 100644 index 6df9ab66aff..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xz-letter.pdf and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzdec-letter.pdf b/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzdec-letter.pdf deleted file mode 100644 index f056c2ee348..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzdec-letter.pdf and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzdiff-letter.pdf b/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzdiff-letter.pdf deleted file mode 100644 index 39bc0f0a287..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzdiff-letter.pdf and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzgrep-letter.pdf b/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzgrep-letter.pdf deleted file mode 100644 index 677186a1b44..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzgrep-letter.pdf and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzless-letter.pdf b/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzless-letter.pdf deleted file mode 100644 index dcbd4871228..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzless-letter.pdf and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzmore-letter.pdf b/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzmore-letter.pdf deleted file mode 100644 index e22857d6894..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/doc/man/pdf-letter/xzmore-letter.pdf and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/txt/xz.txt b/Build/source/utils/xz-4.999.9beta/doc/man/txt/xz.txt deleted file mode 100644 index e3dacde4a11..00000000000 --- a/Build/source/utils/xz-4.999.9beta/doc/man/txt/xz.txt +++ /dev/null @@ -1,786 +0,0 @@ -XZ(1) XZ Utils XZ(1) - - - -NAME - xz, unxz, xzcat, lzma, unlzma, lzcat - Compress or decompress .xz and - .lzma files - -SYNOPSIS - xz [option]... [file]... - - unxz is equivalent to xz --decompress. - xzcat is equivalent to xz --decompress --stdout. - lzma is equivalent to xz --format=lzma. - unlzma is equivalent to xz --format=lzma --decompress. - lzcat is equivalent to xz --format=lzma --decompress --stdout. - - When writing scripts that need to decompress files, it is recommended - to always use the name xz with appropriate arguments (xz -d or xz -dc) - instead of the names unxz and xzcat. - -DESCRIPTION - xz is a general-purpose data compression tool with command line syntax - similar to gzip(1) and bzip2(1). The native file format is the .xz - format, but also the legacy .lzma format and raw compressed streams - with no container format headers are supported. - - xz compresses or decompresses each file according to the selected oper- - ation mode. If no files are given or file is -, xz reads from standard - input and writes the processed data to standard output. xz will refuse - (display an error and skip the file) to write compressed data to stan- - dard output if it is a terminal. Similarly, xz will refuse to read com- - pressed data from standard input if it is a terminal. - - Unless --stdout is specified, files other than - are written to a new - file whose name is derived from the source file name: - - o When compressing, the suffix of the target file format (.xz or - .lzma) is appended to the source filename to get the target file- - name. - - o When decompressing, the .xz or .lzma suffix is removed from the - filename to get the target filename. xz also recognizes the suf- - fixes .txz and .tlz, and replaces them with the .tar suffix. - - If the target file already exists, an error is displayed and the file - is skipped. - - Unless writing to standard output, xz will display a warning and skip - the file if any of the following applies: - - o File is not a regular file. Symbolic links are not followed, thus - they are never considered to be regular files. - - o File has more than one hardlink. - - o File has setuid, setgid, or sticky bit set. - - o The operation mode is set to compress, and the file already has a - suffix of the target file format (.xz or .txz when compressing to - the .xz format, and .lzma or .tlz when compressing to the .lzma for- - mat). - - o The operation mode is set to decompress, and the file doesn't have a - suffix of any of the supported file formats (.xz, .txz, .lzma, or - .tlz). - - After successfully compressing or decompressing the file, xz copies the - owner, group, permissions, access time, and modification time from the - source file to the target file. If copying the group fails, the permis- - sions are modified so that the target file doesn't become accessible to - users who didn't have permission to access the source file. xz doesn't - support copying other metadata like access control lists or extended - attributes yet. - - Once the target file has been successfully closed, the source file is - removed unless --keep was specified. The source file is never removed - if the output is written to standard output. - - Sending SIGINFO or SIGUSR1 to the xz process makes it print progress - information to standard error. This has only limited use since when - standard error is a terminal, using --verbose will display an automati- - cally updating progress indicator. - - Memory usage - The memory usage of xz varies from a few hundred kilobytes to several - gigabytes depending on the compression settings. The settings used when - compressing a file affect also the memory usage of the decompressor. - Typically the decompressor needs only 5 % to 20 % of the amount of RAM - that the compressor needed when creating the file. Still, the worst- - case memory usage of the decompressor is several gigabytes. - - To prevent uncomfortable surprises caused by huge memory usage, xz has - a built-in memory usage limiter. The default limit is 40 % of total - physical RAM. While operating systems provide ways to limit the memory - usage of processes, relying on it wasn't deemed to be flexible enough. - - When compressing, if the selected compression settings exceed the mem- - ory usage limit, the settings are automatically adjusted downwards and - a notice about this is displayed. As an exception, if the memory usage - limit is exceeded when compressing with --format=raw, an error is dis- - played and xz will exit with exit status 1. - - If source file cannot be decompressed without exceeding the memory - usage limit, an error message is displayed and the file is skipped. - Note that compressed files may contain many blocks, which may have been - compressed with different settings. Typically all blocks will have - roughly the same memory requirements, but it is possible that a block - later in the file will exceed the memory usage limit, and an error - about too low memory usage limit gets displayed after some data has - already been decompressed. - - The absolute value of the active memory usage limit can be seen near - the bottom of the output of --long-help. The default limit can be - overriden with --memory=limit. - -OPTIONS - Integer suffixes and special values - In most places where an integer argument is expected, an optional suf- - fix is supported to easily indicate large integers. There must be no - space between the integer and the suffix. - - k or kB - The integer is multiplied by 1,000 (10^3). For example, 5k or - 5kB equals 5000. - - Ki or KiB - The integer is multiplied by 1,024 (2^10). - - M or MB - The integer is multiplied by 1,000,000 (10^6). - - Mi or MiB - The integer is multiplied by 1,048,576 (2^20). - - G or GB - The integer is multiplied by 1,000,000,000 (10^9). - - Gi or GiB - The integer is multiplied by 1,073,741,824 (2^30). - - A special value max can be used to indicate the maximum integer value - supported by the option. - - Operation mode - If multiple operation mode options are given, the last one takes - effect. - - -z, --compress - Compress. This is the default operation mode when no operation - mode option is specified, and no other operation mode is implied - from the command name (for example, unxz implies --decompress). - - -d, --decompress, --uncompress - Decompress. - - -t, --test - Test the integrity of compressed files. No files are created or - removed. This option is equivalent to --decompress --stdout - except that the decompressed data is discarded instead of being - written to standard output. - - -l, --list - View information about the compressed files. No uncompressed - output is produced, and no files are created or removed. In list - mode, the program cannot read the compressed data from standard - input or from other unseekable sources. - - This feature has not been implemented yet. - - Operation modifiers - -k, --keep - Keep (don't delete) the input files. - - -f, --force - This option has several effects: - - o If the target file already exists, delete it before compress- - ing or decompressing. - - o Compress or decompress even if the input is not a regular - file, has more than one hardlink, or has setuid, setgid, or - sticky bit set. The setuid, setgid, and sticky bits are not - copied to the target file. - - o If combined with --decompress --stdout and xz doesn't recog- - nize the type of the source file, xz will copy the source - file as is to standard output. This allows using xzcat - --force like cat(1) for files that have not been compressed - with xz. Note that in future, xz might support new com- - pressed file formats, which may make xz decompress more types - of files instead of copying them as is to standard output. - --format=format can be used to restrict xz to decompress only - a single file format. - - o Allow writing compressed data to a terminal, and reading com- - pressed data from a terminal. - - -c, --stdout, --to-stdout - Write the compressed or decompressed data to standard output - instead of a file. This implies --keep. - - -S .suf, --suffix=.suf - When compressing, use .suf as the suffix for the target file - instead of .xz or .lzma. If not writing to standard output and - the source file already has the suffix .suf, a warning is dis- - played and the file is skipped. - - When decompressing, recognize also files with the suffix .suf in - addition to files with the .xz, .txz, .lzma, or .tlz suffix. If - the source file has the suffix .suf, the suffix is removed to - get the target filename. - - When compressing or decompressing raw streams (--format=raw), - the suffix must always be specified unless writing to standard - output, because there is no default suffix for raw streams. - - --files[=file] - Read the filenames to process from file; if file is omitted, - filenames are read from standard input. Filenames must be termi- - nated with the newline character. If filenames are given also as - command line arguments, they are processed before the filenames - read from file. - - --files0[=file] - This is identical to --files[=file] except that the filenames - must be terminated with the null character. - - Basic file format and compression options - -F format, --format=format - Specify the file format to compress or decompress: - - o auto: This is the default. When compressing, auto is equiva- - lent to xz. When decompressing, the format of the input file - is autodetected. Note that raw streams (created with --for- - mat=raw) cannot be autodetected. - - o xz: Compress to the .xz file format, or accept only .xz files - when decompressing. - - o lzma or alone: Compress to the legacy .lzma file format, or - accept only .lzma files when decompressing. The alternative - name alone is provided for backwards compatibility with LZMA - Utils. - - o raw: Compress or uncompress a raw stream (no headers). This - is meant for advanced users only. To decode raw streams, you - need to set not only --format=raw but also specify the filter - chain, which would normally be stored in the container format - headers. - - -C check, --check=check - Specify the type of the integrity check, which is calculated - from the uncompressed data. This option has an effect only when - compressing into the .xz format; the .lzma format doesn't sup- - port integrity checks. The integrity check (if any) is verified - when the .xz file is decompressed. - - Supported check types: - - o none: Don't calculate an integrity check at all. This is usu- - ally a bad idea. This can be useful when integrity of the - data is verified by other means anyway. - - o crc32: Calculate CRC32 using the polynomial from IEEE-802.3 - (Ethernet). - - o crc64: Calculate CRC64 using the polynomial from ECMA-182. - This is the default, since it is slightly better than CRC32 - at detecting damaged files and the speed difference is negli- - gible. - - o sha256: Calculate SHA-256. This is somewhat slower than CRC32 - and CRC64. - - Integrity of the .xz headers is always verified with CRC32. It - is not possible to change or disable it. - - -0 ... -9 - Select compression preset. If a preset level is specified multi- - ple times, the last one takes effect. - - The compression preset levels can be categorised roughly into - three categories: - - -0 ... -2 - Fast presets with relatively low memory usage. -1 and -2 - should give compression speed and ratios comparable to - bzip2 -1 and bzip2 -9, respectively. Currently -0 is not - very good (not much faster than -1 but much worse com- - pression). In future, -0 may be indicate some fast algo- - rithm instead of LZMA2. - - -3 ... -5 - Good compression ratio with low to medium memory usage. - These are significantly slower than levels 0-2. - - -6 ... -9 - Excellent compression with medium to high memory usage. - These are also slower than the lower preset levels. The - default is -6. Unless you want to maximize the compres- - sion ratio, you probably don't want a higher preset level - than -7 due to speed and memory usage. - - The exact compression settings (filter chain) used by each pre- - set may vary between xz versions. The settings may also vary - between files being compressed, if xz determines that modified - settings will probably give better compression ratio without - significantly affecting compression time or memory usage. - - Because the settings may vary, the memory usage may vary too. - The following table lists the maximum memory usage of each pre- - set level, which won't be exceeded even in future versions of - xz. - - FIXME: The table below is just a rough idea. - - Preset Compression Decompression - -0 6 MiB 1 MiB - -1 6 MiB 1 MiB - -2 10 MiB 1 MiB - -3 20 MiB 2 MiB - -4 30 MiB 3 MiB - -5 60 MiB 6 MiB - -6 100 MiB 10 MiB - -7 200 MiB 20 MiB - -8 400 MiB 40 MiB - -9 800 MiB 80 MiB - - When compressing, xz automatically adjusts the compression set- - tings downwards if the memory usage limit would be exceeded, so - it is safe to specify a high preset level even on systems that - don't have lots of RAM. - - --fast and --best - These are somewhat misleading aliases for -0 and -9, respec- - tively. These are provided only for backwards compatibility - with LZMA Utils. Avoid using these options. - - Especially the name of --best is misleading, because the defini- - tion of best depends on the input data, and that usually people - don't want the very best compression ratio anyway, because it - would be very slow. - - -e, --extreme - Modify the compression preset (-0 ... -9) so that a little bit - better compression ratio can be achieved without increasing mem- - ory usage of the compressor or decompressor (exception: compres- - sor memory usage may increase a little with presets -0 ... -2). - The downside is that the compression time will increase dramati- - cally (it can easily double). - - -M limit, --memory=limit - Set the memory usage limit. If this option is specied multiple - times, the last one takes effect. The limit can be specified in - multiple ways: - - o The limit can be an absolute value in bytes. Using an integer - suffix like MiB can be useful. Example: --memory=80MiB - - o The limit can be specified as a percentage of physical RAM. - Example: --memory=70% - - o The limit can be reset back to its default value (currently - 40 % of physical RAM) by setting it to 0. - - o The memory usage limiting can be effectively disabled by set- - ting limit to max. This isn't recommended. It's usually bet- - ter to use, for example, --memory=90%. - - The current limit can be seen near the bottom of the output of - the --long-help option. - - -T threads, --threads=threads - Specify the maximum number of worker threads to use. The default - is the number of available CPU cores. You can see the current - value of threads near the end of the output of the --long-help - option. - - The actual number of worker threads can be less than threads if - using more threads would exceed the memory usage limit. In - addition to CPU-intensive worker threads, xz may use a few aux- - iliary threads, which don't use a lot of CPU time. - - Multithreaded compression and decompression are not implemented - yet, so this option has no effect for now. - - Custom compressor filter chains - A custom filter chain allows specifying the compression settings in - detail instead of relying on the settings associated to the preset lev- - els. When a custom filter chain is specified, the compression preset - level options (-0 ... -9 and --extreme) are silently ignored. - - A filter chain is comparable to piping on the UN*X command line. When - compressing, the uncompressed input goes to the first filter, whose - output goes to the next filter (if any). The output of the last filter - gets written to the compressed file. The maximum number of filters in - the chain is four, but typically a filter chain has only one or two - filters. - - Many filters have limitations where they can be in the filter chain: - some filters can work only as the last filter in the chain, some only - as a non-last filter, and some work in any position in the chain. - Depending on the filter, this limitation is either inherent to the fil- - ter design or exists to prevent security issues. - - A custom filter chain is specified by using one or more filter options - in the order they are wanted in the filter chain. That is, the order of - filter options is significant! When decoding raw streams (--for- - mat=raw), the filter chain is specified in the same order as it was - specified when compressing. - - Filters take filter-specific options as a comma-separated list. Extra - commas in options are ignored. Every option has a default value, so you - need to specify only those you want to change. - - --lzma1[=options], --lzma2[=options] - Add LZMA1 or LZMA2 filter to the filter chain. These filter can - be used only as the last filter in the chain. - - LZMA1 is a legacy filter, which is supported almost solely due - to the legacy .lzma file format, which supports only LZMA1. - LZMA2 is an updated version of LZMA1 to fix some practical - issues of LZMA1. The .xz format uses LZMA2, and doesn't support - LZMA1 at all. Compression speed and ratios of LZMA1 and LZMA2 - are practically the same. - - LZMA1 and LZMA2 share the same set of options: - - preset=preset - Reset all LZMA1 or LZMA2 options to preset. Preset con- - sist of an integer, which may be followed by single-let- - ter preset modifiers. The integer can be from 0 to 9, - matching the command line options -0 ... -9. The only - supported modifier is currently e, which matches - --extreme. - - The default preset is 6, from which the default values - for the rest of the LZMA1 or LZMA2 options are taken. - - dict=size - Dictionary (history buffer) size indicates how many bytes - of the recently processed uncompressed data is kept in - memory. One method to reduce size of the uncompressed - data is to store distance-length pairs, which indicate - what data to repeat from the dictionary buffer. The big- - ger the dictionary, the better the compression ratio usu- - ally is, but dictionaries bigger than the uncompressed - data are waste of RAM. - - Typical dictionary size is from 64 KiB to 64 MiB. The - minimum is 4 KiB. The maximum for compression is cur- - rently 1.5 GiB. The decompressor already supports dictio- - naries up to one byte less than 4 GiB, which is the maxi- - mum for LZMA1 and LZMA2 stream formats. - - Dictionary size has the biggest effect on compression - ratio. Dictionary size and match finder together deter- - mine the memory usage of the LZMA1 or LZMA2 encoder. The - same dictionary size is required for decompressing that - was used when compressing, thus the memory usage of the - decoder is determined by the dictionary size used when - compressing. - - lc=lc Specify the number of literal context bits. The minimum - is 0 and the maximum is 4; the default is 3. In addi- - tion, the sum of lc and lp must not exceed 4. - - lp=lp Specify the number of literal position bits. The minimum - is 0 and the maximum is 4; the default is 0. - - pb=pb Specify the number of position bits. The minimum is 0 and - the maximum is 4; the default is 2. - - mode=mode - Compression mode specifies the function used to analyze - the data produced by the match finder. Supported modes - are fast and normal. The default is fast for presets 0-2 - and normal for presets 3-9. - - mf=mf Match finder has a major effect on encoder speed, memory - usage, and compression ratio. Usually Hash Chain match - finders are faster than Binary Tree match finders. Hash - Chains are usually used together with mode=fast and - Binary Trees with mode=normal. The memory usage formulas - are only rough estimates, which are closest to reality - when dict is a power of two. - - hc3 Hash Chain with 2- and 3-byte hashing - Minimum value for nice: 3 - Memory usage: dict * 7.5 (if dict <= 16 MiB); - dict * 5.5 + 64 MiB (if dict > 16 MiB) - - hc4 Hash Chain with 2-, 3-, and 4-byte hashing - Minimum value for nice: 4 - Memory usage: dict * 7.5 - - bt2 Binary Tree with 2-byte hashing - Minimum value for nice: 2 - Memory usage: dict * 9.5 - - bt3 Binary Tree with 2- and 3-byte hashing - Minimum value for nice: 3 - Memory usage: dict * 11.5 (if dict <= 16 MiB); - dict * 9.5 + 64 MiB (if dict > 16 MiB) - - bt4 Binary Tree with 2-, 3-, and 4-byte hashing - Minimum value for nice: 4 - Memory usage: dict * 11.5 - - nice=nice - Specify what is considered to be a nice length for a - match. Once a match of at least nice bytes is found, the - algorithm stops looking for possibly better matches. - - nice can be 2-273 bytes. Higher values tend to give bet- - ter compression ratio at expense of speed. The default - depends on the preset level. - - depth=depth - Specify the maximum search depth in the match finder. The - default is the special value 0, which makes the compres- - sor determine a reasonable depth from mf and nice. - - Using very high values for depth can make the encoder - extremely slow with carefully crafted files. Avoid set- - ting the depth over 1000 unless you are prepared to - interrupt the compression in case it is taking too long. - - When decoding raw streams (--format=raw), LZMA2 needs only the - value of dict. LZMA1 needs also lc, lp, and pb. - - --x86[=options] - - --powerpc[=options] - - --ia64[=options] - - --arm[=options] - - --armthumb[=options] - - --sparc[=options] - Add a branch/call/jump (BCJ) filter to the filter chain. These - filters can be used only as non-last filter in the filter chain. - - A BCJ filter converts relative addresses in the machine code to - their absolute counterparts. This doesn't change the size of the - data, but it increases redundancy, which allows e.g. LZMA2 to - get better compression ratio. - - The BCJ filters are always reversible, so using a BCJ filter for - wrong type of data doesn't cause any data loss. However, apply- - ing a BCJ filter for wrong type of data is a bad idea, because - it tends to make the compression ratio worse. - - Different instruction sets have have different alignment: - - Filter Alignment Notes - x86 1 32-bit and 64-bit x86 - PowerPC 4 Big endian only - ARM 4 Little endian only - ARM-Thumb 2 Little endian only - IA-64 16 Big or little endian - SPARC 4 Big or little endian - - Since the BCJ-filtered data is usually compressed with LZMA2, - the compression ratio may be improved slightly if the LZMA2 - options are set to match the alignment of the selected BCJ fil- - ter. For example, with the IA-64 filter, it's good to set pb=4 - with LZMA2 (2^4=16). The x86 filter is an exception; it's usu- - ally good to stick to LZMA2's default four-byte alignment when - compressing x86 executables. - - All BCJ filters support the same options: - - start=offset - Specify the start offset that is used when converting - between relative and absolute addresses. The offset must - be a multiple of the alignment of the filter (see the ta- - ble above). The default is zero. In practice, the - default is good; specifying a custom offset is almost - never useful. - - Specifying a non-zero start offset is probably useful - only if the executable has multiple sections, and there - are many cross-section jumps or calls. Applying a BCJ - filter separately for each section with proper start off- - set and then compressing the result as a single chunk may - give some improvement in compression ratio compared to - applying the BCJ filter with the default offset for the - whole executable. - - --delta[=options] - Add Delta filter to the filter chain. The Delta filter can be - used only as non-last filter in the filter chain. - - Currently only simple byte-wise delta calculation is supported. - It can be useful when compressing e.g. uncompressed bitmap - images or uncompressed PCM audio. However, special purpose algo- - rithms may give significantly better results than Delta + LZMA2. - This is true especially with audio, which compresses faster and - better e.g. with FLAC. - - Supported options: - - dist=distance - Specify the distance of the delta calculation as bytes. - distance must be 1-256. The default is 1. - - For example, with dist=2 and eight-byte input A1 B1 A2 B3 - A3 B5 A4 B7, the output will be A1 B1 01 02 01 02 01 02. - - Other options - -q, --quiet - Suppress warnings and notices. Specify this twice to suppress - errors too. This option has no effect on the exit status. That - is, even if a warning was suppressed, the exit status to indi- - cate a warning is still used. - - -v, --verbose - Be verbose. If standard error is connected to a terminal, xz - will display a progress indicator. Specifying --verbose twice - will give even more verbose output (useful mostly for debug- - ging). - - -Q, --no-warn - Don't set the exit status to 2 even if a condition worth a warn- - ing was detected. This option doesn't affect the verbosity - level, thus both --quiet and --no-warn have to be used to not - display warnings and to not alter the exit status. - - -h, --help - Display a help message describing the most commonly used - options, and exit successfully. - - -H, --long-help - Display a help message describing all features of xz, and exit - successfully - - -V, --version - Display the version number of xz and liblzma. - -EXIT STATUS - 0 All is good. - - 1 An error occurred. - - 2 Something worth a warning occurred, but no actual errors - occurred. - - Notices (not warnings or errors) printed on standard error don't affect - the exit status. - -ENVIRONMENT - XZ_OPT A space-separated list of options is parsed from XZ_OPT before - parsing the options given on the command line. Note that only - options are parsed from XZ_OPT; all non-options are silently - ignored. Parsing is done with getopt_long(3) which is used also - for the command line arguments. - -LZMA UTILS COMPATIBILITY - The command line syntax of xz is practically a superset of lzma, - unlzma, and lzcat as found from LZMA Utils 4.32.x. In most cases, it is - possible to replace LZMA Utils with XZ Utils without breaking existing - scripts. There are some incompatibilities though, which may sometimes - cause problems. - - Compression preset levels - The numbering of the compression level presets is not identical in xz - and LZMA Utils. The most important difference is how dictionary sizes - are mapped to different presets. Dictionary size is roughly equal to - the decompressor memory usage. - - Level xz LZMA Utils - -1 64 KiB 64 KiB - -2 512 KiB 1 MiB - -3 1 MiB 512 KiB - -4 2 MiB 1 MiB - -5 4 MiB 2 MiB - -6 8 MiB 4 MiB - -7 16 MiB 8 MiB - -8 32 MiB 16 MiB - -9 64 MiB 32 MiB - - The dictionary size differences affect the compressor memory usage too, - but there are some other differences between LZMA Utils and XZ Utils, - which make the difference even bigger: - - Level xz LZMA Utils 4.32.x - -1 2 MiB 2 MiB - -2 5 MiB 12 MiB - -3 13 MiB 12 MiB - -4 25 MiB 16 MiB - -5 48 MiB 26 MiB - -6 94 MiB 45 MiB - -7 186 MiB 83 MiB - -8 370 MiB 159 MiB - -9 674 MiB 311 MiB - - The default preset level in LZMA Utils is -7 while in XZ Utils it is - -6, so both use 8 MiB dictionary by default. - - Streamed vs. non-streamed .lzma files - Uncompressed size of the file can be stored in the .lzma header. LZMA - Utils does that when compressing regular files. The alternative is to - mark that uncompressed size is unknown and use end of payload marker to - indicate where the decompressor should stop. LZMA Utils uses this - method when uncompressed size isn't known, which is the case for exam- - ple in pipes. - - xz supports decompressing .lzma files with or without end of payload - marker, but all .lzma files created by xz will use end of payload - marker and have uncompressed size marked as unknown in the .lzma - header. This may be a problem in some (uncommon) situations. For exam- - ple, a .lzma decompressor in an embedded device might work only with - files that have known uncompressed size. If you hit this problem, you - need to use LZMA Utils or LZMA SDK to create .lzma files with known - uncompressed size. - - Unsupported .lzma files - The .lzma format allows lc values up to 8, and lp values up to 4. LZMA - Utils can decompress files with any lc and lp, but always creates files - with lc=3 and lp=0. Creating files with other lc and lp is possible - with xz and with LZMA SDK. - - The implementation of the LZMA1 filter in liblzma requires that the sum - of lc and lp must not exceed 4. Thus, .lzma files which exceed this - limitation, cannot be decompressed with xz. - - LZMA Utils creates only .lzma files which have dictionary size of 2^n - (a power of 2), but accepts files with any dictionary size. liblzma - accepts only .lzma files which have dictionary size of 2^n or 2^n + - 2^(n-1). This is to decrease false positives when autodetecting .lzma - files. - - These limitations shouldn't be a problem in practice, since practically - all .lzma files have been compressed with settings that liblzma will - accept. - - Trailing garbage - When decompressing, LZMA Utils silently ignore everything after the - first .lzma stream. In most situations, this is a bug. This also means - that LZMA Utils don't support decompressing concatenated .lzma files. - - If there is data left after the first .lzma stream, xz considers the - file to be corrupt. This may break obscure scripts which have assumed - that trailing garbage is ignored. - -NOTES - Compressed output may vary - The exact compressed output produced from the same uncompressed input - file may vary between XZ Utils versions even if compression options are - identical. This is because the encoder can be improved (faster or bet- - ter compression) without affecting the file format. The output can vary - even between different builds of the same XZ Utils version, if differ- - ent build options are used or if the endianness of the hardware is dif- - ferent for different builds. - - The above means that implementing --rsyncable to create rsyncable .xz - files is not going to happen without freezing a part of the encoder - implementation, which can then be used with --rsyncable. - - Embedded .xz decompressors - Embedded .xz decompressor implementations like XZ Embedded don't neces- - sarily support files created with check types other than none and - crc32. Since the default is --check=crc64, you must use --check=none - or --check=crc32 when creating files for embedded systems. - - Outside embedded systems, all .xz format decompressors support all the - check types, or at least are able to decompress the file without veri- - fying the integrity check if the particular check is not supported. - - XZ Embedded supports BCJ filters, but only with the default start off- - set. - -SEE ALSO - xzdec(1), gzip(1), bzip2(1) - - XZ Utils: - XZ Embedded: - LZMA SDK: - - - -Tukaani 2009-08-27 XZ(1) diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzdec.txt b/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzdec.txt deleted file mode 100644 index ee2b820adad..00000000000 --- a/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzdec.txt +++ /dev/null @@ -1,95 +0,0 @@ -XZDEC(1) XZ Utils XZDEC(1) - - - -NAME - xzdec, lzmadec - Small .xz and .lzma decompressors - -SYNOPSIS - xzdec [option]... [file]... - lzmadec [option]... [file]... - -DESCRIPTION - xzdec is a liblzma-based decompression-only tool for .xz (and only .xz) - files. xzdec is intended to work as a drop-in replacement for xz(1) in - the most common situations where a script has been written to use xz - --decompress --stdout (and possibly a few other commonly used options) - to decompress .xz files. lzmadec is identical to xzdec except that - lzmadec supports .lzma files instead of .xz files. - - To reduce the size of the executable, xzdec doesn't support multi- - threading or localization, and doesn't read options from XZ_OPT envi- - ronment variable. xzdec doesn't support displaying intermediate - progress information: sending SIGINFO to xzdec does nothing, but send- - ing SIGUSR1 terminates the process instead of displaying progress - information. - -OPTIONS - -d, --decompress, --uncompress - Ignored for xz(1) compatibility. xzdec supports only decompres- - sion. - - -k, --keep - Ignored for xz(1) compatibility. xzdec never creates or removes - any files. - - -c, --stdout, --to-stdout - Ignored for xz(1) compatibility. xzdec always writes the decom- - pressed data to standard output. - - -M limit, --memory=limit - Set the memory usage limit. If this option is specified multi- - ple times, the last one takes effect. The limit can be specified - in multiple ways: - - o The limit can be an absolute value in bytes. Using an integer - suffix like MiB can be useful. Example: --memory=80MiB - - o The limit can be specified as a percentage of physical RAM. - Example: --memory=70% - - o The limit can be reset back to its default value (currently - 40 % of physical RAM) by setting it to 0. - - o The memory usage limiting can be effectively disabled by set- - ting limit to max. This isn't recommended. It's usually bet- - ter to use, for example, --memory=90%. - - The current limit can be seen near the bottom of the output of - the --help option. - - -q, --quiet - Specifying this once does nothing since xzdec never displays any - warnings or notices. Specify this twice to suppress errors. - - -Q, --no-warn - Ignored for xz(1) compatibility. xzdec never uses the exit sta- - tus 2. - - -h, --help - Display a help message and exit successfully. - - -V, --version - Display the version number of xzdec and liblzma. - -EXIT STATUS - 0 All was good. - - 1 An error occurred. - - xzdec doesn't have any warning messages like xz(1) has, thus the exit - status 2 is not used by xzdec. - -NOTES - xzdec and lzmadec are not really that small. The size can be reduced - further by dropping features from liblzma at compile time, but that - shouldn't usually be done for executables distributed in typical non- - embedded operating system distributions. If you need a truly small .xz - decompressor, consider using XZ Embedded. - -SEE ALSO - xz(1) - - - -Tukaani 2009-06-04 XZDEC(1) diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzdiff.txt b/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzdiff.txt deleted file mode 100644 index f64568f2ae3..00000000000 --- a/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzdiff.txt +++ /dev/null @@ -1,36 +0,0 @@ -XZDIFF(1) XZ Utils XZDIFF(1) - - - -NAME - xzcmp, xzdiff, lzcmp, lzdiff - compare compressed files - -SYNOPSIS - xzcmp [cmp_options] file1 [file2] - xzdiff [diff_options] file1 [file2] - lzcmp [cmp_options] file1 [file2] - lzdiff [diff_options] file1 [file2] - -DESCRIPTION - xzcmp and xdiff invoke cmp(1) or diff(1) on files compressed with - xz(1), lzma(1), gzip(1), or bzip2(1). All options specified are passed - directly to cmp or diff. If only one file is specified, then the files - compared are file1 (which must have a suffix of a supported compression - format) and file1 from which the compression format suffix has been - stripped. If two files are specified, then they are uncompressed if - necessary and fed to cmp(1) or diff(1). The exit status from cmp or - diff is preserved. - - The names lzcmp and lzdiff are provided for backward compatibility with - LZMA Utils. - -SEE ALSO - cmp(1), diff(1), xz(1), gzip(1), bzip2(1), zdiff(1) - -BUGS - Messages from the cmp(1) or diff(1) programs refer to temporary file- - names instead of those specified. - - - -Tukaani 2009-07-05 XZDIFF(1) diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzgrep.txt b/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzgrep.txt deleted file mode 100644 index 7f665bce295..00000000000 --- a/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzgrep.txt +++ /dev/null @@ -1,39 +0,0 @@ -XZGREP(1) XZ Utils XZGREP(1) - - - -NAME - xzgrep - search compressed files for a regular expression - -SYNOPSIS - xzgrep [grep_options] [-e] pattern file... - xzegrep ... - xzfgrep ... - lzgrep ... - lzegrep ... - lzfgrep ... - -DESCRIPTION - xzgrep invokes grep(1) on files which may be either uncompressed or - compressed with xz(1), lzma(1), gzip(1), or bzip2(1). All options - specified are passed directly to grep(1). - - If no file is specified, then the standard input is decompressed if - necessary and fed to grep(1). When reading from standard input, - gzip(1) and bzip2(1) compressed files are not supported. - - If xzgrep is invoked as xzegrep or xzfgrep then egrep(1) or fgrep(1) is - used instead of grep(1). The same applies to names lzgrep, lzegrep, - and lzfgrep, which are provided for backward compatibility with LZMA - Utils. - -ENVIRONMENT - GREP If the GREP environment variable is set, xzgrep uses it instead - of grep(1), egrep(1), or fgrep(1). - -SEE ALSO - grep(1), xz(1), gzip(1), bzip2(1), zgrep(1) - - - -Tukaani 2009-07-05 XZGREP(1) diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzless.txt b/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzless.txt deleted file mode 100644 index 2f3dc9fe2c4..00000000000 --- a/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzless.txt +++ /dev/null @@ -1,40 +0,0 @@ -XZLESS(1) XZ Utils XZLESS(1) - - - -NAME - xzless, lzless - view xz or lzma compressed (text) files - -SYNOPSIS - xzless [file...] - lzless [file...] - -DESCRIPTION - xzless is a filter that displays pagefulls of uncompressed text from - compressed file(s) to a terminal. It works on files compressed with - xz(1) or lzma(1). If no files are given, xzless reads from standard - input. - - xzless uses less(1) as its only pager. Unlike xzmore, the choice of - pagers is not alterable by an environment variable. Commands are based - on both more(1) and vi(1), and allow back and forth movement and - searching. See the less(1) manual for more information. - - The command named lzless is provided for backward compatibility with - LZMA Utils. - -ENVIRONMENT - LESSMETACHARS - A list of characters special to the shell. Set by xzless unless - it is already set in the environment. - - LESSOPEN - Set to a command line to invoke the xz(1) decompressor for pre- - processing the input files to less(1). - -SEE ALSO - less(1), xz(1), xzmore(1), zless(1) - - - -Tukaani 2009-07-05 XZLESS(1) diff --git a/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzmore.txt b/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzmore.txt deleted file mode 100644 index 6f6cfe93eea..00000000000 --- a/Build/source/utils/xz-4.999.9beta/doc/man/txt/xzmore.txt +++ /dev/null @@ -1,34 +0,0 @@ -XZMORE(1) XZ Utils XZMORE(1) - - - -NAME - xzmore, lzmore - view xz or lzma compressed (text) files - -SYNOPSIS - xzmore [filename ...] - lzmore [filename ...] - -DESCRIPTION - xzmore is a filter which allows examination of xz(1) or lzma(1) com- - pressed text files one screenful at a time on a soft-copy terminal. - - To use a pager other than the default more, set environment variable - PAGER to the name of the desired program. The name lzmore is provided - for backward compatibility with LZMA Utils. - - e or q When the prompt --More--(Next file: file) is printed, this com- - mand causes xzmore to exit. - - s When the prompt --More--(Next file: file) is printed, this com- - mand causes xzmore to skip the next file and continue. - - For list of keyboard commands supported while actually viewing the con- - tent of a file, refer to manual of the pager you use, usually more(1). - -SEE ALSO - more(1), xz(1), xzless(1), zmore(1) - - - -Tukaani 2009-07-05 XZMORE(1) diff --git a/Build/source/utils/xz-4.999.9beta/doc/xz-file-format.txt b/Build/source/utils/xz-4.999.9beta/doc/xz-file-format.txt deleted file mode 100644 index 4ed66506018..00000000000 --- a/Build/source/utils/xz-4.999.9beta/doc/xz-file-format.txt +++ /dev/null @@ -1,1150 +0,0 @@ - -The .xz File Format -=================== - -Version 1.0.4 (2009-08-27) - - - 0. Preface - 0.1. Notices and Acknowledgements - 0.2. Getting the Latest Version - 0.3. Version History - 1. Conventions - 1.1. Byte and Its Representation - 1.2. Multibyte Integers - 2. Overall Structure of .xz File - 2.1. Stream - 2.1.1. Stream Header - 2.1.1.1. Header Magic Bytes - 2.1.1.2. Stream Flags - 2.1.1.3. CRC32 - 2.1.2. Stream Footer - 2.1.2.1. CRC32 - 2.1.2.2. Backward Size - 2.1.2.3. Stream Flags - 2.1.2.4. Footer Magic Bytes - 2.2. Stream Padding - 3. Block - 3.1. Block Header - 3.1.1. Block Header Size - 3.1.2. Block Flags - 3.1.3. Compressed Size - 3.1.4. Uncompressed Size - 3.1.5. List of Filter Flags - 3.1.6. Header Padding - 3.1.7. CRC32 - 3.2. Compressed Data - 3.3. Block Padding - 3.4. Check - 4. Index - 4.1. Index Indicator - 4.2. Number of Records - 4.3. List of Records - 4.3.1. Unpadded Size - 4.3.2. Uncompressed Size - 4.4. Index Padding - 4.5. CRC32 - 5. Filter Chains - 5.1. Alignment - 5.2. Security - 5.3. Filters - 5.3.1. LZMA2 - 5.3.2. Branch/Call/Jump Filters for Executables - 5.3.3. Delta - 5.3.3.1. Format of the Encoded Output - 5.4. Custom Filter IDs - 5.4.1. Reserved Custom Filter ID Ranges - 6. Cyclic Redundancy Checks - 7. References - - -0. Preface - - This document describes the .xz file format (filename suffix - ".xz", MIME type "application/x-xz"). It is intended that this - this format replace the old .lzma format used by LZMA SDK and - LZMA Utils. - - -0.1. Notices and Acknowledgements - - This file format was designed by Lasse Collin - and Igor Pavlov. - - Special thanks for helping with this document goes to - Ville Koskinen. Thanks for helping with this document goes to - Mark Adler, H. Peter Anvin, Mikko Pouru, and Lars Wirzenius. - - This document has been put into the public domain. - - -0.2. Getting the Latest Version - - The latest official version of this document can be downloaded - from . - - Specific versions of this document have a filename - xz-file-format-X.Y.Z.txt where X.Y.Z is the version number. - For example, the version 1.0.0 of this document is available - at . - - -0.3. Version History - - Version Date Description - - 1.0.4 2009-08-27 Language improvements in Sections 1.2, - 2.1.1.2, 3.1.1, 3.1.2, and 5.3.1 - - 1.0.3 2009-06-05 Spelling fixes in Sections 5.1 and 5.4 - - 1.0.2 2009-06-04 Typo fixes in Sections 4 and 5.3.1 - - 1.0.1 2009-06-01 Typo fix in Section 0.3 and minor - clarifications to Sections 2, 2.2, - 3.3, 4.4, and 5.3.2 - - 1.0.0 2009-01-14 The first official version - - -1. Conventions - - The key words "MUST", "MUST NOT", "REQUIRED", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this - document are to be interpreted as described in [RFC-2119]. - - Indicating a warning means displaying a message, returning - appropriate exit status, or doing something else to let the - user know that something worth warning occurred. The operation - SHOULD still finish if a warning is indicated. - - Indicating an error means displaying a message, returning - appropriate exit status, or doing something else to let the - user know that something prevented successfully finishing the - operation. The operation MUST be aborted once an error has - been indicated. - - -1.1. Byte and Its Representation - - In this document, byte is always 8 bits. - - A "null byte" has all bits unset. That is, the value of a null - byte is 0x00. - - To represent byte blocks, this document uses notation that - is similar to the notation used in [RFC-1952]: - - +-------+ - | Foo | One byte. - +-------+ - - +---+---+ - | Foo | Two bytes; that is, some of the vertical bars - +---+---+ can be missing. - - +=======+ - | Foo | Zero or more bytes. - +=======+ - - In this document, a boxed byte or a byte sequence declared - using this notation is called "a field". The example field - above would be called "the Foo field" or plain "Foo". - - If there are many fields, they may be split to multiple lines. - This is indicated with an arrow ("--->"): - - +=====+ - | Foo | - +=====+ - - +=====+ - ---> | Bar | - +=====+ - - The above is equivalent to this: - - +=====+=====+ - | Foo | Bar | - +=====+=====+ - - -1.2. Multibyte Integers - - Multibyte integers of static length, such as CRC values, - are stored in little endian byte order (least significant - byte first). - - When smaller values are more likely than bigger values (for - example file sizes), multibyte integers are encoded in a - variable-length representation: - - Numbers in the range [0, 127] are copied as is, and take - one byte of space. - - Bigger numbers will occupy two or more bytes. All but the - last byte of the multibyte representation have the highest - (eighth) bit set. - - For now, the value of the variable-length integers is limited - to 63 bits, which limits the encoded size of the integer to - nine bytes. These limits may be increased in the future if - needed. - - The following C code illustrates encoding and decoding of - variable-length integers. The functions return the number of - bytes occupied by the integer (1-9), or zero on error. - - #include - #include - - size_t - encode(uint8_t buf[static 9], uint64_t num) - { - if (num > UINT64_MAX / 2) - return 0; - - size_t i = 0; - - while (num >= 0x80) { - buf[i++] = (uint8_t)(num) | 0x80; - num >>= 7; - } - - buf[i++] = (uint8_t)(num); - - return i; - } - - size_t - decode(const uint8_t buf[], size_t size_max, uint64_t *num) - { - if (size_max == 0) - return 0; - - if (size_max > 9) - size_max = 9; - - *num = buf[0] & 0x7F; - size_t i = 0; - - while (buf[i++] & 0x80) { - if (i >= size_max || buf[i] == 0x00) - return 0; - - *num |= (uint64_t)(buf[i] & 0x7F) << (i * 7); - } - - return i; - } - - -2. Overall Structure of .xz File - - A standalone .xz files consist of one or more Streams which may - have Stream Padding between or after them: - - +========+================+========+================+ - | Stream | Stream Padding | Stream | Stream Padding | ... - +========+================+========+================+ - - The sizes of Stream and Stream Padding are always multiples - of four bytes, thus the size of every valid .xz file MUST be - a multiple of four bytes. - - While a typical file contains only one Stream and no Stream - Padding, a decoder handling standalone .xz files SHOULD support - files that have more than one Stream or Stream Padding. - - In contrast to standalone .xz files, when the .xz file format - is used as an internal part of some other file format or - communication protocol, it usually is expected that the decoder - stops after the first Stream, and doesn't look for Stream - Padding or possibly other Streams. - - -2.1. Stream - - +-+-+-+-+-+-+-+-+-+-+-+-+=======+=======+ +=======+ - | Stream Header | Block | Block | ... | Block | - +-+-+-+-+-+-+-+-+-+-+-+-+=======+=======+ +=======+ - - +=======+-+-+-+-+-+-+-+-+-+-+-+-+ - ---> | Index | Stream Footer | - +=======+-+-+-+-+-+-+-+-+-+-+-+-+ - - All the above fields have a size that is a multiple of four. If - Stream is used as an internal part of another file format, it - is RECOMMENDED to make the Stream start at an offset that is - a multiple of four bytes. - - Stream Header, Index, and Stream Footer are always present in - a Stream. The maximum size of the Index field is 16 GiB (2^34). - - There are zero or more Blocks. The maximum number of Blocks is - limited only by the maximum size of the Index field. - - Total size of a Stream MUST be less than 8 EiB (2^63 bytes). - The same limit applies to the total amount of uncompressed - data stored in a Stream. - - If an implementation supports handling .xz files with multiple - concatenated Streams, it MAY apply the above limits to the file - as a whole instead of limiting per Stream basis. - - -2.1.1. Stream Header - - +---+---+---+---+---+---+-------+------+--+--+--+--+ - | Header Magic Bytes | Stream Flags | CRC32 | - +---+---+---+---+---+---+-------+------+--+--+--+--+ - - -2.1.1.1. Header Magic Bytes - - The first six (6) bytes of the Stream are so called Header - Magic Bytes. They can be used to identify the file type. - - Using a C array and ASCII: - const uint8_t HEADER_MAGIC[6] - = { 0xFD, '7', 'z', 'X', 'Z', 0x00 }; - - In plain hexadecimal: - FD 37 7A 58 5A 00 - - Notes: - - The first byte (0xFD) was chosen so that the files cannot - be erroneously detected as being in .lzma format, in which - the first byte is in the range [0x00, 0xE0]. - - The sixth byte (0x00) was chosen to prevent applications - from misdetecting the file as a text file. - - If the Header Magic Bytes don't match, the decoder MUST - indicate an error. - - -2.1.1.2. Stream Flags - - The first byte of Stream Flags is always a null byte. In the - future, this byte may be used to indicate a new Stream version - or other Stream properties. - - The second byte of Stream Flags is a bit field: - - Bit(s) Mask Description - 0-3 0x0F Type of Check (see Section 3.4): - ID Size Check name - 0x00 0 bytes None - 0x01 4 bytes CRC32 - 0x02 4 bytes (Reserved) - 0x03 4 bytes (Reserved) - 0x04 8 bytes CRC64 - 0x05 8 bytes (Reserved) - 0x06 8 bytes (Reserved) - 0x07 16 bytes (Reserved) - 0x08 16 bytes (Reserved) - 0x09 16 bytes (Reserved) - 0x0A 32 bytes SHA-256 - 0x0B 32 bytes (Reserved) - 0x0C 32 bytes (Reserved) - 0x0D 64 bytes (Reserved) - 0x0E 64 bytes (Reserved) - 0x0F 64 bytes (Reserved) - 4-7 0xF0 Reserved for future use; MUST be zero for now. - - Implementations SHOULD support at least the Check IDs 0x00 - (None) and 0x01 (CRC32). Supporting other Check IDs is - OPTIONAL. If an unsupported Check is used, the decoder SHOULD - indicate a warning or error. - - If any reserved bit is set, the decoder MUST indicate an error. - It is possible that there is a new field present which the - decoder is not aware of, and can thus parse the Stream Header - incorrectly. - - -2.1.1.3. CRC32 - - The CRC32 is calculated from the Stream Flags field. It is - stored as an unsigned 32-bit little endian integer. If the - calculated value does not match the stored one, the decoder - MUST indicate an error. - - The idea is that Stream Flags would always be two bytes, even - if new features are needed. This way old decoders will be able - to verify the CRC32 calculated from Stream Flags, and thus - distinguish between corrupt files (CRC32 doesn't match) and - files that the decoder doesn't support (CRC32 matches but - Stream Flags has reserved bits set). - - -2.1.2. Stream Footer - - +-+-+-+-+---+---+---+---+-------+------+----------+---------+ - | CRC32 | Backward Size | Stream Flags | Footer Magic Bytes | - +-+-+-+-+---+---+---+---+-------+------+----------+---------+ - - -2.1.2.1. CRC32 - - The CRC32 is calculated from the Backward Size and Stream Flags - fields. It is stored as an unsigned 32-bit little endian - integer. If the calculated value does not match the stored one, - the decoder MUST indicate an error. - - The reason to have the CRC32 field before the Backward Size and - Stream Flags fields is to keep the four-byte fields aligned to - a multiple of four bytes. - - -2.1.2.2. Backward Size - - Backward Size is stored as a 32-bit little endian integer, - which indicates the size of the Index field as multiple of - four bytes, minimum value being four bytes: - - real_backward_size = (stored_backward_size + 1) * 4; - - If the stored value does not match the real size of the Index - field, the decoder MUST indicate an error. - - Using a fixed-size integer to store Backward Size makes - it slightly simpler to parse the Stream Footer when the - application needs to parse the Stream backwards. - - -2.1.2.3. Stream Flags - - This is a copy of the Stream Flags field from the Stream - Header. The information stored to Stream Flags is needed - when parsing the Stream backwards. The decoder MUST compare - the Stream Flags fields in both Stream Header and Stream - Footer, and indicate an error if they are not identical. - - -2.1.2.4. Footer Magic Bytes - - As the last step of the decoding process, the decoder MUST - verify the existence of Footer Magic Bytes. If they don't - match, an error MUST be indicated. - - Using a C array and ASCII: - const uint8_t FOOTER_MAGIC[2] = { 'Y', 'Z' }; - - In hexadecimal: - 59 5A - - The primary reason to have Footer Magic Bytes is to make - it easier to detect incomplete files quickly, without - uncompressing. If the file does not end with Footer Magic Bytes - (excluding Stream Padding described in Section 2.2), it cannot - be undamaged, unless someone has intentionally appended garbage - after the end of the Stream. - - -2.2. Stream Padding - - Only the decoders that support decoding of concatenated Streams - MUST support Stream Padding. - - Stream Padding MUST contain only null bytes. To preserve the - four-byte alignment of consecutive Streams, the size of Stream - Padding MUST be a multiple of four bytes. Empty Stream Padding - is allowed. If these requirements are not met, the decoder MUST - indicate an error. - - Note that non-empty Stream Padding is allowed at the end of the - file; there doesn't need to be a new Stream after non-empty - Stream Padding. This can be convenient in certain situations - [GNU-tar]. - - The possibility of Stream Padding MUST be taken into account - when designing an application that parses Streams backwards, - and the application supports concatenated Streams. - - -3. Block - - +==============+=================+===============+=======+ - | Block Header | Compressed Data | Block Padding | Check | - +==============+=================+===============+=======+ - - -3.1. Block Header - - +-------------------+-------------+=================+ - | Block Header Size | Block Flags | Compressed Size | - +-------------------+-------------+=================+ - - +===================+======================+ - ---> | Uncompressed Size | List of Filter Flags | - +===================+======================+ - - +================+--+--+--+--+ - ---> | Header Padding | CRC32 | - +================+--+--+--+--+ - - -3.1.1. Block Header Size - - This field overlaps with the Index Indicator field (see - Section 4.1). - - This field contains the size of the Block Header field, - including the Block Header Size field itself. Valid values are - in the range [0x01, 0xFF], which indicate the size of the Block - Header as multiples of four bytes, minimum size being eight - bytes: - - real_header_size = (encoded_header_size + 1) * 4; - - If a Block Header bigger than 1024 bytes is needed in the - future, a new field can be added between the Block Header and - Compressed Data fields. The presence of this new field would - be indicated in the Block Header field. - - -3.1.2. Block Flags - - The Block Flags field is a bit field: - - Bit(s) Mask Description - 0-1 0x03 Number of filters (1-4) - 2-5 0x3C Reserved for future use; MUST be zero for now. - 6 0x40 The Compressed Size field is present. - 7 0x80 The Uncompressed Size field is present. - - If any reserved bit is set, the decoder MUST indicate an error. - It is possible that there is a new field present which the - decoder is not aware of, and can thus parse the Block Header - incorrectly. - - -3.1.3. Compressed Size - - This field is present only if the appropriate bit is set in - the Block Flags field (see Section 3.1.2). - - The Compressed Size field contains the size of the Compressed - Data field, which MUST be non-zero. Compressed Size is stored - using the encoding described in Section 1.2. If the Compressed - Size doesn't match the size of the Compressed Data field, the - decoder MUST indicate an error. - - -3.1.4. Uncompressed Size - - This field is present only if the appropriate bit is set in - the Block Flags field (see Section 3.1.2). - - The Uncompressed Size field contains the size of the Block - after uncompressing. Uncompressed Size is stored using the - encoding described in Section 1.2. If the Uncompressed Size - does not match the real uncompressed size, the decoder MUST - indicate an error. - - Storing the Compressed Size and Uncompressed Size fields serves - several purposes: - - The decoder knows how much memory it needs to allocate - for a temporary buffer in multithreaded mode. - - Simple error detection: wrong size indicates a broken file. - - Seeking forwards to a specific location in streamed mode. - - It should be noted that the only reliable way to determine - the real uncompressed size is to uncompress the Block, - because the Block Header and Index fields may contain - (intentionally or unintentionally) invalid information. - - -3.1.5. List of Filter Flags - - +================+================+ +================+ - | Filter 0 Flags | Filter 1 Flags | ... | Filter n Flags | - +================+================+ +================+ - - The number of Filter Flags fields is stored in the Block Flags - field (see Section 3.1.2). - - The format of each Filter Flags field is as follows: - - +===========+====================+===================+ - | Filter ID | Size of Properties | Filter Properties | - +===========+====================+===================+ - - Both Filter ID and Size of Properties are stored using the - encoding described in Section 1.2. Size of Properties indicates - the size of the Filter Properties field as bytes. The list of - officially defined Filter IDs and the formats of their Filter - Properties are described in Section 5.3. - - Filter IDs greater than or equal to 0x4000_0000_0000_0000 - (2^62) are reserved for implementation-specific internal use. - These Filter IDs MUST never be used in List of Filter Flags. - - -3.1.6. Header Padding - - This field contains as many null byte as it is needed to make - the Block Header have the size specified in Block Header Size. - If any of the bytes are not null bytes, the decoder MUST - indicate an error. It is possible that there is a new field - present which the decoder is not aware of, and can thus parse - the Block Header incorrectly. - - -3.1.7. CRC32 - - The CRC32 is calculated over everything in the Block Header - field except the CRC32 field itself. It is stored as an - unsigned 32-bit little endian integer. If the calculated - value does not match the stored one, the decoder MUST indicate - an error. - - By verifying the CRC32 of the Block Header before parsing the - actual contents allows the decoder to distinguish between - corrupt and unsupported files. - - -3.2. Compressed Data - - The format of Compressed Data depends on Block Flags and List - of Filter Flags. Excluding the descriptions of the simplest - filters in Section 5.3, the format of the filter-specific - encoded data is out of scope of this document. - - -3.3. Block Padding - - Block Padding MUST contain 0-3 null bytes to make the size of - the Block a multiple of four bytes. This can be needed when - the size of Compressed Data is not a multiple of four. If any - of the bytes in Block Padding are not null bytes, the decoder - MUST indicate an error. - - -3.4. Check - - The type and size of the Check field depends on which bits - are set in the Stream Flags field (see Section 2.1.1.2). - - The Check, when used, is calculated from the original - uncompressed data. If the calculated Check does not match the - stored one, the decoder MUST indicate an error. If the selected - type of Check is not supported by the decoder, it SHOULD - indicate a warning or error. - - -4. Index - - +-----------------+===================+ - | Index Indicator | Number of Records | - +-----------------+===================+ - - +=================+===============+-+-+-+-+ - ---> | List of Records | Index Padding | CRC32 | - +=================+===============+-+-+-+-+ - - Index serves several purposes. Using it, one can - - verify that all Blocks in a Stream have been processed; - - find out the uncompressed size of a Stream; and - - quickly access the beginning of any Block (random access). - - -4.1. Index Indicator - - This field overlaps with the Block Header Size field (see - Section 3.1.1). The value of Index Indicator is always 0x00. - - -4.2. Number of Records - - This field indicates how many Records there are in the List - of Records field, and thus how many Blocks there are in the - Stream. The value is stored using the encoding described in - Section 1.2. If the decoder has decoded all the Blocks of the - Stream, and then notices that the Number of Records doesn't - match the real number of Blocks, the decoder MUST indicate an - error. - - -4.3. List of Records - - List of Records consists of as many Records as indicated by the - Number of Records field: - - +========+========+ - | Record | Record | ... - +========+========+ - - Each Record contains information about one Block: - - +===============+===================+ - | Unpadded Size | Uncompressed Size | - +===============+===================+ - - If the decoder has decoded all the Blocks of the Stream, it - MUST verify that the contents of the Records match the real - Unpadded Size and Uncompressed Size of the respective Blocks. - - Implementation hint: It is possible to verify the Index with - constant memory usage by calculating for example SHA-256 of - both the real size values and the List of Records, then - comparing the hash values. Implementing this using - non-cryptographic hash like CRC32 SHOULD be avoided unless - small code size is important. - - If the decoder supports random-access reading, it MUST verify - that Unpadded Size and Uncompressed Size of every completely - decoded Block match the sizes stored in the Index. If only - partial Block is decoded, the decoder MUST verify that the - processed sizes don't exceed the sizes stored in the Index. - - -4.3.1. Unpadded Size - - This field indicates the size of the Block excluding the Block - Padding field. That is, Unpadded Size is the size of the Block - Header, Compressed Data, and Check fields. Unpadded Size is - stored using the encoding described in Section 1.2. The value - MUST never be zero; with the current structure of Blocks, the - actual minimum value for Unpadded Size is five. - - Implementation note: Because the size of the Block Padding - field is not included in Unpadded Size, calculating the total - size of a Stream or doing random-access reading requires - calculating the actual size of the Blocks by rounding Unpadded - Sizes up to the next multiple of four. - - The reason to exclude Block Padding from Unpadded Size is to - ease making a raw copy of Compressed Data without Block - Padding. This can be useful, for example, if someone wants - to convert Streams to some other file format quickly. - - -4.3.2. Uncompressed Size - - This field indicates the Uncompressed Size of the respective - Block as bytes. The value is stored using the encoding - described in Section 1.2. - - -4.4. Index Padding - - This field MUST contain 0-3 null bytes to pad the Index to - a multiple of four bytes. If any of the bytes are not null - bytes, the decoder MUST indicate an error. - - -4.5. CRC32 - - The CRC32 is calculated over everything in the Index field - except the CRC32 field itself. The CRC32 is stored as an - unsigned 32-bit little endian integer. If the calculated - value does not match the stored one, the decoder MUST indicate - an error. - - -5. Filter Chains - - The Block Flags field defines how many filters are used. When - more than one filter is used, the filters are chained; that is, - the output of one filter is the input of another filter. The - following figure illustrates the direction of data flow. - - v Uncompressed Data ^ - | Filter 0 | - Encoder | Filter 1 | Decoder - | Filter n | - v Compressed Data ^ - - -5.1. Alignment - - Alignment of uncompressed input data is usually the job of - the application producing the data. For example, to get the - best results, an archiver tool should make sure that all - PowerPC executable files in the archive stream start at - offsets that are multiples of four bytes. - - Some filters, for example LZMA2, can be configured to take - advantage of specified alignment of input data. Note that - taking advantage of aligned input can be beneficial also when - a filter is not the first filter in the chain. For example, - if you compress PowerPC executables, you may want to use the - PowerPC filter and chain that with the LZMA2 filter. Because - not only the input but also the output alignment of the PowerPC - filter is four bytes, it is now beneficial to set LZMA2 - settings so that the LZMA2 encoder can take advantage of its - four-byte-aligned input data. - - The output of the last filter in the chain is stored to the - Compressed Data field, which is is guaranteed to be aligned - to a multiple of four bytes relative to the beginning of the - Stream. This can increase - - speed, if the filtered data is handled multiple bytes at - a time by the filter-specific encoder and decoder, - because accessing aligned data in computer memory is - usually faster; and - - compression ratio, if the output data is later compressed - with an external compression tool. - - -5.2. Security - - If filters would be allowed to be chained freely, it would be - possible to create malicious files, that would be very slow to - decode. Such files could be used to create denial of service - attacks. - - Slow files could occur when multiple filters are chained: - - v Compressed input data - | Filter 1 decoder (last filter) - | Filter 0 decoder (non-last filter) - v Uncompressed output data - - The decoder of the last filter in the chain produces a lot of - output from little input. Another filter in the chain takes the - output of the last filter, and produces very little output - while consuming a lot of input. As a result, a lot of data is - moved inside the filter chain, but the filter chain as a whole - gets very little work done. - - To prevent this kind of slow files, there are restrictions on - how the filters can be chained. These restrictions MUST be - taken into account when designing new filters. - - The maximum number of filters in the chain has been limited to - four, thus there can be at maximum of three non-last filters. - Of these three non-last filters, only two are allowed to change - the size of the data. - - The non-last filters, that change the size of the data, MUST - have a limit how much the decoder can compress the data: the - decoder SHOULD produce at least n bytes of output when the - filter is given 2n bytes of input. This limit is not - absolute, but significant deviations MUST be avoided. - - The above limitations guarantee that if the last filter in the - chain produces 4n bytes of output, the chain as a whole will - produce at least n bytes of output. - - -5.3. Filters - -5.3.1. LZMA2 - - LZMA (Lempel-Ziv-Markov chain-Algorithm) is a general-purpose - compression algorithm with high compression ratio and fast - decompression. LZMA is based on LZ77 and range coding - algorithms. - - LZMA2 is an extension on top of the original LZMA. LZMA2 uses - LZMA internally, but adds support for flushing the encoder, - uncompressed chunks, eases stateful decoder implementations, - and improves support for multithreading. Thus, the plain LZMA - will not be supported in this file format. - - Filter ID: 0x21 - Size of Filter Properties: 1 byte - Changes size of data: Yes - Allow as a non-last filter: No - Allow as the last filter: Yes - - Preferred alignment: - Input data: Adjustable to 1/2/4/8/16 byte(s) - Output data: 1 byte - - The format of the one-byte Filter Properties field is as - follows: - - Bits Mask Description - 0-5 0x3F Dictionary Size - 6-7 0xC0 Reserved for future use; MUST be zero for now. - - Dictionary Size is encoded with one-bit mantissa and five-bit - exponent. The smallest dictionary size is 4 KiB and the biggest - is 4 GiB. - - Raw value Mantissa Exponent Dictionary size - 0 2 11 4 KiB - 1 3 11 6 KiB - 2 2 12 8 KiB - 3 3 12 12 KiB - 4 2 13 16 KiB - 5 3 13 24 KiB - 6 2 14 32 KiB - ... ... ... ... - 35 3 27 768 MiB - 36 2 28 1024 MiB - 37 3 29 1536 MiB - 38 2 30 2048 MiB - 39 3 30 3072 MiB - 40 2 31 4096 MiB - 1 B - - Instead of having a table in the decoder, the dictionary size - can be decoded using the following C code: - - const uint8_t bits = get_dictionary_flags() & 0x3F; - if (bits > 40) - return DICTIONARY_TOO_BIG; // Bigger than 4 GiB - - uint32_t dictionary_size; - if (bits == 40) { - dictionary_size = UINT32_MAX; - } else { - dictionary_size = 2 | (bits & 1); - dictionary_size <<= bits / 2 + 11; - } - - -5.3.2. Branch/Call/Jump Filters for Executables - - These filters convert relative branch, call, and jump - instructions to their absolute counterparts in executable - files. This conversion increases redundancy and thus - compression ratio. - - Size of Filter Properties: 0 or 4 bytes - Changes size of data: No - Allow as a non-last filter: Yes - Allow as the last filter: No - - Below is the list of filters in this category. The alignment - is the same for both input and output data. - - Filter ID Alignment Description - 0x04 1 byte x86 filter (BCJ) - 0x05 4 bytes PowerPC (big endian) filter - 0x06 16 bytes IA64 filter - 0x07 4 bytes ARM (little endian) filter - 0x08 2 bytes ARM Thumb (little endian) filter - 0x09 4 bytes SPARC filter - - If the size of Filter Properties is four bytes, the Filter - Properties field contains the start offset used for address - conversions. It is stored as an unsigned 32-bit little endian - integer. The start offset MUST be a multiple of the alignment - of the filter as listed in the table above; if it isn't, the - decoder MUST indicate an error. If the size of Filter - Properties is zero, the start offset is zero. - - Setting the start offset may be useful if an executable has - multiple sections, and there are many cross-section calls. - Taking advantage of this feature usually requires usage of - the Subblock filter, whose design is not complete yet. - - -5.3.3. Delta - - The Delta filter may increase compression ratio when the value - of the next byte correlates with the value of an earlier byte - at specified distance. - - Filter ID: 0x03 - Size of Filter Properties: 1 byte - Changes size of data: No - Allow as a non-last filter: Yes - Allow as the last filter: No - - Preferred alignment: - Input data: 1 byte - Output data: Same as the original input data - - The Properties byte indicates the delta distance, which can be - 1-256 bytes backwards from the current byte: 0x00 indicates - distance of 1 byte and 0xFF distance of 256 bytes. - - -5.3.3.1. Format of the Encoded Output - - The code below illustrates both encoding and decoding with - the Delta filter. - - // Distance is in the range [1, 256]. - const unsigned int distance = get_properties_byte() + 1; - uint8_t pos = 0; - uint8_t delta[256]; - - memset(delta, 0, sizeof(delta)); - - while (1) { - const int byte = read_byte(); - if (byte == EOF) - break; - - uint8_t tmp = delta[(uint8_t)(distance + pos)]; - if (is_encoder) { - tmp = (uint8_t)(byte) - tmp; - delta[pos] = (uint8_t)(byte); - } else { - tmp = (uint8_t)(byte) + tmp; - delta[pos] = tmp; - } - - write_byte(tmp); - --pos; - } - - -5.4. Custom Filter IDs - - If a developer wants to use custom Filter IDs, he has two - choices. The first choice is to contact Lasse Collin and ask - him to allocate a range of IDs for the developer. - - The second choice is to generate a 40-bit random integer, - which the developer can use as his personal Developer ID. - To minimize the risk of collisions, Developer ID has to be - a randomly generated integer, not manually selected "hex word". - The following command, which works on many free operating - systems, can be used to generate Developer ID: - - dd if=/dev/urandom bs=5 count=1 | hexdump - - The developer can then use his Developer ID to create unique - (well, hopefully unique) Filter IDs. - - Bits Mask Description - 0-15 0x0000_0000_0000_FFFF Filter ID - 16-55 0x00FF_FFFF_FFFF_0000 Developer ID - 56-62 0x3F00_0000_0000_0000 Static prefix: 0x3F - - The resulting 63-bit integer will use 9 bytes of space when - stored using the encoding described in Section 1.2. To get - a shorter ID, see the beginning of this Section how to - request a custom ID range. - - -5.4.1. Reserved Custom Filter ID Ranges - - Range Description - 0x0000_0300 - 0x0000_04FF Reserved to ease .7z compatibility - 0x0002_0000 - 0x0007_FFFF Reserved to ease .7z compatibility - 0x0200_0000 - 0x07FF_FFFF Reserved to ease .7z compatibility - - -6. Cyclic Redundancy Checks - - There are several incompatible variations to calculate CRC32 - and CRC64. For simplicity and clarity, complete examples are - provided to calculate the checks as they are used in this file - format. Implementations MAY use different code as long as it - gives identical results. - - The program below reads data from standard input, calculates - the CRC32 and CRC64 values, and prints the calculated values - as big endian hexadecimal strings to standard output. - - #include - #include - #include - - uint32_t crc32_table[256]; - uint64_t crc64_table[256]; - - void - init(void) - { - static const uint32_t poly32 = UINT32_C(0xEDB88320); - static const uint64_t poly64 - = UINT64_C(0xC96C5795D7870F42); - - for (size_t i = 0; i < 256; ++i) { - uint32_t crc32 = i; - uint64_t crc64 = i; - - for (size_t j = 0; j < 8; ++j) { - if (crc32 & 1) - crc32 = (crc32 >> 1) ^ poly32; - else - crc32 >>= 1; - - if (crc64 & 1) - crc64 = (crc64 >> 1) ^ poly64; - else - crc64 >>= 1; - } - - crc32_table[i] = crc32; - crc64_table[i] = crc64; - } - } - - uint32_t - crc32(const uint8_t *buf, size_t size, uint32_t crc) - { - crc = ~crc; - for (size_t i = 0; i < size; ++i) - crc = crc32_table[buf[i] ^ (crc & 0xFF)] - ^ (crc >> 8); - return ~crc; - } - - uint64_t - crc64(const uint8_t *buf, size_t size, uint64_t crc) - { - crc = ~crc; - for (size_t i = 0; i < size; ++i) - crc = crc64_table[buf[i] ^ (crc & 0xFF)] - ^ (crc >> 8); - return ~crc; - } - - int - main() - { - init(); - - uint32_t value32 = 0; - uint64_t value64 = 0; - uint64_t total_size = 0; - uint8_t buf[8192]; - - while (1) { - const size_t buf_size - = fread(buf, 1, sizeof(buf), stdin); - if (buf_size == 0) - break; - - total_size += buf_size; - value32 = crc32(buf, buf_size, value32); - value64 = crc64(buf, buf_size, value64); - } - - printf("Bytes: %" PRIu64 "\n", total_size); - printf("CRC-32: 0x%08" PRIX32 "\n", value32); - printf("CRC-64: 0x%016" PRIX64 "\n", value64); - - return 0; - } - - -7. References - - LZMA SDK - The original LZMA implementation - http://7-zip.org/sdk.html - - LZMA Utils - LZMA adapted to POSIX-like systems - http://tukaani.org/lzma/ - - XZ Utils - The next generation of LZMA Utils - http://tukaani.org/xz/ - - [RFC-1952] - GZIP file format specification version 4.3 - http://www.ietf.org/rfc/rfc1952.txt - - Notation of byte boxes in section "2.1. Overall conventions" - - [RFC-2119] - Key words for use in RFCs to Indicate Requirement Levels - http://www.ietf.org/rfc/rfc2119.txt - - [GNU-tar] - GNU tar 1.21 manual - http://www.gnu.org/software/tar/manual/html_node/Blocking-Factor.html - - Node 9.4.2 "Blocking Factor", paragraph that begins - "gzip will complain about trailing garbage" - - Note that this URL points to the latest version of the - manual, and may some day not contain the note which is in - 1.21. For the exact version of the manual, download GNU - tar 1.21: ftp://ftp.gnu.org/pub/gnu/tar/tar-1.21.tar.gz - diff --git a/Build/source/utils/xz-4.999.9beta/dos/Makefile b/Build/source/utils/xz-4.999.9beta/dos/Makefile deleted file mode 100644 index 0b8a088c183..00000000000 --- a/Build/source/utils/xz-4.999.9beta/dos/Makefile +++ /dev/null @@ -1,255 +0,0 @@ -############################################################################### -# -# Makefile to build XZ Utils using DJGPP -# -# Make flags to alter compilation: -# -# DEBUG=1 Enable assertions. Don't use this for production builds! -# You may also want to set CFLAGS="-g -O0" to disable -# optimizations. -# -# The usual CPPFLAGS and CFLAGS are supported too. -# -############################################################################### -# -# Author: Lasse Collin -# -# This file has been put into the public domain. -# You can do whatever you want with this file. -# -############################################################################### - -CC = gcc -AR = ar -STRIP = strip -SED = sed -RM = rm -f - -CFLAGS = -g -Wextra -Wfatal-errors -Wall -march=i386 -mtune=i686 -O2 - -# NOTE: -fgnu89-inline is needed on DJGPP 2.04 beta and GCC 4.3.2 -# because time.h uses GNU-style "extern inline". -ALL_CFLAGS = -std=gnu99 -fgnu89-inline - -ALL_CPPFLAGS = \ - -I. \ - -I../lib \ - -I../src/common \ - -I../src/liblzma/api \ - -I../src/liblzma/common \ - -I../src/liblzma/check \ - -I../src/liblzma/rangecoder \ - -I../src/liblzma/lz \ - -I../src/liblzma/lzma \ - -I../src/liblzma/delta \ - -I../src/liblzma/simple \ - -I../src/liblzma/subblock - -ALL_CPPFLAGS += -DHAVE_CONFIG_H - -ifdef DEBUG -STRIP := rem Skipping strip -else -ALL_CPPFLAGS += -DNDEBUG -endif - -ALL_CPPFLAGS += $(CPPFLAGS) -ALL_CFLAGS += $(CFLAGS) - - -################ -# Common rules # -################ - -.PHONY: all clean -all: liblzma.a getopt.a xzdec.exe lzmadec.exe xz.exe -clean: liblzma-clean getopt-clean xzdec-clean xz-clean - - -############# -# liblzma.a # -############# - -LIBLZMA_SRCS_C = \ - ../src/liblzma/common/alone_decoder.c \ - ../src/liblzma/common/alone_encoder.c \ - ../src/liblzma/common/auto_decoder.c \ - ../src/liblzma/common/block_buffer_decoder.c \ - ../src/liblzma/common/block_buffer_encoder.c \ - ../src/liblzma/common/block_decoder.c \ - ../src/liblzma/common/block_encoder.c \ - ../src/liblzma/common/block_header_decoder.c \ - ../src/liblzma/common/block_header_encoder.c \ - ../src/liblzma/common/block_util.c \ - ../src/liblzma/common/common.c \ - ../src/liblzma/common/easy_buffer_encoder.c \ - ../src/liblzma/common/easy_decoder_memusage.c \ - ../src/liblzma/common/easy_encoder.c \ - ../src/liblzma/common/easy_encoder_memusage.c \ - ../src/liblzma/common/easy_preset.c \ - ../src/liblzma/common/filter_common.c \ - ../src/liblzma/common/filter_decoder.c \ - ../src/liblzma/common/filter_encoder.c \ - ../src/liblzma/common/filter_flags_decoder.c \ - ../src/liblzma/common/filter_flags_encoder.c \ - ../src/liblzma/common/index.c \ - ../src/liblzma/common/index_decoder.c \ - ../src/liblzma/common/index_encoder.c \ - ../src/liblzma/common/index_hash.c \ - ../src/liblzma/common/stream_buffer_decoder.c \ - ../src/liblzma/common/stream_buffer_encoder.c \ - ../src/liblzma/common/stream_decoder.c \ - ../src/liblzma/common/stream_encoder.c \ - ../src/liblzma/common/stream_flags_common.c \ - ../src/liblzma/common/stream_flags_decoder.c \ - ../src/liblzma/common/stream_flags_encoder.c \ - ../src/liblzma/common/vli_decoder.c \ - ../src/liblzma/common/vli_encoder.c \ - ../src/liblzma/common/vli_size.c \ - ../src/liblzma/check/check.c \ - ../src/liblzma/check/crc32_table.c \ - ../src/liblzma/check/crc64_table.c \ - ../src/liblzma/check/sha256.c \ - ../src/liblzma/rangecoder/price_table.c \ - ../src/liblzma/lz/lz_decoder.c \ - ../src/liblzma/lz/lz_encoder.c \ - ../src/liblzma/lz/lz_encoder_mf.c \ - ../src/liblzma/lzma/fastpos_table.c \ - ../src/liblzma/lzma/lzma2_decoder.c \ - ../src/liblzma/lzma/lzma2_encoder.c \ - ../src/liblzma/lzma/lzma_decoder.c \ - ../src/liblzma/lzma/lzma_encoder.c \ - ../src/liblzma/lzma/lzma_encoder_optimum_fast.c \ - ../src/liblzma/lzma/lzma_encoder_optimum_normal.c \ - ../src/liblzma/lzma/lzma_encoder_presets.c \ - ../src/liblzma/delta/delta_common.c \ - ../src/liblzma/delta/delta_decoder.c \ - ../src/liblzma/delta/delta_encoder.c \ - ../src/liblzma/simple/arm.c \ - ../src/liblzma/simple/armthumb.c \ - ../src/liblzma/simple/ia64.c \ - ../src/liblzma/simple/powerpc.c \ - ../src/liblzma/simple/simple_coder.c \ - ../src/liblzma/simple/simple_decoder.c \ - ../src/liblzma/simple/simple_encoder.c \ - ../src/liblzma/simple/sparc.c \ - ../src/liblzma/simple/x86.c - -LIBLZMA_SRCS_ASM = \ - ../src/liblzma/check/crc32_x86.S \ - ../src/liblzma/check/crc64_x86.S - -LIBLZMA_OBJS_C = $(LIBLZMA_SRCS_C:.c=.o) -LIBLZMA_OBJS_ASM = $(LIBLZMA_SRCS_ASM:.S=.o) -LIBLZMA_OBJS = $(LIBLZMA_OBJS_C) $(LIBLZMA_OBJS_ASM) - -$(LIBLZMA_OBJS_C): %.o: %.c - $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< - -$(LIBLZMA_OBJS_ASM): %.o: %.S - $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< - -liblzma.a: $(LIBLZMA_OBJS) - $(RM) $@ - $(AR) rcs $@ $(LIBLZMA_OBJS) - $(STRIP) --strip-unneeded $@ - -# Avoid too long command lines. -.PHONY: liblzma-clean $(LIBLZMA_OBJS:.o=-clean) -liblzma-clean: $(LIBLZMA_OBJS:.o=-clean) - -$(RM) liblzma.a - -$(LIBLZMA_OBJS:.o=-clean): - -$(RM) $(@:-clean=.o) - - -############### -# getopt_long # -############### - -GETOPT_SRCS = \ - ../lib/getopt.c \ - ../lib/getopt1.c - -GETOPT_OBJS = $(GETOPT_SRCS:.c=.o) - -GETOPT_H = ../lib/getopt.h - -$(GETOPT_H): %.h: %.in.h - $(SED) "" $< > $@ - -$(GETOPT_OBJS): %.o: %.c $(GETOPT_H) - $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< - -getopt.a: $(GETOPT_OBJS) - $(RM) $@ - $(AR) rcs $@ $(GETOPT_OBJS) - $(STRIP) --strip-unneeded $@ - -getopt-clean: - $(RM) $(GETOPT_H) $(GETOPT_OBJS) getopt.a - - -########################### -# xzdec.exe & lzmadec.exe # -########################### - -XZDEC_SRCS = ../src/xzdec/xzdec.c - -xzdec.exe: getopt.a liblzma.a $(XZDEC_SRCS) - $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) $(XZDEC_SRCS) -o $@ getopt.a liblzma.a - $(STRIP) --strip-all $@ - exe2coff $@ - $(RM) $@ - copy /b $(DJGPP:DJGPP.ENV=BIN\CWSDSTUB.EXE) + $(@:.exe=) $@ - $(RM) $(@:.exe=) - -lzmadec.exe: getopt.a liblzma.a $(XZDEC_SRCS) - $(CC) $(ALL_CPPFLAGS) -DLZMADEC $(ALL_CFLAGS) $(XZDEC_SRCS) -o $@ getopt.a liblzma.a - $(STRIP) --strip-all $@ - exe2coff $@ - $(RM) $@ - copy /b $(DJGPP:DJGPP.ENV=BIN\CWSDSTUB.EXE) + $(@:.exe=) $@ - $(RM) $(@:.exe=) - -.PHONY: xzdec-clean -xzdec-clean: - -$(RM) xzdec.exe lzmadec.exe xzdec lzmadec - - -########## -# xz.exe # -########## - -XZ_SRCS = \ - ../src/xz/args.c \ - ../src/xz/coder.c \ - ../src/xz/file_io.c \ - ../src/xz/hardware.c \ - ../src/xz/main.c \ - ../src/xz/message.c \ - ../src/xz/options.c \ - ../src/xz/signals.c \ - ../src/xz/suffix.c \ - ../src/xz/util.c - -XZ_OBJS = $(XZ_SRCS:.c=.o) - -$(XZ_OBJS): %.o: %.c - $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< - -xz.exe: getopt.a liblzma.a $(XZ_OBJS) - $(CC) $(ALL_CFLAGS) $(XZ_OBJS) -o $@ getopt.a liblzma.a - $(STRIP) --strip-all $@ - exe2coff $@ - $(RM) $@ - copy /b $(DJGPP:DJGPP.ENV=BIN\CWSDSTUB.EXE) + $(@:.exe=) $@ - $(RM) $(@:.exe=) - -# Avoid too long command lines. -.PHONY: xz-clean $(XZ_OBJS:.o=-clean) -xz-clean: $(XZ_OBJS:.o=-clean) - -$(RM) xz.exe xz - -$(XZ_OBJS:.o=-clean): - -$(RM) $(@:-clean=.o) diff --git a/Build/source/utils/xz-4.999.9beta/dos/README b/Build/source/utils/xz-4.999.9beta/dos/README deleted file mode 100644 index 649c58c438d..00000000000 --- a/Build/source/utils/xz-4.999.9beta/dos/README +++ /dev/null @@ -1,113 +0,0 @@ - -XZ Utils on DOS -=============== - -Introduction - - This document explains how to build XZ Utils for DOS using DJGPP. - The resulting binaries should run at least on various DOS versions - and under Windows 95/98/98SE/ME, which cannot run the Windows version - of XZ Utils. - - This is currently experimental and has got very little testing. - - -Getting and Installing DJGPP - - You may use to help - deciding what to download, but as of writing (2009-02-13) that may - not be the most convenient way taking into account what components - are actually required to build XZ Utils. However, using the - zip-picker can still be worth doing to get nice short summary of - installation instructions (they can be found from readme.1st too). - - For more manual method, first select a mirror from - . You need - the following files: - - unzip32.exe - beta/v2/djdev204.zip - v2gnu/bnu219b.zip - v2gnu/gcc432b.zip - v2gnu/mak3791b.zip - v2gnu/sed415b.zip - v2misc/csdpmi5b.zip - - If newer versions are available, probably you should try them first. - Note that djdev203.zip is too old to build XZ Utils; you need at - least djdev204.zip. Also note that you want csdpmi5b.zip even if you - run under Windows or DOSEMU, because the XZ Utils Makefile will embed - cwsdstub.exe to the resulting binaries. - - See the instructions in readme.1st found from djdev204.zip. Here's - a short summary, but you should still read readme.1st. - - C:\> mkdir DJGPP - C:\> cd DJGPP - C:\DJGPP> c:\download\unzip32 c:\download\djdev204.zip - C:\DJGPP> c:\download\unzip32 c:\download\bnu219b.zip - C:\DJGPP> c:\download\unzip32 c:\download\gcc432b.zip - C:\DJGPP> c:\download\unzip32 c:\download\mak3791b.zip - C:\DJGPP> c:\download\unzip32 c:\download\sed415b.zip - C:\DJGPP> c:\download\unzip32 c:\download\csdpmi5b.zip - - C:\DJGPP> set PATH=C:\DJGPP\BIN;%PATH% - C:\DJGPP> set DJGPP=C:\DJGPP\DJGPP.ENV - - You may want to add the last two lines into AUTOEXEC.BAT or have, - for example, DJGPP.BAT which you can run before using DJGPP. - - Make sure you use completely upper case path in the DJGPP environment - variable. This is not required by DJGPP, but the XZ Utils Makefile is - a bit stupid and expects that everything in DJGPP environment variable - is uppercase. - - -Building - - Just run "make" in this directory (the directory containing this - README). You should get liblzma.a, xz.exe, xzdec.exe, and - lzmadec.exe. Of these, probably xz.exe is the only interesting one. - - Note: You need to have an environment that supports long filenames. - Once you have built XZ Utils, the resulting binaries can be run - without long filename support. - - -Additional Make Flags and Targets - - You may want to try some additional optimizations, which may or - may not make the code faster (and may or may not hit possible - compiler bugs more easily): - - make CFLAGS="-O3 -fomit-frame-pointer -funroll-loops" - - If you want to enable assertions (the assert() macro), use DEBUG=1. - You may want to disable optimizations too if you plan to actually - debug the code. Never use DEBUG=1 for production builds! - - make DEBUG=1 CFLAGS="-g -O0" - - -Bugs - - "make clean" may remove src/xz/hardware.c when it tries to remove - src/xz/hardware-fixed.c. This is probably a bug somewhere in the - DOS environment I use. Maybe it tries truncated 8.3 name first and - since that gives a name of an existing file, it doesn't look for - long filename. - - "xz -fc /dev/tty" hangs at least in DOSEMU and cannot be interrupted - by pressing C-c. Maybe xz should never accept non-regular files on - DOS even when --force is used. - - Using different memory usage limit for encoding and decoding doesn't - make sense under pure DOS. Maybe it is still OK when running under - Windows. - - The progress indicator of "xz -v" doesn't get updated when running - under Dosbox, but it works in DOSEMU. I currently (2009-02-13) don't - know if it works in other environments. - - Report bugs to (in English or Finnish). - diff --git a/Build/source/utils/xz-4.999.9beta/dos/config.h b/Build/source/utils/xz-4.999.9beta/dos/config.h deleted file mode 100644 index 9c9fff022f8..00000000000 --- a/Build/source/utils/xz-4.999.9beta/dos/config.h +++ /dev/null @@ -1,150 +0,0 @@ -/* Define to 1 if using x86 assembler optimizations. */ -#define HAVE_ASM_X86 1 - -/* Define to 1 if crc32 integrity check is enabled. */ -#define HAVE_CHECK_CRC32 1 - -/* Define to 1 if crc64 integrity check is enabled. */ -#define HAVE_CHECK_CRC64 1 - -/* Define to 1 if sha256 integrity check is enabled. */ -#define HAVE_CHECK_SHA256 1 - -/* Define to 1 if decoder components are enabled. */ -#define HAVE_DECODER 1 - -/* Define to 1 if arm decoder is enabled. */ -#define HAVE_DECODER_ARM 1 - -/* Define to 1 if armthumb decoder is enabled. */ -#define HAVE_DECODER_ARMTHUMB 1 - -/* Define to 1 if delta decoder is enabled. */ -#define HAVE_DECODER_DELTA 1 - -/* Define to 1 if ia64 decoder is enabled. */ -#define HAVE_DECODER_IA64 1 - -/* Define to 1 if lzma1 decoder is enabled. */ -#define HAVE_DECODER_LZMA1 1 - -/* Define to 1 if lzma2 decoder is enabled. */ -#define HAVE_DECODER_LZMA2 1 - -/* Define to 1 if powerpc decoder is enabled. */ -#define HAVE_DECODER_POWERPC 1 - -/* Define to 1 if sparc decoder is enabled. */ -#define HAVE_DECODER_SPARC 1 - -/* Define to 1 if subblock decoder is enabled. */ -/* #undef HAVE_DECODER_SUBBLOCK */ - -/* Define to 1 if x86 decoder is enabled. */ -#define HAVE_DECODER_X86 1 - -/* Define to 1 if encoder components are enabled. */ -#define HAVE_ENCODER 1 - -/* Define to 1 if arm encoder is enabled. */ -#define HAVE_ENCODER_ARM 1 - -/* Define to 1 if armthumb encoder is enabled. */ -#define HAVE_ENCODER_ARMTHUMB 1 - -/* Define to 1 if delta encoder is enabled. */ -#define HAVE_ENCODER_DELTA 1 - -/* Define to 1 if ia64 encoder is enabled. */ -#define HAVE_ENCODER_IA64 1 - -/* Define to 1 if lzma1 encoder is enabled. */ -#define HAVE_ENCODER_LZMA1 1 - -/* Define to 1 if lzma2 encoder is enabled. */ -#define HAVE_ENCODER_LZMA2 1 - -/* Define to 1 if powerpc encoder is enabled. */ -#define HAVE_ENCODER_POWERPC 1 - -/* Define to 1 if sparc encoder is enabled. */ -#define HAVE_ENCODER_SPARC 1 - -/* Define to 1 if subblock encoder is enabled. */ -/* #undef HAVE_ENCODER_SUBBLOCK */ - -/* Define to 1 if x86 encoder is enabled. */ -#define HAVE_ENCODER_X86 1 - -/* Define to 1 if the system supports fast unaligned memory access. */ -#define HAVE_FAST_UNALIGNED_ACCESS 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_LIMITS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 to enable bt2 match finder. */ -#define HAVE_MF_BT2 1 - -/* Define to 1 to enable bt3 match finder. */ -#define HAVE_MF_BT3 1 - -/* Define to 1 to enable bt4 match finder. */ -#define HAVE_MF_BT4 1 - -/* Define to 1 to enable hc3 match finder. */ -#define HAVE_MF_HC3 1 - -/* Define to 1 to enable hc4 match finder. */ -#define HAVE_MF_HC4 1 - -/* Define to 1 if optimizing for size. */ -/* #undef HAVE_SMALL */ - -/* Define to 1 if stdbool.h conforms to C99. */ -#define HAVE_STDBOOL_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if the system has the type `uintptr_t'. */ -#define HAVE_UINTPTR_T 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TIME_H 1 - -/* Define to 1 if you have the `utimes' function. */ -#define HAVE_UTIMES 1 - -/* Define to 1 or 0, depending whether the compiler supports simple visibility - declarations. */ -#define HAVE_VISIBILITY 0 - -/* Define to 1 if the system has the type `_Bool'. */ -#define HAVE__BOOL 1 - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "XZ Utils" - -/* The size of `size_t', as computed by sizeof. */ -#define SIZEOF_SIZE_T 4 - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 diff --git a/Build/source/utils/xz-4.999.9beta/extra/7z2lzma/7z2lzma.bash b/Build/source/utils/xz-4.999.9beta/extra/7z2lzma/7z2lzma.bash deleted file mode 100755 index 35ea4dae973..00000000000 --- a/Build/source/utils/xz-4.999.9beta/extra/7z2lzma/7z2lzma.bash +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/bash -# -############################################################################# -# -# 7z2lzma.bash is very primitive .7z to .lzma converter. The input file must -# have exactly one LZMA compressed stream, which has been created with the -# default lc, lp, and pb values. The CRC32 in the .7z archive is not checked, -# and the script may seem to succeed while it actually created a corrupt .lzma -# file. You should always try uncompressing both the original .7z and the -# created .lzma and compare that the output is identical. -# -# This script requires basic GNU tools and 7z or 7za tool from p7zip. -# -# Last modified: 2009-01-15 14:25+0200 -# -############################################################################# -# -# Author: Lasse Collin -# -# This file has been put into the public domain. -# You can do whatever you want with this file. -# -############################################################################# - -# You can use 7z or 7za, both will work. -SEVENZIP=7za - -if [ $# != 2 -o -z "$1" -o -z "$2" ]; then - echo "Usage: $0 input.7z output.lzma" - exit 1 -fi - -# Converts an integer variable to little endian binary integer. -int2bin() -{ - local LEN=$1 - local NUM=$2 - local HEX=(0 1 2 3 4 5 6 7 8 9 A B C D E F) - local I - for ((I=0; I < "$LEN"; ++I)); do - printf "\\x${HEX[(NUM >> 4) & 0x0F]}${HEX[NUM & 0x0F]}" - NUM=$((NUM >> 8)) - done -} - -# Make sure we get possible errors from pipes. -set -o pipefail - -# Get information about the input file. At least older 7z and 7za versions -# may return with zero exit status even when an error occurred, so check -# if the output has any lines beginning with "Error". -INFO=$("$SEVENZIP" l -slt "$1") -if [ $? != 0 ] || printf '%s\n' "$INFO" | grep -q ^Error; then - printf '%s\n' "$INFO" - exit 1 -fi - -# Check if the input file has more than one compressed block. -if printf '%s\n' "$INFO" | grep -q '^Block = 1'; then - echo "Cannot convert, because the input file has more than" - echo "one compressed block." - exit 1 -fi - -# Get copmressed, uncompressed, and dictionary size. -CSIZE=$(printf '%s\n' "$INFO" | sed -rn 's|^Packed Size = ([0-9]+$)|\1|p') -USIZE=$(printf '%s\n' "$INFO" | sed -rn 's|^Size = ([0-9]+$)|\1|p') -DICT=$(printf '%s\n' "$INFO" | sed -rn 's|^Method = LZMA:([0-9]+[bkm]?)$|\1|p') - -if [ -z "$CSIZE" -o -z "$USIZE" -o -z "$DICT" ]; then - echo "Parsing output of $SEVENZIP failed. Maybe the file uses some" - echo "other compression method than plain LZMA." - exit 1 -fi - -# The following assumes that the default lc, lp, and pb settings were used. -# Otherwise the output will be corrupt. -printf '\x5D' > "$2" - -# Dictionary size can be either was power of two, bytes, kibibytes, or -# mebibytes. We need to convert it to bytes. -case $DICT in - *b) - DICT=${DICT%b} - ;; - *k) - DICT=${DICT%k} - DICT=$((DICT << 10)) - ;; - *m) - DICT=${DICT%m} - DICT=$((DICT << 20)) - ;; - *) - DICT=$((1 << DICT)) - ;; -esac -int2bin 4 "$DICT" >> "$2" - -# Uncompressed size -int2bin 8 "$USIZE" >> "$2" - -# Copy the actual compressed data. Using multiple dd commands to avoid -# copying large amount of data with one-byte block size, which would be -# annoyingly slow. -BS=8192 -BIGSIZE=$((CSIZE / BS)) -CSIZE=$((CSIZE % BS)) -{ - dd of=/dev/null bs=32 count=1 \ - && dd bs="$BS" count="$BIGSIZE" \ - && dd bs=1 count="$CSIZE" -} < "$1" >> "$2" - -exit $? diff --git a/Build/source/utils/xz-4.999.9beta/extra/scanlzma/scanlzma.c b/Build/source/utils/xz-4.999.9beta/extra/scanlzma/scanlzma.c deleted file mode 100644 index 5c3b25be32a..00000000000 --- a/Build/source/utils/xz-4.999.9beta/extra/scanlzma/scanlzma.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - scanlzma, scan for lzma compressed data in stdin and echo it to stdout. - Copyright (C) 2006 Timo Lindfors - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. -*/ - -/* Usage example: - - $ wget http://www.wifi-shop.cz/Files/produkty/wa2204/wa2204av1.4.1.zip - $ unzip wa2204av1.4.1.zip - $ gcc scanlzma.c -o scanlzma -Wall - $ ./scanlzma 0 < WA2204-FW1.4.1/linux-1.4.bin | lzma -c -d | strings | grep -i "copyright" - UpdateDD version 2.5, Copyright (C) 2005 Philipp Benner. - Copyright (C) 2005 Philipp Benner. - Copyright (C) 2005 Philipp Benner. - mawk 1.3%s%s %s, Copyright (C) Michael D. Brennan - # Copyright (C) 1998, 1999, 2001 Henry Spencer. - ... - -*/ - - -/* LZMA compressed file format */ -/* --------------------------- */ -/* Offset Size Description */ -/* 0 1 Special LZMA properties for compressed data */ -/* 1 4 Dictionary size (little endian) */ -/* 5 8 Uncompressed size (little endian). -1 means unknown size */ -/* 13 Compressed data */ - -#define BUFSIZE 4096 - -int find_lzma_header(unsigned char *buf) { - return (buf[0] < 0xE1 - && buf[0] == 0x5d - && buf[4] < 0x20 - && (memcmp (buf + 10 , "\x00\x00\x00", 3) == 0 - || (memcmp (buf + 5, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", 8) == 0))); -} - -int main(int argc, char *argv[]) { - char buf[BUFSIZE]; - int ret, i, numlzma, blocks=0; - - if (argc != 2) { - printf("usage: %s numlzma < infile | lzma -c -d > outfile\n" - "where numlzma is index of lzma file to extract, starting from zero.\n", - argv[0]); - exit(1); - } - numlzma = atoi(argv[1]); - - for (;;) { - /* Read data. */ - ret = fread(buf, BUFSIZE, 1, stdin); - if (ret != 1) - break; - - /* Scan for signature. */ - for (i = 0; i $@-t - mv -f $@-t $@ diff --git a/Build/source/utils/xz-4.999.9beta/lib/Makefile.in b/Build/source/utils/xz-4.999.9beta/lib/Makefile.in deleted file mode 100644 index 6434e2868eb..00000000000 --- a/Build/source/utils/xz-4.999.9beta/lib/Makefile.in +++ /dev/null @@ -1,525 +0,0 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ -subdir = lib -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in getopt.c \ - getopt1.c -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ - $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ - $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ - $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ - $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LIBRARIES = $(noinst_LIBRARIES) -ARFLAGS = cru -libgnu_a_AR = $(AR) $(ARFLAGS) -am_libgnu_a_OBJECTS = -libgnu_a_OBJECTS = $(am_libgnu_a_OBJECTS) -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(libgnu_a_SOURCES) -DIST_SOURCES = $(libgnu_a_SOURCES) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ -DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GETOPT_H = @GETOPT_H@ -GMSGFMT = @GMSGFMT@ -GMSGFMT_015 = @GMSGFMT_015@ -GREP = @GREP@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTLLIBS = @INTLLIBS@ -INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBICONV = @LIBICONV@ -LIBINTL = @LIBINTL@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBINTL = @LTLIBINTL@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -MSGFMT = @MSGFMT@ -MSGFMT_015 = @MSGFMT_015@ -MSGMERGE = @MSGMERGE@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POSIX_SHELL = @POSIX_SHELL@ -POSUB = @POSUB@ -PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -RC = @RC@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ -STATIC_LDFLAGS = @STATIC_LDFLAGS@ -STRIP = @STRIP@ -USE_NLS = @USE_NLS@ -VERSION = @VERSION@ -XGETTEXT = @XGETTEXT@ -XGETTEXT_015 = @XGETTEXT_015@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -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@ -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@ -lt_ECHO = @lt_ECHO@ -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@ -xz = @xz@ -noinst_LIBRARIES = libgnu.a -libgnu_a_SOURCES = -libgnu_a_DEPENDENCIES = $(LIBOBJS) -libgnu_a_LIBADD = $(LIBOBJS) -EXTRA_DIST = getopt.in.h getopt.c getopt1.c getopt_int.h -BUILT_SOURCES = $(GETOPT_H) -MOSTLYCLEANFILES = getopt.h getopt.h-t -all: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign lib/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstLIBRARIES: - -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) -libgnu.a: $(libgnu_a_OBJECTS) $(libgnu_a_DEPENDENCIES) - -rm -f libgnu.a - $(libgnu_a_AR) libgnu.a $(libgnu_a_OBJECTS) $(libgnu_a_LIBADD) - $(RANLIB) libgnu.a - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt1.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -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) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - 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; }; }'`; \ - 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) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - 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; }; }'`; \ - 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 - -distdir: $(DISTFILES) - @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 -check-am: all-am -check: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(LIBRARIES) -installdirs: -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) 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: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) - -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." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -rf $(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -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 -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: - -.MAKE: all check install install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am 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 - - -getopt.h: getopt.in.h - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - cat $(srcdir)/getopt.in.h; \ - } > $@-t - mv -f $@-t $@ - -# 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/Build/source/utils/xz-4.999.9beta/lib/getopt.c b/Build/source/utils/xz-4.999.9beta/lib/getopt.c deleted file mode 100644 index 1d14b245b2b..00000000000 --- a/Build/source/utils/xz-4.999.9beta/lib/getopt.c +++ /dev/null @@ -1,1197 +0,0 @@ -/* Getopt for GNU. - NOTE: getopt is now part of the C library, so if you don't know what - "Keep this file name-space clean" means, talk to drepper@gnu.org - before changing it! - Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001,2002,2003,2004,2006 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _LIBC -# include -#endif - -#include "getopt.h" - -#include -#include -#include -#include - -#ifdef __VMS -# include -#endif - -/* Completely disable NLS for getopt. We won't include translations for it - anyway. If the system lacks getopt_long, missing translations probably - aren't a problem. */ -/* -#ifdef _LIBC -# include -#else -# include "gettext.h" -# define _(msgid) gettext (msgid) -#endif -*/ -#define _(msgid) (msgid) - -#if defined _LIBC && defined USE_IN_LIBIO -# include -#endif - -#ifndef attribute_hidden -# define attribute_hidden -#endif - -/* Unlike standard Unix `getopt', functions like `getopt_long' - let the user intersperse the options with the other arguments. - - As `getopt_long' works, it permutes the elements of ARGV so that, - when it is done, all the options precede everything else. Thus - all application programs are extended to handle flexible argument order. - - Using `getopt' or setting the environment variable POSIXLY_CORRECT - disables permutation. - Then the application's behavior is completely standard. - - GNU application programs can use a third alternative mode in which - they can distinguish the relative order of options and other arguments. */ - -#include "getopt_int.h" - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -char *optarg; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns -1, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -/* 1003.2 says this must be 1 before any call. */ -int optind = 1; - -/* Callers store zero here to inhibit the error message - for unrecognized options. */ - -int opterr = 1; - -/* Set to an option character which was unrecognized. - This must be initialized on some systems to avoid linking in the - system's own getopt implementation. */ - -int optopt = '?'; - -/* Keep a global copy of all internal members of getopt_data. */ - -static struct _getopt_data getopt_data; - - -#if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV -extern char *getenv (); -#endif - -#ifdef _LIBC -/* Stored original parameters. - XXX This is no good solution. We should rather copy the args so - that we can compare them later. But we must not use malloc(3). */ -extern int __libc_argc; -extern char **__libc_argv; - -/* Bash 2.0 gives us an environment variable containing flags - indicating ARGV elements that should not be considered arguments. */ - -# ifdef USE_NONOPTION_FLAGS -/* Defined in getopt_init.c */ -extern char *__getopt_nonoption_flags; -# endif - -# ifdef USE_NONOPTION_FLAGS -# define SWAP_FLAGS(ch1, ch2) \ - if (d->__nonoption_flags_len > 0) \ - { \ - char __tmp = __getopt_nonoption_flags[ch1]; \ - __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ - __getopt_nonoption_flags[ch2] = __tmp; \ - } -# else -# define SWAP_FLAGS(ch1, ch2) -# endif -#else /* !_LIBC */ -# define SWAP_FLAGS(ch1, ch2) -#endif /* _LIBC */ - -/* Exchange two adjacent subsequences of ARGV. - One subsequence is elements [first_nonopt,last_nonopt) - which contains all the non-options that have been skipped so far. - The other is elements [last_nonopt,optind), which contains all - the options processed since those non-options were skipped. - - `first_nonopt' and `last_nonopt' are relocated so that they describe - the new indices of the non-options in ARGV after they are moved. */ - -static void -exchange (char **argv, struct _getopt_data *d) -{ - int bottom = d->__first_nonopt; - int middle = d->__last_nonopt; - int top = d->optind; - char *tem; - - /* Exchange the shorter segment with the far end of the longer segment. - That puts the shorter segment into the right place. - It leaves the longer segment in the right place overall, - but it consists of two parts that need to be swapped next. */ - -#if defined _LIBC && defined USE_NONOPTION_FLAGS - /* First make sure the handling of the `__getopt_nonoption_flags' - string can work normally. Our top argument must be in the range - of the string. */ - if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len) - { - /* We must extend the array. The user plays games with us and - presents new arguments. */ - char *new_str = malloc (top + 1); - if (new_str == NULL) - d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0; - else - { - memset (__mempcpy (new_str, __getopt_nonoption_flags, - d->__nonoption_flags_max_len), - '\0', top + 1 - d->__nonoption_flags_max_len); - d->__nonoption_flags_max_len = top + 1; - __getopt_nonoption_flags = new_str; - } - } -#endif - - while (top > middle && middle > bottom) - { - if (top - middle > middle - bottom) - { - /* Bottom segment is the short one. */ - int len = middle - bottom; - register int i; - - /* Swap it with the top part of the top segment. */ - for (i = 0; i < len; i++) - { - tem = argv[bottom + i]; - argv[bottom + i] = argv[top - (middle - bottom) + i]; - argv[top - (middle - bottom) + i] = tem; - SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); - } - /* Exclude the moved bottom segment from further swapping. */ - top -= len; - } - else - { - /* Top segment is the short one. */ - int len = top - middle; - register int i; - - /* Swap it with the bottom part of the bottom segment. */ - for (i = 0; i < len; i++) - { - tem = argv[bottom + i]; - argv[bottom + i] = argv[middle + i]; - argv[middle + i] = tem; - SWAP_FLAGS (bottom + i, middle + i); - } - /* Exclude the moved top segment from further swapping. */ - bottom += len; - } - } - - /* Update records for the slots the non-options now occupy. */ - - d->__first_nonopt += (d->optind - d->__last_nonopt); - d->__last_nonopt = d->optind; -} - -/* Initialize the internal data when the first call is made. */ - -static const char * -_getopt_initialize (int argc, char **argv, const char *optstring, - int posixly_correct, struct _getopt_data *d) -{ - /* Start processing options with ARGV-element 1 (since ARGV-element 0 - is the program name); the sequence of previously skipped - non-option ARGV-elements is empty. */ - - d->__first_nonopt = d->__last_nonopt = d->optind; - - d->__nextchar = NULL; - - d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT"); - - /* Determine how to handle the ordering of options and nonoptions. */ - - if (optstring[0] == '-') - { - d->__ordering = RETURN_IN_ORDER; - ++optstring; - } - else if (optstring[0] == '+') - { - d->__ordering = REQUIRE_ORDER; - ++optstring; - } - else if (d->__posixly_correct) - d->__ordering = REQUIRE_ORDER; - else - d->__ordering = PERMUTE; - -#if defined _LIBC && defined USE_NONOPTION_FLAGS - if (!d->__posixly_correct - && argc == __libc_argc && argv == __libc_argv) - { - if (d->__nonoption_flags_max_len == 0) - { - if (__getopt_nonoption_flags == NULL - || __getopt_nonoption_flags[0] == '\0') - d->__nonoption_flags_max_len = -1; - else - { - const char *orig_str = __getopt_nonoption_flags; - int len = d->__nonoption_flags_max_len = strlen (orig_str); - if (d->__nonoption_flags_max_len < argc) - d->__nonoption_flags_max_len = argc; - __getopt_nonoption_flags = - (char *) malloc (d->__nonoption_flags_max_len); - if (__getopt_nonoption_flags == NULL) - d->__nonoption_flags_max_len = -1; - else - memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), - '\0', d->__nonoption_flags_max_len - len); - } - } - d->__nonoption_flags_len = d->__nonoption_flags_max_len; - } - else - d->__nonoption_flags_len = 0; -#endif - - return optstring; -} - -/* Scan elements of ARGV (whose length is ARGC) for option characters - given in OPTSTRING. - - If an element of ARGV starts with '-', and is not exactly "-" or "--", - then it is an option element. The characters of this element - (aside from the initial '-') are option characters. If `getopt' - is called repeatedly, it returns successively each of the option characters - from each of the option elements. - - If `getopt' finds another option character, it returns that character, - updating `optind' and `nextchar' so that the next call to `getopt' can - resume the scan with the following option character or ARGV-element. - - If there are no more option characters, `getopt' returns -1. - Then `optind' is the index in ARGV of the first ARGV-element - that is not an option. (The ARGV-elements have been permuted - so that those that are not options now come last.) - - OPTSTRING is a string containing the legitimate option characters. - If an option character is seen that is not listed in OPTSTRING, - return '?' after printing an error message. If you set `opterr' to - zero, the error message is suppressed but we still return '?'. - - If a char in OPTSTRING is followed by a colon, that means it wants an arg, - so the following text in the same ARGV-element, or the text of the following - ARGV-element, is returned in `optarg'. Two colons mean an option that - wants an optional arg; if there is text in the current ARGV-element, - it is returned in `optarg', otherwise `optarg' is set to zero. - - If OPTSTRING starts with `-' or `+', it requests different methods of - handling the non-option ARGV-elements. - See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. - - Long-named options begin with `--' instead of `-'. - Their names may be abbreviated as long as the abbreviation is unique - or is an exact match for some defined option. If they have an - argument, it follows the option name in the same ARGV-element, separated - from the option name by a `=', or else the in next ARGV-element. - When `getopt' finds a long-named option, it returns 0 if that option's - `flag' field is nonzero, the value of the option's `val' field - if the `flag' field is zero. - - LONGOPTS is a vector of `struct option' terminated by an - element containing a name which is zero. - - LONGIND returns the index in LONGOPT of the long-named option found. - It is only valid when a long-named option has been found by the most - recent call. - - If LONG_ONLY is nonzero, '-' as well as '--' can introduce - long-named options. - - If POSIXLY_CORRECT is nonzero, behave as if the POSIXLY_CORRECT - environment variable were set. */ - -int -_getopt_internal_r (int argc, char **argv, const char *optstring, - const struct option *longopts, int *longind, - int long_only, int posixly_correct, struct _getopt_data *d) -{ - int print_errors = d->opterr; - if (optstring[0] == ':') - print_errors = 0; - - if (argc < 1) - return -1; - - d->optarg = NULL; - - if (d->optind == 0 || !d->__initialized) - { - if (d->optind == 0) - d->optind = 1; /* Don't scan ARGV[0], the program name. */ - optstring = _getopt_initialize (argc, argv, optstring, - posixly_correct, d); - d->__initialized = 1; - } - - /* Test whether ARGV[optind] points to a non-option argument. - Either it does not have option syntax, or there is an environment flag - from the shell indicating it is not an option. The later information - is only used when the used in the GNU libc. */ -#if defined _LIBC && defined USE_NONOPTION_FLAGS -# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \ - || (d->optind < d->__nonoption_flags_len \ - && __getopt_nonoption_flags[d->optind] == '1')) -#else -# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') -#endif - - if (d->__nextchar == NULL || *d->__nextchar == '\0') - { - /* Advance to the next ARGV-element. */ - - /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been - moved back by the user (who may also have changed the arguments). */ - if (d->__last_nonopt > d->optind) - d->__last_nonopt = d->optind; - if (d->__first_nonopt > d->optind) - d->__first_nonopt = d->optind; - - if (d->__ordering == PERMUTE) - { - /* If we have just processed some options following some non-options, - exchange them so that the options come first. */ - - if (d->__first_nonopt != d->__last_nonopt - && d->__last_nonopt != d->optind) - exchange ((char **) argv, d); - else if (d->__last_nonopt != d->optind) - d->__first_nonopt = d->optind; - - /* Skip any additional non-options - and extend the range of non-options previously skipped. */ - - while (d->optind < argc && NONOPTION_P) - d->optind++; - d->__last_nonopt = d->optind; - } - - /* The special ARGV-element `--' means premature end of options. - Skip it like a null option, - then exchange with previous non-options as if it were an option, - then skip everything else like a non-option. */ - - if (d->optind != argc && !strcmp (argv[d->optind], "--")) - { - d->optind++; - - if (d->__first_nonopt != d->__last_nonopt - && d->__last_nonopt != d->optind) - exchange ((char **) argv, d); - else if (d->__first_nonopt == d->__last_nonopt) - d->__first_nonopt = d->optind; - d->__last_nonopt = argc; - - d->optind = argc; - } - - /* If we have done all the ARGV-elements, stop the scan - and back over any non-options that we skipped and permuted. */ - - if (d->optind == argc) - { - /* Set the next-arg-index to point at the non-options - that we previously skipped, so the caller will digest them. */ - if (d->__first_nonopt != d->__last_nonopt) - d->optind = d->__first_nonopt; - return -1; - } - - /* If we have come to a non-option and did not permute it, - either stop the scan or describe it to the caller and pass it by. */ - - if (NONOPTION_P) - { - if (d->__ordering == REQUIRE_ORDER) - return -1; - d->optarg = argv[d->optind++]; - return 1; - } - - /* We have found another option-ARGV-element. - Skip the initial punctuation. */ - - d->__nextchar = (argv[d->optind] + 1 - + (longopts != NULL && argv[d->optind][1] == '-')); - } - - /* Decode the current option-ARGV-element. */ - - /* Check whether the ARGV-element is a long option. - - If long_only and the ARGV-element has the form "-f", where f is - a valid short option, don't consider it an abbreviated form of - a long option that starts with f. Otherwise there would be no - way to give the -f short option. - - On the other hand, if there's a long option "fubar" and - the ARGV-element is "-fu", do consider that an abbreviation of - the long option, just like "--fu", and not "-f" with arg "u". - - This distinction seems to be the most useful approach. */ - - if (longopts != NULL - && (argv[d->optind][1] == '-' - || (long_only && (argv[d->optind][2] - || !strchr (optstring, argv[d->optind][1]))))) - { - char *nameend; - const struct option *p; - const struct option *pfound = NULL; - int exact = 0; - int ambig = 0; - int indfound = -1; - int option_index; - - for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) - /* Do nothing. */ ; - - /* Test all long options for either exact match - or abbreviated matches. */ - for (p = longopts, option_index = 0; p->name; p++, option_index++) - if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar)) - { - if ((unsigned int) (nameend - d->__nextchar) - == (unsigned int) strlen (p->name)) - { - /* Exact match found. */ - pfound = p; - indfound = option_index; - exact = 1; - break; - } - else if (pfound == NULL) - { - /* First nonexact match found. */ - pfound = p; - indfound = option_index; - } - else if (long_only - || pfound->has_arg != p->has_arg - || pfound->flag != p->flag - || pfound->val != p->val) - /* Second or later nonexact match found. */ - ambig = 1; - } - - if (ambig && !exact) - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - - if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"), - argv[0], argv[d->optind]) >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; - - __fxprintf (NULL, "%s", buf); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#else - fprintf (stderr, _("%s: option `%s' is ambiguous\n"), - argv[0], argv[d->optind]); -#endif - } - d->__nextchar += strlen (d->__nextchar); - d->optind++; - d->optopt = 0; - return '?'; - } - - if (pfound != NULL) - { - option_index = indfound; - d->optind++; - if (*nameend) - { - /* Don't test has_arg with >, because some C compilers don't - allow it to be used on enums. */ - if (pfound->has_arg) - d->optarg = nameend + 1; - else - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - int n; -#endif - - if (argv[d->optind - 1][1] == '-') - { - /* --option */ -#if defined _LIBC && defined USE_IN_LIBIO - n = __asprintf (&buf, _("\ -%s: option `--%s' doesn't allow an argument\n"), - argv[0], pfound->name); -#else - fprintf (stderr, _("\ -%s: option `--%s' doesn't allow an argument\n"), - argv[0], pfound->name); -#endif - } - else - { - /* +option or -option */ -#if defined _LIBC && defined USE_IN_LIBIO - n = __asprintf (&buf, _("\ -%s: option `%c%s' doesn't allow an argument\n"), - argv[0], argv[d->optind - 1][0], - pfound->name); -#else - fprintf (stderr, _("\ -%s: option `%c%s' doesn't allow an argument\n"), - argv[0], argv[d->optind - 1][0], - pfound->name); -#endif - } - -#if defined _LIBC && defined USE_IN_LIBIO - if (n >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 - |= _IO_FLAGS2_NOTCANCEL; - - __fxprintf (NULL, "%s", buf); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#endif - } - - d->__nextchar += strlen (d->__nextchar); - - d->optopt = pfound->val; - return '?'; - } - } - else if (pfound->has_arg == 1) - { - if (d->optind < argc) - d->optarg = argv[d->optind++]; - else - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - - if (__asprintf (&buf, _("\ -%s: option `%s' requires an argument\n"), - argv[0], argv[d->optind - 1]) >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 - |= _IO_FLAGS2_NOTCANCEL; - - __fxprintf (NULL, "%s", buf); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#else - fprintf (stderr, - _("%s: option `%s' requires an argument\n"), - argv[0], argv[d->optind - 1]); -#endif - } - d->__nextchar += strlen (d->__nextchar); - d->optopt = pfound->val; - return optstring[0] == ':' ? ':' : '?'; - } - } - d->__nextchar += strlen (d->__nextchar); - if (longind != NULL) - *longind = option_index; - if (pfound->flag) - { - *(pfound->flag) = pfound->val; - return 0; - } - return pfound->val; - } - - /* Can't find it as a long option. If this is not getopt_long_only, - or the option starts with '--' or is not a valid short - option, then it's an error. - Otherwise interpret it as a short option. */ - if (!long_only || argv[d->optind][1] == '-' - || strchr (optstring, *d->__nextchar) == NULL) - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - int n; -#endif - - if (argv[d->optind][1] == '-') - { - /* --option */ -#if defined _LIBC && defined USE_IN_LIBIO - n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"), - argv[0], d->__nextchar); -#else - fprintf (stderr, _("%s: unrecognized option `--%s'\n"), - argv[0], d->__nextchar); -#endif - } - else - { - /* +option or -option */ -#if defined _LIBC && defined USE_IN_LIBIO - n = __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"), - argv[0], argv[d->optind][0], d->__nextchar); -#else - fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), - argv[0], argv[d->optind][0], d->__nextchar); -#endif - } - -#if defined _LIBC && defined USE_IN_LIBIO - if (n >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; - - __fxprintf (NULL, "%s", buf); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#endif - } - d->__nextchar = (char *) ""; - d->optind++; - d->optopt = 0; - return '?'; - } - } - - /* Look at and handle the next short option-character. */ - - { - char c = *d->__nextchar++; - char *temp = strchr (optstring, c); - - /* Increment `optind' when we start to process its last character. */ - if (*d->__nextchar == '\0') - ++d->optind; - - if (temp == NULL || c == ':') - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - int n; -#endif - - if (d->__posixly_correct) - { - /* 1003.2 specifies the format of this message. */ -#if defined _LIBC && defined USE_IN_LIBIO - n = __asprintf (&buf, _("%s: illegal option -- %c\n"), - argv[0], c); -#else - fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); -#endif - } - else - { -#if defined _LIBC && defined USE_IN_LIBIO - n = __asprintf (&buf, _("%s: invalid option -- %c\n"), - argv[0], c); -#else - fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); -#endif - } - -#if defined _LIBC && defined USE_IN_LIBIO - if (n >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; - - __fxprintf (NULL, "%s", buf); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#endif - } - d->optopt = c; - return '?'; - } - /* Convenience. Treat POSIX -W foo same as long option --foo */ - if (temp[0] == 'W' && temp[1] == ';') - { - char *nameend; - const struct option *p; - const struct option *pfound = NULL; - int exact = 0; - int ambig = 0; - int indfound = 0; - int option_index; - - /* This is an option that requires an argument. */ - if (*d->__nextchar != '\0') - { - d->optarg = d->__nextchar; - /* If we end this ARGV-element by taking the rest as an arg, - we must advance to the next element now. */ - d->optind++; - } - else if (d->optind == argc) - { - if (print_errors) - { - /* 1003.2 specifies the format of this message. */ -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - - if (__asprintf (&buf, - _("%s: option requires an argument -- %c\n"), - argv[0], c) >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; - - __fxprintf (NULL, "%s", buf); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#else - fprintf (stderr, _("%s: option requires an argument -- %c\n"), - argv[0], c); -#endif - } - d->optopt = c; - if (optstring[0] == ':') - c = ':'; - else - c = '?'; - return c; - } - else - /* We already incremented `d->optind' once; - increment it again when taking next ARGV-elt as argument. */ - d->optarg = argv[d->optind++]; - - /* optarg is now the argument, see if it's in the - table of longopts. */ - - for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '='; - nameend++) - /* Do nothing. */ ; - - /* Test all long options for either exact match - or abbreviated matches. */ - for (p = longopts, option_index = 0; p->name; p++, option_index++) - if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar)) - { - if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name)) - { - /* Exact match found. */ - pfound = p; - indfound = option_index; - exact = 1; - break; - } - else if (pfound == NULL) - { - /* First nonexact match found. */ - pfound = p; - indfound = option_index; - } - else - /* Second or later nonexact match found. */ - ambig = 1; - } - if (ambig && !exact) - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - - if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"), - argv[0], argv[d->optind]) >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; - - __fxprintf (NULL, "%s", buf); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#else - fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), - argv[0], argv[d->optind]); -#endif - } - d->__nextchar += strlen (d->__nextchar); - d->optind++; - return '?'; - } - if (pfound != NULL) - { - option_index = indfound; - if (*nameend) - { - /* Don't test has_arg with >, because some C compilers don't - allow it to be used on enums. */ - if (pfound->has_arg) - d->optarg = nameend + 1; - else - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - - if (__asprintf (&buf, _("\ -%s: option `-W %s' doesn't allow an argument\n"), - argv[0], pfound->name) >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 - |= _IO_FLAGS2_NOTCANCEL; - - __fxprintf (NULL, "%s", buf); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#else - fprintf (stderr, _("\ -%s: option `-W %s' doesn't allow an argument\n"), - argv[0], pfound->name); -#endif - } - - d->__nextchar += strlen (d->__nextchar); - return '?'; - } - } - else if (pfound->has_arg == 1) - { - if (d->optind < argc) - d->optarg = argv[d->optind++]; - else - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - - if (__asprintf (&buf, _("\ -%s: option `%s' requires an argument\n"), - argv[0], argv[d->optind - 1]) >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 - |= _IO_FLAGS2_NOTCANCEL; - - __fxprintf (NULL, "%s", buf); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#else - fprintf (stderr, - _("%s: option `%s' requires an argument\n"), - argv[0], argv[d->optind - 1]); -#endif - } - d->__nextchar += strlen (d->__nextchar); - return optstring[0] == ':' ? ':' : '?'; - } - } - d->__nextchar += strlen (d->__nextchar); - if (longind != NULL) - *longind = option_index; - if (pfound->flag) - { - *(pfound->flag) = pfound->val; - return 0; - } - return pfound->val; - } - d->__nextchar = NULL; - return 'W'; /* Let the application handle it. */ - } - if (temp[1] == ':') - { - if (temp[2] == ':') - { - /* This is an option that accepts an argument optionally. */ - if (*d->__nextchar != '\0') - { - d->optarg = d->__nextchar; - d->optind++; - } - else - d->optarg = NULL; - d->__nextchar = NULL; - } - else - { - /* This is an option that requires an argument. */ - if (*d->__nextchar != '\0') - { - d->optarg = d->__nextchar; - /* If we end this ARGV-element by taking the rest as an arg, - we must advance to the next element now. */ - d->optind++; - } - else if (d->optind == argc) - { - if (print_errors) - { - /* 1003.2 specifies the format of this message. */ -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - - if (__asprintf (&buf, _("\ -%s: option requires an argument -- %c\n"), - argv[0], c) >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; - - __fxprintf (NULL, "%s", buf); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#else - fprintf (stderr, - _("%s: option requires an argument -- %c\n"), - argv[0], c); -#endif - } - d->optopt = c; - if (optstring[0] == ':') - c = ':'; - else - c = '?'; - } - else - /* We already incremented `optind' once; - increment it again when taking next ARGV-elt as argument. */ - d->optarg = argv[d->optind++]; - d->__nextchar = NULL; - } - } - return c; - } -} - -int -_getopt_internal (int argc, char **argv, const char *optstring, - const struct option *longopts, int *longind, - int long_only, int posixly_correct) -{ - int result; - - getopt_data.optind = optind; - getopt_data.opterr = opterr; - - result = _getopt_internal_r (argc, argv, optstring, longopts, longind, - long_only, posixly_correct, &getopt_data); - - optind = getopt_data.optind; - optarg = getopt_data.optarg; - optopt = getopt_data.optopt; - - return result; -} - -/* glibc gets a LSB-compliant getopt. - Standalone applications get a POSIX-compliant getopt. */ -#if _LIBC -enum { POSIXLY_CORRECT = 0 }; -#else -enum { POSIXLY_CORRECT = 1 }; -#endif - -int -getopt (int argc, char *const *argv, const char *optstring) -{ - return _getopt_internal (argc, (char **) argv, optstring, NULL, NULL, 0, - POSIXLY_CORRECT); -} - - -#ifdef TEST - -/* Compile with -DTEST to make an executable for use in testing - the above definition of `getopt'. */ - -int -main (int argc, char **argv) -{ - int c; - int digit_optind = 0; - - while (1) - { - int this_option_optind = optind ? optind : 1; - - c = getopt (argc, argv, "abc:d:0123456789"); - if (c == -1) - break; - - switch (c) - { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - if (digit_optind != 0 && digit_optind != this_option_optind) - printf ("digits occur in two different argv-elements.\n"); - digit_optind = this_option_optind; - printf ("option %c\n", c); - break; - - case 'a': - printf ("option a\n"); - break; - - case 'b': - printf ("option b\n"); - break; - - case 'c': - printf ("option c with value `%s'\n", optarg); - break; - - case '?': - break; - - default: - printf ("?? getopt returned character code 0%o ??\n", c); - } - } - - if (optind < argc) - { - printf ("non-option ARGV-elements: "); - while (optind < argc) - printf ("%s ", argv[optind++]); - printf ("\n"); - } - - exit (0); -} - -#endif /* TEST */ diff --git a/Build/source/utils/xz-4.999.9beta/lib/getopt.in.h b/Build/source/utils/xz-4.999.9beta/lib/getopt.in.h deleted file mode 100644 index ea77e3d749d..00000000000 --- a/Build/source/utils/xz-4.999.9beta/lib/getopt.in.h +++ /dev/null @@ -1,226 +0,0 @@ -/* Declarations for getopt. - Copyright (C) 1989-1994,1996-1999,2001,2003,2004,2005,2006,2007 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _GETOPT_H - -#ifndef __need_getopt -# define _GETOPT_H 1 -#endif - -/* Standalone applications should #define __GETOPT_PREFIX to an - identifier that prefixes the external functions and variables - defined in this header. When this happens, include the - headers that might declare getopt so that they will not cause - confusion if included after this file. Then systematically rename - identifiers so that they do not collide with the system functions - and variables. Renaming avoids problems with some compilers and - linkers. */ -#if defined __GETOPT_PREFIX && !defined __need_getopt -# include -# include -# include -# undef __need_getopt -# undef getopt -# undef getopt_long -# undef getopt_long_only -# undef optarg -# undef opterr -# undef optind -# undef optopt -# define __GETOPT_CONCAT(x, y) x ## y -# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) -# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) -# define getopt __GETOPT_ID (getopt) -# define getopt_long __GETOPT_ID (getopt_long) -# define getopt_long_only __GETOPT_ID (getopt_long_only) -# define optarg __GETOPT_ID (optarg) -# define opterr __GETOPT_ID (opterr) -# define optind __GETOPT_ID (optind) -# define optopt __GETOPT_ID (optopt) -#endif - -/* Standalone applications get correct prototypes for getopt_long and - getopt_long_only; they declare "char **argv". libc uses prototypes - with "char *const *argv" that are incorrect because getopt_long and - getopt_long_only can permute argv; this is required for backward - compatibility (e.g., for LSB 2.0.1). - - This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt', - but it caused redefinition warnings if both unistd.h and getopt.h were - included, since unistd.h includes getopt.h having previously defined - __need_getopt. - - The only place where __getopt_argv_const is used is in definitions - of getopt_long and getopt_long_only below, but these are visible - only if __need_getopt is not defined, so it is quite safe to rewrite - the conditional as follows: -*/ -#if !defined __need_getopt -# if defined __GETOPT_PREFIX -# define __getopt_argv_const /* empty */ -# else -# define __getopt_argv_const const -# endif -#endif - -/* If __GNU_LIBRARY__ is not already defined, either we are being used - standalone, or this is the first header included in the source file. - If we are being used with glibc, we need to include , but - that does not exist if we are standalone. So: if __GNU_LIBRARY__ is - not defined, include , which will pull in for us - if it's from glibc. (Why ctype.h? It's guaranteed to exist and it - doesn't flood the namespace with stuff the way some other headers do.) */ -#if !defined __GNU_LIBRARY__ -# include -#endif - -#ifndef __THROW -# ifndef __GNUC_PREREQ -# define __GNUC_PREREQ(maj, min) (0) -# endif -# if defined __cplusplus && __GNUC_PREREQ (2,8) -# define __THROW throw () -# else -# define __THROW -# endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -extern char *optarg; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns -1, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -extern int optind; - -/* Callers store zero here to inhibit the error message `getopt' prints - for unrecognized options. */ - -extern int opterr; - -/* Set to an option character which was unrecognized. */ - -extern int optopt; - -#ifndef __need_getopt -/* Describe the long-named options requested by the application. - The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector - of `struct option' terminated by an element containing a name which is - zero. - - The field `has_arg' is: - no_argument (or 0) if the option does not take an argument, - required_argument (or 1) if the option requires an argument, - optional_argument (or 2) if the option takes an optional argument. - - If the field `flag' is not NULL, it points to a variable that is set - to the value given in the field `val' when the option is found, but - left unchanged if the option is not found. - - To have a long-named option do something other than set an `int' to - a compiled-in constant, such as set a value from `optarg', set the - option's `flag' field to zero and its `val' field to a nonzero - value (the equivalent single-letter option character, if there is - one). For long options that have a zero `flag' field, `getopt' - returns the contents of the `val' field. */ - -struct option -{ - const char *name; - /* has_arg can't be an enum because some compilers complain about - type mismatches in all the code that assumes it is an int. */ - int has_arg; - int *flag; - int val; -}; - -/* Names for the values of the `has_arg' field of `struct option'. */ - -# define no_argument 0 -# define required_argument 1 -# define optional_argument 2 -#endif /* need getopt */ - - -/* Get definitions and prototypes for functions to process the - arguments in ARGV (ARGC of them, minus the program name) for - options given in OPTS. - - Return the option character from OPTS just read. Return -1 when - there are no more options. For unrecognized options, or options - missing arguments, `optopt' is set to the option letter, and '?' is - returned. - - The OPTS string is a list of characters which are recognized option - letters, optionally followed by colons, specifying that that letter - takes an argument, to be placed in `optarg'. - - If a letter in OPTS is followed by two colons, its argument is - optional. This behavior is specific to the GNU `getopt'. - - The argument `--' causes premature termination of argument - scanning, explicitly telling `getopt' that there are no more - options. - - If OPTS begins with `-', then non-option arguments are treated as - arguments to the option '\1'. This behavior is specific to the GNU - `getopt'. If OPTS begins with `+', or POSIXLY_CORRECT is set in - the environment, then do not permute arguments. */ - -extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) - __THROW; - -#ifndef __need_getopt -extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, - const char *__shortopts, - const struct option *__longopts, int *__longind) - __THROW; -extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, - const char *__shortopts, - const struct option *__longopts, int *__longind) - __THROW; - -#endif - -#ifdef __cplusplus -} -#endif - -/* Make sure we later can get all the definitions and declarations. */ -#undef __need_getopt - -#endif /* getopt.h */ diff --git a/Build/source/utils/xz-4.999.9beta/lib/getopt1.c b/Build/source/utils/xz-4.999.9beta/lib/getopt1.c deleted file mode 100644 index da5d53300b1..00000000000 --- a/Build/source/utils/xz-4.999.9beta/lib/getopt1.c +++ /dev/null @@ -1,171 +0,0 @@ -/* getopt_long and getopt_long_only entry points for GNU getopt. - Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2004,2006 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifdef _LIBC -# include -#else -# include -# include "getopt.h" -#endif -#include "getopt_int.h" - -#include - -/* This needs to come after some library #include - to get __GNU_LIBRARY__ defined. */ -#ifdef __GNU_LIBRARY__ -#include -#endif - -#ifndef NULL -#define NULL 0 -#endif - -int -getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, - const struct option *long_options, int *opt_index) -{ - return _getopt_internal (argc, (char **) argv, options, long_options, - opt_index, 0, 0); -} - -int -_getopt_long_r (int argc, char **argv, const char *options, - const struct option *long_options, int *opt_index, - struct _getopt_data *d) -{ - return _getopt_internal_r (argc, argv, options, long_options, opt_index, - 0, 0, d); -} - -/* Like getopt_long, but '-' as well as '--' can indicate a long option. - If an option that starts with '-' (not '--') doesn't match a long option, - but does match a short option, it is parsed as a short option - instead. */ - -int -getopt_long_only (int argc, char *__getopt_argv_const *argv, - const char *options, - const struct option *long_options, int *opt_index) -{ - return _getopt_internal (argc, (char **) argv, options, long_options, - opt_index, 1, 0); -} - -int -_getopt_long_only_r (int argc, char **argv, const char *options, - const struct option *long_options, int *opt_index, - struct _getopt_data *d) -{ - return _getopt_internal_r (argc, argv, options, long_options, opt_index, - 1, 0, d); -} - - -#ifdef TEST - -#include - -int -main (int argc, char **argv) -{ - int c; - int digit_optind = 0; - - while (1) - { - int this_option_optind = optind ? optind : 1; - int option_index = 0; - static struct option long_options[] = - { - {"add", 1, 0, 0}, - {"append", 0, 0, 0}, - {"delete", 1, 0, 0}, - {"verbose", 0, 0, 0}, - {"create", 0, 0, 0}, - {"file", 1, 0, 0}, - {0, 0, 0, 0} - }; - - c = getopt_long (argc, argv, "abc:d:0123456789", - long_options, &option_index); - if (c == -1) - break; - - switch (c) - { - case 0: - printf ("option %s", long_options[option_index].name); - if (optarg) - printf (" with arg %s", optarg); - printf ("\n"); - break; - - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - if (digit_optind != 0 && digit_optind != this_option_optind) - printf ("digits occur in two different argv-elements.\n"); - digit_optind = this_option_optind; - printf ("option %c\n", c); - break; - - case 'a': - printf ("option a\n"); - break; - - case 'b': - printf ("option b\n"); - break; - - case 'c': - printf ("option c with value `%s'\n", optarg); - break; - - case 'd': - printf ("option d with value `%s'\n", optarg); - break; - - case '?': - break; - - default: - printf ("?? getopt returned character code 0%o ??\n", c); - } - } - - if (optind < argc) - { - printf ("non-option ARGV-elements: "); - while (optind < argc) - printf ("%s ", argv[optind++]); - printf ("\n"); - } - - exit (0); -} - -#endif /* TEST */ diff --git a/Build/source/utils/xz-4.999.9beta/lib/getopt_int.h b/Build/source/utils/xz-4.999.9beta/lib/getopt_int.h deleted file mode 100644 index 401579fd289..00000000000 --- a/Build/source/utils/xz-4.999.9beta/lib/getopt_int.h +++ /dev/null @@ -1,131 +0,0 @@ -/* Internal declarations for getopt. - Copyright (C) 1989-1994,1996-1999,2001,2003,2004 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - - 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, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _GETOPT_INT_H -#define _GETOPT_INT_H 1 - -extern int _getopt_internal (int ___argc, char **___argv, - const char *__shortopts, - const struct option *__longopts, int *__longind, - int __long_only, int __posixly_correct); - - -/* Reentrant versions which can handle parsing multiple argument - vectors at the same time. */ - -/* Data type for reentrant functions. */ -struct _getopt_data -{ - /* These have exactly the same meaning as the corresponding global - variables, except that they are used for the reentrant - versions of getopt. */ - int optind; - int opterr; - int optopt; - char *optarg; - - /* Internal members. */ - - /* True if the internal members have been initialized. */ - int __initialized; - - /* The next char to be scanned in the option-element - in which the last option character we returned was found. - This allows us to pick up the scan where we left off. - - If this is zero, or a null string, it means resume the scan - by advancing to the next ARGV-element. */ - char *__nextchar; - - /* Describe how to deal with options that follow non-option ARGV-elements. - - If the caller did not specify anything, - the default is REQUIRE_ORDER if the environment variable - POSIXLY_CORRECT is defined, PERMUTE otherwise. - - REQUIRE_ORDER means don't recognize them as options; - stop option processing when the first non-option is seen. - This is what Unix does. - This mode of operation is selected by either setting the environment - variable POSIXLY_CORRECT, or using `+' as the first character - of the list of option characters, or by calling getopt. - - PERMUTE is the default. We permute the contents of ARGV as we - scan, so that eventually all the non-options are at the end. - This allows options to be given in any order, even with programs - that were not written to expect this. - - RETURN_IN_ORDER is an option available to programs that were - written to expect options and other ARGV-elements in any order - and that care about the ordering of the two. We describe each - non-option ARGV-element as if it were the argument of an option - with character code 1. Using `-' as the first character of the - list of option characters selects this mode of operation. - - The special argument `--' forces an end of option-scanning regardless - of the value of `ordering'. In the case of RETURN_IN_ORDER, only - `--' can cause `getopt' to return -1 with `optind' != ARGC. */ - - enum - { - REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER - } __ordering; - - /* If the POSIXLY_CORRECT environment variable is set - or getopt was called. */ - int __posixly_correct; - - - /* Handle permutation of arguments. */ - - /* Describe the part of ARGV that contains non-options that have - been skipped. `first_nonopt' is the index in ARGV of the first - of them; `last_nonopt' is the index after the last of them. */ - - int __first_nonopt; - int __last_nonopt; - -#if defined _LIBC && defined USE_NONOPTION_FLAGS - int __nonoption_flags_max_len; - int __nonoption_flags_len; -# endif -}; - -/* The initializer is necessary to set OPTIND and OPTERR to their - default values and to clear the initialization flag. */ -#define _GETOPT_DATA_INITIALIZER { 1, 1 } - -extern int _getopt_internal_r (int ___argc, char **___argv, - const char *__shortopts, - const struct option *__longopts, int *__longind, - int __long_only, int __posixly_correct, - struct _getopt_data *__data); - -extern int _getopt_long_r (int ___argc, char **___argv, - const char *__shortopts, - const struct option *__longopts, int *__longind, - struct _getopt_data *__data); - -extern int _getopt_long_only_r (int ___argc, char **___argv, - const char *__shortopts, - const struct option *__longopts, - int *__longind, - struct _getopt_data *__data); - -#endif /* getopt_int.h */ diff --git a/Build/source/utils/xz-4.999.9beta/m4/acx_pthread.m4 b/Build/source/utils/xz-4.999.9beta/m4/acx_pthread.m4 deleted file mode 100644 index d2b116945f9..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/acx_pthread.m4 +++ /dev/null @@ -1,279 +0,0 @@ -##### http://autoconf-archive.cryp.to/acx_pthread.html -# -# SYNOPSIS -# -# ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) -# -# DESCRIPTION -# -# This macro figures out how to build C programs using POSIX threads. -# It sets the PTHREAD_LIBS output variable to the threads library and -# linker flags, and the PTHREAD_CFLAGS output variable to any special -# C compiler flags that are needed. (The user can also force certain -# compiler flags/libs to be tested by setting these environment -# variables.) -# -# Also sets PTHREAD_CC to any special C compiler that is needed for -# multi-threaded programs (defaults to the value of CC otherwise). -# (This is necessary on AIX to use the special cc_r compiler alias.) -# -# NOTE: You are assumed to not only compile your program with these -# flags, but also link it with them as well. e.g. you should link -# with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS -# $LIBS -# -# If you are only building threads programs, you may wish to use -# these variables in your default LIBS, CFLAGS, and CC: -# -# LIBS="$PTHREAD_LIBS $LIBS" -# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -# CC="$PTHREAD_CC" -# -# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute -# constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to -# that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). -# -# ACTION-IF-FOUND is a list of shell commands to run if a threads -# library is found, and ACTION-IF-NOT-FOUND is a list of commands to -# run it if it is not found. If ACTION-IF-FOUND is not specified, the -# default action will define HAVE_PTHREAD. -# -# Please let the authors know if this macro fails on any platform, or -# if you have any other suggestions or comments. This macro was based -# on work by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) -# (with help from M. Frigo), as well as ac_pthread and hb_pthread -# macros posted by Alejandro Forero Cuervo to the autoconf macro -# repository. We are also grateful for the helpful feedback of -# numerous users. -# -# LAST MODIFICATION -# -# 2007-07-29 -# -# COPYLEFT -# -# Copyright (c) 2007 Steven G. Johnson -# -# 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 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see -# . -# -# As a special exception, the respective Autoconf Macro's copyright -# owner gives unlimited permission to copy, distribute and modify the -# configure scripts that are the output of Autoconf when processing -# the Macro. You need not follow the terms of the GNU General Public -# License when using or distributing such scripts, even though -# portions of the text of the Macro appear in them. The GNU General -# Public License (GPL) does govern all other use of the material that -# constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the -# Autoconf Macro released by the Autoconf Macro Archive. When you -# make and distribute a modified version of the Autoconf Macro, you -# may extend this special exception to the GPL to apply to your -# modified version as well. - -AC_DEFUN([ACX_PTHREAD], [ -AC_REQUIRE([AC_CANONICAL_HOST]) -AC_LANG_SAVE -AC_LANG_C -acx_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) - AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) - AC_MSG_RESULT($acx_pthread_ok) - if test x"$acx_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# ... -mt is also the pthreads flag for HP/aCC -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case "${host_cpu}-${host_os}" in - *solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthreads/-mt/ - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" - ;; -esac - -if test x"$acx_pthread_ok" = xno; then -for flag in $acx_pthread_flags; do - - case $flag in - none) - AC_MSG_CHECKING([whether pthreads work without any flags]) - ;; - - -*) - AC_MSG_CHECKING([whether pthreads work with $flag]) - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) - if test x"$acx_pthread_config" = xno; then continue; fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - AC_MSG_CHECKING([for the pthreads library -l$flag]) - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - AC_TRY_LINK([#include ], - [pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], - [acx_pthread_ok=yes]) - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - AC_MSG_RESULT($acx_pthread_ok) - if test "x$acx_pthread_ok" = xyes; then - break; - fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$acx_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - AC_MSG_CHECKING([for joinable pthread attribute]) - attr_name=unknown - for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do - AC_TRY_LINK([#include ], [int attr=$attr; return attr;], - [attr_name=$attr; break]) - done - AC_MSG_RESULT($attr_name) - if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then - AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, - [Define to necessary symbol if this constant - uses a non-standard name on your system.]) - fi - - AC_MSG_CHECKING([if more special flags are required for pthreads]) - flag=no - case "${host_cpu}-${host_os}" in - *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; - *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; - esac - AC_MSG_RESULT(${flag}) - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - # More AIX lossage: must compile with xlc_r or cc_r - if test x"$GCC" != xyes; then - AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) - else - PTHREAD_CC=$CC - fi -else - PTHREAD_CC="$CC" -fi - -AC_SUBST(PTHREAD_LIBS) -AC_SUBST(PTHREAD_CFLAGS) -AC_SUBST(PTHREAD_CC) - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$acx_pthread_ok" = xyes; then - ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) - : -else - acx_pthread_ok=no - $2 -fi -AC_LANG_RESTORE -])dnl ACX_PTHREAD diff --git a/Build/source/utils/xz-4.999.9beta/m4/getopt.m4 b/Build/source/utils/xz-4.999.9beta/m4/getopt.m4 deleted file mode 100644 index cfbe40f254e..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/getopt.m4 +++ /dev/null @@ -1,71 +0,0 @@ -# getopt.m4 serial 14 (modified version) -dnl Copyright (C) 2002-2006, 2008 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# The getopt module assume you want GNU getopt, with getopt_long etc, -# rather than vanilla POSIX getopt. This means your code should -# always include for the getopt prototypes. - -AC_DEFUN([gl_GETOPT_SUBSTITUTE], -[ - AC_LIBOBJ([getopt]) - AC_LIBOBJ([getopt1]) - gl_GETOPT_SUBSTITUTE_HEADER -]) - -AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], -[ - GETOPT_H=getopt.h - AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], - [Define to rpl_ if the getopt replacement functions and variables - should be used.]) - AC_SUBST([GETOPT_H]) -]) - -AC_DEFUN([gl_GETOPT_CHECK_HEADERS], -[ - if test -z "$GETOPT_H"; then - AC_CHECK_HEADERS([getopt.h], [], [GETOPT_H=getopt.h]) - fi - - if test -z "$GETOPT_H"; then - AC_CHECK_FUNCS([getopt_long], [], [GETOPT_H=getopt.h]) - fi - - dnl BSD getopt_long uses a way to reset option processing, that is different - dnl from GNU and Solaris (which copied the GNU behavior). We support both - dnl GNU and BSD style resetting of getopt_long(), so there's no need to use - dnl GNU getopt_long() on BSD due to different resetting style. - dnl - dnl With getopt_long(), some BSD versions have a bug in handling optional - dnl arguments. This bug appears only if the environment variable - dnl POSIXLY_CORRECT has been set, so it shouldn't be too bad in most - dnl cases; probably most don't have that variable set. But if we actually - dnl hit this bug, it is a real problem due to our heavy use of optional - dnl arguments. - dnl - dnl According to CVS logs, the bug was introduced in OpenBSD in 2003-09-22 - dnl and copied to FreeBSD in 2004-02-24. It was fixed in both in 2006-09-22, - dnl so the affected versions shouldn't be popular anymore anyway. NetBSD - dnl never had this bug. TODO: What about Darwin and others? - if test -z "$GETOPT_H"; then - AC_CHECK_DECL([optreset], - [AC_DEFINE([HAVE_OPTRESET], 1, - [Define to 1 if getopt.h declares extern int optreset.])], - [], [#include ]) - fi - - dnl Solaris 10 getopt doesn't handle `+' as a leading character in an - dnl option string (as of 2005-05-05). We don't use that feature, so this - dnl is not a problem for us. Thus, the respective test was removed here. -]) - -AC_DEFUN([gl_GETOPT_IFELSE], -[ - AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) - AS_IF([test -n "$GETOPT_H"], [$1], [$2]) -]) - -AC_DEFUN([gl_GETOPT], [gl_GETOPT_IFELSE([gl_GETOPT_SUBSTITUTE])]) diff --git a/Build/source/utils/xz-4.999.9beta/m4/gettext.m4 b/Build/source/utils/xz-4.999.9beta/m4/gettext.m4 deleted file mode 100644 index 91c345e992f..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/gettext.m4 +++ /dev/null @@ -1,419 +0,0 @@ -# gettext.m4 serial 59 (gettext-0.16.1) -dnl Copyright (C) 1995-2006 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1995-2000. -dnl Bruno Haible , 2000-2006. - -dnl Macro to add for using GNU gettext. - -dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). -dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The -dnl default (if it is not specified or empty) is 'no-libtool'. -dnl INTLSYMBOL should be 'external' for packages with no intl directory, -dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. -dnl If INTLSYMBOL is 'use-libtool', then a libtool library -dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, -dnl depending on --{enable,disable}-{shared,static} and on the presence of -dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library -dnl $(top_builddir)/intl/libintl.a will be created. -dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext -dnl implementations (in libc or libintl) without the ngettext() function -dnl will be ignored. If NEEDSYMBOL is specified and is -dnl 'need-formatstring-macros', then GNU gettext implementations that don't -dnl support the ISO C 99 formatstring macros will be ignored. -dnl INTLDIR is used to find the intl libraries. If empty, -dnl the value `$(top_builddir)/intl/' is used. -dnl -dnl The result of the configuration is one of three cases: -dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled -dnl and used. -dnl Catalog format: GNU --> install in $(datadir) -dnl Catalog extension: .mo after installation, .gmo in source tree -dnl 2) GNU gettext has been found in the system's C library. -dnl Catalog format: GNU --> install in $(datadir) -dnl Catalog extension: .mo after installation, .gmo in source tree -dnl 3) No internationalization, always use English msgid. -dnl Catalog format: none -dnl Catalog extension: none -dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. -dnl The use of .gmo is historical (it was needed to avoid overwriting the -dnl GNU format catalogs when building on a platform with an X/Open gettext), -dnl but we keep it in order not to force irrelevant filename changes on the -dnl maintainers. -dnl -AC_DEFUN([AM_GNU_GETTEXT], -[ - dnl Argument checking. - ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , - [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT -])])])])]) - ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , - [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT -])])])]) - define([gt_included_intl], - ifelse([$1], [external], - ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), - [yes])) - define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) - gt_NEEDS_INIT - AM_GNU_GETTEXT_NEED([$2]) - - AC_REQUIRE([AM_PO_SUBDIRS])dnl - ifelse(gt_included_intl, yes, [ - AC_REQUIRE([AM_INTL_SUBDIR])dnl - ]) - - dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - - dnl Sometimes libintl requires libiconv, so first search for libiconv. - dnl Ideally we would do this search only after the - dnl if test "$USE_NLS" = "yes"; then - dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then - dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT - dnl the configure script would need to contain the same shell code - dnl again, outside any 'if'. There are two solutions: - dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. - dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. - dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not - dnl documented, we avoid it. - ifelse(gt_included_intl, yes, , [ - AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) - ]) - - dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. - gt_INTL_MACOSX - - dnl Set USE_NLS. - AC_REQUIRE([AM_NLS]) - - ifelse(gt_included_intl, yes, [ - BUILD_INCLUDED_LIBINTL=no - USE_INCLUDED_LIBINTL=no - ]) - LIBINTL= - LTLIBINTL= - POSUB= - - dnl Add a version number to the cache macros. - case " $gt_needs " in - *" need-formatstring-macros "*) gt_api_version=3 ;; - *" need-ngettext "*) gt_api_version=2 ;; - *) gt_api_version=1 ;; - esac - gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" - gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" - - dnl If we use NLS figure out what method - if test "$USE_NLS" = "yes"; then - gt_use_preinstalled_gnugettext=no - ifelse(gt_included_intl, yes, [ - AC_MSG_CHECKING([whether included gettext is requested]) - AC_ARG_WITH(included-gettext, - [ --with-included-gettext use the GNU gettext library included here], - nls_cv_force_use_gnu_gettext=$withval, - nls_cv_force_use_gnu_gettext=no) - AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) - - nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" - if test "$nls_cv_force_use_gnu_gettext" != "yes"; then - ]) - dnl User does not insist on using GNU NLS library. Figure out what - dnl to use. If GNU gettext is available we use this. Else we have - dnl to fall back to GNU NLS library. - - if test $gt_api_version -ge 3; then - gt_revision_test_code=' -#ifndef __GNU_GETTEXT_SUPPORTED_REVISION -#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) -#endif -changequote(,)dnl -typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; -changequote([,])dnl -' - else - gt_revision_test_code= - fi - if test $gt_api_version -ge 2; then - gt_expression_test_code=' + * ngettext ("", "", 0)' - else - gt_expression_test_code= - fi - - AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], - [AC_TRY_LINK([#include -$gt_revision_test_code -extern int _nl_msg_cat_cntr; -extern int *_nl_domain_bindings;], - [bindtextdomain ("", ""); -return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], - [eval "$gt_func_gnugettext_libc=yes"], - [eval "$gt_func_gnugettext_libc=no"])]) - - if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then - dnl Sometimes libintl requires libiconv, so first search for libiconv. - ifelse(gt_included_intl, yes, , [ - AM_ICONV_LINK - ]) - dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL - dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) - dnl because that would add "-liconv" to LIBINTL and LTLIBINTL - dnl even if libiconv doesn't exist. - AC_LIB_LINKFLAGS_BODY([intl]) - AC_CACHE_CHECK([for GNU gettext in libintl], - [$gt_func_gnugettext_libintl], - [gt_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $INCINTL" - gt_save_LIBS="$LIBS" - LIBS="$LIBS $LIBINTL" - dnl Now see whether libintl exists and does not depend on libiconv. - AC_TRY_LINK([#include -$gt_revision_test_code -extern int _nl_msg_cat_cntr; -extern -#ifdef __cplusplus -"C" -#endif -const char *_nl_expand_alias (const char *);], - [bindtextdomain ("", ""); -return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], - [eval "$gt_func_gnugettext_libintl=yes"], - [eval "$gt_func_gnugettext_libintl=no"]) - dnl Now see whether libintl exists and depends on libiconv. - if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then - LIBS="$LIBS $LIBICONV" - AC_TRY_LINK([#include -$gt_revision_test_code -extern int _nl_msg_cat_cntr; -extern -#ifdef __cplusplus -"C" -#endif -const char *_nl_expand_alias (const char *);], - [bindtextdomain ("", ""); -return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], - [LIBINTL="$LIBINTL $LIBICONV" - LTLIBINTL="$LTLIBINTL $LTLIBICONV" - eval "$gt_func_gnugettext_libintl=yes" - ]) - fi - CPPFLAGS="$gt_save_CPPFLAGS" - LIBS="$gt_save_LIBS"]) - fi - - dnl If an already present or preinstalled GNU gettext() is found, - dnl use it. But if this macro is used in GNU gettext, and GNU - dnl gettext is already preinstalled in libintl, we update this - dnl libintl. (Cf. the install rule in intl/Makefile.in.) - if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ - || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ - && test "$PACKAGE" != gettext-runtime \ - && test "$PACKAGE" != gettext-tools; }; then - gt_use_preinstalled_gnugettext=yes - else - dnl Reset the values set by searching for libintl. - LIBINTL= - LTLIBINTL= - INCINTL= - fi - - ifelse(gt_included_intl, yes, [ - if test "$gt_use_preinstalled_gnugettext" != "yes"; then - dnl GNU gettext is not found in the C library. - dnl Fall back on included GNU gettext library. - nls_cv_use_gnu_gettext=yes - fi - fi - - if test "$nls_cv_use_gnu_gettext" = "yes"; then - dnl Mark actions used to generate GNU NLS library. - BUILD_INCLUDED_LIBINTL=yes - USE_INCLUDED_LIBINTL=yes - LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" - LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" - LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` - fi - - CATOBJEXT= - if test "$gt_use_preinstalled_gnugettext" = "yes" \ - || test "$nls_cv_use_gnu_gettext" = "yes"; then - dnl Mark actions to use GNU gettext tools. - CATOBJEXT=.gmo - fi - ]) - - if test -n "$INTL_MACOSX_LIBS"; then - if test "$gt_use_preinstalled_gnugettext" = "yes" \ - || test "$nls_cv_use_gnu_gettext" = "yes"; then - dnl Some extra flags are needed during linking. - LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" - LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" - fi - fi - - if test "$gt_use_preinstalled_gnugettext" = "yes" \ - || test "$nls_cv_use_gnu_gettext" = "yes"; then - AC_DEFINE(ENABLE_NLS, 1, - [Define to 1 if translation of program messages to the user's native language - is requested.]) - else - USE_NLS=no - fi - fi - - AC_MSG_CHECKING([whether to use NLS]) - AC_MSG_RESULT([$USE_NLS]) - if test "$USE_NLS" = "yes"; then - AC_MSG_CHECKING([where the gettext function comes from]) - if test "$gt_use_preinstalled_gnugettext" = "yes"; then - if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then - gt_source="external libintl" - else - gt_source="libc" - fi - else - gt_source="included intl directory" - fi - AC_MSG_RESULT([$gt_source]) - fi - - if test "$USE_NLS" = "yes"; then - - if test "$gt_use_preinstalled_gnugettext" = "yes"; then - if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then - AC_MSG_CHECKING([how to link with libintl]) - AC_MSG_RESULT([$LIBINTL]) - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) - fi - - dnl For backward compatibility. Some packages may be using this. - AC_DEFINE(HAVE_GETTEXT, 1, - [Define if the GNU gettext() function is already present or preinstalled.]) - AC_DEFINE(HAVE_DCGETTEXT, 1, - [Define if the GNU dcgettext() function is already present or preinstalled.]) - fi - - dnl We need to process the po/ directory. - POSUB=po - fi - - ifelse(gt_included_intl, yes, [ - dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL - dnl to 'yes' because some of the testsuite requires it. - if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then - BUILD_INCLUDED_LIBINTL=yes - fi - - dnl Make all variables we use known to autoconf. - AC_SUBST(BUILD_INCLUDED_LIBINTL) - AC_SUBST(USE_INCLUDED_LIBINTL) - AC_SUBST(CATOBJEXT) - - dnl For backward compatibility. Some configure.ins may be using this. - nls_cv_header_intl= - nls_cv_header_libgt= - - dnl For backward compatibility. Some Makefiles may be using this. - DATADIRNAME=share - AC_SUBST(DATADIRNAME) - - dnl For backward compatibility. Some Makefiles may be using this. - INSTOBJEXT=.mo - AC_SUBST(INSTOBJEXT) - - dnl For backward compatibility. Some Makefiles may be using this. - GENCAT=gencat - AC_SUBST(GENCAT) - - dnl For backward compatibility. Some Makefiles may be using this. - INTLOBJS= - if test "$USE_INCLUDED_LIBINTL" = yes; then - INTLOBJS="\$(GETTOBJS)" - fi - AC_SUBST(INTLOBJS) - - dnl Enable libtool support if the surrounding package wishes it. - INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix - AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) - ]) - - dnl For backward compatibility. Some Makefiles may be using this. - INTLLIBS="$LIBINTL" - AC_SUBST(INTLLIBS) - - dnl Make all documented variables known to autoconf. - AC_SUBST(LIBINTL) - AC_SUBST(LTLIBINTL) - AC_SUBST(POSUB) -]) - - -dnl Checks for special options needed on MacOS X. -dnl Defines INTL_MACOSX_LIBS. -AC_DEFUN([gt_INTL_MACOSX], -[ - dnl Check for API introduced in MacOS X 10.2. - AC_CACHE_CHECK([for CFPreferencesCopyAppValue], - gt_cv_func_CFPreferencesCopyAppValue, - [gt_save_LIBS="$LIBS" - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" - AC_TRY_LINK([#include ], - [CFPreferencesCopyAppValue(NULL, NULL)], - [gt_cv_func_CFPreferencesCopyAppValue=yes], - [gt_cv_func_CFPreferencesCopyAppValue=no]) - LIBS="$gt_save_LIBS"]) - if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then - AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1, - [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) - fi - dnl Check for API introduced in MacOS X 10.3. - AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent, - [gt_save_LIBS="$LIBS" - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" - AC_TRY_LINK([#include ], [CFLocaleCopyCurrent();], - [gt_cv_func_CFLocaleCopyCurrent=yes], - [gt_cv_func_CFLocaleCopyCurrent=no]) - LIBS="$gt_save_LIBS"]) - if test $gt_cv_func_CFLocaleCopyCurrent = yes; then - AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1, - [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) - fi - INTL_MACOSX_LIBS= - if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then - INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" - fi - AC_SUBST([INTL_MACOSX_LIBS]) -]) - - -dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. -m4_define([gt_NEEDS_INIT], -[ - m4_divert_text([DEFAULTS], [gt_needs=]) - m4_define([gt_NEEDS_INIT], []) -]) - - -dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) -AC_DEFUN([AM_GNU_GETTEXT_NEED], -[ - m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) -]) - - -dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) -AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) diff --git a/Build/source/utils/xz-4.999.9beta/m4/iconv.m4 b/Build/source/utils/xz-4.999.9beta/m4/iconv.m4 deleted file mode 100644 index 654c4158943..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/iconv.m4 +++ /dev/null @@ -1,101 +0,0 @@ -# iconv.m4 serial AM4 (gettext-0.11.3) -dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], -[ - dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - - dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV - dnl accordingly. - AC_LIB_LINKFLAGS_BODY([iconv]) -]) - -AC_DEFUN([AM_ICONV_LINK], -[ - dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and - dnl those with the standalone portable GNU libiconv installed). - - dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV - dnl accordingly. - AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) - - dnl Add $INCICONV to CPPFLAGS before performing the following checks, - dnl because if the user has installed libiconv and not disabled its use - dnl via --without-libiconv-prefix, he wants to use it. The first - dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. - am_save_CPPFLAGS="$CPPFLAGS" - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) - - AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ - am_cv_func_iconv="no, consider installing GNU libiconv" - am_cv_lib_iconv=no - AC_TRY_LINK([#include -#include ], - [iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd);], - am_cv_func_iconv=yes) - if test "$am_cv_func_iconv" != yes; then - am_save_LIBS="$LIBS" - LIBS="$LIBS $LIBICONV" - AC_TRY_LINK([#include -#include ], - [iconv_t cd = iconv_open("",""); - iconv(cd,NULL,NULL,NULL,NULL); - iconv_close(cd);], - am_cv_lib_iconv=yes - am_cv_func_iconv=yes) - LIBS="$am_save_LIBS" - fi - ]) - if test "$am_cv_func_iconv" = yes; then - AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) - fi - if test "$am_cv_lib_iconv" = yes; then - AC_MSG_CHECKING([how to link with libiconv]) - AC_MSG_RESULT([$LIBICONV]) - else - dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV - dnl either. - CPPFLAGS="$am_save_CPPFLAGS" - LIBICONV= - LTLIBICONV= - fi - AC_SUBST(LIBICONV) - AC_SUBST(LTLIBICONV) -]) - -AC_DEFUN([AM_ICONV], -[ - AM_ICONV_LINK - if test "$am_cv_func_iconv" = yes; then - AC_MSG_CHECKING([for iconv declaration]) - AC_CACHE_VAL(am_cv_proto_iconv, [ - AC_TRY_COMPILE([ -#include -#include -extern -#ifdef __cplusplus -"C" -#endif -#if defined(__STDC__) || defined(__cplusplus) -size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); -#else -size_t iconv(); -#endif -], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") - am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) - am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` - AC_MSG_RESULT([$]{ac_t:- - }[$]am_cv_proto_iconv) - AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, - [Define as const if the declaration of iconv() needs const.]) - fi -]) diff --git a/Build/source/utils/xz-4.999.9beta/m4/lc_cpucores.m4 b/Build/source/utils/xz-4.999.9beta/m4/lc_cpucores.m4 deleted file mode 100644 index 2fae953ad47..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/lc_cpucores.m4 +++ /dev/null @@ -1,57 +0,0 @@ -dnl ########################################################################### -dnl -dnl lc_CPUCORES - Check how to find out the number of online CPU cores -dnl -dnl Check how to find out the number of available CPU cores in the system. -dnl sysconf(_SC_NPROCESSORS_ONLN) works on most systems, except that BSDs -dnl use sysctl(). -dnl -dnl ########################################################################### -dnl -dnl Author: Lasse Collin -dnl -dnl This file has been put into the public domain. -dnl You can do whatever you want with this file. -dnl -dnl ########################################################################### -AC_DEFUN([lc_CPUCORES], [ -AC_MSG_CHECKING([how to detect the number of available CPU cores]) -AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ -#include -int -main(void) -{ - long i; - i = sysconf(_SC_NPROCESSORS_ONLN); - return 0; -} -]])], [ - AC_DEFINE([HAVE_CPUCORES_SYSCONF], [1], - [Define to 1 if the number of available CPU cores can be - detected with sysconf(_SC_NPROCESSORS_ONLN).]) - AC_MSG_RESULT([sysconf]) -], [ -AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ -#include -#ifdef HAVE_SYS_PARAM_H -# include -#endif -#include -int -main(void) -{ - int name[2] = { CTL_HW, HW_NCPU }; - int cpus; - size_t cpus_size = sizeof(cpus); - sysctl(name, 2, &cpus, &cpus_size, NULL, NULL); - return 0; -} -]])], [ - AC_DEFINE([HAVE_CPUCORES_SYSCTL], [1], - [Define to 1 if the number of available CPU cores can be - detected with sysctl().]) - AC_MSG_RESULT([sysctl]) -], [ - AC_MSG_RESULT([unknown]) -])]) -])dnl lc_CPUCORES diff --git a/Build/source/utils/xz-4.999.9beta/m4/lc_physmem.m4 b/Build/source/utils/xz-4.999.9beta/m4/lc_physmem.m4 deleted file mode 100644 index 78be1362db2..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/lc_physmem.m4 +++ /dev/null @@ -1,84 +0,0 @@ -dnl ########################################################################### -dnl -dnl lc_PHYSMEM - Check how to find out the amount of physical memory -dnl -dnl - sysconf() gives all the needed info on GNU+Linux and Solaris. -dnl - BSDs use sysctl(). -dnl - sysinfo() works on Linux/dietlibc and probably on other Linux systems -dnl whose libc may lack sysconf(). -dnl -dnl ########################################################################### -dnl -dnl Author: Lasse Collin -dnl -dnl This file has been put into the public domain. -dnl You can do whatever you want with this file. -dnl -dnl ########################################################################### -AC_DEFUN([lc_PHYSMEM], [ -AC_MSG_CHECKING([how to detect the amount of physical memory]) -AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ -#include -int -main(void) -{ - long i; - i = sysconf(_SC_PAGESIZE); - i = sysconf(_SC_PHYS_PAGES); - return 0; -} -]])], [ - AC_DEFINE([HAVE_PHYSMEM_SYSCONF], [1], - [Define to 1 if the amount of physical memory can be detected - with sysconf(_SC_PAGESIZE) and sysconf(_SC_PHYS_PAGES).]) - AC_MSG_RESULT([sysconf]) -], [ -AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ -#include -#ifdef HAVE_SYS_PARAM_H -# include -#endif -#include -int -main(void) -{ - int name[2] = { CTL_HW, HW_PHYSMEM }; - unsigned long mem; - size_t mem_ptr_size = sizeof(mem); - sysctl(name, 2, &mem, &mem_ptr_size, NULL, NULL); - return 0; -} -]])], [ - AC_DEFINE([HAVE_PHYSMEM_SYSCTL], [1], - [Define to 1 if the amount of physical memory can be detected - with sysctl().]) - AC_MSG_RESULT([sysctl]) -], [ -dnl sysinfo() is Linux-specific. Some non-Linux systems have -dnl incompatible sysinfo() so we must check $host_os. -case $host_os in - linux*) - AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ -#include -int -main(void) -{ - struct sysinfo si; - sysinfo(&si); - return 0; -} - ]])], [ - AC_DEFINE([HAVE_PHYSMEM_SYSINFO], [1], - [Define to 1 if the amount of physical memory - can be detected with Linux sysinfo().]) - AC_MSG_RESULT([sysinfo]) - ], [ - AC_MSG_RESULT([unknown]) - ]) - ;; - *) - AC_MSG_RESULT([unknown]) - ;; -esac -])]) -])dnl lc_PHYSMEM diff --git a/Build/source/utils/xz-4.999.9beta/m4/lib-ld.m4 b/Build/source/utils/xz-4.999.9beta/m4/lib-ld.m4 deleted file mode 100644 index 96c4e2c3396..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/lib-ld.m4 +++ /dev/null @@ -1,110 +0,0 @@ -# lib-ld.m4 serial 3 (gettext-0.13) -dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Subroutines of libtool.m4, -dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision -dnl with libtool.m4. - -dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. -AC_DEFUN([AC_LIB_PROG_LD_GNU], -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, -[# I'd rather use --version here, but apparently some GNU ld's only accept -v. -case `$LD -v 2>&1 conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by GCC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]* | [A-Za-z]:[\\/]*)] - [re_direlt='/[^/][^/]*/\.\./'] - # Canonicalize the path of ld - ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(acl_cv_path_LD, -[if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - acl_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in - *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break ;; - *) - test "$with_gnu_ld" != yes && break ;; - esac - fi - done - IFS="$ac_save_ifs" -else - acl_cv_path_LD="$LD" # Let the user override the test with a path. -fi]) -LD="$acl_cv_path_LD" -if test -n "$LD"; then - AC_MSG_RESULT($LD) -else - AC_MSG_RESULT(no) -fi -test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) -AC_LIB_PROG_LD_GNU -]) diff --git a/Build/source/utils/xz-4.999.9beta/m4/lib-link.m4 b/Build/source/utils/xz-4.999.9beta/m4/lib-link.m4 deleted file mode 100644 index f95b7ba88d5..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/lib-link.m4 +++ /dev/null @@ -1,644 +0,0 @@ -# lib-link.m4 serial 9 (gettext-0.16) -dnl Copyright (C) 2001-2006 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_PREREQ(2.50) - -dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and -dnl the libraries corresponding to explicit and implicit dependencies. -dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and -dnl augments the CPPFLAGS variable. -AC_DEFUN([AC_LIB_LINKFLAGS], -[ - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - define([Name],[translit([$1],[./-], [___])]) - define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) - AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ - AC_LIB_LINKFLAGS_BODY([$1], [$2]) - ac_cv_lib[]Name[]_libs="$LIB[]NAME" - ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" - ac_cv_lib[]Name[]_cppflags="$INC[]NAME" - ]) - LIB[]NAME="$ac_cv_lib[]Name[]_libs" - LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" - INC[]NAME="$ac_cv_lib[]Name[]_cppflags" - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) - AC_SUBST([LIB]NAME) - AC_SUBST([LTLIB]NAME) - dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the - dnl results of this search when this library appears as a dependency. - HAVE_LIB[]NAME=yes - undefine([Name]) - undefine([NAME]) -]) - -dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) -dnl searches for libname and the libraries corresponding to explicit and -dnl implicit dependencies, together with the specified include files and -dnl the ability to compile and link the specified testcode. If found, it -dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and -dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and -dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs -dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. -AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], -[ - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - define([Name],[translit([$1],[./-], [___])]) - define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) - - dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME - dnl accordingly. - AC_LIB_LINKFLAGS_BODY([$1], [$2]) - - dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, - dnl because if the user has installed lib[]Name and not disabled its use - dnl via --without-lib[]Name-prefix, he wants to use it. - ac_save_CPPFLAGS="$CPPFLAGS" - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) - - AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ - ac_save_LIBS="$LIBS" - LIBS="$LIBS $LIB[]NAME" - AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) - LIBS="$ac_save_LIBS" - ]) - if test "$ac_cv_lib[]Name" = yes; then - HAVE_LIB[]NAME=yes - AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) - AC_MSG_CHECKING([how to link with lib[]$1]) - AC_MSG_RESULT([$LIB[]NAME]) - else - HAVE_LIB[]NAME=no - dnl If $LIB[]NAME didn't lead to a usable library, we don't need - dnl $INC[]NAME either. - CPPFLAGS="$ac_save_CPPFLAGS" - LIB[]NAME= - LTLIB[]NAME= - fi - AC_SUBST([HAVE_LIB]NAME) - AC_SUBST([LIB]NAME) - AC_SUBST([LTLIB]NAME) - undefine([Name]) - undefine([NAME]) -]) - -dnl Determine the platform dependent parameters needed to use rpath: -dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, -dnl hardcode_direct, hardcode_minus_L. -AC_DEFUN([AC_LIB_RPATH], -[ - dnl Tell automake >= 1.10 to complain if config.rpath is missing. - m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) - AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS - AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld - AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host - AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir - AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ - CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ - ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh - . ./conftest.sh - rm -f ./conftest.sh - acl_cv_rpath=done - ]) - wl="$acl_cv_wl" - libext="$acl_cv_libext" - shlibext="$acl_cv_shlibext" - hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" - hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" - hardcode_direct="$acl_cv_hardcode_direct" - hardcode_minus_L="$acl_cv_hardcode_minus_L" - dnl Determine whether the user wants rpath handling at all. - AC_ARG_ENABLE(rpath, - [ --disable-rpath do not hardcode runtime library paths], - :, enable_rpath=yes) -]) - -dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and -dnl the libraries corresponding to explicit and implicit dependencies. -dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. -AC_DEFUN([AC_LIB_LINKFLAGS_BODY], -[ - AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) - define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) - dnl By default, look in $includedir and $libdir. - use_additional=yes - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - AC_LIB_ARG_WITH([lib$1-prefix], -[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib - --without-lib$1-prefix don't search for lib$1 in includedir and libdir], -[ - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - else - additional_includedir="$withval/include" - additional_libdir="$withval/$acl_libdirstem" - fi - fi -]) - dnl Search the library and its dependencies in $additional_libdir and - dnl $LDFLAGS. Using breadth-first-seach. - LIB[]NAME= - LTLIB[]NAME= - INC[]NAME= - rpathdirs= - ltrpathdirs= - names_already_handled= - names_next_round='$1 $2' - while test -n "$names_next_round"; do - names_this_round="$names_next_round" - names_next_round= - for name in $names_this_round; do - already_handled= - for n in $names_already_handled; do - if test "$n" = "$name"; then - already_handled=yes - break - fi - done - if test -z "$already_handled"; then - names_already_handled="$names_already_handled $name" - dnl See if it was already located by an earlier AC_LIB_LINKFLAGS - dnl or AC_LIB_HAVE_LINKFLAGS call. - uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` - eval value=\"\$HAVE_LIB$uppername\" - if test -n "$value"; then - if test "$value" = yes; then - eval value=\"\$LIB$uppername\" - test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" - eval value=\"\$LTLIB$uppername\" - test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" - else - dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined - dnl that this library doesn't exist. So just drop it. - : - fi - else - dnl Search the library lib$name in $additional_libdir and $LDFLAGS - dnl and the already constructed $LIBNAME/$LTLIBNAME. - found_dir= - found_la= - found_so= - found_a= - if test $use_additional = yes; then - if test -n "$shlibext" \ - && { test -f "$additional_libdir/lib$name.$shlibext" \ - || { test "$shlibext" = dll \ - && test -f "$additional_libdir/lib$name.dll.a"; }; }; then - found_dir="$additional_libdir" - if test -f "$additional_libdir/lib$name.$shlibext"; then - found_so="$additional_libdir/lib$name.$shlibext" - else - found_so="$additional_libdir/lib$name.dll.a" - fi - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" - fi - else - if test -f "$additional_libdir/lib$name.$libext"; then - found_dir="$additional_libdir" - found_a="$additional_libdir/lib$name.$libext" - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" - fi - fi - fi - fi - if test "X$found_dir" = "X"; then - for x in $LDFLAGS $LTLIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - case "$x" in - -L*) - dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" \ - && { test -f "$dir/lib$name.$shlibext" \ - || { test "$shlibext" = dll \ - && test -f "$dir/lib$name.dll.a"; }; }; then - found_dir="$dir" - if test -f "$dir/lib$name.$shlibext"; then - found_so="$dir/lib$name.$shlibext" - else - found_so="$dir/lib$name.dll.a" - fi - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" - fi - else - if test -f "$dir/lib$name.$libext"; then - found_dir="$dir" - found_a="$dir/lib$name.$libext" - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" - fi - fi - fi - ;; - esac - if test "X$found_dir" != "X"; then - break - fi - done - fi - if test "X$found_dir" != "X"; then - dnl Found the library. - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" - if test "X$found_so" != "X"; then - dnl Linking with a shared library. We attempt to hardcode its - dnl directory into the executable's runpath, unless it's the - dnl standard /usr/lib. - if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then - dnl No hardcoding is needed. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - dnl Use an explicit option to hardcode DIR into the resulting - dnl binary. - dnl Potentially add DIR to ltrpathdirs. - dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $found_dir" - fi - dnl The hardcoding into $LIBNAME is system dependent. - if test "$hardcode_direct" = yes; then - dnl Using DIR/libNAME.so during linking hardcodes DIR into the - dnl resulting binary. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then - dnl Use an explicit option to hardcode DIR into the resulting - dnl binary. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - dnl Potentially add DIR to rpathdirs. - dnl The rpathdirs will be appended to $LIBNAME at the end. - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $found_dir" - fi - else - dnl Rely on "-L$found_dir". - dnl But don't add it if it's already contained in the LDFLAGS - dnl or the already constructed $LIBNAME - haveit= - for x in $LDFLAGS $LIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" - fi - if test "$hardcode_minus_L" != no; then - dnl FIXME: Not sure whether we should use - dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" - dnl here. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH - dnl here, because this doesn't fit in flags passed to the - dnl compiler. So give up. No hardcoding. This affects only - dnl very old systems. - dnl FIXME: Not sure whether we should use - dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" - dnl here. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" - fi - fi - fi - fi - else - if test "X$found_a" != "X"; then - dnl Linking with a static library. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" - else - dnl We shouldn't come here, but anyway it's good to have a - dnl fallback. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" - fi - fi - dnl Assume the include files are nearby. - additional_includedir= - case "$found_dir" in - */$acl_libdirstem | */$acl_libdirstem/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` - additional_includedir="$basedir/include" - ;; - esac - if test "X$additional_includedir" != "X"; then - dnl Potentially add $additional_includedir to $INCNAME. - dnl But don't add it - dnl 1. if it's the standard /usr/include, - dnl 2. if it's /usr/local/include and we are using GCC on Linux, - dnl 3. if it's already present in $CPPFLAGS or the already - dnl constructed $INCNAME, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - for x in $CPPFLAGS $INC[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - dnl Really add $additional_includedir to $INCNAME. - INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" - fi - fi - fi - fi - fi - dnl Look for dependencies. - if test -n "$found_la"; then - dnl Read the .la file. It defines the variables - dnl dlname, library_names, old_library, dependency_libs, current, - dnl age, revision, installed, dlopen, dlpreopen, libdir. - save_libdir="$libdir" - case "$found_la" in - */* | *\\*) . "$found_la" ;; - *) . "./$found_la" ;; - esac - libdir="$save_libdir" - dnl We use only dependency_libs. - for dep in $dependency_libs; do - case "$dep" in - -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. - dnl But don't add it - dnl 1. if it's the standard /usr/lib, - dnl 2. if it's /usr/local/lib and we are using GCC on Linux, - dnl 3. if it's already present in $LDFLAGS or the already - dnl constructed $LIBNAME, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then - haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - haveit= - for x in $LDFLAGS $LIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LIBNAME. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" - fi - fi - haveit= - for x in $LDFLAGS $LTLIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LTLIBNAME. - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" - fi - fi - fi - fi - ;; - -R*) - dir=`echo "X$dep" | sed -e 's/^X-R//'` - if test "$enable_rpath" != no; then - dnl Potentially add DIR to rpathdirs. - dnl The rpathdirs will be appended to $LIBNAME at the end. - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $dir" - fi - dnl Potentially add DIR to ltrpathdirs. - dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $dir" - fi - fi - ;; - -l*) - dnl Handle this in the next round. - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` - ;; - *.la) - dnl Handle this in the next round. Throw away the .la's - dnl directory; it is already contained in a preceding -L - dnl option. - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` - ;; - *) - dnl Most likely an immediate library name. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" - ;; - esac - done - fi - else - dnl Didn't find the library; assume it is in the system directories - dnl known to the linker and runtime loader. (All the system - dnl directories known to the linker should also be known to the - dnl runtime loader, otherwise the system is severely misconfigured.) - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" - fi - fi - fi - done - done - if test "X$rpathdirs" != "X"; then - if test -n "$hardcode_libdir_separator"; then - dnl Weird platform: only the last -rpath option counts, the user must - dnl pass all path elements in one option. We can arrange that for a - dnl single library, but not when more than one $LIBNAMEs are used. - alldirs= - for found_dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" - done - dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" - else - dnl The -rpath options are cumulative. - for found_dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$found_dir" - eval flag=\"$hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" - done - fi - fi - if test "X$ltrpathdirs" != "X"; then - dnl When using libtool, the option that works for both libraries and - dnl executables is -R. The -R options are cumulative. - for found_dir in $ltrpathdirs; do - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" - done - fi -]) - -dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, -dnl unless already present in VAR. -dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes -dnl contains two or three consecutive elements that belong together. -AC_DEFUN([AC_LIB_APPENDTOVAR], -[ - for element in [$2]; do - haveit= - for x in $[$1]; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X$element"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - [$1]="${[$1]}${[$1]:+ }$element" - fi - done -]) - -dnl For those cases where a variable contains several -L and -l options -dnl referring to unknown libraries and directories, this macro determines the -dnl necessary additional linker options for the runtime path. -dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) -dnl sets LDADDVAR to linker options needed together with LIBSVALUE. -dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, -dnl otherwise linking without libtool is assumed. -AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], -[ - AC_REQUIRE([AC_LIB_RPATH]) - AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) - $1= - if test "$enable_rpath" != no; then - if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then - dnl Use an explicit option to hardcode directories into the resulting - dnl binary. - rpathdirs= - next= - for opt in $2; do - if test -n "$next"; then - dir="$next" - dnl No need to hardcode the standard /usr/lib. - if test "X$dir" != "X/usr/$acl_libdirstem"; then - rpathdirs="$rpathdirs $dir" - fi - next= - else - case $opt in - -L) next=yes ;; - -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` - dnl No need to hardcode the standard /usr/lib. - if test "X$dir" != "X/usr/$acl_libdirstem"; then - rpathdirs="$rpathdirs $dir" - fi - next= ;; - *) next= ;; - esac - fi - done - if test "X$rpathdirs" != "X"; then - if test -n ""$3""; then - dnl libtool is used for linking. Use -R options. - for dir in $rpathdirs; do - $1="${$1}${$1:+ }-R$dir" - done - else - dnl The linker is used for linking directly. - if test -n "$hardcode_libdir_separator"; then - dnl Weird platform: only the last -rpath option counts, the user - dnl must pass all path elements in one option. - alldirs= - for dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$dir" - done - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - $1="$flag" - else - dnl The -rpath options are cumulative. - for dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$dir" - eval flag=\"$hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - $1="${$1}${$1:+ }$flag" - done - fi - fi - fi - fi - fi - AC_SUBST([$1]) -]) diff --git a/Build/source/utils/xz-4.999.9beta/m4/lib-prefix.m4 b/Build/source/utils/xz-4.999.9beta/m4/lib-prefix.m4 deleted file mode 100644 index a8684e17e3a..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/lib-prefix.m4 +++ /dev/null @@ -1,185 +0,0 @@ -# lib-prefix.m4 serial 5 (gettext-0.15) -dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and -dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't -dnl require excessive bracketing. -ifdef([AC_HELP_STRING], -[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], -[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) - -dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed -dnl to access previously installed libraries. The basic assumption is that -dnl a user will want packages to use other packages he previously installed -dnl with the same --prefix option. -dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate -dnl libraries, but is otherwise very convenient. -AC_DEFUN([AC_LIB_PREFIX], -[ - AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - dnl By default, look in $includedir and $libdir. - use_additional=yes - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - AC_LIB_ARG_WITH([lib-prefix], -[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib - --without-lib-prefix don't search for libraries in includedir and libdir], -[ - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - else - additional_includedir="$withval/include" - additional_libdir="$withval/$acl_libdirstem" - fi - fi -]) - if test $use_additional = yes; then - dnl Potentially add $additional_includedir to $CPPFLAGS. - dnl But don't add it - dnl 1. if it's the standard /usr/include, - dnl 2. if it's already present in $CPPFLAGS, - dnl 3. if it's /usr/local/include and we are using GCC on Linux, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - for x in $CPPFLAGS; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - dnl Really add $additional_includedir to $CPPFLAGS. - CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" - fi - fi - fi - fi - dnl Potentially add $additional_libdir to $LDFLAGS. - dnl But don't add it - dnl 1. if it's the standard /usr/lib, - dnl 2. if it's already present in $LDFLAGS, - dnl 3. if it's /usr/local/lib and we are using GCC on Linux, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then - haveit= - for x in $LDFLAGS; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then - if test -n "$GCC"; then - case $host_os in - linux*) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LDFLAGS. - LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" - fi - fi - fi - fi - fi -]) - -dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, -dnl acl_final_exec_prefix, containing the values to which $prefix and -dnl $exec_prefix will expand at the end of the configure script. -AC_DEFUN([AC_LIB_PREPARE_PREFIX], -[ - dnl Unfortunately, prefix and exec_prefix get only finally determined - dnl at the end of configure. - if test "X$prefix" = "XNONE"; then - acl_final_prefix="$ac_default_prefix" - else - acl_final_prefix="$prefix" - fi - if test "X$exec_prefix" = "XNONE"; then - acl_final_exec_prefix='${prefix}' - else - acl_final_exec_prefix="$exec_prefix" - fi - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" - prefix="$acl_save_prefix" -]) - -dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the -dnl variables prefix and exec_prefix bound to the values they will have -dnl at the end of the configure script. -AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], -[ - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - $1 - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" -]) - -dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing -dnl the basename of the libdir, either "lib" or "lib64". -AC_DEFUN([AC_LIB_PREPARE_MULTILIB], -[ - dnl There is no formal standard regarding lib and lib64. The current - dnl practice is that on a system supporting 32-bit and 64-bit instruction - dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit - dnl libraries go under $prefix/lib. We determine the compiler's default - dnl mode by looking at the compiler's library search path. If at least - dnl of its elements ends in /lib64 or points to a directory whose absolute - dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the - dnl default, namely "lib". - acl_libdirstem=lib - searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` - if test -n "$searchpath"; then - acl_save_IFS="${IFS= }"; IFS=":" - for searchdir in $searchpath; do - if test -d "$searchdir"; then - case "$searchdir" in - */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; - *) searchdir=`cd "$searchdir" && pwd` - case "$searchdir" in - */lib64 ) acl_libdirstem=lib64 ;; - esac ;; - esac - fi - done - IFS="$acl_save_IFS" - fi -]) diff --git a/Build/source/utils/xz-4.999.9beta/m4/libtool.m4 b/Build/source/utils/xz-4.999.9beta/m4/libtool.m4 deleted file mode 100644 index 39ba996cb96..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/libtool.m4 +++ /dev/null @@ -1,7357 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# 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. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -]) - -# serial 56 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl -_LT_PROG_ECHO_BACKSLASH - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from `configure', and `config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" -])# _LT_PROG_LTMAIN - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case \$lt_ECHO in -*'\\\[$]0 --fallback-echo"')dnl " - lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` - ;; -esac - -_LT_OUTPUT_LIBTOOL_INIT -]) - - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -cat >"$CONFIG_LT" <<_LTEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate a libtool stub with the current configuration. - -lt_cl_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AS_SHELL_SANITIZE -_AS_PREPARE - -exec AS_MESSAGE_FD>&1 -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to ." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2008 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -if test "$no_create" != yes; then - lt_cl_success=: - test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" - exec AS_MESSAGE_LOG_FD>/dev/null - $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false - exec AS_MESSAGE_LOG_FD>>config.log - $lt_cl_success || AS_EXIT(1) -fi -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -_LT_COPYING -_LT_LIBTOOL_TAGS - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_XSI_SHELLFNS - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES -# -------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX -# ----------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[ifdef([AC_DIVERSION_NOTICE], - [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], - [AC_DIVERT_PUSH(NOTICE)]) -$1 -AC_DIVERT_POP -])# _LT_SHELL_INIT - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[_LT_SHELL_INIT([ -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$lt_ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` - ;; -esac - -ECHO=${lt_ECHO-echo} -if test "X[$]1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X[$]1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell. - exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} -fi - -if test "X[$]1" = X--fallback-echo; then - # used as fallback echo - shift - cat <<_LT_EOF -[$]* -_LT_EOF - exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$lt_ECHO"; then - if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if { echo_test_string=`eval $cmd`; } 2>/dev/null && - { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null - then - break - fi - done - fi - - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : - else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$ECHO" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - ECHO='print -r' - elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} - else - # Try using printf. - ECHO='printf %s\n' - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - ECHO="$CONFIG_SHELL [$]0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$CONFIG_SHELL [$]0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do - if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "[$]0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} - else - # Oops. We lost completely, so just stick with echo. - ECHO=echo - fi - fi - fi - fi - fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -lt_ECHO=$ECHO -if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then - lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" -fi - -AC_SUBST(lt_ECHO) -]) -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], - [An echo program that does not interpret backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" -])# _LT_ENABLE_LOCK - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[AC_CHECK_TOOL(AR, ar, false) -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1]) - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - 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` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$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 - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line __oline__ "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - 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' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - 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 - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - 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 - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[[3-9]]*) - version_type=linux - 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' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - 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' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - 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 - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - 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=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - 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 - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - 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 - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program which can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program which can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method == "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC*) - # IBM XL 8.0 on PPC - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl*) - # IBM XL C 8.0/Fortran 10.1 on PPC - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac -AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE(int foo(void) {}, - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - ) - LDFLAGS="$save_LDFLAGS" - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_MSG_CHECKING([whether -lc should be explicitly linked in]) - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], - [[If ld is used when linking, flag to hardcode $libdir into a binary - during linking. This must work even if $libdir does not exist]]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [fix_srcfile_path], [1], - [Fix the shell variable $srcfile for the compiler]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report which library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC="$lt_save_CC" -])# _LT_LANG_C_CONFIG - - -# _LT_PROG_CXX -# ------------ -# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ -# compiler, we have our own version here. -m4_defun([_LT_PROG_CXX], -[ -pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) -AC_PROG_CXX -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_CXX - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_CXX], []) - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[AC_REQUIRE([_LT_PROG_CXX])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - gnu*) - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 will use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - xl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=echo - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -]) -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_PROG_F77 -# ------------ -# Since AC_PROG_F77 is broken, in that it returns the empty string -# if there is no fortran compiler, we have our own version here. -m4_defun([_LT_PROG_F77], -[ -pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) -AC_PROG_F77 -if test -z "$F77" || test "X$F77" = "Xno"; then - _lt_disable_F77=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_F77 - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_F77], []) - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_REQUIRE([_LT_PROG_F77])dnl -AC_LANG_PUSH(Fortran 77) - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${F77-"f77"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_F77" != yes - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_PROG_FC -# ----------- -# Since AC_PROG_FC is broken, in that it returns the empty string -# if there is no fortran compiler, we have our own version here. -m4_defun([_LT_PROG_FC], -[ -pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) -AC_PROG_FC -if test -z "$FC" || test "X$FC" = "Xno"; then - _lt_disable_FC=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_FC - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_FC], []) - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_REQUIRE([_LT_PROG_FC])dnl -AC_LANG_PUSH(Fortran) - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${FC-"f95"} - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_FC" != yes - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC="$lt_save_CC" -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC="$lt_save_CC" -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PROG_XSI_SHELLFNS -# --------------------- -# Bourne and XSI compatible variants of some useful shell functions. -m4_defun([_LT_PROG_XSI_SHELLFNS], -[case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $[*] )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - -dnl func_dirname_and_basename -dnl A portable version of this function is already defined in general.m4sh -dnl so there is no need for it here. - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[[^=]]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$[@]"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]+=\$[2]" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]=\$$[1]\$[2]" -} - -_LT_EOF - ;; - esac -]) diff --git a/Build/source/utils/xz-4.999.9beta/m4/ltoptions.m4 b/Build/source/utils/xz-4.999.9beta/m4/ltoptions.m4 deleted file mode 100644 index 34151a3ba62..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/ltoptions.m4 +++ /dev/null @@ -1,368 +0,0 @@ -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# 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 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - ]) -])# _LT_SET_OPTIONS - - -## --------------------------------- ## -## Macros to handle LT_INIT options. ## -## --------------------------------- ## - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [0], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' -# LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/Build/source/utils/xz-4.999.9beta/m4/ltsugar.m4 b/Build/source/utils/xz-4.999.9beta/m4/ltsugar.m4 deleted file mode 100644 index 9000a057d31..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/ltsugar.m4 +++ /dev/null @@ -1,123 +0,0 @@ -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# 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 ltsugar.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) - - -# lt_join(SEP, ARG1, [ARG2...]) -# ----------------------------- -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their -# associated separator. -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier -# versions in m4sugar had bugs. -m4_define([lt_join], -[m4_if([$#], [1], [], - [$#], [2], [[$2]], - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) -m4_define([_lt_join], -[m4_if([$#$2], [2], [], - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) - - -# lt_car(LIST) -# lt_cdr(LIST) -# ------------ -# Manipulate m4 lists. -# These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. -m4_define([lt_car], [[$1]]) -m4_define([lt_cdr], -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], - [$#], 1, [], - [m4_dquote(m4_shift($@))])]) -m4_define([lt_unquote], $1) - - -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) -# ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. -# Note that neither SEPARATOR nor STRING are expanded; they are appended -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). -# No SEPARATOR is output if MACRO-NAME was previously undefined (different -# than defined and empty). -# -# This macro is needed until we can rely on Autoconf 2.62, since earlier -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. -m4_define([lt_append], -[m4_define([$1], - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) - - - -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) -# ---------------------------------------------------------- -# Produce a SEP delimited list of all paired combinations of elements of -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list -# has the form PREFIXmINFIXSUFFIXn. -# Needed until we can rely on m4_combine added in Autoconf 2.62. -m4_define([lt_combine], -[m4_if(m4_eval([$# > 3]), [1], - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl -[[m4_foreach([_Lt_prefix], [$2], - [m4_foreach([_Lt_suffix], - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) - - -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) -# ----------------------------------------------------------------------- -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. -m4_define([lt_if_append_uniq], -[m4_ifdef([$1], - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], - [lt_append([$1], [$2], [$3])$4], - [$5])], - [lt_append([$1], [$2], [$3])$4])]) - - -# lt_dict_add(DICT, KEY, VALUE) -# ----------------------------- -m4_define([lt_dict_add], -[m4_define([$1($2)], [$3])]) - - -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) -# -------------------------------------------- -m4_define([lt_dict_add_subkey], -[m4_define([$1($2:$3)], [$4])]) - - -# lt_dict_fetch(DICT, KEY, [SUBKEY]) -# ---------------------------------- -m4_define([lt_dict_fetch], -[m4_ifval([$3], - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) - - -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) -# ----------------------------------------------------------------- -m4_define([lt_if_dict_fetch], -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], - [$5], - [$6])]) - - -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) -# -------------------------------------------------------------- -m4_define([lt_dict_filter], -[m4_if([$5], [], [], - [lt_join(m4_quote(m4_default([$4], [[, ]])), - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl -]) diff --git a/Build/source/utils/xz-4.999.9beta/m4/ltversion.m4 b/Build/source/utils/xz-4.999.9beta/m4/ltversion.m4 deleted file mode 100644 index b8e154fe6e1..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# 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. - -# Generated from ltversion.in. - -# serial 3012 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.2.6]) -m4_define([LT_PACKAGE_REVISION], [1.3012]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.2.6' -macro_revision='1.3012' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) diff --git a/Build/source/utils/xz-4.999.9beta/m4/lt~obsolete.m4 b/Build/source/utils/xz-4.999.9beta/m4/lt~obsolete.m4 deleted file mode 100644 index 637bb2066c4..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/lt~obsolete.m4 +++ /dev/null @@ -1,92 +0,0 @@ -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004. -# -# 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 lt~obsolete.m4 - -# These exist entirely to fool aclocal when bootstrapping libtool. -# -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) -# which have later been changed to m4_define as they aren't part of the -# exported API, or moved to Autoconf or Automake where they belong. -# -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -# using a macro with the same name in our local m4/libtool.m4 it'll -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -# and doesn't know about Autoconf macros at all.) -# -# So we provide this file, which has a silly filename so it's always -# included after everything else. This provides aclocal with the -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -# because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -# -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -# Yes, that means every name once taken will need to remain here until -# we give up compatibility with versions before 1.7, at which point -# we need to keep only those names which we still refer to. - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) - -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) diff --git a/Build/source/utils/xz-4.999.9beta/m4/nls.m4 b/Build/source/utils/xz-4.999.9beta/m4/nls.m4 deleted file mode 100644 index 7967cc2f9ac..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/nls.m4 +++ /dev/null @@ -1,31 +0,0 @@ -# nls.m4 serial 3 (gettext-0.15) -dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1995-2000. -dnl Bruno Haible , 2000-2003. - -AC_PREREQ(2.50) - -AC_DEFUN([AM_NLS], -[ - AC_MSG_CHECKING([whether NLS is requested]) - dnl Default is enabled NLS - AC_ARG_ENABLE(nls, - [ --disable-nls do not use Native Language Support], - USE_NLS=$enableval, USE_NLS=yes) - AC_MSG_RESULT($USE_NLS) - AC_SUBST(USE_NLS) -]) diff --git a/Build/source/utils/xz-4.999.9beta/m4/po.m4 b/Build/source/utils/xz-4.999.9beta/m4/po.m4 deleted file mode 100644 index 00133ef36f8..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/po.m4 +++ /dev/null @@ -1,428 +0,0 @@ -# po.m4 serial 13 (gettext-0.15) -dnl Copyright (C) 1995-2006 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1995-2000. -dnl Bruno Haible , 2000-2003. - -AC_PREREQ(2.50) - -dnl Checks for all prerequisites of the po subdirectory. -AC_DEFUN([AM_PO_SUBDIRS], -[ - AC_REQUIRE([AC_PROG_MAKE_SET])dnl - AC_REQUIRE([AC_PROG_INSTALL])dnl - AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake - AC_REQUIRE([AM_NLS])dnl - - dnl Perform the following tests also if --disable-nls has been given, - dnl because they are needed for "make dist" to work. - - dnl Search for GNU msgfmt in the PATH. - dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. - dnl The second test excludes FreeBSD msgfmt. - AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, - [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && - (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], - :) - AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) - - dnl Test whether it is GNU msgfmt >= 0.15. -changequote(,)dnl - case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; - *) MSGFMT_015=$MSGFMT ;; - esac -changequote([,])dnl - AC_SUBST([MSGFMT_015]) -changequote(,)dnl - case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; - *) GMSGFMT_015=$GMSGFMT ;; - esac -changequote([,])dnl - AC_SUBST([GMSGFMT_015]) - - dnl Search for GNU xgettext 0.12 or newer in the PATH. - dnl The first test excludes Solaris xgettext and early GNU xgettext versions. - dnl The second test excludes FreeBSD xgettext. - AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, - [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && - (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], - :) - dnl Remove leftover from FreeBSD xgettext call. - rm -f messages.po - - dnl Test whether it is GNU xgettext >= 0.15. -changequote(,)dnl - case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; - *) XGETTEXT_015=$XGETTEXT ;; - esac -changequote([,])dnl - AC_SUBST([XGETTEXT_015]) - - dnl Search for GNU msgmerge 0.11 or newer in the PATH. - AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, - [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) - - dnl Installation directories. - dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we - dnl have to define it here, so that it can be used in po/Makefile. - test -n "$localedir" || localedir='${datadir}/locale' - AC_SUBST([localedir]) - - AC_CONFIG_COMMANDS([po-directories], [[ - for ac_file in $CONFIG_FILES; do - # Support "outfile[:infile[:infile...]]" - case "$ac_file" in - *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - esac - # PO directories have a Makefile.in generated from Makefile.in.in. - case "$ac_file" in */Makefile.in) - # Adjust a relative srcdir. - ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` - ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" - ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` - # In autoconf-2.13 it is called $ac_given_srcdir. - # In autoconf-2.50 it is called $srcdir. - test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" - case "$ac_given_srcdir" in - .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; - /*) top_srcdir="$ac_given_srcdir" ;; - *) top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - # Treat a directory as a PO directory if and only if it has a - # POTFILES.in file. This allows packages to have multiple PO - # directories under different names or in different locations. - if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then - rm -f "$ac_dir/POTFILES" - test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" - cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" - POMAKEFILEDEPS="POTFILES.in" - # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend - # on $ac_dir but don't depend on user-specified configuration - # parameters. - if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then - # The LINGUAS file contains the set of available languages. - if test -n "$OBSOLETE_ALL_LINGUAS"; then - test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" - fi - ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` - # Hide the ALL_LINGUAS assigment from automake < 1.5. - eval 'ALL_LINGUAS''=$ALL_LINGUAS_' - POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" - else - # The set of available languages was given in configure.in. - # Hide the ALL_LINGUAS assigment from automake < 1.5. - eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' - fi - # Compute POFILES - # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) - # Compute UPDATEPOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) - # Compute DUMMYPOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) - # Compute GMOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) - case "$ac_given_srcdir" in - .) srcdirpre= ;; - *) srcdirpre='$(srcdir)/' ;; - esac - POFILES= - UPDATEPOFILES= - DUMMYPOFILES= - GMOFILES= - for lang in $ALL_LINGUAS; do - POFILES="$POFILES $srcdirpre$lang.po" - UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" - DUMMYPOFILES="$DUMMYPOFILES $lang.nop" - GMOFILES="$GMOFILES $srcdirpre$lang.gmo" - done - # CATALOGS depends on both $ac_dir and the user's LINGUAS - # environment variable. - INST_LINGUAS= - if test -n "$ALL_LINGUAS"; then - for presentlang in $ALL_LINGUAS; do - useit=no - if test "%UNSET%" != "$LINGUAS"; then - desiredlanguages="$LINGUAS" - else - desiredlanguages="$ALL_LINGUAS" - fi - for desiredlang in $desiredlanguages; do - # Use the presentlang catalog if desiredlang is - # a. equal to presentlang, or - # b. a variant of presentlang (because in this case, - # presentlang can be used as a fallback for messages - # which are not translated in the desiredlang catalog). - case "$desiredlang" in - "$presentlang"*) useit=yes;; - esac - done - if test $useit = yes; then - INST_LINGUAS="$INST_LINGUAS $presentlang" - fi - done - fi - CATALOGS= - if test -n "$INST_LINGUAS"; then - for lang in $INST_LINGUAS; do - CATALOGS="$CATALOGS $lang.gmo" - done - fi - test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" - sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" - for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do - if test -f "$f"; then - case "$f" in - *.orig | *.bak | *~) ;; - *) cat "$f" >> "$ac_dir/Makefile" ;; - esac - fi - done - fi - ;; - esac - done]], - [# Capture the value of obsolete ALL_LINGUAS because we need it to compute - # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it - # from automake < 1.5. - eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' - # Capture the value of LINGUAS because we need it to compute CATALOGS. - LINGUAS="${LINGUAS-%UNSET%}" - ]) -]) - -dnl Postprocesses a Makefile in a directory containing PO files. -AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], -[ - # When this code is run, in config.status, two variables have already been - # set: - # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, - # - LINGUAS is the value of the environment variable LINGUAS at configure - # time. - -changequote(,)dnl - # Adjust a relative srcdir. - ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` - ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" - ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` - # In autoconf-2.13 it is called $ac_given_srcdir. - # In autoconf-2.50 it is called $srcdir. - test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" - case "$ac_given_srcdir" in - .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; - /*) top_srcdir="$ac_given_srcdir" ;; - *) top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - # Find a way to echo strings without interpreting backslash. - if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then - gt_echo='echo' - else - if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then - gt_echo='printf %s\n' - else - echo_func () { - cat < "$ac_file.tmp" - if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then - # Add dependencies that cannot be formulated as a simple suffix rule. - for lang in $ALL_LINGUAS; do - frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` - cat >> "$ac_file.tmp" < /dev/null; then - # Add dependencies that cannot be formulated as a simple suffix rule. - for lang in $ALL_LINGUAS; do - frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` - cat >> "$ac_file.tmp" <> "$ac_file.tmp" </dev/null \ - && break;; - esac - done]) - - if test "$gl_cv_posix_shell" != no; then - POSIX_SHELL=$gl_cv_posix_shell - PREFERABLY_POSIX_SHELL=$POSIX_SHELL - else - POSIX_SHELL= - PREFERABLY_POSIX_SHELL=/bin/sh - fi - AC_SUBST([POSIX_SHELL]) - AC_SUBST([PREFERABLY_POSIX_SHELL]) -]) diff --git a/Build/source/utils/xz-4.999.9beta/m4/progtest.m4 b/Build/source/utils/xz-4.999.9beta/m4/progtest.m4 deleted file mode 100644 index a56365cd37f..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/progtest.m4 +++ /dev/null @@ -1,92 +0,0 @@ -# progtest.m4 serial 4 (gettext-0.14.2) -dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1996. - -AC_PREREQ(2.50) - -# Search path for a program which passes the given test. - -dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, -dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) -AC_DEFUN([AM_PATH_PROG_WITH_TEST], -[ -# Prepare PATH_SEPARATOR. -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Find out how to test for executable files. Don't use a zero-byte file, -# as systems may use methods other than mode bits to determine executability. -cat >conf$$.file <<_ASEOF -#! /bin/sh -exit 0 -_ASEOF -chmod +x conf$$.file -if test -x conf$$.file >/dev/null 2>&1; then - ac_executable_p="test -x" -else - ac_executable_p="test -f" -fi -rm -f conf$$.file - -# Extract the first word of "$2", so it can be a program name with args. -set dummy $2; ac_word=[$]2 -AC_MSG_CHECKING([for $ac_word]) -AC_CACHE_VAL(ac_cv_path_$1, -[case "[$]$1" in - [[\\/]]* | ?:[[\\/]]*) - ac_cv_path_$1="[$]$1" # Let the user override the test with a path. - ;; - *) - ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in ifelse([$5], , $PATH, [$5]); do - IFS="$ac_save_IFS" - test -z "$ac_dir" && ac_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then - echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD - if [$3]; then - ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" - break 2 - fi - fi - done - done - IFS="$ac_save_IFS" -dnl If no 4th arg is given, leave the cache variable unset, -dnl so AC_PATH_PROGS will keep looking. -ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" -])dnl - ;; -esac])dnl -$1="$ac_cv_path_$1" -if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then - AC_MSG_RESULT([$]$1) -else - AC_MSG_RESULT(no) -fi -AC_SUBST($1)dnl -]) diff --git a/Build/source/utils/xz-4.999.9beta/m4/visibility.m4 b/Build/source/utils/xz-4.999.9beta/m4/visibility.m4 deleted file mode 100644 index 2ff6330aa42..00000000000 --- a/Build/source/utils/xz-4.999.9beta/m4/visibility.m4 +++ /dev/null @@ -1,52 +0,0 @@ -# visibility.m4 serial 1 (gettext-0.15) -dnl Copyright (C) 2005 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -dnl Tests whether the compiler supports the command-line option -dnl -fvisibility=hidden and the function and variable attributes -dnl __attribute__((__visibility__("hidden"))) and -dnl __attribute__((__visibility__("default"))). -dnl Does *not* test for __visibility__("protected") - which has tricky -dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on -dnl MacOS X. -dnl Does *not* test for __visibility__("internal") - which has processor -dnl dependent semantics. -dnl Does *not* test for #pragma GCC visibility push(hidden) - which is -dnl "really only recommended for legacy code". -dnl Set the variable CFLAG_VISIBILITY. -dnl Defines and sets the variable HAVE_VISIBILITY. - -AC_DEFUN([gl_VISIBILITY], -[ - AC_REQUIRE([AC_PROG_CC]) - CFLAG_VISIBILITY= - HAVE_VISIBILITY=0 - if test -n "$GCC"; then - AC_MSG_CHECKING([for simple visibility declarations]) - AC_CACHE_VAL(gl_cv_cc_visibility, [ - gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fvisibility=hidden" - AC_TRY_COMPILE( - [extern __attribute__((__visibility__("hidden"))) int hiddenvar; - extern __attribute__((__visibility__("default"))) int exportedvar; - extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); - extern __attribute__((__visibility__("default"))) int exportedfunc (void);], - [], - gl_cv_cc_visibility=yes, - gl_cv_cc_visibility=no) - CFLAGS="$gl_save_CFLAGS"]) - AC_MSG_RESULT([$gl_cv_cc_visibility]) - if test $gl_cv_cc_visibility = yes; then - CFLAG_VISIBILITY="-fvisibility=hidden" - HAVE_VISIBILITY=1 - fi - fi - AC_SUBST([CFLAG_VISIBILITY]) - AC_SUBST([HAVE_VISIBILITY]) - AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], - [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) -]) diff --git a/Build/source/utils/xz-4.999.9beta/po/LINGUAS b/Build/source/utils/xz-4.999.9beta/po/LINGUAS deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/Build/source/utils/xz-4.999.9beta/po/Makefile.in.in b/Build/source/utils/xz-4.999.9beta/po/Makefile.in.in deleted file mode 100644 index 5022b8b187f..00000000000 --- a/Build/source/utils/xz-4.999.9beta/po/Makefile.in.in +++ /dev/null @@ -1,403 +0,0 @@ -# Makefile for PO directory in any package using GNU gettext. -# Copyright (C) 1995-1997, 2000-2006 by Ulrich Drepper -# -# This file can be copied and used freely without restrictions. It can -# be used in projects which are not available under the GNU General Public -# License but which still want to provide support for the GNU gettext -# functionality. -# Please note that the actual code of GNU gettext is covered by the GNU -# General Public License and is *not* in the public domain. -# -# Origin: gettext-0.16 - -PACKAGE = @PACKAGE@ -VERSION = @VERSION@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ - -SHELL = /bin/sh -@SET_MAKE@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -exec_prefix = @exec_prefix@ -datarootdir = @datarootdir@ -datadir = @datadir@ -localedir = @localedir@ -gettextsrcdir = $(datadir)/gettext/po - -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ - -# We use $(mkdir_p). -# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as -# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, -# @install_sh@ does not start with $(SHELL), so we add it. -# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined -# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake -# versions, $(mkinstalldirs) and $(install_sh) are unused. -mkinstalldirs = $(SHELL) @install_sh@ -d -install_sh = $(SHELL) @install_sh@ -MKDIR_P = @MKDIR_P@ -mkdir_p = @mkdir_p@ - -GMSGFMT_ = @GMSGFMT@ -GMSGFMT_no = @GMSGFMT@ -GMSGFMT_yes = @GMSGFMT_015@ -GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) -MSGFMT_ = @MSGFMT@ -MSGFMT_no = @MSGFMT@ -MSGFMT_yes = @MSGFMT_015@ -MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) -XGETTEXT_ = @XGETTEXT@ -XGETTEXT_no = @XGETTEXT@ -XGETTEXT_yes = @XGETTEXT_015@ -XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) -MSGMERGE = msgmerge -MSGMERGE_UPDATE = @MSGMERGE@ --update -MSGINIT = msginit -MSGCONV = msgconv -MSGFILTER = msgfilter - -POFILES = @POFILES@ -GMOFILES = @GMOFILES@ -UPDATEPOFILES = @UPDATEPOFILES@ -DUMMYPOFILES = @DUMMYPOFILES@ -DISTFILES.common = Makefile.in.in remove-potcdate.sin \ -$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) -DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ -$(POFILES) $(GMOFILES) \ -$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) - -POTFILES = \ - -CATALOGS = @CATALOGS@ - -# Makevars gets inserted here. (Don't remove this line!) - -.SUFFIXES: -.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update - -.po.mo: - @echo "$(MSGFMT) -c -o $@ $<"; \ - $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ - -.po.gmo: - @lang=`echo $* | sed -e 's,.*/,,'`; \ - test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ - echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ - cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo - -.sin.sed: - sed -e '/^#/d' $< > t-$@ - mv t-$@ $@ - - -all: all-@USE_NLS@ - -all-yes: stamp-po -all-no: - -# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no -# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because -# we don't want to bother translators with empty POT files). We assume that -# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. -# In this case, stamp-po is a nop (i.e. a phony target). - -# stamp-po is a timestamp denoting the last time at which the CATALOGS have -# been loosely updated. Its purpose is that when a developer or translator -# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, -# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent -# invocations of "make" will do nothing. This timestamp would not be necessary -# if updating the $(CATALOGS) would always touch them; however, the rule for -# $(POFILES) has been designed to not touch files that don't need to be -# changed. -stamp-po: $(srcdir)/$(DOMAIN).pot - test ! -f $(srcdir)/$(DOMAIN).pot || \ - test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) - @test ! -f $(srcdir)/$(DOMAIN).pot || { \ - echo "touch stamp-po" && \ - echo timestamp > stamp-poT && \ - mv stamp-poT stamp-po; \ - } - -# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', -# otherwise packages like GCC can not be built if only parts of the source -# have been downloaded. - -# This target rebuilds $(DOMAIN).pot; it is an expensive operation. -# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. -$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed - if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ - msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ - else \ - msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ - fi; \ - $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ - --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ - --files-from=$(srcdir)/POTFILES.in \ - --copyright-holder='$(COPYRIGHT_HOLDER)' \ - --msgid-bugs-address="$$msgid_bugs_address" - test ! -f $(DOMAIN).po || { \ - if test -f $(srcdir)/$(DOMAIN).pot; then \ - sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ - sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ - if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ - rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ - else \ - rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ - mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ - fi; \ - else \ - mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ - fi; \ - } - -# This rule has no dependencies: we don't need to update $(DOMAIN).pot at -# every "make" invocation, only create it when it is missing. -# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. -$(srcdir)/$(DOMAIN).pot: - $(MAKE) $(DOMAIN).pot-update - -# This target rebuilds a PO file if $(DOMAIN).pot has changed. -# Note that a PO file is not touched if it doesn't need to be changed. -$(POFILES): $(srcdir)/$(DOMAIN).pot - @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ - if test -f "$(srcdir)/$${lang}.po"; then \ - test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ - echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ - cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ - else \ - $(MAKE) $${lang}.po-create; \ - fi - - -install: install-exec install-data -install-exec: -install-data: install-data-@USE_NLS@ - if test "$(PACKAGE)" = "gettext-tools"; then \ - $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ - for file in $(DISTFILES.common) Makevars.template; do \ - $(INSTALL_DATA) $(srcdir)/$$file \ - $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - for file in Makevars; do \ - rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - else \ - : ; \ - fi -install-data-no: all -install-data-yes: all - $(mkdir_p) $(DESTDIR)$(datadir) - @catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ - dir=$(localedir)/$$lang/LC_MESSAGES; \ - $(mkdir_p) $(DESTDIR)$$dir; \ - if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ - $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ - echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ - for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ - if test -n "$$lc"; then \ - if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ - link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ - mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ - mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ - (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ - for file in *; do \ - if test -f $$file; then \ - ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ - fi; \ - done); \ - rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ - else \ - if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ - :; \ - else \ - rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ - mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ - fi; \ - fi; \ - rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ - ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ - ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ - cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ - echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ - fi; \ - done; \ - done - -install-strip: install - -installdirs: installdirs-exec installdirs-data -installdirs-exec: -installdirs-data: installdirs-data-@USE_NLS@ - if test "$(PACKAGE)" = "gettext-tools"; then \ - $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ - else \ - : ; \ - fi -installdirs-data-no: -installdirs-data-yes: - $(mkdir_p) $(DESTDIR)$(datadir) - @catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ - dir=$(localedir)/$$lang/LC_MESSAGES; \ - $(mkdir_p) $(DESTDIR)$$dir; \ - for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ - if test -n "$$lc"; then \ - if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ - link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ - mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ - mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ - (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ - for file in *; do \ - if test -f $$file; then \ - ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ - fi; \ - done); \ - rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ - else \ - if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ - :; \ - else \ - rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ - mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ - fi; \ - fi; \ - fi; \ - done; \ - done - -# Define this as empty until I found a useful application. -installcheck: - -uninstall: uninstall-exec uninstall-data -uninstall-exec: -uninstall-data: uninstall-data-@USE_NLS@ - if test "$(PACKAGE)" = "gettext-tools"; then \ - for file in $(DISTFILES.common) Makevars.template; do \ - rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ - done; \ - else \ - : ; \ - fi -uninstall-data-no: -uninstall-data-yes: - catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ - for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ - rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ - done; \ - done - -check: all - -info dvi ps pdf html tags TAGS ctags CTAGS ID: - -mostlyclean: - rm -f remove-potcdate.sed - rm -f stamp-poT - rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po - rm -fr *.o - -clean: mostlyclean - -distclean: clean - rm -f Makefile Makefile.in POTFILES *.mo - -maintainer-clean: distclean - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - rm -f stamp-po $(GMOFILES) - -distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) -dist distdir: - $(MAKE) update-po - @$(MAKE) dist2 -# This is a separate target because 'update-po' must be executed before. -dist2: stamp-po $(DISTFILES) - dists="$(DISTFILES)"; \ - if test "$(PACKAGE)" = "gettext-tools"; then \ - dists="$$dists Makevars.template"; \ - fi; \ - if test -f $(srcdir)/$(DOMAIN).pot; then \ - dists="$$dists $(DOMAIN).pot stamp-po"; \ - fi; \ - if test -f $(srcdir)/ChangeLog; then \ - dists="$$dists ChangeLog"; \ - fi; \ - for i in 0 1 2 3 4 5 6 7 8 9; do \ - if test -f $(srcdir)/ChangeLog.$$i; then \ - dists="$$dists ChangeLog.$$i"; \ - fi; \ - done; \ - if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ - for file in $$dists; do \ - if test -f $$file; then \ - cp -p $$file $(distdir) || exit 1; \ - else \ - cp -p $(srcdir)/$$file $(distdir) || exit 1; \ - fi; \ - done - -update-po: Makefile - $(MAKE) $(DOMAIN).pot-update - test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) - $(MAKE) update-gmo - -# General rule for creating PO files. - -.nop.po-create: - @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ - echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ - exit 1 - -# General rule for updating PO files. - -.nop.po-update: - @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ - if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ - tmpdir=`pwd`; \ - echo "$$lang:"; \ - test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ - echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ - cd $(srcdir); \ - if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ - if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ - rm -f $$tmpdir/$$lang.new.po; \ - else \ - if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ - :; \ - else \ - echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ - exit 1; \ - fi; \ - fi; \ - else \ - echo "msgmerge for $$lang.po failed!" 1>&2; \ - rm -f $$tmpdir/$$lang.new.po; \ - fi - -$(DUMMYPOFILES): - -update-gmo: Makefile $(GMOFILES) - @: - -Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ - cd $(top_builddir) \ - && $(SHELL) ./config.status $(subdir)/$@.in po-directories - -force: - -# Tell versions [3.59,3.63) of GNU make not to export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/Build/source/utils/xz-4.999.9beta/po/Makevars b/Build/source/utils/xz-4.999.9beta/po/Makevars deleted file mode 100644 index dc19bc96313..00000000000 --- a/Build/source/utils/xz-4.999.9beta/po/Makevars +++ /dev/null @@ -1,46 +0,0 @@ -# Makefile variables for PO directory in any package using GNU gettext. - -# Usually the message domain is the same as the package name. -DOMAIN = $(PACKAGE) - -# These two variables depend on the location of this directory. -subdir = po -top_builddir = .. - -# These options get passed to xgettext. -XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ - -# This is the copyright holder that gets inserted into the header of the -# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding -# package. (Note that the msgstr strings, extracted from the package's -# sources, belong to the copyright holder of the package.) Translators are -# expected to transfer the copyright for their translations to this person -# or entity, or to disclaim their copyright. The empty string stands for -# the public domain; in this case the translators are expected to disclaim -# their copyright. -COPYRIGHT_HOLDER = - -# This is the email address or URL to which the translators shall report -# bugs in the untranslated strings: -# - Strings which are not entire sentences, see the maintainer guidelines -# in the GNU gettext documentation, section 'Preparing Strings'. -# - Strings which use unclear terms or require additional context to be -# understood. -# - Strings which make invalid assumptions about notation of date, time or -# money. -# - Pluralisation problems. -# - Incorrect English spelling. -# - Incorrect formatting. -# It can be your email address, or a mailing list address where translators -# can write to without being subscribed, or the URL of a web page through -# which the translators can contact you. -MSGID_BUGS_ADDRESS = - -# This is the list of locale categories, beyond LC_MESSAGES, for which the -# message catalogs shall be used. It is usually empty. -EXTRA_LOCALE_CATEGORIES = - -# Although you may need slightly wider terminal than 80 chars, it is -# much nicer to edit the output of --help when this is set. -XGETTEXT_OPTIONS += --no-wrap -MSGMERGE += --no-wrap diff --git a/Build/source/utils/xz-4.999.9beta/po/POTFILES.in b/Build/source/utils/xz-4.999.9beta/po/POTFILES.in deleted file mode 100644 index ee430c5c3ab..00000000000 --- a/Build/source/utils/xz-4.999.9beta/po/POTFILES.in +++ /dev/null @@ -1,10 +0,0 @@ -# List of source files which contain translatable strings. -src/xz/args.c -src/xz/coder.c -src/xz/file_io.c -src/xz/hardware.c -src/xz/main.c -src/xz/message.c -src/xz/options.c -src/xz/suffix.c -src/xz/util.c diff --git a/Build/source/utils/xz-4.999.9beta/po/Rules-quot b/Build/source/utils/xz-4.999.9beta/po/Rules-quot deleted file mode 100644 index 9c2a995e300..00000000000 --- a/Build/source/utils/xz-4.999.9beta/po/Rules-quot +++ /dev/null @@ -1,47 +0,0 @@ -# Special Makefile rules for English message catalogs with quotation marks. - -DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot - -.SUFFIXES: .insert-header .po-update-en - -en@quot.po-create: - $(MAKE) en@quot.po-update -en@boldquot.po-create: - $(MAKE) en@boldquot.po-update - -en@quot.po-update: en@quot.po-update-en -en@boldquot.po-update: en@boldquot.po-update-en - -.insert-header.po-update-en: - @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ - if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ - tmpdir=`pwd`; \ - echo "$$lang:"; \ - ll=`echo $$lang | sed -e 's/@.*//'`; \ - LC_ALL=C; export LC_ALL; \ - cd $(srcdir); \ - if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ - if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ - rm -f $$tmpdir/$$lang.new.po; \ - else \ - if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ - :; \ - else \ - echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ - exit 1; \ - fi; \ - fi; \ - else \ - echo "creation of $$lang.po failed!" 1>&2; \ - rm -f $$tmpdir/$$lang.new.po; \ - fi - -en@quot.insert-header: insert-header.sin - sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header - -en@boldquot.insert-header: insert-header.sin - sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header - -mostlyclean: mostlyclean-quot -mostlyclean-quot: - rm -f *.insert-header diff --git a/Build/source/utils/xz-4.999.9beta/po/boldquot.sed b/Build/source/utils/xz-4.999.9beta/po/boldquot.sed deleted file mode 100644 index 4b937aa517b..00000000000 --- a/Build/source/utils/xz-4.999.9beta/po/boldquot.sed +++ /dev/null @@ -1,10 +0,0 @@ -s/"\([^"]*\)"/“\1â€/g -s/`\([^`']*\)'/‘\1’/g -s/ '\([^`']*\)' / ‘\1’ /g -s/ '\([^`']*\)'$/ ‘\1’/g -s/^'\([^`']*\)' /‘\1’ /g -s/“â€/""/g -s/“/“/g -s/â€/â€/g -s/‘/‘/g -s/’/’/g diff --git a/Build/source/utils/xz-4.999.9beta/po/en@boldquot.header b/Build/source/utils/xz-4.999.9beta/po/en@boldquot.header deleted file mode 100644 index fedb6a06d12..00000000000 --- a/Build/source/utils/xz-4.999.9beta/po/en@boldquot.header +++ /dev/null @@ -1,25 +0,0 @@ -# All this catalog "translates" are quotation characters. -# The msgids must be ASCII and therefore cannot contain real quotation -# characters, only substitutes like grave accent (0x60), apostrophe (0x27) -# and double quote (0x22). These substitutes look strange; see -# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html -# -# This catalog translates grave accent (0x60) and apostrophe (0x27) to -# left single quotation mark (U+2018) and right single quotation mark (U+2019). -# It also translates pairs of apostrophe (0x27) to -# left single quotation mark (U+2018) and right single quotation mark (U+2019) -# and pairs of quotation mark (0x22) to -# left double quotation mark (U+201C) and right double quotation mark (U+201D). -# -# When output to an UTF-8 terminal, the quotation characters appear perfectly. -# When output to an ISO-8859-1 terminal, the single quotation marks are -# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to -# grave/acute accent (by libiconv), and the double quotation marks are -# transliterated to 0x22. -# When output to an ASCII terminal, the single quotation marks are -# transliterated to apostrophes, and the double quotation marks are -# transliterated to 0x22. -# -# This catalog furthermore displays the text between the quotation marks in -# bold face, assuming the VT100/XTerm escape sequences. -# diff --git a/Build/source/utils/xz-4.999.9beta/po/en@quot.header b/Build/source/utils/xz-4.999.9beta/po/en@quot.header deleted file mode 100644 index a9647fc35c3..00000000000 --- a/Build/source/utils/xz-4.999.9beta/po/en@quot.header +++ /dev/null @@ -1,22 +0,0 @@ -# All this catalog "translates" are quotation characters. -# The msgids must be ASCII and therefore cannot contain real quotation -# characters, only substitutes like grave accent (0x60), apostrophe (0x27) -# and double quote (0x22). These substitutes look strange; see -# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html -# -# This catalog translates grave accent (0x60) and apostrophe (0x27) to -# left single quotation mark (U+2018) and right single quotation mark (U+2019). -# It also translates pairs of apostrophe (0x27) to -# left single quotation mark (U+2018) and right single quotation mark (U+2019) -# and pairs of quotation mark (0x22) to -# left double quotation mark (U+201C) and right double quotation mark (U+201D). -# -# When output to an UTF-8 terminal, the quotation characters appear perfectly. -# When output to an ISO-8859-1 terminal, the single quotation marks are -# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to -# grave/acute accent (by libiconv), and the double quotation marks are -# transliterated to 0x22. -# When output to an ASCII terminal, the single quotation marks are -# transliterated to apostrophes, and the double quotation marks are -# transliterated to 0x22. -# diff --git a/Build/source/utils/xz-4.999.9beta/po/insert-header.sin b/Build/source/utils/xz-4.999.9beta/po/insert-header.sin deleted file mode 100644 index b26de01f6c8..00000000000 --- a/Build/source/utils/xz-4.999.9beta/po/insert-header.sin +++ /dev/null @@ -1,23 +0,0 @@ -# Sed script that inserts the file called HEADER before the header entry. -# -# At each occurrence of a line starting with "msgid ", we execute the following -# commands. At the first occurrence, insert the file. At the following -# occurrences, do nothing. The distinction between the first and the following -# occurrences is achieved by looking at the hold space. -/^msgid /{ -x -# Test if the hold space is empty. -s/m/m/ -ta -# Yes it was empty. First occurrence. Read the file. -r HEADER -# Output the file's contents by reading the next line. But don't lose the -# current line while doing this. -g -N -bb -:a -# The hold space was nonempty. Following occurrences. Do nothing. -x -:b -} diff --git a/Build/source/utils/xz-4.999.9beta/po/quot.sed b/Build/source/utils/xz-4.999.9beta/po/quot.sed deleted file mode 100644 index 0122c46318d..00000000000 --- a/Build/source/utils/xz-4.999.9beta/po/quot.sed +++ /dev/null @@ -1,6 +0,0 @@ -s/"\([^"]*\)"/“\1â€/g -s/`\([^`']*\)'/‘\1’/g -s/ '\([^`']*\)' / ‘\1’ /g -s/ '\([^`']*\)'$/ ‘\1’/g -s/^'\([^`']*\)' /‘\1’ /g -s/“â€/""/g diff --git a/Build/source/utils/xz-4.999.9beta/po/remove-potcdate.sin b/Build/source/utils/xz-4.999.9beta/po/remove-potcdate.sin deleted file mode 100644 index 2436c49e786..00000000000 --- a/Build/source/utils/xz-4.999.9beta/po/remove-potcdate.sin +++ /dev/null @@ -1,19 +0,0 @@ -# Sed script that remove the POT-Creation-Date line in the header entry -# from a POT file. -# -# The distinction between the first and the following occurrences of the -# pattern is achieved by looking at the hold space. -/^"POT-Creation-Date: .*"$/{ -x -# Test if the hold space is empty. -s/P/P/ -ta -# Yes it was empty. First occurrence. Remove the line. -g -d -bb -:a -# The hold space was nonempty. Following occurrences. Do nothing. -x -:b -} diff --git a/Build/source/utils/xz-4.999.9beta/po/stamp-po b/Build/source/utils/xz-4.999.9beta/po/stamp-po deleted file mode 100644 index 9788f70238c..00000000000 --- a/Build/source/utils/xz-4.999.9beta/po/stamp-po +++ /dev/null @@ -1 +0,0 @@ -timestamp diff --git a/Build/source/utils/xz-4.999.9beta/po/xz.pot b/Build/source/utils/xz-4.999.9beta/po/xz.pot deleted file mode 100644 index dc6e320178d..00000000000 --- a/Build/source/utils/xz-4.999.9beta/po/xz.pot +++ /dev/null @@ -1,481 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# This file is put in the public domain. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" -"POT-Creation-Date: 2009-08-27 18:37+0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#: src/xz/args.c:289 -#, c-format -msgid "%s: Unknown file format type" -msgstr "" - -#: src/xz/args.c:312 src/xz/args.c:320 -#, c-format -msgid "%s: Unsupported integrity check type" -msgstr "" - -#: src/xz/args.c:334 -msgid "Only one file can be specified with `--files'or `--files0'." -msgstr "" - -#: src/xz/args.c:392 -msgid "The environment variable XZ_OPT contains too many arguments" -msgstr "" - -#: src/xz/coder.c:95 -msgid "Maximum number of filters is four" -msgstr "" - -#: src/xz/coder.c:108 -#, c-format -msgid "Memory usage limit (% MiB) is too small for the given filter setup (% MiB)" -msgstr "" - -#: src/xz/coder.c:128 -msgid "Using a preset in raw mode is discouraged." -msgstr "" - -#: src/xz/coder.c:130 -msgid "The exact options of the presets may vary between software versions." -msgstr "" - -#: src/xz/coder.c:158 -msgid "The .lzma format supports only the LZMA1 filter" -msgstr "" - -#: src/xz/coder.c:166 -msgid "LZMA1 cannot be used with the .xz format" -msgstr "" - -#: src/xz/coder.c:186 -#, c-format -msgid "%s MiB (%s B) of memory is required per thread, limit is %s MiB (%s B)" -msgstr "" - -#: src/xz/coder.c:553 -#, c-format -msgid "Limit was %s MiB, but %s MiB would have been needed" -msgstr "" - -#: src/xz/file_io.c:86 -#, c-format -msgid "%s: File seems to be moved, not removing" -msgstr "" - -#: src/xz/file_io.c:93 -#, c-format -msgid "%s: Cannot remove: %s" -msgstr "" - -#: src/xz/file_io.c:118 -#, c-format -msgid "%s: Cannot set the file owner: %s" -msgstr "" - -#: src/xz/file_io.c:124 -#, c-format -msgid "%s: Cannot set the file group: %s" -msgstr "" - -#: src/xz/file_io.c:143 -#, c-format -msgid "%s: Cannot set the file permissions: %s" -msgstr "" - -#: src/xz/file_io.c:281 src/xz/file_io.c:360 -#, c-format -msgid "%s: Is a symbolic link, skipping" -msgstr "" - -#: src/xz/file_io.c:395 -#, c-format -msgid "%s: Is a directory, skipping" -msgstr "" - -#: src/xz/file_io.c:402 -#, c-format -msgid "%s: Not a regular file, skipping" -msgstr "" - -#: src/xz/file_io.c:419 -#, c-format -msgid "%s: File has setuid or setgid bit set, skipping" -msgstr "" - -#: src/xz/file_io.c:426 -#, c-format -msgid "%s: File has sticky bit set, skipping" -msgstr "" - -#: src/xz/file_io.c:433 -#, c-format -msgid "%s: Input file has more than one hard link, skipping" -msgstr "" - -#: src/xz/file_io.c:555 -#, c-format -msgid "%s: Closing the file failed: %s" -msgstr "" - -#: src/xz/file_io.c:663 -#, c-format -msgid "%s: Read error: %s" -msgstr "" - -#: src/xz/file_io.c:708 -#, c-format -msgid "%s: Write error: %s" -msgstr "" - -#: src/xz/main.c:57 -msgid "Writing to standard output failed" -msgstr "" - -#: src/xz/main.c:60 -msgid "Unknown error" -msgstr "" - -#: src/xz/main.c:117 -#, c-format -msgid "%s: Error reading filenames: %s" -msgstr "" - -#: src/xz/main.c:124 -#, c-format -msgid "%s: Unexpected end of input when reading filenames" -msgstr "" - -#: src/xz/main.c:148 -#, c-format -msgid "%s: Null character found when reading filenames; maybe you meant to use `--files0' instead of `--files'?" -msgstr "" - -#: src/xz/main.c:272 -msgid "Cannot read data from standard input when reading filenames from standard input" -msgstr "" - -#: src/xz/message.c:840 src/xz/message.c:884 -msgid "Internal error (bug)" -msgstr "" - -#: src/xz/message.c:847 -msgid "Cannot establish signal handlers" -msgstr "" - -#: src/xz/message.c:856 -msgid "No integrity check; not verifying file integrity" -msgstr "" - -#: src/xz/message.c:859 -msgid "Unsupported type of integrity check; not verifying file integrity" -msgstr "" - -#: src/xz/message.c:866 -msgid "Memory usage limit reached" -msgstr "" - -#: src/xz/message.c:869 -msgid "File format not recognized" -msgstr "" - -#: src/xz/message.c:872 -msgid "Unsupported options" -msgstr "" - -#: src/xz/message.c:875 -msgid "Compressed data is corrupt" -msgstr "" - -#: src/xz/message.c:878 -msgid "Unexpected end of input" -msgstr "" - -#: src/xz/message.c:897 -#, c-format -msgid "%s: Filter chain:" -msgstr "" - -#: src/xz/message.c:1008 -#, c-format -msgid "Try `%s --help' for more information." -msgstr "" - -#: src/xz/message.c:1027 -#, c-format -msgid "" -"Usage: %s [OPTION]... [FILE]...\n" -"Compress or decompress FILEs in the .xz format.\n" -"\n" -msgstr "" - -#: src/xz/message.c:1031 -msgid "Mandatory arguments to long options are mandatory for short options too.\n" -msgstr "" - -#: src/xz/message.c:1035 -msgid " Operation mode:\n" -msgstr "" - -#: src/xz/message.c:1038 -msgid "" -" -z, --compress force compression\n" -" -d, --decompress force decompression\n" -" -t, --test test compressed file integrity\n" -" -l, --list list information about files" -msgstr "" - -#: src/xz/message.c:1044 -msgid "" -"\n" -" Operation modifiers:\n" -msgstr "" - -#: src/xz/message.c:1047 -msgid "" -" -k, --keep keep (don't delete) input files\n" -" -f, --force force overwrite of output file and (de)compress links\n" -" -c, --stdout write to standard output and don't delete input files" -msgstr "" - -#: src/xz/message.c:1053 -msgid "" -" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" -" --files=[FILE] read filenames to process from FILE; if FILE is\n" -" omitted, filenames are read from the standard input;\n" -" filenames must be terminated with the newline character\n" -" --files0=[FILE] like --files but use the null character as terminator" -msgstr "" - -#: src/xz/message.c:1060 -msgid "" -"\n" -" Basic file format and compression options:\n" -msgstr "" - -#: src/xz/message.c:1062 -msgid "" -" -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" -" -C, --check=CHECK integrity check type: `crc32', `crc64' (default),\n" -" or `sha256'" -msgstr "" - -#: src/xz/message.c:1069 -msgid "" -" -0 .. -9 compression preset; 0-2 fast compression, 3-5 good\n" -" compression, 6-9 excellent compression; default is 6" -msgstr "" - -#: src/xz/message.c:1073 -msgid "" -" -e, --extreme use more CPU time when encoding to increase compression\n" -" ratio without increasing memory usage of the decoder" -msgstr "" - -#: src/xz/message.c:1078 -msgid "" -" -M, --memory=NUM use roughly NUM bytes of memory at maximum; 0 indicates\n" -" the default setting, which depends on the operation mode\n" -" and the amount of physical memory (RAM)" -msgstr "" - -#: src/xz/message.c:1084 -msgid "" -"\n" -" Custom filter chain for compression (alternative for using presets):" -msgstr "" - -#: src/xz/message.c:1089 -msgid "" -"\n" -" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" -" --lzma2[=OPTS] more of the following options (valid values; default):\n" -" preset=NUM reset options to preset number NUM (0-9)\n" -" dict=NUM dictionary size (4KiB - 1536MiB; 8MiB)\n" -" lc=NUM number of literal context bits (0-4; 3)\n" -" lp=NUM number of literal position bits (0-4; 0)\n" -" pb=NUM number of position bits (0-4; 2)\n" -" mode=MODE compression mode (fast, normal; normal)\n" -" nice=NUM nice length of a match (2-273; 64)\n" -" mf=NAME match finder (hc3, hc4, bt2, bt3, bt4; bt4)\n" -" depth=NUM maximum search depth; 0=automatic (default)" -msgstr "" - -#: src/xz/message.c:1104 -msgid "" -"\n" -" --x86[=OPTS] x86 BCJ filter\n" -" --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" -" --ia64[=OPTS] IA64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" -" --sparc[=OPTS] SPARC BCJ filter\n" -" Valid OPTS for all BCJ filters:\n" -" start=NUM start offset for conversions (default=0)" -msgstr "" - -#: src/xz/message.c:1116 -msgid "" -"\n" -" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" -" dist=NUM distance between bytes being subtracted\n" -" from each other (1-256; 1)" -msgstr "" - -#: src/xz/message.c:1124 -msgid "" -"\n" -" --subblock[=OPTS] Subblock filter; valid OPTS (valid values; default):\n" -" size=NUM number of bytes of data per subblock\n" -" (1 - 256Mi; 4Ki)\n" -" rle=NUM run-length encoder chunk size (0-256; 0)" -msgstr "" - -#: src/xz/message.c:1133 -msgid "" -"\n" -" Other options:\n" -msgstr "" - -#: src/xz/message.c:1136 -msgid "" -" -q, --quiet suppress warnings; specify twice to suppress errors too\n" -" -v, --verbose be verbose; specify twice for even more verbose" -msgstr "" - -#: src/xz/message.c:1141 -msgid " -Q, --no-warn make warnings not affect the exit status" -msgstr "" - -#: src/xz/message.c:1145 -msgid "" -"\n" -" -h, --help display the short help (lists only the basic options)\n" -" -H, --long-help display this long help" -msgstr "" - -#: src/xz/message.c:1150 -msgid "" -" -h, --help display this short help\n" -" -H, --long-help display the long help (lists also the advanced options)" -msgstr "" - -#: src/xz/message.c:1154 -msgid " -V, --version display the version number" -msgstr "" - -#: src/xz/message.c:1156 -msgid "" -"\n" -"With no FILE, or when FILE is -, read standard input.\n" -msgstr "" - -#: src/xz/message.c:1160 -#, c-format -msgid "" -"On this system and configuration, this program will use at maximum of roughly\n" -"%s MiB RAM and " -msgstr "" - -#: src/xz/message.c:1162 -msgid "" -"one thread.\n" -"\n" -msgstr "" - -#: src/xz/message.c:1167 -#, c-format -msgid "Report bugs to <%s> (in English or Finnish).\n" -msgstr "" - -#: src/xz/message.c:1169 -#, c-format -msgid "%s home page: <%s>\n" -msgstr "" - -#: src/xz/options.c:88 -#, c-format -msgid "%s: Options must be `name=value' pairs separated with commas" -msgstr "" - -#: src/xz/options.c:108 -#, c-format -msgid "%s: Invalid option value" -msgstr "" - -#: src/xz/options.c:131 -#, c-format -msgid "%s: Invalid option name" -msgstr "" - -#: src/xz/options.c:310 -#, c-format -msgid "Unsupported LZMA1/LZMA2 preset: %s" -msgstr "" - -#: src/xz/options.c:429 -msgid "The sum of lc and lp must be at maximum of 4" -msgstr "" - -#: src/xz/options.c:434 -#, c-format -msgid "The selected match finder requires at least nice=%" -msgstr "" - -#: src/xz/suffix.c:79 src/xz/suffix.c:164 -#, c-format -msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout" -msgstr "" - -#: src/xz/suffix.c:99 -#, c-format -msgid "%s: Filename has an unknown suffix, skipping" -msgstr "" - -#: src/xz/suffix.c:154 -#, c-format -msgid "%s: File already has `%s' suffix, skipping" -msgstr "" - -#: src/xz/suffix.c:205 -#, c-format -msgid "%s: Invalid filename suffix" -msgstr "" - -#: src/xz/util.c:62 -#, c-format -msgid "%s: Value is not a non-negative decimal integer" -msgstr "" - -#: src/xz/util.c:104 -#, c-format -msgid "%s: Invalid multiplier suffix. Valid suffixes:" -msgstr "" - -#: src/xz/util.c:124 -#, c-format -msgid "Value of the option `%s' must be in the range [%, %]" -msgstr "" - -#: src/xz/util.c:198 -msgid "Empty filename, skipping" -msgstr "" - -#: src/xz/util.c:212 -msgid "Compressed data not read from a terminal unless `--force' is used." -msgstr "" - -#: src/xz/util.c:225 -msgid "Compressed data not written to a terminal unless `--force' is used." -msgstr "" diff --git a/Build/source/utils/xz-4.999.9beta/src/Makefile.am b/Build/source/utils/xz-4.999.9beta/src/Makefile.am deleted file mode 100644 index f03f5a3da30..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -SUBDIRS = liblzma xz xzdec lzmainfo scripts -EXTRA_DIST = common diff --git a/Build/source/utils/xz-4.999.9beta/src/Makefile.in b/Build/source/utils/xz-4.999.9beta/src/Makefile.in deleted file mode 100644 index 6d7c827ed7b..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/Makefile.in +++ /dev/null @@ -1,598 +0,0 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ -subdir = src -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ - $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ - $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ - $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ - $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ -DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GETOPT_H = @GETOPT_H@ -GMSGFMT = @GMSGFMT@ -GMSGFMT_015 = @GMSGFMT_015@ -GREP = @GREP@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTLLIBS = @INTLLIBS@ -INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBICONV = @LIBICONV@ -LIBINTL = @LIBINTL@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBINTL = @LTLIBINTL@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -MSGFMT = @MSGFMT@ -MSGFMT_015 = @MSGFMT_015@ -MSGMERGE = @MSGMERGE@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POSIX_SHELL = @POSIX_SHELL@ -POSUB = @POSUB@ -PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -RC = @RC@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ -STATIC_LDFLAGS = @STATIC_LDFLAGS@ -STRIP = @STRIP@ -USE_NLS = @USE_NLS@ -VERSION = @VERSION@ -XGETTEXT = @XGETTEXT@ -XGETTEXT_015 = @XGETTEXT_015@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -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@ -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@ -lt_ECHO = @lt_ECHO@ -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@ -xz = @xz@ -SUBDIRS = liblzma xz xzdec lzmainfo scripts -EXTRA_DIST = common -all: all-recursive - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - 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; }; }'`; \ - 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: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - 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; }; }'`; \ - 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 - -distdir: $(DISTFILES) - @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 - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -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-recursive - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ - install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am check check-am clean clean-generic clean-libtool \ - ctags ctags-recursive distclean distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am - - -# 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/Build/source/utils/xz-4.999.9beta/src/common/bswap.h b/Build/source/utils/xz-4.999.9beta/src/common/bswap.h deleted file mode 100644 index c8cf125aeb8..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/common/bswap.h +++ /dev/null @@ -1,52 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file bswap.h -/// \brief Byte swapping -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_BSWAP_H -#define LZMA_BSWAP_H - -// NOTE: We assume that config.h is already #included. - -// At least glibc has byteswap.h which contains inline assembly code for -// byteswapping. Some systems have byteswap.h but lack one or more of the -// bswap_xx macros/functions, which is why we check them separately even -// if byteswap.h is available. - -#ifdef HAVE_BYTESWAP_H -# include -#endif - -#ifndef HAVE_BSWAP_16 -# define bswap_16(num) \ - (((num) << 8) | ((num) >> 8)) -#endif - -#ifndef HAVE_BSWAP_32 -# define bswap_32(num) \ - ( (((num) << 24) ) \ - | (((num) << 8) & UINT32_C(0x00FF0000)) \ - | (((num) >> 8) & UINT32_C(0x0000FF00)) \ - | (((num) >> 24) ) ) -#endif - -#ifndef HAVE_BSWAP_64 -# define bswap_64(num) \ - ( (((num) << 56) ) \ - | (((num) << 40) & UINT64_C(0x00FF000000000000)) \ - | (((num) << 24) & UINT64_C(0x0000FF0000000000)) \ - | (((num) << 8) & UINT64_C(0x000000FF00000000)) \ - | (((num) >> 8) & UINT64_C(0x00000000FF000000)) \ - | (((num) >> 24) & UINT64_C(0x0000000000FF0000)) \ - | (((num) >> 40) & UINT64_C(0x000000000000FF00)) \ - | (((num) >> 56) ) ) -#endif - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/common/common_w32res.rc b/Build/source/utils/xz-4.999.9beta/src/common/common_w32res.rc deleted file mode 100644 index ad9e165394a..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/common/common_w32res.rc +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - */ - -#include -#include "config.h" -#define LZMA_H_INTERNAL -#define LZMA_H_INTERNAL_RC -#include "lzma/version.h" - -#ifndef MY_BUILD -# define MY_BUILD 0 -#endif -#define MY_VERSION LZMA_VERSION_MAJOR,LZMA_VERSION_MINOR,LZMA_VERSION_PATCH,MY_BUILD - -#define MY_FILENAME MY_NAME MY_SUFFIX -#define MY_COMPANY "Lasse Collin and Igor Pavlov" -#define MY_COPYRIGHT "Public Domain by " MY_COMPANY -#define MY_COMMENTS "http://tukaani.org/xz/" - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -VS_VERSION_INFO VERSIONINFO - FILEVERSION MY_VERSION - PRODUCTVERSION MY_VERSION - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK - FILEFLAGS 0 - FILEOS VOS_NT_WINDOWS32 - FILETYPE MY_TYPE - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", MY_COMMENTS - VALUE "CompanyName", MY_COMPANY - VALUE "FileDescription", MY_DESC - VALUE "FileVersion", LZMA_VERSION_STRING - VALUE "InternalName", MY_NAME - VALUE "LegalCopyright", MY_COPYRIGHT - VALUE "OriginalFilename", MY_FILENAME - VALUE "ProductName", PACKAGE_NAME - VALUE "ProductVersion", LZMA_VERSION_STRING - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END diff --git a/Build/source/utils/xz-4.999.9beta/src/common/cpucores.h b/Build/source/utils/xz-4.999.9beta/src/common/cpucores.h deleted file mode 100644 index 704d8a26e54..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/common/cpucores.h +++ /dev/null @@ -1,51 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file cpucores.h -/// \brief Get the number of online CPU cores -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef CPUCORES_H -#define CPUCORES_H - -#if defined(HAVE_CPUCORES_SYSCONF) -# include - -#elif defined(HAVE_CPUCORES_SYSCTL) -# ifdef HAVE_SYS_PARAM_H -# include -# endif -# ifdef HAVE_SYS_SYSCTL_H -# include -# endif -#endif - - -static inline uint32_t -cpucores(void) -{ - uint32_t ret = 0; - -#if defined(HAVE_CPUCORES_SYSCONF) - const long cpus = sysconf(_SC_NPROCESSORS_ONLN); - if (cpus > 0) - ret = (uint32_t)(cpus); - -#elif defined(HAVE_CPUCORES_SYSCTL) - int name[2] = { CTL_HW, HW_NCPU }; - int cpus; - size_t cpus_size = sizeof(cpus); - if (!sysctl(name, &cpus, &cpus_size, NULL, NULL) - && cpus_size == sizeof(cpus) && cpus > 0) - ret = (uint32_t)(cpus); -#endif - - return ret; -} - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/common/integer.h b/Build/source/utils/xz-4.999.9beta/src/common/integer.h deleted file mode 100644 index 518c2a4e91d..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/common/integer.h +++ /dev/null @@ -1,170 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file integer.h -/// \brief Reading and writing integers from and to buffers -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_INTEGER_H -#define LZMA_INTEGER_H - -// On big endian, we need byte swapping. These macros may be used outside -// this file, so don't put these inside HAVE_FAST_UNALIGNED_ACCESS. -#ifdef WORDS_BIGENDIAN -# include "bswap.h" -# define integer_le_16(n) bswap_16(n) -# define integer_le_32(n) bswap_32(n) -# define integer_le_64(n) bswap_64(n) -#else -# define integer_le_16(n) (n) -# define integer_le_32(n) (n) -# define integer_le_64(n) (n) -#endif - - -// I'm aware of AC_CHECK_ALIGNED_ACCESS_REQUIRED from Autoconf archive, but -// it's not useful here. We don't care if unaligned access is supported, -// we care if it is fast. Some systems can emulate unaligned access in -// software, which is horribly slow; we want to use byte-by-byte access on -// such systems but the Autoconf test would detect such a system as -// supporting unaligned access. -// -// NOTE: HAVE_FAST_UNALIGNED_ACCESS indicates only support for 16-bit and -// 32-bit integer loads and stores. 64-bit integers may or may not work. -// That's why 64-bit functions are commented out. -// -// TODO: Big endian PowerPC supports byte swapping load and store instructions -// that also allow unaligned access. Inline assembler could be OK for that. -// -// Performance of these functions isn't that important until LZMA3, but it -// doesn't hurt to have these ready already. -#ifdef HAVE_FAST_UNALIGNED_ACCESS - -static inline uint16_t -integer_read_16(const uint8_t buf[static 2]) -{ - uint16_t ret = *(const uint16_t *)(buf); - return integer_le_16(ret); -} - - -static inline uint32_t -integer_read_32(const uint8_t buf[static 4]) -{ - uint32_t ret = *(const uint32_t *)(buf); - return integer_le_32(ret); -} - - -/* -static inline uint64_t -integer_read_64(const uint8_t buf[static 8]) -{ - uint64_t ret = *(const uint64_t *)(buf); - return integer_le_64(ret); -} -*/ - - -static inline void -integer_write_16(uint8_t buf[static 2], uint16_t num) -{ - *(uint16_t *)(buf) = integer_le_16(num); -} - - -static inline void -integer_write_32(uint8_t buf[static 4], uint32_t num) -{ - *(uint32_t *)(buf) = integer_le_32(num); -} - - -/* -static inline void -integer_write_64(uint8_t buf[static 8], uint64_t num) -{ - *(uint64_t *)(buf) = integer_le_64(num); -} -*/ - - -#else - -static inline uint16_t -integer_read_16(const uint8_t buf[static 2]) -{ - uint16_t ret = buf[0] | (buf[1] << 8); - return ret; -} - - -static inline uint32_t -integer_read_32(const uint8_t buf[static 4]) -{ - uint32_t ret = buf[0]; - ret |= (uint32_t)(buf[1]) << 8; - ret |= (uint32_t)(buf[2]) << 16; - ret |= (uint32_t)(buf[3]) << 24; - return ret; -} - - -/* -static inline uint64_t -integer_read_64(const uint8_t buf[static 8]) -{ - uint64_t ret = buf[0]; - ret |= (uint64_t)(buf[1]) << 8; - ret |= (uint64_t)(buf[2]) << 16; - ret |= (uint64_t)(buf[3]) << 24; - ret |= (uint64_t)(buf[4]) << 32; - ret |= (uint64_t)(buf[5]) << 40; - ret |= (uint64_t)(buf[6]) << 48; - ret |= (uint64_t)(buf[7]) << 56; - return ret; -} -*/ - - -static inline void -integer_write_16(uint8_t buf[static 2], uint16_t num) -{ - buf[0] = (uint8_t)(num); - buf[1] = (uint8_t)(num >> 8); -} - - -static inline void -integer_write_32(uint8_t buf[static 4], uint32_t num) -{ - buf[0] = (uint8_t)(num); - buf[1] = (uint8_t)(num >> 8); - buf[2] = (uint8_t)(num >> 16); - buf[3] = (uint8_t)(num >> 24); -} - - -/* -static inline void -integer_write_64(uint8_t buf[static 8], uint64_t num) -{ - buf[0] = (uint8_t)(num); - buf[1] = (uint8_t)(num >> 8); - buf[2] = (uint8_t)(num >> 16); - buf[3] = (uint8_t)(num >> 24); - buf[4] = (uint8_t)(num >> 32); - buf[5] = (uint8_t)(num >> 40); - buf[6] = (uint8_t)(num >> 48); - buf[7] = (uint8_t)(num >> 56); -} -*/ - -#endif - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/common/mythread.h b/Build/source/utils/xz-4.999.9beta/src/common/mythread.h deleted file mode 100644 index 476c2fc9e10..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/common/mythread.h +++ /dev/null @@ -1,42 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file mythread.h -/// \brief Wrappers for threads -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "sysdefs.h" - - -#ifdef HAVE_PTHREAD -# include - -# define mythread_once(func) \ - do { \ - static pthread_once_t once_ = PTHREAD_ONCE_INIT; \ - pthread_once(&once_, &func); \ - } while (0) - -# define mythread_sigmask(how, set, oset) \ - pthread_sigmask(how, set, oset) - -#else - -# define mythread_once(func) \ - do { \ - static bool once_ = false; \ - if (!once_) { \ - func(); \ - once_ = true; \ - } \ - } while (0) - -# define mythread_sigmask(how, set, oset) \ - sigprocmask(how, set, oset) - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/common/open_stdxxx.h b/Build/source/utils/xz-4.999.9beta/src/common/open_stdxxx.h deleted file mode 100644 index 22300851a2a..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/common/open_stdxxx.h +++ /dev/null @@ -1,49 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file open_stdxxx.h -/// \brief Make sure that file descriptors 0, 1, and 2 are open -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef OPEN_STDXXX_H -#define OPEN_STDXXX_H - -#include -#include -#include - - -static void -open_stdxxx(int status) -{ - for (int i = 0; i <= 2; ++i) { - // We use fcntl() to check if the file descriptor is open. - if (fcntl(i, F_GETFD) == -1 && errno == EBADF) { - // With stdin, we could use /dev/full so that - // writing to stdin would fail. However, /dev/full - // is Linux specific, and if the program tries to - // write to stdin, there's already a problem anyway. - const int fd = open("/dev/null", O_NOCTTY - | (i == 0 ? O_WRONLY : O_RDONLY)); - - if (fd != i) { - // Something went wrong. Exit with the - // exit status we were given. Don't try - // to print an error message, since stderr - // may very well be non-existent. This - // error should be extremely rare. - (void)close(fd); - exit(status); - } - } - } - - return; -} - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/common/physmem.h b/Build/source/utils/xz-4.999.9beta/src/common/physmem.h deleted file mode 100644 index 63482c6c868..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/common/physmem.h +++ /dev/null @@ -1,134 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file physmem.h -/// \brief Get the amount of physical memory -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef PHYSMEM_H -#define PHYSMEM_H - -// Test for Windows first, because we want to use Windows-specific code -// on Cygwin, which also has memory information available via sysconf(), but -// on Cygwin 1.5 and older it gives wrong results (from our point of view). -#if defined(_WIN32) || defined(__CYGWIN__) -# ifndef _WIN32_WINNT -# define _WIN32_WINNT 0x0500 -# endif -# include - -#elif defined(HAVE_PHYSMEM_SYSCONF) -# include - -#elif defined(HAVE_PHYSMEM_SYSCTL) -# ifdef HAVE_SYS_PARAM_H -# include -# endif -# ifdef HAVE_SYS_SYSCTL_H -# include -# endif - -#elif defined(HAVE_PHYSMEM_SYSINFO) -# include - -#elif defined(__DJGPP__) -# include -#endif - - -/// \brief Get the amount of physical memory in bytes -/// -/// \return Amount of physical memory in bytes. On error, zero is -/// returned. -static inline uint64_t -physmem(void) -{ - uint64_t ret = 0; - -#if defined(_WIN32) || defined(__CYGWIN__) - if ((GetVersion() & 0xFF) >= 5) { - // Windows 2000 and later have GlobalMemoryStatusEx() which - // supports reporting values greater than 4 GiB. To keep the - // code working also on older Windows versions, use - // GlobalMemoryStatusEx() conditionally. - HMODULE kernel32 = GetModuleHandle("kernel32.dll"); - if (kernel32 != NULL) { - BOOL (WINAPI *gmse)(LPMEMORYSTATUSEX) = GetProcAddress( - kernel32, "GlobalMemoryStatusEx"); - if (gmse != NULL) { - MEMORYSTATUSEX meminfo; - meminfo.dwLength = sizeof(meminfo); - if (gmse(&meminfo)) - ret = meminfo.ullTotalPhys; - } - } - } - - if (ret == 0) { - // GlobalMemoryStatus() is supported by Windows 95 and later, - // so it is fine to link against it unconditionally. Note that - // GlobalMemoryStatus() has no return value. - MEMORYSTATUS meminfo; - meminfo.dwLength = sizeof(meminfo); - GlobalMemoryStatus(&meminfo); - ret = meminfo.dwTotalPhys; - } - -#elif defined(HAVE_PHYSMEM_SYSCONF) - const long pagesize = sysconf(_SC_PAGESIZE); - const long pages = sysconf(_SC_PHYS_PAGES); - if (pagesize != -1 || pages != -1) - // According to docs, pagesize * pages can overflow. - // Simple case is 32-bit box with 4 GiB or more RAM, - // which may report exactly 4 GiB of RAM, and "long" - // being 32-bit will overflow. Casting to uint64_t - // hopefully avoids overflows in the near future. - ret = (uint64_t)(pagesize) * (uint64_t)(pages); - -#elif defined(HAVE_PHYSMEM_SYSCTL) - int name[2] = { - CTL_HW, -#ifdef HW_PHYSMEM64 - HW_PHYSMEM64 -#else - HW_PHYSMEM -#endif - }; - union { - uint32_t u32; - uint64_t u64; - } mem; - size_t mem_ptr_size = sizeof(mem.u64); - if (!sysctl(name, 2, &mem.u64, &mem_ptr_size, NULL, NULL)) { - // IIRC, 64-bit "return value" is possible on some 64-bit - // BSD systems even with HW_PHYSMEM (instead of HW_PHYSMEM64), - // so support both. - if (mem_ptr_size == sizeof(mem.u64)) - ret = mem.u64; - else if (mem_ptr_size == sizeof(mem.u32)) - ret = mem.u32; - } - -#elif defined(HAVE_PHYSMEM_SYSINFO) - struct sysinfo si; - if (sysinfo(&si) == 0) - ret = (uint64_t)(si.totalram) * si.mem_unit; - -#elif defined(__DJGPP__) - __dpmi_free_mem_info meminfo; - if (__dpmi_get_free_memory_information(&meminfo) == 0 - && meminfo.total_number_of_physical_pages - != (unsigned long)(-1)) - ret = (uint64_t)(meminfo.total_number_of_physical_pages) - * 4096; -#endif - - return ret; -} - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/common/sysdefs.h b/Build/source/utils/xz-4.999.9beta/src/common/sysdefs.h deleted file mode 100644 index fbc9176a8a1..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/common/sysdefs.h +++ /dev/null @@ -1,169 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file sysdefs.h -/// \brief Common includes, definitions, system-specific things etc. -/// -/// This file is used also by the lzma command line tool, that's why this -/// file is separate from common.h. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_SYSDEFS_H -#define LZMA_SYSDEFS_H - -////////////// -// Includes // -////////////// - -#ifdef HAVE_CONFIG_H -# include -#endif - -// size_t and NULL -#include - -#ifdef HAVE_INTTYPES_H -# include -#endif - -// C99 says that inttypes.h always includes stdint.h, but some systems -// don't do that, and require including stdint.h separately. -#ifdef HAVE_STDINT_H -# include -#endif - -// Some pre-C99 systems have SIZE_MAX in limits.h instead of stdint.h. The -// limits are also used to figure out some macros missing from pre-C99 systems. -#ifdef HAVE_LIMITS_H -# include -#endif - -// Be more compatible with systems that have non-conforming inttypes.h. -// We assume that int is 32-bit and that long is either 32-bit or 64-bit. -// Full Autoconf test could be more correct, but this should work well enough. -// Note that this duplicates some code from lzma.h, but this is better since -// we can work without inttypes.h thanks to Autoconf tests. -#ifndef UINT32_C -# if UINT_MAX != 4294967295U -# error UINT32_C is not defined and unsiged int is not 32-bit. -# endif -# define UINT32_C(n) n ## U -#endif -#ifndef UINT32_MAX -# define UINT32_MAX UINT32_C(4294967295) -#endif -#ifndef PRIu32 -# define PRIu32 "u" -#endif -#ifndef PRIX32 -# define PRIX32 "X" -#endif - -#if ULONG_MAX == 4294967295UL -# ifndef UINT64_C -# define UINT64_C(n) n ## ULL -# endif -# ifndef PRIu64 -# define PRIu64 "llu" -# endif -# ifndef PRIX64 -# define PRIX64 "llX" -# endif -#else -# ifndef UINT64_C -# define UINT64_C(n) n ## UL -# endif -# ifndef PRIu64 -# define PRIu64 "lu" -# endif -# ifndef PRIX64 -# define PRIX64 "lX" -# endif -#endif -#ifndef UINT64_MAX -# define UINT64_MAX UINT64_C(18446744073709551615) -#endif - -// The code currently assumes that size_t is either 32-bit or 64-bit. -#ifndef SIZE_MAX -# if SIZEOF_SIZE_T == 4 -# define SIZE_MAX UINT32_MAX -# elif SIZEOF_SIZE_T == 8 -# define SIZE_MAX UINT64_MAX -# else -# error sizeof(size_t) is not 32-bit or 64-bit -# endif -#endif -#if SIZE_MAX != UINT32_MAX && SIZE_MAX != UINT64_MAX -# error sizeof(size_t) is not 32-bit or 64-bit -#endif - -#include -#include - -// Pre-C99 systems lack stdbool.h. All the code in LZMA Utils must be written -// so that it works with fake bool type, for example: -// -// bool foo = (flags & 0x100) != 0; -// bool bar = !!(flags & 0x100); -// -// This works with the real C99 bool but breaks with fake bool: -// -// bool baz = (flags & 0x100); -// -#ifdef HAVE_STDBOOL_H -# include -#else -# if ! HAVE__BOOL -typedef unsigned char _Bool; -# endif -# define bool _Bool -# define false 0 -# define true 1 -# define __bool_true_false_are_defined 1 -#endif - -// string.h should be enough but let's include strings.h and memory.h too if -// they exists, since that shouldn't do any harm, but may improve portability. -#ifdef HAVE_STRING_H -# include -#endif - -#ifdef HAVE_STRINGS_H -# include -#endif - -#ifdef HAVE_MEMORY_H -# include -#endif - - -//////////// -// Macros // -//////////// - -#if defined(_WIN32) || defined(__MSDOS__) || defined(__OS2__) -# define DOSLIKE 1 -#endif - -#undef memzero -#define memzero(s, n) memset(s, 0, n) - -#ifndef MIN -# define MIN(x, y) ((x) < (y) ? (x) : (y)) -#endif - -#ifndef MAX -# define MAX(x, y) ((x) > (y) ? (x) : (y)) -#endif - -#ifndef ARRAY_SIZE -# define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) -#endif - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/Makefile.am b/Build/source/utils/xz-4.999.9beta/src/liblzma/Makefile.am deleted file mode 100644 index 6d5753b14fc..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/Makefile.am +++ /dev/null @@ -1,94 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -SUBDIRS = api - -EXTRA_DIST = -CLEANFILES = -doc_DATA = - -lib_LTLIBRARIES = liblzma.la -liblzma_la_SOURCES = -liblzma_la_CPPFLAGS = \ - -I$(top_srcdir)/src/liblzma/api \ - -I$(top_srcdir)/src/liblzma/common \ - -I$(top_srcdir)/src/liblzma/check \ - -I$(top_srcdir)/src/liblzma/lz \ - -I$(top_srcdir)/src/liblzma/rangecoder \ - -I$(top_srcdir)/src/liblzma/lzma \ - -I$(top_srcdir)/src/liblzma/subblock \ - -I$(top_srcdir)/src/liblzma/delta \ - -I$(top_srcdir)/src/liblzma/simple \ - -I$(top_srcdir)/src/common -liblzma_la_LDFLAGS = -no-undefined -version-info 0:0:0 - -include $(srcdir)/common/Makefile.inc -include $(srcdir)/check/Makefile.inc - -if COND_FILTER_LZ -include $(srcdir)/lz/Makefile.inc -endif - -if COND_FILTER_LZMA1 -include $(srcdir)/lzma/Makefile.inc -include $(srcdir)/rangecoder/Makefile.inc -endif - -if COND_FILTER_SUBBLOCK -include $(srcdir)/subblock/Makefile.inc -endif - -if COND_FILTER_DELTA -include $(srcdir)/delta/Makefile.inc -endif - -if COND_FILTER_SIMPLE -include $(srcdir)/simple/Makefile.inc -endif - - -## Windows-specific stuff - -# Windows resource compiler support. libtool knows what to do with .rc -# files, but Automake (<= 1.11 at least) doesn't know. -# -# We want the resource file only in shared liblzma. To avoid linking it into -# static liblzma, we overwrite the static object file with an object file -# compiled from empty input. Note that GNU-specific features are OK here, -# because on Windows we are compiled with the GNU toolchain. -.rc.lo: - $(LIBTOOL) --mode=compile $(RC) $(DEFS) $(DEFAULT_INCLUDES) \ - $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) \ - -i $< -o $@ - echo > empty.c - $(COMPILE) -c empty.c -o $(*D)/$(*F).o - -# Remove ordinals from the generated .def file. People must link by name, -# not by ordinal, because no one is going to track the ordinal numbers. -liblzma.def: liblzma.la liblzma.def.in - sed 's/ \+@ *[0-9]\+//' liblzma.def.in > liblzma.def - -# Creating liblzma.def.in is a side effect of linking the library. -liblzma.def.in: liblzma.la - -if COND_W32 -CLEANFILES += liblzma.def liblzma.def.in empty.c -liblzma_la_SOURCES += liblzma_w32res.rc -liblzma_la_LDFLAGS += -Xlinker --output-def -Xlinker liblzma.def.in - -## liblzma.def.in is created only when building shared liblzma, so don't -## try to create liblzma.def when not building shared liblzma. -if COND_SHARED -doc_DATA += liblzma.def -endif -endif - - -## pkg-config -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = liblzma.pc -EXTRA_DIST += liblzma.pc.in diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/Makefile.in b/Build/source/utils/xz-4.999.9beta/src/liblzma/Makefile.in deleted file mode 100644 index 7d401e58b45..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/Makefile.in +++ /dev/null @@ -1,1728 +0,0 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/check/Makefile.inc $(srcdir)/common/Makefile.inc \ - $(srcdir)/delta/Makefile.inc $(srcdir)/liblzma.pc.in \ - $(srcdir)/lz/Makefile.inc $(srcdir)/lzma/Makefile.inc \ - $(srcdir)/rangecoder/Makefile.inc \ - $(srcdir)/simple/Makefile.inc $(srcdir)/subblock/Makefile.inc -@COND_MAIN_ENCODER_TRUE@am__append_1 = \ -@COND_MAIN_ENCODER_TRUE@ common/alone_encoder.c \ -@COND_MAIN_ENCODER_TRUE@ common/block_buffer_encoder.c \ -@COND_MAIN_ENCODER_TRUE@ common/block_encoder.c \ -@COND_MAIN_ENCODER_TRUE@ common/block_encoder.h \ -@COND_MAIN_ENCODER_TRUE@ common/block_header_encoder.c \ -@COND_MAIN_ENCODER_TRUE@ common/easy_buffer_encoder.c \ -@COND_MAIN_ENCODER_TRUE@ common/easy_encoder.c \ -@COND_MAIN_ENCODER_TRUE@ common/easy_encoder_memusage.c \ -@COND_MAIN_ENCODER_TRUE@ common/filter_buffer_encoder.c \ -@COND_MAIN_ENCODER_TRUE@ common/filter_encoder.c \ -@COND_MAIN_ENCODER_TRUE@ common/filter_encoder.h \ -@COND_MAIN_ENCODER_TRUE@ common/filter_flags_encoder.c \ -@COND_MAIN_ENCODER_TRUE@ common/index_encoder.c \ -@COND_MAIN_ENCODER_TRUE@ common/index_encoder.h \ -@COND_MAIN_ENCODER_TRUE@ common/stream_buffer_encoder.c \ -@COND_MAIN_ENCODER_TRUE@ common/stream_encoder.c \ -@COND_MAIN_ENCODER_TRUE@ common/stream_encoder.h \ -@COND_MAIN_ENCODER_TRUE@ common/stream_flags_encoder.c \ -@COND_MAIN_ENCODER_TRUE@ common/vli_encoder.c - -@COND_MAIN_DECODER_TRUE@am__append_2 = \ -@COND_MAIN_DECODER_TRUE@ common/alone_decoder.c \ -@COND_MAIN_DECODER_TRUE@ common/alone_decoder.h \ -@COND_MAIN_DECODER_TRUE@ common/auto_decoder.c \ -@COND_MAIN_DECODER_TRUE@ common/block_buffer_decoder.c \ -@COND_MAIN_DECODER_TRUE@ common/block_decoder.c \ -@COND_MAIN_DECODER_TRUE@ common/block_decoder.h \ -@COND_MAIN_DECODER_TRUE@ common/block_header_decoder.c \ -@COND_MAIN_DECODER_TRUE@ common/easy_decoder_memusage.c \ -@COND_MAIN_DECODER_TRUE@ common/filter_buffer_decoder.c \ -@COND_MAIN_DECODER_TRUE@ common/filter_decoder.c \ -@COND_MAIN_DECODER_TRUE@ common/filter_decoder.h \ -@COND_MAIN_DECODER_TRUE@ common/filter_flags_decoder.c \ -@COND_MAIN_DECODER_TRUE@ common/index_decoder.c \ -@COND_MAIN_DECODER_TRUE@ common/index_hash.c \ -@COND_MAIN_DECODER_TRUE@ common/stream_buffer_decoder.c \ -@COND_MAIN_DECODER_TRUE@ common/stream_decoder.c \ -@COND_MAIN_DECODER_TRUE@ common/stream_decoder.h \ -@COND_MAIN_DECODER_TRUE@ common/stream_flags_decoder.c \ -@COND_MAIN_DECODER_TRUE@ common/vli_decoder.c - -@COND_CHECK_CRC32_TRUE@@COND_SMALL_TRUE@am__append_3 = check/crc32_small.c -@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__append_4 = \ -@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@ check/crc32_table.c \ -@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@ check/crc32_table_le.h \ -@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@ check/crc32_table_be.h - -@COND_ASM_X86_TRUE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__append_5 = check/crc32_x86.S -@COND_ASM_X86_FALSE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__append_6 = check/crc32_fast.c -@COND_CHECK_CRC64_TRUE@@COND_SMALL_TRUE@am__append_7 = check/crc64_small.c -@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__append_8 = \ -@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@ check/crc64_table.c \ -@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@ check/crc64_table_le.h \ -@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@ check/crc64_table_be.h - -@COND_ASM_X86_TRUE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__append_9 = check/crc64_x86.S -@COND_ASM_X86_FALSE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__append_10 = check/crc64_fast.c -@COND_CHECK_SHA256_TRUE@am__append_11 = check/sha256.c -@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__append_12 = \ -@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_encoder.c \ -@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_encoder.h \ -@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_encoder_hash.h \ -@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_encoder_mf.c - -@COND_DECODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__append_13 = \ -@COND_DECODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_decoder.c \ -@COND_DECODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ lz/lz_decoder.h - -@COND_FILTER_LZMA1_TRUE@am__append_14 = lzma/fastpos_tablegen.c \ -@COND_FILTER_LZMA1_TRUE@ rangecoder/price_tablegen.c -@COND_FILTER_LZMA1_TRUE@am__append_15 = lzma/lzma_common.h -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_16 = \ -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/fastpos.h \ -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder.h \ -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder.c \ -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder_presets.c \ -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder_private.h \ -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder_optimum_fast.c \ -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_encoder_optimum_normal.c - -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@@COND_SMALL_FALSE@am__append_17 = lzma/fastpos_table.c -@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_18 = \ -@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_decoder.c \ -@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma_decoder.h - -@COND_ENCODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_19 = \ -@COND_ENCODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma2_encoder.c \ -@COND_ENCODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma2_encoder.h - -@COND_DECODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_20 = \ -@COND_DECODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma2_decoder.c \ -@COND_DECODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@ lzma/lzma2_decoder.h - -@COND_FILTER_LZMA1_TRUE@am__append_21 = rangecoder/range_common.h -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_22 = \ -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ rangecoder/range_encoder.h \ -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ rangecoder/price.h \ -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ rangecoder/price_table.c - -@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__append_23 = rangecoder/range_decoder.h -@COND_ENCODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@am__append_24 = \ -@COND_ENCODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@ subblock/subblock_encoder.c \ -@COND_ENCODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@ subblock/subblock_encoder.h - -@COND_DECODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@am__append_25 = \ -@COND_DECODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@ subblock/subblock_decoder.c \ -@COND_DECODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@ subblock/subblock_decoder.h \ -@COND_DECODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@ subblock/subblock_decoder_helper.c \ -@COND_DECODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@ subblock/subblock_decoder_helper.h - -@COND_FILTER_DELTA_TRUE@am__append_26 = \ -@COND_FILTER_DELTA_TRUE@ delta/delta_common.c \ -@COND_FILTER_DELTA_TRUE@ delta/delta_common.h \ -@COND_FILTER_DELTA_TRUE@ delta/delta_private.h - -@COND_ENCODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__append_27 = \ -@COND_ENCODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@ delta/delta_encoder.c \ -@COND_ENCODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@ delta/delta_encoder.h - -@COND_DECODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__append_28 = \ -@COND_DECODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@ delta/delta_decoder.c \ -@COND_DECODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@ delta/delta_decoder.h - -@COND_FILTER_SIMPLE_TRUE@am__append_29 = \ -@COND_FILTER_SIMPLE_TRUE@ simple/simple_coder.c \ -@COND_FILTER_SIMPLE_TRUE@ simple/simple_coder.h \ -@COND_FILTER_SIMPLE_TRUE@ simple/simple_private.h - -@COND_ENCODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_30 = \ -@COND_ENCODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@ simple/simple_encoder.c \ -@COND_ENCODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@ simple/simple_encoder.h - -@COND_DECODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_31 = \ -@COND_DECODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@ simple/simple_decoder.c \ -@COND_DECODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@ simple/simple_decoder.h - -@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_X86_TRUE@am__append_32 = simple/x86.c -@COND_FILTER_POWERPC_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_33 = simple/powerpc.c -@COND_FILTER_IA64_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_34 = simple/ia64.c -@COND_FILTER_ARM_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_35 = simple/arm.c -@COND_FILTER_ARMTHUMB_TRUE@@COND_FILTER_SIMPLE_TRUE@am__append_36 = simple/armthumb.c -@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_SPARC_TRUE@am__append_37 = simple/sparc.c -@COND_W32_TRUE@am__append_38 = liblzma.def liblzma.def.in empty.c -@COND_W32_TRUE@am__append_39 = liblzma_w32res.rc -@COND_W32_TRUE@am__append_40 = -Xlinker --output-def -Xlinker liblzma.def.in -@COND_SHARED_TRUE@@COND_W32_TRUE@am__append_41 = liblzma.def -subdir = src/liblzma -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ - $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ - $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ - $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ - $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = liblzma.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__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ - "$(DESTDIR)$(pkgconfigdir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -liblzma_la_LIBADD = -am__liblzma_la_SOURCES_DIST = common/common.c common/common.h \ - common/bsr.h common/block_util.c common/easy_preset.c \ - common/easy_preset.h common/filter_common.c \ - common/filter_common.h common/index.c common/index.h \ - common/stream_flags_common.c common/stream_flags_common.h \ - common/vli_size.c common/alone_encoder.c \ - common/block_buffer_encoder.c common/block_encoder.c \ - common/block_encoder.h common/block_header_encoder.c \ - common/easy_buffer_encoder.c common/easy_encoder.c \ - common/easy_encoder_memusage.c common/filter_buffer_encoder.c \ - common/filter_encoder.c common/filter_encoder.h \ - common/filter_flags_encoder.c common/index_encoder.c \ - common/index_encoder.h common/stream_buffer_encoder.c \ - common/stream_encoder.c common/stream_encoder.h \ - common/stream_flags_encoder.c common/vli_encoder.c \ - common/alone_decoder.c common/alone_decoder.h \ - common/auto_decoder.c common/block_buffer_decoder.c \ - common/block_decoder.c common/block_decoder.h \ - common/block_header_decoder.c common/easy_decoder_memusage.c \ - common/filter_buffer_decoder.c common/filter_decoder.c \ - common/filter_decoder.h common/filter_flags_decoder.c \ - common/index_decoder.c common/index_hash.c \ - common/stream_buffer_decoder.c common/stream_decoder.c \ - common/stream_decoder.h common/stream_flags_decoder.c \ - common/vli_decoder.c check/check.c check/check.h \ - check/crc_macros.h check/crc32_small.c check/crc32_table.c \ - check/crc32_table_le.h check/crc32_table_be.h \ - check/crc32_x86.S check/crc32_fast.c check/crc64_small.c \ - check/crc64_table.c check/crc64_table_le.h \ - check/crc64_table_be.h check/crc64_x86.S check/crc64_fast.c \ - check/sha256.c lz/lz_encoder.c lz/lz_encoder.h \ - lz/lz_encoder_hash.h lz/lz_encoder_mf.c lz/lz_decoder.c \ - lz/lz_decoder.h lzma/lzma_common.h lzma/fastpos.h \ - lzma/lzma_encoder.h lzma/lzma_encoder.c \ - lzma/lzma_encoder_presets.c lzma/lzma_encoder_private.h \ - lzma/lzma_encoder_optimum_fast.c \ - lzma/lzma_encoder_optimum_normal.c lzma/fastpos_table.c \ - lzma/lzma_decoder.c lzma/lzma_decoder.h lzma/lzma2_encoder.c \ - lzma/lzma2_encoder.h lzma/lzma2_decoder.c lzma/lzma2_decoder.h \ - rangecoder/range_common.h rangecoder/range_encoder.h \ - rangecoder/price.h rangecoder/price_table.c \ - rangecoder/range_decoder.h subblock/subblock_encoder.c \ - subblock/subblock_encoder.h subblock/subblock_decoder.c \ - subblock/subblock_decoder.h subblock/subblock_decoder_helper.c \ - subblock/subblock_decoder_helper.h delta/delta_common.c \ - delta/delta_common.h delta/delta_private.h \ - delta/delta_encoder.c delta/delta_encoder.h \ - delta/delta_decoder.c delta/delta_decoder.h \ - simple/simple_coder.c simple/simple_coder.h \ - simple/simple_private.h simple/simple_encoder.c \ - simple/simple_encoder.h simple/simple_decoder.c \ - simple/simple_decoder.h simple/x86.c simple/powerpc.c \ - simple/ia64.c simple/arm.c simple/armthumb.c simple/sparc.c \ - liblzma_w32res.rc -@COND_MAIN_ENCODER_TRUE@am__objects_1 = liblzma_la-alone_encoder.lo \ -@COND_MAIN_ENCODER_TRUE@ liblzma_la-block_buffer_encoder.lo \ -@COND_MAIN_ENCODER_TRUE@ liblzma_la-block_encoder.lo \ -@COND_MAIN_ENCODER_TRUE@ liblzma_la-block_header_encoder.lo \ -@COND_MAIN_ENCODER_TRUE@ liblzma_la-easy_buffer_encoder.lo \ -@COND_MAIN_ENCODER_TRUE@ liblzma_la-easy_encoder.lo \ -@COND_MAIN_ENCODER_TRUE@ liblzma_la-easy_encoder_memusage.lo \ -@COND_MAIN_ENCODER_TRUE@ liblzma_la-filter_buffer_encoder.lo \ -@COND_MAIN_ENCODER_TRUE@ liblzma_la-filter_encoder.lo \ -@COND_MAIN_ENCODER_TRUE@ liblzma_la-filter_flags_encoder.lo \ -@COND_MAIN_ENCODER_TRUE@ liblzma_la-index_encoder.lo \ -@COND_MAIN_ENCODER_TRUE@ liblzma_la-stream_buffer_encoder.lo \ -@COND_MAIN_ENCODER_TRUE@ liblzma_la-stream_encoder.lo \ -@COND_MAIN_ENCODER_TRUE@ liblzma_la-stream_flags_encoder.lo \ -@COND_MAIN_ENCODER_TRUE@ liblzma_la-vli_encoder.lo -@COND_MAIN_DECODER_TRUE@am__objects_2 = liblzma_la-alone_decoder.lo \ -@COND_MAIN_DECODER_TRUE@ liblzma_la-auto_decoder.lo \ -@COND_MAIN_DECODER_TRUE@ liblzma_la-block_buffer_decoder.lo \ -@COND_MAIN_DECODER_TRUE@ liblzma_la-block_decoder.lo \ -@COND_MAIN_DECODER_TRUE@ liblzma_la-block_header_decoder.lo \ -@COND_MAIN_DECODER_TRUE@ liblzma_la-easy_decoder_memusage.lo \ -@COND_MAIN_DECODER_TRUE@ liblzma_la-filter_buffer_decoder.lo \ -@COND_MAIN_DECODER_TRUE@ liblzma_la-filter_decoder.lo \ -@COND_MAIN_DECODER_TRUE@ liblzma_la-filter_flags_decoder.lo \ -@COND_MAIN_DECODER_TRUE@ liblzma_la-index_decoder.lo \ -@COND_MAIN_DECODER_TRUE@ liblzma_la-index_hash.lo \ -@COND_MAIN_DECODER_TRUE@ liblzma_la-stream_buffer_decoder.lo \ -@COND_MAIN_DECODER_TRUE@ liblzma_la-stream_decoder.lo \ -@COND_MAIN_DECODER_TRUE@ liblzma_la-stream_flags_decoder.lo \ -@COND_MAIN_DECODER_TRUE@ liblzma_la-vli_decoder.lo -@COND_CHECK_CRC32_TRUE@@COND_SMALL_TRUE@am__objects_3 = liblzma_la-crc32_small.lo -@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__objects_4 = liblzma_la-crc32_table.lo -@COND_ASM_X86_TRUE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__objects_5 = liblzma_la-crc32_x86.lo -@COND_ASM_X86_FALSE@@COND_CHECK_CRC32_TRUE@@COND_SMALL_FALSE@am__objects_6 = liblzma_la-crc32_fast.lo -@COND_CHECK_CRC64_TRUE@@COND_SMALL_TRUE@am__objects_7 = liblzma_la-crc64_small.lo -@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__objects_8 = liblzma_la-crc64_table.lo -@COND_ASM_X86_TRUE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__objects_9 = liblzma_la-crc64_x86.lo -@COND_ASM_X86_FALSE@@COND_CHECK_CRC64_TRUE@@COND_SMALL_FALSE@am__objects_10 = liblzma_la-crc64_fast.lo -@COND_CHECK_SHA256_TRUE@am__objects_11 = liblzma_la-sha256.lo -@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__objects_12 = liblzma_la-lz_encoder.lo \ -@COND_ENCODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@ liblzma_la-lz_encoder_mf.lo -@COND_DECODER_LZ_TRUE@@COND_FILTER_LZ_TRUE@am__objects_13 = liblzma_la-lz_decoder.lo -am__objects_14 = -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_15 = liblzma_la-lzma_encoder.lo \ -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ liblzma_la-lzma_encoder_presets.lo \ -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ liblzma_la-lzma_encoder_optimum_fast.lo \ -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@ liblzma_la-lzma_encoder_optimum_normal.lo -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@@COND_SMALL_FALSE@am__objects_16 = liblzma_la-fastpos_table.lo -@COND_DECODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_17 = liblzma_la-lzma_decoder.lo -@COND_ENCODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_18 = liblzma_la-lzma2_encoder.lo -@COND_DECODER_LZMA2_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_19 = liblzma_la-lzma2_decoder.lo -@COND_ENCODER_LZMA1_TRUE@@COND_FILTER_LZMA1_TRUE@am__objects_20 = liblzma_la-price_table.lo -@COND_ENCODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@am__objects_21 = liblzma_la-subblock_encoder.lo -@COND_DECODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@am__objects_22 = liblzma_la-subblock_decoder.lo \ -@COND_DECODER_SUBBLOCK_TRUE@@COND_FILTER_SUBBLOCK_TRUE@ liblzma_la-subblock_decoder_helper.lo -@COND_FILTER_DELTA_TRUE@am__objects_23 = liblzma_la-delta_common.lo -@COND_ENCODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__objects_24 = liblzma_la-delta_encoder.lo -@COND_DECODER_DELTA_TRUE@@COND_FILTER_DELTA_TRUE@am__objects_25 = liblzma_la-delta_decoder.lo -@COND_FILTER_SIMPLE_TRUE@am__objects_26 = liblzma_la-simple_coder.lo -@COND_ENCODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_27 = liblzma_la-simple_encoder.lo -@COND_DECODER_SIMPLE_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_28 = liblzma_la-simple_decoder.lo -@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_X86_TRUE@am__objects_29 = liblzma_la-x86.lo -@COND_FILTER_POWERPC_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_30 = liblzma_la-powerpc.lo -@COND_FILTER_IA64_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_31 = liblzma_la-ia64.lo -@COND_FILTER_ARM_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_32 = liblzma_la-arm.lo -@COND_FILTER_ARMTHUMB_TRUE@@COND_FILTER_SIMPLE_TRUE@am__objects_33 = liblzma_la-armthumb.lo -@COND_FILTER_SIMPLE_TRUE@@COND_FILTER_SPARC_TRUE@am__objects_34 = liblzma_la-sparc.lo -@COND_W32_TRUE@am__objects_35 = liblzma_w32res.lo -am_liblzma_la_OBJECTS = liblzma_la-common.lo liblzma_la-block_util.lo \ - liblzma_la-easy_preset.lo liblzma_la-filter_common.lo \ - liblzma_la-index.lo liblzma_la-stream_flags_common.lo \ - liblzma_la-vli_size.lo $(am__objects_1) $(am__objects_2) \ - liblzma_la-check.lo $(am__objects_3) $(am__objects_4) \ - $(am__objects_5) $(am__objects_6) $(am__objects_7) \ - $(am__objects_8) $(am__objects_9) $(am__objects_10) \ - $(am__objects_11) $(am__objects_12) $(am__objects_13) \ - $(am__objects_14) $(am__objects_15) $(am__objects_16) \ - $(am__objects_17) $(am__objects_18) $(am__objects_19) \ - $(am__objects_14) $(am__objects_20) $(am__objects_14) \ - $(am__objects_21) $(am__objects_22) $(am__objects_23) \ - $(am__objects_24) $(am__objects_25) $(am__objects_26) \ - $(am__objects_27) $(am__objects_28) $(am__objects_29) \ - $(am__objects_30) $(am__objects_31) $(am__objects_32) \ - $(am__objects_33) $(am__objects_34) $(am__objects_35) -liblzma_la_OBJECTS = $(am_liblzma_la_OBJECTS) -liblzma_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(liblzma_la_LDFLAGS) $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -LTCPPASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(liblzma_la_SOURCES) -DIST_SOURCES = $(am__liblzma_la_SOURCES_DIST) -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -DATA = $(doc_DATA) $(pkgconfig_DATA) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ -DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GETOPT_H = @GETOPT_H@ -GMSGFMT = @GMSGFMT@ -GMSGFMT_015 = @GMSGFMT_015@ -GREP = @GREP@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTLLIBS = @INTLLIBS@ -INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBICONV = @LIBICONV@ -LIBINTL = @LIBINTL@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBINTL = @LTLIBINTL@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -MSGFMT = @MSGFMT@ -MSGFMT_015 = @MSGFMT_015@ -MSGMERGE = @MSGMERGE@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POSIX_SHELL = @POSIX_SHELL@ -POSUB = @POSUB@ -PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -RC = @RC@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ -STATIC_LDFLAGS = @STATIC_LDFLAGS@ -STRIP = @STRIP@ -USE_NLS = @USE_NLS@ -VERSION = @VERSION@ -XGETTEXT = @XGETTEXT@ -XGETTEXT_015 = @XGETTEXT_015@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -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@ -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@ -lt_ECHO = @lt_ECHO@ -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@ -xz = @xz@ -SUBDIRS = api -EXTRA_DIST = check/crc32_tablegen.c check/crc64_tablegen.c \ - $(am__append_14) liblzma.pc.in -CLEANFILES = $(am__append_38) -doc_DATA = $(am__append_41) -lib_LTLIBRARIES = liblzma.la -liblzma_la_SOURCES = common/common.c common/common.h common/bsr.h \ - common/block_util.c common/easy_preset.c common/easy_preset.h \ - common/filter_common.c common/filter_common.h common/index.c \ - common/index.h common/stream_flags_common.c \ - common/stream_flags_common.h common/vli_size.c $(am__append_1) \ - $(am__append_2) check/check.c check/check.h check/crc_macros.h \ - $(am__append_3) $(am__append_4) $(am__append_5) \ - $(am__append_6) $(am__append_7) $(am__append_8) \ - $(am__append_9) $(am__append_10) $(am__append_11) \ - $(am__append_12) $(am__append_13) $(am__append_15) \ - $(am__append_16) $(am__append_17) $(am__append_18) \ - $(am__append_19) $(am__append_20) $(am__append_21) \ - $(am__append_22) $(am__append_23) $(am__append_24) \ - $(am__append_25) $(am__append_26) $(am__append_27) \ - $(am__append_28) $(am__append_29) $(am__append_30) \ - $(am__append_31) $(am__append_32) $(am__append_33) \ - $(am__append_34) $(am__append_35) $(am__append_36) \ - $(am__append_37) $(am__append_39) -liblzma_la_CPPFLAGS = \ - -I$(top_srcdir)/src/liblzma/api \ - -I$(top_srcdir)/src/liblzma/common \ - -I$(top_srcdir)/src/liblzma/check \ - -I$(top_srcdir)/src/liblzma/lz \ - -I$(top_srcdir)/src/liblzma/rangecoder \ - -I$(top_srcdir)/src/liblzma/lzma \ - -I$(top_srcdir)/src/liblzma/subblock \ - -I$(top_srcdir)/src/liblzma/delta \ - -I$(top_srcdir)/src/liblzma/simple \ - -I$(top_srcdir)/src/common - -liblzma_la_LDFLAGS = -no-undefined -version-info 0:0:0 \ - $(am__append_40) -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = liblzma.pc -all: all-recursive - -.SUFFIXES: -.SUFFIXES: .S .c .lo .o .obj .rc -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/common/Makefile.inc $(srcdir)/check/Makefile.inc $(srcdir)/lz/Makefile.inc $(srcdir)/lzma/Makefile.inc $(srcdir)/rangecoder/Makefile.inc $(srcdir)/subblock/Makefile.inc $(srcdir)/delta/Makefile.inc $(srcdir)/simple/Makefile.inc $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/liblzma/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/liblzma/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -liblzma.pc: $(top_builddir)/config.status $(srcdir)/liblzma.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -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 -liblzma.la: $(liblzma_la_OBJECTS) $(liblzma_la_DEPENDENCIES) - $(liblzma_la_LINK) -rpath $(libdir) $(liblzma_la_OBJECTS) $(liblzma_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-alone_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-alone_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-arm.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-armthumb.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-auto_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_buffer_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_buffer_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_header_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_header_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-block_util.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-check.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-common.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc32_fast.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc32_small.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc32_table.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc32_x86.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc64_fast.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc64_small.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc64_table.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-crc64_x86.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-delta_common.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-delta_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-delta_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-easy_buffer_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-easy_decoder_memusage.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-easy_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-easy_encoder_memusage.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-easy_preset.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-fastpos_table.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_buffer_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_buffer_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_common.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_flags_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-filter_flags_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-ia64.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-index.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-index_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-index_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-index_hash.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lz_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lz_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lz_encoder_mf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma2_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma2_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma_encoder_optimum_fast.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma_encoder_optimum_normal.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-lzma_encoder_presets.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-powerpc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-price_table.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-sha256.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-simple_coder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-simple_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-simple_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-sparc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_buffer_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_buffer_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_flags_common.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_flags_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-stream_flags_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-subblock_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-subblock_decoder_helper.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-subblock_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-vli_decoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-vli_encoder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-vli_size.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblzma_la-x86.Plo@am__quote@ - -.S.o: -@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ $< - -.S.obj: -@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.S.lo: -@am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(LTCPPASCOMPILE) -c -o $@ $< - -liblzma_la-crc32_x86.lo: check/crc32_x86.S -@am__fastdepCCAS_TRUE@ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT liblzma_la-crc32_x86.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc32_x86.Tpo -c -o liblzma_la-crc32_x86.lo `test -f 'check/crc32_x86.S' || echo '$(srcdir)/'`check/crc32_x86.S -@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc32_x86.Tpo $(DEPDIR)/liblzma_la-crc32_x86.Plo -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='check/crc32_x86.S' object='liblzma_la-crc32_x86.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o liblzma_la-crc32_x86.lo `test -f 'check/crc32_x86.S' || echo '$(srcdir)/'`check/crc32_x86.S - -liblzma_la-crc64_x86.lo: check/crc64_x86.S -@am__fastdepCCAS_TRUE@ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT liblzma_la-crc64_x86.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc64_x86.Tpo -c -o liblzma_la-crc64_x86.lo `test -f 'check/crc64_x86.S' || echo '$(srcdir)/'`check/crc64_x86.S -@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc64_x86.Tpo $(DEPDIR)/liblzma_la-crc64_x86.Plo -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='check/crc64_x86.S' object='liblzma_la-crc64_x86.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o liblzma_la-crc64_x86.lo `test -f 'check/crc64_x86.S' || echo '$(srcdir)/'`check/crc64_x86.S - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -liblzma_la-common.lo: common/common.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-common.lo -MD -MP -MF $(DEPDIR)/liblzma_la-common.Tpo -c -o liblzma_la-common.lo `test -f 'common/common.c' || echo '$(srcdir)/'`common/common.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-common.Tpo $(DEPDIR)/liblzma_la-common.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/common.c' object='liblzma_la-common.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-common.lo `test -f 'common/common.c' || echo '$(srcdir)/'`common/common.c - -liblzma_la-block_util.lo: common/block_util.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-block_util.lo -MD -MP -MF $(DEPDIR)/liblzma_la-block_util.Tpo -c -o liblzma_la-block_util.lo `test -f 'common/block_util.c' || echo '$(srcdir)/'`common/block_util.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-block_util.Tpo $(DEPDIR)/liblzma_la-block_util.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/block_util.c' object='liblzma_la-block_util.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-block_util.lo `test -f 'common/block_util.c' || echo '$(srcdir)/'`common/block_util.c - -liblzma_la-easy_preset.lo: common/easy_preset.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-easy_preset.lo -MD -MP -MF $(DEPDIR)/liblzma_la-easy_preset.Tpo -c -o liblzma_la-easy_preset.lo `test -f 'common/easy_preset.c' || echo '$(srcdir)/'`common/easy_preset.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-easy_preset.Tpo $(DEPDIR)/liblzma_la-easy_preset.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/easy_preset.c' object='liblzma_la-easy_preset.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-easy_preset.lo `test -f 'common/easy_preset.c' || echo '$(srcdir)/'`common/easy_preset.c - -liblzma_la-filter_common.lo: common/filter_common.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_common.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_common.Tpo -c -o liblzma_la-filter_common.lo `test -f 'common/filter_common.c' || echo '$(srcdir)/'`common/filter_common.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-filter_common.Tpo $(DEPDIR)/liblzma_la-filter_common.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/filter_common.c' object='liblzma_la-filter_common.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-filter_common.lo `test -f 'common/filter_common.c' || echo '$(srcdir)/'`common/filter_common.c - -liblzma_la-index.lo: common/index.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-index.lo -MD -MP -MF $(DEPDIR)/liblzma_la-index.Tpo -c -o liblzma_la-index.lo `test -f 'common/index.c' || echo '$(srcdir)/'`common/index.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-index.Tpo $(DEPDIR)/liblzma_la-index.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/index.c' object='liblzma_la-index.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-index.lo `test -f 'common/index.c' || echo '$(srcdir)/'`common/index.c - -liblzma_la-stream_flags_common.lo: common/stream_flags_common.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_flags_common.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_flags_common.Tpo -c -o liblzma_la-stream_flags_common.lo `test -f 'common/stream_flags_common.c' || echo '$(srcdir)/'`common/stream_flags_common.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-stream_flags_common.Tpo $(DEPDIR)/liblzma_la-stream_flags_common.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/stream_flags_common.c' object='liblzma_la-stream_flags_common.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_flags_common.lo `test -f 'common/stream_flags_common.c' || echo '$(srcdir)/'`common/stream_flags_common.c - -liblzma_la-vli_size.lo: common/vli_size.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-vli_size.lo -MD -MP -MF $(DEPDIR)/liblzma_la-vli_size.Tpo -c -o liblzma_la-vli_size.lo `test -f 'common/vli_size.c' || echo '$(srcdir)/'`common/vli_size.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-vli_size.Tpo $(DEPDIR)/liblzma_la-vli_size.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/vli_size.c' object='liblzma_la-vli_size.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-vli_size.lo `test -f 'common/vli_size.c' || echo '$(srcdir)/'`common/vli_size.c - -liblzma_la-alone_encoder.lo: common/alone_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-alone_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-alone_encoder.Tpo -c -o liblzma_la-alone_encoder.lo `test -f 'common/alone_encoder.c' || echo '$(srcdir)/'`common/alone_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-alone_encoder.Tpo $(DEPDIR)/liblzma_la-alone_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/alone_encoder.c' object='liblzma_la-alone_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-alone_encoder.lo `test -f 'common/alone_encoder.c' || echo '$(srcdir)/'`common/alone_encoder.c - -liblzma_la-block_buffer_encoder.lo: common/block_buffer_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-block_buffer_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-block_buffer_encoder.Tpo -c -o liblzma_la-block_buffer_encoder.lo `test -f 'common/block_buffer_encoder.c' || echo '$(srcdir)/'`common/block_buffer_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-block_buffer_encoder.Tpo $(DEPDIR)/liblzma_la-block_buffer_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/block_buffer_encoder.c' object='liblzma_la-block_buffer_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-block_buffer_encoder.lo `test -f 'common/block_buffer_encoder.c' || echo '$(srcdir)/'`common/block_buffer_encoder.c - -liblzma_la-block_encoder.lo: common/block_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-block_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-block_encoder.Tpo -c -o liblzma_la-block_encoder.lo `test -f 'common/block_encoder.c' || echo '$(srcdir)/'`common/block_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-block_encoder.Tpo $(DEPDIR)/liblzma_la-block_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/block_encoder.c' object='liblzma_la-block_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-block_encoder.lo `test -f 'common/block_encoder.c' || echo '$(srcdir)/'`common/block_encoder.c - -liblzma_la-block_header_encoder.lo: common/block_header_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-block_header_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-block_header_encoder.Tpo -c -o liblzma_la-block_header_encoder.lo `test -f 'common/block_header_encoder.c' || echo '$(srcdir)/'`common/block_header_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-block_header_encoder.Tpo $(DEPDIR)/liblzma_la-block_header_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/block_header_encoder.c' object='liblzma_la-block_header_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-block_header_encoder.lo `test -f 'common/block_header_encoder.c' || echo '$(srcdir)/'`common/block_header_encoder.c - -liblzma_la-easy_buffer_encoder.lo: common/easy_buffer_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-easy_buffer_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-easy_buffer_encoder.Tpo -c -o liblzma_la-easy_buffer_encoder.lo `test -f 'common/easy_buffer_encoder.c' || echo '$(srcdir)/'`common/easy_buffer_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-easy_buffer_encoder.Tpo $(DEPDIR)/liblzma_la-easy_buffer_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/easy_buffer_encoder.c' object='liblzma_la-easy_buffer_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-easy_buffer_encoder.lo `test -f 'common/easy_buffer_encoder.c' || echo '$(srcdir)/'`common/easy_buffer_encoder.c - -liblzma_la-easy_encoder.lo: common/easy_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-easy_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-easy_encoder.Tpo -c -o liblzma_la-easy_encoder.lo `test -f 'common/easy_encoder.c' || echo '$(srcdir)/'`common/easy_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-easy_encoder.Tpo $(DEPDIR)/liblzma_la-easy_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/easy_encoder.c' object='liblzma_la-easy_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-easy_encoder.lo `test -f 'common/easy_encoder.c' || echo '$(srcdir)/'`common/easy_encoder.c - -liblzma_la-easy_encoder_memusage.lo: common/easy_encoder_memusage.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-easy_encoder_memusage.lo -MD -MP -MF $(DEPDIR)/liblzma_la-easy_encoder_memusage.Tpo -c -o liblzma_la-easy_encoder_memusage.lo `test -f 'common/easy_encoder_memusage.c' || echo '$(srcdir)/'`common/easy_encoder_memusage.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-easy_encoder_memusage.Tpo $(DEPDIR)/liblzma_la-easy_encoder_memusage.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/easy_encoder_memusage.c' object='liblzma_la-easy_encoder_memusage.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-easy_encoder_memusage.lo `test -f 'common/easy_encoder_memusage.c' || echo '$(srcdir)/'`common/easy_encoder_memusage.c - -liblzma_la-filter_buffer_encoder.lo: common/filter_buffer_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_buffer_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_buffer_encoder.Tpo -c -o liblzma_la-filter_buffer_encoder.lo `test -f 'common/filter_buffer_encoder.c' || echo '$(srcdir)/'`common/filter_buffer_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-filter_buffer_encoder.Tpo $(DEPDIR)/liblzma_la-filter_buffer_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/filter_buffer_encoder.c' object='liblzma_la-filter_buffer_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-filter_buffer_encoder.lo `test -f 'common/filter_buffer_encoder.c' || echo '$(srcdir)/'`common/filter_buffer_encoder.c - -liblzma_la-filter_encoder.lo: common/filter_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_encoder.Tpo -c -o liblzma_la-filter_encoder.lo `test -f 'common/filter_encoder.c' || echo '$(srcdir)/'`common/filter_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-filter_encoder.Tpo $(DEPDIR)/liblzma_la-filter_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/filter_encoder.c' object='liblzma_la-filter_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-filter_encoder.lo `test -f 'common/filter_encoder.c' || echo '$(srcdir)/'`common/filter_encoder.c - -liblzma_la-filter_flags_encoder.lo: common/filter_flags_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_flags_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_flags_encoder.Tpo -c -o liblzma_la-filter_flags_encoder.lo `test -f 'common/filter_flags_encoder.c' || echo '$(srcdir)/'`common/filter_flags_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-filter_flags_encoder.Tpo $(DEPDIR)/liblzma_la-filter_flags_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/filter_flags_encoder.c' object='liblzma_la-filter_flags_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-filter_flags_encoder.lo `test -f 'common/filter_flags_encoder.c' || echo '$(srcdir)/'`common/filter_flags_encoder.c - -liblzma_la-index_encoder.lo: common/index_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-index_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-index_encoder.Tpo -c -o liblzma_la-index_encoder.lo `test -f 'common/index_encoder.c' || echo '$(srcdir)/'`common/index_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-index_encoder.Tpo $(DEPDIR)/liblzma_la-index_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/index_encoder.c' object='liblzma_la-index_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-index_encoder.lo `test -f 'common/index_encoder.c' || echo '$(srcdir)/'`common/index_encoder.c - -liblzma_la-stream_buffer_encoder.lo: common/stream_buffer_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_buffer_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_buffer_encoder.Tpo -c -o liblzma_la-stream_buffer_encoder.lo `test -f 'common/stream_buffer_encoder.c' || echo '$(srcdir)/'`common/stream_buffer_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-stream_buffer_encoder.Tpo $(DEPDIR)/liblzma_la-stream_buffer_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/stream_buffer_encoder.c' object='liblzma_la-stream_buffer_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_buffer_encoder.lo `test -f 'common/stream_buffer_encoder.c' || echo '$(srcdir)/'`common/stream_buffer_encoder.c - -liblzma_la-stream_encoder.lo: common/stream_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_encoder.Tpo -c -o liblzma_la-stream_encoder.lo `test -f 'common/stream_encoder.c' || echo '$(srcdir)/'`common/stream_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-stream_encoder.Tpo $(DEPDIR)/liblzma_la-stream_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/stream_encoder.c' object='liblzma_la-stream_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_encoder.lo `test -f 'common/stream_encoder.c' || echo '$(srcdir)/'`common/stream_encoder.c - -liblzma_la-stream_flags_encoder.lo: common/stream_flags_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_flags_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_flags_encoder.Tpo -c -o liblzma_la-stream_flags_encoder.lo `test -f 'common/stream_flags_encoder.c' || echo '$(srcdir)/'`common/stream_flags_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-stream_flags_encoder.Tpo $(DEPDIR)/liblzma_la-stream_flags_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/stream_flags_encoder.c' object='liblzma_la-stream_flags_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_flags_encoder.lo `test -f 'common/stream_flags_encoder.c' || echo '$(srcdir)/'`common/stream_flags_encoder.c - -liblzma_la-vli_encoder.lo: common/vli_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-vli_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-vli_encoder.Tpo -c -o liblzma_la-vli_encoder.lo `test -f 'common/vli_encoder.c' || echo '$(srcdir)/'`common/vli_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-vli_encoder.Tpo $(DEPDIR)/liblzma_la-vli_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/vli_encoder.c' object='liblzma_la-vli_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-vli_encoder.lo `test -f 'common/vli_encoder.c' || echo '$(srcdir)/'`common/vli_encoder.c - -liblzma_la-alone_decoder.lo: common/alone_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-alone_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-alone_decoder.Tpo -c -o liblzma_la-alone_decoder.lo `test -f 'common/alone_decoder.c' || echo '$(srcdir)/'`common/alone_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-alone_decoder.Tpo $(DEPDIR)/liblzma_la-alone_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/alone_decoder.c' object='liblzma_la-alone_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-alone_decoder.lo `test -f 'common/alone_decoder.c' || echo '$(srcdir)/'`common/alone_decoder.c - -liblzma_la-auto_decoder.lo: common/auto_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-auto_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-auto_decoder.Tpo -c -o liblzma_la-auto_decoder.lo `test -f 'common/auto_decoder.c' || echo '$(srcdir)/'`common/auto_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-auto_decoder.Tpo $(DEPDIR)/liblzma_la-auto_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/auto_decoder.c' object='liblzma_la-auto_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-auto_decoder.lo `test -f 'common/auto_decoder.c' || echo '$(srcdir)/'`common/auto_decoder.c - -liblzma_la-block_buffer_decoder.lo: common/block_buffer_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-block_buffer_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-block_buffer_decoder.Tpo -c -o liblzma_la-block_buffer_decoder.lo `test -f 'common/block_buffer_decoder.c' || echo '$(srcdir)/'`common/block_buffer_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-block_buffer_decoder.Tpo $(DEPDIR)/liblzma_la-block_buffer_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/block_buffer_decoder.c' object='liblzma_la-block_buffer_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-block_buffer_decoder.lo `test -f 'common/block_buffer_decoder.c' || echo '$(srcdir)/'`common/block_buffer_decoder.c - -liblzma_la-block_decoder.lo: common/block_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-block_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-block_decoder.Tpo -c -o liblzma_la-block_decoder.lo `test -f 'common/block_decoder.c' || echo '$(srcdir)/'`common/block_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-block_decoder.Tpo $(DEPDIR)/liblzma_la-block_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/block_decoder.c' object='liblzma_la-block_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-block_decoder.lo `test -f 'common/block_decoder.c' || echo '$(srcdir)/'`common/block_decoder.c - -liblzma_la-block_header_decoder.lo: common/block_header_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-block_header_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-block_header_decoder.Tpo -c -o liblzma_la-block_header_decoder.lo `test -f 'common/block_header_decoder.c' || echo '$(srcdir)/'`common/block_header_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-block_header_decoder.Tpo $(DEPDIR)/liblzma_la-block_header_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/block_header_decoder.c' object='liblzma_la-block_header_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-block_header_decoder.lo `test -f 'common/block_header_decoder.c' || echo '$(srcdir)/'`common/block_header_decoder.c - -liblzma_la-easy_decoder_memusage.lo: common/easy_decoder_memusage.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-easy_decoder_memusage.lo -MD -MP -MF $(DEPDIR)/liblzma_la-easy_decoder_memusage.Tpo -c -o liblzma_la-easy_decoder_memusage.lo `test -f 'common/easy_decoder_memusage.c' || echo '$(srcdir)/'`common/easy_decoder_memusage.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-easy_decoder_memusage.Tpo $(DEPDIR)/liblzma_la-easy_decoder_memusage.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/easy_decoder_memusage.c' object='liblzma_la-easy_decoder_memusage.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-easy_decoder_memusage.lo `test -f 'common/easy_decoder_memusage.c' || echo '$(srcdir)/'`common/easy_decoder_memusage.c - -liblzma_la-filter_buffer_decoder.lo: common/filter_buffer_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_buffer_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_buffer_decoder.Tpo -c -o liblzma_la-filter_buffer_decoder.lo `test -f 'common/filter_buffer_decoder.c' || echo '$(srcdir)/'`common/filter_buffer_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-filter_buffer_decoder.Tpo $(DEPDIR)/liblzma_la-filter_buffer_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/filter_buffer_decoder.c' object='liblzma_la-filter_buffer_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-filter_buffer_decoder.lo `test -f 'common/filter_buffer_decoder.c' || echo '$(srcdir)/'`common/filter_buffer_decoder.c - -liblzma_la-filter_decoder.lo: common/filter_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_decoder.Tpo -c -o liblzma_la-filter_decoder.lo `test -f 'common/filter_decoder.c' || echo '$(srcdir)/'`common/filter_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-filter_decoder.Tpo $(DEPDIR)/liblzma_la-filter_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/filter_decoder.c' object='liblzma_la-filter_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-filter_decoder.lo `test -f 'common/filter_decoder.c' || echo '$(srcdir)/'`common/filter_decoder.c - -liblzma_la-filter_flags_decoder.lo: common/filter_flags_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-filter_flags_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-filter_flags_decoder.Tpo -c -o liblzma_la-filter_flags_decoder.lo `test -f 'common/filter_flags_decoder.c' || echo '$(srcdir)/'`common/filter_flags_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-filter_flags_decoder.Tpo $(DEPDIR)/liblzma_la-filter_flags_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/filter_flags_decoder.c' object='liblzma_la-filter_flags_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-filter_flags_decoder.lo `test -f 'common/filter_flags_decoder.c' || echo '$(srcdir)/'`common/filter_flags_decoder.c - -liblzma_la-index_decoder.lo: common/index_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-index_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-index_decoder.Tpo -c -o liblzma_la-index_decoder.lo `test -f 'common/index_decoder.c' || echo '$(srcdir)/'`common/index_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-index_decoder.Tpo $(DEPDIR)/liblzma_la-index_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/index_decoder.c' object='liblzma_la-index_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-index_decoder.lo `test -f 'common/index_decoder.c' || echo '$(srcdir)/'`common/index_decoder.c - -liblzma_la-index_hash.lo: common/index_hash.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-index_hash.lo -MD -MP -MF $(DEPDIR)/liblzma_la-index_hash.Tpo -c -o liblzma_la-index_hash.lo `test -f 'common/index_hash.c' || echo '$(srcdir)/'`common/index_hash.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-index_hash.Tpo $(DEPDIR)/liblzma_la-index_hash.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/index_hash.c' object='liblzma_la-index_hash.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-index_hash.lo `test -f 'common/index_hash.c' || echo '$(srcdir)/'`common/index_hash.c - -liblzma_la-stream_buffer_decoder.lo: common/stream_buffer_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_buffer_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_buffer_decoder.Tpo -c -o liblzma_la-stream_buffer_decoder.lo `test -f 'common/stream_buffer_decoder.c' || echo '$(srcdir)/'`common/stream_buffer_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-stream_buffer_decoder.Tpo $(DEPDIR)/liblzma_la-stream_buffer_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/stream_buffer_decoder.c' object='liblzma_la-stream_buffer_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_buffer_decoder.lo `test -f 'common/stream_buffer_decoder.c' || echo '$(srcdir)/'`common/stream_buffer_decoder.c - -liblzma_la-stream_decoder.lo: common/stream_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_decoder.Tpo -c -o liblzma_la-stream_decoder.lo `test -f 'common/stream_decoder.c' || echo '$(srcdir)/'`common/stream_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-stream_decoder.Tpo $(DEPDIR)/liblzma_la-stream_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/stream_decoder.c' object='liblzma_la-stream_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_decoder.lo `test -f 'common/stream_decoder.c' || echo '$(srcdir)/'`common/stream_decoder.c - -liblzma_la-stream_flags_decoder.lo: common/stream_flags_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-stream_flags_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-stream_flags_decoder.Tpo -c -o liblzma_la-stream_flags_decoder.lo `test -f 'common/stream_flags_decoder.c' || echo '$(srcdir)/'`common/stream_flags_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-stream_flags_decoder.Tpo $(DEPDIR)/liblzma_la-stream_flags_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/stream_flags_decoder.c' object='liblzma_la-stream_flags_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-stream_flags_decoder.lo `test -f 'common/stream_flags_decoder.c' || echo '$(srcdir)/'`common/stream_flags_decoder.c - -liblzma_la-vli_decoder.lo: common/vli_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-vli_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-vli_decoder.Tpo -c -o liblzma_la-vli_decoder.lo `test -f 'common/vli_decoder.c' || echo '$(srcdir)/'`common/vli_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-vli_decoder.Tpo $(DEPDIR)/liblzma_la-vli_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/vli_decoder.c' object='liblzma_la-vli_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-vli_decoder.lo `test -f 'common/vli_decoder.c' || echo '$(srcdir)/'`common/vli_decoder.c - -liblzma_la-check.lo: check/check.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-check.lo -MD -MP -MF $(DEPDIR)/liblzma_la-check.Tpo -c -o liblzma_la-check.lo `test -f 'check/check.c' || echo '$(srcdir)/'`check/check.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-check.Tpo $(DEPDIR)/liblzma_la-check.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/check.c' object='liblzma_la-check.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-check.lo `test -f 'check/check.c' || echo '$(srcdir)/'`check/check.c - -liblzma_la-crc32_small.lo: check/crc32_small.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-crc32_small.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc32_small.Tpo -c -o liblzma_la-crc32_small.lo `test -f 'check/crc32_small.c' || echo '$(srcdir)/'`check/crc32_small.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc32_small.Tpo $(DEPDIR)/liblzma_la-crc32_small.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/crc32_small.c' object='liblzma_la-crc32_small.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-crc32_small.lo `test -f 'check/crc32_small.c' || echo '$(srcdir)/'`check/crc32_small.c - -liblzma_la-crc32_table.lo: check/crc32_table.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-crc32_table.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc32_table.Tpo -c -o liblzma_la-crc32_table.lo `test -f 'check/crc32_table.c' || echo '$(srcdir)/'`check/crc32_table.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc32_table.Tpo $(DEPDIR)/liblzma_la-crc32_table.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/crc32_table.c' object='liblzma_la-crc32_table.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-crc32_table.lo `test -f 'check/crc32_table.c' || echo '$(srcdir)/'`check/crc32_table.c - -liblzma_la-crc32_fast.lo: check/crc32_fast.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-crc32_fast.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc32_fast.Tpo -c -o liblzma_la-crc32_fast.lo `test -f 'check/crc32_fast.c' || echo '$(srcdir)/'`check/crc32_fast.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc32_fast.Tpo $(DEPDIR)/liblzma_la-crc32_fast.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/crc32_fast.c' object='liblzma_la-crc32_fast.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-crc32_fast.lo `test -f 'check/crc32_fast.c' || echo '$(srcdir)/'`check/crc32_fast.c - -liblzma_la-crc64_small.lo: check/crc64_small.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-crc64_small.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc64_small.Tpo -c -o liblzma_la-crc64_small.lo `test -f 'check/crc64_small.c' || echo '$(srcdir)/'`check/crc64_small.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc64_small.Tpo $(DEPDIR)/liblzma_la-crc64_small.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/crc64_small.c' object='liblzma_la-crc64_small.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-crc64_small.lo `test -f 'check/crc64_small.c' || echo '$(srcdir)/'`check/crc64_small.c - -liblzma_la-crc64_table.lo: check/crc64_table.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-crc64_table.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc64_table.Tpo -c -o liblzma_la-crc64_table.lo `test -f 'check/crc64_table.c' || echo '$(srcdir)/'`check/crc64_table.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc64_table.Tpo $(DEPDIR)/liblzma_la-crc64_table.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/crc64_table.c' object='liblzma_la-crc64_table.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-crc64_table.lo `test -f 'check/crc64_table.c' || echo '$(srcdir)/'`check/crc64_table.c - -liblzma_la-crc64_fast.lo: check/crc64_fast.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-crc64_fast.lo -MD -MP -MF $(DEPDIR)/liblzma_la-crc64_fast.Tpo -c -o liblzma_la-crc64_fast.lo `test -f 'check/crc64_fast.c' || echo '$(srcdir)/'`check/crc64_fast.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-crc64_fast.Tpo $(DEPDIR)/liblzma_la-crc64_fast.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/crc64_fast.c' object='liblzma_la-crc64_fast.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-crc64_fast.lo `test -f 'check/crc64_fast.c' || echo '$(srcdir)/'`check/crc64_fast.c - -liblzma_la-sha256.lo: check/sha256.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-sha256.lo -MD -MP -MF $(DEPDIR)/liblzma_la-sha256.Tpo -c -o liblzma_la-sha256.lo `test -f 'check/sha256.c' || echo '$(srcdir)/'`check/sha256.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-sha256.Tpo $(DEPDIR)/liblzma_la-sha256.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check/sha256.c' object='liblzma_la-sha256.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-sha256.lo `test -f 'check/sha256.c' || echo '$(srcdir)/'`check/sha256.c - -liblzma_la-lz_encoder.lo: lz/lz_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lz_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lz_encoder.Tpo -c -o liblzma_la-lz_encoder.lo `test -f 'lz/lz_encoder.c' || echo '$(srcdir)/'`lz/lz_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lz_encoder.Tpo $(DEPDIR)/liblzma_la-lz_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lz/lz_encoder.c' object='liblzma_la-lz_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lz_encoder.lo `test -f 'lz/lz_encoder.c' || echo '$(srcdir)/'`lz/lz_encoder.c - -liblzma_la-lz_encoder_mf.lo: lz/lz_encoder_mf.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lz_encoder_mf.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lz_encoder_mf.Tpo -c -o liblzma_la-lz_encoder_mf.lo `test -f 'lz/lz_encoder_mf.c' || echo '$(srcdir)/'`lz/lz_encoder_mf.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lz_encoder_mf.Tpo $(DEPDIR)/liblzma_la-lz_encoder_mf.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lz/lz_encoder_mf.c' object='liblzma_la-lz_encoder_mf.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lz_encoder_mf.lo `test -f 'lz/lz_encoder_mf.c' || echo '$(srcdir)/'`lz/lz_encoder_mf.c - -liblzma_la-lz_decoder.lo: lz/lz_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lz_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lz_decoder.Tpo -c -o liblzma_la-lz_decoder.lo `test -f 'lz/lz_decoder.c' || echo '$(srcdir)/'`lz/lz_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lz_decoder.Tpo $(DEPDIR)/liblzma_la-lz_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lz/lz_decoder.c' object='liblzma_la-lz_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lz_decoder.lo `test -f 'lz/lz_decoder.c' || echo '$(srcdir)/'`lz/lz_decoder.c - -liblzma_la-lzma_encoder.lo: lzma/lzma_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzma_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzma_encoder.Tpo -c -o liblzma_la-lzma_encoder.lo `test -f 'lzma/lzma_encoder.c' || echo '$(srcdir)/'`lzma/lzma_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lzma_encoder.Tpo $(DEPDIR)/liblzma_la-lzma_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/lzma_encoder.c' object='liblzma_la-lzma_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzma_encoder.lo `test -f 'lzma/lzma_encoder.c' || echo '$(srcdir)/'`lzma/lzma_encoder.c - -liblzma_la-lzma_encoder_presets.lo: lzma/lzma_encoder_presets.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzma_encoder_presets.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzma_encoder_presets.Tpo -c -o liblzma_la-lzma_encoder_presets.lo `test -f 'lzma/lzma_encoder_presets.c' || echo '$(srcdir)/'`lzma/lzma_encoder_presets.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lzma_encoder_presets.Tpo $(DEPDIR)/liblzma_la-lzma_encoder_presets.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/lzma_encoder_presets.c' object='liblzma_la-lzma_encoder_presets.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzma_encoder_presets.lo `test -f 'lzma/lzma_encoder_presets.c' || echo '$(srcdir)/'`lzma/lzma_encoder_presets.c - -liblzma_la-lzma_encoder_optimum_fast.lo: lzma/lzma_encoder_optimum_fast.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzma_encoder_optimum_fast.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzma_encoder_optimum_fast.Tpo -c -o liblzma_la-lzma_encoder_optimum_fast.lo `test -f 'lzma/lzma_encoder_optimum_fast.c' || echo '$(srcdir)/'`lzma/lzma_encoder_optimum_fast.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lzma_encoder_optimum_fast.Tpo $(DEPDIR)/liblzma_la-lzma_encoder_optimum_fast.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/lzma_encoder_optimum_fast.c' object='liblzma_la-lzma_encoder_optimum_fast.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzma_encoder_optimum_fast.lo `test -f 'lzma/lzma_encoder_optimum_fast.c' || echo '$(srcdir)/'`lzma/lzma_encoder_optimum_fast.c - -liblzma_la-lzma_encoder_optimum_normal.lo: lzma/lzma_encoder_optimum_normal.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzma_encoder_optimum_normal.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzma_encoder_optimum_normal.Tpo -c -o liblzma_la-lzma_encoder_optimum_normal.lo `test -f 'lzma/lzma_encoder_optimum_normal.c' || echo '$(srcdir)/'`lzma/lzma_encoder_optimum_normal.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lzma_encoder_optimum_normal.Tpo $(DEPDIR)/liblzma_la-lzma_encoder_optimum_normal.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/lzma_encoder_optimum_normal.c' object='liblzma_la-lzma_encoder_optimum_normal.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzma_encoder_optimum_normal.lo `test -f 'lzma/lzma_encoder_optimum_normal.c' || echo '$(srcdir)/'`lzma/lzma_encoder_optimum_normal.c - -liblzma_la-fastpos_table.lo: lzma/fastpos_table.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-fastpos_table.lo -MD -MP -MF $(DEPDIR)/liblzma_la-fastpos_table.Tpo -c -o liblzma_la-fastpos_table.lo `test -f 'lzma/fastpos_table.c' || echo '$(srcdir)/'`lzma/fastpos_table.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-fastpos_table.Tpo $(DEPDIR)/liblzma_la-fastpos_table.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/fastpos_table.c' object='liblzma_la-fastpos_table.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-fastpos_table.lo `test -f 'lzma/fastpos_table.c' || echo '$(srcdir)/'`lzma/fastpos_table.c - -liblzma_la-lzma_decoder.lo: lzma/lzma_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzma_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzma_decoder.Tpo -c -o liblzma_la-lzma_decoder.lo `test -f 'lzma/lzma_decoder.c' || echo '$(srcdir)/'`lzma/lzma_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lzma_decoder.Tpo $(DEPDIR)/liblzma_la-lzma_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/lzma_decoder.c' object='liblzma_la-lzma_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzma_decoder.lo `test -f 'lzma/lzma_decoder.c' || echo '$(srcdir)/'`lzma/lzma_decoder.c - -liblzma_la-lzma2_encoder.lo: lzma/lzma2_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzma2_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzma2_encoder.Tpo -c -o liblzma_la-lzma2_encoder.lo `test -f 'lzma/lzma2_encoder.c' || echo '$(srcdir)/'`lzma/lzma2_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lzma2_encoder.Tpo $(DEPDIR)/liblzma_la-lzma2_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/lzma2_encoder.c' object='liblzma_la-lzma2_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzma2_encoder.lo `test -f 'lzma/lzma2_encoder.c' || echo '$(srcdir)/'`lzma/lzma2_encoder.c - -liblzma_la-lzma2_decoder.lo: lzma/lzma2_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-lzma2_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-lzma2_decoder.Tpo -c -o liblzma_la-lzma2_decoder.lo `test -f 'lzma/lzma2_decoder.c' || echo '$(srcdir)/'`lzma/lzma2_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-lzma2_decoder.Tpo $(DEPDIR)/liblzma_la-lzma2_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzma/lzma2_decoder.c' object='liblzma_la-lzma2_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-lzma2_decoder.lo `test -f 'lzma/lzma2_decoder.c' || echo '$(srcdir)/'`lzma/lzma2_decoder.c - -liblzma_la-price_table.lo: rangecoder/price_table.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-price_table.lo -MD -MP -MF $(DEPDIR)/liblzma_la-price_table.Tpo -c -o liblzma_la-price_table.lo `test -f 'rangecoder/price_table.c' || echo '$(srcdir)/'`rangecoder/price_table.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-price_table.Tpo $(DEPDIR)/liblzma_la-price_table.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rangecoder/price_table.c' object='liblzma_la-price_table.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-price_table.lo `test -f 'rangecoder/price_table.c' || echo '$(srcdir)/'`rangecoder/price_table.c - -liblzma_la-subblock_encoder.lo: subblock/subblock_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-subblock_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-subblock_encoder.Tpo -c -o liblzma_la-subblock_encoder.lo `test -f 'subblock/subblock_encoder.c' || echo '$(srcdir)/'`subblock/subblock_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-subblock_encoder.Tpo $(DEPDIR)/liblzma_la-subblock_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='subblock/subblock_encoder.c' object='liblzma_la-subblock_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-subblock_encoder.lo `test -f 'subblock/subblock_encoder.c' || echo '$(srcdir)/'`subblock/subblock_encoder.c - -liblzma_la-subblock_decoder.lo: subblock/subblock_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-subblock_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-subblock_decoder.Tpo -c -o liblzma_la-subblock_decoder.lo `test -f 'subblock/subblock_decoder.c' || echo '$(srcdir)/'`subblock/subblock_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-subblock_decoder.Tpo $(DEPDIR)/liblzma_la-subblock_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='subblock/subblock_decoder.c' object='liblzma_la-subblock_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-subblock_decoder.lo `test -f 'subblock/subblock_decoder.c' || echo '$(srcdir)/'`subblock/subblock_decoder.c - -liblzma_la-subblock_decoder_helper.lo: subblock/subblock_decoder_helper.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-subblock_decoder_helper.lo -MD -MP -MF $(DEPDIR)/liblzma_la-subblock_decoder_helper.Tpo -c -o liblzma_la-subblock_decoder_helper.lo `test -f 'subblock/subblock_decoder_helper.c' || echo '$(srcdir)/'`subblock/subblock_decoder_helper.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-subblock_decoder_helper.Tpo $(DEPDIR)/liblzma_la-subblock_decoder_helper.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='subblock/subblock_decoder_helper.c' object='liblzma_la-subblock_decoder_helper.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-subblock_decoder_helper.lo `test -f 'subblock/subblock_decoder_helper.c' || echo '$(srcdir)/'`subblock/subblock_decoder_helper.c - -liblzma_la-delta_common.lo: delta/delta_common.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-delta_common.lo -MD -MP -MF $(DEPDIR)/liblzma_la-delta_common.Tpo -c -o liblzma_la-delta_common.lo `test -f 'delta/delta_common.c' || echo '$(srcdir)/'`delta/delta_common.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-delta_common.Tpo $(DEPDIR)/liblzma_la-delta_common.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='delta/delta_common.c' object='liblzma_la-delta_common.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-delta_common.lo `test -f 'delta/delta_common.c' || echo '$(srcdir)/'`delta/delta_common.c - -liblzma_la-delta_encoder.lo: delta/delta_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-delta_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-delta_encoder.Tpo -c -o liblzma_la-delta_encoder.lo `test -f 'delta/delta_encoder.c' || echo '$(srcdir)/'`delta/delta_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-delta_encoder.Tpo $(DEPDIR)/liblzma_la-delta_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='delta/delta_encoder.c' object='liblzma_la-delta_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-delta_encoder.lo `test -f 'delta/delta_encoder.c' || echo '$(srcdir)/'`delta/delta_encoder.c - -liblzma_la-delta_decoder.lo: delta/delta_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-delta_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-delta_decoder.Tpo -c -o liblzma_la-delta_decoder.lo `test -f 'delta/delta_decoder.c' || echo '$(srcdir)/'`delta/delta_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-delta_decoder.Tpo $(DEPDIR)/liblzma_la-delta_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='delta/delta_decoder.c' object='liblzma_la-delta_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-delta_decoder.lo `test -f 'delta/delta_decoder.c' || echo '$(srcdir)/'`delta/delta_decoder.c - -liblzma_la-simple_coder.lo: simple/simple_coder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-simple_coder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-simple_coder.Tpo -c -o liblzma_la-simple_coder.lo `test -f 'simple/simple_coder.c' || echo '$(srcdir)/'`simple/simple_coder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-simple_coder.Tpo $(DEPDIR)/liblzma_la-simple_coder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/simple_coder.c' object='liblzma_la-simple_coder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-simple_coder.lo `test -f 'simple/simple_coder.c' || echo '$(srcdir)/'`simple/simple_coder.c - -liblzma_la-simple_encoder.lo: simple/simple_encoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-simple_encoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-simple_encoder.Tpo -c -o liblzma_la-simple_encoder.lo `test -f 'simple/simple_encoder.c' || echo '$(srcdir)/'`simple/simple_encoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-simple_encoder.Tpo $(DEPDIR)/liblzma_la-simple_encoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/simple_encoder.c' object='liblzma_la-simple_encoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-simple_encoder.lo `test -f 'simple/simple_encoder.c' || echo '$(srcdir)/'`simple/simple_encoder.c - -liblzma_la-simple_decoder.lo: simple/simple_decoder.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-simple_decoder.lo -MD -MP -MF $(DEPDIR)/liblzma_la-simple_decoder.Tpo -c -o liblzma_la-simple_decoder.lo `test -f 'simple/simple_decoder.c' || echo '$(srcdir)/'`simple/simple_decoder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-simple_decoder.Tpo $(DEPDIR)/liblzma_la-simple_decoder.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/simple_decoder.c' object='liblzma_la-simple_decoder.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-simple_decoder.lo `test -f 'simple/simple_decoder.c' || echo '$(srcdir)/'`simple/simple_decoder.c - -liblzma_la-x86.lo: simple/x86.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-x86.lo -MD -MP -MF $(DEPDIR)/liblzma_la-x86.Tpo -c -o liblzma_la-x86.lo `test -f 'simple/x86.c' || echo '$(srcdir)/'`simple/x86.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-x86.Tpo $(DEPDIR)/liblzma_la-x86.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/x86.c' object='liblzma_la-x86.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-x86.lo `test -f 'simple/x86.c' || echo '$(srcdir)/'`simple/x86.c - -liblzma_la-powerpc.lo: simple/powerpc.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-powerpc.lo -MD -MP -MF $(DEPDIR)/liblzma_la-powerpc.Tpo -c -o liblzma_la-powerpc.lo `test -f 'simple/powerpc.c' || echo '$(srcdir)/'`simple/powerpc.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-powerpc.Tpo $(DEPDIR)/liblzma_la-powerpc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/powerpc.c' object='liblzma_la-powerpc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-powerpc.lo `test -f 'simple/powerpc.c' || echo '$(srcdir)/'`simple/powerpc.c - -liblzma_la-ia64.lo: simple/ia64.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-ia64.lo -MD -MP -MF $(DEPDIR)/liblzma_la-ia64.Tpo -c -o liblzma_la-ia64.lo `test -f 'simple/ia64.c' || echo '$(srcdir)/'`simple/ia64.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-ia64.Tpo $(DEPDIR)/liblzma_la-ia64.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/ia64.c' object='liblzma_la-ia64.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-ia64.lo `test -f 'simple/ia64.c' || echo '$(srcdir)/'`simple/ia64.c - -liblzma_la-arm.lo: simple/arm.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-arm.lo -MD -MP -MF $(DEPDIR)/liblzma_la-arm.Tpo -c -o liblzma_la-arm.lo `test -f 'simple/arm.c' || echo '$(srcdir)/'`simple/arm.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-arm.Tpo $(DEPDIR)/liblzma_la-arm.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/arm.c' object='liblzma_la-arm.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-arm.lo `test -f 'simple/arm.c' || echo '$(srcdir)/'`simple/arm.c - -liblzma_la-armthumb.lo: simple/armthumb.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-armthumb.lo -MD -MP -MF $(DEPDIR)/liblzma_la-armthumb.Tpo -c -o liblzma_la-armthumb.lo `test -f 'simple/armthumb.c' || echo '$(srcdir)/'`simple/armthumb.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-armthumb.Tpo $(DEPDIR)/liblzma_la-armthumb.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/armthumb.c' object='liblzma_la-armthumb.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-armthumb.lo `test -f 'simple/armthumb.c' || echo '$(srcdir)/'`simple/armthumb.c - -liblzma_la-sparc.lo: simple/sparc.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT liblzma_la-sparc.lo -MD -MP -MF $(DEPDIR)/liblzma_la-sparc.Tpo -c -o liblzma_la-sparc.lo `test -f 'simple/sparc.c' || echo '$(srcdir)/'`simple/sparc.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/liblzma_la-sparc.Tpo $(DEPDIR)/liblzma_la-sparc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='simple/sparc.c' object='liblzma_la-sparc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblzma_la-sparc.lo `test -f 'simple/sparc.c' || echo '$(srcdir)/'`simple/sparc.c - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-docDATA: $(doc_DATA) - @$(NORMAL_INSTALL) - test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)" - @list='$(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-docDATA: - @$(NORMAL_UNINSTALL) - @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(docdir)" && rm -f $$files -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || 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)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - 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; }; }'`; \ - 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: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - 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; }; }'`; \ - 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 - -distdir: $(DISTFILES) - @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 - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile $(LTLIBRARIES) $(DATA) -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(pkgconfigdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -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-recursive - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: install-docDATA install-pkgconfigDATA - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-docDATA uninstall-libLTLIBRARIES \ - uninstall-pkgconfigDATA - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ - install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ - distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-docDATA install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-libLTLIBRARIES \ - install-man install-pdf install-pdf-am install-pkgconfigDATA \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-docDATA \ - uninstall-libLTLIBRARIES uninstall-pkgconfigDATA - - -# Windows resource compiler support. libtool knows what to do with .rc -# files, but Automake (<= 1.11 at least) doesn't know. -# -# We want the resource file only in shared liblzma. To avoid linking it into -# static liblzma, we overwrite the static object file with an object file -# compiled from empty input. Note that GNU-specific features are OK here, -# because on Windows we are compiled with the GNU toolchain. -.rc.lo: - $(LIBTOOL) --mode=compile $(RC) $(DEFS) $(DEFAULT_INCLUDES) \ - $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) \ - -i $< -o $@ - echo > empty.c - $(COMPILE) -c empty.c -o $(*D)/$(*F).o - -# Remove ordinals from the generated .def file. People must link by name, -# not by ordinal, because no one is going to track the ordinal numbers. -liblzma.def: liblzma.la liblzma.def.in - sed 's/ \+@ *[0-9]\+//' liblzma.def.in > liblzma.def - -# Creating liblzma.def.in is a side effect of linking the library. -liblzma.def.in: liblzma.la - -# 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/Build/source/utils/xz-4.999.9beta/src/liblzma/api/Makefile.am b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/Makefile.am deleted file mode 100644 index 0992d221044..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/Makefile.am +++ /dev/null @@ -1,23 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -nobase_include_HEADERS = \ - lzma.h \ - lzma/base.h \ - lzma/bcj.h \ - lzma/block.h \ - lzma/check.h \ - lzma/container.h \ - lzma/delta.h \ - lzma/filter.h \ - lzma/index.h \ - lzma/index_hash.h \ - lzma/lzma.h \ - lzma/stream_flags.h \ - lzma/subblock.h \ - lzma/version.h \ - lzma/vli.h diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/Makefile.in b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/Makefile.in deleted file mode 100644 index f4f9a3e7302..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/Makefile.in +++ /dev/null @@ -1,512 +0,0 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ -subdir = src/liblzma/api -DIST_COMMON = $(nobase_include_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ - $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ - $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ - $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ - $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -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__installdirs = "$(DESTDIR)$(includedir)" -HEADERS = $(nobase_include_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ -DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GETOPT_H = @GETOPT_H@ -GMSGFMT = @GMSGFMT@ -GMSGFMT_015 = @GMSGFMT_015@ -GREP = @GREP@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTLLIBS = @INTLLIBS@ -INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBICONV = @LIBICONV@ -LIBINTL = @LIBINTL@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBINTL = @LTLIBINTL@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -MSGFMT = @MSGFMT@ -MSGFMT_015 = @MSGFMT_015@ -MSGMERGE = @MSGMERGE@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POSIX_SHELL = @POSIX_SHELL@ -POSUB = @POSUB@ -PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -RC = @RC@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ -STATIC_LDFLAGS = @STATIC_LDFLAGS@ -STRIP = @STRIP@ -USE_NLS = @USE_NLS@ -VERSION = @VERSION@ -XGETTEXT = @XGETTEXT@ -XGETTEXT_015 = @XGETTEXT_015@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -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@ -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@ -lt_ECHO = @lt_ECHO@ -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@ -xz = @xz@ -nobase_include_HEADERS = \ - lzma.h \ - lzma/base.h \ - lzma/bcj.h \ - lzma/block.h \ - lzma/check.h \ - lzma/container.h \ - lzma/delta.h \ - lzma/filter.h \ - lzma/index.h \ - lzma/index_hash.h \ - lzma/lzma.h \ - lzma/stream_flags.h \ - lzma/subblock.h \ - lzma/version.h \ - lzma/vli.h - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/liblzma/api/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/liblzma/api/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-nobase_includeHEADERS: $(nobase_include_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" - @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \ - $(am__nobase_list) | while read dir files; do \ - xfiles=; for file in $$files; do \ - if test -f "$$file"; then xfiles="$$xfiles $$file"; \ - else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ - test -z "$$xfiles" || { \ - test "x$$dir" = x. || { \ - echo "$(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \ - $(MKDIR_P) "$(DESTDIR)$(includedir)/$$dir"; }; \ - echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'"; \ - $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(includedir)/$$dir" || exit $$?; }; \ - done - -uninstall-nobase_includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \ - $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(includedir)" && rm -f $$files - -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) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - 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; }; }'`; \ - 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) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - 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; }; }'`; \ - 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 - -distdir: $(DISTFILES) - @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 -check-am: all-am -check: check-am -all-am: Makefile $(HEADERS) -installdirs: - for dir in "$(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: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -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-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-nobase_includeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -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 Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-nobase_includeHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool ctags distclean distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-nobase_includeHEADERS \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-nobase_includeHEADERS - - -# 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/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma.h deleted file mode 100644 index 44de60a16f5..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma.h +++ /dev/null @@ -1,321 +0,0 @@ -/** - * \file api/lzma.h - * \brief The public API of liblzma data compression library - * - * liblzma is a public domain general-purpose data compression library with - * a zlib-like API. The native file format is .xz, but also the old .lzma - * format and raw (no headers) streams are supported. Multiple compression - * algorithms (filters) are supported. Currently LZMA2 is the primary filter. - * - * liblzma is part of XZ Utils . XZ Utils includes - * a gzip-like command line tool named xz and some other tools. XZ Utils - * is developed and maintained by Lasse Collin. - * - * Major parts of liblzma are based on Igor Pavlov's public domain LZMA SDK - * . - * - * The SHA-256 implementation is based on the public domain code found from - * 7-Zip , which has a modified version of the public - * domain SHA-256 code found from Crypto++ . - * The SHA-256 code in Crypto++ was written by Kevin Springle and Wei Dai. - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - */ - -#ifndef LZMA_H -#define LZMA_H - -/***************************** - * Required standard headers * - *****************************/ - -/* - * liblzma API headers need some standard types and macros. To allow - * including lzma.h without requiring the application to include other - * headers first, lzma.h includes the required standard headers unless - * they already seem to be included already or if LZMA_MANUAL_HEADERS - * has been defined. - * - * Here's what types and macros are needed and from which headers: - * - stddef.h: size_t, NULL - * - stdint.h: uint8_t, uint32_t, uint64_t, UINT32_C(n), uint64_C(n), - * UINT32_MAX, UINT64_MAX - * - * However, inttypes.h is a little more portable than stdint.h, although - * inttypes.h declares some unneeded things compared to plain stdint.h. - * - * The hacks below aren't perfect, specifically they assume that inttypes.h - * exists and that it typedefs at least uint8_t, uint32_t, and uint64_t, - * and that, in case of incomplete inttypes.h, unsigned int is 32-bit. - * If the application already takes care of setting up all the types and - * macros properly (for example by using gnulib's stdint.h or inttypes.h), - * we try to detect that the macros are already defined and don't include - * inttypes.h here again. However, you may define LZMA_MANUAL_HEADERS to - * force this file to never include any system headers. - * - * Some could argue that liblzma API should provide all the required types, - * for example lzma_uint64, LZMA_UINT64_C(n), and LZMA_UINT64_MAX. This was - * seen unnecessary mess, since most systems already provide all the necessary - * types and macros in the standard headers. - * - * Note that liblzma API still has lzma_bool, because using stdbool.h would - * break C89 and C++ programs on many systems. sizeof(bool) in C99 isn't - * necessarily the same as sizeof(bool) in C++. - */ - -#ifndef LZMA_MANUAL_HEADERS - /* - * I suppose this works portably also in C++. Note that in C++, - * we need to get size_t into the global namespace. - */ -# include - - /* - * Skip inttypes.h if we already have all the required macros. If we - * have the macros, we assume that we have the matching typedefs too. - */ -# if !defined(UINT32_C) || !defined(UINT64_C) \ - || !defined(UINT32_MAX) || !defined(UINT64_MAX) - /* - * MSVC has no C99 support, and thus it cannot be used to - * compile liblzma. The liblzma API has to still be usable - * from MSVC, so we need to define the required standard - * integer types here. - */ -# if defined(_WIN32) && defined(_MSC_VER) - typedef unsigned __int8 uint8_t; - typedef unsigned __int32 uint32_t; - typedef unsigned __int64 uint64_t; -# else - /* Use the standard inttypes.h. */ -# ifdef __cplusplus - /* - * C99 sections 7.18.2 and 7.18.4 specify that - * in C++ implementations define the limit - * and constant macros only if specifically - * requested. Note that if you want the - * format macros (PRIu64 etc.) too, you need - * to define __STDC_FORMAT_MACROS before - * including lzma.h, since re-including - * inttypes.h with __STDC_FORMAT_MACROS - * defined doesn't necessarily work. - */ -# ifndef __STDC_LIMIT_MACROS -# define __STDC_LIMIT_MACROS 1 -# endif -# ifndef __STDC_CONSTANT_MACROS -# define __STDC_CONSTANT_MACROS 1 -# endif -# endif - -# include -# endif - - /* - * Some old systems have only the typedefs in inttypes.h, and - * lack all the macros. For those systems, we need a few more - * hacks. We assume that unsigned int is 32-bit and unsigned - * long is either 32-bit or 64-bit. If these hacks aren't - * enough, the application has to setup the types manually - * before including lzma.h. - */ -# ifndef UINT32_C -# if defined(_WIN32) && defined(_MSC_VER) -# define UINT32_C(n) n ## UI32 -# else -# define UINT32_C(n) n ## U -# endif -# endif - -# ifndef UINT64_C -# if defined(_WIN32) && defined(_MSC_VER) -# define UINT64_C(n) n ## UI64 -# else - /* Get ULONG_MAX. */ -# include -# if ULONG_MAX == 4294967295UL -# define UINT64_C(n) n ## ULL -# else -# define UINT64_C(n) n ## UL -# endif -# endif -# endif - -# ifndef UINT32_MAX -# define UINT32_MAX (UINT32_C(4294967295)) -# endif - -# ifndef UINT64_MAX -# define UINT64_MAX (UINT64_C(18446744073709551615)) -# endif -# endif -#endif /* ifdef LZMA_MANUAL_HEADERS */ - - -/****************** - * LZMA_API macro * - ******************/ - -/* - * Some systems require (or at least recommend) that the functions and - * function pointers are declared specially in the headers. LZMA_API_IMPORT - * is for importing symbols and LZMA_API_CALL is to specify calling - * convention. - * - * By default it is assumed that the application will link dynamically - * against liblzma. #define LZMA_API_STATIC in your application if you - * want to link against static liblzma. If you don't care about portability - * to operating systems like Windows, or at least don't care about linking - * against static liblzma on them, don't worry about LZMA_API_STATIC. That - * is, most developers will never need to use LZMA_API_STATIC. - * - * Cygwin is a special case on Windows. We rely on GCC doing the right thing - * and thus don't use dllimport and don't specify the calling convention. - */ -#ifndef LZMA_API_IMPORT -# if !defined(LZMA_API_STATIC) && defined(_WIN32) && !defined(__CYGWIN__) -# define LZMA_API_IMPORT __declspec(dllimport) -# else -# define LZMA_API_IMPORT -# endif -#endif - -#ifndef LZMA_API_CALL -# if defined(_WIN32) && !defined(__CYGWIN__) -# define LZMA_API_CALL __cdecl -# else -# define LZMA_API_CALL -# endif -#endif - -#ifndef LZMA_API -# define LZMA_API(type) LZMA_API_IMPORT type LZMA_API_CALL -#endif - - -/*********** - * nothrow * - ***********/ - -/* - * None of the functions in liblzma may throw an exception. Even - * the functions that use callback functions won't throw exceptions, - * because liblzma would break if a callback function threw an exception. - */ -#ifndef lzma_nothrow -# if defined(__cplusplus) -# define lzma_nothrow throw() -# elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -# define lzma_nothrow __attribute__((__nothrow__)) -# else -# define lzma_nothrow -# endif -#endif - - -/******************** - * GNU C extensions * - ********************/ - -/* - * GNU C extensions are used conditionally in the public API. It doesn't - * break anything if these are sometimes enabled and sometimes not, only - * affects warnings and optimizations. - */ -#if __GNUC__ >= 3 -# ifndef lzma_attribute -# define lzma_attribute(attr) __attribute__(attr) -# endif - -# ifndef lzma_restrict -# define lzma_restrict __restrict__ -# endif - - /* warn_unused_result was added in GCC 3.4. */ -# ifndef lzma_attr_warn_unused_result -# if __GNUC__ == 3 && __GNUC_MINOR__ < 4 -# define lzma_attr_warn_unused_result -# endif -# endif - -#else -# ifndef lzma_attribute -# define lzma_attribute(attr) -# endif - -# ifndef lzma_restrict -# if __STDC_VERSION__ >= 199901L -# define lzma_restrict restrict -# else -# define lzma_restrict -# endif -# endif -#endif - - -#ifndef lzma_attr_pure -# define lzma_attr_pure lzma_attribute((__pure__)) -#endif - -#ifndef lzma_attr_const -# define lzma_attr_const lzma_attribute((__const__)) -#endif - -#ifndef lzma_attr_warn_unused_result -# define lzma_attr_warn_unused_result \ - lzma_attribute((__warn_unused_result__)) -#endif - - -/************** - * Subheaders * - **************/ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Subheaders check that this is defined. It is to prevent including - * them directly from applications. - */ -#define LZMA_H_INTERNAL 1 - -/* Basic features */ -#include "lzma/version.h" -#include "lzma/base.h" -#include "lzma/vli.h" -#include "lzma/check.h" - -/* Filters */ -#include "lzma/filter.h" -#include "lzma/subblock.h" -#include "lzma/bcj.h" -#include "lzma/delta.h" -#include "lzma/lzma.h" - -/* Container formats */ -#include "lzma/container.h" - -/* Advanced features */ -#include "lzma/stream_flags.h" -#include "lzma/block.h" -#include "lzma/index.h" -#include "lzma/index_hash.h" - -/* - * All subheaders included. Undefine LZMA_H_INTERNAL to prevent applications - * re-including the subheaders. - */ -#undef LZMA_H_INTERNAL - -#ifdef __cplusplus -} -#endif - -#endif /* ifndef LZMA_H */ diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/base.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/base.h deleted file mode 100644 index 01555068659..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/base.h +++ /dev/null @@ -1,596 +0,0 @@ -/** - * \file lzma/base.h - * \brief Data types and functions used in many places in liblzma API - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Boolean - * - * This is here because C89 doesn't have stdbool.h. To set a value for - * variables having type lzma_bool, you can use - * - C99's `true' and `false' from stdbool.h; - * - C++'s internal `true' and `false'; or - * - integers one (true) and zero (false). - */ -typedef unsigned char lzma_bool; - - -/** - * \brief Type of reserved enumeration variable in structures - * - * To avoid breaking library ABI when new features are added, several - * structures contain extra variables that may be used in future. Since - * sizeof(enum) can be different than sizeof(int), and sizeof(enum) may - * even vary depending on the range of enumeration constants, we specify - * a separate type to be used for reserved enumeration variables. All - * enumeration constants in liblzma API will be non-negative and less - * than 128, which should guarantee that the ABI won't break even when - * new constants are added to existing enumerations. - */ -typedef enum { - LZMA_RESERVED_ENUM = 0 -} lzma_reserved_enum; - - -/** - * \brief Return values used by several functions in liblzma - * - * Check the descriptions of specific functions to find out which return - * values they can return. With some functions the return values may have - * more specific meanings than described here; those differences are - * described per-function basis. - */ -typedef enum { - LZMA_OK = 0, - /**< - * \brief Operation completed successfully - */ - - LZMA_STREAM_END = 1, - /**< - * \brief End of stream was reached - * - * In encoder, LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, or - * LZMA_FINISH was finished. In decoder, this indicates - * that all the data was successfully decoded. - * - * In all cases, when LZMA_STREAM_END is returned, the last - * output bytes should be picked from strm->next_out. - */ - - LZMA_NO_CHECK = 2, - /**< - * \brief Input stream has no integrity check - * - * This return value can be returned only if the - * LZMA_TELL_NO_CHECK flag was used when initializing - * the decoder. LZMA_NO_CHECK is just a warning, and - * the decoding can be continued normally. - * - * It is possible to call lzma_get_check() immediatelly after - * lzma_code has returned LZMA_NO_CHECK. The result will - * naturally be LZMA_CHECK_NONE, but the possibility to call - * lzma_get_check() may be convenient in some applications. - */ - - LZMA_UNSUPPORTED_CHECK = 3, - /**< - * \brief Cannot calculate the integrity check - * - * The usage of this return value is different in encoders - * and decoders. - * - * Encoders can return this value only from the initialization - * function. If initialization fails with this value, the - * encoding cannot be done, because there's no way to produce - * output with the correct integrity check. - * - * Decoders can return this value only from lzma_code() and - * only if the LZMA_TELL_UNSUPPORTED_CHECK flag was used when - * initializing the decoder. The decoding can still be - * continued normally even if the check type is unsupported, - * but naturally the check will not be validated, and possible - * errors may go undetected. - * - * With decoder, it is possible to call lzma_get_check() - * immediatelly after lzma_code() has returned - * LZMA_UNSUPPORTED_CHECK. This way it is possible to find - * out what the unsupported Check ID was. - */ - - LZMA_GET_CHECK = 4, - /**< - * \brief Integrity check type is now available - * - * This value can be returned only by the lzma_code() function - * and only if the decoder was initialized with the - * LZMA_TELL_ANY_CHECK flag. LZMA_GET_CHECK tells the - * application that it may now call lzma_get_check() to find - * out the Check ID. This can be used, for example, to - * implement a decoder that accepts only files that have - * strong enough integrity check. - */ - - LZMA_MEM_ERROR = 5, - /**< - * \brief Cannot allocate memory - * - * Memory allocation failed, or the size of the allocation - * would be greater than SIZE_MAX. - * - * Due to internal implementation reasons, the coding cannot - * be continued even if more memory were made available after - * LZMA_MEM_ERROR. - */ - - LZMA_MEMLIMIT_ERROR = 6, - /** - * \brief Memory usage limit was reached - * - * Decoder would need more memory than allowed by the - * specified memory usage limit. To continue decoding, - * the memory usage limit has to be increased with - * lzma_memlimit_set(). - */ - - LZMA_FORMAT_ERROR = 7, - /**< - * \brief File format not recognized - * - * The decoder did not recognize the input as supported file - * format. This error can occur, for example, when trying to - * decode .lzma format file with lzma_stream_decoder, - * because lzma_stream_decoder accepts only the .xz format. - */ - - LZMA_OPTIONS_ERROR = 8, - /**< - * \brief Invalid or unsupported options - * - * Invalid or unsupported options, for example - * - unsupported filter(s) or filter options; or - * - reserved bits set in headers (decoder only). - * - * Rebuilding liblzma with more features enabled, or - * upgrading to a newer version of liblzma may help. - */ - - LZMA_DATA_ERROR = 9, - /**< - * \brief Data is corrupt - * - * The usage of this return value is different in encoders - * and decoders. In both encoder and decoder, the coding - * cannot continue after this error. - * - * Encoders return this if size limits of the target file - * format would be exceeded. These limits are huge, thus - * getting this error from an encoder is mostly theoretical. - * For example, the maximum compressed and uncompressed - * size of a .xz Stream is roughly 8 EiB (2^63 bytes). - * - * Decoders return this error if the input data is corrupt. - * This can mean, for example, invalid CRC32 in headers - * or invalid check of uncompressed data. - */ - - LZMA_BUF_ERROR = 10, - /**< - * \brief No progress is possible - * - * This error code is returned when the coder cannot consume - * any new input and produce any new output. The most common - * reason for this error is that the input stream being - * decoded is truncated or corrupt. - * - * This error is not fatal. Coding can be continued normally - * by providing more input and/or more output space, if - * possible. - * - * Typically the first call to lzma_code() that can do no - * progress returns LZMA_OK instead of LZMA_BUF_ERROR. Only - * the second consecutive call doing no progress will return - * LZMA_BUF_ERROR. This is intentional. - * - * With zlib, Z_BUF_ERROR may be returned even if the - * application is doing nothing wrong, so apps will need - * to handle Z_BUF_ERROR specially. The above hack - * guarantees that liblzma never returns LZMA_BUF_ERROR - * to properly written applications unless the input file - * is truncated or corrupt. This should simplify the - * applications a little. - */ - - LZMA_PROG_ERROR = 11, - /**< - * \brief Programming error - * - * This indicates that the arguments given to the function are - * invalid or the internal state of the decoder is corrupt. - * - Function arguments are invalid or the structures - * pointed by the argument pointers are invalid - * e.g. if strm->next_out has been set to NULL and - * strm->avail_out > 0 when calling lzma_code(). - * - lzma_* functions have been called in wrong order - * e.g. lzma_code() was called right after lzma_end(). - * - If errors occur randomly, the reason might be flaky - * hardware. - * - * If you think that your code is correct, this error code - * can be a sign of a bug in liblzma. See the documentation - * how to report bugs. - */ -} lzma_ret; - - -/** - * \brief The `action' argument for lzma_code() - * - * After the first use of LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, or LZMA_FINISH, - * the same `action' must is used until lzma_code() returns LZMA_STREAM_END. - * Also, the amount of input (that is, strm->avail_in) must not be modified - * by the application until lzma_code() returns LZMA_STREAM_END. Changing the - * `action' or modifying the amount of input will make lzma_code() return - * LZMA_PROG_ERROR. - */ -typedef enum { - LZMA_RUN = 0, - /**< - * \brief Continue coding - * - * Encoder: Encode as much input as possible. Some internal - * buffering will probably be done (depends on the filter - * chain in use), which causes latency: the input used won't - * usually be decodeable from the output of the same - * lzma_code() call. - * - * Decoder: Decode as much input as possible and produce as - * much output as possible. - */ - - LZMA_SYNC_FLUSH = 1, - /**< - * \brief Make all the input available at output - * - * Normally the encoder introduces some latency. - * LZMA_SYNC_FLUSH forces all the buffered data to be - * available at output without resetting the internal - * state of the encoder. This way it is possible to use - * compressed stream for example for communication over - * network. - * - * Only some filters support LZMA_SYNC_FLUSH. Trying to use - * LZMA_SYNC_FLUSH with filters that don't support it will - * make lzma_code() return LZMA_OPTIONS_ERROR. For example, - * LZMA1 doesn't support LZMA_SYNC_FLUSH but LZMA2 does. - * - * Using LZMA_SYNC_FLUSH very often can dramatically reduce - * the compression ratio. With some filters (for example, - * LZMA2), finetuning the compression options may help - * mitigate this problem significantly. - * - * Decoders don't support LZMA_SYNC_FLUSH. - */ - - LZMA_FULL_FLUSH = 2, - /**< - * \brief Make all the input available at output - * - * Finish encoding of the current Block. All the input - * data going to the current Block must have been given - * to the encoder (the last bytes can still be pending in - * next_in). Call lzma_code() with LZMA_FULL_FLUSH until - * it returns LZMA_STREAM_END. Then continue normally with - * LZMA_RUN or finish the Stream with LZMA_FINISH. - * - * This action is currently supported only by Stream encoder - * and easy encoder (which uses Stream encoder). If there is - * no unfinished Block, no empty Block is created. - */ - - LZMA_FINISH = 3 - /**< - * \brief Finish the coding operation - * - * Finishes the coding operation. All the input data must - * have been given to the encoder (the last bytes can still - * be pending in next_in). Call lzma_code() with LZMA_FINISH - * until it returns LZMA_STREAM_END. Once LZMA_FINISH has - * been used, the amount of input must no longer be changed - * by the application. - * - * When decoding, using LZMA_FINISH is optional unless the - * LZMA_CONCATENATED flag was used when the decoder was - * initialized. When LZMA_CONCATENATED was not used, the only - * effect of LZMA_FINISH is that the amount of input must not - * be changed just like in the encoder. - */ -} lzma_action; - - -/** - * \brief Custom functions for memory handling - * - * A pointer to lzma_allocator may be passed via lzma_stream structure - * to liblzma, and some advanced functions take a pointer to lzma_allocator - * as a separate function argument. The library will use the functions - * specified in lzma_allocator for memory handling instead of the default - * malloc() and free(). C++ users should note that the custom memory - * handling functions must not throw exceptions. - * - * liblzma doesn't make an internal copy of lzma_allocator. Thus, it is - * OK to change these function pointers in the middle of the coding - * process, but obviously it must be done carefully to make sure that the - * replacement `free' can deallocate memory allocated by the earlier - * `alloc' function(s). - */ -typedef struct { - /** - * \brief Pointer to a custom memory allocation function - * - * If you don't want a custom allocator, but still want - * custom free(), set this to NULL and liblzma will use - * the standard malloc(). - * - * \param opaque lzma_allocator.opaque (see below) - * \param nmemb Number of elements like in calloc(). liblzma - * will always set nmemb to 1, so it is safe to - * ignore nmemb in a custom allocator if you like. - * The nmemb argument exists only for - * compatibility with zlib and libbzip2. - * \param size Size of an element in bytes. - * liblzma never sets this to zero. - * - * \return Pointer to the beginning of a memory block of - * `size' bytes, or NULL if allocation fails - * for some reason. When allocation fails, functions - * of liblzma return LZMA_MEM_ERROR. - * - * The allocator should not waste time zeroing the allocated buffers. - * This is not only about speed, but also memory usage, since the - * operating system kernel doesn't necessarily allocate the requested - * memory in physical memory until it is actually used. With small - * input files, liblzma may actually need only a fraction of the - * memory that it requested for allocation. - * - * \note LZMA_MEM_ERROR is also used when the size of the - * allocation would be greater than SIZE_MAX. Thus, - * don't assume that the custom allocator must have - * returned NULL if some function from liblzma - * returns LZMA_MEM_ERROR. - */ - void *(LZMA_API_CALL *alloc)(void *opaque, size_t nmemb, size_t size); - - /** - * \brief Pointer to a custom memory freeing function - * - * If you don't want a custom freeing function, but still - * want a custom allocator, set this to NULL and liblzma - * will use the standard free(). - * - * \param opaque lzma_allocator.opaque (see below) - * \param ptr Pointer returned by lzma_allocator.alloc(), - * or when it is set to NULL, a pointer returned - * by the standard malloc(). - */ - void (LZMA_API_CALL *free)(void *opaque, void *ptr); - - /** - * \brief Pointer passed to .alloc() and .free() - * - * opaque is passed as the first argument to lzma_allocator.alloc() - * and lzma_allocator.free(). This intended to ease implementing - * custom memory allocation functions for use with liblzma. - * - * If you don't need this, you should set this to NULL. - */ - void *opaque; - -} lzma_allocator; - - -/** - * \brief Internal data structure - * - * The contents of this structure is not visible outside the library. - */ -typedef struct lzma_internal_s lzma_internal; - - -/** - * \brief Passing data to and from liblzma - * - * The lzma_stream structure is used for - * - passing pointers to input and output buffers to liblzma; - * - defining custom memory hander functions; and - * - holding a pointer to coder-specific internal data structures. - * - * Typical usage: - * - * - After allocating lzma_stream (on stack or with malloc()), it must be - * initialized to LZMA_STREAM_INIT (see LZMA_STREAM_INIT for details). - * - * - Initialize a coder to the lzma_stream, for example by using - * lzma_easy_encoder() or lzma_auto_decoder(). Some notes: - * - In contrast to zlib, strm->next_in and strm->next_out are - * ignored by all initialization functions, thus it is safe - * to not initialize them yet. - * - The initialization functions always set strm->total_in and - * strm->total_out to zero. - * - If the initialization function fails, no memory is left allocated - * that would require freeing with lzma_end() even if some memory was - * associated with the lzma_stream structure when the initialization - * function was called. - * - * - Use lzma_code() to do the actual work. - * - * - Once the coding has been finished, the existing lzma_stream can be - * reused. It is OK to reuse lzma_stream with different initialization - * function without calling lzma_end() first. Old allocations are - * automatically freed. - * - * - Finally, use lzma_end() to free the allocated memory. lzma_end() never - * frees the lzma_stream structure itself. - * - * Application may modify the values of total_in and total_out as it wants. - * They are updated by liblzma to match the amount of data read and - * written, but aren't used for anything else. - */ -typedef struct { - const uint8_t *next_in; /**< Pointer to the next input byte. */ - size_t avail_in; /**< Number of available input bytes in next_in. */ - uint64_t total_in; /**< Total number of bytes read by liblzma. */ - - uint8_t *next_out; /**< Pointer to the next output position. */ - size_t avail_out; /**< Amount of free space in next_out. */ - uint64_t total_out; /**< Total number of bytes written by liblzma. */ - - /** - * \brief Custom memory allocation functions - * - * In most cases this is NULL which makes liblzma use - * the standard malloc() and free(). - */ - lzma_allocator *allocator; - - /** Internal state is not visible to applications. */ - lzma_internal *internal; - - /* - * Reserved space to allow possible future extensions without - * breaking the ABI. Excluding the initialization of this structure, - * you should not touch these, because the names of these variables - * may change. - */ - void *reserved_ptr1; - void *reserved_ptr2; - uint64_t reserved_int1; - uint64_t reserved_int2; - lzma_reserved_enum reserved_enum1; - lzma_reserved_enum reserved_enum2; - -} lzma_stream; - - -/** - * \brief Initialization for lzma_stream - * - * When you declare an instance of lzma_stream, you can immediatelly - * initialize it so that initialization functions know that no memory - * has been allocated yet: - * - * lzma_stream strm = LZMA_STREAM_INIT; - * - * If you need to initialize a dynamically allocated lzma_stream, you can use - * memset(strm_pointer, 0, sizeof(lzma_stream)). Strictly speaking, this - * violates the C standard since NULL may have different internal - * representation than zero, but it should be portable enough in practice. - * Anyway, for maximum portability, you can use something like this: - * - * lzma_stream tmp = LZMA_STREAM_INIT; - * *strm = tmp; - */ -#define LZMA_STREAM_INIT \ - { NULL, 0, 0, NULL, 0, 0, NULL, NULL, \ - NULL, NULL, 0, 0, LZMA_RESERVED_ENUM, LZMA_RESERVED_ENUM } - - -/** - * \brief Encode or decode data - * - * Once the lzma_stream has been successfully initialized (e.g. with - * lzma_stream_encoder()), the actual encoding or decoding is done - * using this function. The application has to update strm->next_in, - * strm->avail_in, strm->next_out, and strm->avail_out to pass input - * to and get output from liblzma. - * - * See the description of the coder-specific initialization function to find - * out what `action' values are supported by the coder. - */ -extern LZMA_API(lzma_ret) lzma_code(lzma_stream *strm, lzma_action action) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Free memory allocated for the coder data structures - * - * \param strm Pointer to lzma_stream that is at least initialized - * with LZMA_STREAM_INIT. - * - * After lzma_end(strm), strm->internal is guaranteed to be NULL. No other - * members of the lzma_stream structure are touched. - * - * \note zlib indicates an error if application end()s unfinished - * stream structure. liblzma doesn't do this, and assumes that - * application knows what it is doing. - */ -extern LZMA_API(void) lzma_end(lzma_stream *strm) lzma_nothrow; - - -/** - * \brief Get the memory usage of decoder filter chain - * - * This function is currently supported only when *strm has been initialized - * with a function that takes a memlimit argument. With other functions, you - * should use e.g. lzma_raw_encoder_memusage() or lzma_raw_decoder_memusage() - * to estimate the memory requirements. - * - * This function is useful e.g. after LZMA_MEMLIMIT_ERROR to find out how big - * the memory usage limit should have been to decode the input. Note that - * this may give misleading information if decoding .xz Streams that have - * multiple Blocks, because each Block can have different memory requirements. - * - * \return Rough estimate of how much memory is currently allocated - * for the filter decoders. If no filter chain is currently - * allocated, some non-zero value is still returned, which is - * less than or equal to what any filter chain would indicate - * as its memory requirement. - * - * If this function isn't supported by *strm or some other error - * occurs, zero is returned. - */ -extern LZMA_API(uint64_t) lzma_memusage(const lzma_stream *strm) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Get the current memory usage limit - * - * This function is supported only when *strm has been initialized with - * a function that takes a memlimit argument. - * - * \return On success, the current memory usage limit is returned - * (always non-zero). On error, zero is returned. - */ -extern LZMA_API(uint64_t) lzma_memlimit_get(const lzma_stream *strm) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Set the memory usage limit - * - * This function is supported only when *strm has been initialized with - * a function that takes a memlimit argument. - * - * \return - LZMA_OK: New memory usage limit successfully set. - * - LZMA_MEMLIMIT_ERROR: The new limit is too small. - * The limit was not changed. - * - LZMA_PROG_ERROR: Invalid arguments, e.g. *strm doesn't - * support memory usage limit or memlimit was zero. - */ -extern LZMA_API(lzma_ret) lzma_memlimit_set( - lzma_stream *strm, uint64_t memlimit) lzma_nothrow; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/bcj.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/bcj.h deleted file mode 100644 index 274bf6c735c..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/bcj.h +++ /dev/null @@ -1,90 +0,0 @@ -/** - * \file lzma/bcj.h - * \brief Branch/Call/Jump conversion filters - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/* Filter IDs for lzma_filter.id */ - -#define LZMA_FILTER_X86 LZMA_VLI_C(0x04) - /**< - * Filter for x86 binaries - */ - -#define LZMA_FILTER_POWERPC LZMA_VLI_C(0x05) - /**< - * Filter for Big endian PowerPC binaries - */ - -#define LZMA_FILTER_IA64 LZMA_VLI_C(0x06) - /**< - * Filter for IA64 (Itanium) binaries. - */ - -#define LZMA_FILTER_ARM LZMA_VLI_C(0x07) - /**< - * Filter for ARM binaries. - */ - -#define LZMA_FILTER_ARMTHUMB LZMA_VLI_C(0x08) - /**< - * Filter for ARMThumb binaries. - */ - -#define LZMA_FILTER_SPARC LZMA_VLI_C(0x09) - /**< - * Filter for SPARC binaries. - */ - - -/** - * \brief Options for BCJ filters - * - * The BCJ filters never change the size of the data. Specifying options - * for them is optional: if pointer to options is NULL, default value is - * used. You probably never need to specify options to BCJ filters, so just - * set the options pointer to NULL and be happy. - * - * If options with non-default values have been specified when encoding, - * the same options must also be specified when decoding. - * - * \note At the moment, none of the BCJ filters support - * LZMA_SYNC_FLUSH. If LZMA_SYNC_FLUSH is specified, - * LZMA_OPTIONS_ERROR will be returned. If there is need, - * partial support for LZMA_SYNC_FLUSH can be added in future. - * Partial means that flushing would be possible only at - * offsets that are multiple of 2, 4, or 16 depending on - * the filter, except x86 which cannot be made to support - * LZMA_SYNC_FLUSH predictably. - */ -typedef struct { - /** - * \brief Start offset for conversions - * - * This setting is useful only when the same filter is used - * _separately_ for multiple sections of the same executable file, - * and the sections contain cross-section branch/call/jump - * instructions. In that case it is benefical to set the start - * offset of the non-first sections so that the relative addresses - * of the cross-section branch/call/jump instructions will use the - * same absolute addresses as in the first section. - * - * When the pointer to options is NULL, the default value (zero) - * is used. - */ - uint32_t start_offset; - -} lzma_options_bcj; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/block.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/block.h deleted file mode 100644 index 10e97446640..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/block.h +++ /dev/null @@ -1,534 +0,0 @@ -/** - * \file lzma/block.h - * \brief .xz Block handling - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Options for the Block and Block Header encoders and decoders - * - * Different Block handling functions use different parts of this structure. - * Some read some members, other functions write, and some do both. Only the - * members listed for reading need to be initialized when the specified - * functions are called. The members marked for writing will be assigned - * new values at some point either by calling the given function or by - * later calls to lzma_code(). - */ -typedef struct { - /** - * \brief Block format version - * - * To prevent API and ABI breakages if new features are needed in - * Block, a version number is used to indicate which fields in this - * structure are in use. For now, version must always be zero. - * With non-zero version, most Block related functions will return - * LZMA_OPTIONS_ERROR. - * - * The decoding functions will always set this to the lowest value - * that supports all the features indicated by the Block Header field. - * The application must check that the version number set by the - * decoding functions is supported by the application. Otherwise it - * is possible that the application will decode the Block incorrectly. - * - * Read by: - * - lzma_block_header_size() - * - lzma_block_header_encode() - * - lzma_block_compressed_size() - * - lzma_block_unpadded_size() - * - lzma_block_total_size() - * - lzma_block_encoder() - * - lzma_block_decoder() - * - lzma_block_buffer_encode() - * - lzma_block_buffer_decode() - * - * Written by: - * - lzma_block_header_decode() - */ - uint32_t version; - - /** - * \brief Size of the Block Header field - * - * This is always a multiple of four. - * - * Read by: - * - lzma_block_header_encode() - * - lzma_block_header_decode() - * - lzma_block_compressed_size() - * - lzma_block_unpadded_size() - * - lzma_block_total_size() - * - lzma_block_decoder() - * - lzma_block_buffer_decode() - * - * Written by: - * - lzma_block_header_size() - * - lzma_block_buffer_encode() - */ - uint32_t header_size; -# define LZMA_BLOCK_HEADER_SIZE_MIN 8 -# define LZMA_BLOCK_HEADER_SIZE_MAX 1024 - - /** - * \brief Type of integrity Check - * - * The Check ID is not stored into the Block Header, thus its value - * must be provided also when decoding. - * - * Read by: - * - lzma_block_header_encode() - * - lzma_block_header_decode() - * - lzma_block_compressed_size() - * - lzma_block_unpadded_size() - * - lzma_block_total_size() - * - lzma_block_encoder() - * - lzma_block_decoder() - * - lzma_block_buffer_encode() - * - lzma_block_buffer_decode() - */ - lzma_check check; - - /** - * \brief Size of the Compressed Data in bytes - * - * Encoding: If this is not LZMA_VLI_UNKNOWN, Block Header encoder - * will store this value to the Block Header. Block encoder doesn't - * care about this value, but will set it once the encoding has been - * finished. - * - * Decoding: If this is not LZMA_VLI_UNKNOWN, Block decoder will - * verify that the size of the Compressed Data field matches - * compressed_size. - * - * Usually you don't know this value when encoding in streamed mode, - * and thus cannot write this field into the Block Header. - * - * In non-streamed mode you can reserve space for this field before - * encoding the actual Block. After encoding the data, finish the - * Block by encoding the Block Header. Steps in detail: - * - * - Set compressed_size to some big enough value. If you don't know - * better, use LZMA_VLI_MAX, but remember that bigger values take - * more space in Block Header. - * - * - Call lzma_block_header_size() to see how much space you need to - * reserve for the Block Header. - * - * - Encode the Block using lzma_block_encoder() and lzma_code(). - * It sets compressed_size to the correct value. - * - * - Use lzma_block_header_encode() to encode the Block Header. - * Because space was reserved in the first step, you don't need - * to call lzma_block_header_size() anymore, because due to - * reserving, header_size has to be big enough. If it is "too big", - * lzma_block_header_encode() will add enough Header Padding to - * make Block Header to match the size specified by header_size. - * - * Read by: - * - lzma_block_header_size() - * - lzma_block_header_encode() - * - lzma_block_compressed_size() - * - lzma_block_unpadded_size() - * - lzma_block_total_size() - * - lzma_block_decoder() - * - lzma_block_buffer_decode() - * - * Written by: - * - lzma_block_header_decode() - * - lzma_block_compressed_size() - * - lzma_block_encoder() - * - lzma_block_decoder() - * - lzma_block_buffer_encode() - * - lzma_block_buffer_decode() - */ - lzma_vli compressed_size; - - /** - * \brief Uncompressed Size in bytes - * - * This is handled very similarly to compressed_size above. - * - * uncompressed_size is needed by fewer functions than - * compressed_size. This is because uncompressed_size isn't - * needed to validate that Block stays within proper limits. - * - * Read by: - * - lzma_block_header_size() - * - lzma_block_header_encode() - * - lzma_block_decoder() - * - lzma_block_buffer_decode() - * - * Written by: - * - lzma_block_header_decode() - * - lzma_block_encoder() - * - lzma_block_decoder() - * - lzma_block_buffer_encode() - * - lzma_block_buffer_decode() - */ - lzma_vli uncompressed_size; - - /** - * \brief Array of filters - * - * There can be 1-4 filters. The end of the array is marked with - * .id = LZMA_VLI_UNKNOWN. - * - * Read by: - * - lzma_block_header_size() - * - lzma_block_header_encode() - * - lzma_block_encoder() - * - lzma_block_decoder() - * - lzma_block_buffer_encode() - * - lzma_block_buffer_decode() - * - * Written by: - * - lzma_block_header_decode(): Note that this does NOT free() - * the old filter options structures. All unused filters[] will - * have .id == LZMA_VLI_UNKNOWN and .options == NULL. If - * decoding fails, all filters[] are guaranteed to be - * LZMA_VLI_UNKNOWN and NULL. - * - * \note Because of the array is terminated with - * .id = LZMA_VLI_UNKNOWN, the actual array must - * have LZMA_FILTERS_MAX + 1 members or the Block - * Header decoder will overflow the buffer. - */ - lzma_filter *filters; - - /** - * \brief Raw value stored in the Check field - * - * After successful coding, the first lzma_check_size(check) bytes - * of this array contain the raw value stored in the Check field. - * - * Note that CRC32 and CRC64 are stored in little endian byte order. - * Take it into account if you display the Check values to the user. - * - * Written by: - * - lzma_block_encoder() - * - lzma_block_decoder() - * - lzma_block_buffer_encode() - * - lzma_block_buffer_decode() - */ - uint8_t raw_check[LZMA_CHECK_SIZE_MAX]; - - /* - * Reserved space to allow possible future extensions without - * breaking the ABI. You should not touch these, because the names - * of these variables may change. These are and will never be used - * with the currently supported options, so it is safe to leave these - * uninitialized. - */ - void *reserved_ptr1; - void *reserved_ptr2; - void *reserved_ptr3; - uint32_t reserved_int1; - uint32_t reserved_int2; - lzma_vli reserved_int3; - lzma_vli reserved_int4; - lzma_vli reserved_int5; - lzma_vli reserved_int6; - lzma_vli reserved_int7; - lzma_vli reserved_int8; - lzma_reserved_enum reserved_enum1; - lzma_reserved_enum reserved_enum2; - lzma_reserved_enum reserved_enum3; - lzma_reserved_enum reserved_enum4; - lzma_bool reserved_bool1; - lzma_bool reserved_bool2; - lzma_bool reserved_bool3; - lzma_bool reserved_bool4; - lzma_bool reserved_bool5; - lzma_bool reserved_bool6; - lzma_bool reserved_bool7; - lzma_bool reserved_bool8; - -} lzma_block; - - -/** - * \brief Decode the Block Header Size field - * - * To decode Block Header using lzma_block_header_decode(), the size of the - * Block Header has to be known and stored into lzma_block.header_size. - * The size can be calculated from the first byte of a Block using this macro. - * Note that if the first byte is 0x00, it indicates beginning of Index; use - * this macro only when the byte is not 0x00. - * - * There is no encoding macro, because Block Header encoder is enough for that. - */ -#define lzma_block_header_size_decode(b) (((uint32_t)(b) + 1) * 4) - - -/** - * \brief Calculate Block Header Size - * - * Calculate the minimum size needed for the Block Header field using the - * settings specified in the lzma_block structure. Note that it is OK to - * increase the calculated header_size value as long as it is a multiple of - * four and doesn't exceed LZMA_BLOCK_HEADER_SIZE_MAX. Increasing header_size - * just means that lzma_block_header_encode() will add Header Padding. - * - * \return - LZMA_OK: Size calculated successfully and stored to - * block->header_size. - * - LZMA_OPTIONS_ERROR: Unsupported version, filters or - * filter options. - * - LZMA_PROG_ERROR: Invalid values like compressed_size == 0. - * - * \note This doesn't check that all the options are valid i.e. this - * may return LZMA_OK even if lzma_block_header_encode() or - * lzma_block_encoder() would fail. If you want to validate the - * filter chain, consider using lzma_memlimit_encoder() which as - * a side-effect validates the filter chain. - */ -extern LZMA_API(lzma_ret) lzma_block_header_size(lzma_block *block) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Encode Block Header - * - * The caller must have calculated the size of the Block Header already with - * lzma_block_header_size(). If a value larger than the one calculated by - * lzma_block_header_size() is used, the Block Header will be padded to the - * specified size. - * - * \param out Beginning of the output buffer. This must be - * at least block->header_size bytes. - * \param block Block options to be encoded. - * - * \return - LZMA_OK: Encoding was successful. block->header_size - * bytes were written to output buffer. - * - LZMA_OPTIONS_ERROR: Invalid or unsupported options. - * - LZMA_PROG_ERROR: Invalid arguments, for example - * block->header_size is invalid or block->filters is NULL. - */ -extern LZMA_API(lzma_ret) lzma_block_header_encode( - const lzma_block *block, uint8_t *out) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Decode Block Header - * - * The size of the Block Header must have already been decoded with - * lzma_block_header_size_decode() macro and stored to block->header_size. - * block->filters must have been allocated, but not necessarily initialized. - * Possible existing filter options are _not_ freed. - * - * \param block Destination for block options with header_size - * properly initialized. - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() (and also free() - * if an error occurs). - * \param in Beginning of the input buffer. This must be - * at least block->header_size bytes. - * - * \return - LZMA_OK: Decoding was successful. block->header_size - * bytes were read from the input buffer. - * - LZMA_OPTIONS_ERROR: The Block Header specifies some - * unsupported options such as unsupported filters. - * - LZMA_DATA_ERROR: Block Header is corrupt, for example, - * the CRC32 doesn't match. - * - LZMA_PROG_ERROR: Invalid arguments, for example - * block->header_size is invalid or block->filters is NULL. - */ -extern LZMA_API(lzma_ret) lzma_block_header_decode(lzma_block *block, - lzma_allocator *allocator, const uint8_t *in) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Validate and set Compressed Size according to Unpadded Size - * - * Block Header stores Compressed Size, but Index has Unpadded Size. If the - * application has already parsed the Index and is now decoding Blocks, - * it can calculate Compressed Size from Unpadded Size. This function does - * exactly that with error checking: - * - * - Compressed Size calculated from Unpadded Size must be positive integer, - * that is, Unpadded Size must be big enough that after Block Header and - * Check fields there's still at least one byte for Compressed Size. - * - * - If Compressed Size was present in Block Header, the new value - * calculated from Unpadded Size is compared against the value - * from Block Header. - * - * \note This function must be called _after_ decoding the Block Header - * field so that it can properly validate Compressed Size if it - * was present in Block Header. - * - * \return - LZMA_OK: block->compressed_size was set successfully. - * - LZMA_DATA_ERROR: unpadded_size is too small compared to - * block->header_size and lzma_check_size(block->check). - * - LZMA_PROG_ERROR: Some values are invalid. For example, - * block->header_size must be a multiple of four and - * between 8 and 1024 inclusive. - */ -extern LZMA_API(lzma_ret) lzma_block_compressed_size( - lzma_block *block, lzma_vli unpadded_size) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Calculate Unpadded Size - * - * The Index field stores Unpadded Size and Uncompressed Size. The latter - * can be taken directly from the lzma_block structure after coding a Block, - * but Unpadded Size needs to be calculated from Block Header Size, - * Compressed Size, and size of the Check field. This is where this function - * is needed. - * - * \return Unpadded Size on success, or zero on error. - */ -extern LZMA_API(lzma_vli) lzma_block_unpadded_size(const lzma_block *block) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Calculate the total encoded size of a Block - * - * This is equivalent to lzma_block_unpadded_size() except that the returned - * value includes the size of the Block Padding field. - * - * \return On success, total encoded size of the Block. On error, - * zero is returned. - */ -extern LZMA_API(lzma_vli) lzma_block_total_size(const lzma_block *block) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Initialize .xz Block encoder - * - * Valid actions for lzma_code() are LZMA_RUN, LZMA_SYNC_FLUSH (only if the - * filter chain supports it), and LZMA_FINISH. - * - * \return - LZMA_OK: All good, continue with lzma_code(). - * - LZMA_MEM_ERROR - * - LZMA_OPTIONS_ERROR - * - LZMA_UNSUPPORTED_CHECK: block->check specfies a Check ID - * that is not supported by this buid of liblzma. Initializing - * the encoder failed. - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_block_encoder( - lzma_stream *strm, lzma_block *block) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Initialize .xz Block decoder - * - * Valid actions for lzma_code() are LZMA_RUN and LZMA_FINISH. Using - * LZMA_FINISH is not required. It is supported only for convenience. - * - * \return - LZMA_OK: All good, continue with lzma_code(). - * - LZMA_UNSUPPORTED_CHECK: Initialization was successful, but - * the given Check ID is not supported, thus Check will be - * ignored. - * - LZMA_PROG_ERROR - * - LZMA_MEM_ERROR - */ -extern LZMA_API(lzma_ret) lzma_block_decoder( - lzma_stream *strm, lzma_block *block) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Calculate maximum output size for single-call Block encoding - * - * This is equivalent to lzma_stream_buffer_bound() but for .xz Blocks. - * See the documentation of lzma_stream_buffer_bound(). - */ -extern LZMA_API(size_t) lzma_block_buffer_bound(size_t uncompressed_size) - lzma_nothrow; - - -/** - * \brief Single-call .xz Block encoder - * - * In contrast to the multi-call encoder initialized with - * lzma_block_encoder(), this function encodes also the Block Header. This - * is required to make it possible to write appropriate Block Header also - * in case the data isn't compressible, and different filter chain has to be - * used to encode the data in uncompressed form using uncompressed chunks - * of the LZMA2 filter. - * - * When the data isn't compressible, header_size, compressed_size, and - * uncompressed_size are set just like when the data was compressible, but - * it is possible that header_size is too small to hold the filter chain - * specified in block->filters, because that isn't necessarily the filter - * chain that was actually used to encode the data. lzma_block_unpadded_size() - * still works normally, because it doesn't read the filters array. - * - * \param block Block options: block->version, block->check, - * and block->filters must have been initialized. - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() and free(). - * \param in Beginning of the input buffer - * \param in_size Size of the input buffer - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_BUF_ERROR: Not enough output buffer space. - * - LZMA_OPTIONS_ERROR - * - LZMA_MEM_ERROR - * - LZMA_DATA_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_block_buffer_encode( - lzma_block *block, lzma_allocator *allocator, - const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Single-call .xz Block decoder - * - * This is single-call equivalent of lzma_block_decoder(), and requires that - * the caller has already decoded Block Header and checked its memory usage. - * - * \param block Block options just like with lzma_block_decoder(). - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() and free(). - * \param in Beginning of the input buffer - * \param in_pos The next byte will be read from in[*in_pos]. - * *in_pos is updated only if decoding succeeds. - * \param in_size Size of the input buffer; the first byte that - * won't be read is in[in_size]. - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return - LZMA_OK: Decoding was successful. - * - LZMA_OPTIONS_ERROR - * - LZMA_DATA_ERROR - * - LZMA_MEM_ERROR - * - LZMA_BUF_ERROR: Output buffer was too small. - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_block_buffer_decode( - lzma_block *block, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) - lzma_nothrow; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/check.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/check.h deleted file mode 100644 index 5661bbe5d40..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/check.h +++ /dev/null @@ -1,150 +0,0 @@ -/** - * \file lzma/check.h - * \brief Integrity checks - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Type of the integrity check (Check ID) - * - * The .xz format supports multiple types of checks that are calculated - * from the uncompressed data. They vary in both speed and ability to - * detect errors. - */ -typedef enum { - LZMA_CHECK_NONE = 0, - /**< - * No Check is calculated. - * - * Size of the Check field: 0 bytes - */ - - LZMA_CHECK_CRC32 = 1, - /**< - * CRC32 using the polynomial from the IEEE 802.3 standard - * - * Size of the Check field: 4 bytes - */ - - LZMA_CHECK_CRC64 = 4, - /**< - * CRC64 using the polynomial from the ECMA-182 standard - * - * Size of the Check field: 8 bytes - */ - - LZMA_CHECK_SHA256 = 10 - /**< - * SHA-256 - * - * Size of the Check field: 32 bytes - */ -} lzma_check; - - -/** - * \brief Maximum valid Check ID - * - * The .xz file format specification specifies 16 Check IDs (0-15). Some - * of them are only reserved, that is, no actual Check algorithm has been - * assigned. When decoding, liblzma still accepts unknown Check IDs for - * future compatibility. If a valid but unsupported Check ID is detected, - * liblzma can indicate a warning; see the flags LZMA_TELL_NO_CHECK, - * LZMA_TELL_UNSUPPORTED_CHECK, and LZMA_TELL_ANY_CHECK in container.h. - */ -#define LZMA_CHECK_ID_MAX 15 - - -/** - * \brief Test if the given Check ID is supported - * - * Return true if the given Check ID is supported by this liblzma build. - * Otherwise false is returned. It is safe to call this with a value that - * is not in the range [0, 15]; in that case the return value is always false. - * - * You can assume that LZMA_CHECK_NONE and LZMA_CHECK_CRC32 are always - * supported (even if liblzma is built with limited features). - */ -extern LZMA_API(lzma_bool) lzma_check_is_supported(lzma_check check) - lzma_nothrow lzma_attr_const; - - -/** - * \brief Get the size of the Check field with the given Check ID - * - * Although not all Check IDs have a check algorithm associated, the size of - * every Check is already frozen. This function returns the size (in bytes) of - * the Check field with the specified Check ID. The values are: - * { 0, 4, 4, 4, 8, 8, 8, 16, 16, 16, 32, 32, 32, 64, 64, 64 } - * - * If the argument is not in the range [0, 15], UINT32_MAX is returned. - */ -extern LZMA_API(uint32_t) lzma_check_size(lzma_check check) - lzma_nothrow lzma_attr_const; - - -/** - * \brief Maximum size of a Check field - */ -#define LZMA_CHECK_SIZE_MAX 64 - - -/** - * \brief Calculate CRC32 - * - * Calculate CRC32 using the polynomial from the IEEE 802.3 standard. - * - * \param buf Pointer to the input buffer - * \param size Size of the input buffer - * \param crc Previously returned CRC value. This is used to - * calculate the CRC of a big buffer in smaller chunks. - * Set to zero when starting a new calculation. - * - * \return Updated CRC value, which can be passed to this function - * again to continue CRC calculation. - */ -extern LZMA_API(uint32_t) lzma_crc32( - const uint8_t *buf, size_t size, uint32_t crc) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Calculate CRC64 - * - * Calculate CRC64 using the polynomial from the ECMA-182 standard. - * - * This function is used similarly to lzma_crc32(). See its documentation. - */ -extern LZMA_API(uint64_t) lzma_crc64( - const uint8_t *buf, size_t size, uint64_t crc) - lzma_nothrow lzma_attr_pure; - - -/* - * SHA-256 functions are currently not exported to public API. - * Contact Lasse Collin if you think it should be. - */ - - -/** - * \brief Get the type of the integrity check - * - * This function can be called only immediatelly after lzma_code() has - * returned LZMA_NO_CHECK, LZMA_UNSUPPORTED_CHECK, or LZMA_GET_CHECK. - * Calling this function in any other situation has undefined behavior. - */ -extern LZMA_API(lzma_check) lzma_get_check(const lzma_stream *strm) - lzma_nothrow; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/container.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/container.h deleted file mode 100644 index 0d907650fc4..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/container.h +++ /dev/null @@ -1,404 +0,0 @@ -/** - * \file lzma/container.h - * \brief File formats - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/************ - * Encoding * - ************/ - -/** - * \brief Default compression preset - * - * It's not straightforward to recommend a default preset, because in some - * cases keeping the resource usage relatively low is more important that - * getting the maximum compression ratio. - */ -#define LZMA_PRESET_DEFAULT UINT32_C(6) - - -/** - * \brief Mask for preset level - * - * This is useful only if you need to extract the level from the preset - * variable. That should be rare. - */ -#define LZMA_PRESET_LEVEL_MASK UINT32_C(0x1F) - - -/* - * Preset flags - * - * Currently only one flag is defined. - */ - -/** - * \brief Extreme compression preset - * - * This flag modifies the preset to make the encoding significantly slower - * while improving the compression ratio only marginally. This is useful - * when you don't mind wasting time to get as small result as possible. - * - * This flag doesn't affect the memory usage requirements of the decoder (at - * least not significantly). The memory usage of the encoder may be increased - * a little but only at the lowest preset levels (0-2). - */ -#define LZMA_PRESET_EXTREME (UINT32_C(1) << 31) - - -/** - * \brief Calculate rough memory usage of easy encoder - * - * This function is a wrapper for lzma_raw_encoder_memusage(). - * - * \param preset Compression preset (level and possible flags) - */ -extern LZMA_API(uint64_t) lzma_easy_encoder_memusage(uint32_t preset) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Calculate rough decoder memory usage of a preset - * - * This function is a wrapper for lzma_raw_decoder_memusage(). - * - * \param preset Compression preset (level and possible flags) - */ -extern LZMA_API(uint64_t) lzma_easy_decoder_memusage(uint32_t preset) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Initialize .xz Stream encoder using a preset number - * - * This function is intended for those who just want to use the basic features - * if liblzma (that is, most developers out there). - * - * \param strm Pointer to lzma_stream that is at least initialized - * with LZMA_STREAM_INIT. - * \param preset Compression preset to use. A preset consist of level - * number and zero or more flags. Usually flags aren't - * used, so preset is simply a number [0, 9] which match - * the options -0 .. -9 of the xz command line tool. - * Additional flags can be be set using bitwise-or with - * the preset level number, e.g. 6 | LZMA_PRESET_EXTREME. - * \param check Integrity check type to use. See check.h for available - * checks. If you are unsure, use LZMA_CHECK_CRC32. - * - * \return - LZMA_OK: Initialization succeeded. Use lzma_code() to - * encode your data. - * - LZMA_MEM_ERROR: Memory allocation failed. - * - LZMA_OPTIONS_ERROR: The given compression level is not - * supported by this build of liblzma. - * - LZMA_UNSUPPORTED_CHECK: The given check type is not - * supported by this liblzma build. - * - LZMA_PROG_ERROR: One or more of the parameters have values - * that will never be valid. For example, strm == NULL. - * - * If initialization fails (return value is not LZMA_OK), all the memory - * allocated for *strm by liblzma is always freed. Thus, there is no need - * to call lzma_end() after failed initialization. - * - * If initialization succeeds, use lzma_code() to do the actual encoding. - * Valid values for `action' (the second argument of lzma_code()) are - * LZMA_RUN, LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, and LZMA_FINISH. In future, - * there may be compression levels or flags that don't support LZMA_SYNC_FLUSH. - */ -extern LZMA_API(lzma_ret) lzma_easy_encoder( - lzma_stream *strm, uint32_t preset, lzma_check check) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Single-call .xz Stream encoding using a preset number - * - * The maximum required output buffer size can be calculated with - * lzma_stream_buffer_bound(). - * - * \param preset Compression preset to use. See the description - * in lzma_easy_encoder(). - * \param check Type of the integrity check to calculate from - * uncompressed data. - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() and free(). - * \param in Beginning of the input buffer - * \param in_size Size of the input buffer - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_BUF_ERROR: Not enough output buffer space. - * - LZMA_OPTIONS_ERROR - * - LZMA_MEM_ERROR - * - LZMA_DATA_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_easy_buffer_encode( - uint32_t preset, lzma_check check, - lzma_allocator *allocator, const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow; - - -/** - * \brief Initialize .xz Stream encoder using a custom filter chain - * - * \param strm Pointer to properly prepared lzma_stream - * \param filters Array of filters. This must be terminated with - * filters[n].id = LZMA_VLI_UNKNOWN. See filter.h for - * more information. - * \param check Type of the integrity check to calculate from - * uncompressed data. - * - * \return - LZMA_OK: Initialization was successful. - * - LZMA_MEM_ERROR - * - LZMA_OPTIONS_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_stream_encoder(lzma_stream *strm, - const lzma_filter *filters, lzma_check check) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Initialize .lzma encoder (legacy file format) - * - * The .lzma format is sometimes called the LZMA_Alone format, which is the - * reason for the name of this function. The .lzma format supports only the - * LZMA1 filter. There is no support for integrity checks like CRC32. - * - * Use this function if and only if you need to create files readable by - * legacy LZMA tools such as LZMA Utils 4.32.x. Moving to the .xz format - * is strongly recommended. - * - * The valid action values for lzma_code() are LZMA_RUN and LZMA_FINISH. - * No kind of flushing is supported, because the file format doesn't make - * it possible. - * - * \return - LZMA_OK - * - LZMA_MEM_ERROR - * - LZMA_OPTIONS_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_alone_encoder( - lzma_stream *strm, const lzma_options_lzma *options) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Calculate output buffer size for single-call Stream encoder - * - * When trying to compress uncompressible data, the encoded size will be - * slightly bigger than the input data. This function calculates how much - * output buffer space is required to be sure that lzma_stream_buffer_encode() - * doesn't return LZMA_BUF_ERROR. - * - * The calculated value is not exact, but it is guaranteed to be big enough. - * The actual maximum output space required may be slightly smaller (up to - * about 100 bytes). This should not be a problem in practice. - * - * If the calculated maximum size doesn't fit into size_t or would make the - * Stream grow past LZMA_VLI_MAX (which should never happen in practice), - * zero is returned to indicate the error. - * - * \note The limit calculated by this function applies only to - * single-call encoding. Multi-call encoding may (and probably - * will) have larger maximum expansion when encoding - * uncompressible data. Currently there is no function to - * calculate the maximum expansion of multi-call encoding. - */ -extern LZMA_API(size_t) lzma_stream_buffer_bound(size_t uncompressed_size) - lzma_nothrow; - - -/** - * \brief Single-call .xz Stream encoder - * - * \param filters Array of filters. This must be terminated with - * filters[n].id = LZMA_VLI_UNKNOWN. See filter.h - * for more information. - * \param check Type of the integrity check to calculate from - * uncompressed data. - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() and free(). - * \param in Beginning of the input buffer - * \param in_size Size of the input buffer - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_BUF_ERROR: Not enough output buffer space. - * - LZMA_OPTIONS_ERROR - * - LZMA_MEM_ERROR - * - LZMA_DATA_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_stream_buffer_encode( - lzma_filter *filters, lzma_check check, - lzma_allocator *allocator, const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) - lzma_nothrow lzma_attr_warn_unused_result; - - -/************ - * Decoding * - ************/ - -/** - * This flag makes lzma_code() return LZMA_NO_CHECK if the input stream - * being decoded has no integrity check. Note that when used with - * lzma_auto_decoder(), all .lzma files will trigger LZMA_NO_CHECK - * if LZMA_TELL_NO_CHECK is used. - */ -#define LZMA_TELL_NO_CHECK UINT32_C(0x01) - - -/** - * This flag makes lzma_code() return LZMA_UNSUPPORTED_CHECK if the input - * stream has an integrity check, but the type of the integrity check is not - * supported by this liblzma version or build. Such files can still be - * decoded, but the integrity check cannot be verified. - */ -#define LZMA_TELL_UNSUPPORTED_CHECK UINT32_C(0x02) - - -/** - * This flag makes lzma_code() return LZMA_GET_CHECK as soon as the type - * of the integrity check is known. The type can then be got with - * lzma_get_check(). - */ -#define LZMA_TELL_ANY_CHECK UINT32_C(0x04) - - -/** - * This flag enables decoding of concatenated files with file formats that - * allow concatenating compressed files as is. From the formats currently - * supported by liblzma, only the .xz format allows concatenated files. - * Concatenated files are not allowed with the legacy .lzma format. - * - * This flag also affects the usage of the `action' argument for lzma_code(). - * When LZMA_CONCATENATED is used, lzma_code() won't return LZMA_STREAM_END - * unless LZMA_FINISH is used as `action'. Thus, the application has to set - * LZMA_FINISH in the same way as it does when encoding. - * - * If LZMA_CONCATENATED is not used, the decoders still accept LZMA_FINISH - * as `action' for lzma_code(), but the usage of LZMA_FINISH isn't required. - */ -#define LZMA_CONCATENATED UINT32_C(0x08) - - -/** - * \brief Initialize .xz Stream decoder - * - * \param strm Pointer to properly prepared lzma_stream - * \param memlimit Rough memory usage limit as bytes - * \param flags Bitwise-or of zero or more of the decoder flags: - * LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, - * LZMA_TELL_ANY_CHECK, LZMA_CONCATENATED - * - * \return - LZMA_OK: Initialization was successful. - * - LZMA_MEM_ERROR: Cannot allocate memory. - * - LZMA_OPTIONS_ERROR: Unsupported flags - */ -extern LZMA_API(lzma_ret) lzma_stream_decoder( - lzma_stream *strm, uint64_t memlimit, uint32_t flags) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Decode .xz Streams and .lzma files with autodetection - * - * This decoder autodetects between the .xz and .lzma file formats, and - * calls lzma_stream_decoder() or lzma_alone_decoder() once the type - * of the input file has been detected. - * - * \param strm Pointer to properly prepared lzma_stream - * \param memlimit Rough memory usage limit as bytes - * \param flags Bitwise-or of flags, or zero for no flags. - * - * \return - LZMA_OK: Initialization was successful. - * - LZMA_MEM_ERROR: Cannot allocate memory. - * - LZMA_OPTIONS_ERROR: Unsupported flags - */ -extern LZMA_API(lzma_ret) lzma_auto_decoder( - lzma_stream *strm, uint64_t memlimit, uint32_t flags) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Initialize .lzma decoder (legacy file format) - * - * Valid `action' arguments to lzma_code() are LZMA_RUN and LZMA_FINISH. - * There is no need to use LZMA_FINISH, but allowing it may simplify - * certain types of applications. - * - * \return - LZMA_OK - * - LZMA_MEM_ERROR - */ -extern LZMA_API(lzma_ret) lzma_alone_decoder( - lzma_stream *strm, uint64_t memlimit) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Single-call .xz Stream decoder - * - * \param memlimit Pointer to how much memory the decoder is allowed - * to allocate. The value pointed by this pointer is - * modified if and only if LZMA_MEMLIMIT_ERROR is - * returned. - * \param flags Bitwise-or of zero or more of the decoder flags: - * LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, - * LZMA_CONCATENATED. Note that LZMA_TELL_ANY_CHECK - * is not allowed and will return LZMA_PROG_ERROR. - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() and free(). - * \param in Beginning of the input buffer - * \param in_pos The next byte will be read from in[*in_pos]. - * *in_pos is updated only if decoding succeeds. - * \param in_size Size of the input buffer; the first byte that - * won't be read is in[in_size]. - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return - LZMA_OK: Decoding was successful. - * - LZMA_FORMAT_ERROR - * - LZMA_OPTIONS_ERROR - * - LZMA_DATA_ERROR - * - LZMA_NO_CHECK: This can be returned only if using - * the LZMA_TELL_NO_CHECK flag. - * - LZMA_UNSUPPORTED_CHECK: This can be returned only if using - * the LZMA_TELL_UNSUPPORTED_CHECK flag. - * - LZMA_MEM_ERROR - * - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached. - * The minimum required memlimit value was stored to *memlimit. - * - LZMA_BUF_ERROR: Output buffer was too small. - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_stream_buffer_decode( - uint64_t *memlimit, uint32_t flags, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) - lzma_nothrow lzma_attr_warn_unused_result; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/delta.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/delta.h deleted file mode 100644 index 592fc4f8496..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/delta.h +++ /dev/null @@ -1,77 +0,0 @@ -/** - * \file lzma/delta.h - * \brief Delta filter - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Filter ID - * - * Filter ID of the Delta filter. This is used as lzma_filter.id. - */ -#define LZMA_FILTER_DELTA LZMA_VLI_C(0x03) - - -/** - * \brief Type of the delta calculation - * - * Currently only byte-wise delta is supported. Other possible types could - * be, for example, delta of 16/32/64-bit little/big endian integers, but - * these are not currently planned since byte-wise delta is almost as good. - */ -typedef enum { - LZMA_DELTA_TYPE_BYTE -} lzma_delta_type; - - -/** - * \brief Options for the Delta filter - * - * These options are needed by both encoder and decoder. - */ -typedef struct { - /** For now, this must always be LZMA_DELTA_TYPE_BYTE. */ - lzma_delta_type type; - - /** - * \brief Delta distance - * - * With the only currently supported type, LZMA_DELTA_TYPE_BYTE, - * the distance is as bytes. - * - * Examples: - * - 16-bit stereo audio: distance = 4 bytes - * - 24-bit RGB image data: distance = 3 bytes - */ - uint32_t dist; -# define LZMA_DELTA_DIST_MIN 1 -# define LZMA_DELTA_DIST_MAX 256 - - /* - * Reserved space to allow possible future extensions without - * breaking the ABI. You should not touch these, because the names - * of these variables may change. These are and will never be used - * when type is LZMA_DELTA_TYPE_BYTE, so it is safe to leave these - * uninitialized. - */ - uint32_t reserved_int1; - uint32_t reserved_int2; - uint32_t reserved_int3; - uint32_t reserved_int4; - void *reserved_ptr1; - void *reserved_ptr2; - -} lzma_options_delta; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/filter.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/filter.h deleted file mode 100644 index 8d0db96bcc1..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/filter.h +++ /dev/null @@ -1,360 +0,0 @@ -/** - * \file lzma/filter.h - * \brief Common filter related types - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Maximum number of filters in a chain - * - * A filter chain can have 1-4 filters, of which three are allowed to change - * the size of the data. Usually only one or two filters are needed. - */ -#define LZMA_FILTERS_MAX 4 - - -/** - * \brief Filter options - * - * This structure is used to pass Filter ID and a pointer filter's - * options to liblzma. A few functions work with a single lzma_filter - * structure, while most functions expect a filter chain. - * - * A filter chain is indicated with an array of lzma_filter structures. - * The array is terminated with .id = LZMA_VLI_UNKNOWN. Thus, the filter - * array must have LZMA_FILTERS_MAX + 1 elements (that is, five) to - * be able to hold any arbitrary filter chain. This is important when - * using lzma_block_header_decode() from block.h, because too small - * array would make liblzma write past the end of the filters array. - */ -typedef struct { - /** - * \brief Filter ID - * - * Use constants whose name begin with `LZMA_FILTER_' to specify - * different filters. In an array of lzma_filter structures, use - * LZMA_VLI_UNKNOWN to indicate end of filters. - * - * \note This is not an enum, because on some systems enums - * cannot be 64-bit. - */ - lzma_vli id; - - /** - * \brief Pointer to filter-specific options structure - * - * If the filter doesn't need options, set this to NULL. If id is - * set to LZMA_VLI_UNKNOWN, options is ignored, and thus - * doesn't need be initialized. - * - * Some filters support changing the options in the middle of - * the encoding process. These filters store the pointer of the - * options structure and communicate with the application via - * modifications of the options structure. - */ - void *options; - -} lzma_filter; - - -/** - * \brief Test if the given Filter ID is supported for encoding - * - * Return true if the give Filter ID is supported for encoding by this - * liblzma build. Otherwise false is returned. - * - * There is no way to list which filters are available in this particular - * liblzma version and build. It would be useless, because the application - * couldn't know what kind of options the filter would need. - */ -extern LZMA_API(lzma_bool) lzma_filter_encoder_is_supported(lzma_vli id) - lzma_nothrow lzma_attr_const; - - -/** - * \brief Test if the given Filter ID is supported for decoding - * - * Return true if the give Filter ID is supported for decoding by this - * liblzma build. Otherwise false is returned. - */ -extern LZMA_API(lzma_bool) lzma_filter_decoder_is_supported(lzma_vli id) - lzma_nothrow lzma_attr_const; - - -/** - * \brief Calculate rough memory requirements for raw encoder - * - * Because the calculation is rough, this function can be used to calculate - * the memory requirements for Block and Stream encoders too. - * - * \param filters Array of filters terminated with - * .id == LZMA_VLI_UNKNOWN. - * - * \return Rough number of bytes of memory required for the given - * filter chain when encoding. - */ -extern LZMA_API(uint64_t) lzma_raw_encoder_memusage(const lzma_filter *filters) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Calculate rough memory requirements for raw decoder - * - * Because the calculation is rough, this function can be used to calculate - * the memory requirements for Block and Stream decoders too. - * - * \param filters Array of filters terminated with - * .id == LZMA_VLI_UNKNOWN. - * - * \return Rough number of bytes of memory required for the given - * filter chain when decoding. - */ -extern LZMA_API(uint64_t) lzma_raw_decoder_memusage(const lzma_filter *filters) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Initialize raw encoder - * - * This function may be useful when implementing custom file formats. - * - * \param strm Pointer to properly prepared lzma_stream - * \param filters Array of lzma_filter structures. The end of the - * array must be marked with .id = LZMA_VLI_UNKNOWN. - * - * The `action' with lzma_code() can be LZMA_RUN, LZMA_SYNC_FLUSH (if the - * filter chain supports it), or LZMA_FINISH. - * - * \return - LZMA_OK - * - LZMA_MEM_ERROR - * - LZMA_OPTIONS_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_raw_encoder( - lzma_stream *strm, const lzma_filter *filters) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Initialize raw decoder - * - * The initialization of raw decoder goes similarly to raw encoder. - * - * The `action' with lzma_code() can be LZMA_RUN or LZMA_FINISH. Using - * LZMA_FINISH is not required, it is supported just for convenience. - * - * \return - LZMA_OK - * - LZMA_MEM_ERROR - * - LZMA_OPTIONS_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_raw_decoder( - lzma_stream *strm, const lzma_filter *filters) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Single-call raw encoder - * - * \param filters Array of lzma_filter structures. The end of the - * array must be marked with .id = LZMA_VLI_UNKNOWN. - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() and free(). - * \param in Beginning of the input buffer - * \param in_size Size of the input buffer - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_BUF_ERROR: Not enough output buffer space. - * - LZMA_OPTIONS_ERROR - * - LZMA_MEM_ERROR - * - LZMA_DATA_ERROR - * - LZMA_PROG_ERROR - * - * \note There is no function to calculate how big output buffer - * would surely be big enough. (lzma_stream_buffer_bound() - * works only for lzma_stream_buffer_encode().) - */ -extern LZMA_API(lzma_ret) lzma_raw_buffer_encode( - const lzma_filter *filters, lzma_allocator *allocator, - const uint8_t *in, size_t in_size, uint8_t *out, - size_t *out_pos, size_t out_size) lzma_nothrow; - - -/** - * \brief Single-call raw decoder - * - * \param filters Array of lzma_filter structures. The end of the - * array must be marked with .id = LZMA_VLI_UNKNOWN. - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() and free(). - * \param in Beginning of the input buffer - * \param in_pos The next byte will be read from in[*in_pos]. - * *in_pos is updated only if decoding succeeds. - * \param in_size Size of the input buffer; the first byte that - * won't be read is in[in_size]. - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - */ -extern LZMA_API(lzma_ret) lzma_raw_buffer_decode( - const lzma_filter *filters, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow; - - -/** - * \brief Get the size of the Filter Properties field - * - * This function may be useful when implementing custom file formats - * using the raw encoder and decoder. - * - * \param size Pointer to uint32_t to hold the size of the properties - * \param filter Filter ID and options (the size of the propeties may - * vary depending on the options) - * - * \return - LZMA_OK - * - LZMA_OPTIONS_ERROR - * - LZMA_PROG_ERROR - * - * \note This function validates the Filter ID, but does not - * necessarily validate the options. Thus, it is possible - * that this returns LZMA_OK while the following call to - * lzma_properties_encode() returns LZMA_OPTIONS_ERROR. - */ -extern LZMA_API(lzma_ret) lzma_properties_size( - uint32_t *size, const lzma_filter *filter) lzma_nothrow; - - -/** - * \brief Encode the Filter Properties field - * - * \param filter Filter ID and options - * \param props Buffer to hold the encoded options. The size of - * buffer must have been already determined with - * lzma_properties_size(). - * - * \return - LZMA_OK - * - LZMA_OPTIONS_ERROR - * - LZMA_PROG_ERROR - * - * \note Even this function won't validate more options than actually - * necessary. Thus, it is possible that encoding the properties - * succeeds but using the same options to initialize the encoder - * will fail. - * - * \note It is OK to skip calling this function if - * lzma_properties_size() indicated that the size - * of the Filter Properties field is zero. - */ -extern LZMA_API(lzma_ret) lzma_properties_encode( - const lzma_filter *filter, uint8_t *props) lzma_nothrow; - - -/** - * \brief Decode the Filter Properties field - * - * \param filter filter->id must have been set to the correct - * Filter ID. filter->options doesn't need to be - * initialized (it's not freed by this function). The - * decoded options will be stored to filter->options. - * filter->options is set to NULL if there are no - * properties or if an error occurs. - * \param allocator Custom memory allocator used to allocate the - * options. Set to NULL to use the default malloc(), - * and in case of an error, also free(). - * \param props Input buffer containing the properties. - * \param props_size Size of the properties. This must be the exact - * size; giving too much or too little input will - * return LZMA_OPTIONS_ERROR. - * - * \return - LZMA_OK - * - LZMA_OPTIONS_ERROR - * - LZMA_MEM_ERROR - */ -extern LZMA_API(lzma_ret) lzma_properties_decode( - lzma_filter *filter, lzma_allocator *allocator, - const uint8_t *props, size_t props_size) lzma_nothrow; - - -/** - * \brief Calculate encoded size of a Filter Flags field - * - * Knowing the size of Filter Flags is useful to know when allocating - * memory to hold the encoded Filter Flags. - * - * \param size Pointer to integer to hold the calculated size - * \param filters Filter ID and associated options whose encoded - * size is to be calculted - * - * \return - LZMA_OK: *size set successfully. Note that this doesn't - * guarantee that filters->options is valid, thus - * lzma_filter_flags_encode() may still fail. - * - LZMA_OPTIONS_ERROR: Unknown Filter ID or unsupported options. - * - LZMA_PROG_ERROR: Invalid options - * - * \note If you need to calculate size of List of Filter Flags, - * you need to loop over every lzma_filter entry. - */ -extern LZMA_API(lzma_ret) lzma_filter_flags_size( - uint32_t *size, const lzma_filter *filters) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Encode Filter Flags into given buffer - * - * In contrast to some functions, this doesn't allocate the needed buffer. - * This is due to how this function is used internally by liblzma. - * - * \param filters Filter ID and options to be encoded - * \param out Beginning of the output buffer - * \param out_pos out[*out_pos] is the next write position. This - * is updated by the encoder. - * \param out_size out[out_size] is the first byte to not write. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_OPTIONS_ERROR: Invalid or unsupported options. - * - LZMA_PROG_ERROR: Invalid options or not enough output - * buffer space (you should have checked it with - * lzma_filter_flags_size()). - */ -extern LZMA_API(lzma_ret) lzma_filter_flags_encode(const lzma_filter *filters, - uint8_t *out, size_t *out_pos, size_t out_size) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Decode Filter Flags from given buffer - * - * The decoded result is stored into *filters. filters->options is - * initialized but the old value is NOT free()d. - * - * \return - LZMA_OK - * - LZMA_OPTIONS_ERROR - * - LZMA_MEM_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_filter_flags_decode( - lzma_filter *filters, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size) - lzma_nothrow lzma_attr_warn_unused_result; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/index.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/index.h deleted file mode 100644 index da9a622aa80..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/index.h +++ /dev/null @@ -1,403 +0,0 @@ -/** - * \file lzma/index.h - * \brief Handling of .xz Index lists - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Opaque data type to hold the Index - */ -typedef struct lzma_index_s lzma_index; - - -/** - * \brief Index Record and its location - */ -typedef struct { - /** - * \brief Total encoded size of a Block including Block Padding - * - * This value is useful if you need to know the actual size of the - * Block that the Block decoder will read. - */ - lzma_vli total_size; - - /** - * \brief Encoded size of a Block excluding Block Padding - * - * This value is stored in the Index. When doing random-access - * reading, you should give this value to the Block decoder along - * with uncompressed_size. - */ - lzma_vli unpadded_size; - - /** - * \brief Uncompressed Size of a Block - */ - lzma_vli uncompressed_size; - - /** - * \brief Compressed offset in the Stream(s) - * - * This is the offset of the first byte of the Block, that is, - * where you need to seek to decode the Block. The offset - * is relative to the beginning of the Stream, or if there are - * multiple Indexes combined, relative to the beginning of the - * first Stream. - */ - lzma_vli stream_offset; - - /** - * \brief Uncompressed offset - * - * When doing random-access reading, it is possible that the target - * offset is not exactly at Block boundary. One will need to compare - * the target offset against uncompressed_offset, and possibly decode - * and throw away some amount of data before reaching the target - * offset. - */ - lzma_vli uncompressed_offset; - -} lzma_index_record; - - -/** - * \brief Calculate memory usage for Index with given number of Records - * - * On disk, the size of the Index field depends on both the number of Records - * stored and how big values the Records store (due to variable-length integer - * encoding). When the Index is kept in lzma_index structure, the memory usage - * depends only on the number of Records stored in the Index. The size in RAM - * is almost always a lot bigger than in encoded form on disk. - * - * This function calculates an approximate amount of memory needed hold the - * given number of Records in lzma_index structure. This value may vary - * between liblzma versions if the internal implementation is modified. - * - * If you want to know how much memory an existing lzma_index structure is - * using, use lzma_index_memusage(lzma_index_count(i)). - */ -extern LZMA_API(uint64_t) lzma_index_memusage(lzma_vli record_count) - lzma_nothrow; - - -/** - * \brief Allocate and initialize a new lzma_index structure - * - * If i is NULL, a new lzma_index structure is allocated, initialized, - * and a pointer to it returned. If allocation fails, NULL is returned. - * - * If i is non-NULL, it is reinitialized and the same pointer returned. - * In this case, return value cannot be NULL or a different pointer than - * the i that was given as an argument. - */ -extern LZMA_API(lzma_index *) lzma_index_init( - lzma_index *i, lzma_allocator *allocator) lzma_nothrow; - - -/** - * \brief Deallocate the Index - * - * If i is NULL, this does nothing. - */ -extern LZMA_API(void) lzma_index_end(lzma_index *i, lzma_allocator *allocator) - lzma_nothrow; - - -/** - * \brief Add a new Record to an Index - * - * \param i Pointer to a lzma_index structure - * \param allocator Pointer to lzma_allocator, or NULL to - * use malloc() - * \param unpadded_size Unpadded Size of a Block. This can be - * calculated with lzma_block_unpadded_size() - * after encoding or decoding the Block. - * \param uncompressed_size Uncompressed Size of a Block. This can be - * taken directly from lzma_block structure - * after encoding or decoding the Block. - * - * Appending a new Record does not affect the read position. - * - * \return - LZMA_OK - * - LZMA_MEM_ERROR - * - LZMA_DATA_ERROR: Compressed or uncompressed size of the - * Stream or size of the Index field would grow too big. - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_index_append( - lzma_index *i, lzma_allocator *allocator, - lzma_vli unpadded_size, lzma_vli uncompressed_size) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Get the number of Records - */ -extern LZMA_API(lzma_vli) lzma_index_count(const lzma_index *i) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Get the size of the Index field as bytes - * - * This is needed to verify the Backward Size field in the Stream Footer. - */ -extern LZMA_API(lzma_vli) lzma_index_size(const lzma_index *i) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Get the total size of the Blocks - * - * This doesn't include the Stream Header, Stream Footer, Stream Padding, - * or Index fields. - */ -extern LZMA_API(lzma_vli) lzma_index_total_size(const lzma_index *i) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Get the total size of the Stream - * - * If multiple Indexes have been combined, this works as if the Blocks - * were in a single Stream. - */ -extern LZMA_API(lzma_vli) lzma_index_stream_size(const lzma_index *i) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Get the total size of the file - * - * When no Indexes have been combined with lzma_index_cat(), this function is - * identical to lzma_index_stream_size(). If multiple Indexes have been - * combined, this includes also the headers of each separate Stream and the - * possible Stream Padding fields. - */ -extern LZMA_API(lzma_vli) lzma_index_file_size(const lzma_index *i) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Get the uncompressed size of the Stream - */ -extern LZMA_API(lzma_vli) lzma_index_uncompressed_size(const lzma_index *i) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Get the next Record from the Index - */ -extern LZMA_API(lzma_bool) lzma_index_read( - lzma_index *i, lzma_index_record *record) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Rewind the Index - * - * Rewind the Index so that next call to lzma_index_read() will return the - * first Record. - */ -extern LZMA_API(void) lzma_index_rewind(lzma_index *i) lzma_nothrow; - - -/** - * \brief Locate a Record - * - * When the Index is available, it is possible to do random-access reading - * with granularity of Block size. - * - * \param i Pointer to lzma_index structure - * \param record Pointer to a structure to hold the search results - * \param target Uncompressed target offset which the caller would - * like to locate from the Stream - * - * If the target is smaller than the uncompressed size of the Stream (can be - * checked with lzma_index_uncompressed_size()): - * - Information about the Record containing the requested uncompressed - * offset is stored into *record. - * - Read offset will be adjusted so that calling lzma_index_read() can be - * used to read subsequent Records. - * - This function returns false. - * - * If target is greater than the uncompressed size of the Stream, *record - * and the read position are not modified, and this function returns true. - */ -extern LZMA_API(lzma_bool) lzma_index_locate( - lzma_index *i, lzma_index_record *record, lzma_vli target) - lzma_nothrow; - - -/** - * \brief Concatenate Indexes of two Streams - * - * Concatenating Indexes is useful when doing random-access reading in - * multi-Stream .xz file, or when combining multiple Streams into single - * Stream. - * - * \param dest Destination Index after which src is appended - * \param src Source Index. If this function succeeds, the - * memory allocated for src is freed or moved to - * be part of dest. - * \param allocator Custom memory allocator; can be NULL to use - * malloc() and free(). - * \param padding Size of the Stream Padding field between Streams. - * This must be a multiple of four. - * - * \return - LZMA_OK: Indexes concatenated successfully. src is now - * a dangling pointer. - * - LZMA_DATA_ERROR: *dest would grow too big. - * - LZMA_MEM_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_index_cat(lzma_index *lzma_restrict dest, - lzma_index *lzma_restrict src, - lzma_allocator *allocator, lzma_vli padding) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Duplicate an Index list - * - * Makes an identical copy of the Index. Also the read position is copied. - * - * \return A copy of the Index, or NULL if memory allocation failed. - */ -extern LZMA_API(lzma_index *) lzma_index_dup( - const lzma_index *i, lzma_allocator *allocator) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Compare if two Index lists are identical - * - * Read positions are not compared. - * - * \return True if *a and *b are equal, false otherwise. - */ -extern LZMA_API(lzma_bool) lzma_index_equal( - const lzma_index *a, const lzma_index *b) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Initialize .xz Index encoder - * - * \param strm Pointer to properly prepared lzma_stream - * \param i Pointer to lzma_index which should be encoded. - * The read position will be at the end of the Index - * after lzma_code() has returned LZMA_STREAM_END. - * - * The only valid action value for lzma_code() is LZMA_RUN. - * - * \return - LZMA_OK: Initialization succeeded, continue with lzma_code(). - * - LZMA_MEM_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_index_encoder(lzma_stream *strm, lzma_index *i) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Initialize .xz Index decoder - * - * \param strm Pointer to properly prepared lzma_stream - * \param i Pointer to a pointer that will be made to point - * to the final decoded Index once lzma_code() has - * returned LZMA_STREAM_END. That is, - * lzma_index_decoder() always takes care of - * allocating a new lzma_index structure, and *i - * doesn't need to be initialized by the caller. - * \param memlimit How much memory the resulting Index is allowed - * to require. - * - * The only valid action value for lzma_code() is LZMA_RUN. - * - * \return - LZMA_OK: Initialization succeeded, continue with lzma_code(). - * - LZMA_MEM_ERROR - * - LZMA_MEMLIMIT_ERROR - * - LZMA_PROG_ERROR - * - * \note The memory usage limit is checked early in the decoding - * (within the first dozen input bytes or so). The actual memory - * is allocated later in smaller pieces. If the memory usage - * limit is modified with lzma_memlimit_set() after a part - * of the Index has already been decoded, the new limit may - * get ignored. - */ -extern LZMA_API(lzma_ret) lzma_index_decoder( - lzma_stream *strm, lzma_index **i, uint64_t memlimit) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Single-call .xz Index encoder - * - * \param i Index to be encoded. The read position will be at - * the end of the Index if encoding succeeds, or at - * unspecified position in case an error occurs. - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_BUF_ERROR: Output buffer is too small. Use - * lzma_index_size() to find out how much output - * space is needed. - * - LZMA_PROG_ERROR - * - * \note This function doesn't take allocator argument since all - * the internal data is allocated on stack. - */ -extern LZMA_API(lzma_ret) lzma_index_buffer_encode(lzma_index *i, - uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow; - - -/** - * \brief Single-call .xz Index decoder - * - * \param i Pointer to a pointer that will be made to point - * to the final decoded Index if decoding is - * successful. That is, lzma_index_buffer_decode() - * always takes care of allocating a new - * lzma_index structure, and *i doesn't need to be - * initialized by the caller. - * \param memlimit Pointer to how much memory the resulting Index - * is allowed to require. The value pointed by - * this pointer is modified if and only if - * LZMA_MEMLIMIT_ERROR is returned. - * \param allocator Pointer to lzma_allocator, or NULL to use malloc() - * \param in Beginning of the input buffer - * \param in_pos The next byte will be read from in[*in_pos]. - * *in_pos is updated only if decoding succeeds. - * \param in_size Size of the input buffer; the first byte that - * won't be read is in[in_size]. - * - * \return - LZMA_OK: Decoding was successful. - * - LZMA_MEM_ERROR - * - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached. - * The minimum required memlimit value was stored to *memlimit. - * - LZMA_DATA_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_index_buffer_decode(lzma_index **i, - uint64_t *memlimit, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size) - lzma_nothrow; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/index_hash.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/index_hash.h deleted file mode 100644 index 94726e7beea..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/index_hash.h +++ /dev/null @@ -1,107 +0,0 @@ -/** - * \file lzma/index_hash.h - * \brief Validates Index by using a hash function - * - * Hashing makes it possible to use constant amount of memory to validate - * Index of arbitrary size. - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - -/** - * \brief Opaque data type to hold the Index hash - */ -typedef struct lzma_index_hash_s lzma_index_hash; - - -/** - * \brief Allocate and initialize a new lzma_index_hash structure - * - * If index_hash is NULL, a new lzma_index_hash structure is allocated, - * initialized, and a pointer to it returned. If allocation fails, NULL - * is returned. - * - * If index_hash is non-NULL, it is reinitialized and the same pointer - * returned. In this case, return value cannot be NULL or a different - * pointer than the index_hash that was given as an argument. - */ -extern LZMA_API(lzma_index_hash *) lzma_index_hash_init( - lzma_index_hash *index_hash, lzma_allocator *allocator) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Deallocate lzma_index_hash structure - */ -extern LZMA_API(void) lzma_index_hash_end( - lzma_index_hash *index_hash, lzma_allocator *allocator) - lzma_nothrow; - - -/** - * \brief Add a new Record to an Index hash - * - * \param index Pointer to a lzma_index_hash structure - * \param unpadded_size Unpadded Size of a Block - * \param uncompressed_size Uncompressed Size of a Block - * - * \return - LZMA_OK - * - LZMA_DATA_ERROR: Compressed or uncompressed size of the - * Stream or size of the Index field would grow too big. - * - LZMA_PROG_ERROR: Invalid arguments or this function is being - * used when lzma_index_hash_decode() has already been used. - */ -extern LZMA_API(lzma_ret) lzma_index_hash_append(lzma_index_hash *index_hash, - lzma_vli unpadded_size, lzma_vli uncompressed_size) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Decode and validate the Index field - * - * After telling the sizes of all Blocks with lzma_index_hash_append(), - * the actual Index field is decoded with this function. Specifically, - * once decoding of the Index field has been started, no more Records - * can be added using lzma_index_hash_append(). - * - * This function doesn't use lzma_stream structure to pass the input data. - * Instead, the input buffer is specified using three arguments. This is - * because it matches better the internal APIs of liblzma. - * - * \param index_hash Pointer to a lzma_index_hash structure - * \param in Pointer to the beginning of the input buffer - * \param in_pos in[*in_pos] is the next byte to process - * \param in_size in[in_size] is the first byte not to process - * - * \return - LZMA_OK: So far good, but more input is needed. - * - LZMA_STREAM_END: Index decoded successfully and it matches - * the Records given with lzma_index_hash_append(). - * - LZMA_DATA_ERROR: Index is corrupt or doesn't match the - * information given with lzma_index_hash_append(). - * - LZMA_BUF_ERROR: Cannot progress because *in_pos >= in_size. - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_index_hash_decode(lzma_index_hash *index_hash, - const uint8_t *in, size_t *in_pos, size_t in_size) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Get the size of the Index field as bytes - * - * This is needed to verify the Backward Size field in the Stream Footer. - */ -extern LZMA_API(lzma_vli) lzma_index_hash_size( - const lzma_index_hash *index_hash) - lzma_nothrow lzma_attr_pure; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/lzma.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/lzma.h deleted file mode 100644 index 28ebbb14b90..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/lzma.h +++ /dev/null @@ -1,410 +0,0 @@ -/** - * \file lzma/lzma.h - * \brief LZMA1 and LZMA2 filters - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief LZMA1 Filter ID - * - * LZMA1 is the very same thing as what was called just LZMA in LZMA Utils, - * 7-Zip, and LZMA SDK. It's called LZMA1 here to prevent developers from - * accidentally using LZMA when they actually want LZMA2. - * - * LZMA1 shouldn't be used for new applications unless you _really_ know - * what you are doing. LZMA2 is almost always a better choice. - */ -#define LZMA_FILTER_LZMA1 LZMA_VLI_C(0x4000000000000001) - -/** - * \brief LZMA2 Filter ID - * - * Usually you want this instead of LZMA1. Compared to LZMA1, LZMA2 adds - * support for LZMA_SYNC_FLUSH, uncompressed chunks (smaller expansion - * when trying to compress uncompressible data), possibility to change - * lc/lp/pb in the middle of encoding, and some other internal improvements. - */ -#define LZMA_FILTER_LZMA2 LZMA_VLI_C(0x21) - - -/** - * \brief Match finders - * - * Match finder has major effect on both speed and compression ratio. - * Usually hash chains are faster than binary trees. - * - * The memory usage formulas are only rough estimates, which are closest to - * reality when dict_size is a power of two. The formulas are more complex - * in reality, and can also change a little between liblzma versions. Use - * lzma_memusage_encoder() to get more accurate estimate of memory usage. - */ -typedef enum { - LZMA_MF_HC3 = 0x03, - /**< - * \brief Hash Chain with 2- and 3-byte hashing - * - * Minimum nice_len: 3 - * - * Memory usage: - * - dict_size <= 16 MiB: dict_size * 7.5 - * - dict_size > 16 MiB: dict_size * 5.5 + 64 MiB - */ - - LZMA_MF_HC4 = 0x04, - /**< - * \brief Hash Chain with 2-, 3-, and 4-byte hashing - * - * Minimum nice_len: 4 - * - * Memory usage: dict_size * 7.5 - */ - - LZMA_MF_BT2 = 0x12, - /**< - * \brief Binary Tree with 2-byte hashing - * - * Minimum nice_len: 2 - * - * Memory usage: dict_size * 9.5 - */ - - LZMA_MF_BT3 = 0x13, - /**< - * \brief Binary Tree with 2- and 3-byte hashing - * - * Minimum nice_len: 3 - * - * Memory usage: - * - dict_size <= 16 MiB: dict_size * 11.5 - * - dict_size > 16 MiB: dict_size * 9.5 + 64 MiB - */ - - LZMA_MF_BT4 = 0x14 - /**< - * \brief Binary Tree with 2-, 3-, and 4-byte hashing - * - * Minimum nice_len: 4 - * - * Memory usage: dict_size * 11.5 - */ -} lzma_match_finder; - - -/** - * \brief Test if given match finder is supported - * - * Return true if the given match finder is supported by this liblzma build. - * Otherwise false is returned. It is safe to call this with a value that - * isn't listed in lzma_match_finder enumeration; the return value will be - * false. - * - * There is no way to list which match finders are available in this - * particular liblzma version and build. It would be useless, because - * a new match finder, which the application developer wasn't aware, - * could require giving additional options to the encoder that the older - * match finders don't need. - */ -extern LZMA_API(lzma_bool) lzma_mf_is_supported(lzma_match_finder match_finder) - lzma_nothrow lzma_attr_const; - - -/** - * \brief Compression modes - * - * This selects the function used to analyze the data produced by the match - * finder. - */ -typedef enum { - LZMA_MODE_FAST = 1, - /**< - * \brief Fast compression - * - * Fast mode is usually at its best when combined with - * a hash chain match finder. - */ - - LZMA_MODE_NORMAL = 2 - /**< - * \brief Normal compression - * - * This is usually notably slower than fast mode. Use this - * together with binary tree match finders to expose the - * full potential of the LZMA1 or LZMA2 encoder. - */ -} lzma_mode; - - -/** - * \brief Test if given compression mode is supported - * - * Return true if the given compression mode is supported by this liblzma - * build. Otherwise false is returned. It is safe to call this with a value - * that isn't listed in lzma_mode enumeration; the return value will be false. - * - * There is no way to list which modes are available in this particular - * liblzma version and build. It would be useless, because a new compression - * mode, which the application developer wasn't aware, could require giving - * additional options to the encoder that the older modes don't need. - */ -extern LZMA_API(lzma_bool) lzma_mode_is_supported(lzma_mode mode) - lzma_nothrow lzma_attr_const; - - -/** - * \brief Options specific to the LZMA1 and LZMA2 filters - * - * Since LZMA1 and LZMA2 share most of the code, it's simplest to share - * the options structure too. For encoding, all but the reserved variables - * need to be initialized unless specifically mentioned otherwise. - * - * For raw decoding, both LZMA1 and LZMA2 need dict_size, preset_dict, and - * preset_dict_size (if preset_dict != NULL). LZMA1 needs also lc, lp, and pb. - */ -typedef struct { - /** - * \brief Dictionary size in bytes - * - * Dictionary size indicates how many bytes of the recently processed - * uncompressed data is kept in memory. One method to reduce size of - * the uncompressed data is to store distance-length pairs, which - * indicate what data to repeat from the dictionary buffer. Thus, - * the bigger the dictionary, the better the compression ratio - * usually is. - * - * Maximum size of the dictionary depends on multiple things: - * - Memory usage limit - * - Available address space (not a problem on 64-bit systems) - * - Selected match finder (encoder only) - * - * Currently the maximum dictionary size for encoding is 1.5 GiB - * (i.e. (UINT32_C(1) << 30) + (UINT32_C(1) << 29)) even on 64-bit - * systems for certain match finder implementation reasons. In the - * future, there may be match finders that support bigger - * dictionaries. - * - * Decoder already supports dictionaries up to 4 GiB - 1 B (i.e. - * UINT32_MAX), so increasing the maximum dictionary size of the - * encoder won't cause problems for old decoders. - * - * Because extremely small dictionaries sizes would have unneeded - * overhead in the decoder, the minimum dictionary size is 4096 bytes. - * - * \note When decoding, too big dictionary does no other harm - * than wasting memory. - */ - uint32_t dict_size; -# define LZMA_DICT_SIZE_MIN UINT32_C(4096) -# define LZMA_DICT_SIZE_DEFAULT (UINT32_C(1) << 23) - - /** - * \brief Pointer to an initial dictionary - * - * It is possible to initialize the LZ77 history window using - * a preset dictionary. It is useful when compressing many - * similar, relatively small chunks of data independently from - * each other. The preset dictionary should contain typical - * strings that occur in the files being compressed. The most - * probable strings should be near the end of the preset dictionary. - * - * This feature should be used only in special situations. For - * now, it works correctly only with raw encoding and decoding. - * Currently none of the container formats supported by - * liblzma allow preset dictionary when decoding, thus if - * you create a .xz or .lzma file with preset dictionary, it - * cannot be decoded with the regular decoder functions. In the - * future, the .xz format will likely get support for preset - * dictionary though. - */ - const uint8_t *preset_dict; - - /** - * \brief Size of the preset dictionary - * - * Specifies the size of the preset dictionary. If the size is - * bigger than dict_size, only the last dict_size bytes are - * processed. - * - * This variable is read only when preset_dict is not NULL. - * If preset_dict is not NULL but preset_dict_size is zero, - * no preset dictionary is used (identical to only setting - * preset_dict to NULL). - */ - uint32_t preset_dict_size; - - /** - * \brief Number of literal context bits - * - * How many of the highest bits of the previous uncompressed - * eight-bit byte (also known as `literal') are taken into - * account when predicting the bits of the next literal. - * - * \todo Example - * - * There is a limit that applies to literal context bits and literal - * position bits together: lc + lp <= 4. Without this limit the - * decoding could become very slow, which could have security related - * results in some cases like email servers doing virus scanning. - * This limit also simplifies the internal implementation in liblzma. - * - * There may be LZMA1 streams that have lc + lp > 4 (maximum possible - * lc would be 8). It is not possible to decode such streams with - * liblzma. - */ - uint32_t lc; -# define LZMA_LCLP_MIN 0 -# define LZMA_LCLP_MAX 4 -# define LZMA_LC_DEFAULT 3 - - /** - * \brief Number of literal position bits - * - * How many of the lowest bits of the current position (number - * of bytes from the beginning of the uncompressed data) in the - * uncompressed data is taken into account when predicting the - * bits of the next literal (a single eight-bit byte). - * - * \todo Example - */ - uint32_t lp; -# define LZMA_LP_DEFAULT 0 - - /** - * \brief Number of position bits - * - * How many of the lowest bits of the current position in the - * uncompressed data is taken into account when estimating - * probabilities of matches. A match is a sequence of bytes for - * which a matching sequence is found from the dictionary and - * thus can be stored as distance-length pair. - * - * Example: If most of the matches occur at byte positions of - * 8 * n + 3, that is, 3, 11, 19, ... set pb to 3, because 2**3 == 8. - */ - uint32_t pb; -# define LZMA_PB_MIN 0 -# define LZMA_PB_MAX 4 -# define LZMA_PB_DEFAULT 2 - - /** - * \brief Indicate if the options structure is persistent - * - * If this is true, the application must keep this options structure - * available after the LZMA2 encoder has been initialized. With - * persistent structure it is possible to change some encoder options - * in the middle of the encoding process without resetting the encoder. - * - * This option is used only by LZMA2. LZMA1 ignores this and it is - * safe to not initialize this when encoding with LZMA1. - */ - lzma_bool persistent; - - /** Compression mode */ - lzma_mode mode; - - /** - * \brief Nice length of a match - * - * This determines how many bytes the encoder compares from the match - * candidates when looking for the best match. Once a match of at - * least nice_len bytes long is found, the encoder stops looking for - * better condidates and encodes the match. (Naturally, if the found - * match is actually longer than nice_len, the actual length is - * encoded; it's not truncated to nice_len.) - * - * Bigger values usually increase the compression ratio and - * compression time. For most files, 32 to 128 is a good value, - * which gives very good compression ratio at good speed. - * - * The exact minimum value depends on the match finder. The maximum - * is 273, which is the maximum length of a match that LZMA1 and - * LZMA2 can encode. - */ - uint32_t nice_len; - - /** Match finder ID */ - lzma_match_finder mf; - - /** - * \brief Maximum search depth in the match finder - * - * For every input byte, match finder searches through the hash chain - * or binary tree in a loop, each iteration going one step deeper in - * the chain or tree. The searching stops if - * - a match of at least nice_len bytes long is found; - * - all match candidates from the hash chain or binary tree have - * been checked; or - * - maximum search depth is reached. - * - * Maximum search depth is needed to prevent the match finder from - * wasting too much time in case there are lots of short match - * candidates. On the other hand, stopping the search before all - * candidates have been checked can reduce compression ratio. - * - * Setting depth to zero tells liblzma to use an automatic default - * value, that depends on the selected match finder and nice_len. - * The default is in the range [10, 200] or so (it may vary between - * liblzma versions). - * - * Using a bigger depth value than the default can increase - * compression ratio in some cases. There is no strict maximum value, - * but high values (thousands or millions) should be used with care: - * the encoder could remain fast enough with typical input, but - * malicious input could cause the match finder to slow down - * dramatically, possibly creating a denial of service attack. - */ - uint32_t depth; - - /* - * Reserved space to allow possible future extensions without - * breaking the ABI. You should not touch these, because the names - * of these variables may change. These are and will never be used - * with the currently supported options, so it is safe to leave these - * uninitialized. - */ - void *reserved_ptr1; - void *reserved_ptr2; - uint32_t reserved_int1; - uint32_t reserved_int2; - uint32_t reserved_int3; - uint32_t reserved_int4; - uint32_t reserved_int5; - uint32_t reserved_int6; - uint32_t reserved_int7; - uint32_t reserved_int8; - lzma_reserved_enum reserved_enum1; - lzma_reserved_enum reserved_enum2; - lzma_reserved_enum reserved_enum3; - lzma_reserved_enum reserved_enum4; - -} lzma_options_lzma; - - -/** - * \brief Set a compression preset to lzma_options_lzma structure - * - * 0 is the fastest and 9 is the slowest. These match the switches -0 .. -9 - * of the xz command line tool. In addition, it is possible to bitwise-or - * flags to the preset. Currently only LZMA_PRESET_EXTREME is supported. - * The flags are defined in container.h, because the flags are used also - * with lzma_easy_encoder(). - * - * The preset values are subject to changes between liblzma versions. - * - * This function is available only if LZMA1 or LZMA2 encoder has been enabled - * when building liblzma. - */ -extern LZMA_API(lzma_bool) lzma_lzma_preset( - lzma_options_lzma *options, uint32_t preset) lzma_nothrow; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/stream_flags.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/stream_flags.h deleted file mode 100644 index d255bdda15f..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/stream_flags.h +++ /dev/null @@ -1,227 +0,0 @@ -/** - * \file lzma/stream_flags.h - * \brief .xz Stream Header and Stream Footer encoder and decoder - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Size of Stream Header and Stream Footer - * - * Stream Header and Stream Footer have the same size and they are not - * going to change even if a newer version of the .xz file format is - * developed in future. - */ -#define LZMA_STREAM_HEADER_SIZE 12 - - -/** - * \brief Options for encoding/decoding Stream Header and Stream Footer - */ -typedef struct { - /** - * \brief Stream Flags format version - * - * To prevent API and ABI breakages if new features are needed in - * Stream Header or Stream Footer, a version number is used to - * indicate which fields in this structure are in use. For now, - * version must always be zero. With non-zero version, the - * lzma_stream_header_encode() and lzma_stream_footer_encode() - * will return LZMA_OPTIONS_ERROR. - * - * lzma_stream_header_decode() and lzma_stream_footer_decode() - * will always set this to the lowest value that supports all the - * features indicated by the Stream Flags field. The application - * must check that the version number set by the decoding functions - * is supported by the application. Otherwise it is possible that - * the application will decode the Stream incorrectly. - */ - uint32_t version; - - /** - * \brief Backward Size - * - * Backward Size must be a multiple of four bytes. In this Stream - * format version, Backward Size is the size of the Index field. - * - * Backward Size isn't actually part of the Stream Flags field, but - * it is convenient to include in this structure anyway. Backward - * Size is present only in the Stream Footer. There is no need to - * initialize backward_size when encoding Stream Header. - * - * lzma_stream_header_decode() always sets backward_size to - * LZMA_VLI_UNKNOWN so that it is convenient to use - * lzma_stream_flags_compare() when both Stream Header and Stream - * Footer have been decoded. - */ - lzma_vli backward_size; -# define LZMA_BACKWARD_SIZE_MIN 4 -# define LZMA_BACKWARD_SIZE_MAX (LZMA_VLI_C(1) << 34) - - /** - * \brief Check ID - * - * This indicates the type of the integrity check calculated from - * uncompressed data. - */ - lzma_check check; - - /* - * Reserved space to allow possible future extensions without - * breaking the ABI. You should not touch these, because the - * names of these variables may change. - * - * (We will never be able to use all of these since Stream Flags - * is just two bytes plus Backward Size of four bytes. But it's - * nice to have the proper types when they are needed.) - */ - lzma_reserved_enum reserved_enum1; - lzma_reserved_enum reserved_enum2; - lzma_reserved_enum reserved_enum3; - lzma_reserved_enum reserved_enum4; - lzma_reserved_enum reserved_enum5; - lzma_reserved_enum reserved_enum6; - lzma_bool reserved_bool1; - lzma_bool reserved_bool2; - lzma_bool reserved_bool3; - lzma_bool reserved_bool4; - lzma_bool reserved_bool5; - lzma_bool reserved_bool6; - lzma_bool reserved_bool7; - lzma_bool reserved_bool8; - uint32_t reserved_int1; - uint32_t reserved_int2; - uint32_t reserved_int3; - uint32_t reserved_int4; - -} lzma_stream_flags; - - -/** - * \brief Encode Stream Header - * - * \param options Stream Header options to be encoded. - * options->backward_size is ignored and doesn't - * need to be initialized. - * \param out Beginning of the output buffer of - * LZMA_STREAM_HEADER_SIZE bytes. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_OPTIONS_ERROR: options->version is not supported by - * this liblzma version. - * - LZMA_PROG_ERROR: Invalid options. - */ -extern LZMA_API(lzma_ret) lzma_stream_header_encode( - const lzma_stream_flags *options, uint8_t *out) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Encode Stream Footer - * - * \param options Stream Footer options to be encoded. - * \param out Beginning of the output buffer of - * LZMA_STREAM_HEADER_SIZE bytes. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_OPTIONS_ERROR: options->version is not supported by - * this liblzma version. - * - LZMA_PROG_ERROR: Invalid options. - */ -extern LZMA_API(lzma_ret) lzma_stream_footer_encode( - const lzma_stream_flags *options, uint8_t *out) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Decode Stream Header - * - * \param options Stream Header options to be encoded. - * \param in Beginning of the input buffer of - * LZMA_STREAM_HEADER_SIZE bytes. - * - * options->backward_size is always set to LZMA_VLI_UNKNOWN. This is to - * help comparing Stream Flags from Stream Header and Stream Footer with - * lzma_stream_flags_compare(). - * - * \return - LZMA_OK: Decoding was successful. - * - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given - * buffer cannot be Stream Header. - * - LZMA_DATA_ERROR: CRC32 doesn't match, thus the header - * is corrupt. - * - LZMA_OPTIONS_ERROR: Unsupported options are present - * in the header. - * - * \note When decoding .xz files that contain multiple Streams, it may - * make sense to print "file format not recognized" only if - * decoding of the Stream Header of the _first_ Stream gives - * LZMA_FORMAT_ERROR. If non-first Stream Header gives - * LZMA_FORMAT_ERROR, the message used for LZMA_DATA_ERROR is - * probably more appropriate. - * - * For example, Stream decoder in liblzma uses LZMA_DATA_ERROR if - * LZMA_FORMAT_ERROR is returned by lzma_stream_header_decode() - * when decoding non-first Stream. - */ -extern LZMA_API(lzma_ret) lzma_stream_header_decode( - lzma_stream_flags *options, const uint8_t *in) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Decode Stream Footer - * - * \param options Stream Header options to be encoded. - * \param in Beginning of the input buffer of - * LZMA_STREAM_HEADER_SIZE bytes. - * - * \return - LZMA_OK: Decoding was successful. - * - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given - * buffer cannot be Stream Footer. - * - LZMA_DATA_ERROR: CRC32 doesn't match, thus the Stream Footer - * is corrupt. - * - LZMA_OPTIONS_ERROR: Unsupported options are present - * in Stream Footer. - * - * \note If Stream Header was already decoded successfully, but - * decoding Stream Footer returns LZMA_FORMAT_ERROR, the - * application should probably report some other error message - * than "file format not recognized", since the file more likely - * is corrupt (possibly truncated). Stream decoder in liblzma - * uses LZMA_DATA_ERROR in this situation. - */ -extern LZMA_API(lzma_ret) lzma_stream_footer_decode( - lzma_stream_flags *options, const uint8_t *in) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Compare two lzma_stream_flags structures - * - * backward_size values are compared only if both are not - * LZMA_VLI_UNKNOWN. - * - * \return - LZMA_OK: Both are equal. If either had backward_size set - * to LZMA_VLI_UNKNOWN, backward_size values were not - * compared or validated. - * - LZMA_DATA_ERROR: The structures differ. - * - LZMA_OPTIONS_ERROR: version in either structure is greater - * than the maximum supported version (currently zero). - * - LZMA_PROG_ERROR: Invalid value, e.g. invalid check or - * backward_size. - */ -extern LZMA_API(lzma_ret) lzma_stream_flags_compare( - const lzma_stream_flags *a, const lzma_stream_flags *b) - lzma_nothrow lzma_attr_pure; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/subblock.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/subblock.h deleted file mode 100644 index 4ffb049824b..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/subblock.h +++ /dev/null @@ -1,200 +0,0 @@ -/** - * \file lzma/subblock.h - * \brief Subblock filter - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Filter ID - * - * Filter ID of the Subblock filter. This is used as lzma_filter.id. - */ -#define LZMA_FILTER_SUBBLOCK LZMA_VLI_C(0x01) - - -/** - * \brief Subfilter mode - * - * See lzma_options_subblock.subfilter_mode for details. - */ -typedef enum { - LZMA_SUBFILTER_NONE, - /**< - * No Subfilter is in use. - */ - - LZMA_SUBFILTER_SET, - /**< - * New Subfilter has been requested to be initialized. - */ - - LZMA_SUBFILTER_RUN, - /**< - * Subfilter is active. - */ - - LZMA_SUBFILTER_FINISH - /**< - * Subfilter has been requested to be finished. - */ -} lzma_subfilter_mode; - - -/** - * \brief Options for the Subblock filter - * - * Specifying options for the Subblock filter is optional: if the pointer - * options is NULL, no subfilters are allowed and the default value is used - * for subblock_data_size. - */ -typedef struct { - /* Options for encoder and decoder */ - - /** - * \brief Allowing subfilters - * - * If this true, subfilters are allowed. - * - * In the encoder, if this is set to false, subfilter_mode and - * subfilter_options are completely ignored. - */ - lzma_bool allow_subfilters; - - /* Options for encoder only */ - - /** - * \brief Alignment - * - * The Subblock filter encapsulates the input data into Subblocks. - * Each Subblock has a header which takes a few bytes of space. - * When the output of the Subblock encoder is fed to another filter - * that takes advantage of the alignment of the input data (e.g. LZMA), - * the Subblock filter can add padding to keep the actual data parts - * in the Subblocks aligned correctly. - * - * The alignment should be a positive integer. Subblock filter will - * add enough padding between Subblocks so that this is true for - * every payload byte: - * input_offset % alignment == output_offset % alignment - * - * The Subblock filter assumes that the first output byte will be - * written to a position in the output stream that is properly - * aligned. This requirement is automatically met when the start - * offset of the Stream or Block is correctly told to Block or - * Stream encoder. - */ - uint32_t alignment; -# define LZMA_SUBBLOCK_ALIGNMENT_MIN 1 -# define LZMA_SUBBLOCK_ALIGNMENT_MAX 32 -# define LZMA_SUBBLOCK_ALIGNMENT_DEFAULT 4 - - /** - * \brief Size of the Subblock Data part of each Subblock - * - * This value is re-read every time a new Subblock is started. - * - * Bigger values - * - save a few bytes of space; - * - increase latency in the encoder (but no effect for decoding); - * - decrease memory locality (increased cache pollution) in the - * encoder (no effect in decoding). - */ - uint32_t subblock_data_size; -# define LZMA_SUBBLOCK_DATA_SIZE_MIN 1 -# define LZMA_SUBBLOCK_DATA_SIZE_MAX (UINT32_C(1) << 28) -# define LZMA_SUBBLOCK_DATA_SIZE_DEFAULT 4096 - - /** - * \brief Run-length encoder remote control - * - * The Subblock filter has an internal run-length encoder (RLE). It - * can be useful when the data includes byte sequences that repeat - * very many times. The RLE can be used also when a Subfilter is - * in use; the RLE will be applied to the output of the Subfilter. - * - * Note that in contrast to traditional RLE, this RLE is intended to - * be used only when there's a lot of data to be repeated. If the - * input data has e.g. 500 bytes of NULs now and then, this RLE - * is probably useless, because plain LZMA should provide better - * results. - * - * Due to above reasons, it was decided to keep the implementation - * of the RLE very simple. When the rle variable is non-zero, it - * subblock_data_size must be a multiple of rle. Once the Subblock - * encoder has got subblock_data_size bytes of input, it will check - * if the whole buffer of the last subblock_data_size can be - * represented with repeats of chunks having size of rle bytes. - * - * If there are consecutive identical buffers of subblock_data_size - * bytes, they will be encoded using a single repeat entry if - * possible. - * - * If need arises, more advanced RLE can be implemented later - * without breaking API or ABI. - */ - uint32_t rle; -# define LZMA_SUBBLOCK_RLE_OFF 0 -# define LZMA_SUBBLOCK_RLE_MIN 1 -# define LZMA_SUBBLOCK_RLE_MAX 256 - - /** - * \brief Subfilter remote control - * - * When the Subblock filter is initialized, this variable must be - * LZMA_SUBFILTER_NONE or LZMA_SUBFILTER_SET. - * - * When subfilter_mode is LZMA_SUBFILTER_NONE, the application may - * put Subfilter options to subfilter_options structure, and then - * set subfilter_mode to LZMA_SUBFILTER_SET. No new input data will - * be read until the Subfilter has been enabled. Once the Subfilter - * has been enabled, liblzma will set subfilter_mode to - * LZMA_SUBFILTER_RUN. - * - * When subfilter_mode is LZMA_SUBFILTER_RUN, the application may - * set subfilter_mode to LZMA_SUBFILTER_FINISH. All the input - * currently available will be encoded before unsetting the - * Subfilter. Application must not change the amount of available - * input until the Subfilter has finished. Once the Subfilter has - * finished, liblzma will set subfilter_mode to LZMA_SUBFILTER_NONE. - * - * If the intent is to have Subfilter enabled to the very end of - * the data, it is not needed to separately disable Subfilter with - * LZMA_SUBFILTER_FINISH. Using LZMA_FINISH as the second argument - * of lzma_code() will make the Subblock encoder to disable the - * Subfilter once all the data has been ran through the Subfilter. - * - * After the first call with LZMA_SYNC_FLUSH or LZMA_FINISH, the - * application must not change subfilter_mode until LZMA_STREAM_END. - * Setting LZMA_SUBFILTER_SET/LZMA_SUBFILTER_FINISH and - * LZMA_SYNC_FLUSH/LZMA_FINISH _at the same time_ is fine. - * - * \note This variable is ignored if allow_subfilters is false. - */ - lzma_subfilter_mode subfilter_mode; - - /** - * \brief Subfilter and its options - * - * When no Subfilter is used, the data is copied as is into Subblocks. - * Setting a Subfilter allows encoding some parts of the data with - * an additional filter. It is possible to many different Subfilters - * in the same Block, although only one can be used at once. - * - * \note This variable is ignored if allow_subfilters is false. - */ - lzma_filter subfilter_options; - -} lzma_options_subblock; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/version.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/version.h deleted file mode 100644 index 36b7952dce8..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/version.h +++ /dev/null @@ -1,121 +0,0 @@ -/** - * \file lzma/version.h - * \brief Version number - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/* - * Version number splitted in components - */ -#define LZMA_VERSION_MAJOR 4 -#define LZMA_VERSION_MINOR 999 -#define LZMA_VERSION_PATCH 9 -#define LZMA_VERSION_STABILITY LZMA_VERSION_STABILITY_BETA - -#ifndef LZMA_VERSION_COMMIT -# define LZMA_VERSION_COMMIT "" -#endif - - -/* - * Map symbolic stability levels to integers. - */ -#define LZMA_VERSION_STABILITY_ALPHA 0 -#define LZMA_VERSION_STABILITY_BETA 1 -#define LZMA_VERSION_STABILITY_STABLE 2 - - -/** - * \brief Compile-time version number - * - * The version number is of format xyyyzzzs where - * - x = major - * - yyy = minor - * - zzz = revision - * - s indicates stability: 0 = alpha, 1 = beta, 2 = stable - * - * The same xyyyzzz triplet is never reused with different stability levels. - * For example, if 5.1.0alpha has been released, there will never be 5.1.0beta - * or 5.1.0 stable. - * - * \note The version number of liblzma has nothing to with - * the version number of Igor Pavlov's LZMA SDK. - */ -#define LZMA_VERSION (LZMA_VERSION_MAJOR * UINT32_C(10000000) \ - + LZMA_VERSION_MINOR * UINT32_C(10000) \ - + LZMA_VERSION_PATCH * UINT32_C(10) \ - + LZMA_VERSION_STABILITY) - - -/* - * Macros to construct the compile-time version string - */ -#if LZMA_VERSION_STABILITY == LZMA_VERSION_STABILITY_ALPHA -# define LZMA_VERSION_STABILITY_STRING "alpha" -#elif LZMA_VERSION_STABILITY == LZMA_VERSION_STABILITY_BETA -# define LZMA_VERSION_STABILITY_STRING "beta" -#elif LZMA_VERSION_STABILITY == LZMA_VERSION_STABILITY_STABLE -# define LZMA_VERSION_STABILITY_STRING "" -#else -# error Incorrect LZMA_VERSION_STABILITY -#endif - -#define LZMA_VERSION_STRING_C_(major, minor, patch, stability, commit) \ - #major "." #minor "." #patch stability commit - -#define LZMA_VERSION_STRING_C(major, minor, patch, stability, commit) \ - LZMA_VERSION_STRING_C_(major, minor, patch, stability, commit) - - -/** - * \brief Compile-time version as a string - * - * This can be for example "4.999.5alpha", "4.999.8beta", or "5.0.0" (stable - * versions don't have any "stable" suffix). In future, a snapshot built - * from source code repository may include an additional suffix, for example - * "4.999.8beta-21-g1d92". The commit ID won't be available in numeric form - * in LZMA_VERSION macro. - */ -#define LZMA_VERSION_STRING LZMA_VERSION_STRING_C( \ - LZMA_VERSION_MAJOR, LZMA_VERSION_MINOR, \ - LZMA_VERSION_PATCH, LZMA_VERSION_STABILITY_STRING, \ - LZMA_VERSION_COMMIT) - - -/* #ifndef is needed for use with windres (MinGW or Cygwin). */ -#ifndef LZMA_H_INTERNAL_RC - -/** - * \brief Run-time version number as an integer - * - * Return the value of LZMA_VERSION macro at the compile time of liblzma. - * This allows the application to compare if it was built against the same, - * older, or newer version of liblzma that is currently running. - */ -extern LZMA_API(uint32_t) lzma_version_number(void) - lzma_nothrow lzma_attr_const; - - -/** - * \brief Run-time version as a string - * - * This function may be useful if you want to display which version of - * liblzma your application is currently using. - */ -extern LZMA_API(const char *) lzma_version_string(void) - lzma_nothrow lzma_attr_const; - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/vli.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/vli.h deleted file mode 100644 index f002c775165..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/api/lzma/vli.h +++ /dev/null @@ -1,168 +0,0 @@ -/** - * \file lzma/vli.h - * \brief Variable-length integer handling - * - * In the .xz format, most integers are encoded in a variable-length - * representation, which is sometimes called little endian base-128 encoding. - * This saves space when smaller values are more likely than bigger values. - * - * The encoding scheme encodes seven bits to every byte, using minimum - * number of bytes required to represent the given value. Encodings that use - * non-minimum number of bytes are invalid, thus every integer has exactly - * one encoded representation. The maximum number of bits in a VLI is 63, - * thus the vli argument must be at maximum of UINT64_MAX / 2. You should - * use LZMA_VLI_MAX for clarity. - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Maximum supported value of variable-length integer - */ -#define LZMA_VLI_MAX (UINT64_MAX / 2) - -/** - * \brief VLI value to denote that the value is unknown - */ -#define LZMA_VLI_UNKNOWN UINT64_MAX - -/** - * \brief Maximum supported length of variable length integers - */ -#define LZMA_VLI_BYTES_MAX 9 - - -/** - * \brief VLI constant suffix - */ -#define LZMA_VLI_C(n) UINT64_C(n) - - -/** - * \brief Variable-length integer type - * - * This will always be unsigned integer. Valid VLI values are in the range - * [0, LZMA_VLI_MAX]. Unknown value is indicated with LZMA_VLI_UNKNOWN, - * which is the maximum value of the underlaying integer type. - * - * In future, even if lzma_vli is typdefined to something else than uint64_t, - * it is guaranteed that 2 * LZMA_VLI_MAX will not overflow lzma_vli. - * This simplifies integer overflow detection. - */ -typedef uint64_t lzma_vli; - - -/** - * \brief Simple macro to validate variable-length integer - * - * This is useful to test that application has given acceptable values - * for example in the uncompressed_size and compressed_size variables. - * - * \return True if the integer is representable as VLI or if it - * indicates unknown value. - */ -#define lzma_vli_is_valid(vli) \ - ((vli) <= LZMA_VLI_MAX || (vli) == LZMA_VLI_UNKNOWN) - - -/** - * \brief Encode a variable-length integer - * - * This function has two modes: single-call and multi-call. Single-call mode - * encodes the whole integer at once; it is an error if the output buffer is - * too small. Multi-call mode saves the position in *vli_pos, and thus it is - * possible to continue encoding if the buffer becomes full before the whole - * integer has been encoded. - * - * \param vli Integer to be encoded - * \param vli_pos How many VLI-encoded bytes have already been written - * out. When starting to encode a new integer, *vli_pos - * must be set to zero. To use single-call encoding, - * set vli_pos to NULL. - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return Slightly different return values are used in multi-call and - * single-call modes. - * - * Single-call (vli_pos == NULL): - * - LZMA_OK: Integer successfully encoded. - * - LZMA_PROG_ERROR: Arguments are not sane. This can be due - * to too little output space; single-call mode doesn't use - * LZMA_BUF_ERROR, since the application should have checked - * the encoded size with lzma_vli_size(). - * - * Multi-call (vli_pos != NULL): - * - LZMA_OK: So far all OK, but the integer is not - * completely written out yet. - * - LZMA_STREAM_END: Integer successfully encoded. - * - LZMA_BUF_ERROR: No output space was provided. - * - LZMA_PROG_ERROR: Arguments are not sane. - */ -extern LZMA_API(lzma_ret) lzma_vli_encode(lzma_vli vli, - size_t *lzma_restrict vli_pos, uint8_t *lzma_restrict out, - size_t *lzma_restrict out_pos, size_t out_size) lzma_nothrow; - - -/** - * \brief Decode a variable-length integer - * - * Like lzma_vli_encode(), this function has single-call and multi-call modes. - * - * \param vli Pointer to decoded integer. The decoder will - * initialize it to zero when *vli_pos == 0, so - * application isn't required to initialize *vli. - * \param vli_pos How many bytes have already been decoded. When - * starting to decode a new integer, *vli_pos must - * be initialized to zero. To use single-call decoding, - * set this to NULL. - * \param in Beginning of the input buffer - * \param in_pos The next byte will be read from in[*in_pos]. - * \param in_size Size of the input buffer; the first byte that - * won't be read is in[in_size]. - * - * \return Slightly different return values are used in multi-call and - * single-call modes. - * - * Single-call (vli_pos == NULL): - * - LZMA_OK: Integer successfully decoded. - * - LZMA_DATA_ERROR: Integer is corrupt. This includes hitting - * the end of the input buffer before the whole integer was - * decoded; providing no input at all will use LZMA_DATA_ERROR. - * - LZMA_PROG_ERROR: Arguments are not sane. - * - * Multi-call (vli_pos != NULL): - * - LZMA_OK: So far all OK, but the integer is not - * completely decoded yet. - * - LZMA_STREAM_END: Integer successfully decoded. - * - LZMA_DATA_ERROR: Integer is corrupt. - * - LZMA_BUF_ERROR: No input was provided. - * - LZMA_PROG_ERROR: Arguments are not sane. - */ -extern LZMA_API(lzma_ret) lzma_vli_decode(lzma_vli *lzma_restrict vli, - size_t *lzma_restrict vli_pos, const uint8_t *lzma_restrict in, - size_t *lzma_restrict in_pos, size_t in_size) lzma_nothrow; - - -/** - * \brief Get the number of bytes required to encode a VLI - * - * \return Number of bytes on success (1-9). If vli isn't valid, - * zero is returned. - */ -extern LZMA_API(uint32_t) lzma_vli_size(lzma_vli vli) - lzma_nothrow lzma_attr_pure; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/Makefile.inc b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/Makefile.inc deleted file mode 100644 index e4067a9cbcb..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/Makefile.inc +++ /dev/null @@ -1,51 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -EXTRA_DIST += \ - check/crc32_tablegen.c \ - check/crc64_tablegen.c - -liblzma_la_SOURCES += \ - check/check.c \ - check/check.h \ - check/crc_macros.h - -if COND_CHECK_CRC32 -if COND_SMALL -liblzma_la_SOURCES += check/crc32_small.c -else -liblzma_la_SOURCES += \ - check/crc32_table.c \ - check/crc32_table_le.h \ - check/crc32_table_be.h -if COND_ASM_X86 -liblzma_la_SOURCES += check/crc32_x86.S -else -liblzma_la_SOURCES += check/crc32_fast.c -endif -endif -endif - -if COND_CHECK_CRC64 -if COND_SMALL -liblzma_la_SOURCES += check/crc64_small.c -else -liblzma_la_SOURCES += \ - check/crc64_table.c \ - check/crc64_table_le.h \ - check/crc64_table_be.h -if COND_ASM_X86 -liblzma_la_SOURCES += check/crc64_x86.S -else -liblzma_la_SOURCES += check/crc64_fast.c -endif -endif -endif - -if COND_CHECK_SHA256 -liblzma_la_SOURCES += check/sha256.c -endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/check.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/check.c deleted file mode 100644 index ba8622e6376..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/check.c +++ /dev/null @@ -1,174 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file check.c -/// \brief Single API to access different integrity checks -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "check.h" - - -extern LZMA_API(lzma_bool) -lzma_check_is_supported(lzma_check type) -{ - if ((unsigned int)(type) > LZMA_CHECK_ID_MAX) - return false; - - static const lzma_bool available_checks[LZMA_CHECK_ID_MAX + 1] = { - true, // LZMA_CHECK_NONE - -#ifdef HAVE_CHECK_CRC32 - true, -#else - false, -#endif - - false, // Reserved - false, // Reserved - -#ifdef HAVE_CHECK_CRC64 - true, -#else - false, -#endif - - false, // Reserved - false, // Reserved - false, // Reserved - false, // Reserved - false, // Reserved - -#ifdef HAVE_CHECK_SHA256 - true, -#else - false, -#endif - - false, // Reserved - false, // Reserved - false, // Reserved - false, // Reserved - false, // Reserved - }; - - return available_checks[(unsigned int)(type)]; -} - - -extern LZMA_API(uint32_t) -lzma_check_size(lzma_check type) -{ - if ((unsigned int)(type) > LZMA_CHECK_ID_MAX) - return UINT32_MAX; - - // See file-format.txt section 2.1.1.2. - static const uint8_t check_sizes[LZMA_CHECK_ID_MAX + 1] = { - 0, - 4, 4, 4, - 8, 8, 8, - 16, 16, 16, - 32, 32, 32, - 64, 64, 64 - }; - - return check_sizes[(unsigned int)(type)]; -} - - -extern void -lzma_check_init(lzma_check_state *check, lzma_check type) -{ - switch (type) { - case LZMA_CHECK_NONE: - break; - -#ifdef HAVE_CHECK_CRC32 - case LZMA_CHECK_CRC32: - check->state.crc32 = 0; - break; -#endif - -#ifdef HAVE_CHECK_CRC64 - case LZMA_CHECK_CRC64: - check->state.crc64 = 0; - break; -#endif - -#ifdef HAVE_CHECK_SHA256 - case LZMA_CHECK_SHA256: - lzma_sha256_init(check); - break; -#endif - - default: - break; - } - - return; -} - - -extern void -lzma_check_update(lzma_check_state *check, lzma_check type, - const uint8_t *buf, size_t size) -{ - switch (type) { -#ifdef HAVE_CHECK_CRC32 - case LZMA_CHECK_CRC32: - check->state.crc32 = lzma_crc32(buf, size, check->state.crc32); - break; -#endif - -#ifdef HAVE_CHECK_CRC64 - case LZMA_CHECK_CRC64: - check->state.crc64 = lzma_crc64(buf, size, check->state.crc64); - break; -#endif - -#ifdef HAVE_CHECK_SHA256 - case LZMA_CHECK_SHA256: - lzma_sha256_update(buf, size, check); - break; -#endif - - default: - break; - } - - return; -} - - -extern void -lzma_check_finish(lzma_check_state *check, lzma_check type) -{ - switch (type) { -#ifdef HAVE_CHECK_CRC32 - case LZMA_CHECK_CRC32: - check->buffer.u32[0] = integer_le_32(check->state.crc32); - break; -#endif - -#ifdef HAVE_CHECK_CRC64 - case LZMA_CHECK_CRC64: - check->buffer.u64[0] = integer_le_64(check->state.crc64); - break; -#endif - -#ifdef HAVE_CHECK_SHA256 - case LZMA_CHECK_SHA256: - lzma_sha256_finish(check); - break; -#endif - - default: - break; - } - - return; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/check.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/check.h deleted file mode 100644 index e100d2b8530..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/check.h +++ /dev/null @@ -1,95 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file check.h -/// \brief Internal API to different integrity check functions -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_CHECK_H -#define LZMA_CHECK_H - -#include "common.h" - - -// Index hashing needs the best possible hash function (preferably -// a cryptographic hash) for maximum reliability. -#if defined(HAVE_CHECK_SHA256) -# define LZMA_CHECK_BEST LZMA_CHECK_SHA256 -#elif defined(HAVE_CHECK_CRC64) -# define LZMA_CHECK_BEST LZMA_CHECK_CRC64 -#else -# define LZMA_CHECK_BEST LZMA_CHECK_CRC32 -#endif - - -/// \brief Structure to hold internal state of the check being calculated -/// -/// \note This is not in the public API because this structure may -/// change in future if new integrity check algorithms are added. -typedef struct { - /// Buffer to hold the final result and a temporary buffer for SHA256. - union { - uint8_t u8[64]; - uint32_t u32[16]; - uint64_t u64[8]; - } buffer; - - /// Check-specific data - union { - uint32_t crc32; - uint64_t crc64; - - struct { - /// Internal state - uint32_t state[8]; - - /// Size of the message excluding padding - uint64_t size; - } sha256; - } state; - -} lzma_check_state; - - -/// lzma_crc32_table[0] is needed by LZ encoder so we need to keep -/// the array two-dimensional. -#ifdef HAVE_SMALL -extern uint32_t lzma_crc32_table[1][256]; -extern void lzma_crc32_init(void); -#else -extern const uint32_t lzma_crc32_table[8][256]; -extern const uint64_t lzma_crc64_table[4][256]; -#endif - - -/// \brief Initialize *check depending on type -/// -/// \return LZMA_OK on success. LZMA_UNSUPPORTED_CHECK if the type is not -/// supported by the current version or build of liblzma. -/// LZMA_PROG_ERROR if type > LZMA_CHECK_ID_MAX. -extern void lzma_check_init(lzma_check_state *check, lzma_check type); - -/// Update the check state -extern void lzma_check_update(lzma_check_state *check, lzma_check type, - const uint8_t *buf, size_t size); - -/// Finish the check calculation and store the result to check->buffer.u8. -extern void lzma_check_finish(lzma_check_state *check, lzma_check type); - - -/// Prepare SHA-256 state for new input. -extern void lzma_sha256_init(lzma_check_state *check); - -/// Update the SHA-256 hash state -extern void lzma_sha256_update( - const uint8_t *buf, size_t size, lzma_check_state *check); - -/// Finish the SHA-256 calculation and store the result to check->buffer.u8. -extern void lzma_sha256_finish(lzma_check_state *check); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_fast.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_fast.c deleted file mode 100644 index a308eff5829..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_fast.c +++ /dev/null @@ -1,82 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc32.c -/// \brief CRC32 calculation -/// -/// Calculate the CRC32 using the slice-by-eight algorithm. -/// It is explained in this document: -/// http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf -/// The code in this file is not the same as in Intel's paper, but -/// the basic principle is identical. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "check.h" -#include "crc_macros.h" - - -// If you make any changes, do some bench marking! Seemingly unrelated -// changes can very easily ruin the performance (and very probably is -// very compiler dependent). -extern LZMA_API(uint32_t) -lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc) -{ - crc = ~crc; - -#ifdef WORDS_BIGENDIAN - crc = bswap_32(crc); -#endif - - if (size > 8) { - // Fix the alignment, if needed. The if statement above - // ensures that this won't read past the end of buf[]. - while ((uintptr_t)(buf) & 7) { - crc = lzma_crc32_table[0][*buf++ ^ A(crc)] ^ S8(crc); - --size; - } - - // Calculate the position where to stop. - const uint8_t *const limit = buf + (size & ~(size_t)(7)); - - // Calculate how many bytes must be calculated separately - // before returning the result. - size &= (size_t)(7); - - // Calculate the CRC32 using the slice-by-eight algorithm. - while (buf < limit) { - crc ^= *(uint32_t *)(buf); - buf += 4; - - crc = lzma_crc32_table[7][A(crc)] - ^ lzma_crc32_table[6][B(crc)] - ^ lzma_crc32_table[5][C(crc)] - ^ lzma_crc32_table[4][D(crc)]; - - const uint32_t tmp = *(uint32_t *)(buf); - buf += 4; - - // At least with some compilers, it is critical for - // performance, that the crc variable is XORed - // between the two table-lookup pairs. - crc = lzma_crc32_table[3][A(tmp)] - ^ lzma_crc32_table[2][B(tmp)] - ^ crc - ^ lzma_crc32_table[1][C(tmp)] - ^ lzma_crc32_table[0][D(tmp)]; - } - } - - while (size-- != 0) - crc = lzma_crc32_table[0][*buf++ ^ A(crc)] ^ S8(crc); - -#ifdef WORDS_BIGENDIAN - crc = bswap_32(crc); -#endif - - return ~crc; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_small.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_small.c deleted file mode 100644 index 5f8a3286878..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_small.c +++ /dev/null @@ -1,61 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc32_small.c -/// \brief CRC32 calculation (size-optimized) -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "check.h" - - -uint32_t lzma_crc32_table[1][256]; - - -static void -crc32_init(void) -{ - static const uint32_t poly32 = UINT32_C(0xEDB88320); - - for (size_t b = 0; b < 256; ++b) { - uint32_t r = b; - for (size_t i = 0; i < 8; ++i) { - if (r & 1) - r = (r >> 1) ^ poly32; - else - r >>= 1; - } - - lzma_crc32_table[0][b] = r; - } - - return; -} - - -extern void -lzma_crc32_init(void) -{ - mythread_once(crc32_init); - return; -} - - -extern LZMA_API(uint32_t) -lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc) -{ - lzma_crc32_init(); - - crc = ~crc; - - while (size != 0) { - crc = lzma_crc32_table[0][*buf++ ^ (crc & 0xFF)] ^ (crc >> 8); - --size; - } - - return ~crc; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_table.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_table.c deleted file mode 100644 index 368874eb79d..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_table.c +++ /dev/null @@ -1,19 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc32_table.c -/// \brief Precalculated CRC32 table with correct endianness -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - -#ifdef WORDS_BIGENDIAN -# include "crc32_table_be.h" -#else -# include "crc32_table_le.h" -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_table_be.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_table_be.h deleted file mode 100644 index c483cb670dc..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_table_be.h +++ /dev/null @@ -1,525 +0,0 @@ -/* This file has been automatically generated by crc32_tablegen.c. */ - -const uint32_t lzma_crc32_table[8][256] = { - { - 0x00000000, 0x96300777, 0x2C610EEE, 0xBA510999, - 0x19C46D07, 0x8FF46A70, 0x35A563E9, 0xA395649E, - 0x3288DB0E, 0xA4B8DC79, 0x1EE9D5E0, 0x88D9D297, - 0x2B4CB609, 0xBD7CB17E, 0x072DB8E7, 0x911DBF90, - 0x6410B71D, 0xF220B06A, 0x4871B9F3, 0xDE41BE84, - 0x7DD4DA1A, 0xEBE4DD6D, 0x51B5D4F4, 0xC785D383, - 0x56986C13, 0xC0A86B64, 0x7AF962FD, 0xECC9658A, - 0x4F5C0114, 0xD96C0663, 0x633D0FFA, 0xF50D088D, - 0xC8206E3B, 0x5E10694C, 0xE44160D5, 0x727167A2, - 0xD1E4033C, 0x47D4044B, 0xFD850DD2, 0x6BB50AA5, - 0xFAA8B535, 0x6C98B242, 0xD6C9BBDB, 0x40F9BCAC, - 0xE36CD832, 0x755CDF45, 0xCF0DD6DC, 0x593DD1AB, - 0xAC30D926, 0x3A00DE51, 0x8051D7C8, 0x1661D0BF, - 0xB5F4B421, 0x23C4B356, 0x9995BACF, 0x0FA5BDB8, - 0x9EB80228, 0x0888055F, 0xB2D90CC6, 0x24E90BB1, - 0x877C6F2F, 0x114C6858, 0xAB1D61C1, 0x3D2D66B6, - 0x9041DC76, 0x0671DB01, 0xBC20D298, 0x2A10D5EF, - 0x8985B171, 0x1FB5B606, 0xA5E4BF9F, 0x33D4B8E8, - 0xA2C90778, 0x34F9000F, 0x8EA80996, 0x18980EE1, - 0xBB0D6A7F, 0x2D3D6D08, 0x976C6491, 0x015C63E6, - 0xF4516B6B, 0x62616C1C, 0xD8306585, 0x4E0062F2, - 0xED95066C, 0x7BA5011B, 0xC1F40882, 0x57C40FF5, - 0xC6D9B065, 0x50E9B712, 0xEAB8BE8B, 0x7C88B9FC, - 0xDF1DDD62, 0x492DDA15, 0xF37CD38C, 0x654CD4FB, - 0x5861B24D, 0xCE51B53A, 0x7400BCA3, 0xE230BBD4, - 0x41A5DF4A, 0xD795D83D, 0x6DC4D1A4, 0xFBF4D6D3, - 0x6AE96943, 0xFCD96E34, 0x468867AD, 0xD0B860DA, - 0x732D0444, 0xE51D0333, 0x5F4C0AAA, 0xC97C0DDD, - 0x3C710550, 0xAA410227, 0x10100BBE, 0x86200CC9, - 0x25B56857, 0xB3856F20, 0x09D466B9, 0x9FE461CE, - 0x0EF9DE5E, 0x98C9D929, 0x2298D0B0, 0xB4A8D7C7, - 0x173DB359, 0x810DB42E, 0x3B5CBDB7, 0xAD6CBAC0, - 0x2083B8ED, 0xB6B3BF9A, 0x0CE2B603, 0x9AD2B174, - 0x3947D5EA, 0xAF77D29D, 0x1526DB04, 0x8316DC73, - 0x120B63E3, 0x843B6494, 0x3E6A6D0D, 0xA85A6A7A, - 0x0BCF0EE4, 0x9DFF0993, 0x27AE000A, 0xB19E077D, - 0x44930FF0, 0xD2A30887, 0x68F2011E, 0xFEC20669, - 0x5D5762F7, 0xCB676580, 0x71366C19, 0xE7066B6E, - 0x761BD4FE, 0xE02BD389, 0x5A7ADA10, 0xCC4ADD67, - 0x6FDFB9F9, 0xF9EFBE8E, 0x43BEB717, 0xD58EB060, - 0xE8A3D6D6, 0x7E93D1A1, 0xC4C2D838, 0x52F2DF4F, - 0xF167BBD1, 0x6757BCA6, 0xDD06B53F, 0x4B36B248, - 0xDA2B0DD8, 0x4C1B0AAF, 0xF64A0336, 0x607A0441, - 0xC3EF60DF, 0x55DF67A8, 0xEF8E6E31, 0x79BE6946, - 0x8CB361CB, 0x1A8366BC, 0xA0D26F25, 0x36E26852, - 0x95770CCC, 0x03470BBB, 0xB9160222, 0x2F260555, - 0xBE3BBAC5, 0x280BBDB2, 0x925AB42B, 0x046AB35C, - 0xA7FFD7C2, 0x31CFD0B5, 0x8B9ED92C, 0x1DAEDE5B, - 0xB0C2649B, 0x26F263EC, 0x9CA36A75, 0x0A936D02, - 0xA906099C, 0x3F360EEB, 0x85670772, 0x13570005, - 0x824ABF95, 0x147AB8E2, 0xAE2BB17B, 0x381BB60C, - 0x9B8ED292, 0x0DBED5E5, 0xB7EFDC7C, 0x21DFDB0B, - 0xD4D2D386, 0x42E2D4F1, 0xF8B3DD68, 0x6E83DA1F, - 0xCD16BE81, 0x5B26B9F6, 0xE177B06F, 0x7747B718, - 0xE65A0888, 0x706A0FFF, 0xCA3B0666, 0x5C0B0111, - 0xFF9E658F, 0x69AE62F8, 0xD3FF6B61, 0x45CF6C16, - 0x78E20AA0, 0xEED20DD7, 0x5483044E, 0xC2B30339, - 0x612667A7, 0xF71660D0, 0x4D476949, 0xDB776E3E, - 0x4A6AD1AE, 0xDC5AD6D9, 0x660BDF40, 0xF03BD837, - 0x53AEBCA9, 0xC59EBBDE, 0x7FCFB247, 0xE9FFB530, - 0x1CF2BDBD, 0x8AC2BACA, 0x3093B353, 0xA6A3B424, - 0x0536D0BA, 0x9306D7CD, 0x2957DE54, 0xBF67D923, - 0x2E7A66B3, 0xB84A61C4, 0x021B685D, 0x942B6F2A, - 0x37BE0BB4, 0xA18E0CC3, 0x1BDF055A, 0x8DEF022D - }, { - 0x00000000, 0x41311B19, 0x82623632, 0xC3532D2B, - 0x04C56C64, 0x45F4777D, 0x86A75A56, 0xC796414F, - 0x088AD9C8, 0x49BBC2D1, 0x8AE8EFFA, 0xCBD9F4E3, - 0x0C4FB5AC, 0x4D7EAEB5, 0x8E2D839E, 0xCF1C9887, - 0x5112C24A, 0x1023D953, 0xD370F478, 0x9241EF61, - 0x55D7AE2E, 0x14E6B537, 0xD7B5981C, 0x96848305, - 0x59981B82, 0x18A9009B, 0xDBFA2DB0, 0x9ACB36A9, - 0x5D5D77E6, 0x1C6C6CFF, 0xDF3F41D4, 0x9E0E5ACD, - 0xA2248495, 0xE3159F8C, 0x2046B2A7, 0x6177A9BE, - 0xA6E1E8F1, 0xE7D0F3E8, 0x2483DEC3, 0x65B2C5DA, - 0xAAAE5D5D, 0xEB9F4644, 0x28CC6B6F, 0x69FD7076, - 0xAE6B3139, 0xEF5A2A20, 0x2C09070B, 0x6D381C12, - 0xF33646DF, 0xB2075DC6, 0x715470ED, 0x30656BF4, - 0xF7F32ABB, 0xB6C231A2, 0x75911C89, 0x34A00790, - 0xFBBC9F17, 0xBA8D840E, 0x79DEA925, 0x38EFB23C, - 0xFF79F373, 0xBE48E86A, 0x7D1BC541, 0x3C2ADE58, - 0x054F79F0, 0x447E62E9, 0x872D4FC2, 0xC61C54DB, - 0x018A1594, 0x40BB0E8D, 0x83E823A6, 0xC2D938BF, - 0x0DC5A038, 0x4CF4BB21, 0x8FA7960A, 0xCE968D13, - 0x0900CC5C, 0x4831D745, 0x8B62FA6E, 0xCA53E177, - 0x545DBBBA, 0x156CA0A3, 0xD63F8D88, 0x970E9691, - 0x5098D7DE, 0x11A9CCC7, 0xD2FAE1EC, 0x93CBFAF5, - 0x5CD76272, 0x1DE6796B, 0xDEB55440, 0x9F844F59, - 0x58120E16, 0x1923150F, 0xDA703824, 0x9B41233D, - 0xA76BFD65, 0xE65AE67C, 0x2509CB57, 0x6438D04E, - 0xA3AE9101, 0xE29F8A18, 0x21CCA733, 0x60FDBC2A, - 0xAFE124AD, 0xEED03FB4, 0x2D83129F, 0x6CB20986, - 0xAB2448C9, 0xEA1553D0, 0x29467EFB, 0x687765E2, - 0xF6793F2F, 0xB7482436, 0x741B091D, 0x352A1204, - 0xF2BC534B, 0xB38D4852, 0x70DE6579, 0x31EF7E60, - 0xFEF3E6E7, 0xBFC2FDFE, 0x7C91D0D5, 0x3DA0CBCC, - 0xFA368A83, 0xBB07919A, 0x7854BCB1, 0x3965A7A8, - 0x4B98833B, 0x0AA99822, 0xC9FAB509, 0x88CBAE10, - 0x4F5DEF5F, 0x0E6CF446, 0xCD3FD96D, 0x8C0EC274, - 0x43125AF3, 0x022341EA, 0xC1706CC1, 0x804177D8, - 0x47D73697, 0x06E62D8E, 0xC5B500A5, 0x84841BBC, - 0x1A8A4171, 0x5BBB5A68, 0x98E87743, 0xD9D96C5A, - 0x1E4F2D15, 0x5F7E360C, 0x9C2D1B27, 0xDD1C003E, - 0x120098B9, 0x533183A0, 0x9062AE8B, 0xD153B592, - 0x16C5F4DD, 0x57F4EFC4, 0x94A7C2EF, 0xD596D9F6, - 0xE9BC07AE, 0xA88D1CB7, 0x6BDE319C, 0x2AEF2A85, - 0xED796BCA, 0xAC4870D3, 0x6F1B5DF8, 0x2E2A46E1, - 0xE136DE66, 0xA007C57F, 0x6354E854, 0x2265F34D, - 0xE5F3B202, 0xA4C2A91B, 0x67918430, 0x26A09F29, - 0xB8AEC5E4, 0xF99FDEFD, 0x3ACCF3D6, 0x7BFDE8CF, - 0xBC6BA980, 0xFD5AB299, 0x3E099FB2, 0x7F3884AB, - 0xB0241C2C, 0xF1150735, 0x32462A1E, 0x73773107, - 0xB4E17048, 0xF5D06B51, 0x3683467A, 0x77B25D63, - 0x4ED7FACB, 0x0FE6E1D2, 0xCCB5CCF9, 0x8D84D7E0, - 0x4A1296AF, 0x0B238DB6, 0xC870A09D, 0x8941BB84, - 0x465D2303, 0x076C381A, 0xC43F1531, 0x850E0E28, - 0x42984F67, 0x03A9547E, 0xC0FA7955, 0x81CB624C, - 0x1FC53881, 0x5EF42398, 0x9DA70EB3, 0xDC9615AA, - 0x1B0054E5, 0x5A314FFC, 0x996262D7, 0xD85379CE, - 0x174FE149, 0x567EFA50, 0x952DD77B, 0xD41CCC62, - 0x138A8D2D, 0x52BB9634, 0x91E8BB1F, 0xD0D9A006, - 0xECF37E5E, 0xADC26547, 0x6E91486C, 0x2FA05375, - 0xE836123A, 0xA9070923, 0x6A542408, 0x2B653F11, - 0xE479A796, 0xA548BC8F, 0x661B91A4, 0x272A8ABD, - 0xE0BCCBF2, 0xA18DD0EB, 0x62DEFDC0, 0x23EFE6D9, - 0xBDE1BC14, 0xFCD0A70D, 0x3F838A26, 0x7EB2913F, - 0xB924D070, 0xF815CB69, 0x3B46E642, 0x7A77FD5B, - 0xB56B65DC, 0xF45A7EC5, 0x370953EE, 0x763848F7, - 0xB1AE09B8, 0xF09F12A1, 0x33CC3F8A, 0x72FD2493 - }, { - 0x00000000, 0x376AC201, 0x6ED48403, 0x59BE4602, - 0xDCA80907, 0xEBC2CB06, 0xB27C8D04, 0x85164F05, - 0xB851130E, 0x8F3BD10F, 0xD685970D, 0xE1EF550C, - 0x64F91A09, 0x5393D808, 0x0A2D9E0A, 0x3D475C0B, - 0x70A3261C, 0x47C9E41D, 0x1E77A21F, 0x291D601E, - 0xAC0B2F1B, 0x9B61ED1A, 0xC2DFAB18, 0xF5B56919, - 0xC8F23512, 0xFF98F713, 0xA626B111, 0x914C7310, - 0x145A3C15, 0x2330FE14, 0x7A8EB816, 0x4DE47A17, - 0xE0464D38, 0xD72C8F39, 0x8E92C93B, 0xB9F80B3A, - 0x3CEE443F, 0x0B84863E, 0x523AC03C, 0x6550023D, - 0x58175E36, 0x6F7D9C37, 0x36C3DA35, 0x01A91834, - 0x84BF5731, 0xB3D59530, 0xEA6BD332, 0xDD011133, - 0x90E56B24, 0xA78FA925, 0xFE31EF27, 0xC95B2D26, - 0x4C4D6223, 0x7B27A022, 0x2299E620, 0x15F32421, - 0x28B4782A, 0x1FDEBA2B, 0x4660FC29, 0x710A3E28, - 0xF41C712D, 0xC376B32C, 0x9AC8F52E, 0xADA2372F, - 0xC08D9A70, 0xF7E75871, 0xAE591E73, 0x9933DC72, - 0x1C259377, 0x2B4F5176, 0x72F11774, 0x459BD575, - 0x78DC897E, 0x4FB64B7F, 0x16080D7D, 0x2162CF7C, - 0xA4748079, 0x931E4278, 0xCAA0047A, 0xFDCAC67B, - 0xB02EBC6C, 0x87447E6D, 0xDEFA386F, 0xE990FA6E, - 0x6C86B56B, 0x5BEC776A, 0x02523168, 0x3538F369, - 0x087FAF62, 0x3F156D63, 0x66AB2B61, 0x51C1E960, - 0xD4D7A665, 0xE3BD6464, 0xBA032266, 0x8D69E067, - 0x20CBD748, 0x17A11549, 0x4E1F534B, 0x7975914A, - 0xFC63DE4F, 0xCB091C4E, 0x92B75A4C, 0xA5DD984D, - 0x989AC446, 0xAFF00647, 0xF64E4045, 0xC1248244, - 0x4432CD41, 0x73580F40, 0x2AE64942, 0x1D8C8B43, - 0x5068F154, 0x67023355, 0x3EBC7557, 0x09D6B756, - 0x8CC0F853, 0xBBAA3A52, 0xE2147C50, 0xD57EBE51, - 0xE839E25A, 0xDF53205B, 0x86ED6659, 0xB187A458, - 0x3491EB5D, 0x03FB295C, 0x5A456F5E, 0x6D2FAD5F, - 0x801B35E1, 0xB771F7E0, 0xEECFB1E2, 0xD9A573E3, - 0x5CB33CE6, 0x6BD9FEE7, 0x3267B8E5, 0x050D7AE4, - 0x384A26EF, 0x0F20E4EE, 0x569EA2EC, 0x61F460ED, - 0xE4E22FE8, 0xD388EDE9, 0x8A36ABEB, 0xBD5C69EA, - 0xF0B813FD, 0xC7D2D1FC, 0x9E6C97FE, 0xA90655FF, - 0x2C101AFA, 0x1B7AD8FB, 0x42C49EF9, 0x75AE5CF8, - 0x48E900F3, 0x7F83C2F2, 0x263D84F0, 0x115746F1, - 0x944109F4, 0xA32BCBF5, 0xFA958DF7, 0xCDFF4FF6, - 0x605D78D9, 0x5737BAD8, 0x0E89FCDA, 0x39E33EDB, - 0xBCF571DE, 0x8B9FB3DF, 0xD221F5DD, 0xE54B37DC, - 0xD80C6BD7, 0xEF66A9D6, 0xB6D8EFD4, 0x81B22DD5, - 0x04A462D0, 0x33CEA0D1, 0x6A70E6D3, 0x5D1A24D2, - 0x10FE5EC5, 0x27949CC4, 0x7E2ADAC6, 0x494018C7, - 0xCC5657C2, 0xFB3C95C3, 0xA282D3C1, 0x95E811C0, - 0xA8AF4DCB, 0x9FC58FCA, 0xC67BC9C8, 0xF1110BC9, - 0x740744CC, 0x436D86CD, 0x1AD3C0CF, 0x2DB902CE, - 0x4096AF91, 0x77FC6D90, 0x2E422B92, 0x1928E993, - 0x9C3EA696, 0xAB546497, 0xF2EA2295, 0xC580E094, - 0xF8C7BC9F, 0xCFAD7E9E, 0x9613389C, 0xA179FA9D, - 0x246FB598, 0x13057799, 0x4ABB319B, 0x7DD1F39A, - 0x3035898D, 0x075F4B8C, 0x5EE10D8E, 0x698BCF8F, - 0xEC9D808A, 0xDBF7428B, 0x82490489, 0xB523C688, - 0x88649A83, 0xBF0E5882, 0xE6B01E80, 0xD1DADC81, - 0x54CC9384, 0x63A65185, 0x3A181787, 0x0D72D586, - 0xA0D0E2A9, 0x97BA20A8, 0xCE0466AA, 0xF96EA4AB, - 0x7C78EBAE, 0x4B1229AF, 0x12AC6FAD, 0x25C6ADAC, - 0x1881F1A7, 0x2FEB33A6, 0x765575A4, 0x413FB7A5, - 0xC429F8A0, 0xF3433AA1, 0xAAFD7CA3, 0x9D97BEA2, - 0xD073C4B5, 0xE71906B4, 0xBEA740B6, 0x89CD82B7, - 0x0CDBCDB2, 0x3BB10FB3, 0x620F49B1, 0x55658BB0, - 0x6822D7BB, 0x5F4815BA, 0x06F653B8, 0x319C91B9, - 0xB48ADEBC, 0x83E01CBD, 0xDA5E5ABF, 0xED3498BE - }, { - 0x00000000, 0x6567BCB8, 0x8BC809AA, 0xEEAFB512, - 0x5797628F, 0x32F0DE37, 0xDC5F6B25, 0xB938D79D, - 0xEF28B4C5, 0x8A4F087D, 0x64E0BD6F, 0x018701D7, - 0xB8BFD64A, 0xDDD86AF2, 0x3377DFE0, 0x56106358, - 0x9F571950, 0xFA30A5E8, 0x149F10FA, 0x71F8AC42, - 0xC8C07BDF, 0xADA7C767, 0x43087275, 0x266FCECD, - 0x707FAD95, 0x1518112D, 0xFBB7A43F, 0x9ED01887, - 0x27E8CF1A, 0x428F73A2, 0xAC20C6B0, 0xC9477A08, - 0x3EAF32A0, 0x5BC88E18, 0xB5673B0A, 0xD00087B2, - 0x6938502F, 0x0C5FEC97, 0xE2F05985, 0x8797E53D, - 0xD1878665, 0xB4E03ADD, 0x5A4F8FCF, 0x3F283377, - 0x8610E4EA, 0xE3775852, 0x0DD8ED40, 0x68BF51F8, - 0xA1F82BF0, 0xC49F9748, 0x2A30225A, 0x4F579EE2, - 0xF66F497F, 0x9308F5C7, 0x7DA740D5, 0x18C0FC6D, - 0x4ED09F35, 0x2BB7238D, 0xC518969F, 0xA07F2A27, - 0x1947FDBA, 0x7C204102, 0x928FF410, 0xF7E848A8, - 0x3D58149B, 0x583FA823, 0xB6901D31, 0xD3F7A189, - 0x6ACF7614, 0x0FA8CAAC, 0xE1077FBE, 0x8460C306, - 0xD270A05E, 0xB7171CE6, 0x59B8A9F4, 0x3CDF154C, - 0x85E7C2D1, 0xE0807E69, 0x0E2FCB7B, 0x6B4877C3, - 0xA20F0DCB, 0xC768B173, 0x29C70461, 0x4CA0B8D9, - 0xF5986F44, 0x90FFD3FC, 0x7E5066EE, 0x1B37DA56, - 0x4D27B90E, 0x284005B6, 0xC6EFB0A4, 0xA3880C1C, - 0x1AB0DB81, 0x7FD76739, 0x9178D22B, 0xF41F6E93, - 0x03F7263B, 0x66909A83, 0x883F2F91, 0xED589329, - 0x546044B4, 0x3107F80C, 0xDFA84D1E, 0xBACFF1A6, - 0xECDF92FE, 0x89B82E46, 0x67179B54, 0x027027EC, - 0xBB48F071, 0xDE2F4CC9, 0x3080F9DB, 0x55E74563, - 0x9CA03F6B, 0xF9C783D3, 0x176836C1, 0x720F8A79, - 0xCB375DE4, 0xAE50E15C, 0x40FF544E, 0x2598E8F6, - 0x73888BAE, 0x16EF3716, 0xF8408204, 0x9D273EBC, - 0x241FE921, 0x41785599, 0xAFD7E08B, 0xCAB05C33, - 0x3BB659ED, 0x5ED1E555, 0xB07E5047, 0xD519ECFF, - 0x6C213B62, 0x094687DA, 0xE7E932C8, 0x828E8E70, - 0xD49EED28, 0xB1F95190, 0x5F56E482, 0x3A31583A, - 0x83098FA7, 0xE66E331F, 0x08C1860D, 0x6DA63AB5, - 0xA4E140BD, 0xC186FC05, 0x2F294917, 0x4A4EF5AF, - 0xF3762232, 0x96119E8A, 0x78BE2B98, 0x1DD99720, - 0x4BC9F478, 0x2EAE48C0, 0xC001FDD2, 0xA566416A, - 0x1C5E96F7, 0x79392A4F, 0x97969F5D, 0xF2F123E5, - 0x05196B4D, 0x607ED7F5, 0x8ED162E7, 0xEBB6DE5F, - 0x528E09C2, 0x37E9B57A, 0xD9460068, 0xBC21BCD0, - 0xEA31DF88, 0x8F566330, 0x61F9D622, 0x049E6A9A, - 0xBDA6BD07, 0xD8C101BF, 0x366EB4AD, 0x53090815, - 0x9A4E721D, 0xFF29CEA5, 0x11867BB7, 0x74E1C70F, - 0xCDD91092, 0xA8BEAC2A, 0x46111938, 0x2376A580, - 0x7566C6D8, 0x10017A60, 0xFEAECF72, 0x9BC973CA, - 0x22F1A457, 0x479618EF, 0xA939ADFD, 0xCC5E1145, - 0x06EE4D76, 0x6389F1CE, 0x8D2644DC, 0xE841F864, - 0x51792FF9, 0x341E9341, 0xDAB12653, 0xBFD69AEB, - 0xE9C6F9B3, 0x8CA1450B, 0x620EF019, 0x07694CA1, - 0xBE519B3C, 0xDB362784, 0x35999296, 0x50FE2E2E, - 0x99B95426, 0xFCDEE89E, 0x12715D8C, 0x7716E134, - 0xCE2E36A9, 0xAB498A11, 0x45E63F03, 0x208183BB, - 0x7691E0E3, 0x13F65C5B, 0xFD59E949, 0x983E55F1, - 0x2106826C, 0x44613ED4, 0xAACE8BC6, 0xCFA9377E, - 0x38417FD6, 0x5D26C36E, 0xB389767C, 0xD6EECAC4, - 0x6FD61D59, 0x0AB1A1E1, 0xE41E14F3, 0x8179A84B, - 0xD769CB13, 0xB20E77AB, 0x5CA1C2B9, 0x39C67E01, - 0x80FEA99C, 0xE5991524, 0x0B36A036, 0x6E511C8E, - 0xA7166686, 0xC271DA3E, 0x2CDE6F2C, 0x49B9D394, - 0xF0810409, 0x95E6B8B1, 0x7B490DA3, 0x1E2EB11B, - 0x483ED243, 0x2D596EFB, 0xC3F6DBE9, 0xA6916751, - 0x1FA9B0CC, 0x7ACE0C74, 0x9461B966, 0xF10605DE - }, { - 0x00000000, 0xB029603D, 0x6053C07A, 0xD07AA047, - 0xC0A680F5, 0x708FE0C8, 0xA0F5408F, 0x10DC20B2, - 0xC14B7030, 0x7162100D, 0xA118B04A, 0x1131D077, - 0x01EDF0C5, 0xB1C490F8, 0x61BE30BF, 0xD1975082, - 0x8297E060, 0x32BE805D, 0xE2C4201A, 0x52ED4027, - 0x42316095, 0xF21800A8, 0x2262A0EF, 0x924BC0D2, - 0x43DC9050, 0xF3F5F06D, 0x238F502A, 0x93A63017, - 0x837A10A5, 0x33537098, 0xE329D0DF, 0x5300B0E2, - 0x042FC1C1, 0xB406A1FC, 0x647C01BB, 0xD4556186, - 0xC4894134, 0x74A02109, 0xA4DA814E, 0x14F3E173, - 0xC564B1F1, 0x754DD1CC, 0xA537718B, 0x151E11B6, - 0x05C23104, 0xB5EB5139, 0x6591F17E, 0xD5B89143, - 0x86B821A1, 0x3691419C, 0xE6EBE1DB, 0x56C281E6, - 0x461EA154, 0xF637C169, 0x264D612E, 0x96640113, - 0x47F35191, 0xF7DA31AC, 0x27A091EB, 0x9789F1D6, - 0x8755D164, 0x377CB159, 0xE706111E, 0x572F7123, - 0x4958F358, 0xF9719365, 0x290B3322, 0x9922531F, - 0x89FE73AD, 0x39D71390, 0xE9ADB3D7, 0x5984D3EA, - 0x88138368, 0x383AE355, 0xE8404312, 0x5869232F, - 0x48B5039D, 0xF89C63A0, 0x28E6C3E7, 0x98CFA3DA, - 0xCBCF1338, 0x7BE67305, 0xAB9CD342, 0x1BB5B37F, - 0x0B6993CD, 0xBB40F3F0, 0x6B3A53B7, 0xDB13338A, - 0x0A846308, 0xBAAD0335, 0x6AD7A372, 0xDAFEC34F, - 0xCA22E3FD, 0x7A0B83C0, 0xAA712387, 0x1A5843BA, - 0x4D773299, 0xFD5E52A4, 0x2D24F2E3, 0x9D0D92DE, - 0x8DD1B26C, 0x3DF8D251, 0xED827216, 0x5DAB122B, - 0x8C3C42A9, 0x3C152294, 0xEC6F82D3, 0x5C46E2EE, - 0x4C9AC25C, 0xFCB3A261, 0x2CC90226, 0x9CE0621B, - 0xCFE0D2F9, 0x7FC9B2C4, 0xAFB31283, 0x1F9A72BE, - 0x0F46520C, 0xBF6F3231, 0x6F159276, 0xDF3CF24B, - 0x0EABA2C9, 0xBE82C2F4, 0x6EF862B3, 0xDED1028E, - 0xCE0D223C, 0x7E244201, 0xAE5EE246, 0x1E77827B, - 0x92B0E6B1, 0x2299868C, 0xF2E326CB, 0x42CA46F6, - 0x52166644, 0xE23F0679, 0x3245A63E, 0x826CC603, - 0x53FB9681, 0xE3D2F6BC, 0x33A856FB, 0x838136C6, - 0x935D1674, 0x23747649, 0xF30ED60E, 0x4327B633, - 0x102706D1, 0xA00E66EC, 0x7074C6AB, 0xC05DA696, - 0xD0818624, 0x60A8E619, 0xB0D2465E, 0x00FB2663, - 0xD16C76E1, 0x614516DC, 0xB13FB69B, 0x0116D6A6, - 0x11CAF614, 0xA1E39629, 0x7199366E, 0xC1B05653, - 0x969F2770, 0x26B6474D, 0xF6CCE70A, 0x46E58737, - 0x5639A785, 0xE610C7B8, 0x366A67FF, 0x864307C2, - 0x57D45740, 0xE7FD377D, 0x3787973A, 0x87AEF707, - 0x9772D7B5, 0x275BB788, 0xF72117CF, 0x470877F2, - 0x1408C710, 0xA421A72D, 0x745B076A, 0xC4726757, - 0xD4AE47E5, 0x648727D8, 0xB4FD879F, 0x04D4E7A2, - 0xD543B720, 0x656AD71D, 0xB510775A, 0x05391767, - 0x15E537D5, 0xA5CC57E8, 0x75B6F7AF, 0xC59F9792, - 0xDBE815E9, 0x6BC175D4, 0xBBBBD593, 0x0B92B5AE, - 0x1B4E951C, 0xAB67F521, 0x7B1D5566, 0xCB34355B, - 0x1AA365D9, 0xAA8A05E4, 0x7AF0A5A3, 0xCAD9C59E, - 0xDA05E52C, 0x6A2C8511, 0xBA562556, 0x0A7F456B, - 0x597FF589, 0xE95695B4, 0x392C35F3, 0x890555CE, - 0x99D9757C, 0x29F01541, 0xF98AB506, 0x49A3D53B, - 0x983485B9, 0x281DE584, 0xF86745C3, 0x484E25FE, - 0x5892054C, 0xE8BB6571, 0x38C1C536, 0x88E8A50B, - 0xDFC7D428, 0x6FEEB415, 0xBF941452, 0x0FBD746F, - 0x1F6154DD, 0xAF4834E0, 0x7F3294A7, 0xCF1BF49A, - 0x1E8CA418, 0xAEA5C425, 0x7EDF6462, 0xCEF6045F, - 0xDE2A24ED, 0x6E0344D0, 0xBE79E497, 0x0E5084AA, - 0x5D503448, 0xED795475, 0x3D03F432, 0x8D2A940F, - 0x9DF6B4BD, 0x2DDFD480, 0xFDA574C7, 0x4D8C14FA, - 0x9C1B4478, 0x2C322445, 0xFC488402, 0x4C61E43F, - 0x5CBDC48D, 0xEC94A4B0, 0x3CEE04F7, 0x8CC764CA - }, { - 0x00000000, 0xA5D35CCB, 0x0BA1C84D, 0xAE729486, - 0x1642919B, 0xB391CD50, 0x1DE359D6, 0xB830051D, - 0x6D8253EC, 0xC8510F27, 0x66239BA1, 0xC3F0C76A, - 0x7BC0C277, 0xDE139EBC, 0x70610A3A, 0xD5B256F1, - 0x9B02D603, 0x3ED18AC8, 0x90A31E4E, 0x35704285, - 0x8D404798, 0x28931B53, 0x86E18FD5, 0x2332D31E, - 0xF68085EF, 0x5353D924, 0xFD214DA2, 0x58F21169, - 0xE0C21474, 0x451148BF, 0xEB63DC39, 0x4EB080F2, - 0x3605AC07, 0x93D6F0CC, 0x3DA4644A, 0x98773881, - 0x20473D9C, 0x85946157, 0x2BE6F5D1, 0x8E35A91A, - 0x5B87FFEB, 0xFE54A320, 0x502637A6, 0xF5F56B6D, - 0x4DC56E70, 0xE81632BB, 0x4664A63D, 0xE3B7FAF6, - 0xAD077A04, 0x08D426CF, 0xA6A6B249, 0x0375EE82, - 0xBB45EB9F, 0x1E96B754, 0xB0E423D2, 0x15377F19, - 0xC08529E8, 0x65567523, 0xCB24E1A5, 0x6EF7BD6E, - 0xD6C7B873, 0x7314E4B8, 0xDD66703E, 0x78B52CF5, - 0x6C0A580F, 0xC9D904C4, 0x67AB9042, 0xC278CC89, - 0x7A48C994, 0xDF9B955F, 0x71E901D9, 0xD43A5D12, - 0x01880BE3, 0xA45B5728, 0x0A29C3AE, 0xAFFA9F65, - 0x17CA9A78, 0xB219C6B3, 0x1C6B5235, 0xB9B80EFE, - 0xF7088E0C, 0x52DBD2C7, 0xFCA94641, 0x597A1A8A, - 0xE14A1F97, 0x4499435C, 0xEAEBD7DA, 0x4F388B11, - 0x9A8ADDE0, 0x3F59812B, 0x912B15AD, 0x34F84966, - 0x8CC84C7B, 0x291B10B0, 0x87698436, 0x22BAD8FD, - 0x5A0FF408, 0xFFDCA8C3, 0x51AE3C45, 0xF47D608E, - 0x4C4D6593, 0xE99E3958, 0x47ECADDE, 0xE23FF115, - 0x378DA7E4, 0x925EFB2F, 0x3C2C6FA9, 0x99FF3362, - 0x21CF367F, 0x841C6AB4, 0x2A6EFE32, 0x8FBDA2F9, - 0xC10D220B, 0x64DE7EC0, 0xCAACEA46, 0x6F7FB68D, - 0xD74FB390, 0x729CEF5B, 0xDCEE7BDD, 0x793D2716, - 0xAC8F71E7, 0x095C2D2C, 0xA72EB9AA, 0x02FDE561, - 0xBACDE07C, 0x1F1EBCB7, 0xB16C2831, 0x14BF74FA, - 0xD814B01E, 0x7DC7ECD5, 0xD3B57853, 0x76662498, - 0xCE562185, 0x6B857D4E, 0xC5F7E9C8, 0x6024B503, - 0xB596E3F2, 0x1045BF39, 0xBE372BBF, 0x1BE47774, - 0xA3D47269, 0x06072EA2, 0xA875BA24, 0x0DA6E6EF, - 0x4316661D, 0xE6C53AD6, 0x48B7AE50, 0xED64F29B, - 0x5554F786, 0xF087AB4D, 0x5EF53FCB, 0xFB266300, - 0x2E9435F1, 0x8B47693A, 0x2535FDBC, 0x80E6A177, - 0x38D6A46A, 0x9D05F8A1, 0x33776C27, 0x96A430EC, - 0xEE111C19, 0x4BC240D2, 0xE5B0D454, 0x4063889F, - 0xF8538D82, 0x5D80D149, 0xF3F245CF, 0x56211904, - 0x83934FF5, 0x2640133E, 0x883287B8, 0x2DE1DB73, - 0x95D1DE6E, 0x300282A5, 0x9E701623, 0x3BA34AE8, - 0x7513CA1A, 0xD0C096D1, 0x7EB20257, 0xDB615E9C, - 0x63515B81, 0xC682074A, 0x68F093CC, 0xCD23CF07, - 0x189199F6, 0xBD42C53D, 0x133051BB, 0xB6E30D70, - 0x0ED3086D, 0xAB0054A6, 0x0572C020, 0xA0A19CEB, - 0xB41EE811, 0x11CDB4DA, 0xBFBF205C, 0x1A6C7C97, - 0xA25C798A, 0x078F2541, 0xA9FDB1C7, 0x0C2EED0C, - 0xD99CBBFD, 0x7C4FE736, 0xD23D73B0, 0x77EE2F7B, - 0xCFDE2A66, 0x6A0D76AD, 0xC47FE22B, 0x61ACBEE0, - 0x2F1C3E12, 0x8ACF62D9, 0x24BDF65F, 0x816EAA94, - 0x395EAF89, 0x9C8DF342, 0x32FF67C4, 0x972C3B0F, - 0x429E6DFE, 0xE74D3135, 0x493FA5B3, 0xECECF978, - 0x54DCFC65, 0xF10FA0AE, 0x5F7D3428, 0xFAAE68E3, - 0x821B4416, 0x27C818DD, 0x89BA8C5B, 0x2C69D090, - 0x9459D58D, 0x318A8946, 0x9FF81DC0, 0x3A2B410B, - 0xEF9917FA, 0x4A4A4B31, 0xE438DFB7, 0x41EB837C, - 0xF9DB8661, 0x5C08DAAA, 0xF27A4E2C, 0x57A912E7, - 0x19199215, 0xBCCACEDE, 0x12B85A58, 0xB76B0693, - 0x0F5B038E, 0xAA885F45, 0x04FACBC3, 0xA1299708, - 0x749BC1F9, 0xD1489D32, 0x7F3A09B4, 0xDAE9557F, - 0x62D95062, 0xC70A0CA9, 0x6978982F, 0xCCABC4E4 - }, { - 0x00000000, 0xB40B77A6, 0x29119F97, 0x9D1AE831, - 0x13244FF4, 0xA72F3852, 0x3A35D063, 0x8E3EA7C5, - 0x674EEF33, 0xD3459895, 0x4E5F70A4, 0xFA540702, - 0x746AA0C7, 0xC061D761, 0x5D7B3F50, 0xE97048F6, - 0xCE9CDE67, 0x7A97A9C1, 0xE78D41F0, 0x53863656, - 0xDDB89193, 0x69B3E635, 0xF4A90E04, 0x40A279A2, - 0xA9D23154, 0x1DD946F2, 0x80C3AEC3, 0x34C8D965, - 0xBAF67EA0, 0x0EFD0906, 0x93E7E137, 0x27EC9691, - 0x9C39BDCF, 0x2832CA69, 0xB5282258, 0x012355FE, - 0x8F1DF23B, 0x3B16859D, 0xA60C6DAC, 0x12071A0A, - 0xFB7752FC, 0x4F7C255A, 0xD266CD6B, 0x666DBACD, - 0xE8531D08, 0x5C586AAE, 0xC142829F, 0x7549F539, - 0x52A563A8, 0xE6AE140E, 0x7BB4FC3F, 0xCFBF8B99, - 0x41812C5C, 0xF58A5BFA, 0x6890B3CB, 0xDC9BC46D, - 0x35EB8C9B, 0x81E0FB3D, 0x1CFA130C, 0xA8F164AA, - 0x26CFC36F, 0x92C4B4C9, 0x0FDE5CF8, 0xBBD52B5E, - 0x79750B44, 0xCD7E7CE2, 0x506494D3, 0xE46FE375, - 0x6A5144B0, 0xDE5A3316, 0x4340DB27, 0xF74BAC81, - 0x1E3BE477, 0xAA3093D1, 0x372A7BE0, 0x83210C46, - 0x0D1FAB83, 0xB914DC25, 0x240E3414, 0x900543B2, - 0xB7E9D523, 0x03E2A285, 0x9EF84AB4, 0x2AF33D12, - 0xA4CD9AD7, 0x10C6ED71, 0x8DDC0540, 0x39D772E6, - 0xD0A73A10, 0x64AC4DB6, 0xF9B6A587, 0x4DBDD221, - 0xC38375E4, 0x77880242, 0xEA92EA73, 0x5E999DD5, - 0xE54CB68B, 0x5147C12D, 0xCC5D291C, 0x78565EBA, - 0xF668F97F, 0x42638ED9, 0xDF7966E8, 0x6B72114E, - 0x820259B8, 0x36092E1E, 0xAB13C62F, 0x1F18B189, - 0x9126164C, 0x252D61EA, 0xB83789DB, 0x0C3CFE7D, - 0x2BD068EC, 0x9FDB1F4A, 0x02C1F77B, 0xB6CA80DD, - 0x38F42718, 0x8CFF50BE, 0x11E5B88F, 0xA5EECF29, - 0x4C9E87DF, 0xF895F079, 0x658F1848, 0xD1846FEE, - 0x5FBAC82B, 0xEBB1BF8D, 0x76AB57BC, 0xC2A0201A, - 0xF2EA1688, 0x46E1612E, 0xDBFB891F, 0x6FF0FEB9, - 0xE1CE597C, 0x55C52EDA, 0xC8DFC6EB, 0x7CD4B14D, - 0x95A4F9BB, 0x21AF8E1D, 0xBCB5662C, 0x08BE118A, - 0x8680B64F, 0x328BC1E9, 0xAF9129D8, 0x1B9A5E7E, - 0x3C76C8EF, 0x887DBF49, 0x15675778, 0xA16C20DE, - 0x2F52871B, 0x9B59F0BD, 0x0643188C, 0xB2486F2A, - 0x5B3827DC, 0xEF33507A, 0x7229B84B, 0xC622CFED, - 0x481C6828, 0xFC171F8E, 0x610DF7BF, 0xD5068019, - 0x6ED3AB47, 0xDAD8DCE1, 0x47C234D0, 0xF3C94376, - 0x7DF7E4B3, 0xC9FC9315, 0x54E67B24, 0xE0ED0C82, - 0x099D4474, 0xBD9633D2, 0x208CDBE3, 0x9487AC45, - 0x1AB90B80, 0xAEB27C26, 0x33A89417, 0x87A3E3B1, - 0xA04F7520, 0x14440286, 0x895EEAB7, 0x3D559D11, - 0xB36B3AD4, 0x07604D72, 0x9A7AA543, 0x2E71D2E5, - 0xC7019A13, 0x730AEDB5, 0xEE100584, 0x5A1B7222, - 0xD425D5E7, 0x602EA241, 0xFD344A70, 0x493F3DD6, - 0x8B9F1DCC, 0x3F946A6A, 0xA28E825B, 0x1685F5FD, - 0x98BB5238, 0x2CB0259E, 0xB1AACDAF, 0x05A1BA09, - 0xECD1F2FF, 0x58DA8559, 0xC5C06D68, 0x71CB1ACE, - 0xFFF5BD0B, 0x4BFECAAD, 0xD6E4229C, 0x62EF553A, - 0x4503C3AB, 0xF108B40D, 0x6C125C3C, 0xD8192B9A, - 0x56278C5F, 0xE22CFBF9, 0x7F3613C8, 0xCB3D646E, - 0x224D2C98, 0x96465B3E, 0x0B5CB30F, 0xBF57C4A9, - 0x3169636C, 0x856214CA, 0x1878FCFB, 0xAC738B5D, - 0x17A6A003, 0xA3ADD7A5, 0x3EB73F94, 0x8ABC4832, - 0x0482EFF7, 0xB0899851, 0x2D937060, 0x999807C6, - 0x70E84F30, 0xC4E33896, 0x59F9D0A7, 0xEDF2A701, - 0x63CC00C4, 0xD7C77762, 0x4ADD9F53, 0xFED6E8F5, - 0xD93A7E64, 0x6D3109C2, 0xF02BE1F3, 0x44209655, - 0xCA1E3190, 0x7E154636, 0xE30FAE07, 0x5704D9A1, - 0xBE749157, 0x0A7FE6F1, 0x97650EC0, 0x236E7966, - 0xAD50DEA3, 0x195BA905, 0x84414134, 0x304A3692 - }, { - 0x00000000, 0x9E00AACC, 0x7D072542, 0xE3078F8E, - 0xFA0E4A84, 0x640EE048, 0x87096FC6, 0x1909C50A, - 0xB51BE5D3, 0x2B1B4F1F, 0xC81CC091, 0x561C6A5D, - 0x4F15AF57, 0xD115059B, 0x32128A15, 0xAC1220D9, - 0x2B31BB7C, 0xB53111B0, 0x56369E3E, 0xC83634F2, - 0xD13FF1F8, 0x4F3F5B34, 0xAC38D4BA, 0x32387E76, - 0x9E2A5EAF, 0x002AF463, 0xE32D7BED, 0x7D2DD121, - 0x6424142B, 0xFA24BEE7, 0x19233169, 0x87239BA5, - 0x566276F9, 0xC862DC35, 0x2B6553BB, 0xB565F977, - 0xAC6C3C7D, 0x326C96B1, 0xD16B193F, 0x4F6BB3F3, - 0xE379932A, 0x7D7939E6, 0x9E7EB668, 0x007E1CA4, - 0x1977D9AE, 0x87777362, 0x6470FCEC, 0xFA705620, - 0x7D53CD85, 0xE3536749, 0x0054E8C7, 0x9E54420B, - 0x875D8701, 0x195D2DCD, 0xFA5AA243, 0x645A088F, - 0xC8482856, 0x5648829A, 0xB54F0D14, 0x2B4FA7D8, - 0x324662D2, 0xAC46C81E, 0x4F414790, 0xD141ED5C, - 0xEDC29D29, 0x73C237E5, 0x90C5B86B, 0x0EC512A7, - 0x17CCD7AD, 0x89CC7D61, 0x6ACBF2EF, 0xF4CB5823, - 0x58D978FA, 0xC6D9D236, 0x25DE5DB8, 0xBBDEF774, - 0xA2D7327E, 0x3CD798B2, 0xDFD0173C, 0x41D0BDF0, - 0xC6F32655, 0x58F38C99, 0xBBF40317, 0x25F4A9DB, - 0x3CFD6CD1, 0xA2FDC61D, 0x41FA4993, 0xDFFAE35F, - 0x73E8C386, 0xEDE8694A, 0x0EEFE6C4, 0x90EF4C08, - 0x89E68902, 0x17E623CE, 0xF4E1AC40, 0x6AE1068C, - 0xBBA0EBD0, 0x25A0411C, 0xC6A7CE92, 0x58A7645E, - 0x41AEA154, 0xDFAE0B98, 0x3CA98416, 0xA2A92EDA, - 0x0EBB0E03, 0x90BBA4CF, 0x73BC2B41, 0xEDBC818D, - 0xF4B54487, 0x6AB5EE4B, 0x89B261C5, 0x17B2CB09, - 0x909150AC, 0x0E91FA60, 0xED9675EE, 0x7396DF22, - 0x6A9F1A28, 0xF49FB0E4, 0x17983F6A, 0x899895A6, - 0x258AB57F, 0xBB8A1FB3, 0x588D903D, 0xC68D3AF1, - 0xDF84FFFB, 0x41845537, 0xA283DAB9, 0x3C837075, - 0xDA853B53, 0x4485919F, 0xA7821E11, 0x3982B4DD, - 0x208B71D7, 0xBE8BDB1B, 0x5D8C5495, 0xC38CFE59, - 0x6F9EDE80, 0xF19E744C, 0x1299FBC2, 0x8C99510E, - 0x95909404, 0x0B903EC8, 0xE897B146, 0x76971B8A, - 0xF1B4802F, 0x6FB42AE3, 0x8CB3A56D, 0x12B30FA1, - 0x0BBACAAB, 0x95BA6067, 0x76BDEFE9, 0xE8BD4525, - 0x44AF65FC, 0xDAAFCF30, 0x39A840BE, 0xA7A8EA72, - 0xBEA12F78, 0x20A185B4, 0xC3A60A3A, 0x5DA6A0F6, - 0x8CE74DAA, 0x12E7E766, 0xF1E068E8, 0x6FE0C224, - 0x76E9072E, 0xE8E9ADE2, 0x0BEE226C, 0x95EE88A0, - 0x39FCA879, 0xA7FC02B5, 0x44FB8D3B, 0xDAFB27F7, - 0xC3F2E2FD, 0x5DF24831, 0xBEF5C7BF, 0x20F56D73, - 0xA7D6F6D6, 0x39D65C1A, 0xDAD1D394, 0x44D17958, - 0x5DD8BC52, 0xC3D8169E, 0x20DF9910, 0xBEDF33DC, - 0x12CD1305, 0x8CCDB9C9, 0x6FCA3647, 0xF1CA9C8B, - 0xE8C35981, 0x76C3F34D, 0x95C47CC3, 0x0BC4D60F, - 0x3747A67A, 0xA9470CB6, 0x4A408338, 0xD44029F4, - 0xCD49ECFE, 0x53494632, 0xB04EC9BC, 0x2E4E6370, - 0x825C43A9, 0x1C5CE965, 0xFF5B66EB, 0x615BCC27, - 0x7852092D, 0xE652A3E1, 0x05552C6F, 0x9B5586A3, - 0x1C761D06, 0x8276B7CA, 0x61713844, 0xFF719288, - 0xE6785782, 0x7878FD4E, 0x9B7F72C0, 0x057FD80C, - 0xA96DF8D5, 0x376D5219, 0xD46ADD97, 0x4A6A775B, - 0x5363B251, 0xCD63189D, 0x2E649713, 0xB0643DDF, - 0x6125D083, 0xFF257A4F, 0x1C22F5C1, 0x82225F0D, - 0x9B2B9A07, 0x052B30CB, 0xE62CBF45, 0x782C1589, - 0xD43E3550, 0x4A3E9F9C, 0xA9391012, 0x3739BADE, - 0x2E307FD4, 0xB030D518, 0x53375A96, 0xCD37F05A, - 0x4A146BFF, 0xD414C133, 0x37134EBD, 0xA913E471, - 0xB01A217B, 0x2E1A8BB7, 0xCD1D0439, 0x531DAEF5, - 0xFF0F8E2C, 0x610F24E0, 0x8208AB6E, 0x1C0801A2, - 0x0501C4A8, 0x9B016E64, 0x7806E1EA, 0xE6064B26 - } -}; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_table_le.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_table_le.h deleted file mode 100644 index 25f4fc44353..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_table_le.h +++ /dev/null @@ -1,525 +0,0 @@ -/* This file has been automatically generated by crc32_tablegen.c. */ - -const uint32_t lzma_crc32_table[8][256] = { - { - 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, - 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, - 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, - 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, - 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, - 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, - 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, - 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, - 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, - 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, - 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, - 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, - 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, - 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, - 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, - 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, - 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, - 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, - 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, - 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, - 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, - 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, - 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, - 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, - 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, - 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, - 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, - 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, - 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, - 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, - 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, - 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, - 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, - 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, - 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, - 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, - 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, - 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, - 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, - 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, - 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, - 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, - 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, - 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, - 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, - 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, - 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, - 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, - 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, - 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, - 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, - 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, - 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, - 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, - 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, - 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, - 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, - 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, - 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, - 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, - 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, - 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, - 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, - 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D - }, { - 0x00000000, 0x191B3141, 0x32366282, 0x2B2D53C3, - 0x646CC504, 0x7D77F445, 0x565AA786, 0x4F4196C7, - 0xC8D98A08, 0xD1C2BB49, 0xFAEFE88A, 0xE3F4D9CB, - 0xACB54F0C, 0xB5AE7E4D, 0x9E832D8E, 0x87981CCF, - 0x4AC21251, 0x53D92310, 0x78F470D3, 0x61EF4192, - 0x2EAED755, 0x37B5E614, 0x1C98B5D7, 0x05838496, - 0x821B9859, 0x9B00A918, 0xB02DFADB, 0xA936CB9A, - 0xE6775D5D, 0xFF6C6C1C, 0xD4413FDF, 0xCD5A0E9E, - 0x958424A2, 0x8C9F15E3, 0xA7B24620, 0xBEA97761, - 0xF1E8E1A6, 0xE8F3D0E7, 0xC3DE8324, 0xDAC5B265, - 0x5D5DAEAA, 0x44469FEB, 0x6F6BCC28, 0x7670FD69, - 0x39316BAE, 0x202A5AEF, 0x0B07092C, 0x121C386D, - 0xDF4636F3, 0xC65D07B2, 0xED705471, 0xF46B6530, - 0xBB2AF3F7, 0xA231C2B6, 0x891C9175, 0x9007A034, - 0x179FBCFB, 0x0E848DBA, 0x25A9DE79, 0x3CB2EF38, - 0x73F379FF, 0x6AE848BE, 0x41C51B7D, 0x58DE2A3C, - 0xF0794F05, 0xE9627E44, 0xC24F2D87, 0xDB541CC6, - 0x94158A01, 0x8D0EBB40, 0xA623E883, 0xBF38D9C2, - 0x38A0C50D, 0x21BBF44C, 0x0A96A78F, 0x138D96CE, - 0x5CCC0009, 0x45D73148, 0x6EFA628B, 0x77E153CA, - 0xBABB5D54, 0xA3A06C15, 0x888D3FD6, 0x91960E97, - 0xDED79850, 0xC7CCA911, 0xECE1FAD2, 0xF5FACB93, - 0x7262D75C, 0x6B79E61D, 0x4054B5DE, 0x594F849F, - 0x160E1258, 0x0F152319, 0x243870DA, 0x3D23419B, - 0x65FD6BA7, 0x7CE65AE6, 0x57CB0925, 0x4ED03864, - 0x0191AEA3, 0x188A9FE2, 0x33A7CC21, 0x2ABCFD60, - 0xAD24E1AF, 0xB43FD0EE, 0x9F12832D, 0x8609B26C, - 0xC94824AB, 0xD05315EA, 0xFB7E4629, 0xE2657768, - 0x2F3F79F6, 0x362448B7, 0x1D091B74, 0x04122A35, - 0x4B53BCF2, 0x52488DB3, 0x7965DE70, 0x607EEF31, - 0xE7E6F3FE, 0xFEFDC2BF, 0xD5D0917C, 0xCCCBA03D, - 0x838A36FA, 0x9A9107BB, 0xB1BC5478, 0xA8A76539, - 0x3B83984B, 0x2298A90A, 0x09B5FAC9, 0x10AECB88, - 0x5FEF5D4F, 0x46F46C0E, 0x6DD93FCD, 0x74C20E8C, - 0xF35A1243, 0xEA412302, 0xC16C70C1, 0xD8774180, - 0x9736D747, 0x8E2DE606, 0xA500B5C5, 0xBC1B8484, - 0x71418A1A, 0x685ABB5B, 0x4377E898, 0x5A6CD9D9, - 0x152D4F1E, 0x0C367E5F, 0x271B2D9C, 0x3E001CDD, - 0xB9980012, 0xA0833153, 0x8BAE6290, 0x92B553D1, - 0xDDF4C516, 0xC4EFF457, 0xEFC2A794, 0xF6D996D5, - 0xAE07BCE9, 0xB71C8DA8, 0x9C31DE6B, 0x852AEF2A, - 0xCA6B79ED, 0xD37048AC, 0xF85D1B6F, 0xE1462A2E, - 0x66DE36E1, 0x7FC507A0, 0x54E85463, 0x4DF36522, - 0x02B2F3E5, 0x1BA9C2A4, 0x30849167, 0x299FA026, - 0xE4C5AEB8, 0xFDDE9FF9, 0xD6F3CC3A, 0xCFE8FD7B, - 0x80A96BBC, 0x99B25AFD, 0xB29F093E, 0xAB84387F, - 0x2C1C24B0, 0x350715F1, 0x1E2A4632, 0x07317773, - 0x4870E1B4, 0x516BD0F5, 0x7A468336, 0x635DB277, - 0xCBFAD74E, 0xD2E1E60F, 0xF9CCB5CC, 0xE0D7848D, - 0xAF96124A, 0xB68D230B, 0x9DA070C8, 0x84BB4189, - 0x03235D46, 0x1A386C07, 0x31153FC4, 0x280E0E85, - 0x674F9842, 0x7E54A903, 0x5579FAC0, 0x4C62CB81, - 0x8138C51F, 0x9823F45E, 0xB30EA79D, 0xAA1596DC, - 0xE554001B, 0xFC4F315A, 0xD7626299, 0xCE7953D8, - 0x49E14F17, 0x50FA7E56, 0x7BD72D95, 0x62CC1CD4, - 0x2D8D8A13, 0x3496BB52, 0x1FBBE891, 0x06A0D9D0, - 0x5E7EF3EC, 0x4765C2AD, 0x6C48916E, 0x7553A02F, - 0x3A1236E8, 0x230907A9, 0x0824546A, 0x113F652B, - 0x96A779E4, 0x8FBC48A5, 0xA4911B66, 0xBD8A2A27, - 0xF2CBBCE0, 0xEBD08DA1, 0xC0FDDE62, 0xD9E6EF23, - 0x14BCE1BD, 0x0DA7D0FC, 0x268A833F, 0x3F91B27E, - 0x70D024B9, 0x69CB15F8, 0x42E6463B, 0x5BFD777A, - 0xDC656BB5, 0xC57E5AF4, 0xEE530937, 0xF7483876, - 0xB809AEB1, 0xA1129FF0, 0x8A3FCC33, 0x9324FD72 - }, { - 0x00000000, 0x01C26A37, 0x0384D46E, 0x0246BE59, - 0x0709A8DC, 0x06CBC2EB, 0x048D7CB2, 0x054F1685, - 0x0E1351B8, 0x0FD13B8F, 0x0D9785D6, 0x0C55EFE1, - 0x091AF964, 0x08D89353, 0x0A9E2D0A, 0x0B5C473D, - 0x1C26A370, 0x1DE4C947, 0x1FA2771E, 0x1E601D29, - 0x1B2F0BAC, 0x1AED619B, 0x18ABDFC2, 0x1969B5F5, - 0x1235F2C8, 0x13F798FF, 0x11B126A6, 0x10734C91, - 0x153C5A14, 0x14FE3023, 0x16B88E7A, 0x177AE44D, - 0x384D46E0, 0x398F2CD7, 0x3BC9928E, 0x3A0BF8B9, - 0x3F44EE3C, 0x3E86840B, 0x3CC03A52, 0x3D025065, - 0x365E1758, 0x379C7D6F, 0x35DAC336, 0x3418A901, - 0x3157BF84, 0x3095D5B3, 0x32D36BEA, 0x331101DD, - 0x246BE590, 0x25A98FA7, 0x27EF31FE, 0x262D5BC9, - 0x23624D4C, 0x22A0277B, 0x20E69922, 0x2124F315, - 0x2A78B428, 0x2BBADE1F, 0x29FC6046, 0x283E0A71, - 0x2D711CF4, 0x2CB376C3, 0x2EF5C89A, 0x2F37A2AD, - 0x709A8DC0, 0x7158E7F7, 0x731E59AE, 0x72DC3399, - 0x7793251C, 0x76514F2B, 0x7417F172, 0x75D59B45, - 0x7E89DC78, 0x7F4BB64F, 0x7D0D0816, 0x7CCF6221, - 0x798074A4, 0x78421E93, 0x7A04A0CA, 0x7BC6CAFD, - 0x6CBC2EB0, 0x6D7E4487, 0x6F38FADE, 0x6EFA90E9, - 0x6BB5866C, 0x6A77EC5B, 0x68315202, 0x69F33835, - 0x62AF7F08, 0x636D153F, 0x612BAB66, 0x60E9C151, - 0x65A6D7D4, 0x6464BDE3, 0x662203BA, 0x67E0698D, - 0x48D7CB20, 0x4915A117, 0x4B531F4E, 0x4A917579, - 0x4FDE63FC, 0x4E1C09CB, 0x4C5AB792, 0x4D98DDA5, - 0x46C49A98, 0x4706F0AF, 0x45404EF6, 0x448224C1, - 0x41CD3244, 0x400F5873, 0x4249E62A, 0x438B8C1D, - 0x54F16850, 0x55330267, 0x5775BC3E, 0x56B7D609, - 0x53F8C08C, 0x523AAABB, 0x507C14E2, 0x51BE7ED5, - 0x5AE239E8, 0x5B2053DF, 0x5966ED86, 0x58A487B1, - 0x5DEB9134, 0x5C29FB03, 0x5E6F455A, 0x5FAD2F6D, - 0xE1351B80, 0xE0F771B7, 0xE2B1CFEE, 0xE373A5D9, - 0xE63CB35C, 0xE7FED96B, 0xE5B86732, 0xE47A0D05, - 0xEF264A38, 0xEEE4200F, 0xECA29E56, 0xED60F461, - 0xE82FE2E4, 0xE9ED88D3, 0xEBAB368A, 0xEA695CBD, - 0xFD13B8F0, 0xFCD1D2C7, 0xFE976C9E, 0xFF5506A9, - 0xFA1A102C, 0xFBD87A1B, 0xF99EC442, 0xF85CAE75, - 0xF300E948, 0xF2C2837F, 0xF0843D26, 0xF1465711, - 0xF4094194, 0xF5CB2BA3, 0xF78D95FA, 0xF64FFFCD, - 0xD9785D60, 0xD8BA3757, 0xDAFC890E, 0xDB3EE339, - 0xDE71F5BC, 0xDFB39F8B, 0xDDF521D2, 0xDC374BE5, - 0xD76B0CD8, 0xD6A966EF, 0xD4EFD8B6, 0xD52DB281, - 0xD062A404, 0xD1A0CE33, 0xD3E6706A, 0xD2241A5D, - 0xC55EFE10, 0xC49C9427, 0xC6DA2A7E, 0xC7184049, - 0xC25756CC, 0xC3953CFB, 0xC1D382A2, 0xC011E895, - 0xCB4DAFA8, 0xCA8FC59F, 0xC8C97BC6, 0xC90B11F1, - 0xCC440774, 0xCD866D43, 0xCFC0D31A, 0xCE02B92D, - 0x91AF9640, 0x906DFC77, 0x922B422E, 0x93E92819, - 0x96A63E9C, 0x976454AB, 0x9522EAF2, 0x94E080C5, - 0x9FBCC7F8, 0x9E7EADCF, 0x9C381396, 0x9DFA79A1, - 0x98B56F24, 0x99770513, 0x9B31BB4A, 0x9AF3D17D, - 0x8D893530, 0x8C4B5F07, 0x8E0DE15E, 0x8FCF8B69, - 0x8A809DEC, 0x8B42F7DB, 0x89044982, 0x88C623B5, - 0x839A6488, 0x82580EBF, 0x801EB0E6, 0x81DCDAD1, - 0x8493CC54, 0x8551A663, 0x8717183A, 0x86D5720D, - 0xA9E2D0A0, 0xA820BA97, 0xAA6604CE, 0xABA46EF9, - 0xAEEB787C, 0xAF29124B, 0xAD6FAC12, 0xACADC625, - 0xA7F18118, 0xA633EB2F, 0xA4755576, 0xA5B73F41, - 0xA0F829C4, 0xA13A43F3, 0xA37CFDAA, 0xA2BE979D, - 0xB5C473D0, 0xB40619E7, 0xB640A7BE, 0xB782CD89, - 0xB2CDDB0C, 0xB30FB13B, 0xB1490F62, 0xB08B6555, - 0xBBD72268, 0xBA15485F, 0xB853F606, 0xB9919C31, - 0xBCDE8AB4, 0xBD1CE083, 0xBF5A5EDA, 0xBE9834ED - }, { - 0x00000000, 0xB8BC6765, 0xAA09C88B, 0x12B5AFEE, - 0x8F629757, 0x37DEF032, 0x256B5FDC, 0x9DD738B9, - 0xC5B428EF, 0x7D084F8A, 0x6FBDE064, 0xD7018701, - 0x4AD6BFB8, 0xF26AD8DD, 0xE0DF7733, 0x58631056, - 0x5019579F, 0xE8A530FA, 0xFA109F14, 0x42ACF871, - 0xDF7BC0C8, 0x67C7A7AD, 0x75720843, 0xCDCE6F26, - 0x95AD7F70, 0x2D111815, 0x3FA4B7FB, 0x8718D09E, - 0x1ACFE827, 0xA2738F42, 0xB0C620AC, 0x087A47C9, - 0xA032AF3E, 0x188EC85B, 0x0A3B67B5, 0xB28700D0, - 0x2F503869, 0x97EC5F0C, 0x8559F0E2, 0x3DE59787, - 0x658687D1, 0xDD3AE0B4, 0xCF8F4F5A, 0x7733283F, - 0xEAE41086, 0x525877E3, 0x40EDD80D, 0xF851BF68, - 0xF02BF8A1, 0x48979FC4, 0x5A22302A, 0xE29E574F, - 0x7F496FF6, 0xC7F50893, 0xD540A77D, 0x6DFCC018, - 0x359FD04E, 0x8D23B72B, 0x9F9618C5, 0x272A7FA0, - 0xBAFD4719, 0x0241207C, 0x10F48F92, 0xA848E8F7, - 0x9B14583D, 0x23A83F58, 0x311D90B6, 0x89A1F7D3, - 0x1476CF6A, 0xACCAA80F, 0xBE7F07E1, 0x06C36084, - 0x5EA070D2, 0xE61C17B7, 0xF4A9B859, 0x4C15DF3C, - 0xD1C2E785, 0x697E80E0, 0x7BCB2F0E, 0xC377486B, - 0xCB0D0FA2, 0x73B168C7, 0x6104C729, 0xD9B8A04C, - 0x446F98F5, 0xFCD3FF90, 0xEE66507E, 0x56DA371B, - 0x0EB9274D, 0xB6054028, 0xA4B0EFC6, 0x1C0C88A3, - 0x81DBB01A, 0x3967D77F, 0x2BD27891, 0x936E1FF4, - 0x3B26F703, 0x839A9066, 0x912F3F88, 0x299358ED, - 0xB4446054, 0x0CF80731, 0x1E4DA8DF, 0xA6F1CFBA, - 0xFE92DFEC, 0x462EB889, 0x549B1767, 0xEC277002, - 0x71F048BB, 0xC94C2FDE, 0xDBF98030, 0x6345E755, - 0x6B3FA09C, 0xD383C7F9, 0xC1366817, 0x798A0F72, - 0xE45D37CB, 0x5CE150AE, 0x4E54FF40, 0xF6E89825, - 0xAE8B8873, 0x1637EF16, 0x048240F8, 0xBC3E279D, - 0x21E91F24, 0x99557841, 0x8BE0D7AF, 0x335CB0CA, - 0xED59B63B, 0x55E5D15E, 0x47507EB0, 0xFFEC19D5, - 0x623B216C, 0xDA874609, 0xC832E9E7, 0x708E8E82, - 0x28ED9ED4, 0x9051F9B1, 0x82E4565F, 0x3A58313A, - 0xA78F0983, 0x1F336EE6, 0x0D86C108, 0xB53AA66D, - 0xBD40E1A4, 0x05FC86C1, 0x1749292F, 0xAFF54E4A, - 0x322276F3, 0x8A9E1196, 0x982BBE78, 0x2097D91D, - 0x78F4C94B, 0xC048AE2E, 0xD2FD01C0, 0x6A4166A5, - 0xF7965E1C, 0x4F2A3979, 0x5D9F9697, 0xE523F1F2, - 0x4D6B1905, 0xF5D77E60, 0xE762D18E, 0x5FDEB6EB, - 0xC2098E52, 0x7AB5E937, 0x680046D9, 0xD0BC21BC, - 0x88DF31EA, 0x3063568F, 0x22D6F961, 0x9A6A9E04, - 0x07BDA6BD, 0xBF01C1D8, 0xADB46E36, 0x15080953, - 0x1D724E9A, 0xA5CE29FF, 0xB77B8611, 0x0FC7E174, - 0x9210D9CD, 0x2AACBEA8, 0x38191146, 0x80A57623, - 0xD8C66675, 0x607A0110, 0x72CFAEFE, 0xCA73C99B, - 0x57A4F122, 0xEF189647, 0xFDAD39A9, 0x45115ECC, - 0x764DEE06, 0xCEF18963, 0xDC44268D, 0x64F841E8, - 0xF92F7951, 0x41931E34, 0x5326B1DA, 0xEB9AD6BF, - 0xB3F9C6E9, 0x0B45A18C, 0x19F00E62, 0xA14C6907, - 0x3C9B51BE, 0x842736DB, 0x96929935, 0x2E2EFE50, - 0x2654B999, 0x9EE8DEFC, 0x8C5D7112, 0x34E11677, - 0xA9362ECE, 0x118A49AB, 0x033FE645, 0xBB838120, - 0xE3E09176, 0x5B5CF613, 0x49E959FD, 0xF1553E98, - 0x6C820621, 0xD43E6144, 0xC68BCEAA, 0x7E37A9CF, - 0xD67F4138, 0x6EC3265D, 0x7C7689B3, 0xC4CAEED6, - 0x591DD66F, 0xE1A1B10A, 0xF3141EE4, 0x4BA87981, - 0x13CB69D7, 0xAB770EB2, 0xB9C2A15C, 0x017EC639, - 0x9CA9FE80, 0x241599E5, 0x36A0360B, 0x8E1C516E, - 0x866616A7, 0x3EDA71C2, 0x2C6FDE2C, 0x94D3B949, - 0x090481F0, 0xB1B8E695, 0xA30D497B, 0x1BB12E1E, - 0x43D23E48, 0xFB6E592D, 0xE9DBF6C3, 0x516791A6, - 0xCCB0A91F, 0x740CCE7A, 0x66B96194, 0xDE0506F1 - }, { - 0x00000000, 0x3D6029B0, 0x7AC05360, 0x47A07AD0, - 0xF580A6C0, 0xC8E08F70, 0x8F40F5A0, 0xB220DC10, - 0x30704BC1, 0x0D106271, 0x4AB018A1, 0x77D03111, - 0xC5F0ED01, 0xF890C4B1, 0xBF30BE61, 0x825097D1, - 0x60E09782, 0x5D80BE32, 0x1A20C4E2, 0x2740ED52, - 0x95603142, 0xA80018F2, 0xEFA06222, 0xD2C04B92, - 0x5090DC43, 0x6DF0F5F3, 0x2A508F23, 0x1730A693, - 0xA5107A83, 0x98705333, 0xDFD029E3, 0xE2B00053, - 0xC1C12F04, 0xFCA106B4, 0xBB017C64, 0x866155D4, - 0x344189C4, 0x0921A074, 0x4E81DAA4, 0x73E1F314, - 0xF1B164C5, 0xCCD14D75, 0x8B7137A5, 0xB6111E15, - 0x0431C205, 0x3951EBB5, 0x7EF19165, 0x4391B8D5, - 0xA121B886, 0x9C419136, 0xDBE1EBE6, 0xE681C256, - 0x54A11E46, 0x69C137F6, 0x2E614D26, 0x13016496, - 0x9151F347, 0xAC31DAF7, 0xEB91A027, 0xD6F18997, - 0x64D15587, 0x59B17C37, 0x1E1106E7, 0x23712F57, - 0x58F35849, 0x659371F9, 0x22330B29, 0x1F532299, - 0xAD73FE89, 0x9013D739, 0xD7B3ADE9, 0xEAD38459, - 0x68831388, 0x55E33A38, 0x124340E8, 0x2F236958, - 0x9D03B548, 0xA0639CF8, 0xE7C3E628, 0xDAA3CF98, - 0x3813CFCB, 0x0573E67B, 0x42D39CAB, 0x7FB3B51B, - 0xCD93690B, 0xF0F340BB, 0xB7533A6B, 0x8A3313DB, - 0x0863840A, 0x3503ADBA, 0x72A3D76A, 0x4FC3FEDA, - 0xFDE322CA, 0xC0830B7A, 0x872371AA, 0xBA43581A, - 0x9932774D, 0xA4525EFD, 0xE3F2242D, 0xDE920D9D, - 0x6CB2D18D, 0x51D2F83D, 0x167282ED, 0x2B12AB5D, - 0xA9423C8C, 0x9422153C, 0xD3826FEC, 0xEEE2465C, - 0x5CC29A4C, 0x61A2B3FC, 0x2602C92C, 0x1B62E09C, - 0xF9D2E0CF, 0xC4B2C97F, 0x8312B3AF, 0xBE729A1F, - 0x0C52460F, 0x31326FBF, 0x7692156F, 0x4BF23CDF, - 0xC9A2AB0E, 0xF4C282BE, 0xB362F86E, 0x8E02D1DE, - 0x3C220DCE, 0x0142247E, 0x46E25EAE, 0x7B82771E, - 0xB1E6B092, 0x8C869922, 0xCB26E3F2, 0xF646CA42, - 0x44661652, 0x79063FE2, 0x3EA64532, 0x03C66C82, - 0x8196FB53, 0xBCF6D2E3, 0xFB56A833, 0xC6368183, - 0x74165D93, 0x49767423, 0x0ED60EF3, 0x33B62743, - 0xD1062710, 0xEC660EA0, 0xABC67470, 0x96A65DC0, - 0x248681D0, 0x19E6A860, 0x5E46D2B0, 0x6326FB00, - 0xE1766CD1, 0xDC164561, 0x9BB63FB1, 0xA6D61601, - 0x14F6CA11, 0x2996E3A1, 0x6E369971, 0x5356B0C1, - 0x70279F96, 0x4D47B626, 0x0AE7CCF6, 0x3787E546, - 0x85A73956, 0xB8C710E6, 0xFF676A36, 0xC2074386, - 0x4057D457, 0x7D37FDE7, 0x3A978737, 0x07F7AE87, - 0xB5D77297, 0x88B75B27, 0xCF1721F7, 0xF2770847, - 0x10C70814, 0x2DA721A4, 0x6A075B74, 0x576772C4, - 0xE547AED4, 0xD8278764, 0x9F87FDB4, 0xA2E7D404, - 0x20B743D5, 0x1DD76A65, 0x5A7710B5, 0x67173905, - 0xD537E515, 0xE857CCA5, 0xAFF7B675, 0x92979FC5, - 0xE915E8DB, 0xD475C16B, 0x93D5BBBB, 0xAEB5920B, - 0x1C954E1B, 0x21F567AB, 0x66551D7B, 0x5B3534CB, - 0xD965A31A, 0xE4058AAA, 0xA3A5F07A, 0x9EC5D9CA, - 0x2CE505DA, 0x11852C6A, 0x562556BA, 0x6B457F0A, - 0x89F57F59, 0xB49556E9, 0xF3352C39, 0xCE550589, - 0x7C75D999, 0x4115F029, 0x06B58AF9, 0x3BD5A349, - 0xB9853498, 0x84E51D28, 0xC34567F8, 0xFE254E48, - 0x4C059258, 0x7165BBE8, 0x36C5C138, 0x0BA5E888, - 0x28D4C7DF, 0x15B4EE6F, 0x521494BF, 0x6F74BD0F, - 0xDD54611F, 0xE03448AF, 0xA794327F, 0x9AF41BCF, - 0x18A48C1E, 0x25C4A5AE, 0x6264DF7E, 0x5F04F6CE, - 0xED242ADE, 0xD044036E, 0x97E479BE, 0xAA84500E, - 0x4834505D, 0x755479ED, 0x32F4033D, 0x0F942A8D, - 0xBDB4F69D, 0x80D4DF2D, 0xC774A5FD, 0xFA148C4D, - 0x78441B9C, 0x4524322C, 0x028448FC, 0x3FE4614C, - 0x8DC4BD5C, 0xB0A494EC, 0xF704EE3C, 0xCA64C78C - }, { - 0x00000000, 0xCB5CD3A5, 0x4DC8A10B, 0x869472AE, - 0x9B914216, 0x50CD91B3, 0xD659E31D, 0x1D0530B8, - 0xEC53826D, 0x270F51C8, 0xA19B2366, 0x6AC7F0C3, - 0x77C2C07B, 0xBC9E13DE, 0x3A0A6170, 0xF156B2D5, - 0x03D6029B, 0xC88AD13E, 0x4E1EA390, 0x85427035, - 0x9847408D, 0x531B9328, 0xD58FE186, 0x1ED33223, - 0xEF8580F6, 0x24D95353, 0xA24D21FD, 0x6911F258, - 0x7414C2E0, 0xBF481145, 0x39DC63EB, 0xF280B04E, - 0x07AC0536, 0xCCF0D693, 0x4A64A43D, 0x81387798, - 0x9C3D4720, 0x57619485, 0xD1F5E62B, 0x1AA9358E, - 0xEBFF875B, 0x20A354FE, 0xA6372650, 0x6D6BF5F5, - 0x706EC54D, 0xBB3216E8, 0x3DA66446, 0xF6FAB7E3, - 0x047A07AD, 0xCF26D408, 0x49B2A6A6, 0x82EE7503, - 0x9FEB45BB, 0x54B7961E, 0xD223E4B0, 0x197F3715, - 0xE82985C0, 0x23755665, 0xA5E124CB, 0x6EBDF76E, - 0x73B8C7D6, 0xB8E41473, 0x3E7066DD, 0xF52CB578, - 0x0F580A6C, 0xC404D9C9, 0x4290AB67, 0x89CC78C2, - 0x94C9487A, 0x5F959BDF, 0xD901E971, 0x125D3AD4, - 0xE30B8801, 0x28575BA4, 0xAEC3290A, 0x659FFAAF, - 0x789ACA17, 0xB3C619B2, 0x35526B1C, 0xFE0EB8B9, - 0x0C8E08F7, 0xC7D2DB52, 0x4146A9FC, 0x8A1A7A59, - 0x971F4AE1, 0x5C439944, 0xDAD7EBEA, 0x118B384F, - 0xE0DD8A9A, 0x2B81593F, 0xAD152B91, 0x6649F834, - 0x7B4CC88C, 0xB0101B29, 0x36846987, 0xFDD8BA22, - 0x08F40F5A, 0xC3A8DCFF, 0x453CAE51, 0x8E607DF4, - 0x93654D4C, 0x58399EE9, 0xDEADEC47, 0x15F13FE2, - 0xE4A78D37, 0x2FFB5E92, 0xA96F2C3C, 0x6233FF99, - 0x7F36CF21, 0xB46A1C84, 0x32FE6E2A, 0xF9A2BD8F, - 0x0B220DC1, 0xC07EDE64, 0x46EAACCA, 0x8DB67F6F, - 0x90B34FD7, 0x5BEF9C72, 0xDD7BEEDC, 0x16273D79, - 0xE7718FAC, 0x2C2D5C09, 0xAAB92EA7, 0x61E5FD02, - 0x7CE0CDBA, 0xB7BC1E1F, 0x31286CB1, 0xFA74BF14, - 0x1EB014D8, 0xD5ECC77D, 0x5378B5D3, 0x98246676, - 0x852156CE, 0x4E7D856B, 0xC8E9F7C5, 0x03B52460, - 0xF2E396B5, 0x39BF4510, 0xBF2B37BE, 0x7477E41B, - 0x6972D4A3, 0xA22E0706, 0x24BA75A8, 0xEFE6A60D, - 0x1D661643, 0xD63AC5E6, 0x50AEB748, 0x9BF264ED, - 0x86F75455, 0x4DAB87F0, 0xCB3FF55E, 0x006326FB, - 0xF135942E, 0x3A69478B, 0xBCFD3525, 0x77A1E680, - 0x6AA4D638, 0xA1F8059D, 0x276C7733, 0xEC30A496, - 0x191C11EE, 0xD240C24B, 0x54D4B0E5, 0x9F886340, - 0x828D53F8, 0x49D1805D, 0xCF45F2F3, 0x04192156, - 0xF54F9383, 0x3E134026, 0xB8873288, 0x73DBE12D, - 0x6EDED195, 0xA5820230, 0x2316709E, 0xE84AA33B, - 0x1ACA1375, 0xD196C0D0, 0x5702B27E, 0x9C5E61DB, - 0x815B5163, 0x4A0782C6, 0xCC93F068, 0x07CF23CD, - 0xF6999118, 0x3DC542BD, 0xBB513013, 0x700DE3B6, - 0x6D08D30E, 0xA65400AB, 0x20C07205, 0xEB9CA1A0, - 0x11E81EB4, 0xDAB4CD11, 0x5C20BFBF, 0x977C6C1A, - 0x8A795CA2, 0x41258F07, 0xC7B1FDA9, 0x0CED2E0C, - 0xFDBB9CD9, 0x36E74F7C, 0xB0733DD2, 0x7B2FEE77, - 0x662ADECF, 0xAD760D6A, 0x2BE27FC4, 0xE0BEAC61, - 0x123E1C2F, 0xD962CF8A, 0x5FF6BD24, 0x94AA6E81, - 0x89AF5E39, 0x42F38D9C, 0xC467FF32, 0x0F3B2C97, - 0xFE6D9E42, 0x35314DE7, 0xB3A53F49, 0x78F9ECEC, - 0x65FCDC54, 0xAEA00FF1, 0x28347D5F, 0xE368AEFA, - 0x16441B82, 0xDD18C827, 0x5B8CBA89, 0x90D0692C, - 0x8DD55994, 0x46898A31, 0xC01DF89F, 0x0B412B3A, - 0xFA1799EF, 0x314B4A4A, 0xB7DF38E4, 0x7C83EB41, - 0x6186DBF9, 0xAADA085C, 0x2C4E7AF2, 0xE712A957, - 0x15921919, 0xDECECABC, 0x585AB812, 0x93066BB7, - 0x8E035B0F, 0x455F88AA, 0xC3CBFA04, 0x089729A1, - 0xF9C19B74, 0x329D48D1, 0xB4093A7F, 0x7F55E9DA, - 0x6250D962, 0xA90C0AC7, 0x2F987869, 0xE4C4ABCC - }, { - 0x00000000, 0xA6770BB4, 0x979F1129, 0x31E81A9D, - 0xF44F2413, 0x52382FA7, 0x63D0353A, 0xC5A73E8E, - 0x33EF4E67, 0x959845D3, 0xA4705F4E, 0x020754FA, - 0xC7A06A74, 0x61D761C0, 0x503F7B5D, 0xF64870E9, - 0x67DE9CCE, 0xC1A9977A, 0xF0418DE7, 0x56368653, - 0x9391B8DD, 0x35E6B369, 0x040EA9F4, 0xA279A240, - 0x5431D2A9, 0xF246D91D, 0xC3AEC380, 0x65D9C834, - 0xA07EF6BA, 0x0609FD0E, 0x37E1E793, 0x9196EC27, - 0xCFBD399C, 0x69CA3228, 0x582228B5, 0xFE552301, - 0x3BF21D8F, 0x9D85163B, 0xAC6D0CA6, 0x0A1A0712, - 0xFC5277FB, 0x5A257C4F, 0x6BCD66D2, 0xCDBA6D66, - 0x081D53E8, 0xAE6A585C, 0x9F8242C1, 0x39F54975, - 0xA863A552, 0x0E14AEE6, 0x3FFCB47B, 0x998BBFCF, - 0x5C2C8141, 0xFA5B8AF5, 0xCBB39068, 0x6DC49BDC, - 0x9B8CEB35, 0x3DFBE081, 0x0C13FA1C, 0xAA64F1A8, - 0x6FC3CF26, 0xC9B4C492, 0xF85CDE0F, 0x5E2BD5BB, - 0x440B7579, 0xE27C7ECD, 0xD3946450, 0x75E36FE4, - 0xB044516A, 0x16335ADE, 0x27DB4043, 0x81AC4BF7, - 0x77E43B1E, 0xD19330AA, 0xE07B2A37, 0x460C2183, - 0x83AB1F0D, 0x25DC14B9, 0x14340E24, 0xB2430590, - 0x23D5E9B7, 0x85A2E203, 0xB44AF89E, 0x123DF32A, - 0xD79ACDA4, 0x71EDC610, 0x4005DC8D, 0xE672D739, - 0x103AA7D0, 0xB64DAC64, 0x87A5B6F9, 0x21D2BD4D, - 0xE47583C3, 0x42028877, 0x73EA92EA, 0xD59D995E, - 0x8BB64CE5, 0x2DC14751, 0x1C295DCC, 0xBA5E5678, - 0x7FF968F6, 0xD98E6342, 0xE86679DF, 0x4E11726B, - 0xB8590282, 0x1E2E0936, 0x2FC613AB, 0x89B1181F, - 0x4C162691, 0xEA612D25, 0xDB8937B8, 0x7DFE3C0C, - 0xEC68D02B, 0x4A1FDB9F, 0x7BF7C102, 0xDD80CAB6, - 0x1827F438, 0xBE50FF8C, 0x8FB8E511, 0x29CFEEA5, - 0xDF879E4C, 0x79F095F8, 0x48188F65, 0xEE6F84D1, - 0x2BC8BA5F, 0x8DBFB1EB, 0xBC57AB76, 0x1A20A0C2, - 0x8816EAF2, 0x2E61E146, 0x1F89FBDB, 0xB9FEF06F, - 0x7C59CEE1, 0xDA2EC555, 0xEBC6DFC8, 0x4DB1D47C, - 0xBBF9A495, 0x1D8EAF21, 0x2C66B5BC, 0x8A11BE08, - 0x4FB68086, 0xE9C18B32, 0xD82991AF, 0x7E5E9A1B, - 0xEFC8763C, 0x49BF7D88, 0x78576715, 0xDE206CA1, - 0x1B87522F, 0xBDF0599B, 0x8C184306, 0x2A6F48B2, - 0xDC27385B, 0x7A5033EF, 0x4BB82972, 0xEDCF22C6, - 0x28681C48, 0x8E1F17FC, 0xBFF70D61, 0x198006D5, - 0x47ABD36E, 0xE1DCD8DA, 0xD034C247, 0x7643C9F3, - 0xB3E4F77D, 0x1593FCC9, 0x247BE654, 0x820CEDE0, - 0x74449D09, 0xD23396BD, 0xE3DB8C20, 0x45AC8794, - 0x800BB91A, 0x267CB2AE, 0x1794A833, 0xB1E3A387, - 0x20754FA0, 0x86024414, 0xB7EA5E89, 0x119D553D, - 0xD43A6BB3, 0x724D6007, 0x43A57A9A, 0xE5D2712E, - 0x139A01C7, 0xB5ED0A73, 0x840510EE, 0x22721B5A, - 0xE7D525D4, 0x41A22E60, 0x704A34FD, 0xD63D3F49, - 0xCC1D9F8B, 0x6A6A943F, 0x5B828EA2, 0xFDF58516, - 0x3852BB98, 0x9E25B02C, 0xAFCDAAB1, 0x09BAA105, - 0xFFF2D1EC, 0x5985DA58, 0x686DC0C5, 0xCE1ACB71, - 0x0BBDF5FF, 0xADCAFE4B, 0x9C22E4D6, 0x3A55EF62, - 0xABC30345, 0x0DB408F1, 0x3C5C126C, 0x9A2B19D8, - 0x5F8C2756, 0xF9FB2CE2, 0xC813367F, 0x6E643DCB, - 0x982C4D22, 0x3E5B4696, 0x0FB35C0B, 0xA9C457BF, - 0x6C636931, 0xCA146285, 0xFBFC7818, 0x5D8B73AC, - 0x03A0A617, 0xA5D7ADA3, 0x943FB73E, 0x3248BC8A, - 0xF7EF8204, 0x519889B0, 0x6070932D, 0xC6079899, - 0x304FE870, 0x9638E3C4, 0xA7D0F959, 0x01A7F2ED, - 0xC400CC63, 0x6277C7D7, 0x539FDD4A, 0xF5E8D6FE, - 0x647E3AD9, 0xC209316D, 0xF3E12BF0, 0x55962044, - 0x90311ECA, 0x3646157E, 0x07AE0FE3, 0xA1D90457, - 0x579174BE, 0xF1E67F0A, 0xC00E6597, 0x66796E23, - 0xA3DE50AD, 0x05A95B19, 0x34414184, 0x92364A30 - }, { - 0x00000000, 0xCCAA009E, 0x4225077D, 0x8E8F07E3, - 0x844A0EFA, 0x48E00E64, 0xC66F0987, 0x0AC50919, - 0xD3E51BB5, 0x1F4F1B2B, 0x91C01CC8, 0x5D6A1C56, - 0x57AF154F, 0x9B0515D1, 0x158A1232, 0xD92012AC, - 0x7CBB312B, 0xB01131B5, 0x3E9E3656, 0xF23436C8, - 0xF8F13FD1, 0x345B3F4F, 0xBAD438AC, 0x767E3832, - 0xAF5E2A9E, 0x63F42A00, 0xED7B2DE3, 0x21D12D7D, - 0x2B142464, 0xE7BE24FA, 0x69312319, 0xA59B2387, - 0xF9766256, 0x35DC62C8, 0xBB53652B, 0x77F965B5, - 0x7D3C6CAC, 0xB1966C32, 0x3F196BD1, 0xF3B36B4F, - 0x2A9379E3, 0xE639797D, 0x68B67E9E, 0xA41C7E00, - 0xAED97719, 0x62737787, 0xECFC7064, 0x205670FA, - 0x85CD537D, 0x496753E3, 0xC7E85400, 0x0B42549E, - 0x01875D87, 0xCD2D5D19, 0x43A25AFA, 0x8F085A64, - 0x562848C8, 0x9A824856, 0x140D4FB5, 0xD8A74F2B, - 0xD2624632, 0x1EC846AC, 0x9047414F, 0x5CED41D1, - 0x299DC2ED, 0xE537C273, 0x6BB8C590, 0xA712C50E, - 0xADD7CC17, 0x617DCC89, 0xEFF2CB6A, 0x2358CBF4, - 0xFA78D958, 0x36D2D9C6, 0xB85DDE25, 0x74F7DEBB, - 0x7E32D7A2, 0xB298D73C, 0x3C17D0DF, 0xF0BDD041, - 0x5526F3C6, 0x998CF358, 0x1703F4BB, 0xDBA9F425, - 0xD16CFD3C, 0x1DC6FDA2, 0x9349FA41, 0x5FE3FADF, - 0x86C3E873, 0x4A69E8ED, 0xC4E6EF0E, 0x084CEF90, - 0x0289E689, 0xCE23E617, 0x40ACE1F4, 0x8C06E16A, - 0xD0EBA0BB, 0x1C41A025, 0x92CEA7C6, 0x5E64A758, - 0x54A1AE41, 0x980BAEDF, 0x1684A93C, 0xDA2EA9A2, - 0x030EBB0E, 0xCFA4BB90, 0x412BBC73, 0x8D81BCED, - 0x8744B5F4, 0x4BEEB56A, 0xC561B289, 0x09CBB217, - 0xAC509190, 0x60FA910E, 0xEE7596ED, 0x22DF9673, - 0x281A9F6A, 0xE4B09FF4, 0x6A3F9817, 0xA6959889, - 0x7FB58A25, 0xB31F8ABB, 0x3D908D58, 0xF13A8DC6, - 0xFBFF84DF, 0x37558441, 0xB9DA83A2, 0x7570833C, - 0x533B85DA, 0x9F918544, 0x111E82A7, 0xDDB48239, - 0xD7718B20, 0x1BDB8BBE, 0x95548C5D, 0x59FE8CC3, - 0x80DE9E6F, 0x4C749EF1, 0xC2FB9912, 0x0E51998C, - 0x04949095, 0xC83E900B, 0x46B197E8, 0x8A1B9776, - 0x2F80B4F1, 0xE32AB46F, 0x6DA5B38C, 0xA10FB312, - 0xABCABA0B, 0x6760BA95, 0xE9EFBD76, 0x2545BDE8, - 0xFC65AF44, 0x30CFAFDA, 0xBE40A839, 0x72EAA8A7, - 0x782FA1BE, 0xB485A120, 0x3A0AA6C3, 0xF6A0A65D, - 0xAA4DE78C, 0x66E7E712, 0xE868E0F1, 0x24C2E06F, - 0x2E07E976, 0xE2ADE9E8, 0x6C22EE0B, 0xA088EE95, - 0x79A8FC39, 0xB502FCA7, 0x3B8DFB44, 0xF727FBDA, - 0xFDE2F2C3, 0x3148F25D, 0xBFC7F5BE, 0x736DF520, - 0xD6F6D6A7, 0x1A5CD639, 0x94D3D1DA, 0x5879D144, - 0x52BCD85D, 0x9E16D8C3, 0x1099DF20, 0xDC33DFBE, - 0x0513CD12, 0xC9B9CD8C, 0x4736CA6F, 0x8B9CCAF1, - 0x8159C3E8, 0x4DF3C376, 0xC37CC495, 0x0FD6C40B, - 0x7AA64737, 0xB60C47A9, 0x3883404A, 0xF42940D4, - 0xFEEC49CD, 0x32464953, 0xBCC94EB0, 0x70634E2E, - 0xA9435C82, 0x65E95C1C, 0xEB665BFF, 0x27CC5B61, - 0x2D095278, 0xE1A352E6, 0x6F2C5505, 0xA386559B, - 0x061D761C, 0xCAB77682, 0x44387161, 0x889271FF, - 0x825778E6, 0x4EFD7878, 0xC0727F9B, 0x0CD87F05, - 0xD5F86DA9, 0x19526D37, 0x97DD6AD4, 0x5B776A4A, - 0x51B26353, 0x9D1863CD, 0x1397642E, 0xDF3D64B0, - 0x83D02561, 0x4F7A25FF, 0xC1F5221C, 0x0D5F2282, - 0x079A2B9B, 0xCB302B05, 0x45BF2CE6, 0x89152C78, - 0x50353ED4, 0x9C9F3E4A, 0x121039A9, 0xDEBA3937, - 0xD47F302E, 0x18D530B0, 0x965A3753, 0x5AF037CD, - 0xFF6B144A, 0x33C114D4, 0xBD4E1337, 0x71E413A9, - 0x7B211AB0, 0xB78B1A2E, 0x39041DCD, 0xF5AE1D53, - 0x2C8E0FFF, 0xE0240F61, 0x6EAB0882, 0xA201081C, - 0xA8C40105, 0x646E019B, 0xEAE10678, 0x264B06E6 - } -}; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_tablegen.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_tablegen.c deleted file mode 100644 index 0cbfecd89dd..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_tablegen.c +++ /dev/null @@ -1,91 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc32_tablegen.c -/// \brief Generate crc32_table_le.h and crc32_table_be.h -/// -/// Compiling: gcc -std=c99 -o crc32_tablegen crc32_tablegen.c -/// Add -DWORDS_BIGENDIAN to generate big endian table. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include -#include - -#ifdef WORDS_BIGENDIAN -# include "../../common/bswap.h" -#endif - - -static uint32_t crc32_table[8][256]; - - -static void -init_crc32_table(void) -{ - static const uint32_t poly32 = UINT32_C(0xEDB88320); - - for (size_t s = 0; s < 8; ++s) { - for (size_t b = 0; b < 256; ++b) { - uint32_t r = s == 0 ? b : crc32_table[s - 1][b]; - - for (size_t i = 0; i < 8; ++i) { - if (r & 1) - r = (r >> 1) ^ poly32; - else - r >>= 1; - } - - crc32_table[s][b] = r; - } - } - -#ifdef WORDS_BIGENDIAN - for (size_t s = 0; s < 8; ++s) - for (size_t b = 0; b < 256; ++b) - crc32_table[s][b] = bswap_32(crc32_table[s][b]); -#endif - - return; -} - - -static void -print_crc32_table(void) -{ - printf("/* This file has been automatically generated by " - "crc32_tablegen.c. */\n\n" - "const uint32_t lzma_crc32_table[8][256] = {\n\t{"); - - for (size_t s = 0; s < 8; ++s) { - for (size_t b = 0; b < 256; ++b) { - if ((b % 4) == 0) - printf("\n\t\t"); - - printf("0x%08" PRIX32, crc32_table[s][b]); - - if (b != 255) - printf(",%s", (b+1) % 4 == 0 ? "" : " "); - } - - if (s == 7) - printf("\n\t}\n};\n"); - else - printf("\n\t}, {"); - } - - return; -} - - -int -main(void) -{ - init_crc32_table(); - print_crc32_table(); - return 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_x86.S b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_x86.S deleted file mode 100644 index cca29891f82..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc32_x86.S +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Speed-optimized CRC32 using slicing-by-eight algorithm - * - * This uses only i386 instructions, but it is optimized for i686 and later - * (including e.g. Pentium II/III/IV, Athlon XP, and Core 2). For i586 - * (e.g. Pentium), slicing-by-four would be better, and even the C version - * of slicing-by-eight built with gcc -march=i586 tends to be a little bit - * better than this. Very few probably run this code on i586 or older x86 - * so this shouldn't be a problem in practice. - * - * Authors: Igor Pavlov (original version) - * Lasse Collin (AT&T syntax, PIC support, better portability) - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * This code needs lzma_crc32_table, which can be created using the - * following C code: - -uint32_t lzma_crc32_table[8][256]; - -void -init_table(void) -{ - // IEEE-802.3 - static const uint32_t poly32 = UINT32_C(0xEDB88320); - - // Castagnoli - // static const uint32_t poly32 = UINT32_C(0x82F63B78); - - // Koopman - // static const uint32_t poly32 = UINT32_C(0xEB31D82E); - - for (size_t s = 0; s < 8; ++s) { - for (size_t b = 0; b < 256; ++b) { - uint32_t r = s == 0 ? b : lzma_crc32_table[s - 1][b]; - - for (size_t i = 0; i < 8; ++i) { - if (r & 1) - r = (r >> 1) ^ poly32; - else - r >>= 1; - } - - lzma_crc32_table[s][b] = r; - } - } -} - - * The prototype of the CRC32 function: - * extern uint32_t lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc); - */ - -/* - * On some systems, the functions need to be prefixed. The prefix is - * usually an underscore. - */ -#ifndef __USER_LABEL_PREFIX__ -# define __USER_LABEL_PREFIX__ -#endif -#define MAKE_SYM_CAT(prefix, sym) prefix ## sym -#define MAKE_SYM(prefix, sym) MAKE_SYM_CAT(prefix, sym) -#define LZMA_CRC32 MAKE_SYM(__USER_LABEL_PREFIX__, lzma_crc32) -#define LZMA_CRC32_TABLE MAKE_SYM(__USER_LABEL_PREFIX__, lzma_crc32_table) - -/* - * Solaris assembler doesn't have .p2align, and Darwin uses .align - * differently than GNU/Linux and Solaris. - */ -#if defined(__MACH__) || defined(__MSDOS__) -# define ALIGN(pow2, abs) .align pow2 -#else -# define ALIGN(pow2, abs) .align abs -#endif - - .text - .globl LZMA_CRC32 - -#if !defined(__MACH__) && !defined(_WIN32) && !defined(__CYGWIN__) \ - && !defined(__MSDOS__) - .type LZMA_CRC32, @function -#endif - - ALIGN(4, 16) -LZMA_CRC32: - /* - * Register usage: - * %eax crc - * %esi buf - * %edi size or buf + size - * %ebx lzma_crc32_table - * %ebp Table index - * %ecx Temporary - * %edx Temporary - */ - pushl %ebx - pushl %esi - pushl %edi - pushl %ebp - movl 0x14(%esp), %esi /* buf */ - movl 0x18(%esp), %edi /* size */ - movl 0x1C(%esp), %eax /* crc */ - - /* - * Store the address of lzma_crc32_table to %ebx. This is needed to - * get position-independent code (PIC). - * - * The PIC macro is defined by libtool, while __PIC__ is defined - * by GCC but only on some systems. Testing for both makes it simpler - * to test this code without libtool, and keeps the code working also - * when built with libtool but using something else than GCC. - * - * I understood that libtool may define PIC on Windows even though - * the code in Windows DLLs is not PIC in sense that it is in ELF - * binaries, so we need a separate check to always use the non-PIC - * code on Windows. - */ -#if (!defined(PIC) && !defined(__PIC__)) \ - || (defined(_WIN32) || defined(__CYGWIN__)) - /* Not PIC */ - movl $LZMA_CRC32_TABLE, %ebx -#elif defined(__MACH__) - /* Mach-O */ - call .L_get_pc -.L_pic: - leal .L_lzma_crc32_table$non_lazy_ptr-.L_pic(%ebx), %ebx - movl (%ebx), %ebx -#else - /* ELF */ - call .L_get_pc - addl $_GLOBAL_OFFSET_TABLE_, %ebx - movl LZMA_CRC32_TABLE@GOT(%ebx), %ebx -#endif - - /* Complement the initial value. */ - notl %eax - - ALIGN(4, 16) -.L_align: - /* - * Check if there is enough input to use slicing-by-eight. - * We need 16 bytes, because the loop pre-reads eight bytes. - */ - cmpl $16, %edi - jl .L_rest - - /* Check if we have reached alignment of eight bytes. */ - testl $7, %esi - jz .L_slice - - /* Calculate CRC of the next input byte. */ - movzbl (%esi), %ebp - incl %esi - movzbl %al, %ecx - xorl %ecx, %ebp - shrl $8, %eax - xorl (%ebx, %ebp, 4), %eax - decl %edi - jmp .L_align - - ALIGN(2, 4) -.L_slice: - /* - * If we get here, there's at least 16 bytes of aligned input - * available. Make %edi multiple of eight bytes. Store the possible - * remainder over the "size" variable in the argument stack. - */ - movl %edi, 0x18(%esp) - andl $-8, %edi - subl %edi, 0x18(%esp) - - /* - * Let %edi be buf + size - 8 while running the main loop. This way - * we can compare for equality to determine when exit the loop. - */ - addl %esi, %edi - subl $8, %edi - - /* Read in the first eight aligned bytes. */ - xorl (%esi), %eax - movl 4(%esi), %ecx - movzbl %cl, %ebp - -.L_loop: - movl 0x0C00(%ebx, %ebp, 4), %edx - movzbl %ch, %ebp - xorl 0x0800(%ebx, %ebp, 4), %edx - shrl $16, %ecx - xorl 8(%esi), %edx - movzbl %cl, %ebp - xorl 0x0400(%ebx, %ebp, 4), %edx - movzbl %ch, %ebp - xorl (%ebx, %ebp, 4), %edx - movzbl %al, %ebp - - /* - * Read the next four bytes, for which the CRC is calculated - * on the next interation of the loop. - */ - movl 12(%esi), %ecx - - xorl 0x1C00(%ebx, %ebp, 4), %edx - movzbl %ah, %ebp - shrl $16, %eax - xorl 0x1800(%ebx, %ebp, 4), %edx - movzbl %ah, %ebp - movzbl %al, %eax - movl 0x1400(%ebx, %eax, 4), %eax - addl $8, %esi - xorl %edx, %eax - xorl 0x1000(%ebx, %ebp, 4), %eax - - /* Check for end of aligned input. */ - cmpl %edi, %esi - movzbl %cl, %ebp - jne .L_loop - - /* - * Process the remaining eight bytes, which we have already - * copied to %ecx and %edx. - */ - movl 0x0C00(%ebx, %ebp, 4), %edx - movzbl %ch, %ebp - xorl 0x0800(%ebx, %ebp, 4), %edx - shrl $16, %ecx - movzbl %cl, %ebp - xorl 0x0400(%ebx, %ebp, 4), %edx - movzbl %ch, %ebp - xorl (%ebx, %ebp, 4), %edx - movzbl %al, %ebp - - xorl 0x1C00(%ebx, %ebp, 4), %edx - movzbl %ah, %ebp - shrl $16, %eax - xorl 0x1800(%ebx, %ebp, 4), %edx - movzbl %ah, %ebp - movzbl %al, %eax - movl 0x1400(%ebx, %eax, 4), %eax - addl $8, %esi - xorl %edx, %eax - xorl 0x1000(%ebx, %ebp, 4), %eax - - /* Copy the number of remaining bytes to %edi. */ - movl 0x18(%esp), %edi - -.L_rest: - /* Check for end of input. */ - testl %edi, %edi - jz .L_return - - /* Calculate CRC of the next input byte. */ - movzbl (%esi), %ebp - incl %esi - movzbl %al, %ecx - xorl %ecx, %ebp - shrl $8, %eax - xorl (%ebx, %ebp, 4), %eax - decl %edi - jmp .L_rest - -.L_return: - /* Complement the final value. */ - notl %eax - - popl %ebp - popl %edi - popl %esi - popl %ebx - ret - -#if defined(PIC) || defined(__PIC__) - ALIGN(4, 16) -.L_get_pc: - movl (%esp), %ebx - ret -#endif - -#if defined(__MACH__) && (defined(PIC) || defined(__PIC__)) - /* Mach-O PIC */ - .section __IMPORT,__pointers,non_lazy_symbol_pointers -.L_lzma_crc32_table$non_lazy_ptr: - .indirect_symbol LZMA_CRC32_TABLE - .long 0 - -#elif defined(_WIN32) || defined(__CYGWIN__) -# ifdef DLL_EXPORT - /* This is equivalent of __declspec(dllexport). */ - .section .drectve - .ascii " -export:lzma_crc32" -# endif - -#elif !defined(__MSDOS__) - /* ELF */ - .size LZMA_CRC32, .-LZMA_CRC32 -#endif - -/* - * This is needed to support non-executable stack. It's ugly to - * use __linux__ here, but I don't know a way to detect when - * we are using GNU assembler. - */ -#if defined(__ELF__) && defined(__linux__) - .section .note.GNU-stack,"",@progbits -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_fast.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_fast.c deleted file mode 100644 index 25557264b8a..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_fast.c +++ /dev/null @@ -1,71 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc64.c -/// \brief CRC64 calculation -/// -/// Calculate the CRC64 using the slice-by-four algorithm. This is the same -/// idea that is used in crc32_fast.c, but for CRC64 we use only four tables -/// instead of eight to avoid increasing CPU cache usage. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "check.h" -#include "crc_macros.h" - - -#ifdef WORDS_BIGENDIAN -# define A1(x) ((x) >> 56) -#else -# define A1 A -#endif - - -// See the comments in crc32_fast.c. They aren't duplicated here. -extern LZMA_API(uint64_t) -lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc) -{ - crc = ~crc; - -#ifdef WORDS_BIGENDIAN - crc = bswap_64(crc); -#endif - - if (size > 4) { - while ((uintptr_t)(buf) & 3) { - crc = lzma_crc64_table[0][*buf++ ^ A1(crc)] ^ S8(crc); - --size; - } - - const uint8_t *const limit = buf + (size & ~(size_t)(3)); - size &= (size_t)(3); - - while (buf < limit) { -#ifdef WORDS_BIGENDIAN - const uint32_t tmp = (crc >> 32) ^ *(uint32_t *)(buf); -#else - const uint32_t tmp = crc ^ *(uint32_t *)(buf); -#endif - buf += 4; - - crc = lzma_crc64_table[3][A(tmp)] - ^ lzma_crc64_table[2][B(tmp)] - ^ S32(crc) - ^ lzma_crc64_table[1][C(tmp)] - ^ lzma_crc64_table[0][D(tmp)]; - } - } - - while (size-- != 0) - crc = lzma_crc64_table[0][*buf++ ^ A1(crc)] ^ S8(crc); - -#ifdef WORDS_BIGENDIAN - crc = bswap_64(crc); -#endif - - return ~crc; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_small.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_small.c deleted file mode 100644 index 55d72316bce..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_small.c +++ /dev/null @@ -1,53 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc64_small.c -/// \brief CRC64 calculation (size-optimized) -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "check.h" - - -static uint64_t crc64_table[256]; - - -static void -crc64_init(void) -{ - static const uint64_t poly64 = UINT64_C(0xC96C5795D7870F42); - - for (size_t b = 0; b < 256; ++b) { - uint64_t r = b; - for (size_t i = 0; i < 8; ++i) { - if (r & 1) - r = (r >> 1) ^ poly64; - else - r >>= 1; - } - - crc64_table[b] = r; - } - - return; -} - - -extern LZMA_API(uint64_t) -lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc) -{ - mythread_once(crc64_init); - - crc = ~crc; - - while (size != 0) { - crc = crc64_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8); - --size; - } - - return ~crc; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_table.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_table.c deleted file mode 100644 index 1fbcd94703c..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_table.c +++ /dev/null @@ -1,19 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc64_table.c -/// \brief Precalculated CRC64 table with correct endianness -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - -#ifdef WORDS_BIGENDIAN -# include "crc64_table_be.h" -#else -# include "crc64_table_le.h" -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_table_be.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_table_be.h deleted file mode 100644 index ea074f397a7..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_table_be.h +++ /dev/null @@ -1,521 +0,0 @@ -/* This file has been automatically generated by crc64_tablegen.c. */ - -const uint64_t lzma_crc64_table[4][256] = { - { - UINT64_C(0x0000000000000000), UINT64_C(0x6F5FA703BE4C2EB3), - UINT64_C(0x5BA040A8573684F4), UINT64_C(0x34FFE7ABE97AAA47), - UINT64_C(0x335E8FFF84C3D07B), UINT64_C(0x5C0128FC3A8FFEC8), - UINT64_C(0x68FECF57D3F5548F), UINT64_C(0x07A168546DB97A3C), - UINT64_C(0x66BC1EFF0987A1F7), UINT64_C(0x09E3B9FCB7CB8F44), - UINT64_C(0x3D1C5E575EB12503), UINT64_C(0x5243F954E0FD0BB0), - UINT64_C(0x55E291008D44718C), UINT64_C(0x3ABD360333085F3F), - UINT64_C(0x0E42D1A8DA72F578), UINT64_C(0x611D76AB643EDBCB), - UINT64_C(0x4966335138A19B7D), UINT64_C(0x2639945286EDB5CE), - UINT64_C(0x12C673F96F971F89), UINT64_C(0x7D99D4FAD1DB313A), - UINT64_C(0x7A38BCAEBC624B06), UINT64_C(0x15671BAD022E65B5), - UINT64_C(0x2198FC06EB54CFF2), UINT64_C(0x4EC75B055518E141), - UINT64_C(0x2FDA2DAE31263A8A), UINT64_C(0x40858AAD8F6A1439), - UINT64_C(0x747A6D066610BE7E), UINT64_C(0x1B25CA05D85C90CD), - UINT64_C(0x1C84A251B5E5EAF1), UINT64_C(0x73DB05520BA9C442), - UINT64_C(0x4724E2F9E2D36E05), UINT64_C(0x287B45FA5C9F40B6), - UINT64_C(0x92CC66A2704237FB), UINT64_C(0xFD93C1A1CE0E1948), - UINT64_C(0xC96C260A2774B30F), UINT64_C(0xA633810999389DBC), - UINT64_C(0xA192E95DF481E780), UINT64_C(0xCECD4E5E4ACDC933), - UINT64_C(0xFA32A9F5A3B76374), UINT64_C(0x956D0EF61DFB4DC7), - UINT64_C(0xF470785D79C5960C), UINT64_C(0x9B2FDF5EC789B8BF), - UINT64_C(0xAFD038F52EF312F8), UINT64_C(0xC08F9FF690BF3C4B), - UINT64_C(0xC72EF7A2FD064677), UINT64_C(0xA87150A1434A68C4), - UINT64_C(0x9C8EB70AAA30C283), UINT64_C(0xF3D11009147CEC30), - UINT64_C(0xDBAA55F348E3AC86), UINT64_C(0xB4F5F2F0F6AF8235), - UINT64_C(0x800A155B1FD52872), UINT64_C(0xEF55B258A19906C1), - UINT64_C(0xE8F4DA0CCC207CFD), UINT64_C(0x87AB7D0F726C524E), - UINT64_C(0xB3549AA49B16F809), UINT64_C(0xDC0B3DA7255AD6BA), - UINT64_C(0xBD164B0C41640D71), UINT64_C(0xD249EC0FFF2823C2), - UINT64_C(0xE6B60BA416528985), UINT64_C(0x89E9ACA7A81EA736), - UINT64_C(0x8E48C4F3C5A7DD0A), UINT64_C(0xE11763F07BEBF3B9), - UINT64_C(0xD5E8845B929159FE), UINT64_C(0xBAB723582CDD774D), - UINT64_C(0xA187C3EBCA2BB664), UINT64_C(0xCED864E8746798D7), - UINT64_C(0xFA2783439D1D3290), UINT64_C(0x9578244023511C23), - UINT64_C(0x92D94C144EE8661F), UINT64_C(0xFD86EB17F0A448AC), - UINT64_C(0xC9790CBC19DEE2EB), UINT64_C(0xA626ABBFA792CC58), - UINT64_C(0xC73BDD14C3AC1793), UINT64_C(0xA8647A177DE03920), - UINT64_C(0x9C9B9DBC949A9367), UINT64_C(0xF3C43ABF2AD6BDD4), - UINT64_C(0xF46552EB476FC7E8), UINT64_C(0x9B3AF5E8F923E95B), - UINT64_C(0xAFC512431059431C), UINT64_C(0xC09AB540AE156DAF), - UINT64_C(0xE8E1F0BAF28A2D19), UINT64_C(0x87BE57B94CC603AA), - UINT64_C(0xB341B012A5BCA9ED), UINT64_C(0xDC1E17111BF0875E), - UINT64_C(0xDBBF7F457649FD62), UINT64_C(0xB4E0D846C805D3D1), - UINT64_C(0x801F3FED217F7996), UINT64_C(0xEF4098EE9F335725), - UINT64_C(0x8E5DEE45FB0D8CEE), UINT64_C(0xE10249464541A25D), - UINT64_C(0xD5FDAEEDAC3B081A), UINT64_C(0xBAA209EE127726A9), - UINT64_C(0xBD0361BA7FCE5C95), UINT64_C(0xD25CC6B9C1827226), - UINT64_C(0xE6A3211228F8D861), UINT64_C(0x89FC861196B4F6D2), - UINT64_C(0x334BA549BA69819F), UINT64_C(0x5C14024A0425AF2C), - UINT64_C(0x68EBE5E1ED5F056B), UINT64_C(0x07B442E253132BD8), - UINT64_C(0x00152AB63EAA51E4), UINT64_C(0x6F4A8DB580E67F57), - UINT64_C(0x5BB56A1E699CD510), UINT64_C(0x34EACD1DD7D0FBA3), - UINT64_C(0x55F7BBB6B3EE2068), UINT64_C(0x3AA81CB50DA20EDB), - UINT64_C(0x0E57FB1EE4D8A49C), UINT64_C(0x61085C1D5A948A2F), - UINT64_C(0x66A93449372DF013), UINT64_C(0x09F6934A8961DEA0), - UINT64_C(0x3D0974E1601B74E7), UINT64_C(0x5256D3E2DE575A54), - UINT64_C(0x7A2D961882C81AE2), UINT64_C(0x1572311B3C843451), - UINT64_C(0x218DD6B0D5FE9E16), UINT64_C(0x4ED271B36BB2B0A5), - UINT64_C(0x497319E7060BCA99), UINT64_C(0x262CBEE4B847E42A), - UINT64_C(0x12D3594F513D4E6D), UINT64_C(0x7D8CFE4CEF7160DE), - UINT64_C(0x1C9188E78B4FBB15), UINT64_C(0x73CE2FE4350395A6), - UINT64_C(0x4731C84FDC793FE1), UINT64_C(0x286E6F4C62351152), - UINT64_C(0x2FCF07180F8C6B6E), UINT64_C(0x4090A01BB1C045DD), - UINT64_C(0x746F47B058BAEF9A), UINT64_C(0x1B30E0B3E6F6C129), - UINT64_C(0x420F87D795576CC9), UINT64_C(0x2D5020D42B1B427A), - UINT64_C(0x19AFC77FC261E83D), UINT64_C(0x76F0607C7C2DC68E), - UINT64_C(0x715108281194BCB2), UINT64_C(0x1E0EAF2BAFD89201), - UINT64_C(0x2AF1488046A23846), UINT64_C(0x45AEEF83F8EE16F5), - UINT64_C(0x24B399289CD0CD3E), UINT64_C(0x4BEC3E2B229CE38D), - UINT64_C(0x7F13D980CBE649CA), UINT64_C(0x104C7E8375AA6779), - UINT64_C(0x17ED16D718131D45), UINT64_C(0x78B2B1D4A65F33F6), - UINT64_C(0x4C4D567F4F2599B1), UINT64_C(0x2312F17CF169B702), - UINT64_C(0x0B69B486ADF6F7B4), UINT64_C(0x6436138513BAD907), - UINT64_C(0x50C9F42EFAC07340), UINT64_C(0x3F96532D448C5DF3), - UINT64_C(0x38373B79293527CF), UINT64_C(0x57689C7A9779097C), - UINT64_C(0x63977BD17E03A33B), UINT64_C(0x0CC8DCD2C04F8D88), - UINT64_C(0x6DD5AA79A4715643), UINT64_C(0x028A0D7A1A3D78F0), - UINT64_C(0x3675EAD1F347D2B7), UINT64_C(0x592A4DD24D0BFC04), - UINT64_C(0x5E8B258620B28638), UINT64_C(0x31D482859EFEA88B), - UINT64_C(0x052B652E778402CC), UINT64_C(0x6A74C22DC9C82C7F), - UINT64_C(0xD0C3E175E5155B32), UINT64_C(0xBF9C46765B597581), - UINT64_C(0x8B63A1DDB223DFC6), UINT64_C(0xE43C06DE0C6FF175), - UINT64_C(0xE39D6E8A61D68B49), UINT64_C(0x8CC2C989DF9AA5FA), - UINT64_C(0xB83D2E2236E00FBD), UINT64_C(0xD762892188AC210E), - UINT64_C(0xB67FFF8AEC92FAC5), UINT64_C(0xD920588952DED476), - UINT64_C(0xEDDFBF22BBA47E31), UINT64_C(0x8280182105E85082), - UINT64_C(0x8521707568512ABE), UINT64_C(0xEA7ED776D61D040D), - UINT64_C(0xDE8130DD3F67AE4A), UINT64_C(0xB1DE97DE812B80F9), - UINT64_C(0x99A5D224DDB4C04F), UINT64_C(0xF6FA752763F8EEFC), - UINT64_C(0xC205928C8A8244BB), UINT64_C(0xAD5A358F34CE6A08), - UINT64_C(0xAAFB5DDB59771034), UINT64_C(0xC5A4FAD8E73B3E87), - UINT64_C(0xF15B1D730E4194C0), UINT64_C(0x9E04BA70B00DBA73), - UINT64_C(0xFF19CCDBD43361B8), UINT64_C(0x90466BD86A7F4F0B), - UINT64_C(0xA4B98C738305E54C), UINT64_C(0xCBE62B703D49CBFF), - UINT64_C(0xCC47432450F0B1C3), UINT64_C(0xA318E427EEBC9F70), - UINT64_C(0x97E7038C07C63537), UINT64_C(0xF8B8A48FB98A1B84), - UINT64_C(0xE388443C5F7CDAAD), UINT64_C(0x8CD7E33FE130F41E), - UINT64_C(0xB8280494084A5E59), UINT64_C(0xD777A397B60670EA), - UINT64_C(0xD0D6CBC3DBBF0AD6), UINT64_C(0xBF896CC065F32465), - UINT64_C(0x8B768B6B8C898E22), UINT64_C(0xE4292C6832C5A091), - UINT64_C(0x85345AC356FB7B5A), UINT64_C(0xEA6BFDC0E8B755E9), - UINT64_C(0xDE941A6B01CDFFAE), UINT64_C(0xB1CBBD68BF81D11D), - UINT64_C(0xB66AD53CD238AB21), UINT64_C(0xD935723F6C748592), - UINT64_C(0xEDCA9594850E2FD5), UINT64_C(0x829532973B420166), - UINT64_C(0xAAEE776D67DD41D0), UINT64_C(0xC5B1D06ED9916F63), - UINT64_C(0xF14E37C530EBC524), UINT64_C(0x9E1190C68EA7EB97), - UINT64_C(0x99B0F892E31E91AB), UINT64_C(0xF6EF5F915D52BF18), - UINT64_C(0xC210B83AB428155F), UINT64_C(0xAD4F1F390A643BEC), - UINT64_C(0xCC5269926E5AE027), UINT64_C(0xA30DCE91D016CE94), - UINT64_C(0x97F2293A396C64D3), UINT64_C(0xF8AD8E3987204A60), - UINT64_C(0xFF0CE66DEA99305C), UINT64_C(0x9053416E54D51EEF), - UINT64_C(0xA4ACA6C5BDAFB4A8), UINT64_C(0xCBF301C603E39A1B), - UINT64_C(0x7144229E2F3EED56), UINT64_C(0x1E1B859D9172C3E5), - UINT64_C(0x2AE46236780869A2), UINT64_C(0x45BBC535C6444711), - UINT64_C(0x421AAD61ABFD3D2D), UINT64_C(0x2D450A6215B1139E), - UINT64_C(0x19BAEDC9FCCBB9D9), UINT64_C(0x76E54ACA4287976A), - UINT64_C(0x17F83C6126B94CA1), UINT64_C(0x78A79B6298F56212), - UINT64_C(0x4C587CC9718FC855), UINT64_C(0x2307DBCACFC3E6E6), - UINT64_C(0x24A6B39EA27A9CDA), UINT64_C(0x4BF9149D1C36B269), - UINT64_C(0x7F06F336F54C182E), UINT64_C(0x105954354B00369D), - UINT64_C(0x382211CF179F762B), UINT64_C(0x577DB6CCA9D35898), - UINT64_C(0x6382516740A9F2DF), UINT64_C(0x0CDDF664FEE5DC6C), - UINT64_C(0x0B7C9E30935CA650), UINT64_C(0x642339332D1088E3), - UINT64_C(0x50DCDE98C46A22A4), UINT64_C(0x3F83799B7A260C17), - UINT64_C(0x5E9E0F301E18D7DC), UINT64_C(0x31C1A833A054F96F), - UINT64_C(0x053E4F98492E5328), UINT64_C(0x6A61E89BF7627D9B), - UINT64_C(0x6DC080CF9ADB07A7), UINT64_C(0x029F27CC24972914), - UINT64_C(0x3660C067CDED8353), UINT64_C(0x593F676473A1ADE0) - }, { - UINT64_C(0x0000000000000000), UINT64_C(0x0DF1D05C9279E954), - UINT64_C(0x1AE2A1B924F3D2A9), UINT64_C(0x171371E5B68A3BFD), - UINT64_C(0xB1DA4DDC62497DC1), UINT64_C(0xBC2B9D80F0309495), - UINT64_C(0xAB38EC6546BAAF68), UINT64_C(0xA6C93C39D4C3463C), - UINT64_C(0xE7AB9517EE3D2210), UINT64_C(0xEA5A454B7C44CB44), - UINT64_C(0xFD4934AECACEF0B9), UINT64_C(0xF0B8E4F258B719ED), - UINT64_C(0x5671D8CB8C745FD1), UINT64_C(0x5B8008971E0DB685), - UINT64_C(0x4C937972A8878D78), UINT64_C(0x4162A92E3AFE642C), - UINT64_C(0xCE572B2FDC7B4420), UINT64_C(0xC3A6FB734E02AD74), - UINT64_C(0xD4B58A96F8889689), UINT64_C(0xD9445ACA6AF17FDD), - UINT64_C(0x7F8D66F3BE3239E1), UINT64_C(0x727CB6AF2C4BD0B5), - UINT64_C(0x656FC74A9AC1EB48), UINT64_C(0x689E171608B8021C), - UINT64_C(0x29FCBE3832466630), UINT64_C(0x240D6E64A03F8F64), - UINT64_C(0x331E1F8116B5B499), UINT64_C(0x3EEFCFDD84CC5DCD), - UINT64_C(0x9826F3E4500F1BF1), UINT64_C(0x95D723B8C276F2A5), - UINT64_C(0x82C4525D74FCC958), UINT64_C(0x8F358201E685200C), - UINT64_C(0x9CAF565EB8F78840), UINT64_C(0x915E86022A8E6114), - UINT64_C(0x864DF7E79C045AE9), UINT64_C(0x8BBC27BB0E7DB3BD), - UINT64_C(0x2D751B82DABEF581), UINT64_C(0x2084CBDE48C71CD5), - UINT64_C(0x3797BA3BFE4D2728), UINT64_C(0x3A666A676C34CE7C), - UINT64_C(0x7B04C34956CAAA50), UINT64_C(0x76F51315C4B34304), - UINT64_C(0x61E662F0723978F9), UINT64_C(0x6C17B2ACE04091AD), - UINT64_C(0xCADE8E953483D791), UINT64_C(0xC72F5EC9A6FA3EC5), - UINT64_C(0xD03C2F2C10700538), UINT64_C(0xDDCDFF708209EC6C), - UINT64_C(0x52F87D71648CCC60), UINT64_C(0x5F09AD2DF6F52534), - UINT64_C(0x481ADCC8407F1EC9), UINT64_C(0x45EB0C94D206F79D), - UINT64_C(0xE32230AD06C5B1A1), UINT64_C(0xEED3E0F194BC58F5), - UINT64_C(0xF9C0911422366308), UINT64_C(0xF4314148B04F8A5C), - UINT64_C(0xB553E8668AB1EE70), UINT64_C(0xB8A2383A18C80724), - UINT64_C(0xAFB149DFAE423CD9), UINT64_C(0xA24099833C3BD58D), - UINT64_C(0x0489A5BAE8F893B1), UINT64_C(0x097875E67A817AE5), - UINT64_C(0x1E6B0403CC0B4118), UINT64_C(0x139AD45F5E72A84C), - UINT64_C(0x385FADBC70EF1181), UINT64_C(0x35AE7DE0E296F8D5), - UINT64_C(0x22BD0C05541CC328), UINT64_C(0x2F4CDC59C6652A7C), - UINT64_C(0x8985E06012A66C40), UINT64_C(0x8474303C80DF8514), - UINT64_C(0x936741D93655BEE9), UINT64_C(0x9E969185A42C57BD), - UINT64_C(0xDFF438AB9ED23391), UINT64_C(0xD205E8F70CABDAC5), - UINT64_C(0xC5169912BA21E138), UINT64_C(0xC8E7494E2858086C), - UINT64_C(0x6E2E7577FC9B4E50), UINT64_C(0x63DFA52B6EE2A704), - UINT64_C(0x74CCD4CED8689CF9), UINT64_C(0x793D04924A1175AD), - UINT64_C(0xF6088693AC9455A1), UINT64_C(0xFBF956CF3EEDBCF5), - UINT64_C(0xECEA272A88678708), UINT64_C(0xE11BF7761A1E6E5C), - UINT64_C(0x47D2CB4FCEDD2860), UINT64_C(0x4A231B135CA4C134), - UINT64_C(0x5D306AF6EA2EFAC9), UINT64_C(0x50C1BAAA7857139D), - UINT64_C(0x11A3138442A977B1), UINT64_C(0x1C52C3D8D0D09EE5), - UINT64_C(0x0B41B23D665AA518), UINT64_C(0x06B06261F4234C4C), - UINT64_C(0xA0795E5820E00A70), UINT64_C(0xAD888E04B299E324), - UINT64_C(0xBA9BFFE10413D8D9), UINT64_C(0xB76A2FBD966A318D), - UINT64_C(0xA4F0FBE2C81899C1), UINT64_C(0xA9012BBE5A617095), - UINT64_C(0xBE125A5BECEB4B68), UINT64_C(0xB3E38A077E92A23C), - UINT64_C(0x152AB63EAA51E400), UINT64_C(0x18DB666238280D54), - UINT64_C(0x0FC817878EA236A9), UINT64_C(0x0239C7DB1CDBDFFD), - UINT64_C(0x435B6EF52625BBD1), UINT64_C(0x4EAABEA9B45C5285), - UINT64_C(0x59B9CF4C02D66978), UINT64_C(0x54481F1090AF802C), - UINT64_C(0xF2812329446CC610), UINT64_C(0xFF70F375D6152F44), - UINT64_C(0xE8638290609F14B9), UINT64_C(0xE59252CCF2E6FDED), - UINT64_C(0x6AA7D0CD1463DDE1), UINT64_C(0x67560091861A34B5), - UINT64_C(0x7045717430900F48), UINT64_C(0x7DB4A128A2E9E61C), - UINT64_C(0xDB7D9D11762AA020), UINT64_C(0xD68C4D4DE4534974), - UINT64_C(0xC19F3CA852D97289), UINT64_C(0xCC6EECF4C0A09BDD), - UINT64_C(0x8D0C45DAFA5EFFF1), UINT64_C(0x80FD9586682716A5), - UINT64_C(0x97EEE463DEAD2D58), UINT64_C(0x9A1F343F4CD4C40C), - UINT64_C(0x3CD6080698178230), UINT64_C(0x3127D85A0A6E6B64), - UINT64_C(0x2634A9BFBCE45099), UINT64_C(0x2BC579E32E9DB9CD), - UINT64_C(0xF5A054D6CA71FB90), UINT64_C(0xF851848A580812C4), - UINT64_C(0xEF42F56FEE822939), UINT64_C(0xE2B325337CFBC06D), - UINT64_C(0x447A190AA8388651), UINT64_C(0x498BC9563A416F05), - UINT64_C(0x5E98B8B38CCB54F8), UINT64_C(0x536968EF1EB2BDAC), - UINT64_C(0x120BC1C1244CD980), UINT64_C(0x1FFA119DB63530D4), - UINT64_C(0x08E9607800BF0B29), UINT64_C(0x0518B02492C6E27D), - UINT64_C(0xA3D18C1D4605A441), UINT64_C(0xAE205C41D47C4D15), - UINT64_C(0xB9332DA462F676E8), UINT64_C(0xB4C2FDF8F08F9FBC), - UINT64_C(0x3BF77FF9160ABFB0), UINT64_C(0x3606AFA5847356E4), - UINT64_C(0x2115DE4032F96D19), UINT64_C(0x2CE40E1CA080844D), - UINT64_C(0x8A2D32257443C271), UINT64_C(0x87DCE279E63A2B25), - UINT64_C(0x90CF939C50B010D8), UINT64_C(0x9D3E43C0C2C9F98C), - UINT64_C(0xDC5CEAEEF8379DA0), UINT64_C(0xD1AD3AB26A4E74F4), - UINT64_C(0xC6BE4B57DCC44F09), UINT64_C(0xCB4F9B0B4EBDA65D), - UINT64_C(0x6D86A7329A7EE061), UINT64_C(0x6077776E08070935), - UINT64_C(0x7764068BBE8D32C8), UINT64_C(0x7A95D6D72CF4DB9C), - UINT64_C(0x690F0288728673D0), UINT64_C(0x64FED2D4E0FF9A84), - UINT64_C(0x73EDA3315675A179), UINT64_C(0x7E1C736DC40C482D), - UINT64_C(0xD8D54F5410CF0E11), UINT64_C(0xD5249F0882B6E745), - UINT64_C(0xC237EEED343CDCB8), UINT64_C(0xCFC63EB1A64535EC), - UINT64_C(0x8EA4979F9CBB51C0), UINT64_C(0x835547C30EC2B894), - UINT64_C(0x94463626B8488369), UINT64_C(0x99B7E67A2A316A3D), - UINT64_C(0x3F7EDA43FEF22C01), UINT64_C(0x328F0A1F6C8BC555), - UINT64_C(0x259C7BFADA01FEA8), UINT64_C(0x286DABA6487817FC), - UINT64_C(0xA75829A7AEFD37F0), UINT64_C(0xAAA9F9FB3C84DEA4), - UINT64_C(0xBDBA881E8A0EE559), UINT64_C(0xB04B584218770C0D), - UINT64_C(0x1682647BCCB44A31), UINT64_C(0x1B73B4275ECDA365), - UINT64_C(0x0C60C5C2E8479898), UINT64_C(0x0191159E7A3E71CC), - UINT64_C(0x40F3BCB040C015E0), UINT64_C(0x4D026CECD2B9FCB4), - UINT64_C(0x5A111D096433C749), UINT64_C(0x57E0CD55F64A2E1D), - UINT64_C(0xF129F16C22896821), UINT64_C(0xFCD82130B0F08175), - UINT64_C(0xEBCB50D5067ABA88), UINT64_C(0xE63A8089940353DC), - UINT64_C(0xCDFFF96ABA9EEA11), UINT64_C(0xC00E293628E70345), - UINT64_C(0xD71D58D39E6D38B8), UINT64_C(0xDAEC888F0C14D1EC), - UINT64_C(0x7C25B4B6D8D797D0), UINT64_C(0x71D464EA4AAE7E84), - UINT64_C(0x66C7150FFC244579), UINT64_C(0x6B36C5536E5DAC2D), - UINT64_C(0x2A546C7D54A3C801), UINT64_C(0x27A5BC21C6DA2155), - UINT64_C(0x30B6CDC470501AA8), UINT64_C(0x3D471D98E229F3FC), - UINT64_C(0x9B8E21A136EAB5C0), UINT64_C(0x967FF1FDA4935C94), - UINT64_C(0x816C801812196769), UINT64_C(0x8C9D504480608E3D), - UINT64_C(0x03A8D24566E5AE31), UINT64_C(0x0E590219F49C4765), - UINT64_C(0x194A73FC42167C98), UINT64_C(0x14BBA3A0D06F95CC), - UINT64_C(0xB2729F9904ACD3F0), UINT64_C(0xBF834FC596D53AA4), - UINT64_C(0xA8903E20205F0159), UINT64_C(0xA561EE7CB226E80D), - UINT64_C(0xE403475288D88C21), UINT64_C(0xE9F2970E1AA16575), - UINT64_C(0xFEE1E6EBAC2B5E88), UINT64_C(0xF31036B73E52B7DC), - UINT64_C(0x55D90A8EEA91F1E0), UINT64_C(0x5828DAD278E818B4), - UINT64_C(0x4F3BAB37CE622349), UINT64_C(0x42CA7B6B5C1BCA1D), - UINT64_C(0x5150AF3402696251), UINT64_C(0x5CA17F6890108B05), - UINT64_C(0x4BB20E8D269AB0F8), UINT64_C(0x4643DED1B4E359AC), - UINT64_C(0xE08AE2E860201F90), UINT64_C(0xED7B32B4F259F6C4), - UINT64_C(0xFA68435144D3CD39), UINT64_C(0xF799930DD6AA246D), - UINT64_C(0xB6FB3A23EC544041), UINT64_C(0xBB0AEA7F7E2DA915), - UINT64_C(0xAC199B9AC8A792E8), UINT64_C(0xA1E84BC65ADE7BBC), - UINT64_C(0x072177FF8E1D3D80), UINT64_C(0x0AD0A7A31C64D4D4), - UINT64_C(0x1DC3D646AAEEEF29), UINT64_C(0x1032061A3897067D), - UINT64_C(0x9F07841BDE122671), UINT64_C(0x92F654474C6BCF25), - UINT64_C(0x85E525A2FAE1F4D8), UINT64_C(0x8814F5FE68981D8C), - UINT64_C(0x2EDDC9C7BC5B5BB0), UINT64_C(0x232C199B2E22B2E4), - UINT64_C(0x343F687E98A88919), UINT64_C(0x39CEB8220AD1604D), - UINT64_C(0x78AC110C302F0461), UINT64_C(0x755DC150A256ED35), - UINT64_C(0x624EB0B514DCD6C8), UINT64_C(0x6FBF60E986A53F9C), - UINT64_C(0xC9765CD0526679A0), UINT64_C(0xC4878C8CC01F90F4), - UINT64_C(0xD394FD697695AB09), UINT64_C(0xDE652D35E4EC425D) - }, { - UINT64_C(0x0000000000000000), UINT64_C(0xCB6D6A914AE10B3F), - UINT64_C(0x96DBD42295C2177E), UINT64_C(0x5DB6BEB3DF231C41), - UINT64_C(0x2CB7A9452A852FFC), UINT64_C(0xE7DAC3D4606424C3), - UINT64_C(0xBA6C7D67BF473882), UINT64_C(0x710117F6F5A633BD), - UINT64_C(0xDD705D247FA5876A), UINT64_C(0x161D37B535448C55), - UINT64_C(0x4BAB8906EA679014), UINT64_C(0x80C6E397A0869B2B), - UINT64_C(0xF1C7F4615520A896), UINT64_C(0x3AAA9EF01FC1A3A9), - UINT64_C(0x671C2043C0E2BFE8), UINT64_C(0xAC714AD28A03B4D7), - UINT64_C(0xBAE1BA48FE4A0FD5), UINT64_C(0x718CD0D9B4AB04EA), - UINT64_C(0x2C3A6E6A6B8818AB), UINT64_C(0xE75704FB21691394), - UINT64_C(0x9656130DD4CF2029), UINT64_C(0x5D3B799C9E2E2B16), - UINT64_C(0x008DC72F410D3757), UINT64_C(0xCBE0ADBE0BEC3C68), - UINT64_C(0x6791E76C81EF88BF), UINT64_C(0xACFC8DFDCB0E8380), - UINT64_C(0xF14A334E142D9FC1), UINT64_C(0x3A2759DF5ECC94FE), - UINT64_C(0x4B264E29AB6AA743), UINT64_C(0x804B24B8E18BAC7C), - UINT64_C(0xDDFD9A0B3EA8B03D), UINT64_C(0x1690F09A7449BB02), - UINT64_C(0xF1DD7B3ED73AC638), UINT64_C(0x3AB011AF9DDBCD07), - UINT64_C(0x6706AF1C42F8D146), UINT64_C(0xAC6BC58D0819DA79), - UINT64_C(0xDD6AD27BFDBFE9C4), UINT64_C(0x1607B8EAB75EE2FB), - UINT64_C(0x4BB10659687DFEBA), UINT64_C(0x80DC6CC8229CF585), - UINT64_C(0x2CAD261AA89F4152), UINT64_C(0xE7C04C8BE27E4A6D), - UINT64_C(0xBA76F2383D5D562C), UINT64_C(0x711B98A977BC5D13), - UINT64_C(0x001A8F5F821A6EAE), UINT64_C(0xCB77E5CEC8FB6591), - UINT64_C(0x96C15B7D17D879D0), UINT64_C(0x5DAC31EC5D3972EF), - UINT64_C(0x4B3CC1762970C9ED), UINT64_C(0x8051ABE76391C2D2), - UINT64_C(0xDDE71554BCB2DE93), UINT64_C(0x168A7FC5F653D5AC), - UINT64_C(0x678B683303F5E611), UINT64_C(0xACE602A24914ED2E), - UINT64_C(0xF150BC119637F16F), UINT64_C(0x3A3DD680DCD6FA50), - UINT64_C(0x964C9C5256D54E87), UINT64_C(0x5D21F6C31C3445B8), - UINT64_C(0x00974870C31759F9), UINT64_C(0xCBFA22E189F652C6), - UINT64_C(0xBAFB35177C50617B), UINT64_C(0x71965F8636B16A44), - UINT64_C(0x2C20E135E9927605), UINT64_C(0xE74D8BA4A3737D3A), - UINT64_C(0xE2BBF77CAE758C71), UINT64_C(0x29D69DEDE494874E), - UINT64_C(0x7460235E3BB79B0F), UINT64_C(0xBF0D49CF71569030), - UINT64_C(0xCE0C5E3984F0A38D), UINT64_C(0x056134A8CE11A8B2), - UINT64_C(0x58D78A1B1132B4F3), UINT64_C(0x93BAE08A5BD3BFCC), - UINT64_C(0x3FCBAA58D1D00B1B), UINT64_C(0xF4A6C0C99B310024), - UINT64_C(0xA9107E7A44121C65), UINT64_C(0x627D14EB0EF3175A), - UINT64_C(0x137C031DFB5524E7), UINT64_C(0xD811698CB1B42FD8), - UINT64_C(0x85A7D73F6E973399), UINT64_C(0x4ECABDAE247638A6), - UINT64_C(0x585A4D34503F83A4), UINT64_C(0x933727A51ADE889B), - UINT64_C(0xCE819916C5FD94DA), UINT64_C(0x05ECF3878F1C9FE5), - UINT64_C(0x74EDE4717ABAAC58), UINT64_C(0xBF808EE0305BA767), - UINT64_C(0xE2363053EF78BB26), UINT64_C(0x295B5AC2A599B019), - UINT64_C(0x852A10102F9A04CE), UINT64_C(0x4E477A81657B0FF1), - UINT64_C(0x13F1C432BA5813B0), UINT64_C(0xD89CAEA3F0B9188F), - UINT64_C(0xA99DB955051F2B32), UINT64_C(0x62F0D3C44FFE200D), - UINT64_C(0x3F466D7790DD3C4C), UINT64_C(0xF42B07E6DA3C3773), - UINT64_C(0x13668C42794F4A49), UINT64_C(0xD80BE6D333AE4176), - UINT64_C(0x85BD5860EC8D5D37), UINT64_C(0x4ED032F1A66C5608), - UINT64_C(0x3FD1250753CA65B5), UINT64_C(0xF4BC4F96192B6E8A), - UINT64_C(0xA90AF125C60872CB), UINT64_C(0x62679BB48CE979F4), - UINT64_C(0xCE16D16606EACD23), UINT64_C(0x057BBBF74C0BC61C), - UINT64_C(0x58CD05449328DA5D), UINT64_C(0x93A06FD5D9C9D162), - UINT64_C(0xE2A178232C6FE2DF), UINT64_C(0x29CC12B2668EE9E0), - UINT64_C(0x747AAC01B9ADF5A1), UINT64_C(0xBF17C690F34CFE9E), - UINT64_C(0xA987360A8705459C), UINT64_C(0x62EA5C9BCDE44EA3), - UINT64_C(0x3F5CE22812C752E2), UINT64_C(0xF43188B9582659DD), - UINT64_C(0x85309F4FAD806A60), UINT64_C(0x4E5DF5DEE761615F), - UINT64_C(0x13EB4B6D38427D1E), UINT64_C(0xD88621FC72A37621), - UINT64_C(0x74F76B2EF8A0C2F6), UINT64_C(0xBF9A01BFB241C9C9), - UINT64_C(0xE22CBF0C6D62D588), UINT64_C(0x2941D59D2783DEB7), - UINT64_C(0x5840C26BD225ED0A), UINT64_C(0x932DA8FA98C4E635), - UINT64_C(0xCE9B164947E7FA74), UINT64_C(0x05F67CD80D06F14B), - UINT64_C(0xC477EFF95CEB18E3), UINT64_C(0x0F1A8568160A13DC), - UINT64_C(0x52AC3BDBC9290F9D), UINT64_C(0x99C1514A83C804A2), - UINT64_C(0xE8C046BC766E371F), UINT64_C(0x23AD2C2D3C8F3C20), - UINT64_C(0x7E1B929EE3AC2061), UINT64_C(0xB576F80FA94D2B5E), - UINT64_C(0x1907B2DD234E9F89), UINT64_C(0xD26AD84C69AF94B6), - UINT64_C(0x8FDC66FFB68C88F7), UINT64_C(0x44B10C6EFC6D83C8), - UINT64_C(0x35B01B9809CBB075), UINT64_C(0xFEDD7109432ABB4A), - UINT64_C(0xA36BCFBA9C09A70B), UINT64_C(0x6806A52BD6E8AC34), - UINT64_C(0x7E9655B1A2A11736), UINT64_C(0xB5FB3F20E8401C09), - UINT64_C(0xE84D819337630048), UINT64_C(0x2320EB027D820B77), - UINT64_C(0x5221FCF4882438CA), UINT64_C(0x994C9665C2C533F5), - UINT64_C(0xC4FA28D61DE62FB4), UINT64_C(0x0F9742475707248B), - UINT64_C(0xA3E60895DD04905C), UINT64_C(0x688B620497E59B63), - UINT64_C(0x353DDCB748C68722), UINT64_C(0xFE50B62602278C1D), - UINT64_C(0x8F51A1D0F781BFA0), UINT64_C(0x443CCB41BD60B49F), - UINT64_C(0x198A75F26243A8DE), UINT64_C(0xD2E71F6328A2A3E1), - UINT64_C(0x35AA94C78BD1DEDB), UINT64_C(0xFEC7FE56C130D5E4), - UINT64_C(0xA37140E51E13C9A5), UINT64_C(0x681C2A7454F2C29A), - UINT64_C(0x191D3D82A154F127), UINT64_C(0xD2705713EBB5FA18), - UINT64_C(0x8FC6E9A03496E659), UINT64_C(0x44AB83317E77ED66), - UINT64_C(0xE8DAC9E3F47459B1), UINT64_C(0x23B7A372BE95528E), - UINT64_C(0x7E011DC161B64ECF), UINT64_C(0xB56C77502B5745F0), - UINT64_C(0xC46D60A6DEF1764D), UINT64_C(0x0F000A3794107D72), - UINT64_C(0x52B6B4844B336133), UINT64_C(0x99DBDE1501D26A0C), - UINT64_C(0x8F4B2E8F759BD10E), UINT64_C(0x4426441E3F7ADA31), - UINT64_C(0x1990FAADE059C670), UINT64_C(0xD2FD903CAAB8CD4F), - UINT64_C(0xA3FC87CA5F1EFEF2), UINT64_C(0x6891ED5B15FFF5CD), - UINT64_C(0x352753E8CADCE98C), UINT64_C(0xFE4A3979803DE2B3), - UINT64_C(0x523B73AB0A3E5664), UINT64_C(0x9956193A40DF5D5B), - UINT64_C(0xC4E0A7899FFC411A), UINT64_C(0x0F8DCD18D51D4A25), - UINT64_C(0x7E8CDAEE20BB7998), UINT64_C(0xB5E1B07F6A5A72A7), - UINT64_C(0xE8570ECCB5796EE6), UINT64_C(0x233A645DFF9865D9), - UINT64_C(0x26CC1885F29E9492), UINT64_C(0xEDA17214B87F9FAD), - UINT64_C(0xB017CCA7675C83EC), UINT64_C(0x7B7AA6362DBD88D3), - UINT64_C(0x0A7BB1C0D81BBB6E), UINT64_C(0xC116DB5192FAB051), - UINT64_C(0x9CA065E24DD9AC10), UINT64_C(0x57CD0F730738A72F), - UINT64_C(0xFBBC45A18D3B13F8), UINT64_C(0x30D12F30C7DA18C7), - UINT64_C(0x6D67918318F90486), UINT64_C(0xA60AFB1252180FB9), - UINT64_C(0xD70BECE4A7BE3C04), UINT64_C(0x1C668675ED5F373B), - UINT64_C(0x41D038C6327C2B7A), UINT64_C(0x8ABD5257789D2045), - UINT64_C(0x9C2DA2CD0CD49B47), UINT64_C(0x5740C85C46359078), - UINT64_C(0x0AF676EF99168C39), UINT64_C(0xC19B1C7ED3F78706), - UINT64_C(0xB09A0B882651B4BB), UINT64_C(0x7BF761196CB0BF84), - UINT64_C(0x2641DFAAB393A3C5), UINT64_C(0xED2CB53BF972A8FA), - UINT64_C(0x415DFFE973711C2D), UINT64_C(0x8A30957839901712), - UINT64_C(0xD7862BCBE6B30B53), UINT64_C(0x1CEB415AAC52006C), - UINT64_C(0x6DEA56AC59F433D1), UINT64_C(0xA6873C3D131538EE), - UINT64_C(0xFB31828ECC3624AF), UINT64_C(0x305CE81F86D72F90), - UINT64_C(0xD71163BB25A452AA), UINT64_C(0x1C7C092A6F455995), - UINT64_C(0x41CAB799B06645D4), UINT64_C(0x8AA7DD08FA874EEB), - UINT64_C(0xFBA6CAFE0F217D56), UINT64_C(0x30CBA06F45C07669), - UINT64_C(0x6D7D1EDC9AE36A28), UINT64_C(0xA610744DD0026117), - UINT64_C(0x0A613E9F5A01D5C0), UINT64_C(0xC10C540E10E0DEFF), - UINT64_C(0x9CBAEABDCFC3C2BE), UINT64_C(0x57D7802C8522C981), - UINT64_C(0x26D697DA7084FA3C), UINT64_C(0xEDBBFD4B3A65F103), - UINT64_C(0xB00D43F8E546ED42), UINT64_C(0x7B602969AFA7E67D), - UINT64_C(0x6DF0D9F3DBEE5D7F), UINT64_C(0xA69DB362910F5640), - UINT64_C(0xFB2B0DD14E2C4A01), UINT64_C(0x3046674004CD413E), - UINT64_C(0x414770B6F16B7283), UINT64_C(0x8A2A1A27BB8A79BC), - UINT64_C(0xD79CA49464A965FD), UINT64_C(0x1CF1CE052E486EC2), - UINT64_C(0xB08084D7A44BDA15), UINT64_C(0x7BEDEE46EEAAD12A), - UINT64_C(0x265B50F53189CD6B), UINT64_C(0xED363A647B68C654), - UINT64_C(0x9C372D928ECEF5E9), UINT64_C(0x575A4703C42FFED6), - UINT64_C(0x0AECF9B01B0CE297), UINT64_C(0xC181932151EDE9A8) - }, { - UINT64_C(0x0000000000000000), UINT64_C(0xDCA12C225E8AEE1D), - UINT64_C(0xB8435944BC14DD3B), UINT64_C(0x64E27566E29E3326), - UINT64_C(0x7087B2887829BA77), UINT64_C(0xAC269EAA26A3546A), - UINT64_C(0xC8C4EBCCC43D674C), UINT64_C(0x1465C7EE9AB78951), - UINT64_C(0xE00E6511F15274EF), UINT64_C(0x3CAF4933AFD89AF2), - UINT64_C(0x584D3C554D46A9D4), UINT64_C(0x84EC107713CC47C9), - UINT64_C(0x9089D799897BCE98), UINT64_C(0x4C28FBBBD7F12085), - UINT64_C(0x28CA8EDD356F13A3), UINT64_C(0xF46BA2FF6BE5FDBE), - UINT64_C(0x4503C48DC90A304C), UINT64_C(0x99A2E8AF9780DE51), - UINT64_C(0xFD409DC9751EED77), UINT64_C(0x21E1B1EB2B94036A), - UINT64_C(0x35847605B1238A3B), UINT64_C(0xE9255A27EFA96426), - UINT64_C(0x8DC72F410D375700), UINT64_C(0x5166036353BDB91D), - UINT64_C(0xA50DA19C385844A3), UINT64_C(0x79AC8DBE66D2AABE), - UINT64_C(0x1D4EF8D8844C9998), UINT64_C(0xC1EFD4FADAC67785), - UINT64_C(0xD58A13144071FED4), UINT64_C(0x092B3F361EFB10C9), - UINT64_C(0x6DC94A50FC6523EF), UINT64_C(0xB1686672A2EFCDF2), - UINT64_C(0x8A06881B93156098), UINT64_C(0x56A7A439CD9F8E85), - UINT64_C(0x3245D15F2F01BDA3), UINT64_C(0xEEE4FD7D718B53BE), - UINT64_C(0xFA813A93EB3CDAEF), UINT64_C(0x262016B1B5B634F2), - UINT64_C(0x42C263D7572807D4), UINT64_C(0x9E634FF509A2E9C9), - UINT64_C(0x6A08ED0A62471477), UINT64_C(0xB6A9C1283CCDFA6A), - UINT64_C(0xD24BB44EDE53C94C), UINT64_C(0x0EEA986C80D92751), - UINT64_C(0x1A8F5F821A6EAE00), UINT64_C(0xC62E73A044E4401D), - UINT64_C(0xA2CC06C6A67A733B), UINT64_C(0x7E6D2AE4F8F09D26), - UINT64_C(0xCF054C965A1F50D4), UINT64_C(0x13A460B40495BEC9), - UINT64_C(0x774615D2E60B8DEF), UINT64_C(0xABE739F0B88163F2), - UINT64_C(0xBF82FE1E2236EAA3), UINT64_C(0x6323D23C7CBC04BE), - UINT64_C(0x07C1A75A9E223798), UINT64_C(0xDB608B78C0A8D985), - UINT64_C(0x2F0B2987AB4D243B), UINT64_C(0xF3AA05A5F5C7CA26), - UINT64_C(0x974870C31759F900), UINT64_C(0x4BE95CE149D3171D), - UINT64_C(0x5F8C9B0FD3649E4C), UINT64_C(0x832DB72D8DEE7051), - UINT64_C(0xE7CFC24B6F704377), UINT64_C(0x3B6EEE6931FAAD6A), - UINT64_C(0x91131E980D8418A2), UINT64_C(0x4DB232BA530EF6BF), - UINT64_C(0x295047DCB190C599), UINT64_C(0xF5F16BFEEF1A2B84), - UINT64_C(0xE194AC1075ADA2D5), UINT64_C(0x3D3580322B274CC8), - UINT64_C(0x59D7F554C9B97FEE), UINT64_C(0x8576D976973391F3), - UINT64_C(0x711D7B89FCD66C4D), UINT64_C(0xADBC57ABA25C8250), - UINT64_C(0xC95E22CD40C2B176), UINT64_C(0x15FF0EEF1E485F6B), - UINT64_C(0x019AC90184FFD63A), UINT64_C(0xDD3BE523DA753827), - UINT64_C(0xB9D9904538EB0B01), UINT64_C(0x6578BC676661E51C), - UINT64_C(0xD410DA15C48E28EE), UINT64_C(0x08B1F6379A04C6F3), - UINT64_C(0x6C538351789AF5D5), UINT64_C(0xB0F2AF7326101BC8), - UINT64_C(0xA497689DBCA79299), UINT64_C(0x783644BFE22D7C84), - UINT64_C(0x1CD431D900B34FA2), UINT64_C(0xC0751DFB5E39A1BF), - UINT64_C(0x341EBF0435DC5C01), UINT64_C(0xE8BF93266B56B21C), - UINT64_C(0x8C5DE64089C8813A), UINT64_C(0x50FCCA62D7426F27), - UINT64_C(0x44990D8C4DF5E676), UINT64_C(0x983821AE137F086B), - UINT64_C(0xFCDA54C8F1E13B4D), UINT64_C(0x207B78EAAF6BD550), - UINT64_C(0x1B1596839E91783A), UINT64_C(0xC7B4BAA1C01B9627), - UINT64_C(0xA356CFC72285A501), UINT64_C(0x7FF7E3E57C0F4B1C), - UINT64_C(0x6B92240BE6B8C24D), UINT64_C(0xB7330829B8322C50), - UINT64_C(0xD3D17D4F5AAC1F76), UINT64_C(0x0F70516D0426F16B), - UINT64_C(0xFB1BF3926FC30CD5), UINT64_C(0x27BADFB03149E2C8), - UINT64_C(0x4358AAD6D3D7D1EE), UINT64_C(0x9FF986F48D5D3FF3), - UINT64_C(0x8B9C411A17EAB6A2), UINT64_C(0x573D6D38496058BF), - UINT64_C(0x33DF185EABFE6B99), UINT64_C(0xEF7E347CF5748584), - UINT64_C(0x5E16520E579B4876), UINT64_C(0x82B77E2C0911A66B), - UINT64_C(0xE6550B4AEB8F954D), UINT64_C(0x3AF42768B5057B50), - UINT64_C(0x2E91E0862FB2F201), UINT64_C(0xF230CCA471381C1C), - UINT64_C(0x96D2B9C293A62F3A), UINT64_C(0x4A7395E0CD2CC127), - UINT64_C(0xBE18371FA6C93C99), UINT64_C(0x62B91B3DF843D284), - UINT64_C(0x065B6E5B1ADDE1A2), UINT64_C(0xDAFA427944570FBF), - UINT64_C(0xCE9F8597DEE086EE), UINT64_C(0x123EA9B5806A68F3), - UINT64_C(0x76DCDCD362F45BD5), UINT64_C(0xAA7DF0F13C7EB5C8), - UINT64_C(0xA739329F30A7E9D6), UINT64_C(0x7B981EBD6E2D07CB), - UINT64_C(0x1F7A6BDB8CB334ED), UINT64_C(0xC3DB47F9D239DAF0), - UINT64_C(0xD7BE8017488E53A1), UINT64_C(0x0B1FAC351604BDBC), - UINT64_C(0x6FFDD953F49A8E9A), UINT64_C(0xB35CF571AA106087), - UINT64_C(0x4737578EC1F59D39), UINT64_C(0x9B967BAC9F7F7324), - UINT64_C(0xFF740ECA7DE14002), UINT64_C(0x23D522E8236BAE1F), - UINT64_C(0x37B0E506B9DC274E), UINT64_C(0xEB11C924E756C953), - UINT64_C(0x8FF3BC4205C8FA75), UINT64_C(0x535290605B421468), - UINT64_C(0xE23AF612F9ADD99A), UINT64_C(0x3E9BDA30A7273787), - UINT64_C(0x5A79AF5645B904A1), UINT64_C(0x86D883741B33EABC), - UINT64_C(0x92BD449A818463ED), UINT64_C(0x4E1C68B8DF0E8DF0), - UINT64_C(0x2AFE1DDE3D90BED6), UINT64_C(0xF65F31FC631A50CB), - UINT64_C(0x0234930308FFAD75), UINT64_C(0xDE95BF2156754368), - UINT64_C(0xBA77CA47B4EB704E), UINT64_C(0x66D6E665EA619E53), - UINT64_C(0x72B3218B70D61702), UINT64_C(0xAE120DA92E5CF91F), - UINT64_C(0xCAF078CFCCC2CA39), UINT64_C(0x165154ED92482424), - UINT64_C(0x2D3FBA84A3B2894E), UINT64_C(0xF19E96A6FD386753), - UINT64_C(0x957CE3C01FA65475), UINT64_C(0x49DDCFE2412CBA68), - UINT64_C(0x5DB8080CDB9B3339), UINT64_C(0x8119242E8511DD24), - UINT64_C(0xE5FB5148678FEE02), UINT64_C(0x395A7D6A3905001F), - UINT64_C(0xCD31DF9552E0FDA1), UINT64_C(0x1190F3B70C6A13BC), - UINT64_C(0x757286D1EEF4209A), UINT64_C(0xA9D3AAF3B07ECE87), - UINT64_C(0xBDB66D1D2AC947D6), UINT64_C(0x6117413F7443A9CB), - UINT64_C(0x05F5345996DD9AED), UINT64_C(0xD954187BC85774F0), - UINT64_C(0x683C7E096AB8B902), UINT64_C(0xB49D522B3432571F), - UINT64_C(0xD07F274DD6AC6439), UINT64_C(0x0CDE0B6F88268A24), - UINT64_C(0x18BBCC8112910375), UINT64_C(0xC41AE0A34C1BED68), - UINT64_C(0xA0F895C5AE85DE4E), UINT64_C(0x7C59B9E7F00F3053), - UINT64_C(0x88321B189BEACDED), UINT64_C(0x5493373AC56023F0), - UINT64_C(0x3071425C27FE10D6), UINT64_C(0xECD06E7E7974FECB), - UINT64_C(0xF8B5A990E3C3779A), UINT64_C(0x241485B2BD499987), - UINT64_C(0x40F6F0D45FD7AAA1), UINT64_C(0x9C57DCF6015D44BC), - UINT64_C(0x362A2C073D23F174), UINT64_C(0xEA8B002563A91F69), - UINT64_C(0x8E69754381372C4F), UINT64_C(0x52C85961DFBDC252), - UINT64_C(0x46AD9E8F450A4B03), UINT64_C(0x9A0CB2AD1B80A51E), - UINT64_C(0xFEEEC7CBF91E9638), UINT64_C(0x224FEBE9A7947825), - UINT64_C(0xD6244916CC71859B), UINT64_C(0x0A85653492FB6B86), - UINT64_C(0x6E671052706558A0), UINT64_C(0xB2C63C702EEFB6BD), - UINT64_C(0xA6A3FB9EB4583FEC), UINT64_C(0x7A02D7BCEAD2D1F1), - UINT64_C(0x1EE0A2DA084CE2D7), UINT64_C(0xC2418EF856C60CCA), - UINT64_C(0x7329E88AF429C138), UINT64_C(0xAF88C4A8AAA32F25), - UINT64_C(0xCB6AB1CE483D1C03), UINT64_C(0x17CB9DEC16B7F21E), - UINT64_C(0x03AE5A028C007B4F), UINT64_C(0xDF0F7620D28A9552), - UINT64_C(0xBBED03463014A674), UINT64_C(0x674C2F646E9E4869), - UINT64_C(0x93278D9B057BB5D7), UINT64_C(0x4F86A1B95BF15BCA), - UINT64_C(0x2B64D4DFB96F68EC), UINT64_C(0xF7C5F8FDE7E586F1), - UINT64_C(0xE3A03F137D520FA0), UINT64_C(0x3F01133123D8E1BD), - UINT64_C(0x5BE36657C146D29B), UINT64_C(0x87424A759FCC3C86), - UINT64_C(0xBC2CA41CAE3691EC), UINT64_C(0x608D883EF0BC7FF1), - UINT64_C(0x046FFD5812224CD7), UINT64_C(0xD8CED17A4CA8A2CA), - UINT64_C(0xCCAB1694D61F2B9B), UINT64_C(0x100A3AB68895C586), - UINT64_C(0x74E84FD06A0BF6A0), UINT64_C(0xA84963F2348118BD), - UINT64_C(0x5C22C10D5F64E503), UINT64_C(0x8083ED2F01EE0B1E), - UINT64_C(0xE4619849E3703838), UINT64_C(0x38C0B46BBDFAD625), - UINT64_C(0x2CA57385274D5F74), UINT64_C(0xF0045FA779C7B169), - UINT64_C(0x94E62AC19B59824F), UINT64_C(0x484706E3C5D36C52), - UINT64_C(0xF92F6091673CA1A0), UINT64_C(0x258E4CB339B64FBD), - UINT64_C(0x416C39D5DB287C9B), UINT64_C(0x9DCD15F785A29286), - UINT64_C(0x89A8D2191F151BD7), UINT64_C(0x5509FE3B419FF5CA), - UINT64_C(0x31EB8B5DA301C6EC), UINT64_C(0xED4AA77FFD8B28F1), - UINT64_C(0x19210580966ED54F), UINT64_C(0xC58029A2C8E43B52), - UINT64_C(0xA1625CC42A7A0874), UINT64_C(0x7DC370E674F0E669), - UINT64_C(0x69A6B708EE476F38), UINT64_C(0xB5079B2AB0CD8125), - UINT64_C(0xD1E5EE4C5253B203), UINT64_C(0x0D44C26E0CD95C1E) - } -}; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_table_le.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_table_le.h deleted file mode 100644 index 1196b31e132..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_table_le.h +++ /dev/null @@ -1,521 +0,0 @@ -/* This file has been automatically generated by crc64_tablegen.c. */ - -const uint64_t lzma_crc64_table[4][256] = { - { - UINT64_C(0x0000000000000000), UINT64_C(0xB32E4CBE03A75F6F), - UINT64_C(0xF4843657A840A05B), UINT64_C(0x47AA7AE9ABE7FF34), - UINT64_C(0x7BD0C384FF8F5E33), UINT64_C(0xC8FE8F3AFC28015C), - UINT64_C(0x8F54F5D357CFFE68), UINT64_C(0x3C7AB96D5468A107), - UINT64_C(0xF7A18709FF1EBC66), UINT64_C(0x448FCBB7FCB9E309), - UINT64_C(0x0325B15E575E1C3D), UINT64_C(0xB00BFDE054F94352), - UINT64_C(0x8C71448D0091E255), UINT64_C(0x3F5F08330336BD3A), - UINT64_C(0x78F572DAA8D1420E), UINT64_C(0xCBDB3E64AB761D61), - UINT64_C(0x7D9BA13851336649), UINT64_C(0xCEB5ED8652943926), - UINT64_C(0x891F976FF973C612), UINT64_C(0x3A31DBD1FAD4997D), - UINT64_C(0x064B62BCAEBC387A), UINT64_C(0xB5652E02AD1B6715), - UINT64_C(0xF2CF54EB06FC9821), UINT64_C(0x41E11855055BC74E), - UINT64_C(0x8A3A2631AE2DDA2F), UINT64_C(0x39146A8FAD8A8540), - UINT64_C(0x7EBE1066066D7A74), UINT64_C(0xCD905CD805CA251B), - UINT64_C(0xF1EAE5B551A2841C), UINT64_C(0x42C4A90B5205DB73), - UINT64_C(0x056ED3E2F9E22447), UINT64_C(0xB6409F5CFA457B28), - UINT64_C(0xFB374270A266CC92), UINT64_C(0x48190ECEA1C193FD), - UINT64_C(0x0FB374270A266CC9), UINT64_C(0xBC9D3899098133A6), - UINT64_C(0x80E781F45DE992A1), UINT64_C(0x33C9CD4A5E4ECDCE), - UINT64_C(0x7463B7A3F5A932FA), UINT64_C(0xC74DFB1DF60E6D95), - UINT64_C(0x0C96C5795D7870F4), UINT64_C(0xBFB889C75EDF2F9B), - UINT64_C(0xF812F32EF538D0AF), UINT64_C(0x4B3CBF90F69F8FC0), - UINT64_C(0x774606FDA2F72EC7), UINT64_C(0xC4684A43A15071A8), - UINT64_C(0x83C230AA0AB78E9C), UINT64_C(0x30EC7C140910D1F3), - UINT64_C(0x86ACE348F355AADB), UINT64_C(0x3582AFF6F0F2F5B4), - UINT64_C(0x7228D51F5B150A80), UINT64_C(0xC10699A158B255EF), - UINT64_C(0xFD7C20CC0CDAF4E8), UINT64_C(0x4E526C720F7DAB87), - UINT64_C(0x09F8169BA49A54B3), UINT64_C(0xBAD65A25A73D0BDC), - UINT64_C(0x710D64410C4B16BD), UINT64_C(0xC22328FF0FEC49D2), - UINT64_C(0x85895216A40BB6E6), UINT64_C(0x36A71EA8A7ACE989), - UINT64_C(0x0ADDA7C5F3C4488E), UINT64_C(0xB9F3EB7BF06317E1), - UINT64_C(0xFE5991925B84E8D5), UINT64_C(0x4D77DD2C5823B7BA), - UINT64_C(0x64B62BCAEBC387A1), UINT64_C(0xD7986774E864D8CE), - UINT64_C(0x90321D9D438327FA), UINT64_C(0x231C512340247895), - UINT64_C(0x1F66E84E144CD992), UINT64_C(0xAC48A4F017EB86FD), - UINT64_C(0xEBE2DE19BC0C79C9), UINT64_C(0x58CC92A7BFAB26A6), - UINT64_C(0x9317ACC314DD3BC7), UINT64_C(0x2039E07D177A64A8), - UINT64_C(0x67939A94BC9D9B9C), UINT64_C(0xD4BDD62ABF3AC4F3), - UINT64_C(0xE8C76F47EB5265F4), UINT64_C(0x5BE923F9E8F53A9B), - UINT64_C(0x1C4359104312C5AF), UINT64_C(0xAF6D15AE40B59AC0), - UINT64_C(0x192D8AF2BAF0E1E8), UINT64_C(0xAA03C64CB957BE87), - UINT64_C(0xEDA9BCA512B041B3), UINT64_C(0x5E87F01B11171EDC), - UINT64_C(0x62FD4976457FBFDB), UINT64_C(0xD1D305C846D8E0B4), - UINT64_C(0x96797F21ED3F1F80), UINT64_C(0x2557339FEE9840EF), - UINT64_C(0xEE8C0DFB45EE5D8E), UINT64_C(0x5DA24145464902E1), - UINT64_C(0x1A083BACEDAEFDD5), UINT64_C(0xA9267712EE09A2BA), - UINT64_C(0x955CCE7FBA6103BD), UINT64_C(0x267282C1B9C65CD2), - UINT64_C(0x61D8F8281221A3E6), UINT64_C(0xD2F6B4961186FC89), - UINT64_C(0x9F8169BA49A54B33), UINT64_C(0x2CAF25044A02145C), - UINT64_C(0x6B055FEDE1E5EB68), UINT64_C(0xD82B1353E242B407), - UINT64_C(0xE451AA3EB62A1500), UINT64_C(0x577FE680B58D4A6F), - UINT64_C(0x10D59C691E6AB55B), UINT64_C(0xA3FBD0D71DCDEA34), - UINT64_C(0x6820EEB3B6BBF755), UINT64_C(0xDB0EA20DB51CA83A), - UINT64_C(0x9CA4D8E41EFB570E), UINT64_C(0x2F8A945A1D5C0861), - UINT64_C(0x13F02D374934A966), UINT64_C(0xA0DE61894A93F609), - UINT64_C(0xE7741B60E174093D), UINT64_C(0x545A57DEE2D35652), - UINT64_C(0xE21AC88218962D7A), UINT64_C(0x5134843C1B317215), - UINT64_C(0x169EFED5B0D68D21), UINT64_C(0xA5B0B26BB371D24E), - UINT64_C(0x99CA0B06E7197349), UINT64_C(0x2AE447B8E4BE2C26), - UINT64_C(0x6D4E3D514F59D312), UINT64_C(0xDE6071EF4CFE8C7D), - UINT64_C(0x15BB4F8BE788911C), UINT64_C(0xA6950335E42FCE73), - UINT64_C(0xE13F79DC4FC83147), UINT64_C(0x521135624C6F6E28), - UINT64_C(0x6E6B8C0F1807CF2F), UINT64_C(0xDD45C0B11BA09040), - UINT64_C(0x9AEFBA58B0476F74), UINT64_C(0x29C1F6E6B3E0301B), - UINT64_C(0xC96C5795D7870F42), UINT64_C(0x7A421B2BD420502D), - UINT64_C(0x3DE861C27FC7AF19), UINT64_C(0x8EC62D7C7C60F076), - UINT64_C(0xB2BC941128085171), UINT64_C(0x0192D8AF2BAF0E1E), - UINT64_C(0x4638A2468048F12A), UINT64_C(0xF516EEF883EFAE45), - UINT64_C(0x3ECDD09C2899B324), UINT64_C(0x8DE39C222B3EEC4B), - UINT64_C(0xCA49E6CB80D9137F), UINT64_C(0x7967AA75837E4C10), - UINT64_C(0x451D1318D716ED17), UINT64_C(0xF6335FA6D4B1B278), - UINT64_C(0xB199254F7F564D4C), UINT64_C(0x02B769F17CF11223), - UINT64_C(0xB4F7F6AD86B4690B), UINT64_C(0x07D9BA1385133664), - UINT64_C(0x4073C0FA2EF4C950), UINT64_C(0xF35D8C442D53963F), - UINT64_C(0xCF273529793B3738), UINT64_C(0x7C0979977A9C6857), - UINT64_C(0x3BA3037ED17B9763), UINT64_C(0x888D4FC0D2DCC80C), - UINT64_C(0x435671A479AAD56D), UINT64_C(0xF0783D1A7A0D8A02), - UINT64_C(0xB7D247F3D1EA7536), UINT64_C(0x04FC0B4DD24D2A59), - UINT64_C(0x3886B22086258B5E), UINT64_C(0x8BA8FE9E8582D431), - UINT64_C(0xCC0284772E652B05), UINT64_C(0x7F2CC8C92DC2746A), - UINT64_C(0x325B15E575E1C3D0), UINT64_C(0x8175595B76469CBF), - UINT64_C(0xC6DF23B2DDA1638B), UINT64_C(0x75F16F0CDE063CE4), - UINT64_C(0x498BD6618A6E9DE3), UINT64_C(0xFAA59ADF89C9C28C), - UINT64_C(0xBD0FE036222E3DB8), UINT64_C(0x0E21AC88218962D7), - UINT64_C(0xC5FA92EC8AFF7FB6), UINT64_C(0x76D4DE52895820D9), - UINT64_C(0x317EA4BB22BFDFED), UINT64_C(0x8250E80521188082), - UINT64_C(0xBE2A516875702185), UINT64_C(0x0D041DD676D77EEA), - UINT64_C(0x4AAE673FDD3081DE), UINT64_C(0xF9802B81DE97DEB1), - UINT64_C(0x4FC0B4DD24D2A599), UINT64_C(0xFCEEF8632775FAF6), - UINT64_C(0xBB44828A8C9205C2), UINT64_C(0x086ACE348F355AAD), - UINT64_C(0x34107759DB5DFBAA), UINT64_C(0x873E3BE7D8FAA4C5), - UINT64_C(0xC094410E731D5BF1), UINT64_C(0x73BA0DB070BA049E), - UINT64_C(0xB86133D4DBCC19FF), UINT64_C(0x0B4F7F6AD86B4690), - UINT64_C(0x4CE50583738CB9A4), UINT64_C(0xFFCB493D702BE6CB), - UINT64_C(0xC3B1F050244347CC), UINT64_C(0x709FBCEE27E418A3), - UINT64_C(0x3735C6078C03E797), UINT64_C(0x841B8AB98FA4B8F8), - UINT64_C(0xADDA7C5F3C4488E3), UINT64_C(0x1EF430E13FE3D78C), - UINT64_C(0x595E4A08940428B8), UINT64_C(0xEA7006B697A377D7), - UINT64_C(0xD60ABFDBC3CBD6D0), UINT64_C(0x6524F365C06C89BF), - UINT64_C(0x228E898C6B8B768B), UINT64_C(0x91A0C532682C29E4), - UINT64_C(0x5A7BFB56C35A3485), UINT64_C(0xE955B7E8C0FD6BEA), - UINT64_C(0xAEFFCD016B1A94DE), UINT64_C(0x1DD181BF68BDCBB1), - UINT64_C(0x21AB38D23CD56AB6), UINT64_C(0x9285746C3F7235D9), - UINT64_C(0xD52F0E859495CAED), UINT64_C(0x6601423B97329582), - UINT64_C(0xD041DD676D77EEAA), UINT64_C(0x636F91D96ED0B1C5), - UINT64_C(0x24C5EB30C5374EF1), UINT64_C(0x97EBA78EC690119E), - UINT64_C(0xAB911EE392F8B099), UINT64_C(0x18BF525D915FEFF6), - UINT64_C(0x5F1528B43AB810C2), UINT64_C(0xEC3B640A391F4FAD), - UINT64_C(0x27E05A6E926952CC), UINT64_C(0x94CE16D091CE0DA3), - UINT64_C(0xD3646C393A29F297), UINT64_C(0x604A2087398EADF8), - UINT64_C(0x5C3099EA6DE60CFF), UINT64_C(0xEF1ED5546E415390), - UINT64_C(0xA8B4AFBDC5A6ACA4), UINT64_C(0x1B9AE303C601F3CB), - UINT64_C(0x56ED3E2F9E224471), UINT64_C(0xE5C372919D851B1E), - UINT64_C(0xA26908783662E42A), UINT64_C(0x114744C635C5BB45), - UINT64_C(0x2D3DFDAB61AD1A42), UINT64_C(0x9E13B115620A452D), - UINT64_C(0xD9B9CBFCC9EDBA19), UINT64_C(0x6A978742CA4AE576), - UINT64_C(0xA14CB926613CF817), UINT64_C(0x1262F598629BA778), - UINT64_C(0x55C88F71C97C584C), UINT64_C(0xE6E6C3CFCADB0723), - UINT64_C(0xDA9C7AA29EB3A624), UINT64_C(0x69B2361C9D14F94B), - UINT64_C(0x2E184CF536F3067F), UINT64_C(0x9D36004B35545910), - UINT64_C(0x2B769F17CF112238), UINT64_C(0x9858D3A9CCB67D57), - UINT64_C(0xDFF2A94067518263), UINT64_C(0x6CDCE5FE64F6DD0C), - UINT64_C(0x50A65C93309E7C0B), UINT64_C(0xE388102D33392364), - UINT64_C(0xA4226AC498DEDC50), UINT64_C(0x170C267A9B79833F), - UINT64_C(0xDCD7181E300F9E5E), UINT64_C(0x6FF954A033A8C131), - UINT64_C(0x28532E49984F3E05), UINT64_C(0x9B7D62F79BE8616A), - UINT64_C(0xA707DB9ACF80C06D), UINT64_C(0x14299724CC279F02), - UINT64_C(0x5383EDCD67C06036), UINT64_C(0xE0ADA17364673F59) - }, { - UINT64_C(0x0000000000000000), UINT64_C(0x54E979925CD0F10D), - UINT64_C(0xA9D2F324B9A1E21A), UINT64_C(0xFD3B8AB6E5711317), - UINT64_C(0xC17D4962DC4DDAB1), UINT64_C(0x959430F0809D2BBC), - UINT64_C(0x68AFBA4665EC38AB), UINT64_C(0x3C46C3D4393CC9A6), - UINT64_C(0x10223DEE1795ABE7), UINT64_C(0x44CB447C4B455AEA), - UINT64_C(0xB9F0CECAAE3449FD), UINT64_C(0xED19B758F2E4B8F0), - UINT64_C(0xD15F748CCBD87156), UINT64_C(0x85B60D1E9708805B), - UINT64_C(0x788D87A87279934C), UINT64_C(0x2C64FE3A2EA96241), - UINT64_C(0x20447BDC2F2B57CE), UINT64_C(0x74AD024E73FBA6C3), - UINT64_C(0x899688F8968AB5D4), UINT64_C(0xDD7FF16ACA5A44D9), - UINT64_C(0xE13932BEF3668D7F), UINT64_C(0xB5D04B2CAFB67C72), - UINT64_C(0x48EBC19A4AC76F65), UINT64_C(0x1C02B80816179E68), - UINT64_C(0x3066463238BEFC29), UINT64_C(0x648F3FA0646E0D24), - UINT64_C(0x99B4B516811F1E33), UINT64_C(0xCD5DCC84DDCFEF3E), - UINT64_C(0xF11B0F50E4F32698), UINT64_C(0xA5F276C2B823D795), - UINT64_C(0x58C9FC745D52C482), UINT64_C(0x0C2085E60182358F), - UINT64_C(0x4088F7B85E56AF9C), UINT64_C(0x14618E2A02865E91), - UINT64_C(0xE95A049CE7F74D86), UINT64_C(0xBDB37D0EBB27BC8B), - UINT64_C(0x81F5BEDA821B752D), UINT64_C(0xD51CC748DECB8420), - UINT64_C(0x28274DFE3BBA9737), UINT64_C(0x7CCE346C676A663A), - UINT64_C(0x50AACA5649C3047B), UINT64_C(0x0443B3C41513F576), - UINT64_C(0xF9783972F062E661), UINT64_C(0xAD9140E0ACB2176C), - UINT64_C(0x91D78334958EDECA), UINT64_C(0xC53EFAA6C95E2FC7), - UINT64_C(0x380570102C2F3CD0), UINT64_C(0x6CEC098270FFCDDD), - UINT64_C(0x60CC8C64717DF852), UINT64_C(0x3425F5F62DAD095F), - UINT64_C(0xC91E7F40C8DC1A48), UINT64_C(0x9DF706D2940CEB45), - UINT64_C(0xA1B1C506AD3022E3), UINT64_C(0xF558BC94F1E0D3EE), - UINT64_C(0x086336221491C0F9), UINT64_C(0x5C8A4FB0484131F4), - UINT64_C(0x70EEB18A66E853B5), UINT64_C(0x2407C8183A38A2B8), - UINT64_C(0xD93C42AEDF49B1AF), UINT64_C(0x8DD53B3C839940A2), - UINT64_C(0xB193F8E8BAA58904), UINT64_C(0xE57A817AE6757809), - UINT64_C(0x18410BCC03046B1E), UINT64_C(0x4CA8725E5FD49A13), - UINT64_C(0x8111EF70BCAD5F38), UINT64_C(0xD5F896E2E07DAE35), - UINT64_C(0x28C31C54050CBD22), UINT64_C(0x7C2A65C659DC4C2F), - UINT64_C(0x406CA61260E08589), UINT64_C(0x1485DF803C307484), - UINT64_C(0xE9BE5536D9416793), UINT64_C(0xBD572CA48591969E), - UINT64_C(0x9133D29EAB38F4DF), UINT64_C(0xC5DAAB0CF7E805D2), - UINT64_C(0x38E121BA129916C5), UINT64_C(0x6C0858284E49E7C8), - UINT64_C(0x504E9BFC77752E6E), UINT64_C(0x04A7E26E2BA5DF63), - UINT64_C(0xF99C68D8CED4CC74), UINT64_C(0xAD75114A92043D79), - UINT64_C(0xA15594AC938608F6), UINT64_C(0xF5BCED3ECF56F9FB), - UINT64_C(0x088767882A27EAEC), UINT64_C(0x5C6E1E1A76F71BE1), - UINT64_C(0x6028DDCE4FCBD247), UINT64_C(0x34C1A45C131B234A), - UINT64_C(0xC9FA2EEAF66A305D), UINT64_C(0x9D135778AABAC150), - UINT64_C(0xB177A9428413A311), UINT64_C(0xE59ED0D0D8C3521C), - UINT64_C(0x18A55A663DB2410B), UINT64_C(0x4C4C23F46162B006), - UINT64_C(0x700AE020585E79A0), UINT64_C(0x24E399B2048E88AD), - UINT64_C(0xD9D81304E1FF9BBA), UINT64_C(0x8D316A96BD2F6AB7), - UINT64_C(0xC19918C8E2FBF0A4), UINT64_C(0x9570615ABE2B01A9), - UINT64_C(0x684BEBEC5B5A12BE), UINT64_C(0x3CA2927E078AE3B3), - UINT64_C(0x00E451AA3EB62A15), UINT64_C(0x540D28386266DB18), - UINT64_C(0xA936A28E8717C80F), UINT64_C(0xFDDFDB1CDBC73902), - UINT64_C(0xD1BB2526F56E5B43), UINT64_C(0x85525CB4A9BEAA4E), - UINT64_C(0x7869D6024CCFB959), UINT64_C(0x2C80AF90101F4854), - UINT64_C(0x10C66C44292381F2), UINT64_C(0x442F15D675F370FF), - UINT64_C(0xB9149F60908263E8), UINT64_C(0xEDFDE6F2CC5292E5), - UINT64_C(0xE1DD6314CDD0A76A), UINT64_C(0xB5341A8691005667), - UINT64_C(0x480F903074714570), UINT64_C(0x1CE6E9A228A1B47D), - UINT64_C(0x20A02A76119D7DDB), UINT64_C(0x744953E44D4D8CD6), - UINT64_C(0x8972D952A83C9FC1), UINT64_C(0xDD9BA0C0F4EC6ECC), - UINT64_C(0xF1FF5EFADA450C8D), UINT64_C(0xA51627688695FD80), - UINT64_C(0x582DADDE63E4EE97), UINT64_C(0x0CC4D44C3F341F9A), - UINT64_C(0x308217980608D63C), UINT64_C(0x646B6E0A5AD82731), - UINT64_C(0x9950E4BCBFA93426), UINT64_C(0xCDB99D2EE379C52B), - UINT64_C(0x90FB71CAD654A0F5), UINT64_C(0xC41208588A8451F8), - UINT64_C(0x392982EE6FF542EF), UINT64_C(0x6DC0FB7C3325B3E2), - UINT64_C(0x518638A80A197A44), UINT64_C(0x056F413A56C98B49), - UINT64_C(0xF854CB8CB3B8985E), UINT64_C(0xACBDB21EEF686953), - UINT64_C(0x80D94C24C1C10B12), UINT64_C(0xD43035B69D11FA1F), - UINT64_C(0x290BBF007860E908), UINT64_C(0x7DE2C69224B01805), - UINT64_C(0x41A405461D8CD1A3), UINT64_C(0x154D7CD4415C20AE), - UINT64_C(0xE876F662A42D33B9), UINT64_C(0xBC9F8FF0F8FDC2B4), - UINT64_C(0xB0BF0A16F97FF73B), UINT64_C(0xE4567384A5AF0636), - UINT64_C(0x196DF93240DE1521), UINT64_C(0x4D8480A01C0EE42C), - UINT64_C(0x71C2437425322D8A), UINT64_C(0x252B3AE679E2DC87), - UINT64_C(0xD810B0509C93CF90), UINT64_C(0x8CF9C9C2C0433E9D), - UINT64_C(0xA09D37F8EEEA5CDC), UINT64_C(0xF4744E6AB23AADD1), - UINT64_C(0x094FC4DC574BBEC6), UINT64_C(0x5DA6BD4E0B9B4FCB), - UINT64_C(0x61E07E9A32A7866D), UINT64_C(0x350907086E777760), - UINT64_C(0xC8328DBE8B066477), UINT64_C(0x9CDBF42CD7D6957A), - UINT64_C(0xD073867288020F69), UINT64_C(0x849AFFE0D4D2FE64), - UINT64_C(0x79A1755631A3ED73), UINT64_C(0x2D480CC46D731C7E), - UINT64_C(0x110ECF10544FD5D8), UINT64_C(0x45E7B682089F24D5), - UINT64_C(0xB8DC3C34EDEE37C2), UINT64_C(0xEC3545A6B13EC6CF), - UINT64_C(0xC051BB9C9F97A48E), UINT64_C(0x94B8C20EC3475583), - UINT64_C(0x698348B826364694), UINT64_C(0x3D6A312A7AE6B799), - UINT64_C(0x012CF2FE43DA7E3F), UINT64_C(0x55C58B6C1F0A8F32), - UINT64_C(0xA8FE01DAFA7B9C25), UINT64_C(0xFC177848A6AB6D28), - UINT64_C(0xF037FDAEA72958A7), UINT64_C(0xA4DE843CFBF9A9AA), - UINT64_C(0x59E50E8A1E88BABD), UINT64_C(0x0D0C771842584BB0), - UINT64_C(0x314AB4CC7B648216), UINT64_C(0x65A3CD5E27B4731B), - UINT64_C(0x989847E8C2C5600C), UINT64_C(0xCC713E7A9E159101), - UINT64_C(0xE015C040B0BCF340), UINT64_C(0xB4FCB9D2EC6C024D), - UINT64_C(0x49C73364091D115A), UINT64_C(0x1D2E4AF655CDE057), - UINT64_C(0x216889226CF129F1), UINT64_C(0x7581F0B03021D8FC), - UINT64_C(0x88BA7A06D550CBEB), UINT64_C(0xDC53039489803AE6), - UINT64_C(0x11EA9EBA6AF9FFCD), UINT64_C(0x4503E72836290EC0), - UINT64_C(0xB8386D9ED3581DD7), UINT64_C(0xECD1140C8F88ECDA), - UINT64_C(0xD097D7D8B6B4257C), UINT64_C(0x847EAE4AEA64D471), - UINT64_C(0x794524FC0F15C766), UINT64_C(0x2DAC5D6E53C5366B), - UINT64_C(0x01C8A3547D6C542A), UINT64_C(0x5521DAC621BCA527), - UINT64_C(0xA81A5070C4CDB630), UINT64_C(0xFCF329E2981D473D), - UINT64_C(0xC0B5EA36A1218E9B), UINT64_C(0x945C93A4FDF17F96), - UINT64_C(0x6967191218806C81), UINT64_C(0x3D8E608044509D8C), - UINT64_C(0x31AEE56645D2A803), UINT64_C(0x65479CF41902590E), - UINT64_C(0x987C1642FC734A19), UINT64_C(0xCC956FD0A0A3BB14), - UINT64_C(0xF0D3AC04999F72B2), UINT64_C(0xA43AD596C54F83BF), - UINT64_C(0x59015F20203E90A8), UINT64_C(0x0DE826B27CEE61A5), - UINT64_C(0x218CD888524703E4), UINT64_C(0x7565A11A0E97F2E9), - UINT64_C(0x885E2BACEBE6E1FE), UINT64_C(0xDCB7523EB73610F3), - UINT64_C(0xE0F191EA8E0AD955), UINT64_C(0xB418E878D2DA2858), - UINT64_C(0x492362CE37AB3B4F), UINT64_C(0x1DCA1B5C6B7BCA42), - UINT64_C(0x5162690234AF5051), UINT64_C(0x058B1090687FA15C), - UINT64_C(0xF8B09A268D0EB24B), UINT64_C(0xAC59E3B4D1DE4346), - UINT64_C(0x901F2060E8E28AE0), UINT64_C(0xC4F659F2B4327BED), - UINT64_C(0x39CDD344514368FA), UINT64_C(0x6D24AAD60D9399F7), - UINT64_C(0x414054EC233AFBB6), UINT64_C(0x15A92D7E7FEA0ABB), - UINT64_C(0xE892A7C89A9B19AC), UINT64_C(0xBC7BDE5AC64BE8A1), - UINT64_C(0x803D1D8EFF772107), UINT64_C(0xD4D4641CA3A7D00A), - UINT64_C(0x29EFEEAA46D6C31D), UINT64_C(0x7D0697381A063210), - UINT64_C(0x712612DE1B84079F), UINT64_C(0x25CF6B4C4754F692), - UINT64_C(0xD8F4E1FAA225E585), UINT64_C(0x8C1D9868FEF51488), - UINT64_C(0xB05B5BBCC7C9DD2E), UINT64_C(0xE4B2222E9B192C23), - UINT64_C(0x1989A8987E683F34), UINT64_C(0x4D60D10A22B8CE39), - UINT64_C(0x61042F300C11AC78), UINT64_C(0x35ED56A250C15D75), - UINT64_C(0xC8D6DC14B5B04E62), UINT64_C(0x9C3FA586E960BF6F), - UINT64_C(0xA0796652D05C76C9), UINT64_C(0xF4901FC08C8C87C4), - UINT64_C(0x09AB957669FD94D3), UINT64_C(0x5D42ECE4352D65DE) - }, { - UINT64_C(0x0000000000000000), UINT64_C(0x3F0BE14A916A6DCB), - UINT64_C(0x7E17C29522D4DB96), UINT64_C(0x411C23DFB3BEB65D), - UINT64_C(0xFC2F852A45A9B72C), UINT64_C(0xC3246460D4C3DAE7), - UINT64_C(0x823847BF677D6CBA), UINT64_C(0xBD33A6F5F6170171), - UINT64_C(0x6A87A57F245D70DD), UINT64_C(0x558C4435B5371D16), - UINT64_C(0x149067EA0689AB4B), UINT64_C(0x2B9B86A097E3C680), - UINT64_C(0x96A8205561F4C7F1), UINT64_C(0xA9A3C11FF09EAA3A), - UINT64_C(0xE8BFE2C043201C67), UINT64_C(0xD7B4038AD24A71AC), - UINT64_C(0xD50F4AFE48BAE1BA), UINT64_C(0xEA04ABB4D9D08C71), - UINT64_C(0xAB18886B6A6E3A2C), UINT64_C(0x94136921FB0457E7), - UINT64_C(0x2920CFD40D135696), UINT64_C(0x162B2E9E9C793B5D), - UINT64_C(0x57370D412FC78D00), UINT64_C(0x683CEC0BBEADE0CB), - UINT64_C(0xBF88EF816CE79167), UINT64_C(0x80830ECBFD8DFCAC), - UINT64_C(0xC19F2D144E334AF1), UINT64_C(0xFE94CC5EDF59273A), - UINT64_C(0x43A76AAB294E264B), UINT64_C(0x7CAC8BE1B8244B80), - UINT64_C(0x3DB0A83E0B9AFDDD), UINT64_C(0x02BB49749AF09016), - UINT64_C(0x38C63AD73E7BDDF1), UINT64_C(0x07CDDB9DAF11B03A), - UINT64_C(0x46D1F8421CAF0667), UINT64_C(0x79DA19088DC56BAC), - UINT64_C(0xC4E9BFFD7BD26ADD), UINT64_C(0xFBE25EB7EAB80716), - UINT64_C(0xBAFE7D685906B14B), UINT64_C(0x85F59C22C86CDC80), - UINT64_C(0x52419FA81A26AD2C), UINT64_C(0x6D4A7EE28B4CC0E7), - UINT64_C(0x2C565D3D38F276BA), UINT64_C(0x135DBC77A9981B71), - UINT64_C(0xAE6E1A825F8F1A00), UINT64_C(0x9165FBC8CEE577CB), - UINT64_C(0xD079D8177D5BC196), UINT64_C(0xEF72395DEC31AC5D), - UINT64_C(0xEDC9702976C13C4B), UINT64_C(0xD2C29163E7AB5180), - UINT64_C(0x93DEB2BC5415E7DD), UINT64_C(0xACD553F6C57F8A16), - UINT64_C(0x11E6F50333688B67), UINT64_C(0x2EED1449A202E6AC), - UINT64_C(0x6FF1379611BC50F1), UINT64_C(0x50FAD6DC80D63D3A), - UINT64_C(0x874ED556529C4C96), UINT64_C(0xB845341CC3F6215D), - UINT64_C(0xF95917C370489700), UINT64_C(0xC652F689E122FACB), - UINT64_C(0x7B61507C1735FBBA), UINT64_C(0x446AB136865F9671), - UINT64_C(0x057692E935E1202C), UINT64_C(0x3A7D73A3A48B4DE7), - UINT64_C(0x718C75AE7CF7BBE2), UINT64_C(0x4E8794E4ED9DD629), - UINT64_C(0x0F9BB73B5E236074), UINT64_C(0x30905671CF490DBF), - UINT64_C(0x8DA3F084395E0CCE), UINT64_C(0xB2A811CEA8346105), - UINT64_C(0xF3B432111B8AD758), UINT64_C(0xCCBFD35B8AE0BA93), - UINT64_C(0x1B0BD0D158AACB3F), UINT64_C(0x2400319BC9C0A6F4), - UINT64_C(0x651C12447A7E10A9), UINT64_C(0x5A17F30EEB147D62), - UINT64_C(0xE72455FB1D037C13), UINT64_C(0xD82FB4B18C6911D8), - UINT64_C(0x9933976E3FD7A785), UINT64_C(0xA6387624AEBDCA4E), - UINT64_C(0xA4833F50344D5A58), UINT64_C(0x9B88DE1AA5273793), - UINT64_C(0xDA94FDC5169981CE), UINT64_C(0xE59F1C8F87F3EC05), - UINT64_C(0x58ACBA7A71E4ED74), UINT64_C(0x67A75B30E08E80BF), - UINT64_C(0x26BB78EF533036E2), UINT64_C(0x19B099A5C25A5B29), - UINT64_C(0xCE049A2F10102A85), UINT64_C(0xF10F7B65817A474E), - UINT64_C(0xB01358BA32C4F113), UINT64_C(0x8F18B9F0A3AE9CD8), - UINT64_C(0x322B1F0555B99DA9), UINT64_C(0x0D20FE4FC4D3F062), - UINT64_C(0x4C3CDD90776D463F), UINT64_C(0x73373CDAE6072BF4), - UINT64_C(0x494A4F79428C6613), UINT64_C(0x7641AE33D3E60BD8), - UINT64_C(0x375D8DEC6058BD85), UINT64_C(0x08566CA6F132D04E), - UINT64_C(0xB565CA530725D13F), UINT64_C(0x8A6E2B19964FBCF4), - UINT64_C(0xCB7208C625F10AA9), UINT64_C(0xF479E98CB49B6762), - UINT64_C(0x23CDEA0666D116CE), UINT64_C(0x1CC60B4CF7BB7B05), - UINT64_C(0x5DDA28934405CD58), UINT64_C(0x62D1C9D9D56FA093), - UINT64_C(0xDFE26F2C2378A1E2), UINT64_C(0xE0E98E66B212CC29), - UINT64_C(0xA1F5ADB901AC7A74), UINT64_C(0x9EFE4CF390C617BF), - UINT64_C(0x9C4505870A3687A9), UINT64_C(0xA34EE4CD9B5CEA62), - UINT64_C(0xE252C71228E25C3F), UINT64_C(0xDD592658B98831F4), - UINT64_C(0x606A80AD4F9F3085), UINT64_C(0x5F6161E7DEF55D4E), - UINT64_C(0x1E7D42386D4BEB13), UINT64_C(0x2176A372FC2186D8), - UINT64_C(0xF6C2A0F82E6BF774), UINT64_C(0xC9C941B2BF019ABF), - UINT64_C(0x88D5626D0CBF2CE2), UINT64_C(0xB7DE83279DD54129), - UINT64_C(0x0AED25D26BC24058), UINT64_C(0x35E6C498FAA82D93), - UINT64_C(0x74FAE74749169BCE), UINT64_C(0x4BF1060DD87CF605), - UINT64_C(0xE318EB5CF9EF77C4), UINT64_C(0xDC130A1668851A0F), - UINT64_C(0x9D0F29C9DB3BAC52), UINT64_C(0xA204C8834A51C199), - UINT64_C(0x1F376E76BC46C0E8), UINT64_C(0x203C8F3C2D2CAD23), - UINT64_C(0x6120ACE39E921B7E), UINT64_C(0x5E2B4DA90FF876B5), - UINT64_C(0x899F4E23DDB20719), UINT64_C(0xB694AF694CD86AD2), - UINT64_C(0xF7888CB6FF66DC8F), UINT64_C(0xC8836DFC6E0CB144), - UINT64_C(0x75B0CB09981BB035), UINT64_C(0x4ABB2A430971DDFE), - UINT64_C(0x0BA7099CBACF6BA3), UINT64_C(0x34ACE8D62BA50668), - UINT64_C(0x3617A1A2B155967E), UINT64_C(0x091C40E8203FFBB5), - UINT64_C(0x4800633793814DE8), UINT64_C(0x770B827D02EB2023), - UINT64_C(0xCA382488F4FC2152), UINT64_C(0xF533C5C265964C99), - UINT64_C(0xB42FE61DD628FAC4), UINT64_C(0x8B2407574742970F), - UINT64_C(0x5C9004DD9508E6A3), UINT64_C(0x639BE59704628B68), - UINT64_C(0x2287C648B7DC3D35), UINT64_C(0x1D8C270226B650FE), - UINT64_C(0xA0BF81F7D0A1518F), UINT64_C(0x9FB460BD41CB3C44), - UINT64_C(0xDEA84362F2758A19), UINT64_C(0xE1A3A228631FE7D2), - UINT64_C(0xDBDED18BC794AA35), UINT64_C(0xE4D530C156FEC7FE), - UINT64_C(0xA5C9131EE54071A3), UINT64_C(0x9AC2F254742A1C68), - UINT64_C(0x27F154A1823D1D19), UINT64_C(0x18FAB5EB135770D2), - UINT64_C(0x59E69634A0E9C68F), UINT64_C(0x66ED777E3183AB44), - UINT64_C(0xB15974F4E3C9DAE8), UINT64_C(0x8E5295BE72A3B723), - UINT64_C(0xCF4EB661C11D017E), UINT64_C(0xF045572B50776CB5), - UINT64_C(0x4D76F1DEA6606DC4), UINT64_C(0x727D1094370A000F), - UINT64_C(0x3361334B84B4B652), UINT64_C(0x0C6AD20115DEDB99), - UINT64_C(0x0ED19B758F2E4B8F), UINT64_C(0x31DA7A3F1E442644), - UINT64_C(0x70C659E0ADFA9019), UINT64_C(0x4FCDB8AA3C90FDD2), - UINT64_C(0xF2FE1E5FCA87FCA3), UINT64_C(0xCDF5FF155BED9168), - UINT64_C(0x8CE9DCCAE8532735), UINT64_C(0xB3E23D8079394AFE), - UINT64_C(0x64563E0AAB733B52), UINT64_C(0x5B5DDF403A195699), - UINT64_C(0x1A41FC9F89A7E0C4), UINT64_C(0x254A1DD518CD8D0F), - UINT64_C(0x9879BB20EEDA8C7E), UINT64_C(0xA7725A6A7FB0E1B5), - UINT64_C(0xE66E79B5CC0E57E8), UINT64_C(0xD96598FF5D643A23), - UINT64_C(0x92949EF28518CC26), UINT64_C(0xAD9F7FB81472A1ED), - UINT64_C(0xEC835C67A7CC17B0), UINT64_C(0xD388BD2D36A67A7B), - UINT64_C(0x6EBB1BD8C0B17B0A), UINT64_C(0x51B0FA9251DB16C1), - UINT64_C(0x10ACD94DE265A09C), UINT64_C(0x2FA73807730FCD57), - UINT64_C(0xF8133B8DA145BCFB), UINT64_C(0xC718DAC7302FD130), - UINT64_C(0x8604F9188391676D), UINT64_C(0xB90F185212FB0AA6), - UINT64_C(0x043CBEA7E4EC0BD7), UINT64_C(0x3B375FED7586661C), - UINT64_C(0x7A2B7C32C638D041), UINT64_C(0x45209D785752BD8A), - UINT64_C(0x479BD40CCDA22D9C), UINT64_C(0x789035465CC84057), - UINT64_C(0x398C1699EF76F60A), UINT64_C(0x0687F7D37E1C9BC1), - UINT64_C(0xBBB45126880B9AB0), UINT64_C(0x84BFB06C1961F77B), - UINT64_C(0xC5A393B3AADF4126), UINT64_C(0xFAA872F93BB52CED), - UINT64_C(0x2D1C7173E9FF5D41), UINT64_C(0x121790397895308A), - UINT64_C(0x530BB3E6CB2B86D7), UINT64_C(0x6C0052AC5A41EB1C), - UINT64_C(0xD133F459AC56EA6D), UINT64_C(0xEE3815133D3C87A6), - UINT64_C(0xAF2436CC8E8231FB), UINT64_C(0x902FD7861FE85C30), - UINT64_C(0xAA52A425BB6311D7), UINT64_C(0x9559456F2A097C1C), - UINT64_C(0xD44566B099B7CA41), UINT64_C(0xEB4E87FA08DDA78A), - UINT64_C(0x567D210FFECAA6FB), UINT64_C(0x6976C0456FA0CB30), - UINT64_C(0x286AE39ADC1E7D6D), UINT64_C(0x176102D04D7410A6), - UINT64_C(0xC0D5015A9F3E610A), UINT64_C(0xFFDEE0100E540CC1), - UINT64_C(0xBEC2C3CFBDEABA9C), UINT64_C(0x81C922852C80D757), - UINT64_C(0x3CFA8470DA97D626), UINT64_C(0x03F1653A4BFDBBED), - UINT64_C(0x42ED46E5F8430DB0), UINT64_C(0x7DE6A7AF6929607B), - UINT64_C(0x7F5DEEDBF3D9F06D), UINT64_C(0x40560F9162B39DA6), - UINT64_C(0x014A2C4ED10D2BFB), UINT64_C(0x3E41CD0440674630), - UINT64_C(0x83726BF1B6704741), UINT64_C(0xBC798ABB271A2A8A), - UINT64_C(0xFD65A96494A49CD7), UINT64_C(0xC26E482E05CEF11C), - UINT64_C(0x15DA4BA4D78480B0), UINT64_C(0x2AD1AAEE46EEED7B), - UINT64_C(0x6BCD8931F5505B26), UINT64_C(0x54C6687B643A36ED), - UINT64_C(0xE9F5CE8E922D379C), UINT64_C(0xD6FE2FC403475A57), - UINT64_C(0x97E20C1BB0F9EC0A), UINT64_C(0xA8E9ED51219381C1) - }, { - UINT64_C(0x0000000000000000), UINT64_C(0x1DEE8A5E222CA1DC), - UINT64_C(0x3BDD14BC445943B8), UINT64_C(0x26339EE26675E264), - UINT64_C(0x77BA297888B28770), UINT64_C(0x6A54A326AA9E26AC), - UINT64_C(0x4C673DC4CCEBC4C8), UINT64_C(0x5189B79AEEC76514), - UINT64_C(0xEF7452F111650EE0), UINT64_C(0xF29AD8AF3349AF3C), - UINT64_C(0xD4A9464D553C4D58), UINT64_C(0xC947CC137710EC84), - UINT64_C(0x98CE7B8999D78990), UINT64_C(0x8520F1D7BBFB284C), - UINT64_C(0xA3136F35DD8ECA28), UINT64_C(0xBEFDE56BFFA26BF4), - UINT64_C(0x4C300AC98DC40345), UINT64_C(0x51DE8097AFE8A299), - UINT64_C(0x77ED1E75C99D40FD), UINT64_C(0x6A03942BEBB1E121), - UINT64_C(0x3B8A23B105768435), UINT64_C(0x2664A9EF275A25E9), - UINT64_C(0x0057370D412FC78D), UINT64_C(0x1DB9BD5363036651), - UINT64_C(0xA34458389CA10DA5), UINT64_C(0xBEAAD266BE8DAC79), - UINT64_C(0x98994C84D8F84E1D), UINT64_C(0x8577C6DAFAD4EFC1), - UINT64_C(0xD4FE714014138AD5), UINT64_C(0xC910FB1E363F2B09), - UINT64_C(0xEF2365FC504AC96D), UINT64_C(0xF2CDEFA2726668B1), - UINT64_C(0x986015931B88068A), UINT64_C(0x858E9FCD39A4A756), - UINT64_C(0xA3BD012F5FD14532), UINT64_C(0xBE538B717DFDE4EE), - UINT64_C(0xEFDA3CEB933A81FA), UINT64_C(0xF234B6B5B1162026), - UINT64_C(0xD4072857D763C242), UINT64_C(0xC9E9A209F54F639E), - UINT64_C(0x771447620AED086A), UINT64_C(0x6AFACD3C28C1A9B6), - UINT64_C(0x4CC953DE4EB44BD2), UINT64_C(0x5127D9806C98EA0E), - UINT64_C(0x00AE6E1A825F8F1A), UINT64_C(0x1D40E444A0732EC6), - UINT64_C(0x3B737AA6C606CCA2), UINT64_C(0x269DF0F8E42A6D7E), - UINT64_C(0xD4501F5A964C05CF), UINT64_C(0xC9BE9504B460A413), - UINT64_C(0xEF8D0BE6D2154677), UINT64_C(0xF26381B8F039E7AB), - UINT64_C(0xA3EA36221EFE82BF), UINT64_C(0xBE04BC7C3CD22363), - UINT64_C(0x9837229E5AA7C107), UINT64_C(0x85D9A8C0788B60DB), - UINT64_C(0x3B244DAB87290B2F), UINT64_C(0x26CAC7F5A505AAF3), - UINT64_C(0x00F95917C3704897), UINT64_C(0x1D17D349E15CE94B), - UINT64_C(0x4C9E64D30F9B8C5F), UINT64_C(0x5170EE8D2DB72D83), - UINT64_C(0x7743706F4BC2CFE7), UINT64_C(0x6AADFA3169EE6E3B), - UINT64_C(0xA218840D981E1391), UINT64_C(0xBFF60E53BA32B24D), - UINT64_C(0x99C590B1DC475029), UINT64_C(0x842B1AEFFE6BF1F5), - UINT64_C(0xD5A2AD7510AC94E1), UINT64_C(0xC84C272B3280353D), - UINT64_C(0xEE7FB9C954F5D759), UINT64_C(0xF391339776D97685), - UINT64_C(0x4D6CD6FC897B1D71), UINT64_C(0x50825CA2AB57BCAD), - UINT64_C(0x76B1C240CD225EC9), UINT64_C(0x6B5F481EEF0EFF15), - UINT64_C(0x3AD6FF8401C99A01), UINT64_C(0x273875DA23E53BDD), - UINT64_C(0x010BEB384590D9B9), UINT64_C(0x1CE5616667BC7865), - UINT64_C(0xEE288EC415DA10D4), UINT64_C(0xF3C6049A37F6B108), - UINT64_C(0xD5F59A785183536C), UINT64_C(0xC81B102673AFF2B0), - UINT64_C(0x9992A7BC9D6897A4), UINT64_C(0x847C2DE2BF443678), - UINT64_C(0xA24FB300D931D41C), UINT64_C(0xBFA1395EFB1D75C0), - UINT64_C(0x015CDC3504BF1E34), UINT64_C(0x1CB2566B2693BFE8), - UINT64_C(0x3A81C88940E65D8C), UINT64_C(0x276F42D762CAFC50), - UINT64_C(0x76E6F54D8C0D9944), UINT64_C(0x6B087F13AE213898), - UINT64_C(0x4D3BE1F1C854DAFC), UINT64_C(0x50D56BAFEA787B20), - UINT64_C(0x3A78919E8396151B), UINT64_C(0x27961BC0A1BAB4C7), - UINT64_C(0x01A58522C7CF56A3), UINT64_C(0x1C4B0F7CE5E3F77F), - UINT64_C(0x4DC2B8E60B24926B), UINT64_C(0x502C32B8290833B7), - UINT64_C(0x761FAC5A4F7DD1D3), UINT64_C(0x6BF126046D51700F), - UINT64_C(0xD50CC36F92F31BFB), UINT64_C(0xC8E24931B0DFBA27), - UINT64_C(0xEED1D7D3D6AA5843), UINT64_C(0xF33F5D8DF486F99F), - UINT64_C(0xA2B6EA171A419C8B), UINT64_C(0xBF586049386D3D57), - UINT64_C(0x996BFEAB5E18DF33), UINT64_C(0x848574F57C347EEF), - UINT64_C(0x76489B570E52165E), UINT64_C(0x6BA611092C7EB782), - UINT64_C(0x4D958FEB4A0B55E6), UINT64_C(0x507B05B56827F43A), - UINT64_C(0x01F2B22F86E0912E), UINT64_C(0x1C1C3871A4CC30F2), - UINT64_C(0x3A2FA693C2B9D296), UINT64_C(0x27C12CCDE095734A), - UINT64_C(0x993CC9A61F3718BE), UINT64_C(0x84D243F83D1BB962), - UINT64_C(0xA2E1DD1A5B6E5B06), UINT64_C(0xBF0F57447942FADA), - UINT64_C(0xEE86E0DE97859FCE), UINT64_C(0xF3686A80B5A93E12), - UINT64_C(0xD55BF462D3DCDC76), UINT64_C(0xC8B57E3CF1F07DAA), - UINT64_C(0xD6E9A7309F3239A7), UINT64_C(0xCB072D6EBD1E987B), - UINT64_C(0xED34B38CDB6B7A1F), UINT64_C(0xF0DA39D2F947DBC3), - UINT64_C(0xA1538E481780BED7), UINT64_C(0xBCBD041635AC1F0B), - UINT64_C(0x9A8E9AF453D9FD6F), UINT64_C(0x876010AA71F55CB3), - UINT64_C(0x399DF5C18E573747), UINT64_C(0x24737F9FAC7B969B), - UINT64_C(0x0240E17DCA0E74FF), UINT64_C(0x1FAE6B23E822D523), - UINT64_C(0x4E27DCB906E5B037), UINT64_C(0x53C956E724C911EB), - UINT64_C(0x75FAC80542BCF38F), UINT64_C(0x6814425B60905253), - UINT64_C(0x9AD9ADF912F63AE2), UINT64_C(0x873727A730DA9B3E), - UINT64_C(0xA104B94556AF795A), UINT64_C(0xBCEA331B7483D886), - UINT64_C(0xED6384819A44BD92), UINT64_C(0xF08D0EDFB8681C4E), - UINT64_C(0xD6BE903DDE1DFE2A), UINT64_C(0xCB501A63FC315FF6), - UINT64_C(0x75ADFF0803933402), UINT64_C(0x6843755621BF95DE), - UINT64_C(0x4E70EBB447CA77BA), UINT64_C(0x539E61EA65E6D666), - UINT64_C(0x0217D6708B21B372), UINT64_C(0x1FF95C2EA90D12AE), - UINT64_C(0x39CAC2CCCF78F0CA), UINT64_C(0x24244892ED545116), - UINT64_C(0x4E89B2A384BA3F2D), UINT64_C(0x536738FDA6969EF1), - UINT64_C(0x7554A61FC0E37C95), UINT64_C(0x68BA2C41E2CFDD49), - UINT64_C(0x39339BDB0C08B85D), UINT64_C(0x24DD11852E241981), - UINT64_C(0x02EE8F674851FBE5), UINT64_C(0x1F0005396A7D5A39), - UINT64_C(0xA1FDE05295DF31CD), UINT64_C(0xBC136A0CB7F39011), - UINT64_C(0x9A20F4EED1867275), UINT64_C(0x87CE7EB0F3AAD3A9), - UINT64_C(0xD647C92A1D6DB6BD), UINT64_C(0xCBA943743F411761), - UINT64_C(0xED9ADD965934F505), UINT64_C(0xF07457C87B1854D9), - UINT64_C(0x02B9B86A097E3C68), UINT64_C(0x1F5732342B529DB4), - UINT64_C(0x3964ACD64D277FD0), UINT64_C(0x248A26886F0BDE0C), - UINT64_C(0x7503911281CCBB18), UINT64_C(0x68ED1B4CA3E01AC4), - UINT64_C(0x4EDE85AEC595F8A0), UINT64_C(0x53300FF0E7B9597C), - UINT64_C(0xEDCDEA9B181B3288), UINT64_C(0xF02360C53A379354), - UINT64_C(0xD610FE275C427130), UINT64_C(0xCBFE74797E6ED0EC), - UINT64_C(0x9A77C3E390A9B5F8), UINT64_C(0x879949BDB2851424), - UINT64_C(0xA1AAD75FD4F0F640), UINT64_C(0xBC445D01F6DC579C), - UINT64_C(0x74F1233D072C2A36), UINT64_C(0x691FA96325008BEA), - UINT64_C(0x4F2C37814375698E), UINT64_C(0x52C2BDDF6159C852), - UINT64_C(0x034B0A458F9EAD46), UINT64_C(0x1EA5801BADB20C9A), - UINT64_C(0x38961EF9CBC7EEFE), UINT64_C(0x257894A7E9EB4F22), - UINT64_C(0x9B8571CC164924D6), UINT64_C(0x866BFB923465850A), - UINT64_C(0xA05865705210676E), UINT64_C(0xBDB6EF2E703CC6B2), - UINT64_C(0xEC3F58B49EFBA3A6), UINT64_C(0xF1D1D2EABCD7027A), - UINT64_C(0xD7E24C08DAA2E01E), UINT64_C(0xCA0CC656F88E41C2), - UINT64_C(0x38C129F48AE82973), UINT64_C(0x252FA3AAA8C488AF), - UINT64_C(0x031C3D48CEB16ACB), UINT64_C(0x1EF2B716EC9DCB17), - UINT64_C(0x4F7B008C025AAE03), UINT64_C(0x52958AD220760FDF), - UINT64_C(0x74A614304603EDBB), UINT64_C(0x69489E6E642F4C67), - UINT64_C(0xD7B57B059B8D2793), UINT64_C(0xCA5BF15BB9A1864F), - UINT64_C(0xEC686FB9DFD4642B), UINT64_C(0xF186E5E7FDF8C5F7), - UINT64_C(0xA00F527D133FA0E3), UINT64_C(0xBDE1D8233113013F), - UINT64_C(0x9BD246C15766E35B), UINT64_C(0x863CCC9F754A4287), - UINT64_C(0xEC9136AE1CA42CBC), UINT64_C(0xF17FBCF03E888D60), - UINT64_C(0xD74C221258FD6F04), UINT64_C(0xCAA2A84C7AD1CED8), - UINT64_C(0x9B2B1FD69416ABCC), UINT64_C(0x86C59588B63A0A10), - UINT64_C(0xA0F60B6AD04FE874), UINT64_C(0xBD188134F26349A8), - UINT64_C(0x03E5645F0DC1225C), UINT64_C(0x1E0BEE012FED8380), - UINT64_C(0x383870E3499861E4), UINT64_C(0x25D6FABD6BB4C038), - UINT64_C(0x745F4D278573A52C), UINT64_C(0x69B1C779A75F04F0), - UINT64_C(0x4F82599BC12AE694), UINT64_C(0x526CD3C5E3064748), - UINT64_C(0xA0A13C6791602FF9), UINT64_C(0xBD4FB639B34C8E25), - UINT64_C(0x9B7C28DBD5396C41), UINT64_C(0x8692A285F715CD9D), - UINT64_C(0xD71B151F19D2A889), UINT64_C(0xCAF59F413BFE0955), - UINT64_C(0xECC601A35D8BEB31), UINT64_C(0xF1288BFD7FA74AED), - UINT64_C(0x4FD56E9680052119), UINT64_C(0x523BE4C8A22980C5), - UINT64_C(0x74087A2AC45C62A1), UINT64_C(0x69E6F074E670C37D), - UINT64_C(0x386F47EE08B7A669), UINT64_C(0x2581CDB02A9B07B5), - UINT64_C(0x03B253524CEEE5D1), UINT64_C(0x1E5CD90C6EC2440D) - } -}; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_tablegen.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_tablegen.c deleted file mode 100644 index 92b9a7da8ca..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_tablegen.c +++ /dev/null @@ -1,92 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc64_tablegen.c -/// \brief Generate crc64_table_le.h and crc64_table_be.h -/// -/// Compiling: gcc -std=c99 -o crc64_tablegen crc64_tablegen.c -/// Add -DWORDS_BIGENDIAN to generate big endian table. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include -#include - -#ifdef WORDS_BIGENDIAN -# include "../../common/bswap.h" -#endif - - -static uint64_t crc64_table[4][256]; - - -extern void -init_crc64_table(void) -{ - static const uint64_t poly64 = UINT64_C(0xC96C5795D7870F42); - - for (size_t s = 0; s < 4; ++s) { - for (size_t b = 0; b < 256; ++b) { - uint64_t r = s == 0 ? b : crc64_table[s - 1][b]; - - for (size_t i = 0; i < 8; ++i) { - if (r & 1) - r = (r >> 1) ^ poly64; - else - r >>= 1; - } - - crc64_table[s][b] = r; - } - } - -#ifdef WORDS_BIGENDIAN - for (size_t s = 0; s < 4; ++s) - for (size_t b = 0; b < 256; ++b) - crc64_table[s][b] = bswap_64(crc64_table[s][b]); -#endif - - return; -} - - -static void -print_crc64_table(void) -{ - printf("/* This file has been automatically generated by " - "crc64_tablegen.c. */\n\n" - "const uint64_t lzma_crc64_table[4][256] = {\n\t{"); - - for (size_t s = 0; s < 4; ++s) { - for (size_t b = 0; b < 256; ++b) { - if ((b % 2) == 0) - printf("\n\t\t"); - - printf("UINT64_C(0x%016" PRIX64 ")", - crc64_table[s][b]); - - if (b != 255) - printf(",%s", (b+1) % 2 == 0 ? "" : " "); - } - - if (s == 3) - printf("\n\t}\n};\n"); - else - printf("\n\t}, {"); - } - - return; -} - - -int -main(void) -{ - init_crc64_table(); - print_crc64_table(); - return 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_x86.S b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_x86.S deleted file mode 100644 index 17de076ac9a..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc64_x86.S +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Speed-optimized CRC64 using slicing-by-four algorithm - * - * This uses only i386 instructions, but it is optimized for i686 and later - * (including e.g. Pentium II/III/IV, Athlon XP, and Core 2). - * - * Authors: Igor Pavlov (original CRC32 assembly code) - * Lasse Collin (CRC64 adaptation of the modified CRC32 code) - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * This code needs lzma_crc64_table, which can be created using the - * following C code: - -uint64_t lzma_crc64_table[4][256]; - -void -init_table(void) -{ - // ECMA-182 - static const uint64_t poly64 = UINT64_C(0xC96C5795D7870F42); - - for (size_t s = 0; s < 4; ++s) { - for (size_t b = 0; b < 256; ++b) { - uint64_t r = s == 0 ? b : lzma_crc64_table[s - 1][b]; - - for (size_t i = 0; i < 8; ++i) { - if (r & 1) - r = (r >> 1) ^ poly64; - else - r >>= 1; - } - - lzma_crc64_table[s][b] = r; - } - } -} - - * The prototype of the CRC64 function: - * extern uint64_t lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc); - */ - -/* - * On some systems, the functions need to be prefixed. The prefix is - * usually an underscore. - */ -#ifndef __USER_LABEL_PREFIX__ -# define __USER_LABEL_PREFIX__ -#endif -#define MAKE_SYM_CAT(prefix, sym) prefix ## sym -#define MAKE_SYM(prefix, sym) MAKE_SYM_CAT(prefix, sym) -#define LZMA_CRC64 MAKE_SYM(__USER_LABEL_PREFIX__, lzma_crc64) -#define LZMA_CRC64_TABLE MAKE_SYM(__USER_LABEL_PREFIX__, lzma_crc64_table) - -/* - * Solaris assembler doesn't have .p2align, and Darwin uses .align - * differently than GNU/Linux and Solaris. - */ -#if defined(__MACH__) || defined(__MSDOS__) -# define ALIGN(pow2, abs) .align pow2 -#else -# define ALIGN(pow2, abs) .align abs -#endif - - .text - .globl LZMA_CRC64 - -#if !defined(__MACH__) && !defined(_WIN32) && !defined(__CYGWIN__) \ - && !defined(__MSDOS__) - .type LZMA_CRC64, @function -#endif - - ALIGN(4, 16) -LZMA_CRC64: - /* - * Register usage: - * %eax crc LSB - * %edx crc MSB - * %esi buf - * %edi size or buf + size - * %ebx lzma_crc64_table - * %ebp Table index - * %ecx Temporary - */ - pushl %ebx - pushl %esi - pushl %edi - pushl %ebp - movl 0x14(%esp), %esi /* buf */ - movl 0x18(%esp), %edi /* size */ - movl 0x1C(%esp), %eax /* crc LSB */ - movl 0x20(%esp), %edx /* crc MSB */ - - /* - * Store the address of lzma_crc64_table to %ebx. This is needed to - * get position-independent code (PIC). - * - * The PIC macro is defined by libtool, while __PIC__ is defined - * by GCC but only on some systems. Testing for both makes it simpler - * to test this code without libtool, and keeps the code working also - * when built with libtool but using something else than GCC. - * - * I understood that libtool may define PIC on Windows even though - * the code in Windows DLLs is not PIC in sense that it is in ELF - * binaries, so we need a separate check to always use the non-PIC - * code on Windows. - */ -#if (!defined(PIC) && !defined(__PIC__)) \ - || (defined(_WIN32) || defined(__CYGWIN__)) - /* Not PIC */ - movl $LZMA_CRC64_TABLE, %ebx -#elif defined(__MACH__) - /* Mach-O */ - call .L_get_pc -.L_pic: - leal .L_lzma_crc64_table$non_lazy_ptr-.L_pic(%ebx), %ebx - movl (%ebx), %ebx -#else - /* ELF */ - call .L_get_pc - addl $_GLOBAL_OFFSET_TABLE_, %ebx - movl LZMA_CRC64_TABLE@GOT(%ebx), %ebx -#endif - - /* Complement the initial value. */ - notl %eax - notl %edx - -.L_align: - /* - * Check if there is enough input to use slicing-by-four. - * We need eight bytes, because the loop pre-reads four bytes. - */ - cmpl $8, %edi - jl .L_rest - - /* Check if we have reached alignment of four bytes. */ - testl $3, %esi - jz .L_slice - - /* Calculate CRC of the next input byte. */ - movzbl (%esi), %ebp - incl %esi - movzbl %al, %ecx - xorl %ecx, %ebp - shrdl $8, %edx, %eax - xorl (%ebx, %ebp, 8), %eax - shrl $8, %edx - xorl 4(%ebx, %ebp, 8), %edx - decl %edi - jmp .L_align - -.L_slice: - /* - * If we get here, there's at least eight bytes of aligned input - * available. Make %edi multiple of four bytes. Store the possible - * remainder over the "size" variable in the argument stack. - */ - movl %edi, 0x18(%esp) - andl $-4, %edi - subl %edi, 0x18(%esp) - - /* - * Let %edi be buf + size - 4 while running the main loop. This way - * we can compare for equality to determine when exit the loop. - */ - addl %esi, %edi - subl $4, %edi - - /* Read in the first four aligned bytes. */ - movl (%esi), %ecx - -.L_loop: - xorl %eax, %ecx - movzbl %cl, %ebp - movl 0x1800(%ebx, %ebp, 8), %eax - xorl %edx, %eax - movl 0x1804(%ebx, %ebp, 8), %edx - movzbl %ch, %ebp - xorl 0x1000(%ebx, %ebp, 8), %eax - xorl 0x1004(%ebx, %ebp, 8), %edx - shrl $16, %ecx - movzbl %cl, %ebp - xorl 0x0800(%ebx, %ebp, 8), %eax - xorl 0x0804(%ebx, %ebp, 8), %edx - movzbl %ch, %ebp - addl $4, %esi - xorl (%ebx, %ebp, 8), %eax - xorl 4(%ebx, %ebp, 8), %edx - - /* Check for end of aligned input. */ - cmpl %edi, %esi - - /* - * Copy the next input byte to %ecx. It is slightly faster to - * read it here than at the top of the loop. - */ - movl (%esi), %ecx - jl .L_loop - - /* - * Process the remaining four bytes, which we have already - * copied to %ecx. - */ - xorl %eax, %ecx - movzbl %cl, %ebp - movl 0x1800(%ebx, %ebp, 8), %eax - xorl %edx, %eax - movl 0x1804(%ebx, %ebp, 8), %edx - movzbl %ch, %ebp - xorl 0x1000(%ebx, %ebp, 8), %eax - xorl 0x1004(%ebx, %ebp, 8), %edx - shrl $16, %ecx - movzbl %cl, %ebp - xorl 0x0800(%ebx, %ebp, 8), %eax - xorl 0x0804(%ebx, %ebp, 8), %edx - movzbl %ch, %ebp - addl $4, %esi - xorl (%ebx, %ebp, 8), %eax - xorl 4(%ebx, %ebp, 8), %edx - - /* Copy the number of remaining bytes to %edi. */ - movl 0x18(%esp), %edi - -.L_rest: - /* Check for end of input. */ - testl %edi, %edi - jz .L_return - - /* Calculate CRC of the next input byte. */ - movzbl (%esi), %ebp - incl %esi - movzbl %al, %ecx - xorl %ecx, %ebp - shrdl $8, %edx, %eax - xorl (%ebx, %ebp, 8), %eax - shrl $8, %edx - xorl 4(%ebx, %ebp, 8), %edx - decl %edi - jmp .L_rest - -.L_return: - /* Complement the final value. */ - notl %eax - notl %edx - - popl %ebp - popl %edi - popl %esi - popl %ebx - ret - -#if defined(PIC) || defined(__PIC__) - ALIGN(4, 16) -.L_get_pc: - movl (%esp), %ebx - ret -#endif - -#if defined(__MACH__) && (defined(PIC) || defined(__PIC__)) - /* Mach-O PIC */ - .section __IMPORT,__pointers,non_lazy_symbol_pointers -.L_lzma_crc64_table$non_lazy_ptr: - .indirect_symbol LZMA_CRC64_TABLE - .long 0 - -#elif defined(_WIN32) || defined(__CYGWIN__) -# ifdef DLL_EXPORT - /* This is equivalent of __declspec(dllexport). */ - .section .drectve - .ascii " -export:lzma_crc64" -# endif - -#elif !defined(__MSDOS__) - /* ELF */ - .size LZMA_CRC64, .-LZMA_CRC64 -#endif - -/* - * This is needed to support non-executable stack. It's ugly to - * use __linux__ here, but I don't know a way to detect when - * we are using GNU assembler. - */ -#if defined(__ELF__) && defined(__linux__) - .section .note.GNU-stack,"",@progbits -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc_macros.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc_macros.h deleted file mode 100644 index 9e2c030304f..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/crc_macros.h +++ /dev/null @@ -1,32 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc_macros.h -/// \brief Some endian-dependent macros for CRC32 and CRC64 -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifdef WORDS_BIGENDIAN -# include "../../common/bswap.h" - -# define A(x) ((x) >> 24) -# define B(x) (((x) >> 16) & 0xFF) -# define C(x) (((x) >> 8) & 0xFF) -# define D(x) ((x) & 0xFF) - -# define S8(x) ((x) << 8) -# define S32(x) ((x) << 32) - -#else -# define A(x) ((x) & 0xFF) -# define B(x) (((x) >> 8) & 0xFF) -# define C(x) (((x) >> 16) & 0xFF) -# define D(x) ((x) >> 24) - -# define S8(x) ((x) >> 8) -# define S32(x) ((x) >> 32) -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/sha256.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/check/sha256.c deleted file mode 100644 index 6053a51bf10..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/check/sha256.c +++ /dev/null @@ -1,213 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file sha256.c -/// \brief SHA-256 -/// -/// \todo Crypto++ has x86 ASM optimizations. They use SSE so if they -/// are imported to liblzma, SSE instructions need to be used -/// conditionally to keep the code working on older boxes. -/// We could also support using some external libary for SHA-256. -// -// This code is based on the code found from 7-Zip, which has a modified -// version of the SHA-256 found from Crypto++ . -// The code was modified a little to fit into liblzma. -// -// Authors: Kevin Springle -// Wei Dai -// Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -// Avoid bogus warnings in transform(). -#if (__GNUC__ == 4 && __GNUC_MINOR__ >= 2) || __GNUC__ > 4 -# pragma GCC diagnostic ignored "-Wuninitialized" -#endif - -#include "check.h" - -#ifndef WORDS_BIGENDIAN -# include "../../common/bswap.h" -#endif - -// At least on x86, GCC is able to optimize this to a rotate instruction. -#define rotr_32(num, amount) ((num) >> (amount) | (num) << (32 - (amount))) - -#define blk0(i) (W[i] = data[i]) -#define blk2(i) (W[i & 15] += s1(W[(i - 2) & 15]) + W[(i - 7) & 15] \ - + s0(W[(i - 15) & 15])) - -#define Ch(x, y, z) (z ^ (x & (y ^ z))) -#define Maj(x, y, z) ((x & y) | (z & (x | y))) - -#define a(i) T[(0 - i) & 7] -#define b(i) T[(1 - i) & 7] -#define c(i) T[(2 - i) & 7] -#define d(i) T[(3 - i) & 7] -#define e(i) T[(4 - i) & 7] -#define f(i) T[(5 - i) & 7] -#define g(i) T[(6 - i) & 7] -#define h(i) T[(7 - i) & 7] - -#define R(i) \ - h(i) += S1(e(i)) + Ch(e(i), f(i), g(i)) + SHA256_K[i + j] \ - + (j ? blk2(i) : blk0(i)); \ - d(i) += h(i); \ - h(i) += S0(a(i)) + Maj(a(i), b(i), c(i)) - -#define S0(x) (rotr_32(x, 2) ^ rotr_32(x, 13) ^ rotr_32(x, 22)) -#define S1(x) (rotr_32(x, 6) ^ rotr_32(x, 11) ^ rotr_32(x, 25)) -#define s0(x) (rotr_32(x, 7) ^ rotr_32(x, 18) ^ (x >> 3)) -#define s1(x) (rotr_32(x, 17) ^ rotr_32(x, 19) ^ (x >> 10)) - - -static const uint32_t SHA256_K[64] = { - 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, - 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, - 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, - 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, - 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, - 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, - 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, - 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, - 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, - 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, - 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, - 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, - 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, - 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, - 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, - 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2, -}; - - -static void -transform(uint32_t state[static 8], const uint32_t data[static 16]) -{ - uint32_t W[16]; - uint32_t T[8]; - - // Copy state[] to working vars. - memcpy(T, state, sizeof(T)); - - // 64 operations, partially loop unrolled - for (unsigned int j = 0; j < 64; j += 16) { - R( 0); R( 1); R( 2); R( 3); - R( 4); R( 5); R( 6); R( 7); - R( 8); R( 9); R(10); R(11); - R(12); R(13); R(14); R(15); - } - - // Add the working vars back into state[]. - state[0] += a(0); - state[1] += b(0); - state[2] += c(0); - state[3] += d(0); - state[4] += e(0); - state[5] += f(0); - state[6] += g(0); - state[7] += h(0); -} - - -static void -process(lzma_check_state *check) -{ -#ifdef WORDS_BIGENDIAN - transform(check->state.sha256.state, check->buffer.u32); - -#else - uint32_t data[16]; - - for (size_t i = 0; i < 16; ++i) - data[i] = bswap_32(check->buffer.u32[i]); - - transform(check->state.sha256.state, data); -#endif - - return; -} - - -extern void -lzma_sha256_init(lzma_check_state *check) -{ - static const uint32_t s[8] = { - 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, - 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19, - }; - - memcpy(check->state.sha256.state, s, sizeof(s)); - check->state.sha256.size = 0; - - return; -} - - -extern void -lzma_sha256_update(const uint8_t *buf, size_t size, lzma_check_state *check) -{ - // Copy the input data into a properly aligned temporary buffer. - // This way we can be called with arbitrarily sized buffers - // (no need to be multiple of 64 bytes), and the code works also - // on architectures that don't allow unaligned memory access. - while (size > 0) { - const size_t copy_start = check->state.sha256.size & 0x3F; - size_t copy_size = 64 - copy_start; - if (copy_size > size) - copy_size = size; - - memcpy(check->buffer.u8 + copy_start, buf, copy_size); - - buf += copy_size; - size -= copy_size; - check->state.sha256.size += copy_size; - - if ((check->state.sha256.size & 0x3F) == 0) - process(check); - } - - return; -} - - -extern void -lzma_sha256_finish(lzma_check_state *check) -{ - // Add padding as described in RFC 3174 (it describes SHA-1 but - // the same padding style is used for SHA-256 too). - size_t pos = check->state.sha256.size & 0x3F; - check->buffer.u8[pos++] = 0x80; - - while (pos != 64 - 8) { - if (pos == 64) { - process(check); - pos = 0; - } - - check->buffer.u8[pos++] = 0x00; - } - - // Convert the message size from bytes to bits. - check->state.sha256.size *= 8; - -#ifdef WORDS_BIGENDIAN - check->buffer.u64[(64 - 8) / 8] = check->state.sha256.size; -#else - check->buffer.u64[(64 - 8) / 8] = bswap_64(check->state.sha256.size); -#endif - - process(check); - - for (size_t i = 0; i < 8; ++i) -#ifdef WORDS_BIGENDIAN - check->buffer.u32[i] = check->state.sha256.state[i]; -#else - check->buffer.u32[i] = bswap_32(check->state.sha256.state[i]); -#endif - - return; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/Makefile.inc b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/Makefile.inc deleted file mode 100644 index aaaeee93307..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/Makefile.inc +++ /dev/null @@ -1,67 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -liblzma_la_SOURCES += \ - common/common.c \ - common/common.h \ - common/bsr.h \ - common/block_util.c \ - common/easy_preset.c \ - common/easy_preset.h \ - common/filter_common.c \ - common/filter_common.h \ - common/index.c \ - common/index.h \ - common/stream_flags_common.c \ - common/stream_flags_common.h \ - common/vli_size.c - -if COND_MAIN_ENCODER -liblzma_la_SOURCES += \ - common/alone_encoder.c \ - common/block_buffer_encoder.c \ - common/block_encoder.c \ - common/block_encoder.h \ - common/block_header_encoder.c \ - common/easy_buffer_encoder.c \ - common/easy_encoder.c \ - common/easy_encoder_memusage.c \ - common/filter_buffer_encoder.c \ - common/filter_encoder.c \ - common/filter_encoder.h \ - common/filter_flags_encoder.c \ - common/index_encoder.c \ - common/index_encoder.h \ - common/stream_buffer_encoder.c \ - common/stream_encoder.c \ - common/stream_encoder.h \ - common/stream_flags_encoder.c \ - common/vli_encoder.c -endif - -if COND_MAIN_DECODER -liblzma_la_SOURCES += \ - common/alone_decoder.c \ - common/alone_decoder.h \ - common/auto_decoder.c \ - common/block_buffer_decoder.c \ - common/block_decoder.c \ - common/block_decoder.h \ - common/block_header_decoder.c \ - common/easy_decoder_memusage.c \ - common/filter_buffer_decoder.c \ - common/filter_decoder.c \ - common/filter_decoder.h \ - common/filter_flags_decoder.c \ - common/index_decoder.c \ - common/index_hash.c \ - common/stream_buffer_decoder.c \ - common/stream_decoder.c \ - common/stream_decoder.h \ - common/stream_flags_decoder.c \ - common/vli_decoder.c -endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/alone_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/alone_decoder.c deleted file mode 100644 index fa7fb8399cf..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/alone_decoder.c +++ /dev/null @@ -1,229 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file alone_decoder.c -/// \brief Decoder for LZMA_Alone files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "alone_decoder.h" -#include "lzma_decoder.h" -#include "lz_decoder.h" - - -struct lzma_coder_s { - lzma_next_coder next; - - enum { - SEQ_PROPERTIES, - SEQ_DICTIONARY_SIZE, - SEQ_UNCOMPRESSED_SIZE, - SEQ_CODER_INIT, - SEQ_CODE, - } sequence; - - /// Position in the header fields - size_t pos; - - /// Uncompressed size decoded from the header - lzma_vli uncompressed_size; - - /// Memory usage limit - uint64_t memlimit; - - /// Amount of memory actually needed (only an estimate) - uint64_t memusage; - - /// Options decoded from the header needed to initialize - /// the LZMA decoder - lzma_options_lzma options; -}; - - -static lzma_ret -alone_decode(lzma_coder *coder, - lzma_allocator *allocator lzma_attribute((unused)), - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, - lzma_action action) -{ - while (*out_pos < out_size - && (coder->sequence == SEQ_CODE || *in_pos < in_size)) - switch (coder->sequence) { - case SEQ_PROPERTIES: - if (lzma_lzma_lclppb_decode(&coder->options, in[*in_pos])) - return LZMA_FORMAT_ERROR; - - coder->sequence = SEQ_DICTIONARY_SIZE; - ++*in_pos; - break; - - case SEQ_DICTIONARY_SIZE: - coder->options.dict_size - |= (size_t)(in[*in_pos]) << (coder->pos * 8); - - if (++coder->pos == 4) { - if (coder->options.dict_size != UINT32_MAX) { - // A hack to ditch tons of false positives: - // We allow only dictionary sizes that are - // 2^n or 2^n + 2^(n-1). LZMA_Alone created - // only files with 2^n, but accepts any - // dictionary size. If someone complains, this - // will be reconsidered. - uint32_t d = coder->options.dict_size - 1; - d |= d >> 2; - d |= d >> 3; - d |= d >> 4; - d |= d >> 8; - d |= d >> 16; - ++d; - - if (d != coder->options.dict_size) - return LZMA_FORMAT_ERROR; - } - - coder->pos = 0; - coder->sequence = SEQ_UNCOMPRESSED_SIZE; - } - - ++*in_pos; - break; - - case SEQ_UNCOMPRESSED_SIZE: - coder->uncompressed_size - |= (lzma_vli)(in[*in_pos]) << (coder->pos * 8); - ++*in_pos; - if (++coder->pos < 8) - break; - - // Another hack to ditch false positives: Assume that - // if the uncompressed size is known, it must be less - // than 256 GiB. Again, if someone complains, this - // will be reconsidered. - if (coder->uncompressed_size != LZMA_VLI_UNKNOWN - && coder->uncompressed_size - >= (LZMA_VLI_C(1) << 38)) - return LZMA_FORMAT_ERROR; - - // Calculate the memory usage so that it is ready - // for SEQ_CODER_INIT. - coder->memusage = lzma_lzma_decoder_memusage(&coder->options) - + LZMA_MEMUSAGE_BASE; - - coder->pos = 0; - coder->sequence = SEQ_CODER_INIT; - - // Fall through - - case SEQ_CODER_INIT: { - if (coder->memusage > coder->memlimit) - return LZMA_MEMLIMIT_ERROR; - - lzma_filter_info filters[2] = { - { - .init = &lzma_lzma_decoder_init, - .options = &coder->options, - }, { - .init = NULL, - } - }; - - const lzma_ret ret = lzma_next_filter_init(&coder->next, - allocator, filters); - if (ret != LZMA_OK) - return ret; - - // Use a hack to set the uncompressed size. - lzma_lz_decoder_uncompressed(coder->next.coder, - coder->uncompressed_size); - - coder->sequence = SEQ_CODE; - break; - } - - case SEQ_CODE: { - return coder->next.code(coder->next.coder, - allocator, in, in_pos, in_size, - out, out_pos, out_size, action); - } - - default: - return LZMA_PROG_ERROR; - } - - return LZMA_OK; -} - - -static void -alone_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder, allocator); - return; -} - - -static lzma_ret -alone_decoder_memconfig(lzma_coder *coder, uint64_t *memusage, - uint64_t *old_memlimit, uint64_t new_memlimit) -{ - if (new_memlimit != 0 && new_memlimit < coder->memusage) - return LZMA_MEMLIMIT_ERROR; - - *memusage = coder->memusage; - *old_memlimit = coder->memlimit; - coder->memlimit = new_memlimit; - - return LZMA_OK; -} - - -extern lzma_ret -lzma_alone_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - uint64_t memlimit) -{ - lzma_next_coder_init(&lzma_alone_decoder_init, next, allocator); - - if (memlimit == 0) - return LZMA_PROG_ERROR; - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &alone_decode; - next->end = &alone_decoder_end; - next->memconfig = &alone_decoder_memconfig; - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - next->coder->sequence = SEQ_PROPERTIES; - next->coder->pos = 0; - next->coder->options.dict_size = 0; - next->coder->options.preset_dict = NULL; - next->coder->options.preset_dict_size = 0; - next->coder->uncompressed_size = 0; - next->coder->memlimit = memlimit; - next->coder->memusage = LZMA_MEMUSAGE_BASE; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_alone_decoder(lzma_stream *strm, uint64_t memlimit) -{ - lzma_next_strm_init(lzma_alone_decoder_init, strm, memlimit); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/alone_decoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/alone_decoder.h deleted file mode 100644 index 70d0d2a0ffa..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/alone_decoder.h +++ /dev/null @@ -1,22 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file alone_decoder.h -/// \brief Decoder for LZMA_Alone files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_ALONE_DECODER_H -#define LZMA_ALONE_DECODER_H - -#include "common.h" - - -extern lzma_ret lzma_alone_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, uint64_t memlimit); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/alone_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/alone_encoder.c deleted file mode 100644 index 68c9505db14..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/alone_encoder.c +++ /dev/null @@ -1,157 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file alone_decoder.c -/// \brief Decoder for LZMA_Alone files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" -#include "lzma_encoder.h" - - -#define ALONE_HEADER_SIZE (1 + 4 + 8) - - -struct lzma_coder_s { - lzma_next_coder next; - - enum { - SEQ_HEADER, - SEQ_CODE, - } sequence; - - size_t header_pos; - uint8_t header[ALONE_HEADER_SIZE]; -}; - - -static lzma_ret -alone_encode(lzma_coder *coder, - lzma_allocator *allocator lzma_attribute((unused)), - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, - lzma_action action) -{ - while (*out_pos < out_size) - switch (coder->sequence) { - case SEQ_HEADER: - lzma_bufcpy(coder->header, &coder->header_pos, - ALONE_HEADER_SIZE, - out, out_pos, out_size); - if (coder->header_pos < ALONE_HEADER_SIZE) - return LZMA_OK; - - coder->sequence = SEQ_CODE; - break; - - case SEQ_CODE: - return coder->next.code(coder->next.coder, - allocator, in, in_pos, in_size, - out, out_pos, out_size, action); - - default: - assert(0); - return LZMA_PROG_ERROR; - } - - return LZMA_OK; -} - - -static void -alone_encoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder, allocator); - return; -} - - -// At least for now, this is not used by any internal function. -static lzma_ret -alone_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_options_lzma *options) -{ - lzma_next_coder_init(&alone_encoder_init, next, allocator); - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &alone_encode; - next->end = &alone_encoder_end; - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - // Basic initializations - next->coder->sequence = SEQ_HEADER; - next->coder->header_pos = 0; - - // Encode the header: - // - Properties (1 byte) - if (lzma_lzma_lclppb_encode(options, next->coder->header)) - return LZMA_OPTIONS_ERROR; - - // - Dictionary size (4 bytes) - if (options->dict_size < LZMA_DICT_SIZE_MIN) - return LZMA_OPTIONS_ERROR; - - // Round up to to the next 2^n or 2^n + 2^(n - 1) depending on which - // one is the next unless it is UINT32_MAX. While the header would - // allow any 32-bit integer, we do this to keep the decoder of liblzma - // accepting the resulting files. - uint32_t d = options->dict_size - 1; - d |= d >> 2; - d |= d >> 3; - d |= d >> 4; - d |= d >> 8; - d |= d >> 16; - if (d != UINT32_MAX) - ++d; - - integer_write_32(next->coder->header + 1, d); - - // - Uncompressed size (always unknown and using EOPM) - memset(next->coder->header + 1 + 4, 0xFF, 8); - - // Initialize the LZMA encoder. - const lzma_filter_info filters[2] = { - { - .init = &lzma_lzma_encoder_init, - .options = (void *)(options), - }, { - .init = NULL, - } - }; - - return lzma_next_filter_init(&next->coder->next, allocator, filters); -} - - -/* -extern lzma_ret -lzma_alone_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_options_alone *options) -{ - lzma_next_coder_init(&alone_encoder_init, next, allocator, options); -} -*/ - - -extern LZMA_API(lzma_ret) -lzma_alone_encoder(lzma_stream *strm, const lzma_options_lzma *options) -{ - lzma_next_strm_init(alone_encoder_init, strm, options); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/auto_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/auto_decoder.c deleted file mode 100644 index ae6c3e78642..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/auto_decoder.c +++ /dev/null @@ -1,186 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file auto_decoder.c -/// \brief Autodetect between .xz Stream and .lzma (LZMA_Alone) formats -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "stream_decoder.h" -#include "alone_decoder.h" - - -struct lzma_coder_s { - /// Stream decoder or LZMA_Alone decoder - lzma_next_coder next; - - uint64_t memlimit; - uint32_t flags; - - enum { - SEQ_INIT, - SEQ_CODE, - SEQ_FINISH, - } sequence; -}; - - -static lzma_ret -auto_decode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - switch (coder->sequence) { - case SEQ_INIT: - if (*in_pos >= in_size) - return LZMA_OK; - - // Update the sequence now, because we want to continue from - // SEQ_CODE even if we return some LZMA_*_CHECK. - coder->sequence = SEQ_CODE; - - // Detect the file format. For now this is simple, since if - // it doesn't start with 0xFD (the first magic byte of the - // new format), it has to be LZMA_Alone, or something that - // we don't support at all. - if (in[*in_pos] == 0xFD) { - return_if_error(lzma_stream_decoder_init( - &coder->next, allocator, - coder->memlimit, coder->flags)); - } else { - return_if_error(lzma_alone_decoder_init(&coder->next, - allocator, coder->memlimit)); - - // If the application wants to know about missing - // integrity check or about the check in general, we - // need to handle it here, because LZMA_Alone decoder - // doesn't accept any flags. - if (coder->flags & LZMA_TELL_NO_CHECK) - return LZMA_NO_CHECK; - - if (coder->flags & LZMA_TELL_ANY_CHECK) - return LZMA_GET_CHECK; - } - - // Fall through - - case SEQ_CODE: { - const lzma_ret ret = coder->next.code( - coder->next.coder, allocator, - in, in_pos, in_size, - out, out_pos, out_size, action); - if (ret != LZMA_STREAM_END - || (coder->flags & LZMA_CONCATENATED) == 0) - return ret; - - coder->sequence = SEQ_FINISH; - } - - // Fall through - - case SEQ_FINISH: - // When LZMA_DECODE_CONCATENATED was used and we were decoding - // LZMA_Alone file, we need to check check that there is no - // trailing garbage and wait for LZMA_FINISH. - if (*in_pos < in_size) - return LZMA_DATA_ERROR; - - return action == LZMA_FINISH ? LZMA_STREAM_END : LZMA_OK; - - default: - assert(0); - return LZMA_PROG_ERROR; - } -} - - -static void -auto_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder, allocator); - return; -} - - -static lzma_check -auto_decoder_get_check(const lzma_coder *coder) -{ - // It is LZMA_Alone if get_check is NULL. - return coder->next.get_check == NULL ? LZMA_CHECK_NONE - : coder->next.get_check(coder->next.coder); -} - - -static lzma_ret -auto_decoder_memconfig(lzma_coder *coder, uint64_t *memusage, - uint64_t *old_memlimit, uint64_t new_memlimit) -{ - lzma_ret ret; - - if (coder->next.memconfig != NULL) { - ret = coder->next.memconfig(coder->next.coder, - memusage, old_memlimit, new_memlimit); - assert(*old_memlimit == coder->memlimit); - } else { - // No coder is configured yet. Use the base value as - // the current memory usage. - *memusage = LZMA_MEMUSAGE_BASE; - *old_memlimit = coder->memlimit; - ret = LZMA_OK; - } - - if (ret == LZMA_OK && new_memlimit != 0) - coder->memlimit = new_memlimit; - - return ret; -} - - -static lzma_ret -auto_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - uint64_t memlimit, uint32_t flags) -{ - lzma_next_coder_init(&auto_decoder_init, next, allocator); - - if (memlimit == 0) - return LZMA_PROG_ERROR; - - if (flags & ~LZMA_SUPPORTED_FLAGS) - return LZMA_OPTIONS_ERROR; - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &auto_decode; - next->end = &auto_decoder_end; - next->get_check = &auto_decoder_get_check; - next->memconfig = &auto_decoder_memconfig; - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - next->coder->memlimit = memlimit; - next->coder->flags = flags; - next->coder->sequence = SEQ_INIT; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_auto_decoder(lzma_stream *strm, uint64_t memlimit, uint32_t flags) -{ - lzma_next_strm_init(auto_decoder_init, strm, memlimit, flags); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_buffer_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_buffer_decoder.c deleted file mode 100644 index ff27a11ccfe..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_buffer_decoder.c +++ /dev/null @@ -1,80 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_buffer_decoder.c -/// \brief Single-call .xz Block decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "block_decoder.h" - - -extern LZMA_API(lzma_ret) -lzma_block_buffer_decode(lzma_block *block, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - if (in_pos == NULL || (in == NULL && *in_pos != in_size) - || *in_pos > in_size || out_pos == NULL - || (out == NULL && *out_pos != out_size) - || *out_pos > out_size) - return LZMA_PROG_ERROR; - - // Initialize the Block decoder. - lzma_next_coder block_decoder = LZMA_NEXT_CODER_INIT; - lzma_ret ret = lzma_block_decoder_init( - &block_decoder, allocator, block); - - if (ret == LZMA_OK) { - // Save the positions so that we can restore them in case - // an error occurs. - const size_t in_start = *in_pos; - const size_t out_start = *out_pos; - - // Do the actual decoding. - ret = block_decoder.code(block_decoder.coder, allocator, - in, in_pos, in_size, out, out_pos, out_size, - LZMA_FINISH); - - if (ret == LZMA_STREAM_END) { - ret = LZMA_OK; - } else { - if (ret == LZMA_OK) { - // Either the input was truncated or the - // output buffer was too small. - assert(*in_pos == in_size - || *out_pos == out_size); - - // If all the input was consumed, then the - // input is truncated, even if the output - // buffer is also full. This is because - // processing the last byte of the Block - // never produces output. - // - // NOTE: This assumption may break when new - // filters are added, if the end marker of - // the filter doesn't consume at least one - // complete byte. - if (*in_pos == in_size) - ret = LZMA_DATA_ERROR; - else - ret = LZMA_BUF_ERROR; - } - - // Restore the positions. - *in_pos = in_start; - *out_pos = out_start; - } - } - - // Free the decoder memory. This needs to be done even if - // initialization fails, because the internal API doesn't - // require the initialization function to free its memory on error. - lzma_next_end(&block_decoder, allocator); - - return ret; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_buffer_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_buffer_encoder.c deleted file mode 100644 index 4d90feef50b..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_buffer_encoder.c +++ /dev/null @@ -1,299 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_buffer_encoder.c -/// \brief Single-call .xz Block encoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "block_encoder.h" -#include "filter_encoder.h" -#include "lzma2_encoder.h" -#include "check.h" - - -/// Estimate the maximum size of the Block Header and Check fields for -/// a Block that uses LZMA2 uncompressed chunks. We could use -/// lzma_block_header_size() but this is simpler. -/// -/// Block Header Size + Block Flags + Compressed Size -/// + Uncompressed Size + Filter Flags for LZMA2 + CRC32 + Check -/// and round up to the next multiple of four to take Header Padding -/// into account. -#define HEADERS_BOUND ((1 + 1 + 2 * LZMA_VLI_BYTES_MAX + 3 + 4 \ - + LZMA_CHECK_SIZE_MAX + 3) & ~3) - - -static lzma_vli -lzma2_bound(lzma_vli uncompressed_size) -{ - // Prevent integer overflow in overhead calculation. - if (uncompressed_size > COMPRESSED_SIZE_MAX) - return 0; - - // Calculate the exact overhead of the LZMA2 headers: Round - // uncompressed_size up to the next multiple of LZMA2_CHUNK_MAX, - // multiply by the size of per-chunk header, and add one byte for - // the end marker. - const lzma_vli overhead = ((uncompressed_size + LZMA2_CHUNK_MAX - 1) - / LZMA2_CHUNK_MAX) - * LZMA2_HEADER_UNCOMPRESSED + 1; - - // Catch the possible integer overflow. - if (COMPRESSED_SIZE_MAX - overhead < uncompressed_size) - return 0; - - return uncompressed_size + overhead; -} - - -extern LZMA_API(size_t) -lzma_block_buffer_bound(size_t uncompressed_size) -{ - // For now, if the data doesn't compress, we always use uncompressed - // chunks of LZMA2. In future we may use Subblock filter too, but - // but for simplicity we probably will still use the same bound - // calculation even though Subblock filter would have slightly less - // overhead. - lzma_vli lzma2_size = lzma2_bound(uncompressed_size); - if (lzma2_size == 0) - return 0; - - // Take Block Padding into account. - lzma2_size = (lzma2_size + 3) & ~LZMA_VLI_C(3); - -#if SIZE_MAX < LZMA_VLI_MAX - // Catch the possible integer overflow on 32-bit systems. There's no - // overflow on 64-bit systems, because lzma2_bound() already takes - // into account the size of the headers in the Block. - if (SIZE_MAX - HEADERS_BOUND < lzma2_size) - return 0; -#endif - - return HEADERS_BOUND + lzma2_size; -} - - -static lzma_ret -block_encode_uncompressed(lzma_block *block, const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - // TODO: Figure out if the last filter is LZMA2 or Subblock and use - // that filter to encode the uncompressed chunks. - - // Use LZMA2 uncompressed chunks. We wouldn't need a dictionary at - // all, but LZMA2 always requires a dictionary, so use the minimum - // value to minimize memory usage of the decoder. - lzma_options_lzma lzma2 = { - .dict_size = LZMA_DICT_SIZE_MIN, - }; - - lzma_filter filters[2]; - filters[0].id = LZMA_FILTER_LZMA2; - filters[0].options = &lzma2; - filters[1].id = LZMA_VLI_UNKNOWN; - - // Set the above filter options to *block temporarily so that we can - // encode the Block Header. - lzma_filter *filters_orig = block->filters; - block->filters = filters; - - if (lzma_block_header_size(block) != LZMA_OK) { - block->filters = filters_orig; - return LZMA_PROG_ERROR; - } - - // Check that there's enough output space. The caller has already - // set block->compressed_size to what lzma2_bound() has returned, - // so we can reuse that value. We know that compressed_size is a - // known valid VLI and header_size is a small value so their sum - // will never overflow. - assert(block->compressed_size == lzma2_bound(in_size)); - if (out_size - *out_pos - < block->header_size + block->compressed_size) { - block->filters = filters_orig; - return LZMA_BUF_ERROR; - } - - if (lzma_block_header_encode(block, out + *out_pos) != LZMA_OK) { - block->filters = filters_orig; - return LZMA_PROG_ERROR; - } - - block->filters = filters_orig; - *out_pos += block->header_size; - - // Encode the data using LZMA2 uncompressed chunks. - size_t in_pos = 0; - uint8_t control = 0x01; // Dictionary reset - - while (in_pos < in_size) { - // Control byte: Indicate uncompressed chunk, of which - // the first resets the dictionary. - out[(*out_pos)++] = control; - control = 0x02; // No dictionary reset - - // Size of the uncompressed chunk - const size_t copy_size - = MIN(in_size - in_pos, LZMA2_CHUNK_MAX); - out[(*out_pos)++] = (copy_size - 1) >> 8; - out[(*out_pos)++] = (copy_size - 1) & 0xFF; - - // The actual data - assert(*out_pos + copy_size <= out_size); - memcpy(out + *out_pos, in + in_pos, copy_size); - - in_pos += copy_size; - *out_pos += copy_size; - } - - // End marker - out[(*out_pos)++] = 0x00; - assert(*out_pos <= out_size); - - return LZMA_OK; -} - - -static lzma_ret -block_encode_normal(lzma_block *block, lzma_allocator *allocator, - const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - // Find out the size of the Block Header. - block->compressed_size = lzma2_bound(in_size); - if (block->compressed_size == 0) - return LZMA_DATA_ERROR; - - block->uncompressed_size = in_size; - return_if_error(lzma_block_header_size(block)); - - // Reserve space for the Block Header and skip it for now. - if (out_size - *out_pos <= block->header_size) - return LZMA_BUF_ERROR; - - const size_t out_start = *out_pos; - *out_pos += block->header_size; - - // Limit out_size so that we stop encoding if the output would grow - // bigger than what uncompressed Block would be. - if (out_size - *out_pos > block->compressed_size) - out_size = *out_pos + block->compressed_size; - - // TODO: In many common cases this could be optimized to use - // significantly less memory. - lzma_next_coder raw_encoder = LZMA_NEXT_CODER_INIT; - lzma_ret ret = lzma_raw_encoder_init( - &raw_encoder, allocator, block->filters); - - if (ret == LZMA_OK) { - size_t in_pos = 0; - ret = raw_encoder.code(raw_encoder.coder, allocator, - in, &in_pos, in_size, out, out_pos, out_size, - LZMA_FINISH); - } - - // NOTE: This needs to be run even if lzma_raw_encoder_init() failed. - lzma_next_end(&raw_encoder, allocator); - - if (ret == LZMA_STREAM_END) { - // Compression was successful. Write the Block Header. - block->compressed_size - = *out_pos - (out_start + block->header_size); - ret = lzma_block_header_encode(block, out + out_start); - if (ret != LZMA_OK) - ret = LZMA_PROG_ERROR; - - } else if (ret == LZMA_OK) { - // Output buffer became full. - ret = LZMA_BUF_ERROR; - } - - // Reset *out_pos if something went wrong. - if (ret != LZMA_OK) - *out_pos = out_start; - - return ret; -} - - -extern LZMA_API(lzma_ret) -lzma_block_buffer_encode(lzma_block *block, lzma_allocator *allocator, - const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - // Sanity checks - if (block == NULL || block->filters == NULL - || (in == NULL && in_size != 0) || out == NULL - || out_pos == NULL || *out_pos > out_size) - return LZMA_PROG_ERROR; - - // Check the version field. - if (block->version != 0) - return LZMA_OPTIONS_ERROR; - - // Size of a Block has to be a multiple of four, so limit the size - // here already. This way we don't need to check it again when adding - // Block Padding. - out_size -= (out_size - *out_pos) & 3; - - // Get the size of the Check field. - const size_t check_size = lzma_check_size(block->check); - if (check_size == UINT32_MAX) - return LZMA_PROG_ERROR; - - // Reserve space for the Check field. - if (out_size - *out_pos <= check_size) - return LZMA_BUF_ERROR; - - out_size -= check_size; - - // Do the actual compression. - const lzma_ret ret = block_encode_normal(block, allocator, - in, in_size, out, out_pos, out_size); - if (ret != LZMA_OK) { - // If the error was something else than output buffer - // becoming full, return the error now. - if (ret != LZMA_BUF_ERROR) - return ret; - - // The data was uncompressible (at least with the options - // given to us) or the output buffer was too small. Use the - // uncompressed chunks of LZMA2 to wrap the data into a valid - // Block. If we haven't been given enough output space, even - // this may fail. - return_if_error(block_encode_uncompressed(block, in, in_size, - out, out_pos, out_size)); - } - - assert(*out_pos <= out_size); - - // Block Padding. No buffer overflow here, because we already adjusted - // out_size so that (out_size - out_start) is a multiple of four. - // Thus, if the buffer is full, the loop body can never run. - for (size_t i = (size_t)(block->compressed_size); i & 3; ++i) { - assert(*out_pos < out_size); - out[(*out_pos)++] = 0x00; - } - - // If there's no Check field, we are done now. - if (check_size > 0) { - // Calculate the integrity check. We reserved space for - // the Check field earlier so we don't need to check for - // available output space here. - lzma_check_state check; - lzma_check_init(&check, block->check); - lzma_check_update(&check, block->check, in, in_size); - lzma_check_finish(&check, block->check); - - memcpy(block->raw_check, check.buffer.u8, check_size); - memcpy(out + *out_pos, check.buffer.u8, check_size); - *out_pos += check_size; - } - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_decoder.c deleted file mode 100644 index a3ce6f49500..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_decoder.c +++ /dev/null @@ -1,242 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_decoder.c -/// \brief Decodes .xz Blocks -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "block_decoder.h" -#include "filter_decoder.h" -#include "check.h" - - -struct lzma_coder_s { - enum { - SEQ_CODE, - SEQ_PADDING, - SEQ_CHECK, - } sequence; - - /// The filters in the chain; initialized with lzma_raw_decoder_init(). - lzma_next_coder next; - - /// Decoding options; we also write Compressed Size and Uncompressed - /// Size back to this structure when the decoding has been finished. - lzma_block *block; - - /// Compressed Size calculated while decoding - lzma_vli compressed_size; - - /// Uncompressed Size calculated while decoding - lzma_vli uncompressed_size; - - /// Maximum allowed Compressed Size; this takes into account the - /// size of the Block Header and Check fields when Compressed Size - /// is unknown. - lzma_vli compressed_limit; - - /// Position when reading the Check field - size_t check_pos; - - /// Check of the uncompressed data - lzma_check_state check; -}; - - -static inline bool -update_size(lzma_vli *size, lzma_vli add, lzma_vli limit) -{ - if (limit > LZMA_VLI_MAX) - limit = LZMA_VLI_MAX; - - if (limit < *size || limit - *size < add) - return true; - - *size += add; - - return false; -} - - -static inline bool -is_size_valid(lzma_vli size, lzma_vli reference) -{ - return reference == LZMA_VLI_UNKNOWN || reference == size; -} - - -static lzma_ret -block_decode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - switch (coder->sequence) { - case SEQ_CODE: { - const size_t in_start = *in_pos; - const size_t out_start = *out_pos; - - const lzma_ret ret = coder->next.code(coder->next.coder, - allocator, in, in_pos, in_size, - out, out_pos, out_size, action); - - const size_t in_used = *in_pos - in_start; - const size_t out_used = *out_pos - out_start; - - // NOTE: We compare to compressed_limit here, which prevents - // the total size of the Block growing past LZMA_VLI_MAX. - if (update_size(&coder->compressed_size, in_used, - coder->compressed_limit) - || update_size(&coder->uncompressed_size, - out_used, - coder->block->uncompressed_size)) - return LZMA_DATA_ERROR; - - lzma_check_update(&coder->check, coder->block->check, - out + out_start, out_used); - - if (ret != LZMA_STREAM_END) - return ret; - - // Compressed and Uncompressed Sizes are now at their final - // values. Verify that they match the values given to us. - if (!is_size_valid(coder->compressed_size, - coder->block->compressed_size) - || !is_size_valid(coder->uncompressed_size, - coder->block->uncompressed_size)) - return LZMA_DATA_ERROR; - - // Copy the values into coder->block. The caller - // may use this information to construct Index. - coder->block->compressed_size = coder->compressed_size; - coder->block->uncompressed_size = coder->uncompressed_size; - - coder->sequence = SEQ_PADDING; - } - - // Fall through - - case SEQ_PADDING: - // Compressed Data is padded to a multiple of four bytes. - while (coder->compressed_size & 3) { - if (*in_pos >= in_size) - return LZMA_OK; - - // We use compressed_size here just get the Padding - // right. The actual Compressed Size was stored to - // coder->block already, and won't be modified by - // us anymore. - ++coder->compressed_size; - - if (in[(*in_pos)++] != 0x00) - return LZMA_DATA_ERROR; - } - - if (coder->block->check == LZMA_CHECK_NONE) - return LZMA_STREAM_END; - - lzma_check_finish(&coder->check, coder->block->check); - coder->sequence = SEQ_CHECK; - - // Fall through - - case SEQ_CHECK: { - const size_t check_size = lzma_check_size(coder->block->check); - lzma_bufcpy(in, in_pos, in_size, coder->block->raw_check, - &coder->check_pos, check_size); - if (coder->check_pos < check_size) - return LZMA_OK; - - // Validate the Check only if we support it. - // coder->check.buffer may be uninitialized - // when the Check ID is not supported. - if (lzma_check_is_supported(coder->block->check) - && memcmp(coder->block->raw_check, - coder->check.buffer.u8, - check_size) != 0) - return LZMA_DATA_ERROR; - - return LZMA_STREAM_END; - } - } - - return LZMA_PROG_ERROR; -} - - -static void -block_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder, allocator); - return; -} - - -extern lzma_ret -lzma_block_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - lzma_block *block) -{ - lzma_next_coder_init(&lzma_block_decoder_init, next, allocator); - - // Validate the options. lzma_block_unpadded_size() does that for us - // except for Uncompressed Size and filters. Filters are validated - // by the raw decoder. - if (lzma_block_unpadded_size(block) == 0 - || !lzma_vli_is_valid(block->uncompressed_size)) - return LZMA_PROG_ERROR; - - // Allocate and initialize *next->coder if needed. - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &block_decode; - next->end = &block_decoder_end; - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - // Basic initializations - next->coder->sequence = SEQ_CODE; - next->coder->block = block; - next->coder->compressed_size = 0; - next->coder->uncompressed_size = 0; - - // If Compressed Size is not known, we calculate the maximum allowed - // value so that encoded size of the Block (including Block Padding) - // is still a valid VLI and a multiple of four. - next->coder->compressed_limit - = block->compressed_size == LZMA_VLI_UNKNOWN - ? (LZMA_VLI_MAX & ~LZMA_VLI_C(3)) - - block->header_size - - lzma_check_size(block->check) - : block->compressed_size; - - // Initialize the check. It's caller's problem if the Check ID is not - // supported, and the Block decoder cannot verify the Check field. - // Caller can test lzma_check_is_supported(block->check). - next->coder->check_pos = 0; - lzma_check_init(&next->coder->check, block->check); - - // Initialize the filter chain. - return lzma_raw_decoder_init(&next->coder->next, allocator, - block->filters); -} - - -extern LZMA_API(lzma_ret) -lzma_block_decoder(lzma_stream *strm, lzma_block *block) -{ - lzma_next_strm_init(lzma_block_decoder_init, strm, block); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_decoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_decoder.h deleted file mode 100644 index 7da9df63f76..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_decoder.h +++ /dev/null @@ -1,22 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_decoder.h -/// \brief Decodes .xz Blocks -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_BLOCK_DECODER_H -#define LZMA_BLOCK_DECODER_H - -#include "common.h" - - -extern lzma_ret lzma_block_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, lzma_block *block); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_encoder.c deleted file mode 100644 index 567889aa2f6..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_encoder.c +++ /dev/null @@ -1,198 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_encoder.c -/// \brief Encodes .xz Blocks -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "block_encoder.h" -#include "filter_encoder.h" -#include "check.h" - - -struct lzma_coder_s { - /// The filters in the chain; initialized with lzma_raw_decoder_init(). - lzma_next_coder next; - - /// Encoding options; we also write Unpadded Size, Compressed Size, - /// and Uncompressed Size back to this structure when the encoding - /// has been finished. - lzma_block *block; - - enum { - SEQ_CODE, - SEQ_PADDING, - SEQ_CHECK, - } sequence; - - /// Compressed Size calculated while encoding - lzma_vli compressed_size; - - /// Uncompressed Size calculated while encoding - lzma_vli uncompressed_size; - - /// Position in the Check field - size_t pos; - - /// Check of the uncompressed data - lzma_check_state check; -}; - - -static lzma_ret -block_encode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - // Check that our amount of input stays in proper limits. - if (LZMA_VLI_MAX - coder->uncompressed_size < in_size - *in_pos) - return LZMA_DATA_ERROR; - - switch (coder->sequence) { - case SEQ_CODE: { - const size_t in_start = *in_pos; - const size_t out_start = *out_pos; - - const lzma_ret ret = coder->next.code(coder->next.coder, - allocator, in, in_pos, in_size, - out, out_pos, out_size, action); - - const size_t in_used = *in_pos - in_start; - const size_t out_used = *out_pos - out_start; - - if (COMPRESSED_SIZE_MAX - coder->compressed_size < out_used) - return LZMA_DATA_ERROR; - - coder->compressed_size += out_used; - - // No need to check for overflow because we have already - // checked it at the beginning of this function. - coder->uncompressed_size += in_used; - - lzma_check_update(&coder->check, coder->block->check, - in + in_start, in_used); - - if (ret != LZMA_STREAM_END || action == LZMA_SYNC_FLUSH) - return ret; - - assert(*in_pos == in_size); - assert(action == LZMA_FINISH); - - // Copy the values into coder->block. The caller - // may use this information to construct Index. - coder->block->compressed_size = coder->compressed_size; - coder->block->uncompressed_size = coder->uncompressed_size; - - coder->sequence = SEQ_PADDING; - } - - // Fall through - - case SEQ_PADDING: - // Pad Compressed Data to a multiple of four bytes. We can - // use coder->compressed_size for this since we don't need - // it for anything else anymore. - while (coder->compressed_size & 3) { - if (*out_pos >= out_size) - return LZMA_OK; - - out[*out_pos] = 0x00; - ++*out_pos; - ++coder->compressed_size; - } - - if (coder->block->check == LZMA_CHECK_NONE) - return LZMA_STREAM_END; - - lzma_check_finish(&coder->check, coder->block->check); - - coder->sequence = SEQ_CHECK; - - // Fall through - - case SEQ_CHECK: { - const size_t check_size = lzma_check_size(coder->block->check); - lzma_bufcpy(coder->check.buffer.u8, &coder->pos, check_size, - out, out_pos, out_size); - if (coder->pos < check_size) - return LZMA_OK; - - memcpy(coder->block->raw_check, coder->check.buffer.u8, - check_size); - return LZMA_STREAM_END; - } - } - - return LZMA_PROG_ERROR; -} - - -static void -block_encoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder, allocator); - return; -} - - -extern lzma_ret -lzma_block_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - lzma_block *block) -{ - lzma_next_coder_init(&lzma_block_encoder_init, next, allocator); - - if (block->version != 0) - return LZMA_OPTIONS_ERROR; - - // If the Check ID is not supported, we cannot calculate the check and - // thus not create a proper Block. - if ((unsigned int)(block->check) > LZMA_CHECK_ID_MAX) - return LZMA_PROG_ERROR; - - if (!lzma_check_is_supported(block->check)) - return LZMA_UNSUPPORTED_CHECK; - - // Allocate and initialize *next->coder if needed. - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &block_encode; - next->end = &block_encoder_end; - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - // Basic initializations - next->coder->sequence = SEQ_CODE; - next->coder->block = block; - next->coder->compressed_size = 0; - next->coder->uncompressed_size = 0; - next->coder->pos = 0; - - // Initialize the check - lzma_check_init(&next->coder->check, block->check); - - // Initialize the requested filters. - return lzma_raw_encoder_init(&next->coder->next, allocator, - block->filters); -} - - -extern LZMA_API(lzma_ret) -lzma_block_encoder(lzma_stream *strm, lzma_block *block) -{ - lzma_next_strm_init(lzma_block_encoder_init, strm, block); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_encoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_encoder.h deleted file mode 100644 index b9eff0be273..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_encoder.h +++ /dev/null @@ -1,47 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_encoder.h -/// \brief Encodes .xz Blocks -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_BLOCK_ENCODER_H -#define LZMA_BLOCK_ENCODER_H - -#include "common.h" - - -/// \brief Biggest Compressed Size value that the Block encoder supports -/// -/// The maximum size of a single Block is limited by the maximum size of -/// a Stream, which in theory is 2^63 - 3 bytes (i.e. LZMA_VLI_MAX - 3). -/// While the size is really big and no one should hit it in practice, we -/// take it into account in some places anyway to catch some errors e.g. if -/// application passes insanely big value to some function. -/// -/// We could take into account the headers etc. to determine the exact -/// maximum size of the Compressed Data field, but the complexity would give -/// us nothing useful. Instead, limit the size of Compressed Data so that -/// even with biggest possible Block Header and Check fields the total -/// encoded size of the Block stays as a valid VLI. This doesn't guarantee -/// that the size of the Stream doesn't grow too big, but that problem is -/// taken care outside the Block handling code. -/// -/// ~LZMA_VLI_C(3) is to guarantee that if we need padding at the end of -/// the Compressed Data field, it will still stay in the proper limit. -/// -/// This constant is in this file because it is needed in both -/// block_encoder.c and block_buffer_encoder.c. -#define COMPRESSED_SIZE_MAX ((LZMA_VLI_MAX - LZMA_BLOCK_HEADER_SIZE_MAX \ - - LZMA_CHECK_SIZE_MAX) & ~LZMA_VLI_C(3)) - - -extern lzma_ret lzma_block_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, lzma_block *block); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_header_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_header_decoder.c deleted file mode 100644 index 868f71b2ddd..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_header_decoder.c +++ /dev/null @@ -1,116 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_header_decoder.c -/// \brief Decodes Block Header from .xz files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" -#include "check.h" - - -static void -free_properties(lzma_block *block, lzma_allocator *allocator) -{ - // Free allocated filter options. The last array member is not - // touched after the initialization in the beginning of - // lzma_block_header_decode(), so we don't need to touch that here. - for (size_t i = 0; i < LZMA_FILTERS_MAX; ++i) { - lzma_free(block->filters[i].options, allocator); - block->filters[i].id = LZMA_VLI_UNKNOWN; - block->filters[i].options = NULL; - } - - return; -} - - -extern LZMA_API(lzma_ret) -lzma_block_header_decode(lzma_block *block, - lzma_allocator *allocator, const uint8_t *in) -{ - // NOTE: We consider the header to be corrupt not only when the - // CRC32 doesn't match, but also when variable-length integers - // are invalid or over 63 bits, or if the header is too small - // to contain the claimed information. - - // Initialize the filter options array. This way the caller can - // safely free() the options even if an error occurs in this function. - for (size_t i = 0; i <= LZMA_FILTERS_MAX; ++i) { - block->filters[i].id = LZMA_VLI_UNKNOWN; - block->filters[i].options = NULL; - } - - // Always zero for now. - block->version = 0; - - // Validate Block Header Size and Check type. The caller must have - // already set these, so it is a programming error if this test fails. - if (lzma_block_header_size_decode(in[0]) != block->header_size - || (unsigned int)(block->check) > LZMA_CHECK_ID_MAX) - return LZMA_PROG_ERROR; - - // Exclude the CRC32 field. - const size_t in_size = block->header_size - 4; - - // Verify CRC32 - if (lzma_crc32(in, in_size, 0) != integer_read_32(in + in_size)) - return LZMA_DATA_ERROR; - - // Check for unsupported flags. - if (in[1] & 0x3C) - return LZMA_OPTIONS_ERROR; - - // Start after the Block Header Size and Block Flags fields. - size_t in_pos = 2; - - // Compressed Size - if (in[1] & 0x40) { - return_if_error(lzma_vli_decode(&block->compressed_size, - NULL, in, &in_pos, in_size)); - - // Validate Compressed Size. This checks that it isn't zero - // and that the total size of the Block is a valid VLI. - if (lzma_block_unpadded_size(block) == 0) - return LZMA_DATA_ERROR; - } else { - block->compressed_size = LZMA_VLI_UNKNOWN; - } - - // Uncompressed Size - if (in[1] & 0x80) - return_if_error(lzma_vli_decode(&block->uncompressed_size, - NULL, in, &in_pos, in_size)); - else - block->uncompressed_size = LZMA_VLI_UNKNOWN; - - // Filter Flags - const size_t filter_count = (in[1] & 3) + 1; - for (size_t i = 0; i < filter_count; ++i) { - const lzma_ret ret = lzma_filter_flags_decode( - &block->filters[i], allocator, - in, &in_pos, in_size); - if (ret != LZMA_OK) { - free_properties(block, allocator); - return ret; - } - } - - // Padding - while (in_pos < in_size) { - if (in[in_pos++] != 0x00) { - free_properties(block, allocator); - - // Possibly some new field present so use - // LZMA_OPTIONS_ERROR instead of LZMA_DATA_ERROR. - return LZMA_OPTIONS_ERROR; - } - } - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_header_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_header_encoder.c deleted file mode 100644 index 8bef63b53d2..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_header_encoder.c +++ /dev/null @@ -1,132 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_header_encoder.c -/// \brief Encodes Block Header for .xz files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" -#include "check.h" - - -extern LZMA_API(lzma_ret) -lzma_block_header_size(lzma_block *block) -{ - if (block->version != 0) - return LZMA_OPTIONS_ERROR; - - // Block Header Size + Block Flags + CRC32. - uint32_t size = 1 + 1 + 4; - - // Compressed Size - if (block->compressed_size != LZMA_VLI_UNKNOWN) { - const uint32_t add = lzma_vli_size(block->compressed_size); - if (add == 0 || block->compressed_size == 0) - return LZMA_PROG_ERROR; - - size += add; - } - - // Uncompressed Size - if (block->uncompressed_size != LZMA_VLI_UNKNOWN) { - const uint32_t add = lzma_vli_size(block->uncompressed_size); - if (add == 0) - return LZMA_PROG_ERROR; - - size += add; - } - - // List of Filter Flags - if (block->filters == NULL || block->filters[0].id == LZMA_VLI_UNKNOWN) - return LZMA_PROG_ERROR; - - for (size_t i = 0; block->filters[i].id != LZMA_VLI_UNKNOWN; ++i) { - // Don't allow too many filters. - if (i == LZMA_FILTERS_MAX) - return LZMA_PROG_ERROR; - - uint32_t add; - return_if_error(lzma_filter_flags_size(&add, - block->filters + i)); - - size += add; - } - - // Pad to a multiple of four bytes. - block->header_size = (size + 3) & ~UINT32_C(3); - - // NOTE: We don't verify that the encoded size of the Block stays - // within limits. This is because it is possible that we are called - // with exaggerated Compressed Size (e.g. LZMA_VLI_MAX) to reserve - // space for Block Header, and later called again with lower, - // real values. - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_block_header_encode(const lzma_block *block, uint8_t *out) -{ - // Valdidate everything but filters. - if (lzma_block_unpadded_size(block) == 0 - || !lzma_vli_is_valid(block->uncompressed_size)) - return LZMA_PROG_ERROR; - - // Indicate the size of the buffer _excluding_ the CRC32 field. - const size_t out_size = block->header_size - 4; - - // Store the Block Header Size. - out[0] = out_size / 4; - - // We write Block Flags in pieces. - out[1] = 0x00; - size_t out_pos = 2; - - // Compressed Size - if (block->compressed_size != LZMA_VLI_UNKNOWN) { - return_if_error(lzma_vli_encode(block->compressed_size, NULL, - out, &out_pos, out_size)); - - out[1] |= 0x40; - } - - // Uncompressed Size - if (block->uncompressed_size != LZMA_VLI_UNKNOWN) { - return_if_error(lzma_vli_encode(block->uncompressed_size, NULL, - out, &out_pos, out_size)); - - out[1] |= 0x80; - } - - // Filter Flags - if (block->filters == NULL || block->filters[0].id == LZMA_VLI_UNKNOWN) - return LZMA_PROG_ERROR; - - size_t filter_count = 0; - do { - // There can be at maximum of four filters. - if (filter_count == LZMA_FILTERS_MAX) - return LZMA_PROG_ERROR; - - return_if_error(lzma_filter_flags_encode( - block->filters + filter_count, - out, &out_pos, out_size)); - - } while (block->filters[++filter_count].id != LZMA_VLI_UNKNOWN); - - out[1] |= filter_count - 1; - - // Padding - memzero(out + out_pos, out_size - out_pos); - - // CRC32 - integer_write_32(out + out_size, lzma_crc32(out, out_size, 0)); - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_util.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_util.c deleted file mode 100644 index cb9cde255e6..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/block_util.c +++ /dev/null @@ -1,90 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_header.c -/// \brief Utility functions to handle lzma_block -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" -#include "index.h" - - -extern LZMA_API(lzma_ret) -lzma_block_compressed_size(lzma_block *block, lzma_vli total_size) -{ - // Validate everything but Uncompressed Size and filters. - if (lzma_block_unpadded_size(block) == 0) - return LZMA_PROG_ERROR; - - const uint32_t container_size = block->header_size - + lzma_check_size(block->check); - - // Validate that Compressed Size will be greater than zero. - if (container_size <= total_size) - return LZMA_DATA_ERROR; - - // Calculate what Compressed Size is supposed to be. - // If Compressed Size was present in Block Header, - // compare that the new value matches it. - const lzma_vli compressed_size = total_size - container_size; - if (block->compressed_size != LZMA_VLI_UNKNOWN - && block->compressed_size != compressed_size) - return LZMA_DATA_ERROR; - - block->compressed_size = compressed_size; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_vli) -lzma_block_unpadded_size(const lzma_block *block) -{ - // Validate the values that we are interested in i.e. all but - // Uncompressed Size and the filters. - // - // NOTE: This function is used for validation too, so it is - // essential that these checks are always done even if - // Compressed Size is unknown. - if (block == NULL || block->version != 0 - || block->header_size < LZMA_BLOCK_HEADER_SIZE_MIN - || block->header_size > LZMA_BLOCK_HEADER_SIZE_MAX - || (block->header_size & 3) - || !lzma_vli_is_valid(block->compressed_size) - || block->compressed_size == 0 - || (unsigned int)(block->check) > LZMA_CHECK_ID_MAX) - return 0; - - // If Compressed Size is unknown, return that we cannot know - // size of the Block either. - if (block->compressed_size == LZMA_VLI_UNKNOWN) - return LZMA_VLI_UNKNOWN; - - // Calculate Unpadded Size and validate it. - const lzma_vli unpadded_size = block->compressed_size - + block->header_size - + lzma_check_size(block->check); - - assert(unpadded_size >= UNPADDED_SIZE_MIN); - if (unpadded_size > UNPADDED_SIZE_MAX) - return 0; - - return unpadded_size; -} - - -extern LZMA_API(lzma_vli) -lzma_block_total_size(const lzma_block *block) -{ - lzma_vli unpadded_size = lzma_block_unpadded_size(block); - - if (unpadded_size != LZMA_VLI_UNKNOWN) - unpadded_size = vli_ceil4(unpadded_size); - - return unpadded_size; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/bsr.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/bsr.h deleted file mode 100644 index bef8641fa73..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/bsr.h +++ /dev/null @@ -1,60 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file bsr.h -/// \brief Bit scan reverse -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_BSR_H -#define LZMA_BSR_H - -// NOTE: Both input and output variables for lzma_bsr must be uint32_t. - -#if defined(__GNUC__) && (defined (HAVE_ASM_X86) || defined(HAVE_ASM_X86_64)) -# define lzma_bsr(dest, n) \ - __asm__("bsrl %1, %0" : "=r" (dest) : "rm" (n)) - -#else -# define lzma_bsr(dest, n) dest = lzma_bsr_helper(n) - -static inline uint32_t -lzma_bsr_helper(uint32_t n) -{ - assert(n != 0); - - uint32_t i = 31; - - if ((n & UINT32_C(0xFFFF0000)) == 0) { - n <<= 16; - i = 15; - } - - if ((n & UINT32_C(0xFF000000)) == 0) { - n <<= 8; - i -= 8; - } - - if ((n & UINT32_C(0xF0000000)) == 0) { - n <<= 4; - i -= 4; - } - - if ((n & UINT32_C(0xC0000000)) == 0) { - n <<= 2; - i -= 2; - } - - if ((n & UINT32_C(0x80000000)) == 0) - --i; - - return i; -} - -#endif - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/common.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/common.c deleted file mode 100644 index 3bdf32522a3..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/common.c +++ /dev/null @@ -1,355 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file common.h -/// \brief Common functions needed in many places in liblzma -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - - -///////////// -// Version // -///////////// - -extern LZMA_API(uint32_t) -lzma_version_number(void) -{ - return LZMA_VERSION; -} - - -extern LZMA_API(const char *) -lzma_version_string(void) -{ - return LZMA_VERSION_STRING; -} - - -/////////////////////// -// Memory allocation // -/////////////////////// - -extern void * lzma_attribute((malloc)) -lzma_alloc(size_t size, lzma_allocator *allocator) -{ - // Some malloc() variants return NULL if called with size == 0. - if (size == 0) - size = 1; - - void *ptr; - - if (allocator != NULL && allocator->alloc != NULL) - ptr = allocator->alloc(allocator->opaque, 1, size); - else - ptr = malloc(size); - - return ptr; -} - - -extern void -lzma_free(void *ptr, lzma_allocator *allocator) -{ - if (allocator != NULL && allocator->free != NULL) - allocator->free(allocator->opaque, ptr); - else - free(ptr); - - return; -} - - -////////// -// Misc // -////////// - -extern size_t -lzma_bufcpy(const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size) -{ - const size_t in_avail = in_size - *in_pos; - const size_t out_avail = out_size - *out_pos; - const size_t copy_size = MIN(in_avail, out_avail); - - memcpy(out + *out_pos, in + *in_pos, copy_size); - - *in_pos += copy_size; - *out_pos += copy_size; - - return copy_size; -} - - -extern lzma_ret -lzma_next_filter_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - lzma_next_coder_init(filters[0].init, next, allocator); - - return filters[0].init == NULL - ? LZMA_OK : filters[0].init(next, allocator, filters); -} - - -extern void -lzma_next_end(lzma_next_coder *next, lzma_allocator *allocator) -{ - if (next->init != (uintptr_t)(NULL)) { - // To avoid tiny end functions that simply call - // lzma_free(coder, allocator), we allow leaving next->end - // NULL and call lzma_free() here. - if (next->end != NULL) - next->end(next->coder, allocator); - else - lzma_free(next->coder, allocator); - - // Reset the variables so the we don't accidentally think - // that it is an already initialized coder. - *next = LZMA_NEXT_CODER_INIT; - } - - return; -} - - -////////////////////////////////////// -// External to internal API wrapper // -////////////////////////////////////// - -extern lzma_ret -lzma_strm_init(lzma_stream *strm) -{ - if (strm == NULL) - return LZMA_PROG_ERROR; - - if (strm->internal == NULL) { - strm->internal = lzma_alloc(sizeof(lzma_internal), - strm->allocator); - if (strm->internal == NULL) - return LZMA_MEM_ERROR; - - strm->internal->next = LZMA_NEXT_CODER_INIT; - } - - strm->internal->supported_actions[LZMA_RUN] = false; - strm->internal->supported_actions[LZMA_SYNC_FLUSH] = false; - strm->internal->supported_actions[LZMA_FULL_FLUSH] = false; - strm->internal->supported_actions[LZMA_FINISH] = false; - strm->internal->sequence = ISEQ_RUN; - - strm->total_in = 0; - strm->total_out = 0; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_code(lzma_stream *strm, lzma_action action) -{ - // Sanity checks - if ((strm->next_in == NULL && strm->avail_in != 0) - || (strm->next_out == NULL && strm->avail_out != 0) - || strm->internal == NULL - || strm->internal->next.code == NULL - || (unsigned int)(action) > LZMA_FINISH - || !strm->internal->supported_actions[action]) - return LZMA_PROG_ERROR; - - switch (strm->internal->sequence) { - case ISEQ_RUN: - switch (action) { - case LZMA_RUN: - break; - - case LZMA_SYNC_FLUSH: - strm->internal->sequence = ISEQ_SYNC_FLUSH; - break; - - case LZMA_FULL_FLUSH: - strm->internal->sequence = ISEQ_FULL_FLUSH; - break; - - case LZMA_FINISH: - strm->internal->sequence = ISEQ_FINISH; - break; - } - - break; - - case ISEQ_SYNC_FLUSH: - // The same action must be used until we return - // LZMA_STREAM_END, and the amount of input must not change. - if (action != LZMA_SYNC_FLUSH - || strm->internal->avail_in != strm->avail_in) - return LZMA_PROG_ERROR; - - break; - - case ISEQ_FULL_FLUSH: - if (action != LZMA_FULL_FLUSH - || strm->internal->avail_in != strm->avail_in) - return LZMA_PROG_ERROR; - - break; - - case ISEQ_FINISH: - if (action != LZMA_FINISH - || strm->internal->avail_in != strm->avail_in) - return LZMA_PROG_ERROR; - - break; - - case ISEQ_END: - return LZMA_STREAM_END; - - case ISEQ_ERROR: - default: - return LZMA_PROG_ERROR; - } - - size_t in_pos = 0; - size_t out_pos = 0; - lzma_ret ret = strm->internal->next.code( - strm->internal->next.coder, strm->allocator, - strm->next_in, &in_pos, strm->avail_in, - strm->next_out, &out_pos, strm->avail_out, action); - - strm->next_in += in_pos; - strm->avail_in -= in_pos; - strm->total_in += in_pos; - - strm->next_out += out_pos; - strm->avail_out -= out_pos; - strm->total_out += out_pos; - - strm->internal->avail_in = strm->avail_in; - - switch (ret) { - case LZMA_OK: - // Don't return LZMA_BUF_ERROR when it happens the first time. - // This is to avoid returning LZMA_BUF_ERROR when avail_out - // was zero but still there was no more data left to written - // to next_out. - if (out_pos == 0 && in_pos == 0) { - if (strm->internal->allow_buf_error) - ret = LZMA_BUF_ERROR; - else - strm->internal->allow_buf_error = true; - } else { - strm->internal->allow_buf_error = false; - } - break; - - case LZMA_STREAM_END: - if (strm->internal->sequence == ISEQ_SYNC_FLUSH - || strm->internal->sequence == ISEQ_FULL_FLUSH) - strm->internal->sequence = ISEQ_RUN; - else - strm->internal->sequence = ISEQ_END; - - // Fall through - - case LZMA_NO_CHECK: - case LZMA_UNSUPPORTED_CHECK: - case LZMA_GET_CHECK: - case LZMA_MEMLIMIT_ERROR: - // Something else than LZMA_OK, but not a fatal error, - // that is, coding may be continued (except if ISEQ_END). - strm->internal->allow_buf_error = false; - break; - - default: - // All the other errors are fatal; coding cannot be continued. - assert(ret != LZMA_BUF_ERROR); - strm->internal->sequence = ISEQ_ERROR; - break; - } - - return ret; -} - - -extern LZMA_API(void) -lzma_end(lzma_stream *strm) -{ - if (strm != NULL && strm->internal != NULL) { - lzma_next_end(&strm->internal->next, strm->allocator); - lzma_free(strm->internal, strm->allocator); - strm->internal = NULL; - } - - return; -} - - -extern LZMA_API(lzma_check) -lzma_get_check(const lzma_stream *strm) -{ - // Return LZMA_CHECK_NONE if we cannot know the check type. - // It's a bug in the application if this happens. - if (strm->internal->next.get_check == NULL) - return LZMA_CHECK_NONE; - - return strm->internal->next.get_check(strm->internal->next.coder); -} - - -extern LZMA_API(uint64_t) -lzma_memusage(const lzma_stream *strm) -{ - uint64_t memusage; - uint64_t old_memlimit; - - if (strm == NULL || strm->internal == NULL - || strm->internal->next.memconfig == NULL - || strm->internal->next.memconfig( - strm->internal->next.coder, - &memusage, &old_memlimit, 0) != LZMA_OK) - return 0; - - return memusage; -} - - -extern LZMA_API(uint64_t) -lzma_memlimit_get(const lzma_stream *strm) -{ - uint64_t old_memlimit; - uint64_t memusage; - - if (strm == NULL || strm->internal == NULL - || strm->internal->next.memconfig == NULL - || strm->internal->next.memconfig( - strm->internal->next.coder, - &memusage, &old_memlimit, 0) != LZMA_OK) - return 0; - - return old_memlimit; -} - - -extern LZMA_API(lzma_ret) -lzma_memlimit_set(lzma_stream *strm, uint64_t new_memlimit) -{ - // Dummy variables to simplify memconfig functions - uint64_t old_memlimit; - uint64_t memusage; - - if (strm == NULL || strm->internal == NULL - || strm->internal->next.memconfig == NULL) - return LZMA_PROG_ERROR; - - if (new_memlimit != 0 && new_memlimit < LZMA_MEMUSAGE_BASE) - return LZMA_MEMLIMIT_ERROR; - - return strm->internal->next.memconfig(strm->internal->next.coder, - &memusage, &old_memlimit, new_memlimit); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/common.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/common.h deleted file mode 100644 index d794cb30e3b..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/common.h +++ /dev/null @@ -1,268 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file common.h -/// \brief Definitions common to the whole liblzma library -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_COMMON_H -#define LZMA_COMMON_H - -#include "sysdefs.h" -#include "mythread.h" -#include "integer.h" - -#if defined(_WIN32) || defined(__CYGWIN__) -# ifdef DLL_EXPORT -# define LZMA_API_EXPORT __declspec(dllexport) -# else -# define LZMA_API_EXPORT -# endif -// Don't use ifdef or defined() below. -#elif HAVE_VISIBILITY -# define LZMA_API_EXPORT __attribute__((__visibility__("default"))) -#else -# define LZMA_API_EXPORT -#endif - -#define LZMA_API(type) LZMA_API_EXPORT type LZMA_API_CALL - -#include "lzma.h" - -// These allow helping the compiler in some often-executed branches, whose -// result is almost always the same. -#ifdef __GNUC__ -# define likely(expr) __builtin_expect(expr, true) -# define unlikely(expr) __builtin_expect(expr, false) -#else -# define likely(expr) (expr) -# define unlikely(expr) (expr) -#endif - - -/// Size of temporary buffers needed in some filters -#define LZMA_BUFFER_SIZE 4096 - - -/// Starting value for memory usage estimates. Instead of calculating size -/// of _every_ structure and taking into accont malloc() overhead etc. we -/// add a base size to all memory usage estimates. It's not very accurate -/// but should be easily good enough. -#define LZMA_MEMUSAGE_BASE (UINT64_C(1) << 15) - -/// Start of internal Filter ID space. These IDs must never be used -/// in Streams. -#define LZMA_FILTER_RESERVED_START (LZMA_VLI_C(1) << 62) - - -/// Internal helper filter used by Subblock decoder. It is mapped to an -/// otherwise invalid Filter ID, which is impossible to get from any input -/// file (even if malicious file). -#define LZMA_FILTER_SUBBLOCK_HELPER LZMA_VLI_C(0x7000000000000001) - - -/// Supported flags that can be passed to lzma_stream_decoder() -/// or lzma_auto_decoder(). -#define LZMA_SUPPORTED_FLAGS \ - ( LZMA_TELL_NO_CHECK \ - | LZMA_TELL_UNSUPPORTED_CHECK \ - | LZMA_TELL_ANY_CHECK \ - | LZMA_CONCATENATED ) - - -/// Type of encoder/decoder specific data; the actual structure is defined -/// differently in different coders. -typedef struct lzma_coder_s lzma_coder; - -typedef struct lzma_next_coder_s lzma_next_coder; - -typedef struct lzma_filter_info_s lzma_filter_info; - - -/// Type of a function used to initialize a filter encoder or decoder -typedef lzma_ret (*lzma_init_function)( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters); - -/// Type of a function to do some kind of coding work (filters, Stream, -/// Block encoders/decoders etc.). Some special coders use don't use both -/// input and output buffers, but for simplicity they still use this same -/// function prototype. -typedef lzma_ret (*lzma_code_function)( - lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, - lzma_action action); - -/// Type of a function to free the memory allocated for the coder -typedef void (*lzma_end_function)( - lzma_coder *coder, lzma_allocator *allocator); - - -/// Raw coder validates and converts an array of lzma_filter structures to -/// an array of lzma_filter_info structures. This array is used with -/// lzma_next_filter_init to initialize the filter chain. -struct lzma_filter_info_s { - /// Pointer to function used to initialize the filter. - /// This is NULL to indicate end of array. - lzma_init_function init; - - /// Pointer to filter's options structure - void *options; -}; - - -/// Hold data and function pointers of the next filter in the chain. -struct lzma_next_coder_s { - /// Pointer to coder-specific data - lzma_coder *coder; - - /// "Pointer" to init function. This is never called here. - /// We need only to detect if we are initializing a coder - /// that was allocated earlier. See lzma_next_coder_init and - /// lzma_next_strm_init macros in this file. - uintptr_t init; - - /// Pointer to function to do the actual coding - lzma_code_function code; - - /// Pointer to function to free lzma_next_coder.coder. This can - /// be NULL; in that case, lzma_free is called to free - /// lzma_next_coder.coder. - lzma_end_function end; - - /// Pointer to function to return the type of the integrity check. - /// Most coders won't support this. - lzma_check (*get_check)(const lzma_coder *coder); - - /// Pointer to function to get and/or change the memory usage limit. - /// If new_memlimit == 0, the limit is not changed. - lzma_ret (*memconfig)(lzma_coder *coder, uint64_t *memusage, - uint64_t *old_memlimit, uint64_t new_memlimit); -}; - - -/// Macro to initialize lzma_next_coder structure -#define LZMA_NEXT_CODER_INIT \ - (lzma_next_coder){ \ - .coder = NULL, \ - .init = (uintptr_t)(NULL), \ - .code = NULL, \ - .end = NULL, \ - .get_check = NULL, \ - .memconfig = NULL, \ - } - - -/// Internal data for lzma_strm_init, lzma_code, and lzma_end. A pointer to -/// this is stored in lzma_stream. -struct lzma_internal_s { - /// The actual coder that should do something useful - lzma_next_coder next; - - /// Track the state of the coder. This is used to validate arguments - /// so that the actual coders can rely on e.g. that LZMA_SYNC_FLUSH - /// is used on every call to lzma_code until next.code has returned - /// LZMA_STREAM_END. - enum { - ISEQ_RUN, - ISEQ_SYNC_FLUSH, - ISEQ_FULL_FLUSH, - ISEQ_FINISH, - ISEQ_END, - ISEQ_ERROR, - } sequence; - - /// A copy of lzma_stream avail_in. This is used to verify that the - /// amount of input doesn't change once e.g. LZMA_FINISH has been - /// used. - size_t avail_in; - - /// Indicates which lzma_action values are allowed by next.code. - bool supported_actions[4]; - - /// If true, lzma_code will return LZMA_BUF_ERROR if no progress was - /// made (no input consumed and no output produced by next.code). - bool allow_buf_error; -}; - - -/// Allocates memory -extern void *lzma_alloc(size_t size, lzma_allocator *allocator) - lzma_attribute((malloc)); - -/// Frees memory -extern void lzma_free(void *ptr, lzma_allocator *allocator); - - -/// Allocates strm->internal if it is NULL, and initializes *strm and -/// strm->internal. This function is only called via lzma_next_strm_init macro. -extern lzma_ret lzma_strm_init(lzma_stream *strm); - -/// Initializes the next filter in the chain, if any. This takes care of -/// freeing the memory of previously initialized filter if it is different -/// than the filter being initialized now. This way the actual filter -/// initialization functions don't need to use lzma_next_coder_init macro. -extern lzma_ret lzma_next_filter_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -/// Frees the memory allocated for next->coder either using next->end or, -/// if next->end is NULL, using lzma_free. -extern void lzma_next_end(lzma_next_coder *next, lzma_allocator *allocator); - - -/// Copy as much data as possible from in[] to out[] and update *in_pos -/// and *out_pos accordingly. Returns the number of bytes copied. -extern size_t lzma_bufcpy(const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size); - - -/// \brief Return if expression doesn't evaluate to LZMA_OK -/// -/// There are several situations where we want to return immediatelly -/// with the value of expr if it isn't LZMA_OK. This macro shortens -/// the code a little. -#define return_if_error(expr) \ -do { \ - const lzma_ret ret_ = (expr); \ - if (ret_ != LZMA_OK) \ - return ret_; \ -} while (0) - - -/// If next isn't already initialized, free the previous coder. Then mark -/// that next is _possibly_ initialized for the coder using this macro. -/// "Possibly" means that if e.g. allocation of next->coder fails, the -/// structure isn't actually initialized for this coder, but leaving -/// next->init to func is still OK. -#define lzma_next_coder_init(func, next, allocator) \ -do { \ - if ((uintptr_t)(func) != (next)->init) \ - lzma_next_end(next, allocator); \ - (next)->init = (uintptr_t)(func); \ -} while (0) - - -/// Initializes lzma_strm and calls func() to initialize strm->internal->next. -/// (The function being called will use lzma_next_coder_init()). If -/// initialization fails, memory that wasn't freed by func() is freed -/// along strm->internal. -#define lzma_next_strm_init(func, strm, ...) \ -do { \ - return_if_error(lzma_strm_init(strm)); \ - const lzma_ret ret_ = func(&(strm)->internal->next, \ - (strm)->allocator, __VA_ARGS__); \ - if (ret_ != LZMA_OK) { \ - lzma_end(strm); \ - return ret_; \ - } \ -} while (0) - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_buffer_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_buffer_encoder.c deleted file mode 100644 index c4be34ccfa2..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_buffer_encoder.c +++ /dev/null @@ -1,27 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file easy_buffer_encoder.c -/// \brief Easy single-call .xz Stream encoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "easy_preset.h" - - -extern LZMA_API(lzma_ret) -lzma_easy_buffer_encode(uint32_t preset, lzma_check check, - lzma_allocator *allocator, const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - lzma_options_easy opt_easy; - if (lzma_easy_preset(&opt_easy, preset)) - return LZMA_OPTIONS_ERROR; - - return lzma_stream_buffer_encode(opt_easy.filters, check, - allocator, in, in_size, out, out_pos, out_size); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_decoder_memusage.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_decoder_memusage.c deleted file mode 100644 index 20bcd5b7175..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_decoder_memusage.c +++ /dev/null @@ -1,24 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file easy_decoder_memusage.c -/// \brief Decoder memory usage calculation to match easy encoder presets -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "easy_preset.h" - - -extern LZMA_API(uint64_t) -lzma_easy_decoder_memusage(uint32_t preset) -{ - lzma_options_easy opt_easy; - if (lzma_easy_preset(&opt_easy, preset)) - return UINT32_MAX; - - return lzma_raw_decoder_memusage(opt_easy.filters); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_encoder.c deleted file mode 100644 index 5e2641c99f2..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_encoder.c +++ /dev/null @@ -1,80 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file easy_encoder.c -/// \brief Easy .xz Stream encoder initialization -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "easy_preset.h" -#include "stream_encoder.h" - - -struct lzma_coder_s { - lzma_next_coder stream_encoder; - lzma_options_easy opt_easy; -}; - - -static lzma_ret -easy_encode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - return coder->stream_encoder.code( - coder->stream_encoder.coder, allocator, - in, in_pos, in_size, out, out_pos, out_size, action); -} - - -static void -easy_encoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->stream_encoder, allocator); - lzma_free(coder, allocator); - return; -} - - -static lzma_ret -easy_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - uint32_t preset, lzma_check check) -{ - lzma_next_coder_init(&easy_encoder_init, next, allocator); - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &easy_encode; - next->end = &easy_encoder_end; - - next->coder->stream_encoder = LZMA_NEXT_CODER_INIT; - } - - if (lzma_easy_preset(&next->coder->opt_easy, preset)) - return LZMA_OPTIONS_ERROR; - - return lzma_stream_encoder_init(&next->coder->stream_encoder, - allocator, next->coder->opt_easy.filters, check); -} - - -extern LZMA_API(lzma_ret) -lzma_easy_encoder(lzma_stream *strm, uint32_t preset, lzma_check check) -{ - lzma_next_strm_init(easy_encoder_init, strm, preset, check); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_SYNC_FLUSH] = true; - strm->internal->supported_actions[LZMA_FULL_FLUSH] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_encoder_memusage.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_encoder_memusage.c deleted file mode 100644 index e9105758423..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_encoder_memusage.c +++ /dev/null @@ -1,24 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file easy_encoder_memusage.c -/// \brief Easy .xz Stream encoder memory usage calculation -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "easy_preset.h" - - -extern LZMA_API(uint64_t) -lzma_easy_encoder_memusage(uint32_t preset) -{ - lzma_options_easy opt_easy; - if (lzma_easy_preset(&opt_easy, preset)) - return UINT32_MAX; - - return lzma_raw_encoder_memusage(opt_easy.filters); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_preset.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_preset.c deleted file mode 100644 index 2f9859860ad..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_preset.c +++ /dev/null @@ -1,27 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file easy_preset.c -/// \brief Preset handling for easy encoder and decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "easy_preset.h" - - -extern bool -lzma_easy_preset(lzma_options_easy *opt_easy, uint32_t preset) -{ - if (lzma_lzma_preset(&opt_easy->opt_lzma, preset)) - return true; - - opt_easy->filters[0].id = LZMA_FILTER_LZMA2; - opt_easy->filters[0].options = &opt_easy->opt_lzma; - opt_easy->filters[1].id = LZMA_VLI_UNKNOWN; - - return false; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_preset.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_preset.h deleted file mode 100644 index 382ade89406..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/easy_preset.h +++ /dev/null @@ -1,32 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file easy_preset.h -/// \brief Preset handling for easy encoder and decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - - -typedef struct { - /// We need to keep the filters array available in case - /// LZMA_FULL_FLUSH is used. - lzma_filter filters[LZMA_FILTERS_MAX + 1]; - - /// Options for LZMA2 - lzma_options_lzma opt_lzma; - - // Options for more filters can be added later, so this struct - // is not ready to be put into the public API. - -} lzma_options_easy; - - -/// Set *easy to the settings given by the preset. Returns true on error, -/// false on success. -extern bool lzma_easy_preset(lzma_options_easy *easy, uint32_t preset); diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_buffer_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_buffer_decoder.c deleted file mode 100644 index 4fe5d78e173..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_buffer_decoder.c +++ /dev/null @@ -1,87 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_buffer_decoder.c -/// \brief Single-call raw decoding -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "filter_decoder.h" - - -extern LZMA_API(lzma_ret) -lzma_raw_buffer_decode(const lzma_filter *filters, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - // Validate what isn't validated later in filter_common.c. - if (in == NULL || in_pos == NULL || *in_pos > in_size || out == NULL - || out_pos == NULL || *out_pos > out_size) - return LZMA_PROG_ERROR; - - // Initialize the decoer. - lzma_next_coder next = LZMA_NEXT_CODER_INIT; - return_if_error(lzma_raw_decoder_init(&next, allocator, filters)); - - // Store the positions so that we can restore them if something - // goes wrong. - const size_t in_start = *in_pos; - const size_t out_start = *out_pos; - - // Do the actual decoding and free decoder's memory. - lzma_ret ret = next.code(next.coder, allocator, in, in_pos, in_size, - out, out_pos, out_size, LZMA_FINISH); - - if (ret == LZMA_STREAM_END) { - ret = LZMA_OK; - } else { - if (ret == LZMA_OK) { - // Either the input was truncated or the - // output buffer was too small. - assert(*in_pos == in_size || *out_pos == out_size); - - if (*in_pos != in_size) { - // Since input wasn't consumed completely, - // the output buffer became full and is - // too small. - ret = LZMA_BUF_ERROR; - - } else if (*out_pos != out_size) { - // Since output didn't became full, the input - // has to be truncated. - ret = LZMA_DATA_ERROR; - - } else { - // All the input was consumed and output - // buffer is full. Now we don't immediatelly - // know the reason for the error. Try - // decoding one more byte. If it succeeds, - // then the output buffer was too small. If - // we cannot get a new output byte, the input - // is truncated. - uint8_t tmp[1]; - size_t tmp_pos = 0; - (void)next.code(next.coder, allocator, - in, in_pos, in_size, - tmp, &tmp_pos, 1, LZMA_FINISH); - - if (tmp_pos == 1) - ret = LZMA_BUF_ERROR; - else - ret = LZMA_DATA_ERROR; - } - } - - // Restore the positions. - *in_pos = in_start; - *out_pos = out_start; - } - - lzma_next_end(&next, allocator); - - return ret; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_buffer_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_buffer_encoder.c deleted file mode 100644 index 646e1b30374..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_buffer_encoder.c +++ /dev/null @@ -1,54 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_buffer_encoder.c -/// \brief Single-call raw encoding -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "filter_encoder.h" - - -extern LZMA_API(lzma_ret) -lzma_raw_buffer_encode(const lzma_filter *filters, lzma_allocator *allocator, - const uint8_t *in, size_t in_size, uint8_t *out, - size_t *out_pos, size_t out_size) -{ - // Validate what isn't validated later in filter_common.c. - if ((in == NULL && in_size != 0) || out == NULL - || out_pos == NULL || *out_pos > out_size) - return LZMA_PROG_ERROR; - - // Initialize the encoder - lzma_next_coder next = LZMA_NEXT_CODER_INIT; - return_if_error(lzma_raw_encoder_init(&next, allocator, filters)); - - // Store the output position so that we can restore it if - // something goes wrong. - const size_t out_start = *out_pos; - - // Do the actual encoding and free coder's memory. - size_t in_pos = 0; - lzma_ret ret = next.code(next.coder, allocator, in, &in_pos, in_size, - out, out_pos, out_size, LZMA_FINISH); - lzma_next_end(&next, allocator); - - if (ret == LZMA_STREAM_END) { - ret = LZMA_OK; - } else { - if (ret == LZMA_OK) { - // Output buffer was too small. - assert(*out_pos == out_size); - ret = LZMA_BUF_ERROR; - } - - // Restore the output position. - *out_pos = out_start; - } - - return ret; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_common.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_common.c deleted file mode 100644 index ca1196aa3e5..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_common.c +++ /dev/null @@ -1,261 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_common.c -/// \brief Filter-specific stuff common for both encoder and decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "filter_common.h" - - -static const struct { - /// Filter ID - lzma_vli id; - - /// True if it is OK to use this filter as non-last filter in - /// the chain. - bool non_last_ok; - - /// True if it is OK to use this filter as the last filter in - /// the chain. - bool last_ok; - - /// True if the filter may change the size of the data (that is, the - /// amount of encoded output can be different than the amount of - /// uncompressed input). - bool changes_size; - -} features[] = { -#if defined (HAVE_ENCODER_LZMA1) || defined(HAVE_DECODER_LZMA1) - { - .id = LZMA_FILTER_LZMA1, - .non_last_ok = false, - .last_ok = true, - .changes_size = true, - }, -#endif -#ifdef HAVE_DECODER_LZMA2 - { - .id = LZMA_FILTER_LZMA2, - .non_last_ok = false, - .last_ok = true, - .changes_size = true, - }, -#endif -#if defined(HAVE_ENCODER_SUBBLOCK) || defined(HAVE_DECODER_SUBBLOCK) - { - .id = LZMA_FILTER_SUBBLOCK, - .non_last_ok = true, - .last_ok = true, - .changes_size = true, - }, -#endif -#ifdef HAVE_DECODER_X86 - { - .id = LZMA_FILTER_X86, - .non_last_ok = true, - .last_ok = false, - .changes_size = false, - }, -#endif -#if defined(HAVE_ENCODER_POWERPC) || defined(HAVE_DECODER_POWERPC) - { - .id = LZMA_FILTER_POWERPC, - .non_last_ok = true, - .last_ok = false, - .changes_size = false, - }, -#endif -#ifdef HAVE_DECODER_IA64 - { - .id = LZMA_FILTER_IA64, - .non_last_ok = true, - .last_ok = false, - .changes_size = false, - }, -#endif -#if defined(HAVE_ENCODER_ARM) || defined(HAVE_DECODER_ARM) - { - .id = LZMA_FILTER_ARM, - .non_last_ok = true, - .last_ok = false, - .changes_size = false, - }, -#endif -#if defined(HAVE_ENCODER_ARMTHUMB) || defined(HAVE_DECODER_ARMTHUMB) - { - .id = LZMA_FILTER_ARMTHUMB, - .non_last_ok = true, - .last_ok = false, - .changes_size = false, - }, -#endif -#if defined(HAVE_ENCODER_SPARC) || defined(HAVE_DECODER_SPARC) - { - .id = LZMA_FILTER_SPARC, - .non_last_ok = true, - .last_ok = false, - .changes_size = false, - }, -#endif -#if defined(HAVE_ENCODER_DELTA) || defined(HAVE_DECODER_DELTA) - { - .id = LZMA_FILTER_DELTA, - .non_last_ok = true, - .last_ok = false, - .changes_size = false, - }, -#endif - { - .id = LZMA_VLI_UNKNOWN - } -}; - - -static lzma_ret -validate_chain(const lzma_filter *filters, size_t *count) -{ - // There must be at least one filter. - if (filters == NULL || filters[0].id == LZMA_VLI_UNKNOWN) - return LZMA_PROG_ERROR; - - // Number of non-last filters that may change the size of the data - // significantly (that is, more than 1-2 % or so). - size_t changes_size_count = 0; - - // True if it is OK to add a new filter after the current filter. - bool non_last_ok = true; - - // True if the last filter in the given chain is actually usable as - // the last filter. Only filters that support embedding End of Payload - // Marker can be used as the last filter in the chain. - bool last_ok = false; - - size_t i = 0; - do { - size_t j; - for (j = 0; filters[i].id != features[j].id; ++j) - if (features[j].id == LZMA_VLI_UNKNOWN) - return LZMA_OPTIONS_ERROR; - - // If the previous filter in the chain cannot be a non-last - // filter, the chain is invalid. - if (!non_last_ok) - return LZMA_OPTIONS_ERROR; - - non_last_ok = features[j].non_last_ok; - last_ok = features[j].last_ok; - changes_size_count += features[j].changes_size; - - } while (filters[++i].id != LZMA_VLI_UNKNOWN); - - // There must be 1-4 filters. The last filter must be usable as - // the last filter in the chain. At maximum of three filters are - // allowed to change the size of the data. - if (i > LZMA_FILTERS_MAX || !last_ok || changes_size_count > 3) - return LZMA_OPTIONS_ERROR; - - *count = i; - return LZMA_OK; -} - - -extern lzma_ret -lzma_raw_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *options, - lzma_filter_find coder_find, bool is_encoder) -{ - // Do some basic validation and get the number of filters. - size_t count; - return_if_error(validate_chain(options, &count)); - - // Set the filter functions and copy the options pointer. - lzma_filter_info filters[LZMA_FILTERS_MAX + 1]; - if (is_encoder) { - for (size_t i = 0; i < count; ++i) { - // The order of the filters is reversed in the - // encoder. It allows more efficient handling - // of the uncompressed data. - const size_t j = count - i - 1; - - const lzma_filter_coder *const fc - = coder_find(options[i].id); - if (fc == NULL || fc->init == NULL) - return LZMA_OPTIONS_ERROR; - - filters[j].init = fc->init; - filters[j].options = options[i].options; - } - } else { - for (size_t i = 0; i < count; ++i) { - const lzma_filter_coder *const fc - = coder_find(options[i].id); - if (fc == NULL || fc->init == NULL) - return LZMA_OPTIONS_ERROR; - - filters[i].init = fc->init; - filters[i].options = options[i].options; - } - } - - // Terminate the array. - filters[count].init = NULL; - - // Initialize the filters. - const lzma_ret ret = lzma_next_filter_init(next, allocator, filters); - if (ret != LZMA_OK) - lzma_next_end(next, allocator); - - return ret; -} - - -extern uint64_t -lzma_raw_coder_memusage(lzma_filter_find coder_find, - const lzma_filter *filters) -{ - // The chain has to have at least one filter. - { - size_t tmp; - if (validate_chain(filters, &tmp) != LZMA_OK) - return UINT64_MAX; - } - - uint64_t total = 0; - size_t i = 0; - - do { - const lzma_filter_coder *const fc - = coder_find(filters[i].id); - if (fc == NULL) - return UINT64_MAX; // Unsupported Filter ID - - if (fc->memusage == NULL) { - // This filter doesn't have a function to calculate - // the memory usage and validate the options. Such - // filters need only little memory, so we use 1 KiB - // as a good estimate. They also accept all possible - // options, so there's no need to worry about lack - // of validation. - total += 1024; - } else { - // Call the filter-specific memory usage calculation - // function. - const uint64_t usage - = fc->memusage(filters[i].options); - if (usage == UINT64_MAX) - return UINT64_MAX; // Invalid options - - total += usage; - } - } while (filters[++i].id != LZMA_VLI_UNKNOWN); - - // Add some fixed amount of extra. It's to compensate memory usage - // of Stream, Block etc. coders, malloc() overhead, stack etc. - return total + LZMA_MEMUSAGE_BASE; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_common.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_common.h deleted file mode 100644 index cd61fc0724f..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_common.h +++ /dev/null @@ -1,48 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_common.c -/// \brief Filter-specific stuff common for both encoder and decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_FILTER_COMMON_H -#define LZMA_FILTER_COMMON_H - -#include "common.h" - - -/// Both lzma_filter_encoder and lzma_filter_decoder begin with these members. -typedef struct { - /// Filter ID - lzma_vli id; - - /// Initializes the filter encoder and calls lzma_next_filter_init() - /// for filters + 1. - lzma_init_function init; - - /// Calculates memory usage of the encoder. If the options are - /// invalid, UINT64_MAX is returned. - uint64_t (*memusage)(const void *options); - -} lzma_filter_coder; - - -typedef const lzma_filter_coder *(*lzma_filter_find)(lzma_vli id); - - -extern lzma_ret lzma_raw_coder_init( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *filters, - lzma_filter_find coder_find, bool is_encoder); - - -extern uint64_t lzma_raw_coder_memusage(lzma_filter_find coder_find, - const lzma_filter *filters); - - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_decoder.c deleted file mode 100644 index 95f77b76cf7..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_decoder.c +++ /dev/null @@ -1,199 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_decoder.c -/// \brief Filter ID mapping to filter-specific functions -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "filter_decoder.h" -#include "filter_common.h" -#include "lzma_decoder.h" -#include "lzma2_decoder.h" -#include "subblock_decoder.h" -#include "subblock_decoder_helper.h" -#include "simple_decoder.h" -#include "delta_decoder.h" - - -typedef struct { - /// Filter ID - lzma_vli id; - - /// Initializes the filter encoder and calls lzma_next_filter_init() - /// for filters + 1. - lzma_init_function init; - - /// Calculates memory usage of the encoder. If the options are - /// invalid, UINT64_MAX is returned. - uint64_t (*memusage)(const void *options); - - /// Decodes Filter Properties. - /// - /// \return - LZMA_OK: Properties decoded successfully. - /// - LZMA_OPTIONS_ERROR: Unsupported properties - /// - LZMA_MEM_ERROR: Memory allocation failed. - lzma_ret (*props_decode)(void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size); - -} lzma_filter_decoder; - - -static const lzma_filter_decoder decoders[] = { -#ifdef HAVE_DECODER_LZMA1 - { - .id = LZMA_FILTER_LZMA1, - .init = &lzma_lzma_decoder_init, - .memusage = &lzma_lzma_decoder_memusage, - .props_decode = &lzma_lzma_props_decode, - }, -#endif -#ifdef HAVE_DECODER_LZMA2 - { - .id = LZMA_FILTER_LZMA2, - .init = &lzma_lzma2_decoder_init, - .memusage = &lzma_lzma2_decoder_memusage, - .props_decode = &lzma_lzma2_props_decode, - }, -#endif -#ifdef HAVE_DECODER_SUBBLOCK - { - .id = LZMA_FILTER_SUBBLOCK, - .init = &lzma_subblock_decoder_init, -// .memusage = &lzma_subblock_decoder_memusage, - .props_decode = NULL, - }, - { - .id = LZMA_FILTER_SUBBLOCK_HELPER, - .init = &lzma_subblock_decoder_helper_init, - .memusage = NULL, - .props_decode = NULL, - }, -#endif -#ifdef HAVE_DECODER_X86 - { - .id = LZMA_FILTER_X86, - .init = &lzma_simple_x86_decoder_init, - .memusage = NULL, - .props_decode = &lzma_simple_props_decode, - }, -#endif -#ifdef HAVE_DECODER_POWERPC - { - .id = LZMA_FILTER_POWERPC, - .init = &lzma_simple_powerpc_decoder_init, - .memusage = NULL, - .props_decode = &lzma_simple_props_decode, - }, -#endif -#ifdef HAVE_DECODER_IA64 - { - .id = LZMA_FILTER_IA64, - .init = &lzma_simple_ia64_decoder_init, - .memusage = NULL, - .props_decode = &lzma_simple_props_decode, - }, -#endif -#ifdef HAVE_DECODER_ARM - { - .id = LZMA_FILTER_ARM, - .init = &lzma_simple_arm_decoder_init, - .memusage = NULL, - .props_decode = &lzma_simple_props_decode, - }, -#endif -#ifdef HAVE_DECODER_ARMTHUMB - { - .id = LZMA_FILTER_ARMTHUMB, - .init = &lzma_simple_armthumb_decoder_init, - .memusage = NULL, - .props_decode = &lzma_simple_props_decode, - }, -#endif -#ifdef HAVE_DECODER_SPARC - { - .id = LZMA_FILTER_SPARC, - .init = &lzma_simple_sparc_decoder_init, - .memusage = NULL, - .props_decode = &lzma_simple_props_decode, - }, -#endif -#ifdef HAVE_DECODER_DELTA - { - .id = LZMA_FILTER_DELTA, - .init = &lzma_delta_decoder_init, - .memusage = &lzma_delta_coder_memusage, - .props_decode = &lzma_delta_props_decode, - }, -#endif -}; - - -static const lzma_filter_decoder * -decoder_find(lzma_vli id) -{ - for (size_t i = 0; i < ARRAY_SIZE(decoders); ++i) - if (decoders[i].id == id) - return decoders + i; - - return NULL; -} - - -extern LZMA_API(lzma_bool) -lzma_filter_decoder_is_supported(lzma_vli id) -{ - return decoder_find(id) != NULL; -} - - -extern lzma_ret -lzma_raw_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *options) -{ - return lzma_raw_coder_init(next, allocator, - options, (lzma_filter_find)(&decoder_find), false); -} - - -extern LZMA_API(lzma_ret) -lzma_raw_decoder(lzma_stream *strm, const lzma_filter *options) -{ - lzma_next_strm_init(lzma_raw_decoder_init, strm, options); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} - - -extern LZMA_API(uint64_t) -lzma_raw_decoder_memusage(const lzma_filter *filters) -{ - return lzma_raw_coder_memusage( - (lzma_filter_find)(&decoder_find), filters); -} - - -extern LZMA_API(lzma_ret) -lzma_properties_decode(lzma_filter *filter, lzma_allocator *allocator, - const uint8_t *props, size_t props_size) -{ - // Make it always NULL so that the caller can always safely free() it. - filter->options = NULL; - - const lzma_filter_decoder *const fd = decoder_find(filter->id); - if (fd == NULL) - return LZMA_OPTIONS_ERROR; - - if (fd->props_decode == NULL) - return props_size == 0 ? LZMA_OK : LZMA_OPTIONS_ERROR; - - return fd->props_decode( - &filter->options, allocator, props, props_size); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_decoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_decoder.h deleted file mode 100644 index d5c68bdd4a6..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_decoder.h +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_decoder.c -/// \brief Filter ID mapping to filter-specific functions -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_FILTER_DECODER_H -#define LZMA_FILTER_DECODER_H - -#include "common.h" - - -extern lzma_ret lzma_raw_decoder_init( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *options); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_encoder.c deleted file mode 100644 index d6fb82e511b..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_encoder.c +++ /dev/null @@ -1,271 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_decoder.c -/// \brief Filter ID mapping to filter-specific functions -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "filter_encoder.h" -#include "filter_common.h" -#include "lzma_encoder.h" -#include "lzma2_encoder.h" -#include "subblock_encoder.h" -#include "simple_encoder.h" -#include "delta_encoder.h" - - -typedef struct { - /// Filter ID - lzma_vli id; - - /// Initializes the filter encoder and calls lzma_next_filter_init() - /// for filters + 1. - lzma_init_function init; - - /// Calculates memory usage of the encoder. If the options are - /// invalid, UINT64_MAX is returned. - uint64_t (*memusage)(const void *options); - - /// Calculates the minimum sane size for Blocks (or other types of - /// chunks) to which the input data can be splitted to make - /// multithreaded encoding possible. If this is NULL, it is assumed - /// that the encoder is fast enough with single thread. - lzma_vli (*chunk_size)(const void *options); - - /// Tells the size of the Filter Properties field. If options are - /// invalid, UINT32_MAX is returned. If this is NULL, props_size_fixed - /// is used. - lzma_ret (*props_size_get)(uint32_t *size, const void *options); - uint32_t props_size_fixed; - - /// Encodes Filter Properties. - /// - /// \return - LZMA_OK: Properties encoded sucessfully. - /// - LZMA_OPTIONS_ERROR: Unsupported options - /// - LZMA_PROG_ERROR: Invalid options or not enough - /// output space - lzma_ret (*props_encode)(const void *options, uint8_t *out); - -} lzma_filter_encoder; - - -static const lzma_filter_encoder encoders[] = { -#ifdef HAVE_ENCODER_LZMA1 - { - .id = LZMA_FILTER_LZMA1, - .init = &lzma_lzma_encoder_init, - .memusage = &lzma_lzma_encoder_memusage, - .chunk_size = NULL, // FIXME - .props_size_get = NULL, - .props_size_fixed = 5, - .props_encode = &lzma_lzma_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_LZMA2 - { - .id = LZMA_FILTER_LZMA2, - .init = &lzma_lzma2_encoder_init, - .memusage = &lzma_lzma2_encoder_memusage, - .chunk_size = NULL, // FIXME - .props_size_get = NULL, - .props_size_fixed = 1, - .props_encode = &lzma_lzma2_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_SUBBLOCK - { - .id = LZMA_FILTER_SUBBLOCK, - .init = &lzma_subblock_encoder_init, -// .memusage = &lzma_subblock_encoder_memusage, - .chunk_size = NULL, - .props_size_get = NULL, - .props_size_fixed = 0, - .props_encode = NULL, - }, -#endif -#ifdef HAVE_ENCODER_X86 - { - .id = LZMA_FILTER_X86, - .init = &lzma_simple_x86_encoder_init, - .memusage = NULL, - .chunk_size = NULL, - .props_size_get = &lzma_simple_props_size, - .props_encode = &lzma_simple_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_POWERPC - { - .id = LZMA_FILTER_POWERPC, - .init = &lzma_simple_powerpc_encoder_init, - .memusage = NULL, - .chunk_size = NULL, - .props_size_get = &lzma_simple_props_size, - .props_encode = &lzma_simple_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_IA64 - { - .id = LZMA_FILTER_IA64, - .init = &lzma_simple_ia64_encoder_init, - .memusage = NULL, - .chunk_size = NULL, - .props_size_get = &lzma_simple_props_size, - .props_encode = &lzma_simple_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_ARM - { - .id = LZMA_FILTER_ARM, - .init = &lzma_simple_arm_encoder_init, - .memusage = NULL, - .chunk_size = NULL, - .props_size_get = &lzma_simple_props_size, - .props_encode = &lzma_simple_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_ARMTHUMB - { - .id = LZMA_FILTER_ARMTHUMB, - .init = &lzma_simple_armthumb_encoder_init, - .memusage = NULL, - .chunk_size = NULL, - .props_size_get = &lzma_simple_props_size, - .props_encode = &lzma_simple_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_SPARC - { - .id = LZMA_FILTER_SPARC, - .init = &lzma_simple_sparc_encoder_init, - .memusage = NULL, - .chunk_size = NULL, - .props_size_get = &lzma_simple_props_size, - .props_encode = &lzma_simple_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_DELTA - { - .id = LZMA_FILTER_DELTA, - .init = &lzma_delta_encoder_init, - .memusage = &lzma_delta_coder_memusage, - .chunk_size = NULL, - .props_size_get = NULL, - .props_size_fixed = 1, - .props_encode = &lzma_delta_props_encode, - }, -#endif -}; - - -static const lzma_filter_encoder * -encoder_find(lzma_vli id) -{ - for (size_t i = 0; i < ARRAY_SIZE(encoders); ++i) - if (encoders[i].id == id) - return encoders + i; - - return NULL; -} - - -extern LZMA_API(lzma_bool) -lzma_filter_encoder_is_supported(lzma_vli id) -{ - return encoder_find(id) != NULL; -} - - -extern lzma_ret -lzma_raw_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *options) -{ - return lzma_raw_coder_init(next, allocator, - options, (lzma_filter_find)(&encoder_find), true); -} - - -extern LZMA_API(lzma_ret) -lzma_raw_encoder(lzma_stream *strm, const lzma_filter *options) -{ - lzma_next_strm_init(lzma_raw_coder_init, strm, options, - (lzma_filter_find)(&encoder_find), true); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_SYNC_FLUSH] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} - - -extern LZMA_API(uint64_t) -lzma_raw_encoder_memusage(const lzma_filter *filters) -{ - return lzma_raw_coder_memusage( - (lzma_filter_find)(&encoder_find), filters); -} - - -extern LZMA_API(lzma_vli) -lzma_chunk_size(const lzma_filter *filters) -{ - lzma_vli max = 0; - - for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) { - const lzma_filter_encoder *const fe - = encoder_find(filters[i].id); - if (fe->chunk_size != NULL) { - const lzma_vli size - = fe->chunk_size(filters[i].options); - if (size == LZMA_VLI_UNKNOWN) - return LZMA_VLI_UNKNOWN; - - if (size > max) - max = size; - } - } - - return max; -} - - -extern LZMA_API(lzma_ret) -lzma_properties_size(uint32_t *size, const lzma_filter *filter) -{ - const lzma_filter_encoder *const fe = encoder_find(filter->id); - if (fe == NULL) { - // Unknown filter - if the Filter ID is a proper VLI, - // return LZMA_OPTIONS_ERROR instead of LZMA_PROG_ERROR, - // because it's possible that we just don't have support - // compiled in for the requested filter. - return filter->id <= LZMA_VLI_MAX - ? LZMA_OPTIONS_ERROR : LZMA_PROG_ERROR; - } - - if (fe->props_size_get == NULL) { - // No props_size_get() function, use props_size_fixed. - *size = fe->props_size_fixed; - return LZMA_OK; - } - - return fe->props_size_get(size, filter->options); -} - - -extern LZMA_API(lzma_ret) -lzma_properties_encode(const lzma_filter *filter, uint8_t *props) -{ - const lzma_filter_encoder *const fe = encoder_find(filter->id); - if (fe == NULL) - return LZMA_PROG_ERROR; - - if (fe->props_encode == NULL) - return LZMA_OK; - - return fe->props_encode(filter->options, props); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_encoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_encoder.h deleted file mode 100644 index 5b65cd305a9..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_encoder.h +++ /dev/null @@ -1,27 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_encoder.c -/// \brief Filter ID mapping to filter-specific functions -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_FILTER_ENCODER_H -#define LZMA_FILTER_ENCODER_H - -#include "common.h" - - -// FIXME !!! Public API -extern lzma_vli lzma_chunk_size(const lzma_filter *filters); - - -extern lzma_ret lzma_raw_encoder_init( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *options); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_flags_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_flags_decoder.c deleted file mode 100644 index caae10ce79a..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_flags_decoder.c +++ /dev/null @@ -1,46 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_flags_decoder.c -/// \brief Decodes a Filter Flags field -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "filter_decoder.h" - - -extern LZMA_API(lzma_ret) -lzma_filter_flags_decode( - lzma_filter *filter, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size) -{ - // Set the pointer to NULL so the caller can always safely free it. - filter->options = NULL; - - // Filter ID - return_if_error(lzma_vli_decode(&filter->id, NULL, - in, in_pos, in_size)); - - if (filter->id >= LZMA_FILTER_RESERVED_START) - return LZMA_DATA_ERROR; - - // Size of Properties - lzma_vli props_size; - return_if_error(lzma_vli_decode(&props_size, NULL, - in, in_pos, in_size)); - - // Filter Properties - if (in_size - *in_pos < props_size) - return LZMA_DATA_ERROR; - - const lzma_ret ret = lzma_properties_decode( - filter, allocator, in + *in_pos, props_size); - - *in_pos += props_size; - - return ret; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_flags_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_flags_encoder.c deleted file mode 100644 index d110566de99..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/filter_flags_encoder.c +++ /dev/null @@ -1,56 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_flags_encoder.c -/// \brief Decodes a Filter Flags field -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "filter_encoder.h" - - -extern LZMA_API(lzma_ret) -lzma_filter_flags_size(uint32_t *size, const lzma_filter *filter) -{ - if (filter->id >= LZMA_FILTER_RESERVED_START) - return LZMA_PROG_ERROR; - - return_if_error(lzma_properties_size(size, filter)); - - *size += lzma_vli_size(filter->id) + lzma_vli_size(*size); - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_filter_flags_encode(const lzma_filter *filter, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - // Filter ID - if (filter->id >= LZMA_FILTER_RESERVED_START) - return LZMA_PROG_ERROR; - - return_if_error(lzma_vli_encode(filter->id, NULL, - out, out_pos, out_size)); - - // Size of Properties - uint32_t props_size; - return_if_error(lzma_properties_size(&props_size, filter)); - return_if_error(lzma_vli_encode(props_size, NULL, - out, out_pos, out_size)); - - // Filter Properties - if (out_size - *out_pos < props_size) - return LZMA_PROG_ERROR; - - return_if_error(lzma_properties_encode(filter, out + *out_pos)); - - *out_pos += props_size; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index.c deleted file mode 100644 index 46d9ff6eb12..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index.c +++ /dev/null @@ -1,776 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file index.c -/// \brief Handling of Index -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "index.h" - - -/// Number of Records to allocate at once in the unrolled list. -#define INDEX_GROUP_SIZE 256 - - -typedef struct lzma_index_group_s lzma_index_group; -struct lzma_index_group_s { - /// Previous group - lzma_index_group *prev; - - /// Next group - lzma_index_group *next; - - /// Index of the last Record in this group - size_t last; - - /// Unpadded Size fields as special cumulative sum relative to the - /// beginning of the group. It's special in sense that the previous - /// value is rounded up the next multiple of four with before - /// calculating the new value. The total encoded size of the Blocks - /// in the group is unpadded_sums[last] rounded up to the next - /// multiple of four. - /// - /// For example, if the Unpadded Sizes are 39, 57, and 81, the stored - /// values are 39, 97 (40 + 57), and 181 (100 + 181). The total - /// encoded size of these Blocks is 184. - /// - /// This encoding is nice from point of view of lzma_index_locate(). - lzma_vli unpadded_sums[INDEX_GROUP_SIZE]; - - /// Uncompressed Size fields as cumulative sum relative to the - /// beginning of the group. The uncompressed size of the group is - /// uncompressed_sums[last]. - lzma_vli uncompressed_sums[INDEX_GROUP_SIZE]; - - /// True if the Record is padding - bool paddings[INDEX_GROUP_SIZE]; -}; - - -struct lzma_index_s { - /// Total size of the Blocks and padding - lzma_vli total_size; - - /// Uncompressed size of the Stream - lzma_vli uncompressed_size; - - /// Number of non-padding records. This is needed for Index encoder. - lzma_vli count; - - /// Size of the List of Records field; this is updated every time - /// a new non-padding Record is added. - lzma_vli index_list_size; - - /// First group of Records - lzma_index_group *head; - - /// Last group of Records - lzma_index_group *tail; - - /// Tracking the read position - struct { - /// Group where the current read position is. - lzma_index_group *group; - - /// The most recently read Record in *group - size_t record; - - /// Uncompressed offset of the beginning of *group relative - /// to the beginning of the Stream - lzma_vli uncompressed_offset; - - /// Compressed offset of the beginning of *group relative - /// to the beginning of the Stream - lzma_vli stream_offset; - } current; - - /// Information about earlier Indexes when multiple Indexes have - /// been combined. - struct { - /// Sum of the Record counts of the all but the last Stream. - lzma_vli count; - - /// Sum of the List of Records fields of all but the last - /// Stream. This is needed when a new Index is concatenated - /// to this lzma_index structure. - lzma_vli index_list_size; - - /// Total size of all but the last Stream and all Stream - /// Padding fields. - lzma_vli streams_size; - } old; -}; - - -extern LZMA_API(lzma_vli) -lzma_index_memusage(lzma_vli count) -{ - if (count > LZMA_VLI_MAX) - return UINT64_MAX; - - return sizeof(lzma_index) + (count + INDEX_GROUP_SIZE - 1) - / INDEX_GROUP_SIZE * sizeof(lzma_index_group); -} - - -static void -free_index_list(lzma_index *i, lzma_allocator *allocator) -{ - lzma_index_group *g = i->head; - - while (g != NULL) { - lzma_index_group *tmp = g->next; - lzma_free(g, allocator); - g = tmp; - } - - return; -} - - -extern LZMA_API(lzma_index *) -lzma_index_init(lzma_index *i, lzma_allocator *allocator) -{ - if (i == NULL) { - i = lzma_alloc(sizeof(lzma_index), allocator); - if (i == NULL) - return NULL; - } else { - free_index_list(i, allocator); - } - - i->total_size = 0; - i->uncompressed_size = 0; - i->count = 0; - i->index_list_size = 0; - i->head = NULL; - i->tail = NULL; - i->current.group = NULL; - i->old.count = 0; - i->old.index_list_size = 0; - i->old.streams_size = 0; - - return i; -} - - -extern LZMA_API(void) -lzma_index_end(lzma_index *i, lzma_allocator *allocator) -{ - if (i != NULL) { - free_index_list(i, allocator); - lzma_free(i, allocator); - } - - return; -} - - -extern LZMA_API(lzma_vli) -lzma_index_count(const lzma_index *i) -{ - return i->count; -} - - -extern LZMA_API(lzma_vli) -lzma_index_size(const lzma_index *i) -{ - return index_size(i->count, i->index_list_size); -} - - -extern LZMA_API(lzma_vli) -lzma_index_total_size(const lzma_index *i) -{ - return i->total_size; -} - - -extern LZMA_API(lzma_vli) -lzma_index_stream_size(const lzma_index *i) -{ - // Stream Header + Blocks + Index + Stream Footer - return LZMA_STREAM_HEADER_SIZE + i->total_size - + index_size(i->count, i->index_list_size) - + LZMA_STREAM_HEADER_SIZE; -} - - -extern LZMA_API(lzma_vli) -lzma_index_file_size(const lzma_index *i) -{ - // If multiple Streams are concatenated, the Stream Header, Index, - // and Stream Footer fields of all but the last Stream are already - // included in old.streams_size. Thus, we need to calculate only the - // size of the last Index, not all Indexes. - return i->old.streams_size + LZMA_STREAM_HEADER_SIZE + i->total_size - + index_size(i->count - i->old.count, - i->index_list_size - i->old.index_list_size) - + LZMA_STREAM_HEADER_SIZE; -} - - -extern LZMA_API(lzma_vli) -lzma_index_uncompressed_size(const lzma_index *i) -{ - return i->uncompressed_size; -} - - -extern uint32_t -lzma_index_padding_size(const lzma_index *i) -{ - return (LZMA_VLI_C(4) - - index_size_unpadded(i->count, i->index_list_size)) & 3; -} - - -/// Appends a new Record to the Index. If needed, this allocates a new -/// Record group. -static lzma_ret -index_append_real(lzma_index *i, lzma_allocator *allocator, - lzma_vli unpadded_size, lzma_vli uncompressed_size, - bool is_padding) -{ - // Add the new record. - if (i->tail == NULL || i->tail->last == INDEX_GROUP_SIZE - 1) { - // Allocate a new group. - lzma_index_group *g = lzma_alloc(sizeof(lzma_index_group), - allocator); - if (g == NULL) - return LZMA_MEM_ERROR; - - // Initialize the group and set its first record. - g->prev = i->tail; - g->next = NULL; - g->last = 0; - g->unpadded_sums[0] = unpadded_size; - g->uncompressed_sums[0] = uncompressed_size; - g->paddings[0] = is_padding; - - // If this is the first group, make it the head. - if (i->head == NULL) - i->head = g; - else - i->tail->next = g; - - // Make it the new tail. - i->tail = g; - - } else { - // i->tail has space left for at least one record. - i->tail->unpadded_sums[i->tail->last + 1] - = unpadded_size + vli_ceil4( - i->tail->unpadded_sums[i->tail->last]); - i->tail->uncompressed_sums[i->tail->last + 1] - = i->tail->uncompressed_sums[i->tail->last] - + uncompressed_size; - i->tail->paddings[i->tail->last + 1] = is_padding; - ++i->tail->last; - } - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_index_append(lzma_index *i, lzma_allocator *allocator, - lzma_vli unpadded_size, lzma_vli uncompressed_size) -{ - if (unpadded_size < UNPADDED_SIZE_MIN - || unpadded_size > UNPADDED_SIZE_MAX - || uncompressed_size > LZMA_VLI_MAX) - return LZMA_PROG_ERROR; - - // This looks a bit ugly. We want to first validate that the Index - // and Stream stay in valid limits after adding this Record. After - // validating, we may need to allocate a new lzma_index_group (it's - // slightly more correct to validate before allocating, YMMV). - lzma_ret ret; - - // First update the overall info so we can validate it. - const lzma_vli index_list_size_add = lzma_vli_size(unpadded_size) - + lzma_vli_size(uncompressed_size); - - const lzma_vli total_size = vli_ceil4(unpadded_size); - - i->total_size += total_size; - i->uncompressed_size += uncompressed_size; - ++i->count; - i->index_list_size += index_list_size_add; - - if (i->total_size > LZMA_VLI_MAX - || i->uncompressed_size > LZMA_VLI_MAX - || lzma_index_size(i) > LZMA_BACKWARD_SIZE_MAX - || lzma_index_file_size(i) > LZMA_VLI_MAX) - ret = LZMA_DATA_ERROR; // Would grow past the limits. - else - ret = index_append_real(i, allocator, unpadded_size, - uncompressed_size, false); - - if (ret != LZMA_OK) { - // Something went wrong. Undo the updates. - i->total_size -= total_size; - i->uncompressed_size -= uncompressed_size; - --i->count; - i->index_list_size -= index_list_size_add; - } - - return ret; -} - - -/// Initialize i->current to point to the first Record. -static bool -init_current(lzma_index *i) -{ - if (i->head == NULL) { - assert(i->count == 0); - return true; - } - - assert(i->count > 0); - - i->current.group = i->head; - i->current.record = 0; - i->current.stream_offset = LZMA_STREAM_HEADER_SIZE; - i->current.uncompressed_offset = 0; - - return false; -} - - -/// Go backward to the previous group. -static void -previous_group(lzma_index *i) -{ - assert(i->current.group->prev != NULL); - - // Go to the previous group first. - i->current.group = i->current.group->prev; - i->current.record = i->current.group->last; - - // Then update the offsets. - i->current.stream_offset -= vli_ceil4(i->current.group->unpadded_sums[ - i->current.group->last]); - i->current.uncompressed_offset -= i->current.group->uncompressed_sums[ - i->current.group->last]; - - return; -} - - -/// Go forward to the next group. -static void -next_group(lzma_index *i) -{ - assert(i->current.group->next != NULL); - - // Update the offsets first. - i->current.stream_offset += vli_ceil4(i->current.group->unpadded_sums[ - i->current.group->last]); - i->current.uncompressed_offset += i->current.group - ->uncompressed_sums[i->current.group->last]; - - // Then go to the next group. - i->current.record = 0; - i->current.group = i->current.group->next; - - return; -} - - -/// Set *info from i->current. -static void -set_info(const lzma_index *i, lzma_index_record *info) -{ - // First copy the cumulative sizes from the current Record of the - // current group. - info->unpadded_size - = i->current.group->unpadded_sums[i->current.record]; - info->total_size = vli_ceil4(info->unpadded_size); - info->uncompressed_size = i->current.group->uncompressed_sums[ - i->current.record]; - - // Copy the start offsets of this group. - info->stream_offset = i->current.stream_offset; - info->uncompressed_offset = i->current.uncompressed_offset; - - // If it's not the first Record in this group, we need to do some - // adjustements. - if (i->current.record > 0) { - // Since the _sums[] are cumulative, we substract the sums of - // the previous Record to get the sizes of the current Record, - // and add the sums of the previous Record to the offsets. - // With unpadded_sums[] we need to take into account that it - // uses a bit weird way to do the cumulative summing - const lzma_vli total_sum - = vli_ceil4(i->current.group->unpadded_sums[ - i->current.record - 1]); - - const lzma_vli uncompressed_sum = i->current.group - ->uncompressed_sums[i->current.record - 1]; - - info->total_size -= total_sum; - info->unpadded_size -= total_sum; - info->uncompressed_size -= uncompressed_sum; - - info->stream_offset += total_sum; - info->uncompressed_offset += uncompressed_sum; - } - - return; -} - - -extern LZMA_API(lzma_bool) -lzma_index_read(lzma_index *i, lzma_index_record *info) -{ - if (i->current.group == NULL) { - // We are at the beginning of the Record list. Set up - // i->current point at the first Record. Return if there - // are no Records. - if (init_current(i)) - return true; - } else do { - // Try to go the next Record. - if (i->current.record < i->current.group->last) - ++i->current.record; - else if (i->current.group->next == NULL) - return true; - else - next_group(i); - } while (i->current.group->paddings[i->current.record]); - - // We found a new Record. Set the information to *info. - set_info(i, info); - - return false; -} - - -extern LZMA_API(void) -lzma_index_rewind(lzma_index *i) -{ - i->current.group = NULL; - return; -} - - -extern LZMA_API(lzma_bool) -lzma_index_locate(lzma_index *i, lzma_index_record *info, lzma_vli target) -{ - // Check if it is possible to fullfill the request. - if (target >= i->uncompressed_size) - return true; - - // Now we know that we will have an answer. Initialize the current - // read position if needed. - if (i->current.group == NULL && init_current(i)) - return true; - - // Locate the group where the wanted Block is. First search forward. - while (i->current.uncompressed_offset <= target) { - // If the first uncompressed byte of the next group is past - // the target offset, it has to be this or an earlier group. - if (i->current.uncompressed_offset + i->current.group - ->uncompressed_sums[i->current.group->last] - > target) - break; - - // Go forward to the next group. - next_group(i); - } - - // Then search backward. - while (i->current.uncompressed_offset > target) - previous_group(i); - - // Now the target Block is somewhere in i->current.group. Offsets - // in groups are relative to the beginning of the group, thus - // we must adjust the target before starting the search loop. - assert(target >= i->current.uncompressed_offset); - target -= i->current.uncompressed_offset; - - // Use binary search to locate the exact Record. It is the first - // Record whose uncompressed_sums[] value is greater than target. - // This is because we want the rightmost Record that fullfills the - // search criterion. It is possible that there are empty Blocks or - // padding, we don't want to return them. - size_t left = 0; - size_t right = i->current.group->last; - - while (left < right) { - const size_t pos = left + (right - left) / 2; - if (i->current.group->uncompressed_sums[pos] <= target) - left = pos + 1; - else - right = pos; - } - - i->current.record = left; - -#ifndef NDEBUG - // The found Record must not be padding or have zero uncompressed size. - assert(!i->current.group->paddings[i->current.record]); - - if (i->current.record == 0) - assert(i->current.group->uncompressed_sums[0] > 0); - else - assert(i->current.group->uncompressed_sums[i->current.record] - - i->current.group->uncompressed_sums[ - i->current.record - 1] > 0); -#endif - - set_info(i, info); - - return false; -} - - -extern LZMA_API(lzma_ret) -lzma_index_cat(lzma_index *restrict dest, lzma_index *restrict src, - lzma_allocator *allocator, lzma_vli padding) -{ - if (dest == NULL || src == NULL || dest == src - || padding > LZMA_VLI_MAX) - return LZMA_PROG_ERROR; - - // Check that the combined size of the Indexes stays within limits. - { - const lzma_vli dest_size = index_size_unpadded( - dest->count, dest->index_list_size); - const lzma_vli src_size = index_size_unpadded( - src->count, src->index_list_size); - if (vli_ceil4(dest_size + src_size) > LZMA_BACKWARD_SIZE_MAX) - return LZMA_DATA_ERROR; - } - - // Check that the combined size of the "files" (combined total - // encoded sizes) stays within limits. - { - const lzma_vli dest_size = lzma_index_file_size(dest); - const lzma_vli src_size = lzma_index_file_size(src); - if (dest_size + src_size > LZMA_VLI_MAX - || dest_size + src_size + padding - > LZMA_VLI_MAX) - return LZMA_DATA_ERROR; - } - - // Add a padding Record to take into account the size of - // Index + Stream Footer + Stream Padding + Stream Header. - // - // NOTE: This cannot overflow, because Index Size is always - // far smaller than LZMA_VLI_MAX, and adding two VLIs - // (Index Size and padding) doesn't overflow. - padding += index_size(dest->count - dest->old.count, - dest->index_list_size - - dest->old.index_list_size) - + LZMA_STREAM_HEADER_SIZE * 2; - - // While the above cannot overflow, but it may become an invalid VLI. - if (padding > LZMA_VLI_MAX) - return LZMA_DATA_ERROR; - - // Add the padding Record. - { - lzma_ret ret; - - // First update the info so we can validate it. - dest->old.streams_size += padding; - - if (dest->old.streams_size > LZMA_VLI_MAX - || lzma_index_file_size(dest) > LZMA_VLI_MAX) - ret = LZMA_DATA_ERROR; // Would grow past the limits. - else - ret = index_append_real(dest, allocator, - padding, 0, true); - - // If something went wrong, undo the updated value and return - // the error. - if (ret != LZMA_OK) { - dest->old.streams_size -= padding; - return ret; - } - } - - // Avoid wasting lots of memory if src->head has only a few records - // that fit into dest->tail. That is, combine two groups if possible. - // - // NOTE: We know that dest->tail != NULL since we just appended - // a padding Record. But we don't know about src->head. - if (src->head != NULL && src->head->last + 1 - <= INDEX_GROUP_SIZE - dest->tail->last - 1) { - // Copy the first Record. - dest->tail->unpadded_sums[dest->tail->last + 1] - = vli_ceil4(dest->tail->unpadded_sums[ - dest->tail->last]) - + src->head->unpadded_sums[0]; - - dest->tail->uncompressed_sums[dest->tail->last + 1] - = dest->tail->uncompressed_sums[dest->tail->last] - + src->head->uncompressed_sums[0]; - - dest->tail->paddings[dest->tail->last + 1] - = src->head->paddings[0]; - - ++dest->tail->last; - - // Copy the rest. - for (size_t i = 1; i < src->head->last; ++i) { - dest->tail->unpadded_sums[dest->tail->last + 1] - = vli_ceil4(dest->tail->unpadded_sums[ - dest->tail->last]) - + src->head->unpadded_sums[i + 1] - - src->head->unpadded_sums[i]; - - dest->tail->uncompressed_sums[dest->tail->last + 1] - = dest->tail->uncompressed_sums[ - dest->tail->last] - + src->head->uncompressed_sums[i + 1] - - src->head->uncompressed_sums[i]; - - dest->tail->paddings[dest->tail->last + 1] - = src->head->paddings[i + 1]; - - ++dest->tail->last; - } - - // Free the head group of *src. Don't bother updating prev - // pointers since those won't be used for anything before - // we deallocate the whole *src structure. - lzma_index_group *tmp = src->head; - src->head = src->head->next; - lzma_free(tmp, allocator); - } - - // If there are groups left in *src, join them as is. Note that if we - // are combining already combined Indexes, src->head can be non-NULL - // even if we just combined the old src->head to dest->tail. - if (src->head != NULL) { - src->head->prev = dest->tail; - dest->tail->next = src->head; - dest->tail = src->tail; - } - - // Update information about earlier Indexes. Only the last Index - // from *src won't be counted in dest->old. The last Index is left - // open and can be even appended with lzma_index_append(). - dest->old.count = dest->count + src->old.count; - dest->old.index_list_size - = dest->index_list_size + src->old.index_list_size; - dest->old.streams_size += src->old.streams_size; - - // Update overall information. - dest->total_size += src->total_size; - dest->uncompressed_size += src->uncompressed_size; - dest->count += src->count; - dest->index_list_size += src->index_list_size; - - // *src has nothing left but the base structure. - lzma_free(src, allocator); - - return LZMA_OK; -} - - -extern LZMA_API(lzma_index *) -lzma_index_dup(const lzma_index *src, lzma_allocator *allocator) -{ - lzma_index *dest = lzma_alloc(sizeof(lzma_index), allocator); - if (dest == NULL) - return NULL; - - // Copy the base structure except the pointers. - *dest = *src; - dest->head = NULL; - dest->tail = NULL; - dest->current.group = NULL; - - // Copy the Records. - const lzma_index_group *src_group = src->head; - while (src_group != NULL) { - // Allocate a new group. - lzma_index_group *dest_group = lzma_alloc( - sizeof(lzma_index_group), allocator); - if (dest_group == NULL) { - lzma_index_end(dest, allocator); - return NULL; - } - - // Set the pointers. - dest_group->prev = dest->tail; - dest_group->next = NULL; - - if (dest->head == NULL) - dest->head = dest_group; - else - dest->tail->next = dest_group; - - dest->tail = dest_group; - - dest_group->last = src_group->last; - - // Copy the arrays so that we don't read uninitialized memory. - const size_t count = src_group->last + 1; - memcpy(dest_group->unpadded_sums, src_group->unpadded_sums, - sizeof(lzma_vli) * count); - memcpy(dest_group->uncompressed_sums, - src_group->uncompressed_sums, - sizeof(lzma_vli) * count); - memcpy(dest_group->paddings, src_group->paddings, - sizeof(bool) * count); - - // Copy also the read position. - if (src_group == src->current.group) - dest->current.group = dest->tail; - - src_group = src_group->next; - } - - return dest; -} - - -extern LZMA_API(lzma_bool) -lzma_index_equal(const lzma_index *a, const lzma_index *b) -{ - // No point to compare more if the pointers are the same. - if (a == b) - return true; - - // Compare the basic properties. - if (a->total_size != b->total_size - || a->uncompressed_size != b->uncompressed_size - || a->index_list_size != b->index_list_size - || a->count != b->count) - return false; - - // Compare the Records. - const lzma_index_group *ag = a->head; - const lzma_index_group *bg = b->head; - while (ag != NULL && bg != NULL) { - const size_t count = ag->last + 1; - if (ag->last != bg->last - || memcmp(ag->unpadded_sums, - bg->unpadded_sums, - sizeof(lzma_vli) * count) != 0 - || memcmp(ag->uncompressed_sums, - bg->uncompressed_sums, - sizeof(lzma_vli) * count) != 0 - || memcmp(ag->paddings, bg->paddings, - sizeof(bool) * count) != 0) - return false; - - ag = ag->next; - bg = bg->next; - } - - return ag == NULL && bg == NULL; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index.h deleted file mode 100644 index 9f177b1b3d4..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index.h +++ /dev/null @@ -1,67 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file index.h -/// \brief Handling of Index -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_INDEX_H -#define LZMA_INDEX_H - -#include "common.h" - - -/// Minimum Unpadded Size -#define UNPADDED_SIZE_MIN LZMA_VLI_C(5) - -/// Maximum Unpadded Size -#define UNPADDED_SIZE_MAX (LZMA_VLI_MAX & ~LZMA_VLI_C(3)) - - -/// Get the size of the Index Padding field. This is needed by Index encoder -/// and decoder, but applications should have no use for this. -extern uint32_t lzma_index_padding_size(const lzma_index *i); - - -/// Round the variable-length integer to the next multiple of four. -static inline lzma_vli -vli_ceil4(lzma_vli vli) -{ - assert(vli <= LZMA_VLI_MAX); - return (vli + 3) & ~LZMA_VLI_C(3); -} - - -/// Calculate the size of the Index field excluding Index Padding -static inline lzma_vli -index_size_unpadded(lzma_vli count, lzma_vli index_list_size) -{ - // Index Indicator + Number of Records + List of Records + CRC32 - return 1 + lzma_vli_size(count) + index_list_size + 4; -} - - -/// Calculate the size of the Index field including Index Padding -static inline lzma_vli -index_size(lzma_vli count, lzma_vli index_list_size) -{ - return vli_ceil4(index_size_unpadded(count, index_list_size)); -} - - -/// Calculate the total size of the Stream -static inline lzma_vli -index_stream_size(lzma_vli blocks_size, - lzma_vli count, lzma_vli index_list_size) -{ - return LZMA_STREAM_HEADER_SIZE + blocks_size - + index_size(count, index_list_size) - + LZMA_STREAM_HEADER_SIZE; -} - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_decoder.c deleted file mode 100644 index 51e9de38ed9..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_decoder.c +++ /dev/null @@ -1,323 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file index_decoder.c -/// \brief Decodes the Index field -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "index.h" -#include "check.h" - - -struct lzma_coder_s { - enum { - SEQ_INDICATOR, - SEQ_COUNT, - SEQ_MEMUSAGE, - SEQ_UNPADDED, - SEQ_UNCOMPRESSED, - SEQ_PADDING_INIT, - SEQ_PADDING, - SEQ_CRC32, - } sequence; - - /// Memory usage limit - uint64_t memlimit; - - /// Target Index - lzma_index *index; - - /// Number of Records left to decode. - lzma_vli count; - - /// The most recent Unpadded Size field - lzma_vli unpadded_size; - - /// The most recent Uncompressed Size field - lzma_vli uncompressed_size; - - /// Position in integers - size_t pos; - - /// CRC32 of the List of Records field - uint32_t crc32; -}; - - -static lzma_ret -index_decode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out lzma_attribute((unused)), - size_t *restrict out_pos lzma_attribute((unused)), - size_t out_size lzma_attribute((unused)), - lzma_action action lzma_attribute((unused))) -{ - // Similar optimization as in index_encoder.c - const size_t in_start = *in_pos; - lzma_ret ret = LZMA_OK; - - while (*in_pos < in_size) - switch (coder->sequence) { - case SEQ_INDICATOR: - // Return LZMA_DATA_ERROR instead of e.g. LZMA_PROG_ERROR or - // LZMA_FORMAT_ERROR, because a typical usage case for Index - // decoder is when parsing the Stream backwards. If seeking - // backward from the Stream Footer gives us something that - // doesn't begin with Index Indicator, the file is considered - // corrupt, not "programming error" or "unrecognized file - // format". One could argue that the application should - // verify the Index Indicator before trying to decode the - // Index, but well, I suppose it is simpler this way. - if (in[(*in_pos)++] != 0x00) - return LZMA_DATA_ERROR; - - coder->sequence = SEQ_COUNT; - break; - - case SEQ_COUNT: - ret = lzma_vli_decode(&coder->count, &coder->pos, - in, in_pos, in_size); - if (ret != LZMA_STREAM_END) - goto out; - - coder->pos = 0; - coder->sequence = SEQ_MEMUSAGE; - - // Fall through - - case SEQ_MEMUSAGE: - if (lzma_index_memusage(coder->count) > coder->memlimit) { - ret = LZMA_MEMLIMIT_ERROR; - goto out; - } - - ret = LZMA_OK; - coder->sequence = coder->count == 0 - ? SEQ_PADDING_INIT : SEQ_UNPADDED; - break; - - case SEQ_UNPADDED: - case SEQ_UNCOMPRESSED: { - lzma_vli *size = coder->sequence == SEQ_UNPADDED - ? &coder->unpadded_size - : &coder->uncompressed_size; - - ret = lzma_vli_decode(size, &coder->pos, - in, in_pos, in_size); - if (ret != LZMA_STREAM_END) - goto out; - - ret = LZMA_OK; - coder->pos = 0; - - if (coder->sequence == SEQ_UNPADDED) { - // Validate that encoded Unpadded Size isn't too small - // or too big. - if (coder->unpadded_size < UNPADDED_SIZE_MIN - || coder->unpadded_size - > UNPADDED_SIZE_MAX) - return LZMA_DATA_ERROR; - - coder->sequence = SEQ_UNCOMPRESSED; - } else { - // Add the decoded Record to the Index. - return_if_error(lzma_index_append( - coder->index, allocator, - coder->unpadded_size, - coder->uncompressed_size)); - - // Check if this was the last Record. - coder->sequence = --coder->count == 0 - ? SEQ_PADDING_INIT - : SEQ_UNPADDED; - } - - break; - } - - case SEQ_PADDING_INIT: - coder->pos = lzma_index_padding_size(coder->index); - coder->sequence = SEQ_PADDING; - - // Fall through - - case SEQ_PADDING: - if (coder->pos > 0) { - --coder->pos; - if (in[(*in_pos)++] != 0x00) - return LZMA_DATA_ERROR; - - break; - } - - // Finish the CRC32 calculation. - coder->crc32 = lzma_crc32(in + in_start, - *in_pos - in_start, coder->crc32); - - coder->sequence = SEQ_CRC32; - - // Fall through - - case SEQ_CRC32: - do { - if (*in_pos == in_size) - return LZMA_OK; - - if (((coder->crc32 >> (coder->pos * 8)) & 0xFF) - != in[(*in_pos)++]) - return LZMA_DATA_ERROR; - - } while (++coder->pos < 4); - - // Make index NULL so we don't free it unintentionally. - coder->index = NULL; - - return LZMA_STREAM_END; - - default: - assert(0); - return LZMA_PROG_ERROR; - } - -out: - // Update the CRC32, - coder->crc32 = lzma_crc32(in + in_start, - *in_pos - in_start, coder->crc32); - - return ret; -} - - -static void -index_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_index_end(coder->index, allocator); - lzma_free(coder, allocator); - return; -} - - -static lzma_ret -index_decoder_memconfig(lzma_coder *coder, uint64_t *memusage, - uint64_t *old_memlimit, uint64_t new_memlimit) -{ - *memusage = lzma_index_memusage(coder->count); - - if (new_memlimit != 0 && new_memlimit < *memusage) - return LZMA_MEMLIMIT_ERROR; - - *old_memlimit = coder->memlimit; - coder->memlimit = new_memlimit; - - return LZMA_OK; -} - - -static lzma_ret -index_decoder_reset(lzma_coder *coder, lzma_allocator *allocator, - lzma_index **i, uint64_t memlimit) -{ - // We always allocate a new lzma_index. - *i = lzma_index_init(NULL, allocator); - if (*i == NULL) - return LZMA_MEM_ERROR; - - // Initialize the rest. - coder->sequence = SEQ_INDICATOR; - coder->memlimit = memlimit; - coder->index = *i; - coder->count = 0; // Needs to be initialized due to _memconfig(). - coder->pos = 0; - coder->crc32 = 0; - - return LZMA_OK; -} - - -static lzma_ret -index_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - lzma_index **i, uint64_t memlimit) -{ - lzma_next_coder_init(&index_decoder_init, next, allocator); - - if (i == NULL || memlimit == 0) - return LZMA_PROG_ERROR; - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &index_decode; - next->end = &index_decoder_end; - next->memconfig = &index_decoder_memconfig; - next->coder->index = NULL; - } else { - lzma_index_end(next->coder->index, allocator); - } - - return index_decoder_reset(next->coder, allocator, i, memlimit); -} - - -extern LZMA_API(lzma_ret) -lzma_index_decoder(lzma_stream *strm, lzma_index **i, uint64_t memlimit) -{ - lzma_next_strm_init(index_decoder_init, strm, i, memlimit); - - strm->internal->supported_actions[LZMA_RUN] = true; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_index_buffer_decode( - lzma_index **i, uint64_t *memlimit, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size) -{ - // Sanity checks - if (i == NULL || in == NULL || in_pos == NULL || *in_pos > in_size) - return LZMA_PROG_ERROR; - - // Initialize the decoder. - lzma_coder coder; - return_if_error(index_decoder_reset(&coder, allocator, i, *memlimit)); - - // Store the input start position so that we can restore it in case - // of an error. - const size_t in_start = *in_pos; - - // Do the actual decoding. - lzma_ret ret = index_decode(&coder, allocator, in, in_pos, in_size, - NULL, NULL, 0, LZMA_RUN); - - if (ret == LZMA_STREAM_END) { - ret = LZMA_OK; - } else { - // Something went wrong, free the Index structure and restore - // the input position. - lzma_index_end(*i, allocator); - *i = NULL; - *in_pos = in_start; - - if (ret == LZMA_OK) { - // The input is truncated or otherwise corrupt. - // Use LZMA_DATA_ERROR instead of LZMA_BUF_ERROR - // like lzma_vli_decode() does in single-call mode. - ret = LZMA_DATA_ERROR; - - } else if (ret == LZMA_MEMLIMIT_ERROR) { - // Tell the caller how much memory would have - // been needed. - *memlimit = lzma_index_memusage(coder.count); - } - } - - return ret; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_encoder.c deleted file mode 100644 index e23963ce42a..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_encoder.c +++ /dev/null @@ -1,258 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file index_encoder.c -/// \brief Encodes the Index field -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "index_encoder.h" -#include "index.h" -#include "check.h" - - -struct lzma_coder_s { - enum { - SEQ_INDICATOR, - SEQ_COUNT, - SEQ_UNPADDED, - SEQ_UNCOMPRESSED, - SEQ_NEXT, - SEQ_PADDING, - SEQ_CRC32, - } sequence; - - /// Index given to us to encode. Note that we modify it in sense that - /// we read it, and read position is tracked in lzma_index structure. - lzma_index *index; - - /// The current Index Record being encoded - lzma_index_record record; - - /// Position in integers - size_t pos; - - /// CRC32 of the List of Records field - uint32_t crc32; -}; - - -static lzma_ret -index_encode(lzma_coder *coder, - lzma_allocator *allocator lzma_attribute((unused)), - const uint8_t *restrict in lzma_attribute((unused)), - size_t *restrict in_pos lzma_attribute((unused)), - size_t in_size lzma_attribute((unused)), - uint8_t *restrict out, size_t *restrict out_pos, - size_t out_size, lzma_action action lzma_attribute((unused))) -{ - // Position where to start calculating CRC32. The idea is that we - // need to call lzma_crc32() only once per call to index_encode(). - const size_t out_start = *out_pos; - - // Return value to use if we return at the end of this function. - // We use "goto out" to jump out of the while-switch construct - // instead of returning directly, because that way we don't need - // to copypaste the lzma_crc32() call to many places. - lzma_ret ret = LZMA_OK; - - while (*out_pos < out_size) - switch (coder->sequence) { - case SEQ_INDICATOR: - out[*out_pos] = 0x00; - ++*out_pos; - coder->sequence = SEQ_COUNT; - break; - - case SEQ_COUNT: { - const lzma_vli index_count = lzma_index_count(coder->index); - ret = lzma_vli_encode(index_count, &coder->pos, - out, out_pos, out_size); - if (ret != LZMA_STREAM_END) - goto out; - - ret = LZMA_OK; - coder->pos = 0; - coder->sequence = SEQ_NEXT; - break; - } - - case SEQ_NEXT: - if (lzma_index_read(coder->index, &coder->record)) { - // Get the size of the Index Padding field. - coder->pos = lzma_index_padding_size(coder->index); - assert(coder->pos <= 3); - coder->sequence = SEQ_PADDING; - break; - } - - // Unpadded Size must be within valid limits. - if (coder->record.unpadded_size < UNPADDED_SIZE_MIN - || coder->record.unpadded_size - > UNPADDED_SIZE_MAX) - return LZMA_PROG_ERROR; - - coder->sequence = SEQ_UNPADDED; - - // Fall through - - case SEQ_UNPADDED: - case SEQ_UNCOMPRESSED: { - const lzma_vli size = coder->sequence == SEQ_UNPADDED - ? coder->record.unpadded_size - : coder->record.uncompressed_size; - - ret = lzma_vli_encode(size, &coder->pos, - out, out_pos, out_size); - if (ret != LZMA_STREAM_END) - goto out; - - ret = LZMA_OK; - coder->pos = 0; - - // Advance to SEQ_UNCOMPRESSED or SEQ_NEXT. - ++coder->sequence; - break; - } - - case SEQ_PADDING: - if (coder->pos > 0) { - --coder->pos; - out[(*out_pos)++] = 0x00; - break; - } - - // Finish the CRC32 calculation. - coder->crc32 = lzma_crc32(out + out_start, - *out_pos - out_start, coder->crc32); - - coder->sequence = SEQ_CRC32; - - // Fall through - - case SEQ_CRC32: - // We don't use the main loop, because we don't want - // coder->crc32 to be touched anymore. - do { - if (*out_pos == out_size) - return LZMA_OK; - - out[*out_pos] = (coder->crc32 >> (coder->pos * 8)) - & 0xFF; - ++*out_pos; - - } while (++coder->pos < 4); - - return LZMA_STREAM_END; - - default: - assert(0); - return LZMA_PROG_ERROR; - } - -out: - // Update the CRC32. - coder->crc32 = lzma_crc32(out + out_start, - *out_pos - out_start, coder->crc32); - - return ret; -} - - -static void -index_encoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_free(coder, allocator); - return; -} - - -static void -index_encoder_reset(lzma_coder *coder, lzma_index *i) -{ - lzma_index_rewind(i); - - coder->sequence = SEQ_INDICATOR; - coder->index = i; - coder->pos = 0; - coder->crc32 = 0; - - return; -} - - -extern lzma_ret -lzma_index_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - lzma_index *i) -{ - lzma_next_coder_init(&lzma_index_encoder_init, next, allocator); - - if (i == NULL) - return LZMA_PROG_ERROR; - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &index_encode; - next->end = &index_encoder_end; - } - - index_encoder_reset(next->coder, i); - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_index_encoder(lzma_stream *strm, lzma_index *i) -{ - lzma_next_strm_init(lzma_index_encoder_init, strm, i); - - strm->internal->supported_actions[LZMA_RUN] = true; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_index_buffer_encode(lzma_index *i, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - // Validate the arugments. - if (i == NULL || out == NULL || out_pos == NULL || *out_pos > out_size) - return LZMA_PROG_ERROR; - - // Don't try to encode if there's not enough output space. - if (out_size - *out_pos < lzma_index_size(i)) - return LZMA_BUF_ERROR; - - // The Index encoder needs just one small data structure so we can - // allocate it on stack. - lzma_coder coder; - index_encoder_reset(&coder, i); - - // Do the actual encoding. This should never fail, but store - // the original *out_pos just in case. - const size_t out_start = *out_pos; - lzma_ret ret = index_encode(&coder, NULL, NULL, NULL, 0, - out, out_pos, out_size, LZMA_RUN); - - if (ret == LZMA_STREAM_END) { - ret = LZMA_OK; - } else { - // We should never get here, but just in case, restore the - // output position and set the error accordingly if something - // goes wrong and debugging isn't enabled. - assert(0); - *out_pos = out_start; - ret = LZMA_PROG_ERROR; - } - - return ret; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_encoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_encoder.h deleted file mode 100644 index c85d1c87ab3..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_encoder.h +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file index_encoder.h -/// \brief Encodes the Index field -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_INDEX_ENCODER_H -#define LZMA_INDEX_ENCODER_H - -#include "common.h" - - -extern lzma_ret lzma_index_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, lzma_index *i); - - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_hash.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_hash.c deleted file mode 100644 index e3e9386ae8e..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/index_hash.c +++ /dev/null @@ -1,332 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file index_hash.c -/// \brief Validates Index by using a hash function -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" -#include "index.h" -#include "check.h" - - -typedef struct { - /// Sum of the Block sizes (including Block Padding) - lzma_vli blocks_size; - - /// Sum of the Uncompressed Size fields - lzma_vli uncompressed_size; - - /// Number of Records - lzma_vli count; - - /// Size of the List of Index Records as bytes - lzma_vli index_list_size; - - /// Check calculated from Unpadded Sizes and Uncompressed Sizes. - lzma_check_state check; - -} lzma_index_hash_info; - - -struct lzma_index_hash_s { - enum { - SEQ_BLOCK, - SEQ_COUNT, - SEQ_UNPADDED, - SEQ_UNCOMPRESSED, - SEQ_PADDING_INIT, - SEQ_PADDING, - SEQ_CRC32, - } sequence; - - /// Information collected while decoding the actual Blocks. - lzma_index_hash_info blocks; - - /// Information collected from the Index field. - lzma_index_hash_info records; - - /// Number of Records not fully decoded - lzma_vli remaining; - - /// Unpadded Size currently being read from an Index Record. - lzma_vli unpadded_size; - - /// Uncompressed Size currently being read from an Index Record. - lzma_vli uncompressed_size; - - /// Position in variable-length integers when decoding them from - /// the List of Records. - size_t pos; - - /// CRC32 of the Index - uint32_t crc32; -}; - - -extern LZMA_API(lzma_index_hash *) -lzma_index_hash_init(lzma_index_hash *index_hash, lzma_allocator *allocator) -{ - if (index_hash == NULL) { - index_hash = lzma_alloc(sizeof(lzma_index_hash), allocator); - if (index_hash == NULL) - return NULL; - } - - index_hash->sequence = SEQ_BLOCK; - index_hash->blocks.blocks_size = 0; - index_hash->blocks.uncompressed_size = 0; - index_hash->blocks.count = 0; - index_hash->blocks.index_list_size = 0; - index_hash->records.blocks_size = 0; - index_hash->records.uncompressed_size = 0; - index_hash->records.count = 0; - index_hash->records.index_list_size = 0; - index_hash->unpadded_size = 0; - index_hash->uncompressed_size = 0; - index_hash->pos = 0; - index_hash->crc32 = 0; - - // These cannot fail because LZMA_CHECK_BEST is known to be supported. - (void)lzma_check_init(&index_hash->blocks.check, LZMA_CHECK_BEST); - (void)lzma_check_init(&index_hash->records.check, LZMA_CHECK_BEST); - - return index_hash; -} - - -extern LZMA_API(void) -lzma_index_hash_end(lzma_index_hash *index_hash, lzma_allocator *allocator) -{ - lzma_free(index_hash, allocator); - return; -} - - -extern LZMA_API(lzma_vli) -lzma_index_hash_size(const lzma_index_hash *index_hash) -{ - // Get the size of the Index from ->blocks instead of ->records for - // cases where application wants to know the Index Size before - // decoding the Index. - return index_size(index_hash->blocks.count, - index_hash->blocks.index_list_size); -} - - -/// Updates the sizes and the hash without any validation. -static lzma_ret -hash_append(lzma_index_hash_info *info, lzma_vli unpadded_size, - lzma_vli uncompressed_size) -{ - info->blocks_size += vli_ceil4(unpadded_size); - info->uncompressed_size += uncompressed_size; - info->index_list_size += lzma_vli_size(unpadded_size) - + lzma_vli_size(uncompressed_size); - ++info->count; - - const lzma_vli sizes[2] = { unpadded_size, uncompressed_size }; - lzma_check_update(&info->check, LZMA_CHECK_BEST, - (const uint8_t *)(sizes), sizeof(sizes)); - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_index_hash_append(lzma_index_hash *index_hash, lzma_vli unpadded_size, - lzma_vli uncompressed_size) -{ - // Validate the arguments. - if (index_hash->sequence != SEQ_BLOCK - || unpadded_size < UNPADDED_SIZE_MIN - || unpadded_size > UNPADDED_SIZE_MAX - || uncompressed_size > LZMA_VLI_MAX) - return LZMA_PROG_ERROR; - - // Update the hash. - return_if_error(hash_append(&index_hash->blocks, - unpadded_size, uncompressed_size)); - - // Validate the properties of *info are still in allowed limits. - if (index_hash->blocks.blocks_size > LZMA_VLI_MAX - || index_hash->blocks.uncompressed_size > LZMA_VLI_MAX - || index_size(index_hash->blocks.count, - index_hash->blocks.index_list_size) - > LZMA_BACKWARD_SIZE_MAX - || index_stream_size(index_hash->blocks.blocks_size, - index_hash->blocks.count, - index_hash->blocks.index_list_size) - > LZMA_VLI_MAX) - return LZMA_DATA_ERROR; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_index_hash_decode(lzma_index_hash *index_hash, const uint8_t *in, - size_t *in_pos, size_t in_size) -{ - // Catch zero input buffer here, because in contrast to Index encoder - // and decoder functions, applications call this function directly - // instead of via lzma_code(), which does the buffer checking. - if (*in_pos >= in_size) - return LZMA_BUF_ERROR; - - // NOTE: This function has many similarities to index_encode() and - // index_decode() functions found from index_encoder.c and - // index_decoder.c. See the comments especially in index_encoder.c. - const size_t in_start = *in_pos; - lzma_ret ret = LZMA_OK; - - while (*in_pos < in_size) - switch (index_hash->sequence) { - case SEQ_BLOCK: - // Check the Index Indicator is present. - if (in[(*in_pos)++] != 0x00) - return LZMA_DATA_ERROR; - - index_hash->sequence = SEQ_COUNT; - break; - - case SEQ_COUNT: { - ret = lzma_vli_decode(&index_hash->remaining, - &index_hash->pos, in, in_pos, in_size); - if (ret != LZMA_STREAM_END) - goto out; - - // The count must match the count of the Blocks decoded. - if (index_hash->remaining != index_hash->blocks.count) - return LZMA_DATA_ERROR; - - ret = LZMA_OK; - index_hash->pos = 0; - - // Handle the special case when there are no Blocks. - index_hash->sequence = index_hash->remaining == 0 - ? SEQ_PADDING_INIT : SEQ_UNPADDED; - break; - } - - case SEQ_UNPADDED: - case SEQ_UNCOMPRESSED: { - lzma_vli *size = index_hash->sequence == SEQ_UNPADDED - ? &index_hash->unpadded_size - : &index_hash->uncompressed_size; - - ret = lzma_vli_decode(size, &index_hash->pos, - in, in_pos, in_size); - if (ret != LZMA_STREAM_END) - goto out; - - ret = LZMA_OK; - index_hash->pos = 0; - - if (index_hash->sequence == SEQ_UNPADDED) { - if (index_hash->unpadded_size < UNPADDED_SIZE_MIN - || index_hash->unpadded_size - > UNPADDED_SIZE_MAX) - return LZMA_DATA_ERROR; - - index_hash->sequence = SEQ_UNCOMPRESSED; - } else { - // Update the hash. - return_if_error(hash_append(&index_hash->records, - index_hash->unpadded_size, - index_hash->uncompressed_size)); - - // Verify that we don't go over the known sizes. Note - // that this validation is simpler than the one used - // in lzma_index_hash_append(), because here we know - // that values in index_hash->blocks are already - // validated and we are fine as long as we don't - // exceed them in index_hash->records. - if (index_hash->blocks.blocks_size - < index_hash->records.blocks_size - || index_hash->blocks.uncompressed_size - < index_hash->records.uncompressed_size - || index_hash->blocks.index_list_size - < index_hash->records.index_list_size) - return LZMA_DATA_ERROR; - - // Check if this was the last Record. - index_hash->sequence = --index_hash->remaining == 0 - ? SEQ_PADDING_INIT : SEQ_UNPADDED; - } - - break; - } - - case SEQ_PADDING_INIT: - index_hash->pos = (LZMA_VLI_C(4) - index_size_unpadded( - index_hash->records.count, - index_hash->records.index_list_size)) & 3; - index_hash->sequence = SEQ_PADDING; - - // Fall through - - case SEQ_PADDING: - if (index_hash->pos > 0) { - --index_hash->pos; - if (in[(*in_pos)++] != 0x00) - return LZMA_DATA_ERROR; - - break; - } - - // Compare the sizes. - if (index_hash->blocks.blocks_size - != index_hash->records.blocks_size - || index_hash->blocks.uncompressed_size - != index_hash->records.uncompressed_size - || index_hash->blocks.index_list_size - != index_hash->records.index_list_size) - return LZMA_DATA_ERROR; - - // Finish the hashes and compare them. - lzma_check_finish(&index_hash->blocks.check, LZMA_CHECK_BEST); - lzma_check_finish(&index_hash->records.check, LZMA_CHECK_BEST); - if (memcmp(index_hash->blocks.check.buffer.u8, - index_hash->records.check.buffer.u8, - lzma_check_size(LZMA_CHECK_BEST)) != 0) - return LZMA_DATA_ERROR; - - // Finish the CRC32 calculation. - index_hash->crc32 = lzma_crc32(in + in_start, - *in_pos - in_start, index_hash->crc32); - - index_hash->sequence = SEQ_CRC32; - - // Fall through - - case SEQ_CRC32: - do { - if (*in_pos == in_size) - return LZMA_OK; - - if (((index_hash->crc32 >> (index_hash->pos * 8)) - & 0xFF) != in[(*in_pos)++]) - return LZMA_DATA_ERROR; - - } while (++index_hash->pos < 4); - - return LZMA_STREAM_END; - - default: - assert(0); - return LZMA_PROG_ERROR; - } - -out: - // Update the CRC32, - index_hash->crc32 = lzma_crc32(in + in_start, - *in_pos - in_start, index_hash->crc32); - - return ret; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_buffer_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_buffer_decoder.c deleted file mode 100644 index ae753155180..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_buffer_decoder.c +++ /dev/null @@ -1,91 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_buffer_decoder.c -/// \brief Single-call .xz Stream decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "stream_decoder.h" - - -extern LZMA_API(lzma_ret) -lzma_stream_buffer_decode(uint64_t *memlimit, uint32_t flags, - lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - // Sanity checks - if (in_pos == NULL || (in == NULL && *in_pos != in_size) - || *in_pos > in_size || out_pos == NULL - || (out == NULL && *out_pos != out_size) - || *out_pos > out_size) - return LZMA_PROG_ERROR; - - // Catch flags that are not allowed in buffer-to-buffer decoding. - if (flags & LZMA_TELL_ANY_CHECK) - return LZMA_PROG_ERROR; - - // Initialize the Stream decoder. - // TODO: We need something to tell the decoder that it can use the - // output buffer as workspace, and thus save significant amount of RAM. - lzma_next_coder stream_decoder = LZMA_NEXT_CODER_INIT; - lzma_ret ret = lzma_stream_decoder_init( - &stream_decoder, allocator, *memlimit, flags); - - if (ret == LZMA_OK) { - // Save the positions so that we can restore them in case - // an error occurs. - const size_t in_start = *in_pos; - const size_t out_start = *out_pos; - - // Do the actual decoding. - ret = stream_decoder.code(stream_decoder.coder, allocator, - in, in_pos, in_size, out, out_pos, out_size, - LZMA_FINISH); - - if (ret == LZMA_STREAM_END) { - ret = LZMA_OK; - } else { - // Something went wrong, restore the positions. - *in_pos = in_start; - *out_pos = out_start; - - if (ret == LZMA_OK) { - // Either the input was truncated or the - // output buffer was too small. - assert(*in_pos == in_size - || *out_pos == out_size); - - // If all the input was consumed, then the - // input is truncated, even if the output - // buffer is also full. This is because - // processing the last byte of the Stream - // never produces output. - if (*in_pos == in_size) - ret = LZMA_DATA_ERROR; - else - ret = LZMA_BUF_ERROR; - - } else if (ret == LZMA_MEMLIMIT_ERROR) { - // Let the caller know how much memory would - // have been needed. - uint64_t memusage; - (void)stream_decoder.memconfig( - stream_decoder.coder, - memlimit, &memusage, 0); - } - } - } - - // Free the decoder memory. This needs to be done even if - // initialization fails, because the internal API doesn't - // require the initialization function to free its memory on error. - lzma_next_end(&stream_decoder, allocator); - - return ret; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_buffer_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_buffer_encoder.c deleted file mode 100644 index dd94c22add3..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_buffer_encoder.c +++ /dev/null @@ -1,131 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_buffer_encoder.c -/// \brief Single-call .xz Stream encoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "index.h" - - -/// Maximum size of Index that has exactly one Record. -/// Index Indicator + Number of Records + Record + CRC32 rounded up to -/// the next multiple of four. -#define INDEX_BOUND ((1 + 1 + 2 * LZMA_VLI_BYTES_MAX + 4 + 3) & ~3) - -/// Stream Header, Stream Footer, and Index -#define HEADERS_BOUND (2 * LZMA_STREAM_HEADER_SIZE + INDEX_BOUND) - - -extern LZMA_API(size_t) -lzma_stream_buffer_bound(size_t uncompressed_size) -{ - // Get the maximum possible size of a Block. - const size_t block_bound = lzma_block_buffer_bound(uncompressed_size); - if (block_bound == 0) - return 0; - - // Catch the possible integer overflow and also prevent the size of - // the Stream exceeding LZMA_VLI_MAX (theoretically possible on - // 64-bit systems). - if (MIN(SIZE_MAX, LZMA_VLI_MAX) - block_bound < HEADERS_BOUND) - return 0; - - return block_bound + HEADERS_BOUND; -} - - -extern LZMA_API(lzma_ret) -lzma_stream_buffer_encode(lzma_filter *filters, lzma_check check, - lzma_allocator *allocator, const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos_ptr, size_t out_size) -{ - // Sanity checks - if (filters == NULL || (unsigned int)(check) > LZMA_CHECK_ID_MAX - || (in == NULL && in_size != 0) || out == NULL - || out_pos_ptr == NULL || *out_pos_ptr > out_size) - return LZMA_PROG_ERROR; - - // Note for the paranoids: Index encoder prevents the Stream from - // getting too big and still being accepted with LZMA_OK, and Block - // encoder catches if the input is too big. So we don't need to - // separately check if the buffers are too big. - - // Use a local copy. We update *out_pos_ptr only if everything - // succeeds. - size_t out_pos = *out_pos_ptr; - - // Check that there's enough space for both Stream Header and - // Stream Footer. - if (out_size - out_pos <= 2 * LZMA_STREAM_HEADER_SIZE) - return LZMA_BUF_ERROR; - - // Reserve space for Stream Footer so we don't need to check for - // available space again before encoding Stream Footer. - out_size -= LZMA_STREAM_HEADER_SIZE; - - // Encode the Stream Header. - lzma_stream_flags stream_flags = { - .version = 0, - .check = check, - }; - - if (lzma_stream_header_encode(&stream_flags, out + out_pos) - != LZMA_OK) - return LZMA_PROG_ERROR; - - out_pos += LZMA_STREAM_HEADER_SIZE; - - // Block - lzma_block block = { - .version = 0, - .check = check, - .filters = filters, - }; - - return_if_error(lzma_block_buffer_encode(&block, allocator, - in, in_size, out, &out_pos, out_size)); - - // Index - { - // Create an Index with one Record. - lzma_index *i = lzma_index_init(NULL, NULL); - if (i == NULL) - return LZMA_MEM_ERROR; - - lzma_ret ret = lzma_index_append(i, NULL, - lzma_block_unpadded_size(&block), - block.uncompressed_size); - - // If adding the Record was successful, encode the Index - // and get its size which will be stored into Stream Footer. - if (ret == LZMA_OK) { - ret = lzma_index_buffer_encode( - i, out, &out_pos, out_size); - - stream_flags.backward_size = lzma_index_size(i); - } - - lzma_index_end(i, NULL); - - if (ret != LZMA_OK) - return ret; - } - - // Stream Footer. We have already reserved space for this. - if (lzma_stream_footer_encode(&stream_flags, out + out_pos) - != LZMA_OK) - return LZMA_PROG_ERROR; - - out_pos += LZMA_STREAM_HEADER_SIZE; - - // Everything went fine, make the new output position available - // to the application. - *out_pos_ptr = out_pos; - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_decoder.c deleted file mode 100644 index dcc047d9673..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_decoder.c +++ /dev/null @@ -1,445 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_decoder.c -/// \brief Decodes .xz Streams -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "stream_decoder.h" -#include "block_decoder.h" - - -struct lzma_coder_s { - enum { - SEQ_STREAM_HEADER, - SEQ_BLOCK_HEADER, - SEQ_BLOCK, - SEQ_INDEX, - SEQ_STREAM_FOOTER, - SEQ_STREAM_PADDING, - } sequence; - - /// Block or Metadata decoder. This takes little memory and the same - /// data structure can be used to decode every Block Header, so it's - /// a good idea to have a separate lzma_next_coder structure for it. - lzma_next_coder block_decoder; - - /// Block options decoded by the Block Header decoder and used by - /// the Block decoder. - lzma_block block_options; - - /// Stream Flags from Stream Header - lzma_stream_flags stream_flags; - - /// Index is hashed so that it can be compared to the sizes of Blocks - /// with O(1) memory usage. - lzma_index_hash *index_hash; - - /// Memory usage limit - uint64_t memlimit; - - /// Amount of memory actually needed (only an estimate) - uint64_t memusage; - - /// If true, LZMA_NO_CHECK is returned if the Stream has - /// no integrity check. - bool tell_no_check; - - /// If true, LZMA_UNSUPPORTED_CHECK is returned if the Stream has - /// an integrity check that isn't supported by this liblzma build. - bool tell_unsupported_check; - - /// If true, LZMA_GET_CHECK is returned after decoding Stream Header. - bool tell_any_check; - - /// If true, we will decode concatenated Streams that possibly have - /// Stream Padding between or after them. LZMA_STREAM_END is returned - /// once the application isn't giving us any new input, and we aren't - /// in the middle of a Stream, and possible Stream Padding is a - /// multiple of four bytes. - bool concatenated; - - /// When decoding concatenated Streams, this is true as long as we - /// are decoding the first Stream. This is needed to avoid misleading - /// LZMA_FORMAT_ERROR in case the later Streams don't have valid magic - /// bytes. - bool first_stream; - - /// Write position in buffer[] and position in Stream Padding - size_t pos; - - /// Buffer to hold Stream Header, Block Header, and Stream Footer. - /// Block Header has biggest maximum size. - uint8_t buffer[LZMA_BLOCK_HEADER_SIZE_MAX]; -}; - - -static lzma_ret -stream_decoder_reset(lzma_coder *coder, lzma_allocator *allocator) -{ - // Initialize the Index hash used to verify the Index. - coder->index_hash = lzma_index_hash_init(coder->index_hash, allocator); - if (coder->index_hash == NULL) - return LZMA_MEM_ERROR; - - // Reset the rest of the variables. - coder->sequence = SEQ_STREAM_HEADER; - coder->pos = 0; - - return LZMA_OK; -} - - -static lzma_ret -stream_decode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - // When decoding the actual Block, it may be able to produce more - // output even if we don't give it any new input. - while (true) - switch (coder->sequence) { - case SEQ_STREAM_HEADER: { - // Copy the Stream Header to the internal buffer. - lzma_bufcpy(in, in_pos, in_size, coder->buffer, &coder->pos, - LZMA_STREAM_HEADER_SIZE); - - // Return if we didn't get the whole Stream Header yet. - if (coder->pos < LZMA_STREAM_HEADER_SIZE) - return LZMA_OK; - - coder->pos = 0; - - // Decode the Stream Header. - const lzma_ret ret = lzma_stream_header_decode( - &coder->stream_flags, coder->buffer); - if (ret != LZMA_OK) - return ret == LZMA_FORMAT_ERROR && !coder->first_stream - ? LZMA_DATA_ERROR : ret; - - // If we are decoding concatenated Streams, and the later - // Streams have invalid Header Magic Bytes, we give - // LZMA_DATA_ERROR instead of LZMA_FORMAT_ERROR. - coder->first_stream = false; - - // Copy the type of the Check so that Block Header and Block - // decoders see it. - coder->block_options.check = coder->stream_flags.check; - - // Even if we return LZMA_*_CHECK below, we want - // to continue from Block Header decoding. - coder->sequence = SEQ_BLOCK_HEADER; - - // Detect if there's no integrity check or if it is - // unsupported if those were requested by the application. - if (coder->tell_no_check && coder->stream_flags.check - == LZMA_CHECK_NONE) - return LZMA_NO_CHECK; - - if (coder->tell_unsupported_check - && !lzma_check_is_supported( - coder->stream_flags.check)) - return LZMA_UNSUPPORTED_CHECK; - - if (coder->tell_any_check) - return LZMA_GET_CHECK; - } - - // Fall through - - case SEQ_BLOCK_HEADER: { - if (*in_pos >= in_size) - return LZMA_OK; - - if (coder->pos == 0) { - // Detect if it's Index. - if (in[*in_pos] == 0x00) { - coder->sequence = SEQ_INDEX; - break; - } - - // Calculate the size of the Block Header. Note that - // Block Header decoder wants to see this byte too - // so don't advance *in_pos. - coder->block_options.header_size - = lzma_block_header_size_decode( - in[*in_pos]); - } - - // Copy the Block Header to the internal buffer. - lzma_bufcpy(in, in_pos, in_size, coder->buffer, &coder->pos, - coder->block_options.header_size); - - // Return if we didn't get the whole Block Header yet. - if (coder->pos < coder->block_options.header_size) - return LZMA_OK; - - coder->pos = 0; - - // Set up a buffer to hold the filter chain. Block Header - // decoder will initialize all members of this array so - // we don't need to do it here. - lzma_filter filters[LZMA_FILTERS_MAX + 1]; - coder->block_options.filters = filters; - - // Decode the Block Header. - return_if_error(lzma_block_header_decode(&coder->block_options, - allocator, coder->buffer)); - - // Check the memory usage limit. - const uint64_t memusage = lzma_raw_decoder_memusage(filters); - lzma_ret ret; - - if (memusage == UINT64_MAX) { - // One or more unknown Filter IDs. - ret = LZMA_OPTIONS_ERROR; - } else { - // Now we can set coder->memusage since we know that - // the filter chain is valid. We don't want - // lzma_memusage() to return UINT64_MAX in case of - // invalid filter chain. - coder->memusage = memusage; - - if (memusage > coder->memlimit) { - // The chain would need too much memory. - ret = LZMA_MEMLIMIT_ERROR; - } else { - // Memory usage is OK. - // Initialize the Block decoder. - ret = lzma_block_decoder_init( - &coder->block_decoder, - allocator, - &coder->block_options); - } - } - - // Free the allocated filter options since they are needed - // only to initialize the Block decoder. - for (size_t i = 0; i < LZMA_FILTERS_MAX; ++i) - lzma_free(filters[i].options, allocator); - - coder->block_options.filters = NULL; - - // Check if memory usage calculation and Block enocoder - // initialization succeeded. - if (ret != LZMA_OK) - return ret; - - coder->sequence = SEQ_BLOCK; - } - - // Fall through - - case SEQ_BLOCK: { - const lzma_ret ret = coder->block_decoder.code( - coder->block_decoder.coder, allocator, - in, in_pos, in_size, out, out_pos, out_size, - action); - - if (ret != LZMA_STREAM_END) - return ret; - - // Block decoded successfully. Add the new size pair to - // the Index hash. - return_if_error(lzma_index_hash_append(coder->index_hash, - lzma_block_unpadded_size( - &coder->block_options), - coder->block_options.uncompressed_size)); - - coder->sequence = SEQ_BLOCK_HEADER; - break; - } - - case SEQ_INDEX: { - // If we don't have any input, don't call - // lzma_index_hash_decode() since it would return - // LZMA_BUF_ERROR, which we must not do here. - if (*in_pos >= in_size) - return LZMA_OK; - - // Decode the Index and compare it to the hash calculated - // from the sizes of the Blocks (if any). - const lzma_ret ret = lzma_index_hash_decode(coder->index_hash, - in, in_pos, in_size); - if (ret != LZMA_STREAM_END) - return ret; - - coder->sequence = SEQ_STREAM_FOOTER; - } - - // Fall through - - case SEQ_STREAM_FOOTER: { - // Copy the Stream Footer to the internal buffer. - lzma_bufcpy(in, in_pos, in_size, coder->buffer, &coder->pos, - LZMA_STREAM_HEADER_SIZE); - - // Return if we didn't get the whole Stream Footer yet. - if (coder->pos < LZMA_STREAM_HEADER_SIZE) - return LZMA_OK; - - coder->pos = 0; - - // Decode the Stream Footer. The decoder gives - // LZMA_FORMAT_ERROR if the magic bytes don't match, - // so convert that return code to LZMA_DATA_ERROR. - lzma_stream_flags footer_flags; - const lzma_ret ret = lzma_stream_footer_decode( - &footer_flags, coder->buffer); - if (ret != LZMA_OK) - return ret == LZMA_FORMAT_ERROR - ? LZMA_DATA_ERROR : ret; - - // Check that Index Size stored in the Stream Footer matches - // the real size of the Index field. - if (lzma_index_hash_size(coder->index_hash) - != footer_flags.backward_size) - return LZMA_DATA_ERROR; - - // Compare that the Stream Flags fields are identical in - // both Stream Header and Stream Footer. - return_if_error(lzma_stream_flags_compare( - &coder->stream_flags, &footer_flags)); - - if (!coder->concatenated) - return LZMA_STREAM_END; - - coder->sequence = SEQ_STREAM_PADDING; - } - - // Fall through - - case SEQ_STREAM_PADDING: - assert(coder->concatenated); - - // Skip over possible Stream Padding. - while (true) { - if (*in_pos >= in_size) { - // Unless LZMA_FINISH was used, we cannot - // know if there's more input coming later. - if (action != LZMA_FINISH) - return LZMA_OK; - - // Stream Padding must be a multiple of - // four bytes. - return coder->pos == 0 - ? LZMA_STREAM_END - : LZMA_DATA_ERROR; - } - - // If the byte is not zero, it probably indicates - // beginning of a new Stream (or the file is corrupt). - if (in[*in_pos] != 0x00) - break; - - ++*in_pos; - coder->pos = (coder->pos + 1) & 3; - } - - // Stream Padding must be a multiple of four bytes (empty - // Stream Padding is OK). - if (coder->pos != 0) { - ++*in_pos; - return LZMA_DATA_ERROR; - } - - // Prepare to decode the next Stream. - return_if_error(stream_decoder_reset(coder, allocator)); - break; - - default: - assert(0); - return LZMA_PROG_ERROR; - } - - return LZMA_OK; -} - - -static void -stream_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->block_decoder, allocator); - lzma_index_hash_end(coder->index_hash, allocator); - lzma_free(coder, allocator); - return; -} - - -static lzma_check -stream_decoder_get_check(const lzma_coder *coder) -{ - return coder->stream_flags.check; -} - - -static lzma_ret -stream_decoder_memconfig(lzma_coder *coder, uint64_t *memusage, - uint64_t *old_memlimit, uint64_t new_memlimit) -{ - if (new_memlimit != 0 && new_memlimit < coder->memusage) - return LZMA_MEMLIMIT_ERROR; - - *memusage = coder->memusage; - *old_memlimit = coder->memlimit; - coder->memlimit = new_memlimit; - - return LZMA_OK; -} - - -extern lzma_ret -lzma_stream_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - uint64_t memlimit, uint32_t flags) -{ - lzma_next_coder_init(&lzma_stream_decoder_init, next, allocator); - - if (memlimit == 0) - return LZMA_PROG_ERROR; - - if (flags & ~LZMA_SUPPORTED_FLAGS) - return LZMA_OPTIONS_ERROR; - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &stream_decode; - next->end = &stream_decoder_end; - next->get_check = &stream_decoder_get_check; - next->memconfig = &stream_decoder_memconfig; - - next->coder->block_decoder = LZMA_NEXT_CODER_INIT; - next->coder->index_hash = NULL; - } - - next->coder->memlimit = memlimit; - next->coder->memusage = LZMA_MEMUSAGE_BASE; - next->coder->tell_no_check = (flags & LZMA_TELL_NO_CHECK) != 0; - next->coder->tell_unsupported_check - = (flags & LZMA_TELL_UNSUPPORTED_CHECK) != 0; - next->coder->tell_any_check = (flags & LZMA_TELL_ANY_CHECK) != 0; - next->coder->concatenated = (flags & LZMA_CONCATENATED) != 0; - next->coder->first_stream = true; - - return stream_decoder_reset(next->coder, allocator); -} - - -extern LZMA_API(lzma_ret) -lzma_stream_decoder(lzma_stream *strm, uint64_t memlimit, uint32_t flags) -{ - lzma_next_strm_init(lzma_stream_decoder_init, strm, memlimit, flags); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_decoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_decoder.h deleted file mode 100644 index e54ac28f44a..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_decoder.h +++ /dev/null @@ -1,21 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_decoder.h -/// \brief Decodes .xz Streams -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_STREAM_DECODER_H -#define LZMA_STREAM_DECODER_H - -#include "common.h" - -extern lzma_ret lzma_stream_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, uint64_t memlimit, uint32_t flags); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_encoder.c deleted file mode 100644 index 292efc8248b..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_encoder.c +++ /dev/null @@ -1,274 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_encoder.c -/// \brief Encodes .xz Streams -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "stream_encoder.h" -#include "block_encoder.h" -#include "index_encoder.h" - - -struct lzma_coder_s { - enum { - SEQ_STREAM_HEADER, - SEQ_BLOCK_INIT, - SEQ_BLOCK_HEADER, - SEQ_BLOCK_ENCODE, - SEQ_INDEX_ENCODE, - SEQ_STREAM_FOOTER, - } sequence; - - /// Block - lzma_next_coder block_encoder; - - /// Options for the Block encoder - lzma_block block_options; - - /// Index encoder. This is separate from Block encoder, because this - /// doesn't take much memory, and when encoding multiple Streams - /// with the same encoding options we avoid reallocating memory. - lzma_next_coder index_encoder; - - /// Index to hold sizes of the Blocks - lzma_index *index; - - /// Read position in buffer[] - size_t buffer_pos; - - /// Total number of bytes in buffer[] - size_t buffer_size; - - /// Buffer to hold Stream Header, Block Header, and Stream Footer. - /// Block Header has biggest maximum size. - uint8_t buffer[LZMA_BLOCK_HEADER_SIZE_MAX]; -}; - - -static lzma_ret -block_encoder_init(lzma_coder *coder, lzma_allocator *allocator) -{ - // Prepare the Block options. Even though Block encoder doesn't need - // compressed_size, uncompressed_size, and header_size to be - // initialized, it is a good idea to do it here, because this way - // we catch if someone gave us Filter ID that cannot be used in - // Blocks/Streams. - coder->block_options.compressed_size = LZMA_VLI_UNKNOWN; - coder->block_options.uncompressed_size = LZMA_VLI_UNKNOWN; - - return_if_error(lzma_block_header_size(&coder->block_options)); - - // Initialize the actual Block encoder. - return lzma_block_encoder_init(&coder->block_encoder, allocator, - &coder->block_options); -} - - -static lzma_ret -stream_encode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - // Main loop - while (*out_pos < out_size) - switch (coder->sequence) { - case SEQ_STREAM_HEADER: - case SEQ_BLOCK_HEADER: - case SEQ_STREAM_FOOTER: - lzma_bufcpy(coder->buffer, &coder->buffer_pos, - coder->buffer_size, out, out_pos, out_size); - if (coder->buffer_pos < coder->buffer_size) - return LZMA_OK; - - if (coder->sequence == SEQ_STREAM_FOOTER) - return LZMA_STREAM_END; - - coder->buffer_pos = 0; - ++coder->sequence; - break; - - case SEQ_BLOCK_INIT: { - if (*in_pos == in_size) { - // If we are requested to flush or finish the current - // Block, return LZMA_STREAM_END immediatelly since - // there's nothing to do. - if (action != LZMA_FINISH) - return action == LZMA_RUN - ? LZMA_OK : LZMA_STREAM_END; - - // The application had used LZMA_FULL_FLUSH to finish - // the previous Block, but now wants to finish without - // encoding new data, or it is simply creating an - // empty Stream with no Blocks. - // - // Initialize the Index encoder, and continue to - // actually encoding the Index. - return_if_error(lzma_index_encoder_init( - &coder->index_encoder, allocator, - coder->index)); - coder->sequence = SEQ_INDEX_ENCODE; - break; - } - - // Initialize the Block encoder except if this is the first - // Block, because stream_encoder_init() has already - // initialized it. - if (lzma_index_count(coder->index) != 0) - return_if_error(block_encoder_init(coder, allocator)); - - // Encode the Block Header. This shouldn't fail since we have - // already initialized the Block encoder. - if (lzma_block_header_encode(&coder->block_options, - coder->buffer) != LZMA_OK) - return LZMA_PROG_ERROR; - - coder->buffer_size = coder->block_options.header_size; - coder->sequence = SEQ_BLOCK_HEADER; - break; - } - - case SEQ_BLOCK_ENCODE: { - static const lzma_action convert[4] = { - LZMA_RUN, - LZMA_SYNC_FLUSH, - LZMA_FINISH, - LZMA_FINISH, - }; - - const lzma_ret ret = coder->block_encoder.code( - coder->block_encoder.coder, allocator, - in, in_pos, in_size, - out, out_pos, out_size, convert[action]); - if (ret != LZMA_STREAM_END || action == LZMA_SYNC_FLUSH) - return ret; - - // Add a new Index Record. - const lzma_vli unpadded_size = lzma_block_unpadded_size( - &coder->block_options); - assert(unpadded_size != 0); - return_if_error(lzma_index_append(coder->index, allocator, - unpadded_size, - coder->block_options.uncompressed_size)); - - coder->sequence = SEQ_BLOCK_INIT; - break; - } - - case SEQ_INDEX_ENCODE: { - // Call the Index encoder. It doesn't take any input, so - // those pointers can be NULL. - const lzma_ret ret = coder->index_encoder.code( - coder->index_encoder.coder, allocator, - NULL, NULL, 0, - out, out_pos, out_size, LZMA_RUN); - if (ret != LZMA_STREAM_END) - return ret; - - // Encode the Stream Footer into coder->buffer. - const lzma_stream_flags stream_flags = { - .version = 0, - .backward_size = lzma_index_size(coder->index), - .check = coder->block_options.check, - }; - - if (lzma_stream_footer_encode(&stream_flags, coder->buffer) - != LZMA_OK) - return LZMA_PROG_ERROR; - - coder->buffer_size = LZMA_STREAM_HEADER_SIZE; - coder->sequence = SEQ_STREAM_FOOTER; - break; - } - - default: - assert(0); - return LZMA_PROG_ERROR; - } - - return LZMA_OK; -} - - -static void -stream_encoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->block_encoder, allocator); - lzma_next_end(&coder->index_encoder, allocator); - lzma_index_end(coder->index, allocator); - lzma_free(coder, allocator); - return; -} - - -extern lzma_ret -lzma_stream_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *filters, lzma_check check) -{ - lzma_next_coder_init(&lzma_stream_encoder_init, next, allocator); - - if (filters == NULL) - return LZMA_PROG_ERROR; - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &stream_encode; - next->end = &stream_encoder_end; - - next->coder->block_encoder = LZMA_NEXT_CODER_INIT; - next->coder->index_encoder = LZMA_NEXT_CODER_INIT; - next->coder->index = NULL; - } - - // Basic initializations - next->coder->sequence = SEQ_STREAM_HEADER; - next->coder->block_options.version = 0; - next->coder->block_options.check = check; - next->coder->block_options.filters = (lzma_filter *)(filters); - - // Initialize the Index - next->coder->index = lzma_index_init(next->coder->index, allocator); - if (next->coder->index == NULL) - return LZMA_MEM_ERROR; - - // Encode the Stream Header - lzma_stream_flags stream_flags = { - .version = 0, - .check = check, - }; - return_if_error(lzma_stream_header_encode( - &stream_flags, next->coder->buffer)); - - next->coder->buffer_pos = 0; - next->coder->buffer_size = LZMA_STREAM_HEADER_SIZE; - - // Initialize the Block encoder. This way we detect if the given - // filters are supported by the current liblzma build, and the - // application doesn't need to keep the filters structure available - // unless it is going to use LZMA_FULL_FLUSH. - return block_encoder_init(next->coder, allocator); -} - - -extern LZMA_API(lzma_ret) -lzma_stream_encoder(lzma_stream *strm, - const lzma_filter *filters, lzma_check check) -{ - lzma_next_strm_init(lzma_stream_encoder_init, strm, filters, check); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_SYNC_FLUSH] = true; - strm->internal->supported_actions[LZMA_FULL_FLUSH] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_encoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_encoder.h deleted file mode 100644 index 46a7aed72ea..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_encoder.h +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_encoder.h -/// \brief Encodes .xz Streams -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_STREAM_ENCODER_H -#define LZMA_STREAM_ENCODER_H - -#include "common.h" - - -extern lzma_ret lzma_stream_encoder_init( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *filters, lzma_check check); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_common.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_common.c deleted file mode 100644 index fbe8eb8abda..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_common.c +++ /dev/null @@ -1,47 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_flags_common.c -/// \brief Common stuff for Stream flags coders -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "stream_flags_common.h" - - -const uint8_t lzma_header_magic[6] = { 0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00 }; -const uint8_t lzma_footer_magic[2] = { 0x59, 0x5A }; - - -extern LZMA_API(lzma_ret) -lzma_stream_flags_compare( - const lzma_stream_flags *a, const lzma_stream_flags *b) -{ - // We can compare only version 0 structures. - if (a->version != 0 || b->version != 0) - return LZMA_OPTIONS_ERROR; - - // Check type - if ((unsigned int)(a->check) > LZMA_CHECK_ID_MAX - || (unsigned int)(b->check) > LZMA_CHECK_ID_MAX) - return LZMA_PROG_ERROR; - - if (a->check != b->check) - return LZMA_DATA_ERROR; - - // Backward Sizes are compared only if they are known in both. - if (a->backward_size != LZMA_VLI_UNKNOWN - && b->backward_size != LZMA_VLI_UNKNOWN) { - if (!is_backward_size_valid(a) || !is_backward_size_valid(b)) - return LZMA_PROG_ERROR; - - if (a->backward_size != b->backward_size) - return LZMA_DATA_ERROR; - } - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_common.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_common.h deleted file mode 100644 index 9f3122a3b1e..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_common.h +++ /dev/null @@ -1,33 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_flags_common.h -/// \brief Common stuff for Stream flags coders -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_STREAM_FLAGS_COMMON_H -#define LZMA_STREAM_FLAGS_COMMON_H - -#include "common.h" - -/// Size of the Stream Flags field -#define LZMA_STREAM_FLAGS_SIZE 2 - -extern const uint8_t lzma_header_magic[6]; -extern const uint8_t lzma_footer_magic[2]; - - -static inline bool -is_backward_size_valid(const lzma_stream_flags *options) -{ - return options->backward_size >= LZMA_BACKWARD_SIZE_MIN - && options->backward_size <= LZMA_BACKWARD_SIZE_MAX - && (options->backward_size & 3) == 0; -} - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_decoder.c deleted file mode 100644 index 3dbbbcf4445..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_decoder.c +++ /dev/null @@ -1,82 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_flags_decoder.c -/// \brief Decodes Stream Header and Stream Footer from .xz files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "stream_flags_common.h" - - -static bool -stream_flags_decode(lzma_stream_flags *options, const uint8_t *in) -{ - // Reserved bits must be unset. - if (in[0] != 0x00 || (in[1] & 0xF0)) - return true; - - options->version = 0; - options->check = in[1] & 0x0F; - - return false; -} - - -extern LZMA_API(lzma_ret) -lzma_stream_header_decode(lzma_stream_flags *options, const uint8_t *in) -{ - // Magic - if (memcmp(in, lzma_header_magic, sizeof(lzma_header_magic)) != 0) - return LZMA_FORMAT_ERROR; - - // Verify the CRC32 so we can distinguish between corrupt - // and unsupported files. - const uint32_t crc = lzma_crc32(in + sizeof(lzma_header_magic), - LZMA_STREAM_FLAGS_SIZE, 0); - if (crc != integer_read_32(in + sizeof(lzma_header_magic) - + LZMA_STREAM_FLAGS_SIZE)) - return LZMA_DATA_ERROR; - - // Stream Flags - if (stream_flags_decode(options, in + sizeof(lzma_header_magic))) - return LZMA_OPTIONS_ERROR; - - // Set Backward Size to indicate unknown value. That way - // lzma_stream_flags_compare() can be used to compare Stream Header - // and Stream Footer while keeping it useful also for comparing - // two Stream Footers. - options->backward_size = LZMA_VLI_UNKNOWN; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_stream_footer_decode(lzma_stream_flags *options, const uint8_t *in) -{ - // Magic - if (memcmp(in + sizeof(uint32_t) * 2 + LZMA_STREAM_FLAGS_SIZE, - lzma_footer_magic, sizeof(lzma_footer_magic)) != 0) - return LZMA_FORMAT_ERROR; - - // CRC32 - const uint32_t crc = lzma_crc32(in + sizeof(uint32_t), - sizeof(uint32_t) + LZMA_STREAM_FLAGS_SIZE, 0); - if (crc != integer_read_32(in)) - return LZMA_DATA_ERROR; - - // Stream Flags - if (stream_flags_decode(options, in + sizeof(uint32_t) * 2)) - return LZMA_OPTIONS_ERROR; - - // Backward Size - options->backward_size = integer_read_32(in + sizeof(uint32_t)); - options->backward_size = (options->backward_size + 1) * 4; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_encoder.c deleted file mode 100644 index ecbd0f13c31..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/stream_flags_encoder.c +++ /dev/null @@ -1,86 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_flags_encoder.c -/// \brief Encodes Stream Header and Stream Footer for .xz files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "stream_flags_common.h" - - -static bool -stream_flags_encode(const lzma_stream_flags *options, uint8_t *out) -{ - if ((unsigned int)(options->check) > LZMA_CHECK_ID_MAX) - return true; - - out[0] = 0x00; - out[1] = options->check; - - return false; -} - - -extern LZMA_API(lzma_ret) -lzma_stream_header_encode(const lzma_stream_flags *options, uint8_t *out) -{ - assert(sizeof(lzma_header_magic) + LZMA_STREAM_FLAGS_SIZE - + 4 == LZMA_STREAM_HEADER_SIZE); - - if (options->version != 0) - return LZMA_OPTIONS_ERROR; - - // Magic - memcpy(out, lzma_header_magic, sizeof(lzma_header_magic)); - - // Stream Flags - if (stream_flags_encode(options, out + sizeof(lzma_header_magic))) - return LZMA_PROG_ERROR; - - // CRC32 of the Stream Header - const uint32_t crc = lzma_crc32(out + sizeof(lzma_header_magic), - LZMA_STREAM_FLAGS_SIZE, 0); - - integer_write_32(out + sizeof(lzma_header_magic) - + LZMA_STREAM_FLAGS_SIZE, crc); - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_stream_footer_encode(const lzma_stream_flags *options, uint8_t *out) -{ - assert(2 * 4 + LZMA_STREAM_FLAGS_SIZE + sizeof(lzma_footer_magic) - == LZMA_STREAM_HEADER_SIZE); - - if (options->version != 0) - return LZMA_OPTIONS_ERROR; - - // Backward Size - if (!is_backward_size_valid(options)) - return LZMA_PROG_ERROR; - - integer_write_32(out + 4, options->backward_size / 4 - 1); - - // Stream Flags - if (stream_flags_encode(options, out + 2 * 4)) - return LZMA_PROG_ERROR; - - // CRC32 - const uint32_t crc = lzma_crc32( - out + 4, 4 + LZMA_STREAM_FLAGS_SIZE, 0); - - integer_write_32(out, crc); - - // Magic - memcpy(out + 2 * 4 + LZMA_STREAM_FLAGS_SIZE, - lzma_footer_magic, sizeof(lzma_footer_magic)); - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/vli_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/vli_decoder.c deleted file mode 100644 index ffb27cadc53..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/vli_decoder.c +++ /dev/null @@ -1,86 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file vli_decoder.c -/// \brief Decodes variable-length integers -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - - -extern LZMA_API(lzma_ret) -lzma_vli_decode(lzma_vli *restrict vli, size_t *restrict vli_pos, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size) -{ - // If we haven't been given vli_pos, work in single-call mode. - size_t vli_pos_internal = 0; - if (vli_pos == NULL) { - vli_pos = &vli_pos_internal; - *vli = 0; - - // If there's no input, use LZMA_DATA_ERROR. This way it is - // easy to decode VLIs from buffers that have known size, - // and get the correct error code in case the buffer is - // too short. - if (*in_pos >= in_size) - return LZMA_DATA_ERROR; - - } else { - // Initialize *vli when starting to decode a new integer. - if (*vli_pos == 0) - *vli = 0; - - // Validate the arguments. - if (*vli_pos >= LZMA_VLI_BYTES_MAX - || (*vli >> (*vli_pos * 7)) != 0) - return LZMA_PROG_ERROR;; - - if (*in_pos >= in_size) - return LZMA_BUF_ERROR; - } - - do { - // Read the next byte. Use a temporary variable so that we - // can update *in_pos immediatelly. - const uint8_t byte = in[*in_pos]; - ++*in_pos; - - // Add the newly read byte to *vli. - *vli += (lzma_vli)(byte & 0x7F) << (*vli_pos * 7); - ++*vli_pos; - - // Check if this is the last byte of a multibyte integer. - if ((byte & 0x80) == 0) { - // We don't allow using variable-length integers as - // padding i.e. the encoding must use the most the - // compact form. - if (byte == 0x00 && *vli_pos > 1) - return LZMA_DATA_ERROR; - - return vli_pos == &vli_pos_internal - ? LZMA_OK : LZMA_STREAM_END; - } - - // There is at least one more byte coming. If we have already - // read maximum number of bytes, the integer is considered - // corrupt. - // - // If we need bigger integers in future, old versions liblzma - // will confusingly indicate the file being corrupt istead of - // unsupported. I suppose it's still better this way, because - // in the foreseeable future (writing this in 2008) the only - // reason why files would appear having over 63-bit integers - // is that the files are simply corrupt. - if (*vli_pos == LZMA_VLI_BYTES_MAX) - return LZMA_DATA_ERROR; - - } while (*in_pos < in_size); - - return vli_pos == &vli_pos_internal ? LZMA_DATA_ERROR : LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/vli_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/vli_encoder.c deleted file mode 100644 index ebc9f344acf..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/vli_encoder.c +++ /dev/null @@ -1,69 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file vli_encoder.c -/// \brief Encodes variable-length integers -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - - -extern LZMA_API(lzma_ret) -lzma_vli_encode(lzma_vli vli, size_t *restrict vli_pos, - uint8_t *restrict out, size_t *restrict out_pos, - size_t out_size) -{ - // If we haven't been given vli_pos, work in single-call mode. - size_t vli_pos_internal = 0; - if (vli_pos == NULL) { - vli_pos = &vli_pos_internal; - - // In single-call mode, we expect that the caller has - // reserved enough output space. - if (*out_pos >= out_size) - return LZMA_PROG_ERROR; - } else { - // This never happens when we are called by liblzma, but - // may happen if called directly from an application. - if (*out_pos >= out_size) - return LZMA_BUF_ERROR; - } - - // Validate the arguments. - if (*vli_pos >= LZMA_VLI_BYTES_MAX || vli > LZMA_VLI_MAX) - return LZMA_PROG_ERROR; - - // Shift vli so that the next bits to encode are the lowest. In - // single-call mode this never changes vli since *vli_pos is zero. - vli >>= *vli_pos * 7; - - // Write the non-last bytes in a loop. - while (vli >= 0x80) { - // We don't need *vli_pos during this function call anymore, - // but update it here so that it is ready if we need to - // return before the whole integer has been decoded. - ++*vli_pos; - assert(*vli_pos < LZMA_VLI_BYTES_MAX); - - // Write the next byte. - out[*out_pos] = (uint8_t)(vli) | 0x80; - vli >>= 7; - - if (++*out_pos == out_size) - return vli_pos == &vli_pos_internal - ? LZMA_PROG_ERROR : LZMA_OK; - } - - // Write the last byte. - out[*out_pos] = (uint8_t)(vli); - ++*out_pos; - ++*vli_pos; - - return vli_pos == &vli_pos_internal ? LZMA_OK : LZMA_STREAM_END; - -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/vli_size.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/common/vli_size.c deleted file mode 100644 index ec1b4fa488b..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/common/vli_size.c +++ /dev/null @@ -1,30 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file vli_size.c -/// \brief Calculates the encoded size of a variable-length integer -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - - -extern LZMA_API(uint32_t) -lzma_vli_size(lzma_vli vli) -{ - if (vli > LZMA_VLI_MAX) - return 0; - - uint32_t i = 0; - do { - vli >>= 7; - ++i; - } while (vli != 0); - - assert(i <= LZMA_VLI_BYTES_MAX); - return i; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/Makefile.inc b/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/Makefile.inc deleted file mode 100644 index c7739b44223..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/Makefile.inc +++ /dev/null @@ -1,23 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -liblzma_la_SOURCES += \ - delta/delta_common.c \ - delta/delta_common.h \ - delta/delta_private.h - -if COND_ENCODER_DELTA -liblzma_la_SOURCES += \ - delta/delta_encoder.c \ - delta/delta_encoder.h -endif - -if COND_DECODER_DELTA -liblzma_la_SOURCES += \ - delta/delta_decoder.c \ - delta/delta_decoder.h -endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_common.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_common.c deleted file mode 100644 index 6d55ff6538e..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_common.c +++ /dev/null @@ -1,73 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file delta_common.c -/// \brief Common stuff for Delta encoder and decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "delta_common.h" -#include "delta_private.h" - - -static void -delta_coder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder, allocator); - return; -} - - -extern lzma_ret -lzma_delta_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, lzma_code_function code) -{ - // Allocate memory for the decoder if needed. - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - // End function is the same for encoder and decoder. - next->end = &delta_coder_end; - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - // Coding function is different for encoder and decoder. - next->code = code; - - // Validate the options. - if (lzma_delta_coder_memusage(filters[0].options) == UINT64_MAX) - return LZMA_OPTIONS_ERROR; - - // Set the delta distance. - const lzma_options_delta *opt = filters[0].options; - next->coder->distance = opt->dist; - - // Initialize the rest of the variables. - next->coder->pos = 0; - memzero(next->coder->history, LZMA_DELTA_DIST_MAX); - - // Initialize the next decoder in the chain, if any. - return lzma_next_filter_init(&next->coder->next, - allocator, filters + 1); -} - - -extern uint64_t -lzma_delta_coder_memusage(const void *options) -{ - const lzma_options_delta *opt = options; - - if (opt == NULL || opt->type != LZMA_DELTA_TYPE_BYTE - || opt->dist < LZMA_DELTA_DIST_MIN - || opt->dist > LZMA_DELTA_DIST_MAX) - return UINT64_MAX; - - return sizeof(lzma_coder); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_common.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_common.h deleted file mode 100644 index 7e7e1baaf68..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_common.h +++ /dev/null @@ -1,20 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file delta_common.h -/// \brief Common stuff for Delta encoder and decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_DELTA_COMMON_H -#define LZMA_DELTA_COMMON_H - -#include "common.h" - -extern uint64_t lzma_delta_coder_memusage(const void *options); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_decoder.c deleted file mode 100644 index 2ddf163d8d0..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_decoder.c +++ /dev/null @@ -1,75 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file delta_decoder.c -/// \brief Delta filter decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "delta_decoder.h" -#include "delta_private.h" - - -static void -decode_buffer(lzma_coder *coder, uint8_t *buffer, size_t size) -{ - const size_t distance = coder->distance; - - for (size_t i = 0; i < size; ++i) { - buffer[i] += coder->history[(distance + coder->pos) & 0xFF]; - coder->history[coder->pos-- & 0xFF] = buffer[i]; - } -} - - -static lzma_ret -delta_decode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - assert(coder->next.code != NULL); - - const size_t out_start = *out_pos; - - const lzma_ret ret = coder->next.code(coder->next.coder, allocator, - in, in_pos, in_size, out, out_pos, out_size, - action); - - decode_buffer(coder, out + out_start, *out_pos - out_start); - - return ret; -} - - -extern lzma_ret -lzma_delta_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - return lzma_delta_coder_init(next, allocator, filters, &delta_decode); -} - - -extern lzma_ret -lzma_delta_props_decode(void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size) -{ - if (props_size != 1) - return LZMA_OPTIONS_ERROR; - - lzma_options_delta *opt - = lzma_alloc(sizeof(lzma_options_delta), allocator); - if (opt == NULL) - return LZMA_MEM_ERROR; - - opt->type = LZMA_DELTA_TYPE_BYTE; - opt->dist = props[0] + 1; - - *options = opt; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_decoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_decoder.h deleted file mode 100644 index ae89acc59f8..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_decoder.h +++ /dev/null @@ -1,25 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file delta_decoder.h -/// \brief Delta filter decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_DELTA_DECODER_H -#define LZMA_DELTA_DECODER_H - -#include "delta_common.h" - -extern lzma_ret lzma_delta_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_delta_props_decode( - void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_encoder.c deleted file mode 100644 index 0244673eae3..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_encoder.c +++ /dev/null @@ -1,106 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file delta_encoder.c -/// \brief Delta filter encoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "delta_encoder.h" -#include "delta_private.h" - - -/// Copies and encodes the data at the same time. This is used when Delta -/// is the first filter in the chain (and thus the last filter in the -/// encoder's filter stack). -static void -copy_and_encode(lzma_coder *coder, - const uint8_t *restrict in, uint8_t *restrict out, size_t size) -{ - const size_t distance = coder->distance; - - for (size_t i = 0; i < size; ++i) { - const uint8_t tmp = coder->history[ - (distance + coder->pos) & 0xFF]; - coder->history[coder->pos-- & 0xFF] = in[i]; - out[i] = in[i] - tmp; - } -} - - -/// Encodes the data in place. This is used when we are the last filter -/// in the chain (and thus non-last filter in the encoder's filter stack). -static void -encode_in_place(lzma_coder *coder, uint8_t *buffer, size_t size) -{ - const size_t distance = coder->distance; - - for (size_t i = 0; i < size; ++i) { - const uint8_t tmp = coder->history[ - (distance + coder->pos) & 0xFF]; - coder->history[coder->pos-- & 0xFF] = buffer[i]; - buffer[i] -= tmp; - } -} - - -static lzma_ret -delta_encode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - lzma_ret ret; - - if (coder->next.code == NULL) { - const size_t in_avail = in_size - *in_pos; - const size_t out_avail = out_size - *out_pos; - const size_t size = MIN(in_avail, out_avail); - - copy_and_encode(coder, in + *in_pos, out + *out_pos, size); - - *in_pos += size; - *out_pos += size; - - ret = action != LZMA_RUN && *in_pos == in_size - ? LZMA_STREAM_END : LZMA_OK; - - } else { - const size_t out_start = *out_pos; - - ret = coder->next.code(coder->next.coder, allocator, - in, in_pos, in_size, out, out_pos, out_size, - action); - - encode_in_place(coder, out + out_start, *out_pos - out_start); - } - - return ret; -} - - -extern lzma_ret -lzma_delta_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - return lzma_delta_coder_init(next, allocator, filters, &delta_encode); -} - - -extern lzma_ret -lzma_delta_props_encode(const void *options, uint8_t *out) -{ - // The caller must have already validated the options, so it's - // LZMA_PROG_ERROR if they are invalid. - if (lzma_delta_coder_memusage(options) == UINT64_MAX) - return LZMA_PROG_ERROR; - - const lzma_options_delta *opt = options; - out[0] = opt->dist - LZMA_DELTA_DIST_MIN; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_encoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_encoder.h deleted file mode 100644 index a447862f205..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_encoder.h +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file delta_encoder.h -/// \brief Delta filter encoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_DELTA_ENCODER_H -#define LZMA_DELTA_ENCODER_H - -#include "delta_common.h" - -extern lzma_ret lzma_delta_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_delta_props_encode(const void *options, uint8_t *out); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_private.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_private.h deleted file mode 100644 index 69be82e2f7d..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/delta/delta_private.h +++ /dev/null @@ -1,37 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file delta_private.h -/// \brief Private common stuff for Delta encoder and decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_DELTA_PRIVATE_H -#define LZMA_DELTA_PRIVATE_H - -#include "delta_common.h" - -struct lzma_coder_s { - /// Next coder in the chain - lzma_next_coder next; - - /// Delta distance - size_t distance; - - /// Position in history[] - uint8_t pos; - - /// Buffer to hold history of the original data - uint8_t history[LZMA_DELTA_DIST_MAX]; -}; - - -extern lzma_ret lzma_delta_coder_init( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, lzma_code_function code); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/liblzma.pc.in b/Build/source/utils/xz-4.999.9beta/src/liblzma/liblzma.pc.in deleted file mode 100644 index eb3f6c75d38..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/liblzma.pc.in +++ /dev/null @@ -1,19 +0,0 @@ -# -# Author: Lasse Collin -# -# This file has been put into the public domain. -# You can do whatever you want with this file. -# - -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: liblzma -Description: General purpose data compression library -URL: @PACKAGE_HOMEPAGE@ -Version: @PACKAGE_VERSION@ -Cflags: -I${includedir} -Libs: -L${libdir} -llzma -Libs.private: @PTHREAD_CFLAGS@ @PTHREAD_LIBS@ diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/liblzma_w32res.rc b/Build/source/utils/xz-4.999.9beta/src/liblzma/liblzma_w32res.rc deleted file mode 100644 index d4d8159c7b4..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/liblzma_w32res.rc +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - */ - -#define MY_TYPE VFT_DLL -#define MY_NAME "liblzma" -#define MY_SUFFIX ".dll" -#define MY_DESC "liblzma data compression library" -#include "common_w32res.rc" diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/Makefile.inc b/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/Makefile.inc deleted file mode 100644 index 470d59c09d3..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/Makefile.inc +++ /dev/null @@ -1,21 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -if COND_ENCODER_LZ -liblzma_la_SOURCES += \ - lz/lz_encoder.c \ - lz/lz_encoder.h \ - lz/lz_encoder_hash.h \ - lz/lz_encoder_mf.c -endif - - -if COND_DECODER_LZ -liblzma_la_SOURCES += \ - lz/lz_decoder.c \ - lz/lz_decoder.h -endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_decoder.c deleted file mode 100644 index e91ad81c32a..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_decoder.c +++ /dev/null @@ -1,299 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lz_decoder.c -/// \brief LZ out window -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -// liblzma supports multiple LZ77-based filters. The LZ part is shared -// between these filters. The LZ code takes care of dictionary handling -// and passing the data between filters in the chain. The filter-specific -// part decodes from the input buffer to the dictionary. - - -#include "lz_decoder.h" - - -struct lzma_coder_s { - /// Dictionary (history buffer) - lzma_dict dict; - - /// The actual LZ-based decoder e.g. LZMA - lzma_lz_decoder lz; - - /// Next filter in the chain, if any. Note that LZMA and LZMA2 are - /// only allowed as the last filter, but the long-range filter in - /// future can be in the middle of the chain. - lzma_next_coder next; - - /// True if the next filter in the chain has returned LZMA_STREAM_END. - bool next_finished; - - /// True if the LZ decoder (e.g. LZMA) has detected end of payload - /// marker. This may become true before next_finished becomes true. - bool this_finished; - - /// Temporary buffer needed when the LZ-based filter is not the last - /// filter in the chain. The output of the next filter is first - /// decoded into buffer[], which is then used as input for the actual - /// LZ-based decoder. - struct { - size_t pos; - size_t size; - uint8_t buffer[LZMA_BUFFER_SIZE]; - } temp; -}; - - -static void -lz_decoder_reset(lzma_coder *coder) -{ - coder->dict.pos = 0; - coder->dict.full = 0; - coder->dict.buf[coder->dict.size - 1] = '\0'; - coder->dict.need_reset = false; - return; -} - - -static lzma_ret -decode_buffer(lzma_coder *coder, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size) -{ - while (true) { - // Wrap the dictionary if needed. - if (coder->dict.pos == coder->dict.size) - coder->dict.pos = 0; - - // Store the current dictionary position. It is needed to know - // where to start copying to the out[] buffer. - const size_t dict_start = coder->dict.pos; - - // Calculate how much we allow coder->lz.code() to decode. - // It must not decode past the end of the dictionary - // buffer, and we don't want it to decode more than is - // actually needed to fill the out[] buffer. - coder->dict.limit = coder->dict.pos + MIN(out_size - *out_pos, - coder->dict.size - coder->dict.pos); - - // Call the coder->lz.code() to do the actual decoding. - const lzma_ret ret = coder->lz.code( - coder->lz.coder, &coder->dict, - in, in_pos, in_size); - - // Copy the decoded data from the dictionary to the out[] - // buffer. - const size_t copy_size = coder->dict.pos - dict_start; - assert(copy_size <= out_size - *out_pos); - memcpy(out + *out_pos, coder->dict.buf + dict_start, - copy_size); - *out_pos += copy_size; - - // Reset the dictionary if so requested by coder->lz.code(). - if (coder->dict.need_reset) { - lz_decoder_reset(coder); - - // Since we reset dictionary, we don't check if - // dictionary became full. - if (ret != LZMA_OK || *out_pos == out_size) - return ret; - } else { - // Return if everything got decoded or an error - // occurred, or if there's no more data to decode. - // - // Note that detecting if there's something to decode - // is done by looking if dictionary become full - // instead of looking if *in_pos == in_size. This - // is because it is possible that all the input was - // consumed already but some data is pending to be - // written to the dictionary. - if (ret != LZMA_OK || *out_pos == out_size - || coder->dict.pos < coder->dict.size) - return ret; - } - } -} - - -static lzma_ret -lz_decode(lzma_coder *coder, - lzma_allocator *allocator lzma_attribute((unused)), - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, - lzma_action action) -{ - if (coder->next.code == NULL) - return decode_buffer(coder, in, in_pos, in_size, - out, out_pos, out_size); - - // We aren't the last coder in the chain, we need to decode - // our input to a temporary buffer. - while (*out_pos < out_size) { - // Fill the temporary buffer if it is empty. - if (!coder->next_finished - && coder->temp.pos == coder->temp.size) { - coder->temp.pos = 0; - coder->temp.size = 0; - - const lzma_ret ret = coder->next.code( - coder->next.coder, - allocator, in, in_pos, in_size, - coder->temp.buffer, &coder->temp.size, - LZMA_BUFFER_SIZE, action); - - if (ret == LZMA_STREAM_END) - coder->next_finished = true; - else if (ret != LZMA_OK || coder->temp.size == 0) - return ret; - } - - if (coder->this_finished) { - if (coder->temp.size != 0) - return LZMA_DATA_ERROR; - - if (coder->next_finished) - return LZMA_STREAM_END; - - return LZMA_OK; - } - - const lzma_ret ret = decode_buffer(coder, coder->temp.buffer, - &coder->temp.pos, coder->temp.size, - out, out_pos, out_size); - - if (ret == LZMA_STREAM_END) - coder->this_finished = true; - else if (ret != LZMA_OK) - return ret; - else if (coder->next_finished && *out_pos < out_size) - return LZMA_DATA_ERROR; - } - - return LZMA_OK; -} - - -static void -lz_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder->dict.buf, allocator); - - if (coder->lz.end != NULL) - coder->lz.end(coder->lz.coder, allocator); - else - lzma_free(coder->lz.coder, allocator); - - lzma_free(coder, allocator); - return; -} - - -extern lzma_ret -lzma_lz_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, - lzma_ret (*lz_init)(lzma_lz_decoder *lz, - lzma_allocator *allocator, const void *options, - lzma_lz_options *lz_options)) -{ - // Allocate the base structure if it isn't already allocated. - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &lz_decode; - next->end = &lz_decoder_end; - - next->coder->dict.buf = NULL; - next->coder->dict.size = 0; - next->coder->lz = LZMA_LZ_DECODER_INIT; - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - // Allocate and initialize the LZ-based decoder. It will also give - // us the dictionary size. - lzma_lz_options lz_options; - return_if_error(lz_init(&next->coder->lz, allocator, - filters[0].options, &lz_options)); - - // If the dictionary size is very small, increase it to 4096 bytes. - // This is to prevent constant wrapping of the dictionary, which - // would slow things down. The downside is that since we don't check - // separately for the real dictionary size, we may happily accept - // corrupt files. - if (lz_options.dict_size < 4096) - lz_options.dict_size = 4096; - - // Make dictionary size a multipe of 16. Some LZ-based decoders like - // LZMA use the lowest bits lzma_dict.pos to know the alignment of the - // data. Aligned buffer is also good when memcpying from the - // dictionary to the output buffer, since applications are - // recommended to give aligned buffers to liblzma. - // - // Avoid integer overflow. - if (lz_options.dict_size > SIZE_MAX - 15) - return LZMA_MEM_ERROR; - - lz_options.dict_size = (lz_options.dict_size + 15) & ~((size_t)(15)); - - // Allocate and initialize the dictionary. - if (next->coder->dict.size != lz_options.dict_size) { - lzma_free(next->coder->dict.buf, allocator); - next->coder->dict.buf - = lzma_alloc(lz_options.dict_size, allocator); - if (next->coder->dict.buf == NULL) - return LZMA_MEM_ERROR; - - next->coder->dict.size = lz_options.dict_size; - } - - lz_decoder_reset(next->coder); - - // Use the preset dictionary if it was given to us. - if (lz_options.preset_dict != NULL - && lz_options.preset_dict_size > 0) { - // If the preset dictionary is bigger than the actual - // dictionary, copy only the tail. - const size_t copy_size = MIN(lz_options.preset_dict_size, - lz_options.dict_size); - const size_t offset = lz_options.preset_dict_size - copy_size; - memcpy(next->coder->dict.buf, lz_options.preset_dict + offset, - copy_size); - next->coder->dict.pos = copy_size; - next->coder->dict.full = copy_size; - } - - // Miscellaneous initializations - next->coder->next_finished = false; - next->coder->this_finished = false; - next->coder->temp.pos = 0; - next->coder->temp.size = 0; - - // Initialize the next filter in the chain, if any. - return lzma_next_filter_init(&next->coder->next, allocator, - filters + 1); -} - - -extern uint64_t -lzma_lz_decoder_memusage(size_t dictionary_size) -{ - return sizeof(lzma_coder) + (uint64_t)(dictionary_size); -} - - -extern void -lzma_lz_decoder_uncompressed(lzma_coder *coder, lzma_vli uncompressed_size) -{ - coder->lz.set_uncompressed(coder->lz.coder, uncompressed_size); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_decoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_decoder.h deleted file mode 100644 index bf1609dbedf..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_decoder.h +++ /dev/null @@ -1,234 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lz_decoder.h -/// \brief LZ out window -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZ_DECODER_H -#define LZMA_LZ_DECODER_H - -#include "common.h" - - -typedef struct { - /// Pointer to the dictionary buffer. It can be an allocated buffer - /// internal to liblzma, or it can a be a buffer given by the - /// application when in single-call mode (not implemented yet). - uint8_t *buf; - - /// Write position in dictionary. The next byte will be written to - /// buf[pos]. - size_t pos; - - /// Indicates how full the dictionary is. This is used by - /// dict_is_distance_valid() to detect corrupt files that would - /// read beyond the beginning of the dictionary. - size_t full; - - /// Write limit - size_t limit; - - /// Size of the dictionary - size_t size; - - /// True when dictionary should be reset before decoding more data. - bool need_reset; - -} lzma_dict; - - -typedef struct { - size_t dict_size; - const uint8_t *preset_dict; - size_t preset_dict_size; -} lzma_lz_options; - - -typedef struct { - /// Data specific to the LZ-based decoder - lzma_coder *coder; - - /// Function to decode from in[] to *dict - lzma_ret (*code)(lzma_coder *restrict coder, - lzma_dict *restrict dict, const uint8_t *restrict in, - size_t *restrict in_pos, size_t in_size); - - void (*reset)(lzma_coder *coder, const void *options); - - /// Set the uncompressed size - void (*set_uncompressed)(lzma_coder *coder, - lzma_vli uncompressed_size); - - /// Free allocated resources - void (*end)(lzma_coder *coder, lzma_allocator *allocator); - -} lzma_lz_decoder; - - -#define LZMA_LZ_DECODER_INIT \ - (lzma_lz_decoder){ \ - .coder = NULL, \ - .code = NULL, \ - .reset = NULL, \ - .set_uncompressed = NULL, \ - .end = NULL, \ - } - - -extern lzma_ret lzma_lz_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters, - lzma_ret (*lz_init)(lzma_lz_decoder *lz, - lzma_allocator *allocator, const void *options, - lzma_lz_options *lz_options)); - -extern uint64_t lzma_lz_decoder_memusage(size_t dictionary_size); - -extern void lzma_lz_decoder_uncompressed( - lzma_coder *coder, lzma_vli uncompressed_size); - - -////////////////////// -// Inline functions // -////////////////////// - -/// Get a byte from the history buffer. -static inline uint8_t -dict_get(const lzma_dict *const dict, const uint32_t distance) -{ - return dict->buf[dict->pos - distance - 1 - + (distance < dict->pos ? 0 : dict->size)]; -} - - -/// Test if dictionary is empty. -static inline bool -dict_is_empty(const lzma_dict *const dict) -{ - return dict->full == 0; -} - - -/// Validate the match distance -static inline bool -dict_is_distance_valid(const lzma_dict *const dict, const size_t distance) -{ - return dict->full > distance; -} - - -/// Repeat *len bytes at distance. -static inline bool -dict_repeat(lzma_dict *dict, uint32_t distance, uint32_t *len) -{ - // Don't write past the end of the dictionary. - const size_t dict_avail = dict->limit - dict->pos; - uint32_t left = MIN(dict_avail, *len); - *len -= left; - - // Repeat a block of data from the history. Because memcpy() is faster - // than copying byte by byte in a loop, the copying process gets split - // into three cases. - if (distance < left) { - // Source and target areas overlap, thus we can't use - // memcpy() nor even memmove() safely. - do { - dict->buf[dict->pos] = dict_get(dict, distance); - ++dict->pos; - } while (--left > 0); - - } else if (distance < dict->pos) { - // The easiest and fastest case - memcpy(dict->buf + dict->pos, - dict->buf + dict->pos - distance - 1, - left); - dict->pos += left; - - } else { - // The bigger the dictionary, the more rare this - // case occurs. We need to "wrap" the dict, thus - // we might need two memcpy() to copy all the data. - assert(dict->full == dict->size); - const uint32_t copy_pos - = dict->pos - distance - 1 + dict->size; - uint32_t copy_size = dict->size - copy_pos; - - if (copy_size < left) { - memmove(dict->buf + dict->pos, dict->buf + copy_pos, - copy_size); - dict->pos += copy_size; - copy_size = left - copy_size; - memcpy(dict->buf + dict->pos, dict->buf, copy_size); - dict->pos += copy_size; - } else { - memmove(dict->buf + dict->pos, dict->buf + copy_pos, - left); - dict->pos += left; - } - } - - // Update how full the dictionary is. - if (dict->full < dict->pos) - dict->full = dict->pos; - - return unlikely(*len != 0); -} - - -/// Puts one byte into the dictionary. Returns true if the dictionary was -/// already full and the byte couldn't be added. -static inline bool -dict_put(lzma_dict *dict, uint8_t byte) -{ - if (unlikely(dict->pos == dict->limit)) - return true; - - dict->buf[dict->pos++] = byte; - - if (dict->pos > dict->full) - dict->full = dict->pos; - - return false; -} - - -/// Copies arbitrary amount of data into the dictionary. -static inline void -dict_write(lzma_dict *restrict dict, const uint8_t *restrict in, - size_t *restrict in_pos, size_t in_size, - size_t *restrict left) -{ - // NOTE: If we are being given more data than the size of the - // dictionary, it could be possible to optimize the LZ decoder - // so that not everything needs to go through the dictionary. - // This shouldn't be very common thing in practice though, and - // the slowdown of one extra memcpy() isn't bad compared to how - // much time it would have taken if the data were compressed. - - if (in_size - *in_pos > *left) - in_size = *in_pos + *left; - - *left -= lzma_bufcpy(in, in_pos, in_size, - dict->buf, &dict->pos, dict->limit); - - if (dict->pos > dict->full) - dict->full = dict->pos; - - return; -} - - -static inline void -dict_reset(lzma_dict *dict) -{ - dict->need_reset = true; - return; -} - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder.c deleted file mode 100644 index 5437546dd2b..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder.c +++ /dev/null @@ -1,559 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lz_encoder.c -/// \brief LZ in window -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lz_encoder.h" -#include "lz_encoder_hash.h" -#include "check.h" - - -struct lzma_coder_s { - /// LZ-based encoder e.g. LZMA - lzma_lz_encoder lz; - - /// History buffer and match finder - lzma_mf mf; - - /// Next coder in the chain - lzma_next_coder next; -}; - - -/// \brief Moves the data in the input window to free space for new data -/// -/// mf->buffer is a sliding input window, which keeps mf->keep_size_before -/// bytes of input history available all the time. Now and then we need to -/// "slide" the buffer to make space for the new data to the end of the -/// buffer. At the same time, data older than keep_size_before is dropped. -/// -static void -move_window(lzma_mf *mf) -{ - // Align the move to a multiple of 16 bytes. Some LZ-based encoders - // like LZMA use the lowest bits of mf->read_pos to know the - // alignment of the uncompressed data. We also get better speed - // for memmove() with aligned buffers. - assert(mf->read_pos > mf->keep_size_before); - const uint32_t move_offset - = (mf->read_pos - mf->keep_size_before) & ~UINT32_C(15); - - assert(mf->write_pos > move_offset); - const size_t move_size = mf->write_pos - move_offset; - - assert(move_offset + move_size <= mf->size); - - memmove(mf->buffer, mf->buffer + move_offset, move_size); - - mf->offset += move_offset; - mf->read_pos -= move_offset; - mf->read_limit -= move_offset; - mf->write_pos -= move_offset; - - return; -} - - -/// \brief Tries to fill the input window (mf->buffer) -/// -/// If we are the last encoder in the chain, our input data is in in[]. -/// Otherwise we call the next filter in the chain to process in[] and -/// write its output to mf->buffer. -/// -/// This function must not be called once it has returned LZMA_STREAM_END. -/// -static lzma_ret -fill_window(lzma_coder *coder, lzma_allocator *allocator, const uint8_t *in, - size_t *in_pos, size_t in_size, lzma_action action) -{ - assert(coder->mf.read_pos <= coder->mf.write_pos); - - // Move the sliding window if needed. - if (coder->mf.read_pos >= coder->mf.size - coder->mf.keep_size_after) - move_window(&coder->mf); - - // Maybe this is ugly, but lzma_mf uses uint32_t for most things - // (which I find cleanest), but we need size_t here when filling - // the history window. - size_t write_pos = coder->mf.write_pos; - size_t in_used; - lzma_ret ret; - if (coder->next.code == NULL) { - // Not using a filter, simply memcpy() as much as possible. - in_used = lzma_bufcpy(in, in_pos, in_size, coder->mf.buffer, - &write_pos, coder->mf.size); - - ret = action != LZMA_RUN && *in_pos == in_size - ? LZMA_STREAM_END : LZMA_OK; - - } else { - const size_t in_start = *in_pos; - ret = coder->next.code(coder->next.coder, allocator, - in, in_pos, in_size, - coder->mf.buffer, &write_pos, - coder->mf.size, action); - in_used = *in_pos - in_start; - } - - coder->mf.write_pos = write_pos; - - // If end of stream has been reached or flushing completed, we allow - // the encoder to process all the input (that is, read_pos is allowed - // to reach write_pos). Otherwise we keep keep_size_after bytes - // available as prebuffer. - if (ret == LZMA_STREAM_END) { - assert(*in_pos == in_size); - ret = LZMA_OK; - coder->mf.action = action; - coder->mf.read_limit = coder->mf.write_pos; - - } else if (coder->mf.write_pos > coder->mf.keep_size_after) { - // This needs to be done conditionally, because if we got - // only little new input, there may be too little input - // to do any encoding yet. - coder->mf.read_limit = coder->mf.write_pos - - coder->mf.keep_size_after; - } - - // Restart the match finder after finished LZMA_SYNC_FLUSH. - if (coder->mf.pending > 0 - && coder->mf.read_pos < coder->mf.read_limit) { - // Match finder may update coder->pending and expects it to - // start from zero, so use a temporary variable. - const size_t pending = coder->mf.pending; - coder->mf.pending = 0; - - // Rewind read_pos so that the match finder can hash - // the pending bytes. - assert(coder->mf.read_pos >= pending); - coder->mf.read_pos -= pending; - - // Call the skip function directly instead of using - // mf_skip(), since we don't want to touch mf->read_ahead. - coder->mf.skip(&coder->mf, pending); - } - - return ret; -} - - -static lzma_ret -lz_encode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, - uint8_t *restrict out, size_t *restrict out_pos, - size_t out_size, lzma_action action) -{ - while (*out_pos < out_size - && (*in_pos < in_size || action != LZMA_RUN)) { - // Read more data to coder->mf.buffer if needed. - if (coder->mf.action == LZMA_RUN && coder->mf.read_pos - >= coder->mf.read_limit) - return_if_error(fill_window(coder, allocator, - in, in_pos, in_size, action)); - - // Encode - const lzma_ret ret = coder->lz.code(coder->lz.coder, - &coder->mf, out, out_pos, out_size); - if (ret != LZMA_OK) { - // Setting this to LZMA_RUN for cases when we are - // flushing. It doesn't matter when finishing or if - // an error occurred. - coder->mf.action = LZMA_RUN; - return ret; - } - } - - return LZMA_OK; -} - - -static bool -lz_encoder_prepare(lzma_mf *mf, lzma_allocator *allocator, - const lzma_lz_options *lz_options) -{ - // For now, the dictionary size is limited to 1.5 GiB. This may grow - // in the future if needed, but it needs a little more work than just - // changing this check. - if (lz_options->dict_size < LZMA_DICT_SIZE_MIN - || lz_options->dict_size - > (UINT32_C(1) << 30) + (UINT32_C(1) << 29) - || lz_options->nice_len > lz_options->match_len_max) - return true; - - mf->keep_size_before = lz_options->before_size + lz_options->dict_size; - - mf->keep_size_after = lz_options->after_size - + lz_options->match_len_max; - - // To avoid constant memmove()s, allocate some extra space. Since - // memmove()s become more expensive when the size of the buffer - // increases, we reserve more space when a large dictionary is - // used to make the memmove() calls rarer. - // - // This works with dictionaries up to about 3 GiB. If bigger - // dictionary is wanted, some extra work is needed: - // - Several variables in lzma_mf have to be changed from uint32_t - // to size_t. - // - Memory usage calculation needs something too, e.g. use uint64_t - // for mf->size. - uint32_t reserve = lz_options->dict_size / 2; - if (reserve > (UINT32_C(1) << 30)) - reserve /= 2; - - reserve += (lz_options->before_size + lz_options->match_len_max - + lz_options->after_size) / 2 + (UINT32_C(1) << 19); - - const uint32_t old_size = mf->size; - mf->size = mf->keep_size_before + reserve + mf->keep_size_after; - - // Deallocate the old history buffer if it exists but has different - // size than what is needed now. - if (mf->buffer != NULL && old_size != mf->size) { - lzma_free(mf->buffer, allocator); - mf->buffer = NULL; - } - - // Match finder options - mf->match_len_max = lz_options->match_len_max; - mf->nice_len = lz_options->nice_len; - - // cyclic_size has to stay smaller than 2 Gi. Note that this doesn't - // mean limitting dictionary size to less than 2 GiB. With a match - // finder that uses multibyte resolution (hashes start at e.g. every - // fourth byte), cyclic_size would stay below 2 Gi even when - // dictionary size is greater than 2 GiB. - // - // It would be possible to allow cyclic_size >= 2 Gi, but then we - // would need to be careful to use 64-bit types in various places - // (size_t could do since we would need bigger than 32-bit address - // space anyway). It would also require either zeroing a multigigabyte - // buffer at initialization (waste of time and RAM) or allow - // normalization in lz_encoder_mf.c to access uninitialized - // memory to keep the code simpler. The current way is simple and - // still allows pretty big dictionaries, so I don't expect these - // limits to change. - mf->cyclic_size = lz_options->dict_size + 1; - - // Validate the match finder ID and setup the function pointers. - switch (lz_options->match_finder) { -#ifdef HAVE_MF_HC3 - case LZMA_MF_HC3: - mf->find = &lzma_mf_hc3_find; - mf->skip = &lzma_mf_hc3_skip; - break; -#endif -#ifdef HAVE_MF_HC4 - case LZMA_MF_HC4: - mf->find = &lzma_mf_hc4_find; - mf->skip = &lzma_mf_hc4_skip; - break; -#endif -#ifdef HAVE_MF_BT2 - case LZMA_MF_BT2: - mf->find = &lzma_mf_bt2_find; - mf->skip = &lzma_mf_bt2_skip; - break; -#endif -#ifdef HAVE_MF_BT3 - case LZMA_MF_BT3: - mf->find = &lzma_mf_bt3_find; - mf->skip = &lzma_mf_bt3_skip; - break; -#endif -#ifdef HAVE_MF_BT4 - case LZMA_MF_BT4: - mf->find = &lzma_mf_bt4_find; - mf->skip = &lzma_mf_bt4_skip; - break; -#endif - - default: - return true; - } - - // Calculate the sizes of mf->hash and mf->son and check that - // nice_len is big enough for the selected match finder. - const uint32_t hash_bytes = lz_options->match_finder & 0x0F; - if (hash_bytes > mf->nice_len) - return true; - - const bool is_bt = (lz_options->match_finder & 0x10) != 0; - uint32_t hs; - - if (hash_bytes == 2) { - hs = 0xFFFF; - } else { - // Round dictionary size up to the next 2^n - 1 so it can - // be used as a hash mask. - hs = lz_options->dict_size - 1; - hs |= hs >> 1; - hs |= hs >> 2; - hs |= hs >> 4; - hs |= hs >> 8; - hs >>= 1; - hs |= 0xFFFF; - - if (hs > (UINT32_C(1) << 24)) { - if (hash_bytes == 3) - hs = (UINT32_C(1) << 24) - 1; - else - hs >>= 1; - } - } - - mf->hash_mask = hs; - - ++hs; - if (hash_bytes > 2) - hs += HASH_2_SIZE; - if (hash_bytes > 3) - hs += HASH_3_SIZE; -/* - No match finder uses this at the moment. - if (mf->hash_bytes > 4) - hs += HASH_4_SIZE; -*/ - - // If the above code calculating hs is modified, make sure that - // this assertion stays valid (UINT32_MAX / 5 is not strictly the - // exact limit). If it doesn't, you need to calculate that - // hash_size_sum + sons_count cannot overflow. - assert(hs < UINT32_MAX / 5); - - const uint32_t old_count = mf->hash_size_sum + mf->sons_count; - mf->hash_size_sum = hs; - mf->sons_count = mf->cyclic_size; - if (is_bt) - mf->sons_count *= 2; - - const uint32_t new_count = mf->hash_size_sum + mf->sons_count; - - // Deallocate the old hash array if it exists and has different size - // than what is needed now. - if (mf->hash != NULL && old_count != new_count) { - lzma_free(mf->hash, allocator); - mf->hash = NULL; - } - - // Maximum number of match finder cycles - mf->depth = lz_options->depth; - if (mf->depth == 0) { - mf->depth = 16 + (mf->nice_len / 2); - if (!is_bt) - mf->depth /= 2; - } - - return false; -} - - -static bool -lz_encoder_init(lzma_mf *mf, lzma_allocator *allocator, - const lzma_lz_options *lz_options) -{ - // Allocate the history buffer. - if (mf->buffer == NULL) { - mf->buffer = lzma_alloc(mf->size, allocator); - if (mf->buffer == NULL) - return true; - } - - // Use cyclic_size as initial mf->offset. This allows - // avoiding a few branches in the match finders. The downside is - // that match finder needs to be normalized more often, which may - // hurt performance with huge dictionaries. - mf->offset = mf->cyclic_size; - mf->read_pos = 0; - mf->read_ahead = 0; - mf->read_limit = 0; - mf->write_pos = 0; - mf->pending = 0; - - // Allocate match finder's hash array. - const size_t alloc_count = mf->hash_size_sum + mf->sons_count; - -#if UINT32_MAX >= SIZE_MAX / 4 - // Check for integer overflow. (Huge dictionaries are not - // possible on 32-bit CPU.) - if (alloc_count > SIZE_MAX / sizeof(uint32_t)) - return true; -#endif - - if (mf->hash == NULL) { - mf->hash = lzma_alloc(alloc_count * sizeof(uint32_t), - allocator); - if (mf->hash == NULL) - return true; - } - - mf->son = mf->hash + mf->hash_size_sum; - mf->cyclic_pos = 0; - - // Initialize the hash table. Since EMPTY_HASH_VALUE is zero, we - // can use memset(). -/* - for (uint32_t i = 0; i < hash_size_sum; ++i) - mf->hash[i] = EMPTY_HASH_VALUE; -*/ - memzero(mf->hash, (size_t)(mf->hash_size_sum) * sizeof(uint32_t)); - - // We don't need to initialize mf->son, but not doing that will - // make Valgrind complain in normalization (see normalize() in - // lz_encoder_mf.c). - // - // Skipping this initialization is *very* good when big dictionary is - // used but only small amount of data gets actually compressed: most - // of the mf->hash won't get actually allocated by the kernel, so - // we avoid wasting RAM and improve initialization speed a lot. - //memzero(mf->son, (size_t)(mf->sons_count) * sizeof(uint32_t)); - - // Handle preset dictionary. - if (lz_options->preset_dict != NULL - && lz_options->preset_dict_size > 0) { - // If the preset dictionary is bigger than the actual - // dictionary, use only the tail. - mf->write_pos = MIN(lz_options->preset_dict_size, mf->size); - memcpy(mf->buffer, lz_options->preset_dict - + lz_options->preset_dict_size - mf->write_pos, - mf->write_pos); - mf->action = LZMA_SYNC_FLUSH; - mf->skip(mf, mf->write_pos); - } - - mf->action = LZMA_RUN; - - return false; -} - - -extern uint64_t -lzma_lz_encoder_memusage(const lzma_lz_options *lz_options) -{ - // Old buffers must not exist when calling lz_encoder_prepare(). - lzma_mf mf = { - .buffer = NULL, - .hash = NULL, - }; - - // Setup the size information into mf. - if (lz_encoder_prepare(&mf, NULL, lz_options)) - return UINT64_MAX; - - // Calculate the memory usage. - return (uint64_t)(mf.hash_size_sum + mf.sons_count) - * sizeof(uint32_t) - + (uint64_t)(mf.size) + sizeof(lzma_coder); -} - - -static void -lz_encoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - - lzma_free(coder->mf.hash, allocator); - lzma_free(coder->mf.buffer, allocator); - - if (coder->lz.end != NULL) - coder->lz.end(coder->lz.coder, allocator); - else - lzma_free(coder->lz.coder, allocator); - - lzma_free(coder, allocator); - return; -} - - -extern lzma_ret -lzma_lz_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, - lzma_ret (*lz_init)(lzma_lz_encoder *lz, - lzma_allocator *allocator, const void *options, - lzma_lz_options *lz_options)) -{ -#ifdef HAVE_SMALL - // We need that the CRC32 table has been initialized. - lzma_crc32_init(); -#endif - - // Allocate and initialize the base data structure. - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &lz_encode; - next->end = &lz_encoder_end; - - next->coder->lz.coder = NULL; - next->coder->lz.code = NULL; - next->coder->lz.end = NULL; - - next->coder->mf.buffer = NULL; - next->coder->mf.hash = NULL; - - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - // Initialize the LZ-based encoder. - lzma_lz_options lz_options; - return_if_error(lz_init(&next->coder->lz, allocator, - filters[0].options, &lz_options)); - - // Setup the size information into next->coder->mf and deallocate - // old buffers if they have wrong size. - if (lz_encoder_prepare(&next->coder->mf, allocator, &lz_options)) - return LZMA_OPTIONS_ERROR; - - // Allocate new buffers if needed, and do the rest of - // the initialization. - if (lz_encoder_init(&next->coder->mf, allocator, &lz_options)) - return LZMA_MEM_ERROR; - - // Initialize the next filter in the chain, if any. - return lzma_next_filter_init(&next->coder->next, allocator, - filters + 1); -} - - -extern LZMA_API(lzma_bool) -lzma_mf_is_supported(lzma_match_finder mf) -{ - bool ret = false; - -#ifdef HAVE_MF_HC3 - if (mf == LZMA_MF_HC3) - ret = true; -#endif - -#ifdef HAVE_MF_HC4 - if (mf == LZMA_MF_HC4) - ret = true; -#endif - -#ifdef HAVE_MF_BT2 - if (mf == LZMA_MF_BT2) - ret = true; -#endif - -#ifdef HAVE_MF_BT3 - if (mf == LZMA_MF_BT3) - ret = true; -#endif - -#ifdef HAVE_MF_BT4 - if (mf == LZMA_MF_BT4) - ret = true; -#endif - - return ret; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder.h deleted file mode 100644 index 35e9ebbfc4d..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder.h +++ /dev/null @@ -1,324 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lz_encoder.h -/// \brief LZ in window and match finder API -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZ_ENCODER_H -#define LZMA_LZ_ENCODER_H - -#include "common.h" - - -/// A table of these is used by the LZ-based encoder to hold -/// the length-distance pairs found by the match finder. -typedef struct { - uint32_t len; - uint32_t dist; -} lzma_match; - - -typedef struct lzma_mf_s lzma_mf; -struct lzma_mf_s { - /////////////// - // In Window // - /////////////// - - /// Pointer to buffer with data to be compressed - uint8_t *buffer; - - /// Total size of the allocated buffer (that is, including all - /// the extra space) - uint32_t size; - - /// Number of bytes that must be kept available in our input history. - /// That is, once keep_size_before bytes have been processed, - /// buffer[read_pos - keep_size_before] is the oldest byte that - /// must be available for reading. - uint32_t keep_size_before; - - /// Number of bytes that must be kept in buffer after read_pos. - /// That is, read_pos <= write_pos - keep_size_after as long as - /// action is LZMA_RUN; when action != LZMA_RUN, read_pos is allowed - /// to reach write_pos so that the last bytes get encoded too. - uint32_t keep_size_after; - - /// Match finders store locations of matches using 32-bit integers. - /// To avoid adjusting several megabytes of integers every time the - /// input window is moved with move_window, we only adjust the - /// offset of the buffer. Thus, buffer[value_in_hash_table - offset] - /// is the byte pointed by value_in_hash_table. - uint32_t offset; - - /// buffer[read_pos] is the next byte to run through the match - /// finder. This is incremented in the match finder once the byte - /// has been processed. - uint32_t read_pos; - - /// Number of bytes that have been ran through the match finder, but - /// which haven't been encoded by the LZ-based encoder yet. - uint32_t read_ahead; - - /// As long as read_pos is less than read_limit, there is enough - /// input available in buffer for at least one encoding loop. - /// - /// Because of the stateful API, read_limit may and will get greater - /// than read_pos quite often. This is taken into account when - /// calculating the value for keep_size_after. - uint32_t read_limit; - - /// buffer[write_pos] is the first byte that doesn't contain valid - /// uncompressed data; that is, the next input byte will be copied - /// to buffer[write_pos]. - uint32_t write_pos; - - /// Number of bytes not hashed before read_pos. This is needed to - /// restart the match finder after LZMA_SYNC_FLUSH. - uint32_t pending; - - ////////////////// - // Match Finder // - ////////////////// - - /// Find matches. Returns the number of distance-length pairs written - /// to the matches array. This is called only via lzma_mf_find(). - uint32_t (*find)(lzma_mf *mf, lzma_match *matches); - - /// Skips num bytes. This is like find() but doesn't make the - /// distance-length pairs available, thus being a little faster. - /// This is called only via mf_skip(). - void (*skip)(lzma_mf *mf, uint32_t num); - - uint32_t *hash; - uint32_t *son; - uint32_t cyclic_pos; - uint32_t cyclic_size; // Must be dictionary size + 1. - uint32_t hash_mask; - - /// Maximum number of loops in the match finder - uint32_t depth; - - /// Maximum length of a match that the match finder will try to find. - uint32_t nice_len; - - /// Maximum length of a match supported by the LZ-based encoder. - /// If the longest match found by the match finder is nice_len, - /// mf_find() tries to expand it up to match_len_max bytes. - uint32_t match_len_max; - - /// When running out of input, binary tree match finders need to know - /// if it is due to flushing or finishing. The action is used also - /// by the LZ-based encoders themselves. - lzma_action action; - - /// Number of elements in hash[] - uint32_t hash_size_sum; - - /// Number of elements in son[] - uint32_t sons_count; -}; - - -typedef struct { - /// Extra amount of data to keep available before the "actual" - /// dictionary. - size_t before_size; - - /// Size of the history buffer - size_t dict_size; - - /// Extra amount of data to keep available after the "actual" - /// dictionary. - size_t after_size; - - /// Maximum length of a match that the LZ-based encoder can accept. - /// This is used to extend matches of length nice_len to the - /// maximum possible length. - size_t match_len_max; - - /// Match finder will search matches of at maximum of this length. - /// This must be less than or equal to match_len_max. - size_t nice_len; - - /// Type of the match finder to use - lzma_match_finder match_finder; - - /// Maximum search depth - uint32_t depth; - - /// TODO: Comment - const uint8_t *preset_dict; - - uint32_t preset_dict_size; - -} lzma_lz_options; - - -// The total usable buffer space at any moment outside the match finder: -// before_size + dict_size + after_size + match_len_max -// -// In reality, there's some extra space allocated to prevent the number of -// memmove() calls reasonable. The bigger the dict_size is, the bigger -// this extra buffer will be since with bigger dictionaries memmove() would -// also take longer. -// -// A single encoder loop in the LZ-based encoder may call the match finder -// (mf_find() or mf_skip()) at maximum of after_size times. -// In other words, a single encoder loop may advance lzma_mf.read_pos at -// maximum of after_size times. Since matches are looked up to -// lzma_mf.buffer[lzma_mf.read_pos + match_len_max - 1], the total -// amount of extra buffer needed after dict_size becomes -// after_size + match_len_max. -// -// before_size has two uses. The first one is to keep literals available -// in cases when the LZ-based encoder has made some read ahead. -// TODO: Maybe this could be changed by making the LZ-based encoders to -// store the actual literals as they do with length-distance pairs. -// -// Alrogithms such as LZMA2 first try to compress a chunk, and then check -// if the encoded result is smaller than the uncompressed one. If the chunk -// was uncompressible, it is better to store it in uncompressed form in -// the output stream. To do this, the whole uncompressed chunk has to be -// still available in the history buffer. before_size achieves that. - - -typedef struct { - /// Data specific to the LZ-based encoder - lzma_coder *coder; - - /// Function to encode from *dict to out[] - lzma_ret (*code)(lzma_coder *restrict coder, - lzma_mf *restrict mf, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size); - - /// Free allocated resources - void (*end)(lzma_coder *coder, lzma_allocator *allocator); - -} lzma_lz_encoder; - - -// Basic steps: -// 1. Input gets copied into the dictionary. -// 2. Data in dictionary gets run through the match finder byte by byte. -// 3. The literals and matches are encoded using e.g. LZMA. -// -// The bytes that have been ran through the match finder, but not encoded yet, -// are called `read ahead'. - - -/// Get pointer to the first byte not ran through the match finder -static inline const uint8_t * -mf_ptr(const lzma_mf *mf) -{ - return mf->buffer + mf->read_pos; -} - - -/// Get the number of bytes that haven't been ran through the match finder yet. -static inline uint32_t -mf_avail(const lzma_mf *mf) -{ - return mf->write_pos - mf->read_pos; -} - - -/// Get the number of bytes that haven't been encoded yet (some of these -/// bytes may have been ran through the match finder though). -static inline uint32_t -mf_unencoded(const lzma_mf *mf) -{ - return mf->write_pos - mf->read_pos + mf->read_ahead; -} - - -/// Calculate the absolute offset from the beginning of the most recent -/// dictionary reset. Only the lowest four bits are important, so there's no -/// problem that we don't know the 64-bit size of the data encoded so far. -/// -/// NOTE: When moving the input window, we need to do it so that the lowest -/// bits of dict->read_pos are not modified to keep this macro working -/// as intended. -static inline uint32_t -mf_position(const lzma_mf *mf) -{ - return mf->read_pos - mf->read_ahead; -} - - -/// Since everything else begins with mf_, use it also for lzma_mf_find(). -#define mf_find lzma_mf_find - - -/// Skip the given number of bytes. This is used when a good match was found. -/// For example, if mf_find() finds a match of 200 bytes long, the first byte -/// of that match was already consumed by mf_find(), and the rest 199 bytes -/// have to be skipped with mf_skip(mf, 199). -static inline void -mf_skip(lzma_mf *mf, uint32_t amount) -{ - if (amount != 0) { - mf->skip(mf, amount); - mf->read_ahead += amount; - } -} - - -/// Copies at maximum of *left amount of bytes from the history buffer -/// to out[]. This is needed by LZMA2 to encode uncompressed chunks. -static inline void -mf_read(lzma_mf *mf, uint8_t *out, size_t *out_pos, size_t out_size, - size_t *left) -{ - const size_t out_avail = out_size - *out_pos; - const size_t copy_size = MIN(out_avail, *left); - - assert(mf->read_ahead == 0); - assert(mf->read_pos >= *left); - - memcpy(out + *out_pos, mf->buffer + mf->read_pos - *left, - copy_size); - - *out_pos += copy_size; - *left -= copy_size; - return; -} - - -extern lzma_ret lzma_lz_encoder_init( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, - lzma_ret (*lz_init)(lzma_lz_encoder *lz, - lzma_allocator *allocator, const void *options, - lzma_lz_options *lz_options)); - - -extern uint64_t lzma_lz_encoder_memusage(const lzma_lz_options *lz_options); - - -// These are only for LZ encoder's internal use. -extern uint32_t lzma_mf_find( - lzma_mf *mf, uint32_t *count, lzma_match *matches); - -extern uint32_t lzma_mf_hc3_find(lzma_mf *dict, lzma_match *matches); -extern void lzma_mf_hc3_skip(lzma_mf *dict, uint32_t amount); - -extern uint32_t lzma_mf_hc4_find(lzma_mf *dict, lzma_match *matches); -extern void lzma_mf_hc4_skip(lzma_mf *dict, uint32_t amount); - -extern uint32_t lzma_mf_bt2_find(lzma_mf *dict, lzma_match *matches); -extern void lzma_mf_bt2_skip(lzma_mf *dict, uint32_t amount); - -extern uint32_t lzma_mf_bt3_find(lzma_mf *dict, lzma_match *matches); -extern void lzma_mf_bt3_skip(lzma_mf *dict, uint32_t amount); - -extern uint32_t lzma_mf_bt4_find(lzma_mf *dict, lzma_match *matches); -extern void lzma_mf_bt4_skip(lzma_mf *dict, uint32_t amount); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder_hash.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder_hash.h deleted file mode 100644 index dd4b1f1906b..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder_hash.h +++ /dev/null @@ -1,97 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lz_encoder_hash.h -/// \brief Hash macros for match finders -// -// Author: Igor Pavlov -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZ_ENCODER_HASH_H -#define LZMA_LZ_ENCODER_HASH_H - -#define HASH_2_SIZE (UINT32_C(1) << 10) -#define HASH_3_SIZE (UINT32_C(1) << 16) -#define HASH_4_SIZE (UINT32_C(1) << 20) - -#define HASH_2_MASK (HASH_2_SIZE - 1) -#define HASH_3_MASK (HASH_3_SIZE - 1) -#define HASH_4_MASK (HASH_4_SIZE - 1) - -#define FIX_3_HASH_SIZE (HASH_2_SIZE) -#define FIX_4_HASH_SIZE (HASH_2_SIZE + HASH_3_SIZE) -#define FIX_5_HASH_SIZE (HASH_2_SIZE + HASH_3_SIZE + HASH_4_SIZE) - -// TODO Benchmark, and probably doesn't need to be endian dependent. -#if !defined(WORDS_BIGENDIAN) && defined(HAVE_FAST_UNALIGNED_ACCESS) -# define hash_2_calc() \ - const uint32_t hash_value = *(const uint16_t *)(cur); -#else -# define hash_2_calc() \ - const uint32_t hash_value \ - = (uint32_t)(cur[0]) | ((uint32_t)(cur[1]) << 8) -#endif - -#define hash_3_calc() \ - const uint32_t temp = lzma_crc32_table[0][cur[0]] ^ cur[1]; \ - const uint32_t hash_2_value = temp & HASH_2_MASK; \ - const uint32_t hash_value \ - = (temp ^ ((uint32_t)(cur[2]) << 8)) & mf->hash_mask - -#define hash_4_calc() \ - const uint32_t temp = lzma_crc32_table[0][cur[0]] ^ cur[1]; \ - const uint32_t hash_2_value = temp & HASH_2_MASK; \ - const uint32_t hash_3_value \ - = (temp ^ ((uint32_t)(cur[2]) << 8)) & HASH_3_MASK; \ - const uint32_t hash_value = (temp ^ ((uint32_t)(cur[2]) << 8) \ - ^ (lzma_crc32_table[0][cur[3]] << 5)) & mf->hash_mask - - -// The following are not currently used. - -#define hash_5_calc() \ - const uint32_t temp = lzma_crc32_table[0][cur[0]] ^ cur[1]; \ - const uint32_t hash_2_value = temp & HASH_2_MASK; \ - const uint32_t hash_3_value \ - = (temp ^ ((uint32_t)(cur[2]) << 8)) & HASH_3_MASK; \ - uint32_t hash_4_value = (temp ^ ((uint32_t)(cur[2]) << 8) ^ \ - ^ lzma_crc32_table[0][cur[3]] << 5); \ - const uint32_t hash_value \ - = (hash_4_value ^ (lzma_crc32_table[0][cur[4]] << 3)) \ - & mf->hash_mask; \ - hash_4_value &= HASH_4_MASK - -/* -#define hash_zip_calc() \ - const uint32_t hash_value \ - = (((uint32_t)(cur[0]) | ((uint32_t)(cur[1]) << 8)) \ - ^ lzma_crc32_table[0][cur[2]]) & 0xFFFF -*/ - -#define hash_zip_calc() \ - const uint32_t hash_value \ - = (((uint32_t)(cur[2]) | ((uint32_t)(cur[0]) << 8)) \ - ^ lzma_crc32_table[0][cur[1]]) & 0xFFFF - -#define mt_hash_2_calc() \ - const uint32_t hash_2_value \ - = (lzma_crc32_table[0][cur[0]] ^ cur[1]) & HASH_2_MASK - -#define mt_hash_3_calc() \ - const uint32_t temp = lzma_crc32_table[0][cur[0]] ^ cur[1]; \ - const uint32_t hash_2_value = temp & HASH_2_MASK; \ - const uint32_t hash_3_value \ - = (temp ^ ((uint32_t)(cur[2]) << 8)) & HASH_3_MASK - -#define mt_hash_4_calc() \ - const uint32_t temp = lzma_crc32_table[0][cur[0]] ^ cur[1]; \ - const uint32_t hash_2_value = temp & HASH_2_MASK; \ - const uint32_t hash_3_value \ - = (temp ^ ((uint32_t)(cur[2]) << 8)) & HASH_3_MASK; \ - const uint32_t hash_4_value = (temp ^ ((uint32_t)(cur[2]) << 8) ^ \ - (lzma_crc32_table[0][cur[3]] << 5)) & HASH_4_MASK - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder_mf.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder_mf.c deleted file mode 100644 index e48de4fee93..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lz/lz_encoder_mf.c +++ /dev/null @@ -1,754 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lz_encoder_mf.c -/// \brief Match finders -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lz_encoder.h" -#include "lz_encoder_hash.h" -#include "check.h" - - -/// \brief Find matches starting from the current byte -/// -/// \return The length of the longest match found -extern uint32_t -lzma_mf_find(lzma_mf *mf, uint32_t *count_ptr, lzma_match *matches) -{ - // Call the match finder. It returns the number of length-distance - // pairs found. - // FIXME: Minimum count is zero, what _exactly_ is the maximum? - const uint32_t count = mf->find(mf, matches); - - // Length of the longest match; assume that no matches were found - // and thus the maximum length is zero. - uint32_t len_best = 0; - - if (count > 0) { -#ifndef NDEBUG - // Validate the matches. - for (uint32_t i = 0; i < count; ++i) { - assert(matches[i].len <= mf->nice_len); - assert(matches[i].dist < mf->read_pos); - assert(memcmp(mf_ptr(mf) - 1, - mf_ptr(mf) - matches[i].dist - 2, - matches[i].len) == 0); - } -#endif - - // The last used element in the array contains - // the longest match. - len_best = matches[count - 1].len; - - // If a match of maximum search length was found, try to - // extend the match to maximum possible length. - if (len_best == mf->nice_len) { - // The limit for the match length is either the - // maximum match length supported by the LZ-based - // encoder or the number of bytes left in the - // dictionary, whichever is smaller. - uint32_t limit = mf_avail(mf) + 1; - if (limit > mf->match_len_max) - limit = mf->match_len_max; - - // Pointer to the byte we just ran through - // the match finder. - const uint8_t *p1 = mf_ptr(mf) - 1; - - // Pointer to the beginning of the match. We need -1 - // here because the match distances are zero based. - const uint8_t *p2 = p1 - matches[count - 1].dist - 1; - - while (len_best < limit - && p1[len_best] == p2[len_best]) - ++len_best; - } - } - - *count_ptr = count; - - // Finally update the read position to indicate that match finder was - // run for this dictionary offset. - ++mf->read_ahead; - - return len_best; -} - - -/// Hash value to indicate unused element in the hash. Since we start the -/// positions from dict_size + 1, zero is always too far to qualify -/// as usable match position. -#define EMPTY_HASH_VALUE 0 - - -/// Normalization must be done when lzma_mf.offset + lzma_mf.read_pos -/// reaches MUST_NORMALIZE_POS. -#define MUST_NORMALIZE_POS UINT32_MAX - - -/// \brief Normalizes hash values -/// -/// The hash arrays store positions of match candidates. The positions are -/// relative to an arbitrary offset that is not the same as the absolute -/// offset in the input stream. The relative position of the current byte -/// is lzma_mf.offset + lzma_mf.read_pos. The distances of the matches are -/// the differences of the current read position and the position found from -/// the hash. -/// -/// To prevent integer overflows of the offsets stored in the hash arrays, -/// we need to "normalize" the stored values now and then. During the -/// normalization, we drop values that indicate distance greater than the -/// dictionary size, thus making space for new values. -static void -normalize(lzma_mf *mf) -{ - assert(mf->read_pos + mf->offset == MUST_NORMALIZE_POS); - - // In future we may not want to touch the lowest bits, because there - // may be match finders that use larger resolution than one byte. - const uint32_t subvalue - = (MUST_NORMALIZE_POS - mf->cyclic_size); - // & (~(UINT32_C(1) << 10) - 1); - - const uint32_t count = mf->hash_size_sum + mf->sons_count; - uint32_t *hash = mf->hash; - - for (uint32_t i = 0; i < count; ++i) { - // If the distance is greater than the dictionary size, - // we can simply mark the hash element as empty. - // - // NOTE: Only the first mf->hash_size_sum elements are - // initialized for sure. There may be uninitialized elements - // in mf->son. Since we go through both mf->hash and - // mf->son here in normalization, Valgrind may complain - // that the "if" below depends on uninitialized value. In - // this case it is safe to ignore the warning. See also the - // comments in lz_encoder_init() in lz_encoder.c. - if (hash[i] <= subvalue) - hash[i] = EMPTY_HASH_VALUE; - else - hash[i] -= subvalue; - } - - // Update offset to match the new locations. - mf->offset -= subvalue; - - return; -} - - -/// Mark the current byte as processed from point of view of the match finder. -static void -move_pos(lzma_mf *mf) -{ - if (++mf->cyclic_pos == mf->cyclic_size) - mf->cyclic_pos = 0; - - ++mf->read_pos; - assert(mf->read_pos <= mf->write_pos); - - if (unlikely(mf->read_pos + mf->offset == UINT32_MAX)) - normalize(mf); -} - - -/// When flushing, we cannot run the match finder unless there is nice_len -/// bytes available in the dictionary. Instead, we skip running the match -/// finder (indicating that no match was found), and count how many bytes we -/// have ignored this way. -/// -/// When new data is given after the flushing was completed, the match finder -/// is restarted by rewinding mf->read_pos backwards by mf->pending. Then -/// the missed bytes are added to the hash using the match finder's skip -/// function (with small amount of input, it may start using mf->pending -/// again if flushing). -/// -/// Due to this rewinding, we don't touch cyclic_pos or test for -/// normalization. It will be done when the match finder's skip function -/// catches up after a flush. -static void -move_pending(lzma_mf *mf) -{ - ++mf->read_pos; - assert(mf->read_pos <= mf->write_pos); - ++mf->pending; -} - - -/// Calculate len_limit and determine if there is enough input to run -/// the actual match finder code. Sets up "cur" and "pos". This macro -/// is used by all find functions and binary tree skip functions. Hash -/// chain skip function doesn't need len_limit so a simpler code is used -/// in them. -#define header(is_bt, len_min, ret_op) \ - uint32_t len_limit = mf_avail(mf); \ - if (mf->nice_len <= len_limit) { \ - len_limit = mf->nice_len; \ - } else if (len_limit < (len_min) \ - || (is_bt && mf->action == LZMA_SYNC_FLUSH)) { \ - assert(mf->action != LZMA_RUN); \ - move_pending(mf); \ - ret_op; \ - } \ - const uint8_t *cur = mf_ptr(mf); \ - const uint32_t pos = mf->read_pos + mf->offset - - -/// Header for find functions. "return 0" indicates that zero matches -/// were found. -#define header_find(is_bt, len_min) \ - header(is_bt, len_min, return 0); \ - uint32_t matches_count = 0 - - -/// Header for a loop in a skip function. "continue" tells to skip the rest -/// of the code in the loop. -#define header_skip(is_bt, len_min) \ - header(is_bt, len_min, continue) - - -/// Calls hc_find_func() or bt_find_func() and calculates the total number -/// of matches found. Updates the dictionary position and returns the number -/// of matches found. -#define call_find(func, len_best) \ -do { \ - matches_count = func(len_limit, pos, cur, cur_match, mf->depth, \ - mf->son, mf->cyclic_pos, mf->cyclic_size, \ - matches + matches_count, len_best) \ - - matches; \ - move_pos(mf); \ - return matches_count; \ -} while (0) - - -//////////////// -// Hash Chain // -//////////////// - -#if defined(HAVE_MF_HC3) || defined(HAVE_MF_HC4) -/// -/// -/// \param len_limit Don't look for matches longer than len_limit. -/// \param pos lzma_mf.read_pos + lzma_mf.offset -/// \param cur Pointer to current byte (mf_ptr(mf)) -/// \param cur_match Start position of the current match candidate -/// \param depth Maximum length of the hash chain -/// \param son lzma_mf.son (contains the hash chain) -/// \param cyclic_pos -/// \param cyclic_size -/// \param matches Array to hold the matches. -/// \param len_best The length of the longest match found so far. -static lzma_match * -hc_find_func( - const uint32_t len_limit, - const uint32_t pos, - const uint8_t *const cur, - uint32_t cur_match, - uint32_t depth, - uint32_t *const son, - const uint32_t cyclic_pos, - const uint32_t cyclic_size, - lzma_match *matches, - uint32_t len_best) -{ - son[cyclic_pos] = cur_match; - - while (true) { - const uint32_t delta = pos - cur_match; - if (depth-- == 0 || delta >= cyclic_size) - return matches; - - const uint8_t *const pb = cur - delta; - cur_match = son[cyclic_pos - delta - + (delta > cyclic_pos ? cyclic_size : 0)]; - - if (pb[len_best] == cur[len_best] && pb[0] == cur[0]) { - uint32_t len = 0; - while (++len != len_limit) - if (pb[len] != cur[len]) - break; - - if (len_best < len) { - len_best = len; - matches->len = len; - matches->dist = delta - 1; - ++matches; - - if (len == len_limit) - return matches; - } - } - } -} - - -#define hc_find(len_best) \ - call_find(hc_find_func, len_best) - - -#define hc_skip() \ -do { \ - mf->son[mf->cyclic_pos] = cur_match; \ - move_pos(mf); \ -} while (0) - -#endif - - -#ifdef HAVE_MF_HC3 -extern uint32_t -lzma_mf_hc3_find(lzma_mf *mf, lzma_match *matches) -{ - header_find(false, 3); - - hash_3_calc(); - - const uint32_t delta2 = pos - mf->hash[hash_2_value]; - const uint32_t cur_match = mf->hash[FIX_3_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_value] = pos; - - uint32_t len_best = 2; - - if (delta2 < mf->cyclic_size && *(cur - delta2) == *cur) { - for ( ; len_best != len_limit; ++len_best) - if (*(cur + len_best - delta2) != cur[len_best]) - break; - - matches[0].len = len_best; - matches[0].dist = delta2 - 1; - matches_count = 1; - - if (len_best == len_limit) { - hc_skip(); - return 1; // matches_count - } - } - - hc_find(len_best); -} - - -extern void -lzma_mf_hc3_skip(lzma_mf *mf, uint32_t amount) -{ - do { - if (mf_avail(mf) < 3) { - move_pending(mf); - continue; - } - - const uint8_t *cur = mf_ptr(mf); - const uint32_t pos = mf->read_pos + mf->offset; - - hash_3_calc(); - - const uint32_t cur_match - = mf->hash[FIX_3_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_value] = pos; - - hc_skip(); - - } while (--amount != 0); -} -#endif - - -#ifdef HAVE_MF_HC4 -extern uint32_t -lzma_mf_hc4_find(lzma_mf *mf, lzma_match *matches) -{ - header_find(false, 4); - - hash_4_calc(); - - uint32_t delta2 = pos - mf->hash[hash_2_value]; - const uint32_t delta3 - = pos - mf->hash[FIX_3_HASH_SIZE + hash_3_value]; - const uint32_t cur_match = mf->hash[FIX_4_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value ] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_3_value] = pos; - mf->hash[FIX_4_HASH_SIZE + hash_value] = pos; - - uint32_t len_best = 1; - - if (delta2 < mf->cyclic_size && *(cur - delta2) == *cur) { - len_best = 2; - matches[0].len = 2; - matches[0].dist = delta2 - 1; - matches_count = 1; - } - - if (delta2 != delta3 && delta3 < mf->cyclic_size - && *(cur - delta3) == *cur) { - len_best = 3; - matches[matches_count++].dist = delta3 - 1; - delta2 = delta3; - } - - if (matches_count != 0) { - for ( ; len_best != len_limit; ++len_best) - if (*(cur + len_best - delta2) != cur[len_best]) - break; - - matches[matches_count - 1].len = len_best; - - if (len_best == len_limit) { - hc_skip(); - return matches_count; - } - } - - if (len_best < 3) - len_best = 3; - - hc_find(len_best); -} - - -extern void -lzma_mf_hc4_skip(lzma_mf *mf, uint32_t amount) -{ - do { - if (mf_avail(mf) < 4) { - move_pending(mf); - continue; - } - - const uint8_t *cur = mf_ptr(mf); - const uint32_t pos = mf->read_pos + mf->offset; - - hash_4_calc(); - - const uint32_t cur_match - = mf->hash[FIX_4_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_3_value] = pos; - mf->hash[FIX_4_HASH_SIZE + hash_value] = pos; - - hc_skip(); - - } while (--amount != 0); -} -#endif - - -///////////////// -// Binary Tree // -///////////////// - -#if defined(HAVE_MF_BT2) || defined(HAVE_MF_BT3) || defined(HAVE_MF_BT4) -static lzma_match * -bt_find_func( - const uint32_t len_limit, - const uint32_t pos, - const uint8_t *const cur, - uint32_t cur_match, - uint32_t depth, - uint32_t *const son, - const uint32_t cyclic_pos, - const uint32_t cyclic_size, - lzma_match *matches, - uint32_t len_best) -{ - uint32_t *ptr0 = son + (cyclic_pos << 1) + 1; - uint32_t *ptr1 = son + (cyclic_pos << 1); - - uint32_t len0 = 0; - uint32_t len1 = 0; - - while (true) { - const uint32_t delta = pos - cur_match; - if (depth-- == 0 || delta >= cyclic_size) { - *ptr0 = EMPTY_HASH_VALUE; - *ptr1 = EMPTY_HASH_VALUE; - return matches; - } - - uint32_t *const pair = son + ((cyclic_pos - delta - + (delta > cyclic_pos ? cyclic_size : 0)) - << 1); - - const uint8_t *const pb = cur - delta; - uint32_t len = MIN(len0, len1); - - if (pb[len] == cur[len]) { - while (++len != len_limit) - if (pb[len] != cur[len]) - break; - - if (len_best < len) { - len_best = len; - matches->len = len; - matches->dist = delta - 1; - ++matches; - - if (len == len_limit) { - *ptr1 = pair[0]; - *ptr0 = pair[1]; - return matches; - } - } - } - - if (pb[len] < cur[len]) { - *ptr1 = cur_match; - ptr1 = pair + 1; - cur_match = *ptr1; - len1 = len; - } else { - *ptr0 = cur_match; - ptr0 = pair; - cur_match = *ptr0; - len0 = len; - } - } -} - - -static void -bt_skip_func( - const uint32_t len_limit, - const uint32_t pos, - const uint8_t *const cur, - uint32_t cur_match, - uint32_t depth, - uint32_t *const son, - const uint32_t cyclic_pos, - const uint32_t cyclic_size) -{ - uint32_t *ptr0 = son + (cyclic_pos << 1) + 1; - uint32_t *ptr1 = son + (cyclic_pos << 1); - - uint32_t len0 = 0; - uint32_t len1 = 0; - - while (true) { - const uint32_t delta = pos - cur_match; - if (depth-- == 0 || delta >= cyclic_size) { - *ptr0 = EMPTY_HASH_VALUE; - *ptr1 = EMPTY_HASH_VALUE; - return; - } - - uint32_t *pair = son + ((cyclic_pos - delta - + (delta > cyclic_pos ? cyclic_size : 0)) - << 1); - const uint8_t *pb = cur - delta; - uint32_t len = MIN(len0, len1); - - if (pb[len] == cur[len]) { - while (++len != len_limit) - if (pb[len] != cur[len]) - break; - - if (len == len_limit) { - *ptr1 = pair[0]; - *ptr0 = pair[1]; - return; - } - } - - if (pb[len] < cur[len]) { - *ptr1 = cur_match; - ptr1 = pair + 1; - cur_match = *ptr1; - len1 = len; - } else { - *ptr0 = cur_match; - ptr0 = pair; - cur_match = *ptr0; - len0 = len; - } - } -} - - -#define bt_find(len_best) \ - call_find(bt_find_func, len_best) - -#define bt_skip() \ -do { \ - bt_skip_func(len_limit, pos, cur, cur_match, mf->depth, \ - mf->son, mf->cyclic_pos, \ - mf->cyclic_size); \ - move_pos(mf); \ -} while (0) - -#endif - - -#ifdef HAVE_MF_BT2 -extern uint32_t -lzma_mf_bt2_find(lzma_mf *mf, lzma_match *matches) -{ - header_find(true, 2); - - hash_2_calc(); - - const uint32_t cur_match = mf->hash[hash_value]; - mf->hash[hash_value] = pos; - - bt_find(1); -} - - -extern void -lzma_mf_bt2_skip(lzma_mf *mf, uint32_t amount) -{ - do { - header_skip(true, 2); - - hash_2_calc(); - - const uint32_t cur_match = mf->hash[hash_value]; - mf->hash[hash_value] = pos; - - bt_skip(); - - } while (--amount != 0); -} -#endif - - -#ifdef HAVE_MF_BT3 -extern uint32_t -lzma_mf_bt3_find(lzma_mf *mf, lzma_match *matches) -{ - header_find(true, 3); - - hash_3_calc(); - - const uint32_t delta2 = pos - mf->hash[hash_2_value]; - const uint32_t cur_match = mf->hash[FIX_3_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_value] = pos; - - uint32_t len_best = 2; - - if (delta2 < mf->cyclic_size && *(cur - delta2) == *cur) { - for ( ; len_best != len_limit; ++len_best) - if (*(cur + len_best - delta2) != cur[len_best]) - break; - - matches[0].len = len_best; - matches[0].dist = delta2 - 1; - matches_count = 1; - - if (len_best == len_limit) { - bt_skip(); - return 1; // matches_count - } - } - - bt_find(len_best); -} - - -extern void -lzma_mf_bt3_skip(lzma_mf *mf, uint32_t amount) -{ - do { - header_skip(true, 3); - - hash_3_calc(); - - const uint32_t cur_match - = mf->hash[FIX_3_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_value] = pos; - - bt_skip(); - - } while (--amount != 0); -} -#endif - - -#ifdef HAVE_MF_BT4 -extern uint32_t -lzma_mf_bt4_find(lzma_mf *mf, lzma_match *matches) -{ - header_find(true, 4); - - hash_4_calc(); - - uint32_t delta2 = pos - mf->hash[hash_2_value]; - const uint32_t delta3 - = pos - mf->hash[FIX_3_HASH_SIZE + hash_3_value]; - const uint32_t cur_match = mf->hash[FIX_4_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_3_value] = pos; - mf->hash[FIX_4_HASH_SIZE + hash_value] = pos; - - uint32_t len_best = 1; - - if (delta2 < mf->cyclic_size && *(cur - delta2) == *cur) { - len_best = 2; - matches[0].len = 2; - matches[0].dist = delta2 - 1; - matches_count = 1; - } - - if (delta2 != delta3 && delta3 < mf->cyclic_size - && *(cur - delta3) == *cur) { - len_best = 3; - matches[matches_count++].dist = delta3 - 1; - delta2 = delta3; - } - - if (matches_count != 0) { - for ( ; len_best != len_limit; ++len_best) - if (*(cur + len_best - delta2) != cur[len_best]) - break; - - matches[matches_count - 1].len = len_best; - - if (len_best == len_limit) { - bt_skip(); - return matches_count; - } - } - - if (len_best < 3) - len_best = 3; - - bt_find(len_best); -} - - -extern void -lzma_mf_bt4_skip(lzma_mf *mf, uint32_t amount) -{ - do { - header_skip(true, 4); - - hash_4_calc(); - - const uint32_t cur_match - = mf->hash[FIX_4_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_3_value] = pos; - mf->hash[FIX_4_HASH_SIZE + hash_value] = pos; - - bt_skip(); - - } while (--amount != 0); -} -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/Makefile.inc b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/Makefile.inc deleted file mode 100644 index 7fc4d172096..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/Makefile.inc +++ /dev/null @@ -1,43 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -EXTRA_DIST += lzma/fastpos_tablegen.c - -liblzma_la_SOURCES += lzma/lzma_common.h - -if COND_ENCODER_LZMA1 -liblzma_la_SOURCES += \ - lzma/fastpos.h \ - lzma/lzma_encoder.h \ - lzma/lzma_encoder.c \ - lzma/lzma_encoder_presets.c \ - lzma/lzma_encoder_private.h \ - lzma/lzma_encoder_optimum_fast.c \ - lzma/lzma_encoder_optimum_normal.c - -if !COND_SMALL -liblzma_la_SOURCES += lzma/fastpos_table.c -endif -endif - -if COND_DECODER_LZMA1 -liblzma_la_SOURCES += \ - lzma/lzma_decoder.c \ - lzma/lzma_decoder.h -endif - -if COND_ENCODER_LZMA2 -liblzma_la_SOURCES += \ - lzma/lzma2_encoder.c \ - lzma/lzma2_encoder.h -endif - -if COND_DECODER_LZMA2 -liblzma_la_SOURCES += \ - lzma/lzma2_decoder.c \ - lzma/lzma2_decoder.h -endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/fastpos.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/fastpos.h deleted file mode 100644 index a95a00c4792..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/fastpos.h +++ /dev/null @@ -1,143 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file fastpos.h -/// \brief Kind of two-bit version of bit scan reverse -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_FASTPOS_H -#define LZMA_FASTPOS_H - -// LZMA encodes match distances (positions) by storing the highest two -// bits using a six-bit value [0, 63], and then the missing lower bits. -// Dictionary size is also stored using this encoding in the new .lzma -// file format header. -// -// fastpos.h provides a way to quickly find out the correct six-bit -// values. The following table gives some examples of this encoding: -// -// pos return -// 0 0 -// 1 1 -// 2 2 -// 3 3 -// 4 4 -// 5 4 -// 6 5 -// 7 5 -// 8 6 -// 11 6 -// 12 7 -// ... ... -// 15 7 -// 16 8 -// 17 8 -// ... ... -// 23 8 -// 24 9 -// 25 9 -// ... ... -// -// -// Provided functions or macros -// ---------------------------- -// -// get_pos_slot(pos) is the basic version. get_pos_slot_2(pos) -// assumes that pos >= FULL_DISTANCES, thus the result is at least -// FULL_DISTANCES_BITS * 2. Using get_pos_slot(pos) instead of -// get_pos_slot_2(pos) would give the same result, but get_pos_slot_2(pos) -// should be tiny bit faster due to the assumption being made. -// -// -// Size vs. speed -// -------------- -// -// With some CPUs that have fast BSR (bit scan reverse) instruction, the -// size optimized version is slightly faster than the bigger table based -// approach. Such CPUs include Intel Pentium Pro, Pentium II, Pentium III -// and Core 2 (possibly others). AMD K7 seems to have slower BSR, but that -// would still have speed roughly comparable to the table version. Older -// x86 CPUs like the original Pentium have very slow BSR; on those systems -// the table version is a lot faster. -// -// On some CPUs, the table version is a lot faster when using position -// dependent code, but with position independent code the size optimized -// version is slightly faster. This occurs at least on 32-bit SPARC (no -// ASM optimizations). -// -// I'm making the table version the default, because that has good speed -// on all systems I have tried. The size optimized version is sometimes -// slightly faster, but sometimes it is a lot slower. - -#ifdef HAVE_SMALL -# include "bsr.h" - -# define get_pos_slot(pos) ((pos) <= 4 ? (pos) : get_pos_slot_2(pos)) - -static inline uint32_t -get_pos_slot_2(uint32_t pos) -{ - uint32_t i; - lzma_bsr(i, pos); - return (i + i) + ((pos >> (i - 1)) & 1); -} - - -#else - -#define FASTPOS_BITS 13 - -extern const uint8_t lzma_fastpos[1 << FASTPOS_BITS]; - - -#define fastpos_shift(extra, n) \ - ((extra) + (n) * (FASTPOS_BITS - 1)) - -#define fastpos_limit(extra, n) \ - (UINT32_C(1) << (FASTPOS_BITS + fastpos_shift(extra, n))) - -#define fastpos_result(pos, extra, n) \ - lzma_fastpos[(pos) >> fastpos_shift(extra, n)] \ - + 2 * fastpos_shift(extra, n) - - -static inline uint32_t -get_pos_slot(uint32_t pos) -{ - // If it is small enough, we can pick the result directly from - // the precalculated table. - if (pos < fastpos_limit(0, 0)) - return lzma_fastpos[pos]; - - if (pos < fastpos_limit(0, 1)) - return fastpos_result(pos, 0, 1); - - return fastpos_result(pos, 0, 2); -} - - -#ifdef FULL_DISTANCES_BITS -static inline uint32_t -get_pos_slot_2(uint32_t pos) -{ - assert(pos >= FULL_DISTANCES); - - if (pos < fastpos_limit(FULL_DISTANCES_BITS - 1, 0)) - return fastpos_result(pos, FULL_DISTANCES_BITS - 1, 0); - - if (pos < fastpos_limit(FULL_DISTANCES_BITS - 1, 1)) - return fastpos_result(pos, FULL_DISTANCES_BITS - 1, 1); - - return fastpos_result(pos, FULL_DISTANCES_BITS - 1, 2); -} -#endif - -#endif - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/fastpos_table.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/fastpos_table.c deleted file mode 100644 index 6a3ceac0e90..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/fastpos_table.c +++ /dev/null @@ -1,519 +0,0 @@ -/* This file has been automatically generated by fastpos_tablegen.c. */ - -#include "common.h" -#include "fastpos.h" - -const uint8_t lzma_fastpos[1 << FASTPOS_BITS] = { - 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, - 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25 -}; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/fastpos_tablegen.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/fastpos_tablegen.c deleted file mode 100644 index c97e6f411c2..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/fastpos_tablegen.c +++ /dev/null @@ -1,56 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file fastpos_tablegen.c -/// \brief Generates the lzma_fastpos[] lookup table -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include -#include -#include -#include "fastpos.h" - - -int -main(void) -{ - uint8_t fastpos[1 << FASTPOS_BITS]; - - const uint8_t fast_slots = 2 * FASTPOS_BITS; - uint32_t c = 2; - - fastpos[0] = 0; - fastpos[1] = 1; - - for (uint8_t slot_fast = 2; slot_fast < fast_slots; ++slot_fast) { - const uint32_t k = 1 << ((slot_fast >> 1) - 1); - for (uint32_t j = 0; j < k; ++j, ++c) - fastpos[c] = slot_fast; - } - - printf("/* This file has been automatically generated " - "by fastpos_tablegen.c. */\n\n" - "#include \"common.h\"\n" - "#include \"fastpos.h\"\n\n" - "const uint8_t lzma_fastpos[1 << FASTPOS_BITS] = {"); - - for (size_t i = 0; i < (1 << FASTPOS_BITS); ++i) { - if (i % 16 == 0) - printf("\n\t"); - - printf("%3u", (unsigned int)(fastpos[i])); - - if (i != (1 << FASTPOS_BITS) - 1) - printf(","); - } - - printf("\n};\n"); - - return 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.c deleted file mode 100644 index b4c2f2d5ba7..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.c +++ /dev/null @@ -1,305 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma2_decoder.c -/// \brief LZMA2 decoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lzma2_decoder.h" -#include "lz_decoder.h" -#include "lzma_decoder.h" - - -struct lzma_coder_s { - enum sequence { - SEQ_CONTROL, - SEQ_UNCOMPRESSED_1, - SEQ_UNCOMPRESSED_2, - SEQ_COMPRESSED_0, - SEQ_COMPRESSED_1, - SEQ_PROPERTIES, - SEQ_LZMA, - SEQ_COPY, - } sequence; - - /// Sequence after the size fields have been decoded. - enum sequence next_sequence; - - /// LZMA decoder - lzma_lz_decoder lzma; - - /// Uncompressed size of LZMA chunk - size_t uncompressed_size; - - /// Compressed size of the chunk (naturally equals to uncompressed - /// size of uncompressed chunk) - size_t compressed_size; - - /// True if properties are needed. This is false before the - /// first LZMA chunk. - bool need_properties; - - /// True if dictionary reset is needed. This is false before the - /// first chunk (LZMA or uncompressed). - bool need_dictionary_reset; - - lzma_options_lzma options; -}; - - -static lzma_ret -lzma2_decode(lzma_coder *restrict coder, lzma_dict *restrict dict, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size) -{ - // With SEQ_LZMA it is possible that no new input is needed to do - // some progress. The rest of the sequences assume that there is - // at least one byte of input. - while (*in_pos < in_size || coder->sequence == SEQ_LZMA) - switch (coder->sequence) { - case SEQ_CONTROL: { - const uint32_t control = in[*in_pos]; - ++*in_pos; - - if (control >= 0xE0 || control == 1) { - // Dictionary reset implies that next LZMA chunk has - // to set new properties. - coder->need_properties = true; - coder->need_dictionary_reset = true; - } else if (coder->need_dictionary_reset) { - return LZMA_DATA_ERROR; - } - - if (control >= 0x80) { - // LZMA chunk. The highest five bits of the - // uncompressed size are taken from the control byte. - coder->uncompressed_size = (control & 0x1F) << 16; - coder->sequence = SEQ_UNCOMPRESSED_1; - - // See if there are new properties or if we need to - // reset the state. - if (control >= 0xC0) { - // When there are new properties, state reset - // is done at SEQ_PROPERTIES. - coder->need_properties = false; - coder->next_sequence = SEQ_PROPERTIES; - - } else if (coder->need_properties) { - return LZMA_DATA_ERROR; - - } else { - coder->next_sequence = SEQ_LZMA; - - // If only state reset is wanted with old - // properties, do the resetting here for - // simplicity. - if (control >= 0xA0) - coder->lzma.reset(coder->lzma.coder, - &coder->options); - } - } else { - // End marker - if (control == 0x00) - return LZMA_STREAM_END; - - // Invalid control values - if (control > 2) - return LZMA_DATA_ERROR; - - // It's uncompressed chunk - coder->sequence = SEQ_COMPRESSED_0; - coder->next_sequence = SEQ_COPY; - } - - if (coder->need_dictionary_reset) { - // Finish the dictionary reset and let the caller - // flush the dictionary to the actual output buffer. - coder->need_dictionary_reset = false; - dict_reset(dict); - return LZMA_OK; - } - - break; - } - - case SEQ_UNCOMPRESSED_1: - coder->uncompressed_size += (uint32_t)(in[(*in_pos)++]) << 8; - coder->sequence = SEQ_UNCOMPRESSED_2; - break; - - case SEQ_UNCOMPRESSED_2: - coder->uncompressed_size += in[(*in_pos)++] + 1; - coder->sequence = SEQ_COMPRESSED_0; - coder->lzma.set_uncompressed(coder->lzma.coder, - coder->uncompressed_size); - break; - - case SEQ_COMPRESSED_0: - coder->compressed_size = (uint32_t)(in[(*in_pos)++]) << 8; - coder->sequence = SEQ_COMPRESSED_1; - break; - - case SEQ_COMPRESSED_1: - coder->compressed_size += in[(*in_pos)++] + 1; - coder->sequence = coder->next_sequence; - break; - - case SEQ_PROPERTIES: - if (lzma_lzma_lclppb_decode(&coder->options, in[(*in_pos)++])) - return LZMA_DATA_ERROR; - - coder->lzma.reset(coder->lzma.coder, &coder->options); - - coder->sequence = SEQ_LZMA; - break; - - case SEQ_LZMA: { - // Store the start offset so that we can update - // coder->compressed_size later. - const size_t in_start = *in_pos; - - // Decode from in[] to *dict. - const lzma_ret ret = coder->lzma.code(coder->lzma.coder, - dict, in, in_pos, in_size); - - // Validate and update coder->compressed_size. - const size_t in_used = *in_pos - in_start; - if (in_used > coder->compressed_size) - return LZMA_DATA_ERROR; - - coder->compressed_size -= in_used; - - // Return if we didn't finish the chunk, or an error occurred. - if (ret != LZMA_STREAM_END) - return ret; - - // The LZMA decoder must have consumed the whole chunk now. - // We don't need to worry about uncompressed size since it - // is checked by the LZMA decoder. - if (coder->compressed_size != 0) - return LZMA_DATA_ERROR; - - coder->sequence = SEQ_CONTROL; - break; - } - - case SEQ_COPY: { - // Copy from input to the dictionary as is. - // FIXME Can copy too much? - dict_write(dict, in, in_pos, in_size, &coder->compressed_size); - if (coder->compressed_size != 0) - return LZMA_OK; - - coder->sequence = SEQ_CONTROL; - break; - } - - default: - assert(0); - return LZMA_PROG_ERROR; - } - - return LZMA_OK; -} - - -static void -lzma2_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - assert(coder->lzma.end == NULL); - lzma_free(coder->lzma.coder, allocator); - - lzma_free(coder, allocator); - - return; -} - - -static lzma_ret -lzma2_decoder_init(lzma_lz_decoder *lz, lzma_allocator *allocator, - const void *opt, lzma_lz_options *lz_options) -{ - if (lz->coder == NULL) { - lz->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (lz->coder == NULL) - return LZMA_MEM_ERROR; - - lz->code = &lzma2_decode; - lz->end = &lzma2_decoder_end; - - lz->coder->lzma = LZMA_LZ_DECODER_INIT; - } - - const lzma_options_lzma *options = opt; - - lz->coder->sequence = SEQ_CONTROL; - lz->coder->need_properties = true; - lz->coder->need_dictionary_reset = options->preset_dict == NULL - || options->preset_dict_size == 0; - - return lzma_lzma_decoder_create(&lz->coder->lzma, - allocator, options, lz_options); -} - - -extern lzma_ret -lzma_lzma2_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - // LZMA2 can only be the last filter in the chain. This is enforced - // by the raw_decoder initialization. - assert(filters[1].init == NULL); - - return lzma_lz_decoder_init(next, allocator, filters, - &lzma2_decoder_init); -} - - -extern uint64_t -lzma_lzma2_decoder_memusage(const void *options) -{ - return sizeof(lzma_coder) - + lzma_lzma_decoder_memusage_nocheck(options); -} - - -extern lzma_ret -lzma_lzma2_props_decode(void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size) -{ - if (props_size != 1) - return LZMA_OPTIONS_ERROR; - - // Check that reserved bits are unset. - if (props[0] & 0xC0) - return LZMA_OPTIONS_ERROR; - - // Decode the dictionary size. - if (props[0] > 40) - return LZMA_OPTIONS_ERROR; - - lzma_options_lzma *opt = lzma_alloc( - sizeof(lzma_options_lzma), allocator); - if (opt == NULL) - return LZMA_MEM_ERROR; - - if (props[0] == 40) { - opt->dict_size = UINT32_MAX; - } else { - opt->dict_size = 2 | (props[0] & 1); - opt->dict_size <<= props[0] / 2 + 11; - } - - opt->preset_dict = NULL; - opt->preset_dict_size = 0; - - *options = opt; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.h deleted file mode 100644 index fac4ac487b0..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_decoder.h +++ /dev/null @@ -1,28 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma2_decoder.h -/// \brief LZMA2 decoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZMA2_DECODER_H -#define LZMA_LZMA2_DECODER_H - -#include "common.h" - -extern lzma_ret lzma_lzma2_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern uint64_t lzma_lzma2_decoder_memusage(const void *options); - -extern lzma_ret lzma_lzma2_props_decode( - void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.c deleted file mode 100644 index 8db813685f6..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.c +++ /dev/null @@ -1,384 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma2_encoder.c -/// \brief LZMA2 encoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lz_encoder.h" -#include "lzma_encoder.h" -#include "fastpos.h" -#include "lzma2_encoder.h" - - -struct lzma_coder_s { - enum { - SEQ_INIT, - SEQ_LZMA_ENCODE, - SEQ_LZMA_COPY, - SEQ_UNCOMPRESSED_HEADER, - SEQ_UNCOMPRESSED_COPY, - } sequence; - - /// LZMA encoder - lzma_coder *lzma; - - /// If this is not NULL, we will check new options from this - /// structure when starting a new chunk. - const lzma_options_lzma *opt_new; - - /// LZMA options currently in use. - lzma_options_lzma opt_cur; - - bool need_properties; - bool need_state_reset; - bool need_dictionary_reset; - - /// Uncompressed size of a chunk - size_t uncompressed_size; - - /// Compressed size of a chunk (excluding headers); this is also used - /// to indicate the end of buf[] in SEQ_LZMA_COPY. - size_t compressed_size; - - /// Read position in buf[] - size_t buf_pos; - - /// Buffer to hold the chunk header and LZMA compressed data - uint8_t buf[LZMA2_HEADER_MAX + LZMA2_CHUNK_MAX]; -}; - - -static void -lzma2_header_lzma(lzma_coder *coder) -{ - assert(coder->uncompressed_size > 0); - assert(coder->uncompressed_size <= LZMA2_UNCOMPRESSED_MAX); - assert(coder->compressed_size > 0); - assert(coder->compressed_size <= LZMA2_CHUNK_MAX); - - size_t pos; - - if (coder->need_properties) { - pos = 0; - - if (coder->need_dictionary_reset) - coder->buf[pos] = 0x80 + (3 << 5); - else - coder->buf[pos] = 0x80 + (2 << 5); - } else { - pos = 1; - - if (coder->need_state_reset) - coder->buf[pos] = 0x80 + (1 << 5); - else - coder->buf[pos] = 0x80; - } - - // Set the start position for copying. - coder->buf_pos = pos; - - // Uncompressed size - size_t size = coder->uncompressed_size - 1; - coder->buf[pos++] += size >> 16; - coder->buf[pos++] = (size >> 8) & 0xFF; - coder->buf[pos++] = size & 0xFF; - - // Compressed size - size = coder->compressed_size - 1; - coder->buf[pos++] = size >> 8; - coder->buf[pos++] = size & 0xFF; - - // Properties, if needed - if (coder->need_properties) - lzma_lzma_lclppb_encode(&coder->opt_cur, coder->buf + pos); - - coder->need_properties = false; - coder->need_state_reset = false; - coder->need_dictionary_reset = false; - - // The copying code uses coder->compressed_size to indicate the end - // of coder->buf[], so we need add the maximum size of the header here. - coder->compressed_size += LZMA2_HEADER_MAX; - - return; -} - - -static void -lzma2_header_uncompressed(lzma_coder *coder) -{ - assert(coder->uncompressed_size > 0); - assert(coder->uncompressed_size <= LZMA2_CHUNK_MAX); - - // If this is the first chunk, we need to include dictionary - // reset indicator. - if (coder->need_dictionary_reset) - coder->buf[0] = 1; - else - coder->buf[0] = 2; - - coder->need_dictionary_reset = false; - - // "Compressed" size - coder->buf[1] = (coder->uncompressed_size - 1) >> 8; - coder->buf[2] = (coder->uncompressed_size - 1) & 0xFF; - - // Set the start position for copying. - coder->buf_pos = 0; - return; -} - - -static lzma_ret -lzma2_encode(lzma_coder *restrict coder, lzma_mf *restrict mf, - uint8_t *restrict out, size_t *restrict out_pos, - size_t out_size) -{ - while (*out_pos < out_size) - switch (coder->sequence) { - case SEQ_INIT: - // If there's no input left and we are flushing or finishing, - // don't start a new chunk. - if (mf_unencoded(mf) == 0) { - // Write end of payload marker if finishing. - if (mf->action == LZMA_FINISH) - out[(*out_pos)++] = 0; - - return mf->action == LZMA_RUN - ? LZMA_OK : LZMA_STREAM_END; - } - - // Look if there are new options. At least for now, - // only lc/lp/pb can be changed. - if (coder->opt_new != NULL - && (coder->opt_cur.lc != coder->opt_new->lc - || coder->opt_cur.lp != coder->opt_new->lp - || coder->opt_cur.pb != coder->opt_new->pb)) { - // Options have been changed, copy them to opt_cur. - // These get validated as part of - // lzma_lzma_encoder_reset() below. - coder->opt_cur.lc = coder->opt_new->lc; - coder->opt_cur.lp = coder->opt_new->lp; - coder->opt_cur.pb = coder->opt_new->pb; - - // We need to write the new options and reset - // the encoder state. - coder->need_properties = true; - coder->need_state_reset = true; - } - - if (coder->need_state_reset) - return_if_error(lzma_lzma_encoder_reset( - coder->lzma, &coder->opt_cur)); - - coder->uncompressed_size = 0; - coder->compressed_size = 0; - coder->sequence = SEQ_LZMA_ENCODE; - - // Fall through - - case SEQ_LZMA_ENCODE: { - // Calculate how much more uncompressed data this chunk - // could accept. - const uint32_t left = LZMA2_UNCOMPRESSED_MAX - - coder->uncompressed_size; - uint32_t limit; - - if (left < mf->match_len_max) { - // Must flush immediatelly since the next LZMA symbol - // could make the uncompressed size of the chunk too - // big. - limit = 0; - } else { - // Calculate maximum read_limit that is OK from point - // of view of LZMA2 chunk size. - limit = mf->read_pos - mf->read_ahead - + left - mf->match_len_max; - } - - // Save the start position so that we can update - // coder->uncompressed_size. - const uint32_t read_start = mf->read_pos - mf->read_ahead; - - // Call the LZMA encoder until the chunk is finished. - const lzma_ret ret = lzma_lzma_encode(coder->lzma, mf, - coder->buf + LZMA2_HEADER_MAX, - &coder->compressed_size, - LZMA2_CHUNK_MAX, limit); - - coder->uncompressed_size += mf->read_pos - mf->read_ahead - - read_start; - - assert(coder->compressed_size <= LZMA2_CHUNK_MAX); - assert(coder->uncompressed_size <= LZMA2_UNCOMPRESSED_MAX); - - if (ret != LZMA_STREAM_END) - return LZMA_OK; - - // See if the chunk compressed. If it didn't, we encode it - // as uncompressed chunk. This saves a few bytes of space - // and makes decoding faster. - if (coder->compressed_size >= coder->uncompressed_size) { - coder->uncompressed_size += mf->read_ahead; - assert(coder->uncompressed_size - <= LZMA2_UNCOMPRESSED_MAX); - mf->read_ahead = 0; - lzma2_header_uncompressed(coder); - coder->need_state_reset = true; - coder->sequence = SEQ_UNCOMPRESSED_HEADER; - break; - } - - // The chunk did compress at least by one byte, so we store - // the chunk as LZMA. - lzma2_header_lzma(coder); - - coder->sequence = SEQ_LZMA_COPY; - } - - // Fall through - - case SEQ_LZMA_COPY: - // Copy the compressed chunk along its headers to the - // output buffer. - lzma_bufcpy(coder->buf, &coder->buf_pos, - coder->compressed_size, - out, out_pos, out_size); - if (coder->buf_pos != coder->compressed_size) - return LZMA_OK; - - coder->sequence = SEQ_INIT; - break; - - case SEQ_UNCOMPRESSED_HEADER: - // Copy the three-byte header to indicate uncompressed chunk. - lzma_bufcpy(coder->buf, &coder->buf_pos, - LZMA2_HEADER_UNCOMPRESSED, - out, out_pos, out_size); - if (coder->buf_pos != LZMA2_HEADER_UNCOMPRESSED) - return LZMA_OK; - - coder->sequence = SEQ_UNCOMPRESSED_COPY; - - // Fall through - - case SEQ_UNCOMPRESSED_COPY: - // Copy the uncompressed data as is from the dictionary - // to the output buffer. - mf_read(mf, out, out_pos, out_size, &coder->uncompressed_size); - if (coder->uncompressed_size != 0) - return LZMA_OK; - - coder->sequence = SEQ_INIT; - break; - } - - return LZMA_OK; -} - - -static void -lzma2_encoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_free(coder->lzma, allocator); - lzma_free(coder, allocator); - return; -} - - -static lzma_ret -lzma2_encoder_init(lzma_lz_encoder *lz, lzma_allocator *allocator, - const void *options, lzma_lz_options *lz_options) -{ - if (options == NULL) - return LZMA_PROG_ERROR; - - if (lz->coder == NULL) { - lz->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (lz->coder == NULL) - return LZMA_MEM_ERROR; - - lz->code = &lzma2_encode; - lz->end = &lzma2_encoder_end; - - lz->coder->lzma = NULL; - } - - lz->coder->opt_cur = *(const lzma_options_lzma *)(options); - lz->coder->opt_new = lz->coder->opt_cur.persistent - ? options : NULL; - - lz->coder->sequence = SEQ_INIT; - lz->coder->need_properties = true; - lz->coder->need_state_reset = false; - lz->coder->need_dictionary_reset - = lz->coder->opt_cur.preset_dict == NULL - || lz->coder->opt_cur.preset_dict_size == 0; - - // Initialize LZMA encoder - return_if_error(lzma_lzma_encoder_create(&lz->coder->lzma, allocator, - &lz->coder->opt_cur, lz_options)); - - // Make sure that we will always have enough history available in - // case we need to use uncompressed chunks. They are used when the - // compressed size of a chunk is not smaller than the uncompressed - // size, so we need to have at least LZMA2_COMPRESSED_MAX bytes - // history available. - if (lz_options->before_size + lz_options->dict_size < LZMA2_CHUNK_MAX) - lz_options->before_size - = LZMA2_CHUNK_MAX - lz_options->dict_size; - - return LZMA_OK; -} - - -extern lzma_ret -lzma_lzma2_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - return lzma_lz_encoder_init( - next, allocator, filters, &lzma2_encoder_init); -} - - -extern uint64_t -lzma_lzma2_encoder_memusage(const void *options) -{ - const uint64_t lzma_mem = lzma_lzma_encoder_memusage(options); - if (lzma_mem == UINT64_MAX) - return UINT64_MAX; - - return sizeof(lzma_coder) + lzma_mem; -} - - -extern lzma_ret -lzma_lzma2_props_encode(const void *options, uint8_t *out) -{ - const lzma_options_lzma *const opt = options; - uint32_t d = MAX(opt->dict_size, LZMA_DICT_SIZE_MIN); - - // Round up to to the next 2^n - 1 or 2^n + 2^(n - 1) - 1 depending - // on which one is the next: - --d; - d |= d >> 2; - d |= d >> 3; - d |= d >> 4; - d |= d >> 8; - d |= d >> 16; - - // Get the highest two bits using the proper encoding: - if (d == UINT32_MAX) - out[0] = 40; - else - out[0] = get_pos_slot(d + 1) - 24; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.h deleted file mode 100644 index ca19ef4691c..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma2_encoder.h +++ /dev/null @@ -1,41 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma2_encoder.h -/// \brief LZMA2 encoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZMA2_ENCODER_H -#define LZMA_LZMA2_ENCODER_H - -#include "common.h" - - -/// Maximum number of bytes of actual data per chunk (no headers) -#define LZMA2_CHUNK_MAX (UINT32_C(1) << 16) - -/// Maximum uncompressed size of LZMA chunk (no headers) -#define LZMA2_UNCOMPRESSED_MAX (UINT32_C(1) << 21) - -/// Maximum size of LZMA2 headers -#define LZMA2_HEADER_MAX 6 - -/// Size of a header for uncompressed chunk -#define LZMA2_HEADER_UNCOMPRESSED 3 - - -extern lzma_ret lzma_lzma2_encoder_init( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters); - -extern uint64_t lzma_lzma2_encoder_memusage(const void *options); - -extern lzma_ret lzma_lzma2_props_encode(const void *options, uint8_t *out); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_common.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_common.h deleted file mode 100644 index e31e285f9a5..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_common.h +++ /dev/null @@ -1,223 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_common.h -/// \brief Private definitions common to LZMA encoder and decoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZMA_COMMON_H -#define LZMA_LZMA_COMMON_H - -#include "common.h" -#include "range_common.h" - - -/////////////////// -// Miscellaneous // -/////////////////// - -/// Maximum number of position states. A position state is the lowest pos bits -/// number of bits of the current uncompressed offset. In some places there -/// are different sets of probabilities for different pos states. -#define POS_STATES_MAX (1 << LZMA_PB_MAX) - - -/// Validates lc, lp, and pb. -static inline bool -is_lclppb_valid(const lzma_options_lzma *options) -{ - return options->lc <= LZMA_LCLP_MAX && options->lp <= LZMA_LCLP_MAX - && options->lc + options->lp <= LZMA_LCLP_MAX - && options->pb <= LZMA_PB_MAX; -} - - -/////////// -// State // -/////////// - -/// This enum is used to track which events have occurred most recently and -/// in which order. This information is used to predict the next event. -/// -/// Events: -/// - Literal: One 8-bit byte -/// - Match: Repeat a chunk of data at some distance -/// - Long repeat: Multi-byte match at a recently seen distance -/// - Short repeat: One-byte repeat at a recently seen distance -/// -/// The event names are in from STATE_oldest_older_previous. REP means -/// either short or long repeated match, and NONLIT means any non-literal. -typedef enum { - STATE_LIT_LIT, - STATE_MATCH_LIT_LIT, - STATE_REP_LIT_LIT, - STATE_SHORTREP_LIT_LIT, - STATE_MATCH_LIT, - STATE_REP_LIT, - STATE_SHORTREP_LIT, - STATE_LIT_MATCH, - STATE_LIT_LONGREP, - STATE_LIT_SHORTREP, - STATE_NONLIT_MATCH, - STATE_NONLIT_REP, -} lzma_lzma_state; - - -/// Total number of states -#define STATES 12 - -/// The lowest 7 states indicate that the previous state was a literal. -#define LIT_STATES 7 - - -/// Indicate that the latest state was a literal. -#define update_literal(state) \ - state = ((state) <= STATE_SHORTREP_LIT_LIT \ - ? STATE_LIT_LIT \ - : ((state) <= STATE_LIT_SHORTREP \ - ? (state) - 3 \ - : (state) - 6)) - -/// Indicate that the latest state was a match. -#define update_match(state) \ - state = ((state) < LIT_STATES ? STATE_LIT_MATCH : STATE_NONLIT_MATCH) - -/// Indicate that the latest state was a long repeated match. -#define update_long_rep(state) \ - state = ((state) < LIT_STATES ? STATE_LIT_LONGREP : STATE_NONLIT_REP) - -/// Indicate that the latest state was a short match. -#define update_short_rep(state) \ - state = ((state) < LIT_STATES ? STATE_LIT_SHORTREP : STATE_NONLIT_REP) - -/// Test if the previous state was a literal. -#define is_literal_state(state) \ - ((state) < LIT_STATES) - - -///////////// -// Literal // -///////////// - -/// Each literal coder is divided in three sections: -/// - 0x001-0x0FF: Without match byte -/// - 0x101-0x1FF: With match byte; match bit is 0 -/// - 0x201-0x2FF: With match byte; match bit is 1 -/// -/// Match byte is used when the previous LZMA symbol was something else than -/// a literal (that is, it was some kind of match). -#define LITERAL_CODER_SIZE 0x300 - -/// Maximum number of literal coders -#define LITERAL_CODERS_MAX (1 << LZMA_LCLP_MAX) - -/// Locate the literal coder for the next literal byte. The choice depends on -/// - the lowest literal_pos_bits bits of the position of the current -/// byte; and -/// - the highest literal_context_bits bits of the previous byte. -#define literal_subcoder(probs, lc, lp_mask, pos, prev_byte) \ - ((probs)[(((pos) & lp_mask) << lc) + ((prev_byte) >> (8 - lc))]) - - -static inline void -literal_init(probability (*probs)[LITERAL_CODER_SIZE], - uint32_t lc, uint32_t lp) -{ - assert(lc + lp <= LZMA_LCLP_MAX); - - const uint32_t coders = 1U << (lc + lp); - - for (uint32_t i = 0; i < coders; ++i) - for (uint32_t j = 0; j < LITERAL_CODER_SIZE; ++j) - bit_reset(probs[i][j]); - - return; -} - - -////////////////// -// Match length // -////////////////// - -// Minimum length of a match is two bytes. -#define MATCH_LEN_MIN 2 - -// Match length is encoded with 4, 5, or 10 bits. -// -// Length Bits -// 2-9 4 = Choice=0 + 3 bits -// 10-17 5 = Choice=1 + Choice2=0 + 3 bits -// 18-273 10 = Choice=1 + Choice2=1 + 8 bits -#define LEN_LOW_BITS 3 -#define LEN_LOW_SYMBOLS (1 << LEN_LOW_BITS) -#define LEN_MID_BITS 3 -#define LEN_MID_SYMBOLS (1 << LEN_MID_BITS) -#define LEN_HIGH_BITS 8 -#define LEN_HIGH_SYMBOLS (1 << LEN_HIGH_BITS) -#define LEN_SYMBOLS (LEN_LOW_SYMBOLS + LEN_MID_SYMBOLS + LEN_HIGH_SYMBOLS) - -// Maximum length of a match is 273 which is a result of the encoding -// described above. -#define MATCH_LEN_MAX (MATCH_LEN_MIN + LEN_SYMBOLS - 1) - - -//////////////////// -// Match distance // -//////////////////// - -// Different set of probabilities is used for match distances that have very -// short match length: Lengths of 2, 3, and 4 bytes have a separate set of -// probabilities for each length. The matches with longer length use a shared -// set of probabilities. -#define LEN_TO_POS_STATES 4 - -// Macro to get the index of the appropriate probability array. -#define get_len_to_pos_state(len) \ - ((len) < LEN_TO_POS_STATES + MATCH_LEN_MIN \ - ? (len) - MATCH_LEN_MIN \ - : LEN_TO_POS_STATES - 1) - -// The highest two bits of a match distance (pos slot) are encoded using six -// bits. See fastpos.h for more explanation. -#define POS_SLOT_BITS 6 -#define POS_SLOTS (1 << POS_SLOT_BITS) - -// Match distances up to 127 are fully encoded using probabilities. Since -// the highest two bits (pos slot) are always encoded using six bits, the -// distances 0-3 don't need any additional bits to encode, since the pos -// slot itself is the same as the actual distance. START_POS_MODEL_INDEX -// indicates the first pos slot where at least one additional bit is needed. -#define START_POS_MODEL_INDEX 4 - -// Match distances greater than 127 are encoded in three pieces: -// - pos slot: the highest two bits -// - direct bits: 2-26 bits below the highest two bits -// - alignment bits: four lowest bits -// -// Direct bits don't use any probabilities. -// -// The pos slot value of 14 is for distances 128-191 (see the table in -// fastpos.h to understand why). -#define END_POS_MODEL_INDEX 14 - -// Pos slots that indicate a distance <= 127. -#define FULL_DISTANCES_BITS (END_POS_MODEL_INDEX / 2) -#define FULL_DISTANCES (1 << FULL_DISTANCES_BITS) - -// For match distances greater than 127, only the highest two bits and the -// lowest four bits (alignment) is encoded using probabilities. -#define ALIGN_BITS 4 -#define ALIGN_TABLE_SIZE (1 << ALIGN_BITS) -#define ALIGN_MASK (ALIGN_TABLE_SIZE - 1) - -// LZMA remembers the four most recent match distances. Reusing these distances -// tends to take less space than re-encoding the actual distance value. -#define REP_DISTANCES 4 - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.c deleted file mode 100644 index a013a62be7f..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.c +++ /dev/null @@ -1,1057 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_decoder.c -/// \brief LZMA decoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lz_decoder.h" -#include "lzma_common.h" -#include "lzma_decoder.h" -#include "range_decoder.h" - - -#ifdef HAVE_SMALL - -// Macros for (somewhat) size-optimized code. -#define seq_4(seq) seq - -#define seq_6(seq) seq - -#define seq_8(seq) seq - -#define seq_len(seq) \ - seq ## _CHOICE, \ - seq ## _CHOICE2, \ - seq ## _BITTREE - -#define len_decode(target, ld, pos_state, seq) \ -do { \ -case seq ## _CHOICE: \ - rc_if_0(ld.choice, seq ## _CHOICE) { \ - rc_update_0(ld.choice); \ - probs = ld.low[pos_state];\ - limit = LEN_LOW_SYMBOLS; \ - target = MATCH_LEN_MIN; \ - } else { \ - rc_update_1(ld.choice); \ -case seq ## _CHOICE2: \ - rc_if_0(ld.choice2, seq ## _CHOICE2) { \ - rc_update_0(ld.choice2); \ - probs = ld.mid[pos_state]; \ - limit = LEN_MID_SYMBOLS; \ - target = MATCH_LEN_MIN + LEN_LOW_SYMBOLS; \ - } else { \ - rc_update_1(ld.choice2); \ - probs = ld.high; \ - limit = LEN_HIGH_SYMBOLS; \ - target = MATCH_LEN_MIN + LEN_LOW_SYMBOLS \ - + LEN_MID_SYMBOLS; \ - } \ - } \ - symbol = 1; \ -case seq ## _BITTREE: \ - do { \ - rc_bit(probs[symbol], , , seq ## _BITTREE); \ - } while (symbol < limit); \ - target += symbol - limit; \ -} while (0) - -#else // HAVE_SMALL - -// Unrolled versions -#define seq_4(seq) \ - seq ## 0, \ - seq ## 1, \ - seq ## 2, \ - seq ## 3 - -#define seq_6(seq) \ - seq ## 0, \ - seq ## 1, \ - seq ## 2, \ - seq ## 3, \ - seq ## 4, \ - seq ## 5 - -#define seq_8(seq) \ - seq ## 0, \ - seq ## 1, \ - seq ## 2, \ - seq ## 3, \ - seq ## 4, \ - seq ## 5, \ - seq ## 6, \ - seq ## 7 - -#define seq_len(seq) \ - seq ## _CHOICE, \ - seq ## _LOW0, \ - seq ## _LOW1, \ - seq ## _LOW2, \ - seq ## _CHOICE2, \ - seq ## _MID0, \ - seq ## _MID1, \ - seq ## _MID2, \ - seq ## _HIGH0, \ - seq ## _HIGH1, \ - seq ## _HIGH2, \ - seq ## _HIGH3, \ - seq ## _HIGH4, \ - seq ## _HIGH5, \ - seq ## _HIGH6, \ - seq ## _HIGH7 - -#define len_decode(target, ld, pos_state, seq) \ -do { \ - symbol = 1; \ -case seq ## _CHOICE: \ - rc_if_0(ld.choice, seq ## _CHOICE) { \ - rc_update_0(ld.choice); \ - rc_bit_case(ld.low[pos_state][symbol], , , seq ## _LOW0); \ - rc_bit_case(ld.low[pos_state][symbol], , , seq ## _LOW1); \ - rc_bit_case(ld.low[pos_state][symbol], , , seq ## _LOW2); \ - target = symbol - LEN_LOW_SYMBOLS + MATCH_LEN_MIN; \ - } else { \ - rc_update_1(ld.choice); \ -case seq ## _CHOICE2: \ - rc_if_0(ld.choice2, seq ## _CHOICE2) { \ - rc_update_0(ld.choice2); \ - rc_bit_case(ld.mid[pos_state][symbol], , , \ - seq ## _MID0); \ - rc_bit_case(ld.mid[pos_state][symbol], , , \ - seq ## _MID1); \ - rc_bit_case(ld.mid[pos_state][symbol], , , \ - seq ## _MID2); \ - target = symbol - LEN_MID_SYMBOLS \ - + MATCH_LEN_MIN + LEN_LOW_SYMBOLS; \ - } else { \ - rc_update_1(ld.choice2); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH0); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH1); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH2); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH3); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH4); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH5); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH6); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH7); \ - target = symbol - LEN_HIGH_SYMBOLS \ - + MATCH_LEN_MIN \ - + LEN_LOW_SYMBOLS + LEN_MID_SYMBOLS; \ - } \ - } \ -} while (0) - -#endif // HAVE_SMALL - - -/// Length decoder probabilities; see comments in lzma_common.h. -typedef struct { - probability choice; - probability choice2; - probability low[POS_STATES_MAX][LEN_LOW_SYMBOLS]; - probability mid[POS_STATES_MAX][LEN_MID_SYMBOLS]; - probability high[LEN_HIGH_SYMBOLS]; -} lzma_length_decoder; - - -struct lzma_coder_s { - /////////////////// - // Probabilities // - /////////////////// - - /// Literals; see comments in lzma_common.h. - probability literal[LITERAL_CODERS_MAX][LITERAL_CODER_SIZE]; - - /// If 1, it's a match. Otherwise it's a single 8-bit literal. - probability is_match[STATES][POS_STATES_MAX]; - - /// If 1, it's a repeated match. The distance is one of rep0 .. rep3. - probability is_rep[STATES]; - - /// If 0, distance of a repeated match is rep0. - /// Otherwise check is_rep1. - probability is_rep0[STATES]; - - /// If 0, distance of a repeated match is rep1. - /// Otherwise check is_rep2. - probability is_rep1[STATES]; - - /// If 0, distance of a repeated match is rep2. Otherwise it is rep3. - probability is_rep2[STATES]; - - /// If 1, the repeated match has length of one byte. Otherwise - /// the length is decoded from rep_len_decoder. - probability is_rep0_long[STATES][POS_STATES_MAX]; - - /// Probability tree for the highest two bits of the match distance. - /// There is a separate probability tree for match lengths of - /// 2 (i.e. MATCH_LEN_MIN), 3, 4, and [5, 273]. - probability pos_slot[LEN_TO_POS_STATES][POS_SLOTS]; - - /// Probility trees for additional bits for match distance when the - /// distance is in the range [4, 127]. - probability pos_special[FULL_DISTANCES - END_POS_MODEL_INDEX]; - - /// Probability tree for the lowest four bits of a match distance - /// that is equal to or greater than 128. - probability pos_align[ALIGN_TABLE_SIZE]; - - /// Length of a normal match - lzma_length_decoder match_len_decoder; - - /// Length of a repeated match - lzma_length_decoder rep_len_decoder; - - /////////////////// - // Decoder state // - /////////////////// - - // Range coder - lzma_range_decoder rc; - - // Types of the most recently seen LZMA symbols - lzma_lzma_state state; - - uint32_t rep0; ///< Distance of the latest match - uint32_t rep1; ///< Distance of second latest match - uint32_t rep2; ///< Distance of third latest match - uint32_t rep3; ///< Distance of fourth latest match - - uint32_t pos_mask; // (1U << pb) - 1 - uint32_t literal_context_bits; - uint32_t literal_pos_mask; - - /// Uncompressed size as bytes, or LZMA_VLI_UNKNOWN if end of - /// payload marker is expected. - lzma_vli uncompressed_size; - - //////////////////////////////// - // State of incomplete symbol // - //////////////////////////////// - - /// Position where to continue the decoder loop - enum { - SEQ_NORMALIZE, - SEQ_IS_MATCH, - seq_8(SEQ_LITERAL), - seq_8(SEQ_LITERAL_MATCHED), - SEQ_LITERAL_WRITE, - SEQ_IS_REP, - seq_len(SEQ_MATCH_LEN), - seq_6(SEQ_POS_SLOT), - SEQ_POS_MODEL, - SEQ_DIRECT, - seq_4(SEQ_ALIGN), - SEQ_EOPM, - SEQ_IS_REP0, - SEQ_SHORTREP, - SEQ_IS_REP0_LONG, - SEQ_IS_REP1, - SEQ_IS_REP2, - seq_len(SEQ_REP_LEN), - SEQ_COPY, - } sequence; - - /// Base of the current probability tree - probability *probs; - - /// Symbol being decoded. This is also used as an index variable in - /// bittree decoders: probs[symbol] - uint32_t symbol; - - /// Used as a loop termination condition on bittree decoders and - /// direct bits decoder. - uint32_t limit; - - /// Matched literal decoder: 0x100 or 0 to help avoiding branches. - /// Bittree reverse decoders: Offset of the next bit: 1 << offset - uint32_t offset; - - /// If decoding a literal: match byte. - /// If decoding a match: length of the match. - uint32_t len; -}; - - -static lzma_ret -lzma_decode(lzma_coder *restrict coder, lzma_dict *restrict dictptr, - const uint8_t *restrict in, - size_t *restrict in_pos, size_t in_size) -{ - //////////////////// - // Initialization // - //////////////////// - - if (!rc_read_init(&coder->rc, in, in_pos, in_size)) - return LZMA_OK; - - /////////////// - // Variables // - /////////////// - - // Making local copies of often-used variables improves both - // speed and readability. - - lzma_dict dict = *dictptr; - - const size_t dict_start = dict.pos; - - // Range decoder - rc_to_local(coder->rc, *in_pos); - - // State - uint32_t state = coder->state; - uint32_t rep0 = coder->rep0; - uint32_t rep1 = coder->rep1; - uint32_t rep2 = coder->rep2; - uint32_t rep3 = coder->rep3; - - const uint32_t pos_mask = coder->pos_mask; - - // These variables are actually needed only if we last time ran - // out of input in the middle of the decoder loop. - probability *probs = coder->probs; - uint32_t symbol = coder->symbol; - uint32_t limit = coder->limit; - uint32_t offset = coder->offset; - uint32_t len = coder->len; - - const uint32_t literal_pos_mask = coder->literal_pos_mask; - const uint32_t literal_context_bits = coder->literal_context_bits; - - // Temporary variables - uint32_t pos_state = dict.pos & pos_mask; - - lzma_ret ret = LZMA_OK; - - // If uncompressed size is known, there must be no end of payload - // marker. - const bool no_eopm = coder->uncompressed_size - != LZMA_VLI_UNKNOWN; - if (no_eopm && coder->uncompressed_size < dict.limit - dict.pos) - dict.limit = dict.pos + (size_t)(coder->uncompressed_size); - - // The main decoder loop. The "switch" is used to restart the decoder at - // correct location. Once restarted, the "switch" is no longer used. - switch (coder->sequence) - while (true) { - // Calculate new pos_state. This is skipped on the first loop - // since we already calculated it when setting up the local - // variables. - pos_state = dict.pos & pos_mask; - - case SEQ_NORMALIZE: - case SEQ_IS_MATCH: - if (unlikely(no_eopm && dict.pos == dict.limit)) - break; - - rc_if_0(coder->is_match[state][pos_state], SEQ_IS_MATCH) { - rc_update_0(coder->is_match[state][pos_state]); - - // It's a literal i.e. a single 8-bit byte. - - probs = literal_subcoder(coder->literal, - literal_context_bits, literal_pos_mask, - dict.pos, dict_get(&dict, 0)); - symbol = 1; - - if (is_literal_state(state)) { - // Decode literal without match byte. -#ifdef HAVE_SMALL - case SEQ_LITERAL: - do { - rc_bit(probs[symbol], , , SEQ_LITERAL); - } while (symbol < (1 << 8)); -#else - rc_bit_case(probs[symbol], , , SEQ_LITERAL0); - rc_bit_case(probs[symbol], , , SEQ_LITERAL1); - rc_bit_case(probs[symbol], , , SEQ_LITERAL2); - rc_bit_case(probs[symbol], , , SEQ_LITERAL3); - rc_bit_case(probs[symbol], , , SEQ_LITERAL4); - rc_bit_case(probs[symbol], , , SEQ_LITERAL5); - rc_bit_case(probs[symbol], , , SEQ_LITERAL6); - rc_bit_case(probs[symbol], , , SEQ_LITERAL7); -#endif - } else { - // Decode literal with match byte. - // - // We store the byte we compare against - // ("match byte") to "len" to minimize the - // number of variables we need to store - // between decoder calls. - len = dict_get(&dict, rep0) << 1; - - // The usage of "offset" allows omitting some - // branches, which should give tiny speed - // improvement on some CPUs. "offset" gets - // set to zero if match_bit didn't match. - offset = 0x100; - -#ifdef HAVE_SMALL - case SEQ_LITERAL_MATCHED: - do { - const uint32_t match_bit - = len & offset; - const uint32_t subcoder_index - = offset + match_bit - + symbol; - - rc_bit(probs[subcoder_index], - offset &= ~match_bit, - offset &= match_bit, - SEQ_LITERAL_MATCHED); - - // It seems to be faster to do this - // here instead of putting it to the - // beginning of the loop and then - // putting the "case" in the middle - // of the loop. - len <<= 1; - - } while (symbol < (1 << 8)); -#else - // Unroll the loop. - uint32_t match_bit; - uint32_t subcoder_index; - -# define d(seq) \ - case seq: \ - match_bit = len & offset; \ - subcoder_index = offset + match_bit + symbol; \ - rc_bit(probs[subcoder_index], \ - offset &= ~match_bit, \ - offset &= match_bit, \ - seq) - - d(SEQ_LITERAL_MATCHED0); - len <<= 1; - d(SEQ_LITERAL_MATCHED1); - len <<= 1; - d(SEQ_LITERAL_MATCHED2); - len <<= 1; - d(SEQ_LITERAL_MATCHED3); - len <<= 1; - d(SEQ_LITERAL_MATCHED4); - len <<= 1; - d(SEQ_LITERAL_MATCHED5); - len <<= 1; - d(SEQ_LITERAL_MATCHED6); - len <<= 1; - d(SEQ_LITERAL_MATCHED7); -# undef d -#endif - } - - //update_literal(state); - // Use a lookup table to update to literal state, - // since compared to other state updates, this would - // need two branches. - static const lzma_lzma_state next_state[] = { - STATE_LIT_LIT, - STATE_LIT_LIT, - STATE_LIT_LIT, - STATE_LIT_LIT, - STATE_MATCH_LIT_LIT, - STATE_REP_LIT_LIT, - STATE_SHORTREP_LIT_LIT, - STATE_MATCH_LIT, - STATE_REP_LIT, - STATE_SHORTREP_LIT, - STATE_MATCH_LIT, - STATE_REP_LIT - }; - state = next_state[state]; - - case SEQ_LITERAL_WRITE: - if (unlikely(dict_put(&dict, symbol))) { - coder->sequence = SEQ_LITERAL_WRITE; - goto out; - } - - continue; - } - - // Instead of a new byte we are going to get a byte range - // (distance and length) which will be repeated from our - // output history. - - rc_update_1(coder->is_match[state][pos_state]); - - case SEQ_IS_REP: - rc_if_0(coder->is_rep[state], SEQ_IS_REP) { - // Not a repeated match - rc_update_0(coder->is_rep[state]); - update_match(state); - - // The latest three match distances are kept in - // memory in case there are repeated matches. - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - - // Decode the length of the match. - len_decode(len, coder->match_len_decoder, - pos_state, SEQ_MATCH_LEN); - - // Prepare to decode the highest two bits of the - // match distance. - probs = coder->pos_slot[get_len_to_pos_state(len)]; - symbol = 1; - -#ifdef HAVE_SMALL - case SEQ_POS_SLOT: - do { - rc_bit(probs[symbol], , , SEQ_POS_SLOT); - } while (symbol < POS_SLOTS); -#else - rc_bit_case(probs[symbol], , , SEQ_POS_SLOT0); - rc_bit_case(probs[symbol], , , SEQ_POS_SLOT1); - rc_bit_case(probs[symbol], , , SEQ_POS_SLOT2); - rc_bit_case(probs[symbol], , , SEQ_POS_SLOT3); - rc_bit_case(probs[symbol], , , SEQ_POS_SLOT4); - rc_bit_case(probs[symbol], , , SEQ_POS_SLOT5); -#endif - // Get rid of the highest bit that was needed for - // indexing of the probability array. - symbol -= POS_SLOTS; - assert(symbol <= 63); - - if (symbol < START_POS_MODEL_INDEX) { - // Match distances [0, 3] have only two bits. - rep0 = symbol; - } else { - // Decode the lowest [1, 29] bits of - // the match distance. - limit = (symbol >> 1) - 1; - assert(limit >= 1 && limit <= 30); - rep0 = 2 + (symbol & 1); - - if (symbol < END_POS_MODEL_INDEX) { - // Prepare to decode the low bits for - // a distance of [4, 127]. - assert(limit <= 5); - rep0 <<= limit; - assert(rep0 <= 96); - // -1 is fine, because we start - // decoding at probs[1], not probs[0]. - // NOTE: This violates the C standard, - // since we are doing pointer - // arithmetic past the beginning of - // the array. - assert((int32_t)(rep0 - symbol - 1) - >= -1); - assert((int32_t)(rep0 - symbol - 1) - <= 82); - probs = coder->pos_special + rep0 - - symbol - 1; - symbol = 1; - offset = 0; - case SEQ_POS_MODEL: -#ifdef HAVE_SMALL - do { - rc_bit(probs[symbol], , - rep0 += 1 << offset, - SEQ_POS_MODEL); - } while (++offset < limit); -#else - switch (limit) { - case 5: - assert(offset == 0); - rc_bit(probs[symbol], , - rep0 += 1, - SEQ_POS_MODEL); - ++offset; - --limit; - case 4: - rc_bit(probs[symbol], , - rep0 += 1 << offset, - SEQ_POS_MODEL); - ++offset; - --limit; - case 3: - rc_bit(probs[symbol], , - rep0 += 1 << offset, - SEQ_POS_MODEL); - ++offset; - --limit; - case 2: - rc_bit(probs[symbol], , - rep0 += 1 << offset, - SEQ_POS_MODEL); - ++offset; - --limit; - case 1: - // We need "symbol" only for - // indexing the probability - // array, thus we can use - // rc_bit_last() here to omit - // the unneeded updating of - // "symbol". - rc_bit_last(probs[symbol], , - rep0 += 1 << offset, - SEQ_POS_MODEL); - } -#endif - } else { - // The distace is >= 128. Decode the - // lower bits without probabilities - // except the lowest four bits. - assert(symbol >= 14); - assert(limit >= 6); - limit -= ALIGN_BITS; - assert(limit >= 2); - case SEQ_DIRECT: - // Not worth manual unrolling - do { - rc_direct(rep0, SEQ_DIRECT); - } while (--limit > 0); - - // Decode the lowest four bits using - // probabilities. - rep0 <<= ALIGN_BITS; - symbol = 1; -#ifdef HAVE_SMALL - offset = 0; - case SEQ_ALIGN: - do { - rc_bit(coder->pos_align[ - symbol], , - rep0 += 1 << offset, - SEQ_ALIGN); - } while (++offset < ALIGN_BITS); -#else - case SEQ_ALIGN0: - rc_bit(coder->pos_align[symbol], , - rep0 += 1, SEQ_ALIGN0); - case SEQ_ALIGN1: - rc_bit(coder->pos_align[symbol], , - rep0 += 2, SEQ_ALIGN1); - case SEQ_ALIGN2: - rc_bit(coder->pos_align[symbol], , - rep0 += 4, SEQ_ALIGN2); - case SEQ_ALIGN3: - // Like in SEQ_POS_MODEL, we don't - // need "symbol" for anything else - // than indexing the probability array. - rc_bit_last(coder->pos_align[symbol], , - rep0 += 8, SEQ_ALIGN3); -#endif - - if (rep0 == UINT32_MAX) { - // End of payload marker was - // found. It must not be - // present if uncompressed - // size is known. - if (coder->uncompressed_size - != LZMA_VLI_UNKNOWN) { - ret = LZMA_DATA_ERROR; - goto out; - } - - case SEQ_EOPM: - // TODO Comment - rc_normalize(SEQ_EOPM); - ret = LZMA_STREAM_END; - goto out; - } - } - } - - // Validate the distance we just decoded. - if (unlikely(!dict_is_distance_valid(&dict, rep0))) { - ret = LZMA_DATA_ERROR; - goto out; - } - - } else { - rc_update_1(coder->is_rep[state]); - - // Repeated match - // - // The match distance is a value that we have had - // earlier. The latest four match distances are - // available as rep0, rep1, rep2 and rep3. We will - // now decode which of them is the new distance. - // - // There cannot be a match if we haven't produced - // any output, so check that first. - if (unlikely(!dict_is_distance_valid(&dict, 0))) { - ret = LZMA_DATA_ERROR; - goto out; - } - - case SEQ_IS_REP0: - rc_if_0(coder->is_rep0[state], SEQ_IS_REP0) { - rc_update_0(coder->is_rep0[state]); - // The distance is rep0. - - case SEQ_IS_REP0_LONG: - rc_if_0(coder->is_rep0_long[state][pos_state], - SEQ_IS_REP0_LONG) { - rc_update_0(coder->is_rep0_long[ - state][pos_state]); - - update_short_rep(state); - - case SEQ_SHORTREP: - if (unlikely(dict_put(&dict, dict_get( - &dict, rep0)))) { - coder->sequence = SEQ_SHORTREP; - goto out; - } - - continue; - } - - // Repeating more than one byte at - // distance of rep0. - rc_update_1(coder->is_rep0_long[ - state][pos_state]); - - } else { - rc_update_1(coder->is_rep0[state]); - - case SEQ_IS_REP1: - // The distance is rep1, rep2 or rep3. Once - // we find out which one of these three, it - // is stored to rep0 and rep1, rep2 and rep3 - // are updated accordingly. - rc_if_0(coder->is_rep1[state], SEQ_IS_REP1) { - rc_update_0(coder->is_rep1[state]); - - const uint32_t distance = rep1; - rep1 = rep0; - rep0 = distance; - - } else { - rc_update_1(coder->is_rep1[state]); - case SEQ_IS_REP2: - rc_if_0(coder->is_rep2[state], - SEQ_IS_REP2) { - rc_update_0(coder->is_rep2[ - state]); - - const uint32_t distance = rep2; - rep2 = rep1; - rep1 = rep0; - rep0 = distance; - - } else { - rc_update_1(coder->is_rep2[ - state]); - - const uint32_t distance = rep3; - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - rep0 = distance; - } - } - } - - update_long_rep(state); - - // Decode the length of the repeated match. - len_decode(len, coder->rep_len_decoder, - pos_state, SEQ_REP_LEN); - } - - ///////////////////////////////// - // Repeat from history buffer. // - ///////////////////////////////// - - // The length is always between these limits. There is no way - // to trigger the algorithm to set len outside this range. - assert(len >= MATCH_LEN_MIN); - assert(len <= MATCH_LEN_MAX); - - case SEQ_COPY: - // Repeat len bytes from distance of rep0. - if (unlikely(dict_repeat(&dict, rep0, &len))) { - coder->sequence = SEQ_COPY; - goto out; - } - } - - rc_normalize(SEQ_NORMALIZE); - coder->sequence = SEQ_IS_MATCH; - -out: - // Save state - - // NOTE: Must not copy dict.limit. - dictptr->pos = dict.pos; - dictptr->full = dict.full; - - rc_from_local(coder->rc, *in_pos); - - coder->state = state; - coder->rep0 = rep0; - coder->rep1 = rep1; - coder->rep2 = rep2; - coder->rep3 = rep3; - - coder->probs = probs; - coder->symbol = symbol; - coder->limit = limit; - coder->offset = offset; - coder->len = len; - - // Update the remaining amount of uncompressed data if uncompressed - // size was known. - if (coder->uncompressed_size != LZMA_VLI_UNKNOWN) { - coder->uncompressed_size -= dict.pos - dict_start; - - // Since there cannot be end of payload marker if the - // uncompressed size was known, we check here if we - // finished decoding. - if (coder->uncompressed_size == 0 && ret == LZMA_OK - && coder->sequence != SEQ_NORMALIZE) - ret = coder->sequence == SEQ_IS_MATCH - ? LZMA_STREAM_END : LZMA_DATA_ERROR; - } - - // We can do an additional check in the range decoder to catch some - // corrupted files. - if (ret == LZMA_STREAM_END) { - if (!rc_is_finished(coder->rc)) - ret = LZMA_DATA_ERROR; - - // Reset the range decoder so that it is ready to reinitialize - // for a new LZMA2 chunk. - rc_reset(coder->rc); - } - - return ret; -} - - - -static void -lzma_decoder_uncompressed(lzma_coder *coder, lzma_vli uncompressed_size) -{ - coder->uncompressed_size = uncompressed_size; -} - -/* -extern void -lzma_lzma_decoder_uncompressed(void *coder_ptr, lzma_vli uncompressed_size) -{ - // This is hack. - (*(lzma_coder **)(coder))->uncompressed_size = uncompressed_size; -} -*/ - -static void -lzma_decoder_reset(lzma_coder *coder, const void *opt) -{ - const lzma_options_lzma *options = opt; - - // NOTE: We assume that lc/lp/pb are valid since they were - // successfully decoded with lzma_lzma_decode_properties(). - // FIXME? - - // Calculate pos_mask. We don't need pos_bits as is for anything. - coder->pos_mask = (1U << options->pb) - 1; - - // Initialize the literal decoder. - literal_init(coder->literal, options->lc, options->lp); - - coder->literal_context_bits = options->lc; - coder->literal_pos_mask = (1U << options->lp) - 1; - - // State - coder->state = STATE_LIT_LIT; - coder->rep0 = 0; - coder->rep1 = 0; - coder->rep2 = 0; - coder->rep3 = 0; - coder->pos_mask = (1U << options->pb) - 1; - - // Range decoder - rc_reset(coder->rc); - - // Bit and bittree decoders - for (uint32_t i = 0; i < STATES; ++i) { - for (uint32_t j = 0; j <= coder->pos_mask; ++j) { - bit_reset(coder->is_match[i][j]); - bit_reset(coder->is_rep0_long[i][j]); - } - - bit_reset(coder->is_rep[i]); - bit_reset(coder->is_rep0[i]); - bit_reset(coder->is_rep1[i]); - bit_reset(coder->is_rep2[i]); - } - - for (uint32_t i = 0; i < LEN_TO_POS_STATES; ++i) - bittree_reset(coder->pos_slot[i], POS_SLOT_BITS); - - for (uint32_t i = 0; i < FULL_DISTANCES - END_POS_MODEL_INDEX; ++i) - bit_reset(coder->pos_special[i]); - - bittree_reset(coder->pos_align, ALIGN_BITS); - - // Len decoders (also bit/bittree) - const uint32_t num_pos_states = 1U << options->pb; - bit_reset(coder->match_len_decoder.choice); - bit_reset(coder->match_len_decoder.choice2); - bit_reset(coder->rep_len_decoder.choice); - bit_reset(coder->rep_len_decoder.choice2); - - for (uint32_t pos_state = 0; pos_state < num_pos_states; ++pos_state) { - bittree_reset(coder->match_len_decoder.low[pos_state], - LEN_LOW_BITS); - bittree_reset(coder->match_len_decoder.mid[pos_state], - LEN_MID_BITS); - - bittree_reset(coder->rep_len_decoder.low[pos_state], - LEN_LOW_BITS); - bittree_reset(coder->rep_len_decoder.mid[pos_state], - LEN_MID_BITS); - } - - bittree_reset(coder->match_len_decoder.high, LEN_HIGH_BITS); - bittree_reset(coder->rep_len_decoder.high, LEN_HIGH_BITS); - - coder->sequence = SEQ_IS_MATCH; - coder->probs = NULL; - coder->symbol = 0; - coder->limit = 0; - coder->offset = 0; - coder->len = 0; - - return; -} - - -extern lzma_ret -lzma_lzma_decoder_create(lzma_lz_decoder *lz, lzma_allocator *allocator, - const void *opt, lzma_lz_options *lz_options) -{ - if (lz->coder == NULL) { - lz->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (lz->coder == NULL) - return LZMA_MEM_ERROR; - - lz->code = &lzma_decode; - lz->reset = &lzma_decoder_reset; - lz->set_uncompressed = &lzma_decoder_uncompressed; - } - - // All dictionary sizes are OK here. LZ decoder will take care of - // the special cases. - const lzma_options_lzma *options = opt; - lz_options->dict_size = options->dict_size; - lz_options->preset_dict = options->preset_dict; - lz_options->preset_dict_size = options->preset_dict_size; - - return LZMA_OK; -} - - -/// Allocate and initialize LZMA decoder. This is used only via LZ -/// initialization (lzma_lzma_decoder_init() passes function pointer to -/// the LZ initialization). -static lzma_ret -lzma_decoder_init(lzma_lz_decoder *lz, lzma_allocator *allocator, - const void *options, lzma_lz_options *lz_options) -{ - if (!is_lclppb_valid(options)) - return LZMA_PROG_ERROR; - - return_if_error(lzma_lzma_decoder_create( - lz, allocator, options, lz_options)); - - lzma_decoder_reset(lz->coder, options); - lzma_decoder_uncompressed(lz->coder, LZMA_VLI_UNKNOWN); - - return LZMA_OK; -} - - -extern lzma_ret -lzma_lzma_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - // LZMA can only be the last filter in the chain. This is enforced - // by the raw_decoder initialization. - assert(filters[1].init == NULL); - - return lzma_lz_decoder_init(next, allocator, filters, - &lzma_decoder_init); -} - - -extern bool -lzma_lzma_lclppb_decode(lzma_options_lzma *options, uint8_t byte) -{ - if (byte > (4 * 5 + 4) * 9 + 8) - return true; - - // See the file format specification to understand this. - options->pb = byte / (9 * 5); - byte -= options->pb * 9 * 5; - options->lp = byte / 9; - options->lc = byte - options->lp * 9; - - return options->lc + options->lp > LZMA_LCLP_MAX; -} - - -extern uint64_t -lzma_lzma_decoder_memusage_nocheck(const void *options) -{ - const lzma_options_lzma *const opt = options; - return sizeof(lzma_coder) + lzma_lz_decoder_memusage(opt->dict_size); -} - - -extern uint64_t -lzma_lzma_decoder_memusage(const void *options) -{ - if (!is_lclppb_valid(options)) - return UINT64_MAX; - - return lzma_lzma_decoder_memusage_nocheck(options); -} - - -extern lzma_ret -lzma_lzma_props_decode(void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size) -{ - if (props_size != 5) - return LZMA_OPTIONS_ERROR; - - lzma_options_lzma *opt - = lzma_alloc(sizeof(lzma_options_lzma), allocator); - if (opt == NULL) - return LZMA_MEM_ERROR; - - if (lzma_lzma_lclppb_decode(opt, props[0])) - goto error; - - // All dictionary sizes are accepted, including zero. LZ decoder - // will automatically use a dictionary at least a few KiB even if - // a smaller dictionary is requested. - opt->dict_size = integer_read_32(props + 1); - - opt->preset_dict = NULL; - opt->preset_dict_size = 0; - - *options = opt; - - return LZMA_OK; - -error: - lzma_free(opt, allocator); - return LZMA_OPTIONS_ERROR; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.h deleted file mode 100644 index 147208dc804..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_decoder.h +++ /dev/null @@ -1,52 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_decoder.h -/// \brief LZMA decoder API -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZMA_DECODER_H -#define LZMA_LZMA_DECODER_H - -#include "common.h" - - -/// Allocates and initializes LZMA decoder -extern lzma_ret lzma_lzma_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern uint64_t lzma_lzma_decoder_memusage(const void *options); - -extern lzma_ret lzma_lzma_props_decode( - void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size); - - -/// \brief Decodes the LZMA Properties byte (lc/lp/pb) -/// -/// \return true if error occorred, false on success -/// -extern bool lzma_lzma_lclppb_decode( - lzma_options_lzma *options, uint8_t byte); - - -#ifdef LZMA_LZ_DECODER_H -/// Allocate and setup function pointers only. This is used by LZMA1 and -/// LZMA2 decoders. -extern lzma_ret lzma_lzma_decoder_create( - lzma_lz_decoder *lz, lzma_allocator *allocator, - const void *opt, lzma_lz_options *lz_options); - -/// Gets memory usage without validating lc/lp/pb. This is used by LZMA2 -/// decoder, because raw LZMA2 decoding doesn't need lc/lp/pb. -extern uint64_t lzma_lzma_decoder_memusage_nocheck(const void *options); - -#endif - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.c deleted file mode 100644 index bda194cddf2..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.c +++ /dev/null @@ -1,675 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_encoder.c -/// \brief LZMA encoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lzma2_encoder.h" -#include "lzma_encoder_private.h" -#include "fastpos.h" - - -///////////// -// Literal // -///////////// - -static inline void -literal_matched(lzma_range_encoder *rc, probability *subcoder, - uint32_t match_byte, uint32_t symbol) -{ - uint32_t offset = 0x100; - symbol += UINT32_C(1) << 8; - - do { - match_byte <<= 1; - const uint32_t match_bit = match_byte & offset; - const uint32_t subcoder_index - = offset + match_bit + (symbol >> 8); - const uint32_t bit = (symbol >> 7) & 1; - rc_bit(rc, &subcoder[subcoder_index], bit); - - symbol <<= 1; - offset &= ~(match_byte ^ symbol); - - } while (symbol < (UINT32_C(1) << 16)); -} - - -static inline void -literal(lzma_coder *coder, lzma_mf *mf, uint32_t position) -{ - // Locate the literal byte to be encoded and the subcoder. - const uint8_t cur_byte = mf->buffer[ - mf->read_pos - mf->read_ahead]; - probability *subcoder = literal_subcoder(coder->literal, - coder->literal_context_bits, coder->literal_pos_mask, - position, mf->buffer[mf->read_pos - mf->read_ahead - 1]); - - if (is_literal_state(coder->state)) { - // Previous LZMA-symbol was a literal. Encode a normal - // literal without a match byte. - rc_bittree(&coder->rc, subcoder, 8, cur_byte); - } else { - // Previous LZMA-symbol was a match. Use the last byte of - // the match as a "match byte". That is, compare the bits - // of the current literal and the match byte. - const uint8_t match_byte = mf->buffer[ - mf->read_pos - coder->reps[0] - 1 - - mf->read_ahead]; - literal_matched(&coder->rc, subcoder, match_byte, cur_byte); - } - - update_literal(coder->state); -} - - -////////////////// -// Match length // -////////////////// - -static void -length_update_prices(lzma_length_encoder *lc, const uint32_t pos_state) -{ - const uint32_t table_size = lc->table_size; - lc->counters[pos_state] = table_size; - - const uint32_t a0 = rc_bit_0_price(lc->choice); - const uint32_t a1 = rc_bit_1_price(lc->choice); - const uint32_t b0 = a1 + rc_bit_0_price(lc->choice2); - const uint32_t b1 = a1 + rc_bit_1_price(lc->choice2); - uint32_t *const prices = lc->prices[pos_state]; - - uint32_t i; - for (i = 0; i < table_size && i < LEN_LOW_SYMBOLS; ++i) - prices[i] = a0 + rc_bittree_price(lc->low[pos_state], - LEN_LOW_BITS, i); - - for (; i < table_size && i < LEN_LOW_SYMBOLS + LEN_MID_SYMBOLS; ++i) - prices[i] = b0 + rc_bittree_price(lc->mid[pos_state], - LEN_MID_BITS, i - LEN_LOW_SYMBOLS); - - for (; i < table_size; ++i) - prices[i] = b1 + rc_bittree_price(lc->high, LEN_HIGH_BITS, - i - LEN_LOW_SYMBOLS - LEN_MID_SYMBOLS); - - return; -} - - -static inline void -length(lzma_range_encoder *rc, lzma_length_encoder *lc, - const uint32_t pos_state, uint32_t len, const bool fast_mode) -{ - assert(len <= MATCH_LEN_MAX); - len -= MATCH_LEN_MIN; - - if (len < LEN_LOW_SYMBOLS) { - rc_bit(rc, &lc->choice, 0); - rc_bittree(rc, lc->low[pos_state], LEN_LOW_BITS, len); - } else { - rc_bit(rc, &lc->choice, 1); - len -= LEN_LOW_SYMBOLS; - - if (len < LEN_MID_SYMBOLS) { - rc_bit(rc, &lc->choice2, 0); - rc_bittree(rc, lc->mid[pos_state], LEN_MID_BITS, len); - } else { - rc_bit(rc, &lc->choice2, 1); - len -= LEN_MID_SYMBOLS; - rc_bittree(rc, lc->high, LEN_HIGH_BITS, len); - } - } - - // Only getoptimum uses the prices so don't update the table when - // in fast mode. - if (!fast_mode) - if (--lc->counters[pos_state] == 0) - length_update_prices(lc, pos_state); -} - - -/////////// -// Match // -/////////// - -static inline void -match(lzma_coder *coder, const uint32_t pos_state, - const uint32_t distance, const uint32_t len) -{ - update_match(coder->state); - - length(&coder->rc, &coder->match_len_encoder, pos_state, len, - coder->fast_mode); - - const uint32_t pos_slot = get_pos_slot(distance); - const uint32_t len_to_pos_state = get_len_to_pos_state(len); - rc_bittree(&coder->rc, coder->pos_slot[len_to_pos_state], - POS_SLOT_BITS, pos_slot); - - if (pos_slot >= START_POS_MODEL_INDEX) { - const uint32_t footer_bits = (pos_slot >> 1) - 1; - const uint32_t base = (2 | (pos_slot & 1)) << footer_bits; - const uint32_t pos_reduced = distance - base; - - if (pos_slot < END_POS_MODEL_INDEX) { - // Careful here: base - pos_slot - 1 can be -1, but - // rc_bittree_reverse starts at probs[1], not probs[0]. - rc_bittree_reverse(&coder->rc, - coder->pos_special + base - pos_slot - 1, - footer_bits, pos_reduced); - } else { - rc_direct(&coder->rc, pos_reduced >> ALIGN_BITS, - footer_bits - ALIGN_BITS); - rc_bittree_reverse( - &coder->rc, coder->pos_align, - ALIGN_BITS, pos_reduced & ALIGN_MASK); - ++coder->align_price_count; - } - } - - coder->reps[3] = coder->reps[2]; - coder->reps[2] = coder->reps[1]; - coder->reps[1] = coder->reps[0]; - coder->reps[0] = distance; - ++coder->match_price_count; -} - - -//////////////////// -// Repeated match // -//////////////////// - -static inline void -rep_match(lzma_coder *coder, const uint32_t pos_state, - const uint32_t rep, const uint32_t len) -{ - if (rep == 0) { - rc_bit(&coder->rc, &coder->is_rep0[coder->state], 0); - rc_bit(&coder->rc, - &coder->is_rep0_long[coder->state][pos_state], - len != 1); - } else { - const uint32_t distance = coder->reps[rep]; - rc_bit(&coder->rc, &coder->is_rep0[coder->state], 1); - - if (rep == 1) { - rc_bit(&coder->rc, &coder->is_rep1[coder->state], 0); - } else { - rc_bit(&coder->rc, &coder->is_rep1[coder->state], 1); - rc_bit(&coder->rc, &coder->is_rep2[coder->state], - rep - 2); - - if (rep == 3) - coder->reps[3] = coder->reps[2]; - - coder->reps[2] = coder->reps[1]; - } - - coder->reps[1] = coder->reps[0]; - coder->reps[0] = distance; - } - - if (len == 1) { - update_short_rep(coder->state); - } else { - length(&coder->rc, &coder->rep_len_encoder, pos_state, len, - coder->fast_mode); - update_long_rep(coder->state); - } -} - - -////////// -// Main // -////////// - -static void -encode_symbol(lzma_coder *coder, lzma_mf *mf, - uint32_t back, uint32_t len, uint32_t position) -{ - const uint32_t pos_state = position & coder->pos_mask; - - if (back == UINT32_MAX) { - // Literal i.e. eight-bit byte - assert(len == 1); - rc_bit(&coder->rc, - &coder->is_match[coder->state][pos_state], 0); - literal(coder, mf, position); - } else { - // Some type of match - rc_bit(&coder->rc, - &coder->is_match[coder->state][pos_state], 1); - - if (back < REP_DISTANCES) { - // It's a repeated match i.e. the same distance - // has been used earlier. - rc_bit(&coder->rc, &coder->is_rep[coder->state], 1); - rep_match(coder, pos_state, back, len); - } else { - // Normal match - rc_bit(&coder->rc, &coder->is_rep[coder->state], 0); - match(coder, pos_state, back - REP_DISTANCES, len); - } - } - - assert(mf->read_ahead >= len); - mf->read_ahead -= len; -} - - -static bool -encode_init(lzma_coder *coder, lzma_mf *mf) -{ - assert(mf_position(mf) == 0); - - if (mf->read_pos == mf->read_limit) { - if (mf->action == LZMA_RUN) - return false; // We cannot do anything. - - // We are finishing (we cannot get here when flushing). - assert(mf->write_pos == mf->read_pos); - assert(mf->action == LZMA_FINISH); - } else { - // Do the actual initialization. The first LZMA symbol must - // always be a literal. - mf_skip(mf, 1); - mf->read_ahead = 0; - rc_bit(&coder->rc, &coder->is_match[0][0], 0); - rc_bittree(&coder->rc, coder->literal[0], 8, mf->buffer[0]); - } - - // Initialization is done (except if empty file). - coder->is_initialized = true; - - return true; -} - - -static void -encode_eopm(lzma_coder *coder, uint32_t position) -{ - const uint32_t pos_state = position & coder->pos_mask; - rc_bit(&coder->rc, &coder->is_match[coder->state][pos_state], 1); - rc_bit(&coder->rc, &coder->is_rep[coder->state], 0); - match(coder, pos_state, UINT32_MAX, MATCH_LEN_MIN); -} - - -/// Number of bytes that a single encoding loop in lzma_lzma_encode() can -/// consume from the dictionary. This limit comes from lzma_lzma_optimum() -/// and may need to be updated if that function is significantly modified. -#define LOOP_INPUT_MAX (OPTS + 1) - - -extern lzma_ret -lzma_lzma_encode(lzma_coder *restrict coder, lzma_mf *restrict mf, - uint8_t *restrict out, size_t *restrict out_pos, - size_t out_size, uint32_t limit) -{ - // Initialize the stream if no data has been encoded yet. - if (!coder->is_initialized && !encode_init(coder, mf)) - return LZMA_OK; - - // Get the lowest bits of the uncompressed offset from the LZ layer. - uint32_t position = mf_position(mf); - - while (true) { - // Encode pending bits, if any. Calling this before encoding - // the next symbol is needed only with plain LZMA, since - // LZMA2 always provides big enough buffer to flush - // everything out from the range encoder. For the same reason, - // rc_encode() never returns true when this function is used - // as part of LZMA2 encoder. - if (rc_encode(&coder->rc, out, out_pos, out_size)) { - assert(limit == UINT32_MAX); - return LZMA_OK; - } - - // With LZMA2 we need to take care that compressed size of - // a chunk doesn't get too big. - // TODO - if (limit != UINT32_MAX - && (mf->read_pos - mf->read_ahead >= limit - || *out_pos + rc_pending(&coder->rc) - >= LZMA2_CHUNK_MAX - - LOOP_INPUT_MAX)) - break; - - // Check that there is some input to process. - if (mf->read_pos >= mf->read_limit) { - if (mf->action == LZMA_RUN) - return LZMA_OK; - - if (mf->read_ahead == 0) - break; - } - - // Get optimal match (repeat position and length). - // Value ranges for pos: - // - [0, REP_DISTANCES): repeated match - // - [REP_DISTANCES, UINT32_MAX): - // match at (pos - REP_DISTANCES) - // - UINT32_MAX: not a match but a literal - // Value ranges for len: - // - [MATCH_LEN_MIN, MATCH_LEN_MAX] - uint32_t len; - uint32_t back; - - if (coder->fast_mode) - lzma_lzma_optimum_fast(coder, mf, &back, &len); - else - lzma_lzma_optimum_normal( - coder, mf, &back, &len, position); - - encode_symbol(coder, mf, back, len, position); - - position += len; - } - - if (!coder->is_flushed) { - coder->is_flushed = true; - - // We don't support encoding plain LZMA streams without EOPM, - // and LZMA2 doesn't use EOPM at LZMA level. - if (limit == UINT32_MAX) - encode_eopm(coder, position); - - // Flush the remaining bytes from the range encoder. - rc_flush(&coder->rc); - - // Copy the remaining bytes to the output buffer. If there - // isn't enough output space, we will copy out the remaining - // bytes on the next call to this function by using - // the rc_encode() call in the encoding loop above. - if (rc_encode(&coder->rc, out, out_pos, out_size)) { - assert(limit == UINT32_MAX); - return LZMA_OK; - } - } - - // Make it ready for the next LZMA2 chunk. - coder->is_flushed = false; - - return LZMA_STREAM_END; -} - - -static lzma_ret -lzma_encode(lzma_coder *restrict coder, lzma_mf *restrict mf, - uint8_t *restrict out, size_t *restrict out_pos, - size_t out_size) -{ - // Plain LZMA has no support for sync-flushing. - if (unlikely(mf->action == LZMA_SYNC_FLUSH)) - return LZMA_OPTIONS_ERROR; - - return lzma_lzma_encode(coder, mf, out, out_pos, out_size, UINT32_MAX); -} - - -//////////////////// -// Initialization // -//////////////////// - -static bool -is_options_valid(const lzma_options_lzma *options) -{ - // Validate some of the options. LZ encoder validates nice_len too - // but we need a valid value here earlier. - return is_lclppb_valid(options) - && options->nice_len >= MATCH_LEN_MIN - && options->nice_len <= MATCH_LEN_MAX - && (options->mode == LZMA_MODE_FAST - || options->mode == LZMA_MODE_NORMAL); -} - - -static void -set_lz_options(lzma_lz_options *lz_options, const lzma_options_lzma *options) -{ - // LZ encoder initialization does the validation for these so we - // don't need to validate here. - lz_options->before_size = OPTS; - lz_options->dict_size = options->dict_size; - lz_options->after_size = LOOP_INPUT_MAX; - lz_options->match_len_max = MATCH_LEN_MAX; - lz_options->nice_len = options->nice_len; - lz_options->match_finder = options->mf; - lz_options->depth = options->depth; - lz_options->preset_dict = options->preset_dict; - lz_options->preset_dict_size = options->preset_dict_size; - return; -} - - -static void -length_encoder_reset(lzma_length_encoder *lencoder, - const uint32_t num_pos_states, const bool fast_mode) -{ - bit_reset(lencoder->choice); - bit_reset(lencoder->choice2); - - for (size_t pos_state = 0; pos_state < num_pos_states; ++pos_state) { - bittree_reset(lencoder->low[pos_state], LEN_LOW_BITS); - bittree_reset(lencoder->mid[pos_state], LEN_MID_BITS); - } - - bittree_reset(lencoder->high, LEN_HIGH_BITS); - - if (!fast_mode) - for (size_t pos_state = 0; pos_state < num_pos_states; - ++pos_state) - length_update_prices(lencoder, pos_state); - - return; -} - - -extern lzma_ret -lzma_lzma_encoder_reset(lzma_coder *coder, const lzma_options_lzma *options) -{ - if (!is_options_valid(options)) - return LZMA_OPTIONS_ERROR; - - coder->pos_mask = (1U << options->pb) - 1; - coder->literal_context_bits = options->lc; - coder->literal_pos_mask = (1U << options->lp) - 1; - - // Range coder - rc_reset(&coder->rc); - - // State - coder->state = 0; - for (size_t i = 0; i < REP_DISTANCES; ++i) - coder->reps[i] = 0; - - literal_init(coder->literal, options->lc, options->lp); - - // Bit encoders - for (size_t i = 0; i < STATES; ++i) { - for (size_t j = 0; j <= coder->pos_mask; ++j) { - bit_reset(coder->is_match[i][j]); - bit_reset(coder->is_rep0_long[i][j]); - } - - bit_reset(coder->is_rep[i]); - bit_reset(coder->is_rep0[i]); - bit_reset(coder->is_rep1[i]); - bit_reset(coder->is_rep2[i]); - } - - for (size_t i = 0; i < FULL_DISTANCES - END_POS_MODEL_INDEX; ++i) - bit_reset(coder->pos_special[i]); - - // Bit tree encoders - for (size_t i = 0; i < LEN_TO_POS_STATES; ++i) - bittree_reset(coder->pos_slot[i], POS_SLOT_BITS); - - bittree_reset(coder->pos_align, ALIGN_BITS); - - // Length encoders - length_encoder_reset(&coder->match_len_encoder, - 1U << options->pb, coder->fast_mode); - - length_encoder_reset(&coder->rep_len_encoder, - 1U << options->pb, coder->fast_mode); - - // Price counts are incremented every time appropriate probabilities - // are changed. price counts are set to zero when the price tables - // are updated, which is done when the appropriate price counts have - // big enough value, and lzma_mf.read_ahead == 0 which happens at - // least every OPTS (a few thousand) possible price count increments. - // - // By resetting price counts to UINT32_MAX / 2, we make sure that the - // price tables will be initialized before they will be used (since - // the value is definitely big enough), and that it is OK to increment - // price counts without risk of integer overflow (since UINT32_MAX / 2 - // is small enough). The current code doesn't increment price counts - // before initializing price tables, but it maybe done in future if - // we add support for saving the state between LZMA2 chunks. - coder->match_price_count = UINT32_MAX / 2; - coder->align_price_count = UINT32_MAX / 2; - - coder->opts_end_index = 0; - coder->opts_current_index = 0; - - return LZMA_OK; -} - - -extern lzma_ret -lzma_lzma_encoder_create(lzma_coder **coder_ptr, lzma_allocator *allocator, - const lzma_options_lzma *options, lzma_lz_options *lz_options) -{ - // Allocate lzma_coder if it wasn't already allocated. - if (*coder_ptr == NULL) { - *coder_ptr = lzma_alloc(sizeof(lzma_coder), allocator); - if (*coder_ptr == NULL) - return LZMA_MEM_ERROR; - } - - lzma_coder *coder = *coder_ptr; - - // Set compression mode. We haven't validates the options yet, - // but it's OK here, since nothing bad happens with invalid - // options in the code below, and they will get rejected by - // lzma_lzma_encoder_reset() call at the end of this function. - switch (options->mode) { - case LZMA_MODE_FAST: - coder->fast_mode = true; - break; - - case LZMA_MODE_NORMAL: { - coder->fast_mode = false; - - // Set dist_table_size. - // Round the dictionary size up to next 2^n. - uint32_t log_size = 0; - while ((UINT32_C(1) << log_size) < options->dict_size) - ++log_size; - - coder->dist_table_size = log_size * 2; - - // Length encoders' price table size - coder->match_len_encoder.table_size - = options->nice_len + 1 - MATCH_LEN_MIN; - coder->rep_len_encoder.table_size - = options->nice_len + 1 - MATCH_LEN_MIN; - break; - } - - default: - return LZMA_OPTIONS_ERROR; - } - - // We don't need to write the first byte as literal if there is - // a non-empty preset dictionary. encode_init() wouldn't even work - // if there is a non-empty preset dictionary, because encode_init() - // assumes that position is zero and previous byte is also zero. - coder->is_initialized = options->preset_dict != NULL - && options->preset_dict_size > 0; - coder->is_flushed = false; - - set_lz_options(lz_options, options); - - return lzma_lzma_encoder_reset(coder, options); -} - - -static lzma_ret -lzma_encoder_init(lzma_lz_encoder *lz, lzma_allocator *allocator, - const void *options, lzma_lz_options *lz_options) -{ - lz->code = &lzma_encode; - return lzma_lzma_encoder_create( - &lz->coder, allocator, options, lz_options); -} - - -extern lzma_ret -lzma_lzma_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - return lzma_lz_encoder_init( - next, allocator, filters, &lzma_encoder_init); -} - - -extern uint64_t -lzma_lzma_encoder_memusage(const void *options) -{ - if (!is_options_valid(options)) - return UINT64_MAX; - - lzma_lz_options lz_options; - set_lz_options(&lz_options, options); - - const uint64_t lz_memusage = lzma_lz_encoder_memusage(&lz_options); - if (lz_memusage == UINT64_MAX) - return UINT64_MAX; - - return (uint64_t)(sizeof(lzma_coder)) + lz_memusage; -} - - -extern bool -lzma_lzma_lclppb_encode(const lzma_options_lzma *options, uint8_t *byte) -{ - if (!is_lclppb_valid(options)) - return true; - - *byte = (options->pb * 5 + options->lp) * 9 + options->lc; - assert(*byte <= (4 * 5 + 4) * 9 + 8); - - return false; -} - - -#ifdef HAVE_ENCODER_LZMA1 -extern lzma_ret -lzma_lzma_props_encode(const void *options, uint8_t *out) -{ - const lzma_options_lzma *const opt = options; - - if (lzma_lzma_lclppb_encode(opt, out)) - return LZMA_PROG_ERROR; - - integer_write_32(out + 1, opt->dict_size); - - return LZMA_OK; -} -#endif - - -extern LZMA_API(lzma_bool) -lzma_mode_is_supported(lzma_mode mode) -{ - return mode == LZMA_MODE_FAST || mode == LZMA_MODE_NORMAL; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.h deleted file mode 100644 index 835e1f58330..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder.h +++ /dev/null @@ -1,54 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_encoder.h -/// \brief LZMA encoder API -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZMA_ENCODER_H -#define LZMA_LZMA_ENCODER_H - -#include "common.h" - - -extern lzma_ret lzma_lzma_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - - -extern uint64_t lzma_lzma_encoder_memusage(const void *options); - -extern lzma_ret lzma_lzma_props_encode(const void *options, uint8_t *out); - - -/// Encodes lc/lp/pb into one byte. Returns false on success and true on error. -extern bool lzma_lzma_lclppb_encode( - const lzma_options_lzma *options, uint8_t *byte); - - -#ifdef LZMA_LZ_ENCODER_H - -/// Initializes raw LZMA encoder; this is used by LZMA2. -extern lzma_ret lzma_lzma_encoder_create( - lzma_coder **coder_ptr, lzma_allocator *allocator, - const lzma_options_lzma *options, lzma_lz_options *lz_options); - - -/// Resets an already initialized LZMA encoder; this is used by LZMA2. -extern lzma_ret lzma_lzma_encoder_reset( - lzma_coder *coder, const lzma_options_lzma *options); - - -extern lzma_ret lzma_lzma_encode(lzma_coder *restrict coder, - lzma_mf *restrict mf, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, - uint32_t read_limit); - -#endif - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_fast.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_fast.c deleted file mode 100644 index 61aaf3b9b8d..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_fast.c +++ /dev/null @@ -1,179 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_encoder_optimum_fast.c -// -// Author: Igor Pavlov -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lzma_encoder_private.h" - - -#define change_pair(small_dist, big_dist) \ - (((big_dist) >> 7) > (small_dist)) - - -extern void -lzma_lzma_optimum_fast(lzma_coder *restrict coder, lzma_mf *restrict mf, - uint32_t *restrict back_res, uint32_t *restrict len_res) -{ - const uint32_t nice_len = mf->nice_len; - - uint32_t len_main; - uint32_t matches_count; - if (mf->read_ahead == 0) { - len_main = mf_find(mf, &matches_count, coder->matches); - } else { - assert(mf->read_ahead == 1); - len_main = coder->longest_match_length; - matches_count = coder->matches_count; - } - - const uint8_t *buf = mf_ptr(mf) - 1; - const uint32_t buf_avail = MIN(mf_avail(mf) + 1, MATCH_LEN_MAX); - - if (buf_avail < 2) { - // There's not enough input left to encode a match. - *back_res = UINT32_MAX; - *len_res = 1; - return; - } - - // Look for repeated matches; scan the previous four match distances - uint32_t rep_len = 0; - uint32_t rep_index = 0; - - for (uint32_t i = 0; i < REP_DISTANCES; ++i) { - // Pointer to the beginning of the match candidate - const uint8_t *const buf_back = buf - coder->reps[i] - 1; - - // If the first two bytes (2 == MATCH_LEN_MIN) do not match, - // this rep is not useful. - if (not_equal_16(buf, buf_back)) - continue; - - // The first two bytes matched. - // Calculate the length of the match. - uint32_t len; - for (len = 2; len < buf_avail - && buf[len] == buf_back[len]; ++len) ; - - // If we have found a repeated match that is at least - // nice_len long, return it immediatelly. - if (len >= nice_len) { - *back_res = i; - *len_res = len; - mf_skip(mf, len - 1); - return; - } - - if (len > rep_len) { - rep_index = i; - rep_len = len; - } - } - - // We didn't find a long enough repeated match. Encode it as a normal - // match if the match length is at least nice_len. - if (len_main >= nice_len) { - *back_res = coder->matches[matches_count - 1].dist - + REP_DISTANCES; - *len_res = len_main; - mf_skip(mf, len_main - 1); - return; - } - - uint32_t back_main = 0; - if (len_main >= 2) { - back_main = coder->matches[matches_count - 1].dist; - - while (matches_count > 1 && len_main == - coder->matches[matches_count - 2].len + 1) { - if (!change_pair(coder->matches[ - matches_count - 2].dist, - back_main)) - break; - - --matches_count; - len_main = coder->matches[matches_count - 1].len; - back_main = coder->matches[matches_count - 1].dist; - } - - if (len_main == 2 && back_main >= 0x80) - len_main = 1; - } - - if (rep_len >= 2) { - if (rep_len + 1 >= len_main - || (rep_len + 2 >= len_main - && back_main > (UINT32_C(1) << 9)) - || (rep_len + 3 >= len_main - && back_main > (UINT32_C(1) << 15))) { - *back_res = rep_index; - *len_res = rep_len; - mf_skip(mf, rep_len - 1); - return; - } - } - - if (len_main < 2 || buf_avail <= 2) { - *back_res = UINT32_MAX; - *len_res = 1; - return; - } - - // Get the matches for the next byte. If we find a better match, - // the current byte is encoded as a literal. - coder->longest_match_length = mf_find(mf, - &coder->matches_count, coder->matches); - - if (coder->longest_match_length >= 2) { - const uint32_t new_dist = coder->matches[ - coder->matches_count - 1].dist; - - if ((coder->longest_match_length >= len_main - && new_dist < back_main) - || (coder->longest_match_length == len_main + 1 - && !change_pair(back_main, new_dist)) - || (coder->longest_match_length > len_main + 1) - || (coder->longest_match_length + 1 >= len_main - && len_main >= 3 - && change_pair(new_dist, back_main))) { - *back_res = UINT32_MAX; - *len_res = 1; - return; - } - } - - // In contrast to LZMA SDK, dictionary could not have been moved - // between mf_find() calls, thus it is safe to just increment - // the old buf pointer instead of recalculating it with mf_ptr(). - ++buf; - - const uint32_t limit = len_main - 1; - - for (uint32_t i = 0; i < REP_DISTANCES; ++i) { - const uint8_t *const buf_back = buf - coder->reps[i] - 1; - - if (not_equal_16(buf, buf_back)) - continue; - - uint32_t len; - for (len = 2; len < limit - && buf[len] == buf_back[len]; ++len) ; - - if (len >= limit) { - *back_res = UINT32_MAX; - *len_res = 1; - return; - } - } - - *back_res = back_main + REP_DISTANCES; - *len_res = len_main; - mf_skip(mf, len_main - 2); - return; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_normal.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_normal.c deleted file mode 100644 index cb9a1b9dbc4..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_optimum_normal.c +++ /dev/null @@ -1,868 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_encoder_optimum_normal.c -// -// Author: Igor Pavlov -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lzma_encoder_private.h" -#include "fastpos.h" - - -//////////// -// Prices // -//////////// - -static uint32_t -get_literal_price(const lzma_coder *const coder, const uint32_t pos, - const uint32_t prev_byte, const bool match_mode, - uint32_t match_byte, uint32_t symbol) -{ - const probability *const subcoder = literal_subcoder(coder->literal, - coder->literal_context_bits, coder->literal_pos_mask, - pos, prev_byte); - - uint32_t price = 0; - - if (!match_mode) { - price = rc_bittree_price(subcoder, 8, symbol); - } else { - uint32_t offset = 0x100; - symbol += UINT32_C(1) << 8; - - do { - match_byte <<= 1; - - const uint32_t match_bit = match_byte & offset; - const uint32_t subcoder_index - = offset + match_bit + (symbol >> 8); - const uint32_t bit = (symbol >> 7) & 1; - price += rc_bit_price(subcoder[subcoder_index], bit); - - symbol <<= 1; - offset &= ~(match_byte ^ symbol); - - } while (symbol < (UINT32_C(1) << 16)); - } - - return price; -} - - -static inline uint32_t -get_len_price(const lzma_length_encoder *const lencoder, - const uint32_t len, const uint32_t pos_state) -{ - // NOTE: Unlike the other price tables, length prices are updated - // in lzma_encoder.c - return lencoder->prices[pos_state][len - MATCH_LEN_MIN]; -} - - -static inline uint32_t -get_short_rep_price(const lzma_coder *const coder, - const lzma_lzma_state state, const uint32_t pos_state) -{ - return rc_bit_0_price(coder->is_rep0[state]) - + rc_bit_0_price(coder->is_rep0_long[state][pos_state]); -} - - -static inline uint32_t -get_pure_rep_price(const lzma_coder *const coder, const uint32_t rep_index, - const lzma_lzma_state state, uint32_t pos_state) -{ - uint32_t price; - - if (rep_index == 0) { - price = rc_bit_0_price(coder->is_rep0[state]); - price += rc_bit_1_price(coder->is_rep0_long[state][pos_state]); - } else { - price = rc_bit_1_price(coder->is_rep0[state]); - - if (rep_index == 1) { - price += rc_bit_0_price(coder->is_rep1[state]); - } else { - price += rc_bit_1_price(coder->is_rep1[state]); - price += rc_bit_price(coder->is_rep2[state], - rep_index - 2); - } - } - - return price; -} - - -static inline uint32_t -get_rep_price(const lzma_coder *const coder, const uint32_t rep_index, - const uint32_t len, const lzma_lzma_state state, - const uint32_t pos_state) -{ - return get_len_price(&coder->rep_len_encoder, len, pos_state) - + get_pure_rep_price(coder, rep_index, state, pos_state); -} - - -static inline uint32_t -get_pos_len_price(const lzma_coder *const coder, const uint32_t pos, - const uint32_t len, const uint32_t pos_state) -{ - const uint32_t len_to_pos_state = get_len_to_pos_state(len); - uint32_t price; - - if (pos < FULL_DISTANCES) { - price = coder->distances_prices[len_to_pos_state][pos]; - } else { - const uint32_t pos_slot = get_pos_slot_2(pos); - price = coder->pos_slot_prices[len_to_pos_state][pos_slot] - + coder->align_prices[pos & ALIGN_MASK]; - } - - price += get_len_price(&coder->match_len_encoder, len, pos_state); - - return price; -} - - -static void -fill_distances_prices(lzma_coder *coder) -{ - for (uint32_t len_to_pos_state = 0; - len_to_pos_state < LEN_TO_POS_STATES; - ++len_to_pos_state) { - - uint32_t *const pos_slot_prices - = coder->pos_slot_prices[len_to_pos_state]; - - // Price to encode the pos_slot. - for (uint32_t pos_slot = 0; - pos_slot < coder->dist_table_size; ++pos_slot) - pos_slot_prices[pos_slot] = rc_bittree_price( - coder->pos_slot[len_to_pos_state], - POS_SLOT_BITS, pos_slot); - - // For matches with distance >= FULL_DISTANCES, add the price - // of the direct bits part of the match distance. (Align bits - // are handled by fill_align_prices()). - for (uint32_t pos_slot = END_POS_MODEL_INDEX; - pos_slot < coder->dist_table_size; ++pos_slot) - pos_slot_prices[pos_slot] += rc_direct_price( - ((pos_slot >> 1) - 1) - ALIGN_BITS); - - // Distances in the range [0, 3] are fully encoded with - // pos_slot, so they are used for coder->distances_prices - // as is. - for (uint32_t i = 0; i < START_POS_MODEL_INDEX; ++i) - coder->distances_prices[len_to_pos_state][i] - = pos_slot_prices[i]; - } - - // Distances in the range [4, 127] depend on pos_slot and pos_special. - // We do this in a loop separate from the above loop to avoid - // redundant calls to get_pos_slot(). - for (uint32_t i = START_POS_MODEL_INDEX; i < FULL_DISTANCES; ++i) { - const uint32_t pos_slot = get_pos_slot(i); - const uint32_t footer_bits = ((pos_slot >> 1) - 1); - const uint32_t base = (2 | (pos_slot & 1)) << footer_bits; - const uint32_t price = rc_bittree_reverse_price( - coder->pos_special + base - pos_slot - 1, - footer_bits, i - base); - - for (uint32_t len_to_pos_state = 0; - len_to_pos_state < LEN_TO_POS_STATES; - ++len_to_pos_state) - coder->distances_prices[len_to_pos_state][i] - = price + coder->pos_slot_prices[ - len_to_pos_state][pos_slot]; - } - - coder->match_price_count = 0; - return; -} - - -static void -fill_align_prices(lzma_coder *coder) -{ - for (uint32_t i = 0; i < ALIGN_TABLE_SIZE; ++i) - coder->align_prices[i] = rc_bittree_reverse_price( - coder->pos_align, ALIGN_BITS, i); - - coder->align_price_count = 0; - return; -} - - -///////////// -// Optimal // -///////////// - -static inline void -make_literal(lzma_optimal *optimal) -{ - optimal->back_prev = UINT32_MAX; - optimal->prev_1_is_literal = false; -} - - -static inline void -make_short_rep(lzma_optimal *optimal) -{ - optimal->back_prev = 0; - optimal->prev_1_is_literal = false; -} - - -#define is_short_rep(optimal) \ - ((optimal).back_prev == 0) - - -static void -backward(lzma_coder *restrict coder, uint32_t *restrict len_res, - uint32_t *restrict back_res, uint32_t cur) -{ - coder->opts_end_index = cur; - - uint32_t pos_mem = coder->opts[cur].pos_prev; - uint32_t back_mem = coder->opts[cur].back_prev; - - do { - if (coder->opts[cur].prev_1_is_literal) { - make_literal(&coder->opts[pos_mem]); - coder->opts[pos_mem].pos_prev = pos_mem - 1; - - if (coder->opts[cur].prev_2) { - coder->opts[pos_mem - 1].prev_1_is_literal - = false; - coder->opts[pos_mem - 1].pos_prev - = coder->opts[cur].pos_prev_2; - coder->opts[pos_mem - 1].back_prev - = coder->opts[cur].back_prev_2; - } - } - - const uint32_t pos_prev = pos_mem; - const uint32_t back_cur = back_mem; - - back_mem = coder->opts[pos_prev].back_prev; - pos_mem = coder->opts[pos_prev].pos_prev; - - coder->opts[pos_prev].back_prev = back_cur; - coder->opts[pos_prev].pos_prev = cur; - cur = pos_prev; - - } while (cur != 0); - - coder->opts_current_index = coder->opts[0].pos_prev; - *len_res = coder->opts[0].pos_prev; - *back_res = coder->opts[0].back_prev; - - return; -} - - -////////// -// Main // -////////// - -static inline uint32_t -helper1(lzma_coder *restrict coder, lzma_mf *restrict mf, - uint32_t *restrict back_res, uint32_t *restrict len_res, - uint32_t position) -{ - const uint32_t nice_len = mf->nice_len; - - uint32_t len_main; - uint32_t matches_count; - - if (mf->read_ahead == 0) { - len_main = mf_find(mf, &matches_count, coder->matches); - } else { - assert(mf->read_ahead == 1); - len_main = coder->longest_match_length; - matches_count = coder->matches_count; - } - - const uint32_t buf_avail = MIN(mf_avail(mf) + 1, MATCH_LEN_MAX); - if (buf_avail < 2) { - *back_res = UINT32_MAX; - *len_res = 1; - return UINT32_MAX; - } - - const uint8_t *const buf = mf_ptr(mf) - 1; - - uint32_t rep_lens[REP_DISTANCES]; - uint32_t rep_max_index = 0; - - for (uint32_t i = 0; i < REP_DISTANCES; ++i) { - const uint8_t *const buf_back = buf - coder->reps[i] - 1; - - if (not_equal_16(buf, buf_back)) { - rep_lens[i] = 0; - continue; - } - - uint32_t len_test; - for (len_test = 2; len_test < buf_avail - && buf[len_test] == buf_back[len_test]; - ++len_test) ; - - rep_lens[i] = len_test; - if (len_test > rep_lens[rep_max_index]) - rep_max_index = i; - } - - if (rep_lens[rep_max_index] >= nice_len) { - *back_res = rep_max_index; - *len_res = rep_lens[rep_max_index]; - mf_skip(mf, *len_res - 1); - return UINT32_MAX; - } - - - if (len_main >= nice_len) { - *back_res = coder->matches[matches_count - 1].dist - + REP_DISTANCES; - *len_res = len_main; - mf_skip(mf, len_main - 1); - return UINT32_MAX; - } - - const uint8_t current_byte = *buf; - const uint8_t match_byte = *(buf - coder->reps[0] - 1); - - if (len_main < 2 && current_byte != match_byte - && rep_lens[rep_max_index] < 2) { - *back_res = UINT32_MAX; - *len_res = 1; - return UINT32_MAX; - } - - coder->opts[0].state = coder->state; - - const uint32_t pos_state = position & coder->pos_mask; - - coder->opts[1].price = rc_bit_0_price( - coder->is_match[coder->state][pos_state]) - + get_literal_price(coder, position, buf[-1], - !is_literal_state(coder->state), - match_byte, current_byte); - - make_literal(&coder->opts[1]); - - const uint32_t match_price = rc_bit_1_price( - coder->is_match[coder->state][pos_state]); - const uint32_t rep_match_price = match_price - + rc_bit_1_price(coder->is_rep[coder->state]); - - if (match_byte == current_byte) { - const uint32_t short_rep_price = rep_match_price - + get_short_rep_price( - coder, coder->state, pos_state); - - if (short_rep_price < coder->opts[1].price) { - coder->opts[1].price = short_rep_price; - make_short_rep(&coder->opts[1]); - } - } - - const uint32_t len_end = MAX(len_main, rep_lens[rep_max_index]); - - if (len_end < 2) { - *back_res = coder->opts[1].back_prev; - *len_res = 1; - return UINT32_MAX; - } - - coder->opts[1].pos_prev = 0; - - for (uint32_t i = 0; i < REP_DISTANCES; ++i) - coder->opts[0].backs[i] = coder->reps[i]; - - uint32_t len = len_end; - do { - coder->opts[len].price = RC_INFINITY_PRICE; - } while (--len >= 2); - - - for (uint32_t i = 0; i < REP_DISTANCES; ++i) { - uint32_t rep_len = rep_lens[i]; - if (rep_len < 2) - continue; - - const uint32_t price = rep_match_price + get_pure_rep_price( - coder, i, coder->state, pos_state); - - do { - const uint32_t cur_and_len_price = price - + get_len_price( - &coder->rep_len_encoder, - rep_len, pos_state); - - if (cur_and_len_price < coder->opts[rep_len].price) { - coder->opts[rep_len].price = cur_and_len_price; - coder->opts[rep_len].pos_prev = 0; - coder->opts[rep_len].back_prev = i; - coder->opts[rep_len].prev_1_is_literal = false; - } - } while (--rep_len >= 2); - } - - - const uint32_t normal_match_price = match_price - + rc_bit_0_price(coder->is_rep[coder->state]); - - len = rep_lens[0] >= 2 ? rep_lens[0] + 1 : 2; - if (len <= len_main) { - uint32_t i = 0; - while (len > coder->matches[i].len) - ++i; - - for(; ; ++len) { - const uint32_t dist = coder->matches[i].dist; - const uint32_t cur_and_len_price = normal_match_price - + get_pos_len_price(coder, - dist, len, pos_state); - - if (cur_and_len_price < coder->opts[len].price) { - coder->opts[len].price = cur_and_len_price; - coder->opts[len].pos_prev = 0; - coder->opts[len].back_prev - = dist + REP_DISTANCES; - coder->opts[len].prev_1_is_literal = false; - } - - if (len == coder->matches[i].len) - if (++i == matches_count) - break; - } - } - - return len_end; -} - - -static inline uint32_t -helper2(lzma_coder *coder, uint32_t *reps, const uint8_t *buf, - uint32_t len_end, uint32_t position, const uint32_t cur, - const uint32_t nice_len, const uint32_t buf_avail_full) -{ - uint32_t matches_count = coder->matches_count; - uint32_t new_len = coder->longest_match_length; - uint32_t pos_prev = coder->opts[cur].pos_prev; - uint32_t state; - - if (coder->opts[cur].prev_1_is_literal) { - --pos_prev; - - if (coder->opts[cur].prev_2) { - state = coder->opts[coder->opts[cur].pos_prev_2].state; - - if (coder->opts[cur].back_prev_2 < REP_DISTANCES) - update_long_rep(state); - else - update_match(state); - - } else { - state = coder->opts[pos_prev].state; - } - - update_literal(state); - - } else { - state = coder->opts[pos_prev].state; - } - - if (pos_prev == cur - 1) { - if (is_short_rep(coder->opts[cur])) - update_short_rep(state); - else - update_literal(state); - } else { - uint32_t pos; - if (coder->opts[cur].prev_1_is_literal - && coder->opts[cur].prev_2) { - pos_prev = coder->opts[cur].pos_prev_2; - pos = coder->opts[cur].back_prev_2; - update_long_rep(state); - } else { - pos = coder->opts[cur].back_prev; - if (pos < REP_DISTANCES) - update_long_rep(state); - else - update_match(state); - } - - if (pos < REP_DISTANCES) { - reps[0] = coder->opts[pos_prev].backs[pos]; - - uint32_t i; - for (i = 1; i <= pos; ++i) - reps[i] = coder->opts[pos_prev].backs[i - 1]; - - for (; i < REP_DISTANCES; ++i) - reps[i] = coder->opts[pos_prev].backs[i]; - - } else { - reps[0] = pos - REP_DISTANCES; - - for (uint32_t i = 1; i < REP_DISTANCES; ++i) - reps[i] = coder->opts[pos_prev].backs[i - 1]; - } - } - - coder->opts[cur].state = state; - - for (uint32_t i = 0; i < REP_DISTANCES; ++i) - coder->opts[cur].backs[i] = reps[i]; - - const uint32_t cur_price = coder->opts[cur].price; - - const uint8_t current_byte = *buf; - const uint8_t match_byte = *(buf - reps[0] - 1); - - const uint32_t pos_state = position & coder->pos_mask; - - const uint32_t cur_and_1_price = cur_price - + rc_bit_0_price(coder->is_match[state][pos_state]) - + get_literal_price(coder, position, buf[-1], - !is_literal_state(state), match_byte, current_byte); - - bool next_is_literal = false; - - if (cur_and_1_price < coder->opts[cur + 1].price) { - coder->opts[cur + 1].price = cur_and_1_price; - coder->opts[cur + 1].pos_prev = cur; - make_literal(&coder->opts[cur + 1]); - next_is_literal = true; - } - - const uint32_t match_price = cur_price - + rc_bit_1_price(coder->is_match[state][pos_state]); - const uint32_t rep_match_price = match_price - + rc_bit_1_price(coder->is_rep[state]); - - if (match_byte == current_byte - && !(coder->opts[cur + 1].pos_prev < cur - && coder->opts[cur + 1].back_prev == 0)) { - - const uint32_t short_rep_price = rep_match_price - + get_short_rep_price(coder, state, pos_state); - - if (short_rep_price <= coder->opts[cur + 1].price) { - coder->opts[cur + 1].price = short_rep_price; - coder->opts[cur + 1].pos_prev = cur; - make_short_rep(&coder->opts[cur + 1]); - next_is_literal = true; - } - } - - if (buf_avail_full < 2) - return len_end; - - const uint32_t buf_avail = MIN(buf_avail_full, nice_len); - - if (!next_is_literal && match_byte != current_byte) { // speed optimization - // try literal + rep0 - const uint8_t *const buf_back = buf - reps[0] - 1; - const uint32_t limit = MIN(buf_avail_full, nice_len + 1); - - uint32_t len_test = 1; - while (len_test < limit && buf[len_test] == buf_back[len_test]) - ++len_test; - - --len_test; - - if (len_test >= 2) { - uint32_t state_2 = state; - update_literal(state_2); - - const uint32_t pos_state_next = (position + 1) & coder->pos_mask; - const uint32_t next_rep_match_price = cur_and_1_price - + rc_bit_1_price(coder->is_match[state_2][pos_state_next]) - + rc_bit_1_price(coder->is_rep[state_2]); - - //for (; len_test >= 2; --len_test) { - const uint32_t offset = cur + 1 + len_test; - - while (len_end < offset) - coder->opts[++len_end].price = RC_INFINITY_PRICE; - - const uint32_t cur_and_len_price = next_rep_match_price - + get_rep_price(coder, 0, len_test, - state_2, pos_state_next); - - if (cur_and_len_price < coder->opts[offset].price) { - coder->opts[offset].price = cur_and_len_price; - coder->opts[offset].pos_prev = cur + 1; - coder->opts[offset].back_prev = 0; - coder->opts[offset].prev_1_is_literal = true; - coder->opts[offset].prev_2 = false; - } - //} - } - } - - - uint32_t start_len = 2; // speed optimization - - for (uint32_t rep_index = 0; rep_index < REP_DISTANCES; ++rep_index) { - const uint8_t *const buf_back = buf - reps[rep_index] - 1; - if (not_equal_16(buf, buf_back)) - continue; - - uint32_t len_test; - for (len_test = 2; len_test < buf_avail - && buf[len_test] == buf_back[len_test]; - ++len_test) ; - - while (len_end < cur + len_test) - coder->opts[++len_end].price = RC_INFINITY_PRICE; - - const uint32_t len_test_temp = len_test; - const uint32_t price = rep_match_price + get_pure_rep_price( - coder, rep_index, state, pos_state); - - do { - const uint32_t cur_and_len_price = price - + get_len_price(&coder->rep_len_encoder, - len_test, pos_state); - - if (cur_and_len_price < coder->opts[cur + len_test].price) { - coder->opts[cur + len_test].price = cur_and_len_price; - coder->opts[cur + len_test].pos_prev = cur; - coder->opts[cur + len_test].back_prev = rep_index; - coder->opts[cur + len_test].prev_1_is_literal = false; - } - } while (--len_test >= 2); - - len_test = len_test_temp; - - if (rep_index == 0) - start_len = len_test + 1; - - - uint32_t len_test_2 = len_test + 1; - const uint32_t limit = MIN(buf_avail_full, - len_test_2 + nice_len); - for (; len_test_2 < limit - && buf[len_test_2] == buf_back[len_test_2]; - ++len_test_2) ; - - len_test_2 -= len_test + 1; - - if (len_test_2 >= 2) { - uint32_t state_2 = state; - update_long_rep(state_2); - - uint32_t pos_state_next = (position + len_test) & coder->pos_mask; - - const uint32_t cur_and_len_literal_price = price - + get_len_price(&coder->rep_len_encoder, - len_test, pos_state) - + rc_bit_0_price(coder->is_match[state_2][pos_state_next]) - + get_literal_price(coder, position + len_test, - buf[len_test - 1], true, - buf_back[len_test], buf[len_test]); - - update_literal(state_2); - - pos_state_next = (position + len_test + 1) & coder->pos_mask; - - const uint32_t next_rep_match_price = cur_and_len_literal_price - + rc_bit_1_price(coder->is_match[state_2][pos_state_next]) - + rc_bit_1_price(coder->is_rep[state_2]); - - //for(; len_test_2 >= 2; len_test_2--) { - const uint32_t offset = cur + len_test + 1 + len_test_2; - - while (len_end < offset) - coder->opts[++len_end].price = RC_INFINITY_PRICE; - - const uint32_t cur_and_len_price = next_rep_match_price - + get_rep_price(coder, 0, len_test_2, - state_2, pos_state_next); - - if (cur_and_len_price < coder->opts[offset].price) { - coder->opts[offset].price = cur_and_len_price; - coder->opts[offset].pos_prev = cur + len_test + 1; - coder->opts[offset].back_prev = 0; - coder->opts[offset].prev_1_is_literal = true; - coder->opts[offset].prev_2 = true; - coder->opts[offset].pos_prev_2 = cur; - coder->opts[offset].back_prev_2 = rep_index; - } - //} - } - } - - - //for (uint32_t len_test = 2; len_test <= new_len; ++len_test) - if (new_len > buf_avail) { - new_len = buf_avail; - - matches_count = 0; - while (new_len > coder->matches[matches_count].len) - ++matches_count; - - coder->matches[matches_count++].len = new_len; - } - - - if (new_len >= start_len) { - const uint32_t normal_match_price = match_price - + rc_bit_0_price(coder->is_rep[state]); - - while (len_end < cur + new_len) - coder->opts[++len_end].price = RC_INFINITY_PRICE; - - uint32_t i = 0; - while (start_len > coder->matches[i].len) - ++i; - - for (uint32_t len_test = start_len; ; ++len_test) { - const uint32_t cur_back = coder->matches[i].dist; - uint32_t cur_and_len_price = normal_match_price - + get_pos_len_price(coder, - cur_back, len_test, pos_state); - - if (cur_and_len_price < coder->opts[cur + len_test].price) { - coder->opts[cur + len_test].price = cur_and_len_price; - coder->opts[cur + len_test].pos_prev = cur; - coder->opts[cur + len_test].back_prev - = cur_back + REP_DISTANCES; - coder->opts[cur + len_test].prev_1_is_literal = false; - } - - if (len_test == coder->matches[i].len) { - // Try Match + Literal + Rep0 - const uint8_t *const buf_back = buf - cur_back - 1; - uint32_t len_test_2 = len_test + 1; - const uint32_t limit = MIN(buf_avail_full, - len_test_2 + nice_len); - - for (; len_test_2 < limit && - buf[len_test_2] == buf_back[len_test_2]; - ++len_test_2) ; - - len_test_2 -= len_test + 1; - - if (len_test_2 >= 2) { - uint32_t state_2 = state; - update_match(state_2); - uint32_t pos_state_next - = (position + len_test) & coder->pos_mask; - - const uint32_t cur_and_len_literal_price = cur_and_len_price - + rc_bit_0_price( - coder->is_match[state_2][pos_state_next]) - + get_literal_price(coder, - position + len_test, - buf[len_test - 1], - true, - buf_back[len_test], - buf[len_test]); - - update_literal(state_2); - pos_state_next = (pos_state_next + 1) & coder->pos_mask; - - const uint32_t next_rep_match_price - = cur_and_len_literal_price - + rc_bit_1_price( - coder->is_match[state_2][pos_state_next]) - + rc_bit_1_price(coder->is_rep[state_2]); - - // for(; len_test_2 >= 2; --len_test_2) { - const uint32_t offset = cur + len_test + 1 + len_test_2; - - while (len_end < offset) - coder->opts[++len_end].price = RC_INFINITY_PRICE; - - cur_and_len_price = next_rep_match_price - + get_rep_price(coder, 0, len_test_2, - state_2, pos_state_next); - - if (cur_and_len_price < coder->opts[offset].price) { - coder->opts[offset].price = cur_and_len_price; - coder->opts[offset].pos_prev = cur + len_test + 1; - coder->opts[offset].back_prev = 0; - coder->opts[offset].prev_1_is_literal = true; - coder->opts[offset].prev_2 = true; - coder->opts[offset].pos_prev_2 = cur; - coder->opts[offset].back_prev_2 - = cur_back + REP_DISTANCES; - } - //} - } - - if (++i == matches_count) - break; - } - } - } - - return len_end; -} - - -extern void -lzma_lzma_optimum_normal(lzma_coder *restrict coder, lzma_mf *restrict mf, - uint32_t *restrict back_res, uint32_t *restrict len_res, - uint32_t position) -{ - // If we have symbols pending, return the next pending symbol. - if (coder->opts_end_index != coder->opts_current_index) { - assert(mf->read_ahead > 0); - *len_res = coder->opts[coder->opts_current_index].pos_prev - - coder->opts_current_index; - *back_res = coder->opts[coder->opts_current_index].back_prev; - coder->opts_current_index = coder->opts[ - coder->opts_current_index].pos_prev; - return; - } - - // Update the price tables. In LZMA SDK <= 4.60 (and possibly later) - // this was done in both initialization function and in the main loop. - // In liblzma they were moved into this single place. - if (mf->read_ahead == 0) { - if (coder->match_price_count >= (1 << 7)) - fill_distances_prices(coder); - - if (coder->align_price_count >= ALIGN_TABLE_SIZE) - fill_align_prices(coder); - } - - // TODO: This needs quite a bit of cleaning still. But splitting - // the oroginal function to two pieces makes it at least a little - // more readable, since those two parts don't share many variables. - - uint32_t len_end = helper1(coder, mf, back_res, len_res, position); - if (len_end == UINT32_MAX) - return; - - uint32_t reps[REP_DISTANCES]; - memcpy(reps, coder->reps, sizeof(reps)); - - uint32_t cur; - for (cur = 1; cur < len_end; ++cur) { - assert(cur < OPTS); - - coder->longest_match_length = mf_find( - mf, &coder->matches_count, coder->matches); - - if (coder->longest_match_length >= mf->nice_len) - break; - - len_end = helper2(coder, reps, mf_ptr(mf) - 1, len_end, - position + cur, cur, mf->nice_len, - MIN(mf_avail(mf) + 1, OPTS - 1 - cur)); - } - - backward(coder, len_res, back_res, cur); - return; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_presets.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_presets.c deleted file mode 100644 index 68900a9bed4..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_presets.c +++ /dev/null @@ -1,53 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_encoder_presets.c -/// \brief Encoder presets -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - - -extern LZMA_API(lzma_bool) -lzma_lzma_preset(lzma_options_lzma *options, uint32_t preset) -{ - const uint32_t level = preset & LZMA_PRESET_LEVEL_MASK; - const uint32_t flags = preset & ~LZMA_PRESET_LEVEL_MASK; - const uint32_t supported_flags = LZMA_PRESET_EXTREME; - - if (level > 9 || (flags & ~supported_flags)) - return true; - - const uint32_t dict_shift = level <= 1 ? 16 : level + 17; - options->dict_size = UINT32_C(1) << dict_shift; - - options->preset_dict = NULL; - options->preset_dict_size = 0; - - options->lc = LZMA_LC_DEFAULT; - options->lp = LZMA_LP_DEFAULT; - options->pb = LZMA_PB_DEFAULT; - - options->persistent = false; - options->mode = level <= 2 ? LZMA_MODE_FAST : LZMA_MODE_NORMAL; - - options->nice_len = level == 0 ? 8 : level <= 5 ? 32 : 64; - options->mf = level <= 1 ? LZMA_MF_HC3 : level <= 2 ? LZMA_MF_HC4 - : LZMA_MF_BT4; - options->depth = 0; - - if (flags & LZMA_PRESET_EXTREME) { - options->lc = 4; // FIXME? - options->mode = LZMA_MODE_NORMAL; - options->mf = LZMA_MF_BT4; - options->nice_len = 273; - options->depth = 512; - } - - return false; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_private.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_private.h deleted file mode 100644 index 017f58bd984..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/lzma/lzma_encoder_private.h +++ /dev/null @@ -1,148 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_encoder_private.h -/// \brief Private definitions for LZMA encoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZMA_ENCODER_PRIVATE_H -#define LZMA_LZMA_ENCODER_PRIVATE_H - -#include "lz_encoder.h" -#include "range_encoder.h" -#include "lzma_common.h" -#include "lzma_encoder.h" - - -// Macro to compare if the first two bytes in two buffers differ. This is -// needed in lzma_lzma_optimum_*() to test if the match is at least -// MATCH_LEN_MIN bytes. Unaligned access gives tiny gain so there's no -// reason to not use it when it is supported. -#ifdef HAVE_FAST_UNALIGNED_ACCESS -# define not_equal_16(a, b) \ - (*(const uint16_t *)(a) != *(const uint16_t *)(b)) -#else -# define not_equal_16(a, b) \ - ((a)[0] != (b)[0] || (a)[1] != (b)[1]) -#endif - - -// Optimal - Number of entries in the optimum array. -#define OPTS (1 << 12) - - -typedef struct { - probability choice; - probability choice2; - probability low[POS_STATES_MAX][LEN_LOW_SYMBOLS]; - probability mid[POS_STATES_MAX][LEN_MID_SYMBOLS]; - probability high[LEN_HIGH_SYMBOLS]; - - uint32_t prices[POS_STATES_MAX][LEN_SYMBOLS]; - uint32_t table_size; - uint32_t counters[POS_STATES_MAX]; - -} lzma_length_encoder; - - -typedef struct { - lzma_lzma_state state; - - bool prev_1_is_literal; - bool prev_2; - - uint32_t pos_prev_2; - uint32_t back_prev_2; - - uint32_t price; - uint32_t pos_prev; // pos_next; - uint32_t back_prev; - - uint32_t backs[REP_DISTANCES]; - -} lzma_optimal; - - -struct lzma_coder_s { - /// Range encoder - lzma_range_encoder rc; - - /// State - lzma_lzma_state state; - - /// The four most recent match distances - uint32_t reps[REP_DISTANCES]; - - /// Array of match candidates - lzma_match matches[MATCH_LEN_MAX + 1]; - - /// Number of match candidates in matches[] - uint32_t matches_count; - - /// Varibale to hold the length of the longest match between calls - /// to lzma_lzma_optimum_*(). - uint32_t longest_match_length; - - /// True if using getoptimumfast - bool fast_mode; - - /// True if the encoder has been initialized by encoding the first - /// byte as a literal. - bool is_initialized; - - /// True if the range encoder has been flushed, but not all bytes - /// have been written to the output buffer yet. - bool is_flushed; - - uint32_t pos_mask; ///< (1 << pos_bits) - 1 - uint32_t literal_context_bits; - uint32_t literal_pos_mask; - - // These are the same as in lzma_decoder.c. See comments there. - probability literal[LITERAL_CODERS_MAX][LITERAL_CODER_SIZE]; - probability is_match[STATES][POS_STATES_MAX]; - probability is_rep[STATES]; - probability is_rep0[STATES]; - probability is_rep1[STATES]; - probability is_rep2[STATES]; - probability is_rep0_long[STATES][POS_STATES_MAX]; - probability pos_slot[LEN_TO_POS_STATES][POS_SLOTS]; - probability pos_special[FULL_DISTANCES - END_POS_MODEL_INDEX]; - probability pos_align[ALIGN_TABLE_SIZE]; - - // These are the same as in lzma_decoder.c except that the encoders - // include also price tables. - lzma_length_encoder match_len_encoder; - lzma_length_encoder rep_len_encoder; - - // Price tables - uint32_t pos_slot_prices[LEN_TO_POS_STATES][POS_SLOTS]; - uint32_t distances_prices[LEN_TO_POS_STATES][FULL_DISTANCES]; - uint32_t dist_table_size; - uint32_t match_price_count; - - uint32_t align_prices[ALIGN_TABLE_SIZE]; - uint32_t align_price_count; - - // Optimal - uint32_t opts_end_index; - uint32_t opts_current_index; - lzma_optimal opts[OPTS]; -}; - - -extern void lzma_lzma_optimum_fast( - lzma_coder *restrict coder, lzma_mf *restrict mf, - uint32_t *restrict back_res, uint32_t *restrict len_res); - -extern void lzma_lzma_optimum_normal(lzma_coder *restrict coder, - lzma_mf *restrict mf, uint32_t *restrict back_res, - uint32_t *restrict len_res, uint32_t position); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/Makefile.inc b/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/Makefile.inc deleted file mode 100644 index d8a597a2607..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/Makefile.inc +++ /dev/null @@ -1,21 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -EXTRA_DIST += rangecoder/price_tablegen.c - -liblzma_la_SOURCES += rangecoder/range_common.h - -if COND_ENCODER_LZMA1 -liblzma_la_SOURCES += \ - rangecoder/range_encoder.h \ - rangecoder/price.h \ - rangecoder/price_table.c -endif - -if COND_DECODER_LZMA1 -liblzma_la_SOURCES += rangecoder/range_decoder.h -endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/price.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/price.h deleted file mode 100644 index 8ae02ca7474..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/price.h +++ /dev/null @@ -1,92 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file price.h -/// \brief Probability price calculation -// -// Author: Igor Pavlov -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_PRICE_H -#define LZMA_PRICE_H - - -#define RC_MOVE_REDUCING_BITS 4 -#define RC_BIT_PRICE_SHIFT_BITS 4 -#define RC_PRICE_TABLE_SIZE (RC_BIT_MODEL_TOTAL >> RC_MOVE_REDUCING_BITS) - -#define RC_INFINITY_PRICE (UINT32_C(1) << 30) - - -/// Lookup table for the inline functions defined in this file. -extern const uint8_t lzma_rc_prices[RC_PRICE_TABLE_SIZE]; - - -static inline uint32_t -rc_bit_price(const probability prob, const uint32_t bit) -{ - return lzma_rc_prices[(prob ^ ((UINT32_C(0) - bit) - & (RC_BIT_MODEL_TOTAL - 1))) >> RC_MOVE_REDUCING_BITS]; -} - - -static inline uint32_t -rc_bit_0_price(const probability prob) -{ - return lzma_rc_prices[prob >> RC_MOVE_REDUCING_BITS]; -} - - -static inline uint32_t -rc_bit_1_price(const probability prob) -{ - return lzma_rc_prices[(prob ^ (RC_BIT_MODEL_TOTAL - 1)) - >> RC_MOVE_REDUCING_BITS]; -} - - -static inline uint32_t -rc_bittree_price(const probability *const probs, - const uint32_t bit_levels, uint32_t symbol) -{ - uint32_t price = 0; - symbol += UINT32_C(1) << bit_levels; - - do { - const uint32_t bit = symbol & 1; - symbol >>= 1; - price += rc_bit_price(probs[symbol], bit); - } while (symbol != 1); - - return price; -} - - -static inline uint32_t -rc_bittree_reverse_price(const probability *const probs, - uint32_t bit_levels, uint32_t symbol) -{ - uint32_t price = 0; - uint32_t model_index = 1; - - do { - const uint32_t bit = symbol & 1; - symbol >>= 1; - price += rc_bit_price(probs[model_index], bit); - model_index = (model_index << 1) + bit; - } while (--bit_levels != 0); - - return price; -} - - -static inline uint32_t -rc_direct_price(const uint32_t bits) -{ - return bits << RC_BIT_PRICE_SHIFT_BITS; -} - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/price_table.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/price_table.c deleted file mode 100644 index ac64bf62c76..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/price_table.c +++ /dev/null @@ -1,22 +0,0 @@ -/* This file has been automatically generated by price_tablegen.c. */ - -#include "range_encoder.h" - -const uint8_t lzma_rc_prices[RC_PRICE_TABLE_SIZE] = { - 128, 103, 91, 84, 78, 73, 69, 66, - 63, 61, 58, 56, 54, 52, 51, 49, - 48, 46, 45, 44, 43, 42, 41, 40, - 39, 38, 37, 36, 35, 34, 34, 33, - 32, 31, 31, 30, 29, 29, 28, 28, - 27, 26, 26, 25, 25, 24, 24, 23, - 23, 22, 22, 22, 21, 21, 20, 20, - 19, 19, 19, 18, 18, 17, 17, 17, - 16, 16, 16, 15, 15, 15, 14, 14, - 14, 13, 13, 13, 12, 12, 12, 11, - 11, 11, 11, 10, 10, 10, 10, 9, - 9, 9, 9, 8, 8, 8, 8, 7, - 7, 7, 7, 6, 6, 6, 6, 5, - 5, 5, 5, 5, 4, 4, 4, 4, - 3, 3, 3, 3, 3, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1 -}; diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/price_tablegen.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/price_tablegen.c deleted file mode 100644 index bf08ce39d7e..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/price_tablegen.c +++ /dev/null @@ -1,87 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file price_tablegen.c -/// \brief Probability price table generator -/// -/// Compiling: gcc -std=c99 -o price_tablegen price_tablegen.c -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include -#include -#include "range_common.h" -#include "price.h" - - -static uint32_t rc_prices[RC_PRICE_TABLE_SIZE]; - - -static void -init_price_table(void) -{ - for (uint32_t i = (UINT32_C(1) << RC_MOVE_REDUCING_BITS) / 2; - i < RC_BIT_MODEL_TOTAL; - i += (UINT32_C(1) << RC_MOVE_REDUCING_BITS)) { - const uint32_t cycles_bits = RC_BIT_PRICE_SHIFT_BITS; - uint32_t w = i; - uint32_t bit_count = 0; - - for (uint32_t j = 0; j < cycles_bits; ++j) { - w *= w; - bit_count <<= 1; - - while (w >= (UINT32_C(1) << 16)) { - w >>= 1; - ++bit_count; - } - } - - rc_prices[i >> RC_MOVE_REDUCING_BITS] - = (RC_BIT_MODEL_TOTAL_BITS << cycles_bits) - - 15 - bit_count; - } - - return; -} - - -static void -print_price_table(void) -{ - printf("/* This file has been automatically generated by " - "price_tablegen.c. */\n\n" - "#include \"range_encoder.h\"\n\n" - "const uint8_t lzma_rc_prices[" - "RC_PRICE_TABLE_SIZE] = {"); - - const size_t array_size = sizeof(lzma_rc_prices) - / sizeof(lzma_rc_prices[0]); - for (size_t i = 0; i < array_size; ++i) { - if (i % 8 == 0) - printf("\n\t"); - - printf("%4" PRIu32, rc_prices[i]); - - if (i != array_size - 1) - printf(","); - } - - printf("\n};\n"); - - return; -} - - -int -main(void) -{ - init_price_table(); - print_price_table(); - return 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/range_common.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/range_common.h deleted file mode 100644 index 0e6424198d1..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/range_common.h +++ /dev/null @@ -1,73 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file range_common.h -/// \brief Common things for range encoder and decoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_RANGE_COMMON_H -#define LZMA_RANGE_COMMON_H - -#ifdef HAVE_CONFIG_H -# include "common.h" -#endif - - -/////////////// -// Constants // -/////////////// - -#define RC_SHIFT_BITS 8 -#define RC_TOP_BITS 24 -#define RC_TOP_VALUE (UINT32_C(1) << RC_TOP_BITS) -#define RC_BIT_MODEL_TOTAL_BITS 11 -#define RC_BIT_MODEL_TOTAL (UINT32_C(1) << RC_BIT_MODEL_TOTAL_BITS) -#define RC_MOVE_BITS 5 - - -//////////// -// Macros // -//////////// - -// Resets the probability so that both 0 and 1 have probability of 50 % -#define bit_reset(prob) \ - prob = RC_BIT_MODEL_TOTAL >> 1 - -// This does the same for a complete bit tree. -// (A tree represented as an array.) -#define bittree_reset(probs, bit_levels) \ - for (uint32_t bt_i = 0; bt_i < (1 << (bit_levels)); ++bt_i) \ - bit_reset((probs)[bt_i]) - - -////////////////////// -// Type definitions // -////////////////////// - -/// \brief Type of probabilities used with range coder -/// -/// This needs to be at least 12-bit integer, so uint16_t is a logical choice. -/// However, on some architecture and compiler combinations, a bigger type -/// may give better speed, because the probability variables are accessed -/// a lot. On the other hand, bigger probability type increases cache -/// footprint, since there are 2 to 14 thousand probability variables in -/// LZMA (assuming the limit of lc + lp <= 4; with lc + lp <= 12 there -/// would be about 1.5 million variables). -/// -/// With malicious files, the initialization speed of the LZMA decoder can -/// become important. In that case, smaller probability variables mean that -/// there is less bytes to write to RAM, which makes initialization faster. -/// With big probability type, the initialization can become so slow that it -/// can be a problem e.g. for email servers doing virus scanning. -/// -/// I will be sticking to uint16_t unless some specific architectures -/// are *much* faster (20-50 %) with uint32_t. -typedef uint16_t probability; - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/range_decoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/range_decoder.h deleted file mode 100644 index fb96180fb39..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/range_decoder.h +++ /dev/null @@ -1,179 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file range_decoder.h -/// \brief Range Decoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_RANGE_DECODER_H -#define LZMA_RANGE_DECODER_H - -#include "range_common.h" - - -typedef struct { - uint32_t range; - uint32_t code; - uint32_t init_bytes_left; -} lzma_range_decoder; - - -/// Reads the first five bytes to initialize the range decoder. -static inline bool -rc_read_init(lzma_range_decoder *rc, const uint8_t *restrict in, - size_t *restrict in_pos, size_t in_size) -{ - while (rc->init_bytes_left > 0) { - if (*in_pos == in_size) - return false; - - rc->code = (rc->code << 8) | in[*in_pos]; - ++*in_pos; - --rc->init_bytes_left; - } - - return true; -} - - -/// Makes local copies of range decoder and *in_pos variables. Doing this -/// improves speed significantly. The range decoder macros expect also -/// variables `in' and `in_size' to be defined. -#define rc_to_local(range_decoder, in_pos) \ - lzma_range_decoder rc = range_decoder; \ - size_t rc_in_pos = (in_pos); \ - uint32_t rc_bound - - -/// Stores the local copes back to the range decoder structure. -#define rc_from_local(range_decoder, in_pos) \ -do { \ - range_decoder = rc; \ - in_pos = rc_in_pos; \ -} while (0) - - -/// Resets the range decoder structure. -#define rc_reset(range_decoder) \ -do { \ - (range_decoder).range = UINT32_MAX; \ - (range_decoder).code = 0; \ - (range_decoder).init_bytes_left = 5; \ -} while (0) - - -/// When decoding has been properly finished, rc.code is always zero unless -/// the input stream is corrupt. So checking this can catch some corrupt -/// files especially if they don't have any other integrity check. -#define rc_is_finished(range_decoder) \ - ((range_decoder).code == 0) - - -/// Read the next input byte if needed. If more input is needed but there is -/// no more input available, "goto out" is used to jump out of the main -/// decoder loop. -#define rc_normalize(seq) \ -do { \ - if (rc.range < RC_TOP_VALUE) { \ - if (unlikely(rc_in_pos == in_size)) { \ - coder->sequence = seq; \ - goto out; \ - } \ - rc.range <<= RC_SHIFT_BITS; \ - rc.code = (rc.code << RC_SHIFT_BITS) | in[rc_in_pos++]; \ - } \ -} while (0) - - -/// Start decoding a bit. This must be used together with rc_update_0() -/// and rc_update_1(): -/// -/// rc_if_0(prob, seq) { -/// rc_update_0(prob); -/// // Do something -/// } else { -/// rc_update_1(prob); -/// // Do something else -/// } -/// -#define rc_if_0(prob, seq) \ - rc_normalize(seq); \ - rc_bound = (rc.range >> RC_BIT_MODEL_TOTAL_BITS) * (prob); \ - if (rc.code < rc_bound) - - -/// Update the range decoder state and the used probability variable to -/// match a decoded bit of 0. -#define rc_update_0(prob) \ -do { \ - rc.range = rc_bound; \ - prob += (RC_BIT_MODEL_TOTAL - (prob)) >> RC_MOVE_BITS; \ -} while (0) - - -/// Update the range decoder state and the used probability variable to -/// match a decoded bit of 1. -#define rc_update_1(prob) \ -do { \ - rc.range -= rc_bound; \ - rc.code -= rc_bound; \ - prob -= (prob) >> RC_MOVE_BITS; \ -} while (0) - - -/// Decodes one bit and runs action0 or action1 depending on the decoded bit. -/// This macro is used as the last step in bittree reverse decoders since -/// those don't use "symbol" for anything else than indexing the probability -/// arrays. -#define rc_bit_last(prob, action0, action1, seq) \ -do { \ - rc_if_0(prob, seq) { \ - rc_update_0(prob); \ - action0; \ - } else { \ - rc_update_1(prob); \ - action1; \ - } \ -} while (0) - - -/// Decodes one bit, updates "symbol", and runs action0 or action1 depending -/// on the decoded bit. -#define rc_bit(prob, action0, action1, seq) \ - rc_bit_last(prob, \ - symbol <<= 1; action0, \ - symbol = (symbol << 1) + 1; action1, \ - seq); - - -/// Like rc_bit() but add "case seq:" as a prefix. This makes the unrolled -/// loops more readable because the code isn't littered with "case" -/// statements. On the other hand this also makes it less readable, since -/// spotting the places where the decoder loop may be restarted is less -/// obvious. -#define rc_bit_case(prob, action0, action1, seq) \ - case seq: rc_bit(prob, action0, action1, seq) - - -/// Decode a bit without using a probability. -#define rc_direct(dest, seq) \ -do { \ - rc_normalize(seq); \ - rc.range >>= 1; \ - rc.code -= rc.range; \ - rc_bound = UINT32_C(0) - (rc.code >> 31); \ - rc.code += rc.range & rc_bound; \ - dest = (dest << 1) + (rc_bound + 1); \ -} while (0) - - -// NOTE: No macros are provided for bittree decoding. It seems to be simpler -// to just write them open in the code. - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/range_encoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/range_encoder.h deleted file mode 100644 index 1e1c36995b6..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/rangecoder/range_encoder.h +++ /dev/null @@ -1,231 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file range_encoder.h -/// \brief Range Encoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_RANGE_ENCODER_H -#define LZMA_RANGE_ENCODER_H - -#include "range_common.h" -#include "price.h" - - -/// Maximum number of symbols that can be put pending into lzma_range_encoder -/// structure between calls to lzma_rc_encode(). For LZMA, 52+5 is enough -/// (match with big distance and length followed by range encoder flush). -#define RC_SYMBOLS_MAX 58 - - -typedef struct { - uint64_t low; - uint64_t cache_size; - uint32_t range; - uint8_t cache; - - /// Number of symbols in the tables - size_t count; - - /// rc_encode()'s position in the tables - size_t pos; - - /// Symbols to encode - enum { - RC_BIT_0, - RC_BIT_1, - RC_DIRECT_0, - RC_DIRECT_1, - RC_FLUSH, - } symbols[RC_SYMBOLS_MAX]; - - /// Probabilities associated with RC_BIT_0 or RC_BIT_1 - probability *probs[RC_SYMBOLS_MAX]; - -} lzma_range_encoder; - - -static inline void -rc_reset(lzma_range_encoder *rc) -{ - rc->low = 0; - rc->cache_size = 1; - rc->range = UINT32_MAX; - rc->cache = 0; - rc->count = 0; - rc->pos = 0; -} - - -static inline void -rc_bit(lzma_range_encoder *rc, probability *prob, uint32_t bit) -{ - rc->symbols[rc->count] = bit; - rc->probs[rc->count] = prob; - ++rc->count; -} - - -static inline void -rc_bittree(lzma_range_encoder *rc, probability *probs, - uint32_t bit_count, uint32_t symbol) -{ - uint32_t model_index = 1; - - do { - const uint32_t bit = (symbol >> --bit_count) & 1; - rc_bit(rc, &probs[model_index], bit); - model_index = (model_index << 1) + bit; - } while (bit_count != 0); -} - - -static inline void -rc_bittree_reverse(lzma_range_encoder *rc, probability *probs, - uint32_t bit_count, uint32_t symbol) -{ - uint32_t model_index = 1; - - do { - const uint32_t bit = symbol & 1; - symbol >>= 1; - rc_bit(rc, &probs[model_index], bit); - model_index = (model_index << 1) + bit; - } while (--bit_count != 0); -} - - -static inline void -rc_direct(lzma_range_encoder *rc, - uint32_t value, uint32_t bit_count) -{ - do { - rc->symbols[rc->count++] - = RC_DIRECT_0 + ((value >> --bit_count) & 1); - } while (bit_count != 0); -} - - -static inline void -rc_flush(lzma_range_encoder *rc) -{ - for (size_t i = 0; i < 5; ++i) - rc->symbols[rc->count++] = RC_FLUSH; -} - - -static inline bool -rc_shift_low(lzma_range_encoder *rc, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - if ((uint32_t)(rc->low) < (uint32_t)(0xFF000000) - || (uint32_t)(rc->low >> 32) != 0) { - do { - if (*out_pos == out_size) - return true; - - out[*out_pos] = rc->cache + (uint8_t)(rc->low >> 32); - ++*out_pos; - rc->cache = 0xFF; - - } while (--rc->cache_size != 0); - - rc->cache = (rc->low >> 24) & 0xFF; - } - - ++rc->cache_size; - rc->low = (rc->low & 0x00FFFFFF) << RC_SHIFT_BITS; - - return false; -} - - -static inline bool -rc_encode(lzma_range_encoder *rc, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - assert(rc->count <= RC_SYMBOLS_MAX); - - while (rc->pos < rc->count) { - // Normalize - if (rc->range < RC_TOP_VALUE) { - if (rc_shift_low(rc, out, out_pos, out_size)) - return true; - - rc->range <<= RC_SHIFT_BITS; - } - - // Encode a bit - switch (rc->symbols[rc->pos]) { - case RC_BIT_0: { - probability prob = *rc->probs[rc->pos]; - rc->range = (rc->range >> RC_BIT_MODEL_TOTAL_BITS) - * prob; - prob += (RC_BIT_MODEL_TOTAL - prob) >> RC_MOVE_BITS; - *rc->probs[rc->pos] = prob; - break; - } - - case RC_BIT_1: { - probability prob = *rc->probs[rc->pos]; - const uint32_t bound = prob * (rc->range - >> RC_BIT_MODEL_TOTAL_BITS); - rc->low += bound; - rc->range -= bound; - prob -= prob >> RC_MOVE_BITS; - *rc->probs[rc->pos] = prob; - break; - } - - case RC_DIRECT_0: - rc->range >>= 1; - break; - - case RC_DIRECT_1: - rc->range >>= 1; - rc->low += rc->range; - break; - - case RC_FLUSH: - // Prevent further normalizations. - rc->range = UINT32_MAX; - - // Flush the last five bytes (see rc_flush()). - do { - if (rc_shift_low(rc, out, out_pos, out_size)) - return true; - } while (++rc->pos < rc->count); - - // Reset the range encoder so we are ready to continue - // encoding if we weren't finishing the stream. - rc_reset(rc); - return false; - - default: - assert(0); - break; - } - - ++rc->pos; - } - - rc->count = 0; - rc->pos = 0; - - return false; -} - - -static inline uint64_t -rc_pending(const lzma_range_encoder *rc) -{ - return rc->cache_size + 5 - 1; -} - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/Makefile.inc b/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/Makefile.inc deleted file mode 100644 index 8a5e2d7fa96..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/Makefile.inc +++ /dev/null @@ -1,47 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -liblzma_la_SOURCES += \ - simple/simple_coder.c \ - simple/simple_coder.h \ - simple/simple_private.h - -if COND_ENCODER_SIMPLE -liblzma_la_SOURCES += \ - simple/simple_encoder.c \ - simple/simple_encoder.h -endif - -if COND_DECODER_SIMPLE -liblzma_la_SOURCES += \ - simple/simple_decoder.c \ - simple/simple_decoder.h -endif - -if COND_FILTER_X86 -liblzma_la_SOURCES += simple/x86.c -endif - -if COND_FILTER_POWERPC -liblzma_la_SOURCES += simple/powerpc.c -endif - -if COND_FILTER_IA64 -liblzma_la_SOURCES += simple/ia64.c -endif - -if COND_FILTER_ARM -liblzma_la_SOURCES += simple/arm.c -endif - -if COND_FILTER_ARMTHUMB -liblzma_la_SOURCES += simple/armthumb.c -endif - -if COND_FILTER_SPARC -liblzma_la_SOURCES += simple/sparc.c -endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/arm.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/arm.c deleted file mode 100644 index 8fcf6437491..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/arm.c +++ /dev/null @@ -1,69 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file arm.c -/// \brief Filter for ARM binaries -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_private.h" - - -static size_t -arm_code(lzma_simple *simple lzma_attribute((unused)), - uint32_t now_pos, bool is_encoder, - uint8_t *buffer, size_t size) -{ - size_t i; - for (i = 0; i + 4 <= size; i += 4) { - if (buffer[i + 3] == 0xEB) { - uint32_t src = (buffer[i + 2] << 16) - | (buffer[i + 1] << 8) - | (buffer[i + 0]); - src <<= 2; - - uint32_t dest; - if (is_encoder) - dest = now_pos + (uint32_t)(i) + 8 + src; - else - dest = src - (now_pos + (uint32_t)(i) + 8); - - dest >>= 2; - buffer[i + 2] = (dest >> 16); - buffer[i + 1] = (dest >> 8); - buffer[i + 0] = dest; - } - } - - return i; -} - - -static lzma_ret -arm_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, bool is_encoder) -{ - return lzma_simple_coder_init(next, allocator, filters, - &arm_code, 0, 4, 4, is_encoder); -} - - -extern lzma_ret -lzma_simple_arm_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - return arm_coder_init(next, allocator, filters, true); -} - - -extern lzma_ret -lzma_simple_arm_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - return arm_coder_init(next, allocator, filters, false); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/armthumb.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/armthumb.c deleted file mode 100644 index eb6a69d1282..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/armthumb.c +++ /dev/null @@ -1,74 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file armthumb.c -/// \brief Filter for ARM-Thumb binaries -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_private.h" - - -static size_t -armthumb_code(lzma_simple *simple lzma_attribute((unused)), - uint32_t now_pos, bool is_encoder, - uint8_t *buffer, size_t size) -{ - size_t i; - for (i = 0; i + 4 <= size; i += 2) { - if ((buffer[i + 1] & 0xF8) == 0xF0 - && (buffer[i + 3] & 0xF8) == 0xF8) { - uint32_t src = ((buffer[i + 1] & 0x7) << 19) - | (buffer[i + 0] << 11) - | ((buffer[i + 3] & 0x7) << 8) - | (buffer[i + 2]); - - src <<= 1; - - uint32_t dest; - if (is_encoder) - dest = now_pos + (uint32_t)(i) + 4 + src; - else - dest = src - (now_pos + (uint32_t)(i) + 4); - - dest >>= 1; - buffer[i + 1] = 0xF0 | ((dest >> 19) & 0x7); - buffer[i + 0] = (dest >> 11); - buffer[i + 3] = 0xF8 | ((dest >> 8) & 0x7); - buffer[i + 2] = (dest); - i += 2; - } - } - - return i; -} - - -static lzma_ret -armthumb_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, bool is_encoder) -{ - return lzma_simple_coder_init(next, allocator, filters, - &armthumb_code, 0, 4, 2, is_encoder); -} - - -extern lzma_ret -lzma_simple_armthumb_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return armthumb_coder_init(next, allocator, filters, true); -} - - -extern lzma_ret -lzma_simple_armthumb_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return armthumb_coder_init(next, allocator, filters, false); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/ia64.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/ia64.c deleted file mode 100644 index fd263d4aea0..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/ia64.c +++ /dev/null @@ -1,110 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file ia64.c -/// \brief Filter for IA64 (Itanium) binaries -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_private.h" - - -static size_t -ia64_code(lzma_simple *simple lzma_attribute((unused)), - uint32_t now_pos, bool is_encoder, - uint8_t *buffer, size_t size) -{ - static const uint32_t BRANCH_TABLE[32] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 4, 4, 6, 6, 0, 0, 7, 7, - 4, 4, 0, 0, 4, 4, 0, 0 - }; - - size_t i; - for (i = 0; i + 16 <= size; i += 16) { - const uint32_t instr_template = buffer[i] & 0x1F; - const uint32_t mask = BRANCH_TABLE[instr_template]; - uint32_t bit_pos = 5; - - for (size_t slot = 0; slot < 3; ++slot, bit_pos += 41) { - if (((mask >> slot) & 1) == 0) - continue; - - const size_t byte_pos = (bit_pos >> 3); - const uint32_t bit_res = bit_pos & 0x7; - uint64_t instruction = 0; - - for (size_t j = 0; j < 6; ++j) - instruction += (uint64_t)( - buffer[i + j + byte_pos]) - << (8 * j); - - uint64_t inst_norm = instruction >> bit_res; - - if (((inst_norm >> 37) & 0xF) == 0x5 - && ((inst_norm >> 9) & 0x7) == 0 - /* && (inst_norm & 0x3F)== 0 */ - ) { - uint32_t src = (uint32_t)( - (inst_norm >> 13) & 0xFFFFF); - src |= ((inst_norm >> 36) & 1) << 20; - - src <<= 4; - - uint32_t dest; - if (is_encoder) - dest = now_pos + (uint32_t)(i) + src; - else - dest = src - (now_pos + (uint32_t)(i)); - - dest >>= 4; - - inst_norm &= ~((uint64_t)(0x8FFFFF) << 13); - inst_norm |= (uint64_t)(dest & 0xFFFFF) << 13; - inst_norm |= (uint64_t)(dest & 0x100000) - << (36 - 20); - - instruction &= (1 << bit_res) - 1; - instruction |= (inst_norm << bit_res); - - for (size_t j = 0; j < 6; j++) - buffer[i + j + byte_pos] = (uint8_t)( - instruction - >> (8 * j)); - } - } - } - - return i; -} - - -static lzma_ret -ia64_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, bool is_encoder) -{ - return lzma_simple_coder_init(next, allocator, filters, - &ia64_code, 0, 16, 16, is_encoder); -} - - -extern lzma_ret -lzma_simple_ia64_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return ia64_coder_init(next, allocator, filters, true); -} - - -extern lzma_ret -lzma_simple_ia64_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return ia64_coder_init(next, allocator, filters, false); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/powerpc.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/powerpc.c deleted file mode 100644 index aaa14f22197..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/powerpc.c +++ /dev/null @@ -1,73 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file powerpc.c -/// \brief Filter for PowerPC (big endian) binaries -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_private.h" - - -static size_t -powerpc_code(lzma_simple *simple lzma_attribute((unused)), - uint32_t now_pos, bool is_encoder, - uint8_t *buffer, size_t size) -{ - size_t i; - for (i = 0; i + 4 <= size; i += 4) { - // PowerPC branch 6(48) 24(Offset) 1(Abs) 1(Link) - if ((buffer[i] >> 2) == 0x12 - && ((buffer[i + 3] & 3) == 1)) { - - const uint32_t src = ((buffer[i + 0] & 3) << 24) - | (buffer[i + 1] << 16) - | (buffer[i + 2] << 8) - | (buffer[i + 3] & (~3)); - - uint32_t dest; - if (is_encoder) - dest = now_pos + (uint32_t)(i) + src; - else - dest = src - (now_pos + (uint32_t)(i)); - - buffer[i + 0] = 0x48 | ((dest >> 24) & 0x03); - buffer[i + 1] = (dest >> 16); - buffer[i + 2] = (dest >> 8); - buffer[i + 3] &= 0x03; - buffer[i + 3] |= dest; - } - } - - return i; -} - - -static lzma_ret -powerpc_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, bool is_encoder) -{ - return lzma_simple_coder_init(next, allocator, filters, - &powerpc_code, 0, 4, 4, is_encoder); -} - - -extern lzma_ret -lzma_simple_powerpc_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return powerpc_coder_init(next, allocator, filters, true); -} - - -extern lzma_ret -lzma_simple_powerpc_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return powerpc_coder_init(next, allocator, filters, false); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_coder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_coder.c deleted file mode 100644 index 497949a3d09..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_coder.c +++ /dev/null @@ -1,268 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file simple_coder.c -/// \brief Wrapper for simple filters -/// -/// Simple filters don't change the size of the data i.e. number of bytes -/// in equals the number of bytes out. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_private.h" - - -/// Copied or encodes/decodes more data to out[]. -static lzma_ret -copy_or_code(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - assert(!coder->end_was_reached); - - if (coder->next.code == NULL) { - lzma_bufcpy(in, in_pos, in_size, out, out_pos, out_size); - - // Check if end of stream was reached. - if (coder->is_encoder && action == LZMA_FINISH - && *in_pos == in_size) - coder->end_was_reached = true; - - } else { - // Call the next coder in the chain to provide us some data. - // We don't care about uncompressed_size here, because - // the next filter in the chain will do it for us (since - // we don't change the size of the data). - const lzma_ret ret = coder->next.code( - coder->next.coder, allocator, - in, in_pos, in_size, - out, out_pos, out_size, action); - - if (ret == LZMA_STREAM_END) { - assert(!coder->is_encoder - || action == LZMA_FINISH); - coder->end_was_reached = true; - - } else if (ret != LZMA_OK) { - return ret; - } - } - - return LZMA_OK; -} - - -static size_t -call_filter(lzma_coder *coder, uint8_t *buffer, size_t size) -{ - const size_t filtered = coder->filter(coder->simple, - coder->now_pos, coder->is_encoder, - buffer, size); - coder->now_pos += filtered; - return filtered; -} - - -static lzma_ret -simple_code(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - // TODO: Add partial support for LZMA_SYNC_FLUSH. We can support it - // in cases when the filter is able to filter everything. With most - // simple filters it can be done at offset that is a multiple of 2, - // 4, or 16. With x86 filter, it needs good luck, and thus cannot - // be made to work predictably. - if (action == LZMA_SYNC_FLUSH) - return LZMA_OPTIONS_ERROR; - - // Flush already filtered data from coder->buffer[] to out[]. - if (coder->pos < coder->filtered) { - lzma_bufcpy(coder->buffer, &coder->pos, coder->filtered, - out, out_pos, out_size); - - // If we couldn't flush all the filtered data, return to - // application immediatelly. - if (coder->pos < coder->filtered) - return LZMA_OK; - - if (coder->end_was_reached) { - assert(coder->filtered == coder->size); - return LZMA_STREAM_END; - } - } - - // If we get here, there is no filtered data left in the buffer. - coder->filtered = 0; - - assert(!coder->end_was_reached); - - // If there is more output space left than there is unfiltered data - // in coder->buffer[], flush coder->buffer[] to out[], and copy/code - // more data to out[] hopefully filling it completely. Then filter - // the data in out[]. This step is where most of the data gets - // filtered if the buffer sizes used by the application are reasonable. - const size_t out_avail = out_size - *out_pos; - const size_t buf_avail = coder->size - coder->pos; - if (out_avail > buf_avail) { - // Store the old position so that we know from which byte - // to start filtering. - const size_t out_start = *out_pos; - - // Flush data from coder->buffer[] to out[], but don't reset - // coder->pos and coder->size yet. This way the coder can be - // restarted if the next filter in the chain returns e.g. - // LZMA_MEM_ERROR. - memcpy(out + *out_pos, coder->buffer + coder->pos, buf_avail); - *out_pos += buf_avail; - - // Copy/Encode/Decode more data to out[]. - { - const lzma_ret ret = copy_or_code(coder, allocator, - in, in_pos, in_size, - out, out_pos, out_size, action); - assert(ret != LZMA_STREAM_END); - if (ret != LZMA_OK) - return ret; - } - - // Filter out[]. - const size_t size = *out_pos - out_start; - const size_t filtered = call_filter( - coder, out + out_start, size); - - const size_t unfiltered = size - filtered; - assert(unfiltered <= coder->allocated / 2); - - // Now we can update coder->pos and coder->size, because - // the next coder in the chain (if any) was successful. - coder->pos = 0; - coder->size = unfiltered; - - if (coder->end_was_reached) { - // The last byte has been copied to out[] already. - // They are left as is. - coder->size = 0; - - } else if (unfiltered > 0) { - // There is unfiltered data left in out[]. Copy it to - // coder->buffer[] and rewind *out_pos appropriately. - *out_pos -= unfiltered; - memcpy(coder->buffer, out + *out_pos, unfiltered); - } - } else if (coder->pos > 0) { - memmove(coder->buffer, coder->buffer + coder->pos, buf_avail); - coder->size -= coder->pos; - coder->pos = 0; - } - - assert(coder->pos == 0); - - // If coder->buffer[] isn't empty, try to fill it by copying/decoding - // more data. Then filter coder->buffer[] and copy the successfully - // filtered data to out[]. It is probable, that some filtered and - // unfiltered data will be left to coder->buffer[]. - if (coder->size > 0) { - { - const lzma_ret ret = copy_or_code(coder, allocator, - in, in_pos, in_size, - coder->buffer, &coder->size, - coder->allocated, action); - assert(ret != LZMA_STREAM_END); - if (ret != LZMA_OK) - return ret; - } - - coder->filtered = call_filter( - coder, coder->buffer, coder->size); - - // Everything is considered to be filtered if coder->buffer[] - // contains the last bytes of the data. - if (coder->end_was_reached) - coder->filtered = coder->size; - - // Flush as much as possible. - lzma_bufcpy(coder->buffer, &coder->pos, coder->filtered, - out, out_pos, out_size); - } - - // Check if we got everything done. - if (coder->end_was_reached && coder->pos == coder->size) - return LZMA_STREAM_END; - - return LZMA_OK; -} - - -static void -simple_coder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder->simple, allocator); - lzma_free(coder, allocator); - return; -} - - -extern lzma_ret -lzma_simple_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, - size_t (*filter)(lzma_simple *simple, uint32_t now_pos, - bool is_encoder, uint8_t *buffer, size_t size), - size_t simple_size, size_t unfiltered_max, - uint32_t alignment, bool is_encoder) -{ - // Allocate memory for the lzma_coder structure if needed. - if (next->coder == NULL) { - // Here we allocate space also for the temporary buffer. We - // need twice the size of unfiltered_max, because then it - // is always possible to filter at least unfiltered_max bytes - // more data in coder->buffer[] if it can be filled completely. - next->coder = lzma_alloc(sizeof(lzma_coder) - + 2 * unfiltered_max, allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &simple_code; - next->end = &simple_coder_end; - - next->coder->next = LZMA_NEXT_CODER_INIT; - next->coder->filter = filter; - next->coder->allocated = 2 * unfiltered_max; - - // Allocate memory for filter-specific data structure. - if (simple_size > 0) { - next->coder->simple = lzma_alloc( - simple_size, allocator); - if (next->coder->simple == NULL) - return LZMA_MEM_ERROR; - } else { - next->coder->simple = NULL; - } - } - - if (filters[0].options != NULL) { - const lzma_options_bcj *simple = filters[0].options; - next->coder->now_pos = simple->start_offset; - if (next->coder->now_pos & (alignment - 1)) - return LZMA_OPTIONS_ERROR; - } else { - next->coder->now_pos = 0; - } - - // Reset variables. - next->coder->is_encoder = is_encoder; - next->coder->end_was_reached = false; - next->coder->pos = 0; - next->coder->filtered = 0; - next->coder->size = 0; - - return lzma_next_filter_init( - &next->coder->next, allocator, filters + 1); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_coder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_coder.h deleted file mode 100644 index 0952fad33b3..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_coder.h +++ /dev/null @@ -1,60 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file simple_coder.h -/// \brief Wrapper for simple filters -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_SIMPLE_CODER_H -#define LZMA_SIMPLE_CODER_H - -#include "common.h" - - -extern lzma_ret lzma_simple_x86_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_simple_x86_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - - -extern lzma_ret lzma_simple_powerpc_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_simple_powerpc_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - - -extern lzma_ret lzma_simple_ia64_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_simple_ia64_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - - -extern lzma_ret lzma_simple_arm_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_simple_arm_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - - -extern lzma_ret lzma_simple_armthumb_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_simple_armthumb_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - - -extern lzma_ret lzma_simple_sparc_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_simple_sparc_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_decoder.c deleted file mode 100644 index 9be1bfef579..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_decoder.c +++ /dev/null @@ -1,40 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file simple_decoder.c -/// \brief Properties decoder for simple filters -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_decoder.h" - - -extern lzma_ret -lzma_simple_props_decode(void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size) -{ - if (props_size == 0) - return LZMA_OK; - - if (props_size != 4) - return LZMA_OPTIONS_ERROR; - - lzma_options_bcj *opt = lzma_alloc( - sizeof(lzma_options_bcj), allocator); - if (opt == NULL) - return LZMA_MEM_ERROR; - - opt->start_offset = integer_read_32(props); - - // Don't leave an options structure allocated if start_offset is zero. - if (opt->start_offset == 0) - lzma_free(opt, allocator); - else - *options = opt; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_decoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_decoder.h deleted file mode 100644 index b8bf590f768..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_decoder.h +++ /dev/null @@ -1,22 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file simple_decoder.h -/// \brief Properties decoder for simple filters -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_SIMPLE_DECODER_H -#define LZMA_SIMPLE_DECODER_H - -#include "simple_coder.h" - -extern lzma_ret lzma_simple_props_decode( - void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_encoder.c deleted file mode 100644 index 1ceabd1ff96..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_encoder.c +++ /dev/null @@ -1,38 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file simple_encoder.c -/// \brief Properties encoder for simple filters -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_encoder.h" - - -extern lzma_ret -lzma_simple_props_size(uint32_t *size, const void *options) -{ - const lzma_options_bcj *const opt = options; - *size = (opt == NULL || opt->start_offset == 0) ? 0 : 4; - return LZMA_OK; -} - - -extern lzma_ret -lzma_simple_props_encode(const void *options, uint8_t *out) -{ - const lzma_options_bcj *const opt = options; - - // The default start offset is zero, so we don't need to store any - // options unless the start offset is non-zero. - if (opt == NULL || opt->start_offset == 0) - return LZMA_OK; - - integer_write_32(out, opt->start_offset); - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_encoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_encoder.h deleted file mode 100644 index 1cee4823a4e..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_encoder.h +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file simple_encoder.c -/// \brief Properties encoder for simple filters -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_SIMPLE_ENCODER_H -#define LZMA_SIMPLE_ENCODER_H - -#include "simple_coder.h" - - -extern lzma_ret lzma_simple_props_size(uint32_t *size, const void *options); - -extern lzma_ret lzma_simple_props_encode(const void *options, uint8_t *out); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_private.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_private.h deleted file mode 100644 index a69f82785fb..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/simple_private.h +++ /dev/null @@ -1,76 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file simple_private.h -/// \brief Private definitions for so called simple filters -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_SIMPLE_PRIVATE_H -#define LZMA_SIMPLE_PRIVATE_H - -#include "simple_coder.h" - - -typedef struct lzma_simple_s lzma_simple; - -struct lzma_coder_s { - /// Next filter in the chain - lzma_next_coder next; - - /// True if the next coder in the chain has returned LZMA_STREAM_END - /// or if we have processed uncompressed_size bytes. - bool end_was_reached; - - /// True if filter() should encode the data; false to decode. - /// Currently all simple filters use the same function for encoding - /// and decoding, because the difference between encoders and decoders - /// is very small. - bool is_encoder; - - /// Pointer to filter-specific function, which does - /// the actual filtering. - size_t (*filter)(lzma_simple *simple, uint32_t now_pos, - bool is_encoder, uint8_t *buffer, size_t size); - - /// Pointer to filter-specific data, or NULL if filter doesn't need - /// any extra data. - lzma_simple *simple; - - /// The lowest 32 bits of the current position in the data. Most - /// filters need this to do conversions between absolute and relative - /// addresses. - uint32_t now_pos; - - /// Size of the memory allocated for the buffer. - size_t allocated; - - /// Flushing position in the temporary buffer. buffer[pos] is the - /// next byte to be copied to out[]. - size_t pos; - - /// buffer[filtered] is the first unfiltered byte. When pos is smaller - /// than filtered, there is unflushed filtered data in the buffer. - size_t filtered; - - /// Total number of bytes (both filtered and unfiltered) currently - /// in the temporary buffer. - size_t size; - - /// Temporary buffer - uint8_t buffer[]; -}; - - -extern lzma_ret lzma_simple_coder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters, - size_t (*filter)(lzma_simple *simple, uint32_t now_pos, - bool is_encoder, uint8_t *buffer, size_t size), - size_t simple_size, size_t unfiltered_max, - uint32_t alignment, bool is_encoder); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/sparc.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/sparc.c deleted file mode 100644 index 808a59aaac7..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/sparc.c +++ /dev/null @@ -1,81 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file sparc.c -/// \brief Filter for SPARC binaries -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_private.h" - - -static size_t -sparc_code(lzma_simple *simple lzma_attribute((unused)), - uint32_t now_pos, bool is_encoder, - uint8_t *buffer, size_t size) -{ - size_t i; - for (i = 0; i + 4 <= size; i += 4) { - - if ((buffer[i] == 0x40 && (buffer[i + 1] & 0xC0) == 0x00) - || (buffer[i] == 0x7F - && (buffer[i + 1] & 0xC0) == 0xC0)) { - - uint32_t src = ((uint32_t)buffer[i + 0] << 24) - | ((uint32_t)buffer[i + 1] << 16) - | ((uint32_t)buffer[i + 2] << 8) - | ((uint32_t)buffer[i + 3]); - - src <<= 2; - - uint32_t dest; - if (is_encoder) - dest = now_pos + (uint32_t)(i) + src; - else - dest = src - (now_pos + (uint32_t)(i)); - - dest >>= 2; - - dest = (((0 - ((dest >> 22) & 1)) << 22) & 0x3FFFFFFF) - | (dest & 0x3FFFFF) - | 0x40000000; - - buffer[i + 0] = (uint8_t)(dest >> 24); - buffer[i + 1] = (uint8_t)(dest >> 16); - buffer[i + 2] = (uint8_t)(dest >> 8); - buffer[i + 3] = (uint8_t)(dest); - } - } - - return i; -} - - -static lzma_ret -sparc_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, bool is_encoder) -{ - return lzma_simple_coder_init(next, allocator, filters, - &sparc_code, 0, 4, 4, is_encoder); -} - - -extern lzma_ret -lzma_simple_sparc_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return sparc_coder_init(next, allocator, filters, true); -} - - -extern lzma_ret -lzma_simple_sparc_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return sparc_coder_init(next, allocator, filters, false); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/x86.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/x86.c deleted file mode 100644 index 5d1509bb227..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/simple/x86.c +++ /dev/null @@ -1,154 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file x86.c -/// \brief Filter for x86 binaries (BCJ filter) -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_private.h" - - -#define Test86MSByte(b) ((b) == 0 || (b) == 0xFF) - - -struct lzma_simple_s { - uint32_t prev_mask; - uint32_t prev_pos; -}; - - -static size_t -x86_code(lzma_simple *simple, uint32_t now_pos, bool is_encoder, - uint8_t *buffer, size_t size) -{ - static const bool MASK_TO_ALLOWED_STATUS[8] - = { true, true, true, false, true, false, false, false }; - - static const uint32_t MASK_TO_BIT_NUMBER[8] - = { 0, 1, 2, 2, 3, 3, 3, 3 }; - - uint32_t prev_mask = simple->prev_mask; - uint32_t prev_pos = simple->prev_pos; - - if (size < 5) - return 0; - - if (now_pos - prev_pos > 5) - prev_pos = now_pos - 5; - - const size_t limit = size - 5; - size_t buffer_pos = 0; - - while (buffer_pos <= limit) { - uint8_t b = buffer[buffer_pos]; - if (b != 0xE8 && b != 0xE9) { - ++buffer_pos; - continue; - } - - const uint32_t offset = now_pos + (uint32_t)(buffer_pos) - - prev_pos; - prev_pos = now_pos + (uint32_t)(buffer_pos); - - if (offset > 5) { - prev_mask = 0; - } else { - for (uint32_t i = 0; i < offset; ++i) { - prev_mask &= 0x77; - prev_mask <<= 1; - } - } - - b = buffer[buffer_pos + 4]; - - if (Test86MSByte(b) - && MASK_TO_ALLOWED_STATUS[(prev_mask >> 1) & 0x7] - && (prev_mask >> 1) < 0x10) { - - uint32_t src = ((uint32_t)(b) << 24) - | ((uint32_t)(buffer[buffer_pos + 3]) << 16) - | ((uint32_t)(buffer[buffer_pos + 2]) << 8) - | (buffer[buffer_pos + 1]); - - uint32_t dest; - while (true) { - if (is_encoder) - dest = src + (now_pos + (uint32_t)( - buffer_pos) + 5); - else - dest = src - (now_pos + (uint32_t)( - buffer_pos) + 5); - - if (prev_mask == 0) - break; - - const uint32_t i = MASK_TO_BIT_NUMBER[ - prev_mask >> 1]; - - b = (uint8_t)(dest >> (24 - i * 8)); - - if (!Test86MSByte(b)) - break; - - src = dest ^ ((1 << (32 - i * 8)) - 1); - } - - buffer[buffer_pos + 4] - = (uint8_t)(~(((dest >> 24) & 1) - 1)); - buffer[buffer_pos + 3] = (uint8_t)(dest >> 16); - buffer[buffer_pos + 2] = (uint8_t)(dest >> 8); - buffer[buffer_pos + 1] = (uint8_t)(dest); - buffer_pos += 5; - prev_mask = 0; - - } else { - ++buffer_pos; - prev_mask |= 1; - if (Test86MSByte(b)) - prev_mask |= 0x10; - } - } - - simple->prev_mask = prev_mask; - simple->prev_pos = prev_pos; - - return buffer_pos; -} - - -static lzma_ret -x86_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, bool is_encoder) -{ - const lzma_ret ret = lzma_simple_coder_init(next, allocator, filters, - &x86_code, sizeof(lzma_simple), 5, 1, is_encoder); - - if (ret == LZMA_OK) { - next->coder->simple->prev_mask = 0; - next->coder->simple->prev_pos = (uint32_t)(-5); - } - - return ret; -} - - -extern lzma_ret -lzma_simple_x86_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - return x86_coder_init(next, allocator, filters, true); -} - - -extern lzma_ret -lzma_simple_x86_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - return x86_coder_init(next, allocator, filters, false); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/Makefile.inc b/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/Makefile.inc deleted file mode 100644 index a4710cc5955..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/Makefile.inc +++ /dev/null @@ -1,20 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -if COND_ENCODER_SUBBLOCK -liblzma_la_SOURCES += \ - subblock/subblock_encoder.c \ - subblock/subblock_encoder.h -endif - -if COND_DECODER_SUBBLOCK -liblzma_la_SOURCES += \ - subblock/subblock_decoder.c \ - subblock/subblock_decoder.h \ - subblock/subblock_decoder_helper.c \ - subblock/subblock_decoder_helper.h -endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.c deleted file mode 100644 index e055cee3ea7..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.c +++ /dev/null @@ -1,630 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file subblock_decoder.c -/// \brief Decoder of the Subblock filter -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "subblock_decoder.h" -#include "subblock_decoder_helper.h" -#include "filter_decoder.h" - - -/// Maximum number of consecutive Subblocks with Subblock Type Padding -#define PADDING_MAX 31 - - -struct lzma_coder_s { - lzma_next_coder next; - - enum { - // These require that there is at least one input - // byte available. - SEQ_FLAGS, - SEQ_FILTER_FLAGS, - SEQ_FILTER_END, - SEQ_REPEAT_COUNT_1, - SEQ_REPEAT_COUNT_2, - SEQ_REPEAT_COUNT_3, - SEQ_REPEAT_SIZE, - SEQ_REPEAT_READ_DATA, - SEQ_SIZE_1, - SEQ_SIZE_2, - SEQ_SIZE_3, // This must be right before SEQ_DATA. - - // These don't require any input to be available. - SEQ_DATA, - SEQ_REPEAT_FAST, - SEQ_REPEAT_NORMAL, - } sequence; - - /// Number of bytes left in the current Subblock Data field. - size_t size; - - /// Number of consecutive Subblocks with Subblock Type Padding - uint32_t padding; - - /// True when .next.code() has returned LZMA_STREAM_END. - bool next_finished; - - /// True when the Subblock decoder has detected End of Payload Marker. - /// This may become true before next_finished becomes true. - bool this_finished; - - /// True if Subfilters are allowed. - bool allow_subfilters; - - /// Indicates if at least one byte of decoded output has been - /// produced after enabling Subfilter. - bool got_output_with_subfilter; - - /// Possible subfilter - lzma_next_coder subfilter; - - /// Filter Flags decoder is needed to parse the ID and Properties - /// of the subfilter. - lzma_next_coder filter_flags_decoder; - - /// The filter_flags_decoder stores its results here. - lzma_filter filter_flags; - - /// Options for the Subblock decoder helper. This is used to tell - /// the helper when it should return LZMA_STREAM_END to the subfilter. - lzma_options_subblock_helper helper; - - struct { - /// How many times buffer should be repeated - size_t count; - - /// Size of the buffer - size_t size; - - /// Position in the buffer - size_t pos; - - /// Buffer to hold the data to be repeated - uint8_t buffer[LZMA_SUBBLOCK_RLE_MAX]; - } repeat; - - /// Temporary buffer needed when the Subblock filter is not the last - /// filter in the chain. The output of the next filter is first - /// decoded into buffer[], which is then used as input for the actual - /// Subblock decoder. - struct { - size_t pos; - size_t size; - uint8_t buffer[LZMA_BUFFER_SIZE]; - } temp; -}; - - -/// Values of valid Subblock Flags -enum { - FLAG_PADDING, - FLAG_EOPM, - FLAG_DATA, - FLAG_REPEAT, - FLAG_SET_SUBFILTER, - FLAG_END_SUBFILTER, -}; - - -/// Calls the subfilter and updates coder->uncompressed_size. -static lzma_ret -subfilter_decode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - assert(coder->subfilter.code != NULL); - - // Call the subfilter. - const lzma_ret ret = coder->subfilter.code( - coder->subfilter.coder, allocator, - in, in_pos, in_size, out, out_pos, out_size, action); - - return ret; -} - - -static lzma_ret -decode_buffer(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - while (*out_pos < out_size && (*in_pos < in_size - || coder->sequence >= SEQ_DATA)) - switch (coder->sequence) { - case SEQ_FLAGS: { - // Do the correct action depending on the Subblock Type. - switch (in[*in_pos] >> 4) { - case FLAG_PADDING: - // Only check that reserved bits are zero. - if (++coder->padding > PADDING_MAX - || in[*in_pos] & 0x0F) - return LZMA_DATA_ERROR; - ++*in_pos; - break; - - case FLAG_EOPM: - // There must be no Padding before EOPM. - if (coder->padding != 0) - return LZMA_DATA_ERROR; - - // Check that reserved bits are zero. - if (in[*in_pos] & 0x0F) - return LZMA_DATA_ERROR; - - // There must be no Subfilter enabled. - if (coder->subfilter.code != NULL) - return LZMA_DATA_ERROR; - - ++*in_pos; - return LZMA_STREAM_END; - - case FLAG_DATA: - // First four bits of the Subblock Data size. - coder->size = in[*in_pos] & 0x0F; - ++*in_pos; - coder->got_output_with_subfilter = true; - coder->sequence = SEQ_SIZE_1; - break; - - case FLAG_REPEAT: - // First four bits of the Repeat Count. We use - // coder->size as a temporary place for it. - coder->size = in[*in_pos] & 0x0F; - ++*in_pos; - coder->got_output_with_subfilter = true; - coder->sequence = SEQ_REPEAT_COUNT_1; - break; - - case FLAG_SET_SUBFILTER: { - if (coder->padding != 0 || (in[*in_pos] & 0x0F) - || coder->subfilter.code != NULL - || !coder->allow_subfilters) - return LZMA_DATA_ERROR; - - assert(coder->filter_flags.options == NULL); - abort(); -// return_if_error(lzma_filter_flags_decoder_init( -// &coder->filter_flags_decoder, -// allocator, &coder->filter_flags)); - - coder->got_output_with_subfilter = false; - - ++*in_pos; - coder->sequence = SEQ_FILTER_FLAGS; - break; - } - - case FLAG_END_SUBFILTER: { - if (coder->padding != 0 || (in[*in_pos] & 0x0F) - || coder->subfilter.code == NULL - || !coder->got_output_with_subfilter) - return LZMA_DATA_ERROR; - - // Tell the helper filter to indicate End of Input - // to our subfilter. - coder->helper.end_was_reached = true; - - size_t dummy = 0; - const lzma_ret ret = subfilter_decode(coder, allocator, - NULL, &dummy, 0, out, out_pos,out_size, - action); - - // If we didn't reach the end of the subfilter's output - // yet, return to the application. On the next call we - // will get to this same switch-case again, because we - // haven't updated *in_pos yet. - if (ret != LZMA_STREAM_END) - return ret; - - // Free Subfilter's memory. This is a bit debatable, - // since we could avoid some malloc()/free() calls - // if the same Subfilter gets used soon again. But - // if Subfilter isn't used again, we could leave - // a memory-hogging filter dangling until someone - // frees Subblock filter itself. - lzma_next_end(&coder->subfilter, allocator); - - // Free memory used for subfilter options. This is - // safe, because we don't support any Subfilter that - // would allow pointers in the options structure. - lzma_free(coder->filter_flags.options, allocator); - coder->filter_flags.options = NULL; - - ++*in_pos; - - break; - } - - default: - return LZMA_DATA_ERROR; - } - - break; - } - - case SEQ_FILTER_FLAGS: { - const lzma_ret ret = coder->filter_flags_decoder.code( - coder->filter_flags_decoder.coder, allocator, - in, in_pos, in_size, NULL, NULL, 0, LZMA_RUN); - if (ret != LZMA_STREAM_END) - return ret == LZMA_OPTIONS_ERROR - ? LZMA_DATA_ERROR : ret; - - // Don't free the filter_flags_decoder. It doesn't take much - // memory and we may need it again. - - // Initialize the Subfilter. Subblock and Copy filters are - // not allowed. - if (coder->filter_flags.id == LZMA_FILTER_SUBBLOCK) - return LZMA_DATA_ERROR; - - coder->helper.end_was_reached = false; - - lzma_filter filters[3] = { - { - .id = coder->filter_flags.id, - .options = coder->filter_flags.options, - }, { - .id = LZMA_FILTER_SUBBLOCK_HELPER, - .options = &coder->helper, - }, { - .id = LZMA_VLI_UNKNOWN, - .options = NULL, - } - }; - - // Optimization: We know that LZMA uses End of Payload Marker - // (not End of Input), so we can omit the helper filter. - if (filters[0].id == LZMA_FILTER_LZMA1) - filters[1].id = LZMA_VLI_UNKNOWN; - - return_if_error(lzma_raw_decoder_init( - &coder->subfilter, allocator, filters)); - - coder->sequence = SEQ_FLAGS; - break; - } - - case SEQ_FILTER_END: - // We are in the beginning of a Subblock. The next Subblock - // whose type is not Padding, must indicate end of Subfilter. - if (in[*in_pos] == (FLAG_PADDING << 4)) { - ++*in_pos; - break; - } - - if (in[*in_pos] != (FLAG_END_SUBFILTER << 4)) - return LZMA_DATA_ERROR; - - coder->sequence = SEQ_FLAGS; - break; - - case SEQ_REPEAT_COUNT_1: - case SEQ_SIZE_1: - // We use the same code to parse - // - the Size (28 bits) in Subblocks of type Data; and - // - the Repeat count (28 bits) in Subblocks of type - // Repeating Data. - coder->size |= (size_t)(in[*in_pos]) << 4; - ++*in_pos; - ++coder->sequence; - break; - - case SEQ_REPEAT_COUNT_2: - case SEQ_SIZE_2: - coder->size |= (size_t)(in[*in_pos]) << 12; - ++*in_pos; - ++coder->sequence; - break; - - case SEQ_REPEAT_COUNT_3: - case SEQ_SIZE_3: - coder->size |= (size_t)(in[*in_pos]) << 20; - ++*in_pos; - - // The real value is the stored value plus one. - ++coder->size; - - // This moves to SEQ_REPEAT_SIZE or SEQ_DATA. That's why - // SEQ_DATA must be right after SEQ_SIZE_3 in coder->sequence. - ++coder->sequence; - break; - - case SEQ_REPEAT_SIZE: - // Move the Repeat Count to the correct variable and parse - // the Size of the Data to be repeated. - coder->repeat.count = coder->size; - coder->repeat.size = (size_t)(in[*in_pos]) + 1; - coder->repeat.pos = 0; - - // The size of the Data field must be bigger than the number - // of Padding bytes before this Subblock. - if (coder->repeat.size <= coder->padding) - return LZMA_DATA_ERROR; - - ++*in_pos; - coder->padding = 0; - coder->sequence = SEQ_REPEAT_READ_DATA; - break; - - case SEQ_REPEAT_READ_DATA: { - // Fill coder->repeat.buffer[]. - const size_t in_avail = in_size - *in_pos; - const size_t out_avail - = coder->repeat.size - coder->repeat.pos; - const size_t copy_size = MIN(in_avail, out_avail); - - memcpy(coder->repeat.buffer + coder->repeat.pos, - in + *in_pos, copy_size); - *in_pos += copy_size; - coder->repeat.pos += copy_size; - - if (coder->repeat.pos == coder->repeat.size) { - coder->repeat.pos = 0; - - if (coder->repeat.size == 1 - && coder->subfilter.code == NULL) - coder->sequence = SEQ_REPEAT_FAST; - else - coder->sequence = SEQ_REPEAT_NORMAL; - } - - break; - } - - case SEQ_DATA: { - // The size of the Data field must be bigger than the number - // of Padding bytes before this Subblock. - assert(coder->size > 0); - if (coder->size <= coder->padding) - return LZMA_DATA_ERROR; - - coder->padding = 0; - - // Limit the amount of input to match the available - // Subblock Data size. - size_t in_limit; - if (in_size - *in_pos > coder->size) - in_limit = *in_pos + coder->size; - else - in_limit = in_size; - - if (coder->subfilter.code == NULL) { - const size_t copy_size = lzma_bufcpy( - in, in_pos, in_limit, - out, out_pos, out_size); - - coder->size -= copy_size; - } else { - const size_t in_start = *in_pos; - const lzma_ret ret = subfilter_decode( - coder, allocator, - in, in_pos, in_limit, - out, out_pos, out_size, - action); - - // Update the number of unprocessed bytes left in - // this Subblock. This assert() is true because - // in_limit prevents *in_pos getting too big. - assert(*in_pos - in_start <= coder->size); - coder->size -= *in_pos - in_start; - - if (ret == LZMA_STREAM_END) { - // End of Subfilter can occur only at - // a Subblock boundary. - if (coder->size != 0) - return LZMA_DATA_ERROR; - - // We need a Subblock with Unset - // Subfilter before more data. - coder->sequence = SEQ_FILTER_END; - break; - } - - if (ret != LZMA_OK) - return ret; - } - - // If we couldn't process the whole Subblock Data yet, return. - if (coder->size > 0) - return LZMA_OK; - - coder->sequence = SEQ_FLAGS; - break; - } - - case SEQ_REPEAT_FAST: { - // Optimization for cases when there is only one byte to - // repeat and no Subfilter. - const size_t out_avail = out_size - *out_pos; - const size_t copy_size = MIN(coder->repeat.count, out_avail); - - memset(out + *out_pos, coder->repeat.buffer[0], copy_size); - - *out_pos += copy_size; - coder->repeat.count -= copy_size; - - if (coder->repeat.count != 0) - return LZMA_OK; - - coder->sequence = SEQ_FLAGS; - break; - } - - case SEQ_REPEAT_NORMAL: - do { - // Cycle the repeat buffer if needed. - if (coder->repeat.pos == coder->repeat.size) { - if (--coder->repeat.count == 0) { - coder->sequence = SEQ_FLAGS; - break; - } - - coder->repeat.pos = 0; - } - - if (coder->subfilter.code == NULL) { - lzma_bufcpy(coder->repeat.buffer, - &coder->repeat.pos, - coder->repeat.size, - out, out_pos, out_size); - } else { - const lzma_ret ret = subfilter_decode( - coder, allocator, - coder->repeat.buffer, - &coder->repeat.pos, - coder->repeat.size, - out, out_pos, out_size, - action); - - if (ret == LZMA_STREAM_END) { - // End of Subfilter can occur only at - // a Subblock boundary. - if (coder->repeat.pos - != coder->repeat.size - || --coder->repeat - .count != 0) - return LZMA_DATA_ERROR; - - // We need a Subblock with Unset - // Subfilter before more data. - coder->sequence = SEQ_FILTER_END; - break; - - } else if (ret != LZMA_OK) { - return ret; - } - } - } while (*out_pos < out_size); - - break; - - default: - return LZMA_PROG_ERROR; - } - - return LZMA_OK; -} - - -static lzma_ret -subblock_decode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - if (coder->next.code == NULL) - return decode_buffer(coder, allocator, in, in_pos, in_size, - out, out_pos, out_size, action); - - while (*out_pos < out_size) { - if (!coder->next_finished - && coder->temp.pos == coder->temp.size) { - coder->temp.pos = 0; - coder->temp.size = 0; - - const lzma_ret ret = coder->next.code( - coder->next.coder, - allocator, in, in_pos, in_size, - coder->temp.buffer, &coder->temp.size, - LZMA_BUFFER_SIZE, action); - - if (ret == LZMA_STREAM_END) - coder->next_finished = true; - else if (coder->temp.size == 0 || ret != LZMA_OK) - return ret; - } - - if (coder->this_finished) { - if (coder->temp.pos != coder->temp.size) - return LZMA_DATA_ERROR; - - if (coder->next_finished) - return LZMA_STREAM_END; - - return LZMA_OK; - } - - const lzma_ret ret = decode_buffer(coder, allocator, - coder->temp.buffer, &coder->temp.pos, - coder->temp.size, - out, out_pos, out_size, action); - - if (ret == LZMA_STREAM_END) - // The next coder in the chain hasn't finished - // yet. If the input data is valid, there - // must be no more output coming, but the - // next coder may still need a litle more - // input to detect End of Payload Marker. - coder->this_finished = true; - else if (ret != LZMA_OK) - return ret; - else if (coder->next_finished && *out_pos < out_size) - return LZMA_DATA_ERROR; - } - - return LZMA_OK; -} - - -static void -subblock_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_next_end(&coder->subfilter, allocator); - lzma_next_end(&coder->filter_flags_decoder, allocator); - lzma_free(coder->filter_flags.options, allocator); - lzma_free(coder, allocator); - return; -} - - -extern lzma_ret -lzma_subblock_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &subblock_decode; - next->end = &subblock_decoder_end; - - next->coder->next = LZMA_NEXT_CODER_INIT; - next->coder->subfilter = LZMA_NEXT_CODER_INIT; - next->coder->filter_flags_decoder = LZMA_NEXT_CODER_INIT; - - } else { - lzma_next_end(&next->coder->subfilter, allocator); - lzma_free(next->coder->filter_flags.options, allocator); - } - - next->coder->filter_flags.options = NULL; - - next->coder->sequence = SEQ_FLAGS; - next->coder->padding = 0; - next->coder->next_finished = false; - next->coder->this_finished = false; - next->coder->temp.pos = 0; - next->coder->temp.size = 0; - - if (filters[0].options != NULL) - next->coder->allow_subfilters = ((lzma_options_subblock *)( - filters[0].options))->allow_subfilters; - else - next->coder->allow_subfilters = false; - - return lzma_next_filter_init( - &next->coder->next, allocator, filters + 1); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.h deleted file mode 100644 index d1030b2b94f..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder.h +++ /dev/null @@ -1,22 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file subblock_decoder.h -/// \brief Decoder of the Subblock filter -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_SUBBLOCK_DECODER_H -#define LZMA_SUBBLOCK_DECODER_H - -#include "common.h" - - -extern lzma_ret lzma_subblock_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.c deleted file mode 100644 index 2a864eddad9..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.c +++ /dev/null @@ -1,70 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file subblock_decoder_helper.c -/// \brief Helper filter for the Subblock decoder -/// -/// This filter is used to indicate End of Input for subfilters needing it. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "subblock_decoder_helper.h" - - -struct lzma_coder_s { - const lzma_options_subblock_helper *options; -}; - - -static lzma_ret -helper_decode(lzma_coder *coder, - lzma_allocator *allocator lzma_attribute((unused)), - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, - lzma_action action lzma_attribute((unused))) -{ - // If end_was_reached is true, we cannot have any input. - assert(!coder->options->end_was_reached || *in_pos == in_size); - - // We can safely copy as much as possible, because we are never - // given more data than a single Subblock Data field. - lzma_bufcpy(in, in_pos, in_size, out, out_pos, out_size); - - // Return LZMA_STREAM_END when instructed so by the Subblock decoder. - return coder->options->end_was_reached ? LZMA_STREAM_END : LZMA_OK; -} - - -static void -helper_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_free(coder, allocator); - return; -} - - -extern lzma_ret -lzma_subblock_decoder_helper_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - // This is always the last filter in the chain. - assert(filters[1].init == NULL); - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &helper_decode; - next->end = &helper_end; - } - - next->coder->options = filters[0].options; - - return LZMA_OK; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.h deleted file mode 100644 index 18dcbb39a39..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_decoder_helper.h +++ /dev/null @@ -1,29 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file subblock_decoder_helper.h -/// \brief Helper filter for the Subblock decoder -/// -/// This filter is used to indicate End of Input for subfilters needing it. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_SUBBLOCK_DECODER_HELPER_H -#define LZMA_SUBBLOCK_DECODER_HELPER_H - -#include "common.h" - - -typedef struct { - bool end_was_reached; -} lzma_options_subblock_helper; - - -extern lzma_ret lzma_subblock_decoder_helper_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.c b/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.c deleted file mode 100644 index b46b1c29754..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.c +++ /dev/null @@ -1,984 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file subblock_encoder.c -/// \brief Encoder of the Subblock filter -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "subblock_encoder.h" -#include "filter_encoder.h" - - -/// Maximum number of repeats that a single Repeating Data can indicate. -/// This is directly from the file format specification. -#define REPEAT_COUNT_MAX (1U << 28) - -/// Number of bytes the data chunk (not including the header part) must be -/// before we care about alignment. This is somewhat arbitrary. It just -/// doesn't make sense to waste bytes for alignment when the data chunk -/// is very small. -#define MIN_CHUNK_SIZE_FOR_ALIGN 4 - -/// Number of bytes of the header part of Subblock Type `Data'. This is -/// used as the `skew' argument for subblock_align(). -#define ALIGN_SKEW_DATA 4 - -/// Like above but for Repeating Data. -#define ALIGN_SKEW_REPEATING_DATA 5 - -/// Writes one byte to output buffer and updates the alignment counter. -#define write_byte(b) \ -do { \ - assert(*out_pos < out_size); \ - out[*out_pos] = b; \ - ++*out_pos; \ - ++coder->alignment.out_pos; \ -} while (0) - - -struct lzma_coder_s { - lzma_next_coder next; - bool next_finished; - - enum { - SEQ_FILL, - SEQ_FLUSH, - SEQ_RLE_COUNT_0, - SEQ_RLE_COUNT_1, - SEQ_RLE_COUNT_2, - SEQ_RLE_COUNT_3, - SEQ_RLE_SIZE, - SEQ_RLE_DATA, - SEQ_DATA_SIZE_0, - SEQ_DATA_SIZE_1, - SEQ_DATA_SIZE_2, - SEQ_DATA_SIZE_3, - SEQ_DATA, - SEQ_SUBFILTER_INIT, - SEQ_SUBFILTER_FLAGS, - } sequence; - - /// Pointer to the options given by the application. This is used - /// for two-way communication with the application. - lzma_options_subblock *options; - - /// Position in various arrays. - size_t pos; - - /// Holds subblock.size - 1 or rle.size - 1 when encoding size - /// of Data or Repeat Count. - uint32_t tmp; - - struct { - /// This is a copy of options->alignment, or - /// LZMA_SUBBLOCK_ALIGNMENT_DEFAULT if options is NULL. - uint32_t multiple; - - /// Number of input bytes which we have processed and started - /// writing out. 32-bit integer is enough since we care only - /// about the lowest bits when fixing alignment. - uint32_t in_pos; - - /// Number of bytes written out. - uint32_t out_pos; - } alignment; - - struct { - /// Pointer to allocated buffer holding the Data field - /// of Subblock Type "Data". - uint8_t *data; - - /// Number of bytes in the buffer. - size_t size; - - /// Allocated size of the buffer. - size_t limit; - - /// Number of input bytes that we have already read but - /// not yet started writing out. This can be different - /// to `size' when using Subfilter. That's why we track - /// in_pending separately for RLE (see below). - uint32_t in_pending; - } subblock; - - struct { - /// Buffer to hold the data that may be coded with - /// Subblock Type `Repeating Data'. - uint8_t buffer[LZMA_SUBBLOCK_RLE_MAX]; - - /// Number of bytes in buffer[]. - size_t size; - - /// Number of times the first `size' bytes of buffer[] - /// will be repeated. - uint64_t count; - - /// Like subblock.in_pending above, but for RLE. - uint32_t in_pending; - } rle; - - struct { - enum { - SUB_NONE, - SUB_SET, - SUB_RUN, - SUB_FLUSH, - SUB_FINISH, - SUB_END_MARKER, - } mode; - - /// This is a copy of options->allow_subfilters. We use - /// this to verify that the application doesn't change - /// the value of allow_subfilters. - bool allow; - - /// When this is true, application is not allowed to modify - /// options->subblock_mode. We may still modify it here. - bool mode_locked; - - /// True if we have encoded at least one byte of data with - /// the Subfilter. - bool got_input; - - /// Track the amount of input available once - /// LZMA_SUBFILTER_FINISH has been enabled. - /// This is needed for sanity checking (kind - /// of duplicating what common/code.c does). - size_t in_avail; - - /// Buffer for the Filter Flags field written after - /// the `Set Subfilter' indicator. - uint8_t *flags; - - /// Size of Filter Flags field. - uint32_t flags_size; - - /// Pointers to Subfilter. - lzma_next_coder subcoder; - - } subfilter; - - /// Temporary buffer used when we are not the last filter in the chain. - struct { - size_t pos; - size_t size; - uint8_t buffer[LZMA_BUFFER_SIZE]; - } temp; -}; - - -/// \brief Aligns the output buffer -/// -/// Aligns the output buffer so that after skew bytes the output position is -/// a multiple of coder->alignment.multiple. -static bool -subblock_align(lzma_coder *coder, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, - size_t chunk_size, uint32_t skew) -{ - assert(*out_pos < out_size); - - // Fix the alignment only if it makes sense at least a little. - if (chunk_size >= MIN_CHUNK_SIZE_FOR_ALIGN) { - const uint32_t target = coder->alignment.in_pos - % coder->alignment.multiple; - - while ((coder->alignment.out_pos + skew) - % coder->alignment.multiple != target) { - // Zero indicates padding. - write_byte(0x00); - - // Check if output buffer got full and indicate it to - // the caller. - if (*out_pos == out_size) - return true; - } - } - - // Output buffer is not full. - return false; -} - - -/// \brief Checks if buffer contains repeated data -/// -/// \param needle Buffer containing a single repeat chunk -/// \param needle_size Size of needle in bytes -/// \param buf Buffer to search for repeated needles -/// \param buf_chunks Buffer size is buf_chunks * needle_size. -/// -/// \return True if the whole buf is filled with repeated needles. -/// -static bool -is_repeating(const uint8_t *restrict needle, size_t needle_size, - const uint8_t *restrict buf, size_t buf_chunks) -{ - while (buf_chunks-- != 0) { - if (memcmp(buf, needle, needle_size) != 0) - return false; - - buf += needle_size; - } - - return true; -} - - -/// \brief Optimizes the repeating style and updates coder->sequence -static void -subblock_rle_flush(lzma_coder *coder) -{ - // The Subblock decoder can use memset() when the size of the data - // being repeated is one byte, so we check if the RLE buffer is - // filled with a single repeating byte. - if (coder->rle.size > 1) { - const uint8_t b = coder->rle.buffer[0]; - size_t i = 0; - while (true) { - if (coder->rle.buffer[i] != b) - break; - - if (++i == coder->rle.size) { - // TODO Integer overflow check maybe, - // although this needs at least 2**63 bytes - // of input until it gets triggered... - coder->rle.count *= coder->rle.size; - coder->rle.size = 1; - break; - } - } - } - - if (coder->rle.count == 1) { - // The buffer should be repeated only once. It is - // waste of space to use Repeating Data. Instead, - // write a regular Data Subblock. See SEQ_RLE_COUNT_0 - // in subblock_buffer() for more info. - coder->tmp = coder->rle.size - 1; - } else if (coder->rle.count > REPEAT_COUNT_MAX) { - // There's so much to repeat that it doesn't fit into - // 28-bit integer. We will write two or more Subblocks - // of type Repeating Data. - coder->tmp = REPEAT_COUNT_MAX - 1; - } else { - coder->tmp = coder->rle.count - 1; - } - - coder->sequence = SEQ_RLE_COUNT_0; - - return; -} - - -/// \brief Resizes coder->subblock.data for a new size limit -static lzma_ret -subblock_data_size(lzma_coder *coder, lzma_allocator *allocator, - size_t new_limit) -{ - // Verify that the new limit is valid. - if (new_limit < LZMA_SUBBLOCK_DATA_SIZE_MIN - || new_limit > LZMA_SUBBLOCK_DATA_SIZE_MAX) - return LZMA_OPTIONS_ERROR; - - // Ff the new limit is different than the previous one, we need - // to reallocate the data buffer. - if (new_limit != coder->subblock.limit) { - lzma_free(coder->subblock.data, allocator); - coder->subblock.data = lzma_alloc(new_limit, allocator); - if (coder->subblock.data == NULL) - return LZMA_MEM_ERROR; - } - - coder->subblock.limit = new_limit; - - return LZMA_OK; -} - - -static lzma_ret -subblock_buffer(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - // Changing allow_subfilter is not allowed. - if (coder->options != NULL && coder->subfilter.allow - != coder->options->allow_subfilters) - return LZMA_PROG_ERROR; - - // Check if we need to do something special with the Subfilter. - if (coder->subfilter.allow) { - assert(coder->options != NULL); - - // See if subfilter_mode has been changed. - switch (coder->options->subfilter_mode) { - case LZMA_SUBFILTER_NONE: - if (coder->subfilter.mode != SUB_NONE) - return LZMA_PROG_ERROR; - break; - - case LZMA_SUBFILTER_SET: - if (coder->subfilter.mode_locked - || coder->subfilter.mode != SUB_NONE) - return LZMA_PROG_ERROR; - - coder->subfilter.mode = SUB_SET; - coder->subfilter.got_input = false; - - if (coder->sequence == SEQ_FILL) - coder->sequence = SEQ_FLUSH; - - break; - - case LZMA_SUBFILTER_RUN: - if (coder->subfilter.mode != SUB_RUN) - return LZMA_PROG_ERROR; - - break; - - case LZMA_SUBFILTER_FINISH: { - const size_t in_avail = in_size - *in_pos; - - if (coder->subfilter.mode == SUB_RUN) { - if (coder->subfilter.mode_locked) - return LZMA_PROG_ERROR; - - coder->subfilter.mode = SUB_FINISH; - coder->subfilter.in_avail = in_avail; - - } else if (coder->subfilter.mode != SUB_FINISH - || coder->subfilter.in_avail - != in_avail) { - return LZMA_PROG_ERROR; - } - - break; - } - - default: - return LZMA_OPTIONS_ERROR; - } - - // If we are sync-flushing or finishing, the application may - // no longer change subfilter_mode. Note that this check is - // done after checking the new subfilter_mode above; this - // way the application may e.g. set LZMA_SUBFILTER_SET and - // LZMA_SYNC_FLUSH at the same time, but it cannot modify - // subfilter_mode on the later lzma_code() calls before - // we have returned LZMA_STREAM_END. - if (action != LZMA_RUN) - coder->subfilter.mode_locked = true; - } - - // Main loop - while (*out_pos < out_size) - switch (coder->sequence) { - case SEQ_FILL: - // Grab the new Subblock Data Size and reallocate the buffer. - if (coder->subblock.size == 0 && coder->options != NULL - && coder->options->subblock_data_size - != coder->subblock.limit) - return_if_error(subblock_data_size(coder, - allocator, coder->options - ->subblock_data_size)); - - if (coder->subfilter.mode == SUB_NONE) { - assert(coder->subfilter.subcoder.code == NULL); - - // No Subfilter is enabled, just copy the data as is. - coder->subblock.in_pending += lzma_bufcpy( - in, in_pos, in_size, - coder->subblock.data, - &coder->subblock.size, - coder->subblock.limit); - - // If we ran out of input before the whole buffer - // was filled, return to application. - if (coder->subblock.size < coder->subblock.limit - && action == LZMA_RUN) - return LZMA_OK; - - } else { - assert(coder->options->subfilter_mode - != LZMA_SUBFILTER_SET); - - // Using LZMA_FINISH automatically toggles - // LZMA_SUBFILTER_FINISH. - // - // NOTE: It is possible that application had set - // LZMA_SUBFILTER_SET and LZMA_FINISH at the same - // time. In that case it is possible that we will - // cycle to LZMA_SUBFILTER_RUN, LZMA_SUBFILTER_FINISH, - // and back to LZMA_SUBFILTER_NONE in a single - // Subblock encoder function call. - if (action == LZMA_FINISH) { - coder->options->subfilter_mode - = LZMA_SUBFILTER_FINISH; - coder->subfilter.mode = SUB_FINISH; - } - - const size_t in_start = *in_pos; - - const lzma_ret ret = coder->subfilter.subcoder.code( - coder->subfilter.subcoder.coder, - allocator, in, in_pos, in_size, - coder->subblock.data, - &coder->subblock.size, - coder->subblock.limit, - coder->subfilter.mode == SUB_FINISH - ? LZMA_FINISH : action); - - const size_t in_used = *in_pos - in_start; - coder->subblock.in_pending += in_used; - if (in_used > 0) - coder->subfilter.got_input = true; - - coder->subfilter.in_avail = in_size - *in_pos; - - if (ret == LZMA_STREAM_END) { - // All currently available input must have - // been processed. - assert(*in_pos == in_size); - - // Flush now. Even if coder->subblock.size - // happened to be zero, we still need to go - // to SEQ_FLUSH to possibly finish RLE or - // write the Subfilter Unset indicator. - coder->sequence = SEQ_FLUSH; - - if (coder->subfilter.mode == SUB_RUN) { - // Flushing with Subfilter enabled. - assert(action == LZMA_SYNC_FLUSH); - coder->subfilter.mode = SUB_FLUSH; - break; - } - - // Subfilter finished its job. - assert(coder->subfilter.mode == SUB_FINISH - || action == LZMA_FINISH); - - // At least one byte of input must have been - // encoded with the Subfilter. This is - // required by the file format specification. - if (!coder->subfilter.got_input) - return LZMA_PROG_ERROR; - - // We don't strictly need to do this, but - // doing it sounds like a good idea, because - // otherwise the Subfilter's memory could be - // left allocated for long time, and would - // just waste memory. - lzma_next_end(&coder->subfilter.subcoder, - allocator); - - // We need to flush the currently buffered - // data and write Unset Subfilter marker. - // Note that we cannot set - // coder->options->subfilter_mode to - // LZMA_SUBFILTER_NONE yet, because we - // haven't written the Unset Subfilter - // marker yet. - coder->subfilter.mode = SUB_END_MARKER; - coder->sequence = SEQ_FLUSH; - break; - } - - // Return if we couldn't fill the buffer or - // if an error occurred. - if (coder->subblock.size < coder->subblock.limit - || ret != LZMA_OK) - return ret; - } - - coder->sequence = SEQ_FLUSH; - - // SEQ_FILL doesn't produce any output so falling through - // to SEQ_FLUSH is safe. - assert(*out_pos < out_size); - - // Fall through - - case SEQ_FLUSH: - if (coder->options != NULL) { - // Update the alignment variable. - coder->alignment.multiple = coder->options->alignment; - if (coder->alignment.multiple - < LZMA_SUBBLOCK_ALIGNMENT_MIN - || coder->alignment.multiple - > LZMA_SUBBLOCK_ALIGNMENT_MAX) - return LZMA_OPTIONS_ERROR; - - // Run-length encoder - // - // First check if there is some data pending and we - // have an obvious need to flush it immediatelly. - if (coder->rle.count > 0 - && (coder->rle.size - != coder->options->rle - || coder->subblock.size - % coder->rle.size)) { - subblock_rle_flush(coder); - break; - } - - // Grab the (possibly new) RLE chunk size and - // validate it. - coder->rle.size = coder->options->rle; - if (coder->rle.size > LZMA_SUBBLOCK_RLE_MAX) - return LZMA_OPTIONS_ERROR; - - if (coder->subblock.size != 0 - && coder->rle.size - != LZMA_SUBBLOCK_RLE_OFF - && coder->subblock.size - % coder->rle.size == 0) { - - // Initialize coder->rle.buffer if we don't - // have RLE already running. - if (coder->rle.count == 0) - memcpy(coder->rle.buffer, - coder->subblock.data, - coder->rle.size); - - // Test if coder->subblock.data is repeating. - // If coder->rle.count would overflow, we - // force flushing. Forced flushing shouldn't - // really happen in real-world situations. - const size_t count = coder->subblock.size - / coder->rle.size; - if (UINT64_MAX - count > coder->rle.count - && is_repeating( - coder->rle.buffer, - coder->rle.size, - coder->subblock.data, - count)) { - coder->rle.count += count; - coder->rle.in_pending += coder - ->subblock.in_pending; - coder->subblock.in_pending = 0; - coder->subblock.size = 0; - - } else if (coder->rle.count > 0) { - // It's not repeating or at least not - // with the same byte sequence as the - // earlier Subblock Data buffers. We - // have some data pending in the RLE - // buffer already, so do a flush. - // Once flushed, we will check again - // if the Subblock Data happens to - // contain a different repeating - // sequence. - subblock_rle_flush(coder); - break; - } - } - } - - // If we now have some data left in coder->subblock, the RLE - // buffer is empty and we must write a regular Subblock Data. - if (coder->subblock.size > 0) { - assert(coder->rle.count == 0); - coder->tmp = coder->subblock.size - 1; - coder->sequence = SEQ_DATA_SIZE_0; - break; - } - - // Check if we should enable Subfilter. - if (coder->subfilter.mode == SUB_SET) { - if (coder->rle.count > 0) - subblock_rle_flush(coder); - else - coder->sequence = SEQ_SUBFILTER_INIT; - break; - } - - // Check if we have just finished Subfiltering. - if (coder->subfilter.mode == SUB_END_MARKER) { - if (coder->rle.count > 0) { - subblock_rle_flush(coder); - break; - } - - coder->options->subfilter_mode = LZMA_SUBFILTER_NONE; - coder->subfilter.mode = SUB_NONE; - - write_byte(0x50); - if (*out_pos == out_size) - return LZMA_OK; - } - - // Check if we have already written everything. - if (action != LZMA_RUN && *in_pos == in_size - && (coder->subfilter.mode == SUB_NONE - || coder->subfilter.mode == SUB_FLUSH)) { - if (coder->rle.count > 0) { - subblock_rle_flush(coder); - break; - } - - if (action == LZMA_SYNC_FLUSH) { - if (coder->subfilter.mode == SUB_FLUSH) - coder->subfilter.mode = SUB_RUN; - - coder->subfilter.mode_locked = false; - coder->sequence = SEQ_FILL; - - } else { - assert(action == LZMA_FINISH); - - // Write EOPM. - // NOTE: No need to use write_byte() here - // since we are finishing. - out[*out_pos] = 0x10; - ++*out_pos; - } - - return LZMA_STREAM_END; - } - - // Otherwise we have more work to do. - coder->sequence = SEQ_FILL; - break; - - case SEQ_RLE_COUNT_0: - assert(coder->rle.count > 0); - - if (coder->rle.count == 1) { - // The buffer should be repeated only once. Fix - // the alignment and write the first byte of - // Subblock Type `Data'. - if (subblock_align(coder, out, out_pos, out_size, - coder->rle.size, ALIGN_SKEW_DATA)) - return LZMA_OK; - - write_byte(0x20 | (coder->tmp & 0x0F)); - - } else { - // We have something to actually repeat, which should - // mean that it takes less space with run-length - // encoding. - if (subblock_align(coder, out, out_pos, out_size, - coder->rle.size, - ALIGN_SKEW_REPEATING_DATA)) - return LZMA_OK; - - write_byte(0x30 | (coder->tmp & 0x0F)); - } - - // NOTE: If we have to write more than one Repeating Data - // due to rle.count > REPEAT_COUNT_MAX, the subsequent - // Repeating Data Subblocks may get wrong alignment, because - // we add rle.in_pending to alignment.in_pos at once instead - // of adding only as much as this particular Repeating Data - // consumed input data. Correct alignment is always restored - // after all the required Repeating Data Subblocks have been - // written. This problem occurs in such a weird cases that - // it's not worth fixing. - coder->alignment.out_pos += coder->rle.size; - coder->alignment.in_pos += coder->rle.in_pending; - coder->rle.in_pending = 0; - - coder->sequence = SEQ_RLE_COUNT_1; - break; - - case SEQ_RLE_COUNT_1: - write_byte(coder->tmp >> 4); - coder->sequence = SEQ_RLE_COUNT_2; - break; - - case SEQ_RLE_COUNT_2: - write_byte(coder->tmp >> 12); - coder->sequence = SEQ_RLE_COUNT_3; - break; - - case SEQ_RLE_COUNT_3: - write_byte(coder->tmp >> 20); - - // Again, see if we are writing regular Data or Repeating Data. - // In the former case, we skip SEQ_RLE_SIZE. - if (coder->rle.count == 1) - coder->sequence = SEQ_RLE_DATA; - else - coder->sequence = SEQ_RLE_SIZE; - - if (coder->rle.count > REPEAT_COUNT_MAX) - coder->rle.count -= REPEAT_COUNT_MAX; - else - coder->rle.count = 0; - - break; - - case SEQ_RLE_SIZE: - assert(coder->rle.size >= LZMA_SUBBLOCK_RLE_MIN); - assert(coder->rle.size <= LZMA_SUBBLOCK_RLE_MAX); - write_byte(coder->rle.size - 1); - coder->sequence = SEQ_RLE_DATA; - break; - - case SEQ_RLE_DATA: - lzma_bufcpy(coder->rle.buffer, &coder->pos, coder->rle.size, - out, out_pos, out_size); - if (coder->pos < coder->rle.size) - return LZMA_OK; - - coder->pos = 0; - coder->sequence = SEQ_FLUSH; - break; - - case SEQ_DATA_SIZE_0: - // We need four bytes for the Size field. - if (subblock_align(coder, out, out_pos, out_size, - coder->subblock.size, ALIGN_SKEW_DATA)) - return LZMA_OK; - - coder->alignment.out_pos += coder->subblock.size; - coder->alignment.in_pos += coder->subblock.in_pending; - coder->subblock.in_pending = 0; - - write_byte(0x20 | (coder->tmp & 0x0F)); - coder->sequence = SEQ_DATA_SIZE_1; - break; - - case SEQ_DATA_SIZE_1: - write_byte(coder->tmp >> 4); - coder->sequence = SEQ_DATA_SIZE_2; - break; - - case SEQ_DATA_SIZE_2: - write_byte(coder->tmp >> 12); - coder->sequence = SEQ_DATA_SIZE_3; - break; - - case SEQ_DATA_SIZE_3: - write_byte(coder->tmp >> 20); - coder->sequence = SEQ_DATA; - break; - - case SEQ_DATA: - lzma_bufcpy(coder->subblock.data, &coder->pos, - coder->subblock.size, out, out_pos, out_size); - if (coder->pos < coder->subblock.size) - return LZMA_OK; - - coder->subblock.size = 0; - coder->pos = 0; - coder->sequence = SEQ_FLUSH; - break; - - case SEQ_SUBFILTER_INIT: { - assert(coder->subblock.size == 0); - assert(coder->subblock.in_pending == 0); - assert(coder->rle.count == 0); - assert(coder->rle.in_pending == 0); - assert(coder->subfilter.mode == SUB_SET); - assert(coder->options != NULL); - - // There must be a filter specified. - if (coder->options->subfilter_options.id == LZMA_VLI_UNKNOWN) - return LZMA_OPTIONS_ERROR; - - // Initialize a raw encoder to work as a Subfilter. - lzma_filter options[2]; - options[0] = coder->options->subfilter_options; - options[1].id = LZMA_VLI_UNKNOWN; - - return_if_error(lzma_raw_encoder_init( - &coder->subfilter.subcoder, allocator, - options)); - - // Encode the Filter Flags field into a buffer. This should - // never fail since we have already successfully initialized - // the Subfilter itself. Check it still, and return - // LZMA_PROG_ERROR instead of whatever the ret would say. - lzma_ret ret = lzma_filter_flags_size( - &coder->subfilter.flags_size, options); - assert(ret == LZMA_OK); - if (ret != LZMA_OK) - return LZMA_PROG_ERROR; - - coder->subfilter.flags = lzma_alloc( - coder->subfilter.flags_size, allocator); - if (coder->subfilter.flags == NULL) - return LZMA_MEM_ERROR; - - // Now we have a big-enough buffer. Encode the Filter Flags. - // Like above, this should never fail. - size_t dummy = 0; - ret = lzma_filter_flags_encode(options, coder->subfilter.flags, - &dummy, coder->subfilter.flags_size); - assert(ret == LZMA_OK); - assert(dummy == coder->subfilter.flags_size); - if (ret != LZMA_OK || dummy != coder->subfilter.flags_size) - return LZMA_PROG_ERROR; - - // Write a Subblock indicating a new Subfilter. - write_byte(0x40); - - coder->options->subfilter_mode = LZMA_SUBFILTER_RUN; - coder->subfilter.mode = SUB_RUN; - coder->alignment.out_pos += coder->subfilter.flags_size; - coder->sequence = SEQ_SUBFILTER_FLAGS; - - // It is safe to fall through because SEQ_SUBFILTER_FLAGS - // uses lzma_bufcpy() which doesn't write unless there is - // output space. - } - - // Fall through - - case SEQ_SUBFILTER_FLAGS: - // Copy the Filter Flags to the output stream. - lzma_bufcpy(coder->subfilter.flags, &coder->pos, - coder->subfilter.flags_size, - out, out_pos, out_size); - if (coder->pos < coder->subfilter.flags_size) - return LZMA_OK; - - lzma_free(coder->subfilter.flags, allocator); - coder->subfilter.flags = NULL; - - coder->pos = 0; - coder->sequence = SEQ_FILL; - break; - - default: - return LZMA_PROG_ERROR; - } - - return LZMA_OK; -} - - -static lzma_ret -subblock_encode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - if (coder->next.code == NULL) - return subblock_buffer(coder, allocator, in, in_pos, in_size, - out, out_pos, out_size, action); - - while (*out_pos < out_size - && (*in_pos < in_size || action != LZMA_RUN)) { - if (!coder->next_finished - && coder->temp.pos == coder->temp.size) { - coder->temp.pos = 0; - coder->temp.size = 0; - - const lzma_ret ret = coder->next.code(coder->next.coder, - allocator, in, in_pos, in_size, - coder->temp.buffer, &coder->temp.size, - LZMA_BUFFER_SIZE, action); - if (ret == LZMA_STREAM_END) { - assert(action != LZMA_RUN); - coder->next_finished = true; - } else if (coder->temp.size == 0 || ret != LZMA_OK) { - return ret; - } - } - - const lzma_ret ret = subblock_buffer(coder, allocator, - coder->temp.buffer, &coder->temp.pos, - coder->temp.size, out, out_pos, out_size, - coder->next_finished ? LZMA_FINISH : LZMA_RUN); - if (ret == LZMA_STREAM_END) { - assert(action != LZMA_RUN); - assert(coder->next_finished); - return LZMA_STREAM_END; - } - - if (ret != LZMA_OK) - return ret; - } - - return LZMA_OK; -} - - -static void -subblock_encoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_next_end(&coder->subfilter.subcoder, allocator); - lzma_free(coder->subblock.data, allocator); - lzma_free(coder->subfilter.flags, allocator); - lzma_free(coder, allocator); - return; -} - - -extern lzma_ret -lzma_subblock_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &subblock_encode; - next->end = &subblock_encoder_end; - - next->coder->next = LZMA_NEXT_CODER_INIT; - next->coder->subblock.data = NULL; - next->coder->subblock.limit = 0; - next->coder->subfilter.subcoder = LZMA_NEXT_CODER_INIT; - } else { - lzma_next_end(&next->coder->subfilter.subcoder, - allocator); - lzma_free(next->coder->subfilter.flags, allocator); - } - - next->coder->subfilter.flags = NULL; - - next->coder->next_finished = false; - next->coder->sequence = SEQ_FILL; - next->coder->options = filters[0].options; - next->coder->pos = 0; - - next->coder->alignment.in_pos = 0; - next->coder->alignment.out_pos = 0; - next->coder->subblock.size = 0; - next->coder->subblock.in_pending = 0; - next->coder->rle.count = 0; - next->coder->rle.in_pending = 0; - next->coder->subfilter.mode = SUB_NONE; - next->coder->subfilter.mode_locked = false; - - next->coder->temp.pos = 0; - next->coder->temp.size = 0; - - // Grab some values from the options structure if it is available. - size_t subblock_size_limit; - if (next->coder->options != NULL) { - if (next->coder->options->alignment - < LZMA_SUBBLOCK_ALIGNMENT_MIN - || next->coder->options->alignment - > LZMA_SUBBLOCK_ALIGNMENT_MAX) { - subblock_encoder_end(next->coder, allocator); - return LZMA_OPTIONS_ERROR; - } - next->coder->alignment.multiple - = next->coder->options->alignment; - next->coder->subfilter.allow - = next->coder->options->allow_subfilters; - subblock_size_limit = next->coder->options->subblock_data_size; - } else { - next->coder->alignment.multiple - = LZMA_SUBBLOCK_ALIGNMENT_DEFAULT; - next->coder->subfilter.allow = false; - subblock_size_limit = LZMA_SUBBLOCK_DATA_SIZE_DEFAULT; - } - - return_if_error(subblock_data_size(next->coder, allocator, - subblock_size_limit)); - - return lzma_next_filter_init( - &next->coder->next, allocator, filters + 1); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.h b/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.h deleted file mode 100644 index ddbfe64bce8..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/liblzma/subblock/subblock_encoder.h +++ /dev/null @@ -1,21 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file subblock_encoder.h -/// \brief Encoder of the Subblock filter -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_SUBBLOCK_ENCODER_H -#define LZMA_SUBBLOCK_ENCODER_H - -#include "common.h" - -extern lzma_ret lzma_subblock_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/lzmainfo/Makefile.am b/Build/source/utils/xz-4.999.9beta/src/lzmainfo/Makefile.am deleted file mode 100644 index 22295eea339..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/lzmainfo/Makefile.am +++ /dev/null @@ -1,29 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -bin_PROGRAMS = lzmainfo - -lzmainfo_SOURCES = lzmainfo.c - -lzmainfo_CPPFLAGS = \ - -DLOCALEDIR=\"$(localedir)\" \ - -I$(top_srcdir)/src/common \ - -I$(top_srcdir)/src/liblzma/api \ - -I$(top_builddir)/lib \ - $(DYNAMIC_CPPFLAGS) - -lzmainfo_LDFLAGS = $(DYNAMIC_LDFLAGS) -lzmainfo_LDADD = $(top_builddir)/src/liblzma/liblzma.la - -if COND_GNULIB -lzmainfo_LDADD += $(top_builddir)/lib/libgnu.a -endif - -lzmainfo_LDADD += $(LTLIBINTL) - - -dist_man_MANS = lzmainfo.1 diff --git a/Build/source/utils/xz-4.999.9beta/src/lzmainfo/Makefile.in b/Build/source/utils/xz-4.999.9beta/src/lzmainfo/Makefile.in deleted file mode 100644 index 81c698fd86f..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/lzmainfo/Makefile.in +++ /dev/null @@ -1,659 +0,0 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ -bin_PROGRAMS = lzmainfo$(EXEEXT) -@COND_GNULIB_TRUE@am__append_1 = $(top_builddir)/lib/libgnu.a -subdir = src/lzmainfo -DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ - $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ - $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ - $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ - $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" -PROGRAMS = $(bin_PROGRAMS) -am_lzmainfo_OBJECTS = lzmainfo-lzmainfo.$(OBJEXT) -lzmainfo_OBJECTS = $(am_lzmainfo_OBJECTS) -am__DEPENDENCIES_1 = -lzmainfo_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ - $(am__append_1) $(am__DEPENDENCIES_1) -lzmainfo_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(lzmainfo_LDFLAGS) \ - $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(lzmainfo_SOURCES) -DIST_SOURCES = $(lzmainfo_SOURCES) -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' -man1dir = $(mandir)/man1 -NROFF = nroff -MANS = $(dist_man_MANS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ -DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GETOPT_H = @GETOPT_H@ -GMSGFMT = @GMSGFMT@ -GMSGFMT_015 = @GMSGFMT_015@ -GREP = @GREP@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTLLIBS = @INTLLIBS@ -INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBICONV = @LIBICONV@ -LIBINTL = @LIBINTL@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBINTL = @LTLIBINTL@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -MSGFMT = @MSGFMT@ -MSGFMT_015 = @MSGFMT_015@ -MSGMERGE = @MSGMERGE@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POSIX_SHELL = @POSIX_SHELL@ -POSUB = @POSUB@ -PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -RC = @RC@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ -STATIC_LDFLAGS = @STATIC_LDFLAGS@ -STRIP = @STRIP@ -USE_NLS = @USE_NLS@ -VERSION = @VERSION@ -XGETTEXT = @XGETTEXT@ -XGETTEXT_015 = @XGETTEXT_015@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -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@ -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@ -lt_ECHO = @lt_ECHO@ -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@ -xz = @xz@ -lzmainfo_SOURCES = lzmainfo.c -lzmainfo_CPPFLAGS = \ - -DLOCALEDIR=\"$(localedir)\" \ - -I$(top_srcdir)/src/common \ - -I$(top_srcdir)/src/liblzma/api \ - -I$(top_builddir)/lib \ - $(DYNAMIC_CPPFLAGS) - -lzmainfo_LDFLAGS = $(DYNAMIC_LDFLAGS) -lzmainfo_LDADD = $(top_builddir)/src/liblzma/liblzma.la \ - $(am__append_1) $(LTLIBINTL) -dist_man_MANS = lzmainfo.1 -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/lzmainfo/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/lzmainfo/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p || test -f $$p1; \ - then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - @list='$(bin_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 -lzmainfo$(EXEEXT): $(lzmainfo_OBJECTS) $(lzmainfo_DEPENDENCIES) - @rm -f lzmainfo$(EXEEXT) - $(lzmainfo_LINK) $(lzmainfo_OBJECTS) $(lzmainfo_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lzmainfo-lzmainfo.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -lzmainfo-lzmainfo.o: lzmainfo.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmainfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lzmainfo-lzmainfo.o -MD -MP -MF $(DEPDIR)/lzmainfo-lzmainfo.Tpo -c -o lzmainfo-lzmainfo.o `test -f 'lzmainfo.c' || echo '$(srcdir)/'`lzmainfo.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lzmainfo-lzmainfo.Tpo $(DEPDIR)/lzmainfo-lzmainfo.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzmainfo.c' object='lzmainfo-lzmainfo.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmainfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lzmainfo-lzmainfo.o `test -f 'lzmainfo.c' || echo '$(srcdir)/'`lzmainfo.c - -lzmainfo-lzmainfo.obj: lzmainfo.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmainfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lzmainfo-lzmainfo.obj -MD -MP -MF $(DEPDIR)/lzmainfo-lzmainfo.Tpo -c -o lzmainfo-lzmainfo.obj `if test -f 'lzmainfo.c'; then $(CYGPATH_W) 'lzmainfo.c'; else $(CYGPATH_W) '$(srcdir)/lzmainfo.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lzmainfo-lzmainfo.Tpo $(DEPDIR)/lzmainfo-lzmainfo.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lzmainfo.c' object='lzmainfo-lzmainfo.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmainfo_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lzmainfo-lzmainfo.obj `if test -f 'lzmainfo.c'; then $(CYGPATH_W) 'lzmainfo.c'; else $(CYGPATH_W) '$(srcdir)/lzmainfo.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-man1: $(dist_man_MANS) - @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" - @list=''; test -n "$(man1dir)" || exit 0; \ - { for i in $$list; do echo "$$i"; done; \ - l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.1[a-z]*$$/p'; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ - done; } - -uninstall-man1: - @$(NORMAL_UNINSTALL) - @list=''; test -n "$(man1dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.1[a-z]*$$/p'; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - test -z "$$files" || { \ - echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } - -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) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - 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; }; }'`; \ - 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) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - 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; }; }'`; \ - 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 - -distdir: $(DISTFILES) - @list='$(MANS)'; if test -n "$$list"; then \ - list=`for p in $$list; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ - if test -n "$$list" && \ - grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ - echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ - grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ - echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ - echo " typically \`make maintainer-clean' will remove them" >&2; \ - exit 1; \ - else :; fi; \ - else :; fi - @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 -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) $(MANS) -installdirs: - for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; 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: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -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-binPROGRAMS clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-man - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-binPROGRAMS - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: install-man1 - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -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-binPROGRAMS uninstall-man - -uninstall-man: uninstall-man1 - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ - clean-generic clean-libtool ctags distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-man1 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-binPROGRAMS uninstall-man \ - uninstall-man1 - - -# 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/Build/source/utils/xz-4.999.9beta/src/lzmainfo/lzmainfo.1 b/Build/source/utils/xz-4.999.9beta/src/lzmainfo/lzmainfo.1 deleted file mode 100644 index ef736a6c662..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/lzmainfo/lzmainfo.1 +++ /dev/null @@ -1,55 +0,0 @@ -.\" -.\" Author: Lasse Collin -.\" -.\" This file has been put into the public domain. -.\" You can do whatever you want with this file. -.\" -.TH LZMAINFO 1 "2009-08-13" "Tukaani" "XZ Utils" -.SH NAME -lzmainfo \- show infomation stored in the .lzma file header -.SH SYNOPSIS -.B lzmainfo -.RB [ \-\-help ] -.RB [ \-\-version ] -.RI [ file ]... -.SH DESCRIPTION -.B lzmainfo -shows information stored in the -.B .lzma -file header. It reads the first 13 bytes from the specified -.IR file , -decodes the header, and prints it to standard output in human -readable format. If no -.I files -are given or -.I file -is -.BR \- , -standard input is read. -.PP -Usually the most interesting information is the uncompressed size and -the dictionary size. Uncompressed size can be shown only if the file is -in the non-streamed -.B .lzma -format variant. The amount of memory required to decompress the file is -a few dozen kilobytes plus the dictionary size. -.PP -.B lzmainfo -is included in XZ Utils primarily for backward compatibility with LZMA Utils. -.SH EXIT STATUS -.TP -.B 0 -All is good. -.TP -.B 1 -An error occurred. -.SH BUGS -.B lzmainfo -uses -.B MB -while the correct suffix would be -.B MiB -(2^20 bytes). -This is to keep the output compatible with LZMA Utils. -.SH SEE ALSO -.BR xz (1) diff --git a/Build/source/utils/xz-4.999.9beta/src/lzmainfo/lzmainfo.c b/Build/source/utils/xz-4.999.9beta/src/lzmainfo/lzmainfo.c deleted file mode 100644 index d9ae311afec..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/lzmainfo/lzmainfo.c +++ /dev/null @@ -1,242 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzmainfo.c -/// \brief lzmainfo tool for compatibility with LZMA Utils -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "sysdefs.h" -#include -#include - -#ifdef ENABLE_NLS -# include -# define _(msgid) gettext(msgid) -#else -# define _(msgid) msgid -#endif - -#include "lzma.h" -#include "getopt.h" - - -/// Name of the program from argv[0] -static const char *argv0; - - -/// Close stdout unless we are already going to exit with EXIT_FAILURE. -/// If closing stdout fails, set exit status to EXIT_FAILURE and print -/// an error message to stderr. We don't care about closing stderr, -/// because we don't print anything to stderr unless we are going to -/// use EXIT_FAILURE anyway. -static void lzma_attribute((noreturn)) -my_exit(int status) -{ - if (status != EXIT_FAILURE) { - const int ferror_err = ferror(stdout); - const int fclose_err = fclose(stdout); - - if (ferror_err || fclose_err) { - // If it was fclose() that failed, we have the reason - // in errno. If only ferror() indicated an error, - // we have no idea what the reason was. - fprintf(stderr, "%s: %s: %s\n", argv0, - _("Writing to standard output " - "failed"), - fclose_err ? strerror(errno) - : _("Unknown error")); - status = EXIT_FAILURE; - } - } - - exit(status); -} - - -static void lzma_attribute((noreturn)) -help(void) -{ - printf( -_("Usage: %s [--help] [--version] [FILE]...\n" -"Show information stored in the .lzma file header"), argv0); - - printf(_( -"\nWith no FILE, or when FILE is -, read standard input.\n")); - printf("\n"); - - printf(_("Report bugs to <%s> (in English or Finnish).\n"), - PACKAGE_BUGREPORT); - printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_HOMEPAGE); - - my_exit(EXIT_SUCCESS); -} - - -static void lzma_attribute((noreturn)) -version(void) -{ - puts("lzmainfo (" PACKAGE_NAME ") " PACKAGE_VERSION); - my_exit(EXIT_SUCCESS); -} - - -/// Parse command line options. -static void -parse_args(int argc, char **argv) -{ - enum { - OPT_HELP, - OPT_VERSION, - }; - - static const struct option long_opts[] = { - { "help", no_argument, NULL, OPT_HELP }, - { "version", no_argument, NULL, OPT_VERSION }, - { NULL, 0, NULL, 0 } - }; - - int c; - while ((c = getopt_long(argc, argv, "", long_opts, NULL)) != -1) { - switch (c) { - case OPT_HELP: - help(); - - case OPT_VERSION: - version(); - - default: - exit(EXIT_FAILURE); - } - } - - return; -} - - -/// Primitive base-2 logarithm for integers -static uint32_t -my_log2(uint32_t n) -{ - uint32_t e; - for (e = 0; n > 1; ++e, n /= 2) ; - return e; -} - - -/// Parse the .lzma header and display information about it. -static bool -lzmainfo(const char *name, FILE *f) -{ - uint8_t buf[13]; - const size_t size = fread(buf, 1, sizeof(buf), f); - if (size != 13) { - fprintf(stderr, "%s: %s: %s\n", argv0, name, - ferror(f) ? strerror(errno) - : _("File is too small to be a .lzma file")); - return true; - } - - lzma_filter filter = { .id = LZMA_FILTER_LZMA1 }; - - // Parse the first five bytes. - switch (lzma_properties_decode(&filter, NULL, buf, 5)) { - case LZMA_OK: - break; - - case LZMA_OPTIONS_ERROR: - fprintf(stderr, "%s: %s: %s\n", argv0, name, - _("Not a .lzma file")); - return true; - - case LZMA_MEM_ERROR: - fprintf(stderr, "%s: %s\n", argv0, strerror(ENOMEM)); - exit(EXIT_FAILURE); - - default: - fprintf(stderr, "%s: %s\n", argv0, _("Internal error (bug)")); - exit(EXIT_FAILURE); - } - - // Uncompressed size - uint64_t uncompressed_size = 0; - for (size_t i = 0; i < 8; ++i) - uncompressed_size |= (uint64_t)(buf[5 + i]) << (i * 8); - - // Display the results. We don't want to translate these and also - // will use MB instead of MiB, because someone could be parsing - // this output and we don't want to break that when people move - // from LZMA Utils to XZ Utils. - if (f != stdin) - printf("%s\n", name); - - printf("Uncompressed size: "); - if (uncompressed_size == UINT64_MAX) - printf("Unknown"); - else - printf("%" PRIu64 " MB (%" PRIu64 " bytes)", - (uncompressed_size + 512 * 1024) - / (1024 * 1024), - uncompressed_size); - - lzma_options_lzma *opt = filter.options; - - printf("\nDictionary size: " - "%u MB (2^%u bytes)\n" - "Literal context bits (lc): %" PRIu32 "\n" - "Literal pos bits (lp): %" PRIu32 "\n" - "Number of pos bits (pb): %" PRIu32 "\n", - (opt->dict_size + 512 * 1024) / (1024 * 1024), - my_log2(opt->dict_size), opt->lc, opt->lp, opt->pb); - - free(opt); - - return false; -} - - -extern int -main(int argc, char **argv) -{ - int ret = EXIT_SUCCESS; - argv0 = argv[0]; - - parse_args(argc, argv); - - // We print empty lines around the output only when reading from - // files specified on the command line. This is due to how - // LZMA Utils did it. - if (optind == argc) { - lzmainfo("(stdin)", stdin); - } else { - printf("\n"); - - do { - if (strcmp(argv[optind], "-") == 0) { - if (lzmainfo("(stdin)", stdin)) - ret = EXIT_FAILURE; - } else { - FILE *f = fopen(argv[optind], "r"); - if (f == NULL) { - ret = EXIT_FAILURE; - fprintf(stderr, "%s: %s: %s\n", - argv0, argv[optind], - strerror(errno)); - continue; - } - - if (lzmainfo(argv[optind], f)) - ret = EXIT_FAILURE; - - printf("\n"); - fclose(f); - } - } while (++optind < argc); - } - - my_exit(ret); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/scripts/Makefile.am b/Build/source/utils/xz-4.999.9beta/src/scripts/Makefile.am deleted file mode 100644 index 86f273884f6..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/scripts/Makefile.am +++ /dev/null @@ -1,65 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -nodist_bin_SCRIPTS = xzdiff xzgrep xzmore xzless -dist_man_MANS = xzdiff.1 xzgrep.1 xzmore.1 xzless.1 - -install-exec-hook: - cd $(DESTDIR)$(bindir) && \ - target=`echo xzdiff | sed '$(transform)'` && \ - for name in xzcmp lzdiff lzcmp; do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link && \ - $(LN_S) $$target $$link; \ - done && \ - target=`echo xzgrep | sed '$(transform)'` && \ - for name in xzegrep xzfgrep lzgrep lzegrep lzfgrep; do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link && \ - $(LN_S) $$target $$link; \ - done && \ - for name in xzmore xzless; do \ - target=`echo $$name | sed '$(transform)'` && \ - link=`echo $$name | sed 's/xz/lz/;$(transform)'` && \ - rm -f $$link && \ - $(LN_S) $$target $$link; \ - done - -install-data-hook: - cd $(DESTDIR)$(mandir)/man1 && \ - target=`echo xzdiff | sed '$(transform)'` && \ - for name in xzcmp lzdiff lzcmp; do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link.1 && \ - $(LN_S) $$target.1 $$link.1; \ - done && \ - target=`echo xzgrep | sed '$(transform)'` && \ - for name in xzegrep xzfgrep lzgrep lzegrep lzfgrep; do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link.1 && \ - $(LN_S) $$target.1 $$link.1; \ - done && \ - for name in xzmore xzless; do \ - target=`echo $$name | sed '$(transform)'` && \ - link=`echo $$name | sed 's/xz/lz/;$(transform)'` && \ - rm -f $$link.1 && \ - $(LN_S) $$target.1 $$link.1; \ - done - -uninstall-hook: - cd $(DESTDIR)$(bindir) && \ - for name in xzcmp lzdiff lzcmp xzegrep xzfgrep \ - lzgrep lzegrep lzfgrep lzmore lzless; do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link; \ - done - cd $(DESTDIR)$(mandir)/man1 && \ - for name in xzcmp lzdiff lzcmp xzegrep xzfgrep \ - lzgrep lzegrep lzfgrep lzmore lzless; do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link.1; \ - done diff --git a/Build/source/utils/xz-4.999.9beta/src/scripts/Makefile.in b/Build/source/utils/xz-4.999.9beta/src/scripts/Makefile.in deleted file mode 100644 index 66e23b3846a..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/scripts/Makefile.in +++ /dev/null @@ -1,586 +0,0 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ -subdir = src/scripts -DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/xzdiff.in $(srcdir)/xzgrep.in \ - $(srcdir)/xzless.in $(srcdir)/xzmore.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ - $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ - $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ - $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ - $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = xzdiff xzgrep xzmore xzless -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__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" -SCRIPTS = $(nodist_bin_SCRIPTS) -SOURCES = -DIST_SOURCES = -man1dir = $(mandir)/man1 -NROFF = nroff -MANS = $(dist_man_MANS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ -DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GETOPT_H = @GETOPT_H@ -GMSGFMT = @GMSGFMT@ -GMSGFMT_015 = @GMSGFMT_015@ -GREP = @GREP@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTLLIBS = @INTLLIBS@ -INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBICONV = @LIBICONV@ -LIBINTL = @LIBINTL@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBINTL = @LTLIBINTL@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -MSGFMT = @MSGFMT@ -MSGFMT_015 = @MSGFMT_015@ -MSGMERGE = @MSGMERGE@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POSIX_SHELL = @POSIX_SHELL@ -POSUB = @POSUB@ -PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -RC = @RC@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ -STATIC_LDFLAGS = @STATIC_LDFLAGS@ -STRIP = @STRIP@ -USE_NLS = @USE_NLS@ -VERSION = @VERSION@ -XGETTEXT = @XGETTEXT@ -XGETTEXT_015 = @XGETTEXT_015@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -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@ -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@ -lt_ECHO = @lt_ECHO@ -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@ -xz = @xz@ -nodist_bin_SCRIPTS = xzdiff xzgrep xzmore xzless -dist_man_MANS = xzdiff.1 xzgrep.1 xzmore.1 xzless.1 -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/scripts/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/scripts/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -xzdiff: $(top_builddir)/config.status $(srcdir)/xzdiff.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -xzgrep: $(top_builddir)/config.status $(srcdir)/xzgrep.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -xzmore: $(top_builddir)/config.status $(srcdir)/xzmore.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -xzless: $(top_builddir)/config.status $(srcdir)/xzless.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-nodist_binSCRIPTS: $(nodist_bin_SCRIPTS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" - @list='$(nodist_bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n' \ - -e 'h;s|.*|.|' \ - -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) { files[d] = files[d] " " $$1; \ - if (++n[d] == $(am__install_max)) { \ - print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ - else { print "f", d "/" $$4, $$1 } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-nodist_binSCRIPTS: - @$(NORMAL_UNINSTALL) - @list='$(nodist_bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 's,.*/,,;$(transform)'`; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-man1: $(dist_man_MANS) - @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" - @list=''; test -n "$(man1dir)" || exit 0; \ - { for i in $$list; do echo "$$i"; done; \ - l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.1[a-z]*$$/p'; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ - done; } - -uninstall-man1: - @$(NORMAL_UNINSTALL) - @list=''; test -n "$(man1dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.1[a-z]*$$/p'; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - test -z "$$files" || { \ - echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @list='$(MANS)'; if test -n "$$list"; then \ - list=`for p in $$list; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ - if test -n "$$list" && \ - grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ - echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ - grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ - echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ - echo " typically \`make maintainer-clean' will remove them" >&2; \ - exit 1; \ - else :; fi; \ - else :; fi - @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 -check-am: all-am -check: check-am -all-am: Makefile $(SCRIPTS) $(MANS) -installdirs: - for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; 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: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -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-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-man - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) install-data-hook -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-nodist_binSCRIPTS - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) install-exec-hook -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: install-man1 - -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 Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-man uninstall-nodist_binSCRIPTS - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) uninstall-hook -uninstall-man: uninstall-man1 - -.MAKE: install-am install-data-am install-exec-am install-strip \ - uninstall-am - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-data-hook install-dvi \ - install-dvi-am install-exec install-exec-am install-exec-hook \ - install-html install-html-am install-info install-info-am \ - install-man install-man1 install-nodist_binSCRIPTS install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-hook uninstall-man uninstall-man1 \ - uninstall-nodist_binSCRIPTS - - -install-exec-hook: - cd $(DESTDIR)$(bindir) && \ - target=`echo xzdiff | sed '$(transform)'` && \ - for name in xzcmp lzdiff lzcmp; do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link && \ - $(LN_S) $$target $$link; \ - done && \ - target=`echo xzgrep | sed '$(transform)'` && \ - for name in xzegrep xzfgrep lzgrep lzegrep lzfgrep; do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link && \ - $(LN_S) $$target $$link; \ - done && \ - for name in xzmore xzless; do \ - target=`echo $$name | sed '$(transform)'` && \ - link=`echo $$name | sed 's/xz/lz/;$(transform)'` && \ - rm -f $$link && \ - $(LN_S) $$target $$link; \ - done - -install-data-hook: - cd $(DESTDIR)$(mandir)/man1 && \ - target=`echo xzdiff | sed '$(transform)'` && \ - for name in xzcmp lzdiff lzcmp; do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link.1 && \ - $(LN_S) $$target.1 $$link.1; \ - done && \ - target=`echo xzgrep | sed '$(transform)'` && \ - for name in xzegrep xzfgrep lzgrep lzegrep lzfgrep; do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link.1 && \ - $(LN_S) $$target.1 $$link.1; \ - done && \ - for name in xzmore xzless; do \ - target=`echo $$name | sed '$(transform)'` && \ - link=`echo $$name | sed 's/xz/lz/;$(transform)'` && \ - rm -f $$link.1 && \ - $(LN_S) $$target.1 $$link.1; \ - done - -uninstall-hook: - cd $(DESTDIR)$(bindir) && \ - for name in xzcmp lzdiff lzcmp xzegrep xzfgrep \ - lzgrep lzegrep lzfgrep lzmore lzless; do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link; \ - done - cd $(DESTDIR)$(mandir)/man1 && \ - for name in xzcmp lzdiff lzcmp xzegrep xzfgrep \ - lzgrep lzegrep lzfgrep lzmore lzless; do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link.1; \ - done - -# 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/Build/source/utils/xz-4.999.9beta/src/scripts/xzdiff.1 b/Build/source/utils/xz-4.999.9beta/src/scripts/xzdiff.1 deleted file mode 100644 index 252d1cd303d..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/scripts/xzdiff.1 +++ /dev/null @@ -1,74 +0,0 @@ -.\" -.\" Original zdiff.1 for gzip: Jean-loup Gailly -.\" -.\" Modifications for XZ Utils: Lasse Collin -.\" Andrew Dudman -.\" -.\" License: GNU GPLv2+ -.\" -.TH XZDIFF 1 "2009-07-05" "Tukaani" "XZ Utils" -.SH NAME -xzcmp, xzdiff, lzcmp, lzdiff \- compare compressed files -.SH SYNOPSIS -.B xzcmp -.RI [ cmp_options "] " file1 " [" file2 ] -.br -.B xzdiff -.RI [ diff_options "] " file1 " [" file2 ] -.br -.B lzcmp -.RI [ cmp_options "] " file1 " [" file2 ] -.br -.B lzdiff -.RI [ diff_options "] " file1 " [" file2 ] -.SH DESCRIPTION -.B xzcmp -and -.B xdiff -invoke -.BR cmp (1) -or -.BR diff (1) -on files compressed with -.BR xz (1), -.BR lzma (1), -.BR gzip (1), -or -.BR bzip2 (1). -All options specified are passed directly to -.B cmp -or -.BR diff . -If only one file is specified, then the files compared are -.I file1 -(which must have a suffix of a supported compression format) and -.I file1 -from which the compression format suffix has been stripped. -If two files are specified, then they are uncompressed if necessary and fed to -.BR cmp (1) -or -.BR diff (1). -The exit status from -.B cmp -or -.B diff -is preserved. -.PP -The names -.B lzcmp -and -.B lzdiff -are provided for backward compatibility with LZMA Utils. -.SH "SEE ALSO" -.BR cmp (1), -.BR diff (1), -.BR xz (1), -.BR gzip (1), -.BR bzip2 (1), -.BR zdiff (1) -.SH BUGS -Messages from the -.BR cmp (1) -or -.BR diff (1) -programs refer to temporary filenames instead of those specified. diff --git a/Build/source/utils/xz-4.999.9beta/src/scripts/xzdiff.in b/Build/source/utils/xz-4.999.9beta/src/scripts/xzdiff.in deleted file mode 100644 index 2d6e5da4760..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/scripts/xzdiff.in +++ /dev/null @@ -1,172 +0,0 @@ -#!@POSIX_SHELL@ - -# Copyright (C) 1998, 2002, 2006, 2007 Free Software Foundation -# Copyright (C) 1993 Jean-loup Gailly - -# Modified for XZ Utils by Andrew Dudman and Lasse Collin. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -#SET_PATH - This line is a placeholder to ease patching this script. - -# Instead of unsetting XZ_OPT, just make sure that xz will use file format -# autodetection. This way memory usage limit and thread limit can be -# specified via XZ_OPT. With gzip and bzip2 it's OK to just unset the -# environment variables. -xz='@xz@ --format=auto' -unset GZIP BZIP BZIP2 - -case ${0##*/} in - *cmp*) prog=xzcmp; cmp=${CMP:-cmp};; - *) prog=xzdiff; cmp=${DIFF:-diff};; -esac - -version="$prog (@PACKAGE_NAME@) @VERSION@" - -usage="Usage: ${0##*/} [OPTION]... FILE1 [FILE2] -Compare FILE1 to FILE2, using their uncompressed contents if they are -compressed. If FILE2 is omitted, then the files compared are FILE1 and -FILE1 from which the compression format suffix has been stripped. - -Do comparisons like '$cmp' does. OPTIONs are the same as for '$cmp'. - -Report bugs to <@PACKAGE_BUGREPORT@>." - -# sed script to escape all ' for the shell, and then (to handle trailing -# newlines correctly) turn trailing X on last line into '. -escape=' - s/'\''/'\''\\'\'''\''/g - $s/X$/'\''/ -' - -while :; do - case $1 in - --h*) printf '%s\n' "$usage" || exit 2; exit;; - --v*) echo "$version" || exit 2; exit;; - --) shift; break;; - -*\'*) cmp="$cmp '"`printf '%sX\n' "$1" | sed "$escape"`;; - -?*) cmp="$cmp '$1'";; - *) break;; - esac - shift -done -cmp="$cmp --" - -for file; do - test "X$file" = X- || <"$file" || exit 2 -done - -xz1=$xz -xz2=$xz -xz_status=0 -exec 3>&1 - -if test $# -eq 1; then - case $1 in - *[-.]xz | *[-.]lzma | *.t[lx]z) - ;; - *[-.]bz2 | *.tbz | *.tbz2) - xz1=$bzip2;; - *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) - xz1=$gzip;; - *) - echo >&2 "$0: $1: Unknown compressed file name suffix" - exit 2;; - esac - case $1 in - *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma) - FILE=`expr "X$1" : 'X\(.*\)[-.][abglmxzZ2]*$'`;; - *.t[abglx]z) - FILE=`expr "X$1" : 'X\(.*[-.]t\)[abglx]z$'`ar;; - *.tbz2) - FILE=`expr "X$1" : 'X\(.*[-.]t\)bz2$'`ar;; - esac - xz_status=$( - exec 4>&1 - ($xz1 -cd -- "$1" 4>&-; echo $? >&4) 3>&- | eval "$cmp" - '"$FILE"' >&3 - ) -elif test $# -eq 2; then - case $1 in - *[-.]bz2 | *.tbz | *.tbz2) xz1=$bzip2;; - *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) xz1=$gzip;; - esac - case $2 in - *[-.]bz2 | *.tbz | *.tbz2) xz2=$bzip2;; - *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) xz2=$gzip;; - esac - case $1 in - *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | -) - case "$2" in - *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | -) - if test "$1$2" = --; then - xz_status=$( - exec 4>&1 - ($xz1 -cdfq - 4>&-; echo $? >&4) 3>&- | - eval "$cmp" - - >&3 - ) - elif # Reject Solaris 8's buggy /bin/bash 2.03. - echo X | (echo X | eval "$cmp" /dev/fd/5 - >/dev/null 2>&1) 5<&0; then - xz_status=$( - exec 4>&1 - ($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- | - ( ($xz2 -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- 5<&- &3) 5<&0 - ) - case $xz_status in - *[1-9]*) xz_status=1;; - *) xz_status=0;; - esac - else - F=`expr "/$2" : '.*/\(.*\)[-.][ablmtxz2]*$'` || F=$prog - tmp= - trap ' - test -n "$tmp" && rm -f "$tmp" - (exit 2); exit 2 - ' HUP INT PIPE TERM 0 - tmp=`mktemp -t -- "$F.XXXXXX"` || exit 2 - $xz2 -cdfq -- "$2" > "$tmp" || exit 2 - xz_status=$( - exec 4>&1 - ($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- | - eval "$cmp" - '"$tmp"' >&3 - ) - cmp_status=$? - rm -f "$tmp" || xz_status=$? - trap - HUP INT PIPE TERM 0 - (exit $cmp_status) - fi;; - *) - xz_status=$( - exec 4>&1 - ($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- | - eval "$cmp" - '"$2"' >&3 - );; - esac;; - *) - case "$2" in - *[-.][zZ] | *_z | *[-.][gx]z | *[-.]bz2 | *[-.]lzma | *.t[abglx]z | *.tbz2 | -) - xz_status=$( - exec 4>&1 - ($xz2 -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- | - eval "$cmp" '"$1"' - >&3 - );; - *) - eval "$cmp" '"$1"' '"$2"';; - esac;; - esac -else - echo >&2 "$0: Invalid number of operands; try \`${0##*/} --help' for help" - exit 2 -fi - -cmp_status=$? -test "$xz_status" -eq 0 || exit 2 -exit $cmp_status diff --git a/Build/source/utils/xz-4.999.9beta/src/scripts/xzgrep.1 b/Build/source/utils/xz-4.999.9beta/src/scripts/xzgrep.1 deleted file mode 100644 index 996d64aee8b..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/scripts/xzgrep.1 +++ /dev/null @@ -1,94 +0,0 @@ -.\" -.\" Original zgrep.1 for gzip: Jean-loup Gailly -.\" Charles Levert -.\" -.\" Modifications for XZ Utils: Lasse Collin -.\" -.\" License: GNU GPLv2+ -.\" -.TH XZGREP 1 "2009-07-05" "Tukaani" "XZ Utils" -.SH NAME -xzgrep \- search compressed files for a regular expression -.SH SYNOPSIS -.B xzgrep -.RI [ grep_options ] -.RB [ \-e ] -.I pattern -.IR file ".\|.\|." -.br -.B xzegrep -.RB ... -.br -.B xzfgrep -.RB ... -.br -.B lzgrep -.RB ... -.br -.B lzegrep -.RB ... -.br -.B lzfgrep -.RB ... -.SH DESCRIPTION -.B xzgrep -invokes -.BR grep (1) -on -.I files -which may be either uncompressed or compressed with -.BR xz (1), -.BR lzma (1), -.BR gzip (1), -or -.BR bzip2 (1). -All options specified are passed directly to -.BR grep (1). -.PP -If no -.I file -is specified, then the standard input is decompressed if necessary and fed to -.BR grep (1). -When reading from standard input, -.BR gzip (1) -and -.BR bzip2 (1) -compressed files are not supported. -.PP -If -.B xzgrep -is invoked as -.B xzegrep -or -.B xzfgrep -then -.BR egrep (1) -or -.BR fgrep (1) -is used instead of -.BR grep (1). -The same applies to names -.BR lzgrep , -.BR lzegrep , -and -.BR lzfgrep , -which are provided for backward compatibility with LZMA Utils. -.PP -.SH ENVIRONMENT -.TP -.B GREP -If the -.B GREP -environment variable is set, -.B xzgrep -uses it instead of -.BR grep (1), -.BR egrep (1), -or -.BR fgrep (1). -.SH "SEE ALSO" -.BR grep (1), -.BR xz (1), -.BR gzip (1), -.BR bzip2 (1), -.BR zgrep (1) diff --git a/Build/source/utils/xz-4.999.9beta/src/scripts/xzgrep.in b/Build/source/utils/xz-4.999.9beta/src/scripts/xzgrep.in deleted file mode 100644 index 9a9b393fcec..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/scripts/xzgrep.in +++ /dev/null @@ -1,196 +0,0 @@ -#!@POSIX_SHELL@ - -# xzgrep -- a wrapper around a grep program that decompresses files as needed -# Adapted from a version sent by Charles Levert - -# Copyright (C) 1998, 2001, 2002, 2006, 2007 Free Software Foundation -# Copyright (C) 1993 Jean-loup Gailly - -# Modified for XZ Utils by Andrew Dudman and Lasse Collin. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -#SET_PATH - This line is a placeholder to ease patching this script. - -# Instead of unsetting XZ_OPT, just make sure that xz will use file format -# autodetection. This way memory usage limit and thread limit can be -# specified via XZ_OPT. With gzip and bzip2 it's OK to just unset the -# environment variables. -xz='@xz@ --format=auto' -unset GZIP BZIP BZIP2 - -case ${0##/*} in - *egrep*) prog=xzegrep; grep=${GREP:-egrep};; - *fgrep*) prog=xzfgrep; grep=${GREP:-fgrep};; - *) prog=xzgrep; grep=${GREP:-grep};; -esac - -version="$prog (@PACKAGE_NAME@) @VERSION@" - -usage="Usage: ${0##/*} [OPTION]... [-e] PATTERN [FILE]... -Look for instances of PATTERN in the input FILEs, using their -uncompressed contents if they are compressed. - -OPTIONs are the same as for '$grep'. - -Report bugs to <@PACKAGE_BUGREPORT@>." - -# sed script to escape all ' for the shell, and then (to handle trailing -# newlines correctly) turn trailing X on last line into '. -escape=' - s/'\''/'\''\\'\'''\''/g - $s/X$/'\''/ -' -operands= -have_pat=0 -files_with_matches=0 -files_without_matches=0 -no_filename=0 -with_filename=0 - -while test $# -ne 0; do - option=$1 - shift - optarg= - - case $option in - (-[0123456789abcdhHiIKLlnoqrRsTuUvVwxyzZ]?*) - arg2=-\'$(expr "X${option}X" : 'X-.[0-9]*\(.*\)' | sed "$escape") - eval "set -- $arg2 "'${1+"$@"}' - option=$(expr "X$option" : 'X\(-.[0-9]*\)');; - (--binary-*=* | --[lm]a*=* | --reg*=*) - ;; - (-[ABCDefm] | --binary-* | --file | --[lm]a* | --reg*) - case ${1?"$option option requires an argument"} in - (*\'*) - optarg=" '"$(printf '%sX\n' "$1" | sed "$escape");; - (*) - optarg=" '$1'";; - esac - shift;; - (--) - break;; - (-?*) - ;; - (*) - case $option in - (*\'*) - operands="$operands '"$(printf '%sX\n' "$option" | sed "$escape");; - (*) - operands="$operands '$option'";; - esac - ${POSIXLY_CORRECT+break} - continue;; - esac - - case $option in - (-[drRzZ] | --di* | --exc* | --inc* | --rec* | --nu*) - printf >&2 '%s: %s: Option not supported\n' "$0" "$option" - exit 2;; - (-[ef]* | --file | --file=* | --reg*) - have_pat=1;; - (--h | --he | --hel | --help) - echo "$usage" || exit 2 - exit;; - (-H | --wi | --wit | --with | --with- | --with-f | --with-fi \ - | --with-fil | --with-file | --with-filen | --with-filena | --with-filenam \ - | --with-filename) - with_filename=1 - continue;; - (-l | --files-with-*) - files_with_matches=1;; - (-L | --files-witho*) - files_without_matches=1;; - (--no-f*) - no_filename=1;; - (-V | --v | --ve | --ver | --vers | --versi | --versio | --version) - echo "$version" || exit 2 - exit;; - esac - - case $option in - (*\'?*) - option=\'$(expr "X${option}X" : 'X\(.*\)' | sed "$escape");; - (*) - option="'$option'";; - esac - - grep="$grep $option$optarg" -done - -eval "set -- $operands "'${1+"$@"}' - -if test $have_pat -eq 0; then - case ${1?"Missing pattern; try \`${0##*/} --help' for help"} in - (*\'*) - grep="$grep -- '"$(printf '%sX\n' "$1" | sed "$escape");; - (*) - grep="$grep -- '$1'";; - esac - shift -fi - -if test $# -eq 0; then - set -- - -fi - -exec 3>&1 -res=0 - -for i; do - case $i in - *[-.][zZ] | *_z | *[-.]gz | *.t[ag]z) uncompress="gzip -cdfq";; - *[-.]bz2 | *[-.]tbz | *.tbz2) uncompress="bzip2 -cdfq";; - *) uncompress="$xz -cdfq";; - esac - # Fail if xz or grep (or sed) fails. - xz_status=$( - exec 5>&1 - (eval "$uncompress" -- "$i" 5>&-; echo $? >&5) 3>&- | - if test $files_with_matches -eq 1; then - eval "$grep" -q && { printf '%s\n' "$i" || exit 2; } - elif test $files_without_matches -eq 1; then - eval "$grep" -q || { - r=$? - if test $r -eq 1; then - printf '%s\n' "$i" || r=2 - fi - exit $r - } - elif test $with_filename -eq 0 && - { test $# -eq 1 || test $no_filename -eq 1; }; then - eval "$grep" - else - case $i in - (*' -'* | *'&'* | *'\'* | *'|'*) - i=$(printf '%s\n' "$i" | - sed ' - $!N - $s/[&\|]/\\&/g - $s/\n/\\n/g - ');; - esac - sed_script="s|^|$i:|" - - # Fail if grep or sed fails. - r=$( - exec 4>&1 - (eval "$grep" 4>&-; echo $? >&4) 3>&- | sed "$sed_script" >&3 4>&- - ) || r=2 - exit $r - fi >&3 5>&- - ) - r=$? - test "$xz_status" -eq 0 || test "$xz_status" -eq 2 || r=2 - test $res -lt $r && res=$r -done -exit $res diff --git a/Build/source/utils/xz-4.999.9beta/src/scripts/xzless.1 b/Build/source/utils/xz-4.999.9beta/src/scripts/xzless.1 deleted file mode 100644 index 4fe4bcba970..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/scripts/xzless.1 +++ /dev/null @@ -1,66 +0,0 @@ -.\" -.\" Authors: Andrew Dudman -.\" Lasse Collin -.\" -.\" This file has been put into the public domain. -.\" You can do whatever you want with this file. -.\" -.\" (Note that this file is not based on gzip's zless.1.) -.\" -.TH XZLESS 1 "2009-07-05" "Tukaani" "XZ Utils" -.SH NAME -xzless, lzless \- view xz or lzma compressed (text) files -.SH SYNOPSIS -.B xzless -.RI [ file ...] -.br -.B lzless -.RI [ file ...] -.SH DESCRIPTION -.B xzless -is a filter that displays pagefulls of uncompressed text from compressed -file(s) to a terminal. It works on files compressed with -.BR xz (1) -or -.BR lzma (1). -If no -.I files -are given, -.B xzless -reads from standard input. -.PP -.B xzless -uses -.BR less (1) -as its only pager. Unlike -.BR xzmore , -the choice of pagers is not alterable by an environment variable. -Commands are based on both -.BR more (1) -and -.BR vi (1), -and allow back and forth movement and searching. -See the -.BR less (1) -manual for more information. -.PP -The command named -.B lzless -is provided for backward compatibility with LZMA Utils. -.SH ENVIRONMENT -.TP -.B LESSMETACHARS -A list of characters special to the shell. Set by -.B xzless -unless it is already set in the environment. -.TP -.B LESSOPEN -Set to a command line to invoke the -.BR xz (1) -decompressor for preprocessing the input files to -.BR less (1). -.SH "SEE ALSO" -.BR less (1), -.BR xz (1), -.BR xzmore (1), -.BR zless (1) diff --git a/Build/source/utils/xz-4.999.9beta/src/scripts/xzless.in b/Build/source/utils/xz-4.999.9beta/src/scripts/xzless.in deleted file mode 100644 index a3da697c590..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/scripts/xzless.in +++ /dev/null @@ -1,58 +0,0 @@ -#!@POSIX_SHELL@ - -# Copyright (C) 1998, 2002, 2006, 2007 Free Software Foundation - -# The original version for gzip was written by Paul Eggert. -# Modified for XZ Utils by Andrew Dudman and Lasse Collin. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -#SET_PATH - This line is a placeholder to ease patching this script. - -# Instead of unsetting XZ_OPT, just make sure that xz will use file format -# autodetection. This way memory usage limit and thread limit can be -# specified via XZ_OPT. -xz='@xz@ --format=auto' - -version='xzless (@PACKAGE_NAME@) @VERSION@' - -usage="Usage: ${0##*/} [OPTION]... [FILE]... -Like 'less', but operate on the uncompressed contents of xz compressed FILEs. - -Options are the same as for 'less'. - -Report bugs to <@PACKAGE_BUGREPORT@>." - -case $1 in - --help) echo "$usage" || exit 2; exit;; - --version) echo "$version" || exit 2; exit;; -esac - -if test "${LESSMETACHARS+set}" != set; then - # Work around a bug in less 394 and earlier; - # it mishandles the metacharacters '$%=~'. - space=' ' - tab=' ' - nl=' -' - LESSMETACHARS="$space$tab$nl'"';*?"()<>[|&^`#\$%=~' -fi - -if test "$(less -V | { read ver && echo ${ver#less }; })" -ge 429; then - # less 429 or later: LESSOPEN pipe will be used on - # standard input if $LESSOPEN begins with |-. - LESSOPEN="|-$xz -cdfq -- %s" -else - LESSOPEN="|$xz -cdfq -- %s" -fi -export LESSMETACHARS LESSOPEN - -exec less "$@" diff --git a/Build/source/utils/xz-4.999.9beta/src/scripts/xzmore.1 b/Build/source/utils/xz-4.999.9beta/src/scripts/xzmore.1 deleted file mode 100644 index a94e83263cf..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/scripts/xzmore.1 +++ /dev/null @@ -1,54 +0,0 @@ -.\" -.\" Original zdiff.1 for gzip: Jean-loup Gailly -.\" Modifications for XZ Utils: Lasse Collin -.\" -.\" License: GNU GPLv2+ -.\" -.TH XZMORE 1 "2009-07-05" "Tukaani" "XZ Utils" -.SH NAME -xzmore, lzmore \- view xz or lzma compressed (text) files -.SH SYNOPSIS -.B xzmore -.RI [ "filename ..." ] -.br -.B lzmore -.RI [ "filename ..." ] -.SH DESCRIPTION -.B xzmore -is a filter which allows examination of -.BR xz (1) -or -.BR lzma (1) -compressed text files one screenful at a time on a soft-copy terminal. -.PP -To use a pager other than the default -.B more, -set environment variable -.B PAGER -to the name of the desired program. -The name -.B lzmore -is provided for backward compatibility with LZMA Utils. -.TP -.BR e " or " q -When the prompt --More--(Next file: -.IR file ) -is printed, this command causes -.B xzmore -to exit. -.TP -.B s -When the prompt --More--(Next file: -.IR file ) -is printed, this command causes -.B xzmore -to skip the next file and continue. -.PP -For list of keyboard commands supported while actually viewing the -content of a file, refer to manual of the pager you use, usually -.BR more (1). -.SH "SEE ALSO" -.BR more (1), -.BR xz (1), -.BR xzless (1), -.BR zmore (1) diff --git a/Build/source/utils/xz-4.999.9beta/src/scripts/xzmore.in b/Build/source/utils/xz-4.999.9beta/src/scripts/xzmore.in deleted file mode 100644 index 940d6614460..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/scripts/xzmore.in +++ /dev/null @@ -1,78 +0,0 @@ -#!@POSIX_SHELL@ - -# Copyright (C) 2001, 2002, 2007 Free Software Foundation -# Copyright (C) 1992, 1993 Jean-loup Gailly - -# Modified for XZ Utils by Andrew Dudman and Lasse Collin. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -#SET_PATH - This line is a placeholder to ease patching this script. - -# Instead of unsetting XZ_OPT, just make sure that xz will use file format -# autodetection. This way memory usage limit and thread limit can be -# specified via XZ_OPT. -xz='@xz@ --format=auto' - -version='xzmore (@PACKAGE_NAME@) @VERSION@' - -usage="Usage: ${0##*/} [OPTION]... [FILE]... -Like 'more', but operate on the uncompressed contents of xz compressed FILEs. - -Report bugs to <@PACKAGE_BUGREPORT@>." - -case $1 in - --help) echo "$usage" || exit 2; exit;; - --version) echo "$version" || exit 2; exit;; -esac - -oldtty=`stty -g 2>/dev/null` -if stty -cbreak 2>/dev/null; then - cb='cbreak'; ncb='-cbreak' -else - # 'stty min 1' resets eof to ^a on both SunOS and SysV! - cb='min 1 -icanon'; ncb='icanon eof ^d' -fi -if test $? -eq 0 && test -n "$oldtty"; then - trap 'stty $oldtty 2>/dev/null; exit' 0 2 3 5 10 13 15 -else - trap 'stty $ncb echo 2>/dev/null; exit' 0 2 3 5 10 13 15 -fi - -if test $# = 0; then - if test -t 0; then - echo "$usage"; exit 1 - else - $xz -cdfq | eval "${PAGER:-more}" - fi -else - FIRST=1 - for FILE; do - < "$FILE" || continue - if test $FIRST -eq 0; then - printf "%s--More--(Next file: %s)" "" "$FILE" - stty $cb -echo 2>/dev/null - ANS=`dd bs=1 count=1 2>/dev/null` - stty $ncb echo 2>/dev/null - echo " " - case "$ANS" in - [eq]) exit;; - esac - fi - if test "$ANS" != 's'; then - echo "------> $FILE <------" - $xz -cdfq -- "$FILE" | eval "${PAGER:-more}" - fi - if test -t 1; then - FIRST=0 - fi - done -fi diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/Makefile.am b/Build/source/utils/xz-4.999.9beta/src/xz/Makefile.am deleted file mode 100644 index ccdc66cab44..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/Makefile.am +++ /dev/null @@ -1,96 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -bin_PROGRAMS = xz - -xz_SOURCES = \ - args.c \ - args.h \ - coder.c \ - coder.h \ - file_io.c \ - file_io.h \ - hardware.c \ - hardware.h \ - main.c \ - main.h \ - message.c \ - message.h \ - options.c \ - options.h \ - private.h \ - signals.c \ - signals.h \ - suffix.c \ - suffix.h \ - util.c \ - util.h - -if COND_W32 -xz_SOURCES += xz_w32res.rc -endif - -xz_CPPFLAGS = \ - -DLOCALEDIR=\"$(localedir)\" \ - -I$(top_srcdir)/src/common \ - -I$(top_srcdir)/src/liblzma/api \ - -I$(top_builddir)/lib \ - $(STATIC_CPPFLAGS) - -xz_LDFLAGS = $(STATIC_LDFLAGS) -xz_LDADD = $(top_builddir)/src/liblzma/liblzma.la - -if COND_GNULIB -xz_LDADD += $(top_builddir)/lib/libgnu.a -endif - -# libgnu.a may need these libs, so this must be after libgnu.a. -xz_LDADD += $(LTLIBINTL) - - -# Windows resource compiler support -.rc.o: - $(RC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(xz_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) -i $< -o $@ - - -dist_man_MANS = xz.1 - - -## Create symlinks for unxz and xzcat for convenience. Create symlinks also -## for lzma, unlzma, and lzcat for compatibility with LZMA Utils 4.32.x. -xzlinks = unxz xzcat lzma unlzma lzcat - -install-exec-hook: - cd $(DESTDIR)$(bindir) && \ - target=`echo xz | sed '$(transform)'`$(EXEEXT) && \ - for name in $(xzlinks); do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link && \ - $(LN_S) $$target $$link; \ - done - -install-data-hook: - cd $(DESTDIR)$(mandir)/man1 && \ - target=`echo xz | sed '$(transform)'` && \ - for name in $(xzlinks); do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link.1 && \ - $(LN_S) $$target.1 $$link.1; \ - done - -uninstall-hook: - cd $(DESTDIR)$(bindir) && \ - for name in $(xzlinks); do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link; \ - done - cd $(DESTDIR)$(mandir)/man1 && \ - for name in $(xzlinks); do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link.1; \ - done diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/Makefile.in b/Build/source/utils/xz-4.999.9beta/src/xz/Makefile.in deleted file mode 100644 index cb127ade119..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/Makefile.in +++ /dev/null @@ -1,849 +0,0 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ -bin_PROGRAMS = xz$(EXEEXT) -@COND_W32_TRUE@am__append_1 = xz_w32res.rc -@COND_GNULIB_TRUE@am__append_2 = $(top_builddir)/lib/libgnu.a -subdir = src/xz -DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ - $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ - $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ - $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ - $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" -PROGRAMS = $(bin_PROGRAMS) -am__xz_SOURCES_DIST = args.c args.h coder.c coder.h file_io.c \ - file_io.h hardware.c hardware.h main.c main.h message.c \ - message.h options.c options.h private.h signals.c signals.h \ - suffix.c suffix.h util.c util.h xz_w32res.rc -@COND_W32_TRUE@am__objects_1 = xz_w32res.$(OBJEXT) -am_xz_OBJECTS = xz-args.$(OBJEXT) xz-coder.$(OBJEXT) \ - xz-file_io.$(OBJEXT) xz-hardware.$(OBJEXT) xz-main.$(OBJEXT) \ - xz-message.$(OBJEXT) xz-options.$(OBJEXT) xz-signals.$(OBJEXT) \ - xz-suffix.$(OBJEXT) xz-util.$(OBJEXT) $(am__objects_1) -xz_OBJECTS = $(am_xz_OBJECTS) -am__DEPENDENCIES_1 = -xz_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ - $(am__append_2) $(am__DEPENDENCIES_1) -xz_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(xz_LDFLAGS) \ - $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(xz_SOURCES) -DIST_SOURCES = $(am__xz_SOURCES_DIST) -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' -man1dir = $(mandir)/man1 -NROFF = nroff -MANS = $(dist_man_MANS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ -DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GETOPT_H = @GETOPT_H@ -GMSGFMT = @GMSGFMT@ -GMSGFMT_015 = @GMSGFMT_015@ -GREP = @GREP@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTLLIBS = @INTLLIBS@ -INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBICONV = @LIBICONV@ -LIBINTL = @LIBINTL@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBINTL = @LTLIBINTL@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -MSGFMT = @MSGFMT@ -MSGFMT_015 = @MSGFMT_015@ -MSGMERGE = @MSGMERGE@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POSIX_SHELL = @POSIX_SHELL@ -POSUB = @POSUB@ -PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -RC = @RC@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ -STATIC_LDFLAGS = @STATIC_LDFLAGS@ -STRIP = @STRIP@ -USE_NLS = @USE_NLS@ -VERSION = @VERSION@ -XGETTEXT = @XGETTEXT@ -XGETTEXT_015 = @XGETTEXT_015@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -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@ -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@ -lt_ECHO = @lt_ECHO@ -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@ -xz = @xz@ -xz_SOURCES = args.c args.h coder.c coder.h file_io.c file_io.h \ - hardware.c hardware.h main.c main.h message.c message.h \ - options.c options.h private.h signals.c signals.h suffix.c \ - suffix.h util.c util.h $(am__append_1) -xz_CPPFLAGS = \ - -DLOCALEDIR=\"$(localedir)\" \ - -I$(top_srcdir)/src/common \ - -I$(top_srcdir)/src/liblzma/api \ - -I$(top_builddir)/lib \ - $(STATIC_CPPFLAGS) - -xz_LDFLAGS = $(STATIC_LDFLAGS) - -# libgnu.a may need these libs, so this must be after libgnu.a. -xz_LDADD = $(top_builddir)/src/liblzma/liblzma.la $(am__append_2) \ - $(LTLIBINTL) -dist_man_MANS = xz.1 -xzlinks = unxz xzcat lzma unlzma lzcat -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj .rc -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/xz/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/xz/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p || test -f $$p1; \ - then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - @list='$(bin_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 -xz$(EXEEXT): $(xz_OBJECTS) $(xz_DEPENDENCIES) - @rm -f xz$(EXEEXT) - $(xz_LINK) $(xz_OBJECTS) $(xz_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-args.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-coder.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-file_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-hardware.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-main.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-message.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-options.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-signals.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-suffix.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xz-util.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -xz-args.o: args.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-args.o -MD -MP -MF $(DEPDIR)/xz-args.Tpo -c -o xz-args.o `test -f 'args.c' || echo '$(srcdir)/'`args.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-args.Tpo $(DEPDIR)/xz-args.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='args.c' object='xz-args.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-args.o `test -f 'args.c' || echo '$(srcdir)/'`args.c - -xz-args.obj: args.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-args.obj -MD -MP -MF $(DEPDIR)/xz-args.Tpo -c -o xz-args.obj `if test -f 'args.c'; then $(CYGPATH_W) 'args.c'; else $(CYGPATH_W) '$(srcdir)/args.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-args.Tpo $(DEPDIR)/xz-args.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='args.c' object='xz-args.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-args.obj `if test -f 'args.c'; then $(CYGPATH_W) 'args.c'; else $(CYGPATH_W) '$(srcdir)/args.c'; fi` - -xz-coder.o: coder.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-coder.o -MD -MP -MF $(DEPDIR)/xz-coder.Tpo -c -o xz-coder.o `test -f 'coder.c' || echo '$(srcdir)/'`coder.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-coder.Tpo $(DEPDIR)/xz-coder.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='coder.c' object='xz-coder.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-coder.o `test -f 'coder.c' || echo '$(srcdir)/'`coder.c - -xz-coder.obj: coder.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-coder.obj -MD -MP -MF $(DEPDIR)/xz-coder.Tpo -c -o xz-coder.obj `if test -f 'coder.c'; then $(CYGPATH_W) 'coder.c'; else $(CYGPATH_W) '$(srcdir)/coder.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-coder.Tpo $(DEPDIR)/xz-coder.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='coder.c' object='xz-coder.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-coder.obj `if test -f 'coder.c'; then $(CYGPATH_W) 'coder.c'; else $(CYGPATH_W) '$(srcdir)/coder.c'; fi` - -xz-file_io.o: file_io.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-file_io.o -MD -MP -MF $(DEPDIR)/xz-file_io.Tpo -c -o xz-file_io.o `test -f 'file_io.c' || echo '$(srcdir)/'`file_io.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-file_io.Tpo $(DEPDIR)/xz-file_io.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='file_io.c' object='xz-file_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-file_io.o `test -f 'file_io.c' || echo '$(srcdir)/'`file_io.c - -xz-file_io.obj: file_io.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-file_io.obj -MD -MP -MF $(DEPDIR)/xz-file_io.Tpo -c -o xz-file_io.obj `if test -f 'file_io.c'; then $(CYGPATH_W) 'file_io.c'; else $(CYGPATH_W) '$(srcdir)/file_io.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-file_io.Tpo $(DEPDIR)/xz-file_io.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='file_io.c' object='xz-file_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-file_io.obj `if test -f 'file_io.c'; then $(CYGPATH_W) 'file_io.c'; else $(CYGPATH_W) '$(srcdir)/file_io.c'; fi` - -xz-hardware.o: hardware.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-hardware.o -MD -MP -MF $(DEPDIR)/xz-hardware.Tpo -c -o xz-hardware.o `test -f 'hardware.c' || echo '$(srcdir)/'`hardware.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-hardware.Tpo $(DEPDIR)/xz-hardware.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hardware.c' object='xz-hardware.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-hardware.o `test -f 'hardware.c' || echo '$(srcdir)/'`hardware.c - -xz-hardware.obj: hardware.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-hardware.obj -MD -MP -MF $(DEPDIR)/xz-hardware.Tpo -c -o xz-hardware.obj `if test -f 'hardware.c'; then $(CYGPATH_W) 'hardware.c'; else $(CYGPATH_W) '$(srcdir)/hardware.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-hardware.Tpo $(DEPDIR)/xz-hardware.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hardware.c' object='xz-hardware.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-hardware.obj `if test -f 'hardware.c'; then $(CYGPATH_W) 'hardware.c'; else $(CYGPATH_W) '$(srcdir)/hardware.c'; fi` - -xz-main.o: main.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-main.o -MD -MP -MF $(DEPDIR)/xz-main.Tpo -c -o xz-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-main.Tpo $(DEPDIR)/xz-main.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='xz-main.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c - -xz-main.obj: main.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-main.obj -MD -MP -MF $(DEPDIR)/xz-main.Tpo -c -o xz-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-main.Tpo $(DEPDIR)/xz-main.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='xz-main.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` - -xz-message.o: message.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-message.o -MD -MP -MF $(DEPDIR)/xz-message.Tpo -c -o xz-message.o `test -f 'message.c' || echo '$(srcdir)/'`message.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-message.Tpo $(DEPDIR)/xz-message.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='message.c' object='xz-message.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-message.o `test -f 'message.c' || echo '$(srcdir)/'`message.c - -xz-message.obj: message.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-message.obj -MD -MP -MF $(DEPDIR)/xz-message.Tpo -c -o xz-message.obj `if test -f 'message.c'; then $(CYGPATH_W) 'message.c'; else $(CYGPATH_W) '$(srcdir)/message.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-message.Tpo $(DEPDIR)/xz-message.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='message.c' object='xz-message.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-message.obj `if test -f 'message.c'; then $(CYGPATH_W) 'message.c'; else $(CYGPATH_W) '$(srcdir)/message.c'; fi` - -xz-options.o: options.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-options.o -MD -MP -MF $(DEPDIR)/xz-options.Tpo -c -o xz-options.o `test -f 'options.c' || echo '$(srcdir)/'`options.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-options.Tpo $(DEPDIR)/xz-options.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='options.c' object='xz-options.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-options.o `test -f 'options.c' || echo '$(srcdir)/'`options.c - -xz-options.obj: options.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-options.obj -MD -MP -MF $(DEPDIR)/xz-options.Tpo -c -o xz-options.obj `if test -f 'options.c'; then $(CYGPATH_W) 'options.c'; else $(CYGPATH_W) '$(srcdir)/options.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-options.Tpo $(DEPDIR)/xz-options.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='options.c' object='xz-options.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-options.obj `if test -f 'options.c'; then $(CYGPATH_W) 'options.c'; else $(CYGPATH_W) '$(srcdir)/options.c'; fi` - -xz-signals.o: signals.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-signals.o -MD -MP -MF $(DEPDIR)/xz-signals.Tpo -c -o xz-signals.o `test -f 'signals.c' || echo '$(srcdir)/'`signals.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-signals.Tpo $(DEPDIR)/xz-signals.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='signals.c' object='xz-signals.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-signals.o `test -f 'signals.c' || echo '$(srcdir)/'`signals.c - -xz-signals.obj: signals.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-signals.obj -MD -MP -MF $(DEPDIR)/xz-signals.Tpo -c -o xz-signals.obj `if test -f 'signals.c'; then $(CYGPATH_W) 'signals.c'; else $(CYGPATH_W) '$(srcdir)/signals.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-signals.Tpo $(DEPDIR)/xz-signals.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='signals.c' object='xz-signals.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-signals.obj `if test -f 'signals.c'; then $(CYGPATH_W) 'signals.c'; else $(CYGPATH_W) '$(srcdir)/signals.c'; fi` - -xz-suffix.o: suffix.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-suffix.o -MD -MP -MF $(DEPDIR)/xz-suffix.Tpo -c -o xz-suffix.o `test -f 'suffix.c' || echo '$(srcdir)/'`suffix.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-suffix.Tpo $(DEPDIR)/xz-suffix.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='suffix.c' object='xz-suffix.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-suffix.o `test -f 'suffix.c' || echo '$(srcdir)/'`suffix.c - -xz-suffix.obj: suffix.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-suffix.obj -MD -MP -MF $(DEPDIR)/xz-suffix.Tpo -c -o xz-suffix.obj `if test -f 'suffix.c'; then $(CYGPATH_W) 'suffix.c'; else $(CYGPATH_W) '$(srcdir)/suffix.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-suffix.Tpo $(DEPDIR)/xz-suffix.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='suffix.c' object='xz-suffix.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-suffix.obj `if test -f 'suffix.c'; then $(CYGPATH_W) 'suffix.c'; else $(CYGPATH_W) '$(srcdir)/suffix.c'; fi` - -xz-util.o: util.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-util.o -MD -MP -MF $(DEPDIR)/xz-util.Tpo -c -o xz-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-util.Tpo $(DEPDIR)/xz-util.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='xz-util.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c - -xz-util.obj: util.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xz-util.obj -MD -MP -MF $(DEPDIR)/xz-util.Tpo -c -o xz-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xz-util.Tpo $(DEPDIR)/xz-util.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='util.c' object='xz-util.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xz-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-man1: $(dist_man_MANS) - @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" - @list=''; test -n "$(man1dir)" || exit 0; \ - { for i in $$list; do echo "$$i"; done; \ - l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.1[a-z]*$$/p'; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ - done; } - -uninstall-man1: - @$(NORMAL_UNINSTALL) - @list=''; test -n "$(man1dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.1[a-z]*$$/p'; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - test -z "$$files" || { \ - echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } - -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) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - 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; }; }'`; \ - 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) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - 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; }; }'`; \ - 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 - -distdir: $(DISTFILES) - @list='$(MANS)'; if test -n "$$list"; then \ - list=`for p in $$list; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ - if test -n "$$list" && \ - grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ - echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ - grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ - echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ - echo " typically \`make maintainer-clean' will remove them" >&2; \ - exit 1; \ - else :; fi; \ - else :; fi - @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 -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) $(MANS) -installdirs: - for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; 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: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -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-binPROGRAMS clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-man - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) install-data-hook -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-binPROGRAMS - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) install-exec-hook -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: install-man1 - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -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-binPROGRAMS uninstall-man - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) uninstall-hook -uninstall-man: uninstall-man1 - -.MAKE: install-am install-data-am install-exec-am install-strip \ - uninstall-am - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ - clean-generic clean-libtool ctags distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am \ - install-data-hook install-dvi install-dvi-am install-exec \ - install-exec-am install-exec-hook install-html install-html-am \ - install-info install-info-am install-man install-man1 \ - 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-binPROGRAMS uninstall-hook uninstall-man \ - uninstall-man1 - - -# Windows resource compiler support -.rc.o: - $(RC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(xz_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) -i $< -o $@ - -install-exec-hook: - cd $(DESTDIR)$(bindir) && \ - target=`echo xz | sed '$(transform)'`$(EXEEXT) && \ - for name in $(xzlinks); do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link && \ - $(LN_S) $$target $$link; \ - done - -install-data-hook: - cd $(DESTDIR)$(mandir)/man1 && \ - target=`echo xz | sed '$(transform)'` && \ - for name in $(xzlinks); do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link.1 && \ - $(LN_S) $$target.1 $$link.1; \ - done - -uninstall-hook: - cd $(DESTDIR)$(bindir) && \ - for name in $(xzlinks); do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link; \ - done - cd $(DESTDIR)$(mandir)/man1 && \ - for name in $(xzlinks); do \ - link=`echo $$name | sed '$(transform)'` && \ - rm -f $$link.1; \ - done - -# 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/Build/source/utils/xz-4.999.9beta/src/xz/args.c b/Build/source/utils/xz-4.999.9beta/src/xz/args.c deleted file mode 100644 index b50e28b7fd9..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/args.c +++ /dev/null @@ -1,530 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file args.c -/// \brief Argument parsing -/// -/// \note Filter-specific options parsing is in options.c. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "private.h" - -#include "getopt.h" -#include - - -bool opt_stdout = false; -bool opt_force = false; -bool opt_keep_original = false; - -// We don't modify or free() this, but we need to assign it in some -// non-const pointers. -const char *stdin_filename = "(stdin)"; - - -static void -parse_real(args_info *args, int argc, char **argv) -{ - enum { - OPT_SUBBLOCK = INT_MIN, - OPT_X86, - OPT_POWERPC, - OPT_IA64, - OPT_ARM, - OPT_ARMTHUMB, - OPT_SPARC, - OPT_DELTA, - OPT_LZMA1, - OPT_LZMA2, - - OPT_FILES, - OPT_FILES0, - }; - - static const char short_opts[] - = "cC:defF:hHlkM:qQrS:tT:vVz0123456789"; - - static const struct option long_opts[] = { - // Operation mode - { "compress", no_argument, NULL, 'z' }, - { "decompress", no_argument, NULL, 'd' }, - { "uncompress", no_argument, NULL, 'd' }, - { "test", no_argument, NULL, 't' }, - { "list", no_argument, NULL, 'l' }, - - // Operation modifiers - { "keep", no_argument, NULL, 'k' }, - { "force", no_argument, NULL, 'f' }, - { "stdout", no_argument, NULL, 'c' }, - { "to-stdout", no_argument, NULL, 'c' }, - { "suffix", required_argument, NULL, 'S' }, - // { "recursive", no_argument, NULL, 'r' }, // TODO - { "files", optional_argument, NULL, OPT_FILES }, - { "files0", optional_argument, NULL, OPT_FILES0 }, - - // Basic compression settings - { "format", required_argument, NULL, 'F' }, - { "check", required_argument, NULL, 'C' }, - { "memory", required_argument, NULL, 'M' }, - { "threads", required_argument, NULL, 'T' }, - - { "extreme", no_argument, NULL, 'e' }, - { "fast", no_argument, NULL, '0' }, - { "best", no_argument, NULL, '9' }, - - // Filters - { "lzma1", optional_argument, NULL, OPT_LZMA1 }, - { "lzma2", optional_argument, NULL, OPT_LZMA2 }, - { "x86", optional_argument, NULL, OPT_X86 }, - { "powerpc", optional_argument, NULL, OPT_POWERPC }, - { "ia64", optional_argument, NULL, OPT_IA64 }, - { "arm", optional_argument, NULL, OPT_ARM }, - { "armthumb", optional_argument, NULL, OPT_ARMTHUMB }, - { "sparc", optional_argument, NULL, OPT_SPARC }, - { "delta", optional_argument, NULL, OPT_DELTA }, - { "subblock", optional_argument, NULL, OPT_SUBBLOCK }, - - // Other options - { "quiet", no_argument, NULL, 'q' }, - { "verbose", no_argument, NULL, 'v' }, - { "no-warn", no_argument, NULL, 'Q' }, - { "help", no_argument, NULL, 'h' }, - { "long-help", no_argument, NULL, 'H' }, - { "version", no_argument, NULL, 'V' }, - - { NULL, 0, NULL, 0 } - }; - - int c; - - while ((c = getopt_long(argc, argv, short_opts, long_opts, NULL)) - != -1) { - switch (c) { - // Compression preset (also for decompression if --format=raw) - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - coder_set_preset(c - '0'); - break; - - // --memory - case 'M': { - // Support specifying the limit as a percentage of - // installed physical RAM. - size_t len = strlen(optarg); - if (len > 0 && optarg[len - 1] == '%') { - optarg[len - 1] = '\0'; - hardware_memlimit_set_percentage( - str_to_uint64( - "memory%", optarg, 1, 100)); - } else { - // On 32-bit systems, SIZE_MAX would make more - // sense than UINT64_MAX. But use UINT64_MAX - // still so that scripts that assume > 4 GiB - // values don't break. - hardware_memlimit_set(str_to_uint64( - "memory", optarg, - 0, UINT64_MAX)); - } - - break; - } - - // --suffix - case 'S': - suffix_set(optarg); - break; - - case 'T': - hardware_threadlimit_set(str_to_uint64( - "threads", optarg, 0, UINT32_MAX)); - break; - - // --version - case 'V': - // This doesn't return. - message_version(); - - // --stdout - case 'c': - opt_stdout = true; - break; - - // --decompress - case 'd': - opt_mode = MODE_DECOMPRESS; - break; - - // --extreme - case 'e': - coder_set_extreme(); - break; - - // --force - case 'f': - opt_force = true; - break; - - // --help - case 'h': - // This doesn't return. - message_help(false); - - // --long-help - case 'H': - // This doesn't return. - message_help(true); - - // --list - case 'l': - opt_mode = MODE_LIST; - break; - - // --keep - case 'k': - opt_keep_original = true; - break; - - // --quiet - case 'q': - message_verbosity_decrease(); - break; - - case 'Q': - set_exit_no_warn(); - break; - - case 't': - opt_mode = MODE_TEST; - break; - - // --verbose - case 'v': - message_verbosity_increase(); - break; - - case 'z': - opt_mode = MODE_COMPRESS; - break; - - // Filter setup - - case OPT_SUBBLOCK: - coder_add_filter(LZMA_FILTER_SUBBLOCK, - options_subblock(optarg)); - break; - - case OPT_X86: - coder_add_filter(LZMA_FILTER_X86, - options_bcj(optarg)); - break; - - case OPT_POWERPC: - coder_add_filter(LZMA_FILTER_POWERPC, - options_bcj(optarg)); - break; - - case OPT_IA64: - coder_add_filter(LZMA_FILTER_IA64, - options_bcj(optarg)); - break; - - case OPT_ARM: - coder_add_filter(LZMA_FILTER_ARM, - options_bcj(optarg)); - break; - - case OPT_ARMTHUMB: - coder_add_filter(LZMA_FILTER_ARMTHUMB, - options_bcj(optarg)); - break; - - case OPT_SPARC: - coder_add_filter(LZMA_FILTER_SPARC, - options_bcj(optarg)); - break; - - case OPT_DELTA: - coder_add_filter(LZMA_FILTER_DELTA, - options_delta(optarg)); - break; - - case OPT_LZMA1: - coder_add_filter(LZMA_FILTER_LZMA1, - options_lzma(optarg)); - break; - - case OPT_LZMA2: - coder_add_filter(LZMA_FILTER_LZMA2, - options_lzma(optarg)); - break; - - // Other - - // --format - case 'F': { - // Just in case, support both "lzma" and "alone" since - // the latter was used for forward compatibility in - // LZMA Utils 4.32.x. - static const struct { - char str[8]; - enum format_type format; - } types[] = { - { "auto", FORMAT_AUTO }, - { "xz", FORMAT_XZ }, - { "lzma", FORMAT_LZMA }, - { "alone", FORMAT_LZMA }, - // { "gzip", FORMAT_GZIP }, - // { "gz", FORMAT_GZIP }, - { "raw", FORMAT_RAW }, - }; - - size_t i = 0; - while (strcmp(types[i].str, optarg) != 0) - if (++i == ARRAY_SIZE(types)) - message_fatal(_("%s: Unknown file " - "format type"), - optarg); - - opt_format = types[i].format; - break; - } - - // --check - case 'C': { - static const struct { - char str[8]; - lzma_check check; - } types[] = { - { "none", LZMA_CHECK_NONE }, - { "crc32", LZMA_CHECK_CRC32 }, - { "crc64", LZMA_CHECK_CRC64 }, - { "sha256", LZMA_CHECK_SHA256 }, - }; - - size_t i = 0; - while (strcmp(types[i].str, optarg) != 0) { - if (++i == ARRAY_SIZE(types)) - message_fatal(_("%s: Unsupported " - "integrity " - "check type"), optarg); - } - - // Use a separate check in case we are using different - // liblzma than what was used to compile us. - if (!lzma_check_is_supported(types[i].check)) - message_fatal(_("%s: Unsupported integrity " - "check type"), optarg); - - coder_set_check(types[i].check); - break; - } - - case OPT_FILES: - args->files_delim = '\n'; - - // Fall through - - case OPT_FILES0: - if (args->files_name != NULL) - message_fatal(_("Only one file can be " - "specified with `--files'" - "or `--files0'.")); - - if (optarg == NULL) { - args->files_name = (char *)stdin_filename; - args->files_file = stdin; - } else { - args->files_name = optarg; - args->files_file = fopen(optarg, - c == OPT_FILES ? "r" : "rb"); - if (args->files_file == NULL) - message_fatal("%s: %s", optarg, - strerror(errno)); - } - - break; - - default: - message_try_help(); - my_exit(E_ERROR); - } - } - - return; -} - - -static void -parse_environment(args_info *args, char *argv0) -{ - char *env = getenv("XZ_OPT"); - if (env == NULL) - return; - - // We modify the string, so make a copy of it. - env = xstrdup(env); - - // Calculate the number of arguments in env. argc stats at one - // to include space for the program name. - int argc = 1; - bool prev_was_space = true; - for (size_t i = 0; env[i] != '\0'; ++i) { - // NOTE: Cast to unsigned char is needed so that correct - // value gets passed to isspace(), which expects - // unsigned char cast to int. Casting to int is done - // automatically due to integer promotion, but we need to - // force char to unsigned char manually. Otherwise 8-bit - // characters would get promoted to wrong value if - // char is signed. - if (isspace((unsigned char)env[i])) { - prev_was_space = true; - } else if (prev_was_space) { - prev_was_space = false; - - // Keep argc small enough to fit into a singed int - // and to keep it usable for memory allocation. - if (++argc == MIN(INT_MAX, SIZE_MAX / sizeof(char *))) - message_fatal(_("The environment variable " - "XZ_OPT contains too many " - "arguments")); - } - } - - // Allocate memory to hold pointers to the arguments. Add one to get - // space for the terminating NULL (if some systems happen to need it). - char **argv = xmalloc(((size_t)(argc) + 1) * sizeof(char *)); - argv[0] = argv0; - argv[argc] = NULL; - - // Go through the string again. Split the arguments using '\0' - // characters and add pointers to the resulting strings to argv. - argc = 1; - prev_was_space = true; - for (size_t i = 0; env[i] != '\0'; ++i) { - if (isspace((unsigned char)env[i])) { - prev_was_space = true; - env[i] = '\0'; - } else if (prev_was_space) { - prev_was_space = false; - argv[argc++] = env + i; - } - } - - // Parse the argument list we got from the environment. All non-option - // arguments i.e. filenames are ignored. - parse_real(args, argc, argv); - - // Reset the state of the getopt_long() so that we can parse the - // command line options too. There are two incompatible ways to - // do it. -#ifdef HAVE_OPTRESET - // BSD - optind = 1; - optreset = 1; -#else - // GNU, Solaris - optind = 0; -#endif - - // We don't need the argument list from environment anymore. - free(argv); - free(env); - - return; -} - - -extern void -args_parse(args_info *args, int argc, char **argv) -{ - // Initialize those parts of *args that we need later. - args->files_name = NULL; - args->files_file = NULL; - args->files_delim = '\0'; - - // Check how we were called. - { -#ifdef DOSLIKE - // We adjusted argv[0] in the beginning of main() so we don't - // need to do anything here. - const char *name = argv[0]; -#else - // Remove the leading path name, if any. - const char *name = strrchr(argv[0], '/'); - if (name == NULL) - name = argv[0]; - else - ++name; -#endif - - // NOTE: It's possible that name[0] is now '\0' if argv[0] - // is weird, but it doesn't matter here. - - // Look for full command names instead of substrings like - // "un", "cat", and "lz" to reduce possibility of false - // positives when the programs have been renamed. - if (strstr(name, "xzcat") != NULL) { - opt_mode = MODE_DECOMPRESS; - opt_stdout = true; - } else if (strstr(name, "unxz") != NULL) { - opt_mode = MODE_DECOMPRESS; - } else if (strstr(name, "lzcat") != NULL) { - opt_format = FORMAT_LZMA; - opt_mode = MODE_DECOMPRESS; - opt_stdout = true; - } else if (strstr(name, "unlzma") != NULL) { - opt_format = FORMAT_LZMA; - opt_mode = MODE_DECOMPRESS; - } else if (strstr(name, "lzma") != NULL) { - opt_format = FORMAT_LZMA; - } - } - - // First the flags from environment - parse_environment(args, argv[0]); - - // Then from the command line - parse_real(args, argc, argv); - - // Never remove the source file when the destination is not on disk. - // In test mode the data is written nowhere, but setting opt_stdout - // will make the rest of the code behave well. - if (opt_stdout || opt_mode == MODE_TEST) { - opt_keep_original = true; - opt_stdout = true; - } - - // When compressing, if no --format flag was used, or it - // was --format=auto, we compress to the .xz format. - if (opt_mode == MODE_COMPRESS && opt_format == FORMAT_AUTO) - opt_format = FORMAT_XZ; - - // Compression settings need to be validated (options themselves and - // their memory usage) when compressing to any file format. It has to - // be done also when uncompressing raw data, since for raw decoding - // the options given on the command line are used to know what kind - // of raw data we are supposed to decode. - if (opt_mode == MODE_COMPRESS || opt_format == FORMAT_RAW) - coder_set_compression_settings(); - - // If no filenames are given, use stdin. - if (argv[optind] == NULL && args->files_name == NULL) { - // We don't modify or free() the "-" constant. The caller - // modifies this so don't make the struct itself const. - static char *names_stdin[2] = { (char *)"-", NULL }; - args->arg_names = names_stdin; - args->arg_count = 1; - } else { - // We got at least one filename from the command line, or - // --files or --files0 was specified. - args->arg_names = argv + optind; - args->arg_count = argc - optind; - } - - return; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/args.h b/Build/source/utils/xz-4.999.9beta/src/xz/args.h deleted file mode 100644 index 91e43ad65a1..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/args.h +++ /dev/null @@ -1,41 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file args.h -/// \brief Argument parsing -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -typedef struct { - /// Filenames from command line - char **arg_names; - - /// Number of filenames from command line - size_t arg_count; - - /// Name of the file from which to read filenames. This is NULL - /// if --files or --files0 was not used. - char *files_name; - - /// File opened for reading from which filenames are read. This is - /// non-NULL only if files_name is non-NULL. - FILE *files_file; - - /// Delimiter for filenames read from files_file - char files_delim; - -} args_info; - - -extern bool opt_stdout; -extern bool opt_force; -extern bool opt_keep_original; -// extern bool opt_recursive; - -extern const char *stdin_filename; - -extern void args_parse(args_info *args, int argc, char **argv); diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/coder.c b/Build/source/utils/xz-4.999.9beta/src/xz/coder.c deleted file mode 100644 index 7cf6186f806..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/coder.c +++ /dev/null @@ -1,639 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file coder.c -/// \brief Compresses or uncompresses a file -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "private.h" - - -/// Return value type for coder_init(). -enum coder_init_ret { - CODER_INIT_NORMAL, - CODER_INIT_PASSTHRU, - CODER_INIT_ERROR, -}; - - -enum operation_mode opt_mode = MODE_COMPRESS; - -enum format_type opt_format = FORMAT_AUTO; - - -/// Stream used to communicate with liblzma -static lzma_stream strm = LZMA_STREAM_INIT; - -/// Filters needed for all encoding all formats, and also decoding in raw data -static lzma_filter filters[LZMA_FILTERS_MAX + 1]; - -/// Input and output buffers -static uint8_t in_buf[IO_BUFFER_SIZE]; -static uint8_t out_buf[IO_BUFFER_SIZE]; - -/// Number of filters. Zero indicates that we are using a preset. -static size_t filters_count = 0; - -/// Number of the preset (0-9) -static size_t preset_number = 6; - -/// True if we should auto-adjust the compression settings to use less memory -/// if memory usage limit is too low for the original settings. -static bool auto_adjust = true; - -/// Indicate if no preset has been explicitly given. In that case, if we need -/// to auto-adjust for lower memory usage, we won't print a warning. -static bool preset_default = true; - -/// If a preset is used (no custom filter chain) and preset_extreme is true, -/// a significantly slower compression is used to achieve slightly better -/// compression ratio. -static bool preset_extreme = false; - -/// Integrity check type -#ifdef HAVE_CHECK_CRC64 -static lzma_check check = LZMA_CHECK_CRC64; -#else -static lzma_check check = LZMA_CHECK_CRC32; -#endif - - -extern void -coder_set_check(lzma_check new_check) -{ - check = new_check; - return; -} - - -extern void -coder_set_preset(size_t new_preset) -{ - preset_number = new_preset; - preset_default = false; - return; -} - - -extern void -coder_set_extreme(void) -{ - preset_extreme = true; - return; -} - - -extern void -coder_add_filter(lzma_vli id, void *options) -{ - if (filters_count == LZMA_FILTERS_MAX) - message_fatal(_("Maximum number of filters is four")); - - filters[filters_count].id = id; - filters[filters_count].options = options; - ++filters_count; - - return; -} - - -static void lzma_attribute((noreturn)) -memlimit_too_small(uint64_t memory_usage, uint64_t memory_limit) -{ - message_fatal(_("Memory usage limit (%" PRIu64 " MiB) is too small " - "for the given filter setup (%" PRIu64 " MiB)"), - memory_limit >> 20, memory_usage >> 20); -} - - -extern void -coder_set_compression_settings(void) -{ - // Options for LZMA1 or LZMA2 in case we are using a preset. - static lzma_options_lzma opt_lzma; - - if (filters_count == 0) { - // We are using a preset. This is not a good idea in raw mode - // except when playing around with things. Different versions - // of this software may use different options in presets, and - // thus make uncompressing the raw data difficult. - if (opt_format == FORMAT_RAW) { - // The message is shown only if warnings are allowed - // but the exit status isn't changed. - message(V_WARNING, _("Using a preset in raw mode " - "is discouraged.")); - message(V_WARNING, _("The exact options of the " - "presets may vary between software " - "versions.")); - } - - // Get the preset for LZMA1 or LZMA2. - if (preset_extreme) - preset_number |= LZMA_PRESET_EXTREME; - - if (lzma_lzma_preset(&opt_lzma, preset_number)) - message_bug(); - - // Use LZMA2 except with --format=lzma we use LZMA1. - filters[0].id = opt_format == FORMAT_LZMA - ? LZMA_FILTER_LZMA1 : LZMA_FILTER_LZMA2; - filters[0].options = &opt_lzma; - filters_count = 1; - } else { - preset_default = false; - } - - // Terminate the filter options array. - filters[filters_count].id = LZMA_VLI_UNKNOWN; - - // If we are using the .lzma format, allow exactly one filter - // which has to be LZMA1. - if (opt_format == FORMAT_LZMA && (filters_count != 1 - || filters[0].id != LZMA_FILTER_LZMA1)) - message_fatal(_("The .lzma format supports only " - "the LZMA1 filter")); - - // If we are using the .xz format, make sure that there is no LZMA1 - // filter to prevent LZMA_PROG_ERROR. - if (opt_format == FORMAT_XZ) - for (size_t i = 0; i < filters_count; ++i) - if (filters[i].id == LZMA_FILTER_LZMA1) - message_fatal(_("LZMA1 cannot be used " - "with the .xz format")); - - // Print the selected filter chain. - message_filters(V_DEBUG, filters); - - // If using --format=raw, we can be decoding. The memusage function - // also validates the filter chain and the options used for the - // filters. - const uint64_t memory_limit = hardware_memlimit_get(); - uint64_t memory_usage; - if (opt_mode == MODE_COMPRESS) - memory_usage = lzma_raw_encoder_memusage(filters); - else - memory_usage = lzma_raw_decoder_memusage(filters); - - if (memory_usage == UINT64_MAX) - message_fatal("Unsupported filter chain or filter options"); - - // Print memory usage info. - message(V_DEBUG, _("%s MiB (%s B) of memory is required per thread, " - "limit is %s MiB (%s B)"), - uint64_to_str(memory_usage >> 20, 0), - uint64_to_str(memory_usage, 1), - uint64_to_str(memory_limit >> 20, 2), - uint64_to_str(memory_limit, 3)); - - if (memory_usage > memory_limit) { - // If --no-auto-adjust was used or we didn't find LZMA1 or - // LZMA2 as the last filter, give an error immediatelly. - // --format=raw implies --no-auto-adjust. - if (!auto_adjust || opt_format == FORMAT_RAW) - memlimit_too_small(memory_usage, memory_limit); - - assert(opt_mode == MODE_COMPRESS); - - // Look for the last filter if it is LZMA2 or LZMA1, so - // we can make it use less RAM. With other filters we don't - // know what to do. - size_t i = 0; - while (filters[i].id != LZMA_FILTER_LZMA2 - && filters[i].id != LZMA_FILTER_LZMA1) { - if (filters[i].id == LZMA_VLI_UNKNOWN) - memlimit_too_small(memory_usage, memory_limit); - - ++i; - } - - // Decrease the dictionary size until we meet the memory - // usage limit. First round down to full mebibytes. - lzma_options_lzma *opt = filters[i].options; - const uint32_t orig_dict_size = opt->dict_size; - opt->dict_size &= ~((UINT32_C(1) << 20) - 1); - while (true) { - // If it is below 1 MiB, auto-adjusting failed. We - // could be more sophisticated and scale it down even - // more, but let's see if many complain about this - // version. - // - // FIXME: Displays the scaled memory usage instead - // of the original. - if (opt->dict_size < (UINT32_C(1) << 20)) - memlimit_too_small(memory_usage, memory_limit); - - memory_usage = lzma_raw_encoder_memusage(filters); - if (memory_usage == UINT64_MAX) - message_bug(); - - // Accept it if it is low enough. - if (memory_usage <= memory_limit) - break; - - // Otherwise 1 MiB down and try again. I hope this - // isn't too slow method for cases where the original - // dict_size is very big. - opt->dict_size -= UINT32_C(1) << 20; - } - - // Tell the user that we decreased the dictionary size. - // However, omit the message if no preset or custom chain - // was given. FIXME: Always warn? - if (!preset_default) - message(V_WARNING, "Adjusted LZMA%c dictionary size " - "from %s MiB to %s MiB to not exceed " - "the memory usage limit of %s MiB", - filters[i].id == LZMA_FILTER_LZMA2 - ? '2' : '1', - uint64_to_str(orig_dict_size >> 20, 0), - uint64_to_str(opt->dict_size >> 20, 1), - uint64_to_str(memory_limit >> 20, 2)); - } - -/* - // Limit the number of worker threads so that memory usage - // limit isn't exceeded. - assert(memory_usage > 0); - size_t thread_limit = memory_limit / memory_usage; - if (thread_limit == 0) - thread_limit = 1; - - if (opt_threads > thread_limit) - opt_threads = thread_limit; -*/ - - return; -} - - -/// Return true if the data in in_buf seems to be in the .xz format. -static bool -is_format_xz(void) -{ - return strm.avail_in >= 6 && memcmp(in_buf, "\3757zXZ", 6) == 0; -} - - -/// Return true if the data in in_buf seems to be in the .lzma format. -static bool -is_format_lzma(void) -{ - // The .lzma header is 13 bytes. - if (strm.avail_in < 13) - return false; - - // Decode the LZMA1 properties. - lzma_filter filter = { .id = LZMA_FILTER_LZMA1 }; - if (lzma_properties_decode(&filter, NULL, in_buf, 5) != LZMA_OK) - return false; - - // A hack to ditch tons of false positives: We allow only dictionary - // sizes that are 2^n or 2^n + 2^(n-1) or UINT32_MAX. LZMA_Alone - // created only files with 2^n, but accepts any dictionary size. - // If someone complains, this will be reconsidered. - lzma_options_lzma *opt = filter.options; - const uint32_t dict_size = opt->dict_size; - free(opt); - - if (dict_size != UINT32_MAX) { - uint32_t d = dict_size - 1; - d |= d >> 2; - d |= d >> 3; - d |= d >> 4; - d |= d >> 8; - d |= d >> 16; - ++d; - if (d != dict_size || dict_size == 0) - return false; - } - - // Another hack to ditch false positives: Assume that if the - // uncompressed size is known, it must be less than 256 GiB. - // Again, if someone complains, this will be reconsidered. - uint64_t uncompressed_size = 0; - for (size_t i = 0; i < 8; ++i) - uncompressed_size |= (uint64_t)(in_buf[5 + i]) << (i * 8); - - if (uncompressed_size != UINT64_MAX - && uncompressed_size > (UINT64_C(1) << 38)) - return false; - - return true; -} - - -/// Detect the input file type (for now, this done only when decompressing), -/// and initialize an appropriate coder. Return value indicates if a normal -/// liblzma-based coder was initialized (CODER_INIT_NORMAL), if passthru -/// mode should be used (CODER_INIT_PASSTHRU), or if an error occurred -/// (CODER_INIT_ERROR). -static enum coder_init_ret -coder_init(file_pair *pair) -{ - lzma_ret ret = LZMA_PROG_ERROR; - - if (opt_mode == MODE_COMPRESS) { - switch (opt_format) { - case FORMAT_AUTO: - // args.c ensures this. - assert(0); - break; - - case FORMAT_XZ: - ret = lzma_stream_encoder(&strm, filters, check); - break; - - case FORMAT_LZMA: - ret = lzma_alone_encoder(&strm, filters[0].options); - break; - - case FORMAT_RAW: - ret = lzma_raw_encoder(&strm, filters); - break; - } - } else { - const uint32_t flags = LZMA_TELL_UNSUPPORTED_CHECK - | LZMA_CONCATENATED; - - // We abuse FORMAT_AUTO to indicate unknown file format, - // for which we may consider passthru mode. - enum format_type init_format = FORMAT_AUTO; - - switch (opt_format) { - case FORMAT_AUTO: - if (is_format_xz()) - init_format = FORMAT_XZ; - else if (is_format_lzma()) - init_format = FORMAT_LZMA; - break; - - case FORMAT_XZ: - if (is_format_xz()) - init_format = FORMAT_XZ; - break; - - case FORMAT_LZMA: - if (is_format_lzma()) - init_format = FORMAT_LZMA; - break; - - case FORMAT_RAW: - init_format = FORMAT_RAW; - break; - } - - switch (init_format) { - case FORMAT_AUTO: - // Uknown file format. If --decompress --stdout - // --force have been given, then we copy the input - // as is to stdout. Checking for MODE_DECOMPRESS - // is needed, because we don't want to do use - // passthru mode with --test. - if (opt_mode == MODE_DECOMPRESS - && opt_stdout && opt_force) - return CODER_INIT_PASSTHRU; - - ret = LZMA_FORMAT_ERROR; - break; - - case FORMAT_XZ: - ret = lzma_stream_decoder(&strm, - hardware_memlimit_get(), flags); - break; - - case FORMAT_LZMA: - ret = lzma_alone_decoder(&strm, - hardware_memlimit_get()); - break; - - case FORMAT_RAW: - // Memory usage has already been checked in - // coder_set_compression_settings(). - ret = lzma_raw_decoder(&strm, filters); - break; - } - } - - if (ret != LZMA_OK) { - message_error("%s: %s", pair->src_name, message_strm(ret)); - return CODER_INIT_ERROR; - } - - return CODER_INIT_NORMAL; -} - - -/// Compress or decompress using liblzma. -static bool -coder_normal(file_pair *pair) -{ - // Encoder needs to know when we have given all the input to it. - // The decoders need to know it too when we are using - // LZMA_CONCATENATED. We need to check for src_eof here, because - // the first input chunk has been already read, and that may - // have been the only chunk we will read. - lzma_action action = pair->src_eof ? LZMA_FINISH : LZMA_RUN; - - lzma_ret ret; - - // Assume that something goes wrong. - bool success = false; - - strm.next_out = out_buf; - strm.avail_out = IO_BUFFER_SIZE; - - while (!user_abort) { - // Fill the input buffer if it is empty and we haven't reached - // end of file yet. - if (strm.avail_in == 0 && !pair->src_eof) { - strm.next_in = in_buf; - strm.avail_in = io_read(pair, in_buf, IO_BUFFER_SIZE); - - if (strm.avail_in == SIZE_MAX) - break; - - if (pair->src_eof) - action = LZMA_FINISH; - } - - // Let liblzma do the actual work. - ret = lzma_code(&strm, action); - - // Write out if the output buffer became full. - if (strm.avail_out == 0) { - if (opt_mode != MODE_TEST && io_write(pair, out_buf, - IO_BUFFER_SIZE - strm.avail_out)) - break; - - strm.next_out = out_buf; - strm.avail_out = IO_BUFFER_SIZE; - } - - if (ret != LZMA_OK) { - // Determine if the return value indicates that we - // won't continue coding. - const bool stop = ret != LZMA_NO_CHECK - && ret != LZMA_UNSUPPORTED_CHECK; - - if (stop) { - // Write the remaining bytes even if something - // went wrong, because that way the user gets - // as much data as possible, which can be good - // when trying to get at least some useful - // data out of damaged files. - if (opt_mode != MODE_TEST && io_write(pair, - out_buf, IO_BUFFER_SIZE - - strm.avail_out)) - break; - } - - if (ret == LZMA_STREAM_END) { - // Check that there is no trailing garbage. - // This is needed for LZMA_Alone and raw - // streams. - if (strm.avail_in == 0 && !pair->src_eof) { - // Try reading one more byte. - // Hopefully we don't get any more - // input, and thus pair->src_eof - // becomes true. - strm.avail_in = io_read( - pair, in_buf, 1); - if (strm.avail_in == SIZE_MAX) - break; - - assert(strm.avail_in == 0 - || strm.avail_in == 1); - } - - if (strm.avail_in == 0) { - assert(pair->src_eof); - success = true; - break; - } - - // We hadn't reached the end of the file. - ret = LZMA_DATA_ERROR; - assert(stop); - } - - // If we get here and stop is true, something went - // wrong and we print an error. Otherwise it's just - // a warning and coding can continue. - if (stop) { - message_error("%s: %s", pair->src_name, - message_strm(ret)); - } else { - message_warning("%s: %s", pair->src_name, - message_strm(ret)); - - // When compressing, all possible errors set - // stop to true. - assert(opt_mode != MODE_COMPRESS); - } - - if (ret == LZMA_MEMLIMIT_ERROR) { - // Figure out how much memory it would have - // actually needed. - uint64_t memusage = lzma_memusage(&strm); - uint64_t memlimit = hardware_memlimit_get(); - - // Round the memory limit down and usage up. - // This way we don't display a ridiculous - // message like "Limit was 9 MiB, but 9 MiB - // would have been needed". - memusage = (memusage + 1024 * 1024 - 1) - / (1024 * 1024); - memlimit /= 1024 * 1024; - - message_error(_("Limit was %s MiB, " - "but %s MiB would " - "have been needed"), - uint64_to_str(memlimit, 0), - uint64_to_str(memusage, 1)); - } - - if (stop) - break; - } - - // Show progress information under certain conditions. - message_progress_update(); - } - - return success; -} - - -/// Copy from input file to output file without processing the data in any -/// way. This is used only when trying to decompress unrecognized files -/// with --decompress --stdout --force, so the output is always stdout. -static bool -coder_passthru(file_pair *pair) -{ - while (strm.avail_in != 0) { - if (user_abort) - return false; - - if (io_write(pair, in_buf, strm.avail_in)) - return false; - - strm.total_in += strm.avail_in; - strm.total_out = strm.total_in; - message_progress_update(); - - strm.avail_in = io_read(pair, in_buf, IO_BUFFER_SIZE); - if (strm.avail_in == SIZE_MAX) - return false; - } - - return true; -} - - -extern void -coder_run(const char *filename) -{ - // Try to open the input and output files. - file_pair *pair = io_open(filename); - if (pair == NULL) - return; - - // Initialize the progress indicator. - const uint64_t in_size = pair->src_st.st_size <= (off_t)(0) - ? 0 : (uint64_t)(pair->src_st.st_size); - message_progress_start(&strm, pair->src_name, in_size); - - // Assume that something goes wrong. - bool success = false; - - // Read the first chunk of input data. This is needed to detect - // the input file type (for now, only for decompression). - strm.next_in = in_buf; - strm.avail_in = io_read(pair, in_buf, IO_BUFFER_SIZE); - - switch (coder_init(pair)) { - case CODER_INIT_NORMAL: - success = coder_normal(pair); - break; - - case CODER_INIT_PASSTHRU: - success = coder_passthru(pair); - break; - - case CODER_INIT_ERROR: - break; - } - - message_progress_end(success); - - // Close the file pair. It needs to know if coding was successful to - // know if the source or target file should be unlinked. - io_close(pair, success); - - return; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/coder.h b/Build/source/utils/xz-4.999.9beta/src/xz/coder.h deleted file mode 100644 index 0d3af6ad449..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/coder.h +++ /dev/null @@ -1,57 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file coder.h -/// \brief Compresses or uncompresses a file -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -enum operation_mode { - MODE_COMPRESS, - MODE_DECOMPRESS, - MODE_TEST, - MODE_LIST, -}; - - -// NOTE: The order of these is significant in suffix.c. -enum format_type { - FORMAT_AUTO, - FORMAT_XZ, - FORMAT_LZMA, - // HEADER_GZIP, - FORMAT_RAW, -}; - - -/// Operation mode of the command line tool. This is set in args.c and read -/// in several files. -extern enum operation_mode opt_mode; - -/// File format to use when encoding or what format(s) to accept when -/// decoding. This is a global because it's needed also in suffix.c. -/// This is set in args.c. -extern enum format_type opt_format; - - -/// Set the integrity check type used when compressing -extern void coder_set_check(lzma_check check); - -/// Set preset number -extern void coder_set_preset(size_t new_preset); - -/// Enable extreme mode -extern void coder_set_extreme(void); - -/// Add a filter to the custom filter chain -extern void coder_add_filter(lzma_vli id, void *options); - -/// -extern void coder_set_compression_settings(void); - -/// Compress or decompress the given file -extern void coder_run(const char *filename); diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/file_io.c b/Build/source/utils/xz-4.999.9beta/src/xz/file_io.c deleted file mode 100644 index 4c52da56c59..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/file_io.c +++ /dev/null @@ -1,719 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file file_io.c -/// \brief File opening, unlinking, and closing -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "private.h" - -#include - -#ifdef DOSLIKE -# include -#endif - -#if defined(HAVE_FUTIMES) || defined(HAVE_FUTIMESAT) || defined(HAVE_UTIMES) -# include -#elif defined(HAVE_UTIME) -# include -#endif - -#ifndef O_BINARY -# define O_BINARY 0 -#endif - -#ifndef O_NOCTTY -# define O_NOCTTY 0 -#endif - -#ifndef DOSLIKE -# include "open_stdxxx.h" -static bool warn_fchown; -#endif - - -extern void -io_init(void) -{ -#ifndef DOSLIKE - // Make sure that stdin, stdout, and and stderr are connected to - // a valid file descriptor. Exit immediatelly with exit code ERROR - // if we cannot make the file descriptors valid. Maybe we should - // print an error message, but our stderr could be screwed anyway. - open_stdxxx(E_ERROR); - - // If fchown() fails setting the owner, we warn about it only if - // we are root. - warn_fchown = geteuid() == 0; -#endif - -#ifdef __DJGPP__ - // Avoid doing useless things when statting files. - // This isn't important but doesn't hurt. - _djstat_flags = _STAT_INODE | _STAT_EXEC_EXT - | _STAT_EXEC_MAGIC | _STAT_DIRSIZE; -#endif - - return; -} - - -/// \brief Unlinks a file -/// -/// This tries to verify that the file being unlinked really is the file that -/// we want to unlink by verifying device and inode numbers. There's still -/// a small unavoidable race, but this is much better than nothing (the file -/// could have been moved/replaced even hours earlier). -static void -io_unlink(const char *name, const struct stat *known_st) -{ -#ifdef DOSLIKE - // On Windows, st_ino is meaningless, so don't bother testing it. - // Just silence a compiler warning. - (void)known_st; -#else - struct stat new_st; - - if (lstat(name, &new_st) - || new_st.st_dev != known_st->st_dev - || new_st.st_ino != known_st->st_ino) - message_error(_("%s: File seems to be moved, not removing"), - name); - else -#endif - // There's a race condition between lstat() and unlink() - // but at least we have tried to avoid removing wrong file. - if (unlink(name)) - message_error(_("%s: Cannot remove: %s"), - name, strerror(errno)); - - return; -} - - -/// \brief Copies owner/group and permissions -/// -/// \todo ACL and EA support -/// -static void -io_copy_attrs(const file_pair *pair) -{ - // Skip chown and chmod on Windows. -#ifndef DOSLIKE - // This function is more tricky than you may think at first. - // Blindly copying permissions may permit users to access the - // destination file who didn't have permission to access the - // source file. - - // Try changing the owner of the file. If we aren't root or the owner - // isn't already us, fchown() probably doesn't succeed. We warn - // about failing fchown() only if we are root. - if (fchown(pair->dest_fd, pair->src_st.st_uid, -1) && warn_fchown) - message_warning(_("%s: Cannot set the file owner: %s"), - pair->dest_name, strerror(errno)); - - mode_t mode; - - if (fchown(pair->dest_fd, -1, pair->src_st.st_gid)) { - message_warning(_("%s: Cannot set the file group: %s"), - pair->dest_name, strerror(errno)); - // We can still safely copy some additional permissions: - // `group' must be at least as strict as `other' and - // also vice versa. - // - // NOTE: After this, the owner of the source file may - // get additional permissions. This shouldn't be too bad, - // because the owner would have had permission to chmod - // the original file anyway. - mode = ((pair->src_st.st_mode & 0070) >> 3) - & (pair->src_st.st_mode & 0007); - mode = (pair->src_st.st_mode & 0700) | (mode << 3) | mode; - } else { - // Drop the setuid, setgid, and sticky bits. - mode = pair->src_st.st_mode & 0777; - } - - if (fchmod(pair->dest_fd, mode)) - message_warning(_("%s: Cannot set the file permissions: %s"), - pair->dest_name, strerror(errno)); -#endif - - // Copy the timestamps. We have several possible ways to do this, of - // which some are better in both security and precision. - // - // First, get the nanosecond part of the timestamps. As of writing, - // it's not standardized by POSIX, and there are several names for - // the same thing in struct stat. - long atime_nsec; - long mtime_nsec; - -# if defined(HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC) - // GNU and Solaris - atime_nsec = pair->src_st.st_atim.tv_nsec; - mtime_nsec = pair->src_st.st_mtim.tv_nsec; - -# elif defined(HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC) - // BSD - atime_nsec = pair->src_st.st_atimespec.tv_nsec; - mtime_nsec = pair->src_st.st_mtimespec.tv_nsec; - -# elif defined(HAVE_STRUCT_STAT_ST_ATIMENSEC) - // GNU and BSD without extensions - atime_nsec = pair->src_st.st_atimensec; - mtime_nsec = pair->src_st.st_mtimensec; - -# elif defined(HAVE_STRUCT_STAT_ST_UATIME) - // Tru64 - atime_nsec = pair->src_st.st_uatime * 1000; - mtime_nsec = pair->src_st.st_umtime * 1000; - -# elif defined(HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC) - // UnixWare - atime_nsec = pair->src_st.st_atim.st__tim.tv_nsec; - mtime_nsec = pair->src_st.st_mtim.st__tim.tv_nsec; - -# else - // Safe fallback - atime_nsec = 0; - mtime_nsec = 0; -# endif - - // Construct a structure to hold the timestamps and call appropriate - // function to set the timestamps. -#if defined(HAVE_FUTIMENS) - // Use nanosecond precision. - struct timespec tv[2]; - tv[0].tv_sec = pair->src_st.st_atime; - tv[0].tv_nsec = atime_nsec; - tv[1].tv_sec = pair->src_st.st_mtime; - tv[1].tv_nsec = mtime_nsec; - - (void)futimens(pair->dest_fd, tv); - -#elif defined(HAVE_FUTIMES) || defined(HAVE_FUTIMESAT) || defined(HAVE_UTIMES) - // Use microsecond precision. - struct timeval tv[2]; - tv[0].tv_sec = pair->src_st.st_atime; - tv[0].tv_usec = atime_nsec / 1000; - tv[1].tv_sec = pair->src_st.st_mtime; - tv[1].tv_usec = mtime_nsec / 1000; - -# if defined(HAVE_FUTIMES) - (void)futimes(pair->dest_fd, tv); -# elif defined(HAVE_FUTIMESAT) - (void)futimesat(pair->dest_fd, NULL, tv); -# else - // Argh, no function to use a file descriptor to set the timestamp. - (void)utimes(pair->dest_name, tv); -# endif - -#elif defined(HAVE_UTIME) - // Use one-second precision. utime() doesn't support using file - // descriptor either. Some systems have broken utime() prototype - // so don't make this const. - struct utimbuf buf = { - .actime = pair->src_st.st_atime, - .modtime = pair->src_st.st_mtime, - }; - - // Avoid warnings. - (void)atime_nsec; - (void)mtime_nsec; - - (void)utime(pair->dest_name, &buf); -#endif - - return; -} - - -/// Opens the source file. Returns false on success, true on error. -static bool -io_open_src(file_pair *pair) -{ - // There's nothing to open when reading from stdin. - if (pair->src_name == stdin_filename) { - pair->src_fd = STDIN_FILENO; -#ifdef DOSLIKE - setmode(STDIN_FILENO, O_BINARY); -#endif - return false; - } - - // We accept only regular files if we are writing the output - // to disk too, and if --force was not given. - const bool reg_files_only = !opt_stdout && !opt_force; - - // Flags for open() - int flags = O_RDONLY | O_BINARY | O_NOCTTY; - -#ifndef DOSLIKE - // If we accept only regular files, we need to be careful to avoid - // problems with special files like devices and FIFOs. O_NONBLOCK - // prevents blocking when opening such files. When we want to accept - // special files, we must not use O_NONBLOCK, or otherwise we won't - // block waiting e.g. FIFOs to become readable. - if (reg_files_only) - flags |= O_NONBLOCK; -#endif - -#if defined(O_NOFOLLOW) - if (reg_files_only) - flags |= O_NOFOLLOW; -#elif !defined(DOSLIKE) - // Some POSIX-like systems lack O_NOFOLLOW (it's not required - // by POSIX). Check for symlinks with a separate lstat() on - // these systems. - if (reg_files_only) { - struct stat st; - if (lstat(pair->src_name, &st)) { - message_error("%s: %s", pair->src_name, - strerror(errno)); - return true; - - } else if (S_ISLNK(st.st_mode)) { - message_warning(_("%s: Is a symbolic link, " - "skipping"), pair->src_name); - return true; - } - } -#endif - - // Try to open the file. If we are accepting non-regular files, - // unblock the caught signals so that open() can be interrupted - // if it blocks e.g. due to a FIFO file. - if (!reg_files_only) - signals_unblock(); - - // Maybe this wouldn't need a loop, since all the signal handlers for - // which we don't use SA_RESTART set user_abort to true. But it - // doesn't hurt to have it just in case. - do { - pair->src_fd = open(pair->src_name, flags); - } while (pair->src_fd == -1 && errno == EINTR && !user_abort); - - if (!reg_files_only) - signals_block(); - - if (pair->src_fd == -1) { - // If we were interrupted, don't display any error message. - if (errno == EINTR) { - // All the signals that don't have SA_RESTART - // set user_abort. - assert(user_abort); - return true; - } - -#ifdef O_NOFOLLOW - // Give an understandable error message in if reason - // for failing was that the file was a symbolic link. - // - // Note that at least Linux, OpenBSD, Solaris, and Darwin - // use ELOOP to indicate if O_NOFOLLOW was the reason - // that open() failed. Because there may be - // directories in the pathname, ELOOP may occur also - // because of a symlink loop in the directory part. - // So ELOOP doesn't tell us what actually went wrong. - // - // FreeBSD associates EMLINK with O_NOFOLLOW and - // Tru64 uses ENOTSUP. We use these directly here - // and skip the lstat() call and the associated race. - // I want to hear if there are other kernels that - // fail with something else than ELOOP with O_NOFOLLOW. - bool was_symlink = false; - -# if defined(__FreeBSD__) || defined(__DragonFly__) - if (errno == EMLINK) - was_symlink = true; - -# elif defined(__digital__) && defined(__unix__) - if (errno == ENOTSUP) - was_symlink = true; - -# elif defined(__NetBSD__) - // FIXME? As of 2008-11-20, NetBSD doesn't document what - // errno is used with O_NOFOLLOW. It seems to be EFTYPE, - // but since it isn't documented, it may be wrong to rely - // on it here. - if (errno == EFTYPE) - was_symlink = true; - -# else - if (errno == ELOOP && reg_files_only) { - const int saved_errno = errno; - struct stat st; - if (lstat(pair->src_name, &st) == 0 - && S_ISLNK(st.st_mode)) - was_symlink = true; - - errno = saved_errno; - } -# endif - - if (was_symlink) - message_warning(_("%s: Is a symbolic link, " - "skipping"), pair->src_name); - else -#endif - // Something else than O_NOFOLLOW failing - // (assuming that the race conditions didn't - // confuse us). - message_error("%s: %s", pair->src_name, - strerror(errno)); - - return true; - } - -#ifndef DOSLIKE - // Drop O_NONBLOCK, which is used only when we are accepting only - // regular files. After the open() call, we want things to block - // instead of giving EAGAIN. - if (reg_files_only) { - flags = fcntl(pair->src_fd, F_GETFL); - if (flags == -1) - goto error_msg; - - flags &= ~O_NONBLOCK; - - if (fcntl(pair->src_fd, F_SETFL, flags)) - goto error_msg; - } -#endif - - // Stat the source file. We need the result also when we copy - // the permissions, and when unlinking. - if (fstat(pair->src_fd, &pair->src_st)) - goto error_msg; - - if (S_ISDIR(pair->src_st.st_mode)) { - message_warning(_("%s: Is a directory, skipping"), - pair->src_name); - goto error; - } - - if (reg_files_only) { - if (!S_ISREG(pair->src_st.st_mode)) { - message_warning(_("%s: Not a regular file, " - "skipping"), pair->src_name); - goto error; - } - - // These are meaningless on Windows. -#ifndef DOSLIKE - if (pair->src_st.st_mode & (S_ISUID | S_ISGID)) { - // gzip rejects setuid and setgid files even - // when --force was used. bzip2 doesn't check - // for them, but calls fchown() after fchmod(), - // and many systems automatically drop setuid - // and setgid bits there. - // - // We accept setuid and setgid files if - // --force was used. We drop these bits - // explicitly in io_copy_attr(). - message_warning(_("%s: File has setuid or " - "setgid bit set, skipping"), - pair->src_name); - goto error; - } - - if (pair->src_st.st_mode & S_ISVTX) { - message_warning(_("%s: File has sticky bit " - "set, skipping"), - pair->src_name); - goto error; - } - - if (pair->src_st.st_nlink > 1) { - message_warning(_("%s: Input file has more " - "than one hard link, " - "skipping"), pair->src_name); - goto error; - } -#endif - } - - return false; - -error_msg: - message_error("%s: %s", pair->src_name, strerror(errno)); -error: - (void)close(pair->src_fd); - return true; -} - - -/// \brief Closes source file of the file_pair structure -/// -/// \param pair File whose src_fd should be closed -/// \param success If true, the file will be removed from the disk if -/// closing succeeds and --keep hasn't been used. -static void -io_close_src(file_pair *pair, bool success) -{ - if (pair->src_fd != STDIN_FILENO && pair->src_fd != -1) { -#ifdef DOSLIKE - (void)close(pair->src_fd); -#endif - - // If we are going to unlink(), do it before closing the file. - // This way there's no risk that someone replaces the file and - // happens to get same inode number, which would make us - // unlink() wrong file. - // - // NOTE: DOS-like systems are an exception to this, because - // they don't allow unlinking files that are open. *sigh* - if (success && !opt_keep_original) - io_unlink(pair->src_name, &pair->src_st); - -#ifndef DOSLIKE - (void)close(pair->src_fd); -#endif - } - - return; -} - - -static bool -io_open_dest(file_pair *pair) -{ - if (opt_stdout || pair->src_fd == STDIN_FILENO) { - // We don't modify or free() this. - pair->dest_name = (char *)"(stdout)"; - pair->dest_fd = STDOUT_FILENO; -#ifdef DOSLIKE - setmode(STDOUT_FILENO, O_BINARY); -#endif - return false; - } - - pair->dest_name = suffix_get_dest_name(pair->src_name); - if (pair->dest_name == NULL) - return true; - - // If --force was used, unlink the target file first. - if (opt_force && unlink(pair->dest_name) && errno != ENOENT) { - message_error("%s: Cannot unlink: %s", - pair->dest_name, strerror(errno)); - free(pair->dest_name); - return true; - } - - if (opt_force && unlink(pair->dest_name) && errno != ENOENT) { - message_error("%s: Cannot unlink: %s", pair->dest_name, - strerror(errno)); - free(pair->dest_name); - return true; - } - - // Open the file. - const int flags = O_WRONLY | O_BINARY | O_NOCTTY | O_CREAT | O_EXCL; - const mode_t mode = S_IRUSR | S_IWUSR; - pair->dest_fd = open(pair->dest_name, flags, mode); - - if (pair->dest_fd == -1) { - // Don't bother with error message if user requested - // us to exit anyway. - if (!user_abort) - message_error("%s: %s", pair->dest_name, - strerror(errno)); - - free(pair->dest_name); - return true; - } - - // If this really fails... well, we have a safe fallback. - if (fstat(pair->dest_fd, &pair->dest_st)) { - pair->dest_st.st_dev = 0; - pair->dest_st.st_ino = 0; - } - - return false; -} - - -/// \brief Closes destination file of the file_pair structure -/// -/// \param pair File whose dest_fd should be closed -/// \param success If false, the file will be removed from the disk. -/// -/// \return Zero if closing succeeds. On error, -1 is returned and -/// error message printed. -static int -io_close_dest(file_pair *pair, bool success) -{ - if (pair->dest_fd == -1 || pair->dest_fd == STDOUT_FILENO) - return 0; - - if (close(pair->dest_fd)) { - message_error(_("%s: Closing the file failed: %s"), - pair->dest_name, strerror(errno)); - - // Closing destination file failed, so we cannot trust its - // contents. Get rid of junk: - io_unlink(pair->dest_name, &pair->dest_st); - free(pair->dest_name); - return -1; - } - - // If the operation using this file wasn't successful, we git rid - // of the junk file. - if (!success) - io_unlink(pair->dest_name, &pair->dest_st); - - free(pair->dest_name); - - return 0; -} - - -extern file_pair * -io_open(const char *src_name) -{ - if (is_empty_filename(src_name)) - return NULL; - - // Since we have only one file open at a time, we can use - // a statically allocated structure. - static file_pair pair; - - pair = (file_pair){ - .src_name = src_name, - .dest_name = NULL, - .src_fd = -1, - .dest_fd = -1, - .src_eof = false, - }; - - // Block the signals, for which we have a custom signal handler, so - // that we don't need to worry about EINTR. - signals_block(); - - file_pair *ret = NULL; - if (!io_open_src(&pair)) { - // io_open_src() may have unblocked the signals temporarily, - // and thus user_abort may have got set even if open() - // succeeded. - if (user_abort || io_open_dest(&pair)) - io_close_src(&pair, false); - else - ret = &pair; - } - - signals_unblock(); - - return ret; -} - - -extern void -io_close(file_pair *pair, bool success) -{ - signals_block(); - - if (success && pair->dest_fd != STDOUT_FILENO) - io_copy_attrs(pair); - - // Close the destination first. If it fails, we must not remove - // the source file! - if (io_close_dest(pair, success)) - success = false; - - // Close the source file, and unlink it if the operation using this - // file pair was successful and we haven't requested to keep the - // source file. - io_close_src(pair, success); - - signals_unblock(); - - return; -} - - -extern size_t -io_read(file_pair *pair, uint8_t *buf, size_t size) -{ - // We use small buffers here. - assert(size < SSIZE_MAX); - - size_t left = size; - - while (left > 0) { - const ssize_t amount = read(pair->src_fd, buf, left); - - if (amount == 0) { - pair->src_eof = true; - break; - } - - if (amount == -1) { - if (errno == EINTR) { - if (user_abort) - return SIZE_MAX; - - continue; - } - - message_error(_("%s: Read error: %s"), - pair->src_name, strerror(errno)); - - // FIXME Is this needed? - pair->src_eof = true; - - return SIZE_MAX; - } - - buf += (size_t)(amount); - left -= (size_t)(amount); - } - - return size - left; -} - - -extern bool -io_write(const file_pair *pair, const uint8_t *buf, size_t size) -{ - assert(size < SSIZE_MAX); - - while (size > 0) { - const ssize_t amount = write(pair->dest_fd, buf, size); - if (amount == -1) { - if (errno == EINTR) { - if (user_abort) - return -1; - - continue; - } - - // Handle broken pipe specially. gzip and bzip2 - // don't print anything on SIGPIPE. In addition, - // gzip --quiet uses exit status 2 (warning) on - // broken pipe instead of whatever raise(SIGPIPE) - // would make it return. It is there to hide "Broken - // pipe" message on some old shells (probably old - // GNU bash). - // - // We don't do anything special with --quiet, which - // is what bzip2 does too. If we get SIGPIPE, we - // will handle it like other signals by setting - // user_abort, and get EPIPE here. - if (errno != EPIPE) - message_error(_("%s: Write error: %s"), - pair->dest_name, strerror(errno)); - - return true; - } - - buf += (size_t)(amount); - size -= (size_t)(amount); - } - - return false; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/file_io.h b/Build/source/utils/xz-4.999.9beta/src/xz/file_io.h deleted file mode 100644 index b0bbe11a834..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/file_io.h +++ /dev/null @@ -1,86 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file file_io.h -/// \brief I/O types and functions -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -// Some systems have suboptimal BUFSIZ. Use a bit bigger value on them. -#if BUFSIZ <= 1024 -# define IO_BUFFER_SIZE 8192 -#else -# define IO_BUFFER_SIZE BUFSIZ -#endif - - -typedef struct { - /// Name of the source filename (as given on the command line) or - /// pointer to static "(stdin)" when reading from standard input. - const char *src_name; - - /// Destination filename converted from src_name or pointer to static - /// "(stdout)" when writing to standard output. - char *dest_name; - - /// File descriptor of the source file - int src_fd; - - /// File descriptor of the target file - int dest_fd; - - /// Stat of the source file. - struct stat src_st; - - /// Stat of the destination file. - struct stat dest_st; - - /// True once end of the source file has been detected. - bool src_eof; - -} file_pair; - - -/// \brief Initialize the I/O module -extern void io_init(void); - - -/// \brief Opens a file pair -extern file_pair *io_open(const char *src_name); - - -/// \brief Closes the file descriptors and frees possible allocated memory -/// -/// The success argument determines if source or destination file gets -/// unlinked: -/// - false: The destination file is unlinked. -/// - true: The source file is unlinked unless writing to stdout or --keep -/// was used. -extern void io_close(file_pair *pair, bool success); - - -/// \brief Reads from the source file to a buffer -/// -/// \param pair File pair having the source file open for reading -/// \param buf Destination buffer to hold the read data -/// \param size Size of the buffer; assumed be smaller than SSIZE_MAX -/// -/// \return On success, number of bytes read is returned. On end of -/// file zero is returned and pair->src_eof set to true. -/// On error, SIZE_MAX is returned and error message printed. -extern size_t io_read(file_pair *pair, uint8_t *buf, size_t size); - - -/// \brief Writes a buffer to the destination file -/// -/// \param pair File pair having the destination file open for writing -/// \param buf Buffer containing the data to be written -/// \param size Size of the buffer; assumed be smaller than SSIZE_MAX -/// -/// \return On success, zero is returned. On error, -1 is returned -/// and error message printed. -extern bool io_write(const file_pair *pair, const uint8_t *buf, size_t size); diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/hardware.c b/Build/source/utils/xz-4.999.9beta/src/xz/hardware.c deleted file mode 100644 index 72dc2cb10ca..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/hardware.c +++ /dev/null @@ -1,95 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file hardware.c -/// \brief Detection of available hardware resources -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "private.h" -#include "physmem.h" -#include "cpucores.h" - - -/// Maximum number of free *coder* threads. This can be set with -/// the --threads=NUM command line option. -static uint32_t threadlimit; - -/// Memory usage limit -static uint64_t memlimit; - - -extern void -hardware_threadlimit_set(uint32_t new_threadlimit) -{ - if (new_threadlimit == 0) { - // The default is the number of available CPU cores. - threadlimit = cpucores(); - if (threadlimit == 0) - threadlimit = 1; - } else { - threadlimit = new_threadlimit; - } - - return; -} - - -extern uint32_t -hardware_threadlimit_get(void) -{ - return threadlimit; -} - - -extern void -hardware_memlimit_set(uint64_t new_memlimit) -{ - if (new_memlimit == 0) { - // The default is 40 % of total installed physical RAM. - hardware_memlimit_set_percentage(40); - } else { - memlimit = new_memlimit; - } - - return; -} - - -extern void -hardware_memlimit_set_percentage(uint32_t percentage) -{ - assert(percentage > 0); - assert(percentage <= 100); - - uint64_t mem = physmem(); - - // If we cannot determine the amount of RAM, assume 32 MiB. Maybe - // even that is too much on some systems. But on most systems it's - // far too little, and can be annoying. - if (mem == 0) - mem = UINT64_C(32) * 1024 * 1024; - - memlimit = percentage * mem / 100; - return; -} - - -extern uint64_t -hardware_memlimit_get(void) -{ - return memlimit; -} - - -extern void -hardware_init(void) -{ - hardware_memlimit_set(0); - hardware_threadlimit_set(0); - return; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/hardware.h b/Build/source/utils/xz-4.999.9beta/src/xz/hardware.h deleted file mode 100644 index b2cf34cbc8c..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/hardware.h +++ /dev/null @@ -1,35 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file hardware.h -/// \brief Detection of available hardware resources -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -/// Initialize some hardware-specific variables, which are needed by other -/// hardware_* functions. -extern void hardware_init(void); - - -/// Set custom value for maximum number of coder threads. -extern void hardware_threadlimit_set(uint32_t threadlimit); - -/// Get the maximum number of coder threads. Some additional helper threads -/// are allowed on top of this). -extern uint32_t hardware_threadlimit_get(void); - - -/// Set custom memory usage limit. This is used for both encoding and -/// decoding. Zero indicates resetting the limit back to defaults. -extern void hardware_memlimit_set(uint64_t memlimit); - -/// Set custom memory usage limit as a percentage of installed RAM. -/// The percentage must be in the range [1, 100]. -extern void hardware_memlimit_set_percentage(uint32_t percentage); - -/// Get the current memory usage limit. -extern uint64_t hardware_memlimit_get(void); diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/main.c b/Build/source/utils/xz-4.999.9beta/src/xz/main.c deleted file mode 100644 index 4121f8d48bc..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/main.c +++ /dev/null @@ -1,312 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file main.c -/// \brief main() -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "private.h" -#include - - -/// Exit status to use. This can be changed with set_exit_status(). -static enum exit_status_type exit_status = E_SUCCESS; - -/// True if --no-warn is specified. When this is true, we don't set -/// the exit status to E_WARNING when something worth a warning happens. -static bool no_warn = false; - - -extern void -set_exit_status(enum exit_status_type new_status) -{ - assert(new_status == E_WARNING || new_status == E_ERROR); - - if (exit_status != E_ERROR) - exit_status = new_status; - - return; -} - - -extern void -set_exit_no_warn(void) -{ - no_warn = true; - return; -} - - -extern void -my_exit(enum exit_status_type status) -{ - // Close stdout. If something goes wrong, print an error message - // to stderr. - { - const int ferror_err = ferror(stdout); - const int fclose_err = fclose(stdout); - if (ferror_err || fclose_err) { - // If it was fclose() that failed, we have the reason - // in errno. If only ferror() indicated an error, - // we have no idea what the reason was. - message(V_ERROR, "%s: %s", _("Writing to standard " - "output failed"), - fclose_err ? strerror(errno) - : _("Unknown error")); - status = E_ERROR; - } - } - - // Close stderr. If something goes wrong, there's nothing where we - // could print an error message. Just set the exit status. - { - const int ferror_err = ferror(stderr); - const int fclose_err = fclose(stderr); - if (fclose_err || ferror_err) - status = E_ERROR; - } - - // Suppress the exit status indicating a warning if --no-warn - // was specified. - if (status == E_WARNING && no_warn) - status = E_SUCCESS; - - // If we have got a signal, raise it to kill the program. - // Otherwise we just call exit(). - signals_exit(); - exit(status); -} - - -static const char * -read_name(const args_info *args) -{ - // FIXME: Maybe we should have some kind of memory usage limit here - // like the tool has for the actual compression and uncompression. - // Giving some huge text file with --files0 makes us to read the - // whole file in RAM. - static char *name = NULL; - static size_t size = 256; - - // Allocate the initial buffer. This is never freed, since after it - // is no longer needed, the program exits very soon. It is safe to - // use xmalloc() and xrealloc() in this function, because while - // executing this function, no files are open for writing, and thus - // there's no need to cleanup anything before exiting. - if (name == NULL) - name = xmalloc(size); - - // Write position in name - size_t pos = 0; - - // Read one character at a time into name. - while (!user_abort) { - const int c = fgetc(args->files_file); - - if (ferror(args->files_file)) { - // Take care of EINTR since we have established - // the signal handlers already. - if (errno == EINTR) - continue; - - message_error(_("%s: Error reading filenames: %s"), - args->files_name, strerror(errno)); - return NULL; - } - - if (feof(args->files_file)) { - if (pos != 0) - message_error(_("%s: Unexpected end of input " - "when reading filenames"), - args->files_name); - - return NULL; - } - - if (c == args->files_delim) { - // We allow consecutive newline (--files) or '\0' - // characters (--files0), and ignore such empty - // filenames. - if (pos == 0) - continue; - - // A non-empty name was read. Terminate it with '\0' - // and return it. - name[pos] = '\0'; - return name; - } - - if (c == '\0') { - // A null character was found when using --files, - // which expects plain text input separated with - // newlines. - message_error(_("%s: Null character found when " - "reading filenames; maybe you meant " - "to use `--files0' instead " - "of `--files'?"), args->files_name); - return NULL; - } - - name[pos++] = c; - - // Allocate more memory if needed. There must always be space - // at least for one character to allow terminating the string - // with '\0'. - if (pos == size) { - size *= 2; - name = xrealloc(name, size); - } - } - - return NULL; -} - - -int -main(int argc, char **argv) -{ - // Initialize the file I/O as the very first step. This makes sure - // that stdin, stdout, and stderr are something valid. - io_init(); - -#ifdef DOSLIKE - // Adjust argv[0] to make it look nicer in messages, and also to - // help the code in args.c. - { - // Strip the leading path. - char *p = argv[0] + strlen(argv[0]); - while (argv[0] < p && p[-1] != '/' && p[-1] != '\\') - --p; - - argv[0] = p; - - // Strip the .exe suffix. - p = strrchr(p, '.'); - if (p != NULL) - *p = '\0'; - - // Make it lowercase. - for (p = argv[0]; *p != '\0'; ++p) - if (*p >= 'A' && *p <= 'Z') - *p = *p - 'A' + 'a'; - } -#endif - - // Set up the locale. - setlocale(LC_ALL, ""); - -#ifdef ENABLE_NLS - // Set up the message translations too. - bindtextdomain(PACKAGE, LOCALEDIR); - textdomain(PACKAGE); -#endif - - // Set the program invocation name used in various messages, and - // do other message handling related initializations. - message_init(argv[0]); - - // Set hardware-dependent default values. These can be overriden - // on the command line, thus this must be done before parse_args(). - hardware_init(); - - // Parse the command line arguments and get an array of filenames. - // This doesn't return if something is wrong with the command line - // arguments. If there are no arguments, one filename ("-") is still - // returned to indicate stdin. - args_info args; - args_parse(&args, argc, argv); - - // Tell the message handling code how many input files there are if - // we know it. This way the progress indicator can show it. - if (args.files_name != NULL) - message_set_files(0); - else - message_set_files(args.arg_count); - - // Refuse to write compressed data to standard output if it is - // a terminal and --force wasn't used. - if (opt_mode == MODE_COMPRESS && !opt_force) { - if (opt_stdout || (args.arg_count == 1 - && strcmp(args.arg_names[0], "-") == 0)) { - if (is_tty_stdout()) { - message_try_help(); - my_exit(E_ERROR); - } - } - } - - if (opt_mode == MODE_LIST) { - message_fatal("--list is not implemented yet."); - } - - // Hook the signal handlers. We don't need these before we start - // the actual action, so this is done after parsing the command - // line arguments. - signals_init(); - - // Process the files given on the command line. Note that if no names - // were given, parse_args() gave us a fake "-" filename. - for (size_t i = 0; i < args.arg_count && !user_abort; ++i) { - if (strcmp("-", args.arg_names[i]) == 0) { - // Processing from stdin to stdout. Unless --force - // was used, check that we aren't writing compressed - // data to a terminal or reading it from terminal. - if (!opt_force) { - if (opt_mode == MODE_COMPRESS) { - if (is_tty_stdout()) - continue; - } else if (is_tty_stdin()) { - continue; - } - } - - // It doesn't make sense to compress data from stdin - // if we are supposed to read filenames from stdin - // too (enabled with --files or --files0). - if (args.files_name == stdin_filename) { - message_error(_("Cannot read data from " - "standard input when " - "reading filenames " - "from standard input")); - continue; - } - - // Replace the "-" with a special pointer, which is - // recognized by coder_run() and other things. - // This way error messages get a proper filename - // string and the code still knows that it is - // handling the special case of stdin. - args.arg_names[i] = (char *)stdin_filename; - } - - // Do the actual compression or uncompression. - coder_run(args.arg_names[i]); - } - - // If --files or --files0 was used, process the filenames from the - // given file or stdin. Note that here we don't consider "-" to - // indicate stdin like we do with the command line arguments. - if (args.files_name != NULL) { - // read_name() checks for user_abort so we don't need to - // check it as loop termination condition. - while (true) { - const char *name = read_name(&args); - if (name == NULL) - break; - - // read_name() doesn't return empty names. - assert(name[0] != '\0'); - coder_run(name); - } - - if (args.files_name != stdin_filename) - (void)fclose(args.files_file); - } - - my_exit(exit_status); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/main.h b/Build/source/utils/xz-4.999.9beta/src/xz/main.h deleted file mode 100644 index 8fd923930f9..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/main.h +++ /dev/null @@ -1,37 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file main.h -/// \brief Miscellanous declarations -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -/// Possible exit status values. These are the same as used by gzip and bzip2. -enum exit_status_type { - E_SUCCESS = 0, - E_ERROR = 1, - E_WARNING = 2, -}; - - -/// Sets the exit status after a warning or error has occurred. If new_status -/// is E_WARNING and the old exit status was already E_ERROR, the exit -/// status is not changed. -extern void set_exit_status(enum exit_status_type new_status); - - -/// Use E_SUCCESS instead of E_WARNING if something worth a warning occurs -/// but nothing worth an error has occurred. This is called when --no-warn -/// is specified. -extern void set_exit_no_warn(void); - - -/// Exits the program using the given status. This takes care of closing -/// stdin, stdout, and stderr and catches possible errors. If we had got -/// a signal, this function will raise it so that to the parent process it -/// appears that we were killed by the signal sent by the user. -extern void my_exit(enum exit_status_type status) lzma_attribute((noreturn)); diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/message.c b/Build/source/utils/xz-4.999.9beta/src/xz/message.c deleted file mode 100644 index 19aff9bdb41..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/message.c +++ /dev/null @@ -1,1172 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file message.c -/// \brief Printing messages to stderr -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "private.h" - -#ifdef HAVE_SYS_TIME_H -# include -#endif - -#include - - -/// Name of the program which is prefixed to the error messages. -static const char *argv0; - -/// Number of the current file -static unsigned int files_pos = 0; - -/// Total number of input files; zero if unknown. -static unsigned int files_total; - -/// Verbosity level -static enum message_verbosity verbosity = V_WARNING; - -/// Filename which we will print with the verbose messages -static const char *filename; - -/// True once the a filename has been printed to stderr as part of progress -/// message. If automatic progress updating isn't enabled, this becomes true -/// after the first progress message has been printed due to user sending -/// SIGINFO, SIGUSR1, or SIGALRM. Once this variable is true, we will print -/// an empty line before the next filename to make the output more readable. -static bool first_filename_printed = false; - -/// This is set to true when we have printed the current filename to stderr -/// as part of a progress message. This variable is useful only if not -/// updating progress automatically: if user sends many SIGINFO, SIGUSR1, or -/// SIGALRM signals, we won't print the name of the same file multiple times. -static bool current_filename_printed = false; - -/// True if we should print progress indicator and update it automatically -/// if also verbose >= V_VERBOSE. -static bool progress_automatic; - -/// True if message_progress_start() has been called but -/// message_progress_end() hasn't been called yet. -static bool progress_started = false; - -/// This is true when a progress message was printed and the cursor is still -/// on the same line with the progress message. In that case, a newline has -/// to be printed before any error messages. -static bool progress_active = false; - -/// Pointer to lzma_stream used to do the encoding or decoding. -static lzma_stream *progress_strm; - -/// Expected size of the input stream is needed to show completion percentage -/// and estimate remaining time. -static uint64_t expected_in_size; - -/// Time when we started processing the file -static uint64_t start_time; - - -// Use alarm() and SIGALRM when they are supported. This has two minor -// advantages over the alternative of polling gettimeofday(): -// - It is possible for the user to send SIGINFO, SIGUSR1, or SIGALRM to -// get intermediate progress information even when --verbose wasn't used -// or stderr is not a terminal. -// - alarm() + SIGALRM seems to have slightly less overhead than polling -// gettimeofday(). -#ifdef SIGALRM - -/// The signal handler for SIGALRM sets this to true. It is set back to false -/// once the progress message has been updated. -static volatile sig_atomic_t progress_needs_updating = false; - -/// Signal handler for SIGALRM -static void -progress_signal_handler(int sig lzma_attribute((unused))) -{ - progress_needs_updating = true; - return; -} - -#else - -/// This is true when progress message printing is wanted. Using the same -/// variable name as above to avoid some ifdefs. -static bool progress_needs_updating = false; - -/// Elapsed time when the next progress message update should be done. -static uint64_t progress_next_update; - -#endif - - -/// Get the current time as microseconds since epoch -static uint64_t -my_time(void) -{ - struct timeval tv; - gettimeofday(&tv, NULL); - return (uint64_t)(tv.tv_sec) * UINT64_C(1000000) + tv.tv_usec; -} - - -/// Wrapper for snprintf() to help constructing a string in pieces. -static void lzma_attribute((format(printf, 3, 4))) -my_snprintf(char **pos, size_t *left, const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - const int len = vsnprintf(*pos, *left, fmt, ap); - va_end(ap); - - // If an error occurred, we want the caller to think that the whole - // buffer was used. This way no more data will be written to the - // buffer. We don't need better error handling here. - if (len < 0 || (size_t)(len) >= *left) { - *left = 0; - } else { - *pos += len; - *left -= len; - } - - return; -} - - -extern void -message_init(const char *given_argv0) -{ - // Name of the program - argv0 = given_argv0; - - // If --verbose is used, we use a progress indicator if and only - // if stderr is a terminal. If stderr is not a terminal, we print - // verbose information only after finishing the file. As a special - // exception, even if --verbose was not used, user can send SIGALRM - // to make us print progress information once without automatic - // updating. - progress_automatic = isatty(STDERR_FILENO); - - // Commented out because COLUMNS is rarely exported to environment. - // Most users have at least 80 columns anyway, let's think something - // fancy here if enough people complain. -/* - if (progress_automatic) { - // stderr is a terminal. Check the COLUMNS environment - // variable to see if the terminal is wide enough. If COLUMNS - // doesn't exist or it has some unparseable value, we assume - // that the terminal is wide enough. - const char *columns_str = getenv("COLUMNS"); - if (columns_str != NULL) { - char *endptr; - const long columns = strtol(columns_str, &endptr, 10); - if (*endptr != '\0' || columns < 80) - progress_automatic = false; - } - } -*/ - -#ifdef SIGALRM - // At least DJGPP lacks SA_RESTART. It's not essential for us (the - // rest of the code can handle interrupted system calls), so just - // define it zero. -# ifndef SA_RESTART -# define SA_RESTART 0 -# endif - // Establish the signal handlers which set a flag to tell us that - // progress info should be updated. Since these signals don't - // require any quick action, we set SA_RESTART. - static const int sigs[] = { -#ifdef SIGALRM - SIGALRM, -#endif -#ifdef SIGINFO - SIGINFO, -#endif -#ifdef SIGUSR1 - SIGUSR1, -#endif - }; - - struct sigaction sa; - sigemptyset(&sa.sa_mask); - sa.sa_flags = SA_RESTART; - sa.sa_handler = &progress_signal_handler; - - for (size_t i = 0; i < ARRAY_SIZE(sigs); ++i) - if (sigaction(sigs[i], &sa, NULL)) - message_signal_handler(); -#endif - - return; -} - - -extern void -message_verbosity_increase(void) -{ - if (verbosity < V_DEBUG) - ++verbosity; - - return; -} - - -extern void -message_verbosity_decrease(void) -{ - if (verbosity > V_SILENT) - --verbosity; - - return; -} - - -extern void -message_set_files(unsigned int files) -{ - files_total = files; - return; -} - - -/// Prints the name of the current file if it hasn't been printed already, -/// except if we are processing exactly one stream from stdin to stdout. -/// I think it looks nicer to not print "(stdin)" when --verbose is used -/// in a pipe and no other files are processed. -static void -print_filename(void) -{ - if (!current_filename_printed - && (files_total != 1 || filename != stdin_filename)) { - signals_block(); - - // If a file was already processed, put an empty line - // before the next filename to improve readability. - if (first_filename_printed) - fputc('\n', stderr); - - first_filename_printed = true; - current_filename_printed = true; - - // If we don't know how many files there will be due - // to usage of --files or --files0. - if (files_total == 0) - fprintf(stderr, "%s (%u)\n", filename, - files_pos); - else - fprintf(stderr, "%s (%u/%u)\n", filename, - files_pos, files_total); - - signals_unblock(); - } - - return; -} - - -extern void -message_progress_start( - lzma_stream *strm, const char *src_name, uint64_t in_size) -{ - // Store the pointer to the lzma_stream used to do the coding. - // It is needed to find out the position in the stream. - progress_strm = strm; - - // Store the processing start time of the file and its expected size. - // If we aren't printing any statistics, then these are unused. But - // since it is possible that the user sends us a signal to show - // statistics, we need to have these available anyway. - start_time = my_time(); - filename = src_name; - expected_in_size = in_size; - - // Indicate that progress info may need to be printed before - // printing error messages. - progress_started = true; - - // Indicate the name of this file hasn't been printed to - // stderr yet. - current_filename_printed = false; - - // Start numbering the files starting from one. - ++files_pos; - - // If progress indicator is wanted, print the filename and possibly - // the file count now. - if (verbosity >= V_VERBOSE && progress_automatic) { - // Print the filename to stderr if that is appropriate with - // the current settings. - print_filename(); - - // Start the timer to display the first progress message - // after one second. An alternative would be to show the - // first message almost immediatelly, but delaying by one - // second looks better to me, since extremely early - // progress info is pretty much useless. -#ifdef SIGALRM - // First disable a possibly existing alarm. - alarm(0); - progress_needs_updating = false; - alarm(1); -#else - progress_needs_updating = true; - progress_next_update = 1000000; -#endif - } - - return; -} - - -/// Make the string indicating completion percentage. -static const char * -progress_percentage(uint64_t in_pos, bool final) -{ - static char buf[sizeof("100.0 %")]; - - double percentage; - - if (final) { - // Use floating point conversion of snprintf() also for - // 100.0 % instead of fixed string, because the decimal - // separator isn't a dot in all locales. - percentage = 100.0; - } else { - // If the size of the input file is unknown or the size told us is - // clearly wrong since we have processed more data than the alleged - // size of the file, show a static string indicating that we have - // no idea of the completion percentage. - if (expected_in_size == 0 || in_pos > expected_in_size) - return "--- %"; - - // Never show 100.0 % before we actually are finished. - percentage = (double)(in_pos) / (double)(expected_in_size) - * 99.9; - } - - snprintf(buf, sizeof(buf), "%.1f %%", percentage); - - return buf; -} - - -static void -progress_sizes_helper(char **pos, size_t *left, uint64_t value, bool final) -{ - // Allow high precision only for the final message, since it looks - // stupid for in-progress information. - if (final) { - // At maximum of four digits is allowed for exact byte count. - if (value < 10000) { - my_snprintf(pos, left, "%s B", - uint64_to_str(value, 0)); - return; - } - - // At maximum of five significant digits is allowed for KiB. - if (value < UINT64_C(10239900)) { - my_snprintf(pos, left, "%s KiB", double_to_str( - (double)(value) / 1024.0)); - return; - } - } - - // Otherwise we use MiB. - my_snprintf(pos, left, "%s MiB", - double_to_str((double)(value) / (1024.0 * 1024.0))); - - return; -} - - -/// Make the string containing the amount of input processed, amount of -/// output produced, and the compression ratio. -static const char * -progress_sizes(uint64_t compressed_pos, uint64_t uncompressed_pos, bool final) -{ - // This is enough to hold sizes up to about 99 TiB if thousand - // separator is used, or about 1 PiB without thousand separator. - // After that the progress indicator will look a bit silly, since - // the compression ratio no longer fits with three decimal places. - static char buf[44]; - - char *pos = buf; - size_t left = sizeof(buf); - - // Print the sizes. If this the final message, use more reasonable - // units than MiB if the file was small. - progress_sizes_helper(&pos, &left, compressed_pos, final); - my_snprintf(&pos, &left, " / "); - progress_sizes_helper(&pos, &left, uncompressed_pos, final); - - // Avoid division by zero. If we cannot calculate the ratio, set - // it to some nice number greater than 10.0 so that it gets caught - // in the next if-clause. - const double ratio = uncompressed_pos > 0 - ? (double)(compressed_pos) / (double)(uncompressed_pos) - : 16.0; - - // If the ratio is very bad, just indicate that it is greater than - // 9.999. This way the length of the ratio field stays fixed. - if (ratio > 9.999) - snprintf(pos, left, " > %.3f", 9.999); - else - snprintf(pos, left, " = %.3f", ratio); - - return buf; -} - - -/// Make the string containing the processing speed of uncompressed data. -static const char * -progress_speed(uint64_t uncompressed_pos, uint64_t elapsed) -{ - // Don't print the speed immediatelly, since the early values look - // like somewhat random. - if (elapsed < 3000000) - return ""; - - static const char unit[][8] = { - "KiB/s", - "MiB/s", - "GiB/s", - }; - - size_t unit_index = 0; - - // Calculate the speed as KiB/s. - double speed = (double)(uncompressed_pos) - / ((double)(elapsed) * (1024.0 / 1e6)); - - // Adjust the unit of the speed if needed. - while (speed > 999.0) { - speed /= 1024.0; - if (++unit_index == ARRAY_SIZE(unit)) - return ""; // Way too fast ;-) - } - - // Use decimal point only if the number is small. Examples: - // - 0.1 KiB/s - // - 9.9 KiB/s - // - 99 KiB/s - // - 999 KiB/s - static char buf[sizeof("999 GiB/s")]; - snprintf(buf, sizeof(buf), "%.*f %s", - speed > 9.9 ? 0 : 1, speed, unit[unit_index]); - return buf; -} - - -/// Make a string indicating elapsed or remaining time. The format is either -/// M:SS or H:MM:SS depending on if the time is an hour or more. -static const char * -progress_time(uint64_t useconds) -{ - // 9999 hours = 416 days - static char buf[sizeof("9999:59:59")]; - - uint32_t seconds = useconds / 1000000; - - // Don't show anything if the time is zero or ridiculously big. - if (seconds == 0 || seconds > ((9999 * 60) + 59) * 60 + 59) - return ""; - - uint32_t minutes = seconds / 60; - seconds %= 60; - - if (minutes >= 60) { - const uint32_t hours = minutes / 60; - minutes %= 60; - snprintf(buf, sizeof(buf), - "%" PRIu32 ":%02" PRIu32 ":%02" PRIu32, - hours, minutes, seconds); - } else { - snprintf(buf, sizeof(buf), "%" PRIu32 ":%02" PRIu32, - minutes, seconds); - } - - return buf; -} - - -/// Make the string to contain the estimated remaining time, or if the amount -/// of input isn't known, how much time has elapsed. -static const char * -progress_remaining(uint64_t in_pos, uint64_t elapsed) -{ - // Show the amount of time spent so far when making an estimate of - // remaining time wouldn't be reasonable: - // - Input size is unknown. - // - Input has grown bigger since we started (de)compressing. - // - We haven't processed much data yet, so estimate would be - // too inaccurate. - // - Only a few seconds has passed since we started (de)compressing, - // so estimate would be too inaccurate. - if (expected_in_size == 0 || in_pos > expected_in_size - || in_pos < (UINT64_C(1) << 19) || elapsed < 8000000) - return progress_time(elapsed); - - // Calculate the estimate. Don't give an estimate of zero seconds, - // since it is possible that all the input has been already passed - // to the library, but there is still quite a bit of output pending. - uint32_t remaining = (double)(expected_in_size - in_pos) - * ((double)(elapsed) / 1e6) / (double)(in_pos); - if (remaining < 1) - remaining = 1; - - static char buf[sizeof("9 h 55 min")]; - - // Select appropriate precision for the estimated remaining time. - if (remaining <= 10) { - // At maximum of 10 seconds remaining. - // Show the number of seconds as is. - snprintf(buf, sizeof(buf), "%" PRIu32 " s", remaining); - - } else if (remaining <= 50) { - // At maximum of 50 seconds remaining. - // Round up to the next multiple of five seconds. - remaining = (remaining + 4) / 5 * 5; - snprintf(buf, sizeof(buf), "%" PRIu32 " s", remaining); - - } else if (remaining <= 590) { - // At maximum of 9 minutes and 50 seconds remaining. - // Round up to the next multiple of ten seconds. - remaining = (remaining + 9) / 10 * 10; - snprintf(buf, sizeof(buf), "%" PRIu32 " min %" PRIu32 " s", - remaining / 60, remaining % 60); - - } else if (remaining <= 59 * 60) { - // At maximum of 59 minutes remaining. - // Round up to the next multiple of a minute. - remaining = (remaining + 59) / 60; - snprintf(buf, sizeof(buf), "%" PRIu32 " min", remaining); - - } else if (remaining <= 9 * 3600 + 50 * 60) { - // At maximum of 9 hours and 50 minutes left. - // Round up to the next multiple of ten minutes. - remaining = (remaining + 599) / 600 * 10; - snprintf(buf, sizeof(buf), "%" PRIu32 " h %" PRIu32 " min", - remaining / 60, remaining % 60); - - } else if (remaining <= 23 * 3600) { - // At maximum of 23 hours remaining. - // Round up to the next multiple of an hour. - remaining = (remaining + 3599) / 3600; - snprintf(buf, sizeof(buf), "%" PRIu32 " h", remaining); - - } else if (remaining <= 9 * 24 * 3600 + 23 * 3600) { - // At maximum of 9 days and 23 hours remaining. - // Round up to the next multiple of an hour. - remaining = (remaining + 3599) / 3600; - snprintf(buf, sizeof(buf), "%" PRIu32 " d %" PRIu32 " h", - remaining / 24, remaining % 24); - - } else if (remaining <= 999 * 24 * 3600) { - // At maximum of 999 days remaining. ;-) - // Round up to the next multiple of a day. - remaining = (remaining + 24 * 3600 - 1) / (24 * 3600); - snprintf(buf, sizeof(buf), "%" PRIu32 " d", remaining); - - } else { - // The estimated remaining time is so big that it's better - // that we just show the elapsed time. - return progress_time(elapsed); - } - - return buf; -} - - -/// Calculate the elapsed time as microseconds. -static uint64_t -progress_elapsed(void) -{ - return my_time() - start_time; -} - - -/// Get information about position in the stream. This is currently simple, -/// but it will become more complicated once we have multithreading support. -static void -progress_pos(uint64_t *in_pos, - uint64_t *compressed_pos, uint64_t *uncompressed_pos) -{ - *in_pos = progress_strm->total_in; - - if (opt_mode == MODE_COMPRESS) { - *compressed_pos = progress_strm->total_out; - *uncompressed_pos = progress_strm->total_in; - } else { - *compressed_pos = progress_strm->total_in; - *uncompressed_pos = progress_strm->total_out; - } - - return; -} - - -extern void -message_progress_update(void) -{ - if (!progress_needs_updating) - return; - - // Calculate how long we have been processing this file. - const uint64_t elapsed = progress_elapsed(); - -#ifndef SIGALRM - if (progress_next_update > elapsed) - return; - - progress_next_update = elapsed + 1000000; -#endif - - // Get our current position in the stream. - uint64_t in_pos; - uint64_t compressed_pos; - uint64_t uncompressed_pos; - progress_pos(&in_pos, &compressed_pos, &uncompressed_pos); - - // Block signals so that fprintf() doesn't get interrupted. - signals_block(); - - // Print the filename if it hasn't been printed yet. - print_filename(); - - // Print the actual progress message. The idea is that there is at - // least three spaces between the fields in typical situations, but - // even in rare situations there is at least one space. - fprintf(stderr, " %7s %43s %9s %10s\r", - progress_percentage(in_pos, false), - progress_sizes(compressed_pos, uncompressed_pos, false), - progress_speed(uncompressed_pos, elapsed), - progress_remaining(in_pos, elapsed)); - -#ifdef SIGALRM - // Updating the progress info was finished. Reset - // progress_needs_updating to wait for the next SIGALRM. - // - // NOTE: This has to be done before alarm(1) or with (very) bad - // luck we could be setting this to false after the alarm has already - // been triggered. - progress_needs_updating = false; - - if (verbosity >= V_VERBOSE && progress_automatic) { - // Mark that the progress indicator is active, so if an error - // occurs, the error message gets printed cleanly. - progress_active = true; - - // Restart the timer so that progress_needs_updating gets - // set to true after about one second. - alarm(1); - } else { - // The progress message was printed because user had sent us - // SIGALRM. In this case, each progress message is printed - // on its own line. - fputc('\n', stderr); - } -#else - // When SIGALRM isn't supported and we get here, it's always due to - // automatic progress update. We set progress_active here too like - // described above. - assert(verbosity >= V_VERBOSE); - assert(progress_automatic); - progress_active = true; -#endif - - signals_unblock(); - - return; -} - - -static void -progress_flush(bool finished) -{ - if (!progress_started || verbosity < V_VERBOSE) - return; - - uint64_t in_pos; - uint64_t compressed_pos; - uint64_t uncompressed_pos; - progress_pos(&in_pos, &compressed_pos, &uncompressed_pos); - - // Avoid printing intermediate progress info if some error occurs - // in the beginning of the stream. (If something goes wrong later in - // the stream, it is sometimes useful to tell the user where the - // error approximately occurred, especially if the error occurs - // after a time-consuming operation.) - if (!finished && !progress_active - && (compressed_pos == 0 || uncompressed_pos == 0)) - return; - - progress_active = false; - - const uint64_t elapsed = progress_elapsed(); - const char *elapsed_str = progress_time(elapsed); - - signals_block(); - - // When using the auto-updating progress indicator, the final - // statistics are printed in the same format as the progress - // indicator itself. - if (progress_automatic) { - // Using floating point conversion for the percentage instead - // of static "100.0 %" string, because the decimal separator - // isn't a dot in all locales. - fprintf(stderr, " %7s %43s %9s %10s\n", - progress_percentage(in_pos, finished), - progress_sizes(compressed_pos, uncompressed_pos, true), - progress_speed(uncompressed_pos, elapsed), - elapsed_str); - } else { - // The filename is always printed. - fprintf(stderr, "%s: ", filename); - - // Percentage is printed only if we didn't finish yet. - // FIXME: This may look weird when size of the input - // isn't known. - if (!finished) - fprintf(stderr, "%s, ", - progress_percentage(in_pos, false)); - - // Size information is always printed. - fprintf(stderr, "%s", progress_sizes( - compressed_pos, uncompressed_pos, true)); - - // The speed and elapsed time aren't always shown. - const char *speed = progress_speed(uncompressed_pos, elapsed); - if (speed[0] != '\0') - fprintf(stderr, ", %s", speed); - - if (elapsed_str[0] != '\0') - fprintf(stderr, ", %s", elapsed_str); - - fputc('\n', stderr); - } - - signals_unblock(); - - return; -} - - -extern void -message_progress_end(bool success) -{ - assert(progress_started); - progress_flush(success); - progress_started = false; - return; -} - - -static void -vmessage(enum message_verbosity v, const char *fmt, va_list ap) -{ - if (v <= verbosity) { - signals_block(); - - progress_flush(false); - - fprintf(stderr, "%s: ", argv0); - vfprintf(stderr, fmt, ap); - fputc('\n', stderr); - - signals_unblock(); - } - - return; -} - - -extern void -message(enum message_verbosity v, const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - vmessage(v, fmt, ap); - va_end(ap); - return; -} - - -extern void -message_warning(const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - vmessage(V_WARNING, fmt, ap); - va_end(ap); - - set_exit_status(E_WARNING); - return; -} - - -extern void -message_error(const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - vmessage(V_ERROR, fmt, ap); - va_end(ap); - - set_exit_status(E_ERROR); - return; -} - - -extern void -message_fatal(const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - vmessage(V_ERROR, fmt, ap); - va_end(ap); - - my_exit(E_ERROR); -} - - -extern void -message_bug(void) -{ - message_fatal(_("Internal error (bug)")); -} - - -extern void -message_signal_handler(void) -{ - message_fatal(_("Cannot establish signal handlers")); -} - - -extern const char * -message_strm(lzma_ret code) -{ - switch (code) { - case LZMA_NO_CHECK: - return _("No integrity check; not verifying file integrity"); - - case LZMA_UNSUPPORTED_CHECK: - return _("Unsupported type of integrity check; " - "not verifying file integrity"); - - case LZMA_MEM_ERROR: - return strerror(ENOMEM); - - case LZMA_MEMLIMIT_ERROR: - return _("Memory usage limit reached"); - - case LZMA_FORMAT_ERROR: - return _("File format not recognized"); - - case LZMA_OPTIONS_ERROR: - return _("Unsupported options"); - - case LZMA_DATA_ERROR: - return _("Compressed data is corrupt"); - - case LZMA_BUF_ERROR: - return _("Unexpected end of input"); - - case LZMA_OK: - case LZMA_STREAM_END: - case LZMA_GET_CHECK: - case LZMA_PROG_ERROR: - return _("Internal error (bug)"); - } - - return NULL; -} - - -extern void -message_filters(enum message_verbosity v, const lzma_filter *filters) -{ - if (v > verbosity) - return; - - fprintf(stderr, _("%s: Filter chain:"), argv0); - - for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) { - fprintf(stderr, " --"); - - switch (filters[i].id) { - case LZMA_FILTER_LZMA1: - case LZMA_FILTER_LZMA2: { - const lzma_options_lzma *opt = filters[i].options; - const char *mode; - const char *mf; - - switch (opt->mode) { - case LZMA_MODE_FAST: - mode = "fast"; - break; - - case LZMA_MODE_NORMAL: - mode = "normal"; - break; - - default: - mode = "UNKNOWN"; - break; - } - - switch (opt->mf) { - case LZMA_MF_HC3: - mf = "hc3"; - break; - - case LZMA_MF_HC4: - mf = "hc4"; - break; - - case LZMA_MF_BT2: - mf = "bt2"; - break; - - case LZMA_MF_BT3: - mf = "bt3"; - break; - - case LZMA_MF_BT4: - mf = "bt4"; - break; - - default: - mf = "UNKNOWN"; - break; - } - - fprintf(stderr, "lzma%c=dict=%" PRIu32 - ",lc=%" PRIu32 ",lp=%" PRIu32 - ",pb=%" PRIu32 - ",mode=%s,nice=%" PRIu32 ",mf=%s" - ",depth=%" PRIu32, - filters[i].id == LZMA_FILTER_LZMA2 - ? '2' : '1', - opt->dict_size, - opt->lc, opt->lp, opt->pb, - mode, opt->nice_len, mf, opt->depth); - break; - } - - case LZMA_FILTER_X86: - fprintf(stderr, "x86"); - break; - - case LZMA_FILTER_POWERPC: - fprintf(stderr, "powerpc"); - break; - - case LZMA_FILTER_IA64: - fprintf(stderr, "ia64"); - break; - - case LZMA_FILTER_ARM: - fprintf(stderr, "arm"); - break; - - case LZMA_FILTER_ARMTHUMB: - fprintf(stderr, "armthumb"); - break; - - case LZMA_FILTER_SPARC: - fprintf(stderr, "sparc"); - break; - - case LZMA_FILTER_DELTA: { - const lzma_options_delta *opt = filters[i].options; - fprintf(stderr, "delta=dist=%" PRIu32, opt->dist); - break; - } - - default: - fprintf(stderr, "UNKNOWN"); - break; - } - } - - fputc('\n', stderr); - return; -} - - -extern void -message_try_help(void) -{ - // Print this with V_WARNING instead of V_ERROR to prevent it from - // showing up when --quiet has been specified. - message(V_WARNING, _("Try `%s --help' for more information."), argv0); - return; -} - - -extern void -message_version(void) -{ - // It is possible that liblzma version is different than the command - // line tool version, so print both. - printf("xz (" PACKAGE_NAME ") " LZMA_VERSION_STRING "\n"); - printf("liblzma %s\n", lzma_version_string()); - my_exit(E_SUCCESS); -} - - -extern void -message_help(bool long_help) -{ - printf(_("Usage: %s [OPTION]... [FILE]...\n" - "Compress or decompress FILEs in the .xz format.\n\n"), - argv0); - - puts(_("Mandatory arguments to long options are mandatory for " - "short options too.\n")); - - if (long_help) - puts(_(" Operation mode:\n")); - - puts(_( -" -z, --compress force compression\n" -" -d, --decompress force decompression\n" -" -t, --test test compressed file integrity\n" -" -l, --list list information about files")); - - if (long_help) - puts(_("\n Operation modifiers:\n")); - - puts(_( -" -k, --keep keep (don't delete) input files\n" -" -f, --force force overwrite of output file and (de)compress links\n" -" -c, --stdout write to standard output and don't delete input files")); - - if (long_help) - puts(_( -" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" -" --files=[FILE] read filenames to process from FILE; if FILE is\n" -" omitted, filenames are read from the standard input;\n" -" filenames must be terminated with the newline character\n" -" --files0=[FILE] like --files but use the null character as terminator")); - - if (long_help) { - puts(_("\n Basic file format and compression options:\n")); - puts(_( -" -F, --format=FMT file format to encode or decode; possible values are\n" -" `auto' (default), `xz', `lzma', and `raw'\n" -" -C, --check=CHECK integrity check type: `crc32', `crc64' (default),\n" -" or `sha256'")); - } - - puts(_( -" -0 .. -9 compression preset; 0-2 fast compression, 3-5 good\n" -" compression, 6-9 excellent compression; default is 6")); - - puts(_( -" -e, --extreme use more CPU time when encoding to increase compression\n" -" ratio without increasing memory usage of the decoder")); - - if (long_help) - puts(_( -" -M, --memory=NUM use roughly NUM bytes of memory at maximum; 0 indicates\n" -" the default setting, which depends on the operation mode\n" -" and the amount of physical memory (RAM)")); - - if (long_help) { - puts(_( -"\n Custom filter chain for compression (alternative for using presets):")); - -#if defined(HAVE_ENCODER_LZMA1) || defined(HAVE_DECODER_LZMA1) \ - || defined(HAVE_ENCODER_LZMA2) || defined(HAVE_DECODER_LZMA2) - puts(_( -"\n" -" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n" -" --lzma2[=OPTS] more of the following options (valid values; default):\n" -" preset=NUM reset options to preset number NUM (0-9)\n" -" dict=NUM dictionary size (4KiB - 1536MiB; 8MiB)\n" -" lc=NUM number of literal context bits (0-4; 3)\n" -" lp=NUM number of literal position bits (0-4; 0)\n" -" pb=NUM number of position bits (0-4; 2)\n" -" mode=MODE compression mode (fast, normal; normal)\n" -" nice=NUM nice length of a match (2-273; 64)\n" -" mf=NAME match finder (hc3, hc4, bt2, bt3, bt4; bt4)\n" -" depth=NUM maximum search depth; 0=automatic (default)")); -#endif - - puts(_( -"\n" -" --x86[=OPTS] x86 BCJ filter\n" -" --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n" -" --ia64[=OPTS] IA64 (Itanium) BCJ filter\n" -" --arm[=OPTS] ARM BCJ filter (little endian only)\n" -" --armthumb[=OPTS] ARM-Thumb BCJ filter (little endian only)\n" -" --sparc[=OPTS] SPARC BCJ filter\n" -" Valid OPTS for all BCJ filters:\n" -" start=NUM start offset for conversions (default=0)")); - -#if defined(HAVE_ENCODER_DELTA) || defined(HAVE_DECODER_DELTA) - puts(_( -"\n" -" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n" -" dist=NUM distance between bytes being subtracted\n" -" from each other (1-256; 1)")); -#endif - -#if defined(HAVE_ENCODER_SUBBLOCK) || defined(HAVE_DECODER_SUBBLOCK) - puts(_( -"\n" -" --subblock[=OPTS] Subblock filter; valid OPTS (valid values; default):\n" -" size=NUM number of bytes of data per subblock\n" -" (1 - 256Mi; 4Ki)\n" -" rle=NUM run-length encoder chunk size (0-256; 0)")); -#endif - } - - if (long_help) - puts(_("\n Other options:\n")); - - puts(_( -" -q, --quiet suppress warnings; specify twice to suppress errors too\n" -" -v, --verbose be verbose; specify twice for even more verbose")); - - if (long_help) - puts(_( -" -Q, --no-warn make warnings not affect the exit status")); - - if (long_help) - puts(_( -"\n" -" -h, --help display the short help (lists only the basic options)\n" -" -H, --long-help display this long help")); - else - puts(_( -" -h, --help display this short help\n" -" -H, --long-help display the long help (lists also the advanced options)")); - - puts(_( -" -V, --version display the version number")); - - puts(_("\nWith no FILE, or when FILE is -, read standard input.\n")); - - if (long_help) { - printf(_( -"On this system and configuration, this program will use at maximum of roughly\n" -"%s MiB RAM and "), uint64_to_str(hardware_memlimit_get() / (1024 * 1024), 0)); - printf(N_("one thread.\n\n", "%s threads.\n\n", - hardware_threadlimit_get()), - uint64_to_str(hardware_threadlimit_get(), 0)); - } - - printf(_("Report bugs to <%s> (in English or Finnish).\n"), - PACKAGE_BUGREPORT); - printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_HOMEPAGE); - - my_exit(E_SUCCESS); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/message.h b/Build/source/utils/xz-4.999.9beta/src/xz/message.h deleted file mode 100644 index 16e38b757cf..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/message.h +++ /dev/null @@ -1,132 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file message.h -/// \brief Printing messages to stderr -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -/// Verbosity levels -enum message_verbosity { - V_SILENT, ///< No messages - V_ERROR, ///< Only error messages - V_WARNING, ///< Errors and warnings - V_VERBOSE, ///< Errors, warnings, and verbose statistics - V_DEBUG, ///< Debugging, FIXME remove? -}; - - -/// \brief Initializes the message functions -/// -/// \param argv0 Name of the program i.e. argv[0] from main() -/// \param verbosity Verbosity level -/// -/// If an error occurs, this function doesn't return. -/// -extern void message_init(const char *argv0); - - -/// Increase verbosity level by one step unless it was at maximum. -extern void message_verbosity_increase(void); - -/// Decrease verbosity level by one step unless it was at minimum. -extern void message_verbosity_decrease(void); - - -/// Set the total number of files to be processed (stdin is counted as a file -/// here). The default is one. -extern void message_set_files(unsigned int files); - - -/// \brief Print a message if verbosity level is at least "verbosity" -/// -/// This doesn't touch the exit status. -extern void message(enum message_verbosity verbosity, const char *fmt, ...) - lzma_attribute((format(printf, 2, 3))); - - -/// \brief Prints a warning and possibly sets exit status -/// -/// The message is printed only if verbosity level is at least V_WARNING. -/// The exit status is set to WARNING unless it was already at ERROR. -extern void message_warning(const char *fmt, ...) - lzma_attribute((format(printf, 1, 2))); - - -/// \brief Prints an error message and sets exit status -/// -/// The message is printed only if verbosity level is at least V_ERROR. -/// The exit status is set to ERROR. -extern void message_error(const char *fmt, ...) - lzma_attribute((format(printf, 1, 2))); - - -/// \brief Prints an error message and exits with EXIT_ERROR -/// -/// The message is printed only if verbosity level is at least V_ERROR. -extern void message_fatal(const char *fmt, ...) - lzma_attribute((format(printf, 1, 2))) - lzma_attribute((noreturn)); - - -/// Print an error message that an internal error occurred and exit with -/// EXIT_ERROR. -extern void message_bug(void) lzma_attribute((noreturn)); - - -/// Print a message that establishing signal handlers failed, and exit with -/// exit status ERROR. -extern void message_signal_handler(void) lzma_attribute((noreturn)); - - -/// Convert lzma_ret to a string. -extern const char *message_strm(lzma_ret code); - - -/// Print the filter chain. -extern void message_filters( - enum message_verbosity v, const lzma_filter *filters); - - -/// Print a message that user should try --help. -extern void message_try_help(void); - - -/// Prints the version number to stdout and exits with exit status SUCCESS. -extern void message_version(void) lzma_attribute((noreturn)); - - -/// Print the help message. -extern void message_help(bool long_help) lzma_attribute((noreturn)); - - -/// \brief Start progress info handling -/// -/// This must be paired with a call to message_progress_end() before the -/// given *strm becomes invalid. -/// -/// \param strm Pointer to lzma_stream used for the coding. -/// \param filename Name of the input file. stdin_filename is -/// handled specially. -/// \param in_size Size of the input file, or zero if unknown. -/// -extern void message_progress_start( - lzma_stream *strm, const char *filename, uint64_t in_size); - - -/// Update the progress info if in verbose mode and enough time has passed -/// since the previous update. This can be called only when -/// message_progress_start() has already been used. -extern void message_progress_update(void); - - -/// \brief Finishes the progress message if we were in verbose mode -/// -/// \param finished True if the whole stream was successfully coded -/// and output written to the output stream. -/// -extern void message_progress_end(bool finished); diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/options.c b/Build/source/utils/xz-4.999.9beta/src/xz/options.c deleted file mode 100644 index 8ac6750403f..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/options.c +++ /dev/null @@ -1,438 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file options.c -/// \brief Parser for filter-specific options -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "private.h" - - -/////////////////// -// Generic stuff // -/////////////////// - -typedef struct { - const char *name; - uint64_t id; -} name_id_map; - - -typedef struct { - const char *name; - const name_id_map *map; - uint64_t min; - uint64_t max; -} option_map; - - -/// Parses option=value pairs that are separated with colons, semicolons, -/// or commas: opt=val:opt=val;opt=val,opt=val -/// -/// Each option is a string, that is converted to an integer using the -/// index where the option string is in the array. -/// -/// Value can be -/// - a string-id map mapping a list of possible string values to integers -/// (opts[i].map != NULL, opts[i].min and opts[i].max are ignored); -/// - a number with minimum and maximum value limit -/// (opts[i].map == NULL && opts[i].min != UINT64_MAX); -/// - a string that will be parsed by the filter-specific code -/// (opts[i].map == NULL && opts[i].min == UINT64_MAX, opts[i].max ignored) -/// -/// When parsing both option and value succeed, a filter-specific function -/// is called, which should update the given value to filter-specific -/// options structure. -/// -/// \param str String containing the options from the command line -/// \param opts Filter-specific option map -/// \param set Filter-specific function to update filter_options -/// \param filter_options Pointer to filter-specific options structure -/// -/// \return Returns only if no errors occur. -/// -static void -parse_options(const char *str, const option_map *opts, - void (*set)(void *filter_options, - uint32_t key, uint64_t value, const char *valuestr), - void *filter_options) -{ - if (str == NULL || str[0] == '\0') - return; - - char *s = xstrdup(str); - char *name = s; - - while (true) { - if (*name == ',') { - if (*++name == '\0') - break; - - continue; - } - - char *split = strchr(name, ','); - if (split != NULL) - *split = '\0'; - - char *value = strchr(name, '='); - if (value != NULL) - *value++ = '\0'; - - if (value == NULL || value[0] == '\0') - message_fatal(_("%s: Options must be `name=value' " - "pairs separated with commas"), str); - - // Look for the option name from the option map. - bool found = false; - for (size_t i = 0; opts[i].name != NULL; ++i) { - if (strcmp(name, opts[i].name) != 0) - continue; - - if (opts[i].map != NULL) { - // value is a string which we should map - // to an integer. - size_t j; - for (j = 0; opts[i].map[j].name != NULL; ++j) { - if (strcmp(opts[i].map[j].name, value) - == 0) - break; - } - - if (opts[i].map[j].name == NULL) - message_fatal(_("%s: Invalid option " - "value"), value); - - set(filter_options, i, opts[i].map[j].id, - value); - - } else if (opts[i].min == UINT64_MAX) { - // value is a special string that will be - // parsed by set(). - set(filter_options, i, 0, value); - - } else { - // value is an integer. - const uint64_t v = str_to_uint64(name, value, - opts[i].min, opts[i].max); - set(filter_options, i, v, value); - } - - found = true; - break; - } - - if (!found) - message_fatal(_("%s: Invalid option name"), name); - - if (split == NULL) - break; - - name = split + 1; - } - - free(s); - return; -} - - -////////////// -// Subblock // -////////////// - -enum { - OPT_SIZE, - OPT_RLE, - OPT_ALIGN, -}; - - -static void -set_subblock(void *options, uint32_t key, uint64_t value, - const char *valuestr lzma_attribute((unused))) -{ - lzma_options_subblock *opt = options; - - switch (key) { - case OPT_SIZE: - opt->subblock_data_size = value; - break; - - case OPT_RLE: - opt->rle = value; - break; - - case OPT_ALIGN: - opt->alignment = value; - break; - } -} - - -extern lzma_options_subblock * -options_subblock(const char *str) -{ - static const option_map opts[] = { - { "size", NULL, LZMA_SUBBLOCK_DATA_SIZE_MIN, - LZMA_SUBBLOCK_DATA_SIZE_MAX }, - { "rle", NULL, LZMA_SUBBLOCK_RLE_OFF, - LZMA_SUBBLOCK_RLE_MAX }, - { "align",NULL, LZMA_SUBBLOCK_ALIGNMENT_MIN, - LZMA_SUBBLOCK_ALIGNMENT_MAX }, - { NULL, NULL, 0, 0 } - }; - - lzma_options_subblock *options - = xmalloc(sizeof(lzma_options_subblock)); - *options = (lzma_options_subblock){ - .allow_subfilters = false, - .alignment = LZMA_SUBBLOCK_ALIGNMENT_DEFAULT, - .subblock_data_size = LZMA_SUBBLOCK_DATA_SIZE_DEFAULT, - .rle = LZMA_SUBBLOCK_RLE_OFF, - }; - - parse_options(str, opts, &set_subblock, options); - - return options; -} - - -/////////// -// Delta // -/////////// - -enum { - OPT_DIST, -}; - - -static void -set_delta(void *options, uint32_t key, uint64_t value, - const char *valuestr lzma_attribute((unused))) -{ - lzma_options_delta *opt = options; - switch (key) { - case OPT_DIST: - opt->dist = value; - break; - } -} - - -extern lzma_options_delta * -options_delta(const char *str) -{ - static const option_map opts[] = { - { "dist", NULL, LZMA_DELTA_DIST_MIN, - LZMA_DELTA_DIST_MAX }, - { NULL, NULL, 0, 0 } - }; - - lzma_options_delta *options = xmalloc(sizeof(lzma_options_delta)); - *options = (lzma_options_delta){ - // It's hard to give a useful default for this. - .type = LZMA_DELTA_TYPE_BYTE, - .dist = LZMA_DELTA_DIST_MIN, - }; - - parse_options(str, opts, &set_delta, options); - - return options; -} - - -///////// -// BCJ // -///////// - -enum { - OPT_START_OFFSET, -}; - - -static void -set_bcj(void *options, uint32_t key, uint64_t value, - const char *valuestr lzma_attribute((unused))) -{ - lzma_options_bcj *opt = options; - switch (key) { - case OPT_START_OFFSET: - opt->start_offset = value; - break; - } -} - - -extern lzma_options_bcj * -options_bcj(const char *str) -{ - static const option_map opts[] = { - { "start", NULL, 0, UINT32_MAX }, - { NULL, NULL, 0, 0 } - }; - - lzma_options_bcj *options = xmalloc(sizeof(lzma_options_bcj)); - *options = (lzma_options_bcj){ - .start_offset = 0, - }; - - parse_options(str, opts, &set_bcj, options); - - return options; -} - - -////////// -// LZMA // -////////// - -enum { - OPT_PRESET, - OPT_DICT, - OPT_LC, - OPT_LP, - OPT_PB, - OPT_MODE, - OPT_NICE, - OPT_MF, - OPT_DEPTH, -}; - - -static void lzma_attribute((noreturn)) -error_lzma_preset(const char *valuestr) -{ - message_fatal(_("Unsupported LZMA1/LZMA2 preset: %s"), valuestr); -} - - -static void -set_lzma(void *options, uint32_t key, uint64_t value, const char *valuestr) -{ - lzma_options_lzma *opt = options; - - switch (key) { - case OPT_PRESET: { - if (valuestr[0] < '0' || valuestr[0] > '9') - error_lzma_preset(valuestr); - - uint32_t preset = valuestr[0] - '0'; - - // Currently only "e" is supported as a modifier, - // so keep this simple for now. - if (valuestr[1] != '\0') { - if (valuestr[1] == 'e') - preset |= LZMA_PRESET_EXTREME; - else - error_lzma_preset(valuestr); - - if (valuestr[2] != '\0') - error_lzma_preset(valuestr); - } - - if (lzma_lzma_preset(options, preset)) - error_lzma_preset(valuestr); - - break; - } - - case OPT_DICT: - opt->dict_size = value; - break; - - case OPT_LC: - opt->lc = value; - break; - - case OPT_LP: - opt->lp = value; - break; - - case OPT_PB: - opt->pb = value; - break; - - case OPT_MODE: - opt->mode = value; - break; - - case OPT_NICE: - opt->nice_len = value; - break; - - case OPT_MF: - opt->mf = value; - break; - - case OPT_DEPTH: - opt->depth = value; - break; - } -} - - -extern lzma_options_lzma * -options_lzma(const char *str) -{ - static const name_id_map modes[] = { - { "fast", LZMA_MODE_FAST }, - { "normal", LZMA_MODE_NORMAL }, - { NULL, 0 } - }; - - static const name_id_map mfs[] = { - { "hc3", LZMA_MF_HC3 }, - { "hc4", LZMA_MF_HC4 }, - { "bt2", LZMA_MF_BT2 }, - { "bt3", LZMA_MF_BT3 }, - { "bt4", LZMA_MF_BT4 }, - { NULL, 0 } - }; - - static const option_map opts[] = { - { "preset", NULL, UINT64_MAX, 0 }, - { "dict", NULL, LZMA_DICT_SIZE_MIN, - (UINT32_C(1) << 30) + (UINT32_C(1) << 29) }, - { "lc", NULL, LZMA_LCLP_MIN, LZMA_LCLP_MAX }, - { "lp", NULL, LZMA_LCLP_MIN, LZMA_LCLP_MAX }, - { "pb", NULL, LZMA_PB_MIN, LZMA_PB_MAX }, - { "mode", modes, 0, 0 }, - { "nice", NULL, 2, 273 }, - { "mf", mfs, 0, 0 }, - { "depth", NULL, 0, UINT32_MAX }, - { NULL, NULL, 0, 0 } - }; - - lzma_options_lzma *options = xmalloc(sizeof(lzma_options_lzma)); - *options = (lzma_options_lzma){ - .dict_size = LZMA_DICT_SIZE_DEFAULT, - .preset_dict = NULL, - .preset_dict_size = 0, - .lc = LZMA_LC_DEFAULT, - .lp = LZMA_LP_DEFAULT, - .pb = LZMA_PB_DEFAULT, - .persistent = false, - .mode = LZMA_MODE_NORMAL, - .nice_len = 64, - .mf = LZMA_MF_BT4, - .depth = 0, - }; - - parse_options(str, opts, &set_lzma, options); - - if (options->lc + options->lp > LZMA_LCLP_MAX) - message_fatal(_("The sum of lc and lp must be at " - "maximum of 4")); - - const uint32_t nice_len_min = options->mf & 0x0F; - if (options->nice_len < nice_len_min) - message_fatal(_("The selected match finder requires at " - "least nice=%" PRIu32), nice_len_min); - - return options; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/options.h b/Build/source/utils/xz-4.999.9beta/src/xz/options.h deleted file mode 100644 index e7389c8e99c..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/options.h +++ /dev/null @@ -1,38 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file options.h -/// \brief Parser for filter-specific options -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -/// \brief Parser for Subblock options -/// -/// \return Pointer to allocated options structure. -/// Doesn't return on error. -extern lzma_options_subblock *options_subblock(const char *str); - - -/// \brief Parser for Delta options -/// -/// \return Pointer to allocated options structure. -/// Doesn't return on error. -extern lzma_options_delta *options_delta(const char *str); - - -/// \brief Parser for BCJ options -/// -/// \return Pointer to allocated options structure. -/// Doesn't return on error. -extern lzma_options_bcj *options_bcj(const char *str); - - -/// \brief Parser for LZMA options -/// -/// \return Pointer to allocated options structure. -/// Doesn't return on error. -extern lzma_options_lzma *options_lzma(const char *str); diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/private.h b/Build/source/utils/xz-4.999.9beta/src/xz/private.h deleted file mode 100644 index 6141b88c416..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/private.h +++ /dev/null @@ -1,55 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file private.h -/// \brief Common includes, definions, and prototypes -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "sysdefs.h" -#include "mythread.h" -#include "lzma.h" - -#include -#include -#include -#include -#include -#include -#include - -#ifdef ENABLE_NLS -# include -# define _(msgid) gettext(msgid) -# define N_(msgid1, msgid2, n) ngettext(msgid1, msgid2, n) -#else -# define _(msgid) (msgid) -# define N_(msgid1, msgid2, n) ((n) == 1 ? (msgid1) : (msgid2)) -#endif - -#ifndef STDIN_FILENO -# define STDIN_FILENO (fileno(stdin)) -#endif - -#ifndef STDOUT_FILENO -# define STDOUT_FILENO (fileno(stdout)) -#endif - -#ifndef STDERR_FILENO -# define STDERR_FILENO (fileno(stderr)) -#endif - -#include "main.h" -#include "coder.h" -#include "message.h" -#include "args.h" -#include "hardware.h" -#include "file_io.h" -#include "options.h" -#include "signals.h" -#include "suffix.h" -#include "util.h" diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/signals.c b/Build/source/utils/xz-4.999.9beta/src/xz/signals.c deleted file mode 100644 index c9acab26a00..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/signals.c +++ /dev/null @@ -1,173 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file signals.c -/// \brief Handling signals to abort operation -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "private.h" - - -volatile sig_atomic_t user_abort = false; - - -#ifndef _WIN32 - -/// If we were interrupted by a signal, we store the signal number so that -/// we can raise that signal to kill the program when all cleanups have -/// been done. -static volatile sig_atomic_t exit_signal = 0; - -/// Mask of signals for which have have established a signal handler to set -/// user_abort to true. -static sigset_t hooked_signals; - -/// signals_block() and signals_unblock() can be called recursively. -static size_t signals_block_count = 0; - - -static void -signal_handler(int sig) -{ - exit_signal = sig; - user_abort = true; - return; -} - - -extern void -signals_init(void) -{ - // List of signals for which we establish the signal handler. - static const int sigs[] = { - SIGINT, - SIGTERM, -#ifdef SIGHUP - SIGHUP, -#endif -#ifdef SIGPIPE - SIGPIPE, -#endif -#ifdef SIGXCPU - SIGXCPU, -#endif -#ifdef SIGXFSZ - SIGXFSZ, -#endif - }; - - // Mask of the signals for which we have established a signal handler. - sigemptyset(&hooked_signals); - for (size_t i = 0; i < ARRAY_SIZE(sigs); ++i) - sigaddset(&hooked_signals, sigs[i]); - - struct sigaction sa; - - // All the signals that we handle we also blocked while the signal - // handler runs. - sa.sa_mask = hooked_signals; - - // Don't set SA_RESTART, because we want EINTR so that we can check - // for user_abort and cleanup before exiting. We block the signals - // for which we have established a handler when we don't want EINTR. - sa.sa_flags = 0; - sa.sa_handler = &signal_handler; - - for (size_t i = 0; i < ARRAY_SIZE(sigs); ++i) { - // If the parent process has left some signals ignored, - // we don't unignore them. - struct sigaction old; - if (sigaction(sigs[i], NULL, &old) == 0 - && old.sa_handler == SIG_IGN) - continue; - - // Establish the signal handler. - if (sigaction(sigs[i], &sa, NULL)) - message_signal_handler(); - } - - return; -} - - -extern void -signals_block(void) -{ - if (signals_block_count++ == 0) { - const int saved_errno = errno; - mythread_sigmask(SIG_BLOCK, &hooked_signals, NULL); - errno = saved_errno; - } - - return; -} - - -extern void -signals_unblock(void) -{ - assert(signals_block_count > 0); - - if (--signals_block_count == 0) { - const int saved_errno = errno; - mythread_sigmask(SIG_UNBLOCK, &hooked_signals, NULL); - errno = saved_errno; - } - - return; -} - - -extern void -signals_exit(void) -{ - const int sig = exit_signal; - - if (sig != 0) { - struct sigaction sa; - sa.sa_handler = SIG_DFL; - sigfillset(&sa.sa_mask); - sa.sa_flags = 0; - sigaction(sig, &sa, NULL); - raise(exit_signal); - } - - return; -} - -#else - -// While Windows has some very basic signal handling functions as required -// by C89, they are not really used, or so I understood. Instead, we use -// SetConsoleCtrlHandler() to catch user pressing C-c. - -#include - - -static BOOL WINAPI -signal_handler(DWORD type lzma_attribute((unused))) -{ - // Since we don't get a signal number which we could raise() at - // signals_exit() like on POSIX, just set the exit status to - // indicate an error, so that we cannot return with zero exit status. - set_exit_status(E_ERROR); - user_abort = true; - return TRUE; -} - - -extern void -signals_init(void) -{ - if (!SetConsoleCtrlHandler(&signal_handler, TRUE)) - message_signal_handler(); - - return; -} - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/signals.h b/Build/source/utils/xz-4.999.9beta/src/xz/signals.h deleted file mode 100644 index 48945b22403..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/signals.h +++ /dev/null @@ -1,44 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file signals.h -/// \brief Handling signals to abort operation -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -/// If this is true, we will clean up the possibly incomplete output file, -/// return to main() as soon as practical. That is, the code needs to poll -/// this variable in various places. -extern volatile sig_atomic_t user_abort; - - -/// Initialize the signal handler, which will set user_abort to true when -/// user e.g. presses C-c. -extern void signals_init(void); - - -#ifndef _WIN32 - -/// Block the signals which don't have SA_RESTART and which would just set -/// user_abort to true. This is handy when we don't want to handle EINTR -/// and don't want SA_RESTART either. -extern void signals_block(void); - -/// Unblock the signals blocked by signals_block(). -extern void signals_unblock(void); - -/// If user has sent us a signal earlier to terminate the process, -/// re-raise that signal to actually terminate the process. -extern void signals_exit(void); - -#else - -#define signals_block() do { } while (0) -#define signals_unblock() do { } while (0) -#define signals_exit() do { } while (0) - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/suffix.c b/Build/source/utils/xz-4.999.9beta/src/xz/suffix.c deleted file mode 100644 index f9052832634..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/suffix.c +++ /dev/null @@ -1,211 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file suffix.c -/// \brief Checks filename suffix and creates the destination filename -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "private.h" - -// For case-insensitive filename suffix on case-insensitive systems -#ifdef DOSLIKE -# define strcmp strcasecmp -#endif - - -static char *custom_suffix = NULL; - - -struct suffix_pair { - const char *compressed; - const char *uncompressed; -}; - - -/// \brief Checks if src_name has given compressed_suffix -/// -/// \param suffix Filename suffix to look for -/// \param src_name Input filename -/// \param src_len strlen(src_name) -/// -/// \return If src_name has the suffix, src_len - strlen(suffix) is -/// returned. It's always a positive integer. Otherwise zero -/// is returned. -static size_t -test_suffix(const char *suffix, const char *src_name, size_t src_len) -{ - const size_t suffix_len = strlen(suffix); - - // The filename must have at least one character in addition to - // the suffix. src_name may contain path to the filename, so we - // need to check for directory separator too. - if (src_len <= suffix_len || src_name[src_len - suffix_len - 1] == '/') - return 0; - - if (strcmp(suffix, src_name + src_len - suffix_len) == 0) - return src_len - suffix_len; - - return 0; -} - - -/// \brief Removes the filename suffix of the compressed file -/// -/// \return Name of the uncompressed file, or NULL if file has unknown -/// suffix. -static char * -uncompressed_name(const char *src_name, const size_t src_len) -{ - static const struct suffix_pair suffixes[] = { - { ".xz", "" }, - { ".txz", ".tar" }, // .txz abbreviation for .txt.gz is rare. - { ".lzma", "" }, - { ".tlz", ".tar" }, - // { ".gz", "" }, - // { ".tgz", ".tar" }, - }; - - const char *new_suffix = ""; - size_t new_len = 0; - - if (opt_format == FORMAT_RAW) { - // Don't check for known suffixes when --format=raw was used. - if (custom_suffix == NULL) { - message_error(_("%s: With --format=raw, " - "--suffix=.SUF is required unless " - "writing to stdout"), src_name); - return NULL; - } - } else { - for (size_t i = 0; i < ARRAY_SIZE(suffixes); ++i) { - new_len = test_suffix(suffixes[i].compressed, - src_name, src_len); - if (new_len != 0) { - new_suffix = suffixes[i].uncompressed; - break; - } - } - } - - if (new_len == 0 && custom_suffix != NULL) - new_len = test_suffix(custom_suffix, src_name, src_len); - - if (new_len == 0) { - message_warning(_("%s: Filename has an unknown suffix, " - "skipping"), src_name); - return NULL; - } - - const size_t new_suffix_len = strlen(new_suffix); - char *dest_name = xmalloc(new_len + new_suffix_len + 1); - - memcpy(dest_name, src_name, new_len); - memcpy(dest_name + new_len, new_suffix, new_suffix_len); - dest_name[new_len + new_suffix_len] = '\0'; - - return dest_name; -} - - -/// \brief Appends suffix to src_name -/// -/// In contrast to uncompressed_name(), we check only suffixes that are valid -/// for the specified file format. -static char * -compressed_name(const char *src_name, const size_t src_len) -{ - // The order of these must match the order in args.h. - static const struct suffix_pair all_suffixes[][3] = { - { - { ".xz", "" }, - { ".txz", ".tar" }, - { NULL, NULL } - }, { - { ".lzma", "" }, - { ".tlz", ".tar" }, - { NULL, NULL } -/* - }, { - { ".gz", "" }, - { ".tgz", ".tar" }, - { NULL, NULL } -*/ - }, { - // --format=raw requires specifying the suffix - // manually or using stdout. - { NULL, NULL } - } - }; - - // args.c ensures this. - assert(opt_format != FORMAT_AUTO); - - const size_t format = opt_format - 1; - const struct suffix_pair *const suffixes = all_suffixes[format]; - - for (size_t i = 0; suffixes[i].compressed != NULL; ++i) { - if (test_suffix(suffixes[i].compressed, src_name, src_len) - != 0) { - message_warning(_("%s: File already has `%s' " - "suffix, skipping"), src_name, - suffixes[i].compressed); - return NULL; - } - } - - // TODO: Hmm, maybe it would be better to validate this in args.c, - // since the suffix handling when decoding is weird now. - if (opt_format == FORMAT_RAW && custom_suffix == NULL) { - message_error(_("%s: With --format=raw, " - "--suffix=.SUF is required unless " - "writing to stdout"), src_name); - return NULL; - } - - const char *suffix = custom_suffix != NULL - ? custom_suffix : suffixes[0].compressed; - const size_t suffix_len = strlen(suffix); - - char *dest_name = xmalloc(src_len + suffix_len + 1); - - memcpy(dest_name, src_name, src_len); - memcpy(dest_name + src_len, suffix, suffix_len); - dest_name[src_len + suffix_len] = '\0'; - - return dest_name; -} - - -extern char * -suffix_get_dest_name(const char *src_name) -{ - assert(src_name != NULL); - - // Length of the name is needed in all cases to locate the end of - // the string to compare the suffix, so calculate the length here. - const size_t src_len = strlen(src_name); - - return opt_mode == MODE_COMPRESS - ? compressed_name(src_name, src_len) - : uncompressed_name(src_name, src_len); -} - - -extern void -suffix_set(const char *suffix) -{ - // Empty suffix and suffixes having a slash are rejected. Such - // suffixes would break things later. - if (suffix[0] == '\0' || strchr(suffix, '/') != NULL) - message_fatal(_("%s: Invalid filename suffix"), optarg); - - // Replace the old custom_suffix (if any) with the new suffix. - free(custom_suffix); - custom_suffix = xstrdup(suffix); - return; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/suffix.h b/Build/source/utils/xz-4.999.9beta/src/xz/suffix.h deleted file mode 100644 index 5537d7324f4..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/suffix.h +++ /dev/null @@ -1,28 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file suffix.h -/// \brief Checks filename suffix and creates the destination filename -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -/// \brief Get the name of the destination file -/// -/// Depending on the global variable opt_mode, this tries to find a matching -/// counterpart for src_name. If the name can be constructed, it is allocated -/// and returned (caller must free it). On error, a message is printed and -/// NULL is returned. -extern char *suffix_get_dest_name(const char *src_name); - - -/// \brief Set a custom filename suffix -/// -/// This function calls xstrdup() for the given suffix, thus the caller -/// doesn't need to keep the memory allocated. There can be only one custom -/// suffix, thus if this is called multiple times, the old suffixes are freed -/// and forgotten. -extern void suffix_set(const char *suffix); diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/util.c b/Build/source/utils/xz-4.999.9beta/src/xz/util.c deleted file mode 100644 index d160ea0d600..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/util.c +++ /dev/null @@ -1,229 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file util.c -/// \brief Miscellaneous utility functions -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "private.h" - - -// Thousand separator for format strings is not supported outside POSIX. -// This is used in uint64_to_str() and double_to_str(). -#ifdef DOSLIKE -# define THOUSAND "" -#else -# define THOUSAND "'" -#endif - - -extern void * -xrealloc(void *ptr, size_t size) -{ - assert(size > 0); - - ptr = realloc(ptr, size); - if (ptr == NULL) - message_fatal("%s", strerror(errno)); - - return ptr; -} - - -extern char * -xstrdup(const char *src) -{ - assert(src != NULL); - const size_t size = strlen(src) + 1; - char *dest = xmalloc(size); - return memcpy(dest, src, size); -} - - -extern uint64_t -str_to_uint64(const char *name, const char *value, uint64_t min, uint64_t max) -{ - uint64_t result = 0; - - // Skip blanks. - while (*value == ' ' || *value == '\t') - ++value; - - // Accept special value "max". Supporting "min" doesn't seem useful. - if (strcmp(value, "max") == 0) - return max; - - if (*value < '0' || *value > '9') - message_fatal(_("%s: Value is not a non-negative " - "decimal integer"), value); - - do { - // Don't overflow. - if (result > (UINT64_MAX - 9) / 10) - goto error; - - result *= 10; - result += *value - '0'; - ++value; - } while (*value >= '0' && *value <= '9'); - - if (*value != '\0') { - // Look for suffix. - static const struct { - const char name[4]; - uint64_t multiplier; - } suffixes[] = { - { "k", UINT64_C(1000) }, - { "kB", UINT64_C(1000) }, - { "M", UINT64_C(1000000) }, - { "MB", UINT64_C(1000000) }, - { "G", UINT64_C(1000000000) }, - { "GB", UINT64_C(1000000000) }, - { "Ki", UINT64_C(1024) }, - { "KiB", UINT64_C(1024) }, - { "Mi", UINT64_C(1048576) }, - { "MiB", UINT64_C(1048576) }, - { "Gi", UINT64_C(1073741824) }, - { "GiB", UINT64_C(1073741824) } - }; - - uint64_t multiplier = 0; - for (size_t i = 0; i < ARRAY_SIZE(suffixes); ++i) { - if (strcmp(value, suffixes[i].name) == 0) { - multiplier = suffixes[i].multiplier; - break; - } - } - - if (multiplier == 0) { - message(V_ERROR, _("%s: Invalid multiplier suffix. " - "Valid suffixes:"), value); - message_fatal("`k' (10^3), `M' (10^6), `G' (10^9) " - "`Ki' (2^10), `Mi' (2^20), " - "`Gi' (2^30)"); - } - - // Don't overflow here either. - if (result > UINT64_MAX / multiplier) - goto error; - - result *= multiplier; - } - - if (result < min || result > max) - goto error; - - return result; - -error: - message_fatal(_("Value of the option `%s' must be in the range " - "[%" PRIu64 ", %" PRIu64 "]"), - name, min, max); -} - - -extern const char * -uint64_to_str(uint64_t value, uint32_t slot) -{ - // 2^64 with thousand separators is 26 bytes plus trailing '\0'. - static char bufs[4][32]; - - assert(slot < ARRAY_SIZE(bufs)); - - snprintf(bufs[slot], sizeof(bufs[slot]), "%" THOUSAND PRIu64, value); - return bufs[slot]; -} - - -extern const char * -double_to_str(double value) -{ - // 64 bytes is surely enough, since it won't fit in some other - // fields anyway. - static char buf[64]; - - snprintf(buf, sizeof(buf), "%" THOUSAND ".1f", value); - return buf; -} - - -/* -/// \brief Simple quoting to get rid of ASCII control characters -/// -/// This is not so cool and locale-dependent, but should be good enough -/// At least we don't print any control characters on the terminal. -/// -extern char * -str_quote(const char *str) -{ - size_t dest_len = 0; - bool has_ctrl = false; - - while (str[dest_len] != '\0') - if (*(unsigned char *)(str + dest_len++) < 0x20) - has_ctrl = true; - - char *dest = malloc(dest_len + 1); - if (dest != NULL) { - if (has_ctrl) { - for (size_t i = 0; i < dest_len; ++i) - if (*(unsigned char *)(str + i) < 0x20) - dest[i] = '?'; - else - dest[i] = str[i]; - - dest[dest_len] = '\0'; - - } else { - // Usually there are no control characters, - // so we can optimize. - memcpy(dest, str, dest_len + 1); - } - } - - return dest; -} -*/ - - -extern bool -is_empty_filename(const char *filename) -{ - if (filename[0] == '\0') { - message_error(_("Empty filename, skipping")); - return true; - } - - return false; -} - - -extern bool -is_tty_stdin(void) -{ - const bool ret = isatty(STDIN_FILENO); - - if (ret) - message_error(_("Compressed data not read from a terminal " - "unless `--force' is used.")); - - return ret; -} - - -extern bool -is_tty_stdout(void) -{ - const bool ret = isatty(STDOUT_FILENO); - - if (ret) - message_error(_("Compressed data not written to a terminal " - "unless `--force' is used.")); - - return ret; -} diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/util.h b/Build/source/utils/xz-4.999.9beta/src/xz/util.h deleted file mode 100644 index 3657eb80da4..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/util.h +++ /dev/null @@ -1,79 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file util.h -/// \brief Miscellaneous utility functions -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -/// \brief Safe malloc() that never returns NULL -/// -/// \note xmalloc(), xrealloc(), and xstrdup() must not be used when -/// there are files open for writing, that should be cleaned up -/// before exiting. -#define xmalloc(size) xrealloc(NULL, size) - - -/// \brief Safe realloc() that never returns NULL -extern void *xrealloc(void *ptr, size_t size); - - -/// \brief Safe strdup() that never returns NULL -extern char *xstrdup(const char *src); - - -/// \brief Fancy version of strtoull() -/// -/// \param name Name of the option to show in case of an error -/// \param value String containing the number to be parsed; may -/// contain suffixes "k", "M", "G", "Ki", "Mi", or "Gi" -/// \param min Minimum valid value -/// \param max Maximum valid value -/// -/// \return Parsed value that is in the range [min, max]. Does not return -/// if an error occurs. -/// -extern uint64_t str_to_uint64(const char *name, const char *value, - uint64_t min, uint64_t max); - - -/// \brief Convert uint64_t to a string -/// -/// Convert the given value to a string with locale-specific thousand -/// separators, if supported by the snprintf() implementation. The string -/// is stored into an internal static buffer indicated by the slot argument. -/// A pointer to the selected buffer is returned. -/// -/// This function exists, because non-POSIX systems don't support thousand -/// separator in format strings. Solving the problem in a simple way doesn't -/// work, because it breaks gettext (specifically, the xgettext tool). -extern const char *uint64_to_str(uint64_t value, uint32_t slot); - - -/// \brief Convert double to a string with one decimal place -/// -/// This is like uint64_to_str() except that this converts a double and -/// uses exactly one decimal place. -extern const char *double_to_str(double value); - - -/// \brief Check if filename is empty and print an error message -extern bool is_empty_filename(const char *filename); - - -/// \brief Test if stdin is a terminal -/// -/// If stdin is a terminal, an error message is printed and exit status set -/// to EXIT_ERROR. -extern bool is_tty_stdin(void); - - -/// \brief Test if stdout is a terminal -/// -/// If stdout is a terminal, an error message is printed and exit status set -/// to EXIT_ERROR. -extern bool is_tty_stdout(void); diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/xz.1 b/Build/source/utils/xz-4.999.9beta/src/xz/xz.1 deleted file mode 100644 index 2fef75f43a5..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/xz.1 +++ /dev/null @@ -1,1250 +0,0 @@ -'\" t -.\" -.\" Author: Lasse Collin -.\" -.\" This file has been put into the public domain. -.\" You can do whatever you want with this file. -.\" -.TH XZ 1 "2009-08-27" "Tukaani" "XZ Utils" -.SH NAME -xz, unxz, xzcat, lzma, unlzma, lzcat \- Compress or decompress .xz and .lzma files -.SH SYNOPSIS -.B xz -.RI [ option ]... -.RI [ file ]... -.PP -.B unxz -is equivalent to -.BR "xz \-\-decompress" . -.br -.B xzcat -is equivalent to -.BR "xz \-\-decompress \-\-stdout" . -.br -.B lzma -is equivalent to -.BR "xz \-\-format=lzma" . -.br -.B unlzma -is equivalent to -.BR "xz \-\-format=lzma \-\-decompress" . -.br -.B lzcat -is equivalent to -.BR "xz \-\-format=lzma \-\-decompress \-\-stdout" . -.PP -When writing scripts that need to decompress files, it is recommended to -always use the name -.B xz -with appropriate arguments -.RB ( "xz \-d" -or -.BR "xz \-dc" ) -instead of the names -.B unxz -and -.BR xzcat. -.SH DESCRIPTION -.B xz -is a general-purpose data compression tool with command line syntax similar to -.BR gzip (1) -and -.BR bzip2 (1). -The native file format is the -.B .xz -format, but also the legacy -.B .lzma -format and raw compressed streams with no container format headers -are supported. -.PP -.B xz -compresses or decompresses each -.I file -according to the selected operation mode. -If no -.I files -are given or -.I file -is -.BR \- , -.B xz -reads from standard input and writes the processed data to standard output. -.B xz -will refuse (display an error and skip the -.IR file ) -to write compressed data to standard output if it is a terminal. Similarly, -.B xz -will refuse to read compressed data from standard input if it is a terminal. -.PP -Unless -.B \-\-stdout -is specified, -.I files -other than -.B \- -are written to a new file whose name is derived from the source -.I file -name: -.IP \(bu 3 -When compressing, the suffix of the target file format -.RB ( .xz -or -.BR .lzma ) -is appended to the source filename to get the target filename. -.IP \(bu 3 -When decompressing, the -.B .xz -or -.B .lzma -suffix is removed from the filename to get the target filename. -.B xz -also recognizes the suffixes -.B .txz -and -.BR .tlz , -and replaces them with the -.B .tar -suffix. -.PP -If the target file already exists, an error is displayed and the -.I file -is skipped. -.PP -Unless writing to standard output, -.B xz -will display a warning and skip the -.I file -if any of the following applies: -.IP \(bu 3 -.I File -is not a regular file. Symbolic links are not followed, thus they -are never considered to be regular files. -.IP \(bu 3 -.I File -has more than one hardlink. -.IP \(bu 3 -.I File -has setuid, setgid, or sticky bit set. -.IP \(bu 3 -The operation mode is set to compress, and the -.I file -already has a suffix of the target file format -.RB ( .xz -or -.B .txz -when compressing to the -.B .xz -format, and -.B .lzma -or -.B .tlz -when compressing to the -.B .lzma -format). -.IP \(bu 3 -The operation mode is set to decompress, and the -.I file -doesn't have a suffix of any of the supported file formats -.RB ( .xz , -.BR .txz , -.BR .lzma , -or -.BR .tlz ). -.PP -After successfully compressing or decompressing the -.IR file , -.B xz -copies the owner, group, permissions, access time, and modification time -from the source -.I file -to the target file. If copying the group fails, the permissions are modified -so that the target file doesn't become accessible to users who didn't have -permission to access the source -.IR file . -.B xz -doesn't support copying other metadata like access control lists -or extended attributes yet. -.PP -Once the target file has been successfully closed, the source -.I file -is removed unless -.B \-\-keep -was specified. The source -.I file -is never removed if the output is written to standard output. -.PP -Sending -.B SIGINFO -or -.B SIGUSR1 -to the -.B xz -process makes it print progress information to standard error. -This has only limited use since when standard error is a terminal, using -.B \-\-verbose -will display an automatically updating progress indicator. -.SS "Memory usage" -The memory usage of -.B xz -varies from a few hundred kilobytes to several gigabytes depending on -the compression settings. The settings used when compressing a file -affect also the memory usage of the decompressor. Typically the decompressor -needs only 5\ % to 20\ % of the amount of RAM that the compressor needed when -creating the file. Still, the worst-case memory usage of the decompressor -is several gigabytes. -.PP -To prevent uncomfortable surprises caused by huge memory usage, -.B xz -has a built-in memory usage limiter. The default limit is 40 % of total -physical RAM. While operating systems provide ways to limit the memory usage -of processes, relying on it wasn't deemed to be flexible enough. -.PP -When compressing, if the selected compression settings exceed the memory -usage limit, the settings are automatically adjusted downwards and a notice -about this is displayed. As an exception, if the memory usage limit is -exceeded when compressing with -.BR \-\-format=raw , -an error is displayed and -.B xz -will exit with exit status -.BR 1 . -.PP -If source -.I file -cannot be decompressed without exceeding the memory usage limit, an error -message is displayed and the file is skipped. Note that compressed files -may contain many blocks, which may have been compressed with different -settings. Typically all blocks will have roughly the same memory requirements, -but it is possible that a block later in the file will exceed the memory usage -limit, and an error about too low memory usage limit gets displayed after some -data has already been decompressed. -.PP -The absolute value of the active memory usage limit can be seen near -the bottom of the output of -.BR \-\-long\-help . -The default limit can be overriden with -\fB\-\-memory=\fIlimit\fR. -.SH OPTIONS -.SS "Integer suffixes and special values" -In most places where an integer argument is expected, an optional suffix -is supported to easily indicate large integers. There must be no space -between the integer and the suffix. -.TP -.BR k " or " kB -The integer is multiplied by 1,000 (10^3). For example, -.B "5k" -or -.B "5kB" -equals -.BR "5000" . -.TP -.BR Ki " or " KiB -The integer is multiplied by 1,024 (2^10). -.TP -.BR M " or " MB -The integer is multiplied by 1,000,000 (10^6). -.TP -.BR Mi " or " MiB -The integer is multiplied by 1,048,576 (2^20). -.TP -.BR G " or " GB -The integer is multiplied by 1,000,000,000 (10^9). -.TP -.BR Gi " or " GiB -The integer is multiplied by 1,073,741,824 (2^30). -.PP -A special value -.B max -can be used to indicate the maximum integer value supported by the option. -.SS "Operation mode" -If multiple operation mode options are given, the last one takes effect. -.TP -.BR \-z ", " \-\-compress -Compress. This is the default operation mode when no operation mode option -is specified, and no other operation mode is implied from the command name -(for example, -.B unxz -implies -.BR \-\-decompress ). -.TP -.BR \-d ", " \-\-decompress ", " \-\-uncompress -Decompress. -.TP -.BR \-t ", " \-\-test -Test the integrity of compressed -.IR files . -No files are created or removed. This option is equivalent to -.B "\-\-decompress \-\-stdout" -except that the decompressed data is discarded instead of being -written to standard output. -.TP -.BR \-l ", " \-\-list -View information about the compressed files. No uncompressed output is -produced, and no files are created or removed. In list mode, the program -cannot read the compressed data from standard input or from other -unseekable sources. -.IP -.B "This feature has not been implemented yet." -.SS "Operation modifiers" -.TP -.BR \-k ", " \-\-keep -Keep (don't delete) the input files. -.TP -.BR \-f ", " \-\-force -This option has several effects: -.RS -.IP \(bu 3 -If the target file already exists, delete it before compressing or -decompressing. -.IP \(bu 3 -Compress or decompress even if the input is not a regular file, -has more than one hardlink, or has setuid, setgid, or sticky bit set. -The setuid, setgid, and sticky bits are not copied to the target file. -.IP \(bu 3 -If combined with -.B \-\-decompress -.BR \-\-stdout -and -.B xz -doesn't recognize the type of the source file, -.B xz -will copy the source file as is to standard output. This allows using -.B xzcat -.B \--force -like -.BR cat (1) -for files that have not been compressed with -.BR xz . -Note that in future, -.B xz -might support new compressed file formats, which may make -.B xz -decompress more types of files instead of copying them as is to -standard output. -.BI \-\-format= format -can be used to restrict -.B xz -to decompress only a single file format. -.IP \(bu 3 -Allow writing compressed data to a terminal, and reading compressed data -from a terminal. -.RE -.TP -.BR \-c ", " \-\-stdout ", " \-\-to-stdout -Write the compressed or decompressed data to standard output instead of -a file. This implies -.BR \-\-keep . -.TP -\fB\-S\fR \fI.suf\fR, \fB\-\-suffix=\fI.suf -When compressing, use -.I .suf -as the suffix for the target file instead of -.B .xz -or -.BR .lzma . -If not writing to standard output and the source file already has the suffix -.IR .suf , -a warning is displayed and the file is skipped. -.IP -When decompressing, recognize also files with the suffix -.I .suf -in addition to files with the -.BR .xz , -.BR .txz , -.BR .lzma , -or -.B .tlz -suffix. If the source file has the suffix -.IR .suf , -the suffix is removed to get the target filename. -.IP -When compressing or decompressing raw streams -.RB ( \-\-format=raw ), -the suffix must always be specified unless writing to standard output, -because there is no default suffix for raw streams. -.TP -\fB\-\-files\fR[\fB=\fIfile\fR] -Read the filenames to process from -.IR file ; -if -.I file -is omitted, filenames are read from standard input. Filenames must be -terminated with the newline character. If filenames are given also as -command line arguments, they are processed before the filenames read from -.IR file . -.TP -\fB\-\-files0\fR[\fB=\fIfile\fR] -This is identical to \fB\-\-files\fR[\fB=\fIfile\fR] except that the -filenames must be terminated with the null character. -.SS "Basic file format and compression options" -.TP -\fB\-F\fR \fIformat\fR, \fB\-\-format=\fIformat -Specify the file format to compress or decompress: -.RS -.IP \(bu 3 -.BR auto : -This is the default. When compressing, -.B auto -is equivalent to -.BR xz . -When decompressing, the format of the input file is autodetected. Note that -raw streams (created with -.BR \-\-format=raw ) -cannot be autodetected. -.IP \(bu 3 -.BR xz : -Compress to the -.B .xz -file format, or accept only -.B .xz -files when decompressing. -.IP \(bu 3 -.B lzma -or -.BR alone : -Compress to the legacy -.B .lzma -file format, or accept only -.B .lzma -files when decompressing. The alternative name -.B alone -is provided for backwards compatibility with LZMA Utils. -.IP \(bu 3 -.BR raw : -Compress or uncompress a raw stream (no headers). This is meant for advanced -users only. To decode raw streams, you need to set not only -.B \-\-format=raw -but also specify the filter chain, which would normally be stored in the -container format headers. -.RE -.TP -\fB\-C\fR \fIcheck\fR, \fB\-\-check=\fIcheck -Specify the type of the integrity check, which is calculated from the -uncompressed data. This option has an effect only when compressing into the -.B .xz -format; the -.B .lzma -format doesn't support integrity checks. -The integrity check (if any) is verified when the -.B .xz -file is decompressed. -.IP -Supported -.I check -types: -.RS -.IP \(bu 3 -.BR none : -Don't calculate an integrity check at all. This is usually a bad idea. This -can be useful when integrity of the data is verified by other means anyway. -.IP \(bu 3 -.BR crc32 : -Calculate CRC32 using the polynomial from IEEE-802.3 (Ethernet). -.IP \(bu 3 -.BR crc64 : -Calculate CRC64 using the polynomial from ECMA-182. This is the default, since -it is slightly better than CRC32 at detecting damaged files and the speed -difference is negligible. -.IP \(bu 3 -.BR sha256 : -Calculate SHA-256. This is somewhat slower than CRC32 and CRC64. -.RE -.IP -Integrity of the -.B .xz -headers is always verified with CRC32. It is not possible to change or -disable it. -.TP -.BR \-0 " ... " \-9 -Select compression preset. If a preset level is specified multiple times, -the last one takes effect. -.IP -The compression preset levels can be categorised roughly into three -categories: -.RS -.IP "\fB\-0\fR ... \fB\-2" -Fast presets with relatively low memory usage. -.B \-1 -and -.B \-2 -should give compression speed and ratios comparable to -.B "bzip2 \-1" -and -.BR "bzip2 \-9" , -respectively. -Currently -.B \-0 -is not very good (not much faster than -.B \-1 -but much worse compression). In future, -.B \-0 -may be indicate some fast algorithm instead of LZMA2. -.IP "\fB\-3\fR ... \fB\-5" -Good compression ratio with low to medium memory usage. -These are significantly slower than levels 0\-2. -.IP "\fB\-6\fR ... \fB\-9" -Excellent compression with medium to high memory usage. These are also -slower than the lower preset levels. The default is -.BR \-6 . -Unless you want to maximize the compression ratio, you probably don't want -a higher preset level than -.B \-7 -due to speed and memory usage. -.RE -.IP -The exact compression settings (filter chain) used by each preset may -vary between -.B xz -versions. The settings may also vary between files being compressed, if -.B xz -determines that modified settings will probably give better compression -ratio without significantly affecting compression time or memory usage. -.IP -Because the settings may vary, the memory usage may vary too. The following -table lists the maximum memory usage of each preset level, which won't be -exceeded even in future versions of -.BR xz . -.IP -.B "FIXME: The table below is just a rough idea." -.RS -.RS -.TS -tab(;); -c c c -n n n. -Preset;Compression;Decompression -\-0;6 MiB;1 MiB -\-1;6 MiB;1 MiB -\-2;10 MiB;1 MiB -\-3;20 MiB;2 MiB -\-4;30 MiB;3 MiB -\-5;60 MiB;6 MiB -\-6;100 MiB;10 MiB -\-7;200 MiB;20 MiB -\-8;400 MiB;40 MiB -\-9;800 MiB;80 MiB -.TE -.RE -.RE -.IP -When compressing, -.B xz -automatically adjusts the compression settings downwards if -the memory usage limit would be exceeded, so it is safe to specify -a high preset level even on systems that don't have lots of RAM. -.TP -.BR \-\-fast " and " \-\-best -These are somewhat misleading aliases for -.B \-0 -and -.BR \-9 , -respectively. -These are provided only for backwards compatibility with LZMA Utils. -Avoid using these options. -.IP -Especially the name of -.B \-\-best -is misleading, because the definition of best depends on the input data, -and that usually people don't want the very best compression ratio anyway, -because it would be very slow. -.TP -.BR \-e ", " \-\-extreme -Modify the compression preset (\fB\-0\fR ... \fB\-9\fR) so that a little bit -better compression ratio can be achieved without increasing memory usage -of the compressor or decompressor (exception: compressor memory usage may -increase a little with presets \fB\-0\fR ... \fB\-2\fR). The downside is that -the compression time will increase dramatically (it can easily double). -.TP -\fB\-M\fR \fIlimit\fR, \fB\-\-memory=\fIlimit -Set the memory usage limit. If this option is specied multiple times, -the last one takes effect. The -.I limit -can be specified in multiple ways: -.RS -.IP \(bu 3 -The -.I limit -can be an absolute value in bytes. Using an integer suffix like -.B MiB -can be useful. Example: -.B "\-\-memory=80MiB" -.IP \(bu 3 -The -.I limit -can be specified as a percentage of physical RAM. Example: -.B "\-\-memory=70%" -.IP \(bu 3 -The -.I limit -can be reset back to its default value (currently 40 % of physical RAM) -by setting it to -.BR 0 . -.IP \(bu 3 -The memory usage limiting can be effectively disabled by setting -.I limit -to -.BR max . -This isn't recommended. It's usually better to use, for example, -.BR \-\-memory=90% . -.RE -.IP -The current -.I limit -can be seen near the bottom of the output of the -.B \-\-long-help -option. -.TP -\fB\-T\fR \fIthreads\fR, \fB\-\-threads=\fIthreads -Specify the maximum number of worker threads to use. The default is -the number of available CPU cores. You can see the current value of -.I threads -near the end of the output of the -.B \-\-long\-help -option. -.IP -The actual number of worker threads can be less than -.I threads -if using more threads would exceed the memory usage limit. -In addition to CPU-intensive worker threads, -.B xz -may use a few auxiliary threads, which don't use a lot of CPU time. -.IP -.B "Multithreaded compression and decompression are not implemented yet," -.B "so this option has no effect for now." -.SS Custom compressor filter chains -A custom filter chain allows specifying the compression settings in detail -instead of relying on the settings associated to the preset levels. -When a custom filter chain is specified, the compression preset level options -(\fB\-0\fR ... \fB\-9\fR and \fB\-\-extreme\fR) are silently ignored. -.PP -A filter chain is comparable to piping on the UN*X command line. -When compressing, the uncompressed input goes to the first filter, whose -output goes to the next filter (if any). The output of the last filter -gets written to the compressed file. The maximum number of filters in -the chain is four, but typically a filter chain has only one or two filters. -.PP -Many filters have limitations where they can be in the filter chain: -some filters can work only as the last filter in the chain, some only -as a non-last filter, and some work in any position in the chain. Depending -on the filter, this limitation is either inherent to the filter design or -exists to prevent security issues. -.PP -A custom filter chain is specified by using one or more filter options in -the order they are wanted in the filter chain. That is, the order of filter -options is significant! When decoding raw streams -.RB ( \-\-format=raw ), -the filter chain is specified in the same order as it was specified when -compressing. -.PP -Filters take filter-specific -.I options -as a comma-separated list. Extra commas in -.I options -are ignored. Every option has a default value, so you need to -specify only those you want to change. -.TP -\fB\-\-lzma1\fR[\fB=\fIoptions\fR], \fB\-\-lzma2\fR[\fB=\fIoptions\fR] -Add LZMA1 or LZMA2 filter to the filter chain. These filter can be used -only as the last filter in the chain. -.IP -LZMA1 is a legacy filter, which is supported almost solely due to the legacy -.B .lzma -file format, which supports only LZMA1. LZMA2 is an updated -version of LZMA1 to fix some practical issues of LZMA1. The -.B .xz -format uses LZMA2, and doesn't support LZMA1 at all. Compression speed and -ratios of LZMA1 and LZMA2 are practically the same. -.IP -LZMA1 and LZMA2 share the same set of -.IR options : -.RS -.TP -.BI preset= preset -Reset all LZMA1 or LZMA2 -.I options -to -.IR preset . -.I Preset -consist of an integer, which may be followed by single-letter preset -modifiers. The integer can be from -.B 0 -to -.BR 9 , -matching the command line options \fB\-0\fR ... \fB\-9\fR. -The only supported modifier is currently -.BR e , -which matches -.BR \-\-extreme . -.IP -The default -.I preset -is -.BR 6 , -from which the default values for the rest of the LZMA1 or LZMA2 -.I options -are taken. -.TP -.BI dict= size -Dictionary (history buffer) size indicates how many bytes of the recently -processed uncompressed data is kept in memory. One method to reduce size of -the uncompressed data is to store distance-length pairs, which -indicate what data to repeat from the dictionary buffer. The bigger -the dictionary, the better the compression ratio usually is, -but dictionaries bigger than the uncompressed data are waste of RAM. -.IP -Typical dictionary size is from 64 KiB to 64 MiB. The minimum is 4 KiB. -The maximum for compression is currently 1.5 GiB. The decompressor already -supports dictionaries up to one byte less than 4 GiB, which is the -maximum for LZMA1 and LZMA2 stream formats. -.IP -Dictionary size has the biggest effect on compression ratio. -Dictionary size and match finder together determine the memory usage of -the LZMA1 or LZMA2 encoder. The same dictionary size is required -for decompressing that was used when compressing, thus the memory usage of -the decoder is determined by the dictionary size used when compressing. -.TP -.BI lc= lc -Specify the number of literal context bits. The minimum is -.B 0 -and the maximum is -.BR 4 ; -the default is -.BR 3 . -In addition, the sum of -.I lc -and -.I lp -must not exceed -.BR 4 . -.TP -.BI lp= lp -Specify the number of literal position bits. The minimum is -.B 0 -and the maximum is -.BR 4 ; -the default is -.BR 0 . -.TP -.BI pb= pb -Specify the number of position bits. The minimum is -.B 0 -and the maximum is -.BR 4 ; -the default is -.BR 2 . -.TP -.BI mode= mode -Compression -.I mode -specifies the function used to analyze the data produced by the match finder. -Supported -.I modes -are -.B fast -and -.BR normal . -The default is -.B fast -for -.I presets -.BR 0 \- 2 -and -.B normal -for -.I presets -.BR 3 \- 9 . -.TP -.BI mf= mf -Match finder has a major effect on encoder speed, memory usage, and -compression ratio. Usually Hash Chain match finders are faster than -Binary Tree match finders. Hash Chains are usually used together with -.B mode=fast -and Binary Trees with -.BR mode=normal . -The memory usage formulas are only rough estimates, -which are closest to reality when -.I dict -is a power of two. -.RS -.TP -.B hc3 -Hash Chain with 2- and 3-byte hashing -.br -Minimum value for -.IR nice : -3 -.br -Memory usage: -.I dict -* 7.5 (if -.I dict -<= 16 MiB); -.br -.I dict -* 5.5 + 64 MiB (if -.I dict -> 16 MiB) -.TP -.B hc4 -Hash Chain with 2-, 3-, and 4-byte hashing -.br -Minimum value for -.IR nice : -4 -.br -Memory usage: -.I dict -* 7.5 -.TP -.B bt2 -Binary Tree with 2-byte hashing -.br -Minimum value for -.IR nice : -2 -.br -Memory usage: -.I dict -* 9.5 -.TP -.B bt3 -Binary Tree with 2- and 3-byte hashing -.br -Minimum value for -.IR nice : -3 -.br -Memory usage: -.I dict -* 11.5 (if -.I dict -<= 16 MiB); -.br -.I dict -* 9.5 + 64 MiB (if -.I dict -> 16 MiB) -.TP -.B bt4 -Binary Tree with 2-, 3-, and 4-byte hashing -.br -Minimum value for -.IR nice : -4 -.br -Memory usage: -.I dict -* 11.5 -.RE -.TP -.BI nice= nice -Specify what is considered to be a nice length for a match. Once a match -of at least -.I nice -bytes is found, the algorithm stops looking for possibly better matches. -.IP -.I nice -can be 2\-273 bytes. Higher values tend to give better compression ratio -at expense of speed. The default depends on the -.I preset -level. -.TP -.BI depth= depth -Specify the maximum search depth in the match finder. The default is the -special value -.BR 0 , -which makes the compressor determine a reasonable -.I depth -from -.I mf -and -.IR nice . -.IP -Using very high values for -.I depth -can make the encoder extremely slow with carefully crafted files. -Avoid setting the -.I depth -over 1000 unless you are prepared to interrupt the compression in case it -is taking too long. -.RE -.IP -When decoding raw streams -.RB ( \-\-format=raw ), -LZMA2 needs only the value of -.BR dict . -LZMA1 needs also -.BR lc , -.BR lp , -and -.BR pb. -.TP -\fB\-\-x86\fR[\fB=\fIoptions\fR] -.TP -\fB\-\-powerpc\fR[\fB=\fIoptions\fR] -.TP -\fB\-\-ia64\fR[\fB=\fIoptions\fR] -.TP -\fB\-\-arm\fR[\fB=\fIoptions\fR] -.TP -\fB\-\-armthumb\fR[\fB=\fIoptions\fR] -.TP -\fB\-\-sparc\fR[\fB=\fIoptions\fR] -Add a branch/call/jump (BCJ) filter to the filter chain. These filters -can be used only as non-last filter in the filter chain. -.IP -A BCJ filter converts relative addresses in the machine code to their -absolute counterparts. This doesn't change the size of the data, but -it increases redundancy, which allows e.g. LZMA2 to get better -compression ratio. -.IP -The BCJ filters are always reversible, so using a BCJ filter for wrong -type of data doesn't cause any data loss. However, applying a BCJ filter -for wrong type of data is a bad idea, because it tends to make the -compression ratio worse. -.IP -Different instruction sets have have different alignment: -.RS -.RS -.TS -tab(;); -l n l -l n l. -Filter;Alignment;Notes -x86;1;32-bit and 64-bit x86 -PowerPC;4;Big endian only -ARM;4;Little endian only -ARM-Thumb;2;Little endian only -IA-64;16;Big or little endian -SPARC;4;Big or little endian -.TE -.RE -.RE -.IP -Since the BCJ-filtered data is usually compressed with LZMA2, the compression -ratio may be improved slightly if the LZMA2 options are set to match the -alignment of the selected BCJ filter. For example, with the IA-64 filter, -it's good to set -.B pb=4 -with LZMA2 (2^4=16). The x86 filter is an exception; it's usually good to -stick to LZMA2's default four-byte alignment when compressing x86 executables. -.IP -All BCJ filters support the same -.IR options : -.RS -.TP -.BI start= offset -Specify the start -.I offset -that is used when converting between relative and absolute addresses. -The -.I offset -must be a multiple of the alignment of the filter (see the table above). -The default is zero. In practice, the default is good; specifying -a custom -.I offset -is almost never useful. -.IP -Specifying a non-zero start -.I offset -is probably useful only if the executable has multiple sections, and there -are many cross-section jumps or calls. Applying a BCJ filter separately for -each section with proper start offset and then compressing the result as -a single chunk may give some improvement in compression ratio compared -to applying the BCJ filter with the default -.I offset -for the whole executable. -.RE -.TP -\fB\-\-delta\fR[\fB=\fIoptions\fR] -Add Delta filter to the filter chain. The Delta filter -can be used only as non-last filter in the filter chain. -.IP -Currently only simple byte-wise delta calculation is supported. It can -be useful when compressing e.g. uncompressed bitmap images or uncompressed -PCM audio. However, special purpose algorithms may give significantly better -results than Delta + LZMA2. This is true especially with audio, which -compresses faster and better e.g. with FLAC. -.IP -Supported -.IR options : -.RS -.TP -.BI dist= distance -Specify the -.I distance -of the delta calculation as bytes. -.I distance -must be 1\-256. The default is 1. -.IP -For example, with -.B dist=2 -and eight-byte input A1 B1 A2 B3 A3 B5 A4 B7, the output will be -A1 B1 01 02 01 02 01 02. -.RE -.SS "Other options" -.TP -.BR \-q ", " \-\-quiet -Suppress warnings and notices. Specify this twice to suppress errors too. -This option has no effect on the exit status. That is, even if a warning -was suppressed, the exit status to indicate a warning is still used. -.TP -.BR \-v ", " \-\-verbose -Be verbose. If standard error is connected to a terminal, -.B xz -will display a progress indicator. -Specifying -.B \-\-verbose -twice will give even more verbose output (useful mostly for debugging). -.TP -.BR \-Q ", " \-\-no\-warn -Don't set the exit status to -.B 2 -even if a condition worth a warning was detected. This option doesn't affect -the verbosity level, thus both -.B \-\-quiet -and -.B \-\-no\-warn -have to be used to not display warnings and to not alter the exit status. -.TP -.BR \-h ", " \-\-help -Display a help message describing the most commonly used options, -and exit successfully. -.TP -.BR \-H ", " \-\-long\-help -Display a help message describing all features of -.BR xz , -and exit successfully -.TP -.BR \-V ", " \-\-version -Display the version number of -.B xz -and liblzma. -.SH "EXIT STATUS" -.TP -.B 0 -All is good. -.TP -.B 1 -An error occurred. -.TP -.B 2 -Something worth a warning occurred, but no actual errors occurred. -.PP -Notices (not warnings or errors) printed on standard error don't affect -the exit status. -.SH ENVIRONMENT -.TP -.B XZ_OPT -A space-separated list of options is parsed from -.B XZ_OPT -before parsing the options given on the command line. Note that only -options are parsed from -.BR XZ_OPT ; -all non-options are silently ignored. Parsing is done with -.BR getopt_long (3) -which is used also for the command line arguments. -.SH "LZMA UTILS COMPATIBILITY" -The command line syntax of -.B xz -is practically a superset of -.BR lzma , -.BR unlzma , -and -.BR lzcat -as found from LZMA Utils 4.32.x. In most cases, it is possible to replace -LZMA Utils with XZ Utils without breaking existing scripts. There are some -incompatibilities though, which may sometimes cause problems. -.SS "Compression preset levels" -The numbering of the compression level presets is not identical in -.B xz -and LZMA Utils. -The most important difference is how dictionary sizes are mapped to different -presets. Dictionary size is roughly equal to the decompressor memory usage. -.RS -.TS -tab(;); -c c c -c n n. -Level;xz;LZMA Utils -\-1;64 KiB;64 KiB -\-2;512 KiB;1 MiB -\-3;1 MiB;512 KiB -\-4;2 MiB;1 MiB -\-5;4 MiB;2 MiB -\-6;8 MiB;4 MiB -\-7;16 MiB;8 MiB -\-8;32 MiB;16 MiB -\-9;64 MiB;32 MiB -.TE -.RE -.PP -The dictionary size differences affect the compressor memory usage too, -but there are some other differences between LZMA Utils and XZ Utils, which -make the difference even bigger: -.RS -.TS -tab(;); -c c c -c n n. -Level;xz;LZMA Utils 4.32.x -\-1;2 MiB;2 MiB -\-2;5 MiB;12 MiB -\-3;13 MiB;12 MiB -\-4;25 MiB;16 MiB -\-5;48 MiB;26 MiB -\-6;94 MiB;45 MiB -\-7;186 MiB;83 MiB -\-8;370 MiB;159 MiB -\-9;674 MiB;311 MiB -.TE -.RE -.PP -The default preset level in LZMA Utils is -.B \-7 -while in XZ Utils it is -.BR \-6 , -so both use 8 MiB dictionary by default. -.SS "Streamed vs. non-streamed .lzma files" -Uncompressed size of the file can be stored in the -.B .lzma -header. LZMA Utils does that when compressing regular files. -The alternative is to mark that uncompressed size is unknown and -use end of payload marker to indicate where the decompressor should stop. -LZMA Utils uses this method when uncompressed size isn't known, which is -the case for example in pipes. -.PP -.B xz -supports decompressing -.B .lzma -files with or without end of payload marker, but all -.B .lzma -files created by -.B xz -will use end of payload marker and have uncompressed size marked as unknown -in the -.B .lzma -header. This may be a problem in some (uncommon) situations. For example, a -.B .lzma -decompressor in an embedded device might work only with files that have known -uncompressed size. If you hit this problem, you need to use LZMA Utils or -LZMA SDK to create -.B .lzma -files with known uncompressed size. -.SS "Unsupported .lzma files" -The -.B .lzma -format allows -.I lc -values up to 8, and -.I lp -values up to 4. LZMA Utils can decompress files with any -.I lc -and -.IR lp , -but always creates files with -.B lc=3 -and -.BR lp=0 . -Creating files with other -.I lc -and -.I lp -is possible with -.B xz -and with LZMA SDK. -.PP -The implementation of the LZMA1 filter in liblzma requires -that the sum of -.I lc -and -.I lp -must not exceed 4. Thus, -.B .lzma -files which exceed this limitation, cannot be decompressed with -.BR xz . -.PP -LZMA Utils creates only -.B .lzma -files which have dictionary size of -.RI "2^" n -(a power of 2), but accepts files with any dictionary size. -liblzma accepts only -.B .lzma -files which have dictionary size of -.RI "2^" n -or -.RI "2^" n " + 2^(" n "\-1)." -This is to decrease false positives when autodetecting -.B .lzma -files. -.PP -These limitations shouldn't be a problem in practice, since practically all -.B .lzma -files have been compressed with settings that liblzma will accept. -.SS "Trailing garbage" -When decompressing, LZMA Utils silently ignore everything after the first -.B .lzma -stream. In most situations, this is a bug. This also means that LZMA Utils -don't support decompressing concatenated -.B .lzma -files. -.PP -If there is data left after the first -.B .lzma -stream, -.B xz -considers the file to be corrupt. This may break obscure scripts which have -assumed that trailing garbage is ignored. -.SH NOTES -.SS Compressed output may vary -The exact compressed output produced from the same uncompressed input file -may vary between XZ Utils versions even if compression options are identical. -This is because the encoder can be improved (faster or better compression) -without affecting the file format. The output can vary even between different -builds of the same XZ Utils version, if different build options are used or -if the endianness of the hardware is different for different builds. -.PP -The above means that implementing -.B \-\-rsyncable -to create rsyncable -.B .xz -files is not going to happen without freezing a part of the encoder -implementation, which can then be used with -.BR \-\-rsyncable . -.SS Embedded .xz decompressors -Embedded -.B .xz -decompressor implementations like XZ Embedded don't necessarily support files -created with -.I check -types other than -.B none -and -.BR crc32 . -Since the default is \fB\-\-check=\fIcrc64\fR, you must use -.B \-\-check=none -or -.B \-\-check=crc32 -when creating files for embedded systems. -.PP -Outside embedded systems, all -.B .xz -format decompressors support all the -.I check -types, or at least are able to decompress the file without verifying the -integrity check if the particular -.I check -is not supported. -.PP -XZ Embedded supports BCJ filters, but only with the default start offset. -.SH "SEE ALSO" -.BR xzdec (1), -.BR gzip (1), -.BR bzip2 (1) -.PP -XZ Utils: -.br -XZ Embedded: -.br -LZMA SDK: diff --git a/Build/source/utils/xz-4.999.9beta/src/xz/xz_w32res.rc b/Build/source/utils/xz-4.999.9beta/src/xz/xz_w32res.rc deleted file mode 100644 index bad30202991..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xz/xz_w32res.rc +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - */ - -#define MY_TYPE VFT_APP -#define MY_NAME "xz" -#define MY_SUFFIX ".exe" -#define MY_DESC "xz data compression tool for .xz and .lzma files" -#include "common_w32res.rc" diff --git a/Build/source/utils/xz-4.999.9beta/src/xzdec/Makefile.am b/Build/source/utils/xz-4.999.9beta/src/xzdec/Makefile.am deleted file mode 100644 index aaa5b5f6490..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xzdec/Makefile.am +++ /dev/null @@ -1,61 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -# Windows resource compiler support. It's fine to use xz_CPPFLAGS -# also for lzmadec. -.rc.o: - $(RC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(xzdec_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) -i $< -o $@ - - -bin_PROGRAMS = xzdec lzmadec - -xzdec_SOURCES = xzdec.c - -if COND_W32 -xzdec_SOURCES += xzdec_w32res.rc -endif - -xzdec_CPPFLAGS = \ - -I$(top_srcdir)/src/common \ - -I$(top_srcdir)/src/liblzma/api \ - -I$(top_builddir)/lib \ - $(STATIC_CPPFLAGS) -xzdec_LDFLAGS = $(STATIC_LDFLAGS) -xzdec_LDADD = $(top_builddir)/src/liblzma/liblzma.la - -if COND_GNULIB -xzdec_LDADD += $(top_builddir)/lib/libgnu.a -endif - -xzdec_LDADD += $(LTLIBINTL) - - -lzmadec_SOURCES = xzdec.c - -if COND_W32 -lzmadec_SOURCES += lzmadec_w32res.rc -endif - -lzmadec_CPPFLAGS = $(xzdec_CPPFLAGS) -DLZMADEC -lzmadec_LDFLAGS = $(xzdec_LDFLAGS) -lzmadec_LDADD = $(xzdec_LDADD) - - -dist_man_MANS = xzdec.1 - -install-data-hook: - cd $(DESTDIR)$(mandir)/man1 && \ - target=`echo xzdec | sed '$(transform)'` && \ - link=`echo lzmadec | sed '$(transform)'` && \ - rm -f $$link.1 && \ - $(LN_S) $$target.1 $$link.1 - -uninstall-hook: - cd $(DESTDIR)$(mandir)/man1 && \ - link=`echo lzmadec | sed '$(transform)'` && \ - rm -f $$link.1 diff --git a/Build/source/utils/xz-4.999.9beta/src/xzdec/Makefile.in b/Build/source/utils/xz-4.999.9beta/src/xzdec/Makefile.in deleted file mode 100644 index 4fda1f5c883..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xzdec/Makefile.in +++ /dev/null @@ -1,714 +0,0 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ -bin_PROGRAMS = xzdec$(EXEEXT) lzmadec$(EXEEXT) -@COND_W32_TRUE@am__append_1 = xzdec_w32res.rc -@COND_GNULIB_TRUE@am__append_2 = $(top_builddir)/lib/libgnu.a -@COND_W32_TRUE@am__append_3 = lzmadec_w32res.rc -subdir = src/xzdec -DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ - $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ - $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ - $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ - $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" -PROGRAMS = $(bin_PROGRAMS) -am__lzmadec_SOURCES_DIST = xzdec.c lzmadec_w32res.rc -@COND_W32_TRUE@am__objects_1 = lzmadec_w32res.$(OBJEXT) -am_lzmadec_OBJECTS = lzmadec-xzdec.$(OBJEXT) $(am__objects_1) -lzmadec_OBJECTS = $(am_lzmadec_OBJECTS) -am__DEPENDENCIES_1 = -am__DEPENDENCIES_2 = $(top_builddir)/src/liblzma/liblzma.la \ - $(am__append_2) $(am__DEPENDENCIES_1) -lzmadec_DEPENDENCIES = $(am__DEPENDENCIES_2) -lzmadec_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(lzmadec_LDFLAGS) \ - $(LDFLAGS) -o $@ -am__xzdec_SOURCES_DIST = xzdec.c xzdec_w32res.rc -@COND_W32_TRUE@am__objects_2 = xzdec_w32res.$(OBJEXT) -am_xzdec_OBJECTS = xzdec-xzdec.$(OBJEXT) $(am__objects_2) -xzdec_OBJECTS = $(am_xzdec_OBJECTS) -xzdec_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ - $(am__append_2) $(am__DEPENDENCIES_1) -xzdec_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(xzdec_LDFLAGS) \ - $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(lzmadec_SOURCES) $(xzdec_SOURCES) -DIST_SOURCES = $(am__lzmadec_SOURCES_DIST) $(am__xzdec_SOURCES_DIST) -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' -man1dir = $(mandir)/man1 -NROFF = nroff -MANS = $(dist_man_MANS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ -DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GETOPT_H = @GETOPT_H@ -GMSGFMT = @GMSGFMT@ -GMSGFMT_015 = @GMSGFMT_015@ -GREP = @GREP@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTLLIBS = @INTLLIBS@ -INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBICONV = @LIBICONV@ -LIBINTL = @LIBINTL@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBINTL = @LTLIBINTL@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -MSGFMT = @MSGFMT@ -MSGFMT_015 = @MSGFMT_015@ -MSGMERGE = @MSGMERGE@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POSIX_SHELL = @POSIX_SHELL@ -POSUB = @POSUB@ -PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -RC = @RC@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ -STATIC_LDFLAGS = @STATIC_LDFLAGS@ -STRIP = @STRIP@ -USE_NLS = @USE_NLS@ -VERSION = @VERSION@ -XGETTEXT = @XGETTEXT@ -XGETTEXT_015 = @XGETTEXT_015@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -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@ -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@ -lt_ECHO = @lt_ECHO@ -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@ -xz = @xz@ -xzdec_SOURCES = xzdec.c $(am__append_1) -xzdec_CPPFLAGS = \ - -I$(top_srcdir)/src/common \ - -I$(top_srcdir)/src/liblzma/api \ - -I$(top_builddir)/lib \ - $(STATIC_CPPFLAGS) - -xzdec_LDFLAGS = $(STATIC_LDFLAGS) -xzdec_LDADD = $(top_builddir)/src/liblzma/liblzma.la $(am__append_2) \ - $(LTLIBINTL) -lzmadec_SOURCES = xzdec.c $(am__append_3) -lzmadec_CPPFLAGS = $(xzdec_CPPFLAGS) -DLZMADEC -lzmadec_LDFLAGS = $(xzdec_LDFLAGS) -lzmadec_LDADD = $(xzdec_LDADD) -dist_man_MANS = xzdec.1 -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj .rc -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/xzdec/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/xzdec/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p || test -f $$p1; \ - then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - @list='$(bin_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 -lzmadec$(EXEEXT): $(lzmadec_OBJECTS) $(lzmadec_DEPENDENCIES) - @rm -f lzmadec$(EXEEXT) - $(lzmadec_LINK) $(lzmadec_OBJECTS) $(lzmadec_LDADD) $(LIBS) -xzdec$(EXEEXT): $(xzdec_OBJECTS) $(xzdec_DEPENDENCIES) - @rm -f xzdec$(EXEEXT) - $(xzdec_LINK) $(xzdec_OBJECTS) $(xzdec_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lzmadec-xzdec.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xzdec-xzdec.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -lzmadec-xzdec.o: xzdec.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmadec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lzmadec-xzdec.o -MD -MP -MF $(DEPDIR)/lzmadec-xzdec.Tpo -c -o lzmadec-xzdec.o `test -f 'xzdec.c' || echo '$(srcdir)/'`xzdec.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lzmadec-xzdec.Tpo $(DEPDIR)/lzmadec-xzdec.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xzdec.c' object='lzmadec-xzdec.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmadec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lzmadec-xzdec.o `test -f 'xzdec.c' || echo '$(srcdir)/'`xzdec.c - -lzmadec-xzdec.obj: xzdec.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmadec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lzmadec-xzdec.obj -MD -MP -MF $(DEPDIR)/lzmadec-xzdec.Tpo -c -o lzmadec-xzdec.obj `if test -f 'xzdec.c'; then $(CYGPATH_W) 'xzdec.c'; else $(CYGPATH_W) '$(srcdir)/xzdec.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lzmadec-xzdec.Tpo $(DEPDIR)/lzmadec-xzdec.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xzdec.c' object='lzmadec-xzdec.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzmadec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lzmadec-xzdec.obj `if test -f 'xzdec.c'; then $(CYGPATH_W) 'xzdec.c'; else $(CYGPATH_W) '$(srcdir)/xzdec.c'; fi` - -xzdec-xzdec.o: xzdec.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzdec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xzdec-xzdec.o -MD -MP -MF $(DEPDIR)/xzdec-xzdec.Tpo -c -o xzdec-xzdec.o `test -f 'xzdec.c' || echo '$(srcdir)/'`xzdec.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xzdec-xzdec.Tpo $(DEPDIR)/xzdec-xzdec.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xzdec.c' object='xzdec-xzdec.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzdec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xzdec-xzdec.o `test -f 'xzdec.c' || echo '$(srcdir)/'`xzdec.c - -xzdec-xzdec.obj: xzdec.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzdec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xzdec-xzdec.obj -MD -MP -MF $(DEPDIR)/xzdec-xzdec.Tpo -c -o xzdec-xzdec.obj `if test -f 'xzdec.c'; then $(CYGPATH_W) 'xzdec.c'; else $(CYGPATH_W) '$(srcdir)/xzdec.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xzdec-xzdec.Tpo $(DEPDIR)/xzdec-xzdec.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xzdec.c' object='xzdec-xzdec.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzdec_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xzdec-xzdec.obj `if test -f 'xzdec.c'; then $(CYGPATH_W) 'xzdec.c'; else $(CYGPATH_W) '$(srcdir)/xzdec.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-man1: $(dist_man_MANS) - @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" - @list=''; test -n "$(man1dir)" || exit 0; \ - { for i in $$list; do echo "$$i"; done; \ - l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.1[a-z]*$$/p'; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ - done; } - -uninstall-man1: - @$(NORMAL_UNINSTALL) - @list=''; test -n "$(man1dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.1[a-z]*$$/p'; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - test -z "$$files" || { \ - echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } - -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) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - 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; }; }'`; \ - 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) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - 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; }; }'`; \ - 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 - -distdir: $(DISTFILES) - @list='$(MANS)'; if test -n "$$list"; then \ - list=`for p in $$list; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ - if test -n "$$list" && \ - grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ - echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ - grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ - echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ - echo " typically \`make maintainer-clean' will remove them" >&2; \ - exit 1; \ - else :; fi; \ - else :; fi - @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 -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) $(MANS) -installdirs: - for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; 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: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -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-binPROGRAMS clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-man - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) install-data-hook -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-binPROGRAMS - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: install-man1 - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -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-binPROGRAMS uninstall-man - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) uninstall-hook -uninstall-man: uninstall-man1 - -.MAKE: install-am install-data-am install-strip uninstall-am - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ - clean-generic clean-libtool ctags distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am \ - install-data-hook install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-man1 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-binPROGRAMS \ - uninstall-hook uninstall-man uninstall-man1 - - -# Windows resource compiler support. It's fine to use xz_CPPFLAGS -# also for lzmadec. -.rc.o: - $(RC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(xzdec_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) -i $< -o $@ - -install-data-hook: - cd $(DESTDIR)$(mandir)/man1 && \ - target=`echo xzdec | sed '$(transform)'` && \ - link=`echo lzmadec | sed '$(transform)'` && \ - rm -f $$link.1 && \ - $(LN_S) $$target.1 $$link.1 - -uninstall-hook: - cd $(DESTDIR)$(mandir)/man1 && \ - link=`echo lzmadec | sed '$(transform)'` && \ - rm -f $$link.1 - -# 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/Build/source/utils/xz-4.999.9beta/src/xzdec/lzmadec_w32res.rc b/Build/source/utils/xz-4.999.9beta/src/xzdec/lzmadec_w32res.rc deleted file mode 100644 index 7d90e420541..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xzdec/lzmadec_w32res.rc +++ /dev/null @@ -1,5 +0,0 @@ -#define MY_TYPE VFT_APP -#define MY_NAME "lzmadec" -#define MY_SUFFIX ".exe" -#define MY_DESC "lzmadec uncompression tool for .lzma files" -#include "common_w32res.rc" diff --git a/Build/source/utils/xz-4.999.9beta/src/xzdec/xzdec.1 b/Build/source/utils/xz-4.999.9beta/src/xzdec/xzdec.1 deleted file mode 100644 index 442a19ece12..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xzdec/xzdec.1 +++ /dev/null @@ -1,168 +0,0 @@ -.\" -.\" Author: Lasse Collin -.\" -.\" This file has been put into the public domain. -.\" You can do whatever you want with this file. -.\" -.TH XZDEC 1 "2009-06-04" "Tukaani" "XZ Utils" -.SH NAME -xzdec, lzmadec \- Small .xz and .lzma decompressors -.SH SYNOPSIS -.B xzdec -.RI [ option ]... -.RI [ file ]... -.br -.B lzmadec -.RI [ option ]... -.RI [ file ]... -.SH DESCRIPTION -.B xzdec -is a liblzma-based decompression-only tool for -.B .xz -(and only -.BR .xz ) -files. -.B xzdec -is intended to work as a drop-in replacement for -.BR xz (1) -in the most common situations where a script has been written to use -.B "xz \-\-decompress \-\-stdout" -(and possibly a few other commonly used options) to decompress -.B .xz -files. -.B lzmadec -is identical to -.B xzdec -except that -.B lzmadec -supports -.B .lzma -files instead of -.B .xz -files. -.PP -To reduce the size of the executable, -.B xzdec -doesn't support multithreading or localization, and doesn't read options from -.B XZ_OPT -environment variable. -.B xzdec -doesn't support displaying intermediate progress information: sending -.B SIGINFO -to -.B xzdec -does nothing, but sending -.B SIGUSR1 -terminates the process instead of displaying progress information. -.SH OPTIONS -.TP -.BR \-d ", " \-\-decompress ", " \-\-uncompress -Ignored for -.BR xz (1) -compatibility. -.B xzdec -supports only decompression. -.TP -.BR \-k ", " \-\-keep -Ignored for -.BR xz (1) -compatibility. -.B xzdec -never creates or removes any files. -.TP -.BR \-c ", " \-\-stdout ", " \-\-to-stdout -Ignored for -.BR xz (1) -compatibility. -.B xzdec -always writes the decompressed data to standard output. -.TP -\fB\-M\fR \fIlimit\fR, \fB\-\-memory=\fIlimit -Set the memory usage -.IR limit . -If this option is specified multiple times, the last one takes effect. The -.I limit -can be specified in multiple ways: -.RS -.IP \(bu 3 -The -.I limit -can be an absolute value in bytes. Using an integer suffix like -.B MiB -can be useful. Example: -.B "\-\-memory=80MiB" -.IP \(bu 3 -The -.I limit -can be specified as a percentage of physical RAM. Example: -.B "\-\-memory=70%" -.IP \(bu 3 -The -.I limit -can be reset back to its default value (currently 40 % of physical RAM) -by setting it to -.BR 0 . -.IP \(bu 3 -The memory usage limiting can be effectively disabled by setting -.I limit -to -.BR max . -This isn't recommended. It's usually better to use, for example, -.BR \-\-memory=90% . -.RE -.IP -The current -.I limit -can be seen near the bottom of the output of the -.B \-\-help -option. -.TP -.BR \-q ", " \-\-quiet -Specifying this once does nothing since -.B xzdec -never displays any warnings or notices. -Specify this twice to suppress errors. -.TP -.BR \-Q ", " \-\-no-warn -Ignored for -.BR xz (1) -compatibility. -.B xzdec -never uses the exit status -.BR "2" . -.TP -.BR \-h ", " \-\-help -Display a help message and exit successfully. -.TP -.BR \-V ", " \-\-version -Display the version number of -.B xzdec -and liblzma. -.SH "EXIT STATUS" -.TP -.B 0 -All was good. -.TP -.B 1 -An error occurred. -.PP -.B xzdec -doesn't have any warning messages like -.BR xz (1) -has, thus the exit status -.B 2 -is not used by -.BR xzdec . -.SH NOTES -.B xzdec -and -.B lzmadec -are not really that small. The size can be reduced further by dropping -features from liblzma at compile time, but that shouldn't usually be done -for executables distributed in typical non-embedded operating system -distributions. If you need a truly small -.B .xz -decompressor, consider using XZ Embedded. -.\" TODO: Provide URL to XZ Embedded. -.SH "SEE ALSO" -.BR xz (1) diff --git a/Build/source/utils/xz-4.999.9beta/src/xzdec/xzdec.c b/Build/source/utils/xz-4.999.9beta/src/xzdec/xzdec.c deleted file mode 100644 index e99934f535c..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xzdec/xzdec.c +++ /dev/null @@ -1,496 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file xzdec.c -/// \brief Simple single-threaded tool to uncompress .xz or .lzma files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "sysdefs.h" -#include "lzma.h" - -#include -#include -#include -#include - -#ifdef DOSLIKE -# include -# include -#endif - -#include "getopt.h" -#include "physmem.h" - - -#ifdef LZMADEC -# define TOOL_FORMAT "lzma" -#else -# define TOOL_FORMAT "xz" -#endif - - -/// Number of bytes to use memory at maximum -static uint64_t memlimit; - -/// Error messages are suppressed if this is zero, which is the case when -/// --quiet has been given at least twice. -static unsigned int display_errors = 2; - -/// Program name to be shown in error messages -static const char *argv0; - - -static void lzma_attribute((format(printf, 1, 2))) -my_errorf(const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - - if (display_errors) { - fprintf(stderr, "%s: ", argv0); - vfprintf(stderr, fmt, ap); - fprintf(stderr, "\n"); - } - - va_end(ap); - return; -} - - -static void lzma_attribute((noreturn)) -my_exit(void) -{ - int status = EXIT_SUCCESS; - - // Close stdout. We don't care about stderr, because we write to it - // only when an error has already occurred. - const int ferror_err = ferror(stdout); - const int fclose_err = fclose(stdout); - - if (ferror_err || fclose_err) { - // If it was fclose() that failed, we have the reason - // in errno. If only ferror() indicated an error, - // we have no idea what the reason was. - my_errorf("Writing to standard output failed: %s", fclose_err - ? strerror(errno) : "Unknown error"); - status = EXIT_FAILURE; - } - - exit(status); -} - - -static void lzma_attribute((noreturn)) -help(void) -{ - printf( -"Usage: %s [OPTION]... [FILE]...\n" -"Uncompress files in the ." TOOL_FORMAT " format to the standard output.\n" -"\n" -" -c, --stdout (ignored)\n" -" -d, --decompress (ignored)\n" -" -k, --keep (ignored)\n" -" -M, --memory=NUM use NUM bytes of memory at maximum (0 means default)\n" -" -q, --quiet specify *twice* to suppress errors\n" -" -Q, --no-warn (ignored)\n" -" -h, --help display this help and exit\n" -" -V, --version display the version number and exit\n" -"\n" -"With no FILE, or when FILE is -, read standard input.\n" -"\n" -"On this system and configuration, this program will use at maximum of roughly\n" -"%" PRIu64 " MiB RAM.\n" -"\n" -"Report bugs to <" PACKAGE_BUGREPORT "> (in English or Finnish).\n" -PACKAGE_NAME " home page: <" PACKAGE_HOMEPAGE ">\n", - argv0, memlimit / (1024 * 1024)); - my_exit(); -} - - -static void lzma_attribute((noreturn)) -version(void) -{ - printf(TOOL_FORMAT "dec (" PACKAGE_NAME ") " LZMA_VERSION_STRING "\n" - "liblzma %s\n", lzma_version_string()); - - my_exit(); -} - - -/// Find out the amount of physical memory (RAM) in the system, and set -/// the memory usage limit to the given percentage of RAM. -static void -memlimit_set_percentage(uint32_t percentage) -{ - uint64_t mem = physmem(); - - // If we cannot determine the amount of RAM, assume 32 MiB. - if (mem == 0) - mem = UINT64_C(32) * 1024 * 1024; - - memlimit = percentage * mem / 100; - return; -} - - -/// Set the memory usage limit to give number of bytes. Zero is a special -/// value to indicate the default limit. -static void -memlimit_set(uint64_t new_memlimit) -{ - if (new_memlimit == 0) - memlimit_set_percentage(40); - else - memlimit = new_memlimit; - - return; -} - - -/// \brief Convert a string to uint64_t -/// -/// This is rudely copied from src/xz/util.c and modified a little. :-( -/// -/// \param max Return value when the string "max" was specified. -/// -static uint64_t -str_to_uint64(const char *value, uint64_t max) -{ - uint64_t result = 0; - - // Accept special value "max". - if (strcmp(value, "max") == 0) - return max; - - if (*value < '0' || *value > '9') { - my_errorf("%s: Value is not a non-negative decimal integer", - value); - exit(EXIT_FAILURE); - } - - do { - // Don't overflow. - if (result > (UINT64_MAX - 9) / 10) - return UINT64_MAX; - - result *= 10; - result += *value - '0'; - ++value; - } while (*value >= '0' && *value <= '9'); - - if (*value != '\0') { - // Look for suffix. - static const struct { - const char name[4]; - uint32_t multiplier; - } suffixes[] = { - { "k", 1000 }, - { "kB", 1000 }, - { "M", 1000000 }, - { "MB", 1000000 }, - { "G", 1000000000 }, - { "GB", 1000000000 }, - { "Ki", 1024 }, - { "KiB", 1024 }, - { "Mi", 1048576 }, - { "MiB", 1048576 }, - { "Gi", 1073741824 }, - { "GiB", 1073741824 } - }; - - uint32_t multiplier = 0; - for (size_t i = 0; i < ARRAY_SIZE(suffixes); ++i) { - if (strcmp(value, suffixes[i].name) == 0) { - multiplier = suffixes[i].multiplier; - break; - } - } - - if (multiplier == 0) { - my_errorf("%s: Invalid suffix", value); - exit(EXIT_FAILURE); - } - - // Don't overflow here either. - if (result > UINT64_MAX / multiplier) - result = UINT64_MAX; - else - result *= multiplier; - } - - return result; -} - - -/// Parses command line options. -static void -parse_options(int argc, char **argv) -{ - static const char short_opts[] = "cdkM:hqQV"; - static const struct option long_opts[] = { - { "stdout", no_argument, NULL, 'c' }, - { "to-stdout", no_argument, NULL, 'c' }, - { "decompress", no_argument, NULL, 'd' }, - { "uncompress", no_argument, NULL, 'd' }, - { "keep", no_argument, NULL, 'k' }, - { "memory", required_argument, NULL, 'M' }, - { "quiet", no_argument, NULL, 'q' }, - { "no-warn", no_argument, NULL, 'Q' }, - { "help", no_argument, NULL, 'h' }, - { "version", no_argument, NULL, 'V' }, - { NULL, 0, NULL, 0 } - }; - - int c; - - while ((c = getopt_long(argc, argv, short_opts, long_opts, NULL)) - != -1) { - switch (c) { - case 'c': - case 'd': - case 'k': - case 'Q': - break; - - case 'M': { - // Support specifying the limit as a percentage of - // installed physical RAM. - const size_t len = strlen(optarg); - if (len > 0 && optarg[len - 1] == '%') { - // Memory limit is a percentage of total - // installed RAM. - optarg[len - 1] = '\0'; - const uint64_t percentage - = str_to_uint64(optarg, 100); - if (percentage < 1 || percentage > 100) { - my_errorf("Percentage must be in " - "the range [1, 100]"); - exit(EXIT_FAILURE); - } - - memlimit_set_percentage(percentage); - } else { - memlimit_set(str_to_uint64( - optarg, UINT64_MAX)); - } - - break; - } - - case 'q': - if (display_errors > 0) - --display_errors; - - break; - - case 'h': - help(); - - case 'V': - version(); - - default: - exit(EXIT_FAILURE); - } - } - - return; -} - - -static void -uncompress(lzma_stream *strm, FILE *file, const char *filename) -{ - lzma_ret ret; - - // Initialize the decoder -#ifdef LZMADEC - ret = lzma_alone_decoder(strm, memlimit); -#else - ret = lzma_stream_decoder(strm, memlimit, LZMA_CONCATENATED); -#endif - - // The only reasonable error here is LZMA_MEM_ERROR. - // FIXME: Maybe also LZMA_MEMLIMIT_ERROR in future? - if (ret != LZMA_OK) { - my_errorf("%s", ret == LZMA_MEM_ERROR ? strerror(ENOMEM) - : "Internal error (bug)"); - exit(EXIT_FAILURE); - } - - // Input and output buffers - uint8_t in_buf[BUFSIZ]; - uint8_t out_buf[BUFSIZ]; - - strm->avail_in = 0; - strm->next_out = out_buf; - strm->avail_out = BUFSIZ; - - lzma_action action = LZMA_RUN; - - while (true) { - if (strm->avail_in == 0) { - strm->next_in = in_buf; - strm->avail_in = fread(in_buf, 1, BUFSIZ, file); - - if (ferror(file)) { - // POSIX says that fread() sets errno if - // an error occurred. ferror() doesn't - // touch errno. - my_errorf("%s: Error reading input file: %s", - filename, strerror(errno)); - exit(EXIT_FAILURE); - } - -#ifndef LZMADEC - // When using LZMA_CONCATENATED, we need to tell - // liblzma when it has got all the input. - if (feof(file)) - action = LZMA_FINISH; -#endif - } - - ret = lzma_code(strm, action); - - // Write and check write error before checking decoder error. - // This way as much data as possible gets written to output - // even if decoder detected an error. - if (strm->avail_out == 0 || ret != LZMA_OK) { - const size_t write_size = BUFSIZ - strm->avail_out; - - if (fwrite(out_buf, 1, write_size, stdout) - != write_size) { - // Wouldn't be a surprise if writing to stderr - // would fail too but at least try to show an - // error message. - my_errorf("Cannot write to standard output: " - "%s", strerror(errno)); - exit(EXIT_FAILURE); - } - - strm->next_out = out_buf; - strm->avail_out = BUFSIZ; - } - - if (ret != LZMA_OK) { - if (ret == LZMA_STREAM_END) { -#ifdef LZMADEC - // Check that there's no trailing garbage. - if (strm->avail_in != 0 - || fread(in_buf, 1, 1, file) - != 0 - || !feof(file)) - ret = LZMA_DATA_ERROR; - else - return; -#else - // lzma_stream_decoder() already guarantees - // that there's no trailing garbage. - assert(strm->avail_in == 0); - assert(action == LZMA_FINISH); - assert(feof(file)); - return; -#endif - } - - const char *msg; - switch (ret) { - case LZMA_MEM_ERROR: - msg = strerror(ENOMEM); - break; - - case LZMA_MEMLIMIT_ERROR: - msg = "Memory usage limit reached"; - break; - - case LZMA_FORMAT_ERROR: - msg = "File format not recognized"; - break; - - case LZMA_OPTIONS_ERROR: - // FIXME: Better message? - msg = "Unsupported compression options"; - break; - - case LZMA_DATA_ERROR: - msg = "File is corrupt"; - break; - - case LZMA_BUF_ERROR: - msg = "Unexpected end of input"; - break; - - default: - msg = "Internal error (bug)"; - break; - } - - my_errorf("%s: %s", filename, msg); - exit(EXIT_FAILURE); - } - } -} - - -int -main(int argc, char **argv) -{ - // Set the argv0 global so that we can print the command name in - // error and help messages. - argv0 = argv[0]; - - // Set the default memory usage limit. This is needed before parsing - // the command line arguments. - memlimit_set(0); - - // Parse the command line options. - parse_options(argc, argv); - - // The same lzma_stream is used for all files that we decode. This way - // we don't need to reallocate memory for every file if they use same - // compression settings. - lzma_stream strm = LZMA_STREAM_INIT; - - // Some systems require setting stdin and stdout to binary mode. -#ifdef DOSLIKE - setmode(fileno(stdin), O_BINARY); - setmode(fileno(stdout), O_BINARY); -#endif - - if (optind == argc) { - // No filenames given, decode from stdin. - uncompress(&strm, stdin, "(stdin)"); - } else { - // Loop through the filenames given on the command line. - do { - // "-" indicates stdin. - if (strcmp(argv[optind], "-") == 0) { - uncompress(&strm, stdin, "(stdin)"); - } else { - FILE *file = fopen(argv[optind], "rb"); - if (file == NULL) { - my_errorf("%s: %s", argv[optind], - strerror(errno)); - exit(EXIT_FAILURE); - } - - uncompress(&strm, file, argv[optind]); - fclose(file); - } - } while (++optind < argc); - } - -#ifndef NDEBUG - // Free the memory only when debugging. Freeing wastes some time, - // but allows detecting possible memory leaks with Valgrind. - lzma_end(&strm); -#endif - - my_exit(); -} diff --git a/Build/source/utils/xz-4.999.9beta/src/xzdec/xzdec_w32res.rc b/Build/source/utils/xz-4.999.9beta/src/xzdec/xzdec_w32res.rc deleted file mode 100644 index 626f26cea87..00000000000 --- a/Build/source/utils/xz-4.999.9beta/src/xzdec/xzdec_w32res.rc +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - */ - -#define MY_TYPE VFT_APP -#define MY_NAME "xzdec" -#define MY_SUFFIX ".exe" -#define MY_DESC "xzdec uncompression tool for .xz files" -#include "common_w32res.rc" diff --git a/Build/source/utils/xz-4.999.9beta/tests/Makefile.am b/Build/source/utils/xz-4.999.9beta/tests/Makefile.am deleted file mode 100644 index d01787a37ad..00000000000 --- a/Build/source/utils/xz-4.999.9beta/tests/Makefile.am +++ /dev/null @@ -1,51 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -EXTRA_DIST = \ - files \ - tests.h \ - test_files.sh \ - test_compress.sh \ - bcj_test.c \ - compress_prepared_bcj_sparc \ - compress_prepared_bcj_x86 - -AM_CPPFLAGS = \ - -I$(top_srcdir)/src/common \ - -I$(top_srcdir)/src/liblzma/api \ - -I$(top_builddir)/lib \ - $(STATIC_CPPFLAGS) - -AM_LDFLAGS = $(STATIC_LDFLAGS) - -LDADD = $(top_builddir)/src/liblzma/liblzma.la - -if COND_GNULIB -LDADD += $(top_builddir)/lib/libgnu.a -endif - -LDADD += $(LTLIBINTL) - -check_PROGRAMS = \ - create_compress_files \ - test_check \ - test_stream_flags \ - test_filter_flags \ - test_block_header \ - test_index - -TESTS = \ - test_check \ - test_stream_flags \ - test_filter_flags \ - test_block_header \ - test_index \ - test_files.sh \ - test_compress.sh - -clean-local: - -rm -f compress_generated_* diff --git a/Build/source/utils/xz-4.999.9beta/tests/Makefile.in b/Build/source/utils/xz-4.999.9beta/tests/Makefile.in deleted file mode 100644 index d4a018ecac3..00000000000 --- a/Build/source/utils/xz-4.999.9beta/tests/Makefile.in +++ /dev/null @@ -1,687 +0,0 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ -@COND_GNULIB_TRUE@am__append_1 = $(top_builddir)/lib/libgnu.a -check_PROGRAMS = create_compress_files$(EXEEXT) test_check$(EXEEXT) \ - test_stream_flags$(EXEEXT) test_filter_flags$(EXEEXT) \ - test_block_header$(EXEEXT) test_index$(EXEEXT) -TESTS = test_check$(EXEEXT) test_stream_flags$(EXEEXT) \ - test_filter_flags$(EXEEXT) test_block_header$(EXEEXT) \ - test_index$(EXEEXT) test_files.sh test_compress.sh -subdir = tests -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ - $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lc_cpucores.m4 \ - $(top_srcdir)/m4/lc_physmem.m4 $(top_srcdir)/m4/lib-ld.m4 \ - $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ - $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix-shell.m4 \ - $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/visibility.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -create_compress_files_SOURCES = create_compress_files.c -create_compress_files_OBJECTS = create_compress_files.$(OBJEXT) -create_compress_files_LDADD = $(LDADD) -am__DEPENDENCIES_1 = -create_compress_files_DEPENDENCIES = \ - $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ - $(am__DEPENDENCIES_1) -test_block_header_SOURCES = test_block_header.c -test_block_header_OBJECTS = test_block_header.$(OBJEXT) -test_block_header_LDADD = $(LDADD) -test_block_header_DEPENDENCIES = \ - $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ - $(am__DEPENDENCIES_1) -test_check_SOURCES = test_check.c -test_check_OBJECTS = test_check.$(OBJEXT) -test_check_LDADD = $(LDADD) -test_check_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ - $(am__append_1) $(am__DEPENDENCIES_1) -test_filter_flags_SOURCES = test_filter_flags.c -test_filter_flags_OBJECTS = test_filter_flags.$(OBJEXT) -test_filter_flags_LDADD = $(LDADD) -test_filter_flags_DEPENDENCIES = \ - $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ - $(am__DEPENDENCIES_1) -test_index_SOURCES = test_index.c -test_index_OBJECTS = test_index.$(OBJEXT) -test_index_LDADD = $(LDADD) -test_index_DEPENDENCIES = $(top_builddir)/src/liblzma/liblzma.la \ - $(am__append_1) $(am__DEPENDENCIES_1) -test_stream_flags_SOURCES = test_stream_flags.c -test_stream_flags_OBJECTS = test_stream_flags.$(OBJEXT) -test_stream_flags_LDADD = $(LDADD) -test_stream_flags_DEPENDENCIES = \ - $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ - $(am__DEPENDENCIES_1) -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = create_compress_files.c test_block_header.c test_check.c \ - test_filter_flags.c test_index.c test_stream_flags.c -DIST_SOURCES = create_compress_files.c test_block_header.c \ - test_check.c test_filter_flags.c test_index.c \ - test_stream_flags.c -ETAGS = etags -CTAGS = ctags -am__tty_colors = \ -red=; grn=; lgn=; blu=; std= -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CFLAGS = @AM_CFLAGS@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -DYNAMIC_CPPFLAGS = @DYNAMIC_CPPFLAGS@ -DYNAMIC_LDFLAGS = @DYNAMIC_LDFLAGS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GETOPT_H = @GETOPT_H@ -GMSGFMT = @GMSGFMT@ -GMSGFMT_015 = @GMSGFMT_015@ -GREP = @GREP@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTLLIBS = @INTLLIBS@ -INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBICONV = @LIBICONV@ -LIBINTL = @LIBINTL@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBICONV = @LTLIBICONV@ -LTLIBINTL = @LTLIBINTL@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -MSGFMT = @MSGFMT@ -MSGFMT_015 = @MSGFMT_015@ -MSGMERGE = @MSGMERGE@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_HOMEPAGE = @PACKAGE_HOMEPAGE@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -POSIX_SHELL = @POSIX_SHELL@ -POSUB = @POSUB@ -PREFERABLY_POSIX_SHELL = @PREFERABLY_POSIX_SHELL@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -RANLIB = @RANLIB@ -RC = @RC@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STATIC_CPPFLAGS = @STATIC_CPPFLAGS@ -STATIC_LDFLAGS = @STATIC_LDFLAGS@ -STRIP = @STRIP@ -USE_NLS = @USE_NLS@ -VERSION = @VERSION@ -XGETTEXT = @XGETTEXT@ -XGETTEXT_015 = @XGETTEXT_015@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -acx_pthread_config = @acx_pthread_config@ -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@ -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@ -lt_ECHO = @lt_ECHO@ -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@ -xz = @xz@ -EXTRA_DIST = \ - files \ - tests.h \ - test_files.sh \ - test_compress.sh \ - bcj_test.c \ - compress_prepared_bcj_sparc \ - compress_prepared_bcj_x86 - -AM_CPPFLAGS = \ - -I$(top_srcdir)/src/common \ - -I$(top_srcdir)/src/liblzma/api \ - -I$(top_builddir)/lib \ - $(STATIC_CPPFLAGS) - -AM_LDFLAGS = $(STATIC_LDFLAGS) -LDADD = $(top_builddir)/src/liblzma/liblzma.la $(am__append_1) \ - $(LTLIBINTL) -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign tests/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-checkPROGRAMS: - @list='$(check_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 -create_compress_files$(EXEEXT): $(create_compress_files_OBJECTS) $(create_compress_files_DEPENDENCIES) - @rm -f create_compress_files$(EXEEXT) - $(LINK) $(create_compress_files_OBJECTS) $(create_compress_files_LDADD) $(LIBS) -test_block_header$(EXEEXT): $(test_block_header_OBJECTS) $(test_block_header_DEPENDENCIES) - @rm -f test_block_header$(EXEEXT) - $(LINK) $(test_block_header_OBJECTS) $(test_block_header_LDADD) $(LIBS) -test_check$(EXEEXT): $(test_check_OBJECTS) $(test_check_DEPENDENCIES) - @rm -f test_check$(EXEEXT) - $(LINK) $(test_check_OBJECTS) $(test_check_LDADD) $(LIBS) -test_filter_flags$(EXEEXT): $(test_filter_flags_OBJECTS) $(test_filter_flags_DEPENDENCIES) - @rm -f test_filter_flags$(EXEEXT) - $(LINK) $(test_filter_flags_OBJECTS) $(test_filter_flags_LDADD) $(LIBS) -test_index$(EXEEXT): $(test_index_OBJECTS) $(test_index_DEPENDENCIES) - @rm -f test_index$(EXEEXT) - $(LINK) $(test_index_OBJECTS) $(test_index_LDADD) $(LIBS) -test_stream_flags$(EXEEXT): $(test_stream_flags_OBJECTS) $(test_stream_flags_DEPENDENCIES) - @rm -f test_stream_flags$(EXEEXT) - $(LINK) $(test_stream_flags_OBJECTS) $(test_stream_flags_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/create_compress_files.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_block_header.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_check.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_filter_flags.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_index.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_stream_flags.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -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) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - 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; }; }'`; \ - 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) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - 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; }; }'`; \ - 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 \ - echo "$$grn$$dashes"; \ - else \ - echo "$$red$$dashes"; \ - fi; \ - echo "$$banner"; \ - test -z "$$skipped" || echo "$$skipped"; \ - test -z "$$report" || echo "$$report"; \ - echo "$$dashes$$std"; \ - test "$$failed" -eq 0; \ - else :; fi - -distdir: $(DISTFILES) - @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 -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: check-am -all-am: Makefile -installdirs: -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: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -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-checkPROGRAMS clean-generic clean-libtool clean-local \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -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 -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: - -.MAKE: check-am install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ - clean-checkPROGRAMS clean-generic clean-libtool clean-local \ - ctags distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am 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 - - -clean-local: - -rm -f compress_generated_* - -# 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/Build/source/utils/xz-4.999.9beta/tests/bcj_test.c b/Build/source/utils/xz-4.999.9beta/tests/bcj_test.c deleted file mode 100644 index 05de38a28a3..00000000000 --- a/Build/source/utils/xz-4.999.9beta/tests/bcj_test.c +++ /dev/null @@ -1,65 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file bcj_test.c -/// \brief Source code of compress_prepared_bcj_* -/// -/// This is a simple program that should make the compiler to generate -/// PC-relative branches, jumps, and calls. The compiled files can then -/// be used to test the branch conversion filters. Note that this program -/// itself does nothing useful. -/// -/// Compiling: gcc -std=c99 -fPIC -c bcj_test.c -/// Don't optimize or strip. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -extern int jump(int a, int b); - - -extern int -call(int a, int b) -{ - if (a < b) - a = jump(a, b); - - return a; -} - - -extern int -jump(int a, int b) -{ - // The loop generates conditional jump backwards. - while (1) { - if (a < b) { - a *= 2; - a += 3 * b; - break; - } else { - // Put enough code here to prevent JMP SHORT on x86. - a += b; - a /= 2; - b += b % 5; - a -= b / 3; - b = 2 * b + a - 1; - a *= b + a + 1; - b += a - 1; - a += b * 2 - a / 5; - } - } - - return a; -} - - -int -main(int argc, char **argv) -{ - int a = call(argc, argc + 1); - return a == 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/tests/compress_prepared_bcj_sparc b/Build/source/utils/xz-4.999.9beta/tests/compress_prepared_bcj_sparc deleted file mode 100644 index 86ea7ddb11b..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/compress_prepared_bcj_sparc and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/compress_prepared_bcj_x86 b/Build/source/utils/xz-4.999.9beta/tests/compress_prepared_bcj_x86 deleted file mode 100644 index bcc546f04cb..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/compress_prepared_bcj_x86 and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/create_compress_files.c b/Build/source/utils/xz-4.999.9beta/tests/create_compress_files.c deleted file mode 100644 index 44367d8f18e..00000000000 --- a/Build/source/utils/xz-4.999.9beta/tests/create_compress_files.c +++ /dev/null @@ -1,157 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file create_compress_files.c -/// \brief Creates bunch of test files to be compressed -/// -/// Using a test file generator program saves space in the source code -/// package considerably. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "sysdefs.h" -#include - - -// Avoid re-creating the test files every time the tests are run. -#define create_test(name) \ -do { \ - if (!file_exists("compress_generated_" #name)) { \ - FILE *file = file_create("compress_generated_" #name); \ - write_ ## name(file); \ - file_finish(file, "compress_generated_" #name); \ - } \ -} while (0) - - -static bool -file_exists(const char *filename) -{ - // Trying to be somewhat portable by avoiding stat(). - FILE *file = fopen(filename, "rb"); - bool ret; - - if (file != NULL) { - fclose(file); - ret = true; - } else { - ret = false; - } - - return ret; -} - - -static FILE * -file_create(const char *filename) -{ - FILE *file = fopen(filename, "wb"); - - if (file == NULL) { - perror(filename); - exit(1); - } - - return file; -} - - -static void -file_finish(FILE *file, const char *filename) -{ - const bool ferror_fail = ferror(file); - const bool fclose_fail = fclose(file); - - if (ferror_fail || fclose_fail) { - perror(filename); - exit(1); - } -} - - -// File that repeats "abc\n" a few thousand times. This is targeted -// especially at Subblock filter's run-length encoder. -static void -write_abc(FILE *file) -{ - for (size_t i = 0; i < 12345; ++i) - fwrite("abc\n", 4, 1, file); -} - - -// File that doesn't compress. We always use the same random seed to -// generate identical files on all systems. -static void -write_random(FILE *file) -{ - uint32_t n = 5; - - for (size_t i = 0; i < 123456; ++i) { - n = 101771 * n + 71777; - - putc(n & 0xFF, file); - putc((n >> 8) & 0xFF, file); - putc((n >> 16) & 0xFF, file); - putc(n >> 24, file); - } -} - - -// Text file -static void -write_text(FILE *file) -{ - static const char *lorem[] = { - "Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", - "adipisicing", "elit,", "sed", "do", "eiusmod", "tempor", - "incididunt", "ut", "labore", "et", "dolore", "magna", - "aliqua.", "Ut", "enim", "ad", "minim", "veniam,", "quis", - "nostrud", "exercitation", "ullamco", "laboris", "nisi", - "ut", "aliquip", "ex", "ea", "commodo", "consequat.", - "Duis", "aute", "irure", "dolor", "in", "reprehenderit", - "in", "voluptate", "velit", "esse", "cillum", "dolore", - "eu", "fugiat", "nulla", "pariatur.", "Excepteur", "sint", - "occaecat", "cupidatat", "non", "proident,", "sunt", "in", - "culpa", "qui", "officia", "deserunt", "mollit", "anim", - "id", "est", "laborum." - }; - - // Let the first paragraph be the original text. - for (size_t w = 0; w < ARRAY_SIZE(lorem); ++w) { - fprintf(file, "%s ", lorem[w]); - - if (w % 7 == 6) - fprintf(file, "\n"); - } - - // The rest shall be (hopefully) meaningless combinations of - // the same words. - uint32_t n = 29; - - for (size_t p = 0; p < 500; ++p) { - fprintf(file, "\n\n"); - - for (size_t w = 0; w < ARRAY_SIZE(lorem); ++w) { - n = 101771 * n + 71777; - - fprintf(file, "%s ", lorem[n % ARRAY_SIZE(lorem)]); - - if (w % 7 == 6) - fprintf(file, "\n"); - } - } -} - - -int -main(void) -{ - create_test(abc); - create_test(random); - create_test(text); - return 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/README b/Build/source/utils/xz-4.999.9beta/tests/files/README deleted file mode 100644 index 392ff768a90..00000000000 --- a/Build/source/utils/xz-4.999.9beta/tests/files/README +++ /dev/null @@ -1,232 +0,0 @@ - -.xz Test Files ----------------- - -0. Introduction - - This directory contains bunch of files to test handling of .xz files - in .xz decoder implementations. Many of the files have been created - by hand with a hex editor, thus there is no better "source code" than - the files themselves. All the test files (*.xz) and this README have - been put into the public domain. - - -1. File Types - - Good files (good-*.xz) must decode successfully without requiring - a lot of CPU time or RAM. - - Unsupported files (unsupported-*.xz) are good files, but headers - indicate features not supported by the current file format - specification. - - Bad files (bad-*.xz) must cause the decoder to give an error. Like - with the good files, these files must not require a lot of CPU time - or RAM before they get detected to be broken. - - -2. Descriptions of Individual Files - -2.1. Good Files - - good-0-empty.xz has one Stream with no Blocks. - - good-0pad-empty.xz has one Stream with no Blocks followed by - four-byte Stream Padding. - - good-0cat-empty.xz has two zero-Block Streams concatenated without - Stream Padding. - - good-0catpad-empty.xz has two zero-Block Streams concatenated with - four-byte Stream Padding between the Streams. - - good-1-check-none.xz has one Stream with one Block with two - uncompressed LZMA2 chunks and no integrity check. - - good-1-check-crc32.xz has one Stream with one Block with two - uncompressed LZMA2 chunks and CRC32 check. - - good-1-check-crc64.xz is like good-1-check-crc32.xz but with CRC64. - - good-1-check-sha256.xz is like good-1-check-crc32.xz but with - SHA256. - - good-2-lzma2.xz has one Stream with two Blocks with one uncompressed - LZMA2 chunk in each Block. - - good-1-block_header-1.xz has both Compressed Size and Uncompressed - Size in the Block Header. This has also four extra bytes of Header - Padding. - - good-1-block_header-2.xz has known Compressed Size. - - good-1-block_header-3.xz has known Uncompressed Size. - - good-1-delta-lzma2.tiff.xz is an image file that compresses - better with Delta+LZMA2 than with plain LZMA2. - - good-1-x86-lzma2.xz uses the x86 filter (BCJ) and LZMA2. The - uncompressed file is compress_prepared_bcj_x86 found from the tests - directory. - - good-1-sparc-lzma2.xz uses the SPARC filter and LZMA. The - uncompressed file is compress_prepared_bcj_sparc found from the tests - directory. - - good-1-lzma2-1.xz has two LZMA2 chunks, of which the second sets - new properties. - - good-1-lzma2-2.xz has two LZMA2 chunks, of which the second resets - the state without specifying new properties. - - good-1-lzma2-3.xz has two LZMA2 chunks, of which the first is - uncompressed and the second is LZMA. The first chunk resets dictionary - and the second sets new properties. - - good-1-lzma2-4.xz has three LZMA2 chunks: First is LZMA, second is - uncompressed with dictionary reset, and third is LZMA with new - properties but without dictionary reset. - - good-1-3delta-lzma2.xz has three Delta filters and LZMA2. - - -2.2. Unsupported Files - - unsupported-check.xz uses Check ID 0x02 which isn't supported by - the current version of the file format. It is implementation-defined - how this file handled (it may reject it, or decode it possibly with - a warning). - - unsupported-block_header.xz has a non-null byte in Header Padding, - which may indicate presence of a new unsupported field. - - unsupported-filter_flags-1.xz has unsupported Filter ID 0x7F. - - unsupported-filter_flags-2.xz specifies only Delta filter in the - List of Filter Flags, but Delta isn't allowed as the last filter in - the chain. It could be a little more correct to detect this file as - corrupt instead of unsupported, but saying it is unsupported is - simpler in case of liblzma. - - unsupported-filter_flags-3.xz specifies two LZMA2 filters in the - List of Filter Flags. LZMA2 is allowed only as the last filter in the - chain. It could be a little more correct to detect this file as - corrupt instead of unsupported, but saying it is unsupported is - simpler in case of liblzma. - - -2.3. Bad Files - - bad-0pad-empty.xz has one Stream with no Blocks followed by - five-byte Stream Padding. Stream Padding must be a multiple of four - bytes, thus this file is corrupt. - - bad-0catpad-empty.xz has two zero-Block Streams concatenated with - five-byte Stream Padding between the Streams. - - bad-0cat-alone.xz is good-0-empty.xz concatenated with an empty - LZMA_Alone file. - - bad-0cat-header_magic.xz is good-0cat-empty.xz but with one byte - wrong in the Header Magic Bytes field of the second Stream. liblzma - gives LZMA_DATA_ERROR for this. (LZMA_FORMAT_ERROR is used only if - the first Stream of a file has invalid Header Magic Bytes.) - - bad-0-header_magic.xz is good-0-empty.xz but with one byte wrong - in the Header Magic Bytes field. liblzma gives LZMA_FORMAT_ERROR for - this. - - bad-0-footer_magic.xz is good-0-empty.xz but with one byte wrong - in the Footer Magic Bytes field. liblzma gives LZMA_DATA_ERROR for - this. - - bad-0-empty-truncated.xz is good-0-empty.xz without the last byte - of the file. - - bad-0-nonempty_index.xz has no Blocks but Index claims that there is - one Block. - - bad-0-backward_size.xz has wrong Backward Size in Stream Footer. - - bad-1-stream_flags-1.xz has different Stream Flags in Stream Header - and Stream Footer. - - bad-1-stream_flags-2.xz has wrong CRC32 in Stream Header. - - bad-1-stream_flags-3.xz has wrong CRC32 in Stream Footer. - - bad-1-vli-1.xz has two-byte variable-length integer in the - Uncompressed Size field in Block Header while one-byte would be enough - for that value. It's important that the file gets rejected due to too - big integer encoding instead of due to Uncompressed Size not matching - the value stored in the Block Header. That is, the decoder must not - try to decode the Compressed Data field. - - bad-1-vli-2.xz has ten-byte variable-length integer as Uncompressed - Size in Block Header. It's important that the file gets rejected due - to too big integer encoding instead of due to Uncompressed Size not - matching the value stored in the Block Header. That is, the decoder - must not try to decode the Compressed Data field. - - bad-1-block_header-1.xz has Block Header that ends in the middle of - the Filter Flags field. - - bad-1-block_header-2.xz has Block Header that has Compressed Size and - Uncompressed Size but no List of Filter Flags field. - - bad-1-block_header-3.xz has wrong CRC32 in Block Header. - - bad-1-block_header-4.xz has too big Compressed Size in Block Header - (2^63 - 1 bytes while maximum is a little less, because the whole - Block must stay smaller than 2^63). It's important that the file - gets rejected due to invalid Compressed Size value; the decoder - must not try decoding the Compressed Data field. - - bad-1-block_header-5.xz has zero as Compressed Size in Block Header. - - bad-2-index-1.xz has wrong Unpadded Sizes in Index. - - bad-2-index-2.xz has wrong Uncompressed Sizes in Index. - - bad-2-index-3.xz has non-null byte in Index Padding. - - bad-2-index-4.xz wrong CRC32 in Index. - - bad-2-index-5.xz has zero as Unpadded Size. It is important that the - file gets rejected specifically due to Unpadded Size having an invalid - value. - - bad-2-compressed_data_padding.xz has non-null byte in the padding of - the Compressed Data field of the first Block. - - bad-1-check-crc32.xz has wrong Check (CRC32). - - bad-1-check-crc64.xz has wrong Check (CRC64). - - bad-1-check-sha256.xz has wrong Check (SHA-256). - - bad-1-lzma2-1.xz has LZMA2 stream whose first chunk (uncompressed) - doesn't reset the dictionary. - - bad-1-lzma2-2.xz has two LZMA2 chunks, of which the second chunk - indicates dictionary reset, but the LZMA compressed data tries to - repeat data from the previous chunk. - - bad-1-lzma2-3.xz sets new invalid properties (lc=8, lp=0, pb=0) in - the middle of Block. - - bad-1-lzma2-4.xz has two LZMA2 chunks, of which the first is - uncompressed and the second is LZMA. The first chunk resets dictionary - as it should, but the second chunk tries to reset state without - specifying properties for LZMA. - - bad-1-lzma2-5.xz is like bad-1-lzma2-4.xz but doesn't try to reset - anything in the header of the second chunk. - - bad-1-lzma2-6.xz has reserved LZMA2 control byte value (0x03). - - bad-1-lzma2-7.xz has EOPM at LZMA level. - - bad-1-lzma2-8.xz is like good-1-lzma2-4.xz but doesn't set new - properties in the third LZMA2 chunk. - diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-backward_size.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-backward_size.xz deleted file mode 100644 index 2b46fa937b3..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-backward_size.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-empty-truncated.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-empty-truncated.xz deleted file mode 100644 index f879af84ac4..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-empty-truncated.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-footer_magic.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-footer_magic.xz deleted file mode 100644 index 5d9e3894bc2..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-footer_magic.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-header_magic.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-header_magic.xz deleted file mode 100644 index 5984a453bf8..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-header_magic.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-nonempty_index.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-nonempty_index.xz deleted file mode 100644 index ed6e81fa046..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0-nonempty_index.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0cat-alone.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-0cat-alone.xz deleted file mode 100644 index a915a3a1e2b..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0cat-alone.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0cat-header_magic.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-0cat-header_magic.xz deleted file mode 100644 index 426bf2d4218..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0cat-header_magic.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0catpad-empty.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-0catpad-empty.xz deleted file mode 100644 index 97c13302006..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0catpad-empty.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0pad-empty.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-0pad-empty.xz deleted file mode 100644 index 45e00b74a3f..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-0pad-empty.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-1.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-1.xz deleted file mode 100644 index d991536aed8..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-1.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-2.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-2.xz deleted file mode 100644 index ae42ecf0f9b..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-2.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-3.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-3.xz deleted file mode 100644 index 606cbd20e25..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-3.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-4.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-4.xz deleted file mode 100644 index e72dfbfc394..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-4.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-5.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-5.xz deleted file mode 100644 index 96521129267..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-block_header-5.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-check-crc32.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-check-crc32.xz deleted file mode 100644 index 1ebe1310b5a..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-check-crc32.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-check-crc64.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-check-crc64.xz deleted file mode 100644 index cdb77093db1..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-check-crc64.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-check-sha256.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-check-sha256.xz deleted file mode 100644 index def7bff174f..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-check-sha256.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-1.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-1.xz deleted file mode 100644 index 640f592e803..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-1.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-2.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-2.xz deleted file mode 100644 index 69ab07d4577..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-2.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-3.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-3.xz deleted file mode 100644 index 66f48c5d535..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-3.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-4.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-4.xz deleted file mode 100644 index ac970419399..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-4.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-5.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-5.xz deleted file mode 100644 index 700464d51ef..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-5.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-6.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-6.xz deleted file mode 100644 index 2bda0c4b8b8..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-6.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-7.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-7.xz deleted file mode 100644 index 8cc711c19ed..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-7.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-8.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-8.xz deleted file mode 100644 index f21a71b63f3..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-lzma2-8.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-stream_flags-1.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-stream_flags-1.xz deleted file mode 100644 index 6511773ec69..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-stream_flags-1.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-stream_flags-2.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-stream_flags-2.xz deleted file mode 100644 index 0c66b364b0e..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-stream_flags-2.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-stream_flags-3.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-stream_flags-3.xz deleted file mode 100644 index a9b1f98365f..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-stream_flags-3.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-vli-1.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-vli-1.xz deleted file mode 100644 index 6514ab12946..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-vli-1.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-vli-2.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-vli-2.xz deleted file mode 100644 index c16941b4083..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-1-vli-2.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-compressed_data_padding.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-compressed_data_padding.xz deleted file mode 100644 index 382d0476700..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-compressed_data_padding.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-1.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-1.xz deleted file mode 100644 index f51ed214d16..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-1.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-2.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-2.xz deleted file mode 100644 index d7d00ff343f..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-2.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-3.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-3.xz deleted file mode 100644 index 62428b87223..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-3.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-4.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-4.xz deleted file mode 100644 index 9cf2df65da5..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-4.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-5.xz b/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-5.xz deleted file mode 100644 index 0a79270900a..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/bad-2-index-5.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-0-empty.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-0-empty.xz deleted file mode 100644 index 83b95e05bc8..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-0-empty.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-0cat-empty.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-0cat-empty.xz deleted file mode 100644 index e6fc31461db..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-0cat-empty.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-0catpad-empty.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-0catpad-empty.xz deleted file mode 100644 index 4f86b7d152d..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-0catpad-empty.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-0pad-empty.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-0pad-empty.xz deleted file mode 100644 index c51e3a69c0d..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-0pad-empty.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-3delta-lzma2.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-3delta-lzma2.xz deleted file mode 100644 index a0be1d007a2..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-3delta-lzma2.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-block_header-1.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-block_header-1.xz deleted file mode 100644 index fea5ad2f998..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-block_header-1.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-block_header-2.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-block_header-2.xz deleted file mode 100644 index 6b5dcb347b2..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-block_header-2.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-block_header-3.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-block_header-3.xz deleted file mode 100644 index 15653120634..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-block_header-3.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-crc32.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-crc32.xz deleted file mode 100644 index 6c89593d447..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-crc32.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-crc64.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-crc64.xz deleted file mode 100644 index 5a9915d2f9f..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-crc64.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-none.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-none.xz deleted file mode 100644 index 1e85faf3d06..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-none.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-sha256.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-sha256.xz deleted file mode 100644 index fdc556b602c..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-check-sha256.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-delta-lzma2.tiff.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-delta-lzma2.tiff.xz deleted file mode 100644 index 1f033bc52b5..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-delta-lzma2.tiff.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-1.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-1.xz deleted file mode 100644 index d8d6489c872..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-1.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-2.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-2.xz deleted file mode 100644 index 7e8cdf1b7d0..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-2.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-3.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-3.xz deleted file mode 100644 index c4c72be6561..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-3.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-4.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-4.xz deleted file mode 100644 index e0d623a001c..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-lzma2-4.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-sparc-lzma2.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-sparc-lzma2.xz deleted file mode 100644 index 4532bc61c1a..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-sparc-lzma2.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-x86-lzma2.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-1-x86-lzma2.xz deleted file mode 100644 index 8053917bad7..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-1-x86-lzma2.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/good-2-lzma2.xz b/Build/source/utils/xz-4.999.9beta/tests/files/good-2-lzma2.xz deleted file mode 100644 index bed5085c1f6..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/good-2-lzma2.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-block_header.xz b/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-block_header.xz deleted file mode 100644 index 38304429d91..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-block_header.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-check.xz b/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-check.xz deleted file mode 100644 index c28355e7474..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-check.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-filter_flags-1.xz b/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-filter_flags-1.xz deleted file mode 100644 index 48b93731c52..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-filter_flags-1.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-filter_flags-2.xz b/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-filter_flags-2.xz deleted file mode 100644 index c283359d562..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-filter_flags-2.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-filter_flags-3.xz b/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-filter_flags-3.xz deleted file mode 100644 index 26084984f97..00000000000 Binary files a/Build/source/utils/xz-4.999.9beta/tests/files/unsupported-filter_flags-3.xz and /dev/null differ diff --git a/Build/source/utils/xz-4.999.9beta/tests/test_block_header.c b/Build/source/utils/xz-4.999.9beta/tests/test_block_header.c deleted file mode 100644 index a95792eb9dd..00000000000 --- a/Build/source/utils/xz-4.999.9beta/tests/test_block_header.c +++ /dev/null @@ -1,240 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file test_block_header.c -/// \brief Tests Block Header coders -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "tests.h" - - -static uint8_t buf[LZMA_BLOCK_HEADER_SIZE_MAX]; -static lzma_block known_options; -static lzma_block decoded_options; - -static lzma_options_lzma opt_lzma; - -static lzma_filter filters_none[1] = { - { - .id = LZMA_VLI_UNKNOWN, - }, -}; - - -static lzma_filter filters_one[2] = { - { - .id = LZMA_FILTER_LZMA2, - .options = &opt_lzma, - }, { - .id = LZMA_VLI_UNKNOWN, - } -}; - - -static lzma_filter filters_four[5] = { - { - .id = LZMA_FILTER_X86, - .options = NULL, - }, { - .id = LZMA_FILTER_X86, - .options = NULL, - }, { - .id = LZMA_FILTER_X86, - .options = NULL, - }, { - .id = LZMA_FILTER_LZMA2, - .options = &opt_lzma, - }, { - .id = LZMA_VLI_UNKNOWN, - } -}; - - -static lzma_filter filters_five[6] = { - { - .id = LZMA_FILTER_X86, - .options = NULL, - }, { - .id = LZMA_FILTER_X86, - .options = NULL, - }, { - .id = LZMA_FILTER_X86, - .options = NULL, - }, { - .id = LZMA_FILTER_X86, - .options = NULL, - }, { - .id = LZMA_FILTER_LZMA2, - .options = &opt_lzma, - }, { - .id = LZMA_VLI_UNKNOWN, - } -}; - - -static void -code(void) -{ - expect(lzma_block_header_encode(&known_options, buf) == LZMA_OK); - - lzma_filter filters[LZMA_FILTERS_MAX + 1]; - memcrap(filters, sizeof(filters)); - memcrap(&decoded_options, sizeof(decoded_options)); - - decoded_options.header_size = known_options.header_size; - decoded_options.check = known_options.check; - decoded_options.filters = filters; - expect(lzma_block_header_decode(&decoded_options, NULL, buf) - == LZMA_OK); - - expect(known_options.compressed_size - == decoded_options.compressed_size); - expect(known_options.uncompressed_size - == decoded_options.uncompressed_size); - - for (size_t i = 0; known_options.filters[i].id - != LZMA_VLI_UNKNOWN; ++i) - expect(known_options.filters[i].id == filters[i].id); - - for (size_t i = 0; i < LZMA_FILTERS_MAX; ++i) - free(decoded_options.filters[i].options); -} - - -static void -test1(void) -{ - known_options = (lzma_block){ - .check = LZMA_CHECK_NONE, - .compressed_size = LZMA_VLI_UNKNOWN, - .uncompressed_size = LZMA_VLI_UNKNOWN, - .filters = NULL, - }; - - expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); - - known_options.filters = filters_none; - expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); - - known_options.filters = filters_five; - expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); - - known_options.filters = filters_one; - expect(lzma_block_header_size(&known_options) == LZMA_OK); - - known_options.check = 999; // Some invalid value, which gets ignored. - expect(lzma_block_header_size(&known_options) == LZMA_OK); - - known_options.compressed_size = 5; - expect(lzma_block_header_size(&known_options) == LZMA_OK); - - known_options.compressed_size = 0; // Cannot be zero. - expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); - - // LZMA_VLI_MAX is too big to keep the total size of the Block - // a valid VLI, but lzma_block_header_size() is not meant - // to validate it. (lzma_block_header_encode() must validate it.) - known_options.compressed_size = LZMA_VLI_MAX; - expect(lzma_block_header_size(&known_options) == LZMA_OK); - - known_options.compressed_size = LZMA_VLI_UNKNOWN; - known_options.uncompressed_size = 0; - expect(lzma_block_header_size(&known_options) == LZMA_OK); - - known_options.uncompressed_size = LZMA_VLI_MAX + 1; - expect(lzma_block_header_size(&known_options) == LZMA_PROG_ERROR); -} - - -static void -test2(void) -{ - known_options = (lzma_block){ - .check = LZMA_CHECK_CRC32, - .compressed_size = LZMA_VLI_UNKNOWN, - .uncompressed_size = LZMA_VLI_UNKNOWN, - .filters = filters_four, - }; - - expect(lzma_block_header_size(&known_options) == LZMA_OK); - code(); - - known_options.compressed_size = 123456; - known_options.uncompressed_size = 234567; - expect(lzma_block_header_size(&known_options) == LZMA_OK); - code(); - - // We can make the sizes smaller while keeping the header size - // the same. - known_options.compressed_size = 12; - known_options.uncompressed_size = 23; - code(); -} - - -static void -test3(void) -{ - known_options = (lzma_block){ - .check = LZMA_CHECK_CRC32, - .compressed_size = LZMA_VLI_UNKNOWN, - .uncompressed_size = LZMA_VLI_UNKNOWN, - .filters = filters_one, - }; - - expect(lzma_block_header_size(&known_options) == LZMA_OK); - known_options.header_size += 4; - expect(lzma_block_header_encode(&known_options, buf) == LZMA_OK); - - lzma_filter filters[LZMA_FILTERS_MAX + 1]; - decoded_options.header_size = known_options.header_size; - decoded_options.check = known_options.check; - decoded_options.filters = filters; - - // Wrong size - ++buf[0]; - expect(lzma_block_header_decode(&decoded_options, NULL, buf) - == LZMA_PROG_ERROR); - --buf[0]; - - // Wrong CRC32 - buf[known_options.header_size - 1] ^= 1; - expect(lzma_block_header_decode(&decoded_options, NULL, buf) - == LZMA_DATA_ERROR); - buf[known_options.header_size - 1] ^= 1; - - // Unsupported filter - // NOTE: This may need updating when new IDs become supported. - buf[2] ^= 0x1F; - integer_write_32(buf + known_options.header_size - 4, - lzma_crc32(buf, known_options.header_size - 4, 0)); - expect(lzma_block_header_decode(&decoded_options, NULL, buf) - == LZMA_OPTIONS_ERROR); - buf[2] ^= 0x1F; - - // Non-nul Padding - buf[known_options.header_size - 4 - 1] ^= 1; - integer_write_32(buf + known_options.header_size - 4, - lzma_crc32(buf, known_options.header_size - 4, 0)); - expect(lzma_block_header_decode(&decoded_options, NULL, buf) - == LZMA_OPTIONS_ERROR); - buf[known_options.header_size - 4 - 1] ^= 1; -} - - -int -main(void) -{ - succeed(lzma_lzma_preset(&opt_lzma, 1)); - - test1(); - test2(); - test3(); - - return 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/tests/test_check.c b/Build/source/utils/xz-4.999.9beta/tests/test_check.c deleted file mode 100644 index 7d4a36078cf..00000000000 --- a/Build/source/utils/xz-4.999.9beta/tests/test_check.c +++ /dev/null @@ -1,83 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file test_check.c -/// \brief Tests integrity checks -/// -/// \todo Add SHA256 -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "tests.h" - - -static const uint8_t test_string[9] = "123456789"; -static const uint8_t test_unaligned[12] = "xxx123456789"; - - -static bool -test_crc32(void) -{ - static const uint32_t test_vector = 0xCBF43926; - - // Test 1 - uint32_t crc = lzma_crc32(test_string, sizeof(test_string), 0); - if (crc != test_vector) - return true; - - // Test 2 - crc = lzma_crc32(test_unaligned + 3, sizeof(test_string), 0); - if (crc != test_vector) - return true; - - // Test 3 - crc = 0; - for (size_t i = 0; i < sizeof(test_string); ++i) - crc = lzma_crc32(test_string + i, 1, crc); - if (crc != test_vector) - return true; - - return false; -} - - -static bool -test_crc64(void) -{ - static const uint64_t test_vector = 0x995DC9BBDF1939FA; - - // Test 1 - uint64_t crc = lzma_crc64(test_string, sizeof(test_string), 0); - if (crc != test_vector) - return true; - - // Test 2 - crc = lzma_crc64(test_unaligned + 3, sizeof(test_string), 0); - if (crc != test_vector) - return true; - - // Test 3 - crc = 0; - for (size_t i = 0; i < sizeof(test_string); ++i) - crc = lzma_crc64(test_string + i, 1, crc); - if (crc != test_vector) - return true; - - return false; -} - - -int -main(void) -{ - bool error = false; - - error |= test_crc32(); - error |= test_crc64(); - - return error ? 1 : 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/tests/test_compress.sh b/Build/source/utils/xz-4.999.9beta/tests/test_compress.sh deleted file mode 100755 index ff0cb304df4..00000000000 --- a/Build/source/utils/xz-4.999.9beta/tests/test_compress.sh +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/sh - -############################################################################### -# -# Author: Lasse Collin -# -# This file has been put into the public domain. -# You can do whatever you want with this file. -# -############################################################################### - -# Find out if our shell supports functions. -eval 'unset foo ; foo() { return 42; } ; foo' -if test $? != 42 ; then - echo "/bin/sh doesn't support functions, skipping this test." - (exit 77) - exit 77 -fi - -test_xz() { - if $XZ -c "$@" "$FILE" > tmp_compressed; then - : - else - echo "Compressing failed: $* $FILE" - (exit 1) - exit 1 - fi - - if $XZ -cd tmp_compressed > tmp_uncompressed ; then - : - else - echo "Decoding failed: $* $FILE" - (exit 1) - exit 1 - fi - - if cmp tmp_uncompressed "$FILE" ; then - : - else - echo "Decoded file does not match the original: $* $FILE" - (exit 1) - exit 1 - fi - - if $XZDEC tmp_compressed > tmp_uncompressed ; then - : - else - echo "Decoding failed: $* $FILE" - (exit 1) - exit 1 - fi - - if cmp tmp_uncompressed "$FILE" ; then - : - else - echo "Decoded file does not match the original: $* $FILE" - (exit 1) - exit 1 - fi - - # Show progress: - echo . | tr -d '\n\r' -} - -XZ="../src/xz/xz --memory=28MiB --threads=1" -XZDEC="../src/xzdec/xzdec --memory=4MiB" -unset XZ_OPT - -# Create the required input files. -if ./create_compress_files ; then - : -else - rm -f compress_* - echo "Failed to create files to test compression." - (exit 1) - exit 1 -fi - -# Remove temporary now (in case they are something weird), and on exit. -rm -f tmp_compressed tmp_uncompressed -trap 'rm -f tmp_compressed tmp_uncompressed' 0 - -# Encode and decode each file with various filter configurations. -# This takes quite a bit of time. -echo "test_compress.sh:" -for FILE in compress_generated_* "$srcdir"/compress_prepared_* -do - MSG=`echo "x$FILE" | sed 's,^x,,; s,^.*/,,; s,^compress_,,'` - echo " $MSG" | tr -d '\n\r' - - # Don't test with empty arguments; it breaks some ancient - # proprietary /bin/sh versions due to $@ used in test_xz(). - test_xz -1 - test_xz -2 - test_xz -3 - test_xz -4 - - # Disabled until Subblock format is stable. -# --subblock \ -# --subblock=size=1 \ -# --subblock=size=1,rle=1 \ -# --subblock=size=1,rle=4 \ -# --subblock=size=4,rle=4 \ -# --subblock=size=8,rle=4 \ -# --subblock=size=8,rle=8 \ -# --subblock=size=4096,rle=12 \ -# - for ARGS in \ - --delta=dist=1 \ - --delta=dist=4 \ - --delta=dist=256 \ - --x86 \ - --powerpc \ - --ia64 \ - --arm \ - --armthumb \ - --sparc - do - test_xz $ARGS --lzma2=dict=64KiB,nice=32,mode=fast - - # Disabled until Subblock format is stable. - # test_xz --subblock $ARGS --lzma2=dict=64KiB,nice=32,mode=fast - done - - echo -done - -(exit 0) -exit 0 diff --git a/Build/source/utils/xz-4.999.9beta/tests/test_files.sh b/Build/source/utils/xz-4.999.9beta/tests/test_files.sh deleted file mode 100755 index 7dd9a3901bf..00000000000 --- a/Build/source/utils/xz-4.999.9beta/tests/test_files.sh +++ /dev/null @@ -1,33 +0,0 @@ -#/bin/sh - -############################################################################### -# -# Author: Lasse Collin -# -# This file has been put into the public domain. -# You can do whatever you want with this file. -# -############################################################################### - -for I in "$srcdir"/files/good-*.xz -do - if ../src/xzdec/xzdec "$I" > /dev/null 2> /dev/null ; then - : - else - echo "Good file failed: $I" - (exit 1) - exit 1 - fi -done - -for I in "$srcdir"/files/bad-*.xz -do - if ../src/xzdec/xzdec "$I" > /dev/null 2> /dev/null ; then - echo "Bad file succeeded: $I" - (exit 1) - exit 1 - fi -done - -(exit 0) -exit 0 diff --git a/Build/source/utils/xz-4.999.9beta/tests/test_filter_flags.c b/Build/source/utils/xz-4.999.9beta/tests/test_filter_flags.c deleted file mode 100644 index 808682b57e0..00000000000 --- a/Build/source/utils/xz-4.999.9beta/tests/test_filter_flags.c +++ /dev/null @@ -1,281 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file test_filter_flags.c -/// \brief Tests Filter Flags coders -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "tests.h" - - -static uint8_t buffer[4096]; -static lzma_filter known_flags; -static lzma_filter decoded_flags; -static lzma_stream strm = LZMA_STREAM_INIT; - - -static bool -encode(uint32_t known_size) -{ - memcrap(buffer, sizeof(buffer)); - - uint32_t tmp; - if (lzma_filter_flags_size(&tmp, &known_flags) != LZMA_OK) - return true; - - if (tmp != known_size) - return true; - - size_t out_pos = 0; - if (lzma_filter_flags_encode(&known_flags, - buffer, &out_pos, known_size) != LZMA_OK) - return true; - - if (out_pos != known_size) - return true; - - return false; -} - - -static bool -decode_ret(uint32_t known_size, lzma_ret expected_ret) -{ - memcrap(&decoded_flags, sizeof(decoded_flags)); - - size_t pos = 0; - if (lzma_filter_flags_decode(&decoded_flags, NULL, - buffer, &pos, known_size) != expected_ret - || pos != known_size) - return true; - - return false; -} - - -static bool -decode(uint32_t known_size) -{ - if (decode_ret(known_size, LZMA_OK)) - return true; - - if (known_flags.id != decoded_flags.id) - return true; - - return false; -} - - -#if defined(HAVE_ENCODER_SUBBLOCK) && defined(HAVE_DECODER_SUBBLOCK) -static void -test_subblock(void) -{ - // Test 1 - known_flags.id = LZMA_FILTER_SUBBLOCK; - known_flags.options = NULL; - expect(!encode(2)); - expect(!decode(2)); - expect(decoded_flags.options == NULL); - - // Test 2 - buffer[0] = LZMA_FILTER_SUBBLOCK; - buffer[1] = 1; - buffer[2] = 0; - expect(!decode_ret(3, LZMA_OPTIONS_ERROR)); -} -#endif - - -#if defined(HAVE_ENCODER_X86) && defined(HAVE_DECODER_X86) -static void -test_bcj(void) -{ - // Test 1 - known_flags.id = LZMA_FILTER_X86; - known_flags.options = NULL; - - expect(!encode(2)); - expect(!decode(2)); - expect(decoded_flags.options == NULL); - - // Test 2 - lzma_options_bcj options; - options.start_offset = 0; - known_flags.options = &options; - expect(!encode(2)); - expect(!decode(2)); - expect(decoded_flags.options == NULL); - - // Test 3 - options.start_offset = 123456; - known_flags.options = &options; - expect(!encode(6)); - expect(!decode(6)); - expect(decoded_flags.options != NULL); - - lzma_options_bcj *decoded = decoded_flags.options; - expect(decoded->start_offset == options.start_offset); - - free(decoded); -} -#endif - - -#if defined(HAVE_ENCODER_DELTA) && defined(HAVE_DECODER_DELTA) -static void -test_delta(void) -{ - // Test 1 - known_flags.id = LZMA_FILTER_DELTA; - known_flags.options = NULL; - expect(encode(99)); - - // Test 2 - lzma_options_delta options = { - .type = LZMA_DELTA_TYPE_BYTE, - .dist = 0 - }; - known_flags.options = &options; - expect(encode(99)); - - // Test 3 - options.dist = LZMA_DELTA_DIST_MIN; - expect(!encode(3)); - expect(!decode(3)); - expect(((lzma_options_delta *)(decoded_flags.options))->dist - == options.dist); - - free(decoded_flags.options); - - // Test 4 - options.dist = LZMA_DELTA_DIST_MAX; - expect(!encode(3)); - expect(!decode(3)); - expect(((lzma_options_delta *)(decoded_flags.options))->dist - == options.dist); - - free(decoded_flags.options); - - // Test 5 - options.dist = LZMA_DELTA_DIST_MAX + 1; - expect(encode(99)); -} -#endif - -/* -#ifdef HAVE_FILTER_LZMA -static void -validate_lzma(void) -{ - const lzma_options_lzma *known = known_flags.options; - const lzma_options_lzma *decoded = decoded_flags.options; - - expect(known->dictionary_size <= decoded->dictionary_size); - - if (known->dictionary_size == 1) - expect(decoded->dictionary_size == 1); - else - expect(known->dictionary_size + known->dictionary_size / 2 - > decoded->dictionary_size); - - expect(known->literal_context_bits == decoded->literal_context_bits); - expect(known->literal_pos_bits == decoded->literal_pos_bits); - expect(known->pos_bits == decoded->pos_bits); -} - - -static void -test_lzma(void) -{ - // Test 1 - known_flags.id = LZMA_FILTER_LZMA1; - known_flags.options = NULL; - expect(encode(99)); - - // Test 2 - lzma_options_lzma options = { - .dictionary_size = 0, - .literal_context_bits = 0, - .literal_pos_bits = 0, - .pos_bits = 0, - .preset_dictionary = NULL, - .preset_dictionary_size = 0, - .mode = LZMA_MODE_INVALID, - .fast_bytes = 0, - .match_finder = LZMA_MF_INVALID, - .match_finder_cycles = 0, - }; - - // Test 3 (empty dictionary not allowed) - known_flags.options = &options; - expect(encode(99)); - - // Test 4 (brute-force test some valid dictionary sizes) - options.dictionary_size = LZMA_DICTIONARY_SIZE_MIN; - while (options.dictionary_size != LZMA_DICTIONARY_SIZE_MAX) { - if (++options.dictionary_size == 5000) - options.dictionary_size = LZMA_DICTIONARY_SIZE_MAX - 5; - - expect(!encode(4)); - expect(!decode(4)); - validate_lzma(); - - free(decoded_flags.options); - } - - // Test 5 (too big dictionary size) - options.dictionary_size = LZMA_DICTIONARY_SIZE_MAX + 1; - expect(encode(99)); - - // Test 6 (brute-force test lc/lp/pb) - options.dictionary_size = LZMA_DICTIONARY_SIZE_MIN; - for (uint32_t lc = LZMA_LITERAL_CONTEXT_BITS_MIN; - lc <= LZMA_LITERAL_CONTEXT_BITS_MAX; ++lc) { - for (uint32_t lp = LZMA_LITERAL_POS_BITS_MIN; - lp <= LZMA_LITERAL_POS_BITS_MAX; ++lp) { - for (uint32_t pb = LZMA_POS_BITS_MIN; - pb <= LZMA_POS_BITS_MAX; ++pb) { - if (lc + lp > LZMA_LITERAL_BITS_MAX) - continue; - - options.literal_context_bits = lc; - options.literal_pos_bits = lp; - options.pos_bits = pb; - - expect(!encode(4)); - expect(!decode(4)); - validate_lzma(); - - free(decoded_flags.options); - } - } - } -} -#endif -*/ - -int -main(void) -{ -#if defined(HAVE_ENCODER_SUBBLOCK) && defined(HAVE_DECODER_SUBBLOCK) - test_subblock(); -#endif -#if defined(HAVE_ENCODER_X86) && defined(HAVE_DECODER_X86) - test_bcj(); -#endif -#if defined(HAVE_ENCODER_DELTA) && defined(HAVE_DECODER_DELTA) - test_delta(); -#endif -// #ifdef HAVE_FILTER_LZMA -// test_lzma(); -// #endif - - lzma_end(&strm); - - return 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/tests/test_index.c b/Build/source/utils/xz-4.999.9beta/tests/test_index.c deleted file mode 100644 index 5ce2c524735..00000000000 --- a/Build/source/utils/xz-4.999.9beta/tests/test_index.c +++ /dev/null @@ -1,532 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file test_index.c -/// \brief Tests functions handling the lzma_index structure -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "tests.h" - -#define MEMLIMIT (LZMA_VLI_C(1) << 20) - - -static lzma_index * -create_empty(void) -{ - lzma_index *i = lzma_index_init(NULL, NULL); - expect(i != NULL); - return i; -} - - -static lzma_index * -create_small(void) -{ - lzma_index *i = lzma_index_init(NULL, NULL); - expect(i != NULL); - expect(lzma_index_append(i, NULL, 101, 555) == LZMA_OK); - expect(lzma_index_append(i, NULL, 602, 777) == LZMA_OK); - expect(lzma_index_append(i, NULL, 804, 999) == LZMA_OK); - return i; -} - - -static lzma_index * -create_big(void) -{ - lzma_index *i = lzma_index_init(NULL, NULL); - expect(i != NULL); - - lzma_vli total_size = 0; - lzma_vli uncompressed_size = 0; - - // Add pseudo-random sizes (but always the same size values). - const size_t count = 5555; - uint32_t n = 11; - for (size_t j = 0; j < count; ++j) { - n = 7019 * n + 7607; - const uint32_t t = n * 3011; - expect(lzma_index_append(i, NULL, t, n) == LZMA_OK); - total_size += (t + 3) & ~LZMA_VLI_C(3); - uncompressed_size += n; - } - - expect(lzma_index_count(i) == count); - expect(lzma_index_total_size(i) == total_size); - expect(lzma_index_uncompressed_size(i) == uncompressed_size); - expect(lzma_index_total_size(i) + lzma_index_size(i) - + 2 * LZMA_STREAM_HEADER_SIZE - == lzma_index_stream_size(i)); - - return i; -} - - -static void -test_equal(void) -{ - lzma_index *a = create_empty(); - lzma_index *b = create_small(); - lzma_index *c = create_big(); - expect(a && b && c); - - expect(lzma_index_equal(a, a)); - expect(lzma_index_equal(b, b)); - expect(lzma_index_equal(c, c)); - - expect(!lzma_index_equal(a, b)); - expect(!lzma_index_equal(a, c)); - expect(!lzma_index_equal(b, c)); - - lzma_index_end(a, NULL); - lzma_index_end(b, NULL); - lzma_index_end(c, NULL); -} - - -static void -test_overflow(void) -{ - // Integer overflow tests - lzma_index *i = create_empty(); - - expect(lzma_index_append(i, NULL, LZMA_VLI_MAX - 5, 1234) - == LZMA_DATA_ERROR); - - // TODO - - lzma_index_end(i, NULL); -} - - -static void -test_copy(const lzma_index *i) -{ - lzma_index *d = lzma_index_dup(i, NULL); - expect(d != NULL); - lzma_index_end(d, NULL); -} - - -static void -test_read(lzma_index *i) -{ - lzma_index_record record; - - // Try twice so we see that rewinding works. - for (size_t j = 0; j < 2; ++j) { - lzma_vli total_size = 0; - lzma_vli uncompressed_size = 0; - lzma_vli stream_offset = LZMA_STREAM_HEADER_SIZE; - lzma_vli uncompressed_offset = 0; - uint32_t count = 0; - - while (!lzma_index_read(i, &record)) { - ++count; - - total_size += record.total_size; - uncompressed_size += record.uncompressed_size; - - expect(record.stream_offset == stream_offset); - expect(record.uncompressed_offset - == uncompressed_offset); - - stream_offset += record.total_size; - uncompressed_offset += record.uncompressed_size; - } - - expect(lzma_index_total_size(i) == total_size); - expect(lzma_index_uncompressed_size(i) == uncompressed_size); - expect(lzma_index_count(i) == count); - - lzma_index_rewind(i); - } -} - - -static void -test_code(lzma_index *i) -{ - const size_t alloc_size = 128 * 1024; - uint8_t *buf = malloc(alloc_size); - expect(buf != NULL); - - // Encode - lzma_stream strm = LZMA_STREAM_INIT; - expect(lzma_index_encoder(&strm, i) == LZMA_OK); - const lzma_vli index_size = lzma_index_size(i); - succeed(coder_loop(&strm, NULL, 0, buf, index_size, - LZMA_STREAM_END, LZMA_RUN)); - - // Decode - lzma_index *d; - expect(lzma_index_decoder(&strm, &d, MEMLIMIT) == LZMA_OK); - succeed(decoder_loop(&strm, buf, index_size)); - - expect(lzma_index_equal(i, d)); - - lzma_index_end(d, NULL); - lzma_end(&strm); - - // Decode with hashing - lzma_index_hash *h = lzma_index_hash_init(NULL, NULL); - expect(h != NULL); - lzma_index_rewind(i); - lzma_index_record r; - while (!lzma_index_read(i, &r)) - expect(lzma_index_hash_append(h, r.unpadded_size, - r.uncompressed_size) == LZMA_OK); - size_t pos = 0; - while (pos < index_size - 1) - expect(lzma_index_hash_decode(h, buf, &pos, pos + 1) - == LZMA_OK); - expect(lzma_index_hash_decode(h, buf, &pos, pos + 1) - == LZMA_STREAM_END); - - lzma_index_hash_end(h, NULL); - - // Encode buffer - size_t buf_pos = 1; - expect(lzma_index_buffer_encode(i, buf, &buf_pos, index_size) - == LZMA_BUF_ERROR); - expect(buf_pos == 1); - - succeed(lzma_index_buffer_encode(i, buf, &buf_pos, index_size + 1)); - expect(buf_pos == index_size + 1); - - // Decode buffer - buf_pos = 1; - uint64_t memlimit = MEMLIMIT; - expect(lzma_index_buffer_decode(&d, &memlimit, NULL, buf, &buf_pos, - index_size) == LZMA_DATA_ERROR); - expect(buf_pos == 1); - expect(d == NULL); - - succeed(lzma_index_buffer_decode(&d, &memlimit, NULL, buf, &buf_pos, - index_size + 1)); - expect(buf_pos == index_size + 1); - expect(lzma_index_equal(i, d)); - - lzma_index_end(d, NULL); - - free(buf); -} - - -static void -test_many(lzma_index *i) -{ - test_copy(i); - test_read(i); - test_code(i); -} - - -static void -test_cat(void) -{ - lzma_index *a, *b, *c; - - // Empty Indexes - a = create_empty(); - b = create_empty(); - expect(lzma_index_cat(a, b, NULL, 0) == LZMA_OK); - expect(lzma_index_count(a) == 0); - expect(lzma_index_stream_size(a) == 2 * LZMA_STREAM_HEADER_SIZE + 8); - expect(lzma_index_file_size(a) - == 2 * (2 * LZMA_STREAM_HEADER_SIZE + 8)); - - b = create_empty(); - expect(lzma_index_cat(a, b, NULL, 0) == LZMA_OK); - expect(lzma_index_count(a) == 0); - expect(lzma_index_stream_size(a) == 2 * LZMA_STREAM_HEADER_SIZE + 8); - expect(lzma_index_file_size(a) - == 3 * (2 * LZMA_STREAM_HEADER_SIZE + 8)); - - b = create_empty(); - c = create_empty(); - expect(lzma_index_cat(b, c, NULL, 4) == LZMA_OK); - expect(lzma_index_count(b) == 0); - expect(lzma_index_stream_size(b) == 2 * LZMA_STREAM_HEADER_SIZE + 8); - expect(lzma_index_file_size(b) - == 2 * (2 * LZMA_STREAM_HEADER_SIZE + 8) + 4); - - expect(lzma_index_cat(a, b, NULL, 8) == LZMA_OK); - expect(lzma_index_count(a) == 0); - expect(lzma_index_stream_size(a) == 2 * LZMA_STREAM_HEADER_SIZE + 8); - expect(lzma_index_file_size(a) - == 5 * (2 * LZMA_STREAM_HEADER_SIZE + 8) + 4 + 8); - - lzma_index_end(a, NULL); - - // Small Indexes - a = create_small(); - lzma_vli stream_size = lzma_index_stream_size(a); - b = create_small(); - expect(lzma_index_cat(a, b, NULL, 4) == LZMA_OK); - expect(lzma_index_file_size(a) == stream_size * 2 + 4); - expect(lzma_index_stream_size(a) > stream_size); - expect(lzma_index_stream_size(a) < stream_size * 2); - - b = create_small(); - c = create_small(); - expect(lzma_index_cat(b, c, NULL, 8) == LZMA_OK); - expect(lzma_index_cat(a, b, NULL, 12) == LZMA_OK); - expect(lzma_index_file_size(a) == stream_size * 4 + 4 + 8 + 12); - - lzma_index_end(a, NULL); - - // Big Indexes - a = create_big(); - stream_size = lzma_index_stream_size(a); - b = create_big(); - expect(lzma_index_cat(a, b, NULL, 4) == LZMA_OK); - expect(lzma_index_file_size(a) == stream_size * 2 + 4); - expect(lzma_index_stream_size(a) > stream_size); - expect(lzma_index_stream_size(a) < stream_size * 2); - - b = create_big(); - c = create_big(); - expect(lzma_index_cat(b, c, NULL, 8) == LZMA_OK); - expect(lzma_index_cat(a, b, NULL, 12) == LZMA_OK); - expect(lzma_index_file_size(a) == stream_size * 4 + 4 + 8 + 12); - - lzma_index_end(a, NULL); -} - - -static void -test_locate(void) -{ - lzma_index_record r; - lzma_index *i = lzma_index_init(NULL, NULL); - expect(i != NULL); - - // Cannot locate anything from an empty Index. - expect(lzma_index_locate(i, &r, 0)); - expect(lzma_index_locate(i, &r, 555)); - - // One empty Record: nothing is found since there's no uncompressed - // data. - expect(lzma_index_append(i, NULL, 16, 0) == LZMA_OK); - expect(lzma_index_locate(i, &r, 0)); - - // Non-empty Record and we can find something. - expect(lzma_index_append(i, NULL, 32, 5) == LZMA_OK); - expect(!lzma_index_locate(i, &r, 0)); - expect(r.total_size == 32); - expect(r.uncompressed_size == 5); - expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE + 16); - expect(r.uncompressed_offset == 0); - - // Still cannot find anything past the end. - expect(lzma_index_locate(i, &r, 5)); - - // Add the third Record. - expect(lzma_index_append(i, NULL, 40, 11) == LZMA_OK); - - expect(!lzma_index_locate(i, &r, 0)); - expect(r.total_size == 32); - expect(r.uncompressed_size == 5); - expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE + 16); - expect(r.uncompressed_offset == 0); - - expect(!lzma_index_read(i, &r)); - expect(r.total_size == 40); - expect(r.uncompressed_size == 11); - expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE + 16 + 32); - expect(r.uncompressed_offset == 5); - - expect(!lzma_index_locate(i, &r, 2)); - expect(r.total_size == 32); - expect(r.uncompressed_size == 5); - expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE + 16); - expect(r.uncompressed_offset == 0); - - expect(!lzma_index_locate(i, &r, 5)); - expect(r.total_size == 40); - expect(r.uncompressed_size == 11); - expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE + 16 + 32); - expect(r.uncompressed_offset == 5); - - expect(!lzma_index_locate(i, &r, 5 + 11 - 1)); - expect(r.total_size == 40); - expect(r.uncompressed_size == 11); - expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE + 16 + 32); - expect(r.uncompressed_offset == 5); - - expect(lzma_index_locate(i, &r, 5 + 11)); - expect(lzma_index_locate(i, &r, 5 + 15)); - - // Large Index - i = lzma_index_init(i, NULL); - expect(i != NULL); - - for (size_t n = 4; n <= 4 * 5555; n += 4) - expect(lzma_index_append(i, NULL, n + 8, n) == LZMA_OK); - - expect(lzma_index_count(i) == 5555); - - // First Record - expect(!lzma_index_locate(i, &r, 0)); - expect(r.total_size == 4 + 8); - expect(r.uncompressed_size == 4); - expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE); - expect(r.uncompressed_offset == 0); - - expect(!lzma_index_locate(i, &r, 3)); - expect(r.total_size == 4 + 8); - expect(r.uncompressed_size == 4); - expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE); - expect(r.uncompressed_offset == 0); - - // Second Record - expect(!lzma_index_locate(i, &r, 4)); - expect(r.total_size == 2 * 4 + 8); - expect(r.uncompressed_size == 2 * 4); - expect(r.stream_offset == LZMA_STREAM_HEADER_SIZE + 4 + 8); - expect(r.uncompressed_offset == 4); - - // Last Record - expect(!lzma_index_locate(i, &r, lzma_index_uncompressed_size(i) - 1)); - expect(r.total_size == 4 * 5555 + 8); - expect(r.uncompressed_size == 4 * 5555); - expect(r.stream_offset == lzma_index_total_size(i) - + LZMA_STREAM_HEADER_SIZE - 4 * 5555 - 8); - expect(r.uncompressed_offset - == lzma_index_uncompressed_size(i) - 4 * 5555); - - // Allocation chunk boundaries. See INDEX_GROUP_SIZE in - // liblzma/common/index.c. - const size_t group_multiple = 256 * 4; - const size_t radius = 8; - const size_t start = group_multiple - radius; - lzma_vli ubase = 0; - lzma_vli tbase = 0; - size_t n; - for (n = 1; n < start; ++n) { - ubase += n * 4; - tbase += n * 4 + 8; - } - - while (n < start + 2 * radius) { - expect(!lzma_index_locate(i, &r, ubase + n * 4)); - - expect(r.stream_offset == tbase + n * 4 + 8 - + LZMA_STREAM_HEADER_SIZE); - expect(r.uncompressed_offset == ubase + n * 4); - - tbase += n * 4 + 8; - ubase += n * 4; - ++n; - - expect(r.total_size == n * 4 + 8); - expect(r.uncompressed_size == n * 4); - } - - // Do it also backwards since lzma_index_locate() uses relative search. - while (n > start) { - expect(!lzma_index_locate(i, &r, ubase + (n - 1) * 4)); - - expect(r.total_size == n * 4 + 8); - expect(r.uncompressed_size == n * 4); - - --n; - tbase -= n * 4 + 8; - ubase -= n * 4; - - expect(r.stream_offset == tbase + n * 4 + 8 - + LZMA_STREAM_HEADER_SIZE); - expect(r.uncompressed_offset == ubase + n * 4); - } - - // Test locating in concatend Index. - i = lzma_index_init(i, NULL); - expect(i != NULL); - for (n = 0; n < group_multiple; ++n) - expect(lzma_index_append(i, NULL, 8, 0) == LZMA_OK); - expect(lzma_index_append(i, NULL, 16, 1) == LZMA_OK); - expect(!lzma_index_locate(i, &r, 0)); - expect(r.total_size == 16); - expect(r.uncompressed_size == 1); - expect(r.stream_offset - == LZMA_STREAM_HEADER_SIZE + group_multiple * 8); - expect(r.uncompressed_offset == 0); - - lzma_index_end(i, NULL); -} - - -static void -test_corrupt(void) -{ - const size_t alloc_size = 128 * 1024; - uint8_t *buf = malloc(alloc_size); - expect(buf != NULL); - lzma_stream strm = LZMA_STREAM_INIT; - - lzma_index *i = create_empty(); - expect(lzma_index_append(i, NULL, 0, 1) == LZMA_PROG_ERROR); - lzma_index_end(i, NULL); - - // Create a valid Index and corrupt it in different ways. - i = create_small(); - expect(lzma_index_encoder(&strm, i) == LZMA_OK); - succeed(coder_loop(&strm, NULL, 0, buf, 20, - LZMA_STREAM_END, LZMA_RUN)); - lzma_index_end(i, NULL); - - // Wrong Index Indicator - buf[0] ^= 1; - expect(lzma_index_decoder(&strm, &i, MEMLIMIT) == LZMA_OK); - succeed(decoder_loop_ret(&strm, buf, 1, LZMA_DATA_ERROR)); - buf[0] ^= 1; - - // Wrong Number of Records and thus CRC32 fails. - --buf[1]; - expect(lzma_index_decoder(&strm, &i, MEMLIMIT) == LZMA_OK); - succeed(decoder_loop_ret(&strm, buf, 10, LZMA_DATA_ERROR)); - ++buf[1]; - - // Padding not NULs - buf[15] ^= 1; - expect(lzma_index_decoder(&strm, &i, MEMLIMIT) == LZMA_OK); - succeed(decoder_loop_ret(&strm, buf, 16, LZMA_DATA_ERROR)); - - lzma_end(&strm); - free(buf); -} - - -int -main(void) -{ - test_equal(); - - test_overflow(); - - lzma_index *i = create_empty(); - test_many(i); - lzma_index_end(i, NULL); - - i = create_small(); - test_many(i); - lzma_index_end(i, NULL); - - i = create_big(); - test_many(i); - lzma_index_end(i, NULL); - - test_cat(); - - test_locate(); - - test_corrupt(); - - return 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/tests/test_stream_flags.c b/Build/source/utils/xz-4.999.9beta/tests/test_stream_flags.c deleted file mode 100644 index 9c86c6b860a..00000000000 --- a/Build/source/utils/xz-4.999.9beta/tests/test_stream_flags.c +++ /dev/null @@ -1,180 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file test_stream_flags.c -/// \brief Tests Stream Header and Stream Footer coders -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "tests.h" - - -static lzma_stream_flags known_flags; -static lzma_stream_flags decoded_flags; -static uint8_t buffer[LZMA_STREAM_HEADER_SIZE]; - - -static bool -validate(void) -{ - // TODO: This could require the specific error type as an argument. - // We could also test that lzma_stream_flags_compare() gives - // the correct return values in different situations. - return lzma_stream_flags_compare(&known_flags, &decoded_flags) - != LZMA_OK; -} - - -static bool -test_header_decoder(lzma_ret expected_ret) -{ - memcrap(&decoded_flags, sizeof(decoded_flags)); - - if (lzma_stream_header_decode(&decoded_flags, buffer) != expected_ret) - return true; - - if (expected_ret != LZMA_OK) - return false; - - // Header doesn't have Backward Size, so make - // lzma_stream_flags_compare() ignore it. - decoded_flags.backward_size = LZMA_VLI_UNKNOWN; - return validate(); -} - - -static void -test_header(void) -{ - memcrap(buffer, sizeof(buffer)); - expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); - succeed(test_header_decoder(LZMA_OK)); -} - - -static bool -test_footer_decoder(lzma_ret expected_ret) -{ - memcrap(&decoded_flags, sizeof(decoded_flags)); - - if (lzma_stream_footer_decode(&decoded_flags, buffer) != expected_ret) - return true; - - if (expected_ret != LZMA_OK) - return false; - - return validate(); -} - - -static void -test_footer(void) -{ - memcrap(buffer, sizeof(buffer)); - expect(lzma_stream_footer_encode(&known_flags, buffer) == LZMA_OK); - succeed(test_footer_decoder(LZMA_OK)); -} - - -static void -test_encode_invalid(void) -{ - known_flags.check = LZMA_CHECK_ID_MAX + 1; - known_flags.backward_size = 1024; - - expect(lzma_stream_header_encode(&known_flags, buffer) - == LZMA_PROG_ERROR); - - expect(lzma_stream_footer_encode(&known_flags, buffer) - == LZMA_PROG_ERROR); - - known_flags.check = (lzma_check)(-1); - - expect(lzma_stream_header_encode(&known_flags, buffer) - == LZMA_PROG_ERROR); - - expect(lzma_stream_footer_encode(&known_flags, buffer) - == LZMA_PROG_ERROR); - - known_flags.check = LZMA_CHECK_NONE; - known_flags.backward_size = 0; - - // Header encoder ignores backward_size. - expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); - - expect(lzma_stream_footer_encode(&known_flags, buffer) - == LZMA_PROG_ERROR); - - known_flags.backward_size = LZMA_VLI_MAX; - - expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); - - expect(lzma_stream_footer_encode(&known_flags, buffer) - == LZMA_PROG_ERROR); -} - - -static void -test_decode_invalid(void) -{ - known_flags.check = LZMA_CHECK_NONE; - known_flags.backward_size = 1024; - - expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); - - // Test 1 (invalid Magic Bytes) - buffer[5] ^= 1; - succeed(test_header_decoder(LZMA_FORMAT_ERROR)); - buffer[5] ^= 1; - - // Test 2a (valid CRC32) - uint32_t crc = lzma_crc32(buffer + 6, 2, 0); - integer_write_32(buffer + 8, crc); - succeed(test_header_decoder(LZMA_OK)); - - // Test 2b (invalid Stream Flags with valid CRC32) - buffer[6] ^= 0x20; - crc = lzma_crc32(buffer + 6, 2, 0); - integer_write_32(buffer + 8, crc); - succeed(test_header_decoder(LZMA_OPTIONS_ERROR)); - - // Test 3 (invalid CRC32) - expect(lzma_stream_header_encode(&known_flags, buffer) == LZMA_OK); - buffer[9] ^= 1; - succeed(test_header_decoder(LZMA_DATA_ERROR)); - - // Test 4 (invalid Stream Flags with valid CRC32) - expect(lzma_stream_footer_encode(&known_flags, buffer) == LZMA_OK); - buffer[9] ^= 0x40; - crc = lzma_crc32(buffer + 4, 6, 0); - integer_write_32(buffer, crc); - succeed(test_footer_decoder(LZMA_OPTIONS_ERROR)); - - // Test 5 (invalid Magic Bytes) - expect(lzma_stream_footer_encode(&known_flags, buffer) == LZMA_OK); - buffer[11] ^= 1; - succeed(test_footer_decoder(LZMA_FORMAT_ERROR)); -} - - -int -main(void) -{ - // Valid headers - known_flags.backward_size = 1024; - for (lzma_check check = LZMA_CHECK_NONE; - check <= LZMA_CHECK_ID_MAX; ++check) { - test_header(); - test_footer(); - } - - // Invalid headers - test_encode_invalid(); - test_decode_invalid(); - - return 0; -} diff --git a/Build/source/utils/xz-4.999.9beta/tests/tests.h b/Build/source/utils/xz-4.999.9beta/tests/tests.h deleted file mode 100644 index 185a6820058..00000000000 --- a/Build/source/utils/xz-4.999.9beta/tests/tests.h +++ /dev/null @@ -1,124 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tests.h -/// \brief Common definitions for test applications -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_TESTS_H -#define LZMA_TESTS_H - -#include "sysdefs.h" -#include "integer.h" -#include "lzma.h" - -#include - -#define memcrap(buf, size) memset(buf, 0xFD, size) - -#define expect(test) ((test) ? 0 : (fprintf(stderr, "%s:%u: %s\n", \ - __FILE__, __LINE__, #test), abort(), 0)) - -#define succeed(test) expect(!(test)) - -#define fail(test) expect(test) - - -static inline const char * -lzma_ret_sym(lzma_ret ret) -{ - if ((unsigned int)(ret) > LZMA_PROG_ERROR) - return "UNKNOWN_ERROR"; - - static const char *msgs[] = { - "LZMA_OK", - "LZMA_STREAM_END", - "LZMA_NO_CHECK", - "LZMA_UNSUPPORTED_CHECK", - "LZMA_GET_CHECK", - "LZMA_MEM_ERROR", - "LZMA_MEMLIMIT_ERROR", - "LZMA_FORMAT_ERROR", - "LZMA_OPTIONS_ERROR", - "LZMA_DATA_ERROR", - "LZMA_BUF_ERROR", - "LZMA_PROG_ERROR" - }; - - return msgs[ret]; -} - - -static inline bool -coder_loop(lzma_stream *strm, uint8_t *in, size_t in_size, - uint8_t *out, size_t out_size, - lzma_ret expected_ret, lzma_action finishing_action) -{ - size_t in_left = in_size; - size_t out_left = out_size > 0 ? out_size + 1 : 0; - lzma_action action = LZMA_RUN; - lzma_ret ret; - - strm->next_in = NULL; - strm->avail_in = 0; - strm->next_out = NULL; - strm->avail_out = 0; - - while (true) { - if (in_left > 0) { - if (--in_left == 0) - action = finishing_action; - - strm->next_in = in++; - strm->avail_in = 1; - } - - if (out_left > 0) { - --out_left; - strm->next_out = out++; - strm->avail_out = 1; - } - - ret = lzma_code(strm, action); - if (ret != LZMA_OK) - break; - } - - bool error = false; - - if (ret != expected_ret) - error = true; - - if (expected_ret == LZMA_STREAM_END) { - if (strm->total_in != in_size || strm->total_out != out_size) - error = true; - } else { - if (strm->total_in != in_size || strm->total_out != out_size) - error = true; - } - - return error; -} - - -static inline bool -decoder_loop_ret(lzma_stream *strm, uint8_t *in, size_t in_size, - lzma_ret expected_ret) -{ - return coder_loop(strm, in, in_size, NULL, 0, expected_ret, LZMA_RUN); -} - - -static inline bool -decoder_loop(lzma_stream *strm, uint8_t *in, size_t in_size) -{ - return coder_loop(strm, in, in_size, NULL, 0, - LZMA_STREAM_END, LZMA_RUN); -} - -#endif diff --git a/Build/source/utils/xz-4.999.9beta/version.sh b/Build/source/utils/xz-4.999.9beta/version.sh deleted file mode 100644 index 40d04936288..00000000000 --- a/Build/source/utils/xz-4.999.9beta/version.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -# -############################################################################# -# -# Get the version string from version.h and print it out without -# trailing newline. This makes it suitable for use in configure.ac. -# -############################################################################# -# -# Author: Lasse Collin -# -# This file has been put into the public domain. -# You can do whatever you want with this file. -# -############################################################################# - -sed -n 's/LZMA_VERSION_STABILITY_ALPHA/alpha/ - s/LZMA_VERSION_STABILITY_BETA/beta/ - s/LZMA_VERSION_STABILITY_STABLE// - s/^#define LZMA_VERSION_[MPS][AIT][AJNT][A-Z]* //p' \ - src/liblzma/api/lzma/version.h \ - | tr '\n' '|' \ - | sed 's/|/./; s/|/./; s/|//g' \ - | tr -d '\n' diff --git a/Build/source/utils/xz-4.999.9beta/windows/Makefile b/Build/source/utils/xz-4.999.9beta/windows/Makefile deleted file mode 100644 index db362ef22a1..00000000000 --- a/Build/source/utils/xz-4.999.9beta/windows/Makefile +++ /dev/null @@ -1,308 +0,0 @@ -############################################################################### -# -# Makefile to build XZ Utils using MinGW -# -# Make flags to alter compilation: -# -# DEBUG=1 Enable assertions. Don't use this for production builds! -# You may also want to set CFLAGS="-g -O0" to disable -# optimizations. -# -# W64=1 Build for 64-bit Windows. Make sure that you have 64-bit -# MinGW in PATH. -# -# WINE=1 Shortcut to set CC, AR, and STRIP to use Wine to run Windows -# versions of MinGW binaries. -# -# The usual CPPFLAGS and CFLAGS are supported too. -# -############################################################################### -# -# Author: Lasse Collin -# -# This file has been put into the public domain. -# You can do whatever you want with this file. -# -############################################################################### - -ifdef W64 -CC = x86_64-pc-mingw32-gcc -WINDRES = x86_64-pc-mingw32-windres -AR = x86_64-pc-mingw32-ar -STRIP = x86_64-pc-mingw32-strip -else -CC = mingw32-gcc -WINDRES = windres -AR = ar -STRIP = strip -endif - -SED = sed -MKDIR = mkdir -CP = cp -RM = rm -f - -CFLAGS = -g -Wall -Wextra -O2 -# CFLAGS = -Wall -Wextra -O3 -fomit-frame-pointer -funroll-loops - -ALL_CFLAGS = -std=gnu99 -mms-bitfields - -ALL_CPPFLAGS = \ - -I. \ - -I../src/common \ - -I../src/liblzma/api \ - -I../src/liblzma/common \ - -I../src/liblzma/check \ - -I../src/liblzma/rangecoder \ - -I../src/liblzma/lz \ - -I../src/liblzma/lzma \ - -I../src/liblzma/delta \ - -I../src/liblzma/simple \ - -I../src/liblzma/subblock - -ALL_CPPFLAGS += -DHAVE_CONFIG_H - -# This works with Wine too while using native GNU make, sed, and rm. -ifdef WINE -ifdef W64 -CC := wine c:/MinGW64/bin/x86_64-pc-mingw32-gcc -WINDRES := wine c:/MinGW64/bin/x86_64-pc-mingw32-windres -AR := wine c:/MinGW64/bin/x86_64-pc-mingw32-ar -STRIP := wine c:/MinGW64/bin/x86_64-pc-mingw32-strip -else -CC := wine c:/MinGW/bin/gcc -WINDRES := wine c:/MinGW/bin/windres -AR := wine c:/MinGW/bin/ar -STRIP := wine c:/MinGW/bin/strip -endif -endif - -ifdef DEBUG -# Use echo since it works for this purpose on both Windows and POSIX. -STRIP := echo Skipping strip -else -ALL_CPPFLAGS += -DNDEBUG -endif - -ALL_CPPFLAGS += $(CPPFLAGS) -ALL_CFLAGS += $(CFLAGS) - - -################ -# Common rules # -################ - -.PHONY: all clean pkg -all: liblzma xzdec xz -clean: liblzma-clean xzdec-clean xz-clean - -pkg: all - $(RM) -r pkg - $(MKDIR) -p pkg/lib pkg/include/lzma - $(CP) liblzma.dll xz-dynamic.exe xz.exe xzdec-dynamic.exe xzdec.exe lzmadec-dynamic.exe lzmadec.exe pkg - $(CP) liblzma.a liblzma.def liblzma_static.lib pkg/lib - $(CP) ../src/liblzma/api/lzma.h pkg/include - $(CP) ../src/liblzma/api/lzma/*.h pkg/include/lzma - -%.o: %.rc - $(WINDRES) $(ALL_CPPFLAGS) $< $@ - - -############### -# liblzma.dll # -############### - -.PHONY: liblzma -liblzma: liblzma.dll liblzma_static.lib - -LIBLZMA_SRCS_C = \ - ../src/liblzma/common/alone_decoder.c \ - ../src/liblzma/common/alone_encoder.c \ - ../src/liblzma/common/auto_decoder.c \ - ../src/liblzma/common/block_buffer_decoder.c \ - ../src/liblzma/common/block_buffer_encoder.c \ - ../src/liblzma/common/block_decoder.c \ - ../src/liblzma/common/block_encoder.c \ - ../src/liblzma/common/block_header_decoder.c \ - ../src/liblzma/common/block_header_encoder.c \ - ../src/liblzma/common/block_util.c \ - ../src/liblzma/common/common.c \ - ../src/liblzma/common/easy_buffer_encoder.c \ - ../src/liblzma/common/easy_decoder_memusage.c \ - ../src/liblzma/common/easy_encoder.c \ - ../src/liblzma/common/easy_encoder_memusage.c \ - ../src/liblzma/common/easy_preset.c \ - ../src/liblzma/common/filter_buffer_decoder.c \ - ../src/liblzma/common/filter_buffer_encoder.c \ - ../src/liblzma/common/filter_common.c \ - ../src/liblzma/common/filter_decoder.c \ - ../src/liblzma/common/filter_encoder.c \ - ../src/liblzma/common/filter_flags_decoder.c \ - ../src/liblzma/common/filter_flags_encoder.c \ - ../src/liblzma/common/index.c \ - ../src/liblzma/common/index_decoder.c \ - ../src/liblzma/common/index_encoder.c \ - ../src/liblzma/common/index_hash.c \ - ../src/liblzma/common/stream_buffer_decoder.c \ - ../src/liblzma/common/stream_buffer_encoder.c \ - ../src/liblzma/common/stream_decoder.c \ - ../src/liblzma/common/stream_encoder.c \ - ../src/liblzma/common/stream_flags_common.c \ - ../src/liblzma/common/stream_flags_decoder.c \ - ../src/liblzma/common/stream_flags_encoder.c \ - ../src/liblzma/common/vli_decoder.c \ - ../src/liblzma/common/vli_encoder.c \ - ../src/liblzma/common/vli_size.c \ - ../src/liblzma/check/check.c \ - ../src/liblzma/check/crc32_table.c \ - ../src/liblzma/check/crc64_table.c \ - ../src/liblzma/check/sha256.c \ - ../src/liblzma/rangecoder/price_table.c \ - ../src/liblzma/lz/lz_decoder.c \ - ../src/liblzma/lz/lz_encoder.c \ - ../src/liblzma/lz/lz_encoder_mf.c \ - ../src/liblzma/lzma/fastpos_table.c \ - ../src/liblzma/lzma/lzma2_decoder.c \ - ../src/liblzma/lzma/lzma2_encoder.c \ - ../src/liblzma/lzma/lzma_decoder.c \ - ../src/liblzma/lzma/lzma_encoder.c \ - ../src/liblzma/lzma/lzma_encoder_optimum_fast.c \ - ../src/liblzma/lzma/lzma_encoder_optimum_normal.c \ - ../src/liblzma/lzma/lzma_encoder_presets.c \ - ../src/liblzma/delta/delta_common.c \ - ../src/liblzma/delta/delta_decoder.c \ - ../src/liblzma/delta/delta_encoder.c \ - ../src/liblzma/simple/arm.c \ - ../src/liblzma/simple/armthumb.c \ - ../src/liblzma/simple/ia64.c \ - ../src/liblzma/simple/powerpc.c \ - ../src/liblzma/simple/simple_coder.c \ - ../src/liblzma/simple/simple_decoder.c \ - ../src/liblzma/simple/simple_encoder.c \ - ../src/liblzma/simple/sparc.c \ - ../src/liblzma/simple/x86.c - -LIBLZMA_SRCS_ASM = - -ifdef W64 -LIBLZMA_SRCS_C += \ - ../src/liblzma/check/crc32_fast.c \ - ../src/liblzma/check/crc64_fast.c -else -LIBLZMA_SRCS_ASM += \ - ../src/liblzma/check/crc32_x86.S \ - ../src/liblzma/check/crc64_x86.S -endif - -LIBLZMA_OBJS_C = $(LIBLZMA_SRCS_C:.c=.o) -LIBLZMA_OBJS_ASM = $(LIBLZMA_SRCS_ASM:.S=.o) -LIBLZMA_OBJS = \ - $(LIBLZMA_OBJS_C) \ - $(LIBLZMA_OBJS_ASM) \ - ../src/liblzma/liblzma_w32res.o - -LIBLZMA_OBJS_STATIC_C = $(LIBLZMA_SRCS_C:.c=-static.o) -LIBLZMA_OBJS_STATIC_ASM = $(LIBLZMA_SRCS_ASM:.S=-static.o) -LIBLZMA_OBJS_STATIC = $(LIBLZMA_OBJS_STATIC_C) $(LIBLZMA_OBJS_STATIC_ASM) - -# The sed is needed to remove ordinals from the .def file. I'm not going -# to track the ordinal numbers, so people should link against liblzma.dll -# only by using symbol names. -liblzma.dll: $(LIBLZMA_OBJS) - $(CC) $(ALL_CFLAGS) -shared -o liblzma.dll $(LIBLZMA_OBJS) -Wl,--out-implib,liblzma.a,--output-def,liblzma.def.in - $(SED) 's/ \+@ *[0-9]\+//' liblzma.def.in > liblzma.def - $(RM) liblzma.def.in - $(STRIP) --strip-unneeded liblzma.a - $(STRIP) --strip-all liblzma.dll - -$(LIBLZMA_OBJS_C): %.o: %.c - $(CC) -DDLL_EXPORT $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< - -$(LIBLZMA_OBJS_ASM): %.o: %.S - $(CC) -DDLL_EXPORT $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< - -liblzma_static.lib: $(LIBLZMA_OBJS_STATIC) - $(RM) $@ - $(AR) rcs $@ $(LIBLZMA_OBJS_STATIC) - $(STRIP) --strip-unneeded $@ - -$(LIBLZMA_OBJS_STATIC_C): %-static.o: %.c - $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< - -$(LIBLZMA_OBJS_STATIC_ASM): %-static.o: %.S - $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< - -.PHONY: liblzma-clean -liblzma-clean: - -$(RM) $(LIBLZMA_OBJS) $(LIBLZMA_OBJS_STATIC) liblzma.def.in liblzma.def liblzma.a liblzma.dll liblzma_static.lib - - -########################### -# xzdec.exe & lzmadec.exe # -########################### - -.PHONY: xzdec -xzdec: xzdec-dynamic.exe lzmadec-dynamic.exe xzdec.exe lzmadec.exe - -XZDEC_SRCS = ../src/xzdec/xzdec.c - -xzdec-dynamic.exe: liblzma.dll $(XZDEC_SRCS) ../src/xzdec/xzdec_w32res.o - $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) $(XZDEC_SRCS) ../src/xzdec/xzdec_w32res.o -o $@ liblzma.a - $(STRIP) --strip-all $@ - -lzmadec-dynamic.exe: liblzma.dll $(XZDEC_SRCS) ../src/xzdec/lzmadec_w32res.o - $(CC) $(ALL_CPPFLAGS) -DLZMADEC $(ALL_CFLAGS) $(XZDEC_SRCS) ../src/xzdec/lzmadec_w32res.o -o $@ liblzma.a - $(STRIP) --strip-all $@ - -xzdec.exe: liblzma_static.lib $(XZDEC_SRCS) ../src/xzdec/xzdec_w32res.o - $(CC) -DLZMA_API_STATIC $(ALL_CPPFLAGS) $(ALL_CFLAGS) $(XZDEC_SRCS) ../src/xzdec/xzdec_w32res.o -o $@ liblzma_static.lib - $(STRIP) --strip-all $@ - -lzmadec.exe: liblzma_static.lib $(XZDEC_SRCS) ../src/xzdec/lzmadec_w32res.o - $(CC) -DLZMA_API_STATIC $(ALL_CPPFLAGS) -DLZMADEC $(ALL_CFLAGS) $(XZDEC_SRCS) ../src/xzdec/lzmadec_w32res.o -o $@ liblzma_static.lib - $(STRIP) --strip-all $@ - -.PHONY: xzdec-clean -xzdec-clean: - -$(RM) xzdec-dynamic.exe lzmadec-dynamic.exe xzdec.exe lzmadec.exe ../src/xzdec/xzdec_w32res.o ../src/xzdec/lzmadec_w32res.o - - -########## -# xz.exe # -########## - -.PHONY: xz -xz: xz-dynamic.exe xz.exe - -XZ_SRCS = \ - ../src/xz/args.c \ - ../src/xz/coder.c \ - ../src/xz/file_io.c \ - ../src/xz/hardware.c \ - ../src/xz/main.c \ - ../src/xz/message.c \ - ../src/xz/options.c \ - ../src/xz/signals.c \ - ../src/xz/suffix.c \ - ../src/xz/util.c - -XZ_OBJS = $(XZ_SRCS:.c=.o) -XZ_OBJS_STATIC = $(XZ_SRCS:.c=-static.o) - -$(XZ_OBJS): %.o: %.c - $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< - -xz-dynamic.exe: liblzma.dll $(XZ_OBJS) ../src/xz/xz_w32res.o - $(CC) $(ALL_CFLAGS) $(XZ_OBJS) ../src/xz/xz_w32res.o -o $@ liblzma.a - $(STRIP) --strip-all $@ - -$(XZ_OBJS_STATIC): %-static.o: %.c - $(CC) -DLZMA_API_STATIC $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c -o $@ $< - -xz.exe: liblzma_static.lib $(XZ_OBJS_STATIC) ../src/xz/xz_w32res.o - $(CC) $(ALL_CFLAGS) $(XZ_OBJS_STATIC) ../src/xz/xz_w32res.o -o $@ liblzma_static.lib - $(STRIP) --strip-all $@ - -.PHONY: xz-clean -xz-clean: - -$(RM) $(XZ_OBJS) $(XZ_OBJS_STATIC) ../src/xz/xz_w32res.o xz-dynamic.exe xz.exe diff --git a/Build/source/utils/xz-4.999.9beta/windows/README b/Build/source/utils/xz-4.999.9beta/windows/README deleted file mode 100644 index 0e529de9f05..00000000000 --- a/Build/source/utils/xz-4.999.9beta/windows/README +++ /dev/null @@ -1,155 +0,0 @@ - -XZ Utils on Windows -=================== - -Introduction - - This document explains how to build XZ Utils for Microsoft Windows - using MinGW (Minimalist GNU for Windows). - - This is currently experimental and has got very little testing. - No ABI stability is promised for liblzma.dll. - - -Why MinGW - - XZ Utils code is C99. It should be possible to compile at least - liblzma using any C99 compiler. Compiling the command line tools may - need a little extra work to get them built on new systems, because - they use some features that aren't standardized in POSIX. - - MinGW is free software. MinGW runtime provides some functions that - made porting the command line tools easier. Most(?) of the MinGW - runtime, which gets linked into the resulting binaries, is in the - public domain. - - While most C compilers nowadays support C99 well enough (including - most compilers for Windows), MSVC doesn't. It seems that Microsoft - has no plans to ever support C99. Thus, it is not possible to build - XZ Utils using MSVC without doing a lot of work to convert the code. - Using prebuilt liblzma from MSVC is possible though, since the - liblzma API headers are in C89 and contain some non-standard extra - hacks required by MSVC. - - -Getting and Installing MinGW - - You can download MinGW for 32-bit Windows from Sourceforge: - - http://sourceforge.net/project/showfiles.php?group_id=2435 - - It is enough to pick Automated MinGW Installer and MSYS Base System. - Using the automated installer, select at least runtime, w32api, - core compiler, and MinGW make. From MSYS you actually need only - certain tools, but it is easiest to just install the whole MSYS. - - To build for x86-64 version of Windows, you can download a snapshot - of MinGW targeting for 64-bit Windows: - - http://sourceforge.net/project/showfiles.php?group_id=202880 - - You can use the 32-bit MSYS also for 64-bit build, since we don't - link against anything in MSYS, just use the tools from it. You may - use the make tool from 32-bit MinGW (mingw32-make.exe) although - probably the make.exe from MSYS works too. - - Naturally you can pick the components manually, for example to try - the latest available GCC. It is also possible to use a cross-compiler - to build Windows binaries for example on GNU/Linux, or use Wine to - run the Windows binaries. However, these instructions focus on - building on Windows. - - -Building for 32-bit Windows - - Add MinGW and MSYS to PATH (adjust if you installed to non-default - location): - - set PATH=C:\MinGW\bin;C:\MSYS\1.0\bin;%PATH% - - Then it should be enough to just run mingw32-make in this directory - (the directory containing this README): - - mingw32-make - - -Building for 64-bit Windows - - For 64-bit build the PATH has to point to 64-bit MinGW: - - set PATH=C:\MinGW64\bin;C:\MSYS\1.0\bin;%PATH% - - You need to pass W64=1 to mingw32-make (or make if you don't have - mingw32-make): - - mingw32-make W64=1 - - -Additional Make Flags and Targets - - You may want to try some additional optimizations, which may or - may not make the code faster (and may or may not hit possible - compiler bugs more easily): - - mingw32-make CFLAGS="-O3 -fomit-frame-pointer -funroll-loops" - - If you want to enable assertions (the assert() macro), use DEBUG=1. - You may want to disable optimizations too if you plan to actually - debug the code. Never use DEBUG=1 for production builds! - - mingw32-make DEBUG=1 CFLAGS="-g -O0" - - To copy the built binaries and required headers into a clean - directory, use the pkg target: - - mingw32-make pkg - - It first removes a possibly existing pkg directory, and then - recreates it with the required files. - - TODO: The pkg target doesn't copy any license or other copyright - related information into the pkg directory. - - -Creating an Import Library for MSVC - - The included Makefile creates import library liblzma.a which works - only(?) with MinGW. To use liblzma.dll for MSVC, you need to create - liblzma.lib using the lib command from MSVC: - - lib /def:liblzma.def /out:liblzma.lib /machine:ix86 - - On x86-64, the /machine argument has to naturally be changed: - - lib /def:liblzma.def /out:liblzma.lib /machine:x64 - - -To Do - - - Test Win64 support and add instructions about getting x86-64 - version of MinGW. - - - Creating the import library for other compilers/linkers - - - Building with other compilers for Windows - - - liblzma currently uses cdecl. Would stdcall be more compatible? - - - Support building more size-optimized liblzma (the HAVE_SMALL - define and other things that are needed) - - - Support selecting which parts of liblzma to build to make the - library even smaller. - - - Use the configure script on Windows just like it is used on all - the other systems? - - -Bugs - - Report bugs to (in English or Finnish). - - Take into account that I don't have MSVC and I cannot very easily - test anything on Windows. As of writing, I have tried MinGW and the - resulting binaries only under 32-bit Wine. - diff --git a/Build/source/utils/xz-4.999.9beta/windows/config.h b/Build/source/utils/xz-4.999.9beta/windows/config.h deleted file mode 100644 index 4d3371348db..00000000000 --- a/Build/source/utils/xz-4.999.9beta/windows/config.h +++ /dev/null @@ -1,165 +0,0 @@ -/* Define to 1 if using x86 assembler optimizations. */ -/* #undef HAVE_ASM_X86 */ - -/* Define to 1 if using x86_64 assembler optimizations. */ -/* #undef HAVE_ASM_X86_64 */ - -/* Define to 1 if crc32 integrity check is enabled. */ -#define HAVE_CHECK_CRC32 1 - -/* Define to 1 if crc64 integrity check is enabled. */ -#define HAVE_CHECK_CRC64 1 - -/* Define to 1 if sha256 integrity check is enabled. */ -#define HAVE_CHECK_SHA256 1 - -/* Define to 1 if decoder components are enabled. */ -#define HAVE_DECODER 1 - -/* Define to 1 if arm decoder is enabled. */ -#define HAVE_DECODER_ARM 1 - -/* Define to 1 if armthumb decoder is enabled. */ -#define HAVE_DECODER_ARMTHUMB 1 - -/* Define to 1 if delta decoder is enabled. */ -#define HAVE_DECODER_DELTA 1 - -/* Define to 1 if ia64 decoder is enabled. */ -#define HAVE_DECODER_IA64 1 - -/* Define to 1 if lzma1 decoder is enabled. */ -#define HAVE_DECODER_LZMA1 1 - -/* Define to 1 if lzma2 decoder is enabled. */ -#define HAVE_DECODER_LZMA2 1 - -/* Define to 1 if powerpc decoder is enabled. */ -#define HAVE_DECODER_POWERPC 1 - -/* Define to 1 if sparc decoder is enabled. */ -#define HAVE_DECODER_SPARC 1 - -/* Define to 1 if subblock decoder is enabled. */ -/* #undef HAVE_DECODER_SUBBLOCK */ - -/* Define to 1 if x86 decoder is enabled. */ -#define HAVE_DECODER_X86 1 - -/* Define to 1 if encoder components are enabled. */ -#define HAVE_ENCODER 1 - -/* Define to 1 if arm encoder is enabled. */ -#define HAVE_ENCODER_ARM 1 - -/* Define to 1 if armthumb encoder is enabled. */ -#define HAVE_ENCODER_ARMTHUMB 1 - -/* Define to 1 if delta encoder is enabled. */ -#define HAVE_ENCODER_DELTA 1 - -/* Define to 1 if ia64 encoder is enabled. */ -#define HAVE_ENCODER_IA64 1 - -/* Define to 1 if lzma1 encoder is enabled. */ -#define HAVE_ENCODER_LZMA1 1 - -/* Define to 1 if lzma2 encoder is enabled. */ -#define HAVE_ENCODER_LZMA2 1 - -/* Define to 1 if powerpc encoder is enabled. */ -#define HAVE_ENCODER_POWERPC 1 - -/* Define to 1 if sparc encoder is enabled. */ -#define HAVE_ENCODER_SPARC 1 - -/* Define to 1 if subblock encoder is enabled. */ -/* #undef HAVE_ENCODER_SUBBLOCK */ - -/* Define to 1 if x86 encoder is enabled. */ -#define HAVE_ENCODER_X86 1 - -/* Define to 1 if the system supports fast unaligned memory access. */ -#define HAVE_FAST_UNALIGNED_ACCESS 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_LIMITS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 to enable bt2 match finder. */ -#define HAVE_MF_BT2 1 - -/* Define to 1 to enable bt3 match finder. */ -#define HAVE_MF_BT3 1 - -/* Define to 1 to enable bt4 match finder. */ -#define HAVE_MF_BT4 1 - -/* Define to 1 to enable hc3 match finder. */ -#define HAVE_MF_HC3 1 - -/* Define to 1 to enable hc4 match finder. */ -#define HAVE_MF_HC4 1 - -/* Define to 1 if optimizing for size. */ -/* #undef HAVE_SMALL */ - -/* Define to 1 if stdbool.h conforms to C99. */ -#define HAVE_STDBOOL_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if the system has the type `uintptr_t'. */ -#define HAVE_UINTPTR_T 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TIME_H 1 - -/* Define to 1 if you have the `utime' function. */ -#define HAVE_UTIME 1 - -/* Define to 1 or 0, depending whether the compiler supports simple visibility - declarations. */ -#define HAVE_VISIBILITY 0 - -/* Define to 1 if the system has the type `_Bool'. */ -#define HAVE__BOOL 1 - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "XZ Utils" - -/* The size of `size_t', as computed by sizeof. */ -#ifdef _WIN64 -# define SIZEOF_SIZE_T 8 -#else -# define SIZEOF_SIZE_T 4 -#endif - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ -#if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -#elif ! defined __LITTLE_ENDIAN__ -/* # undef WORDS_BIGENDIAN */ -#endif -- cgit v1.2.3